From 9953f4cee02f2781ee5da2e42bcb837c1a849cb0 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 12 Dec 2013 20:45:59 +0200 Subject: First round of VMS changes. --- ChangeLog | 6 + README_d/ChangeLog | 3 + README_d/README.VMS | 27 +- io.c | 20 +- main.c | 4 + vms/ChangeLog | 33 + vms/config_h.com | 1652 ++++++++++++++++++++++++++++++++++++ vms/descrip.mms | 54 +- vms/fcntl.h | 10 - vms/gawk_ident.com | 21 + vms/gawkmisc.vms | 6 + vms/generate_config_vms_h_gawk.com | 290 +++++++ vms/vms-conf.h | 678 --------------- vms/vms_crtl_init.c | 470 ++++++++++ vms/vms_gawk_main_wrapper.c | 487 +++++++++++ vms/vms_misc.c | 13 +- vms/vmsbuild.com | 46 +- vms/vmstest.com | 2 +- 18 files changed, 3089 insertions(+), 733 deletions(-) create mode 100644 vms/config_h.com delete mode 100644 vms/fcntl.h create mode 100644 vms/gawk_ident.com create mode 100644 vms/generate_config_vms_h_gawk.com delete mode 100644 vms/vms-conf.h create mode 100644 vms/vms_crtl_init.c create mode 100644 vms/vms_gawk_main_wrapper.c diff --git a/ChangeLog b/ChangeLog index 88bf4c21..9df02847 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2013-12-12 John E. Malmberg + + * io.c (redirect): Add additional VMS error codes. + (nextfile): Retry open after closing some files. + * main.c : VMS needs to fix up argv[0] and timezone. + 2013-12-10 Scott Deifik * io.c (closemaybesocket): Add definition for DJGPP. diff --git a/README_d/ChangeLog b/README_d/ChangeLog index 49c30f13..50681113 100644 --- a/README_d/ChangeLog +++ b/README_d/ChangeLog @@ -1,3 +1,6 @@ +2013-12-05 John E. Malmberg + * readme.vms: updated with current build information. + 2013-07-02 Arnold D. Robbins * README.pc: Update that |& also now works on MinGW. diff --git a/README_d/README.VMS b/README_d/README.VMS index b47cb0f7..84bfe2f4 100644 --- a/README_d/README.VMS +++ b/README_d/README.VMS @@ -6,21 +6,36 @@ CC and LINK commands, and there's also a Makefile for use with the MMS utility. From the source directory, use either |$ @[.VMS]VMSBUILD.COM or - |$ MMS/DECRIPTION=[.VMS]DECSRIP.MMS GAWK + |$ MMS/DESCRIPTION=[.VMS]DESCRIP.MMS gawk +or + |$ MMK/DESCRIPTION=[.VMS]DESCRIP.MMS gawk + +Note that on IA64 and Alpha the case of the target may be important. DEC C -- use either vmsbuild.com or descrip.mms as is. + DEC C is also known as Compaq C and HP C. + VAX C -- use `@vmsbuild VAXC' or `MMS/MACRO=("VAXC")'. On a system with both VAX C and DEC C installed where DEC C is the default, use `MMS/MACRO=("VAXC","CC=CC/VAXC")' for the MMS variant; for the vmsbuild.com variant, any need for `/VAXC' will be detected automatically. + * IMPORTANT NOTE * VAX C should not be used on VAX/VMS 5.5-2 and + later. Use DEC C instead. + GNU C -- use `@vmsbuild GNUC' or `MMS/MACRO=("GNUC")'. On a system where the GCC command is not already defined, use either `@vmsbuild GNUC DO_GNUC_SETUP' or `MMS/MACRO=("GNUC","DO_GNUC_SETUP")'. - Tested under Alpha/VMS V7.1 using DEC C V6.4. GAWK should work -without modifications for VMS V4.6 and up. +Most recent builds are using: + OpenVMS VAX 7.3 using DEC C 6.4 + OpenVMS Alpha 8.3 using HP C V 7.3 + OpenVMS Alpha 8.4 using HP C V 7.3 + OpenVMS IA64 8.4 using HP C V 7.3 + +GAWK was originally ported for VMS V4.6 and up. It has not been tested +with a release that old for some time. Installing GAWK on VMS: @@ -79,9 +94,3 @@ separated list of directory specifications. When defining it, the value should be quoted so that it retains a single translation, not a multi-translation RMS searchlist. ------------------------------- -Thu Jun 18 05:22:10 IDT 2009 -============================ - -On OpenVMS V7.3 (Alpha) the "manyfiles" test is known to fail. The reason -is not (yet) known. diff --git a/io.c b/io.c index 4f244532..ac1855ba 100644 --- a/io.c +++ b/io.c @@ -121,6 +121,11 @@ #endif #if defined(VMS) +#include +#ifndef SS$_EXBYTLM +#define SS$_EXBYTLM 0x2a14 /* VMS 8.4 seen */ +#endif +#include #define closemaybesocket(fd) close(fd) #endif @@ -462,6 +467,11 @@ nextfile(IOBUF **curfile, bool skipping) /* IOBUF management: */ errno = 0; fd = devopen(fname, binmode("r")); + if (fd == INVALID_HANDLE && errno == EMFILE) { + close_one(); + close_one(); + fd = devopen(fname, binmode("r")); + } errcode = errno; if (! do_traditional) update_ERRNO_int(errno); @@ -948,13 +958,13 @@ redirect(NODE *redir_exp, int redirtype, int *errflg) if (errno == EMFILE || errno == ENFILE) close_one(); #ifdef VMS - /* Alpha/VMS V7.1's C RTL is returning this instead + /* Alpha/VMS V7.1+ C RTL is returning these instead of EMFILE (haven't tried other post-V6.2 systems) */ -#define SS$_EXQUOTA 0x001C -#define SS$_EXBYTLM 0x2a14 /* VMS 8.4 seen */ - else if (errno == EIO && + else if ((errno == EIO || errno == EVMSERR) && (vaxc$errno == SS$_EXQUOTA || - vaxc$errno == SS$_EXBYTLM)) + vaxc$errno == SS$_EXBYTLM || + vaxc$errno == RMS$_ACC || + vaxc$errno == RMS$_SYN)) close_one(); #endif else { diff --git a/main.c b/main.c index e0bc1954..a47b025e 100644 --- a/main.c +++ b/main.c @@ -194,6 +194,10 @@ static const struct option optab[] = { { NULL, 0, NULL, '\0' } }; +/* VMS needs some special fix-ups for the program name */ +#ifdef __VMS +#include "vms_gawk_main_wrapper.c" +#endif /* main --- process args, parse program, run it, clean up */ diff --git a/vms/ChangeLog b/vms/ChangeLog index f8344654..afcdf89f 100644 --- a/vms/ChangeLog +++ b/vms/ChangeLog @@ -1,3 +1,36 @@ +2013-12-08 John E. Malmberg + + * descrip.mms: Add IEEE float for non-vax. + Add vms_crtl_init.c. + Remove code to generate version.c + * generate_config_vms_h_gawk.com (__attribute__): Removed + definition from here. + * version_c.com: removed no longer used. + * vmsbuild.com: Add IEEE float for non-vax. + Add vms_crtl_init.c + Remove code to generate version.c + Changes that should have been in the previous commit. + * vms_misc.c (vms_open): VMS CRTL for 8.3 Alpha is setting + errno to ENOENT instead of EISDIR for ".". + +2013-12-05 John E. Malmberg + + * New config_h.com to generate config.h + * New gawk_ident.com generates ident line for link option file. + * Add version_c.com to create version.c from version.in. + * Remove fcntl.h covering up real fcntl.h. If an older version + of VMS needs this file, the build procedure should be updated + to generate it from a template. + * descrip.mms: Use command files to generate files based + on same input files as a Linux build. + * gawkmisc.vms (files_are_same): support _USE_STD_STAT for VMS 8.x. + * generate_config_vms_h_gawk.com: Generates a helper file + config_vms.h to cover issues config_h.com can not handle. + * vmsbuild.com: Use command files to generate files based + on the same input files as a Linux build. + * vms_misc.c (vms_open): VMS CRTL setting errno to ENOENT where + it should be set to EMFILE. + 2013-12-06 Arnold D. Robbins * vms-conf.h (__attribute__): Removed definition from here; fixed diff --git a/vms/config_h.com b/vms/config_h.com new file mode 100644 index 00000000..406e1266 --- /dev/null +++ b/vms/config_h.com @@ -0,0 +1,1652 @@ +$! File: config_h.com +$! +$! $Id: config_h.com,v 1.1.1.1 2012/12/02 19:25:21 wb8tyw Exp $ +$! +$! This procedure attempts to figure out how to build a config.h file +$! for the current project. +$! +$! The P1 parameter of "NOBUILTINS" inhibits the default #include +$! that is normally added. This include can cause side effects if +$! special VMS compiler settings are used. +$! +$! The CONFIGURE shell script will be examined for hints and a few symbols +$! but most of the tests will not produce valid results on OpenVMS. Some +$! will produce false positives and some will produce false negatives. +$! +$! It is easier to just read the config.h_in file and make up tests based +$! on what is in it! +$! +$! This file will create an empty config_vms.h file if one does not exist. +$! The config_vms.h is intended for manual edits to handle things that +$! this procedure can not. +$! +$! The config_vms.h will be invoked by the resulting config.h file. +$! +$! This procedure knows about the DEC C RTL on the system it is on. +$! Future versions may be handle the GNV, the OpenVMS porting library, +$! and others. +$! +$! This procedure may not guess the options correctly for all architectures, +$! and is a work in progress. +$! +$! Copyright 2011, John Malmberg +$! +$! Permission to use, copy, modify, and/or distribute this software for any +$! purpose with or without fee is hereby granted, provided that the above +$! copyright notice and this permission notice appear in all copies. +$! +$! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +$! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +$! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +$! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +$! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +$! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +$! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +$! +$! 15-Jan-2001 J. Malmberg Original +$! 29-Apr-2001 J. Malmberg Also look for config.*in* in a [.include] +$! subdirectory +$! 30-Apr-2001 J. Malmberg Update for SAMBA checks +$! 09-Apr-2005 J. Malmberg Update for RSYNC and large file. +$! 29-Sep-2011 J. Malmberg Update for Bash 4.2 +$! 01-Mar-2012 J. Malmberg Warn about getcwd(0,0) +$! 21-Dec-2012 J. Malmberg Update for gawk +$!============================================================================ +$! +$ss_normal = 1 +$ss_abort = 44 +$ss_control_y = 1556 +$status = ss_normal +$on control_y then goto control_y +$on warning then goto general_error +$! +$! Some information for writing timestamps to created files +$!---------------------------------------------------------- +$my_proc = f$environment("PROCEDURE") +$my_proc_file = f$parse(my_proc,,,"NAME") + f$parse(my_proc,,,"TYPE") +$tab[0,8] = 9 +$datetime = f$element(0,".",f$cvtime(,"ABSOLUTE","DATETIME")) +$username = f$edit(f$getjpi("","USERNAME"),"TRIM") +$! +$pid = f$getjpi("","PID") +$tfile1 = "SYS$SCRATCH:config_h_temp1_''pid'.TEMP" +$dchfile = "SYS$SCRATCH:config_h_decc_''pid'.TEMP" +$configure_script = "SYS$SCRATCH:configure_script_''pid'.TEMP" +$! +$! Get the system type +$!---------------------- +$arch_type = f$getsyi("arch_type") +$! +$! Does config_vms.h exist? +$!------------------------- +$update_config_vms = 0 +$file = f$search("sys$disk:[]config_vms.h") +$if file .nes. "" +$then +$ write sys$output "Found existing custom file ''file'." +$else +$ update_config_vms = 1 +$ write sys$output "Creating new sys$disk:[]config_vms.h for you." +$ gosub write_config_vms +$endif +$! +$! +$! On some platforms, DCL search has problems with searching a file +$! on a NFS mounted volume. So copy it to sys$scratch: +$! +$if f$search(configure_script) .nes. "" then delete 'configure_script';* +$copy PRJ_ROOT:configure 'configure_script' +$! +$! +$! Write out the header +$!---------------------- +$gosub write_config_h_header +$! +$! +$! +$! config.h.in could have at least five different names depending +$! on how it was transferred to OpenVMS +$!------------------------------------------------------------------ +$cfile = f$search("sys$disk:[]config.h.in") +$if cfile .eqs. "" +$then +$ cfile = f$search("sys$disk:[]config.h_in") +$ if cfile .eqs. "" +$ then +$ cfile = f$search("sys$disk:[]configh.in") +$ if cfile .eqs. "" +$ then +$ cfile = f$search("sys$disk:[]config__2eh.in") +$ if cfile .eqs. "" +$ then +$ cfile = f$search("sys$disk:[]config.h__2ein") +$ endif +$ endif +$ endif +$endif +$if f$trnlnm("PRJ_INCLUDE") .nes. "" +$then +$ cfile = f$search("PRJ_INCLUDE:config.h.in") +$ if cfile .eqs. "" +$ then +$ cfile = f$search("PRJ_INCLUDE:config.h_in") +$ if cfile .eqs. "" +$ then +$ cfile = f$search("PRJ_INCLUDE:config__2eh.in") +$ if cfile .eqs. "" +$ then +$ cfile = f$search("PRJ_INCLUDE:config__2eh.in") +$ if cfile .eqs. "" +$ then +$ cfile = f$search("PRJ_INCLUDE:config.h__2ein") +$ endif +$ endif +$ endif +$ endif +$endif +$if cfile .eqs. "" +$then +$ write sys$output "Can not find sys$disk:config.h.in" +$ line_out = "Looked for config.h.in, config.h_in, configh.in, " +$ line_out = line_out + "config__2eh.in, "config.h__2ein" +$ write/symbol sys$output line_out +$ if f$trnlnm("PRJ_INCLUDE") .nes. "" +$ then +$ write sys$output "Also looked in PRJ_INCLUDE: for these files." +$ endif +$! +$ write tf "" +$ write tf - + " /* Could not find sys$disk:config.h.in */" +$ write tf - + " /* Looked also for config.h_in, configh.in, config__2eh.in, */" +$ write tf - + " /* config.h__2ein */" +$ if f$trnlnm("PRJ_INCLUDE") .nes. "" +$ then +$ write tf - + " /* Also looked in PRJ_INCLUDE: for these files. */" +$ endif +$ write tf - + "/*--------------------------------------------------------------*/ +$ write tf "" +$ goto write_tail +$endif +$! +$! +$! Locate the DECC libraries in use +$!----------------------------------- +$decc_rtldef = f$parse("decc$rtldef","sys$library:.tlb;0") +$decc_shr = f$parse("decc$shr","sys$share:.exe;0") +$! +$! Dump the DECC header names into a file +$!---------------------------------------- +$if f$search(dchfile) .nes. "" then delete 'dchfile';* +$if f$search(tfile1) .nes. "" then delete 'tfile1';* +$define/user sys$output 'tfile1' +$library/list 'decc_rtldef' +$open/read/error=rtldef_loop1_end tf1 'tfile1' +$open/write/error=rtldef_loop1_end tf2 'dchfile' +$rtldef_loop1: +$ read/end=rtldef_loop1_end tf1 line_in +$ line_in = f$edit(line_in,"TRIM,COMPRESS") +$ key1 = f$element(0," ",line_in) +$ key2 = f$element(1," ",line_in) +$ if key1 .eqs. " " .or. key1 .eqs. "" then goto rtldef_loop1 +$ if key2 .nes. " " .and. key2 .nes. "" then goto rtldef_loop1 +$ write tf2 "|",key1,"|" +$ goto rtldef_loop1 +$rtldef_loop1_end: +$if f$trnlnm("tf1","lnm$process",,"SUPERVISOR") .nes. "" then close tf1 +$if f$trnlnm("tf2","lnm$process",,"SUPERVISOR") .nes. "" then close tf2 +$if f$search(tfile1) .nes. "" then delete 'tfile1';* +$! +$! +$! Now calculate what should be in the file from reading +$! config.h.in and CONFIGURE. +$!--------------------------------------------------------------- +$open/read inf 'cfile' +$do_comment = 0 +$if_block = 0 +$cfgh_in_loop1: +$!set nover +$ read/end=cfgh_in_loop1_end inf line_in +$ xline = f$edit(line_in,"TRIM,COMPRESS") +$! +$! Blank line handling +$!--------------------- +$ if xline .eqs. "" +$ then +$ write tf "" +$ goto cfgh_in_loop1 +$ endif +$ xlen = f$length(xline) +$ key = f$extract(0,2,xline) +$! +$! deal with comments by copying exactly +$!----------------------------------------- +$ if (do_comment .eq. 1) .or. (key .eqs. "/*") +$ then +$ do_comment = 1 +$ write tf line_in +$ key = f$extract(xlen - 2, 2, xline) +$ if key .eqs. "*/" then do_comment = 0 +$ goto cfgh_in_loop1 +$ endif +$! +$! Some quick parsing +$!---------------------- +$ keyif = f$extract(0,3,xline) +$ key1 = f$element(0," ",xline) +$ key2 = f$element(1," ",xline) +$ key2a = f$element(0,"_",key2) +$ key2b = f$element(1,"_",key2) +$ key2_len = f$length(key2) +$ key2_h = f$extract(key2_len - 2, 2, key2) +$ key2_t = f$extract(key2_len - 5, 5, key2) +$ if key2_t .eqs. "_TYPE" then key2_h = "_T" +$ key64 = 0 +$ if f$locate("64", xline) .lt. xlen then key64 = 1 +$! +$!write sys$output "xline = ''xline'" +$! +$! Comment out this section of the ifblock +$!----------------------------------------- +$ if if_block .ge. 3 +$ then +$ write tf "/* ", xline, " */" +$ if keyif .eqs. "#en" then if_block = 0 +$ goto cfgh_in_loop1 +$ endif +$! +$! Handle the end of an ifblock +$!------------------------------- +$ if keyif .eqs. "#en" +$ then +$ write tf xline +$ if_block = 0 +$ goto cfgh_in_loop1 +$ endif +$! +$ if key1 .eqs. "#ifndef" +$ then +$! Manual check for _ALL_SOURCE on AIX error +$!----------------------------------------------- +$ if key2 .eqs. "_ALL_SOURCE" +$ then +$ write tf "/* ", xline, " */" +$! +$! Ignore the rest of the block +$!-------------------------------------- +$ if_block = 3 +$ goto cfgh_in_loop1 +$ endif +$ endif +$! +$! +$! Default action for an #if/#else/#endif +$!------------------------------------------ +$ if keyif .eqs. "#if" .or. keyif .eqs. "#el" +$ then +$ if_block = 1 +$ write tf xline +$ goto cfgh_in_loop1 +$ endif +$! +$! +$! Process "normal?" stuff +$!--------------------------- +$ if key1 .eqs. "#undef" +$ then +$ key2c = f$element(2, "_", key2) +$ if (key2c .eqs. "_") .or. (key2c .eqs. "H") then key2c = "" +$ key2d = f$element(3, "_", key2) +$ if (key2d .eqs. "_") .or. (key2d .eqs. "H") then key2d = "" +$ key2e = f$element(4, "_", key2) +$ if (key2e .eqs. "_") .or. (key2e .eqs. "H") then key2e = "" +$ if key2d .eqs. "T" +$ then +$ if key2e .eqs. "TYPE" +$ then +$ key2_h = "_T" +$ key2d = "" +$ endif +$ endif +$! +$ double_under = 0 +$! +$ if key2 .eqs. "bits16_t" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' short" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "u_bits16_t" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' unsigned short" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "bits32_t" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' int" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "u_bits32_t" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' unsigned int" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "intmax_t" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#ifdef __VAX" +$ write tf "#define ''key2' long" +$ write tf "#else" +$ write tf "#define ''key2' long long" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "uintmax_t" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#ifdef __VAX" +$ write tf "#define ''key2' unsigned long" +$ write tf "#else" +$ write tf "#define ''key2' unsigned long long" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "socklen_t" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' int" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "GETGROUPS_T" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' gid_t" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_SYS_SIGLIST" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 0" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_SYS_ERRLIST" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_STRUCT_DIRENT_D_INO" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! ! The header files have this information, however +$! ! The ioctl() call only works on sockets. +$! if key2 .eqs. "FIONREAD_IN_SYS_IOCTL" +$! then +$! write tf "#ifndef ''key2'" +$! write tf "#define ''key2' 1" +$! write tf "#endif" +$! goto cfgh_in_loop1 +$! endif +$! +$! ! The header files have this information, however +$! ! The ioctl() call only works on sockets. +$! if key2 .eqs. "GWINSZ_IN_SYS_IOCTL" +$! then +$! write tf "#ifndef ''key2'" +$! write tf "#define ''key2' 1" +$! write tf "#endif" +$! goto cfgh_in_loop1 +$! endif +$! +$! ! The header files have this information, however +$! ! The ioctl() call only works on sockets. +$! if key2 .eqs. "STRUCT_WINSIZE_IN_SYS_IOCTL" +$! then +$! write tf "#ifndef ''key2'" +$! write tf "#define ''key2' 0" +$! write tf "#endif" +$! goto cfgh_in_loop1 +$! endif +$! +$ if key2 .eqs. "HAVE_STRUCT_TM_TM_ZONE" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_TM_ZONE" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_TIMEVAL" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_TZNAME" +$ then +$ write tf "#if __CRTL_VER >= 70000000" +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "WEXITSTATUS_OFFSET" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 2" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_GETPW_DECLS" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_CONFSTR" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_PRINTF" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_SBRK" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_STRSIGNAL" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 0" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2a .eqs. "HAVE_DECL_STRTOLD" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 0" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_STRTOIMAX" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 0" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_STRTOL" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_STRTOLL" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_STRTOUL" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_STRTOULL" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_STRTOUMAX" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 0" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "GETPGRP_VOID" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "NAMED_PIPES_MISSING" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "OPENDIR_NOT_ROBUST" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "PGRP_PIPE" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "CAN_REDEFINE_GETENV" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_PRINTF_A_FORMAT" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "CTYPE_NON_ASCII" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_LANGINFO_CODESET" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_LC_MESSAGES" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! This wants execve() to do this automagically to pass. +$! if key2 .eqs. "HAVE_HASH_BANG_EXEC" +$! then +$! write tf "#ifndef ''key2'" +$! write tf "#define ''key2' 1" +$! write tf "#endif" +$! goto cfgh_in_loop1 +$! endif +$! +$ if key2 .eqs. "ICONV_CONST" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2'" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "VOID_SIGHANDLER" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_POSIX_SIGNALS" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "UNUSABLE_RT_SIGNALS" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2a .eqs. "HAVE_DECL_FPURGE" +$ then +$ write tf "#ifndef ''key2a'" +$ write tf "#define ''key2a' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_SETREGID" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_POSIX_SIGSETJMP" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_LIBDL" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "STRCOLL_BROKEN" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "DUP_BROKEN" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! This is for a test that getcwd(0,0) works. +$! It does not on VMS. +$!-------------------------- +$ if key2 .eqs. "GETCWD_BROKEN" +$ then +$ write sys$output "" +$ write sys$output - + "%CONFIG_H-I-NONPORT, ''key2' being tested for!" +$ write sys$output - + "-CONFIG_H-I-GETCWD, GETCWD(0,0) does not work on VMS." +$ write sys$output - + "-CONFIG_H-I-GETCWD2, Work around hack probably required." +$ write sys$output - + "-CONFIG_H-I-REVIEW, Manual Code review required!" +$ if update_config_vms +$ then +$ open/append tfcv sys$disk:[]config_vms.h +$ write tfcv "" +$ write tfcv - + "/* Check config.h for use of ''key2' settings */" +$ write tfcv "" +$ close tfcv +$ endif +$ +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2a .eqs. "HAVE" .or. key2a .eqs. "STAT" +$ then +$! +$! Process extra underscores +$!------------------------------------ +$ if f$locate("HAVE___", key2) .lt. key2_len +$ then +$ key2b = "__" + key2d +$ key2d = "" +$ double_under = 1 +$ else +$ if f$locate("HAVE__", key2) .lt. key2_len +$ then +$ key2b = "_" + key2c +$ key2c = "" +$ double_under = 1 +$ endif +$ endif +$! +$ if key2_h .eqs. "_H" +$ then +$! +$! Looking for a header file +$!--------------------------------------- +$ headf = key2b +$ if key2c .nes. "" then headf = headf + "_" + key2c +$ if key2d .nes. "" then headf = headf + "_" + key2d +$! +$! (key2b .eqs. "READLINE") +$! +$! Some special parsing +$!------------------------------------------ +$ if (key2b .eqs. "SYS") .or. (key2b .eqs. "ARPA") .or. - + (key2b .eqs. "NET") .or. (key2b .eqs. "NETINET") +$ then +$ if key2c .nes. "" +$ then +$ headf = key2c +$ if key2d .nes. "" then headf = key2c + "_" + key2d +$ endif +$ endif +$! +$! And of course what's life with out some special cases +$!-------------------------------------------------------------------- +$ if key2b .eqs. "FILE" +$ then +$ write sys$output "" +$ write sys$output - + "%CONFIG_H-I-NONPORT, ''key2' being asked for!" +$ write sys$output - + "-CONFIG_H-I-FILE_OLD, file.h will not be configured as is obsolete!" +$ write sys$output - + "-CONFIG_H_I-FCNTL_NEW, "Expecting fcntl.h to be configured instead!" +$ write sys$output - + "-CONFIG_H_I-FCNTL_CHK, "Unable to verify at this time!" +$ write sys$output - + "-CONFIG_H-I-REVIEW, Manual Code review required!" +$! +$ if update_config_vms +$ then +$ open/append tfcv sys$disk:[]config_vms.h +$ write tfcv "" +$ write tfcv - + "/* Check config.h for use of fcntl.h instead of file.h */" +$ write tfcv "" +$ close tfcv +$ endif +$ endif +$! +$! Now look it up in the DEC C RTL +$!--------------------------------------------- +$ define/user sys$output nl: +$ define/user sys$error nl: +$ search/output=nl: 'dchfile' |'headf'|/exact +$ if '$severity' .eq. 1 +$ then +$ if key64 then write tf "#ifndef __VAX" +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$if p2 .nes. "" then write sys$output "''dchfile' - #define ''key2' 1" +$ write tf "#endif" +$ if key64 then write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ else +$! +$! Looking for a routine or a symbol +$!------------------------------------------------ +$ if key2c .eqs. "MACRO" +$ then +$ if (key2b .eqs. "FILE") .or. (key2b .eqs. "DATE") - + .or. (key2b .eqs. "LINE") .or. (key2b .eqs. "TIME") +$ then +$ write tf "#ifndef HAVE_''key2b'" +$ write tf "#define HAVE_''key2b' 1" +$ write tf "#endif" +$ endif +$ goto cfgh_in_loop1 +$ endif +$! +$! Special false tests +$!------------------------------------- +$ if double_under +$ then +$ if key2b .eqs. "_FCNTL" .or. key2b .eqs. "__FCNTL" +$ then +$ write tf "/* #undef HAVE_''key2b' */" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2b .eqs. "_STAT" .or. key2b .eqs. "__STAT" +$ then +$ write tf "/* #undef HAVE_''key2b' */" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2b .eqs. "_READ" .or. key2b .eqs. "__READ" +$ then +$ write tf "/* #undef HAVE_''key2b' */" +$ goto cfgh_in_loop1 +$ endif +$ endif +$! +$ keysym = key2b +$ if key2c .nes. "" then keysym = keysym + "_" + key2c +$ if key2d .nes. "" then keysym = keysym + "_" + key2d +$ if key2e .nes. "" then keysym = keysym + "_" + key2e +$! +$! +$! Stat structure members +$!------------------------------------- +$ if key2b .eqs. "STRUCT" +$ then +$ if key2c .eqs. "STAT" .and (key2d .nes. "") +$ then +$ key2b = key2b + "_" + key2c + "_" + key2d +$ key2c = key2e +$ key2d = "" +$ key2e = "" +$ endif +$ endif +$ if (key2b .eqs. "ST") .or. (key2b .eqs. "STRUCT_STAT_ST") +$ then +$ keysym = "ST" + "_" + key2c +$ keysym = f$edit(keysym,"LOWERCASE") +$ endif +$ if key2a .eqs. "STAT" +$ then +$ if (f$locate("STATVFS", key2b) .eq. 0) .and. key2c .eqs. "" +$ then +$ keysym = f$edit(key2b, "LOWERCASE") +$ endif +$!$ if (key2b .eqs. "STATVFS" .or. key2b .eqs. "STATFS2" - +$! .or. key2b .eqs. "STATFS3") .and. key2c .nes. "" +$! +$ if (key2b .eqs. "STATVFS") .and. key2c .nes. "" +$ then +$! Should really verify that the structure +$! named by key2b actually exists first. +$!------------------------------------------------------------ +$! +$! Statvfs structure members +$!------------------------------------------------- +$ keysym = "f_" + f$edit(key2c,"LOWERCASE") +$ endif +$ endif +$! +$! UTMPX structure members +$!-------------------------------------- +$ if key2b .eqs. "UT" .and. key2c .eqs. "UT" +$ then +$ keysym = "ut_" + f$edit(key2d,"LOWERCASE") +$ endif +$! +$ if f$locate("MMAP",key2) .lt. key2_len +$ then +$ write sys$output "" +$ write sys$output - + "%CONFIG_H-I-NONPORT, ''key2' being asked for!" +$ write sys$output - + "-CONFIG_H-I-MMAP, MMAP operations only work on STREAM and BINARY files!" +$ write sys$output - + "-CONFIG_H-I-REVIEW, Manual Code review required!" +$ if update_config_vms +$ then +$ open/append tfcv sys$disk:[]config_vms.h +$ write tfcv "" +$ write tfcv - + "/* Check config.h for use of ''key2' settings */" +$ write tfcv "" +$ close tfcv +$ endif +$ endif +$! +$! +$ if keysym .eqs. "CRYPT" +$ then +$ write sys$output "" +$ write sys$output - + "%CONFIG_H-I-NONPORT, ''key2' being asked for!" +$ write sys$output - + "-CONFIG_H-I-CRYPT, CRYPT operations on the VMS SYSUAF may not work!" +$ write sys$output - + "-CONFIG_H-I-REVIEW, Manual Code review required!" +$ if update_config_vms +$ then +$ open/append tfcv sys$disk:[]config_vms.h +$ write tfcv "" +$ write tfcv - + "/* Check config.h for use of ''keysym' */" +$ write tfcv "" +$ close tfcv +$ endif +$ endif +$! +$! +$ if keysym .eqs. "EXECL" +$ then +$ write sys$output "" +$ write sys$output - + "%CONFIG_H-I-NONPORT, ''key2' being asked for!" +$ write sys$output - + "-CONFIG_H-I-EXCEL, EXECL configured, Will probably not work." +$ write sys$output - + "-CONFIG_H-I-REVIEW, Manual Code review required!" +$ if update_config_vms +$ then +$ open/append tfcv sys$disk:[]config_vms.h +$ write tfcv "" +$ write tfcv - + "/* Check config.h for use of ''keysym' */" +$ write tfcv "" +$ close tfcv +$ endif +$ endif +$! +$! +$! Process if cpp supports ANSI-C stringizing '#' operator +$!----------------------------------------------------------------------- +$ if keysym .eqs. "STRINGIZE" +$ then +$ write tf "#ifndef HAVE_STRINGIZE" +$ write tf "#define HAVE_STRINGSIZE 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if keysym .eqs. "VOLATILE" +$ then +$ write tf "#ifndef HAVE_VOLATILE" +$ write tf "#define HAVE_VOLATILE 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if keysym .eqs. "ALLOCA" +$ then +$ write tf "#ifndef HAVE_ALLOCA" +$ write tf "#define HAVE_ALLOCA 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if keysym .eqs. "ERRNO_DECL" +$ then +$ write tf "#ifndef HAVE_ERRNO_DECL" +$ write tf "#define HAVE_ERRNO_DECL 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if keysym .eqs. "LONGLONG" +$ then +$ write tf "#ifndef __VAX" +$ write tf "#pragma message disable longlongtype" +$ write tf "#ifndef HAVE_LONGLONG" +$ write tf "#define HAVE_LONGLONG 1" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! May need to test compiler version +$!----------------------------------------------- +$ if (keysym .eqs. "LONG_LONG") .or. - + (keysym .eqs. "LONG_LONG_INT") +$ then +$ write tf "#ifndef __VAX" +$ write tf "#pragma message disable longlongtype" +$ write tf "#ifndef HAVE_''keysym'" +$ write tf "#define HAVE_''keysym' 1" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! May need to test compiler version +$!----------------------------------------------- +$ if keysym .eqs. "UNSIGNED_LONG_LONG" +$ then +$ write tf "#ifndef __VAX" +$ write tf "#pragma message disable longlongtype" +$ write tf "#ifndef HAVE_UNSIGNED_LONG_LONG" +$ write tf "#define HAVE_UNSIGNED_LONG_LONG 1" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! May need to test compiler version +$!----------------------------------------------- +$ if keysym .eqs. "UNSIGNED_LONG_LONG_INT" +$ then +$ write tf "#ifndef __VAX" +$ write tf "#pragma message disable longlongtype" +$ write tf "#ifndef HAVE_UNSIGNED_LONG_LONG_INT" +$ write tf "#define HAVE_UNSIGNED_LONG_LONG_INT 1" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! May need to test compiler version +$!----------------------------------------------- +$ if keysym .eqs. "LONG_DOUBLE" +$ then +$ write tf "#ifndef __VAX" +$ write tf "#pragma message disable longlongtype" +$ write tf "#ifndef HAVE_LONG_DOUBLE" +$ write tf "#define HAVE_LONG_DOUBLE 1" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if keysym .eqs. "FCNTL_LOCK" +$ then +$ write sys$output - + "%CONFIG_H-I-NONPORT, ''key2' being asked for! +$ write sys$output - + "-CONFIG_H-I-REVIEW, Manual Code review required!" +$ goto cfgh_in_loop1 +$ endif +$! +$! +$! These libraries are provided by the DEC C RTL +$!------------------------------------------------------------- +$ if keysym .eqs. "LIBINET" .or. keysym .eqs. "LIBSOCKET" +$ then +$ write tf "#ifndef HAVE_''keysym'" +$ write tf "#define HAVE_''keysym' 1" +$if p2 .nes. "" then write sys$output "''decc_shr' #define ''keysym' 1" +$ write tf "#endif +$ goto cfgh_in_loop1 +$ endif +$! +$! +$ if keysym .eqs. "HERRNO" then keysym = "h_errno" +$ if keysym .eqs. "UTIMBUF" then keysym = "utimbuf" +$ if key2c .eqs. "STRUCT" +$ then +$ keysym = f$edit(key2d,"LOWERCASE") +$ else +$ if key2_h .eqs. "_T" +$ then +$ if key2_t .eqs. "_TYPE" +$ then +$ keysym = f$extract(0, key2_len - 5, key2) - "HAVE_" +$ endif +$ keysym = f$edit(keysym,"LOWERCASE") +$ endif +$ endif +$! +$! Check the DEC C RTL shared image first +$!------------------------------------------------------ +$ if f$search(tfile1) .nes. "" then delete 'tfile1';* +$ define/user sys$output nl: +$ define/user sys$error nl: +$ search/format=nonull/out='tfile1' 'decc_shr' 'keysym' +$ if '$severity' .eq. 1 +$ then +$! +$! Not documented, but from observation +$!------------------------------------------------------ +$ define/user sys$output nl: +$ define/user sys$error nl: +$ if arch_type .eq. 3 +$ then +$ keyterm = "''keysym'" +$ else +$ if arch_type .eq. 2 +$ then +$ keyterm = "''keysym'" +$ else +$ keyterm = "''keysym'" +$ endif +$ endif +$ search/out=nl: 'tfile1' - + "$''keyterm'","$g''keyterm'","$__utc_''keyterm'",- + "$__utctz_''keyterm'","$__bsd44_''keyterm'","$bsd_''keyterm'",- + "$''keysym'decc$","$G''keysym'decc$","$GX''keyterm'" +$ severity = '$severity' +$! +$! +$! Of course the 64 bit stuff is different +$!--------------------------------------------------------- +$ if severity .ne. 1 .and. key64 +$ then +$ define/user sys$output nl: +$ define/user sys$error nl: +$ search/out=nl: 'tfile1' "$_''keyterm'" +$! search/out 'tfile1' "$_''keyterm'" +$ severity = '$severity' +$ endif +$! +$! UNIX compatability routines +$!--------------------------------------------- +$ if severity .ne. 1 +$ then +$ define/user sys$output nl: +$ define/user sys$error nl: +$ search/out=nl: 'tfile1' - + "$__unix_''keyterm'","$__vms_''keyterm'","$_posix_''keyterm'" +$ severity = '$severity' +$ endif +$! +$! VAX special handling routines +$!--------------------------------------------- +$ if (severity .ne. 1) .and. (arch_type .eq. 1) +$ then +$ define/user sys$output nl: +$ define/user sys$error nl: +$ search/out=nl: 'tfile1' "DECC$''keysym'" +$ severity = '$severity' +$ endif +$! +$! Show the result of the search +$!------------------------------------------------ +$ if 'severity' .eq. 1 +$ then +$ if key64 then write tf "#ifndef __VAX" +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$if p2 .nes. "" then write sys$output "''decc_shr' #define ''key2' 1" +$ write tf "#endif" +$ if key64 then write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ endif +$ if f$search(tfile1) .nes. "" then delete 'tfile1';* +$! +$! Check the DECC Header files next +$!---------------------------------------------- +$ define/user sys$output nl: +$ define/user sys$error nl: +$ search/out=nl: 'decc_rtldef' - + "''keysym';", "''keysym'[", "struct ''keysym'"/exact +$ severity = '$severity' +$ if severity .eq. 1 +$ then +$ if key64 then write tf "#ifndef __VAX" +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$if p2 .nes. "" then write sys$output "''decc_rtldef' #define ''key2' 1" +$ write tf "#endif" +$ if key64 then write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ endif +$ write tf "/* ", xline, " */" +$ goto cfgh_in_loop1 +$ endif +$! +$! +$! Process SIZEOF directives found in SAMBA +$!------------------------------------------------ +$ if key2a .eqs. "SIZEOF" +$ then +$ if key2b .eqs. "INO" .and. key2_h .eqs. "_T" +$ then +$ write tf "#ifndef SIZEOF_INO_T" +$ write tf "#define SIZEOF_INO_T (6)" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2b .eqs. "INTMAX" .and. key2_h .eqs. "_T" +$ then +$ write tf "#ifndef SIZEOF_INTMAX_T" +$ write tf "#ifdef __VAX" +$ write tf "#define SIZEOF_INTMAX_T (4)" +$ write tf "#else" +$ write tf "#define SIZEOF_INTMAX_T (8)" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2b .eqs. "OFF" .and. key2_h .eqs. "_T" +$ then +$ write tf "#ifndef SIZEOF_OFF_T" +$ write tf "#ifdef __VAX" +$ write tf "#define SIZEOF_OFF_T (4)" +$ write tf "#else" +$ write tf "#define SIZEOF_OFF_T (8)" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2b .eqs. "CHAR" .and. key2_h .eqs. "_P" +$ then +$ write tf "#ifndef SIZEOF_CHAR_P" +$ write tf "#define SIZEOF_CHAR_P (4)" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if (key2b .eqs. "INT") +$ then +$ write tf "#ifndef SIZEOF_''key2b'" +$ write tf "#define SIZEOF_''key2b' (4)" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2b .eqs. "UNSIGNED" +$ then +$ if key2c .eqs. "INT" .or. key2c .eqs. "LONG" +$ then +$ write tf "#ifndef SIZEOF_''key2b'_''key2c'" +$ write tf "#define SIZEOF_''key2b'_''key2c' (4)" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ endif +$ if key2b .eqs. "DOUBLE" +$ then +$ write tf "#ifndef SIZEOF_DOUBLE" +$ write tf "#define SIZEOF_DOUBLE (8)" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2b .eqs. "LONG" +$ then +$ if key2c .eqs. "" +$ then +$ write tf "#ifndef SIZEOF_LONG" +$ write tf "#define SIZEOF_LONG (4)" +$ write tf "#endif" +$ else +$ write tf "#ifndef SIZEOF_LONG_LONG" +$ write tf "#ifndef __VAX" +$ write tf "#define SIZEOF_LONG_LONG (8)" +$ write tf "#endif" +$ write tf "#endif" +$ endif +$ goto cfgh_in_loop1 +$ endif +$ if key2b .eqs. "SHORT" +$ then +$ write tf "#ifndef SIZEOF_SHORT" +$ write tf "#define SIZEOF_SHORT (2)" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ write tf "/* ", xline, " */" +$ goto cfgh_in_loop1 +$ endif +$! +$! Process NEED directives +$!------------------------------- +$ if key2a .eqs. "NEED" +$ then +$ if key2b .eqs. "STRINGS" .and. key2_h .eqs. "_H" +$ then +$ write tf "#ifndef NEED_STRINGS_H" +$ write tf "#define NEED_STRINGS_H 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ write tf "/* ", xline, " */" +$ goto cfgh_in_loop1 +$ endif +$! +$! +$! Process STATFS directives +$!------------------------------- +$! if key2a .eqs. "STATFS" +$! then +$! write tf "/* ", xline, " */" +$! goto cfgh_in_loop1 +$! endif +$! +$! Process inline directive +$!------------------------------ +$ if key2 .eqs. "inline" +$ then +$ write tf "#ifndef inline" +$ write tf "#define inline __inline" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! Process restrict directive +$!-------------------------------- +$ if key2 .eqs. "restrict" +$ then +$ write tf "#ifndef restrict" +$ write tf "#define restrict __restrict" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! Process RETSIGTYPE directive +$!---------------------------------- +$ if key2 .eqs. "RETSIGTYPE" +$ then +$ write tf "#ifndef RETSIGTYPE" +$ write tf "#define RETSIGTYPE void" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! Process STDC_HEADERS (SAMBA!) +$!--------------------------- +$ if key2 .eqs. "STDC_HEADERS" +$ then +$ write tf "#ifndef STDC_HEADERS" +$ write tf "#define STDC_HEADERS 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! Process PROTOTYPES directive +$!------------------------------------- +$ if key2 .eqs. "PROTOTYPES" +$ then +$ write tf "#ifndef PROTOTYPES" +$ write tf "#define PROTOTYPES 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! Special for SEEKDIR_RETURNS_VOID +$!--------------------------------------- +$ if key2 .eqs. "SEEKDIR_RETURNS_VOID" +$ then +$ write tf "#ifndef SEEKDIR_RETURNS_VOID" +$ write tf "#define SEEKDIR_RETURNS_VOID 1" +$ write tf "#endif" +$ endif +$! +$! TIME_WITH_SYS_TIME note: On VMS time.h and sys/time.h are same module. +$! +$! TIME_T_IN_SYS_TYPES_H +$!------------------------------ +$ if key2 .eqs. "TIME_T_IN_TYPES_H" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ endif +$! +$! Unknown - See if CONFIGURE can give a clue for this +$!---------------------------------------------------------- +$ pflag = 0 +$ set_flag = 0 +$! gproj_name = proj_name - "_VMS" - "-VMS" +$ if f$search(tfile1) .nes. "" then delete 'tfile1';* +$ define/user sys$output nl: +$ define/user sys$error nl: +$! if f$locate("FILE", key2) .lt. key2_len then pflag = 1 +$! if f$locate("DIR", key2) .eq. key2_len - 3 then pflag = 1 +$! if f$locate("PATH", key2) .eq. key2_len - 4 then pflag = 1 +$! +$ search/out='tfile1' 'configure_script' "''key2'="/exact +$ search_sev = '$severity' +$ if 'search_sev' .eq. 1 +$ then +$ open/read/err=unknown_cf_rd_error sf 'tfile1' +$search_file_rd_loop: +$ read/end=unknown_cf_rd_err sf line_in +$ line_in = f$edit(line_in, "TRIM") +$ skey1 = f$element(0,"=",line_in) +$ if skey1 .eqs. key2 +$ then +$ skey2 = f$element(1,"=",line_in) +$ skey2a = f$extract(0,2,skey2) +$! +$! Keep these two cases separate to make it easier to add +$! more future intelligence to this routine +$!---------------------------------------------------------------------- +$ if skey2a .eqs. """`" +$ then +$! if pflag .eq. 1 +$! then +$! write tf "#ifndef ''key2'" +$! write tf "#define ",key2," """,gproj_name,"_",key2,"""" +$! write tf "#endif" +$! else +$! Ignore this for now +$!------------------------------------------ +$ write tf "/* ", xline, " */" +$! endif +$ set_flag = 1 +$ goto found_in_configure +$ endif +$ if skey2a .eqs. """$" +$ then +$! if pflag .eq. 1 +$! then +$! write tf "#ifndef ''key2'" +$! write tf "#define ",key2," """,gproj_name,"_",key2,"""" +$! write tf "#endif" +$! else +$! Ignore this for now +$!------------------------------------------- +$ write tf "/* ", xline, " */" +$! endif +$ set_flag = 1 +$ goto found_in_configure +$ endif +$ if f$extract(0, 1, skey2) .eqs. "'" +$ then +$ skey2 = skey2 - "'" - "'" +$ endif +$ write tf "#ifndef ''key2'" +$ write tf "#define ",key2," """,skey2,"""" +$ write tf "#endif" +$ set_flag = 1 +$ else +$ goto search_file_rd_loop +$! if pflag .eq. 1 +$! then +$! write tf "#ifndef ''key2'" +$! write tf "#define ",key2," """,gproj_name,"_",key2,"""" +$! write tf "#endif" +$! set_flag = 1 +$! endif +$ endif +$found_in_configure: +$unknown_cf_rd_err: +$ if f$trnlnm("sf","lnm$process",,"SUPERVISOR") .nes. "" +$ then +$ close sf +$ endif +$ if f$search(tfile1) .nes. "" then delete 'tfile1';* +$ if set_flag .eq. 1 then goto cfgh_in_loop1 +$ endif +$ endif +$! +$! +$! +$! If it falls through everything else, comment it out +$!----------------------------------------------------- +$ write tf "/* ", xline, " */" +$ goto cfgh_in_loop1 +$cfgh_in_loop1_end: +$close inf +$! +$! +$! Write out the tail +$!-------------------- +$write_tail: +$gosub write_config_h_tail +$! +$! Exit and clean up +$!-------------------- +$general_error: +$status = '$status' +$all_exit: +$set noon +$if f$trnlnm("sf","lnm$process",,"SUPERVISOR") .nes. "" then close sf +$if f$trnlnm("tf","lnm$process",,"SUPERVISOR") .nes. "" then close tf +$if f$trnlnm("inf","lnm$process",,"SUPERVISOR") .nes. "" then close inf +$if f$trnlnm("tf1","lnm$process",,"SUPERVISOR") .nes. "" then close tf1 +$if f$trnlnm("tf2","lnm$process",,"SUPERVISOR") .nes. "" then close tf2 +$if f$trnlnm("tfcv","lnm$process",,"SUPERVISOR") .nes. "" then close tfcv +$if f$type(tfile1) .eqs. "STRING" +$then +$ if f$search(tfile1) .nes. "" then delete 'tfile1';* +$endif +$if f$type(dchfile) .eqs. "STRING" +$then +$ if f$search(dchfile) .nes. "" then delete 'dchfile';* +$endif +$if f$type(configure_script) .eqs. "STRING" +$then +$ if f$search(configure_script) .nes. "" then delete 'configure_script';* +$endif +$exit 'status' +$! +$! +$control_y: +$ status = ss_control_y +$ goto all_exit +$! +$! +$! +$! Gosub to write a new config_vms.h +$!----------------------------------- +$write_config_vms: +$outfile = "sys$disk:[]config_vms.h" +$create 'outfile' +$open/append tf 'outfile' +$write tf "/* File: config_vms.h" +$write tf "**" +$write tf "** This file contains the manual edits needed for porting" +$!write tf "** the ''proj_name' package to OpenVMS. +$write tf "**" +$write tf "** Edit this file as needed. The procedure that automatically" +$write tf "** generated this header stub will not overwrite or make any" +$write tf "** changes to this file." +$write tf "**" +$write tf - + "** ", datetime, tab, username, tab, "Generated by ''my_proc_file'" +$write tf "**" +$write tf - + "**========================================================================*/" +$write tf "" +$close tf +$return +$! +$! gosub to write out a documentation header for config.h +$!---------------------------------------------------------------- +$write_config_h_header: +$outfile = "sys$disk:[]config.h" +$create 'outfile' +$open/append tf 'outfile' +$write tf "#ifndef CONFIG_H" +$write tf "#define CONFIG_H" +$write tf "/* File: config.h" +$write tf "**" +$write tf - + "** This file contains the options needed for porting " +$write tf "** the project on a VMS system." +$write tf "**" +$write tf "** Try not to make any edits to this file, as it is" +$write tf "** automagically generated." +$write tf "**" +$write tf "** Manual edits should be made to the config_vms.h file." +$write tf "**" +$write tf - + "** ", datetime, tab, username, tab, "Generated by ''my_proc_file'" +$write tf "**" +$write tf - + "**========================================================================*/" +$write tf "" +$write tf "#if (__CRTL_VER >= 70200000) && !defined (__VAX)" +$write tf "#define _LARGEFILE 1" +$write tf "#endif" +$write tf "" +$write tf "#ifndef __VAX" +$write tf "#ifdef __CRTL_VER" +$write tf "#if __CRTL_VER >= 80200000" +$write tf "#define _USE_STD_STAT 1" +$write tf "#endif" +$write tf "#endif" +$write tf "#endif" +$write tf "" +$! +$if P1 .nes. "NOBUILTINS" +$then +$ write tf " /* Allow compiler builtins */" +$ write tf "/*-------------------------*/" +$ write tf "#ifdef __DECC_VER" +$ write tf "#include " +$ write tf "#endif" +$endif +$! +$write tf "" +$return +$! +$! gosub to write out the tail for config.h and close it +$!--------------------------------------------------------- +$write_config_h_tail: +$write tf "" +$write tf " /* Include the hand customized settings */" +$write tf "/*--------------------------------------*/" +$write tf "#include ""sys$disk:config_vms.h""" +$write tf "" +$write tf "#endif /* CONFIG_H */" +$close tf +$return +$! diff --git a/vms/descrip.mms b/vms/descrip.mms index 77dad90a..5bf1b9e3 100644 --- a/vms/descrip.mms +++ b/vms/descrip.mms @@ -47,6 +47,7 @@ MAKEFILE = $(VMSDIR)Descrip.MMS #CCFLAGS = /noOpt/Debug # a comma separated list of macros to define +# Do not specify _POSIX_EXIT here, other tricks are used for this. CDEFS = "GAWK","HAVE_CONFIG_H" .ifdef GNUC @@ -67,8 +68,13 @@ CFLAGS = /Incl=[]/Obj=[]/Opt=noInline/Def=($(CDEFS)) $(CCFLAGS) LIBS = sys$share:vaxcrtl.exe/Shareable .else !!VAXC # neither GNUC nor VAXC, assume DECC (same for either VAX or Alpha) -CC = cc/DECC/Prefix=All -CFLAGS = /Incl=[]/Obj=[]/Def=($(CDEFS)) $(CCFLAGS) +.ifdef __VAX__ +CFLOAT = +.else +CFLOAT = /float=ieee/ieee_mode=denorm_results +.endif +CC = cc/DECC/Prefix=All/NESTED_INCLUDE=NONE$(CFLOAT) +CFLAGS = /Incl=([],[.vms])/Obj=[]/Def=($(CDEFS)) $(CCFLAGS) LIBS = # DECC$SHR instead of VAXCRTL, no special link option needed .endif !VAXC .endif !GNUC @@ -106,7 +112,7 @@ AWKOBJS = $(AWKOBJ1),$(AWKOBJ2) # VMSOBJS # VMS specific stuff VMSCODE = vms_misc.obj,vms_popen.obj,vms_fwrite.obj,vms_args.obj,\ - vms_gawk.obj,vms_cli.obj + vms_gawk.obj,vms_cli.obj,vms_crtl_init.obj VMSCMD = gawk_cmd.obj # built from .cld file VMSOBJS = $(VMSCODE),$(VMSCMD) @@ -128,8 +134,8 @@ gawk : gawk.exe gawk.exe : $(GAWKOBJ) $(AWKOBJS) $(VMSOBJS) gawk.opt $(LINK) $(LINKFLAGS) gawk.opt/options -gawk.opt : $(MAKEFILE) # create linker options file - @ open/write opt sys$disk:[]gawk.opt ! ~ 'cat <gawk.opt' +gawk.opt : $(MAKEFILE) config.h # create linker options file + @ open/write opt sys$disk:[]gawk.opt ! ~ 'cat <gawk.opt' @ write opt "! GAWK -- GNU awk" @ write opt "$(GAWKOBJ)" @ write opt "$(AWKOBJ1)" @@ -139,17 +145,19 @@ gawk.opt : $(MAKEFILE) # create linker options file @ write opt "stack=48 !preallocate more pages (default is 20)" @ write opt "iosegment=128 !ditto (default is 32)" @ write opt "$(LIBS)" - @ write opt "identification=""V$(REL).$(PATCHLVL)""" - @ close opt + @ close opt + $ @$(VMSDIR)gawk_ident.com $(VMSCODE) : awk.h config.h $(VMSDIR)redirect.h $(VMSDIR)vms.h -$(AWKOBJS) : awk.h gettext.h mbsupport.h regex.h dfa.h config.h $(VMSDIR)redirect.h +$(AWKOBJS) : awk.h gettext.h mbsupport.h regex.h dfa.h config.h \ + $(VMSDIR)redirect.h $(GAWKOBJ) : awk.h config.h $(VMSDIR)redirect.h #----------------------------------------------------------------------------- # Older versions of MMS have problems handling lower case file names typically # found on ODS-5 disks. Fix this by adding explicit dependencies. #_____________________________________________________________________________ + array.obj : array.c awkgram.obj : awkgram.c awk.h builtin.obj : builtin.c floatmagic.h random.h @@ -174,7 +182,8 @@ node.obj : node.c profile.obj : profile.c random.obj : random.c random.h re.obj : re.c -regex.obj : regex.c regcomp.c regex_internal.c regexec.c regex.h regex_internal.h +regex.obj : regex.c regcomp.c regex_internal.c regexec.c regex.h \ + regex_internal.h str_array.obj : str_array.c symbol.obj : symbol.c version.obj : version.c @@ -184,12 +193,14 @@ vms_fwrite.obj : $(VMSDIR)vms_fwrite.c vms_args.obj : $(VMSDIR)vms_args.c vms_gawk.obj : $(VMSDIR)vms_gawk.c vms_cli.obj : $(VMSDIR)vms_cli.c +vms_crtl_init.obj : $(VMSDIR)vms_crtl_init.c replace.obj : replace.c $(MISSNGD)system.c $(MISSNGD)memcmp.c \ $(MISSNGD)memcpy.c $(MISSNGD)memset.c $(MISSNGD)memmove.c \ $(MISSNGD)strncasecmp.c $(MISSNGD)strerror.c \ $(MISSNGD)strftime.c $(MISSNGD)strchr.c $(MISSNGD)strtod.c \ $(MISSNGD)strtoul.c $(MISSNGD)tzset.c $(MISSNGD)mktime.c \ - $(MISSNGD)snprintf.c $(MISSNGD)getaddrinfo.c $(MISSNGD)usleep.c \ + $(MISSNGD)snprintf.c $(MISSNGD)getaddrinfo.c \ + $(MISSNGD)usleep.c \ $(MISSNGD)setenv.c $(MISSNGD)strcoll.c $(MISSNGD)wcmisc.c # bison or yacc required @@ -201,7 +212,8 @@ awkgram.c : awkgram.y # foo.y :: yacc => y[_]tab.c, bison => foo_tab.c $(PARSER) $(YFLAGS) $< @- if f$search("ytab.c") .nes."" then rename/new_vers ytab.c $@ @- if f$search("y_tab.c") .nes."" then rename/new_vers y_tab.c $@ - @- if f$search("awkgram_tab.c").nes."" then rename/new_vers awkgram_tab.c $@ + @- if f$search("awkgram_tab.c").nes."" then \ + rename/new_vers awkgram_tab.c $@ command.c : command.y @- if f$search("ytab.c") .nes."" then delete ytab.c;* @@ -211,10 +223,14 @@ command.c : command.y $(PARSER) $(YFLAGS) $< @- if f$search("ytab.c") .nes."" then rename/new_vers ytab.c $@ @- if f$search("y_tab.c") .nes."" then rename/new_vers y_tab.c $@ - @- if f$search("command_tab.c").nes."" then rename/new_vers command_tab.c $@ + @- if f$search("command_tab.c").nes."" then \ + rename/new_vers command_tab.c $@ + +config_vms.h : $(VMSDIR)generate_config_vms_h_gawk.com + $ @$(VMSDIR)generate_config_vms_h_gawk.com -config.h : $(VMSDIR)vms-conf.h - copy $< sys$disk:[]$@ +config.h : configh.in config_vms.h $(VMSDIR)config_h.com + $ @$(VMSDIR)config_h.com $(VMSCMD) : $(VMSDIR)gawk.cld set command $(CLDFLAGS)/object=$@ $< @@ -230,13 +246,16 @@ tidy : clean : - if f$search ("*.obj") .nes. "" then delete *.obj;* + - if f$search ("*.lis") .nes. "" then delete *.lis;* - if f$search ("gawk.opt") .nes. "" then delete gawk.opt;* spotless : clean tidy - - if f$search("config.h").nes."" then rename config.h config.h-old/New + - if f$search("config.h").nes."" then delete config.h;* + - if f$search("config_vms.h").nes."" then delete config_vms.h;* - if f$search("gawk.exe").nes."" then delete gawk.exe;* - if f$search("gawk.dvi").nes."" then delete gawk.dvi;* - - if f$search("[.doc]texindex.exe").nes."" then delete [.doc]texindex.exe;* + - if f$search("[.doc]texindex.exe").nes."" then \ + delete [.doc]texindex.exe;* # # Note: this only works if you kept a copy of [.support]texindex.c @@ -258,7 +277,8 @@ gawk.dvi : [.doc]texindex.exe [.doc]gawk.texi @ write sys$output " Third (final) pass" TeX gawk.texi -@ purge - -@ delete gawk.lis;,.aux;,gawk.%%;,.cps;,.fns;,.kys;,.pgs;,.toc;,.tps;,.vrs; + -@ delete \ + gawk.lis;,.aux;,gawk.%%;,.cps;,.fns;,.kys;,.pgs;,.toc;,.tps;,.vrs; @ rename/new_vers gawk.dvi [-]*.* @ set default [-] diff --git a/vms/fcntl.h b/vms/fcntl.h deleted file mode 100644 index d975db7a..00000000 --- a/vms/fcntl.h +++ /dev/null @@ -1,10 +0,0 @@ -/* "fcntl.h" -- constants for BSD-style I/O routines (ala VAX C's ) */ -#define O_RDONLY 0 -#define O_WRONLY 1 -#define O_RDWR 2 -#define O_NDELAY 4 -#define O_NOWAIT 4 -#define O_APPEND 8 -#define O_CREAT 0x0200 -#define O_TRUNC 0x0400 -#define O_EXCL 0x0800 diff --git a/vms/gawk_ident.com b/vms/gawk_ident.com new file mode 100644 index 00000000..5b3966f9 --- /dev/null +++ b/vms/gawk_ident.com @@ -0,0 +1,21 @@ +$! gawk_ident.com - Append ident with version to gawk. +$! +$! +$ open/read cfgh config.h +$cfgh_loop: +$ read/end=cfgh_loop_end cfgh line_in +$ key1 = f$element(0, " ", line_in) +$ if key1 .nes. "#define" then goto cfgh_loop +$ key2 = f$element(1, " ", line_in) +$ if key2 .nes. "VERSION" then goto cfgh_loop +$ version_string = f$element(2, " ", line_in) - """" - """" +$ ver_major = f$element(0, ".", version_string) +$ ver_minor = f$element(1, ".", version_string) +$ REL = ver_major + "." + ver_minor +$ PATCHLVL = f$element(2, ".", version_string) +$cfgh_loop_end: +$ close cfgh +$! +$ open/append Fopt gawk.opt +$ write Fopt "identification=""V''REL'.''PATCHLVL'""" +$ close Fopt diff --git a/vms/gawkmisc.vms b/vms/gawkmisc.vms index cbc59cd7..bee0b962 100644 --- a/vms/gawkmisc.vms +++ b/vms/gawkmisc.vms @@ -208,11 +208,17 @@ files_are_same(char *newfile, SRCFILE *oldfile) f2 = &oldfile->sbuf; /* compare device string */ +#ifdef _USE_STD_STAT + return (f1->st_dev == f2->st_dev + /* and 48-bit file id cookie */ + && f1->st_ino == f2->st_ino); + #else return (strcmp(f1->st_dev, f2->st_dev) == 0 /* and 48-bit file id cookie stored in 3 short ints */ && f1->st_ino[0] == f2->st_ino[0] && f1->st_ino[1] == f2->st_ino[1] && f1->st_ino[2] == f2->st_ino[2]); +#endif } int diff --git a/vms/generate_config_vms_h_gawk.com b/vms/generate_config_vms_h_gawk.com new file mode 100644 index 00000000..11493e5d --- /dev/null +++ b/vms/generate_config_vms_h_gawk.com @@ -0,0 +1,290 @@ +$! File: GENERATE_CONFIG_H_VMS_GAWK.COM +$! +$! Gawk like most open source products uses a variant of a config.h file. +$! Depending on the curl version, this could be config.h or curl_config.h. +$! +$! For GNV based builds, the configure script is run and that produces +$! a [curl_]config.h file. Configure scripts on VMS generally do not +$! know how to do everything, so there is also a [-.lib]config-vms.h file +$! that has VMS specific code that compensates for bugs in some of the +$! VMS shared images. +$! +$! This generates a []config.h file and also a config_vms.h file, +$! which is used to supplement that file. +$! +$! +$! Copyright 2013, John Malmberg +$! +$! Permission to use, copy, modify, and/or distribute this software for any +$! purpose with or without fee is hereby granted, provided that the above +$! copyright notice and this permission notice appear in all copies. +$! +$! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +$! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +$! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +$! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +$! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +$! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +$! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +$! +$! +$! 28-Nov-2013 J. Malmberg +$! +$!========================================================================= +$! +$! Allow arguments to be grouped together with comma or separated by spaces +$! Do no know if we will need more than 8. +$ args = "," + p1 + "," + p2 + "," + p3 + "," + p4 + "," +$ args = args + p5 + "," + p6 + "," + p7 + "," + p8 + "," +$! +$! Provide lower case version to simplify parsing. +$ args_lower = f$edit(args, "LOWERCASE") +$! +$ args_len = f$length(args) +$! +$ if (f$getsyi("HW_MODEL") .lt. 1024) +$ then +$ arch_name = "VAX" +$ else +$ arch_name = "" +$ arch_name = arch_name + f$edit(f$getsyi("ARCH_NAME"), "UPCASE") +$ if (arch_name .eqs. "") then arch_name = "UNK" +$ endif +$! +$! +$! Start the configuration file. +$! Need to do a create and then an append to make the file have the +$! typical file attributes of a VMS text file. +$ create sys$disk:[]config_vms.h +$ open/append cvh sys$disk:[]config_vms.h +$! +$! Write the defines to prevent multiple includes. +$! These are probably not needed in this case, +$! but are best practice to put on all header files. +$ write cvh "#ifndef __CONFIG_VMS_H__" +$ write cvh "#define __CONFIG_VMS_H__" +$ write cvh "" +$! +$ write cvh "#if __CRTL_VER >= 70000000" +$ write cvh "#define VMS_V7" +$ write cvh "#else" +$ write cvh "#define HAVE_TZNAME 1 /* (faked in vms/vms_misc.c) */ +$ write cvh "#define HAVE_TZSET 1 /* (faked in vms/vms_misc.c) */ +$ write cvh "#endif" +$ write cvh "#if __CRTL_VER >= 70200000" +$ write cvh "#define DYNAMIC 1" +$ write cvh "#endif" +$ write cvh "" +$ write cvh "#define PRINTF_HAS_F_FORMAT 1" +$ write cvh "" +$ write cvh "/* The _Noreturn keyword of C11. */" +$ write cvh "#ifndef _Noreturn" +$ write cvh "# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \" +$ write cvh " || 0x5110 <= __SUNPRO_C)" +$ write cvh "# define _Noreturn __attribute__ ((__noreturn__))" +$ write cvh "# elif defined _MSC_VER && 1200 <= _MSC_VER" +$ write cvh "# define _Noreturn __declspec (noreturn)" +$ write cvh "# else" +$ write cvh "# define _Noreturn" +$ write cvh "# endif" +$ write cvh "#endif" +$ write cvh "" +$ write cvh "/*" +$ write cvh " * VAXCRTL is pre-ANSI and does some variations of numeric" +$ write cvh " * formatting differently than gawk expects." +$ write cvh " */" +$ write cvh "#if defined(VAX) && !defined(__DECC)" +$ write cvh - + "/* '0' format modifier for %e,%f,%g gives wrong results in many cases */" +$ write cvh "#define VAXCRTL" +$ write cvh "/* %g format chooses %e format when should use %f */" +$ write cvh "#define GFMT_WORKAROUND 1" +$ write cvh "#endif" +$ write cvh "" +$ write cvh "/*" +$ write cvh " * VAX C" +$ write cvh " *" +$ write cvh - + " * As of V3.2, VAX C is not yet ANSI-compliant. But it's close enough" +$ write cvh - + " * for GAWK's purposes. Comment this out for VAX C V2.4 and earlier." +$ write cvh - + " * YYDEBUG definition is needed for combination of VAX C V2.x and Bison." +$ write cvh " */" +$ write cvh "#if defined(VAXC) && !defined(__STDC__)" +$ write cvh "#define __STDC__ 0" +$ write cvh "#define NO_TOKEN_PASTING" +$ write cvh "#define signed /*empty*/" +$ write cvh "#define inline /*empty*/" +$ write cvh "#ifndef __DECC /* DEC C does not support #pragma builtins */" +$ write cvh "#define VAXC_BUILTINS" +$ write cvh "#endif" +$ write cvh "/* #define YYDEBUG 0 */" +$ write cvh - + "#define NO_MBSUPPORT /* VAX C's preprocessor can't handle mbsupport.h */" +$ write cvh "#endif" +$ write cvh "" +$ write cvh "" +$ write cvh "#if __DECC_VER >= 60400000 && !defined(DEBUG)" +$ write cvh "/* disable ""new feature in C99"" diagnostics (for regex code); " +$ write cvh " NEWC99 ought to suffice but doesn't (at least in V6.4) */" +$ write cvh "#pragma message disable (NEWC99,DESIGNATORUSE)" +$ write cvh "#ifdef __VAX +$ write cvh "#endif +$ write cvh "#pragma message disable (LONGDOUBLENYI)" +$ write cvh "#endif" +$! +$! This stuff seems needed for VMS 7.3 and earlier, but not VMS 8.2+ +$ write cvh "#if __VMS_VER <= 80200000" +$ write cvh "#ifdef HAVE_MKSTEMP" +$ write cvh "#undef HAVE_MKSTEMP" +$ write cvh "#endif" +$ write cvh "#endif" +$ write cvh "" +$! +$! VMS not legal for ANSI compiler to pre-define +$ write cvh "#ifndef VMS" +$ write cvh "#define VMS 1" +$ write cvh "#endif" +$ write cvh "" +$! +$! Need to temp hide stuff that gawk is replacing or redefining before +$! including the header. +$ write cvh "/* Need to hide some stuff */" +$ write cvh "#define getopt hide_getopt" +$ write cvh "#define optopt hide_optopt" +$ write cvh "#define optind hide_optind" +$ write cvh "#define optarg hide_optarg" +$ write cvh "#define opterr hide_opterr" +$ write cvh "#define getpgrp hide_getpgrp" +$ write cvh "#define unsetenv hide_unsetenv" +$ write cvh "#define read hide_read" +$ write cvh "#define delete hide_delete" +$ write cvh "#define getcwd hide_getcwd" +$ write cvh "#define getgid hide_getgid" +$ write cvh "#define getegid hide_getegid" +$ write cvh "#define setgid hide_setgid" +$ write cvh "#define exit hide_exit" +$ write cvh "#define _exit hide__exit" +$ write cvh "#include " +$ write cvh "#include " +$ write cvh "#include " +$ write cvh "#include " +$ write cvh "#include " +$ write cvh "#include " +$ write cvh "#undef getopt" +$ write cvh "#undef optopt" +$ write cvh "#undef optind" +$ write cvh "#undef optarg" +$ write cvh "#undef opterr" +$ write cvh "#undef getpgrp" +$ write cvh "#undef getcwd" +$ write cvh "#undef unsetenv" +$ write cvh "#undef read" +$ write cvh "#undef delete" +$ write cvh "#undef getgid" +$ write cvh "#undef getegid" +$ write cvh "#undef setgid" +$ write cvh "#undef exit" +$ write cvh "#undef _exit" +$! +$write cvh "#ifdef HAVE_STRNCASECMP" +$write cvh "#undef HAVE_STRNCASECMP" +$write cvh "#endif" +$! +$ write cvh "#define IN_CONFIG_H" +$ write cvh "#include ""redirect.h""" +$ write cvh "#undef IN_CONFIG_H" +$ write cvh "#define getpgrp gawk_vms_getpgrp" +$ write cvh "#ifdef HAVE_SETENV" +$ write cvh "#undef HAVE_SETENV" +$ write cvh "#endif" +$ write cvh "#ifdef HAVE_UNSETENV" +$ write cvh "#undef HAVE_UNSETENV" +$ write cvh "#endif" +$ write cvh "#ifdef HAVE_STRFTIME" +$ write cvh "#undef HAVE_STRFTIME" +$ write cvh "#define USE_INCLUDED_STRFTIME" +$ write cvh "#endif /* HAVE_STRFTIME */" +$ write cvh "" +$ write cvh "#include " +$ write cvh "#define INT32_MAX __INT32_MAX" +$ write cvh "#define INT32_MIN __INT32_MIN" +$ write cvh "" +$ write cvh "/*" +$ write cvh " * DEFPATH" +$ write cvh " * VMS: ""/AWK_LIBRARY"" => ""AWK_LIBRARY:""" +$ write cvh " * The default search path for the -f option of gawk. It is" +$ write cvh " * used if the AWKPATH environment variable is undefined." +$ write cvh " *" +$ write cvh " * Note: OK even if no AWK_LIBRARY logical name has been defined." +$ write cvh " */" +$ write cvh "" +$ write cvh "#define DEFPATH "".,/AWK_LIBRARY""" +$ write cvh "#define DEFLIBPATH "".,/AWK_LIBRARY""" +$ write cvh "#define ENVSEP ','" +$ write cvh "" +$ write cvh "/*" +$ write cvh " * Extended source file access." +$ write cvh " */" +$ write cvh "#define DEFAULT_FILETYPE "".awk""" +$ write cvh "" +$ write cvh "/*" +$ write cvh " * fork/Pipe handling." +$ write cvh " */" +$ write cvh "#define PIPES_SIMULATED 1" +$ write cvh "" +$ write cvh "/* Extension for shared libraries */" +$ write cvh "#define SHLIBEXT ""exe""" +$ write cvh "" +$! GAWK does not want to use ALLOCA +$ write cvh "#define NO_ALLOCA" +$ write cvh "#define STACK_DIRECTION (-1)" +$ write cvh "" +$ write cvh "void decc$exit(int status);" +$ write cvh "void __posix_exit(int status);" +$ write cvh "#define _exit(foo) vms_exit(foo)" +$ write cvh "#define exit(foo) vms_exit(foo)" +$ write cvh "" +$ write cvh "#define EXIT_FATAL (STS$M_INHIB_MSG | STS$K_SEVERE)" +$ write cvh "" +$ write cvh "#ifndef C_FACILITY_NO" +$ write cvh "#define C_FACILITY_NO 0x350000" +$ write cvh "#endif" +$ write cvh "" +$ write cvh "/* Use old exit codes for DCL, correct for other cases */ +$ write cvh "static void vms_exit(int status) {" +$ write cvh " char * shell;" +$ write cvh " int vms_status;" +$ write cvh " int use_old_exit = 0;" +$ write cvh " shell = getenv(""SHELL"");" +$ write cvh " if (shell != NULL) {" +$ write cvh " if (strcmp(shell, ""DCL"") == 0) {" +$ write cvh " use_old_exit = 1;" +$ write cvh " }" +$ write cvh " } else {" +$ write cvh " use_old_exit = 1;" +$ write cvh " }" +$ write cvh " if (use_old_exit == 1) {" +$ write cvh " decc$exit(status);" +$ write cvh " }" +$ write cvh " /* Fake the __posix_exit with severity added */" +$ write cvh " /* Undocumented correct way to do the above unless */" +$ write cvh " /* backwards compatibilty is needed */" +$ write cvh " vms_status = C_FACILITY_NO | 0xA000 | STS$M_INHIB_MSG;" +$ write cvh " if (status == EXIT_FAILURE) {" +$ write cvh " vms_status |= (1 << 3) | STS$K_ERROR;" +$ write cvh " } else if (status == EXIT_FATAL) {" +$ write cvh " vms_status |= (2 << 3) | STS$K_SEVERE;" +$ write cvh " }" +$ write cvh " decc$exit(vms_status);" +$ write cvh "}" +$! +$! Close out the file +$! +$ write cvh "" +$ write cvh "#endif /* __CONFIG_VMS_H__ */" +$ close cvh +$! +$all_exit: +$ exit diff --git a/vms/vms-conf.h b/vms/vms-conf.h deleted file mode 100644 index 575b5de6..00000000 --- a/vms/vms-conf.h +++ /dev/null @@ -1,678 +0,0 @@ -#ifndef CONFIG_H -#define CONFIG_H -/* - * config.h -- configuration definitions for gawk. - * - * For VMS (assumes V4.6 or later; tested on V7.3-1, V8.3. - */ - -/* - * Copyright (C) 1991-1992, 1995-1996, 1999, 2001-2003, 2005, 2009, 2010, 2011, - * 2012, the Free Software Foundation, Inc. - * - * This file is part of GAWK, the GNU implementation of the - * AWK Programming Language. - * - * GAWK is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GAWK is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#if 0 /* no longer used */ -/* Define to 1 if using alloca.c. */ -#define C_ALLOCA 1 -#else -#define NO_ALLOCA /* vms/vms_fwrite.c needs this */ -/* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be - automatically deduced at run-time. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ -#define STACK_DIRECTION (-1) -#endif /*0*/ - -#include -#define INT32_MAX __INT32_MAX -#define INT32_MIN __INT32_MIN - -/* dynamic loading is possible */ -#undef DYNAMIC - -/* Define to 1 if translation of program messages to the user's native - language is requested. */ -#undef ENABLE_NLS - -/* Define to the type of elements in the array set by `getgroups'. Usually - this is either `int' or `gid_t'. */ -#define GETGROUPS_T int - -/* Define to 1 if the `getpgrp' function requires zero arguments. */ -#define GETPGRP_VOID 1 - -/* Define to 1 if you have the `alarm' function. */ -#define HAVE_ALARM 1 - -/* Define to 1 if you have the header file. */ -#undef HAVE_ARPA_INET_H - -/* Define to 1 if you have the `atexit' function. */ -#define HAVE_ATEXIT 1 - -/* Define to 1 if you have the `btowc' function. */ -#undef HAVE_BTOWC - -/* 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 `tzname', and to 0 if you don't. - */ -#undef HAVE_DECL_TZNAME - -/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ -#undef HAVE_DOPRNT - -/* Define to 1 if you have the header file. */ -#undef HAVE_FCNTL_H - -/* Define to 1 if you have the `fmod' function. */ -#define HAVE_FMOD 1 - -/* have getaddrinfo */ -#undef HAVE_GETADDRINFO - -/* Define to 1 if you have the `getgrent' function. */ -#undef HAVE_GETGRENT - -/* Define to 1 if you have the `getgroups' function. */ -#undef HAVE_GETGROUPS - -/* Define if the GNU gettext() function is already present or preinstalled. */ -#undef HAVE_GETTEXT - -/* Define to 1 if you have the `grantpt' function. */ -#undef HAVE_GRANTPT - -/* Define if you have the iconv() function. */ -#undef HAVE_ICONV - -/* Define if you have the 'intmax_t' type in or . */ -#undef HAVE_INTMAX_T - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define if exists, doesn't clash with , and - declares uintmax_t. */ -#undef HAVE_INTTYPES_H_WITH_UINTMAX - -/* Define to 1 if you have the `isascii' function. */ -#define HAVE_ISASCII 1 - -/* Define to 1 if you have the `iswctype' function. */ -#define HAVE_ISWCTYPE 1 - -/* Define to 1 if you have the `iswlower' function. */ -#define HAVE_ISWLOWER 1 - -/* Define to 1 if you have the `iswupper' function. */ -#define HAVE_ISWUPPER 1 - -/* Define if you have and nl_langinfo(CODESET). */ -#undef HAVE_LANGINFO_CODESET - -/* Define if your file defines LC_MESSAGES. */ -#undef HAVE_LC_MESSAGES - -/* Define to 1 if you have the header file. */ -#undef HAVE_LIBINTL_H - -/* Define if you have the libsigsegv library. */ -#undef HAVE_LIBSIGSEGV - -/* 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 - -/* Define to 1 if you have the header file. */ -#define HAVE_LIMITS_H 1 - -/* Define to 1 if you have the header file. */ -#undef HAVE_LOCALE_H - -/* Define if you have the 'long long' type. */ -#undef HAVE_LONG_LONG - -/* Define to 1 if the system has the type `long long int'. */ -#undef HAVE_LONG_LONG_INT - -/* Define to 1 if you have the `mbrlen' function. */ -#define HAVE_MBRLEN 1 - -/* Define to 1 if mbrtowc and mbstate_t are properly declared. */ -#define HAVE_MBRTOWC 1 - -/* Define to 1 if you have the header file. */ -#undef HAVE_MCHECK_H - -/* Define to 1 if you have the `memcmp' function. */ -#define HAVE_MEMCMP 1 - -/* Define to 1 if you have the `memcpy' function. */ -#define HAVE_MEMCPY 1 - -/* Define to 1 if you have the `memcpy_ulong' function. */ -#undef HAVE_MEMCPY_ULONG - -/* Define to 1 if you have the `memmove' function. */ -#define HAVE_MEMMOVE 1 - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the `memset' function. */ -#define HAVE_MEMSET 1 - -/* Define to 1 if you have the `memset_ulong' function. */ -#undef HAVE_MEMSET_ULONG - -/* Define to 1 if you have the `mkstemp' function. */ -#undef HAVE_MKSTEMP - -/* we have the mktime function */ -#define HAVE_MKTIME 1 - -/* Define to 1 if you have the header file. */ -#undef HAVE_NETDB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_NETINET_IN_H - -/* we'll use the one in [.missing_d] */ -#undef HAVE_SETENV - -/* Define to 1 if you have the `setlocale' function. */ -#undef HAVE_SETLOCALE - -/* Define to 1 if you have the `setsid' function. */ -#undef HAVE_SETSID - -/* Define to 1 if you have the `snprintf' function. */ -#undef HAVE_SNPRINTF - -/* newer systems define this type here */ -#undef HAVE_SOCKADDR_STORAGE - -/* we have sockets on this system */ -#undef HAVE_SOCKETS - -/* Define to 1 if you have the header file. */ -#define HAVE_STDARG_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDDEF_H 1 - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define if exists, doesn't clash with , and declares - uintmax_t. */ -#undef HAVE_STDINT_H_WITH_UINTMAX - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the `strchr' function. */ -#define HAVE_STRCHR 1 - -/* Define to 1 if you have the `strcoll' function. */ -#define HAVE_STRCOLL 1 - -/* Define to 1 if you have the `strerror' function. */ -#define HAVE_STRERROR 1 - -/* Define to 1 if you have the `strftime' function. */ -#undef HAVE_STRFTIME /* use the missing_d/strfime.c version */ - -/* Define to 1 if cpp supports the ANSI # stringizing operator. */ -#ifdef VAXC -#undef HAVE_STRINGIZE -#else -#define HAVE_STRINGIZE 1 -#endif - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the `strncasecmp' function. */ -#undef HAVE_STRNCASECMP - -/* Define to 1 if you have the header file. */ -#undef HAVE_STROPTS_H - -/* Define to 1 if you have the `strtod' function. */ -#define HAVE_STRTOD 1 - -/* Define to 1 if you have the `strtoul' function. */ -#define HAVE_STRTOUL 1 - -/* Define to 1 if `st_blksize' is a member of `struct stat'. */ -#undef HAVE_STRUCT_STAT_ST_BLKSIZE - -/* Define to 1 if `tm_zone' is a member of `struct tm'. */ -#undef HAVE_STRUCT_TM_TM_ZONE - -/* Define to 1 if you have the `system' function. */ -#define HAVE_SYSTEM 1 - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_IOCTL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_PARAM_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_SOCKET_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TIME_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have that is POSIX.1 compatible. */ -#undef HAVE_SYS_WAIT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_TERMIOS_H - -/* Define to 1 if you have the `tmpfile' function. */ -#define HAVE_TMPFILE 1 -/* Force snprintf.c to use tmpfile() instead of mkstemp(). */ -#ifdef HAVE_MKSTEMP -#undef HAVE_MKSTEMP -#endif - -/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use - `HAVE_STRUCT_TM_TM_ZONE' instead. */ -#undef HAVE_TM_ZONE - -/* Define to 1 if you have the `towlower' function. */ -#define HAVE_TOWLOWER 1 - -/* Define to 1 if you have the `towupper' function. */ -#define HAVE_TOWUPPER 1 - -/* Define to 1 if you don't have `tm_zone' but do have the external array - `tzname'. */ -#define HAVE_TZNAME 1 /* (faked in vms/vms_misc.c) */ - -/* Define to 1 if you have the `tzset' function. */ -#define HAVE_TZSET 1 /* (faked in vms/vms_misc.c) */ - -/* Define if you have the 'uintmax_t' type in or . */ -#undef HAVE_UINTMAX_T - -/* Define to 1 if you have the header file. */ -#ifdef __DECC -#define HAVE_UNISTD_H 1 -#else -#undef HAVE_UNISTD_H -#endif - -/* Define if you have the 'unsigned long long' type. */ -#undef HAVE_UNSIGNED_LONG_LONG - -/* Define to 1 if the system has the type `unsigned long long int'. */ -#undef HAVE_UNSIGNED_LONG_LONG_INT - -/* Define to 1 if you have the `usleep' function. */ -#define HAVE_USLEEP 1 - -/* Define to 1 if you have the `vprintf' function. */ -#define HAVE_VPRINTF 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_WCHAR_H 1 - -/* Define to 1 if you have the `wcrtomb' function. */ -#define HAVE_WCRTOMB 1 - -/* Define to 1 if you have the `wcscoll' function. */ -#define HAVE_WCSCOLL 1 - -/* Define to 1 if you have the `wctype' function. */ -#define HAVE_WCTYPE 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_WCTYPE_H 1 - -/* systems should define this type here */ -#define HAVE_WCTYPE_T 1 - -/* systems should define this type here */ -#undef HAVE_WINT_T - -/* disable fatal errors on directories */ -#undef NO_DIRECTORY_FATAL - -/* disable lint checks */ -#undef NO_LINT - -/* Name of package */ -#define PACKAGE "gawk" - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "bug-gawk@gnu.org" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "GNU Awk" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "GNU Awk 4.1.0" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "gawk" - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "4.1.0" - -/* Define to 1 if *printf supports %F format */ -#undef PRINTF_HAS_F_FORMAT - -/* Define as the return type of signal handlers (`int' or `void'). */ -#define RETSIGTYPE void - -/* The size of a `unsigned int', as computed by sizeof. */ -#define SIZEOF_UNSIGNED_INT 4 - -/* The size of a `unsigned long', as computed by sizeof. */ -#define SIZEOF_UNSIGNED_LONG 4 - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* some systems define this type here */ -#undef TIME_T_IN_SYS_TYPES_H - -/* Define to 1 if you can safely include both and . */ -#undef TIME_WITH_SYS_TIME - -/* Define to 1 if your declares `struct tm'. */ -#undef TM_IN_SYS_TIME - -/* force use of our version of strftime */ -#define USE_INCLUDED_STRFTIME 1 - -/* Version number of package */ -#define VERSION "4.1.0" - -/* Define to 1 if on AIX 3. - System headers sometimes define this. - We just want to avoid a redefinition error message. */ -#ifndef _ALL_SOURCE -# undef _ALL_SOURCE -#endif - -/* Number of bits in a file offset, on hosts where this is settable. */ -#undef _FILE_OFFSET_BITS - -/* Enable GNU extensions on systems that have them. */ -#ifndef _GNU_SOURCE -# undef _GNU_SOURCE -#endif - -/* Define for large files, on AIX-style hosts. */ -#undef _LARGE_FILES - -/* Define to 1 if on MINIX. */ -#undef _MINIX - -/* The _Noreturn keyword of C11. */ -#ifndef _Noreturn -# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ - || 0x5110 <= __SUNPRO_C) -# define _Noreturn __attribute__ ((__noreturn__)) -# elif defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) -# else -# define _Noreturn -# endif -#endif - -/* Define to 2 if the system does not provide POSIX.1 features except with - this defined. */ -#undef _POSIX_1_SOURCE - -/* Define to 1 if you need to in order for `stat' and other things to work. */ -#undef _POSIX_SOURCE - -/* Define to 1 if type `char' is unsigned and you are not using gcc. */ -#ifndef __CHAR_UNSIGNED__ -# undef __CHAR_UNSIGNED__ -#endif - -/* Enable extensions on Solaris. */ -#ifndef __EXTENSIONS__ -# undef __EXTENSIONS__ -#endif -#ifndef _POSIX_PTHREAD_SEMANTICS -# undef _POSIX_PTHREAD_SEMANTICS -#endif -#ifndef _TANDEM_SOURCE -# undef _TANDEM_SOURCE -#endif - -/* Define to empty if `const' does not conform to ANSI C. */ -#undef const - -/* Define to `int' if doesn't define. */ -#undef gid_t - -/* Define to `__inline__' or `__inline' if that's what the C compiler - calls it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -#undef inline -#endif - -/* Define to widest signed type if doesn't define. */ -#define intmax_t long int - -/* Define to `int' if doesn't define. */ -#undef pid_t - -/* Define to the equivalent of the C99 'restrict' keyword, or to - nothing if this is not supported. Do not define if restrict is - supported directly. */ -#define restrict -#if defined(__DECC) && (__DECC_VER >= 60400000) -#undef restrict -#endif - -/* Define to `unsigned' if doesn't define. */ -#undef size_t - -/* type to use in place of socklen_t if not defined */ -#undef socklen_t - -/* Define to `int' if does not define. */ -#define ssize_t int - -/* Define to `int' if doesn't define. */ -#undef uid_t - -/* Define to unsigned long or unsigned long long if and - don't define. */ -#define uintmax_t unsigned long - -#if 0 -#include "custom.h" /* overrides for stuff autoconf can't deal with */ -#else - -/* Whether `time_t' is an unsigned type. */ -#define TIME_T_UNSIGNED 1 - -/* Extension for shared libraries */ -#define SHLIBEXT "exe" - - -/*******************************/ -/* Gawk configuration options. */ -/*******************************/ - -/* - * DEFPATH - * VMS: "/AWK_LIBRARY" => "AWK_LIBRARY:" - * The default search path for the -f option of gawk. It is used - * if the AWKPATH environment variable is undefined. - * - * Note: OK even if no AWK_LIBRARY logical name has been defined. - */ - -#define DEFPATH ".,/AWK_LIBRARY" -#define DEFLIBPATH ".,/AWK_LIBRARY" -#define ENVSEP ',' - -/* - * Extended source file access. - */ -#define DEFAULT_FILETYPE ".awk" - -/* - * Pipe handling. - */ -#define PIPES_SIMULATED 1 - -/* - * VAXCRTL is pre-ANSI and does some variations of numeric formatting - * differently than gawk expects. - */ -#if defined(VAX) && !defined(__DECC) -/* '0' format modifier for %e,%f,%g gives wrong results in many cases */ -#define VAXCRTL -/* %g format chooses %e format when should use %f */ -#define GFMT_WORKAROUND 1 -#endif - -/* - * VAX C - * - * As of V3.2, VAX C is not yet ANSI-compliant. But it's close enough - * for GAWK's purposes. Comment this out for VAX C V2.4 and earlier. - * YYDEBUG definition is needed for combination of VAX C V2.x and Bison. - */ -#if defined(VAXC) && !defined(__STDC__) -#define __STDC__ 0 -#define NO_TOKEN_PASTING -#define signed /*empty*/ -#define inline /*empty*/ -#ifndef __DECC /* DEC C does not support #pragma builtins even in VAXC mode */ -#define VAXC_BUILTINS -#endif -/* #define YYDEBUG 0 */ -#define NO_MBSUPPORT /* VAX C's preprocessor can't handle mbsupport.h */ -#endif - -/* - * DEC C - * - * Digital's ANSI complier. - */ -#ifdef __DECC - /* DEC C implies DECC$SHR, which doesn't have the %g problem of VAXCRTL */ -#undef GFMT_WORKAROUND - /* DEC C V5.x introduces incompatibilities with prior porting efforts */ -#define _DECC_V4_SOURCE -#define __SOCKET_TYPEDEFS -#if __VMS_VER >= 60200000 -# undef __VMS_VER -# define __VMS_VER 60100000 -#endif -#if __CRTL_VER >= 60200000 -# if __CRTL_VER >= 70320000 -# define CRTL_VER_V732 -# define HAVE_SNPRINTF 1 -# endif -# if __CRTL_VER >= 70301000 -# define CRTL_VER_V731 -# endif -# undef __CRTL_VER -# define __CRTL_VER 60100000 -#endif -#if __DECC_VER >= 60400000 && !defined(DEBUG) -/* disable "new feature in C99" diagnostics (for regex code); - NEWC99 ought to suffice but doesn't (at least in V6.4) */ -#pragma message disable (NEWC99,DESIGNATORUSE) -#endif -#endif /* __DECC */ - -/* - * GNU C - * - * Versions of GCC (actually GAS) earlier than 1.38 don't produce the - * right code for ``extern const'' constructs, and other usages of - * const might not be right either. The old set of include files from - * the gcc-vms distribution did not contain prototypes, and this could - * provoke some const-related compiler warnings. If you've got an old - * version of gcc for VMS, define 'const' out of existance, and by all - * means obtain the most recent version! - * - * Note: old versions of GCC should also avoid defining STDC_HEADERS, - * because most of the ANSI-C required header files are missing. - */ -#ifdef __GNUC__ -/* #define const */ -/* #undef STDC_HEADERS */ -/* #undef HAVE_STDDEF_H */ -#ifndef STDC_HEADERS -#define alloca __builtin_alloca -#define environ $$PsectAttributes_NOSHR$$environ /* awful GAS kludge */ -#endif -#undef REGEX_MALLOC /* use true alloca() in regex.c */ -#endif - -/* EXIT_SUCCESS and EXIT_FAILURE normally come from */ -#ifndef HAVE_STDLIB_H -# define EXIT_SUCCESS 1 /* SYS$_NORMAL */ -# define EXIT_FAILURE 0x10000002 /* STS$M_INHIB_MSG|STS$K_ERROR */ -#endif -/* EXIT_FATAL is specific to gawk, not part of Standard C */ -#define EXIT_FATAL 0x10000004 /* STS$M_INHIB_MSG|STS$K_SEVERE */ - -#define IN_CONFIG_H -#include "vms/redirect.h" -#undef IN_CONFIG_H - -#endif /*"custom.h"*/ - -#endif /*CONFIG_H*/ diff --git a/vms/vms_crtl_init.c b/vms/vms_crtl_init.c new file mode 100644 index 00000000..081ae2cc --- /dev/null +++ b/vms/vms_crtl_init.c @@ -0,0 +1,470 @@ +/* File: VMS_CRTL_INIT.C + + This file is common to a lot of projects. + + $Id: vms_crtl_init.c,v 1.1.1.1 2012/12/02 19:25:22 wb8tyw Exp $ + + Module that provides a LIB$INITIALIZE routine for the GNV toolset that + will turn on some CRTL features that are not enabled by default. + + The CRTL features can also be turned on via logical names, but that + impacts all programs and some aren't ready, willing, or able to handle + the settings that GNV needs. + + The original module was found linked with GPL V2 modules, and thus must + be able to be distributed under the GPL V2 provisions. + + As this module or similar is needed for virtually all programs built to run + under GNV or UNIX, it can be distributed with other licenses. + + Edit History + + 1-001 John Reagan Initial version using the old style interface + but with the new version commented out. + + 1-002 John Reagan Switch to new API for setting features + + 1-003 Steve Pitcher Add DECC$RENAME_NO_INHERIT. + + 1-004 Steve Pitcher Quiet these, if the DECC feature doesn't exist. + + 2-001 J. Malmberg New GNV requirements: + Three variations of object modules: + 1. For use with shells, sets the logical + name GNV$UNIX_SHELL. + + 2. For utilities, if the logical name + GNV$UNIX_SHELL is set, it means that the + settings should assume that they are + running under a UNIX like shell. + + 3. A third setting is for utilities that + always should behave as if they are + running under a UNIX shell. + + If GNV$GNU is defined, then locally define + SYS$POSIX_ROOT to it. GNV$GNU can be set in + the SYSTEM table by the GNV setup. + SYS$POSIX_ROOT can not. + + The logical name BIN also needs to be defined + here, otherwise the CRTL replaces it with + SYS$SYSTEM: + + Never set the POSIX UID here, it will break + every reference to a GID/UID on systems that + do not have every VMS account mapped to a UID/GID + by TCPIP services. + + Reformat text to fit 80 columns. + + Remove all VAX C specific code. + + Linker is probably using exact case, so public + symbols for LIB$* and SYS$* must be in upper case. + + 2-002 J. Malmberg Support for VAX builds. OpenVMS/VAX does not have the + 17-Jun-2010 DECC$FEATURE routines. At this time I will not + be concerned if a feature setting exists on VAX, + as all we are doing is setting a logical name. + + 2-003 J. Malmberg Add DECC$FILENAME_UNIX_NOVERSION as version numbers + will usually mess up ported programs. + +*/ + +#include +#include +#include +#include +#include + +#pragma message disable pragma +#pragma message disable dollarid +#pragma message disable valuepres + +#pragma member_alignment save +#pragma nomember_alignment longword +#pragma message save +#pragma message disable misalgndmem +struct itmlst_3 { + unsigned short int buflen; + unsigned short int itmcode; + void *bufadr; + unsigned short int *retlen; +}; +#pragma message restore +#pragma member_alignment restore + +#ifdef __VAX +#define ENABLE "ENABLE" +#define DISABLE "DISABLE" +#else + +#define ENABLE TRUE +#define DISABLE 0 +int decc$feature_get_index (const char *name); +int decc$feature_set_value (int index, int mode, int value); + +#endif + +int SYS$TRNLNM( + const unsigned long * attr, + const struct dsc$descriptor_s * table_dsc, + struct dsc$descriptor_s * name_dsc, + const unsigned char * acmode, + const struct itmlst_3 * item_list); +int SYS$CRELNM( + const unsigned long * attr, + const struct dsc$descriptor_s * table_dsc, + const struct dsc$descriptor_s * name_dsc, + const unsigned char * acmode, + const struct itmlst_3 * item_list); +int LIB$SIGNAL(int); + +/* Take all the fun out of simply looking up a logical name */ +static int sys_trnlnm + (const char * logname, + char * value, + int value_len) +{ + const $DESCRIPTOR(table_dsc, "LNM$FILE_DEV"); + const unsigned long attr = LNM$M_CASE_BLIND; + struct dsc$descriptor_s name_dsc; + int status; + unsigned short result; + struct itmlst_3 itlst[2]; + + itlst[0].buflen = value_len; + itlst[0].itmcode = LNM$_STRING; + itlst[0].bufadr = value; + itlst[0].retlen = &result; + + itlst[1].buflen = 0; + itlst[1].itmcode = 0; + + name_dsc.dsc$w_length = strlen(logname); + name_dsc.dsc$a_pointer = (char *)logname; + name_dsc.dsc$b_dtype = DSC$K_DTYPE_T; + name_dsc.dsc$b_class = DSC$K_CLASS_S; + + status = SYS$TRNLNM(&attr, &table_dsc, &name_dsc, 0, itlst); + + if ($VMS_STATUS_SUCCESS(status)) { + + /* Null terminate and return the string */ + /*--------------------------------------*/ + value[result] = '\0'; + } + + return status; +} + +/* How to simply create a logical name */ +static int sys_crelnm + (const char * logname, + const char * value) +{ + int ret_val; + const char * proc_table = "LNM$PROCESS_TABLE"; + struct dsc$descriptor_s proc_table_dsc; + struct dsc$descriptor_s logname_dsc; + struct itmlst_3 item_list[2]; + + proc_table_dsc.dsc$a_pointer = (char *) proc_table; + proc_table_dsc.dsc$w_length = strlen(proc_table); + proc_table_dsc.dsc$b_dtype = DSC$K_DTYPE_T; + proc_table_dsc.dsc$b_class = DSC$K_CLASS_S; + + logname_dsc.dsc$a_pointer = (char *) logname; + logname_dsc.dsc$w_length = strlen(logname); + logname_dsc.dsc$b_dtype = DSC$K_DTYPE_T; + logname_dsc.dsc$b_class = DSC$K_CLASS_S; + + item_list[0].buflen = strlen(value); + item_list[0].itmcode = LNM$_STRING; + item_list[0].bufadr = (char *)value; + item_list[0].retlen = NULL; + + item_list[1].buflen = 0; + item_list[1].itmcode = 0; + + ret_val = SYS$CRELNM(NULL, &proc_table_dsc, &logname_dsc, NULL, item_list); + + return ret_val; +} + + + /* Start of DECC RTL Feature handling */ + +/* +** Sets default value for a feature +*/ +#ifdef __VAX +static void set_feature_default(const char *name, const char *value) +{ + sys_crelnm(name, value); +} +#else +static void set_feature_default(const char *name, int value) +{ + int index; + + index = decc$feature_get_index(name); + + if (index > 0) + decc$feature_set_value (index, 0, value); +} +#endif + +static void set_coe ( void ) +{ + + char gnv_posix_root[4096]; + char unix_shell_name[255]; + int use_unix_settings = 0; + int status; + int gnv_posix_root_found = 0; + + /* If this is compiled for use with a UNIX shell, then the logical + * name GNV$UNIX_SHELL will be set to that shell name. + * + * Else, if the GNV$UNIX_SHELL logical name is set, then this application + * is running under some UNIX like shell, so it should modify it's + * behavior to be UNIX like. + * + * If the above logical name is not set, then the application should + * expect that it is running under DCL, and should expect VMS filenames + * on input, and may need to output filenames in VMS format. + * + * This can be overriden at compile time with GNV_UNIX_TOOL being + * defined. + * + * So this means that there will be multiple object modules from this + * source module. One for each shell, one for programs that can function + * in both DCL and UNIX environments, and one for programs that require + * a UNIX environment. + */ + +#ifdef GNV_UNIX_SHELL + use_unix_settings = 1; + + status = sys_crelnm("GNV$UNIX_SHELL", GNV_UNIX_SHELL); + if (!$VMS_STATUS_SUCCESS(status)) { + /* We have a big problem */ + LIB$SIGNAL(status); + } +#else + +#ifdef GNV_UNIX_TOOL + use_unix_settings = 1; +#else + status = sys_trnlnm("GNV$UNIX_SHELL", + unix_shell_name, sizeof + unix_shell_name -1); + if (!$VMS_STATUS_SUCCESS(status)) { + unix_shell_name[0] = 0; + use_unix_settings = 0; + } +#endif /* GNV_UNIX_TOOL */ + +#endif /* GNV_UNIX_SHELL */ + + /* New style interface that works only on very recent + (Apr 2001 and beyond) CRTLs */ + + /* + * Only setting defaults allows logical names to + * override these settings. + */ + + /* Always set */ + + /* ACCESS should check ACLs or it is lying. */ + set_feature_default("DECC$ACL_ACCESS_CHECK" , ENABLE); + + /* We always want the new parse style */ + set_feature_default ("DECC$ARGV_PARSE_STYLE" , ENABLE); + + /* Unless we are in POSIX compliant mode, we want the old POSIX root + * enabled. + */ + set_feature_default("DECC$DISABLE_POSIX_ROOT", DISABLE); + + /* EFS charset, means UTF-8 support */ + /* VTF-7 support is controlled by a feature setting called UTF8 */ + set_feature_default ("DECC$EFS_CHARSET" , ENABLE); + set_feature_default ("DECC$EFS_CASE_PRESERVE" , ENABLE); + + + /* Support timestamps when available */ + set_feature_default ("DECC$EFS_FILE_TIMESTAMPS" , ENABLE); + + /* Cache environment varibles - performance improvements */ + set_feature_default ("DECC$ENABLE_GETENV_CACHE" , ENABLE); + + /* Start out with new file attribute inheritance */ +#ifdef __VAX + set_feature_default ("DECC$EXEC_FILEATTR_INHERITANCE", "2"); +#else + set_feature_default ("DECC$EXEC_FILEATTR_INHERITANCE", 2); +#endif + + /* Don't display trailing dot after files without type */ + set_feature_default ("DECC$READDIR_DROPDOTNOTYPE" , ENABLE); + + /* For standard output channels buffer output until terminator */ + /* Gets rid of output logs with single character lines in them. */ + set_feature_default ("DECC$STDIO_CTX_EOL" , ENABLE); + + /* Fix mv aa.bb aa */ + set_feature_default ("DECC$RENAME_NO_INHERIT" , ENABLE); + + if (use_unix_settings) { + + /* POSIX requires that open files be able to be removed */ + set_feature_default ("DECC$ALLOW_REMOVE_OPEN_FILES", ENABLE); + + set_feature_default ("DECC$FILENAME_UNIX_ONLY" , ENABLE); + /* FILENAME_UNIX_ONLY Implicitly sets + decc$disable_to_vms_logname_translation */ + + set_feature_default ("DECC$FILE_PERMISSION_UNIX", ENABLE); + + /* For now this only with UNIX mode, applications can override + * with out using a LIB$INITIALIZE setting. + * This should be an application specific setting only enabled + * if the application requires it. + * Left here for now for backwards compatibility + */ + set_feature_default ("DECC$FILE_SHARING" , ENABLE); + + set_feature_default ("DECC$FILE_OWNER_UNIX" , ENABLE); + set_feature_default ("DECC$POSIX_SEEK_STREAM_FILE", ENABLE); + + } else { + set_feature_default("DECC$FILENAME_UNIX_REPORT", ENABLE); + } + + /* When reporting UNIX filenames, glob the same way */ + set_feature_default ("DECC$GLOB_UNIX_STYLE" , ENABLE); + + /* The VMS version numbers on Unix filenames is incompatible with most */ + /* ported packages. */ + set_feature_default("DECC$FILENAME_UNIX_NO_VERSION", ENABLE); + + /* The VMS version numbers on Unix filenames is incompatible with most */ + /* ported packages. */ + set_feature_default("DECC$UNIX_PATH_BEFORE_LOGNAME", ENABLE); + + /* Set strtol to proper behavior */ + set_feature_default("DECC$STRTOL_ERANGE", ENABLE); + + /* Pipe feature settings are longer needed with virtual memory pipe + code. Programs that use pipe need to be converted to use the + virtual memory pipe code, which effectively removes the hangs and + left over temporary files. + + Comment left here to prevent regressions, as the larger pipe size + actually hurts memory usage with the new algorithm. + */ + /* do_not_set_default ("DECC$PIPE_BUFFER_SIZE" , 8192); */ + + + /* Rather than remove this completely, a comment is left here to warn + * someone from putting this bug back in. + * + * POSIX style UIDs require that the system administrator have set the + * system up to use POSIX style UIDs and GIDs. And if they have done + * so, then they should set the DECC$POSIX_STYLE_UID as a system wide + * logical name. + * + * Setting them in a program will break all routines that expect GID/UID + * stuff to work on systems set up by default with out mappings. + * + * Most utilities do not reference GID/UID values, so it took a while for + * this bug to surface. + */ + /* do_not_set_default ("DECC$POSIX_STYLE_UID" , TRUE); */ + + + + /* GNV depends on SYS$POSIX_ROOT to be properly set. Since SYS$POSIX_ROOT + * globally affects all C applications, SYS$POSIX_ROOT can not be set + * anywhere that can be seen by other applications. + * + * So GNV$GNU is used instead, and SYS$POSIX_ROOT will be set in + * in the process table in user mode to that value. + * + * Restriction: The system manager should not point GNV$GNU at + * SYS$POSIX_ROOT, or anything that resolves to SYS$POSIX_ROOT. + * + */ + + status = sys_trnlnm("GNV$GNU", + gnv_posix_root, + sizeof gnv_posix_root - 1); + if ($VMS_STATUS_SUCCESS(status)) { + status = sys_crelnm("SYS$POSIX_ROOT", "GNV$GNU:"); + gnv_posix_root_found = 1; + } + + /* GNV depends on BIN being set to GNV$GNU:[bin]. Since BIN + * is not prefixed, and it affects everything globally, it needs to + * be set here if it is not defined already. + * If it is set already, assume that it is correct, rather than + * trying to second guess the user. + * If GNV$GNU is not defined, then define bin to be SYS$POSIX_ROOT. + */ + + status = sys_trnlnm("BIN", + gnv_posix_root, + sizeof gnv_posix_root - 1); + if (!$VMS_STATUS_SUCCESS(status)) { + if (gnv_posix_root_found) { + status = sys_crelnm("BIN", "GNV$GNU:[BIN]"); + } else { + status = sys_crelnm("BIN", "SYS$POSIX_ROOT:[BIN]"); + } + } + +} + +#pragma nostandard +#pragma extern_model save +#ifdef __VAX +#pragma extern_model strict_refdef "LIB$INITIALIZE" nowrt, long, nopic +#else +#pragma extern_model strict_refdef "LIB$INITIALIZE" nowrt, long +# if __INITIAL_POINTER_SIZE +# pragma __pointer_size __save +# pragma __pointer_size 32 +# else +# pragma __required_pointer_size __save +# pragma __required_pointer_size 32 +# endif +#endif +/* Set our contribution to the LIB$INITIALIZE array */ +void (* const iniarray[])(void) = {set_coe, } ; +#ifndef __VAX +# if __INITIAL_POINTER_SIZE +# pragma __pointer_size __restore +# else +# pragma __required_pointer_size __restore +# endif +#endif + + +/* +** Force a reference to LIB$INITIALIZE to ensure it +** exists in the image. +*/ +int LIB$INITIALIZE(void); +#ifdef __DECC +#pragma extern_model strict_refdef +#endif + int lib_init_ref = (int) LIB$INITIALIZE; +#ifdef __DECC +#pragma extern_model restore +#pragma standard +#endif diff --git a/vms/vms_gawk_main_wrapper.c b/vms/vms_gawk_main_wrapper.c new file mode 100644 index 00000000..367f0cc2 --- /dev/null +++ b/vms/vms_gawk_main_wrapper.c @@ -0,0 +1,487 @@ +/* File: vms_gawk_main_wrapper.c + * + * This module provides a wrapper around the main() function of a ported + * program for two functions: + * + * 1. Make sure that the argv[0] string is set as close as possible to + * what the original command was given. + * + * 2. Make sure that the posix exit is called. + * + * 3. Fixup the timezone information. + * + * Copyright 2012, John Malmberg + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + + +#pragma member_alignment save +#pragma nomember_alignment longword +struct item_list_3 { + unsigned short len; + unsigned short code; + void * bufadr; + unsigned short * retlen; +}; + +struct filescan_itmlst_2 { + unsigned short length; + unsigned short itmcode; + char * component; +}; + +#pragma member_alignment + +int SYS$GETDVIW + (unsigned long efn, + unsigned short chan, + const struct dsc$descriptor_s * devnam, + const struct item_list_3 * itmlst, + void * iosb, + void (* astadr)(unsigned long), + unsigned long astprm, + void * nullarg); + +int SYS$FILESCAN + (const struct dsc$descriptor_s * srcstr, + struct filescan_itmlst_2 * valuelist, + unsigned long * fldflags, + struct dsc$descriptor_s *auxout, + unsigned short * retlen); + +int SYS$TRNLNM( + const unsigned long * attr, + const struct dsc$descriptor_s * table_dsc, + struct dsc$descriptor_s * name_dsc, + const unsigned char * acmode, + const struct item_list_3 * item_list); + +/* Take all the fun out of simply looking up a logical name */ +static int sys_trnlnm + (const char * logname, + char * value, + int value_len) +{ + const $DESCRIPTOR(table_dsc, "LNM$FILE_DEV"); + const unsigned long attr = LNM$M_CASE_BLIND; + struct dsc$descriptor_s name_dsc; + int status; + unsigned short result; + struct item_list_3 itlst[2]; + + itlst[0].len = value_len; + itlst[0].code = LNM$_STRING; + itlst[0].bufadr = value; + itlst[0].retlen = &result; + + itlst[1].len = 0; + itlst[1].code = 0; + + name_dsc.dsc$w_length = strlen(logname); + name_dsc.dsc$a_pointer = (char *)logname; + name_dsc.dsc$b_dtype = DSC$K_DTYPE_T; + name_dsc.dsc$b_class = DSC$K_CLASS_S; + + status = SYS$TRNLNM(&attr, &table_dsc, &name_dsc, 0, itlst); + + if ($VMS_STATUS_SUCCESS(status)) { + + /* Null terminate and return the string */ + /*--------------------------------------*/ + value[result] = '\0'; + } + + return status; +} + +int original_main(int argc, char ** argv, char **env); + +int main(int argc, char ** argv, char **env) { +int status; +int result; +char arg_nam[256]; +char **new_argv; +char *tz_rule; + +#ifdef TEST_MAIN + printf("original argv[0] = %s\n", argv[0]); +#endif + + new_argv = argv; + result = 0; + + /* If the path name starts with a /, then it is an absolute path */ + /* that may have been generated by the CRTL instead of the command name */ + /* If it is the device name between the slashes, then this was likely */ + /* from the run command and needs to be fixed up. */ + /* If the DECC$POSIX_COMPLIANT_PATHNAMES is set to 2, then it is the */ + /* DISK$VOLUME that will be present, and it will still need to be fixed. */ + if (argv[0][0] == '/') { + char * nextslash; + int length; + struct item_list_3 itemlist[3]; + unsigned short dvi_iosb[4]; + char alldevnam[64]; + unsigned short alldevnam_len; + struct dsc$descriptor_s devname_dsc; + char diskvolnam[256]; + unsigned short diskvolnam_len; + + /* Get some information about the disk */ + /*--------------------------------------*/ + itemlist[0].len = (sizeof alldevnam) - 1; + itemlist[0].code = DVI$_ALLDEVNAM; + itemlist[0].bufadr = alldevnam; + itemlist[0].retlen = &alldevnam_len; + itemlist[1].len = (sizeof diskvolnam) - 1 - 5; + itemlist[1].code = DVI$_VOLNAM; + itemlist[1].bufadr = &diskvolnam[5]; + itemlist[1].retlen = &diskvolnam_len; + itemlist[2].len = 0; + itemlist[2].code = 0; + + /* Add the prefix for the volume name. */ + /* SYS$GETDVI will append the volume name to this */ + strcpy(diskvolnam,"DISK$"); + + nextslash = strchr(&argv[0][1], '/'); + if (nextslash != NULL) { + length = nextslash - argv[0] - 1; + + /* Cast needed for HP C compiler diagnostic */ + devname_dsc.dsc$a_pointer = (char *)&argv[0][1]; + devname_dsc.dsc$w_length = length; + devname_dsc.dsc$b_dtype = DSC$K_DTYPE_T; + devname_dsc.dsc$b_class = DSC$K_CLASS_S; + + status = SYS$GETDVIW + (EFN$C_ENF, + 0, + &devname_dsc, + itemlist, + dvi_iosb, + NULL, 0, 0); + if (!$VMS_STATUS_SUCCESS(status)) { + /* If the sys$getdviw fails, then this path was passed by */ + /* An exec() program and not from DCL, so do nothing */ + /* An example is "/tmp/program" where tmp: does not exist */ +#ifdef TEST_MAIN + printf("sys$getdviw failed with status %d\n", status); +#endif + result = 0; + } else if (!$VMS_STATUS_SUCCESS(dvi_iosb[0])) { +#ifdef TEST_MAIN + printf("sys$getdviw failed with iosb %d\n", dvi_iosb[0]); +#endif + result = 0; + } else { + char * devnam; + int devnam_len; + char argv_dev[64]; + + /* Null terminate the returned alldevnam */ + alldevnam[alldevnam_len] = 0; + devnam = alldevnam; + devnam_len = alldevnam_len; + + /* Need to skip past any leading underscore */ + if (devnam[0] == '_') { + devnam++; + devnam_len--; + } + + /* And remove the trailing colon */ + if (devnam[devnam_len - 1] == ':') { + devnam_len--; + devnam[devnam_len] = 0; + } + + /* Null terminate the returned volnam */ + diskvolnam_len += 5; + diskvolnam[diskvolnam_len] = 0; + + /* Check first for normal CRTL behavior */ + if (devnam_len == length) { + strncpy(arg_nam, &argv[0][1], length); + arg_nam[length] = 0; + result = (strcasecmp(devnam, arg_nam) == 0); + } + + /* If we have not got a match check for POSIX Compliant */ + /* behavior. To be more accurate, we could also check */ + /* to see if that feature is active. */ + if ((result == 0) && (diskvolnam_len == length)) { + strncpy(arg_nam, &argv[0][1], length); + arg_nam[length] = 0; + result = (strcasecmp(diskvolnam, arg_nam) == 0); + } + } + } + } else { + /* The path did not start with a slash, so it could be VMS format */ + /* If it is vms format, it has a volume/device in it as it must */ + /* be an absolute path */ + struct dsc$descriptor_s path_desc; + int status; + unsigned long field_flags; + struct filescan_itmlst_2 item_list[5]; + char * volume; + char * name; + int name_len; + char * ext; + + path_desc.dsc$a_pointer = (char *)argv[0]; /* cast ok */ + path_desc.dsc$w_length = strlen(argv[0]); + path_desc.dsc$b_dtype = DSC$K_DTYPE_T; + path_desc.dsc$b_class = DSC$K_CLASS_S; + + /* Don't actually need to initialize anything buf itmcode */ + /* I just do not like uninitialized input values */ + + /* Sanity check, this must be the same length as input */ + item_list[0].itmcode = FSCN$_FILESPEC; + item_list[0].length = 0; + item_list[0].component = NULL; + + /* If the device is present, then it if a VMS spec */ + item_list[1].itmcode = FSCN$_DEVICE; + item_list[1].length = 0; + item_list[1].component = NULL; + + /* we need the program name and type */ + item_list[2].itmcode = FSCN$_NAME; + item_list[2].length = 0; + item_list[2].component = NULL; + + item_list[3].itmcode = FSCN$_TYPE; + item_list[3].length = 0; + item_list[3].component = NULL; + + /* End the list */ + item_list[4].itmcode = 0; + item_list[4].length = 0; + item_list[4].component = NULL; + + status = SYS$FILESCAN( + (const struct dsc$descriptor_s *)&path_desc, + item_list, &field_flags, NULL, NULL); + + if ($VMS_STATUS_SUCCESS(status) && + (item_list[0].length == path_desc.dsc$w_length) && + (item_list[1].length != 0)) { + + char * dollar; + int keep_ext; + int i; + + /* We need the filescan to be successful, */ + /* same length as input, and a volume to be present */ + + /* Need a new argv array */ + new_argv = malloc((argc + 1) * (sizeof(char *))); + new_argv[0] = arg_nam; + i = 1; + while (i < argc) { + new_argv[i] = argv[i]; + i++; + } + + /* We will assume that we only get to this path on a version */ + /* of VMS that does not support the EFS character set */ + + /* There may be a xxx$ prefix on the image name. Linux */ + /* programs do not handle that well, so strip the prefix */ + name = item_list[2].component; + name_len = item_list[2].length; + dollar = strrchr(name, '$'); + if (dollar != NULL) { + dollar++; + name_len = name_len - (dollar - name); + name = dollar; + } + + strncpy(arg_nam, name, name_len); + arg_nam[name_len] = 0; + + /* We only keep the extension if it is not ".exe" */ + keep_ext = 0; + ext = item_list[3].component; + + if (item_list[3].length != 1) { + if (item_list[3].length != 4) { + keep_ext = 1; + } else { + int x; + x = strncmp(ext, ".exe", 4); + if (x != 0) { + keep_ext = 1; + } + } + } + + if (keep_ext == 1) { + strncpy(&arg_nam[name_len], ext, item_list[3].length); + } + } + } + + if (result) { + char * lastslash; + char * dollar; + char * dotexe; + char * lastdot; + char * extension; + + /* This means it is probably the name from a DCL command */ + /* Find the last slash which separates the file from the */ + /* path. */ + lastslash = strrchr(argv[0], '/'); + + if (lastslash != NULL) { + int i; + + lastslash++; + + /* There may be a xxx$ prefix on the image name. Linux */ + /* programs do not handle that well, so strip the prefix */ + dollar = strrchr(lastslash, '$'); + + if (dollar != NULL) { + dollar++; + lastslash = dollar; + } + + strcpy(arg_nam, lastslash); + + /* In UNIX mode + EFS character set, there should not be a */ + /* version present, as it is not possible when parsing to */ + /* tell if it is a version or part of the UNIX filename as */ + /* UNIX programs use numeric extensions for many reasons. */ + + lastdot = strrchr(arg_nam, '.'); + if (lastdot != NULL) { + int i; + + i = 1; + while (isdigit(lastdot[i])) { + i++; + } + if (lastdot[i] == 0) { + *lastdot = 0; + } + } + + /* Find the .exe on the name (case insenstive) and toss it */ + dotexe = strrchr(arg_nam, '.'); + if (dotexe != NULL) { + if ((dotexe[1] == 'e' || dotexe[1] == 'E') && + (dotexe[2] == 'x' || dotexe[2] == 'X') && + (dotexe[3] == 'e' || dotexe[3] == 'E') && + (dotexe[4] == 0)) { + + *dotexe = 0; + } else { + /* Also need to handle a null extension because of a */ + /* CRTL bug. */ + if (dotexe[1] == 0) { + *dotexe = 0; + } + } + } + + /* Need a new argv array */ + new_argv = malloc((argc + 1) * (sizeof(char *))); + new_argv[0] = arg_nam; + i = 1; + while (i < argc) { + new_argv[i] = argv[i]; + i++; + } + new_argv[i] = 0; + + } else { + /* There is no way that the code should ever get here */ + /* As we already verified that the '/' was present */ + fprintf(stderr, "Sanity failure somewhere we lost a '/'\n"); + } + + } + + /* + * The vms_main_wrapper fixes up the name, but for the DCL shell + * may leave it in upper case, which messes up the self tests. + * force it to lower case here. + */ + char * shell; + int lcname = 0; + shell = getenv("SHELL"); + if (shell != NULL) { + if (strcmp(shell, "DCL") == 0) { + lcname = 1; + } + } else { + lcname = 1; + } + if (lcname == 1) { + int i = 0; + while (new_argv[0][i] != 0) { + new_argv[0][i] = tolower(new_argv[0][i]); + i++; + } + } + + /* Fix up the time zone */ + tz_rule = malloc(1024); + status = sys_trnlnm("TZ", tz_rule, 1024); + if ($VMS_STATUS_SUCCESS(status)) { + setenv("TZ", tz_rule, 1); + } else { + status = sys_trnlnm("SYS$TIMEZONE_RULE", tz_rule, 1024); + if ($VMS_STATUS_SUCCESS(status)) { + setenv("TZ", tz_rule, 1); + } + } + free(tz_rule); + + exit(original_main(argc, new_argv, env)); + return 1; /* Needed to silence compiler diagnostic */ +} + +#define main original_main + +#ifdef TEST_MAIN + +int main(int argc, char ** argv, char **env) { + + printf("modified argv[0] = %s\n", argv[0]); + + return 0; +} + +#endif diff --git a/vms/vms_misc.c b/vms/vms_misc.c index cd92d7ef..ce190341 100644 --- a/vms/vms_misc.c +++ b/vms/vms_misc.c @@ -118,15 +118,24 @@ vms_open( const char *name, int mode, ... ) result = creat(name, 0, "rfm=stmlf", "rat=cr", "shr=nil", "mbc=32"); } else { struct stat stb; + int stat_result; const char *mbc, *shr = "shr=get", *ctx = "ctx=stm"; - - if (stat((char *)name, &stb) < 0) { /* assume DECnet */ + + stat_result = stat((char *)name, &stb); + if ( stat_result < 0) { /* assume DECnet */ mbc = "mbc=8"; } else { /* ordinary file; allow full sharing iff record format */ mbc = "mbc=32"; if ((stb.st_fab_rfm & 0x0F) < FAB$C_STM) shr = "shr=get,put,upd"; } result = open(name, mode, 0, shr, mbc, "mbf=2"); + if ((stat_result >= 0) && (result < 0) && (errno == ENOENT)) { + /* ENOENT not possible because stat succeeded */ + errno = EMFILE; + if (S_ISDIR(stb.st_mode)) { + errno = EISDIR; /* Bug seen in VMS 8.3 */ + } + } } /* This is only approximate; the ACP -> RMS -> VAXCRTL interface diff --git a/vms/vmsbuild.com b/vms/vmsbuild.com index 95c6aeb3..ff5dc929 100644 --- a/vms/vmsbuild.com +++ b/vms/vmsbuild.com @@ -15,9 +15,18 @@ $! $ REL = "4.1" !release version number $ PATCHLVL = "0" $! +$ if (f$getsyi("HW_MODEL") .lt. 1024) +$ then +$ arch_name = "VAX" +$ else +$ arch_name = f$edit(f$getsyi("ARCH_NAME"), "UPCASE") +$ endif $! $ CCFLAGS = "/noList" ! "/noOpt/Debug" +$! CCFLAGS = "/list/show=(expan,incl) $ CDEFS = "GAWK,HAVE_CONFIG_H" +$! Do not specify _POSIX_EXIT here, we are using other tricks for that. +$! $! $ if p1.eqs."" then p1 = "DECC" !default compiler $ if p1.eqs."GNUC" @@ -38,8 +47,16 @@ $ CFLAGS = "/Incl=[]/Obj=[]/Opt=noInline/Def=(''CDEFS')''CCFLAGS'" $ LIBS = "sys$share:vaxcrtl.exe/Shareable" $ else !!VAXC $! neither GNUC nor VAXC, assume DECC (same for either VAX or Alpha) +$ if arch_name .eqs. "vax" +$ then +$ cfloat = "" +$ else +$ cfloat = "/float=ieee/ieee_mode=denorm_results" +$ endif $ CC = "cc/DECC/Prefix=All" -$ CFLAGS = "/Incl=[]/Obj=[]/Def=(''CDEFS')''CCFLAGS'" +$ CINC = "/NESTED_INCLUDE=NONE" +$ CFLAGS = "/Incl=([],[.vms])/Obj=[]/Def=(''CDEFS')''CINC'''CCFLAGS'" +$ CFLAGS = cfloat + CFLAGS $ LIBS = "" ! DECC$SHR instead of VAXCRTL, no special link option needed $ endif !VAXC $ endif !GNUC @@ -47,12 +64,15 @@ $! $ cc = CC + CFLAGS $ show symbol cc $! -$ if f$search("config.h").nes."" then - - if f$cvtime(f$file_attr("config.h","RDT")).ges.- - f$cvtime(f$file_attr("[.vms]vms-conf.h","RDT")) then goto config_ok -$ v = f$verify(1) -$ copy [.vms]vms-conf.h []config.h -$! 'f$verify(v)' +$ if f$search("config.h") .nes. "" +$ then +$ if f$cvtime(f$file_attr("config.h", "RDT")) .ges. - + f$cvtime(f$file_attr("configh.in","RDT")) then goto config_ok +$ endif +$ v = f$verify(0) +$ @[.vms]generate_config_vms_h_gawk.com +$ @[.vms]config_h.com NOBUILTINS +$! $config_ok: $ if f$search("awkgram.c").nes."" then goto awkgram_ok $ write sys$output " You must process `awkgram.y' with ""yacc"" or ""bison""" @@ -106,7 +126,8 @@ $ cc [.vms]vms_fwrite.c $ cc [.vms]vms_args.c $ cc [.vms]vms_gawk.c $ cc [.vms]vms_cli.c -$ set command/Object=[]gawk_cmd.obj [.vms]gawk.cld +$ cc [.vms]vms_crtl_init.c +$ set command/Object=[]gawk_cmd.obj sys$disk:[.vms]gawk.cld $! 'f$verify(v)' $! $ close/noLog Fopt @@ -116,15 +137,18 @@ array.obj,awkgram.obj,builtin.obj,dfa.obj,ext.obj,field.obj,floatcomp.obj gawkmisc.obj,getopt.obj,getopt1.obj,io.obj main.obj,msg.obj,node.obj random.obj,re.obj,regex.obj,replace.obj,version.obj,eval.obj,profile.obj -command.obj,debug.obj,int_array.obj,cint_array.obj,gawkapi.obj,mpfr.obj,str_array.obj,symbol.obj +command.obj,debug.obj,int_array.obj,cint_array.obj,gawkapi.obj,mpfr.obj +str_array.obj,symbol.obj []vms_misc.obj,vms_popen.obj,vms_fwrite.obj,vms_args.obj -[]vms_gawk.obj,vms_cli.obj,gawk_cmd.obj +[]vms_gawk.obj,vms_cli.obj,gawk_cmd.obj,vms_crtl_init.obj psect_attr=environ,noshr !extern [noshare] char ** stack=48 !preallocate more pages (default is 20) iosegment=128 !ditto (default is 32) +$! +$ v = f$verify(1) +$ @[.vms]gawk_ident.com $ open/append Fopt gawk.opt $ write Fopt libs -$ write Fopt "identification=""V''REL'.''PATCHLVL'""" $ close Fopt $! $ v = f$verify(1) diff --git a/vms/vmstest.com b/vms/vmstest.com index 25404373..7b1c3a36 100644 --- a/vms/vmstest.com +++ b/vms/vmstest.com @@ -601,7 +601,7 @@ $ mon = f$cvtime(now,"ABSOLUTE","MONTH") $ mon = f$extract(0,1,mon) + f$edit(f$extract(1,2,mon),"LOWERCASE") $ day = f$cvtime(now,,"DAY") $ tim = f$extract(0,8,f$cvtime(now,,"TIME")) -$ tz = "" +$ tz = f$trnlnm("SYS$TIMEZONE_NAME") $ yr = f$cvtime(now,,"YEAR") $ if f$trnlnm("FTMP").nes."" then close/noLog ftmp $ open/Write ftmp strftime.in -- cgit v1.2.3 From 25e276741ea0a8fb6503a4c060610827dac55825 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 12 Dec 2013 20:54:30 +0200 Subject: Next set of changes. --- vms/ChangeLog | 7 + vms/gawkmisc.vms | 453 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 450 insertions(+), 10 deletions(-) diff --git a/vms/ChangeLog b/vms/ChangeLog index afcdf89f..b941fbe5 100644 --- a/vms/ChangeLog +++ b/vms/ChangeLog @@ -1,3 +1,10 @@ +2013-12-10 John E. Malmberg + + * gawkmisc.mvs: Add lots of includes. + (sys_trnlnm): New function. + (gawk_name): Improved. + (os_arg_fixup): Fix up time zone. + 2013-12-08 John E. Malmberg * descrip.mms: Add IEEE float for non-vax. diff --git a/vms/gawkmisc.vms b/vms/gawkmisc.vms index bee0b962..046c5167 100644 --- a/vms/gawkmisc.vms +++ b/vms/gawkmisc.vms @@ -23,30 +23,446 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + + +#pragma member_alignment save +#pragma nomember_alignment longword +struct item_list_3 { + unsigned short len; + unsigned short code; + void * bufadr; + unsigned short * retlen; +}; + +struct filescan_itmlst_2 { + unsigned short length; + unsigned short itmcode; + char * component; +}; + +#pragma member_alignment + +int SYS$GETDVIW( + unsigned long efn, + unsigned short chan, + const struct dsc$descriptor_s * devnam, + const struct item_list_3 * itmlst, + void * iosb, + void (* astadr)(unsigned long), + unsigned long astprm, + void * nullarg); + +int SYS$FILESCAN( + const struct dsc$descriptor_s * srcstr, + struct filescan_itmlst_2 * valuelist, + unsigned long * fldflags, + struct dsc$descriptor_s *auxout, + unsigned short * retlen); + +int SYS$TRNLNM( + const unsigned long * attr, + const struct dsc$descriptor_s * table_dsc, + struct dsc$descriptor_s * name_dsc, + const unsigned char * acmode, + const struct item_list_3 * item_list); + char quote = '\''; char *defpath = DEFPATH; char *deflibpath = DEFLIBPATH; char envsep = ','; +#define VMS_NAME_LEN 1 +static char vms_name[VMS_NAME_LEN+1]; + +/* Take all the fun out of simply looking up a logical name */ +static int sys_trnlnm + (const char * logname, + char * value, + int value_len) +{ + const $DESCRIPTOR(table_dsc, "LNM$FILE_DEV"); + const unsigned long attr = LNM$M_CASE_BLIND; + struct dsc$descriptor_s name_dsc; + int status; + unsigned short result; + struct item_list_3 itlst[2]; + + itlst[0].len = value_len; + itlst[0].code = LNM$_STRING; + itlst[0].bufadr = value; + itlst[0].retlen = &result; + + itlst[1].len = 0; + itlst[1].code = 0; + + name_dsc.dsc$w_length = strlen(logname); + name_dsc.dsc$a_pointer = (char *)logname; + name_dsc.dsc$b_dtype = DSC$K_DTYPE_T; + name_dsc.dsc$b_class = DSC$K_CLASS_S; + + status = SYS$TRNLNM(&attr, &table_dsc, &name_dsc, 0, itlst); + + if ($VMS_STATUS_SUCCESS(status)) { + + /* Null terminate and return the string */ + value[result] = '\0'; + } + + return status; +} + /* gawk_name --- pull out the "gawk" part from how the OS called us */ +/* You would not think that this should be a such a problem, but + * VMS extended file specifications are tricky to parse, and we have + * to tell the difference between a CRTL generated argv[0] and a + * passed exec() argv[0] and handle both cases. + */ + char * gawk_name(filespec) const char *filespec; { - char *p, *q; + int status; + int result; + char * shell; + int lcname = 0; + + /* If the path name starts with a /, then it is an absolute path + * that may have been generated by the CRTL instead of the command + * name. If it is the device name between the slashes, then this + * was likely from the run command and needs to be fixed up. + * If the DECC$POSIX_COMPLIANT_PATHNAMES is set to 2, then it is + * the DISK$VOLUME that will be present, and it will still need to + * be fixed. + */ - /* "device:[root.][directory.subdir]GAWK.EXE;n" -> "GAWK" */ - p = strrchr(filespec, ']'); /* directory punctuation */ - q = strrchr(filespec, '>'); /* alternate punct */ + if (filespec[0] == '/') { + char * nextslash; + int length; + struct item_list_3 itemlist[3]; + unsigned short dvi_iosb[4]; + char alldevnam[64]; + unsigned short alldevnam_len; + struct dsc$descriptor_s devname_dsc; + char diskvolnam[256]; + unsigned short diskvolnam_len; + + /* Get some information about the disk */ + /*--------------------------------------*/ + itemlist[0].len = (sizeof alldevnam) - 1; + itemlist[0].code = DVI$_ALLDEVNAM; + itemlist[0].bufadr = alldevnam; + itemlist[0].retlen = &alldevnam_len; + itemlist[1].len = (sizeof diskvolnam) - 1 - 5; + itemlist[1].code = DVI$_VOLNAM; + itemlist[1].bufadr = &diskvolnam[5]; + itemlist[1].retlen = &diskvolnam_len; + itemlist[2].len = 0; + itemlist[2].code = 0; + + /* Add the prefix for the volume name. */ + /* SYS$GETDVI will append the volume name to this */ + strcpy(diskvolnam,"DISK$"); + + nextslash = strchr(&filespec[1], '/'); + if (nextslash != NULL) { + length = nextslash - filespec - 1; + + /* DECC requires a cast here */ + devname_dsc.dsc$a_pointer = (char *)&filespec[1]; + devname_dsc.dsc$w_length = length; + devname_dsc.dsc$b_dtype = DSC$K_DTYPE_T; + devname_dsc.dsc$b_class = DSC$K_CLASS_S; + + status = SYS$GETDVIW( + EFN$C_ENF, + 0, + &devname_dsc, + itemlist, + dvi_iosb, + NULL, 0, 0); + if (!$VMS_STATUS_SUCCESS(status)) { + /* If the sys$getdviw fails, then this path + * was passed by an exec() program and not + * from DCL, so do nothing. + * An example is "/tmp/program" where tmp: + * does not exist + */ + result = 0; + } else if (!$VMS_STATUS_SUCCESS(dvi_iosb[0])) { + result = 0; + } else { + char * devnam; + int devnam_len; + char argv_dev[64]; + + /* Null terminate the returned alldevnam */ + alldevnam[alldevnam_len] = 0; + devnam = alldevnam; + devnam_len = alldevnam_len; + + /* Need to skip past any leading underscore */ + if (devnam[0] == '_') { + devnam++; + devnam_len--; + } + + /* And remove the trailing colon */ + if (devnam[devnam_len - 1] == ':') { + devnam_len--; + devnam[devnam_len] = 0; + } + + /* Null terminate the returned volnam */ + diskvolnam_len += 5; + diskvolnam[diskvolnam_len] = 0; + + /* Check first for normal CRTL behavior */ + if (devnam_len == length) { + strncpy(vms_name, &filespec[1], length); + vms_name[length] = 0; + result = (strcasecmp(devnam, vms_name) == 0); + } + + /* If we have not got a match check for + * POSIX Compliant behavior. To be more + * accurate, we could also check to see + * if that feature is active. + */ + if ((result == 0) && + (diskvolnam_len == length)) { + int cmp; + strncpy(vms_name, &filespec[1], length); + vms_name[length] = 0; + cmp = strcasecmp(diskvolnam, vms_name); + result = (cmp == 0); + } + } + } + } else { + /* The path did not start with a slash, so it could be VMS + * format. If it is vms format, it has a volume/device in + * it as it must be an absolute path + */ + struct dsc$descriptor_s path_desc; + int status; + unsigned long field_flags; + struct filescan_itmlst_2 item_list[5]; + char * volume; + char * name; + int name_len; + char * ext; + + /* DECC requires a cast here */ + path_desc.dsc$a_pointer = (char *)filespec; + path_desc.dsc$w_length = strlen(filespec); + path_desc.dsc$b_dtype = DSC$K_DTYPE_T; + path_desc.dsc$b_class = DSC$K_CLASS_S; + + /* Don't actually need to initialize anything buf itmcode */ + /* I just do not like uninitialized input values */ + + /* Sanity check, this must be the same length as input */ + item_list[0].itmcode = FSCN$_FILESPEC; + item_list[0].length = 0; + item_list[0].component = NULL; + + /* If the device is present, then it if a VMS spec */ + item_list[1].itmcode = FSCN$_DEVICE; + item_list[1].length = 0; + item_list[1].component = NULL; + + /* we need the program name and type */ + item_list[2].itmcode = FSCN$_NAME; + item_list[2].length = 0; + item_list[2].component = NULL; + + item_list[3].itmcode = FSCN$_TYPE; + item_list[3].length = 0; + item_list[3].component = NULL; + + /* End the list */ + item_list[4].itmcode = 0; + item_list[4].length = 0; + item_list[4].component = NULL; + + status = SYS$FILESCAN( + (const struct dsc$descriptor_s *)&path_desc, + item_list, &field_flags, NULL, NULL); + + if ($VMS_STATUS_SUCCESS(status) && + (item_list[0].length == path_desc.dsc$w_length) && + (item_list[1].length != 0)) { + + char * dollar; + int keep_ext; + int i; + + /* We need the filescan to be successful, + * same length as input, and a volume to be present. + * + * We will assume that we only get to this path on + * a version of VMS that does not support the EFS + * character set. + * + * There may be a xxx$ prefix on the image name. + * Linux programs do not handle that well, so + * strip the prefix. + */ + name = item_list[2].component; + name_len = item_list[2].length; + dollar = strrchr(name, '$'); + if (dollar != NULL) { + dollar++; + name_len = name_len - (dollar - name); + name = dollar; + } + + strncpy(vms_name, name, name_len); + vms_name[name_len] = 0; + + /* We only keep the extension if it is not ".exe" */ + keep_ext = 0; + ext = item_list[3].component; + + if (item_list[3].length != 1) { + if (item_list[3].length != 4) { + keep_ext = 1; + } else { + int x; + x = strncmp(ext, ".exe", 4); + if (x != 0) { + keep_ext = 1; + } + } + } + + if (keep_ext == 1) { + strncpy(&vms_name[name_len], + ext, item_list[3].length); + } + } + } + + if (result) { + char * lastslash; + char * dollar; + char * dotexe; + char * lastdot; + char * extension; + + /* This means it is probably the name from a DCL command + * Find the last slash which separates the file from the + * path. + */ + lastslash = strrchr(filespec, '/'); + + if (lastslash != NULL) { + int i; + + lastslash++; + + /* There may be a xxx$ prefix on the image name. */ + /* Linux programs do not handle that well, so */ + /* strip the prefix */ + dollar = strrchr(lastslash, '$'); + + if (dollar != NULL) { + dollar++; + lastslash = dollar; + } + + strcpy(vms_name, lastslash); + + /* In UNIX mode + EFS character set, there should + * not be a version present, as it is not possible + * when parsing to tell if it is a version or part + * of the UNIX filename as UNIX programs use numeric + * extensions for many reasons. + */ + + lastdot = strrchr(vms_name, '.'); + if (lastdot != NULL) { + int i; + + i = 1; + while (isdigit(lastdot[i])) { + i++; + } + if (lastdot[i] == 0) { + *lastdot = 0; + } + } + + /* Find the .exe on the name (case insenstive) + * and toss it + */ + dotexe = strrchr(vms_name, '.'); + if (dotexe != NULL) { + if ((dotexe[1] == 'e' || dotexe[1] == 'E') && + (dotexe[2] == 'x' || dotexe[2] == 'X') && + (dotexe[3] == 'e' || dotexe[3] == 'E') && + (dotexe[4] == 0)) { + + *dotexe = 0; + } else { + /* Also need to handle a null + * extension because of a CRTL bug. + */ + if (dotexe[1] == 0) { + *dotexe = 0; + } + } + } + + } else { + /* There is no way that the code should ever get here + * As we already verified that the '/' was present + */ + fprintf(stderr, + "Sanity failure somewhere we lost a '/'\n"); + } + } else { + /* No changes needed */ + strncpy(vms_name, filespec, VMS_NAME_LEN); + vms_name[VMS_NAME_LEN] = 0; + } - if (p == NULL || q > p) - p = q; - p = strdup(p == NULL ? filespec : (p + 1)); - if ((q = strrchr(p, '.')) != NULL) - *q = '\0'; /* strip .typ;vers */ - return p; + /* + * The above fixes up the name, but for the DCL shell + * may leave it in upper case, which messes up the self tests. + * force it to lower case here. + */ + shell = getenv("SHELL"); + if (shell != NULL) { + if (strcmp(shell, "DCL") == 0) { + lcname = 1; + } + } else { + lcname = 1; + } + if (lcname == 1) { + int i = 0; + while (vms_name[i] != 0) { + vms_name[i] = tolower(vms_name[i]); + i++; + } + } + return vms_name; } /* os_arg_fixup --- fixup the command line */ @@ -56,7 +472,24 @@ os_arg_fixup(argcp, argvp) int *argcp; char ***argvp; { + char *tz_rule; + int status; + (void) vms_arg_fixup(argcp, argvp); + + /* Fix up the time zone */ + /* For some reason it gets trashed */ + tz_rule = malloc(1024); + status = sys_trnlnm("TZ", tz_rule, 1024); + if ($VMS_STATUS_SUCCESS(status)) { + setenv("TZ", tz_rule, 1); + } else { + status = sys_trnlnm("SYS$TIMEZONE_RULE", tz_rule, 1024); + if ($VMS_STATUS_SUCCESS(status)) { + setenv("TZ", tz_rule, 1); + } + } + free(tz_rule); } /* os_devopen --- open special per-OS devices */ -- cgit v1.2.3 From 07296693d0b748f6e6040f988099177d877f1229 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 12 Dec 2013 21:00:00 +0200 Subject: Further changes. --- ChangeLog | 1 - main.c | 5 - vms/vms_gawk_main_wrapper.c | 487 -------------------------------------------- 3 files changed, 493 deletions(-) delete mode 100644 vms/vms_gawk_main_wrapper.c diff --git a/ChangeLog b/ChangeLog index 9df02847..7ab202ae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,7 +2,6 @@ * io.c (redirect): Add additional VMS error codes. (nextfile): Retry open after closing some files. - * main.c : VMS needs to fix up argv[0] and timezone. 2013-12-10 Scott Deifik diff --git a/main.c b/main.c index a47b025e..4f77510f 100644 --- a/main.c +++ b/main.c @@ -194,11 +194,6 @@ static const struct option optab[] = { { NULL, 0, NULL, '\0' } }; -/* VMS needs some special fix-ups for the program name */ -#ifdef __VMS -#include "vms_gawk_main_wrapper.c" -#endif - /* main --- process args, parse program, run it, clean up */ int diff --git a/vms/vms_gawk_main_wrapper.c b/vms/vms_gawk_main_wrapper.c deleted file mode 100644 index 367f0cc2..00000000 --- a/vms/vms_gawk_main_wrapper.c +++ /dev/null @@ -1,487 +0,0 @@ -/* File: vms_gawk_main_wrapper.c - * - * This module provides a wrapper around the main() function of a ported - * program for two functions: - * - * 1. Make sure that the argv[0] string is set as close as possible to - * what the original command was given. - * - * 2. Make sure that the posix exit is called. - * - * 3. Fixup the timezone information. - * - * Copyright 2012, John Malmberg - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - */ - - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - - -#pragma member_alignment save -#pragma nomember_alignment longword -struct item_list_3 { - unsigned short len; - unsigned short code; - void * bufadr; - unsigned short * retlen; -}; - -struct filescan_itmlst_2 { - unsigned short length; - unsigned short itmcode; - char * component; -}; - -#pragma member_alignment - -int SYS$GETDVIW - (unsigned long efn, - unsigned short chan, - const struct dsc$descriptor_s * devnam, - const struct item_list_3 * itmlst, - void * iosb, - void (* astadr)(unsigned long), - unsigned long astprm, - void * nullarg); - -int SYS$FILESCAN - (const struct dsc$descriptor_s * srcstr, - struct filescan_itmlst_2 * valuelist, - unsigned long * fldflags, - struct dsc$descriptor_s *auxout, - unsigned short * retlen); - -int SYS$TRNLNM( - const unsigned long * attr, - const struct dsc$descriptor_s * table_dsc, - struct dsc$descriptor_s * name_dsc, - const unsigned char * acmode, - const struct item_list_3 * item_list); - -/* Take all the fun out of simply looking up a logical name */ -static int sys_trnlnm - (const char * logname, - char * value, - int value_len) -{ - const $DESCRIPTOR(table_dsc, "LNM$FILE_DEV"); - const unsigned long attr = LNM$M_CASE_BLIND; - struct dsc$descriptor_s name_dsc; - int status; - unsigned short result; - struct item_list_3 itlst[2]; - - itlst[0].len = value_len; - itlst[0].code = LNM$_STRING; - itlst[0].bufadr = value; - itlst[0].retlen = &result; - - itlst[1].len = 0; - itlst[1].code = 0; - - name_dsc.dsc$w_length = strlen(logname); - name_dsc.dsc$a_pointer = (char *)logname; - name_dsc.dsc$b_dtype = DSC$K_DTYPE_T; - name_dsc.dsc$b_class = DSC$K_CLASS_S; - - status = SYS$TRNLNM(&attr, &table_dsc, &name_dsc, 0, itlst); - - if ($VMS_STATUS_SUCCESS(status)) { - - /* Null terminate and return the string */ - /*--------------------------------------*/ - value[result] = '\0'; - } - - return status; -} - -int original_main(int argc, char ** argv, char **env); - -int main(int argc, char ** argv, char **env) { -int status; -int result; -char arg_nam[256]; -char **new_argv; -char *tz_rule; - -#ifdef TEST_MAIN - printf("original argv[0] = %s\n", argv[0]); -#endif - - new_argv = argv; - result = 0; - - /* If the path name starts with a /, then it is an absolute path */ - /* that may have been generated by the CRTL instead of the command name */ - /* If it is the device name between the slashes, then this was likely */ - /* from the run command and needs to be fixed up. */ - /* If the DECC$POSIX_COMPLIANT_PATHNAMES is set to 2, then it is the */ - /* DISK$VOLUME that will be present, and it will still need to be fixed. */ - if (argv[0][0] == '/') { - char * nextslash; - int length; - struct item_list_3 itemlist[3]; - unsigned short dvi_iosb[4]; - char alldevnam[64]; - unsigned short alldevnam_len; - struct dsc$descriptor_s devname_dsc; - char diskvolnam[256]; - unsigned short diskvolnam_len; - - /* Get some information about the disk */ - /*--------------------------------------*/ - itemlist[0].len = (sizeof alldevnam) - 1; - itemlist[0].code = DVI$_ALLDEVNAM; - itemlist[0].bufadr = alldevnam; - itemlist[0].retlen = &alldevnam_len; - itemlist[1].len = (sizeof diskvolnam) - 1 - 5; - itemlist[1].code = DVI$_VOLNAM; - itemlist[1].bufadr = &diskvolnam[5]; - itemlist[1].retlen = &diskvolnam_len; - itemlist[2].len = 0; - itemlist[2].code = 0; - - /* Add the prefix for the volume name. */ - /* SYS$GETDVI will append the volume name to this */ - strcpy(diskvolnam,"DISK$"); - - nextslash = strchr(&argv[0][1], '/'); - if (nextslash != NULL) { - length = nextslash - argv[0] - 1; - - /* Cast needed for HP C compiler diagnostic */ - devname_dsc.dsc$a_pointer = (char *)&argv[0][1]; - devname_dsc.dsc$w_length = length; - devname_dsc.dsc$b_dtype = DSC$K_DTYPE_T; - devname_dsc.dsc$b_class = DSC$K_CLASS_S; - - status = SYS$GETDVIW - (EFN$C_ENF, - 0, - &devname_dsc, - itemlist, - dvi_iosb, - NULL, 0, 0); - if (!$VMS_STATUS_SUCCESS(status)) { - /* If the sys$getdviw fails, then this path was passed by */ - /* An exec() program and not from DCL, so do nothing */ - /* An example is "/tmp/program" where tmp: does not exist */ -#ifdef TEST_MAIN - printf("sys$getdviw failed with status %d\n", status); -#endif - result = 0; - } else if (!$VMS_STATUS_SUCCESS(dvi_iosb[0])) { -#ifdef TEST_MAIN - printf("sys$getdviw failed with iosb %d\n", dvi_iosb[0]); -#endif - result = 0; - } else { - char * devnam; - int devnam_len; - char argv_dev[64]; - - /* Null terminate the returned alldevnam */ - alldevnam[alldevnam_len] = 0; - devnam = alldevnam; - devnam_len = alldevnam_len; - - /* Need to skip past any leading underscore */ - if (devnam[0] == '_') { - devnam++; - devnam_len--; - } - - /* And remove the trailing colon */ - if (devnam[devnam_len - 1] == ':') { - devnam_len--; - devnam[devnam_len] = 0; - } - - /* Null terminate the returned volnam */ - diskvolnam_len += 5; - diskvolnam[diskvolnam_len] = 0; - - /* Check first for normal CRTL behavior */ - if (devnam_len == length) { - strncpy(arg_nam, &argv[0][1], length); - arg_nam[length] = 0; - result = (strcasecmp(devnam, arg_nam) == 0); - } - - /* If we have not got a match check for POSIX Compliant */ - /* behavior. To be more accurate, we could also check */ - /* to see if that feature is active. */ - if ((result == 0) && (diskvolnam_len == length)) { - strncpy(arg_nam, &argv[0][1], length); - arg_nam[length] = 0; - result = (strcasecmp(diskvolnam, arg_nam) == 0); - } - } - } - } else { - /* The path did not start with a slash, so it could be VMS format */ - /* If it is vms format, it has a volume/device in it as it must */ - /* be an absolute path */ - struct dsc$descriptor_s path_desc; - int status; - unsigned long field_flags; - struct filescan_itmlst_2 item_list[5]; - char * volume; - char * name; - int name_len; - char * ext; - - path_desc.dsc$a_pointer = (char *)argv[0]; /* cast ok */ - path_desc.dsc$w_length = strlen(argv[0]); - path_desc.dsc$b_dtype = DSC$K_DTYPE_T; - path_desc.dsc$b_class = DSC$K_CLASS_S; - - /* Don't actually need to initialize anything buf itmcode */ - /* I just do not like uninitialized input values */ - - /* Sanity check, this must be the same length as input */ - item_list[0].itmcode = FSCN$_FILESPEC; - item_list[0].length = 0; - item_list[0].component = NULL; - - /* If the device is present, then it if a VMS spec */ - item_list[1].itmcode = FSCN$_DEVICE; - item_list[1].length = 0; - item_list[1].component = NULL; - - /* we need the program name and type */ - item_list[2].itmcode = FSCN$_NAME; - item_list[2].length = 0; - item_list[2].component = NULL; - - item_list[3].itmcode = FSCN$_TYPE; - item_list[3].length = 0; - item_list[3].component = NULL; - - /* End the list */ - item_list[4].itmcode = 0; - item_list[4].length = 0; - item_list[4].component = NULL; - - status = SYS$FILESCAN( - (const struct dsc$descriptor_s *)&path_desc, - item_list, &field_flags, NULL, NULL); - - if ($VMS_STATUS_SUCCESS(status) && - (item_list[0].length == path_desc.dsc$w_length) && - (item_list[1].length != 0)) { - - char * dollar; - int keep_ext; - int i; - - /* We need the filescan to be successful, */ - /* same length as input, and a volume to be present */ - - /* Need a new argv array */ - new_argv = malloc((argc + 1) * (sizeof(char *))); - new_argv[0] = arg_nam; - i = 1; - while (i < argc) { - new_argv[i] = argv[i]; - i++; - } - - /* We will assume that we only get to this path on a version */ - /* of VMS that does not support the EFS character set */ - - /* There may be a xxx$ prefix on the image name. Linux */ - /* programs do not handle that well, so strip the prefix */ - name = item_list[2].component; - name_len = item_list[2].length; - dollar = strrchr(name, '$'); - if (dollar != NULL) { - dollar++; - name_len = name_len - (dollar - name); - name = dollar; - } - - strncpy(arg_nam, name, name_len); - arg_nam[name_len] = 0; - - /* We only keep the extension if it is not ".exe" */ - keep_ext = 0; - ext = item_list[3].component; - - if (item_list[3].length != 1) { - if (item_list[3].length != 4) { - keep_ext = 1; - } else { - int x; - x = strncmp(ext, ".exe", 4); - if (x != 0) { - keep_ext = 1; - } - } - } - - if (keep_ext == 1) { - strncpy(&arg_nam[name_len], ext, item_list[3].length); - } - } - } - - if (result) { - char * lastslash; - char * dollar; - char * dotexe; - char * lastdot; - char * extension; - - /* This means it is probably the name from a DCL command */ - /* Find the last slash which separates the file from the */ - /* path. */ - lastslash = strrchr(argv[0], '/'); - - if (lastslash != NULL) { - int i; - - lastslash++; - - /* There may be a xxx$ prefix on the image name. Linux */ - /* programs do not handle that well, so strip the prefix */ - dollar = strrchr(lastslash, '$'); - - if (dollar != NULL) { - dollar++; - lastslash = dollar; - } - - strcpy(arg_nam, lastslash); - - /* In UNIX mode + EFS character set, there should not be a */ - /* version present, as it is not possible when parsing to */ - /* tell if it is a version or part of the UNIX filename as */ - /* UNIX programs use numeric extensions for many reasons. */ - - lastdot = strrchr(arg_nam, '.'); - if (lastdot != NULL) { - int i; - - i = 1; - while (isdigit(lastdot[i])) { - i++; - } - if (lastdot[i] == 0) { - *lastdot = 0; - } - } - - /* Find the .exe on the name (case insenstive) and toss it */ - dotexe = strrchr(arg_nam, '.'); - if (dotexe != NULL) { - if ((dotexe[1] == 'e' || dotexe[1] == 'E') && - (dotexe[2] == 'x' || dotexe[2] == 'X') && - (dotexe[3] == 'e' || dotexe[3] == 'E') && - (dotexe[4] == 0)) { - - *dotexe = 0; - } else { - /* Also need to handle a null extension because of a */ - /* CRTL bug. */ - if (dotexe[1] == 0) { - *dotexe = 0; - } - } - } - - /* Need a new argv array */ - new_argv = malloc((argc + 1) * (sizeof(char *))); - new_argv[0] = arg_nam; - i = 1; - while (i < argc) { - new_argv[i] = argv[i]; - i++; - } - new_argv[i] = 0; - - } else { - /* There is no way that the code should ever get here */ - /* As we already verified that the '/' was present */ - fprintf(stderr, "Sanity failure somewhere we lost a '/'\n"); - } - - } - - /* - * The vms_main_wrapper fixes up the name, but for the DCL shell - * may leave it in upper case, which messes up the self tests. - * force it to lower case here. - */ - char * shell; - int lcname = 0; - shell = getenv("SHELL"); - if (shell != NULL) { - if (strcmp(shell, "DCL") == 0) { - lcname = 1; - } - } else { - lcname = 1; - } - if (lcname == 1) { - int i = 0; - while (new_argv[0][i] != 0) { - new_argv[0][i] = tolower(new_argv[0][i]); - i++; - } - } - - /* Fix up the time zone */ - tz_rule = malloc(1024); - status = sys_trnlnm("TZ", tz_rule, 1024); - if ($VMS_STATUS_SUCCESS(status)) { - setenv("TZ", tz_rule, 1); - } else { - status = sys_trnlnm("SYS$TIMEZONE_RULE", tz_rule, 1024); - if ($VMS_STATUS_SUCCESS(status)) { - setenv("TZ", tz_rule, 1); - } - } - free(tz_rule); - - exit(original_main(argc, new_argv, env)); - return 1; /* Needed to silence compiler diagnostic */ -} - -#define main original_main - -#ifdef TEST_MAIN - -int main(int argc, char ** argv, char **env) { - - printf("modified argv[0] = %s\n", argv[0]); - - return 0; -} - -#endif -- cgit v1.2.3 From b754902e81384e9c66d022f31d01ed8de3b2ad4d Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 16 Dec 2013 22:23:09 +0200 Subject: Further updates, mainly doc. --- README_d/ChangeLog | 7 +- README_d/README.VMS | 36 ++ doc/ChangeLog | 4 + doc/gawk.info | 1151 +++++++++++++++++++++++++++------------------------ doc/gawk.texi | 116 +++++- doc/gawktexi.in | 116 +++++- vms/vms-notes | 610 +++++++++++++++++++++++++++ 7 files changed, 1475 insertions(+), 565 deletions(-) diff --git a/README_d/ChangeLog b/README_d/ChangeLog index 50681113..beaf198e 100644 --- a/README_d/ChangeLog +++ b/README_d/ChangeLog @@ -1,5 +1,10 @@ +2013-12-16 John E. Malmberg + + * README.VMS: Further updates. + 2013-12-05 John E. Malmberg - * readme.vms: updated with current build information. + + * README.VMS: updated with current build information. 2013-07-02 Arnold D. Robbins diff --git a/README_d/README.VMS b/README_d/README.VMS index 84bfe2f4..2bf8e86e 100644 --- a/README_d/README.VMS +++ b/README_d/README.VMS @@ -37,6 +37,38 @@ Most recent builds are using: GAWK was originally ported for VMS V4.6 and up. It has not been tested with a release that old for some time. +Compiling dynamic extensions on VMS: + +Dynamic extensions need to be compiled with the same compiler options for +floating point, pointer size, and symbol name handling as gawk. +Alpha and Itanium should use IEEE floating point. The pointer size is 32 bits, +and the symbol name handling is to be exact case with CRC shortening for +symbols longer than 32 bits. + +Alpha and Itanium: + +/name=(as_is,short) +/float=ieee/ieee_mode=denorm_results + +VAX: + +/name=(as_is,short) + +Compile time macros needed to be defined before the first VMS supplied +header file is included. + +#if (__CRTL_VER >= 70200000) && !defined (__VAX) +#define _LARGEFILE 1 +#endif + +#ifndef __VAX +#ifdef __CRTL_VER +#if __CRTL_VER >= 80200000 +#define _USE_STD_STAT 1 +#endif +#endif +#endif + Installing GAWK on VMS: @@ -48,6 +80,10 @@ That symbol should be placed in the user's login.com or in the system- wide sylogin.com procedure so that it will be defined every time the user logs on. +If your gawk was installed by a PCSI kit into the GNV$GNU: directory tree, +the program will be known as GNV$GNU:[bin]gnv$gawk.exe and the help file +will be GNV$GNU:[vms_help]gawk.hlp. + Optionally, the help entry can be loaded into a VMS help library. |$ LIBRARY/HELP SYS$HELP:HELPLIB [.VMS]GAWK.HLP (You may want to substitute a site-specific help library rather than diff --git a/doc/ChangeLog b/doc/ChangeLog index 9b77b107..ad7c52a3 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2013-12-16 John E. Malmberg + + * gawktexi.in: Updates to VMS sections. + 2013-12-12 Arnold D. Robbins * gawktexi.in: Fix the presentation of asort() and asorti(). diff --git a/doc/gawk.info b/doc/gawk.info index 42228cae..bc807235 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -614,9 +614,12 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) * VMS Installation:: Installing `gawk' on VMS. * VMS Compilation:: How to compile `gawk' under VMS. +* VMS Dynamic Extensions:: Compiling `gawk' dynamic + extensions on VMS. * VMS Installation Details:: How to install `gawk' under VMS. * VMS Running:: How to run `gawk' under VMS. +* VMS GNV:: The VMS GNV Project. * VMS Old Gawk:: An old version comes with some VMS systems. * Bugs:: Reporting Problems and Bugs. @@ -10735,7 +10738,7 @@ File: gawk.info, Node: Multidimensional, Next: Arrays of Arrays, Prev: Uninit * Menu: -* Multiscanning:: Scanning multidimensional arrays. +* Multiscanning:: Scanning multidimensional arrays. A multidimensional array is an array in which an element is identified by a sequence of indices instead of a single index. For @@ -25204,6 +25207,8 @@ the current version of `gawk'. - Prestandard VAX C compiler for VAX/VMS + - GCC for VAX and Alpha has not been tested for a while. +  @@ -26229,51 +26234,106 @@ older designation "VMS" is used throughout to refer to OpenVMS. * Menu: * VMS Compilation:: How to compile `gawk' under VMS. +* VMS Dynamic Extensions:: Compiling `gawk' dynamic extensions on + VMS. * VMS Installation Details:: How to install `gawk' under VMS. * VMS Running:: How to run `gawk' under VMS. +* VMS GNV:: The VMS GNV Project. * VMS Old Gawk:: An old version comes with some VMS systems.  -File: gawk.info, Node: VMS Compilation, Next: VMS Installation Details, Up: VMS Installation +File: gawk.info, Node: VMS Compilation, Next: VMS Dynamic Extensions, Up: VMS Installation B.3.2.1 Compiling `gawk' on VMS ............................... To compile `gawk' under VMS, there is a `DCL' command procedure that issues all the necessary `CC' and `LINK' commands. There is also a -`Makefile' for use with the `MMS' utility. From the source directory, -use either: +`Makefile' for use with the `MMS' or `MMK' utility. From the source +directory, use either: + + $ @[.vms]vmsbuild.com + +or: - $ @[.VMS]VMSBUILD.COM + $ MMS/DESCRIPTION=[.vms]descrip.mms gawk or: - $ MMS/DESCRIPTION=[.VMS]DESCRIP.MMS GAWK + $ MMK/DESCRIPTION=[.vms]descrip.mms gawk + + `MMK' is an open source freeware near clone of `MMS' and can better +handle `ODS-5' volumes with upper- and lower-case filenames. `MMK' is +available from `https://github.com/endlesssoftware/mmk'. + + With `ODS-5' volumes and extended parsing enabled, the case of the +target parameter may need to be exact. Older versions of `gawk' could be built with VAX C or GNU C on VAX/VMS, as well as with DEC C, but that is no longer supported. DEC C (also briefly known as "Compaq C" and now known as "HP C," but referred -to here as "DEC C") is required. Both `VMSBUILD.COM' and `DESCRIP.MMS' +to here as "DEC C") is required. Both `vmsbuild.com' and `descrip.mms' contain some obsolete support for the older compilers but are set up to use DEC C by default. - `gawk' has been tested under Alpha/VMS 7.3-1 using Compaq C V6.4, -and on Alpha/VMS 7.3, Alpha/VMS 7.3-2, and IA64/VMS 8.3.(1) + `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) + + Work is currently being done for a procedure to build `gawk' and +create a PCSI kit for compatible with the GNV product. ---------- Footnotes ---------- (1) The IA64 architecture is also known as "Itanium."  -File: gawk.info, Node: VMS Installation Details, Next: VMS Running, Prev: VMS Compilation, Up: VMS Installation +File: gawk.info, Node: VMS Dynamic Extensions, Next: VMS Installation Details, Prev: VMS Compilation, Up: VMS Installation + +B.3.2.2 Compiling `gawk' Dynamic Extensions on VMS +.................................................. + +Dynamic extensions need to be compiled with the same compiler options +for floating point, pointer size, and symbol name handling as `gawk'. +Alpha and Itanium should use IEEE floating point. The pointer size is +32 bits, and the symbol name handling is to be exact case with CRC +shortening for symbols longer than 32 bits. + + For Alpha and Itanium: + + /name=(as_is,short) + /float=ieee/ieee_mode=denorm_results + + For VAX: + + /name=(as_is,short) + + Compile time macros need to be defined before the first VMS-supplied +header file is included. + + #if (__CRTL_VER >= 70200000) && !defined (__VAX) + #define _LARGEFILE 1 + #endif + + #ifndef __VAX + #ifdef __CRTL_VER + #if __CRTL_VER >= 80200000 + #define _USE_STD_STAT 1 + #endif + #endif + #endif + + +File: gawk.info, Node: VMS Installation Details, Next: VMS Running, Prev: VMS Dynamic Extensions, Up: VMS Installation -B.3.2.2 Installing `gawk' on VMS +B.3.2.3 Installing `gawk' on VMS ................................ -To install `gawk', all you need is a "foreign" command, which is a -`DCL' symbol whose value begins with a dollar sign. For example: +To use `gawk', all you need is a "foreign" command, which is a `DCL' +symbol whose value begins with a dollar sign. For example: - $ GAWK :== $disk1:[gnubin]GAWK + $ GAWK :== $disk1:[gnubin]gawk Substitute the actual location of `gawk.exe' for `$disk1:[gnubin]'. The symbol should be placed in the `login.com' of any user who wants to run @@ -26281,9 +26341,14 @@ symbol should be placed in the `login.com' of any user who wants to run Alternatively, the symbol may be placed in the system-wide `sylogin.com' procedure, which allows all users to run `gawk'. + If your `gawk' was installed by a PCSI kit into the `GNV$GNU:' +directory tree, the program will be known as +`GNV$GNU:[bin]gnv$gawk.exe' and the help file will be +`GNV$GNU:[vms_help]gawk.hlp'. + Optionally, the help entry can be loaded into a VMS help library: - $ LIBRARY/HELP SYS$HELP:HELPLIB [.VMS]GAWK.HLP + $ LIBRARY/HELP sys$help:helplib [.vms]gawk.hlp (You may want to substitute a site-specific help library rather than the standard VMS library `HELPLIB'.) After loading the help text, the @@ -26305,9 +26370,9 @@ If `AWK_LIBRARY' has no definition, a default value of `SYS$LIBRARY:' is used for it.  -File: gawk.info, Node: VMS Running, Next: VMS Old Gawk, Prev: VMS Installation Details, Up: VMS Installation +File: gawk.info, Node: VMS Running, Next: VMS GNV, Prev: VMS Installation Details, Up: VMS Installation -B.3.2.3 Running `gawk' on VMS +B.3.2.4 Running `gawk' on VMS ............................. Command-line parsing and quoting conventions are significantly different @@ -26341,9 +26406,25 @@ When defining it, the value should be quoted so that it retains a single translation and not a multitranslation `RMS' searchlist.  -File: gawk.info, Node: VMS Old Gawk, Prev: VMS Running, Up: VMS Installation +File: gawk.info, Node: VMS GNV, Next: VMS Old Gawk, Prev: VMS Running, Up: VMS Installation + +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 +reorganized to be individual PCSI packages for each component. See +`https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/'. + + The normal build procedure for `gawk' produces a program that is +suitable for use with GNV. At this time work is being done to create +the procedures for building a PCSI kit to replace the older `gawk' port. + + +File: gawk.info, Node: VMS Old Gawk, Prev: VMS GNV, Up: VMS Installation -B.3.2.4 Some VMS Systems Have An Old Version of `gawk' +B.3.2.6 Some VMS Systems Have An Old Version of `gawk' ...................................................... Some versions of VMS have an old version of `gawk'. To access it, @@ -32176,520 +32257,522 @@ Index  Tag Table: Node: Top1360 -Node: Foreword40460 -Node: Preface44805 -Ref: Preface-Footnote-147858 -Ref: Preface-Footnote-247954 -Node: History48186 -Node: Names50560 -Ref: Names-Footnote-152037 -Node: This Manual52109 -Ref: This Manual-Footnote-157883 -Node: Conventions57983 -Node: Manual History60139 -Ref: Manual History-Footnote-163587 -Ref: Manual History-Footnote-263628 -Node: How To Contribute63702 -Node: Acknowledgments64846 -Node: Getting Started69055 -Node: Running gawk71434 -Node: One-shot72620 -Node: Read Terminal73845 -Ref: Read Terminal-Footnote-175495 -Ref: Read Terminal-Footnote-275771 -Node: Long75942 -Node: Executable Scripts77318 -Ref: Executable Scripts-Footnote-179151 -Ref: Executable Scripts-Footnote-279253 -Node: Comments79800 -Node: Quoting82267 -Node: DOS Quoting86890 -Node: Sample Data Files87565 -Node: Very Simple90609 -Node: Two Rules95208 -Node: More Complex97355 -Ref: More Complex-Footnote-1100285 -Node: Statements/Lines100370 -Ref: Statements/Lines-Footnote-1104832 -Node: Other Features105097 -Node: When106025 -Node: Invoking Gawk108172 -Node: Command Line109633 -Node: Options110416 -Ref: Options-Footnote-1125808 -Node: Other Arguments125833 -Node: Naming Standard Input128491 -Node: Environment Variables129585 -Node: AWKPATH Variable130143 -Ref: AWKPATH Variable-Footnote-1132901 -Node: AWKLIBPATH Variable133161 -Node: Other Environment Variables133879 -Node: Exit Status136842 -Node: Include Files137517 -Node: Loading Shared Libraries141086 -Node: Obsolete142450 -Node: Undocumented143147 -Node: Regexp143389 -Node: Regexp Usage144778 -Node: Escape Sequences146804 -Node: Regexp Operators152473 -Ref: Regexp Operators-Footnote-1159853 -Ref: Regexp Operators-Footnote-2160000 -Node: Bracket Expressions160098 -Ref: table-char-classes161988 -Node: GNU Regexp Operators164511 -Node: Case-sensitivity168234 -Ref: Case-sensitivity-Footnote-1171202 -Ref: Case-sensitivity-Footnote-2171437 -Node: Leftmost Longest171545 -Node: Computed Regexps172746 -Node: Reading Files176083 -Node: Records178085 -Ref: Records-Footnote-1186974 -Node: Fields187011 -Ref: Fields-Footnote-1190044 -Node: Nonconstant Fields190130 -Node: Changing Fields192332 -Node: Field Separators198291 -Node: Default Field Splitting200920 -Node: Regexp Field Splitting202037 -Node: Single Character Fields205379 -Node: Command Line Field Separator206438 -Node: Field Splitting Summary209879 -Ref: Field Splitting Summary-Footnote-1212990 -Node: Constant Size213091 -Node: Splitting By Content217675 -Ref: Splitting By Content-Footnote-1221401 -Node: Multiple Line221441 -Ref: Multiple Line-Footnote-1227288 -Node: Getline227467 -Node: Plain Getline229683 -Node: Getline/Variable231778 -Node: Getline/File232925 -Node: Getline/Variable/File234266 -Ref: Getline/Variable/File-Footnote-1235865 -Node: Getline/Pipe235952 -Node: Getline/Variable/Pipe238651 -Node: Getline/Coprocess239758 -Node: Getline/Variable/Coprocess241010 -Node: Getline Notes241747 -Node: Getline Summary244534 -Ref: table-getline-variants244942 -Node: Read Timeout245854 -Ref: Read Timeout-Footnote-1249595 -Node: Command line directories249652 -Node: Printing250282 -Node: Print251913 -Node: Print Examples253250 -Node: Output Separators256034 -Node: OFMT257794 -Node: Printf259152 -Node: Basic Printf260058 -Node: Control Letters261597 -Node: Format Modifiers265409 -Node: Printf Examples271418 -Node: Redirection274133 -Node: Special Files281098 -Node: Special FD281631 -Ref: Special FD-Footnote-1285256 -Node: Special Network285330 -Node: Special Caveats286180 -Node: Close Files And Pipes286976 -Ref: Close Files And Pipes-Footnote-1293959 -Ref: Close Files And Pipes-Footnote-2294107 -Node: Expressions294257 -Node: Values295389 -Node: Constants296065 -Node: Scalar Constants296745 -Ref: Scalar Constants-Footnote-1297604 -Node: Nondecimal-numbers297786 -Node: Regexp Constants300786 -Node: Using Constant Regexps301261 -Node: Variables304316 -Node: Using Variables304971 -Node: Assignment Options306695 -Node: Conversion308567 -Ref: table-locale-affects314068 -Ref: Conversion-Footnote-1314692 -Node: All Operators314801 -Node: Arithmetic Ops315431 -Node: Concatenation317936 -Ref: Concatenation-Footnote-1320728 -Node: Assignment Ops320848 -Ref: table-assign-ops325836 -Node: Increment Ops327167 -Node: Truth Values and Conditions330601 -Node: Truth Values331684 -Node: Typing and Comparison332733 -Node: Variable Typing333526 -Ref: Variable Typing-Footnote-1337423 -Node: Comparison Operators337545 -Ref: table-relational-ops337955 -Node: POSIX String Comparison341504 -Ref: POSIX String Comparison-Footnote-1342460 -Node: Boolean Ops342598 -Ref: Boolean Ops-Footnote-1346676 -Node: Conditional Exp346767 -Node: Function Calls348499 -Node: Precedence352093 -Node: Locales355762 -Node: Patterns and Actions356851 -Node: Pattern Overview357905 -Node: Regexp Patterns359574 -Node: Expression Patterns360117 -Node: Ranges363802 -Node: BEGIN/END366768 -Node: Using BEGIN/END367530 -Ref: Using BEGIN/END-Footnote-1370261 -Node: I/O And BEGIN/END370367 -Node: BEGINFILE/ENDFILE372649 -Node: Empty375563 -Node: Using Shell Variables375879 -Node: Action Overview378164 -Node: Statements380521 -Node: If Statement382375 -Node: While Statement383874 -Node: Do Statement385918 -Node: For Statement387074 -Node: Switch Statement390226 -Node: Break Statement392323 -Node: Continue Statement394313 -Node: Next Statement396106 -Node: Nextfile Statement398496 -Node: Exit Statement401139 -Node: Built-in Variables403555 -Node: User-modified404650 -Ref: User-modified-Footnote-1413008 -Node: Auto-set413070 -Ref: Auto-set-Footnote-1426148 -Ref: Auto-set-Footnote-2426353 -Node: ARGC and ARGV426409 -Node: Arrays430260 -Node: Array Basics431765 -Node: Array Intro432591 -Node: Reference to Elements436908 -Node: Assigning Elements439178 -Node: Array Example439669 -Node: Scanning an Array441401 -Node: Controlling Scanning443715 -Ref: Controlling Scanning-Footnote-1448802 -Node: Delete449118 -Ref: Delete-Footnote-1451883 -Node: Numeric Array Subscripts451940 -Node: Uninitialized Subscripts454123 -Node: Multidimensional455750 -Node: Multiscanning458842 -Node: Arrays of Arrays460431 -Node: Functions465071 -Node: Built-in465890 -Node: Calling Built-in466968 -Node: Numeric Functions468956 -Ref: Numeric Functions-Footnote-1472788 -Ref: Numeric Functions-Footnote-2473145 -Ref: Numeric Functions-Footnote-3473193 -Node: String Functions473462 -Ref: String Functions-Footnote-1496382 -Ref: String Functions-Footnote-2496511 -Ref: String Functions-Footnote-3496759 -Node: Gory Details496846 -Ref: table-sub-escapes498525 -Ref: table-sub-posix-92499879 -Ref: table-sub-proposed501230 -Ref: table-posix-sub502584 -Ref: table-gensub-escapes504129 -Ref: Gory Details-Footnote-1505305 -Ref: Gory Details-Footnote-2505356 -Node: I/O Functions505507 -Ref: I/O Functions-Footnote-1512492 -Node: Time Functions512639 -Ref: Time Functions-Footnote-1523572 -Ref: Time Functions-Footnote-2523640 -Ref: Time Functions-Footnote-3523798 -Ref: Time Functions-Footnote-4523909 -Ref: Time Functions-Footnote-5524021 -Ref: Time Functions-Footnote-6524248 -Node: Bitwise Functions524514 -Ref: table-bitwise-ops525076 -Ref: Bitwise Functions-Footnote-1529297 -Node: Type Functions529481 -Node: I18N Functions530632 -Node: User-defined532259 -Node: Definition Syntax533063 -Ref: Definition Syntax-Footnote-1537973 -Node: Function Example538042 -Node: Function Caveats540636 -Node: Calling A Function541057 -Node: Variable Scope542172 -Node: Pass By Value/Reference545135 -Node: Return Statement548643 -Node: Dynamic Typing551624 -Node: Indirect Calls552555 -Node: Library Functions562240 -Ref: Library Functions-Footnote-1565753 -Ref: Library Functions-Footnote-2565896 -Node: Library Names566067 -Ref: Library Names-Footnote-1569538 -Ref: Library Names-Footnote-2569758 -Node: General Functions569844 -Node: Strtonum Function570872 -Node: Assert Function573802 -Node: Round Function577128 -Node: Cliff Random Function578671 -Node: Ordinal Functions579687 -Ref: Ordinal Functions-Footnote-1582757 -Ref: Ordinal Functions-Footnote-2583009 -Node: Join Function583218 -Ref: Join Function-Footnote-1584989 -Node: Getlocaltime Function585189 -Node: Readfile Function588930 -Node: Data File Management590769 -Node: Filetrans Function591401 -Node: Rewind Function595470 -Node: File Checking596857 -Node: Empty Files597951 -Node: Ignoring Assigns600181 -Node: Getopt Function601734 -Ref: Getopt Function-Footnote-1613037 -Node: Passwd Functions613240 -Ref: Passwd Functions-Footnote-1622215 -Node: Group Functions622303 -Node: Walking Arrays630387 -Node: Sample Programs632524 -Node: Running Examples633198 -Node: Clones633926 -Node: Cut Program635150 -Node: Egrep Program644995 -Ref: Egrep Program-Footnote-1652768 -Node: Id Program652878 -Node: Split Program656494 -Ref: Split Program-Footnote-1660013 -Node: Tee Program660141 -Node: Uniq Program662944 -Node: Wc Program670373 -Ref: Wc Program-Footnote-1674639 -Ref: Wc Program-Footnote-2674839 -Node: Miscellaneous Programs674931 -Node: Dupword Program676119 -Node: Alarm Program678150 -Node: Translate Program682903 -Ref: Translate Program-Footnote-1687290 -Ref: Translate Program-Footnote-2687538 -Node: Labels Program687672 -Ref: Labels Program-Footnote-1691043 -Node: Word Sorting691127 -Node: History Sorting695011 -Node: Extract Program696850 -Ref: Extract Program-Footnote-1704353 -Node: Simple Sed704481 -Node: Igawk Program707543 -Ref: Igawk Program-Footnote-1722700 -Ref: Igawk Program-Footnote-2722901 -Node: Anagram Program723039 -Node: Signature Program726107 -Node: Advanced Features727207 -Node: Nondecimal Data729093 -Node: Array Sorting730676 -Node: Controlling Array Traversal731373 -Node: Array Sorting Functions739657 -Ref: Array Sorting Functions-Footnote-1743526 -Node: Two-way I/O743720 -Ref: Two-way I/O-Footnote-1749152 -Node: TCP/IP Networking749222 -Node: Profiling752066 -Node: Internationalization759563 -Node: I18N and L10N760988 -Node: Explaining gettext761674 -Ref: Explaining gettext-Footnote-1766742 -Ref: Explaining gettext-Footnote-2766926 -Node: Programmer i18n767091 -Node: Translator i18n771293 -Node: String Extraction772086 -Ref: String Extraction-Footnote-1773047 -Node: Printf Ordering773133 -Ref: Printf Ordering-Footnote-1775917 -Node: I18N Portability775981 -Ref: I18N Portability-Footnote-1778430 -Node: I18N Example778493 -Ref: I18N Example-Footnote-1781131 -Node: Gawk I18N781203 -Node: Debugger781824 -Node: Debugging782795 -Node: Debugging Concepts783228 -Node: Debugging Terms785084 -Node: Awk Debugging787681 -Node: Sample Debugging Session788573 -Node: Debugger Invocation789093 -Node: Finding The Bug790425 -Node: List of Debugger Commands796913 -Node: Breakpoint Control798247 -Node: Debugger Execution Control801911 -Node: Viewing And Changing Data805271 -Node: Execution Stack808627 -Node: Debugger Info810094 -Node: Miscellaneous Debugger Commands814076 -Node: Readline Support819252 -Node: Limitations820083 -Node: Arbitrary Precision Arithmetic822335 -Ref: Arbitrary Precision Arithmetic-Footnote-1823984 -Node: General Arithmetic824132 -Node: Floating Point Issues825852 -Node: String Conversion Precision826733 -Ref: String Conversion Precision-Footnote-1828438 -Node: Unexpected Results828547 -Node: POSIX Floating Point Problems830700 -Ref: POSIX Floating Point Problems-Footnote-1834525 -Node: Integer Programming834563 -Node: Floating-point Programming836302 -Ref: Floating-point Programming-Footnote-1842633 -Ref: Floating-point Programming-Footnote-2842903 -Node: Floating-point Representation843167 -Node: Floating-point Context844332 -Ref: table-ieee-formats845171 -Node: Rounding Mode846555 -Ref: table-rounding-modes847034 -Ref: Rounding Mode-Footnote-1850049 -Node: Gawk and MPFR850228 -Node: Arbitrary Precision Floats851483 -Ref: Arbitrary Precision Floats-Footnote-1853926 -Node: Setting Precision854242 -Ref: table-predefined-precision-strings854928 -Node: Setting Rounding Mode857073 -Ref: table-gawk-rounding-modes857477 -Node: Floating-point Constants858664 -Node: Changing Precision860093 -Ref: Changing Precision-Footnote-1861490 -Node: Exact Arithmetic861664 -Node: Arbitrary Precision Integers864802 -Ref: Arbitrary Precision Integers-Footnote-1867820 -Node: Dynamic Extensions867967 -Node: Extension Intro869425 -Node: Plugin License870690 -Node: Extension Mechanism Outline871375 -Ref: load-extension871792 -Ref: load-new-function873270 -Ref: call-new-function874265 -Node: Extension API Description876280 -Node: Extension API Functions Introduction877493 -Node: General Data Types882359 -Ref: General Data Types-Footnote-1887958 -Node: Requesting Values888257 -Ref: table-value-types-returned888988 -Node: Constructor Functions889942 -Node: Registration Functions892962 -Node: Extension Functions893647 -Node: Exit Callback Functions895872 -Node: Extension Version String897121 -Node: Input Parsers897771 -Node: Output Wrappers907528 -Node: Two-way processors912038 -Node: Printing Messages914246 -Ref: Printing Messages-Footnote-1915323 -Node: Updating `ERRNO'915475 -Node: Accessing Parameters916214 -Node: Symbol Table Access917444 -Node: Symbol table by name917956 -Node: Symbol table by cookie919703 -Ref: Symbol table by cookie-Footnote-1923833 -Node: Cached values923896 -Ref: Cached values-Footnote-1927345 -Node: Array Manipulation927436 -Ref: Array Manipulation-Footnote-1928534 -Node: Array Data Types928573 -Ref: Array Data Types-Footnote-1931276 -Node: Array Functions931368 -Node: Flattening Arrays935134 -Node: Creating Arrays941986 -Node: Extension API Variables946711 -Node: Extension Versioning947347 -Node: Extension API Informational Variables949248 -Node: Extension API Boilerplate950334 -Node: Finding Extensions954138 -Node: Extension Example954698 -Node: Internal File Description955428 -Node: Internal File Ops959519 -Ref: Internal File Ops-Footnote-1971027 -Node: Using Internal File Ops971167 -Ref: Using Internal File Ops-Footnote-1973520 -Node: Extension Samples973786 -Node: Extension Sample File Functions975310 -Node: Extension Sample Fnmatch983795 -Node: Extension Sample Fork985521 -Node: Extension Sample Inplace986739 -Node: Extension Sample Ord988517 -Node: Extension Sample Readdir989353 -Node: Extension Sample Revout990885 -Node: Extension Sample Rev2way991478 -Node: Extension Sample Read write array992168 -Node: Extension Sample Readfile994051 -Node: Extension Sample API Tests994869 -Node: Extension Sample Time995394 -Node: gawkextlib996758 -Node: Language History999518 -Node: V7/SVR3.11001040 -Node: SVR41003360 -Node: POSIX1004802 -Node: BTL1006188 -Node: POSIX/GNU1006922 -Node: Common Extensions1012457 -Node: Ranges and Locales1013763 -Ref: Ranges and Locales-Footnote-11018381 -Ref: Ranges and Locales-Footnote-21018408 -Ref: Ranges and Locales-Footnote-31018668 -Node: Contributors1018889 -Node: Installation1023964 -Node: Gawk Distribution1024858 -Node: Getting1025342 -Node: Extracting1026168 -Node: Distribution contents1027860 -Node: Unix Installation1033380 -Node: Quick Installation1033997 -Node: Additional Configuration Options1036441 -Node: Configuration Philosophy1037918 -Node: Non-Unix Installation1040272 -Node: PC Installation1040730 -Node: PC Binary Installation1042029 -Node: PC Compiling1043877 -Node: PC Testing1046821 -Node: PC Using1047997 -Node: Cygwin1052182 -Node: MSYS1053182 -Node: VMS Installation1053696 -Node: VMS Compilation1054299 -Ref: VMS Compilation-Footnote-11055306 -Node: VMS Installation Details1055364 -Node: VMS Running1056999 -Node: VMS Old Gawk1058606 -Node: Bugs1059080 -Node: Other Versions1062936 -Node: Notes1069020 -Node: Compatibility Mode1069820 -Node: Additions1070603 -Node: Accessing The Source1071530 -Node: Adding Code1072970 -Node: New Ports1079015 -Node: Derived Files1083150 -Ref: Derived Files-Footnote-11088471 -Ref: Derived Files-Footnote-21088505 -Ref: Derived Files-Footnote-31089105 -Node: Future Extensions1089203 -Node: Implementation Limitations1089780 -Node: Extension Design1091032 -Node: Old Extension Problems1092186 -Ref: Old Extension Problems-Footnote-11093694 -Node: Extension New Mechanism Goals1093751 -Ref: Extension New Mechanism Goals-Footnote-11097116 -Node: Extension Other Design Decisions1097302 -Node: Extension Future Growth1099408 -Node: Old Extension Mechanism1100244 -Node: Basic Concepts1101984 -Node: Basic High Level1102665 -Ref: figure-general-flow1102936 -Ref: figure-process-flow1103535 -Ref: Basic High Level-Footnote-11106764 -Node: Basic Data Typing1106949 -Node: Glossary1110304 -Node: Copying1135766 -Node: GNU Free Documentation License1173323 -Node: Index1198460 +Node: Foreword40645 +Node: Preface44990 +Ref: Preface-Footnote-148043 +Ref: Preface-Footnote-248139 +Node: History48371 +Node: Names50745 +Ref: Names-Footnote-152222 +Node: This Manual52294 +Ref: This Manual-Footnote-158068 +Node: Conventions58168 +Node: Manual History60324 +Ref: Manual History-Footnote-163772 +Ref: Manual History-Footnote-263813 +Node: How To Contribute63887 +Node: Acknowledgments65031 +Node: Getting Started69240 +Node: Running gawk71619 +Node: One-shot72805 +Node: Read Terminal74030 +Ref: Read Terminal-Footnote-175680 +Ref: Read Terminal-Footnote-275956 +Node: Long76127 +Node: Executable Scripts77503 +Ref: Executable Scripts-Footnote-179336 +Ref: Executable Scripts-Footnote-279438 +Node: Comments79985 +Node: Quoting82452 +Node: DOS Quoting87075 +Node: Sample Data Files87750 +Node: Very Simple90794 +Node: Two Rules95393 +Node: More Complex97540 +Ref: More Complex-Footnote-1100470 +Node: Statements/Lines100555 +Ref: Statements/Lines-Footnote-1105017 +Node: Other Features105282 +Node: When106210 +Node: Invoking Gawk108357 +Node: Command Line109818 +Node: Options110601 +Ref: Options-Footnote-1125993 +Node: Other Arguments126018 +Node: Naming Standard Input128676 +Node: Environment Variables129770 +Node: AWKPATH Variable130328 +Ref: AWKPATH Variable-Footnote-1133086 +Node: AWKLIBPATH Variable133346 +Node: Other Environment Variables134064 +Node: Exit Status137027 +Node: Include Files137702 +Node: Loading Shared Libraries141271 +Node: Obsolete142635 +Node: Undocumented143332 +Node: Regexp143574 +Node: Regexp Usage144963 +Node: Escape Sequences146989 +Node: Regexp Operators152658 +Ref: Regexp Operators-Footnote-1160038 +Ref: Regexp Operators-Footnote-2160185 +Node: Bracket Expressions160283 +Ref: table-char-classes162173 +Node: GNU Regexp Operators164696 +Node: Case-sensitivity168419 +Ref: Case-sensitivity-Footnote-1171387 +Ref: Case-sensitivity-Footnote-2171622 +Node: Leftmost Longest171730 +Node: Computed Regexps172931 +Node: Reading Files176268 +Node: Records178270 +Ref: Records-Footnote-1187159 +Node: Fields187196 +Ref: Fields-Footnote-1190229 +Node: Nonconstant Fields190315 +Node: Changing Fields192517 +Node: Field Separators198476 +Node: Default Field Splitting201105 +Node: Regexp Field Splitting202222 +Node: Single Character Fields205564 +Node: Command Line Field Separator206623 +Node: Field Splitting Summary210064 +Ref: Field Splitting Summary-Footnote-1213175 +Node: Constant Size213276 +Node: Splitting By Content217860 +Ref: Splitting By Content-Footnote-1221586 +Node: Multiple Line221626 +Ref: Multiple Line-Footnote-1227473 +Node: Getline227652 +Node: Plain Getline229868 +Node: Getline/Variable231963 +Node: Getline/File233110 +Node: Getline/Variable/File234451 +Ref: Getline/Variable/File-Footnote-1236050 +Node: Getline/Pipe236137 +Node: Getline/Variable/Pipe238836 +Node: Getline/Coprocess239943 +Node: Getline/Variable/Coprocess241195 +Node: Getline Notes241932 +Node: Getline Summary244719 +Ref: table-getline-variants245127 +Node: Read Timeout246039 +Ref: Read Timeout-Footnote-1249780 +Node: Command line directories249837 +Node: Printing250467 +Node: Print252098 +Node: Print Examples253435 +Node: Output Separators256219 +Node: OFMT257979 +Node: Printf259337 +Node: Basic Printf260243 +Node: Control Letters261782 +Node: Format Modifiers265594 +Node: Printf Examples271603 +Node: Redirection274318 +Node: Special Files281283 +Node: Special FD281816 +Ref: Special FD-Footnote-1285441 +Node: Special Network285515 +Node: Special Caveats286365 +Node: Close Files And Pipes287161 +Ref: Close Files And Pipes-Footnote-1294144 +Ref: Close Files And Pipes-Footnote-2294292 +Node: Expressions294442 +Node: Values295574 +Node: Constants296250 +Node: Scalar Constants296930 +Ref: Scalar Constants-Footnote-1297789 +Node: Nondecimal-numbers297971 +Node: Regexp Constants300971 +Node: Using Constant Regexps301446 +Node: Variables304501 +Node: Using Variables305156 +Node: Assignment Options306880 +Node: Conversion308752 +Ref: table-locale-affects314253 +Ref: Conversion-Footnote-1314877 +Node: All Operators314986 +Node: Arithmetic Ops315616 +Node: Concatenation318121 +Ref: Concatenation-Footnote-1320913 +Node: Assignment Ops321033 +Ref: table-assign-ops326021 +Node: Increment Ops327352 +Node: Truth Values and Conditions330786 +Node: Truth Values331869 +Node: Typing and Comparison332918 +Node: Variable Typing333711 +Ref: Variable Typing-Footnote-1337608 +Node: Comparison Operators337730 +Ref: table-relational-ops338140 +Node: POSIX String Comparison341689 +Ref: POSIX String Comparison-Footnote-1342645 +Node: Boolean Ops342783 +Ref: Boolean Ops-Footnote-1346861 +Node: Conditional Exp346952 +Node: Function Calls348684 +Node: Precedence352278 +Node: Locales355947 +Node: Patterns and Actions357036 +Node: Pattern Overview358090 +Node: Regexp Patterns359759 +Node: Expression Patterns360302 +Node: Ranges363987 +Node: BEGIN/END366953 +Node: Using BEGIN/END367715 +Ref: Using BEGIN/END-Footnote-1370446 +Node: I/O And BEGIN/END370552 +Node: BEGINFILE/ENDFILE372834 +Node: Empty375748 +Node: Using Shell Variables376064 +Node: Action Overview378349 +Node: Statements380706 +Node: If Statement382560 +Node: While Statement384059 +Node: Do Statement386103 +Node: For Statement387259 +Node: Switch Statement390411 +Node: Break Statement392508 +Node: Continue Statement394498 +Node: Next Statement396291 +Node: Nextfile Statement398681 +Node: Exit Statement401324 +Node: Built-in Variables403740 +Node: User-modified404835 +Ref: User-modified-Footnote-1413193 +Node: Auto-set413255 +Ref: Auto-set-Footnote-1426333 +Ref: Auto-set-Footnote-2426538 +Node: ARGC and ARGV426594 +Node: Arrays430445 +Node: Array Basics431950 +Node: Array Intro432776 +Node: Reference to Elements437093 +Node: Assigning Elements439363 +Node: Array Example439854 +Node: Scanning an Array441586 +Node: Controlling Scanning443900 +Ref: Controlling Scanning-Footnote-1448987 +Node: Delete449303 +Ref: Delete-Footnote-1452068 +Node: Numeric Array Subscripts452125 +Node: Uninitialized Subscripts454308 +Node: Multidimensional455935 +Node: Multiscanning459028 +Node: Arrays of Arrays460617 +Node: Functions465257 +Node: Built-in466076 +Node: Calling Built-in467154 +Node: Numeric Functions469142 +Ref: Numeric Functions-Footnote-1472974 +Ref: Numeric Functions-Footnote-2473331 +Ref: Numeric Functions-Footnote-3473379 +Node: String Functions473648 +Ref: String Functions-Footnote-1496568 +Ref: String Functions-Footnote-2496697 +Ref: String Functions-Footnote-3496945 +Node: Gory Details497032 +Ref: table-sub-escapes498711 +Ref: table-sub-posix-92500065 +Ref: table-sub-proposed501416 +Ref: table-posix-sub502770 +Ref: table-gensub-escapes504315 +Ref: Gory Details-Footnote-1505491 +Ref: Gory Details-Footnote-2505542 +Node: I/O Functions505693 +Ref: I/O Functions-Footnote-1512678 +Node: Time Functions512825 +Ref: Time Functions-Footnote-1523758 +Ref: Time Functions-Footnote-2523826 +Ref: Time Functions-Footnote-3523984 +Ref: Time Functions-Footnote-4524095 +Ref: Time Functions-Footnote-5524207 +Ref: Time Functions-Footnote-6524434 +Node: Bitwise Functions524700 +Ref: table-bitwise-ops525262 +Ref: Bitwise Functions-Footnote-1529483 +Node: Type Functions529667 +Node: I18N Functions530818 +Node: User-defined532445 +Node: Definition Syntax533249 +Ref: Definition Syntax-Footnote-1538159 +Node: Function Example538228 +Node: Function Caveats540822 +Node: Calling A Function541243 +Node: Variable Scope542358 +Node: Pass By Value/Reference545321 +Node: Return Statement548829 +Node: Dynamic Typing551810 +Node: Indirect Calls552741 +Node: Library Functions562426 +Ref: Library Functions-Footnote-1565939 +Ref: Library Functions-Footnote-2566082 +Node: Library Names566253 +Ref: Library Names-Footnote-1569724 +Ref: Library Names-Footnote-2569944 +Node: General Functions570030 +Node: Strtonum Function571058 +Node: Assert Function573988 +Node: Round Function577314 +Node: Cliff Random Function578857 +Node: Ordinal Functions579873 +Ref: Ordinal Functions-Footnote-1582943 +Ref: Ordinal Functions-Footnote-2583195 +Node: Join Function583404 +Ref: Join Function-Footnote-1585175 +Node: Getlocaltime Function585375 +Node: Readfile Function589116 +Node: Data File Management590955 +Node: Filetrans Function591587 +Node: Rewind Function595656 +Node: File Checking597043 +Node: Empty Files598137 +Node: Ignoring Assigns600367 +Node: Getopt Function601920 +Ref: Getopt Function-Footnote-1613223 +Node: Passwd Functions613426 +Ref: Passwd Functions-Footnote-1622401 +Node: Group Functions622489 +Node: Walking Arrays630573 +Node: Sample Programs632710 +Node: Running Examples633384 +Node: Clones634112 +Node: Cut Program635336 +Node: Egrep Program645181 +Ref: Egrep Program-Footnote-1652954 +Node: Id Program653064 +Node: Split Program656680 +Ref: Split Program-Footnote-1660199 +Node: Tee Program660327 +Node: Uniq Program663130 +Node: Wc Program670559 +Ref: Wc Program-Footnote-1674825 +Ref: Wc Program-Footnote-2675025 +Node: Miscellaneous Programs675117 +Node: Dupword Program676305 +Node: Alarm Program678336 +Node: Translate Program683089 +Ref: Translate Program-Footnote-1687476 +Ref: Translate Program-Footnote-2687724 +Node: Labels Program687858 +Ref: Labels Program-Footnote-1691229 +Node: Word Sorting691313 +Node: History Sorting695197 +Node: Extract Program697036 +Ref: Extract Program-Footnote-1704539 +Node: Simple Sed704667 +Node: Igawk Program707729 +Ref: Igawk Program-Footnote-1722886 +Ref: Igawk Program-Footnote-2723087 +Node: Anagram Program723225 +Node: Signature Program726293 +Node: Advanced Features727393 +Node: Nondecimal Data729279 +Node: Array Sorting730862 +Node: Controlling Array Traversal731559 +Node: Array Sorting Functions739843 +Ref: Array Sorting Functions-Footnote-1743712 +Node: Two-way I/O743906 +Ref: Two-way I/O-Footnote-1749338 +Node: TCP/IP Networking749408 +Node: Profiling752252 +Node: Internationalization759749 +Node: I18N and L10N761174 +Node: Explaining gettext761860 +Ref: Explaining gettext-Footnote-1766928 +Ref: Explaining gettext-Footnote-2767112 +Node: Programmer i18n767277 +Node: Translator i18n771479 +Node: String Extraction772272 +Ref: String Extraction-Footnote-1773233 +Node: Printf Ordering773319 +Ref: Printf Ordering-Footnote-1776103 +Node: I18N Portability776167 +Ref: I18N Portability-Footnote-1778616 +Node: I18N Example778679 +Ref: I18N Example-Footnote-1781317 +Node: Gawk I18N781389 +Node: Debugger782010 +Node: Debugging782981 +Node: Debugging Concepts783414 +Node: Debugging Terms785270 +Node: Awk Debugging787867 +Node: Sample Debugging Session788759 +Node: Debugger Invocation789279 +Node: Finding The Bug790611 +Node: List of Debugger Commands797099 +Node: Breakpoint Control798433 +Node: Debugger Execution Control802097 +Node: Viewing And Changing Data805457 +Node: Execution Stack808813 +Node: Debugger Info810280 +Node: Miscellaneous Debugger Commands814262 +Node: Readline Support819438 +Node: Limitations820269 +Node: Arbitrary Precision Arithmetic822521 +Ref: Arbitrary Precision Arithmetic-Footnote-1824170 +Node: General Arithmetic824318 +Node: Floating Point Issues826038 +Node: String Conversion Precision826919 +Ref: String Conversion Precision-Footnote-1828624 +Node: Unexpected Results828733 +Node: POSIX Floating Point Problems830886 +Ref: POSIX Floating Point Problems-Footnote-1834711 +Node: Integer Programming834749 +Node: Floating-point Programming836488 +Ref: Floating-point Programming-Footnote-1842819 +Ref: Floating-point Programming-Footnote-2843089 +Node: Floating-point Representation843353 +Node: Floating-point Context844518 +Ref: table-ieee-formats845357 +Node: Rounding Mode846741 +Ref: table-rounding-modes847220 +Ref: Rounding Mode-Footnote-1850235 +Node: Gawk and MPFR850414 +Node: Arbitrary Precision Floats851669 +Ref: Arbitrary Precision Floats-Footnote-1854112 +Node: Setting Precision854428 +Ref: table-predefined-precision-strings855114 +Node: Setting Rounding Mode857259 +Ref: table-gawk-rounding-modes857663 +Node: Floating-point Constants858850 +Node: Changing Precision860279 +Ref: Changing Precision-Footnote-1861676 +Node: Exact Arithmetic861850 +Node: Arbitrary Precision Integers864988 +Ref: Arbitrary Precision Integers-Footnote-1868006 +Node: Dynamic Extensions868153 +Node: Extension Intro869611 +Node: Plugin License870876 +Node: Extension Mechanism Outline871561 +Ref: load-extension871978 +Ref: load-new-function873456 +Ref: call-new-function874451 +Node: Extension API Description876466 +Node: Extension API Functions Introduction877679 +Node: General Data Types882545 +Ref: General Data Types-Footnote-1888144 +Node: Requesting Values888443 +Ref: table-value-types-returned889174 +Node: Constructor Functions890128 +Node: Registration Functions893148 +Node: Extension Functions893833 +Node: Exit Callback Functions896058 +Node: Extension Version String897307 +Node: Input Parsers897957 +Node: Output Wrappers907714 +Node: Two-way processors912224 +Node: Printing Messages914432 +Ref: Printing Messages-Footnote-1915509 +Node: Updating `ERRNO'915661 +Node: Accessing Parameters916400 +Node: Symbol Table Access917630 +Node: Symbol table by name918142 +Node: Symbol table by cookie919889 +Ref: Symbol table by cookie-Footnote-1924019 +Node: Cached values924082 +Ref: Cached values-Footnote-1927531 +Node: Array Manipulation927622 +Ref: Array Manipulation-Footnote-1928720 +Node: Array Data Types928759 +Ref: Array Data Types-Footnote-1931462 +Node: Array Functions931554 +Node: Flattening Arrays935320 +Node: Creating Arrays942172 +Node: Extension API Variables946897 +Node: Extension Versioning947533 +Node: Extension API Informational Variables949434 +Node: Extension API Boilerplate950520 +Node: Finding Extensions954324 +Node: Extension Example954884 +Node: Internal File Description955614 +Node: Internal File Ops959705 +Ref: Internal File Ops-Footnote-1971213 +Node: Using Internal File Ops971353 +Ref: Using Internal File Ops-Footnote-1973706 +Node: Extension Samples973972 +Node: Extension Sample File Functions975496 +Node: Extension Sample Fnmatch983981 +Node: Extension Sample Fork985707 +Node: Extension Sample Inplace986925 +Node: Extension Sample Ord988703 +Node: Extension Sample Readdir989539 +Node: Extension Sample Revout991071 +Node: Extension Sample Rev2way991664 +Node: Extension Sample Read write array992354 +Node: Extension Sample Readfile994237 +Node: Extension Sample API Tests995055 +Node: Extension Sample Time995580 +Node: gawkextlib996944 +Node: Language History999704 +Node: V7/SVR3.11001226 +Node: SVR41003546 +Node: POSIX1004988 +Node: BTL1006374 +Node: POSIX/GNU1007108 +Node: Common Extensions1012709 +Node: Ranges and Locales1014015 +Ref: Ranges and Locales-Footnote-11018633 +Ref: Ranges and Locales-Footnote-21018660 +Ref: Ranges and Locales-Footnote-31018920 +Node: Contributors1019141 +Node: Installation1024216 +Node: Gawk Distribution1025110 +Node: Getting1025594 +Node: Extracting1026420 +Node: Distribution contents1028112 +Node: Unix Installation1033632 +Node: Quick Installation1034249 +Node: Additional Configuration Options1036693 +Node: Configuration Philosophy1038170 +Node: Non-Unix Installation1040524 +Node: PC Installation1040982 +Node: PC Binary Installation1042281 +Node: PC Compiling1044129 +Node: PC Testing1047073 +Node: PC Using1048249 +Node: Cygwin1052434 +Node: MSYS1053434 +Node: VMS Installation1053948 +Node: VMS Compilation1054712 +Ref: VMS Compilation-Footnote-11056327 +Node: VMS Dynamic Extensions1056385 +Node: VMS Installation Details1057406 +Node: VMS Running1059240 +Node: VMS GNV1060842 +Node: VMS Old Gawk1061547 +Node: Bugs1062017 +Node: Other Versions1065873 +Node: Notes1071957 +Node: Compatibility Mode1072757 +Node: Additions1073540 +Node: Accessing The Source1074467 +Node: Adding Code1075907 +Node: New Ports1081952 +Node: Derived Files1086087 +Ref: Derived Files-Footnote-11091408 +Ref: Derived Files-Footnote-21091442 +Ref: Derived Files-Footnote-31092042 +Node: Future Extensions1092140 +Node: Implementation Limitations1092717 +Node: Extension Design1093969 +Node: Old Extension Problems1095123 +Ref: Old Extension Problems-Footnote-11096631 +Node: Extension New Mechanism Goals1096688 +Ref: Extension New Mechanism Goals-Footnote-11100053 +Node: Extension Other Design Decisions1100239 +Node: Extension Future Growth1102345 +Node: Old Extension Mechanism1103181 +Node: Basic Concepts1104921 +Node: Basic High Level1105602 +Ref: figure-general-flow1105873 +Ref: figure-process-flow1106472 +Ref: Basic High Level-Footnote-11109701 +Node: Basic Data Typing1109886 +Node: Glossary1113241 +Node: Copying1138703 +Node: GNU Free Documentation License1176260 +Node: Index1201397  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 80638e46..f11e2be5 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -822,9 +822,12 @@ particular records in a file and perform operations upon them. * VMS Installation:: Installing @command{gawk} on VMS. * VMS Compilation:: How to compile @command{gawk} under VMS. +* VMS Dynamic Extensions:: Compiling @command{gawk} dynamic + extensions on VMS. * VMS Installation Details:: How to install @command{gawk} under VMS. * VMS Running:: How to run @command{gawk} under VMS. +* VMS GNV:: The VMS GNV Project. * VMS Old Gawk:: An old version comes with some VMS systems. * Bugs:: Reporting Problems and Bugs. @@ -15031,7 +15034,7 @@ on the command line (@pxref{Options}). @section Multidimensional Arrays @menu -* Multiscanning:: Scanning multidimensional arrays. +* Multiscanning:: Scanning multidimensional arrays. @end menu @cindex subscripts in arrays, multidimensional @@ -33564,6 +33567,9 @@ Tandem (non-POSIX) @item Prestandard VAX C compiler for VAX/VMS +@item +GCC for VAX and Alpha has not been tested for a while. + @end itemize @end itemize @@ -34835,8 +34841,11 @@ The older designation ``VMS'' is used throughout to refer to OpenVMS. @menu * VMS Compilation:: How to compile @command{gawk} under VMS. +* VMS Dynamic Extensions:: Compiling @command{gawk} dynamic extensions on + VMS. * VMS Installation Details:: How to install @command{gawk} under VMS. * VMS Running:: How to run @command{gawk} under VMS. +* VMS GNV:: The VMS GNV Project. * VMS Old Gawk:: An old version comes with some VMS systems. @end menu @@ -34844,41 +34853,99 @@ The older designation ``VMS'' is used throughout to refer to OpenVMS. @appendixsubsubsec Compiling @command{gawk} on VMS @cindex compiling @command{gawk} for VMS -To compile @command{gawk} under VMS, there is a @code{DCL} command procedure that -issues all the necessary @code{CC} and @code{LINK} commands. There is -also a @file{Makefile} for use with the @code{MMS} utility. From the source -directory, use either: +To compile @command{gawk} under VMS, there is a @code{DCL} command procedure +that issues all the necessary @code{CC} and @code{LINK} commands. There is +also a @file{Makefile} for use with the @code{MMS} or @code{MMK} utility. +From the source directory, use either: @example -$ @kbd{@@[.VMS]VMSBUILD.COM} +$ @kbd{@@[.vms]vmsbuild.com} @end example @noindent or: @example -$ @kbd{MMS/DESCRIPTION=[.VMS]DESCRIP.MMS GAWK} +$ @kbd{MMS/DESCRIPTION=[.vms]descrip.mms gawk} @end example +@noindent +or: + +@example +$ @kbd{MMK/DESCRIPTION=[.vms]descrip.mms gawk} +@end example + +@code{MMK} is an open source freeware near clone of @code{MMS} and +can better handle @code{ODS-5} volumes with upper- and lower-case filenames. +@code{MMK} is available from @uref{https://github.com/endlesssoftware/mmk}. + +With @code{ODS-5} volumes and extended parsing enabled, the case of the target +parameter may need to be exact. + Older versions of @command{gawk} could be built with VAX C or GNU C on VAX/VMS, as well as with DEC C, but that is no longer supported. DEC C (also briefly known as ``Compaq C'' and now known as ``HP C,'' but referred to here as ``DEC C'') is required. Both -@code{VMSBUILD.COM} and @code{DESCRIP.MMS} contain some obsolete support +@code{vmsbuild.com} and @code{descrip.mms} contain some obsolete support for the older compilers but are set up to use DEC C by default. -@command{gawk} has been tested under Alpha/VMS 7.3-1 using Compaq C V6.4, -and on Alpha/VMS 7.3, Alpha/VMS 7.3-2, and IA64/VMS 8.3.@footnote{The IA64 -architecture is also known as ``Itanium.''} +@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. +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.''} + +Work is currently being done for a procedure to build @command{gawk} and create +a PCSI kit for compatible with the GNV product. + +@node VMS Dynamic Extensions +@appendixsubsubsec Compiling @command{gawk} Dynamic Extensions on VMS + +Dynamic extensions need to be compiled with the same compiler options for +floating point, pointer size, and symbol name handling as @command{gawk}. +Alpha and Itanium should use IEEE floating point. The pointer size is 32 bits, +and the symbol name handling is to be exact case with CRC shortening for +symbols longer than 32 bits. + +For Alpha and Itanium: + +@example +/name=(as_is,short) +/float=ieee/ieee_mode=denorm_results +@end example + +For VAX: + +@example +/name=(as_is,short) +@end example + +Compile time macros need to be defined before the first VMS-supplied +header file is included. + +@example +#if (__CRTL_VER >= 70200000) && !defined (__VAX) +#define _LARGEFILE 1 +#endif + +#ifndef __VAX +#ifdef __CRTL_VER +#if __CRTL_VER >= 80200000 +#define _USE_STD_STAT 1 +#endif +#endif +#endif +@end example @node VMS Installation Details @appendixsubsubsec Installing @command{gawk} on VMS -To install @command{gawk}, all you need is a ``foreign'' command, which is -a @code{DCL} symbol whose value begins with a dollar sign. For example: +To use @command{gawk}, all you need is a ``foreign'' command, which is a +@code{DCL} symbol whose value begins with a dollar sign. For example: @example -$ @kbd{GAWK :== $disk1:[gnubin]GAWK} +$ @kbd{GAWK :== $disk1:[gnubin]gawk} @end example @noindent @@ -34890,10 +34957,15 @@ Alternatively, the symbol may be placed in the system-wide @file{sylogin.com} procedure, which allows all users to run @command{gawk}. +If your @command{gawk} was installed by a PCSI kit into the +@file{GNV$GNU:} directory tree, the program will be known as +@file{GNV$GNU:[bin]gnv$gawk.exe} and the help file will be +@file{GNV$GNU:[vms_help]gawk.hlp}. + Optionally, the help entry can be loaded into a VMS help library: @example -$ @kbd{LIBRARY/HELP SYS$HELP:HELPLIB [.VMS]GAWK.HLP} +$ @kbd{LIBRARY/HELP sys$help:helplib [.vms]gawk.hlp} @end example @noindent @@ -34958,6 +35030,20 @@ of @env{AWKPATH} is a comma-separated list of directory specifications. When defining it, the value should be quoted so that it retains a single translation and not a multitranslation @code{RMS} searchlist. +@node VMS GNV +@appendixsubsubsec 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 @command{gawk} found in the GNV +base kit is an older port. Currently the GNV project is being reorganized +to be individual PCSI packages for each component. +See @uref{https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/}. + +The normal build procedure for @command{gawk} produces a program that +is suitable for use with GNV. At this time work is being done to create +the procedures for building a PCSI kit to replace the older @command{gawk} +port. + @ignore @c The VMS POSIX product, also known as POSIX for OpenVMS, is long defunct @c and building gawk for it has not been tested in many years, but these diff --git a/doc/gawktexi.in b/doc/gawktexi.in index f385107b..c4dbea5c 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -817,9 +817,12 @@ particular records in a file and perform operations upon them. * VMS Installation:: Installing @command{gawk} on VMS. * VMS Compilation:: How to compile @command{gawk} under VMS. +* VMS Dynamic Extensions:: Compiling @command{gawk} dynamic + extensions on VMS. * VMS Installation Details:: How to install @command{gawk} under VMS. * VMS Running:: How to run @command{gawk} under VMS. +* VMS GNV:: The VMS GNV Project. * VMS Old Gawk:: An old version comes with some VMS systems. * Bugs:: Reporting Problems and Bugs. @@ -14370,7 +14373,7 @@ on the command line (@pxref{Options}). @section Multidimensional Arrays @menu -* Multiscanning:: Scanning multidimensional arrays. +* Multiscanning:: Scanning multidimensional arrays. @end menu @cindex subscripts in arrays, multidimensional @@ -32713,6 +32716,9 @@ Tandem (non-POSIX) @item Prestandard VAX C compiler for VAX/VMS +@item +GCC for VAX and Alpha has not been tested for a while. + @end itemize @end itemize @@ -33984,8 +33990,11 @@ The older designation ``VMS'' is used throughout to refer to OpenVMS. @menu * VMS Compilation:: How to compile @command{gawk} under VMS. +* VMS Dynamic Extensions:: Compiling @command{gawk} dynamic extensions on + VMS. * VMS Installation Details:: How to install @command{gawk} under VMS. * VMS Running:: How to run @command{gawk} under VMS. +* VMS GNV:: The VMS GNV Project. * VMS Old Gawk:: An old version comes with some VMS systems. @end menu @@ -33993,41 +34002,99 @@ The older designation ``VMS'' is used throughout to refer to OpenVMS. @appendixsubsubsec Compiling @command{gawk} on VMS @cindex compiling @command{gawk} for VMS -To compile @command{gawk} under VMS, there is a @code{DCL} command procedure that -issues all the necessary @code{CC} and @code{LINK} commands. There is -also a @file{Makefile} for use with the @code{MMS} utility. From the source -directory, use either: +To compile @command{gawk} under VMS, there is a @code{DCL} command procedure +that issues all the necessary @code{CC} and @code{LINK} commands. There is +also a @file{Makefile} for use with the @code{MMS} or @code{MMK} utility. +From the source directory, use either: @example -$ @kbd{@@[.VMS]VMSBUILD.COM} +$ @kbd{@@[.vms]vmsbuild.com} @end example @noindent or: @example -$ @kbd{MMS/DESCRIPTION=[.VMS]DESCRIP.MMS GAWK} +$ @kbd{MMS/DESCRIPTION=[.vms]descrip.mms gawk} @end example +@noindent +or: + +@example +$ @kbd{MMK/DESCRIPTION=[.vms]descrip.mms gawk} +@end example + +@code{MMK} is an open source freeware near clone of @code{MMS} and +can better handle @code{ODS-5} volumes with upper- and lower-case filenames. +@code{MMK} is available from @uref{https://github.com/endlesssoftware/mmk}. + +With @code{ODS-5} volumes and extended parsing enabled, the case of the target +parameter may need to be exact. + Older versions of @command{gawk} could be built with VAX C or GNU C on VAX/VMS, as well as with DEC C, but that is no longer supported. DEC C (also briefly known as ``Compaq C'' and now known as ``HP C,'' but referred to here as ``DEC C'') is required. Both -@code{VMSBUILD.COM} and @code{DESCRIP.MMS} contain some obsolete support +@code{vmsbuild.com} and @code{descrip.mms} contain some obsolete support for the older compilers but are set up to use DEC C by default. -@command{gawk} has been tested under Alpha/VMS 7.3-1 using Compaq C V6.4, -and on Alpha/VMS 7.3, Alpha/VMS 7.3-2, and IA64/VMS 8.3.@footnote{The IA64 -architecture is also known as ``Itanium.''} +@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. +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.''} + +Work is currently being done for a procedure to build @command{gawk} and create +a PCSI kit for compatible with the GNV product. + +@node VMS Dynamic Extensions +@appendixsubsubsec Compiling @command{gawk} Dynamic Extensions on VMS + +Dynamic extensions need to be compiled with the same compiler options for +floating point, pointer size, and symbol name handling as @command{gawk}. +Alpha and Itanium should use IEEE floating point. The pointer size is 32 bits, +and the symbol name handling is to be exact case with CRC shortening for +symbols longer than 32 bits. + +For Alpha and Itanium: + +@example +/name=(as_is,short) +/float=ieee/ieee_mode=denorm_results +@end example + +For VAX: + +@example +/name=(as_is,short) +@end example + +Compile time macros need to be defined before the first VMS-supplied +header file is included. + +@example +#if (__CRTL_VER >= 70200000) && !defined (__VAX) +#define _LARGEFILE 1 +#endif + +#ifndef __VAX +#ifdef __CRTL_VER +#if __CRTL_VER >= 80200000 +#define _USE_STD_STAT 1 +#endif +#endif +#endif +@end example @node VMS Installation Details @appendixsubsubsec Installing @command{gawk} on VMS -To install @command{gawk}, all you need is a ``foreign'' command, which is -a @code{DCL} symbol whose value begins with a dollar sign. For example: +To use @command{gawk}, all you need is a ``foreign'' command, which is a +@code{DCL} symbol whose value begins with a dollar sign. For example: @example -$ @kbd{GAWK :== $disk1:[gnubin]GAWK} +$ @kbd{GAWK :== $disk1:[gnubin]gawk} @end example @noindent @@ -34039,10 +34106,15 @@ Alternatively, the symbol may be placed in the system-wide @file{sylogin.com} procedure, which allows all users to run @command{gawk}. +If your @command{gawk} was installed by a PCSI kit into the +@file{GNV$GNU:} directory tree, the program will be known as +@file{GNV$GNU:[bin]gnv$gawk.exe} and the help file will be +@file{GNV$GNU:[vms_help]gawk.hlp}. + Optionally, the help entry can be loaded into a VMS help library: @example -$ @kbd{LIBRARY/HELP SYS$HELP:HELPLIB [.VMS]GAWK.HLP} +$ @kbd{LIBRARY/HELP sys$help:helplib [.vms]gawk.hlp} @end example @noindent @@ -34107,6 +34179,20 @@ of @env{AWKPATH} is a comma-separated list of directory specifications. When defining it, the value should be quoted so that it retains a single translation and not a multitranslation @code{RMS} searchlist. +@node VMS GNV +@appendixsubsubsec 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 @command{gawk} found in the GNV +base kit is an older port. Currently the GNV project is being reorganized +to be individual PCSI packages for each component. +See @uref{https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/}. + +The normal build procedure for @command{gawk} produces a program that +is suitable for use with GNV. At this time work is being done to create +the procedures for building a PCSI kit to replace the older @command{gawk} +port. + @ignore @c The VMS POSIX product, also known as POSIX for OpenVMS, is long defunct @c and building gawk for it has not been tested in many years, but these diff --git a/vms/vms-notes b/vms/vms-notes index 23943bb9..312a562f 100644 --- a/vms/vms-notes +++ b/vms/vms-notes @@ -6,3 +6,613 @@ Per Anders Wallin, the HP VMS porting guide is available at http://h71000.www7.hp.com/portability/portingguidelines.html This file documents this fact, and anything else of interest. +From wb8tyw@qsl.net Wed Dec 11 20:03:44 2013 +Return-Path: +Received: from skeeve.com (skeeve.com [127.0.0.1]) + by skeeve.com (8.14.4/8.14.4/Debian-2ubuntu2.1) with ESMTP id rBBI3gNX002464 + for ; Wed, 11 Dec 2013 20:03:43 +0200 +X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on + frenzy.freefriends.org +X-Spam-Level: +X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM + autolearn=ham version=3.3.1 +X-Envelope-From: wb8tyw@qsl.net +X-Envelope-To: +Received: from frenzy.freefriends.org [66.54.153.139] + by skeeve.com with IMAP (fetchmail-6.3.21) + for (single-drop); Wed, 11 Dec 2013 20:03:43 +0200 (IST) +Received: from Encompasserve.org (Eisner.encompasserve.org [67.53.90.116]) + by freefriends.org (8.14.6/8.14.6) with ESMTP id rBB5jaW9020988 + for ; Tue, 10 Dec 2013 22:45:40 -0700 +Received: from [192.168.0.101] + (173-19-202-206.client.mchsi.com [173.19.202.206]) + by Encompasserve.org (PMDF V6.6 #13031) + with ESMTPSA id <01P1SYL5LELG002FZE@Encompasserve.org> for arnold@skeeve.com; + Tue, 10 Dec 2013 23:45:35 -0600 (CST) +Date: Tue, 10 Dec 2013 23:45:36 -0600 +From: "John E. Malmberg" +Subject: Re: Some questions... +In-reply-to: <201312110426.rBB4QXXc003297@skeeve.com> +To: Aharon Robbins +Cc: wb8tyw@qsl.net +Message-id: <52A7FC00.2040905@qsl.net> +MIME-version: 1.0 +Content-type: text/plain; charset=ISO-8859-1; format=flowed +Content-transfer-encoding: 7BIT +User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20130215 + Thunderbird/17.0.3 +References: <529A9537.7090404@qsl.net> <201312110426.rBB4QXXc003297@skeeve.com> +Status: RO + +On 12/10/2013 10:26 PM, Aharon Robbins wrote: +> Hi. Some questions about your changes. +> +> 1. I notice that there is at least one instance of #if __VMS, where as +> it seems most code uses #if VMS. Is that on purpose? If not, which +> is correct? + +VMS is a macro historically pre-defined by C compilers on C before the +ANSI rules. + +Under strict ANSI rules, a standards compliant compiler is not allowed +to pre-define macros that are not prefixed by "__". + +Which means that you can not count on the VMS macro being defined unless +you do it yourself. + +So __VMS is the ANSI correct definition. But it would be a lot of work +to change all the code. + +The vms_config.h that is now generated has these lines in it to make +sure that VMS is defined. + +#ifdef __VMS /* ANSI compliant */ +#ifndef VMS /* PRE-ansi */ +#define VMS 1 +#endif +#endif + +This may be needed for other architectures. It only shows up as an +issue if you set a "strict" compliance flag on the compile command. + +> 2. For the include of the main wrapper. Gawk already has a routine +> os_arg_fixup which is intended to manipulate argc and argv as needed +> by an OS-specific routine before main() parses it. A quick look at +> the wrapper looks to me like it could be made to fit within that framework, +> which would keep #if and the include out of the mainline code. + +I can look at that. I can also look to see if I can move the logic from +vms_crtl_init.c into it in a way that would sidestep that it has no +copyright notice at all. The result would be code that is almost +identical to code that is in the official Perl distribution. + +GNV was started as a user project and when the VMS POSIX product was +dropped and they needed a Unix like environment, Digital took over the +GNV product, but did not really do much to keep it up to date. + +The routine in vms_crtl_init.c is actually called before main() is +called, so just linking a module with it in is all that it takes to +activate the change. Unfortunately I do not know how to get it to +magically fix up the argv array. + +> If that looks reasonable to you, can you make that change? You can send +> it as a diff against what you currently have already done. + +I will look at it tomorrow night. I also found another change needed +for vms_args.c to work properly under a bash shell. + +> I'm sorry about the hassle on the copyrights, but I really have to play +> this game by the FSF rules. I hope we can get it clarified soon +> so that I can include the files in the dist. + +I hope so. I have not seen a reply from Karl yet. He did say that +there are other options. + +This would clear the way for getting the similar code accepted into the +Bash and coreutils repositories. I have a report that the first bash +4.3 beta built on VMS and looked real good on the test run. + +I am currently working on adapting the packaging scripts from bash and +coreutils to gawk. Each product has had it unique features, so I have +not yet come up with a generic set of scripts. + +This is a preview what will be coming: + +backup_gawk_src.com - Builds a VMS equivalent to tar archive. By +placing the source in the PCSI kit, it covers the requirement of +providing source somewhere with the binary. + +build_gawk_pcsi_desc.com - Creates a VMS PCSI package manifest file. + +build_gawk_pcsi_text.com - text output by the VMS PCSI package installer. + +compare_gawk_source.com - I have the source checked out on an NFS +server. The backup program needs me to copy it to a VMS volume first. +This procedure makes sure that the two copies are the same and ready for +backup. + +gawk_alias_setup.com - Sets up gawk and awk links to gnv$gawk.exe. +Needed to repair when sins of the past partially break an install. + +gawk_verb.cld - for gawk to use gnv$gawk.exe as an image. Different +than gawk.cld. To properly add an image to the VMS command table, it +needs a prefix. I have "GNV$" registered as a prefix for this purpose. + +gnv_gawk_kit_name.com - Calculates the VMS PCSI package name, used for +both file names and file contents. + +gnv_gawk_startup.com - Run at VMS startup to make sure that the +environment is set up properly for gawk. + +pcsi_gawk_file_list.txt - Source file for build_gawk_pcsi_desc.com. + +remove_old_gawk.com - Needed to properly clean up sins of the past. +Only touches the the GNV provided gawk and awk programs. + +stage_gawk_install.com - Does a pre-install into a fake "root" directory +tree for the kitting procedure to pull files out of. + +Regards, +-John + +From wb8tyw@qsl.net Thu Dec 12 12:21:57 2013 +Return-Path: +Received: from skeeve.com (skeeve.com [127.0.0.1]) + by skeeve.com (8.14.4/8.14.4/Debian-2ubuntu2.1) with ESMTP id rBCAIn2l004322 + for ; Thu, 12 Dec 2013 12:21:55 +0200 +X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on + frenzy.freefriends.org +X-Spam-Level: +X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM + autolearn=ham version=3.3.1 +X-Envelope-From: wb8tyw@qsl.net +X-Envelope-To: +Received: from frenzy.freefriends.org [66.54.153.139] + by skeeve.com with IMAP (fetchmail-6.3.21) + for (single-drop); Thu, 12 Dec 2013 12:21:55 +0200 (IST) +Received: from Encompasserve.org (Eisner.encompasserve.org [67.53.90.116]) + by freefriends.org (8.14.6/8.14.6) with ESMTP id rBC6FboY024650 + for ; Wed, 11 Dec 2013 23:15:41 -0700 +Received: from [192.168.0.101] + (173-19-202-206.client.mchsi.com [173.19.202.206]) + by Encompasserve.org (PMDF V6.6 #13031) + with ESMTPSA id <01P1UDWPUU7M002J4J@Encompasserve.org> for arnold@skeeve.com; + Thu, 12 Dec 2013 00:15:35 -0600 (CST) +Date: Thu, 12 Dec 2013 00:15:38 -0600 +From: "John E. Malmberg" +Subject: Re: Some questions... +In-reply-to: <201312110755.rBB7tIrb026097@freefriends.org> +To: arnold@skeeve.com +Cc: wb8tyw@qsl.net +Message-id: <52A9548A.5060604@qsl.net> +MIME-version: 1.0 +Content-type: multipart/mixed; boundary="Boundary_(ID_0V6xQMBg8dMk2LzZyR0ioQ)" +User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20130215 + Thunderbird/17.0.3 +References: <529A9537.7090404@qsl.net> <201312110426.rBB4QXXc003297@skeeve.com> + <52A7FC00.2040905@qsl.net> <201312110755.rBB7tIrb026097@freefriends.org> +Status: RO +X-Status: A + +This is a multi-part message in MIME format. + +--Boundary_(ID_0V6xQMBg8dMk2LzZyR0ioQ) +Content-type: text/plain; charset=ISO-8859-1; format=flowed +Content-transfer-encoding: 7BIT + +I moved the vms_gawk_main_wrapper.c code into gawkmisc.vms so that file +is not needed anymore. + +I also discovered that we were not building with exact case public +symbols, so I fixed up the source to build with exact case symbols. +This will be more important when building dynamic plug-ins, and in the +future if and when the other related packages can be built with it. + +This caused small changes to most of the source files in VMS, as all the +system services routines were in the wrong case. + +I see that just about everything has been backed out of git until the +legal stuff is resolved. + +This is what I currently have for io.c changes based on a branch I just +made against master. + +And this is what the diff for the vms/gawkmisc.vms changes are, which +eliminates the change to main.c. + +Regards, +-John + + + +On 12/11/2013 1:55 AM, arnold@skeeve.com wrote: +> Hi. +> +> Thahks for the answers. I will address some of this later; I'm at work now. +> +> I would like to emphasize that, from my perspective, the priorities are: +> +> 1. Code changes (os_arg_fixup, etc.). +> 2. Documentation revisions. +> 3. The other VMS-only goodies that you described. +> +> The documentation revisions are not optional; I have to have them. +> +> But, as I said, it's enough if you give me plain text. I can do the +> markup. If the markup is what's holding you back then don't bother, +> just send me text, with some kind of clear indication of the sectioning / +> subsectioning (if any), and I'll do the markup. +> +> Karl replied further to me; I don't know if it was on purpose or +> by accident that he didn't include you. I will include you on the +> further correspondance that I need to send. +> +> Believe me, I very much want to move this forward, but I really do +> have to play by the rules. +> +> Thanks, +> +> Arnold +> + + +--Boundary_(ID_0V6xQMBg8dMk2LzZyR0ioQ) +Content-type: application/gzip; name=gawk_io_c_vms.patch.gz +Content-transfer-encoding: base64 +Content-disposition: attachment; filename=gawk_io_c_vms.patch.gz + +H4sICANRqVICAzAwMDEtaW8uYy1yZWRpcmVjdC1BZGQtYWRkaXRpb25hbC1WTVMtZXJyb3It +Y29kZXMucGF0Y2gAnVV/b9pIEP0bf4q5pmptwI5tzM82FRRImyqQXEhzV51OyPaOwY3t5Wwn +TdT0u9/sGhNIIuVyKyTvzs6bfTNvdjlMeQy+7Ti+z3zT902n6wZdz/acltU0zQBNn7VZs2m2 +ut0GTHgCM1yB1QbT7Mkf2KZpKYcUpgdf+DKBiRvFHqYLeP/D6+S3P/r/ZJGRYP5BGbk59uAP +ZHWwLBihT1irAXaj12z0GjboZss0ldmV9x39vAd/nQ7Oh5//hpAbPqgpsjAlu9aDAWPgMhbm +IU/cCC4mM8A05Sn4nGFmSIACaoI3eRBGSIgzzNNb4CtMwA1yJM+IZ2GygIzHCMIpMxRF13UF +hks3WeAxX8Ad0HCgRkMpSMghzLYpzVtD1yXaLoKBL6OIRLsQJhmmgmum1rQ6NIFhhMVa1xSF +hUEAur4Ic3D370/37udKmDC8AdfqYIc1DAO7zGx6Llim2XIcQXsbqRCbHXS/D7pVb0DNqreh +31dqouq6ZeskQjmkcmPjXjw5HilYK/2rL1blMfal+pAKG+bmhvnM53lOzRQG4eXGCO8zYWZG +7IZRP/P8RcQ9d50EKFApOYhzMHZvPcy4f4llHgyDMJGZQEAZjL58Oj01dpWSeE9+1vo4AV2j +Junjt5sMW51dfaRjIY2cSlVsq94iXehDWpA0sIcJnSIo7oVBQQOZSrXUlNpemPjRFUNKLqMd +Y/lB2AI6O4DZ7PV8/OfHb+fHEzIWuG0jmDe2azkA+1WpTMdwIEMqd3Wf/ItDtw5I4/IEKIM9 +rJQaMK0ijWK2xVwk5rRskZjTaheJQam1enTy8eshVKv+VSrWdfA4jyC7DFcr0pviVCoV4li4 +xW7iLjDGhF4DIir2qKUSDgdgvpPLgNGc4bVoHTVI3FhEDJOYWk59lb7StHdKjdyolqoqfA/g +aHoxOD4azT8PpqPjsQZv3oC6DnoA48nhERk1+ClhRX5znqC6DvSE5T9S+FXSF9eBEPLMIgnB +7jdgfJ6nbnl/ikpUrlaMHs35+OxsejIPk7ygSiFFlbtOp07vZ63blF8ylddRnZ6MxlCVyzne +rOr0COXFbn67wmJZpVhBtK654PCgDHB3B/emqaxMwWqnCKJTRQtSWyl6od4gWi3dfdFnF23D +epvBEM7OjyHMiEJ+lSbiZudLWtLTmKPLZIEe4WpPwzDDDU6wodvOg5KyunSvMXmbQ56GyICT +ewornuX6RcuwIbslXJxpopv03Wvy+9eT8wFdE/o3Gz7ce/YKibwxEsR2ynh0ItpLZrfZ3d3e +KTFFJaFlSyrw7FCv3Rv/9Qa9ncXdnaI/H+ApvMxU0+4f6/8BF8e/GH82oQCD4VCCK1LWJxxm +36ba0z24fn3KSv+kVxcUy2gbXUX5F+2/BB3kCAAA + +--Boundary_(ID_0V6xQMBg8dMk2LzZyR0ioQ) +Content-type: application/gzip; name=gawk_gawkmisc_vms.gdiff.gz +Content-transfer-encoding: base64 +Content-disposition: attachment; filename=gawk_gawkmisc_vms.gdiff.gz + +H4sICINTqVICA2dhd2tfZ2F3a21pc2Nfdm1zLmdkaWZmAJ0aa1PbSPKz+RWzDgU22MY2JLsX +X3LLgtmllpBUTPZxHKWSpbGtQ5YUjcRj9/jv193z0OhhlrtUBdBMT09Pv7tn+v0+OxCp56Rx +nB0s3fvbg7u1oD/WgfAG8NH6lfvslHtsNGLj8dvX3709/I6Nh6PDrf39fYbgL198OH47/ptc +/P33rD8+7B0O2T78Ojp6w77/fouxPXYW55HvZkEc9dh55A167PWInaVudBsGEZtlKedZj50F +i2zFzsI4Tnvsh1hkCP7hmLHheDQa9keHw1GPfZkdI8qDLba1/yqIvDD3Ofu7yPwgHqzel8fS +IFpWBr3sMeE1QD8M5jRoD/tceGmQVID9u8Dni8ogX0T1wYXwGkZFJuqDWbCuEhVGaw1HZCWp +u1y7bM3Xc546bhgsozWPMibcO15MR3ENIIyj5X2c+lv7wJDcy1iQ8bUTBiJzDtmfW/utPBIA +CzIVqzgFeB5N6qNe7HMcvosDHwQ6zxeunzbA7bGUZxLF0wQJV5sughDY6UZOkK1D2HqMWzP4 +V999ma0mjXOwVJGBk97KTWE7L14ncQQHNTtuYhXOBcCQ2e+z7R+nV6e/nP/akahKeyG/GAi0 +1zCneLFy7VkvjgTIQZ7TF962UpwsTh0BFPr8LnLXmxbY0thjkjsWrOJ3EIt5dbSzx1yRgRi6 +nRLx3d6mUwF4kq7r2KM8DN102Z3YLDo7v5jOTo4vOy8/KTgdmLTwbxT+Hrtzw5zjuTdSu8cW +ob8I3aWoY6xv7uYPcZ5tFppWzOKQjI559fny4vJD7ZBVUtysdLC/4kTmzkPuwMRLSGegHlXg +ChVK2V1vDQbwUlVSX3RiieFrHmecvWO7/9rdnaixPXAziQuO9x07nZ59Or76yZ4Bx1hMXpz/ +YM/z6E7whCG+HqDbfwXwQcTZLx9mzuXxh6lzMb1kI3QB4Po9uQZDCx732gbaH92QVA722JV7 +y5kbhixbcbbIIwZCZfGCiWCdhI8gjfgWnDrLE+bCxzLw3JDYhxFBb4TCFY/CydIIvCgxqyMZ +pdgIC3FNr+RISCHVEGKgbwc1Zmsf3aTEsH0KRvH5/NPVx8+dQsisDTpEFuOcTn9pI8dbTXqE +WgTsQuAPzsnxbOr8cHF+eYrgm7RD6wbC0MHgjLlo8LwpF3mYWahsdQgysLvrsWRzS34NbwZw +OiDHnHRiz6GrVbQ6s6vP55c/lqZlBNCrS1PS0GBqx9Bkpkd60+HEHlObDSWoPvMAuXHvyJgA +03Aw+LujxEdcLoG6ThIDjziS1ZFi7SrgGuzc8TEVQMWenWz/7Jxe/f5p6lw1wHmhK4SBO7k4 +ns2cmSRUCgPmLE+yQ66C7VjasWMMnA17UhZdxZQF62yjKcyujq++wK8vJyfT2awjEXe7GCUB +rAWWcZmjVfB0HUQuGLEb+ejR8jQiU5HJDllBq0UiuZbMvyFzH6J9tp4ImVplFAlH2RaDLTDL +I+tkfcghE9wQzQ/xt3GuzRIXNG2Rxmu2iu9p4uOMgQ2GoIbACJmWAabf45zdx3noQ0aCCILo +Fn669KdAhcWpOZyCidxbwa8kjYFd6x5kFhCowRyBKYw/ZBxSKJ8CCBMJ94IFWDzmkYK5KWdw +aO/2kWUxEiZ4j7hyz9mKkiL0wzGwTHkTP1gseMojj8PO2T0HNXTZyeerC7bkEU+BqT4gXd6B +ChMelzAkIHyY4A/c63RL85AF+EDWPAbd9FzBxQAXHBhnu7dVMLRDIRAO0N1itivSw+BS/9zq +t+Rg0mN7X+v2jl+FkSuvJVZwPD0beiQ8Y0cgiPMFnZ18OE0CvjQT7D7IkO0HPZyOQCcZyMUF +jsxFHOaZXAEokIcot7X7SFwF1gF4wbD5I+EnNgZwLu766K5xDDKzNbBIIsG9BwzJkVuRQPhd +AMIgsrRESJfB4FZcKNJQYySOe1ewMLjlEAdIBRE2hRChNiKhRJz7AsUOyrUIHlAtk4Fcrlhx +Oj052f70cXb+m3Py8cOni/PjyysHwxpGoxnSJniGGMY2bzQrYP357OftXz5efPkwlay5D0DB +YLsEhANpplTCQI2LDH8iVYBSItGUSbIOjB/QuoD69Q6M9mCXzL+lRR2BORBrUNxS3jpZbjX7 +fL7GP68PbwikEi+gkHEwrbw+ktO0C1iyTFev3xw1rjIAOl5sDFwSzMQuid8PxO1dHOIG49dv +mukyIGoLhEHv9COIRUB9A3q2iNM1uQHQV+2hcJ3yfwd7/Rf9k9CGTyYgdkTwBwctNoftsj4b +TarAKmhBIbHtHF9cQOQHFapBmUBpsNVAioBZZ6+BG1WpKxhF5MH/17UVNomgszX6RhZ9O5Zw +Xt/U4AoiaxKyAMel+F4aL8d4dE7Hvi+9UwqJ4wMDqdIn4M7XXLkMLVGrbJOW5SYJBIfqAvL4 +GGPkOlBOL3nsFBT32mS/bRV/W8aoZHrhrdLOjjHE0U2PzFAeBUy0gP7mHbv8cnGhLLRlUpQC +os80HqU8BAgHQQcEjvxrHoDDAB8MsSNjK4hMiuaWZTkb0xqbyEnjKitvsvxEDeyZPKgJ+Jlk +qFVOh4oSG2Za07PL7RNnennWk99D9XvH2kINaZ1Rn9pPqU/kOqVRQykWkss3f5VDtSTrVQiA +4mB7yTPAfM8WbhDaoUYHPvinQo7KACDSQXxUeQCkK8vUXcuQE2cGnuLS6QlQKGLmxzi3wiaU +AThGFC7UMhwjTfsgWycHClmb3ZMWwNBbA+/HoCOYQ/EHYIkelnrSktmAMbbWE+OhAMSbOGJc +/vCmYMsGJGpWxR7LccnQU/FSOnxAeuTAlIoehu+V3JUCN2WhmHJpl2eOVQShkju8KWhUillz +qnrCkT6o6k0LemQ8ZuI2SFC+ENciKC4heaHiEnLOVHhxYZGkZIomFZ2dXcNBten+/qT0jZv2 ++2rsydr9mFL3dXwnOZGloIK4rxdDkdi0pXUocCVy/7e1/Uv7tWpLbfY9vVA20mcaksqOn+2/ +UxHHnrkuA91YHp+2O1lx7xZcYwpMR4cfYSgPZQI555BiBjBY54GUqHZlxdHBZ0fo4XVfAYqt +kvtW8IpM032QwzZLjBl0MAxAOu+tE7V3z3QtukiCdjwlLoJnUXUHWesS/ruQNGdQ3HjyxHFq +jJqyT3YSgxsIXDAmfW5IkK8oc12D7hlo1/NyTLZ7uINHlZMbgnuReFGLeQEcLGRSuuDg/FJy +Mq6XBXd8UPEdyNqOPjQeiu3sKBDsl1REXXC+YD26AWDS5P+SxHOiaAFWFY61HIr4XchCQxeS +o3VlAemf+MP2bNhq0nWRH8gylUojXRlRECc3HmSK63NqbVE6usdkCmqXNECYGsUaH3QBg7tM +TQ5UqRNEajXMwzT8XOcio0K4Xnq1ihymMcFGMAdHTD1Q1Iqtct9pEfDQd6iXaufs9b6sqR90 +BqibY3QMe0Q3VWhjiuA6FigASISKTO+vch5zlo0JT1Ep18DrHSJTbTdAP5fwVCGfy3bwVHG0 +m6F95RBpHnWVB1IOssANIUvHsEIJAF6Y6PuLIqU9Z/9G8cs8gUpbiD3FaqgioyRXnUihS0XK +hV0AepQeoCfTFq1IlN9gIqx4gmpGWIpix9F1hyboHTubnVxuO9Ty/zQ9mdQgDYOH9TlzA8Nk +TlzwR6VbWvlFUSKbwhqKLGr1UJ5cJXFUJxGKrPOT6aQGt5HA0XMEgkOVQqMiRKZ0VEVgXkda +UiVpXCcJ+waTGtRGgsYbCSpgDuu7oJZOalAbdzl87thTVTchZO2ER/beVbRHz2x5tHHLUl1g +3SupWPMXlyndHWOWPb2mcFQUZox36zFZH1Btptn6fI9VxT0kpFHl37Fmb9O8sFDFbzAQmQau +SaRjvGpTlQvw6ZbzxJGuUo0EVqn4q6Wf2lmr5pbIPY8LschDWRhhL7DB7GU3SschtVaZ4UAt +1OthN1lZC0Gw1NziLI7Aty1lT8xUSDCqlwFySJexGRMvyJZpoSlcRJ4k2NfBM0zPZnoV8gM8 +J/h4wWuUXFFowJ4j9YgfHh62dZMglj3CYO0uVYtAL7oIovyBaTsW2q2qNq06TRhiTDccy0DN +rBaExiVzJNVMbTbdiQFRxUaD9asimkQugxM1GGR2tLu9a1WwCqjSVlBrTWVhbWf+7JvFfWbn +RYp6W+GetthWH/WqLV3y22t85TG4gZw95R6Y2+NA5HP4uPnx+NefB9PfppOozfrvWRu/28iX +fiuxTqLjLJzmBk7DsE1ncLEkjzA0Up+Oln5tXvpeL3VD0AeqQv5O4T+itW74XqIiJIAG+UWJ +HrKK/ec/7CsDiC7MEHFfJwWVfp5YoP8oWjJvEcU+G3W7E4WxY1OXAFmDXTBfLRBEvvdV36UQ +tVJ5BhAmJmgAWmvqeXDx01EX0Hb+q8dVBowSUjc0KrWWfoCsEL0FqSvdjJDNBTr9RF1vD/gD +b2tKtG8pUmv50RwltNtBXjTFGODEyOjlM0BHRYVgETDSKXmpu0AO70En8g9SABFm/LCqp47T +A5QaBPd9kK7V4GjaRqX+RQVgjlYA2+fRQtupi0X1nVpEUcOZu5NKlWEa+rIwKTfxIaG0mvj1 +oGBGMjj6pLIQRisZtlSCIrJfUSrI3UgorcB7NXceylsacgnUonKxSWXd0KAzPAt0WoDJuWxi +3q8CqGAFT1ysQIUJROYCRq3FkDCwahZzzGaLlz1VHZwL4Ir7K4VDA0XeUFvG/xQptGEc6GDx +kliB2UaxrhoxTM+26uQNucbT/4++3mZh2YnrZmtadjNmQdfiz3nEvlye/8bw3Qj4OwjA5chL +qThwUF7J6riIvCB+6she3G0Jy90ksRDBPOR62T1m9XgTixWPvno1DsrKE1K6SNbL1H0h0YlK +IjNwIQeMiHJwGxHkJWng6YXGAKjwBi2IHqHIdAUMWJHcaA+YjyWggnHo6YtIrCGr4ikpYyuw +nA0YCShNJxB+sAwyjeA6uLGbJUauT4UHLSBVC0ZD7xXkDidNnuzAMld0klrZiXUdbJvgbSww +B1s/XZOp4QqQGQiklOhIb/MC3ijAGmswfMq5a9We5LsYmMtj091qk0lOj+X0g71Ejf22Yclh +wy6Hz+9ypJhcpOTAZ3PyYXN8wm4t9tp0aa8chEtP5hSMrYhgNZ6Lmoq3h6qpmev2f9F8s5ip +mGPHszpVjeGsRKpxhWSa7N591O8tOL3d1G8uONggJfMIrPXiWGCe74ZgO/4jWmkAJZVfIAB/ +LW9CpBco6c4iScEyFlBN+TxNVbBsqwYFXq5gFxKvbeXlBuwTxthvR6T/iuRTqabu3GVM7yyX +WEUA84Ec0w2rpFdFXLHflEnEjc/NTK/xSb6the3kzTx2BN059uXxgl7gKzNtVPQwxdxQYvCk +lxdyHYafkGPvFz1dBOsS4DJaYU9F0DWUagVCwUNweRzctXqaAHg9WgwqFsb3ajHJyLwSaNGG +QDpIj0d3nfbsp+nFhWQgqpOcLpsmjUOcgISKpiGlAtLb3ZLGmVcjo0ZZlKef1G56tEiiyD8a +nVU+0fAfXJydtdnj7+DUdGgbWjsd5TZVYqUzYw0I6fKTersUC8dNlw4IDpiMz5fkX9ZDFBbi +40RgJT5Tf/2m9y3bP/p23Bsf0St1JH8PMHiJef64h993Cb3N0Q9usj+cNA957XXOFmt18DVt +l2gzlHQIY48uxpKueZVzBomDIg6ffrM/4ki1mnASlIzeOchQhmoBIhd4TwRCVHag6ADmrd0w +jL3OaDiWabJpthRPIDvtq39CGq3W9JiBfcnzMzA5pXAVJITB1pTGnell3PmH6T8/Xk6dz18u +po2EvJCSZ0kxSrJIOe+oyW5ZRaDujRMsmkFB6A96VOaGDAy2/3GmWpVCa8l4+F1vNGL7b45G +vdG3pCcg6MUYX0HEoY+ep/9ezPMF7EJeC6spfJimWp7Wq7xXwcLnC+Z8mU3hjKd0zkKhO4sR +IMqQPrSpxVh/KW+I6nv0XX8eyKY9C3zYKr4NdINyZ4cpDAF4/wIDfCFv2CuUEtCot1NOodi1 +Z+0p3YM60eadBRT51KNmh/qBfpTJN4AVgtSdaUETDNSBRlWgUQPQuAo0Jlfxikd+sFCiBjK2 +/gvg4az2BTMAAA== + +--Boundary_(ID_0V6xQMBg8dMk2LzZyR0ioQ)-- + +From wb8tyw@qsl.net Sun Dec 8 19:58:11 2013 +Return-Path: +Received: from skeeve.com (skeeve.com [127.0.0.1]) + by skeeve.com (8.14.4/8.14.4/Debian-2ubuntu2.1) with ESMTP id rB8Hw8Y1002346 + for ; Sun, 8 Dec 2013 19:58:10 +0200 +X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on + frenzy.freefriends.org +X-Spam-Level: +X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM + autolearn=ham version=3.3.1 +X-Envelope-From: wb8tyw@qsl.net +X-Envelope-To: +Received: from frenzy.freefriends.org [66.54.153.139] + by skeeve.com with IMAP (fetchmail-6.3.21) + for (single-drop); Sun, 08 Dec 2013 19:58:10 +0200 (IST) +Received: from Encompasserve.org (Eisner.encompasserve.org [67.53.90.116]) + by freefriends.org (8.14.6/8.14.6) with ESMTP id rB84BBd2018585 + for ; Sat, 7 Dec 2013 21:11:14 -0700 +Received: from [192.168.0.101] + (173-19-202-206.client.mchsi.com [173.19.202.206]) + by Encompasserve.org (PMDF V6.6 #13031) + with ESMTPSA id <01P1OOF0VUTE001YI1@Encompasserve.org> for arnold@skeeve.com; + Sat, 07 Dec 2013 22:11:09 -0600 (CST) +Date: Sat, 07 Dec 2013 22:11:05 -0600 +From: "John E. Malmberg" +Subject: Re: VMS patch for config.h generation, passing tests. +In-reply-to: <52A277C3.303@qsl.net> +To: "John E. Malmberg" +Cc: arnold@skeeve.com, r.pat.rankin@gmail.com, anders_s_wallin@yahoo.se +Message-id: <52A3F159.9000607@qsl.net> +MIME-version: 1.0 +Content-type: text/plain; charset=ISO-8859-1; format=flowed +Content-transfer-encoding: 7BIT +User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20130215 + Thunderbird/17.0.3 +References: <52A17089.9060701@qsl.net> + <201312060840.rB68eH2F029601@freefriends.org> <52A277C3.303@qsl.net> +Status: R +X-Status: A + +I have merged in your changes with my local copy, but not sure yet what +to do to get the git status happy. + +Unfortunately the VMS 8.3 Alpha manyfile test failed. Closing 2 files +in io.c was not good enough. I am trying again with closing 4 files. +Still failed. I am going to have to add some diagnostics to identify +the failure. + +And the beginfile1 test also is failing on VMS 8.3 Alpha. I will look +at that after I resolve the manyfile issue. + +I also did not notice that ofmta test failed on VMS 7.3 VAX. The +floating point number is rounding differently. I get the same result +with the replacement SNPRINTF or the VMS provided SNPRINTF. + +TOAD> diff ofmta.ok sys$disk:[]_ofmta.tmp +************ +File SRC_ROOT:[GAWK.TEST]OFMTA.OK;1 + 5 4.234 + 6 4.2345 hi +****** +File LCL_ROOT:[GAWK.TEST]_OFMTA.TMP;2 + 5 4.235 + 6 4.2345 hi +************ + +I tried that build again with #undef HAVE_VPRINTF, and it failed. + + From eval.c: + I1 8733 #ifndef HAVE_VPRINTF + I1 8734 #error "you lose: you need a system with vfprintf" + .1 +%CC-E-ERRORMESSAGE, (1) #error "you lose: you need a system with vfprintf" + +Note that the error message has the wrong routine name. + +I have looked over the manual, and will try to get some detailed changes +to it. + +Some preliminary things to help collect my thoughts. + +As the MMS program has a lot of issues with ODS-5, Some open source +programmers have switched to Madgoat Make, known as MMK from +https://github.com/endlesssoftware/mmk . MMK uses most unmodified MMS +description files and handles ODS-5 volumes better than MMS does. + +The optional POSIX subsystem is no longer supported on VMS. While I +used to know at what version this support stopped in my head, I have +forgotten, and so far have not found that with an online search. + +Most of the C runtime routines that formerly required the POSIX +subsystem are in the VMS C runtime, so there no separate POSIX builds +needed for newer versions of VMS. + +The behavior of the VMS C runtime is controlled by feature settings that +can be set by logical names before the program is run. + +These feature settings include the support of longer filenames with +almost any characters including UTF-8, on ODS-5 volumes and if routines +should behave in a more Unix like fashion. + +I will be adding vms_crtl_init.c to the next commit for vmsbuild.com and +descrip.mms. This vms_crtl_init.c detects when the program is running +under a bash or similar shell and sets the feature settings for better +UNIX compatibility, or sets them for better DCL compatibilities. +It makes sure that the extended filename support is enabled. +This way a single binary can be used for both the VMS environment and +the DCL environment. + +As a replacement, a GNV https://sourceforge.net/projects/gnv/ was +created. There is older version of gawk that is provided by that package. + +Recently a group of programmers have started trying to correct issues +with the GNV project and reorganize it as a collection of packages along +wth a VMSPORTS https://sourceforge.net/projects/vms-ports/ effort. + +The GNV environment provides a Bash shell and several other utilities +intended to simulate a Unix environment. + +The web page https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/ +documents what needs to be done before installing these newer packages +while GNV is in the transition phase. + +Currently only Bash 4.2.45 and Coreutils 8.21 have been packaged, both +are fixing critical issues in GNV. + +I plan to have a GAWK PCSI package that will be installed with the VMS +PRODUCT command. This package will install into the GNV directory +structure, which mimics a Linux directory tree, so I will need to +determine where to put the gawk.hlp file in it. + +Regards, +-John + + + +On 12/6/2013 7:20 PM, John E. Malmberg wrote: +> Hello Arnold, +> +> I almost missed this, the gmail randomizer threw it in the spam folder. +> It tends to do that with about 1 to 5 percent of my incoming e-mail. +> +> I am still learning git, so I am not sure how to regenerate the patch +> set. If you can help me with the commands, I can try to regenerate it. +> +> I ended up doing two patches, because I forgot that VMS execute +> permission is interpreted differently than Unix, so is usually on. +> +> I did not change the commands to kick off the build procedure, just the +> internals. +> +> Unfortunately Texinfo is not in my toolbox. I will look at the *.tex* +> files to see what I can figure out for editing the source format for any +> changes. I did update the readme.vms FILE. +> +> Also this patch should enable the dynamic extension loading, which I +> forgot to put in the change list. +> +> To better support dynamic extensions, gawk on VMS/ALPHA should be built +> using IEEE floating point. +> +> This slightly changes the precision of floating point output. I am not +> sure that anyone would notice. IA64 defaults to IEEE, and VAX can not +> support IEEE. +> +> The reason for this is that most open source packages expect the IEEE +> behavior, so it seems best to default to that when possible. +> +> When we get this step resolved, I am going to work on the procedure to +> generate a installable package in the VMS PCSI format. +> +> Regards, +> -John +> +> +> +> On 12/6/2013 2:40 AM, arnold@skeeve.com wrote: +>> Hi. +>> +>> Thanks for this. I already pushed the change you suggested about +>> version.c. Do you want to pull and regenerate this patch set? +>> Or should I just apply it all and you'll send me an updated patch? +>> +>> Finally, we need the manual updated about the build procedure. If +>> Texinfo isn't in your toolbox, you can just send me plain text and I'll +>> handle the formatting, but the manual needs to be updated and also +>> and README files. +>> +>> This is great work and it's exciting that VMS gawk is progressing +>> this way. +>> +>> Thanks, +>> +>> Arnold +>> +>> "John E. Malmberg" wrote: +>> +>>> Forgot to document that the previous strftime test was incorrect as it +>>> was not specifying a timezone on VMS versions that support timezones +>>> which made the behavior different than on Unix/Linux. The test has been +>>> fixed. +>>> +>>> All tests now passing on VAX/VMS 7.3, Alpha and IA64/VMS 8.4. +>>> Tests are still running on ALPHA/VMS 8.3, but I am expecting them to +>>> also pass. +>>> +>>> VMS build procedures no longer need to be edited when the version number +>>> changes. +>>> +>>> 2013-12-05 John E. Malmberg +>>> +>>> * New config_h.com to generate config.h +>>> +>>> * New gawk_ident.com generates ident line for link option file. +>>> +>>> * Add version_c.com to create version.c from version.in. +>>> +>>> * Remove fcntl.h covering up real fcntl.h. If an older version +>>> of VMS needs this file, the build procedure should be updated +>>> to generate it from a template. +>>> +>>> * descrip.mms: Use command files to generate files based +>>> on same input files as a Linux build. +>>> +>>> * gawkmisc.vms (files_are_same): support _USE_STD_STAT for VMS 8.x. +>>> +>>> * generate_config_vms_h_gawk.com: Generates a helper file +>>> config_vms.h to cover issues config_h.com can not handle. +>>> +>>> * vmsbuild.com: Use command files to generate files based +>>> on the same input files as a Linux build. +>>> +>>> * vms_misc.c (vms_open): VMS CRTL setting errno to ENOENT where +>>> it should be set to EMFILE. +>>> +>>> Regards, +>>> -John +> + -- cgit v1.2.3 From 4ea6e0780fbbd34d2f0d8e6b43c15c14d28b5d55 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 16 Dec 2013 22:35:57 +0200 Subject: More VMS notes. --- vms/vms-notes | 530 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 530 insertions(+) diff --git a/vms/vms-notes b/vms/vms-notes index 312a562f..2d57648e 100644 --- a/vms/vms-notes +++ b/vms/vms-notes @@ -616,3 +616,533 @@ On 12/6/2013 7:20 PM, John E. Malmberg wrote: >>> -John > +From wb8tyw@gmail.com Mon Dec 16 21:27:20 2013 +Return-Path: +Received: from skeeve.com (skeeve.com [127.0.0.1]) + by skeeve.com (8.14.4/8.14.4/Debian-2ubuntu2.1) with ESMTP id rBGJQJfQ002202 + for ; Mon, 16 Dec 2013 21:27:19 +0200 +X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on + frenzy.freefriends.org +X-Spam-Level: +X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, + DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW autolearn=ham + version=3.3.1 +X-Envelope-From: wb8tyw@gmail.com +X-Envelope-To: +Received: from frenzy.freefriends.org [66.54.153.139] + by skeeve.com with IMAP (fetchmail-6.3.21) + for (single-drop); Mon, 16 Dec 2013 21:27:19 +0200 (IST) +Received: from mail-ie0-f173.google.com (mail-ie0-f173.google.com [209.85.223.173]) + by freefriends.org (8.14.6/8.14.6) with ESMTP id rBG6Tatb002732 + for ; Sun, 15 Dec 2013 23:29:39 -0700 +Received: by mail-ie0-f173.google.com with SMTP id to1so5932042ieb.4 + for ; Sun, 15 Dec 2013 22:29:36 -0800 (PST) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=gmail.com; s=20120113; + h=message-id:date:from:user-agent:mime-version:to:cc:subject + :content-type; + bh=ksiNjtwxRvh74kzY1LKaRL/l+Ja2PriUxgPwwm+Igho=; + b=BiJLgaDXXU4R0IwBKeNvon0qca3q3Le4HtVArPhKruA9rRhSqfVcTRHrQ8fF1r0f5h + N28vQidBEX3PNHi9k0uzfHF1sqT7LHGxOfSS/7ipk8UWoa4BVB3taSOFAAMzTkQUeduC + 2RNaWLJHjFR4xRvkOwYqJPVikLyg2atmds6iLoxKOFbNCz+KUFQacDmaCLiibEg4pxV1 + DsZWlBKLFrl8wXF5+gy3ZAj3FafIZluCgY5rUqrfXxrV9a7kumGrgljPG84MAOT01eCe + nXnlrhJgxIAjndT7sYPSYGZkeieSagmN57kRqefNkHk9PhdF5RbY3J0PBC7r0cJn/MKE + Uh0A== +X-Received: by 10.50.154.102 with SMTP id vn6mr13663789igb.1.1387175375953; + Sun, 15 Dec 2013 22:29:35 -0800 (PST) +Received: from [192.168.0.101] (173-19-202-206.client.mchsi.com. [173.19.202.206]) + by mx.google.com with ESMTPSA id da14sm14704681igc.1.2013.12.15.22.29.33 + for + (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); + Sun, 15 Dec 2013 22:29:34 -0800 (PST) +Message-ID: <52AE9DD7.1020409@gmail.com> +Date: Mon, 16 Dec 2013 00:29:43 -0600 +From: John Malmberg +User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20130215 Thunderbird/17.0.3 +MIME-Version: 1.0 +To: Aharon Robbins +CC: "John E. Malmberg" +Subject: Updates for gawktexi.in,readme.vms +Content-Type: multipart/mixed; + boundary="------------040502020402090508010905" +Status: RO +X-Status: A + +This is a multi-part message in MIME format. +--------------040502020402090508010905 +Content-Type: text/plain; charset=ISO-8859-1; format=flowed +Content-Transfer-Encoding: 7bit + +Hello Arnold, + +These are the preliminary updates for the VMS documentation. + +I forgot to document (not sure where to put it) + + * The exit code reporting in GAWK is wrong and violates VMS + standards. This is a common problem in older ports because + the exit() was not implemented correctly, and neither was + the rest of the C runtime. Day 1 porting bug that was inevitable. + + The first problem is that if I fix it to report the correct exit + status, it would break DCL procedures written to expect the + wrong value. + + The second problem is that the new exit() call does not + allow setting the severity values and the existing gawk code + is setting them for tests to use. + + Using reverse engineering, I have determined how to encode + the correct exit codes with severity into the old exit() + API. + + If the shell is a UNIX shell: + + * The input parameters and options are handled the same as Unix. + (I have forgotten if I sent you that patch yet) + + * The exit codes are correct. The DCL severity information + is also added even though most C programs will not use them. + +I do not know if would be permissible to change the behavior to always +use the correct exit code with the severity values set. + +Existing DCL code using the severity values would not notice this change. + +I would have to document how to convert UNIX exit codes to DCL values +for people to get the original codes back. + + + +In the documentation, I have been trying to change the case of the +filenames referenced in the VMS sections to be exact instead in upper case. + + +In general, on the older ODS-2 VMS file system, the files were stored +and displayed in upper case. + +In the newer ODS-5 file system, filenames are stored in a case preserved +state and are when unpacked from a repository are still in lower case. + +The VMS DCL shell also has an optional mode /PARSE=EXTEND mode where it +handles those names. + +In the normal mode DCL converts all unquoted parameters to upper case, +and then the C runtime converts all unquoted parameters to lower case. +A slight but significant difference. + +In the extended mode, DCL and the C runtime will also not do any +conversion of parameters. + +Which means that in extended mode, the target to the MMS or MMK program +needs to be in the exact case, or it may not be found. + +When you have an NFS mounted volume, like I do, things get a bit strange +on older VMS, like VAX/VMS, because it presents lower case filenames in +upper case, and uses the $ character to indicate when the case gets +inverted. + +Example: + +TOAD> dir src_root:[gawk.readme_d]readme.vms +%DIRECT-E-OPENIN, error opening SRC_ROOT:[GAWK.README_D]README.VMS;* as +input + +TOAD> dir src_root:[gawk.$readme_$d]$readme.vms + +Directory SRC_ROOT:[GAWK.$README_$D] + +$README.VMS;1 + +On current versions of VMS that support ODS-5, the exact case of the +files are seen. + +EAGLE> dir src_root:[gawk.readme_d]readme.vms + +Directory SRC_ROOT:[gawk.README_d] + +README.VMS;1 + +This affects build procedures as they must look for both path names. + +Regards, +-John + +--------------040502020402090508010905 +Content-Type: text/plain; charset=windows-1252; + name="gawktexti_in.gdiff" +Content-Transfer-Encoding: 7bit +Content-Disposition: attachment; + filename="gawktexti_in.gdiff" + +--- /src_root/gawk/doc/gawktexi.in Fri Dec 13 17:43:41 2013 ++++ /vms_root/gawk/doc/gawktexi.in Sun Dec 15 23:28:13 2013 +@@ -32713,6 +32713,9 @@ + @item + Prestandard VAX C compiler for VAX/VMS + ++@item ++GCC for VAX and Alpha has not been tested for a while. ++ + @end itemize + + @end itemize +@@ -33993,41 +33996,96 @@ + @appendixsubsubsec Compiling @command{gawk} on VMS + @cindex compiling @command{gawk} for VMS + +-To compile @command{gawk} under VMS, there is a @code{DCL} command procedure that +-issues all the necessary @code{CC} and @code{LINK} commands. There is +-also a @file{Makefile} for use with the @code{MMS} utility. From the source +-directory, use either: ++To compile @command{gawk} under VMS, there is a @code{DCL} command procedure ++that issues all the necessary @code{CC} and @code{LINK} commands. There is ++also a @file{Makefile} for use with the @code{MMS} or @code{MMK} utility. ++From the source directory, use either: + + @example +-$ @kbd{@@[.VMS]VMSBUILD.COM} ++$ @kbd{@@[.vms]vmsbuild.com} + @end example + + @noindent + or: + + @example +-$ @kbd{MMS/DESCRIPTION=[.VMS]DESCRIP.MMS GAWK} ++$ @kbd{MMS/DESCRIPTION=[.vms]descrip.mms gawk} + @end example ++or: ++ ++@example ++$ @kbd{MMK/DESCRIPTION=[.vms]descrip.mms gawk} ++@end example ++ ++The @code{MMK} is an open source freeware near clone of @code{MMS} and ++can better handle @code{ODS-5} volumes with upper and lower case filenames. ++@code{MMK} is available from @url{https://github.com/endlesssoftware/mmk}. ++ ++With @CODE{ODS-5} volumes and extended parsing enabled, the case of the target ++parameter may need to be exact. + + Older versions of @command{gawk} could be built with VAX C or + GNU C on VAX/VMS, as well as with DEC C, but that is no longer + supported. DEC C (also briefly known as ``Compaq C'' and now known + as ``HP C,'' but referred to here as ``DEC C'') is required. Both +-@code{VMSBUILD.COM} and @code{DESCRIP.MMS} contain some obsolete support ++@code{vmsbuild.com} and @code{descrip.mms} contain some obsolete support + for the older compilers but are set up to use DEC C by default. + +-@command{gawk} has been tested under Alpha/VMS 7.3-1 using Compaq C V6.4, +-and on Alpha/VMS 7.3, Alpha/VMS 7.3-2, and IA64/VMS 8.3.@footnote{The IA64 +-architecture is also known as ``Itanium.''} ++@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. ++Most recent builds are were using HP C V7.3 on Alpha VMS 8.3 and both ++Alpha and IA64 VMS 8.4 using HP C 7.3. ++@footnote{The IA64 architecture is also known as ``Itanium.''} ++ ++Work is currently being done for a procedure to build @code{gawk} and create ++a PCSI kit for compatible with the GNV product. ++ ++@appendixsubsubsec Compiling @command{gawk} Dynamic Extensions on VMS ++ ++Dynamic extensions need to be compiled with the same compiler options for ++floating point, pointer size, and symbol name handling as @code{gawk}. ++Alpha and Itanium should use IEEE floating point. The pointer size is 32 bits, ++and the symbol name handling is to be exact case with CRC shortening for ++symbols longer than 32 bits. ++ ++Alpha and Itanium: ++ ++@example ++/name=(as_is,short) ++/float=ieee/ieee_mode=denorm_results ++@end example ++ ++VAX: ++ ++@example ++/name=(as_is,short) ++@end example ++ ++Compile time macros needed to be defined before the first VMS supplied ++header file is included. ++ ++@example ++#if (__CRTL_VER >= 70200000) && !defined (__VAX) ++#define _LARGEFILE 1 ++#endif ++ ++#ifndef __VAX ++#ifdef __CRTL_VER ++#if __CRTL_VER >= 80200000 ++#define _USE_STD_STAT 1 ++#endif ++#endif ++#endif ++@end example + + @node VMS Installation Details + @appendixsubsubsec Installing @command{gawk} on VMS + +-To install @command{gawk}, all you need is a ``foreign'' command, which is +-a @code{DCL} symbol whose value begins with a dollar sign. For example: ++To use @command{gawk}, all you need is a ``foreign'' command, which is a ++@code{DCL} symbol whose value begins with a dollar sign. For example: + + @example +-$ @kbd{GAWK :== $disk1:[gnubin]GAWK} ++$ @kbd{GAWK :== $disk1:[gnubin]gawk} + @end example + + @noindent +@@ -34039,10 +34097,15 @@ + @file{sylogin.com} procedure, which allows all users + to run @command{gawk}. + ++If your @command{gawk} was installed by a PCSI kit into the ++@file{GNV$GNU:} directory tree, the program will be known as ++@file{GNV$GNU:[bin]gnv$gawk.exe} and the help file will be ++@file{GNV$GNU:[vms_help]gawk.hlp}. ++ + Optionally, the help entry can be loaded into a VMS help library: + + @example +-$ @kbd{LIBRARY/HELP SYS$HELP:HELPLIB [.VMS]GAWK.HLP} ++$ @kbd{LIBRARY/HELP sys$help:helplib [.vms]gawk.hlp} + @end example + + @noindent +@@ -34106,6 +34169,19 @@ + of @env{AWKPATH} is a comma-separated list of directory specifications. + When defining it, the value should be quoted so that it retains a single + translation and not a multitranslation @code{RMS} searchlist. ++ ++@node VMS GNV ++ ++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 ++to be individual PCSI packages for each component. ++@url{https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/} ++ ++The normal build procedure @command{gawk} will produce a program that ++is suitable for use with GNV. At this time work is being done to create ++the procedures for building a PCSI kit to replace the older @code{gawk} ++port. + + @ignore + @c The VMS POSIX product, also known as POSIX for OpenVMS, is long defunct + +--------------040502020402090508010905 +Content-Type: text/plain; charset=windows-1252; + name="readme_vms.gdiff" +Content-Transfer-Encoding: 7bit +Content-Disposition: attachment; + filename="readme_vms.gdiff" + +--- /src_root/gawk/readme_d/README.VMS Fri Dec 13 17:43:41 2013 ++++ /vms_root/gawk/readme_d/README.VMS Sun Dec 15 22:57:42 2013 +@@ -37,6 +37,38 @@ + GAWK was originally ported for VMS V4.6 and up. It has not been tested + with a release that old for some time. + ++Compiling dynamic extensions on VMS: ++ ++Dynamic extensions need to be compiled with the same compiler options for ++floating point, pointer size, and symbol name handling as gawk. ++Alpha and Itanium should use IEEE floating point. The pointer size is 32 bits, ++and the symbol name handling is to be exact case with CRC shortening for ++symbols longer than 32 bits. ++ ++Alpha and Itanium: ++ ++/name=(as_is,short) ++/float=ieee/ieee_mode=denorm_results ++ ++VAX: ++ ++/name=(as_is,short) ++ ++Compile time macros needed to be defined before the first VMS supplied ++header file is included. ++ ++#if (__CRTL_VER >= 70200000) && !defined (__VAX) ++#define _LARGEFILE 1 ++#endif ++ ++#ifndef __VAX ++#ifdef __CRTL_VER ++#if __CRTL_VER >= 80200000 ++#define _USE_STD_STAT 1 ++#endif ++#endif ++#endif ++ + + Installing GAWK on VMS: + +@@ -47,6 +79,10 @@ + That symbol should be placed in the user's login.com or in the system- + wide sylogin.com procedure so that it will be defined every time the + user logs on. ++ ++If your gawk was installed by a PCSI kit into the GNV$GNU: directory tree, ++the program will be known as GNV$GNU:[bin]gnv$gawk.exe and the help file ++will be GNV$GNU:[vms_help]gawk.hlp. + + Optionally, the help entry can be loaded into a VMS help library. + |$ LIBRARY/HELP SYS$HELP:HELPLIB [.VMS]GAWK.HLP + +--------------040502020402090508010905-- + +From wb8tyw@qsl.net Wed Dec 11 20:03:44 2013 +Return-Path: +Received: from skeeve.com (skeeve.com [127.0.0.1]) + by skeeve.com (8.14.4/8.14.4/Debian-2ubuntu2.1) with ESMTP id rBBI3gNX002464 + for ; Wed, 11 Dec 2013 20:03:43 +0200 +X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on + frenzy.freefriends.org +X-Spam-Level: +X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM + autolearn=ham version=3.3.1 +X-Envelope-From: wb8tyw@qsl.net +X-Envelope-To: +Received: from frenzy.freefriends.org [66.54.153.139] + by skeeve.com with IMAP (fetchmail-6.3.21) + for (single-drop); Wed, 11 Dec 2013 20:03:43 +0200 (IST) +Received: from Encompasserve.org (Eisner.encompasserve.org [67.53.90.116]) + by freefriends.org (8.14.6/8.14.6) with ESMTP id rBB5jaW9020988 + for ; Tue, 10 Dec 2013 22:45:40 -0700 +Received: from [192.168.0.101] + (173-19-202-206.client.mchsi.com [173.19.202.206]) + by Encompasserve.org (PMDF V6.6 #13031) + with ESMTPSA id <01P1SYL5LELG002FZE@Encompasserve.org> for arnold@skeeve.com; + Tue, 10 Dec 2013 23:45:35 -0600 (CST) +Date: Tue, 10 Dec 2013 23:45:36 -0600 +From: "John E. Malmberg" +Subject: Re: Some questions... +In-reply-to: <201312110426.rBB4QXXc003297@skeeve.com> +To: Aharon Robbins +Cc: wb8tyw@qsl.net +Message-id: <52A7FC00.2040905@qsl.net> +MIME-version: 1.0 +Content-type: text/plain; charset=ISO-8859-1; format=flowed +Content-transfer-encoding: 7BIT +User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20130215 + Thunderbird/17.0.3 +References: <529A9537.7090404@qsl.net> <201312110426.rBB4QXXc003297@skeeve.com> +Status: R + +On 12/10/2013 10:26 PM, Aharon Robbins wrote: +> Hi. Some questions about your changes. +> +> 1. I notice that there is at least one instance of #if __VMS, where as +> it seems most code uses #if VMS. Is that on purpose? If not, which +> is correct? + +VMS is a macro historically pre-defined by C compilers on C before the +ANSI rules. + +Under strict ANSI rules, a standards compliant compiler is not allowed +to pre-define macros that are not prefixed by "__". + +Which means that you can not count on the VMS macro being defined unless +you do it yourself. + +So __VMS is the ANSI correct definition. But it would be a lot of work +to change all the code. + +The vms_config.h that is now generated has these lines in it to make +sure that VMS is defined. + +#ifdef __VMS /* ANSI compliant */ +#ifndef VMS /* PRE-ansi */ +#define VMS 1 +#endif +#endif + +This may be needed for other architectures. It only shows up as an +issue if you set a "strict" compliance flag on the compile command. + +> 2. For the include of the main wrapper. Gawk already has a routine +> os_arg_fixup which is intended to manipulate argc and argv as needed +> by an OS-specific routine before main() parses it. A quick look at +> the wrapper looks to me like it could be made to fit within that framework, +> which would keep #if and the include out of the mainline code. + +I can look at that. I can also look to see if I can move the logic from +vms_crtl_init.c into it in a way that would sidestep that it has no +copyright notice at all. The result would be code that is almost +identical to code that is in the official Perl distribution. + +GNV was started as a user project and when the VMS POSIX product was +dropped and they needed a Unix like environment, Digital took over the +GNV product, but did not really do much to keep it up to date. + +The routine in vms_crtl_init.c is actually called before main() is +called, so just linking a module with it in is all that it takes to +activate the change. Unfortunately I do not know how to get it to +magically fix up the argv array. + +> If that looks reasonable to you, can you make that change? You can send +> it as a diff against what you currently have already done. + +I will look at it tomorrow night. I also found another change needed +for vms_args.c to work properly under a bash shell. + +> I'm sorry about the hassle on the copyrights, but I really have to play +> this game by the FSF rules. I hope we can get it clarified soon +> so that I can include the files in the dist. + +I hope so. I have not seen a reply from Karl yet. He did say that +there are other options. + +This would clear the way for getting the similar code accepted into the +Bash and coreutils repositories. I have a report that the first bash +4.3 beta built on VMS and looked real good on the test run. + +I am currently working on adapting the packaging scripts from bash and +coreutils to gawk. Each product has had it unique features, so I have +not yet come up with a generic set of scripts. + +This is a preview what will be coming: + +backup_gawk_src.com - Builds a VMS equivalent to tar archive. By +placing the source in the PCSI kit, it covers the requirement of +providing source somewhere with the binary. + +build_gawk_pcsi_desc.com - Creates a VMS PCSI package manifest file. + +build_gawk_pcsi_text.com - text output by the VMS PCSI package installer. + +compare_gawk_source.com - I have the source checked out on an NFS +server. The backup program needs me to copy it to a VMS volume first. +This procedure makes sure that the two copies are the same and ready for +backup. + +gawk_alias_setup.com - Sets up gawk and awk links to gnv$gawk.exe. +Needed to repair when sins of the past partially break an install. + +gawk_verb.cld - for gawk to use gnv$gawk.exe as an image. Different +than gawk.cld. To properly add an image to the VMS command table, it +needs a prefix. I have "GNV$" registered as a prefix for this purpose. + +gnv_gawk_kit_name.com - Calculates the VMS PCSI package name, used for +both file names and file contents. + +gnv_gawk_startup.com - Run at VMS startup to make sure that the +environment is set up properly for gawk. + +pcsi_gawk_file_list.txt - Source file for build_gawk_pcsi_desc.com. + +remove_old_gawk.com - Needed to properly clean up sins of the past. +Only touches the the GNV provided gawk and awk programs. + +stage_gawk_install.com - Does a pre-install into a fake "root" directory +tree for the kitting procedure to pull files out of. + +Regards, +-John + -- cgit v1.2.3 From 4fe032a32469509d548919624f1eaa459f82a160 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sat, 21 Dec 2013 19:20:17 +0200 Subject: Add exact case build support and doc fixes for VMS. --- README_d/ChangeLog | 4 ++++ README_d/README.VMS | 27 +++++++++++++++++++++++ vms/ChangeLog | 12 +++++++++- vms/descrip.mms | 5 ++++- vms/gawk.hlp | 26 +++++++++++++++++++--- vms/generate_config_vms_h_gawk.com | 34 ++++++++++++---------------- vms/vms.h | 24 ++++++++++---------- vms/vms_args.c | 22 ++++++++++++++++--- vms/vms_cli.c | 28 ++++++++++++------------ vms/vms_fwrite.c | 12 +++++----- vms/vms_gawk.c | 14 ++++++------ vms/vms_misc.c | 16 +++++++------- vms/vms_popen.c | 10 ++++----- vms/vmsbuild.com | 13 ++++++----- vms/vmstest.com | 45 ++++++++++++++++++++------------------ 15 files changed, 185 insertions(+), 107 deletions(-) diff --git a/README_d/ChangeLog b/README_d/ChangeLog index beaf198e..a9e95b77 100644 --- a/README_d/ChangeLog +++ b/README_d/ChangeLog @@ -1,3 +1,7 @@ +2013-12-20 John E. Malmberg + + * README.VMS: Document decoding Gawk VMS exit codes. + 2013-12-16 John E. Malmberg * README.VMS: Further updates. diff --git a/README_d/README.VMS b/README_d/README.VMS index 2bf8e86e..3689ad83 100644 --- a/README_d/README.VMS +++ b/README_d/README.VMS @@ -11,6 +11,9 @@ or |$ MMK/DESCRIPTION=[.VMS]DESCRIP.MMS gawk Note that on IA64 and Alpha the case of the target may be important. +MMS has had problems on ODS-5 volumes. MMK does not have these issues. +MMK is available free from https://github.com/endlesssoftware/mmk. +The most recent builds of gawk on VMS used MMK. DEC C -- use either vmsbuild.com or descrip.mms as is. DEC C is also known as Compaq C and HP C. @@ -130,3 +133,27 @@ separated list of directory specifications. When defining it, the value should be quoted so that it retains a single translation, not a multi-translation RMS searchlist. + The exit status from Gawk is encoded in the the VMS $status exit +value so that the severity bits are set as expected and the original +Gawk exit value can be extracted. + +To extract the actual gawk exit code from the VMS status use: + unix_status = (vms_status .and. &x7f8) / 8 + +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. + +The Gawk exit value of 1 will result in the VMS status having the +ERROR severity status set. The Gawk exit value of 2 will result in +the FATAL severity status set. All other Gawk exit values will have +the Success severity status set. + +This change was needed to provide all Gawk exit values to VMS programs and +for compatibilty with programs written in C and the GNV environment. + +Older versions of Gawk incorrectly mostly passed through the Gawk +status values instead of encoding them. DCL scripts that were checking +the severity values will probably not need changing. DCL scripts that +were checking the exact exit status will need an update. diff --git a/vms/ChangeLog b/vms/ChangeLog index b941fbe5..6cc5afb7 100644 --- a/vms/ChangeLog +++ b/vms/ChangeLog @@ -1,6 +1,16 @@ +2013-12-20 John E. Malmberg + + * descrip.mms: Set CC exact symbol names, cleanup repository. + * generate_config_vms_h_gawk.com: Use correct VMS exit codes. + * vmsbuild.com: Set CC exact symbol names. + * vmstest.com: Extract correct Unix status for failed tests. + * vms.h, vms_args.c, vms_cli.c, vms_fwrite.c, vms_gawk.c, + vms_misc.c, vms_popen.c: Correct case of function names. + * vms.hlp: Updated with new information about exit codes. + 2013-12-10 John E. Malmberg - * gawkmisc.mvs: Add lots of includes. + * gawkmisc.vms: Add lots of includes. (sys_trnlnm): New function. (gawk_name): Improved. (os_arg_fixup): Fix up time zone. diff --git a/vms/descrip.mms b/vms/descrip.mms index 5bf1b9e3..2000e680 100644 --- a/vms/descrip.mms +++ b/vms/descrip.mms @@ -73,8 +73,9 @@ CFLOAT = .else CFLOAT = /float=ieee/ieee_mode=denorm_results .endif +CNAME = /NAME=(AS_IS,SHORT) CC = cc/DECC/Prefix=All/NESTED_INCLUDE=NONE$(CFLOAT) -CFLAGS = /Incl=([],[.vms])/Obj=[]/Def=($(CDEFS)) $(CCFLAGS) +CFLAGS = /Incl=([],[.vms])/Obj=[]/Def=($(CDEFS))$(CNAME) $(CCFLAGS) LIBS = # DECC$SHR instead of VAXCRTL, no special link option needed .endif !VAXC .endif !GNUC @@ -256,6 +257,8 @@ spotless : clean tidy - if f$search("gawk.dvi").nes."" then delete gawk.dvi;* - if f$search("[.doc]texindex.exe").nes."" then \ delete [.doc]texindex.exe;* + - if f$search("[.cxx_repository]*.*;").nes."" then \ + delete [.cxx_repository]*.*;* # # Note: this only works if you kept a copy of [.support]texindex.c diff --git a/vms/gawk.hlp b/vms/gawk.hlp index 4b82e7e9..177ef91c 100644 --- a/vms/gawk.hlp +++ b/vms/gawk.hlp @@ -1557,9 +1557,24 @@ 4 exit The exit statement can optionally pass a final status value to the operating system. GAWK expects a UN*X-style value instead of a - VMS status value, so 0 indicates success and non-zero indicates - failure. The final exit status will be 1 (VMS success) if 0 is - used, or even (VMS non-success) if non-zero is used. + VMS status value, so 0 indicates success. A failure is indicated + by 1 and VMS will set the ERROR status. A fatal error is indicated + by 2 and VMS seet the FATAL status. All other values will 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: + unix_status = (vms_status .and. &x7f8) / 8 + + A C program that uses exec() to call gawk will get the original + UN*X-style exit value. + + Older versions of Gawk treated Unix exit code 0 as 1, A failure as + 2, and a fatal error as 4, and passed all the other numbers through. + This violate the VMS exit status coding requirements. + 3 changes Changes between version 4.0.0 and earlier versions @@ -1569,6 +1584,7 @@ General dgawk.exe does interactive debugging of awk programs pgawk.exe does comprehensive execution profiling of awk programs + pgawk.exe is not currently supplied for VMS. -d[file] and -p[file] options added -Wcompat and -Wusage options dropped; use -Wtraditional and -Whelp BEGINFILE and ENDFILE built-in rule patterns @@ -1594,6 +1610,10 @@ support for radix prefix '0' (octal) and '0x' (hexadecimal) VMS-specific + The VMS exit codes now correctly encode the gawk exit status and + the VMS severity bits are set. + Large file support is enabled on the platforms that support it. + Extended filename support is enabled on the platforms that support it. New command qualifiers: /EXTRA_COMMANDS, /PROFILE, /DUMP_VARIABLES, /OPTIMIZE, /TRADITIONAL, /SANDBOX, /NON_DECIMAL_DATA Revised qualifier: /LINT, takes optional argument list diff --git a/vms/generate_config_vms_h_gawk.com b/vms/generate_config_vms_h_gawk.com index 11493e5d..03ad2015 100644 --- a/vms/generate_config_vms_h_gawk.com +++ b/vms/generate_config_vms_h_gawk.com @@ -242,40 +242,34 @@ $ write cvh "#define NO_ALLOCA" $ write cvh "#define STACK_DIRECTION (-1)" $ write cvh "" $ write cvh "void decc$exit(int status);" -$ write cvh "void __posix_exit(int status);" $ write cvh "#define _exit(foo) vms_exit(foo)" $ write cvh "#define exit(foo) vms_exit(foo)" $ write cvh "" -$ write cvh "#define EXIT_FATAL (STS$M_INHIB_MSG | STS$K_SEVERE)" +$ write cvh "/* Use POSIX exit codes here */" +$ write cvh "#ifdef EXIT_FAILURE" +$ write cvh "#undef EXIT_FAILURE" +$ write cvh "#endif" +$ write cvh "#define EXIT_FAILURE (1)" +$ write cvh "" +$ write cvh "#define EXIT_FATAL (2)" $ write cvh "" $ write cvh "#ifndef C_FACILITY_NO" $ write cvh "#define C_FACILITY_NO 0x350000" $ write cvh "#endif" $ write cvh "" -$ write cvh "/* Use old exit codes for DCL, correct for other cases */ +$ write cvh "/* Build a Posix Exit with VMS severity */ $ write cvh "static void vms_exit(int status) {" -$ write cvh " char * shell;" $ write cvh " int vms_status;" -$ write cvh " int use_old_exit = 0;" -$ write cvh " shell = getenv(""SHELL"");" -$ write cvh " if (shell != NULL) {" -$ write cvh " if (strcmp(shell, ""DCL"") == 0) {" -$ write cvh " use_old_exit = 1;" -$ write cvh " }" -$ write cvh " } else {" -$ write cvh " use_old_exit = 1;" -$ write cvh " }" -$ write cvh " if (use_old_exit == 1) {" -$ write cvh " decc$exit(status);" -$ write cvh " }" $ write cvh " /* Fake the __posix_exit with severity added */" -$ write cvh " /* Undocumented correct way to do the above unless */" -$ write cvh " /* backwards compatibilty is needed */" +$ write cvh " /* Undocumented correct way to do this. */" $ write cvh " vms_status = C_FACILITY_NO | 0xA000 | STS$M_INHIB_MSG;" +$ write cvh " vms_status |= (status << 3);" $ write cvh " if (status == EXIT_FAILURE) {" -$ write cvh " vms_status |= (1 << 3) | STS$K_ERROR;" +$ write cvh " vms_status |= STS$K_ERROR;" $ write cvh " } else if (status == EXIT_FATAL) {" -$ write cvh " vms_status |= (2 << 3) | STS$K_SEVERE;" +$ write cvh " vms_status |= STS$K_SEVERE;" +$ write cvh " } else {" +$ write cvh " vms_status |= STS$K_SUCCESS;" $ write cvh " }" $ write cvh " decc$exit(vms_status);" $ write cvh "}" diff --git a/vms/vms.h b/vms/vms.h index 0fb73d5b..3991d39b 100644 --- a/vms/vms.h +++ b/vms/vms.h @@ -54,26 +54,26 @@ typedef struct _itm { U_Short len, code; void *buffer; U_Short *retlen; } Itm; #define Descrip(strdsc,strbuf) Dsc strdsc = {sizeof strbuf - 1, (char *)strbuf} extern int shell$is_shell(void); -extern U_Long lib$find_file(const Dsc *, Dsc *, void *, ...); -extern U_Long lib$find_file_end(void *); +extern U_Long LIB$FIND_FILE(const Dsc *, Dsc *, void *, ...); +extern U_Long LIB$FIND_FILE_END(void *); #ifndef NO_TTY_FWRITE -extern U_Long lib$get_ef(long *); -extern U_Long sys$assign(const Dsc *, short *, long, const Dsc *); -extern U_Long sys$dassgn(short); -extern U_Long sys$qio(U_Long, U_Long, U_Long, void *, +extern U_Long LIB$GET_EF(long *); +extern U_Long SYS$ASSIGN(const Dsc *, short *, long, const Dsc *); +extern U_Long SYS$DASSGN(short); +extern U_Long SYS$QIO(U_Long, U_Long, U_Long, void *, void (*)(U_Long), U_Long, const char *, int, int, U_Long, int, int); -extern U_Long sys$synch(long, void *); +extern U_Long SYS$SYNCH(long, void *); #endif /*!NO_TTY_FWRITE*/ -extern U_Long lib$spawn(const Dsc *,const Dsc *,const Dsc *, +extern U_Long LIB$SPAWN(const Dsc *,const Dsc *,const Dsc *, const U_Long *,const Dsc *,U_Long *,U_Long *,...); /* system services for logical name manipulation */ -extern U_Long sys$trnlnm(const U_Long *,const Dsc *,const Dsc *, +extern U_Long SYS$TRNLNM(const U_Long *,const Dsc *,const Dsc *, const unsigned char *,Itm *); -extern U_Long sys$crelnm(const U_Long *,const Dsc *,const Dsc *, +extern U_Long SYS$CRELNM(const U_Long *,const Dsc *,const Dsc *, const unsigned char *,const Itm *); -extern U_Long sys$crelog(int,const Dsc *,const Dsc *,unsigned char); -extern U_Long sys$dellnm(const Dsc *,const Dsc *,const unsigned char *); +extern U_Long SYS$CRELOG(int,const Dsc *,const Dsc *,unsigned char); +extern U_Long SYS$DELLNM(const Dsc *,const Dsc *,const unsigned char *); extern void v_add_arg(int, const char *); extern void vms_exit(int); diff --git a/vms/vms_args.c b/vms/vms_args.c index 0a296105..9788275d 100644 --- a/vms/vms_args.c +++ b/vms/vms_args.c @@ -106,10 +106,26 @@ vms_arg_fixup( int *pargc, char ***pargv ) char **argv = *pargv; int i, argc = *pargc; int err_to_out_redirect = 0, out_to_err_redirect = 0; + char * shell; + int using_shell; /* make sure AWK_LIBRARY has a value */ if (!getenv("AWK_LIBRARY")) vms_define("AWK_LIBRARY", "SYS$LIBRARY:"); + + /* Check if running under a shell instead of DCL */ + using_shell = 1; + shell = getenv("SHELL"); + if (shell != NULL) { + if (strcmp(shell, "DCL") == 0) { + using_shell = 0; + } + } else { + using_shell = 0; + } + if (using_shell) { + return; + } #ifdef CHECK_DECSHELL /* don't define this if linking with DECC$SHR */ if (shell$is_shell()) return; /* don't do anything if we're running DEC/Shell */ @@ -325,12 +341,12 @@ vms_expand_wildcards( const char *prospective_filespec ) */ len = -1; /* overload 'len' with flag value */ context = NULL; /* init */ - while (vmswork(lib$find_file(&spec, &result, &context))) { + while (vmswork(LIB$FIND_FILE(&spec, &result, &context))) { for (len = sizeof(res_buf)-1; len > 0 && res_buf[len-1] == ' '; len--) ; res_buf[len] = '\0'; /* terminate after discarding trailing blanks */ v_add_arg(v_argc++, strdup(res_buf)); /* store result */ } - (void)lib$find_file_end(&context); + (void)LIB$FIND_FILE_END(&context); if (len >= 0) /* (still -1 => never entered loop) */ --v_argc; /* undo final post-increment */ return; @@ -395,7 +411,7 @@ vms_define( const char *log_name, const char *trans_val ) log_dsc.len = len; itemlist[0].buffer = (char *)trans_val; itemlist[0].len = strlen(trans_val); - return sys$crelnm(&attr, &lnmtable, &log_dsc, &acmode, itemlist); + return SYS$CRELNM(&attr, &lnmtable, &log_dsc, &acmode, itemlist); } /* t_strstr -- strstr() substitute; search 'str' for 'sub' */ diff --git a/vms/vms_cli.c b/vms/vms_cli.c index ac793c1a..0cfe96fc 100644 --- a/vms/vms_cli.c +++ b/vms/vms_cli.c @@ -29,13 +29,13 @@ #include #endif -extern U_Long cli$present(const Dsc *); -extern U_Long cli$get_value(const Dsc *, Dsc *, short *); -extern U_Long cli$dcl_parse(const Dsc *, const void *, ...); -extern U_Long sys$cli(void *, ...); -extern U_Long sys$filescan(const Dsc *, void *, long *); +extern U_Long CLI$PRESENT(const Dsc *); +extern U_Long CLI$GET_VALUE(const Dsc *, Dsc *, short *); +extern U_Long CLI$DCL_PARSE(const Dsc *, const void *, ...); +extern U_Long SYS$CLI(void *, ...); +extern U_Long SYS$FILESCAN(const Dsc *, void *, long *); extern void *lib$establish(U_Long (*handler)(void *, void *)); -extern U_Long lib$sig_to_ret(void *, void *); /* condition handler */ +extern U_Long LIB$SIG_TO_RET(void *, void *); /* condition handler */ /* Cli_Present() - call CLI$PRESENT to determine whether a parameter or */ /* qualifier is present on the [already parsed] command line */ @@ -43,10 +43,10 @@ U_Long Cli_Present( const char *item ) { Dsc item_dsc; - (void)lib$establish(lib$sig_to_ret); + (void)lib$establish(LIB$SIG_TO_RET); item_dsc.len = strlen(item_dsc.adr = (char *)item); - return cli$present(&item_dsc); + return CLI$PRESENT(&item_dsc); } /* Cli_Get_Value() - call CLI$GET_VALUE to retreive the value of a */ @@ -57,11 +57,11 @@ Cli_Get_Value( const char *item, char *result, int size ) Dsc item_dsc, res_dsc; U_Long sts; short len = 0; - (void)lib$establish(lib$sig_to_ret); + (void)lib$establish(LIB$SIG_TO_RET); item_dsc.len = strlen(item_dsc.adr = (char *)item); res_dsc.len = size, res_dsc.adr = result; - sts = cli$get_value(&item_dsc, &res_dsc, &len); + sts = CLI$GET_VALUE(&item_dsc, &res_dsc, &len); result[len] = '\0'; return sts; } @@ -79,11 +79,11 @@ Cli_Parse_Command( const void *cmd_tables, const char *cmd_verb ) U_Long sts; int ltmp; char longbuf[8200]; - (void)lib$establish(lib$sig_to_ret); + (void)lib$establish(LIB$SIG_TO_RET); memset(&cmd, 0, sizeof cmd); cmd.rqtype = CLI$K_GETCMD; /* command line minus the verb */ - sts = sys$cli(&cmd, (void *)0, (void *)0); /* get actual command line */ + sts = SYS$CLI(&cmd, (void *)0, (void *)0); /* get actual command line */ if (vmswork(sts)) { /* ok => cli available & verb wasn't "RUN" */ /* invoked via symbol => have command line (which might be empty) */ @@ -92,7 +92,7 @@ Cli_Parse_Command( const void *cmd_tables, const char *cmd_verb ) /* need to strip image name from MCR invocation */ memset(fscn, 0, sizeof fscn); fscn[0].code = FSCN$_FILESPEC; /* full file specification */ - (void)sys$filescan(&cmd.rdesc, fscn, (long *)0); + (void)SYS$FILESCAN(&cmd.rdesc, fscn, (long *)0); cmd.rdesc.len -= fscn[0].len; /* shrink size */ cmd.rdesc.adr += fscn[0].len; /* advance ptr */ } @@ -102,7 +102,7 @@ Cli_Parse_Command( const void *cmd_tables, const char *cmd_verb ) cmd.rdesc.len = sizeof longbuf - ltmp; strncpy(&longbuf[ltmp], cmd.rdesc.adr, cmd.rdesc.len); cmd.rdesc.len += ltmp, cmd.rdesc.adr = longbuf; - sts = cli$dcl_parse(&cmd.rdesc, cmd_tables); + sts = CLI$DCL_PARSE(&cmd.rdesc, cmd_tables); } return sts; diff --git a/vms/vms_fwrite.c b/vms/vms_fwrite.c index 1a16f58c..435fead2 100644 --- a/vms/vms_fwrite.c +++ b/vms/vms_fwrite.c @@ -83,9 +83,9 @@ tty_fwrite( const void *buf, size_t size, size_t number, FILE *file ) fgetname(file, devnam); /* get 'file's name */ device.len = strlen(device.adr = devnam); /* create descriptor */ - if (vmswork(sys$assign(&device, &chan, 0, (Dsc *)0))) { + if (vmswork(SYS$ASSIGN(&device, &chan, 0, (Dsc *)0))) { /* get an event flag; use #0 if problem */ - if (evfn == -1 && vmsfail(lib$get_ef(&evfn))) evfn = 0; + if (evfn == -1 && vmsfail(LIB$GET_EF(&evfn))) evfn = 0; } else chan = 0; /* $ASSIGN failed */ } /* store channel for later use; -1 => don't repeat failed init attempt */ @@ -119,19 +119,19 @@ tty_fwrite( const void *buf, size_t size, size_t number, FILE *file ) else if (pos < count) pos++, cc_fmt |= POSTFIX_CR, extra++; /* wait for previous write, if any, to complete */ if (pt > (char *)buf) { - sts = sys$synch(evfn, &iosb); + sts = SYS$SYNCH(evfn, &iosb); if (vmswork(sts)) sts = iosb.status, result += iosb.count; if (vmsfail(sts)) break; } /* queue an asynchronous write */ - sts = sys$qio(evfn, chan, io_func, &iosb, (void (*)(U_Long))0, 0L, + sts = SYS$QIO(evfn, chan, io_func, &iosb, (void (*)(U_Long))0, 0L, pt, pos, 0, cc_fmt, 0, 0); if (vmsfail(sts)) break; /*(should never happen)*/ pt += pos, count -= pos; } /* wait for last write to complete */ if (pt > (char *)buf && vmswork(sts)) { - sts = sys$synch(evfn, &iosb); + sts = SYS$SYNCH(evfn, &iosb); if (vmswork(sts)) sts = iosb.status, result += iosb.count; } if (vmsfail(sts)) errno = EVMSERR, vaxc$errno = sts; @@ -202,7 +202,7 @@ tty_fclose( FILE *file ) short chan = file_num < _NFILE ? channel[file_num] : -1; if (chan > 0) - (void)sys$dassgn(chan); /* deassign the channel (ie, close) */ + (void)SYS$DASSGN(chan); /* deassign the channel (ie, close) */ if (file_num < _NFILE) channel[file_num] = 0; /* clear stale info */ } diff --git a/vms/vms_gawk.c b/vms/vms_gawk.c index f22e2fa9..fce0fa85 100644 --- a/vms/vms_gawk.c +++ b/vms/vms_gawk.c @@ -37,16 +37,16 @@ #define Present(arg) vmswork(Cli_Present(arg)) #define Get_Value(arg,buf,siz) vmswork(Cli_Get_Value(arg,buf,siz)) -#ifndef __ia64__ -extern void gawk_cmd(); /* created with $ SET COMMAND/OBJECT */ -#define GAWK_CMD ((const void *)gawk_cmd) -#else /* linker on Itanium is much pickier about such things */ +#ifndef __DECC +extern void GAWK_CMD(); /* created with $ SET COMMAND/OBJECT */ +#define gawk_cmd ((const void *)GAWK_CMD) */ +#else /* Use ANSI definitions for DEC C */ #pragma extern_model save #pragma extern_model strict_refdef /* (could use globalvalue rather than _refdef if we omit GAWK_CMD's `&') */ -extern void *gawk_cmd; +extern void *GAWK_CMD; #pragma extern_model restore -#define GAWK_CMD ((const void *)&gawk_cmd) +#define gawk_cmd ((const void *)&GAWK_CMD) #endif extern void _exit(int); static int vms_usage(int); @@ -88,7 +88,7 @@ vms_gawk() command, so we'll now attempt to generate a command from the foreign command string and parse that. */ - sts = Cli_Parse_Command(GAWK_CMD, "GAWK"); /* (*not* CmdName) */ + sts = Cli_Parse_Command(gawk_cmd, "GAWK"); /* (*not* CmdName) */ if (vmswork(sts)) sts = Cli_Present("GAWK_P1"); } diff --git a/vms/vms_misc.c b/vms/vms_misc.c index ce190341..ed479539 100644 --- a/vms/vms_misc.c +++ b/vms/vms_misc.c @@ -118,7 +118,7 @@ vms_open( const char *name, int mode, ... ) result = creat(name, 0, "rfm=stmlf", "rat=cr", "shr=nil", "mbc=32"); } else { struct stat stb; - int stat_result; + int stat_result; const char *mbc, *shr = "shr=get", *ctx = "ctx=stm"; stat_result = stat((char *)name, &stb); @@ -174,8 +174,8 @@ vms_devopen( const char *name, int mode ) #define VMS_UNITS_PER_SECOND 10000000L /* hundreds of nanoseconds, 1e-7 */ #define UNIX_EPOCH "01-JAN-1970 00:00:00.00" -extern U_Long sys$bintim(), sys$gettim(); -extern U_Long lib$subx(), lib$ediv(); +extern U_Long SYS$BINTIM(), SYS$GETTIM(); +extern U_Long LIB$SUBX(), LIB$EDIV(); /* * Get current time in microsecond precision. @@ -192,13 +192,13 @@ vms_gettimeofday(struct timeval *tv, void *timezone__not_used) const long thunk = VMS_UNITS_PER_SECOND; long now[2], quad[2]; - if (!epoch[0]) sys$bintim(&epoch_dsc, epoch); /* 1 Jan 0:0:0 1970 */ + if (!epoch[0]) SYS$BINTIM(&epoch_dsc, epoch); /* 1 Jan 0:0:0 1970 */ /* get current time, as VMS quadword time */ - sys$gettim(now); + SYS$GETTIM(now); /* convert the quadword time so that it's relative to Unix epoch */ - lib$subx(now, epoch, quad); /* quad = now - epoch; */ + LIB$SUBX(now, epoch, quad); /* quad = now - epoch; */ /* convert 1e-7 units into seconds and fraction of seconds */ - lib$ediv(&thunk, quad, &tv->tv_sec, &tv->tv_usec); + LIB$EDIV(&thunk, quad, &tv->tv_sec, &tv->tv_usec); /* convert fraction of seconds into microseconds */ tv->tv_usec /= (VMS_UNITS_PER_SECOND / 1000000); @@ -281,7 +281,7 @@ int fork( void ) { #include #include -extern unsigned long sys$parse(), sys$search(); +extern unsigned long SYS$PARSE(), SYS$SEARCH(); /* Work around a VAXCRTL bug. If a file is located via a searchlist, and if the device it's on is not the same device as the one specified diff --git a/vms/vms_popen.c b/vms/vms_popen.c index 62f3f719..6c5c5086 100644 --- a/vms/vms_popen.c +++ b/vms/vms_popen.c @@ -172,7 +172,7 @@ vms_execute( const char *command, const char *input, const char *output ) out_p = 0; push_logicals(); /* guard against user-mode definitions of sys$Xput */ - sts = lib$spawn(&cmd, in_p, out_p, (U_Long *)0, + sts = LIB$SPAWN(&cmd, in_p, out_p, (U_Long *)0, (Dsc *)0, (U_Long *)0, &cmpltn_sts); pop_logicals(); /* restore environment */ @@ -219,9 +219,9 @@ static const Descrip(sys_output,"SYS$OUTPUT"); static const unsigned char acmode = PSL$C_USER; /* only care about user-mode */ /* macros for simplfying the code a bunch */ -#define DelTrans(l) sys$dellnm(&lnmtable, (l), &acmode) -#define GetTrans(l,i) sys$trnlnm((U_Long *)0, &lnmtable, (l), &acmode, (i)) -#define SetTrans(l,i) sys$crelnm((U_Long *)0, &lnmtable, (l), &acmode, (i)) +#define DelTrans(l) SYS$DELLNM(&lnmtable, (l), &acmode) +#define GetTrans(l,i) SYS$TRNLNM((U_Long *)0, &lnmtable, (l), &acmode, (i)) +#define SetTrans(l,i) SYS$CRELNM((U_Long *)0, &lnmtable, (l), &acmode, (i)) /* itemlist manipulation macros; separate versions for aggregate and scalar */ #define SetItmA(i,c,p,r) ((i).code = (c), (i).len = sizeof (p),\ (i).buffer = (p), (i).retlen = (U_Short *)(r)) @@ -333,7 +333,7 @@ restore_translation( const Dsc *logname, const Itm *itemlist ) /* assert( itemlist[2].code == LNM$_STRING ); */ trans_val.adr = itemlist[2].buffer; trans_val.len = itemlist[2].len; - (void) sys$crelog(LOG_PROCESS_TABLE, logname, &trans_val, LOG_USERMODE); + (void) SYS$CRELOG(LOG_PROCESS_TABLE, logname, &trans_val, LOG_USERMODE); } else { /* $crelnm definition; itemlist could specify multiple translations, but has already been setup properly for use as-is. diff --git a/vms/vmsbuild.com b/vms/vmsbuild.com index ff5dc929..2c0d39f0 100644 --- a/vms/vmsbuild.com +++ b/vms/vmsbuild.com @@ -49,14 +49,15 @@ $ else !!VAXC $! neither GNUC nor VAXC, assume DECC (same for either VAX or Alpha) $ if arch_name .eqs. "vax" $ then -$ cfloat = "" +$ CFLOAT = "" $ else -$ cfloat = "/float=ieee/ieee_mode=denorm_results" +$ CFLOAT = "/float=ieee/ieee_mode=denorm_results" $ endif $ CC = "cc/DECC/Prefix=All" +$ CNAME = "/NAME=(AS_IS,SHORT) $ CINC = "/NESTED_INCLUDE=NONE" $ CFLAGS = "/Incl=([],[.vms])/Obj=[]/Def=(''CDEFS')''CINC'''CCFLAGS'" -$ CFLAGS = cfloat + CFLAGS +$ CFLAGS = CNAMES + CFLOAT + CFLAGS $ LIBS = "" ! DECC$SHR instead of VAXCRTL, no special link option needed $ endif !VAXC $ endif !GNUC @@ -90,7 +91,7 @@ $ if f$search("ytab.c").nes."" .or. f$search("y_tab.c").nes."" then - !yacc write sys$output " or else rename `ytab.c' or `y_tab.c' to `command.c'." $ exit $command_ok: -$ v = f$verify(1) +$ v1 = f$verify(1) $ cc array.c $ cc awkgram.c $ cc builtin.c @@ -145,13 +146,13 @@ psect_attr=environ,noshr !extern [noshare] char ** stack=48 !preallocate more pages (default is 20) iosegment=128 !ditto (default is 32) $! -$ v = f$verify(1) +$ v1 = f$verify(1) $ @[.vms]gawk_ident.com $ open/append Fopt gawk.opt $ write Fopt libs $ close Fopt $! -$ v = f$verify(1) +$ v1 = f$verify(1) $ link/exe=gawk.exe gawk.opt/options $! 'f$verify(v)' $ exit diff --git a/vms/vmstest.com b/vms/vmstest.com index 7b1c3a36..1b5b7ed9 100644 --- a/vms/vmstest.com +++ b/vms/vmstest.com @@ -578,7 +578,7 @@ $defref: echo "defref" $ set noOn $ AWKPATH_srcdir $ gawk --lint -f defref.awk >_defref.tmp 2>&1 -$ if .not.$status then call exit_code 2 _defref.tmp +$ if .not. $status then call exit_code '$status' _defref.tmp $ set On $ cmp defref.ok sys$disk:[]_defref.tmp $ if $status then rm _defref.tmp; @@ -637,7 +637,7 @@ $ $incdupe: echo "''test'" $ set noOn $ gawk --lint -i inclib -i inclib.awk "BEGIN {print sandwich(""a"", ""b"", ""c"")}" > _'test'.tmp 2>&1 -$ if .not. $status then call exit_code 1 _'test'.tmp +$ if .not. $status then call exit_code '$status' _'test'.tmp $ cmp 'test'.ok sys$disk:[]_'test'.tmp $ if $status then rm _'test'.tmp;* $ set On @@ -646,7 +646,7 @@ $ $incdupe2: echo "''test'" $ set noOn $ gawk --lint -f inclib -f inclib.awk >_'test'.tmp 2>&1 -$ if .not. $status then call exit_code 1 _'test'.tmp +$ if .not. $status then call exit_code '$status' _'test'.tmp $ cmp 'test'.ok sys$disk:[]_'test'.tmp $ if $status then rm _'test'.tmp;* $ set On @@ -661,7 +661,7 @@ $ $incdupe4: echo "''test'" $ set NoOn $ gawk --lint -f hello -i hello.awk >_'test'.tmp 2>&1 -$ if .not. $status then call exit_code 2 _'test'.tmp +$ if .not. $status then call exit_code '$status' _'test'.tmp $ cmp 'test'.ok sys$disk:[]_'test'.tmp $ if $status then rm _'test'.tmp;* $ set On @@ -670,7 +670,7 @@ $ $incdupe5: echo "''test'" $ set NoOn $ gawk --lint -i hello -f hello.awk >_'test'.tmp 2>&1 -$ if .not. $status then call exit_code 2 _'test'.tmp +$ if .not. $status then call exit_code '$status' _'test'.tmp $ cmp 'test'.ok sys$disk:[]_'test'.tmp $ if $status then rm _'test'.tmp;* $ set On @@ -679,7 +679,7 @@ $ $incdupe6: echo "''test'" $ set NoOn $ gawk --lint -i inchello -f hello.awk >_'test'.tmp 2>&1 -$ if .not. $status then call exit_code 2 _'test'.tmp +$ if .not. $status then call exit_code '$status' _'test'.tmp $ cmp 'test'.ok sys$disk:[]_'test'.tmp $ if $status then rm _'test'.tmp;* $ set On @@ -688,7 +688,7 @@ $ $incdupe7: echo "''test'" $ set NoOn $ gawk --lint -f hello -i inchello >_'test'.tmp 2>&1 -$ if .not. $status then call exit_code 2 _'test'.tmp +$ if .not. $status then call exit_code '$status' _'test'.tmp $ cmp 'test'.ok sys$disk:[]_'test'.tmp $ if $status then rm _'test'.tmp;* $ set On @@ -706,7 +706,7 @@ $symtab2: $symtab3: echo "''test'" $ set noOn $ gawk -f 'test'.awk >_'test'.tmp 2>&1 -$ if .not. $status then call exit_code 2 _'test'.tmp +$ if .not. $status then call exit_code '$status' _'test'.tmp $ cmp 'test'.ok sys$disk:[]_'test'.tmp $ if $status then rm _'test'.tmp;* $ set On @@ -717,7 +717,7 @@ $symtab5: $symtab7: echo "''test'" $ set noOn $ gawk -f 'test'.awk <'test'.in >_'test'.tmp 2>&1 -$ if .not. $status then call exit_code 2 _'test'.tmp +$ if .not. $status then call exit_code '$status' _'test'.tmp $ cmp 'test'.ok sys$disk:[]_'test'.tmp $ if $status then rm _'test'.tmp;* $ set On @@ -897,7 +897,7 @@ $noparms: echo "noparms" $ set noOn $ AWKPATH_srcdir $ gawk -f noparms.awk >_noparms.tmp 2>&1 -$ if .not.$status then call exit_code 1 _noparms.tmp +$ if .not. $status then call exit_code '$status' _noparms.tmp $ set On $ cmp noparms.ok sys$disk:[]_noparms.tmp $ if $status then rm _noparms.tmp; @@ -968,8 +968,9 @@ $subslash: $ echo "''test'" $ set noOn $ gawk -f 'test'.awk >_'test'.tmp 2>&1 -$ if .not.$status then call exit_code 2 _'test'.tmp +$ if .not. $status then call exit_code '$status' _'test'.tmp $ set On +$ diff 'test'.ok sys$disk:[]_'test'.tmp/out='test'.diff $ cmp 'test'.ok sys$disk:[]_'test'.tmp $ if $status then rm _'test'.tmp; $ return @@ -1077,7 +1078,7 @@ $lintwarn: echo "lintwarn" $ set noOn $ AWKPATH_srcdir $ gawk --lint -f lintwarn.awk >_lintwarn.tmp 2>&1 -$ if .not.$status then call exit_code 1 _lintwarn.tmp +$ if .not. $status then call exit_code '$status' _lintwarn.tmp $ set On $ cmp lintwarn.ok sys$disk:[]_lintwarn.tmp $ if $status then rm _lintwarn.tmp; @@ -1120,7 +1121,7 @@ $sclifin: $ echo "''test'" $ set noOn $ gawk -f 'test'.awk 'test'.in >_'test'.tmp 2>&1 -$ if .not.$status then call exit_code 2 _'test'.tmp +$ if .not. $status then call exit_code '$status' _'test'.tmp $ set On $ cmp 'test'.ok sys$disk:[]_'test'.tmp $ if $status then rm _'test'.tmp; @@ -1132,7 +1133,7 @@ $ ! $ echo "''test'" $ set noOn $ gawk -f 'test'.awk <'test'.in >_'test'.tmp 2>&1 -$ if .not.$status then call exit_code 2 _'test'.tmp +$ if .not. $status then call exit_code '$status' _'test'.tmp $ set On $ cmp 'test'.ok sys$disk:[]_'test'.tmp $ if $status then rm _'test'.tmp; @@ -1157,7 +1158,7 @@ $unterm: $ echo "''test'" $ set noOn $ gawk -f 'test'.awk 'test'.in >_'test'.tmp 2>&1 -$ if .not.$status then call exit_code 1 _'test'.tmp +$ if .not. $status then call exit_code '$status' _'test'.tmp $ set On $ cmp 'test'.ok sys$disk:[]_'test'.tmp $ if $status then rm _'test'.tmp; @@ -1217,7 +1218,7 @@ $synerr2: $ echo "''test'" $ set noOn $ gawk -f 'test'.awk >_'test'.tmp 2>&1 -$ if .not.$status then call exit_code 1 _'test'.tmp +$ if .not. $status then call exit_code '$status' _'test'.tmp $ set On $ cmp 'test'.ok sys$disk:[]_'test'.tmp $ if $status then rm _'test'.tmp; @@ -1237,7 +1238,7 @@ $ $space: echo "space" $ set noOn $ gawk -f " " space.awk >_space.tmp 2>&1 -$ if .not.$status then call exit_code 2 _space.tmp +$ if .not. $status then call exit_code '$status' _space.tmp $ set On $! we get a different error from what space.ok expects $ gawk "{gsub(""file specification syntax error"", ""no such file or directory""); print}" - @@ -1320,7 +1321,7 @@ $ $! This test is somewhat suspect for vms due to exit code manipulation $exitval1: echo "exitval1" $ gawk -f exitval1.awk >_exitval1.tmp 2>&1 -$ if $status then call exit_code 0 _exitval1.tmp +$ if $status then call exit_code '$status' _exitval1.tmp $ cmp exitval1.ok sys$disk:[]_exitval1.tmp $ if $status then rm _exitval1.tmp; $ return @@ -1424,7 +1425,7 @@ $! nofile.ok expects no/such/file, but using that name in the test would $! yield "file specification syntax error" instead of "no such file..." $ set noOn $ gawk "{}" no-such-file >_nofile.tmp 2>&1 -$ if .not.$status then call exit_code 2 _nofile.tmp +$ if .not. $status then call exit_code '$status' _nofile.tmp $ set On $! restore altered file name $ gawk "{gsub(""no-such-file"", ""no/such/file""); print}" _nofile.tmp >_nofile.too @@ -1496,7 +1497,7 @@ $ $mixed1: echo "mixed1" $ set noOn $ gawk -f /dev/null --source "BEGIN {return junk}" >_mixed1.tmp 2>&1 -$ if .not.$status then call exit_code 1 _mixed1.tmp +$ if .not. $status then call exit_code '$status' _mixed1.tmp $ set On $ cmp mixed1.ok sys$disk:[]_mixed1.tmp $ if $status then rm _mixed1.tmp; @@ -1869,10 +1870,12 @@ $ endsubroutine !fixup_LRL $ $! add a fake "EXIT CODE" record to the end of the temporary output file $! to simulate the ``|| echo EXIT CODE $$? >>_$@'' shell script usage +$! Unix code = vms_code & (255 * 2^3) >> 3 $exit_code: subroutine +$ unix_status = (p1 .and. %x7f8) / 8 $ if f$trnlnm("FTMP").nes."" then close/noLog ftmp $ open/Append ftmp 'p2' -$ write ftmp "EXIT CODE: ",p1 +$ write ftmp "EXIT CODE: ",'unix_status' $ close ftmp $ endsubroutine !exit_code $ -- cgit v1.2.3 From d3e8016ffd4de45fb8ea5a76a1aa2048f3facaa9 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sat, 21 Dec 2013 21:13:21 +0200 Subject: Fix commit problem with doc/gawk.info. --- doc/gawk.info | 616 +++++----------------------------------------------------- 1 file changed, 49 insertions(+), 567 deletions(-) diff --git a/doc/gawk.info b/doc/gawk.info index d0444668..2589f0b5 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -32267,7 +32267,6 @@ Index  Tag Table: Node: Top1360 -<<<<<<< HEAD Node: Foreword40645 Node: Preface44990 Ref: Preface-Footnote-148043 @@ -32736,571 +32735,54 @@ Node: Distribution contents1028112 Node: Unix Installation1033632 Node: Quick Installation1034249 Node: Additional Configuration Options1036693 -Node: Configuration Philosophy1038170 -Node: Non-Unix Installation1040524 -Node: PC Installation1040982 -Node: PC Binary Installation1042281 -Node: PC Compiling1044129 -Node: PC Testing1047073 -Node: PC Using1048249 -Node: Cygwin1052434 -Node: MSYS1053434 -Node: VMS Installation1053948 -Node: VMS Compilation1054712 -Ref: VMS Compilation-Footnote-11056327 -Node: VMS Dynamic Extensions1056385 -Node: VMS Installation Details1057406 -Node: VMS Running1059240 -Node: VMS GNV1060842 -Node: VMS Old Gawk1061547 -Node: Bugs1062017 -Node: Other Versions1065873 -Node: Notes1071957 -Node: Compatibility Mode1072757 -Node: Additions1073540 -Node: Accessing The Source1074467 -Node: Adding Code1075907 -Node: New Ports1081952 -Node: Derived Files1086087 -Ref: Derived Files-Footnote-11091408 -Ref: Derived Files-Footnote-21091442 -Ref: Derived Files-Footnote-31092042 -Node: Future Extensions1092140 -Node: Implementation Limitations1092717 -Node: Extension Design1093969 -Node: Old Extension Problems1095123 -Ref: Old Extension Problems-Footnote-11096631 -Node: Extension New Mechanism Goals1096688 -Ref: Extension New Mechanism Goals-Footnote-11100053 -Node: Extension Other Design Decisions1100239 -Node: Extension Future Growth1102345 -Node: Old Extension Mechanism1103181 -Node: Basic Concepts1104921 -Node: Basic High Level1105602 -Ref: figure-general-flow1105873 -Ref: figure-process-flow1106472 -Ref: Basic High Level-Footnote-11109701 -Node: Basic Data Typing1109886 -Node: Glossary1113241 -Node: Copying1138703 -Node: GNU Free Documentation License1176260 -Node: Index1201397 -======= -Node: Foreword40460 -Node: Preface44805 -Ref: Preface-Footnote-147858 -Ref: Preface-Footnote-247954 -Node: History48186 -Node: Names50560 -Ref: Names-Footnote-152037 -Node: This Manual52109 -Ref: This Manual-Footnote-157883 -Node: Conventions57983 -Node: Manual History60139 -Ref: Manual History-Footnote-163587 -Ref: Manual History-Footnote-263628 -Node: How To Contribute63702 -Node: Acknowledgments64846 -Node: Getting Started69055 -Node: Running gawk71434 -Node: One-shot72620 -Node: Read Terminal73845 -Ref: Read Terminal-Footnote-175495 -Ref: Read Terminal-Footnote-275771 -Node: Long75942 -Node: Executable Scripts77318 -Ref: Executable Scripts-Footnote-179151 -Ref: Executable Scripts-Footnote-279253 -Node: Comments79800 -Node: Quoting82267 -Node: DOS Quoting86890 -Node: Sample Data Files87565 -Node: Very Simple90609 -Node: Two Rules95208 -Node: More Complex97355 -Ref: More Complex-Footnote-1100285 -Node: Statements/Lines100370 -Ref: Statements/Lines-Footnote-1104832 -Node: Other Features105097 -Node: When106025 -Node: Invoking Gawk108172 -Node: Command Line109633 -Node: Options110416 -Ref: Options-Footnote-1125808 -Node: Other Arguments125833 -Node: Naming Standard Input128491 -Node: Environment Variables129585 -Node: AWKPATH Variable130143 -Ref: AWKPATH Variable-Footnote-1132901 -Node: AWKLIBPATH Variable133161 -Node: Other Environment Variables133879 -Node: Exit Status136842 -Node: Include Files137517 -Node: Loading Shared Libraries141086 -Node: Obsolete142450 -Node: Undocumented143147 -Node: Regexp143389 -Node: Regexp Usage144778 -Node: Escape Sequences146804 -Node: Regexp Operators152473 -Ref: Regexp Operators-Footnote-1159853 -Ref: Regexp Operators-Footnote-2160000 -Node: Bracket Expressions160098 -Ref: table-char-classes161988 -Node: GNU Regexp Operators164511 -Node: Case-sensitivity168234 -Ref: Case-sensitivity-Footnote-1171202 -Ref: Case-sensitivity-Footnote-2171437 -Node: Leftmost Longest171545 -Node: Computed Regexps172746 -Node: Reading Files176083 -Node: Records178085 -Ref: Records-Footnote-1186974 -Node: Fields187011 -Ref: Fields-Footnote-1190044 -Node: Nonconstant Fields190130 -Node: Changing Fields192332 -Node: Field Separators198291 -Node: Default Field Splitting200920 -Node: Regexp Field Splitting202037 -Node: Single Character Fields205379 -Node: Command Line Field Separator206438 -Node: Field Splitting Summary209879 -Ref: Field Splitting Summary-Footnote-1212990 -Node: Constant Size213091 -Node: Splitting By Content217675 -Ref: Splitting By Content-Footnote-1221401 -Node: Multiple Line221441 -Ref: Multiple Line-Footnote-1227288 -Node: Getline227467 -Node: Plain Getline229683 -Node: Getline/Variable231778 -Node: Getline/File232925 -Node: Getline/Variable/File234266 -Ref: Getline/Variable/File-Footnote-1235865 -Node: Getline/Pipe235952 -Node: Getline/Variable/Pipe238651 -Node: Getline/Coprocess239758 -Node: Getline/Variable/Coprocess241010 -Node: Getline Notes241747 -Node: Getline Summary244534 -Ref: table-getline-variants244942 -Node: Read Timeout245854 -Ref: Read Timeout-Footnote-1249595 -Node: Command line directories249652 -Node: Printing250282 -Node: Print251913 -Node: Print Examples253250 -Node: Output Separators256034 -Node: OFMT257794 -Node: Printf259152 -Node: Basic Printf260058 -Node: Control Letters261597 -Node: Format Modifiers265409 -Node: Printf Examples271418 -Node: Redirection274133 -Node: Special Files281098 -Node: Special FD281631 -Ref: Special FD-Footnote-1285256 -Node: Special Network285330 -Node: Special Caveats286180 -Node: Close Files And Pipes286976 -Ref: Close Files And Pipes-Footnote-1293959 -Ref: Close Files And Pipes-Footnote-2294107 -Node: Expressions294257 -Node: Values295389 -Node: Constants296065 -Node: Scalar Constants296745 -Ref: Scalar Constants-Footnote-1297604 -Node: Nondecimal-numbers297786 -Node: Regexp Constants300786 -Node: Using Constant Regexps301261 -Node: Variables304316 -Node: Using Variables304971 -Node: Assignment Options306695 -Node: Conversion308567 -Ref: table-locale-affects314068 -Ref: Conversion-Footnote-1314692 -Node: All Operators314801 -Node: Arithmetic Ops315431 -Node: Concatenation317936 -Ref: Concatenation-Footnote-1320728 -Node: Assignment Ops320848 -Ref: table-assign-ops325836 -Node: Increment Ops327167 -Node: Truth Values and Conditions330601 -Node: Truth Values331684 -Node: Typing and Comparison332733 -Node: Variable Typing333526 -Ref: Variable Typing-Footnote-1337423 -Node: Comparison Operators337545 -Ref: table-relational-ops337955 -Node: POSIX String Comparison341504 -Ref: POSIX String Comparison-Footnote-1342460 -Node: Boolean Ops342598 -Ref: Boolean Ops-Footnote-1346676 -Node: Conditional Exp346767 -Node: Function Calls348499 -Node: Precedence352093 -Node: Locales355762 -Node: Patterns and Actions356851 -Node: Pattern Overview357905 -Node: Regexp Patterns359574 -Node: Expression Patterns360117 -Node: Ranges363802 -Node: BEGIN/END366768 -Node: Using BEGIN/END367530 -Ref: Using BEGIN/END-Footnote-1370261 -Node: I/O And BEGIN/END370367 -Node: BEGINFILE/ENDFILE372649 -Node: Empty375563 -Node: Using Shell Variables375879 -Node: Action Overview378164 -Node: Statements380521 -Node: If Statement382375 -Node: While Statement383874 -Node: Do Statement385918 -Node: For Statement387074 -Node: Switch Statement390226 -Node: Break Statement392323 -Node: Continue Statement394313 -Node: Next Statement396106 -Node: Nextfile Statement398496 -Node: Exit Statement401139 -Node: Built-in Variables403555 -Node: User-modified404650 -Ref: User-modified-Footnote-1413008 -Node: Auto-set413070 -Ref: Auto-set-Footnote-1426148 -Ref: Auto-set-Footnote-2426353 -Node: ARGC and ARGV426409 -Node: Arrays430260 -Node: Array Basics431765 -Node: Array Intro432591 -Node: Reference to Elements436908 -Node: Assigning Elements439178 -Node: Array Example439669 -Node: Scanning an Array441401 -Node: Controlling Scanning443715 -Ref: Controlling Scanning-Footnote-1448802 -Node: Delete449118 -Ref: Delete-Footnote-1451883 -Node: Numeric Array Subscripts451940 -Node: Uninitialized Subscripts454123 -Node: Multidimensional455750 -Node: Multiscanning458842 -Node: Arrays of Arrays460431 -Node: Functions465071 -Node: Built-in465890 -Node: Calling Built-in466968 -Node: Numeric Functions468956 -Ref: Numeric Functions-Footnote-1472788 -Ref: Numeric Functions-Footnote-2473145 -Ref: Numeric Functions-Footnote-3473193 -Node: String Functions473462 -Ref: String Functions-Footnote-1496382 -Ref: String Functions-Footnote-2496511 -Ref: String Functions-Footnote-3496759 -Node: Gory Details496846 -Ref: table-sub-escapes498525 -Ref: table-sub-posix-92499879 -Ref: table-sub-proposed501230 -Ref: table-posix-sub502584 -Ref: table-gensub-escapes504129 -Ref: Gory Details-Footnote-1505305 -Ref: Gory Details-Footnote-2505356 -Node: I/O Functions505507 -Ref: I/O Functions-Footnote-1512492 -Node: Time Functions512639 -Ref: Time Functions-Footnote-1523572 -Ref: Time Functions-Footnote-2523640 -Ref: Time Functions-Footnote-3523798 -Ref: Time Functions-Footnote-4523909 -Ref: Time Functions-Footnote-5524021 -Ref: Time Functions-Footnote-6524248 -Node: Bitwise Functions524514 -Ref: table-bitwise-ops525076 -Ref: Bitwise Functions-Footnote-1529297 -Node: Type Functions529481 -Node: I18N Functions530632 -Node: User-defined532259 -Node: Definition Syntax533063 -Ref: Definition Syntax-Footnote-1537973 -Node: Function Example538042 -Node: Function Caveats540636 -Node: Calling A Function541057 -Node: Variable Scope542172 -Node: Pass By Value/Reference545135 -Node: Return Statement548643 -Node: Dynamic Typing551624 -Node: Indirect Calls552555 -Node: Library Functions562240 -Ref: Library Functions-Footnote-1565753 -Ref: Library Functions-Footnote-2565896 -Node: Library Names566067 -Ref: Library Names-Footnote-1569538 -Ref: Library Names-Footnote-2569758 -Node: General Functions569844 -Node: Strtonum Function570872 -Node: Assert Function573802 -Node: Round Function577128 -Node: Cliff Random Function578671 -Node: Ordinal Functions579687 -Ref: Ordinal Functions-Footnote-1582757 -Ref: Ordinal Functions-Footnote-2583009 -Node: Join Function583218 -Ref: Join Function-Footnote-1584989 -Node: Getlocaltime Function585189 -Node: Readfile Function588930 -Node: Data File Management590769 -Node: Filetrans Function591401 -Node: Rewind Function595470 -Node: File Checking596857 -Node: Empty Files597951 -Node: Ignoring Assigns600181 -Node: Getopt Function601734 -Ref: Getopt Function-Footnote-1613037 -Node: Passwd Functions613240 -Ref: Passwd Functions-Footnote-1622215 -Node: Group Functions622303 -Node: Walking Arrays630387 -Node: Sample Programs632524 -Node: Running Examples633198 -Node: Clones633926 -Node: Cut Program635150 -Node: Egrep Program644995 -Ref: Egrep Program-Footnote-1652768 -Node: Id Program652878 -Node: Split Program656494 -Ref: Split Program-Footnote-1660013 -Node: Tee Program660141 -Node: Uniq Program662944 -Node: Wc Program670373 -Ref: Wc Program-Footnote-1674639 -Ref: Wc Program-Footnote-2674839 -Node: Miscellaneous Programs674931 -Node: Dupword Program676119 -Node: Alarm Program678150 -Node: Translate Program682903 -Ref: Translate Program-Footnote-1687290 -Ref: Translate Program-Footnote-2687538 -Node: Labels Program687672 -Ref: Labels Program-Footnote-1691043 -Node: Word Sorting691127 -Node: History Sorting695011 -Node: Extract Program696850 -Ref: Extract Program-Footnote-1704353 -Node: Simple Sed704481 -Node: Igawk Program707543 -Ref: Igawk Program-Footnote-1722700 -Ref: Igawk Program-Footnote-2722901 -Node: Anagram Program723039 -Node: Signature Program726107 -Node: Advanced Features727207 -Node: Nondecimal Data729093 -Node: Array Sorting730676 -Node: Controlling Array Traversal731373 -Node: Array Sorting Functions739657 -Ref: Array Sorting Functions-Footnote-1743526 -Node: Two-way I/O743720 -Ref: Two-way I/O-Footnote-1749152 -Node: TCP/IP Networking749222 -Node: Profiling752066 -Node: Internationalization759563 -Node: I18N and L10N760988 -Node: Explaining gettext761674 -Ref: Explaining gettext-Footnote-1766742 -Ref: Explaining gettext-Footnote-2766926 -Node: Programmer i18n767091 -Node: Translator i18n771293 -Node: String Extraction772086 -Ref: String Extraction-Footnote-1773047 -Node: Printf Ordering773133 -Ref: Printf Ordering-Footnote-1775917 -Node: I18N Portability775981 -Ref: I18N Portability-Footnote-1778430 -Node: I18N Example778493 -Ref: I18N Example-Footnote-1781131 -Node: Gawk I18N781203 -Node: Debugger781824 -Node: Debugging782795 -Node: Debugging Concepts783228 -Node: Debugging Terms785084 -Node: Awk Debugging787681 -Node: Sample Debugging Session788573 -Node: Debugger Invocation789093 -Node: Finding The Bug790425 -Node: List of Debugger Commands796913 -Node: Breakpoint Control798247 -Node: Debugger Execution Control801911 -Node: Viewing And Changing Data805271 -Node: Execution Stack808627 -Node: Debugger Info810094 -Node: Miscellaneous Debugger Commands814076 -Node: Readline Support819252 -Node: Limitations820083 -Node: Arbitrary Precision Arithmetic822335 -Ref: Arbitrary Precision Arithmetic-Footnote-1823984 -Node: General Arithmetic824132 -Node: Floating Point Issues825852 -Node: String Conversion Precision826733 -Ref: String Conversion Precision-Footnote-1828438 -Node: Unexpected Results828547 -Node: POSIX Floating Point Problems830700 -Ref: POSIX Floating Point Problems-Footnote-1834525 -Node: Integer Programming834563 -Node: Floating-point Programming836302 -Ref: Floating-point Programming-Footnote-1842633 -Ref: Floating-point Programming-Footnote-2842903 -Node: Floating-point Representation843167 -Node: Floating-point Context844332 -Ref: table-ieee-formats845171 -Node: Rounding Mode846555 -Ref: table-rounding-modes847034 -Ref: Rounding Mode-Footnote-1850049 -Node: Gawk and MPFR850228 -Node: Arbitrary Precision Floats851483 -Ref: Arbitrary Precision Floats-Footnote-1853926 -Node: Setting Precision854242 -Ref: table-predefined-precision-strings854928 -Node: Setting Rounding Mode857073 -Ref: table-gawk-rounding-modes857477 -Node: Floating-point Constants858664 -Node: Changing Precision860093 -Ref: Changing Precision-Footnote-1861490 -Node: Exact Arithmetic861664 -Node: Arbitrary Precision Integers864802 -Ref: Arbitrary Precision Integers-Footnote-1867820 -Node: Dynamic Extensions867967 -Node: Extension Intro869425 -Node: Plugin License870690 -Node: Extension Mechanism Outline871375 -Ref: load-extension871792 -Ref: load-new-function873270 -Ref: call-new-function874265 -Node: Extension API Description876280 -Node: Extension API Functions Introduction877493 -Node: General Data Types882359 -Ref: General Data Types-Footnote-1887958 -Node: Requesting Values888257 -Ref: table-value-types-returned888988 -Node: Constructor Functions889942 -Node: Registration Functions892962 -Node: Extension Functions893647 -Node: Exit Callback Functions895872 -Node: Extension Version String897121 -Node: Input Parsers897771 -Node: Output Wrappers907528 -Node: Two-way processors912038 -Node: Printing Messages914246 -Ref: Printing Messages-Footnote-1915323 -Node: Updating `ERRNO'915475 -Node: Accessing Parameters916214 -Node: Symbol Table Access917444 -Node: Symbol table by name917956 -Node: Symbol table by cookie919703 -Ref: Symbol table by cookie-Footnote-1923833 -Node: Cached values923896 -Ref: Cached values-Footnote-1927345 -Node: Array Manipulation927436 -Ref: Array Manipulation-Footnote-1928534 -Node: Array Data Types928573 -Ref: Array Data Types-Footnote-1931276 -Node: Array Functions931368 -Node: Flattening Arrays935134 -Node: Creating Arrays941986 -Node: Extension API Variables946711 -Node: Extension Versioning947347 -Node: Extension API Informational Variables949248 -Node: Extension API Boilerplate950334 -Node: Finding Extensions954138 -Node: Extension Example954698 -Node: Internal File Description955428 -Node: Internal File Ops959519 -Ref: Internal File Ops-Footnote-1971027 -Node: Using Internal File Ops971167 -Ref: Using Internal File Ops-Footnote-1973520 -Node: Extension Samples973786 -Node: Extension Sample File Functions975310 -Node: Extension Sample Fnmatch983795 -Node: Extension Sample Fork985521 -Node: Extension Sample Inplace986739 -Node: Extension Sample Ord988517 -Node: Extension Sample Readdir989353 -Node: Extension Sample Revout990885 -Node: Extension Sample Rev2way991478 -Node: Extension Sample Read write array992168 -Node: Extension Sample Readfile994051 -Node: Extension Sample API Tests994869 -Node: Extension Sample Time995394 -Node: gawkextlib996758 -Node: Language History999518 -Node: V7/SVR3.11001040 -Node: SVR41003360 -Node: POSIX1004802 -Node: BTL1006188 -Node: POSIX/GNU1006922 -Node: Common Extensions1012457 -Node: Ranges and Locales1013763 -Ref: Ranges and Locales-Footnote-11018381 -Ref: Ranges and Locales-Footnote-21018408 -Ref: Ranges and Locales-Footnote-31018668 -Node: Contributors1018889 -Node: Installation1023964 -Node: Gawk Distribution1024858 -Node: Getting1025342 -Node: Extracting1026168 -Node: Distribution contents1027860 -Node: Unix Installation1033380 -Node: Quick Installation1033997 -Node: Additional Configuration Options1036441 -Node: Configuration Philosophy1038177 -Node: Non-Unix Installation1040531 -Node: PC Installation1040989 -Node: PC Binary Installation1042288 -Node: PC Compiling1044136 -Node: PC Testing1047080 -Node: PC Using1048256 -Node: Cygwin1052441 -Node: MSYS1053441 -Node: VMS Installation1053955 -Node: VMS Compilation1054558 -Ref: VMS Compilation-Footnote-11055565 -Node: VMS Installation Details1055623 -Node: VMS Running1057258 -Node: VMS Old Gawk1058865 -Node: Bugs1059339 -Node: Other Versions1063195 -Node: Notes1069279 -Node: Compatibility Mode1070079 -Node: Additions1070862 -Node: Accessing The Source1071789 -Node: Adding Code1073229 -Node: New Ports1079274 -Node: Derived Files1083409 -Ref: Derived Files-Footnote-11088730 -Ref: Derived Files-Footnote-21088764 -Ref: Derived Files-Footnote-31089364 -Node: Future Extensions1089462 -Node: Implementation Limitations1090039 -Node: Extension Design1091291 -Node: Old Extension Problems1092445 -Ref: Old Extension Problems-Footnote-11093953 -Node: Extension New Mechanism Goals1094010 -Ref: Extension New Mechanism Goals-Footnote-11097375 -Node: Extension Other Design Decisions1097561 -Node: Extension Future Growth1099667 -Node: Old Extension Mechanism1100503 -Node: Basic Concepts1102243 -Node: Basic High Level1102924 -Ref: figure-general-flow1103195 -Ref: figure-process-flow1103794 -Ref: Basic High Level-Footnote-11107023 -Node: Basic Data Typing1107208 -Node: Glossary1110563 -Node: Copying1136025 -Node: GNU Free Documentation License1173582 -Node: Index1198719 ->>>>>>> gawk-4.1-stable +Node: Configuration Philosophy1038429 +Node: Non-Unix Installation1040783 +Node: PC Installation1041241 +Node: PC Binary Installation1042540 +Node: PC Compiling1044388 +Node: PC Testing1047332 +Node: PC Using1048508 +Node: Cygwin1052693 +Node: MSYS1053693 +Node: VMS Installation1054207 +Node: VMS Compilation1054971 +Ref: VMS Compilation-Footnote-11056586 +Node: VMS Dynamic Extensions1056644 +Node: VMS Installation Details1057665 +Node: VMS Running1059499 +Node: VMS GNV1061101 +Node: VMS Old Gawk1061806 +Node: Bugs1062276 +Node: Other Versions1066132 +Node: Notes1072216 +Node: Compatibility Mode1073016 +Node: Additions1073799 +Node: Accessing The Source1074726 +Node: Adding Code1076166 +Node: New Ports1082211 +Node: Derived Files1086346 +Ref: Derived Files-Footnote-11091667 +Ref: Derived Files-Footnote-21091701 +Ref: Derived Files-Footnote-31092301 +Node: Future Extensions1092399 +Node: Implementation Limitations1092976 +Node: Extension Design1094228 +Node: Old Extension Problems1095382 +Ref: Old Extension Problems-Footnote-11096890 +Node: Extension New Mechanism Goals1096947 +Ref: Extension New Mechanism Goals-Footnote-11100312 +Node: Extension Other Design Decisions1100498 +Node: Extension Future Growth1102604 +Node: Old Extension Mechanism1103440 +Node: Basic Concepts1105180 +Node: Basic High Level1105861 +Ref: figure-general-flow1106132 +Ref: figure-process-flow1106731 +Ref: Basic High Level-Footnote-11109960 +Node: Basic Data Typing1110145 +Node: Glossary1113500 +Node: Copying1138962 +Node: GNU Free Documentation License1176519 +Node: Index1201656  End Tag Table -- cgit v1.2.3 From 9beee977ccb0703656504c070ab85e54537f8f95 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 23 Dec 2013 21:53:37 +0200 Subject: More doc updates, fix initialization on VAX/VMS. --- README_d/ChangeLog | 6 +-- README_d/README.VMS | 11 +++++ doc/ChangeLog | 6 ++- doc/gawk.info | 124 +++++++++++++++++++++++++++++++++------------------- doc/gawk.texi | 46 ++++++++++++++++--- doc/gawktexi.in | 46 ++++++++++++++++--- vms/ChangeLog | 15 +++++-- vms/gawk.hlp | 12 ++++- vms/gawkmisc.vms | 11 ++--- vms/vms_cli.c | 8 ++-- vms/vmstest.com | 7 ++- 11 files changed, 210 insertions(+), 82 deletions(-) diff --git a/README_d/ChangeLog b/README_d/ChangeLog index a9e95b77..ed2a86b0 100644 --- a/README_d/ChangeLog +++ b/README_d/ChangeLog @@ -1,12 +1,12 @@ -2013-12-20 John E. Malmberg +2013-12-23 John E. Malmberg * README.VMS: Document decoding Gawk VMS exit codes. -2013-12-16 John E. Malmberg +2013-12-16 John E. Malmberg * README.VMS: Further updates. -2013-12-05 John E. Malmberg +2013-12-05 John E. Malmberg * README.VMS: updated with current build information. diff --git a/README_d/README.VMS b/README_d/README.VMS index 3689ad83..d689aa31 100644 --- a/README_d/README.VMS +++ b/README_d/README.VMS @@ -157,3 +157,14 @@ Older versions of Gawk incorrectly mostly passed through the Gawk status values instead of encoding them. DCL scripts that were checking the severity values will probably not need changing. DCL scripts that were checking the exact exit status will need an update. + +VAX/VMS floating point uses unbiased rounding. This is generaly incompatible +with the expected behavior. The ofmta test in the test directory will +fail on VAX. + +Gawk needs the SYS$TIMEZONE_RULE or TZ logical name to be defined or it +will output times in GMT. + +The vmstest.com script needs SYS$TIMEZONE_NAME to be defined to match +the SYS$TIMEZONE_RULE. Older versions of VMS do not define these logical +names. diff --git a/doc/ChangeLog b/doc/ChangeLog index 82150f34..8c58e5d4 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,9 +1,13 @@ +2013-12-23 John E. Malmberg + + * gawktexi.in: Document the VMS exit status encoding. + 2013-12-21 Arnold D. Robbins * gawktexi.in (Additional Configuration Options): Document the --disable-extensions option. -2013-12-16 John E. Malmberg +2013-12-16 John E. Malmberg * gawktexi.in: Updates to VMS sections. diff --git a/doc/gawk.info b/doc/gawk.info index 2589f0b5..4b1352f7 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -26255,7 +26255,7 @@ B.3.2.1 Compiling `gawk' on VMS To compile `gawk' under VMS, there is a `DCL' command procedure that issues all the necessary `CC' and `LINK' commands. There is also a -`Makefile' for use with the `MMS' or `MMK' utility. From the source +`Makefile' for use with the `MMS' and `MMK' utilities. From the source directory, use either: $ @[.vms]vmsbuild.com @@ -26268,8 +26268,8 @@ or: $ MMK/DESCRIPTION=[.vms]descrip.mms gawk - `MMK' is an open source freeware near clone of `MMS' and can better -handle `ODS-5' volumes with upper- and lower-case filenames. `MMK' is + `MMK' is an open source, free, near-clone of `MMS' and can better +handle `ODS-5' volumes with upper- and lowercase filenames. `MMK' is available from `https://github.com/endlesssoftware/mmk'. With `ODS-5' volumes and extended parsing enabled, the case of the @@ -26301,10 +26301,11 @@ B.3.2.2 Compiling `gawk' Dynamic Extensions on VMS .................................................. Dynamic extensions need to be compiled with the same compiler options -for floating point, pointer size, and symbol name handling as `gawk'. -Alpha and Itanium should use IEEE floating point. The pointer size is -32 bits, and the symbol name handling is to be exact case with CRC -shortening for symbols longer than 32 bits. +for floating point, pointer size, and symbol name handling as were used +to compile `gawk' itself. Alpha and Itanium should use IEEE floating +point. The pointer size is 32 bits, and the symbol name handling +should be exact case with CRC shortening for symbols longer than 32 +bits. For Alpha and Itanium: @@ -26404,6 +26405,35 @@ If any other dash-type options (or multiple parameters such as data files to process) are present, there is no ambiguity and `--' can be omitted. + The `exit' value is a Unix-style value and is encoded to a VMS exit +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 will set 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: + + unix_status = (vms_status .and. &x7f8) / 8 + +A C program that uses `exec()' to call `gawk' will get the original +Unix-style exit value. + + Older versions of `gawk' treated a Unix exit code 0 as 1, a failure +as 2, a fatal error as 4, and passed all the other numbers through. +This violated the VMS exit status coding requirements. + + VAX/VMS floating point uses unbiased rounding. *Note Round +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. + The default search path, when looking for `awk' program files specified by the `-f' option, is `"SYS$DISK:[],AWK_LIBRARY:"'. The logical name `AWKPATH' can be used to override this default. The format @@ -26420,7 +26450,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 -reorganized to be individual PCSI packages for each component. See +reorganized to supply individual PCSI packages for each component. See `https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/'. The normal build procedure for `gawk' produces a program that is @@ -30577,6 +30607,7 @@ Index * exclamation point (!), !~ operator: Regexp Usage. (line 19) * exit statement: Exit Statement. (line 6) * exit status, of gawk: Exit Status. (line 6) +* exit status, of VMS: VMS Running. (line 29) * exp() function: Numeric Functions. (line 18) * expand utility: Very Simple. (line 69) * Expat XML parser library: gawkextlib. (line 33) @@ -30726,6 +30757,7 @@ Index (line 6) * floating-point, numbers <1>: Unexpected Results. (line 6) * floating-point, numbers: General Arithmetic. (line 6) +* floating-point, VAX/VMS: VMS Running. (line 51) * fnmatch extension function: Extension Sample Fnmatch. (line 6) * FNR variable <1>: Auto-set. (line 103) @@ -31805,13 +31837,13 @@ Index * Schorr, Andrew: Acknowledgments. (line 60) * Schreiber, Bert: Acknowledgments. (line 38) * Schreiber, Rita: Acknowledgments. (line 38) -* search paths <1>: VMS Running. (line 29) +* search paths <1>: VMS Running. (line 58) * search paths <2>: PC Using. (line 11) * search paths <3>: Igawk Program. (line 368) * search paths <4>: AWKLIBPATH Variable. (line 6) * search paths: AWKPATH Variable. (line 6) * search paths, for shared libraries: AWKLIBPATH Variable. (line 6) -* search paths, for source files <1>: VMS Running. (line 29) +* search paths, for source files <1>: VMS Running. (line 58) * search paths, for source files <2>: PC Using. (line 11) * search paths, for source files <3>: Igawk Program. (line 368) * search paths, for source files: AWKPATH Variable. (line 6) @@ -32748,41 +32780,41 @@ Node: VMS Installation1054207 Node: VMS Compilation1054971 Ref: VMS Compilation-Footnote-11056586 Node: VMS Dynamic Extensions1056644 -Node: VMS Installation Details1057665 -Node: VMS Running1059499 -Node: VMS GNV1061101 -Node: VMS Old Gawk1061806 -Node: Bugs1062276 -Node: Other Versions1066132 -Node: Notes1072216 -Node: Compatibility Mode1073016 -Node: Additions1073799 -Node: Accessing The Source1074726 -Node: Adding Code1076166 -Node: New Ports1082211 -Node: Derived Files1086346 -Ref: Derived Files-Footnote-11091667 -Ref: Derived Files-Footnote-21091701 -Ref: Derived Files-Footnote-31092301 -Node: Future Extensions1092399 -Node: Implementation Limitations1092976 -Node: Extension Design1094228 -Node: Old Extension Problems1095382 -Ref: Old Extension Problems-Footnote-11096890 -Node: Extension New Mechanism Goals1096947 -Ref: Extension New Mechanism Goals-Footnote-11100312 -Node: Extension Other Design Decisions1100498 -Node: Extension Future Growth1102604 -Node: Old Extension Mechanism1103440 -Node: Basic Concepts1105180 -Node: Basic High Level1105861 -Ref: figure-general-flow1106132 -Ref: figure-process-flow1106731 -Ref: Basic High Level-Footnote-11109960 -Node: Basic Data Typing1110145 -Node: Glossary1113500 -Node: Copying1138962 -Node: GNU Free Documentation License1176519 -Node: Index1201656 +Node: VMS Installation Details1057695 +Node: VMS Running1059529 +Node: VMS GNV1062363 +Node: VMS Old Gawk1063072 +Node: Bugs1063542 +Node: Other Versions1067398 +Node: Notes1073482 +Node: Compatibility Mode1074282 +Node: Additions1075065 +Node: Accessing The Source1075992 +Node: Adding Code1077432 +Node: New Ports1083477 +Node: Derived Files1087612 +Ref: Derived Files-Footnote-11092933 +Ref: Derived Files-Footnote-21092967 +Ref: Derived Files-Footnote-31093567 +Node: Future Extensions1093665 +Node: Implementation Limitations1094242 +Node: Extension Design1095494 +Node: Old Extension Problems1096648 +Ref: Old Extension Problems-Footnote-11098156 +Node: Extension New Mechanism Goals1098213 +Ref: Extension New Mechanism Goals-Footnote-11101578 +Node: Extension Other Design Decisions1101764 +Node: Extension Future Growth1103870 +Node: Old Extension Mechanism1104706 +Node: Basic Concepts1106446 +Node: Basic High Level1107127 +Ref: figure-general-flow1107398 +Ref: figure-process-flow1107997 +Ref: Basic High Level-Footnote-11111226 +Node: Basic Data Typing1111411 +Node: Glossary1114766 +Node: Copying1140228 +Node: GNU Free Documentation License1177785 +Node: Index1202922  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index b56fbbad..43e518c1 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -34863,7 +34863,7 @@ The older designation ``VMS'' is used throughout to refer to OpenVMS. To compile @command{gawk} under VMS, there is a @code{DCL} command procedure that issues all the necessary @code{CC} and @code{LINK} commands. There is -also a @file{Makefile} for use with the @code{MMS} or @code{MMK} utility. +also a @file{Makefile} for use with the @code{MMS} and @code{MMK} utilities. From the source directory, use either: @example @@ -34884,8 +34884,8 @@ or: $ @kbd{MMK/DESCRIPTION=[.vms]descrip.mms gawk} @end example -@code{MMK} is an open source freeware near clone of @code{MMS} and -can better handle @code{ODS-5} volumes with upper- and lower-case filenames. +@code{MMK} is an open source, free, near-clone of @code{MMS} and +can better handle @code{ODS-5} volumes with upper- and lowercase filenames. @code{MMK} is available from @uref{https://github.com/endlesssoftware/mmk}. With @code{ODS-5} volumes and extended parsing enabled, the case of the target @@ -34911,9 +34911,10 @@ a PCSI kit for compatible with the GNV product. @appendixsubsubsec Compiling @command{gawk} Dynamic Extensions on VMS Dynamic extensions need to be compiled with the same compiler options for -floating point, pointer size, and symbol name handling as @command{gawk}. +floating point, pointer size, and symbol name handling as were used +to compile @command{gawk} itself. Alpha and Itanium should use IEEE floating point. The pointer size is 32 bits, -and the symbol name handling is to be exact case with CRC shortening for +and the symbol name handling should be exact case with CRC shortening for symbols longer than 32 bits. For Alpha and Itanium: @@ -35027,6 +35028,39 @@ flag is required to force Unix-style parsing rather than @code{DCL} parsing. If other dash-type options (or multiple parameters such as data files to process) are present, there is no ambiguity and @option{--} can be omitted. +@cindex exit status, of VMS +The @code{exit} value is a Unix-style value and is encoded to 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 will set 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: + +@example +unix_status = (vms_status .and. &x7f8) / 8 +@end example + +@noindent +A C program that uses @code{exec()} to call @command{gawk} will get the original +Unix-style exit value. + +Older versions of @command{gawk} treated a Unix exit code 0 as 1, a failure +as 2, a fatal error as 4, and passed all the other numbers through. +This violated the VMS exit status coding requirements. + +@cindex floating-point, VAX/VMS +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. + @c @cindex directory search @c @cindex path, search @cindex search paths @@ -35044,7 +35078,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 -to be individual PCSI packages for each component. +to supply individual PCSI packages for each component. See @uref{https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/}. The normal build procedure for @command{gawk} produces a program that diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 51b90877..fc465648 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -34012,7 +34012,7 @@ The older designation ``VMS'' is used throughout to refer to OpenVMS. To compile @command{gawk} under VMS, there is a @code{DCL} command procedure that issues all the necessary @code{CC} and @code{LINK} commands. There is -also a @file{Makefile} for use with the @code{MMS} or @code{MMK} utility. +also a @file{Makefile} for use with the @code{MMS} and @code{MMK} utilities. From the source directory, use either: @example @@ -34033,8 +34033,8 @@ or: $ @kbd{MMK/DESCRIPTION=[.vms]descrip.mms gawk} @end example -@code{MMK} is an open source freeware near clone of @code{MMS} and -can better handle @code{ODS-5} volumes with upper- and lower-case filenames. +@code{MMK} is an open source, free, near-clone of @code{MMS} and +can better handle @code{ODS-5} volumes with upper- and lowercase filenames. @code{MMK} is available from @uref{https://github.com/endlesssoftware/mmk}. With @code{ODS-5} volumes and extended parsing enabled, the case of the target @@ -34060,9 +34060,10 @@ a PCSI kit for compatible with the GNV product. @appendixsubsubsec Compiling @command{gawk} Dynamic Extensions on VMS Dynamic extensions need to be compiled with the same compiler options for -floating point, pointer size, and symbol name handling as @command{gawk}. +floating point, pointer size, and symbol name handling as were used +to compile @command{gawk} itself. Alpha and Itanium should use IEEE floating point. The pointer size is 32 bits, -and the symbol name handling is to be exact case with CRC shortening for +and the symbol name handling should be exact case with CRC shortening for symbols longer than 32 bits. For Alpha and Itanium: @@ -34176,6 +34177,39 @@ flag is required to force Unix-style parsing rather than @code{DCL} parsing. If other dash-type options (or multiple parameters such as data files to process) are present, there is no ambiguity and @option{--} can be omitted. +@cindex exit status, of VMS +The @code{exit} value is a Unix-style value and is encoded to 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 will set 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: + +@example +unix_status = (vms_status .and. &x7f8) / 8 +@end example + +@noindent +A C program that uses @code{exec()} to call @command{gawk} will get the original +Unix-style exit value. + +Older versions of @command{gawk} treated a Unix exit code 0 as 1, a failure +as 2, a fatal error as 4, and passed all the other numbers through. +This violated the VMS exit status coding requirements. + +@cindex floating-point, VAX/VMS +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. + @c @cindex directory search @c @cindex path, search @cindex search paths @@ -34193,7 +34227,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 -to be individual PCSI packages for each component. +to supply individual PCSI packages for each component. See @uref{https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/}. The normal build procedure for @command{gawk} produces a program that diff --git a/vms/ChangeLog b/vms/ChangeLog index 6cc5afb7..504967fd 100644 --- a/vms/ChangeLog +++ b/vms/ChangeLog @@ -1,4 +1,11 @@ -2013-12-20 John E. Malmberg +2013-12-23 John E. Malmberg + + * gawkmisc.vms: Fix program name calculation on VAX. + * vms_cli.c: Fix case of public symbol. + * vms.hlp: Fix typo, add cautions on rounding and timezones. + * vmstest.com: Dcl symbol tz causing conflict with test. + +2013-12-20 John E. Malmberg * descrip.mms: Set CC exact symbol names, cleanup repository. * generate_config_vms_h_gawk.com: Use correct VMS exit codes. @@ -8,14 +15,14 @@ vms_misc.c, vms_popen.c: Correct case of function names. * vms.hlp: Updated with new information about exit codes. -2013-12-10 John E. Malmberg +2013-12-10 John E. Malmberg * gawkmisc.vms: Add lots of includes. (sys_trnlnm): New function. (gawk_name): Improved. (os_arg_fixup): Fix up time zone. -2013-12-08 John E. Malmberg +2013-12-08 John E. Malmberg * descrip.mms: Add IEEE float for non-vax. Add vms_crtl_init.c. @@ -30,7 +37,7 @@ * vms_misc.c (vms_open): VMS CRTL for 8.3 Alpha is setting errno to ENOENT instead of EISDIR for ".". -2013-12-05 John E. Malmberg +2013-12-05 John E. Malmberg * New config_h.com to generate config.h * New gawk_ident.com generates ident line for link option file. diff --git a/vms/gawk.hlp b/vms/gawk.hlp index 177ef91c..a14ad72b 100644 --- a/vms/gawk.hlp +++ b/vms/gawk.hlp @@ -1183,6 +1183,10 @@ the default is systime(); if u is present and non-zero then t is treated as a UTC value, otherwise it is considered to be local time + +5 time_logical_names + Gawk needs the SYS$TIMEZONE_RULE or TZ logical names defined or it will + output the time in the GMT timezone. 5 time_formats Formatting directives similar to the 'printf' & 'sprintf' functions (each is introduced in the format string by preceding it with a @@ -1559,7 +1563,7 @@ operating system. GAWK expects a UN*X-style value instead of a VMS status value, so 0 indicates success. A failure is indicated by 1 and VMS will set the ERROR status. A fatal error is indicated - by 2 and VMS seet the FATAL status. All other values will will have + by 2 and VMS will set the FATAL status. All other values will 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 @@ -1573,7 +1577,11 @@ Older versions of Gawk treated Unix exit code 0 as 1, A failure as 2, and a fatal error as 4, and passed all the other numbers through. - This violate the VMS exit status coding requirements. + This violated the VMS exit status coding requirements. + +4 rounding + VAX/VMS floating point uses unbiased rounding. This is different than + what portable gawk programs expect. 3 changes Changes between version 4.0.0 and earlier versions diff --git a/vms/gawkmisc.vms b/vms/gawkmisc.vms index 046c5167..749c6036 100644 --- a/vms/gawkmisc.vms +++ b/vms/gawkmisc.vms @@ -82,7 +82,7 @@ char quote = '\''; char *defpath = DEFPATH; char *deflibpath = DEFLIBPATH; char envsep = ','; -#define VMS_NAME_LEN 1 +#define VMS_NAME_LEN 255 static char vms_name[VMS_NAME_LEN+1]; /* Take all the fun out of simply looking up a logical name */ @@ -149,6 +149,7 @@ const char *filespec; * be fixed. */ + result = 0; if (filespec[0] == '/') { char * nextslash; int length; @@ -333,6 +334,7 @@ const char *filespec; strncpy(vms_name, name, name_len); vms_name[name_len] = 0; + result = 1; /* We only keep the extension if it is not ".exe" */ keep_ext = 0; @@ -427,13 +429,6 @@ const char *filespec; } } } - - } else { - /* There is no way that the code should ever get here - * As we already verified that the '/' was present - */ - fprintf(stderr, - "Sanity failure somewhere we lost a '/'\n"); } } else { /* No changes needed */ diff --git a/vms/vms_cli.c b/vms/vms_cli.c index 0cfe96fc..aa093441 100644 --- a/vms/vms_cli.c +++ b/vms/vms_cli.c @@ -34,7 +34,7 @@ extern U_Long CLI$GET_VALUE(const Dsc *, Dsc *, short *); extern U_Long CLI$DCL_PARSE(const Dsc *, const void *, ...); extern U_Long SYS$CLI(void *, ...); extern U_Long SYS$FILESCAN(const Dsc *, void *, long *); -extern void *lib$establish(U_Long (*handler)(void *, void *)); +extern void *LIB$ESTABLISH(U_Long (*handler)(void *, void *)); extern U_Long LIB$SIG_TO_RET(void *, void *); /* condition handler */ /* Cli_Present() - call CLI$PRESENT to determine whether a parameter or */ @@ -43,7 +43,7 @@ U_Long Cli_Present( const char *item ) { Dsc item_dsc; - (void)lib$establish(LIB$SIG_TO_RET); + (void)LIB$ESTABLISH(LIB$SIG_TO_RET); item_dsc.len = strlen(item_dsc.adr = (char *)item); return CLI$PRESENT(&item_dsc); @@ -57,7 +57,7 @@ Cli_Get_Value( const char *item, char *result, int size ) Dsc item_dsc, res_dsc; U_Long sts; short len = 0; - (void)lib$establish(LIB$SIG_TO_RET); + (void)LIB$ESTABLISH(LIB$SIG_TO_RET); item_dsc.len = strlen(item_dsc.adr = (char *)item); res_dsc.len = size, res_dsc.adr = result; @@ -79,7 +79,7 @@ Cli_Parse_Command( const void *cmd_tables, const char *cmd_verb ) U_Long sts; int ltmp; char longbuf[8200]; - (void)lib$establish(LIB$SIG_TO_RET); + (void)LIB$ESTABLISH(LIB$SIG_TO_RET); memset(&cmd, 0, sizeof cmd); cmd.rqtype = CLI$K_GETCMD; /* command line minus the verb */ diff --git a/vms/vmstest.com b/vms/vmstest.com index 1b5b7ed9..75a6b460 100644 --- a/vms/vmstest.com +++ b/vms/vmstest.com @@ -594,6 +594,8 @@ $ $strftime: echo "strftime" $ ! this test could fail on slow machines or on a second boundary, $ ! so if it does, double check the actual results +$ ! This test needs SYS$TIMEZONE_NAME and SYS$TIMEZONE_RULE +$ ! to be properly defined. $!! date | gawk -v "OUTPUT"=_strftime.tmp -f strftime.awk $ now = f$time() $ wkd = f$extract(0,3,f$cvtime(now,,"WEEKDAY")) @@ -601,11 +603,12 @@ $ mon = f$cvtime(now,"ABSOLUTE","MONTH") $ mon = f$extract(0,1,mon) + f$edit(f$extract(1,2,mon),"LOWERCASE") $ day = f$cvtime(now,,"DAY") $ tim = f$extract(0,8,f$cvtime(now,,"TIME")) -$ tz = f$trnlnm("SYS$TIMEZONE_NAME") +$! Can not use tz as it shows up in the C environment. +$ timezone = f$trnlnm("SYS$TIMEZONE_NAME") $ yr = f$cvtime(now,,"YEAR") $ if f$trnlnm("FTMP").nes."" then close/noLog ftmp $ open/Write ftmp strftime.in -$ write ftmp wkd," ",mon," ",day," ",tim," ",tz," ",yr +$ write ftmp wkd," ",mon," ",day," ",tim," ",timezone," ",yr $ close ftmp $ gawk -v "OUTPUT"=_strftime.tmp -f strftime.awk strftime.in $ set noOn -- cgit v1.2.3 From 1b21d20939d92024077639a2d828eb82fc1fe206 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 24 Dec 2013 21:35:02 +0200 Subject: Update extension/build-aux/config.guess. --- extension/build-aux/ChangeLog | 4 + extension/build-aux/config.guess | 188 +++++++++++++++++++++++---------------- 2 files changed, 115 insertions(+), 77 deletions(-) diff --git a/extension/build-aux/ChangeLog b/extension/build-aux/ChangeLog index bf00e289..8a658870 100644 --- a/extension/build-aux/ChangeLog +++ b/extension/build-aux/ChangeLog @@ -1,3 +1,7 @@ +2013-12-24 Arnold D. Robbins + + * config.guess: Updated. + 2013-12-21 Arnold D. Robbins * ltmain.sh: Updated to libtool 2.4.2.418. diff --git a/extension/build-aux/config.guess b/extension/build-aux/config.guess index aa04f04b..9afd6762 100755 --- a/extension/build-aux/config.guess +++ b/extension/build-aux/config.guess @@ -1,14 +1,12 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -# 2011, 2012 Free Software Foundation, Inc. +# Copyright 1992-2013 Free Software Foundation, Inc. -timestamp='2012-06-17' +timestamp='2013-11-29' # 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 -# the Free Software Foundation; either version 2 of the License, or +# the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but @@ -22,19 +20,17 @@ timestamp='2012-06-17' # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner. Please send patches (context -# diff format) to and include a ChangeLog -# entry. +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). # -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. +# Originally written by Per Bothner. # # 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. + me=`echo "$0" | sed -e 's,.*/,,'` @@ -54,9 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 -Free Software Foundation, Inc. +Copyright 1992-2013 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." @@ -138,6 +132,27 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + ;; +esac + # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in @@ -306,7 +321,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) + arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) @@ -805,6 +820,9 @@ EOF i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; @@ -856,21 +874,21 @@ EOF exit ;; *:GNU:*:*) # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in @@ -883,59 +901,54 @@ EOF EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then - echo ${UNAME_MACHINE}-unknown-linux-gnueabi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else - echo ${UNAME_MACHINE}-unknown-linux-gnueabihf + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-gnu + echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-gnu + echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) - LIBC=gnu - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build @@ -954,54 +967,63 @@ EOF #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; + or1k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; or32:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) - echo sparc-unknown-linux-gnu + echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu + echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu + echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu + echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. @@ -1205,6 +1227,9 @@ EOF BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; @@ -1231,19 +1256,31 @@ EOF exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - i386) - eval $set_cc_for_build - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - UNAME_PROCESSOR="x86_64" - fi - fi ;; - unknown) UNAME_PROCESSOR=powerpc ;; - esac + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) @@ -1334,9 +1371,6 @@ EOF exit ;; esac -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - eval $set_cc_for_build cat >$dummy.c < Date: Tue, 24 Dec 2013 21:42:53 +0200 Subject: Fix getopt.c for Illumos. --- ChangeLog | 6 ++++++ getopt.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index d1bf42d1..dced3f44 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2013-12-24 Arnold D. Robbins + + * getopt.h: Add `defined(__sun)' to list of system that do get to + include stdlib.h. Needed for Illumos. Thanks to + Richard Palo for the report. + 2013-12-21 Mike Frysinger * configure.ac: Add --disable-extensions flag to control diff --git a/getopt.c b/getopt.c index fa258382..a45e30f4 100644 --- a/getopt.c +++ b/getopt.c @@ -57,7 +57,7 @@ /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ -#if defined (__GNU_LIBRARY__) || defined (__CYGWIN__) || defined(__DJGPP__) || defined(__APPLE__) || defined(__MINGW32__) +#if defined (__GNU_LIBRARY__) || defined (__CYGWIN__) || defined(__DJGPP__) || defined(__APPLE__) || defined(__MINGW32__) || defined(__sun) /* Illumos */ /* Don't include stdlib.h for * non-GNU C libraries * non-Cygwin -- cgit v1.2.3 From 5d0899d5357431430c765ae342530c9ba0c79b79 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 25 Dec 2013 20:34:59 +0200 Subject: Minor doc fixes. --- doc/ChangeLog | 4 + doc/gawk.info | 252 ++++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 7 +- doc/gawktexi.in | 7 +- 4 files changed, 144 insertions(+), 126 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 24044c9a..79f89cbf 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2013-12-25 Arnold D. Robbins + + * gawktexi.in: Minor additions / fixes. + 2013-12-21 Arnold D. Robbins * gawktexi.in (Additional Configuration Options): Document diff --git a/doc/gawk.info b/doc/gawk.info index ed3ab7b3..9fa8eae4 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -21834,8 +21834,10 @@ File: gawk.info, Node: General Data Types, Next: Requesting Values, Prev: Ext --------------------------------- I have a true love/hate relationship with unions. -- Arnold - Robbins That's the thing about unions: the compiler will arrange - things so they can accommodate both love and hate. -- Chet Ramey + Robbins + + That's the thing about unions: the compiler will arrange things so + they can accommodate both love and hate. -- Chet Ramey The extension API defines a number of simple types and structures for general purpose use. Additional, more specialized, data structures @@ -24790,11 +24792,13 @@ 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 four extensions: + As of this writing, there are five extensions: * XML parser extension, using the Expat (http://expat.sourceforge.net) XML parsing library. + * PDF extension. + * PostgreSQL extension. * GD graphics library extension. @@ -30498,7 +30502,7 @@ Index * exit status, of gawk: Exit Status. (line 6) * exp() function: Numeric Functions. (line 18) * expand utility: Very Simple. (line 69) -* Expat XML parser library: gawkextlib. (line 33) +* Expat XML parser library: gawkextlib. (line 35) * expressions: Expressions. (line 6) * expressions, as patterns: Expression Patterns. (line 6) * expressions, assignment: Assignment Ops. (line 6) @@ -32581,125 +32585,125 @@ Ref: call-new-function874265 Node: Extension API Description876280 Node: Extension API Functions Introduction877493 Node: General Data Types882359 -Ref: General Data Types-Footnote-1887958 -Node: Requesting Values888257 -Ref: table-value-types-returned888988 -Node: Constructor Functions889942 -Node: Registration Functions892962 -Node: Extension Functions893647 -Node: Exit Callback Functions895872 -Node: Extension Version String897121 -Node: Input Parsers897771 -Node: Output Wrappers907528 -Node: Two-way processors912038 -Node: Printing Messages914246 -Ref: Printing Messages-Footnote-1915323 -Node: Updating `ERRNO'915475 -Node: Accessing Parameters916214 -Node: Symbol Table Access917444 -Node: Symbol table by name917956 -Node: Symbol table by cookie919703 -Ref: Symbol table by cookie-Footnote-1923833 -Node: Cached values923896 -Ref: Cached values-Footnote-1927345 -Node: Array Manipulation927436 -Ref: Array Manipulation-Footnote-1928534 -Node: Array Data Types928573 -Ref: Array Data Types-Footnote-1931276 -Node: Array Functions931368 -Node: Flattening Arrays935134 -Node: Creating Arrays941986 -Node: Extension API Variables946711 -Node: Extension Versioning947347 -Node: Extension API Informational Variables949248 -Node: Extension API Boilerplate950334 -Node: Finding Extensions954138 -Node: Extension Example954698 -Node: Internal File Description955428 -Node: Internal File Ops959519 -Ref: Internal File Ops-Footnote-1971027 -Node: Using Internal File Ops971167 -Ref: Using Internal File Ops-Footnote-1973520 -Node: Extension Samples973786 -Node: Extension Sample File Functions975310 -Node: Extension Sample Fnmatch983795 -Node: Extension Sample Fork985521 -Node: Extension Sample Inplace986739 -Node: Extension Sample Ord988517 -Node: Extension Sample Readdir989353 -Node: Extension Sample Revout990885 -Node: Extension Sample Rev2way991478 -Node: Extension Sample Read write array992168 -Node: Extension Sample Readfile994051 -Node: Extension Sample API Tests994869 -Node: Extension Sample Time995394 -Node: gawkextlib996758 -Node: Language History999518 -Node: V7/SVR3.11001040 -Node: SVR41003360 -Node: POSIX1004802 -Node: BTL1006188 -Node: POSIX/GNU1006922 -Node: Common Extensions1012457 -Node: Ranges and Locales1013763 -Ref: Ranges and Locales-Footnote-11018381 -Ref: Ranges and Locales-Footnote-21018408 -Ref: Ranges and Locales-Footnote-31018668 -Node: Contributors1018889 -Node: Installation1023964 -Node: Gawk Distribution1024858 -Node: Getting1025342 -Node: Extracting1026168 -Node: Distribution contents1027860 -Node: Unix Installation1033380 -Node: Quick Installation1033997 -Node: Additional Configuration Options1036441 -Node: Configuration Philosophy1038177 -Node: Non-Unix Installation1040531 -Node: PC Installation1040989 -Node: PC Binary Installation1042288 -Node: PC Compiling1044136 -Node: PC Testing1047080 -Node: PC Using1048256 -Node: Cygwin1052441 -Node: MSYS1053441 -Node: VMS Installation1053955 -Node: VMS Compilation1054558 -Ref: VMS Compilation-Footnote-11055565 -Node: VMS Installation Details1055623 -Node: VMS Running1057258 -Node: VMS Old Gawk1058865 -Node: Bugs1059339 -Node: Other Versions1063195 -Node: Notes1069279 -Node: Compatibility Mode1070079 -Node: Additions1070862 -Node: Accessing The Source1071789 -Node: Adding Code1073229 -Node: New Ports1079274 -Node: Derived Files1083409 -Ref: Derived Files-Footnote-11088730 -Ref: Derived Files-Footnote-21088764 -Ref: Derived Files-Footnote-31089364 -Node: Future Extensions1089462 -Node: Implementation Limitations1090039 -Node: Extension Design1091291 -Node: Old Extension Problems1092445 -Ref: Old Extension Problems-Footnote-11093953 -Node: Extension New Mechanism Goals1094010 -Ref: Extension New Mechanism Goals-Footnote-11097375 -Node: Extension Other Design Decisions1097561 -Node: Extension Future Growth1099667 -Node: Old Extension Mechanism1100503 -Node: Basic Concepts1102243 -Node: Basic High Level1102924 -Ref: figure-general-flow1103195 -Ref: figure-process-flow1103794 -Ref: Basic High Level-Footnote-11107023 -Node: Basic Data Typing1107208 -Node: Glossary1110563 -Node: Copying1136025 -Node: GNU Free Documentation License1173582 -Node: Index1198719 +Ref: General Data Types-Footnote-1887964 +Node: Requesting Values888263 +Ref: table-value-types-returned888994 +Node: Constructor Functions889948 +Node: Registration Functions892968 +Node: Extension Functions893653 +Node: Exit Callback Functions895878 +Node: Extension Version String897127 +Node: Input Parsers897777 +Node: Output Wrappers907534 +Node: Two-way processors912044 +Node: Printing Messages914252 +Ref: Printing Messages-Footnote-1915329 +Node: Updating `ERRNO'915481 +Node: Accessing Parameters916220 +Node: Symbol Table Access917450 +Node: Symbol table by name917962 +Node: Symbol table by cookie919709 +Ref: Symbol table by cookie-Footnote-1923839 +Node: Cached values923902 +Ref: Cached values-Footnote-1927351 +Node: Array Manipulation927442 +Ref: Array Manipulation-Footnote-1928540 +Node: Array Data Types928579 +Ref: Array Data Types-Footnote-1931282 +Node: Array Functions931374 +Node: Flattening Arrays935140 +Node: Creating Arrays941992 +Node: Extension API Variables946717 +Node: Extension Versioning947353 +Node: Extension API Informational Variables949254 +Node: Extension API Boilerplate950340 +Node: Finding Extensions954144 +Node: Extension Example954704 +Node: Internal File Description955434 +Node: Internal File Ops959525 +Ref: Internal File Ops-Footnote-1971033 +Node: Using Internal File Ops971173 +Ref: Using Internal File Ops-Footnote-1973526 +Node: Extension Samples973792 +Node: Extension Sample File Functions975316 +Node: Extension Sample Fnmatch983801 +Node: Extension Sample Fork985527 +Node: Extension Sample Inplace986745 +Node: Extension Sample Ord988523 +Node: Extension Sample Readdir989359 +Node: Extension Sample Revout990891 +Node: Extension Sample Rev2way991484 +Node: Extension Sample Read write array992174 +Node: Extension Sample Readfile994057 +Node: Extension Sample API Tests994875 +Node: Extension Sample Time995400 +Node: gawkextlib996764 +Node: Language History999545 +Node: V7/SVR3.11001067 +Node: SVR41003387 +Node: POSIX1004829 +Node: BTL1006215 +Node: POSIX/GNU1006949 +Node: Common Extensions1012484 +Node: Ranges and Locales1013790 +Ref: Ranges and Locales-Footnote-11018408 +Ref: Ranges and Locales-Footnote-21018435 +Ref: Ranges and Locales-Footnote-31018695 +Node: Contributors1018916 +Node: Installation1023991 +Node: Gawk Distribution1024885 +Node: Getting1025369 +Node: Extracting1026195 +Node: Distribution contents1027887 +Node: Unix Installation1033407 +Node: Quick Installation1034024 +Node: Additional Configuration Options1036468 +Node: Configuration Philosophy1038204 +Node: Non-Unix Installation1040558 +Node: PC Installation1041016 +Node: PC Binary Installation1042315 +Node: PC Compiling1044163 +Node: PC Testing1047107 +Node: PC Using1048283 +Node: Cygwin1052468 +Node: MSYS1053468 +Node: VMS Installation1053982 +Node: VMS Compilation1054585 +Ref: VMS Compilation-Footnote-11055592 +Node: VMS Installation Details1055650 +Node: VMS Running1057285 +Node: VMS Old Gawk1058892 +Node: Bugs1059366 +Node: Other Versions1063222 +Node: Notes1069306 +Node: Compatibility Mode1070106 +Node: Additions1070889 +Node: Accessing The Source1071816 +Node: Adding Code1073256 +Node: New Ports1079301 +Node: Derived Files1083436 +Ref: Derived Files-Footnote-11088757 +Ref: Derived Files-Footnote-21088791 +Ref: Derived Files-Footnote-31089391 +Node: Future Extensions1089489 +Node: Implementation Limitations1090066 +Node: Extension Design1091318 +Node: Old Extension Problems1092472 +Ref: Old Extension Problems-Footnote-11093980 +Node: Extension New Mechanism Goals1094037 +Ref: Extension New Mechanism Goals-Footnote-11097402 +Node: Extension Other Design Decisions1097588 +Node: Extension Future Growth1099694 +Node: Old Extension Mechanism1100530 +Node: Basic Concepts1102270 +Node: Basic High Level1102951 +Ref: figure-general-flow1103222 +Ref: figure-process-flow1103821 +Ref: Basic High Level-Footnote-11107050 +Node: Basic Data Typing1107235 +Node: Glossary1110590 +Node: Copying1136052 +Node: GNU Free Documentation License1173609 +Node: Index1198746  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index ba55737d..8cd2a47b 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -29617,7 +29617,9 @@ the macros as if they were functions. @quotation @i{I have a true love/hate relationship with unions.} @author Arnold Robbins +@end quotation +@quotation @i{That's the thing about unions: the compiler will arrange things so they can accommodate both love and hate.} @author Chet Ramey @@ -32862,13 +32864,16 @@ 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 four extensions: +As of this writing, there are five extensions: @itemize @bullet @item XML parser extension, using the @uref{http://expat.sourceforge.net, Expat} XML parsing library. +@item +PDF extension. + @item PostgreSQL extension. diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 02aa713b..ba37ca57 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -28766,7 +28766,9 @@ the macros as if they were functions. @quotation @i{I have a true love/hate relationship with unions.} @author Arnold Robbins +@end quotation +@quotation @i{That's the thing about unions: the compiler will arrange things so they can accommodate both love and hate.} @author Chet Ramey @@ -32011,13 +32013,16 @@ 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 four extensions: +As of this writing, there are five extensions: @itemize @bullet @item XML parser extension, using the @uref{http://expat.sourceforge.net, Expat} XML parsing library. +@item +PDF extension. + @item PostgreSQL extension. -- cgit v1.2.3 From aedc94b6eeb554b7e0f4eeeeb4a93db19e897607 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 26 Dec 2013 21:24:27 +0200 Subject: More minor doc additions. --- doc/ChangeLog | 4 +++ doc/gawk.info | 109 ++++++++++++++++++++++++++++++-------------------------- doc/gawk.texi | 11 ++++-- doc/gawktexi.in | 11 ++++-- 4 files changed, 80 insertions(+), 55 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 79f89cbf..4dc782e1 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2013-12-26 Arnold D. Robbins + + * gawktexi.in: More minor additions / fixes. + 2013-12-25 Arnold D. Robbins * gawktexi.in: Minor additions / fixes. diff --git a/doc/gawk.info b/doc/gawk.info index 9fa8eae4..358551af 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -25732,6 +25732,11 @@ Various `.c', `.y', and `.h' files of the programs in this Info file are available in appropriate subdirectories of `awklib/eg'. +`extension/*' + The source code, manual pages, and infrastructure files for the + sample extensions included with `gawk'. *Note Dynamic + Extensions::, for more information. + `posix/*' Files needed for building `gawk' on POSIX-compliant systems. @@ -27054,7 +27059,9 @@ C.3 Probable Future Extensions ============================== AWK is a language similar to PERL, only considerably more elegant. - -- Arnold Robbins Hey! -- Larry Wall + -- Arnold Robbins + + Hey! -- Larry Wall The `TODO' file in the `gawk' Git repository lists possible future enhancements. Some of these relate to the source code, and others to @@ -32655,55 +32662,55 @@ Node: Gawk Distribution1024885 Node: Getting1025369 Node: Extracting1026195 Node: Distribution contents1027887 -Node: Unix Installation1033407 -Node: Quick Installation1034024 -Node: Additional Configuration Options1036468 -Node: Configuration Philosophy1038204 -Node: Non-Unix Installation1040558 -Node: PC Installation1041016 -Node: PC Binary Installation1042315 -Node: PC Compiling1044163 -Node: PC Testing1047107 -Node: PC Using1048283 -Node: Cygwin1052468 -Node: MSYS1053468 -Node: VMS Installation1053982 -Node: VMS Compilation1054585 -Ref: VMS Compilation-Footnote-11055592 -Node: VMS Installation Details1055650 -Node: VMS Running1057285 -Node: VMS Old Gawk1058892 -Node: Bugs1059366 -Node: Other Versions1063222 -Node: Notes1069306 -Node: Compatibility Mode1070106 -Node: Additions1070889 -Node: Accessing The Source1071816 -Node: Adding Code1073256 -Node: New Ports1079301 -Node: Derived Files1083436 -Ref: Derived Files-Footnote-11088757 -Ref: Derived Files-Footnote-21088791 -Ref: Derived Files-Footnote-31089391 -Node: Future Extensions1089489 -Node: Implementation Limitations1090066 -Node: Extension Design1091318 -Node: Old Extension Problems1092472 -Ref: Old Extension Problems-Footnote-11093980 -Node: Extension New Mechanism Goals1094037 -Ref: Extension New Mechanism Goals-Footnote-11097402 -Node: Extension Other Design Decisions1097588 -Node: Extension Future Growth1099694 -Node: Old Extension Mechanism1100530 -Node: Basic Concepts1102270 -Node: Basic High Level1102951 -Ref: figure-general-flow1103222 -Ref: figure-process-flow1103821 -Ref: Basic High Level-Footnote-11107050 -Node: Basic Data Typing1107235 -Node: Glossary1110590 -Node: Copying1136052 -Node: GNU Free Documentation License1173609 -Node: Index1198746 +Node: Unix Installation1033592 +Node: Quick Installation1034209 +Node: Additional Configuration Options1036653 +Node: Configuration Philosophy1038389 +Node: Non-Unix Installation1040743 +Node: PC Installation1041201 +Node: PC Binary Installation1042500 +Node: PC Compiling1044348 +Node: PC Testing1047292 +Node: PC Using1048468 +Node: Cygwin1052653 +Node: MSYS1053653 +Node: VMS Installation1054167 +Node: VMS Compilation1054770 +Ref: VMS Compilation-Footnote-11055777 +Node: VMS Installation Details1055835 +Node: VMS Running1057470 +Node: VMS Old Gawk1059077 +Node: Bugs1059551 +Node: Other Versions1063407 +Node: Notes1069491 +Node: Compatibility Mode1070291 +Node: Additions1071074 +Node: Accessing The Source1072001 +Node: Adding Code1073441 +Node: New Ports1079486 +Node: Derived Files1083621 +Ref: Derived Files-Footnote-11088942 +Ref: Derived Files-Footnote-21088976 +Ref: Derived Files-Footnote-31089576 +Node: Future Extensions1089674 +Node: Implementation Limitations1090257 +Node: Extension Design1091509 +Node: Old Extension Problems1092663 +Ref: Old Extension Problems-Footnote-11094171 +Node: Extension New Mechanism Goals1094228 +Ref: Extension New Mechanism Goals-Footnote-11097593 +Node: Extension Other Design Decisions1097779 +Node: Extension Future Growth1099885 +Node: Old Extension Mechanism1100721 +Node: Basic Concepts1102461 +Node: Basic High Level1103142 +Ref: figure-general-flow1103413 +Ref: figure-process-flow1104012 +Ref: Basic High Level-Footnote-11107241 +Node: Basic Data Typing1107426 +Node: Glossary1110781 +Node: Copying1136243 +Node: GNU Free Documentation License1173800 +Node: Index1198937  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 8cd2a47b..47ea0acc 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -26,7 +26,7 @@ @c applies to and all the info about who's publishing this edition @c These apply across the board. -@set UPDATE-MONTH May, 2013 +@set UPDATE-MONTH December, 2013 @set VERSION 4.1 @set PATCHLEVEL 0 @@ -33623,7 +33623,7 @@ character ranges (such as @samp{[a-z]}) to match any character between the first character in the range and the last character in the range, inclusive. Ordering was based on the numeric value of each character in the machine's native character set. Thus, on ASCII-based systems, -@code{[a-z]} matched all the lowercase letters, and only the lowercase +@samp{[a-z]} matched all the lowercase letters, and only the lowercase letters, since 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.) @@ -34237,6 +34237,11 @@ They are installed as part of the installation process. The rest of the programs in this @value{DOCUMENT} are available in appropriate subdirectories of @file{awklib/eg}. +@item extension/* +The source code, manual pages, and infrastructure files for +the sample extensions included with @command{gawk}. +@xref{Dynamic Extensions}, for more information. + @item posix/* Files needed for building @command{gawk} on POSIX-compliant systems. @@ -35942,7 +35947,9 @@ Larry @quotation @i{AWK is a language similar to PERL, only considerably more elegant.} @author Arnold Robbins +@end quotation +@quotation @i{Hey!} @author Larry Wall @end quotation diff --git a/doc/gawktexi.in b/doc/gawktexi.in index ba37ca57..a82a1b37 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -21,7 +21,7 @@ @c applies to and all the info about who's publishing this edition @c These apply across the board. -@set UPDATE-MONTH May, 2013 +@set UPDATE-MONTH December, 2013 @set VERSION 4.1 @set PATCHLEVEL 0 @@ -32772,7 +32772,7 @@ character ranges (such as @samp{[a-z]}) to match any character between the first character in the range and the last character in the range, inclusive. Ordering was based on the numeric value of each character in the machine's native character set. Thus, on ASCII-based systems, -@code{[a-z]} matched all the lowercase letters, and only the lowercase +@samp{[a-z]} matched all the lowercase letters, and only the lowercase letters, since 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.) @@ -33386,6 +33386,11 @@ They are installed as part of the installation process. The rest of the programs in this @value{DOCUMENT} are available in appropriate subdirectories of @file{awklib/eg}. +@item extension/* +The source code, manual pages, and infrastructure files for +the sample extensions included with @command{gawk}. +@xref{Dynamic Extensions}, for more information. + @item posix/* Files needed for building @command{gawk} on POSIX-compliant systems. @@ -35091,7 +35096,9 @@ Larry @quotation @i{AWK is a language similar to PERL, only considerably more elegant.} @author Arnold Robbins +@end quotation +@quotation @i{Hey!} @author Larry Wall @end quotation -- cgit v1.2.3 From 103a8db5ae7d7faa60d71b3ef1255869022dbb8d Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 26 Dec 2013 21:29:18 +0200 Subject: VMS doc updates. --- ChangeLog | 4 ++++ README | 3 +++ doc/ChangeLog | 1 + doc/gawk.info | 66 +++++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 14 +++++++----- doc/gawktexi.in | 14 +++++++----- 6 files changed, 60 insertions(+), 42 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6ac64eef..f0d9ee13 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-12-26 Arnold D. Robbins + + * README: Add John Malmberg for VMS. + 2013-12-24 Arnold D. Robbins * getopt.h: Add `defined(__sun)' to list of system that do get to diff --git a/README b/README index eaf11a44..56020870 100644 --- a/README +++ b/README @@ -89,6 +89,9 @@ VMS: Pat Rankin r.pat.rankin@gmail.com + John Malmberg + wb8tyw@gmail.com + z/OS (OS/390): Dave Pitts dpitts@cozx.com diff --git a/doc/ChangeLog b/doc/ChangeLog index b2673da9..e40a2127 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,6 +1,7 @@ 2013-12-26 Arnold D. Robbins * gawktexi.in: More minor additions / fixes. + Add John Malmberg for VMS, minor edits. 2013-12-25 Arnold D. Robbins diff --git a/doc/gawk.info b/doc/gawk.info index cb38fa02..e45050b2 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -26451,7 +26451,8 @@ considered authoritative if it conflicts with this Info file. MS-DOS with DJGPP Scott Deifik, . MS-Windows with MINGW Eli Zaretskii, . OS/2 Andreas Buening, . -VMS Pat Rankin, +VMS Pat Rankin, , and John + Malmberg, . z/OS (OS/390) Dave Pitts, . If your bug is also reproducible under Unix, please send a copy of @@ -31179,6 +31180,7 @@ Index * lvalues/rvalues: Assignment Ops. (line 32) * mailing labels, printing: Labels Program. (line 6) * mailing list, GNITS: Acknowledgments. (line 52) +* Malmberg, John <1>: Bugs. (line 72) * Malmberg, John: Acknowledgments. (line 60) * mark parity: Ordinal Functions. (line 45) * marked string extraction (internationalization): String Extraction. @@ -32690,36 +32692,36 @@ Node: VMS Installation Details1056227 Node: VMS Running1057862 Node: VMS Old Gawk1059469 Node: Bugs1059943 -Node: Other Versions1063799 -Node: Notes1069883 -Node: Compatibility Mode1070683 -Node: Additions1071466 -Node: Accessing The Source1072393 -Node: Adding Code1073833 -Node: New Ports1079878 -Node: Derived Files1084013 -Ref: Derived Files-Footnote-11089334 -Ref: Derived Files-Footnote-21089368 -Ref: Derived Files-Footnote-31089968 -Node: Future Extensions1090066 -Node: Implementation Limitations1090649 -Node: Extension Design1091901 -Node: Old Extension Problems1093055 -Ref: Old Extension Problems-Footnote-11094563 -Node: Extension New Mechanism Goals1094620 -Ref: Extension New Mechanism Goals-Footnote-11097985 -Node: Extension Other Design Decisions1098171 -Node: Extension Future Growth1100277 -Node: Old Extension Mechanism1101113 -Node: Basic Concepts1102853 -Node: Basic High Level1103534 -Ref: figure-general-flow1103805 -Ref: figure-process-flow1104404 -Ref: Basic High Level-Footnote-11107633 -Node: Basic Data Typing1107818 -Node: Glossary1111173 -Node: Copying1136635 -Node: GNU Free Documentation License1174192 -Node: Index1199329 +Node: Other Versions1063863 +Node: Notes1069947 +Node: Compatibility Mode1070747 +Node: Additions1071530 +Node: Accessing The Source1072457 +Node: Adding Code1073897 +Node: New Ports1079942 +Node: Derived Files1084077 +Ref: Derived Files-Footnote-11089398 +Ref: Derived Files-Footnote-21089432 +Ref: Derived Files-Footnote-31090032 +Node: Future Extensions1090130 +Node: Implementation Limitations1090713 +Node: Extension Design1091965 +Node: Old Extension Problems1093119 +Ref: Old Extension Problems-Footnote-11094627 +Node: Extension New Mechanism Goals1094684 +Ref: Extension New Mechanism Goals-Footnote-11098049 +Node: Extension Other Design Decisions1098235 +Node: Extension Future Growth1100341 +Node: Old Extension Mechanism1101177 +Node: Basic Concepts1102917 +Node: Basic High Level1103598 +Ref: figure-general-flow1103869 +Ref: figure-process-flow1104468 +Ref: Basic High Level-Footnote-11107697 +Node: Basic Data Typing1107882 +Node: Glossary1111237 +Node: Copying1136699 +Node: GNU Free Documentation License1174256 +Node: Index1199393  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 9b3118a7..a0a2af6b 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -35115,9 +35115,10 @@ mail at the Internet address noted previously. If you find bugs in one of the non-Unix ports of @command{gawk}, please send an electronic mail message to the person who maintains that port. They -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}. +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}. The people maintaining the non-Unix ports of @command{gawk} are as follows: @@ -35133,14 +35134,17 @@ as follows: @item OS/2 @tab Andreas Buening, @EMAIL{andreas.buening@@nexgo.de,andreas dot buening at nexgo dot de}. @cindex Rankin, Pat -@item VMS @tab Pat Rankin, @EMAIL{r.pat.rankin@@gmail.com,r.pat.rankin at gmail.com} +@cindex Malmberg, John +@item VMS @tab Pat Rankin, @EMAIL{r.pat.rankin@@gmail.com,r.pat.rankin at gmail.com}, and +John Malmberg, @EMAIL{wb8tyw@@gmail.com,wb8tyw at gmail.com}. @cindex Pitts, Dave @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, please send a copy of your -report to the @EMAIL{bug-gawk@@gnu.org,bug-gawk at gnu dot org} email list as well. +report to the @EMAIL{bug-gawk@@gnu.org,bug-gawk at gnu dot org} email +list as well. @c ENDOFRANGE dbugg @c ENDOFRANGE tblgawb diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 61b7f35a..6c1b0e8d 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -34264,9 +34264,10 @@ mail at the Internet address noted previously. If you find bugs in one of the non-Unix ports of @command{gawk}, please send an electronic mail message to the person who maintains that port. They -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}. +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}. The people maintaining the non-Unix ports of @command{gawk} are as follows: @@ -34282,14 +34283,17 @@ as follows: @item OS/2 @tab Andreas Buening, @EMAIL{andreas.buening@@nexgo.de,andreas dot buening at nexgo dot de}. @cindex Rankin, Pat -@item VMS @tab Pat Rankin, @EMAIL{r.pat.rankin@@gmail.com,r.pat.rankin at gmail.com} +@cindex Malmberg, John +@item VMS @tab Pat Rankin, @EMAIL{r.pat.rankin@@gmail.com,r.pat.rankin at gmail.com}, and +John Malmberg, @EMAIL{wb8tyw@@gmail.com,wb8tyw at gmail.com}. @cindex Pitts, Dave @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, please send a copy of your -report to the @EMAIL{bug-gawk@@gnu.org,bug-gawk at gnu dot org} email list as well. +report to the @EMAIL{bug-gawk@@gnu.org,bug-gawk at gnu dot org} email +list as well. @c ENDOFRANGE dbugg @c ENDOFRANGE tblgawb -- cgit v1.2.3 From 434a743610b2856078b120cb50bfe92155f8c49c Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 26 Dec 2013 21:41:05 +0200 Subject: VMS updates. --- ChangeLog | 4 ++++ README | 3 +++ doc/ChangeLog | 1 + doc/gawk.info | 66 +++++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 4 +++- doc/gawktexi.in | 4 +++- 6 files changed, 48 insertions(+), 34 deletions(-) diff --git a/ChangeLog b/ChangeLog index c8e695df..69df04bb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-12-26 Arnold D. Robbins + + * README: Add John Malmberg for VMS. + 2013-12-24 Arnold D. Robbins * getopt.h: Add `defined(__sun)' to list of system that do get to diff --git a/README b/README index eaf11a44..56020870 100644 --- a/README +++ b/README @@ -89,6 +89,9 @@ VMS: Pat Rankin r.pat.rankin@gmail.com + John Malmberg + wb8tyw@gmail.com + z/OS (OS/390): Dave Pitts dpitts@cozx.com diff --git a/doc/ChangeLog b/doc/ChangeLog index 71d7fcdb..78b781be 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,6 +1,7 @@ 2013-12-26 Arnold D. Robbins * gawktexi.in: More minor additions / fixes. + (Bugs): Add John Malmberg for VMS. 2013-12-25 Arnold D. Robbins diff --git a/doc/gawk.info b/doc/gawk.info index 902524d2..3be92873 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -26553,7 +26553,8 @@ considered authoritative if it conflicts with this Info file. MS-DOS with DJGPP Scott Deifik, . MS-Windows with MINGW Eli Zaretskii, . OS/2 Andreas Buening, . -VMS Pat Rankin, +VMS Pat Rankin, , and John + Malmberg, . z/OS (OS/390) Dave Pitts, . If your bug is also reproducible under Unix, please send a copy of @@ -31283,6 +31284,7 @@ Index * lvalues/rvalues: Assignment Ops. (line 32) * mailing labels, printing: Labels Program. (line 6) * mailing list, GNITS: Acknowledgments. (line 52) +* Malmberg, John <1>: Bugs. (line 72) * Malmberg, John: Acknowledgments. (line 60) * mark parity: Ordinal Functions. (line 45) * marked string extraction (internationalization): String Extraction. @@ -32796,36 +32798,36 @@ Node: VMS Running1059741 Node: VMS GNV1062575 Node: VMS Old Gawk1063284 Node: Bugs1063754 -Node: Other Versions1067610 -Node: Notes1073694 -Node: Compatibility Mode1074494 -Node: Additions1075277 -Node: Accessing The Source1076204 -Node: Adding Code1077644 -Node: New Ports1083689 -Node: Derived Files1087824 -Ref: Derived Files-Footnote-11093145 -Ref: Derived Files-Footnote-21093179 -Ref: Derived Files-Footnote-31093779 -Node: Future Extensions1093877 -Node: Implementation Limitations1094460 -Node: Extension Design1095712 -Node: Old Extension Problems1096866 -Ref: Old Extension Problems-Footnote-11098374 -Node: Extension New Mechanism Goals1098431 -Ref: Extension New Mechanism Goals-Footnote-11101796 -Node: Extension Other Design Decisions1101982 -Node: Extension Future Growth1104088 -Node: Old Extension Mechanism1104924 -Node: Basic Concepts1106664 -Node: Basic High Level1107345 -Ref: figure-general-flow1107616 -Ref: figure-process-flow1108215 -Ref: Basic High Level-Footnote-11111444 -Node: Basic Data Typing1111629 -Node: Glossary1114984 -Node: Copying1140446 -Node: GNU Free Documentation License1178003 -Node: Index1203140 +Node: Other Versions1067674 +Node: Notes1073758 +Node: Compatibility Mode1074558 +Node: Additions1075341 +Node: Accessing The Source1076268 +Node: Adding Code1077708 +Node: New Ports1083753 +Node: Derived Files1087888 +Ref: Derived Files-Footnote-11093209 +Ref: Derived Files-Footnote-21093243 +Ref: Derived Files-Footnote-31093843 +Node: Future Extensions1093941 +Node: Implementation Limitations1094524 +Node: Extension Design1095776 +Node: Old Extension Problems1096930 +Ref: Old Extension Problems-Footnote-11098438 +Node: Extension New Mechanism Goals1098495 +Ref: Extension New Mechanism Goals-Footnote-11101860 +Node: Extension Other Design Decisions1102046 +Node: Extension Future Growth1104152 +Node: Old Extension Mechanism1104988 +Node: Basic Concepts1106728 +Node: Basic High Level1107409 +Ref: figure-general-flow1107680 +Ref: figure-process-flow1108279 +Ref: Basic High Level-Footnote-11111508 +Node: Basic Data Typing1111693 +Node: Glossary1115048 +Node: Copying1140510 +Node: GNU Free Documentation License1178067 +Node: Index1203204  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 1effb155..3692547a 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -35245,7 +35245,9 @@ as follows: @item OS/2 @tab Andreas Buening, @EMAIL{andreas.buening@@nexgo.de,andreas dot buening at nexgo dot de}. @cindex Rankin, Pat -@item VMS @tab Pat Rankin, @EMAIL{r.pat.rankin@@gmail.com,r.pat.rankin at gmail.com} +@cindex Malmberg, John +@item VMS @tab Pat Rankin, @EMAIL{r.pat.rankin@@gmail.com,r.pat.rankin at gmail.com}, and +John Malmberg, @EMAIL{wb8tyw@@gmail.com,wb8tyw at gmail.com}. @cindex Pitts, Dave @item z/OS (OS/390) @tab Dave Pitts, @EMAIL{dpitts@@cozx.com,dpitts at cozx dot com}. diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 95942f9c..2219dc45 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -34394,7 +34394,9 @@ as follows: @item OS/2 @tab Andreas Buening, @EMAIL{andreas.buening@@nexgo.de,andreas dot buening at nexgo dot de}. @cindex Rankin, Pat -@item VMS @tab Pat Rankin, @EMAIL{r.pat.rankin@@gmail.com,r.pat.rankin at gmail.com} +@cindex Malmberg, John +@item VMS @tab Pat Rankin, @EMAIL{r.pat.rankin@@gmail.com,r.pat.rankin at gmail.com}, and +John Malmberg, @EMAIL{wb8tyw@@gmail.com,wb8tyw at gmail.com}. @cindex Pitts, Dave @item z/OS (OS/390) @tab Dave Pitts, @EMAIL{dpitts@@cozx.com,dpitts at cozx dot com}. -- cgit v1.2.3 From a26ea21bba35f0118c7d5c4414c6f6c7fa74b16b Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 29 Dec 2013 19:38:09 +0200 Subject: Enable compiling extensions on VMS. --- extension/ChangeLog | 6 ++++ extension/filefuncs.c | 27 +++++++++++++++ extension/fnmatch.c | 14 ++++++++ extension/gawkdirfd.h | 4 +++ test/ChangeLog | 4 +++ test/fts.awk | 24 ++++++++++++-- vms/ChangeLog | 5 +++ vms/descrip.mms | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 172 insertions(+), 3 deletions(-) diff --git a/extension/ChangeLog b/extension/ChangeLog index 328d58ba..c0e1fbb0 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,9 @@ +2013-12-29 John E. Malmberg + + * gawkdirfd.h: Adjust include for VMS. + * filefuncs.c: Make it compile on VMS. + * fnmatch.c: Make it compile on VMS. + 2013-12-21 Mike Frysinger * configure.ac: Remove MirBSD and OS/390 hack to create diff --git a/extension/filefuncs.c b/extension/filefuncs.c index 61cadfec..a6e99e8e 100644 --- a/extension/filefuncs.c +++ b/extension/filefuncs.c @@ -36,6 +36,33 @@ #define _BSD_SOURCE +#ifdef __VMS +#if (__CRTL_VER >= 70200000) && !defined (__VAX) +#define _LARGEFILE 1 +#endif + +#ifndef __VAX +#ifdef __CRTL_VER +#if __CRTL_VER >= 80200000 +#define _USE_STD_STAT 1 +#endif +#endif +#endif +#define _POSIX_C_SOURCE 1 +#define _XOPEN_SOURCE 1 +#include +#ifndef S_ISVTX +#define S_ISVTX (0) +#endif +#ifndef major +#define major(s) (s) +#endif +#ifndef minor +#define minor(s) (0) +#endif +#endif + + #include #include #include diff --git a/extension/fnmatch.c b/extension/fnmatch.c index a67bc25f..a85bcc78 100644 --- a/extension/fnmatch.c +++ b/extension/fnmatch.c @@ -45,15 +45,29 @@ #define _(msgid) gettext(msgid) #define N_(msgid) msgid +#ifdef __VMS +#define __iswctype iswctype +#define __btowc btowc +#endif + #define _GNU_SOURCE 1 /* use GNU extensions if they're there */ #ifdef HAVE_FNMATCH_H #include #else +#ifdef __VMS +#include "fnmatch.h" /* version that comes with gawk */ +#else #include "../missing_d/fnmatch.h" /* version that comes with gawk */ #endif +#define HAVE_FNMATCH_H +#endif #ifndef HAVE_FNMATCH +#ifdef __VMS +#include "fnmatch.c" /* ditto */ +#else #include "../missing_d/fnmatch.c" /* ditto */ +#endif #define HAVE_FNMATCH #endif diff --git a/extension/gawkdirfd.h b/extension/gawkdirfd.h index a3a2b6a6..d1edf65f 100644 --- a/extension/gawkdirfd.h +++ b/extension/gawkdirfd.h @@ -35,7 +35,11 @@ * Unlike the main gawk code base, this include is NOT dependant * upon MinGW or EMX. */ +#ifndef __VMS #include "../nonposix.h" +#else +#include "nonposix.h" +#endif #ifndef DIR_TO_FD # define DIR_TO_FD(d) (FAKE_FD_VALUE) diff --git a/test/ChangeLog b/test/ChangeLog index 378c6ae3..dd73cbc6 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2013-12-29 John E. Malmberg + + * fts.awk: Adjust for VMS. + 2013-12-10 Arnold D. Robbins * Makefile.am: Remove instances of "" that were incorrect. diff --git a/test/fts.awk b/test/fts.awk index a1b49cbd..d2e55cab 100644 --- a/test/fts.awk +++ b/test/fts.awk @@ -3,8 +3,19 @@ BEGIN { Level = 0 - system("rm -fr d1 d2") - system("mkdir d1 d2 ; touch d1/f1 d1/f2 d2/f1 d2/f2") + os = "" + if (ENVIRON["AWKLIBPATH"] == "sys$disk:[-]") { + os = "VMS" + system("create/dir/prot=o:rwed [.d1]") + system("create/dir/prot=o:rwed [.d2]") + system("copy fts.awk [.d1]f1") + system("copy fts.awk [.d1]f2") + system("copy fts.awk [.d2]f1") + system("copy fts.awk [.d2]f2") + } else { + system("rm -fr d1 d2") + system("mkdir d1 d2 ; touch d1/f1 d1/f2 d2/f1 d2/f2") + } pathlist[1] = "d1" pathlist[2] = "d2" flags = FTS_PHYSICAL @@ -19,7 +30,14 @@ BEGIN { traverse(data2) close(output) - system("rm -fr d1 d2") + if (os == "VMS") { + system("delete [.d1]*.*;*") + system("delete [.d2]*.*;*") + system("delete d1.dir;*") + system("delete d2.dir;*") + } else { + system("rm -fr d1 d2") + } } function indent( i) diff --git a/vms/ChangeLog b/vms/ChangeLog index 504967fd..7e6c7311 100644 --- a/vms/ChangeLog +++ b/vms/ChangeLog @@ -1,3 +1,8 @@ +2013-12-29 John E. Malmberg + + * descrip.mms: Build the dynamic extensions that will work. + Alpha and Itanium only. + 2013-12-23 John E. Malmberg * gawkmisc.vms: Fix program name calculation on VAX. diff --git a/vms/descrip.mms b/vms/descrip.mms index 2000e680..f53db272 100644 --- a/vms/descrip.mms +++ b/vms/descrip.mms @@ -76,6 +76,7 @@ CFLOAT = /float=ieee/ieee_mode=denorm_results CNAME = /NAME=(AS_IS,SHORT) CC = cc/DECC/Prefix=All/NESTED_INCLUDE=NONE$(CFLOAT) CFLAGS = /Incl=([],[.vms])/Obj=[]/Def=($(CDEFS))$(CNAME) $(CCFLAGS) +CEFLAGS = /Incl=([],[.vms],[.missing_d],[.extension])$(CNAME) $(CCFLAGS) LIBS = # DECC$SHR instead of VAXCRTL, no special link option needed .endif !VAXC .endif !GNUC @@ -240,6 +241,96 @@ $(VMSCMD) : $(VMSDIR)gawk.cld install.help : $(VMSDIR)gawk.hlp library/help $(HELPLIB) $< /log + +# Build dynamic extensions - Alpha/Itanium only. +.ifdef __VAX__ +# VAX not complete yet. +plug_opt = [.VMS.VAX]gawk_plugin_xfer.opt +.else +plug_opt = [.vms]gawk_plugin.opt +.endif + +ext_gawkdirfd_h = [.extension]gawkdirfd.h config.h nonposix.h + +extensions : filefuncs.exe fnmatch.exe inplace.exe ordchr.exe readdir.exe \ + revoutput.exe revtwoway.exe rwarray.exe testext.exe time.exe + +filefuncs.exe : filefuncs.obj stack.obj gawkfts.obj $(plug_opt) + link/share=$(MMS$TARGET) $(MMS$SOURCE), stack.obj, gawkfts.obj, \ + $(plug_opt)/opt + +fnmatch.exe : fnmatch.obj $(plug_opt) + link/share=$(MMS$TARGET) $(MMS$SOURCE), $(plug_opt)/opt + +inplace.exe : inplace.obj $(plug_opt) + link/share=$(MMS$TARGET) $(MMS$SOURCE), $(plug_opt)/opt + +ordchr.exe : ordchr.obj $(plug_opt) + link/share=$(MMS$TARGET) $(MMS$SOURCE), $(plug_opt)/opt + +readdir.exe : readdir.obj $(plug_opt) + link/share=$(MMS$TARGET) $(MMS$SOURCE), $(plug_opt)/opt + +revoutput.exe : revoutput.obj $(plug_opt) + link/share=$(MMS$TARGET) $(MMS$SOURCE), $(plug_opt)/opt + +revtwoway.exe : revtwoway.obj $(plug_opt) + link/share=$(MMS$TARGET) $(MMS$SOURCE), $(plug_opt)/opt + +rwarray.exe : rwarray.obj $(plug_opt) + link/share=$(MMS$TARGET) $(MMS$SOURCE), $(plug_opt)/opt + +testext.exe : testext.obj $(plug_opt) + link/share=$(MMS$TARGET) $(MMS$SOURCE), $(plug_opt)/opt + +time.exe : time.obj $(plug_opt) + link/share=$(MMS$TARGET) $(MMS$SOURCE), $(plug_opt)/opt + +stack.obj : [.extension]stack.c config.h gawkapi.h \ + [.extension]gawkfts.h, [.extension]stack.h + $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H)/object=$(MMS$TARGET) $(MMS$SOURCE) + +gawkfts.obj : [.extension]gawkfts.c config.h [.extension]gawkfts.h \ + $(ext_gawkdirfd_h) + $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H, ZOS_USS, "fchdir(x)=(-1)") \ + /object=$(MMS$TARGET) $(MMS$SOURCE) + +filefuncs.obj : [.extension]filefuncs.c config.h gawkapi.h \ + [.extension]gawkfts.h + $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H)/object=$(MMS$TARGET) $(MMS$SOURCE) + +fnmatch.obj : [.extension]fnmatch.c config.h gawkapi.h \ + [.missing_d]fnmatch.h [.missing_d]fnmatch.c + $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H)/object=$(MMS$TARGET) $(MMS$SOURCE) + +inplace.obj : [.extension]inplace.c config.h gawkapi.h + $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H)/object=$(MMS$TARGET) $(MMS$SOURCE) + +ordchr.obj : [.extension]ordchr.c config.h gawkapi.h + $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H)/object=$(MMS$TARGET) $(MMS$SOURCE) + +readdir.obj : [.extension]readdir.c config.h gawkapi.h \ + $(ext_gawkdirfd_h) + $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H, HAVE_DIRENT_H) \ + /object=$(MMS$TARGET) $(MMS$SOURCE) + +revoutput.obj : [.extension]revoutput.c config.h gawkapi.h + $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H)/object=$(MMS$TARGET) $(MMS$SOURCE) + +revtwoway.obj : [.extension]revtwoway.c config.h gawkapi.h + $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H, HAVE_GETDTABLESIZE) \ + /object=$(MMS$TARGET) $(MMS$SOURCE) + +rwarray.obj : [.extension]rwarray.c config.h gawkapi.h + $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H)/object=$(MMS$TARGET) $(MMS$SOURCE) + +testext.obj : [.extension]testext.c config.h gawkapi.h + $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H)/object=$(MMS$TARGET) $(MMS$SOURCE) + +time.obj : [.extension]time.c config.h gawkapi.h + $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H)/object=$(MMS$TARGET) $(MMS$SOURCE) + + # miscellaneous other targets tidy : - if f$search("*.*;-1").nes."" then purge -- cgit v1.2.3 From 2be545982a05f13cff1300dfa7d8ff45943a4a48 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 29 Dec 2013 19:40:54 +0200 Subject: Updates in NEWS for VMS. --- NEWS | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/NEWS b/NEWS index 09f91720..7270fcec 100644 --- a/NEWS +++ b/NEWS @@ -30,6 +30,11 @@ Changes from 4.1.0 to 4.1.1 10. The configure script now accepts a --disable-extensions option, which disables checking for and building the extensions. +11. The VMS port has been considerably improved. In particular config.h +is now generated by a DCL script. Also, the extension facility works +and several of the extensions can be built and used. Currently, the +extension facility only works on Alpha and Itanium. + XXX. A number of bugs have been fixed. See the ChangeLog. Changes from 4.0.2 to 4.1.0 -- cgit v1.2.3 From cbd2cf7f926f960fab1b5004e42c35515c1c8d9f Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 29 Dec 2013 19:49:57 +0200 Subject: Additional VMS fix. --- extension/ChangeLog | 5 +++++ extension/gawkfts.c | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/extension/ChangeLog b/extension/ChangeLog index c0e1fbb0..ad455cf2 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,8 @@ +2013-12-29 Arnold D. Robbins + + * gawkfts.c: Wrap include of in HAVE_SYS_PARAM_H, + as I should have done to start with. For VMS. + 2013-12-29 John E. Malmberg * gawkdirfd.h: Adjust include for VMS. diff --git a/extension/gawkfts.c b/extension/gawkfts.c index 81803b88..25a4c108 100644 --- a/extension/gawkfts.c +++ b/extension/gawkfts.c @@ -43,11 +43,11 @@ static char sccsid[] = "@(#)fts.c 8.6 (Berkeley) 8/14/94"; #include /* #include "namespace.h" */ -#ifndef ZOS_USS +#ifdef HAVE_SYS_PARAM_H #include #else #include -#endif /* ZOS_USS */ +#endif #include #include -- cgit v1.2.3 From dad5f25058c4ecf69ebe4543a13281d3f28c69bc Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 30 Dec 2013 21:52:45 +0200 Subject: Build and test dynamic extensions on VMS. Documented too. --- README_d/ChangeLog | 11 +++-- README_d/README.VMS | 75 ++++++++++++++++++++++++----- doc/ChangeLog | 4 ++ doc/gawk.info | 96 +++++++++++++++++++++----------------- doc/gawk.texi | 17 +++++++ doc/gawktexi.in | 17 +++++++ extension/ChangeLog | 5 ++ extension/filefuncs.c | 1 + extension/time.c | 24 ++++++++++ test/ChangeLog | 1 + test/fts.awk | 7 +++ test/rwarray.awk | 25 ++++++---- vms/ChangeLog | 8 +++- vms/gawk_plugin.opt | 5 ++ vms/generate_config_vms_h_gawk.com | 2 + vms/vax/ChangeLog | 7 +++ vms/vax/gawk_plugin_xfer.mar_exact | 13 ++++++ vms/vax/gawk_plugin_xfer.opt | 5 ++ vms/vax/macro32_exactcase.com | 16 +++++++ vms/vax/macro32_exactcase.patch | 11 +++++ vms/vms_popen.c | 4 +- vms/vmstest.com | 88 ++++++++++++++++++++++++++++++++++ 22 files changed, 373 insertions(+), 69 deletions(-) create mode 100644 vms/gawk_plugin.opt create mode 100644 vms/vax/ChangeLog create mode 100644 vms/vax/gawk_plugin_xfer.mar_exact create mode 100644 vms/vax/gawk_plugin_xfer.opt create mode 100644 vms/vax/macro32_exactcase.com create mode 100644 vms/vax/macro32_exactcase.patch diff --git a/README_d/ChangeLog b/README_d/ChangeLog index ed2a86b0..392ce0e2 100644 --- a/README_d/ChangeLog +++ b/README_d/ChangeLog @@ -1,12 +1,17 @@ -2013-12-23 John E. Malmberg +2013-12-23 John E. Malmberg + + * README.VMS: Add documentation about building dynamic + extensions. + +2013-12-23 John E. Malmberg * README.VMS: Document decoding Gawk VMS exit codes. -2013-12-16 John E. Malmberg +2013-12-16 John E. Malmberg * README.VMS: Further updates. -2013-12-05 John E. Malmberg +2013-12-05 John E. Malmberg * README.VMS: updated with current build information. diff --git a/README_d/README.VMS b/README_d/README.VMS index d689aa31..ef15a04d 100644 --- a/README_d/README.VMS +++ b/README_d/README.VMS @@ -15,6 +15,8 @@ MMS has had problems on ODS-5 volumes. MMK does not have these issues. MMK is available free from https://github.com/endlesssoftware/mmk. The most recent builds of gawk on VMS used MMK. +Support of the vmsbuild.com may get dropped in a future release. + DEC C -- use either vmsbuild.com or descrip.mms as is. DEC C is also known as Compaq C and HP C. @@ -42,23 +44,28 @@ with a release that old for some time. Compiling dynamic extensions on VMS: +GAWK comes with some dynamic extensions. The extensions that have been +ported to VMS can be built using one of the following commands. + + |$ MMS/DESCRIPTION=[.VMS]DESCRIP.MMS extensions +or + |$ MMK/DESCRIPTION=[.VMS]DESCRIP.MMS extensions + +GAWK uses AWKLIBPATH as either an environment variable or a logical name +to find the dynamic extensions. + Dynamic extensions need to be compiled with the same compiler options for floating point, pointer size, and symbol name handling as gawk. Alpha and Itanium should use IEEE floating point. The pointer size is 32 bits, and the symbol name handling is to be exact case with CRC shortening for symbols longer than 32 bits. -Alpha and Itanium: +Currently dynamic extensions have only been tested to work on VMS 8.3 and later +on both Alpha and Itanium. Dynamic extensions are not currently working on +VAX/VMS 7.3. -/name=(as_is,short) -/float=ieee/ieee_mode=denorm_results - -VAX: - -/name=(as_is,short) - -Compile time macros needed to be defined before the first VMS supplied -header file is included. +Compile time are macros needed to be defined before the first VMS supplied +header file is included. Usually this will be done with a config.h file. #if (__CRTL_VER >= 70200000) && !defined (__VAX) #define _LARGEFILE 1 @@ -72,6 +79,40 @@ header file is included. #endif #endif +Alpha and Itanium: + +/name=(as_is,short) +/float=ieee/ieee_mode=denorm_results + +VAX: + +/name=(as_is,short) + +The linker option files are [.vms]gawk_plugin.opt for Alpha and Itanium. + +As the VAX dynamic plug-in feature is not yet working, the files potentially +needed for a future VAX plugin are in [.vms.vax] directory of the source. + + +Testing GAWK on VMS: + +After you build gawk, you can test it with the [.vms]vmstest.com procedure. +The procedure takes a parameter that is either for a list of tests or +a specific test. The parameter clean cleans up files left over from running +the tests. + + $ set def [.test] + $ @[-.vms]vmstest.com bigtest + $ @[-.vms]vmstest.com clean + $ set def [-] + +To test the dynamic extensions on VMS 8.3 and later, use: + + $ set def [.test] + $ @[-.vms]vmstest.com extension + $ @[-.vms]vmstest.com clean + $ set def [-] + Installing GAWK on VMS: @@ -85,7 +126,8 @@ user logs on. If your gawk was installed by a PCSI kit into the GNV$GNU: directory tree, the program will be known as GNV$GNU:[bin]gnv$gawk.exe and the help file -will be GNV$GNU:[vms_help]gawk.hlp. +will be GNV$GNU:[vms_help]gawk.hlp. The GNV$GNU:[vms_bin]gawk_verb.cld can be +used to add GAWK and the alias AWK to a DCL command table. Optionally, the help entry can be loaded into a VMS help library. |$ LIBRARY/HELP SYS$HELP:HELPLIB [.VMS]GAWK.HLP @@ -168,3 +210,14 @@ will output times in GMT. The vmstest.com script needs SYS$TIMEZONE_NAME to be defined to match the SYS$TIMEZONE_RULE. Older versions of VMS do not define these logical names. + +TO DO Items (not in order of priority) + +1. Implement dynamic plug-ins on VAX. + +2. With the system() function, the status for DCL commands are not being + returned. + +3. Need gawk to accept logical names GNV$AWKPATH, GNV$AWKLIB, and + GNV$AWK_LIBARARY in addtion to the unprefixed names. This will allow + system wide default values to be set by an installation kit. diff --git a/doc/ChangeLog b/doc/ChangeLog index 78b781be..5ff9bc41 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2013-12-29 John E. Malmberg + + * gawktexi.in: VMS dynamic extensions. + 2013-12-26 Arnold D. Robbins * gawktexi.in: More minor additions / fixes. diff --git a/doc/gawk.info b/doc/gawk.info index 3be92873..4196f313 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -26309,12 +26309,24 @@ File: gawk.info, Node: VMS Dynamic Extensions, Next: VMS Installation Details, B.3.2.2 Compiling `gawk' Dynamic Extensions on VMS .................................................. -Dynamic extensions need to be compiled with the same compiler options -for floating point, pointer size, and symbol name handling as were used -to compile `gawk' itself. Alpha and Itanium should use IEEE floating -point. The pointer size is 32 bits, and the symbol name handling -should be exact case with CRC shortening for symbols longer than 32 -bits. +The extensions that have been ported to VMS can be built using one of +the following commands. + + $ MMS/DESCRIPTION=[.vms]descrip.mms extensions + +or: + + $ MMK/DESCRIPTION=[.vms]descrip.mms extensions + + `gawk' uses `AWKLIBPATH' as either an environment variable or a +logical name to find the dynamic extensions. + + Dynamic extensions need to be compiled with the same compiler +options for floating point, pointer size, and symbol name handling as +were used to compile `gawk' itself. Alpha and Itanium should use IEEE +floating point. The pointer size is 32 bits, and the symbol name +handling should be exact case with CRC shortening for symbols longer +than 32 bits. For Alpha and Itanium: @@ -32793,41 +32805,41 @@ Node: VMS Installation1054419 Node: VMS Compilation1055183 Ref: VMS Compilation-Footnote-11056798 Node: VMS Dynamic Extensions1056856 -Node: VMS Installation Details1057907 -Node: VMS Running1059741 -Node: VMS GNV1062575 -Node: VMS Old Gawk1063284 -Node: Bugs1063754 -Node: Other Versions1067674 -Node: Notes1073758 -Node: Compatibility Mode1074558 -Node: Additions1075341 -Node: Accessing The Source1076268 -Node: Adding Code1077708 -Node: New Ports1083753 -Node: Derived Files1087888 -Ref: Derived Files-Footnote-11093209 -Ref: Derived Files-Footnote-21093243 -Ref: Derived Files-Footnote-31093843 -Node: Future Extensions1093941 -Node: Implementation Limitations1094524 -Node: Extension Design1095776 -Node: Old Extension Problems1096930 -Ref: Old Extension Problems-Footnote-11098438 -Node: Extension New Mechanism Goals1098495 -Ref: Extension New Mechanism Goals-Footnote-11101860 -Node: Extension Other Design Decisions1102046 -Node: Extension Future Growth1104152 -Node: Old Extension Mechanism1104988 -Node: Basic Concepts1106728 -Node: Basic High Level1107409 -Ref: figure-general-flow1107680 -Ref: figure-process-flow1108279 -Ref: Basic High Level-Footnote-11111508 -Node: Basic Data Typing1111693 -Node: Glossary1115048 -Node: Copying1140510 -Node: GNU Free Documentation License1178067 -Node: Index1203204 +Node: VMS Installation Details1058229 +Node: VMS Running1060063 +Node: VMS GNV1062897 +Node: VMS Old Gawk1063606 +Node: Bugs1064076 +Node: Other Versions1067996 +Node: Notes1074080 +Node: Compatibility Mode1074880 +Node: Additions1075663 +Node: Accessing The Source1076590 +Node: Adding Code1078030 +Node: New Ports1084075 +Node: Derived Files1088210 +Ref: Derived Files-Footnote-11093531 +Ref: Derived Files-Footnote-21093565 +Ref: Derived Files-Footnote-31094165 +Node: Future Extensions1094263 +Node: Implementation Limitations1094846 +Node: Extension Design1096098 +Node: Old Extension Problems1097252 +Ref: Old Extension Problems-Footnote-11098760 +Node: Extension New Mechanism Goals1098817 +Ref: Extension New Mechanism Goals-Footnote-11102182 +Node: Extension Other Design Decisions1102368 +Node: Extension Future Growth1104474 +Node: Old Extension Mechanism1105310 +Node: Basic Concepts1107050 +Node: Basic High Level1107731 +Ref: figure-general-flow1108002 +Ref: figure-process-flow1108601 +Ref: Basic High Level-Footnote-11111830 +Node: Basic Data Typing1112015 +Node: Glossary1115370 +Node: Copying1140832 +Node: GNU Free Documentation License1178389 +Node: Index1203526  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 3692547a..24879b78 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -34920,6 +34920,23 @@ a PCSI kit for compatible with the GNV product. @node VMS Dynamic Extensions @appendixsubsubsec Compiling @command{gawk} Dynamic Extensions on VMS +The extensions that have been ported to VMS can be built using one of +the following commands. + +@example +$ @kbd{MMS/DESCRIPTION=[.vms]descrip.mms extensions} +@end example + +@noindent +or: + +@example +$ @kbd{MMK/DESCRIPTION=[.vms]descrip.mms extensions} +@end example + +@command{gawk} uses @code{AWKLIBPATH} as either an environment variable +or a logical name to find the dynamic extensions. + Dynamic extensions need to be compiled with the same compiler options for floating point, pointer size, and symbol name handling as were used to compile @command{gawk} itself. diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 2219dc45..9a853e17 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -34069,6 +34069,23 @@ a PCSI kit for compatible with the GNV product. @node VMS Dynamic Extensions @appendixsubsubsec Compiling @command{gawk} Dynamic Extensions on VMS +The extensions that have been ported to VMS can be built using one of +the following commands. + +@example +$ @kbd{MMS/DESCRIPTION=[.vms]descrip.mms extensions} +@end example + +@noindent +or: + +@example +$ @kbd{MMK/DESCRIPTION=[.vms]descrip.mms extensions} +@end example + +@command{gawk} uses @code{AWKLIBPATH} as either an environment variable +or a logical name to find the dynamic extensions. + Dynamic extensions need to be compiled with the same compiler options for floating point, pointer size, and symbol name handling as were used to compile @command{gawk} itself. diff --git a/extension/ChangeLog b/extension/ChangeLog index ad455cf2..965e0c66 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,8 @@ +2013-12-29 John E. Malmberg + + * filefuncs.c: Fix compile on VMS. + * time.c: Fix compile on VMS. + 2013-12-29 Arnold D. Robbins * gawkfts.c: Wrap include of in HAVE_SYS_PARAM_H, diff --git a/extension/filefuncs.c b/extension/filefuncs.c index a6e99e8e..3eb2a6b5 100644 --- a/extension/filefuncs.c +++ b/extension/filefuncs.c @@ -60,6 +60,7 @@ #ifndef minor #define minor(s) (0) #endif +#include #endif diff --git a/extension/time.c b/extension/time.c index 9fadfe54..b1e9a40a 100644 --- a/extension/time.c +++ b/extension/time.c @@ -39,6 +39,30 @@ #include #include +#ifdef __VMS +#define HAVE_NANOSLEEP +#define HAVE_GETTIMEOFDAY +#ifdef gettimeofday +#undef gettimeofday +#endif +#ifdef __ia64__ +/* nanosleep not working on IA64 */ +static int +vms_fake_nanosleep(const struct timespec *rqdly, struct timespec *rmdly) +{ + int result; + + result = sleep(rqdly->tv_sec); + if (result == 0) { + return 0; + } else { + return -1; + } +} +#define nanosleep(x,y) vms_fake_nanosleep(x, y) +#endif +#endif + #include "gawkapi.h" #include "gettext.h" diff --git a/test/ChangeLog b/test/ChangeLog index dd73cbc6..cc81d9a4 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,6 +1,7 @@ 2013-12-29 John E. Malmberg * fts.awk: Adjust for VMS. + * rwarray.awk: Adjust for VMS. 2013-12-10 Arnold D. Robbins diff --git a/test/fts.awk b/test/fts.awk index d2e55cab..70af560f 100644 --- a/test/fts.awk +++ b/test/fts.awk @@ -114,6 +114,13 @@ function process(pathname, data_array, for (i in stat_data) data_array[pathname]["."]["stat"][i] = stat_data[i] + os = "" + if (ENVIRON["AWKLIBPATH"] == "sys$disk:[-]") { + os = "VMS" + # Command in next section not valid on VMS. + return + } + command = ("ls -f " pathname) while ((command | getline direntry) > 0) { if (direntry == "." || direntry == "..") diff --git a/test/rwarray.awk b/test/rwarray.awk index 5d1b7e9d..0cb214ee 100644 --- a/test/rwarray.awk +++ b/test/rwarray.awk @@ -21,13 +21,20 @@ BEGIN { printf("dict[%s] = %s\n", dictindices[i], dict[dictindices[i]]) > "new.out" close("new.out"); - ret = system("cmp orig.out new.out") - - if (ret == 0) - print "old and new are equal - GOOD" - else - print "old and new are not equal - BAD" - - if (ret == 0 && !("KEEPIT" in ENVIRON)) - system("rm -f orig.bin orig.out new.out") + os = "" + if (ENVIRON["AWKLIBPATH"] == "sys$disk:[-]") { + os = "VMS" + # return status from system() on VMS can not be used here + } + if (os != "VMS") { + ret = system("cmp orig.out new.out") + + if (ret == 0) + print "old and new are equal - GOOD" + else + print "old and new are not equal - BAD" + + if (ret == 0 && !("KEEPIT" in ENVIRON)) + system("rm -f orig.bin orig.out new.out") + } } diff --git a/vms/ChangeLog b/vms/ChangeLog index 7e6c7311..ba017d64 100644 --- a/vms/ChangeLog +++ b/vms/ChangeLog @@ -1,7 +1,11 @@ 2013-12-29 John E. Malmberg - * descrip.mms: Build the dynamic extensions that will work. - Alpha and Itanium only. + * gawk_plugin.opt: New file. Needed to build plugins on IA64 + and ALPHA. + * generate_config_vms_h_gawk.com: Document which version + of VMS the mkstemp issue was seen. + * vms_popen: (pclose): Tolerate invalid file pointer. + * vmstest.com: Add tests for extensions ported to VMS. 2013-12-23 John E. Malmberg diff --git a/vms/gawk_plugin.opt b/vms/gawk_plugin.opt new file mode 100644 index 00000000..b0523d08 --- /dev/null +++ b/vms/gawk_plugin.opt @@ -0,0 +1,5 @@ +CASE_SENSITIVE=YES +SYMBOL_VECTOR=(plugin_is_GPL_compatible=DATA) +SYMBOL_VECTOR=(PLUGIN_IS_GPL_COMPATIBLE/plugin_is_GPL_compatible=DATA) +SYMBOL_VECTOR=(dl_load=PROCEDURE) +SYMBOL_VECTOR=(DL_LOAD/dl_load=PROCEDURE) diff --git a/vms/generate_config_vms_h_gawk.com b/vms/generate_config_vms_h_gawk.com index 03ad2015..3a02fdfe 100644 --- a/vms/generate_config_vms_h_gawk.com +++ b/vms/generate_config_vms_h_gawk.com @@ -135,7 +135,9 @@ $ write cvh "#pragma message disable (LONGDOUBLENYI)" $ write cvh "#endif" $! $! This stuff seems needed for VMS 7.3 and earlier, but not VMS 8.2+ +$! Need some more data as to which versions these issues are fixed in. $ write cvh "#if __VMS_VER <= 80200000" +$! mkstemp goes into an infinte loop in gawk in VAX/VMS 7.3 $ write cvh "#ifdef HAVE_MKSTEMP" $ write cvh "#undef HAVE_MKSTEMP" $ write cvh "#endif" diff --git a/vms/vax/ChangeLog b/vms/vax/ChangeLog new file mode 100644 index 00000000..526bc420 --- /dev/null +++ b/vms/vax/ChangeLog @@ -0,0 +1,7 @@ +2013-12-29 John Malmberg + + * ChangeLog: New directory. + * gawk_plugin_xfer.mar_exact, gawk_plugin_xfer.opt, + macro32_exactcase.com, macro32_exactcase.patch: + These are experimental files for future support of + dynamic extensions on VAX/VMS. diff --git a/vms/vax/gawk_plugin_xfer.mar_exact b/vms/vax/gawk_plugin_xfer.mar_exact new file mode 100644 index 00000000..e90babbd --- /dev/null +++ b/vms/vax/gawk_plugin_xfer.mar_exact @@ -0,0 +1,13 @@ + .PSECT GAWK_PLUGIN_XFERVECTORS - + PIC,USR,CON,REL,GBL,SHR,EXE,RD,NOWRT,QUAD + +; Exact case transfer vector and universal symbols +; + .ALIGN QUAD + .EXTERNAL plugin_is_GPL_compatible + + .TRANSFER dl_load + .MASK dl_load + JMP L^dl_load+2 + + .END diff --git a/vms/vax/gawk_plugin_xfer.opt b/vms/vax/gawk_plugin_xfer.opt new file mode 100644 index 00000000..75c134f7 --- /dev/null +++ b/vms/vax/gawk_plugin_xfer.opt @@ -0,0 +1,5 @@ +CASE_SENSITIVE=YES +UNIVERSAL=plugin_is_GPL_compatible +UNIVERSAL=dl_load +!CLUSTER=GAWK_PLUGIN_XFER +!COLLECT=GAWK_GLOBAL, GAWK_PLUGIN_XFERVECTORS diff --git a/vms/vax/macro32_exactcase.com b/vms/vax/macro32_exactcase.com new file mode 100644 index 00000000..79194e21 --- /dev/null +++ b/vms/vax/macro32_exactcase.com @@ -0,0 +1,16 @@ +$! +$! Patch the Macro32 compiler and optional assemble +$!----------------------------------------------------- +$ patched_macro = "sys$disk:[]macro32_exactcase.exe" +$ if f$search(patched_macro) .eqs. "" +$ then +$ copy sys$system:macro32.exe 'patched_macro' +$ patch @[.vms]macro32_exactcase.patch +$ endif +$! Usage: +$ xfer_file_source = p1 +$ if f$search(p1) .nes. "" +$ then +$ define/user macro32 'patched_macro' +$ macro/lis 'p1' +$ endif diff --git a/vms/vax/macro32_exactcase.patch b/vms/vax/macro32_exactcase.patch new file mode 100644 index 00000000..eda5cac7 --- /dev/null +++ b/vms/vax/macro32_exactcase.patch @@ -0,0 +1,11 @@ +macro32_exactcase.exe +SE EC +^X00000001 +RE /I +^X00012B1D +'BICB2 #^X00000020,R3' +EXIT +'BICB2 #^X00000000,R3' +EXI +U +EXI diff --git a/vms/vms_popen.c b/vms/vms_popen.c index 6c5c5086..d9568119 100644 --- a/vms/vms_popen.c +++ b/vms/vms_popen.c @@ -133,8 +133,8 @@ pclose( FILE *current ) int rval, cur = fileno(current); /* assert( cur >= 0 && cur < pipes_lim ); */ - if (pipes[cur].pmode == unopened) - return -1; /* should never happen */ + if ((cur < 0) || (pipes[cur].pmode == unopened)) + return -1; /* should never happen, but does with two-way */ rval = fclose(current); /* close temp file; if reading, we're done */ if (pipes[cur].pmode == writing) { diff --git a/vms/vmstest.com b/vms/vmstest.com index 75a6b460..f5c815bc 100644 --- a/vms/vmstest.com +++ b/vms/vmstest.com @@ -25,6 +25,7 @@ $ rm = "delete/noConfirm/noLog" $ mv = "rename/New_Vers" $ gawk = "$sys$disk:[-]gawk" $ AWKPATH_srcdir = "define/User AWKPATH sys$disk:[]" +$ AWKLIBPATH_dir = "define/User AWKLIBPATH sys$disk:[-]" $ $ listdepth = 0 $ pipeok = 0 @@ -159,6 +160,13 @@ $ type sys$input: $ list = "inetechu inetecht inetdayu inetdayt" $ gosub list_of_tests $ return +$! +$extension: echo "extension...." +$ list = "inplace1 filefuncs fnmatch fts functab4 ordchr" - + + " readdir revout revtwoway rwarray time" + gosub list_of_tests + return + $ $! list_of_tests: process 'list', a space-separated list of tests. $! Some tests assign their own 'list' and call us recursively, @@ -1805,6 +1813,86 @@ $ if $status then rm _vms_io2.tmp; $ cmp vms_io2.ok sys$disk:[]_vms_io2.vfc $ if $status then rm _vms_io2.vfc;* $ return +$! +$! +$inplace1: +$ set process/parse=extended ! ODS-5 only +$ echo "''test'" +$ filefunc_file = "[-]gawkapi.o" +$ open/write awkfile _'test'.awk +$ write awkfile "@load ""inplace""" +$! write awkfile "BEGIN {print ""before""}" +$ write awkfile " {gsub(/foo/, ""bar""); print}" +$! write awkfile "END {print ""after""}" +$ close awkfile +$ copy inplace^.1.in _'test'.1 +$ copy inplace^.2.in _'test'.2 +$ set noOn +$ AWKLIBPATH_dir +$ gawk -f _'test'.awk _'test'.1 _'test'.1.tmp 2>&1 +$ if .not. $status then call exit_code '$status' _'test'.1.tmp +$ AWKLIBPATH_dir +$ gawk -f _'test'.awk _'test'.2 _'test'.2.tmp 2>&1 +$ if .not. $status then call exit_code '$status' _'test'.2.tmp +$ set On +$ cmp 'test'.1.ok sys$disk:[]_'test'.1.tmp +$ if $status then rm _'test'.1.tmp;,_'test'.1; +$ cmp 'test'.2.ok sys$disk:[]_'test'.2.tmp +$ if $status then rm _'test'.2.tmp;,_'test'.2;,_'test'.awk; +$ return +$! +$filefuncs: +$fnmatch: +$functab4: +$ordchr: +$revout: +$revtwoway: +$time: +$ echo "''test'" +$ filefunc_file = "[-]gawkapi.o" +$ open/write gapi 'filefunc_file' +$ close gapi +$ set noOn +$ AWKLIBPATH_dir +$ gawk -f 'test'.awk 'test'.in >_'test'.tmp 2>&1 +$ if .not. $status then call exit_code '$status' _'test'.tmp +$ set On +$ cmp 'test'.ok sys$disk:[]_'test'.tmp +$ if $status then rm _'test'.tmp; +$ if f$search(filefunc_file) .nes. "" then rm 'filefunc_file'; +$ return +$! +$rwarray: +$ echo "''test'" +$ set noOn +$ AWKLIBPATH_dir +$ gawk -f 'test'.awk 'test'.in >_'test'.tmp 2>&1 +$ if .not. $status then call exit_code '$status' _'test'.tmp +$ set On +$ cmp orig.out new.out +$ if $status +$ then +$ open/append tout _'test'.tmp +$ write tout "old and new are equal - GOOD" +$ close tout +$ endif +$ cmp 'test'.ok sys$disk:[]_'test'.tmp +$ if $status then rm _'test'.tmp;,orig.out;,new.out; +$ return +$! +$readdir: +$fts: +$ echo "''test'" +$ set noOn +$ AWKLIBPATH_dir +$ gawk -f 'test'.awk >_'test'.tmp 2>&1 +$ if .not. $status +$ then +$ call exit_code '$status' _'test'.tmp +$ write sys$output _'test'.tmp +$ endif +$ set On +$ return $ $clean: $ if f$search("_*.*") .nes."" then rm _*.tmp;* -- cgit v1.2.3 From 6b76f3d292993fe2a15a515d078726cd68fd78d8 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 30 Dec 2013 22:02:32 +0200 Subject: Fix ignrcas2 test to use right locale. --- test/ChangeLog | 6 ++++++ test/Makefile.am | 2 +- test/Makefile.in | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/test/ChangeLog b/test/ChangeLog index 378c6ae3..c941f51c 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,9 @@ +2013-12-30 Arnold D. Robbins + + * Makefile.am (ignrcas2): Change to use en_US.UTF-8; it + seems that plain en_US doesn't exist anymore. Thanks to + Richard Palo. + 2013-12-10 Arnold D. Robbins * Makefile.am: Remove instances of "" that were incorrect. diff --git a/test/Makefile.am b/test/Makefile.am index fb265747..371a13ea 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1452,7 +1452,7 @@ widesub4:: ignrcas2:: @echo $@ - @GAWKLOCALE=en_US ; export GAWKLOCALE ; \ + @GAWKLOCALE=en_US.UTF-8 ; export GAWKLOCALE ; \ $(AWK) -f "$(srcdir)"/$@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >> _$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ diff --git a/test/Makefile.in b/test/Makefile.in index 421767b4..c2efe1ed 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -1876,7 +1876,7 @@ widesub4:: ignrcas2:: @echo $@ - @GAWKLOCALE=en_US ; export GAWKLOCALE ; \ + @GAWKLOCALE=en_US.UTF-8 ; export GAWKLOCALE ; \ $(AWK) -f "$(srcdir)"/$@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >> _$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ -- cgit v1.2.3 From 65b5afc0027911abc041cfbe625ad6bd9f967ccd Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 3 Jan 2014 12:26:37 +0200 Subject: New node in gawktexi.in. --- doc/ChangeLog | 4 + doc/gawk.info | 1063 ++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 5 + doc/gawktexi.in | 17 + 4 files changed, 562 insertions(+), 527 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 4dc782e1..1d4d9f9d 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-01-03 Arnold D. Robbins + + * gawktexi.in (Full Line Fields): New node. + 2013-12-26 Arnold D. Robbins * gawktexi.in: More minor additions / fixes. diff --git a/doc/gawk.info b/doc/gawk.info index 358551af..95522fed 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -193,6 +193,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) field. * Command Line Field Separator:: Setting `FS' from the command-line. +* Full Line Fields:: Making the full line be a single field. * Field Splitting Summary:: Some final points and a summary table. * Constant Size:: Reading constant width data. * Splitting By Content:: Defining Fields By Content @@ -4381,6 +4382,7 @@ File: gawk.info, Node: Field Separators, Next: Constant Size, Prev: Changing * Regexp Field Splitting:: Using regexps as the field separator. * Single Character Fields:: Making each character a separate field. * Command Line Field Separator:: Setting `FS' from the command-line. +* Full Line Fields:: Making the full line be a single field. * Field Splitting Summary:: Some final points and a summary table. The "field separator", which is either a single character or a @@ -4562,7 +4564,7 @@ Options::), if `FS' is the null string, then `gawk' also behaves this way.  -File: gawk.info, Node: Command Line Field Separator, Next: Field Splitting Summary, Prev: Single Character Fields, Up: Field Separators +File: gawk.info, Node: Command Line Field Separator, Next: Full Line Fields, Prev: Single Character Fields, Up: Field Separators 4.5.4 Setting `FS' from the Command Line ---------------------------------------- @@ -4649,9 +4651,15 @@ the entries for users who have no password: awk -F: '$2 == ""' /etc/passwd  -File: gawk.info, Node: Field Splitting Summary, Prev: Command Line Field Separator, Up: Field Separators +File: gawk.info, Node: Full Line Fields, Next: Field Splitting Summary, Prev: Command Line Field Separator, Up: Field Separators -4.5.5 Field-Splitting Summary +4.5.5 Making The Full Line Be A Single Field +-------------------------------------------- + + +File: gawk.info, Node: Field Splitting Summary, Prev: Full Line Fields, Up: Field Separators + +4.5.6 Field-Splitting Summary ----------------------------- It is important to remember that when you assign a string constant as @@ -29898,7 +29906,7 @@ Index * Beebe, Nelson: Acknowledgments. (line 60) * BEGIN pattern <1>: Profiling. (line 62) * BEGIN pattern <2>: BEGIN/END. (line 6) -* BEGIN pattern <3>: Field Separators. (line 44) +* BEGIN pattern <3>: Field Separators. (line 45) * BEGIN pattern: Records. (line 29) * BEGIN pattern, assert() user-defined function and: Assert Function. (line 83) @@ -30557,8 +30565,8 @@ Index * field operator $: Fields. (line 19) * field operators, dollar sign as: Fields. (line 19) * field separators <1>: User-modified. (line 56) -* field separators: Field Separators. (line 14) -* field separators, choice of: Field Separators. (line 50) +* field separators: Field Separators. (line 15) +* field separators, choice of: Field Separators. (line 51) * field separators, FIELDWIDTHS variable and: User-modified. (line 35) * field separators, FPAT variable and: User-modified. (line 45) * field separators, in multiline records: Multiple Line. (line 41) @@ -30569,7 +30577,7 @@ Index * field separators, POSIX and: Fields. (line 6) * field separators, regular expressions as <1>: Regexp Field Splitting. (line 6) -* field separators, regular expressions as: Field Separators. (line 50) +* field separators, regular expressions as: Field Separators. (line 51) * field separators, See Also OFS: Changing Fields. (line 64) * field separators, spaces as: Cut Program. (line 109) * fields <1>: Basic High Level. (line 73) @@ -30582,7 +30590,7 @@ Index * fields, number of: Fields. (line 33) * fields, numbers: Nonconstant Fields. (line 6) * fields, printing: Print Examples. (line 21) -* fields, separating: Field Separators. (line 14) +* fields, separating: Field Separators. (line 15) * fields, single-character: Single Character Fields. (line 6) * FIELDWIDTHS variable <1>: User-modified. (line 35) @@ -30691,12 +30699,12 @@ Index * Free Software Foundation (FSF): Manual History. (line 6) * FreeBSD: Glossary. (line 624) * FS variable <1>: User-modified. (line 56) -* FS variable: Field Separators. (line 14) +* FS variable: Field Separators. (line 15) * FS variable, --field-separator option and: Options. (line 21) * FS variable, as null string: Single Character Fields. (line 20) * FS variable, as TAB character: Options. (line 259) -* FS variable, changing value of: Field Separators. (line 34) +* FS variable, changing value of: Field Separators. (line 35) * FS variable, running awk programs and: Cut Program. (line 68) * FS variable, setting from command line: Command Line Field Separator. (line 6) @@ -31632,7 +31640,7 @@ Index * regexp constants, vs. string constants: Computed Regexps. (line 38) * regexp, See regular expressions: Regexp. (line 6) * regular expressions: Regexp. (line 6) -* regular expressions as field separators: Field Separators. (line 50) +* regular expressions as field separators: Field Separators. (line 51) * regular expressions, anchors in: Regexp Operators. (line 22) * regular expressions, as field separators: Regexp Field Splitting. (line 6) @@ -32002,7 +32010,7 @@ Index * troubleshooting, --non-decimal-data option: Options. (line 207) * troubleshooting, == operator: Comparison Operators. (line 37) -* troubleshooting, awk uses FS not IFS: Field Separators. (line 29) +* troubleshooting, awk uses FS not IFS: Field Separators. (line 30) * troubleshooting, backslash before nonspecial character: Escape Sequences. (line 112) * troubleshooting, division: Arithmetic Ops. (line 44) @@ -32197,520 +32205,521 @@ Index  Tag Table: Node: Top1360 -Node: Foreword40460 -Node: Preface44805 -Ref: Preface-Footnote-147858 -Ref: Preface-Footnote-247954 -Node: History48186 -Node: Names50560 -Ref: Names-Footnote-152037 -Node: This Manual52109 -Ref: This Manual-Footnote-157883 -Node: Conventions57983 -Node: Manual History60139 -Ref: Manual History-Footnote-163587 -Ref: Manual History-Footnote-263628 -Node: How To Contribute63702 -Node: Acknowledgments64846 -Node: Getting Started69055 -Node: Running gawk71434 -Node: One-shot72620 -Node: Read Terminal73845 -Ref: Read Terminal-Footnote-175495 -Ref: Read Terminal-Footnote-275771 -Node: Long75942 -Node: Executable Scripts77318 -Ref: Executable Scripts-Footnote-179151 -Ref: Executable Scripts-Footnote-279253 -Node: Comments79800 -Node: Quoting82267 -Node: DOS Quoting86890 -Node: Sample Data Files87565 -Node: Very Simple90609 -Node: Two Rules95208 -Node: More Complex97355 -Ref: More Complex-Footnote-1100285 -Node: Statements/Lines100370 -Ref: Statements/Lines-Footnote-1104832 -Node: Other Features105097 -Node: When106025 -Node: Invoking Gawk108172 -Node: Command Line109633 -Node: Options110416 -Ref: Options-Footnote-1125808 -Node: Other Arguments125833 -Node: Naming Standard Input128491 -Node: Environment Variables129585 -Node: AWKPATH Variable130143 -Ref: AWKPATH Variable-Footnote-1132901 -Node: AWKLIBPATH Variable133161 -Node: Other Environment Variables133879 -Node: Exit Status136842 -Node: Include Files137517 -Node: Loading Shared Libraries141086 -Node: Obsolete142450 -Node: Undocumented143147 -Node: Regexp143389 -Node: Regexp Usage144778 -Node: Escape Sequences146804 -Node: Regexp Operators152473 -Ref: Regexp Operators-Footnote-1159853 -Ref: Regexp Operators-Footnote-2160000 -Node: Bracket Expressions160098 -Ref: table-char-classes161988 -Node: GNU Regexp Operators164511 -Node: Case-sensitivity168234 -Ref: Case-sensitivity-Footnote-1171202 -Ref: Case-sensitivity-Footnote-2171437 -Node: Leftmost Longest171545 -Node: Computed Regexps172746 -Node: Reading Files176083 -Node: Records178085 -Ref: Records-Footnote-1186974 -Node: Fields187011 -Ref: Fields-Footnote-1190044 -Node: Nonconstant Fields190130 -Node: Changing Fields192332 -Node: Field Separators198291 -Node: Default Field Splitting200920 -Node: Regexp Field Splitting202037 -Node: Single Character Fields205379 -Node: Command Line Field Separator206438 -Node: Field Splitting Summary209879 -Ref: Field Splitting Summary-Footnote-1212990 -Node: Constant Size213091 -Node: Splitting By Content217675 -Ref: Splitting By Content-Footnote-1221401 -Node: Multiple Line221441 -Ref: Multiple Line-Footnote-1227288 -Node: Getline227467 -Node: Plain Getline229683 -Node: Getline/Variable231778 -Node: Getline/File232925 -Node: Getline/Variable/File234266 -Ref: Getline/Variable/File-Footnote-1235865 -Node: Getline/Pipe235952 -Node: Getline/Variable/Pipe238651 -Node: Getline/Coprocess239758 -Node: Getline/Variable/Coprocess241010 -Node: Getline Notes241747 -Node: Getline Summary244534 -Ref: table-getline-variants244942 -Node: Read Timeout245854 -Ref: Read Timeout-Footnote-1249595 -Node: Command line directories249652 -Node: Printing250282 -Node: Print251913 -Node: Print Examples253250 -Node: Output Separators256034 -Node: OFMT257794 -Node: Printf259152 -Node: Basic Printf260058 -Node: Control Letters261597 -Node: Format Modifiers265409 -Node: Printf Examples271418 -Node: Redirection274133 -Node: Special Files281098 -Node: Special FD281631 -Ref: Special FD-Footnote-1285256 -Node: Special Network285330 -Node: Special Caveats286180 -Node: Close Files And Pipes286976 -Ref: Close Files And Pipes-Footnote-1293959 -Ref: Close Files And Pipes-Footnote-2294107 -Node: Expressions294257 -Node: Values295389 -Node: Constants296065 -Node: Scalar Constants296745 -Ref: Scalar Constants-Footnote-1297604 -Node: Nondecimal-numbers297786 -Node: Regexp Constants300786 -Node: Using Constant Regexps301261 -Node: Variables304316 -Node: Using Variables304971 -Node: Assignment Options306695 -Node: Conversion308567 -Ref: table-locale-affects314068 -Ref: Conversion-Footnote-1314692 -Node: All Operators314801 -Node: Arithmetic Ops315431 -Node: Concatenation317936 -Ref: Concatenation-Footnote-1320728 -Node: Assignment Ops320848 -Ref: table-assign-ops325836 -Node: Increment Ops327167 -Node: Truth Values and Conditions330601 -Node: Truth Values331684 -Node: Typing and Comparison332733 -Node: Variable Typing333526 -Ref: Variable Typing-Footnote-1337423 -Node: Comparison Operators337545 -Ref: table-relational-ops337955 -Node: POSIX String Comparison341504 -Ref: POSIX String Comparison-Footnote-1342460 -Node: Boolean Ops342598 -Ref: Boolean Ops-Footnote-1346676 -Node: Conditional Exp346767 -Node: Function Calls348499 -Node: Precedence352093 -Node: Locales355762 -Node: Patterns and Actions356851 -Node: Pattern Overview357905 -Node: Regexp Patterns359574 -Node: Expression Patterns360117 -Node: Ranges363802 -Node: BEGIN/END366768 -Node: Using BEGIN/END367530 -Ref: Using BEGIN/END-Footnote-1370261 -Node: I/O And BEGIN/END370367 -Node: BEGINFILE/ENDFILE372649 -Node: Empty375563 -Node: Using Shell Variables375879 -Node: Action Overview378164 -Node: Statements380521 -Node: If Statement382375 -Node: While Statement383874 -Node: Do Statement385918 -Node: For Statement387074 -Node: Switch Statement390226 -Node: Break Statement392323 -Node: Continue Statement394313 -Node: Next Statement396106 -Node: Nextfile Statement398496 -Node: Exit Statement401139 -Node: Built-in Variables403555 -Node: User-modified404650 -Ref: User-modified-Footnote-1413008 -Node: Auto-set413070 -Ref: Auto-set-Footnote-1426148 -Ref: Auto-set-Footnote-2426353 -Node: ARGC and ARGV426409 -Node: Arrays430260 -Node: Array Basics431765 -Node: Array Intro432591 -Node: Reference to Elements436908 -Node: Assigning Elements439178 -Node: Array Example439669 -Node: Scanning an Array441401 -Node: Controlling Scanning443715 -Ref: Controlling Scanning-Footnote-1448802 -Node: Delete449118 -Ref: Delete-Footnote-1451883 -Node: Numeric Array Subscripts451940 -Node: Uninitialized Subscripts454123 -Node: Multidimensional455750 -Node: Multiscanning458842 -Node: Arrays of Arrays460431 -Node: Functions465071 -Node: Built-in465890 -Node: Calling Built-in466968 -Node: Numeric Functions468956 -Ref: Numeric Functions-Footnote-1472788 -Ref: Numeric Functions-Footnote-2473145 -Ref: Numeric Functions-Footnote-3473193 -Node: String Functions473462 -Ref: String Functions-Footnote-1496382 -Ref: String Functions-Footnote-2496511 -Ref: String Functions-Footnote-3496759 -Node: Gory Details496846 -Ref: table-sub-escapes498525 -Ref: table-sub-posix-92499879 -Ref: table-sub-proposed501230 -Ref: table-posix-sub502584 -Ref: table-gensub-escapes504129 -Ref: Gory Details-Footnote-1505305 -Ref: Gory Details-Footnote-2505356 -Node: I/O Functions505507 -Ref: I/O Functions-Footnote-1512492 -Node: Time Functions512639 -Ref: Time Functions-Footnote-1523572 -Ref: Time Functions-Footnote-2523640 -Ref: Time Functions-Footnote-3523798 -Ref: Time Functions-Footnote-4523909 -Ref: Time Functions-Footnote-5524021 -Ref: Time Functions-Footnote-6524248 -Node: Bitwise Functions524514 -Ref: table-bitwise-ops525076 -Ref: Bitwise Functions-Footnote-1529297 -Node: Type Functions529481 -Node: I18N Functions530632 -Node: User-defined532259 -Node: Definition Syntax533063 -Ref: Definition Syntax-Footnote-1537973 -Node: Function Example538042 -Node: Function Caveats540636 -Node: Calling A Function541057 -Node: Variable Scope542172 -Node: Pass By Value/Reference545135 -Node: Return Statement548643 -Node: Dynamic Typing551624 -Node: Indirect Calls552555 -Node: Library Functions562240 -Ref: Library Functions-Footnote-1565753 -Ref: Library Functions-Footnote-2565896 -Node: Library Names566067 -Ref: Library Names-Footnote-1569538 -Ref: Library Names-Footnote-2569758 -Node: General Functions569844 -Node: Strtonum Function570872 -Node: Assert Function573802 -Node: Round Function577128 -Node: Cliff Random Function578671 -Node: Ordinal Functions579687 -Ref: Ordinal Functions-Footnote-1582757 -Ref: Ordinal Functions-Footnote-2583009 -Node: Join Function583218 -Ref: Join Function-Footnote-1584989 -Node: Getlocaltime Function585189 -Node: Readfile Function588930 -Node: Data File Management590769 -Node: Filetrans Function591401 -Node: Rewind Function595470 -Node: File Checking596857 -Node: Empty Files597951 -Node: Ignoring Assigns600181 -Node: Getopt Function601734 -Ref: Getopt Function-Footnote-1613037 -Node: Passwd Functions613240 -Ref: Passwd Functions-Footnote-1622215 -Node: Group Functions622303 -Node: Walking Arrays630387 -Node: Sample Programs632524 -Node: Running Examples633198 -Node: Clones633926 -Node: Cut Program635150 -Node: Egrep Program644995 -Ref: Egrep Program-Footnote-1652768 -Node: Id Program652878 -Node: Split Program656494 -Ref: Split Program-Footnote-1660013 -Node: Tee Program660141 -Node: Uniq Program662944 -Node: Wc Program670373 -Ref: Wc Program-Footnote-1674639 -Ref: Wc Program-Footnote-2674839 -Node: Miscellaneous Programs674931 -Node: Dupword Program676119 -Node: Alarm Program678150 -Node: Translate Program682903 -Ref: Translate Program-Footnote-1687290 -Ref: Translate Program-Footnote-2687538 -Node: Labels Program687672 -Ref: Labels Program-Footnote-1691043 -Node: Word Sorting691127 -Node: History Sorting695011 -Node: Extract Program696850 -Ref: Extract Program-Footnote-1704353 -Node: Simple Sed704481 -Node: Igawk Program707543 -Ref: Igawk Program-Footnote-1722700 -Ref: Igawk Program-Footnote-2722901 -Node: Anagram Program723039 -Node: Signature Program726107 -Node: Advanced Features727207 -Node: Nondecimal Data729093 -Node: Array Sorting730676 -Node: Controlling Array Traversal731373 -Node: Array Sorting Functions739657 -Ref: Array Sorting Functions-Footnote-1743526 -Node: Two-way I/O743720 -Ref: Two-way I/O-Footnote-1749152 -Node: TCP/IP Networking749222 -Node: Profiling752066 -Node: Internationalization759563 -Node: I18N and L10N760988 -Node: Explaining gettext761674 -Ref: Explaining gettext-Footnote-1766742 -Ref: Explaining gettext-Footnote-2766926 -Node: Programmer i18n767091 -Node: Translator i18n771293 -Node: String Extraction772086 -Ref: String Extraction-Footnote-1773047 -Node: Printf Ordering773133 -Ref: Printf Ordering-Footnote-1775917 -Node: I18N Portability775981 -Ref: I18N Portability-Footnote-1778430 -Node: I18N Example778493 -Ref: I18N Example-Footnote-1781131 -Node: Gawk I18N781203 -Node: Debugger781824 -Node: Debugging782795 -Node: Debugging Concepts783228 -Node: Debugging Terms785084 -Node: Awk Debugging787681 -Node: Sample Debugging Session788573 -Node: Debugger Invocation789093 -Node: Finding The Bug790425 -Node: List of Debugger Commands796913 -Node: Breakpoint Control798247 -Node: Debugger Execution Control801911 -Node: Viewing And Changing Data805271 -Node: Execution Stack808627 -Node: Debugger Info810094 -Node: Miscellaneous Debugger Commands814076 -Node: Readline Support819252 -Node: Limitations820083 -Node: Arbitrary Precision Arithmetic822335 -Ref: Arbitrary Precision Arithmetic-Footnote-1823984 -Node: General Arithmetic824132 -Node: Floating Point Issues825852 -Node: String Conversion Precision826733 -Ref: String Conversion Precision-Footnote-1828438 -Node: Unexpected Results828547 -Node: POSIX Floating Point Problems830700 -Ref: POSIX Floating Point Problems-Footnote-1834525 -Node: Integer Programming834563 -Node: Floating-point Programming836302 -Ref: Floating-point Programming-Footnote-1842633 -Ref: Floating-point Programming-Footnote-2842903 -Node: Floating-point Representation843167 -Node: Floating-point Context844332 -Ref: table-ieee-formats845171 -Node: Rounding Mode846555 -Ref: table-rounding-modes847034 -Ref: Rounding Mode-Footnote-1850049 -Node: Gawk and MPFR850228 -Node: Arbitrary Precision Floats851483 -Ref: Arbitrary Precision Floats-Footnote-1853926 -Node: Setting Precision854242 -Ref: table-predefined-precision-strings854928 -Node: Setting Rounding Mode857073 -Ref: table-gawk-rounding-modes857477 -Node: Floating-point Constants858664 -Node: Changing Precision860093 -Ref: Changing Precision-Footnote-1861490 -Node: Exact Arithmetic861664 -Node: Arbitrary Precision Integers864802 -Ref: Arbitrary Precision Integers-Footnote-1867820 -Node: Dynamic Extensions867967 -Node: Extension Intro869425 -Node: Plugin License870690 -Node: Extension Mechanism Outline871375 -Ref: load-extension871792 -Ref: load-new-function873270 -Ref: call-new-function874265 -Node: Extension API Description876280 -Node: Extension API Functions Introduction877493 -Node: General Data Types882359 -Ref: General Data Types-Footnote-1887964 -Node: Requesting Values888263 -Ref: table-value-types-returned888994 -Node: Constructor Functions889948 -Node: Registration Functions892968 -Node: Extension Functions893653 -Node: Exit Callback Functions895878 -Node: Extension Version String897127 -Node: Input Parsers897777 -Node: Output Wrappers907534 -Node: Two-way processors912044 -Node: Printing Messages914252 -Ref: Printing Messages-Footnote-1915329 -Node: Updating `ERRNO'915481 -Node: Accessing Parameters916220 -Node: Symbol Table Access917450 -Node: Symbol table by name917962 -Node: Symbol table by cookie919709 -Ref: Symbol table by cookie-Footnote-1923839 -Node: Cached values923902 -Ref: Cached values-Footnote-1927351 -Node: Array Manipulation927442 -Ref: Array Manipulation-Footnote-1928540 -Node: Array Data Types928579 -Ref: Array Data Types-Footnote-1931282 -Node: Array Functions931374 -Node: Flattening Arrays935140 -Node: Creating Arrays941992 -Node: Extension API Variables946717 -Node: Extension Versioning947353 -Node: Extension API Informational Variables949254 -Node: Extension API Boilerplate950340 -Node: Finding Extensions954144 -Node: Extension Example954704 -Node: Internal File Description955434 -Node: Internal File Ops959525 -Ref: Internal File Ops-Footnote-1971033 -Node: Using Internal File Ops971173 -Ref: Using Internal File Ops-Footnote-1973526 -Node: Extension Samples973792 -Node: Extension Sample File Functions975316 -Node: Extension Sample Fnmatch983801 -Node: Extension Sample Fork985527 -Node: Extension Sample Inplace986745 -Node: Extension Sample Ord988523 -Node: Extension Sample Readdir989359 -Node: Extension Sample Revout990891 -Node: Extension Sample Rev2way991484 -Node: Extension Sample Read write array992174 -Node: Extension Sample Readfile994057 -Node: Extension Sample API Tests994875 -Node: Extension Sample Time995400 -Node: gawkextlib996764 -Node: Language History999545 -Node: V7/SVR3.11001067 -Node: SVR41003387 -Node: POSIX1004829 -Node: BTL1006215 -Node: POSIX/GNU1006949 -Node: Common Extensions1012484 -Node: Ranges and Locales1013790 -Ref: Ranges and Locales-Footnote-11018408 -Ref: Ranges and Locales-Footnote-21018435 -Ref: Ranges and Locales-Footnote-31018695 -Node: Contributors1018916 -Node: Installation1023991 -Node: Gawk Distribution1024885 -Node: Getting1025369 -Node: Extracting1026195 -Node: Distribution contents1027887 -Node: Unix Installation1033592 -Node: Quick Installation1034209 -Node: Additional Configuration Options1036653 -Node: Configuration Philosophy1038389 -Node: Non-Unix Installation1040743 -Node: PC Installation1041201 -Node: PC Binary Installation1042500 -Node: PC Compiling1044348 -Node: PC Testing1047292 -Node: PC Using1048468 -Node: Cygwin1052653 -Node: MSYS1053653 -Node: VMS Installation1054167 -Node: VMS Compilation1054770 -Ref: VMS Compilation-Footnote-11055777 -Node: VMS Installation Details1055835 -Node: VMS Running1057470 -Node: VMS Old Gawk1059077 -Node: Bugs1059551 -Node: Other Versions1063407 -Node: Notes1069491 -Node: Compatibility Mode1070291 -Node: Additions1071074 -Node: Accessing The Source1072001 -Node: Adding Code1073441 -Node: New Ports1079486 -Node: Derived Files1083621 -Ref: Derived Files-Footnote-11088942 -Ref: Derived Files-Footnote-21088976 -Ref: Derived Files-Footnote-31089576 -Node: Future Extensions1089674 -Node: Implementation Limitations1090257 -Node: Extension Design1091509 -Node: Old Extension Problems1092663 -Ref: Old Extension Problems-Footnote-11094171 -Node: Extension New Mechanism Goals1094228 -Ref: Extension New Mechanism Goals-Footnote-11097593 -Node: Extension Other Design Decisions1097779 -Node: Extension Future Growth1099885 -Node: Old Extension Mechanism1100721 -Node: Basic Concepts1102461 -Node: Basic High Level1103142 -Ref: figure-general-flow1103413 -Ref: figure-process-flow1104012 -Ref: Basic High Level-Footnote-11107241 -Node: Basic Data Typing1107426 -Node: Glossary1110781 -Node: Copying1136243 -Node: GNU Free Documentation License1173800 -Node: Index1198937 +Node: Foreword40540 +Node: Preface44885 +Ref: Preface-Footnote-147938 +Ref: Preface-Footnote-248034 +Node: History48266 +Node: Names50640 +Ref: Names-Footnote-152117 +Node: This Manual52189 +Ref: This Manual-Footnote-157963 +Node: Conventions58063 +Node: Manual History60219 +Ref: Manual History-Footnote-163667 +Ref: Manual History-Footnote-263708 +Node: How To Contribute63782 +Node: Acknowledgments64926 +Node: Getting Started69135 +Node: Running gawk71514 +Node: One-shot72700 +Node: Read Terminal73925 +Ref: Read Terminal-Footnote-175575 +Ref: Read Terminal-Footnote-275851 +Node: Long76022 +Node: Executable Scripts77398 +Ref: Executable Scripts-Footnote-179231 +Ref: Executable Scripts-Footnote-279333 +Node: Comments79880 +Node: Quoting82347 +Node: DOS Quoting86970 +Node: Sample Data Files87645 +Node: Very Simple90689 +Node: Two Rules95288 +Node: More Complex97435 +Ref: More Complex-Footnote-1100365 +Node: Statements/Lines100450 +Ref: Statements/Lines-Footnote-1104912 +Node: Other Features105177 +Node: When106105 +Node: Invoking Gawk108252 +Node: Command Line109713 +Node: Options110496 +Ref: Options-Footnote-1125888 +Node: Other Arguments125913 +Node: Naming Standard Input128571 +Node: Environment Variables129665 +Node: AWKPATH Variable130223 +Ref: AWKPATH Variable-Footnote-1132981 +Node: AWKLIBPATH Variable133241 +Node: Other Environment Variables133959 +Node: Exit Status136922 +Node: Include Files137597 +Node: Loading Shared Libraries141166 +Node: Obsolete142530 +Node: Undocumented143227 +Node: Regexp143469 +Node: Regexp Usage144858 +Node: Escape Sequences146884 +Node: Regexp Operators152553 +Ref: Regexp Operators-Footnote-1159933 +Ref: Regexp Operators-Footnote-2160080 +Node: Bracket Expressions160178 +Ref: table-char-classes162068 +Node: GNU Regexp Operators164591 +Node: Case-sensitivity168314 +Ref: Case-sensitivity-Footnote-1171282 +Ref: Case-sensitivity-Footnote-2171517 +Node: Leftmost Longest171625 +Node: Computed Regexps172826 +Node: Reading Files176163 +Node: Records178165 +Ref: Records-Footnote-1187054 +Node: Fields187091 +Ref: Fields-Footnote-1190124 +Node: Nonconstant Fields190210 +Node: Changing Fields192412 +Node: Field Separators198371 +Node: Default Field Splitting201073 +Node: Regexp Field Splitting202190 +Node: Single Character Fields205532 +Node: Command Line Field Separator206591 +Node: Full Line Fields210025 +Node: Field Splitting Summary210252 +Ref: Field Splitting Summary-Footnote-1213351 +Node: Constant Size213452 +Node: Splitting By Content218036 +Ref: Splitting By Content-Footnote-1221762 +Node: Multiple Line221802 +Ref: Multiple Line-Footnote-1227649 +Node: Getline227828 +Node: Plain Getline230044 +Node: Getline/Variable232139 +Node: Getline/File233286 +Node: Getline/Variable/File234627 +Ref: Getline/Variable/File-Footnote-1236226 +Node: Getline/Pipe236313 +Node: Getline/Variable/Pipe239012 +Node: Getline/Coprocess240119 +Node: Getline/Variable/Coprocess241371 +Node: Getline Notes242108 +Node: Getline Summary244895 +Ref: table-getline-variants245303 +Node: Read Timeout246215 +Ref: Read Timeout-Footnote-1249956 +Node: Command line directories250013 +Node: Printing250643 +Node: Print252274 +Node: Print Examples253611 +Node: Output Separators256395 +Node: OFMT258155 +Node: Printf259513 +Node: Basic Printf260419 +Node: Control Letters261958 +Node: Format Modifiers265770 +Node: Printf Examples271779 +Node: Redirection274494 +Node: Special Files281459 +Node: Special FD281992 +Ref: Special FD-Footnote-1285617 +Node: Special Network285691 +Node: Special Caveats286541 +Node: Close Files And Pipes287337 +Ref: Close Files And Pipes-Footnote-1294320 +Ref: Close Files And Pipes-Footnote-2294468 +Node: Expressions294618 +Node: Values295750 +Node: Constants296426 +Node: Scalar Constants297106 +Ref: Scalar Constants-Footnote-1297965 +Node: Nondecimal-numbers298147 +Node: Regexp Constants301147 +Node: Using Constant Regexps301622 +Node: Variables304677 +Node: Using Variables305332 +Node: Assignment Options307056 +Node: Conversion308928 +Ref: table-locale-affects314429 +Ref: Conversion-Footnote-1315053 +Node: All Operators315162 +Node: Arithmetic Ops315792 +Node: Concatenation318297 +Ref: Concatenation-Footnote-1321089 +Node: Assignment Ops321209 +Ref: table-assign-ops326197 +Node: Increment Ops327528 +Node: Truth Values and Conditions330962 +Node: Truth Values332045 +Node: Typing and Comparison333094 +Node: Variable Typing333887 +Ref: Variable Typing-Footnote-1337784 +Node: Comparison Operators337906 +Ref: table-relational-ops338316 +Node: POSIX String Comparison341865 +Ref: POSIX String Comparison-Footnote-1342821 +Node: Boolean Ops342959 +Ref: Boolean Ops-Footnote-1347037 +Node: Conditional Exp347128 +Node: Function Calls348860 +Node: Precedence352454 +Node: Locales356123 +Node: Patterns and Actions357212 +Node: Pattern Overview358266 +Node: Regexp Patterns359935 +Node: Expression Patterns360478 +Node: Ranges364163 +Node: BEGIN/END367129 +Node: Using BEGIN/END367891 +Ref: Using BEGIN/END-Footnote-1370622 +Node: I/O And BEGIN/END370728 +Node: BEGINFILE/ENDFILE373010 +Node: Empty375924 +Node: Using Shell Variables376240 +Node: Action Overview378525 +Node: Statements380882 +Node: If Statement382736 +Node: While Statement384235 +Node: Do Statement386279 +Node: For Statement387435 +Node: Switch Statement390587 +Node: Break Statement392684 +Node: Continue Statement394674 +Node: Next Statement396467 +Node: Nextfile Statement398857 +Node: Exit Statement401500 +Node: Built-in Variables403916 +Node: User-modified405011 +Ref: User-modified-Footnote-1413369 +Node: Auto-set413431 +Ref: Auto-set-Footnote-1426509 +Ref: Auto-set-Footnote-2426714 +Node: ARGC and ARGV426770 +Node: Arrays430621 +Node: Array Basics432126 +Node: Array Intro432952 +Node: Reference to Elements437269 +Node: Assigning Elements439539 +Node: Array Example440030 +Node: Scanning an Array441762 +Node: Controlling Scanning444076 +Ref: Controlling Scanning-Footnote-1449163 +Node: Delete449479 +Ref: Delete-Footnote-1452244 +Node: Numeric Array Subscripts452301 +Node: Uninitialized Subscripts454484 +Node: Multidimensional456111 +Node: Multiscanning459203 +Node: Arrays of Arrays460792 +Node: Functions465432 +Node: Built-in466251 +Node: Calling Built-in467329 +Node: Numeric Functions469317 +Ref: Numeric Functions-Footnote-1473149 +Ref: Numeric Functions-Footnote-2473506 +Ref: Numeric Functions-Footnote-3473554 +Node: String Functions473823 +Ref: String Functions-Footnote-1496743 +Ref: String Functions-Footnote-2496872 +Ref: String Functions-Footnote-3497120 +Node: Gory Details497207 +Ref: table-sub-escapes498886 +Ref: table-sub-posix-92500240 +Ref: table-sub-proposed501591 +Ref: table-posix-sub502945 +Ref: table-gensub-escapes504490 +Ref: Gory Details-Footnote-1505666 +Ref: Gory Details-Footnote-2505717 +Node: I/O Functions505868 +Ref: I/O Functions-Footnote-1512853 +Node: Time Functions513000 +Ref: Time Functions-Footnote-1523933 +Ref: Time Functions-Footnote-2524001 +Ref: Time Functions-Footnote-3524159 +Ref: Time Functions-Footnote-4524270 +Ref: Time Functions-Footnote-5524382 +Ref: Time Functions-Footnote-6524609 +Node: Bitwise Functions524875 +Ref: table-bitwise-ops525437 +Ref: Bitwise Functions-Footnote-1529658 +Node: Type Functions529842 +Node: I18N Functions530993 +Node: User-defined532620 +Node: Definition Syntax533424 +Ref: Definition Syntax-Footnote-1538334 +Node: Function Example538403 +Node: Function Caveats540997 +Node: Calling A Function541418 +Node: Variable Scope542533 +Node: Pass By Value/Reference545496 +Node: Return Statement549004 +Node: Dynamic Typing551985 +Node: Indirect Calls552916 +Node: Library Functions562601 +Ref: Library Functions-Footnote-1566114 +Ref: Library Functions-Footnote-2566257 +Node: Library Names566428 +Ref: Library Names-Footnote-1569899 +Ref: Library Names-Footnote-2570119 +Node: General Functions570205 +Node: Strtonum Function571233 +Node: Assert Function574163 +Node: Round Function577489 +Node: Cliff Random Function579032 +Node: Ordinal Functions580048 +Ref: Ordinal Functions-Footnote-1583118 +Ref: Ordinal Functions-Footnote-2583370 +Node: Join Function583579 +Ref: Join Function-Footnote-1585350 +Node: Getlocaltime Function585550 +Node: Readfile Function589291 +Node: Data File Management591130 +Node: Filetrans Function591762 +Node: Rewind Function595831 +Node: File Checking597218 +Node: Empty Files598312 +Node: Ignoring Assigns600542 +Node: Getopt Function602095 +Ref: Getopt Function-Footnote-1613398 +Node: Passwd Functions613601 +Ref: Passwd Functions-Footnote-1622576 +Node: Group Functions622664 +Node: Walking Arrays630748 +Node: Sample Programs632885 +Node: Running Examples633559 +Node: Clones634287 +Node: Cut Program635511 +Node: Egrep Program645356 +Ref: Egrep Program-Footnote-1653129 +Node: Id Program653239 +Node: Split Program656855 +Ref: Split Program-Footnote-1660374 +Node: Tee Program660502 +Node: Uniq Program663305 +Node: Wc Program670734 +Ref: Wc Program-Footnote-1675000 +Ref: Wc Program-Footnote-2675200 +Node: Miscellaneous Programs675292 +Node: Dupword Program676480 +Node: Alarm Program678511 +Node: Translate Program683264 +Ref: Translate Program-Footnote-1687651 +Ref: Translate Program-Footnote-2687899 +Node: Labels Program688033 +Ref: Labels Program-Footnote-1691404 +Node: Word Sorting691488 +Node: History Sorting695372 +Node: Extract Program697211 +Ref: Extract Program-Footnote-1704714 +Node: Simple Sed704842 +Node: Igawk Program707904 +Ref: Igawk Program-Footnote-1723061 +Ref: Igawk Program-Footnote-2723262 +Node: Anagram Program723400 +Node: Signature Program726468 +Node: Advanced Features727568 +Node: Nondecimal Data729454 +Node: Array Sorting731037 +Node: Controlling Array Traversal731734 +Node: Array Sorting Functions740018 +Ref: Array Sorting Functions-Footnote-1743887 +Node: Two-way I/O744081 +Ref: Two-way I/O-Footnote-1749513 +Node: TCP/IP Networking749583 +Node: Profiling752427 +Node: Internationalization759924 +Node: I18N and L10N761349 +Node: Explaining gettext762035 +Ref: Explaining gettext-Footnote-1767103 +Ref: Explaining gettext-Footnote-2767287 +Node: Programmer i18n767452 +Node: Translator i18n771654 +Node: String Extraction772447 +Ref: String Extraction-Footnote-1773408 +Node: Printf Ordering773494 +Ref: Printf Ordering-Footnote-1776278 +Node: I18N Portability776342 +Ref: I18N Portability-Footnote-1778791 +Node: I18N Example778854 +Ref: I18N Example-Footnote-1781492 +Node: Gawk I18N781564 +Node: Debugger782185 +Node: Debugging783156 +Node: Debugging Concepts783589 +Node: Debugging Terms785445 +Node: Awk Debugging788042 +Node: Sample Debugging Session788934 +Node: Debugger Invocation789454 +Node: Finding The Bug790786 +Node: List of Debugger Commands797274 +Node: Breakpoint Control798608 +Node: Debugger Execution Control802272 +Node: Viewing And Changing Data805632 +Node: Execution Stack808988 +Node: Debugger Info810455 +Node: Miscellaneous Debugger Commands814437 +Node: Readline Support819613 +Node: Limitations820444 +Node: Arbitrary Precision Arithmetic822696 +Ref: Arbitrary Precision Arithmetic-Footnote-1824345 +Node: General Arithmetic824493 +Node: Floating Point Issues826213 +Node: String Conversion Precision827094 +Ref: String Conversion Precision-Footnote-1828799 +Node: Unexpected Results828908 +Node: POSIX Floating Point Problems831061 +Ref: POSIX Floating Point Problems-Footnote-1834886 +Node: Integer Programming834924 +Node: Floating-point Programming836663 +Ref: Floating-point Programming-Footnote-1842994 +Ref: Floating-point Programming-Footnote-2843264 +Node: Floating-point Representation843528 +Node: Floating-point Context844693 +Ref: table-ieee-formats845532 +Node: Rounding Mode846916 +Ref: table-rounding-modes847395 +Ref: Rounding Mode-Footnote-1850410 +Node: Gawk and MPFR850589 +Node: Arbitrary Precision Floats851844 +Ref: Arbitrary Precision Floats-Footnote-1854287 +Node: Setting Precision854603 +Ref: table-predefined-precision-strings855289 +Node: Setting Rounding Mode857434 +Ref: table-gawk-rounding-modes857838 +Node: Floating-point Constants859025 +Node: Changing Precision860454 +Ref: Changing Precision-Footnote-1861851 +Node: Exact Arithmetic862025 +Node: Arbitrary Precision Integers865163 +Ref: Arbitrary Precision Integers-Footnote-1868181 +Node: Dynamic Extensions868328 +Node: Extension Intro869786 +Node: Plugin License871051 +Node: Extension Mechanism Outline871736 +Ref: load-extension872153 +Ref: load-new-function873631 +Ref: call-new-function874626 +Node: Extension API Description876641 +Node: Extension API Functions Introduction877854 +Node: General Data Types882720 +Ref: General Data Types-Footnote-1888325 +Node: Requesting Values888624 +Ref: table-value-types-returned889355 +Node: Constructor Functions890309 +Node: Registration Functions893329 +Node: Extension Functions894014 +Node: Exit Callback Functions896239 +Node: Extension Version String897488 +Node: Input Parsers898138 +Node: Output Wrappers907895 +Node: Two-way processors912405 +Node: Printing Messages914613 +Ref: Printing Messages-Footnote-1915690 +Node: Updating `ERRNO'915842 +Node: Accessing Parameters916581 +Node: Symbol Table Access917811 +Node: Symbol table by name918323 +Node: Symbol table by cookie920070 +Ref: Symbol table by cookie-Footnote-1924200 +Node: Cached values924263 +Ref: Cached values-Footnote-1927712 +Node: Array Manipulation927803 +Ref: Array Manipulation-Footnote-1928901 +Node: Array Data Types928940 +Ref: Array Data Types-Footnote-1931643 +Node: Array Functions931735 +Node: Flattening Arrays935501 +Node: Creating Arrays942353 +Node: Extension API Variables947078 +Node: Extension Versioning947714 +Node: Extension API Informational Variables949615 +Node: Extension API Boilerplate950701 +Node: Finding Extensions954505 +Node: Extension Example955065 +Node: Internal File Description955795 +Node: Internal File Ops959886 +Ref: Internal File Ops-Footnote-1971394 +Node: Using Internal File Ops971534 +Ref: Using Internal File Ops-Footnote-1973887 +Node: Extension Samples974153 +Node: Extension Sample File Functions975677 +Node: Extension Sample Fnmatch984162 +Node: Extension Sample Fork985888 +Node: Extension Sample Inplace987106 +Node: Extension Sample Ord988884 +Node: Extension Sample Readdir989720 +Node: Extension Sample Revout991252 +Node: Extension Sample Rev2way991845 +Node: Extension Sample Read write array992535 +Node: Extension Sample Readfile994418 +Node: Extension Sample API Tests995236 +Node: Extension Sample Time995761 +Node: gawkextlib997125 +Node: Language History999906 +Node: V7/SVR3.11001428 +Node: SVR41003748 +Node: POSIX1005190 +Node: BTL1006576 +Node: POSIX/GNU1007310 +Node: Common Extensions1012845 +Node: Ranges and Locales1014151 +Ref: Ranges and Locales-Footnote-11018769 +Ref: Ranges and Locales-Footnote-21018796 +Ref: Ranges and Locales-Footnote-31019056 +Node: Contributors1019277 +Node: Installation1024352 +Node: Gawk Distribution1025246 +Node: Getting1025730 +Node: Extracting1026556 +Node: Distribution contents1028248 +Node: Unix Installation1033953 +Node: Quick Installation1034570 +Node: Additional Configuration Options1037014 +Node: Configuration Philosophy1038750 +Node: Non-Unix Installation1041104 +Node: PC Installation1041562 +Node: PC Binary Installation1042861 +Node: PC Compiling1044709 +Node: PC Testing1047653 +Node: PC Using1048829 +Node: Cygwin1053014 +Node: MSYS1054014 +Node: VMS Installation1054528 +Node: VMS Compilation1055131 +Ref: VMS Compilation-Footnote-11056138 +Node: VMS Installation Details1056196 +Node: VMS Running1057831 +Node: VMS Old Gawk1059438 +Node: Bugs1059912 +Node: Other Versions1063768 +Node: Notes1069852 +Node: Compatibility Mode1070652 +Node: Additions1071435 +Node: Accessing The Source1072362 +Node: Adding Code1073802 +Node: New Ports1079847 +Node: Derived Files1083982 +Ref: Derived Files-Footnote-11089303 +Ref: Derived Files-Footnote-21089337 +Ref: Derived Files-Footnote-31089937 +Node: Future Extensions1090035 +Node: Implementation Limitations1090618 +Node: Extension Design1091870 +Node: Old Extension Problems1093024 +Ref: Old Extension Problems-Footnote-11094532 +Node: Extension New Mechanism Goals1094589 +Ref: Extension New Mechanism Goals-Footnote-11097954 +Node: Extension Other Design Decisions1098140 +Node: Extension Future Growth1100246 +Node: Old Extension Mechanism1101082 +Node: Basic Concepts1102822 +Node: Basic High Level1103503 +Ref: figure-general-flow1103774 +Ref: figure-process-flow1104373 +Ref: Basic High Level-Footnote-11107602 +Node: Basic Data Typing1107787 +Node: Glossary1111142 +Node: Copying1136604 +Node: GNU Free Documentation License1174161 +Node: Index1199298  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 47ea0acc..bfc3a17f 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -401,6 +401,7 @@ particular records in a file and perform operations upon them. field. * Command Line Field Separator:: Setting @code{FS} from the command-line. +* Full Line Fields:: Making the full line be a single field. * Field Splitting Summary:: Some final points and a summary table. * Constant Size:: Reading constant width data. * Splitting By Content:: Defining Fields By Content @@ -6303,6 +6304,7 @@ with a statement such as @samp{$1 = $1}, as described earlier. * Regexp Field Splitting:: Using regexps as the field separator. * Single Character Fields:: Making each character a separate field. * Command Line Field Separator:: Setting @code{FS} from the command-line. +* Full Line Fields:: Making the full line be a single field. * Field Splitting Summary:: Some final points and a summary table. @end menu @@ -6671,6 +6673,9 @@ the entries for users who have no password: awk -F: '$2 == ""' /etc/passwd @end example +@node Full Line Fields +@subsection Making The Full Line Be A Single Field + @node Field Splitting Summary @subsection Field-Splitting Summary diff --git a/doc/gawktexi.in b/doc/gawktexi.in index a82a1b37..842fafe6 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -396,6 +396,7 @@ particular records in a file and perform operations upon them. field. * Command Line Field Separator:: Setting @code{FS} from the command-line. +* Full Line Fields:: Making the full line be a single field. * Field Splitting Summary:: Some final points and a summary table. * Constant Size:: Reading constant width data. * Splitting By Content:: Defining Fields By Content @@ -6024,6 +6025,7 @@ with a statement such as @samp{$1 = $1}, as described earlier. * Regexp Field Splitting:: Using regexps as the field separator. * Single Character Fields:: Making each character a separate field. * Command Line Field Separator:: Setting @code{FS} from the command-line. +* Full Line Fields:: Making the full line be a single field. * Field Splitting Summary:: Some final points and a summary table. @end menu @@ -6392,6 +6394,21 @@ the entries for users who have no password: awk -F: '$2 == ""' /etc/passwd @end example +@node Full Line Fields +@subsection Making The Full Line Be A Single Field + +Occasionally, it's useful to treat the whole input line as a +single field. This can be done easily and portably simply by +setting @code{FS} to @code{"\n"} (a newline).@footnote{Thanks to +Andrew Schorr for this tip.} + +@example +awk -F'\n' '@var{program}' @var{files @dots{}} +@end example + +@noindent +When you do this, @code{$1} is the same as @code{$0}. + @node Field Splitting Summary @subsection Field-Splitting Summary -- cgit v1.2.3 From 0d625fc05924245fbfa092e0f80302f981b6b44a Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 3 Jan 2014 12:52:30 +0200 Subject: Update copyright year in manual. --- doc/ChangeLog | 1 + doc/gawk.info | 1055 ++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 17 +- doc/gawktexi.in | 5 +- 4 files changed, 553 insertions(+), 525 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 1d4d9f9d..2eb43766 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,6 +1,7 @@ 2014-01-03 Arnold D. Robbins * gawktexi.in (Full Line Fields): New node. + Update copyright year. 2013-12-26 Arnold D. Robbins diff --git a/doc/gawk.info b/doc/gawk.info index 95522fed..b4c90290 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -10,8 +10,8 @@ START-INFO-DIR-ENTRY END-INFO-DIR-ENTRY Copyright (C) 1989, 1991, 1992, 1993, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013 Free -Software Foundation, Inc. +2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013, 2014 +Free Software Foundation, Inc. This is Edition 4.1 of `GAWK: Effective AWK Programming: A User's @@ -42,8 +42,8 @@ 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, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013 Free -Software Foundation, Inc. +2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013, 2014 +Free Software Foundation, Inc. This is Edition 4.1 of `GAWK: Effective AWK Programming: A User's @@ -4656,6 +4656,18 @@ File: gawk.info, Node: Full Line Fields, Next: Field Splitting Summary, Prev: 4.5.5 Making The Full Line Be A Single Field -------------------------------------------- +Occasionally, it's useful to treat the whole input line as a single +field. This can be done easily and portably simply by setting `FS' to +`"\n"' (a newline).(1) + + awk -F'\n' 'PROGRAM' FILES ... + +When you do this, `$1' is the same as `$0'. + + ---------- Footnotes ---------- + + (1) Thanks to Andrew Schorr for this tip. +  File: gawk.info, Node: Field Splitting Summary, Prev: Full Line Fields, Up: Field Separators @@ -32204,522 +32216,523 @@ Index  Tag Table: -Node: Top1360 -Node: Foreword40540 -Node: Preface44885 -Ref: Preface-Footnote-147938 -Ref: Preface-Footnote-248034 -Node: History48266 -Node: Names50640 -Ref: Names-Footnote-152117 -Node: This Manual52189 -Ref: This Manual-Footnote-157963 -Node: Conventions58063 -Node: Manual History60219 -Ref: Manual History-Footnote-163667 -Ref: Manual History-Footnote-263708 -Node: How To Contribute63782 -Node: Acknowledgments64926 -Node: Getting Started69135 -Node: Running gawk71514 -Node: One-shot72700 -Node: Read Terminal73925 -Ref: Read Terminal-Footnote-175575 -Ref: Read Terminal-Footnote-275851 -Node: Long76022 -Node: Executable Scripts77398 -Ref: Executable Scripts-Footnote-179231 -Ref: Executable Scripts-Footnote-279333 -Node: Comments79880 -Node: Quoting82347 -Node: DOS Quoting86970 -Node: Sample Data Files87645 -Node: Very Simple90689 -Node: Two Rules95288 -Node: More Complex97435 -Ref: More Complex-Footnote-1100365 -Node: Statements/Lines100450 -Ref: Statements/Lines-Footnote-1104912 -Node: Other Features105177 -Node: When106105 -Node: Invoking Gawk108252 -Node: Command Line109713 -Node: Options110496 -Ref: Options-Footnote-1125888 -Node: Other Arguments125913 -Node: Naming Standard Input128571 -Node: Environment Variables129665 -Node: AWKPATH Variable130223 -Ref: AWKPATH Variable-Footnote-1132981 -Node: AWKLIBPATH Variable133241 -Node: Other Environment Variables133959 -Node: Exit Status136922 -Node: Include Files137597 -Node: Loading Shared Libraries141166 -Node: Obsolete142530 -Node: Undocumented143227 -Node: Regexp143469 -Node: Regexp Usage144858 -Node: Escape Sequences146884 -Node: Regexp Operators152553 -Ref: Regexp Operators-Footnote-1159933 -Ref: Regexp Operators-Footnote-2160080 -Node: Bracket Expressions160178 -Ref: table-char-classes162068 -Node: GNU Regexp Operators164591 -Node: Case-sensitivity168314 -Ref: Case-sensitivity-Footnote-1171282 -Ref: Case-sensitivity-Footnote-2171517 -Node: Leftmost Longest171625 -Node: Computed Regexps172826 -Node: Reading Files176163 -Node: Records178165 -Ref: Records-Footnote-1187054 -Node: Fields187091 -Ref: Fields-Footnote-1190124 -Node: Nonconstant Fields190210 -Node: Changing Fields192412 -Node: Field Separators198371 -Node: Default Field Splitting201073 -Node: Regexp Field Splitting202190 -Node: Single Character Fields205532 -Node: Command Line Field Separator206591 -Node: Full Line Fields210025 -Node: Field Splitting Summary210252 -Ref: Field Splitting Summary-Footnote-1213351 -Node: Constant Size213452 -Node: Splitting By Content218036 -Ref: Splitting By Content-Footnote-1221762 -Node: Multiple Line221802 -Ref: Multiple Line-Footnote-1227649 -Node: Getline227828 -Node: Plain Getline230044 -Node: Getline/Variable232139 -Node: Getline/File233286 -Node: Getline/Variable/File234627 -Ref: Getline/Variable/File-Footnote-1236226 -Node: Getline/Pipe236313 -Node: Getline/Variable/Pipe239012 -Node: Getline/Coprocess240119 -Node: Getline/Variable/Coprocess241371 -Node: Getline Notes242108 -Node: Getline Summary244895 -Ref: table-getline-variants245303 -Node: Read Timeout246215 -Ref: Read Timeout-Footnote-1249956 -Node: Command line directories250013 -Node: Printing250643 -Node: Print252274 -Node: Print Examples253611 -Node: Output Separators256395 -Node: OFMT258155 -Node: Printf259513 -Node: Basic Printf260419 -Node: Control Letters261958 -Node: Format Modifiers265770 -Node: Printf Examples271779 -Node: Redirection274494 -Node: Special Files281459 -Node: Special FD281992 -Ref: Special FD-Footnote-1285617 -Node: Special Network285691 -Node: Special Caveats286541 -Node: Close Files And Pipes287337 -Ref: Close Files And Pipes-Footnote-1294320 -Ref: Close Files And Pipes-Footnote-2294468 -Node: Expressions294618 -Node: Values295750 -Node: Constants296426 -Node: Scalar Constants297106 -Ref: Scalar Constants-Footnote-1297965 -Node: Nondecimal-numbers298147 -Node: Regexp Constants301147 -Node: Using Constant Regexps301622 -Node: Variables304677 -Node: Using Variables305332 -Node: Assignment Options307056 -Node: Conversion308928 -Ref: table-locale-affects314429 -Ref: Conversion-Footnote-1315053 -Node: All Operators315162 -Node: Arithmetic Ops315792 -Node: Concatenation318297 -Ref: Concatenation-Footnote-1321089 -Node: Assignment Ops321209 -Ref: table-assign-ops326197 -Node: Increment Ops327528 -Node: Truth Values and Conditions330962 -Node: Truth Values332045 -Node: Typing and Comparison333094 -Node: Variable Typing333887 -Ref: Variable Typing-Footnote-1337784 -Node: Comparison Operators337906 -Ref: table-relational-ops338316 -Node: POSIX String Comparison341865 -Ref: POSIX String Comparison-Footnote-1342821 -Node: Boolean Ops342959 -Ref: Boolean Ops-Footnote-1347037 -Node: Conditional Exp347128 -Node: Function Calls348860 -Node: Precedence352454 -Node: Locales356123 -Node: Patterns and Actions357212 -Node: Pattern Overview358266 -Node: Regexp Patterns359935 -Node: Expression Patterns360478 -Node: Ranges364163 -Node: BEGIN/END367129 -Node: Using BEGIN/END367891 -Ref: Using BEGIN/END-Footnote-1370622 -Node: I/O And BEGIN/END370728 -Node: BEGINFILE/ENDFILE373010 -Node: Empty375924 -Node: Using Shell Variables376240 -Node: Action Overview378525 -Node: Statements380882 -Node: If Statement382736 -Node: While Statement384235 -Node: Do Statement386279 -Node: For Statement387435 -Node: Switch Statement390587 -Node: Break Statement392684 -Node: Continue Statement394674 -Node: Next Statement396467 -Node: Nextfile Statement398857 -Node: Exit Statement401500 -Node: Built-in Variables403916 -Node: User-modified405011 -Ref: User-modified-Footnote-1413369 -Node: Auto-set413431 -Ref: Auto-set-Footnote-1426509 -Ref: Auto-set-Footnote-2426714 -Node: ARGC and ARGV426770 -Node: Arrays430621 -Node: Array Basics432126 -Node: Array Intro432952 -Node: Reference to Elements437269 -Node: Assigning Elements439539 -Node: Array Example440030 -Node: Scanning an Array441762 -Node: Controlling Scanning444076 -Ref: Controlling Scanning-Footnote-1449163 -Node: Delete449479 -Ref: Delete-Footnote-1452244 -Node: Numeric Array Subscripts452301 -Node: Uninitialized Subscripts454484 -Node: Multidimensional456111 -Node: Multiscanning459203 -Node: Arrays of Arrays460792 -Node: Functions465432 -Node: Built-in466251 -Node: Calling Built-in467329 -Node: Numeric Functions469317 -Ref: Numeric Functions-Footnote-1473149 -Ref: Numeric Functions-Footnote-2473506 -Ref: Numeric Functions-Footnote-3473554 -Node: String Functions473823 -Ref: String Functions-Footnote-1496743 -Ref: String Functions-Footnote-2496872 -Ref: String Functions-Footnote-3497120 -Node: Gory Details497207 -Ref: table-sub-escapes498886 -Ref: table-sub-posix-92500240 -Ref: table-sub-proposed501591 -Ref: table-posix-sub502945 -Ref: table-gensub-escapes504490 -Ref: Gory Details-Footnote-1505666 -Ref: Gory Details-Footnote-2505717 -Node: I/O Functions505868 -Ref: I/O Functions-Footnote-1512853 -Node: Time Functions513000 -Ref: Time Functions-Footnote-1523933 -Ref: Time Functions-Footnote-2524001 -Ref: Time Functions-Footnote-3524159 -Ref: Time Functions-Footnote-4524270 -Ref: Time Functions-Footnote-5524382 -Ref: Time Functions-Footnote-6524609 -Node: Bitwise Functions524875 -Ref: table-bitwise-ops525437 -Ref: Bitwise Functions-Footnote-1529658 -Node: Type Functions529842 -Node: I18N Functions530993 -Node: User-defined532620 -Node: Definition Syntax533424 -Ref: Definition Syntax-Footnote-1538334 -Node: Function Example538403 -Node: Function Caveats540997 -Node: Calling A Function541418 -Node: Variable Scope542533 -Node: Pass By Value/Reference545496 -Node: Return Statement549004 -Node: Dynamic Typing551985 -Node: Indirect Calls552916 -Node: Library Functions562601 -Ref: Library Functions-Footnote-1566114 -Ref: Library Functions-Footnote-2566257 -Node: Library Names566428 -Ref: Library Names-Footnote-1569899 -Ref: Library Names-Footnote-2570119 -Node: General Functions570205 -Node: Strtonum Function571233 -Node: Assert Function574163 -Node: Round Function577489 -Node: Cliff Random Function579032 -Node: Ordinal Functions580048 -Ref: Ordinal Functions-Footnote-1583118 -Ref: Ordinal Functions-Footnote-2583370 -Node: Join Function583579 -Ref: Join Function-Footnote-1585350 -Node: Getlocaltime Function585550 -Node: Readfile Function589291 -Node: Data File Management591130 -Node: Filetrans Function591762 -Node: Rewind Function595831 -Node: File Checking597218 -Node: Empty Files598312 -Node: Ignoring Assigns600542 -Node: Getopt Function602095 -Ref: Getopt Function-Footnote-1613398 -Node: Passwd Functions613601 -Ref: Passwd Functions-Footnote-1622576 -Node: Group Functions622664 -Node: Walking Arrays630748 -Node: Sample Programs632885 -Node: Running Examples633559 -Node: Clones634287 -Node: Cut Program635511 -Node: Egrep Program645356 -Ref: Egrep Program-Footnote-1653129 -Node: Id Program653239 -Node: Split Program656855 -Ref: Split Program-Footnote-1660374 -Node: Tee Program660502 -Node: Uniq Program663305 -Node: Wc Program670734 -Ref: Wc Program-Footnote-1675000 -Ref: Wc Program-Footnote-2675200 -Node: Miscellaneous Programs675292 -Node: Dupword Program676480 -Node: Alarm Program678511 -Node: Translate Program683264 -Ref: Translate Program-Footnote-1687651 -Ref: Translate Program-Footnote-2687899 -Node: Labels Program688033 -Ref: Labels Program-Footnote-1691404 -Node: Word Sorting691488 -Node: History Sorting695372 -Node: Extract Program697211 -Ref: Extract Program-Footnote-1704714 -Node: Simple Sed704842 -Node: Igawk Program707904 -Ref: Igawk Program-Footnote-1723061 -Ref: Igawk Program-Footnote-2723262 -Node: Anagram Program723400 -Node: Signature Program726468 -Node: Advanced Features727568 -Node: Nondecimal Data729454 -Node: Array Sorting731037 -Node: Controlling Array Traversal731734 -Node: Array Sorting Functions740018 -Ref: Array Sorting Functions-Footnote-1743887 -Node: Two-way I/O744081 -Ref: Two-way I/O-Footnote-1749513 -Node: TCP/IP Networking749583 -Node: Profiling752427 -Node: Internationalization759924 -Node: I18N and L10N761349 -Node: Explaining gettext762035 -Ref: Explaining gettext-Footnote-1767103 -Ref: Explaining gettext-Footnote-2767287 -Node: Programmer i18n767452 -Node: Translator i18n771654 -Node: String Extraction772447 -Ref: String Extraction-Footnote-1773408 -Node: Printf Ordering773494 -Ref: Printf Ordering-Footnote-1776278 -Node: I18N Portability776342 -Ref: I18N Portability-Footnote-1778791 -Node: I18N Example778854 -Ref: I18N Example-Footnote-1781492 -Node: Gawk I18N781564 -Node: Debugger782185 -Node: Debugging783156 -Node: Debugging Concepts783589 -Node: Debugging Terms785445 -Node: Awk Debugging788042 -Node: Sample Debugging Session788934 -Node: Debugger Invocation789454 -Node: Finding The Bug790786 -Node: List of Debugger Commands797274 -Node: Breakpoint Control798608 -Node: Debugger Execution Control802272 -Node: Viewing And Changing Data805632 -Node: Execution Stack808988 -Node: Debugger Info810455 -Node: Miscellaneous Debugger Commands814437 -Node: Readline Support819613 -Node: Limitations820444 -Node: Arbitrary Precision Arithmetic822696 -Ref: Arbitrary Precision Arithmetic-Footnote-1824345 -Node: General Arithmetic824493 -Node: Floating Point Issues826213 -Node: String Conversion Precision827094 -Ref: String Conversion Precision-Footnote-1828799 -Node: Unexpected Results828908 -Node: POSIX Floating Point Problems831061 -Ref: POSIX Floating Point Problems-Footnote-1834886 -Node: Integer Programming834924 -Node: Floating-point Programming836663 -Ref: Floating-point Programming-Footnote-1842994 -Ref: Floating-point Programming-Footnote-2843264 -Node: Floating-point Representation843528 -Node: Floating-point Context844693 -Ref: table-ieee-formats845532 -Node: Rounding Mode846916 -Ref: table-rounding-modes847395 -Ref: Rounding Mode-Footnote-1850410 -Node: Gawk and MPFR850589 -Node: Arbitrary Precision Floats851844 -Ref: Arbitrary Precision Floats-Footnote-1854287 -Node: Setting Precision854603 -Ref: table-predefined-precision-strings855289 -Node: Setting Rounding Mode857434 -Ref: table-gawk-rounding-modes857838 -Node: Floating-point Constants859025 -Node: Changing Precision860454 -Ref: Changing Precision-Footnote-1861851 -Node: Exact Arithmetic862025 -Node: Arbitrary Precision Integers865163 -Ref: Arbitrary Precision Integers-Footnote-1868181 -Node: Dynamic Extensions868328 -Node: Extension Intro869786 -Node: Plugin License871051 -Node: Extension Mechanism Outline871736 -Ref: load-extension872153 -Ref: load-new-function873631 -Ref: call-new-function874626 -Node: Extension API Description876641 -Node: Extension API Functions Introduction877854 -Node: General Data Types882720 -Ref: General Data Types-Footnote-1888325 -Node: Requesting Values888624 -Ref: table-value-types-returned889355 -Node: Constructor Functions890309 -Node: Registration Functions893329 -Node: Extension Functions894014 -Node: Exit Callback Functions896239 -Node: Extension Version String897488 -Node: Input Parsers898138 -Node: Output Wrappers907895 -Node: Two-way processors912405 -Node: Printing Messages914613 -Ref: Printing Messages-Footnote-1915690 -Node: Updating `ERRNO'915842 -Node: Accessing Parameters916581 -Node: Symbol Table Access917811 -Node: Symbol table by name918323 -Node: Symbol table by cookie920070 -Ref: Symbol table by cookie-Footnote-1924200 -Node: Cached values924263 -Ref: Cached values-Footnote-1927712 -Node: Array Manipulation927803 -Ref: Array Manipulation-Footnote-1928901 -Node: Array Data Types928940 -Ref: Array Data Types-Footnote-1931643 -Node: Array Functions931735 -Node: Flattening Arrays935501 -Node: Creating Arrays942353 -Node: Extension API Variables947078 -Node: Extension Versioning947714 -Node: Extension API Informational Variables949615 -Node: Extension API Boilerplate950701 -Node: Finding Extensions954505 -Node: Extension Example955065 -Node: Internal File Description955795 -Node: Internal File Ops959886 -Ref: Internal File Ops-Footnote-1971394 -Node: Using Internal File Ops971534 -Ref: Using Internal File Ops-Footnote-1973887 -Node: Extension Samples974153 -Node: Extension Sample File Functions975677 -Node: Extension Sample Fnmatch984162 -Node: Extension Sample Fork985888 -Node: Extension Sample Inplace987106 -Node: Extension Sample Ord988884 -Node: Extension Sample Readdir989720 -Node: Extension Sample Revout991252 -Node: Extension Sample Rev2way991845 -Node: Extension Sample Read write array992535 -Node: Extension Sample Readfile994418 -Node: Extension Sample API Tests995236 -Node: Extension Sample Time995761 -Node: gawkextlib997125 -Node: Language History999906 -Node: V7/SVR3.11001428 -Node: SVR41003748 -Node: POSIX1005190 -Node: BTL1006576 -Node: POSIX/GNU1007310 -Node: Common Extensions1012845 -Node: Ranges and Locales1014151 -Ref: Ranges and Locales-Footnote-11018769 -Ref: Ranges and Locales-Footnote-21018796 -Ref: Ranges and Locales-Footnote-31019056 -Node: Contributors1019277 -Node: Installation1024352 -Node: Gawk Distribution1025246 -Node: Getting1025730 -Node: Extracting1026556 -Node: Distribution contents1028248 -Node: Unix Installation1033953 -Node: Quick Installation1034570 -Node: Additional Configuration Options1037014 -Node: Configuration Philosophy1038750 -Node: Non-Unix Installation1041104 -Node: PC Installation1041562 -Node: PC Binary Installation1042861 -Node: PC Compiling1044709 -Node: PC Testing1047653 -Node: PC Using1048829 -Node: Cygwin1053014 -Node: MSYS1054014 -Node: VMS Installation1054528 -Node: VMS Compilation1055131 -Ref: VMS Compilation-Footnote-11056138 -Node: VMS Installation Details1056196 -Node: VMS Running1057831 -Node: VMS Old Gawk1059438 -Node: Bugs1059912 -Node: Other Versions1063768 -Node: Notes1069852 -Node: Compatibility Mode1070652 -Node: Additions1071435 -Node: Accessing The Source1072362 -Node: Adding Code1073802 -Node: New Ports1079847 -Node: Derived Files1083982 -Ref: Derived Files-Footnote-11089303 -Ref: Derived Files-Footnote-21089337 -Ref: Derived Files-Footnote-31089937 -Node: Future Extensions1090035 -Node: Implementation Limitations1090618 -Node: Extension Design1091870 -Node: Old Extension Problems1093024 -Ref: Old Extension Problems-Footnote-11094532 -Node: Extension New Mechanism Goals1094589 -Ref: Extension New Mechanism Goals-Footnote-11097954 -Node: Extension Other Design Decisions1098140 -Node: Extension Future Growth1100246 -Node: Old Extension Mechanism1101082 -Node: Basic Concepts1102822 -Node: Basic High Level1103503 -Ref: figure-general-flow1103774 -Ref: figure-process-flow1104373 -Ref: Basic High Level-Footnote-11107602 -Node: Basic Data Typing1107787 -Node: Glossary1111142 -Node: Copying1136604 -Node: GNU Free Documentation License1174161 -Node: Index1199298 +Node: Top1366 +Node: Foreword40552 +Node: Preface44897 +Ref: Preface-Footnote-147950 +Ref: Preface-Footnote-248046 +Node: History48278 +Node: Names50652 +Ref: Names-Footnote-152129 +Node: This Manual52201 +Ref: This Manual-Footnote-157975 +Node: Conventions58075 +Node: Manual History60231 +Ref: Manual History-Footnote-163679 +Ref: Manual History-Footnote-263720 +Node: How To Contribute63794 +Node: Acknowledgments64938 +Node: Getting Started69147 +Node: Running gawk71526 +Node: One-shot72712 +Node: Read Terminal73937 +Ref: Read Terminal-Footnote-175587 +Ref: Read Terminal-Footnote-275863 +Node: Long76034 +Node: Executable Scripts77410 +Ref: Executable Scripts-Footnote-179243 +Ref: Executable Scripts-Footnote-279345 +Node: Comments79892 +Node: Quoting82359 +Node: DOS Quoting86982 +Node: Sample Data Files87657 +Node: Very Simple90701 +Node: Two Rules95300 +Node: More Complex97447 +Ref: More Complex-Footnote-1100377 +Node: Statements/Lines100462 +Ref: Statements/Lines-Footnote-1104924 +Node: Other Features105189 +Node: When106117 +Node: Invoking Gawk108264 +Node: Command Line109725 +Node: Options110508 +Ref: Options-Footnote-1125900 +Node: Other Arguments125925 +Node: Naming Standard Input128583 +Node: Environment Variables129677 +Node: AWKPATH Variable130235 +Ref: AWKPATH Variable-Footnote-1132993 +Node: AWKLIBPATH Variable133253 +Node: Other Environment Variables133971 +Node: Exit Status136934 +Node: Include Files137609 +Node: Loading Shared Libraries141178 +Node: Obsolete142542 +Node: Undocumented143239 +Node: Regexp143481 +Node: Regexp Usage144870 +Node: Escape Sequences146896 +Node: Regexp Operators152565 +Ref: Regexp Operators-Footnote-1159945 +Ref: Regexp Operators-Footnote-2160092 +Node: Bracket Expressions160190 +Ref: table-char-classes162080 +Node: GNU Regexp Operators164603 +Node: Case-sensitivity168326 +Ref: Case-sensitivity-Footnote-1171294 +Ref: Case-sensitivity-Footnote-2171529 +Node: Leftmost Longest171637 +Node: Computed Regexps172838 +Node: Reading Files176175 +Node: Records178177 +Ref: Records-Footnote-1187066 +Node: Fields187103 +Ref: Fields-Footnote-1190136 +Node: Nonconstant Fields190222 +Node: Changing Fields192424 +Node: Field Separators198383 +Node: Default Field Splitting201085 +Node: Regexp Field Splitting202202 +Node: Single Character Fields205544 +Node: Command Line Field Separator206603 +Node: Full Line Fields210037 +Ref: Full Line Fields-Footnote-1210545 +Node: Field Splitting Summary210591 +Ref: Field Splitting Summary-Footnote-1213690 +Node: Constant Size213791 +Node: Splitting By Content218375 +Ref: Splitting By Content-Footnote-1222101 +Node: Multiple Line222141 +Ref: Multiple Line-Footnote-1227988 +Node: Getline228167 +Node: Plain Getline230383 +Node: Getline/Variable232478 +Node: Getline/File233625 +Node: Getline/Variable/File234966 +Ref: Getline/Variable/File-Footnote-1236565 +Node: Getline/Pipe236652 +Node: Getline/Variable/Pipe239351 +Node: Getline/Coprocess240458 +Node: Getline/Variable/Coprocess241710 +Node: Getline Notes242447 +Node: Getline Summary245234 +Ref: table-getline-variants245642 +Node: Read Timeout246554 +Ref: Read Timeout-Footnote-1250295 +Node: Command line directories250352 +Node: Printing250982 +Node: Print252613 +Node: Print Examples253950 +Node: Output Separators256734 +Node: OFMT258494 +Node: Printf259852 +Node: Basic Printf260758 +Node: Control Letters262297 +Node: Format Modifiers266109 +Node: Printf Examples272118 +Node: Redirection274833 +Node: Special Files281798 +Node: Special FD282331 +Ref: Special FD-Footnote-1285956 +Node: Special Network286030 +Node: Special Caveats286880 +Node: Close Files And Pipes287676 +Ref: Close Files And Pipes-Footnote-1294659 +Ref: Close Files And Pipes-Footnote-2294807 +Node: Expressions294957 +Node: Values296089 +Node: Constants296765 +Node: Scalar Constants297445 +Ref: Scalar Constants-Footnote-1298304 +Node: Nondecimal-numbers298486 +Node: Regexp Constants301486 +Node: Using Constant Regexps301961 +Node: Variables305016 +Node: Using Variables305671 +Node: Assignment Options307395 +Node: Conversion309267 +Ref: table-locale-affects314768 +Ref: Conversion-Footnote-1315392 +Node: All Operators315501 +Node: Arithmetic Ops316131 +Node: Concatenation318636 +Ref: Concatenation-Footnote-1321428 +Node: Assignment Ops321548 +Ref: table-assign-ops326536 +Node: Increment Ops327867 +Node: Truth Values and Conditions331301 +Node: Truth Values332384 +Node: Typing and Comparison333433 +Node: Variable Typing334226 +Ref: Variable Typing-Footnote-1338123 +Node: Comparison Operators338245 +Ref: table-relational-ops338655 +Node: POSIX String Comparison342204 +Ref: POSIX String Comparison-Footnote-1343160 +Node: Boolean Ops343298 +Ref: Boolean Ops-Footnote-1347376 +Node: Conditional Exp347467 +Node: Function Calls349199 +Node: Precedence352793 +Node: Locales356462 +Node: Patterns and Actions357551 +Node: Pattern Overview358605 +Node: Regexp Patterns360274 +Node: Expression Patterns360817 +Node: Ranges364502 +Node: BEGIN/END367468 +Node: Using BEGIN/END368230 +Ref: Using BEGIN/END-Footnote-1370961 +Node: I/O And BEGIN/END371067 +Node: BEGINFILE/ENDFILE373349 +Node: Empty376263 +Node: Using Shell Variables376579 +Node: Action Overview378864 +Node: Statements381221 +Node: If Statement383075 +Node: While Statement384574 +Node: Do Statement386618 +Node: For Statement387774 +Node: Switch Statement390926 +Node: Break Statement393023 +Node: Continue Statement395013 +Node: Next Statement396806 +Node: Nextfile Statement399196 +Node: Exit Statement401839 +Node: Built-in Variables404255 +Node: User-modified405350 +Ref: User-modified-Footnote-1413708 +Node: Auto-set413770 +Ref: Auto-set-Footnote-1426848 +Ref: Auto-set-Footnote-2427053 +Node: ARGC and ARGV427109 +Node: Arrays430960 +Node: Array Basics432465 +Node: Array Intro433291 +Node: Reference to Elements437608 +Node: Assigning Elements439878 +Node: Array Example440369 +Node: Scanning an Array442101 +Node: Controlling Scanning444415 +Ref: Controlling Scanning-Footnote-1449502 +Node: Delete449818 +Ref: Delete-Footnote-1452583 +Node: Numeric Array Subscripts452640 +Node: Uninitialized Subscripts454823 +Node: Multidimensional456450 +Node: Multiscanning459542 +Node: Arrays of Arrays461131 +Node: Functions465771 +Node: Built-in466590 +Node: Calling Built-in467668 +Node: Numeric Functions469656 +Ref: Numeric Functions-Footnote-1473488 +Ref: Numeric Functions-Footnote-2473845 +Ref: Numeric Functions-Footnote-3473893 +Node: String Functions474162 +Ref: String Functions-Footnote-1497082 +Ref: String Functions-Footnote-2497211 +Ref: String Functions-Footnote-3497459 +Node: Gory Details497546 +Ref: table-sub-escapes499225 +Ref: table-sub-posix-92500579 +Ref: table-sub-proposed501930 +Ref: table-posix-sub503284 +Ref: table-gensub-escapes504829 +Ref: Gory Details-Footnote-1506005 +Ref: Gory Details-Footnote-2506056 +Node: I/O Functions506207 +Ref: I/O Functions-Footnote-1513192 +Node: Time Functions513339 +Ref: Time Functions-Footnote-1524272 +Ref: Time Functions-Footnote-2524340 +Ref: Time Functions-Footnote-3524498 +Ref: Time Functions-Footnote-4524609 +Ref: Time Functions-Footnote-5524721 +Ref: Time Functions-Footnote-6524948 +Node: Bitwise Functions525214 +Ref: table-bitwise-ops525776 +Ref: Bitwise Functions-Footnote-1529997 +Node: Type Functions530181 +Node: I18N Functions531332 +Node: User-defined532959 +Node: Definition Syntax533763 +Ref: Definition Syntax-Footnote-1538673 +Node: Function Example538742 +Node: Function Caveats541336 +Node: Calling A Function541757 +Node: Variable Scope542872 +Node: Pass By Value/Reference545835 +Node: Return Statement549343 +Node: Dynamic Typing552324 +Node: Indirect Calls553255 +Node: Library Functions562940 +Ref: Library Functions-Footnote-1566453 +Ref: Library Functions-Footnote-2566596 +Node: Library Names566767 +Ref: Library Names-Footnote-1570238 +Ref: Library Names-Footnote-2570458 +Node: General Functions570544 +Node: Strtonum Function571572 +Node: Assert Function574502 +Node: Round Function577828 +Node: Cliff Random Function579371 +Node: Ordinal Functions580387 +Ref: Ordinal Functions-Footnote-1583457 +Ref: Ordinal Functions-Footnote-2583709 +Node: Join Function583918 +Ref: Join Function-Footnote-1585689 +Node: Getlocaltime Function585889 +Node: Readfile Function589630 +Node: Data File Management591469 +Node: Filetrans Function592101 +Node: Rewind Function596170 +Node: File Checking597557 +Node: Empty Files598651 +Node: Ignoring Assigns600881 +Node: Getopt Function602434 +Ref: Getopt Function-Footnote-1613737 +Node: Passwd Functions613940 +Ref: Passwd Functions-Footnote-1622915 +Node: Group Functions623003 +Node: Walking Arrays631087 +Node: Sample Programs633224 +Node: Running Examples633898 +Node: Clones634626 +Node: Cut Program635850 +Node: Egrep Program645695 +Ref: Egrep Program-Footnote-1653468 +Node: Id Program653578 +Node: Split Program657194 +Ref: Split Program-Footnote-1660713 +Node: Tee Program660841 +Node: Uniq Program663644 +Node: Wc Program671073 +Ref: Wc Program-Footnote-1675339 +Ref: Wc Program-Footnote-2675539 +Node: Miscellaneous Programs675631 +Node: Dupword Program676819 +Node: Alarm Program678850 +Node: Translate Program683603 +Ref: Translate Program-Footnote-1687990 +Ref: Translate Program-Footnote-2688238 +Node: Labels Program688372 +Ref: Labels Program-Footnote-1691743 +Node: Word Sorting691827 +Node: History Sorting695711 +Node: Extract Program697550 +Ref: Extract Program-Footnote-1705053 +Node: Simple Sed705181 +Node: Igawk Program708243 +Ref: Igawk Program-Footnote-1723400 +Ref: Igawk Program-Footnote-2723601 +Node: Anagram Program723739 +Node: Signature Program726807 +Node: Advanced Features727907 +Node: Nondecimal Data729793 +Node: Array Sorting731376 +Node: Controlling Array Traversal732073 +Node: Array Sorting Functions740357 +Ref: Array Sorting Functions-Footnote-1744226 +Node: Two-way I/O744420 +Ref: Two-way I/O-Footnote-1749852 +Node: TCP/IP Networking749922 +Node: Profiling752766 +Node: Internationalization760263 +Node: I18N and L10N761688 +Node: Explaining gettext762374 +Ref: Explaining gettext-Footnote-1767442 +Ref: Explaining gettext-Footnote-2767626 +Node: Programmer i18n767791 +Node: Translator i18n771993 +Node: String Extraction772786 +Ref: String Extraction-Footnote-1773747 +Node: Printf Ordering773833 +Ref: Printf Ordering-Footnote-1776617 +Node: I18N Portability776681 +Ref: I18N Portability-Footnote-1779130 +Node: I18N Example779193 +Ref: I18N Example-Footnote-1781831 +Node: Gawk I18N781903 +Node: Debugger782524 +Node: Debugging783495 +Node: Debugging Concepts783928 +Node: Debugging Terms785784 +Node: Awk Debugging788381 +Node: Sample Debugging Session789273 +Node: Debugger Invocation789793 +Node: Finding The Bug791125 +Node: List of Debugger Commands797613 +Node: Breakpoint Control798947 +Node: Debugger Execution Control802611 +Node: Viewing And Changing Data805971 +Node: Execution Stack809327 +Node: Debugger Info810794 +Node: Miscellaneous Debugger Commands814776 +Node: Readline Support819952 +Node: Limitations820783 +Node: Arbitrary Precision Arithmetic823035 +Ref: Arbitrary Precision Arithmetic-Footnote-1824684 +Node: General Arithmetic824832 +Node: Floating Point Issues826552 +Node: String Conversion Precision827433 +Ref: String Conversion Precision-Footnote-1829138 +Node: Unexpected Results829247 +Node: POSIX Floating Point Problems831400 +Ref: POSIX Floating Point Problems-Footnote-1835225 +Node: Integer Programming835263 +Node: Floating-point Programming837002 +Ref: Floating-point Programming-Footnote-1843333 +Ref: Floating-point Programming-Footnote-2843603 +Node: Floating-point Representation843867 +Node: Floating-point Context845032 +Ref: table-ieee-formats845871 +Node: Rounding Mode847255 +Ref: table-rounding-modes847734 +Ref: Rounding Mode-Footnote-1850749 +Node: Gawk and MPFR850928 +Node: Arbitrary Precision Floats852183 +Ref: Arbitrary Precision Floats-Footnote-1854626 +Node: Setting Precision854942 +Ref: table-predefined-precision-strings855628 +Node: Setting Rounding Mode857773 +Ref: table-gawk-rounding-modes858177 +Node: Floating-point Constants859364 +Node: Changing Precision860793 +Ref: Changing Precision-Footnote-1862190 +Node: Exact Arithmetic862364 +Node: Arbitrary Precision Integers865502 +Ref: Arbitrary Precision Integers-Footnote-1868520 +Node: Dynamic Extensions868667 +Node: Extension Intro870125 +Node: Plugin License871390 +Node: Extension Mechanism Outline872075 +Ref: load-extension872492 +Ref: load-new-function873970 +Ref: call-new-function874965 +Node: Extension API Description876980 +Node: Extension API Functions Introduction878193 +Node: General Data Types883059 +Ref: General Data Types-Footnote-1888664 +Node: Requesting Values888963 +Ref: table-value-types-returned889694 +Node: Constructor Functions890648 +Node: Registration Functions893668 +Node: Extension Functions894353 +Node: Exit Callback Functions896578 +Node: Extension Version String897827 +Node: Input Parsers898477 +Node: Output Wrappers908234 +Node: Two-way processors912744 +Node: Printing Messages914952 +Ref: Printing Messages-Footnote-1916029 +Node: Updating `ERRNO'916181 +Node: Accessing Parameters916920 +Node: Symbol Table Access918150 +Node: Symbol table by name918662 +Node: Symbol table by cookie920409 +Ref: Symbol table by cookie-Footnote-1924539 +Node: Cached values924602 +Ref: Cached values-Footnote-1928051 +Node: Array Manipulation928142 +Ref: Array Manipulation-Footnote-1929240 +Node: Array Data Types929279 +Ref: Array Data Types-Footnote-1931982 +Node: Array Functions932074 +Node: Flattening Arrays935840 +Node: Creating Arrays942692 +Node: Extension API Variables947417 +Node: Extension Versioning948053 +Node: Extension API Informational Variables949954 +Node: Extension API Boilerplate951040 +Node: Finding Extensions954844 +Node: Extension Example955404 +Node: Internal File Description956134 +Node: Internal File Ops960225 +Ref: Internal File Ops-Footnote-1971733 +Node: Using Internal File Ops971873 +Ref: Using Internal File Ops-Footnote-1974226 +Node: Extension Samples974492 +Node: Extension Sample File Functions976016 +Node: Extension Sample Fnmatch984501 +Node: Extension Sample Fork986227 +Node: Extension Sample Inplace987445 +Node: Extension Sample Ord989223 +Node: Extension Sample Readdir990059 +Node: Extension Sample Revout991591 +Node: Extension Sample Rev2way992184 +Node: Extension Sample Read write array992874 +Node: Extension Sample Readfile994757 +Node: Extension Sample API Tests995575 +Node: Extension Sample Time996100 +Node: gawkextlib997464 +Node: Language History1000245 +Node: V7/SVR3.11001767 +Node: SVR41004087 +Node: POSIX1005529 +Node: BTL1006915 +Node: POSIX/GNU1007649 +Node: Common Extensions1013184 +Node: Ranges and Locales1014490 +Ref: Ranges and Locales-Footnote-11019108 +Ref: Ranges and Locales-Footnote-21019135 +Ref: Ranges and Locales-Footnote-31019395 +Node: Contributors1019616 +Node: Installation1024691 +Node: Gawk Distribution1025585 +Node: Getting1026069 +Node: Extracting1026895 +Node: Distribution contents1028587 +Node: Unix Installation1034292 +Node: Quick Installation1034909 +Node: Additional Configuration Options1037353 +Node: Configuration Philosophy1039089 +Node: Non-Unix Installation1041443 +Node: PC Installation1041901 +Node: PC Binary Installation1043200 +Node: PC Compiling1045048 +Node: PC Testing1047992 +Node: PC Using1049168 +Node: Cygwin1053353 +Node: MSYS1054353 +Node: VMS Installation1054867 +Node: VMS Compilation1055470 +Ref: VMS Compilation-Footnote-11056477 +Node: VMS Installation Details1056535 +Node: VMS Running1058170 +Node: VMS Old Gawk1059777 +Node: Bugs1060251 +Node: Other Versions1064107 +Node: Notes1070191 +Node: Compatibility Mode1070991 +Node: Additions1071774 +Node: Accessing The Source1072701 +Node: Adding Code1074141 +Node: New Ports1080186 +Node: Derived Files1084321 +Ref: Derived Files-Footnote-11089642 +Ref: Derived Files-Footnote-21089676 +Ref: Derived Files-Footnote-31090276 +Node: Future Extensions1090374 +Node: Implementation Limitations1090957 +Node: Extension Design1092209 +Node: Old Extension Problems1093363 +Ref: Old Extension Problems-Footnote-11094871 +Node: Extension New Mechanism Goals1094928 +Ref: Extension New Mechanism Goals-Footnote-11098293 +Node: Extension Other Design Decisions1098479 +Node: Extension Future Growth1100585 +Node: Old Extension Mechanism1101421 +Node: Basic Concepts1103161 +Node: Basic High Level1103842 +Ref: figure-general-flow1104113 +Ref: figure-process-flow1104712 +Ref: Basic High Level-Footnote-11107941 +Node: Basic Data Typing1108126 +Node: Glossary1111481 +Node: Copying1136943 +Node: GNU Free Documentation License1174500 +Node: Index1199637  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index bfc3a17f..2787d4b0 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -26,7 +26,7 @@ @c applies to and all the info about who's publishing this edition @c These apply across the board. -@set UPDATE-MONTH December, 2013 +@set UPDATE-MONTH January, 2014 @set VERSION 4.1 @set PATCHLEVEL 0 @@ -153,7 +153,8 @@ Some comments on the layout for TeX. @copying Copyright @copyright{} 1989, 1991, 1992, 1993, 1996, 1997, 1998, 1999, -2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013 +2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013, +2014 Free Software Foundation, Inc. @sp 2 @@ -6676,6 +6677,18 @@ awk -F: '$2 == ""' /etc/passwd @node Full Line Fields @subsection Making The Full Line Be A Single Field +Occasionally, it's useful to treat the whole input line as a +single field. This can be done easily and portably simply by +setting @code{FS} to @code{"\n"} (a newline).@footnote{Thanks to +Andrew Schorr for this tip.} + +@example +awk -F'\n' '@var{program}' @var{files @dots{}} +@end example + +@noindent +When you do this, @code{$1} is the same as @code{$0}. + @node Field Splitting Summary @subsection Field-Splitting Summary diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 842fafe6..7e8197d7 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -21,7 +21,7 @@ @c applies to and all the info about who's publishing this edition @c These apply across the board. -@set UPDATE-MONTH December, 2013 +@set UPDATE-MONTH January, 2014 @set VERSION 4.1 @set PATCHLEVEL 0 @@ -148,7 +148,8 @@ Some comments on the layout for TeX. @copying Copyright @copyright{} 1989, 1991, 1992, 1993, 1996, 1997, 1998, 1999, -2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013 +2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013, +2014 Free Software Foundation, Inc. @sp 2 -- cgit v1.2.3 From 23242aad7725855bcfd9ede006713538ac393fbd Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 3 Jan 2014 12:53:01 +0200 Subject: Update Finnish .po and .gmo files. --- po/fi.gmo | Bin 45006 -> 84089 bytes po/fi.po | 1475 +++++++++++++++++++++++++++---------------------------------- 2 files changed, 649 insertions(+), 826 deletions(-) diff --git a/po/fi.gmo b/po/fi.gmo index 18411e5b..c2e017f1 100644 Binary files a/po/fi.gmo and b/po/fi.gmo differ diff --git a/po/fi.po b/po/fi.po index 37607553..e58b6179 100644 --- a/po/fi.po +++ b/po/fi.po @@ -1,14 +1,14 @@ # Finnish messages for gawk. -# Copyright © 2010, 2011, 2012 Free Software Foundation, Inc. +# Copyright © 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the gawk package. -# Jorma Karvonen , 2010-2012. +# Jorma Karvonen , 2010-2014. # msgid "" msgstr "" -"Project-Id-Version: gawk 4.0.0h\n" +"Project-Id-Version: gawk 4.0.75\n" "Report-Msgid-Bugs-To: arnold@skeeve.com\n" -"POT-Creation-Date: 2013-05-09 16:05+0300\n" -"PO-Revision-Date: 2012-03-13 18:00+0200\n" +"POT-Creation-Date: 2013-04-17 20:54+0300\n" +"PO-Revision-Date: 2014-01-02 11:55+0200\n" "Last-Translator: Jorma Karvonen \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -16,6 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.5.4\n" #: array.c:254 #, c-format @@ -54,9 +55,8 @@ msgid "attempt to use scalar `%s[\"%.*s\"]' as an array" msgstr "yritettiin käyttää skalaaria â€%s[\"%.*s\"]†taulukkona" #: array.c:773 -#, fuzzy msgid "adump: first argument not an array" -msgstr "adump: argumentti ei ole taulukko" +msgstr "adump: ensimmäinen argumentti ei ole taulukko" #: array.c:812 msgid "asort: second argument not an array" @@ -76,27 +76,19 @@ msgstr "asorti: ensimmäinen argumentti ei ole taulukko" #: array.c:828 msgid "asort: cannot use a subarray of first arg for second arg" -msgstr "" -"asort: ei voida käyttää ensimmäisen argumentin alitaulukkoa toiselle " -"argumentille" +msgstr "asort: ensimmäisen argumentin alitaulukon käyttö toiselle argumentille epäonnistui" #: array.c:829 msgid "asorti: cannot use a subarray of first arg for second arg" -msgstr "" -"asorti: ei voida käyttää ensimmäisen argumentin alitaulukkoa toiselle " -"argumentille" +msgstr "asorti: ensimmäisen argumentin alitaulukon käyttö toiselle argumentille epäonnistui" #: array.c:834 msgid "asort: cannot use a subarray of second arg for first arg" -msgstr "" -"asort: ei voida käyttää toisen argumentin alitaulukkoa ensimmäiselle " -"argumentille" +msgstr "asort: toisen argumentin alitaulukon käyttö ensimmäiselle argumentille epäonnistui" #: array.c:835 msgid "asorti: cannot use a subarray of second arg for first arg" -msgstr "" -"asorti: ei voida käyttää toisen argumentin alitaulukkoa ensimmäiselle " -"argumentille" +msgstr "asorti: toisen argumentin alitaulukon käyttö ensimmäiselle argumentille epäonnistui" #: array.c:1309 #, c-format @@ -128,14 +120,12 @@ msgstr "â€%s†on sisäänrakennettu funktio. Sitä ei voi määritellä uudel #: awkgram.y:419 msgid "regexp constant `//' looks like a C++ comment, but is not" -msgstr "" -"säännöllisen lausekkeen vakio â€//†näyttää C++-kommentilta, mutta ei ole" +msgstr "säännöllisen lausekkeen vakio â€//†näyttää C++-kommentilta, mutta ei ole" #: awkgram.y:423 #, 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" +msgstr "säännöllisen lausekkeen vakio â€/%s/†näyttää C-kommentilta, mutta ei ole" #: awkgram.y:515 #, c-format @@ -170,16 +160,15 @@ msgstr "â€return†käytetty funktiokontekstin ulkopuolella" #: awkgram.y:922 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 \"\"â€" +msgstr "pelkkä â€print†BEGIN- tai END-säännössä pitäisi luultavasti olla â€print \"\"â€" #: awkgram.y:988 awkgram.y:1037 msgid "`delete' is not allowed with SYMTAB" -msgstr "" +msgstr "â€delete†ei ole sallittu kohteessa SYMTAB" #: awkgram.y:990 awkgram.y:1039 msgid "`delete' is not allowed with FUNCTAB" -msgstr "" +msgstr "â€delete†ei ole sallittu kohteessa FUNCTAB" #: awkgram.y:1024 awkgram.y:1028 msgid "`delete(array)' is a non-portable tawk extension" @@ -234,7 +223,7 @@ msgstr "epäsuorat funktiokutsut ovat gawk-laajennus" #: awkgram.y:1620 #, c-format msgid "can not use special variable `%s' for indirect function call" -msgstr "ei voi käyttää erikoismuuttujaa â€%s†epäsuoralle funktiokutsulle" +msgstr "erikoismuuttujan â€%s†käyttö epäsuoralle funktiokutsulle epäonnistui" #: awkgram.y:1698 msgid "invalid subscript expression" @@ -242,11 +231,11 @@ msgstr "virheellinen indeksointilauseke" #: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:119 msgid "warning: " -msgstr "varoitus:" +msgstr "varoitus: " #: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:151 msgid "fatal: " -msgstr "tuhoisa:" +msgstr "tuhoisa: " #: awkgram.y:2092 msgid "unexpected newline or end of string" @@ -256,12 +245,12 @@ msgstr "odottamaton rivinvaihto tai merkkijonon loppu" #: debug.c:2792 debug.c:5040 #, c-format msgid "can't open source file `%s' for reading (%s)" -msgstr "ei voi avata lähdetiedostoa â€%s†lukemista varten (%s)" +msgstr "lähdetiedoston â€%s†avaaminen lukemista varten (%s) epäonnistui" #: awkgram.y:2360 awkgram.y:2485 -#, fuzzy, c-format +#, c-format msgid "can't open shared library `%s' for reading (%s)" -msgstr "ei voi avata lähdetiedostoa â€%s†lukemista varten (%s)" +msgstr "jaetun kirjaston â€%s†avaaminen lukemista varten (%s) epäonnistui" #: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:130 debug.c:5191 msgid "reason unknown" @@ -270,7 +259,7 @@ msgstr "syy tuntematon" #: awkgram.y:2371 awkgram.y:2395 #, c-format msgid "can't include `%s' and use it as a program file" -msgstr "" +msgstr "kohteen â€%s†sisällyttäminen ja käyttö ohjelmatiedostona epäonnistui" #: awkgram.y:2384 #, c-format @@ -278,9 +267,9 @@ msgid "already included source file `%s'" msgstr "on jo sisällytetty lähdetiedostoon â€%sâ€" #: awkgram.y:2385 -#, fuzzy, c-format +#, c-format msgid "already loaded shared library `%s'" -msgstr "on jo sisällytetty lähdetiedostoon â€%sâ€" +msgstr "jaettu kirjasto â€%s†on jo ladattu" #: awkgram.y:2420 msgid "@include is a gawk extension" @@ -291,14 +280,12 @@ msgid "empty filename after @include" msgstr "tyhjä tiedostonimi @include:n jälkeen" #: awkgram.y:2470 -#, fuzzy msgid "@load is a gawk extension" -msgstr "@include on gawk-laajennus" +msgstr "@load on gawk-laajennus" #: awkgram.y:2476 -#, fuzzy msgid "empty filename after @load" -msgstr "tyhjä tiedostonimi @include:n jälkeen" +msgstr "tyhjä tiedostonimi @load:n jälkeen" #: awkgram.y:2610 msgid "empty program text on command line" @@ -307,7 +294,7 @@ msgstr "tyhjä ohjelmateksti komentorivillä" #: awkgram.y:2725 #, c-format msgid "can't read sourcefile `%s' (%s)" -msgstr "ei voi lukea lähdetiedostoa â€%s†(%s)" +msgstr "lähdetiedoston â€%s†(%s) lukeminen epäonnistui" #: awkgram.y:2736 #, c-format @@ -320,8 +307,7 @@ msgstr "lähdetiedoston lopussa ei ole rivinvaihtoa" #: awkgram.y:3018 msgid "unterminated regexp ends with `\\' at end of file" -msgstr "" -"päättämätön säännöllinen lauseke loppuu â€\\â€-merkkeihin tiedoston lopussa" +msgstr "päättämätön säännöllinen lauseke loppuu â€\\â€-merkkeihin tiedoston lopussa" #: awkgram.y:3042 #, c-format @@ -390,7 +376,7 @@ msgstr "â€%s†on gawk-laajennus" #: awkgram.y:3631 #, c-format msgid "POSIX does not allow `%s'" -msgstr "POSIX ei salli operaattori â€%sâ€" +msgstr "POSIX ei salli operaattoria â€%sâ€" #: awkgram.y:3639 #, c-format @@ -409,9 +395,7 @@ msgstr "%d on virheellinen argumenttilukumäärä operaattorille %s" #: awkgram.y:3798 #, c-format msgid "%s: string literal as last arg of substitute has no effect" -msgstr "" -"%s: merkkijonoliteraalilla ei ole vaikutusta korvauksen viimeisenä " -"argumenttina" +msgstr "%s: merkkijonoliteraalilla ei ole vaikutusta korvauksen viimeisenä argumenttina" #: awkgram.y:3803 #, c-format @@ -434,74 +418,69 @@ msgstr "dcgettext(_\"...\")-käyttö on virheellinen: poista alaviiva alusta" msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" msgstr "dcngettext(_\"...\")-käyttö on virheellinen: poista alaviiva alusta" -#: awkgram.y:3992 -#, fuzzy -msgid "index: regexp constant as second argument is not allowed" -msgstr "index: toinen vastaanotettu argumentti ei ole merkkijono" - -#: awkgram.y:4045 +#: awkgram.y:4039 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "funktio â€%sâ€: parametri â€%s†varjostaa yleismuuttujaa" -#: awkgram.y:4102 debug.c:4021 debug.c:4064 debug.c:5189 +#: awkgram.y:4096 debug.c:4021 debug.c:4064 debug.c:5189 #, c-format msgid "could not open `%s' for writing (%s)" -msgstr "ei voitu avata tiedostoa â€%s†kirjoittamista varten (%s)" +msgstr "tiedoston â€%s†avaaminen kirjoittamista varten (%s) epäonnistui" -#: awkgram.y:4103 +#: awkgram.y:4097 msgid "sending variable list to standard error" msgstr "lähetetään muuttujaluettelo vakiovirheeseen" -#: awkgram.y:4111 +#: awkgram.y:4105 #, c-format msgid "%s: close failed (%s)" msgstr "%s: sulkeminen epäonnistui (%s)" -#: awkgram.y:4136 +#: awkgram.y:4130 msgid "shadow_funcs() called twice!" msgstr "shadow_funcs() kutsuttu kahdesti!" -#: awkgram.y:4144 +#: awkgram.y:4138 msgid "there were shadowed variables." msgstr "siellä oli varjostettuja muuttujia." -#: awkgram.y:4215 +#: awkgram.y:4209 #, c-format msgid "function name `%s' previously defined" msgstr "funktionimi â€%s†on jo aikaisemmin määritelty" -#: awkgram.y:4261 +#: awkgram.y:4255 #, c-format msgid "function `%s': can't use function name as parameter name" -msgstr "funktio â€%sâ€: ei voi käyttää funktionimeä parametrinimenä" +msgstr "funktio â€%sâ€: funktionimen käyttö parametrinimenä epäonnistui" -#: awkgram.y:4264 +#: awkgram.y:4258 #, c-format msgid "function `%s': can't use special variable `%s' as a function parameter" -msgstr "funktio â€%sâ€: ei voi käyttää erikoismuuttujaa â€%s†funktioparametrina" +msgstr "funktio â€%sâ€: erikoismuuttujan â€%s†käyttö funktioparametrina epäonnistui" -#: awkgram.y:4272 +#: awkgram.y:4266 #, c-format msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d" msgstr "funktio â€%sâ€: parametri #%d, â€%sâ€, samanlainen parametri #%d" -#: awkgram.y:4366 awkgram.y:4372 +#: awkgram.y:4360 awkgram.y:4366 #, c-format msgid "function `%s' called but never defined" msgstr "funktiota â€%s†kutsuttiin, mutta sitä ei ole koskaan määritelty" -#: awkgram.y:4376 +#: awkgram.y:4370 #, c-format msgid "function `%s' defined but never called directly" msgstr "funktio â€%s†määriteltiin, mutta sitä ei ole koskaan kutsuttu suoraan" -#: awkgram.y:4408 +#: awkgram.y:4402 #, c-format msgid "regexp constant for parameter #%d yields boolean value" msgstr "säännöllisen lausekkeen vakio parametrille #%d antaa boolean-arvon" -#: awkgram.y:4467 +#: awkgram.y:4461 #, c-format msgid "" "function `%s' called with space between name and `(',\n" @@ -510,11 +489,11 @@ msgstr "" "funktio â€%s†kutsuttu välilyönnillä nimen ja â€(â€-merkin\n" "välillä, tai käytetty muuttujana tai taulukkona" -#: awkgram.y:4703 +#: awkgram.y:4697 msgid "division by zero attempted" msgstr "nollalla jakoa yritettiin" -#: awkgram.y:4712 +#: awkgram.y:4706 #, c-format msgid "division by zero attempted in `%%'" msgstr "jakoa nollalla yritettiin operaattorissa â€%%â€" @@ -541,16 +520,12 @@ msgstr "exp: argumentti %g on lukualueen ulkopuolella" #: builtin.c:224 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" -msgstr "" -"fflush: ei voi tyhjentää: putki â€%s†avattu lukemista varten, ei " -"kirjoittamiseen" +msgstr "fflush: tyhjentäminen epäonnistui: putki â€%s†avattu lukemista varten, ei kirjoittamiseen" #: builtin.c:227 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" -msgstr "" -"fflush: ei voi tyhjentää: tiedosto â€%s†avattu lukemista varten, ei " -"kirjoittamiseen" +msgstr "fflush: tyhjentäminen epäonnistui: tiedosto â€%s†avattu lukemista varten, ei kirjoittamiseen" #: builtin.c:239 #, c-format @@ -620,9 +595,7 @@ msgstr "kohtalokas: argumenttilukumäärän argumentilla â€$†on oltava > 0" #: builtin.c:914 #, 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ä" +msgstr "kohtalokas: argumenttilukumäärä %ld on suurempi kuin toimitettujen argumenttien lukumäärä" #: builtin.c:918 msgid "fatal: `$' not permitted after period in format" @@ -630,9 +603,7 @@ msgstr "kohtalokas: â€$â€-argumentti ei ole sallittu pisteen jälkeen muodossa #: builtin.c:934 msgid "fatal: no `$' supplied for positional field width or precision" -msgstr "" -"kohtalokas: ei â€$â€-argumenttia tarjottu sijantikenttäleveydelle tai " -"tarkkuudelle" +msgstr "kohtalokas: ei â€$â€-argumenttia tarjottu sijantikenttäleveydelle tai tarkkuudelle" #: builtin.c:1006 msgid "`l' is meaningless in awk formats; ignored" @@ -666,8 +637,7 @@ msgstr "[s]printf: arvo %g on lukualueen ulkopuolella â€%%%câ€-muodolle" #: builtin.c:1537 #, c-format msgid "ignoring unknown format specifier character `%c': no argument converted" -msgstr "" -"ohitetaan tuntematon muotoargumenttimerkki â€%câ€: ei muunnettu argumenttia" +msgstr "ohitetaan tuntematon muotoargumenttimerkki â€%câ€: ei muunnettu argumenttia" #: builtin.c:1542 msgid "fatal: not enough arguments to satisfy format string" @@ -686,9 +656,8 @@ msgid "too many arguments supplied for format string" msgstr "muotomerkkijonoon toimitettu liian monta argumenttia" #: builtin.c:1610 -#, fuzzy msgid "sprintf: no arguments" -msgstr "printf: ei argumentteja" +msgstr "sprintf: ei argumentteja" #: builtin.c:1633 builtin.c:1644 msgid "printf: no arguments" @@ -721,8 +690,7 @@ msgstr "substr: typistetään pituus %g, joka ei ole kokonaisluku" #: builtin.c:1736 #, 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" +msgstr "substr: pituus %g liian suuri merkkijononindeksointiin, typistetään arvoon %g" #: builtin.c:1748 #, c-format @@ -745,16 +713,12 @@ msgstr "substr: aloitusindeksi %g on merkkijonon lopun jälkeen" #: builtin.c:1802 #, c-format -msgid "" -"substr: length %g at start index %g exceeds length of first argument (%lu)" -msgstr "" -"substr: pituus %g alkuindeksissä %g ylittää ensimmäisen argumentin pituuden " -"(%lu)" +msgid "substr: length %g at start index %g exceeds length of first argument (%lu)" +msgstr "substr: pituus %g alkuindeksissä %g ylittää ensimmäisen argumentin pituuden (%lu)" #: builtin.c:1876 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" -msgstr "" -"strftime: muotoarvolla kohteessa PROCINFO[\"strftime\"] on numerotyyppi" +msgstr "strftime: muotoarvolla kohteessa PROCINFO[\"strftime\"] on numerotyyppi" #: builtin.c:1899 msgid "strftime: received non-numeric second argument" @@ -762,9 +726,7 @@ msgstr "strftime: toinen vastaanotettu argumentti ei ole numeerinen" #: builtin.c:1903 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" +msgstr "strftime: toinen argumentti on pienempi kuin 0 tai liian suuri time_t-rakenteeseen" #: builtin.c:1910 msgid "strftime: received non-string first argument" @@ -784,7 +746,7 @@ msgstr "mktime: vähintään yksi arvoista on oletuslukualueen ulkopuolella" #: builtin.c:2035 msgid "'system' function not allowed in sandbox mode" -msgstr "â€systemâ€-funktio ei ole sallittu hiekkalaatikkotilassa" +msgstr "’system’-funktio ei ole sallittu hiekkalaatikkotilassa" #: builtin.c:2040 msgid "system: received non-string argument" @@ -840,19 +802,19 @@ msgid "lshift: received non-numeric second argument" msgstr "lshift: toinen vastaanotettu argumentti ei ole numeerinen" #: builtin.c:3011 -#, fuzzy, c-format +#, c-format msgid "lshift(%f, %f): negative values will give strange results" -msgstr "lshift(%lf, %lf): negatiiviset arvot antavat outoja tuloksia" +msgstr "lshift(%f, %f): negatiiviset arvot antavat outoja tuloksia" #: builtin.c:3013 -#, fuzzy, c-format +#, c-format msgid "lshift(%f, %f): fractional values will be truncated" -msgstr "lshift(%lf, %lf): jaosarvot typistetään" +msgstr "lshift(%f, %f): jaosarvot typistetään" #: builtin.c:3015 -#, fuzzy, c-format +#, c-format msgid "lshift(%f, %f): too large shift value will give strange results" -msgstr "lshift(%lf, %lf): liian suuri siirrosarvo antaa outoja tuloksia" +msgstr "lshift(%f, %f): liian suuri siirrosarvo antaa outoja tuloksia" #: builtin.c:3040 msgid "rshift: received non-numeric first argument" @@ -863,78 +825,75 @@ msgid "rshift: received non-numeric second argument" msgstr "rshift: toinen vastaanotettu argumentti ei ole numeerinen" #: builtin.c:3048 -#, fuzzy, c-format +#, c-format msgid "rshift(%f, %f): negative values will give strange results" -msgstr "rshift(%lf, %lf): negatiiviset arvot antavat outoja tuloksia" +msgstr "rshift(%f, %f): negatiiviset arvot antavat outoja tuloksia" #: builtin.c:3050 -#, fuzzy, c-format +#, c-format msgid "rshift(%f, %f): fractional values will be truncated" -msgstr "rshift(%lf, %lf): jaosarvot typistetään" +msgstr "rshift(%f, %f): jaosarvot typistetään" #: builtin.c:3052 -#, fuzzy, c-format +#, c-format msgid "rshift(%f, %f): too large shift value will give strange results" -msgstr "rshift(%lf, %lf): liian suuri siirrosarvo antaa outoja tuloksia" +msgstr "rshift(%f, %f): liian suuri siirrosarvo antaa outoja tuloksia" #: builtin.c:3077 mpfr.c:968 -#, fuzzy msgid "and: called with less than two arguments" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "and: kutsuttu vähemmällä kuin kahdella argumentilla" #: builtin.c:3082 -#, fuzzy, c-format +#, c-format msgid "and: argument %d is non-numeric" -msgstr "exp: argumentti %g on lukualueen ulkopuolella" +msgstr "and: argumentti %d ei ole numeeraaliargumentti" #: builtin.c:3086 -#, fuzzy, c-format +#, c-format msgid "and: argument %d negative value %g will give strange results" -msgstr "and(%lf, %lf): negatiiviset arvot antavat outoja tuloksia" +msgstr "and: argumentin %d negatiivinen arvo %g antaa outoja tuloksia" #: builtin.c:3109 mpfr.c:1000 -#, fuzzy msgid "or: called with less than two arguments" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "or: kutsuttu vähemmällä kuin kahdella argumentilla" #: builtin.c:3114 -#, fuzzy, c-format +#, c-format msgid "or: argument %d is non-numeric" -msgstr "exp: argumentti %g on lukualueen ulkopuolella" +msgstr "or: argumentti %d ei ole numeraaliargumentti" #: builtin.c:3118 -#, fuzzy, c-format +#, c-format msgid "or: argument %d negative value %g will give strange results" -msgstr "compl(%lf): negatiiviset arvot antavat outoja tuloksia" +msgstr "or: argumentin %d negatiivinen arvo %g antaa outoja tuloksia" #: builtin.c:3140 mpfr.c:1031 -#, fuzzy msgid "xor: called with less than two arguments" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "xor: kutsuttu vähemmällä kuin kahdella argumentilla" #: builtin.c:3146 -#, fuzzy, c-format +#, c-format msgid "xor: argument %d is non-numeric" -msgstr "exp: argumentti %g on lukualueen ulkopuolella" +msgstr "xor: argumentti %d ei ole numeraaliargumentti" #: builtin.c:3150 -#, fuzzy, c-format +#, c-format msgid "xor: argument %d negative value %g will give strange results" -msgstr "xor(%lf, %lf): negatiiviset arvot antavat outoja tuloksia" +msgstr "xor: argumentin %d negatiivinen arvo %g antaa outoja tuloksia" #: builtin.c:3175 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl: vastaanotettu argumentti ei ole numeerinen" #: builtin.c:3181 -#, fuzzy, c-format +#, c-format msgid "compl(%f): negative value will give strange results" -msgstr "compl(%lf): negatiiviset arvot antavat outoja tuloksia" +msgstr "compl(%f): negatiivinen arvo antaa outoja tuloksia" #: builtin.c:3183 -#, fuzzy, c-format +#, c-format msgid "compl(%f): fractional value will be truncated" -msgstr "compl(%lf): jaosarvo typistetään" +msgstr "compl(%f): jaosarvo typistetään" #: builtin.c:3352 #, c-format @@ -944,853 +903,843 @@ msgstr "dcgettext: â€%s†ei ole kelvollinen paikallinen kategoria" #: command.y:225 #, c-format msgid "Type (g)awk statement(s). End with the command \"end\"\n" -msgstr "" +msgstr "Kirjoita (g)awk-lause(et). Lopeta komennolla \"end\"\n" #: command.y:289 -#, fuzzy, c-format +#, c-format msgid "invalid frame number: %d" -msgstr "Virheellinen lukualueen loppu" +msgstr "virheellinen kehysnumero: %d" #: command.y:295 -#, fuzzy, c-format +#, c-format msgid "info: invalid option - \"%s\"" -msgstr "%s: virheellinen valitsin -- ’%c’\n" +msgstr "info: virheellinen valitsin -- â€%sâ€" #: command.y:321 #, c-format msgid "source \"%s\": already sourced." -msgstr "" +msgstr "source â€%sâ€: on jo merkitty lähteeksi." #: command.y:326 #, c-format msgid "save \"%s\": command not permitted." -msgstr "" +msgstr "save â€%sâ€: komento ei ole sallittu." #: command.y:339 msgid "Can't use command `commands' for breakpoint/watchpoint commands" -msgstr "" +msgstr "Komennon â€commands†käyttö breakpoint/watchpoint-komentoja varten epäonnistui" #: command.y:341 msgid "no breakpoint/watchpoint has been set yet" -msgstr "" +msgstr "yhtään breakpoint/watchpoint -kohdetta ei ole vielä asetettu" #: command.y:343 msgid "invalid breakpoint/watchpoint number" -msgstr "" +msgstr "virheellinen breakpoint/watchpoint-numero" #: command.y:348 #, c-format msgid "Type commands for when %s %d is hit, one per line.\n" -msgstr "" +msgstr "Kirjoita komennot, kun %s %d osui, yksi per rivi.\n" #: command.y:350 #, c-format msgid "End with the command \"end\"\n" -msgstr "" +msgstr "Lopeta komennolla â€endâ€\n" #: command.y:357 msgid "`end' valid only in command `commands' or `eval'" -msgstr "" +msgstr "â€end†on kelvollinen vain komennoissa â€commands†tai â€evalâ€" #: command.y:367 msgid "`silent' valid only in command `commands'" -msgstr "" +msgstr "â€silent†on kelvollinen vain komennossa â€commandsâ€" #: command.y:373 -#, fuzzy, c-format +#, c-format msgid "trace: invalid option - \"%s\"" -msgstr "%s: virheellinen valitsin -- ’%c’\n" +msgstr "trace: virheellinen valitsin -- â€%sâ€" #: command.y:387 msgid "condition: invalid breakpoint/watchpoint number" -msgstr "" +msgstr "condition: virheellinen breakpoint/watchpoint-numero" #: command.y:449 -#, fuzzy msgid "argument not a string" -msgstr "exp: argumentti %g on lukualueen ulkopuolella" +msgstr "argumentti ei ole merkkijono" #: command.y:459 command.y:464 #, c-format msgid "option: invalid parameter - \"%s\"" -msgstr "" +msgstr "option: virheellinen parametri - â€%sâ€" #: command.y:474 #, c-format msgid "no such function - \"%s\"" -msgstr "" +msgstr "tuntematon funktio - â€%sâ€" #: command.y:531 -#, fuzzy, c-format +#, c-format msgid "enable: invalid option - \"%s\"" -msgstr "%s: virheellinen valitsin -- ’%c’\n" +msgstr "enable: virheellinen valitsin -- â€%sâ€" #: command.y:597 -#, fuzzy, c-format +#, c-format msgid "invalid range specification: %d - %d" -msgstr "Virheellinen lukualueen loppu" +msgstr "virheellinen lukualuemäärittely: %d - %d" #: command.y:659 -#, fuzzy msgid "non-numeric value for field number" -msgstr "tuntematon arvo kenttämääritteelle: %d\n" +msgstr "ei-numeerinen arvo kenttänumerolle" #: command.y:680 command.y:687 msgid "non-numeric value found, numeric expected" -msgstr "" +msgstr "löytyi ei-numeerinen arvo, odotettiin numeraalia" #: command.y:712 command.y:718 msgid "non-zero integer value" -msgstr "" +msgstr "nollasta poikkeava kokonaislukuarvo" #: command.y:817 -msgid "" -"backtrace [N] - print trace of all or N innermost (outermost if N < 0) " -"frames." -msgstr "" +msgid "backtrace [N] - 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:819 -msgid "" -"break [[filename:]N|function] - set breakpoint at the specified location." -msgstr "" +msgid "break [[filename:]N|function] - set breakpoint at the specified location." +msgstr "break [[filename:]N|function] - aseta breakpoint määriteltyyn sijaintiin." #: command.y:821 msgid "clear [[filename:]N|function] - delete breakpoints previously set." -msgstr "" +msgstr "clear [[filename:]N|function] - poista aiemmin asetetut breakpoint-kohdat." #: command.y:823 -msgid "" -"commands [num] - starts a list of commands to be executed at a breakpoint" -"(watchpoint) hit." -msgstr "" +msgid "commands [num] - starts a list of commands to be executed at a breakpoint(watchpoint) hit." +msgstr "commands [num] - aloittaa komentojen luettelon, joka suoritetaan keskeytyskohta(watchpoint)osumassa." #: command.y:825 msgid "condition num [expr] - set or clear breakpoint or watchpoint condition." -msgstr "" +msgstr "condition num [expr] - aseta tai nollaa keskeytyskohta- tai vahtikohtaehdot." #: command.y:827 msgid "continue [COUNT] - continue program being debugged." -msgstr "" +msgstr "continue [COUNT] - continue program being debugged." #: command.y:829 msgid "delete [breakpoints] [range] - delete specified breakpoints." -msgstr "" +msgstr "delete [keskeytyskohdat] [lukualue] - poista määritellyt keskeytyskohdat." #: command.y:831 msgid "disable [breakpoints] [range] - disable specified breakpoints." -msgstr "" +msgstr "disable [keskeytyskohdat] [lukualue] - ota pois käytöstä määritellyt keskeytyskohdat." #: command.y:833 msgid "display [var] - print value of variable each time the program stops." -msgstr "" +msgstr "display [muuttuja] - tulosta muuttujan arvo joka kerta kun ohjelma pysähtyy." #: command.y:835 msgid "down [N] - move N frames down the stack." -msgstr "" +msgstr "down [N] - siirrä N kehystä alaspäin pinossa." #: command.y:837 msgid "dump [filename] - dump instructions to file or stdout." -msgstr "" +msgstr "dump [tiedostonimi] - vedosta käskyt tiedostoon tai vakiotulosteeseen." #: command.y:839 msgid "enable [once|del] [breakpoints] [range] - enable specified breakpoints." -msgstr "" +msgstr "enable [once|del] [keskeytyskohdat] [lukualue] - ota käyttöön määritellyt keskeytyskohdat." #: command.y:841 msgid "end - end a list of commands or awk statements." -msgstr "" +msgstr "end - lopeta komentojen tai awk-lauseiden luottelo." #: command.y:843 msgid "eval stmt|[p1, p2, ...] - evaluate awk statement(s)." -msgstr "" +msgstr "eval stmt|[p1, p2, ...] - evaloi awk-lauseet." #: command.y:845 msgid "finish - execute until selected stack frame returns." -msgstr "" +msgstr "finish - suorita kunnes palautetaan valittu pinokehys." #: command.y:847 msgid "frame [N] - select and print stack frame number N." -msgstr "" +msgstr "frame [N] - valitse ja tulosta pinokehys numero N." #: command.y:849 msgid "help [command] - print list of commands or explanation of command." -msgstr "" +msgstr "help [komento] - tulosta komentoluettelo tai komennon selitys." #: command.y:851 msgid "ignore N COUNT - set ignore-count of breakpoint number N to COUNT." -msgstr "" +msgstr "ignore N COUNT - aseta keskeytyskohdan ignore-count numero N arvoon COUNT." #: command.y:853 -msgid "" -"info topic - source|sources|variables|functions|break|frame|args|locals|" -"display|watch." -msgstr "" +msgid "info topic - source|sources|variables|functions|break|frame|args|locals|display|watch." +msgstr "info aihe - source|sources|variables|functions|break|frame|args|locals|display|watch." #: command.y:855 msgid "list [-|+|[filename:]lineno|function|range] - list specified line(s)." -msgstr "" +msgstr "list [-|+|[tiedostonimi:]rivinumero|funktio|lukualue] - luettele määritellyt rivit." #: command.y:857 msgid "next [COUNT] - step program, proceeding through subroutine calls." -msgstr "" +msgstr "next [COUNT] - askella ohjelmaa, etene alirutiinikutsujen kautta." #: command.y:859 -msgid "" -"nexti [COUNT] - step one instruction, but proceed through subroutine calls." -msgstr "" +msgid "nexti [COUNT] - step one instruction, but proceed through subroutine calls." +msgstr "nexti [COUNT] - askella yksi käsky, mutta etene alirutiinikutsujen kautta." #: command.y:861 msgid "option [name[=value]] - set or display debugger option(s)." -msgstr "" +msgstr "option [nimi[=arvo]] - aseta tai näytä vianjäljittäjävalitsimet." #: command.y:863 msgid "print var [var] - print value of a variable or array." -msgstr "" +msgstr "print var [muuttuja] - tulosta muutujan tai taulukon arvo." #: command.y:865 msgid "printf format, [arg], ... - formatted output." -msgstr "" +msgstr "printf muoto, [argumentti], ... - muotoiltu tuloste." #: command.y:867 msgid "quit - exit debugger." -msgstr "" +msgstr "quit - poistu vianjäljittäjästä." #: command.y:869 msgid "return [value] - make selected stack frame return to its caller." -msgstr "" +msgstr "return [arvo] - tekee valitun pinokehyksen paluun sen kutsujalle." #: command.y:871 msgid "run - start or restart executing program." -msgstr "" +msgstr "run - käynnistä tai uudelleenkäynnistä ohjelman suoritus." #: command.y:874 msgid "save filename - save commands from the session to file." -msgstr "" +msgstr "save tiedostonimi - tallenna komennot istunnosta tiedostoon." #: command.y:877 msgid "set var = value - assign value to a scalar variable." -msgstr "" +msgstr "set var = arvo - liitä arvo skalaarimuuttujaan." #: command.y:879 -msgid "" -"silent - suspends usual message when stopped at a breakpoint/watchpoint." -msgstr "" +msgid "silent - suspends usual message when stopped at a breakpoint/watchpoint." +msgstr "silent - pysäyttää tavallisen viestin kun pysähdytään katkaisukohdassa/vahtipisteessä." #: command.y:881 msgid "source file - execute commands from file." -msgstr "" +msgstr "source file - suorita komennot tiedostosta." #: command.y:883 msgid "step [COUNT] - step program until it reaches a different source line." -msgstr "" +msgstr "step [COUNT] - askella ohjelmaa, kunnes se saavuttaa eri lähdekoodirivin." #: command.y:885 msgid "stepi [COUNT] - step one instruction exactly." -msgstr "" +msgstr "stepi [COUNT] - askella tarkalleen yksi käsky." #: command.y:887 msgid "tbreak [[filename:]N|function] - set a temporary breakpoint." -msgstr "" +msgstr "tbreak [[tiedostonimi:]N|funktio] - aseta tilapäinen keskeytyskohta." #: command.y:889 msgid "trace on|off - print instruction before executing." -msgstr "" +msgstr "trace on|off - tulosta käsky ennen suoritusta." #: command.y:891 msgid "undisplay [N] - remove variable(s) from automatic display list." -msgstr "" +msgstr "undisplay [N] - poista muuttuja(t) automaattisesta näyttöluettelosta." #: command.y:893 -msgid "" -"until [[filename:]N|function] - execute until program reaches a different " -"line or line N within current frame." -msgstr "" +msgid "until [[filename:]N|function] - execute until program reaches a different line or line N within current frame." +msgstr "until [[tiedostonimi:]N|funktio] - suorita kunnes ohjelma tavoittaa eri rivin tai rivin N nykyisen kehyksen sisällä." #: command.y:895 msgid "unwatch [N] - remove variable(s) from watch list." -msgstr "" +msgstr "unwatch [N] - poista muuttuja(t) vahtiluettelosta." #: command.y:897 msgid "up [N] - move N frames up the stack." -msgstr "" +msgstr "up [N] - siirrä N kehystä ylöspäin pinossa." #: command.y:899 msgid "watch var - set a watchpoint for a variable." -msgstr "" +msgstr "watch muuttuja - aseta vahtikohta muuttujalle." #: command.y:1011 debug.c:395 msg.c:128 #, c-format msgid "error: " -msgstr "virhe:" +msgstr "virhe: " #: command.y:1051 -#, fuzzy, c-format +#, c-format msgid "can't read command (%s)\n" -msgstr "ei voi uudelleenohjata putkesta â€%s†(%s)" +msgstr "komennon (%s) lukeminen epäonnistui\n" #: command.y:1065 -#, fuzzy, c-format +#, c-format msgid "can't read command (%s)" -msgstr "ei voi uudelleenohjata putkesta â€%s†(%s)" +msgstr "komennon (%s) lukeminen epäonnistui" #: command.y:1116 -#, fuzzy msgid "invalid character in command" -msgstr "Virheellinen merkkiluokkanimi" +msgstr "virheellinen merkki komennossa" #: command.y:1152 #, c-format msgid "unknown command - \"%.*s\", try help" -msgstr "" +msgstr "tuntematon komento - \"%.*s\", kokeile käskyä help" #: command.y:1222 #, c-format msgid "%s" -msgstr "" +msgstr "%s" #: command.y:1284 -#, fuzzy msgid "invalid character" -msgstr "Virheellinen vertailumerkki" +msgstr "virheellinen merkki" #: command.y:1455 #, c-format msgid "undefined command: %s\n" -msgstr "" +msgstr "määrittelemätön komento: %s\n" #: debug.c:246 msgid "set or show the number of lines to keep in history file." -msgstr "" +msgstr "aseta tai näytä historiatiedostossa säilytettävien rivien lukumäärä." #: debug.c:248 msgid "set or show the list command window size." -msgstr "" +msgstr "aseta tai näytä luettelokomentoikkunan koko." #: debug.c:250 msgid "set or show gawk output file." -msgstr "" +msgstr "aseta tai näytä gawk-tulostetiedosto." #: debug.c:252 msgid "set or show debugger prompt." -msgstr "" +msgstr "aseta tai näytä vianjäljittäjäkehote." #: debug.c:254 msgid "(un)set or show saving of command history (value=on|off)." -msgstr "" +msgstr "aseta, poista asetus tai näytä komentohistoriatallennus (value=on|off)." #: debug.c:256 msgid "(un)set or show saving of options (value=on|off)." -msgstr "" +msgstr "aseta, poista asetus tai näytä valitsintallennus (value=on|off)." #: debug.c:258 msgid "(un)set or show instruction tracing (value=on|off)." -msgstr "" +msgstr "aseta, poista asetus tai näytä käskyjäljitys (value=on|off)." #: debug.c:339 msgid "program not running." -msgstr "" +msgstr "ohjelma ei ole käynnissä." #: debug.c:442 debug.c:597 -#, fuzzy, c-format +#, c-format msgid "can't read source file `%s' (%s)" -msgstr "ei voi lukea lähdetiedostoa â€%s†(%s)" +msgstr "lähdetiedoston â€%s†(%s) lukeminen epäonnistui" #: debug.c:447 -#, fuzzy, c-format +#, c-format msgid "source file `%s' is empty.\n" -msgstr "lähdetiedosto â€%s†on tyhjä" +msgstr "lähdetiedosto â€%s†on tyhjä.\n" #: debug.c:474 msgid "no current source file." -msgstr "" +msgstr "ei nykyistä lähdekooditiedostoa." #: debug.c:499 -#, fuzzy, c-format +#, c-format msgid "cannot find source file named `%s' (%s)" -msgstr "ei voi lukea lähdetiedostoa â€%s†(%s)" +msgstr "lähdetiedostoa nimeltä â€%s†(%s) ei kyetä lukemaan" #: debug.c:523 #, c-format msgid "WARNING: source file `%s' modified since program compilation.\n" -msgstr "" +msgstr "VAROITUS: lähdekooditiedostoa â€%s†on muokattu ohjelman kääntämisen jälkeen.\n" #: debug.c:542 #, c-format msgid "line number %d out of range; `%s' has %d lines" -msgstr "" +msgstr "rivinumero %d lukualueen ulkopuolella; kohteessa â€%s†on %d riviä" #: debug.c:602 -#, fuzzy, c-format +#, c-format msgid "unexpected eof while reading file `%s', line %d" -msgstr "odottamaton rivinvaihto tai merkkijonon loppu" +msgstr "odottamaton eof-tiedostonloppumerkki luettaessa tiedostoa â€%sâ€, rivi %d" #: debug.c:611 #, c-format msgid "source file `%s' modified since start of program execution" -msgstr "" +msgstr "lähdekooditiedostoa â€%s†on muokattu ohjelman suorituksen aloituksen jälkeen" #: debug.c:723 -#, fuzzy, c-format +#, c-format msgid "Current source file: %s\n" -msgstr "on jo sisällytetty lähdetiedostoon â€%sâ€" +msgstr "Nykyinen lähdetiedosto: %s\n" #: debug.c:724 #, c-format msgid "Number of lines: %d\n" -msgstr "" +msgstr "Rivien lukumäärä: %d\n" #: debug.c:731 #, c-format msgid "Source file (lines): %s (%d)\n" -msgstr "" +msgstr "Lähdetiedosto (riviä): %s (%d)\n" #: debug.c:745 msgid "" "Number Disp Enabled Location\n" "\n" msgstr "" +"Numero Disp Käytössä Sijainti\n" +"\n" #: debug.c:756 #, c-format msgid "\tno of hits = %ld\n" -msgstr "" +msgstr "\tosumien lukumäärä = %ld\n" #: debug.c:758 #, c-format msgid "\tignore next %ld hit(s)\n" -msgstr "" +msgstr "\tohita seuraavat %ld osumaa\n" #: debug.c:760 debug.c:900 #, c-format msgid "\tstop condition: %s\n" -msgstr "" +msgstr "\tpysähtymisehto: %s\n" #: debug.c:762 debug.c:902 msgid "\tcommands:\n" -msgstr "" +msgstr "\tkomennot:\n" #: debug.c:784 #, c-format msgid "Current frame: " -msgstr "" +msgstr "Nykyinen kehys: " #: debug.c:787 #, c-format msgid "Called by frame: " -msgstr "" +msgstr "Kehyksen kutsuma: " #: debug.c:791 #, c-format msgid "Caller of frame: " -msgstr "" +msgstr "Kehyksen kutsuja: " #: debug.c:809 #, c-format msgid "None in main().\n" -msgstr "" +msgstr "Funktiossa main() ei ole mitään.\n" #: debug.c:839 -#, fuzzy msgid "No arguments.\n" -msgstr "printf: ei argumentteja" +msgstr "Ei argumentteja.\n" #: debug.c:840 msgid "No locals.\n" -msgstr "" +msgstr "Ei paikallisia muuttujia.\n" #: debug.c:848 msgid "" "All defined variables:\n" "\n" msgstr "" +"Kaikki määritellyt muuttujat:\n" +"\n" #: debug.c:858 msgid "" "All defined functions:\n" "\n" msgstr "" +"Kaikki määritellyt funktiot.\n" +"\n" #: debug.c:877 msgid "" "Auto-display variables:\n" "\n" msgstr "" +"Automaattisesti näytettävät muuttujat:\n" +"\n" #: debug.c:880 msgid "" "Watch variables:\n" "\n" msgstr "" +"Vahtimuuttujia:\n" +"\n" #: debug.c:1020 -#, fuzzy, c-format +#, c-format msgid "no symbol `%s' in current context\n" -msgstr "â€exit†ei voida kutsua nykyisessä asiayhteydessä" +msgstr "symbolia â€%s†ei löydy nykyisestä asiayhteydestä\n" #: debug.c:1032 debug.c:1418 -#, fuzzy, c-format +#, c-format msgid "`%s' is not an array\n" -msgstr "â€%s†ei ole laillinen muuttujanimi" +msgstr "â€%s†ei ole taulukko\n" #: debug.c:1046 -#, fuzzy, c-format +#, c-format msgid "$%ld = uninitialized field\n" -msgstr "viite alustamattomaan kenttään â€$%dâ€" +msgstr "$%ld = alustamaton kenttä\n" #: debug.c:1067 -#, fuzzy, c-format +#, c-format msgid "array `%s' is empty\n" -msgstr "data-tiedosto â€%s†on tyhjä" +msgstr "taulukko â€%s†on tyhjä\n" #: debug.c:1110 debug.c:1162 -#, fuzzy, c-format +#, c-format msgid "[\"%s\"] not in array `%s'\n" -msgstr "delete: indeksi â€%s†ei ole taulukossa â€%sâ€" +msgstr "[â€%sâ€] ei ole taulukossa â€%sâ€\n" #: debug.c:1166 #, c-format msgid "`%s[\"%s\"]' is not an array\n" -msgstr "" +msgstr "â€%s[\"%s\"]†ei ole taulukko\n" #: debug.c:1227 debug.c:4949 -#, fuzzy, c-format +#, c-format msgid "`%s' is not a scalar variable" -msgstr "â€%s†ei ole laillinen muuttujanimi" +msgstr "â€%s†ei ole skalaarimuuttuja" #: debug.c:1249 debug.c:4979 -#, fuzzy, c-format +#, c-format msgid "attempt to use array `%s[\"%s\"]' in a scalar context" -msgstr "yritettiin käyttää taulukkoa â€%s[\"%.*s\"]†skalaarikontekstissa" +msgstr "yritettiin käyttää taulukkoa â€%s[\"%s\"]†skalaarikontekstissa" #: debug.c:1271 debug.c:4990 -#, fuzzy, c-format +#, c-format msgid "attempt to use scalar `%s[\"%s\"]' as array" -msgstr "yritettiin käyttää skalaaria â€%s[\"%.*s\"]†taulukkona" +msgstr "yritettiin käyttää skalaaria â€%s[\"%s\"]†taulukkona" #: debug.c:1414 -#, fuzzy, c-format +#, c-format msgid "`%s' is a function" -msgstr "â€%s†on virheellinen funktionimenä" +msgstr "â€%s†on funktio" #: debug.c:1456 #, c-format msgid "watchpoint %d is unconditional\n" -msgstr "" +msgstr "watchpoint %d ei ole ehdollinen\n" #: debug.c:1490 #, c-format msgid "No display item numbered %ld" -msgstr "" +msgstr "Yksikään näyttörivi ei ole numeroitu %ld" #: debug.c:1493 #, c-format msgid "No watch item numbered %ld" -msgstr "" +msgstr "Yksikään vahtirivi ei ole numeroitu %ld" #: debug.c:1519 -#, fuzzy, c-format +#, c-format msgid "%d: [\"%s\"] not in array `%s'\n" -msgstr "delete: indeksi â€%s†ei ole taulukossa â€%sâ€" +msgstr "%d: [â€%sâ€] ei ole taulukossa â€%sâ€\n" #: debug.c:1758 -#, fuzzy msgid "attempt to use scalar value as array" msgstr "yritettiin käyttää skalaariarvoa taulukkona" #: debug.c:1847 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" -msgstr "" +msgstr "Watchpoint %d poistettiin, koska parametri on lukualueen ulkopuolella.\n" #: debug.c:1858 #, c-format msgid "Display %d deleted because parameter is out of scope.\n" -msgstr "" +msgstr "Display %d poistettiin, koska parametri on lukualueen ulkopuolella.\n" #: debug.c:1891 #, c-format msgid " in file `%s', line %d\n" -msgstr "" +msgstr " tiedostossa â€%sâ€, rivi %d\n" #: debug.c:1912 #, c-format msgid " at `%s':%d" -msgstr "" +msgstr " osoitteessa â€%sâ€:%d" #: debug.c:1928 debug.c:1991 #, c-format msgid "#%ld\tin " -msgstr "" +msgstr "#%ld\tkohteessa " #: debug.c:1965 #, c-format msgid "More stack frames follow ...\n" -msgstr "" +msgstr "Lisää pinokehyksiä seuraa ...\n" #: debug.c:2008 -#, fuzzy msgid "invalid frame number" -msgstr "Virheellinen lukualueen loppu" +msgstr "virheellinen kehysnumero" #: debug.c:2180 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" -msgstr "" +msgstr "Huomaa: keskeytyskohta %d (otettu käyttöön, ohita seuraavat %ld osumaa), asetettu myös osoitteessa %s:%d" #: debug.c:2187 #, c-format msgid "Note: breakpoint %d (enabled), also set at %s:%d" -msgstr "" +msgstr "Huomaa: keskeytyskohta %d (otettu käyttöön), asetettu myös kohdassa %s:%d" #: debug.c:2194 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" -msgstr "" +msgstr "Huomaa: keskeytyskohta %d (otettu pois käytöstä, ohita seuraavat %ld osumaa), asetettu myös kohdassa %s:%d" #: debug.c:2201 #, c-format msgid "Note: breakpoint %d (disabled), also set at %s:%d" -msgstr "" +msgstr "Huomaa: keskeytyskohta %d (otettu pois käytöstä), asetettu myös kohdassa %s:%d" #: debug.c:2218 #, c-format msgid "Breakpoint %d set at file `%s', line %d\n" -msgstr "" +msgstr "Keskeytyskohta %d asetettu tiedostossa â€%sâ€, rivi %d\n" #: debug.c:2320 #, c-format msgid "Can't set breakpoint in file `%s'\n" -msgstr "" +msgstr "Keskeytyskohdan asetaminen tiedostossa â€%s†epäonnistui\n" #: debug.c:2349 debug.c:2472 debug.c:3330 -#, fuzzy, c-format +#, c-format msgid "line number %d in file `%s' out of range" -msgstr "exp: argumentti %g on lukualueen ulkopuolella" +msgstr "rivinumero %d tiedostossa â€%s†on lukualueen ulkopuolella" #: debug.c:2353 #, c-format msgid "Can't find rule!!!\n" -msgstr "" +msgstr "Säännön löytäminen epäonnistui!!!\n" #: debug.c:2355 #, c-format msgid "Can't set breakpoint at `%s':%d\n" -msgstr "" +msgstr "Keskeytykohdan asettaminen kohdassa â€%sâ€:%d epäonnistui\n" #: debug.c:2367 #, c-format msgid "Can't set breakpoint in function `%s'\n" -msgstr "" +msgstr "Keskeytyskohdan asettaminen funktiossa â€%s†epäonnistui\n" #: debug.c:2383 #, c-format msgid "breakpoint %d set at file `%s', line %d is unconditional\n" -msgstr "" +msgstr "keskeytyskohta %d asetettu tiedostossa â€%sâ€, rivi %d on ehdoton\n" #: debug.c:2488 debug.c:2510 #, c-format msgid "Deleted breakpoint %d" -msgstr "" +msgstr "Poistettu keskeytyskohta %d" #: debug.c:2494 #, c-format msgid "No breakpoint(s) at entry to function `%s'\n" -msgstr "" +msgstr "Ei keskeytyskohtaa funktion â€%s†sisääntulossa\n" #: debug.c:2521 -#, fuzzy, c-format +#, c-format msgid "No breakpoint at file `%s', line #%d\n" -msgstr "virhe luettaessa syötetiedostoa â€%sâ€: %s" +msgstr "Tiedostossa â€%s†ei ole keskeytyskohtaa, rivi #%d\n" #: debug.c:2576 debug.c:2617 debug.c:2637 debug.c:2680 msgid "invalid breakpoint number" -msgstr "" +msgstr "virheellinen keskeytyskohtanumero" #: debug.c:2592 msgid "Delete all breakpoints? (y or n) " -msgstr "" +msgstr "Poistetaanko kaikki keskeytyskohdata? (y tai n) " #: debug.c:2593 debug.c:2903 debug.c:2956 msgid "y" -msgstr "" +msgstr "k" #: debug.c:2642 #, c-format msgid "Will ignore next %ld crossing(s) of breakpoint %d.\n" -msgstr "" +msgstr "Keskeytyskohta %2$d:n seuraavat %1$ld risteystä ohitetaan.\n" #: debug.c:2646 #, c-format msgid "Will stop next time breakpoint %d is reached.\n" -msgstr "" +msgstr "Pysähtyy seuraavalla kerralla kun keskeytyskohta %d saavutetaan.\n" #: debug.c:2763 #, c-format msgid "Can only debug programs provided with the `-f' option.\n" -msgstr "" +msgstr "Vain ohjelmia, jotka tarjoavat valitsimen â€-fâ€, voidaan vikajäljittää.\n" #: debug.c:2888 #, c-format msgid "Failed to restart debugger" -msgstr "" +msgstr "Vianjäljittäjän uudelleenkäynnistys epäonnistui" #: debug.c:2902 msgid "Program already running. Restart from beginning (y/n)? " -msgstr "" +msgstr "Ohjelma on jo käynnissä. Käynnistetäänkö uudelleen alusta (y/n)? " #: debug.c:2906 #, c-format msgid "Program not restarted\n" -msgstr "" +msgstr "Ohjelma ei käynnistynyt uudelleen\n" #: debug.c:2916 #, c-format msgid "error: cannot restart, operation not allowed\n" -msgstr "" +msgstr "virhe: uudelleenkäynnistys epäonnistui, toiminto ei ole sallittu\n" #: debug.c:2922 #, c-format msgid "error (%s): cannot restart, ignoring rest of the commands\n" -msgstr "" +msgstr "virhe (%s): uudelleenkäynnistys epäonnistui, loput komennot ohitetaan\n" #: debug.c:2930 #, c-format msgid "Starting program: \n" -msgstr "" +msgstr "Käynnistetään ohjelma: \n" #: debug.c:2939 #, c-format msgid "Program exited %s with exit value: %d\n" -msgstr "" +msgstr "Ohjelma päättyi %s päättymisarvolla: %d\n" #: debug.c:2955 msgid "The program is running. Exit anyway (y/n)? " -msgstr "" +msgstr "Ohjelma on käynnissä. Poistutaanko silti (y/n)? " #: debug.c:2990 #, c-format msgid "Not stopped at any breakpoint; argument ignored.\n" -msgstr "" +msgstr "Ei pysäytetty yhdessäkään keskeytyskohdassa; argumentti ohitetaan.\n" #: debug.c:2995 #, c-format msgid "invalid breakpoint number %d." -msgstr "" +msgstr "virheellinen keskeytyskohtanumero %d." #: debug.c:3000 #, c-format msgid "Will ignore next %ld crossings of breakpoint %d.\n" -msgstr "" +msgstr "Ohittaa seuraavat %ld keskeytyskohdan %d ylitystä.\n" #: debug.c:3187 #, c-format msgid "'finish' not meaningful in the outermost frame main()\n" -msgstr "" +msgstr "’finish’ ei ole merkityksellinen ulommaisen kehyksen main()-funktiossa\n" #: debug.c:3192 #, c-format msgid "Run till return from " -msgstr "" +msgstr "Suorita kunnes paluu kohteesta " #: debug.c:3235 #, c-format msgid "'return' not meaningful in the outermost frame main()\n" -msgstr "" +msgstr "’return’ ei ole merkityksellinen ulommaisen kehyksen main()-funktiossa\n" #: debug.c:3349 #, c-format msgid "Can't find specified location in function `%s'\n" -msgstr "" +msgstr "Määritellyn sijainnin löytyminen funktiossa â€%s†epäonnistui\n" #: debug.c:3357 -#, fuzzy, c-format +#, c-format msgid "invalid source line %d in file `%s'" -msgstr "on jo sisällytetty lähdetiedostoon â€%sâ€" +msgstr "virheellinen lähdekoodirivi %d tiedostossa â€%sâ€" #: debug.c:3372 #, c-format msgid "Can't find specified location %d in file `%s'\n" -msgstr "" +msgstr "Määritellyn sijainnin %d löytyminen tiedostossa â€%s†epäonnistui\n" #: debug.c:3404 -#, fuzzy, c-format +#, c-format msgid "element not in array\n" -msgstr "delete: indeksi â€%s†ei ole taulukossa â€%sâ€" +msgstr "elementti ei ole taulukossa\n" #: debug.c:3404 #, c-format msgid "untyped variable\n" -msgstr "" +msgstr "tyypitön muuttuja\n" #: debug.c:3446 #, c-format msgid "Stopping in %s ...\n" -msgstr "" +msgstr "Pysäytetään kohdassa %s ...\n" #: debug.c:3523 #, c-format msgid "'finish' not meaningful with non-local jump '%s'\n" -msgstr "" +msgstr "’finish’ ei ole merkityksellinen ei-paikallisessa hypyssä ’%s’\n" #: debug.c:3530 #, c-format msgid "'until' not meaningful with non-local jump '%s'\n" -msgstr "" +msgstr "’until’ ei ole merkityksellinen ei-paikallisessa hypyssä ’%s’\n" #: debug.c:4165 msgid "\t------[Enter] to continue or q [Enter] to quit------" -msgstr "" +msgstr "\t------Jatka painamalla [Enter] tai poistu painamalla q [Enter]------" #: debug.c:4166 msgid "q" -msgstr "" +msgstr "q" #: debug.c:4986 -#, fuzzy, c-format +#, c-format msgid "[\"%s\"] not in array `%s'" -msgstr "delete: indeksi â€%s†ei ole taulukossa â€%sâ€" +msgstr "[â€%sâ€] ei ole taulukossa â€%sâ€" #: debug.c:5192 #, c-format msgid "sending output to stdout\n" -msgstr "" +msgstr "lähetetään tuloste vakiotulosteeseen\n" #: debug.c:5232 msgid "invalid number" -msgstr "" +msgstr "virheellinen numero" #: debug.c:5366 -#, fuzzy, c-format +#, c-format msgid "`%s' not allowed in current context; statement ignored" -msgstr "â€exit†ei voida kutsua nykyisessä asiayhteydessä" +msgstr "â€%s†ei ole sallittu nykyisessä asiayhteydessä; lause ohitetaan" #: debug.c:5374 -#, fuzzy msgid "`return' not allowed in current context; statement ignored" -msgstr "â€exit†ei voida kutsua nykyisessä asiayhteydessä" +msgstr "â€return†ei ole sallittu nykyisessä asiayhteydessä; lause ohitetaan" #: debug.c:5575 -#, fuzzy, c-format +#, c-format msgid "No symbol `%s' in current context" -msgstr "yritettiin käyttää taulukkoa â€%s†skalaarikontekstissa" +msgstr "Symbolia â€%s†ei ole nykyisesssä asiayhteydessä" #: 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:1192 msgid "unbalanced [" -msgstr "" +msgstr "pariton [" #: dfa.c:1052 -#, fuzzy msgid "invalid character class" -msgstr "Virheellinen merkkiluokkanimi" +msgstr "virheellinen merkkiluokka" #: dfa.c:1229 msgid "character class syntax is [[:space:]], not [:space:]" -msgstr "" +msgstr "merkkiluokkasyntaksi on [[:space:]], ei [:space:]" #: dfa.c:1281 msgid "unfinished \\ escape" -msgstr "" +msgstr "päättymätön \\-koodinvaihtomerkki" #: dfa.c:1428 regcomp.c:161 msgid "Invalid content of \\{\\}" @@ -1802,15 +1751,15 @@ msgstr "Säännöllinen lauseke on liian iso" #: dfa.c:1816 msgid "unbalanced (" -msgstr "" +msgstr "pariton (" #: dfa.c:1943 msgid "no syntax specified" -msgstr "" +msgstr "syntaksi ei ole määritelty" #: dfa.c:1951 msgid "unbalanced )" -msgstr "" +msgstr "pariton )" #: eval.c:394 #, c-format @@ -1916,85 +1865,75 @@ msgid "extensions are not allowed in sandbox mode" msgstr "laajennuksia ei sallita hiekkalaatikkotilassa" #: ext.c:92 -#, fuzzy msgid "-l / @load are gawk extensions" -msgstr "@include on gawk-laajennus" +msgstr "-l / @load ovat gawk-laajennuksia" #: ext.c:95 ext.c:177 msgid "load_ext: received NULL lib_name" -msgstr "" +msgstr "load_ext: vastaanotettiin NULL lib_name" #: ext.c:98 -#, fuzzy, c-format +#, c-format msgid "load_ext: cannot open library `%s' (%s)\n" -msgstr "tuhoisa: extension: ei voi avata solmua â€%s†(%s)\n" +msgstr "load_ext: kirjaston â€%s†(%s) avaus epäonnistui\n" #: ext.c:104 -#, fuzzy, c-format -msgid "" -"load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n" -msgstr "" -"tuhoisa: extension: kirjasto â€%sâ€: ei määrittele " -"â€plugin_is_GPL_compatible†(%s)\n" +#, 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 -#, fuzzy, c-format +#, c-format msgid "load_ext: library `%s': cannot call function `%s' (%s)\n" -msgstr "tuhoisa: extension: kirjasto â€%sâ€: ei voi kutsua funktiota â€%s†(%s)\n" +msgstr "load_ext: kirjasto â€%sâ€: funktion â€%s†(%s) kutsu epäonnistui\n" #: ext.c:114 #, c-format msgid "load_ext: library `%s' initialization routine `%s' failed\n" -msgstr "" +msgstr "load_ext: kirjaston â€%s†alustusrutiini â€%s†epäonnistui\n" #: ext.c:174 msgid "`extension' is a gawk extension" msgstr "â€extension†on gawk-laajennus" #: ext.c:180 -#, fuzzy, c-format +#, c-format msgid "extension: cannot open library `%s' (%s)" -msgstr "tuhoisa: extension: ei voi avata solmua â€%s†(%s)\n" +msgstr "extension: kirjaston â€%s†(%s) avaus epäonnistui" #: ext.c:186 -#, fuzzy, c-format -msgid "" -"extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)" -msgstr "" -"tuhoisa: extension: kirjasto â€%sâ€: ei määrittele " -"â€plugin_is_GPL_compatible†(%s)\n" +#, 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 -#, fuzzy, c-format +#, c-format msgid "extension: library `%s': cannot call function `%s' (%s)" -msgstr "tuhoisa: extension: kirjasto â€%sâ€: ei voi kutsua funktiota â€%s†(%s)\n" +msgstr "extension: kirjasto â€%sâ€: funktion â€%s†(%s) kutsu epäonnistui" #: ext.c:221 -#, fuzzy msgid "make_builtin: missing function name" -msgstr "extension: puuttuva funktionimi" +msgstr "make_builtin: puuttuva funktionimi" #: ext.c:238 -#, fuzzy, c-format +#, c-format msgid "make_builtin: can't redefine function `%s'" -msgstr "extension: ei voi määritellä uudelleen funktiota â€%sâ€" +msgstr "make_builtin: funktion â€%s†uudelleenmäärittely epäonnistui" #: ext.c:242 -#, fuzzy, c-format +#, c-format msgid "make_builtin: function `%s' already defined" -msgstr "extension: funktio â€%s†on jo määritelty" +msgstr "make_builtin: funktio â€%s†on jo määritelty" #: ext.c:246 -#, fuzzy, c-format +#, c-format msgid "make_builtin: function name `%s' previously defined" -msgstr "extension: funktionimi â€%s†on määritelty jo aiemmin" +msgstr "make_builtin: funktionimi â€%s†on määritelty jo aiemmin" #: ext.c:248 -#, fuzzy, c-format +#, c-format msgid "make_builtin: can't use gawk built-in `%s' as function name" -msgstr "" -"extension: ei voi käyttää gawk-ohjelman sisäistä muuttujanimeä â€%s†" -"funktionimenä" +msgstr "make_builtin: gawk-ohjelman sisäisen muuttujanimen â€%s†käyttö funktionimenä epäonnistui" #: ext.c:251 ext.c:304 #, c-format @@ -2002,36 +1941,33 @@ msgid "make_builtin: negative argument count for function `%s'" msgstr "make_builtin: negatiivinen argumenttilukumäärä funktiolle â€%sâ€" #: ext.c:278 -#, fuzzy msgid "extension: missing function name" msgstr "extension: puuttuva funktionimi" #: ext.c:283 -#, fuzzy, c-format +#, c-format msgid "extension: illegal character `%c' in function name `%s'" msgstr "extension: virheellinen merkki â€%c†funktionimessä â€%sâ€" #: ext.c:291 -#, fuzzy, c-format +#, c-format msgid "extension: can't redefine function `%s'" -msgstr "extension: ei voi määritellä uudelleen funktiota â€%sâ€" +msgstr "extension: funktion â€%s†uudelleenmäärittely epäonnistui" #: ext.c:295 -#, fuzzy, c-format +#, c-format msgid "extension: function `%s' already defined" msgstr "extension: funktio â€%s†on jo määritelty" #: ext.c:299 -#, fuzzy, c-format +#, c-format msgid "extension: function name `%s' previously defined" -msgstr "funktionimi â€%s†on jo aikaisemmin määritelty" +msgstr "extension: funktionimi â€%s†on määritelty jo aiemmin" #: ext.c:301 -#, fuzzy, c-format +#, c-format msgid "extension: can't use gawk built-in `%s' as function name" -msgstr "" -"extension: ei voi käyttää gawk-ohjelman sisäistä muuttujanimeä â€%s†" -"funktionimenä" +msgstr "extension: gawk-ohjelman sisäisen muuttujanimen käyttö â€%s†funktionimenä epäonnistui" #: ext.c:374 #, c-format @@ -2055,366 +1991,334 @@ msgstr "funktio â€%sâ€: argumentti #%d: yritettiin käyttää taulukkoa skalaa #: ext.c:412 msgid "dynamic loading of library not supported" -msgstr "" +msgstr "kirjaston dynaamista latausta ei tueta" #: extension/filefuncs.c:97 -#, fuzzy msgid "chdir: called with incorrect number of arguments, expecting 1" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "chdir: kutsuttu argumenttien väärällä lukumäärällä, odotettiin 1" #: extension/filefuncs.c:343 #, c-format msgid "stat: unable to read symbolic link `%s'" -msgstr "" +msgstr "stat: symbolisen linkin â€%s†lukeminen epäonnistui" #: extension/filefuncs.c:376 -#, fuzzy msgid "stat: called with wrong number of arguments" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "stat: kutsuttu argumenttien väärällä lukumäärällä" #: extension/filefuncs.c:383 -#, fuzzy msgid "stat: bad parameters" -msgstr "%s: on parametri\n" +msgstr "stat: väärät parametrit" #: extension/filefuncs.c:437 -#, fuzzy, c-format +#, c-format msgid "fts init: could not create variable %s" -msgstr "index: toinen vastaanotettu argumentti ei ole merkkijono" +msgstr "fts init: muuttujan %s luominen epäonnistui" #: extension/filefuncs.c:460 msgid "fill_stat_element: could not create array" -msgstr "" +msgstr "fill_stat_element: taulukon luominen epäonnistui" #: extension/filefuncs.c:469 msgid "fill_stat_element: could not set element" -msgstr "" +msgstr "fill_stat_element: elementin asettaminen epäonnistui" #: extension/filefuncs.c:484 -#, fuzzy msgid "fill_path_element: could not set element" -msgstr "index: toinen vastaanotettu argumentti ei ole merkkijono" +msgstr "fill_path_element: elementin asettaminen epäonnistui" #: extension/filefuncs.c:500 msgid "fill_error_element: could not set element" -msgstr "" +msgstr "fill_error_element: elementin asettaminen epäonnistui" #: extension/filefuncs.c:547 extension/filefuncs.c:594 msgid "fts-process: could not create array" -msgstr "" +msgstr "fts-process: taulukon luominen epäonnistui" #: extension/filefuncs.c:557 extension/filefuncs.c:604 #: extension/filefuncs.c:622 -#, fuzzy msgid "fts-process: could not set element" -msgstr "index: toinen vastaanotettu argumentti ei ole merkkijono" +msgstr "fts-process: elementin asettaminen epäonnistui" #: extension/filefuncs.c:671 -#, fuzzy msgid "fts: called with incorrect number of arguments, expecting 3" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "fts: kutsuttu argumenttien väärällä lukumäärällä, odotettiin 3" #: extension/filefuncs.c:674 -#, fuzzy msgid "fts: bad first parameter" -msgstr "%s: on parametri\n" +msgstr "fts: väärä ensimmäinen parametri" #: extension/filefuncs.c:680 -#, fuzzy msgid "fts: bad second parameter" -msgstr "%s: on parametri\n" +msgstr "fts: väärä toinen parametri" #: extension/filefuncs.c:686 -#, fuzzy msgid "fts: bad third parameter" -msgstr "%s: on parametri\n" +msgstr "fts: väärä kolmas parametri" #: extension/filefuncs.c:693 -#, fuzzy msgid "fts: could not flatten array\n" -msgstr "â€%s†ei ole laillinen muuttujanimi" +msgstr "fts: taulukon litistäminen epäonnistui\n" #: extension/filefuncs.c:711 msgid "fts: ignoring sneaky FTS_NOSTAT flag. nyah, nyah, nyah." -msgstr "" +msgstr "fts: ohitetaan petollinen FTS_NOSTAT-lippu. nyyh, nyyh, nyyh." #: extension/filefuncs.c:728 msgid "fts: clear_array() failed\n" -msgstr "" +msgstr "fts: clear_array() epäonnistui\n" #: extension/fnmatch.c:98 -#, fuzzy msgid "fnmatch: called with less than three arguments" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "fnmatch: kutsuttu vähemmällä kuin kolmella argumentilla" #: extension/fnmatch.c:101 -#, fuzzy msgid "fnmatch: called with more than three arguments" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "fnmatch: kutsuttu useammalla kuin kolmella argumentilla" #: extension/fnmatch.c:104 -#, fuzzy msgid "fnmatch: could not get first argument" -msgstr "strftime: ensimmäinen vastaanotettu argumentti ei ole merkkijono" +msgstr "fnmatch: ensimmäistä argumenttia ei saatu" #: extension/fnmatch.c:109 -#, fuzzy msgid "fnmatch: could not get second argument" -msgstr "index: toinen vastaanotettu argumentti ei ole merkkijono" +msgstr "fnmatch: toista argumenttia ei saatu" #: extension/fnmatch.c:114 msgid "fnmatch: could not get third argument" -msgstr "" +msgstr "fnmatch: kolmatta argumenttia ei saatu" #: extension/fnmatch.c:127 msgid "fnmatch is not implemented on this system\n" -msgstr "" +msgstr "fnmatch ei ole toteutettu tässä järjestelmässä\n" #: extension/fnmatch.c:159 msgid "fnmatch init: could not add FNM_NOMATCH variable" -msgstr "" +msgstr "fnmatch init: muuttujan FNM_NOMATCH lisääminen epäonnistui" #: extension/fnmatch.c:169 #, c-format msgid "fnmatch init: could not set array element %s" -msgstr "" +msgstr "fnmatch init: taulukkoelementin %s asettaminen epäonnistui" #: extension/fnmatch.c:179 msgid "fnmatch init: could not install FNM array" -msgstr "" +msgstr "fnmatch init: FNM-taulukon lisääminen epäonnistui" #: extension/fork.c:81 -#, fuzzy msgid "fork: called with too many arguments" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "fork: kutsuttu liian monella argumentilla" #: extension/fork.c:94 msgid "fork: PROCINFO is not an array!" -msgstr "" +msgstr "fork: PROCINFO ei ole taulukko!" #: extension/fork.c:118 -#, fuzzy msgid "waitpid: called with too many arguments" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "waitpid: kutsuttu liian monella argumentilla" #: extension/fork.c:126 -#, fuzzy msgid "wait: called with no arguments" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "wait: kutsuttu ilman argumentteja" #: extension/fork.c:143 -#, fuzzy msgid "wait: called with too many arguments" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "wait: kutsuttu liian monella argumentilla" #: extension/inplace.c:110 msgid "inplace_begin: in-place editing already active" -msgstr "" +msgstr "inplace_begin: kohdallaanmuokkaus on jo aktivoitu" #: extension/inplace.c:113 extension/inplace.c:187 #, c-format msgid "inplace_begin: expects 2 arguments but called with %d" -msgstr "" +msgstr "inplace_begin: odotetaan 2 argumenttia, mutta kutsussa oli %d argumenttia" #: extension/inplace.c:116 msgid "inplace_begin: cannot retrieve 1st argument as a string filename" -msgstr "" +msgstr "inplace_begin: ensimmäisen argumentin noutaminen merkkijonotiedostonimenä epäonnistui" #: extension/inplace.c:124 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" -msgstr "" +msgstr "inplace_begin: ottaen pois käytöstä virheellisen TIEDOSTONIMI â€%s†muokkauksen" #: extension/inplace.c:131 -#, fuzzy, c-format +#, c-format msgid "inplace_begin: Cannot stat `%s' (%s)" -msgstr "tuhoisa: extension: ei voi avata solmua â€%s†(%s)\n" +msgstr "inplace_begin: stat â€%s†(%s) epäonnistui" #: extension/inplace.c:138 -#, fuzzy, c-format +#, c-format msgid "inplace_begin: `%s' is not a regular file" -msgstr "â€%s†ei ole laillinen muuttujanimi" +msgstr "inplace_begin: â€%s†ei ole tavallinen tiedosto" #: extension/inplace.c:149 #, c-format msgid "inplace_begin: mkstemp(`%s') failed (%s)" -msgstr "" +msgstr "inplace_begin: mkstemp(â€%sâ€) epäonnistui (%s)" #: extension/inplace.c:158 -#, fuzzy, c-format +#, c-format msgid "inplace_begin: chmod failed (%s)" -msgstr "%s: sulkeminen epäonnistui (%s)" +msgstr "inplace_begin: chmod epäonnistui (%s)" #: extension/inplace.c:165 #, c-format msgid "inplace_begin: dup(stdout) failed (%s)" -msgstr "" +msgstr "inplace_begin: dup(stdout) epäonnistui (%s)" #: extension/inplace.c:168 #, c-format msgid "inplace_begin: dup2(%d, stdout) failed (%s)" -msgstr "" +msgstr "inplace_begin: dup2(%d, stdout) epäonnistui (%s)" #: extension/inplace.c:171 -#, fuzzy, c-format +#, c-format msgid "inplace_begin: close(%d) failed (%s)" -msgstr "%s: sulkeminen epäonnistui (%s)" +msgstr "inplace_begin: close(%d) epäonnistui (%s)" #: extension/inplace.c:190 msgid "inplace_end: cannot retrieve 1st argument as a string filename" -msgstr "" +msgstr "inplace_end: ensimmäisen argumentin noutaminen merkkijonotiedostonimenä epäonnistui" #: extension/inplace.c:197 msgid "inplace_end: in-place editing not active" -msgstr "" +msgstr "inplace_end: kohdallaanmuokkaus ei ole aktiivinen" #: extension/inplace.c:203 #, c-format msgid "inplace_end: dup2(%d, stdout) failed (%s)" -msgstr "" +msgstr "inplace_end: dup2(%d, stdout) epäonnistui (%s)" #: extension/inplace.c:206 -#, fuzzy, c-format +#, c-format msgid "inplace_end: close(%d) failed (%s)" -msgstr "%s: sulkeminen epäonnistui (%s)" +msgstr "inplace_end: close(%d) epäonnistui (%s)" #: extension/inplace.c:210 #, c-format msgid "inplace_end: fsetpos(stdout) failed (%s)" -msgstr "" +msgstr "inplace_end: fsetpos(stdout) epäonnistui (%s)" #: extension/inplace.c:223 -#, fuzzy, c-format +#, c-format msgid "inplace_end: link(`%s', `%s') failed (%s)" -msgstr "uudelleenohjauksen â€%s†putken tyhjennys epäonnistui (%s)." +msgstr "inplace_end: link(â€%sâ€, â€%sâ€) epäonnistui (%s)." #: extension/inplace.c:229 -#, fuzzy, c-format +#, c-format msgid "inplace_end: rename(`%s', `%s') failed (%s)" -msgstr "tiedostomäärittelijän %d (â€%sâ€) sulkeminen epäonnistui (%s)" +msgstr "inplace_end: rename(â€%sâ€, â€%sâ€) epäonnistui (%s)" #: extension/ordchr.c:69 -#, fuzzy msgid "ord: called with too many arguments" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "ord: kutsuttu liian monella argumentilla" #: extension/ordchr.c:75 -#, fuzzy msgid "ord: called with no arguments" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "ord: kutsuttu ilman argumentteja" #: extension/ordchr.c:77 -#, fuzzy msgid "ord: called with inappropriate argument(s)" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "ord: kutsuttu sopimattomalla argumentilla" #: extension/ordchr.c:99 -#, fuzzy msgid "chr: called with too many arguments" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "chr: kutsuttu liian monella argumentilla" #: extension/ordchr.c:109 -#, fuzzy msgid "chr: called with no arguments" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "chr: kutsuttu ilman argumentteja" #: extension/ordchr.c:111 -#, fuzzy msgid "chr: called with inappropriate argument(s)" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "chr: kutsuttu sopimattomalla argumentilla" #: extension/readdir.c:203 #, c-format msgid "dir_take_control_of: opendir/fdopendir failed: %s" -msgstr "" +msgstr "dir_take_control_of: opendir/fdopendir epäonnistui: %s" #: extension/readfile.c:84 -#, fuzzy msgid "readfile: called with too many arguments" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "readfile: kutsuttu liian monella argumentilla" #: extension/readfile.c:118 -#, fuzzy msgid "readfile: called with no arguments" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "readfile: kutsuttu ilman argumentteja" #: extension/rwarray.c:120 -#, fuzzy msgid "writea: called with too many arguments" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "writea: kutsuttu liian monella argumentilla" #: extension/rwarray.c:127 -#, fuzzy, c-format +#, c-format msgid "do_writea: argument 0 is not a string\n" -msgstr "exp: argumentti %g on lukualueen ulkopuolella" +msgstr "do_writea: argumentti 0 ei ole merkkijono\n" #: extension/rwarray.c:133 -#, fuzzy, c-format +#, c-format msgid "do_writea: argument 1 is not an array\n" -msgstr "split: neljäs argumentti ei ole taulukko" +msgstr "do_writea: argumentti 1 ei ole taulukko\n" #: extension/rwarray.c:180 #, c-format msgid "write_array: could not flatten array\n" -msgstr "" +msgstr "write_array: taulukon litistäminen epäonnistui\n" #: extension/rwarray.c:194 #, c-format msgid "write_array: could not release flattened array\n" -msgstr "" +msgstr "write_array: litistettyä taulukon vapauttaminen epäonnistui\n" #: extension/rwarray.c:276 -#, fuzzy msgid "reada: called with too many arguments" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "reada: kutsuttu liian monilla argumenteilla" #: extension/rwarray.c:283 -#, fuzzy, c-format +#, c-format msgid "do_reada: argument 0 is not a string\n" -msgstr "exp: argumentti %g on lukualueen ulkopuolella" +msgstr "do_reada: argumentti 0 ei ole merkkijono\n" #: extension/rwarray.c:289 -#, fuzzy, c-format +#, c-format msgid "do_reada: argument 1 is not an array\n" -msgstr "match: kolmas argumentti ei ole taulukko" +msgstr "do_reada: argumentti 1 ei ole taulukko\n" #: extension/rwarray.c:333 #, c-format msgid "do_reada: clear_array failed\n" -msgstr "" +msgstr "do_reada: clear_array epäonnistui\n" #: extension/rwarray.c:370 #, c-format msgid "read_array: set_array_element failed\n" -msgstr "" +msgstr "read_array: set_array_element epäonnistui\n" #: extension/time.c:81 -#, fuzzy msgid "gettimeofday: ignoring arguments" -msgstr "mktime: vastaanotettu argumentti ei ole merkkijono" +msgstr "gettimeofday: ohitetaan argumentit" #: extension/time.c:112 msgid "gettimeofday: not supported on this platform" -msgstr "" +msgstr "gettimeofday: ei ole tuettu tällä alustalla" #: extension/time.c:133 -#, fuzzy msgid "sleep: called with too many arguments" -msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "sleep: kutsuttu liian monella argumentilla" #: extension/time.c:136 -#, fuzzy msgid "sleep: missing required numeric argument" -msgstr "exp: vastaanotettu argumentti ei ole numeerinen" +msgstr "sleep: puuttuu vaadittu numeerinen argumentti" #: extension/time.c:142 -#, fuzzy msgid "sleep: argument is negative" -msgstr "exp: argumentti %g on lukualueen ulkopuolella" +msgstr "sleep: argumentti on negatiivinen" #: extension/time.c:176 msgid "sleep: not supported on this platform" -msgstr "" +msgstr "sleep: ei ole tuettu tällä alustalla" #: field.c:339 msgid "NF set to negative value" @@ -2434,20 +2338,15 @@ msgstr "split: toinen argumentti ei ole taulukko" #: field.c:986 msgid "split: cannot use the same array for second and fourth args" -msgstr "" -"split: ei voida käyttää samaa taulukkoa toiselle ja neljännelle argumentille" +msgstr "split: saman taulukon käyttö toiselle ja neljännelle argumentille epäonnistui" #: field.c:991 msgid "split: cannot use a subarray of second arg for fourth arg" -msgstr "" -"split: ei voida käyttää toisen argumentin alitaulukkoa neljännelle " -"argumentille" +msgstr "split: toisen argumentin käyttö alitaulukkoa neljännelle argumentille epäonnistui" #: field.c:994 msgid "split: cannot use a subarray of fourth arg for second arg" -msgstr "" -"split: ei voida käyttää neljännen argumentin alitaulukkoa toiselle " -"argumentille" +msgstr "split: neljännen argumentin käyttö alitaulukkoa toiselle argumentille epäonnistui" #: field.c:1023 msgid "split: null string for third arg is a gawk extension" @@ -2467,21 +2366,15 @@ msgstr "patsplit: kolmas argumentti ei ole taulukko" #: field.c:1078 msgid "patsplit: cannot use the same array for second and fourth args" -msgstr "" -"patsplit: ei voida käyttää samaa taulukkoa toiselle ja neljännelle " -"argumentille" +msgstr "patsplit: saman taulukon käyttö toiselle ja neljännelle argumentille epäonnistui" #: field.c:1083 msgid "patsplit: cannot use a subarray of second arg for fourth arg" -msgstr "" -"patsplit: ei voida käyttää toisen argumentin alitaulukkkoa neljännelle " -"argumentille" +msgstr "patsplit: toisen argumentin käyttö alitaulukkkoa neljännelle argumentille epäonnistui" #: field.c:1086 msgid "patsplit: cannot use a subarray of fourth arg for second arg" -msgstr "" -"patsplit: ei voida käyttää neljännen argumentin alitaulukkoa toiselle " -"argumentille" +msgstr "patsplit: neljännen argumentin käyttö alitaulukkoa toiselle argumentille epäonnistui" #: field.c:1124 msgid "`FIELDWIDTHS' is a gawk extension" @@ -2506,39 +2399,38 @@ msgstr "â€FPAT†on gawk-laajennus" #: gawkapi.c:146 msgid "awk_value_to_node: received null retval" -msgstr "" +msgstr "awk_value_to_node: vastaanotti null retval-paluuarvon" #: gawkapi.c:384 msgid "node_to_awk_value: received null node" -msgstr "" +msgstr "node_to_awk_value: vastaaotti null-solmun" #: gawkapi.c:387 msgid "node_to_awk_value: received null val" -msgstr "" +msgstr "node_to_awk_value: vastaanotti null-arvon" #: gawkapi.c:808 -#, fuzzy msgid "remove_element: received null array" -msgstr "length: vastaanotettu taulukkoargumentti" +msgstr "remove_element: vastaanotettu null-taulukko" #: gawkapi.c:811 msgid "remove_element: received null subscript" -msgstr "" +msgstr "remove_element: vastaanotti null-alaindeksin" #: gawkapi.c:943 #, c-format msgid "api_flatten_array: could not convert index %d\n" -msgstr "" +msgstr "api_flatten_array: indeksin %d muuntaminen epäonnistui\n" #: gawkapi.c:948 #, c-format msgid "api_flatten_array: could not convert value %d\n" -msgstr "" +msgstr "api_flatten_array: arvon %d muuntaminen epäonnistui\n" #: getopt.c:603 getopt.c:632 -#, fuzzy, c-format +#, c-format msgid "%s: option '%s' is ambiguous; possibilities:" -msgstr "%s: valitsin ’%s’ ei ole yksiselitteinen\n" +msgstr "%s: valitsin ’%s’ ei ole yksiselitteinen; mahdollisuudet:" #: getopt.c:678 getopt.c:682 #, c-format @@ -2598,7 +2490,7 @@ msgstr "komentoriviargumentti â€%s†on hakemisto: ohitettiin" #: io.c:350 io.c:463 #, c-format msgid "cannot open file `%s' for reading (%s)" -msgstr "ei voi avata tiedostoa â€%s†lukemista varten (%s)" +msgstr "tiedoston â€%s†avaaminen lukemista varten (%s) epäonnistui" #: io.c:590 #, c-format @@ -2622,9 +2514,7 @@ msgstr "lausekkeella â€%sâ€-uudelleenohjauksessa on null-merkkijonoarvo" #: io.c:711 #, c-format msgid "filename `%s' for `%s' redirection may be result of logical expression" -msgstr "" -"tiedostonimi â€%s†â€%sâ€-uudelleenohjaukselle saattaa olla loogisen lausekkeen " -"tulos" +msgstr "tiedostonimi â€%s†â€%sâ€-uudelleenohjaukselle saattaa olla loogisen lausekkeen tulos" #: io.c:754 #, c-format @@ -2634,288 +2524,274 @@ msgstr "turha merkkien â€>†ja â€>>†sekoittaminen tiedostolle â€%.*sâ€" #: io.c:808 #, c-format msgid "can't open pipe `%s' for output (%s)" -msgstr "ei voi avata putkea â€%s†tulosteelle (%s)" +msgstr "putken â€%s†avaaminen tulosteelle (%s) epäonnistui" #: io.c:818 #, c-format msgid "can't open pipe `%s' for input (%s)" -msgstr "ei voi avata putkea â€%s†syötteelle (%s)" +msgstr "putken â€%s†avaaminen syötteelle (%s) epäonnistui" #: io.c:849 #, c-format msgid "can't open two way pipe `%s' for input/output (%s)" -msgstr "ei voi avata kaksisuuntaista putkea â€%s†syötteelle/tulosteelle (%s)" +msgstr "kaksisuuntaisen putken â€%s†avaaminen syötteelle/tulosteelle (%s) epäonnistui" -#: io.c:928 +#: io.c:932 #, c-format msgid "can't redirect from `%s' (%s)" -msgstr "ei voi uudelleenohjata putkesta â€%s†(%s)" +msgstr "uudelleenohjaus putkesta â€%s†(%s) epäonnistui" -#: io.c:931 +#: io.c:935 #, c-format msgid "can't redirect to `%s' (%s)" -msgstr "ei voi uudelleenohjata putkeen â€%s†(%s)" +msgstr "uudelleenohjaus putkeen â€%s†(%s) epäonnistui" -#: io.c:982 -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:986 +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:998 +#: io.c:1002 #, c-format msgid "close of `%s' failed (%s)." msgstr "uudelleenohjauksen â€%s†sulkeminen epäonnistui (%s)." -#: io.c:1006 +#: io.c:1010 msgid "too many pipes or input files open" msgstr "avoinna liian monta putkea tai syötetiedostoa" -#: io.c:1028 +#: io.c:1032 msgid "close: second argument must be `to' or `from'" msgstr "close: toisen argumentin on oltava â€to†tai â€fromâ€" -#: io.c:1045 +#: io.c:1049 #, 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:1050 +#: io.c:1054 msgid "close of redirection that was never opened" msgstr "suljettiin uudelleenohjaus, jota ei avattu koskaan" -#: io.c:1147 +#: io.c:1151 #, c-format msgid "close: redirection `%s' not opened with `|&', second argument ignored" -msgstr "" -"close: uudelleenohjaus â€%s†ei ole avattu operaattoreilla â€|&â€, toinen " -"argumentti ohitettu" +msgstr "close: uudelleenohjaus â€%s†ei ole avattu operaattoreilla â€|&â€, toinen argumentti ohitettu" -#: io.c:1164 +#: io.c:1168 #, c-format msgid "failure status (%d) on pipe close of `%s' (%s)" msgstr "virhetila (%d) putken â€%s†sulkemisessa (%s)" -#: io.c:1167 +#: io.c:1171 #, c-format msgid "failure status (%d) on file close of `%s' (%s)" msgstr "virhetila (%d) tiedoston â€%s†sulkemisessa (%s)" -#: io.c:1187 +#: io.c:1191 #, c-format msgid "no explicit close of socket `%s' provided" msgstr "pistokkeen â€%s†eksplisiittistä sulkemista ei tarjota" -#: io.c:1190 +#: io.c:1194 #, c-format msgid "no explicit close of co-process `%s' provided" msgstr "apuprosessin â€%s†eksplisiittistä sulkemista ei tarjota" -#: io.c:1193 +#: io.c:1197 #, c-format msgid "no explicit close of pipe `%s' provided" msgstr "putken â€%s†eksplisiittistä sulkemista ei tarjota" -#: io.c:1196 +#: io.c:1200 #, c-format msgid "no explicit close of file `%s' provided" msgstr "tiedoston â€%s†eksplisiittistä sulkemista ei tarjota" -#: io.c:1224 io.c:1279 main.c:842 main.c:879 +#: io.c:1228 io.c:1283 main.c:842 main.c:879 #, c-format msgid "error writing standard output (%s)" msgstr "virhe kirjoitettaessa vakiotulosteeseen (%s)" -#: io.c:1228 io.c:1284 +#: io.c:1232 io.c:1288 #, c-format msgid "error writing standard error (%s)" msgstr "virhe kirjoitettaessa vakiovirheeseen (%s)" -#: io.c:1236 +#: io.c:1240 #, c-format msgid "pipe flush of `%s' failed (%s)." msgstr "uudelleenohjauksen â€%s†putken tyhjennys epäonnistui (%s)." -#: io.c:1239 +#: io.c:1243 #, c-format msgid "co-process flush of pipe to `%s' failed (%s)." msgstr "putken apuprosessityhjennys uudelleenohjaukseen â€%s†epäonnistui (%s)." -#: io.c:1242 +#: io.c:1246 #, c-format msgid "file flush of `%s' failed (%s)." msgstr "uudelleenohjauksen â€%s†tiedostontyhjennys epäonnistui (%s)." -#: io.c:1356 +#: io.c:1360 #, c-format msgid "local port %s invalid in `/inet'" msgstr "paikallinen portti %s virheellinen pistokkeessa â€/inetâ€" -#: io.c:1374 +#: io.c:1378 #, c-format msgid "remote host and port information (%s, %s) invalid" msgstr "etäkone- ja porttitiedot (%s, %s) ovat virheellisiä" -#: io.c:1526 +#: io.c:1530 #, c-format msgid "no (known) protocol supplied in special filename `%s'" msgstr "ei (tunnettua) yhteyskäytäntöä tarjottu erikoistiedostonimessä â€%sâ€" -#: io.c:1540 +#: io.c:1544 #, c-format msgid "special file name `%s' is incomplete" msgstr "erikoistiedostonimi â€%s†on vaillinainen" -#: io.c:1557 +#: io.c:1561 msgid "must supply a remote hostname to `/inet'" msgstr "on tarjottava etäkoneen nimi pistokkeeseen â€/inetâ€" -#: io.c:1575 +#: io.c:1579 msgid "must supply a remote port to `/inet'" msgstr "on tarjottava etäportti pistokkeeseen â€/inetâ€" -#: io.c:1621 +#: io.c:1625 msgid "TCP/IP communications are not supported" msgstr "TCP/IP-viestintää ei tueta" -#: io.c:1796 +#: io.c:1800 #, c-format msgid "could not open `%s', mode `%s'" -msgstr "ei voitu avata laitetta â€%sâ€, tila â€%sâ€" +msgstr "laitteen â€%s†avaus epäonnistui, tila â€%sâ€" -#: io.c:1846 +#: io.c:1850 #, c-format msgid "close of master pty failed (%s)" msgstr "â€master ptyâ€-sulkeminen epäonnistui (%s)" -#: io.c:1848 io.c:2024 io.c:2194 +#: io.c:1852 io.c:2028 io.c:2198 #, c-format msgid "close of stdout in child failed (%s)" msgstr "vakiotulosteen sulkeminen lapsiprosessissa epäonnistui (%s)" -#: io.c:1851 +#: io.c:1855 #, 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)" +msgstr "â€slave ptyâ€:n siirtäminen vakiotulosteeseen lapsiprosessissa epäonnistui (dup: %s)" -#: io.c:1853 io.c:2029 +#: io.c:1857 io.c:2033 #, c-format msgid "close of stdin in child failed (%s)" msgstr "vakiosyötteen sulkeminen lapsiprosessissa epäonnistui (%s)" -#: io.c:1856 +#: io.c:1860 #, 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)" +msgstr "â€slave ptyâ€:n siirtäminen vakiosyötteeseen lapsiprosessissa epäonnistui (dup: %s)" -#: io.c:1858 io.c:1879 +#: io.c:1862 io.c:1883 #, c-format msgid "close of slave pty failed (%s)" msgstr "â€slave ptyâ€:n sulkeminen epäonnistui (%s)" -#: io.c:1965 io.c:2027 io.c:2171 io.c:2197 +#: io.c:1969 io.c:2031 io.c:2175 io.c:2201 #, c-format msgid "moving pipe to stdout in child failed (dup: %s)" -msgstr "" -"putken siirtäminen vakiotulosteeseen lapsiprosessissa epäonnistui (dup: %s)" +msgstr "putken siirtäminen vakiotulosteeseen lapsiprosessissa epäonnistui (dup: %s)" -#: io.c:1972 io.c:2032 +#: io.c:1976 io.c:2036 #, c-format msgid "moving pipe to stdin in child failed (dup: %s)" -msgstr "" -"putken siirtäminen vakiosyötteeseen lapsiprosessissa epäonnistui (dup: %s)" +msgstr "putken siirtäminen vakiosyötteeseen lapsiprosessissa epäonnistui (dup: %s)" -#: io.c:1992 io.c:2187 +#: io.c:1996 io.c:2191 msgid "restoring stdout in parent process failed\n" msgstr "vakiotulosteen palauttaminen äitiprosessissa epäonnistui\n" -#: io.c:2000 +#: io.c:2004 msgid "restoring stdin in parent process failed\n" msgstr "vakiosyötön palauttaminen äitiprosessissa epäonnistui\n" -#: io.c:2035 io.c:2199 io.c:2213 +#: io.c:2039 io.c:2203 io.c:2217 #, c-format msgid "close of pipe failed (%s)" msgstr "putken sulkeminen epäonnistui (%s)" -#: io.c:2089 +#: io.c:2093 msgid "`|&' not supported" msgstr "â€|&†ei tueta" -#: io.c:2156 +#: io.c:2160 #, c-format msgid "cannot open pipe `%s' (%s)" -msgstr "ei voi avata putkea â€%s†(%s)" +msgstr "putken â€%s†(%s) avaaminen epäonnistui" -#: io.c:2207 +#: io.c:2211 #, c-format msgid "cannot create child process for `%s' (fork: %s)" -msgstr "ei voida luoda lapsiprosessia komennolle â€%s†(fork: %s)" +msgstr "lapsiprosessin luominen komennolle â€%s†(fork: %s) epäonnistui" -#: io.c:2667 +#: io.c:2671 msgid "register_input_parser: received NULL pointer" -msgstr "" +msgstr "register_input_parser: vastaanotettiin NULL-osoitin" -#: io.c:2695 +#: io.c:2699 #, c-format msgid "input parser `%s' conflicts with previously installed input parser `%s'" -msgstr "" +msgstr "syötejäsennin â€%s†on ristiriidassa aiemmin asennetun syötejäsentimen â€%s†kanssa" -#: io.c:2702 +#: io.c:2706 #, c-format msgid "input parser `%s' failed to open `%s'" -msgstr "" +msgstr "syötejäsentäjä â€%s†epäonnistui kohteen â€%s†avaamisessa" -#: io.c:2722 +#: io.c:2726 msgid "register_output_wrapper: received NULL pointer" -msgstr "" +msgstr "register_output_wrapper: vastaanotti NULL-osoittimen" -#: io.c:2750 +#: io.c:2754 #, c-format -msgid "" -"output wrapper `%s' conflicts with previously installed output wrapper `%s'" -msgstr "" +msgid "output wrapper `%s' conflicts with previously installed output wrapper `%s'" +msgstr "tulostekäärin â€%s†on ristiriidassa aiemmin asennetun tulostekäärimen â€%s†kanssa" -#: io.c:2757 +#: io.c:2761 #, c-format msgid "output wrapper `%s' failed to open `%s'" -msgstr "" +msgstr "tulostekäärin â€%s†epäonnistui avaamaan â€%sâ€" -#: io.c:2778 +#: io.c:2782 msgid "register_output_processor: received NULL pointer" -msgstr "" +msgstr "register_output_processor: vastaanotti NULL-osoittimen" -#: io.c:2807 +#: io.c:2811 #, c-format -msgid "" -"two-way processor `%s' conflicts with previously installed two-way processor " -"`%s'" -msgstr "" +msgid "two-way processor `%s' conflicts with previously installed two-way processor `%s'" +msgstr "kaksisuuntainen prosessori â€%s†on ristiriidassa aiemmin asennetun kaksisuuntaisen prosessorin â€%s†kanssa" -#: io.c:2816 +#: io.c:2820 #, c-format msgid "two way processor `%s' failed to open `%s'" -msgstr "" +msgstr "kaksisuuntainen prosessori â€%s†epäonnistui avaamaan â€%sâ€" -#: io.c:2923 +#: io.c:2927 #, c-format msgid "data file `%s' is empty" msgstr "data-tiedosto â€%s†on tyhjä" -#: io.c:2965 io.c:2973 +#: io.c:2969 io.c:2977 msgid "could not allocate more input memory" -msgstr "ei voitu varata lisää syötemuistia" +msgstr "lisäsyötemuistin varaus epäonnistui" -#: io.c:3539 +#: io.c:3543 msgid "multicharacter value of `RS' is a gawk extension" msgstr "â€RSâ€-monimerkkiarvo on gawk-laajennus" -#: io.c:3628 +#: io.c:3632 msgid "IPv6 communication is not supported" msgstr "IPv6-viestintää ei tueta" @@ -2935,9 +2811,7 @@ msgstr "%s: valitsin vaatii argumentin -- %c\n" #: main.c:545 msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'" -msgstr "" -"ympäristömuuttuja â€POSIXLY_CORRECT†asetettu: käännetään päälle valitsin â€--" -"posixâ€" +msgstr "ympäristömuuttuja â€POSIXLY_CORRECT†asetettu: käännetään päälle valitsin â€--posixâ€" #: main.c:551 msgid "`--posix' overrides `--traditional'" @@ -2945,8 +2819,7 @@ msgstr "valitsin â€--posix†korvaa valitsimen â€--traditionalâ€" #: main.c:562 msgid "`--posix'/`--traditional' overrides `--non-decimal-data'" -msgstr "" -"valitsin â€--posix†tai â€--traditional†korvaa valitsimen â€--non-decimal-dataâ€" +msgstr "valitsin â€--posix†tai â€--traditional†korvaa valitsimen â€--non-decimal-dataâ€" #: main.c:566 #, c-format @@ -2954,24 +2827,23 @@ msgid "running %s setuid root may be a security problem" msgstr "suorittaminen â€%s setuid rootâ€-käyttäjänä saattaa olla turvapulma" #: main.c:571 -#, fuzzy msgid "`--posix' overrides `--characters-as-bytes'" -msgstr "valitsin â€--posix†korvaa valitsimen â€--binaryâ€" +msgstr "valitsin â€--posix†korvaa valitsimen â€--characters-as-bytesâ€" #: main.c:630 #, c-format msgid "can't set binary mode on stdin (%s)" -msgstr "ei voi asettaa binaaritilaa vakiosyötteessä (%s)" +msgstr "binaaritilan asettaminen vakiosyötteessä (%s) epäonnistui" #: main.c:633 #, c-format msgid "can't set binary mode on stdout (%s)" -msgstr "ei voi asettaa binaaritilaa vakiotulosteessa (%s)" +msgstr "binaaritilan asettaminen vakiotulosteessa (%s) epäonnistui" #: main.c:635 #, c-format msgid "can't set binary mode on stderr (%s)" -msgstr "ei voi asettaa binaaritilaa vakiovirheessä (%s)" +msgstr "binaaritilaa asettaminen vakiovirheessä (%s) epäonnistui" #: main.c:693 msgid "no program text at all!" @@ -2980,16 +2852,12 @@ msgstr "ei ohjelmatekstiä ollenkaan!" #: main.c:779 #, 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" +msgstr "Käyttö: %s [POSIX- tai GNU-tyyliset valitsimet] -f ohjelmatiedosto [--] tiedosto ...\n" #: main.c:781 #, 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" +msgstr "Käyttö: %s [POSIX- tai GNU-tyyliset valitsimet] [--] %cohjelma%c tiedosto ...\n" #: main.c:786 msgid "POSIX options:\t\tGNU long options: (standard)\n" @@ -3028,9 +2896,8 @@ msgid "\t-d[file]\t\t--dump-variables[=file]\n" msgstr "\t-d[tiedosto]\t\t--dump-variables[=tiedosto]\n" #: main.c:795 -#, fuzzy msgid "\t-D[file]\t\t--debug[=file]\n" -msgstr "\t-p[tiedosto]\t\t--profile[=tiedosto]\n" +msgstr "\t-D[tiedosto]\t\t--debug[=tiedosto]\n" #: main.c:796 msgid "\t-e 'program-text'\t--source='program-text'\n" @@ -3050,11 +2917,11 @@ msgstr "\t-h\t\t\t--help\n" #: main.c:800 msgid "\t-i includefile\t\t--include=includefile\n" -msgstr "" +msgstr "\t-i include-tiedosto\t\t--include=include-tiedosto\n" #: main.c:801 msgid "\t-l library\t\t--load=library\n" -msgstr "" +msgstr "\t-l kirjasto\t\t--load=kirjasto\n" #: main.c:802 msgid "\t-L [fatal]\t\t--lint[=fatal]\n" @@ -3065,18 +2932,16 @@ msgid "\t-n\t\t\t--non-decimal-data\n" msgstr "\t-n\t\t\t--non-decimal-data\n" #: main.c:804 -#, fuzzy msgid "\t-M\t\t\t--bignum\n" -msgstr "\t-g\t\t\t--gen-po\n" +msgstr "\t-M\t\t\t--bignum\n" #: main.c:805 msgid "\t-N\t\t\t--use-lc-numeric\n" msgstr "\t-N\t\t\t--use-lc-numeric\n" #: main.c:806 -#, fuzzy msgid "\t-o[file]\t\t--pretty-print[=file]\n" -msgstr "\t-p[tiedosto]\t\t--profile[=tiedosto]\n" +msgstr "\t-o[tiedosto]\t\t--pretty-print[=tiedosto]\n" #: main.c:807 msgid "\t-O\t\t\t--optimize\n" @@ -3127,8 +2992,7 @@ msgid "" "\n" msgstr "" "\n" -"Virheiden ilmoittamista varten, katso solmua â€Bugs†tiedostossa â€gawk." -"infoâ€,\n" +"Virheiden ilmoittamista varten, katso solmua â€Bugs†tiedostossa â€gawk.infoâ€,\n" "joka on kappale â€Reporting Problems and Bugs†painetussa versiossa.\n" "\n" @@ -3197,12 +3061,12 @@ msgstr "" msgid "-Ft does not set FS to tab in POSIX awk" msgstr "-Ft ei aseta FS välilehteen POSIX awk:ssa" -#: main.c:1181 +#: main.c:1176 #, c-format msgid "unknown value for field spec: %d\n" msgstr "tuntematon arvo kenttämääritteelle: %d\n" -#: main.c:1279 +#: main.c:1274 #, c-format msgid "" "%s: `%s' argument to `-v' not in `var=value' form\n" @@ -3211,105 +3075,101 @@ msgstr "" "%s: â€%s†argumentti valitsimelle â€-v†ei ole â€var=arvoâ€-muodossa\n" "\n" -#: main.c:1305 +#: main.c:1300 #, c-format msgid "`%s' is not a legal variable name" msgstr "â€%s†ei ole laillinen muuttujanimi" -#: main.c:1308 +#: main.c:1303 #, 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:1312 +#: main.c:1307 #, c-format msgid "cannot use gawk builtin `%s' as variable name" -msgstr "ei voi käyttää gawk-ohjelman sisäistä â€%sâ€-määrittelyä muuttujanimenä" +msgstr "gawk-ohjelman sisäisen â€%sâ€-määrittelyn käyttö muuttujanimenä epäonnistui" -#: main.c:1317 +#: main.c:1312 #, c-format msgid "cannot use function `%s' as variable name" -msgstr "funktionimeä â€%s†ei voi käyttää muuttujanimenä" +msgstr "funktionimen â€%s†käyttö muuttujanimenä epäonnistui" -#: main.c:1370 +#: main.c:1365 msgid "floating point exception" msgstr "liukulukupoikkeus" -#: main.c:1377 +#: main.c:1372 msgid "fatal error: internal error" msgstr "tuhoisa virhe: sisäinen virhe" -#: main.c:1392 +#: main.c:1387 msgid "fatal error: internal error: segfault" msgstr "tuhoisa virhe: sisäinen virhe: segmenttivirhe" -#: main.c:1404 +#: main.c:1399 msgid "fatal error: internal error: stack overflow" msgstr "tuhoisa virhe: sisäinen virhe: pinoylivuoto" -#: main.c:1463 +#: main.c:1458 #, c-format msgid "no pre-opened fd %d" msgstr "ei avattu uudelleen tiedostomäärittelijää %d" -#: main.c:1470 +#: main.c:1465 #, c-format msgid "could not pre-open /dev/null for fd %d" -msgstr "ei voitu avata uudelleen laitetta /dev/null tiedostomäärittelijälle %d" +msgstr "laitteen /dev/null avaaminen uudelleen tiedostomäärittelijälle %d epäonnistui" #: mpfr.c:550 -#, fuzzy, c-format +#, c-format msgid "PREC value `%.*s' is invalid" -msgstr "BINMODE-arvo â€%s†on virheellinen, käsiteltiin arvona 3" +msgstr "PREC-arvo â€%.*s†on virheellinen" #: mpfr.c:608 -#, fuzzy, c-format +#, c-format msgid "RNDMODE value `%.*s' is invalid" -msgstr "BINMODE-arvo â€%s†on virheellinen, käsiteltiin arvona 3" +msgstr "RNDMODE-arvo â€%.*s†on virheellinen" #: mpfr.c:698 -#, fuzzy, c-format +#, c-format msgid "%s: received non-numeric argument" -msgstr "cos: vastaanotettu argumentti ei ole numeerinen" +msgstr "%s: vastaanotettu argumentti ei ole numeerinen" #: mpfr.c:800 -#, fuzzy msgid "compl(%Rg): negative value will give strange results" -msgstr "compl(%lf): negatiiviset arvot antavat outoja tuloksia" +msgstr "compl(%Rg): negatiivinen arvo antaa outoja tuloksia" #: mpfr.c:804 -#, fuzzy msgid "comp(%Rg): fractional value will be truncated" -msgstr "compl(%lf): jaosarvo typistetään" +msgstr "compl(%Rg): jaosarvo typistetään" #: mpfr.c:816 -#, fuzzy, c-format +#, c-format msgid "cmpl(%Zd): negative values will give strange results" -msgstr "compl(%lf): negatiiviset arvot antavat outoja tuloksia" +msgstr "compl(%Zd): negatiiviset arvot antavat outoja tuloksia" #: mpfr.c:835 -#, fuzzy, c-format +#, c-format msgid "%s: received non-numeric argument #%d" -msgstr "cos: vastaanotettu argumentti ei ole numeerinen" +msgstr "%s: vastaanotettu argumentti #%d ei ole numeerinen" #: mpfr.c:845 msgid "%s: argument #%d has invalid value %Rg, using 0" -msgstr "" +msgstr "%s: argumentilla #%d on virheellinen arvo %Rg, käytetään 0" #: mpfr.c:857 -#, fuzzy msgid "%s: argument #%d negative value %Rg will give strange results" -msgstr "compl(%lf): negatiiviset arvot antavat outoja tuloksia" +msgstr "%s: argumentin #%d negatiivinen arvo %Rg antaa outoja tuloksia" #: mpfr.c:863 -#, fuzzy msgid "%s: argument #%d fractional value %Rg will be truncated" -msgstr "or(%lf, %lf): jaosarvot typistetään" +msgstr "%s: argumentin #%d jaosarvo %Rg typistetään" #: mpfr.c:878 -#, fuzzy, c-format +#, c-format msgid "%s: argument #%d negative value %Zd will give strange results" -msgstr "compl(%lf): negatiiviset arvot antavat outoja tuloksia" +msgstr "%s: argumentin #%d negatiivinen arvo %Zd antaa outoja tuloksia" #: msg.c:61 #, c-format @@ -3335,12 +3195,8 @@ msgstr "ei heksadesimaalilukuja â€\\xâ€-koodinvaihtosekvenssissä" #: node.c:579 #, c-format -msgid "" -"hex escape \\x%.*s of %d characters probably not interpreted the way you " -"expect" -msgstr "" -"heksadesimaalikoodinvaihtomerkkejä \\x%.*s / %d ei ole luultavasti tulkittu " -"sillä tavalla kuin odotat" +msgid "hex escape \\x%.*s of %d characters probably not interpreted the way you expect" +msgstr "heksadesimaalikoodinvaihtomerkkejä \\x%.*s / %d ei ole luultavasti tulkittu sillä tavalla kuin odotat" #: node.c:594 #, c-format @@ -3348,27 +3204,23 @@ msgid "escape sequence `\\%c' treated as plain `%c'" msgstr "koodinvaihtosekvenssi â€\\%c†käsitelty kuin pelkkä â€%câ€" #: node.c:739 -msgid "" -"Invalid multibyte data detected. There may be a mismatch between your data " -"and your locale." -msgstr "" -"Virheellinen monitavutieto havaittu. Paikallisasetuksesi ja tietojesi " -"välillä saattaa olla täsmäämättömyys." +msgid "Invalid multibyte data detected. There may be a mismatch between your data and your locale." +msgstr "Virheellinen monitavutieto havaittu. Paikallisasetuksesi ja tietojesi välillä saattaa olla täsmäämättömyys." #: posix/gawkmisc.c:177 #, c-format msgid "%s %s `%s': could not get fd flags: (fcntl F_GETFD: %s)" -msgstr "%s %s â€%sâ€: ei voitu hakea fd-lippuja: (fcntl F_GETFD: %s)" +msgstr "%s %s â€%sâ€: fd-lippujen hakeminen epäonnistui: (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â€: ei voitu asettaa close-on-exec: (fcntl F_SETFD: %s)" +msgstr "%s %s â€%sâ€: close-on-exec -asettaminen epäonnistui: (fcntl F_SETFD: %s)" #: profile.c:70 #, c-format msgid "could not open `%s' for writing: %s" -msgstr "ei voitu avata tiedostoa â€%s†kirjoittamista varten: %s" +msgstr "tiedoston â€%s†avaaminen kirjoittamista varten epäonnistui: %s" #: profile.c:72 msgid "sending profile to standard error" @@ -3398,9 +3250,8 @@ msgid "internal error: %s with null vname" msgstr "sisäinen virhe: %s null vname-arvolla" #: profile.c:530 -#, fuzzy msgid "internal error: builtin with null fname" -msgstr "sisäinen virhe: %s null vname-arvolla" +msgstr "sisäinen virhe: builtin null-funktionimellä" #: profile.c:942 #, c-format @@ -3408,6 +3259,8 @@ msgid "" "\t# Loaded extensions (-l and/or @load)\n" "\n" msgstr "" +"\t# Ladatut laajennukset (-l ja/tai @load)\n" +"\n" #: profile.c:965 #, c-format @@ -3436,8 +3289,7 @@ msgstr "muodon â€[%c-%c]†lukualue on paikallisasetuksesta riippuvainen" #: re.c:610 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" -msgstr "" -"säännöllisen lausekkeen komponentin â€%.*s†pitäisi luultavasti olla â€[%.*s]â€" +msgstr "säännöllisen lausekkeen komponentin â€%.*s†pitäisi luultavasti olla â€[%.*s]â€" #: regcomp.c:131 msgid "Success" @@ -3505,48 +3357,28 @@ msgstr "Ei edellistä säännöllistä lauseketta" #: symbol.c:740 msgid "can not pop main context" -msgstr "" - -#, fuzzy -#~ msgid "[s]printf called with no arguments" -#~ msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" +msgstr "pääsisällön pop-toiminto epäonnistui" -#~ msgid "`-m[fr]' option irrelevant in gawk" -#~ msgstr "â€-m[fr]â€-valitsin asiaanliittymätön gawk:ssa" - -#~ msgid "-m option usage: `-m[fr] nnn'" -#~ msgstr "-m valitsinkäyttö: â€-m[fr] nnnâ€" - -#, fuzzy -#~ msgid "%s: received non-numeric first argument" -#~ msgstr "or: ensimmäinen vastaanotettu argumentti ei ole numeerinen" - -#, fuzzy -#~ msgid "%s: received non-numeric second argument" -#~ msgstr "or: toinen vastaanotettu argumentti ei ole numeerinen" +#~ msgid "attempt to use function `%s' as an array" +#~ msgstr "yritettiin käyttää funktiota â€%s†taulukkona" -#, fuzzy -#~ msgid "%s(%Rg, ..): negative values will give strange results" -#~ msgstr "or(%lf, %lf): negatiiviset arvot antavat outoja tuloksia" +#~ msgid "reference to uninitialized element `%s[\"%.*s\"]'" +#~ msgstr "viite alustamattomaan elementtiin â€%s[\"%.*s\"]â€" -#, fuzzy -#~ msgid "%s(%Rg, ..): fractional values will be truncated" -#~ msgstr "or(%lf, %lf): jaosarvot typistetään" +#~ msgid "subscript of array `%s' is null string" +#~ msgstr "taulukon alaindeksi â€%s†on null-merkkijono" -#, fuzzy -#~ msgid "%s(%Zd, ..): negative values will give strange results" -#~ msgstr "or(%lf, %lf): negatiiviset arvot antavat outoja tuloksia" +#~ msgid "%s: empty (null)\n" +#~ msgstr "%s: tyhjä (null)\n" -#, fuzzy -#~ msgid "%s(.., %Rg): negative values will give strange results" -#~ msgstr "or(%lf, %lf): negatiiviset arvot antavat outoja tuloksia" +#~ msgid "%s: empty (zero)\n" +#~ msgstr "%s: tyhjä (nolla)\n" -#, fuzzy -#~ msgid "%s(.., %Zd): negative values will give strange results" -#~ msgstr "or(%lf, %lf): negatiiviset arvot antavat outoja tuloksia" +#~ msgid "%s: table_size = %d, array_size = %d\n" +#~ msgstr "%s: table_size = %d, array_size = %d\n" -#~ msgid "`%s' is a Bell Labs extension" -#~ msgstr "â€%s†on Bell Labs -laajennus" +#~ msgid "%s: array_ref to %s\n" +#~ msgstr "%s: array_ref-viite taulukkoon %s\n" #~ msgid "`nextfile' is a gawk extension" #~ msgstr "â€nextfile†on gawk-laajennus" @@ -3554,14 +3386,29 @@ msgstr "" #~ msgid "`delete array' is a gawk extension" #~ msgstr "â€delete array†on gawk-laajennus" +#~ msgid "use of non-array as array" +#~ msgstr "ei-taulukon käyttö taulukkona" + +#~ msgid "`%s' is a Bell Labs extension" +#~ msgstr "â€%s†on Bell Labs -laajennus" + #~ msgid "and: received non-numeric first argument" #~ msgstr "and: ensimmäinen vastaanotettu argumentti ei ole numeerinen" #~ msgid "and: received non-numeric second argument" #~ msgstr "and: toinen vastaanotettu argumentti ei ole numeerinen" -#~ msgid "and(%lf, %lf): fractional values will be truncated" -#~ msgstr "and(%lf, %lf): jaosarvot typistetään" +#~ msgid "or: received non-numeric first argument" +#~ msgstr "or: ensimmäinen vastaanotettu argumentti ei ole numeerinen" + +#~ msgid "or: received non-numeric second argument" +#~ msgstr "or: toinen vastaanotettu argumentti ei ole numeerinen" + +#~ msgid "or(%lf, %lf): negative values will give strange results" +#~ msgstr "or(%lf, %lf): negatiiviset arvot antavat outoja tuloksia" + +#~ msgid "or(%lf, %lf): fractional values will be truncated" +#~ msgstr "or(%lf, %lf): jaosarvot typistetään" #~ msgid "xor: received non-numeric first argument" #~ msgstr "xor: ensimmäinen vastaanotettu argumentti ei ole numeerinen" @@ -3572,35 +3419,8 @@ msgstr "" #~ msgid "xor(%lf, %lf): fractional values will be truncated" #~ msgstr "xor(%lf, %lf): jaosarvot typistetään" -#~ msgid "Operation Not Supported" -#~ msgstr "Toimintoa ei tueta" - -#~ 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\"]â€" - -#~ msgid "subscript of array `%s' is null string" -#~ msgstr "taulukon alaindeksi â€%s†on null-merkkijono" - -#~ msgid "%s: empty (null)\n" -#~ msgstr "%s: tyhjä (null)\n" - -#~ msgid "%s: empty (zero)\n" -#~ msgstr "%s: tyhjä (nolla)\n" - -#~ msgid "%s: table_size = %d, array_size = %d\n" -#~ msgstr "%s: table_size = %d, array_size = %d\n" - -#~ msgid "%s: array_ref to %s\n" -#~ msgstr "%s: array_ref-viite taulukkoon %s\n" - -#~ msgid "use of non-array as array" -#~ msgstr "ei-taulukon käyttö taulukkona" - #~ msgid "can't use function name `%s' as variable or array" -#~ msgstr "funktionimeä â€%s†ei voi käyttää muuttujana tai taulukkona" +#~ msgstr "funktionimeä â€%s†käyttö muuttujana tai taulukkona epäonnistui" #~ msgid "assignment used in conditional context" #~ msgstr "sijoitusta käytetty ehdollisessa kontekstissa" @@ -3608,11 +3428,8 @@ msgstr "" #~ msgid "statement has no effect" #~ msgstr "käskyllä ei ole vaikutusta" -#~ msgid "" -#~ "for loop: array `%s' changed size from %ld to %ld during loop execution" -#~ msgstr "" -#~ "for-silmukka: taulukon â€%s†koko muuttui arvosta %ld arvoon %ld silmukan " -#~ "suorituksen aikana" +#~ msgid "for loop: array `%s' changed size from %ld to %ld during loop execution" +#~ msgstr "for-silmukka: taulukon â€%s†koko muuttui arvosta %ld arvoon %ld silmukan suorituksen aikana" #~ msgid "function called indirectly through `%s' does not exist" #~ msgstr "kohteen â€%s†kautta epäsuorasti kutsuttu funktio ei ole olemassa" @@ -3632,11 +3449,20 @@ msgstr "" #~ msgid "Sorry, don't know how to interpret `%s'" #~ msgstr "Ei osata tulkita kohdetta â€%sâ€" +#~ msgid "Operation Not Supported" +#~ msgstr "Toimintoa ei tueta" + +#~ msgid "`-m[fr]' option irrelevant in gawk" +#~ msgstr "â€-m[fr]â€-valitsin asiaanliittymätön gawk:ssa" + +#~ msgid "-m option usage: `-m[fr] nnn'" +#~ msgstr "-m valitsinkäyttö: â€-m[fr] nnnâ€" + #~ msgid "\t-R file\t\t\t--command=file\n" #~ msgstr "\t-R tiedosto\t\t\t--exec=tiedosto\n" #~ msgid "could not find groups: %s" -#~ msgstr "ei voitu löytää ryhmiä: %s" +#~ msgstr "ryhmien löytäminen epäonnistui: %s" #~ msgid "assignment is not allowed to result of builtin function" #~ msgstr "sijoitusta ei sallita sisäänrakennetun funktion tulokselle" @@ -3651,8 +3477,7 @@ msgstr "" #~ msgstr "muisti loppui" #~ msgid "call of `length' without parentheses is deprecated by POSIX" -#~ msgstr "" -#~ "â€lengthâ€-kutsu ilman sulkumerkkejä on vanhentunut POSIX-standardissa" +#~ msgstr "â€lengthâ€-kutsu ilman sulkumerkkejä on vanhentunut POSIX-standardissa" #~ msgid "division by zero attempted in `/'" #~ msgstr "jakoa nollalla yritettiin operaatiossa â€/â€" @@ -3675,12 +3500,8 @@ msgstr "" #~ msgid "`nextfile' cannot be called from a BEGIN rule" #~ msgstr "â€nextfile†ei voida kutsua BEGIN-säännöstä" -#~ msgid "" -#~ "concatenation: side effects in one expression have changed the length of " -#~ "another!" -#~ msgstr "" -#~ "concatenation: sivuvaikutukset yhdessä lausekkeessa ovat muuttaneet " -#~ "toisen pituutta!" +#~ msgid "concatenation: side effects in one expression have changed the length of another!" +#~ msgstr "concatenation: sivuvaikutukset yhdessä lausekkeessa ovat muuttaneet toisen pituutta!" #~ msgid "illegal type (%s) in tree_eval" #~ msgstr "virheellinen tyyppi (%s) funktiossa tree_eval" @@ -3701,7 +3522,7 @@ msgstr "" #~ msgstr "/inet/raw-palvelin ei ole vielä valitettavasti valmis" #~ msgid "file `%s' is a directory" -#~ msgstr "tiedosto `%s' on hakemisto" +#~ msgstr "tiedosto â€%s†on hakemisto" #~ msgid "use `PROCINFO[\"%s\"]' instead of `%s'" #~ msgstr "käytä â€PROCINFO[\"%s\"]†eikä â€%sâ€" @@ -3722,7 +3543,7 @@ msgstr "" #~ msgstr "\t-W usage\t\t--usage\n" #~ msgid "can't convert string to float" -#~ msgstr "ei voi muuntaa merkkijonoa liukuluvuksi" +#~ msgstr "merkkijonon muuntaminen liukuluvuksi epäonnistui" #~ msgid "# treated internally as `delete'" #~ msgstr "# käsitelty sisäisesti kuin â€deleteâ€" @@ -3744,8 +3565,10 @@ msgstr "" #~ msgstr "Tuntematon solmutyyppi %s funktiossa pp_var" #~ msgid "can't open two way socket `%s' for input/output (%s)" -#~ msgstr "" -#~ "ei voi avata kaksisuuntaista pistoketta â€%s†syötteelle/tulosteelle (%s)" +#~ msgstr "kaksisuuntaisen vastakkeen â€%s†avaaminen syötteelle/tulosteelle (%s) epäonnistui" #~ msgid "attempt to use scalar `%s' as array" #~ msgstr "yritettiin käyttää skalaaria â€%s†taulukkona" + +#~ msgid "cannot pop main context" +#~ msgstr "pääsisällön pop-toiminto epäonnistui" -- cgit v1.2.3 From 80a38c12d2b9f217639552a6163b4232a8329d60 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 3 Jan 2014 12:54:09 +0200 Subject: Update configuration helper files. --- ChangeLog | 5 + config.guess | 6 +- config.rpath | 106 ++++++---- config.sub | 70 +++---- depcomp | 433 ++++++++++++++++++-------------------- extension/build-aux/ChangeLog | 5 + extension/build-aux/config.guess | 6 +- extension/build-aux/config.rpath | 106 ++++++---- extension/build-aux/config.sub | 99 +++++---- extension/build-aux/depcomp | 442 ++++++++++++++++++--------------------- extension/build-aux/install-sh | 337 +++++++++++++---------------- install-sh | 337 +++++++++++++---------------- 12 files changed, 930 insertions(+), 1022 deletions(-) diff --git a/ChangeLog b/ChangeLog index dced3f44..034f2b39 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-01-03 Arnold D. Robbins + + * config.guess, config.rpath, config.sub, depcomp, + install-sh: Updated. + 2013-12-24 Arnold D. Robbins * getopt.h: Add `defined(__sun)' to list of system that do get to diff --git a/config.guess b/config.guess index 9afd6762..4438cd70 100755 --- a/config.guess +++ b/config.guess @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2013 Free Software Foundation, Inc. +# Copyright 1992-2014 Free Software Foundation, Inc. -timestamp='2013-11-29' +timestamp='2014-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 @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2013 Free Software Foundation, Inc. +Copyright 1992-2014 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." diff --git a/config.rpath b/config.rpath index 17298f23..ab6fd995 100755 --- a/config.rpath +++ b/config.rpath @@ -2,7 +2,7 @@ # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # -# Copyright 1996-2010 Free Software Foundation, Inc. +# Copyright 1996-2014 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # @@ -25,7 +25,7 @@ # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. -# All known linkers require a `.a' archive for static linking (except MSVC, +# All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so @@ -57,13 +57,6 @@ else aix*) wl='-Wl,' ;; - darwin*) - case $cc_basename in - xlc*) - wl='-Wl,' - ;; - esac - ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) @@ -72,9 +65,7 @@ else irix5* | irix6* | nonstopux*) wl='-Wl,' ;; - newsos6) - ;; - linux* | k*bsd*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in ecc*) wl='-Wl,' @@ -85,17 +76,26 @@ else lf95*) wl='-Wl,' ;; - pgcc | pgf77 | pgf90) + nagfor*) + wl='-Wl,-Wl,,' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; + xl* | bgxl* | bgf* | mpixl*) + wl='-Wl,' + ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + wl= + ;; *Sun\ C*) wl='-Wl,' ;; @@ -103,13 +103,24 @@ else ;; esac ;; + newsos6) + ;; + *nto* | *qnx*) + ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) - wl='-Wl,' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + wl='-Qoption ld ' + ;; + *) + wl='-Wl,' + ;; + esac ;; sunos4*) wl='-Qoption ld ' @@ -171,15 +182,14 @@ if test "$with_gnu_ld" = yes; then fi ;; amigaos*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we cannot use - # them. - ld_shlibs=no + case "$host_cpu" in + powerpc) + ;; + m68k) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then @@ -198,11 +208,13 @@ if test "$with_gnu_ld" = yes; then ld_shlibs=no fi ;; + haiku*) + ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; - gnu* | linux* | k*bsd*-gnu) + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else @@ -325,10 +337,14 @@ else fi ;; amigaos*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - # see comment about different semantics on the GNU ld section - ld_shlibs=no + case "$host_cpu" in + powerpc) + ;; + m68k) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac ;; bsdi[45]*) ;; @@ -342,24 +358,15 @@ else ;; darwin* | rhapsody*) hardcode_direct=no - if test "$GCC" = yes ; then + if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else - case $cc_basename in - xlc*) - ;; - *) - ld_shlibs=no - ;; - esac + ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; - freebsd1*) - ld_shlibs=no - ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes @@ -420,6 +427,8 @@ else hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; + *nto* | *qnx*) + ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes @@ -515,7 +524,12 @@ case "$host_os" in library_names_spec='$libname$shrext' ;; amigaos*) - library_names_spec='$libname.a' + case "$host_cpu" in + powerpc*) + library_names_spec='$libname$shrext' ;; + m68k) + library_names_spec='$libname.a' ;; + esac ;; beos*) library_names_spec='$libname$shrext' @@ -534,8 +548,6 @@ case "$host_os" in dgux*) library_names_spec='$libname$shrext' ;; - freebsd1*) - ;; freebsd* | dragonfly*) case "$host_os" in freebsd[123]*) @@ -547,6 +559,9 @@ case "$host_os" in gnu*) library_names_spec='$libname$shrext' ;; + haiku*) + library_names_spec='$libname$shrext' + ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) @@ -582,7 +597,7 @@ case "$host_os" in ;; linux*oldld* | linux*aout* | linux*coff*) ;; - linux* | k*bsd*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) @@ -594,7 +609,7 @@ case "$host_os" in newsos6) library_names_spec='$libname$shrext' ;; - nto-qnx*) + *nto* | *qnx*) library_names_spec='$libname$shrext' ;; openbsd*) @@ -625,6 +640,9 @@ case "$host_os" in sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; + tpf*) + library_names_spec='$libname$shrext' + ;; uts4*) library_names_spec='$libname$shrext' ;; diff --git a/config.sub b/config.sub index 8df55110..092cff00 100755 --- a/config.sub +++ b/config.sub @@ -1,24 +1,18 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -# 2011, 2012 Free Software Foundation, Inc. +# Copyright 1992-2014 Free Software Foundation, Inc. -timestamp='2012-12-06' +timestamp='2014-01-01' -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# 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 -# the Free Software Foundation; either version 2 of the License, or +# 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 +# the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . @@ -26,11 +20,12 @@ timestamp='2012-12-06' # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). -# Please send patches to . Submit a context -# diff and a properly formatted GNU ChangeLog entry. +# Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. @@ -73,9 +68,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 -Free Software Foundation, Inc. +Copyright 1992-2014 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." @@ -259,12 +252,12 @@ case $basic_machine in | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ - | arc \ + | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ - | c4x | clipper \ + | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ @@ -272,6 +265,7 @@ case $basic_machine in | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ + | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ @@ -293,16 +287,17 @@ case $basic_machine in | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ - | nios | nios2 \ + | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 \ - | or32 \ + | or1k | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ @@ -330,7 +325,7 @@ case $basic_machine in c6x) basic_machine=tic6x-unknown ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; @@ -372,13 +367,13 @@ case $basic_machine in | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | clipper-* | craynv-* | cydra-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ @@ -387,6 +382,7 @@ case $basic_machine in | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ + | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ @@ -410,12 +406,13 @@ case $basic_machine in | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ @@ -799,7 +796,7 @@ case $basic_machine in os=-mingw64 ;; mingw32) - basic_machine=i386-pc + basic_machine=i686-pc os=-mingw32 ;; mingw32ce) @@ -835,7 +832,7 @@ case $basic_machine in basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) - basic_machine=i386-pc + basic_machine=i686-pc os=-msys ;; mvs) @@ -1357,7 +1354,7 @@ case $os in -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* \ + | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ @@ -1503,9 +1500,6 @@ case $os in -aros*) os=-aros ;; - -kaos*) - os=-kaos - ;; -zvmoe) os=-zvmoe ;; @@ -1554,6 +1548,9 @@ case $basic_machine in c4x-* | tic4x-*) os=-coff ;; + c8051-*) + os=-elf + ;; hexagon-*) os=-elf ;; @@ -1597,6 +1594,9 @@ case $basic_machine in mips*-*) os=-elf ;; + or1k-*) + os=-elf + ;; or32-*) os=-coff ;; diff --git a/depcomp b/depcomp index e1f51f48..31788017 100755 --- a/depcomp +++ b/depcomp @@ -1,9 +1,9 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2012-07-12.20; # UTC +scriptversion=2013-05-30.07; # UTC -# Copyright (C) 1999-2012 Free Software Foundation, Inc. +# Copyright (C) 1999-2013 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 @@ -27,9 +27,9 @@ scriptversion=2012-07-12.20; # UTC case $1 in '') - echo "$0: No command. Try '$0 --help' for more information." 1>&2 - exit 1; - ;; + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] @@ -56,11 +56,65 @@ EOF ;; esac +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + # A tabulation character. tab=' ' # A newline character. nl=' ' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 @@ -88,32 +142,32 @@ if test "$depmode" = hp; then fi if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then - # This is just like msvisualcpp but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvisualcpp + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then - # This is just like msvc7 but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvc7 + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 fi if test "$depmode" = xlc; then - # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. - gccflag=-qmakedep=gcc,-MF - depmode=gcc + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc fi case "$depmode" in @@ -136,8 +190,7 @@ gcc3) done "$@" stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi @@ -163,15 +216,14 @@ gcc) fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" - alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -## The second -e expression handles DOS-style file names with drive letters. + # The second -e expression handles DOS-style file names with drive + # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. @@ -180,15 +232,15 @@ gcc) ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. - tr ' ' "$nl" < "$tmpdepfile" | ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; @@ -199,47 +251,6 @@ hp) exit 1 ;; -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -eq 0; then : - else - 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 - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#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, @@ -253,9 +264,8 @@ aix) # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + set_dir_from "$object" + set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u @@ -268,9 +278,7 @@ aix) "$@" -M fi stat=$? - - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi @@ -279,65 +287,37 @@ aix) do test -f "$tmpdepfile" && break done - if test -f "$tmpdepfile"; then - # Each line is of the form 'foo.o: dependent.h'. - # Do two passes, one to just change these to - # '$object: dependent.h' and one to simply 'dependent.h:'. - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" + aix_post_process_depfile ;; -icc) - # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. - # However on - # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c - # ICC 7.0 will fill foo.d with something like - # foo.o: sub/foo.c - # foo.o: sub/foo.h - # which is wrong. We want - # sub/foo.o: sub/foo.c - # sub/foo.o: sub/foo.h - # sub/foo.c: - # sub/foo.h: - # ICC 7.1 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using '\': - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - # tcc 0.9.26 (FIXME still under development at the moment of writing) - # will emit a similar output, but also prepend the continuation lines - # with horizontal tabulation characters. +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" - # Each line is of the form 'foo.o: dependent.h', - # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. - # Do two passes, one to just change these to - # '$object: dependent.h' and one to simply 'dependent.h:'. - sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ - < "$tmpdepfile" > "$depfile" - sed ' - s/[ '"$tab"'][ '"$tab"']*/ /g - s/^ *// - s/ *\\*$// - s/^[^:]*: *// - /^$/d - /:$/d - s/$/ :/ - ' < "$tmpdepfile" >> "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; @@ -356,34 +336,37 @@ pgcc) # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= + set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. - base=`echo "$source" | sed -e 's|^.*/||' -e 's/\.[-_a-zA-Z0-9]*$//'` - tmpdepfile="$base.d" + set_base_from "$source" + tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. - lockdir="$base.d-lock" - trap "echo '$0: caught signal, cleaning up...' >&2; rm -rf $lockdir" 1 2 13 15 + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 numtries=100 i=$numtries - while test $i -gt 0 ; do + while test $i -gt 0; do # mkdir is a portable test-and-set. - if mkdir $lockdir 2>/dev/null; then + if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. - rm -rf $lockdir + rmdir "$lockdir" break else - ## the lock is being held by a different process, - ## wait until the winning process is done or we timeout - while test -d $lockdir && test $i -gt 0; do + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done @@ -409,8 +392,8 @@ pgcc) sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | - sed -e 's/$/ :/' >> "$depfile" + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; @@ -421,9 +404,8 @@ hp2) # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + set_dir_from "$object" + set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d @@ -434,8 +416,7 @@ hp2) "$@" +Maked fi stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi @@ -445,76 +426,61 @@ hp2) test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ - s/^ *// - s/ \\*$// - s/$/:/ - p - }' "$tmpdepfile" >> "$depfile" + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" else - echo "#dummy" > "$depfile" + make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in 'foo.d' instead, so we check for that too. - # Subdirectories are respected. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - - if test "$libtool" = yes; then - # With Tru64 cc, shared objects can also be used to make a - # static library. This mechanism is used in libtool 1.4 series to - # handle both shared and static libraries in a single compilation. - # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. - # - # With libtool 1.5 this exception was removed, and libtool now - # generates 2 separate objects for the 2 libraries. These two - # compilations output dependencies in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 - tmpdepfile2=$dir$base.o.d # libtool 1.5 - tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 - tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.o.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - tmpdepfile4=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; msvc7) if test "$libtool" = yes; then @@ -525,8 +491,7 @@ msvc7) "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" - if test "$stat" = 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi @@ -552,6 +517,7 @@ $ { G p }' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; @@ -603,13 +569,14 @@ dashmstdout) # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | - sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" - tr ' ' "$nl" < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; @@ -662,10 +629,12 @@ makedepend) # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" - sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; @@ -701,10 +670,10 @@ cpp) esac done - "$@" -E | - sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | - sed '$ s: \\$::' > "$tmpdepfile" + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" @@ -736,15 +705,15 @@ msvisualcpp) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; + set fnord "$@" + shift + shift + ;; *) - set fnord "$@" "$arg" - shift - shift - ;; + set fnord "$@" "$arg" + shift + shift + ;; esac done "$@" -E 2>/dev/null | diff --git a/extension/build-aux/ChangeLog b/extension/build-aux/ChangeLog index 8a658870..b578de8b 100644 --- a/extension/build-aux/ChangeLog +++ b/extension/build-aux/ChangeLog @@ -1,3 +1,8 @@ +2014-01-03 Arnold D. Robbins + + * config.guess, config.rpath, config.sub, depcomp, + install-sh: Updated. + 2013-12-24 Arnold D. Robbins * config.guess: Updated. diff --git a/extension/build-aux/config.guess b/extension/build-aux/config.guess index 9afd6762..4438cd70 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-2013 Free Software Foundation, Inc. +# Copyright 1992-2014 Free Software Foundation, Inc. -timestamp='2013-11-29' +timestamp='2014-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 @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2013 Free Software Foundation, Inc. +Copyright 1992-2014 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." diff --git a/extension/build-aux/config.rpath b/extension/build-aux/config.rpath index 17298f23..ab6fd995 100755 --- a/extension/build-aux/config.rpath +++ b/extension/build-aux/config.rpath @@ -2,7 +2,7 @@ # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # -# Copyright 1996-2010 Free Software Foundation, Inc. +# Copyright 1996-2014 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # @@ -25,7 +25,7 @@ # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. -# All known linkers require a `.a' archive for static linking (except MSVC, +# All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so @@ -57,13 +57,6 @@ else aix*) wl='-Wl,' ;; - darwin*) - case $cc_basename in - xlc*) - wl='-Wl,' - ;; - esac - ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) @@ -72,9 +65,7 @@ else irix5* | irix6* | nonstopux*) wl='-Wl,' ;; - newsos6) - ;; - linux* | k*bsd*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in ecc*) wl='-Wl,' @@ -85,17 +76,26 @@ else lf95*) wl='-Wl,' ;; - pgcc | pgf77 | pgf90) + nagfor*) + wl='-Wl,-Wl,,' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; + xl* | bgxl* | bgf* | mpixl*) + wl='-Wl,' + ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + wl= + ;; *Sun\ C*) wl='-Wl,' ;; @@ -103,13 +103,24 @@ else ;; esac ;; + newsos6) + ;; + *nto* | *qnx*) + ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) - wl='-Wl,' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + wl='-Qoption ld ' + ;; + *) + wl='-Wl,' + ;; + esac ;; sunos4*) wl='-Qoption ld ' @@ -171,15 +182,14 @@ if test "$with_gnu_ld" = yes; then fi ;; amigaos*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we cannot use - # them. - ld_shlibs=no + case "$host_cpu" in + powerpc) + ;; + m68k) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then @@ -198,11 +208,13 @@ if test "$with_gnu_ld" = yes; then ld_shlibs=no fi ;; + haiku*) + ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; - gnu* | linux* | k*bsd*-gnu) + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else @@ -325,10 +337,14 @@ else fi ;; amigaos*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - # see comment about different semantics on the GNU ld section - ld_shlibs=no + case "$host_cpu" in + powerpc) + ;; + m68k) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac ;; bsdi[45]*) ;; @@ -342,24 +358,15 @@ else ;; darwin* | rhapsody*) hardcode_direct=no - if test "$GCC" = yes ; then + if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else - case $cc_basename in - xlc*) - ;; - *) - ld_shlibs=no - ;; - esac + ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; - freebsd1*) - ld_shlibs=no - ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes @@ -420,6 +427,8 @@ else hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; + *nto* | *qnx*) + ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes @@ -515,7 +524,12 @@ case "$host_os" in library_names_spec='$libname$shrext' ;; amigaos*) - library_names_spec='$libname.a' + case "$host_cpu" in + powerpc*) + library_names_spec='$libname$shrext' ;; + m68k) + library_names_spec='$libname.a' ;; + esac ;; beos*) library_names_spec='$libname$shrext' @@ -534,8 +548,6 @@ case "$host_os" in dgux*) library_names_spec='$libname$shrext' ;; - freebsd1*) - ;; freebsd* | dragonfly*) case "$host_os" in freebsd[123]*) @@ -547,6 +559,9 @@ case "$host_os" in gnu*) library_names_spec='$libname$shrext' ;; + haiku*) + library_names_spec='$libname$shrext' + ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) @@ -582,7 +597,7 @@ case "$host_os" in ;; linux*oldld* | linux*aout* | linux*coff*) ;; - linux* | k*bsd*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) @@ -594,7 +609,7 @@ case "$host_os" in newsos6) library_names_spec='$libname$shrext' ;; - nto-qnx*) + *nto* | *qnx*) library_names_spec='$libname$shrext' ;; openbsd*) @@ -625,6 +640,9 @@ case "$host_os" in sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; + tpf*) + library_names_spec='$libname$shrext' + ;; uts4*) library_names_spec='$libname$shrext' ;; diff --git a/extension/build-aux/config.sub b/extension/build-aux/config.sub index aa2cf19b..092cff00 100755 --- a/extension/build-aux/config.sub +++ b/extension/build-aux/config.sub @@ -1,24 +1,18 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -# 2011, 2012 Free Software Foundation, Inc. +# Copyright 1992-2014 Free Software Foundation, Inc. -timestamp='2012-06-17' +timestamp='2014-01-01' -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# 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 -# the Free Software Foundation; either version 2 of the License, or +# 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 +# the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . @@ -26,11 +20,12 @@ timestamp='2012-06-17' # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). -# Please send patches to . Submit a context -# diff and a properly formatted GNU ChangeLog entry. +# Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. @@ -73,9 +68,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 -Free Software Foundation, Inc. +Copyright 1992-2014 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." @@ -123,7 +116,7 @@ esac maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) @@ -156,7 +149,7 @@ case $os in -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze) + -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; @@ -259,10 +252,12 @@ case $basic_machine in | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ - | be32 | be64 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | be32 | be64 \ | bfin \ - | c4x | clipper \ + | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ @@ -270,10 +265,11 @@ case $basic_machine in | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ + | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep | metag \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ @@ -291,16 +287,17 @@ case $basic_machine in | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ - | nios | nios2 \ + | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 \ - | or32 \ + | or1k | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ @@ -328,7 +325,7 @@ case $basic_machine in c6x) basic_machine=tic6x-unknown ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; @@ -370,13 +367,13 @@ case $basic_machine in | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | clipper-* | craynv-* | cydra-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ @@ -385,11 +382,13 @@ case $basic_machine in | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ + | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ @@ -407,12 +406,13 @@ case $basic_machine in | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ @@ -788,11 +788,15 @@ case $basic_machine in basic_machine=ns32k-utek os=-sysv ;; - microblaze) + microblaze*) basic_machine=microblaze-xilinx ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; mingw32) - basic_machine=i386-pc + basic_machine=i686-pc os=-mingw32 ;; mingw32ce) @@ -828,7 +832,7 @@ case $basic_machine in basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) - basic_machine=i386-pc + basic_machine=i686-pc os=-msys ;; mvs) @@ -1019,7 +1023,11 @@ case $basic_machine in basic_machine=i586-unknown os=-pw32 ;; - rdos) + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) basic_machine=i386-pc os=-rdos ;; @@ -1346,7 +1354,7 @@ case $os in -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* \ + | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ @@ -1359,8 +1367,8 @@ case $os in | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-uclibc* \ + | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ @@ -1492,9 +1500,6 @@ case $os in -aros*) os=-aros ;; - -kaos*) - os=-kaos - ;; -zvmoe) os=-zvmoe ;; @@ -1543,6 +1548,9 @@ case $basic_machine in c4x-* | tic4x-*) os=-coff ;; + c8051-*) + os=-elf + ;; hexagon-*) os=-elf ;; @@ -1586,6 +1594,9 @@ 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 0544c683..31788017 100755 --- a/extension/build-aux/depcomp +++ b/extension/build-aux/depcomp @@ -1,9 +1,9 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2012-07-12.20; # UTC +scriptversion=2013-05-30.07; # UTC -# Copyright (C) 1999-2012 Free Software Foundation, Inc. +# Copyright (C) 1999-2013 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 @@ -27,9 +27,9 @@ scriptversion=2012-07-12.20; # UTC case $1 in '') - echo "$0: No command. Try '$0 --help' for more information." 1>&2 - exit 1; - ;; + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] @@ -56,11 +56,65 @@ EOF ;; esac +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + # A tabulation character. tab=' ' # A newline character. nl=' ' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 @@ -74,6 +128,9 @@ tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" +# Avoid interferences from the environment. +gccflag= dashmflag= + # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case @@ -85,32 +142,32 @@ if test "$depmode" = hp; then fi if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then - # This is just like msvisualcpp but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvisualcpp + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then - # This is just like msvc7 but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvc7 + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 fi if test "$depmode" = xlc; then - # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. - gccflag=-qmakedep=gcc,-MF - depmode=gcc + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc fi case "$depmode" in @@ -133,8 +190,7 @@ gcc3) done "$@" stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi @@ -142,13 +198,17 @@ gcc3) ;; gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then @@ -156,15 +216,14 @@ gcc) fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" - alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -## The second -e expression handles DOS-style file names with drive letters. + # The second -e expression handles DOS-style file names with drive + # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. @@ -173,15 +232,15 @@ gcc) ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. - tr ' ' "$nl" < "$tmpdepfile" | ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; @@ -192,47 +251,6 @@ hp) exit 1 ;; -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -eq 0; then : - else - 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 - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#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, @@ -246,9 +264,8 @@ aix) # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + set_dir_from "$object" + set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u @@ -261,9 +278,7 @@ aix) "$@" -M fi stat=$? - - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi @@ -272,65 +287,37 @@ aix) do test -f "$tmpdepfile" && break done - if test -f "$tmpdepfile"; then - # Each line is of the form 'foo.o: dependent.h'. - # Do two passes, one to just change these to - # '$object: dependent.h' and one to simply 'dependent.h:'. - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" + aix_post_process_depfile ;; -icc) - # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. - # However on - # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c - # ICC 7.0 will fill foo.d with something like - # foo.o: sub/foo.c - # foo.o: sub/foo.h - # which is wrong. We want - # sub/foo.o: sub/foo.c - # sub/foo.o: sub/foo.h - # sub/foo.c: - # sub/foo.h: - # ICC 7.1 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using '\': - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - # tcc 0.9.26 (FIXME still under development at the moment of writing) - # will emit a similar output, but also prepend the continuation lines - # with horizontal tabulation characters. +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" - # Each line is of the form 'foo.o: dependent.h', - # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. - # Do two passes, one to just change these to - # '$object: dependent.h' and one to simply 'dependent.h:'. - sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ - < "$tmpdepfile" > "$depfile" - sed ' - s/[ '"$tab"'][ '"$tab"']*/ /g - s/^ *// - s/ *\\*$// - s/^[^:]*: *// - /^$/d - /:$/d - s/$/ :/ - ' < "$tmpdepfile" >> "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; @@ -349,34 +336,37 @@ pgcc) # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= + set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. - base=`echo "$source" | sed -e 's|^.*/||' -e 's/\.[-_a-zA-Z0-9]*$//'` - tmpdepfile="$base.d" + set_base_from "$source" + tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. - lockdir="$base.d-lock" - trap "echo '$0: caught signal, cleaning up...' >&2; rm -rf $lockdir" 1 2 13 15 + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 numtries=100 i=$numtries - while test $i -gt 0 ; do + while test $i -gt 0; do # mkdir is a portable test-and-set. - if mkdir $lockdir 2>/dev/null; then + if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. - rm -rf $lockdir + rmdir "$lockdir" break else - ## the lock is being held by a different process, - ## wait until the winning process is done or we timeout - while test -d $lockdir && test $i -gt 0; do + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done @@ -402,8 +392,8 @@ pgcc) sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | - sed -e 's/$/ :/' >> "$depfile" + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; @@ -414,9 +404,8 @@ hp2) # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + set_dir_from "$object" + set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d @@ -427,8 +416,7 @@ hp2) "$@" +Maked fi stat=$? - if test $stat -eq 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi @@ -438,76 +426,61 @@ hp2) test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ - s/^ *// - s/ \\*$// - s/$/:/ - p - }' "$tmpdepfile" >> "$depfile" + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" else - echo "#dummy" > "$depfile" + make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in 'foo.d' instead, so we check for that too. - # Subdirectories are respected. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - - if test "$libtool" = yes; then - # With Tru64 cc, shared objects can also be used to make a - # static library. This mechanism is used in libtool 1.4 series to - # handle both shared and static libraries in a single compilation. - # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. - # - # With libtool 1.5 this exception was removed, and libtool now - # generates 2 separate objects for the 2 libraries. These two - # compilations output dependencies in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 - tmpdepfile2=$dir$base.o.d # libtool 1.5 - tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 - tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.o.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - tmpdepfile4=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; msvc7) if test "$libtool" = yes; then @@ -518,8 +491,7 @@ msvc7) "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" - if test "$stat" = 0; then : - else + if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi @@ -545,6 +517,7 @@ $ { G p }' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; @@ -596,13 +569,14 @@ dashmstdout) # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | - sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" - tr ' ' "$nl" < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; @@ -655,10 +629,12 @@ makedepend) # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" - sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; @@ -694,10 +670,10 @@ cpp) esac done - "$@" -E | - sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | - sed '$ s: \\$::' > "$tmpdepfile" + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" @@ -729,15 +705,15 @@ msvisualcpp) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; + set fnord "$@" + shift + shift + ;; *) - set fnord "$@" "$arg" - shift - shift - ;; + set fnord "$@" "$arg" + shift + shift + ;; esac done "$@" -E 2>/dev/null | diff --git a/extension/build-aux/install-sh b/extension/build-aux/install-sh index 377bb868..04367377 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=2011-11-20.07; # UTC +scriptversion=2013-10-30.23; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -41,19 +41,15 @@ scriptversion=2011-11-20.07; # UTC # This script is compatible with the BSD install script, but was written # from scratch. +tab=' ' nl=' ' -IFS=" "" $nl" +IFS=" $tab$nl" -# set DOITPROG to echo to test this script +# Set DOITPROG to "echo" to test this script. -# Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi +doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. @@ -68,17 +64,6 @@ mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - posix_mkdir= # Desired mode of installed file. @@ -137,40 +122,39 @@ while test $# -ne 0; do -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" - shift;; + shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; + case $mode in + *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; -o) chowncmd="$chownprog $2" - shift;; + shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - shift;; + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; - --) shift - break;; + --) shift + break;; - -*) echo "$0: invalid option: $1" >&2 - exit 1;; + -*) echo "$0: invalid option: $1" >&2 + exit 1;; *) break;; esac @@ -223,16 +207,16 @@ if test -z "$dir_arg"; then *[0-7]) if test -z "$stripcmd"; then - u_plus_rw= + u_plus_rw= else - u_plus_rw='% 200' + u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then - u_plus_rw= + u_plus_rw= else - u_plus_rw=,u+rw + u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac @@ -270,40 +254,14 @@ do # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - + dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi @@ -314,74 +272,74 @@ do if test $dstdir_status != 0; then case $posix_mkdir in '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; esac if $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else @@ -391,53 +349,51 @@ do # directory the slow way, step by step, checking for races as we go. case $dstdir in - /*) prefix='/';; - [-=\(\)!]*) prefix='./';; - *) prefix='';; + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; esac - eval "$initialize_posix_glob" - oIFS=$IFS IFS=/ - $posix_glob set -f + set -f set fnord $dstdir shift - $posix_glob set +f + set +f IFS=$oIFS prefixes= for d do - test X"$d" = X && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ done if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true fi fi fi @@ -472,15 +428,12 @@ do # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - + set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then @@ -493,24 +446,24 @@ do # to itself, or perhaps because mv is so ancient that it does not # support -f. { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 diff --git a/install-sh b/install-sh index 377bb868..04367377 100755 --- a/install-sh +++ b/install-sh @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2011-11-20.07; # UTC +scriptversion=2013-10-30.23; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -41,19 +41,15 @@ scriptversion=2011-11-20.07; # UTC # This script is compatible with the BSD install script, but was written # from scratch. +tab=' ' nl=' ' -IFS=" "" $nl" +IFS=" $tab$nl" -# set DOITPROG to echo to test this script +# Set DOITPROG to "echo" to test this script. -# Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi +doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. @@ -68,17 +64,6 @@ mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - posix_mkdir= # Desired mode of installed file. @@ -137,40 +122,39 @@ while test $# -ne 0; do -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" - shift;; + shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; + case $mode in + *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; -o) chowncmd="$chownprog $2" - shift;; + shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - shift;; + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; - --) shift - break;; + --) shift + break;; - -*) echo "$0: invalid option: $1" >&2 - exit 1;; + -*) echo "$0: invalid option: $1" >&2 + exit 1;; *) break;; esac @@ -223,16 +207,16 @@ if test -z "$dir_arg"; then *[0-7]) if test -z "$stripcmd"; then - u_plus_rw= + u_plus_rw= else - u_plus_rw='% 200' + u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then - u_plus_rw= + u_plus_rw= else - u_plus_rw=,u+rw + u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac @@ -270,40 +254,14 @@ do # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - + dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi @@ -314,74 +272,74 @@ do if test $dstdir_status != 0; then case $posix_mkdir in '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; esac if $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else @@ -391,53 +349,51 @@ do # directory the slow way, step by step, checking for races as we go. case $dstdir in - /*) prefix='/';; - [-=\(\)!]*) prefix='./';; - *) prefix='';; + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; esac - eval "$initialize_posix_glob" - oIFS=$IFS IFS=/ - $posix_glob set -f + set -f set fnord $dstdir shift - $posix_glob set +f + set +f IFS=$oIFS prefixes= for d do - test X"$d" = X && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ done if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true fi fi fi @@ -472,15 +428,12 @@ do # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - + set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then @@ -493,24 +446,24 @@ do # to itself, or perhaps because mv is so ancient that it does not # support -f. { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 -- cgit v1.2.3 From 815ad7a1d9e47b50b26fd89c362a99598fa45c1c Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 3 Jan 2014 12:55:03 +0200 Subject: Sync dfa with GNU grep. --- ChangeLog | 1 + dfa.c | 4 ++-- dfa.h | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 034f2b39..ea0b8c7f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,7 @@ * config.guess, config.rpath, config.sub, depcomp, install-sh: Updated. + * dfa.h, dfa.c: Sync with GNU grep; comment fix and copyright year. 2013-12-24 Arnold D. Robbins diff --git a/dfa.c b/dfa.c index a75d332c..44bb220e 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-2013 Free Software + Copyright (C) 1988, 1998, 2000, 2002, 2004-2005, 2007-2014 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify @@ -470,7 +470,7 @@ static void dfamust (struct dfa *dfa); static void regexp (void); /* These two macros are identical to the ones in gnulib's xalloc.h, - except that they not to case the result to "(t *)", and thus may + except that they do not cast the result to "(t *)", and thus may be used via type-free CALLOC and MALLOC macros. */ #undef XNMALLOC #undef XCALLOC diff --git a/dfa.h b/dfa.h index c58485a7..bacd4894 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-2013 Free Software Foundation, Inc. + Copyright (C) 1988, 1998, 2007, 2009-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 -- cgit v1.2.3 From 4a7dc37ea7122759469ee93eae9dadea455d658b Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 3 Jan 2014 12:55:55 +0200 Subject: Update NEWS. --- ChangeLog | 1 + NEWS | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index ea0b8c7f..e6b3ea63 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,7 @@ * config.guess, config.rpath, config.sub, depcomp, install-sh: Updated. * dfa.h, dfa.c: Sync with GNU grep; comment fix and copyright year. + * NEWS: Updated some, including copyright year. 2013-12-24 Arnold D. Robbins diff --git a/NEWS b/NEWS index 09f91720..b3f65e7a 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,4 @@ - Copyright (C) 2010, 2011, 2012, 2013 Free Software Foundation, Inc. + Copyright (C) 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright @@ -10,7 +10,7 @@ Changes from 4.1.0 to 4.1.1 1. The "stat" extension now includes a "devbsize" element which indicates the units for the "nblocks" element -2. The extension facility works on MinGW. Many of the extensions can be +2. The extension now facility works on MinGW. Many of the extensions can be built and used directly. 3. A number of bugs in the pretty-printing / profiling code have been fixed. @@ -19,7 +19,7 @@ Changes from 4.1.0 to 4.1.1 5. The debugger now lists source code correctly under Cygwin. -6. Configuration and building Mac OS X libreadline should work now. +6. Configuration and building with the Mac OS X libreadline should work now. 7. The -O option now works again. -- cgit v1.2.3 From 4eee688d1ff5059db3d40af26df188b90368589c Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sat, 4 Jan 2014 20:59:43 +0200 Subject: Update copyright years in VMS files, add packaging scripts. --- vms/ChangeLog | 36 ++++ vms/backup_gawk_src.com | 113 +++++++++++ vms/build_gawk_pcsi_desc.com | 428 +++++++++++++++++++++++++++++++++++++++ vms/build_gawk_pcsi_text.com | 179 ++++++++++++++++ vms/build_gawk_release_notes.com | 67 ++++++ vms/compare_gawk_source.com | 367 +++++++++++++++++++++++++++++++++ vms/config_h.com | 35 ++-- vms/descrip.mms | 17 ++ vms/gawk_alias_setup.com | 110 ++++++++++ vms/gawk_build_steps.txt | 220 ++++++++++++++++++++ vms/gawk_release_note_start.txt | 189 +++++++++++++++++ vms/gawk_verb.com | 26 +++ vms/gawkmisc.vms | 3 +- vms/gnv_gawk_startup.com | 75 +++++++ vms/make_pcsi_gawk_kit_name.com | 189 +++++++++++++++++ vms/pcsi_gawk_file_list.txt | 120 +++++++++++ vms/pcsi_product_gawk.com | 187 +++++++++++++++++ vms/remove_old_gawk.com | 113 +++++++++++ vms/stage_gawk_install.com | 300 +++++++++++++++++++++++++++ vms/vms_args.c | 2 +- vms/vms_cli.c | 2 +- vms/vms_fwrite.c | 2 +- vms/vms_gawk.c | 3 +- vms/vms_misc.c | 2 +- vms/vms_popen.c | 3 +- vms/vmstest.com | 27 ++- 26 files changed, 2787 insertions(+), 28 deletions(-) create mode 100644 vms/backup_gawk_src.com create mode 100644 vms/build_gawk_pcsi_desc.com create mode 100644 vms/build_gawk_pcsi_text.com create mode 100644 vms/build_gawk_release_notes.com create mode 100644 vms/compare_gawk_source.com create mode 100644 vms/gawk_alias_setup.com create mode 100644 vms/gawk_build_steps.txt create mode 100644 vms/gawk_release_note_start.txt create mode 100644 vms/gawk_verb.com create mode 100644 vms/gnv_gawk_startup.com create mode 100644 vms/make_pcsi_gawk_kit_name.com create mode 100644 vms/pcsi_gawk_file_list.txt create mode 100644 vms/pcsi_product_gawk.com create mode 100644 vms/remove_old_gawk.com create mode 100644 vms/stage_gawk_install.com diff --git a/vms/ChangeLog b/vms/ChangeLog index ba017d64..0db7efd2 100644 --- a/vms/ChangeLog +++ b/vms/ChangeLog @@ -1,3 +1,39 @@ +2014-01-03 John E. Malmberg + + * config_h.com, generate_config_vms_h_gawk.com, + vms_args.c, vms_cli.c, vms_fwrite.c, vms_gawk.c, vms_misc.c, + vms_popen.c: Update copyright to 2014. + * descrip.mms: Improve spotless cleanup. + * vmstest.com: Improve test cleanup. + * backup_gawk_src.com: New file. Create backup savesets for gawk source. + * build_gawk_pcsi_desc.com: New file. Create a pcsi$desc manifest + file for building a gawk package. + * build_gawk_pcsi_text.com: New file. Create a pcsi$text file for + building a gawk package. + * build_gawk_release_notes.com: New file. Create a VMS release notes + file based on the gawk README and COPYING files and the release note + start and build instruction files. + * compare_gawk_source.com: New file. Helper file to compare and + optionally update two gawk source directories. Used to copy + source from an NFS volume to a VMS native volume for backup. + * gawk_alias_setup.com: New file. Used at installation time to + create hard links for for some files instead of copies. + * gawk_build_steps.txt: New file. Document how to build a PCSI kit. + * gawk_release_note_start.txt: New file. Start of release notes. + * gawk_verb.com: New file. Converts the gawk.cld file into a + gawk_verb.cld file for setting up GAWK as a DCL command. + * gnv_gawk_startup.com: New file. Makes sure that the GNV$GNU logical + name need to easily find the gawk image is defined. + * make_pcsi_gawk_kit_name.com: New File. Create the PCSI kit name + based on the GAWK version. + * pcsi_gawk_file_list.txt: New File. Input file for creating the + pcsi$desc manifest file. + * pcsi_product_gawk.com: New file. File to create the PCSI kit. + * remove_old_gawk.com: New file. File to remove obsolete GNV gawk + files replaced by the new PCSI kit. + * stage_gawk_install.com: New file. Stages an install for the + pcsi kit building. + 2013-12-29 John E. Malmberg * gawk_plugin.opt: New file. Needed to build plugins on IA64 diff --git a/vms/backup_gawk_src.com b/vms/backup_gawk_src.com new file mode 100644 index 00000000..d1e47fbe --- /dev/null +++ b/vms/backup_gawk_src.com @@ -0,0 +1,113 @@ +$! File: Backup_gawk_src.com +$! +$! Procedure to create backup save sets for installing in a PCSI kit. +$! +$! To comply with most Open Source licenses, the source used for building +$! a kit will be packaged with the distribution kit for the binary. +$! +$! Backup save sets are the only storage format that I can expect a +$! VMS system to be able to extract ODS-5 filenames and directories. +$! +$! The make_pcsi_kit_name.com needs to be run before this procedure to +$! properly name the files that will be created. +$! +$! This file is created from a template file for the purpose of making it +$! easier to port Unix code, particularly open source code to VMS. +$! Therefore permission is freely granted for any use. +$! +$! 13-Jun-2009 J. Malmberg +$! +$!=========================================================================== +$! +$! Save default +$ default_dir = f$environment("DEFAULT") +$! +$ arch_type = f$getsyi("ARCH_NAME") +$ arch_code = f$extract(0, 1, arch_type) +$! +$ if arch_code .nes. "V" +$ then +$ set proc/parse=extended +$ endif +$! +$ ss_abort = 44 +$ status = ss_abort +$! +$ kit_name = f$trnlnm("GNV_PCSI_KITNAME") +$ if kit_name .eqs. "" +$ then +$ write sys$output "@MAKE_PCSI_GAWK_KIT_NAME.COM has not been run." +$ goto all_exit +$ endif +$ producer = f$trnlnm("GNV_PCSI_PRODUCER") +$ if producer .eqs. "" +$ then +$ write sys$output "@MAKE_PCSI_GAWK_KIT_NAME.COM has not been run." +$ goto all_exit +$ endif +$ filename_base = f$trnlnm("GNV_PCSI_FILENAME_BASE") +$ if filename_base .eqs. "" +$ then +$ write sys$output "@MAKE_PCSI_GAWK_KIT_NAME.COM has not been run." +$ goto all_exit +$ endif +$! +$ node_swvers = f$getsyi("NODE_SWVERS") +$ node_swvers_type = f$extract(0, 1, node_swvers) +$ node_swvers_vers = f$extract(1, f$length(node_swvers), node_swvers) +$ swvers_maj = f$element(0, ".", node_swvers_vers) +$ node_swvers_min_update = f$element(1, ".", node_swvers_vers) +$ swvers_min = f$element(0, "-", node_swvers_min_update) +$ swvers_update = f$element(1, "-", node_swvers_min_update) +$! +$ if swvers_update .eqs. "-" then swvers_update = "" +$! +$ vms_vers = f$fao("!2ZB!2ZB!AS", 'swvers_maj', 'swvers_min', swvers_update) +$! +$! +$! +$! If available make an interchange save set +$!------------------------------------------- +$ interchange = "" +$ if arch_code .eqs. "V" +$ then +$ interchange = "/interchange" +$ endif +$ if (swvers_maj .ges. "8") .and. (swvers_min .ges. 4) +$ then +$ interchange = "/interchange/noconvert" +$ endif +$! +$! +$! Put things back on error. +$ on warning then goto all_exit +$! +$ current_default = f$environment("DEFAULT") +$ my_dir = f$parse(current_default,,,"DIRECTORY") - "[" - "<" - ">" - "]" +$! +$ src_root = "src_root:" +$ if f$trnlnm("src_root1") .nes. "" then src_root = "src_root1:" +$ backup'interchange' 'src_root'[gawk...]*.*;0 - + 'filename_base'_original_src.bck/sav +$ status = $status +$! +$! There may be a VMS specific source kit +$!----------------------------------------- +$ vms_root = "vms_root:" +$ if f$trnlnm("vms_root1") .nes. "" then vms_root = "vms_root1:" +$ files_found = 0 +$ define/user sys$error nl: +$ define/user sys$output nl: +$ directory 'vms_root'[...]*.*;*/exc=*.dir +$ if '$severity' .eq. 1 then files_found = 1 +$! +$ if files_found .eq. 1 +$ then +$ backup'interchange' 'vms_root'[gawk...]*.*;0 - + 'filename_base'_vms_src.bck/sav +$ status = $status +$ endif +$! +$all_exit: +$ set def 'default_dir' +$ exit diff --git a/vms/build_gawk_pcsi_desc.com b/vms/build_gawk_pcsi_desc.com new file mode 100644 index 00000000..63d149e6 --- /dev/null +++ b/vms/build_gawk_pcsi_desc.com @@ -0,0 +1,428 @@ +$! File: Build_GAWK_PCSI_DESC.COM +$! +$! Build the *.pcsi$text file in the following sections: +$! Required software dependencies. +$! install/upgrade/postinstall steps. +$! 1. Duplicate filenames need an alias procedure. +$! 2. ODS-5 filenames need an alias procedure. +$! 3. Special alias links for executables (cp. -> gnv$cp.exe) +$! if a lot, then an alias procedure is needed. +$! 4. Rename the files to lowercase. +$! Move Release Notes to destination +$! Source kit option +$! Create directory lines +$! Add file lines for gawk. +$! Add Link alias procedure file (used for gawk) +$! Add [.SYS$STARTUP]gawk_startup file +$! Add Release notes file. +$! +$! The file PCSI_GAWK_FILE_LIST.TXT is read in to get the files other +$! than the release notes file and the source backup file. +$! +$! The PCSI system can really only handle ODS-2 format filenames and +$! assumes that there is only one source directory. It also assumes that +$! all destination files with the same name come from the same source file. +$! Fortunately GAWK does not trip most of these issues, so those steps +$! above are marked N/A. +$! +$! A rename action section is needed to make sure that the files are +$! created in the GNV$GNU: in the correct case, and to create the alias +$! link [usr.bin]gawk. for [usr.bin]gawk.exe. +$! +$! 02-Jan-2014 J. Malmberg - Gawk version +$! +$!=========================================================================== +$! +$ kit_name = f$trnlnm("GNV_PCSI_KITNAME") +$ if kit_name .eqs. "" +$ then +$ write sys$output "@[.vms]MAKE_PCSI_GAWK_KIT_NAME.COM has not been run." +$ goto all_exit +$ endif +$ producer = f$trnlnm("GNV_PCSI_PRODUCER") +$ if producer .eqs. "" +$ then +$ write sys$output "@[.vms]MAKE_PCSI_GAWK_KIT_NAME.COM has not been run." +$ goto all_exit +$ endif +$ filename_base = f$trnlnm("GNV_PCSI_FILENAME_BASE") +$ if filename_base .eqs. "" +$ then +$ write sys$output "@[.vms]MAKE_PCSI_GAWK_KIT_NAME.COM has not been run." +$ goto all_exit +$ endif +$! +$! +$! Parse the kit name into components. +$!--------------------------------------- +$ producer = f$element(0, "-", kit_name) +$ base = f$element(1, "-", kit_name) +$ product = f$element(2, "-", kit_name) +$ mmversion = f$element(3, "-", kit_name) +$ majorver = f$extract(0, 3, mmversion) +$ minorver = f$extract(3, 2, mmversion) +$ updatepatch = f$element(4, "-", kit_name) +$ if updatepatch .eqs. "-" then updatepatch = "" +$! +$! kit type of "D" means a daily build +$ kit_type = f$edit(f$extract(0, 1, majorver), "upcase") +$! +$! +$ product_line = "product ''producer' ''base' ''product'" +$ if updatepatch .eqs. "" +$ then +$ product_name = " ''majorver'.''minorver'" +$ else +$ product_name = " ''majorver'.''minorver'-''updatepatch'" +$ endif +$ product_line = product_line + " ''product_name' full;" +$!write sys$output product_line +$! +$! +$! +$! Create the file as a VMS text file. +$!---------------------------------------- +$ base_file = kit_name +$ create 'base_file'.pcsi$desc +$! +$! +$! Start building file. +$!---------------------- +$ open/append pdsc 'base_file'.pcsi$desc +$! +$ write pdsc product_line +$! +$! Required product dependencies. +$!---------------------------------- +$ vmsprd = "DEC" +$ if base .eqs. "I64VMS" then vmsprd = "HP" +$! +$ write pdsc " software ''vmsprd' ''base' VMS ;" +$ arch_type = f$getsyi("ARCH_NAME") +$ node_swvers = f$getsyi("node_swvers") +$ vernum = f$extract(1, f$length(node_swvers), node_swvers) +$ majver = f$element(0, ".", vernum) +$ minverdash = f$element(1, ".", vernum) +$ minver = f$element(0, "-", minverdash) +$ dashver = f$element(1, "-", minverdash) +$ if dashver .eqs. "-" then dashver = "" +$ vmstag = majver + minver + dashver +$ code = f$extract(0, 1, arch_type) +$ arch_code = f$extract(0, 1, arch_type) +$ write pdsc - + " if (not ) ;" +$ write pdsc " error NEED_VMS''vmstag';" +$ write pdsc " end if;" +$! +$! +$! +$! install/upgrade/postinstall steps. +$!----------------------------------- +$! 1. Duplicate filenames need an alias procedure. +$! 2. ODS-5 filenames need an alias procedure. +$! 3. Special alias links for executables (gawk. -> gnv$gawk.exe) +$! if a lot, then an alias procedure is needed. +$! 4. Rename the files to lowercase. +$! +$! +$! Alias links needed. +$!------------------------- +$ add_alias_lines = "" +$ rem_alias_lines = "" +$ line_out = "" +$! +$! Read through the file list to set up aliases and rename commands. +$!--------------------------------------------------------------------- +$ open/read flst [.vms]pcsi_gawk_file_list.txt +$! +$inst_alias_loop: +$ read/end=inst_alias_loop_end flst line_in +$ line_in = f$edit(line_in,"compress,trim,uncomment") +$ if line_in .eqs. "" then goto inst_alias_loop +$ pathname = f$element(0, " ", line_in) +$ linkflag = f$element(1, " ", line_in) + +$ if linkflag .nes. "->" then goto inst_alias_write +$! +$ linktarget = f$element(2, " ", line_in) +$ nlink = "pcsi$destination:" + pathname +$ ntarg = "pcsi$destination:" + linktarget +$ new_add_alias_line = - + """if f$search(""""''nlink'"""") .eqs. """""""" then" + - + " set file/enter=''nlink' ''ntarg'""" +$ if add_alias_lines .nes. "" +$ then +$ add_alias_lines = add_alias_lines + "," + new_add_alias_line +$ else +$ add_alias_lines = new_add_alias_line +$ endif +$! +$ new_rem_alias_line = - + """if f$search(""""''nlink'"""") .nes. """""""" then" + - + " set file/remove ''nlink';""" +$ if rem_alias_lines .nes. "" +$ then +$ rem_alias_lines = rem_alias_lines + "," + new_rem_alias_line +$ else +$ rem_alias_lines = new_rem_alias_line +$ endif +$! +$ goto inst_alias_loop +$! +$inst_alias_write: +$! +$! execute install / remove +$ write pdsc " execute install (" +$! add aliases +$ i = 0 +$ex_ins_loop: +$ line = f$element(i, ",", add_alias_lines) +$ i = i + 1 +$ if line .eqs. "" then goto ex_ins_loop +$ if line .eqs. "," then goto ex_ins_loop_end +$ if line_out .nes. "" then write pdsc line_out,"," +$ line_out = line +$ goto ex_ins_loop +$ex_ins_loop_end: +$ if line_out .eqs. "" then line_out = " ""continue""" +$ write pdsc line_out +$ line_out = "" +$ write pdsc " )" +$ write pdsc " remove (" +$! remove aliases +$ line_out = - + " ""@pcsi$destination:[gnv.vms_bin]gawk_alias_setup.com remove""" +$ i = 0 +$ex_rem_loop: +$ line = f$element(i, ",", rem_alias_lines) +$ i = i + 1 +$ if line .eqs. "" then goto ex_rem_loop +$ if line .eqs. "," then goto ex_rem_loop_end +$ if line_out .nes. "" then write pdsc line_out,"," +$ line_out = line +$ goto ex_rem_loop +$ex_rem_loop_end: +$ if line_out .eqs. "" then line_out = " ""continue""" +$ write pdsc line_out +$ line_out = "" +$ write pdsc " ) ;" +$! +$! execute upgrade +$ write pdsc " execute upgrade (" +$ line_out = - + " ""@pcsi$destination:[gnv.vms_bin]gawk_alias_setup.com remove""" +$ i = 0 +$ex_upg_loop: +$ line = f$element(i, ",", rem_alias_lines) +$ i = i + 1 +$ if line .eqs. "" then goto ex_upg_loop +$ if line .eqs. "," then goto ex_upg_loop_end +$ if line_out .nes. "" then write pdsc line_out,"," +$ line_out = line +$ goto ex_upg_loop +$ex_upg_loop_end: +$ if line_out .eqs. "" then line_out = " ""continue""" +$ write pdsc line_out +$ line_out = "" +$! remove aliases +$ write pdsc " ) ;" +$! +$! execute postinstall +$ write pdsc " execute postinstall (" +$ if arch_code .nes. "V" +$ then +$ line_out = " ""set process/parse=extended""," +$ write pdsc line_out +$ endif +$ line_out = " ""@pcsi$destination:[gnv.vms_bin]remove_old_gawk.com""," +$ write pdsc line_out +$ line_out = " ""@pcsi$destination:[gnv.vms_bin]gawk_alias_setup.com""" +$ i = 0 +$ex_pins_loop: +$ line = f$element(i, ",", add_alias_lines) +$ i = i + 1 +$ if line .eqs. "" then goto ex_pins_loop +$ if line .eqs. "," then goto ex_pins_loop_end +$ if line_out .nes. "" then write pdsc line_out,"," +$ line_out = line +$ goto ex_pins_loop +$ex_pins_loop_end: +$ if line_out .eqs. "" then line_out = " ""continue""" +$! write pdsc line_out +$! line_out = "" +$! add aliases and follow with renames. +$! +$goto inst_dir +$! +$inst_dir_loop: +$ read/end=inst_alias_loop_end flst line_in +$ line_in = f$edit(line_in,"compress,trim,uncomment") +$ if line_in .eqs. "" then goto inst_dir_loop +$inst_dir: +$ pathname = f$element(0, " ", line_in) +$! +$! Ignore the directory entries for now. +$!----------------------------------------- +$ filedir = f$parse(pathname,,,"DIRECTORY") +$ if pathname .eqs. filedir then goto inst_dir_loop +$! +$! process .dir extensions for rename +$! If this is not a directory then start processing files. +$!------------------------- +$ filetype = f$parse(pathname,,,"TYPE") +$ filetype_u = f$edit(filetype, "upcase") +$ filename = f$parse(pathname,,,"NAME") +$ if filetype_u .nes. ".DIR" then goto inst_file +$! +$! process directory lines for rename. +$!-------------------------------------- +$ if line_out .nes. "" +$ then +$ write pdsc line_out,"," +$ line_out = "" +$ endif +$ if arch_code .nes. "V" +$ then +$ if line_out .nes. "" then write pdsc line_out,"," +$ line_out = " ""rename pcsi$destination:''pathname' ''filename'.DIR""" +$ else +$ if line_out .nes. "" then write pdsc line_out +$ line_out = "" +$ endif +$ goto inst_dir_loop +$! +$! +$! process file lines for rename +$!--------------------------------- +$inst_file_loop: +$ read/end=inst_alias_loop_end flst line_in +$ line_in = f$edit(line_in,"compress,trim,uncomment") +$ if line_in .eqs. "" then goto inst_dir_loop +$ pathname = f$element(0, " ", line_in) +$! +$! Filenames with $ in them are VMS special and do not need to be lowercased. +$! -------------------------------------------------------------------------- +$ if f$locate("$", pathname) .lt. f$length(pathname) then goto inst_file_loop +$! +$ filetype = f$parse(pathname,,,"TYPE") +$ filename = f$parse(pathname,,,"NAME") + filetype +$inst_file: +$ if arch_code .nes. "V" +$ then +$ if line_out .nes. "" then write pdsc line_out,"," +$ filetype = f$parse(pathname,,,"TYPE") +$ filename = f$parse(pathname,,,"NAME") + filetype +$ line_out = " ""rename pcsi$destination:''pathname' ''filename'""" +$ else +$ if line_out .nes. "" then write pdsc line_out +$ line_out = "" +$ endif +$ goto inst_file_loop +$! +$inst_alias_loop_end: +$! +$write pdsc line_out +$write pdsc " ) ;" +$close flst +$! +$! Move Release Notes to destination +$!------------------------------------- +$write pdsc " information RELEASE_NOTES phase after ;" +$! +$! Source kit option +$!--------------------- +$write pdsc " option SOURCE default 0;" +$write pdsc " directory ""[gnv.common_src]"" PROTECTION PUBLIC ;" +$write pdsc - + " file ""[gnv.common_src]''filename_base'_original_src.bck""" +$write pdsc - + " source [common_src]''filename_base'_original_src.bck ;" +$if f$search("sys$disk:''filename_base'_vms_src.bck") .nes. "" +$then +$ write pdsc " directory ""[gnv.vms_src]"" PROTECTION PUBLIC ;" +$ write pdsc " file ""[gnv.vms_src]''filename_base'_vms_src.bck""" +$ write pdsc " source [vms_src]''filename_base'_vms_src.bck ;" +$endif +$write pdsc " end option;" +$! +$! +$! Read through the file list again. +$!---------------------------------- +$open/read flst [.vms]pcsi_gawk_file_list.txt +$! +$! +$! Create directory lines +$!------------------------- +$flst_dir_loop: +$ read/end=flst_loop_end flst line_in +$ line_in = f$edit(line_in,"compress,trim,uncomment") +$ if line_in .eqs. "" then goto flst_dir_loop +$! +$ filename = f$element(0, " ", line_in) +$ linkflag = f$element(1, " ", line_in) +$ if linkflag .eqs. "->" then goto flst_dir_loop +$! +$! Ignore .dir extensions +$!------------------------- +$ filetype = f$edit(f$parse(filename,,,"TYPE"), "upcase") +$ if filetype .eqs. ".DIR" then goto flst_dir_loop +$! +$ destname = filename +$! +$! It should be just a directory then. +$!------------------------------------- +$ filedir = f$edit(f$parse(filename,,,"DIRECTORY"), "lowercase") +$! If this is not a directory then start processing files. +$!--------------------------------------------------------- +$ if filename .nes. filedir then goto flst_file +$! +$ write pdsc " directory ""''destname'"" PROTECTION PUBLIC ;" +$ goto flst_dir_loop +$! +$! +$! Add file lines for gawk. +$!--------------------------- +$flst_file_loop: +$ read/end=flst_loop_end flst line_in +$ line_in = f$edit(line_in,"compress,trim,uncomment") +$ if line_in .eqs. "" then goto flst_file_loop +$ filename = f$element(0, " ", line_in) +$ destname = filename +$flst_file: +$ if arch_code .eqs. "V" +$ then +$! ! These files not available on VAX. +$ src_dir = f$parse(destname,,,"DIRECTORY") +$ if src_dir .eqs. "[GNV.USR.LIB.GAWK]" then goto flst_file_loop +$ endif +$ srcfile = filename - "gnv." +$ write pdsc " file ""''destname'"" " +$ write pdsc " source ""''srcfile'"" ;" +$ goto flst_file_loop +$! +$flst_loop_end: +$ close flst +$! +$! Add Link alias procedure file (N/A for gawk) +$!----------------------------------------------------- +$ write pdsc " file ""[vms_bin]gawk_alias_setup.com""" +$ write pdsc " source [vms_bin]gawk_alias_setup.com ;" +$! +$! Add [.SYS$STARTUP]gawk_startup file +$!--------------------------------------- +$ write pdsc " file ""[sys$startup]gnv$gawk_startup.com""" +$ write pdsc " source [vms_bin]gnv$gawk_startup.com ;" +$! +$! Add Release notes file. +$!------------------------------ +$ write pdsc - + " file ""[SYSHLP]''filename_base'.release_notes"" release notes ;" +$! +$! Close the product file +$!------------------------ +$ write pdsc "end product;" +$! +$close pdsc +$! +$all_exit: +$ exit diff --git a/vms/build_gawk_pcsi_text.com b/vms/build_gawk_pcsi_text.com new file mode 100644 index 00000000..a1053cf6 --- /dev/null +++ b/vms/build_gawk_pcsi_text.com @@ -0,0 +1,179 @@ +$! File: build_gawk_pcsi_text.com +$! +$! Build the *.pcsi$text file from the four components: +$! 1. Generated =product header section +$! 2. readme. file from the Gawk distribution, modified to fit +$! a pcsi$text file format. +$! 3. copying file from the Gawk distribution, modified to fit +$! a pcsi$text file format. +$! 4. Generated Producer section. +$! +$! Set the name of the release notes from the GNV_PCSI_FILENAME_BASE +$! +$! +$! 02-Jan-2014 J. Malmberg - Gawk version +$! +$!=========================================================================== +$! +$ kit_name = f$trnlnm("GNV_PCSI_KITNAME") +$ if kit_name .eqs. "" +$ then +$ write sys$output "@MAKE_PCSI_GAWK_KIT_NAME.COM has not been run." +$ goto all_exit +$ endif +$ producer = f$trnlnm("GNV_PCSI_PRODUCER") +$ if producer .eqs. "" +$ then +$ write sys$output "@MAKE_PCSI_GAWK_KIT_NAME.COM has not been run." +$ goto all_exit +$ endif +$ producer_full_name = f$trnlnm("GNV_PCSI_PRODUCER_FULL_NAME") +$ if producer_full_name .eqs. "" +$ then +$ write sys$output "@MAKE_PCSI_GAWK_KIT_NAME.COM has not been run." +$ goto all_exit +$ endif +$! +$! +$! Parse the kit name into components. +$!--------------------------------------- +$ producer = f$element(0, "-", kit_name) +$ base = f$element(1, "-", kit_name) +$ product = f$element(2, "-", kit_name) +$ mmversion = f$element(3, "-", kit_name) +$ majorver = f$extract(0, 3, mmversion) +$ minorver = f$extract(3, 2, mmversion) +$ updatepatch = f$element(4, "-", kit_name) +$ if updatepatch .eqs. "-" then updatepatch = "" +$! +$! +$ product_line = "=product ''producer' ''base' ''product'" +$ if updatepatch .eqs. "" +$ then +$ product_name = " ''majorver'.''minorver'" +$ else +$ product_name = " ''majorver'.''minorver'-''updatepatch'" +$ endif +$ product_line = product_line + " ''product_name' full" +$! +$! +$! If this is VAX and the file is on NFS, the names may be mangled. +$!----------------------------------------------------------------- +$ readme_file = "" +$ if f$search("readme.") .nes. "" +$ then +$ readme_file = "readme." +$ else +$ if f$search("$README.") .nes. "" +$ then +$ readme_file = "$README." +$ else +$ write sys$output "Can not find readme file." +$ goto all_exit +$ endif +$ endif +$ copying_file = "" +$ if f$search("copying.") .nes. "" +$ then +$ copying_file = "copying." +$ else +$ if f$search("$COPYING.") .nes. "" +$ then +$ copying_file = "$COPYING." +$ else +$ write sys$output "Can not find copying file." +$ goto all_exit +$ endif +$ endif +$! +$! Create the file as a VMS text file. +$!---------------------------------------- +$ base_file = kit_name +$ create 'base_file'.pcsi$text +$! +$! +$! Start building file. +$!---------------------- +$ open/append ptxt 'base_file'.pcsi$text +$ write ptxt product_line +$! +$! +$! First insert the Readme file. +$! +$ open/read rf 'readme_file' +$! +$ write ptxt "1 'PRODUCT" +$ write ptxt "=prompt ''producter' ''product' for OpenVMS" +$! +$rf_loop: +$ read/end=rf_loop_end rf line_in +$ if line_in .nes. "" +$ then +$! PCSI files use the first character in for their purposes. +$!-------------------------------------------------------------- +$ first_char = f$extract(0, 1, line_in) +$ if first_char .nes. " " then line_in = " " + line_in +$ endif +$ write ptxt line_in +$ goto rf_loop +$rf_loop_end: +$ close rf +$! +$! +$! Now add in the copying file +$!-------------------------------- +$ write ptxt "" +$ write ptxt "1 'NOTICE" +$ write ptxt "" +$! +$ open/read cf 'copying_file' +$! +$cf_loop: +$ read/end=cf_loop_end cf line_in +$ if line_in .nes. "" +$ then +$! PCSI files use the first character in for their purposes. +$!-------------------------------------------------------------- +$ first_char = f$extract(0, 1, line_in) +$ if first_char .nes. " " then line_in = " " + line_in +$ endif +$ write ptxt line_in +$ goto cf_loop +$cf_loop_end: +$ close cf +$! +$! Now we need the rest of the boiler plate. +$!-------------------------------------------- +$ write ptxt "" +$ write ptxt "1 'PRODUCER" +$ write ptxt "=prompt ''producer_full_name'" +$ write ptxt - + "This software product is provided by ''producer_full_name' with no warranty." +$! +$ arch_type = f$getsyi("ARCH_NAME") +$ node_swvers = f$getsyi("node_swvers") +$ vernum = f$extract(1, f$length(node_swvers), node_swvers) +$ majver = f$element(0, ".", vernum) +$ minverdash = f$element(1, ".", vernum) +$ minver = f$element(0, "-", minverdash) +$ dashver = f$element(1, "-", minverdash) +$ if dashver .eqs. "-" then dashver = "" +$ vmstag = majver + minver + dashver +$ code = f$extract(0, 1, arch_type) +$! +$ write ptxt "1 NEED_VMS''vmstag'" +$ write ptxt - + "=prompt OpenVMS ''vernum' or later is not installed on your system." +$ write ptxt "This product requires OpenVMS ''vernum' or later to function." +$ write ptxt "1 SOURCE" +$ write ptxt "=prompt Source modules for ''product'" +$ write ptxt "The Source modules for ''product' will be installed." +$ write ptxt "1 RELEASE_NOTES" +$ write ptxt "=prompt Release notes are available in the [SYSHLP] directory." +$! +$ close ptxt +$! +$! +$! +$all_exit: +$ exit diff --git a/vms/build_gawk_release_notes.com b/vms/build_gawk_release_notes.com new file mode 100644 index 00000000..c088ff8c --- /dev/null +++ b/vms/build_gawk_release_notes.com @@ -0,0 +1,67 @@ +$! File: Build_gawk_release_notes.com +$! +$! Build the release note file from the three components: +$! 1. The gawk_release_note_start.txt +$! 2. readme. file from the Gawk distribution. +$! 3. The gawk_build_steps.txt. +$! +$! Set the name of the release notes from the GNV_PCSI_FILENAME_BASE +$! logical name. +$! +$! +$! 31-Dec-2013 J. Malmberg +$! +$!=========================================================================== +$! +$ base_file = f$trnlnm("GNV_PCSI_FILENAME_BASE") +$ if base_file .eqs. "" +$ then +$ write sys$output "@MAKE_PCSI_GAWK_KIT_NAME.COM has not been run." +$ goto all_exit +$ endif +$! +$ gawk_vms_readme = f$search("sys$disk:[.readme_d]readme.vms") +$ if gawk_vms_readme .eqs. "" +$ then +$ gawk_vms_readme = f$search("sys$disk:[.$README_$D]$README.VMS") +$ endif +$ if gawk_vms_readme .eqs. "" +$ then +$ write sys$output "Can not find gawk README.VMS file." +$ goto all_exit +$ endif +$! +$ gawk_readme = f$search("sys$disk:[]readme.") +$ if gawk_readme .eqs. "" +$ then +$ gawk_readme = f$search("sys$disk:[]$README.") +$ endif +$ if gawk_readme .eqs. "" +$ then +$ write sys$output "Can not find gawk readme file." +$ goto all_exit +$ endif +$! +$ gawk_copying = f$search("sys$disk:[]copying.") +$ if gawk_copying .eqs. "" +$ then +$ gawk_copying = f$search("sys$disk:[]$COPYING.") +$ endif +$ if gawk_copying .eqs. "" +$ then +$ write sys$output "Can not find gawk copying file." +$ goto all_exit +$ endif +$! +$ type/noheader sys$disk:[.vms]gawk_release_note_start.txt,- + 'gawk_readme',- + 'gawk_vms_readme',- + 'gawk_copying', - + sys$disk:[.vms]gawk_build_steps.txt - + /out='base_file'.release_notes +$! +$ purge 'base_file'.release_notes +$ rename 'base_file.release_notes ;1 +$! +$all_exit: +$ exit diff --git a/vms/compare_gawk_source.com b/vms/compare_gawk_source.com new file mode 100644 index 00000000..260ec4eb --- /dev/null +++ b/vms/compare_gawk_source.com @@ -0,0 +1,367 @@ +$! Compare_gawk_source.com +$! +$! This procedure compares the files in two directories and reports the +$! differences. +$! +$! It needs to be customized to the local site directories. +$! +$! This is used by me for these purposes: +$! 1. Compare the original source of a project with an existing +$! VMS port. +$! 2. Compare the checked out repository of a project with the +$! the local working copy to make sure they are in sync. +$! 3. Keep a copy directory up to date. The third is needed by +$! me because VMS Backup can create a saveset of files from a +$! NFS mounted volume. +$! +$! First the files in the original source directory which is assumed to be +$! under source codde control are compared with the copy directory. +$! +$! Then the files are are only in the copy directory are listed. +$! +$! The result will five diagnostics about of files: +$! 1. Files that are not generation 1. +$! 2. Files missing in the copy directory. +$! 3. Files in the copy directory not in the source directory. +$! 4. Files different from the source directory. +$! 5. Files that VMS DIFF can not process. +$! +$! This needs to be run on an ODS-5 volume. +$! +$! If UPDATE is given as a second parameter, files missing or different in the +$! copy directory will be updated. +$! +$! By default: +$! The source directory is source_root:[gawk.reference.gawk], +$! the logical used on my system for the GNV Mecurial repository checkout. +$! If source_root: is not defined, then src_root:[gawk] will be +$! translated to something like DISK:[dir.gawk.reference.gawk] +$! and then DISK:[dir.gawk.vms_source.gawk] will be used. +$! +$! The copy directory is vms_root:[gawk] +$! The UPDATE parameter is ignored. +$! +$! This setting is used to make sure that the working vms directory +$! and the VMS specific repository checkout directory have the same +$! contents if they are different. +$! +$! If P1 is "SRCBCK" then this +$! The source directory tree is: src_root:[gawk] +$! The copy directory is src_root1:[gawk] +$! +$! src_root1:[gawk] is used by me to work around that VMS backup will +$! not use NFS as a source directory so I need to make a copy. +$! +$! This is to make sure that the backup save set for the unmodified +$! source is up to date. +$! +$! If your repository checkout is not on an NFS mounted volume, you do not +$! need to use this option or have the logical name src_root1 defined. +$! +$! If P1 is "VMSBCK" then this changes the two directories: +$! The source directory is vms_root:[gawk] +$! The copy directory is vms_root1:[gawk] +$! +$! vms_root: +$! src_root1:[gawk] is used by me to work around that VMS backup will +$! not use NFS as a source directory so I need to make a copy. +$! +$! This is to make sure that the backup save set for the unmodified +$! source is up to date. +$! +$! If your repository checkout is not on an NFS mounted volume, you do not +$! need to use this option or have the logical name src_root1 defined. +$! +$! 02-Jan-2014 J. Malmberg +$!========================================================================== +$! +$! Update missing/changed files. +$update_file = 0 +$if (p2 .eqs. "UPDATE") +$then +$ update_file = 1 +$endif +$! +$myproc = f$environment("PROCEDURE") +$myprocdir = f$parse(myproc,,,"DIRECTORY") - "[" - "]" - "<" - ">" +$myprocdir = f$edit(myprocdir, "LOWERCASE") +$mydefault = f$environment("DEFAULT") +$mydir = f$parse(mydefault,,,"DIRECTORY") +$mydir = f$edit(mydir, "LOWERCASE") +$odelim = f$extract(0, 1, mydir) +$mydir = mydir - "[" - "]" - "<" - ">" +$mydev = f$parse(mydefault,,,"DEVICE") +$! +$ref = "" +$if P1 .eqs. "" +$then +$ ref_base_dir = myprocdir - ".vms" +$ wrk_base_dir = mydir +$ update_file = 0 +$ resultd = f$parse("src_root:",,,,"NO_CONCEAL") +$ resultd = f$edit(resultd, "LOWERCASE") +$ resultd = resultd - "][" - "><" - ".;" - ".." +$ resultd_len = f$length(resultd) - 1 +$ delim = f$extract(resultd_len, 1, resultd) +$ ref_root_base = mydir + delim +$ if f$locate(".reference.", resultd) .lt. resultd_len +$ then +$ resultd = resultd - ref_root_base - "reference." + "vms_source." +$ else +$ resultd = resultd - ref_root_base - "gnu." + "gnu_vms." +$ endif +$ ref = resultd + ref_base_dir +$ wrk = "VMS_ROOT:" + odelim + wrk_base_dir +$ resultd_len = f$length(resultd) - 1 +$ resultd = f$extract(0, resultd_len, resultd) + delim +$ ref_root_dir = f$parse(resultd,,,"DIRECTORY") +$ ref_root_dir = f$edit(ref_root_dir, "LOWERCASE") +$ ref_root_dir = ref_root_dir - "[" - "]" +$ ref_base_dir = ref_root_dir + "." + ref_base_dir +$endif +$! +$if p1 .eqs. "SRCBCK" +$then +$ ref_base_dir = "gawk" +$ wrk_base_dir = "gawk" +$ ref = "src_root:[" + ref_base_dir +$ wrk = "src_root1:[" + wrk_base_dir +$ if update_file +$ then +$ if f$search("src_root1:[000000]gawk.dir") .eqs. "" +$ then +$ create/dir/prot=o:rwed src_root1:[gawk] +$ endif +$ endif +$endif +$! +$! +$if p1 .eqs. "VMSBCK" +$then +$ ref_base_dir = "gawk" +$ wrk_base_dir = "gawk" +$ ref = "vms_root:[" + ref_base_dir +$ wrk = "vms_root1:[" + wrk_base_dir +$ if update_file +$ then +$ if f$search("vms_root1:[000000]gawk.dir") .eqs. "" +$ then +$ create/dir/prot=o:rwed vms_root1:[gawk] +$ endif +$ endif +$endif +$! +$! +$if ref .eqs. "" +$then +$ write sys$output "Unknown compare type specified!" +$ exit 44 +$endif +$! +$! +$! +$! Future - check the device types involved for the +$! the syntax to check. +$ODS2_SYNTAX = 0 +$NFS_MANGLE = 0 +$PWRK_MANGLE = 0 +$! +$vax = f$getsyi("HW_MODEL") .lt. 1024 +$if vax +$then +$ ODS2_SYNTAX = 1 +$endif +$! +$report_missing = 1 +$! +$if .not. ODS2_SYNTAX +$then +$ set proc/parse=extended +$endif +$! +$loop: +$ ref_spec = f$search("''ref'...]*.*;",1) +$ if ref_spec .eqs. "" then goto loop_end +$! +$ ref_dev = f$parse(ref_spec,,,"DEVICE") +$ ref_dir = f$parse(ref_spec,,,"DIRECTORY") +$ ref_dir = f$edit(ref_dir, "LOWERCASE") +$ ref_name = f$parse(ref_spec,,,"NAME") +$ ref_type = f$parse(ref_spec,,,"TYPE") +$! +$! +$ if f$locate(".CVS]", ref_dir) .lt. f$length(ref_dir) then goto loop +$ if f$locate(".cvs]", ref_dir) .lt. f$length(ref_dir) then goto loop +$ if f$locate(".$cvs]", ref_dir) .lt. f$length(ref_dir) then goto loop +$ if f$locate(".^.git", ref_dir) .lt. f$length(ref_dir) then goto loop +$ if f$locate(".$5ngit", ref_dir) .lt. f$length(ref_dir) then goto loop +$! +$ rel_path = ref_dir - "[" - ref_base_dir +$! rel_path_len = f$length(rel_path) - 1 +$! delim = f$extract(rel_path_len, 1, rel_path) +$! rel_path = rel_path - ".]" - ".>" - "]" - ">" +$! rel_path = rel_path + delim +$! +$ if ODS2_SYNTAX +$ then +$ endif +$! +$ wrk_path = wrk + rel_path +$! +$ ref_name_type = ref_name + ref_type +$! +$ if ref_name_type .eqs. "CVS.DIR" then goto loop +$ if ref_name_type .eqs. "cvs.dir" then goto loop +$ if ref_name_type .eqs. "$CVS.DIR" then goto loop +$ if ref_name_type .eqs. "^.git.DIR" then goto loop +$ if ref_name_type .eqs. "$5ngit.DIR" then goto loop +$ if ref_name_type .eqs. "$5NGIT.DIR" then goto loop +$ if ODS2_SYNTAX +$ then +$! +$ endif +$! +$ wrk_spec = wrk_path + ref_name_type +$! +$! +$ wrk_chk = f$search(wrk_spec, 0) +$ if wrk_chk .eqs. "" +$ then +$ if report_missing +$ then +$ write sys$output "''wrk_spec' is missing" +$ endif +$ if update_file +$ then +$ copy/log 'ref_spec' 'wrk_spec' +$ endif +$ goto loop +$ endif +$! +$ wrk_name = f$parse(wrk_spec,,,"NAME") +$ wrk_type = f$parse(wrk_spec,,,"TYPE") +$ wrk_fname = wrk_name + wrk_type" +$ ref_fname = ref_name + ref_type +$! +$ if ref_fname .nes. wrk_fname +$ then +$ write sys$output "''wrk_spc' wrong name, should be ""''ref_fname'""" +$ endif +$! +$ ref_type = f$edit(ref_type, "UPCASE") +$ if ref_type .eqs. ".DIR" then goto loop +$! +$ if ODS2_SYNTAX +$ then +$ ref_fname = f$edit(ref_fname, "LOWERCASE") +$ endif +$! +$! These files have records to long to diff, and we don't change them anyway. +$ ref_skip = 0 +$ if ref_type .eqs. ".GMO" then ref_skip = 1 +$ if ref_type .eqs. ".PDF" then ref_skip = 1 +$ if ref_type .eqs. ".PNG" then ref_skip = 1 +$ if ref_type .eqs. ".JPG" then ref_skip = 1 +$ if ref_fname .eqs. "inftest.ok" then ref_skip = 1 +$ if ref_fname .eqs. "longsub.in" then ref_skip = 1 +$ if ref_fname .eqs. "longsub.ok" then ref_skip = 1 +$ if ref_fname .eqs. "nasty2.ok" then ref_skip = 1 +$ if ref_fname .eqs. "profile5.awk" then ref_skip = 1 +$ if ref_fname .eqs. "profile5.ok" then ref_skip = 1 +$ if ref_fname .eqs. "po.m4" then ref_skip = 1 +$! +$! +$ if ref_skip .ne. 0 +$ then +$ if report_missing +$ then +$ write sys$output "Skipping diff of ''ref_fname'" +$ endif +$ goto loop +$ endif +$! +$! +$ wrk_ver = f$parse(wrk_chk,,,"VERSION") +$ if wrk_ver .nes. ";1" +$ then +$ write sys$output "Version for ''wrk_spec' is not 1" +$ endif +$ set noon +$ diff/out=nl: 'wrk_spec' 'ref_spec' +$ if $severity .nes. "1" +$ then +$ write sys$output "''wrk_spec' is different from ''ref_spec'" +$ if update_file +$ then +$ delete 'wrk_spec';* +$ copy/log 'ref_spec' 'wrk_spec' +$ endif +$ endif +$ set on +$ +$! +$ goto loop +$loop_end: +$! +$! +$missing_loop: +$! For missing loop, check the latest generation. +$ ref_spec = f$search("''wrk'...]*.*;") +$ if ref_spec .eqs. "" then goto missing_loop_end +$! +$ ref_dev = f$parse(ref_spec,,,"DEVICE") +$ ref_dir = f$parse(ref_spec,,,"DIRECTORY") +$ ref_dir = f$edit(ref_dir, "LOWERCASE") +$ ref_name = f$parse(ref_spec,,,"NAME") +$ ref_type = f$parse(ref_spec,,,"TYPE") +$! +$ rel_path = ref_dir - "[" - wrk_base_dir +$! +$! +$ wrk_path = ref + rel_path +$ wrk_spec = wrk_path + ref_name + ref_type +$ wrk_name = f$parse(wrk_spec,,,"NAME") +$ wrk_type = f$parse(wrk_spec,,,"TYPE") +$! +$ wrk_fname = wrk_name + wrk_type" +$ ref_fname = ref_name + ref_type +$! +$ wrk_skip = 0 +$ ref_utype = f$edit(ref_type,"UPCASE") +$ ref_ufname = f$edit(ref_fname,"UPCASE") +$! +$! +$ if wrk_skip .eq. 0 +$ then +$ wrk_chk = f$search(wrk_spec, 0) +$ if wrk_chk .eqs. "" +$ then +$ if report_missing +$ then +$ write sys$output "''wrk_spec' is missing" +$ endif +$ goto missing_loop +$ endif +$ else +$ goto missing_loop +$ endif +$! +$ if ref_fname .nes. wrk_fname +$ then +$ write sys$output "''wrk_spc' wrong name, should be ""''ref_fname'""" +$ endif +$! +$ if ref_utype .eqs. ".DIR" then goto missing_loop +$! +$ wrk_ver = f$parse(wrk_chk,,,"VERSION") +$ if wrk_ver .nes. ";1" +$ then +$ write sys$output "Version for ''wrk_spec' is not 1" +$ endif +$! +$ goto missing_loop +$! +$! +$missing_loop_end: +$! +$exit diff --git a/vms/config_h.com b/vms/config_h.com index 406e1266..c1d3becf 100644 --- a/vms/config_h.com +++ b/vms/config_h.com @@ -29,19 +29,28 @@ $! $! This procedure may not guess the options correctly for all architectures, $! and is a work in progress. $! -$! Copyright 2011, John Malmberg -$! -$! Permission to use, copy, modify, and/or distribute this software for any -$! purpose with or without fee is hereby granted, provided that the above -$! copyright notice and this permission notice appear in all copies. -$! -$! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -$! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -$! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -$! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -$! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -$! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT -$! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +$! Copyright (C) 2014 the Free Software Foundation, Inc. +$! +$! This file is part of GAWK, the GNU implementation of the +$! AWK Progamming Language. +$! +$! GAWK is free software; you can redistribute it and/or modify +$! it under the terms of the GNU General Public License as published by +$! the Free Software Foundation; either version 3 of the License, or +$! (at your option) any later version. +$! +$! GAWK is distributed in the hope that it will be useful, +$! but WITHOUT ANY WARRANTY; without even the implied warranty of +$! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +$! GNU General Public License for more details. +$! +$! You should have received a copy of the GNU General Public License +$! along with this program; if not, write to the Free Software +$! Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +$! USA +$! +$! Per assignment agreement with FSF, similar procedures may be present +$! in other packages under other licensing agreements and copyrights $! $! 15-Jan-2001 J. Malmberg Original $! 29-Apr-2001 J. Malmberg Also look for config.*in* in a [.include] diff --git a/vms/descrip.mms b/vms/descrip.mms index f53db272..1f24f8f1 100644 --- a/vms/descrip.mms +++ b/vms/descrip.mms @@ -345,6 +345,23 @@ spotless : clean tidy - if f$search("config.h").nes."" then delete config.h;* - if f$search("config_vms.h").nes."" then delete config_vms.h;* - if f$search("gawk.exe").nes."" then delete gawk.exe;* + - if f$search("*.dsf").nes."" then delete *.dsf;* + - if f$search("*.map").nes."" then delete *.map;* + - if f$search("*.pcsi$desc").nes."" then delete *.pcsi$desc;* + - if f$search("*.pcsi$text").nes."" then delete *.pcsi$text;* + - if f$search("gawk*_src.bck").nes."" then delete gawk*_src.bck;* + - if f$search("*.release_notes").nes."" then delete *.release_notes;* + - if f$search("filefuncs.exe").nes."" then delete filefuncs.exe;* + - if f$search("fnmatch.exe").nes."" then delete fnmatch.exe;* + - if f$search("inplace.exe").nes."" then delete inplace.exe;* + - if f$search("ordchr.exe").nes."" then delete ordchr.exe;* + - if f$search("readdir.exe").nes."" then delete readdir.exe;* + - if f$search("revoutput.exe").nes."" then delete revoutput.exe;* + - if f$search("revtwoway.exe").nes."" then delete revtwoway.exe;* + - if f$search("rwarray.exe").nes."" then delete rwarray.exe;* + - if f$search("testext.exe").nes."" then delete testext.exe;* + - if f$search("time.exe").nes."" then delete time.exe;* + - if f$search("gawk_verb.cld").nes."" then delete gawk_verb.cld;* - if f$search("gawk.dvi").nes."" then delete gawk.dvi;* - if f$search("[.doc]texindex.exe").nes."" then \ delete [.doc]texindex.exe;* diff --git a/vms/gawk_alias_setup.com b/vms/gawk_alias_setup.com new file mode 100644 index 00000000..73f70d15 --- /dev/null +++ b/vms/gawk_alias_setup.com @@ -0,0 +1,110 @@ +$! File: gawk_alias_setup.com +$! +$! The PCSI procedure needs a helper script to set up and remove aliases. +$! +$! If p1 starts with "R" then remove instead of install. +$! +$! +$! 02-Jan-2014 J. Malmberg - Gawk Version +$! +$!=========================================================================== +$! +$ mode = "install" +$ code = f$extract(0, 1, p1) +$ if code .eqs. "R" .or. code .eqs. "r" then mode = "remove" +$! +$ arch_type = f$getsyi("ARCH_NAME") +$ arch_code = f$extract(0, 1, arch_type) +$! +$ if arch_code .nes. "V" +$ then +$ set proc/parse=extended +$ endif +$! +$! +$ call do_alias "gawk" "[bin]" +$ call do_alias "gawk" "[bin]" "awk" +$ call do_alias "gawk" "[bin]" "gawk" "[usr.bin]" +$ call do_alias "gawk" "[bin]" "awk" "[usr.bin]" +$ call do_alias "gawk.1" "[usr.share.man.man1]" "awk.1" +$! +$ exit +$!! +$! +$do_alias: subroutine +$ if mode .eqs. "install" +$ then +$ call add_alias "''p1'" "''p2'" "''p3'" "''p4'" +$ else +$ call remove_alias "''p1'" "''p2'" "''p3'" "''p4'" +$ endif +$ exit +$ENDSUBROUTINE ! do_alias +$! +$! +$! P1 is the filename, p2 is the directory prefix, +$! p3 is the alias name if different than p1 +$! p4 is the alias directory if different than p2 +$add_alias: subroutine +$ if p3 .eqs. "" then p3 = p1 +$ if p4 .eqs. "" then p4 = p2 +$ ftype = f$element(1, ".", p1) +$ if ftype .eqs. "." +$ then +$ file = "gnv$gnu:''p2'gnv$''p1'.EXE" +$ alias = "gnv$gnu:''p4'''p3'." +$ else +$ file = "gnv$gnu:''p2'''p1'" +$ alias = "gnv$gnu:''p4'''p3'" +$ endif +$ if f$search(file) .nes. "" +$ then +$ if f$search(alias) .eqs. "" +$ then +$ set file/enter='alias' 'file' +$ endif +$ alias1 = alias + "exe" +$ if (ftype .eqs. ".") .and. (f$search(alias1) .eqs. "") +$ then +$ set file/enter='alias1' 'file' +$ endif +$ endif +$ exit +$ENDSUBROUTINE ! add_alias +$! +$remove_alias: subroutine +$ if p3 .eqs. "" then p3 = p1 +$ if p4 .eqs. "" then p4 = p2 +$ ftype = f$element(1, ".", p1) +$ if ftype .eqs. "." +$ then +$ file = "gnv$gnu:''p2'''p1'.EXE" +$ alias = "gnv$gnu:''p4'''p3'." +$ else +$ file = "gnv$gnu:''p2'''p1'" +$ alias = "gnv$gnu:''p4'''p3'" +$ endif +$ file_fid = "No_file_fid" +$ if f$search(file) .nes. "" +$ then +$ fid = f$file_attributes(file, "FID") +$ if f$search(alias) .nes. "" +$ then +$ afid = f$file_attributes(alias, "FID") +$ if (afid .eqs. fid) +$ then +$ set file/remove 'alias'; +$ endif +$ endif +$ alias1 = alias + "exe" +$ if (ftype .eqs. ".") .and. (f$search(alias1) .nes. "") +$ then +$ afid = f$file_attributes(alias1, "FID") +$ if (afid .eqs. fid) +$ then +$ set file/remove 'alias1'; +$ endif +$ endif +$ endif +$ exit +$ENDSUBROUTINE ! remove_alias diff --git a/vms/gawk_build_steps.txt b/vms/gawk_build_steps.txt new file mode 100644 index 00000000..b3bb281b --- /dev/null +++ b/vms/gawk_build_steps.txt @@ -0,0 +1,220 @@ +From File: gawk_build_steps.txt + +Building GAWK on OpenVMS for use with GNV requires a current HP C compiler +and MMK. + +The HP C 7.x compilers were used for building on Alpha and Itanium. +The Compaq C 6.4 compiler is being used on VAX. + +MMK was obtained from https://github.com/endlesssoftware/mmk + +Several special things were done in this port of Gawk to VMS to make it +easier to keep it up to date with the Unix version. + +Note the GNV$ prefix is registered for the GNV project to prevent name +collisions with other products and packages. This is a VMS convention. + +The files are stored with GNV_ instead of GNV$ most open source source +code maintainers do not want to files with $ in their source repositories. + +The build procedure will copy the files to have the GNV$ names as needed. + +1. The original GNU Gawk source files are in their own directory tree which +is never written to by the build process. This directory is kept up to date +with the current official patches. See below about the how this is done +with logical names. + +2. A file vms_eco_level.h is used to set the ECO of the package. The +vms_eco_level.h needs to be set back to zero if the version or patch level +of the GNU Unix source is changed. This file is currently only used +by the kit building procedure. + +The source kits are provided in backup savesets inside of the PCSI install kit. + +Backup save sets are currently the only distribution medium that I can be +sure is installed on a target VMS system that will correctly unpack files +with extended character sets in them. You may need to adjust the ownership +of the restored files for kits on Alpha/Itanium VMS versions 8.1 and earlier. + +On VAX, the filenames will be as seen on the VAX system, typically with non +ODS-2 characters and case changes prefixed with $ characters. + +[gnv.common_src]gawk_*_original_src.bck is the original source of the +gawk kit as provided by the GNV project. +[gnv.vms_src]gawk-*_vms_src.bck, if present, has the changed files that +are used for building that are not yet in the gawk source kits +distributed by the GNU gawk project. + +These backup savesets should be restored to different directory trees on +an ODS-5 volume(s) which are referenced by concealed rooted logical names, +unless on VAX, where either an NFS or ODS-2 volume can be used. + +SRC_ROOT: is for the source files common to all platforms. This can be a + read only copy of the files from a change control repository. + + In my build environment, the TRUNK_ROOT:[gawk] is the + same directory as src_root:[gawk]. TRUNK_ROOT:[gawk] is a + checkout of the gawk repository used for the build. + +VMS_ROOT: is for the files that were changed from the repository copy of + SRC_ROOT: + + Note, you should create the VMS_ROOT: directory tree even if it is + initially empty. This is where you should put edits if you are + making changes. + + In my build environment, the source_root:[gnu_vms.gawk] is a + directory with the checked out code and vms_root:[gawk] is + a copy with any local modifications. + + The command procedure compare_gawk_source.com will report any + differences in the source_root:[gnu_vms.gawk] directory and the + vms_root:[gawk] directory. If the source_root: logical is not + defined, it will translate the logical name src_root to do the + effective of src_root:[gawk.-.-.gnu_vms.gawk] to find the + VMS specific code CVS checkout based on where the checkout for + the GNU source is expected to be. + +LCL_ROOT: is manually created to have the same base and sub-directories as + SRC_ROOT: and VMS_ROOT: This is for the architecture specific + binaries and other files created during the build. + +The logical name REF_ROOT: is optionally defined to be a logical name that +is a search list for VMS_ROOT:,SRC_ROOT: + +The logical name PRJ_ROOT: is defined to be a logical name that is a search +list for LCL_ROOT:,REF_ROOT: + +The VMS_ROOT and LCL_ROOT directory trees can be created with commands +similar to: + + $ create/dir lcl_root:[gawk]/prot=w:re + $ copy src_root:[gawk...]*.dir - + lcl_root:[gawk...]/prot=(o:rwed,w:re) + $ create/dir vms_root:[gawk]/prot=w:re + $ copy src_root:[gawk...]*.dir - + vms_root:[gawk...]/prot=(o:rwed,w:re) + +One of the ways with to protect the source from being modified is to have +the directories under src_root: owned by a user or resource where the build +username only has read access to it. + +Edit the file gawk_release_note_start.txt or other text files to reflect +any changes. + +Edit the file PCSI_GAWK_FILE_LIST.TXT if there are new files added to the +kit. These files should all be ODS-2 legal filenames and directories. + +Note that if src_root: or vms_root: are NFS mounted disks, the +step of backing up the source files will probably hang or fail. + +You need to copy the source files to VMS mounted disks and create +logical names SRC_ROOT1 and VMS_ROOT1 to work around this to to +reference local disks. Make sure src_root1:[000000] and +vms_root1:[000000] exist and can be written to. + +The command procedure compare_gawk_source can be used to check +those directories and keep them up to date. + + @[.vms]compare_gawk_source.com SRCBCK UPDATE + + This compares the reference GNU source with the backup + staging directory for it and updates with any changes. + + @[.vms]compare_gawk_source.com VMSBCK UPDATE + + This compares the VMS specific source with the backup + staging directory for it and updates with any changes. + + Leave off "UPDATE" to just check without doing any changes. + + If you are not using NFS mounted disks and do not want to have a + separate directory for staging the sources for backup make sure + that src_root1: and vms_root1: do not exist. + +The kits will be built in the directory STAGE_ROOT:[KIT], which must be +writable to the build procedure. + +Define the logical name GNV_PCSI_PRODUCER to indicate who is making the +distribution. + +Define the logical name GNV_PCSI_PRODUCER_FULL_NAME to be your full name +or full name of your company. + +These two GNV_PCSI_* logical names need to be manually defined to indicate +the "branding" to differentiate the source of the kit. + +A limitation of the PCSI kitting procedure is that when selecting files, it +tends to ignore the directory structure and assumes that all files with the +same name are the same file, so every file placed in the kit must have a +unique ODS-2 legal name. Then a procedure needs to be added to the kit to +create an alias link on install and remove the link on remove. + +While newer versions of PCSI can support ODS-5 filenames, not all verions +of PCSI on systems that have ODS-5 filenames do. So as a post install step, +the PCSI kit built by these steps does a rename to the correct case. + +With these search lists set up and the logical names described, Gawk can +be built and kitted by setting your default to PRJ_ROOT:[gawk] +and then issuing the command: + + $ @[.vms]pcsi_product_gawk.com + +First it will build the binaries by using MMK utility. The case of the +parameter may be significant on ODS-5. + + $ mmk/descrip=[.vms]descrip.mms gawk + +Then for Alpha and Itanium, it will build the dynamic extensions. + + $ mmk/descrip=[.vms]descrip.mms extensions + +To clean up after a build to start over, run mmk with the target spotless. + + $ mmk/descrip=[.vms]descrip.mms spotless + +The files are installed into a NEW_GNU directory for staging by running the +procedure stage_gawk_install.com. This copies the binaries and creates +alias links to them. + + $ @[.vms]stage_gawk_install.com remove + $ @[.vms]stage_gawk_install.com + +On the VAX platform, the staged files are needed for building the PCSI +kit, as the VAX source was staged on an NFS volume, which encodes the +filenames that have any upper case or special symbols in them. + +To remove the staged files, the procedure is run again with the parameter +"REMOVE". This makes sure that the alias links are removed. + +The names and contents of the PCSI files requires that the version of +gawk be encoded in a special format. This is done by: + + @[.vms]make_pcsi_gawk_kit_name.com + +The release notes are built from the release note start, readme files and +this file: + + @[.release]build_gawk_release_notes.com + +Then the backup the source kits. + +Building a PCSI kit for an architecture takes the following steps after +making sure that you have a working build environment. + +On VAX, the product command always prompts to the terminal for a confirmation. + +If there is another kit for this same version of gawk, but for a different +base platform or operating system version, the product command will prompt +to the terminal to select which one to compress. + + The following message is normal: + %PCSI-I-CANNOTVAL, cannot validate + EAGLE$DQA0:[stage_root.][kit]GNV-AXPVMS-GAWK-V--1.PCSI;1 + -PCSI-I-NOTSIGNED, product kit is not signed and therefore has + no manifest file + +This will result in both compressed and uncompressed kits for the target +platform. + +Good Luck. diff --git a/vms/gawk_release_note_start.txt b/vms/gawk_release_note_start.txt new file mode 100644 index 00000000..44fceaf5 --- /dev/null +++ b/vms/gawk_release_note_start.txt @@ -0,0 +1,189 @@ +From file: gawk_release_note_start.com + +This is GNU gawk packaged for VMS. + +The original readme files for GAWK for standalone building on VMS are +supplied here along with a procedure for building GAWK for the making +a PCSI kit. + +Note: I am a hobbyist and am not providing any support or any commitment +to supply bug fixes or future releases. This code is as-is with no +warrantees. + +The testing of this port of Gawk involved running some self tests that +were provided with the source. + +This version of gawk supports dynamically loaded extensions on Alpha and +Itanium versions of VMS. The pre-built dynamically loaded extensions +are in gnv$gnu:[usr.lib.gawk]. + +The linker option file used to build a dynamically loaded extension is +located in gnv$gnu:[usr.src.gawk.extension.vms], and the gawkapi.h file +is in gnv$gnu:[usr.include]. + +Special installation notes: + +* Please see https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/ + for the latest information on installing GNV related PCSI kits. + +* We are updating and replacing GNV one kit at a time and transitioning + GNV to be a set of kits that the GNV package will install. During + this transition some extra issues will need to be handled during + installs and upgrades. + +* Due to the way that PCSI identifies packages, if you install a package + from one producer and then want to upgrade it from another producer, + you will probably need to uninstall the previous package first. + + Some of these packages were previously created with different producer + prefixes. We are standardizing on VMSPORTS and GNV as the branding + prefixes. GNV will be for packages that are part of the GNV product + suite, and VMSPORTS will be for most other packages. + + This uninstall can cause warning messages about dependencies. If you + are transitioning to an upwardly compatible package, you can ignore + those warnings. + +* This package should be installed to the same volume as GNV is installed. + + If you uninstall or upgrade GNV or install a GNV from before the + transition is complete, you will need to reinstall all other packages + that install to the same GNV directory tree. + + This is because at least some of the existing GNV installation procedures + have bugs in them were instead of just deleting the files that were + installed, they delete all files in the GNV directory tree. + +* Because this is a transition, this package is replacing files from the + old GNV packages. This is a necessary issue to allow incremental + improvement as we can not replace the GNV package until we get all + the component packages done. + +* The GNV 2.x through at least the 3.0.1 kits make an unusual change + to the disk directory structure where they are installed where + they use the [vms$common.gnv] as a mount point and mount the posix + root on it. This is a bug because it causes many problems and does + not offer any advantages. One of the problems is that it causes + problems with other PCSI installs and uninstalls to that directory. + + This bug can be manually repaired such as has been done on + on encompasserve.org as documented in PORTING_TO_VMS notes conference. + + At this time, we do not have a scripted repair to this bug, and it + may not be possible to fully script a repair because this bug can + cause the POSIX root and [vms$common.gnv] to have different contents + when they should be the same directory, and it will take a manual + inspection to select which files go where. + +* Because of the directory change bug, the gnv$startup.com in the GNV + kit must be run when the system boots up or the [vms$common.gnv] + directory will appear to be empty. + + If a PCSI kit like this one is installed when the GNV startup has not + been run, it will create a new directory tree under [vms$common.gnv] + that will not be visible to the posix root. If you uninstall this + PCSI kit before running the gnv$startup.com procedure then you can + install it after running the gnv$startup.com procedure. If you have + run the gnv$startup.com procedure after the install, then you have + a mess, and you will need to use the GNV umnt to un-mount the + [vms$common.gnv] directory before the uninstall of this kit will + work. + +An analyze/disk/repair step on the installation disk should be done after +installation to collect files left over from incomplete deletions into the +SYSLOST directory. This step should be done on a "quiet" system per HP +recomendations. + +Bugs can be logged at the tracker with https://sourceforge.net/projects/gnv/. +There is no guarantee that bugs will be fixed for a hobbyist build. + +VMS specific port information: + +The logical name GNV$GNU is used to find the simulated posix root and defines +the logical name SYS$POSIX_ROOT in the process table in user mode for child +processes if needed. This is to comply with VMS logical name conventions. +The logical name BIN is also set in the process table in user mode to be +GNV$GNU:[BIN] if it is not already set. + +The following DECC$Feature settings are in in effect for Gawk by default: + +DECC$ACL_ACCESS_CHECK enabled. +DECC$ALLOW_REMOVE_OPEN_FILES enabled. +DECC$ARGV_PARSE_STYLE enabled. +DECC$EFS_CASE_PRESERVE enabled. +DECC$EFS_CHARSET enabled. +DECC$EFS_FILE_TIMESTAMPS enabled. +DECC$ENABLE_GETENV_CACHE enabled. +DECC$EXEC_FILEATTR_INHERITANCE set to 2. +DECC$FILE_PERMISSION_UNIX enabled. +DECC$FILE_SHARING enabled. +DECC$FILE_OWNER_UNIX enabled. +DECC$FILENAME_REPORT_UNIX enabled. +DECC$FILENAME_UNIX_NO_VERSION enabled. +DECC$GLOB_UNIX_STYLE enabled. +DECC$POSIX_SEEK_STREAM_FILE enabled. +DECC$READDIR_DROPDOTNOTYPE enabled. +DECC$RENAME_NO_INHERIT enabled. +DECC$STDIO_CTX_EOL enabled. +DECC$STRTOL_ERANGE enabled. +DECC$UNIX_PATH_BEFORE_LOGNAME enabled. + +While more strict UNIX compatibility feature settings can be applied by users +by setting feature logical names, these settings are all the Bash and most +ported programs need. + +This port of Gawk uses the VMS CRTL to handle the Unix format pathnames +and as such is dependent on them. It is a known issue that directories with +a Unix name "file.dir/" and some symbolic links are not handled correctly. +This is a combination of problems with RMS and CRTL. The RMS portion is +fixed with the VMS84?_RMS-V0300 ECO kit. I am not aware of a CRTL kit that +fixes the issues. + +This kit is designed to be used with the GNV Bash 4.2.45 or later kit. + +Fixes and enhancements: + +* No logical names required for proper Gawk operations other than GNV$GNU + for locating the simulated "/". + +* GNV$GNU is used to find the posix root and locally sets SYS$POSIX_ROOT + for child processes if needed. This is to comply with VMS logical + name conventions. The logical name BIN is also set locally to be + GNV$GNU:[BIN] if it is not already set. + +* config.h now generated at part of the build from a template. + +The supplied GNV$GAWK_STARTUP.COM procedure is provided in +[VMS$COMMON.SYS$STARTUP] can be put in your VMS startup procedure to install +selected images as known because they need privileges. It is recommended +that the GNV$STARTUP.COM procedure be run first, followed by the +GNV$BASH_STARTUP.COM procedure before the GNV$GAWK_STARTUP.COM is +executed. + +The names of the gawk image have been prefixed with GNV$ to prevent +possible naming conflicts with other programs that are on the system. The +GNV$ prefix has been registered with HP for this purpose. + +OpenVMS specific building and kitting instructions are after the standard +bash readme file below. + +The source kits contains files for building Gawk using MMK. +MMK 4.0 was used for this build on Alpha and Itanium Itanium. + +Currently, the focus of the OpenVMS GNV porting team is to address bugs in +the OpenVMS port of GNV components that pose immediate barriers to running +configure and make scripts for Open Source Software packages targeting +OpenVMS environments. + +The GNV development team is involved in an ongoing effort to identify and +document the underlying technical causes for these current limitations and (if +available) workarounds as well as developing code fixes to eliminate them. The +VMS-Ports Source Forge project at https://sourceforge.net/p/vms-ports/tickets/ +currently documents OpenVMS CRTL bugs and limitations with respect to porting +Open Source Software using OpenVMS. The VMS-Ports Source Forge Project also +contains examples of ported packages provided by volunteer contributors as well +as documentation with recommendations on how to setup, modify and use the +OpenVMS GNV environment for the purpose of porting Open Source software +packages to OpenVMS. Browse to https://sourceforge.net/p/vms-ports/wiki/Home/ +for more information. + diff --git a/vms/gawk_verb.com b/vms/gawk_verb.com new file mode 100644 index 00000000..b74c49ed --- /dev/null +++ b/vms/gawk_verb.com @@ -0,0 +1,26 @@ +$! gawk_verb.com - build the gawk_verb.cld from the gawk.cld. +$! +$! The CLD file needed to modify a DCL command table is different +$! from the CLD file needed to build the product by specifying an image. +$! +$! So read in the [.vms]gawk.cld and generate a gawk_verb.cld. +$! +$! 23-Dec-2012 - J. Malmberg +$! +$outfile = "sys$disk:[]gawk_verb.cld" +$infile = "[.vms]gawk.cld" +$open/read cld 'infile' +$create 'outfile' +$open/append cldv 'outfile' +$loop: +$read cld/end=loop_end line_in +$if f$locate("image gawk", line_in) .lt. f$length(line_in) +$then +$ write cldv " image gnv$gnu:[bin]gnv$gawk" +$ goto loop +$endif +$write cldv line_in +$goto loop +$loop_end: +$close cldv +$close cld diff --git a/vms/gawkmisc.vms b/vms/gawkmisc.vms index 749c6036..725cf669 100644 --- a/vms/gawkmisc.vms +++ b/vms/gawkmisc.vms @@ -3,7 +3,8 @@ */ /* - * Copyright (C) 1986, 1988, 1989, 1991-1996, 2003, 2011 the Free Software Foundation, Inc. + * Copyright (C) 1986, 1988, 1989, 1991-1996, 2003, 2011, 2014 + * the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Progamming Language. diff --git a/vms/gnv_gawk_startup.com b/vms/gnv_gawk_startup.com new file mode 100644 index 00000000..e691965e --- /dev/null +++ b/vms/gnv_gawk_startup.com @@ -0,0 +1,75 @@ +$! File: gnv$gawk_Startup.com / gnv_gawk_startup.com +$! +$! Procedure to setup the GAWK images for use by programs from the +$! VMS SYSTARTUP*.COM procedure. +$! +$! 14-Mar-2011 J. Malmberg +$! 04-May-2011 J. Malmberg Use GNV_PCSI_DESTINATION to find the +$! value to assing GNV$GNU per suggestion +$! by Martin Vorlander. +$! 02-Jan-2014 J. Malmberg Gawk Version +$!======================================================================== +$! +$! +$! GNV$GNU if needed. +$ if f$trnlnm("GNV$GNU") .eqs. "" +$ then +$ x = f$trnlnm("GNU","LNM$SYSTEM_TABLE") +$ if x .nes. "" +$ then +$ write sys$output - + "Notice: logical name GNU: was found in the system table instead of GNV$GNU:" +$ write sys$output - + "This is a known bug in the GNV 2.1.3 and earlier kits." +$ define/system/exec/trans=conc GNV$GNU 'x' +$ else +$! +$! File name per VMS standards +$! --------------------------- +$ file1 = "sys$startup:gnv$destination_''f$getsyi("ARCH_NAME")'.com" +$! +$! File name in GNV 2.1.3 +$! ---------------------- +$ file2 = "sys$startup:gnv_destination_''f$getsyi("ARCH_NAME")'.com" +$! +$! File name before GNV 2.1.3 +$! --------------------------- +$ file3 = "sys$startup:gnv_destination''f$getsyi("ARCH_NAME")'.com" +$ arch_file = "" +$ if f$search(file1) .nes. "" +$ then +$ arch_file = file1 +$ else +$ if f$search(file2) .nes. "" +$ then +$ arch_file = file2 +$ else +$ if f$search("file3") .nes. "" then arch_file = file3 +$ endif +$ endif +$ if (arch_file) .nes. "" then @'arch_file' +$! +$! Logical name per VMS standards +$! ------------------------------- +$ destination = f$trnlnm("GNV$PCSI_DESTINATION") +$! +$! Logical name in GNV 2.1.3 +$! -------------------------- +$ if destination .eqs. "" +$ then +$ destination = f$trnlnm("GNV_PCSI_DESTINATION") +$ endif +$ if destination .eqs. "" +$ then +$ !Assume this procedure is on the same volume as the GNV install. +$ my_proc = f$environment("PROCEDURE") +$ my_dev = f$parse(my_proc,,,"DEVICE","NO_CONCEAL") +$ destination = "''my_dev'[vms$common.gnv.]" +$ endif +$ define/system/exec/trans=conc gnv$gnu 'destination' +$ endif +$ endif +$! +$! +$all_exit: +$ exit diff --git a/vms/make_pcsi_gawk_kit_name.com b/vms/make_pcsi_gawk_kit_name.com new file mode 100644 index 00000000..daaa37a4 --- /dev/null +++ b/vms/make_pcsi_gawk_kit_name.com @@ -0,0 +1,189 @@ +$! File: MAKE_PCSI_GAWK_KIT_NAME.COM +$! +$! Calculates the PCSI kit name for use in building an installation kit. +$! PCSI is HP's PolyCenter Software Installation Utility. +$! +$! The results are stored in as logical names so that other procedures +$! can use them. +$! +$! 92-Jan-2014 J. Malmberg Gawk version +$!======================================================================== +$! +$! Save default +$default_dir = f$environment("DEFAULT") +$! +$! Put things back on error. +$on warning then goto all_exit +$! +$! The producer is the name or common abbreviation for the entity that is +$! making the kit. It must be set as a logical name before running this +$! procedure. +$! +$! HP documents the producer as the legal owner of the software, but for +$! open source work, it should document who is creating the package for +$! distribution. +$! +$producer = f$trnlnm("GNV_PCSI_PRODUCER") +$if producer .eqs. "" +$then +$ write sys$output "The logical name GNV_PCSI_PRODUCER needs to be defined." +$ write sys$output "This should be set to the common abbreviation or name of" +$ write sys$output "the entity creating this kit. If you are an individual" +$ write sys$output "then use your initials as long as they do not match" +$ write sys$output "a different well known producer prefix." +$ goto all_exit +$endif +$producer_full_name = f$trnlnm("GNV_PCSI_PRODUCER_FULL_NAME") +$if producer_full_name .eqs. "" +$then +$ write sys$output "The logical name GNV_PCSI_PRODUCER_FULL_NAME needs to" +$ write sys$output "be defined. This should be set to the full name of" +$ write sys$output "the entity creating this kit. If you are an individual" +$ write sys$output "then use your name." +$ write sys$output "EX: DEFINE GNV_PCSI_PRODUCER_FULL_NAME ""First M. Last""" +$ goto all_exit +$endif +$! +$write sys$output "*****" +$write sys$output "***** Producer = ''producer'" +$write sys$output "*****" +$! +$! +$! Base is one of 'VMS', 'AXPVMS', 'I64VMS', 'VAXVMS' and indicates what +$! binaries are in the kit. A kit with just 'VMS' can be installed on all +$! architectures. +$! +$base = "VMS" +$arch_type = f$getsyi("ARCH_NAME") +$code = f$extract(0, 1, arch_type) +$if (code .eqs. "I") then base = "I64VMS" +$if (code .eqs. "V") then base = "VAXVMS" +$if (code .eqs. "A") then base = "AXPVMS" +$! +$! +$product = "gawk" +$! +$! +$! We need to get the version from config.h. It will have a lines like +$! #define PACKAGE_VERSION "4.1.0a" +$! +$! +$open/read/error=version_loop_end verf config.h +$version_loop: +$ read/end=version_loop_end verf line_in +$ if line_in .eqs. "" then goto version_loop +$ if f$locate("#define PACKAGE_VERSION", line_in) .ne. 0 +$ then +$ goto version_loop +$ endif +$ tag = f$element(1, " ", line_in) +$ value = f$element(2, " ", line_in) - """" - """" +$ if tag .eqs. "PACKAGE_VERSION" +$ then +$ distversion = value +$ goto version_loop_end +$ endif +$ goto version_loop +$version_loop_end: +$close verf +$! +$! +$! Optional ECO file. +$ECO_LEVEL = "" +$vms_eco_file = "[.vms]vms_eco_level.h" +$if f$search(vms_eco_file) .nes. "" +$then +$ open/read ef 'vms_eco_file' +$ecolevel_loop: +$ read/end=ecolevel_loop_end ef line_in +$ prefix = f$element(0, " ", line_in) +$ if prefix .nes. "#define" then goto ecolevel_loop +$ key = f$element(1, " ", line_in) +$ value = f$element(2, " ", line_in) - """" - """" +$ if key .eqs. "VMS_ECO_LEVEL" +$ then +$ ECO_LEVEL = value +$ if ECO_LEVEL .eq. 0 +$ then +$ ECO_LEVEL = "" +$ else +$ ECO_LEVEL = "E" + ECO_LEVEL +$ endif +$ goto ecolevel_loop_end +$ endif +$ goto ecolevel_loop +$ecolevel_loop_end: +$ close ef +$endif +$! +$raw_version = distversion +$! +$! +$! This translates to V0114-08 or D0115-01 +$! We can not encode the snapshot date into the version due to the way that +$! the Polycenter Software Installation Utility evaluates the name. +$! +$! version_type = 'V' for a production release, and 'D' for a build from a +$! daily repository snapshot, and a code for a build from a pre-release branch +$majorver = f$element(0, ".", raw_version) +$minorver = f$element(1, ".", raw_version) +$update = f$element(2,".", raw_version) +$if update .eqs. "." then update = "" +$vtype = "V" +$if update .nes. "" +$then +$ update_len = f$length(update) +$ code = f$extract(update_len - 1, 1, update) +$ code = f$edit(code, "UPCASE") +$ if (code .ges. "A") .and. (code .les. "Z") +$ then +$ update = f$extract(0, update_len - 1, update) +$ vtype = code +$ endif +$endif +$if update .eqs. "0" then update = "" +$! +$! +$version_fao = "!2ZB!2ZB" +$mmversion = f$fao(version_fao, 'majorver', 'minorver') +$version = vtype + "''mmversion'" +$if update .nes. "" .or. ECO_LEVEL .nes. "" +$then +$! The presence of an ECO implies an update +$ if update .eqs. "" .and. ECO_LEVEL .nes. "" then update = "0" +$ version = version + "-" + update + ECO_LEVEL +$ fversion = version +$else +$ fversion = version +$ version = version + "-" +$endif +$! +$! Kit type 1 is complete kit, the only type that this procedure will make. +$Kittype = 1 +$! +$! Write out a logical name for the resulting base kit name. +$name = "''producer'-''base'-''product'-''version'-''kittype'" +$define GNV_PCSI_KITNAME "''name'" +$fname = "''product'-''fversion'" +$! +$! No ECO or Patch level +$fname_len = f$length(fname) +$if f$extract(fname_len - 1, 1, fname) .eqs. "-" +$then +$ fname = f$extract(0, fname_len - 1, fname) +$ fname_len = fname_len - 1 +$endif +$if f$extract(fname_len - 1, 1, fname) .eqs. "-" +$then +$ fname = f$extract(0, fname_len - 1, fname) +$ fname_len = fname_len - 1 +$endif +$define GNV_PCSI_FILENAME_BASE 'fname' +$write sys$output "*****" +$write sys$output "***** GNV_PCSI_KITNAME = ''name'." +$write sys$output "***** GNV_PCSI_FILENAME_BASE = ''fname'." +$write sys$output "*****" +$! +$all_exit: +$set def 'default_dir' +$exit '$status' diff --git a/vms/pcsi_gawk_file_list.txt b/vms/pcsi_gawk_file_list.txt new file mode 100644 index 00000000..67d2d324 --- /dev/null +++ b/vms/pcsi_gawk_file_list.txt @@ -0,0 +1,120 @@ +! File: pcsi_gawk_file_list.txt +! +! File list for building a PCSI kit. +! Very simple format so that the parsing logic can be simple. +! links first, directory second, and files third. +! +! link -> file tells procedure to create/remove a link on install/uninstall +! If more than one link, consider using an alias file. +! +! [xxx.yyy]foo.dir is a directory file for the rename phase. +! [xxx.yyy.foo] is a directory file for the create phase. +! Each subdirectory needs to be on its own pair of lines. +! +! [xxx.yyy]file.ext is a file for the rename and add phases. +! +! 14-Mar-2011 J. Malmberg +! 08-Dec-2013 J. Malmberg This list is based on what was found on +! some Linux systems and what can be currently +! built on VMS. +! +!============================================================================ +![gnv.bin]awk. -> [gnv.bin]gnv$gawk.exe +![gnv.bin]awk.exe -> [gnv.bin]gnv$gawk.exe +![gnv.bin]gawk. -> [gnv.bin]gnv$gawk.exe +![gnv.bin]gawk.exe -> [gnv.bin]gnv$gawk.exe +![gnv.usr.bin]awk. -> [gnv.bin]gnv$gawk.exe +![gnv.usr.bin]awk.exe -> [gnv.bin]gnv$gawk.exe +![gnv.usr.bin]gawk. -> [gnv.bin]gnv$gawk.exe +![gnv.usr.bin]gawk.exe -> [gnv.bin]gnv$gawk.exe +![gnv.usr.share.man.man1]awk.1 -> [gnv.usr.share.man.man1]gawk.1 +[gnv] +[000000]gnv.dir +[gnv.bin] +[gnv]bin.dir +[gnv.vms_bin] +[gnv]vms_bin.dir +[gnv.vms_help] +[gnv]vms_help.dir +[gnv.lib] +[gnv]lib.dir +[gnv.usr] +[gnv]usr.dir +[gnv.usr.bin] +[gnv.usr]bin.dir +[gnv.usr.include] +[gnv.usr]include.dir +[gnv.usr.lib] +[gnv.usr]lib.dir +[gnv.usr.lib.gawk] +[gnv.usr.lib]gawk.dir +[gnv.usr.share] +[gnv.usr]share.dir +[gnv.usr.share.awk] +[gnv.usr.share]awk.dir +[gnv.usr.share.doc] +[gnv.usr.share]doc.dir +[gnv.usr.share.doc.gawk] +[gnv.usr.share.doc]gawk.dir +[gnv.usr.share.info] +[gnv.usr.share]info.dir +[gnv.usr.share.man] +[gnv.usr.share]man.dir +[gnv.usr.share.man.man1] +[gnv.usr.share.man]man1.dir +![gnv.usr.share.man.man7] +![gnv.usr.share.man]man7.dir +[gnv.usr]src.dir +[gnv.usr.src] +[gnv.usr.src]gawk.dir +[gnv.usr.src.gawk]extension.dir +[gnv.usr.src.gawk.extension] +[gnv.usr.src.gawk.extension]vms.dir +[gnv.usr.src.gawk.extension.vms] +[gnv.bin]gnv$gawk.exe +[gnv.bin]igawk. +[gnv.vms_bin]remove_old_gawk.com +[gnv.vms_bin]gawk_alias_setup.com +[gnv.vms_bin]gawk_verb.cld +[gnv.vms_help]gawk.hlp +[gnv.usr.include]gawkapi.h +[gnv.usr.lib.gawk]filefuncs.exe +[gnv.usr.lib.gawk]fnmatch.exe +[gnv.usr.lib.gawk]inplace.exe +[gnv.usr.lib.gawk]ordchr.exe +[gnv.usr.lib.gawk]readdir.exe +[gnv.usr.lib.gawk]revoutput.exe +[gnv.usr.lib.gawk]revtwoway.exe +[gnv.usr.lib.gawk]rwarray.exe +[gnv.usr.lib.gawk]time.exe +[gnv.usr.share.awk]assert.awk +[gnv.usr.share.awk]bits2str.awk +[gnv.usr.share.awk]cliff_rand.awk +[gnv.usr.share.awk]ctime.awk +[gnv.usr.share.awk]ftrans.awk +[gnv.usr.share.awk]getopt.awk +[gnv.usr.share.awk]gettime.awk +[gnv.usr.share.awk]join.awk +[gnv.usr.share.awk]libintl.awk +[gnv.usr.share.awk]noassign.awk +[gnv.usr.share.awk]ord.awk +[gnv.usr.share.awk]readable.awk +[gnv.usr.share.awk]readfile.awk +[gnv.usr.share.awk]rewind.awk +[gnv.usr.share.awk]round.awk +[gnv.usr.share.awk]strtonum.awk +[gnv.usr.share.awk]walkarray.awk +[gnv.usr.share.awk]zerofile.awk +[gnv.usr.share.doc.gawk]COPYING. +[gnv.usr.share.doc.gawk]NEWS. +[gnv.usr.share.doc.gawk]POSIX.STD +[gnv.usr.share.doc.gawk]README. +[gnv.usr.share.doc.gawk]README.vms +[gnv.usr.share.doc.gawk]README.multibyte +[gnv.usr.share.doc.gawk]README.tests +[gnv.usr.share.info]gawk.info +[gnv.usr.share.info]gawkinet.info +[gnv.usr.share.man.man1]gawk.1 +[gnv.usr.share.man.man1]igawk.1 +![gnv.usr.share.man.man7] +[gnv.usr.src.gawk.extension.vms]gawk_plugin.opt diff --git a/vms/pcsi_product_gawk.com b/vms/pcsi_product_gawk.com new file mode 100644 index 00000000..b0d9febd --- /dev/null +++ b/vms/pcsi_product_gawk.com @@ -0,0 +1,187 @@ +$! File: pcsi_product_gawk.com +$! +$! This command file packages up the product GAWK into a sequential +$! format kit +$! +$! 13-Dec-2013 J.Malmberg +$! +$!========================================================================= +$! +$! Save default +$ default_dir = f$environment("DEFAULT") +$! +$! Put things back on error. +$ on warning then goto all_exit +$! +$ arch_type = f$getsyi("ARCH_NAME") +$ arch_code = f$extract(0, 1, arch_type) +$! +$ can_build = 1 +$ producer = f$trnlnm("GNV_PCSI_PRODUCER") +$ if producer .eqs. "" +$ then +$ write sys$output "GNV_PCSI_PRODUCER logical name has not been set." +$ can_build = 0 +$ endif +$ producer_full_name = f$trnlnm("GNV_PCSI_PRODUCER_FULL_NAME") +$ if producer_full_name .eqs. "" +$ then +$ write sys$output - + "GNV_PCSI_PRODUCER_FULL_NAME logical name has not been set." +$ can_build = 0 +$ endif +$ stage_root_name = f$trnlnm("STAGE_ROOT") +$ if stage_root_name .eqs. "" +$ then +$ write sys$output "STAGE_ROOT logical name has not been set." +$ can_build = 0 +$ endif +$! +$ if (can_build .eq. 0) +$ then +$ write sys$output "Not able to build a kit." +$ goto all_exit +$ endif +$! +$! +$! Build the gawk image(s) +$!------------------------- +$ if f$search("gawk.exe") .eqs. "" +$ then +$ mmk/descrip=[.vms]descrip.mms gawk +$ endif +$ if arch_code .nes. "V" +$ then +$ if f$search("filefuncs.exe") .eqs. "" +$ then +$ mmk/descrip=[.vms]descrip.mms extensions +$ endif +$ endif +$! +$! Build the gawk_verb.cld +$!------------------------- +$ if f$search("gawk_verb.cld") .eqs. "" +$ then +$ @[.vms]gawk_verb.com +$ endif +$! +$! Stage the images for building the kit +$!-------------------------------------- +$ @[.vms]stage_gawk_install.com remove +$ @[.vms]stage_gawk_install.com +$! +$! +$! +$! Make sure that the kit name is up to date for this build +$!---------------------------------------------------------- +$ @[.vms]make_pcsi_gawk_kit_name.com +$! +$! Make sure that the release note file name is up to date +$!--------------------------------------------------------- +$ @[.vms]build_gawk_release_notes.com +$! +$! +$! Make sure that the source has been backed up. +$!---------------------------------------------- +$ @[.vms]backup_gawk_src.com +$! +$! Regenerate the PCSI description file. +$!-------------------------------------- +$ @[.vms]build_gawk_pcsi_desc.com +$! +$! Regenerate the PCSI Text file. +$!--------------------------------- +$ @[.vms]build_gawk_pcsi_text.com +$! +$! +$! Parse the kit name into components. +$!--------------------------------------- +$ kit_name = f$trnlnm("GNV_PCSI_KITNAME") +$ if kit_name .eqs. "" +$ then +$ write sys$output "@[.vms]make_pcsi_gawk_kit_name.com has not been run." +$ goto all_exit +$ endif +$ producer = f$element(0, "-", kit_name) +$ base = f$element(1, "-", kit_name) +$ product_name = f$element(2, "-", kit_name) +$ mmversion = f$element(3, "-", kit_name) +$ majorver = f$extract(0, 3, mmversion) +$ minorver = f$extract(3, 2, mmversion) +$ updatepatch = f$element(4, "-", kit_name) +$ if updatepatch .eqs. "" then updatepatch = "" +$! +$ version_fao = "!AS.!AS" +$ mmversion = f$fao(version_fao, "''majorver'", "''minorver'") +$ if updatepatch .nes. "" +$ then +$ version = "''mmversion'" + "-" + updatepatch +$ else +$ version = "''mmversion'" +$ endif +$! +$! +$! Move to the base directories +$ current_default = f$environment("DEFAULT") +$ my_dir = f$parse(current_default,,,"DIRECTORY") - "[" - "<" - ">" - "]" +$! +$! +$ source = "''default_dir'" +$ src1 = "new_gnu:[bin]," +$ src2 = "new_gnu:[usr.bin]," +$ src3 = "new_gnu:[vms_bin]," +$ src4 = "new_gnu:[vms_help]," +$ src5 = "new_gnu:[vms_src]," +$ src6 = "new_gnu:[common_src]," +$ src7 = "sys$disk:[''my_dir'],sys$disk:[''my_dir'.vms]," +$ src8 = "new_gnu:[usr.share.awk]," +$ src9 = "new_gnu:[usr.share.man.man1]," +$ src10 = "new_gnu:[usr.share.doc.gawk]," +$ src11 = "new_gnu:[usr.share.info]," +$ src12 = "sys$disk:[''m_dir'.pc.awklib]" +$ gnu_src = src1 + src2 + src3 + src4 + src5 + src6 + src7 + src8 + src9 +$ gnu_src = gnu_src + src10 + src11 + src12 +$! +$! +$ base = "" +$ arch_name = f$edit(f$getsyi("arch_name"),"UPCASE") +$ if arch_name .eqs. "ALPHA" then base = "AXPVMS" +$ if arch_name .eqs. "IA64" then base = "I64VMS" +$ if arch_name .eqs. "VAX" then base = "VAXVMS" +$! +$ if base .eqs. "" then exit 44 +$! +$ pcsi_option = "/option=noconfirm" +$ if arch_code .eqs. "V" +$ then +$ pcsi_option = "" +$ endif +$! +$! +$product package 'product_name' - + /base='base' - + /producer='producer' - + /source='source' - + /destination=STAGE_ROOT:[KIT] - + /material=('gnu_src','source') - + /format=sequential 'pcsi_option' +$! +$! +$! VAX can not do a compressed kit. +$! ZIP -9 "-V" does a better job, so no reason to normally build a compressed +$! kit. +$!---------------------------------- +$if p1 .eqs. "COMPRESSED" +$then +$ if arch_code .nes. "V" +$ then +$ product copy /options=(novalidate, noconfirm) /format=compressed - + 'product_name' - + /source=stage_root:[kit]/dest=stage_root:[kit] - + /version='version'/base='base' +$ endif +$endif +$! +$all_exit: +$ set def 'default_dir' +$ exit diff --git a/vms/remove_old_gawk.com b/vms/remove_old_gawk.com new file mode 100644 index 00000000..ed68fc45 --- /dev/null +++ b/vms/remove_old_gawk.com @@ -0,0 +1,113 @@ +$! File: remove_old_gawk.com +$! +$! This is a procedure to remove the old gawk images that were installed +$! by the GNV kits and replace them with links to the new image. +$! +$! 02-Jan-2014 J. Malmberg Gawk version +$! +$!========================================================================== +$! +$vax = f$getsyi("HW_MODEL") .lt. 1024 +$old_parse = "" +$if .not. VAX +$then +$ old_parse = f$getjpi("", "parse_style_perm") +$ set process/parse=extended +$endif +$! +$old_cutils = "gawk,awk," +$! +$! +$ i = 0 +$cutils_loop: +$ file = f$element(i, ",", old_cutils) +$ if file .eqs. "" then goto cutils_loop_end +$ if file .eqs. "," then goto cutils_loop_end +$ call update_old_image 'file' +$ i = i + 1 +$ goto cutils_loop +$cutils_loop_end: +$! +$! +$if .not. VAX +$then +$ file = "gnv$gnu:[usr.share.man.cat1]awk^.1.gz" +$ if f$search(file) .nes. "" then delete 'file';* +$ file = "gnv$gnu:[usr.share.man.cat1]gawk^.1.gz" +$ if f$search(file) .nes. "" then delete 'file';* +$ file = "gnv$gnu:[usr.share.man.cat1]iawk^.1.gz" +$ if f$search(file) .nes. "" then delete 'file';* +$endif +$! +$! +$if .not. VAX +$then +$ set process/parse='old_parse' +$endif +$! +$all_exit: +$ exit +$! +$! Remove old image or update it if needed. +$!------------------------------------------- +$update_old_image: subroutine +$! +$ file = p1 +$! First get the FID of the new gawk image. +$! Don't remove anything that matches it. +$ new_gawk = f$search("GNV$GNU:[BIN]GNV$''file'.EXE") +$! +$ new_gawk_fid = "No_new_gawk_fid" +$ if new_gawk .nes. "" +$ then +$ new_gawk_fid = f$file_attributes(new_gawk, "FID") +$ endif +$! +$! +$! +$! Now get check the "''file'." and "''file'.exe" +$! May be links or copies. +$! Ok to delete and replace. +$! +$! +$ old_gawk_fid = "No_old_gawk_fid" +$ old_gawk = f$search("gnv$gnu:[bin]''file'.") +$ old_gawk_exe_fid = "No_old_gawk_fid" +$ old_gawk_exe = f$search("gnv$gnu:[bin]''file'.exe") +$ if old_gawk_exe .nes. "" +$ then +$ old_gawk_exe_fid = f$file_attributes(old_gawk_exe, "FID") +$ endif +$! +$ if old_gawk .nes. "" +$ then +$ fid = f$file_attributes(old_gawk, "FID") +$ if fid .nes. new_gawk_fid +$ then +$ if fid .eqs. old_gawk_exe_fid +$ then +$ set file/remove 'old_gawk' +$ else +$ delete 'old_gawk' +$ endif +$ if new_gawk .nes. "" +$ then +$ set file/enter='old_gawk' 'new_gawk' +$ endif +$ endif +$ endif +$! +$ if old_gawk_exe .nes. "" +$ then +$ if old_gawk_fid .nes. new_gawk_fid +$ then +$ delete 'old_gawk_exe' +$ if new_gawk .nes. "" +$ then +$ set file/enter='old_gawk_exe' 'new_gawk' +$ endif +$ endif +$ endif +$! +$ exit +$ENDSUBROUTINE ! Update old image diff --git a/vms/stage_gawk_install.com b/vms/stage_gawk_install.com new file mode 100644 index 00000000..22daf7f5 --- /dev/null +++ b/vms/stage_gawk_install.com @@ -0,0 +1,300 @@ +$! File: stage_gawk_install.com +$! +$! Stages the build products to new_gnu:[...] for testing and for building +$! a kit. +$! +$! If p1 starts with "R" then remove instead of install. +$! +$! The file PCSI_GAWK_FILE_LIST.TXT is read in to get the files other +$! than the release notes file and the source backup file. +$! +$! The PCSI system can really only handle ODS-2 format filenames and +$! assumes that there is only one source directory. It also assumes that +$! all destination files with the same name come from the same source file. +$! +$! +$! 29-Sep-2013 J. Malmberg +$! +$!=========================================================================== +$! +$ arch_type = f$getsyi("ARCH_NAME") +$ arch_code = f$extract(0, 1, arch_type) +$! +$ mode = "install" +$ code = f$extract(0, 1, p1) +$ if code .eqs. "R" .or. code .eqs. "r" then mode = "remove" +$! +$! First create the directories +$!-------------------------------- +$ if mode .eqs. "install" +$ then +$ create/dir new_gnu:[bin]/prot=o:rwed +$ create/dir new_gnu:[vms_bin]/prot=o:rwed +$ create/dir new_gnu:[vms_help]/prot=o:rwed +$ create/dir new_gnu:[lib]/prot=o:rwed +$ create/dir new_gnu:[usr.bin]/prot=o:rwed +$ create/dir new_gnu:[usr.include]/prot=o:rwed +$ create/dir new_gnu:[usr.lib.gawk]/prot=o:rwed +$ create/dir new_gnu:[usr.share.awk]/prot=o:rwed +$ create/dir new_gnu:[usr.share.doc.gawk]/prot=o:rwed +$ create/dir new_gnu:[usr.share.info]/prot=o:rwed +$ create/dir new_gnu:[usr.src.gawk.extension.vms]/prot=o:rwed +$ create/dir new_gnu:[usr.share.doc.man.man1]/prot=o:rwed +$ endif +$! +$ if mode .eqs. "install" +$ then +$ copy [.vms]gnv_gawk_startup.com - + new_gnu:[vms_bin]gnv$gawk_startup.com +$ else +$ file = "new_gnu:[vms_bin]gnv$gawk_startup.com" +$ if f$search(file) .nes. "" then delete 'file';* +$ endif +$! +$! +$! Read through the file list to set up aliases and rename commands. +$!--------------------------------------------------------------------- +$ open/read flst [.vms]pcsi_gawk_file_list.txt +$! +$inst_alias_loop: +$ ! Skip the aliases +$ read/end=inst_file_loop_end flst line_in +$ line_in = f$edit(line_in,"compress,trim,uncomment") +$ if line_in .eqs. "" then goto inst_alias_loop +$ pathname = f$element(0, " ", line_in) +$ linkflag = f$element(1, " ", line_in) +$ if linkflag .nes. "->" then goto inst_alias_done +$ goto inst_alias_loop +$! +$inst_file_loop: +$! +$ read/end=inst_file_loop_end flst line_in +$ line_in = f$edit(line_in,"compress,trim,uncomment") +$ if line_in .eqs. "" then goto inst_file_loop +$! +$inst_alias_done: +$! +$! +$! Skip the directories as we did them above. +$! Just process the files. +$ tdir = f$parse(line_in,,,"DIRECTORY") +$ tdir_len = f$length(tdir) +$ tname = f$parse(line_in,,,"NAME") +$ lctname = f$edit(tname, "LOWERCASE") +$ ttype = f$parse(line_in,,,"TYPE") +$ if arch_code .eqs. "V" +$ then +$ tname = lctname +$ ttype = f$edit(ttype, "LOWERCASE") +$ tdir = f$edit(tdir, "LOWERCASE") +$ endif +$ if tname .eqs. "" then goto inst_file_loop +$ if ttype .eqs. ".dir" then goto inst_file_loop +$! +$! if p1 starts with "R" then remove instead of install. +$! +$! If gnv$xxx.exe, then: +$! Source is []gnv$gawk.exe +$! Destination1 is new_gnu:[bin]gnv$gawk.exe +$! Destination2 is new_gnu:[bin]xxx. (alias) +$! Destination2 is new_gnu:[bin]xxx.exe (alias) +$! We put all in new_gnu:[bin] instead of some in [usr.bin] because +$! older GNV kits incorrectly put some images in [bin] and [bin] +$! comes first in the search list. +$ if f$locate("gnv$", tname) .eq. 0 +$ then +$ myfile_len = f$length(tname) +$ myfile = f$extract(4, myfile_len, tname) +$ source = "[]''myfile'''ttype'" +$ dest1 = "new_gnu:[bin]''tname'''ttype'" +$ dest2 = "new_gnu:[bin]''myfile'." +$ dest3 = "new_gnu:[bin]''myfile'.exe" +$ if mode .eqs. "install" +$ then +$ if f$search(dest1) .eqs. "" then copy 'source' 'dest1' +$ if f$search(dest2) .eqs. "" then set file/enter='dest2' 'dest1' +$ if f$search(dest3) .eqs. "" then set file/enter='dest3' 'dest1' +$ else +$ if f$search(dest2) .nes. "" then set file/remove 'dest2';* +$ if f$search(dest3) .nes. "" then set file/remove 'dest3';* +$ if f$search(dest1) .nes. "" then delete 'dest1';* +$ endif +$ goto inst_file_loop +$ endif +$! +$! If lib.gawk] then +$! source is sys$disk:[] +$! dest is new_gnu:[usr.lib.gawk] +$ if f$locate("lib.gawk]", tdir) .lt. tdir_len +$ then +$! ! Not yet available on VAX/VMS +$ if arch_code .eqs. "V" then goto inst_file_loop +$! +$ source = "[]''tname'''ttype'" +$ dest = "new_gnu:[usr.lib.gawk]''tname'''ttype'" +$ if mode .eqs. "install" +$ then +$ if f$search(dest) .eqs. "" then copy 'source' 'dest' +$ else +$ if f$search(dest) .nes. "" then delete 'dest';* +$ endif +$ goto inst_file_loop +$ endif +$! +$! If .vms_bin] then +$! source is sys$disk:[] +$! dest is [vms_bin] +$ if (f$locate("vms_bin]", tdir) .lt. tdir_len) +$ then +$ if (ttype .eqs. ".cld") +$ then +$ source = "sys$disk:[]''tname'''ttype'" +$ else +$ source = "sys$disk:[.vms]''tname'''ttype'" +$ endif +$ dest = "new_gnu:[vms_bin]''tname'''ttype'" +$ if mode .eqs. "install" +$ then +$ if f$search(dest) .eqs. "" then copy 'source' 'dest' +$ else +$ if f$search(dest) .nes. "" then delete 'dest';* +$ endif +$ goto inst_file_loop +$ endif +$! +$! If .vms_hlp] then +$! source is sys$disk:[.vms] +$! dest is [vms_help] +$ if (f$locate("vms_help]", tdir) .lt. tdir_len) .and. (ttype .eqs. ".hlp") +$ then +$ source = "sys$disk:[.vms]''tname'''ttype'" +$ dest = "new_gnu:[vms_help]''tname'''ttype'" +$ if mode .eqs. "install" +$ then +$ if f$search(dest) .eqs. "" then copy 'source' 'dest' +$ else +$ if f$search(dest) .nes. "" then delete 'dest';* +$ endif +$ goto inst_file_loop +$ endif +$! +$! If doc.gawk] then +$! source is sys$disk:[] or [.readme_d] +$! dest is [usr.share.doc.gawk] +$ if f$locate(".doc.gawk]", tdir) .lt. tdir_len +$ then +$ if lctname .eqs. "readme" .and. ttype .nes. "." +$ then +$ source = "sys$disk:[.README_D]''tname'''ttype'" +$ if f$search(source) .eqs. "" +$ then +$! ! This may be an NFS mangled name on VAX. +$ stype = ttype - "." +$ if stype .nes. "vms" then stype = "$" + stype +$ source = "sys$disk:[.$README_$D]$README.''stype'" +$ endif +$ else +$ source = "sys$disk:[]''tname'''ttype'" +$ if f$search(source) .eqs. "" +$ then +$ source = "sys$disk:[]$''tname'''ttype'" +$ endif +$ endif +$ dest = "new_gnu:[usr.share.doc.gawk]''tname'''ttype'" +$ if mode .eqs. "install" +$ then +$ if f$search(dest) .eqs. "" then copy 'source' 'dest' +$ else +$ if f$search(dest) .nes. "" then delete 'dest';* +$ endif +$ goto inst_file_loop +$ endif +$! +$! If .awk] then +$! source is sys$disk:[.awklib.eg.lib] +$! dest is new_gnu:[usr.share.awk] +$ if f$locate(".awk]", tdir) .lt. tdir_len +$ then +$ source = "[.awklib.eg.lib]''tname'''ttype'" +$ dest = "new_gnu:[usr.share.awk]''tname'''ttype'" +$ if mode .eqs. "install" +$ then +$ if f$search(dest) .eqs. "" then copy 'source' 'dest' +$ else +$ if f$search(dest) .nes. "" then delete 'dest';* +$ endif +$ goto inst_file_loop +$ endif +$! +$! If *.info then +$! source is [.doc]gawk.info +$! dest is [.usr.share.info] +$ if ttype .eqs. ".info" +$ then +$ source = "[.doc]''tname'''ttype'" +$ dest = "new_gnu:[usr.share.info]''tname'''ttype'" +$ if mode .eqs. "install" +$ then +$ if f$search(dest) .eqs. "" then copy 'source' 'dest' +$ else +$ if f$search(dest) .nes. "" then delete 'dest';* +$ endif +$ goto inst_file_loop +$ endif +$! +$! If *.h then +$! source is []*.h +$! dest is [.usr.include] +$ if ttype .eqs. ".h" +$ then +$ source = "[]''tname'''ttype'" +$ dest = "new_gnu:[usr.include]''tname'''ttype'" +$ if mode .eqs. "install" +$ then +$ if f$search(dest) .eqs. "" then copy 'source' 'dest' +$ else +$ if f$search(dest) .nes. "" then delete 'dest';* +$ endif +$ goto inst_file_loop +$ endif +$! +$! If *.opt then +$! source is [.vms]gawk_plugin.opt +$! dest is [.usr.src.gawk.extension.vms] +$ if ttype .eqs. ".opt" +$ then +$ source = "[.vms]''tname'''ttype'" +$ dest = "new_gnu:[usr.src.gawk.extension.vms]''tname'''ttype'" +$ if mode .eqs. "install" +$ then +$ if f$search(dest) .eqs. "" then copy 'source' 'dest' +$ else +$ if f$search(dest) .nes. "" then delete 'dest';* +$ endif +$ goto inst_file_loop +$ endif +$! +$! If xxx.1 then +$! source is [.doc]xxx.1 +$! dest is [usr.share.man.man1] +$ if ttype .eqs. ".1" +$ then +$ source = "[.doc]''tname'''ttype'" +$ dest = "new_gnu:[usr.share.man.man1]''tname'''ttype'" +$ if mode .eqs. "install" +$ then +$ if f$search(dest) .eqs. "" then copy 'source' 'dest' +$ else +$ if f$search(dest) .nes. "" then delete 'dest';* +$ endif +$ goto inst_file_loop +$ endif +$! +$ goto inst_file_loop +$! +$inst_file_loop_end: +$! +$close flst +$! +$all_exit: +$ exit diff --git a/vms/vms_args.c b/vms/vms_args.c index 9788275d..12165131 100644 --- a/vms/vms_args.c +++ b/vms/vms_args.c @@ -1,7 +1,7 @@ /* vms_args.c -- command line parsing, to emulate shell i/o redirection. [ Escape sequence parsing now suppressed. ] - Copyright (C) 1991-1996, 1997, 2011 the Free Software Foundation, Inc. + Copyright (C) 1991-1996, 1997, 2011, 2014 the 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/vms/vms_cli.c b/vms/vms_cli.c index aa093441..08e2d142 100644 --- a/vms/vms_cli.c +++ b/vms/vms_cli.c @@ -1,6 +1,6 @@ /* vms_cli.c -- interface to CLI$xxx routines for fetching command line components - Copyright (C) 1991-1993, 2003, 2011 the Free Software Foundation, Inc. + Copyright (C) 1991-1993, 2003, 2011, 2014 the 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/vms/vms_fwrite.c b/vms/vms_fwrite.c index 435fead2..f29ec832 100644 --- a/vms/vms_fwrite.c +++ b/vms/vms_fwrite.c @@ -1,6 +1,6 @@ /* vms_fwrite.c - augmentation for the fwrite() function. - Copyright (C) 1991-1996, 2010, 2011 the Free Software Foundation, Inc. + Copyright (C) 1991-1996, 2010, 2011, 2014 the 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/vms/vms_gawk.c b/vms/vms_gawk.c index fce0fa85..4080e1db 100644 --- a/vms/vms_gawk.c +++ b/vms/vms_gawk.c @@ -1,6 +1,7 @@ /* vms_gawk.c -- parse GAWK command line using DCL syntax - Copyright (C) 1991-1993, 1996, 2003, 2005, 2011 the Free Software Foundation, Inc. + Copyright (C) 1991-1993, 1996, 2003, 2005, 2011, 2014 + the 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/vms/vms_misc.c b/vms/vms_misc.c index ed479539..82c2f8a8 100644 --- a/vms/vms_misc.c +++ b/vms/vms_misc.c @@ -1,6 +1,6 @@ /* vms_misc.c -- sustitute code for missing/different run-time library routines. - Copyright (C) 1991-1993, 1996-1997, 2001, 2003, 2009, 2010, 2011 + Copyright (C) 1991-1993, 1996-1997, 2001, 2003, 2009, 2010, 2011, 2014 the Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify diff --git a/vms/vms_popen.c b/vms/vms_popen.c index d9568119..23482df1 100644 --- a/vms/vms_popen.c +++ b/vms/vms_popen.c @@ -1,6 +1,7 @@ /* [.vms]vms_popen.c -- substitute routines for missing pipe calls. - Copyright (C) 1991-1993, 1996, 2010, 2011 the Free Software Foundation, Inc. + Copyright (C) 1991-1993, 1996, 2010, 2011, 2014 + the 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/vms/vmstest.com b/vms/vmstest.com index f5c815bc..6d46c4d7 100644 --- a/vms/vmstest.com +++ b/vms/vmstest.com @@ -949,7 +949,12 @@ $ gawk -f nasty.awk >_nasty.tmp $ call fixup_LRL nasty.ok $ call fixup_LRL _nasty.tmp "purge" $ cmp nasty.ok sys$disk:[]_nasty.tmp -$ if $status then rm _nasty.tmp; +$ if $status +$ then +$ rm _nasty.tmp; +$ file = "lcl_root:[]nasty.ok" +$ if f$search(file) .nes. "" then rm 'file';* +$ endif $ set On $ return $ @@ -959,7 +964,12 @@ $ gawk -f nasty2.awk >_nasty2.tmp $ call fixup_LRL nasty2.ok $ call fixup_LRL _nasty2.tmp "purge" $ cmp nasty2.ok sys$disk:[]_nasty2.tmp -$ if $status then rm _nasty2.tmp; +$ if $status +$ then +$ rm _nasty2.tmp; +$ file = "lcl_root:[]nasty2.ok" +$ if f$search(file) .nes. "" then rm 'file';* +$ endif $ set On $ return $ @@ -981,7 +991,6 @@ $ set noOn $ gawk -f 'test'.awk >_'test'.tmp 2>&1 $ if .not. $status then call exit_code '$status' _'test'.tmp $ set On -$ diff 'test'.ok sys$disk:[]_'test'.tmp/out='test'.diff $ cmp 'test'.ok sys$disk:[]_'test'.tmp $ if $status then rm _'test'.tmp; $ return @@ -1770,7 +1779,7 @@ World! $ endif $ gawk /Commands="BEGIN { print ""World!"" }" _NL: /Output=_vms_cmd.tmp $ cmp vms_cmd.ok sys$disk:[]_vms_cmd.tmp -$ if $status then rm _vms_cmd.tmp; +$ if $status then rm _vms_cmd.tmp;,vms_cmd.ok;* $ return $ $vms_io1: echo "vms_io1" @@ -1783,7 +1792,7 @@ $ gawk -f - >_vms_io1.tmp # prior to 3.0.4, gawk crashed doing any redirection after closing stdin BEGIN { print "Hello" >"/dev/stdout" } $ cmp vms_io1.ok sys$disk:[]_vms_io1.tmp -$ if $status then rm _vms_io1.tmp; +$ if $status then rm _vms_io1.tmp;,vms_io1.ok;* $ return $ $vms_io2: echo "vms_io2" @@ -1811,7 +1820,7 @@ $ set On $ cmp _NL: sys$disk:[]_vms_io2.tmp $ if $status then rm _vms_io2.tmp; $ cmp vms_io2.ok sys$disk:[]_vms_io2.vfc -$ if $status then rm _vms_io2.vfc;* +$ if $status then rm _vms_io2.vfc;*,vms_io2.ok;* $ return $! $! @@ -1859,7 +1868,7 @@ $ if .not. $status then call exit_code '$status' _'test'.tmp $ set On $ cmp 'test'.ok sys$disk:[]_'test'.tmp $ if $status then rm _'test'.tmp; -$ if f$search(filefunc_file) .nes. "" then rm 'filefunc_file'; +$ if f$search(filefunc_file) .nes. "" then rm 'filefunc_file';* $ return $! $rwarray: @@ -1877,7 +1886,7 @@ $ write tout "old and new are equal - GOOD" $ close tout $ endif $ cmp 'test'.ok sys$disk:[]_'test'.tmp -$ if $status then rm _'test'.tmp;,orig.out;,new.out; +$ if $status then rm _'test'.tmp;,orig.bin;,orig.out;,new.out; $ return $! $readdir: @@ -1890,6 +1899,8 @@ $ if .not. $status $ then $ call exit_code '$status' _'test'.tmp $ write sys$output _'test'.tmp +$ else +$ rm _'test'.tmp;*,_'test'.;* $ endif $ set On $ return -- cgit v1.2.3 From 4ce4e30a2fa25d458cf0c8569ce82a0afe03c8be Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 7 Jan 2014 20:43:21 +0200 Subject: Move a function around in command.y. --- ChangeLog | 5 +++++ command.c | 6 +++--- command.y | 6 +++--- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index e6b3ea63..b763a7ad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-01-07 Arnold D. Robbins + + * command.y (next_word): Move into ifdef for HAVE_LIBREADLINE, + since it's only used by that code. + 2014-01-03 Arnold D. Robbins * config.guess, config.rpath, config.sub, depcomp, diff --git a/command.c b/command.c index d170e4c1..91a8335e 100644 --- a/command.c +++ b/command.c @@ -99,10 +99,10 @@ static bool in_eval = false; static const char start_EVAL[] = "function @eval(){"; static const char end_EVAL[] = "}"; static CMDARG *append_statement(CMDARG *stmt_list, char *stmt); -static char *next_word(char *p, int len, char **endp); static NODE *concat_args(CMDARG *a, int count); #ifdef HAVE_LIBREADLINE +static char *next_word(char *p, int len, char **endp); static void history_expand_line(char **line); static char *command_generator(const char *text, int state); static char *srcfile_generator(const char *text, int state); @@ -3395,6 +3395,8 @@ do_help(CMDARG *arg, int cmd) } +#ifdef HAVE_LIBREADLINE + /* next_word --- find the next word in a line to complete * (word seperation characters are space and tab). */ @@ -3421,8 +3423,6 @@ next_word(char *p, int len, char **endp) return p; } -#ifdef HAVE_LIBREADLINE - /* command_completion --- attempt to complete based on the word number in line; * try to complete on command names if this is the first word; for the next * word(s), the type of completion depends on the command name (first word). diff --git a/command.y b/command.y index f6c79812..acf4a602 100644 --- a/command.y +++ b/command.y @@ -51,10 +51,10 @@ static bool in_eval = false; static const char start_EVAL[] = "function @eval(){"; static const char end_EVAL[] = "}"; static CMDARG *append_statement(CMDARG *stmt_list, char *stmt); -static char *next_word(char *p, int len, char **endp); static NODE *concat_args(CMDARG *a, int count); #ifdef HAVE_LIBREADLINE +static char *next_word(char *p, int len, char **endp); static void history_expand_line(char **line); static char *command_generator(const char *text, int state); static char *srcfile_generator(const char *text, int state); @@ -1459,6 +1459,8 @@ do_help(CMDARG *arg, int cmd) } +#ifdef HAVE_LIBREADLINE + /* next_word --- find the next word in a line to complete * (word seperation characters are space and tab). */ @@ -1485,8 +1487,6 @@ next_word(char *p, int len, char **endp) return p; } -#ifdef HAVE_LIBREADLINE - /* command_completion --- attempt to complete based on the word number in line; * try to complete on command names if this is the first word; for the next * word(s), the type of completion depends on the command name (first word). -- cgit v1.2.3 From 56213f42462dc91f4de5a509095dd8bfc4aeef84 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 7 Jan 2014 21:01:10 +0200 Subject: Make old extensions compile and work under Linux. --- ChangeLog | 1 + ext.c | 4 ++-- old-extension/ChangeLog | 7 +++++++ old-extension/dbarray.awk | 2 +- old-extension/record.awk | 4 ++-- old-extension/spec_array.c | 2 +- old-extension/testsparr.awk | 2 +- 7 files changed, 15 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index b763a7ad..d0e67168 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,7 @@ * command.y (next_word): Move into ifdef for HAVE_LIBREADLINE, since it's only used by that code. + * ext.c (load_old_ext): Minor improvements. 2014-01-03 Arnold D. Robbins diff --git a/ext.c b/ext.c index 9e17761a..60765e07 100644 --- a/ext.c +++ b/ext.c @@ -174,9 +174,9 @@ load_old_ext(SRCFILE *s, const char *init_func, const char *fini_func, NODE *obj fatal(_("`extension' is a gawk extension")); if (lib_name == NULL) - fatal(_("load_ext: received NULL lib_name")); + fatal(_("extension: received NULL lib_name")); - if ((dl = dlopen(s->fullpath, flags)) == NULL) + if ((dl = dlopen(lib_name, flags)) == NULL) fatal(_("extension: cannot open library `%s' (%s)"), lib_name, dlerror()); diff --git a/old-extension/ChangeLog b/old-extension/ChangeLog index a25295a6..55c8d31d 100644 --- a/old-extension/ChangeLog +++ b/old-extension/ChangeLog @@ -1,3 +1,10 @@ +2014-01-07 Arnold D. Robbins + + * dbarray.awk: Use full name for lib to load in extenstion() call. + * record.awk: Ditto. + * testsparr.awk: Ditto. + * spec_array.c [SUPER]: Fix so that it will compile. + 2013-01-06 Arnold D. Robbins * bindarr.c, dbarray.awk, fileop.c, record.awk, sparr.c, diff --git a/old-extension/dbarray.awk b/old-extension/dbarray.awk index e0a3c093..1e31f58f 100644 --- a/old-extension/dbarray.awk +++ b/old-extension/dbarray.awk @@ -3,7 +3,7 @@ # @load "bindarr" BEGIN { - extension("bindarr") + extension("./bindarr.so") } function _db_count(symbol, sq, diff --git a/old-extension/record.awk b/old-extension/record.awk index 18a3ce48..ff89110d 100644 --- a/old-extension/record.awk +++ b/old-extension/record.awk @@ -30,8 +30,8 @@ # BEGIN { - extension("fileop.so") - extension("bindarr.so") + extension("./fileop.so") + extension("./bindarr.so") } # _record_count --- return the number of records in file diff --git a/old-extension/spec_array.c b/old-extension/spec_array.c index 78b24018..248783bb 100644 --- a/old-extension/spec_array.c +++ b/old-extension/spec_array.c @@ -40,7 +40,7 @@ typedef struct spec_array { * the base array is str_array. */ -#define SUPER(F) (*str_array_func[AFUNC(F)]) +#define SUPER(F) (*str_array_func[F ## _ind]) /* diff --git a/old-extension/testsparr.awk b/old-extension/testsparr.awk index 648a21a2..a9e3119d 100644 --- a/old-extension/testsparr.awk +++ b/old-extension/testsparr.awk @@ -1,6 +1,6 @@ # ../gawk -lsparr -f testsparr.awk BEGIN { - extension("sparr") + extension("./sparr.so") print SYS["time"] SYS["readline"] = "sparr.c"; printf("File %s has %d lines\n", SYS["readline"], length(READLINE)) -- cgit v1.2.3 From 664868f72b741ba448398d609e18a4cbb1ca20be Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 10 Jan 2014 12:28:09 +0200 Subject: Update some copyright years. --- README | 2 +- io.c | 2 +- old-extension/spec_array.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README b/README index 56020870..6d87806b 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ - Copyright (C) 2005, 2006, 2007, 2009, 2010, 2011, 2012, 2013 + Copyright (C) 2005, 2006, 2007, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, diff --git a/io.c b/io.c index ac1855ba..3e527da0 100644 --- a/io.c +++ b/io.c @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 1986, 1988, 1989, 1991-2013 the Free Software Foundation, Inc. + * Copyright (C) 1986, 1988, 1989, 1991-2014 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. diff --git a/old-extension/spec_array.c b/old-extension/spec_array.c index 248783bb..34d15fc5 100644 --- a/old-extension/spec_array.c +++ b/old-extension/spec_array.c @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 2012 the Free Software Foundation, Inc. + * Copyright (C) 2012, 2014 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. -- cgit v1.2.3 From 6c09c80378028858d439158d923f94a72d30efc6 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 12 Jan 2014 20:22:55 +0200 Subject: Minor improvements in a few files. --- ChangeLog | 12 ++++++++++++ awkgram.c | 21 +++++++-------------- awkgram.y | 23 ++++++++--------------- bootstrap.sh | 3 +-- command.y | 2 +- ext.c | 15 ++++++++------- 6 files changed, 37 insertions(+), 39 deletions(-) diff --git a/ChangeLog b/ChangeLog index 04e7ff03..eb22fc0f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2014-01-12 Arnold D. Robbins + + * awkgram.y: Update copyright year. + (func_use): Simplify code. + * command.y: Update copyright year. + * ext.c: Update copyright year. + (make_builtin): Small simplification. + (make_old_builtin): Make code consistent with make_builtin(), add + call to track_ext_func(). + * bootstrap.sh: Update copyright year. Remove touch of version.c + since that file is no longer autogenerated. + 2014-01-07 Arnold D. Robbins * command.y (next_word): Move into ifdef for HAVE_LIBREADLINE, diff --git a/awkgram.c b/awkgram.c index 74913840..7eff2f11 100644 --- a/awkgram.c +++ b/awkgram.c @@ -6856,18 +6856,9 @@ func_use(const char *name, enum defref how) len = strlen(name); ind = hash(name, len, HASHSIZE, NULL); - for (fp = ftable[ind]; fp != NULL; fp = fp->next) { - if (strcmp(fp->name, name) == 0) { - if (how == FUNC_DEFINE) - fp->defined++; - else if (how == FUNC_EXT) { - fp->defined++; - fp->extension++; - } else - fp->used++; - return; - } - } + for (fp = ftable[ind]; fp != NULL; fp = fp->next) + if (strcmp(fp->name, name) == 0) + goto update_value; /* not in the table, fall through to allocate a new one */ @@ -6875,6 +6866,10 @@ func_use(const char *name, enum defref how) memset(fp, '\0', sizeof(struct fdesc)); emalloc(fp->name, char *, len + 1, "func_use"); strcpy(fp->name, name); + fp->next = ftable[ind]; + ftable[ind] = fp; + +update_value: if (how == FUNC_DEFINE) fp->defined++; else if (how == FUNC_EXT) { @@ -6882,8 +6877,6 @@ func_use(const char *name, enum defref how) fp->extension++; } else fp->used++; - fp->next = ftable[ind]; - ftable[ind] = fp; } /* track_ext_func --- add an extension function to the table */ diff --git a/awkgram.y b/awkgram.y index 9786ca7a..5846c134 100644 --- a/awkgram.y +++ b/awkgram.y @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 1986, 1988, 1989, 1991-2013 the Free Software Foundation, Inc. + * Copyright (C) 1986, 1988, 1989, 1991-2014 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. @@ -4308,18 +4308,9 @@ func_use(const char *name, enum defref how) len = strlen(name); ind = hash(name, len, HASHSIZE, NULL); - for (fp = ftable[ind]; fp != NULL; fp = fp->next) { - if (strcmp(fp->name, name) == 0) { - if (how == FUNC_DEFINE) - fp->defined++; - else if (how == FUNC_EXT) { - fp->defined++; - fp->extension++; - } else - fp->used++; - return; - } - } + for (fp = ftable[ind]; fp != NULL; fp = fp->next) + if (strcmp(fp->name, name) == 0) + goto update_value; /* not in the table, fall through to allocate a new one */ @@ -4327,6 +4318,10 @@ func_use(const char *name, enum defref how) memset(fp, '\0', sizeof(struct fdesc)); emalloc(fp->name, char *, len + 1, "func_use"); strcpy(fp->name, name); + fp->next = ftable[ind]; + ftable[ind] = fp; + +update_value: if (how == FUNC_DEFINE) fp->defined++; else if (how == FUNC_EXT) { @@ -4334,8 +4329,6 @@ func_use(const char *name, enum defref how) fp->extension++; } else fp->used++; - fp->next = ftable[ind]; - ftable[ind] = fp; } /* track_ext_func --- add an extension function to the table */ diff --git a/bootstrap.sh b/bootstrap.sh index 496d8a03..85cdd196 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -3,7 +3,7 @@ # bootstrap.sh --- touch relevant files to avoid out-of-date issues in # Git sandboxes -# Copyright (C) 2007, 2009-2013 the Free Software Foundation, Inc. +# Copyright (C) 2007, 2009-2014 the Free Software Foundation, Inc. # # This file is part of GAWK, the GNU implementation of the # AWK Programming Language. @@ -41,4 +41,3 @@ touch po/*.gmo touch po/stamp-po touch awkgram.c touch command.c -touch version.c diff --git a/command.y b/command.y index acf4a602..742b185a 100644 --- a/command.y +++ b/command.y @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 2004, 2010, 2011 the Free Software Foundation, Inc. + * Copyright (C) 2004, 2010, 2011, 2014 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. diff --git a/ext.c b/ext.c index 60765e07..cae882ff 100644 --- a/ext.c +++ b/ext.c @@ -7,7 +7,7 @@ */ /* - * Copyright (C) 1995 - 2001, 2003-2013 the Free Software Foundation, Inc. + * Copyright (C) 1995 - 2001, 2003-2014 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. @@ -223,9 +223,7 @@ make_builtin(const awk_ext_func_t *funcinfo) if (! is_letter(*sp)) return false; - sp++; - - while ((c = *sp++) != '\0') { + for (sp++; (c = *sp++) != '\0';) { if (! is_identifier_char(c)) return false; } @@ -277,9 +275,11 @@ make_old_builtin(const char *name, NODE *(*func)(int), int count) /* temporary * if (sp == NULL || *sp == '\0') fatal(_("extension: missing function name")); - while ((c = *sp++) != '\0') { - if ((sp == & name[1] && c != '_' && ! isalpha((unsigned char) c)) - || (sp > &name[1] && ! is_identifier_char((unsigned char) c))) + if (! is_letter(*sp)) + fatal(_("extension: illegal character `%c' in function name `%s'"), *sp, name); + + for (sp++; (c = *sp++) != '\0';) { + if (! is_identifier_char(c)) fatal(_("extension: illegal character `%c' in function name `%s'"), c, name); } @@ -312,6 +312,7 @@ make_old_builtin(const char *name, NODE *(*func)(int), int count) /* temporary * symbol = install_symbol(estrdup(name, strlen(name)), Node_old_ext_func); symbol->code_ptr = b; + track_ext_func(name); } -- cgit v1.2.3 From 074f0fcb34072abbbd56fc96630368fc7fa3115d Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 12 Jan 2014 20:44:21 +0200 Subject: Updates to .gitignore. --- .gitignore | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitignore b/.gitignore index 1d665c4d..71be0874 100644 --- a/.gitignore +++ b/.gitignore @@ -11,10 +11,7 @@ Makefile config.h config.log config.status -dgawk gawk -pgawk stamp-h1 -libtool test/fmtspcl.ok -- cgit v1.2.3 From 2389064eb3fe7c5b2b144eb2f5d556a812ba1911 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 13 Jan 2014 22:23:29 +0200 Subject: VMS doc updates. --- ChangeLog | 4 +++ README | 2 +- README_d/ChangeLog | 4 +++ README_d/README.VMS | 3 ++ doc/ChangeLog | 4 +++ doc/gawk.info | 92 ++++++++++++++++++++++++++++++----------------------- doc/gawk.texi | 25 ++++++++++++--- doc/gawktexi.in | 25 ++++++++++++--- 8 files changed, 109 insertions(+), 50 deletions(-) diff --git a/ChangeLog b/ChangeLog index eb22fc0f..23afcf35 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2014-01-13 Arnold D. Robbins + + * README: Fix John Malmberg's email address. + 2014-01-12 Arnold D. Robbins * awkgram.y: Update copyright year. diff --git a/README b/README index 6d87806b..85127f45 100644 --- a/README +++ b/README @@ -90,7 +90,7 @@ VMS: r.pat.rankin@gmail.com John Malmberg - wb8tyw@gmail.com + wb8tyw@qsl.net z/OS (OS/390): Dave Pitts diff --git a/README_d/ChangeLog b/README_d/ChangeLog index 392ce0e2..7d29d3e3 100644 --- a/README_d/ChangeLog +++ b/README_d/ChangeLog @@ -1,3 +1,7 @@ +2014-01-12 John E. Malmberg + + * README.VMS: document that the gawk.cld needs a fix. + 2013-12-23 John E. Malmberg * README.VMS: Add documentation about building dynamic diff --git a/README_d/README.VMS b/README_d/README.VMS index ef15a04d..0faabbc2 100644 --- a/README_d/README.VMS +++ b/README_d/README.VMS @@ -221,3 +221,6 @@ TO DO Items (not in order of priority) 3. Need gawk to accept logical names GNV$AWKPATH, GNV$AWKLIB, and GNV$AWK_LIBARARY in addtion to the unprefixed names. This will allow system wide default values to be set by an installation kit. + +4. Need to fix the gawk.cld file to not require a parameter for the options + that do not use the parameter. diff --git a/doc/ChangeLog b/doc/ChangeLog index ebdd68ba..82cb722a 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-12-14 John E. Malmberg + + * gawktexi.in: Add information on building VMS PCSI kit. + 2014-01-03 Arnold D. Robbins * gawktexi.in (Full Line Fields): New node. diff --git a/doc/gawk.info b/doc/gawk.info index fcef0ee6..88745cd7 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -26394,7 +26394,19 @@ directory tree, the program will be known as `GNV$GNU:[bin]gnv$gawk.exe' and the help file will be `GNV$GNU:[vms_help]gawk.hlp'. - Optionally, the help entry can be loaded into a VMS help library: + 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. + + 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'. + + The DCL syntax is documented in the `gawk.hlp' file. + + Optionally, `gawk.hlp' entry can be loaded into a VMS help library: $ LIBRARY/HELP sys$help:helplib [.vms]gawk.hlp @@ -26495,8 +26507,10 @@ reorganized to supply individual PCSI packages for each component. See `https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/'. The normal build procedure for `gawk' produces a program that is -suitable for use with GNV. At this time work is being done to create -the procedures for building a PCSI kit to replace the older `gawk' port. +suitable for use with GNV. + + The `vms/gawk_build_steps.txt' in the source documents the procedure +for building a VMS PCSI kit that is compatible with GNV.  File: gawk.info, Node: VMS Old Gawk, Prev: VMS GNV, Up: VMS Installation @@ -26586,7 +26600,7 @@ MS-DOS with DJGPP Scott Deifik, . MS-Windows with MINGW Eli Zaretskii, . OS/2 Andreas Buening, . VMS Pat Rankin, , and John - Malmberg, . + Malmberg, . z/OS (OS/390) Dave Pitts, . If your bug is also reproducible under Unix, please send a copy of @@ -32828,40 +32842,40 @@ Node: VMS Compilation1055883 Ref: VMS Compilation-Footnote-11057498 Node: VMS Dynamic Extensions1057556 Node: VMS Installation Details1058929 -Node: VMS Running1060763 -Node: VMS GNV1063597 -Node: VMS Old Gawk1064306 -Node: Bugs1064776 -Node: Other Versions1068696 -Node: Notes1074780 -Node: Compatibility Mode1075580 -Node: Additions1076363 -Node: Accessing The Source1077290 -Node: Adding Code1078730 -Node: New Ports1084775 -Node: Derived Files1088910 -Ref: Derived Files-Footnote-11094231 -Ref: Derived Files-Footnote-21094265 -Ref: Derived Files-Footnote-31094865 -Node: Future Extensions1094963 -Node: Implementation Limitations1095546 -Node: Extension Design1096798 -Node: Old Extension Problems1097952 -Ref: Old Extension Problems-Footnote-11099460 -Node: Extension New Mechanism Goals1099517 -Ref: Extension New Mechanism Goals-Footnote-11102882 -Node: Extension Other Design Decisions1103068 -Node: Extension Future Growth1105174 -Node: Old Extension Mechanism1106010 -Node: Basic Concepts1107750 -Node: Basic High Level1108431 -Ref: figure-general-flow1108702 -Ref: figure-process-flow1109301 -Ref: Basic High Level-Footnote-11112530 -Node: Basic Data Typing1112715 -Node: Glossary1116070 -Node: Copying1141532 -Node: GNU Free Documentation License1179089 -Node: Index1204226 +Node: VMS Running1061176 +Node: VMS GNV1064010 +Node: VMS Old Gawk1064733 +Node: Bugs1065203 +Node: Other Versions1069121 +Node: Notes1075205 +Node: Compatibility Mode1076005 +Node: Additions1076788 +Node: Accessing The Source1077715 +Node: Adding Code1079155 +Node: New Ports1085200 +Node: Derived Files1089335 +Ref: Derived Files-Footnote-11094656 +Ref: Derived Files-Footnote-21094690 +Ref: Derived Files-Footnote-31095290 +Node: Future Extensions1095388 +Node: Implementation Limitations1095971 +Node: Extension Design1097223 +Node: Old Extension Problems1098377 +Ref: Old Extension Problems-Footnote-11099885 +Node: Extension New Mechanism Goals1099942 +Ref: Extension New Mechanism Goals-Footnote-11103307 +Node: Extension Other Design Decisions1103493 +Node: Extension Future Growth1105599 +Node: Old Extension Mechanism1106435 +Node: Basic Concepts1108175 +Node: Basic High Level1108856 +Ref: figure-general-flow1109127 +Ref: figure-process-flow1109726 +Ref: Basic High Level-Footnote-11112955 +Node: Basic Data Typing1113140 +Node: Glossary1116495 +Node: Copying1141957 +Node: GNU Free Documentation License1179514 +Node: Index1204651  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index a9ae048a..b759986b 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -35016,7 +35016,21 @@ If your @command{gawk} was installed by a PCSI kit into the @file{GNV$GNU:[bin]gnv$gawk.exe} and the help file will be @file{GNV$GNU:[vms_help]gawk.hlp}. -Optionally, the help entry can be loaded into a VMS help library: +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. + +For just the current process you can use: + +@example +$ @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}. + +The DCL syntax is documented in the @file{gawk.hlp} file. + +Optionally, @file{gawk.hlp} entry can be loaded into a VMS help library: @example $ @kbd{LIBRARY/HELP sys$help:helplib [.vms]gawk.hlp} @@ -35127,9 +35141,10 @@ to supply individual PCSI packages for each component. See @uref{https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/}. The normal build procedure for @command{gawk} produces a program that -is suitable for use with GNV. At this time work is being done to create -the procedures for building a PCSI kit to replace the older @command{gawk} -port. +is suitable for use with GNV. + +The @file{vms/gawk_build_steps.txt} in the source documents the procedure +for building a VMS PCSI kit that is compatible with GNV. @ignore @c The VMS POSIX product, also known as POSIX for OpenVMS, is long defunct @@ -35282,7 +35297,7 @@ as follows: @cindex Rankin, Pat @cindex Malmberg, John @item VMS @tab Pat Rankin, @EMAIL{r.pat.rankin@@gmail.com,r.pat.rankin at gmail.com}, and -John Malmberg, @EMAIL{wb8tyw@@gmail.com,wb8tyw at gmail.com}. +John Malmberg, @EMAIL{wb8tyw@@qsl.net,wb8tyw at qsl.net}. @cindex Pitts, Dave @item z/OS (OS/390) @tab Dave Pitts, @EMAIL{dpitts@@cozx.com,dpitts at cozx dot com}. diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 4dfd0039..f27d5aba 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -34165,7 +34165,21 @@ If your @command{gawk} was installed by a PCSI kit into the @file{GNV$GNU:[bin]gnv$gawk.exe} and the help file will be @file{GNV$GNU:[vms_help]gawk.hlp}. -Optionally, the help entry can be loaded into a VMS help library: +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. + +For just the current process you can use: + +@example +$ @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}. + +The DCL syntax is documented in the @file{gawk.hlp} file. + +Optionally, @file{gawk.hlp} entry can be loaded into a VMS help library: @example $ @kbd{LIBRARY/HELP sys$help:helplib [.vms]gawk.hlp} @@ -34276,9 +34290,10 @@ to supply individual PCSI packages for each component. See @uref{https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/}. The normal build procedure for @command{gawk} produces a program that -is suitable for use with GNV. At this time work is being done to create -the procedures for building a PCSI kit to replace the older @command{gawk} -port. +is suitable for use with GNV. + +The @file{vms/gawk_build_steps.txt} in the source documents the procedure +for building a VMS PCSI kit that is compatible with GNV. @ignore @c The VMS POSIX product, also known as POSIX for OpenVMS, is long defunct @@ -34431,7 +34446,7 @@ as follows: @cindex Rankin, Pat @cindex Malmberg, John @item VMS @tab Pat Rankin, @EMAIL{r.pat.rankin@@gmail.com,r.pat.rankin at gmail.com}, and -John Malmberg, @EMAIL{wb8tyw@@gmail.com,wb8tyw at gmail.com}. +John Malmberg, @EMAIL{wb8tyw@@qsl.net,wb8tyw at qsl.net}. @cindex Pitts, Dave @item z/OS (OS/390) @tab Dave Pitts, @EMAIL{dpitts@@cozx.com,dpitts at cozx dot com}. -- cgit v1.2.3 From c338576a8fefa700cb989319d10d27f6f31e9b00 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 14 Jan 2014 22:17:04 +0200 Subject: Bug fix to do_split(). --- ChangeLog | 6 ++++++ field.c | 4 +++- test/ChangeLog | 6 ++++++ test/Makefile.am | 8 ++++++-- test/Makefile.in | 13 +++++++++++-- test/Maketests | 5 +++++ test/split_after_fpat.awk | 11 +++++++++++ test/split_after_fpat.in | 1 + test/split_after_fpat.ok | 4 ++++ 9 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 test/split_after_fpat.awk create mode 100644 test/split_after_fpat.in create mode 100644 test/split_after_fpat.ok diff --git a/ChangeLog b/ChangeLog index 23afcf35..9f5954bb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2014-01-14 Arnold D. Robbins + + * field.c (do_split): Make sure split() gets FS value if no + third arg even after FPAT was set. Thanks to Janis Papanagnou + for the report. + 2014-01-13 Arnold D. Robbins * README: Fix John Malmberg's email address. diff --git a/field.c b/field.c index 0a7cee8f..5a1bf562 100644 --- a/field.c +++ b/field.c @@ -1013,7 +1013,9 @@ do_split(int nargs) return make_number((AWKNUM) 0); } - if ((sep->re_flags & FS_DFLT) != 0 && current_field_sep() != Using_FIELDWIDTHS && ! RS_is_null) { + if ( (sep->re_flags & FS_DFLT) != 0 + && current_field_sep() == Using_FS + && ! RS_is_null) { parseit = parse_field; fs = force_string(FS_node->var_value); rp = FS_regexp; diff --git a/test/ChangeLog b/test/ChangeLog index 81fed7c8..b5ff6e64 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,9 @@ +2014-01-14 Arnold D. Robbins + + * Makefile.am (split_after_fpat): New test. + * split_after_fpat.awk, split_after_fpat.ok, + split_after_fpat.in: New files. + 2013-12-30 Arnold D. Robbins * Makefile.am (ignrcas2): Change to use en_US.UTF-8; it diff --git a/test/Makefile.am b/test/Makefile.am index 371a13ea..e6dfea17 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1,7 +1,7 @@ # # test/Makefile.am --- automake input file for gawk # -# Copyright (C) 1988-2012 the Free Software Foundation, Inc. +# Copyright (C) 1988-2014 the Free Software Foundation, Inc. # # This file is part of GAWK, the GNU implementation of the # AWK Programming Language. @@ -806,6 +806,9 @@ EXTRA_DIST = \ sortu.awk \ sortu.ok \ space.ok \ + split_after_fpat.awk \ + split_after_fpat.in \ + split_after_fpat.ok \ splitarg4.awk \ splitarg4.in \ splitarg4.ok \ @@ -993,7 +996,8 @@ GAWK_EXT_TESTS = \ patsplit posix printfbad1 printfbad2 printfbad3 procinfs \ profile1 profile2 profile3 profile4 profile5 pty1 \ rebuf regx8bit reginttrad reint reint2 rsstart1 \ - rsstart2 rsstart3 rstest6 shadow sortfor sortu splitarg4 strftime \ + rsstart2 rsstart3 rstest6 shadow sortfor sortu split_after_fpat \ + splitarg4 strftime \ strtonum switch2 symtab1 symtab2 symtab3 symtab4 symtab5 symtab6 \ symtab7 symtab8 symtab9 diff --git a/test/Makefile.in b/test/Makefile.in index c2efe1ed..8fe395ef 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -17,7 +17,7 @@ # # test/Makefile.am --- automake input file for gawk # -# Copyright (C) 1988-2012 the Free Software Foundation, Inc. +# Copyright (C) 1988-2014 the Free Software Foundation, Inc. # # This file is part of GAWK, the GNU implementation of the # AWK Programming Language. @@ -1052,6 +1052,9 @@ EXTRA_DIST = \ sortu.awk \ sortu.ok \ space.ok \ + split_after_fpat.awk \ + split_after_fpat.in \ + split_after_fpat.ok \ splitarg4.awk \ splitarg4.in \ splitarg4.ok \ @@ -1238,7 +1241,8 @@ GAWK_EXT_TESTS = \ patsplit posix printfbad1 printfbad2 printfbad3 procinfs \ profile1 profile2 profile3 profile4 profile5 pty1 \ rebuf regx8bit reginttrad reint reint2 rsstart1 \ - rsstart2 rsstart3 rstest6 shadow sortfor sortu splitarg4 strftime \ + rsstart2 rsstart3 rstest6 shadow sortfor sortu split_after_fpat \ + splitarg4 strftime \ strtonum switch2 symtab1 symtab2 symtab3 symtab4 symtab5 symtab6 \ symtab7 symtab8 symtab9 @@ -3497,6 +3501,11 @@ sortu: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +split_after_fpat: + @echo $@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + splitarg4: @echo $@ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/Maketests b/test/Maketests index df272ce8..b9b713c4 100644 --- a/test/Maketests +++ b/test/Maketests @@ -1182,6 +1182,11 @@ sortu: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +split_after_fpat: + @echo $@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + splitarg4: @echo $@ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/split_after_fpat.awk b/test/split_after_fpat.awk new file mode 100644 index 00000000..7e7cfd99 --- /dev/null +++ b/test/split_after_fpat.awk @@ -0,0 +1,11 @@ +BEGIN { FPAT = "\"[^\"]*\"" } + +{ print $1 } + +END { f("hi there") } + +function f (p, a, n, i) +{ + n = split(p,a) + print n ; for (i=1; i<=n; i++) print a[i] +} diff --git a/test/split_after_fpat.in b/test/split_after_fpat.in new file mode 100644 index 00000000..1aeefd59 --- /dev/null +++ b/test/split_after_fpat.in @@ -0,0 +1 @@ +a"stuff"b diff --git a/test/split_after_fpat.ok b/test/split_after_fpat.ok new file mode 100644 index 00000000..5c284490 --- /dev/null +++ b/test/split_after_fpat.ok @@ -0,0 +1,4 @@ +"stuff" +2 +hi +there -- cgit v1.2.3 From ec9cd11f67b6c2cfca611cad48e65e711ed26a0b Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 14 Jan 2014 22:23:10 +0200 Subject: Remove vms/vms-notes file before making test dist. --- vms/vms-notes | 1148 --------------------------------------------------------- 1 file changed, 1148 deletions(-) delete mode 100644 vms/vms-notes diff --git a/vms/vms-notes b/vms/vms-notes deleted file mode 100644 index 2d57648e..00000000 --- a/vms/vms-notes +++ /dev/null @@ -1,1148 +0,0 @@ -Thu Nov 22 18:18:47 IST 2012 -============================ - -Per Anders Wallin, the HP VMS porting guide is available at - - http://h71000.www7.hp.com/portability/portingguidelines.html - -This file documents this fact, and anything else of interest. -From wb8tyw@qsl.net Wed Dec 11 20:03:44 2013 -Return-Path: -Received: from skeeve.com (skeeve.com [127.0.0.1]) - by skeeve.com (8.14.4/8.14.4/Debian-2ubuntu2.1) with ESMTP id rBBI3gNX002464 - for ; Wed, 11 Dec 2013 20:03:43 +0200 -X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on - frenzy.freefriends.org -X-Spam-Level: -X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM - autolearn=ham version=3.3.1 -X-Envelope-From: wb8tyw@qsl.net -X-Envelope-To: -Received: from frenzy.freefriends.org [66.54.153.139] - by skeeve.com with IMAP (fetchmail-6.3.21) - for (single-drop); Wed, 11 Dec 2013 20:03:43 +0200 (IST) -Received: from Encompasserve.org (Eisner.encompasserve.org [67.53.90.116]) - by freefriends.org (8.14.6/8.14.6) with ESMTP id rBB5jaW9020988 - for ; Tue, 10 Dec 2013 22:45:40 -0700 -Received: from [192.168.0.101] - (173-19-202-206.client.mchsi.com [173.19.202.206]) - by Encompasserve.org (PMDF V6.6 #13031) - with ESMTPSA id <01P1SYL5LELG002FZE@Encompasserve.org> for arnold@skeeve.com; - Tue, 10 Dec 2013 23:45:35 -0600 (CST) -Date: Tue, 10 Dec 2013 23:45:36 -0600 -From: "John E. Malmberg" -Subject: Re: Some questions... -In-reply-to: <201312110426.rBB4QXXc003297@skeeve.com> -To: Aharon Robbins -Cc: wb8tyw@qsl.net -Message-id: <52A7FC00.2040905@qsl.net> -MIME-version: 1.0 -Content-type: text/plain; charset=ISO-8859-1; format=flowed -Content-transfer-encoding: 7BIT -User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20130215 - Thunderbird/17.0.3 -References: <529A9537.7090404@qsl.net> <201312110426.rBB4QXXc003297@skeeve.com> -Status: RO - -On 12/10/2013 10:26 PM, Aharon Robbins wrote: -> Hi. Some questions about your changes. -> -> 1. I notice that there is at least one instance of #if __VMS, where as -> it seems most code uses #if VMS. Is that on purpose? If not, which -> is correct? - -VMS is a macro historically pre-defined by C compilers on C before the -ANSI rules. - -Under strict ANSI rules, a standards compliant compiler is not allowed -to pre-define macros that are not prefixed by "__". - -Which means that you can not count on the VMS macro being defined unless -you do it yourself. - -So __VMS is the ANSI correct definition. But it would be a lot of work -to change all the code. - -The vms_config.h that is now generated has these lines in it to make -sure that VMS is defined. - -#ifdef __VMS /* ANSI compliant */ -#ifndef VMS /* PRE-ansi */ -#define VMS 1 -#endif -#endif - -This may be needed for other architectures. It only shows up as an -issue if you set a "strict" compliance flag on the compile command. - -> 2. For the include of the main wrapper. Gawk already has a routine -> os_arg_fixup which is intended to manipulate argc and argv as needed -> by an OS-specific routine before main() parses it. A quick look at -> the wrapper looks to me like it could be made to fit within that framework, -> which would keep #if and the include out of the mainline code. - -I can look at that. I can also look to see if I can move the logic from -vms_crtl_init.c into it in a way that would sidestep that it has no -copyright notice at all. The result would be code that is almost -identical to code that is in the official Perl distribution. - -GNV was started as a user project and when the VMS POSIX product was -dropped and they needed a Unix like environment, Digital took over the -GNV product, but did not really do much to keep it up to date. - -The routine in vms_crtl_init.c is actually called before main() is -called, so just linking a module with it in is all that it takes to -activate the change. Unfortunately I do not know how to get it to -magically fix up the argv array. - -> If that looks reasonable to you, can you make that change? You can send -> it as a diff against what you currently have already done. - -I will look at it tomorrow night. I also found another change needed -for vms_args.c to work properly under a bash shell. - -> I'm sorry about the hassle on the copyrights, but I really have to play -> this game by the FSF rules. I hope we can get it clarified soon -> so that I can include the files in the dist. - -I hope so. I have not seen a reply from Karl yet. He did say that -there are other options. - -This would clear the way for getting the similar code accepted into the -Bash and coreutils repositories. I have a report that the first bash -4.3 beta built on VMS and looked real good on the test run. - -I am currently working on adapting the packaging scripts from bash and -coreutils to gawk. Each product has had it unique features, so I have -not yet come up with a generic set of scripts. - -This is a preview what will be coming: - -backup_gawk_src.com - Builds a VMS equivalent to tar archive. By -placing the source in the PCSI kit, it covers the requirement of -providing source somewhere with the binary. - -build_gawk_pcsi_desc.com - Creates a VMS PCSI package manifest file. - -build_gawk_pcsi_text.com - text output by the VMS PCSI package installer. - -compare_gawk_source.com - I have the source checked out on an NFS -server. The backup program needs me to copy it to a VMS volume first. -This procedure makes sure that the two copies are the same and ready for -backup. - -gawk_alias_setup.com - Sets up gawk and awk links to gnv$gawk.exe. -Needed to repair when sins of the past partially break an install. - -gawk_verb.cld - for gawk to use gnv$gawk.exe as an image. Different -than gawk.cld. To properly add an image to the VMS command table, it -needs a prefix. I have "GNV$" registered as a prefix for this purpose. - -gnv_gawk_kit_name.com - Calculates the VMS PCSI package name, used for -both file names and file contents. - -gnv_gawk_startup.com - Run at VMS startup to make sure that the -environment is set up properly for gawk. - -pcsi_gawk_file_list.txt - Source file for build_gawk_pcsi_desc.com. - -remove_old_gawk.com - Needed to properly clean up sins of the past. -Only touches the the GNV provided gawk and awk programs. - -stage_gawk_install.com - Does a pre-install into a fake "root" directory -tree for the kitting procedure to pull files out of. - -Regards, --John - -From wb8tyw@qsl.net Thu Dec 12 12:21:57 2013 -Return-Path: -Received: from skeeve.com (skeeve.com [127.0.0.1]) - by skeeve.com (8.14.4/8.14.4/Debian-2ubuntu2.1) with ESMTP id rBCAIn2l004322 - for ; Thu, 12 Dec 2013 12:21:55 +0200 -X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on - frenzy.freefriends.org -X-Spam-Level: -X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM - autolearn=ham version=3.3.1 -X-Envelope-From: wb8tyw@qsl.net -X-Envelope-To: -Received: from frenzy.freefriends.org [66.54.153.139] - by skeeve.com with IMAP (fetchmail-6.3.21) - for (single-drop); Thu, 12 Dec 2013 12:21:55 +0200 (IST) -Received: from Encompasserve.org (Eisner.encompasserve.org [67.53.90.116]) - by freefriends.org (8.14.6/8.14.6) with ESMTP id rBC6FboY024650 - for ; Wed, 11 Dec 2013 23:15:41 -0700 -Received: from [192.168.0.101] - (173-19-202-206.client.mchsi.com [173.19.202.206]) - by Encompasserve.org (PMDF V6.6 #13031) - with ESMTPSA id <01P1UDWPUU7M002J4J@Encompasserve.org> for arnold@skeeve.com; - Thu, 12 Dec 2013 00:15:35 -0600 (CST) -Date: Thu, 12 Dec 2013 00:15:38 -0600 -From: "John E. Malmberg" -Subject: Re: Some questions... -In-reply-to: <201312110755.rBB7tIrb026097@freefriends.org> -To: arnold@skeeve.com -Cc: wb8tyw@qsl.net -Message-id: <52A9548A.5060604@qsl.net> -MIME-version: 1.0 -Content-type: multipart/mixed; boundary="Boundary_(ID_0V6xQMBg8dMk2LzZyR0ioQ)" -User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20130215 - Thunderbird/17.0.3 -References: <529A9537.7090404@qsl.net> <201312110426.rBB4QXXc003297@skeeve.com> - <52A7FC00.2040905@qsl.net> <201312110755.rBB7tIrb026097@freefriends.org> -Status: RO -X-Status: A - -This is a multi-part message in MIME format. - ---Boundary_(ID_0V6xQMBg8dMk2LzZyR0ioQ) -Content-type: text/plain; charset=ISO-8859-1; format=flowed -Content-transfer-encoding: 7BIT - -I moved the vms_gawk_main_wrapper.c code into gawkmisc.vms so that file -is not needed anymore. - -I also discovered that we were not building with exact case public -symbols, so I fixed up the source to build with exact case symbols. -This will be more important when building dynamic plug-ins, and in the -future if and when the other related packages can be built with it. - -This caused small changes to most of the source files in VMS, as all the -system services routines were in the wrong case. - -I see that just about everything has been backed out of git until the -legal stuff is resolved. - -This is what I currently have for io.c changes based on a branch I just -made against master. - -And this is what the diff for the vms/gawkmisc.vms changes are, which -eliminates the change to main.c. - -Regards, --John - - - -On 12/11/2013 1:55 AM, arnold@skeeve.com wrote: -> Hi. -> -> Thahks for the answers. I will address some of this later; I'm at work now. -> -> I would like to emphasize that, from my perspective, the priorities are: -> -> 1. Code changes (os_arg_fixup, etc.). -> 2. Documentation revisions. -> 3. The other VMS-only goodies that you described. -> -> The documentation revisions are not optional; I have to have them. -> -> But, as I said, it's enough if you give me plain text. I can do the -> markup. If the markup is what's holding you back then don't bother, -> just send me text, with some kind of clear indication of the sectioning / -> subsectioning (if any), and I'll do the markup. -> -> Karl replied further to me; I don't know if it was on purpose or -> by accident that he didn't include you. I will include you on the -> further correspondance that I need to send. -> -> Believe me, I very much want to move this forward, but I really do -> have to play by the rules. -> -> Thanks, -> -> Arnold -> - - ---Boundary_(ID_0V6xQMBg8dMk2LzZyR0ioQ) -Content-type: application/gzip; name=gawk_io_c_vms.patch.gz -Content-transfer-encoding: base64 -Content-disposition: attachment; filename=gawk_io_c_vms.patch.gz - -H4sICANRqVICAzAwMDEtaW8uYy1yZWRpcmVjdC1BZGQtYWRkaXRpb25hbC1WTVMtZXJyb3It -Y29kZXMucGF0Y2gAnVV/b9pIEP0bf4q5pmptwI5tzM82FRRImyqQXEhzV51OyPaOwY3t5Wwn -TdT0u9/sGhNIIuVyKyTvzs6bfTNvdjlMeQy+7Ti+z3zT902n6wZdz/acltU0zQBNn7VZs2m2 -ut0GTHgCM1yB1QbT7Mkf2KZpKYcUpgdf+DKBiRvFHqYLeP/D6+S3P/r/ZJGRYP5BGbk59uAP -ZHWwLBihT1irAXaj12z0GjboZss0ldmV9x39vAd/nQ7Oh5//hpAbPqgpsjAlu9aDAWPgMhbm -IU/cCC4mM8A05Sn4nGFmSIACaoI3eRBGSIgzzNNb4CtMwA1yJM+IZ2GygIzHCMIpMxRF13UF -hks3WeAxX8Ad0HCgRkMpSMghzLYpzVtD1yXaLoKBL6OIRLsQJhmmgmum1rQ6NIFhhMVa1xSF -hUEAur4Ic3D370/37udKmDC8AdfqYIc1DAO7zGx6Llim2XIcQXsbqRCbHXS/D7pVb0DNqreh -31dqouq6ZeskQjmkcmPjXjw5HilYK/2rL1blMfal+pAKG+bmhvnM53lOzRQG4eXGCO8zYWZG -7IZRP/P8RcQ9d50EKFApOYhzMHZvPcy4f4llHgyDMJGZQEAZjL58Oj01dpWSeE9+1vo4AV2j -Junjt5sMW51dfaRjIY2cSlVsq94iXehDWpA0sIcJnSIo7oVBQQOZSrXUlNpemPjRFUNKLqMd -Y/lB2AI6O4DZ7PV8/OfHb+fHEzIWuG0jmDe2azkA+1WpTMdwIEMqd3Wf/ItDtw5I4/IEKIM9 -rJQaMK0ijWK2xVwk5rRskZjTaheJQam1enTy8eshVKv+VSrWdfA4jyC7DFcr0pviVCoV4li4 -xW7iLjDGhF4DIir2qKUSDgdgvpPLgNGc4bVoHTVI3FhEDJOYWk59lb7StHdKjdyolqoqfA/g -aHoxOD4azT8PpqPjsQZv3oC6DnoA48nhERk1+ClhRX5znqC6DvSE5T9S+FXSF9eBEPLMIgnB -7jdgfJ6nbnl/ikpUrlaMHs35+OxsejIPk7ygSiFFlbtOp07vZ63blF8ylddRnZ6MxlCVyzne -rOr0COXFbn67wmJZpVhBtK654PCgDHB3B/emqaxMwWqnCKJTRQtSWyl6od4gWi3dfdFnF23D -epvBEM7OjyHMiEJ+lSbiZudLWtLTmKPLZIEe4WpPwzDDDU6wodvOg5KyunSvMXmbQ56GyICT -ewornuX6RcuwIbslXJxpopv03Wvy+9eT8wFdE/o3Gz7ce/YKibwxEsR2ynh0ItpLZrfZ3d3e -KTFFJaFlSyrw7FCv3Rv/9Qa9ncXdnaI/H+ApvMxU0+4f6/8BF8e/GH82oQCD4VCCK1LWJxxm -36ba0z24fn3KSv+kVxcUy2gbXUX5F+2/BB3kCAAA - ---Boundary_(ID_0V6xQMBg8dMk2LzZyR0ioQ) -Content-type: application/gzip; name=gawk_gawkmisc_vms.gdiff.gz -Content-transfer-encoding: base64 -Content-disposition: attachment; filename=gawk_gawkmisc_vms.gdiff.gz - -H4sICINTqVICA2dhd2tfZ2F3a21pc2Nfdm1zLmdkaWZmAJ0aa1PbSPKz+RWzDgU22MY2JLsX -X3LLgtmllpBUTPZxHKWSpbGtQ5YUjcRj9/jv193z0OhhlrtUBdBMT09Pv7tn+v0+OxCp56Rx -nB0s3fvbg7u1oD/WgfAG8NH6lfvslHtsNGLj8dvX3709/I6Nh6PDrf39fYbgL198OH47/ptc -/P33rD8+7B0O2T78Ojp6w77/fouxPXYW55HvZkEc9dh55A167PWInaVudBsGEZtlKedZj50F -i2zFzsI4Tnvsh1hkCP7hmLHheDQa9keHw1GPfZkdI8qDLba1/yqIvDD3Ofu7yPwgHqzel8fS -IFpWBr3sMeE1QD8M5jRoD/tceGmQVID9u8Dni8ogX0T1wYXwGkZFJuqDWbCuEhVGaw1HZCWp -u1y7bM3Xc546bhgsozWPMibcO15MR3ENIIyj5X2c+lv7wJDcy1iQ8bUTBiJzDtmfW/utPBIA -CzIVqzgFeB5N6qNe7HMcvosDHwQ6zxeunzbA7bGUZxLF0wQJV5sughDY6UZOkK1D2HqMWzP4 -V999ma0mjXOwVJGBk97KTWE7L14ncQQHNTtuYhXOBcCQ2e+z7R+nV6e/nP/akahKeyG/GAi0 -1zCneLFy7VkvjgTIQZ7TF962UpwsTh0BFPr8LnLXmxbY0thjkjsWrOJ3EIt5dbSzx1yRgRi6 -nRLx3d6mUwF4kq7r2KM8DN102Z3YLDo7v5jOTo4vOy8/KTgdmLTwbxT+Hrtzw5zjuTdSu8cW -ob8I3aWoY6xv7uYPcZ5tFppWzOKQjI559fny4vJD7ZBVUtysdLC/4kTmzkPuwMRLSGegHlXg -ChVK2V1vDQbwUlVSX3RiieFrHmecvWO7/9rdnaixPXAziQuO9x07nZ59Or76yZ4Bx1hMXpz/ -YM/z6E7whCG+HqDbfwXwQcTZLx9mzuXxh6lzMb1kI3QB4Po9uQZDCx732gbaH92QVA722JV7 -y5kbhixbcbbIIwZCZfGCiWCdhI8gjfgWnDrLE+bCxzLw3JDYhxFBb4TCFY/CydIIvCgxqyMZ -pdgIC3FNr+RISCHVEGKgbwc1Zmsf3aTEsH0KRvH5/NPVx8+dQsisDTpEFuOcTn9pI8dbTXqE -WgTsQuAPzsnxbOr8cHF+eYrgm7RD6wbC0MHgjLlo8LwpF3mYWahsdQgysLvrsWRzS34NbwZw -OiDHnHRiz6GrVbQ6s6vP55c/lqZlBNCrS1PS0GBqx9Bkpkd60+HEHlObDSWoPvMAuXHvyJgA -03Aw+LujxEdcLoG6ThIDjziS1ZFi7SrgGuzc8TEVQMWenWz/7Jxe/f5p6lw1wHmhK4SBO7k4 -ns2cmSRUCgPmLE+yQ66C7VjasWMMnA17UhZdxZQF62yjKcyujq++wK8vJyfT2awjEXe7GCUB -rAWWcZmjVfB0HUQuGLEb+ejR8jQiU5HJDllBq0UiuZbMvyFzH6J9tp4ImVplFAlH2RaDLTDL -I+tkfcghE9wQzQ/xt3GuzRIXNG2Rxmu2iu9p4uOMgQ2GoIbACJmWAabf45zdx3noQ0aCCILo -Fn669KdAhcWpOZyCidxbwa8kjYFd6x5kFhCowRyBKYw/ZBxSKJ8CCBMJ94IFWDzmkYK5KWdw -aO/2kWUxEiZ4j7hyz9mKkiL0wzGwTHkTP1gseMojj8PO2T0HNXTZyeerC7bkEU+BqT4gXd6B -ChMelzAkIHyY4A/c63RL85AF+EDWPAbd9FzBxQAXHBhnu7dVMLRDIRAO0N1itivSw+BS/9zq -t+Rg0mN7X+v2jl+FkSuvJVZwPD0beiQ8Y0cgiPMFnZ18OE0CvjQT7D7IkO0HPZyOQCcZyMUF -jsxFHOaZXAEokIcot7X7SFwF1gF4wbD5I+EnNgZwLu766K5xDDKzNbBIIsG9BwzJkVuRQPhd -AMIgsrRESJfB4FZcKNJQYySOe1ewMLjlEAdIBRE2hRChNiKhRJz7AsUOyrUIHlAtk4Fcrlhx -Oj052f70cXb+m3Py8cOni/PjyysHwxpGoxnSJniGGMY2bzQrYP357OftXz5efPkwlay5D0DB -YLsEhANpplTCQI2LDH8iVYBSItGUSbIOjB/QuoD69Q6M9mCXzL+lRR2BORBrUNxS3jpZbjX7 -fL7GP68PbwikEi+gkHEwrbw+ktO0C1iyTFev3xw1rjIAOl5sDFwSzMQuid8PxO1dHOIG49dv -mukyIGoLhEHv9COIRUB9A3q2iNM1uQHQV+2hcJ3yfwd7/Rf9k9CGTyYgdkTwBwctNoftsj4b -TarAKmhBIbHtHF9cQOQHFapBmUBpsNVAioBZZ6+BG1WpKxhF5MH/17UVNomgszX6RhZ9O5Zw -Xt/U4AoiaxKyAMel+F4aL8d4dE7Hvi+9UwqJ4wMDqdIn4M7XXLkMLVGrbJOW5SYJBIfqAvL4 -GGPkOlBOL3nsFBT32mS/bRV/W8aoZHrhrdLOjjHE0U2PzFAeBUy0gP7mHbv8cnGhLLRlUpQC -os80HqU8BAgHQQcEjvxrHoDDAB8MsSNjK4hMiuaWZTkb0xqbyEnjKitvsvxEDeyZPKgJ+Jlk -qFVOh4oSG2Za07PL7RNnennWk99D9XvH2kINaZ1Rn9pPqU/kOqVRQykWkss3f5VDtSTrVQiA -4mB7yTPAfM8WbhDaoUYHPvinQo7KACDSQXxUeQCkK8vUXcuQE2cGnuLS6QlQKGLmxzi3wiaU -AThGFC7UMhwjTfsgWycHClmb3ZMWwNBbA+/HoCOYQ/EHYIkelnrSktmAMbbWE+OhAMSbOGJc -/vCmYMsGJGpWxR7LccnQU/FSOnxAeuTAlIoehu+V3JUCN2WhmHJpl2eOVQShkju8KWhUillz -qnrCkT6o6k0LemQ8ZuI2SFC+ENciKC4heaHiEnLOVHhxYZGkZIomFZ2dXcNBten+/qT0jZv2 -+2rsydr9mFL3dXwnOZGloIK4rxdDkdi0pXUocCVy/7e1/Uv7tWpLbfY9vVA20mcaksqOn+2/ -UxHHnrkuA91YHp+2O1lx7xZcYwpMR4cfYSgPZQI555BiBjBY54GUqHZlxdHBZ0fo4XVfAYqt -kvtW8IpM032QwzZLjBl0MAxAOu+tE7V3z3QtukiCdjwlLoJnUXUHWesS/ruQNGdQ3HjyxHFq -jJqyT3YSgxsIXDAmfW5IkK8oc12D7hlo1/NyTLZ7uINHlZMbgnuReFGLeQEcLGRSuuDg/FJy -Mq6XBXd8UPEdyNqOPjQeiu3sKBDsl1REXXC+YD26AWDS5P+SxHOiaAFWFY61HIr4XchCQxeS -o3VlAemf+MP2bNhq0nWRH8gylUojXRlRECc3HmSK63NqbVE6usdkCmqXNECYGsUaH3QBg7tM -TQ5UqRNEajXMwzT8XOcio0K4Xnq1ihymMcFGMAdHTD1Q1Iqtct9pEfDQd6iXaufs9b6sqR90 -BqibY3QMe0Q3VWhjiuA6FigASISKTO+vch5zlo0JT1Ep18DrHSJTbTdAP5fwVCGfy3bwVHG0 -m6F95RBpHnWVB1IOssANIUvHsEIJAF6Y6PuLIqU9Z/9G8cs8gUpbiD3FaqgioyRXnUihS0XK -hV0AepQeoCfTFq1IlN9gIqx4gmpGWIpix9F1hyboHTubnVxuO9Ty/zQ9mdQgDYOH9TlzA8Nk -TlzwR6VbWvlFUSKbwhqKLGr1UJ5cJXFUJxGKrPOT6aQGt5HA0XMEgkOVQqMiRKZ0VEVgXkda -UiVpXCcJ+waTGtRGgsYbCSpgDuu7oJZOalAbdzl87thTVTchZO2ER/beVbRHz2x5tHHLUl1g -3SupWPMXlyndHWOWPb2mcFQUZox36zFZH1Btptn6fI9VxT0kpFHl37Fmb9O8sFDFbzAQmQau -SaRjvGpTlQvw6ZbzxJGuUo0EVqn4q6Wf2lmr5pbIPY8LschDWRhhL7DB7GU3SschtVaZ4UAt -1OthN1lZC0Gw1NziLI7Aty1lT8xUSDCqlwFySJexGRMvyJZpoSlcRJ4k2NfBM0zPZnoV8gM8 -J/h4wWuUXFFowJ4j9YgfHh62dZMglj3CYO0uVYtAL7oIovyBaTsW2q2qNq06TRhiTDccy0DN -rBaExiVzJNVMbTbdiQFRxUaD9asimkQugxM1GGR2tLu9a1WwCqjSVlBrTWVhbWf+7JvFfWbn -RYp6W+GetthWH/WqLV3y22t85TG4gZw95R6Y2+NA5HP4uPnx+NefB9PfppOozfrvWRu/28iX -fiuxTqLjLJzmBk7DsE1ncLEkjzA0Up+Oln5tXvpeL3VD0AeqQv5O4T+itW74XqIiJIAG+UWJ -HrKK/ec/7CsDiC7MEHFfJwWVfp5YoP8oWjJvEcU+G3W7E4WxY1OXAFmDXTBfLRBEvvdV36UQ -tVJ5BhAmJmgAWmvqeXDx01EX0Hb+q8dVBowSUjc0KrWWfoCsEL0FqSvdjJDNBTr9RF1vD/gD -b2tKtG8pUmv50RwltNtBXjTFGODEyOjlM0BHRYVgETDSKXmpu0AO70En8g9SABFm/LCqp47T -A5QaBPd9kK7V4GjaRqX+RQVgjlYA2+fRQtupi0X1nVpEUcOZu5NKlWEa+rIwKTfxIaG0mvj1 -oGBGMjj6pLIQRisZtlSCIrJfUSrI3UgorcB7NXceylsacgnUonKxSWXd0KAzPAt0WoDJuWxi -3q8CqGAFT1ysQIUJROYCRq3FkDCwahZzzGaLlz1VHZwL4Ir7K4VDA0XeUFvG/xQptGEc6GDx -kliB2UaxrhoxTM+26uQNucbT/4++3mZh2YnrZmtadjNmQdfiz3nEvlye/8bw3Qj4OwjA5chL -qThwUF7J6riIvCB+6she3G0Jy90ksRDBPOR62T1m9XgTixWPvno1DsrKE1K6SNbL1H0h0YlK -IjNwIQeMiHJwGxHkJWng6YXGAKjwBi2IHqHIdAUMWJHcaA+YjyWggnHo6YtIrCGr4ikpYyuw -nA0YCShNJxB+sAwyjeA6uLGbJUauT4UHLSBVC0ZD7xXkDidNnuzAMld0klrZiXUdbJvgbSww -B1s/XZOp4QqQGQiklOhIb/MC3ijAGmswfMq5a9We5LsYmMtj091qk0lOj+X0g71Ejf22Yclh -wy6Hz+9ypJhcpOTAZ3PyYXN8wm4t9tp0aa8chEtP5hSMrYhgNZ6Lmoq3h6qpmev2f9F8s5ip -mGPHszpVjeGsRKpxhWSa7N591O8tOL3d1G8uONggJfMIrPXiWGCe74ZgO/4jWmkAJZVfIAB/ -LW9CpBco6c4iScEyFlBN+TxNVbBsqwYFXq5gFxKvbeXlBuwTxthvR6T/iuRTqabu3GVM7yyX -WEUA84Ec0w2rpFdFXLHflEnEjc/NTK/xSb6the3kzTx2BN059uXxgl7gKzNtVPQwxdxQYvCk -lxdyHYafkGPvFz1dBOsS4DJaYU9F0DWUagVCwUNweRzctXqaAHg9WgwqFsb3ajHJyLwSaNGG -QDpIj0d3nfbsp+nFhWQgqpOcLpsmjUOcgISKpiGlAtLb3ZLGmVcjo0ZZlKef1G56tEiiyD8a -nVU+0fAfXJydtdnj7+DUdGgbWjsd5TZVYqUzYw0I6fKTersUC8dNlw4IDpiMz5fkX9ZDFBbi -40RgJT5Tf/2m9y3bP/p23Bsf0St1JH8PMHiJef64h993Cb3N0Q9usj+cNA957XXOFmt18DVt -l2gzlHQIY48uxpKueZVzBomDIg6ffrM/4ki1mnASlIzeOchQhmoBIhd4TwRCVHag6ADmrd0w -jL3OaDiWabJpthRPIDvtq39CGq3W9JiBfcnzMzA5pXAVJITB1pTGnell3PmH6T8/Xk6dz18u -po2EvJCSZ0kxSrJIOe+oyW5ZRaDujRMsmkFB6A96VOaGDAy2/3GmWpVCa8l4+F1vNGL7b45G -vdG3pCcg6MUYX0HEoY+ep/9ezPMF7EJeC6spfJimWp7Wq7xXwcLnC+Z8mU3hjKd0zkKhO4sR -IMqQPrSpxVh/KW+I6nv0XX8eyKY9C3zYKr4NdINyZ4cpDAF4/wIDfCFv2CuUEtCot1NOodi1 -Z+0p3YM60eadBRT51KNmh/qBfpTJN4AVgtSdaUETDNSBRlWgUQPQuAo0Jlfxikd+sFCiBjK2 -/gvg4az2BTMAAA== - ---Boundary_(ID_0V6xQMBg8dMk2LzZyR0ioQ)-- - -From wb8tyw@qsl.net Sun Dec 8 19:58:11 2013 -Return-Path: -Received: from skeeve.com (skeeve.com [127.0.0.1]) - by skeeve.com (8.14.4/8.14.4/Debian-2ubuntu2.1) with ESMTP id rB8Hw8Y1002346 - for ; Sun, 8 Dec 2013 19:58:10 +0200 -X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on - frenzy.freefriends.org -X-Spam-Level: -X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM - autolearn=ham version=3.3.1 -X-Envelope-From: wb8tyw@qsl.net -X-Envelope-To: -Received: from frenzy.freefriends.org [66.54.153.139] - by skeeve.com with IMAP (fetchmail-6.3.21) - for (single-drop); Sun, 08 Dec 2013 19:58:10 +0200 (IST) -Received: from Encompasserve.org (Eisner.encompasserve.org [67.53.90.116]) - by freefriends.org (8.14.6/8.14.6) with ESMTP id rB84BBd2018585 - for ; Sat, 7 Dec 2013 21:11:14 -0700 -Received: from [192.168.0.101] - (173-19-202-206.client.mchsi.com [173.19.202.206]) - by Encompasserve.org (PMDF V6.6 #13031) - with ESMTPSA id <01P1OOF0VUTE001YI1@Encompasserve.org> for arnold@skeeve.com; - Sat, 07 Dec 2013 22:11:09 -0600 (CST) -Date: Sat, 07 Dec 2013 22:11:05 -0600 -From: "John E. Malmberg" -Subject: Re: VMS patch for config.h generation, passing tests. -In-reply-to: <52A277C3.303@qsl.net> -To: "John E. Malmberg" -Cc: arnold@skeeve.com, r.pat.rankin@gmail.com, anders_s_wallin@yahoo.se -Message-id: <52A3F159.9000607@qsl.net> -MIME-version: 1.0 -Content-type: text/plain; charset=ISO-8859-1; format=flowed -Content-transfer-encoding: 7BIT -User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20130215 - Thunderbird/17.0.3 -References: <52A17089.9060701@qsl.net> - <201312060840.rB68eH2F029601@freefriends.org> <52A277C3.303@qsl.net> -Status: R -X-Status: A - -I have merged in your changes with my local copy, but not sure yet what -to do to get the git status happy. - -Unfortunately the VMS 8.3 Alpha manyfile test failed. Closing 2 files -in io.c was not good enough. I am trying again with closing 4 files. -Still failed. I am going to have to add some diagnostics to identify -the failure. - -And the beginfile1 test also is failing on VMS 8.3 Alpha. I will look -at that after I resolve the manyfile issue. - -I also did not notice that ofmta test failed on VMS 7.3 VAX. The -floating point number is rounding differently. I get the same result -with the replacement SNPRINTF or the VMS provided SNPRINTF. - -TOAD> diff ofmta.ok sys$disk:[]_ofmta.tmp -************ -File SRC_ROOT:[GAWK.TEST]OFMTA.OK;1 - 5 4.234 - 6 4.2345 hi -****** -File LCL_ROOT:[GAWK.TEST]_OFMTA.TMP;2 - 5 4.235 - 6 4.2345 hi -************ - -I tried that build again with #undef HAVE_VPRINTF, and it failed. - - From eval.c: - I1 8733 #ifndef HAVE_VPRINTF - I1 8734 #error "you lose: you need a system with vfprintf" - .1 -%CC-E-ERRORMESSAGE, (1) #error "you lose: you need a system with vfprintf" - -Note that the error message has the wrong routine name. - -I have looked over the manual, and will try to get some detailed changes -to it. - -Some preliminary things to help collect my thoughts. - -As the MMS program has a lot of issues with ODS-5, Some open source -programmers have switched to Madgoat Make, known as MMK from -https://github.com/endlesssoftware/mmk . MMK uses most unmodified MMS -description files and handles ODS-5 volumes better than MMS does. - -The optional POSIX subsystem is no longer supported on VMS. While I -used to know at what version this support stopped in my head, I have -forgotten, and so far have not found that with an online search. - -Most of the C runtime routines that formerly required the POSIX -subsystem are in the VMS C runtime, so there no separate POSIX builds -needed for newer versions of VMS. - -The behavior of the VMS C runtime is controlled by feature settings that -can be set by logical names before the program is run. - -These feature settings include the support of longer filenames with -almost any characters including UTF-8, on ODS-5 volumes and if routines -should behave in a more Unix like fashion. - -I will be adding vms_crtl_init.c to the next commit for vmsbuild.com and -descrip.mms. This vms_crtl_init.c detects when the program is running -under a bash or similar shell and sets the feature settings for better -UNIX compatibility, or sets them for better DCL compatibilities. -It makes sure that the extended filename support is enabled. -This way a single binary can be used for both the VMS environment and -the DCL environment. - -As a replacement, a GNV https://sourceforge.net/projects/gnv/ was -created. There is older version of gawk that is provided by that package. - -Recently a group of programmers have started trying to correct issues -with the GNV project and reorganize it as a collection of packages along -wth a VMSPORTS https://sourceforge.net/projects/vms-ports/ effort. - -The GNV environment provides a Bash shell and several other utilities -intended to simulate a Unix environment. - -The web page https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/ -documents what needs to be done before installing these newer packages -while GNV is in the transition phase. - -Currently only Bash 4.2.45 and Coreutils 8.21 have been packaged, both -are fixing critical issues in GNV. - -I plan to have a GAWK PCSI package that will be installed with the VMS -PRODUCT command. This package will install into the GNV directory -structure, which mimics a Linux directory tree, so I will need to -determine where to put the gawk.hlp file in it. - -Regards, --John - - - -On 12/6/2013 7:20 PM, John E. Malmberg wrote: -> Hello Arnold, -> -> I almost missed this, the gmail randomizer threw it in the spam folder. -> It tends to do that with about 1 to 5 percent of my incoming e-mail. -> -> I am still learning git, so I am not sure how to regenerate the patch -> set. If you can help me with the commands, I can try to regenerate it. -> -> I ended up doing two patches, because I forgot that VMS execute -> permission is interpreted differently than Unix, so is usually on. -> -> I did not change the commands to kick off the build procedure, just the -> internals. -> -> Unfortunately Texinfo is not in my toolbox. I will look at the *.tex* -> files to see what I can figure out for editing the source format for any -> changes. I did update the readme.vms FILE. -> -> Also this patch should enable the dynamic extension loading, which I -> forgot to put in the change list. -> -> To better support dynamic extensions, gawk on VMS/ALPHA should be built -> using IEEE floating point. -> -> This slightly changes the precision of floating point output. I am not -> sure that anyone would notice. IA64 defaults to IEEE, and VAX can not -> support IEEE. -> -> The reason for this is that most open source packages expect the IEEE -> behavior, so it seems best to default to that when possible. -> -> When we get this step resolved, I am going to work on the procedure to -> generate a installable package in the VMS PCSI format. -> -> Regards, -> -John -> -> -> -> On 12/6/2013 2:40 AM, arnold@skeeve.com wrote: ->> Hi. ->> ->> Thanks for this. I already pushed the change you suggested about ->> version.c. Do you want to pull and regenerate this patch set? ->> Or should I just apply it all and you'll send me an updated patch? ->> ->> Finally, we need the manual updated about the build procedure. If ->> Texinfo isn't in your toolbox, you can just send me plain text and I'll ->> handle the formatting, but the manual needs to be updated and also ->> and README files. ->> ->> This is great work and it's exciting that VMS gawk is progressing ->> this way. ->> ->> Thanks, ->> ->> Arnold ->> ->> "John E. Malmberg" wrote: ->> ->>> Forgot to document that the previous strftime test was incorrect as it ->>> was not specifying a timezone on VMS versions that support timezones ->>> which made the behavior different than on Unix/Linux. The test has been ->>> fixed. ->>> ->>> All tests now passing on VAX/VMS 7.3, Alpha and IA64/VMS 8.4. ->>> Tests are still running on ALPHA/VMS 8.3, but I am expecting them to ->>> also pass. ->>> ->>> VMS build procedures no longer need to be edited when the version number ->>> changes. ->>> ->>> 2013-12-05 John E. Malmberg ->>> ->>> * New config_h.com to generate config.h ->>> ->>> * New gawk_ident.com generates ident line for link option file. ->>> ->>> * Add version_c.com to create version.c from version.in. ->>> ->>> * Remove fcntl.h covering up real fcntl.h. If an older version ->>> of VMS needs this file, the build procedure should be updated ->>> to generate it from a template. ->>> ->>> * descrip.mms: Use command files to generate files based ->>> on same input files as a Linux build. ->>> ->>> * gawkmisc.vms (files_are_same): support _USE_STD_STAT for VMS 8.x. ->>> ->>> * generate_config_vms_h_gawk.com: Generates a helper file ->>> config_vms.h to cover issues config_h.com can not handle. ->>> ->>> * vmsbuild.com: Use command files to generate files based ->>> on the same input files as a Linux build. ->>> ->>> * vms_misc.c (vms_open): VMS CRTL setting errno to ENOENT where ->>> it should be set to EMFILE. ->>> ->>> Regards, ->>> -John -> - -From wb8tyw@gmail.com Mon Dec 16 21:27:20 2013 -Return-Path: -Received: from skeeve.com (skeeve.com [127.0.0.1]) - by skeeve.com (8.14.4/8.14.4/Debian-2ubuntu2.1) with ESMTP id rBGJQJfQ002202 - for ; Mon, 16 Dec 2013 21:27:19 +0200 -X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on - frenzy.freefriends.org -X-Spam-Level: -X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, - DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW autolearn=ham - version=3.3.1 -X-Envelope-From: wb8tyw@gmail.com -X-Envelope-To: -Received: from frenzy.freefriends.org [66.54.153.139] - by skeeve.com with IMAP (fetchmail-6.3.21) - for (single-drop); Mon, 16 Dec 2013 21:27:19 +0200 (IST) -Received: from mail-ie0-f173.google.com (mail-ie0-f173.google.com [209.85.223.173]) - by freefriends.org (8.14.6/8.14.6) with ESMTP id rBG6Tatb002732 - for ; Sun, 15 Dec 2013 23:29:39 -0700 -Received: by mail-ie0-f173.google.com with SMTP id to1so5932042ieb.4 - for ; Sun, 15 Dec 2013 22:29:36 -0800 (PST) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=gmail.com; s=20120113; - h=message-id:date:from:user-agent:mime-version:to:cc:subject - :content-type; - bh=ksiNjtwxRvh74kzY1LKaRL/l+Ja2PriUxgPwwm+Igho=; - b=BiJLgaDXXU4R0IwBKeNvon0qca3q3Le4HtVArPhKruA9rRhSqfVcTRHrQ8fF1r0f5h - N28vQidBEX3PNHi9k0uzfHF1sqT7LHGxOfSS/7ipk8UWoa4BVB3taSOFAAMzTkQUeduC - 2RNaWLJHjFR4xRvkOwYqJPVikLyg2atmds6iLoxKOFbNCz+KUFQacDmaCLiibEg4pxV1 - DsZWlBKLFrl8wXF5+gy3ZAj3FafIZluCgY5rUqrfXxrV9a7kumGrgljPG84MAOT01eCe - nXnlrhJgxIAjndT7sYPSYGZkeieSagmN57kRqefNkHk9PhdF5RbY3J0PBC7r0cJn/MKE - Uh0A== -X-Received: by 10.50.154.102 with SMTP id vn6mr13663789igb.1.1387175375953; - Sun, 15 Dec 2013 22:29:35 -0800 (PST) -Received: from [192.168.0.101] (173-19-202-206.client.mchsi.com. [173.19.202.206]) - by mx.google.com with ESMTPSA id da14sm14704681igc.1.2013.12.15.22.29.33 - for - (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); - Sun, 15 Dec 2013 22:29:34 -0800 (PST) -Message-ID: <52AE9DD7.1020409@gmail.com> -Date: Mon, 16 Dec 2013 00:29:43 -0600 -From: John Malmberg -User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20130215 Thunderbird/17.0.3 -MIME-Version: 1.0 -To: Aharon Robbins -CC: "John E. Malmberg" -Subject: Updates for gawktexi.in,readme.vms -Content-Type: multipart/mixed; - boundary="------------040502020402090508010905" -Status: RO -X-Status: A - -This is a multi-part message in MIME format. ---------------040502020402090508010905 -Content-Type: text/plain; charset=ISO-8859-1; format=flowed -Content-Transfer-Encoding: 7bit - -Hello Arnold, - -These are the preliminary updates for the VMS documentation. - -I forgot to document (not sure where to put it) - - * The exit code reporting in GAWK is wrong and violates VMS - standards. This is a common problem in older ports because - the exit() was not implemented correctly, and neither was - the rest of the C runtime. Day 1 porting bug that was inevitable. - - The first problem is that if I fix it to report the correct exit - status, it would break DCL procedures written to expect the - wrong value. - - The second problem is that the new exit() call does not - allow setting the severity values and the existing gawk code - is setting them for tests to use. - - Using reverse engineering, I have determined how to encode - the correct exit codes with severity into the old exit() - API. - - If the shell is a UNIX shell: - - * The input parameters and options are handled the same as Unix. - (I have forgotten if I sent you that patch yet) - - * The exit codes are correct. The DCL severity information - is also added even though most C programs will not use them. - -I do not know if would be permissible to change the behavior to always -use the correct exit code with the severity values set. - -Existing DCL code using the severity values would not notice this change. - -I would have to document how to convert UNIX exit codes to DCL values -for people to get the original codes back. - - - -In the documentation, I have been trying to change the case of the -filenames referenced in the VMS sections to be exact instead in upper case. - - -In general, on the older ODS-2 VMS file system, the files were stored -and displayed in upper case. - -In the newer ODS-5 file system, filenames are stored in a case preserved -state and are when unpacked from a repository are still in lower case. - -The VMS DCL shell also has an optional mode /PARSE=EXTEND mode where it -handles those names. - -In the normal mode DCL converts all unquoted parameters to upper case, -and then the C runtime converts all unquoted parameters to lower case. -A slight but significant difference. - -In the extended mode, DCL and the C runtime will also not do any -conversion of parameters. - -Which means that in extended mode, the target to the MMS or MMK program -needs to be in the exact case, or it may not be found. - -When you have an NFS mounted volume, like I do, things get a bit strange -on older VMS, like VAX/VMS, because it presents lower case filenames in -upper case, and uses the $ character to indicate when the case gets -inverted. - -Example: - -TOAD> dir src_root:[gawk.readme_d]readme.vms -%DIRECT-E-OPENIN, error opening SRC_ROOT:[GAWK.README_D]README.VMS;* as -input - -TOAD> dir src_root:[gawk.$readme_$d]$readme.vms - -Directory SRC_ROOT:[GAWK.$README_$D] - -$README.VMS;1 - -On current versions of VMS that support ODS-5, the exact case of the -files are seen. - -EAGLE> dir src_root:[gawk.readme_d]readme.vms - -Directory SRC_ROOT:[gawk.README_d] - -README.VMS;1 - -This affects build procedures as they must look for both path names. - -Regards, --John - ---------------040502020402090508010905 -Content-Type: text/plain; charset=windows-1252; - name="gawktexti_in.gdiff" -Content-Transfer-Encoding: 7bit -Content-Disposition: attachment; - filename="gawktexti_in.gdiff" - ---- /src_root/gawk/doc/gawktexi.in Fri Dec 13 17:43:41 2013 -+++ /vms_root/gawk/doc/gawktexi.in Sun Dec 15 23:28:13 2013 -@@ -32713,6 +32713,9 @@ - @item - Prestandard VAX C compiler for VAX/VMS - -+@item -+GCC for VAX and Alpha has not been tested for a while. -+ - @end itemize - - @end itemize -@@ -33993,41 +33996,96 @@ - @appendixsubsubsec Compiling @command{gawk} on VMS - @cindex compiling @command{gawk} for VMS - --To compile @command{gawk} under VMS, there is a @code{DCL} command procedure that --issues all the necessary @code{CC} and @code{LINK} commands. There is --also a @file{Makefile} for use with the @code{MMS} utility. From the source --directory, use either: -+To compile @command{gawk} under VMS, there is a @code{DCL} command procedure -+that issues all the necessary @code{CC} and @code{LINK} commands. There is -+also a @file{Makefile} for use with the @code{MMS} or @code{MMK} utility. -+From the source directory, use either: - - @example --$ @kbd{@@[.VMS]VMSBUILD.COM} -+$ @kbd{@@[.vms]vmsbuild.com} - @end example - - @noindent - or: - - @example --$ @kbd{MMS/DESCRIPTION=[.VMS]DESCRIP.MMS GAWK} -+$ @kbd{MMS/DESCRIPTION=[.vms]descrip.mms gawk} - @end example -+or: -+ -+@example -+$ @kbd{MMK/DESCRIPTION=[.vms]descrip.mms gawk} -+@end example -+ -+The @code{MMK} is an open source freeware near clone of @code{MMS} and -+can better handle @code{ODS-5} volumes with upper and lower case filenames. -+@code{MMK} is available from @url{https://github.com/endlesssoftware/mmk}. -+ -+With @CODE{ODS-5} volumes and extended parsing enabled, the case of the target -+parameter may need to be exact. - - Older versions of @command{gawk} could be built with VAX C or - GNU C on VAX/VMS, as well as with DEC C, but that is no longer - supported. DEC C (also briefly known as ``Compaq C'' and now known - as ``HP C,'' but referred to here as ``DEC C'') is required. Both --@code{VMSBUILD.COM} and @code{DESCRIP.MMS} contain some obsolete support -+@code{vmsbuild.com} and @code{descrip.mms} contain some obsolete support - for the older compilers but are set up to use DEC C by default. - --@command{gawk} has been tested under Alpha/VMS 7.3-1 using Compaq C V6.4, --and on Alpha/VMS 7.3, Alpha/VMS 7.3-2, and IA64/VMS 8.3.@footnote{The IA64 --architecture is also known as ``Itanium.''} -+@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. -+Most recent builds are were using HP C V7.3 on Alpha VMS 8.3 and both -+Alpha and IA64 VMS 8.4 using HP C 7.3. -+@footnote{The IA64 architecture is also known as ``Itanium.''} -+ -+Work is currently being done for a procedure to build @code{gawk} and create -+a PCSI kit for compatible with the GNV product. -+ -+@appendixsubsubsec Compiling @command{gawk} Dynamic Extensions on VMS -+ -+Dynamic extensions need to be compiled with the same compiler options for -+floating point, pointer size, and symbol name handling as @code{gawk}. -+Alpha and Itanium should use IEEE floating point. The pointer size is 32 bits, -+and the symbol name handling is to be exact case with CRC shortening for -+symbols longer than 32 bits. -+ -+Alpha and Itanium: -+ -+@example -+/name=(as_is,short) -+/float=ieee/ieee_mode=denorm_results -+@end example -+ -+VAX: -+ -+@example -+/name=(as_is,short) -+@end example -+ -+Compile time macros needed to be defined before the first VMS supplied -+header file is included. -+ -+@example -+#if (__CRTL_VER >= 70200000) && !defined (__VAX) -+#define _LARGEFILE 1 -+#endif -+ -+#ifndef __VAX -+#ifdef __CRTL_VER -+#if __CRTL_VER >= 80200000 -+#define _USE_STD_STAT 1 -+#endif -+#endif -+#endif -+@end example - - @node VMS Installation Details - @appendixsubsubsec Installing @command{gawk} on VMS - --To install @command{gawk}, all you need is a ``foreign'' command, which is --a @code{DCL} symbol whose value begins with a dollar sign. For example: -+To use @command{gawk}, all you need is a ``foreign'' command, which is a -+@code{DCL} symbol whose value begins with a dollar sign. For example: - - @example --$ @kbd{GAWK :== $disk1:[gnubin]GAWK} -+$ @kbd{GAWK :== $disk1:[gnubin]gawk} - @end example - - @noindent -@@ -34039,10 +34097,15 @@ - @file{sylogin.com} procedure, which allows all users - to run @command{gawk}. - -+If your @command{gawk} was installed by a PCSI kit into the -+@file{GNV$GNU:} directory tree, the program will be known as -+@file{GNV$GNU:[bin]gnv$gawk.exe} and the help file will be -+@file{GNV$GNU:[vms_help]gawk.hlp}. -+ - Optionally, the help entry can be loaded into a VMS help library: - - @example --$ @kbd{LIBRARY/HELP SYS$HELP:HELPLIB [.VMS]GAWK.HLP} -+$ @kbd{LIBRARY/HELP sys$help:helplib [.vms]gawk.hlp} - @end example - - @noindent -@@ -34106,6 +34169,19 @@ - of @env{AWKPATH} is a comma-separated list of directory specifications. - When defining it, the value should be quoted so that it retains a single - translation and not a multitranslation @code{RMS} searchlist. -+ -+@node VMS GNV -+ -+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 -+to be individual PCSI packages for each component. -+@url{https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/} -+ -+The normal build procedure @command{gawk} will produce a program that -+is suitable for use with GNV. At this time work is being done to create -+the procedures for building a PCSI kit to replace the older @code{gawk} -+port. - - @ignore - @c The VMS POSIX product, also known as POSIX for OpenVMS, is long defunct - ---------------040502020402090508010905 -Content-Type: text/plain; charset=windows-1252; - name="readme_vms.gdiff" -Content-Transfer-Encoding: 7bit -Content-Disposition: attachment; - filename="readme_vms.gdiff" - ---- /src_root/gawk/readme_d/README.VMS Fri Dec 13 17:43:41 2013 -+++ /vms_root/gawk/readme_d/README.VMS Sun Dec 15 22:57:42 2013 -@@ -37,6 +37,38 @@ - GAWK was originally ported for VMS V4.6 and up. It has not been tested - with a release that old for some time. - -+Compiling dynamic extensions on VMS: -+ -+Dynamic extensions need to be compiled with the same compiler options for -+floating point, pointer size, and symbol name handling as gawk. -+Alpha and Itanium should use IEEE floating point. The pointer size is 32 bits, -+and the symbol name handling is to be exact case with CRC shortening for -+symbols longer than 32 bits. -+ -+Alpha and Itanium: -+ -+/name=(as_is,short) -+/float=ieee/ieee_mode=denorm_results -+ -+VAX: -+ -+/name=(as_is,short) -+ -+Compile time macros needed to be defined before the first VMS supplied -+header file is included. -+ -+#if (__CRTL_VER >= 70200000) && !defined (__VAX) -+#define _LARGEFILE 1 -+#endif -+ -+#ifndef __VAX -+#ifdef __CRTL_VER -+#if __CRTL_VER >= 80200000 -+#define _USE_STD_STAT 1 -+#endif -+#endif -+#endif -+ - - Installing GAWK on VMS: - -@@ -47,6 +79,10 @@ - That symbol should be placed in the user's login.com or in the system- - wide sylogin.com procedure so that it will be defined every time the - user logs on. -+ -+If your gawk was installed by a PCSI kit into the GNV$GNU: directory tree, -+the program will be known as GNV$GNU:[bin]gnv$gawk.exe and the help file -+will be GNV$GNU:[vms_help]gawk.hlp. - - Optionally, the help entry can be loaded into a VMS help library. - |$ LIBRARY/HELP SYS$HELP:HELPLIB [.VMS]GAWK.HLP - ---------------040502020402090508010905-- - -From wb8tyw@qsl.net Wed Dec 11 20:03:44 2013 -Return-Path: -Received: from skeeve.com (skeeve.com [127.0.0.1]) - by skeeve.com (8.14.4/8.14.4/Debian-2ubuntu2.1) with ESMTP id rBBI3gNX002464 - for ; Wed, 11 Dec 2013 20:03:43 +0200 -X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on - frenzy.freefriends.org -X-Spam-Level: -X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM - autolearn=ham version=3.3.1 -X-Envelope-From: wb8tyw@qsl.net -X-Envelope-To: -Received: from frenzy.freefriends.org [66.54.153.139] - by skeeve.com with IMAP (fetchmail-6.3.21) - for (single-drop); Wed, 11 Dec 2013 20:03:43 +0200 (IST) -Received: from Encompasserve.org (Eisner.encompasserve.org [67.53.90.116]) - by freefriends.org (8.14.6/8.14.6) with ESMTP id rBB5jaW9020988 - for ; Tue, 10 Dec 2013 22:45:40 -0700 -Received: from [192.168.0.101] - (173-19-202-206.client.mchsi.com [173.19.202.206]) - by Encompasserve.org (PMDF V6.6 #13031) - with ESMTPSA id <01P1SYL5LELG002FZE@Encompasserve.org> for arnold@skeeve.com; - Tue, 10 Dec 2013 23:45:35 -0600 (CST) -Date: Tue, 10 Dec 2013 23:45:36 -0600 -From: "John E. Malmberg" -Subject: Re: Some questions... -In-reply-to: <201312110426.rBB4QXXc003297@skeeve.com> -To: Aharon Robbins -Cc: wb8tyw@qsl.net -Message-id: <52A7FC00.2040905@qsl.net> -MIME-version: 1.0 -Content-type: text/plain; charset=ISO-8859-1; format=flowed -Content-transfer-encoding: 7BIT -User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20130215 - Thunderbird/17.0.3 -References: <529A9537.7090404@qsl.net> <201312110426.rBB4QXXc003297@skeeve.com> -Status: R - -On 12/10/2013 10:26 PM, Aharon Robbins wrote: -> Hi. Some questions about your changes. -> -> 1. I notice that there is at least one instance of #if __VMS, where as -> it seems most code uses #if VMS. Is that on purpose? If not, which -> is correct? - -VMS is a macro historically pre-defined by C compilers on C before the -ANSI rules. - -Under strict ANSI rules, a standards compliant compiler is not allowed -to pre-define macros that are not prefixed by "__". - -Which means that you can not count on the VMS macro being defined unless -you do it yourself. - -So __VMS is the ANSI correct definition. But it would be a lot of work -to change all the code. - -The vms_config.h that is now generated has these lines in it to make -sure that VMS is defined. - -#ifdef __VMS /* ANSI compliant */ -#ifndef VMS /* PRE-ansi */ -#define VMS 1 -#endif -#endif - -This may be needed for other architectures. It only shows up as an -issue if you set a "strict" compliance flag on the compile command. - -> 2. For the include of the main wrapper. Gawk already has a routine -> os_arg_fixup which is intended to manipulate argc and argv as needed -> by an OS-specific routine before main() parses it. A quick look at -> the wrapper looks to me like it could be made to fit within that framework, -> which would keep #if and the include out of the mainline code. - -I can look at that. I can also look to see if I can move the logic from -vms_crtl_init.c into it in a way that would sidestep that it has no -copyright notice at all. The result would be code that is almost -identical to code that is in the official Perl distribution. - -GNV was started as a user project and when the VMS POSIX product was -dropped and they needed a Unix like environment, Digital took over the -GNV product, but did not really do much to keep it up to date. - -The routine in vms_crtl_init.c is actually called before main() is -called, so just linking a module with it in is all that it takes to -activate the change. Unfortunately I do not know how to get it to -magically fix up the argv array. - -> If that looks reasonable to you, can you make that change? You can send -> it as a diff against what you currently have already done. - -I will look at it tomorrow night. I also found another change needed -for vms_args.c to work properly under a bash shell. - -> I'm sorry about the hassle on the copyrights, but I really have to play -> this game by the FSF rules. I hope we can get it clarified soon -> so that I can include the files in the dist. - -I hope so. I have not seen a reply from Karl yet. He did say that -there are other options. - -This would clear the way for getting the similar code accepted into the -Bash and coreutils repositories. I have a report that the first bash -4.3 beta built on VMS and looked real good on the test run. - -I am currently working on adapting the packaging scripts from bash and -coreutils to gawk. Each product has had it unique features, so I have -not yet come up with a generic set of scripts. - -This is a preview what will be coming: - -backup_gawk_src.com - Builds a VMS equivalent to tar archive. By -placing the source in the PCSI kit, it covers the requirement of -providing source somewhere with the binary. - -build_gawk_pcsi_desc.com - Creates a VMS PCSI package manifest file. - -build_gawk_pcsi_text.com - text output by the VMS PCSI package installer. - -compare_gawk_source.com - I have the source checked out on an NFS -server. The backup program needs me to copy it to a VMS volume first. -This procedure makes sure that the two copies are the same and ready for -backup. - -gawk_alias_setup.com - Sets up gawk and awk links to gnv$gawk.exe. -Needed to repair when sins of the past partially break an install. - -gawk_verb.cld - for gawk to use gnv$gawk.exe as an image. Different -than gawk.cld. To properly add an image to the VMS command table, it -needs a prefix. I have "GNV$" registered as a prefix for this purpose. - -gnv_gawk_kit_name.com - Calculates the VMS PCSI package name, used for -both file names and file contents. - -gnv_gawk_startup.com - Run at VMS startup to make sure that the -environment is set up properly for gawk. - -pcsi_gawk_file_list.txt - Source file for build_gawk_pcsi_desc.com. - -remove_old_gawk.com - Needed to properly clean up sins of the past. -Only touches the the GNV provided gawk and awk programs. - -stage_gawk_install.com - Does a pre-install into a fake "root" directory -tree for the kitting procedure to pull files out of. - -Regards, --John - -- cgit v1.2.3 From c32da51ad91ff617b9e0ee60ed2ffd1baa8b0047 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 14 Jan 2014 22:28:28 +0200 Subject: Update version for test tarball. --- configure | 20 +- configure.ac | 2 +- pc/config.h | 12 +- po/gawk.pot | 1041 +++++++++++++++++++++++++++++----------------------------- 4 files changed, 541 insertions(+), 534 deletions(-) diff --git a/configure b/configure index 7ee850e6..c3068aa6 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for GNU Awk 4.1.0a. +# Generated by GNU Autoconf 2.69 for GNU Awk 4.1.0b. # # Report bugs to . # @@ -580,8 +580,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GNU Awk' PACKAGE_TARNAME='gawk' -PACKAGE_VERSION='4.1.0a' -PACKAGE_STRING='GNU Awk 4.1.0a' +PACKAGE_VERSION='4.1.0b' +PACKAGE_STRING='GNU Awk 4.1.0b' PACKAGE_BUGREPORT='bug-gawk@gnu.org' PACKAGE_URL='http://www.gnu.org/software/gawk/' @@ -1324,7 +1324,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures GNU Awk 4.1.0a to adapt to many kinds of systems. +\`configure' configures GNU Awk 4.1.0b to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1394,7 +1394,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GNU Awk 4.1.0a:";; + short | recursive ) echo "Configuration of GNU Awk 4.1.0b:";; esac cat <<\_ACEOF @@ -1512,7 +1512,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -GNU Awk configure 4.1.0a +GNU Awk configure 4.1.0b generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2221,7 +2221,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by GNU Awk $as_me 4.1.0a, which was +It was created by GNU Awk $as_me 4.1.0b, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3104,7 +3104,7 @@ fi # Define the identity of the package. PACKAGE='gawk' - VERSION='4.1.0a' + VERSION='4.1.0b' cat >>confdefs.h <<_ACEOF @@ -11533,7 +11533,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by GNU Awk $as_me 4.1.0a, which was +This file was extended by GNU Awk $as_me 4.1.0b, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -11601,7 +11601,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -GNU Awk config.status 4.1.0a +GNU Awk config.status 4.1.0b configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index e58d9590..12f3ee78 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ dnl dnl Process this file with autoconf to produce a configure script. -AC_INIT([GNU Awk], 4.1.0a, bug-gawk@gnu.org, gawk) +AC_INIT([GNU Awk], 4.1.0b, bug-gawk@gnu.org, gawk) # This is a hack. Different versions of install on different systems # are just too different. Chuck it and use install-sh. diff --git a/pc/config.h b/pc/config.h index a07228c9..4314ddbb 100644 --- a/pc/config.h +++ b/pc/config.h @@ -49,9 +49,6 @@ #define HAVE_DECL_TZNAME 1 #endif -/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ -#undef HAVE_DOPRNT - /* Define to 1 if you have the header file. */ #define HAVE_FCNTL_H 1 @@ -372,9 +369,6 @@ #define HAVE_USLEEP 1 #endif -/* Define to 1 if you have the `vprintf' function. */ -#define HAVE_VPRINTF 1 - /* Define to 1 if you have the header file. */ #ifdef __MINGW32__ #define HAVE_WCHAR_H 1 @@ -429,7 +423,7 @@ #define PACKAGE_NAME "GNU Awk" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "GNU Awk 4.1.0a" +#define PACKAGE_STRING "GNU Awk 4.1.0b" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "gawk" @@ -438,7 +432,7 @@ #define PACKAGE_URL "http://www.gnu.org/software/gawk/" /* Define to the version of this package. */ -#define PACKAGE_VERSION "4.1.0a" +#define PACKAGE_VERSION "4.1.0b" /* Define to 1 if *printf supports %F format */ #undef PRINTF_HAS_F_FORMAT @@ -500,7 +494,7 @@ /* Version number of package */ -#define VERSION "4.1.0a" +#define VERSION "4.1.0b" /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE diff --git a/po/gawk.pot b/po/gawk.pot index 6e4582f5..527a4996 100644 --- a/po/gawk.pot +++ b/po/gawk.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gawk 4.1.0\n" +"Project-Id-Version: gawk 4.1.0b\n" "Report-Msgid-Bugs-To: arnold@skeeve.com\n" -"POT-Creation-Date: 2013-05-09 16:05+0300\n" +"POT-Creation-Date: 2014-01-14 22:23+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,84 +17,84 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: array.c:254 +#: array.c:256 #, c-format msgid "from %s" msgstr "" -#: array.c:354 +#: array.c:357 msgid "attempt to use a scalar value as array" msgstr "" -#: array.c:356 +#: array.c:359 #, c-format msgid "attempt to use scalar parameter `%s' as an array" msgstr "" -#: array.c:359 +#: array.c:362 #, c-format msgid "attempt to use scalar `%s' as an array" msgstr "" -#: array.c:406 array.c:573 builtin.c:85 builtin.c:1591 builtin.c:1637 -#: builtin.c:1650 builtin.c:2078 builtin.c:2092 eval.c:1121 eval.c:1125 -#: eval.c:1524 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" msgstr "" -#: array.c:580 +#: array.c:583 #, c-format msgid "delete: index `%s' not in array `%s'" msgstr "" -#: array.c:594 +#: array.c:597 #, c-format msgid "attempt to use scalar `%s[\"%.*s\"]' as an array" msgstr "" -#: array.c:773 +#: array.c:776 msgid "adump: first argument not an array" msgstr "" -#: array.c:812 +#: array.c:815 msgid "asort: second argument not an array" msgstr "" -#: array.c:813 +#: array.c:816 msgid "asorti: second argument not an array" msgstr "" -#: array.c:820 +#: array.c:823 msgid "asort: first argument not an array" msgstr "" -#: array.c:821 +#: array.c:824 msgid "asorti: first argument not an array" msgstr "" -#: array.c:828 +#: array.c:831 msgid "asort: cannot use a subarray of first arg for second arg" msgstr "" -#: array.c:829 +#: array.c:832 msgid "asorti: cannot use a subarray of first arg for second arg" msgstr "" -#: array.c:834 +#: array.c:837 msgid "asort: cannot use a subarray of second arg for first arg" msgstr "" -#: array.c:835 +#: array.c:838 msgid "asorti: cannot use a subarray of second arg for first arg" msgstr "" -#: array.c:1309 +#: array.c:1314 #, c-format msgid "`%s' is invalid as a function name" msgstr "" -#: array.c:1313 +#: array.c:1318 #, c-format msgid "sort comparison function `%s' is not defined" msgstr "" @@ -228,11 +228,11 @@ msgstr "" msgid "invalid subscript expression" msgstr "" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:119 +#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "" -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:151 +#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "" @@ -240,8 +240,8 @@ msgstr "" msgid "unexpected newline or end of string" msgstr "" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:517 debug.c:533 -#: debug.c:2792 debug.c:5040 +#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 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 "" @@ -251,7 +251,7 @@ msgstr "" msgid "can't open shared library `%s' for reading (%s)" msgstr "" -#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:130 debug.c:5191 +#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "" @@ -426,7 +426,7 @@ msgstr "" msgid "function `%s': parameter `%s' shadows global variable" msgstr "" -#: awkgram.y:4102 debug.c:4021 debug.c:4064 debug.c:5189 +#: awkgram.y:4102 debug.c:4041 debug.c:4084 debug.c:5204 #, c-format msgid "could not open `%s' for writing (%s)" msgstr "" @@ -468,435 +468,445 @@ msgstr "" msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d" msgstr "" -#: awkgram.y:4366 awkgram.y:4372 +#: awkgram.y:4359 awkgram.y:4365 #, c-format msgid "function `%s' called but never defined" msgstr "" -#: awkgram.y:4376 +#: awkgram.y:4369 #, c-format msgid "function `%s' defined but never called directly" msgstr "" -#: awkgram.y:4408 +#: awkgram.y:4401 #, c-format msgid "regexp constant for parameter #%d yields boolean value" msgstr "" -#: awkgram.y:4467 +#: awkgram.y:4460 #, c-format msgid "" "function `%s' called with space between name and `(',\n" "or used as a variable or an array" msgstr "" -#: awkgram.y:4703 +#: awkgram.y:4696 msgid "division by zero attempted" msgstr "" -#: awkgram.y:4712 +#: awkgram.y:4705 #, c-format msgid "division by zero attempted in `%%'" msgstr "" -#: builtin.c:128 +#: awkgram.y:5025 +msgid "" +"cannot assign a value to the result of a field post-increment expression" +msgstr "" + +#: awkgram.y:5028 +#, c-format +msgid "invalid target of assignment (opcode %s)" +msgstr "" + +#: builtin.c:133 #, c-format msgid "%s to \"%s\" failed (%s)" msgstr "" -#: builtin.c:129 +#: builtin.c:134 msgid "standard output" msgstr "" -#: builtin.c:143 +#: builtin.c:148 msgid "exp: received non-numeric argument" msgstr "" -#: builtin.c:149 +#: builtin.c:154 #, c-format msgid "exp: argument %g is out of range" msgstr "" -#: builtin.c:224 +#: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" msgstr "" -#: builtin.c:227 +#: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" msgstr "" -#: builtin.c:239 +#: builtin.c:244 #, c-format msgid "fflush: `%s' is not an open file, pipe or co-process" msgstr "" -#: builtin.c:357 +#: builtin.c:362 msgid "index: received non-string first argument" msgstr "" -#: builtin.c:359 +#: builtin.c:364 msgid "index: received non-string second argument" msgstr "" -#: builtin.c:483 mpfr.c:757 +#: builtin.c:488 mpfr.c:757 msgid "int: received non-numeric argument" msgstr "" -#: builtin.c:520 +#: builtin.c:525 msgid "length: received array argument" msgstr "" -#: builtin.c:523 +#: builtin.c:528 msgid "`length(array)' is a gawk extension" msgstr "" -#: builtin.c:539 +#: builtin.c:544 msgid "length: received non-string argument" msgstr "" -#: builtin.c:570 +#: builtin.c:575 msgid "log: received non-numeric argument" msgstr "" -#: builtin.c:573 +#: builtin.c:578 #, c-format msgid "log: received negative argument %g" msgstr "" -#: builtin.c:771 builtin.c:776 +#: builtin.c:776 builtin.c:781 msgid "fatal: must use `count$' on all formats or none" msgstr "" -#: builtin.c:846 +#: builtin.c:851 #, c-format msgid "field width is ignored for `%%' specifier" msgstr "" -#: builtin.c:848 +#: builtin.c:853 #, c-format msgid "precision is ignored for `%%' specifier" msgstr "" -#: builtin.c:850 +#: builtin.c:855 #, c-format msgid "field width and precision are ignored for `%%' specifier" msgstr "" -#: builtin.c:901 +#: builtin.c:906 msgid "fatal: `$' is not permitted in awk formats" msgstr "" -#: builtin.c:910 +#: builtin.c:915 msgid "fatal: arg count with `$' must be > 0" msgstr "" -#: builtin.c:914 +#: builtin.c:919 #, c-format msgid "fatal: arg count %ld greater than total number of supplied arguments" msgstr "" -#: builtin.c:918 +#: builtin.c:923 msgid "fatal: `$' not permitted after period in format" msgstr "" -#: builtin.c:934 +#: builtin.c:939 msgid "fatal: no `$' supplied for positional field width or precision" msgstr "" -#: builtin.c:1006 +#: builtin.c:1011 msgid "`l' is meaningless in awk formats; ignored" msgstr "" -#: builtin.c:1010 +#: builtin.c:1015 msgid "fatal: `l' is not permitted in POSIX awk formats" msgstr "" -#: builtin.c:1023 +#: builtin.c:1028 msgid "`L' is meaningless in awk formats; ignored" msgstr "" -#: builtin.c:1027 +#: builtin.c:1032 msgid "fatal: `L' is not permitted in POSIX awk formats" msgstr "" -#: builtin.c:1040 +#: builtin.c:1045 msgid "`h' is meaningless in awk formats; ignored" msgstr "" -#: builtin.c:1044 +#: builtin.c:1049 msgid "fatal: `h' is not permitted in POSIX awk formats" msgstr "" -#: builtin.c:1439 +#: builtin.c:1447 #, c-format msgid "[s]printf: value %g is out of range for `%%%c' format" msgstr "" -#: builtin.c:1537 +#: builtin.c:1545 #, c-format msgid "ignoring unknown format specifier character `%c': no argument converted" msgstr "" -#: builtin.c:1542 +#: builtin.c:1550 msgid "fatal: not enough arguments to satisfy format string" msgstr "" -#: builtin.c:1544 +#: builtin.c:1552 msgid "^ ran out for this one" msgstr "" -#: builtin.c:1551 +#: builtin.c:1559 msgid "[s]printf: format specifier does not have control letter" msgstr "" -#: builtin.c:1554 +#: builtin.c:1562 msgid "too many arguments supplied for format string" msgstr "" -#: builtin.c:1610 +#: builtin.c:1618 msgid "sprintf: no arguments" msgstr "" -#: builtin.c:1633 builtin.c:1644 +#: builtin.c:1641 builtin.c:1652 msgid "printf: no arguments" msgstr "" -#: builtin.c:1687 +#: builtin.c:1695 msgid "sqrt: received non-numeric argument" msgstr "" -#: builtin.c:1691 +#: builtin.c:1699 #, c-format msgid "sqrt: called with negative argument %g" msgstr "" -#: builtin.c:1722 +#: builtin.c:1730 #, c-format msgid "substr: length %g is not >= 1" msgstr "" -#: builtin.c:1724 +#: builtin.c:1732 #, c-format msgid "substr: length %g is not >= 0" msgstr "" -#: builtin.c:1731 +#: builtin.c:1739 #, c-format msgid "substr: non-integer length %g will be truncated" msgstr "" -#: builtin.c:1736 +#: builtin.c:1744 #, c-format msgid "substr: length %g too big for string indexing, truncating to %g" msgstr "" -#: builtin.c:1748 +#: builtin.c:1756 #, c-format msgid "substr: start index %g is invalid, using 1" msgstr "" -#: builtin.c:1753 +#: builtin.c:1761 #, c-format msgid "substr: non-integer start index %g will be truncated" msgstr "" -#: builtin.c:1778 +#: builtin.c:1786 msgid "substr: source string is zero length" msgstr "" -#: builtin.c:1794 +#: builtin.c:1802 #, c-format msgid "substr: start index %g is past end of string" msgstr "" -#: builtin.c:1802 +#: builtin.c:1810 #, c-format msgid "" "substr: length %g at start index %g exceeds length of first argument (%lu)" msgstr "" -#: builtin.c:1876 +#: builtin.c:1884 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" msgstr "" -#: builtin.c:1899 +#: builtin.c:1907 msgid "strftime: received non-numeric second argument" msgstr "" -#: builtin.c:1903 +#: builtin.c:1911 msgid "strftime: second argument less than 0 or too big for time_t" msgstr "" -#: builtin.c:1910 +#: builtin.c:1918 msgid "strftime: received non-string first argument" msgstr "" -#: builtin.c:1917 +#: builtin.c:1925 msgid "strftime: received empty format string" msgstr "" -#: builtin.c:1983 +#: builtin.c:1991 msgid "mktime: received non-string argument" msgstr "" -#: builtin.c:2000 +#: builtin.c:2008 msgid "mktime: at least one of the values is out of the default range" msgstr "" -#: builtin.c:2035 +#: builtin.c:2043 msgid "'system' function not allowed in sandbox mode" msgstr "" -#: builtin.c:2040 +#: builtin.c:2048 msgid "system: received non-string argument" msgstr "" -#: builtin.c:2160 +#: builtin.c:2168 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "" -#: builtin.c:2247 +#: builtin.c:2255 msgid "tolower: received non-string argument" msgstr "" -#: builtin.c:2281 +#: builtin.c:2289 msgid "toupper: received non-string argument" msgstr "" -#: builtin.c:2317 mpfr.c:672 +#: builtin.c:2325 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "" -#: builtin.c:2319 mpfr.c:674 +#: builtin.c:2327 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "" -#: builtin.c:2338 +#: builtin.c:2346 msgid "sin: received non-numeric argument" msgstr "" -#: builtin.c:2354 +#: builtin.c:2362 msgid "cos: received non-numeric argument" msgstr "" -#: builtin.c:2407 mpfr.c:1156 +#: builtin.c:2415 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "" -#: builtin.c:2438 +#: builtin.c:2446 msgid "match: third argument is not an array" msgstr "" -#: builtin.c:2710 +#: builtin.c:2718 msgid "gensub: third argument of 0 treated as 1" msgstr "" -#: builtin.c:3003 +#: builtin.c:3014 msgid "lshift: received non-numeric first argument" msgstr "" -#: builtin.c:3005 +#: builtin.c:3016 msgid "lshift: received non-numeric second argument" msgstr "" -#: builtin.c:3011 +#: builtin.c:3022 #, c-format msgid "lshift(%f, %f): negative values will give strange results" msgstr "" -#: builtin.c:3013 +#: builtin.c:3024 #, c-format msgid "lshift(%f, %f): fractional values will be truncated" msgstr "" -#: builtin.c:3015 +#: builtin.c:3026 #, c-format msgid "lshift(%f, %f): too large shift value will give strange results" msgstr "" -#: builtin.c:3040 +#: builtin.c:3051 msgid "rshift: received non-numeric first argument" msgstr "" -#: builtin.c:3042 +#: builtin.c:3053 msgid "rshift: received non-numeric second argument" msgstr "" -#: builtin.c:3048 +#: builtin.c:3059 #, c-format msgid "rshift(%f, %f): negative values will give strange results" msgstr "" -#: builtin.c:3050 +#: builtin.c:3061 #, c-format msgid "rshift(%f, %f): fractional values will be truncated" msgstr "" -#: builtin.c:3052 +#: builtin.c:3063 #, c-format msgid "rshift(%f, %f): too large shift value will give strange results" msgstr "" -#: builtin.c:3077 mpfr.c:968 +#: builtin.c:3088 mpfr.c:968 msgid "and: called with less than two arguments" msgstr "" -#: builtin.c:3082 +#: builtin.c:3093 #, c-format msgid "and: argument %d is non-numeric" msgstr "" -#: builtin.c:3086 +#: builtin.c:3097 #, c-format msgid "and: argument %d negative value %g will give strange results" msgstr "" -#: builtin.c:3109 mpfr.c:1000 +#: builtin.c:3120 mpfr.c:1000 msgid "or: called with less than two arguments" msgstr "" -#: builtin.c:3114 +#: builtin.c:3125 #, c-format msgid "or: argument %d is non-numeric" msgstr "" -#: builtin.c:3118 +#: builtin.c:3129 #, c-format msgid "or: argument %d negative value %g will give strange results" msgstr "" -#: builtin.c:3140 mpfr.c:1031 +#: builtin.c:3151 mpfr.c:1031 msgid "xor: called with less than two arguments" msgstr "" -#: builtin.c:3146 +#: builtin.c:3157 #, c-format msgid "xor: argument %d is non-numeric" msgstr "" -#: builtin.c:3150 +#: builtin.c:3161 #, c-format msgid "xor: argument %d negative value %g will give strange results" msgstr "" -#: builtin.c:3175 mpfr.c:787 +#: builtin.c:3186 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "" -#: builtin.c:3181 +#: builtin.c:3192 #, c-format msgid "compl(%f): negative value will give strange results" msgstr "" -#: builtin.c:3183 +#: builtin.c:3194 #, c-format msgid "compl(%f): fractional value will be truncated" msgstr "" -#: builtin.c:3352 +#: builtin.c:3363 #, c-format msgid "dcgettext: `%s' is not a valid locale category" msgstr "" @@ -1018,8 +1028,8 @@ msgstr "" #: command.y:823 msgid "" -"commands [num] - starts a list of commands to be executed at a breakpoint" -"(watchpoint) hit." +"commands [num] - starts a list of commands to be executed at a " +"breakpoint(watchpoint) hit." msgstr "" #: command.y:825 @@ -1176,7 +1186,7 @@ msgstr "" msgid "watch var - set a watchpoint for a variable." msgstr "" -#: command.y:1011 debug.c:395 msg.c:128 +#: command.y:1011 debug.c:401 msg.c:135 #, c-format msgid "error: " msgstr "" @@ -1214,520 +1224,520 @@ msgstr "" msgid "undefined command: %s\n" msgstr "" -#: debug.c:246 +#: debug.c:252 msgid "set or show the number of lines to keep in history file." msgstr "" -#: debug.c:248 +#: debug.c:254 msgid "set or show the list command window size." msgstr "" -#: debug.c:250 +#: debug.c:256 msgid "set or show gawk output file." msgstr "" -#: debug.c:252 +#: debug.c:258 msgid "set or show debugger prompt." msgstr "" -#: debug.c:254 +#: debug.c:260 msgid "(un)set or show saving of command history (value=on|off)." msgstr "" -#: debug.c:256 +#: debug.c:262 msgid "(un)set or show saving of options (value=on|off)." msgstr "" -#: debug.c:258 +#: debug.c:264 msgid "(un)set or show instruction tracing (value=on|off)." msgstr "" -#: debug.c:339 +#: debug.c:345 msgid "program not running." msgstr "" -#: debug.c:442 debug.c:597 +#: debug.c:448 debug.c:606 #, c-format msgid "can't read source file `%s' (%s)" msgstr "" -#: debug.c:447 +#: debug.c:453 #, c-format msgid "source file `%s' is empty.\n" msgstr "" -#: debug.c:474 +#: debug.c:480 msgid "no current source file." msgstr "" -#: debug.c:499 +#: debug.c:505 #, c-format msgid "cannot find source file named `%s' (%s)" msgstr "" -#: debug.c:523 +#: debug.c:529 #, c-format msgid "WARNING: source file `%s' modified since program compilation.\n" msgstr "" -#: debug.c:542 +#: debug.c:551 #, c-format msgid "line number %d out of range; `%s' has %d lines" msgstr "" -#: debug.c:602 +#: debug.c:611 #, c-format msgid "unexpected eof while reading file `%s', line %d" msgstr "" -#: debug.c:611 +#: debug.c:620 #, c-format msgid "source file `%s' modified since start of program execution" msgstr "" -#: debug.c:723 +#: debug.c:732 #, c-format msgid "Current source file: %s\n" msgstr "" -#: debug.c:724 +#: debug.c:733 #, c-format msgid "Number of lines: %d\n" msgstr "" -#: debug.c:731 +#: debug.c:740 #, c-format msgid "Source file (lines): %s (%d)\n" msgstr "" -#: debug.c:745 +#: debug.c:754 msgid "" "Number Disp Enabled Location\n" "\n" msgstr "" -#: debug.c:756 +#: debug.c:765 #, c-format msgid "\tno of hits = %ld\n" msgstr "" -#: debug.c:758 +#: debug.c:767 #, c-format msgid "\tignore next %ld hit(s)\n" msgstr "" -#: debug.c:760 debug.c:900 +#: debug.c:769 debug.c:909 #, c-format msgid "\tstop condition: %s\n" msgstr "" -#: debug.c:762 debug.c:902 +#: debug.c:771 debug.c:911 msgid "\tcommands:\n" msgstr "" -#: debug.c:784 +#: debug.c:793 #, c-format msgid "Current frame: " msgstr "" -#: debug.c:787 +#: debug.c:796 #, c-format msgid "Called by frame: " msgstr "" -#: debug.c:791 +#: debug.c:800 #, c-format msgid "Caller of frame: " msgstr "" -#: debug.c:809 +#: debug.c:818 #, c-format msgid "None in main().\n" msgstr "" -#: debug.c:839 +#: debug.c:848 msgid "No arguments.\n" msgstr "" -#: debug.c:840 +#: debug.c:849 msgid "No locals.\n" msgstr "" -#: debug.c:848 +#: debug.c:857 msgid "" "All defined variables:\n" "\n" msgstr "" -#: debug.c:858 +#: debug.c:867 msgid "" "All defined functions:\n" "\n" msgstr "" -#: debug.c:877 +#: debug.c:886 msgid "" "Auto-display variables:\n" "\n" msgstr "" -#: debug.c:880 +#: debug.c:889 msgid "" "Watch variables:\n" "\n" msgstr "" -#: debug.c:1020 +#: debug.c:1029 #, c-format msgid "no symbol `%s' in current context\n" msgstr "" -#: debug.c:1032 debug.c:1418 +#: debug.c:1041 debug.c:1427 #, c-format msgid "`%s' is not an array\n" msgstr "" -#: debug.c:1046 +#: debug.c:1055 #, c-format msgid "$%ld = uninitialized field\n" msgstr "" -#: debug.c:1067 +#: debug.c:1076 #, c-format msgid "array `%s' is empty\n" msgstr "" -#: debug.c:1110 debug.c:1162 +#: debug.c:1119 debug.c:1171 #, c-format msgid "[\"%s\"] not in array `%s'\n" msgstr "" -#: debug.c:1166 +#: debug.c:1175 #, c-format msgid "`%s[\"%s\"]' is not an array\n" msgstr "" -#: debug.c:1227 debug.c:4949 +#: debug.c:1236 debug.c:4964 #, c-format msgid "`%s' is not a scalar variable" msgstr "" -#: debug.c:1249 debug.c:4979 +#: debug.c:1258 debug.c:4994 #, c-format msgid "attempt to use array `%s[\"%s\"]' in a scalar context" msgstr "" -#: debug.c:1271 debug.c:4990 +#: debug.c:1280 debug.c:5005 #, c-format msgid "attempt to use scalar `%s[\"%s\"]' as array" msgstr "" -#: debug.c:1414 +#: debug.c:1423 #, c-format msgid "`%s' is a function" msgstr "" -#: debug.c:1456 +#: debug.c:1465 #, c-format msgid "watchpoint %d is unconditional\n" msgstr "" -#: debug.c:1490 +#: debug.c:1499 #, c-format msgid "No display item numbered %ld" msgstr "" -#: debug.c:1493 +#: debug.c:1502 #, c-format msgid "No watch item numbered %ld" msgstr "" -#: debug.c:1519 +#: debug.c:1528 #, c-format msgid "%d: [\"%s\"] not in array `%s'\n" msgstr "" -#: debug.c:1758 +#: debug.c:1767 msgid "attempt to use scalar value as array" msgstr "" -#: debug.c:1847 +#: debug.c:1856 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" msgstr "" -#: debug.c:1858 +#: debug.c:1867 #, c-format msgid "Display %d deleted because parameter is out of scope.\n" msgstr "" -#: debug.c:1891 +#: debug.c:1900 #, c-format msgid " in file `%s', line %d\n" msgstr "" -#: debug.c:1912 +#: debug.c:1921 #, c-format msgid " at `%s':%d" msgstr "" -#: debug.c:1928 debug.c:1991 +#: debug.c:1937 debug.c:2000 #, c-format msgid "#%ld\tin " msgstr "" -#: debug.c:1965 +#: debug.c:1974 #, c-format msgid "More stack frames follow ...\n" msgstr "" -#: debug.c:2008 +#: debug.c:2017 msgid "invalid frame number" msgstr "" -#: debug.c:2180 +#: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" msgstr "" -#: debug.c:2187 +#: debug.c:2207 #, c-format msgid "Note: breakpoint %d (enabled), also set at %s:%d" msgstr "" -#: debug.c:2194 +#: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" msgstr "" -#: debug.c:2201 +#: debug.c:2221 #, c-format msgid "Note: breakpoint %d (disabled), also set at %s:%d" msgstr "" -#: debug.c:2218 +#: debug.c:2238 #, c-format msgid "Breakpoint %d set at file `%s', line %d\n" msgstr "" -#: debug.c:2320 +#: debug.c:2340 #, c-format msgid "Can't set breakpoint in file `%s'\n" msgstr "" -#: debug.c:2349 debug.c:2472 debug.c:3330 +#: debug.c:2369 debug.c:2492 debug.c:3350 #, c-format msgid "line number %d in file `%s' out of range" msgstr "" -#: debug.c:2353 +#: debug.c:2373 #, c-format msgid "Can't find rule!!!\n" msgstr "" -#: debug.c:2355 +#: debug.c:2375 #, c-format msgid "Can't set breakpoint at `%s':%d\n" msgstr "" -#: debug.c:2367 +#: debug.c:2387 #, c-format msgid "Can't set breakpoint in function `%s'\n" msgstr "" -#: debug.c:2383 +#: debug.c:2403 #, c-format msgid "breakpoint %d set at file `%s', line %d is unconditional\n" msgstr "" -#: debug.c:2488 debug.c:2510 +#: debug.c:2508 debug.c:2530 #, c-format msgid "Deleted breakpoint %d" msgstr "" -#: debug.c:2494 +#: debug.c:2514 #, c-format msgid "No breakpoint(s) at entry to function `%s'\n" msgstr "" -#: debug.c:2521 +#: debug.c:2541 #, c-format msgid "No breakpoint at file `%s', line #%d\n" msgstr "" -#: debug.c:2576 debug.c:2617 debug.c:2637 debug.c:2680 +#: debug.c:2596 debug.c:2637 debug.c:2657 debug.c:2700 msgid "invalid breakpoint number" msgstr "" -#: debug.c:2592 +#: debug.c:2612 msgid "Delete all breakpoints? (y or n) " msgstr "" -#: debug.c:2593 debug.c:2903 debug.c:2956 +#: debug.c:2613 debug.c:2923 debug.c:2976 msgid "y" msgstr "" -#: debug.c:2642 +#: debug.c:2662 #, c-format msgid "Will ignore next %ld crossing(s) of breakpoint %d.\n" msgstr "" -#: debug.c:2646 +#: debug.c:2666 #, c-format msgid "Will stop next time breakpoint %d is reached.\n" msgstr "" -#: debug.c:2763 +#: debug.c:2783 #, c-format msgid "Can only debug programs provided with the `-f' option.\n" msgstr "" -#: debug.c:2888 +#: debug.c:2908 #, c-format msgid "Failed to restart debugger" msgstr "" -#: debug.c:2902 +#: debug.c:2922 msgid "Program already running. Restart from beginning (y/n)? " msgstr "" -#: debug.c:2906 +#: debug.c:2926 #, c-format msgid "Program not restarted\n" msgstr "" -#: debug.c:2916 +#: debug.c:2936 #, c-format msgid "error: cannot restart, operation not allowed\n" msgstr "" -#: debug.c:2922 +#: debug.c:2942 #, c-format msgid "error (%s): cannot restart, ignoring rest of the commands\n" msgstr "" -#: debug.c:2930 +#: debug.c:2950 #, c-format msgid "Starting program: \n" msgstr "" -#: debug.c:2939 +#: debug.c:2959 #, c-format msgid "Program exited %s with exit value: %d\n" msgstr "" -#: debug.c:2955 +#: debug.c:2975 msgid "The program is running. Exit anyway (y/n)? " msgstr "" -#: debug.c:2990 +#: debug.c:3010 #, c-format msgid "Not stopped at any breakpoint; argument ignored.\n" msgstr "" -#: debug.c:2995 +#: debug.c:3015 #, c-format msgid "invalid breakpoint number %d." msgstr "" -#: debug.c:3000 +#: debug.c:3020 #, c-format msgid "Will ignore next %ld crossings of breakpoint %d.\n" msgstr "" -#: debug.c:3187 +#: debug.c:3207 #, c-format msgid "'finish' not meaningful in the outermost frame main()\n" msgstr "" -#: debug.c:3192 +#: debug.c:3212 #, c-format msgid "Run till return from " msgstr "" -#: debug.c:3235 +#: debug.c:3255 #, c-format msgid "'return' not meaningful in the outermost frame main()\n" msgstr "" -#: debug.c:3349 +#: debug.c:3369 #, c-format msgid "Can't find specified location in function `%s'\n" msgstr "" -#: debug.c:3357 +#: debug.c:3377 #, c-format msgid "invalid source line %d in file `%s'" msgstr "" -#: debug.c:3372 +#: debug.c:3392 #, c-format msgid "Can't find specified location %d in file `%s'\n" msgstr "" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "element not in array\n" msgstr "" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "untyped variable\n" msgstr "" -#: debug.c:3446 +#: debug.c:3466 #, c-format msgid "Stopping in %s ...\n" msgstr "" -#: debug.c:3523 +#: debug.c:3543 #, c-format msgid "'finish' not meaningful with non-local jump '%s'\n" msgstr "" -#: debug.c:3530 +#: debug.c:3550 #, c-format msgid "'until' not meaningful with non-local jump '%s'\n" msgstr "" -#: debug.c:4165 +#: debug.c:4185 msgid "\t------[Enter] to continue or q [Enter] to quit------" msgstr "" -#: debug.c:4166 +#: debug.c:4186 msgid "q" msgstr "" -#: debug.c:4986 +#: debug.c:5001 #, c-format msgid "[\"%s\"] not in array `%s'" msgstr "" -#: debug.c:5192 +#: debug.c:5207 #, c-format msgid "sending output to stdout\n" msgstr "" -#: debug.c:5232 +#: debug.c:5247 msgid "invalid number" msgstr "" -#: debug.c:5366 +#: debug.c:5381 #, c-format msgid "`%s' not allowed in current context; statement ignored" msgstr "" -#: debug.c:5374 +#: debug.c:5389 msgid "`return' not allowed in current context; statement ignored" msgstr "" -#: debug.c:5575 +#: debug.c:5590 #, c-format msgid "No symbol `%s' in current context" msgstr "" #: 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:1192 +#: dfa.c:1106 dfa.c:1111 dfa.c:1124 dfa.c:1191 msgid "unbalanced [" msgstr "" @@ -1735,31 +1745,31 @@ msgstr "" msgid "invalid character class" msgstr "" -#: dfa.c:1229 +#: dfa.c:1228 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "" -#: dfa.c:1281 +#: dfa.c:1280 msgid "unfinished \\ escape" msgstr "" -#: dfa.c:1428 regcomp.c:161 +#: dfa.c:1427 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "" -#: dfa.c:1431 regcomp.c:176 +#: dfa.c:1430 regcomp.c:176 msgid "Regular expression too big" msgstr "" -#: dfa.c:1816 +#: dfa.c:1847 msgid "unbalanced (" msgstr "" -#: dfa.c:1943 +#: dfa.c:1973 msgid "no syntax specified" msgstr "" -#: dfa.c:1951 +#: dfa.c:1981 msgid "unbalanced )" msgstr "" @@ -1778,11 +1788,11 @@ msgstr "" msgid "opcode %s not an operator or keyword" msgstr "" -#: eval.c:471 +#: eval.c:472 msgid "buffer overflow in genflags2str" msgstr "" -#: eval.c:674 +#: eval.c:675 #, c-format msgid "" "\n" @@ -1790,71 +1800,71 @@ msgid "" "\n" msgstr "" -#: eval.c:703 +#: eval.c:704 msgid "`IGNORECASE' is a gawk extension" msgstr "" -#: eval.c:735 +#: eval.c:736 msgid "`BINMODE' is a gawk extension" msgstr "" -#: eval.c:793 +#: eval.c:794 #, c-format msgid "BINMODE value `%s' is invalid, treated as 3" msgstr "" -#: eval.c:884 +#: eval.c:885 #, c-format msgid "bad `%sFMT' specification `%s'" msgstr "" -#: eval.c:968 +#: eval.c:969 msgid "turning off `--lint' due to assignment to `LINT'" msgstr "" -#: eval.c:1146 +#: eval.c:1147 #, c-format msgid "reference to uninitialized argument `%s'" msgstr "" -#: eval.c:1147 +#: eval.c:1148 #, c-format msgid "reference to uninitialized variable `%s'" msgstr "" -#: eval.c:1165 +#: eval.c:1166 msgid "attempt to field reference from non-numeric value" msgstr "" -#: eval.c:1167 +#: eval.c:1168 msgid "attempt to field reference from null string" msgstr "" -#: eval.c:1175 +#: eval.c:1176 #, c-format msgid "attempt to access field %ld" msgstr "" -#: eval.c:1184 +#: eval.c:1185 #, c-format msgid "reference to uninitialized field `$%ld'" msgstr "" -#: eval.c:1271 +#: eval.c:1272 #, c-format msgid "function `%s' called with more arguments than declared" msgstr "" -#: eval.c:1466 +#: eval.c:1473 #, c-format msgid "unwind_stack: unexpected type `%s'" msgstr "" -#: eval.c:1562 +#: eval.c:1569 msgid "division by zero attempted in `/='" msgstr "" -#: eval.c:1569 +#: eval.c:1576 #, c-format msgid "division by zero attempted in `%%='" msgstr "" @@ -1867,7 +1877,7 @@ msgstr "" msgid "-l / @load are gawk extensions" msgstr "" -#: ext.c:95 ext.c:177 +#: ext.c:95 msgid "load_ext: received NULL lib_name" msgstr "" @@ -1896,6 +1906,10 @@ msgstr "" msgid "`extension' is a gawk extension" msgstr "" +#: ext.c:177 +msgid "extension: received NULL lib_name" +msgstr "" + #: ext.c:180 #, c-format msgid "extension: cannot open library `%s' (%s)" @@ -1916,36 +1930,36 @@ msgstr "" msgid "make_builtin: missing function name" msgstr "" -#: ext.c:238 +#: ext.c:236 #, c-format msgid "make_builtin: can't redefine function `%s'" msgstr "" -#: ext.c:242 +#: ext.c:240 #, c-format msgid "make_builtin: function `%s' already defined" msgstr "" -#: ext.c:246 +#: ext.c:244 #, c-format msgid "make_builtin: function name `%s' previously defined" msgstr "" -#: ext.c:248 +#: ext.c:246 #, c-format msgid "make_builtin: can't use gawk built-in `%s' as function name" msgstr "" -#: ext.c:251 ext.c:304 +#: ext.c:249 ext.c:304 #, c-format msgid "make_builtin: negative argument count for function `%s'" msgstr "" -#: ext.c:278 +#: ext.c:276 msgid "extension: missing function name" msgstr "" -#: ext.c:283 +#: ext.c:279 ext.c:283 #, c-format msgid "extension: illegal character `%c' in function name `%s'" msgstr "" @@ -1970,139 +1984,143 @@ msgstr "" msgid "extension: can't use gawk built-in `%s' as function name" msgstr "" -#: ext.c:374 +#: ext.c:375 #, c-format msgid "function `%s' defined to take no more than %d argument(s)" msgstr "" -#: ext.c:377 +#: ext.c:378 #, c-format msgid "function `%s': missing argument #%d" msgstr "" -#: ext.c:394 +#: ext.c:395 #, c-format msgid "function `%s': argument #%d: attempt to use scalar as an array" msgstr "" -#: ext.c:398 +#: ext.c:399 #, c-format msgid "function `%s': argument #%d: attempt to use array as a scalar" msgstr "" -#: ext.c:412 +#: ext.c:413 msgid "dynamic loading of library not supported" msgstr "" -#: extension/filefuncs.c:97 +#: extension/filefuncs.c:159 msgid "chdir: called with incorrect number of arguments, expecting 1" msgstr "" -#: extension/filefuncs.c:343 +#: extension/filefuncs.c:439 #, c-format msgid "stat: unable to read symbolic link `%s'" msgstr "" -#: extension/filefuncs.c:376 +#: extension/filefuncs.c:472 msgid "stat: called with wrong number of arguments" msgstr "" -#: extension/filefuncs.c:383 +#: extension/filefuncs.c:479 msgid "stat: bad parameters" msgstr "" -#: extension/filefuncs.c:437 +#: extension/filefuncs.c:533 #, c-format msgid "fts init: could not create variable %s" msgstr "" -#: extension/filefuncs.c:460 +#: extension/filefuncs.c:554 +msgid "fts is not supported on this system" +msgstr "" + +#: extension/filefuncs.c:573 msgid "fill_stat_element: could not create array" msgstr "" -#: extension/filefuncs.c:469 +#: extension/filefuncs.c:582 msgid "fill_stat_element: could not set element" msgstr "" -#: extension/filefuncs.c:484 +#: extension/filefuncs.c:597 msgid "fill_path_element: could not set element" msgstr "" -#: extension/filefuncs.c:500 +#: extension/filefuncs.c:613 msgid "fill_error_element: could not set element" msgstr "" -#: extension/filefuncs.c:547 extension/filefuncs.c:594 +#: extension/filefuncs.c:660 extension/filefuncs.c:707 msgid "fts-process: could not create array" msgstr "" -#: extension/filefuncs.c:557 extension/filefuncs.c:604 -#: extension/filefuncs.c:622 +#: extension/filefuncs.c:670 extension/filefuncs.c:717 +#: extension/filefuncs.c:735 msgid "fts-process: could not set element" msgstr "" -#: extension/filefuncs.c:671 +#: extension/filefuncs.c:784 msgid "fts: called with incorrect number of arguments, expecting 3" msgstr "" -#: extension/filefuncs.c:674 +#: extension/filefuncs.c:787 msgid "fts: bad first parameter" msgstr "" -#: extension/filefuncs.c:680 +#: extension/filefuncs.c:793 msgid "fts: bad second parameter" msgstr "" -#: extension/filefuncs.c:686 +#: extension/filefuncs.c:799 msgid "fts: bad third parameter" msgstr "" -#: extension/filefuncs.c:693 +#: extension/filefuncs.c:806 msgid "fts: could not flatten array\n" msgstr "" -#: extension/filefuncs.c:711 +#: extension/filefuncs.c:824 msgid "fts: ignoring sneaky FTS_NOSTAT flag. nyah, nyah, nyah." msgstr "" -#: extension/filefuncs.c:728 +#: extension/filefuncs.c:841 msgid "fts: clear_array() failed\n" msgstr "" -#: extension/fnmatch.c:98 +#: extension/fnmatch.c:112 msgid "fnmatch: called with less than three arguments" msgstr "" -#: extension/fnmatch.c:101 +#: extension/fnmatch.c:115 msgid "fnmatch: called with more than three arguments" msgstr "" -#: extension/fnmatch.c:104 +#: extension/fnmatch.c:118 msgid "fnmatch: could not get first argument" msgstr "" -#: extension/fnmatch.c:109 +#: extension/fnmatch.c:123 msgid "fnmatch: could not get second argument" msgstr "" -#: extension/fnmatch.c:114 +#: extension/fnmatch.c:128 msgid "fnmatch: could not get third argument" msgstr "" -#: extension/fnmatch.c:127 +#: extension/fnmatch.c:141 msgid "fnmatch is not implemented on this system\n" msgstr "" -#: extension/fnmatch.c:159 +#: extension/fnmatch.c:173 msgid "fnmatch init: could not add FNM_NOMATCH variable" msgstr "" -#: extension/fnmatch.c:169 +#: extension/fnmatch.c:183 #, c-format msgid "fnmatch init: could not set array element %s" msgstr "" -#: extension/fnmatch.c:179 +#: extension/fnmatch.c:193 msgid "fnmatch init: could not install FNM array" msgstr "" @@ -2126,88 +2144,88 @@ msgstr "" msgid "wait: called with too many arguments" msgstr "" -#: extension/inplace.c:110 +#: extension/inplace.c:130 msgid "inplace_begin: in-place editing already active" msgstr "" -#: extension/inplace.c:113 extension/inplace.c:187 +#: extension/inplace.c:133 extension/inplace.c:207 #, c-format msgid "inplace_begin: expects 2 arguments but called with %d" msgstr "" -#: extension/inplace.c:116 +#: extension/inplace.c:136 msgid "inplace_begin: cannot retrieve 1st argument as a string filename" msgstr "" -#: extension/inplace.c:124 +#: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" msgstr "" -#: extension/inplace.c:131 +#: extension/inplace.c:151 #, c-format msgid "inplace_begin: Cannot stat `%s' (%s)" msgstr "" -#: extension/inplace.c:138 +#: extension/inplace.c:158 #, c-format msgid "inplace_begin: `%s' is not a regular file" msgstr "" -#: extension/inplace.c:149 +#: extension/inplace.c:169 #, c-format msgid "inplace_begin: mkstemp(`%s') failed (%s)" msgstr "" -#: extension/inplace.c:158 +#: extension/inplace.c:178 #, c-format msgid "inplace_begin: chmod failed (%s)" msgstr "" -#: extension/inplace.c:165 +#: extension/inplace.c:185 #, c-format msgid "inplace_begin: dup(stdout) failed (%s)" msgstr "" -#: extension/inplace.c:168 +#: extension/inplace.c:188 #, c-format msgid "inplace_begin: dup2(%d, stdout) failed (%s)" msgstr "" -#: extension/inplace.c:171 +#: extension/inplace.c:191 #, c-format msgid "inplace_begin: close(%d) failed (%s)" msgstr "" -#: extension/inplace.c:190 +#: extension/inplace.c:210 msgid "inplace_end: cannot retrieve 1st argument as a string filename" msgstr "" -#: extension/inplace.c:197 +#: extension/inplace.c:217 msgid "inplace_end: in-place editing not active" msgstr "" -#: extension/inplace.c:203 +#: extension/inplace.c:223 #, c-format msgid "inplace_end: dup2(%d, stdout) failed (%s)" msgstr "" -#: extension/inplace.c:206 +#: extension/inplace.c:226 #, c-format msgid "inplace_end: close(%d) failed (%s)" msgstr "" -#: extension/inplace.c:210 +#: extension/inplace.c:230 #, c-format msgid "inplace_end: fsetpos(stdout) failed (%s)" msgstr "" -#: extension/inplace.c:223 +#: extension/inplace.c:243 #, c-format msgid "inplace_end: link(`%s', `%s') failed (%s)" msgstr "" -#: extension/inplace.c:229 +#: extension/inplace.c:253 #, c-format msgid "inplace_end: rename(`%s', `%s') failed (%s)" msgstr "" @@ -2236,7 +2254,7 @@ msgstr "" msgid "chr: called with inappropriate argument(s)" msgstr "" -#: extension/readdir.c:203 +#: extension/readdir.c:277 #, c-format msgid "dir_take_control_of: opendir/fdopendir failed: %s" msgstr "" @@ -2249,152 +2267,152 @@ msgstr "" msgid "readfile: called with no arguments" msgstr "" -#: extension/rwarray.c:120 +#: extension/rwarray.c:124 msgid "writea: called with too many arguments" msgstr "" -#: extension/rwarray.c:127 +#: extension/rwarray.c:131 #, c-format msgid "do_writea: argument 0 is not a string\n" msgstr "" -#: extension/rwarray.c:133 +#: extension/rwarray.c:137 #, c-format msgid "do_writea: argument 1 is not an array\n" msgstr "" -#: extension/rwarray.c:180 +#: extension/rwarray.c:184 #, c-format msgid "write_array: could not flatten array\n" msgstr "" -#: extension/rwarray.c:194 +#: extension/rwarray.c:198 #, c-format msgid "write_array: could not release flattened array\n" msgstr "" -#: extension/rwarray.c:276 +#: extension/rwarray.c:280 msgid "reada: called with too many arguments" msgstr "" -#: extension/rwarray.c:283 +#: extension/rwarray.c:287 #, c-format msgid "do_reada: argument 0 is not a string\n" msgstr "" -#: extension/rwarray.c:289 +#: extension/rwarray.c:293 #, c-format msgid "do_reada: argument 1 is not an array\n" msgstr "" -#: extension/rwarray.c:333 +#: extension/rwarray.c:337 #, c-format msgid "do_reada: clear_array failed\n" msgstr "" -#: extension/rwarray.c:370 +#: extension/rwarray.c:374 #, c-format msgid "read_array: set_array_element failed\n" msgstr "" -#: extension/time.c:81 +#: extension/time.c:106 msgid "gettimeofday: ignoring arguments" msgstr "" -#: extension/time.c:112 +#: extension/time.c:137 msgid "gettimeofday: not supported on this platform" msgstr "" -#: extension/time.c:133 +#: extension/time.c:158 msgid "sleep: called with too many arguments" msgstr "" -#: extension/time.c:136 +#: extension/time.c:161 msgid "sleep: missing required numeric argument" msgstr "" -#: extension/time.c:142 +#: extension/time.c:167 msgid "sleep: argument is negative" msgstr "" -#: extension/time.c:176 +#: extension/time.c:201 msgid "sleep: not supported on this platform" msgstr "" -#: field.c:339 +#: field.c:345 msgid "NF set to negative value" msgstr "" -#: field.c:964 field.c:971 field.c:975 +#: field.c:971 field.c:978 field.c:982 msgid "split: fourth argument is a gawk extension" msgstr "" -#: field.c:968 +#: field.c:975 msgid "split: fourth argument is not an array" msgstr "" -#: field.c:982 +#: field.c:989 msgid "split: second argument is not an array" msgstr "" -#: field.c:986 +#: field.c:993 msgid "split: cannot use the same array for second and fourth args" msgstr "" -#: field.c:991 +#: field.c:998 msgid "split: cannot use a subarray of second arg for fourth arg" msgstr "" -#: field.c:994 +#: field.c:1001 msgid "split: cannot use a subarray of fourth arg for second arg" msgstr "" -#: field.c:1023 +#: field.c:1032 msgid "split: null string for third arg is a gawk extension" msgstr "" -#: field.c:1063 +#: field.c:1072 msgid "patsplit: fourth argument is not an array" msgstr "" -#: field.c:1068 +#: field.c:1077 msgid "patsplit: second argument is not an array" msgstr "" -#: field.c:1074 +#: field.c:1083 msgid "patsplit: third argument must be non-null" msgstr "" -#: field.c:1078 +#: field.c:1087 msgid "patsplit: cannot use the same array for second and fourth args" msgstr "" -#: field.c:1083 +#: field.c:1092 msgid "patsplit: cannot use a subarray of second arg for fourth arg" msgstr "" -#: field.c:1086 +#: field.c:1095 msgid "patsplit: cannot use a subarray of fourth arg for second arg" msgstr "" -#: field.c:1124 +#: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" msgstr "" -#: field.c:1188 +#: field.c:1197 #, c-format msgid "invalid FIELDWIDTHS value, near `%s'" msgstr "" -#: field.c:1261 +#: field.c:1270 msgid "null string for `FS' is a gawk extension" msgstr "" -#: field.c:1265 +#: field.c:1274 msgid "old awk does not support regexps as value of `FS'" msgstr "" -#: field.c:1384 +#: field.c:1393 msgid "`FPAT' is a gawk extension" msgstr "" @@ -2418,569 +2436,569 @@ msgstr "" msgid "remove_element: received null subscript" msgstr "" -#: gawkapi.c:943 +#: gawkapi.c:948 #, c-format msgid "api_flatten_array: could not convert index %d\n" msgstr "" -#: gawkapi.c:948 +#: gawkapi.c:953 #, c-format msgid "api_flatten_array: could not convert value %d\n" msgstr "" -#: getopt.c:603 getopt.c:632 +#: getopt.c:604 getopt.c:633 #, c-format msgid "%s: option '%s' is ambiguous; possibilities:" msgstr "" -#: getopt.c:678 getopt.c:682 +#: getopt.c:679 getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "" -#: getopt.c:691 getopt.c:696 +#: getopt.c:692 getopt.c:697 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "" -#: getopt.c:739 getopt.c:758 +#: getopt.c:740 getopt.c:759 #, c-format msgid "%s: option '--%s' requires an argument\n" msgstr "" -#: getopt.c:796 getopt.c:799 +#: getopt.c:797 getopt.c:800 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "" -#: getopt.c:807 getopt.c:810 +#: getopt.c:808 getopt.c:811 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "" -#: getopt.c:859 getopt.c:862 +#: getopt.c:860 getopt.c:863 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "" -#: getopt.c:915 getopt.c:932 getopt.c:1142 getopt.c:1160 +#: getopt.c:916 getopt.c:933 getopt.c:1143 getopt.c:1161 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "" -#: getopt.c:988 getopt.c:1004 +#: getopt.c:989 getopt.c:1005 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "" -#: getopt.c:1028 getopt.c:1046 +#: getopt.c:1029 getopt.c:1047 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "" -#: getopt.c:1067 getopt.c:1085 +#: getopt.c:1068 getopt.c:1086 #, c-format msgid "%s: option '-W %s' requires an argument\n" msgstr "" -#: io.c:347 +#: io.c:392 #, c-format msgid "command line argument `%s' is a directory: skipped" msgstr "" -#: io.c:350 io.c:463 +#: io.c:395 io.c:513 #, c-format msgid "cannot open file `%s' for reading (%s)" msgstr "" -#: io.c:590 +#: io.c:640 #, c-format msgid "close of fd %d (`%s') failed (%s)" msgstr "" -#: io.c:666 +#: io.c:716 msgid "redirection not allowed in sandbox mode" msgstr "" -#: io.c:700 +#: io.c:750 #, c-format msgid "expression in `%s' redirection only has numeric value" msgstr "" -#: io.c:706 +#: io.c:756 #, c-format msgid "expression for `%s' redirection has null string value" msgstr "" -#: io.c:711 +#: io.c:761 #, c-format msgid "filename `%s' for `%s' redirection may be result of logical expression" msgstr "" -#: io.c:754 +#: io.c:809 #, c-format msgid "unnecessary mixing of `>' and `>>' for file `%.*s'" msgstr "" -#: io.c:808 +#: io.c:863 #, c-format msgid "can't open pipe `%s' for output (%s)" msgstr "" -#: io.c:818 +#: io.c:873 #, c-format msgid "can't open pipe `%s' for input (%s)" msgstr "" -#: io.c:849 +#: io.c:904 #, c-format msgid "can't open two way pipe `%s' for input/output (%s)" msgstr "" -#: io.c:928 +#: io.c:986 #, c-format msgid "can't redirect from `%s' (%s)" msgstr "" -#: io.c:931 +#: io.c:989 #, c-format msgid "can't redirect to `%s' (%s)" msgstr "" -#: io.c:982 +#: io.c:1040 msgid "" "reached system limit for open files: starting to multiplex file descriptors" msgstr "" -#: io.c:998 +#: io.c:1056 #, c-format msgid "close of `%s' failed (%s)." msgstr "" -#: io.c:1006 +#: io.c:1064 msgid "too many pipes or input files open" msgstr "" -#: io.c:1028 +#: io.c:1086 msgid "close: second argument must be `to' or `from'" msgstr "" -#: io.c:1045 +#: io.c:1103 #, c-format msgid "close: `%.*s' is not an open file, pipe or co-process" msgstr "" -#: io.c:1050 +#: io.c:1108 msgid "close of redirection that was never opened" msgstr "" -#: io.c:1147 +#: io.c:1205 #, c-format msgid "close: redirection `%s' not opened with `|&', second argument ignored" msgstr "" -#: io.c:1164 +#: io.c:1222 #, c-format msgid "failure status (%d) on pipe close of `%s' (%s)" msgstr "" -#: io.c:1167 +#: io.c:1225 #, c-format msgid "failure status (%d) on file close of `%s' (%s)" msgstr "" -#: io.c:1187 +#: io.c:1245 #, c-format msgid "no explicit close of socket `%s' provided" msgstr "" -#: io.c:1190 +#: io.c:1248 #, c-format msgid "no explicit close of co-process `%s' provided" msgstr "" -#: io.c:1193 +#: io.c:1251 #, c-format msgid "no explicit close of pipe `%s' provided" msgstr "" -#: io.c:1196 +#: io.c:1254 #, c-format msgid "no explicit close of file `%s' provided" msgstr "" -#: io.c:1224 io.c:1279 main.c:842 main.c:879 +#: io.c:1284 io.c:1342 main.c:864 main.c:906 #, c-format msgid "error writing standard output (%s)" msgstr "" -#: io.c:1228 io.c:1284 +#: io.c:1289 io.c:1348 main.c:866 #, c-format msgid "error writing standard error (%s)" msgstr "" -#: io.c:1236 +#: io.c:1297 #, c-format msgid "pipe flush of `%s' failed (%s)." msgstr "" -#: io.c:1239 +#: io.c:1300 #, c-format msgid "co-process flush of pipe to `%s' failed (%s)." msgstr "" -#: io.c:1242 +#: io.c:1303 #, c-format msgid "file flush of `%s' failed (%s)." msgstr "" -#: io.c:1356 +#: io.c:1420 #, c-format msgid "local port %s invalid in `/inet'" msgstr "" -#: io.c:1374 +#: io.c:1438 #, c-format msgid "remote host and port information (%s, %s) invalid" msgstr "" -#: io.c:1526 +#: io.c:1590 #, c-format msgid "no (known) protocol supplied in special filename `%s'" msgstr "" -#: io.c:1540 +#: io.c:1604 #, c-format msgid "special file name `%s' is incomplete" msgstr "" -#: io.c:1557 +#: io.c:1621 msgid "must supply a remote hostname to `/inet'" msgstr "" -#: io.c:1575 +#: io.c:1639 msgid "must supply a remote port to `/inet'" msgstr "" -#: io.c:1621 +#: io.c:1685 msgid "TCP/IP communications are not supported" msgstr "" -#: io.c:1796 +#: io.c:1867 #, c-format msgid "could not open `%s', mode `%s'" msgstr "" -#: io.c:1846 +#: io.c:1917 #, c-format msgid "close of master pty failed (%s)" msgstr "" -#: io.c:1848 io.c:2024 io.c:2194 +#: io.c:1919 io.c:2105 io.c:2305 #, c-format msgid "close of stdout in child failed (%s)" msgstr "" -#: io.c:1851 +#: io.c:1922 #, c-format msgid "moving slave pty to stdout in child failed (dup: %s)" msgstr "" -#: io.c:1853 io.c:2029 +#: io.c:1924 io.c:2110 #, c-format msgid "close of stdin in child failed (%s)" msgstr "" -#: io.c:1856 +#: io.c:1927 #, c-format msgid "moving slave pty to stdin in child failed (dup: %s)" msgstr "" -#: io.c:1858 io.c:1879 +#: io.c:1929 io.c:1951 #, c-format msgid "close of slave pty failed (%s)" msgstr "" -#: io.c:1965 io.c:2027 io.c:2171 io.c:2197 +#: io.c:2040 io.c:2108 io.c:2276 io.c:2308 #, c-format msgid "moving pipe to stdout in child failed (dup: %s)" msgstr "" -#: io.c:1972 io.c:2032 +#: io.c:2047 io.c:2113 #, c-format msgid "moving pipe to stdin in child failed (dup: %s)" msgstr "" -#: io.c:1992 io.c:2187 +#: io.c:2073 io.c:2298 msgid "restoring stdout in parent process failed\n" msgstr "" -#: io.c:2000 +#: io.c:2081 msgid "restoring stdin in parent process failed\n" msgstr "" -#: io.c:2035 io.c:2199 io.c:2213 +#: io.c:2116 io.c:2310 io.c:2324 #, c-format msgid "close of pipe failed (%s)" msgstr "" -#: io.c:2089 +#: io.c:2174 msgid "`|&' not supported" msgstr "" -#: io.c:2156 +#: io.c:2261 #, c-format msgid "cannot open pipe `%s' (%s)" msgstr "" -#: io.c:2207 +#: io.c:2318 #, c-format msgid "cannot create child process for `%s' (fork: %s)" msgstr "" -#: io.c:2667 +#: io.c:2790 msgid "register_input_parser: received NULL pointer" msgstr "" -#: io.c:2695 +#: io.c:2818 #, c-format msgid "input parser `%s' conflicts with previously installed input parser `%s'" msgstr "" -#: io.c:2702 +#: io.c:2825 #, c-format msgid "input parser `%s' failed to open `%s'" msgstr "" -#: io.c:2722 +#: io.c:2845 msgid "register_output_wrapper: received NULL pointer" msgstr "" -#: io.c:2750 +#: io.c:2873 #, c-format msgid "" "output wrapper `%s' conflicts with previously installed output wrapper `%s'" msgstr "" -#: io.c:2757 +#: io.c:2880 #, c-format msgid "output wrapper `%s' failed to open `%s'" msgstr "" -#: io.c:2778 +#: io.c:2901 msgid "register_output_processor: received NULL pointer" msgstr "" -#: io.c:2807 +#: io.c:2930 #, c-format msgid "" "two-way processor `%s' conflicts with previously installed two-way processor " "`%s'" msgstr "" -#: io.c:2816 +#: io.c:2939 #, c-format msgid "two way processor `%s' failed to open `%s'" msgstr "" -#: io.c:2923 +#: io.c:3064 #, c-format msgid "data file `%s' is empty" msgstr "" -#: io.c:2965 io.c:2973 +#: io.c:3106 io.c:3114 msgid "could not allocate more input memory" msgstr "" -#: io.c:3539 +#: io.c:3682 msgid "multicharacter value of `RS' is a gawk extension" msgstr "" -#: io.c:3628 +#: io.c:3771 msgid "IPv6 communication is not supported" msgstr "" -#: main.c:388 +#: main.c:405 msgid "empty argument to `-e/--source' ignored" msgstr "" -#: main.c:478 +#: main.c:495 #, c-format msgid "%s: option `-W %s' unrecognized, ignored\n" msgstr "" -#: main.c:524 +#: main.c:541 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "" -#: main.c:545 +#: main.c:562 msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'" msgstr "" -#: main.c:551 +#: main.c:568 msgid "`--posix' overrides `--traditional'" msgstr "" -#: main.c:562 +#: main.c:579 msgid "`--posix'/`--traditional' overrides `--non-decimal-data'" msgstr "" -#: main.c:566 +#: main.c:583 #, c-format msgid "running %s setuid root may be a security problem" msgstr "" -#: main.c:571 +#: main.c:588 msgid "`--posix' overrides `--characters-as-bytes'" msgstr "" -#: main.c:630 +#: main.c:647 #, c-format msgid "can't set binary mode on stdin (%s)" msgstr "" -#: main.c:633 +#: main.c:650 #, c-format msgid "can't set binary mode on stdout (%s)" msgstr "" -#: main.c:635 +#: main.c:652 #, c-format msgid "can't set binary mode on stderr (%s)" msgstr "" -#: main.c:693 +#: main.c:710 msgid "no program text at all!" msgstr "" -#: main.c:779 +#: main.c:799 #, c-format msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n" msgstr "" -#: main.c:781 +#: main.c:801 #, c-format msgid "Usage: %s [POSIX or GNU style options] [--] %cprogram%c file ...\n" msgstr "" -#: main.c:786 +#: main.c:806 msgid "POSIX options:\t\tGNU long options: (standard)\n" msgstr "" -#: main.c:787 +#: main.c:807 msgid "\t-f progfile\t\t--file=progfile\n" msgstr "" -#: main.c:788 +#: main.c:808 msgid "\t-F fs\t\t\t--field-separator=fs\n" msgstr "" -#: main.c:789 +#: main.c:809 msgid "\t-v var=val\t\t--assign=var=val\n" msgstr "" -#: main.c:790 +#: main.c:810 msgid "Short options:\t\tGNU long options: (extensions)\n" msgstr "" -#: main.c:791 +#: main.c:811 msgid "\t-b\t\t\t--characters-as-bytes\n" msgstr "" -#: main.c:792 +#: main.c:812 msgid "\t-c\t\t\t--traditional\n" msgstr "" -#: main.c:793 +#: main.c:813 msgid "\t-C\t\t\t--copyright\n" msgstr "" -#: main.c:794 +#: main.c:814 msgid "\t-d[file]\t\t--dump-variables[=file]\n" msgstr "" -#: main.c:795 +#: main.c:815 msgid "\t-D[file]\t\t--debug[=file]\n" msgstr "" -#: main.c:796 +#: main.c:816 msgid "\t-e 'program-text'\t--source='program-text'\n" msgstr "" -#: main.c:797 +#: main.c:817 msgid "\t-E file\t\t\t--exec=file\n" msgstr "" -#: main.c:798 +#: main.c:818 msgid "\t-g\t\t\t--gen-pot\n" msgstr "" -#: main.c:799 +#: main.c:819 msgid "\t-h\t\t\t--help\n" msgstr "" -#: main.c:800 +#: main.c:820 msgid "\t-i includefile\t\t--include=includefile\n" msgstr "" -#: main.c:801 +#: main.c:821 msgid "\t-l library\t\t--load=library\n" msgstr "" -#: main.c:802 +#: main.c:822 msgid "\t-L [fatal]\t\t--lint[=fatal]\n" msgstr "" -#: main.c:803 +#: main.c:823 msgid "\t-n\t\t\t--non-decimal-data\n" msgstr "" -#: main.c:804 +#: main.c:824 msgid "\t-M\t\t\t--bignum\n" msgstr "" -#: main.c:805 +#: main.c:825 msgid "\t-N\t\t\t--use-lc-numeric\n" msgstr "" -#: main.c:806 +#: main.c:826 msgid "\t-o[file]\t\t--pretty-print[=file]\n" msgstr "" -#: main.c:807 +#: main.c:827 msgid "\t-O\t\t\t--optimize\n" msgstr "" -#: main.c:808 +#: main.c:828 msgid "\t-p[file]\t\t--profile[=file]\n" msgstr "" -#: main.c:809 +#: main.c:829 msgid "\t-P\t\t\t--posix\n" msgstr "" -#: main.c:810 +#: main.c:830 msgid "\t-r\t\t\t--re-interval\n" msgstr "" -#: main.c:811 +#: main.c:831 msgid "\t-S\t\t\t--sandbox\n" msgstr "" -#: main.c:812 +#: main.c:832 msgid "\t-t\t\t\t--lint-old\n" msgstr "" -#: main.c:813 +#: main.c:833 msgid "\t-V\t\t\t--version\n" msgstr "" -#: main.c:815 +#: main.c:835 msgid "\t-W nostalgia\t\t--nostalgia\n" msgstr "" -#: main.c:818 +#: main.c:838 msgid "\t-Y\t\t--parsedebug\n" msgstr "" @@ -2989,7 +3007,7 @@ msgstr "" #. for this application. Please add _another line_ with the #. address for translation bugs. #. no-wrap -#: main.c:827 +#: main.c:847 msgid "" "\n" "To report bugs, see node `Bugs' in `gawk.info', which is\n" @@ -2997,21 +3015,21 @@ msgid "" "\n" msgstr "" -#: main.c:831 +#: main.c:851 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:835 +#: main.c:855 msgid "" "Examples:\n" "\tgawk '{ sum += $1 }; END { print sum }' file\n" "\tgawk -F: '{ print $1 }' /etc/passwd\n" msgstr "" -#: main.c:855 +#: main.c:880 #, c-format msgid "" "Copyright (C) 1989, 1991-%d Free Software Foundation.\n" @@ -3023,7 +3041,7 @@ msgid "" "\n" msgstr "" -#: main.c:863 +#: main.c:888 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" @@ -3032,70 +3050,70 @@ msgid "" "\n" msgstr "" -#: main.c:869 +#: main.c:894 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:904 +#: main.c:931 msgid "-Ft does not set FS to tab in POSIX awk" msgstr "" -#: main.c:1181 +#: main.c:1208 #, c-format msgid "unknown value for field spec: %d\n" msgstr "" -#: main.c:1279 +#: main.c:1306 #, c-format msgid "" "%s: `%s' argument to `-v' not in `var=value' form\n" "\n" msgstr "" -#: main.c:1305 +#: main.c:1332 #, c-format msgid "`%s' is not a legal variable name" msgstr "" -#: main.c:1308 +#: main.c:1335 #, c-format msgid "`%s' is not a variable name, looking for file `%s=%s'" msgstr "" -#: main.c:1312 +#: main.c:1339 #, c-format msgid "cannot use gawk builtin `%s' as variable name" msgstr "" -#: main.c:1317 +#: main.c:1344 #, c-format msgid "cannot use function `%s' as variable name" msgstr "" -#: main.c:1370 +#: main.c:1397 msgid "floating point exception" msgstr "" -#: main.c:1377 +#: main.c:1404 msgid "fatal error: internal error" msgstr "" -#: main.c:1392 +#: main.c:1419 msgid "fatal error: internal error: segfault" msgstr "" -#: main.c:1404 +#: main.c:1431 msgid "fatal error: internal error: stack overflow" msgstr "" -#: main.c:1463 +#: main.c:1490 #, c-format msgid "no pre-opened fd %d" msgstr "" -#: main.c:1470 +#: main.c:1497 #, c-format msgid "could not pre-open /dev/null for fd %d" msgstr "" @@ -3150,7 +3168,7 @@ msgstr "" msgid "%s: argument #%d negative value %Zd will give strange results" msgstr "" -#: msg.c:61 +#: msg.c:68 #, c-format msgid "cmd. line:" msgstr "" @@ -3200,68 +3218,63 @@ msgstr "" msgid "%s %s `%s': could not set close-on-exec: (fcntl F_SETFD: %s)" msgstr "" -#: profile.c:70 +#: profile.c:71 #, c-format msgid "could not open `%s' for writing: %s" msgstr "" -#: profile.c:72 +#: profile.c:73 msgid "sending profile to standard error" msgstr "" -#: profile.c:188 +#: profile.c:193 #, c-format msgid "" "\t# %s block(s)\n" "\n" msgstr "" -#: profile.c:193 +#: profile.c:198 #, c-format msgid "" "\t# Rule(s)\n" "\n" msgstr "" -#: profile.c:267 +#: profile.c:272 #, c-format msgid "internal error: %s with null vname" msgstr "" -#: profile.c:530 +#: profile.c:537 msgid "internal error: builtin with null fname" msgstr "" -#: profile.c:942 +#: profile.c:949 #, c-format msgid "" "\t# Loaded extensions (-l and/or @load)\n" "\n" msgstr "" -#: profile.c:965 +#: profile.c:972 #, c-format msgid "\t# gawk profile, created %s\n" msgstr "" -#: profile.c:1351 +#: profile.c:1475 #, c-format msgid "" "\n" "\t# Functions, listed alphabetically\n" msgstr "" -#: profile.c:1389 +#: profile.c:1513 #, c-format msgid "redir2str: unknown redirection type %d" msgstr "" -#: re.c:583 -#, c-format -msgid "range of the form `[%c-%c]' is locale dependent" -msgstr "" - -#: re.c:610 +#: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" msgstr "" @@ -3330,6 +3343,6 @@ msgstr "" msgid "No previous regular expression" msgstr "" -#: symbol.c:740 +#: symbol.c:741 msgid "can not pop main context" msgstr "" -- cgit v1.2.3 From 9175c4e1b26dbdac5600df0b4d33717004c9a434 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Wed, 15 Jan 2014 18:40:22 +0200 Subject: Make 'system' and pipe writes consistent with pipe reads on MinGW. * popen.c (os_system): Use spawnl, and quote the command line, to be consistent with what gawk_popen does. (os_popen) [__MINGW32__]: Don't scriptify the command, to be consistent with gawk_popen. (os_pclose) [__MINGW32__]: Update to match os_open: no need to unlink the script file. --- pc/ChangeLog | 9 +++++++++ pc/popen.c | 23 +++++++---------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/pc/ChangeLog b/pc/ChangeLog index eb5636e9..bd9c8c60 100644 --- a/pc/ChangeLog +++ b/pc/ChangeLog @@ -1,3 +1,12 @@ +2014-01-15 Eli Zaretskii + + * popen.c (os_system): Use spawnl, and quote the command line, to + be consistent with what gawk_popen does. + (os_popen) [__MINGW32__]: Don't scriptify the command, to be + consistent with gawk_popen. + (os_pclose) [__MINGW32__]: Update to match os_open: no need to + unlink the script file. + 2013-12-10 Scott Deifik * gawkmisc.c (init_sockets): Move into the right part of the diff --git a/pc/popen.c b/pc/popen.c index 399e250a..73770d98 100644 --- a/pc/popen.c +++ b/pc/popen.c @@ -13,7 +13,6 @@ #define _NFILE 40 #endif -static char template[] = "piXXXXXX"; static struct { char *command; char *name; @@ -34,6 +33,7 @@ static struct { #define WIN32_LEAN_AND_MEAN #include +#if 0 static int unixshell(char *p) { @@ -119,20 +119,16 @@ unlink_and_free(char *cmd) s = cmd; unlink(s); free(cmd); } +#endif int os_system(const char *cmd) { - char *s; - int i; - char *cmd1; + char *cmdexe = getenv("ComSpec"); + char *cmd1 = quote_cmd(cmd); + int i = spawnl(P_WAIT, cmdexe, "cmd.exe", "/c", cmd1, NULL); - if ((cmd1 = scriptify(cmd)) == NULL) return(1); - if (s = getenv("SHELL")) - i = spawnlp(P_WAIT, s, s, cmd1 + strlen(s), NULL); - else - i = system(cmd1); - unlink_and_free(cmd1); + free(cmd1); return(i); } @@ -209,19 +205,15 @@ os_popen(const char *command, const char *mode ) char *name; int cur; char curmode[4]; -#if defined(__MINGW32__) - char *cmd; -#endif if (*mode != 'r' && *mode != 'w') return NULL; strncpy(curmode, mode, 3); curmode[3] = '\0'; #if defined(__MINGW32__) - current = popen(cmd = scriptify(command), mode); + current = popen(command, mode); cur = fileno(current); strcpy(pipes[cur].pmode, curmode); - pipes[cur].command = cmd; return(current); #endif @@ -268,7 +260,6 @@ os_pclose( FILE * current) #if defined(__MINGW32__) rval = pclose(current); *pipes[cur].pmode = '\0'; - unlink_and_free(pipes[cur].command); return rval; #endif -- cgit v1.2.3 From 699b3a96bfcdd281b4f0db447fcf80ba7fbc6ec6 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Wed, 15 Jan 2014 18:47:28 +0200 Subject: Fix pc/Makefile.tst per the changes in the test suite. * pc/Makefile.tst (mbprintf4, profile5, backbigs1, backsmalls1): Announce expected failures. (fts): Fail gracefully, to avoid bailing out of the test suite too early. --- pc/ChangeLog | 5 +++++ pc/Makefile.tst | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/pc/ChangeLog b/pc/ChangeLog index bd9c8c60..12bf2f89 100644 --- a/pc/ChangeLog +++ b/pc/ChangeLog @@ -1,5 +1,10 @@ 2014-01-15 Eli Zaretskii + * Makefile.tst (mbprintf4, profile5, backbigs1, backsmalls1): + Announce expected failures. + (fts): Fail gracefully, to avoid bailing out of the test suite too + early. + * popen.c (os_system): Use spawnl, and quote the command line, to be consistent with what gawk_popen does. (os_popen) [__MINGW32__]: Don't scriptify the command, to be diff --git a/pc/Makefile.tst b/pc/Makefile.tst index 6a2216a0..2cff3c2e 100644 --- a/pc/Makefile.tst +++ b/pc/Makefile.tst @@ -797,6 +797,7 @@ mbprintf3:: mbprintf4:: @echo $@ + @echo Expect mbprintf4 to fail with MinGW @GAWKLOCALE=en_US.UTF-8 ; export GAWKLOCALE ; \ $(AWK) -f "$(srcdir)"/$@.awk "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >> _$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ @@ -870,6 +871,7 @@ profile4: profile5: @echo $@ + @echo Expect profile5 to fail with MinGW due to 3 digits in %e output @GAWK_NO_PP_RUN=1 $(AWK) --profile=ap-$@.out -f "$(srcdir)"/$@.awk > /dev/null @sed 1,2d < ap-$@.out > _$@; rm ap-$@.out @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ @@ -1041,7 +1043,7 @@ fts: fi @echo $@ @echo Expect $@ to fail with MinGW because function 'fts' is not defined. - @$(AWK) -f "$(srcdir)"/fts.awk + @$(AWK) -f "$(srcdir)"/fts.awk || echo EXIT CODE: $$? >>_$@ @-$(CMP) $@.ok _$@ && rm -f $@.ok _$@ charasbytes: @@ -1098,12 +1100,14 @@ dfamb1: backbigs1: @echo $@ + @echo Expect backbigs1 to fail with MinGW @[ -z "$$GAWKLOCALE" ] && GAWKLOCALE=en_US.UTF-8; \ AWKPATH="$(srcdir)" $(AWK) -f $@.awk "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ backsmalls1: @echo $@ + @echo Expect backsmalls1 to fail with MinGW @[ -z "$$GAWKLOCALE" ] && GAWKLOCALE=en_US.UTF-8; \ AWKPATH="$(srcdir)" $(AWK) -f $@.awk "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ -- cgit v1.2.3 From a0414ef0949eaf66c467abd5009790a6f339b164 Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Thu, 16 Jan 2014 10:51:30 -0500 Subject: Fix strftime test race condition. --- test/ChangeLog | 10 ++++++++++ test/Makefile.am | 4 +--- test/Makefile.in | 4 +--- test/strftime.awk | 34 ++++++++++++++++++++++++++-------- 4 files changed, 38 insertions(+), 14 deletions(-) diff --git a/test/ChangeLog b/test/ChangeLog index b5ff6e64..95f8fe17 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,13 @@ +2014-01-16 Andrew J. Schorr + + * Makefile.am (strftime): Remove comment about the race condition, since + this should be fixed. And gawk now calls date inside the script. + * strftime.awk: Based on an idea from Pat Ranking, fix the race + condition by looping repeatedly over strftime/date/strftime until + the before and after strftime results match. That should fix + the race condition where the seconds field might increment between + invocations. + 2014-01-14 Arnold D. Robbins * Makefile.am (split_after_fpat): New test. diff --git a/test/Makefile.am b/test/Makefile.am index e6dfea17..cb9bdc83 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1252,12 +1252,10 @@ nonl:: @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ strftime:: - @echo This test could fail on slow machines or on a minute boundary, - @echo so if it does, double check the actual results: @echo $@ @GAWKLOCALE=C; export GAWKLOCALE; \ TZ=GMT0; export TZ; \ - (LC_ALL=C date) | $(AWK) -v OUTPUT=_$@ -f "$(srcdir)"/strftime.awk + $(AWK) -v OUTPUT=_$@ -f "$(srcdir)"/strftime.awk @-$(CMP) strftime.ok _$@ && rm -f _$@ strftime.ok || exit 0 litoct:: diff --git a/test/Makefile.in b/test/Makefile.in index 8fe395ef..fa0f6345 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -1676,12 +1676,10 @@ nonl:: @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ strftime:: - @echo This test could fail on slow machines or on a minute boundary, - @echo so if it does, double check the actual results: @echo $@ @GAWKLOCALE=C; export GAWKLOCALE; \ TZ=GMT0; export TZ; \ - (LC_ALL=C date) | $(AWK) -v OUTPUT=_$@ -f "$(srcdir)"/strftime.awk + $(AWK) -v OUTPUT=_$@ -f "$(srcdir)"/strftime.awk @-$(CMP) strftime.ok _$@ && rm -f _$@ strftime.ok || exit 0 litoct:: diff --git a/test/strftime.awk b/test/strftime.awk index 775cd4e5..a52957f0 100644 --- a/test/strftime.awk +++ b/test/strftime.awk @@ -2,18 +2,36 @@ # # input is the output of `date', see Makefile.in # -# The mucking about with $0 and $N is to avoid problems +# The mucking about with $0 and $NF is to avoid problems # on cygwin, where the timezone field is empty and there # are two consecutive blanks. -# Additional mucking about to lop off the seconds field; -# helps decrease chance of difference due to a second boundary +BEGIN { + maxtries = 10 + datecmd = "date" + fmt = "%a %b %d %H:%M:%S %Z %Y" -{ - $3 = sprintf("%02d", $3 + 0) - $4 = substr($4, 1, 5) - print > "strftime.ok" - $0 = strftime("%a %b %d %H:%M %Z %Y") + # loop until before equals after, thereby protecting + # against a race condition where the seconds field might have + # incremented between running date and strftime + i = 0 + while (1) { + if (++i > maxtries) { + printf "Warning: this system is so slow that after %d attempts, we could never get two sequential invocations of strftime to give the same result!\n", maxtries > "/dev/stderr" + break + } + before = strftime(fmt) + datecmd | getline sd + after = strftime(fmt) + close(datecmd) + if (before == after) { + if (i > 1) + printf "Notice: it took %d loops to get the before and after strftime values to match\n", i > "/dev/stderr" + break + } + } + print sd > "strftime.ok" + $0 = after $NF = $NF print > OUTPUT } -- cgit v1.2.3 From f00fc299f09b0234660bf7c97ce458a4044ec111 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 17 Jan 2014 10:04:05 +0200 Subject: Configure fixes for z/OS. --- ChangeLog | 5 +++++ configure | 6 ++++++ configure.ac | 6 ++++++ 3 files changed, 17 insertions(+) diff --git a/ChangeLog b/ChangeLog index 9f5954bb..d393cb9b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-01-16 Arnold D. Robbins + + * configure.ac: For z/OS, restore creation of do-nothing + Makefile in extension directory. + 2014-01-14 Arnold D. Robbins * field.c (do_split): Make sure split() gets FS value if no diff --git a/configure b/configure index c3068aa6..c51e21ab 100755 --- a/configure +++ b/configure @@ -10070,6 +10070,12 @@ if test "x$enable_extensions" != "xno"; then case $host_os in mirbsd*) : ;; + openedition*) # OS/390 z/OS POSIX layer + cat << \EOF > extension/Makefile +all dist check clean distclean install uninstall distcheck: + @exit 0 +EOF + ;; *) ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" if test "x$ac_cv_header_dlfcn_h" = xyes; then : diff --git a/configure.ac b/configure.ac index 12f3ee78..306392d4 100644 --- a/configure.ac +++ b/configure.ac @@ -292,6 +292,12 @@ if test "x$enable_extensions" != "xno"; then case $host_os in mirbsd*) : ;; + openedition*) # OS/390 z/OS POSIX layer + cat << \EOF > extension/Makefile +all dist check clean distclean install uninstall distcheck: + @exit 0 +EOF + ;; *) AC_CHECK_HEADER(dlfcn.h, [ -- cgit v1.2.3 From 06d509825fdd3cbcd25f76aaf2d3cdef03dd97bf Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 17 Jan 2014 10:05:32 +0200 Subject: Add split_after_fpat test for VMS. --- vms/ChangeLog | 4 ++++ vms/vmstest.com | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/vms/ChangeLog b/vms/ChangeLog index 0db7efd2..5791af39 100644 --- a/vms/ChangeLog +++ b/vms/ChangeLog @@ -1,3 +1,7 @@ +2014-01-17 John E. Malmberg + + * vmstest.com (split_after_fpat): Added this test. + 2014-01-03 John E. Malmberg * config_h.com, generate_config_vms_h_gawk.com, diff --git a/vms/vmstest.com b/vms/vmstest.com index 6d46c4d7..4b5e2d5c 100644 --- a/vms/vmstest.com +++ b/vms/vmstest.com @@ -120,8 +120,9 @@ $ list = "include2 indirectcall lint lintold lintwarn match1" - + " nondec2 patsplit posix profile1 procinfs printfbad1" - + " printfbad2 printfbad3 profile2 profile3 pty1" - + " regx8bit rebuf reginttrad reint reint2 rsstart1 rsstart2 rsstart3 rstest6" - - + " shadow sortfor sortu splitarg4 strtonum strftime switch2" - - + " symtab1 symtab2 symtab3 symtab4 symtab5 symtab6 symtab7 symtab8 symtab9" + + " shadow sortfor sortu split_after_fpat splitarg4" - + + " strtonum strftime switch2 symtab1 symtab2 symtab3" - + + " symtab4 symtab5 symtab6 symtab7 symtab8 symtab9" $ gosub list_of_tests $ return $ @@ -267,6 +268,7 @@ $rstest6: $rswhite: $sortempty: $sortfor: +$split_after_fpat: $splitarg4: $splitargv: $splitarr: -- cgit v1.2.3 From ebb8473c5de46fdf08c98f65e5996ed4ba495684 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 17 Jan 2014 10:08:32 +0200 Subject: Updated fi, fr, it, vi translations. --- po/fi.gmo | Bin 84089 -> 84555 bytes po/fi.po | 1063 ++++++++++++++++++++-------------------- po/fr.gmo | Bin 85144 -> 85628 bytes po/fr.po | 1423 ++++++++++++++++++++++++----------------------------- po/it.gmo | Bin 80497 -> 81018 bytes po/it.po | 1042 +++++++++++++++++++-------------------- po/vi.gmo | Bin 92142 -> 93025 bytes po/vi.po | 1611 ++++++++++++++++++++++++++++--------------------------------- 8 files changed, 2451 insertions(+), 2688 deletions(-) diff --git a/po/fi.gmo b/po/fi.gmo index c2e017f1..117053a5 100644 Binary files a/po/fi.gmo and b/po/fi.gmo differ diff --git a/po/fi.po b/po/fi.po index e58b6179..0f3ba5ac 100644 --- a/po/fi.po +++ b/po/fi.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: gawk 4.0.75\n" +"Project-Id-Version: gawk 4.1.0b\n" "Report-Msgid-Bugs-To: arnold@skeeve.com\n" -"POT-Creation-Date: 2013-04-17 20:54+0300\n" -"PO-Revision-Date: 2014-01-02 11:55+0200\n" +"POT-Creation-Date: 2014-01-14 22:23+0200\n" +"PO-Revision-Date: 2014-01-16 13:32+0200\n" "Last-Translator: Jorma Karvonen \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -18,84 +18,84 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.4\n" -#: array.c:254 +#: array.c:256 #, c-format msgid "from %s" msgstr "taulukosta %s" -#: array.c:354 +#: array.c:357 msgid "attempt to use a scalar value as array" msgstr "yritettiin käyttää skalaariarvoa taulukkona" -#: array.c:356 +#: array.c:359 #, c-format msgid "attempt to use scalar parameter `%s' as an array" msgstr "yritettiin käyttää skalaariparametria â€%s†taulukkona" -#: array.c:359 +#: array.c:362 #, c-format msgid "attempt to use scalar `%s' as an array" msgstr "yritettiin käyttää skalaaria â€%s†taulukkona" -#: array.c:406 array.c:573 builtin.c:85 builtin.c:1591 builtin.c:1637 -#: builtin.c:1650 builtin.c:2078 builtin.c:2092 eval.c:1121 eval.c:1125 -#: eval.c:1524 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" msgstr "yritettiin käyttää taulukkoa â€%s†skalaarikontekstissa" -#: array.c:580 +#: array.c:583 #, c-format msgid "delete: index `%s' not in array `%s'" msgstr "delete: indeksi â€%s†ei ole taulukossa â€%sâ€" -#: array.c:594 +#: array.c:597 #, c-format msgid "attempt to use scalar `%s[\"%.*s\"]' as an array" msgstr "yritettiin käyttää skalaaria â€%s[\"%.*s\"]†taulukkona" -#: array.c:773 +#: array.c:776 msgid "adump: first argument not an array" msgstr "adump: ensimmäinen argumentti ei ole taulukko" -#: array.c:812 +#: array.c:815 msgid "asort: second argument not an array" msgstr "asort: toinen argumentti ei ole taulukko" -#: array.c:813 +#: array.c:816 msgid "asorti: second argument not an array" msgstr "asorti: toinen argumentti ei ole taulukko" -#: array.c:820 +#: array.c:823 msgid "asort: first argument not an array" msgstr "asort: ensimmäinen argumentti ei ole taulukko" -#: array.c:821 +#: array.c:824 msgid "asorti: first argument not an array" msgstr "asorti: ensimmäinen argumentti ei ole taulukko" -#: array.c:828 +#: array.c:831 msgid "asort: cannot use a subarray of first arg for second arg" msgstr "asort: ensimmäisen argumentin alitaulukon käyttö toiselle argumentille epäonnistui" -#: array.c:829 +#: array.c:832 msgid "asorti: cannot use a subarray of first arg for second arg" msgstr "asorti: ensimmäisen argumentin alitaulukon käyttö toiselle argumentille epäonnistui" -#: array.c:834 +#: array.c:837 msgid "asort: cannot use a subarray of second arg for first arg" msgstr "asort: toisen argumentin alitaulukon käyttö ensimmäiselle argumentille epäonnistui" -#: array.c:835 +#: array.c:838 msgid "asorti: cannot use a subarray of second arg for first arg" msgstr "asorti: toisen argumentin alitaulukon käyttö ensimmäiselle argumentille epäonnistui" -#: array.c:1309 +#: array.c:1314 #, c-format msgid "`%s' is invalid as a function name" msgstr "â€%s†on virheellinen funktionimenä" -#: array.c:1313 +#: array.c:1318 #, c-format msgid "sort comparison function `%s' is not defined" msgstr "lajitteluvertailufunktiota â€%s†ei ole määritelty" @@ -229,11 +229,11 @@ msgstr "erikoismuuttujan â€%s†käyttö epäsuoralle funktiokutsulle epäonni msgid "invalid subscript expression" msgstr "virheellinen indeksointilauseke" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:119 +#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "varoitus: " -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:151 +#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "tuhoisa: " @@ -241,8 +241,8 @@ msgstr "tuhoisa: " msgid "unexpected newline or end of string" msgstr "odottamaton rivinvaihto tai merkkijonon loppu" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:517 debug.c:533 -#: debug.c:2792 debug.c:5040 +#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 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" @@ -252,7 +252,7 @@ msgstr "lähdetiedoston â€%s†avaaminen lukemista varten (%s) epäonnistui" msgid "can't open shared library `%s' for reading (%s)" msgstr "jaetun kirjaston â€%s†avaaminen lukemista varten (%s) epäonnistui" -#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:130 debug.c:5191 +#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "syy tuntematon" @@ -418,69 +418,73 @@ msgstr "dcgettext(_\"...\")-käyttö on virheellinen: poista alaviiva alusta" msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" msgstr "dcngettext(_\"...\")-käyttö on virheellinen: poista alaviiva alusta" -#: awkgram.y:4039 +#: awkgram.y:3992 +msgid "index: regexp constant as second argument is not allowed" +msgstr "index: regexp-vakio toisena argumenttina ei ole sallittu" + +#: awkgram.y:4045 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "funktio â€%sâ€: parametri â€%s†varjostaa yleismuuttujaa" -#: awkgram.y:4096 debug.c:4021 debug.c:4064 debug.c:5189 +#: awkgram.y:4102 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:4097 +#: awkgram.y:4103 msgid "sending variable list to standard error" msgstr "lähetetään muuttujaluettelo vakiovirheeseen" -#: awkgram.y:4105 +#: awkgram.y:4111 #, c-format msgid "%s: close failed (%s)" msgstr "%s: sulkeminen epäonnistui (%s)" -#: awkgram.y:4130 +#: awkgram.y:4136 msgid "shadow_funcs() called twice!" msgstr "shadow_funcs() kutsuttu kahdesti!" -#: awkgram.y:4138 +#: awkgram.y:4144 msgid "there were shadowed variables." msgstr "siellä oli varjostettuja muuttujia." -#: awkgram.y:4209 +#: awkgram.y:4215 #, c-format msgid "function name `%s' previously defined" msgstr "funktionimi â€%s†on jo aikaisemmin määritelty" -#: awkgram.y:4255 +#: awkgram.y:4261 #, c-format msgid "function `%s': can't use function name as parameter name" msgstr "funktio â€%sâ€: funktionimen käyttö parametrinimenä epäonnistui" -#: awkgram.y:4258 +#: awkgram.y:4264 #, 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:4266 +#: awkgram.y:4272 #, c-format msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d" msgstr "funktio â€%sâ€: parametri #%d, â€%sâ€, samanlainen parametri #%d" -#: awkgram.y:4360 awkgram.y:4366 +#: awkgram.y:4359 awkgram.y:4365 #, c-format msgid "function `%s' called but never defined" msgstr "funktiota â€%s†kutsuttiin, mutta sitä ei ole koskaan määritelty" -#: awkgram.y:4370 +#: awkgram.y:4369 #, c-format msgid "function `%s' defined but never called directly" msgstr "funktio â€%s†määriteltiin, mutta sitä ei ole koskaan kutsuttu suoraan" -#: awkgram.y:4402 +#: awkgram.y:4401 #, c-format msgid "regexp constant for parameter #%d yields boolean value" msgstr "säännöllisen lausekkeen vakio parametrille #%d antaa boolean-arvon" -#: awkgram.y:4461 +#: awkgram.y:4460 #, c-format msgid "" "function `%s' called with space between name and `(',\n" @@ -489,413 +493,422 @@ msgstr "" "funktio â€%s†kutsuttu välilyönnillä nimen ja â€(â€-merkin\n" "välillä, tai käytetty muuttujana tai taulukkona" -#: awkgram.y:4697 +#: awkgram.y:4696 msgid "division by zero attempted" msgstr "nollalla jakoa yritettiin" -#: awkgram.y:4706 +#: awkgram.y:4705 #, c-format msgid "division by zero attempted in `%%'" msgstr "jakoa nollalla yritettiin operaattorissa â€%%â€" +#: awkgram.y:5025 +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:5028 +#, c-format +msgid "invalid target of assignment (opcode %s)" +msgstr "virheellinen liittämiskohde (käskykoodi %s)" + # kohteena voi olla vakiotuloste tai joku muu -#: builtin.c:128 +#: builtin.c:133 #, c-format msgid "%s to \"%s\" failed (%s)" msgstr "%s kohteeseen â€%s†epäonnistui (%s)" -#: builtin.c:129 +#: builtin.c:134 msgid "standard output" msgstr "vakiotuloste" -#: builtin.c:143 +#: builtin.c:148 msgid "exp: received non-numeric argument" msgstr "exp: vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:149 +#: builtin.c:154 #, c-format msgid "exp: argument %g is out of range" msgstr "exp: argumentti %g on lukualueen ulkopuolella" -#: builtin.c:224 +#: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" msgstr "fflush: tyhjentäminen epäonnistui: putki â€%s†avattu lukemista varten, ei kirjoittamiseen" -#: builtin.c:227 +#: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" msgstr "fflush: tyhjentäminen epäonnistui: tiedosto â€%s†avattu lukemista varten, ei kirjoittamiseen" -#: builtin.c:239 +#: builtin.c:244 #, c-format msgid "fflush: `%s' is not an open file, pipe or co-process" msgstr "fflush: â€%s†ei ole avoin tiedosto, putki tai apuprosessi" -#: builtin.c:357 +#: builtin.c:362 msgid "index: received non-string first argument" msgstr "index: ensimmäinen vastaanotettu argumentti ei ole merkkijono" -#: builtin.c:359 +#: builtin.c:364 msgid "index: received non-string second argument" msgstr "index: toinen vastaanotettu argumentti ei ole merkkijono" -#: builtin.c:483 mpfr.c:757 +#: builtin.c:488 mpfr.c:757 msgid "int: received non-numeric argument" msgstr "int: vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:520 +#: builtin.c:525 msgid "length: received array argument" msgstr "length: vastaanotettu taulukkoargumentti" -#: builtin.c:523 +#: builtin.c:528 msgid "`length(array)' is a gawk extension" msgstr "â€length(array)†on gawk-laajennus" -#: builtin.c:539 +#: builtin.c:544 msgid "length: received non-string argument" msgstr "length: vastaanotettu argumentti ei ole merkkijono" -#: builtin.c:570 +#: builtin.c:575 msgid "log: received non-numeric argument" msgstr "log: vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:573 +#: builtin.c:578 #, c-format msgid "log: received negative argument %g" msgstr "log: vastaanotettu negatiivinen argumentti %g" -#: builtin.c:771 builtin.c:776 +#: builtin.c:776 builtin.c:781 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:846 +#: builtin.c:851 #, c-format msgid "field width is ignored for `%%' specifier" msgstr "kenttäleveys ohitetaan â€%%%%â€-määritteelle" -#: builtin.c:848 +#: builtin.c:853 #, c-format msgid "precision is ignored for `%%' specifier" msgstr "tarkkuus ohitetaan â€%%%%â€-määritteelle" -#: builtin.c:850 +#: builtin.c:855 #, c-format msgid "field width and precision are ignored for `%%' specifier" msgstr "kenttäleveys ja tarkkuus ohitetaan â€%%%%â€-määritteelle" -#: builtin.c:901 +#: builtin.c:906 msgid "fatal: `$' is not permitted in awk formats" msgstr "kohtalokas: â€$â€-argumentti ei ole sallittu awk-muodoissa" -#: builtin.c:910 +#: builtin.c:915 msgid "fatal: arg count with `$' must be > 0" msgstr "kohtalokas: argumenttilukumäärän argumentilla â€$†on oltava > 0" -#: builtin.c:914 +#: builtin.c:919 #, 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:918 +#: builtin.c:923 msgid "fatal: `$' not permitted after period in format" msgstr "kohtalokas: â€$â€-argumentti ei ole sallittu pisteen jälkeen muodossa" -#: builtin.c:934 +#: builtin.c:939 msgid "fatal: no `$' supplied for positional field width or precision" msgstr "kohtalokas: ei â€$â€-argumenttia tarjottu sijantikenttäleveydelle tai tarkkuudelle" -#: builtin.c:1006 +#: builtin.c:1011 msgid "`l' is meaningless in awk formats; ignored" msgstr "â€l†on merkityksetön awk-muodoissa; ohitetaan" -#: builtin.c:1010 +#: builtin.c:1015 msgid "fatal: `l' is not permitted in POSIX awk formats" msgstr "kohtalokas: â€l†ei ole sallittu POSIX awk -muodoissa" -#: builtin.c:1023 +#: builtin.c:1028 msgid "`L' is meaningless in awk formats; ignored" msgstr "â€L†on merkityksetön awk-muodoissa; ohitetaan" -#: builtin.c:1027 +#: builtin.c:1032 msgid "fatal: `L' is not permitted in POSIX awk formats" msgstr "kohtalokas: â€L†ei ole sallittu POSIX awk -muodoissa" -#: builtin.c:1040 +#: builtin.c:1045 msgid "`h' is meaningless in awk formats; ignored" msgstr "â€h†on merkityksetön awk-muodoissa; ohitetaan" -#: builtin.c:1044 +#: builtin.c:1049 msgid "fatal: `h' is not permitted in POSIX awk formats" msgstr "kohtalokas: â€h†ei ole sallittu POSIX awk -muodoissa" -#: builtin.c:1439 +#: builtin.c:1447 #, 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:1537 +#: builtin.c:1545 #, c-format msgid "ignoring unknown format specifier character `%c': no argument converted" msgstr "ohitetaan tuntematon muotoargumenttimerkki â€%câ€: ei muunnettu argumenttia" -#: builtin.c:1542 +#: builtin.c:1550 msgid "fatal: not enough arguments to satisfy format string" msgstr "kohtalokas: ei kylliksi argumentteja muotomerkkijonon tyydyttämiseksi" -#: builtin.c:1544 +#: builtin.c:1552 msgid "^ ran out for this one" msgstr "^ tällainen loppui kesken" -#: builtin.c:1551 +#: builtin.c:1559 msgid "[s]printf: format specifier does not have control letter" msgstr "[s]printf: muotoargumentilla ei ole ohjauskirjainta" -#: builtin.c:1554 +#: builtin.c:1562 msgid "too many arguments supplied for format string" msgstr "muotomerkkijonoon toimitettu liian monta argumenttia" -#: builtin.c:1610 +#: builtin.c:1618 msgid "sprintf: no arguments" msgstr "sprintf: ei argumentteja" -#: builtin.c:1633 builtin.c:1644 +#: builtin.c:1641 builtin.c:1652 msgid "printf: no arguments" msgstr "printf: ei argumentteja" -#: builtin.c:1687 +#: builtin.c:1695 msgid "sqrt: received non-numeric argument" msgstr "sqrt: vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:1691 +#: builtin.c:1699 #, c-format msgid "sqrt: called with negative argument %g" msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" -#: builtin.c:1722 +#: builtin.c:1730 #, c-format msgid "substr: length %g is not >= 1" msgstr "substr: pituus %g ei ole >= 1" -#: builtin.c:1724 +#: builtin.c:1732 #, c-format msgid "substr: length %g is not >= 0" msgstr "substr: pituus %g ei ole >= 0" -#: builtin.c:1731 +#: builtin.c:1739 #, c-format msgid "substr: non-integer length %g will be truncated" msgstr "substr: typistetään pituus %g, joka ei ole kokonaisluku" -#: builtin.c:1736 +#: builtin.c:1744 #, 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:1748 +#: builtin.c:1756 #, c-format msgid "substr: start index %g is invalid, using 1" msgstr "substr: aloitusindeksi %g on virheellinen, käytetään 1:tä" -#: builtin.c:1753 +#: builtin.c:1761 #, c-format msgid "substr: non-integer start index %g will be truncated" msgstr "substr: typistetään aloitusindeksi %g, joka ei ole kokonaisluku" -#: builtin.c:1778 +#: builtin.c:1786 msgid "substr: source string is zero length" msgstr "substr: lähdemerkkijono on nollapituinen" -#: builtin.c:1794 +#: builtin.c:1802 #, c-format msgid "substr: start index %g is past end of string" msgstr "substr: aloitusindeksi %g on merkkijonon lopun jälkeen" -#: builtin.c:1802 +#: builtin.c:1810 #, c-format msgid "substr: length %g at start index %g exceeds length of first argument (%lu)" msgstr "substr: pituus %g alkuindeksissä %g ylittää ensimmäisen argumentin pituuden (%lu)" -#: builtin.c:1876 +#: builtin.c:1884 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" msgstr "strftime: muotoarvolla kohteessa PROCINFO[\"strftime\"] on numerotyyppi" -#: builtin.c:1899 +#: builtin.c:1907 msgid "strftime: received non-numeric second argument" msgstr "strftime: toinen vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:1903 +#: builtin.c:1911 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:1910 +#: builtin.c:1918 msgid "strftime: received non-string first argument" msgstr "strftime: ensimmäinen vastaanotettu argumentti ei ole merkkijono" -#: builtin.c:1917 +#: builtin.c:1925 msgid "strftime: received empty format string" msgstr "strftime: vastaanotettu tyhjä muotomerkkijono" -#: builtin.c:1983 +#: builtin.c:1991 msgid "mktime: received non-string argument" msgstr "mktime: vastaanotettu argumentti ei ole merkkijono" -#: builtin.c:2000 +#: builtin.c:2008 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:2035 +#: builtin.c:2043 msgid "'system' function not allowed in sandbox mode" msgstr "’system’-funktio ei ole sallittu hiekkalaatikkotilassa" -#: builtin.c:2040 +#: builtin.c:2048 msgid "system: received non-string argument" msgstr "system: vastaanotettu argumentti ei ole merkkijono" -#: builtin.c:2160 +#: builtin.c:2168 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "viite alustamattomaan kenttään â€$%dâ€" -#: builtin.c:2247 +#: builtin.c:2255 msgid "tolower: received non-string argument" msgstr "tolower: vastaanotettu argumentti ei ole merkkijono" -#: builtin.c:2281 +#: builtin.c:2289 msgid "toupper: received non-string argument" msgstr "toupper: vastaanotettu argumentti ei ole merkkijono" -#: builtin.c:2317 mpfr.c:672 +#: builtin.c:2325 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2: ensimmäinen vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:2319 mpfr.c:674 +#: builtin.c:2327 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2: toinen vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:2338 +#: builtin.c:2346 msgid "sin: received non-numeric argument" msgstr "sin: vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:2354 +#: builtin.c:2362 msgid "cos: received non-numeric argument" msgstr "cos: vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:2407 mpfr.c:1156 +#: builtin.c:2415 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand: vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:2438 +#: builtin.c:2446 msgid "match: third argument is not an array" msgstr "match: kolmas argumentti ei ole taulukko" -#: builtin.c:2710 +#: builtin.c:2718 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub: 0-arvoinen kolmas argumentti käsitellään kuin 1" -#: builtin.c:3003 +#: builtin.c:3014 msgid "lshift: received non-numeric first argument" msgstr "lshift: ensimmäinen vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:3005 +#: builtin.c:3016 msgid "lshift: received non-numeric second argument" msgstr "lshift: toinen vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:3011 +#: builtin.c:3022 #, c-format msgid "lshift(%f, %f): negative values will give strange results" msgstr "lshift(%f, %f): negatiiviset arvot antavat outoja tuloksia" -#: builtin.c:3013 +#: builtin.c:3024 #, c-format msgid "lshift(%f, %f): fractional values will be truncated" msgstr "lshift(%f, %f): jaosarvot typistetään" -#: builtin.c:3015 +#: builtin.c:3026 #, 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:3040 +#: builtin.c:3051 msgid "rshift: received non-numeric first argument" msgstr "rshift: ensimmäinen vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:3042 +#: builtin.c:3053 msgid "rshift: received non-numeric second argument" msgstr "rshift: toinen vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:3048 +#: builtin.c:3059 #, c-format msgid "rshift(%f, %f): negative values will give strange results" msgstr "rshift(%f, %f): negatiiviset arvot antavat outoja tuloksia" -#: builtin.c:3050 +#: builtin.c:3061 #, c-format msgid "rshift(%f, %f): fractional values will be truncated" msgstr "rshift(%f, %f): jaosarvot typistetään" -#: builtin.c:3052 +#: builtin.c:3063 #, 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:3077 mpfr.c:968 +#: builtin.c:3088 mpfr.c:968 msgid "and: called with less than two arguments" msgstr "and: kutsuttu vähemmällä kuin kahdella argumentilla" -#: builtin.c:3082 +#: builtin.c:3093 #, c-format msgid "and: argument %d is non-numeric" msgstr "and: argumentti %d ei ole numeeraaliargumentti" -#: builtin.c:3086 +#: builtin.c:3097 #, 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:3109 mpfr.c:1000 +#: builtin.c:3120 mpfr.c:1000 msgid "or: called with less than two arguments" msgstr "or: kutsuttu vähemmällä kuin kahdella argumentilla" -#: builtin.c:3114 +#: builtin.c:3125 #, c-format msgid "or: argument %d is non-numeric" msgstr "or: argumentti %d ei ole numeraaliargumentti" -#: builtin.c:3118 +#: builtin.c:3129 #, 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:3140 mpfr.c:1031 +#: builtin.c:3151 mpfr.c:1031 msgid "xor: called with less than two arguments" msgstr "xor: kutsuttu vähemmällä kuin kahdella argumentilla" -#: builtin.c:3146 +#: builtin.c:3157 #, c-format msgid "xor: argument %d is non-numeric" msgstr "xor: argumentti %d ei ole numeraaliargumentti" -#: builtin.c:3150 +#: builtin.c:3161 #, 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:3175 mpfr.c:787 +#: builtin.c:3186 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl: vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:3181 +#: builtin.c:3192 #, c-format msgid "compl(%f): negative value will give strange results" msgstr "compl(%f): negatiivinen arvo antaa outoja tuloksia" -#: builtin.c:3183 +#: builtin.c:3194 #, c-format msgid "compl(%f): fractional value will be truncated" msgstr "compl(%f): jaosarvo typistetään" -#: builtin.c:3352 +#: builtin.c:3363 #, c-format msgid "dcgettext: `%s' is not a valid locale category" msgstr "dcgettext: â€%s†ei ole kelvollinen paikallinen kategoria" @@ -1164,7 +1177,7 @@ 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:395 msg.c:128 +#: command.y:1011 debug.c:401 msg.c:135 #, c-format msgid "error: " msgstr "virhe: " @@ -1202,93 +1215,93 @@ msgstr "virheellinen merkki" msgid "undefined command: %s\n" msgstr "määrittelemätön komento: %s\n" -#: debug.c:246 +#: debug.c:252 msgid "set or show the number of lines to keep in history file." msgstr "aseta tai näytä historiatiedostossa säilytettävien rivien lukumäärä." -#: debug.c:248 +#: debug.c:254 msgid "set or show the list command window size." msgstr "aseta tai näytä luettelokomentoikkunan koko." -#: debug.c:250 +#: debug.c:256 msgid "set or show gawk output file." msgstr "aseta tai näytä gawk-tulostetiedosto." -#: debug.c:252 +#: debug.c:258 msgid "set or show debugger prompt." msgstr "aseta tai näytä vianjäljittäjäkehote." -#: debug.c:254 +#: debug.c:260 msgid "(un)set or show saving of command history (value=on|off)." msgstr "aseta, poista asetus tai näytä komentohistoriatallennus (value=on|off)." -#: debug.c:256 +#: debug.c:262 msgid "(un)set or show saving of options (value=on|off)." msgstr "aseta, poista asetus tai näytä valitsintallennus (value=on|off)." -#: debug.c:258 +#: debug.c:264 msgid "(un)set or show instruction tracing (value=on|off)." msgstr "aseta, poista asetus tai näytä käskyjäljitys (value=on|off)." -#: debug.c:339 +#: debug.c:345 msgid "program not running." msgstr "ohjelma ei ole käynnissä." -#: debug.c:442 debug.c:597 +#: debug.c:448 debug.c:606 #, c-format msgid "can't read source file `%s' (%s)" msgstr "lähdetiedoston â€%s†(%s) lukeminen epäonnistui" -#: debug.c:447 +#: debug.c:453 #, c-format msgid "source file `%s' is empty.\n" msgstr "lähdetiedosto â€%s†on tyhjä.\n" -#: debug.c:474 +#: debug.c:480 msgid "no current source file." msgstr "ei nykyistä lähdekooditiedostoa." -#: debug.c:499 +#: debug.c:505 #, c-format msgid "cannot find source file named `%s' (%s)" msgstr "lähdetiedostoa nimeltä â€%s†(%s) ei kyetä lukemaan" -#: debug.c:523 +#: debug.c:529 #, c-format msgid "WARNING: source file `%s' modified since program compilation.\n" msgstr "VAROITUS: lähdekooditiedostoa â€%s†on muokattu ohjelman kääntämisen jälkeen.\n" -#: debug.c:542 +#: debug.c:551 #, c-format msgid "line number %d out of range; `%s' has %d lines" msgstr "rivinumero %d lukualueen ulkopuolella; kohteessa â€%s†on %d riviä" -#: debug.c:602 +#: debug.c:611 #, c-format msgid "unexpected eof while reading file `%s', line %d" msgstr "odottamaton eof-tiedostonloppumerkki luettaessa tiedostoa â€%sâ€, rivi %d" -#: debug.c:611 +#: debug.c:620 #, c-format msgid "source file `%s' modified since start of program execution" msgstr "lähdekooditiedostoa â€%s†on muokattu ohjelman suorituksen aloituksen jälkeen" -#: debug.c:723 +#: debug.c:732 #, c-format msgid "Current source file: %s\n" msgstr "Nykyinen lähdetiedosto: %s\n" -#: debug.c:724 +#: debug.c:733 #, c-format msgid "Number of lines: %d\n" msgstr "Rivien lukumäärä: %d\n" -#: debug.c:731 +#: debug.c:740 #, c-format msgid "Source file (lines): %s (%d)\n" msgstr "Lähdetiedosto (riviä): %s (%d)\n" -#: debug.c:745 +#: debug.c:754 msgid "" "Number Disp Enabled Location\n" "\n" @@ -1296,54 +1309,54 @@ msgstr "" "Numero Disp Käytössä Sijainti\n" "\n" -#: debug.c:756 +#: debug.c:765 #, c-format msgid "\tno of hits = %ld\n" msgstr "\tosumien lukumäärä = %ld\n" -#: debug.c:758 +#: debug.c:767 #, c-format msgid "\tignore next %ld hit(s)\n" msgstr "\tohita seuraavat %ld osumaa\n" -#: debug.c:760 debug.c:900 +#: debug.c:769 debug.c:909 #, c-format msgid "\tstop condition: %s\n" msgstr "\tpysähtymisehto: %s\n" -#: debug.c:762 debug.c:902 +#: debug.c:771 debug.c:911 msgid "\tcommands:\n" msgstr "\tkomennot:\n" -#: debug.c:784 +#: debug.c:793 #, c-format msgid "Current frame: " msgstr "Nykyinen kehys: " -#: debug.c:787 +#: debug.c:796 #, c-format msgid "Called by frame: " msgstr "Kehyksen kutsuma: " -#: debug.c:791 +#: debug.c:800 #, c-format msgid "Caller of frame: " msgstr "Kehyksen kutsuja: " -#: debug.c:809 +#: debug.c:818 #, c-format msgid "None in main().\n" msgstr "Funktiossa main() ei ole mitään.\n" -#: debug.c:839 +#: debug.c:848 msgid "No arguments.\n" msgstr "Ei argumentteja.\n" -#: debug.c:840 +#: debug.c:849 msgid "No locals.\n" msgstr "Ei paikallisia muuttujia.\n" -#: debug.c:848 +#: debug.c:857 msgid "" "All defined variables:\n" "\n" @@ -1351,7 +1364,7 @@ msgstr "" "Kaikki määritellyt muuttujat:\n" "\n" -#: debug.c:858 +#: debug.c:867 msgid "" "All defined functions:\n" "\n" @@ -1359,7 +1372,7 @@ msgstr "" "Kaikki määritellyt funktiot.\n" "\n" -#: debug.c:877 +#: debug.c:886 msgid "" "Auto-display variables:\n" "\n" @@ -1367,7 +1380,7 @@ msgstr "" "Automaattisesti näytettävät muuttujat:\n" "\n" -#: debug.c:880 +#: debug.c:889 msgid "" "Watch variables:\n" "\n" @@ -1375,357 +1388,357 @@ msgstr "" "Vahtimuuttujia:\n" "\n" -#: debug.c:1020 +#: debug.c:1029 #, c-format msgid "no symbol `%s' in current context\n" msgstr "symbolia â€%s†ei löydy nykyisestä asiayhteydestä\n" -#: debug.c:1032 debug.c:1418 +#: debug.c:1041 debug.c:1427 #, c-format msgid "`%s' is not an array\n" msgstr "â€%s†ei ole taulukko\n" -#: debug.c:1046 +#: debug.c:1055 #, c-format msgid "$%ld = uninitialized field\n" msgstr "$%ld = alustamaton kenttä\n" -#: debug.c:1067 +#: debug.c:1076 #, c-format msgid "array `%s' is empty\n" msgstr "taulukko â€%s†on tyhjä\n" -#: debug.c:1110 debug.c:1162 +#: debug.c:1119 debug.c:1171 #, c-format msgid "[\"%s\"] not in array `%s'\n" msgstr "[â€%sâ€] ei ole taulukossa â€%sâ€\n" -#: debug.c:1166 +#: debug.c:1175 #, c-format msgid "`%s[\"%s\"]' is not an array\n" msgstr "â€%s[\"%s\"]†ei ole taulukko\n" -#: debug.c:1227 debug.c:4949 +#: debug.c:1236 debug.c:4964 #, c-format msgid "`%s' is not a scalar variable" msgstr "â€%s†ei ole skalaarimuuttuja" -#: debug.c:1249 debug.c:4979 +#: debug.c:1258 debug.c:4994 #, c-format msgid "attempt to use array `%s[\"%s\"]' in a scalar context" msgstr "yritettiin käyttää taulukkoa â€%s[\"%s\"]†skalaarikontekstissa" -#: debug.c:1271 debug.c:4990 +#: debug.c:1280 debug.c:5005 #, c-format msgid "attempt to use scalar `%s[\"%s\"]' as array" msgstr "yritettiin käyttää skalaaria â€%s[\"%s\"]†taulukkona" -#: debug.c:1414 +#: debug.c:1423 #, c-format msgid "`%s' is a function" msgstr "â€%s†on funktio" -#: debug.c:1456 +#: debug.c:1465 #, c-format msgid "watchpoint %d is unconditional\n" msgstr "watchpoint %d ei ole ehdollinen\n" -#: debug.c:1490 +#: debug.c:1499 #, c-format msgid "No display item numbered %ld" msgstr "Yksikään näyttörivi ei ole numeroitu %ld" -#: debug.c:1493 +#: debug.c:1502 #, c-format msgid "No watch item numbered %ld" msgstr "Yksikään vahtirivi ei ole numeroitu %ld" -#: debug.c:1519 +#: debug.c:1528 #, c-format msgid "%d: [\"%s\"] not in array `%s'\n" msgstr "%d: [â€%sâ€] ei ole taulukossa â€%sâ€\n" -#: debug.c:1758 +#: debug.c:1767 msgid "attempt to use scalar value as array" msgstr "yritettiin käyttää skalaariarvoa taulukkona" -#: debug.c:1847 +#: debug.c:1856 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" msgstr "Watchpoint %d poistettiin, koska parametri on lukualueen ulkopuolella.\n" -#: debug.c:1858 +#: debug.c:1867 #, c-format msgid "Display %d deleted because parameter is out of scope.\n" msgstr "Display %d poistettiin, koska parametri on lukualueen ulkopuolella.\n" -#: debug.c:1891 +#: debug.c:1900 #, c-format msgid " in file `%s', line %d\n" msgstr " tiedostossa â€%sâ€, rivi %d\n" -#: debug.c:1912 +#: debug.c:1921 #, c-format msgid " at `%s':%d" msgstr " osoitteessa â€%sâ€:%d" -#: debug.c:1928 debug.c:1991 +#: debug.c:1937 debug.c:2000 #, c-format msgid "#%ld\tin " msgstr "#%ld\tkohteessa " -#: debug.c:1965 +#: debug.c:1974 #, c-format msgid "More stack frames follow ...\n" msgstr "Lisää pinokehyksiä seuraa ...\n" -#: debug.c:2008 +#: debug.c:2017 msgid "invalid frame number" msgstr "virheellinen kehysnumero" -#: debug.c:2180 +#: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" msgstr "Huomaa: keskeytyskohta %d (otettu käyttöön, ohita seuraavat %ld osumaa), asetettu myös osoitteessa %s:%d" -#: debug.c:2187 +#: debug.c:2207 #, c-format msgid "Note: breakpoint %d (enabled), also set at %s:%d" msgstr "Huomaa: keskeytyskohta %d (otettu käyttöön), asetettu myös kohdassa %s:%d" -#: debug.c:2194 +#: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" msgstr "Huomaa: keskeytyskohta %d (otettu pois käytöstä, ohita seuraavat %ld osumaa), asetettu myös kohdassa %s:%d" -#: debug.c:2201 +#: debug.c:2221 #, c-format msgid "Note: breakpoint %d (disabled), also set at %s:%d" msgstr "Huomaa: keskeytyskohta %d (otettu pois käytöstä), asetettu myös kohdassa %s:%d" -#: debug.c:2218 +#: debug.c:2238 #, c-format msgid "Breakpoint %d set at file `%s', line %d\n" msgstr "Keskeytyskohta %d asetettu tiedostossa â€%sâ€, rivi %d\n" -#: debug.c:2320 +#: debug.c:2340 #, c-format msgid "Can't set breakpoint in file `%s'\n" msgstr "Keskeytyskohdan asetaminen tiedostossa â€%s†epäonnistui\n" -#: debug.c:2349 debug.c:2472 debug.c:3330 +#: debug.c:2369 debug.c:2492 debug.c:3350 #, c-format msgid "line number %d in file `%s' out of range" msgstr "rivinumero %d tiedostossa â€%s†on lukualueen ulkopuolella" -#: debug.c:2353 +#: debug.c:2373 #, c-format msgid "Can't find rule!!!\n" msgstr "Säännön löytäminen epäonnistui!!!\n" -#: debug.c:2355 +#: debug.c:2375 #, c-format msgid "Can't set breakpoint at `%s':%d\n" msgstr "Keskeytykohdan asettaminen kohdassa â€%sâ€:%d epäonnistui\n" -#: debug.c:2367 +#: debug.c:2387 #, c-format msgid "Can't set breakpoint in function `%s'\n" msgstr "Keskeytyskohdan asettaminen funktiossa â€%s†epäonnistui\n" -#: debug.c:2383 +#: debug.c:2403 #, c-format msgid "breakpoint %d set at file `%s', line %d is unconditional\n" msgstr "keskeytyskohta %d asetettu tiedostossa â€%sâ€, rivi %d on ehdoton\n" -#: debug.c:2488 debug.c:2510 +#: debug.c:2508 debug.c:2530 #, c-format msgid "Deleted breakpoint %d" msgstr "Poistettu keskeytyskohta %d" -#: debug.c:2494 +#: debug.c:2514 #, c-format msgid "No breakpoint(s) at entry to function `%s'\n" msgstr "Ei keskeytyskohtaa funktion â€%s†sisääntulossa\n" -#: debug.c:2521 +#: debug.c:2541 #, c-format msgid "No breakpoint at file `%s', line #%d\n" msgstr "Tiedostossa â€%s†ei ole keskeytyskohtaa, rivi #%d\n" -#: debug.c:2576 debug.c:2617 debug.c:2637 debug.c:2680 +#: debug.c:2596 debug.c:2637 debug.c:2657 debug.c:2700 msgid "invalid breakpoint number" msgstr "virheellinen keskeytyskohtanumero" -#: debug.c:2592 +#: debug.c:2612 msgid "Delete all breakpoints? (y or n) " msgstr "Poistetaanko kaikki keskeytyskohdata? (y tai n) " -#: debug.c:2593 debug.c:2903 debug.c:2956 +#: debug.c:2613 debug.c:2923 debug.c:2976 msgid "y" msgstr "k" -#: debug.c:2642 +#: debug.c:2662 #, c-format msgid "Will ignore next %ld crossing(s) of breakpoint %d.\n" msgstr "Keskeytyskohta %2$d:n seuraavat %1$ld risteystä ohitetaan.\n" -#: debug.c:2646 +#: debug.c:2666 #, c-format msgid "Will stop next time breakpoint %d is reached.\n" msgstr "Pysähtyy seuraavalla kerralla kun keskeytyskohta %d saavutetaan.\n" -#: debug.c:2763 +#: debug.c:2783 #, c-format msgid "Can only debug programs provided with the `-f' option.\n" msgstr "Vain ohjelmia, jotka tarjoavat valitsimen â€-fâ€, voidaan vikajäljittää.\n" -#: debug.c:2888 +#: debug.c:2908 #, c-format msgid "Failed to restart debugger" msgstr "Vianjäljittäjän uudelleenkäynnistys epäonnistui" -#: debug.c:2902 +#: debug.c:2922 msgid "Program already running. Restart from beginning (y/n)? " msgstr "Ohjelma on jo käynnissä. Käynnistetäänkö uudelleen alusta (y/n)? " -#: debug.c:2906 +#: debug.c:2926 #, c-format msgid "Program not restarted\n" msgstr "Ohjelma ei käynnistynyt uudelleen\n" -#: debug.c:2916 +#: debug.c:2936 #, c-format msgid "error: cannot restart, operation not allowed\n" msgstr "virhe: uudelleenkäynnistys epäonnistui, toiminto ei ole sallittu\n" -#: debug.c:2922 +#: debug.c:2942 #, c-format msgid "error (%s): cannot restart, ignoring rest of the commands\n" msgstr "virhe (%s): uudelleenkäynnistys epäonnistui, loput komennot ohitetaan\n" -#: debug.c:2930 +#: debug.c:2950 #, c-format msgid "Starting program: \n" msgstr "Käynnistetään ohjelma: \n" -#: debug.c:2939 +#: debug.c:2959 #, c-format msgid "Program exited %s with exit value: %d\n" msgstr "Ohjelma päättyi %s päättymisarvolla: %d\n" -#: debug.c:2955 +#: debug.c:2975 msgid "The program is running. Exit anyway (y/n)? " msgstr "Ohjelma on käynnissä. Poistutaanko silti (y/n)? " -#: debug.c:2990 +#: debug.c:3010 #, c-format msgid "Not stopped at any breakpoint; argument ignored.\n" msgstr "Ei pysäytetty yhdessäkään keskeytyskohdassa; argumentti ohitetaan.\n" -#: debug.c:2995 +#: debug.c:3015 #, c-format msgid "invalid breakpoint number %d." msgstr "virheellinen keskeytyskohtanumero %d." -#: debug.c:3000 +#: debug.c:3020 #, c-format msgid "Will ignore next %ld crossings of breakpoint %d.\n" msgstr "Ohittaa seuraavat %ld keskeytyskohdan %d ylitystä.\n" -#: debug.c:3187 +#: debug.c:3207 #, c-format msgid "'finish' not meaningful in the outermost frame main()\n" msgstr "’finish’ ei ole merkityksellinen ulommaisen kehyksen main()-funktiossa\n" -#: debug.c:3192 +#: debug.c:3212 #, c-format msgid "Run till return from " msgstr "Suorita kunnes paluu kohteesta " -#: debug.c:3235 +#: debug.c:3255 #, c-format msgid "'return' not meaningful in the outermost frame main()\n" msgstr "’return’ ei ole merkityksellinen ulommaisen kehyksen main()-funktiossa\n" -#: debug.c:3349 +#: debug.c:3369 #, c-format msgid "Can't find specified location in function `%s'\n" msgstr "Määritellyn sijainnin löytyminen funktiossa â€%s†epäonnistui\n" -#: debug.c:3357 +#: debug.c:3377 #, c-format msgid "invalid source line %d in file `%s'" msgstr "virheellinen lähdekoodirivi %d tiedostossa â€%sâ€" -#: debug.c:3372 +#: debug.c:3392 #, c-format msgid "Can't find specified location %d in file `%s'\n" msgstr "Määritellyn sijainnin %d löytyminen tiedostossa â€%s†epäonnistui\n" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "element not in array\n" msgstr "elementti ei ole taulukossa\n" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "untyped variable\n" msgstr "tyypitön muuttuja\n" -#: debug.c:3446 +#: debug.c:3466 #, c-format msgid "Stopping in %s ...\n" msgstr "Pysäytetään kohdassa %s ...\n" -#: debug.c:3523 +#: debug.c:3543 #, c-format msgid "'finish' not meaningful with non-local jump '%s'\n" msgstr "’finish’ ei ole merkityksellinen ei-paikallisessa hypyssä ’%s’\n" -#: debug.c:3530 +#: debug.c:3550 #, c-format msgid "'until' not meaningful with non-local jump '%s'\n" msgstr "’until’ ei ole merkityksellinen ei-paikallisessa hypyssä ’%s’\n" -#: debug.c:4165 +#: debug.c:4185 msgid "\t------[Enter] to continue or q [Enter] to quit------" msgstr "\t------Jatka painamalla [Enter] tai poistu painamalla q [Enter]------" -#: debug.c:4166 +#: debug.c:4186 msgid "q" msgstr "q" -#: debug.c:4986 +#: debug.c:5001 #, c-format msgid "[\"%s\"] not in array `%s'" msgstr "[â€%sâ€] ei ole taulukossa â€%sâ€" -#: debug.c:5192 +#: debug.c:5207 #, c-format msgid "sending output to stdout\n" msgstr "lähetetään tuloste vakiotulosteeseen\n" -#: debug.c:5232 +#: debug.c:5247 msgid "invalid number" msgstr "virheellinen numero" -#: debug.c:5366 +#: debug.c:5381 #, c-format msgid "`%s' not allowed in current context; statement ignored" msgstr "â€%s†ei ole sallittu nykyisessä asiayhteydessä; lause ohitetaan" -#: debug.c:5374 +#: debug.c:5389 msgid "`return' not allowed in current context; statement ignored" msgstr "â€return†ei ole sallittu nykyisessä asiayhteydessä; lause ohitetaan" -#: debug.c:5575 +#: debug.c:5590 #, c-format msgid "No symbol `%s' in current context" msgstr "Symbolia â€%s†ei ole nykyisesssä asiayhteydessä" #: 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:1192 +#: dfa.c:1106 dfa.c:1111 dfa.c:1124 dfa.c:1191 msgid "unbalanced [" msgstr "pariton [" @@ -1733,31 +1746,31 @@ msgstr "pariton [" msgid "invalid character class" msgstr "virheellinen merkkiluokka" -#: dfa.c:1229 +#: dfa.c:1228 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "merkkiluokkasyntaksi on [[:space:]], ei [:space:]" -#: dfa.c:1281 +#: dfa.c:1280 msgid "unfinished \\ escape" msgstr "päättymätön \\-koodinvaihtomerkki" -#: dfa.c:1428 regcomp.c:161 +#: dfa.c:1427 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "Virheellinen \\{\\}-sisältö" -#: dfa.c:1431 regcomp.c:176 +#: dfa.c:1430 regcomp.c:176 msgid "Regular expression too big" msgstr "Säännöllinen lauseke on liian iso" -#: dfa.c:1816 +#: dfa.c:1847 msgid "unbalanced (" msgstr "pariton (" -#: dfa.c:1943 +#: dfa.c:1973 msgid "no syntax specified" msgstr "syntaksi ei ole määritelty" -#: dfa.c:1951 +#: dfa.c:1981 msgid "unbalanced )" msgstr "pariton )" @@ -1776,11 +1789,11 @@ msgstr "tuntematon käskykoodi %d" msgid "opcode %s not an operator or keyword" msgstr "käskykoodi %s ei ole operaattori tai avainsana" -#: eval.c:471 +#: eval.c:472 msgid "buffer overflow in genflags2str" msgstr "puskurin ylivuoto funktiossa genflags2str" -#: eval.c:674 +#: eval.c:675 #, c-format msgid "" "\n" @@ -1791,71 +1804,71 @@ msgstr "" "\t# Funktiokutsupino:\n" "\n" -#: eval.c:703 +#: eval.c:704 msgid "`IGNORECASE' is a gawk extension" msgstr "â€IGNORECASE†on gawk-laajennus" -#: eval.c:735 +#: eval.c:736 msgid "`BINMODE' is a gawk extension" msgstr "â€BINMODE†on gawk-laajennus" -#: eval.c:793 +#: eval.c:794 #, c-format msgid "BINMODE value `%s' is invalid, treated as 3" msgstr "BINMODE-arvo â€%s†on virheellinen, käsiteltiin arvona 3" -#: eval.c:884 +#: eval.c:885 #, c-format msgid "bad `%sFMT' specification `%s'" msgstr "väärä â€%sFMTâ€-määritys â€%sâ€" -#: eval.c:968 +#: eval.c:969 msgid "turning off `--lint' due to assignment to `LINT'" msgstr "käännetään pois â€--lintâ€-valitsin â€LINTâ€-sijoituksen vuoksi" -#: eval.c:1146 +#: eval.c:1147 #, c-format msgid "reference to uninitialized argument `%s'" msgstr "viite alustamattomaan argumenttiin â€%sâ€" -#: eval.c:1147 +#: eval.c:1148 #, c-format msgid "reference to uninitialized variable `%s'" msgstr "viite alustamattomaan muuttujaan â€%sâ€" -#: eval.c:1165 +#: eval.c:1166 msgid "attempt to field reference from non-numeric value" msgstr "yritettiin kenttäviitettä arvosta, joka ei ole numeerinen" -#: eval.c:1167 +#: eval.c:1168 msgid "attempt to field reference from null string" msgstr "yritettiin kenttäviitettä null-merkkijonosta" -#: eval.c:1175 +#: eval.c:1176 #, c-format msgid "attempt to access field %ld" msgstr "yritettiin saantia kenttään %ld" -#: eval.c:1184 +#: eval.c:1185 #, c-format msgid "reference to uninitialized field `$%ld'" msgstr "viite alustamattomaan kenttään â€$%ldâ€" -#: eval.c:1271 +#: eval.c:1272 #, c-format msgid "function `%s' called with more arguments than declared" msgstr "funktio â€%s†kutsuttiin useammalla argumentilla kuin esiteltiin" -#: eval.c:1466 +#: eval.c:1473 #, c-format msgid "unwind_stack: unexpected type `%s'" msgstr "unwind_stack: odottamaton tyyppi â€%sâ€" -#: eval.c:1562 +#: eval.c:1569 msgid "division by zero attempted in `/='" msgstr "jakoa nollalla yritettiin operaatiossa â€/=â€" -#: eval.c:1569 +#: eval.c:1576 #, c-format msgid "division by zero attempted in `%%='" msgstr "jakoa nollalla yritettiin operaatiossa â€%%=â€" @@ -1868,7 +1881,7 @@ msgstr "laajennuksia ei sallita hiekkalaatikkotilassa" msgid "-l / @load are gawk extensions" msgstr "-l / @load ovat gawk-laajennuksia" -#: ext.c:95 ext.c:177 +#: ext.c:95 msgid "load_ext: received NULL lib_name" msgstr "load_ext: vastaanotettiin NULL lib_name" @@ -1896,6 +1909,10 @@ msgstr "load_ext: kirjaston â€%s†alustusrutiini â€%s†epäonnistui\n" msgid "`extension' is a gawk extension" msgstr "â€extension†on gawk-laajennus" +#: ext.c:177 +msgid "extension: received NULL lib_name" +msgstr "extension: vastaanotettiin NULL lib_name" + #: ext.c:180 #, c-format msgid "extension: cannot open library `%s' (%s)" @@ -1915,36 +1932,36 @@ msgstr "extension: kirjasto â€%sâ€: funktion â€%s†(%s) kutsu epäonnistui" msgid "make_builtin: missing function name" msgstr "make_builtin: puuttuva funktionimi" -#: ext.c:238 +#: ext.c:236 #, c-format msgid "make_builtin: can't redefine function `%s'" msgstr "make_builtin: funktion â€%s†uudelleenmäärittely epäonnistui" -#: ext.c:242 +#: ext.c:240 #, c-format msgid "make_builtin: function `%s' already defined" msgstr "make_builtin: funktio â€%s†on jo määritelty" -#: ext.c:246 +#: ext.c:244 #, c-format msgid "make_builtin: function name `%s' previously defined" msgstr "make_builtin: funktionimi â€%s†on määritelty jo aiemmin" -#: ext.c:248 +#: ext.c:246 #, 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:251 ext.c:304 +#: ext.c:249 ext.c:304 #, c-format msgid "make_builtin: negative argument count for function `%s'" msgstr "make_builtin: negatiivinen argumenttilukumäärä funktiolle â€%sâ€" -#: ext.c:278 +#: ext.c:276 msgid "extension: missing function name" msgstr "extension: puuttuva funktionimi" -#: ext.c:283 +#: ext.c:279 ext.c:283 #, c-format msgid "extension: illegal character `%c' in function name `%s'" msgstr "extension: virheellinen merkki â€%c†funktionimessä â€%sâ€" @@ -1969,139 +1986,143 @@ msgstr "extension: funktionimi â€%s†on määritelty jo aiemmin" 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:374 +#: ext.c:375 #, 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:377 +#: ext.c:378 #, c-format msgid "function `%s': missing argument #%d" msgstr "function â€%sâ€: puuttuva argumentti #%d" -#: ext.c:394 +#: ext.c:395 #, 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:398 +#: ext.c:399 #, 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:412 +#: ext.c:413 msgid "dynamic loading of library not supported" msgstr "kirjaston dynaamista latausta ei tueta" -#: extension/filefuncs.c:97 +#: extension/filefuncs.c:159 msgid "chdir: called with incorrect number of arguments, expecting 1" msgstr "chdir: kutsuttu argumenttien väärällä lukumäärällä, odotettiin 1" -#: extension/filefuncs.c:343 +#: extension/filefuncs.c:439 #, c-format msgid "stat: unable to read symbolic link `%s'" msgstr "stat: symbolisen linkin â€%s†lukeminen epäonnistui" -#: extension/filefuncs.c:376 +#: extension/filefuncs.c:472 msgid "stat: called with wrong number of arguments" msgstr "stat: kutsuttu argumenttien väärällä lukumäärällä" -#: extension/filefuncs.c:383 +#: extension/filefuncs.c:479 msgid "stat: bad parameters" msgstr "stat: väärät parametrit" -#: extension/filefuncs.c:437 +#: extension/filefuncs.c:533 #, c-format msgid "fts init: could not create variable %s" msgstr "fts init: muuttujan %s luominen epäonnistui" -#: extension/filefuncs.c:460 +#: extension/filefuncs.c:554 +msgid "fts is not supported on this system" +msgstr "fts ei ole tuettu tässä järjestelmässä" + +#: extension/filefuncs.c:573 msgid "fill_stat_element: could not create array" msgstr "fill_stat_element: taulukon luominen epäonnistui" -#: extension/filefuncs.c:469 +#: extension/filefuncs.c:582 msgid "fill_stat_element: could not set element" msgstr "fill_stat_element: elementin asettaminen epäonnistui" -#: extension/filefuncs.c:484 +#: extension/filefuncs.c:597 msgid "fill_path_element: could not set element" msgstr "fill_path_element: elementin asettaminen epäonnistui" -#: extension/filefuncs.c:500 +#: extension/filefuncs.c:613 msgid "fill_error_element: could not set element" msgstr "fill_error_element: elementin asettaminen epäonnistui" -#: extension/filefuncs.c:547 extension/filefuncs.c:594 +#: extension/filefuncs.c:660 extension/filefuncs.c:707 msgid "fts-process: could not create array" msgstr "fts-process: taulukon luominen epäonnistui" -#: extension/filefuncs.c:557 extension/filefuncs.c:604 -#: extension/filefuncs.c:622 +#: extension/filefuncs.c:670 extension/filefuncs.c:717 +#: extension/filefuncs.c:735 msgid "fts-process: could not set element" msgstr "fts-process: elementin asettaminen epäonnistui" -#: extension/filefuncs.c:671 +#: extension/filefuncs.c:784 msgid "fts: called with incorrect number of arguments, expecting 3" msgstr "fts: kutsuttu argumenttien väärällä lukumäärällä, odotettiin 3" -#: extension/filefuncs.c:674 +#: extension/filefuncs.c:787 msgid "fts: bad first parameter" msgstr "fts: väärä ensimmäinen parametri" -#: extension/filefuncs.c:680 +#: extension/filefuncs.c:793 msgid "fts: bad second parameter" msgstr "fts: väärä toinen parametri" -#: extension/filefuncs.c:686 +#: extension/filefuncs.c:799 msgid "fts: bad third parameter" msgstr "fts: väärä kolmas parametri" -#: extension/filefuncs.c:693 +#: extension/filefuncs.c:806 msgid "fts: could not flatten array\n" msgstr "fts: taulukon litistäminen epäonnistui\n" -#: extension/filefuncs.c:711 +#: extension/filefuncs.c:824 msgid "fts: ignoring sneaky FTS_NOSTAT flag. nyah, nyah, nyah." msgstr "fts: ohitetaan petollinen FTS_NOSTAT-lippu. nyyh, nyyh, nyyh." -#: extension/filefuncs.c:728 +#: extension/filefuncs.c:841 msgid "fts: clear_array() failed\n" msgstr "fts: clear_array() epäonnistui\n" -#: extension/fnmatch.c:98 +#: extension/fnmatch.c:112 msgid "fnmatch: called with less than three arguments" msgstr "fnmatch: kutsuttu vähemmällä kuin kolmella argumentilla" -#: extension/fnmatch.c:101 +#: extension/fnmatch.c:115 msgid "fnmatch: called with more than three arguments" msgstr "fnmatch: kutsuttu useammalla kuin kolmella argumentilla" -#: extension/fnmatch.c:104 +#: extension/fnmatch.c:118 msgid "fnmatch: could not get first argument" msgstr "fnmatch: ensimmäistä argumenttia ei saatu" -#: extension/fnmatch.c:109 +#: extension/fnmatch.c:123 msgid "fnmatch: could not get second argument" msgstr "fnmatch: toista argumenttia ei saatu" -#: extension/fnmatch.c:114 +#: extension/fnmatch.c:128 msgid "fnmatch: could not get third argument" msgstr "fnmatch: kolmatta argumenttia ei saatu" -#: extension/fnmatch.c:127 +#: extension/fnmatch.c:141 msgid "fnmatch is not implemented on this system\n" msgstr "fnmatch ei ole toteutettu tässä järjestelmässä\n" -#: extension/fnmatch.c:159 +#: extension/fnmatch.c:173 msgid "fnmatch init: could not add FNM_NOMATCH variable" msgstr "fnmatch init: muuttujan FNM_NOMATCH lisääminen epäonnistui" -#: extension/fnmatch.c:169 +#: extension/fnmatch.c:183 #, c-format msgid "fnmatch init: could not set array element %s" msgstr "fnmatch init: taulukkoelementin %s asettaminen epäonnistui" -#: extension/fnmatch.c:179 +#: extension/fnmatch.c:193 msgid "fnmatch init: could not install FNM array" msgstr "fnmatch init: FNM-taulukon lisääminen epäonnistui" @@ -2125,88 +2146,88 @@ msgstr "wait: kutsuttu ilman argumentteja" msgid "wait: called with too many arguments" msgstr "wait: kutsuttu liian monella argumentilla" -#: extension/inplace.c:110 +#: extension/inplace.c:130 msgid "inplace_begin: in-place editing already active" msgstr "inplace_begin: kohdallaanmuokkaus on jo aktivoitu" -#: extension/inplace.c:113 extension/inplace.c:187 +#: extension/inplace.c:133 extension/inplace.c:207 #, c-format msgid "inplace_begin: expects 2 arguments but called with %d" msgstr "inplace_begin: odotetaan 2 argumenttia, mutta kutsussa oli %d argumenttia" -#: extension/inplace.c:116 +#: extension/inplace.c:136 msgid "inplace_begin: cannot retrieve 1st argument as a string filename" msgstr "inplace_begin: ensimmäisen argumentin noutaminen merkkijonotiedostonimenä epäonnistui" -#: extension/inplace.c:124 +#: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" msgstr "inplace_begin: ottaen pois käytöstä virheellisen TIEDOSTONIMI â€%s†muokkauksen" -#: extension/inplace.c:131 +#: extension/inplace.c:151 #, c-format msgid "inplace_begin: Cannot stat `%s' (%s)" msgstr "inplace_begin: stat â€%s†(%s) epäonnistui" -#: extension/inplace.c:138 +#: extension/inplace.c:158 #, c-format msgid "inplace_begin: `%s' is not a regular file" msgstr "inplace_begin: â€%s†ei ole tavallinen tiedosto" -#: extension/inplace.c:149 +#: extension/inplace.c:169 #, c-format msgid "inplace_begin: mkstemp(`%s') failed (%s)" msgstr "inplace_begin: mkstemp(â€%sâ€) epäonnistui (%s)" -#: extension/inplace.c:158 +#: extension/inplace.c:178 #, c-format msgid "inplace_begin: chmod failed (%s)" msgstr "inplace_begin: chmod epäonnistui (%s)" -#: extension/inplace.c:165 +#: extension/inplace.c:185 #, c-format msgid "inplace_begin: dup(stdout) failed (%s)" msgstr "inplace_begin: dup(stdout) epäonnistui (%s)" -#: extension/inplace.c:168 +#: extension/inplace.c:188 #, c-format msgid "inplace_begin: dup2(%d, stdout) failed (%s)" msgstr "inplace_begin: dup2(%d, stdout) epäonnistui (%s)" -#: extension/inplace.c:171 +#: extension/inplace.c:191 #, c-format msgid "inplace_begin: close(%d) failed (%s)" msgstr "inplace_begin: close(%d) epäonnistui (%s)" -#: extension/inplace.c:190 +#: extension/inplace.c:210 msgid "inplace_end: cannot retrieve 1st argument as a string filename" msgstr "inplace_end: ensimmäisen argumentin noutaminen merkkijonotiedostonimenä epäonnistui" -#: extension/inplace.c:197 +#: extension/inplace.c:217 msgid "inplace_end: in-place editing not active" msgstr "inplace_end: kohdallaanmuokkaus ei ole aktiivinen" -#: extension/inplace.c:203 +#: extension/inplace.c:223 #, c-format msgid "inplace_end: dup2(%d, stdout) failed (%s)" msgstr "inplace_end: dup2(%d, stdout) epäonnistui (%s)" -#: extension/inplace.c:206 +#: extension/inplace.c:226 #, c-format msgid "inplace_end: close(%d) failed (%s)" msgstr "inplace_end: close(%d) epäonnistui (%s)" -#: extension/inplace.c:210 +#: extension/inplace.c:230 #, c-format msgid "inplace_end: fsetpos(stdout) failed (%s)" msgstr "inplace_end: fsetpos(stdout) epäonnistui (%s)" -#: extension/inplace.c:223 +#: extension/inplace.c:243 #, c-format msgid "inplace_end: link(`%s', `%s') failed (%s)" msgstr "inplace_end: link(â€%sâ€, â€%sâ€) epäonnistui (%s)." -#: extension/inplace.c:229 +#: extension/inplace.c:253 #, c-format msgid "inplace_end: rename(`%s', `%s') failed (%s)" msgstr "inplace_end: rename(â€%sâ€, â€%sâ€) epäonnistui (%s)" @@ -2235,7 +2256,7 @@ msgstr "chr: kutsuttu ilman argumentteja" msgid "chr: called with inappropriate argument(s)" msgstr "chr: kutsuttu sopimattomalla argumentilla" -#: extension/readdir.c:203 +#: extension/readdir.c:277 #, c-format msgid "dir_take_control_of: opendir/fdopendir failed: %s" msgstr "dir_take_control_of: opendir/fdopendir epäonnistui: %s" @@ -2248,152 +2269,152 @@ msgstr "readfile: kutsuttu liian monella argumentilla" msgid "readfile: called with no arguments" msgstr "readfile: kutsuttu ilman argumentteja" -#: extension/rwarray.c:120 +#: extension/rwarray.c:124 msgid "writea: called with too many arguments" msgstr "writea: kutsuttu liian monella argumentilla" -#: extension/rwarray.c:127 +#: extension/rwarray.c:131 #, c-format msgid "do_writea: argument 0 is not a string\n" msgstr "do_writea: argumentti 0 ei ole merkkijono\n" -#: extension/rwarray.c:133 +#: extension/rwarray.c:137 #, c-format msgid "do_writea: argument 1 is not an array\n" msgstr "do_writea: argumentti 1 ei ole taulukko\n" -#: extension/rwarray.c:180 +#: extension/rwarray.c:184 #, c-format msgid "write_array: could not flatten array\n" msgstr "write_array: taulukon litistäminen epäonnistui\n" -#: extension/rwarray.c:194 +#: extension/rwarray.c:198 #, c-format msgid "write_array: could not release flattened array\n" msgstr "write_array: litistettyä taulukon vapauttaminen epäonnistui\n" -#: extension/rwarray.c:276 +#: extension/rwarray.c:280 msgid "reada: called with too many arguments" msgstr "reada: kutsuttu liian monilla argumenteilla" -#: extension/rwarray.c:283 +#: extension/rwarray.c:287 #, c-format msgid "do_reada: argument 0 is not a string\n" msgstr "do_reada: argumentti 0 ei ole merkkijono\n" -#: extension/rwarray.c:289 +#: extension/rwarray.c:293 #, c-format msgid "do_reada: argument 1 is not an array\n" msgstr "do_reada: argumentti 1 ei ole taulukko\n" -#: extension/rwarray.c:333 +#: extension/rwarray.c:337 #, c-format msgid "do_reada: clear_array failed\n" msgstr "do_reada: clear_array epäonnistui\n" -#: extension/rwarray.c:370 +#: extension/rwarray.c:374 #, c-format msgid "read_array: set_array_element failed\n" msgstr "read_array: set_array_element epäonnistui\n" -#: extension/time.c:81 +#: extension/time.c:106 msgid "gettimeofday: ignoring arguments" msgstr "gettimeofday: ohitetaan argumentit" -#: extension/time.c:112 +#: extension/time.c:137 msgid "gettimeofday: not supported on this platform" msgstr "gettimeofday: ei ole tuettu tällä alustalla" -#: extension/time.c:133 +#: extension/time.c:158 msgid "sleep: called with too many arguments" msgstr "sleep: kutsuttu liian monella argumentilla" -#: extension/time.c:136 +#: extension/time.c:161 msgid "sleep: missing required numeric argument" msgstr "sleep: puuttuu vaadittu numeerinen argumentti" -#: extension/time.c:142 +#: extension/time.c:167 msgid "sleep: argument is negative" msgstr "sleep: argumentti on negatiivinen" -#: extension/time.c:176 +#: extension/time.c:201 msgid "sleep: not supported on this platform" msgstr "sleep: ei ole tuettu tällä alustalla" -#: field.c:339 +#: field.c:345 msgid "NF set to negative value" msgstr "NF asetettu negatiiviseen arvoon" -#: field.c:964 field.c:971 field.c:975 +#: field.c:971 field.c:978 field.c:982 msgid "split: fourth argument is a gawk extension" msgstr "split: neljäs argumentti on gawk-laajennus" -#: field.c:968 +#: field.c:975 msgid "split: fourth argument is not an array" msgstr "split: neljäs argumentti ei ole taulukko" -#: field.c:982 +#: field.c:989 msgid "split: second argument is not an array" msgstr "split: toinen argumentti ei ole taulukko" -#: field.c:986 +#: field.c:993 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:991 +#: field.c:998 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:994 +#: field.c:1001 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:1023 +#: field.c:1032 msgid "split: null string for third arg is a gawk extension" msgstr "split: null-merkkijono kolmantena argumenttina on gawk-laajennus" -#: field.c:1063 +#: field.c:1072 msgid "patsplit: fourth argument is not an array" msgstr "patsplit: neljäs argumentti ei ole taulukko" -#: field.c:1068 +#: field.c:1077 msgid "patsplit: second argument is not an array" msgstr "patsplit: toinen argumentti ei ole taulukko" -#: field.c:1074 +#: field.c:1083 msgid "patsplit: third argument must be non-null" msgstr "patsplit: kolmas argumentti ei ole taulukko" -#: field.c:1078 +#: field.c:1087 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:1083 +#: field.c:1092 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:1086 +#: field.c:1095 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:1124 +#: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" msgstr "â€FIELDWIDTHS†on gawk-laajennus" -#: field.c:1188 +#: field.c:1197 #, c-format msgid "invalid FIELDWIDTHS value, near `%s'" msgstr "virheellinen FIELDWIDTHS-arvo, lähellä â€%sâ€" -#: field.c:1261 +#: field.c:1270 msgid "null string for `FS' is a gawk extension" msgstr "null-merkkijono â€FSâ€-kenttäerotinmuuttujalle on gawk-laajennus" -#: field.c:1265 +#: field.c:1274 msgid "old awk does not support regexps as value of `FS'" msgstr "vanha awk ei tue regexp-arvoja â€FSâ€-kenttäerotinmuuttujana" -#: field.c:1384 +#: field.c:1393 msgid "`FPAT' is a gawk extension" msgstr "â€FPAT†on gawk-laajennus" @@ -2417,565 +2438,565 @@ msgstr "remove_element: vastaanotettu null-taulukko" msgid "remove_element: received null subscript" msgstr "remove_element: vastaanotti null-alaindeksin" -#: gawkapi.c:943 +#: gawkapi.c:948 #, c-format msgid "api_flatten_array: could not convert index %d\n" msgstr "api_flatten_array: indeksin %d muuntaminen epäonnistui\n" -#: gawkapi.c:948 +#: gawkapi.c:953 #, c-format msgid "api_flatten_array: could not convert value %d\n" msgstr "api_flatten_array: arvon %d muuntaminen epäonnistui\n" -#: getopt.c:603 getopt.c:632 +#: getopt.c:604 getopt.c:633 #, c-format msgid "%s: option '%s' is ambiguous; possibilities:" msgstr "%s: valitsin ’%s’ ei ole yksiselitteinen; mahdollisuudet:" -#: getopt.c:678 getopt.c:682 +#: getopt.c:679 getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: valitsin ’--%s’ ei salli argumenttia\n" -#: getopt.c:691 getopt.c:696 +#: getopt.c:692 getopt.c:697 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: valitsin ’%c%s’ ei salli argumenttia\n" -#: getopt.c:739 getopt.c:758 +#: getopt.c:740 getopt.c:759 #, c-format msgid "%s: option '--%s' requires an argument\n" msgstr "%s: valitsin ’--%s’ vaatii argumentin\n" -#: getopt.c:796 getopt.c:799 +#: getopt.c:797 getopt.c:800 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: tunnistamaton valitsin ’--%s’\n" -#: getopt.c:807 getopt.c:810 +#: getopt.c:808 getopt.c:811 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: tunnistamaton valitsin ’%c%s’\n" -#: getopt.c:859 getopt.c:862 +#: getopt.c:860 getopt.c:863 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: virheellinen valitsin -- ’%c’\n" -#: getopt.c:915 getopt.c:932 getopt.c:1142 getopt.c:1160 +#: getopt.c:916 getopt.c:933 getopt.c:1143 getopt.c:1161 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: valitsin vaatii argumentin -- ’%c’\n" -#: getopt.c:988 getopt.c:1004 +#: getopt.c:989 getopt.c:1005 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: valitsin ’-W %s’ ei ole yksiselitteinen\n" -#: getopt.c:1028 getopt.c:1046 +#: getopt.c:1029 getopt.c:1047 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: valitsin ’-W %s’ ei salli argumenttia\n" -#: getopt.c:1067 getopt.c:1085 +#: getopt.c:1068 getopt.c:1086 #, c-format msgid "%s: option '-W %s' requires an argument\n" msgstr "%s: valitsin ’-W %s’ vaatii argumentin\n" -#: io.c:347 +#: io.c:392 #, c-format msgid "command line argument `%s' is a directory: skipped" msgstr "komentoriviargumentti â€%s†on hakemisto: ohitettiin" -#: io.c:350 io.c:463 +#: io.c:395 io.c:513 #, c-format msgid "cannot open file `%s' for reading (%s)" msgstr "tiedoston â€%s†avaaminen lukemista varten (%s) epäonnistui" -#: io.c:590 +#: io.c:640 #, c-format msgid "close of fd %d (`%s') failed (%s)" msgstr "tiedostomäärittelijän %d (â€%sâ€) sulkeminen epäonnistui (%s)" -#: io.c:666 +#: io.c:716 msgid "redirection not allowed in sandbox mode" msgstr "edelleenohjaus ei ole sallittua hiekkalaatikkotilassa" -#: io.c:700 +#: io.c:750 #, c-format msgid "expression in `%s' redirection only has numeric value" msgstr "lausekkeella â€%sâ€-uudellenohjauksessa on vain numeerinen arvo" -#: io.c:706 +#: io.c:756 #, c-format msgid "expression for `%s' redirection has null string value" msgstr "lausekkeella â€%sâ€-uudelleenohjauksessa on null-merkkijonoarvo" -#: io.c:711 +#: io.c:761 #, 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:754 +#: io.c:809 #, c-format msgid "unnecessary mixing of `>' and `>>' for file `%.*s'" msgstr "turha merkkien â€>†ja â€>>†sekoittaminen tiedostolle â€%.*sâ€" -#: io.c:808 +#: io.c:863 #, c-format msgid "can't open pipe `%s' for output (%s)" msgstr "putken â€%s†avaaminen tulosteelle (%s) epäonnistui" -#: io.c:818 +#: io.c:873 #, c-format msgid "can't open pipe `%s' for input (%s)" msgstr "putken â€%s†avaaminen syötteelle (%s) epäonnistui" -#: io.c:849 +#: io.c:904 #, 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:932 +#: io.c:986 #, c-format msgid "can't redirect from `%s' (%s)" msgstr "uudelleenohjaus putkesta â€%s†(%s) epäonnistui" -#: io.c:935 +#: io.c:989 #, c-format msgid "can't redirect to `%s' (%s)" msgstr "uudelleenohjaus putkeen â€%s†(%s) epäonnistui" -#: io.c:986 +#: io.c:1040 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:1002 +#: io.c:1056 #, c-format msgid "close of `%s' failed (%s)." msgstr "uudelleenohjauksen â€%s†sulkeminen epäonnistui (%s)." -#: io.c:1010 +#: io.c:1064 msgid "too many pipes or input files open" msgstr "avoinna liian monta putkea tai syötetiedostoa" -#: io.c:1032 +#: io.c:1086 msgid "close: second argument must be `to' or `from'" msgstr "close: toisen argumentin on oltava â€to†tai â€fromâ€" -#: io.c:1049 +#: io.c:1103 #, 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:1054 +#: io.c:1108 msgid "close of redirection that was never opened" msgstr "suljettiin uudelleenohjaus, jota ei avattu koskaan" -#: io.c:1151 +#: io.c:1205 #, 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:1168 +#: io.c:1222 #, c-format msgid "failure status (%d) on pipe close of `%s' (%s)" msgstr "virhetila (%d) putken â€%s†sulkemisessa (%s)" -#: io.c:1171 +#: io.c:1225 #, c-format msgid "failure status (%d) on file close of `%s' (%s)" msgstr "virhetila (%d) tiedoston â€%s†sulkemisessa (%s)" -#: io.c:1191 +#: io.c:1245 #, c-format msgid "no explicit close of socket `%s' provided" msgstr "pistokkeen â€%s†eksplisiittistä sulkemista ei tarjota" -#: io.c:1194 +#: io.c:1248 #, c-format msgid "no explicit close of co-process `%s' provided" msgstr "apuprosessin â€%s†eksplisiittistä sulkemista ei tarjota" -#: io.c:1197 +#: io.c:1251 #, c-format msgid "no explicit close of pipe `%s' provided" msgstr "putken â€%s†eksplisiittistä sulkemista ei tarjota" -#: io.c:1200 +#: io.c:1254 #, c-format msgid "no explicit close of file `%s' provided" msgstr "tiedoston â€%s†eksplisiittistä sulkemista ei tarjota" -#: io.c:1228 io.c:1283 main.c:842 main.c:879 +#: io.c:1284 io.c:1342 main.c:864 main.c:906 #, c-format msgid "error writing standard output (%s)" msgstr "virhe kirjoitettaessa vakiotulosteeseen (%s)" -#: io.c:1232 io.c:1288 +#: io.c:1289 io.c:1348 main.c:866 #, c-format msgid "error writing standard error (%s)" msgstr "virhe kirjoitettaessa vakiovirheeseen (%s)" -#: io.c:1240 +#: io.c:1297 #, c-format msgid "pipe flush of `%s' failed (%s)." msgstr "uudelleenohjauksen â€%s†putken tyhjennys epäonnistui (%s)." -#: io.c:1243 +#: io.c:1300 #, c-format msgid "co-process flush of pipe to `%s' failed (%s)." msgstr "putken apuprosessityhjennys uudelleenohjaukseen â€%s†epäonnistui (%s)." -#: io.c:1246 +#: io.c:1303 #, c-format msgid "file flush of `%s' failed (%s)." msgstr "uudelleenohjauksen â€%s†tiedostontyhjennys epäonnistui (%s)." -#: io.c:1360 +#: io.c:1420 #, c-format msgid "local port %s invalid in `/inet'" msgstr "paikallinen portti %s virheellinen pistokkeessa â€/inetâ€" -#: io.c:1378 +#: io.c:1438 #, c-format msgid "remote host and port information (%s, %s) invalid" msgstr "etäkone- ja porttitiedot (%s, %s) ovat virheellisiä" -#: io.c:1530 +#: 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:1544 +#: io.c:1604 #, c-format msgid "special file name `%s' is incomplete" msgstr "erikoistiedostonimi â€%s†on vaillinainen" -#: io.c:1561 +#: io.c:1621 msgid "must supply a remote hostname to `/inet'" msgstr "on tarjottava etäkoneen nimi pistokkeeseen â€/inetâ€" -#: io.c:1579 +#: io.c:1639 msgid "must supply a remote port to `/inet'" msgstr "on tarjottava etäportti pistokkeeseen â€/inetâ€" -#: io.c:1625 +#: io.c:1685 msgid "TCP/IP communications are not supported" msgstr "TCP/IP-viestintää ei tueta" -#: io.c:1800 +#: io.c:1867 #, c-format msgid "could not open `%s', mode `%s'" msgstr "laitteen â€%s†avaus epäonnistui, tila â€%sâ€" -#: io.c:1850 +#: io.c:1917 #, c-format msgid "close of master pty failed (%s)" msgstr "â€master ptyâ€-sulkeminen epäonnistui (%s)" -#: io.c:1852 io.c:2028 io.c:2198 +#: io.c:1919 io.c:2105 io.c:2305 #, c-format msgid "close of stdout in child failed (%s)" msgstr "vakiotulosteen sulkeminen lapsiprosessissa epäonnistui (%s)" -#: io.c:1855 +#: io.c:1922 #, 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:1857 io.c:2033 +#: io.c:1924 io.c:2110 #, c-format msgid "close of stdin in child failed (%s)" msgstr "vakiosyötteen sulkeminen lapsiprosessissa epäonnistui (%s)" -#: io.c:1860 +#: io.c:1927 #, 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:1862 io.c:1883 +#: io.c:1929 io.c:1951 #, c-format msgid "close of slave pty failed (%s)" msgstr "â€slave ptyâ€:n sulkeminen epäonnistui (%s)" -#: io.c:1969 io.c:2031 io.c:2175 io.c:2201 +#: io.c:2040 io.c:2108 io.c:2276 io.c:2308 #, c-format msgid "moving pipe to stdout in child failed (dup: %s)" msgstr "putken siirtäminen vakiotulosteeseen lapsiprosessissa epäonnistui (dup: %s)" -#: io.c:1976 io.c:2036 +#: io.c:2047 io.c:2113 #, 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:1996 io.c:2191 +#: io.c:2073 io.c:2298 msgid "restoring stdout in parent process failed\n" msgstr "vakiotulosteen palauttaminen äitiprosessissa epäonnistui\n" -#: io.c:2004 +#: io.c:2081 msgid "restoring stdin in parent process failed\n" msgstr "vakiosyötön palauttaminen äitiprosessissa epäonnistui\n" -#: io.c:2039 io.c:2203 io.c:2217 +#: io.c:2116 io.c:2310 io.c:2324 #, c-format msgid "close of pipe failed (%s)" msgstr "putken sulkeminen epäonnistui (%s)" -#: io.c:2093 +#: io.c:2174 msgid "`|&' not supported" msgstr "â€|&†ei tueta" -#: io.c:2160 +#: io.c:2261 #, c-format msgid "cannot open pipe `%s' (%s)" msgstr "putken â€%s†(%s) avaaminen epäonnistui" -#: io.c:2211 +#: io.c:2318 #, c-format msgid "cannot create child process for `%s' (fork: %s)" msgstr "lapsiprosessin luominen komennolle â€%s†(fork: %s) epäonnistui" -#: io.c:2671 +#: io.c:2790 msgid "register_input_parser: received NULL pointer" msgstr "register_input_parser: vastaanotettiin NULL-osoitin" -#: io.c:2699 +#: io.c:2818 #, 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:2706 +#: io.c:2825 #, c-format msgid "input parser `%s' failed to open `%s'" msgstr "syötejäsentäjä â€%s†epäonnistui kohteen â€%s†avaamisessa" -#: io.c:2726 +#: io.c:2845 msgid "register_output_wrapper: received NULL pointer" msgstr "register_output_wrapper: vastaanotti NULL-osoittimen" -#: io.c:2754 +#: io.c:2873 #, c-format msgid "output wrapper `%s' conflicts with previously installed output wrapper `%s'" msgstr "tulostekäärin â€%s†on ristiriidassa aiemmin asennetun tulostekäärimen â€%s†kanssa" -#: io.c:2761 +#: io.c:2880 #, c-format msgid "output wrapper `%s' failed to open `%s'" msgstr "tulostekäärin â€%s†epäonnistui avaamaan â€%sâ€" -#: io.c:2782 +#: io.c:2901 msgid "register_output_processor: received NULL pointer" msgstr "register_output_processor: vastaanotti NULL-osoittimen" -#: io.c:2811 +#: io.c:2930 #, c-format msgid "two-way processor `%s' conflicts with previously installed two-way processor `%s'" msgstr "kaksisuuntainen prosessori â€%s†on ristiriidassa aiemmin asennetun kaksisuuntaisen prosessorin â€%s†kanssa" -#: io.c:2820 +#: io.c:2939 #, c-format msgid "two way processor `%s' failed to open `%s'" msgstr "kaksisuuntainen prosessori â€%s†epäonnistui avaamaan â€%sâ€" -#: io.c:2927 +#: io.c:3064 #, c-format msgid "data file `%s' is empty" msgstr "data-tiedosto â€%s†on tyhjä" -#: io.c:2969 io.c:2977 +#: io.c:3106 io.c:3114 msgid "could not allocate more input memory" msgstr "lisäsyötemuistin varaus epäonnistui" -#: io.c:3543 +#: io.c:3682 msgid "multicharacter value of `RS' is a gawk extension" msgstr "â€RSâ€-monimerkkiarvo on gawk-laajennus" -#: io.c:3632 +#: io.c:3771 msgid "IPv6 communication is not supported" msgstr "IPv6-viestintää ei tueta" -#: main.c:388 +#: main.c:405 msgid "empty argument to `-e/--source' ignored" msgstr "tyhjä argumentti valitsimelle â€-e/--source†ohitetaan" -#: main.c:478 +#: main.c:495 #, c-format msgid "%s: option `-W %s' unrecognized, ignored\n" msgstr "%s: valitsin â€-W %s†on tunnistamaton, ohitetaan\n" -#: main.c:524 +#: main.c:541 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: valitsin vaatii argumentin -- %c\n" -#: main.c:545 +#: main.c:562 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:551 +#: main.c:568 msgid "`--posix' overrides `--traditional'" msgstr "valitsin â€--posix†korvaa valitsimen â€--traditionalâ€" -#: main.c:562 +#: main.c:579 msgid "`--posix'/`--traditional' overrides `--non-decimal-data'" msgstr "valitsin â€--posix†tai â€--traditional†korvaa valitsimen â€--non-decimal-dataâ€" -#: main.c:566 +#: main.c:583 #, 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:571 +#: main.c:588 msgid "`--posix' overrides `--characters-as-bytes'" msgstr "valitsin â€--posix†korvaa valitsimen â€--characters-as-bytesâ€" -#: main.c:630 +#: main.c:647 #, c-format msgid "can't set binary mode on stdin (%s)" msgstr "binaaritilan asettaminen vakiosyötteessä (%s) epäonnistui" -#: main.c:633 +#: main.c:650 #, c-format msgid "can't set binary mode on stdout (%s)" msgstr "binaaritilan asettaminen vakiotulosteessa (%s) epäonnistui" -#: main.c:635 +#: main.c:652 #, c-format msgid "can't set binary mode on stderr (%s)" msgstr "binaaritilaa asettaminen vakiovirheessä (%s) epäonnistui" -#: main.c:693 +#: main.c:710 msgid "no program text at all!" msgstr "ei ohjelmatekstiä ollenkaan!" -#: main.c:779 +#: main.c:799 #, 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:781 +#: main.c:801 #, 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:786 +#: main.c:806 msgid "POSIX options:\t\tGNU long options: (standard)\n" msgstr "POSIX-valitsimet:\t\tGNU-pitkät valitsimet: (vakio)\n" -#: main.c:787 +#: main.c:807 msgid "\t-f progfile\t\t--file=progfile\n" msgstr "\t-f ohjelmatiedosto\t\t--file=ohjelmatiedosto\n" -#: main.c:788 +#: main.c:808 msgid "\t-F fs\t\t\t--field-separator=fs\n" msgstr "\t-F fs\t\t\t--field-separator=fs\n" -#: main.c:789 +#: main.c:809 msgid "\t-v var=val\t\t--assign=var=val\n" msgstr "\t-v var=arvo\t\t--assign=muuttuja=arvo\n" -#: main.c:790 +#: main.c:810 msgid "Short options:\t\tGNU long options: (extensions)\n" msgstr "Lyhyet valitsimet:\t\tGNU-pitkät valitsimet: (laajennukset)\n" -#: main.c:791 +#: main.c:811 msgid "\t-b\t\t\t--characters-as-bytes\n" msgstr "\t-b\t\t\t--characters-as-bytes\n" -#: main.c:792 +#: main.c:812 msgid "\t-c\t\t\t--traditional\n" msgstr "\t-c\t\t\t--traditional\n" -#: main.c:793 +#: main.c:813 msgid "\t-C\t\t\t--copyright\n" msgstr "\t-C\t\t\t--copyright\n" -#: main.c:794 +#: main.c:814 msgid "\t-d[file]\t\t--dump-variables[=file]\n" msgstr "\t-d[tiedosto]\t\t--dump-variables[=tiedosto]\n" -#: main.c:795 +#: main.c:815 msgid "\t-D[file]\t\t--debug[=file]\n" msgstr "\t-D[tiedosto]\t\t--debug[=tiedosto]\n" -#: main.c:796 +#: main.c:816 msgid "\t-e 'program-text'\t--source='program-text'\n" msgstr "\t-e 'program-text'\t--source='program-text'\n" -#: main.c:797 +#: main.c:817 msgid "\t-E file\t\t\t--exec=file\n" msgstr "\t-E file\t\t\t--exec=tiedosto\n" -#: main.c:798 +#: main.c:818 msgid "\t-g\t\t\t--gen-pot\n" msgstr "\t-g\t\t\t--gen-po\n" -#: main.c:799 +#: main.c:819 msgid "\t-h\t\t\t--help\n" msgstr "\t-h\t\t\t--help\n" -#: main.c:800 +#: main.c:820 msgid "\t-i includefile\t\t--include=includefile\n" msgstr "\t-i include-tiedosto\t\t--include=include-tiedosto\n" -#: main.c:801 +#: main.c:821 msgid "\t-l library\t\t--load=library\n" msgstr "\t-l kirjasto\t\t--load=kirjasto\n" -#: main.c:802 +#: main.c:822 msgid "\t-L [fatal]\t\t--lint[=fatal]\n" msgstr "\t-L [fatal]\t\t--lint[=fatal]\n" -#: main.c:803 +#: 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:804 +#: main.c:824 msgid "\t-M\t\t\t--bignum\n" msgstr "\t-M\t\t\t--bignum\n" -#: main.c:805 +#: main.c:825 msgid "\t-N\t\t\t--use-lc-numeric\n" msgstr "\t-N\t\t\t--use-lc-numeric\n" -#: main.c:806 +#: main.c:826 msgid "\t-o[file]\t\t--pretty-print[=file]\n" msgstr "\t-o[tiedosto]\t\t--pretty-print[=tiedosto]\n" -#: main.c:807 +#: main.c:827 msgid "\t-O\t\t\t--optimize\n" msgstr "\t-O\t\t\t--optimize\n" -#: main.c:808 +#: main.c:828 msgid "\t-p[file]\t\t--profile[=file]\n" msgstr "\t-p[tiedosto]\t\t--profile[=tiedosto]\n" -#: main.c:809 +#: main.c:829 msgid "\t-P\t\t\t--posix\n" msgstr "\t-P\t\t\t--posix\n" -#: main.c:810 +#: main.c:830 msgid "\t-r\t\t\t--re-interval\n" msgstr "\t-r\t\t\t--re-interval\n" -#: main.c:811 +#: main.c:831 msgid "\t-S\t\t\t--sandbox\n" msgstr "\t-S\t\t\t--sandbox\n" -#: main.c:812 +#: main.c:832 msgid "\t-t\t\t\t--lint-old\n" msgstr "\t-t\t\t\t--lint-old\n" -#: main.c:813 +#: main.c:833 msgid "\t-V\t\t\t--version\n" msgstr "\t-V\t\t\t--version\n" -#: main.c:815 +#: main.c:835 msgid "\t-W nostalgia\t\t--nostalgia\n" msgstr "\t-W nostalgia\t\t--nostalgia\n" -#: main.c:818 +#: main.c:838 msgid "\t-Y\t\t--parsedebug\n" msgstr "\t-Y\t\t--parsedebug\n" @@ -2984,7 +3005,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:827 +#: main.c:847 msgid "" "\n" "To report bugs, see node `Bugs' in `gawk.info', which is\n" @@ -2996,7 +3017,7 @@ msgstr "" "joka on kappale â€Reporting Problems and Bugs†painetussa versiossa.\n" "\n" -#: main.c:831 +#: main.c:851 msgid "" "gawk is a pattern scanning and processing language.\n" "By default it reads standard input and writes standard output.\n" @@ -3006,7 +3027,7 @@ msgstr "" "Oletuksena se lukee vakiosyötettä ja kirjoittaa vakiotulosteeseen.\n" "\n" -#: main.c:835 +#: main.c:855 msgid "" "Examples:\n" "\tgawk '{ sum += $1 }; END { print sum }' file\n" @@ -3016,7 +3037,7 @@ msgstr "" "\tgawk '{ sum += $1 }; END { print sum }' tiedosto\n" "\tgawk -F: '{ print $1 }' /etc/passwd\n" -#: main.c:855 +#: main.c:880 #, c-format msgid "" "Copyright (C) 1989, 1991-%d Free Software Foundation.\n" @@ -3035,7 +3056,7 @@ msgstr "" "ehtojen mukaisesti.\n" "\n" -#: main.c:863 +#: main.c:888 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" @@ -3049,7 +3070,7 @@ msgstr "" "GNU General Public License-ehdoista.\n" "\n" -#: main.c:869 +#: main.c:894 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" @@ -3057,16 +3078,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:904 +#: main.c:931 msgid "-Ft does not set FS to tab in POSIX awk" msgstr "-Ft ei aseta FS välilehteen POSIX awk:ssa" -#: main.c:1176 +#: main.c:1208 #, c-format msgid "unknown value for field spec: %d\n" msgstr "tuntematon arvo kenttämääritteelle: %d\n" -#: main.c:1274 +#: main.c:1306 #, c-format msgid "" "%s: `%s' argument to `-v' not in `var=value' form\n" @@ -3075,48 +3096,48 @@ msgstr "" "%s: â€%s†argumentti valitsimelle â€-v†ei ole â€var=arvoâ€-muodossa\n" "\n" -#: main.c:1300 +#: main.c:1332 #, c-format msgid "`%s' is not a legal variable name" msgstr "â€%s†ei ole laillinen muuttujanimi" -#: main.c:1303 +#: main.c:1335 #, 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:1307 +#: main.c:1339 #, 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:1312 +#: main.c:1344 #, c-format msgid "cannot use function `%s' as variable name" msgstr "funktionimen â€%s†käyttö muuttujanimenä epäonnistui" -#: main.c:1365 +#: main.c:1397 msgid "floating point exception" msgstr "liukulukupoikkeus" -#: main.c:1372 +#: main.c:1404 msgid "fatal error: internal error" msgstr "tuhoisa virhe: sisäinen virhe" -#: main.c:1387 +#: main.c:1419 msgid "fatal error: internal error: segfault" msgstr "tuhoisa virhe: sisäinen virhe: segmenttivirhe" -#: main.c:1399 +#: main.c:1431 msgid "fatal error: internal error: stack overflow" msgstr "tuhoisa virhe: sisäinen virhe: pinoylivuoto" -#: main.c:1458 +#: main.c:1490 #, c-format msgid "no pre-opened fd %d" msgstr "ei avattu uudelleen tiedostomäärittelijää %d" -#: main.c:1465 +#: main.c:1497 #, c-format msgid "could not pre-open /dev/null for fd %d" msgstr "laitteen /dev/null avaaminen uudelleen tiedostomäärittelijälle %d epäonnistui" @@ -3171,7 +3192,7 @@ msgstr "%s: argumentin #%d jaosarvo %Rg typistetään" msgid "%s: argument #%d negative value %Zd will give strange results" msgstr "%s: argumentin #%d negatiivinen arvo %Zd antaa outoja tuloksia" -#: msg.c:61 +#: msg.c:68 #, c-format msgid "cmd. line:" msgstr "komentorivi:" @@ -3217,16 +3238,16 @@ msgstr "%s %s â€%sâ€: fd-lippujen hakeminen epäonnistui: (fcntl F_GETFD: %s)" msgid "%s %s `%s': could not set close-on-exec: (fcntl F_SETFD: %s)" msgstr "%s %s â€%sâ€: close-on-exec -asettaminen epäonnistui: (fcntl F_SETFD: %s)" -#: profile.c:70 +#: profile.c:71 #, c-format msgid "could not open `%s' for writing: %s" msgstr "tiedoston â€%s†avaaminen kirjoittamista varten epäonnistui: %s" -#: profile.c:72 +#: profile.c:73 msgid "sending profile to standard error" msgstr "lähetetään profiili vakiovirheeseen" -#: profile.c:188 +#: profile.c:193 #, c-format msgid "" "\t# %s block(s)\n" @@ -3235,7 +3256,7 @@ msgstr "" "\t# %s-lohko(t)\n" "\n" -#: profile.c:193 +#: profile.c:198 #, c-format msgid "" "\t# Rule(s)\n" @@ -3244,16 +3265,16 @@ msgstr "" "\t# Säännöt\n" "\n" -#: profile.c:267 +#: profile.c:272 #, c-format msgid "internal error: %s with null vname" msgstr "sisäinen virhe: %s null vname-arvolla" -#: profile.c:530 +#: profile.c:537 msgid "internal error: builtin with null fname" msgstr "sisäinen virhe: builtin null-funktionimellä" -#: profile.c:942 +#: profile.c:949 #, c-format msgid "" "\t# Loaded extensions (-l and/or @load)\n" @@ -3262,12 +3283,12 @@ msgstr "" "\t# Ladatut laajennukset (-l ja/tai @load)\n" "\n" -#: profile.c:965 +#: profile.c:972 #, c-format msgid "\t# gawk profile, created %s\n" msgstr "\t# gawk-profiili, luotu %s\n" -#: profile.c:1351 +#: profile.c:1475 #, c-format msgid "" "\n" @@ -3276,17 +3297,12 @@ msgstr "" "\n" "\t# Funktiot, luetteloitu aakkosjärjestyksessä\n" -#: profile.c:1389 +#: profile.c:1513 #, c-format msgid "redir2str: unknown redirection type %d" msgstr "redir2str: tuntematon edelleenohjaustyyppi %d" -#: re.c:583 -#, c-format -msgid "range of the form `[%c-%c]' is locale dependent" -msgstr "muodon â€[%c-%c]†lukualue on paikallisasetuksesta riippuvainen" - -#: re.c:610 +#: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" msgstr "säännöllisen lausekkeen komponentin â€%.*s†pitäisi luultavasti olla â€[%.*s]â€" @@ -3355,10 +3371,13 @@ msgstr "Pariton ) tai \\)" msgid "No previous regular expression" msgstr "Ei edellistä säännöllistä lauseketta" -#: symbol.c:740 +#: symbol.c:741 msgid "can not pop main context" msgstr "pääsisällön pop-toiminto epäonnistui" +#~ 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" diff --git a/po/fr.gmo b/po/fr.gmo index 2ed0420a..b703ee0a 100644 Binary files a/po/fr.gmo and b/po/fr.gmo differ diff --git a/po/fr.po b/po/fr.po index 5c1ef226..d05521a2 100644 --- a/po/fr.po +++ b/po/fr.po @@ -7,12 +7,11 @@ # msgid "" msgstr "" -"Project-Id-Version: gawk 4.0.75\n" +"Project-Id-Version: gawk 4.1.0b\n" "Report-Msgid-Bugs-To: arnold@skeeve.com\n" -"POT-Creation-Date: 2013-05-09 16:05+0300\n" -"PO-Revision-Date: 2013-04-23 23:41+0200\n" -"Last-Translator: Jean-Philippe Guérard \n" +"POT-Creation-Date: 2014-01-14 22:23+0200\n" +"PO-Revision-Date: 2014-01-16 00:31+0100\n" +"Last-Translator: Jean-Philippe Guérard \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" @@ -20,84 +19,84 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: array.c:254 +#: array.c:256 #, c-format msgid "from %s" msgstr "de %s" -#: array.c:354 +#: array.c:357 msgid "attempt to use a scalar value as array" msgstr "tentative d'utiliser un scalaire comme tableau" -#: array.c:356 +#: array.c:359 #, c-format msgid "attempt to use scalar parameter `%s' as an array" msgstr "tentative d'utiliser le paramètre scalaire « %s » comme tableau" -#: array.c:359 +#: array.c:362 #, c-format msgid "attempt to use scalar `%s' as an array" msgstr "tentative d'utiliser le scalaire « %s » comme tableau" -#: array.c:406 array.c:573 builtin.c:85 builtin.c:1591 builtin.c:1637 -#: builtin.c:1650 builtin.c:2078 builtin.c:2092 eval.c:1121 eval.c:1125 -#: eval.c:1524 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" msgstr "tentative d'utilisation du tableau « %s » dans un contexte scalaire" -#: array.c:580 +#: array.c:583 #, c-format msgid "delete: index `%s' not in array `%s'" msgstr "delete : l'indice « %s » est absent du tableau « %s »" -#: array.c:594 +#: array.c:597 #, c-format msgid "attempt to use scalar `%s[\"%.*s\"]' as an array" msgstr "tentative d'utiliser le scalaire « %s[\"%.*s\"] » comme tableau" -#: array.c:773 +#: array.c:776 msgid "adump: first argument not an array" msgstr "adump : le 1er argument n'est pas un tableau" -#: array.c:812 +#: array.c:815 msgid "asort: second argument not an array" msgstr "asort : le 2e argument n'est pas un tableau" -#: array.c:813 +#: array.c:816 msgid "asorti: second argument not an array" msgstr "asorti : le 2e argument n'est pas un tableau" -#: array.c:820 +#: array.c:823 msgid "asort: first argument not an array" msgstr "asort : le 1er argument n'est pas un tableau" -#: array.c:821 +#: array.c:824 msgid "asorti: first argument not an array" msgstr "asorti : le 1er argument n'est pas un tableau" -#: array.c:828 +#: array.c:831 msgid "asort: cannot use a subarray of first arg for second arg" msgstr "asort : le 2e argument ne doit pas être un sous-tableau du 1er" -#: array.c:829 +#: array.c:832 msgid "asorti: cannot use a subarray of first arg for second arg" msgstr "asorti : le 2e argument ne doit pas être un sous-tableau du 1er" -#: array.c:834 +#: array.c:837 msgid "asort: cannot use a subarray of second arg for first arg" msgstr "asort : le 1er argument ne doit pas être un sous-tableau du 2e" -#: array.c:835 +#: array.c:838 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:1309 +#: array.c:1314 #, c-format msgid "`%s' is invalid as a function name" msgstr "« %s » n'est pas un nom de fonction valide" -#: array.c:1313 +#: array.c:1318 #, c-format msgid "sort comparison function `%s' is not defined" msgstr "la fonction de comparaison « %s » du tri n'est pas définie" @@ -162,9 +161,7 @@ msgstr "« return » est utilisé hors du contexte d'une fonction" #: awkgram.y:922 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 " -"\"\" »" +msgstr "dans BEGIN ou END, un « print » seul devrait sans doute être un « print \"\" »" #: awkgram.y:988 awkgram.y:1037 msgid "`delete' is not allowed with SYMTAB" @@ -227,19 +224,17 @@ msgstr "les appels indirects de fonctions sont une extension gawk" #: awkgram.y:1620 #, 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" +msgstr "impossible d'utiliser la variable spéciale « %s » pour un appel indirect de fonction" #: awkgram.y:1698 msgid "invalid subscript expression" msgstr "expression indice incorrecte" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:119 +#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "avertissement : " -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:151 +#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "fatal : " @@ -247,8 +242,8 @@ msgstr "fatal : " msgid "unexpected newline or end of string" msgstr "fin de chaîne ou passage à la ligne inattendu" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:517 debug.c:533 -#: debug.c:2792 debug.c:5040 +#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 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)" @@ -258,7 +253,7 @@ msgstr "impossible d'ouvrir le fichier source « %s » en lecture (%s)" 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:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:130 debug.c:5191 +#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "raison inconnue" @@ -313,22 +308,17 @@ msgstr "le fichier source ne se termine pas par un passage à la ligne" #: awkgram.y:3018 msgid "unterminated regexp ends with `\\' at end of file" -msgstr "" -"expression rationnelle non refermée terminée par un « \\ » en fin de fichier" +msgstr "expression rationnelle non refermée terminée par un « \\ » en fin de fichier" #: awkgram.y:3042 #, 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" +msgstr "%s : %d : le modificateur d'expressions rationnelles « /.../%c » de tawk ne marche pas dans gawk" #: awkgram.y:3046 #, 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" +msgstr "le modificateur d'expressions rationnelles « /.../%c » de tawk ne marche pas dans gawk" #: awkgram.y:3053 msgid "unterminated regexp" @@ -340,8 +330,7 @@ msgstr "expression rationnelle non refermée en fin de fichier" #: awkgram.y:3116 msgid "use of `\\ #...' line continuation is not portable" -msgstr "" -"l'utilisation de « \\ #... » pour prolonger une ligne n'est pas portable" +msgstr "l'utilisation de « \\ #... » pour prolonger une ligne n'est pas portable" #: awkgram.y:3132 msgid "backslash not last character on line" @@ -407,9 +396,7 @@ msgstr "%d n'est pas un nombre d'arguments valide de %s" #: awkgram.y:3798 #, 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" +msgstr "%s : une chaîne littérale en dernier argument d'une substitution est sans effet" #: awkgram.y:3803 #, c-format @@ -426,25 +413,22 @@ msgstr "close : le 2e argument est une extension gawk" #: awkgram.y:3958 msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore" -msgstr "" -"utilisation incorrecte de dcgettext(_\"...\") : enlevez le souligné de tête" +msgstr "utilisation incorrecte de dcgettext(_\"...\") : enlevez le souligné de tête" #: awkgram.y:3973 msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" -msgstr "" -"utilisation incorrecte de dcngettext(_\"...\") : enlevez le souligné de tête" +msgstr "utilisation incorrecte de dcngettext(_\"...\") : enlevez le souligné de tête" #: awkgram.y:3992 -#, fuzzy msgid "index: regexp constant as second argument is not allowed" -msgstr "index : le second argument n'est pas une chaîne" +msgstr "index : le second argument ne peut être une expression rationnelle constante" #: awkgram.y:4045 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "fonction « %s » : le paramètre « %s » masque la variable globale" -#: awkgram.y:4102 debug.c:4021 debug.c:4064 debug.c:5189 +#: awkgram.y:4102 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)" @@ -474,38 +458,34 @@ msgstr "nom de fonction « %s » déjà défini" #: awkgram.y:4261 #, 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" +msgstr "fonction « %s » : impossible d'utiliser un nom de fonction comme paramètre" #: awkgram.y:4264 #, 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" +msgstr "fonction « %s » : impossible d'utiliser la variable spéciale « %s » comme paramètre d'une fonction" #: awkgram.y:4272 #, 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" +msgstr "fonction « %s » : paramètre #%d, « %s » est un doublon du paramètre #%d" -#: awkgram.y:4366 awkgram.y:4372 +#: awkgram.y:4359 awkgram.y:4365 #, c-format msgid "function `%s' called but never defined" msgstr "fonction « %s » appelée sans être définie" -#: awkgram.y:4376 +#: awkgram.y:4369 #, c-format msgid "function `%s' defined but never called directly" msgstr "fonction « %s » définie mais jamais appelée directement" -#: awkgram.y:4408 +#: awkgram.y:4401 #, 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:4467 +#: awkgram.y:4460 #, c-format msgid "" "function `%s' called with space between name and `(',\n" @@ -514,432 +494,423 @@ msgstr "" "fonction « %s » appelée avec un espace entre son nom\n" "et « ( », ou utilisée comme variable ou tableau" -#: awkgram.y:4703 +#: awkgram.y:4696 msgid "division by zero attempted" msgstr "tentative de division par zéro" -#: awkgram.y:4712 +#: awkgram.y:4705 #, c-format msgid "division by zero attempted in `%%'" msgstr "tentative de division par zéro dans « %% »" -#: builtin.c:128 +# gawk 'BEGIN { $1++ = 1 }' +#: awkgram.y:5025 +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:5028 +#, c-format +msgid "invalid target of assignment (opcode %s)" +msgstr "cible de l'assignement incorrecte (opcode %s)" + +#: builtin.c:133 #, c-format msgid "%s to \"%s\" failed (%s)" msgstr "échec de %s vers « %s » (%s)" -#: builtin.c:129 +#: builtin.c:134 msgid "standard output" msgstr "sortie standard" -#: builtin.c:143 +#: builtin.c:148 msgid "exp: received non-numeric argument" msgstr "exp : l'argument n'est pas numérique" -#: builtin.c:149 +#: builtin.c:154 #, c-format msgid "exp: argument %g is out of range" msgstr "exp : l'argument %g est hors limite" -#: builtin.c:224 +#: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" -msgstr "" -"fflush : vidage impossible : le tube « %s » est ouvert en lecture et non en " -"écriture" +msgstr "fflush : vidage impossible : le tube « %s » est ouvert en lecture et non en écriture" -#: builtin.c:227 +#: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" -msgstr "" -"fflush : vidage impossible : fichier « %s » ouvert en lecture, pas en " -"écriture" +msgstr "fflush : vidage impossible : fichier « %s » ouvert en lecture, pas en écriture" -#: builtin.c:239 +#: builtin.c:244 #, c-format 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" +msgstr "fflush : « %s » n'est ni un fichier ouvert, ni un tube, ni un co-processus" -#: builtin.c:357 +#: builtin.c:362 msgid "index: received non-string first argument" msgstr "index : le premier argument n'est pas une chaîne" -#: builtin.c:359 +#: builtin.c:364 msgid "index: received non-string second argument" msgstr "index : le second argument n'est pas une chaîne" -#: builtin.c:483 mpfr.c:757 +#: builtin.c:488 mpfr.c:757 msgid "int: received non-numeric argument" msgstr "int : l'argument n'est pas numérique" -#: builtin.c:520 +#: builtin.c:525 msgid "length: received array argument" msgstr "length : l'argument reçu est un tableau" -#: builtin.c:523 +#: builtin.c:528 msgid "`length(array)' is a gawk extension" msgstr "« length(tableau) » est une extension gawk" -#: builtin.c:539 +#: builtin.c:544 msgid "length: received non-string argument" msgstr "length : l'argument n'est pas une chaîne" -#: builtin.c:570 +#: builtin.c:575 msgid "log: received non-numeric argument" msgstr "log : l'argument n'est pas numérique" -#: builtin.c:573 +#: builtin.c:578 #, c-format msgid "log: received negative argument %g" msgstr "log : l'argument est négatif %g" -#: builtin.c:771 builtin.c:776 +#: builtin.c:776 builtin.c:781 msgid "fatal: must use `count$' on all formats or none" -msgstr "" -"fatal : « numéro$ » doit être utilisé pour toutes les formats ou pour aucun" +msgstr "fatal : « numéro$ » doit être utilisé pour toutes les formats ou pour aucun" -#: builtin.c:846 +#: builtin.c:851 #, c-format msgid "field width is ignored for `%%' specifier" msgstr "taille du champ de la spécification « %% » ignorée" -#: builtin.c:848 +#: builtin.c:853 #, c-format msgid "precision is ignored for `%%' specifier" msgstr "précision de la spécification « %% » ignorée" -#: builtin.c:850 +#: builtin.c:855 #, 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:901 +#: builtin.c:906 msgid "fatal: `$' is not permitted in awk formats" msgstr "fatal : « $ » n'est pas autorisé dans les formats awk" -#: builtin.c:910 +#: builtin.c:915 msgid "fatal: arg count with `$' must be > 0" msgstr "fatal : le numéro d'argument de « $ » doit être > 0" -#: builtin.c:914 +#: builtin.c:919 #, 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" +msgstr "fatal : le numéro d'argument %ld est > au nombre total d'arguments fournis" -#: builtin.c:918 +#: builtin.c:923 msgid "fatal: `$' not permitted after period in format" msgstr "fatal : dans un format, « $ » ne doit pas suivre un point" -#: builtin.c:934 +#: builtin.c:939 msgid "fatal: no `$' supplied for positional field width or precision" -msgstr "" -"fatal : aucun « $ » fourni pour la taille ou la précision du champ positionné" +msgstr "fatal : aucun « $ » fourni pour la taille ou la précision du champ positionné" -#: builtin.c:1006 +#: builtin.c:1011 msgid "`l' is meaningless in awk formats; ignored" msgstr "« l » n'a aucun sens dans un format awk ; ignoré" -#: builtin.c:1010 +#: builtin.c:1015 msgid "fatal: `l' is not permitted in POSIX awk formats" msgstr "fatal : « l » est interdit dans un format awk POSIX" -#: builtin.c:1023 +#: builtin.c:1028 msgid "`L' is meaningless in awk formats; ignored" msgstr "« L » n'a aucun sens dans un format awk ; ignoré" -#: builtin.c:1027 +#: builtin.c:1032 msgid "fatal: `L' is not permitted in POSIX awk formats" msgstr "fatal : « L » est interdit dans un format awk POSIX" -#: builtin.c:1040 +#: builtin.c:1045 msgid "`h' is meaningless in awk formats; ignored" msgstr "« h » n'a aucun sens dans un format awk ; ignoré" -#: builtin.c:1044 +#: builtin.c:1049 msgid "fatal: `h' is not permitted in POSIX awk formats" msgstr "fatal : « h » est interdit dans un format awk POSIX" -#: builtin.c:1439 +#: builtin.c:1447 #, 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:1537 +#: builtin.c:1545 #, 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:1542 +#: builtin.c:1550 msgid "fatal: not enough arguments to satisfy format string" msgstr "fatal : pas assez d'arguments pour satisfaire la chaîne de formatage" -#: builtin.c:1544 +#: builtin.c:1552 msgid "^ ran out for this one" msgstr "^ à court pour celui-ci" -#: builtin.c:1551 +#: builtin.c:1559 msgid "[s]printf: format specifier does not have control letter" msgstr "[s]printf : spécification de format sans lettre de contrôle" -#: builtin.c:1554 +#: builtin.c:1562 msgid "too many arguments supplied for format string" msgstr "trop d'arguments pour la chaîne de formatage" -#: builtin.c:1610 +#: builtin.c:1618 msgid "sprintf: no arguments" msgstr "sprintf : aucun argument" -#: builtin.c:1633 builtin.c:1644 +#: builtin.c:1641 builtin.c:1652 msgid "printf: no arguments" msgstr "printf : aucun argument" -#: builtin.c:1687 +#: builtin.c:1695 msgid "sqrt: received non-numeric argument" msgstr "sqrt : l'argument n'est pas numérique" -#: builtin.c:1691 +#: builtin.c:1699 #, c-format msgid "sqrt: called with negative argument %g" msgstr "sqrt : appelé avec un argument négatif %g" -#: builtin.c:1722 +#: builtin.c:1730 #, c-format msgid "substr: length %g is not >= 1" msgstr "substr : la longueur %g n'est pas >= 1" -#: builtin.c:1724 +#: builtin.c:1732 #, c-format msgid "substr: length %g is not >= 0" msgstr "substr : la longueur %g n'est pas >= 0" -#: builtin.c:1731 +#: builtin.c:1739 #, 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:1736 +#: builtin.c:1744 #, 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:1748 +#: builtin.c:1756 #, 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:1753 +#: builtin.c:1761 #, 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:1778 +#: builtin.c:1786 msgid "substr: source string is zero length" msgstr "substr : la chaîne source est de longueur nulle" -#: builtin.c:1794 +#: builtin.c:1802 #, 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:1802 +#: builtin.c:1810 #, c-format -msgid "" -"substr: length %g at start index %g exceeds length of first argument (%lu)" -msgstr "" -"substr : la longueur %g à partir de %g dépasse la fin du 1er argument (%lu)" +msgid "substr: length %g at start index %g exceeds length of first argument (%lu)" +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:1876 +#: builtin.c:1884 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" -msgstr "" -"strftime : la valeur de formatage PROCINFO[\"strftime\"] est de type " -"numérique" +msgstr "strftime : la valeur de formatage PROCINFO[\"strftime\"] est de type numérique" -#: builtin.c:1899 +#: builtin.c:1907 msgid "strftime: received non-numeric second argument" msgstr "strftime : le second argument n'est pas numérique" -#: builtin.c:1903 +#: builtin.c:1911 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:1910 +#: builtin.c:1918 msgid "strftime: received non-string first argument" msgstr "strftim : le premier argument n'est pas une chaîne" -#: builtin.c:1917 +#: builtin.c:1925 msgid "strftime: received empty format string" msgstr "strftime : la chaîne de formatage est vide" -#: builtin.c:1983 +#: builtin.c:1991 msgid "mktime: received non-string argument" msgstr "mktime : l'argument n'est pas une chaîne" -#: builtin.c:2000 +#: builtin.c:2008 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" +msgstr "mktime : au moins l'une des valeurs est en dehors de la plage par défaut" -#: builtin.c:2035 +#: builtin.c:2043 msgid "'system' function not allowed in sandbox mode" msgstr "La fonction « system » est interdite en isolement (mode sandbox)" -#: builtin.c:2040 +#: builtin.c:2048 msgid "system: received non-string argument" msgstr "system : l'argument n'est pas une chaîne" -#: builtin.c:2160 +#: builtin.c:2168 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "référence à un champ non initialisé « $%d »" -#: builtin.c:2247 +#: builtin.c:2255 msgid "tolower: received non-string argument" msgstr "tolower : l'argument n'est pas une chaîne" -#: builtin.c:2281 +#: builtin.c:2289 msgid "toupper: received non-string argument" msgstr "toupper : l'argument n'est pas une chaîne" -#: builtin.c:2317 mpfr.c:672 +#: builtin.c:2325 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2 : le premier argument n'est pas numérique" -#: builtin.c:2319 mpfr.c:674 +#: builtin.c:2327 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2 : le second argument n'est pas numérique" -#: builtin.c:2338 +#: builtin.c:2346 msgid "sin: received non-numeric argument" msgstr "sin : l'argument n'est pas numérique" -#: builtin.c:2354 +#: builtin.c:2362 msgid "cos: received non-numeric argument" msgstr "cos : l'argument n'est pas numérique" -#: builtin.c:2407 mpfr.c:1156 +#: builtin.c:2415 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand : l'argument n'est pas numérique" -#: builtin.c:2438 +#: builtin.c:2446 msgid "match: third argument is not an array" msgstr "match : le 3e argument n'est pas un tableau" -#: builtin.c:2710 +#: builtin.c:2718 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub : le 3e argument vaut 0, il sera traité comme un 1" -#: builtin.c:3003 +#: builtin.c:3014 msgid "lshift: received non-numeric first argument" msgstr "lshift : le premier argument n'est pas numérique" -#: builtin.c:3005 +#: builtin.c:3016 msgid "lshift: received non-numeric second argument" msgstr "lshift : le second argument reçu n'est pas numérique" -#: builtin.c:3011 +#: builtin.c:3022 #, 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" +msgstr "lshift(%f, %f) : les valeurs négatives donnent des résultats inattendus" -#: builtin.c:3013 +#: builtin.c:3024 #, 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:3015 +#: builtin.c:3026 #, 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:3040 +#: builtin.c:3051 msgid "rshift: received non-numeric first argument" msgstr "rshift : le premier argument n'est pas numérique" -#: builtin.c:3042 +#: builtin.c:3053 msgid "rshift: received non-numeric second argument" msgstr "rshift : le second argument reçu n'est pas numérique" -#: builtin.c:3048 +#: builtin.c:3059 #, 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" +msgstr "rshift(%f, %f) : les valeurs négatives donneront des résultats inattendus" -#: builtin.c:3050 +#: builtin.c:3061 #, 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:3052 +#: builtin.c:3063 #, 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" +msgstr "rshift(%f, %f) : un décalage trop grand donnera des résultats inattendus" -#: builtin.c:3077 mpfr.c:968 +#: builtin.c:3088 mpfr.c:968 msgid "and: called with less than two arguments" msgstr "and : appelé avec moins de 2 arguments" -#: builtin.c:3082 +#: builtin.c:3093 #, c-format msgid "and: argument %d is non-numeric" msgstr "and : l'argument %d n'est pas numérique" -#: builtin.c:3086 +#: builtin.c:3097 #, 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" +msgstr "and : l'argument %d est négatif (%g) ce qui aura des résultats inattendus" -#: builtin.c:3109 mpfr.c:1000 +#: builtin.c:3120 mpfr.c:1000 msgid "or: called with less than two arguments" msgstr "or : appelé avec moins de 2 arguments" -#: builtin.c:3114 +#: builtin.c:3125 #, c-format msgid "or: argument %d is non-numeric" msgstr "or : l'argument %d n'est pas numérique" -#: builtin.c:3118 +#: builtin.c:3129 #, 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" +msgstr "or : l'argument %d est négatif (%g) ce qui aura des résultats inattendus" -#: builtin.c:3140 mpfr.c:1031 +#: builtin.c:3151 mpfr.c:1031 msgid "xor: called with less than two arguments" msgstr "xor : appelé avec moins de 2 arguments" -#: builtin.c:3146 +#: builtin.c:3157 #, c-format msgid "xor: argument %d is non-numeric" msgstr "xor : l'argument %d n'est pas numérique" -#: builtin.c:3150 +#: builtin.c:3161 #, 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" +msgstr "xor : l'argument %d est négatif (%g) ce qui aura des résultats inattendus" -#: builtin.c:3175 mpfr.c:787 +#: builtin.c:3186 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl : l'argument n'est pas numérique" -#: builtin.c:3181 +#: builtin.c:3192 #, 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:3183 +#: builtin.c:3194 #, c-format msgid "compl(%f): fractional value will be truncated" msgstr "compl(%f) : les valeurs non entières seront tronquées" -#: builtin.c:3352 +#: builtin.c:3363 #, 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" @@ -971,8 +942,7 @@ msgstr "sauve « %s » : commande interdite." #: command.y:339 msgid "Can't use command `commands' for breakpoint/watchpoint commands" -msgstr "" -"Impossible d'utiliser « commands » pour des points d'arrêt ou de surveillance" +msgstr "Impossible d'utiliser « commands » pour des points d'arrêt ou de surveillance" #: command.y:341 msgid "no breakpoint/watchpoint has been set yet" @@ -985,8 +955,7 @@ msgstr "numéro de point d'arrêt ou de surveillance incorrect" #: command.y:348 #, c-format msgid "Type commands for when %s %d is hit, one per line.\n" -msgstr "" -"Entrez les commandes exécutées lors de l'appui de %s %d, une par ligne.\n" +msgstr "Entrez les commandes exécutées lors de l'appui de %s %d, une par ligne.\n" #: command.y:350 #, c-format @@ -1047,36 +1016,24 @@ msgid "non-zero integer value" msgstr "valeur entière non nulle" #: command.y:817 -msgid "" -"backtrace [N] - 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)." +msgid "backtrace [N] - 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:819 -msgid "" -"break [[filename:]N|function] - set breakpoint at the specified location." -msgstr "" -"break [[fichier:]N|fonction] - définit un point d'arrêt à l'endroit indiqué." +msgid "break [[filename:]N|function] - set breakpoint at the specified location." +msgstr "break [[fichier:]N|fonction] - définit un point d'arrêt à l'endroit indiqué." #: command.y:821 msgid "clear [[filename:]N|function] - delete breakpoints previously set." msgstr "clear [[fichier:]N|fonction] - détruit un point d'arrêt existant." #: command.y:823 -msgid "" -"commands [num] - starts a list of commands to be executed at a breakpoint" -"(watchpoint) hit." -msgstr "" -"commands [no] - débute une liste de commande à lancer aux points d'arrêt ou " -"de surveillance." +msgid "commands [num] - starts a list of commands to be executed at a breakpoint(watchpoint) hit." +msgstr "commands [no] - débute une liste de commande à lancer aux points d'arrêt ou de surveillance." #: command.y:825 msgid "condition num [expr] - set or clear breakpoint or watchpoint condition." -msgstr "" -"condition no [expr] - défini ou détruit une condition d'arrêt ou de " -"surveillance." +msgstr "condition no [expr] - défini ou détruit une condition d'arrêt ou de surveillance." #: command.y:827 msgid "continue [COUNT] - continue program being debugged." @@ -1088,8 +1045,7 @@ msgstr "delete [points d'arrêt] [plage] - détruit les points d'arrêt indiqué #: command.y:831 msgid "disable [breakpoints] [range] - disable specified breakpoints." -msgstr "" -"disable [points d'arrêt] [plage] - désactive les points d'arrêt indiqués." +msgstr "disable [points d'arrêt] [plage] - désactive les points d'arrêt indiqués." #: command.y:833 msgid "display [var] - print value of variable each time the program stops." @@ -1101,13 +1057,11 @@ msgstr "down [N] - descend de N trames dans la pile." #: command.y:837 msgid "dump [filename] - dump instructions to file or stdout." -msgstr "" -"dump [fichier] - vide les instructions vers la sortie standard ou un fichier." +msgstr "dump [fichier] - vide les instructions vers la sortie standard ou un fichier." #: command.y:839 msgid "enable [once|del] [breakpoints] [range] - enable specified breakpoints." -msgstr "" -"enable [once|del] [points d'arrêt] [plage] - active les points d'arrêt." +msgstr "enable [once|del] [points d'arrêt] [plage] - active les points d'arrêt." #: command.y:841 msgid "end - end a list of commands or awk statements." @@ -1127,35 +1081,27 @@ msgstr "frame [N] - sélectionne et affiche la trame N de la pile." #: command.y:849 msgid "help [command] - print list of commands or explanation of command." -msgstr "" -"help [commande] - affiche la liste des commandes ou explique la commande." +msgstr "help [commande] - affiche la liste des commandes ou explique la commande." #: command.y:851 msgid "ignore N COUNT - set ignore-count of breakpoint number N to COUNT." msgstr "ignore N NB - ignore les NB prochaines occurrences du point d'arrêt N." #: command.y:853 -msgid "" -"info topic - source|sources|variables|functions|break|frame|args|locals|" -"display|watch." -msgstr "" -"info sujet - 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 sujet - 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 [-|+|[fichier:]no_ligne|fonction|plage] - affiche les lignes indiquées." +msgstr "list [-|+|[fichier:]no_ligne|fonction|plage] - affiche les lignes indiquées." #: command.y:857 msgid "next [COUNT] - step program, proceeding through subroutine calls." msgstr "next [NB] - avance ligne par ligne, sans détailler les sous-routines." #: command.y:859 -msgid "" -"nexti [COUNT] - step one instruction, but proceed through subroutine calls." -msgstr "" -"nexti [NB] - avance d'une instruction, sans détailler les sous-routines." +msgid "nexti [COUNT] - step one instruction, but proceed through subroutine calls." +msgstr "nexti [NB] - avance d'une instruction, sans détailler les sous-routines." #: command.y:861 msgid "option [name[=value]] - set or display debugger option(s)." @@ -1183,19 +1129,15 @@ msgstr "run - démarre et redémarre l'exécution du programme." #: command.y:874 msgid "save filename - save commands from the session to file." -msgstr "" -"save fichier - enregistre les commandes de la sessions dans un fichier." +msgstr "save fichier - enregistre les commandes de la sessions dans un fichier." #: command.y:877 msgid "set var = value - assign value to a scalar variable." msgstr "set var = valeur - assigne une valeur à une variable scalaire." #: command.y:879 -msgid "" -"silent - suspends usual message when stopped at a breakpoint/watchpoint." -msgstr "" -"silent - suspend les messages habituels lors des points d'arrêt et de " -"surveillance." +msgid "silent - suspends usual message when stopped at a breakpoint/watchpoint." +msgstr "silent - suspend les messages habituels lors des points d'arrêt et de surveillance." #: command.y:881 msgid "source file - execute commands from file." @@ -1219,17 +1161,11 @@ msgstr "trace on|off - affiche les instructions avant de les exécuter." #: command.y:891 msgid "undisplay [N] - remove variable(s) from automatic display list." -msgstr "" -"undisplay [N] - retire la ou les variables de la liste d'affichage " -"automatique." +msgstr "undisplay [N] - retire la ou les variables de la liste d'affichage automatique." #: command.y:893 -msgid "" -"until [[filename:]N|function] - execute until program reaches a different " -"line or line N within current frame." -msgstr "" -"until [[fichier:]N|fonction] - exécution jusqu'à dépasser la ligne courant " -"ou la ligne N, dans la trame actuelle." +msgid "until [[filename:]N|function] - execute until program reaches a different line or line N within current frame." +msgstr "until [[fichier:]N|fonction] - exécution jusqu'à dépasser la ligne courant ou la ligne N, dans la trame actuelle." #: command.y:895 msgid "unwatch [N] - remove variable(s) from watch list." @@ -1243,7 +1179,7 @@ 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:395 msg.c:128 +#: command.y:1011 debug.c:401 msg.c:135 #, c-format msgid "error: " msgstr "erreur : " @@ -1281,96 +1217,94 @@ msgstr "Caractère incorrect" msgid "undefined command: %s\n" msgstr "commande inconnue : %s\n" -#: debug.c:246 +#: debug.c:252 msgid "set or show the number of lines to keep in history file." msgstr "affiche ou définit le nombre de lignes du fichier d'historique." -#: debug.c:248 +#: debug.c:254 msgid "set or show the list command window size." msgstr "affiche ou définit la taille de fenêtre pour la commande list." -#: debug.c:250 +#: debug.c:256 msgid "set or show gawk output file." msgstr "affiche ou définit le fichier de sortie de gawk." -#: debug.c:252 +#: debug.c:258 msgid "set or show debugger prompt." msgstr "affiche ou définit l'invite du débogueur." -#: debug.c:254 +#: debug.c:260 msgid "(un)set or show saving of command history (value=on|off)." -msgstr "" -"affiche ou (dés)active l'enregistrement de l'historique (valeur=on|off)." +msgstr "affiche ou (dés)active l'enregistrement de l'historique (valeur=on|off)." -#: debug.c:256 +#: debug.c:262 msgid "(un)set or show saving of options (value=on|off)." msgstr "affiche ou (dés)active l'enregistrement des options (valeur=on|off)." -#: debug.c:258 +#: debug.c:264 msgid "(un)set or show instruction tracing (value=on|off)." msgstr "affiche ou (dés)active le traçage des instructions (valeur=on|off)." -#: debug.c:339 +#: debug.c:345 msgid "program not running." msgstr "le programme n'est pas en cours." -#: debug.c:442 debug.c:597 +#: debug.c:448 debug.c:606 #, c-format msgid "can't read source file `%s' (%s)" msgstr "impossible de lire le fichier source « %s » (%s)" -#: debug.c:447 +#: debug.c:453 #, c-format msgid "source file `%s' is empty.\n" msgstr "le fichier source « %s » est vide.\n" -#: debug.c:474 +#: debug.c:480 msgid "no current source file." msgstr "pas de fichier source courant." -#: debug.c:499 +#: debug.c:505 #, c-format msgid "cannot find source file named `%s' (%s)" msgstr "impossible de trouver le fichier source nommé « %s » (%s)" -#: debug.c:523 +#: debug.c:529 #, c-format msgid "WARNING: source file `%s' modified since program compilation.\n" -msgstr "" -"ATTENTION : fichier source « %s » modifié après compilation du programme.\n" +msgstr "ATTENTION : fichier source « %s » modifié après compilation du programme.\n" -#: debug.c:542 +#: debug.c:551 #, c-format msgid "line number %d out of range; `%s' has %d lines" msgstr "numéro de ligne %d hors limite ; « %s » a %d lignes" -#: debug.c:602 +#: debug.c:611 #, c-format msgid "unexpected eof while reading file `%s', line %d" msgstr "fin de fichier inattendue lors de la lecture de « %s », ligne %d" -#: debug.c:611 +#: debug.c:620 #, c-format msgid "source file `%s' modified since start of program execution" msgstr "fichier source « %s » modifié depuis le début d'exécution du programme" # c-format -#: debug.c:723 +#: debug.c:732 #, c-format msgid "Current source file: %s\n" msgstr "Fichier source courant : %s\n" -#: debug.c:724 +#: debug.c:733 #, c-format msgid "Number of lines: %d\n" msgstr "Nombre de lignes : %d\n" -#: debug.c:731 +#: debug.c:740 #, c-format msgid "Source file (lines): %s (%d)\n" msgstr "Fichier source (lignes) : %s (%d)\n" -#: debug.c:745 +#: debug.c:754 msgid "" "Number Disp Enabled Location\n" "\n" @@ -1378,54 +1312,54 @@ msgstr "" "Numéro Post Activé Position\n" "\n" -#: debug.c:756 +#: debug.c:765 #, c-format msgid "\tno of hits = %ld\n" msgstr "\tnb occurrences = %ld\n" -#: debug.c:758 +#: debug.c:767 #, c-format msgid "\tignore next %ld hit(s)\n" msgstr "\tignore %ld prochaines occurrences\n" -#: debug.c:760 debug.c:900 +#: debug.c:769 debug.c:909 #, c-format msgid "\tstop condition: %s\n" msgstr "\tcondition d'arrêt : %s\n" -#: debug.c:762 debug.c:902 +#: debug.c:771 debug.c:911 msgid "\tcommands:\n" msgstr "\tcommandes :\n" -#: debug.c:784 +#: debug.c:793 #, c-format msgid "Current frame: " msgstr "Trame courante : " -#: debug.c:787 +#: debug.c:796 #, c-format msgid "Called by frame: " msgstr "Appelée par la trame : " -#: debug.c:791 +#: debug.c:800 #, c-format msgid "Caller of frame: " msgstr "Appelant de la trame : " -#: debug.c:809 +#: debug.c:818 #, c-format msgid "None in main().\n" msgstr "Aucune dans main().\n" -#: debug.c:839 +#: debug.c:848 msgid "No arguments.\n" msgstr "Aucun argument.\n" -#: debug.c:840 +#: debug.c:849 msgid "No locals.\n" msgstr "Aucune variable locale.\n" -#: debug.c:848 +#: debug.c:857 msgid "" "All defined variables:\n" "\n" @@ -1433,7 +1367,7 @@ msgstr "" "Liste des variables définies :\n" "\n" -#: debug.c:858 +#: debug.c:867 msgid "" "All defined functions:\n" "\n" @@ -1441,7 +1375,7 @@ msgstr "" "Liste des fonctions définies :\n" "\n" -#: debug.c:877 +#: debug.c:886 msgid "" "Auto-display variables:\n" "\n" @@ -1449,7 +1383,7 @@ msgstr "" "Variables affichées automatiquement :\n" "\n" -#: debug.c:880 +#: debug.c:889 msgid "" "Watch variables:\n" "\n" @@ -1457,364 +1391,357 @@ msgstr "" "Variables inspectées :\n" "\n" -#: debug.c:1020 +#: debug.c:1029 #, c-format msgid "no symbol `%s' in current context\n" msgstr "pas de symbole « %s » dans le contexte actuel\n" -#: debug.c:1032 debug.c:1418 +#: debug.c:1041 debug.c:1427 #, c-format msgid "`%s' is not an array\n" msgstr "« %s » n'est pas un tableau\n" -#: debug.c:1046 +#: debug.c:1055 #, c-format msgid "$%ld = uninitialized field\n" msgstr "$%ld = champ non initialisé\n" -#: debug.c:1067 +#: debug.c:1076 #, c-format msgid "array `%s' is empty\n" msgstr "le tableau « %s » est vide\n" -#: debug.c:1110 debug.c:1162 +#: debug.c:1119 debug.c:1171 #, c-format msgid "[\"%s\"] not in array `%s'\n" msgstr "[\"%s\"] n'est pas dans le tableau « %s »\n" -#: debug.c:1166 +#: debug.c:1175 #, c-format msgid "`%s[\"%s\"]' is not an array\n" msgstr "« %s[\"%s\"] » n'est pas un tableau\n" -#: debug.c:1227 debug.c:4949 +#: debug.c:1236 debug.c:4964 #, c-format msgid "`%s' is not a scalar variable" msgstr "« %s » n'est pas une variable scalaire" -#: debug.c:1249 debug.c:4979 +#: debug.c:1258 debug.c:4994 #, c-format msgid "attempt to use array `%s[\"%s\"]' in a scalar context" msgstr "tentative d'utilisation du tableau « %s[\"%s\"] » en contexte scalaire" -#: debug.c:1271 debug.c:4990 +#: debug.c:1280 debug.c:5005 #, c-format msgid "attempt to use scalar `%s[\"%s\"]' as array" msgstr "tentative d'utiliser le scalaire « %s[\"%s\"] » comme tableau" -#: debug.c:1414 +#: debug.c:1423 #, c-format msgid "`%s' is a function" msgstr "« %s » est une fonction" -#: debug.c:1456 +#: debug.c:1465 #, c-format msgid "watchpoint %d is unconditional\n" msgstr "le point de surveillance %d est inconditionnel\n" -#: debug.c:1490 +#: debug.c:1499 #, c-format msgid "No display item numbered %ld" msgstr "Aucune entrée d'affichage numéro %ld" -#: debug.c:1493 +#: debug.c:1502 #, c-format msgid "No watch item numbered %ld" msgstr "Aucune entrée de surveillance numéro %ld" -#: debug.c:1519 +#: debug.c:1528 #, c-format msgid "%d: [\"%s\"] not in array `%s'\n" msgstr "%d: [\"%s\"] n'est pas dans le tableau « %s »\n" -#: debug.c:1758 +#: debug.c:1767 msgid "attempt to use scalar value as array" msgstr "tentative d'utiliser un scalaire comme tableau" -#: debug.c:1847 +#: debug.c:1856 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" -msgstr "" -"Point de surveillance %d détruit, car son paramètre est hors contexte.\n" +msgstr "Point de surveillance %d détruit, car son paramètre est hors contexte.\n" -#: debug.c:1858 +#: debug.c:1867 #, c-format msgid "Display %d deleted because parameter is out of scope.\n" msgstr "Affichage %d détruit, car son paramètre est hors contexte\n" -#: debug.c:1891 +#: debug.c:1900 #, c-format msgid " in file `%s', line %d\n" msgstr "dans le fichier « %s », ligne %d\n" -#: debug.c:1912 +#: debug.c:1921 #, c-format msgid " at `%s':%d" msgstr " à « %s »:%d" -#: debug.c:1928 debug.c:1991 +#: debug.c:1937 debug.c:2000 #, c-format msgid "#%ld\tin " msgstr "#%ld\tdans " -#: debug.c:1965 +#: debug.c:1974 #, c-format msgid "More stack frames follow ...\n" msgstr "D'autres trames de la pile suivent...\n" -#: debug.c:2008 +#: debug.c:2017 msgid "invalid frame number" msgstr "Numéro de trame incorrect" -#: debug.c:2180 +#: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" -msgstr "" -"Note : point d'arrêt %d (activé, ignore %ld occurrences) déjà défini à %s:%d" +msgstr "Note : point d'arrêt %d (activé, ignore %ld occurrences) déjà défini à %s:%d" -#: debug.c:2187 +#: debug.c:2207 #, c-format msgid "Note: breakpoint %d (enabled), also set at %s:%d" msgstr "Note : point d'arrêt %d (activé) déjà défini à %s:%d" -#: debug.c:2194 +#: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" -msgstr "" -"Note : point d'arrêt %d (désactivé, ignore %ld occurrences) déjà défini à %s:" -"%d" +msgstr "Note : point d'arrêt %d (désactivé, ignore %ld occurrences) déjà défini à %s:%d" -#: debug.c:2201 +#: debug.c:2221 #, c-format msgid "Note: breakpoint %d (disabled), also set at %s:%d" msgstr "Note : point d'arrêt %d (désactivé) déjà défini à %s:%d" -#: debug.c:2218 +#: debug.c:2238 #, c-format msgid "Breakpoint %d set at file `%s', line %d\n" msgstr "Point d'arrêt %d défini dans le fichier « %s » ligne %d\n" -#: debug.c:2320 +#: debug.c:2340 #, c-format msgid "Can't set breakpoint in file `%s'\n" msgstr "Impossible de définir un point d'arrêt dans le fichier « %s »\n" -#: debug.c:2349 debug.c:2472 debug.c:3330 +#: debug.c:2369 debug.c:2492 debug.c:3350 #, c-format msgid "line number %d in file `%s' out of range" msgstr "numéro de ligne %d dans le fichier « %s » hors limite" -#: debug.c:2353 +#: debug.c:2373 #, c-format msgid "Can't find rule!!!\n" msgstr "Règle introuvable !!!\n" -#: debug.c:2355 +#: debug.c:2375 #, c-format msgid "Can't set breakpoint at `%s':%d\n" msgstr "Impossible de définir un point d'arrêt à « %s »:%d\n" -#: debug.c:2367 +#: debug.c:2387 #, c-format msgid "Can't set breakpoint in function `%s'\n" msgstr "Impossible de définir un point d'arrêt dans la fonction « %s »\n" -#: debug.c:2383 +#: debug.c:2403 #, c-format msgid "breakpoint %d set at file `%s', line %d is unconditional\n" -msgstr "" -"le point d'arrêt %d défini sur le fichier « %s », ligne %d est " -"inconditionnel\n" +msgstr "le point d'arrêt %d défini sur le fichier « %s », ligne %d est inconditionnel\n" -#: debug.c:2488 debug.c:2510 +#: debug.c:2508 debug.c:2530 #, c-format msgid "Deleted breakpoint %d" msgstr "Point d'arrêt %d supprimé" -#: debug.c:2494 +#: debug.c:2514 #, c-format msgid "No breakpoint(s) at entry to function `%s'\n" msgstr "Aucun point d'arrêt à l'appel de la fonction « %s »\n" -#: debug.c:2521 +#: debug.c:2541 #, c-format msgid "No breakpoint at file `%s', line #%d\n" msgstr "Pas de point d'arrêt sur le fichier « %s », ligne #%d\n" -#: debug.c:2576 debug.c:2617 debug.c:2637 debug.c:2680 +#: debug.c:2596 debug.c:2637 debug.c:2657 debug.c:2700 msgid "invalid breakpoint number" msgstr "Numéro de point d'arrêt incorrect" -#: debug.c:2592 +#: debug.c:2612 msgid "Delete all breakpoints? (y or n) " msgstr "Supprimer tous les points d'arrêt (o ou n) " -#: debug.c:2593 debug.c:2903 debug.c:2956 +#: debug.c:2613 debug.c:2923 debug.c:2976 msgid "y" msgstr "o" -#: debug.c:2642 +#: debug.c:2662 #, c-format msgid "Will ignore next %ld crossing(s) of breakpoint %d.\n" msgstr "Ignorera les prochaines %ld occurrences du point d'arrêt %d.\n" -#: debug.c:2646 +#: debug.c:2666 #, c-format msgid "Will stop next time breakpoint %d is reached.\n" msgstr "S'arrêtera à la prochaine occurrence du point d'arrêt %d.\n" -#: debug.c:2763 +#: debug.c:2783 #, c-format msgid "Can only debug programs provided with the `-f' option.\n" -msgstr "" -"Seuls les programmes fournis via l'option « -f » peuvent être débogués.\n" +msgstr "Seuls les programmes fournis via l'option « -f » peuvent être débogués.\n" -#: debug.c:2888 +#: debug.c:2908 #, c-format msgid "Failed to restart debugger" msgstr "Échec de redémarrage du débogueur" -#: debug.c:2902 +#: debug.c:2922 msgid "Program already running. Restart from beginning (y/n)? " msgstr "Programme en cours. Reprendre depuis le début (o/n) ? " -#: debug.c:2906 +#: debug.c:2926 #, c-format msgid "Program not restarted\n" msgstr "Programme non redémarré\n" -#: debug.c:2916 +#: debug.c:2936 #, c-format msgid "error: cannot restart, operation not allowed\n" msgstr "erreur : impossible de redémarrer, opération interdite\n" -#: debug.c:2922 +#: debug.c:2942 #, c-format msgid "error (%s): cannot restart, ignoring rest of the commands\n" msgstr "erreur (%s) : impossible de redémarrer, suite des commandes ignorées\n" -#: debug.c:2930 +#: debug.c:2950 #, c-format msgid "Starting program: \n" msgstr "Démarrage du programme :\n" -#: debug.c:2939 +#: debug.c:2959 #, c-format msgid "Program exited %s with exit value: %d\n" msgstr "Le programme s'est terminé %s avec le code de retour : %d\n" -#: debug.c:2955 +#: debug.c:2975 msgid "The program is running. Exit anyway (y/n)? " msgstr "Le programme est en cours. Sortir quand même (o/n) ?" -#: debug.c:2990 +#: debug.c:3010 #, c-format msgid "Not stopped at any breakpoint; argument ignored.\n" msgstr "Auncun arrêt à un point d'arrêt : argument ignoré.\n" -#: debug.c:2995 +#: debug.c:3015 #, c-format msgid "invalid breakpoint number %d." msgstr "point d'arrêt %d incorrect." -#: debug.c:3000 +#: debug.c:3020 #, c-format msgid "Will ignore next %ld crossings of breakpoint %d.\n" msgstr "Les %ld prochaines occurrences du point d'arrêt %d seront ignorées.\n" -#: debug.c:3187 +#: debug.c:3207 #, c-format msgid "'finish' not meaningful in the outermost frame main()\n" msgstr "« finish » n'a pas de sens dans la trame initiale main()\n" -#: debug.c:3192 +#: debug.c:3212 #, c-format msgid "Run till return from " msgstr "S'exécute jusqu'au retour de " -#: debug.c:3235 +#: debug.c:3255 #, c-format msgid "'return' not meaningful in the outermost frame main()\n" msgstr "« return » n'a pas de sens dans la trame initiale main()\n" -#: debug.c:3349 +#: debug.c:3369 #, c-format msgid "Can't find specified location in function `%s'\n" msgstr "Impossible de trouver la position indiquée dans la fonction « %s »\n" -#: debug.c:3357 +#: debug.c:3377 #, c-format msgid "invalid source line %d in file `%s'" msgstr "ligne source %d incorrecte dans le fichier « %s »" -#: debug.c:3372 +#: debug.c:3392 #, c-format msgid "Can't find specified location %d in file `%s'\n" msgstr "Position %d introuvable dans le fichier « %s »\n" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "element not in array\n" msgstr "élément absent du tableau\n" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "untyped variable\n" msgstr "variable sans type\n" -#: debug.c:3446 +#: debug.c:3466 #, c-format msgid "Stopping in %s ...\n" msgstr "Arrêt dans %s...\n" -#: debug.c:3523 +#: debug.c:3543 #, c-format msgid "'finish' not meaningful with non-local jump '%s'\n" msgstr "« finish » n'a pas de sens avec un saut non local « %s »\n" -#: debug.c:3530 +#: debug.c:3550 #, c-format msgid "'until' not meaningful with non-local jump '%s'\n" msgstr "« until » n'a pas de sens avec un saut non local « %s »\n" -#: debug.c:4165 +#: debug.c:4185 msgid "\t------[Enter] to continue or q [Enter] to quit------" msgstr "\t---« [Entrée] » continuer ; « q [Entrée] » quitter---" -#: debug.c:4166 +#: debug.c:4186 msgid "q" msgstr "q" -#: debug.c:4986 +#: debug.c:5001 #, c-format msgid "[\"%s\"] not in array `%s'" msgstr "[\"%s\"] est absent du tableau « %s »" -#: debug.c:5192 +#: debug.c:5207 #, c-format msgid "sending output to stdout\n" msgstr "envoi de la sortie vers stdout\n" -#: debug.c:5232 +#: debug.c:5247 msgid "invalid number" msgstr "nombre incorrect" -#: debug.c:5366 +#: debug.c:5381 #, c-format msgid "`%s' not allowed in current context; statement ignored" msgstr "« %s » interdit dans ce contexte ; instruction ignorée" -#: debug.c:5374 +#: debug.c:5389 msgid "`return' not allowed in current context; statement ignored" msgstr "« return » interdit dans ce contexte ; instruction ignorée" -#: debug.c:5575 +#: debug.c:5590 #, c-format msgid "No symbol `%s' in current context" msgstr "Pas de symbole « %s » dans le contexte actuel" #: 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:1192 +#: dfa.c:1106 dfa.c:1111 dfa.c:1124 dfa.c:1191 msgid "unbalanced [" msgstr "[ non apparié" @@ -1822,31 +1749,31 @@ msgstr "[ non apparié" msgid "invalid character class" msgstr "classe de caractères incorrecte" -#: dfa.c:1229 +#: dfa.c:1228 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "la syntaxe des classes de caractères est [[:space:]], et non [:space:]" -#: dfa.c:1281 +#: dfa.c:1280 msgid "unfinished \\ escape" msgstr "échappement \\ non terminé" -#: dfa.c:1428 regcomp.c:161 +#: dfa.c:1427 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "Contenu de \\{\\} incorrect" -#: dfa.c:1431 regcomp.c:176 +#: dfa.c:1430 regcomp.c:176 msgid "Regular expression too big" msgstr "Expression rationnelle trop grande" -#: dfa.c:1816 +#: dfa.c:1847 msgid "unbalanced (" msgstr "( non apparié" -#: dfa.c:1943 +#: dfa.c:1973 msgid "no syntax specified" msgstr "aucune syntaxe indiquée" -#: dfa.c:1951 +#: dfa.c:1981 msgid "unbalanced )" msgstr ") non apparié" @@ -1865,11 +1792,11 @@ msgstr "code opération %d inconnu" 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:471 +#: eval.c:472 msgid "buffer overflow in genflags2str" msgstr "débordement de tampon dans genflag2str" -#: eval.c:674 +#: eval.c:675 #, c-format msgid "" "\n" @@ -1880,71 +1807,71 @@ msgstr "" "\t# Pile des appels de fonctions :\n" "\n" -#: eval.c:703 +#: eval.c:704 msgid "`IGNORECASE' is a gawk extension" msgstr "« IGNORECASE » est une extension gawk" -#: eval.c:735 +#: eval.c:736 msgid "`BINMODE' is a gawk extension" msgstr "« BINMODE » est une extension gawk" -#: eval.c:793 +#: eval.c:794 #, 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:884 +#: eval.c:885 #, c-format msgid "bad `%sFMT' specification `%s'" msgstr "spécification de « %sFMT » erronée « %s »" -#: eval.c:968 +#: eval.c:969 msgid "turning off `--lint' due to assignment to `LINT'" msgstr "désactivation de « --lint » en raison d'une affectation à « LINT »" -#: eval.c:1146 +#: eval.c:1147 #, c-format msgid "reference to uninitialized argument `%s'" msgstr "référence à un argument non initialisé « %s »" -#: eval.c:1147 +#: eval.c:1148 #, c-format msgid "reference to uninitialized variable `%s'" msgstr "référence à une variable non initialisée « %s »" -#: eval.c:1165 +#: eval.c:1166 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:1167 +#: eval.c:1168 msgid "attempt to field reference from null string" msgstr "tentative de référence à un champ via une chaîne nulle" -#: eval.c:1175 +#: eval.c:1176 #, c-format msgid "attempt to access field %ld" msgstr "tentative d'accès au champ %ld" -#: eval.c:1184 +#: eval.c:1185 #, c-format msgid "reference to uninitialized field `$%ld'" msgstr "référence à un champ non initialisé « $%ld »" -#: eval.c:1271 +#: eval.c:1272 #, 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:1466 +#: eval.c:1473 #, c-format msgid "unwind_stack: unexpected type `%s'" msgstr "unwind_stack: type « %s » inattendu" -#: eval.c:1562 +#: eval.c:1569 msgid "division by zero attempted in `/='" msgstr "tentative de division par zéro dans « /= »" -#: eval.c:1569 +#: eval.c:1576 #, c-format msgid "division by zero attempted in `%%='" msgstr "tentative de division par zéro dans « %%= »" @@ -1957,7 +1884,7 @@ msgstr "les extensions sont interdites en isolement (mode sandbox)" msgid "-l / @load are gawk extensions" msgstr "-l / @load est une extension gawk" -#: ext.c:95 ext.c:177 +#: ext.c:95 msgid "load_ext: received NULL lib_name" msgstr "load_ext : lib_name reçu NULL" @@ -1968,30 +1895,27 @@ msgstr "load_ext : impossible d'ouvrir la bibliothèque « %s » (%s)\n" #: ext.c:104 #, c-format -msgid "" -"load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n" -msgstr "" -"load_ext : bibliothèque « %s » : ne définit pas " -"« plugin_is_GPL_compatible » (%s)\n" +msgid "load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n" +msgstr "load_ext : bibliothèque « %s » : ne définit pas « plugin_is_GPL_compatible » (%s)\n" #: ext.c:110 #, 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" +msgstr "load_ext : bibliothèque « %s » : impossible d'appeler la fonction « %s » (%s)\n" #: ext.c:114 #, 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" +msgstr "load_ext : bibliothèque « %s » : échec de la routine d'initialisation « %s »\n" #: ext.c:174 msgid "`extension' is a gawk extension" msgstr "« extension » est une extension gawk" +#: ext.c:177 +msgid "extension: received NULL lib_name" +msgstr "extension : lib_name reçu NULL" + #: ext.c:180 #, c-format msgid "extension: cannot open library `%s' (%s)" @@ -1999,55 +1923,48 @@ msgstr "extension : impossible d'ouvrir la bibliothèque « %s » (%s)" #: ext.c:186 #, c-format -msgid "" -"extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)" -msgstr "" -"extension : bibliothèque « %s » : ne définit pas " -"« plugin_is_GPL_compatible » (%s)" +msgid "extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)" +msgstr "extension : bibliothèque « %s » : ne définit pas « plugin_is_GPL_compatible » (%s)" #: ext.c:190 #, c-format msgid "extension: library `%s': cannot call function `%s' (%s)" -msgstr "" -"extension : bibliothèque « %s » : impossible d'appeler la fonction " -"« %s » (%s)" +msgstr "extension : bibliothèque « %s » : impossible d'appeler la fonction « %s » (%s)" #: ext.c:221 msgid "make_builtin: missing function name" msgstr "make_builtin : nom de fonction manquant" -#: ext.c:238 +#: ext.c:236 #, c-format msgid "make_builtin: can't redefine function `%s'" msgstr "make_builtin : impossible de redéfinir la fonction « %s »" -#: ext.c:242 +#: ext.c:240 #, c-format msgid "make_builtin: function `%s' already defined" msgstr "make_builtin : fonction « %s » déjà définie" -#: ext.c:246 +#: ext.c:244 #, c-format msgid "make_builtin: function name `%s' previously defined" msgstr "make_builtin : nom de la fonction « %s » déjà défini" -#: ext.c:248 +#: ext.c:246 #, 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" +msgstr "make_builtin : impossible d'utiliser la fonction gawk « %s » comme nom de fonction" -#: ext.c:251 ext.c:304 +#: ext.c:249 ext.c:304 #, 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:278 +#: ext.c:276 msgid "extension: missing function name" msgstr "extension : nom de fonction manquant" -#: ext.c:283 +#: ext.c:279 ext.c:283 #, 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 »" @@ -2070,147 +1987,145 @@ msgstr "extension : nom de la fonction « %s » déjà défini" #: ext.c:301 #, 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" +msgstr "extension : impossible d'utiliser la fonction interne gawk « %s » comme nom de fonction" -#: ext.c:374 +#: ext.c:375 #, 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:377 +#: ext.c:378 #, c-format msgid "function `%s': missing argument #%d" msgstr "fonction « %s » : argument #%d manquant" -#: ext.c:394 +#: ext.c:395 #, 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" +msgstr "fonction « %s » : argument #%d : tentative d'utilisation d'un scalaire comme tableau" -#: ext.c:398 +#: ext.c:399 #, 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" +msgstr "fonction « %s » : argument #%d : tentative d'utiliser un tableau comme scalaire" -#: ext.c:412 +#: ext.c:413 msgid "dynamic loading of library not supported" msgstr "chargement dynamique des bibliothèques impossible" -#: extension/filefuncs.c:97 +#: extension/filefuncs.c:159 msgid "chdir: called with incorrect number of arguments, expecting 1" msgstr "chdir : appelé avec un nombre d'arguments incorrects, attendu : 1" -#: extension/filefuncs.c:343 +#: extension/filefuncs.c:439 #, c-format msgid "stat: unable to read symbolic link `%s'" msgstr "stat : impossible de lire le lien symbolique « %s »" -#: extension/filefuncs.c:376 +#: extension/filefuncs.c:472 msgid "stat: called with wrong number of arguments" msgstr "stat : appelé avec un nombre d'arguments incorrect" -#: extension/filefuncs.c:383 +#: extension/filefuncs.c:479 msgid "stat: bad parameters" msgstr "stat : paramètres incorrects" -#: extension/filefuncs.c:437 +#: extension/filefuncs.c:533 #, c-format msgid "fts init: could not create variable %s" msgstr "fts init : impossible de créer la variable %s" -#: extension/filefuncs.c:460 +#: extension/filefuncs.c:554 +msgid "fts is not supported on this system" +msgstr "fts n'est pas compatible avec ce système" + +#: extension/filefuncs.c:573 msgid "fill_stat_element: could not create array" msgstr "fill_stat_element : impossible de créer le tableau" -#: extension/filefuncs.c:469 +#: extension/filefuncs.c:582 msgid "fill_stat_element: could not set element" msgstr "fill_stat_element : impossible de définir l'élément" -#: extension/filefuncs.c:484 +#: extension/filefuncs.c:597 msgid "fill_path_element: could not set element" msgstr "fill_path_element : impossible de définir l'élément" -#: extension/filefuncs.c:500 +#: extension/filefuncs.c:613 msgid "fill_error_element: could not set element" msgstr "fill_error_element : impossible de définir l'élément" -#: extension/filefuncs.c:547 extension/filefuncs.c:594 +#: extension/filefuncs.c:660 extension/filefuncs.c:707 msgid "fts-process: could not create array" msgstr "fts-process : impossible de créer le tableau" -#: extension/filefuncs.c:557 extension/filefuncs.c:604 -#: extension/filefuncs.c:622 +#: extension/filefuncs.c:670 extension/filefuncs.c:717 +#: extension/filefuncs.c:735 msgid "fts-process: could not set element" msgstr "fts-process : impossible de définir l'élément" -#: extension/filefuncs.c:671 +#: extension/filefuncs.c:784 msgid "fts: called with incorrect number of arguments, expecting 3" msgstr "fts : appelé avec un nombre d'arguments incorrects, attendu : 3" -#: extension/filefuncs.c:674 +#: extension/filefuncs.c:787 msgid "fts: bad first parameter" msgstr "fts : premier paramètre incorrect" -#: extension/filefuncs.c:680 +#: extension/filefuncs.c:793 msgid "fts: bad second parameter" msgstr "fts : deuxième paramètre incorrect" -#: extension/filefuncs.c:686 +#: extension/filefuncs.c:799 msgid "fts: bad third parameter" msgstr "fts : troisième paramètre incorrect" -#: extension/filefuncs.c:693 +#: extension/filefuncs.c:806 msgid "fts: could not flatten array\n" msgstr "fts : impossible d'aplatir le tableau\n" -#: extension/filefuncs.c:711 +#: extension/filefuncs.c:824 msgid "fts: ignoring sneaky FTS_NOSTAT flag. nyah, nyah, nyah." msgstr "fts : on ignore le drapeau sournois FTS_NOSTAT..." -#: extension/filefuncs.c:728 +#: extension/filefuncs.c:841 msgid "fts: clear_array() failed\n" msgstr "fts : échec de clear_array()\n" -#: extension/fnmatch.c:98 +#: extension/fnmatch.c:112 msgid "fnmatch: called with less than three arguments" msgstr "fnmatch : appelé avec moins de 3 arguments" -#: extension/fnmatch.c:101 +#: extension/fnmatch.c:115 msgid "fnmatch: called with more than three arguments" msgstr "fnmatch : appelé avec plus de 3 arguments" -#: extension/fnmatch.c:104 +#: extension/fnmatch.c:118 msgid "fnmatch: could not get first argument" msgstr "fnmatch : impossible d'obtenir le 1er argument" -#: extension/fnmatch.c:109 +#: extension/fnmatch.c:123 msgid "fnmatch: could not get second argument" msgstr "fnmatch : impossible d'obtenir le 2e argument" -#: extension/fnmatch.c:114 +#: extension/fnmatch.c:128 msgid "fnmatch: could not get third argument" msgstr "fnmatch : impossible d'obtenir le 3e argument" -#: extension/fnmatch.c:127 +#: extension/fnmatch.c:141 msgid "fnmatch is not implemented on this system\n" msgstr "fnmatch n'est pas disponible sur ce système\n" -#: extension/fnmatch.c:159 +#: extension/fnmatch.c:173 msgid "fnmatch init: could not add FNM_NOMATCH variable" msgstr "fnmatch init : impossible d'ajouter la variable FNM_NOMATCH" -#: extension/fnmatch.c:169 +#: extension/fnmatch.c:183 #, c-format msgid "fnmatch init: could not set array element %s" msgstr "fnmatch init : impossible de définir l'élément de tableau %s" -#: extension/fnmatch.c:179 +#: extension/fnmatch.c:193 msgid "fnmatch init: could not install FNM array" msgstr "fnmatch init : impossible d'installer le tableau FNM" @@ -2234,92 +2149,88 @@ msgstr "wait : appelé sans argument" msgid "wait: called with too many arguments" msgstr "wait : appelé avec trop d'arguments" -#: extension/inplace.c:110 +#: extension/inplace.c:130 msgid "inplace_begin: in-place editing already active" msgstr "inplace_begin : modification sur place déjà active" -#: extension/inplace.c:113 extension/inplace.c:187 +#: extension/inplace.c:133 extension/inplace.c:207 #, c-format msgid "inplace_begin: expects 2 arguments but called with %d" msgstr "inplace_begin : 2 arguments attendu, appelé avec %d" -#: extension/inplace.c:116 +#: extension/inplace.c:136 msgid "inplace_begin: cannot retrieve 1st argument as a string filename" -msgstr "" -"inplace_begin : impossible de récupérer le 1er argument comme nom de fichier" +msgstr "inplace_begin : impossible de récupérer le 1er argument comme nom de fichier" -#: extension/inplace.c:124 +#: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" -msgstr "" -"inplace_begin : modification sur place annulée pour le fichier incorrect " -"« %s »" +msgstr "inplace_begin : modification sur place annulée pour le fichier incorrect « %s »" -#: extension/inplace.c:131 +#: extension/inplace.c:151 #, c-format msgid "inplace_begin: Cannot stat `%s' (%s)" msgstr "inplace_begin : stat impossible sur « %s » (%s)" -#: extension/inplace.c:138 +#: extension/inplace.c:158 #, c-format msgid "inplace_begin: `%s' is not a regular file" msgstr "inplace_begin : « %s » n'est pas un fichier ordinaire" -#: extension/inplace.c:149 +#: extension/inplace.c:169 #, c-format msgid "inplace_begin: mkstemp(`%s') failed (%s)" msgstr "inplace_begin : échec de mkstemp('%s') (%s)" -#: extension/inplace.c:158 +#: extension/inplace.c:178 #, c-format msgid "inplace_begin: chmod failed (%s)" msgstr "inplace_begin : échec de la chmod (%s)" -#: extension/inplace.c:165 +#: extension/inplace.c:185 #, c-format msgid "inplace_begin: dup(stdout) failed (%s)" msgstr "inplace_begin : échec de dup(stdout) (%s)" -#: extension/inplace.c:168 +#: extension/inplace.c:188 #, c-format msgid "inplace_begin: dup2(%d, stdout) failed (%s)" msgstr "inplace_begin : échec de dup2(%d, stdout) (%s)" -#: extension/inplace.c:171 +#: extension/inplace.c:191 #, c-format msgid "inplace_begin: close(%d) failed (%s)" msgstr "inplace_begin : échec de close(%d) (%s)" -#: extension/inplace.c:190 +#: extension/inplace.c:210 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" +msgstr "inplace_end : impossible de récupérer le 1er argument comme nom de fichier" -#: extension/inplace.c:197 +#: extension/inplace.c:217 msgid "inplace_end: in-place editing not active" msgstr "inplace_end : modification sur place non active" -#: extension/inplace.c:203 +#: extension/inplace.c:223 #, c-format msgid "inplace_end: dup2(%d, stdout) failed (%s)" msgstr "ipnlace_end : échec de dup2(%d, stdout) (%s)" -#: extension/inplace.c:206 +#: extension/inplace.c:226 #, c-format msgid "inplace_end: close(%d) failed (%s)" msgstr "inplace_end : échec de close(%d) (%s)" -#: extension/inplace.c:210 +#: extension/inplace.c:230 #, c-format msgid "inplace_end: fsetpos(stdout) failed (%s)" msgstr "inplace_end : échec de fsetpos(stdout) (%s)" -#: extension/inplace.c:223 +#: extension/inplace.c:243 #, c-format msgid "inplace_end: link(`%s', `%s') failed (%s)" msgstr "inplace_end : échec de link('%s', '%s') (%s)" -#: extension/inplace.c:229 +#: extension/inplace.c:253 #, c-format msgid "inplace_end: rename(`%s', `%s') failed (%s)" msgstr "inplace_end : échec de rename('%s', '%s') (%s)" @@ -2348,7 +2259,7 @@ msgstr "chr : appelé sans argument" msgid "chr: called with inappropriate argument(s)" msgstr "chr : appelé avec des arguments incorrects" -#: extension/readdir.c:203 +#: extension/readdir.c:277 #, c-format msgid "dir_take_control_of: opendir/fdopendir failed: %s" msgstr "dir_take_control_of : échec de opendir/fdopendir : %s" @@ -2361,160 +2272,152 @@ msgstr "readfile : appelé avec trop d'arguments" msgid "readfile: called with no arguments" msgstr "readfile : appelé sans argument" -#: extension/rwarray.c:120 +#: extension/rwarray.c:124 msgid "writea: called with too many arguments" msgstr "writea : appelé avec trop d'arguments" -#: extension/rwarray.c:127 +#: extension/rwarray.c:131 #, 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:133 +#: extension/rwarray.c:137 #, 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:180 +#: extension/rwarray.c:184 #, c-format msgid "write_array: could not flatten array\n" msgstr "write_array : impossible d'aplatir le tableau\n" -#: extension/rwarray.c:194 +#: extension/rwarray.c:198 #, 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:276 +#: extension/rwarray.c:280 msgid "reada: called with too many arguments" msgstr "reada : appelé avec trop d'arguments" -#: extension/rwarray.c:283 +#: extension/rwarray.c:287 #, 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:289 +#: extension/rwarray.c:293 #, 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:333 +#: extension/rwarray.c:337 #, c-format msgid "do_reada: clear_array failed\n" msgstr "do_reada : échec de clear_array\n" -#: extension/rwarray.c:370 +#: extension/rwarray.c:374 #, c-format msgid "read_array: set_array_element failed\n" msgstr "read_array : échec de set_array_element\n" -#: extension/time.c:81 +#: extension/time.c:106 msgid "gettimeofday: ignoring arguments" msgstr "gettimeofday : arguments ignorés" -#: extension/time.c:112 +#: extension/time.c:137 msgid "gettimeofday: not supported on this platform" msgstr "gettimeofday : n'est pas disponible sur cette plateforme" -#: extension/time.c:133 +#: extension/time.c:158 msgid "sleep: called with too many arguments" msgstr "sleep : appelé avec trop d'arguments" -#: extension/time.c:136 +#: extension/time.c:161 msgid "sleep: missing required numeric argument" msgstr "sleep : l'argument numérique requis est absent" -#: extension/time.c:142 +#: extension/time.c:167 msgid "sleep: argument is negative" msgstr "sleep : l'argument est négatif" -#: extension/time.c:176 +#: extension/time.c:201 msgid "sleep: not supported on this platform" msgstr "sleep : n'est pas disponible sur cette plateforme" -#: field.c:339 +#: field.c:345 msgid "NF set to negative value" msgstr "une valeur négative a été assignée à NF" -#: field.c:964 field.c:971 field.c:975 +#: field.c:971 field.c:978 field.c:982 msgid "split: fourth argument is a gawk extension" msgstr "split : le 4e argument est une extension gawk" -#: field.c:968 +#: field.c:975 msgid "split: fourth argument is not an array" msgstr "split : le 4e argument n'est pas un tableau" -#: field.c:982 +#: field.c:989 msgid "split: second argument is not an array" msgstr "split : le 2e argument n'est pas un tableau" -#: field.c:986 +#: field.c:993 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:991 +#: field.c:998 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" +msgstr "split : impossible d'utiliser un sous-tableau du 2e argument en 4e argument" -#: field.c:994 +#: field.c:1001 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" +msgstr "split : impossible d'utiliser un sous-tableau du 4e argument en 2e argument" -#: field.c:1023 +#: field.c:1032 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:1063 +#: field.c:1072 msgid "patsplit: fourth argument is not an array" msgstr "patsplit : le 4e argument n'est pas un tableau" -#: field.c:1068 +#: field.c:1077 msgid "patsplit: second argument is not an array" msgstr "patsplit : le 2e argument n'est pas un tableau" -#: field.c:1074 +#: field.c:1083 msgid "patsplit: third argument must be non-null" msgstr "patsplit : le 3e argument n'est pas un tableau" -#: field.c:1078 +#: field.c:1087 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" +msgstr "patsplit : impossible d'utiliser le même tableau comme 2e et 4e argument" -#: field.c:1083 +#: field.c:1092 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" +msgstr "patsplit : impossible d'utiliser un sous-tableau du 2e argument en 4e argument" -#: field.c:1086 +#: field.c:1095 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" +msgstr "patsplit : impossible d'utiliser un sous-tableau du 4e argument en 2e argument" -#: field.c:1124 +#: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" msgstr "« FIELDWIDTHS » est une extension gawk" -#: field.c:1188 +#: field.c:1197 #, c-format msgid "invalid FIELDWIDTHS value, near `%s'" msgstr "valeur de FIELDWIDTHS incorrecte, près de « %s »" -#: field.c:1261 +#: field.c:1270 msgid "null string for `FS' is a gawk extension" msgstr "utiliser une chaîne vide pour « FS » est une extension gawk" -#: field.c:1265 +#: field.c:1274 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 »" +msgstr "l'ancien awk n'accepte pas les expr. rationnelles comme valeur de « FS »" -#: field.c:1384 +#: field.c:1393 msgid "`FPAT' is a gawk extension" msgstr "« FPAT » est une extension gawk" @@ -2538,595 +2441,565 @@ msgstr "remove_element : tableau nul reçu" msgid "remove_element: received null subscript" msgstr "remove_element : indice nul reçu" -#: gawkapi.c:943 +#: gawkapi.c:948 #, 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:948 +#: gawkapi.c:953 #, c-format msgid "api_flatten_array: could not convert value %d\n" msgstr "api_flatten_array : impossible de convertir la valeur %d\n" -#: getopt.c:603 getopt.c:632 +#: getopt.c:604 getopt.c:633 #, c-format msgid "%s: option '%s' is ambiguous; possibilities:" msgstr "%s : l'option « %s » est ambiguë ; possibilités :" -#: getopt.c:678 getopt.c:682 +#: getopt.c:679 getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s : l'option « --%s » n'accepte pas d'argument\n" -#: getopt.c:691 getopt.c:696 +#: getopt.c:692 getopt.c:697 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s : l'option « %c%s » n'accepte pas d'argument\n" -#: getopt.c:739 getopt.c:758 +#: getopt.c:740 getopt.c:759 #, c-format msgid "%s: option '--%s' requires an argument\n" msgstr "%s : l'option « --%s » nécessite un argument\n" -#: getopt.c:796 getopt.c:799 +#: getopt.c:797 getopt.c:800 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s : option non reconnue « --%s »\n" -#: getopt.c:807 getopt.c:810 +#: getopt.c:808 getopt.c:811 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s : option non reconnue « %c%s »\n" -#: getopt.c:859 getopt.c:862 +#: getopt.c:860 getopt.c:863 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s : option incorrecte - « %c »\n" -#: getopt.c:915 getopt.c:932 getopt.c:1142 getopt.c:1160 +#: getopt.c:916 getopt.c:933 getopt.c:1143 getopt.c:1161 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s : l'option requiert un argument - « %c »\n" -#: getopt.c:988 getopt.c:1004 +#: getopt.c:989 getopt.c:1005 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s : l'option « -W %s » est ambiguë\n" -#: getopt.c:1028 getopt.c:1046 +#: getopt.c:1029 getopt.c:1047 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s : l'option « -W %s » n'accepte pas d'argument\n" -#: getopt.c:1067 getopt.c:1085 +#: getopt.c:1068 getopt.c:1086 #, c-format msgid "%s: option '-W %s' requires an argument\n" msgstr "%s : l'option « -W %s » nécessite un argument\n" -#: io.c:347 +#: io.c:392 #, 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:350 io.c:463 +#: io.c:395 io.c:513 #, c-format msgid "cannot open file `%s' for reading (%s)" msgstr "impossible d'ouvrir le fichier « %s » en lecture (%s)" -#: io.c:590 +#: io.c:640 #, c-format msgid "close of fd %d (`%s') failed (%s)" msgstr "échec de la fermeture du fd %d (« %s ») : %s" -#: io.c:666 +#: io.c:716 msgid "redirection not allowed in sandbox mode" msgstr "les redirections sont interdites en isolement (mode sandbox)" -#: io.c:700 +#: io.c:750 #, 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:706 +#: io.c:756 #, 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:711 +#: io.c:761 #, 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" +msgstr "le fichier « %s » de la redirection « %s » pourrait être le résultat d'une expression booléenne" -#: io.c:754 +#: io.c:809 #, c-format msgid "unnecessary mixing of `>' and `>>' for file `%.*s'" msgstr "mélange non nécessaire de « > » et « >> » pour le fichier « %.*s »" -#: io.c:808 +#: io.c:863 #, c-format msgid "can't open pipe `%s' for output (%s)" msgstr "impossible d'ouvrir le tube « %s » en sortie (%s)" -#: io.c:818 +#: io.c:873 #, c-format msgid "can't open pipe `%s' for input (%s)" msgstr "impossible d'ouvrir le tube « %s » en entrée (%s)" -#: io.c:849 +#: io.c:904 #, 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)" +msgstr "impossible d'ouvrir un tube bidirectionnel « %s » en entrées-sorties (%s)" -#: io.c:928 +#: io.c:986 #, c-format msgid "can't redirect from `%s' (%s)" msgstr "impossible de rediriger depuis « %s » (%s)" -#: io.c:931 +#: io.c:989 #, c-format msgid "can't redirect to `%s' (%s)" msgstr "impossible de rediriger vers « %s » (%s)" -#: io.c:982 -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:1040 +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:998 +#: io.c:1056 #, c-format msgid "close of `%s' failed (%s)." msgstr "échec de la fermeture de « %s » (%s)." -#: io.c:1006 +#: io.c:1064 msgid "too many pipes or input files open" msgstr "trop de fichiers d'entrées ou de tubes ouverts" -#: io.c:1028 +#: io.c:1086 msgid "close: second argument must be `to' or `from'" msgstr "close : le second argument doit être « to » ou « from »" -#: io.c:1045 +#: io.c:1103 #, 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" +msgstr "close : « %.*s » n'est ni un fichier ouvert, ni un tube ou un co-processus" -#: io.c:1050 +#: io.c:1108 msgid "close of redirection that was never opened" msgstr "fermeture d'une redirection qui n'a jamais été ouverte" -#: io.c:1147 +#: io.c:1205 #, 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é" +msgstr "close : la redirection « %s » n'a pas été ouverte avec « |& », second argument ignoré" -#: io.c:1164 +#: io.c:1222 #, 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:1167 +#: io.c:1225 #, 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:1187 +#: io.c:1245 #, c-format msgid "no explicit close of socket `%s' provided" msgstr "aucune fermeture explicite du connecteur « %s » fournie" -#: io.c:1190 +#: io.c:1248 #, c-format msgid "no explicit close of co-process `%s' provided" msgstr "aucune fermeture explicite du co-processus « %s » fournie" -#: io.c:1193 +#: io.c:1251 #, c-format msgid "no explicit close of pipe `%s' provided" msgstr "aucune fermeture explicite du tube « %s » fournie" -#: io.c:1196 +#: io.c:1254 #, c-format msgid "no explicit close of file `%s' provided" msgstr "aucune fermeture explicite du fichier « %s » fournie" -#: io.c:1224 io.c:1279 main.c:842 main.c:879 +#: io.c:1284 io.c:1342 main.c:864 main.c:906 #, c-format msgid "error writing standard output (%s)" msgstr "erreur lors de l'écriture vers la sortie standard (%s)" -#: io.c:1228 io.c:1284 +#: io.c:1289 io.c:1348 main.c:866 #, c-format msgid "error writing standard error (%s)" msgstr "erreur lors de l'écriture vers l'erreur standard (%s)" -#: io.c:1236 +#: io.c:1297 #, c-format msgid "pipe flush of `%s' failed (%s)." msgstr "échec du vidage du tube « %s » (%s)." -#: io.c:1239 +#: io.c:1300 #, 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:1242 +#: io.c:1303 #, c-format msgid "file flush of `%s' failed (%s)." msgstr "échec du vidage vers le fichier « %s » (%s)." -#: io.c:1356 +#: io.c:1420 #, c-format msgid "local port %s invalid in `/inet'" msgstr "le port local %s n'est pas valide dans « /inet »" -#: io.c:1374 +#: io.c:1438 #, 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" +msgstr "les informations sur l'hôte et le port distants (%s, %s) ne sont pas valides" -#: io.c:1526 +#: 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 »" +msgstr "aucun protocole (connu) n'a été fourni dans le nom de fichier spécial « %s »" -#: io.c:1540 +#: io.c:1604 #, c-format msgid "special file name `%s' is incomplete" msgstr "nom de fichier spécial « %s » incomplet" -#: io.c:1557 +#: io.c:1621 msgid "must supply a remote hostname to `/inet'" msgstr "un nom d'hôte distant doit être fourni à « /inet »" -#: io.c:1575 +#: io.c:1639 msgid "must supply a remote port to `/inet'" msgstr "un port distant doit être fourni à « /inet »" -#: io.c:1621 +#: io.c:1685 msgid "TCP/IP communications are not supported" msgstr "les communications TCP/IP ne sont pas disponibles" -#: io.c:1796 +#: io.c:1867 #, c-format msgid "could not open `%s', mode `%s'" msgstr "impossible d'ouvrir « %s », mode « %s »" -#: io.c:1846 +#: io.c:1917 #, c-format msgid "close of master pty failed (%s)" msgstr "échec de la fermeture du pty maître (%s)" -#: io.c:1848 io.c:2024 io.c:2194 +#: io.c:1919 io.c:2105 io.c:2305 #, c-format msgid "close of stdout in child failed (%s)" msgstr "échec de la fermeture de stdout du processus fils (%s)" -#: io.c:1851 +#: io.c:1922 #, 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)" +msgstr "échec du déplacement du pty esclave vers le stdout du processus fils (dup : %s)" -#: io.c:1853 io.c:2029 +#: io.c:1924 io.c:2110 #, c-format msgid "close of stdin in child failed (%s)" msgstr "échec de fermeture du stdin du processus fils (%s)" -#: io.c:1856 +#: io.c:1927 #, 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)" +msgstr "échec du déplacement du pty esclave vers le stdin du processus fils (dup : %s)" -#: io.c:1858 io.c:1879 +#: io.c:1929 io.c:1951 #, c-format msgid "close of slave pty failed (%s)" msgstr "échec de la fermeture du pty esclave (%s)" -#: io.c:1965 io.c:2027 io.c:2171 io.c:2197 +#: io.c:2040 io.c:2108 io.c:2276 io.c:2308 #, 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:1972 io.c:2032 +#: io.c:2047 io.c:2113 #, 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:1992 io.c:2187 +#: io.c:2073 io.c:2298 msgid "restoring stdout in parent process failed\n" msgstr "échec de la restauration du stdout dans le processus parent\n" -#: io.c:2000 +#: io.c:2081 msgid "restoring stdin in parent process failed\n" msgstr "échec de la restauration du stdin dans le processus parent\n" -#: io.c:2035 io.c:2199 io.c:2213 +#: io.c:2116 io.c:2310 io.c:2324 #, c-format msgid "close of pipe failed (%s)" msgstr "échec de la fermeture du tube (%s)" -#: io.c:2089 +#: io.c:2174 msgid "`|&' not supported" msgstr "« |& » non disponible" -#: io.c:2156 +#: io.c:2261 #, c-format msgid "cannot open pipe `%s' (%s)" msgstr "impossible d'ouvrir le tube « %s » (%s)" -#: io.c:2207 +#: io.c:2318 #, 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:2667 +#: io.c:2790 msgid "register_input_parser: received NULL pointer" msgstr "register_input_parser : pointeur NULL reçu" -#: io.c:2695 +#: io.c:2818 #, 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é" +msgstr "l'analyseur d'entrée « %s » est en conflit avec l'analyseur « %s » déjà installé" -#: io.c:2702 +#: io.c:2825 #, c-format msgid "input parser `%s' failed to open `%s'" msgstr "l'analyseur d'entrée « %s » n'a pu ouvrir « %s »" -#: io.c:2722 +#: io.c:2845 msgid "register_output_wrapper: received NULL pointer" msgstr "register_output_wrapper : pointeur NULL reçu" -#: io.c:2750 +#: io.c:2873 #, 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é" +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:2757 +#: io.c:2880 #, c-format msgid "output wrapper `%s' failed to open `%s'" msgstr "le filtre de sortie « %s » n'a pu ouvrir « %s »" -#: io.c:2778 +#: io.c:2901 msgid "register_output_processor: received NULL pointer" msgstr "register_output_processor : pointeur NULL reçu" -#: io.c:2807 +#: io.c:2930 #, c-format -msgid "" -"two-way processor `%s' conflicts with previously installed two-way processor " -"`%s'" -msgstr "" -"le gestionnaire bidirectionnel « %s » est en conflit avec le gestionnaire " -"« %s » déjà installé" +msgid "two-way processor `%s' conflicts with previously installed two-way processor `%s'" +msgstr "le gestionnaire bidirectionnel « %s » est en conflit avec le gestionnaire « %s » déjà installé" -#: io.c:2816 +#: io.c:2939 #, c-format msgid "two way processor `%s' failed to open `%s'" msgstr "le gestionnaire bidirectionnel « %s » n'a pu ouvrir « %s »" -#: io.c:2923 +#: io.c:3064 #, c-format msgid "data file `%s' is empty" msgstr "le fichier de données « %s » est vide" -#: io.c:2965 io.c:2973 +#: io.c:3106 io.c:3114 msgid "could not allocate more input memory" msgstr "impossible d'allouer plus de mémoire d'entrée" -#: io.c:3539 +#: io.c:3682 msgid "multicharacter value of `RS' is a gawk extension" -msgstr "" -"l'utilisation d'un « RS » de plusieurs caractères est une extension gawk" +msgstr "l'utilisation d'un « RS » de plusieurs caractères est une extension gawk" -#: io.c:3628 +#: io.c:3771 msgid "IPv6 communication is not supported" msgstr "les communications IPv6 ne sont pas disponibles" -#: main.c:388 +#: main.c:405 msgid "empty argument to `-e/--source' ignored" msgstr "argument vide de l'option « -e / --source » ignoré" -#: main.c:478 +#: 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:524 +#: main.c:541 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s : l'option requiert un argument - %c\n" -#: main.c:545 +#: main.c:562 msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'" -msgstr "" -"variable d'environnement « POSIXLY__CORRECT » définie : activation de « --" -"posix »" +msgstr "variable d'environnement « POSIXLY__CORRECT » définie : activation de « --posix »" -#: main.c:551 +#: main.c:568 msgid "`--posix' overrides `--traditional'" msgstr "« --posix » prend le pas sur « --traditional »" -#: main.c:562 +#: main.c:579 msgid "`--posix'/`--traditional' overrides `--non-decimal-data'" -msgstr "" -"« --posix » et « --traditional » prennent le pas sur « --non-decimal-data »" +msgstr "« --posix » et « --traditional » prennent le pas sur « --non-decimal-data »" -#: main.c:566 +#: main.c:583 #, 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é" +msgstr "l'exécution de %s en mode setuid root peut être un problème de sécurité" -#: main.c:571 +#: main.c:588 msgid "`--posix' overrides `--characters-as-bytes'" msgstr "« --posix » prend le pas sur « --characters-as-bytes »" -#: main.c:630 +#: main.c:647 #, c-format msgid "can't set binary mode on stdin (%s)" msgstr "impossible d'activer le mode binaire sur stdin (%s)" -#: main.c:633 +#: main.c:650 #, c-format msgid "can't set binary mode on stdout (%s)" msgstr "impossible d'activer le mode binaire sur stdout (%s)" -#: main.c:635 +#: main.c:652 #, c-format msgid "can't set binary mode on stderr (%s)" msgstr "impossible d'activer le mode binaire sur stderr (%s)" -#: main.c:693 +#: main.c:710 msgid "no program text at all!" msgstr "aucun programme !" -#: main.c:779 +#: main.c:799 #, 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" +msgstr "Utilisation : %s [options GNU ou POSIX] -f fichier_prog [--] fichier ...\n" -#: main.c:781 +#: main.c:801 #, 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" +msgstr "Utilisation : %s [options GNU ou POSIX] [--] %cprogramme%c fichier ...\n" -#: main.c:786 +#: main.c:806 msgid "POSIX options:\t\tGNU long options: (standard)\n" msgstr "Options POSIX :\t\tOptions longues GNU : (standard)\n" -#: main.c:787 +#: main.c:807 msgid "\t-f progfile\t\t--file=progfile\n" msgstr "\t-f fichier_prog\t\t--file=fichier_prog\n" -#: main.c:788 +#: main.c:808 msgid "\t-F fs\t\t\t--field-separator=fs\n" msgstr "\t-F fs\t\t\t--field-separator=fs\n" -#: main.c:789 +#: main.c:809 msgid "\t-v var=val\t\t--assign=var=val\n" msgstr "\t-v var=valeur\t\t--assign=var=valeur\n" -#: main.c:790 +#: main.c:810 msgid "Short options:\t\tGNU long options: (extensions)\n" msgstr "Options POSIX :\t\tOptions longues GNU : (extensions)\n" -#: main.c:791 +#: main.c:811 msgid "\t-b\t\t\t--characters-as-bytes\n" msgstr "\t-b\t\t\t--characters-as-bytes\n" -#: main.c:792 +#: main.c:812 msgid "\t-c\t\t\t--traditional\n" msgstr "\t-c\t\t\t--traditional\n" -#: main.c:793 +#: main.c:813 msgid "\t-C\t\t\t--copyright\n" msgstr "\t-C\t\t\t--copyright\n" -#: main.c:794 +#: main.c:814 msgid "\t-d[file]\t\t--dump-variables[=file]\n" msgstr "\t-d[fichier]\t\t--dump-variables[=fichier]\n" -#: main.c:795 +#: main.c:815 msgid "\t-D[file]\t\t--debug[=file]\n" msgstr "\t-D[fichier]\t\t--debug[=fichier]\n" -#: main.c:796 +#: main.c:816 msgid "\t-e 'program-text'\t--source='program-text'\n" msgstr "\t-e 'programme'\t\t--source='programme'\n" -#: main.c:797 +#: main.c:817 msgid "\t-E file\t\t\t--exec=file\n" msgstr "\t-E fichier\t\t--exec=fichier\n" -#: main.c:798 +#: main.c:818 msgid "\t-g\t\t\t--gen-pot\n" msgstr "\t-g\t\t\t--gen-pot\n" -#: main.c:799 +#: main.c:819 msgid "\t-h\t\t\t--help\n" msgstr "\t-h\t\t\t--help\n" -#: main.c:800 +#: main.c:820 msgid "\t-i includefile\t\t--include=includefile\n" msgstr "\t-i fichier\t\t--include=fichier\n" -#: main.c:801 +#: main.c:821 msgid "\t-l library\t\t--load=library\n" msgstr "\t-l bibliothèque\t\t--load=bibliothèque\n" -#: main.c:802 +#: main.c:822 msgid "\t-L [fatal]\t\t--lint[=fatal]\n" msgstr "\t-L [fatal]\t\t--lint[=fatal]\n" -#: main.c:803 +#: 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:804 +#: main.c:824 msgid "\t-M\t\t\t--bignum\n" msgstr "\t-M\t\t\t--bignum\n" -#: main.c:805 +#: main.c:825 msgid "\t-N\t\t\t--use-lc-numeric\n" msgstr "\t-N\t\t\t--use-lc-numeric\n" -#: main.c:806 +#: main.c:826 msgid "\t-o[file]\t\t--pretty-print[=file]\n" msgstr "\t-o[fichier]\t\t--pretty-print[=fichier]\n" -#: main.c:807 +#: main.c:827 msgid "\t-O\t\t\t--optimize\n" msgstr "\t-O\t\t\t--optimize\n" -#: main.c:808 +#: main.c:828 msgid "\t-p[file]\t\t--profile[=file]\n" msgstr "\t-p[fichier]\t\t--profile[=fichier]\n" -#: main.c:809 +#: main.c:829 msgid "\t-P\t\t\t--posix\n" msgstr "\t-P\t\t\t--posix\n" -#: main.c:810 +#: main.c:830 msgid "\t-r\t\t\t--re-interval\n" msgstr "\t-r\t\t\t--re-interval\n" -#: main.c:811 +#: main.c:831 msgid "\t-S\t\t\t--sandbox\n" msgstr "\t-S\t\t\t--sandbox\n" -#: main.c:812 +#: main.c:832 msgid "\t-t\t\t\t--lint-old\n" msgstr "\t-t\t\t\t--lint-old\n" -#: main.c:813 +#: main.c:833 msgid "\t-V\t\t\t--version\n" msgstr "\t-V\t\t\t--version\n" -#: main.c:815 +#: main.c:835 msgid "\t-W nostalgia\t\t--nostalgia\n" msgstr "\t-W nostalgia\t\t--nostalgia\n" -#: main.c:818 +#: main.c:838 msgid "\t-Y\t\t--parsedebug\n" msgstr "\t-Y\t\t--parsedebug\n" @@ -3135,7 +3008,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:827 +#: main.c:847 msgid "" "\n" "To report bugs, see node `Bugs' in `gawk.info', which is\n" @@ -3150,7 +3023,7 @@ msgstr "" ".\n" "\n" -#: main.c:831 +#: main.c:851 msgid "" "gawk is a pattern scanning and processing language.\n" "By default it reads standard input and writes standard output.\n" @@ -3160,7 +3033,7 @@ msgstr "" "Par défaut, il lit l'entrée standard et écrit sur la sortie standard.\n" "\n" -#: main.c:835 +#: main.c:855 msgid "" "Examples:\n" "\tgawk '{ sum += $1 }; END { print sum }' file\n" @@ -3170,7 +3043,7 @@ msgstr "" "\tgawk '{ somme += $1 }; END { print somme }' fichier\n" "\tgawk -F: '{ print $1 }' /etc/passwd\n" -#: main.c:855 +#: main.c:880 #, c-format msgid "" "Copyright (C) 1989, 1991-%d Free Software Foundation.\n" @@ -3190,7 +3063,7 @@ msgstr "" "version ultérieure de votre choix.\n" "\n" -#: main.c:863 +#: main.c:888 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" @@ -3205,7 +3078,7 @@ msgstr "" "General Public License).\n" "\n" -#: main.c:869 +#: main.c:894 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" @@ -3214,16 +3087,16 @@ msgstr "" "(GNU General Public License) avec ce programme. Sinon, consultez\n" "http://www.gnu.org/licenses/.\n" -#: main.c:904 +#: main.c:931 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:1181 +#: main.c:1208 #, c-format msgid "unknown value for field spec: %d\n" msgstr "valeur inconnue pour la définition de champ : %d\n" -#: main.c:1279 +#: main.c:1306 #, c-format msgid "" "%s: `%s' argument to `-v' not in `var=value' form\n" @@ -3232,48 +3105,48 @@ msgstr "" "%s : « %s » l'argument de « -v » ne respecte pas la forme « var=valeur »\n" "\n" -#: main.c:1305 +#: main.c:1332 #, c-format msgid "`%s' is not a legal variable name" msgstr "« %s » n'est pas un nom de variable valide" -#: main.c:1308 +#: main.c:1335 #, 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:1312 +#: main.c:1339 #, c-format msgid "cannot use gawk builtin `%s' as variable name" msgstr "impossible d'utiliser le mot clef gawk « %s » comme variable" -#: main.c:1317 +#: main.c:1344 #, c-format msgid "cannot use function `%s' as variable name" msgstr "impossible d'utiliser la fonction « %s » comme variable" -#: main.c:1370 +#: main.c:1397 msgid "floating point exception" msgstr "exception du traitement en virgule flottante" -#: main.c:1377 +#: main.c:1404 msgid "fatal error: internal error" msgstr "fatal : erreur interne" -#: main.c:1392 +#: main.c:1419 msgid "fatal error: internal error: segfault" msgstr "fatal : erreur interne : erreur de segmentation" -#: main.c:1404 +#: main.c:1431 msgid "fatal error: internal error: stack overflow" msgstr "fatal : erreur interne : débordement de la pile" -#: main.c:1463 +#: main.c:1490 #, c-format msgid "no pre-opened fd %d" msgstr "aucun descripteur fd %d pré-ouvert" -#: main.c:1470 +#: main.c:1497 #, c-format msgid "could not pre-open /dev/null for fd %d" msgstr "impossible de pré-ouvrir /dev/null pour le descripteur fd %d" @@ -3317,8 +3190,7 @@ msgstr "%s : l'argument #%d a une valeur incorrecte %Rg, utilisation de 0" #: mpfr.c:857 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" +msgstr "%s : argument #%d : la valeur négative %Rg donnera des résultats inattendus" #: mpfr.c:863 msgid "%s: argument #%d fractional value %Rg will be truncated" @@ -3327,10 +3199,9 @@ msgstr "%s : argument #%d : la valeur non entière %Rg sera tronquée" #: mpfr.c:878 #, c-format msgid "%s: argument #%d negative value %Zd will give strange results" -msgstr "" -"%s : argument #%d : la valeur négative %Zd donnera des résultats inattendus" +msgstr "%s : argument #%d : la valeur négative %Zd donnera des résultats inattendus" -#: msg.c:61 +#: msg.c:68 #, c-format msgid "cmd. line:" msgstr "ligne de commande:" @@ -3354,12 +3225,8 @@ msgstr "aucun chiffre hexadécimal dans la séquence d'échappement « \\x » #: node.c:579 #, c-format -msgid "" -"hex escape \\x%.*s of %d characters probably not interpreted the way you " -"expect" -msgstr "" -"la séquence d'échappement hexa. \\x%.*s de %d caractères ne sera " -"probablement pas interprétée comme vous l'imaginez" +msgid "hex escape \\x%.*s of %d characters probably not interpreted the way you expect" +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 #, c-format @@ -3367,35 +3234,29 @@ msgid "escape sequence `\\%c' treated as plain `%c'" msgstr "séquence d'échappement « \\%c » traitée comme un simple « %c »" #: node.c:739 -msgid "" -"Invalid multibyte data detected. There may be a mismatch between your data " -"and your locale." -msgstr "" -"Données multioctets non valables détectées. Possible incohérence entre " -"données et paramètres régionaux (locale)." +msgid "Invalid multibyte data detected. There may be a mismatch between your data and your locale." +msgstr "Données multioctets non valables détectées. Possible incohérence entre données et paramètres régionaux (locale)." #: posix/gawkmisc.c:177 #, c-format msgid "%s %s `%s': could not get fd flags: (fcntl F_GETFD: %s)" -msgstr "" -"%s %s « %s » : impossible d'obtenir les drapeaux du fd : (fcntl F_GETFD: %s)" +msgstr "%s %s « %s » : impossible d'obtenir les drapeaux du fd : (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 »: impossible de positionner close-on-exec: (fcntl F_SETFD: %s)" +msgstr "%s %s « %s »: impossible de positionner close-on-exec: (fcntl F_SETFD: %s)" -#: profile.c:70 +#: profile.c:71 #, c-format msgid "could not open `%s' for writing: %s" msgstr "impossible d'ouvrir « %s » en écriture : %s" -#: profile.c:72 +#: profile.c:73 msgid "sending profile to standard error" msgstr "envoi du profil vers la sortie d'erreur standard" -#: profile.c:188 +#: profile.c:193 #, c-format msgid "" "\t# %s block(s)\n" @@ -3404,7 +3265,7 @@ msgstr "" "\t# Bloc(s) %s\n" "\n" -#: profile.c:193 +#: profile.c:198 #, c-format msgid "" "\t# Rule(s)\n" @@ -3413,16 +3274,16 @@ msgstr "" "\t# Règle(s)\n" "\n" -#: profile.c:267 +#: profile.c:272 #, c-format msgid "internal error: %s with null vname" msgstr "erreur interne : %s avec un vname nul" -#: profile.c:530 +#: profile.c:537 msgid "internal error: builtin with null fname" msgstr "erreur interne : fonction interne avec un fname nul" -#: profile.c:942 +#: profile.c:949 #, c-format msgid "" "\t# Loaded extensions (-l and/or @load)\n" @@ -3431,12 +3292,12 @@ msgstr "" "\t# Extensions chargées (-l ou @load)\n" "\n" -#: profile.c:965 +#: profile.c:972 #, c-format msgid "\t# gawk profile, created %s\n" msgstr "\t# profile gawk, créé %s\n" -#: profile.c:1351 +#: profile.c:1475 #, c-format msgid "" "\n" @@ -3445,22 +3306,15 @@ msgstr "" "\n" "\t# Fonctions, par ordre alphabétique\n" -#: profile.c:1389 +#: profile.c:1513 #, c-format msgid "redir2str: unknown redirection type %d" msgstr "redir2str : type de redirection %d inconnu" -#: re.c:583 -#, c-format -msgid "range of the form `[%c-%c]' is locale dependent" -msgstr "les plages « [%c-%c] » sont dépendantes des paramètres régionaux" - -#: re.c:610 +#: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" -msgstr "" -"le composant d'expression rationnelle « %.*s » devrait probablement être " -"« [%.*s] »" +msgstr "le composant d'expression rationnelle « %.*s » devrait probablement être « [%.*s] »" #: regcomp.c:131 msgid "Success" @@ -3526,6 +3380,9 @@ msgstr ") ou \\) sans correspondance" msgid "No previous regular expression" msgstr "Aucune expression rationnelle précédente" -#: symbol.c:740 +#: symbol.c:741 msgid "can not pop main context" msgstr "impossible de rétablir (pop) le contexte principal (main)" + +#~ 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/it.gmo b/po/it.gmo index 2cb0e347..a81bb172 100644 Binary files a/po/it.gmo and b/po/it.gmo differ diff --git a/po/it.po b/po/it.po index 5e2c5a1b..bd4b64c7 100644 --- a/po/it.po +++ b/po/it.po @@ -6,8 +6,8 @@ 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: 2013-05-09 16:05+0300\n" -"PO-Revision-Date: 2013-05-10 11:52+0100\n" +"POT-Creation-Date: 2014-01-15 10:40+0100\n" +"PO-Revision-Date: 2014-01-15 10:39+0100\n" "Last-Translator: Antonio Colombo \n" "Language-Team: Italian \n" "Language: it\n" @@ -15,92 +15,92 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8-bit\n" -#: array.c:254 +#: array.c:256 #, c-format msgid "from %s" msgstr "da %s" -#: array.c:354 +#: array.c:357 msgid "attempt to use a scalar value as array" msgstr "tentativo di usare valore scalare come vettore" -#: array.c:356 +#: array.c:359 #, c-format msgid "attempt to use scalar parameter `%s' as an array" msgstr "tentativo di usare il parametro scalare `%s' come un vettore" -#: array.c:359 +#: array.c:362 #, c-format msgid "attempt to use scalar `%s' as an array" msgstr "tentativo di usare scalare '%s' come vettore" -#: array.c:406 array.c:573 builtin.c:85 builtin.c:1591 builtin.c:1637 -#: builtin.c:1650 builtin.c:2078 builtin.c:2092 eval.c:1121 eval.c:1125 -#: eval.c:1524 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" msgstr "tentativo di usare vettore `%s' in un contesto scalare" -#: array.c:580 +#: array.c:583 #, c-format msgid "delete: index `%s' not in array `%s'" msgstr "delete: indice `%s' non presente nel vettore `%s'" -#: array.c:594 +#: array.c:597 #, c-format msgid "attempt to use scalar `%s[\"%.*s\"]' as an array" msgstr "tentativo di usare scalare`%s[\"%.*s\"]' come vettore" -#: array.c:773 +#: array.c:776 msgid "adump: first argument not an array" msgstr "adump: primo argomento non-vettoriale" -#: array.c:812 +#: array.c:815 msgid "asort: second argument not an array" msgstr "asort: secondo argomento non-vettoriale" -#: array.c:813 +#: array.c:816 msgid "asorti: second argument not an array" msgstr "asorti: secondo argomento non-vettoriale" -#: array.c:820 +#: array.c:823 msgid "asort: first argument not an array" msgstr "asort: primo argomento non-vettoriale" -#: array.c:821 +#: array.c:824 msgid "asorti: first argument not an array" msgstr "asorti: primo argomento non-vettoriale" -#: array.c:828 +#: array.c:831 msgid "asort: cannot use a subarray of first arg for second arg" msgstr "" "asort: non consentito un secondo argomento che sia un sottovettore del primo " "argomento" -#: array.c:829 +#: array.c:832 msgid "asorti: cannot use a subarray of first arg for second arg" msgstr "" "asorti: non consentito un secondo argomento che sia un sottovettore del " "primo argomento" -#: array.c:834 +#: array.c:837 msgid "asort: cannot use a subarray of second arg for first arg" msgstr "" "asort: non consentito un primo argomento che sia un sottovettore del secondo " "argomento" -#: array.c:835 +#: array.c:838 msgid "asorti: cannot use a subarray of second arg for first arg" msgstr "" "asorti: non consentito un primo argomento che sia un sottovettore del " "secondo argomento" -#: array.c:1309 +#: array.c:1314 #, c-format msgid "`%s' is invalid as a function name" msgstr "`%s' non è un nome funzione valido" -#: array.c:1313 +#: array.c:1318 #, c-format msgid "sort comparison function `%s' is not defined" msgstr "funzione di confronto del sort `%s' non definita" @@ -236,11 +236,11 @@ msgstr "" msgid "invalid subscript expression" msgstr "espressione indice invalida" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:119 +#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "attenzione: " -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:151 +#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "fatale: " @@ -248,8 +248,8 @@ msgstr "fatale: " msgid "unexpected newline or end of string" msgstr "carattere 'a capo' o fine stringa non previsti" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:517 debug.c:533 -#: debug.c:2792 debug.c:5040 +#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 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)" @@ -259,7 +259,7 @@ msgstr "non riesco ad aprire file sorgente `%s' in lettura (%s)" msgid "can't open shared library `%s' for reading (%s)" msgstr "non riesco ad aprire shared library `%s' in lettura (%s)" -#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:130 debug.c:5191 +#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "ragione indeterminata" @@ -438,7 +438,7 @@ msgstr "index: espressione regolare come secondo argomento non consentita" msgid "function `%s': parameter `%s' shadows global variable" msgstr "funzione `%s': parametro `%s' nasconde variabile globale" -#: awkgram.y:4102 debug.c:4021 debug.c:4064 debug.c:5189 +#: awkgram.y:4102 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)" @@ -483,24 +483,24 @@ msgstr "" msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d" msgstr "funzione `%s': parametro #%d, `%s', duplica parametro #%d" -#: awkgram.y:4366 awkgram.y:4372 +#: awkgram.y:4359 awkgram.y:4365 #, c-format msgid "function `%s' called but never defined" msgstr "funzione `%s' chiamata ma mai definita" -#: awkgram.y:4376 +#: awkgram.y:4369 #, c-format msgid "function `%s' defined but never called directly" msgstr "funzione `%s' definita ma mai chiamata direttamente" -#: awkgram.y:4408 +#: awkgram.y:4401 #, 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:4467 +#: awkgram.y:4460 #, c-format msgid "" "function `%s' called with space between name and `(',\n" @@ -509,234 +509,246 @@ msgstr "" "funzione `%s' chiamata con spazio tra il nome e `(',\n" "o usata come variabile o vettore" -#: awkgram.y:4703 +#: awkgram.y:4696 msgid "division by zero attempted" msgstr "tentativo di dividere per zero" -#: awkgram.y:4712 +#: awkgram.y:4705 #, c-format msgid "division by zero attempted in `%%'" msgstr "tentativo di dividere per zero in `%%'" -#: builtin.c:128 +#: awkgram.y:5025 +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:5028 +#, c-format +msgid "invalid target of assignment (opcode %s)" +msgstr "destinazione di assegnazione non valida (codice operativo %s)" + +#: builtin.c:133 #, c-format msgid "%s to \"%s\" failed (%s)" msgstr "%s a \"%s\" non riuscita (%s)" -#: builtin.c:129 +#: builtin.c:134 msgid "standard output" msgstr "standard output" -#: builtin.c:143 +#: builtin.c:148 msgid "exp: received non-numeric argument" msgstr "exp: argomento non-numerico" -#: builtin.c:149 +#: builtin.c:154 #, c-format msgid "exp: argument %g is out of range" msgstr "exp: argomento %g fuori intervallo" -#: builtin.c:224 +#: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" msgstr "" "fflush: non riesco a scaricare: `pipe' `%s' aperta in lettura, non in " "scrittura" -#: builtin.c:227 +#: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" msgstr "" "fflush: non riesco a scaricare: file `%s' aperto in lettura, non in scrittura" -#: builtin.c:239 +#: builtin.c:244 #, c-format 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:357 +#: builtin.c:362 msgid "index: received non-string first argument" msgstr "index: il primo argomento non è una stringa" -#: builtin.c:359 +#: builtin.c:364 msgid "index: received non-string second argument" msgstr "index: il secondo argomento non è una stringa" -#: builtin.c:483 mpfr.c:757 +#: builtin.c:488 mpfr.c:757 msgid "int: received non-numeric argument" msgstr "int: argomento non-numerico" -#: builtin.c:520 +#: builtin.c:525 msgid "length: received array argument" msgstr "length: l'argomento fornito è un vettore" -#: builtin.c:523 +#: builtin.c:528 msgid "`length(array)' is a gawk extension" msgstr "`length(array)' è un'estensione gawk" -#: builtin.c:539 +#: builtin.c:544 msgid "length: received non-string argument" msgstr "length: l'argomento non è una stringa" -#: builtin.c:570 +#: builtin.c:575 msgid "log: received non-numeric argument" msgstr "log: argomento non-numerico" -#: builtin.c:573 +#: builtin.c:578 #, c-format msgid "log: received negative argument %g" msgstr "log: argomento negativo %g" -#: builtin.c:771 builtin.c:776 +#: builtin.c:776 builtin.c:781 msgid "fatal: must use `count$' on all formats or none" msgstr "fatale: `count$' va usato per ogni `format' o per nessuno" -#: builtin.c:846 +#: builtin.c:851 #, c-format msgid "field width is ignored for `%%' specifier" msgstr "larghezza campo ignorata per la specifica `%%'" -#: builtin.c:848 +#: builtin.c:853 #, c-format msgid "precision is ignored for `%%' specifier" msgstr "precisione ignorata per la specifica `%%'" -#: builtin.c:850 +#: builtin.c:855 #, c-format msgid "field width and precision are ignored for `%%' specifier" msgstr "larghezza campo e precisone ignorate per la specifica `%%'" -#: builtin.c:901 +#: builtin.c:906 msgid "fatal: `$' is not permitted in awk formats" msgstr "fatale: operatore `$' non consentito nei `format' awk" -#: builtin.c:910 +#: builtin.c:915 msgid "fatal: arg count with `$' must be > 0" msgstr "fatale: numero argomenti con `$' dev'essere > 0" -#: builtin.c:914 +#: builtin.c:919 #, 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:918 +#: builtin.c:923 msgid "fatal: `$' not permitted after period in format" msgstr "fatale: `$' non consentito dopo il punto in un `format'" -#: builtin.c:934 +#: builtin.c:939 msgid "fatal: no `$' supplied for positional field width or precision" msgstr "fatale: manca `$' per i campi posizionali larghezza o precisione" -#: builtin.c:1006 +#: builtin.c:1011 msgid "`l' is meaningless in awk formats; ignored" msgstr "`l' non ha senso nei `format' awk; ignorato" -#: builtin.c:1010 +#: builtin.c:1015 msgid "fatal: `l' is not permitted in POSIX awk formats" msgstr "fatale: `l' non consentito nei `format' POSIX awk" -#: builtin.c:1023 +#: builtin.c:1028 msgid "`L' is meaningless in awk formats; ignored" msgstr "`L' non ha senso nei `format' awk; ignorato" -#: builtin.c:1027 +#: builtin.c:1032 msgid "fatal: `L' is not permitted in POSIX awk formats" msgstr "`L' non ha senso nei `format' awk; ignorato" -#: builtin.c:1040 +#: builtin.c:1045 msgid "`h' is meaningless in awk formats; ignored" msgstr "`h' non ha senso nei `format' awk; ignorato" -#: builtin.c:1044 +#: builtin.c:1049 msgid "fatal: `h' is not permitted in POSIX awk formats" msgstr "fatale: `h' non consentito nei `format' POSIX awk" -#: builtin.c:1439 +#: builtin.c:1447 #, 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'" -#: builtin.c:1537 +#: builtin.c:1545 #, c-format msgid "ignoring unknown format specifier character `%c': no argument converted" msgstr "" "carattere di `format' sconosciuto `%c' ignorato: nessun argomento convertito" -#: builtin.c:1542 +#: builtin.c:1550 msgid "fatal: not enough arguments to satisfy format string" msgstr "" "fatale: argomenti in numero minore di quelli richiesti dalla stringa di " "`format'" -#: builtin.c:1544 +#: builtin.c:1552 msgid "^ ran out for this one" msgstr "^ esauriti a questo punto" -#: builtin.c:1551 +#: builtin.c:1559 msgid "[s]printf: format specifier does not have control letter" msgstr "[s]printf: specifica di `format' senza un carattere di controllo" -#: builtin.c:1554 +#: builtin.c:1562 msgid "too many arguments supplied for format string" msgstr "troppi argomenti specificati per questa stringa di `format'" -#: builtin.c:1610 +#: builtin.c:1618 msgid "sprintf: no arguments" msgstr "sprintf: nessun argomento" -#: builtin.c:1633 builtin.c:1644 +#: builtin.c:1641 builtin.c:1652 msgid "printf: no arguments" msgstr "printf: nessun argomento" -#: builtin.c:1687 +#: builtin.c:1695 msgid "sqrt: received non-numeric argument" msgstr "sqrt: argomento non-numerico" -#: builtin.c:1691 +#: builtin.c:1699 #, c-format msgid "sqrt: called with negative argument %g" msgstr "sqrt: chiamata con argomento negativo %g" -#: builtin.c:1722 +#: builtin.c:1730 #, c-format msgid "substr: length %g is not >= 1" msgstr "substr: lunghezza %g non >= 1" -#: builtin.c:1724 +#: builtin.c:1732 #, c-format msgid "substr: length %g is not >= 0" msgstr "substr: lunghezza %g non >= 0" -#: builtin.c:1731 +#: builtin.c:1739 #, c-format msgid "substr: non-integer length %g will be truncated" msgstr "substr: lunghezza non intera %g: sarà troncata" -#: builtin.c:1736 +#: builtin.c:1744 #, 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:1748 +#: builtin.c:1756 #, c-format msgid "substr: start index %g is invalid, using 1" msgstr "substr: indice di partenza %g non valido, uso 1" -#: builtin.c:1753 +#: builtin.c:1761 #, c-format msgid "substr: non-integer start index %g will be truncated" msgstr "substr: indice di partenza non intero %g: sarà troncato" -#: builtin.c:1778 +#: builtin.c:1786 msgid "substr: source string is zero length" msgstr "substr: stringa di partenza lunga zero" -#: builtin.c:1794 +#: builtin.c:1802 #, 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:1802 +#: builtin.c:1810 #, c-format msgid "" "substr: length %g at start index %g exceeds length of first argument (%lu)" @@ -744,187 +756,187 @@ msgstr "" "substr: lunghezza %g all'indice di partenza %g supera la lunghezza del primo " "argomento (%lu)" -#: builtin.c:1876 +#: builtin.c:1884 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" msgstr "" "strftime: il valore del `format' in PROCINFO[\"strftime\"] è di tipo numerico" -#: builtin.c:1899 +#: builtin.c:1907 msgid "strftime: received non-numeric second argument" msgstr "strftime: secondo argomento non-numerico" -#: builtin.c:1903 +#: builtin.c:1911 msgid "strftime: second argument less than 0 or too big for time_t" msgstr "strftime: secondo argomento < 0 o troppo elevato per time_t" -#: builtin.c:1910 +#: builtin.c:1918 msgid "strftime: received non-string first argument" msgstr "strftime: il primo argomento non è una stringa" -#: builtin.c:1917 +#: builtin.c:1925 msgid "strftime: received empty format string" msgstr "strftime: `format' è una stringa nulla" -#: builtin.c:1983 +#: builtin.c:1991 msgid "mktime: received non-string argument" msgstr "mktime: l'argomento non è una stringa" -#: builtin.c:2000 +#: builtin.c:2008 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:2035 +#: builtin.c:2043 msgid "'system' function not allowed in sandbox mode" msgstr "funzione 'system' non consentita in modo `sandbox'" -#: builtin.c:2040 +#: builtin.c:2048 msgid "system: received non-string argument" msgstr "system: l'argomento non è una stringa" -#: builtin.c:2160 +#: builtin.c:2168 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "riferimento a variabile non inizializzata `$%d'" -#: builtin.c:2247 +#: builtin.c:2255 msgid "tolower: received non-string argument" msgstr "tolower: l'argomento non è una stringa" -#: builtin.c:2281 +#: builtin.c:2289 msgid "toupper: received non-string argument" msgstr "toupper: l'argomento non è una stringa" -#: builtin.c:2317 mpfr.c:672 +#: builtin.c:2325 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2: primo argomento non-numerico" -#: builtin.c:2319 mpfr.c:674 +#: builtin.c:2327 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2: secondo argomento non-numerico" -#: builtin.c:2338 +#: builtin.c:2346 msgid "sin: received non-numeric argument" msgstr "sin: argomento non-numerico" -#: builtin.c:2354 +#: builtin.c:2362 msgid "cos: received non-numeric argument" msgstr "cos: argomento non-numerico" -#: builtin.c:2407 mpfr.c:1156 +#: builtin.c:2415 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand: argomento non-numerico" -#: builtin.c:2438 +#: builtin.c:2446 msgid "match: third argument is not an array" msgstr "match: terzo argomento non-vettoriale" -#: builtin.c:2710 +#: builtin.c:2718 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub: il terzo argomento è 0, trattato come 1" -#: builtin.c:3003 +#: builtin.c:3014 msgid "lshift: received non-numeric first argument" msgstr "lshift: primo argomento non-numerico" -#: builtin.c:3005 +#: builtin.c:3016 msgid "lshift: received non-numeric second argument" msgstr "lshift: secondo argomento non-numerico" -#: builtin.c:3011 +#: builtin.c:3022 #, c-format msgid "lshift(%f, %f): negative values will give strange results" msgstr "lshift(%f, %f): valori negativi daranno risultati strani" -#: builtin.c:3013 +#: builtin.c:3024 #, c-format msgid "lshift(%f, %f): fractional values will be truncated" msgstr "lshift(%f, %f): valori decimali saranno troncati" -#: builtin.c:3015 +#: builtin.c:3026 #, 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:3040 +#: builtin.c:3051 msgid "rshift: received non-numeric first argument" msgstr "rshift: primo argomento ricevuto non-numerico" -#: builtin.c:3042 +#: builtin.c:3053 msgid "rshift: received non-numeric second argument" msgstr "rshift: secondo argomento non-numerico" -#: builtin.c:3048 +#: builtin.c:3059 #, c-format msgid "rshift(%f, %f): negative values will give strange results" msgstr "rshift(%f, %f): valori negativi daranno risultati strani" -#: builtin.c:3050 +#: builtin.c:3061 #, c-format msgid "rshift(%f, %f): fractional values will be truncated" msgstr "rshift(%f, %f): valori decimali saranno troncati" -#: builtin.c:3052 +#: builtin.c:3063 #, 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:3077 mpfr.c:968 +#: builtin.c:3088 mpfr.c:968 msgid "and: called with less than two arguments" msgstr "and: chiamata con meno di due argomenti" -#: builtin.c:3082 +#: builtin.c:3093 #, c-format msgid "and: argument %d is non-numeric" msgstr "and: argomento %d non-numerico" -#: builtin.c:3086 +#: builtin.c:3097 #, 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:3109 mpfr.c:1000 +#: builtin.c:3120 mpfr.c:1000 msgid "or: called with less than two arguments" msgstr "or: chiamata con meno di due argomenti" -#: builtin.c:3114 +#: builtin.c:3125 #, c-format msgid "or: argument %d is non-numeric" msgstr "or: argomento %d non-numerico" -#: builtin.c:3118 +#: builtin.c:3129 #, 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:3140 mpfr.c:1031 +#: builtin.c:3151 mpfr.c:1031 msgid "xor: called with less than two arguments" msgstr "xor: chiamata con meno di due argomenti" -#: builtin.c:3146 +#: builtin.c:3157 #, c-format msgid "xor: argument %d is non-numeric" msgstr "xor: argomento %d non-numerico" -#: builtin.c:3150 +#: builtin.c:3161 #, 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:3175 mpfr.c:787 +#: builtin.c:3186 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl: argomento non-numerico" -#: builtin.c:3181 +#: builtin.c:3192 #, c-format msgid "compl(%f): negative value will give strange results" msgstr "compl(%f): valore negativo, darà risultati strani" -#: builtin.c:3183 +#: builtin.c:3194 #, c-format msgid "compl(%f): fractional value will be truncated" msgstr "compl(%f): valori decimali saranno troncati" -#: builtin.c:3352 +#: builtin.c:3363 #, c-format msgid "dcgettext: `%s' is not a valid locale category" msgstr "dcgettext: `%s' non è una categoria `locale' valida" @@ -1231,7 +1243,7 @@ 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:395 msg.c:128 +#: command.y:1011 debug.c:401 msg.c:135 #, c-format msgid "error: " msgstr "errore: " @@ -1269,97 +1281,97 @@ msgstr "carattere non valido" msgid "undefined command: %s\n" msgstr "comando non definito: %s\n" -#: debug.c:246 +#: debug.c:252 msgid "set or show the number of lines to keep in history file." msgstr "" "imposta o mostra il numero di righe da tenere nel file che contiene la " "storia comandi." -#: debug.c:248 +#: debug.c:254 msgid "set or show the list command window size." msgstr "imposta o mostra dimensioni finestra lista comandi" -#: debug.c:250 +#: debug.c:256 msgid "set or show gawk output file." msgstr "imposta o mostra file di outpu gawk" -#: debug.c:252 +#: debug.c:258 msgid "set or show debugger prompt." msgstr "imposta o mostra prompt di debug" -#: debug.c:254 +#: debug.c:260 msgid "(un)set or show saving of command history (value=on|off)." msgstr "(dis)imposta o mostra salvataggio storia comandi (valore=on|off)." -#: debug.c:256 +#: debug.c:262 msgid "(un)set or show saving of options (value=on|off)." msgstr "(dis)imposta o mostra salvataggio opzioni (valore=on|off)." -#: debug.c:258 +#: debug.c:264 msgid "(un)set or show instruction tracing (value=on|off)." msgstr "(dis)imposta o mostra tracciamento istruzioni (valore=on|off)." -#: debug.c:339 +#: debug.c:345 msgid "program not running." msgstr "programma non in esecuzione." -#: debug.c:442 debug.c:597 +#: debug.c:448 debug.c:606 #, c-format msgid "can't read source file `%s' (%s)" msgstr "non riesco a leggere file sorgente `%s' (%s)" -#: debug.c:447 +#: debug.c:453 #, c-format msgid "source file `%s' is empty.\n" msgstr "file sorgente `%s' vuoto.\n" -#: debug.c:474 +#: debug.c:480 msgid "no current source file." msgstr "file sorgente non disponibile." -#: debug.c:499 +#: debug.c:505 #, c-format msgid "cannot find source file named `%s' (%s)" msgstr "non riesco a leggere file di nome `%s' (%s)" -#: debug.c:523 +#: debug.c:529 #, c-format msgid "WARNING: source file `%s' modified since program compilation.\n" msgstr "" "ATTENZIONE: file sorgente `%s' modificato dopo la compilazione del " "programma.\n" -#: debug.c:542 +#: debug.c:551 #, c-format msgid "line number %d out of range; `%s' has %d lines" msgstr "numero riga %d non ammesso; `%s' ha %d righe" -#: debug.c:602 +#: debug.c:611 #, c-format msgid "unexpected eof while reading file `%s', line %d" msgstr "fine-file inattesa durante lettura file `%s', riga %d" -#: debug.c:611 +#: debug.c:620 #, c-format msgid "source file `%s' modified since start of program execution" msgstr "file sorgente `%s' modificato dopo l'inizio esecuzione del programma." -#: debug.c:723 +#: debug.c:732 #, c-format msgid "Current source file: %s\n" msgstr "File sorgente corrente: %s\n" -#: debug.c:724 +#: debug.c:733 #, c-format msgid "Number of lines: %d\n" msgstr "Numero di righe: %d\n" -#: debug.c:731 +#: debug.c:740 #, c-format msgid "Source file (lines): %s (%d)\n" msgstr "File sorgente (righe): %s (%d)\n" -#: debug.c:745 +#: debug.c:754 msgid "" "Number Disp Enabled Location\n" "\n" @@ -1367,54 +1379,54 @@ msgstr "" "Numero Disp Abilit. Posizione\n" "\n" -#: debug.c:756 +#: debug.c:765 #, c-format msgid "\tno of hits = %ld\n" msgstr "\tn. di occorrenze = %ld\n" -#: debug.c:758 +#: debug.c:767 #, c-format msgid "\tignore next %ld hit(s)\n" msgstr "\tignora prossime %ld occorrenze\n" -#: debug.c:760 debug.c:900 +#: debug.c:769 debug.c:909 #, c-format msgid "\tstop condition: %s\n" msgstr "\tcondizione per stop: %s\n" -#: debug.c:762 debug.c:902 +#: debug.c:771 debug.c:911 msgid "\tcommands:\n" msgstr "\tcomandi:\n" -#: debug.c:784 +#: debug.c:793 #, c-format msgid "Current frame: " msgstr "Elemento corrente: " -#: debug.c:787 +#: debug.c:796 #, c-format msgid "Called by frame: " msgstr "Chiamato da elemento: " -#: debug.c:791 +#: debug.c:800 #, c-format msgid "Caller of frame: " msgstr "Chiamante di elemento: " -#: debug.c:809 +#: debug.c:818 #, c-format msgid "None in main().\n" msgstr "Assente in main().\n" -#: debug.c:839 +#: debug.c:848 msgid "No arguments.\n" msgstr "Nessun argomento.\n" -#: debug.c:840 +#: debug.c:849 msgid "No locals.\n" msgstr "Nessun `locale'.\n" -#: debug.c:848 +#: debug.c:857 msgid "" "All defined variables:\n" "\n" @@ -1422,7 +1434,7 @@ msgstr "" "Tutte le variabili definite:\n" "\n" -#: debug.c:858 +#: debug.c:867 msgid "" "All defined functions:\n" "\n" @@ -1430,7 +1442,7 @@ msgstr "" "Tutte le funzioni definite:\n" "\n" -#: debug.c:877 +#: debug.c:886 msgid "" "Auto-display variables:\n" "\n" @@ -1438,7 +1450,7 @@ msgstr "" "Auto-visualizzazione variabili:\n" "\n" -#: debug.c:880 +#: debug.c:889 msgid "" "Watch variables:\n" "\n" @@ -1446,362 +1458,362 @@ msgstr "" "Variabili Watch [da tenere sott'occhio]:\n" "\n" -#: debug.c:1020 +#: debug.c:1029 #, c-format msgid "no symbol `%s' in current context\n" msgstr "nessun simbolo `%s' nel contesto corrente\n" -#: debug.c:1032 debug.c:1418 +#: debug.c:1041 debug.c:1427 #, c-format msgid "`%s' is not an array\n" msgstr "`%s' non è un vettore\n" -#: debug.c:1046 +#: debug.c:1055 #, c-format msgid "$%ld = uninitialized field\n" msgstr "%ld = variabile non inizializzata\n" -#: debug.c:1067 +#: debug.c:1076 #, c-format msgid "array `%s' is empty\n" msgstr "vettore `%s' vuoto\n" -#: debug.c:1110 debug.c:1162 +#: debug.c:1119 debug.c:1171 #, c-format msgid "[\"%s\"] not in array `%s'\n" msgstr "[\"%s\"] non presente nel vettore `%s\n" -#: debug.c:1166 +#: debug.c:1175 #, c-format msgid "`%s[\"%s\"]' is not an array\n" msgstr "`%s[\"%s\"]' non è un vettore\n" -#: debug.c:1227 debug.c:4949 +#: debug.c:1236 debug.c:4964 #, c-format msgid "`%s' is not a scalar variable" msgstr "`%s' non è una variabile scalare" -#: debug.c:1249 debug.c:4979 +#: debug.c:1258 debug.c:4994 #, c-format msgid "attempt to use array `%s[\"%s\"]' in a scalar context" msgstr "tentativo di usare vettore `%s[\"%s\"]' in un contesto scalare" -#: debug.c:1271 debug.c:4990 +#: debug.c:1280 debug.c:5005 #, c-format msgid "attempt to use scalar `%s[\"%s\"]' as array" msgstr "tentativo di usare scalare `%s[\"%s\"]' come vettore" -#: debug.c:1414 +#: debug.c:1423 #, c-format msgid "`%s' is a function" msgstr "`%s' è una funzione" -#: debug.c:1456 +#: debug.c:1465 #, c-format msgid "watchpoint %d is unconditional\n" msgstr "watchpoint %d non soggetto a condizioni\n" -#: debug.c:1490 +#: debug.c:1499 #, c-format msgid "No display item numbered %ld" msgstr "Nessun elemento numerato da visualizzare %ld" -#: debug.c:1493 +#: debug.c:1502 #, c-format msgid "No watch item numbered %ld" msgstr "Nessun elemento numerato watch [da sorvegliare] da visualizzare %ld" -#: debug.c:1519 +#: debug.c:1528 #, c-format msgid "%d: [\"%s\"] not in array `%s'\n" msgstr "%d: [\"%s\"] non presente nel vettore `%s'\n" -#: debug.c:1758 +#: debug.c:1767 msgid "attempt to use scalar value as array" msgstr "tentativo di usare valore scalare come vettore" -#: debug.c:1847 +#: debug.c:1856 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" msgstr "Watchpoint %d cancellato perché il parametro è fuori intervallo.\n" -#: debug.c:1858 +#: debug.c:1867 #, c-format msgid "Display %d deleted because parameter is out of scope.\n" msgstr "" "Visualizzazione %d cancellata perché il parametro è fuori intervallo.\n" -#: debug.c:1891 +#: debug.c:1900 #, c-format msgid " in file `%s', line %d\n" msgstr " nel file `%s', riga %d\n" -#: debug.c:1912 +#: debug.c:1921 #, c-format msgid " at `%s':%d" msgstr " a `%s':%d" -#: debug.c:1928 debug.c:1991 +#: debug.c:1937 debug.c:2000 #, c-format msgid "#%ld\tin " msgstr "#%ld\tin " -#: debug.c:1965 +#: debug.c:1974 #, c-format msgid "More stack frames follow ...\n" msgstr "Ulteriori elementi stack seguono...\n" -#: debug.c:2008 +#: debug.c:2017 msgid "invalid frame number" msgstr "numero elemento non valido" -#: debug.c:2180 +#: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" msgstr "" "Nota: breakpoint %d (abilitato, ignora prossimi %ld passaggi), anche " "impostato a %s:%d" -#: debug.c:2187 +#: debug.c:2207 #, c-format msgid "Note: breakpoint %d (enabled), also set at %s:%d" msgstr "Nota: breakpoint %d (abilitato), anche impostato a %s:%d" -#: debug.c:2194 +#: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" msgstr "" "Nota: breakpoint %d (disabilitato, ignora prossimi %ld passaggi), anche " "impostato a %s:%d" -#: debug.c:2201 +#: debug.c:2221 #, c-format msgid "Note: breakpoint %d (disabled), also set at %s:%d" msgstr "Nota: breakpoint %d (disabilitato), anche impostato a %s:%d" -#: debug.c:2218 +#: debug.c:2238 #, c-format msgid "Breakpoint %d set at file `%s', line %d\n" msgstr "Breakpoint %d impostato al file `%s', riga %d\n" -#: debug.c:2320 +#: debug.c:2340 #, c-format msgid "Can't set breakpoint in file `%s'\n" msgstr "Non riesco a impostare breakpoint nel file `%s'\n" -#: debug.c:2349 debug.c:2472 debug.c:3330 +#: debug.c:2369 debug.c:2492 debug.c:3350 #, c-format msgid "line number %d in file `%s' out of range" msgstr "numero riga %d nel file `%s' fuori intervallo" -#: debug.c:2353 +#: debug.c:2373 #, c-format msgid "Can't find rule!!!\n" msgstr "Non riesco a trovare la regola!!!\n" -#: debug.c:2355 +#: debug.c:2375 #, c-format msgid "Can't set breakpoint at `%s':%d\n" msgstr "Non riesco a impostare breakpoint a `%s':%d\n" -#: debug.c:2367 +#: debug.c:2387 #, c-format msgid "Can't set breakpoint in function `%s'\n" msgstr "Non riesco a impostare breakpoint nella funzione `%s'\n" -#: debug.c:2383 +#: debug.c:2403 #, c-format msgid "breakpoint %d set at file `%s', line %d is unconditional\n" msgstr "breakpoint %d impostato al file `%s', riga %d è senza condizioni\n" -#: debug.c:2488 debug.c:2510 +#: debug.c:2508 debug.c:2530 #, c-format msgid "Deleted breakpoint %d" msgstr "Cancellato breakpoint %d" -#: debug.c:2494 +#: debug.c:2514 #, c-format msgid "No breakpoint(s) at entry to function `%s'\n" msgstr "No breakpoint all'entrata nella funzione `%s'\n" -#: debug.c:2521 +#: debug.c:2541 #, c-format msgid "No breakpoint at file `%s', line #%d\n" msgstr "No breakpoint al file `%s', riga #%d\n" -#: debug.c:2576 debug.c:2617 debug.c:2637 debug.c:2680 +#: debug.c:2596 debug.c:2637 debug.c:2657 debug.c:2700 msgid "invalid breakpoint number" msgstr "numero breakpoint non valido" -#: debug.c:2592 +#: debug.c:2612 msgid "Delete all breakpoints? (y or n) " msgstr "Cancello tutti i breakpoint? (y oppure n) " -#: debug.c:2593 debug.c:2903 debug.c:2956 +#: debug.c:2613 debug.c:2923 debug.c:2976 msgid "y" msgstr "y" -#: debug.c:2642 +#: debug.c:2662 #, c-format msgid "Will ignore next %ld crossing(s) of breakpoint %d.\n" msgstr "Prossimi %ld passaggi dal breakpoint %d ignorati.\n" -#: debug.c:2646 +#: debug.c:2666 #, c-format msgid "Will stop next time breakpoint %d is reached.\n" msgstr "Farò uno stop al prossimo passaggio dal breakpoint %d.\n" -#: debug.c:2763 +#: debug.c:2783 #, c-format msgid "Can only debug programs provided with the `-f' option.\n" msgstr "Debug possibile solo per programmi con opzione `-f' specificata.\n" -#: debug.c:2888 +#: debug.c:2908 #, c-format msgid "Failed to restart debugger" msgstr "Non sono riuscito a far ripartire il debugger" -#: debug.c:2902 +#: debug.c:2922 msgid "Program already running. Restart from beginning (y/n)? " msgstr "Programma già in esecuzione. Lo faccio ripartire dall'inizio (y/n)? " -#: debug.c:2906 +#: debug.c:2926 #, c-format msgid "Program not restarted\n" msgstr "Programma non fatto ripartire\n" -#: debug.c:2916 +#: debug.c:2936 #, c-format msgid "error: cannot restart, operation not allowed\n" msgstr "errore: non riesco a far ripartire, operazione non consentita\n" -#: debug.c:2922 +#: debug.c:2942 #, c-format msgid "error (%s): cannot restart, ignoring rest of the commands\n" msgstr "errore (%s): non riesco a far ripartire, ignoro i comandi rimanenti\n" -#: debug.c:2930 +#: debug.c:2950 #, c-format msgid "Starting program: \n" msgstr "Partenza del programma: \n" -#: debug.c:2939 +#: debug.c:2959 #, c-format msgid "Program exited %s with exit value: %d\n" msgstr "Programma %s eseguit, valore in uscita: %d\n" -#: debug.c:2955 +#: debug.c:2975 msgid "The program is running. Exit anyway (y/n)? " msgstr "Il programma è in esecuzione. Esco comunque (y/n)? " -#: debug.c:2990 +#: debug.c:3010 #, c-format msgid "Not stopped at any breakpoint; argument ignored.\n" msgstr "Non interrotto ad alcun breakpoint: argomento ignorato.\n" -#: debug.c:2995 +#: debug.c:3015 #, c-format msgid "invalid breakpoint number %d." msgstr "numero di breakpoint non valido %d." -#: debug.c:3000 +#: debug.c:3020 #, c-format msgid "Will ignore next %ld crossings of breakpoint %d.\n" msgstr "Prossimi %ld passaggi dal breakpoint %d ignorati.\n" -#: debug.c:3187 +#: debug.c:3207 #, c-format msgid "'finish' not meaningful in the outermost frame main()\n" msgstr "'finish' non significativo nell'elemento iniziale main()\n" -#: debug.c:3192 +#: debug.c:3212 #, c-format msgid "Run till return from " msgstr "Esegui fino al ritorno da " -#: debug.c:3235 +#: debug.c:3255 #, c-format msgid "'return' not meaningful in the outermost frame main()\n" msgstr "'return' non significativo nell'elemento iniziale main()\n" -#: debug.c:3349 +#: debug.c:3369 #, c-format msgid "Can't find specified location in function `%s'\n" msgstr "Non trovo la posizione specificata nella funzione `%s'\n" -#: debug.c:3357 +#: debug.c:3377 #, c-format msgid "invalid source line %d in file `%s'" msgstr "riga sorgente invalida %d nel file `%s'" -#: debug.c:3372 +#: debug.c:3392 #, c-format msgid "Can't find specified location %d in file `%s'\n" msgstr "Non trovo posizione specificata %d nel file `%s'\n" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "element not in array\n" msgstr "elemento non presente nel vettore\n" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "untyped variable\n" msgstr "variabile di tipo sconosciuto\n" -#: debug.c:3446 +#: debug.c:3466 #, c-format msgid "Stopping in %s ...\n" msgstr "Mi fermo in %s ...\n" -#: debug.c:3523 +#: debug.c:3543 #, c-format msgid "'finish' not meaningful with non-local jump '%s'\n" msgstr "'finish' not significativo per salti non-locali '%s'\n" -#: debug.c:3530 +#: debug.c:3550 #, c-format msgid "'until' not meaningful with non-local jump '%s'\n" msgstr "'until' not significativo per salti non-locali '%s'\n" -#: debug.c:4165 +#: debug.c:4185 msgid "\t------[Enter] to continue or q [Enter] to quit------" msgstr "\t------[Invio] per continuare o q [Invio] per uscire------" -#: debug.c:4166 +#: debug.c:4186 msgid "q" msgstr "q" -#: debug.c:4986 +#: debug.c:5001 #, c-format msgid "[\"%s\"] not in array `%s'" msgstr "[\"%s\"] non presente nel vettore `%s'" -#: debug.c:5192 +#: debug.c:5207 #, c-format msgid "sending output to stdout\n" msgstr "output inviato a stdout\n" -#: debug.c:5232 +#: debug.c:5247 msgid "invalid number" msgstr "numero non valido" -#: debug.c:5366 +#: debug.c:5381 #, c-format msgid "`%s' not allowed in current context; statement ignored" msgstr "`%s' non consentito nel contesto corrente; istruzione ignorata" -#: debug.c:5374 +#: debug.c:5389 msgid "`return' not allowed in current context; statement ignored" msgstr "`return' non consentito nel contesto corrente; istruzione ignorata" -#: debug.c:5575 +#: debug.c:5590 #, c-format msgid "No symbol `%s' in current context" msgstr "Simbolo `%s' non esiste nel contesto corrente" #: 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:1192 +#: dfa.c:1106 dfa.c:1111 dfa.c:1124 dfa.c:1191 msgid "unbalanced [" msgstr "[ non chiusa" @@ -1809,31 +1821,31 @@ msgstr "[ non chiusa" msgid "invalid character class" msgstr "character class non valida" -#: dfa.c:1229 +#: dfa.c:1228 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "sintassi character class è [[:spazio:]], non [:spazio:]" -#: dfa.c:1281 +#: dfa.c:1280 msgid "unfinished \\ escape" msgstr "sequenza escape \\ non completa" -#: dfa.c:1428 regcomp.c:161 +#: dfa.c:1427 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "Contenuto di \\{\\} non valido" -#: dfa.c:1431 regcomp.c:176 +#: dfa.c:1430 regcomp.c:176 msgid "Regular expression too big" msgstr "Espressione regolare troppo complessa" -#: dfa.c:1816 +#: dfa.c:1847 msgid "unbalanced (" msgstr "( non chiusa" -#: dfa.c:1943 +#: dfa.c:1973 msgid "no syntax specified" msgstr "nessuna sintassi specificata" -#: dfa.c:1951 +#: dfa.c:1981 msgid "unbalanced )" msgstr ") non aperta" @@ -1852,11 +1864,11 @@ msgstr "codice operativo sconosciuto %d" msgid "opcode %s not an operator or keyword" msgstr "codice operativo %s non è un operatore o una parola chiave" -#: eval.c:471 +#: eval.c:472 msgid "buffer overflow in genflags2str" msgstr "superamento limiti buffer in 'genflags2str'" -#: eval.c:674 +#: eval.c:675 #, c-format msgid "" "\n" @@ -1867,71 +1879,71 @@ msgstr "" "\t# `Stack' (Pila) Chiamate Funzione:\n" "\n" -#: eval.c:703 +#: eval.c:704 msgid "`IGNORECASE' is a gawk extension" msgstr "`IGNORECASE' è un'estensione gawk" -#: eval.c:735 +#: eval.c:736 msgid "`BINMODE' is a gawk extension" msgstr "`BINMODE' è un'estensione gawk" -#: eval.c:793 +#: eval.c:794 #, c-format msgid "BINMODE value `%s' is invalid, treated as 3" msgstr "valore di BINMODE `%s' non valido, considerato come 3" -#: eval.c:884 +#: eval.c:885 #, c-format msgid "bad `%sFMT' specification `%s'" msgstr "specificazione invalida `%sFMT' `%s'" -#: eval.c:968 +#: eval.c:969 msgid "turning off `--lint' due to assignment to `LINT'" msgstr "disabilito `--lint' a causa di assegnamento a `LINT'" -#: eval.c:1146 +#: eval.c:1147 #, c-format msgid "reference to uninitialized argument `%s'" msgstr "riferimento ad argomento non inizializzato `%s'" -#: eval.c:1147 +#: eval.c:1148 #, c-format msgid "reference to uninitialized variable `%s'" msgstr "riferimento a variabile non inizializzata `%s'" -#: eval.c:1165 +#: eval.c:1166 msgid "attempt to field reference from non-numeric value" msgstr "tentativo di riferimento a un campo da valore non-numerico" -#: eval.c:1167 +#: eval.c:1168 msgid "attempt to field reference from null string" msgstr "tentativo di riferimento a un campo da una stringa nulla" -#: eval.c:1175 +#: eval.c:1176 #, c-format msgid "attempt to access field %ld" msgstr "tentativo di accedere al campo %ld" -#: eval.c:1184 +#: eval.c:1185 #, c-format msgid "reference to uninitialized field `$%ld'" msgstr "riferimento a campo non inizializzato `$%ld'" -#: eval.c:1271 +#: eval.c:1272 #, c-format msgid "function `%s' called with more arguments than declared" msgstr "funzione `%s' chiamata con più argomenti di quelli previsti" -#: eval.c:1466 +#: eval.c:1473 #, c-format msgid "unwind_stack: unexpected type `%s'" msgstr "unwind_stack: tipo non previsto `%s'" -#: eval.c:1562 +#: eval.c:1569 msgid "division by zero attempted in `/='" msgstr "divisione per zero tentata in `/='" -#: eval.c:1569 +#: eval.c:1576 #, c-format msgid "division by zero attempted in `%%='" msgstr "divisione per zero tentata in `%%='" @@ -1944,7 +1956,7 @@ msgstr "le estensioni non sono consentite in modo `sandbox'" msgid "-l / @load are gawk extensions" msgstr "-l / @load sono estensioni gawk" -#: ext.c:95 ext.c:177 +#: ext.c:95 msgid "load_ext: received NULL lib_name" msgstr "load_ext: nome libreria ricevuto è NULL" @@ -1975,6 +1987,10 @@ msgstr "" msgid "`extension' is a gawk extension" msgstr "`extension' è un'estensione gawk" +#: ext.c:177 +msgid "extension: received NULL lib_name" +msgstr "extension: nome libreria ricevuto è NULL" + #: ext.c:180 #, c-format msgid "extension: cannot open library `%s' (%s)" @@ -1996,37 +2012,37 @@ msgstr "extension: libreria `%s': non riesco a chiamare funzione `%s' (%s)" msgid "make_builtin: missing function name" msgstr "make_builtin: manca nome di funzione" -#: ext.c:238 +#: ext.c:236 #, c-format msgid "make_builtin: can't redefine function `%s'" msgstr "make_builtin: non riesco a ridefinire funzione `%s'" -#: ext.c:242 +#: ext.c:240 #, c-format msgid "make_builtin: function `%s' already defined" msgstr "make_builtin: funzione `%s' già definita" -#: ext.c:246 +#: ext.c:244 #, c-format msgid "make_builtin: function name `%s' previously defined" msgstr "make_builtin: funzione di nome `%s' definita in precedenza" -#: ext.c:248 +#: ext.c:246 #, 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:251 ext.c:304 +#: ext.c:249 ext.c:304 #, c-format msgid "make_builtin: negative argument count for function `%s'" msgstr "make_builtin: contatore argomenti negativo per la funzione `%s'" -#: ext.c:278 +#: ext.c:276 msgid "extension: missing function name" msgstr "extension: manca nome di funzione" -#: ext.c:283 +#: ext.c:279 ext.c:283 #, c-format msgid "extension: illegal character `%c' in function name `%s'" msgstr "extension: carattere non ammesso `%c' nel nome di funzione `%s'" @@ -2052,139 +2068,143 @@ 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:374 +#: ext.c:375 #, 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:377 +#: ext.c:378 #, c-format msgid "function `%s': missing argument #%d" msgstr "funzione `%s': manca argomento #%d" -#: ext.c:394 +#: ext.c:395 #, 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:398 +#: ext.c:399 #, 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:412 +#: ext.c:413 msgid "dynamic loading of library not supported" msgstr "caricamento dinamico di libreria non supportato" -#: extension/filefuncs.c:97 +#: extension/filefuncs.c:159 msgid "chdir: called with incorrect number of arguments, expecting 1" msgstr "chdir: chiamata con numero di argomenti errato, 1 previsto" -#: extension/filefuncs.c:343 +#: extension/filefuncs.c:439 #, c-format msgid "stat: unable to read symbolic link `%s'" msgstr "stat: non riesco a leggere il link simbolico `%s'" -#: extension/filefuncs.c:376 +#: extension/filefuncs.c:472 msgid "stat: called with wrong number of arguments" msgstr "stat: chiamata con numero di argomenti errato" -#: extension/filefuncs.c:383 +#: extension/filefuncs.c:479 msgid "stat: bad parameters" msgstr "stat: parametri errati" -#: extension/filefuncs.c:437 +#: extension/filefuncs.c:533 #, c-format msgid "fts init: could not create variable %s" msgstr "ftp init: non riesco a creare variabile %s" -#: extension/filefuncs.c:460 +#: extension/filefuncs.c:554 +msgid "fts is not supported on this system" +msgstr "fts non disponibile su questo sistema" + +#: extension/filefuncs.c:573 msgid "fill_stat_element: could not create array" msgstr "fill_stat_element: non riesco a creare vettore" -#: extension/filefuncs.c:469 +#: extension/filefuncs.c:582 msgid "fill_stat_element: could not set element" msgstr "fill_stat_element: non riesco a impostare elemento" -#: extension/filefuncs.c:484 +#: extension/filefuncs.c:597 msgid "fill_path_element: could not set element" msgstr "fill_path_element: non riesco a impostare elemento" -#: extension/filefuncs.c:500 +#: extension/filefuncs.c:613 msgid "fill_error_element: could not set element" msgstr "fill_error_element: non riesco a impostare elemento" -#: extension/filefuncs.c:547 extension/filefuncs.c:594 +#: extension/filefuncs.c:660 extension/filefuncs.c:707 msgid "fts-process: could not create array" msgstr "fts-process: non riesco a creare vettore" -#: extension/filefuncs.c:557 extension/filefuncs.c:604 -#: extension/filefuncs.c:622 +#: extension/filefuncs.c:670 extension/filefuncs.c:717 +#: extension/filefuncs.c:735 msgid "fts-process: could not set element" msgstr "fts-process: non riesco a impostare elemento" -#: extension/filefuncs.c:671 +#: extension/filefuncs.c:784 msgid "fts: called with incorrect number of arguments, expecting 3" msgstr "fts: chiamata con numero di argomenti errato, 3 previsti" -#: extension/filefuncs.c:674 +#: extension/filefuncs.c:787 msgid "fts: bad first parameter" msgstr "fts: primo parametro errato" -#: extension/filefuncs.c:680 +#: extension/filefuncs.c:793 msgid "fts: bad second parameter" msgstr "fts: secondo parametro errato" -#: extension/filefuncs.c:686 +#: extension/filefuncs.c:799 msgid "fts: bad third parameter" msgstr "fts: terzo parametro errato" -#: extension/filefuncs.c:693 +#: extension/filefuncs.c:806 msgid "fts: could not flatten array\n" msgstr "fts: non sono riuscito a appiattire un vettore\n" -#: extension/filefuncs.c:711 +#: extension/filefuncs.c:824 msgid "fts: ignoring sneaky FTS_NOSTAT flag. nyah, nyah, nyah." msgstr "fts: ignoro flag infido FTS_NOSTAT. nooo, nooo, nooo." -#: extension/filefuncs.c:728 +#: extension/filefuncs.c:841 msgid "fts: clear_array() failed\n" msgstr "fts: clear_array() non riuscita\n" -#: extension/fnmatch.c:98 +#: extension/fnmatch.c:112 msgid "fnmatch: called with less than three arguments" msgstr "fnmatch: chiamata con meno di tre argomenti" -#: extension/fnmatch.c:101 +#: extension/fnmatch.c:115 msgid "fnmatch: called with more than three arguments" msgstr "fnmatch: chiamata con più di tre argomenti" -#: extension/fnmatch.c:104 +#: extension/fnmatch.c:118 msgid "fnmatch: could not get first argument" msgstr "fnmatch: primo argomento non disponibile" -#: extension/fnmatch.c:109 +#: extension/fnmatch.c:123 msgid "fnmatch: could not get second argument" msgstr "fnmatch: secondo argomento non disponibile" -#: extension/fnmatch.c:114 +#: extension/fnmatch.c:128 msgid "fnmatch: could not get third argument" msgstr "fnmatch: terzo argomento non disponibile" -#: extension/fnmatch.c:127 +#: extension/fnmatch.c:141 msgid "fnmatch is not implemented on this system\n" msgstr "fnmatch non disponibile su questo sistema\n" -#: extension/fnmatch.c:159 +#: extension/fnmatch.c:173 msgid "fnmatch init: could not add FNM_NOMATCH variable" msgstr "fnmatch init: non riesco ad aggiungere variabile FNM_NOMATCH" -#: extension/fnmatch.c:169 +#: extension/fnmatch.c:183 #, c-format msgid "fnmatch init: could not set array element %s" msgstr "fnmatch init: non riesco a impostare elemento vettoriale %s" -#: extension/fnmatch.c:179 +#: extension/fnmatch.c:193 msgid "fnmatch init: could not install FNM array" msgstr "fnmatch init: non riesco a installare vettore FNM" @@ -2208,91 +2228,91 @@ msgstr "wait: chiamata senza argomenti" msgid "wait: called with too many arguments" msgstr "wait: chiamata con troppi argomenti" -#: extension/inplace.c:110 +#: extension/inplace.c:130 msgid "inplace_begin: in-place editing already active" msgstr "inplace_begin: modifica in-place già attiva" -#: extension/inplace.c:113 extension/inplace.c:187 +#: extension/inplace.c:133 extension/inplace.c:207 #, c-format msgid "inplace_begin: expects 2 arguments but called with %d" msgstr "inplace_begin: 2 argumenti richiesti, ma chiamata con %d" -#: extension/inplace.c:116 +#: extension/inplace.c:136 msgid "inplace_begin: cannot retrieve 1st argument as a string filename" msgstr "" "inplace_begin: non riesco a trovare il 1° argomento come stringa nome-file" -#: extension/inplace.c:124 +#: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" msgstr "" "inplace_begin: modifica in-place disabilitato, FILENAME non valido `%s'" -#: extension/inplace.c:131 +#: extension/inplace.c:151 #, c-format msgid "inplace_begin: Cannot stat `%s' (%s)" msgstr "inplace_begin: Non riesco a trovare `%s' (%s)" -#: extension/inplace.c:138 +#: extension/inplace.c:158 #, c-format msgid "inplace_begin: `%s' is not a regular file" msgstr "inplace_begin: `%s' non è un file regolare" -#: extension/inplace.c:149 +#: extension/inplace.c:169 #, c-format msgid "inplace_begin: mkstemp(`%s') failed (%s)" msgstr "inplace_begin: mkstemp(`%s') non riuscita (%s)" -#: extension/inplace.c:158 +#: extension/inplace.c:178 #, c-format msgid "inplace_begin: chmod failed (%s)" msgstr "inplace_begin: chmod non riuscita (%s)" -#: extension/inplace.c:165 +#: extension/inplace.c:185 #, c-format msgid "inplace_begin: dup(stdout) failed (%s)" msgstr "inplace_begin: dup(stdout) non riuscita (%s)" -#: extension/inplace.c:168 +#: extension/inplace.c:188 #, c-format msgid "inplace_begin: dup2(%d, stdout) failed (%s)" msgstr "inplace_begin: dup2(%d, stdout) non riuscita (%s)" -#: extension/inplace.c:171 +#: extension/inplace.c:191 #, c-format msgid "inplace_begin: close(%d) failed (%s)" msgstr "inplace_begin: close(%d) non riuscita (%s)" -#: extension/inplace.c:190 +#: extension/inplace.c:210 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:197 +#: extension/inplace.c:217 msgid "inplace_end: in-place editing not active" msgstr "inplace_end: modifica in-place non attiva" -#: extension/inplace.c:203 +#: extension/inplace.c:223 #, c-format msgid "inplace_end: dup2(%d, stdout) failed (%s)" msgstr "inplace_end: dup2(%d, stdout) non riuscita (%s)" -#: extension/inplace.c:206 +#: extension/inplace.c:226 #, c-format msgid "inplace_end: close(%d) failed (%s)" msgstr "inplace_end: close(%d) non riuscita (%s)" -#: extension/inplace.c:210 +#: extension/inplace.c:230 #, c-format msgid "inplace_end: fsetpos(stdout) failed (%s)" msgstr "inplace_end: fsetpos(stdout) non riuscita (%s)" -#: extension/inplace.c:223 +#: extension/inplace.c:243 #, c-format msgid "inplace_end: link(`%s', `%s') failed (%s)" msgstr "inplace_end: link(`%s', `%s') non riuscita (%s)" -#: extension/inplace.c:229 +#: extension/inplace.c:253 #, c-format msgid "inplace_end: rename(`%s', `%s') failed (%s)" msgstr "inplace_end: rename(`%s', `%s') non riuscito (%s)" @@ -2321,7 +2341,7 @@ msgstr "chr: chiamata senza argomenti" msgid "chr: called with inappropriate argument(s)" msgstr "chr: chiamata con argomento/i non corretto/i" -#: extension/readdir.c:203 +#: extension/readdir.c:277 #, c-format msgid "dir_take_control_of: opendir/fdopendir failed: %s" msgstr "dir_take_control_of: opendir/fdopendir non riuscita: %s" @@ -2334,162 +2354,162 @@ msgstr "readfile: chiamata con troppi argomenti" msgid "readfile: called with no arguments" msgstr "readfile: chiamata senza argomenti" -#: extension/rwarray.c:120 +#: extension/rwarray.c:124 msgid "writea: called with too many arguments" msgstr "writea: chiamata con troppi argomenti" -#: extension/rwarray.c:127 +#: extension/rwarray.c:131 #, c-format msgid "do_writea: argument 0 is not a string\n" msgstr "do_writea: argomento 0 non è una stringa\n" -#: extension/rwarray.c:133 +#: extension/rwarray.c:137 #, c-format msgid "do_writea: argument 1 is not an array\n" msgstr "do_writea: argomento 1 non-vettoriale\n" -#: extension/rwarray.c:180 +#: extension/rwarray.c:184 #, c-format msgid "write_array: could not flatten array\n" msgstr "write_array: non sono riuscito a appiattire un vettore\n" -#: extension/rwarray.c:194 +#: extension/rwarray.c:198 #, 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:276 +#: extension/rwarray.c:280 msgid "reada: called with too many arguments" msgstr "reada: chiamata con troppi argomenti" -#: extension/rwarray.c:283 +#: extension/rwarray.c:287 #, c-format msgid "do_reada: argument 0 is not a string\n" msgstr "do_reada: argomento 0 non è una stringa\n" -#: extension/rwarray.c:289 +#: extension/rwarray.c:293 #, c-format msgid "do_reada: argument 1 is not an array\n" msgstr "do_reada: argomento 1 non-vettoriale\n" -#: extension/rwarray.c:333 +#: extension/rwarray.c:337 #, c-format msgid "do_reada: clear_array failed\n" msgstr "do_reada: clear_array non riuscita\n" -#: extension/rwarray.c:370 +#: extension/rwarray.c:374 #, c-format msgid "read_array: set_array_element failed\n" msgstr "read_array: set_array_element non riuscita\n" -#: extension/time.c:81 +#: extension/time.c:106 msgid "gettimeofday: ignoring arguments" msgstr "gettimeofday: ignoro argomenti" -#: extension/time.c:112 +#: extension/time.c:137 msgid "gettimeofday: not supported on this platform" msgstr "gettimeofday: non supportato in questa architettura" -#: extension/time.c:133 +#: extension/time.c:158 msgid "sleep: called with too many arguments" msgstr "sleep: chiamata con troppi argomenti" -#: extension/time.c:136 +#: extension/time.c:161 msgid "sleep: missing required numeric argument" msgstr "sleep: manca necessario argomento numerico" -#: extension/time.c:142 +#: extension/time.c:167 msgid "sleep: argument is negative" msgstr "sleep: l'argomento è negativo" -#: extension/time.c:176 +#: extension/time.c:201 msgid "sleep: not supported on this platform" msgstr "sleep: non supportato in questa architettura" -#: field.c:339 +#: field.c:345 msgid "NF set to negative value" msgstr "NF impostato a un valore negativo" -#: field.c:964 field.c:971 field.c:975 +#: field.c:971 field.c:978 field.c:982 msgid "split: fourth argument is a gawk extension" msgstr "split: il quarto argomento è un'estensione gawk" -#: field.c:968 +#: field.c:975 msgid "split: fourth argument is not an array" msgstr "split: quarto argomento non-vettoriale" -#: field.c:982 +#: field.c:989 msgid "split: second argument is not an array" msgstr "split: secondo argomento non-vettoriale" -#: field.c:986 +#: field.c:993 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:991 +#: field.c:998 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:994 +#: field.c:1001 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:1023 +#: field.c:1032 msgid "split: null string for third arg is a gawk extension" msgstr "split: la stringa nulla come terzo arg. è un'estensione gawk" -#: field.c:1063 +#: field.c:1072 msgid "patsplit: fourth argument is not an array" msgstr "patsplit: secondo argomento non-vettoriale" -#: field.c:1068 +#: field.c:1077 msgid "patsplit: second argument is not an array" msgstr "patsplit: secondo argomento non-vettoriale" -#: field.c:1074 +#: field.c:1083 msgid "patsplit: third argument must be non-null" msgstr "patsplit: il terzo argomento non può essere nullo" -#: field.c:1078 +#: field.c:1087 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:1083 +#: field.c:1092 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:1086 +#: field.c:1095 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:1124 +#: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" msgstr "`FIELDWIDTHS' è un'estensione gawk" -#: field.c:1188 +#: field.c:1197 #, c-format msgid "invalid FIELDWIDTHS value, near `%s'" msgstr "valore di FIELDWIDTHS non valido, vicino a `%s'" -#: field.c:1261 +#: field.c:1270 msgid "null string for `FS' is a gawk extension" msgstr "la stringa nulla usata come `FS' è un'estensione gawk" -#: field.c:1265 +#: field.c:1274 msgid "old awk does not support regexps as value of `FS'" msgstr "il vecchio awk non supporta espressioni come valori di `FS'" -#: field.c:1384 +#: field.c:1393 msgid "`FPAT' is a gawk extension" msgstr "`FPAT' è un'estensione gawk" @@ -2513,358 +2533,358 @@ msgstr "remove_element: ricevuto vettore nullo" msgid "remove_element: received null subscript" msgstr "remove_element: ricevuto indice nullo" -#: gawkapi.c:943 +#: gawkapi.c:948 #, 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:948 +#: gawkapi.c:953 #, 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" -#: getopt.c:603 getopt.c:632 +#: getopt.c:604 getopt.c:633 #, c-format msgid "%s: option '%s' is ambiguous; possibilities:" msgstr "%s: opzione '%s' ambigua; possibilità:" -#: getopt.c:678 getopt.c:682 +#: getopt.c:679 getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: l'opzione '--%s' non ammette un argomento\n" -#: getopt.c:691 getopt.c:696 +#: getopt.c:692 getopt.c:697 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: l'opzione '%c%s' non ammette un argomento\n" -#: getopt.c:739 getopt.c:758 +#: getopt.c:740 getopt.c:759 #, c-format msgid "%s: option '--%s' requires an argument\n" msgstr "%s: l'opzione '--%s' richiede un argomento\n" -#: getopt.c:796 getopt.c:799 +#: getopt.c:797 getopt.c:800 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: opzione sconosciuta '--%s'\n" -#: getopt.c:807 getopt.c:810 +#: getopt.c:808 getopt.c:811 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: opzione sconosciuta '%c%s'\n" -#: getopt.c:859 getopt.c:862 +#: getopt.c:860 getopt.c:863 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: opzione non valida -- '%c'\n" -#: getopt.c:915 getopt.c:932 getopt.c:1142 getopt.c:1160 +#: getopt.c:916 getopt.c:933 getopt.c:1143 getopt.c:1161 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: l'opzione richiede un argomento -- '%c'\n" -#: getopt.c:988 getopt.c:1004 +#: getopt.c:989 getopt.c:1005 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: l'opzione '-W %s' è ambigua\n" -#: getopt.c:1028 getopt.c:1046 +#: getopt.c:1029 getopt.c:1047 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: l'opzione '-W %s' non ammette un argomento\n" -#: getopt.c:1067 getopt.c:1085 +#: getopt.c:1068 getopt.c:1086 #, c-format msgid "%s: option '-W %s' requires an argument\n" msgstr "%s: l'opzione '-W %s' richiede un argomento\n" -#: io.c:347 +#: io.c:392 #, c-format msgid "command line argument `%s' is a directory: skipped" msgstr "l'argomento in linea comando `%s' è una directory: saltato" -#: io.c:350 io.c:463 +#: io.c:395 io.c:513 #, c-format msgid "cannot open file `%s' for reading (%s)" msgstr "non riesco ad aprire file `%s' in lettura (%s)" -#: io.c:590 +#: io.c:640 #, c-format msgid "close of fd %d (`%s') failed (%s)" msgstr "chiusura di fd %d (`%s') non riuscita (%s)" -#: io.c:666 +#: io.c:716 msgid "redirection not allowed in sandbox mode" msgstr "re-direzione non consentita in modo `sandbox'" -#: io.c:700 +#: io.c:750 #, c-format msgid "expression in `%s' redirection only has numeric value" msgstr "espressione nella re-direzione `%s' ha solo un valore numerico" -#: io.c:706 +#: io.c:756 #, c-format msgid "expression for `%s' redirection has null string value" msgstr "espressione nella re-direzione `%s' ha per valore la stringa nulla" -#: io.c:711 +#: io.c:761 #, c-format msgid "filename `%s' for `%s' redirection may be result of logical expression" msgstr "" "nome-file `%s' per la re-direzione `%s' può essere il risultato di una " "espressione logica" -#: io.c:754 +#: io.c:809 #, c-format msgid "unnecessary mixing of `>' and `>>' for file `%.*s'" msgstr "mistura non necessaria di `>' e `>>' per il file `%.*s'" -#: io.c:808 +#: io.c:863 #, c-format msgid "can't open pipe `%s' for output (%s)" msgstr "non riesco ad aprire `pipe' `%s' in scrittura (%s)" -#: io.c:818 +#: io.c:873 #, c-format msgid "can't open pipe `%s' for input (%s)" msgstr "non riesco ad aprire `pipe' `%s' in lettura (%s)" -#: io.c:849 +#: io.c:904 #, 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:928 +#: io.c:986 #, c-format msgid "can't redirect from `%s' (%s)" msgstr "non riesco a re-dirigere da `%s' (%s)" -#: io.c:931 +#: io.c:989 #, c-format msgid "can't redirect to `%s' (%s)" msgstr "non riesco a re-dirigere a `%s' (%s)" -#: io.c:982 +#: io.c:1040 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:998 +#: io.c:1056 #, c-format msgid "close of `%s' failed (%s)." msgstr "chiusura di `%s' non riuscita (%s)." -#: io.c:1006 +#: io.c:1064 msgid "too many pipes or input files open" msgstr "troppe `pipe' o file di input aperti" -#: io.c:1028 +#: io.c:1086 msgid "close: second argument must be `to' or `from'" msgstr "close: il secondo argomento deve essere `a' o `da'" -#: io.c:1045 +#: io.c:1103 #, 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:1050 +#: io.c:1108 msgid "close of redirection that was never opened" msgstr "chiusura di una re-direzione mai aperta" -#: io.c:1147 +#: io.c:1205 #, c-format msgid "close: redirection `%s' not opened with `|&', second argument ignored" msgstr "close: re-direzione `%s' non aperta con `|&', ignoro secondo argomento" -#: io.c:1164 +#: io.c:1222 #, c-format msgid "failure status (%d) on pipe close of `%s' (%s)" msgstr "errore ritornato (%d) dalla chiusura della `pipe' `%s' (%s)" -#: io.c:1167 +#: io.c:1225 #, c-format msgid "failure status (%d) on file close of `%s' (%s)" msgstr "errore ritornato (%d) dalla chiusura del file `%s' (%s)" -#: io.c:1187 +#: io.c:1245 #, c-format msgid "no explicit close of socket `%s' provided" msgstr "nessuna chiusura esplicita richiesta per `socket' `%s'" -#: io.c:1190 +#: io.c:1248 #, c-format msgid "no explicit close of co-process `%s' provided" msgstr "nessuna chiusura esplicita richiesta per co-processo `%s'" -#: io.c:1193 +#: io.c:1251 #, c-format msgid "no explicit close of pipe `%s' provided" msgstr "nessuna chiusura esplicita richiesta per `pipe' `%s'" -#: io.c:1196 +#: io.c:1254 #, c-format msgid "no explicit close of file `%s' provided" msgstr "nessuna chiusura esplicita richiesta per file `%s'" -#: io.c:1224 io.c:1279 main.c:842 main.c:879 +#: io.c:1284 io.c:1342 main.c:864 main.c:906 #, c-format msgid "error writing standard output (%s)" msgstr "errore scrivendo 'standard output' (%s)" -#: io.c:1228 io.c:1284 +#: io.c:1289 io.c:1348 main.c:866 #, c-format msgid "error writing standard error (%s)" msgstr "errore scrivendo 'standard error' (%s)" -#: io.c:1236 +#: io.c:1297 #, c-format msgid "pipe flush of `%s' failed (%s)." msgstr "scaricamento di `pipe' `%s' non riuscito (%s)." -#: io.c:1239 +#: io.c:1300 #, 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:1242 +#: io.c:1303 #, c-format msgid "file flush of `%s' failed (%s)." msgstr "scaricamento di file `%s' non riuscito (%s)." -#: io.c:1356 +#: io.c:1420 #, c-format msgid "local port %s invalid in `/inet'" msgstr "porta locale %s invalida in `/inet'" -#: io.c:1374 +#: io.c:1438 #, c-format msgid "remote host and port information (%s, %s) invalid" msgstr "host remoto e informazione di porta (%s, %s) invalidi" -#: io.c:1526 +#: 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:1540 +#: io.c:1604 #, c-format msgid "special file name `%s' is incomplete" msgstr "nome-file speciale `%s' incompleto" -#: io.c:1557 +#: io.c:1621 msgid "must supply a remote hostname to `/inet'" msgstr "va fornito nome di `host' remoto a `/inet'" -#: io.c:1575 +#: io.c:1639 msgid "must supply a remote port to `/inet'" msgstr "va fornita porta remota a `/inet'" -#: io.c:1621 +#: io.c:1685 msgid "TCP/IP communications are not supported" msgstr "comunicazioni TCP/IP non supportate" -#: io.c:1796 +#: io.c:1867 #, c-format msgid "could not open `%s', mode `%s'" msgstr "non riesco ad aprire `%s', modo `%s'" -#: io.c:1846 +#: io.c:1917 #, c-format msgid "close of master pty failed (%s)" msgstr "close di `pty' principale non riuscita (%s)" -#: io.c:1848 io.c:2024 io.c:2194 +#: io.c:1919 io.c:2105 io.c:2305 #, c-format msgid "close of stdout in child failed (%s)" msgstr "close di `stdout' nel processo-figlio non riuscita (%s)" -#: io.c:1851 +#: io.c:1922 #, 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:1853 io.c:2029 +#: io.c:1924 io.c:2110 #, c-format msgid "close of stdin in child failed (%s)" msgstr "close di `stdin' nel processo-figlio non riuscita (%s)" -#: io.c:1856 +#: io.c:1927 #, 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:1858 io.c:1879 +#: io.c:1929 io.c:1951 #, c-format msgid "close of slave pty failed (%s)" msgstr "close di 'pty' secondaria non riuscita (%s)" -#: io.c:1965 io.c:2027 io.c:2171 io.c:2197 +#: io.c:2040 io.c:2108 io.c:2276 io.c:2308 #, 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:1972 io.c:2032 +#: io.c:2047 io.c:2113 #, 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:1992 io.c:2187 +#: io.c:2073 io.c:2298 msgid "restoring stdout in parent process failed\n" msgstr "ripristino di `stdout' nel processo-padre non riuscito\n" -#: io.c:2000 +#: io.c:2081 msgid "restoring stdin in parent process failed\n" msgstr "ripristino di `stdin' nel processo-padre non riuscito\n" -#: io.c:2035 io.c:2199 io.c:2213 +#: io.c:2116 io.c:2310 io.c:2324 #, c-format msgid "close of pipe failed (%s)" msgstr "close di 'pipe' non riuscita (%s)" -#: io.c:2089 +#: io.c:2174 msgid "`|&' not supported" msgstr "`|&' non supportato" -#: io.c:2156 +#: io.c:2261 #, c-format msgid "cannot open pipe `%s' (%s)" msgstr "non riesco ad aprire `pipe' `%s' (%s)" -#: io.c:2207 +#: io.c:2318 #, c-format msgid "cannot create child process for `%s' (fork: %s)" msgstr "non riesco a creare processo-figlio per `%s' (fork: %s)" -#: io.c:2667 +#: io.c:2790 msgid "register_input_parser: received NULL pointer" msgstr "register_input_parser: ricevuto puntatore NULL" -#: io.c:2695 +#: io.c:2818 #, 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:2702 +#: io.c:2825 #, c-format msgid "input parser `%s' failed to open `%s'" msgstr "l'input parser `%s' non è riuscito ad aprire `%s'" -#: io.c:2722 +#: io.c:2845 msgid "register_output_wrapper: received NULL pointer" msgstr "register_output_wrapper: ricevuto puntatore NULL" -#: io.c:2750 +#: io.c:2873 #, c-format msgid "" "output wrapper `%s' conflicts with previously installed output wrapper `%s'" @@ -2872,16 +2892,16 @@ msgstr "" "output wrapper `%s' in conflitto con l'output wrapper `%s' installato in " "precedenza" -#: io.c:2757 +#: io.c:2880 #, c-format msgid "output wrapper `%s' failed to open `%s'" msgstr "l'output wrapper `%s' non è riuscito ad aprire `%s'" -#: io.c:2778 +#: io.c:2901 msgid "register_output_processor: received NULL pointer" msgstr "register_output_processor: ricevuto puntatore NULL" -#: io.c:2807 +#: io.c:2930 #, c-format msgid "" "two-way processor `%s' conflicts with previously installed two-way processor " @@ -2890,209 +2910,209 @@ msgstr "" "processore doppio `%s' in conflitto con il processore doppio installato in " "precedenza `%s'" -#: io.c:2816 +#: io.c:2939 #, c-format msgid "two way processor `%s' failed to open `%s'" msgstr "il processore doppio `%s' non è riuscito ad aprire `%s'" -#: io.c:2923 +#: io.c:3064 #, c-format msgid "data file `%s' is empty" msgstr "file dati `%s' vuoto" -#: io.c:2965 io.c:2973 +#: io.c:3106 io.c:3114 msgid "could not allocate more input memory" msgstr "non riesco ad allocare ulteriore memoria per l'input" -#: io.c:3539 +#: io.c:3682 msgid "multicharacter value of `RS' is a gawk extension" msgstr "valore multicarattere per `RS' è un'estensione gawk" -#: io.c:3628 +#: io.c:3771 msgid "IPv6 communication is not supported" msgstr "comunicazioni IPv6 non supportate" -#: main.c:388 +#: main.c:405 msgid "empty argument to `-e/--source' ignored" msgstr "argomento di `-e/--source' nullo, ignorato" -#: main.c:478 +#: main.c:495 #, c-format msgid "%s: option `-W %s' unrecognized, ignored\n" msgstr "%s: opzione `-W %s' non riconosciuta, ignorata\n" -#: main.c:524 +#: main.c:541 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: l'opzione richiede un argomento -- %c\n" -#: main.c:545 +#: main.c:562 msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'" msgstr "variable d'ambiente `POSIXLY_CORRECT' impostata: attivo `--posix'" -#: main.c:551 +#: main.c:568 msgid "`--posix' overrides `--traditional'" msgstr "`--posix' annulla `--traditional'" -#: main.c:562 +#: main.c:579 msgid "`--posix'/`--traditional' overrides `--non-decimal-data'" msgstr "`--posix'/`--traditional' annulla `--non-decimal-data'" -#: main.c:566 +#: main.c:583 #, 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:571 +#: main.c:588 msgid "`--posix' overrides `--characters-as-bytes'" msgstr "`--posix' annulla `--characters-as-bytes'" -#: main.c:630 +#: main.c:647 #, c-format msgid "can't set binary mode on stdin (%s)" msgstr "non è possibile impostare modalità binaria su `stdin'(%s)" -#: main.c:633 +#: main.c:650 #, c-format msgid "can't set binary mode on stdout (%s)" msgstr "non è possibile impostare modalità binaria su `stdout'(%s)" -#: main.c:635 +#: main.c:652 #, c-format msgid "can't set binary mode on stderr (%s)" msgstr "non è possibile impostare modalità binaria su `stderr'(%s)" -#: main.c:693 +#: main.c:710 msgid "no program text at all!" msgstr "manca del tutto il testo del programma!" -#: main.c:779 +#: main.c:799 #, 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:781 +#: main.c:801 #, 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:786 +#: main.c:806 msgid "POSIX options:\t\tGNU long options: (standard)\n" msgstr "Opzioni POSIX:\t\topzioni lunghe GNU: (standard)\n" -#: main.c:787 +#: main.c:807 msgid "\t-f progfile\t\t--file=progfile\n" msgstr "\t-f fileprog\t\t--file=file-prog.\n" -#: main.c:788 +#: main.c:808 msgid "\t-F fs\t\t\t--field-separator=fs\n" msgstr "\t-F fs\t\t\t--field-separator=fs\n" -#: main.c:789 +#: main.c:809 msgid "\t-v var=val\t\t--assign=var=val\n" msgstr "\t-v var=valore\t\t--assign=var=valore\n" -#: main.c:790 +#: main.c:810 msgid "Short options:\t\tGNU long options: (extensions)\n" msgstr "Opzioni brevi:\t\topzioni lunghe GNU: (estensioni)\n" -#: main.c:791 +#: main.c:811 msgid "\t-b\t\t\t--characters-as-bytes\n" msgstr "\t-b\t\t\t--characters-as-bytes\n" -#: main.c:792 +#: main.c:812 msgid "\t-c\t\t\t--traditional\n" msgstr "\t-c\t\t\t--traditional\n" -#: main.c:793 +#: main.c:813 msgid "\t-C\t\t\t--copyright\n" msgstr "\t-C\t\t\t--copyright\n" -#: main.c:794 +#: main.c:814 msgid "\t-d[file]\t\t--dump-variables[=file]\n" msgstr "\t-d[file]\t\t--dump-variables[=file]\n" -#: main.c:795 +#: main.c:815 msgid "\t-D[file]\t\t--debug[=file]\n" msgstr "\t-D[file]\t\t--debug[=file]\n" -#: main.c:796 +#: main.c:816 msgid "\t-e 'program-text'\t--source='program-text'\n" msgstr "\t-e 'testo-del-programma'\t--source='testo-del-programma'\n" -#: main.c:797 +#: main.c:817 msgid "\t-E file\t\t\t--exec=file\n" msgstr "\t-E file\t\t\t--exec=file\n" -#: main.c:798 +#: main.c:818 msgid "\t-g\t\t\t--gen-pot\n" msgstr "\t-g\t\t\t--gen-pot\n" -#: main.c:799 +#: main.c:819 msgid "\t-h\t\t\t--help\n" msgstr "\t-h\t\t\t--help\n" -#: main.c:800 +#: main.c:820 msgid "\t-i includefile\t\t--include=includefile\n" msgstr "\t-i include_file\t\t--include=include_file\n" -#: main.c:801 +#: main.c:821 msgid "\t-l library\t\t--load=library\n" msgstr "\t-l libreria\t\t--load=libreria\n" -#: main.c:802 +#: main.c:822 msgid "\t-L [fatal]\t\t--lint[=fatal]\n" msgstr "\t-L [fatal]\t\t--lint[=fatal]\n" -#: main.c:803 +#: 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:804 +#: main.c:824 msgid "\t-M\t\t\t--bignum\n" msgstr "\t-M\t\t\t--bignum\n" -#: main.c:805 +#: main.c:825 msgid "\t-N\t\t\t--use-lc-numeric\n" msgstr "\t-N\t\t\t--use-lc-numeric\n" -#: main.c:806 +#: main.c:826 msgid "\t-o[file]\t\t--pretty-print[=file]\n" msgstr "\t-o[file]\t\t--pretty-print[=file]\n" -#: main.c:807 +#: main.c:827 msgid "\t-O\t\t\t--optimize\n" msgstr "\t-O\t\t\t--optimize\n" -#: main.c:808 +#: main.c:828 msgid "\t-p[file]\t\t--profile[=file]\n" msgstr "\t-p[file]\t\t--profile[=file]\n" -#: main.c:809 +#: main.c:829 msgid "\t-P\t\t\t--posix\n" msgstr "\t-P\t\t\t--posix\n" -#: main.c:810 +#: main.c:830 msgid "\t-r\t\t\t--re-interval\n" msgstr "\t-r\t\t\t--re-interval\n" -#: main.c:811 +#: main.c:831 msgid "\t-S\t\t\t--sandbox\n" msgstr "\t-S\t\t\t--sandbox\n" -#: main.c:812 +#: main.c:832 msgid "\t-t\t\t\t--lint-old\n" msgstr "\t-t\t\t\t--lint-old\n" -#: main.c:813 +#: main.c:833 msgid "\t-V\t\t\t--version\n" msgstr "\t-V\t\t\t--version\n" -#: main.c:815 +#: main.c:835 msgid "\t-W nostalgia\t\t--nostalgia\n" msgstr "\t-W nostalgia\t\t--nostalgia\n" -#: main.c:818 +#: main.c:838 msgid "\t-Y\t\t--parsedebug\n" msgstr "\t-Y\t\t--parsedebug\n" @@ -3101,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:827 +#: main.c:847 msgid "" "\n" "To report bugs, see node `Bugs' in `gawk.info', which is\n" @@ -3114,7 +3134,7 @@ msgstr "" "Problemi di traduzione, segnalare ad: azc100@gmail.com.\n" "\n" -#: main.c:831 +#: main.c:851 msgid "" "gawk is a pattern scanning and processing language.\n" "By default it reads standard input and writes standard output.\n" @@ -3124,7 +3144,7 @@ msgstr "" "Senza parametri, legge da 'standard input' e scrive su 'standard output'.\n" "\n" -#: main.c:835 +#: main.c:855 msgid "" "Examples:\n" "\tgawk '{ sum += $1 }; END { print sum }' file\n" @@ -3134,7 +3154,7 @@ msgstr "" "\tgawk '{ sum += $1 }; END { print sum }' file\n" "\tgawk -F: '{ print $1 }' /etc/passwd\n" -#: main.c:855 +#: main.c:880 #, c-format msgid "" "Copyright (C) 1989, 1991-%d Free Software Foundation.\n" @@ -3153,7 +3173,7 @@ msgstr "" "Licenza, o (a tua scelta) a una qualsiasi versione successiva.\n" "\n" -#: main.c:863 +#: main.c:888 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 +3187,7 @@ msgstr "" "Vedi la 'GNU General Public License' per ulteriori dettagli.\n" "\n" -#: main.c:869 +#: main.c:894 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 +3196,16 @@ msgstr "" "assieme a questo programma; se non è così, vedi http://www.gnu.org/" "licenses/.\n" -#: main.c:904 +#: main.c:931 msgid "-Ft does not set FS to tab in POSIX awk" msgstr "-Ft non imposta FS a `tab' nell'awk POSIX" -#: main.c:1181 +#: main.c:1208 #, c-format msgid "unknown value for field spec: %d\n" msgstr "valore non noto per specifica campo: %d\n" -#: main.c:1279 +#: main.c:1306 #, c-format msgid "" "%s: `%s' argument to `-v' not in `var=value' form\n" @@ -3194,48 +3214,48 @@ msgstr "" "%s: `%s' argomento di `-v' non in forma `var=valore'\n" "\n" -#: main.c:1305 +#: main.c:1332 #, c-format msgid "`%s' is not a legal variable name" msgstr "`%s' non è un nome di variabile ammesso" -#: main.c:1308 +#: main.c:1335 #, 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:1312 +#: main.c:1339 #, c-format msgid "cannot use gawk builtin `%s' as variable name" msgstr "nome funzione interna gawk `%s' non ammesso come nome variabile" -#: main.c:1317 +#: main.c:1344 #, c-format msgid "cannot use function `%s' as variable name" msgstr "non è possibile usare nome di funzione `%s' come nome di variabile" -#: main.c:1370 +#: main.c:1397 msgid "floating point exception" msgstr "eccezione floating point" -#: main.c:1377 +#: main.c:1404 msgid "fatal error: internal error" msgstr "errore fatale: errore interno" -#: main.c:1392 +#: main.c:1419 msgid "fatal error: internal error: segfault" msgstr "errore fatale: errore interno: segfault" -#: main.c:1404 +#: main.c:1431 msgid "fatal error: internal error: stack overflow" msgstr "errore fatale: errore interno: stack overflow" -#: main.c:1463 +#: main.c:1490 #, c-format msgid "no pre-opened fd %d" msgstr "manca `fd' pre-aperta %d" -#: main.c:1470 +#: main.c:1497 #, c-format msgid "could not pre-open /dev/null for fd %d" msgstr "non riesco a pre-aprire /dev/null per `fd' %d" @@ -3290,7 +3310,7 @@ msgstr "%s: argomento #%d, valore decimale sar msgid "%s: argument #%d negative value %Zd will give strange results" msgstr "%s: argomento #%d con valore negativo %Zd, darà risultati strani" -#: msg.c:61 +#: msg.c:68 #, c-format msgid "cmd. line:" msgstr "linea com.:" @@ -3345,16 +3365,16 @@ msgid "%s %s `%s': could not set close-on-exec: (fcntl F_SETFD: %s)" msgstr "" "%s %s `%s': non riesco a impostare 'close-on-exec': (fcntl F_SETFD: %s)" -#: profile.c:70 +#: profile.c:71 #, c-format msgid "could not open `%s' for writing: %s" msgstr "non riesco ad aprire `%s' in scrittura: %s" -#: profile.c:72 +#: profile.c:73 msgid "sending profile to standard error" msgstr "mando profilo a 'standard error'" -#: profile.c:188 +#: profile.c:193 #, c-format msgid "" "\t# %s block(s)\n" @@ -3363,7 +3383,7 @@ msgstr "" "\t# blocco(hi) %s\n" "\n" -#: profile.c:193 +#: profile.c:198 #, c-format msgid "" "\t# Rule(s)\n" @@ -3372,16 +3392,16 @@ msgstr "" "\t# Regola(e)\n" "\n" -#: profile.c:267 +#: profile.c:272 #, c-format msgid "internal error: %s with null vname" msgstr "errore interno: %s con `vname' nullo" -#: profile.c:530 +#: profile.c:537 msgid "internal error: builtin with null fname" msgstr "errore interno: funzione interna con `fname' nullo" -#: profile.c:942 +#: profile.c:949 #, c-format msgid "" "\t# Loaded extensions (-l and/or @load)\n" @@ -3390,12 +3410,12 @@ msgstr "" "\t# Estensioni caricate (-l e/o @load)\n" "\n" -#: profile.c:965 +#: profile.c:972 #, c-format msgid "\t# gawk profile, created %s\n" msgstr "\t# profilo gawk, creato %s\n" -#: profile.c:1351 +#: profile.c:1475 #, c-format msgid "" "\n" @@ -3404,17 +3424,12 @@ msgstr "" "\n" "\t# Funzioni, in ordine alfabetico\n" -#: profile.c:1389 +#: profile.c:1513 #, c-format msgid "redir2str: unknown redirection type %d" msgstr "redir2str: tipo di re-direzione non noto %d" -#: re.c:583 -#, c-format -msgid "range of the form `[%c-%c]' is locale dependent" -msgstr "intervallo della forma `[%c-%c]' dipende da `locale'" - -#: re.c:610 +#: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" msgstr "" @@ -3484,6 +3499,9 @@ msgstr ") o \\) non aperta" msgid "No previous regular expression" msgstr "Nessuna espressione regolare precedente" -#: symbol.c:740 +#: symbol.c:741 msgid "can not pop main context" msgstr "non posso salire più in alto nello stack" + +#~ msgid "range of the form `[%c-%c]' is locale dependent" +#~ msgstr "intervallo della forma `[%c-%c]' dipende da `locale'" diff --git a/po/vi.gmo b/po/vi.gmo index debb0899..2d663bc7 100644 Binary files a/po/vi.gmo and b/po/vi.gmo differ diff --git a/po/vi.po b/po/vi.po index 400477b8..187d31a4 100644 --- a/po/vi.po +++ b/po/vi.po @@ -1,15 +1,16 @@ # Vietnamese translation for Gawk. -# Copyright © 2013 Free Software Foundation, Inc. +# Bản dịch Tiếng Việt dành cho Gawk. +# Copyright © 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the gawk package. # Clytie Siddall , 2005-2010. -# Trần Ngá»c Quân , 2012-2013. +# Trần Ngá»c Quân , 2012-2014. # msgid "" msgstr "" -"Project-Id-Version: gawk-4.0.75\n" +"Project-Id-Version: gawk-4.1.0b\n" "Report-Msgid-Bugs-To: arnold@skeeve.com\n" -"POT-Creation-Date: 2013-05-09 16:05+0300\n" -"PO-Revision-Date: 2013-04-24 08:11+0700\n" +"POT-Creation-Date: 2014-01-14 22:23+0200\n" +"PO-Revision-Date: 2014-01-16 14:52+0700\n" "Last-Translator: Trần Ngá»c Quân \n" "Language-Team: Vietnamese \n" "Language: vi\n" @@ -20,92 +21,84 @@ msgstr "" "X-Generator: Poedit 1.5.5\n" "X-Poedit-SourceCharset: UTF-8\n" -#: array.c:254 +#: array.c:256 #, c-format msgid "from %s" msgstr "từ %s" -#: array.c:354 +#: array.c:357 msgid "attempt to use a scalar value as array" msgstr "cố dùng giá trị vô hướng như là má»™t mảng" -#: array.c:356 +#: array.c:359 #, c-format msgid "attempt to use scalar parameter `%s' as an array" msgstr "cố dùng tham số vô hướng “%s†như là mảng" -#: array.c:359 +#: array.c:362 #, c-format msgid "attempt to use scalar `%s' as an array" msgstr "cố dùng “%s†vô hướng như là mảng" -#: array.c:406 array.c:573 builtin.c:85 builtin.c:1591 builtin.c:1637 -#: builtin.c:1650 builtin.c:2078 builtin.c:2092 eval.c:1121 eval.c:1125 -#: eval.c:1524 +#: 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 #, 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" -#: array.c:580 +#: array.c:583 #, c-format msgid "delete: index `%s' not in array `%s'" msgstr "delete: (xoá) chỉ số “%s†không nằm trong mảng “%sâ€" -#: array.c:594 +#: array.c:597 #, c-format msgid "attempt to use scalar `%s[\"%.*s\"]' as an array" -msgstr "cố dùng “%s[â€%.*sâ€]†vô hướng như là mảng" +msgstr "cố dùng “%s[\"%.*s\"]†vô hướng như là mảng" -#: array.c:773 +#: array.c:776 msgid "adump: first argument not an array" msgstr "adump: đối số thứ nhất không phải là má»™t mảng" -#: array.c:812 +#: array.c:815 msgid "asort: second argument not an array" msgstr "asort: đối số thứ hai không phải là má»™t mảng" -#: array.c:813 +#: array.c:816 msgid "asorti: second argument not an array" msgstr "asorti: đối số thứ hai không phải là má»™t mảng" -#: array.c:820 +#: array.c:823 msgid "asort: first argument not an array" msgstr "asort: đối số thứ nhất không phải là má»™t mảng" -#: array.c:821 +#: array.c:824 msgid "asorti: first argument not an array" msgstr "asorti: đối số thứ nhất không phải là má»™t mảng" -#: array.c:828 +#: array.c:831 msgid "asort: cannot use a subarray of first arg for second arg" -msgstr "" -"asort (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ứ nhất cho tham số thứ hai" +msgstr "asort (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ứ nhất cho tham số thứ hai" -#: array.c:829 +#: array.c:832 msgid "asorti: cannot use a subarray of first arg for second arg" -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ứ nhất cho tham số thứ hai" +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ứ nhất cho tham số thứ hai" -#: array.c:834 +#: array.c:837 msgid "asort: cannot use a subarray of second arg for first arg" -msgstr "" -"asort (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" +msgstr "asort (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:835 +#: array.c:838 msgid "asorti: cannot use a subarray of second arg for first arg" -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" +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:1309 +#: array.c:1314 #, 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:1313 +#: array.c:1318 #, 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â€" @@ -121,8 +114,7 @@ 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 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)" +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 #, c-format @@ -131,16 +123,12 @@ msgstr "“%s†là má»™t hàm có sẵn nên nó không thể được định #: awkgram.y:419 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" +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 #, 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" +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 #, c-format @@ -149,13 +137,11 @@ msgstr "gặp giá trị case trùng trong thân chuyển đổi (switch body): #: awkgram.y:536 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)" +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:3699 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" +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:3691 msgid "`continue' is not allowed outside a loop" @@ -169,7 +155,7 @@ msgstr "“next†(kế tiếp) được dùng trong hành động %s" #: awkgram.y:824 #, c-format msgid "`nextfile' used in %s action" -msgstr "“nextfile†(tệp tin kế tiếp) được dùng trong hành động %s" +msgstr "“nextfile†(tập tin kế tiếp) được dùng trong hành động %s" #: awkgram.y:848 msgid "`return' used outside function context" @@ -177,9 +163,7 @@ msgstr "“return†(trở vá») được dùng ở ngoại ngữ cảnh hàm" #: awkgram.y:922 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â€â€â€" +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 msgid "`delete' is not allowed with SYMTAB" @@ -225,9 +209,7 @@ msgstr "“getline†không hợp lệ trong quy tắc “%sâ€" #: awkgram.y:1425 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 xác định." +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 msgid "old awk does not support multidimensional arrays" @@ -235,9 +217,7 @@ msgstr "awk cÅ© không há»— trợ mảng Ä‘a chiá»u" #: awkgram.y:1541 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" +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 msgid "indirect function calls are a gawk extension" @@ -252,20 +232,20 @@ msgstr "không thể dùng biến đặc biệt “%s†cho cú gá»i hàm giá msgid "invalid subscript expression" msgstr "biểu thức in thấp không hợp lệ" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:119 +#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "cảnh báo: " -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:151 +#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " -msgstr "nghiêm trá»ng: " +msgstr "lá»—i nghiêm trá»ng: " #: awkgram.y:2092 msgid "unexpected newline or end of string" -msgstr "gặp dòng má»›i bất ngá» hay kết thúc cá»§a chuá»—i" +msgstr "gặp dòng má»›i hay kết thúc chuá»—i bất ngá»" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:517 debug.c:533 -#: debug.c:2792 debug.c:5040 +#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 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)" @@ -275,9 +255,9 @@ msgstr "không thể mở tập tin nguồn “%s†để Ä‘á»c (%s)" 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:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:130 debug.c:5191 +#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:135 debug.c:5206 msgid "reason unknown" -msgstr "không biết sao" +msgstr "không rõ lý do" #: awkgram.y:2371 awkgram.y:2395 #, c-format @@ -292,7 +272,7 @@ msgstr "đã sẵn bao gồm tập tin nguồn “%sâ€" #: awkgram.y:2385 #, c-format msgid "already loaded shared library `%s'" -msgstr "thư viện dùng chung “%s†đã được sẵn được tải rồi " +msgstr "thư viện dùng chung “%s†đã được sẵn được tải rồi" #: awkgram.y:2420 msgid "@include is a gawk extension" @@ -300,7 +280,7 @@ msgstr "@include là phần mở rá»™ng cá»§a gawk" #: awkgram.y:2426 msgid "empty filename after @include" -msgstr "tệp tin trống sau @include" +msgstr "tập tin trống sau @include" #: awkgram.y:2470 msgid "@load is a gawk extension" @@ -308,7 +288,7 @@ msgstr "@load là má»™t phần mở rá»™ng gawk" #: awkgram.y:2476 msgid "empty filename after @load" -msgstr "tên tệp tin trống sau @load" +msgstr "tên tập tin trống sau @load" #: awkgram.y:2610 msgid "empty program text on command line" @@ -330,22 +310,17 @@ msgstr "tập tin nguồn không kết thúc vá»›i má»™t dòng má»›i" #: awkgram.y:3018 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" +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:3042 #, 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" +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:3046 #, 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" +msgstr "bá»™ sá»­a đổi biểu thức chính quy tawk “/.../%c†không hoạt động được trong gawk" #: awkgram.y:3053 msgid "unterminated regexp" @@ -361,7 +336,7 @@ msgstr "không thể mang khả năng dùng “\\#...†để tiếp tục dòn #: awkgram.y:3132 msgid "backslash not last character on line" -msgstr "xuyệc ngược không phải là ký tá»± cuối cùng nằm trên dòng" +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:3193 msgid "POSIX does not allow operator `**='" @@ -423,9 +398,7 @@ msgstr "“%d†không hợp lệ khi là số đối số cho “%sâ€" #: awkgram.y:3798 #, 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" +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:3803 #, c-format @@ -449,16 +422,15 @@ 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:3992 -#, fuzzy msgid "index: regexp constant as second argument is not allowed" -msgstr "index: (chỉ mục) đã nhận đối số thứ hai không phải là chuá»—i" +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:4045 #, 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:4102 debug.c:4021 debug.c:4064 debug.c:5189 +#: awkgram.y:4102 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)" @@ -470,7 +442,7 @@ msgstr "Ä‘ang gởi danh sách biến tá»›i thiết bị lá»—i chuẩn" #: awkgram.y:4111 #, c-format msgid "%s: close failed (%s)" -msgstr "%s: lá»—i đóng (%s)" +msgstr "%s: gặp lá»—i khi đóng (%s)" #: awkgram.y:4136 msgid "shadow_funcs() called twice!" @@ -500,22 +472,22 @@ msgstr "hàm “%sâ€: không thể dùng biến đặc biệt “%s†như là 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:4366 awkgram.y:4372 +#: awkgram.y:4359 awkgram.y:4365 #, c-format msgid "function `%s' called but never defined" -msgstr "hàm “%s†được gá»i nhưng mà chưa xác định" +msgstr "hàm “%s†được gá»i nhưng mà chưa định nghÄ©a" -#: awkgram.y:4376 +#: awkgram.y:4369 #, 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:4408 +#: awkgram.y:4401 #, 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:4467 +#: awkgram.y:4460 #, c-format msgid "" "function `%s' called with space between name and `(',\n" @@ -524,428 +496,421 @@ 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:4703 +#: awkgram.y:4696 msgid "division by zero attempted" -msgstr "cố gắng chia cho số không" +msgstr "gặp phép chia cho số không" -#: awkgram.y:4712 +#: awkgram.y:4705 #, c-format msgid "division by zero attempted in `%%'" -msgstr "thá»­ chia cho không trong “%%â€" +msgstr "gặp phép chia cho số không trong “%%â€" + +#: awkgram.y:5025 +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:5028 +#, c-format +msgid "invalid target of assignment (opcode %s)" +msgstr "gán Ä‘ich không hợp lệ (mã thi hành “%sâ€)" -#: builtin.c:128 +#: builtin.c:133 #, c-format msgid "%s to \"%s\" failed (%s)" msgstr "%s tá»›i “%s†gặp lá»—i (%s)" -#: builtin.c:129 +#: builtin.c:134 msgid "standard output" msgstr "đầu ra tiêu chuẩn" -#: builtin.c:143 +#: builtin.c:148 msgid "exp: received non-numeric argument" msgstr "exp: đã nhận đối số không phải thuá»™c số" -#: builtin.c:149 +#: builtin.c:154 #, c-format msgid "exp: argument %g is out of range" msgstr "exp: đối số “%g†nằm ngoài phạm vi" -#: builtin.c:224 +#: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" -msgstr "" -"fflush: không thể flush (đẩy dữ liệu lên đĩa): ống dẫn “%s†được mở để Ä‘á»c, " -"không phải để ghi" +msgstr "fflush: không thể flush (đẩy dữ liệu lên đĩa): ống dẫn “%s†được mở để Ä‘á»c, không phải để ghi" -#: builtin.c:227 +#: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" -msgstr "" -"fflush: không thể flush (đẩy dữ liệu vào đĩa): tập tin “%s†được mở để Ä‘á»c, " -"không phải để ghi" +msgstr "fflush: không thể flush (đẩy dữ liệu vào đĩa): tập tin “%s†được mở để Ä‘á»c, không phải để ghi" -#: builtin.c:239 +#: builtin.c:244 #, c-format 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ở" +msgstr "fflush: “%s†không phải là tập tin, ống dẫn hay đồng tiến trình được mở" -#: builtin.c:357 +#: builtin.c:362 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:359 +#: builtin.c:364 msgid "index: received non-string second argument" -msgstr "index: (chỉ mục) đã nhận đối số thứ hai không phải là chuá»—i" +msgstr "index: (chỉ số) đã nhận đối số thứ hai không phải là chuá»—i" -#: builtin.c:483 mpfr.c:757 +#: builtin.c:488 mpfr.c:757 msgid "int: received non-numeric argument" msgstr "int: (số nguyên?) đã nhận đối số không phải thuá»™c số" -#: builtin.c:520 +#: builtin.c:525 msgid "length: received array argument" msgstr "length: (chiá»u dài) đã nhận mảng đối số" -#: builtin.c:523 +#: builtin.c:528 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:539 +#: builtin.c:544 msgid "length: received non-string argument" msgstr "length: (chiá»u dài) đã nhận đối số không phải chuá»—i" -#: builtin.c:570 +#: builtin.c:575 msgid "log: received non-numeric argument" -msgstr "log: (bản ghi) đã nhận đối số không phải thuá»™c số" +msgstr "log: (nhật ký) đã nhận đối số không phải thuá»™c số" -#: builtin.c:573 +#: builtin.c:578 #, c-format msgid "log: received negative argument %g" -msgstr "log: (bản ghi) đã nhận đối số âm “%gâ€" +msgstr "log: (nhật ký) đã nhận đối số âm “%gâ€" -#: builtin.c:771 builtin.c:776 +#: builtin.c:776 builtin.c:781 msgid "fatal: must use `count$' on all formats or none" -msgstr "nghiêm trá»ng: phải dùng “count$†vá»›i má»i dạng thức hay không gì cả" +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:846 +#: builtin.c:851 #, 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:848 +#: builtin.c:853 #, c-format msgid "precision is ignored for `%%' specifier" msgstr "độ chính xác bị bá» qua đối vá»›i bá»™ chỉ định “%%â€" -#: builtin.c:850 +#: builtin.c:855 #, 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:901 +#: builtin.c:906 msgid "fatal: `$' is not permitted in awk formats" -msgstr "nghiêm trá»ng: không cho phép “$†trong định dạng awk" +msgstr "lá»—i nghiêm trá»ng: không cho phép “$†trong định dạng awk" -#: builtin.c:910 +#: builtin.c:915 msgid "fatal: arg count with `$' must be > 0" -msgstr "nghiêm trá»ng: số lượng đối số vá»›i “$†phải >0" +msgstr "lá»—i nghiêm trá»ng: số lượng đối số vá»›i “$†phải >0" -#: builtin.c:914 +#: builtin.c:919 #, c-format msgid "fatal: arg count %ld greater than total number of supplied arguments" -msgstr "nghiêm trá»ng: số lượng đối số %ld lá»›n hÆ¡n tổng số đối số được cung cấp" +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:918 +#: builtin.c:923 msgid "fatal: `$' not permitted after period in format" -msgstr "nghiêm trá»ng: không cho phép “$†nằm sau dấu chấm trong định dạng" +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:934 +#: builtin.c:939 msgid "fatal: no `$' supplied for positional field width or precision" -msgstr "" -"nghiêm trá»ng: chưa cung cấp “$†cho độ rá»™ng trưá»ng thuá»™c vị trí hay cho độ " -"chính xác" +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:1006 +#: builtin.c:1011 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:1010 +#: builtin.c:1015 msgid "fatal: `l' is not permitted in POSIX awk formats" -msgstr "nghiêm trá»ng: không cho phép chữ “l†nằm trong định dạng awk POSIX" +msgstr "lá»—i nghiêm trá»ng: không cho phép chữ “l†nằm trong định dạng awk POSIX" -#: builtin.c:1023 +#: builtin.c:1028 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:1027 +#: builtin.c:1032 msgid "fatal: `L' is not permitted in POSIX awk formats" -msgstr "nghiêm trá»ng: không cho phép chữ “L†nằm trong định dạng awk POSIX" +msgstr "lá»—i nghiêm trá»ng: không cho phép chữ “L†nằm trong định dạng awk POSIX" -#: builtin.c:1040 +#: builtin.c:1045 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:1044 +#: builtin.c:1049 msgid "fatal: `h' is not permitted in POSIX awk formats" -msgstr "nghiêm trá»ng: không cho phép chữ “h†nằm trong định dạng awk POSIX" +msgstr "lá»—i nghiêm trá»ng: không cho phép chữ “h†nằm trong định dạng awk POSIX" -#: builtin.c:1439 +#: builtin.c:1447 #, c-format msgid "[s]printf: value %g is out of range for `%%%c' format" -msgstr "[s]printf: giá trị %g ở ngoại phạm vị cho dạng thức “%%%câ€" +msgstr "[s]printf: giá trị %g ở ngoại phạm vi cho dạng thức “%%%câ€" -#: builtin.c:1537 +#: builtin.c:1545 #, 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" +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:1542 +#: builtin.c:1550 msgid "fatal: not enough arguments to satisfy format string" -msgstr "nghiêm trá»ng: chưa có đủ đối số để đáp ứng chuá»—i định dạng" +msgstr "lá»—i nghiêm trá»ng: chưa có đủ đối số để đáp ứng chuá»—i định dạng" -#: builtin.c:1544 +#: builtin.c:1552 msgid "^ ran out for this one" msgstr "bị hết “^†cho cái này" -#: builtin.c:1551 +#: builtin.c:1559 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:1554 +#: builtin.c:1562 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:1610 +#: builtin.c:1618 msgid "sprintf: no arguments" msgstr "sprintf: không có đối số" -#: builtin.c:1633 builtin.c:1644 +#: builtin.c:1641 builtin.c:1652 msgid "printf: no arguments" msgstr "printf: không có đối số" -#: builtin.c:1687 +#: builtin.c:1695 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:1691 +#: builtin.c:1699 #, 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:1722 +#: builtin.c:1730 #, c-format msgid "substr: length %g is not >= 1" -msgstr "substr: (chuá»—i phụ) độ dài %g không phải ≥1" +msgstr "substr: (chuá»—i con) độ dài %g không phải ≥1" -#: builtin.c:1724 +#: builtin.c:1732 #, c-format msgid "substr: length %g is not >= 0" -msgstr "substr: (chuá»—i phụ) độ dài %g không phải ≥0" +msgstr "substr: (chuá»—i con) độ dài %g không phải ≥0" -#: builtin.c:1731 +#: builtin.c:1739 #, c-format msgid "substr: non-integer length %g will be truncated" -msgstr "substr: (chuá»—i phụ) sẽ cắt xén độ dài không phải số nguyên “%gâ€" +msgstr "substr: (chuá»—i con) sẽ cắt xén độ dài không phải số nguyên “%gâ€" -#: builtin.c:1736 +#: builtin.c:1744 #, c-format msgid "substr: length %g too big for string indexing, truncating to %g" -msgstr "substr: độ dài %g quá lá»›n để chỉ mục chuá»—i nên xén ngắn thành %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:1748 +#: builtin.c:1756 #, c-format msgid "substr: start index %g is invalid, using 1" -msgstr "substr: (chuá»—i phụ) số chỉ mục đầu “%g†không hợp lệ nên dùng 1" +msgstr "substr: (chuá»—i con) chỉ số đầu “%g†không hợp lệ nên dùng 1" -#: builtin.c:1753 +#: builtin.c:1761 #, c-format msgid "substr: non-integer start index %g will be truncated" -msgstr "" -"substr: (chuá»—i phụ) số chỉ mục đầu không phải số nguyên “%g†sẽ bị cắt ngắn" +msgstr "substr: (chuá»—i con) chỉ số đầu không phải số nguyên “%g†sẽ bị cắt ngắn" -#: builtin.c:1778 +#: builtin.c:1786 msgid "substr: source string is zero length" msgstr "substr: (chuá»—i con) chuá»—i nguồn có độ dài số không" -#: builtin.c:1794 +#: builtin.c:1802 #, c-format msgid "substr: start index %g is past end of string" -msgstr "substr: (chuá»—i phụ) số chỉ mục đầu %g nằm sau kết thúc cá»§a chuá»—i" +msgstr "substr: (chuá»—i con) chỉ số đầu %g nằm sau kết thúc cá»§a chuá»—i" -#: builtin.c:1802 +#: builtin.c:1810 #, c-format -msgid "" -"substr: length %g at start index %g exceeds length of first argument (%lu)" -msgstr "" -"substr: (chuá»—i phụ) độ dài %g tại số chỉ mục đầu %g vượt quá độ dài cá»§a đối " -"số đầu (%lu)" +msgid "substr: length %g at start index %g exceeds length of first argument (%lu)" +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:1876 +#: builtin.c:1884 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ố" +msgstr "strftime: giá trị định dạng trong PROCINFO[â€strftimeâ€] phải thuá»™c kiểu số" -#: builtin.c:1899 +#: builtin.c:1907 msgid "strftime: received non-numeric second argument" msgstr "strftime: đã nhận đối số thứ hai khác thuá»™c số" -#: builtin.c:1903 +#: builtin.c:1911 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:1910 +#: builtin.c:1918 msgid "strftime: received non-string first argument" msgstr "strftime: đã nhận đối số thứ nhất khác chuá»—i" -#: builtin.c:1917 +#: builtin.c:1925 msgid "strftime: received empty format string" msgstr "strftime: đã nhận chuá»—i định dạng rá»—ng" -#: builtin.c:1983 +#: builtin.c:1991 msgid "mktime: received non-string argument" msgstr "mktime: đã nhận đối số khác chuá»—i" -#: builtin.c:2000 +#: builtin.c:2008 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:2035 +#: builtin.c:2043 msgid "'system' function not allowed in sandbox mode" msgstr "hàm “system†không cho phép ở chế độ khuôn đúc" -#: builtin.c:2040 +#: builtin.c:2048 msgid "system: received non-string argument" msgstr "system: (hệ thống) đã nhận đối số khác chuá»—i" -#: builtin.c:2160 +#: builtin.c:2168 #, c-format msgid "reference to uninitialized field `$%d'" -msgstr "gặp tham chiếu đến trưá»ng chưa được sở khởi “$%dâ€" +msgstr "gặp tham chiếu đến trưá»ng chưa được khởi tạo “$%dâ€" -#: builtin.c:2247 +#: builtin.c:2255 msgid "tolower: received non-string argument" msgstr "tolower: (đến thấp hÆ¡n) đã nhận đối số khác chuá»—i" -#: builtin.c:2281 +#: builtin.c:2289 msgid "toupper: received non-string argument" msgstr "toupper: (đến cao hÆ¡n) đã nhận đối số khác chuá»—i" -#: builtin.c:2317 mpfr.c:672 +#: builtin.c:2325 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2: đã nhận đối số thứ nhất khác thuá»™c số" -#: builtin.c:2319 mpfr.c:674 +#: builtin.c:2327 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2: đã nhận đối số thứ hai khác thuá»™c số" -#: builtin.c:2338 +#: builtin.c:2346 msgid "sin: received non-numeric argument" msgstr "sin: đã nhận đối số không phải thuá»™c số" -#: builtin.c:2354 +#: builtin.c:2362 msgid "cos: received non-numeric argument" msgstr "cos: đã nhận đối số không phải thuá»™c số" -#: builtin.c:2407 mpfr.c:1156 +#: builtin.c:2415 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand: đã nhận đối số không phải thuá»™c số" -#: builtin.c:2438 +#: builtin.c:2446 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:2710 +#: builtin.c:2718 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub: đối số thứ ba cá»§a 0 được xá»­ lý như 1" -#: builtin.c:3003 +#: builtin.c:3014 msgid "lshift: received non-numeric first argument" msgstr "lshift: đã nhận đối số đầu không phải thuá»™c số" -#: builtin.c:3005 +#: builtin.c:3016 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:3011 +#: builtin.c:3022 #, 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:3013 +#: builtin.c:3024 #, 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:3015 +#: builtin.c:3026 #, 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" +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:3040 +#: builtin.c:3051 msgid "rshift: received non-numeric first argument" msgstr "rshift: đã nhận đối số thứ nhất khác thuá»™c số" -#: builtin.c:3042 +#: builtin.c:3053 msgid "rshift: received non-numeric second argument" -msgstr "rshift: (dịch bên phải) đã nhận đối số thứ hai khác thuá»™c số" +msgstr "rshift: (dịch phải) đã nhận đối số thứ hai khác thuá»™c số" -#: builtin.c:3048 +#: builtin.c:3059 #, 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:3050 +#: builtin.c:3061 #, 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:3052 +#: builtin.c:3063 #, 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" +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:3077 mpfr.c:968 +#: builtin.c:3088 mpfr.c:968 msgid "and: called with less than two arguments" msgstr "and: được gá»i vá»›i ít hÆ¡n hai đối số" -#: builtin.c:3082 +#: builtin.c:3093 #, c-format msgid "and: argument %d is non-numeric" msgstr "and: đối số %d không phải thuá»™c số" -#: builtin.c:3086 +#: builtin.c:3097 #, c-format msgid "and: argument %d negative value %g will give strange results" -msgstr "and: đối số %d giá trị âm %g sẽ đưa lại kết quả không như mong muốn" +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:3109 mpfr.c:1000 +#: builtin.c:3120 mpfr.c:1000 msgid "or: called with less than two arguments" -msgstr "or: được gá»i vá»›i ít hÆ¡n hai đối số" +msgstr "or: (hoặc) được gá»i vá»›i ít hÆ¡n hai đối số" -#: builtin.c:3114 +#: builtin.c:3125 #, c-format msgid "or: argument %d is non-numeric" -msgstr "or: đối số %d không thuá»™c kiểu số" +msgstr "or: (hoặc) đối số %d không thuá»™c kiểu số" -#: builtin.c:3118 +#: builtin.c:3129 #, c-format msgid "or: argument %d negative value %g will give strange results" -msgstr "or: đối số %d giá trị âm %g sẽ đưa lại kết quả không như mong muốn" +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:3140 mpfr.c:1031 +#: builtin.c:3151 mpfr.c:1031 msgid "xor: called with less than two arguments" msgstr "xor: được gá»i vá»›i ít hÆ¡n hai đối số" -#: builtin.c:3146 +#: builtin.c:3157 #, c-format msgid "xor: argument %d is non-numeric" msgstr "xor: đối số %d không thuá»™c kiểu số" -#: builtin.c:3150 +#: builtin.c:3161 #, 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:3175 mpfr.c:787 +#: builtin.c:3186 mpfr.c:787 msgid "compl: received non-numeric argument" -msgstr "compl: (biên dịch) đã nhận đối số khác thuá»™c số" +msgstr "compl: (biên dịch) đã nhận được đối số không-phải-số" -#: builtin.c:3181 +#: builtin.c:3192 #, 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:3183 +#: builtin.c:3194 #, 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:3352 +#: builtin.c:3363 #, 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ệ" @@ -973,7 +938,7 @@ msgstr "nguồn “%sâ€: đã sẵn có trong nguồn rồi." #: command.y:326 #, c-format msgid "save \"%s\": command not permitted." -msgstr "ghi “%sâ€: không đủ thẩm quyá»n." +msgstr "ghi “%sâ€: lệnh không đủ thẩm quyá»n." #: command.y:339 msgid "Can't use command `commands' for breakpoint/watchpoint commands" @@ -1012,7 +977,7 @@ msgstr "trace: tùy chá»n không hợp lệ - “%sâ€" #: command.y:387 msgid "condition: invalid breakpoint/watchpoint number" -msgstr "Ä‘iá»u kiện: số hiệu Ä‘iểm ngắt hay Ä‘iểm theo dõi không hợp lệ" +msgstr "condition: Ä‘iá»u kiện: số hiệu Ä‘iểm ngắt hay Ä‘iểm theo dõi không hợp lệ" #: command.y:449 msgid "argument not a string" @@ -1051,34 +1016,24 @@ msgid "non-zero integer value" msgstr "giá trị số nguyên khác không" #: command.y:817 -msgid "" -"backtrace [N] - 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)." +msgid "backtrace [N] - 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:819 -msgid "" -"break [[filename:]N|function] - set breakpoint at the specified location." -msgstr "break [[TẬP-TIN:]N|hàm] - đặt Ä‘iểm ngắt tại vị trí đã cho." +msgid "break [[filename:]N|function] - set breakpoint at the specified location." +msgstr "break [[tên_tập_tin:]N|hàm] - đặt Ä‘iểm ngắt tại vị trí đã cho." #: command.y:821 msgid "clear [[filename:]N|function] - delete breakpoints previously set." -msgstr "clear [[filename:]N|function] - xóa các Ä‘iểm ngắt được đặt trước đây." +msgstr "clear [[tên_tập_tin:]N|function] - xóa các Ä‘iểm ngắt được đặt trước đây." #: command.y:823 -msgid "" -"commands [num] - starts a list of commands to be executed at a breakpoint" -"(watchpoint) hit." -msgstr "" -"commands [số] - chạy má»™t danh sách các câu lệnh được thá»±c thi tại Ä‘iểm ngắt " -"(hay Ä‘iểm theo dõi) tìm được." +msgid "commands [num] - starts a list of commands to be executed at a breakpoint(watchpoint) hit." +msgstr "commands [số] - chạy má»™t danh sách các câu lệnh được thá»±c thi tại Ä‘iểm ngắt (hay Ä‘iểm theo dõi) tìm được." #: command.y:825 msgid "condition num [expr] - set or clear breakpoint or watchpoint condition." -msgstr "" -"condition num [expr] - đặt hay xóa Ä‘iểm ngắt hay Ä‘iá»u kiện Ä‘iểm theo dõi." +msgstr "condition num [expr] - đặt hay xóa Ä‘iểm ngắt hay Ä‘iá»u kiện Ä‘iểm theo dõi." #: command.y:827 msgid "continue [COUNT] - continue program being debugged." @@ -1086,11 +1041,11 @@ msgstr "continue [Sá»_LƯỢNG] - tiếp tục chương trình Ä‘ang được g #: command.y:829 msgid "delete [breakpoints] [range] - delete specified breakpoints." -msgstr "delete [Ä‘iểm ngắt] [vùng] - xóa các Ä‘iểm ngắt đã chỉ ra." +msgstr "delete [Ä‘iểm_ngắt] [vùng] - xóa các Ä‘iểm ngắt đã chỉ ra." #: command.y:831 msgid "disable [breakpoints] [range] - disable specified breakpoints." -msgstr "disable [Ä‘iểm ngắt] [vùng] - tắt các Ä‘iểm ngắt đã chỉ định." +msgstr "disable [Ä‘iểm_ngắt] [vùng] - tắt các Ä‘iểm ngắt đã chỉ định." #: command.y:833 msgid "display [var] - print value of variable each time the program stops." @@ -1102,12 +1057,11 @@ msgstr "down [N] - chuyển xuống N khung stack." #: command.y:837 msgid "dump [filename] - dump instructions to file or stdout." -msgstr "" -"dump [tên-tập-tin] - dump các chỉ lệnh ra tập tin hay đầu ra tiêu chuẩn." +msgstr "dump [tên_tập_tin] - dump các chỉ lệnh ra tập tin hay đầu ra tiêu chuẩn." #: command.y:839 msgid "enable [once|del] [breakpoints] [range] - enable specified breakpoints." -msgstr "enable [once|del] [breakpoints] [range] - bật các Ä‘iểm ngắt đã chỉ ra." +msgstr "enable [once|del] [Ä‘iểm_ngắt] [range] - bật các Ä‘iểm ngắt đã chỉ ra." #: command.y:841 msgid "end - end a list of commands or awk statements." @@ -1131,31 +1085,23 @@ msgstr "help [lệnh] - hiển thị danh sách các lệnh hay giải thích c #: command.y:851 msgid "ignore N COUNT - set ignore-count of breakpoint number N to COUNT." -msgstr "ignore N SÔ-LƯỢNG - đặt số lượng Ä‘iểm ngắt bị bá» qua." +msgstr "ignore N Sá»-LƯỢNG - đặt số lượng Ä‘iểm ngắt bị bá» qua." #: command.y:853 -msgid "" -"info topic - source|sources|variables|functions|break|frame|args|locals|" -"display|watch." -msgstr "" -"info chá»§_đỠ- nguồn|nguồn|biến|hàm|break|frame|args|locals|display|watch." +msgid "info topic - source|sources|variables|functions|break|frame|args|locals|display|watch." +msgstr "info chá»§_đỠ- nguồn|nguồn|biến|hàm|break|frame|args|locals|display|watch." #: command.y:855 msgid "list [-|+|[filename:]lineno|function|range] - list specified line(s)." -msgstr "list [-|+|[TẬP-TIN:]số_dòng|hàm|vùng] - liệt kê các dòng đã chỉ định." +msgstr "list [-|+|[tập_tin:]số_dòng|hàm|vùng] - liệt kê các dòng đã chỉ định." #: command.y:857 msgid "next [COUNT] - step program, proceeding through subroutine calls." -msgstr "" -"next [Sá»_LƯỢNG] - nhảy má»™t chỉ lệnh, nhưng được xá»­ lý thông qua gá»i thá»§ " -"tục con." +msgstr "next [Sá»_LƯỢNG] - nhảy má»™t chỉ lệnh, nhưng được xá»­ lý thông qua gá»i thá»§ tục con." #: command.y:859 -msgid "" -"nexti [COUNT] - step one instruction, but proceed through subroutine calls." -msgstr "" -"nexti [Sá»_LƯỢNG] - nhảy từng chỉ lệnh, nhưng được xá»­ lý thông qua gá»i thá»§ " -"tục con." +msgid "nexti [COUNT] - step one instruction, but proceed through subroutine calls." +msgstr "nexti [Sá»_LƯỢNG] - nhảy từng chỉ lệnh, nhưng được xá»­ lý thông qua gá»i thá»§ tục con." #: command.y:861 msgid "option [name[=value]] - set or display debugger option(s)." @@ -1175,9 +1121,7 @@ msgstr "quit - thoát khá»i chương trình gỡ lá»—i." #: command.y:869 msgid "return [value] - make selected stack frame return to its caller." -msgstr "" -"return [giá-trị] - làm cho khung stack đã chá»n trả vá» giá trị này cho bá»™ gá»i " -"nó." +msgstr "return [giá-trị] - làm cho khung stack đã chá»n trả vá» giá trị này cho bá»™ gá»i nó." #: command.y:871 msgid "run - start or restart executing program." @@ -1189,14 +1133,11 @@ msgstr "save tên_tập_tin - ghi các câu lệnh từ phiên làm việc vào #: command.y:877 msgid "set var = value - assign value to a scalar variable." -msgstr "set biến = giá_trị - gán giá trị cho má»™t biến scalar." +msgstr "set biến = giá_trị - gán giá trị cho má»™t biến vô hướng." #: command.y:879 -msgid "" -"silent - suspends usual message when stopped at a breakpoint/watchpoint." -msgstr "" -"silent - chặn các lá»i nhắn thông thưá»ng khi dừng tại Ä‘iểm ngăt hay Ä‘iểm theo " -"dõi." +msgid "silent - suspends usual message when stopped at a breakpoint/watchpoint." +msgstr "silent - chặn các lá»i nhắn thông thưá»ng khi dừng tại Ä‘iểm ngăt hay Ä‘iểm theo dõi." #: command.y:881 msgid "source file - execute commands from file." @@ -1204,9 +1145,7 @@ msgstr "source file - thá»±c hiện các câu lệnh từ tập tin." #: command.y:883 msgid "step [COUNT] - step program until it reaches a different source line." -msgstr "" -"step [Sá»_LƯỢNG] - chạy từng bước chương trình cho đến khi nó gặp má»™t dòng " -"nguồn khác." +msgstr "step [Sá»_LƯỢNG] - chạy từng bước chương trình cho đến khi nó gặp má»™t dòng nguồn khác." #: command.y:885 msgid "stepi [COUNT] - step one instruction exactly." @@ -1214,7 +1153,7 @@ msgstr "stepi [Sá»_LƯỢNG] - chạy từng lệnh má»™t." #: command.y:887 msgid "tbreak [[filename:]N|function] - set a temporary breakpoint." -msgstr "tbreak [[TẬP-TIN:]N|hàm] - đặt Ä‘iểm ngắt tạm thá»i." +msgstr "tbreak [[tên_tập_tin:]N|hàm] - đặt Ä‘iểm ngắt tạm thá»i." #: command.y:889 msgid "trace on|off - print instruction before executing." @@ -1225,12 +1164,8 @@ msgid "undisplay [N] - remove variable(s) from automatic display list." msgstr "undisplay [N] - gỡ bá» các biến từ danh sách hiển thị tá»± động." #: command.y:893 -msgid "" -"until [[filename:]N|function] - execute until program reaches a different " -"line or line N within current frame." -msgstr "" -"until [[TẬP-TIN:]N|hàm] - thá»±c hiện cho đến khi chương trình đạt đến dòng " -"khác hay dòng N trong khung hiện tại." +msgid "until [[filename:]N|function] - execute until program reaches a different line or line N within current frame." +msgstr "until [[tên_tập_tin:]N|hàm] - thá»±c hiện cho đến khi chương trình đạt đến dòng khác hay dòng N trong khung hiện tại." #: command.y:895 msgid "unwatch [N] - remove variable(s) from watch list." @@ -1244,7 +1179,7 @@ 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:395 msg.c:128 +#: command.y:1011 debug.c:401 msg.c:135 #, c-format msgid "error: " msgstr "lá»—i: " @@ -1282,148 +1217,148 @@ msgstr "ký tá»± không hợp lệ" msgid "undefined command: %s\n" msgstr "lệnh chưa định nghÄ©a: %s\n" -#: debug.c:246 +#: debug.c:252 msgid "set or show the number of lines to keep in history file." msgstr "đặt hay hiển thị số dòng được lưu giữ trong tập tin lịch sá»­." -#: debug.c:248 +#: debug.c:254 msgid "set or show the list command window size." msgstr "đặt hay hiển thị kích thước cá»­a sổ danh sách lệnh." -#: debug.c:250 +#: debug.c:256 msgid "set or show gawk output file." msgstr "đặt hay hiển thị tập tin kết xuất gawk." -#: debug.c:252 +#: debug.c:258 msgid "set or show debugger prompt." msgstr "đặt hay hiển thị dấu nhắc gỡ lá»—i." -#: debug.c:254 +#: debug.c:260 msgid "(un)set or show saving of command history (value=on|off)." msgstr "(bá») đặt hay ghi lại lịch sá»­ lệnh (giá trị=on|off)." -#: debug.c:256 +#: debug.c:262 msgid "(un)set or show saving of options (value=on|off)." msgstr "đặt/bỠđặt hay hiển thị các tùy chá»n được ghi lại (giá_trị=on|off)." -#: debug.c:258 +#: debug.c:264 msgid "(un)set or show instruction tracing (value=on|off)." msgstr "(bá») đặt hay hiển thị việc theo vết chỉ lệnh (giá trị=on|off)." -#: debug.c:339 +#: debug.c:345 msgid "program not running." msgstr "chương trình không chạy." -#: debug.c:442 debug.c:597 +#: debug.c:448 debug.c:606 #, c-format msgid "can't read source file `%s' (%s)" msgstr "không thể Ä‘á»c tập tin nguồn “%s†(%s)" -#: debug.c:447 +#: debug.c:453 #, c-format msgid "source file `%s' is empty.\n" msgstr "tập tin nguồn “%s†bị trống rá»—ng.\n" -#: debug.c:474 +#: debug.c:480 msgid "no current source file." msgstr "không có tập tin nguồn hiện tại." -#: debug.c:499 +#: debug.c:505 #, c-format msgid "cannot find source file named `%s' (%s)" msgstr "không thể tìm thấy tập tin nguồn có tên “%s†(%s)" -#: debug.c:523 +#: debug.c:529 #, c-format msgid "WARNING: source file `%s' modified since program compilation.\n" msgstr "CẢNH BÃO: tập tin nguồn “%s†bị sá»­a đổi kể từ lúc nó được dịch.\n" -#: debug.c:542 +#: debug.c:551 #, c-format msgid "line number %d out of range; `%s' has %d lines" msgstr "số dòng %d nằm ngoài phạm vi; “%s†có %d dòng" -#: debug.c:602 +#: debug.c:611 #, c-format msgid "unexpected eof while reading file `%s', line %d" msgstr "gặp kết thúc tập tin bất ngá» khi Ä‘ang Ä‘á»c tập tin “%sâ€, dòng %d" -#: debug.c:611 +#: debug.c:620 #, c-format msgid "source file `%s' modified since start of program execution" msgstr "tập tin nguồn “%s†đã bị sá»­a đổi kể từ lúc chưong trình được khởi chạy" -#: debug.c:723 +#: debug.c:732 #, c-format msgid "Current source file: %s\n" msgstr "Tập tin nguồn hiện tại: %s\n" -#: debug.c:724 +#: debug.c:733 #, c-format msgid "Number of lines: %d\n" msgstr "Số dòng: %d\n" -#: debug.c:731 +#: debug.c:740 #, c-format msgid "Source file (lines): %s (%d)\n" msgstr "Tập tin nguồn (dòng): %s (%d)\n" -#: debug.c:745 +#: debug.c:754 msgid "" "Number Disp Enabled Location\n" "\n" msgstr "" -"Số Hiển thị Bật Vị trí\n" +"Số Hthị Bật Vị trí\n" "\n" -#: debug.c:756 +#: debug.c:765 #, c-format msgid "\tno of hits = %ld\n" msgstr "\tkhông gợi ý = %ld\n" -#: debug.c:758 +#: debug.c:767 #, c-format msgid "\tignore next %ld hit(s)\n" msgstr "\tbá» qua %ld gợi ý tiếp\n" -#: debug.c:760 debug.c:900 +#: debug.c:769 debug.c:909 #, c-format msgid "\tstop condition: %s\n" msgstr "\tdừng Ä‘iá»u kiện: %s\n" -#: debug.c:762 debug.c:902 +#: debug.c:771 debug.c:911 msgid "\tcommands:\n" msgstr "\tlệnh:\n" -#: debug.c:784 +#: debug.c:793 #, c-format msgid "Current frame: " msgstr "Khung hiện tại:" -#: debug.c:787 +#: debug.c:796 #, c-format msgid "Called by frame: " msgstr "ÄÆ°á»£c gá»i bởi khung:" -#: debug.c:791 +#: debug.c:800 #, c-format msgid "Caller of frame: " msgstr "Bá»™ gá»i cá»§a khung:" -#: debug.c:809 +#: debug.c:818 #, c-format msgid "None in main().\n" msgstr "Không có gì trong main().\n" -#: debug.c:839 +#: debug.c:848 msgid "No arguments.\n" msgstr "Không có đối số nào.\n" -#: debug.c:840 +#: debug.c:849 msgid "No locals.\n" msgstr "Không có ná»™i bá»™.\n" -#: debug.c:848 +#: debug.c:857 msgid "" "All defined variables:\n" "\n" @@ -1431,7 +1366,7 @@ msgstr "" "Tất cả các biến đã định nghÄ©a:\n" "\n" -#: debug.c:858 +#: debug.c:867 msgid "" "All defined functions:\n" "\n" @@ -1439,7 +1374,7 @@ msgstr "" "Tất cả các hàm đã định nghÄ©a:\n" "\n" -#: debug.c:877 +#: debug.c:886 msgid "" "Auto-display variables:\n" "\n" @@ -1447,7 +1382,7 @@ msgstr "" "Các biến hiển thị tá»± động:\n" "\n" -#: debug.c:880 +#: debug.c:889 msgid "" "Watch variables:\n" "\n" @@ -1455,362 +1390,357 @@ msgstr "" "Các biến theo dõi:\n" "\n" -#: debug.c:1020 +#: debug.c:1029 #, c-format msgid "no symbol `%s' in current context\n" msgstr "không có ký hiệu “%s†trong ngữ cảnh hiện tại\n" -#: debug.c:1032 debug.c:1418 +#: debug.c:1041 debug.c:1427 #, c-format msgid "`%s' is not an array\n" msgstr "“%s†không phải là má»™t mảng\n" -#: debug.c:1046 +#: debug.c:1055 #, c-format msgid "$%ld = uninitialized field\n" msgstr "$%ld = trưá»ng chưa được khởi tạo\n" -#: debug.c:1067 +#: debug.c:1076 #, c-format msgid "array `%s' is empty\n" msgstr "mảng “%s†trống rá»—ng\n" -#: debug.c:1110 debug.c:1162 +#: debug.c:1119 debug.c:1171 #, c-format msgid "[\"%s\"] not in array `%s'\n" msgstr "[â€%sâ€] không nằm trong mảng “%sâ€\n" -#: debug.c:1166 +#: debug.c:1175 #, c-format msgid "`%s[\"%s\"]' is not an array\n" msgstr "“%s[â€%sâ€]†không phải là má»™t mảng\n" -#: debug.c:1227 debug.c:4949 +#: debug.c:1236 debug.c:4964 #, c-format msgid "`%s' is not a scalar variable" msgstr "“%s†không phải là biến scalar" -#: debug.c:1249 debug.c:4979 +#: debug.c:1258 debug.c:4994 #, c-format msgid "attempt to use array `%s[\"%s\"]' in a scalar context" msgstr "cố dùng mảng “%s[â€%sâ€]†trong má»™t ngữ cảnh vô hướng" -#: debug.c:1271 debug.c:4990 +#: debug.c:1280 debug.c:5005 #, c-format msgid "attempt to use scalar `%s[\"%s\"]' as array" msgstr "cố dùng kiểu vô hướng “%s[â€%sâ€]†như là mảng" -#: debug.c:1414 +#: debug.c:1423 #, c-format msgid "`%s' is a function" msgstr "“%s†là má»™t hàm" -#: debug.c:1456 +#: debug.c:1465 #, c-format msgid "watchpoint %d is unconditional\n" msgstr "Ä‘iểm kiểm tra %d là vô Ä‘iá»u kiện\n" -#: debug.c:1490 +#: debug.c:1499 #, c-format msgid "No display item numbered %ld" msgstr "Không có mục tin hiển thị nào đánh số %ld" -#: debug.c:1493 +#: debug.c:1502 #, c-format msgid "No watch item numbered %ld" msgstr "Không có mục tin theo dõi nào đánh số %ld" -#: debug.c:1519 +#: debug.c:1528 #, c-format msgid "%d: [\"%s\"] not in array `%s'\n" msgstr "%d: [â€%sâ€] không trong mảng “%sâ€\n" -#: debug.c:1758 +#: debug.c:1767 msgid "attempt to use scalar value as array" msgstr "cố dùng biến vô hướng như là má»™t mảng" -#: debug.c:1847 +#: debug.c:1856 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" msgstr "Äiểm theo dõi %d bị xóa bởi vì đối số nằm ngoài phạm vi\n" -#: debug.c:1858 +#: debug.c:1867 #, c-format msgid "Display %d deleted because parameter is out of scope.\n" msgstr "Trình bày %d bị xóa bởi vì đối số nằm ngoài phạm vi\n" -#: debug.c:1891 +#: debug.c:1900 #, c-format msgid " in file `%s', line %d\n" msgstr " tại tập tin “%sâ€, dòng %d\n" -#: debug.c:1912 +#: debug.c:1921 #, c-format msgid " at `%s':%d" msgstr " tại “%sâ€:%d" -#: debug.c:1928 debug.c:1991 +#: debug.c:1937 debug.c:2000 #, c-format msgid "#%ld\tin " msgstr "#%ld\ttrong " -#: debug.c:1965 +#: debug.c:1974 #, c-format msgid "More stack frames follow ...\n" -msgstr "Nhiá»u khung stack theo sau...\n" +msgstr "Nhiá»u khung ngăn xếp theo sau...\n" -#: debug.c:2008 +#: debug.c:2017 msgid "invalid frame number" msgstr "số khung không hợp lệ" -#: debug.c:2180 +#: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" -msgstr "" -"Chú ý: Ä‘iểm ngắt %d (được bật, bá» qua %ld gợi ý tiếp), đồng thá»i được đặt " -"tại %s:%d" +msgstr "Chú ý: Ä‘iểm ngắt %d (được bật, bá» qua %ld gợi ý tiếp), đồng thá»i được đặt tại %s:%d" -#: debug.c:2187 +#: debug.c:2207 #, c-format msgid "Note: breakpoint %d (enabled), also set at %s:%d" msgstr "Chú ý: Ä‘iểm ngắt %d (được bật), đồng thá»i được đặt tại %s:%d" -#: debug.c:2194 +#: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" -msgstr "" -"Chú ý: Ä‘iểm ngắt %d (bị tắt, bá» qua %ld gợi ý tiếp), đồng thá»i được đặt tại " -"%s:%d" +msgstr "Chú ý: Ä‘iểm ngắt %d (bị tắt, bá» qua %ld gợi ý tiếp), đồng thá»i được đặt tại %s:%d" -#: debug.c:2201 +#: debug.c:2221 #, c-format msgid "Note: breakpoint %d (disabled), also set at %s:%d" msgstr "Chú ý: Ä‘iểm ngắt %d (bị tắt), đồng thá»i được đặt tại %s:%d" -#: debug.c:2218 +#: debug.c:2238 #, c-format msgid "Breakpoint %d set at file `%s', line %d\n" msgstr "Äiểm ngắt %d đặt tại tập tin “%sâ€, dòng %d\n" -#: debug.c:2320 +#: debug.c:2340 #, c-format msgid "Can't set breakpoint in file `%s'\n" msgstr "Không thể đặt Ä‘iểm ngắt trong tập tin “%sâ€\n" -#: debug.c:2349 debug.c:2472 debug.c:3330 +#: debug.c:2369 debug.c:2492 debug.c:3350 #, c-format msgid "line number %d in file `%s' out of range" msgstr "số dòng %d trong tập tin “%s†nằm ngoài phạm vi" -#: debug.c:2353 +#: debug.c:2373 #, c-format msgid "Can't find rule!!!\n" msgstr "Không tìm thấy quy tắc!!!\n" -#: debug.c:2355 +#: debug.c:2375 #, c-format msgid "Can't set breakpoint at `%s':%d\n" msgstr "Không thể đặt Ä‘iểm ngắt tại “%sâ€:%d\n" -#: debug.c:2367 +#: debug.c:2387 #, c-format msgid "Can't set breakpoint in function `%s'\n" msgstr "Không thể đặt Ä‘iểm ngắt trong hàm “%sâ€\n" -#: debug.c:2383 +#: debug.c:2403 #, c-format msgid "breakpoint %d set at file `%s', line %d is unconditional\n" msgstr "Ä‘iểm ngắt %d đặt tại tập tin “%sâ€, dòng %d là vô Ä‘iá»u kiện\n" -#: debug.c:2488 debug.c:2510 +#: debug.c:2508 debug.c:2530 #, c-format msgid "Deleted breakpoint %d" msgstr "Xóa Ä‘iểm dừng %d" -#: debug.c:2494 +#: debug.c:2514 #, c-format msgid "No breakpoint(s) at entry to function `%s'\n" msgstr "Không có Ä‘iểm ngắt tại Ä‘iểm vào cá»§a hàm “%sâ€\n" -#: debug.c:2521 +#: debug.c:2541 #, c-format msgid "No breakpoint at file `%s', line #%d\n" msgstr "Không có Ä‘iểm ngắt tại tập tin “%sâ€, dòng #%d\n" -#: debug.c:2576 debug.c:2617 debug.c:2637 debug.c:2680 +#: debug.c:2596 debug.c:2637 debug.c:2657 debug.c:2700 msgid "invalid breakpoint number" msgstr "số Ä‘iểm ngắt không hợp lệ" -#: debug.c:2592 +#: debug.c:2612 msgid "Delete all breakpoints? (y or n) " msgstr "Xóa tất cả các Ä‘iểm ngắt? (c hay k) " -#: debug.c:2593 debug.c:2903 debug.c:2956 +#: debug.c:2613 debug.c:2923 debug.c:2976 msgid "y" msgstr "c" -#: debug.c:2642 +#: debug.c:2662 #, c-format msgid "Will ignore next %ld crossing(s) of breakpoint %d.\n" msgstr "Sẽ bá» qua %ld Ä‘iểm giao chéo cá»§a Ä‘iểm ngắt %d.\n" -#: debug.c:2646 +#: debug.c:2666 #, c-format msgid "Will stop next time breakpoint %d is reached.\n" msgstr "Sẽ dừng lần gặp Ä‘iểm ngắt %d tiếp theo.\n" -#: debug.c:2763 +#: debug.c:2783 #, c-format msgid "Can only debug programs provided with the `-f' option.\n" -msgstr "" -"Chỉ có thể gỡ lá»—i các chương trình được cung cấp cùng vá»›i tùy chá»n “-fâ€.\n" +msgstr "Chỉ có thể gỡ lá»—i các chương trình được cung cấp cùng vá»›i tùy chá»n “-fâ€.\n" -#: debug.c:2888 +#: debug.c:2908 #, c-format msgid "Failed to restart debugger" msgstr "Gặp lá»—i khi khởi động lại bá»™ gỡ lá»—i" -#: debug.c:2902 +#: debug.c:2922 msgid "Program already running. Restart from beginning (y/n)? " msgstr "Chương trình Ä‘ang chạy. Khởi động từ đầu (c/không)?" -#: debug.c:2906 +#: debug.c:2926 #, c-format msgid "Program not restarted\n" msgstr "Chương trình không khởi động lại\n" -#: debug.c:2916 +#: debug.c:2936 #, c-format msgid "error: cannot restart, operation not allowed\n" msgstr "lá»—i: không thể khởi động lại, thao tác không được cho phép\n" -#: debug.c:2922 +#: debug.c:2942 #, c-format msgid "error (%s): cannot restart, ignoring rest of the commands\n" msgstr "lá»—i (%s): không thể khởi động lại, bá» qua các lệnh còn lại\n" -#: debug.c:2930 +#: debug.c:2950 #, c-format msgid "Starting program: \n" msgstr "Äang khởi động chương trình:\n" -#: debug.c:2939 +#: debug.c:2959 #, c-format msgid "Program exited %s with exit value: %d\n" msgstr "Chương trình %s được thoát ra vá»›i mã thoát là: %d\n" -#: debug.c:2955 +#: debug.c:2975 msgid "The program is running. Exit anyway (y/n)? " msgstr "Chương trình này Ä‘ang chạy. Vẫn thoát (c/không)?" -#: debug.c:2990 +#: debug.c:3010 #, c-format msgid "Not stopped at any breakpoint; argument ignored.\n" msgstr "Không dừng tại bất ký Ä‘iểm ngắt nào; đối số bị bá» qua.\n" -#: debug.c:2995 +#: debug.c:3015 #, c-format msgid "invalid breakpoint number %d." msgstr "số Ä‘iểm ngắt không hợp lệ %d." -#: debug.c:3000 +#: debug.c:3020 #, c-format msgid "Will ignore next %ld crossings of breakpoint %d.\n" msgstr "Sẽ bá» qua %ld Ä‘iểm ngắt xuyên chéo %d kế tiếp.\n" -#: debug.c:3187 +#: debug.c:3207 #, c-format msgid "'finish' not meaningful in the outermost frame main()\n" msgstr "“finish†không có nghÄ©a trong khung ngoài cùng nhất main()\n" -#: debug.c:3192 +#: debug.c:3212 #, c-format msgid "Run till return from " msgstr "Chạy cho đến khi có trả vá» từ đó" -#: debug.c:3235 +#: debug.c:3255 #, c-format msgid "'return' not meaningful in the outermost frame main()\n" msgstr "“return†không có nghÄ©a trong khung ngoài cùng nhất main()\n" -#: debug.c:3349 +#: debug.c:3369 #, c-format msgid "Can't find specified location in function `%s'\n" msgstr "Không tìm thấy vị trí đã cho trong hàm “%sâ€\n" -#: debug.c:3357 +#: debug.c:3377 #, c-format msgid "invalid source line %d in file `%s'" msgstr "dòng nguồn không hợp lệ %d trong tập tin “%sâ€" -#: debug.c:3372 +#: debug.c:3392 #, c-format msgid "Can't find specified location %d in file `%s'\n" msgstr "Không thể tìm thấy vị trí %d được chỉ ra trong tập tin “%sâ€\n" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "element not in array\n" msgstr "phần tá»­ không trong mảng\n" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "untyped variable\n" msgstr "biến chưa định kiểu\n" -#: debug.c:3446 +#: debug.c:3466 #, c-format msgid "Stopping in %s ...\n" msgstr "Dừng trong %s ...\n" -#: debug.c:3523 +#: debug.c:3543 #, c-format msgid "'finish' not meaningful with non-local jump '%s'\n" msgstr "“finish†không có nghÄ©a vá»›i lệnh nhảy non-local “%sâ€\n" -#: debug.c:3530 +#: debug.c:3550 #, c-format msgid "'until' not meaningful with non-local jump '%s'\n" msgstr "“until†không có nghÄ©a vá»›i cú nhảy non-local “%sâ€\n" -#: debug.c:4165 +#: debug.c:4185 msgid "\t------[Enter] to continue or q [Enter] to quit------" -msgstr "\t------Nhấn [Enter] để tiếp tục hay “q†[Enter] để thoát------" +msgstr "\t-Nhấn [Enter] để tiếp tục hay “q†[Enter] để thoát------" -#: debug.c:4166 +#: debug.c:4186 msgid "q" msgstr "t" -#: debug.c:4986 +#: debug.c:5001 #, c-format msgid "[\"%s\"] not in array `%s'" -msgstr "[â€%sâ€] không trong mảng “%sâ€" +msgstr "[\"%s\"] không trong mảng “%sâ€" -#: debug.c:5192 +#: debug.c:5207 #, c-format msgid "sending output to stdout\n" msgstr "gá»­i kết xuất ra stdout\n" -#: debug.c:5232 +#: debug.c:5247 msgid "invalid number" msgstr "số không hợp lệ" -#: debug.c:5366 +#: debug.c:5381 #, c-format msgid "`%s' not allowed in current context; statement ignored" msgstr "“%s†không được phép trong ngữ cảnh hiện hành; câu lệnh bị bá» qua" -#: debug.c:5374 +#: debug.c:5389 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:5575 +#: debug.c:5590 #, 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: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:1192 +#: dfa.c:1106 dfa.c:1111 dfa.c:1124 dfa.c:1191 msgid "unbalanced [" msgstr "thiếu dấu ngoặc vuông mở [" @@ -1818,33 +1748,33 @@ msgstr "thiếu dấu ngoặc vuông mở [" msgid "invalid character class" msgstr "sai lá»›p ký tá»±" -#: dfa.c:1229 +#: dfa.c:1228 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:1281 +#: dfa.c:1280 msgid "unfinished \\ escape" msgstr "chưa kết thúc dãy thoát \\" -#: dfa.c:1428 regcomp.c:161 +#: dfa.c:1427 regcomp.c:161 msgid "Invalid content of \\{\\}" -msgstr "Ná»™i dụng “\\{\\}†không hợp lệ" +msgstr "Ná»™i dung cá»§a “\\{\\}†không hợp lệ" -#: dfa.c:1431 regcomp.c:176 +#: dfa.c:1430 regcomp.c:176 msgid "Regular expression too big" msgstr "Biểu thức chính quy quá lá»›n" -#: dfa.c:1816 +#: dfa.c:1847 msgid "unbalanced (" -msgstr "mất cân xứng (" +msgstr "thiếu dấu (" -#: dfa.c:1943 +#: dfa.c:1973 msgid "no syntax specified" msgstr "chưa chỉ rõ cú pháp" -#: dfa.c:1951 +#: dfa.c:1981 msgid "unbalanced )" -msgstr "mất cân xứng )" +msgstr "thiếu dấu )" #: eval.c:394 #, c-format @@ -1861,11 +1791,11 @@ msgstr "gặp opcode (mã thao tác) không rõ %d" 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:471 +#: eval.c:472 msgid "buffer overflow in genflags2str" msgstr "tràn bá»™ đệm trong “genflags2str†(tạo ra cỠđến chuá»—i)" -#: eval.c:674 +#: eval.c:675 #, c-format msgid "" "\n" @@ -1873,77 +1803,77 @@ msgid "" "\n" msgstr "" "\n" -"\t# Äống gá»i hàm:\n" +"\t# Ngăn xếp gá»i hàm:\n" "\n" -#: eval.c:703 +#: eval.c:704 msgid "`IGNORECASE' is a gawk extension" -msgstr "“IGNORECASE†(bá» qua chữ hoa/thưá»ng) là phần mở rá»™ng gawk" +msgstr "“IGNORECASE†(bá» qua chữ HOA/thưá»ng) là phần mở rá»™ng gawk" -#: eval.c:735 +#: eval.c:736 msgid "`BINMODE' is a gawk extension" msgstr "“BINMODE†(chế độ nhị phân) là phần mở rá»™ng gawk" -#: eval.c:793 +#: eval.c:794 #, 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 thấy là 3" +msgstr "Giá trị BINMODE (chế độ nhị phân) “%s†không hợp lệ nên đã coi là 3" -#: eval.c:884 +#: eval.c:885 #, c-format msgid "bad `%sFMT' specification `%s'" msgstr "đặc tả “%sFMT†sai “%sâ€" -#: eval.c:968 +#: eval.c:969 msgid "turning off `--lint' due to assignment to `LINT'" msgstr "Ä‘ang tắt “--lint†do việc gán cho “LINTâ€" -#: eval.c:1146 +#: eval.c:1147 #, c-format msgid "reference to uninitialized argument `%s'" -msgstr "gặp tham chiếu đến đối số chưa được sở khởi “%sâ€" +msgstr "gặp tham chiếu đến đối số chưa được khởi tạo “%sâ€" -#: eval.c:1147 +#: eval.c:1148 #, c-format msgid "reference to uninitialized variable `%s'" -msgstr "gặp tham chiếu đến biến chưa được sở khởi “%sâ€" +msgstr "gặp tham chiếu đến biến chưa được khởi tạo “%sâ€" -#: eval.c:1165 +#: eval.c:1166 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:1167 +#: eval.c:1168 msgid "attempt to field reference from null string" -msgstr "cố gắng tham chiếu trưá»ng từ chá»—i trống rá»—ng" +msgstr "cố gắng tham chiếu trưá»ng từ chuá»—i trống rá»—ng" -#: eval.c:1175 +#: eval.c:1176 #, c-format msgid "attempt to access field %ld" msgstr "cố gắng để truy cập trưá»ng %ld" -#: eval.c:1184 +#: eval.c:1185 #, 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:1271 +#: eval.c:1272 #, c-format msgid "function `%s' called with more arguments than declared" -msgstr "hàm “%s†được gá»i vá»›i số đối số hÆ¡n số được tuyên bố" +msgstr "hàm “%s†được gá»i vá»›i nhiá»u số đối số hÆ¡n số được khai báo" -#: eval.c:1466 +#: eval.c:1473 #, c-format msgid "unwind_stack: unexpected type `%s'" -msgstr "unwind_stack: không mong đợi kiểu “%sâ€" +msgstr "unwind_stack: không cần kiểu “%sâ€" -#: eval.c:1562 +#: eval.c:1569 msgid "division by zero attempted in `/='" -msgstr "cố gắng chia cho số không trong “/=â€" +msgstr "gặp phép chia cho số không trong “/=â€" -#: eval.c:1569 +#: eval.c:1576 #, c-format msgid "division by zero attempted in `%%='" -msgstr "cố gắng chia cho số không trong “%%=â€" +msgstr "gặp phép chia cho số không trong “%%=â€" #: ext.c:89 ext.c:171 msgid "extensions are not allowed in sandbox mode" @@ -1953,7 +1883,7 @@ msgstr "phần mở rá»™ng không cho phép ở chế độ khuôn đúc" msgid "-l / @load are gawk extensions" msgstr "-l / @load là má»™t phần mở rá»™ng gawk" -#: ext.c:95 ext.c:177 +#: ext.c:95 msgid "load_ext: received NULL lib_name" msgstr "load_ext: nhận được NULL lib_name" @@ -1964,10 +1894,8 @@ msgstr "load_ext: không thể mở thư viện “%s†(%s)\n" #: ext.c:104 #, 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" +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 #, c-format @@ -1983,6 +1911,10 @@ msgstr "load_ext: thư viện “%s†thá»§ tục khởi tạo “%s†gặp l msgid "`extension' is a gawk extension" msgstr "“extension†là má»™t phần mở rá»™ng gawk" +#: ext.c:177 +msgid "extension: received NULL lib_name" +msgstr "extension: nhận được NULL lib_name" + #: ext.c:180 #, c-format msgid "extension: cannot open library `%s' (%s)" @@ -1990,10 +1922,8 @@ msgstr "phần mở rá»™ng: không thể mở thư viện “%s†(%s)" #: ext.c:186 #, 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)" +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 #, c-format @@ -2004,38 +1934,36 @@ msgstr "phần mở rá»™ng: thư viện “%sâ€: không thể gá»i hàm “%s msgid "make_builtin: missing function name" msgstr "make_builtin: thiếu tên hàm" -#: ext.c:238 +#: ext.c:236 #, 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:242 +#: ext.c:240 #, c-format msgid "make_builtin: function `%s' already defined" msgstr "make_builtin: hàm “%s†đã được định nghÄ©a rồi" -#: ext.c:246 +#: ext.c:244 #, 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:248 +#: ext.c:246 #, 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" +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:251 ext.c:304 +#: ext.c:249 ext.c:304 #, 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:278 +#: ext.c:276 msgid "extension: missing function name" msgstr "extension: (phần mở rá»™ng) tên hàm còn thiếu" -#: ext.c:283 +#: ext.c:279 ext.c:283 #, 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â€" @@ -2043,158 +1971,160 @@ msgstr "extension: (phần mở rá»™ng) gặp ký tá»± cấm “%c†nằm tron #: ext.c:291 #, c-format msgid "extension: can't redefine function `%s'" -msgstr "extension: (phần mở rá»™ng) không thể xác định lại hàm “%sâ€" +msgstr "extension: (phần mở rá»™ng) không thể định nghÄ©a lại hàm “%sâ€" #: ext.c:295 #, c-format msgid "extension: function `%s' already defined" -msgstr "extension: (phần mở rá»™ng) hàm “%s†đã được xác định" +msgstr "extension: (phần mở rá»™ng) hàm “%s†đã được định nghÄ©a" #: ext.c:299 #, c-format msgid "extension: function name `%s' previously defined" -msgstr "tên hàm “%s†đã được xác định trước" +msgstr "tên hàm “%s†đã được định nghÄ©a trước đó" #: ext.c:301 #, 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" +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:374 +#: ext.c:375 #, c-format msgid "function `%s' defined to take no more than %d argument(s)" -msgstr "hàm “%s†được xác định để chấp nhấn %d đối số tối Ä‘a" +msgstr "hàm “%s†được định nghÄ©a để chấp nhấn %d đối số tối Ä‘a" -#: ext.c:377 +#: ext.c:378 #, c-format msgid "function `%s': missing argument #%d" msgstr "hàm “%sâ€: thiếu đối số #%d" -#: ext.c:394 +#: ext.c:395 #, 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:398 +#: ext.c:399 #, 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:412 +#: ext.c:413 msgid "dynamic loading of library not supported" msgstr "tải động cá»§a thư viện không được há»— trợ" -#: extension/filefuncs.c:97 +#: extension/filefuncs.c:159 msgid "chdir: called with incorrect number of arguments, expecting 1" msgstr "chdir: được gá»i vá»›i số lượng đối số không đúng, cần 1" -#: extension/filefuncs.c:343 +#: extension/filefuncs.c:439 #, c-format msgid "stat: unable to read symbolic link `%s'" msgstr "stat: không thể Ä‘á»c liên kết má»m “%sâ€" -#: extension/filefuncs.c:376 +#: extension/filefuncs.c:472 msgid "stat: called with wrong number of arguments" msgstr "stat: được gá»i vá»›i số lượng đối số không đúng" -#: extension/filefuncs.c:383 +#: extension/filefuncs.c:479 msgid "stat: bad parameters" msgstr "stat: các đối số sai" -#: extension/filefuncs.c:437 +#: extension/filefuncs.c:533 #, c-format msgid "fts init: could not create variable %s" msgstr "khởi tạo fts: không thể tạo biến %s" -#: extension/filefuncs.c:460 +#: extension/filefuncs.c:554 +msgid "fts is not supported on this system" +msgstr "fts không được há»— trợ trên hệ thống này" + +#: extension/filefuncs.c:573 msgid "fill_stat_element: could not create array" msgstr "fill_stat_element: không thể tạo mảng" -#: extension/filefuncs.c:469 +#: extension/filefuncs.c:582 msgid "fill_stat_element: could not set element" msgstr "fill_stat_element: không thể đặt phần tá»­" -#: extension/filefuncs.c:484 +#: extension/filefuncs.c:597 msgid "fill_path_element: could not set element" msgstr "fill_path_element: không thể đặt phần tá»­" -#: extension/filefuncs.c:500 +#: extension/filefuncs.c:613 msgid "fill_error_element: could not set element" msgstr "fill_error_element: không thể đặt phần tá»­" -#: extension/filefuncs.c:547 extension/filefuncs.c:594 +#: extension/filefuncs.c:660 extension/filefuncs.c:707 msgid "fts-process: could not create array" msgstr "fts-process: không thể tạo mảng" -#: extension/filefuncs.c:557 extension/filefuncs.c:604 -#: extension/filefuncs.c:622 +#: extension/filefuncs.c:670 extension/filefuncs.c:717 +#: extension/filefuncs.c:735 msgid "fts-process: could not set element" msgstr "fts-process: không thể đặt phần tá»­" -#: extension/filefuncs.c:671 +#: extension/filefuncs.c:784 msgid "fts: called with incorrect number of arguments, expecting 3" msgstr "fts: được gá»i vá»›i số lượng đối số không đúng, cần 3" -#: extension/filefuncs.c:674 +#: extension/filefuncs.c:787 msgid "fts: bad first parameter" msgstr "fts: đối số đầu tiên sai" -#: extension/filefuncs.c:680 +#: extension/filefuncs.c:793 msgid "fts: bad second parameter" msgstr "fts: đối số thứ hai sai" -#: extension/filefuncs.c:686 +#: extension/filefuncs.c:799 msgid "fts: bad third parameter" msgstr "fts: đối số thứ ba sai" -#: extension/filefuncs.c:693 +#: extension/filefuncs.c:806 msgid "fts: could not flatten array\n" msgstr "fts: không thể làm phẳng mảng\n" -#: extension/filefuncs.c:711 +#: extension/filefuncs.c:824 msgid "fts: ignoring sneaky FTS_NOSTAT flag. nyah, nyah, nyah." msgstr "fts: bá» qua cá» FTS_NOSTAT vụng trá»™m. nyah, nyah, nyah." -#: extension/filefuncs.c:728 +#: extension/filefuncs.c:841 msgid "fts: clear_array() failed\n" msgstr "fts: clear_array() gặp lá»—i\n" -#: extension/fnmatch.c:98 +#: extension/fnmatch.c:112 msgid "fnmatch: called with less than three arguments" msgstr "fnmatch: được gá»i vá»›i ít hÆ¡n ba đối số" -#: extension/fnmatch.c:101 +#: extension/fnmatch.c:115 msgid "fnmatch: called with more than three arguments" msgstr "fnmatch: được gá»i vá»›i nhiá»u hÆ¡n ba đối số" -#: extension/fnmatch.c:104 +#: extension/fnmatch.c:118 msgid "fnmatch: could not get first argument" msgstr "fnmatch: không lấy được đối số đầu tiên" -#: extension/fnmatch.c:109 +#: extension/fnmatch.c:123 msgid "fnmatch: could not get second argument" msgstr "fnmatch: không lấy được đối số thứ hai" -#: extension/fnmatch.c:114 +#: extension/fnmatch.c:128 msgid "fnmatch: could not get third argument" msgstr "fnmatch: không thể lấy tham số thứ ba" -#: extension/fnmatch.c:127 +#: extension/fnmatch.c:141 msgid "fnmatch is not implemented on this system\n" msgstr "fnmatch không được há»— trợ trên hệ thống này\n" -#: extension/fnmatch.c:159 +#: extension/fnmatch.c:173 msgid "fnmatch init: could not add FNM_NOMATCH variable" msgstr "khởi tạo fnmatch: không thể thêm biến FNM_NOMATCH" -#: extension/fnmatch.c:169 +#: extension/fnmatch.c:183 #, c-format msgid "fnmatch init: could not set array element %s" msgstr "fnmatch init: không thể đặt phần tá»­ mảng %s" -#: extension/fnmatch.c:179 +#: extension/fnmatch.c:193 msgid "fnmatch init: could not install FNM array" msgstr "khởi tạo fnmatch: không thể cài đặt mảng FNM" @@ -2218,88 +2148,88 @@ msgstr "wait: được gá»i mà không truyá»n đối số" msgid "wait: called with too many arguments" msgstr "wait: được gá»i vá»›i quá nhiá»u đối số" -#: extension/inplace.c:110 +#: extension/inplace.c:130 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:113 extension/inplace.c:187 +#: extension/inplace.c:133 extension/inplace.c:207 #, 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" -#: extension/inplace.c:116 +#: extension/inplace.c:136 msgid "inplace_begin: cannot retrieve 1st argument as a string filename" msgstr "inplace_begin: không thể lấy đối số thứ nhất như là tên tập tin" -#: extension/inplace.c:124 +#: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" -msgstr "inplace_begin: tắt sá»­a chữa in-place cho TÊN-TẬP-TIN không hợp lệ “%sâ€" +msgstr "inplace_begin: tắt sá»­a chữa in-place cho TÊN_TẬP_TIN không hợp lệ “%sâ€" -#: extension/inplace.c:131 +#: extension/inplace.c:151 #, c-format msgid "inplace_begin: Cannot stat `%s' (%s)" -msgstr "inplace_begin: Không thể lấy trạng thái cá»§a “%s†(%s)" +msgstr "inplace_begin: Không thể lấy thông tin thống kê cá»§a “%s†(%s)" -#: extension/inplace.c:138 +#: extension/inplace.c:158 #, c-format msgid "inplace_begin: `%s' is not a regular file" msgstr "inplace_begin: “%s†không phải là tập tin thưá»ng" -#: extension/inplace.c:149 +#: extension/inplace.c:169 #, c-format msgid "inplace_begin: mkstemp(`%s') failed (%s)" msgstr "inplace_begin: mkstemp(“%sâ€) gặp lá»—i (%s)" -#: extension/inplace.c:158 +#: extension/inplace.c:178 #, c-format msgid "inplace_begin: chmod failed (%s)" msgstr "inplace_begin: chmod gặp lá»—i (%s)" -#: extension/inplace.c:165 +#: extension/inplace.c:185 #, c-format msgid "inplace_begin: dup(stdout) failed (%s)" msgstr "inplace_begin: dup(stdout) gặp lá»—i (%s)" -#: extension/inplace.c:168 +#: extension/inplace.c:188 #, c-format msgid "inplace_begin: dup2(%d, stdout) failed (%s)" msgstr "inplace_begin: dup2(%d, stdout) gặp lá»—i (%s)" -#: extension/inplace.c:171 +#: extension/inplace.c:191 #, c-format msgid "inplace_begin: close(%d) failed (%s)" msgstr "inplace_begin: close(%d) gặp lá»—i (%s)" -#: extension/inplace.c:190 +#: extension/inplace.c:210 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:197 +#: extension/inplace.c:217 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:203 +#: extension/inplace.c:223 #, c-format msgid "inplace_end: dup2(%d, stdout) failed (%s)" msgstr "inplace_end: dup2(%d, stdout) gặp lá»—i (%s)" -#: extension/inplace.c:206 +#: extension/inplace.c:226 #, c-format msgid "inplace_end: close(%d) failed (%s)" msgstr "inplace_end: close(%d) gặp lá»—i (%s)" -#: extension/inplace.c:210 +#: extension/inplace.c:230 #, c-format msgid "inplace_end: fsetpos(stdout) failed (%s)" msgstr "inplace_end: fsetpos(stdout) gặp lá»—i (%s)" -#: extension/inplace.c:223 +#: extension/inplace.c:243 #, c-format msgid "inplace_end: link(`%s', `%s') failed (%s)" msgstr "inplace_end: link(“%sâ€, “%sâ€) gặp lá»—i (%s)" -#: extension/inplace.c:229 +#: extension/inplace.c:253 #, c-format msgid "inplace_end: rename(`%s', `%s') failed (%s)" msgstr "inplace_end: rename(“%sâ€, “%sâ€) gặp lá»—i (%s)" @@ -2328,7 +2258,7 @@ msgstr "chr: được gá»i mà không có đối số" msgid "chr: called with inappropriate argument(s)" msgstr "chr: được gá»i vá»›i đối số không thích hợp" -#: extension/readdir.c:203 +#: extension/readdir.c:277 #, c-format msgid "dir_take_control_of: opendir/fdopendir failed: %s" msgstr "dir_take_control_of: opendir/fdopendir gặp lá»—i: %s" @@ -2341,165 +2271,152 @@ 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:120 +#: extension/rwarray.c:124 msgid "writea: called with too many arguments" msgstr "writea: được gá»i vá»›i quá nhiá»u đối số" -#: extension/rwarray.c:127 +#: extension/rwarray.c:131 #, 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:133 +#: extension/rwarray.c:137 #, 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:180 +#: extension/rwarray.c:184 #, 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:194 +#: extension/rwarray.c:198 #, 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:276 +#: extension/rwarray.c:280 msgid "reada: called with too many arguments" msgstr "reada: được gá»i vá»›i quá nhiá»u đối số" -#: extension/rwarray.c:283 +#: extension/rwarray.c:287 #, 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:289 +#: extension/rwarray.c:293 #, 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:333 +#: extension/rwarray.c:337 #, c-format msgid "do_reada: clear_array failed\n" msgstr "do_reada: clear_array gặp lá»—i\n" -#: extension/rwarray.c:370 +#: extension/rwarray.c:374 #, c-format msgid "read_array: set_array_element failed\n" msgstr "read_array: set_array_element gặp lá»—i\n" -#: extension/time.c:81 +#: extension/time.c:106 msgid "gettimeofday: ignoring arguments" msgstr "gettimeofday: Ä‘ang lá» Ä‘i các đối số" -#: extension/time.c:112 +#: extension/time.c:137 msgid "gettimeofday: not supported on this platform" msgstr "gettimeofday: không được há»— trợ trên ná»n tảng này" -#: extension/time.c:133 +#: extension/time.c:158 msgid "sleep: called with too many arguments" msgstr "sleep: được gá»i vá»›i quá nhiá»u đối số" -#: extension/time.c:136 +#: extension/time.c:161 msgid "sleep: missing required numeric argument" msgstr "sleep: thiếu đối số dạng số cần thiết" -#: extension/time.c:142 +#: extension/time.c:167 msgid "sleep: argument is negative" msgstr "sleep: đối số âm" -#: extension/time.c:176 +#: extension/time.c:201 msgid "sleep: not supported on this platform" msgstr "sleep: không được há»— trợ trên ná»n tảng này" -#: field.c:339 +#: field.c:345 msgid "NF set to negative value" msgstr "“NF†được đặt thành giá trị âm" -#: field.c:964 field.c:971 field.c:975 +#: field.c:971 field.c:978 field.c:982 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:968 +#: field.c:975 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:982 +#: field.c:989 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:986 +#: field.c:993 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ư" +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:991 +#: field.c:998 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ư" +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:994 +#: field.c:1001 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" +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:1023 +#: field.c:1032 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" +msgstr "split: (chia tách) chuá»—i vô giá trị cho đối số thứ ba là phần mở rá»™ng gawk" -#: field.c:1063 +#: field.c:1072 msgid "patsplit: fourth argument is not an array" msgstr "patsplit: đối số thứ tư không phải là mảng" -#: field.c:1068 +#: field.c:1077 msgid "patsplit: second argument is not an array" msgstr "patsplit: đối số thứ hai không phải là mảng" -#: field.c:1074 +#: field.c:1083 msgid "patsplit: third argument must be non-null" msgstr "patsplit: đối số thứ ba không phải không rá»—ng" -#: field.c:1078 +#: field.c:1087 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ư" +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:1083 +#: field.c:1092 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ư" +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:1086 +#: field.c:1095 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" +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:1124 +#: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" msgstr "“FIELDWIDTHS†(độ rá»™ng trưá»ng) là phần mở rá»™ng gawk" -#: field.c:1188 +#: field.c:1197 #, 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:1261 +#: field.c:1270 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:1265 +#: field.c:1274 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:1384 +#: field.c:1393 msgid "`FPAT' is a gawk extension" msgstr "“FPAT†là phần mở rá»™ng cá»§a gawk" @@ -2523,601 +2440,569 @@ msgstr "remove_element: mảng nhận được là null" msgid "remove_element: received null subscript" msgstr "remove_element: nhận được là null" -#: gawkapi.c:943 +#: gawkapi.c:948 #, 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:948 +#: gawkapi.c:953 #, 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" -#: getopt.c:603 getopt.c:632 +#: getopt.c:604 getopt.c:633 #, c-format msgid "%s: option '%s' is ambiguous; possibilities:" msgstr "%s: tùy chá»n “%s†chưa rõ ràng; khả năng là:" -#: getopt.c:678 getopt.c:682 +#: getopt.c:679 getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: tùy chá»n “--%s†không cho phép đối số\n" -#: getopt.c:691 getopt.c:696 +#: getopt.c:692 getopt.c:697 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: tùy chá»n “%c%s†không cho phép đối số\n" -#: getopt.c:739 getopt.c:758 +#: getopt.c:740 getopt.c:759 #, c-format msgid "%s: option '--%s' requires an argument\n" msgstr "%s: tùy chá»n “--%s†yêu cầu má»™t đối số\n" -#: getopt.c:796 getopt.c:799 +#: getopt.c:797 getopt.c:800 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: không nhận ra tùy chá»n “--%sâ€\n" -#: getopt.c:807 getopt.c:810 +#: getopt.c:808 getopt.c:811 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: không nhận ra tùy chá»n “%c%sâ€\n" -#: getopt.c:859 getopt.c:862 +#: getopt.c:860 getopt.c:863 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: tùy chá»n không hợp lệ -- “%câ€\n" -#: getopt.c:915 getopt.c:932 getopt.c:1142 getopt.c:1160 +#: getopt.c:916 getopt.c:933 getopt.c:1143 getopt.c:1161 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: tùy chá»n yêu cầu má»™t đối số -- “%câ€\n" -#: getopt.c:988 getopt.c:1004 +#: getopt.c:989 getopt.c:1005 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: tùy chá»n “-W %s†vẫn mÆ¡ hồ\n" -#: getopt.c:1028 getopt.c:1046 +#: getopt.c:1029 getopt.c:1047 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: tùy chá»n “-W %s†không cho phép đối số\n" -#: getopt.c:1067 getopt.c:1085 +#: getopt.c:1068 getopt.c:1086 #, c-format 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:347 +#: io.c:392 #, 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:350 io.c:463 +#: io.c:395 io.c:513 #, c-format msgid "cannot open file `%s' for reading (%s)" msgstr "không mở được tập tin “%s†để Ä‘á»c (%s)" -#: io.c:590 +#: io.c:640 #, c-format msgid "close of fd %d (`%s') failed (%s)" msgstr "lá»—i đóng fd %d (“%sâ€) (%s)" -#: io.c:666 +#: io.c:716 msgid "redirection not allowed in sandbox mode" msgstr "chuyển hướng không cho phép ở chế độ khuôn đúc" -#: io.c:700 +#: io.c:750 #, 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:706 +#: io.c:756 #, 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:711 +#: io.c:761 #, 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ý" +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:754 +#: io.c:809 #, 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:808 +#: io.c:863 #, 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:818 +#: io.c:873 #, 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:849 +#: io.c:904 #, 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:928 +#: io.c:986 #, c-format msgid "can't redirect from `%s' (%s)" msgstr "không thể chuyển hướng từ “%s†(%s)" -#: io.c:931 +#: io.c:989 #, c-format msgid "can't redirect to `%s' (%s)" msgstr "không thể chuyển hướng đến “%s†(%s)" -#: io.c:982 -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:1040 +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:998 +#: io.c:1056 #, c-format msgid "close of `%s' failed (%s)." msgstr "lá»—i đóng “%s†(%s)" -#: io.c:1006 +#: io.c:1064 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:1028 +#: io.c:1086 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:1045 +#: io.c:1103 #, 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ở" +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:1050 +#: io.c:1108 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:1147 +#: io.c:1205 #, 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" +msgstr "close: chuyển hướng “%s†không được mở bởi “|&†nên đối số thứ hai bị bá» qua" -#: io.c:1164 +#: io.c:1222 #, 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:1167 +#: io.c:1225 #, 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:1187 +#: io.c:1245 #, 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:1190 +#: io.c:1248 #, 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:1193 +#: io.c:1251 #, 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:1196 +#: io.c:1254 #, 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:1224 io.c:1279 main.c:842 main.c:879 +#: io.c:1284 io.c:1342 main.c:864 main.c:906 #, c-format msgid "error writing standard output (%s)" msgstr "gặp lá»—i khi ghi đầu ra tiêu chuẩn (%s)" -#: io.c:1228 io.c:1284 +#: io.c:1289 io.c:1348 main.c:866 #, 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:1236 +#: io.c:1297 #, c-format msgid "pipe flush of `%s' failed (%s)." msgstr "lá»—i xoá sạch ống dẫn “%s†(%s)" -#: io.c:1239 +#: io.c:1300 #, 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:1242 +#: io.c:1303 #, c-format msgid "file flush of `%s' failed (%s)." msgstr "lá»—i xoá sạch tập tin “%s†(%s)" -#: io.c:1356 +#: io.c:1420 #, 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:1374 +#: io.c:1438 #, 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:1526 +#: 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:1540 +#: 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:1557 +#: 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 " -#: io.c:1575 +#: 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 " -#: io.c:1621 +#: io.c:1685 msgid "TCP/IP communications are not supported" msgstr "truyá»n thông TCP/IP không được há»— trợ" -#: io.c:1796 +#: io.c:1867 #, c-format msgid "could not open `%s', mode `%s'" msgstr "không mở được “%sâ€, chế độ “%sâ€" -#: io.c:1846 +#: io.c:1917 #, c-format msgid "close of master pty failed (%s)" -msgstr "lá»—i đóng pty (tài sản?) chính (%s)" +msgstr "gặp lá»—i khi đóng thiết bị cuối giả (%s)" -#: io.c:1848 io.c:2024 io.c:2194 +#: io.c:1919 io.c:2105 io.c:2305 #, c-format msgid "close of stdout in child failed (%s)" -msgstr "lá»—i đóng thiết bị xuất chuẩn trong tiến trình con (%s)" +msgstr "lá»—i đóng đầu ra tiêu chuẩn trong tiến trình con (%s)" -#: io.c:1851 +#: io.c:1922 #, c-format msgid "moving slave pty to stdout in child failed (dup: %s)" -msgstr "" -"gặp lá»—i khi di chuyển pty phụ thuá»™c đến thiết bị xuất chuẩn trong con " -"(trùng: %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:1853 io.c:2029 +#: io.c:1924 io.c:2110 #, 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:1856 +#: io.c:1927 #, c-format msgid "moving slave pty to stdin in child failed (dup: %s)" -msgstr "" -"lá»—i di chuyển pty (tài sản?) phụ tá»›i thiết bị nhập chuẩn trong Ä‘iá»u con " -"(nhân đôi: %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:1858 io.c:1879 +#: io.c:1929 io.c:1951 #, c-format msgid "close of slave pty failed (%s)" -msgstr "đóng pty phụ thuá»™c gặp lá»—i (%s)" +msgstr "đóng pty (thiết bị cuối giả) phụ thuá»™c gặp lá»—i (%s)" -#: io.c:1965 io.c:2027 io.c:2171 io.c:2197 +#: io.c:2040 io.c:2108 io.c:2276 io.c:2308 #, 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 (dup " -"(nhân đôi): %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:1972 io.c:2032 +#: io.c:2047 io.c:2113 #, 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 (dup " -"(nhân đôi): %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:1992 io.c:2187 +#: io.c:2073 io.c:2298 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:2000 +#: io.c:2081 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:2035 io.c:2199 io.c:2213 +#: io.c:2116 io.c:2310 io.c:2324 #, c-format msgid "close of pipe failed (%s)" msgstr "đóng ống dẫn gặp lá»—i (%s)" -#: io.c:2089 +#: io.c:2174 msgid "`|&' not supported" msgstr "“|&†không được há»— trợ" -#: io.c:2156 +#: io.c:2261 #, c-format msgid "cannot open pipe `%s' (%s)" msgstr "không thể mở ống dẫn “%s†(%s)" -#: io.c:2207 +#: io.c:2318 #, 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:2667 +#: io.c:2790 msgid "register_input_parser: received NULL pointer" msgstr "register_input_parser: nhận được con trá» NULL" -#: io.c:2695 +#: io.c:2818 #, 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â€" +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:2702 +#: io.c:2825 #, 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:2722 +#: io.c:2845 msgid "register_output_wrapper: received NULL pointer" msgstr "register_output_wrapper: nhận được con trá» NULL" -#: io.c:2750 +#: io.c:2873 #, 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â€" +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:2757 +#: io.c:2880 #, 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:2778 +#: io.c:2901 msgid "register_output_processor: received NULL pointer" msgstr "register_output_processor: nhận được con trá» NULL" -#: io.c:2807 +#: io.c:2930 #, c-format -msgid "" -"two-way processor `%s' conflicts with previously installed two-way processor " -"`%s'" -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â€" +msgid "two-way processor `%s' conflicts with previously installed two-way processor `%s'" +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:2816 +#: io.c:2939 #, 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:2923 +#: io.c:3064 #, c-format msgid "data file `%s' is empty" msgstr "tập tin dữ liệu “%s†là rá»—ng" -#: io.c:2965 io.c:2973 +#: io.c:3106 io.c:3114 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:3539 +#: io.c:3682 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:3628 +#: io.c:3771 msgid "IPv6 communication is not supported" msgstr "Truyá»n thông trên IPv6 không được há»— trợ" -#: main.c:388 +#: 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:478 +#: 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:524 +#: 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:545 +#: main.c:562 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â€" +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:551 +#: main.c:568 msgid "`--posix' overrides `--traditional'" msgstr "tùy chá»n “--posix†có quyá»n cao hÆ¡n “--traditional†(truyá»n thống)" -#: main.c:562 +#: main.c:579 msgid "`--posix'/`--traditional' overrides `--non-decimal-data'" -msgstr "" -"“--posixâ€/“--traditional†(truyá»n thống) có quyá»n cao hÆ¡n “--non-decimal-" -"data†(dữ liệu khác thập phân)" +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:566 +#: main.c:583 #, 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:571 +#: main.c:588 msgid "`--posix' overrides `--characters-as-bytes'" msgstr "“--posix†đè lên “--characters-as-bytesâ€" -#: main.c:630 +#: main.c:647 #, c-format msgid "can't set binary mode on stdin (%s)" -msgstr "không thể đặt chế độ nhị phân trên thiết bị nhập chuẩn (%s)" +msgstr "không thể đặt chế độ nhị phân trên đầu vào tiêu chuẩn (%s)" -#: main.c:633 +#: main.c:650 #, c-format msgid "can't set binary mode on stdout (%s)" -msgstr "không thể đặt chế độ nhị phân trên thiết bị xuất chuẩn (%s)" +msgstr "không thể đặt chế độ nhị phân trên đầu ra tiêu chuẩn (%s)" -#: main.c:635 +#: main.c:652 #, c-format msgid "can't set binary mode on stderr (%s)" -msgstr "không thể đặt chế độ nhị phân trên thiết bị lá»—i chuẩn (%s)" +msgstr "không thể đặt chế độ nhị phân trên đầu ra lá»—i tiêu chuẩn (%s)" -#: main.c:693 +#: main.c:710 msgid "no program text at all!" -msgstr "không có Ä‘oạn chữ chương trình nào cả !" +msgstr "không có Ä‘oạn chữ chương trình nào cả!" -#: main.c:779 +#: main.c:799 #, 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" +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:781 +#: main.c:801 #, 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" +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:786 +#: main.c:806 msgid "POSIX options:\t\tGNU long options: (standard)\n" -msgstr "Tùy chá»n POSIX:\t\tTùy chá»n dài GNU: (tiêu chuẩn)\n" +msgstr "Tùy chá»n POSIX:\t\t\tTùy chá»n dài GNU: (tiêu chuẩn)\n" -#: main.c:787 +#: main.c:807 msgid "\t-f progfile\t\t--file=progfile\n" -msgstr "\t-f tập_tin_chương_trình\t\t--file=tập_tin_chương_trình\n" +msgstr "\t-f tập_tin_chương_trình\t--file=tập_tin_chương_trình\n" -#: main.c:788 +#: main.c:808 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" +msgstr "\t-F fs\t\t\t--field-separator=ký_hiệu_phân_cách_trưá»ng\n" -#: main.c:789 +#: main.c:809 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" +"\t-v var=giá_trị\t\t--assign=biến=giá_trị\n" "(assign: gán)\n" -#: main.c:790 +#: main.c:810 msgid "Short options:\t\tGNU long options: (extensions)\n" -msgstr "Tuỳ chá»n ngắn:\t\tTuỳ chá»n GNU dạng dài: (mở rá»™ng)\n" +msgstr "Tuỳ chá»n ngắn:\t\t\tTuỳ chá»n GNU dạng dài: (mở rá»™ng)\n" -#: main.c:791 +#: main.c:811 msgid "\t-b\t\t\t--characters-as-bytes\n" msgstr "\t-b\t\t\t--characters-as-bytes\n" -#: main.c:792 +#: main.c:812 msgid "\t-c\t\t\t--traditional\n" msgstr "\t-c\t\t\t--traditional\n" -#: main.c:793 +#: main.c:813 msgid "\t-C\t\t\t--copyright\n" msgstr "\t-C\t\t\t--copyright\n" -#: main.c:794 +#: main.c:814 msgid "\t-d[file]\t\t--dump-variables[=file]\n" -msgstr "\t-d[tệp_tin]\t\t--dump-variables[=tệp_tin]\n" +msgstr "\t-d[tập_tin]\t\t--dump-variables[=tập_tin]\n" -#: main.c:795 +#: main.c:815 msgid "\t-D[file]\t\t--debug[=file]\n" msgstr "\t-D[tập_tin]\t\t--debug[=tập_tin]\n" -#: main.c:796 +#: main.c:816 msgid "\t-e 'program-text'\t--source='program-text'\n" -msgstr "\t-e “program-textâ€\t--source=â€program-textâ€\n" +msgstr "\t-e “program-textâ€\t--source=“program-textâ€\n" -#: main.c:797 +#: main.c:817 msgid "\t-E file\t\t\t--exec=file\n" -msgstr "\t-E file\t\t\t--exec=tệp_tin\n" +msgstr "\t-E file\t\t\t--exec=tập_tin\n" -#: main.c:798 +#: main.c:818 msgid "\t-g\t\t\t--gen-pot\n" msgstr "\t-g\t\t\t--gen-pot\n" -#: main.c:799 +#: main.c:819 msgid "\t-h\t\t\t--help\n" msgstr "\t-h\t\t\t--help\n" -#: main.c:800 +#: main.c:820 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:801 +#: main.c:821 msgid "\t-l library\t\t--load=library\n" msgstr "\t-l library\t\t--load=thư-viện\n" -#: main.c:802 +#: main.c:822 msgid "\t-L [fatal]\t\t--lint[=fatal]\n" msgstr "\t-L [fatal]\t\t--lint[=fatal]\n" -#: main.c:803 +#: 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:804 +#: main.c:824 msgid "\t-M\t\t\t--bignum\n" msgstr "\t-M\t\t\t--bignum\n" -#: main.c:805 +#: main.c:825 msgid "\t-N\t\t\t--use-lc-numeric\n" msgstr "\t-N\t\t\t--use-lc-numeric\n" -#: main.c:806 +#: main.c:826 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:807 +#: main.c:827 msgid "\t-O\t\t\t--optimize\n" -msgstr "\t-O\t\t\t--optimize\ttối ưu hoá\n" +msgstr "\t-O\t\t\t--optimize (tạm dịch: tối_ưu_hoá)\n" -#: main.c:808 +#: main.c:828 msgid "\t-p[file]\t\t--profile[=file]\n" -msgstr "\t-p[file]\t\t--profile[=file]\n" +msgstr "\t-p[tập_tin]\t\t--profile[=tập_tin]\n" -#: main.c:809 +#: main.c:829 msgid "\t-P\t\t\t--posix\n" msgstr "\t-P\t\t\t--posix\n" -#: main.c:810 +#: main.c:830 msgid "\t-r\t\t\t--re-interval\n" msgstr "\t-r\t\t\t--re-interval\n" -#: main.c:811 +#: main.c:831 msgid "\t-S\t\t\t--sandbox\n" msgstr "\t-S\t\t\t--sandbox\n" -#: main.c:812 +#: main.c:832 msgid "\t-t\t\t\t--lint-old\n" msgstr "\t-t\t\t\t--lint-old\n" -#: main.c:813 +#: main.c:833 msgid "\t-V\t\t\t--version\n" msgstr "\t-V\t\t\t--version\n" -#: main.c:815 +#: main.c:835 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:818 +#: main.c:838 msgid "\t-Y\t\t--parsedebug\n" msgstr "\t-Y\t\t--parsedebug\n" @@ -3126,7 +3011,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:827 +#: main.c:847 msgid "" "\n" "To report bugs, see node `Bugs' in `gawk.info', which is\n" @@ -3135,32 +3020,33 @@ msgid "" msgstr "" "\n" "Äể thông báo lá»—i, xem nút “Bugs†(lá»—i) trong tập tin\n" -"thông tin “gawk.info†mà nằm trong phần\n" -"“Reporting Problems and Bugs†(thông báo vấn đỠvà lá»—i)\n" +"thông tin “gawk.infoâ€, cái mà nằm trong phần\n" +"“Reporting Problems and Bugs†(thông báo trục trặc và lá»—i)\n" "trong bản in.\n" +"Thông báo lá»—i dịch cho: .\n" "\n" -#: main.c:831 +#: main.c:851 msgid "" "gawk is a pattern scanning and processing language.\n" "By default it reads standard input and writes standard output.\n" "\n" msgstr "" "gawk là ngôn ngữ quét và xá»­ lý mẫu.\n" -"Mặc định là nó Ä‘á»c thiết bị nhập chuẩn và ghi ra thiết bị xuất chuẩn.\n" +"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:835 +#: main.c:855 msgid "" "Examples:\n" "\tgawk '{ sum += $1 }; END { print sum }' file\n" "\tgawk -F: '{ print $1 }' /etc/passwd\n" msgstr "" -"Ví dụ :\n" -"\tgawk “{ sum += $1 }; END { print sum }†file\n" -"\tgawk -F: “{ print $1 }†/etc/passwd\n" +"Ví dụ:\n" +"\tgawk \"{ sum += $1 }; END { print sum }\" file\n" +"\tgawk -F: \"{ print $1 }\" /etc/passwd\n" -#: main.c:855 +#: main.c:880 #, c-format msgid "" "Copyright (C) 1989, 1991-%d Free Software Foundation.\n" @@ -3173,13 +3059,13 @@ msgid "" msgstr "" "Tác quyá»n © năm 1989, 1991-%d cá»§a Tổ chức Phần má»m Tá»± do.\n" "\n" -"Chương trình này là phần má»m tá»± do; bạn có thể phát hành lại nó và/hoặc sá»­a " -"đổi nó vá»›i Ä‘iá»u kiện cá»§a Giấy Phép Công Cá»™ng GNU như được xuất bản bởi Tổ " -"Chức Phần Má»m Tá»± Do; hoặc phiên bản 3 cá»§a Giấy Phép này, hoặc (tùy chá»n) bất " -"kỳ phiên bản sau nào.\n" +"Chương trình này là phần má»m tá»± do; bạn có thể phát hành lại nó\n" +"và/hoặc sá»­a đổi nó vá»›i các Ä‘iá»u Ä‘iá»u khoản cá»§a Giấy Phép Công Cá»™ng GNU\n" +"được xuất bản bởi Tổ Chức Phần Má»m Tá»± Do; hoặc là phiên bản 3\n" +"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:863 +#: main.c:888 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" @@ -3188,79 +3074,79 @@ msgid "" "\n" msgstr "" "Chúng tôi phân phối chương trình này vì mong muốn nó hữu ích,\n" -"nhưng mà KHÔNG BẢO ÄẢM GÃŒ CẢ, không ngay cả ngụ ý bảo đảm\n" -"KHẢ NÄ‚NG BÃN hoặc KHẢ NÄ‚NG LÀM VIỆC DỨT KHOÃT.\n" -"Hãy xem Bản Quyá»n Công Chung GNU (GPL) để tìm chi tiết.\n" +"nhưng mà KHÔNG BẢO ÄẢM GÃŒ CẢ, không ngay cả khi nó ÄÆ¯á»¢C BÃN\n" +"hoặc PHÙ HỢP VỚI CÃC MỤC ÄÃCH ÄẶC THÙ.\n" +"Hãy xem Giấy phép Công Chung GNU (GPL) để biết chi tiết.\n" "\n" -#: main.c:869 +#: main.c:894 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 "" "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 lấy vá» từ “http://www.gnu.org/licenses/â€.\n" +"trình này. Nếu chưa có, bạn xem tại .\n" -#: main.c:904 +#: main.c:931 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:1181 +#: main.c:1208 #, c-format msgid "unknown value for field spec: %d\n" -msgstr "không hiểu giá trị dành cho đặc tính trưá»ng: %d\n" +msgstr "không hiểu giá trị dành cho đặc tả trưá»ng: %d\n" -#: main.c:1279 +#: main.c:1306 #, c-format msgid "" "%s: `%s' argument to `-v' not in `var=value' form\n" "\n" msgstr "" -"%s: đối số “%s†đối vá»›i “-v†không có dạng “biến=giá_trịâ€\n" +"%s: đối số “%s†cho “-v†không có dạng “biến=giá_trịâ€\n" "\n" -#: main.c:1305 +#: main.c:1332 #, 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:1308 +#: main.c:1335 #, 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:1312 +#: main.c:1339 #, 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:1317 +#: main.c:1344 #, 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:1370 +#: main.c:1397 msgid "floating point exception" -msgstr "ngoại lệ Ä‘iểm phù động" +msgstr "ngoại lệ số thá»±c dấu chấm động" -#: main.c:1377 +#: main.c:1404 msgid "fatal error: internal error" msgstr "lá»—i nghiêm trá»ng: lá»—i ná»™i bá»™" -#: main.c:1392 +#: main.c:1419 msgid "fatal error: internal error: segfault" -msgstr "lá»—i nghiêm trá»ng: lá»—i ná»™i bá»™ : lá»—i chia ra từng Ä‘oạn" +msgstr "lá»—i nghiêm trá»ng: lá»—i ná»™i bá»™: lá»—i phân Ä‘oạn" -#: main.c:1404 +#: main.c:1431 msgid "fatal error: internal error: stack overflow" -msgstr "lá»—i nghiêm trá»ng: lá»—i ná»™i bá»™ : tràn đống" +msgstr "lá»—i nghiêm trá»ng: lá»—i ná»™i bá»™: tràn ngăn xếp" -#: main.c:1463 +#: main.c:1490 #, 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:1470 +#: main.c:1497 #, c-format msgid "could not pre-open /dev/null for fd %d" msgstr "không thể mở trước “/dev/null†cho fd %d" @@ -3315,19 +3201,19 @@ msgstr "%s: đối số #%d giá trị phần phân số %Rg sẽ bị cắt c 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" -#: msg.c:61 +#: msg.c:68 #, c-format msgid "cmd. line:" msgstr "dòng lệnh:" #: node.c:421 msgid "backslash at end of string" -msgstr "gặp xuyệc ngoặc tại kết thúc cá»§a chuá»—i" +msgstr "gặp dấu gạch ngược tại kết thúc cá»§a chuá»—i" #: node.c:500 #, c-format msgid "old awk does not support the `\\%c' escape sequence" -msgstr "awk cÅ© không há»— trợ dãy thoát “\\%câ€" +msgstr "awk cÅ© không há»— trợ thoát chuá»—i “\\%câ€" #: node.c:551 msgid "POSIX does not allow `\\x' escapes" @@ -3335,29 +3221,21 @@ msgstr "POSIX không cho phép thoát chuá»—i “\\xâ€" #: node.c:557 msgid "no hex digits in `\\x' escape sequence" -msgstr "không có số thập lúc nằm trong dây thoát “\\xâ€" +msgstr "không có số thập lúc nằm trong thoát chuá»—i “\\xâ€" #: node.c:579 #, c-format -msgid "" -"hex escape \\x%.*s of %d characters probably not interpreted the way you " -"expect" -msgstr "" -"dây thoát 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" +msgid "hex escape \\x%.*s of %d characters probably not interpreted the way you expect" +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 #, c-format msgid "escape sequence `\\%c' treated as plain `%c'" -msgstr "dây thoát “\\%c†được xá»­ lý như là “%c†chuẩn" +msgstr "thoát chuá»—i “\\%c†được xá»­ lý như là “%c†chuẩn" #: node.c:739 -msgid "" -"Invalid multibyte data detected. There may be a mismatch between your data " -"and your locale." -msgstr "" -"Dữ liệu dạng Ä‘a byte (multibyte) không hợp lệ được tìm thấy. Tại đó có lẽ " -"không khá»›p giữa dữ liệu cá»§a bạn và nÆ¡i xảy ra." +msgid "Invalid multibyte data detected. There may be a mismatch between your data and your locale." +msgstr "Dữ liệu dạng Ä‘a byte (multibyte) không hợp lệ được tìm thấy. Tại đó có lẽ không khá»›p giữa dữ liệu cá»§a bạn và nÆ¡i xảy ra." #: posix/gawkmisc.c:177 #, c-format @@ -3367,20 +3245,18 @@ msgstr "%s %s “%sâ€: không thể lấy cá» mô tả (fd): (fcntl F_GETFD: % #: posix/gawkmisc.c:189 #, c-format msgid "%s %s `%s': could not set close-on-exec: (fcntl F_SETFD: %s)" -msgstr "" -"%s %s “%sâ€: không thể đặt “close-on-exec†(đóng má»™t khi thá»±c hiện): (fcntl " -"F_SETFD: %s)" +msgstr "%s %s “%sâ€: không thể đặt “close-on-exec†(đóng má»™t khi thá»±c hiện): (fcntl F_SETFD: %s)" -#: profile.c:70 +#: profile.c:71 #, c-format msgid "could not open `%s' for writing: %s" msgstr "không thể mở “%s†để ghi: %s" -#: profile.c:72 +#: profile.c:73 msgid "sending profile to standard error" msgstr "Ä‘ang gởi hồ sÆ¡ cho thiết bị lá»—i chuẩn" -#: profile.c:188 +#: profile.c:193 #, c-format msgid "" "\t# %s block(s)\n" @@ -3389,7 +3265,7 @@ msgstr "" "\t# %s khối\n" "\n" -#: profile.c:193 +#: profile.c:198 #, c-format msgid "" "\t# Rule(s)\n" @@ -3398,16 +3274,16 @@ msgstr "" "\t# Quy tắc\n" "\n" -#: profile.c:267 +#: profile.c:272 #, c-format 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:530 +#: profile.c:537 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:942 +#: profile.c:949 #, c-format msgid "" "\t# Loaded extensions (-l and/or @load)\n" @@ -3416,12 +3292,12 @@ msgstr "" "\t# Các phần mở rá»™ng được tải (-l và/hoặc @load)\n" "\n" -#: profile.c:965 +#: profile.c:972 #, c-format msgid "\t# gawk profile, created %s\n" msgstr "\t# hồ sÆ¡ gawk, được tạo %s\n" -#: profile.c:1351 +#: profile.c:1475 #, c-format msgid "" "\n" @@ -3430,22 +3306,15 @@ msgstr "" "\n" "\t# Danh sách các hàm theo thứ tá»± abc\n" -#: profile.c:1389 +#: profile.c:1513 #, c-format msgid "redir2str: unknown redirection type %d" msgstr "redir2str: không hiểu kiểu chuyển hướng %d" -#: re.c:583 -#, c-format -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í" - -#: re.c:610 +#: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" -msgstr "" -"thành phần cá»§a biểu thức chính qui (regexp) “%.*s†hầu như chắc chắn nên là " -"“[%.*s]â€" +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 msgid "Success" @@ -3469,11 +3338,11 @@ msgstr "Tên hạng ký tá»± không hợp lệ" #: regcomp.c:146 msgid "Trailing backslash" -msgstr "Gặp xuyệc ngược nằm theo" +msgstr "Gặp dấu gạch ngược thừa" #: regcomp.c:149 msgid "Invalid back reference" -msgstr "Tham chiếu trở lại không hợp lệ" +msgstr "Tham chiếu ngược không hợp lệ" #: regcomp.c:152 msgid "Unmatched [ or [^" @@ -3493,7 +3362,7 @@ msgstr "Kết thúc phạm vi không hợp lệ" #: regcomp.c:167 msgid "Memory exhausted" -msgstr "Hết bá»™ nhá»› rồi" +msgstr "Hết bá»™ nhá»›" #: regcomp.c:170 msgid "Invalid preceding regular expression" @@ -3505,21 +3374,24 @@ msgstr "Kết thúc quá sá»›m cá»§a biểu thức chính quy" #: regcomp.c:179 msgid "Unmatched ) or \\)" -msgstr "Chưa khá»›p “)†hay “\\)â€" +msgstr "Chưa khá»›p “)†hoặc “\\)â€" #: regcomp.c:704 msgid "No previous regular expression" msgstr "Không có biểu thức chính quy nằm trước" -#: symbol.c:740 +#: symbol.c:741 msgid "can not pop main context" -msgstr "không thể pop ngữ cảnh chính" +msgstr "không thể pop (lấy ra) ngữ cảnh chính" + +#~ 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 sở khởi “%s[â€%.*sâ€]â€" +#~ msgstr "tham chiếu đến phần tá»­ chưa khởi tạo “%s[â€%.*sâ€]â€" #~ msgid "subscript of array `%s' is null string" #~ msgstr "chữ in dưới mảng “%s†là chuá»—i rá»—ng" @@ -3584,14 +3456,11 @@ msgstr "không thể pop ngữ cảnh chính" #~ msgid "statement has no effect" #~ msgstr "câu không có tác dụng" -#~ msgid "" -#~ "for loop: array `%s' changed size from %ld to %ld during loop execution" -#~ msgstr "" -#~ "cho loop: (cho vòng lặp) mảng “%s†đã thay đổi kích thước từ %ld đến %ld " -#~ "trong khi thá»±c hiện vòng lặp" +#~ msgid "for loop: array `%s' changed size from %ld to %ld during loop execution" +#~ msgstr "cho loop: (cho vòng lặp) mảng “%s†đã thay đổi kích thước từ %ld đến %ld trong khi thá»±c hiện vòng lặp" #~ msgid "function called indirectly through `%s' does not exist" #~ msgstr "hàm được gá»i gián tiếp thông qua “%s†không tồn tại" #~ msgid "function `%s' not defined" -#~ msgstr "chưa xác định hàm “%sâ€" +#~ msgstr "chưa định nghÄ©a hàm “%sâ€" -- cgit v1.2.3 From 132f956360d721fccf4f3829044f5f6eceac3ffd Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 17 Jan 2014 13:35:08 +0200 Subject: Quote $(top_srcdir) in test/Makefile.am. --- test/ChangeLog | 4 ++++ test/Makefile.am | 6 +++--- test/Makefile.in | 6 +++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/test/ChangeLog b/test/ChangeLog index 95f8fe17..1da74f8a 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2014-01-17 Arnold D. Robbins + + * Makefile.am: Quote instances of $(top_srcdir) also. + 2014-01-16 Andrew J. Schorr * Makefile.am (strftime): Remove comment about the race condition, since diff --git a/test/Makefile.am b/test/Makefile.am index cb9bdc83..8f37d25b 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1800,7 +1800,7 @@ inplace3:: testext:: @echo $@ - @$(AWK) '/^(@load|BEGIN)/,/^}/' $(top_srcdir)/extension/testext.c > testext.awk + @$(AWK) '/^(@load|BEGIN)/,/^}/' "$(top_srcdir)"/extension/testext.c > testext.awk @$(AWK) -f testext.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ testext.awk @@ -1810,8 +1810,8 @@ readdir: echo If it does, try rerunning on an ext'[234]' filesystem. ; \ fi @echo $@ - @$(AWK) -f "$(srcdir)"/readdir.awk $(top_srcdir) > _$@ - @ls -afli $(top_srcdir) | sed 1d | $(AWK) -f "$(srcdir)"/readdir0.awk -v extout=_$@ $(top_srcdir) > $@.ok + @$(AWK) -f "$(srcdir)"/readdir.awk "$(top_srcdir)" > _$@ + @ls -afli $"(top_srcdir)" | sed 1d | $(AWK) -f "$(srcdir)"/readdir0.awk -v extout=_$@ "$(top_srcdir)" > $@.ok @-$(CMP) $@.ok _$@ && rm -f $@.ok _$@ fts: diff --git a/test/Makefile.in b/test/Makefile.in index fa0f6345..3108723f 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -2223,7 +2223,7 @@ inplace3:: testext:: @echo $@ - @$(AWK) '/^(@load|BEGIN)/,/^}/' $(top_srcdir)/extension/testext.c > testext.awk + @$(AWK) '/^(@load|BEGIN)/,/^}/' "$(top_srcdir)"/extension/testext.c > testext.awk @$(AWK) -f testext.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ testext.awk @@ -2233,8 +2233,8 @@ readdir: echo If it does, try rerunning on an ext'[234]' filesystem. ; \ fi @echo $@ - @$(AWK) -f "$(srcdir)"/readdir.awk $(top_srcdir) > _$@ - @ls -afli $(top_srcdir) | sed 1d | $(AWK) -f "$(srcdir)"/readdir0.awk -v extout=_$@ $(top_srcdir) > $@.ok + @$(AWK) -f "$(srcdir)"/readdir.awk "$(top_srcdir)" > _$@ + @ls -afli $"(top_srcdir)" | sed 1d | $(AWK) -f "$(srcdir)"/readdir0.awk -v extout=_$@ "$(top_srcdir)" > $@.ok @-$(CMP) $@.ok _$@ && rm -f $@.ok _$@ fts: -- cgit v1.2.3 From 5163d771a34406de44889c9e297699d04af13308 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 17 Jan 2014 13:40:38 +0200 Subject: Fix typo from last change. --- test/Makefile.am | 2 +- test/Makefile.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Makefile.am b/test/Makefile.am index 8f37d25b..5a0c5a63 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1811,7 +1811,7 @@ readdir: fi @echo $@ @$(AWK) -f "$(srcdir)"/readdir.awk "$(top_srcdir)" > _$@ - @ls -afli $"(top_srcdir)" | sed 1d | $(AWK) -f "$(srcdir)"/readdir0.awk -v extout=_$@ "$(top_srcdir)" > $@.ok + @ls -afli "$(top_srcdir)" | sed 1d | $(AWK) -f "$(srcdir)"/readdir0.awk -v extout=_$@ "$(top_srcdir)" > $@.ok @-$(CMP) $@.ok _$@ && rm -f $@.ok _$@ fts: diff --git a/test/Makefile.in b/test/Makefile.in index 3108723f..d0d527f4 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -2234,7 +2234,7 @@ readdir: fi @echo $@ @$(AWK) -f "$(srcdir)"/readdir.awk "$(top_srcdir)" > _$@ - @ls -afli $"(top_srcdir)" | sed 1d | $(AWK) -f "$(srcdir)"/readdir0.awk -v extout=_$@ "$(top_srcdir)" > $@.ok + @ls -afli "$(top_srcdir)" | sed 1d | $(AWK) -f "$(srcdir)"/readdir0.awk -v extout=_$@ "$(top_srcdir)" > $@.ok @-$(CMP) $@.ok _$@ && rm -f $@.ok _$@ fts: -- cgit v1.2.3 From c4a448931a9f8a2bf3f4eb4f762fe3003d3f3bf3 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sat, 18 Jan 2014 21:45:41 +0200 Subject: Update dfa.c:parse_bracket_exp. --- ChangeLog | 5 +++++ dfa.c | 27 --------------------------- 2 files changed, 5 insertions(+), 27 deletions(-) diff --git a/ChangeLog b/ChangeLog index d393cb9b..a5989414 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-01-18 Arnold D. Robbins + + * dfa.c (parse_bracket_exp): Sync with GNU grep, which now uses + gawk's code for RRI in single-byte locales! Hurray. + 2014-01-16 Arnold D. Robbins * configure.ac: For z/OS, restore creation of do-nothing diff --git a/dfa.c b/dfa.c index 44bb220e..ac1cf9a0 100644 --- a/dfa.c +++ b/dfa.c @@ -1150,32 +1150,6 @@ parse_bracket_exp (void) } else { -#ifndef GAWK - /* Defer to the system regex library about the meaning - of range expressions. */ - regex_t re; - char pattern[6] = { '[', 0, '-', 0, ']', 0 }; - char subject[2] = { 0, 0 }; - c1 = c; - if (case_fold) - { - c1 = tolower (c1); - c2 = tolower (c2); - } - - pattern[1] = c1; - pattern[3] = c2; - regcomp (&re, pattern, REG_NOSUB); - for (c = 0; c < NOTCHAR; ++c) - { - if ((case_fold && isupper (c))) - continue; - subject[0] = c; - if (regexec (&re, subject, 0, NULL, 0) != REG_NOMATCH) - setbit_case_fold_c (c, ccl); - } - regfree (&re); -#else c1 = c; if (case_fold) { @@ -1184,7 +1158,6 @@ parse_bracket_exp (void) } for (c = c1; c <= c2; c++) setbit_case_fold_c (c, ccl); -#endif } colon_warning_state |= 8; -- cgit v1.2.3 From 9092450b4459af490e4d52ad3188d3282f36f726 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 19 Jan 2014 19:15:33 +0200 Subject: Update nl translation. --- po/nl.gmo | Bin 69748 -> 71832 bytes po/nl.po | 1326 +++++++++++++++++++++++++++++-------------------------------- 2 files changed, 620 insertions(+), 706 deletions(-) diff --git a/po/nl.gmo b/po/nl.gmo index 7801796c..b566051d 100644 Binary files a/po/nl.gmo and b/po/nl.gmo differ diff --git a/po/nl.po b/po/nl.po index e15d9ff0..63b2191a 100644 --- a/po/nl.po +++ b/po/nl.po @@ -1,17 +1,17 @@ # Dutch translations for GNU gawk. -# Copyright (C) 2013 Free Software Foundation, Inc. +# Copyright (C) 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the gawk package. # -# Bright red with teasing buttons. +# “Flierefluiten!!†# -# Benno Schulenberg , 2005, 2007, 2010, 2011, 2012, 2013. +# Benno Schulenberg , 2005, 2007, 2010, 2011, 2012, 2013, 2014. # Erwin Poeze , 2009. msgid "" msgstr "" -"Project-Id-Version: gawk 4.0.75\n" +"Project-Id-Version: gawk 4.1.0b\n" "Report-Msgid-Bugs-To: arnold@skeeve.com\n" -"POT-Creation-Date: 2013-05-09 16:05+0300\n" -"PO-Revision-Date: 2013-04-25 21:49+0200\n" +"POT-Creation-Date: 2014-01-14 22:23+0200\n" +"PO-Revision-Date: 2014-01-19 12:42+0100\n" "Last-Translator: Benno Schulenberg \n" "Language-Team: Dutch \n" "Language: nl\n" @@ -21,92 +21,84 @@ msgstr "" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: array.c:254 +#: array.c:256 #, c-format msgid "from %s" msgstr "van %s" -#: array.c:354 +#: array.c:357 msgid "attempt to use a scalar value as array" msgstr "scalaire waarde wordt gebruikt als array" -#: array.c:356 +#: array.c:359 #, c-format msgid "attempt to use scalar parameter `%s' as an array" msgstr "scalaire parameter '%s' wordt gebruikt als array" -#: array.c:359 +#: array.c:362 #, c-format msgid "attempt to use scalar `%s' as an array" msgstr "scalair '%s' wordt gebruikt als array" -#: array.c:406 array.c:573 builtin.c:85 builtin.c:1591 builtin.c:1637 -#: builtin.c:1650 builtin.c:2078 builtin.c:2092 eval.c:1121 eval.c:1125 -#: eval.c:1524 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" msgstr "array '%s' wordt gebruikt in een scalaire context" -#: array.c:580 +#: array.c:583 #, c-format msgid "delete: index `%s' not in array `%s'" msgstr "delete: index '%s' niet in array '%s'" -#: array.c:594 +#: array.c:597 #, c-format msgid "attempt to use scalar `%s[\"%.*s\"]' as an array" msgstr "scalair '%s[\"%.*s\"]' wordt gebruikt als array" -#: array.c:773 +#: array.c:776 msgid "adump: first argument not an array" msgstr "adump: eerste argument is geen array" -#: array.c:812 +#: array.c:815 msgid "asort: second argument not an array" msgstr "asort: tweede argument is geen array" -#: array.c:813 +#: array.c:816 msgid "asorti: second argument not an array" msgstr "asorti: tweede argument is geen array" -#: array.c:820 +#: array.c:823 msgid "asort: first argument not an array" msgstr "asort: eerste argument is geen array" -#: array.c:821 +#: array.c:824 msgid "asorti: first argument not an array" msgstr "asorti: eerste argument is geen array" -#: array.c:828 +#: array.c:831 msgid "asort: cannot use a subarray of first arg for second arg" -msgstr "" -"asort: een subarray van het eerste argument kan niet als tweede argument " -"gebruikt worden" +msgstr "asort: een subarray van het eerste argument kan niet als tweede argument gebruikt worden" -#: array.c:829 +#: array.c:832 msgid "asorti: cannot use a subarray of first arg for second arg" -msgstr "" -"asorti: een subarray van het eerste argument kan niet als tweede argument " -"gebruikt worden" +msgstr "asorti: een subarray van het eerste argument kan niet als tweede argument gebruikt worden" -#: array.c:834 +#: array.c:837 msgid "asort: cannot use a subarray of second arg for first arg" -msgstr "" -"asort: een subarray van het tweede argument kan niet als eerste argument " -"gebruikt worden" +msgstr "asort: een subarray van het tweede argument kan niet als eerste argument gebruikt worden" -#: array.c:835 +#: array.c:838 msgid "asorti: cannot use a subarray of second arg for first arg" -msgstr "" -"asorti: een subarray van het tweede argument kan niet als eerste argument " -"gebruikt worden" +msgstr "asorti: een subarray van het tweede argument kan niet als eerste argument gebruikt worden" -#: array.c:1309 +#: array.c:1314 #, c-format msgid "`%s' is invalid as a function name" msgstr "'%s' is ongeldig als functienaam" -#: array.c:1313 +#: array.c:1318 #, c-format msgid "sort comparison function `%s' is not defined" msgstr "sorteervergelijkingsfunctie '%s' is niet gedefinieerd" @@ -171,8 +163,7 @@ msgstr "'return' wordt gebruikt buiten functiecontext" #: awkgram.y:922 msgid "plain `print' in BEGIN or END rule should probably be `print \"\"'" -msgstr "" -"kale 'print' in BEGIN- of END-regel moet vermoedelijk 'print \"\"' zijn" +msgstr "kale 'print' in BEGIN- of END-regel moet vermoedelijk 'print \"\"' zijn" #: awkgram.y:988 awkgram.y:1037 msgid "`delete' is not allowed with SYMTAB" @@ -235,18 +226,17 @@ msgstr "indirecte functieaanroepen zijn een gawk-uitbreiding" #: awkgram.y:1620 #, c-format msgid "can not use special variable `%s' for indirect function call" -msgstr "" -"kan speciale variabele '%s' niet voor indirecte functieaanroep gebruiken" +msgstr "kan speciale variabele '%s' niet voor indirecte functieaanroep gebruiken" #: awkgram.y:1698 msgid "invalid subscript expression" msgstr "ongeldige index-expressie" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:119 +#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "waarschuwing: " -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:151 +#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "fataal: " @@ -254,8 +244,8 @@ msgstr "fataal: " msgid "unexpected newline or end of string" msgstr "onverwacht regeleinde of einde van string" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:517 debug.c:533 -#: debug.c:2792 debug.c:5040 +#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 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)" @@ -265,7 +255,7 @@ msgstr "kan bronbestand '%s' niet openen om te lezen (%s)" msgid "can't open shared library `%s' for reading (%s)" msgstr "kan gedeelde bibliotheek '%s' niet openen om te lezen (%s)" -#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:130 debug.c:5191 +#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "reden onbekend" @@ -302,7 +292,7 @@ msgstr "lege bestandsnaam na '@load'" #: awkgram.y:2610 msgid "empty program text on command line" -msgstr "lege programmatekst op commandoregel" +msgstr "lege programmatekst op opdrachtregel" #: awkgram.y:2725 #, c-format @@ -432,16 +422,15 @@ msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" msgstr "dcngettext(_\"...\") is onjuist: verwijder het liggende streepje" #: awkgram.y:3992 -#, fuzzy msgid "index: regexp constant as second argument is not allowed" -msgstr "index: tweede argument is geen string" +msgstr "index: een reguliere-expressie-constante als tweede argument is niet toegestaan" #: awkgram.y:4045 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "functie '%s': parameter '%s' schaduwt een globale variabele" -#: awkgram.y:4102 debug.c:4021 debug.c:4064 debug.c:5189 +#: awkgram.y:4102 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)" @@ -476,30 +465,29 @@ msgstr "functie '%s': kan functienaam niet als parameternaam gebruiken" #: awkgram.y:4264 #, 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" +msgstr "functie '%s': kan speciale variabele '%s' niet als functieparameter gebruiken" #: awkgram.y:4272 #, c-format msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d" msgstr "functie '%s': parameter #%d, '%s', dupliceert parameter #%d" -#: awkgram.y:4366 awkgram.y:4372 +#: awkgram.y:4359 awkgram.y:4365 #, c-format msgid "function `%s' called but never defined" msgstr "functie '%s' wordt aangeroepen maar is nergens gedefinieerd" -#: awkgram.y:4376 +#: awkgram.y:4369 #, c-format msgid "function `%s' defined but never called directly" msgstr "functie '%s' is gedefinieerd maar wordt nergens direct aangeroepen" -#: awkgram.y:4408 +#: awkgram.y:4401 #, c-format msgid "regexp constant for parameter #%d yields boolean value" msgstr "regexp-constante als parameter #%d levert booleanwaarde op" -#: awkgram.y:4467 +#: awkgram.y:4460 #, c-format msgid "" "function `%s' called with space between name and `(',\n" @@ -508,421 +496,421 @@ msgstr "" "functie '%s' wordt aangeroepen met een spatie tussen naam en '(',\n" "of wordt gebruikt als variabele of array" -#: awkgram.y:4703 +#: awkgram.y:4696 msgid "division by zero attempted" msgstr "deling door nul" -#: awkgram.y:4712 +#: awkgram.y:4705 #, c-format msgid "division by zero attempted in `%%'" msgstr "deling door nul in '%%'" -#: builtin.c:128 +#: awkgram.y:5025 +msgid "cannot assign a value to the result of a field post-increment expression" +msgstr "" + +#: awkgram.y:5028 +#, c-format +msgid "invalid target of assignment (opcode %s)" +msgstr "ongeldig doel van toewijzing (opcode %s)" + +#: builtin.c:133 #, c-format msgid "%s to \"%s\" failed (%s)" msgstr "%s naar \"%s\" is mislukt (%s)" -#: builtin.c:129 +#: builtin.c:134 msgid "standard output" msgstr "standaarduitvoer" -#: builtin.c:143 +#: builtin.c:148 msgid "exp: received non-numeric argument" msgstr "exp: argument is geen getal" -#: builtin.c:149 +#: builtin.c:154 #, c-format msgid "exp: argument %g is out of range" msgstr "exp: argument %g ligt buiten toegestane bereik" -#: builtin.c:224 +#: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" -msgstr "" -"fflush: kan pijp niet leegmaken: '%s' is geopend om te lezen, niet om te " -"schrijven" +msgstr "fflush: kan pijp niet leegmaken: '%s' is geopend om te lezen, niet om te schrijven" -#: builtin.c:227 +#: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" -msgstr "" -"fflush: kan bestand niet leegmaken: '%s' is geopend om te lezen, niet om te " -"schrijven" +msgstr "fflush: kan bestand niet leegmaken: '%s' is geopend om te lezen, niet om te schrijven" -#: builtin.c:239 +#: builtin.c:244 #, c-format 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:357 +#: builtin.c:362 msgid "index: received non-string first argument" msgstr "index: eerste argument is geen string" -#: builtin.c:359 +#: builtin.c:364 msgid "index: received non-string second argument" msgstr "index: tweede argument is geen string" -#: builtin.c:483 mpfr.c:757 +#: builtin.c:488 mpfr.c:757 msgid "int: received non-numeric argument" msgstr "int: argument is geen getal" -#: builtin.c:520 +#: builtin.c:525 msgid "length: received array argument" msgstr "length: argument is een array" -#: builtin.c:523 +#: builtin.c:528 msgid "`length(array)' is a gawk extension" msgstr "'length(array)' is een gawk-uitbreiding" -#: builtin.c:539 +#: builtin.c:544 msgid "length: received non-string argument" msgstr "length: argument is geen string" -#: builtin.c:570 +#: builtin.c:575 msgid "log: received non-numeric argument" msgstr "log: argument is geen getal" -#: builtin.c:573 +#: builtin.c:578 #, c-format msgid "log: received negative argument %g" msgstr "log: argument %g is negatief" -#: builtin.c:771 builtin.c:776 +#: builtin.c:776 builtin.c:781 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:846 +#: builtin.c:851 #, c-format msgid "field width is ignored for `%%' specifier" msgstr "veldbreedte wordt genegeerd voor opmaakaanduiding '%%'" -#: builtin.c:848 +#: builtin.c:853 #, c-format msgid "precision is ignored for `%%' specifier" msgstr "veldprecisie wordt genegeerd voor opmaakaanduiding '%%'" -#: builtin.c:850 +#: builtin.c:855 #, c-format msgid "field width and precision are ignored for `%%' specifier" msgstr "veldbreedte en -precisie worden genegeerd voor opmaakaanduiding '%%'" -#: builtin.c:901 +#: builtin.c:906 msgid "fatal: `$' is not permitted in awk formats" msgstr "fataal: '$' is niet toegestaan in awk-opmaak" -#: builtin.c:910 +#: builtin.c:915 msgid "fatal: arg count with `$' must be > 0" msgstr "fataal: het aantal argumenten met '$' moet > 0 zijn" -#: builtin.c:914 +#: builtin.c:919 #, 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:918 +#: builtin.c:923 msgid "fatal: `$' not permitted after period in format" msgstr "fataal: '$' is niet toegestaan na een punt in de opmaak" -#: builtin.c:934 +#: builtin.c:939 msgid "fatal: no `$' supplied for positional field width or precision" msgstr "fataal: geen '$' opgegeven bij positionele veldbreedte of -precisie" -#: builtin.c:1006 +#: builtin.c:1011 msgid "`l' is meaningless in awk formats; ignored" msgstr "'l' is betekenisloos in awk-opmaak; genegeerd" -#: builtin.c:1010 +#: builtin.c:1015 msgid "fatal: `l' is not permitted in POSIX awk formats" msgstr "fataal: 'l' is niet toegestaan in POSIX awk-opmaak" -#: builtin.c:1023 +#: builtin.c:1028 msgid "`L' is meaningless in awk formats; ignored" msgstr "'L' is betekenisloos in awk-opmaak; genegeerd" -#: builtin.c:1027 +#: builtin.c:1032 msgid "fatal: `L' is not permitted in POSIX awk formats" msgstr "fataal: 'L' is niet toegestaan in POSIX awk-opmaak" -#: builtin.c:1040 +#: builtin.c:1045 msgid "`h' is meaningless in awk formats; ignored" msgstr "'h' is betekenisloos in awk-opmaak; genegeerd" -#: builtin.c:1044 +#: builtin.c:1049 msgid "fatal: `h' is not permitted in POSIX awk formats" msgstr "fataal: 'h' is niet toegestaan in POSIX awk-opmaak" -#: builtin.c:1439 +#: builtin.c:1447 #, 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:1537 +#: builtin.c:1545 #, c-format msgid "ignoring unknown format specifier character `%c': no argument converted" -msgstr "" -"onbekend opmaakteken '%c' wordt genegeerd: geen argument is geconverteerd" +msgstr "onbekend opmaakteken '%c' wordt genegeerd: geen argument is geconverteerd" -#: builtin.c:1542 +#: builtin.c:1550 msgid "fatal: not enough arguments to satisfy format string" msgstr "fataal: niet genoeg argumenten voor opmaakstring" -#: builtin.c:1544 +#: builtin.c:1552 msgid "^ ran out for this one" msgstr "niet genoeg ^ voor deze" -#: builtin.c:1551 +#: builtin.c:1559 msgid "[s]printf: format specifier does not have control letter" msgstr "[s]printf: opmaakaanduiding mist een stuurletter" -#: builtin.c:1554 +#: builtin.c:1562 msgid "too many arguments supplied for format string" msgstr "te veel argumenten voor opmaakstring" -#: builtin.c:1610 +#: builtin.c:1618 msgid "sprintf: no arguments" msgstr "sprintf: geen argumenten" -#: builtin.c:1633 builtin.c:1644 +#: builtin.c:1641 builtin.c:1652 msgid "printf: no arguments" msgstr "printf: geen argumenten" -#: builtin.c:1687 +#: builtin.c:1695 msgid "sqrt: received non-numeric argument" msgstr "sqrt: argument is geen getal" -#: builtin.c:1691 +#: builtin.c:1699 #, c-format msgid "sqrt: called with negative argument %g" msgstr "sqrt: argument %g is negatief" -#: builtin.c:1722 +#: builtin.c:1730 #, c-format msgid "substr: length %g is not >= 1" msgstr "substr: lengte %g is niet >= 1" -#: builtin.c:1724 +#: builtin.c:1732 #, c-format msgid "substr: length %g is not >= 0" msgstr "substr: lengte %g is niet >= 0" -#: builtin.c:1731 +#: builtin.c:1739 #, c-format msgid "substr: non-integer length %g will be truncated" msgstr "substr: lengte %g is geen integer; wordt afgekapt" -#: builtin.c:1736 +#: builtin.c:1744 #, 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" +msgstr "substr: lengte %g is te groot voor stringindexering; wordt verkort tot %g" -#: builtin.c:1748 +#: builtin.c:1756 #, c-format msgid "substr: start index %g is invalid, using 1" msgstr "substr: startindex %g is ongeldig; 1 wordt gebruikt" -#: builtin.c:1753 +#: builtin.c:1761 #, c-format msgid "substr: non-integer start index %g will be truncated" msgstr "substr: startindex %g is geen integer; wordt afgekapt" -#: builtin.c:1778 +#: builtin.c:1786 msgid "substr: source string is zero length" msgstr "substr: bronstring heeft lengte nul" -#: builtin.c:1794 +#: builtin.c:1802 #, 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:1802 +#: builtin.c:1810 #, c-format -msgid "" -"substr: length %g at start index %g exceeds length of first argument (%lu)" -msgstr "" -"substr: lengte %g bij startindex %g is groter dan de lengte van het eerste " -"argument (%lu)" +msgid "substr: length %g at start index %g exceeds length of first argument (%lu)" +msgstr "substr: lengte %g bij startindex %g is groter dan de lengte van het eerste argument (%lu)" -#: builtin.c:1876 +#: builtin.c:1884 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" msgstr "strftime: opmaakwaarde in PROCINFO[\"strftime\"] is numeriek" -#: builtin.c:1899 +#: builtin.c:1907 msgid "strftime: received non-numeric second argument" msgstr "strftime: tweede argument is geen getal" -#: builtin.c:1903 +#: builtin.c:1911 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:1910 +#: builtin.c:1918 msgid "strftime: received non-string first argument" msgstr "strftime: eerste argument is geen string" -#: builtin.c:1917 +#: builtin.c:1925 msgid "strftime: received empty format string" msgstr "strftime: opmaakstring is leeg" -#: builtin.c:1983 +#: builtin.c:1991 msgid "mktime: received non-string argument" msgstr "mktime: argument is geen string" -#: builtin.c:2000 +#: builtin.c:2008 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:2035 +#: builtin.c:2043 msgid "'system' function not allowed in sandbox mode" msgstr "'system'-functie is niet toegestaan in sandbox-modus" -#: builtin.c:2040 +#: builtin.c:2048 msgid "system: received non-string argument" msgstr "system: argument is geen string" -#: builtin.c:2160 +#: builtin.c:2168 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "verwijzing naar ongeïnitialiseerd veld '$%d'" -#: builtin.c:2247 +#: builtin.c:2255 msgid "tolower: received non-string argument" msgstr "tolower: argument is geen string" -#: builtin.c:2281 +#: builtin.c:2289 msgid "toupper: received non-string argument" msgstr "toupper: argument is geen string" -#: builtin.c:2317 mpfr.c:672 +#: builtin.c:2325 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2: eerste argument is geen getal" -#: builtin.c:2319 mpfr.c:674 +#: builtin.c:2327 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2: tweede argument is geen getal" -#: builtin.c:2338 +#: builtin.c:2346 msgid "sin: received non-numeric argument" msgstr "sin: argument is geen getal" -#: builtin.c:2354 +#: builtin.c:2362 msgid "cos: received non-numeric argument" msgstr "cos: argument is geen getal" -#: builtin.c:2407 mpfr.c:1156 +#: builtin.c:2415 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand: argument is geen getal" -#: builtin.c:2438 +#: builtin.c:2446 msgid "match: third argument is not an array" msgstr "match: derde argument is geen array" -#: builtin.c:2710 +#: builtin.c:2718 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub: derde argument is 0; wordt beschouwd als 1" -#: builtin.c:3003 +#: builtin.c:3014 msgid "lshift: received non-numeric first argument" msgstr "lshift: eerste argument is geen getal" -#: builtin.c:3005 +#: builtin.c:3016 msgid "lshift: received non-numeric second argument" msgstr "lshift: tweede argument is geen getal" -#: builtin.c:3011 +#: builtin.c:3022 #, c-format msgid "lshift(%f, %f): negative values will give strange results" msgstr "lshift(%f, %f): negatieve waarden geven rare resultaten" -#: builtin.c:3013 +#: builtin.c:3024 #, c-format msgid "lshift(%f, %f): fractional values will be truncated" msgstr "lshift(%f, %f): cijfers na de komma worden afgekapt" -#: builtin.c:3015 +#: builtin.c:3026 #, 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:3040 +#: builtin.c:3051 msgid "rshift: received non-numeric first argument" msgstr "rshift: eerste argument is geen getal" -#: builtin.c:3042 +#: builtin.c:3053 msgid "rshift: received non-numeric second argument" msgstr "rshift: tweede argument is geen getal" -#: builtin.c:3048 +#: builtin.c:3059 #, c-format msgid "rshift(%f, %f): negative values will give strange results" msgstr "rshift(%f, %f): negatieve waarden geven rare resultaten" -#: builtin.c:3050 +#: builtin.c:3061 #, c-format msgid "rshift(%f, %f): fractional values will be truncated" msgstr "rshift(%f, %f): cijfers na de komma worden afgekapt" -#: builtin.c:3052 +#: builtin.c:3063 #, 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:3077 mpfr.c:968 +#: builtin.c:3088 mpfr.c:968 msgid "and: called with less than two arguments" msgstr "and: aangeroepen met minder dan twee argumenten" -#: builtin.c:3082 +#: builtin.c:3093 #, c-format msgid "and: argument %d is non-numeric" msgstr "and: argument %d is niet-numeriek" -#: builtin.c:3086 +#: builtin.c:3097 #, 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:3109 mpfr.c:1000 +#: builtin.c:3120 mpfr.c:1000 msgid "or: called with less than two arguments" msgstr "or: aangeroepen met minder dan twee argumenten" -#: builtin.c:3114 +#: builtin.c:3125 #, c-format msgid "or: argument %d is non-numeric" msgstr "or: argument %d is niet-numeriek" -#: builtin.c:3118 +#: builtin.c:3129 #, 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:3140 mpfr.c:1031 +#: builtin.c:3151 mpfr.c:1031 msgid "xor: called with less than two arguments" msgstr "xor: aangeroepen met minder dan twee argumenten" -#: builtin.c:3146 +#: builtin.c:3157 #, c-format msgid "xor: argument %d is non-numeric" msgstr "xor: argument %d is niet-numeriek" -#: builtin.c:3150 +#: builtin.c:3161 #, 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:3175 mpfr.c:787 +#: builtin.c:3186 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl: argument is geen getal" -#: builtin.c:3181 +#: builtin.c:3192 #, c-format msgid "compl(%f): negative value will give strange results" msgstr "compl(%f): negatieve waarden geven rare resultaten" -#: builtin.c:3183 +#: builtin.c:3194 #, c-format msgid "compl(%f): fractional value will be truncated" msgstr "compl(%f): cijfers na de komma worden afgekapt" -#: builtin.c:3352 +#: builtin.c:3363 #, c-format msgid "dcgettext: `%s' is not a valid locale category" msgstr "dcgettext: '%s' is geen geldige taalregio-deelcategorie" @@ -1028,16 +1016,11 @@ msgid "non-zero integer value" msgstr "niet-nul geheel getal" #: command.y:817 -msgid "" -"backtrace [N] - print trace of all or N innermost (outermost if N < 0) " -"frames." -msgstr "" -"backtrace [N] - trace printen van alle of N binnenste frames (of buitenste " -"als N < 0)" +msgid "backtrace [N] - print trace of all or N innermost (outermost if N < 0) frames." +msgstr "backtrace [N] - trace printen van alle of N binnenste frames (of buitenste als N < 0)" #: command.y:819 -msgid "" -"break [[filename:]N|function] - set breakpoint at the specified location." +msgid "break [[filename:]N|function] - set breakpoint at the specified location." msgstr "break [[BESTANDSNAAM:]N|FUNCTIE] - breekpunt zetten op gegeven positie" #: command.y:821 @@ -1045,9 +1028,7 @@ msgid "clear [[filename:]N|function] - delete breakpoints previously set." msgstr "clear [[BESTANDSNAAM:]N|FUNCTIE] - eerder gezet breekpunt verwijderen" #: command.y:823 -msgid "" -"commands [num] - starts a list of commands to be executed at a breakpoint" -"(watchpoint) hit." +msgid "commands [num] - starts a list of commands to be executed at a breakpoint(watchpoint) hit." msgstr "" #: command.y:825 @@ -1068,9 +1049,7 @@ msgstr "" #: command.y:833 msgid "display [var] - print value of variable each time the program stops." -msgstr "" -"display [VAR] - waarde van variabele printen elke keer dat het programma " -"stopt" +msgstr "display [VAR] - waarde van variabele printen elke keer dat het programma stopt" #: command.y:835 msgid "down [N] - move N frames down the stack." @@ -1078,8 +1057,7 @@ msgstr "" #: command.y:837 msgid "dump [filename] - dump instructions to file or stdout." -msgstr "" -"dump [BESTANDSNAAM] - instructies dumpen op standaarduitvoer of naar bestand" +msgstr "dump [BESTANDSNAAM] - instructies dumpen op standaarduitvoer of naar bestand" #: command.y:839 msgid "enable [once|del] [breakpoints] [range] - enable specified breakpoints." @@ -1110,9 +1088,7 @@ msgid "ignore N COUNT - set ignore-count of breakpoint number N to COUNT." msgstr "" #: command.y:853 -msgid "" -"info topic - source|sources|variables|functions|break|frame|args|locals|" -"display|watch." +msgid "info topic - source|sources|variables|functions|break|frame|args|locals|display|watch." msgstr "" #: command.y:855 @@ -1124,8 +1100,7 @@ msgid "next [COUNT] - step program, proceeding through subroutine calls." msgstr "" #: command.y:859 -msgid "" -"nexti [COUNT] - step one instruction, but proceed through subroutine calls." +msgid "nexti [COUNT] - step one instruction, but proceed through subroutine calls." msgstr "" #: command.y:861 @@ -1161,8 +1136,7 @@ msgid "set var = value - assign value to a scalar variable." msgstr "set VAR = WAARDE - een waarde aan een scalaire variabele toekennen" #: command.y:879 -msgid "" -"silent - suspends usual message when stopped at a breakpoint/watchpoint." +msgid "silent - suspends usual message when stopped at a breakpoint/watchpoint." msgstr "" #: command.y:881 @@ -1171,8 +1145,7 @@ msgstr "source BESTANDSNAAM - commando's uit dit bestand uitvoeren" #: command.y:883 msgid "step [COUNT] - step program until it reaches a different source line." -msgstr "" -"step [AANTAL] - programma uitvoeren tot een andere bronregel bereikt is" +msgstr "step [AANTAL] - programma uitvoeren tot een andere bronregel bereikt is" #: command.y:885 msgid "stepi [COUNT] - step one instruction exactly." @@ -1191,9 +1164,7 @@ msgid "undisplay [N] - remove variable(s) from automatic display list." msgstr "" #: command.y:893 -msgid "" -"until [[filename:]N|function] - execute until program reaches a different " -"line or line N within current frame." +msgid "until [[filename:]N|function] - execute until program reaches a different line or line N within current frame." msgstr "" #: command.y:895 @@ -1208,7 +1179,7 @@ msgstr "" msgid "watch var - set a watchpoint for a variable." msgstr "" -#: command.y:1011 debug.c:395 msg.c:128 +#: command.y:1011 debug.c:401 msg.c:135 #, c-format msgid "error: " msgstr "fout: " @@ -1230,12 +1201,12 @@ msgstr "ongeldig teken in commando" #: command.y:1152 #, c-format msgid "unknown command - \"%.*s\", try help" -msgstr "" +msgstr "onbekend commando - \"%.*s\", probeer help" #: command.y:1222 #, c-format msgid "%s" -msgstr "" +msgstr "%s" #: command.y:1284 msgid "invalid character" @@ -1244,528 +1215,526 @@ msgstr "ongeldig teken" #: command.y:1455 #, c-format msgid "undefined command: %s\n" -msgstr "" +msgstr "ongedefinieerd commando: %s\n" -#: debug.c:246 +#: debug.c:252 msgid "set or show the number of lines to keep in history file." msgstr "" -#: debug.c:248 +#: debug.c:254 msgid "set or show the list command window size." msgstr "" -#: debug.c:250 +#: debug.c:256 msgid "set or show gawk output file." msgstr "" -#: debug.c:252 +#: debug.c:258 msgid "set or show debugger prompt." msgstr "" -#: debug.c:254 +#: debug.c:260 msgid "(un)set or show saving of command history (value=on|off)." msgstr "" -#: debug.c:256 +#: debug.c:262 msgid "(un)set or show saving of options (value=on|off)." msgstr "" -#: debug.c:258 +#: debug.c:264 msgid "(un)set or show instruction tracing (value=on|off)." msgstr "" -#: debug.c:339 +#: debug.c:345 msgid "program not running." -msgstr "" +msgstr "programma draait niet." -#: debug.c:442 debug.c:597 +#: debug.c:448 debug.c:606 #, c-format msgid "can't read source file `%s' (%s)" msgstr "kan bronbestand '%s' niet lezen (%s)" -#: debug.c:447 +#: debug.c:453 #, c-format msgid "source file `%s' is empty.\n" msgstr "bronbestand '%s' is leeg\n" -#: debug.c:474 +#: debug.c:480 msgid "no current source file." msgstr "geen huidig bronbestand" -#: debug.c:499 +#: debug.c:505 #, c-format msgid "cannot find source file named `%s' (%s)" msgstr "kan geen bronbestand met naam '%s' vinden (%s)" -#: debug.c:523 +#: debug.c:529 #, c-format msgid "WARNING: source file `%s' modified since program compilation.\n" -msgstr "" +msgstr "Waarschuwing: bronbestand '%s' is gewijzigd sinds programmacompilatie.\n" -#: debug.c:542 +#: debug.c:551 #, c-format msgid "line number %d out of range; `%s' has %d lines" -msgstr "" +msgstr "regelnummer %d valt buiten bereik; '%s' heeft %d regels" -#: debug.c:602 +#: debug.c:611 #, c-format msgid "unexpected eof while reading file `%s', line %d" msgstr "onverwacht einde-van-bestand tijdens lezen van bestand '%s', regel %d" -#: debug.c:611 +#: debug.c:620 #, c-format msgid "source file `%s' modified since start of program execution" -msgstr "" +msgstr "bronbestand '%s' is gewijzigd sinds start van programma-uitvoering" -#: debug.c:723 +#: debug.c:732 #, c-format msgid "Current source file: %s\n" msgstr "Huidig bronbestand: %s\n" -#: debug.c:724 +#: debug.c:733 #, c-format msgid "Number of lines: %d\n" -msgstr "" +msgstr "Aantal regels: %d\n" -#: debug.c:731 +#: debug.c:740 #, c-format msgid "Source file (lines): %s (%d)\n" -msgstr "" +msgstr "Bronbestand (regels): %s (%d)\n" -#: debug.c:745 +#: debug.c:754 msgid "" "Number Disp Enabled Location\n" "\n" msgstr "" -#: debug.c:756 +#: debug.c:765 #, c-format msgid "\tno of hits = %ld\n" msgstr "" -#: debug.c:758 +#: debug.c:767 #, c-format msgid "\tignore next %ld hit(s)\n" msgstr "" -#: debug.c:760 debug.c:900 +#: debug.c:769 debug.c:909 #, c-format msgid "\tstop condition: %s\n" msgstr "" -#: debug.c:762 debug.c:902 +#: debug.c:771 debug.c:911 msgid "\tcommands:\n" msgstr "" -#: debug.c:784 +#: debug.c:793 #, c-format msgid "Current frame: " -msgstr "" +msgstr "Huidig frame: " -#: debug.c:787 +#: debug.c:796 #, c-format msgid "Called by frame: " -msgstr "" +msgstr "Aangeroepen door frame: " -#: debug.c:791 +#: debug.c:800 #, c-format msgid "Caller of frame: " -msgstr "" +msgstr "Aanroeper van frame: " -#: debug.c:809 +#: debug.c:818 #, c-format msgid "None in main().\n" -msgstr "" +msgstr "Geen in main().\n" -#: debug.c:839 +#: debug.c:848 msgid "No arguments.\n" msgstr "Geen argumenten.\n" -#: debug.c:840 +#: debug.c:849 msgid "No locals.\n" -msgstr "" +msgstr "Geen lokalen.\n" -#: debug.c:848 +#: debug.c:857 msgid "" "All defined variables:\n" "\n" msgstr "" +"Alle gedefinieerde variabelen:\n" +"\n" -#: debug.c:858 +#: debug.c:867 msgid "" "All defined functions:\n" "\n" msgstr "" +"Alle gedefinieerde functies:\n" +"\n" -#: debug.c:877 +#: debug.c:886 msgid "" "Auto-display variables:\n" "\n" msgstr "" -#: debug.c:880 +#: debug.c:889 msgid "" "Watch variables:\n" "\n" msgstr "" -#: debug.c:1020 +#: debug.c:1029 #, c-format msgid "no symbol `%s' in current context\n" msgstr "geen symbool '%s' in huidige context\n" -#: debug.c:1032 debug.c:1418 +#: debug.c:1041 debug.c:1427 #, c-format msgid "`%s' is not an array\n" msgstr "'%s' is geen array\n" -#: debug.c:1046 +#: debug.c:1055 #, c-format msgid "$%ld = uninitialized field\n" msgstr "$%ld = ongeïnitialiseerd veld\n" -#: debug.c:1067 +#: debug.c:1076 #, c-format msgid "array `%s' is empty\n" msgstr "array '%s' is leeg\n" -#: debug.c:1110 debug.c:1162 +#: debug.c:1119 debug.c:1171 #, c-format msgid "[\"%s\"] not in array `%s'\n" msgstr "[\"%s\"] niet in array '%s'\n" -#: debug.c:1166 +#: debug.c:1175 #, c-format msgid "`%s[\"%s\"]' is not an array\n" -msgstr "" +msgstr "'%s[\"%s\"]' is geen array\n" -#: debug.c:1227 debug.c:4949 +#: debug.c:1236 debug.c:4964 #, c-format msgid "`%s' is not a scalar variable" msgstr "'%s' is geen scalaire variabele" -#: debug.c:1249 debug.c:4979 +#: debug.c:1258 debug.c:4994 #, c-format msgid "attempt to use array `%s[\"%s\"]' in a scalar context" msgstr "array '%s[\"%s\"]' wordt gebruikt in een scalaire context" -#: debug.c:1271 debug.c:4990 +#: debug.c:1280 debug.c:5005 #, c-format msgid "attempt to use scalar `%s[\"%s\"]' as array" msgstr "scalair '%s[\"%s\"]' wordt gebruikt als array" -#: debug.c:1414 +#: debug.c:1423 #, c-format msgid "`%s' is a function" msgstr "'%s' is een functie" -#: debug.c:1456 +#: debug.c:1465 #, c-format msgid "watchpoint %d is unconditional\n" msgstr "" -#: debug.c:1490 +#: debug.c:1499 #, c-format msgid "No display item numbered %ld" msgstr "" -#: debug.c:1493 +#: debug.c:1502 #, c-format msgid "No watch item numbered %ld" msgstr "" -#: debug.c:1519 +#: debug.c:1528 #, c-format msgid "%d: [\"%s\"] not in array `%s'\n" msgstr "%d: [\"%s\"] niet in array '%s'\n" -#: debug.c:1758 +#: debug.c:1767 msgid "attempt to use scalar value as array" msgstr "scalaire waarde wordt gebruikt als array" -#: debug.c:1847 +#: debug.c:1856 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" msgstr "" -#: debug.c:1858 +#: debug.c:1867 #, c-format msgid "Display %d deleted because parameter is out of scope.\n" msgstr "" -#: debug.c:1891 +#: debug.c:1900 #, c-format msgid " in file `%s', line %d\n" msgstr " in bestand '%s', regel %d\n" -#: debug.c:1912 +#: debug.c:1921 #, c-format msgid " at `%s':%d" msgstr " op '%s':%d" -#: debug.c:1928 debug.c:1991 +#: debug.c:1937 debug.c:2000 #, c-format msgid "#%ld\tin " -msgstr "" +msgstr "#%ld\tin " -#: debug.c:1965 +#: debug.c:1974 #, c-format msgid "More stack frames follow ...\n" -msgstr "" +msgstr "Er volgen meer stack-frames...\n" -#: debug.c:2008 +#: debug.c:2017 msgid "invalid frame number" msgstr "ongeldig framenummer" -#: debug.c:2180 +#: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" -msgstr "" -"Opmerking: breekpunt %d (ingeschakeld, volgende %ld passages genegeerd), ook " -"gezet op %s:%d" +msgstr "Opmerking: breekpunt %d (ingeschakeld, volgende %ld passages genegeerd), ook gezet op %s:%d" -#: debug.c:2187 +#: debug.c:2207 #, c-format msgid "Note: breakpoint %d (enabled), also set at %s:%d" msgstr "Opmerking: breekpunt %d (ingeschakeld), ook gezet op %s:%d" -#: debug.c:2194 +#: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" -msgstr "" -"Opmerking: breekpunt %d (uitgeschakeld, volgende %ld passages genegeerd), " -"ook gezet op %s:%d" +msgstr "Opmerking: breekpunt %d (uitgeschakeld, volgende %ld passages genegeerd), ook gezet op %s:%d" -#: debug.c:2201 +#: debug.c:2221 #, c-format msgid "Note: breakpoint %d (disabled), also set at %s:%d" msgstr "Opmerking: breekpunt %d (uitgeschakeld), ook gezet op %s:%d" -#: debug.c:2218 +#: debug.c:2238 #, c-format msgid "Breakpoint %d set at file `%s', line %d\n" msgstr "Breekpunt %d is gezet in bestand '%s', op regel %d\n" -#: debug.c:2320 +#: debug.c:2340 #, c-format msgid "Can't set breakpoint in file `%s'\n" msgstr "Kan geen breekpunt zetten in bestand '%s'\n" -#: debug.c:2349 debug.c:2472 debug.c:3330 +#: debug.c:2369 debug.c:2492 debug.c:3350 #, c-format msgid "line number %d in file `%s' out of range" msgstr "regelnummer %d in bestand '%s' valt buiten bereik" -#: debug.c:2353 +#: debug.c:2373 #, c-format msgid "Can't find rule!!!\n" msgstr "Kan regel niet vinden!!!\n" -#: debug.c:2355 +#: debug.c:2375 #, c-format msgid "Can't set breakpoint at `%s':%d\n" msgstr "Kan geen breekpunt zetten op '%s':%d\n" -#: debug.c:2367 +#: debug.c:2387 #, c-format msgid "Can't set breakpoint in function `%s'\n" msgstr "Kan geen breekpunt zetten in functie '%s'\n" -#: debug.c:2383 +#: debug.c:2403 #, c-format msgid "breakpoint %d set at file `%s', line %d is unconditional\n" msgstr "breekpunt %d (gezet in bestand '%s', op regel %d) is onconditioneel\n" -#: debug.c:2488 debug.c:2510 +#: debug.c:2508 debug.c:2530 #, c-format msgid "Deleted breakpoint %d" msgstr "Breekpunt %d is verwijderd" -#: debug.c:2494 +#: debug.c:2514 #, c-format msgid "No breakpoint(s) at entry to function `%s'\n" msgstr "Geen breekpunt(en) bij binnengaan van functie '%s'\n" -#: debug.c:2521 +#: debug.c:2541 #, c-format msgid "No breakpoint at file `%s', line #%d\n" msgstr "Geen breekpunt in bestand '%s', op regel #%d\n" -#: debug.c:2576 debug.c:2617 debug.c:2637 debug.c:2680 +#: debug.c:2596 debug.c:2637 debug.c:2657 debug.c:2700 msgid "invalid breakpoint number" msgstr "ongeldig breekpuntnummer" -#: debug.c:2592 +#: debug.c:2612 msgid "Delete all breakpoints? (y or n) " msgstr "Alle breekpunten verwijderen? (j of n) " -#: debug.c:2593 debug.c:2903 debug.c:2956 +#: debug.c:2613 debug.c:2923 debug.c:2976 msgid "y" msgstr "j" -#: debug.c:2642 +#: debug.c:2662 #, c-format msgid "Will ignore next %ld crossing(s) of breakpoint %d.\n" msgstr "Zal de volgende %ld passage(s) van breekpunt %d negeren.\n" -#: debug.c:2646 +#: debug.c:2666 #, c-format msgid "Will stop next time breakpoint %d is reached.\n" msgstr "Zal de volgende keer dat breekpunt %d wordt bereikt stoppen.\n" -#: debug.c:2763 +#: debug.c:2783 #, c-format msgid "Can only debug programs provided with the `-f' option.\n" msgstr "" -#: debug.c:2888 +#: debug.c:2908 #, c-format msgid "Failed to restart debugger" msgstr "Herstarten van debugger is mislukt" -#: debug.c:2902 +#: debug.c:2922 msgid "Program already running. Restart from beginning (y/n)? " msgstr "Programma draait al. Herstarten vanaf begin (j/n)? " -#: debug.c:2906 +#: debug.c:2926 #, c-format msgid "Program not restarted\n" msgstr "Programma is niet herstart\n" -#: debug.c:2916 +#: debug.c:2936 #, c-format msgid "error: cannot restart, operation not allowed\n" msgstr "fout: kan niet herstarten; operatie is niet toegestaan\n" -#: debug.c:2922 +#: debug.c:2942 #, c-format msgid "error (%s): cannot restart, ignoring rest of the commands\n" -msgstr "" -"fout(%s): kan niet herstarten; de resterende commando's worden genegeerd\n" +msgstr "fout(%s): kan niet herstarten; de resterende commando's worden genegeerd\n" -#: debug.c:2930 +#: debug.c:2950 #, c-format msgid "Starting program: \n" msgstr "Starten van programma: \n" -#: debug.c:2939 +#: debug.c:2959 #, c-format msgid "Program exited %s with exit value: %d\n" msgstr "Programma verliet %s met afsluitwaarde %d\n" -#: debug.c:2955 +#: debug.c:2975 msgid "The program is running. Exit anyway (y/n)? " msgstr "Het programma draait. Toch afsluiten (j/n)? " -#: debug.c:2990 +#: debug.c:3010 #, c-format msgid "Not stopped at any breakpoint; argument ignored.\n" msgstr "Niet gestopt op een breekpunt; argument is genegeerd.\n" -#: debug.c:2995 +#: debug.c:3015 #, c-format msgid "invalid breakpoint number %d." msgstr "ongeldig breekpuntnummer %d." -#: debug.c:3000 +#: debug.c:3020 #, c-format msgid "Will ignore next %ld crossings of breakpoint %d.\n" msgstr "Zal de volgende %ld passages van breekpunt %d negeren.\n" -#: debug.c:3187 +#: debug.c:3207 #, c-format msgid "'finish' not meaningful in the outermost frame main()\n" msgstr "" -#: debug.c:3192 +#: debug.c:3212 #, c-format msgid "Run till return from " msgstr "Draaien tot terugkeer uit " -#: debug.c:3235 +#: debug.c:3255 #, c-format msgid "'return' not meaningful in the outermost frame main()\n" msgstr "" -#: debug.c:3349 +#: debug.c:3369 #, c-format msgid "Can't find specified location in function `%s'\n" msgstr "Kan gegeven locatie in functie '%s' niet vinden\n" -#: debug.c:3357 +#: debug.c:3377 #, c-format msgid "invalid source line %d in file `%s'" msgstr "ongeldige bronregel %d in bestand '%s'" -#: debug.c:3372 +#: debug.c:3392 #, c-format msgid "Can't find specified location %d in file `%s'\n" msgstr "Kan gegeven locatie %d in bestand '%s' niet vinden\n" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "element not in array\n" msgstr "element niet in array\n" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "untyped variable\n" msgstr "ongetypeerde variabele\n" -#: debug.c:3446 +#: debug.c:3466 #, c-format msgid "Stopping in %s ...\n" msgstr "Stoppend in %s...\n" -#: debug.c:3523 +#: debug.c:3543 #, c-format msgid "'finish' not meaningful with non-local jump '%s'\n" msgstr "" -#: debug.c:3530 +#: debug.c:3550 #, c-format msgid "'until' not meaningful with non-local jump '%s'\n" msgstr "" -#: debug.c:4165 +#: debug.c:4185 msgid "\t------[Enter] to continue or q [Enter] to quit------" -msgstr "" -"\t------[Enter] om verder te gaan, of [q] [Enter] om af te sluiten------" +msgstr "\t------[Enter] om verder te gaan, of [q] [Enter] om af te sluiten------" -#: debug.c:4166 +#: debug.c:4186 msgid "q" msgstr "q" -#: debug.c:4986 +#: debug.c:5001 #, c-format msgid "[\"%s\"] not in array `%s'" msgstr "[\"%s\"] niet in array '%s'" -#: debug.c:5192 +#: debug.c:5207 #, c-format msgid "sending output to stdout\n" msgstr "uitvoer wordt naar standaarduitvoer gestuurd\n" -#: debug.c:5232 +#: debug.c:5247 msgid "invalid number" msgstr "ongeldig nummer" -#: debug.c:5366 +#: debug.c:5381 #, c-format msgid "`%s' not allowed in current context; statement ignored" msgstr "'%s' is niet toegestaan in huidige context; statement is genegeerd" -#: debug.c:5374 +#: debug.c:5389 msgid "`return' not allowed in current context; statement ignored" msgstr "'return' is niet toegestaan in huidige context; statement is genegeerd" -#: debug.c:5575 +#: debug.c:5590 #, c-format msgid "No symbol `%s' in current context" msgstr "Geen symbool '%s' in huidige context" #: 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:1192 +#: dfa.c:1106 dfa.c:1111 dfa.c:1124 dfa.c:1191 msgid "unbalanced [" msgstr "ongepaarde [" @@ -1773,31 +1742,31 @@ msgstr "ongepaarde [" msgid "invalid character class" msgstr "ongeldige tekenklasse" -#: dfa.c:1229 +#: dfa.c:1228 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "syntax van tekenklasse is [[:space:]], niet [:space:]" -#: dfa.c:1281 +#: dfa.c:1280 msgid "unfinished \\ escape" msgstr "onafgemaakte \\-stuurcode" -#: dfa.c:1428 regcomp.c:161 +#: dfa.c:1427 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "Ongeldige inhoud van \\{\\}" -#: dfa.c:1431 regcomp.c:176 +#: dfa.c:1430 regcomp.c:176 msgid "Regular expression too big" msgstr "Reguliere expressie is te groot" -#: dfa.c:1816 +#: dfa.c:1847 msgid "unbalanced (" msgstr "ongepaarde (" -#: dfa.c:1943 +#: dfa.c:1973 msgid "no syntax specified" msgstr "geen syntax opgegeven" -#: dfa.c:1951 +#: dfa.c:1981 msgid "unbalanced )" msgstr "ongepaarde )" @@ -1816,11 +1785,11 @@ msgstr "onbekende opcode %d" msgid "opcode %s not an operator or keyword" msgstr "opcode %s is geen operator noch sleutelwoord" -#: eval.c:471 +#: eval.c:472 msgid "buffer overflow in genflags2str" msgstr "bufferoverloop in genflags2str()" -#: eval.c:674 +#: eval.c:675 #, c-format msgid "" "\n" @@ -1831,71 +1800,71 @@ msgstr "" "\t# Functieaanroepen-stack:\n" "\n" -#: eval.c:703 +#: eval.c:704 msgid "`IGNORECASE' is a gawk extension" msgstr "'IGNORECASE' is een gawk-uitbreiding" -#: eval.c:735 +#: eval.c:736 msgid "`BINMODE' is a gawk extension" msgstr "'BINMODE' is een gawk-uitbreiding" -#: eval.c:793 +#: eval.c:794 #, c-format msgid "BINMODE value `%s' is invalid, treated as 3" msgstr "BINMODE-waarde '%s' is ongeldig, wordt behandeld als 3" -#: eval.c:884 +#: eval.c:885 #, c-format msgid "bad `%sFMT' specification `%s'" msgstr "onjuiste opgave van '%sFMT': '%s'" -#: eval.c:968 +#: eval.c:969 msgid "turning off `--lint' due to assignment to `LINT'" msgstr "'--lint' wordt uitgeschakeld wegens toewijzing aan 'LINT'" -#: eval.c:1146 +#: eval.c:1147 #, c-format msgid "reference to uninitialized argument `%s'" msgstr "verwijzing naar ongeïnitialiseerd argument '%s'" -#: eval.c:1147 +#: eval.c:1148 #, c-format msgid "reference to uninitialized variable `%s'" msgstr "verwijzing naar ongeïnitialiseerde variabele '%s'" -#: eval.c:1165 +#: eval.c:1166 msgid "attempt to field reference from non-numeric value" msgstr "veldverwijzingspoging via een waarde die geen getal is" -#: eval.c:1167 +#: eval.c:1168 msgid "attempt to field reference from null string" msgstr "veldverwijzingspoging via een lege string" -#: eval.c:1175 +#: eval.c:1176 #, c-format msgid "attempt to access field %ld" msgstr "toegangspoging tot veld %ld" -#: eval.c:1184 +#: eval.c:1185 #, c-format msgid "reference to uninitialized field `$%ld'" msgstr "verwijzing naar ongeïnitialiseerd veld '$%ld'" -#: eval.c:1271 +#: eval.c:1272 #, c-format msgid "function `%s' called with more arguments than declared" msgstr "functie '%s' aangeroepen met meer argumenten dan gedeclareerd" -#: eval.c:1466 +#: eval.c:1473 #, c-format msgid "unwind_stack: unexpected type `%s'" msgstr "unwind_stack(): onverwacht type '%s'" -#: eval.c:1562 +#: eval.c:1569 msgid "division by zero attempted in `/='" msgstr "deling door nul in '/='" -#: eval.c:1569 +#: eval.c:1576 #, c-format msgid "division by zero attempted in `%%='" msgstr "deling door nul in '%%='" @@ -1908,7 +1877,7 @@ msgstr "uitbreidingen zijn niet toegestaan in sandbox-modus" msgid "-l / @load are gawk extensions" msgstr "-l / '@load' zijn gawk-uitbreidingen" -#: ext.c:95 ext.c:177 +#: ext.c:95 msgid "load_ext: received NULL lib_name" msgstr "load_ext: lege bibliotheeknaam ontvangen" @@ -1919,10 +1888,8 @@ msgstr "load_ext: kan bibliotheek '%s' niet openen (%s)\n" #: ext.c:104 #, 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" +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 #, c-format @@ -1938,6 +1905,10 @@ msgstr "load_ext: bibliotheek '%s': initialisatiefunctie '%s' is mislukt\n" msgid "`extension' is a gawk extension" msgstr "'extension' is een gawk-uitbreiding" +#: ext.c:177 +msgid "extension: received NULL lib_name" +msgstr "uitbreiding: lege bibliotheeknaam ontvangen" + #: ext.c:180 #, c-format msgid "extension: cannot open library `%s' (%s)" @@ -1945,10 +1916,8 @@ msgstr "extension: kan bibliotheek '%s' niet openen (%s)" #: ext.c:186 #, 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)" +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 #, c-format @@ -1959,37 +1928,36 @@ msgstr "extension: bibliotheek '%s' kan functie '%s' niet aanroepen (%s)" msgid "make_builtin: missing function name" msgstr "make_builtin: ontbrekende functienaam" -#: ext.c:238 +#: ext.c:236 #, c-format msgid "make_builtin: can't redefine function `%s'" msgstr "make_builtin: kan functie '%s' niet herdefiniëren" -#: ext.c:242 +#: ext.c:240 #, c-format msgid "make_builtin: function `%s' already defined" msgstr "make_builtin: functie '%s' is al gedefinieerd" -#: ext.c:246 +#: ext.c:244 #, c-format msgid "make_builtin: function name `%s' previously defined" msgstr "make_builtin: functienaam '%s' is al eerder gedefinieerd" -#: ext.c:248 +#: ext.c:246 #, 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" +msgstr "make_builtin: kan in gawk ingebouwde '%s' niet als functienaam gebruiken" -#: ext.c:251 ext.c:304 +#: ext.c:249 ext.c:304 #, c-format msgid "make_builtin: negative argument count for function `%s'" msgstr "make_builtin: negatief aantal argumenten voor functie '%s'" -#: ext.c:278 +#: ext.c:276 msgid "extension: missing function name" msgstr "extension: ontbrekende functienaam" -#: ext.c:283 +#: ext.c:279 ext.c:283 #, c-format msgid "extension: illegal character `%c' in function name `%s'" msgstr "extension: ongeldig teken '%c' in functienaam '%s'" @@ -2014,142 +1982,143 @@ msgstr "extension: functienaam '%s' is al eerder gedefinieerd" 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:374 +#: ext.c:375 #, 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" +msgstr "functie '%s' is gedefinieerd om niet meer dan %d argument(en) te accepteren" -#: ext.c:377 +#: ext.c:378 #, c-format msgid "function `%s': missing argument #%d" msgstr "functie '%s': ontbrekend argument #%d" -#: ext.c:394 +#: ext.c:395 #, 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:398 +#: ext.c:399 #, 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:412 +#: ext.c:413 msgid "dynamic loading of library not supported" msgstr "het dynamisch laden van de bibliotheek wordt niet ondersteund" -#: extension/filefuncs.c:97 +#: extension/filefuncs.c:159 msgid "chdir: called with incorrect number of arguments, expecting 1" -msgstr "" -"chdir: aangeroepen met onjuist aantal argumenten; één wordt er verwacht" +msgstr "chdir: aangeroepen met onjuist aantal argumenten; één wordt er verwacht" -#: extension/filefuncs.c:343 +#: extension/filefuncs.c:439 #, c-format msgid "stat: unable to read symbolic link `%s'" msgstr "stat: kan symbolische koppeling '%s' niet lezen" -#: extension/filefuncs.c:376 +#: extension/filefuncs.c:472 msgid "stat: called with wrong number of arguments" msgstr "stat: aangeroepen met onjuist aantal argumenten" -#: extension/filefuncs.c:383 +#: extension/filefuncs.c:479 msgid "stat: bad parameters" msgstr "stat: onjuiste parameters" -#: extension/filefuncs.c:437 +#: extension/filefuncs.c:533 #, c-format msgid "fts init: could not create variable %s" msgstr "fts-initialisatie: kan variabele %s niet aanmaken" -#: extension/filefuncs.c:460 +#: extension/filefuncs.c:554 +msgid "fts is not supported on this system" +msgstr "'fts' wordt op dit systeem niet ondersteund" + +#: extension/filefuncs.c:573 msgid "fill_stat_element: could not create array" msgstr "fill_stat_element: kan array niet aanmaken" -#: extension/filefuncs.c:469 +#: extension/filefuncs.c:582 msgid "fill_stat_element: could not set element" msgstr "fill_stat_element: kan element niet instellen" -#: extension/filefuncs.c:484 +#: extension/filefuncs.c:597 msgid "fill_path_element: could not set element" msgstr "fill_path_element: kan element niet instellen" -#: extension/filefuncs.c:500 +#: extension/filefuncs.c:613 msgid "fill_error_element: could not set element" msgstr "fill_error_element: kan element niet instellen" -#: extension/filefuncs.c:547 extension/filefuncs.c:594 +#: extension/filefuncs.c:660 extension/filefuncs.c:707 msgid "fts-process: could not create array" msgstr "fts-verwerking: kan array niet aanmaken" -#: extension/filefuncs.c:557 extension/filefuncs.c:604 -#: extension/filefuncs.c:622 +#: extension/filefuncs.c:670 extension/filefuncs.c:717 +#: extension/filefuncs.c:735 msgid "fts-process: could not set element" msgstr "fts-verwerking: kan element niet instellen" -#: extension/filefuncs.c:671 +#: extension/filefuncs.c:784 msgid "fts: called with incorrect number of arguments, expecting 3" -msgstr "" -"fts: aangeroepen met onjuist aantal argumenten; drie worden er verwacht" +msgstr "fts: aangeroepen met onjuist aantal argumenten; drie worden er verwacht" -#: extension/filefuncs.c:674 +#: extension/filefuncs.c:787 msgid "fts: bad first parameter" msgstr "fts: onjuiste eerste parameter" -#: extension/filefuncs.c:680 +#: extension/filefuncs.c:793 msgid "fts: bad second parameter" msgstr "fts: onjuiste tweede parameter" -#: extension/filefuncs.c:686 +#: extension/filefuncs.c:799 msgid "fts: bad third parameter" msgstr "fts: onjuiste derde parameter" -#: extension/filefuncs.c:693 +#: extension/filefuncs.c:806 msgid "fts: could not flatten array\n" msgstr "fts: kan array niet pletten\n" -#: extension/filefuncs.c:711 +#: extension/filefuncs.c:824 msgid "fts: ignoring sneaky FTS_NOSTAT flag. nyah, nyah, nyah." msgstr "" -#: extension/filefuncs.c:728 +#: extension/filefuncs.c:841 msgid "fts: clear_array() failed\n" msgstr "fts: clear_array() is mislukt\n" -#: extension/fnmatch.c:98 +#: extension/fnmatch.c:112 msgid "fnmatch: called with less than three arguments" msgstr "fnmatch: aangeroepen met minder dan drie argumenten" -#: extension/fnmatch.c:101 +#: extension/fnmatch.c:115 msgid "fnmatch: called with more than three arguments" msgstr "fnmatch: aangeroepen met meer dan drie argumenten" -#: extension/fnmatch.c:104 +#: extension/fnmatch.c:118 msgid "fnmatch: could not get first argument" msgstr "fnmatch: kan eerste argument niet verkrijgen" -#: extension/fnmatch.c:109 +#: extension/fnmatch.c:123 msgid "fnmatch: could not get second argument" msgstr "fnmatch: kan tweede argument niet verkrijgen" -#: extension/fnmatch.c:114 +#: extension/fnmatch.c:128 msgid "fnmatch: could not get third argument" msgstr "fnmatch: kan derde argument niet verkrijgen" -#: extension/fnmatch.c:127 +#: extension/fnmatch.c:141 msgid "fnmatch is not implemented on this system\n" msgstr "'fnmatch' is niet geïmplementeerd op dit systeem\n" -#: extension/fnmatch.c:159 +#: extension/fnmatch.c:173 msgid "fnmatch init: could not add FNM_NOMATCH variable" msgstr "fnmatch()-initialisatie: kan de variabele FNM_NOMATCH niet toevoegen" -#: extension/fnmatch.c:169 +#: extension/fnmatch.c:183 #, c-format msgid "fnmatch init: could not set array element %s" msgstr "fnmatch()-initialisatie: kan array-element %s niet instellen" -#: extension/fnmatch.c:179 +#: extension/fnmatch.c:193 msgid "fnmatch init: could not install FNM array" msgstr "fnmatch()-initialisatie: kan array FNM niet installeren" @@ -2173,94 +2142,88 @@ msgstr "wait: aangeroepen zonder argumenten" msgid "wait: called with too many arguments" msgstr "wait: aangeroepen met te veel argumenten" -#: extension/inplace.c:110 +#: extension/inplace.c:130 msgid "inplace_begin: in-place editing already active" msgstr "inplace_begin(): in-situ-bewerken is al actief" -#: extension/inplace.c:113 extension/inplace.c:187 +#: extension/inplace.c:133 extension/inplace.c:207 #, c-format msgid "inplace_begin: expects 2 arguments but called with %d" msgstr "inplace_begin(): verwachtte twee argumenten maar is aangeroepen met %d" -#: extension/inplace.c:116 -#, fuzzy +#: extension/inplace.c:136 msgid "inplace_begin: cannot retrieve 1st argument as a string filename" -msgstr "" -"inplace_begin(): kan eerste argument niet als bestandsnaamstring oppakken" +msgstr "inplace_begin(): kan eerste argument niet als bestandsnaamstring oppakken" -#: extension/inplace.c:124 +#: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" -msgstr "" -"inplace_begin(): in-situ-bewerken wordt uitgeschakeld voor ongeldige " -"bestandsnaam '%s'" +msgstr "inplace_begin(): in-situ-bewerken wordt uitgeschakeld voor ongeldige bestandsnaam '%s'" -#: extension/inplace.c:131 +#: extension/inplace.c:151 #, c-format msgid "inplace_begin: Cannot stat `%s' (%s)" msgstr "inplace_begin(): Kan status van '%s' niet bepalen (%s)" -#: extension/inplace.c:138 +#: extension/inplace.c:158 #, c-format msgid "inplace_begin: `%s' is not a regular file" msgstr "inplace_begin(): '%s' is geen normaal bestand" -#: extension/inplace.c:149 +#: extension/inplace.c:169 #, c-format msgid "inplace_begin: mkstemp(`%s') failed (%s)" msgstr "inplace_begin(): mkstemp('%s') is mislukt (%s)" -#: extension/inplace.c:158 +#: extension/inplace.c:178 #, c-format msgid "inplace_begin: chmod failed (%s)" msgstr "inplace_begin(): chmod is mislukt (%s)" -#: extension/inplace.c:165 +#: extension/inplace.c:185 #, c-format msgid "inplace_begin: dup(stdout) failed (%s)" msgstr "inplace_begin(): dup(stdout) is mislukt (%s)" -#: extension/inplace.c:168 +#: extension/inplace.c:188 #, c-format msgid "inplace_begin: dup2(%d, stdout) failed (%s)" msgstr "inplace_begin(): dup2(%d, stdout) is mislukt (%s)" -#: extension/inplace.c:171 +#: extension/inplace.c:191 #, c-format msgid "inplace_begin: close(%d) failed (%s)" msgstr "inplace_begin(): close(%d) is mislukt (%s)" -#: extension/inplace.c:190 -#, fuzzy +#: extension/inplace.c:210 msgid "inplace_end: cannot retrieve 1st argument as a string filename" -msgstr "" -"inplace_end(): kan eerste argument niet als bestandsnaamstring oppakken" +msgstr "inplace_end(): kan eerste argument niet als bestandsnaamstring oppakken" -#: extension/inplace.c:197 +#: extension/inplace.c:217 msgid "inplace_end: in-place editing not active" msgstr "inplace_end(): in-situ-bewerken is niet actief" -#: extension/inplace.c:203 +#: extension/inplace.c:223 #, c-format msgid "inplace_end: dup2(%d, stdout) failed (%s)" msgstr "inplace_end(): dup2(%d, stdout) is mislukt (%s)" -#: extension/inplace.c:206 +#: extension/inplace.c:226 #, c-format msgid "inplace_end: close(%d) failed (%s)" msgstr "inplace_end(): close(%d) is mislukt (%s)" -#: extension/inplace.c:210 +#: extension/inplace.c:230 #, c-format msgid "inplace_end: fsetpos(stdout) failed (%s)" msgstr "inplace_end(): fsetpos(stdout) is mislukt (%s)" -#: extension/inplace.c:223 +#: extension/inplace.c:243 #, c-format msgid "inplace_end: link(`%s', `%s') failed (%s)" msgstr "inplace_end(): link('%s', '%s') is mislukt (%s)" -#: extension/inplace.c:229 +#: extension/inplace.c:253 #, c-format msgid "inplace_end: rename(`%s', `%s') failed (%s)" msgstr "inplace_end(): rename('%s', '%s') is mislukt (%s)" @@ -2289,7 +2252,7 @@ msgstr "chr: aangeroepen zonder argumenten" msgid "chr: called with inappropriate argument(s)" msgstr "chr: aangeroepen met onjuiste argumenten" -#: extension/readdir.c:203 +#: extension/readdir.c:277 #, c-format msgid "dir_take_control_of: opendir/fdopendir failed: %s" msgstr "" @@ -2302,164 +2265,152 @@ msgstr "readfile: aangeroepen met te veel argumenten" msgid "readfile: called with no arguments" msgstr "readfile: aangeroepen zonder argumenten" -#: extension/rwarray.c:120 +#: extension/rwarray.c:124 msgid "writea: called with too many arguments" msgstr "writea: aangeroepen met te veel argumenten" -#: extension/rwarray.c:127 +#: extension/rwarray.c:131 #, c-format msgid "do_writea: argument 0 is not a string\n" msgstr "do_writea: argument 0 is geen string\n" -#: extension/rwarray.c:133 +#: extension/rwarray.c:137 #, c-format msgid "do_writea: argument 1 is not an array\n" msgstr "do_writea: argument 1 is geen array\n" -#: extension/rwarray.c:180 +#: extension/rwarray.c:184 #, c-format msgid "write_array: could not flatten array\n" msgstr "write_array: kan array niet pletten\n" -#: extension/rwarray.c:194 +#: extension/rwarray.c:198 #, c-format msgid "write_array: could not release flattened array\n" msgstr "write_array: kan geplet array niet vrijgeven\n" -#: extension/rwarray.c:276 +#: extension/rwarray.c:280 msgid "reada: called with too many arguments" msgstr "reada: aangeroepen met te veel argumenten" -#: extension/rwarray.c:283 +#: extension/rwarray.c:287 #, c-format msgid "do_reada: argument 0 is not a string\n" msgstr "do_reada: argument 0 is geen string\n" -#: extension/rwarray.c:289 +#: extension/rwarray.c:293 #, c-format msgid "do_reada: argument 1 is not an array\n" msgstr "do_reada: argument 1 is geen array\n" -#: extension/rwarray.c:333 +#: extension/rwarray.c:337 #, c-format msgid "do_reada: clear_array failed\n" msgstr "do_reada: clear_array() is mislukt\n" -#: extension/rwarray.c:370 +#: extension/rwarray.c:374 #, c-format msgid "read_array: set_array_element failed\n" msgstr "read_array: set_array_element() is mislukt\n" -#: extension/time.c:81 +#: extension/time.c:106 msgid "gettimeofday: ignoring arguments" msgstr "gettimeofday: argumenten worden genegeerd" -#: extension/time.c:112 +#: extension/time.c:137 msgid "gettimeofday: not supported on this platform" msgstr "gettimeofday: wordt op dit platform niet ondersteund" -#: extension/time.c:133 +#: extension/time.c:158 msgid "sleep: called with too many arguments" msgstr "sleep: aangeroepen met te veel argumenten" -#: extension/time.c:136 +#: extension/time.c:161 msgid "sleep: missing required numeric argument" msgstr "sleep: vereist numeriek argument ontbreekt" -#: extension/time.c:142 +#: extension/time.c:167 msgid "sleep: argument is negative" msgstr "sleep: argument is negatief" -#: extension/time.c:176 +#: extension/time.c:201 msgid "sleep: not supported on this platform" msgstr "sleep: wordt op dit platform niet ondersteund" -#: field.c:339 +#: field.c:345 msgid "NF set to negative value" msgstr "NF is op een negatieve waarde gezet" -#: field.c:964 field.c:971 field.c:975 +#: field.c:971 field.c:978 field.c:982 msgid "split: fourth argument is a gawk extension" msgstr "split: vierde argument is een gawk-uitbreiding" -#: field.c:968 +#: field.c:975 msgid "split: fourth argument is not an array" msgstr "split: vierde argument is geen array" -#: field.c:982 +#: field.c:989 msgid "split: second argument is not an array" msgstr "split: tweede argument is geen array" -#: field.c:986 +#: field.c:993 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" +msgstr "split: hetzelfde array kan niet zowel als tweede als als vierde argument gebruikt worden" -#: field.c:991 +#: field.c:998 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" +msgstr "split: een subarray van het tweede argument kan niet als vierde argument gebruikt worden" -#: field.c:994 +#: field.c:1001 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" +msgstr "split: een subarray van het vierde argument kan niet als tweede argument gebruikt worden" -#: field.c:1023 +#: field.c:1032 msgid "split: null string for third arg is a gawk extension" msgstr "split: lege string als derde argument is een gawk-uitbreiding" -#: field.c:1063 +#: field.c:1072 msgid "patsplit: fourth argument is not an array" msgstr "patsplit: vierde argument is geen array" -#: field.c:1068 +#: field.c:1077 msgid "patsplit: second argument is not an array" msgstr "patsplit: tweede argument is geen array" -#: field.c:1074 +#: field.c:1083 msgid "patsplit: third argument must be non-null" msgstr "patsplit: derde argument moet niet-nil zijn" -#: field.c:1078 +#: field.c:1087 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" +msgstr "patsplit: hetzelfde array kan niet zowel als tweede als als vierde argument gebruikt worden" -#: field.c:1083 +#: field.c:1092 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" +msgstr "patsplit: een subarray van het tweede argument kan niet als vierde argument gebruikt worden" -#: field.c:1086 +#: field.c:1095 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" +msgstr "patsplit: een subarray van het vierde argument kan niet als tweede argument gebruikt worden" -#: field.c:1124 +#: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" msgstr "'FIELDWIDTHS' is een gawk-uitbreiding" -#: field.c:1188 +#: field.c:1197 #, c-format msgid "invalid FIELDWIDTHS value, near `%s'" msgstr "ongeldige waarde voor FIELDWIDTHS, nabij '%s'" -#: field.c:1261 +#: field.c:1270 msgid "null string for `FS' is a gawk extension" msgstr "een lege string als 'FS' is een gawk-uitbreiding" -#: field.c:1265 +#: field.c:1274 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:1384 +#: field.c:1393 msgid "`FPAT' is a gawk extension" msgstr "'FPAT' is een gawk-uitbreiding" @@ -2483,584 +2434,569 @@ msgstr "remove_element(): leeg array ontvangen" msgid "remove_element: received null subscript" msgstr "remove_element(): lege index ontvangen" -#: gawkapi.c:943 +#: gawkapi.c:948 #, c-format msgid "api_flatten_array: could not convert index %d\n" msgstr "api_flatten_array(): kan index %d niet converteren\n" -#: gawkapi.c:948 +#: gawkapi.c:953 #, c-format msgid "api_flatten_array: could not convert value %d\n" msgstr "api_flatten_array(): kan waarde %d niet converteren\n" -#: getopt.c:603 getopt.c:632 +#: getopt.c:604 getopt.c:633 #, c-format msgid "%s: option '%s' is ambiguous; possibilities:" msgstr "%s: optie '%s' is niet eenduidig; mogelijkheden zijn:" -#: getopt.c:678 getopt.c:682 +#: getopt.c:679 getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: optie '--%s' staat geen argument toe\n" -#: getopt.c:691 getopt.c:696 +#: getopt.c:692 getopt.c:697 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: optie '%c%s' staat geen argument toe\n" -#: getopt.c:739 getopt.c:758 +#: getopt.c:740 getopt.c:759 #, c-format msgid "%s: option '--%s' requires an argument\n" msgstr "%s: optie '--%s' vereist een argument\n" -#: getopt.c:796 getopt.c:799 +#: getopt.c:797 getopt.c:800 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: onbekende optie '--%s'\n" -#: getopt.c:807 getopt.c:810 +#: getopt.c:808 getopt.c:811 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: onbekende optie '%c%s'\n" -#: getopt.c:859 getopt.c:862 +#: getopt.c:860 getopt.c:863 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: ongeldige optie -- '%c'\n" -#: getopt.c:915 getopt.c:932 getopt.c:1142 getopt.c:1160 +#: getopt.c:916 getopt.c:933 getopt.c:1143 getopt.c:1161 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: optie vereist een argument -- '%c'\n" -#: getopt.c:988 getopt.c:1004 +#: getopt.c:989 getopt.c:1005 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: optie '-W %s' is niet eenduidig\n" -#: getopt.c:1028 getopt.c:1046 +#: getopt.c:1029 getopt.c:1047 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: optie '-W %s' staat geen argument toe\n" -#: getopt.c:1067 getopt.c:1085 +#: getopt.c:1068 getopt.c:1086 #, c-format msgid "%s: option '-W %s' requires an argument\n" msgstr "%s: optie '-W %s' vereist een argument\n" -#: io.c:347 +#: io.c:392 #, c-format msgid "command line argument `%s' is a directory: skipped" msgstr "opdrachtregelargument '%s' is een map -- overgeslagen" -#: io.c:350 io.c:463 +#: io.c:395 io.c:513 #, c-format msgid "cannot open file `%s' for reading (%s)" msgstr "kan bestand '%s' niet openen om te lezen (%s)" -#: io.c:590 +#: io.c:640 #, c-format msgid "close of fd %d (`%s') failed (%s)" msgstr "sluiten van bestandsdescriptor %d ('%s') is mislukt (%s)" -#: io.c:666 +#: io.c:716 msgid "redirection not allowed in sandbox mode" msgstr "omleiding is niet toegestaan in sandbox-modus" -#: io.c:700 +#: io.c:750 #, c-format msgid "expression in `%s' redirection only has numeric value" msgstr "expressie in omleiding '%s' heeft alleen een getal als waarde" -#: io.c:706 +#: io.c:756 #, c-format msgid "expression for `%s' redirection has null string value" msgstr "expressie voor omleiding '%s' heeft een lege string als waarde" -#: io.c:711 +#: io.c:761 #, 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" +msgstr "bestandsnaam '%s' voor omleiding '%s' kan het resultaat zijn van een logische expressie" -#: io.c:754 +#: io.c:809 #, c-format msgid "unnecessary mixing of `>' and `>>' for file `%.*s'" msgstr "onnodige mix van '>' en '>>' voor bestand '%.*s'" -#: io.c:808 +#: io.c:863 #, c-format msgid "can't open pipe `%s' for output (%s)" msgstr "kan pijp '%s' niet openen voor uitvoer (%s)" -#: io.c:818 +#: io.c:873 #, c-format msgid "can't open pipe `%s' for input (%s)" msgstr "kan pijp '%s' niet openen voor invoer (%s)" -#: io.c:849 +#: io.c:904 #, 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:928 +#: io.c:986 #, c-format msgid "can't redirect from `%s' (%s)" msgstr "kan niet omleiden van '%s' (%s)" -#: io.c:931 +#: io.c:989 #, c-format msgid "can't redirect to `%s' (%s)" msgstr "kan niet omleiden naar '%s' (%s)" -#: io.c:982 -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:1040 +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:998 +#: io.c:1056 #, c-format msgid "close of `%s' failed (%s)." msgstr "sluiten van '%s' is mislukt (%s)" -#: io.c:1006 +#: io.c:1064 msgid "too many pipes or input files open" msgstr "te veel pijpen of invoerbestanden geopend" -#: io.c:1028 +#: io.c:1086 msgid "close: second argument must be `to' or `from'" msgstr "close: tweede argument moet 'to' of 'from' zijn" -#: io.c:1045 +#: io.c:1103 #, 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:1050 +#: io.c:1108 msgid "close of redirection that was never opened" msgstr "sluiten van een nooit-geopende omleiding" -#: io.c:1147 +#: io.c:1205 #, c-format msgid "close: redirection `%s' not opened with `|&', second argument ignored" -msgstr "" -"close: omleiding '%s' is niet geopend met '|&'; tweede argument wordt " -"genegeerd" +msgstr "close: omleiding '%s' is niet geopend met '|&'; tweede argument wordt genegeerd" -#: io.c:1164 +#: io.c:1222 #, c-format msgid "failure status (%d) on pipe close of `%s' (%s)" msgstr "afsluitwaarde %d bij mislukte sluiting van pijp '%s' (%s)" -#: io.c:1167 +#: io.c:1225 #, c-format msgid "failure status (%d) on file close of `%s' (%s)" msgstr "afsluitwaarde %d bij mislukte sluiting van bestand '%s' (%s)" -#: io.c:1187 +#: io.c:1245 #, c-format msgid "no explicit close of socket `%s' provided" msgstr "geen expliciete sluiting van socket '%s' aangegeven" -#: io.c:1190 +#: io.c:1248 #, c-format msgid "no explicit close of co-process `%s' provided" msgstr "geen expliciete sluiting van co-proces '%s' aangegeven" -#: io.c:1193 +#: io.c:1251 #, c-format msgid "no explicit close of pipe `%s' provided" msgstr "geen expliciete sluiting van pijp '%s' aangegeven" -#: io.c:1196 +#: io.c:1254 #, c-format msgid "no explicit close of file `%s' provided" msgstr "geen expliciete sluiting van bestand '%s' aangegeven" -#: io.c:1224 io.c:1279 main.c:842 main.c:879 +#: io.c:1284 io.c:1342 main.c:864 main.c:906 #, c-format msgid "error writing standard output (%s)" msgstr "fout tijdens schrijven van standaarduitvoer (%s)" -#: io.c:1228 io.c:1284 +#: io.c:1289 io.c:1348 main.c:866 #, c-format msgid "error writing standard error (%s)" msgstr "fout tijdens schrijven van standaardfoutuitvoer (%s)" -#: io.c:1236 +#: io.c:1297 #, c-format msgid "pipe flush of `%s' failed (%s)." msgstr "leegmaken van pijp '%s' is mislukt (%s)" -#: io.c:1239 +#: io.c:1300 #, 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:1242 +#: io.c:1303 #, c-format msgid "file flush of `%s' failed (%s)." msgstr "leegmaken van bestand '%s' is mislukt (%s)" -#: io.c:1356 +#: io.c:1420 #, c-format msgid "local port %s invalid in `/inet'" msgstr "lokale poort %s is ongeldig in '/inet'" -#: io.c:1374 +#: io.c:1438 #, c-format msgid "remote host and port information (%s, %s) invalid" msgstr "host- en poortinformatie (%s, %s) zijn ongeldig" -#: io.c:1526 +#: 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:1540 +#: io.c:1604 #, c-format msgid "special file name `%s' is incomplete" msgstr "speciale bestandsnaam '%s' is onvolledig" -#: io.c:1557 +#: io.c:1621 msgid "must supply a remote hostname to `/inet'" msgstr "'/inet' heeft een gindse hostnaam nodig" -#: io.c:1575 +#: io.c:1639 msgid "must supply a remote port to `/inet'" msgstr "'/inet' heeft een gindse poort nodig" -#: io.c:1621 +#: io.c:1685 msgid "TCP/IP communications are not supported" msgstr "TCP/IP-communicatie wordt niet ondersteund" -#: io.c:1796 +#: io.c:1867 #, c-format msgid "could not open `%s', mode `%s'" msgstr "kan '%s' niet openen -- modus '%s'" -#: io.c:1846 +#: io.c:1917 #, c-format msgid "close of master pty failed (%s)" msgstr "kan meester-pty van dochterproces niet sluiten (%s)" -#: io.c:1848 io.c:2024 io.c:2194 +#: io.c:1919 io.c:2105 io.c:2305 #, c-format msgid "close of stdout in child failed (%s)" msgstr "kan standaarduitvoer van dochterproces niet sluiten (%s)" -#: io.c:1851 +#: io.c:1922 #, 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)" +msgstr "kan slaaf-pty niet overzetten naar standaarduitvoer van dochterproces (dup: %s)" -#: io.c:1853 io.c:2029 +#: io.c:1924 io.c:2110 #, c-format msgid "close of stdin in child failed (%s)" msgstr "kan standaardinvoer van dochterproces niet sluiten (%s)" -#: io.c:1856 +#: io.c:1927 #, 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)" +msgstr "kan slaaf-pty niet overzetten naar standaardinvoer van dochterproces (dup: %s)" -#: io.c:1858 io.c:1879 +#: io.c:1929 io.c:1951 #, c-format msgid "close of slave pty failed (%s)" msgstr "kan slaaf-pty niet sluiten (%s)" -#: io.c:1965 io.c:2027 io.c:2171 io.c:2197 +#: io.c:2040 io.c:2108 io.c:2276 io.c:2308 #, c-format msgid "moving pipe to stdout in child failed (dup: %s)" -msgstr "" -"kan pijp niet overzetten naar standaarduitvoer van dochterproces (dup: %s)" +msgstr "kan pijp niet overzetten naar standaarduitvoer van dochterproces (dup: %s)" -#: io.c:1972 io.c:2032 +#: io.c:2047 io.c:2113 #, c-format msgid "moving pipe to stdin in child failed (dup: %s)" -msgstr "" -"kan pijp niet overzetten naar standaardinvoer van dochterproces (dup: %s)" +msgstr "kan pijp niet overzetten naar standaardinvoer van dochterproces (dup: %s)" -#: io.c:1992 io.c:2187 +#: io.c:2073 io.c:2298 msgid "restoring stdout in parent process failed\n" msgstr "kan standaarduitvoer van ouderproces niet herstellen\n" -#: io.c:2000 +#: io.c:2081 msgid "restoring stdin in parent process failed\n" msgstr "kan standaardinvoer van ouderproces niet herstellen\n" -#: io.c:2035 io.c:2199 io.c:2213 +#: io.c:2116 io.c:2310 io.c:2324 #, c-format msgid "close of pipe failed (%s)" msgstr "kan pijp niet sluiten (%s)" -#: io.c:2089 +#: io.c:2174 msgid "`|&' not supported" msgstr "'|&' wordt niet ondersteund" -#: io.c:2156 +#: io.c:2261 #, c-format msgid "cannot open pipe `%s' (%s)" msgstr "kan pijp '%s' niet openen (%s)" -#: io.c:2207 +#: io.c:2318 #, c-format msgid "cannot create child process for `%s' (fork: %s)" msgstr "kan voor '%s' geen dochterproces starten (fork: %s)" -#: io.c:2667 +#: io.c:2790 msgid "register_input_parser: received NULL pointer" msgstr "register_input_parser(): NULL-pointer gekregen" -#: io.c:2695 +#: io.c:2818 #, c-format msgid "input parser `%s' conflicts with previously installed input parser `%s'" msgstr "" -#: io.c:2702 +#: io.c:2825 #, c-format msgid "input parser `%s' failed to open `%s'" msgstr "" -#: io.c:2722 +#: io.c:2845 msgid "register_output_wrapper: received NULL pointer" msgstr "register_output_wrapper(): NULL-pointer gekregen" -#: io.c:2750 +#: io.c:2873 #, 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 "" -#: io.c:2757 +#: io.c:2880 #, c-format msgid "output wrapper `%s' failed to open `%s'" msgstr "" -#: io.c:2778 +#: io.c:2901 msgid "register_output_processor: received NULL pointer" msgstr "register_output_processor(): NULL-pointer gekregen" -#: io.c:2807 +#: io.c:2930 #, 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 "" -#: io.c:2816 +#: io.c:2939 #, c-format msgid "two way processor `%s' failed to open `%s'" msgstr "" -#: io.c:2923 +#: io.c:3064 #, c-format msgid "data file `%s' is empty" msgstr "databestand '%s' is leeg" -#: io.c:2965 io.c:2973 +#: io.c:3106 io.c:3114 msgid "could not allocate more input memory" msgstr "kan geen extra invoergeheugen meer toewijzen" -#: io.c:3539 +#: io.c:3682 msgid "multicharacter value of `RS' is a gawk extension" msgstr "een 'RS' van meerdere tekens is een gawk-uitbreiding" -#: io.c:3628 +#: io.c:3771 msgid "IPv6 communication is not supported" msgstr "IPv6-communicatie wordt niet ondersteund" -#: main.c:388 +#: main.c:405 msgid "empty argument to `-e/--source' ignored" msgstr "argument van '-e/--source' is leeg; genegeerd" -#: main.c:478 +#: main.c:495 #, c-format msgid "%s: option `-W %s' unrecognized, ignored\n" msgstr "%s: optie '-W %s' is onbekend; genegeerd\n" -#: main.c:524 +#: main.c:541 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: optie vereist een argument -- %c\n" -#: main.c:545 +#: main.c:562 msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'" msgstr "omgevingsvariabele 'POSIXLY_CORRECT' is gezet: '--posix' ingeschakeld" -#: main.c:551 +#: main.c:568 msgid "`--posix' overrides `--traditional'" msgstr "'--posix' overstijgt '--traditional'" -#: main.c:562 +#: main.c:579 msgid "`--posix'/`--traditional' overrides `--non-decimal-data'" msgstr "'--posix'/'--traditional' overstijgen '--non-decimal-data'" -#: main.c:566 +#: main.c:583 #, 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:571 +#: main.c:588 msgid "`--posix' overrides `--characters-as-bytes'" msgstr "'--posix' overstijgt '--characters-as-bytes'" -#: main.c:630 +#: main.c:647 #, c-format msgid "can't set binary mode on stdin (%s)" msgstr "kan standaardinvoer niet in binaire modus zetten (%s)" -#: main.c:633 +#: main.c:650 #, c-format msgid "can't set binary mode on stdout (%s)" msgstr "kan standaarduitvoer niet in binaire modus zetten (%s)" -#: main.c:635 +#: main.c:652 #, c-format msgid "can't set binary mode on stderr (%s)" msgstr "kan standaardfoutuitvoer niet in binaire modus zetten (%s)" -#: main.c:693 +#: main.c:710 msgid "no program text at all!" msgstr "helemaal geen programmatekst!" -#: main.c:779 +#: main.c:799 #, c-format msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n" msgstr "Gebruik: %s [opties] -f programmabestand [--] bestand...\n" -#: main.c:781 +#: main.c:801 #, 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:786 +#: main.c:806 msgid "POSIX options:\t\tGNU long options: (standard)\n" msgstr "\tPOSIX-opties:\t\tEquivalente GNU-opties: (standaard)\n" -#: main.c:787 +#: main.c:807 msgid "\t-f progfile\t\t--file=progfile\n" msgstr "\t-f programmabestand\t--file=programmabestand\n" -#: main.c:788 +#: main.c:808 msgid "\t-F fs\t\t\t--field-separator=fs\n" msgstr "\t-F veldscheidingsteken\t--field-separator=veldscheidingsteken\n" -#: main.c:789 +#: main.c:809 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:790 +#: main.c:810 msgid "Short options:\t\tGNU long options: (extensions)\n" msgstr "\tKorte opties:\t\tEquivalente GNU-opties: (uitbreidingen)\n" -#: main.c:791 +#: main.c:811 msgid "\t-b\t\t\t--characters-as-bytes\n" msgstr "\t-b\t\t\t--characters-as-bytes\n" -#: main.c:792 +#: main.c:812 msgid "\t-c\t\t\t--traditional\n" msgstr "\t-c\t\t\t--traditional\n" -#: main.c:793 +#: main.c:813 msgid "\t-C\t\t\t--copyright\n" msgstr "\t-C\t\t\t--copyright\n" -#: main.c:794 +#: main.c:814 msgid "\t-d[file]\t\t--dump-variables[=file]\n" msgstr "\t-d[bestand]\t\t--dump-variables[=bestand]\n" -#: main.c:795 +#: main.c:815 msgid "\t-D[file]\t\t--debug[=file]\n" msgstr "\t-D[bestand]\t\t--debug[=bestand]\n" -#: main.c:796 +#: main.c:816 msgid "\t-e 'program-text'\t--source='program-text'\n" msgstr "\t-e 'programmatekst'\t--source='programmatekst'\n" -#: main.c:797 +#: main.c:817 msgid "\t-E file\t\t\t--exec=file\n" msgstr "\t-E bestand\t\t--exec=bestand\n" -#: main.c:798 +#: main.c:818 msgid "\t-g\t\t\t--gen-pot\n" msgstr "\t-g\t\t\t--gen-pot\n" -#: main.c:799 +#: main.c:819 msgid "\t-h\t\t\t--help\n" msgstr "\t-h\t\t\t--help\n" -#: main.c:800 +#: main.c:820 msgid "\t-i includefile\t\t--include=includefile\n" msgstr "" -#: main.c:801 +#: main.c:821 msgid "\t-l library\t\t--load=library\n" msgstr "" -#: main.c:802 +#: main.c:822 msgid "\t-L [fatal]\t\t--lint[=fatal]\n" msgstr "\t-L [fataal]\t\t--lint[=fataal]\n" -#: main.c:803 +#: 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:804 +#: main.c:824 msgid "\t-M\t\t\t--bignum\n" msgstr "\t-M\t\t\t--bignum\n" -#: main.c:805 +#: main.c:825 msgid "\t-N\t\t\t--use-lc-numeric\n" msgstr "\t-N\t\t\t--use-lc-numeric\n" -#: main.c:806 +#: main.c:826 msgid "\t-o[file]\t\t--pretty-print[=file]\n" msgstr "\t-o[bestand]\t\t--pretty-print[=bestand]\n" -#: main.c:807 +#: main.c:827 msgid "\t-O\t\t\t--optimize\n" msgstr "\t-O\t\t\t--optimize\n" -#: main.c:808 +#: main.c:828 msgid "\t-p[file]\t\t--profile[=file]\n" msgstr "\t-p[bestand]\t\t--profile[=bestand]\n" -#: main.c:809 +#: main.c:829 msgid "\t-P\t\t\t--posix\n" msgstr "\t-P\t\t\t--posix\n" -#: main.c:810 +#: main.c:830 msgid "\t-r\t\t\t--re-interval\n" msgstr "\t-r\t\t\t--re-interval\n" -#: main.c:811 +#: main.c:831 msgid "\t-S\t\t\t--sandbox\n" msgstr "\t-S\t\t\t--sandbox\n" -#: main.c:812 +#: main.c:832 msgid "\t-t\t\t\t--lint-old\n" msgstr "\t-t\t\t\t--lint-old\n" -#: main.c:813 +#: main.c:833 msgid "\t-V\t\t\t--version\n" msgstr "\t-V\t\t\t--version\n" -#: main.c:815 +#: main.c:835 msgid "\t-W nostalgia\t\t--nostalgia\n" msgstr "\t-W nostalgia\t\t\t--nostalgia\n" -#: main.c:818 +#: main.c:838 msgid "\t-Y\t\t--parsedebug\n" msgstr "\t-Y\t\t\t--parsedebug\n" @@ -3069,7 +3005,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:827 +#: main.c:847 msgid "" "\n" "To report bugs, see node `Bugs' in `gawk.info', which is\n" @@ -3082,7 +3018,7 @@ msgstr "" "Meld fouten in de vertaling aan .\n" "\n" -#: main.c:831 +#: main.c:851 msgid "" "gawk is a pattern scanning and processing language.\n" "By default it reads standard input and writes standard output.\n" @@ -3092,7 +3028,7 @@ msgstr "" "Standaard leest het van standaardinvoer en schrijft naar standaarduitvoer.\n" "\n" -#: main.c:835 +#: main.c:855 msgid "" "Examples:\n" "\tgawk '{ sum += $1 }; END { print sum }' file\n" @@ -3102,7 +3038,7 @@ msgstr "" "\tgawk '{ som += $1 }; END { print som }' bestand\n" "\tgawk -F: '{ print $1 }' /etc/passwd\n" -#: main.c:855 +#: main.c:880 #, c-format msgid "" "Copyright (C) 1989, 1991-%d Free Software Foundation.\n" @@ -3120,7 +3056,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:863 +#: main.c:888 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" @@ -3134,7 +3070,7 @@ msgstr "" "Zie de GNU General Public License voor meer details.\n" "\n" -#: main.c:869 +#: main.c:894 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" @@ -3143,16 +3079,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:904 +#: main.c:931 msgid "-Ft does not set FS to tab in POSIX awk" msgstr "-Ft maakt van FS geen tab in POSIX-awk" -#: main.c:1181 +#: main.c:1208 #, c-format msgid "unknown value for field spec: %d\n" msgstr "onbekende waarde voor veldspecificatie: %d\n" -#: main.c:1279 +#: main.c:1306 #, c-format msgid "" "%s: `%s' argument to `-v' not in `var=value' form\n" @@ -3161,48 +3097,48 @@ msgstr "" "%s: argument '%s' van '-v' is niet van de vorm 'var=waarde'\n" "\n" -#: main.c:1305 +#: main.c:1332 #, c-format msgid "`%s' is not a legal variable name" msgstr "'%s' is geen geldige variabelenaam" -#: main.c:1308 +#: main.c:1335 #, 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:1312 +#: main.c:1339 #, c-format msgid "cannot use gawk builtin `%s' as variable name" msgstr "kan in gawk ingebouwde '%s' niet als variabelenaam gebruiken" -#: main.c:1317 +#: main.c:1344 #, c-format msgid "cannot use function `%s' as variable name" msgstr "kan functie '%s' niet als variabelenaam gebruiken" -#: main.c:1370 +#: main.c:1397 msgid "floating point exception" msgstr "drijvendekomma-berekeningsfout" -#: main.c:1377 +#: main.c:1404 msgid "fatal error: internal error" msgstr "fatale fout: **interne fout**" -#: main.c:1392 +#: main.c:1419 msgid "fatal error: internal error: segfault" msgstr "fatale fout: **interne fout**: segmentatiefout" -#: main.c:1404 +#: main.c:1431 msgid "fatal error: internal error: stack overflow" msgstr "fatale fout: **interne fout**: stack is vol" -#: main.c:1463 +#: main.c:1490 #, c-format msgid "no pre-opened fd %d" msgstr "geen reeds-geopende bestandsdescriptor %d" -#: main.c:1470 +#: main.c:1497 #, c-format msgid "could not pre-open /dev/null for fd %d" msgstr "kan /dev/null niet openen voor bestandsdescriptor %d" @@ -3250,15 +3186,14 @@ msgstr "%s: negatieve waarde %2$Rg van argument #%1$d geeft rare resultaten" #: mpfr.c:863 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" +msgstr "%s: cijfers na de komma van waarde %2$Rg van argument #%1$d worden afgekapt" #: mpfr.c:878 #, 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" -#: msg.c:61 +#: msg.c:68 #, c-format msgid "cmd. line:" msgstr "commandoregel:" @@ -3282,12 +3217,8 @@ msgstr "geen hex cijfers in stuurcodereeks '\\x'" #: node.c:579 #, c-format -msgid "" -"hex escape \\x%.*s of %d characters probably not interpreted the way you " -"expect" -msgstr "" -"hexadecimale stuurcode \\x%.*s van %d tekens wordt waarschijnlijk niet " -"afgehandeld zoals u verwacht" +msgid "hex escape \\x%.*s of %d characters probably not interpreted the way you expect" +msgstr "hexadecimale stuurcode \\x%.*s van %d tekens wordt waarschijnlijk niet afgehandeld zoals u verwacht" #: node.c:594 #, c-format @@ -3295,9 +3226,7 @@ msgid "escape sequence `\\%c' treated as plain `%c'" msgstr "stuurcodereeks '\\%c' behandeld als normale '%c'" #: node.c:739 -msgid "" -"Invalid multibyte data detected. There may be a mismatch between your data " -"and your locale." +msgid "Invalid multibyte data detected. There may be a mismatch between your data and your locale." msgstr "" "Ongeldige multibyte-gegevens gevonden.\n" "Uw gegevens passen vermoedelijk niet bij uw taalregio." @@ -3305,25 +3234,23 @@ msgstr "" #: posix/gawkmisc.c:177 #, c-format msgid "%s %s `%s': could not get fd flags: (fcntl F_GETFD: %s)" -msgstr "" -"%s %s '%s': kan bestandsdescriptorvlaggen niet verkrijgen: (fcntl F_GETFD: " -"%s)" +msgstr "%s %s '%s': kan bestandsdescriptorvlaggen niet verkrijgen: (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': kan 'close-on-exec' niet activeren: (fcntl F_SETFD: %s)" -#: profile.c:70 +#: profile.c:71 #, c-format msgid "could not open `%s' for writing: %s" msgstr "kan '%s' niet openen om te schrijven: %s" -#: profile.c:72 +#: profile.c:73 msgid "sending profile to standard error" msgstr "profiel gaat naar standaardfoutuitvoer" -#: profile.c:188 +#: profile.c:193 #, c-format msgid "" "\t# %s block(s)\n" @@ -3332,7 +3259,7 @@ msgstr "" "\t# %s-blok(ken)\n" "\n" -#: profile.c:193 +#: profile.c:198 #, c-format msgid "" "\t# Rule(s)\n" @@ -3341,28 +3268,28 @@ msgstr "" "\t# Regel(s)\n" "\n" -#: profile.c:267 +#: profile.c:272 #, c-format msgid "internal error: %s with null vname" msgstr "**interne fout**: %s met lege 'vname'" -#: profile.c:530 +#: profile.c:537 msgid "internal error: builtin with null fname" msgstr "**interne fout**: ingebouwde functie met lege 'fname'" -#: profile.c:942 +#: profile.c:949 #, c-format msgid "" "\t# Loaded extensions (-l and/or @load)\n" "\n" msgstr "" -#: profile.c:965 +#: profile.c:972 #, c-format msgid "\t# gawk profile, created %s\n" msgstr "\t# gawk-profiel, gemaakt op %s\n" -#: profile.c:1351 +#: profile.c:1475 #, c-format msgid "" "\n" @@ -3371,23 +3298,15 @@ msgstr "" "\n" "\t# Functies, alfabetisch geordend\n" -#: profile.c:1389 +#: profile.c:1513 #, c-format msgid "redir2str: unknown redirection type %d" msgstr "redir2str(): onbekend omleidingstype %d" -#: re.c:583 -#, c-format -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" - -#: re.c:610 +#: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" -msgstr "" -"component '%.*s' van reguliere expressie moet vermoedelijk '[%.*s]' zijn" +msgstr "component '%.*s' van reguliere expressie moet vermoedelijk '[%.*s]' zijn" #: regcomp.c:131 msgid "Success" @@ -3453,10 +3372,13 @@ msgstr "Ongepaarde ) of \\)" msgid "No previous regular expression" msgstr "Geen eerdere reguliere expressie" -#: symbol.c:740 +#: symbol.c:741 msgid "can not pop main context" msgstr "" +#~ 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" @@ -3526,11 +3448,8 @@ msgstr "" #~ msgid "statement has no effect" #~ msgstr "opdracht heeft geen effect" -#~ msgid "" -#~ "for loop: array `%s' changed size from %ld to %ld during loop execution" -#~ msgstr "" -#~ "for: array '%s' veranderde van grootte %ld naar %ld tijdens uitvoer van " -#~ "de lus" +#~ msgid "for loop: array `%s' changed size from %ld to %ld during loop execution" +#~ msgstr "for: array '%s' veranderde van grootte %ld naar %ld tijdens uitvoer van de lus" #~ msgid "function called indirectly through `%s' does not exist" #~ msgstr "indirect (via '%s') aangeroepen functie bestaat niet" @@ -3566,8 +3485,7 @@ msgstr "" #~ msgstr "kan groepen niet vinden: %s" #~ msgid "assignment is not allowed to result of builtin function" -#~ msgstr "" -#~ "toewijzing aan het resultaat van een ingebouwde functie is niet toegestaan" +#~ msgstr "toewijzing aan het resultaat van een ingebouwde functie is niet toegestaan" #~ msgid "attempt to use array in a scalar context" #~ msgstr "array wordt gebruikt in een scalaire context" @@ -3605,12 +3523,8 @@ msgstr "" #~ msgid "`nextfile' cannot be called from a BEGIN rule" #~ msgstr "'nextfile' kan niet aangeroepen worden in een BEGIN-regel" -#~ msgid "" -#~ "concatenation: side effects in one expression have changed the length of " -#~ "another!" -#~ msgstr "" -#~ "concatenation: neveneffecten in de ene expressie hebben de lengte van een " -#~ "andere veranderd!" +#~ msgid "concatenation: side effects in one expression have changed the length of another!" +#~ msgstr "concatenation: neveneffecten in de ene expressie hebben de lengte van een andere veranderd!" #~ msgid "illegal type (%s) in tree_eval" #~ msgstr "ongeldig type (%s) in tree_eval()" -- cgit v1.2.3 From 20ca1d1ba6e46f116e2dc169d263fd548b9bd074 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 19 Jan 2014 21:36:37 +0200 Subject: Fix -0 for MPFR. --- ChangeLog | 5 +++++ awkgram.c | 31 ++++++++++++++++++++++++------- awkgram.y | 31 ++++++++++++++++++++++++------- test/ChangeLog | 5 +++++ test/Makefile.am | 10 +++++++++- test/Makefile.in | 11 ++++++++++- test/mpfrnegzero.awk | 15 +++++++++++++++ test/mpfrnegzero.ok | 9 +++++++++ 8 files changed, 101 insertions(+), 16 deletions(-) create mode 100644 test/mpfrnegzero.awk create mode 100644 test/mpfrnegzero.ok diff --git a/ChangeLog b/ChangeLog index a5989414..d75916f9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-01-19 Arnold D. Robbins + + * awkgram.y (negate_num): Handle the case of -0 for MPFR; the sign + was getting lost. Thanks to Hermann Peifer for the report. + 2014-01-18 Arnold D. Robbins * dfa.c (parse_bracket_exp): Sync with GNU grep, which now uses diff --git a/awkgram.c b/awkgram.c index 7eff2f11..657a1627 100644 --- a/awkgram.c +++ b/awkgram.c @@ -4512,16 +4512,33 @@ getfname(NODE *(*fptr)(int)) void negate_num(NODE *n) { + int tval = 0; + + if (! is_mpg_number(n)) + n->numbr = -n->numbr; #ifdef HAVE_MPFR - if (is_mpg_float(n)) { - int tval; - tval = mpfr_neg(n->mpg_numbr, n->mpg_numbr, ROUND_MODE); + else if (is_mpg_integer(n)) { + if (! iszero(n)) { + mpz_neg(n->mpg_i, n->mpg_i); + return; + } + + /* + * 0 --> -0 conversion. Requires turning the MPG integer + * into an MPFR float. + * + * So, convert and fall through. + */ + tval = mpfr_set_d(n->mpg_numbr, 0.0, ROUND_MODE); IEEE_FMT(n->mpg_numbr, tval); - } else if (is_mpg_integer(n)) { - mpz_neg(n->mpg_i, n->mpg_i); - } else + n->flags &= ~MPZN; + n->flags |= MPFN; + } + + /* mpfr float case */ + tval = mpfr_neg(n->mpg_numbr, n->mpg_numbr, ROUND_MODE); + IEEE_FMT(n->mpg_numbr, tval); #endif - n->numbr = -n->numbr; } /* print_included_from --- print `Included from ..' file names and locations */ diff --git a/awkgram.y b/awkgram.y index 5846c134..fd83d6db 100644 --- a/awkgram.y +++ b/awkgram.y @@ -1964,16 +1964,33 @@ getfname(NODE *(*fptr)(int)) void negate_num(NODE *n) { + int tval = 0; + + if (! is_mpg_number(n)) + n->numbr = -n->numbr; #ifdef HAVE_MPFR - if (is_mpg_float(n)) { - int tval; - tval = mpfr_neg(n->mpg_numbr, n->mpg_numbr, ROUND_MODE); + else if (is_mpg_integer(n)) { + if (! iszero(n)) { + mpz_neg(n->mpg_i, n->mpg_i); + return; + } + + /* + * 0 --> -0 conversion. Requires turning the MPG integer + * into an MPFR float. + * + * So, convert and fall through. + */ + tval = mpfr_set_d(n->mpg_numbr, 0.0, ROUND_MODE); IEEE_FMT(n->mpg_numbr, tval); - } else if (is_mpg_integer(n)) { - mpz_neg(n->mpg_i, n->mpg_i); - } else + n->flags &= ~MPZN; + n->flags |= MPFN; + } + + /* mpfr float case */ + tval = mpfr_neg(n->mpg_numbr, n->mpg_numbr, ROUND_MODE); + IEEE_FMT(n->mpg_numbr, tval); #endif - n->numbr = -n->numbr; } /* print_included_from --- print `Included from ..' file names and locations */ diff --git a/test/ChangeLog b/test/ChangeLog index 1da74f8a..535f6f14 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2014-01-19 Arnold D. Robbins + + * Makefile.am (mpfrnegzero): New test. + * mpfrnegzero.awk, mpfrnegzero.ok: New files. + 2014-01-17 Arnold D. Robbins * Makefile.am: Quote instances of $(top_srcdir) also. diff --git a/test/Makefile.am b/test/Makefile.am index 5a0c5a63..b6390009 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -522,6 +522,8 @@ EXTRA_DIST = \ mpfrexprange.ok \ mpfrieee.awk \ mpfrieee.ok \ + mpfrnegzero.awk \ + mpfrnegzero.ok \ mpfrnr.awk \ mpfrnr.in \ mpfrnr.ok \ @@ -1007,7 +1009,8 @@ INET_TESTS = inetdayu inetdayt inetechu inetecht MACHINE_TESTS = double1 double2 fmtspcl intformat -MPFR_TESTS = mpfrnr mpfrrnd mpfrieee mpfrexprange mpfrsort mpfrbigint +MPFR_TESTS = mpfrnr mpfrnegzero mpfrrnd mpfrieee mpfrexprange \ + mpfrsort mpfrbigint LOCALE_CHARSET_TESTS = \ asort asorti backbigs1 backsmalls1 backsmalls2 \ @@ -1695,6 +1698,11 @@ mpfrrnd: @$(AWK) -M -vPREC=53 -f "$(srcdir)"/$@.awk > _$@ 2>&1 @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +mpfrnegzero: + @echo $@ + @$(AWK) -M -f "$(srcdir)"/$@.awk > _$@ 2>&1 + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + mpfrnr: @echo $@ @$(AWK) -M -vPREC=113 -f "$(srcdir)"/$@.awk "$(srcdir)"/$@.in > _$@ diff --git a/test/Makefile.in b/test/Makefile.in index d0d527f4..fd0484a8 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -768,6 +768,8 @@ EXTRA_DIST = \ mpfrexprange.ok \ mpfrieee.awk \ mpfrieee.ok \ + mpfrnegzero.awk \ + mpfrnegzero.ok \ mpfrnr.awk \ mpfrnr.in \ mpfrnr.ok \ @@ -1249,7 +1251,9 @@ GAWK_EXT_TESTS = \ EXTRA_TESTS = inftest regtest INET_TESTS = inetdayu inetdayt inetechu inetecht MACHINE_TESTS = double1 double2 fmtspcl intformat -MPFR_TESTS = mpfrnr mpfrrnd mpfrieee mpfrexprange mpfrsort mpfrbigint +MPFR_TESTS = mpfrnr mpfrnegzero mpfrrnd mpfrieee mpfrexprange \ + mpfrsort mpfrbigint + LOCALE_CHARSET_TESTS = \ asort asorti backbigs1 backsmalls1 backsmalls2 \ fmttest fnarydel fnparydl jarebug lc_num1 mbfw1 \ @@ -2118,6 +2122,11 @@ mpfrrnd: @$(AWK) -M -vPREC=53 -f "$(srcdir)"/$@.awk > _$@ 2>&1 @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +mpfrnegzero: + @echo $@ + @$(AWK) -M -f "$(srcdir)"/$@.awk > _$@ 2>&1 + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + mpfrnr: @echo $@ @$(AWK) -M -vPREC=113 -f "$(srcdir)"/$@.awk "$(srcdir)"/$@.in > _$@ diff --git a/test/mpfrnegzero.awk b/test/mpfrnegzero.awk new file mode 100644 index 00000000..cc6bf65b --- /dev/null +++ b/test/mpfrnegzero.awk @@ -0,0 +1,15 @@ +BEGIN { + printf("-0 -> %f, -0.0 -> %f\n", -0, -0.0) + + printf("atan2(+0, -0) = %f\n", atan2(+0, -0)) + printf("atan2(+0.0, -0.0) = %f\n", atan2(+0.0, -0.0)) + + printf("atan2(-0, -0) = %f\n", atan2(-0, -0)) + printf("atan2(-0.0, -0.0) = %f\n", atan2(-0.0, -0.0)) + + printf("atan2(+0, +0) = %f\n", atan2(+0, +0)) + printf("atan2(+0.0, +0.0) = %f\n", atan2(+0.0, +0.0)) + + printf("atan2(-0, +0) = %f\n", atan2(-0, +0)) + printf("atan2(-0.0, +0.0) = %f\n", atan2(-0.0, +0.0)) +} diff --git a/test/mpfrnegzero.ok b/test/mpfrnegzero.ok new file mode 100644 index 00000000..7af16292 --- /dev/null +++ b/test/mpfrnegzero.ok @@ -0,0 +1,9 @@ +-0 -> -0.000000, -0.0 -> -0.000000 +atan2(+0, -0) = 3.141593 +atan2(+0.0, -0.0) = 3.141593 +atan2(-0, -0) = -3.141593 +atan2(-0.0, -0.0) = -3.141593 +atan2(+0, +0) = 0.000000 +atan2(+0.0, +0.0) = 0.000000 +atan2(-0, +0) = -0.000000 +atan2(-0.0, +0.0) = -0.000000 -- cgit v1.2.3 From 93a1a268246ed72edc71381069ace49d52bf8fec Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 20 Jan 2014 21:50:24 +0200 Subject: Improve readdir test for MinGW. --- test/ChangeLog | 6 ++++++ test/Makefile.am | 7 +++++-- test/Makefile.in | 7 +++++-- test/readdir0.awk | 25 +++++++++++-------------- 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/test/ChangeLog b/test/ChangeLog index 535f6f14..d9ecfe5f 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -3,6 +3,12 @@ * Makefile.am (mpfrnegzero): New test. * mpfrnegzero.awk, mpfrnegzero.ok: New files. +2014-01-17 Arnold D. Robbins + + * Makefile.am (readdir): Run ls commands outside the awk script. + * readdir0.awk: Read ls results from files. Helps with MinGW. + Thanks to Eli Zaretskii for the problem report. + 2014-01-17 Arnold D. Robbins * Makefile.am: Quote instances of $(top_srcdir) also. diff --git a/test/Makefile.am b/test/Makefile.am index b6390009..ca39e0b8 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1819,8 +1819,11 @@ readdir: fi @echo $@ @$(AWK) -f "$(srcdir)"/readdir.awk "$(top_srcdir)" > _$@ - @ls -afli "$(top_srcdir)" | sed 1d | $(AWK) -f "$(srcdir)"/readdir0.awk -v extout=_$@ "$(top_srcdir)" > $@.ok - @-$(CMP) $@.ok _$@ && rm -f $@.ok _$@ + @ls -afi "$(top_srcdir)" > _dirlist + @ls -lna "$(top_srcdir)" | sed 1d > _longlist + @$(AWK) -f "$(srcdir)"/readdir0.awk -v extout=_$@ \ + -v dirlist=_dirlist -v longlist=_longlist > $@.ok + @-$(CMP) $@.ok _$@ && rm -f $@.ok _$@ _dirlist _longlist fts: @case `uname` in \ diff --git a/test/Makefile.in b/test/Makefile.in index fd0484a8..52fa49ef 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -2243,8 +2243,11 @@ readdir: fi @echo $@ @$(AWK) -f "$(srcdir)"/readdir.awk "$(top_srcdir)" > _$@ - @ls -afli "$(top_srcdir)" | sed 1d | $(AWK) -f "$(srcdir)"/readdir0.awk -v extout=_$@ "$(top_srcdir)" > $@.ok - @-$(CMP) $@.ok _$@ && rm -f $@.ok _$@ + @ls -afi "$(top_srcdir)" > _dirlist + @ls -lna "$(top_srcdir)" | sed 1d > _longlist + @$(AWK) -f "$(srcdir)"/readdir0.awk -v extout=_$@ \ + -v dirlist=_dirlist -v longlist=_longlist > $@.ok + @-$(CMP) $@.ok _$@ && rm -f $@.ok _$@ _dirlist _longlist fts: @case `uname` in \ diff --git a/test/readdir0.awk b/test/readdir0.awk index 296c03c7..2b7674a4 100644 --- a/test/readdir0.awk +++ b/test/readdir0.awk @@ -1,4 +1,9 @@ +# NOTE: This program is not a generalized parser for the output of 'ls'. +# It's job is to read the output of ls from the gawk source code directory, +# where we know there are no symbolic links, nor are there files with +# spaces in their file names, etc. BEGIN { + # analyze results from readdir extension while ((getline x < extout) > 0) { numrec++ if ((split(x, f, "/") == 3) && (f[3] == "u")) @@ -12,12 +17,7 @@ BEGIN { } BEGIN { - dir = ARGV[1] - delete ARGV[1] - ls_afi = "ls -afi " dir - ls_al = ("ls -lna " dir " | sed 1d") - - for (i = 1; (ls_afi | getline) > 0; i++) { + for (i = 1; (getline < dirlist) > 0; i++) { # inode number is $1, filename is read of record inode = $1 $1 = "" @@ -26,21 +26,18 @@ BEGIN { names[i] = $0 ino[names[i]] = inode } - close(ls_afi) + close(dirlist) - for (j = 1; (ls_al | getline) > 0; j++) { + for (j = 1; (getline < longlist) > 0; j++) { type_let = substr($0, 1, 1) if (type_let == "-") type_let = "f" - $1 = $2 = $3 = $4 = $5 = $6 = $7 = $8 = "" - $0 = $0 - sub(/^ */, "") - type[$0] = type_let + type[$NF] = type_let } - close(ls_al) + close(longlist) if (i != j) - printf("mismatch: %d from `ls -afi' and %d from `ls -l'\n", i, j) > "/dev/stderr" + printf("mismatch: %d from `ls -afi' and %d from `ls -lna'\n", i, j) > "/dev/stderr" for (i = 1; i in names; i++) printf("%s/%s/%s\n", ino[names[i]], names[i], (ftype_unknown ? "u" : type[names[i]])) -- cgit v1.2.3 From cc368b6d3e146c38d2dbefad1e60f5bf3a2537e0 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 20 Jan 2014 21:50:50 +0200 Subject: Sync pc/Makefile.tst with mainline. --- pc/ChangeLog | 5 +++++ pc/Makefile.tst | 16 ++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/pc/ChangeLog b/pc/ChangeLog index 12bf2f89..97fa6d94 100644 --- a/pc/ChangeLog +++ b/pc/ChangeLog @@ -1,3 +1,8 @@ +2014-01-20 Arnold D. Robbins + + * Makefile.tst (split_after_fpat, mpfrnegzero): Added, to + sync with main test Makefile. + 2014-01-15 Eli Zaretskii * Makefile.tst (mbprintf4, profile5, backbigs1, backsmalls1): diff --git a/pc/Makefile.tst b/pc/Makefile.tst index 2cff3c2e..c454cae9 100644 --- a/pc/Makefile.tst +++ b/pc/Makefile.tst @@ -194,14 +194,16 @@ GAWK_EXT_TESTS = \ patsplit posix printfbad1 printfbad2 printfbad3 procinfs \ profile1 profile2 profile3 profile4 profile5 pty1 \ rebuf regx8bit reginttrad reint reint2 rsstart1 \ - rsstart2 rsstart3 rstest6 shadow sortfor sortu splitarg4 strftime \ + rsstart2 rsstart3 rstest6 shadow sortfor sortu split_after_fpat \ + splitarg4 strftime \ strtonum switch2 symtab1 symtab2 symtab3 symtab4 symtab5 symtab6 \ symtab7 symtab8 symtab9 EXTRA_TESTS = inftest regtest INET_TESTS = inetdayu inetdayt inetechu inetecht MACHINE_TESTS = double1 double2 fmtspcl intformat -MPFR_TESTS = mpfrnr mpfrrnd mpfrieee mpfrexprange mpfrsort mpfrbigint +MPFR_TESTS = mpfrnr mpfrnegzero mpfrrnd mpfrieee mpfrexprange \ + mpfrsort mpfrbigint LOCALE_CHARSET_TESTS = \ asort asorti backbigs1 backsmalls1 backsmalls2 \ fmttest fnarydel fnparydl jarebug lc_num1 mbfw1 \ @@ -913,6 +915,11 @@ mpfrrnd: @$(AWK) -M -vPREC=53 -f "$(srcdir)"/$@.awk > _$@ 2>&1 @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +mpfrnegzero: + @echo $@ + @$(AWK) -M -f "$(srcdir)"/$@.awk > _$@ 2>&1 + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + mpfrnr: @echo $@ @$(AWK) -M -vPREC=113 -f "$(srcdir)"/$@.awk "$(srcdir)"/$@.in > _$@ @@ -2312,6 +2319,11 @@ sortu: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +split_after_fpat: + @echo $@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + splitarg4: @echo $@ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ -- cgit v1.2.3 From ccf651616825ba6e53390e3abc2c848b1120e231 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 22 Jan 2014 21:09:29 +0200 Subject: Fix VMS exit status. --- vms/ChangeLog | 4 ++++ vms/generate_config_vms_h_gawk.com | 40 +++++++++++++++++++++++++------------- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/vms/ChangeLog b/vms/ChangeLog index 5791af39..c3780cf3 100644 --- a/vms/ChangeLog +++ b/vms/ChangeLog @@ -1,3 +1,7 @@ +2014-01-21 John E. Malmberg + + * generate_config_vms_h_gawk.com: upate copyright and fix exit status. + 2014-01-17 John E. Malmberg * vmstest.com (split_after_fpat): Added this test. diff --git a/vms/generate_config_vms_h_gawk.com b/vms/generate_config_vms_h_gawk.com index 3a02fdfe..12d3d6cf 100644 --- a/vms/generate_config_vms_h_gawk.com +++ b/vms/generate_config_vms_h_gawk.com @@ -13,22 +13,31 @@ $! This generates a []config.h file and also a config_vms.h file, $! which is used to supplement that file. $! $! -$! Copyright 2013, John Malmberg +$! Copyright (C) 2014 the Free Software Foundation, Inc. $! -$! Permission to use, copy, modify, and/or distribute this software for any -$! purpose with or without fee is hereby granted, provided that the above -$! copyright notice and this permission notice appear in all copies. +$! This file is part of GAWK, the GNU implementation of the +$! AWK Progamming Language. $! -$! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -$! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -$! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -$! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -$! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -$! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT -$! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +$! GAWK is free software; you can redistribute it and/or modify +$! it under the terms of the GNU General Public License as published by +$! the Free Software Foundation; either version 3 of the License, or +$! (at your option) any later version. $! +$! GAWK is distributed in the hope that it will be useful, +$! but WITHOUT ANY WARRANTY; without even the implied warranty of +$! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +$! GNU General Public License for more details. $! -$! 28-Nov-2013 J. Malmberg +$! You should have received a copy of the GNU General Public License +$! along with this program; if not, write to the Free Software +$! Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +$! USA +$! +$! Per assignment agreement with FSF, similar procedures may be present +$! in other packages under other licensing agreements and copyrights +$! +$! +$! 21-Jan-2014 J. Malmberg $! $!========================================================================= $! @@ -264,8 +273,11 @@ $ write cvh "static void vms_exit(int status) {" $ write cvh " int vms_status;" $ write cvh " /* Fake the __posix_exit with severity added */" $ write cvh " /* Undocumented correct way to do this. */" -$ write cvh " vms_status = C_FACILITY_NO | 0xA000 | STS$M_INHIB_MSG;" -$ write cvh " vms_status |= (status << 3);" +$ write cvh " vms_status = 0;" +$ write cvh " if (status != 0) {" +$ write cvh " vms_status = C_FACILITY_NO | 0xA000 | STS$M_INHIB_MSG;" +$ write cvh " vms_status |= (status << 3);" +$ write cvh " }" $ write cvh " if (status == EXIT_FAILURE) {" $ write cvh " vms_status |= STS$K_ERROR;" $ write cvh " } else if (status == EXIT_FATAL) {" -- cgit v1.2.3 From c5dbf7830b722a52858c2ef633a6e8a927255c1b Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 22 Jan 2014 21:13:37 +0200 Subject: Update nl and sv translations. --- po/nl.gmo | Bin 71832 -> 73994 bytes po/nl.po | 34 +- po/sv.gmo | Bin 80433 -> 80916 bytes po/sv.po | 1297 ++++++++++++++++++++++++++++--------------------------------- 4 files changed, 617 insertions(+), 714 deletions(-) diff --git a/po/nl.gmo b/po/nl.gmo index b566051d..6ef2fffb 100644 Binary files a/po/nl.gmo and b/po/nl.gmo differ diff --git a/po/nl.po b/po/nl.po index 63b2191a..83aa7f6d 100644 --- a/po/nl.po +++ b/po/nl.po @@ -11,7 +11,7 @@ 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" -"PO-Revision-Date: 2014-01-19 12:42+0100\n" +"PO-Revision-Date: 2014-01-21 10:56+0100\n" "Last-Translator: Benno Schulenberg \n" "Language-Team: Dutch \n" "Language: nl\n" @@ -507,7 +507,7 @@ msgstr "deling door nul in '%%'" #: awkgram.y:5025 msgid "cannot assign a value to the result of a field post-increment expression" -msgstr "" +msgstr "kan geen waarde toewijzen aan het resultaat van een post-increment-expressie van een veld" #: awkgram.y:5028 #, c-format @@ -1587,7 +1587,7 @@ msgstr "Zal de volgende keer dat breekpunt %d wordt bereikt stoppen.\n" #: debug.c:2783 #, c-format msgid "Can only debug programs provided with the `-f' option.\n" -msgstr "" +msgstr "Kan alleen programma's debuggen die met optie '-f' gegeven zijn.\n" #: debug.c:2908 #, c-format @@ -1645,7 +1645,7 @@ msgstr "Zal de volgende %ld passages van breekpunt %d negeren.\n" #: debug.c:3207 #, c-format msgid "'finish' not meaningful in the outermost frame main()\n" -msgstr "" +msgstr "'finish' is niet zinvol in het buitenste frame van main()\n" #: debug.c:3212 #, c-format @@ -1655,7 +1655,7 @@ msgstr "Draaien tot terugkeer uit " #: debug.c:3255 #, c-format msgid "'return' not meaningful in the outermost frame main()\n" -msgstr "" +msgstr "'return' is niet zinvol in het buitenste frame van main()\n" #: debug.c:3369 #, c-format @@ -1690,12 +1690,12 @@ msgstr "Stoppend in %s...\n" #: debug.c:3543 #, c-format msgid "'finish' not meaningful with non-local jump '%s'\n" -msgstr "" +msgstr "'finish' is niet zinvol met een niet-lokale sprong '%s'\n" #: debug.c:3550 #, c-format msgid "'until' not meaningful with non-local jump '%s'\n" -msgstr "" +msgstr "'until' is niet zinvol met een niet-lokale sprong '%s'\n" #: debug.c:4185 msgid "\t------[Enter] to continue or q [Enter] to quit------" @@ -2255,7 +2255,7 @@ msgstr "chr: aangeroepen met onjuiste argumenten" #: extension/readdir.c:277 #, c-format msgid "dir_take_control_of: opendir/fdopendir failed: %s" -msgstr "" +msgstr "dir_take_control_of(): opendir()/fdopendir() is mislukt: %s" #: extension/readfile.c:84 msgid "readfile: called with too many arguments" @@ -2760,12 +2760,12 @@ msgstr "register_input_parser(): NULL-pointer gekregen" #: io.c:2818 #, c-format msgid "input parser `%s' conflicts with previously installed input parser `%s'" -msgstr "" +msgstr "invoer-parser '%s' botst met eerder geïnstalleerde invoer-parser '%s'" #: io.c:2825 #, c-format msgid "input parser `%s' failed to open `%s'" -msgstr "" +msgstr "invoer-parser '%s' kan '%s' niet openen" #: io.c:2845 msgid "register_output_wrapper: received NULL pointer" @@ -2774,12 +2774,12 @@ msgstr "register_output_wrapper(): NULL-pointer gekregen" #: io.c:2873 #, c-format msgid "output wrapper `%s' conflicts with previously installed output wrapper `%s'" -msgstr "" +msgstr "uitvoer-wrapper '%s' botst met eerder geïnstalleerde uitvoer-wrapper '%s'" #: io.c:2880 #, c-format msgid "output wrapper `%s' failed to open `%s'" -msgstr "" +msgstr "uitvoer-wrapper '%s' kan '%s' niet openen" #: io.c:2901 msgid "register_output_processor: received NULL pointer" @@ -2788,12 +2788,12 @@ msgstr "register_output_processor(): NULL-pointer gekregen" #: io.c:2930 #, c-format msgid "two-way processor `%s' conflicts with previously installed two-way processor `%s'" -msgstr "" +msgstr "tweeweg-processor '%s' botst met eerder geïnstalleerde tweeweg-processor '%s'" #: io.c:2939 #, c-format msgid "two way processor `%s' failed to open `%s'" -msgstr "" +msgstr "tweeweg-processor '%s' kan '%s' niet openen" #: io.c:3064 #, c-format @@ -2938,11 +2938,11 @@ msgstr "\t-h\t\t\t--help\n" #: main.c:820 msgid "\t-i includefile\t\t--include=includefile\n" -msgstr "" +msgstr "\t-i include-bestand\t\t--include=include-bestand\n" #: main.c:821 msgid "\t-l library\t\t--load=library\n" -msgstr "" +msgstr "\t-l bibliotheek\t\t--load=bibliotheek\n" #: main.c:822 msgid "\t-L [fatal]\t\t--lint[=fatal]\n" @@ -3178,7 +3178,7 @@ msgstr "%s: niet-numeriek argument #%d ontvangen" #: mpfr.c:845 msgid "%s: argument #%d has invalid value %Rg, using 0" -msgstr "" +msgstr "%s: argument #%d heeft ongeldige waarde %Rg; 0 wordt gebruikt" #: mpfr.c:857 msgid "%s: argument #%d negative value %Rg will give strange results" diff --git a/po/sv.gmo b/po/sv.gmo index a805642a..d0bebea6 100644 Binary files a/po/sv.gmo and b/po/sv.gmo differ diff --git a/po/sv.po b/po/sv.po index 7168507f..23e7037a 100644 --- a/po/sv.po +++ b/po/sv.po @@ -1,17 +1,17 @@ # Swedish translation of gawk -# Copyright © 2003, 2011, 2012, 2013 Free Software Foundation, Inc. +# Copyright © 2003, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the gawk package. # Martin Sjögren , 2001-2002. # Christer Andersson , 2007. -# Göran Uddeborg , 2011, 2012, 2013. +# Göran Uddeborg , 2011, 2012, 2013, 2014. # -# $Revision: 1.12 $ +# $Revision: 1.14 $ msgid "" msgstr "" -"Project-Id-Version: gawk 4.0.75\n" +"Project-Id-Version: gawk 4.1.0b\n" "Report-Msgid-Bugs-To: arnold@skeeve.com\n" -"POT-Creation-Date: 2013-05-09 16:05+0300\n" -"PO-Revision-Date: 2013-04-18 22:46+0200\n" +"POT-Creation-Date: 2014-01-14 22:23+0200\n" +"PO-Revision-Date: 2014-01-21 17:40+0100\n" "Last-Translator: Göran Uddeborg \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -19,92 +19,84 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: array.c:254 +#: array.c:256 #, c-format msgid "from %s" msgstr "frÃ¥n %s" -#: array.c:354 +#: array.c:357 msgid "attempt to use a scalar value as array" msgstr "försök att använda ett skalärt värde som vektor" -#: array.c:356 +#: array.c:359 #, c-format msgid "attempt to use scalar parameter `%s' as an array" msgstr "försök att använda skalärparametern â€%s†som en vektor" -#: array.c:359 +#: array.c:362 #, c-format msgid "attempt to use scalar `%s' as an array" msgstr "försök att använda skalären â€%s†som en vektor" -#: array.c:406 array.c:573 builtin.c:85 builtin.c:1591 builtin.c:1637 -#: builtin.c:1650 builtin.c:2078 builtin.c:2092 eval.c:1121 eval.c:1125 -#: eval.c:1524 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" msgstr "försök att använda vektorn â€%s†i skalärsammanhang" -#: array.c:580 +#: array.c:583 #, c-format msgid "delete: index `%s' not in array `%s'" msgstr "delete: index â€%s†finns inte i vektorn â€%sâ€" -#: array.c:594 +#: array.c:597 #, c-format msgid "attempt to use scalar `%s[\"%.*s\"]' as an array" msgstr "försök att använda skalären â€%s[\"%.*s\"]†som en vektor" -#: array.c:773 +#: array.c:776 msgid "adump: first argument not an array" msgstr "adump: första argumentet är inte en vektor" -#: array.c:812 +#: array.c:815 msgid "asort: second argument not an array" msgstr "asort: andra argumentet är inte en vektor" -#: array.c:813 +#: array.c:816 msgid "asorti: second argument not an array" msgstr "asorti: andra argumentet är inte en vektor" -#: array.c:820 +#: array.c:823 msgid "asort: first argument not an array" msgstr "asort: första argumentet är inte en vektor" -#: array.c:821 +#: array.c:824 msgid "asorti: first argument not an array" msgstr "asorti: första argumentet är inte en vektor" -#: array.c:828 +#: array.c:831 msgid "asort: cannot use a subarray of first arg for second arg" -msgstr "" -"asort: det gÃ¥r inte att använda en delvektor av första argumentet som andra " -"argument" +msgstr "asort: det gÃ¥r inte att använda en delvektor av första argumentet som andra argument" -#: array.c:829 +#: array.c:832 msgid "asorti: cannot use a subarray of first arg for second arg" -msgstr "" -"asorti: det gÃ¥r inte att använda en delvektor av första argumentet som andra " -"argument" +msgstr "asorti: det gÃ¥r inte att använda en delvektor av första argumentet som andra argument" -#: array.c:834 +#: array.c:837 msgid "asort: cannot use a subarray of second arg for first arg" -msgstr "" -"asort: det gÃ¥r inte att använda en delvektor av andra argumentet som första " -"argument" +msgstr "asort: det gÃ¥r inte att använda en delvektor av andra argumentet som första argument" -#: array.c:835 +#: array.c:838 msgid "asorti: cannot use a subarray of second arg for first arg" -msgstr "" -"asorti: det gÃ¥r inte att använda en delvektor av andra argumentet som första " -"argument" +msgstr "asorti: det gÃ¥r inte att använda en delvektor av andra argumentet som första argument" -#: array.c:1309 +#: array.c:1314 #, c-format msgid "`%s' is invalid as a function name" msgstr "â€%s†är ogiltigt som ett funktionsnamn" -#: array.c:1313 +#: array.c:1318 #, c-format msgid "sort comparison function `%s' is not defined" msgstr "jämförelsefunktionen â€%s†för sortering är inte definierad" @@ -169,8 +161,7 @@ msgstr "\"return\" använd utanför funktion" #: awkgram.y:922 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 \"\"'" +msgstr "ensamt \"print\" i BEGIN eller END-regel bör troligen vara 'print \"\"'" #: awkgram.y:988 awkgram.y:1037 msgid "`delete' is not allowed with SYMTAB" @@ -233,18 +224,17 @@ msgstr "indirekta funktionsanrop är en gawk-utökning" #: awkgram.y:1620 #, 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" +msgstr "det gÃ¥r inte att använda specialvariabeln \"%s\" för indirekta fuktionsanrop" #: awkgram.y:1698 msgid "invalid subscript expression" msgstr "ogiltig indexuttryck" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:119 +#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "varning: " -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:151 +#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "ödesdigert: " @@ -252,8 +242,8 @@ msgstr "ödesdigert: " msgid "unexpected newline or end of string" msgstr "oväntat nyradstecken eller slut pÃ¥ strängen" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:517 debug.c:533 -#: debug.c:2792 debug.c:5040 +#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 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)" @@ -263,7 +253,7 @@ msgstr "kan inte öppna källfilen \"%s\" för läsning (%s)" 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:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:130 debug.c:5191 +#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "okänd anledning" @@ -323,15 +313,12 @@ msgstr "oavslutat reguljärt uttryck slutar med \"\\\" i slutet av filen" #: awkgram.y:3042 #, 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" +msgstr "%s: %d: tawk-modifierare för reguljära uttryck \"/.../%c\" fungerar inte i gawk" #: awkgram.y:3046 #, 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" +msgstr "tawk-modifierare för reguljära uttryck \"/.../%c\" fungerar inte i gawk" #: awkgram.y:3053 msgid "unterminated regexp" @@ -409,8 +396,7 @@ msgstr "%d är ett ogiltigt antal argument för %s" #: awkgram.y:3798 #, 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" +msgstr "%s: bokstavlig sträng som sista argument till ersättning har ingen effekt" #: awkgram.y:3803 #, c-format @@ -427,27 +413,22 @@ msgstr "close: andra argumentet är en gawk-utökning" #: awkgram.y:3958 msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore" -msgstr "" -"användandet av dcgettext(_\"...\") är felaktigt: ta bort det inledande " -"understrykningstecknet" +msgstr "användandet av dcgettext(_\"...\") är felaktigt: ta bort det inledande understrykningstecknet" #: awkgram.y:3973 msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" -msgstr "" -"användandet av dcngettext(_\"...\") är felaktigt: ta bort det inledande " -"understrykningstecknet" +msgstr "användandet av dcngettext(_\"...\") är felaktigt: ta bort det inledande understrykningstecknet" #: awkgram.y:3992 -#, fuzzy msgid "index: regexp constant as second argument is not allowed" -msgstr "index: andra argumentet är inte en sträng" +msgstr "index: reguljäruttryck som andra argumentet är inte tillÃ¥tet" #: awkgram.y:4045 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "funktionen \"%s\": parametern \"%s\" överskuggar en global variabel" -#: awkgram.y:4102 debug.c:4021 debug.c:4064 debug.c:5189 +#: awkgram.y:4102 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)" @@ -482,31 +463,29 @@ msgstr "funktionen \"%s\": kan inte använda funktionsnamn som parameternamn" #: awkgram.y:4264 #, 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" +msgstr "funktionen \"%s\": det gÃ¥r inte att använda specialvariabeln \"%s\" som en funktionsparameter" #: awkgram.y:4272 #, c-format msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d" msgstr "funktionen \"%s\": parameter %d, \"%s\", är samma som parameter %d" -#: awkgram.y:4366 awkgram.y:4372 +#: awkgram.y:4359 awkgram.y:4365 #, c-format msgid "function `%s' called but never defined" msgstr "funktionen \"%s\" anropad men aldrig definierad" -#: awkgram.y:4376 +#: awkgram.y:4369 #, c-format msgid "function `%s' defined but never called directly" msgstr "funktionen \"%s\" definierad men aldrig anropad direkt" -#: awkgram.y:4408 +#: awkgram.y:4401 #, 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:4467 +#: awkgram.y:4460 #, c-format msgid "" "function `%s' called with space between name and `(',\n" @@ -515,420 +494,421 @@ msgstr "" "funktionen \"%s\" anropad med blanktecken mellan namnet och \"(\",\n" "eller använd som variabel eller vektor" -#: awkgram.y:4703 +#: awkgram.y:4696 msgid "division by zero attempted" msgstr "försökte dividera med noll" -#: awkgram.y:4712 +#: awkgram.y:4705 #, c-format msgid "division by zero attempted in `%%'" msgstr "försökte dividera med noll i \"%%\"" -#: builtin.c:128 +#: awkgram.y:5025 +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:5028 +#, c-format +msgid "invalid target of assignment (opcode %s)" +msgstr "ogiltigt mÃ¥l för tilldelning (op-kod %s)" + +#: builtin.c:133 #, c-format msgid "%s to \"%s\" failed (%s)" msgstr "%s till \"%s\" misslyckades (%s)" -#: builtin.c:129 +#: builtin.c:134 msgid "standard output" msgstr "standard ut" -#: builtin.c:143 +#: builtin.c:148 msgid "exp: received non-numeric argument" msgstr "exp: fick ett ickenumeriskt argument" -#: builtin.c:149 +#: builtin.c:154 #, c-format msgid "exp: argument %g is out of range" msgstr "exp: argumentet %g är inte inom tillÃ¥ten gräns" -#: builtin.c:224 +#: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" -msgstr "" -"fflush: kan inte spola: röret \"%s\" öppnat för läsning, inte skrivning" +msgstr "fflush: kan inte spola: röret \"%s\" öppnat för läsning, inte skrivning" -#: builtin.c:227 +#: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" -msgstr "" -"fflush: kan inte spola: filen \"%s\" öppnad för läsning, inte skrivning" +msgstr "fflush: kan inte spola: filen \"%s\" öppnad för läsning, inte skrivning" -#: builtin.c:239 +#: builtin.c:244 #, c-format 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:357 +#: builtin.c:362 msgid "index: received non-string first argument" msgstr "index: första argumentet är inte en sträng" -#: builtin.c:359 +#: builtin.c:364 msgid "index: received non-string second argument" msgstr "index: andra argumentet är inte en sträng" -#: builtin.c:483 mpfr.c:757 +#: builtin.c:488 mpfr.c:757 msgid "int: received non-numeric argument" msgstr "int: fick ett ickenumeriskt argument" -#: builtin.c:520 +#: builtin.c:525 msgid "length: received array argument" msgstr "length: fick ett vektorargument" -#: builtin.c:523 +#: builtin.c:528 msgid "`length(array)' is a gawk extension" msgstr "\"length(array)\" är en gawk-utökning" -#: builtin.c:539 +#: builtin.c:544 msgid "length: received non-string argument" msgstr "length: fick ett argument som inte är en sträng" -#: builtin.c:570 +#: builtin.c:575 msgid "log: received non-numeric argument" msgstr "log: fick ett ickenumeriskt argument" -#: builtin.c:573 +#: builtin.c:578 #, c-format msgid "log: received negative argument %g" msgstr "log: fick ett negativt argumentet %g" -#: builtin.c:771 builtin.c:776 +#: builtin.c:776 builtin.c:781 msgid "fatal: must use `count$' on all formats or none" msgstr "ödesdigert: mÃ¥ste använda \"count$\" pÃ¥ alla eller inga format" -#: builtin.c:846 +#: builtin.c:851 #, c-format msgid "field width is ignored for `%%' specifier" msgstr "fältbredd ignoreras för \"%%\"-specificerare" -#: builtin.c:848 +#: builtin.c:853 #, c-format msgid "precision is ignored for `%%' specifier" msgstr "precision ignoreras för \"%%\"-specificerare" -#: builtin.c:850 +#: builtin.c:855 #, c-format msgid "field width and precision are ignored for `%%' specifier" msgstr "fältbredd och precision ignoreras för \"%%\"-specificerare" -#: builtin.c:901 +#: builtin.c:906 msgid "fatal: `$' is not permitted in awk formats" msgstr "ödesdigert: \"$\" tillÃ¥ts inte i awk-format" -#: builtin.c:910 +#: builtin.c:915 msgid "fatal: arg count with `$' must be > 0" msgstr "ödesdigert: argumentantalet med \"$\" mÃ¥ste vara > 0" -#: builtin.c:914 +#: builtin.c:919 #, 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:918 +#: builtin.c:923 msgid "fatal: `$' not permitted after period in format" msgstr "ödesdigert: \"$\" tillÃ¥ts inte efter en punkt i formatet" -#: builtin.c:934 +#: builtin.c:939 msgid "fatal: no `$' supplied for positional field width or precision" -msgstr "" -"ödesdigert: inget \"$\" bifogat för positionsangiven fältbredd eller " -"precision" +msgstr "ödesdigert: inget \"$\" bifogat för positionsangiven fältbredd eller precision" -#: builtin.c:1006 +#: builtin.c:1011 msgid "`l' is meaningless in awk formats; ignored" msgstr "\"l\" är meningslös i awk-format, ignorerad" -#: builtin.c:1010 +#: builtin.c:1015 msgid "fatal: `l' is not permitted in POSIX awk formats" msgstr "ödesdigert: \"l\" tillÃ¥ts inte i POSIX awk-format" -#: builtin.c:1023 +#: builtin.c:1028 msgid "`L' is meaningless in awk formats; ignored" msgstr "\"L\" är meningslös i awk-format, ignorerad" -#: builtin.c:1027 +#: builtin.c:1032 msgid "fatal: `L' is not permitted in POSIX awk formats" msgstr "ödesdigert: \"L\" tillÃ¥ts inte i POSIX awk-format" -#: builtin.c:1040 +#: builtin.c:1045 msgid "`h' is meaningless in awk formats; ignored" msgstr "\"h\" är meningslös i awk-format, ignorerad" -#: builtin.c:1044 +#: builtin.c:1049 msgid "fatal: `h' is not permitted in POSIX awk formats" msgstr "ödesdigert: \"h\" tillÃ¥ts inte i POSIX awk-format" -#: builtin.c:1439 +#: builtin.c:1447 #, 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:1537 +#: builtin.c:1545 #, c-format msgid "ignoring unknown format specifier character `%c': no argument converted" -msgstr "" -"ignorerar okänt formatspecifikationstecken \"%c\": inget argument konverterat" +msgstr "ignorerar okänt formatspecifikationstecken \"%c\": inget argument konverterat" -#: builtin.c:1542 +#: builtin.c:1550 msgid "fatal: not enough arguments to satisfy format string" msgstr "ödesdigert: för fÃ¥ argument för formatsträngen" -#: builtin.c:1544 +#: builtin.c:1552 msgid "^ ran out for this one" msgstr "^ tog slut här" -#: builtin.c:1551 +#: builtin.c:1559 msgid "[s]printf: format specifier does not have control letter" msgstr "[s]printf: formatspecifieraren har ingen kommandobokstav" -#: builtin.c:1554 +#: builtin.c:1562 msgid "too many arguments supplied for format string" msgstr "för mÃ¥nga argument för formatsträngen" -#: builtin.c:1610 +#: builtin.c:1618 msgid "sprintf: no arguments" msgstr "sprintf: inga argument" -#: builtin.c:1633 builtin.c:1644 +#: builtin.c:1641 builtin.c:1652 msgid "printf: no arguments" msgstr "printf: inga argument" -#: builtin.c:1687 +#: builtin.c:1695 msgid "sqrt: received non-numeric argument" msgstr "sqrt: fick ickenumeriskt argument" -#: builtin.c:1691 +#: builtin.c:1699 #, c-format msgid "sqrt: called with negative argument %g" msgstr "sqrt: anropad med negativt argument %g" -#: builtin.c:1722 +#: builtin.c:1730 #, c-format msgid "substr: length %g is not >= 1" msgstr "substr: längden %g är inte >= 1" -#: builtin.c:1724 +#: builtin.c:1732 #, c-format msgid "substr: length %g is not >= 0" msgstr "substr: längden %g är inte >= 0" -#: builtin.c:1731 +#: builtin.c:1739 #, 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:1736 +#: builtin.c:1744 #, 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:1748 +#: builtin.c:1756 #, c-format msgid "substr: start index %g is invalid, using 1" msgstr "substr: startindex %g är ogiltigt, använder 1" -#: builtin.c:1753 +#: builtin.c:1761 #, 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:1778 +#: builtin.c:1786 msgid "substr: source string is zero length" msgstr "substr: källsträngen är tom" -#: builtin.c:1794 +#: builtin.c:1802 #, c-format msgid "substr: start index %g is past end of string" msgstr "substr: startindex %g är bortom strängens slut" -#: builtin.c:1802 +#: builtin.c:1810 #, c-format -msgid "" -"substr: length %g at start index %g exceeds length of first argument (%lu)" -msgstr "" -"substr: längden %g vid startindex %g överskrider det första argumentets " -"längd (%lu)" +msgid "substr: length %g at start index %g exceeds length of first argument (%lu)" +msgstr "substr: längden %g vid startindex %g överskrider det första argumentets längd (%lu)" -#: builtin.c:1876 +#: builtin.c:1884 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" msgstr "strftime: formatvärde i PROCINFO[\"strftime\"] har numerisk typ" -#: builtin.c:1899 +#: builtin.c:1907 msgid "strftime: received non-numeric second argument" msgstr "strftime: fick ett ickenumeriskt andra argument" -#: builtin.c:1903 +#: builtin.c:1911 msgid "strftime: second argument less than 0 or too big for time_t" msgstr "strftime: andra argimentet mindre än 0 eller för stort för time_t" -#: builtin.c:1910 +#: builtin.c:1918 msgid "strftime: received non-string first argument" msgstr "strftime: fick ett första argument som inte är en sträng" -#: builtin.c:1917 +#: builtin.c:1925 msgid "strftime: received empty format string" msgstr "strftime: fick en tom formatsträng" -#: builtin.c:1983 +#: builtin.c:1991 msgid "mktime: received non-string argument" msgstr "mktime: fick ett argument som inte är en sträng" -#: builtin.c:2000 +#: builtin.c:2008 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:2035 +#: builtin.c:2043 msgid "'system' function not allowed in sandbox mode" msgstr "funktionen \"system\" är inte tillÃ¥ten i sandlÃ¥deläge" -#: builtin.c:2040 +#: builtin.c:2048 msgid "system: received non-string argument" msgstr "system: fick ett argument som inte är en sträng" -#: builtin.c:2160 +#: builtin.c:2168 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "referens till icke initierat fält \"$%d\"" -#: builtin.c:2247 +#: builtin.c:2255 msgid "tolower: received non-string argument" msgstr "tolower: fick ett argument som inte är en sträng" -#: builtin.c:2281 +#: builtin.c:2289 msgid "toupper: received non-string argument" msgstr "toupper: fick ett argument som inte är en sträng" -#: builtin.c:2317 mpfr.c:672 +#: builtin.c:2325 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2: fick ett ickenumeriskt första argument" -#: builtin.c:2319 mpfr.c:674 +#: builtin.c:2327 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2: fick ett ickenumeriskt andra argument" -#: builtin.c:2338 +#: builtin.c:2346 msgid "sin: received non-numeric argument" msgstr "sin: fick ett ickenumeriskt argument" -#: builtin.c:2354 +#: builtin.c:2362 msgid "cos: received non-numeric argument" msgstr "cos: fick ett ickenumeriskt argument" -#: builtin.c:2407 mpfr.c:1156 +#: builtin.c:2415 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand: fick ett ickenumeriskt argument" -#: builtin.c:2438 +#: builtin.c:2446 msgid "match: third argument is not an array" msgstr "match: tredje argumentet är inte en vektor" -#: builtin.c:2710 +#: builtin.c:2718 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub: nollan i tredje argumentet behandlad som en etta" -#: builtin.c:3003 +#: builtin.c:3014 msgid "lshift: received non-numeric first argument" msgstr "lshift: fick ett ickenumeriskt första argument" -#: builtin.c:3005 +#: builtin.c:3016 msgid "lshift: received non-numeric second argument" msgstr "lshift: fick ett ickenumeriskt andra argument" -#: builtin.c:3011 +#: builtin.c:3022 #, 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:3013 +#: builtin.c:3024 #, c-format msgid "lshift(%f, %f): fractional values will be truncated" msgstr "lshift(%f, %f): flyttalsvärden kommer huggas av" -#: builtin.c:3015 +#: builtin.c:3026 #, 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:3040 +#: builtin.c:3051 msgid "rshift: received non-numeric first argument" msgstr "rshift: fick ett ickenumeriskt första argument" -#: builtin.c:3042 +#: builtin.c:3053 msgid "rshift: received non-numeric second argument" msgstr "rshift: fick ett ickenumeriskt andra argument" -#: builtin.c:3048 +#: builtin.c:3059 #, 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:3050 +#: builtin.c:3061 #, c-format msgid "rshift(%f, %f): fractional values will be truncated" msgstr "rshift(%f, %f): flyttalsvärden kommer huggas av" -#: builtin.c:3052 +#: builtin.c:3063 #, 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:3077 mpfr.c:968 +#: builtin.c:3088 mpfr.c:968 msgid "and: called with less than two arguments" msgstr "and: anropad med mindre än tvÃ¥ argument" -#: builtin.c:3082 +#: builtin.c:3093 #, c-format msgid "and: argument %d is non-numeric" msgstr "and: argument %d är inte numeriskt" -#: builtin.c:3086 +#: builtin.c:3097 #, 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:3109 mpfr.c:1000 +#: builtin.c:3120 mpfr.c:1000 msgid "or: called with less than two arguments" msgstr "or: anropad med färre än tvÃ¥ argmuent" -#: builtin.c:3114 +#: builtin.c:3125 #, c-format msgid "or: argument %d is non-numeric" msgstr "or: argument %d är inte numeriskt" -#: builtin.c:3118 +#: builtin.c:3129 #, 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:3140 mpfr.c:1031 +#: builtin.c:3151 mpfr.c:1031 msgid "xor: called with less than two arguments" msgstr "xor: anropad med färre än tvÃ¥ argument" -#: builtin.c:3146 +#: builtin.c:3157 #, c-format msgid "xor: argument %d is non-numeric" msgstr "xor: argument %d är inte numeriskt" -#: builtin.c:3150 +#: builtin.c:3161 #, 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:3175 mpfr.c:787 +#: builtin.c:3186 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl: fick ett ickenumeriskt argument" -#: builtin.c:3181 +#: builtin.c:3192 #, c-format msgid "compl(%f): negative value will give strange results" msgstr "compl(%f): negativt värde kommer ge konstiga resultat" -#: builtin.c:3183 +#: builtin.c:3194 #, c-format msgid "compl(%f): fractional value will be truncated" msgstr "compl(%f): flyttalsvärde kommer huggas av" -#: builtin.c:3352 +#: builtin.c:3363 #, c-format msgid "dcgettext: `%s' is not a valid locale category" msgstr "dcgettext: \"%s\" är inte en giltig lokalkategori" @@ -960,9 +940,7 @@ msgstr "save \"%s\": kommandot inte tillÃ¥tet." #: command.y:339 msgid "Can't use command `commands' for breakpoint/watchpoint commands" -msgstr "" -"Det gÃ¥r inte att använda kommandot â€commands†i brytpunkts-/" -"observationspunktskommandon" +msgstr "Det gÃ¥r inte att använda kommandot â€commands†i brytpunkts-/observationspunktskommandon" #: command.y:341 msgid "no breakpoint/watchpoint has been set yet" @@ -1036,16 +1014,11 @@ msgid "non-zero integer value" msgstr "heltalsvärde som inte är noll" #: command.y:817 -msgid "" -"backtrace [N] - 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." +msgid "backtrace [N] - 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:819 -msgid "" -"break [[filename:]N|function] - set breakpoint at the specified location." +msgid "break [[filename:]N|function] - set breakpoint at the specified location." msgstr "break [[filename:]N|function] - sätt brytpunkt pÃ¥ den angivna platsen." #: command.y:821 @@ -1053,18 +1026,12 @@ msgid "clear [[filename:]N|function] - delete breakpoints previously set." msgstr "clear [[filnamn:]N|funktion] - radera tidigare satta brytpunkter." #: command.y:823 -msgid "" -"commands [num] - starts a list of commands to be executed at a breakpoint" -"(watchpoint) hit." -msgstr "" -"commands [num] - startar en lista av kommandon att köra när en brytpunkt" -"(observationspunkt) träffas." +msgid "commands [num] - starts a list of commands to be executed at a breakpoint(watchpoint) hit." +msgstr "commands [num] - startar en lista av kommandon att köra när en brytpunkt(observationspunkt) träffas." #: command.y:825 msgid "condition num [expr] - set or clear breakpoint or watchpoint condition." -msgstr "" -"condition num [uttr] - sätt eller töm en brytpunkts eller observationspunkts " -"villkor." +msgstr "condition num [uttr] - sätt eller töm en brytpunkts eller observationspunkts villkor." #: command.y:827 msgid "continue [COUNT] - continue program being debugged." @@ -1080,8 +1047,7 @@ msgstr "disable [brytpunkger] [intervall] - avaktivera angivna brytpunkter." #: command.y:833 msgid "display [var] - print value of variable each time the program stops." -msgstr "" -"display [var] - skriv ut värdet pÃ¥ variabeln varje gÃ¥ng programmet stoppar." +msgstr "display [var] - skriv ut värdet pÃ¥ variabeln varje gÃ¥ng programmet stoppar." #: command.y:835 msgid "down [N] - move N frames down the stack." @@ -1093,8 +1059,7 @@ msgstr "dump [filnamn] - skriv instruktioner till filen eller standard ut." #: command.y:839 msgid "enable [once|del] [breakpoints] [range] - enable specified breakpoints." -msgstr "" -"enable [once|del] [brytpunkter] [intervall] - aktivera angivna brytpunkter." +msgstr "enable [once|del] [brytpunkter] [intervall] - aktivera angivna brytpunkter." #: command.y:841 msgid "end - end a list of commands or awk statements." @@ -1114,21 +1079,15 @@ msgstr "frame [N] - välj och skriv ut stackram nummer N." #: command.y:849 msgid "help [command] - print list of commands or explanation of command." -msgstr "" -"help [kommando] - skriv listan av kommandon eller en förklaring av kommando." +msgstr "help [kommando] - skriv listan av kommandon eller en förklaring av kommando." #: command.y:851 msgid "ignore N COUNT - set ignore-count of breakpoint number N to COUNT." -msgstr "" -"ignore N ANTAL - sätt ignoreringsantal pÃ¥ brytpunkt nummer N till ANTAL." +msgstr "ignore N ANTAL - sätt ignoreringsantal pÃ¥ brytpunkt nummer N till ANTAL." #: command.y:853 -msgid "" -"info topic - source|sources|variables|functions|break|frame|args|locals|" -"display|watch." -msgstr "" -"info topic - 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 topic - source|sources|variables|functions|break|frame|args|locals|display|watch." #: command.y:855 msgid "list [-|+|[filename:]lineno|function|range] - list specified line(s)." @@ -1139,8 +1098,7 @@ msgid "next [COUNT] - step program, proceeding through subroutine calls." msgstr "next [ANTAL] - stega programmet, passera genom subrutinanrop." #: command.y:859 -msgid "" -"nexti [COUNT] - step one instruction, but proceed through subroutine calls." +msgid "nexti [COUNT] - step one instruction, but proceed through subroutine calls." msgstr "nexti [ANTAL] - stega en instruktion, men passera genom subrutinanrop." #: command.y:861 @@ -1176,11 +1134,8 @@ msgid "set var = value - assign value to a scalar variable." msgstr "set var = värde - tilldela värde till en skalär variabel." #: command.y:879 -msgid "" -"silent - suspends usual message when stopped at a breakpoint/watchpoint." -msgstr "" -"silent - undertrycker normala meddelanden vid stopp pÃ¥ en brytpunkt/" -"observationspunkt. " +msgid "silent - suspends usual message when stopped at a breakpoint/watchpoint." +msgstr "silent - undertrycker normala meddelanden vid stopp pÃ¥ en brytpunkt/observationspunkt. " #: command.y:881 msgid "source file - execute commands from file." @@ -1207,12 +1162,8 @@ msgid "undisplay [N] - remove variable(s) from automatic display list." msgstr "undisplay [N] - ta bort variabler frÃ¥n listan över automatiskt visade." #: command.y:893 -msgid "" -"until [[filename:]N|function] - execute until program reaches a different " -"line or line N within current frame." -msgstr "" -"until [[filenamn:]N|funktion] - kör tills programmet nÃ¥r en annan rad eller " -"rad N inom aktuell ram." +msgid "until [[filename:]N|function] - execute until program reaches a different line or line N within current frame." +msgstr "until [[filenamn:]N|funktion] - kör tills programmet nÃ¥r en annan rad eller rad N inom aktuell ram." #: command.y:895 msgid "unwatch [N] - remove variable(s) from watch list." @@ -1226,7 +1177,7 @@ 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:395 msg.c:128 +#: command.y:1011 debug.c:401 msg.c:135 #, c-format msgid "error: " msgstr "fel: " @@ -1264,93 +1215,93 @@ msgstr "ogiltigt tecken" msgid "undefined command: %s\n" msgstr "odefinierat kommando: %s\n" -#: debug.c:246 +#: debug.c:252 msgid "set or show the number of lines to keep in history file." msgstr "sätt eller visa antalet rader att behÃ¥lla i historiefilen." -#: debug.c:248 +#: debug.c:254 msgid "set or show the list command window size." msgstr "sätt eller visa fönsterstorleken för listkommandot." -#: debug.c:250 +#: debug.c:256 msgid "set or show gawk output file." msgstr "sätt eller visa gawks utmatningsfil." -#: debug.c:252 +#: debug.c:258 msgid "set or show debugger prompt." msgstr "sätt eller visa felsökningsprompten." -#: debug.c:254 +#: debug.c:260 msgid "(un)set or show saving of command history (value=on|off)." msgstr "slÃ¥ av/pÃ¥ eller visa sparandet av kommandohisterik (värde=on|off)." -#: debug.c:256 +#: debug.c:262 msgid "(un)set or show saving of options (value=on|off)." msgstr "slÃ¥ av/pÃ¥ eller visa sparandet av flaggor (värde=on|off)." -#: debug.c:258 +#: debug.c:264 msgid "(un)set or show instruction tracing (value=on|off)." msgstr "slÃ¥ av/pÃ¥ eller visa instruktionsspÃ¥rande (värde=on|off)." -#: debug.c:339 +#: debug.c:345 msgid "program not running." msgstr "programmet kör inte." -#: debug.c:442 debug.c:597 +#: debug.c:448 debug.c:606 #, c-format msgid "can't read source file `%s' (%s)" msgstr "kan inte läsa källfilen â€%s†(%s)" -#: debug.c:447 +#: debug.c:453 #, c-format msgid "source file `%s' is empty.\n" msgstr "källfilen â€%s†är tom.\n" -#: debug.c:474 +#: debug.c:480 msgid "no current source file." msgstr "ingen aktuell källkodsfil." -#: debug.c:499 +#: debug.c:505 #, c-format msgid "cannot find source file named `%s' (%s)" msgstr "kan inte hitta nÃ¥gon källfil med namnet â€%s†(%s)" -#: debug.c:523 +#: debug.c:529 #, c-format msgid "WARNING: source file `%s' modified since program compilation.\n" msgstr "VARNING: källfilen â€%s†ändrad sedan programmet kompilerades.\n" -#: debug.c:542 +#: debug.c:551 #, c-format msgid "line number %d out of range; `%s' has %d lines" msgstr "radnummer %d utanför intervallet; â€%s†har %d rader" -#: debug.c:602 +#: debug.c:611 #, c-format msgid "unexpected eof while reading file `%s', line %d" msgstr "oväntat filslut när filen â€%s†lästes, rad %d" -#: debug.c:611 +#: debug.c:620 #, c-format msgid "source file `%s' modified since start of program execution" msgstr "källfilen â€%s†ändrad sedan början av programkörningen" -#: debug.c:723 +#: debug.c:732 #, c-format msgid "Current source file: %s\n" msgstr "Aktuell källfil: %s\n" -#: debug.c:724 +#: debug.c:733 #, c-format msgid "Number of lines: %d\n" msgstr "Antalet rader: %d\n" -#: debug.c:731 +#: debug.c:740 #, c-format msgid "Source file (lines): %s (%d)\n" msgstr "Källfilen (rader): %s (%d)\n" -#: debug.c:745 +#: debug.c:754 msgid "" "Number Disp Enabled Location\n" "\n" @@ -1358,54 +1309,54 @@ msgstr "" "Nummer Visa Aktiv Plats\n" "\n" -#: debug.c:756 +#: debug.c:765 #, c-format msgid "\tno of hits = %ld\n" msgstr "\tantal träffar = %ld\n" -#: debug.c:758 +#: debug.c:767 #, c-format msgid "\tignore next %ld hit(s)\n" msgstr "\tignorera nästa %ld träffar\n" -#: debug.c:760 debug.c:900 +#: debug.c:769 debug.c:909 #, c-format msgid "\tstop condition: %s\n" msgstr "\tstoppvillkor: %s\n" -#: debug.c:762 debug.c:902 +#: debug.c:771 debug.c:911 msgid "\tcommands:\n" msgstr "\tkommandon:\n" -#: debug.c:784 +#: debug.c:793 #, c-format msgid "Current frame: " msgstr "Aktuell ram: " -#: debug.c:787 +#: debug.c:796 #, c-format msgid "Called by frame: " msgstr "Anropad av ramen: " -#: debug.c:791 +#: debug.c:800 #, c-format msgid "Caller of frame: " msgstr "Anropare av ramen: " -#: debug.c:809 +#: debug.c:818 #, c-format msgid "None in main().\n" msgstr "Ingen i main().\n" -#: debug.c:839 +#: debug.c:848 msgid "No arguments.\n" msgstr "Inga argument.\n" -#: debug.c:840 +#: debug.c:849 msgid "No locals.\n" msgstr "Inga lokala.\n" -#: debug.c:848 +#: debug.c:857 msgid "" "All defined variables:\n" "\n" @@ -1413,7 +1364,7 @@ msgstr "" "Alla definierade variabler:\n" "\n" -#: debug.c:858 +#: debug.c:867 msgid "" "All defined functions:\n" "\n" @@ -1421,7 +1372,7 @@ msgstr "" "Alla definierade funktioner:\n" "\n" -#: debug.c:877 +#: debug.c:886 msgid "" "Auto-display variables:\n" "\n" @@ -1429,7 +1380,7 @@ msgstr "" "Automatvisade variabler:\n" "\n" -#: debug.c:880 +#: debug.c:889 msgid "" "Watch variables:\n" "\n" @@ -1437,364 +1388,357 @@ msgstr "" "Observerade variabler:\n" "\n" -#: debug.c:1020 +#: debug.c:1029 #, c-format msgid "no symbol `%s' in current context\n" msgstr "ingen symbol â€%s†i aktuellt sammanhang\n" -#: debug.c:1032 debug.c:1418 +#: debug.c:1041 debug.c:1427 #, c-format msgid "`%s' is not an array\n" msgstr "â€%s†är inte en vektor\n" -#: debug.c:1046 +#: debug.c:1055 #, c-format msgid "$%ld = uninitialized field\n" msgstr "$%ld = oinitierat fält\n" -#: debug.c:1067 +#: debug.c:1076 #, c-format msgid "array `%s' is empty\n" msgstr "vektorn â€%s†är tom\n" -#: debug.c:1110 debug.c:1162 +#: debug.c:1119 debug.c:1171 #, c-format msgid "[\"%s\"] not in array `%s'\n" msgstr "[\"%s\"] finns inte i vektorn â€%sâ€\n" -#: debug.c:1166 +#: debug.c:1175 #, c-format msgid "`%s[\"%s\"]' is not an array\n" msgstr "â€%s[\"%s\"]†är inte en vektor\n" -#: debug.c:1227 debug.c:4949 +#: debug.c:1236 debug.c:4964 #, c-format msgid "`%s' is not a scalar variable" msgstr "â€%s†är inte en skalär variabel" -#: debug.c:1249 debug.c:4979 +#: debug.c:1258 debug.c:4994 #, c-format msgid "attempt to use array `%s[\"%s\"]' in a scalar context" msgstr "försök att använda vektorn â€%s[\"%s\"]†i skalärt sammanhang" -#: debug.c:1271 debug.c:4990 +#: debug.c:1280 debug.c:5005 #, c-format msgid "attempt to use scalar `%s[\"%s\"]' as array" msgstr "försök att använda skalären â€%s[\"%s\"]†som en vektor" -#: debug.c:1414 +#: debug.c:1423 #, c-format msgid "`%s' is a function" msgstr "â€%s†är en funktion" -#: debug.c:1456 +#: debug.c:1465 #, c-format msgid "watchpoint %d is unconditional\n" msgstr "observationspunkt %d är ovillkorlig\n" -#: debug.c:1490 +#: debug.c:1499 #, c-format msgid "No display item numbered %ld" msgstr "Ingen visningspost med numret %ld" -#: debug.c:1493 +#: debug.c:1502 #, c-format msgid "No watch item numbered %ld" msgstr "Ingen observationspost med numret %ld" -#: debug.c:1519 +#: debug.c:1528 #, c-format msgid "%d: [\"%s\"] not in array `%s'\n" msgstr "%d: [\"%s\"] finns inte i vektorn â€%sâ€\n" -#: debug.c:1758 +#: debug.c:1767 msgid "attempt to use scalar value as array" msgstr "försök att använda ett skalärt värde som vektor" -#: debug.c:1847 +#: debug.c:1856 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" -msgstr "" -"Observationspunkt %d raderad för att parametern är utanför sin räckvidd.\n" +msgstr "Observationspunkt %d raderad för att parametern är utanför sin räckvidd.\n" -#: debug.c:1858 +#: debug.c:1867 #, c-format msgid "Display %d deleted because parameter is out of scope.\n" msgstr "Visning %d raderad för att parametern är utanför sin räckvidd.\n" -#: debug.c:1891 +#: debug.c:1900 #, c-format msgid " in file `%s', line %d\n" msgstr " i filen â€%sâ€, rad %d\n" -#: debug.c:1912 +#: debug.c:1921 #, c-format msgid " at `%s':%d" msgstr " vid â€%sâ€:%d" -#: debug.c:1928 debug.c:1991 +#: debug.c:1937 debug.c:2000 #, c-format msgid "#%ld\tin " msgstr "#%ld\ti " -#: debug.c:1965 +#: debug.c:1974 #, c-format msgid "More stack frames follow ...\n" msgstr "Fler stackramar följer …\n" -#: debug.c:2008 +#: debug.c:2017 msgid "invalid frame number" msgstr "Ogiltigt ramnummer" -#: debug.c:2180 +#: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" -msgstr "" -"Observera: brytpunkt %d (aktiverad, ingorera följande %ld träffar), är ocksÃ¥ " -"satt vid %s:%d" +msgstr "Observera: brytpunkt %d (aktiverad, ingorera följande %ld träffar), är ocksÃ¥ satt vid %s:%d" -#: debug.c:2187 +#: debug.c:2207 #, c-format msgid "Note: breakpoint %d (enabled), also set at %s:%d" msgstr "Observera: brytpunkt %d (aktiverad), är ocksÃ¥ satt vid %s:%d" -#: debug.c:2194 +#: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" -msgstr "" -"Observera: brytpunkt %d (avaktiverad, intorera följande %ld träffar), är " -"ocksÃ¥ satt vid %s:%d" +msgstr "Observera: brytpunkt %d (avaktiverad, intorera följande %ld träffar), är ocksÃ¥ satt vid %s:%d" -#: debug.c:2201 +#: debug.c:2221 #, c-format msgid "Note: breakpoint %d (disabled), also set at %s:%d" msgstr "Observera: brytpunkt %d (avaktiverad), är ocksÃ¥ satt vid %s:%d" -#: debug.c:2218 +#: debug.c:2238 #, c-format msgid "Breakpoint %d set at file `%s', line %d\n" msgstr "Brytpunkt %d satt vid filen â€%sâ€, rad %d\n" -#: debug.c:2320 +#: debug.c:2340 #, c-format msgid "Can't set breakpoint in file `%s'\n" msgstr "Kan inte sätta en brytpunkt i filen â€%sâ€\n" -#: debug.c:2349 debug.c:2472 debug.c:3330 +#: debug.c:2369 debug.c:2492 debug.c:3350 #, c-format msgid "line number %d in file `%s' out of range" msgstr "radnummer %d i filen â€%s†är utanför tillÃ¥tet intervall" -#: debug.c:2353 +#: debug.c:2373 #, c-format msgid "Can't find rule!!!\n" msgstr "Kan inte hitta regeln!!!\n" -#: debug.c:2355 +#: debug.c:2375 #, c-format msgid "Can't set breakpoint at `%s':%d\n" msgstr "Kan inte sätta än brytpunkt vid â€%sâ€:%d\n" -#: debug.c:2367 +#: debug.c:2387 #, c-format msgid "Can't set breakpoint in function `%s'\n" msgstr "Kan inte sätta en brytpunkt i funktionen â€%sâ€\n" -#: debug.c:2383 +#: debug.c:2403 #, c-format msgid "breakpoint %d set at file `%s', line %d is unconditional\n" msgstr "brytpunkt %d satt i filen â€%sâ€, rad %d är ovillkorlig\n" -#: debug.c:2488 debug.c:2510 +#: debug.c:2508 debug.c:2530 #, c-format msgid "Deleted breakpoint %d" msgstr "Raderade brytpunkt %d" -#: debug.c:2494 +#: debug.c:2514 #, c-format msgid "No breakpoint(s) at entry to function `%s'\n" msgstr "Inga brytpunkter vid ingÃ¥ngen till funktionen â€%sâ€\n" -#: debug.c:2521 +#: debug.c:2541 #, c-format msgid "No breakpoint at file `%s', line #%d\n" msgstr "Ingen brytpunkt i filen â€%sâ€, rad nr. %d\n" -#: debug.c:2576 debug.c:2617 debug.c:2637 debug.c:2680 +#: debug.c:2596 debug.c:2637 debug.c:2657 debug.c:2700 msgid "invalid breakpoint number" msgstr "ogiltigt brytpunktsnummer" -#: debug.c:2592 +#: debug.c:2612 msgid "Delete all breakpoints? (y or n) " msgstr "Radera alla brytpunkter? (j eller n)" -#: debug.c:2593 debug.c:2903 debug.c:2956 +#: debug.c:2613 debug.c:2923 debug.c:2976 msgid "y" msgstr "j" -#: debug.c:2642 +#: debug.c:2662 #, c-format msgid "Will ignore next %ld crossing(s) of breakpoint %d.\n" msgstr "Kommer ignorera följande %ld passager av brytpunkt %d.\n" -#: debug.c:2646 +#: debug.c:2666 #, c-format msgid "Will stop next time breakpoint %d is reached.\n" msgstr "Kommer stanna nästa gÃ¥ng brytpunkt %d nÃ¥s.\n" -#: debug.c:2763 +#: debug.c:2783 #, c-format msgid "Can only debug programs provided with the `-f' option.\n" msgstr "Kan bara felsöka program som getts flaggan â€-fâ€.\n" -#: debug.c:2888 +#: debug.c:2908 #, c-format msgid "Failed to restart debugger" msgstr "Misslyckades att starta om felsökaren" -#: debug.c:2902 +#: debug.c:2922 msgid "Program already running. Restart from beginning (y/n)? " msgstr "Programmet kör redan. Starta om frÃ¥n början (j/n)? " -#: debug.c:2906 +#: debug.c:2926 #, c-format msgid "Program not restarted\n" msgstr "Programmet inte omstartat\n" -#: debug.c:2916 +#: debug.c:2936 #, c-format msgid "error: cannot restart, operation not allowed\n" msgstr "fel: kan inte starta om, Ã¥tgärden är inte tillÃ¥ten\n" -#: debug.c:2922 +#: debug.c:2942 #, c-format msgid "error (%s): cannot restart, ignoring rest of the commands\n" msgstr "fel (%s): kan inte starta om, ingorerar resten av kommandona\n" -#: debug.c:2930 +#: debug.c:2950 #, c-format msgid "Starting program: \n" msgstr "Startar programmet: \n" -#: debug.c:2939 +#: debug.c:2959 #, c-format msgid "Program exited %s with exit value: %d\n" msgstr "Programmet avslutade %s med slutvärde: %d\n" -#: debug.c:2955 +#: debug.c:2975 msgid "The program is running. Exit anyway (y/n)? " msgstr "Programmet kör. Avsluta ändÃ¥ (j/n)? " -#: debug.c:2990 +#: debug.c:3010 #, c-format msgid "Not stopped at any breakpoint; argument ignored.\n" msgstr "Inte stoppad vid nÃ¥gon brytpunkt, argumentet ignoreras.\n" -#: debug.c:2995 +#: debug.c:3015 #, c-format msgid "invalid breakpoint number %d." msgstr "ogiltigt brytpunktsnummer %d." -#: debug.c:3000 +#: debug.c:3020 #, c-format msgid "Will ignore next %ld crossings of breakpoint %d.\n" msgstr "Kommer ignorera de nästa %ld passagerna av brytpunkt %d.\n" -#: debug.c:3187 +#: debug.c:3207 #, c-format msgid "'finish' not meaningful in the outermost frame main()\n" msgstr "â€finish†är inte meningsfullt i den yttersta ramen main()\n" -#: debug.c:3192 +#: debug.c:3212 #, c-format msgid "Run till return from " msgstr "Kör till retur frÃ¥n " -#: debug.c:3235 +#: debug.c:3255 #, c-format msgid "'return' not meaningful in the outermost frame main()\n" msgstr "â€return†är inte meningsfullt i den yttersta ramen main()\n" -#: debug.c:3349 +#: debug.c:3369 #, c-format msgid "Can't find specified location in function `%s'\n" msgstr "Kan inte hitta angiven plats i funktionen â€%sâ€\n" -#: debug.c:3357 +#: debug.c:3377 #, c-format msgid "invalid source line %d in file `%s'" msgstr "ogiltig källrad %d i filen â€%sâ€" -#: debug.c:3372 +#: debug.c:3392 #, c-format msgid "Can't find specified location %d in file `%s'\n" msgstr "Kan inte hitta angiven plats %d i filen â€%sâ€\n" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "element not in array\n" msgstr "elementet finns inte i vektorn\n" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "untyped variable\n" msgstr "otypad variabel\n" -#: debug.c:3446 +#: debug.c:3466 #, c-format msgid "Stopping in %s ...\n" msgstr "Stannar i %s …\n" -#: debug.c:3523 +#: debug.c:3543 #, c-format msgid "'finish' not meaningful with non-local jump '%s'\n" msgstr "â€finish†är inte meningsfullt med icke lokalt hopp â€%sâ€\n" -#: debug.c:3530 +#: debug.c:3550 #, c-format msgid "'until' not meaningful with non-local jump '%s'\n" msgstr "â€until†är inte meningsfullt med icke lokalt hopp â€%sâ€\n" -#: debug.c:4165 +#: debug.c:4185 msgid "\t------[Enter] to continue or q [Enter] to quit------" -msgstr "" -"\t------[Retur] för att fortsätta eller a [Retur] för att avsluta------" +msgstr "\t------[Retur] för att fortsätta eller a [Retur] för att avsluta------" -#: debug.c:4166 +#: debug.c:4186 msgid "q" msgstr "a" -#: debug.c:4986 +#: debug.c:5001 #, c-format msgid "[\"%s\"] not in array `%s'" msgstr "[\"%s\"] finns inte i vektorn â€%sâ€" -#: debug.c:5192 +#: debug.c:5207 #, c-format msgid "sending output to stdout\n" msgstr "skickar utdata till standard ut\n" -#: debug.c:5232 +#: debug.c:5247 msgid "invalid number" msgstr "ogiltigt tal" -#: debug.c:5366 +#: debug.c:5381 #, c-format msgid "`%s' not allowed in current context; statement ignored" msgstr "â€%s†är inte tillÃ¥tet i det aktuella sammanhanget; satsen ignoreras" -#: debug.c:5374 +#: debug.c:5389 msgid "`return' not allowed in current context; statement ignored" -msgstr "" -"â€return†är inte tillÃ¥tet i det aktuella sammanhanget; satsen ignoreras" +msgstr "â€return†är inte tillÃ¥tet i det aktuella sammanhanget; satsen ignoreras" -#: debug.c:5575 +#: debug.c:5590 #, c-format msgid "No symbol `%s' in current context" msgstr "Ingen symbol â€%s†i aktuell omgivning" #: 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:1192 +#: dfa.c:1106 dfa.c:1111 dfa.c:1124 dfa.c:1191 msgid "unbalanced [" msgstr "obalanserad [" @@ -1802,31 +1746,31 @@ msgstr "obalanserad [" msgid "invalid character class" msgstr "ogiltig teckenklass" -#: dfa.c:1229 +#: dfa.c:1228 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "syntaxen för teckenklass är [[:space:]], inte [:space:]" -#: dfa.c:1281 +#: dfa.c:1280 msgid "unfinished \\ escape" msgstr "oavslutad \\-följd" -#: dfa.c:1428 regcomp.c:161 +#: dfa.c:1427 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "Ogiltigt innehÃ¥ll i \\{\\}" -#: dfa.c:1431 regcomp.c:176 +#: dfa.c:1430 regcomp.c:176 msgid "Regular expression too big" msgstr "Reguljärt uttryck för stort" -#: dfa.c:1816 +#: dfa.c:1847 msgid "unbalanced (" msgstr "obalanserad (" -#: dfa.c:1943 +#: dfa.c:1973 msgid "no syntax specified" msgstr "ingen syntax angiven" -#: dfa.c:1951 +#: dfa.c:1981 msgid "unbalanced )" msgstr "obalanserad )" @@ -1845,11 +1789,11 @@ msgstr "okänd op-kod %d" msgid "opcode %s not an operator or keyword" msgstr "op-kod %s är inte en operator eller ett nyckelord" -#: eval.c:471 +#: eval.c:472 msgid "buffer overflow in genflags2str" msgstr "buffertöverflöd i genflags2str" -#: eval.c:674 +#: eval.c:675 #, c-format msgid "" "\n" @@ -1860,71 +1804,71 @@ msgstr "" "\t# Funktionsanropsstack:\n" "\n" -#: eval.c:703 +#: eval.c:704 msgid "`IGNORECASE' is a gawk extension" msgstr "\"IGNORECASE\" är en gawk-utökning" -#: eval.c:735 +#: eval.c:736 msgid "`BINMODE' is a gawk extension" msgstr "\"BINMODE\" är en gawk-utökning" -#: eval.c:793 +#: eval.c:794 #, c-format msgid "BINMODE value `%s' is invalid, treated as 3" msgstr "BINMODE-värde \"%s\" är ogiltigt, behandlas som 3" -#: eval.c:884 +#: eval.c:885 #, c-format msgid "bad `%sFMT' specification `%s'" msgstr "felaktig \"%sFMT\"-specifikation \"%s\"" -#: eval.c:968 +#: eval.c:969 msgid "turning off `--lint' due to assignment to `LINT'" msgstr "slÃ¥r av \"--lint\" pÃ¥ grund av en tilldelning till \"LINT\"" -#: eval.c:1146 +#: eval.c:1147 #, c-format msgid "reference to uninitialized argument `%s'" msgstr "referens till icke initierat argument \"%s\"" -#: eval.c:1147 +#: eval.c:1148 #, c-format msgid "reference to uninitialized variable `%s'" msgstr "referens till icke initierad variabel \"%s\"" -#: eval.c:1165 +#: eval.c:1166 msgid "attempt to field reference from non-numeric value" msgstr "försök att fältreferera frÃ¥n ickenumeriskt värde" -#: eval.c:1167 +#: eval.c:1168 msgid "attempt to field reference from null string" msgstr "försök till fältreferens frÃ¥n en tom sträng" -#: eval.c:1175 +#: eval.c:1176 #, c-format msgid "attempt to access field %ld" msgstr "försök att komma Ã¥t fält nummer %ld" -#: eval.c:1184 +#: eval.c:1185 #, c-format msgid "reference to uninitialized field `$%ld'" msgstr "referens till icke initierat fält \"$%ld\"" -#: eval.c:1271 +#: eval.c:1272 #, c-format msgid "function `%s' called with more arguments than declared" msgstr "funktionen \"%s\" anropad med fler argument än vad som deklarerats" -#: eval.c:1466 +#: eval.c:1473 #, c-format msgid "unwind_stack: unexpected type `%s'" msgstr "unwind_stack: oväntad typ \"%s\"" -#: eval.c:1562 +#: eval.c:1569 msgid "division by zero attempted in `/='" msgstr "försökte dividera med noll i \"/=\"" -#: eval.c:1569 +#: eval.c:1576 #, c-format msgid "division by zero attempted in `%%='" msgstr "försökte dividera med noll i \"%%=\"" @@ -1937,7 +1881,7 @@ msgstr "utökningar är inte tillÃ¥tna i sandlÃ¥deläge" msgid "-l / @load are gawk extensions" msgstr "-l / @load är gawk-utökningar" -#: ext.c:95 ext.c:177 +#: ext.c:95 msgid "load_ext: received NULL lib_name" msgstr "load_ext: mottog NULL-lib_name" @@ -1948,10 +1892,8 @@ msgstr "load_ext: kan inte öppna biblioteket â€%s†(%s)\n" #: ext.c:104 #, 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" +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 #, c-format @@ -1961,13 +1903,16 @@ msgstr "load_ext: biblioteket â€%sâ€: kan inte anropa funktionen â€%s†(%s) #: ext.c:114 #, c-format msgid "load_ext: library `%s' initialization routine `%s' failed\n" -msgstr "" -"load_ext: initieringsrutinen â€%2$s†i biblioteket â€%1$s†misslyckades\n" +msgstr "load_ext: initieringsrutinen â€%2$s†i biblioteket â€%1$s†misslyckades\n" #: ext.c:174 msgid "`extension' is a gawk extension" msgstr "\"extension\" är en gawk-utökning" +#: ext.c:177 +msgid "extension: received NULL lib_name" +msgstr "utökning: mottog NULL-lib_name" + #: ext.c:180 #, c-format msgid "extension: cannot open library `%s' (%s)" @@ -1975,10 +1920,8 @@ msgstr "extension: kan inte öppna biblioteket â€%s†(%s)" #: ext.c:186 #, 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)" +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 #, c-format @@ -1989,37 +1932,36 @@ msgstr "extension: biblioteket â€%sâ€: kan inte anropa funktionen â€%s†(%s msgid "make_builtin: missing function name" msgstr "make_builtin: funktionsnamn saknas" -#: ext.c:238 +#: ext.c:236 #, c-format msgid "make_builtin: can't redefine function `%s'" msgstr "make_builtin: det gÃ¥r inte att definiera om funktionen â€%sâ€" -#: ext.c:242 +#: ext.c:240 #, c-format msgid "make_builtin: function `%s' already defined" msgstr "make_builtin: funktionen â€%s†är redan definierad" -#: ext.c:246 +#: ext.c:244 #, c-format msgid "make_builtin: function name `%s' previously defined" msgstr "make_builtin: funktionsnamnet â€%s†är definierat sedan tidigare" -#: ext.c:248 +#: ext.c:246 #, 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" +msgstr "make_builtin: kan inte använda gawks inbyggda â€%s†som ett funktionsnamn" -#: ext.c:251 ext.c:304 +#: ext.c:249 ext.c:304 #, c-format msgid "make_builtin: negative argument count for function `%s'" msgstr "make_builtin: negativt argumentantal för funktionen \"%s\"" -#: ext.c:278 +#: ext.c:276 msgid "extension: missing function name" msgstr "extension: saknar funktionsnamn" -#: ext.c:283 +#: ext.c:279 ext.c:283 #, c-format msgid "extension: illegal character `%c' in function name `%s'" msgstr "extension: ogiltigt tecken \"%c\" i funktionsnamnet \"%s\"" @@ -2042,142 +1984,145 @@ msgstr "extension: funktionsnamnet \"%s\" är definierat sedan tidigare" #: ext.c:301 #, 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" +msgstr "extension: kan inte använda gawks inbyggda \"%s\" som ett funktionsnamn" -#: ext.c:374 +#: ext.c:375 #, 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:377 +#: ext.c:378 #, c-format msgid "function `%s': missing argument #%d" msgstr "funktionen \"%s\": argument %d saknas" -#: ext.c:394 +#: ext.c:395 #, 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:398 +#: ext.c:399 #, 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:412 +#: ext.c:413 msgid "dynamic loading of library not supported" msgstr "dynamisk laddning av bibliotek stödjs inte" -#: extension/filefuncs.c:97 +#: extension/filefuncs.c:159 msgid "chdir: called with incorrect number of arguments, expecting 1" msgstr "chdir: anropad med felaktigt antal argument, förväntade 1" -#: extension/filefuncs.c:343 +#: extension/filefuncs.c:439 #, c-format msgid "stat: unable to read symbolic link `%s'" msgstr "stat: kan inte läsa den symboliska länken â€%sâ€" -#: extension/filefuncs.c:376 +#: extension/filefuncs.c:472 msgid "stat: called with wrong number of arguments" msgstr "stat: anropad med fel antal argument" -#: extension/filefuncs.c:383 +#: extension/filefuncs.c:479 msgid "stat: bad parameters" msgstr "stat: felaktiga parametrar" -#: extension/filefuncs.c:437 +#: extension/filefuncs.c:533 #, c-format msgid "fts init: could not create variable %s" msgstr "fts init: kunde inte skapa variabeln %s" -#: extension/filefuncs.c:460 +#: extension/filefuncs.c:554 +msgid "fts is not supported on this system" +msgstr "fts stödjs inte pÃ¥ detta system" + +#: extension/filefuncs.c:573 msgid "fill_stat_element: could not create array" msgstr "fill_stat_element: kunde inte skapa en vektor" -#: extension/filefuncs.c:469 +#: extension/filefuncs.c:582 msgid "fill_stat_element: could not set element" msgstr "fill_stat_element: kunde inte sätta ett element" -#: extension/filefuncs.c:484 +#: extension/filefuncs.c:597 msgid "fill_path_element: could not set element" msgstr "fill_path_element: kunde inte sätta ett element" -#: extension/filefuncs.c:500 +#: extension/filefuncs.c:613 msgid "fill_error_element: could not set element" msgstr "fill_error_element: kunde inte sätta ett element" -#: extension/filefuncs.c:547 extension/filefuncs.c:594 +#: extension/filefuncs.c:660 extension/filefuncs.c:707 msgid "fts-process: could not create array" msgstr "fts-process: kunde inte skapa en vektor" -#: extension/filefuncs.c:557 extension/filefuncs.c:604 -#: extension/filefuncs.c:622 +#: extension/filefuncs.c:670 extension/filefuncs.c:717 +#: extension/filefuncs.c:735 msgid "fts-process: could not set element" msgstr "fts-process: kunde inte sätta ett element" -#: extension/filefuncs.c:671 +#: extension/filefuncs.c:784 msgid "fts: called with incorrect number of arguments, expecting 3" msgstr "fts: anropad med felaktigt antal argument, förväntade 3" -#: extension/filefuncs.c:674 +#: extension/filefuncs.c:787 msgid "fts: bad first parameter" msgstr "fts: felaktig första parameter" -#: extension/filefuncs.c:680 +#: extension/filefuncs.c:793 msgid "fts: bad second parameter" msgstr "fts: felaktig andra parameter" -#: extension/filefuncs.c:686 +#: extension/filefuncs.c:799 msgid "fts: bad third parameter" msgstr "fts: felaktig tredje parameter" -#: extension/filefuncs.c:693 +#: extension/filefuncs.c:806 msgid "fts: could not flatten array\n" msgstr "fts: kunde inte platta till en vektor\n" -#: extension/filefuncs.c:711 +#: extension/filefuncs.c:824 msgid "fts: ignoring sneaky FTS_NOSTAT flag. nyah, nyah, nyah." msgstr "fts: ignorerar lömsk FTS_NOSTAT-flagga, nä, nä, nä." -#: extension/filefuncs.c:728 +#: extension/filefuncs.c:841 msgid "fts: clear_array() failed\n" msgstr "fts: clear_array() misslyckades\n" -#: extension/fnmatch.c:98 +#: extension/fnmatch.c:112 msgid "fnmatch: called with less than three arguments" msgstr "fnmatch: anropad färre an tre argument" -#: extension/fnmatch.c:101 +#: extension/fnmatch.c:115 msgid "fnmatch: called with more than three arguments" msgstr "fnmatch: anropad med mer än tre argument" -#: extension/fnmatch.c:104 +#: extension/fnmatch.c:118 msgid "fnmatch: could not get first argument" msgstr "fnmatch: kunde inte hämta första argumentet" -#: extension/fnmatch.c:109 +#: extension/fnmatch.c:123 msgid "fnmatch: could not get second argument" msgstr "fnmatch: kunde inte hämta andra argumentet" -#: extension/fnmatch.c:114 +#: extension/fnmatch.c:128 msgid "fnmatch: could not get third argument" msgstr "fnmatch: kunde inte hämta ett tredje argument" -#: extension/fnmatch.c:127 +#: extension/fnmatch.c:141 msgid "fnmatch is not implemented on this system\n" msgstr "fnmatch är inte implementerat pÃ¥ detta system\n" -#: extension/fnmatch.c:159 +#: extension/fnmatch.c:173 msgid "fnmatch init: could not add FNM_NOMATCH variable" msgstr "fnmatch init: kunde inte lägga till en FNM_NOMATCH-variabel" -#: extension/fnmatch.c:169 +#: extension/fnmatch.c:183 #, c-format msgid "fnmatch init: could not set array element %s" msgstr "fnmatch init: kunde inte sätta vektorelement %s" -#: extension/fnmatch.c:179 +#: extension/fnmatch.c:193 msgid "fnmatch init: could not install FNM array" msgstr "fnmatch init: kunde inte installera en FNM-vektor" @@ -2201,89 +2146,88 @@ msgstr "wait: anropad utan argument" msgid "wait: called with too many arguments" msgstr "wait: anropad med för mÃ¥nga argument" -#: extension/inplace.c:110 +#: extension/inplace.c:130 msgid "inplace_begin: in-place editing already active" msgstr "inplace_begin: redigering pÃ¥ plats är redan aktivt" -#: extension/inplace.c:113 extension/inplace.c:187 +#: extension/inplace.c:133 extension/inplace.c:207 #, 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" -#: extension/inplace.c:116 +#: extension/inplace.c:136 msgid "inplace_begin: cannot retrieve 1st argument as a string filename" msgstr "inplace_begin: kan inte hämta 1:a argumentet som en filnamnssträng" -#: extension/inplace.c:124 +#: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" -msgstr "" -"inplace_begin: avaktiverar redigering pÃ¥ plats för ogiltigt FILNAMN â€%sâ€" +msgstr "inplace_begin: avaktiverar redigering pÃ¥ plats för ogiltigt FILNAMN â€%sâ€" -#: extension/inplace.c:131 +#: extension/inplace.c:151 #, c-format msgid "inplace_begin: Cannot stat `%s' (%s)" msgstr "inplace_begin: kan inte ta status pÃ¥ â€%s†(%s)" -#: extension/inplace.c:138 +#: extension/inplace.c:158 #, c-format msgid "inplace_begin: `%s' is not a regular file" msgstr "inplace_begin: â€%s†är inte en vanlig fil" -#: extension/inplace.c:149 +#: extension/inplace.c:169 #, c-format msgid "inplace_begin: mkstemp(`%s') failed (%s)" msgstr "inplace_begin: mkstemp(â€%sâ€) misslyckades (%s)" -#: extension/inplace.c:158 +#: extension/inplace.c:178 #, c-format msgid "inplace_begin: chmod failed (%s)" msgstr "inplace_begin: chmod misslyckades (%s)" -#: extension/inplace.c:165 +#: extension/inplace.c:185 #, c-format msgid "inplace_begin: dup(stdout) failed (%s)" msgstr "inplace_begin: dup(standard ut) misslyckades (%s)" -#: extension/inplace.c:168 +#: extension/inplace.c:188 #, c-format msgid "inplace_begin: dup2(%d, stdout) failed (%s)" msgstr "inplace_begin: dup2(%d, standard ut) misslyckades (%s)" -#: extension/inplace.c:171 +#: extension/inplace.c:191 #, c-format msgid "inplace_begin: close(%d) failed (%s)" msgstr "inplace_begin: close(%d) misslyckades (%s)" -#: extension/inplace.c:190 +#: extension/inplace.c:210 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:197 +#: extension/inplace.c:217 msgid "inplace_end: in-place editing not active" msgstr "inplace_end: redigering pÃ¥ plats är inte aktivt" -#: extension/inplace.c:203 +#: extension/inplace.c:223 #, c-format msgid "inplace_end: dup2(%d, stdout) failed (%s)" msgstr "inplace_end: dup2(%d, standard ut) misslyckades (%s)" -#: extension/inplace.c:206 +#: extension/inplace.c:226 #, c-format msgid "inplace_end: close(%d) failed (%s)" msgstr "inplace_end: close(%d) misslyckades (%s)" -#: extension/inplace.c:210 +#: extension/inplace.c:230 #, c-format msgid "inplace_end: fsetpos(stdout) failed (%s)" msgstr "inplace_end: fsetpos(standard ut) misslyckades (%s)" -#: extension/inplace.c:223 +#: extension/inplace.c:243 #, c-format msgid "inplace_end: link(`%s', `%s') failed (%s)" msgstr "inplace_end: link(â€%sâ€, â€%sâ€) misslyckades (%s)" -#: extension/inplace.c:229 +#: extension/inplace.c:253 #, c-format msgid "inplace_end: rename(`%s', `%s') failed (%s)" msgstr "inplace_end: rename(â€%sâ€, â€%sâ€) misslyckades (%s)" @@ -2312,7 +2256,7 @@ msgstr "chr: anropad utan argument" msgid "chr: called with inappropriate argument(s)" msgstr "chr: anropad med felaktiga argument" -#: extension/readdir.c:203 +#: extension/readdir.c:277 #, c-format msgid "dir_take_control_of: opendir/fdopendir failed: %s" msgstr "dir_take_control_of: opendir/fdopendir misslyckades: %s" @@ -2325,162 +2269,152 @@ msgstr "readfile: anropad med för mÃ¥nga argument" msgid "readfile: called with no arguments" msgstr "readfile: anropad utan argument" -#: extension/rwarray.c:120 +#: extension/rwarray.c:124 msgid "writea: called with too many arguments" msgstr "writea: anropad med för mÃ¥nga argument" -#: extension/rwarray.c:127 +#: extension/rwarray.c:131 #, 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:133 +#: extension/rwarray.c:137 #, 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:180 +#: extension/rwarray.c:184 #, c-format msgid "write_array: could not flatten array\n" msgstr "write_array: kunde inte platta till vektor\n" -#: extension/rwarray.c:194 +#: extension/rwarray.c:198 #, 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:276 +#: extension/rwarray.c:280 msgid "reada: called with too many arguments" msgstr "reada: anropad med för mÃ¥nga argument" -#: extension/rwarray.c:283 +#: extension/rwarray.c:287 #, 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:289 +#: extension/rwarray.c:293 #, 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:333 +#: extension/rwarray.c:337 #, c-format msgid "do_reada: clear_array failed\n" msgstr "do_reada: clear_array misslyckades\n" -#: extension/rwarray.c:370 +#: extension/rwarray.c:374 #, c-format msgid "read_array: set_array_element failed\n" msgstr "read_array: set_array_element misslyckades\n" -#: extension/time.c:81 +#: extension/time.c:106 msgid "gettimeofday: ignoring arguments" msgstr "gettimeofday: ignorerar argumenten" -#: extension/time.c:112 +#: extension/time.c:137 msgid "gettimeofday: not supported on this platform" msgstr "gettimeofday: stödjs inte pÃ¥ denna plattform" -#: extension/time.c:133 +#: extension/time.c:158 msgid "sleep: called with too many arguments" msgstr "sleep: anropad med för mÃ¥nga argument" -#: extension/time.c:136 +#: extension/time.c:161 msgid "sleep: missing required numeric argument" msgstr "sleep: nödvändigt numeriskt argument saknas" -#: extension/time.c:142 +#: extension/time.c:167 msgid "sleep: argument is negative" msgstr "sleep: argumentet är negativt" -#: extension/time.c:176 +#: extension/time.c:201 msgid "sleep: not supported on this platform" msgstr "sleep: stödjs inte pÃ¥ denna plattform" -#: field.c:339 +#: field.c:345 msgid "NF set to negative value" msgstr "NF satt till ett negativt värde" -#: field.c:964 field.c:971 field.c:975 +#: field.c:971 field.c:978 field.c:982 msgid "split: fourth argument is a gawk extension" msgstr "split: fjärde argumentet är en gawk-utökning" -#: field.c:968 +#: field.c:975 msgid "split: fourth argument is not an array" msgstr "split: fjärde argumentet är inte en vektor" -#: field.c:982 +#: field.c:989 msgid "split: second argument is not an array" msgstr "split: andra argumentet är inte en vektor" -#: field.c:986 +#: field.c:993 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" +msgstr "split: det gÃ¥r inte att använda samma vektor som andra och fjärde argument" -#: field.c:991 +#: field.c:998 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" +msgstr "split: det gÃ¥r inte att använda en delvektor av andra argumentet som fjärde argument" -#: field.c:994 +#: field.c:1001 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" +msgstr "split: det gÃ¥r inte att använda en delvektor av fjärde argumentet som andra argument" -#: field.c:1023 +#: field.c:1032 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:1063 +#: field.c:1072 msgid "patsplit: fourth argument is not an array" msgstr "patsplit: fjärde argumentet är inte en vektor" -#: field.c:1068 +#: field.c:1077 msgid "patsplit: second argument is not an array" msgstr "patsplit: andra argumentet är inte en vektor" -#: field.c:1074 +#: field.c:1083 msgid "patsplit: third argument must be non-null" msgstr "patsplit: tredje argumentet fÃ¥r inte vara tomt" -#: field.c:1078 +#: field.c:1087 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" +msgstr "patsplit: det gÃ¥r inte att använda samma vektor som andra och fjärde argument" -#: field.c:1083 +#: field.c:1092 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" +msgstr "patsplit: det gÃ¥r inte att använda en delvektor av andra argumentet som fjärde argument" -#: field.c:1086 +#: field.c:1095 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" +msgstr "patsplit: det gÃ¥r inte att använda en delvektor av fjärde argumentet som andra argument" -#: field.c:1124 +#: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" msgstr "\"FIELDWIDTHS\" är en gawk-utökning" -#: field.c:1188 +#: field.c:1197 #, c-format msgid "invalid FIELDWIDTHS value, near `%s'" msgstr "ogiltigt FIELDWITHS-värde i närheten av \"%s\"" -#: field.c:1261 +#: field.c:1270 msgid "null string for `FS' is a gawk extension" msgstr "tom sträng som \"FS\" är en gawk-utökning" -#: field.c:1265 +#: field.c:1274 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:1384 +#: field.c:1393 msgid "`FPAT' is a gawk extension" msgstr "\"FPAT\" är en gawk-utökning" @@ -2504,582 +2438,565 @@ msgstr "remove_element: fick en null-vektor" msgid "remove_element: received null subscript" msgstr "remove_element: mottog null-index" -#: gawkapi.c:943 +#: gawkapi.c:948 #, c-format msgid "api_flatten_array: could not convert index %d\n" msgstr "api_flatten_array: kunde inte konvertera index %d\n" -#: gawkapi.c:948 +#: gawkapi.c:953 #, c-format msgid "api_flatten_array: could not convert value %d\n" msgstr "api_flatten_array: kunde inte konvertera värdet %d\n" -#: getopt.c:603 getopt.c:632 +#: getopt.c:604 getopt.c:633 #, c-format msgid "%s: option '%s' is ambiguous; possibilities:" msgstr "%s: flaggan â€%s†är tvetydig; möjligheter:" -#: getopt.c:678 getopt.c:682 +#: getopt.c:679 getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: flaggan \"--%s\" tillÃ¥ter inte nÃ¥got argument\n" -#: getopt.c:691 getopt.c:696 +#: getopt.c:692 getopt.c:697 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: flaggan \"%c%s\" tillÃ¥ter inte nÃ¥got argument\n" -#: getopt.c:739 getopt.c:758 +#: getopt.c:740 getopt.c:759 #, c-format msgid "%s: option '--%s' requires an argument\n" msgstr "%s: flaggan \"%s\" kräver ett argument\n" -#: getopt.c:796 getopt.c:799 +#: getopt.c:797 getopt.c:800 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: okänd flagga \"--%s\"\n" -#: getopt.c:807 getopt.c:810 +#: getopt.c:808 getopt.c:811 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: okänd flagga \"%c%s\"\n" -#: getopt.c:859 getopt.c:862 +#: getopt.c:860 getopt.c:863 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: ogiltig flagga -- \"%c\"\n" -#: getopt.c:915 getopt.c:932 getopt.c:1142 getopt.c:1160 +#: getopt.c:916 getopt.c:933 getopt.c:1143 getopt.c:1161 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: flaggan kräver ett argument -- \"%c\"\n" -#: getopt.c:988 getopt.c:1004 +#: getopt.c:989 getopt.c:1005 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: flaggan \"-W %s\" är tvetydig\n" -#: getopt.c:1028 getopt.c:1046 +#: getopt.c:1029 getopt.c:1047 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: flaggan \"-W %s\" tillÃ¥ter inte nÃ¥got argument\n" -#: getopt.c:1067 getopt.c:1085 +#: getopt.c:1068 getopt.c:1086 #, c-format msgid "%s: option '-W %s' requires an argument\n" msgstr "%s: flaggan \"-W %s\" kräver ett argument\n" -#: io.c:347 +#: io.c:392 #, c-format msgid "command line argument `%s' is a directory: skipped" msgstr "kommandoradsargumentet \"%s\" är en katalog: hoppas över" -#: io.c:350 io.c:463 +#: io.c:395 io.c:513 #, c-format msgid "cannot open file `%s' for reading (%s)" msgstr "kan inte öppna filen \"%s\" för läsning (%s)" -#: io.c:590 +#: io.c:640 #, c-format msgid "close of fd %d (`%s') failed (%s)" msgstr "stängning av fd %d (\"%s\") misslyckades (%s)" -#: io.c:666 +#: io.c:716 msgid "redirection not allowed in sandbox mode" msgstr "omdirigering är inte tillÃ¥ten i sandlÃ¥deläge" -#: io.c:700 +#: io.c:750 #, c-format msgid "expression in `%s' redirection only has numeric value" msgstr "uttrycket i \"%s\"-omdirigering har bara numeriskt värde" -#: io.c:706 +#: io.c:756 #, 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:711 +#: io.c:761 #, 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" +msgstr "filnamnet \"%s\" för \"%s\"-omdirigering kan vara resultatet av ett logiskt uttryck" -#: io.c:754 +#: io.c:809 #, c-format msgid "unnecessary mixing of `>' and `>>' for file `%.*s'" msgstr "onödig blandning av \">\" och \">>\" för filen \"%.*s\"" -#: io.c:808 +#: io.c:863 #, c-format msgid "can't open pipe `%s' for output (%s)" msgstr "kan inte öppna röret \"%s\" för utmatning (%s)" -#: io.c:818 +#: io.c:873 #, c-format msgid "can't open pipe `%s' for input (%s)" msgstr "kan inte öppna röret \"%s\" för inmatning (%s)" -#: io.c:849 +#: io.c:904 #, 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:928 +#: io.c:986 #, c-format msgid "can't redirect from `%s' (%s)" msgstr "kan inte dirigera om frÃ¥n \"%s\" (%s)" -#: io.c:931 +#: io.c:989 #, c-format msgid "can't redirect to `%s' (%s)" msgstr "kan inte dirigera om till \"%s\" (%s)" -#: io.c:982 -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:1040 +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:998 +#: io.c:1056 #, c-format msgid "close of `%s' failed (%s)." msgstr "stängning av \"%s\" misslyckades (%s)" -#: io.c:1006 +#: io.c:1064 msgid "too many pipes or input files open" msgstr "för mÃ¥nga rör eller indatafiler öppna" -#: io.c:1028 +#: io.c:1086 msgid "close: second argument must be `to' or `from'" msgstr "close: andra argumentet mÃ¥ste vara \"to\" eller \"from\"" -#: io.c:1045 +#: io.c:1103 #, 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:1050 +#: io.c:1108 msgid "close of redirection that was never opened" msgstr "stängning av omdirigering som aldrig öppnades" -#: io.c:1147 +#: io.c:1205 #, c-format msgid "close: redirection `%s' not opened with `|&', second argument ignored" -msgstr "" -"close: omdirigeringen \"%s\" öppnades inte med \"|&\", andra argumentet " -"ignorerat" +msgstr "close: omdirigeringen \"%s\" öppnades inte med \"|&\", andra argumentet ignorerat" -#: io.c:1164 +#: io.c:1222 #, 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:1167 +#: io.c:1225 #, c-format msgid "failure status (%d) on file close of `%s' (%s)" msgstr "felstatus (%d) frÃ¥n filstängning av \"%s\" (%s)" -#: io.c:1187 +#: io.c:1245 #, c-format msgid "no explicit close of socket `%s' provided" msgstr "ingen explicit stängning av uttaget \"%s\" tillhandahÃ¥llen" -#: io.c:1190 +#: io.c:1248 #, c-format msgid "no explicit close of co-process `%s' provided" msgstr "ingen explicit stängning av koprocessen \"%s\" tillhandahÃ¥llen" -#: io.c:1193 +#: io.c:1251 #, c-format msgid "no explicit close of pipe `%s' provided" msgstr "ingen explicit stängning av röret \"%s\" tillhandahÃ¥llen" -#: io.c:1196 +#: io.c:1254 #, c-format msgid "no explicit close of file `%s' provided" msgstr "ingen explicit stängning av filen \"%s\" tillhandahÃ¥llen" -#: io.c:1224 io.c:1279 main.c:842 main.c:879 +#: io.c:1284 io.c:1342 main.c:864 main.c:906 #, c-format msgid "error writing standard output (%s)" msgstr "fel vid skrivning till standard ut (%s)" -#: io.c:1228 io.c:1284 +#: io.c:1289 io.c:1348 main.c:866 #, c-format msgid "error writing standard error (%s)" msgstr "fel vid skrivning till standard fel (%s)" -#: io.c:1236 +#: io.c:1297 #, c-format msgid "pipe flush of `%s' failed (%s)." msgstr "rörspolning av \"%s\" misslyckades (%s)" -#: io.c:1239 +#: io.c:1300 #, c-format msgid "co-process flush of pipe to `%s' failed (%s)." msgstr "koprocesspolning av röret till \"%s\" misslyckades (%s)" -#: io.c:1242 +#: io.c:1303 #, c-format msgid "file flush of `%s' failed (%s)." msgstr "filspolning av \"%s\" misslyckades (%s)" -#: io.c:1356 +#: io.c:1420 #, c-format msgid "local port %s invalid in `/inet'" msgstr "lokal port %s ogiltig i \"/inet\"" -#: io.c:1374 +#: io.c:1438 #, 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:1526 +#: 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\"" +msgstr "inget (känt) protokoll tillhandahÃ¥llet i det speciella filnamnet \"%s\"" -#: io.c:1540 +#: io.c:1604 #, c-format msgid "special file name `%s' is incomplete" msgstr "speciellt filnamn \"%s\" är ofullständigt" -#: io.c:1557 +#: io.c:1621 msgid "must supply a remote hostname to `/inet'" msgstr "mÃ¥ste tillhandahÃ¥lla ett fjärrdatornamn till \"/inet\"" -#: io.c:1575 +#: io.c:1639 msgid "must supply a remote port to `/inet'" msgstr "mÃ¥ste tillhandahÃ¥lla en fjärrport till \"/inet\"" -#: io.c:1621 +#: io.c:1685 msgid "TCP/IP communications are not supported" msgstr "TCP/IP-kommunikation stöds inte" -#: io.c:1796 +#: io.c:1867 #, c-format msgid "could not open `%s', mode `%s'" msgstr "kunde inte öppna \"%s\", läge \"%s\"" -#: io.c:1846 +#: io.c:1917 #, c-format msgid "close of master pty failed (%s)" msgstr "stängning av huvudpty misslyckades (%s)" -#: io.c:1848 io.c:2024 io.c:2194 +#: io.c:1919 io.c:2105 io.c:2305 #, c-format msgid "close of stdout in child failed (%s)" msgstr "stängning av standard ut i barnet misslyckades (%s)" -#: io.c:1851 +#: io.c:1922 #, 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:1853 io.c:2029 +#: io.c:1924 io.c:2110 #, c-format msgid "close of stdin in child failed (%s)" msgstr "stängning av standard in i barnet misslyckades (%s)" -#: io.c:1856 +#: io.c:1927 #, 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:1858 io.c:1879 +#: io.c:1929 io.c:1951 #, c-format msgid "close of slave pty failed (%s)" msgstr "stängning av slavpty misslyckades (%s)" -#: io.c:1965 io.c:2027 io.c:2171 io.c:2197 +#: io.c:2040 io.c:2108 io.c:2276 io.c:2308 #, 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:1972 io.c:2032 +#: io.c:2047 io.c:2113 #, 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:1992 io.c:2187 +#: io.c:2073 io.c:2298 msgid "restoring stdout in parent process failed\n" msgstr "Ã¥terställande av standard ut i förälderprocessen misslyckades\n" -#: io.c:2000 +#: io.c:2081 msgid "restoring stdin in parent process failed\n" msgstr "Ã¥terställande av standard in i förälderprocessen misslyckades\n" -#: io.c:2035 io.c:2199 io.c:2213 +#: io.c:2116 io.c:2310 io.c:2324 #, c-format msgid "close of pipe failed (%s)" msgstr "stängning av röret misslyckades (%s)" -#: io.c:2089 +#: io.c:2174 msgid "`|&' not supported" msgstr "\"|&\" stöds inte" -#: io.c:2156 +#: io.c:2261 #, c-format msgid "cannot open pipe `%s' (%s)" msgstr "kan inte öppna röret \"%s\" (%s)" -#: io.c:2207 +#: io.c:2318 #, c-format msgid "cannot create child process for `%s' (fork: %s)" msgstr "kan inte skapa barnprocess för \"%s\" (fork: %s)" -#: io.c:2667 +#: io.c:2790 msgid "register_input_parser: received NULL pointer" msgstr "register_input_parser: mottog NULL-pekare" -#: io.c:2695 +#: io.c:2818 #, 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â€" +msgstr "inmatningstolken â€%s†stÃ¥r i konflikt med tidigare installerad inmatningstolk â€%sâ€" -#: io.c:2702 +#: io.c:2825 #, c-format msgid "input parser `%s' failed to open `%s'" msgstr "inmatningstolken â€%s†misslyckades att öppna â€%sâ€" -#: io.c:2722 +#: io.c:2845 msgid "register_output_wrapper: received NULL pointer" msgstr "register_output_wrapper: mottog NULL-pekare" -#: io.c:2750 +#: io.c:2873 #, c-format -msgid "" -"output wrapper `%s' conflicts with previously installed output wrapper `%s'" -msgstr "" -"utmatningsomslag â€%s†stÃ¥r i konflikt med tidigare installerat " -"utmatningsomslag â€%sâ€" +msgid "output wrapper `%s' conflicts with previously installed output wrapper `%s'" +msgstr "utmatningsomslag â€%s†stÃ¥r i konflikt med tidigare installerat utmatningsomslag â€%sâ€" -#: io.c:2757 +#: io.c:2880 #, c-format msgid "output wrapper `%s' failed to open `%s'" msgstr "utmatningsomslag â€%s†misslyckades att öpnna â€%sâ€" -#: io.c:2778 +#: io.c:2901 msgid "register_output_processor: received NULL pointer" msgstr "register_output_processor: mottog NULL-pekare" -#: io.c:2807 +#: io.c:2930 #, c-format -msgid "" -"two-way processor `%s' conflicts with previously installed two-way processor " -"`%s'" -msgstr "" -"tvÃ¥vägsprocessorn â€%s†stÃ¥r i konflikt med tidigare installerad " -"tvÃ¥vägsprocessor â€%sâ€" +msgid "two-way processor `%s' conflicts with previously installed two-way processor `%s'" +msgstr "tvÃ¥vägsprocessorn â€%s†stÃ¥r i konflikt med tidigare installerad tvÃ¥vägsprocessor â€%sâ€" -#: io.c:2816 +#: io.c:2939 #, c-format msgid "two way processor `%s' failed to open `%s'" msgstr "tvÃ¥vägsprocessorn â€%s†misslyckades att öppna â€%sâ€" -#: io.c:2923 +#: io.c:3064 #, c-format msgid "data file `%s' is empty" msgstr "datafilen \"%s\" är tom" -#: io.c:2965 io.c:2973 +#: io.c:3106 io.c:3114 msgid "could not allocate more input memory" msgstr "kunde inte allokera mer indataminne" -#: io.c:3539 +#: io.c:3682 msgid "multicharacter value of `RS' is a gawk extension" msgstr "flerteckensvärdet av \"RS\" är en gawk-utökning" -#: io.c:3628 +#: io.c:3771 msgid "IPv6 communication is not supported" msgstr "IPv6-kommunikation stöds inte" -#: main.c:388 +#: main.c:405 msgid "empty argument to `-e/--source' ignored" msgstr "tomt argument till \"-e/--source\" ignorerat" -#: main.c:478 +#: main.c:495 #, c-format msgid "%s: option `-W %s' unrecognized, ignored\n" msgstr "%s: flaggan \"-W %s\" okänd, ignorerad\n" -#: main.c:524 +#: main.c:541 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: flaggan kräver ett argument -- %c\n" -#: main.c:545 +#: main.c:562 msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'" msgstr "miljövariabeln \"POSIXLY_CORRECT\" satt: slÃ¥r pÃ¥ \"--posix\"" -#: main.c:551 +#: main.c:568 msgid "`--posix' overrides `--traditional'" msgstr "\"--posix\" Ã¥sidosätter \"--traditional\"" -#: main.c:562 +#: main.c:579 msgid "`--posix'/`--traditional' overrides `--non-decimal-data'" msgstr "\"--posix\"/\"--traditional\" Ã¥sidosätter \"--non-decimal-data\"" -#: main.c:566 +#: main.c:583 #, 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:571 +#: main.c:588 msgid "`--posix' overrides `--characters-as-bytes'" msgstr "â€--posix†åsidosätter â€--character-as-bytesâ€" -#: main.c:630 +#: main.c:647 #, 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:633 +#: main.c:650 #, 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:635 +#: main.c:652 #, 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:693 +#: main.c:710 msgid "no program text at all!" msgstr "ingen programtext alls!" -#: main.c:779 +#: main.c:799 #, 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" +msgstr "Användning: %s [POSIX- eller GNU-stilsflaggor] -f progfil [--] fil ...\n" -#: main.c:781 +#: main.c:801 #, 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:786 +#: main.c:806 msgid "POSIX options:\t\tGNU long options: (standard)\n" msgstr "POSIX-flaggor:\t\tGNU lÃ¥nga flaggor: (standard)\n" -#: main.c:787 +#: main.c:807 msgid "\t-f progfile\t\t--file=progfile\n" msgstr "\t-f progfil\t\t--file=progfil\n" -#: main.c:788 +#: main.c:808 msgid "\t-F fs\t\t\t--field-separator=fs\n" msgstr "\t-F fs\t\t\t--field-separator=fs\n" -#: main.c:789 +#: main.c:809 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:790 +#: main.c:810 msgid "Short options:\t\tGNU long options: (extensions)\n" msgstr "Korta flaggor:\t\tGNU lÃ¥nga flaggor: (utökningar)\n" -#: main.c:791 +#: main.c:811 msgid "\t-b\t\t\t--characters-as-bytes\n" msgstr "\t-b\t\t\t--characters-as-bytes\n" -#: main.c:792 +#: main.c:812 msgid "\t-c\t\t\t--traditional\n" msgstr "\t-c\t\t\t--traditional\n" -#: main.c:793 +#: main.c:813 msgid "\t-C\t\t\t--copyright\n" msgstr "\t-C\t\t\t--copyright\n" -#: main.c:794 +#: main.c:814 msgid "\t-d[file]\t\t--dump-variables[=file]\n" msgstr "\t-d[fil]\t\t\t--dump-variables[=fil]\n" -#: main.c:795 +#: main.c:815 msgid "\t-D[file]\t\t--debug[=file]\n" msgstr "\t-D[fil]\t\t\t--debug[=fil]\n" -#: main.c:796 +#: main.c:816 msgid "\t-e 'program-text'\t--source='program-text'\n" msgstr "\t-e 'programtext'\t--source='programtext'\n" -#: main.c:797 +#: main.c:817 msgid "\t-E file\t\t\t--exec=file\n" msgstr "\t-E fil\t\t\t--exec=fil\n" -#: main.c:798 +#: main.c:818 msgid "\t-g\t\t\t--gen-pot\n" msgstr "\t-g\t\t\t--gen-pot\n" -#: main.c:799 +#: main.c:819 msgid "\t-h\t\t\t--help\n" msgstr "\t-h\t\t\t--help\n" -#: main.c:800 +#: main.c:820 msgid "\t-i includefile\t\t--include=includefile\n" msgstr "\t-i inkluderingsfil\t--include=inkluderingsfil\n" -#: main.c:801 +#: main.c:821 msgid "\t-l library\t\t--load=library\n" msgstr "\t-l bibliotek\t\t--load=bibliotek\n" -#: main.c:802 +#: main.c:822 msgid "\t-L [fatal]\t\t--lint[=fatal]\n" msgstr "\t-L [fatal]\t\t--lint[=fatal]\n" -#: main.c:803 +#: 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:804 +#: main.c:824 msgid "\t-M\t\t\t--bignum\n" msgstr "\t-M\t\t\t--bignum\n" -#: main.c:805 +#: main.c:825 msgid "\t-N\t\t\t--use-lc-numeric\n" msgstr "\t-N\t\t\t--use-lc-numeric\n" -#: main.c:806 +#: main.c:826 msgid "\t-o[file]\t\t--pretty-print[=file]\n" msgstr "\t-o[fil]\t\t\t--pretty-print[=fil]\n" -#: main.c:807 +#: main.c:827 msgid "\t-O\t\t\t--optimize\n" msgstr "\t-O\t\t\t--optimize\n" -#: main.c:808 +#: main.c:828 msgid "\t-p[file]\t\t--profile[=file]\n" msgstr "\t-p[fil]\t\t\t--profile[=fil]\n" -#: main.c:809 +#: main.c:829 msgid "\t-P\t\t\t--posix\n" msgstr "\t-P\t\t\t--posix\n" -#: main.c:810 +#: main.c:830 msgid "\t-r\t\t\t--re-interval\n" msgstr "\t-r\t\t\t--re-interval\n" -#: main.c:811 +#: main.c:831 msgid "\t-S\t\t\t--sandbox\n" msgstr "\t-S\t\t\t--sandbox\n" -#: main.c:812 +#: main.c:832 msgid "\t-t\t\t\t--lint-old\n" msgstr "\t-t\t\t\t--lint-old\n" -#: main.c:813 +#: main.c:833 msgid "\t-V\t\t\t--version\n" msgstr "\t-V\t\t\t--version\n" -#: main.c:815 +#: main.c:835 msgid "\t-W nostalgia\t\t--nostalgia\n" msgstr "\t-W nostalgia\t\t--nostalgia\n" -#: main.c:818 +#: main.c:838 msgid "\t-Y\t\t--parsedebug\n" msgstr "\t-Y\t\t--parsedebug\n" @@ -3088,7 +3005,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:827 +#: main.c:847 msgid "" "\n" "To report bugs, see node `Bugs' in `gawk.info', which is\n" @@ -3102,7 +3019,7 @@ msgstr "" "Rapportera synpunkter pÃ¥ översättningen till .\n" "\n" -#: main.c:831 +#: main.c:851 msgid "" "gawk is a pattern scanning and processing language.\n" "By default it reads standard input and writes standard output.\n" @@ -3112,7 +3029,7 @@ msgstr "" "Normalt läser det frÃ¥n standard in och skriver till standard ut.\n" "\n" -#: main.c:835 +#: main.c:855 msgid "" "Examples:\n" "\tgawk '{ sum += $1 }; END { print sum }' file\n" @@ -3122,7 +3039,7 @@ msgstr "" "\tgawk '{ sum += $1 }; END { print sum }' fil\n" "\tgawk -F: '{ print $1 }' /etc/passwd\n" -#: main.c:855 +#: main.c:880 #, c-format msgid "" "Copyright (C) 1989, 1991-%d Free Software Foundation.\n" @@ -3141,7 +3058,7 @@ msgstr "" "nÃ¥gon senare version.\n" "\n" -#: main.c:863 +#: main.c:888 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" @@ -3155,7 +3072,7 @@ msgstr "" "General Public License för ytterligare information.\n" "\n" -#: main.c:869 +#: main.c:894 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" @@ -3163,64 +3080,64 @@ 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/liceences/.\n" -#: main.c:904 +#: main.c:931 msgid "-Ft does not set FS to tab in POSIX awk" msgstr "-Ft sätter inte FS till tab i POSIX-awk" -#: main.c:1181 +#: main.c:1208 #, c-format msgid "unknown value for field spec: %d\n" msgstr "okänt värde till fältspecifikation: %d\n" -#: main.c:1279 +#: main.c:1306 #, 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:1305 +#: main.c:1332 #, c-format msgid "`%s' is not a legal variable name" msgstr "\"%s\" är inte ett giltigt variabelnamn" -#: main.c:1308 +#: main.c:1335 #, 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:1312 +#: main.c:1339 #, c-format msgid "cannot use gawk builtin `%s' as variable name" msgstr "kan inte använda gawks inbyggda \"%s\" som ett funktionsnamn" -#: main.c:1317 +#: main.c:1344 #, c-format msgid "cannot use function `%s' as variable name" msgstr "kan inte använda funktionen \"%s\" som variabelnamn" -#: main.c:1370 +#: main.c:1397 msgid "floating point exception" msgstr "flyttalsundantag" -#: main.c:1377 +#: main.c:1404 msgid "fatal error: internal error" msgstr "ödesdigert fel: internt fel" -#: main.c:1392 +#: main.c:1419 msgid "fatal error: internal error: segfault" msgstr "ödesdigert fel: internt fel: segmenteringsfel" -#: main.c:1404 +#: main.c:1431 msgid "fatal error: internal error: stack overflow" msgstr "ödesdigert fel: internt fel: stackspill" -#: main.c:1463 +#: main.c:1490 #, c-format msgid "no pre-opened fd %d" msgstr "ingen föröppnad fd %d" -#: main.c:1470 +#: main.c:1497 #, c-format msgid "could not pre-open /dev/null for fd %d" msgstr "kunde inte föröppna /dev/null för fd %d" @@ -3275,7 +3192,7 @@ msgstr "%s: argument nr. %d flyttalsvärde %Rg kommer huggas av" msgid "%s: argument #%d negative value %Zd will give strange results" msgstr "%s: argument nr. %d negativa värde %Zd kommer ge konstiga resultat" -#: msg.c:61 +#: msg.c:68 #, c-format msgid "cmd. line:" msgstr "kommandorad:" @@ -3299,12 +3216,8 @@ msgstr "inga hexadecimala siffror i \"\\x\"-kontrollsekvenser" #: node.c:579 #, c-format -msgid "" -"hex escape \\x%.*s of %d characters probably not interpreted the way you " -"expect" -msgstr "" -"hexkod \\x%.*s med %d tecken tolkas förmodligen inte pÃ¥ det sätt du " -"förväntar dig" +msgid "hex escape \\x%.*s of %d characters probably not interpreted the way you expect" +msgstr "hexkod \\x%.*s med %d tecken tolkas förmodligen inte pÃ¥ det sätt du förväntar dig" #: node.c:594 #, c-format @@ -3312,12 +3225,8 @@ msgid "escape sequence `\\%c' treated as plain `%c'" msgstr "kontrollsekvensen \"\\%c\" behandlad som bara \"%c\"" #: node.c:739 -msgid "" -"Invalid multibyte data detected. There may be a mismatch between your data " -"and your locale." -msgstr "" -"Ogiltig multibytedata upptäckt. Dina data och din lokal stämmer kanske inte " -"överens." +msgid "Invalid multibyte data detected. There may be a mismatch between your data and your locale." +msgstr "Ogiltig multibytedata upptäckt. Dina data och din lokal stämmer kanske inte överens." #: posix/gawkmisc.c:177 #, c-format @@ -3329,16 +3238,16 @@ msgstr "%s %s \"%s\": kunde inte hämta fb-flaggor: (fcntl F_GETFD: %s)" msgid "%s %s `%s': could not set close-on-exec: (fcntl F_SETFD: %s)" msgstr "%s %s \"%s\": kunde inte sätta stäng-vid-exec (fcntl F_SETFD: %s)" -#: profile.c:70 +#: profile.c:71 #, c-format msgid "could not open `%s' for writing: %s" msgstr "kunde inte öppna \"%s\" för skrivning: %s" -#: profile.c:72 +#: profile.c:73 msgid "sending profile to standard error" msgstr "skickar profilen till standard fel" -#: profile.c:188 +#: profile.c:193 #, c-format msgid "" "\t# %s block(s)\n" @@ -3347,7 +3256,7 @@ msgstr "" "\t# %s-block\n" "\n" -#: profile.c:193 +#: profile.c:198 #, c-format msgid "" "\t# Rule(s)\n" @@ -3356,16 +3265,16 @@ msgstr "" "\t# Regel/regler\n" "\n" -#: profile.c:267 +#: profile.c:272 #, c-format msgid "internal error: %s with null vname" msgstr "internt fel: %s med null vname" -#: profile.c:530 +#: profile.c:537 msgid "internal error: builtin with null fname" msgstr "internt fel: inbyggd med tomt fname" -#: profile.c:942 +#: profile.c:949 #, c-format msgid "" "\t# Loaded extensions (-l and/or @load)\n" @@ -3374,12 +3283,12 @@ msgstr "" "\t# Laddade utvidgningar (-l och/eller @load)\n" "\n" -#: profile.c:965 +#: profile.c:972 #, c-format msgid "\t# gawk profile, created %s\n" msgstr "\t# gawkprofil, skapad %s\n" -#: profile.c:1351 +#: profile.c:1475 #, c-format msgid "" "\n" @@ -3388,21 +3297,15 @@ msgstr "" "\n" "\t# Funktioner, listade alfabetiskt\n" -#: profile.c:1389 +#: profile.c:1513 #, c-format msgid "redir2str: unknown redirection type %d" msgstr "redir2str: okänd omdirigeringstyp %d" -#: re.c:583 -#, c-format -msgid "range of the form `[%c-%c]' is locale dependent" -msgstr "intervall pÃ¥ formen \"[%c-%c]\" är lokalberoende" - -#: re.c:610 +#: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" -msgstr "" -"komponenten \"%.*s\" i reguljäruttryck skall förmodligen vara \"[%.*s]\"" +msgstr "komponenten \"%.*s\" i reguljäruttryck skall förmodligen vara \"[%.*s]\"" #: regcomp.c:131 msgid "Success" @@ -3468,6 +3371,6 @@ msgstr "Obalanserad ) eller \\)" msgid "No previous regular expression" msgstr "Inget föregÃ¥ende reguljärt uttryck" -#: symbol.c:740 +#: symbol.c:741 msgid "can not pop main context" msgstr "kan inte poppa huvudsammanhang" -- cgit v1.2.3 From 51038bda2cde5e5a5a4fa1fd54626d4cb107e7ef Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 22 Jan 2014 21:54:07 +0200 Subject: Update README.solaris. --- README_d/ChangeLog | 4 ++++ README_d/README.solaris | 23 +++-------------------- 2 files changed, 7 insertions(+), 20 deletions(-) diff --git a/README_d/ChangeLog b/README_d/ChangeLog index 7d29d3e3..a31eca7c 100644 --- a/README_d/ChangeLog +++ b/README_d/ChangeLog @@ -1,3 +1,7 @@ +2014-01-22 Arnold D. Robbins + + * README.solaris: Updated. + 2014-01-12 John E. Malmberg * README.VMS: document that the gawk.cld needs a fix. diff --git a/README_d/README.solaris b/README_d/README.solaris index 7aa44eeb..91e0c701 100644 --- a/README_d/README.solaris +++ b/README_d/README.solaris @@ -1,7 +1,8 @@ -Thu Nov 7 22:42:46 IST 2013 +Wed Jan 22 21:51:59 IST 2014 ============================ -On Solaris 11 x86 with the Sun compiler you need to use +On Solaris 10 x86, Solaris 11 x86, Solaris 10 sparc and Solaris 11 sparc, +with the Sun compiler (Solaris Studio 12.3) you need to use c99 -Xc -D_XPG6 @@ -9,23 +10,5 @@ to correctly compile gawk and the extensions. Various tests can fail if the necessary locales aren't installed. -Fri Jul 15 14:24:00 IDT 2011 -============================ -It looks like you need to use - - -Xc -D_XPG4_2 - -on Solaris 10 with the Sun C compiler when compiling gawk in order for -libsigsegv to be found correctly, and - - -Xc -D_XPG4_2 -Duint64_t=upad64_t - -on Solaris 9. - -Tue Apr 20 11:33:20 IDT 2010 -============================ -The lc_num1 test fails on Solaris 10 systems. This is a bug with Solaris, -not gawk. - Arnold Robbins arnold@skeeve.com -- cgit v1.2.3 From 7dbb03a642a1526e584b59e3fb4f18ef73acfe1a Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 23 Jan 2014 20:01:32 +0200 Subject: Add Feature History to doc. Update common extensions. --- doc/ChangeLog | 5 + doc/gawk.info | 1441 +++++++++++++++++++++++++++++++++++-------------------- doc/gawk.texi | 615 +++++++++++++++++++++++- doc/gawktexi.in | 615 +++++++++++++++++++++++- 4 files changed, 2143 insertions(+), 533 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 82cb722a..1fc81f20 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2014-01-23 Arnold D. Robbins + + * gawktexi.in (Feature History): New node. + (Common Extensions): Update features now in mawk, too. + 2014-12-14 John E. Malmberg * gawktexi.in: Add information on building VMS PCSI kit. diff --git a/doc/gawk.info b/doc/gawk.info index 88745cd7..6f88bf02 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -193,7 +193,8 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) field. * Command Line Field Separator:: Setting `FS' from the command-line. -* Full Line Fields:: Making the full line be a single field. +* Full Line Fields:: Making the full line be a single + field. * Field Splitting Summary:: Some final points and a summary table. * Constant Size:: Reading constant width data. * Splitting By Content:: Defining Fields By Content @@ -583,6 +584,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) version of `awk'. * POSIX/GNU:: The extensions in `gawk' not in POSIX `awk'. +* Feature History:: The history of the features in `gawk'. * Common Extensions:: Common Extensions Summary. * Ranges and Locales:: How locales used to affect regexp ranges. @@ -24901,6 +24903,7 @@ you can find more information. `awk'. * POSIX/GNU:: The extensions in `gawk' not in POSIX `awk'. +* Feature History:: The history of the features in `gawk'. * Common Extensions:: Common Extensions Summary. * Ranges and Locales:: How locales used to affect regexp ranges. * Contributors:: The major contributors to `gawk'. @@ -25079,7 +25082,7 @@ in his version of `awk'. available in his `awk'.  -File: gawk.info, Node: POSIX/GNU, Next: Common Extensions, Prev: BTL, Up: Language History +File: gawk.info, Node: POSIX/GNU, Next: Feature History, Prev: BTL, Up: Language History A.5 Extensions in `gawk' Not in POSIX `awk' =========================================== @@ -25236,9 +25239,391 @@ the current version of `gawk'.  -File: gawk.info, Node: Common Extensions, Next: Ranges and Locales, Prev: POSIX/GNU, Up: Language History +File: gawk.info, Node: Feature History, Next: Common Extensions, Prev: POSIX/GNU, Up: Language History + +A.6 History of `gawk' Features +============================== + +This minor node describes the features in `gawk' over and above those +in POSIX `awk', in the order they were added to `gawk'. + + Version 2.10 of `gawk' introduced the following features: + + * The `AWKPATH' environment variable for specifying a path search for + the `-f' command-line option (*note Options::). + + * The `IGNORECASE' variable and its effects (*note + Case-sensitivity::). + + * The `/dev/stdin', `/dev/stdout', `/dev/stderr' and `/dev/fd/N' + special file names (*note Special Files::). + + Version 2.13 of `gawk' introduced the following features: + + * The `FIELDWIDTHS' variable and its effects (*note Constant Size::). + + * The `systime()' and `strftime()' built-in functions for obtaining + and printing timestamps (*note Time Functions::). + + * Additional command-line options (*note Options::): + + - The `-W lint' option to provide error and portability checking + for both the source code and at runtime. + + - The `-W compat' option to turn off the GNU extensions. + + - The `-W posix' option for full POSIX compliance. + + Version 2.14 of `gawk' introduced the following feature: + + * The `next file' statement for skipping to the next data file + (*note Nextfile Statement::). + + Version 2.15 of `gawk' introduced the following features: + + * New variables (*note Built-in Variables::): + + - `ARGIND', which tracks the movement of `FILENAME' through + `ARGV'. + + - `ERRNO', which contains the system error message when + `getline' returns -1 or `close()' fails. + + * The `/dev/pid', `/dev/ppid', `/dev/pgrpid', and `/dev/user' + special file names. These have since been removed. + + * The ability to delete all of an array at once with `delete ARRAY' + (*note Delete::). + + * Command line option changes (*note Options::): + + - The ability to use GNU-style long-named options that start + with `--'. + + - The `--source' option for mixing command-line and library-file + source code. + + Version 3.0 of `gawk' introduced the following features: + + * New or changed variables: + + - `IGNORECASE' changed, now applying to string comparison as + well as regexp operations (*note Case-sensitivity::). + + - `RT', which contains the input text that matched `RS' (*note + Records::). + + * Full support for both POSIX and GNU regexps (*note Regexp::). + + * The `gensub()' function for more powerful text manipulation (*note + String Functions::). + + * The `strftime()' function acquired a default time format, allowing + it to be called with no arguments (*note Time Functions::). + + * The ability for `FS' and for the third argument to `split()' to be + null strings (*note Single Character Fields::). + + * The ability for `RS' to be a regexp (*note Records::). + + * The `next file' statement became `nextfile' (*note Nextfile + Statement::). + + * The `fflush()' function from the Bell Laboratories research + version of `awk' (*note I/O Functions::). + + * New command line options: + + - The `--lint-old' option to warn about constructs that are not + available in the original Version 7 Unix version of `awk' + (*note V7/SVR3.1::). + + - The `-m' option from the Bell Laboratories research version + of `awk' This was later removed. + + - The `--re-interval' option to provide interval expressions in + regexps (*note Regexp Operators::). + + - The `--traditional' option was added as a better name for + `--compat' (*note Options::). + + * The use of GNU Autoconf to control the configuration process + (*note Quick Installation::). + + * Amiga support. + + + Version 3.1 of `gawk' introduced the following features: + + * New variables (*note Built-in Variables::): + + - `BINMODE', for non-POSIX systems, which allows binary I/O for + input and/or output files (*note PC Using::). + + - `LINT', which dynamically controls lint warnings. + + - `PROCINFO', an array for providing process-related + information. + + - `TEXTDOMAIN', for setting an application's + internationalization text domain (*note + Internationalization::). + + * The ability to use octal and hexadecimal constants in `awk' + program source code (*note Nondecimal-numbers::). + + * The `|&' operator for two-way I/O to a coprocess (*note Two-way + I/O::). + + * The `/inet' special files for TCP/IP networking using `|&' (*note + TCP/IP Networking::). + + * The optional second argument to `close()' that allows closing one + end of a two-way pipe to a coprocess (*note Two-way I/O::). + + * The optional third argument to the `match()' function for + capturing text-matching subexpressions within a regexp (*note + String Functions::). + + * Positional specifiers in `printf' formats for making translations + easier (*note Printf Ordering::). + + * A number of new built-in functions: + + - The `asort()' and `asorti()' functions for sorting arrays + (*note Array Sorting::). + + - The `bindtextdomain()', `dcgettext()' and `dcngettext()' + functions for internationalization (*note Programmer i18n::). + + - The `extension()' function and the ability to add new + built-in functions dynamically (*note Dynamic Extensions::). + + - The `mktime()' function for creating timestamps (*note Time + Functions::). + + - The `and()', `or()', `xor()', `compl()', `lshift()', + `rshift()', and `strtonum()' functions (*note Bitwise + Functions::). + + * The support for `next file' as two words was removed completely + (*note Nextfile Statement::). + + * Additional commnd line options (*note Options::): + + - The `--dump-variables' option to print a list of all global + variables. + + - The `--exec' option, for use in CGI scripts. + + - The `--gen-po' command-line option and the use of a leading + underscore to mark strings that should be translated (*note + String Extraction::). + + - The `--non-decimal-data' option to allow non-decimal input + data (*note Nondecimal Data::). + + - The `--profile' option and `pgawk', the profiling version of + `gawk', for producing execution profiles of `awk' programs + (*note Profiling::). + + - The `--use-lc-numeric' option to force `gawk' to use the + locale's decimal point for parsing input data (*note + Conversion::). + + * The use of GNU Automake to help in standardizing the configuration + process (*note Quick Installation::). + + * The use of GNU `gettext' for `gawk''s own message output (*note + Gawk I18N::). + + * BeOS support. This was later removed. + + * Tandem support. This was later removed. + + * The Atari port became officially unsupported. + + * The source code changed to use ISO C standard-style function + definitions. + + * POSIX compliance for `sub()' and `gsub()' (*note Gory Details::). + + * The `length()' function was extended to accept an array argument + and return the number of elements in the array (*note String + Functions::). + + * The `strftime()' function acquired a third argument to enable + printing times as UTC (*note Time Functions::). + + Version 4.0 of `gawk' introduced the following features: + + * Variable additions: + + - `FPAT', which allows you to specify a regexp that matches the + fields, instead of matching the field separator (*note + Splitting By Content::). + + - If `PROCINFO["sorted_in"]' exists, `for(iggy in foo)' loops + sort the indices before looping over them. The value of this + element provides control over how the indices are sorted + before the loop traversal starts (*note Controlling + Scanning::). + + - `PROCINFO["strftime"]', which holds the default format for + `strftime()' (*note Time Functions::). + + * The special files `/dev/pid', `/dev/ppid', `/dev/pgrpid' and + `/dev/user' were removed. + + * Support for IPv6 was added via the `/inet6' special file. + `/inet4' forces IPv4 and `/inet' chooses the system default, which + is probably IPv4 (*note TCP/IP Networking::). + + * The use of `\s' and `\S' escape sequences in regular expressions + (*note GNU Regexp Operators::). + + * Interval expressions became part of default regular expressions + (*note Regexp Operators::). + + * POSIX character classes work even with `--traditional' (*note + Regexp Operators::). + + * `break' and `continue' became invalid outside a loop, even with + `--traditional' (*note Break Statement::, and also see *note + Continue Statement::). + + * `fflush()', `nextfile', and `delete ARRAY' are allowed if + `--posix' or `--traditional', since they are all now part of POSIX. + + * An optional third argument to `asort()' and `asorti()', specifying + how to sort (*note String Functions::). + + * The behavior of `fflush()' changed to match Brian Kernighan's `awk' + and for POSIX; now both `fflush()' and `fflush("")' flush all open + output redirections (*note I/O Functions::). + + * The `isarray()' function which distinguishes if an item is an array + or not, to make it possible to traverse multidimensional arrays + (*note Type Functions::). + + * The `patsplit()' function which gives the same capability as + `FPAT', for splitting (*note String Functions::). + + * An optional fourth argument to the `split()' function, which is an + array to hold the values of the separators (*note String + Functions::). + + * Arrays of arrays (*note Arrays of Arrays::). + + * The `BEGINFILE' and `ENDFILE' special patterns (*note + BEGINFILE/ENDFILE::). + + * Indirect function calls (*note Indirect Calls::). + + * `switch' / `case' are enabled by default (*note Switch + Statement::). + + * Command line option changes (*note Options::): + + - The `-b' and `--characters-as-bytes' options which prevent + `gawk' from treating input as a multibyte string. + + - The redundant `--compat', `--copyleft', and `--usage' long + options were removed. + + - The `--gen-po' option was finally renamed to the correct + `--gen-pot'. + + - The `--sandbox' option which disables certain features. + + - All long options acquired corresponding short options, for + use in `#!' scripts. + + * Directories named on the command line now produce a warning, not a + fatal error, unless `--posix' or `--traditional' are used (*note + Command line directories::). + + * The `gawk' internals were rewritten, bringing the `dgawk' debugger + and possibly improved performance (*note Debugger::). + + * Per the GNU Coding Standards, dynamic extensions must now define a + global symbol indicating that they are GPL-compatible (*note + Plugin License::). + + * In POSIX mode, string comparisons use `strcoll()' / `wcscoll()' + (*note POSIX String Comparison::). + + * The option for raw sockets was removed, since it was never + implemented (*note TCP/IP Networking::). + + * Ranges of the form `[d-h]' are treated as if they were in the C + locale, no matter what kind of regexp is being used, and even if + `--posix' (*note Ranges and Locales::). + + * Support was removed for the following systems: + + - Atari + + - Amiga + + - BeOS + + - Cray + + - MIPS RiscOS + + - MS-DOS with Microsoft Compiler + + - MS-Windows with Microsoft Compiler + + - NeXT + + - SunOS 3.x, Sun 386 (Road Runner) + + - Tandem (non-POSIX) + + - Prestandard VAX C compiler for VAX/VMS + + Version 4.1 of `gawk' introduced the following features: + + * Three new arrays: `SYMTAB', `FUNCTAB', and + `PROCINFO["identifiers"]' (*note Auto-set::). + + * The three executables `gawk', `pgawk', and `dgawk', were merged + into one, named just `gawk'. As a result the command line options + changed. + + * Command line option changes (*note Options::): + + - The `-D' option invokes the debugger. + + - The `-i' and `--include' options load `awk' library files. + + - The `-l' and `--load' options for load compiled dynamic + extensions. + + - The `-M' and `--bignum' options enable MPFR. + + - The `-o' only does pretty-printing. + + - The `-p' option is used for profiling. + + - The `-R' option was removed. + + * Support for high precision arithmetic with MPFR. (*note Gawk and + MPFR::). + + * The `and()', `or()' and `xor()' functions allow any number of + arguments, with a minimum of two (*note Bitwise Functions::). + + * The dynamic extension interface was completely redone (*note + Dynamic Extensions::). + + + +File: gawk.info, Node: Common Extensions, Next: Ranges and Locales, Prev: Feature History, Up: Language History -A.6 Common Extensions Summary +A.7 Common Extensions Summary ============================= This minor node summarizes the common extensions supported by `gawk', @@ -25250,7 +25635,7 @@ Feature BWK Awk Mawk GNU Awk `\x' Escape sequence X X X `RS' as regexp X X `FS' as null string X X X -`/dev/stdin' special file X X +`/dev/stdin' special file X X X `/dev/stdout' special file X X X `/dev/stderr' special file X X X `**' and `**=' operators X X @@ -25258,7 +25643,7 @@ Feature BWK Awk Mawk GNU Awk `func' keyword X X `nextfile' statement X X X `delete' without subscript X X X -`length()' of an array X X +`length()' of an array X X X `BINMODE' variable X X Time related functions X X @@ -25269,7 +25654,7 @@ POSIX.)  File: gawk.info, Node: Ranges and Locales, Next: Contributors, Prev: Common Extensions, Up: Language History -A.7 Regexp Ranges and Locales: A Long Sad Story +A.8 Regexp Ranges and Locales: A Long Sad Story =============================================== This minor node describes the confusing history of ranges within @@ -25375,7 +25760,7 @@ and its rationale  File: gawk.info, Node: Contributors, Prev: Ranges and Locales, Up: Language History -A.8 Major Contributors to `gawk' +A.9 Major Contributors to `gawk' ================================ Always give credit where credit is due. -- Anonymous @@ -31390,6 +31775,7 @@ Index (line 19) * next debugger command: Debugger Execution Control. (line 43) +* next file statement: Feature History. (line 168) * next statement <1>: Next Statement. (line 6) * next statement: Boolean Ops. (line 85) * next statement, BEGIN/END patterns and: I/O And BEGIN/END. (line 37) @@ -32358,524 +32744,525 @@ Index  Tag Table: Node: Top1366 -Node: Foreword40737 -Node: Preface45082 -Ref: Preface-Footnote-148135 -Ref: Preface-Footnote-248231 -Node: History48463 -Node: Names50837 -Ref: Names-Footnote-152314 -Node: This Manual52386 -Ref: This Manual-Footnote-158160 -Node: Conventions58260 -Node: Manual History60416 -Ref: Manual History-Footnote-163864 -Ref: Manual History-Footnote-263905 -Node: How To Contribute63979 -Node: Acknowledgments65123 -Node: Getting Started69332 -Node: Running gawk71711 -Node: One-shot72897 -Node: Read Terminal74122 -Ref: Read Terminal-Footnote-175772 -Ref: Read Terminal-Footnote-276048 -Node: Long76219 -Node: Executable Scripts77595 -Ref: Executable Scripts-Footnote-179428 -Ref: Executable Scripts-Footnote-279530 -Node: Comments80077 -Node: Quoting82544 -Node: DOS Quoting87167 -Node: Sample Data Files87842 -Node: Very Simple90886 -Node: Two Rules95485 -Node: More Complex97632 -Ref: More Complex-Footnote-1100562 -Node: Statements/Lines100647 -Ref: Statements/Lines-Footnote-1105109 -Node: Other Features105374 -Node: When106302 -Node: Invoking Gawk108449 -Node: Command Line109910 -Node: Options110693 -Ref: Options-Footnote-1126085 -Node: Other Arguments126110 -Node: Naming Standard Input128768 -Node: Environment Variables129862 -Node: AWKPATH Variable130420 -Ref: AWKPATH Variable-Footnote-1133178 -Node: AWKLIBPATH Variable133438 -Node: Other Environment Variables134156 -Node: Exit Status137119 -Node: Include Files137794 -Node: Loading Shared Libraries141363 -Node: Obsolete142727 -Node: Undocumented143424 -Node: Regexp143666 -Node: Regexp Usage145055 -Node: Escape Sequences147081 -Node: Regexp Operators152750 -Ref: Regexp Operators-Footnote-1160130 -Ref: Regexp Operators-Footnote-2160277 -Node: Bracket Expressions160375 -Ref: table-char-classes162265 -Node: GNU Regexp Operators164788 -Node: Case-sensitivity168511 -Ref: Case-sensitivity-Footnote-1171479 -Ref: Case-sensitivity-Footnote-2171714 -Node: Leftmost Longest171822 -Node: Computed Regexps173023 -Node: Reading Files176360 -Node: Records178362 -Ref: Records-Footnote-1187251 -Node: Fields187288 -Ref: Fields-Footnote-1190321 -Node: Nonconstant Fields190407 -Node: Changing Fields192609 -Node: Field Separators198568 -Node: Default Field Splitting201270 -Node: Regexp Field Splitting202387 -Node: Single Character Fields205729 -Node: Command Line Field Separator206788 -Node: Full Line Fields210222 -Ref: Full Line Fields-Footnote-1210730 -Node: Field Splitting Summary210776 -Ref: Field Splitting Summary-Footnote-1213875 -Node: Constant Size213976 -Node: Splitting By Content218560 -Ref: Splitting By Content-Footnote-1222286 -Node: Multiple Line222326 -Ref: Multiple Line-Footnote-1228173 -Node: Getline228352 -Node: Plain Getline230568 -Node: Getline/Variable232663 -Node: Getline/File233810 -Node: Getline/Variable/File235151 -Ref: Getline/Variable/File-Footnote-1236750 -Node: Getline/Pipe236837 -Node: Getline/Variable/Pipe239536 -Node: Getline/Coprocess240643 -Node: Getline/Variable/Coprocess241895 -Node: Getline Notes242632 -Node: Getline Summary245419 -Ref: table-getline-variants245827 -Node: Read Timeout246739 -Ref: Read Timeout-Footnote-1250480 -Node: Command line directories250537 -Node: Printing251167 -Node: Print252798 -Node: Print Examples254135 -Node: Output Separators256919 -Node: OFMT258679 -Node: Printf260037 -Node: Basic Printf260943 -Node: Control Letters262482 -Node: Format Modifiers266294 -Node: Printf Examples272303 -Node: Redirection275018 -Node: Special Files281983 -Node: Special FD282516 -Ref: Special FD-Footnote-1286141 -Node: Special Network286215 -Node: Special Caveats287065 -Node: Close Files And Pipes287861 -Ref: Close Files And Pipes-Footnote-1294844 -Ref: Close Files And Pipes-Footnote-2294992 -Node: Expressions295142 -Node: Values296274 -Node: Constants296950 -Node: Scalar Constants297630 -Ref: Scalar Constants-Footnote-1298489 -Node: Nondecimal-numbers298671 -Node: Regexp Constants301671 -Node: Using Constant Regexps302146 -Node: Variables305201 -Node: Using Variables305856 -Node: Assignment Options307580 -Node: Conversion309452 -Ref: table-locale-affects314953 -Ref: Conversion-Footnote-1315577 -Node: All Operators315686 -Node: Arithmetic Ops316316 -Node: Concatenation318821 -Ref: Concatenation-Footnote-1321613 -Node: Assignment Ops321733 -Ref: table-assign-ops326721 -Node: Increment Ops328052 -Node: Truth Values and Conditions331486 -Node: Truth Values332569 -Node: Typing and Comparison333618 -Node: Variable Typing334411 -Ref: Variable Typing-Footnote-1338308 -Node: Comparison Operators338430 -Ref: table-relational-ops338840 -Node: POSIX String Comparison342389 -Ref: POSIX String Comparison-Footnote-1343345 -Node: Boolean Ops343483 -Ref: Boolean Ops-Footnote-1347561 -Node: Conditional Exp347652 -Node: Function Calls349384 -Node: Precedence352978 -Node: Locales356647 -Node: Patterns and Actions357736 -Node: Pattern Overview358790 -Node: Regexp Patterns360459 -Node: Expression Patterns361002 -Node: Ranges364687 -Node: BEGIN/END367653 -Node: Using BEGIN/END368415 -Ref: Using BEGIN/END-Footnote-1371146 -Node: I/O And BEGIN/END371252 -Node: BEGINFILE/ENDFILE373534 -Node: Empty376448 -Node: Using Shell Variables376764 -Node: Action Overview379049 -Node: Statements381406 -Node: If Statement383260 -Node: While Statement384759 -Node: Do Statement386803 -Node: For Statement387959 -Node: Switch Statement391111 -Node: Break Statement393208 -Node: Continue Statement395198 -Node: Next Statement396991 -Node: Nextfile Statement399381 -Node: Exit Statement402024 -Node: Built-in Variables404440 -Node: User-modified405535 -Ref: User-modified-Footnote-1413893 -Node: Auto-set413955 -Ref: Auto-set-Footnote-1427033 -Ref: Auto-set-Footnote-2427238 -Node: ARGC and ARGV427294 -Node: Arrays431145 -Node: Array Basics432650 -Node: Array Intro433476 -Node: Reference to Elements437793 -Node: Assigning Elements440063 -Node: Array Example440554 -Node: Scanning an Array442286 -Node: Controlling Scanning444600 -Ref: Controlling Scanning-Footnote-1449687 -Node: Delete450003 -Ref: Delete-Footnote-1452768 -Node: Numeric Array Subscripts452825 -Node: Uninitialized Subscripts455008 -Node: Multidimensional456635 -Node: Multiscanning459728 -Node: Arrays of Arrays461317 -Node: Functions465957 -Node: Built-in466776 -Node: Calling Built-in467854 -Node: Numeric Functions469842 -Ref: Numeric Functions-Footnote-1473674 -Ref: Numeric Functions-Footnote-2474031 -Ref: Numeric Functions-Footnote-3474079 -Node: String Functions474348 -Ref: String Functions-Footnote-1497268 -Ref: String Functions-Footnote-2497397 -Ref: String Functions-Footnote-3497645 -Node: Gory Details497732 -Ref: table-sub-escapes499411 -Ref: table-sub-posix-92500765 -Ref: table-sub-proposed502116 -Ref: table-posix-sub503470 -Ref: table-gensub-escapes505015 -Ref: Gory Details-Footnote-1506191 -Ref: Gory Details-Footnote-2506242 -Node: I/O Functions506393 -Ref: I/O Functions-Footnote-1513378 -Node: Time Functions513525 -Ref: Time Functions-Footnote-1524458 -Ref: Time Functions-Footnote-2524526 -Ref: Time Functions-Footnote-3524684 -Ref: Time Functions-Footnote-4524795 -Ref: Time Functions-Footnote-5524907 -Ref: Time Functions-Footnote-6525134 -Node: Bitwise Functions525400 -Ref: table-bitwise-ops525962 -Ref: Bitwise Functions-Footnote-1530183 -Node: Type Functions530367 -Node: I18N Functions531518 -Node: User-defined533145 -Node: Definition Syntax533949 -Ref: Definition Syntax-Footnote-1538859 -Node: Function Example538928 -Node: Function Caveats541522 -Node: Calling A Function541943 -Node: Variable Scope543058 -Node: Pass By Value/Reference546021 -Node: Return Statement549529 -Node: Dynamic Typing552510 -Node: Indirect Calls553441 -Node: Library Functions563126 -Ref: Library Functions-Footnote-1566639 -Ref: Library Functions-Footnote-2566782 -Node: Library Names566953 -Ref: Library Names-Footnote-1570424 -Ref: Library Names-Footnote-2570644 -Node: General Functions570730 -Node: Strtonum Function571758 -Node: Assert Function574688 -Node: Round Function578014 -Node: Cliff Random Function579557 -Node: Ordinal Functions580573 -Ref: Ordinal Functions-Footnote-1583643 -Ref: Ordinal Functions-Footnote-2583895 -Node: Join Function584104 -Ref: Join Function-Footnote-1585875 -Node: Getlocaltime Function586075 -Node: Readfile Function589816 -Node: Data File Management591655 -Node: Filetrans Function592287 -Node: Rewind Function596356 -Node: File Checking597743 -Node: Empty Files598837 -Node: Ignoring Assigns601067 -Node: Getopt Function602620 -Ref: Getopt Function-Footnote-1613923 -Node: Passwd Functions614126 -Ref: Passwd Functions-Footnote-1623101 -Node: Group Functions623189 -Node: Walking Arrays631273 -Node: Sample Programs633410 -Node: Running Examples634084 -Node: Clones634812 -Node: Cut Program636036 -Node: Egrep Program645881 -Ref: Egrep Program-Footnote-1653654 -Node: Id Program653764 -Node: Split Program657380 -Ref: Split Program-Footnote-1660899 -Node: Tee Program661027 -Node: Uniq Program663830 -Node: Wc Program671259 -Ref: Wc Program-Footnote-1675525 -Ref: Wc Program-Footnote-2675725 -Node: Miscellaneous Programs675817 -Node: Dupword Program677005 -Node: Alarm Program679036 -Node: Translate Program683789 -Ref: Translate Program-Footnote-1688176 -Ref: Translate Program-Footnote-2688424 -Node: Labels Program688558 -Ref: Labels Program-Footnote-1691929 -Node: Word Sorting692013 -Node: History Sorting695897 -Node: Extract Program697736 -Ref: Extract Program-Footnote-1705239 -Node: Simple Sed705367 -Node: Igawk Program708429 -Ref: Igawk Program-Footnote-1723586 -Ref: Igawk Program-Footnote-2723787 -Node: Anagram Program723925 -Node: Signature Program726993 -Node: Advanced Features728093 -Node: Nondecimal Data729979 -Node: Array Sorting731562 -Node: Controlling Array Traversal732259 -Node: Array Sorting Functions740543 -Ref: Array Sorting Functions-Footnote-1744412 -Node: Two-way I/O744606 -Ref: Two-way I/O-Footnote-1750038 -Node: TCP/IP Networking750108 -Node: Profiling752952 -Node: Internationalization760449 -Node: I18N and L10N761874 -Node: Explaining gettext762560 -Ref: Explaining gettext-Footnote-1767628 -Ref: Explaining gettext-Footnote-2767812 -Node: Programmer i18n767977 -Node: Translator i18n772179 -Node: String Extraction772972 -Ref: String Extraction-Footnote-1773933 -Node: Printf Ordering774019 -Ref: Printf Ordering-Footnote-1776803 -Node: I18N Portability776867 -Ref: I18N Portability-Footnote-1779316 -Node: I18N Example779379 -Ref: I18N Example-Footnote-1782017 -Node: Gawk I18N782089 -Node: Debugger782710 -Node: Debugging783681 -Node: Debugging Concepts784114 -Node: Debugging Terms785970 -Node: Awk Debugging788567 -Node: Sample Debugging Session789459 -Node: Debugger Invocation789979 -Node: Finding The Bug791311 -Node: List of Debugger Commands797799 -Node: Breakpoint Control799133 -Node: Debugger Execution Control802797 -Node: Viewing And Changing Data806157 -Node: Execution Stack809513 -Node: Debugger Info810980 -Node: Miscellaneous Debugger Commands814962 -Node: Readline Support820138 -Node: Limitations820969 -Node: Arbitrary Precision Arithmetic823221 -Ref: Arbitrary Precision Arithmetic-Footnote-1824870 -Node: General Arithmetic825018 -Node: Floating Point Issues826738 -Node: String Conversion Precision827619 -Ref: String Conversion Precision-Footnote-1829324 -Node: Unexpected Results829433 -Node: POSIX Floating Point Problems831586 -Ref: POSIX Floating Point Problems-Footnote-1835411 -Node: Integer Programming835449 -Node: Floating-point Programming837188 -Ref: Floating-point Programming-Footnote-1843519 -Ref: Floating-point Programming-Footnote-2843789 -Node: Floating-point Representation844053 -Node: Floating-point Context845218 -Ref: table-ieee-formats846057 -Node: Rounding Mode847441 -Ref: table-rounding-modes847920 -Ref: Rounding Mode-Footnote-1850935 -Node: Gawk and MPFR851114 -Node: Arbitrary Precision Floats852369 -Ref: Arbitrary Precision Floats-Footnote-1854812 -Node: Setting Precision855128 -Ref: table-predefined-precision-strings855814 -Node: Setting Rounding Mode857959 -Ref: table-gawk-rounding-modes858363 -Node: Floating-point Constants859550 -Node: Changing Precision860979 -Ref: Changing Precision-Footnote-1862376 -Node: Exact Arithmetic862550 -Node: Arbitrary Precision Integers865688 -Ref: Arbitrary Precision Integers-Footnote-1868706 -Node: Dynamic Extensions868853 -Node: Extension Intro870311 -Node: Plugin License871576 -Node: Extension Mechanism Outline872261 -Ref: load-extension872678 -Ref: load-new-function874156 -Ref: call-new-function875151 -Node: Extension API Description877166 -Node: Extension API Functions Introduction878379 -Node: General Data Types883245 -Ref: General Data Types-Footnote-1888850 -Node: Requesting Values889149 -Ref: table-value-types-returned889880 -Node: Constructor Functions890834 -Node: Registration Functions893854 -Node: Extension Functions894539 -Node: Exit Callback Functions896764 -Node: Extension Version String898013 -Node: Input Parsers898663 -Node: Output Wrappers908420 -Node: Two-way processors912930 -Node: Printing Messages915138 -Ref: Printing Messages-Footnote-1916215 -Node: Updating `ERRNO'916367 -Node: Accessing Parameters917106 -Node: Symbol Table Access918336 -Node: Symbol table by name918848 -Node: Symbol table by cookie920595 -Ref: Symbol table by cookie-Footnote-1924725 -Node: Cached values924788 -Ref: Cached values-Footnote-1928237 -Node: Array Manipulation928328 -Ref: Array Manipulation-Footnote-1929426 -Node: Array Data Types929465 -Ref: Array Data Types-Footnote-1932168 -Node: Array Functions932260 -Node: Flattening Arrays936026 -Node: Creating Arrays942878 -Node: Extension API Variables947603 -Node: Extension Versioning948239 -Node: Extension API Informational Variables950140 -Node: Extension API Boilerplate951226 -Node: Finding Extensions955030 -Node: Extension Example955590 -Node: Internal File Description956320 -Node: Internal File Ops960411 -Ref: Internal File Ops-Footnote-1971919 -Node: Using Internal File Ops972059 -Ref: Using Internal File Ops-Footnote-1974412 -Node: Extension Samples974678 -Node: Extension Sample File Functions976202 -Node: Extension Sample Fnmatch984687 -Node: Extension Sample Fork986413 -Node: Extension Sample Inplace987631 -Node: Extension Sample Ord989409 -Node: Extension Sample Readdir990245 -Node: Extension Sample Revout991777 -Node: Extension Sample Rev2way992370 -Node: Extension Sample Read write array993060 -Node: Extension Sample Readfile994943 -Node: Extension Sample API Tests995761 -Node: Extension Sample Time996286 -Node: gawkextlib997650 -Node: Language History1000431 -Node: V7/SVR3.11001953 -Node: SVR41004273 -Node: POSIX1005715 -Node: BTL1007101 -Node: POSIX/GNU1007835 -Node: Common Extensions1013436 -Node: Ranges and Locales1014742 -Ref: Ranges and Locales-Footnote-11019360 -Ref: Ranges and Locales-Footnote-21019387 -Ref: Ranges and Locales-Footnote-31019647 -Node: Contributors1019868 -Node: Installation1024943 -Node: Gawk Distribution1025837 -Node: Getting1026321 -Node: Extracting1027147 -Node: Distribution contents1028839 -Node: Unix Installation1034544 -Node: Quick Installation1035161 -Node: Additional Configuration Options1037605 -Node: Configuration Philosophy1039341 -Node: Non-Unix Installation1041695 -Node: PC Installation1042153 -Node: PC Binary Installation1043452 -Node: PC Compiling1045300 -Node: PC Testing1048244 -Node: PC Using1049420 -Node: Cygwin1053605 -Node: MSYS1054605 -Node: VMS Installation1055119 -Node: VMS Compilation1055883 -Ref: VMS Compilation-Footnote-11057498 -Node: VMS Dynamic Extensions1057556 -Node: VMS Installation Details1058929 -Node: VMS Running1061176 -Node: VMS GNV1064010 -Node: VMS Old Gawk1064733 -Node: Bugs1065203 -Node: Other Versions1069121 -Node: Notes1075205 -Node: Compatibility Mode1076005 -Node: Additions1076788 -Node: Accessing The Source1077715 -Node: Adding Code1079155 -Node: New Ports1085200 -Node: Derived Files1089335 -Ref: Derived Files-Footnote-11094656 -Ref: Derived Files-Footnote-21094690 -Ref: Derived Files-Footnote-31095290 -Node: Future Extensions1095388 -Node: Implementation Limitations1095971 -Node: Extension Design1097223 -Node: Old Extension Problems1098377 -Ref: Old Extension Problems-Footnote-11099885 -Node: Extension New Mechanism Goals1099942 -Ref: Extension New Mechanism Goals-Footnote-11103307 -Node: Extension Other Design Decisions1103493 -Node: Extension Future Growth1105599 -Node: Old Extension Mechanism1106435 -Node: Basic Concepts1108175 -Node: Basic High Level1108856 -Ref: figure-general-flow1109127 -Ref: figure-process-flow1109726 -Ref: Basic High Level-Footnote-11112955 -Node: Basic Data Typing1113140 -Node: Glossary1116495 -Node: Copying1141957 -Node: GNU Free Documentation License1179514 -Node: Index1204651 +Node: Foreword40856 +Node: Preface45201 +Ref: Preface-Footnote-148254 +Ref: Preface-Footnote-248350 +Node: History48582 +Node: Names50956 +Ref: Names-Footnote-152433 +Node: This Manual52505 +Ref: This Manual-Footnote-158279 +Node: Conventions58379 +Node: Manual History60535 +Ref: Manual History-Footnote-163983 +Ref: Manual History-Footnote-264024 +Node: How To Contribute64098 +Node: Acknowledgments65242 +Node: Getting Started69451 +Node: Running gawk71830 +Node: One-shot73016 +Node: Read Terminal74241 +Ref: Read Terminal-Footnote-175891 +Ref: Read Terminal-Footnote-276167 +Node: Long76338 +Node: Executable Scripts77714 +Ref: Executable Scripts-Footnote-179547 +Ref: Executable Scripts-Footnote-279649 +Node: Comments80196 +Node: Quoting82663 +Node: DOS Quoting87286 +Node: Sample Data Files87961 +Node: Very Simple91005 +Node: Two Rules95604 +Node: More Complex97751 +Ref: More Complex-Footnote-1100681 +Node: Statements/Lines100766 +Ref: Statements/Lines-Footnote-1105228 +Node: Other Features105493 +Node: When106421 +Node: Invoking Gawk108568 +Node: Command Line110029 +Node: Options110812 +Ref: Options-Footnote-1126204 +Node: Other Arguments126229 +Node: Naming Standard Input128887 +Node: Environment Variables129981 +Node: AWKPATH Variable130539 +Ref: AWKPATH Variable-Footnote-1133297 +Node: AWKLIBPATH Variable133557 +Node: Other Environment Variables134275 +Node: Exit Status137238 +Node: Include Files137913 +Node: Loading Shared Libraries141482 +Node: Obsolete142846 +Node: Undocumented143543 +Node: Regexp143785 +Node: Regexp Usage145174 +Node: Escape Sequences147200 +Node: Regexp Operators152869 +Ref: Regexp Operators-Footnote-1160249 +Ref: Regexp Operators-Footnote-2160396 +Node: Bracket Expressions160494 +Ref: table-char-classes162384 +Node: GNU Regexp Operators164907 +Node: Case-sensitivity168630 +Ref: Case-sensitivity-Footnote-1171598 +Ref: Case-sensitivity-Footnote-2171833 +Node: Leftmost Longest171941 +Node: Computed Regexps173142 +Node: Reading Files176479 +Node: Records178481 +Ref: Records-Footnote-1187370 +Node: Fields187407 +Ref: Fields-Footnote-1190440 +Node: Nonconstant Fields190526 +Node: Changing Fields192728 +Node: Field Separators198687 +Node: Default Field Splitting201389 +Node: Regexp Field Splitting202506 +Node: Single Character Fields205848 +Node: Command Line Field Separator206907 +Node: Full Line Fields210341 +Ref: Full Line Fields-Footnote-1210849 +Node: Field Splitting Summary210895 +Ref: Field Splitting Summary-Footnote-1213994 +Node: Constant Size214095 +Node: Splitting By Content218679 +Ref: Splitting By Content-Footnote-1222405 +Node: Multiple Line222445 +Ref: Multiple Line-Footnote-1228292 +Node: Getline228471 +Node: Plain Getline230687 +Node: Getline/Variable232782 +Node: Getline/File233929 +Node: Getline/Variable/File235270 +Ref: Getline/Variable/File-Footnote-1236869 +Node: Getline/Pipe236956 +Node: Getline/Variable/Pipe239655 +Node: Getline/Coprocess240762 +Node: Getline/Variable/Coprocess242014 +Node: Getline Notes242751 +Node: Getline Summary245538 +Ref: table-getline-variants245946 +Node: Read Timeout246858 +Ref: Read Timeout-Footnote-1250599 +Node: Command line directories250656 +Node: Printing251286 +Node: Print252917 +Node: Print Examples254254 +Node: Output Separators257038 +Node: OFMT258798 +Node: Printf260156 +Node: Basic Printf261062 +Node: Control Letters262601 +Node: Format Modifiers266413 +Node: Printf Examples272422 +Node: Redirection275137 +Node: Special Files282102 +Node: Special FD282635 +Ref: Special FD-Footnote-1286260 +Node: Special Network286334 +Node: Special Caveats287184 +Node: Close Files And Pipes287980 +Ref: Close Files And Pipes-Footnote-1294963 +Ref: Close Files And Pipes-Footnote-2295111 +Node: Expressions295261 +Node: Values296393 +Node: Constants297069 +Node: Scalar Constants297749 +Ref: Scalar Constants-Footnote-1298608 +Node: Nondecimal-numbers298790 +Node: Regexp Constants301790 +Node: Using Constant Regexps302265 +Node: Variables305320 +Node: Using Variables305975 +Node: Assignment Options307699 +Node: Conversion309571 +Ref: table-locale-affects315072 +Ref: Conversion-Footnote-1315696 +Node: All Operators315805 +Node: Arithmetic Ops316435 +Node: Concatenation318940 +Ref: Concatenation-Footnote-1321732 +Node: Assignment Ops321852 +Ref: table-assign-ops326840 +Node: Increment Ops328171 +Node: Truth Values and Conditions331605 +Node: Truth Values332688 +Node: Typing and Comparison333737 +Node: Variable Typing334530 +Ref: Variable Typing-Footnote-1338427 +Node: Comparison Operators338549 +Ref: table-relational-ops338959 +Node: POSIX String Comparison342508 +Ref: POSIX String Comparison-Footnote-1343464 +Node: Boolean Ops343602 +Ref: Boolean Ops-Footnote-1347680 +Node: Conditional Exp347771 +Node: Function Calls349503 +Node: Precedence353097 +Node: Locales356766 +Node: Patterns and Actions357855 +Node: Pattern Overview358909 +Node: Regexp Patterns360578 +Node: Expression Patterns361121 +Node: Ranges364806 +Node: BEGIN/END367772 +Node: Using BEGIN/END368534 +Ref: Using BEGIN/END-Footnote-1371265 +Node: I/O And BEGIN/END371371 +Node: BEGINFILE/ENDFILE373653 +Node: Empty376567 +Node: Using Shell Variables376883 +Node: Action Overview379168 +Node: Statements381525 +Node: If Statement383379 +Node: While Statement384878 +Node: Do Statement386922 +Node: For Statement388078 +Node: Switch Statement391230 +Node: Break Statement393327 +Node: Continue Statement395317 +Node: Next Statement397110 +Node: Nextfile Statement399500 +Node: Exit Statement402143 +Node: Built-in Variables404559 +Node: User-modified405654 +Ref: User-modified-Footnote-1414012 +Node: Auto-set414074 +Ref: Auto-set-Footnote-1427152 +Ref: Auto-set-Footnote-2427357 +Node: ARGC and ARGV427413 +Node: Arrays431264 +Node: Array Basics432769 +Node: Array Intro433595 +Node: Reference to Elements437912 +Node: Assigning Elements440182 +Node: Array Example440673 +Node: Scanning an Array442405 +Node: Controlling Scanning444719 +Ref: Controlling Scanning-Footnote-1449806 +Node: Delete450122 +Ref: Delete-Footnote-1452887 +Node: Numeric Array Subscripts452944 +Node: Uninitialized Subscripts455127 +Node: Multidimensional456754 +Node: Multiscanning459847 +Node: Arrays of Arrays461436 +Node: Functions466076 +Node: Built-in466895 +Node: Calling Built-in467973 +Node: Numeric Functions469961 +Ref: Numeric Functions-Footnote-1473793 +Ref: Numeric Functions-Footnote-2474150 +Ref: Numeric Functions-Footnote-3474198 +Node: String Functions474467 +Ref: String Functions-Footnote-1497387 +Ref: String Functions-Footnote-2497516 +Ref: String Functions-Footnote-3497764 +Node: Gory Details497851 +Ref: table-sub-escapes499530 +Ref: table-sub-posix-92500884 +Ref: table-sub-proposed502235 +Ref: table-posix-sub503589 +Ref: table-gensub-escapes505134 +Ref: Gory Details-Footnote-1506310 +Ref: Gory Details-Footnote-2506361 +Node: I/O Functions506512 +Ref: I/O Functions-Footnote-1513497 +Node: Time Functions513644 +Ref: Time Functions-Footnote-1524577 +Ref: Time Functions-Footnote-2524645 +Ref: Time Functions-Footnote-3524803 +Ref: Time Functions-Footnote-4524914 +Ref: Time Functions-Footnote-5525026 +Ref: Time Functions-Footnote-6525253 +Node: Bitwise Functions525519 +Ref: table-bitwise-ops526081 +Ref: Bitwise Functions-Footnote-1530302 +Node: Type Functions530486 +Node: I18N Functions531637 +Node: User-defined533264 +Node: Definition Syntax534068 +Ref: Definition Syntax-Footnote-1538978 +Node: Function Example539047 +Node: Function Caveats541641 +Node: Calling A Function542062 +Node: Variable Scope543177 +Node: Pass By Value/Reference546140 +Node: Return Statement549648 +Node: Dynamic Typing552629 +Node: Indirect Calls553560 +Node: Library Functions563245 +Ref: Library Functions-Footnote-1566758 +Ref: Library Functions-Footnote-2566901 +Node: Library Names567072 +Ref: Library Names-Footnote-1570543 +Ref: Library Names-Footnote-2570763 +Node: General Functions570849 +Node: Strtonum Function571877 +Node: Assert Function574807 +Node: Round Function578133 +Node: Cliff Random Function579676 +Node: Ordinal Functions580692 +Ref: Ordinal Functions-Footnote-1583762 +Ref: Ordinal Functions-Footnote-2584014 +Node: Join Function584223 +Ref: Join Function-Footnote-1585994 +Node: Getlocaltime Function586194 +Node: Readfile Function589935 +Node: Data File Management591774 +Node: Filetrans Function592406 +Node: Rewind Function596475 +Node: File Checking597862 +Node: Empty Files598956 +Node: Ignoring Assigns601186 +Node: Getopt Function602739 +Ref: Getopt Function-Footnote-1614042 +Node: Passwd Functions614245 +Ref: Passwd Functions-Footnote-1623220 +Node: Group Functions623308 +Node: Walking Arrays631392 +Node: Sample Programs633529 +Node: Running Examples634203 +Node: Clones634931 +Node: Cut Program636155 +Node: Egrep Program646000 +Ref: Egrep Program-Footnote-1653773 +Node: Id Program653883 +Node: Split Program657499 +Ref: Split Program-Footnote-1661018 +Node: Tee Program661146 +Node: Uniq Program663949 +Node: Wc Program671378 +Ref: Wc Program-Footnote-1675644 +Ref: Wc Program-Footnote-2675844 +Node: Miscellaneous Programs675936 +Node: Dupword Program677124 +Node: Alarm Program679155 +Node: Translate Program683908 +Ref: Translate Program-Footnote-1688295 +Ref: Translate Program-Footnote-2688543 +Node: Labels Program688677 +Ref: Labels Program-Footnote-1692048 +Node: Word Sorting692132 +Node: History Sorting696016 +Node: Extract Program697855 +Ref: Extract Program-Footnote-1705358 +Node: Simple Sed705486 +Node: Igawk Program708548 +Ref: Igawk Program-Footnote-1723705 +Ref: Igawk Program-Footnote-2723906 +Node: Anagram Program724044 +Node: Signature Program727112 +Node: Advanced Features728212 +Node: Nondecimal Data730098 +Node: Array Sorting731681 +Node: Controlling Array Traversal732378 +Node: Array Sorting Functions740662 +Ref: Array Sorting Functions-Footnote-1744531 +Node: Two-way I/O744725 +Ref: Two-way I/O-Footnote-1750157 +Node: TCP/IP Networking750227 +Node: Profiling753071 +Node: Internationalization760568 +Node: I18N and L10N761993 +Node: Explaining gettext762679 +Ref: Explaining gettext-Footnote-1767747 +Ref: Explaining gettext-Footnote-2767931 +Node: Programmer i18n768096 +Node: Translator i18n772298 +Node: String Extraction773091 +Ref: String Extraction-Footnote-1774052 +Node: Printf Ordering774138 +Ref: Printf Ordering-Footnote-1776922 +Node: I18N Portability776986 +Ref: I18N Portability-Footnote-1779435 +Node: I18N Example779498 +Ref: I18N Example-Footnote-1782136 +Node: Gawk I18N782208 +Node: Debugger782829 +Node: Debugging783800 +Node: Debugging Concepts784233 +Node: Debugging Terms786089 +Node: Awk Debugging788686 +Node: Sample Debugging Session789578 +Node: Debugger Invocation790098 +Node: Finding The Bug791430 +Node: List of Debugger Commands797918 +Node: Breakpoint Control799252 +Node: Debugger Execution Control802916 +Node: Viewing And Changing Data806276 +Node: Execution Stack809632 +Node: Debugger Info811099 +Node: Miscellaneous Debugger Commands815081 +Node: Readline Support820257 +Node: Limitations821088 +Node: Arbitrary Precision Arithmetic823340 +Ref: Arbitrary Precision Arithmetic-Footnote-1824989 +Node: General Arithmetic825137 +Node: Floating Point Issues826857 +Node: String Conversion Precision827738 +Ref: String Conversion Precision-Footnote-1829443 +Node: Unexpected Results829552 +Node: POSIX Floating Point Problems831705 +Ref: POSIX Floating Point Problems-Footnote-1835530 +Node: Integer Programming835568 +Node: Floating-point Programming837307 +Ref: Floating-point Programming-Footnote-1843638 +Ref: Floating-point Programming-Footnote-2843908 +Node: Floating-point Representation844172 +Node: Floating-point Context845337 +Ref: table-ieee-formats846176 +Node: Rounding Mode847560 +Ref: table-rounding-modes848039 +Ref: Rounding Mode-Footnote-1851054 +Node: Gawk and MPFR851233 +Node: Arbitrary Precision Floats852488 +Ref: Arbitrary Precision Floats-Footnote-1854931 +Node: Setting Precision855247 +Ref: table-predefined-precision-strings855933 +Node: Setting Rounding Mode858078 +Ref: table-gawk-rounding-modes858482 +Node: Floating-point Constants859669 +Node: Changing Precision861098 +Ref: Changing Precision-Footnote-1862495 +Node: Exact Arithmetic862669 +Node: Arbitrary Precision Integers865807 +Ref: Arbitrary Precision Integers-Footnote-1868825 +Node: Dynamic Extensions868972 +Node: Extension Intro870430 +Node: Plugin License871695 +Node: Extension Mechanism Outline872380 +Ref: load-extension872797 +Ref: load-new-function874275 +Ref: call-new-function875270 +Node: Extension API Description877285 +Node: Extension API Functions Introduction878498 +Node: General Data Types883364 +Ref: General Data Types-Footnote-1888969 +Node: Requesting Values889268 +Ref: table-value-types-returned889999 +Node: Constructor Functions890953 +Node: Registration Functions893973 +Node: Extension Functions894658 +Node: Exit Callback Functions896883 +Node: Extension Version String898132 +Node: Input Parsers898782 +Node: Output Wrappers908539 +Node: Two-way processors913049 +Node: Printing Messages915257 +Ref: Printing Messages-Footnote-1916334 +Node: Updating `ERRNO'916486 +Node: Accessing Parameters917225 +Node: Symbol Table Access918455 +Node: Symbol table by name918967 +Node: Symbol table by cookie920714 +Ref: Symbol table by cookie-Footnote-1924844 +Node: Cached values924907 +Ref: Cached values-Footnote-1928356 +Node: Array Manipulation928447 +Ref: Array Manipulation-Footnote-1929545 +Node: Array Data Types929584 +Ref: Array Data Types-Footnote-1932287 +Node: Array Functions932379 +Node: Flattening Arrays936145 +Node: Creating Arrays942997 +Node: Extension API Variables947722 +Node: Extension Versioning948358 +Node: Extension API Informational Variables950259 +Node: Extension API Boilerplate951345 +Node: Finding Extensions955149 +Node: Extension Example955709 +Node: Internal File Description956439 +Node: Internal File Ops960530 +Ref: Internal File Ops-Footnote-1972038 +Node: Using Internal File Ops972178 +Ref: Using Internal File Ops-Footnote-1974531 +Node: Extension Samples974797 +Node: Extension Sample File Functions976321 +Node: Extension Sample Fnmatch984806 +Node: Extension Sample Fork986532 +Node: Extension Sample Inplace987750 +Node: Extension Sample Ord989528 +Node: Extension Sample Readdir990364 +Node: Extension Sample Revout991896 +Node: Extension Sample Rev2way992489 +Node: Extension Sample Read write array993179 +Node: Extension Sample Readfile995062 +Node: Extension Sample API Tests995880 +Node: Extension Sample Time996405 +Node: gawkextlib997769 +Node: Language History1000550 +Node: V7/SVR3.11002143 +Node: SVR41004463 +Node: POSIX1005905 +Node: BTL1007291 +Node: POSIX/GNU1008025 +Node: Feature History1013624 +Node: Common Extensions1026588 +Node: Ranges and Locales1027900 +Ref: Ranges and Locales-Footnote-11032518 +Ref: Ranges and Locales-Footnote-21032545 +Ref: Ranges and Locales-Footnote-31032805 +Node: Contributors1033026 +Node: Installation1038101 +Node: Gawk Distribution1038995 +Node: Getting1039479 +Node: Extracting1040305 +Node: Distribution contents1041997 +Node: Unix Installation1047702 +Node: Quick Installation1048319 +Node: Additional Configuration Options1050763 +Node: Configuration Philosophy1052499 +Node: Non-Unix Installation1054853 +Node: PC Installation1055311 +Node: PC Binary Installation1056610 +Node: PC Compiling1058458 +Node: PC Testing1061402 +Node: PC Using1062578 +Node: Cygwin1066763 +Node: MSYS1067763 +Node: VMS Installation1068277 +Node: VMS Compilation1069041 +Ref: VMS Compilation-Footnote-11070656 +Node: VMS Dynamic Extensions1070714 +Node: VMS Installation Details1072087 +Node: VMS Running1074334 +Node: VMS GNV1077168 +Node: VMS Old Gawk1077891 +Node: Bugs1078361 +Node: Other Versions1082279 +Node: Notes1088363 +Node: Compatibility Mode1089163 +Node: Additions1089946 +Node: Accessing The Source1090873 +Node: Adding Code1092313 +Node: New Ports1098358 +Node: Derived Files1102493 +Ref: Derived Files-Footnote-11107814 +Ref: Derived Files-Footnote-21107848 +Ref: Derived Files-Footnote-31108448 +Node: Future Extensions1108546 +Node: Implementation Limitations1109129 +Node: Extension Design1110381 +Node: Old Extension Problems1111535 +Ref: Old Extension Problems-Footnote-11113043 +Node: Extension New Mechanism Goals1113100 +Ref: Extension New Mechanism Goals-Footnote-11116465 +Node: Extension Other Design Decisions1116651 +Node: Extension Future Growth1118757 +Node: Old Extension Mechanism1119593 +Node: Basic Concepts1121333 +Node: Basic High Level1122014 +Ref: figure-general-flow1122285 +Ref: figure-process-flow1122884 +Ref: Basic High Level-Footnote-11126113 +Node: Basic Data Typing1126298 +Node: Glossary1129653 +Node: Copying1155115 +Node: GNU Free Documentation License1192672 +Node: Index1217809  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index b759986b..1001d03c 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -402,7 +402,8 @@ particular records in a file and perform operations upon them. field. * Command Line Field Separator:: Setting @code{FS} from the command-line. -* Full Line Fields:: Making the full line be a single field. +* Full Line Fields:: Making the full line be a single + field. * Field Splitting Summary:: Some final points and a summary table. * Constant Size:: Reading constant width data. * Splitting By Content:: Defining Fields By Content @@ -792,6 +793,7 @@ particular records in a file and perform operations upon them. version of @command{awk}. * POSIX/GNU:: The extensions in @command{gawk} not in POSIX @command{awk}. +* Feature History:: The history of the features in @command{gawk}. * Common Extensions:: Common Extensions Summary. * Ranges and Locales:: How locales used to affect regexp ranges. @@ -33025,6 +33027,7 @@ of the @value{DOCUMENT} where you can find more information. @command{awk}. * POSIX/GNU:: The extensions in @command{gawk} not in POSIX @command{awk}. +* Feature History:: The history of the features in @command{gawk}. * Common Extensions:: Common Extensions Summary. * Ranges and Locales:: How locales used to affect regexp ranges. * Contributors:: The major contributors to @command{gawk}. @@ -33603,6 +33606,612 @@ GCC for VAX and Alpha has not been tested for a while. @c ENDOFRANGE exgnot @c ENDOFRANGE posnot +@node Feature History +@appendixsec History of @command{gawk} Features + +@ignore +See the thread: +https://groups.google.com/forum/#!topic/comp.lang.awk/SAUiRuff30c +This motivated me to add this section. +@end ignore + +@ignore +I've tried to follow this general order, esp.@: for the 3.0 and 3.1 sections: + variables + special files + language changes (e.g., hex constants) + differences in standard awk functions + new gawk functions + new keywords + new command-line options + behavioral changes + new ports +Within each category, be alphabetical. +@end ignore + +This @value{SECTION} describes the features in @command{gawk} +over and above those in POSIX @command{awk}, +in the order they were added to @command{gawk}. + +Version 2.10 of @command{gawk} introduced the following features: + +@itemize @bullet +@item +The @env{AWKPATH} environment variable for specifying a path search for +the @option{-f} command-line option +(@pxref{Options}). + +@item +The @code{IGNORECASE} variable and its effects +(@pxref{Case-sensitivity}). + +@item +The @file{/dev/stdin}, @file{/dev/stdout}, @file{/dev/stderr} and +@file{/dev/fd/@var{N}} special file names +(@pxref{Special Files}). +@end itemize + +Version 2.13 of @command{gawk} introduced the following features: + +@itemize @bullet +@item +The @code{FIELDWIDTHS} variable and its effects +(@pxref{Constant Size}). + +@item +The @code{systime()} and @code{strftime()} built-in functions for obtaining +and printing timestamps +(@pxref{Time Functions}). + +@item +Additional command-line options +(@pxref{Options}): + +@itemize @minus +@item +The @option{-W lint} option to provide error and portability checking +for both the source code and at runtime. + +@item +The @option{-W compat} option to turn off the GNU extensions. + +@item +The @option{-W posix} option for full POSIX compliance. +@end itemize +@end itemize + +Version 2.14 of @command{gawk} introduced the following feature: + +@itemize @bullet +@item +The @code{next file} statement for skipping to the next data file +(@pxref{Nextfile Statement}). +@end itemize + +Version 2.15 of @command{gawk} introduced the following features: + +@itemize @bullet +@item +New variables (@pxref{Built-in Variables}): + +@itemize @minus +@item +@code{ARGIND}, which tracks the movement of @code{FILENAME} +through @code{ARGV}. + +@item +@code{ERRNO}, which contains the system error message when +@code{getline} returns @minus{}1 or @code{close()} fails. +@end itemize + +@item +The @file{/dev/pid}, @file{/dev/ppid}, @file{/dev/pgrpid}, and +@file{/dev/user} special file names. These have since been removed. + +@item +The ability to delete all of an array at once with @samp{delete @var{array}} +(@pxref{Delete}). + +@item +Command line option changes +(@pxref{Options}): + +@itemize @minus +@item +The ability to use GNU-style long-named options that start with @option{--}. + +@item +The @option{--source} option for mixing command-line and library-file +source code. +@end itemize +@end itemize + +Version 3.0 of @command{gawk} introduced the following features: + +@itemize @bullet +@item +New or changed variables: + +@itemize @minus +@item +@code{IGNORECASE} changed, now applying to string comparison as well +as regexp operations +(@pxref{Case-sensitivity}). + +@item +@code{RT}, which contains the input text that matched @code{RS} +(@pxref{Records}). +@end itemize + +@item +Full support for both POSIX and GNU regexps +(@pxref{Regexp}). + +@item +The @code{gensub()} function for more powerful text manipulation +(@pxref{String Functions}). + +@item +The @code{strftime()} function acquired a default time format, +allowing it to be called with no arguments +(@pxref{Time Functions}). + +@item +The ability for @code{FS} and for the third +argument to @code{split()} to be null strings +(@pxref{Single Character Fields}). + +@item +The ability for @code{RS} to be a regexp +(@pxref{Records}). + +@item +The @code{next file} statement became @code{nextfile} +(@pxref{Nextfile Statement}). + +@item +The @code{fflush()} function from the +Bell Laboratories research version of @command{awk} +(@pxref{I/O Functions}). + +@item +New command line options: + +@itemize @minus +@item +The @option{--lint-old} option to +warn about constructs that are not available in +the original Version 7 Unix version of @command{awk} +(@pxref{V7/SVR3.1}). + +@item +The @option{-m} option from the +Bell Laboratories research version of @command{awk} +This was later removed. + +@item +The @option{--re-interval} option to provide interval expressions in regexps +(@pxref{Regexp Operators}). + +@item +The @option{--traditional} option was added as a better name for +@option{--compat} (@pxref{Options}). +@end itemize + +@item +The use of GNU Autoconf to control the configuration process +(@pxref{Quick Installation}). + +@item +Amiga support. + +@end itemize + +Version 3.1 of @command{gawk} introduced the following features: + +@itemize @bullet +@item +New variables +(@pxref{Built-in Variables}): + +@itemize @minus +@item +@code{BINMODE}, for non-POSIX systems, +which allows binary I/O for input and/or output files +(@pxref{PC Using}). + +@item +@code{LINT}, which dynamically controls lint warnings. + +@item +@code{PROCINFO}, an array for providing process-related information. + +@item +@code{TEXTDOMAIN}, for setting an application's internationalization text domain +(@pxref{Internationalization}). +@end itemize + +@item +The ability to use octal and hexadecimal constants in @command{awk} +program source code +(@pxref{Nondecimal-numbers}). + +@item +The @samp{|&} operator for two-way I/O to a coprocess +(@pxref{Two-way I/O}). + +@item +The @file{/inet} special files for TCP/IP networking using @samp{|&} +(@pxref{TCP/IP Networking}). + +@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}). + +@item +The optional third argument to the @code{match()} function +for capturing text-matching subexpressions within a regexp +(@pxref{String Functions}). + +@item +Positional specifiers in @code{printf} formats for +making translations easier +(@pxref{Printf Ordering}). + +@item +A number of new built-in functions: + +@itemize @minus +@item +The @code{asort()} and @code{asorti()} functions for sorting arrays +(@pxref{Array Sorting}). + +@item +The @code{bindtextdomain()}, @code{dcgettext()} and @code{dcngettext()} functions +for internationalization +(@pxref{Programmer i18n}). + +@item +The @code{extension()} function and the ability to add +new built-in functions dynamically +(@pxref{Dynamic Extensions}). + +@item +The @code{mktime()} function for creating timestamps +(@pxref{Time Functions}). + +@item +The @code{and()}, @code{or()}, @code{xor()}, @code{compl()}, +@code{lshift()}, @code{rshift()}, and @code{strtonum()} functions +(@pxref{Bitwise Functions}). +@end itemize + +@item +@cindex @code{next file} statement +The support for @samp{next file} as two words was removed completely +(@pxref{Nextfile Statement}). + +@item +Additional commnd line options +(@pxref{Options}): + +@itemize @minus +@item +The @option{--dump-variables} option to print a list of all global variables. + +@item +The @option{--exec} option, for use in CGI scripts. + +@item +The @option{--gen-po} command-line option and the use of a leading +underscore to mark strings that should be translated +(@pxref{String Extraction}). + +@item +The @option{--non-decimal-data} option to allow non-decimal +input data +(@pxref{Nondecimal Data}). + +@item +The @option{--profile} option and @command{pgawk}, the +profiling version of @command{gawk}, for producing execution +profiles of @command{awk} programs +(@pxref{Profiling}). + +@item +The @option{--use-lc-numeric} option to force @command{gawk} +to use the locale's decimal point for parsing input data +(@pxref{Conversion}). +@end itemize + +@item +The use of GNU Automake to help in standardizing the configuration process +(@pxref{Quick Installation}). + +@item +The use of GNU @code{gettext} for @command{gawk}'s own message output +(@pxref{Gawk I18N}). + +@item +BeOS support. This was later removed. + +@item +Tandem support. This was later removed. + +@item +The Atari port became officially unsupported. + +@item +The source code changed to use ISO C standard-style function definitions. + +@item +POSIX compliance for @code{sub()} and @code{gsub()} +(@pxref{Gory Details}). + +@item +The @code{length()} function was extended to accept an array argument +and return the number of elements in the array +(@pxref{String Functions}). + +@item +The @code{strftime()} function acquired a third argument to +enable printing times as UTC +(@pxref{Time Functions}). +@end itemize + +Version 4.0 of @command{gawk} introduced the following features: + +@itemize @bullet + +@item +Variable additions: + +@itemize @minus +@item +@code{FPAT}, which allows you to specify a regexp that matches +the fields, instead of matching the field separator +(@pxref{Splitting By Content}). + +@item +If @code{PROCINFO["sorted_in"]} exists, @samp{for(iggy in foo)} loops sort the +indices before looping over them. The value of this element +provides control over how the indices are sorted before the loop +traversal starts +(@pxref{Controlling Scanning}). + +@item +@code{PROCINFO["strftime"]}, which holds +the default format for @code{strftime()} +(@pxref{Time Functions}). +@end itemize + +@item +The special files @file{/dev/pid}, @file{/dev/ppid}, @file{/dev/pgrpid} +and @file{/dev/user} were removed. + +@item +Support for IPv6 was added via the @file{/inet6} special file. +@file{/inet4} forces IPv4 and @file{/inet} chooses the system +default, which is probably IPv4 +(@pxref{TCP/IP Networking}). + +@item +The use of @samp{\s} and @samp{\S} escape sequences in regular expressions +(@pxref{GNU Regexp Operators}). + +@item +Interval expressions became part of default regular expressions +(@pxref{Regexp Operators}). + +@item +POSIX character classes work even with @option{--traditional} +(@pxref{Regexp Operators}). + +@item +@code{break} and @code{continue} became invalid outside a loop, +even with @option{--traditional} +(@pxref{Break Statement}, and also see +@ref{Continue Statement}). + +@item +@code{fflush()}, @code{nextfile}, and @samp{delete @var{array}} +are allowed if @option{--posix} or @option{--traditional}, since they +are all now part of POSIX. + +@item +An optional third argument to +@code{asort()} and @code{asorti()}, specifying how to sort +(@pxref{String Functions}). + +@item +The behavior of @code{fflush()} changed to match Brian Kernighan's @command{awk} +and for POSIX; now both @samp{fflush()} and @samp{fflush("")} +flush all open output redirections +(@pxref{I/O Functions}). + +@item +The @code{isarray()} +function which distinguishes if an item is an array +or not, to make it possible to traverse multidimensional arrays +(@pxref{Type Functions}). + +@item +The @code{patsplit()} +function which gives the same capability as @code{FPAT}, for splitting +(@pxref{String Functions}). + +@item +An optional fourth argument to the @code{split()} function, +which is an array to hold the values of the separators +(@pxref{String Functions}). + +@item +Arrays of arrays +(@pxref{Arrays of Arrays}). + +@item +The @code{BEGINFILE} and @code{ENDFILE} special patterns +(@pxref{BEGINFILE/ENDFILE}). + +@item +Indirect function calls +(@pxref{Indirect Calls}). + +@item +@code{switch} / @code{case} are enabled by default +(@pxref{Switch Statement}). + +@item +Command line option changes +(@pxref{Options}): + +@itemize @minus +@item +The @option{-b} and @option{--characters-as-bytes} options +which prevent @command{gawk} from treating input as a multibyte string. + +@item +The redundant @option{--compat}, @option{--copyleft}, and @option{--usage} +long options were removed. + +@item +The @option{--gen-po} option was finally renamed to the correct @option{--gen-pot}. + +@item +The @option{--sandbox} option which disables certain features. + +@item +All long options acquired corresponding short options, for use in @samp{#!} scripts. +@end itemize + +@item +Directories named on the command line now produce a warning, not a fatal +error, unless @option{--posix} or @option{--traditional} are used +(@pxref{Command line directories}). + +@item +The @command{gawk} internals were rewritten, bringing the @command{dgawk} +debugger and possibly improved performance +(@pxref{Debugger}). + +@item +Per the GNU Coding Standards, dynamic extensions must now define +a global symbol indicating that they are GPL-compatible +(@pxref{Plugin License}). + +@item +In POSIX mode, string comparisons use @code{strcoll()} / @code{wcscoll()} +(@pxref{POSIX String Comparison}). + +@item +The option for raw sockets was removed, since it was never implemented +(@pxref{TCP/IP Networking}). + +@item +Ranges of the form @code{[d-h]} are treated as if they were in the +C locale, no matter what kind of regexp is being used, and even if +@option{--posix} +(@pxref{Ranges and Locales}). + +@item +Support was removed for the following systems: + +@itemize @minus +@item +Atari + +@item +Amiga + +@item +BeOS + +@item +Cray + +@item +MIPS RiscOS + +@item +MS-DOS with Microsoft Compiler + +@item +MS-Windows with Microsoft Compiler + +@item +NeXT + +@item +SunOS 3.x, Sun 386 (Road Runner) + +@item +Tandem (non-POSIX) + +@item +Prestandard VAX C compiler for VAX/VMS +@end itemize +@end itemize + +Version 4.1 of @command{gawk} introduced the following features: + +@itemize @bullet + +@item +Three new arrays: +@code{SYMTAB}, @code{FUNCTAB}, and @code{PROCINFO["identifiers"]} +(@pxref{Auto-set}). + +@item +The three executables @command{gawk}, @command{pgawk}, and @command{dgawk}, were merged into +one, named just @command{gawk}. As a result the command line options changed. + +@item +Command line option changes +(@pxref{Options}): + +@itemize @minus +@item +The @option{-D} option invokes the debugger. + +@item +The @option{-i} and @option{--include} options +load @command{awk} library files. + +@item +The @option{-l} and @option{--load} options for load compiled dynamic extensions. + +@item +The @option{-M} and @option{--bignum} options enable MPFR. + +@item +The @option{-o} only does pretty-printing. + +@item +The @option{-p} option is used for profiling. + +@item +The @option{-R} option was removed. +@end itemize + +@item +Support for high precision arithmetic with MPFR. +(@pxref{Gawk and MPFR}). + +@item +The @code{and()}, @code{or()} and @code{xor()} functions +allow any number of arguments, +with a minimum of two +(@pxref{Bitwise Functions}). + +@item +The dynamic extension interface was completely redone +(@pxref{Dynamic Extensions}). + +@end itemize + +@c XXX ADD MORE STUFF HERE + @node Common Extensions @appendixsec Common Extensions Summary @@ -33618,7 +34227,7 @@ the three most widely-used freely available versions of @command{awk} @item @samp{\x} Escape sequence @tab X @tab X @tab X @item @code{RS} as regexp @tab @tab X @tab X @item @code{FS} as null string @tab X @tab X @tab X -@item @file{/dev/stdin} special file @tab X @tab @tab X +@item @file{/dev/stdin} special file @tab X @tab X @tab X @item @file{/dev/stdout} special file @tab X @tab X @tab X @item @file{/dev/stderr} special file @tab X @tab X @tab X @item @code{**} and @code{**=} operators @tab X @tab @tab X @@ -33626,7 +34235,7 @@ the three most widely-used freely available versions of @command{awk} @item @code{func} keyword @tab X @tab @tab X @item @code{nextfile} statement @tab X @tab X @tab X @item @code{delete} without subscript @tab X @tab X @tab X -@item @code{length()} of an array @tab X @tab @tab X +@item @code{length()} of an array @tab X @tab X @tab X @item @code{BINMODE} variable @tab @tab X @tab X @item Time related functions @tab @tab X @tab X @end multitable diff --git a/doc/gawktexi.in b/doc/gawktexi.in index f27d5aba..6c015c81 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -397,7 +397,8 @@ particular records in a file and perform operations upon them. field. * Command Line Field Separator:: Setting @code{FS} from the command-line. -* Full Line Fields:: Making the full line be a single field. +* Full Line Fields:: Making the full line be a single + field. * Field Splitting Summary:: Some final points and a summary table. * Constant Size:: Reading constant width data. * Splitting By Content:: Defining Fields By Content @@ -787,6 +788,7 @@ particular records in a file and perform operations upon them. version of @command{awk}. * POSIX/GNU:: The extensions in @command{gawk} not in POSIX @command{awk}. +* Feature History:: The history of the features in @command{gawk}. * Common Extensions:: Common Extensions Summary. * Ranges and Locales:: How locales used to affect regexp ranges. @@ -32174,6 +32176,7 @@ of the @value{DOCUMENT} where you can find more information. @command{awk}. * POSIX/GNU:: The extensions in @command{gawk} not in POSIX @command{awk}. +* Feature History:: The history of the features in @command{gawk}. * Common Extensions:: Common Extensions Summary. * Ranges and Locales:: How locales used to affect regexp ranges. * Contributors:: The major contributors to @command{gawk}. @@ -32752,6 +32755,612 @@ GCC for VAX and Alpha has not been tested for a while. @c ENDOFRANGE exgnot @c ENDOFRANGE posnot +@node Feature History +@appendixsec History of @command{gawk} Features + +@ignore +See the thread: +https://groups.google.com/forum/#!topic/comp.lang.awk/SAUiRuff30c +This motivated me to add this section. +@end ignore + +@ignore +I've tried to follow this general order, esp.@: for the 3.0 and 3.1 sections: + variables + special files + language changes (e.g., hex constants) + differences in standard awk functions + new gawk functions + new keywords + new command-line options + behavioral changes + new ports +Within each category, be alphabetical. +@end ignore + +This @value{SECTION} describes the features in @command{gawk} +over and above those in POSIX @command{awk}, +in the order they were added to @command{gawk}. + +Version 2.10 of @command{gawk} introduced the following features: + +@itemize @bullet +@item +The @env{AWKPATH} environment variable for specifying a path search for +the @option{-f} command-line option +(@pxref{Options}). + +@item +The @code{IGNORECASE} variable and its effects +(@pxref{Case-sensitivity}). + +@item +The @file{/dev/stdin}, @file{/dev/stdout}, @file{/dev/stderr} and +@file{/dev/fd/@var{N}} special file names +(@pxref{Special Files}). +@end itemize + +Version 2.13 of @command{gawk} introduced the following features: + +@itemize @bullet +@item +The @code{FIELDWIDTHS} variable and its effects +(@pxref{Constant Size}). + +@item +The @code{systime()} and @code{strftime()} built-in functions for obtaining +and printing timestamps +(@pxref{Time Functions}). + +@item +Additional command-line options +(@pxref{Options}): + +@itemize @minus +@item +The @option{-W lint} option to provide error and portability checking +for both the source code and at runtime. + +@item +The @option{-W compat} option to turn off the GNU extensions. + +@item +The @option{-W posix} option for full POSIX compliance. +@end itemize +@end itemize + +Version 2.14 of @command{gawk} introduced the following feature: + +@itemize @bullet +@item +The @code{next file} statement for skipping to the next data file +(@pxref{Nextfile Statement}). +@end itemize + +Version 2.15 of @command{gawk} introduced the following features: + +@itemize @bullet +@item +New variables (@pxref{Built-in Variables}): + +@itemize @minus +@item +@code{ARGIND}, which tracks the movement of @code{FILENAME} +through @code{ARGV}. + +@item +@code{ERRNO}, which contains the system error message when +@code{getline} returns @minus{}1 or @code{close()} fails. +@end itemize + +@item +The @file{/dev/pid}, @file{/dev/ppid}, @file{/dev/pgrpid}, and +@file{/dev/user} special file names. These have since been removed. + +@item +The ability to delete all of an array at once with @samp{delete @var{array}} +(@pxref{Delete}). + +@item +Command line option changes +(@pxref{Options}): + +@itemize @minus +@item +The ability to use GNU-style long-named options that start with @option{--}. + +@item +The @option{--source} option for mixing command-line and library-file +source code. +@end itemize +@end itemize + +Version 3.0 of @command{gawk} introduced the following features: + +@itemize @bullet +@item +New or changed variables: + +@itemize @minus +@item +@code{IGNORECASE} changed, now applying to string comparison as well +as regexp operations +(@pxref{Case-sensitivity}). + +@item +@code{RT}, which contains the input text that matched @code{RS} +(@pxref{Records}). +@end itemize + +@item +Full support for both POSIX and GNU regexps +(@pxref{Regexp}). + +@item +The @code{gensub()} function for more powerful text manipulation +(@pxref{String Functions}). + +@item +The @code{strftime()} function acquired a default time format, +allowing it to be called with no arguments +(@pxref{Time Functions}). + +@item +The ability for @code{FS} and for the third +argument to @code{split()} to be null strings +(@pxref{Single Character Fields}). + +@item +The ability for @code{RS} to be a regexp +(@pxref{Records}). + +@item +The @code{next file} statement became @code{nextfile} +(@pxref{Nextfile Statement}). + +@item +The @code{fflush()} function from the +Bell Laboratories research version of @command{awk} +(@pxref{I/O Functions}). + +@item +New command line options: + +@itemize @minus +@item +The @option{--lint-old} option to +warn about constructs that are not available in +the original Version 7 Unix version of @command{awk} +(@pxref{V7/SVR3.1}). + +@item +The @option{-m} option from the +Bell Laboratories research version of @command{awk} +This was later removed. + +@item +The @option{--re-interval} option to provide interval expressions in regexps +(@pxref{Regexp Operators}). + +@item +The @option{--traditional} option was added as a better name for +@option{--compat} (@pxref{Options}). +@end itemize + +@item +The use of GNU Autoconf to control the configuration process +(@pxref{Quick Installation}). + +@item +Amiga support. + +@end itemize + +Version 3.1 of @command{gawk} introduced the following features: + +@itemize @bullet +@item +New variables +(@pxref{Built-in Variables}): + +@itemize @minus +@item +@code{BINMODE}, for non-POSIX systems, +which allows binary I/O for input and/or output files +(@pxref{PC Using}). + +@item +@code{LINT}, which dynamically controls lint warnings. + +@item +@code{PROCINFO}, an array for providing process-related information. + +@item +@code{TEXTDOMAIN}, for setting an application's internationalization text domain +(@pxref{Internationalization}). +@end itemize + +@item +The ability to use octal and hexadecimal constants in @command{awk} +program source code +(@pxref{Nondecimal-numbers}). + +@item +The @samp{|&} operator for two-way I/O to a coprocess +(@pxref{Two-way I/O}). + +@item +The @file{/inet} special files for TCP/IP networking using @samp{|&} +(@pxref{TCP/IP Networking}). + +@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}). + +@item +The optional third argument to the @code{match()} function +for capturing text-matching subexpressions within a regexp +(@pxref{String Functions}). + +@item +Positional specifiers in @code{printf} formats for +making translations easier +(@pxref{Printf Ordering}). + +@item +A number of new built-in functions: + +@itemize @minus +@item +The @code{asort()} and @code{asorti()} functions for sorting arrays +(@pxref{Array Sorting}). + +@item +The @code{bindtextdomain()}, @code{dcgettext()} and @code{dcngettext()} functions +for internationalization +(@pxref{Programmer i18n}). + +@item +The @code{extension()} function and the ability to add +new built-in functions dynamically +(@pxref{Dynamic Extensions}). + +@item +The @code{mktime()} function for creating timestamps +(@pxref{Time Functions}). + +@item +The @code{and()}, @code{or()}, @code{xor()}, @code{compl()}, +@code{lshift()}, @code{rshift()}, and @code{strtonum()} functions +(@pxref{Bitwise Functions}). +@end itemize + +@item +@cindex @code{next file} statement +The support for @samp{next file} as two words was removed completely +(@pxref{Nextfile Statement}). + +@item +Additional commnd line options +(@pxref{Options}): + +@itemize @minus +@item +The @option{--dump-variables} option to print a list of all global variables. + +@item +The @option{--exec} option, for use in CGI scripts. + +@item +The @option{--gen-po} command-line option and the use of a leading +underscore to mark strings that should be translated +(@pxref{String Extraction}). + +@item +The @option{--non-decimal-data} option to allow non-decimal +input data +(@pxref{Nondecimal Data}). + +@item +The @option{--profile} option and @command{pgawk}, the +profiling version of @command{gawk}, for producing execution +profiles of @command{awk} programs +(@pxref{Profiling}). + +@item +The @option{--use-lc-numeric} option to force @command{gawk} +to use the locale's decimal point for parsing input data +(@pxref{Conversion}). +@end itemize + +@item +The use of GNU Automake to help in standardizing the configuration process +(@pxref{Quick Installation}). + +@item +The use of GNU @code{gettext} for @command{gawk}'s own message output +(@pxref{Gawk I18N}). + +@item +BeOS support. This was later removed. + +@item +Tandem support. This was later removed. + +@item +The Atari port became officially unsupported. + +@item +The source code changed to use ISO C standard-style function definitions. + +@item +POSIX compliance for @code{sub()} and @code{gsub()} +(@pxref{Gory Details}). + +@item +The @code{length()} function was extended to accept an array argument +and return the number of elements in the array +(@pxref{String Functions}). + +@item +The @code{strftime()} function acquired a third argument to +enable printing times as UTC +(@pxref{Time Functions}). +@end itemize + +Version 4.0 of @command{gawk} introduced the following features: + +@itemize @bullet + +@item +Variable additions: + +@itemize @minus +@item +@code{FPAT}, which allows you to specify a regexp that matches +the fields, instead of matching the field separator +(@pxref{Splitting By Content}). + +@item +If @code{PROCINFO["sorted_in"]} exists, @samp{for(iggy in foo)} loops sort the +indices before looping over them. The value of this element +provides control over how the indices are sorted before the loop +traversal starts +(@pxref{Controlling Scanning}). + +@item +@code{PROCINFO["strftime"]}, which holds +the default format for @code{strftime()} +(@pxref{Time Functions}). +@end itemize + +@item +The special files @file{/dev/pid}, @file{/dev/ppid}, @file{/dev/pgrpid} +and @file{/dev/user} were removed. + +@item +Support for IPv6 was added via the @file{/inet6} special file. +@file{/inet4} forces IPv4 and @file{/inet} chooses the system +default, which is probably IPv4 +(@pxref{TCP/IP Networking}). + +@item +The use of @samp{\s} and @samp{\S} escape sequences in regular expressions +(@pxref{GNU Regexp Operators}). + +@item +Interval expressions became part of default regular expressions +(@pxref{Regexp Operators}). + +@item +POSIX character classes work even with @option{--traditional} +(@pxref{Regexp Operators}). + +@item +@code{break} and @code{continue} became invalid outside a loop, +even with @option{--traditional} +(@pxref{Break Statement}, and also see +@ref{Continue Statement}). + +@item +@code{fflush()}, @code{nextfile}, and @samp{delete @var{array}} +are allowed if @option{--posix} or @option{--traditional}, since they +are all now part of POSIX. + +@item +An optional third argument to +@code{asort()} and @code{asorti()}, specifying how to sort +(@pxref{String Functions}). + +@item +The behavior of @code{fflush()} changed to match Brian Kernighan's @command{awk} +and for POSIX; now both @samp{fflush()} and @samp{fflush("")} +flush all open output redirections +(@pxref{I/O Functions}). + +@item +The @code{isarray()} +function which distinguishes if an item is an array +or not, to make it possible to traverse multidimensional arrays +(@pxref{Type Functions}). + +@item +The @code{patsplit()} +function which gives the same capability as @code{FPAT}, for splitting +(@pxref{String Functions}). + +@item +An optional fourth argument to the @code{split()} function, +which is an array to hold the values of the separators +(@pxref{String Functions}). + +@item +Arrays of arrays +(@pxref{Arrays of Arrays}). + +@item +The @code{BEGINFILE} and @code{ENDFILE} special patterns +(@pxref{BEGINFILE/ENDFILE}). + +@item +Indirect function calls +(@pxref{Indirect Calls}). + +@item +@code{switch} / @code{case} are enabled by default +(@pxref{Switch Statement}). + +@item +Command line option changes +(@pxref{Options}): + +@itemize @minus +@item +The @option{-b} and @option{--characters-as-bytes} options +which prevent @command{gawk} from treating input as a multibyte string. + +@item +The redundant @option{--compat}, @option{--copyleft}, and @option{--usage} +long options were removed. + +@item +The @option{--gen-po} option was finally renamed to the correct @option{--gen-pot}. + +@item +The @option{--sandbox} option which disables certain features. + +@item +All long options acquired corresponding short options, for use in @samp{#!} scripts. +@end itemize + +@item +Directories named on the command line now produce a warning, not a fatal +error, unless @option{--posix} or @option{--traditional} are used +(@pxref{Command line directories}). + +@item +The @command{gawk} internals were rewritten, bringing the @command{dgawk} +debugger and possibly improved performance +(@pxref{Debugger}). + +@item +Per the GNU Coding Standards, dynamic extensions must now define +a global symbol indicating that they are GPL-compatible +(@pxref{Plugin License}). + +@item +In POSIX mode, string comparisons use @code{strcoll()} / @code{wcscoll()} +(@pxref{POSIX String Comparison}). + +@item +The option for raw sockets was removed, since it was never implemented +(@pxref{TCP/IP Networking}). + +@item +Ranges of the form @code{[d-h]} are treated as if they were in the +C locale, no matter what kind of regexp is being used, and even if +@option{--posix} +(@pxref{Ranges and Locales}). + +@item +Support was removed for the following systems: + +@itemize @minus +@item +Atari + +@item +Amiga + +@item +BeOS + +@item +Cray + +@item +MIPS RiscOS + +@item +MS-DOS with Microsoft Compiler + +@item +MS-Windows with Microsoft Compiler + +@item +NeXT + +@item +SunOS 3.x, Sun 386 (Road Runner) + +@item +Tandem (non-POSIX) + +@item +Prestandard VAX C compiler for VAX/VMS +@end itemize +@end itemize + +Version 4.1 of @command{gawk} introduced the following features: + +@itemize @bullet + +@item +Three new arrays: +@code{SYMTAB}, @code{FUNCTAB}, and @code{PROCINFO["identifiers"]} +(@pxref{Auto-set}). + +@item +The three executables @command{gawk}, @command{pgawk}, and @command{dgawk}, were merged into +one, named just @command{gawk}. As a result the command line options changed. + +@item +Command line option changes +(@pxref{Options}): + +@itemize @minus +@item +The @option{-D} option invokes the debugger. + +@item +The @option{-i} and @option{--include} options +load @command{awk} library files. + +@item +The @option{-l} and @option{--load} options for load compiled dynamic extensions. + +@item +The @option{-M} and @option{--bignum} options enable MPFR. + +@item +The @option{-o} only does pretty-printing. + +@item +The @option{-p} option is used for profiling. + +@item +The @option{-R} option was removed. +@end itemize + +@item +Support for high precision arithmetic with MPFR. +(@pxref{Gawk and MPFR}). + +@item +The @code{and()}, @code{or()} and @code{xor()} functions +allow any number of arguments, +with a minimum of two +(@pxref{Bitwise Functions}). + +@item +The dynamic extension interface was completely redone +(@pxref{Dynamic Extensions}). + +@end itemize + +@c XXX ADD MORE STUFF HERE + @node Common Extensions @appendixsec Common Extensions Summary @@ -32767,7 +33376,7 @@ the three most widely-used freely available versions of @command{awk} @item @samp{\x} Escape sequence @tab X @tab X @tab X @item @code{RS} as regexp @tab @tab X @tab X @item @code{FS} as null string @tab X @tab X @tab X -@item @file{/dev/stdin} special file @tab X @tab @tab X +@item @file{/dev/stdin} special file @tab X @tab X @tab X @item @file{/dev/stdout} special file @tab X @tab X @tab X @item @file{/dev/stderr} special file @tab X @tab X @tab X @item @code{**} and @code{**=} operators @tab X @tab @tab X @@ -32775,7 +33384,7 @@ the three most widely-used freely available versions of @command{awk} @item @code{func} keyword @tab X @tab @tab X @item @code{nextfile} statement @tab X @tab X @tab X @item @code{delete} without subscript @tab X @tab X @tab X -@item @code{length()} of an array @tab X @tab @tab X +@item @code{length()} of an array @tab X @tab X @tab X @item @code{BINMODE} variable @tab @tab X @tab X @item Time related functions @tab @tab X @tab X @end multitable -- cgit v1.2.3 From 305c76c58fa92e4907ff82763362d7c1aa0d15ff Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 24 Jan 2014 10:20:01 +0200 Subject: Update copyright year in configure.ac field.c. --- ChangeLog | 4 ++++ configure.ac | 2 +- field.c | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index d75916f9..aac38973 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2014-01-24 Arnold D. Robbins + + * configure.ac, field.c: Update copyright year. + 2014-01-19 Arnold D. Robbins * awkgram.y (negate_num): Handle the case of -0 for MPFR; the sign diff --git a/configure.ac b/configure.ac index 306392d4..9929a0b8 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-2013 the Free Software Foundation, Inc. +dnl Copyright (C) 1995-2014 the Free Software Foundation, Inc. dnl dnl This file is part of GAWK, the GNU implementation of the dnl AWK Programming Language. diff --git a/field.c b/field.c index 5a1bf562..64ee1f02 100644 --- a/field.c +++ b/field.c @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 1986, 1988, 1989, 1991-2013 the Free Software Foundation, Inc. + * Copyright (C) 1986, 1988, 1989, 1991-2014 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. -- cgit v1.2.3 From 944f051219045da8422813a31c9a3c9a99a78bb7 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 24 Jan 2014 10:21:16 +0200 Subject: Sync pc/Makefile.tst with mainline test/Makefile.am. --- pc/ChangeLog | 4 ++++ pc/Makefile.tst | 22 +++++++++++++--------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/pc/ChangeLog b/pc/ChangeLog index 97fa6d94..771b24f3 100644 --- a/pc/ChangeLog +++ b/pc/ChangeLog @@ -1,3 +1,7 @@ +2014-01-24 Scott Deifik + + * Makefile.tst: Sync with mainline. + 2014-01-20 Arnold D. Robbins * Makefile.tst (split_after_fpat, mpfrnegzero): Added, to diff --git a/pc/Makefile.tst b/pc/Makefile.tst index c454cae9..0bc4365c 100644 --- a/pc/Makefile.tst +++ b/pc/Makefile.tst @@ -412,7 +412,7 @@ getline2:: awkpath:: @echo $@ - @AWKPATH=""$(srcdir)"$(PATH_SEPARATOR)"$(srcdir)"/lib" $(AWK) -f awkpath.awk >_$@ + @AWKPATH="$(srcdir)$(PATH_SEPARATOR)$(srcdir)/lib" $(AWK) -f awkpath.awk >_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ argtest:: @@ -496,7 +496,7 @@ nors:: @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ fmtspcl.ok: fmtspcl.tok - @$(AWK) -v "sd="$(srcdir)"" 'BEGIN {pnan = sprintf("%g",sqrt(-1)); nnan = sprintf("%g",-sqrt(-1)); pinf = sprintf("%g",-log(0)); ninf = sprintf("%g",log(0))} {sub(/positive_nan/,pnan); sub(/negative_nan/,nnan); sub(/positive_infinity/,pinf); sub(/negative_infinity/,ninf); sub(/fmtspcl/,(sd"/fmtspcl")); print}' < "$(srcdir)"/fmtspcl.tok > $@ 2>/dev/null + @$(AWK) -v "sd=$(srcdir)" 'BEGIN {pnan = sprintf("%g",sqrt(-1)); nnan = sprintf("%g",-sqrt(-1)); pinf = sprintf("%g",-log(0)); ninf = sprintf("%g",log(0))} {sub(/positive_nan/,pnan); sub(/negative_nan/,nnan); sub(/positive_infinity/,pinf); sub(/negative_infinity/,ninf); sub(/fmtspcl/,(sd"/fmtspcl")); print}' < "$(srcdir)"/fmtspcl.tok > $@ 2>/dev/null fmtspcl: fmtspcl.ok @echo $@ @@ -662,7 +662,7 @@ widesub4:: ignrcas2:: @echo $@ - @GAWKLOCALE=en_US ; export GAWKLOCALE ; \ + @GAWKLOCALE=en_US.UTF-8 ; export GAWKLOCALE ; \ $(AWK) -f "$(srcdir)"/$@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >> _$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ @@ -938,7 +938,7 @@ mpfrbigint: jarebug:: @echo $@ @echo Expect jarebug to fail with DJGPP and MinGW. - @"$(srcdir)"/$@.sh "$(AWKPROG)" ""$(srcdir)"/$@.awk" ""$(srcdir)"/$@.in" "_$@" + @"$(srcdir)"/$@.sh "$(AWKPROG)" "$(srcdir)"/$@.awk "$(srcdir)"/$@.in "_$@" @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ ordchr2:: @@ -1044,10 +1044,14 @@ readdir: @-$(CMP) $@.ok _$@ && rm -f $@.ok _$@ fts: - @if [ "`uname`" = IRIX ]; then \ + @case `uname` in \ + IRIX) \ echo This test may fail on IRIX systems when run on an NFS filesystem.; \ - echo If it does, try rerunning on an xfs filesystem. ; \ - fi + echo If it does, try rerunning on an xfs filesystem. ;; \ + CYGWIN*) \ + echo This test may fail on CYGWIN systems when run on an NFS filesystem.; \ + echo If it does, try rerunning on an ntfs filesystem. ;; \ + esac @echo $@ @echo Expect $@ to fail with MinGW because function 'fts' is not defined. @$(AWK) -f "$(srcdir)"/fts.awk || echo EXIT CODE: $$? >>_$@ @@ -2487,8 +2491,8 @@ time: # Targets generated for other tests: $(srcdir)/Maketests: $(srcdir)/Makefile.am $(srcdir)/Gentests - files=`cd ""$(srcdir)"" && echo *.awk *.in`; \ - $(AWK) -f "$(srcdir)"/Gentests ""$(srcdir)"/Makefile.am" $$files > "$(srcdir)"/Maketests + files=`cd "$(srcdir)" && echo *.awk *.in`; \ + $(AWK) -f "$(srcdir)"/Gentests "$(srcdir)"/Makefile.am $$files > "$(srcdir)"/Maketests clean: rm -fr _* core core.* fmtspcl.ok junk strftime.ok test1 test2 \ -- cgit v1.2.3 From 50dc29a3732f98eaeabd1f1f4ba9de5949adfed6 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sat, 25 Jan 2014 20:56:17 +0200 Subject: Add expected failure warnings in pc/Makefile.tst. --- pc/ChangeLog | 5 +++++ pc/Makefile.tst | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/pc/ChangeLog b/pc/ChangeLog index 771b24f3..c18e087e 100644 --- a/pc/ChangeLog +++ b/pc/ChangeLog @@ -1,3 +1,8 @@ +2014-01-20 Arnold D. Robbins + + * Makefile.tst (mbprintf4, backbigs1, backsmalls1): Add warning + that the tests are expected to fail with DJGPP. + 2014-01-24 Scott Deifik * Makefile.tst: Sync with mainline. diff --git a/pc/Makefile.tst b/pc/Makefile.tst index 0bc4365c..c0ec07a1 100644 --- a/pc/Makefile.tst +++ b/pc/Makefile.tst @@ -799,7 +799,7 @@ mbprintf3:: mbprintf4:: @echo $@ - @echo Expect mbprintf4 to fail with MinGW + @echo Expect mbprintf4 to fail with MinGW and DJGPP @GAWKLOCALE=en_US.UTF-8 ; export GAWKLOCALE ; \ $(AWK) -f "$(srcdir)"/$@.awk "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >> _$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ @@ -1111,14 +1111,14 @@ dfamb1: backbigs1: @echo $@ - @echo Expect backbigs1 to fail with MinGW + @echo Expect backbigs1 to fail with MinGW and DJGPP @[ -z "$$GAWKLOCALE" ] && GAWKLOCALE=en_US.UTF-8; \ AWKPATH="$(srcdir)" $(AWK) -f $@.awk "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ backsmalls1: @echo $@ - @echo Expect backsmalls1 to fail with MinGW + @echo Expect backsmalls1 to fail with MinGW and DJGPP @[ -z "$$GAWKLOCALE" ] && GAWKLOCALE=en_US.UTF-8; \ AWKPATH="$(srcdir)" $(AWK) -f $@.awk "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ -- cgit v1.2.3 From 8beb41f95ad7c273eab9c0494ffb0acd7ace2800 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sat, 25 Jan 2014 21:21:40 +0200 Subject: Update to latest texinfo.tex. --- doc/ChangeLog | 6 ++ doc/gawk.texi | 14 +++++ doc/gawktexi.in | 14 +++++ doc/texinfo.tex | 180 ++++++++++++++++++++++++++++++++++++-------------------- 4 files changed, 149 insertions(+), 65 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 1fc81f20..dce9658b 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,9 @@ +2014-01-25 Arnold D. Robbins + + * texinfo.tex: Updated to current version. + * gawktexi.in: Add magic stuff so that PDFs have "dark red" + links like before. + 2014-01-23 Arnold D. Robbins * gawktexi.in (Feature History): New node. diff --git a/doc/gawk.texi b/doc/gawk.texi index 1001d03c..6c3e4c3a 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -19,6 +19,20 @@ * awk: (gawk)Invoking gawk. Text scanning and processing. @end direntry +@ifset FOR_PRINT +@tex +\gdef\xrefprintnodename#1{``#1''} +@end tex +@end ifset +@ifclear FOR_PRINT +@c With early 2014 texinfo.tex, restore PDF links and colors +@tex +\gdef\linkcolor{0.5 0.09 0.12} % Dark Red +\gdef\urlcolor{0.5 0.09 0.12} % Also +\global\urefurlonlylinktrue +@end tex +@end ifclear + @set xref-automatic-section-title @c The following information should be updated here only! diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 6c015c81..f8c73cca 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -14,6 +14,20 @@ * awk: (gawk)Invoking gawk. Text scanning and processing. @end direntry +@ifset FOR_PRINT +@tex +\gdef\xrefprintnodename#1{``#1''} +@end tex +@end ifset +@ifclear FOR_PRINT +@c With early 2014 texinfo.tex, restore PDF links and colors +@tex +\gdef\linkcolor{0.5 0.09 0.12} % Dark Red +\gdef\urlcolor{0.5 0.09 0.12} % Also +\global\urefurlonlylinktrue +@end tex +@end ifclear + @set xref-automatic-section-title @c The following information should be updated here only! diff --git a/doc/texinfo.tex b/doc/texinfo.tex index 9cf29f2e..704d6645 100644 --- a/doc/texinfo.tex +++ b/doc/texinfo.tex @@ -3,7 +3,7 @@ % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % -\def\texinfoversion{2013-06-21.17} +\def\texinfoversion{2014-01-16.10} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, @@ -281,9 +281,9 @@ \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\lastcolordefs}% \mark{% - \the\toks0 \the\toks2 - \noexpand\or \the\toks4 \the\toks6 - \noexpand\else \the\toks8 + \the\toks0 \the\toks2 % 0: top marks (\last...) + \noexpand\or \the\toks4 \the\toks6 % 1: bottom marks (default, \prev...) + \noexpand\else \the\toks8 % 2: color marks }% } % \topmark doesn't work for the very first chapter (after the title @@ -322,10 +322,13 @@ % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). + \def\commmonheadfootline{\let\hsize=\pagewidth \texinfochars} + % \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi - \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% + \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}% + % \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi - \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% + \global\setbox\footlinebox = \vbox{\commmonheadfootline \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to @@ -1135,10 +1138,12 @@ output) for that.)} \ifpdf % - % Color manipulation macros based on pdfcolor.tex, + % Color manipulation macros using ideas from pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead - % of actual black. + % of actual black. The dark red here is dark enough to print on paper as + % nearly black, but still distinguishable for online viewing. We use + % black by default, though. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % @@ -1248,10 +1253,9 @@ output) for that.)} % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % - % by default, use a color that is dark enough to print on paper as - % nearly black, but still distinguishable for online viewing. - \def\urlcolor{\rgbDarkRed} - \def\linkcolor{\rgbDarkRed} + % by default, use black for everything. + \def\urlcolor{\rgbBlack} + \def\linkcolor{\rgbBlack} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines @@ -2377,8 +2381,10 @@ end \ifx\next,% \else\ifx\next-% \else\ifx\next.% + \else\ifx\next\.% + \else\ifx\next\comma% \else\ptexslash - \fi\fi\fi + \fi\fi\fi\fi\fi \aftersmartic } @@ -2519,7 +2525,9 @@ end \ifx\codedashprev\codedash \else \discretionary{}{}{}\fi \fi - \global\let\codedashprev=\next + % we need the space after the = for the case when \next itself is a + % space token; it would get swallowed otherwise. As in @code{- a}. + \global\let\codedashprev= \next } } \def\normaldash{-} @@ -2567,37 +2575,21 @@ end \let\file=\code \let\option=\code -% @uref (abbreviation for `urlref') takes an optional (comma-separated) -% second argument specifying the text to display and an optional third -% arg as text to display instead of (rather than in addition to) the url -% itself. First (mandatory) arg is the url. -% (This \urefnobreak definition isn't used now, leaving it for a while -% for comparison.) -\def\urefnobreak#1{\dourefnobreak #1,,,\finish} -\def\dourefnobreak#1,#2,#3,#4\finish{\begingroup - \unsepspaces - \pdfurl{#1}% - \setbox0 = \hbox{\ignorespaces #3}% - \ifdim\wd0 > 0pt - \unhbox0 % third arg given, show only that - \else - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \ifpdf - \unhbox0 % PDF: 2nd arg given, show only it - \else - \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url - \fi - \else - \code{#1}% only url given, so show it - \fi - \fi - \endlink -\endgroup} +% @uref (abbreviation for `urlref') aka @url takes an optional +% (comma-separated) second argument specifying the text to display and +% an optional third arg as text to display instead of (rather than in +% addition to) the url itself. First (mandatory) arg is the url. -% This \urefbreak definition is the active one. +% TeX-only option to allow changing PDF output to show only the second +% arg (if given), and not the url (which is then just the link target). +\newif\ifurefurlonlylink + +% The main macro is \urefbreak, which allows breaking at expected +% places within the url. (There used to be another version, which +% didn't support automatic breaking.) \def\urefbreak{\begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak +% \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \unsepspaces @@ -2606,12 +2598,19 @@ end \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else - \setbox0 = \hbox{\ignorespaces #2}% + \setbox0 = \hbox{\ignorespaces #2}% look for second arg \ifdim\wd0 > 0pt \ifpdf - \unhbox0 % PDF: 2nd arg given, show only it + \ifurefurlonlylink + % PDF plus option to not display url, show just arg + \unhbox0 + \else + % PDF, normally display both arg and url for consistency, + % visibility, if the pdf is eventually used to print, etc. + \unhbox0\ (\urefcode{#1})% + \fi \else - \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url + \unhbox0\ (\urefcode{#1})% DVI, always show arg and url \fi \else \urefcode{#1}% only url given, so show it @@ -2887,6 +2886,15 @@ end \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } +% +% @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if +% FMTNAME is tex, else ELSE-TEXT. +\long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish} +\long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{% + \def\inlinefmtname{#1}% + \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi +} +% % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being @@ -2903,6 +2911,23 @@ end \endgroup % close group opened by \tex. } +% @inlineifset{VAR, TEXT} expands TEXT if VAR is @set. +% +\long\def\inlineifset#1{\doinlineifset #1,\finish} +\long\def\doinlineifset#1,#2,\finish{% + \def\inlinevarname{#1}% + \expandafter\ifx\csname SET\inlinevarname\endcsname\relax + \else\ignorespaces#2\fi +} + +% @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set. +% +\long\def\inlineifclear#1{\doinlineifclear #1,\finish} +\long\def\doinlineifclear#1,#2,\finish{% + \def\inlinevarname{#1}% + \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi +} + \message{glyphs,} % and logos. @@ -3658,7 +3683,7 @@ end \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi % - % Try typesetting the item mark that if the document erroneously says + % Try typesetting the item mark so that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if @@ -4198,7 +4223,7 @@ end \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { - \catcode`\- = \active \catcode`\_ = \active + \catcode`\-=\active \catcode`\_=\active % \gdef\makevalueexpandable{% \let\value = \expandablevalue @@ -4218,7 +4243,12 @@ end % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). -% +% +% Unfortunately, this has the consequence that when _ is in the *value* +% of an @set, it does not print properly in the roman fonts (get the cmr +% dot accent at position 126 instead). No fix comes to mind, and it's +% been this way since 2003 or earlier, so just ignore it. +% \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% @@ -5905,7 +5935,7 @@ end % % Now the second mark, after the heading break. No break points % between here and the heading. - \let\prevsectiondefs=\lastsectiondefs + \global\let\prevsectiondefs=\lastsectiondefs \domark % % Only insert the space after the number if we have a section number. @@ -6272,8 +6302,8 @@ end \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other - \catcode`\`=\other - \catcode`\'=\other + \catcode `\`=\other + \catcode `\'=\other \escapechar=`\\ % % ' is active in math mode (mathcode"8000). So reset it, and all our @@ -6297,7 +6327,7 @@ end \let\/=\ptexslash \let\*=\ptexstar \let\t=\ptext - \expandafter \let\csname top\endcsname=\ptextop % outer + \expandafter \let\csname top\endcsname=\ptextop % we've made it outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% @@ -8306,6 +8336,7 @@ end \gdef\footnote{% \let\indent=\ptexindent \let\noindent=\ptexnoindent + % \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % @@ -8329,6 +8360,11 @@ end % \gdef\dofootnote{% \insert\footins\bgroup + % + % Nested footnotes are not supported in TeX, that would take a lot + % more work. (\startsavinginserts does not suffice.) + \let\footnote=\errfootnote + % % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. @@ -8366,13 +8402,19 @@ end } }%end \catcode `\@=11 +\def\errfootnote{% + \errhelp=\EMsimple + \errmessage{Nested footnotes not supported in texinfo.tex, + even though they work in makeinfo; sorry} +} + % 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. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. - +% % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. @@ -9940,11 +9982,9 @@ directory should work if nowhere else does.} \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote -\catcode`\~=\active -\def~{{\tt\char126}} +\catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde \chardef\hat=`\^ -\catcode`\^=\active -\def^{{\tt \hat}} +\catcode`\^=\active \def\activehat{{\tt \hat}} \let^ = \activehat \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} @@ -9954,16 +9994,26 @@ directory should work if nowhere else does.} \catcode`\|=\active \def|{{\tt\char124}} + \chardef \less=`\< -\catcode`\<=\active -\def<{{\tt \less}} +\catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless \chardef \gtr=`\> -\catcode`\>=\active -\def>{{\tt \gtr}} -\catcode`\+=\active -\def+{{\tt \char 43}} -\catcode`\$=\active -\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix +\catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr +\catcode`\+=\active \def+{{\tt \char 43}} +\catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix + +% used for headline/footline in the output routine, in case the page +% breaks in the middle of an @tex block. +\def\texinfochars{% + \let< = \activeless + \let> = \activegtr + \let~ = \activetilde + \let^ = \activehat + \markupsetuplqdefault \markupsetuprqdefault + \let\b = \strong + \let\i = \smartitalic + % in principle, all other definitions in \tex have to be undone too. +} % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. -- cgit v1.2.3 From c5530f370ba70004c2e0bbc712038eaacfd6b2ce Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 26 Jan 2014 14:49:27 +0200 Subject: Next tarball, bumps version. --- configure | 20 ++++++++++---------- configure.ac | 2 +- pc/config.h | 6 +++--- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/configure b/configure index c51e21ab..b94d92a4 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for GNU Awk 4.1.0b. +# Generated by GNU Autoconf 2.69 for GNU Awk 4.1.0c. # # Report bugs to . # @@ -580,8 +580,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GNU Awk' PACKAGE_TARNAME='gawk' -PACKAGE_VERSION='4.1.0b' -PACKAGE_STRING='GNU Awk 4.1.0b' +PACKAGE_VERSION='4.1.0c' +PACKAGE_STRING='GNU Awk 4.1.0c' PACKAGE_BUGREPORT='bug-gawk@gnu.org' PACKAGE_URL='http://www.gnu.org/software/gawk/' @@ -1324,7 +1324,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures GNU Awk 4.1.0b to adapt to many kinds of systems. +\`configure' configures GNU Awk 4.1.0c to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1394,7 +1394,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GNU Awk 4.1.0b:";; + short | recursive ) echo "Configuration of GNU Awk 4.1.0c:";; esac cat <<\_ACEOF @@ -1512,7 +1512,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -GNU Awk configure 4.1.0b +GNU Awk configure 4.1.0c generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2221,7 +2221,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by GNU Awk $as_me 4.1.0b, which was +It was created by GNU Awk $as_me 4.1.0c, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3104,7 +3104,7 @@ fi # Define the identity of the package. PACKAGE='gawk' - VERSION='4.1.0b' + VERSION='4.1.0c' cat >>confdefs.h <<_ACEOF @@ -11539,7 +11539,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by GNU Awk $as_me 4.1.0b, which was +This file was extended by GNU Awk $as_me 4.1.0c, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -11607,7 +11607,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -GNU Awk config.status 4.1.0b +GNU Awk config.status 4.1.0c configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 9929a0b8..70d19009 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ dnl dnl Process this file with autoconf to produce a configure script. -AC_INIT([GNU Awk], 4.1.0b, bug-gawk@gnu.org, gawk) +AC_INIT([GNU Awk], 4.1.0c, bug-gawk@gnu.org, gawk) # This is a hack. Different versions of install on different systems # are just too different. Chuck it and use install-sh. diff --git a/pc/config.h b/pc/config.h index 4314ddbb..cd489877 100644 --- a/pc/config.h +++ b/pc/config.h @@ -423,7 +423,7 @@ #define PACKAGE_NAME "GNU Awk" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "GNU Awk 4.1.0b" +#define PACKAGE_STRING "GNU Awk 4.1.0c" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "gawk" @@ -432,7 +432,7 @@ #define PACKAGE_URL "http://www.gnu.org/software/gawk/" /* Define to the version of this package. */ -#define PACKAGE_VERSION "4.1.0b" +#define PACKAGE_VERSION "4.1.0c" /* Define to 1 if *printf supports %F format */ #undef PRINTF_HAS_F_FORMAT @@ -494,7 +494,7 @@ /* Version number of package */ -#define VERSION "4.1.0b" +#define VERSION "4.1.0c" /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE -- cgit v1.2.3 From 6520f31b24575ce7308a8b42c8b617568db6c4d8 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 28 Jan 2014 18:55:11 +0200 Subject: Fix the test suite for the pc ports. test/strftime.awk: If DATECMD variable is non-empty, use it instead of the literal "date" as the 'date'-like command. pc/Makefile.tst (strftime): Pass the value of 'date' command through the DATECMD variable. (readdir): Adapt to changes in test/readdir0.awk. --- pc/ChangeLog | 6 ++++++ pc/Makefile.tst | 8 +++++--- test/ChangeLog | 5 +++++ test/strftime.awk | 6 +++++- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/pc/ChangeLog b/pc/ChangeLog index c18e087e..5f75283f 100644 --- a/pc/ChangeLog +++ b/pc/ChangeLog @@ -1,3 +1,9 @@ +2014-01-28 Eli Zaretskii + + * Makefile.tst (strftime): Pass the value of 'date' command + through the DATECMD variable. + (readdir): Adapt to changes in test/readdir0.awk. + 2014-01-20 Arnold D. Robbins * Makefile.tst (mbprintf4, backbigs1, backsmalls1): Add warning diff --git a/pc/Makefile.tst b/pc/Makefile.tst index c0ec07a1..e843eaa7 100644 --- a/pc/Makefile.tst +++ b/pc/Makefile.tst @@ -439,7 +439,7 @@ strftime:: # (LC_ALL=C date) | $(AWK) -v OUTPUT=_$@ -f "$(srcdir)"/strftime.awk @GAWKLOCALE=C; export GAWKLOCALE; \ TZ=GMT0; export TZ; \ - (LC_ALL=C $(DATE)) | $(AWK) -v OUTPUT=_$@ -f "$(srcdir)"/strftime.awk + $(AWK) -v OUTPUT=_$@ -v DATECMD="$(DATE)" -f "$(srcdir)"/strftime.awk @-$(CMP) strftime.ok _$@ && rm -f _$@ strftime.ok || exit 0 litoct:: @@ -1039,8 +1039,10 @@ readdir: @echo $@ @echo This test may fail on MinGW if $(LS) does not report full Windows file index as the inode @$(AWK) -f "$(srcdir)"/readdir.awk $(top_srcdir) > _$@ -# @ls -afli $(top_srcdir) | sed 1d | $(AWK) -f "$(srcdir)"/readdir0.awk -v extout=_$@ $(top_srcdir) > $@.ok - @$(LS) -afli $(top_srcdir) | sed 1d | $(AWK) -f "$(srcdir)"/readdir0.awk -v extout=_$@ $(top_srcdir) > $@.ok + @$(LS) -afi "$(top_srcdir)" > _dirlist + @$(LS) -lna "$(top_srcdir)" | sed 1d > _longlist + @$(AWK) -f "$(srcdir)"/readdir0.awk -v extout=_$@ \ + -v dirlist=_dirlist -v longlist=_longlist > $@.ok @-$(CMP) $@.ok _$@ && rm -f $@.ok _$@ fts: diff --git a/test/ChangeLog b/test/ChangeLog index d9ecfe5f..ff57e6da 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2014-01-28 Eli Zaretskii + + * strftime.awk: If DATECMD variable is non-empty, use it instead + of the literal "date" as the 'date'-like command. + 2014-01-19 Arnold D. Robbins * Makefile.am (mpfrnegzero): New test. diff --git a/test/strftime.awk b/test/strftime.awk index a52957f0..73cdc698 100644 --- a/test/strftime.awk +++ b/test/strftime.awk @@ -8,7 +8,11 @@ BEGIN { maxtries = 10 - datecmd = "date" + # On DOS/Windows, DATECMD is set by the Makefile to point to + # Unix-like 'date' command. + datecmd = DATECMD + if (datecmd == "") + datecmd = "date" fmt = "%a %b %d %H:%M:%S %Z %Y" # loop until before equals after, thereby protecting -- cgit v1.2.3 From d6c537443dc5954ca21a849b45dc5adedca6211c Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 28 Jan 2014 21:47:32 +0200 Subject: Fix bug that only showed up on 32 bit systems with MPFR. --- ChangeLog | 7 +++++++ awkgram.c | 13 +++++++++---- awkgram.y | 13 +++++++++---- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index aac38973..3849492b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2014-01-28 Arnold D. Robbins + + * awkgram.y (negate_num): If just a double, return. Fixes a bug + that showed up on 32-bit systems with MPFR. Thanks to Eli Zaretskii + and Corinna Vinschen for the report. Also, free the MPZ integer. + Thanks to valgrind for the report. + 2014-01-24 Arnold D. Robbins * configure.ac, field.c: Update copyright year. diff --git a/awkgram.c b/awkgram.c index 657a1627..58ac3480 100644 --- a/awkgram.c +++ b/awkgram.c @@ -4514,10 +4514,13 @@ negate_num(NODE *n) { int tval = 0; - if (! is_mpg_number(n)) + if (! is_mpg_number(n)) { n->numbr = -n->numbr; + return; + } + #ifdef HAVE_MPFR - else if (is_mpg_integer(n)) { + if (is_mpg_integer(n)) { if (! iszero(n)) { mpz_neg(n->mpg_i, n->mpg_i); return; @@ -4526,9 +4529,11 @@ negate_num(NODE *n) /* * 0 --> -0 conversion. Requires turning the MPG integer * into an MPFR float. - * - * So, convert and fall through. */ + + mpz_clear(n->mpg_i); /* release the integer storage */ + + /* Convert and fall through. */ tval = mpfr_set_d(n->mpg_numbr, 0.0, ROUND_MODE); IEEE_FMT(n->mpg_numbr, tval); n->flags &= ~MPZN; diff --git a/awkgram.y b/awkgram.y index fd83d6db..6bbc150a 100644 --- a/awkgram.y +++ b/awkgram.y @@ -1966,10 +1966,13 @@ negate_num(NODE *n) { int tval = 0; - if (! is_mpg_number(n)) + if (! is_mpg_number(n)) { n->numbr = -n->numbr; + return; + } + #ifdef HAVE_MPFR - else if (is_mpg_integer(n)) { + if (is_mpg_integer(n)) { if (! iszero(n)) { mpz_neg(n->mpg_i, n->mpg_i); return; @@ -1978,9 +1981,11 @@ negate_num(NODE *n) /* * 0 --> -0 conversion. Requires turning the MPG integer * into an MPFR float. - * - * So, convert and fall through. */ + + mpz_clear(n->mpg_i); /* release the integer storage */ + + /* Convert and fall through. */ tval = mpfr_set_d(n->mpg_numbr, 0.0, ROUND_MODE); IEEE_FMT(n->mpg_numbr, tval); n->flags &= ~MPZN; -- cgit v1.2.3 From ab8d7416c064c94e75d80431270321ceaa866719 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 28 Jan 2014 21:51:30 +0200 Subject: Sync dfa.c with GNU grep. --- ChangeLog | 5 +++++ dfa.c | 8 -------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3849492b..ee5fae95 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,6 +5,11 @@ and Corinna Vinschen for the report. Also, free the MPZ integer. Thanks to valgrind for the report. + Unrelated: + + * dfa.c: Sync with GNU grep - removed some special cased code + for grep. + 2014-01-24 Arnold D. Robbins * configure.ac, field.c: Update copyright year. diff --git a/dfa.c b/dfa.c index ac1cf9a0..ef456e11 100644 --- a/dfa.c +++ b/dfa.c @@ -1136,7 +1136,6 @@ parse_bracket_exp (void) work_mbc->range_ends[work_mbc->nranges++] = case_fold ? towlower (wc2) : (wchar_t) wc2; -#ifndef GREP if (case_fold && (iswalpha (wc) || iswalpha (wc2))) { REALLOC_IF_NECESSARY (work_mbc->range_sts, @@ -1146,7 +1145,6 @@ parse_bracket_exp (void) range_ends_al, work_mbc->nranges + 1); work_mbc->range_ends[work_mbc->nranges++] = towupper (wc2); } -#endif } else { @@ -1182,11 +1180,7 @@ parse_bracket_exp (void) work_mbc->nchars + 1); work_mbc->chars[work_mbc->nchars++] = wc; } -#ifdef GREP - continue; -#else wc = towupper (wc); -#endif } if (!setbit_wc (wc, ccl)) { @@ -1780,13 +1774,11 @@ atom (void) else if (MBS_SUPPORT && tok == WCHAR) { addtok_wc (case_fold ? towlower (wctok) : wctok); -#ifndef GREP if (case_fold && iswalpha (wctok)) { addtok_wc (towupper (wctok)); addtok (OR); } -#endif tok = lex (); } -- cgit v1.2.3 From d9818e79d5bb15d4ded02ca99606beaf2eda0ae3 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 28 Jan 2014 22:02:06 +0200 Subject: Update doc for Anders Wallin. --- doc/ChangeLog | 4 + doc/gawk.info | 1032 ++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 6 +- doc/gawktexi.in | 6 +- 4 files changed, 529 insertions(+), 519 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index dce9658b..989632c9 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-01-28 Arnold D. Robbins + + * gawktexi.in: Update info for Anders Wallin. + 2014-01-25 Arnold D. Robbins * texinfo.tex: Updated to current version. diff --git a/doc/gawk.info b/doc/gawk.info index 6f88bf02..defd9fed 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -1270,11 +1270,11 @@ acknowledgements: Dr. Nelson Beebe, Andreas Buening, Dr. Manuel Collado, Antonio Colombo, Stephen Davies, Scott Deifik, Akim Demaille, Darrel Hankerson, Michal Jaegermann, Ju"rgen Kahrs, Stepan Kasal, John Malmberg, Dave -Pitts, Chet Ramey, Pat Rankin, Andrew Schorr, Corinna Vinschen, Anders -Wallin, and Eli Zaretskii (in alphabetical order) make up the current -`gawk' "crack portability team." Without their hard work and help, -`gawk' would not be nearly the fine program it is today. It has been -and continues to be a pleasure working with this team of fine people. +Pitts, Chet Ramey, Pat Rankin, Andrew Schorr, Corinna Vinschen, and Eli +Zaretskii (in alphabetical order) make up the current `gawk' "crack +portability team." Without their hard work and help, `gawk' would not +be nearly the fine program it is today. It has been and continues to +be a pleasure working with this team of fine people. Notable code and documentation contributions were made by a number of people. *Note Contributors::, for the full list. @@ -25860,6 +25860,8 @@ Info file, in approximate chronological order: * Patrick T.J. McPhee contributed the code for dynamic loading in Windows32 environments. (This is no longer supported) + * Anders Wallin helped keep the VMS port going for several years. + * John Haque made the following contributions: - The modifications to convert `gawk' into a byte-code @@ -31473,7 +31475,7 @@ Index (line 66) * Hankerson, Darrel <1>: Contributors. (line 60) * Hankerson, Darrel: Acknowledgments. (line 60) -* Haque, John: Contributors. (line 103) +* Haque, John: Contributors. (line 105) * Hartholz, Elaine: Acknowledgments. (line 38) * Hartholz, Marshall: Acknowledgments. (line 38) * Hasegawa, Isamu: Contributors. (line 94) @@ -32238,7 +32240,7 @@ Index * RLENGTH variable, match() function and: String Functions. (line 220) * Robbins, Arnold <1>: Future Extensions. (line 6) * Robbins, Arnold <2>: Bugs. (line 32) -* Robbins, Arnold <3>: Contributors. (line 130) +* Robbins, Arnold <3>: Contributors. (line 132) * Robbins, Arnold <4>: Alarm Program. (line 6) * Robbins, Arnold <5>: Passwd Functions. (line 90) * Robbins, Arnold <6>: Getline/Pipe. (line 39) @@ -32278,7 +32280,7 @@ Index (line 68) * sandbox mode: Options. (line 279) * scalar values: Basic Data Typing. (line 13) -* Schorr, Andrew <1>: Contributors. (line 126) +* Schorr, Andrew <1>: Contributors. (line 128) * Schorr, Andrew: Acknowledgments. (line 60) * Schreiber, Bert: Acknowledgments. (line 38) * Schreiber, Rita: Acknowledgments. (line 38) @@ -32677,7 +32679,7 @@ Index * walk_array() user-defined function: Walking Arrays. (line 14) * Wall, Larry <1>: Future Extensions. (line 6) * Wall, Larry: Array Intro. (line 6) -* Wallin, Anders: Acknowledgments. (line 60) +* Wallin, Anders: Contributors. (line 103) * warnings, issuing: Options. (line 182) * watch debugger command: Viewing And Changing Data. (line 67) @@ -32709,7 +32711,7 @@ Index * xgettext utility: String Extraction. (line 13) * XOR bitwise operation: Bitwise Functions. (line 6) * xor() function (gawk): Bitwise Functions. (line 55) -* Yawitz, Efraim: Contributors. (line 124) +* Yawitz, Efraim: Contributors. (line 126) * Zaretskii, Eli <1>: Bugs. (line 70) * Zaretskii, Eli <2>: Contributors. (line 55) * Zaretskii, Eli: Acknowledgments. (line 60) @@ -32759,510 +32761,510 @@ Ref: Manual History-Footnote-163983 Ref: Manual History-Footnote-264024 Node: How To Contribute64098 Node: Acknowledgments65242 -Node: Getting Started69451 -Node: Running gawk71830 -Node: One-shot73016 -Node: Read Terminal74241 -Ref: Read Terminal-Footnote-175891 -Ref: Read Terminal-Footnote-276167 -Node: Long76338 -Node: Executable Scripts77714 -Ref: Executable Scripts-Footnote-179547 -Ref: Executable Scripts-Footnote-279649 -Node: Comments80196 -Node: Quoting82663 -Node: DOS Quoting87286 -Node: Sample Data Files87961 -Node: Very Simple91005 -Node: Two Rules95604 -Node: More Complex97751 -Ref: More Complex-Footnote-1100681 -Node: Statements/Lines100766 -Ref: Statements/Lines-Footnote-1105228 -Node: Other Features105493 -Node: When106421 -Node: Invoking Gawk108568 -Node: Command Line110029 -Node: Options110812 -Ref: Options-Footnote-1126204 -Node: Other Arguments126229 -Node: Naming Standard Input128887 -Node: Environment Variables129981 -Node: AWKPATH Variable130539 -Ref: AWKPATH Variable-Footnote-1133297 -Node: AWKLIBPATH Variable133557 -Node: Other Environment Variables134275 -Node: Exit Status137238 -Node: Include Files137913 -Node: Loading Shared Libraries141482 -Node: Obsolete142846 -Node: Undocumented143543 -Node: Regexp143785 -Node: Regexp Usage145174 -Node: Escape Sequences147200 -Node: Regexp Operators152869 -Ref: Regexp Operators-Footnote-1160249 -Ref: Regexp Operators-Footnote-2160396 -Node: Bracket Expressions160494 -Ref: table-char-classes162384 -Node: GNU Regexp Operators164907 -Node: Case-sensitivity168630 -Ref: Case-sensitivity-Footnote-1171598 -Ref: Case-sensitivity-Footnote-2171833 -Node: Leftmost Longest171941 -Node: Computed Regexps173142 -Node: Reading Files176479 -Node: Records178481 -Ref: Records-Footnote-1187370 -Node: Fields187407 -Ref: Fields-Footnote-1190440 -Node: Nonconstant Fields190526 -Node: Changing Fields192728 -Node: Field Separators198687 -Node: Default Field Splitting201389 -Node: Regexp Field Splitting202506 -Node: Single Character Fields205848 -Node: Command Line Field Separator206907 -Node: Full Line Fields210341 -Ref: Full Line Fields-Footnote-1210849 -Node: Field Splitting Summary210895 -Ref: Field Splitting Summary-Footnote-1213994 -Node: Constant Size214095 -Node: Splitting By Content218679 -Ref: Splitting By Content-Footnote-1222405 -Node: Multiple Line222445 -Ref: Multiple Line-Footnote-1228292 -Node: Getline228471 -Node: Plain Getline230687 -Node: Getline/Variable232782 -Node: Getline/File233929 -Node: Getline/Variable/File235270 -Ref: Getline/Variable/File-Footnote-1236869 -Node: Getline/Pipe236956 -Node: Getline/Variable/Pipe239655 -Node: Getline/Coprocess240762 -Node: Getline/Variable/Coprocess242014 -Node: Getline Notes242751 -Node: Getline Summary245538 -Ref: table-getline-variants245946 -Node: Read Timeout246858 -Ref: Read Timeout-Footnote-1250599 -Node: Command line directories250656 -Node: Printing251286 -Node: Print252917 -Node: Print Examples254254 -Node: Output Separators257038 -Node: OFMT258798 -Node: Printf260156 -Node: Basic Printf261062 -Node: Control Letters262601 -Node: Format Modifiers266413 -Node: Printf Examples272422 -Node: Redirection275137 -Node: Special Files282102 -Node: Special FD282635 -Ref: Special FD-Footnote-1286260 -Node: Special Network286334 -Node: Special Caveats287184 -Node: Close Files And Pipes287980 -Ref: Close Files And Pipes-Footnote-1294963 -Ref: Close Files And Pipes-Footnote-2295111 -Node: Expressions295261 -Node: Values296393 -Node: Constants297069 -Node: Scalar Constants297749 -Ref: Scalar Constants-Footnote-1298608 -Node: Nondecimal-numbers298790 -Node: Regexp Constants301790 -Node: Using Constant Regexps302265 -Node: Variables305320 -Node: Using Variables305975 -Node: Assignment Options307699 -Node: Conversion309571 -Ref: table-locale-affects315072 -Ref: Conversion-Footnote-1315696 -Node: All Operators315805 -Node: Arithmetic Ops316435 -Node: Concatenation318940 -Ref: Concatenation-Footnote-1321732 -Node: Assignment Ops321852 -Ref: table-assign-ops326840 -Node: Increment Ops328171 -Node: Truth Values and Conditions331605 -Node: Truth Values332688 -Node: Typing and Comparison333737 -Node: Variable Typing334530 -Ref: Variable Typing-Footnote-1338427 -Node: Comparison Operators338549 -Ref: table-relational-ops338959 -Node: POSIX String Comparison342508 -Ref: POSIX String Comparison-Footnote-1343464 -Node: Boolean Ops343602 -Ref: Boolean Ops-Footnote-1347680 -Node: Conditional Exp347771 -Node: Function Calls349503 -Node: Precedence353097 -Node: Locales356766 -Node: Patterns and Actions357855 -Node: Pattern Overview358909 -Node: Regexp Patterns360578 -Node: Expression Patterns361121 -Node: Ranges364806 -Node: BEGIN/END367772 -Node: Using BEGIN/END368534 -Ref: Using BEGIN/END-Footnote-1371265 -Node: I/O And BEGIN/END371371 -Node: BEGINFILE/ENDFILE373653 -Node: Empty376567 -Node: Using Shell Variables376883 -Node: Action Overview379168 -Node: Statements381525 -Node: If Statement383379 -Node: While Statement384878 -Node: Do Statement386922 -Node: For Statement388078 -Node: Switch Statement391230 -Node: Break Statement393327 -Node: Continue Statement395317 -Node: Next Statement397110 -Node: Nextfile Statement399500 -Node: Exit Statement402143 -Node: Built-in Variables404559 -Node: User-modified405654 -Ref: User-modified-Footnote-1414012 -Node: Auto-set414074 -Ref: Auto-set-Footnote-1427152 -Ref: Auto-set-Footnote-2427357 -Node: ARGC and ARGV427413 -Node: Arrays431264 -Node: Array Basics432769 -Node: Array Intro433595 -Node: Reference to Elements437912 -Node: Assigning Elements440182 -Node: Array Example440673 -Node: Scanning an Array442405 -Node: Controlling Scanning444719 -Ref: Controlling Scanning-Footnote-1449806 -Node: Delete450122 -Ref: Delete-Footnote-1452887 -Node: Numeric Array Subscripts452944 -Node: Uninitialized Subscripts455127 -Node: Multidimensional456754 -Node: Multiscanning459847 -Node: Arrays of Arrays461436 -Node: Functions466076 -Node: Built-in466895 -Node: Calling Built-in467973 -Node: Numeric Functions469961 -Ref: Numeric Functions-Footnote-1473793 -Ref: Numeric Functions-Footnote-2474150 -Ref: Numeric Functions-Footnote-3474198 -Node: String Functions474467 -Ref: String Functions-Footnote-1497387 -Ref: String Functions-Footnote-2497516 -Ref: String Functions-Footnote-3497764 -Node: Gory Details497851 -Ref: table-sub-escapes499530 -Ref: table-sub-posix-92500884 -Ref: table-sub-proposed502235 -Ref: table-posix-sub503589 -Ref: table-gensub-escapes505134 -Ref: Gory Details-Footnote-1506310 -Ref: Gory Details-Footnote-2506361 -Node: I/O Functions506512 -Ref: I/O Functions-Footnote-1513497 -Node: Time Functions513644 -Ref: Time Functions-Footnote-1524577 -Ref: Time Functions-Footnote-2524645 -Ref: Time Functions-Footnote-3524803 -Ref: Time Functions-Footnote-4524914 -Ref: Time Functions-Footnote-5525026 -Ref: Time Functions-Footnote-6525253 -Node: Bitwise Functions525519 -Ref: table-bitwise-ops526081 -Ref: Bitwise Functions-Footnote-1530302 -Node: Type Functions530486 -Node: I18N Functions531637 -Node: User-defined533264 -Node: Definition Syntax534068 -Ref: Definition Syntax-Footnote-1538978 -Node: Function Example539047 -Node: Function Caveats541641 -Node: Calling A Function542062 -Node: Variable Scope543177 -Node: Pass By Value/Reference546140 -Node: Return Statement549648 -Node: Dynamic Typing552629 -Node: Indirect Calls553560 -Node: Library Functions563245 -Ref: Library Functions-Footnote-1566758 -Ref: Library Functions-Footnote-2566901 -Node: Library Names567072 -Ref: Library Names-Footnote-1570543 -Ref: Library Names-Footnote-2570763 -Node: General Functions570849 -Node: Strtonum Function571877 -Node: Assert Function574807 -Node: Round Function578133 -Node: Cliff Random Function579676 -Node: Ordinal Functions580692 -Ref: Ordinal Functions-Footnote-1583762 -Ref: Ordinal Functions-Footnote-2584014 -Node: Join Function584223 -Ref: Join Function-Footnote-1585994 -Node: Getlocaltime Function586194 -Node: Readfile Function589935 -Node: Data File Management591774 -Node: Filetrans Function592406 -Node: Rewind Function596475 -Node: File Checking597862 -Node: Empty Files598956 -Node: Ignoring Assigns601186 -Node: Getopt Function602739 -Ref: Getopt Function-Footnote-1614042 -Node: Passwd Functions614245 -Ref: Passwd Functions-Footnote-1623220 -Node: Group Functions623308 -Node: Walking Arrays631392 -Node: Sample Programs633529 -Node: Running Examples634203 -Node: Clones634931 -Node: Cut Program636155 -Node: Egrep Program646000 -Ref: Egrep Program-Footnote-1653773 -Node: Id Program653883 -Node: Split Program657499 -Ref: Split Program-Footnote-1661018 -Node: Tee Program661146 -Node: Uniq Program663949 -Node: Wc Program671378 -Ref: Wc Program-Footnote-1675644 -Ref: Wc Program-Footnote-2675844 -Node: Miscellaneous Programs675936 -Node: Dupword Program677124 -Node: Alarm Program679155 -Node: Translate Program683908 -Ref: Translate Program-Footnote-1688295 -Ref: Translate Program-Footnote-2688543 -Node: Labels Program688677 -Ref: Labels Program-Footnote-1692048 -Node: Word Sorting692132 -Node: History Sorting696016 -Node: Extract Program697855 -Ref: Extract Program-Footnote-1705358 -Node: Simple Sed705486 -Node: Igawk Program708548 -Ref: Igawk Program-Footnote-1723705 -Ref: Igawk Program-Footnote-2723906 -Node: Anagram Program724044 -Node: Signature Program727112 -Node: Advanced Features728212 -Node: Nondecimal Data730098 -Node: Array Sorting731681 -Node: Controlling Array Traversal732378 -Node: Array Sorting Functions740662 -Ref: Array Sorting Functions-Footnote-1744531 -Node: Two-way I/O744725 -Ref: Two-way I/O-Footnote-1750157 -Node: TCP/IP Networking750227 -Node: Profiling753071 -Node: Internationalization760568 -Node: I18N and L10N761993 -Node: Explaining gettext762679 -Ref: Explaining gettext-Footnote-1767747 -Ref: Explaining gettext-Footnote-2767931 -Node: Programmer i18n768096 -Node: Translator i18n772298 -Node: String Extraction773091 -Ref: String Extraction-Footnote-1774052 -Node: Printf Ordering774138 -Ref: Printf Ordering-Footnote-1776922 -Node: I18N Portability776986 -Ref: I18N Portability-Footnote-1779435 -Node: I18N Example779498 -Ref: I18N Example-Footnote-1782136 -Node: Gawk I18N782208 -Node: Debugger782829 -Node: Debugging783800 -Node: Debugging Concepts784233 -Node: Debugging Terms786089 -Node: Awk Debugging788686 -Node: Sample Debugging Session789578 -Node: Debugger Invocation790098 -Node: Finding The Bug791430 -Node: List of Debugger Commands797918 -Node: Breakpoint Control799252 -Node: Debugger Execution Control802916 -Node: Viewing And Changing Data806276 -Node: Execution Stack809632 -Node: Debugger Info811099 -Node: Miscellaneous Debugger Commands815081 -Node: Readline Support820257 -Node: Limitations821088 -Node: Arbitrary Precision Arithmetic823340 -Ref: Arbitrary Precision Arithmetic-Footnote-1824989 -Node: General Arithmetic825137 -Node: Floating Point Issues826857 -Node: String Conversion Precision827738 -Ref: String Conversion Precision-Footnote-1829443 -Node: Unexpected Results829552 -Node: POSIX Floating Point Problems831705 -Ref: POSIX Floating Point Problems-Footnote-1835530 -Node: Integer Programming835568 -Node: Floating-point Programming837307 -Ref: Floating-point Programming-Footnote-1843638 -Ref: Floating-point Programming-Footnote-2843908 -Node: Floating-point Representation844172 -Node: Floating-point Context845337 -Ref: table-ieee-formats846176 -Node: Rounding Mode847560 -Ref: table-rounding-modes848039 -Ref: Rounding Mode-Footnote-1851054 -Node: Gawk and MPFR851233 -Node: Arbitrary Precision Floats852488 -Ref: Arbitrary Precision Floats-Footnote-1854931 -Node: Setting Precision855247 -Ref: table-predefined-precision-strings855933 -Node: Setting Rounding Mode858078 -Ref: table-gawk-rounding-modes858482 -Node: Floating-point Constants859669 -Node: Changing Precision861098 -Ref: Changing Precision-Footnote-1862495 -Node: Exact Arithmetic862669 -Node: Arbitrary Precision Integers865807 -Ref: Arbitrary Precision Integers-Footnote-1868825 -Node: Dynamic Extensions868972 -Node: Extension Intro870430 -Node: Plugin License871695 -Node: Extension Mechanism Outline872380 -Ref: load-extension872797 -Ref: load-new-function874275 -Ref: call-new-function875270 -Node: Extension API Description877285 -Node: Extension API Functions Introduction878498 -Node: General Data Types883364 -Ref: General Data Types-Footnote-1888969 -Node: Requesting Values889268 -Ref: table-value-types-returned889999 -Node: Constructor Functions890953 -Node: Registration Functions893973 -Node: Extension Functions894658 -Node: Exit Callback Functions896883 -Node: Extension Version String898132 -Node: Input Parsers898782 -Node: Output Wrappers908539 -Node: Two-way processors913049 -Node: Printing Messages915257 -Ref: Printing Messages-Footnote-1916334 -Node: Updating `ERRNO'916486 -Node: Accessing Parameters917225 -Node: Symbol Table Access918455 -Node: Symbol table by name918967 -Node: Symbol table by cookie920714 -Ref: Symbol table by cookie-Footnote-1924844 -Node: Cached values924907 -Ref: Cached values-Footnote-1928356 -Node: Array Manipulation928447 -Ref: Array Manipulation-Footnote-1929545 -Node: Array Data Types929584 -Ref: Array Data Types-Footnote-1932287 -Node: Array Functions932379 -Node: Flattening Arrays936145 -Node: Creating Arrays942997 -Node: Extension API Variables947722 -Node: Extension Versioning948358 -Node: Extension API Informational Variables950259 -Node: Extension API Boilerplate951345 -Node: Finding Extensions955149 -Node: Extension Example955709 -Node: Internal File Description956439 -Node: Internal File Ops960530 -Ref: Internal File Ops-Footnote-1972038 -Node: Using Internal File Ops972178 -Ref: Using Internal File Ops-Footnote-1974531 -Node: Extension Samples974797 -Node: Extension Sample File Functions976321 -Node: Extension Sample Fnmatch984806 -Node: Extension Sample Fork986532 -Node: Extension Sample Inplace987750 -Node: Extension Sample Ord989528 -Node: Extension Sample Readdir990364 -Node: Extension Sample Revout991896 -Node: Extension Sample Rev2way992489 -Node: Extension Sample Read write array993179 -Node: Extension Sample Readfile995062 -Node: Extension Sample API Tests995880 -Node: Extension Sample Time996405 -Node: gawkextlib997769 -Node: Language History1000550 -Node: V7/SVR3.11002143 -Node: SVR41004463 -Node: POSIX1005905 -Node: BTL1007291 -Node: POSIX/GNU1008025 -Node: Feature History1013624 -Node: Common Extensions1026588 -Node: Ranges and Locales1027900 -Ref: Ranges and Locales-Footnote-11032518 -Ref: Ranges and Locales-Footnote-21032545 -Ref: Ranges and Locales-Footnote-31032805 -Node: Contributors1033026 -Node: Installation1038101 -Node: Gawk Distribution1038995 -Node: Getting1039479 -Node: Extracting1040305 -Node: Distribution contents1041997 -Node: Unix Installation1047702 -Node: Quick Installation1048319 -Node: Additional Configuration Options1050763 -Node: Configuration Philosophy1052499 -Node: Non-Unix Installation1054853 -Node: PC Installation1055311 -Node: PC Binary Installation1056610 -Node: PC Compiling1058458 -Node: PC Testing1061402 -Node: PC Using1062578 -Node: Cygwin1066763 -Node: MSYS1067763 -Node: VMS Installation1068277 -Node: VMS Compilation1069041 -Ref: VMS Compilation-Footnote-11070656 -Node: VMS Dynamic Extensions1070714 -Node: VMS Installation Details1072087 -Node: VMS Running1074334 -Node: VMS GNV1077168 -Node: VMS Old Gawk1077891 -Node: Bugs1078361 -Node: Other Versions1082279 -Node: Notes1088363 -Node: Compatibility Mode1089163 -Node: Additions1089946 -Node: Accessing The Source1090873 -Node: Adding Code1092313 -Node: New Ports1098358 -Node: Derived Files1102493 -Ref: Derived Files-Footnote-11107814 -Ref: Derived Files-Footnote-21107848 -Ref: Derived Files-Footnote-31108448 -Node: Future Extensions1108546 -Node: Implementation Limitations1109129 -Node: Extension Design1110381 -Node: Old Extension Problems1111535 -Ref: Old Extension Problems-Footnote-11113043 -Node: Extension New Mechanism Goals1113100 -Ref: Extension New Mechanism Goals-Footnote-11116465 -Node: Extension Other Design Decisions1116651 -Node: Extension Future Growth1118757 -Node: Old Extension Mechanism1119593 -Node: Basic Concepts1121333 -Node: Basic High Level1122014 -Ref: figure-general-flow1122285 -Ref: figure-process-flow1122884 -Ref: Basic High Level-Footnote-11126113 -Node: Basic Data Typing1126298 -Node: Glossary1129653 -Node: Copying1155115 -Node: GNU Free Documentation License1192672 -Node: Index1217809 +Node: Getting Started69436 +Node: Running gawk71815 +Node: One-shot73001 +Node: Read Terminal74226 +Ref: Read Terminal-Footnote-175876 +Ref: Read Terminal-Footnote-276152 +Node: Long76323 +Node: Executable Scripts77699 +Ref: Executable Scripts-Footnote-179532 +Ref: Executable Scripts-Footnote-279634 +Node: Comments80181 +Node: Quoting82648 +Node: DOS Quoting87271 +Node: Sample Data Files87946 +Node: Very Simple90990 +Node: Two Rules95589 +Node: More Complex97736 +Ref: More Complex-Footnote-1100666 +Node: Statements/Lines100751 +Ref: Statements/Lines-Footnote-1105213 +Node: Other Features105478 +Node: When106406 +Node: Invoking Gawk108553 +Node: Command Line110014 +Node: Options110797 +Ref: Options-Footnote-1126189 +Node: Other Arguments126214 +Node: Naming Standard Input128872 +Node: Environment Variables129966 +Node: AWKPATH Variable130524 +Ref: AWKPATH Variable-Footnote-1133282 +Node: AWKLIBPATH Variable133542 +Node: Other Environment Variables134260 +Node: Exit Status137223 +Node: Include Files137898 +Node: Loading Shared Libraries141467 +Node: Obsolete142831 +Node: Undocumented143528 +Node: Regexp143770 +Node: Regexp Usage145159 +Node: Escape Sequences147185 +Node: Regexp Operators152854 +Ref: Regexp Operators-Footnote-1160234 +Ref: Regexp Operators-Footnote-2160381 +Node: Bracket Expressions160479 +Ref: table-char-classes162369 +Node: GNU Regexp Operators164892 +Node: Case-sensitivity168615 +Ref: Case-sensitivity-Footnote-1171583 +Ref: Case-sensitivity-Footnote-2171818 +Node: Leftmost Longest171926 +Node: Computed Regexps173127 +Node: Reading Files176464 +Node: Records178466 +Ref: Records-Footnote-1187355 +Node: Fields187392 +Ref: Fields-Footnote-1190425 +Node: Nonconstant Fields190511 +Node: Changing Fields192713 +Node: Field Separators198672 +Node: Default Field Splitting201374 +Node: Regexp Field Splitting202491 +Node: Single Character Fields205833 +Node: Command Line Field Separator206892 +Node: Full Line Fields210326 +Ref: Full Line Fields-Footnote-1210834 +Node: Field Splitting Summary210880 +Ref: Field Splitting Summary-Footnote-1213979 +Node: Constant Size214080 +Node: Splitting By Content218664 +Ref: Splitting By Content-Footnote-1222390 +Node: Multiple Line222430 +Ref: Multiple Line-Footnote-1228277 +Node: Getline228456 +Node: Plain Getline230672 +Node: Getline/Variable232767 +Node: Getline/File233914 +Node: Getline/Variable/File235255 +Ref: Getline/Variable/File-Footnote-1236854 +Node: Getline/Pipe236941 +Node: Getline/Variable/Pipe239640 +Node: Getline/Coprocess240747 +Node: Getline/Variable/Coprocess241999 +Node: Getline Notes242736 +Node: Getline Summary245523 +Ref: table-getline-variants245931 +Node: Read Timeout246843 +Ref: Read Timeout-Footnote-1250584 +Node: Command line directories250641 +Node: Printing251271 +Node: Print252902 +Node: Print Examples254239 +Node: Output Separators257023 +Node: OFMT258783 +Node: Printf260141 +Node: Basic Printf261047 +Node: Control Letters262586 +Node: Format Modifiers266398 +Node: Printf Examples272407 +Node: Redirection275122 +Node: Special Files282087 +Node: Special FD282620 +Ref: Special FD-Footnote-1286245 +Node: Special Network286319 +Node: Special Caveats287169 +Node: Close Files And Pipes287965 +Ref: Close Files And Pipes-Footnote-1294948 +Ref: Close Files And Pipes-Footnote-2295096 +Node: Expressions295246 +Node: Values296378 +Node: Constants297054 +Node: Scalar Constants297734 +Ref: Scalar Constants-Footnote-1298593 +Node: Nondecimal-numbers298775 +Node: Regexp Constants301775 +Node: Using Constant Regexps302250 +Node: Variables305305 +Node: Using Variables305960 +Node: Assignment Options307684 +Node: Conversion309556 +Ref: table-locale-affects315057 +Ref: Conversion-Footnote-1315681 +Node: All Operators315790 +Node: Arithmetic Ops316420 +Node: Concatenation318925 +Ref: Concatenation-Footnote-1321717 +Node: Assignment Ops321837 +Ref: table-assign-ops326825 +Node: Increment Ops328156 +Node: Truth Values and Conditions331590 +Node: Truth Values332673 +Node: Typing and Comparison333722 +Node: Variable Typing334515 +Ref: Variable Typing-Footnote-1338412 +Node: Comparison Operators338534 +Ref: table-relational-ops338944 +Node: POSIX String Comparison342493 +Ref: POSIX String Comparison-Footnote-1343449 +Node: Boolean Ops343587 +Ref: Boolean Ops-Footnote-1347665 +Node: Conditional Exp347756 +Node: Function Calls349488 +Node: Precedence353082 +Node: Locales356751 +Node: Patterns and Actions357840 +Node: Pattern Overview358894 +Node: Regexp Patterns360563 +Node: Expression Patterns361106 +Node: Ranges364791 +Node: BEGIN/END367757 +Node: Using BEGIN/END368519 +Ref: Using BEGIN/END-Footnote-1371250 +Node: I/O And BEGIN/END371356 +Node: BEGINFILE/ENDFILE373638 +Node: Empty376552 +Node: Using Shell Variables376868 +Node: Action Overview379153 +Node: Statements381510 +Node: If Statement383364 +Node: While Statement384863 +Node: Do Statement386907 +Node: For Statement388063 +Node: Switch Statement391215 +Node: Break Statement393312 +Node: Continue Statement395302 +Node: Next Statement397095 +Node: Nextfile Statement399485 +Node: Exit Statement402128 +Node: Built-in Variables404544 +Node: User-modified405639 +Ref: User-modified-Footnote-1413997 +Node: Auto-set414059 +Ref: Auto-set-Footnote-1427137 +Ref: Auto-set-Footnote-2427342 +Node: ARGC and ARGV427398 +Node: Arrays431249 +Node: Array Basics432754 +Node: Array Intro433580 +Node: Reference to Elements437897 +Node: Assigning Elements440167 +Node: Array Example440658 +Node: Scanning an Array442390 +Node: Controlling Scanning444704 +Ref: Controlling Scanning-Footnote-1449791 +Node: Delete450107 +Ref: Delete-Footnote-1452872 +Node: Numeric Array Subscripts452929 +Node: Uninitialized Subscripts455112 +Node: Multidimensional456739 +Node: Multiscanning459832 +Node: Arrays of Arrays461421 +Node: Functions466061 +Node: Built-in466880 +Node: Calling Built-in467958 +Node: Numeric Functions469946 +Ref: Numeric Functions-Footnote-1473778 +Ref: Numeric Functions-Footnote-2474135 +Ref: Numeric Functions-Footnote-3474183 +Node: String Functions474452 +Ref: String Functions-Footnote-1497372 +Ref: String Functions-Footnote-2497501 +Ref: String Functions-Footnote-3497749 +Node: Gory Details497836 +Ref: table-sub-escapes499515 +Ref: table-sub-posix-92500869 +Ref: table-sub-proposed502220 +Ref: table-posix-sub503574 +Ref: table-gensub-escapes505119 +Ref: Gory Details-Footnote-1506295 +Ref: Gory Details-Footnote-2506346 +Node: I/O Functions506497 +Ref: I/O Functions-Footnote-1513482 +Node: Time Functions513629 +Ref: Time Functions-Footnote-1524562 +Ref: Time Functions-Footnote-2524630 +Ref: Time Functions-Footnote-3524788 +Ref: Time Functions-Footnote-4524899 +Ref: Time Functions-Footnote-5525011 +Ref: Time Functions-Footnote-6525238 +Node: Bitwise Functions525504 +Ref: table-bitwise-ops526066 +Ref: Bitwise Functions-Footnote-1530287 +Node: Type Functions530471 +Node: I18N Functions531622 +Node: User-defined533249 +Node: Definition Syntax534053 +Ref: Definition Syntax-Footnote-1538963 +Node: Function Example539032 +Node: Function Caveats541626 +Node: Calling A Function542047 +Node: Variable Scope543162 +Node: Pass By Value/Reference546125 +Node: Return Statement549633 +Node: Dynamic Typing552614 +Node: Indirect Calls553545 +Node: Library Functions563230 +Ref: Library Functions-Footnote-1566743 +Ref: Library Functions-Footnote-2566886 +Node: Library Names567057 +Ref: Library Names-Footnote-1570528 +Ref: Library Names-Footnote-2570748 +Node: General Functions570834 +Node: Strtonum Function571862 +Node: Assert Function574792 +Node: Round Function578118 +Node: Cliff Random Function579661 +Node: Ordinal Functions580677 +Ref: Ordinal Functions-Footnote-1583747 +Ref: Ordinal Functions-Footnote-2583999 +Node: Join Function584208 +Ref: Join Function-Footnote-1585979 +Node: Getlocaltime Function586179 +Node: Readfile Function589920 +Node: Data File Management591759 +Node: Filetrans Function592391 +Node: Rewind Function596460 +Node: File Checking597847 +Node: Empty Files598941 +Node: Ignoring Assigns601171 +Node: Getopt Function602724 +Ref: Getopt Function-Footnote-1614027 +Node: Passwd Functions614230 +Ref: Passwd Functions-Footnote-1623205 +Node: Group Functions623293 +Node: Walking Arrays631377 +Node: Sample Programs633514 +Node: Running Examples634188 +Node: Clones634916 +Node: Cut Program636140 +Node: Egrep Program645985 +Ref: Egrep Program-Footnote-1653758 +Node: Id Program653868 +Node: Split Program657484 +Ref: Split Program-Footnote-1661003 +Node: Tee Program661131 +Node: Uniq Program663934 +Node: Wc Program671363 +Ref: Wc Program-Footnote-1675629 +Ref: Wc Program-Footnote-2675829 +Node: Miscellaneous Programs675921 +Node: Dupword Program677109 +Node: Alarm Program679140 +Node: Translate Program683893 +Ref: Translate Program-Footnote-1688280 +Ref: Translate Program-Footnote-2688528 +Node: Labels Program688662 +Ref: Labels Program-Footnote-1692033 +Node: Word Sorting692117 +Node: History Sorting696001 +Node: Extract Program697840 +Ref: Extract Program-Footnote-1705343 +Node: Simple Sed705471 +Node: Igawk Program708533 +Ref: Igawk Program-Footnote-1723690 +Ref: Igawk Program-Footnote-2723891 +Node: Anagram Program724029 +Node: Signature Program727097 +Node: Advanced Features728197 +Node: Nondecimal Data730083 +Node: Array Sorting731666 +Node: Controlling Array Traversal732363 +Node: Array Sorting Functions740647 +Ref: Array Sorting Functions-Footnote-1744516 +Node: Two-way I/O744710 +Ref: Two-way I/O-Footnote-1750142 +Node: TCP/IP Networking750212 +Node: Profiling753056 +Node: Internationalization760553 +Node: I18N and L10N761978 +Node: Explaining gettext762664 +Ref: Explaining gettext-Footnote-1767732 +Ref: Explaining gettext-Footnote-2767916 +Node: Programmer i18n768081 +Node: Translator i18n772283 +Node: String Extraction773076 +Ref: String Extraction-Footnote-1774037 +Node: Printf Ordering774123 +Ref: Printf Ordering-Footnote-1776907 +Node: I18N Portability776971 +Ref: I18N Portability-Footnote-1779420 +Node: I18N Example779483 +Ref: I18N Example-Footnote-1782121 +Node: Gawk I18N782193 +Node: Debugger782814 +Node: Debugging783785 +Node: Debugging Concepts784218 +Node: Debugging Terms786074 +Node: Awk Debugging788671 +Node: Sample Debugging Session789563 +Node: Debugger Invocation790083 +Node: Finding The Bug791415 +Node: List of Debugger Commands797903 +Node: Breakpoint Control799237 +Node: Debugger Execution Control802901 +Node: Viewing And Changing Data806261 +Node: Execution Stack809617 +Node: Debugger Info811084 +Node: Miscellaneous Debugger Commands815066 +Node: Readline Support820242 +Node: Limitations821073 +Node: Arbitrary Precision Arithmetic823325 +Ref: Arbitrary Precision Arithmetic-Footnote-1824974 +Node: General Arithmetic825122 +Node: Floating Point Issues826842 +Node: String Conversion Precision827723 +Ref: String Conversion Precision-Footnote-1829428 +Node: Unexpected Results829537 +Node: POSIX Floating Point Problems831690 +Ref: POSIX Floating Point Problems-Footnote-1835515 +Node: Integer Programming835553 +Node: Floating-point Programming837292 +Ref: Floating-point Programming-Footnote-1843623 +Ref: Floating-point Programming-Footnote-2843893 +Node: Floating-point Representation844157 +Node: Floating-point Context845322 +Ref: table-ieee-formats846161 +Node: Rounding Mode847545 +Ref: table-rounding-modes848024 +Ref: Rounding Mode-Footnote-1851039 +Node: Gawk and MPFR851218 +Node: Arbitrary Precision Floats852473 +Ref: Arbitrary Precision Floats-Footnote-1854916 +Node: Setting Precision855232 +Ref: table-predefined-precision-strings855918 +Node: Setting Rounding Mode858063 +Ref: table-gawk-rounding-modes858467 +Node: Floating-point Constants859654 +Node: Changing Precision861083 +Ref: Changing Precision-Footnote-1862480 +Node: Exact Arithmetic862654 +Node: Arbitrary Precision Integers865792 +Ref: Arbitrary Precision Integers-Footnote-1868810 +Node: Dynamic Extensions868957 +Node: Extension Intro870415 +Node: Plugin License871680 +Node: Extension Mechanism Outline872365 +Ref: load-extension872782 +Ref: load-new-function874260 +Ref: call-new-function875255 +Node: Extension API Description877270 +Node: Extension API Functions Introduction878483 +Node: General Data Types883349 +Ref: General Data Types-Footnote-1888954 +Node: Requesting Values889253 +Ref: table-value-types-returned889984 +Node: Constructor Functions890938 +Node: Registration Functions893958 +Node: Extension Functions894643 +Node: Exit Callback Functions896868 +Node: Extension Version String898117 +Node: Input Parsers898767 +Node: Output Wrappers908524 +Node: Two-way processors913034 +Node: Printing Messages915242 +Ref: Printing Messages-Footnote-1916319 +Node: Updating `ERRNO'916471 +Node: Accessing Parameters917210 +Node: Symbol Table Access918440 +Node: Symbol table by name918952 +Node: Symbol table by cookie920699 +Ref: Symbol table by cookie-Footnote-1924829 +Node: Cached values924892 +Ref: Cached values-Footnote-1928341 +Node: Array Manipulation928432 +Ref: Array Manipulation-Footnote-1929530 +Node: Array Data Types929569 +Ref: Array Data Types-Footnote-1932272 +Node: Array Functions932364 +Node: Flattening Arrays936130 +Node: Creating Arrays942982 +Node: Extension API Variables947707 +Node: Extension Versioning948343 +Node: Extension API Informational Variables950244 +Node: Extension API Boilerplate951330 +Node: Finding Extensions955134 +Node: Extension Example955694 +Node: Internal File Description956424 +Node: Internal File Ops960515 +Ref: Internal File Ops-Footnote-1972023 +Node: Using Internal File Ops972163 +Ref: Using Internal File Ops-Footnote-1974516 +Node: Extension Samples974782 +Node: Extension Sample File Functions976306 +Node: Extension Sample Fnmatch984791 +Node: Extension Sample Fork986517 +Node: Extension Sample Inplace987735 +Node: Extension Sample Ord989513 +Node: Extension Sample Readdir990349 +Node: Extension Sample Revout991881 +Node: Extension Sample Rev2way992474 +Node: Extension Sample Read write array993164 +Node: Extension Sample Readfile995047 +Node: Extension Sample API Tests995865 +Node: Extension Sample Time996390 +Node: gawkextlib997754 +Node: Language History1000535 +Node: V7/SVR3.11002128 +Node: SVR41004448 +Node: POSIX1005890 +Node: BTL1007276 +Node: POSIX/GNU1008010 +Node: Feature History1013609 +Node: Common Extensions1026573 +Node: Ranges and Locales1027885 +Ref: Ranges and Locales-Footnote-11032503 +Ref: Ranges and Locales-Footnote-21032530 +Ref: Ranges and Locales-Footnote-31032790 +Node: Contributors1033011 +Node: Installation1038156 +Node: Gawk Distribution1039050 +Node: Getting1039534 +Node: Extracting1040360 +Node: Distribution contents1042052 +Node: Unix Installation1047757 +Node: Quick Installation1048374 +Node: Additional Configuration Options1050818 +Node: Configuration Philosophy1052554 +Node: Non-Unix Installation1054908 +Node: PC Installation1055366 +Node: PC Binary Installation1056665 +Node: PC Compiling1058513 +Node: PC Testing1061457 +Node: PC Using1062633 +Node: Cygwin1066818 +Node: MSYS1067818 +Node: VMS Installation1068332 +Node: VMS Compilation1069096 +Ref: VMS Compilation-Footnote-11070711 +Node: VMS Dynamic Extensions1070769 +Node: VMS Installation Details1072142 +Node: VMS Running1074389 +Node: VMS GNV1077223 +Node: VMS Old Gawk1077946 +Node: Bugs1078416 +Node: Other Versions1082334 +Node: Notes1088418 +Node: Compatibility Mode1089218 +Node: Additions1090001 +Node: Accessing The Source1090928 +Node: Adding Code1092368 +Node: New Ports1098413 +Node: Derived Files1102548 +Ref: Derived Files-Footnote-11107869 +Ref: Derived Files-Footnote-21107903 +Ref: Derived Files-Footnote-31108503 +Node: Future Extensions1108601 +Node: Implementation Limitations1109184 +Node: Extension Design1110436 +Node: Old Extension Problems1111590 +Ref: Old Extension Problems-Footnote-11113098 +Node: Extension New Mechanism Goals1113155 +Ref: Extension New Mechanism Goals-Footnote-11116520 +Node: Extension Other Design Decisions1116706 +Node: Extension Future Growth1118812 +Node: Old Extension Mechanism1119648 +Node: Basic Concepts1121388 +Node: Basic High Level1122069 +Ref: figure-general-flow1122340 +Ref: figure-process-flow1122939 +Ref: Basic High Level-Footnote-11126168 +Node: Basic Data Typing1126353 +Node: Glossary1129708 +Node: Copying1155170 +Node: GNU Free Documentation License1192727 +Node: Index1217864  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 6c3e4c3a..5de2e913 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -1794,7 +1794,6 @@ significant editorial help for this @value{DOCUMENT} for the @cindex Rankin, Pat @cindex Schorr, Andrew @cindex Vinschen, Corinna -@cindex Wallin, Anders @cindex Zaretskii, Eli Dr.@: Nelson Beebe, @@ -1814,7 +1813,6 @@ Chet Ramey, Pat Rankin, Andrew Schorr, Corinna Vinschen, -Anders Wallin, and Eli Zaretskii (in alphabetical order) make up the current @@ -34550,6 +34548,10 @@ Patrick T.J.@: McPhee contributed the code for dynamic loading in Windows32 environments. (This is no longer supported) +@item +@cindex Wallin, Anders +Anders Wallin helped keep the VMS port going for several years. + @item @cindex Haque, John John Haque made the following contributions: diff --git a/doc/gawktexi.in b/doc/gawktexi.in index f8c73cca..26acdc00 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -1761,7 +1761,6 @@ significant editorial help for this @value{DOCUMENT} for the @cindex Rankin, Pat @cindex Schorr, Andrew @cindex Vinschen, Corinna -@cindex Wallin, Anders @cindex Zaretskii, Eli Dr.@: Nelson Beebe, @@ -1781,7 +1780,6 @@ Chet Ramey, Pat Rankin, Andrew Schorr, Corinna Vinschen, -Anders Wallin, and Eli Zaretskii (in alphabetical order) make up the current @@ -33699,6 +33697,10 @@ Patrick T.J.@: McPhee contributed the code for dynamic loading in Windows32 environments. (This is no longer supported) +@item +@cindex Wallin, Anders +Anders Wallin helped keep the VMS port going for several years. + @item @cindex Haque, John John Haque made the following contributions: -- cgit v1.2.3 From f7f823dfd01a6f9778d4f41d7484f2175b80b1c5 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 30 Jan 2014 21:46:52 +0200 Subject: Minor doc fixes. --- doc/ChangeLog | 6 ++++++ doc/gawk.1 | 9 +++++++-- doc/gawk.texi | 6 ++++++ doc/gawktexi.in | 6 ++++++ 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 989632c9..7618db88 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,9 @@ +2014-01-30 Arnold D. Robbins + + * gawktexi.in: Add a few missing STARTOFRANGE comments. + * gawk.1: Note that `(i, j) in array' doesn't work in for loops. + Update the copyright year. + 2014-01-28 Arnold D. Robbins * gawktexi.in: Update info for Anders Wallin. diff --git a/doc/gawk.1 b/doc/gawk.1 index 7f31c254..f88c707c 100644 --- a/doc/gawk.1 +++ b/doc/gawk.1 @@ -13,7 +13,7 @@ . if \w'\(rq' .ds rq "\(rq . \} .\} -.TH GAWK 1 "May 09 2013" "Free Software Foundation" "Utility Commands" +.TH GAWK 1 "Jan 28 2014" "Free Software Foundation" "Utility Commands" .SH NAME gawk \- pattern scanning and processing language .SH SYNOPSIS @@ -1364,6 +1364,11 @@ The construct may also be used in a .B for loop to iterate over all the elements of an array. +However, the +.B "(i, j) in array" +construct only works in tests, not in +.B for +loops. .PP An element may be deleted from an array using the .B delete @@ -3962,7 +3967,7 @@ We thank him. .SH COPYING PERMISSIONS Copyright \(co 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2007, 2009, -2010, 2011, 2012, 2013 +2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. .PP Permission is granted to make and distribute verbatim copies of diff --git a/doc/gawk.texi b/doc/gawk.texi index 5de2e913..b396f9e0 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -7362,6 +7362,7 @@ then @command{gawk} sets @code{RT} to the null string. @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 terminal, sometimes @@ -8833,7 +8834,9 @@ on the @code{print} statement @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 @code{--sandbox} option, output redirection with @code{print}, @code{printf} So far, the output from @code{print} and @code{printf} has gone @@ -9602,6 +9605,8 @@ 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 @@ -10807,6 +10812,7 @@ 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 diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 26acdc00..2e6928e0 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -6988,6 +6988,7 @@ then @command{gawk} sets @code{RT} to the null string. @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 terminal, sometimes @@ -8459,7 +8460,9 @@ on the @code{print} statement @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 @code{--sandbox} option, output redirection with @code{print}, @code{printf} So far, the output from @code{print} and @code{printf} has gone @@ -9128,6 +9131,8 @@ 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 @@ -10250,6 +10255,7 @@ 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 -- cgit v1.2.3 From d326a1b2bdba07f2c54d53a2d16d46db96be40a9 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 30 Jan 2014 21:47:07 +0200 Subject: Fix creation of pc/config.h. --- ChangeLog | 6 ++++++ Makefile.am | 9 +++++---- Makefile.in | 9 +++++---- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index ee5fae95..9b92bd2e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2014-01-30 Arnold D. Robbins + + * Makefile.am (dist-hook): Improve creation of pc/config.h to copy + the new file into the distribution directory being created. + Also, put the temporary files into /tmp. + 2014-01-28 Arnold D. Robbins * awkgram.y (negate_num): If just a double, return. Fixes a bug diff --git a/Makefile.am b/Makefile.am index efb3711f..ee70378a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -172,10 +172,11 @@ check-local: gawk$(EXEEXT) dist-hook: cd $(distdir)/extension ; rm -f *.o *.so cd $(srcdir)/pc ; \ - sed -n -f configpk.sed < ../configure.ac > tmp.sed ; \ - sed -f config.sed < ../configh.in > config.tmp ; \ - sed -f tmp.sed < config.tmp > config.h ; \ - $(RM) tmp.sed config.tmp + sed -n -f configpk.sed < ../configure.ac > /tmp/tmp.sed ; \ + sed -f config.sed < ../configh.in > /tmp/config.tmp ; \ + sed -f /tmp/tmp.sed < /tmp/config.tmp > config.h ; \ + $(RM) /tmp/tmp.sed /tmp/config.tmp + cp pc/config.h $(distdir)/pc/config.h # Special rules for individual files # Use of awk instead of $(AWK) is deliberate, in case gawk doesn't build diff --git a/Makefile.in b/Makefile.in index e87baa6a..3ca45b2b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1171,10 +1171,11 @@ check-local: gawk$(EXEEXT) dist-hook: cd $(distdir)/extension ; rm -f *.o *.so cd $(srcdir)/pc ; \ - sed -n -f configpk.sed < ../configure.ac > tmp.sed ; \ - sed -f config.sed < ../configh.in > config.tmp ; \ - sed -f tmp.sed < config.tmp > config.h ; \ - $(RM) tmp.sed config.tmp + sed -n -f configpk.sed < ../configure.ac > /tmp/tmp.sed ; \ + sed -f config.sed < ../configh.in > /tmp/config.tmp ; \ + sed -f /tmp/tmp.sed < /tmp/config.tmp > config.h ; \ + $(RM) /tmp/tmp.sed /tmp/config.tmp + cp pc/config.h $(distdir)/pc/config.h # Special rules for individual files # Use of awk instead of $(AWK) is deliberate, in case gawk doesn't build -- cgit v1.2.3 From 6e531b16714cc40800f812aee3780582957b9776 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 31 Jan 2014 11:28:29 +0200 Subject: Minor doc fixes. --- doc/ChangeLog | 5 + doc/gawk.info | 548 ++++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 30 ++-- doc/gawktexi.in | 30 ++-- 4 files changed, 309 insertions(+), 304 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 7841dc5e..135bd350 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2014-01-31 Arnold D. Robbins + + * gawktexi.in: Add `()' to names of extension functions in indexing + commands and in one place in the text. Consistency, don'tcha know. + 2014-01-30 Arnold D. Robbins * gawktexi.in: Add a few missing STARTOFRANGE comments. diff --git a/doc/gawk.info b/doc/gawk.info index 440e9999..4046c106 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -13995,7 +13995,7 @@ corresponding character. Both functions are written very nicely in } } - Some explanation of the numbers used by `chr' is worthwhile. The + Some explanation of the numbers used by `chr()' is worthwhile. The most prominent character set in use today is ASCII.(1) Although an 8-bit byte can hold 256 distinct values (from 0 to 255), ASCII only defines characters that use the values from 0 to 127.(2) In the now @@ -30572,10 +30572,10 @@ Index * characters, transliterating: Translate Program. (line 6) * characters, values of as numbers: Ordinal Functions. (line 6) * Chassell, Robert J.: Acknowledgments. (line 33) -* chdir extension function: Extension Sample File Functions. +* chdir() extension function: Extension Sample File Functions. (line 12) * chem utility: Glossary. (line 151) -* chr extension function: Extension Sample Ord. +* chr() extension function: Extension Sample Ord. (line 15) * chr() user-defined function: Ordinal Functions. (line 16) * clear debugger command: Breakpoint Control. (line 36) @@ -31212,14 +31212,14 @@ Index * floating-point, numbers <1>: Unexpected Results. (line 6) * floating-point, numbers: General Arithmetic. (line 6) * floating-point, VAX/VMS: VMS Running. (line 51) -* fnmatch extension function: Extension Sample Fnmatch. +* fnmatch() extension function: Extension Sample Fnmatch. (line 6) * FNR variable <1>: Auto-set. (line 112) * FNR variable: Records. (line 6) * FNR variable, changing: Auto-set. (line 323) * for statement: For Statement. (line 6) * for statement, looping over arrays: Scanning an Array. (line 20) -* fork extension function: Extension Sample Fork. +* fork() extension function: Extension Sample Fork. (line 11) * format specifiers, mixing regular with positional specifiers: Printf Ordering. (line 57) @@ -31261,7 +31261,7 @@ Index * FSF (Free Software Foundation) <1>: Glossary. (line 305) * FSF (Free Software Foundation) <2>: Getting. (line 10) * FSF (Free Software Foundation): Manual History. (line 6) -* fts extension function: Extension Sample File Functions. +* fts() extension function: Extension Sample File Functions. (line 77) * FUNCTAB array: Auto-set. (line 128) * function calls: Function Calls. (line 6) @@ -31449,7 +31449,7 @@ Index * gettext library: Explaining gettext. (line 6) * gettext library, locale categories: Explaining gettext. (line 80) * gettext() function (C library): Explaining gettext. (line 62) -* gettimeofday extension function: Extension Sample Time. +* gettimeofday() extension function: Extension Sample Time. (line 13) * GMP: Arbitrary Precision Arithmetic. (line 6) @@ -31903,7 +31903,7 @@ Index * OR bitwise operation: Bitwise Functions. (line 6) * or Boolean-logic operator: Boolean Ops. (line 6) * or() function (gawk): Bitwise Functions. (line 49) -* ord extension function: Extension Sample Ord. +* ord() extension function: Extension Sample Ord. (line 12) * ord() user-defined function: Ordinal Functions. (line 16) * order of evaluation, concatenation: Concatenation. (line 41) @@ -32151,13 +32151,13 @@ Index * Rankin, Pat <2>: Contributors. (line 37) * Rankin, Pat <3>: Assignment Ops. (line 100) * Rankin, Pat: Acknowledgments. (line 60) -* reada extension function: Extension Sample Read write array. +* reada() extension function: Extension Sample Read write array. (line 15) * readable data files, checking: File Checking. (line 6) * readable.awk program: File Checking. (line 11) * readdir extension: Extension Sample Readdir. (line 9) -* readfile extension function: Extension Sample Readfile. +* readfile() extension function: Extension Sample Readfile. (line 11) * readfile() user-defined function: Readfile Function. (line 30) * recipe for a programming language: History. (line 6) @@ -32401,9 +32401,9 @@ Index * single-character fields: Single Character Fields. (line 6) * Skywalker, Luke: Undocumented. (line 6) -* sleep extension function: Extension Sample Time. - (line 23) * sleep utility: Alarm Program. (line 109) +* sleep() extension function: Extension Sample Time. + (line 23) * Solaris, POSIX-compliant awk: Other Versions. (line 96) * sort function, arrays, sorting: Array Sorting Functions. (line 6) @@ -32447,7 +32447,7 @@ Index * standard input <1>: Special FD. (line 6) * standard input: Read Terminal. (line 6) * standard output: Special FD. (line 6) -* stat extension function: Extension Sample File Functions. +* stat() extension function: Extension Sample File Functions. (line 18) * statements, compound, control statements and: Statements. (line 10) * statements, control, in actions: Statements. (line 6) @@ -32681,9 +32681,9 @@ Index * w debugger command (alias for watch): Viewing And Changing Data. (line 67) * w utility: Constant Size. (line 22) -* wait extension function: Extension Sample Fork. +* wait() extension function: Extension Sample Fork. (line 22) -* waitpid extension function: Extension Sample Fork. +* waitpid() extension function: Extension Sample Fork. (line 18) * walk_array() user-defined function: Walking Arrays. (line 14) * Wall, Larry <1>: Future Extensions. (line 6) @@ -32715,7 +32715,7 @@ Index * words, counting: Wc Program. (line 6) * words, duplicate, searching for: Dupword Program. (line 6) * words, usage counts, generating: Word Sorting. (line 6) -* writea extension function: Extension Sample Read write array. +* writea() extension function: Extension Sample Read write array. (line 9) * xgettext utility: String Extraction. (line 13) * XOR bitwise operation: Bitwise Functions. (line 6) @@ -33017,263 +33017,263 @@ Node: Assert Function575184 Node: Round Function578510 Node: Cliff Random Function580053 Node: Ordinal Functions581069 -Ref: Ordinal Functions-Footnote-1584139 -Ref: Ordinal Functions-Footnote-2584391 -Node: Join Function584600 -Ref: Join Function-Footnote-1586371 -Node: Getlocaltime Function586571 -Node: Readfile Function590312 -Node: Data File Management592151 -Node: Filetrans Function592783 -Node: Rewind Function596852 -Node: File Checking598239 -Node: Empty Files599333 -Node: Ignoring Assigns601563 -Node: Getopt Function603116 -Ref: Getopt Function-Footnote-1614419 -Node: Passwd Functions614622 -Ref: Passwd Functions-Footnote-1623597 -Node: Group Functions623685 -Node: Walking Arrays631769 -Node: Sample Programs633906 -Node: Running Examples634580 -Node: Clones635308 -Node: Cut Program636532 -Node: Egrep Program646377 -Ref: Egrep Program-Footnote-1654150 -Node: Id Program654260 -Node: Split Program657876 -Ref: Split Program-Footnote-1661395 -Node: Tee Program661523 -Node: Uniq Program664326 -Node: Wc Program671755 -Ref: Wc Program-Footnote-1676021 -Ref: Wc Program-Footnote-2676221 -Node: Miscellaneous Programs676313 -Node: Dupword Program677501 -Node: Alarm Program679532 -Node: Translate Program684285 -Ref: Translate Program-Footnote-1688672 -Ref: Translate Program-Footnote-2688920 -Node: Labels Program689054 -Ref: Labels Program-Footnote-1692425 -Node: Word Sorting692509 -Node: History Sorting696393 -Node: Extract Program698232 -Ref: Extract Program-Footnote-1705735 -Node: Simple Sed705863 -Node: Igawk Program708925 -Ref: Igawk Program-Footnote-1724082 -Ref: Igawk Program-Footnote-2724283 -Node: Anagram Program724421 -Node: Signature Program727489 -Node: Advanced Features728589 -Node: Nondecimal Data730475 -Node: Array Sorting732058 -Node: Controlling Array Traversal732755 -Node: Array Sorting Functions741039 -Ref: Array Sorting Functions-Footnote-1744908 -Node: Two-way I/O745102 -Ref: Two-way I/O-Footnote-1750534 -Node: TCP/IP Networking750604 -Node: Profiling753448 -Node: Internationalization760945 -Node: I18N and L10N762370 -Node: Explaining gettext763056 -Ref: Explaining gettext-Footnote-1768124 -Ref: Explaining gettext-Footnote-2768308 -Node: Programmer i18n768473 -Node: Translator i18n772675 -Node: String Extraction773468 -Ref: String Extraction-Footnote-1774429 -Node: Printf Ordering774515 -Ref: Printf Ordering-Footnote-1777299 -Node: I18N Portability777363 -Ref: I18N Portability-Footnote-1779812 -Node: I18N Example779875 -Ref: I18N Example-Footnote-1782513 -Node: Gawk I18N782585 -Node: Debugger783206 -Node: Debugging784177 -Node: Debugging Concepts784610 -Node: Debugging Terms786466 -Node: Awk Debugging789063 -Node: Sample Debugging Session789955 -Node: Debugger Invocation790475 -Node: Finding The Bug791807 -Node: List of Debugger Commands798295 -Node: Breakpoint Control799629 -Node: Debugger Execution Control803293 -Node: Viewing And Changing Data806653 -Node: Execution Stack810009 -Node: Debugger Info811476 -Node: Miscellaneous Debugger Commands815458 -Node: Readline Support820634 -Node: Limitations821465 -Node: Arbitrary Precision Arithmetic823717 -Ref: Arbitrary Precision Arithmetic-Footnote-1825366 -Node: General Arithmetic825514 -Node: Floating Point Issues827234 -Node: String Conversion Precision828115 -Ref: String Conversion Precision-Footnote-1829820 -Node: Unexpected Results829929 -Node: POSIX Floating Point Problems832082 -Ref: POSIX Floating Point Problems-Footnote-1835907 -Node: Integer Programming835945 -Node: Floating-point Programming837684 -Ref: Floating-point Programming-Footnote-1844015 -Ref: Floating-point Programming-Footnote-2844285 -Node: Floating-point Representation844549 -Node: Floating-point Context845714 -Ref: table-ieee-formats846553 -Node: Rounding Mode847937 -Ref: table-rounding-modes848416 -Ref: Rounding Mode-Footnote-1851431 -Node: Gawk and MPFR851610 -Node: Arbitrary Precision Floats852865 -Ref: Arbitrary Precision Floats-Footnote-1855308 -Node: Setting Precision855624 -Ref: table-predefined-precision-strings856310 -Node: Setting Rounding Mode858455 -Ref: table-gawk-rounding-modes858859 -Node: Floating-point Constants860046 -Node: Changing Precision861475 -Ref: Changing Precision-Footnote-1862872 -Node: Exact Arithmetic863046 -Node: Arbitrary Precision Integers866184 -Ref: Arbitrary Precision Integers-Footnote-1869202 -Node: Dynamic Extensions869349 -Node: Extension Intro870807 -Node: Plugin License872072 -Node: Extension Mechanism Outline872757 -Ref: load-extension873174 -Ref: load-new-function874652 -Ref: call-new-function875647 -Node: Extension API Description877662 -Node: Extension API Functions Introduction878875 -Node: General Data Types883741 -Ref: General Data Types-Footnote-1889346 -Node: Requesting Values889645 -Ref: table-value-types-returned890376 -Node: Constructor Functions891330 -Node: Registration Functions894350 -Node: Extension Functions895035 -Node: Exit Callback Functions897260 -Node: Extension Version String898509 -Node: Input Parsers899159 -Node: Output Wrappers908916 -Node: Two-way processors913426 -Node: Printing Messages915634 -Ref: Printing Messages-Footnote-1916711 -Node: Updating `ERRNO'916863 -Node: Accessing Parameters917602 -Node: Symbol Table Access918832 -Node: Symbol table by name919344 -Node: Symbol table by cookie921091 -Ref: Symbol table by cookie-Footnote-1925221 -Node: Cached values925284 -Ref: Cached values-Footnote-1928733 -Node: Array Manipulation928824 -Ref: Array Manipulation-Footnote-1929922 -Node: Array Data Types929961 -Ref: Array Data Types-Footnote-1932664 -Node: Array Functions932756 -Node: Flattening Arrays936522 -Node: Creating Arrays943374 -Node: Extension API Variables948099 -Node: Extension Versioning948735 -Node: Extension API Informational Variables950636 -Node: Extension API Boilerplate951722 -Node: Finding Extensions955526 -Node: Extension Example956086 -Node: Internal File Description956816 -Node: Internal File Ops960907 -Ref: Internal File Ops-Footnote-1972415 -Node: Using Internal File Ops972555 -Ref: Using Internal File Ops-Footnote-1974908 -Node: Extension Samples975174 -Node: Extension Sample File Functions976698 -Node: Extension Sample Fnmatch985183 -Node: Extension Sample Fork986909 -Node: Extension Sample Inplace988127 -Node: Extension Sample Ord989905 -Node: Extension Sample Readdir990741 -Node: Extension Sample Revout992273 -Node: Extension Sample Rev2way992866 -Node: Extension Sample Read write array993556 -Node: Extension Sample Readfile995439 -Node: Extension Sample API Tests996257 -Node: Extension Sample Time996782 -Node: gawkextlib998146 -Node: Language History1000927 -Node: V7/SVR3.11002520 -Node: SVR41004840 -Node: POSIX1006282 -Node: BTL1007668 -Node: POSIX/GNU1008402 -Node: Feature History1014001 -Node: Common Extensions1026965 -Node: Ranges and Locales1028277 -Ref: Ranges and Locales-Footnote-11032895 -Ref: Ranges and Locales-Footnote-21032922 -Ref: Ranges and Locales-Footnote-31033182 -Node: Contributors1033403 -Node: Installation1038548 -Node: Gawk Distribution1039442 -Node: Getting1039926 -Node: Extracting1040752 -Node: Distribution contents1042444 -Node: Unix Installation1048149 -Node: Quick Installation1048766 -Node: Additional Configuration Options1051210 -Node: Configuration Philosophy1052946 -Node: Non-Unix Installation1055300 -Node: PC Installation1055758 -Node: PC Binary Installation1057057 -Node: PC Compiling1058905 -Node: PC Testing1061849 -Node: PC Using1063025 -Node: Cygwin1067210 -Node: MSYS1068210 -Node: VMS Installation1068724 -Node: VMS Compilation1069488 -Ref: VMS Compilation-Footnote-11071103 -Node: VMS Dynamic Extensions1071161 -Node: VMS Installation Details1072534 -Node: VMS Running1074781 -Node: VMS GNV1077615 -Node: VMS Old Gawk1078338 -Node: Bugs1078808 -Node: Other Versions1082726 -Node: Notes1088810 -Node: Compatibility Mode1089610 -Node: Additions1090393 -Node: Accessing The Source1091320 -Node: Adding Code1092760 -Node: New Ports1098805 -Node: Derived Files1102940 -Ref: Derived Files-Footnote-11108261 -Ref: Derived Files-Footnote-21108295 -Ref: Derived Files-Footnote-31108895 -Node: Future Extensions1108993 -Node: Implementation Limitations1109576 -Node: Extension Design1110828 -Node: Old Extension Problems1111982 -Ref: Old Extension Problems-Footnote-11113490 -Node: Extension New Mechanism Goals1113547 -Ref: Extension New Mechanism Goals-Footnote-11116912 -Node: Extension Other Design Decisions1117098 -Node: Extension Future Growth1119204 -Node: Old Extension Mechanism1120040 -Node: Basic Concepts1121780 -Node: Basic High Level1122461 -Ref: figure-general-flow1122732 -Ref: figure-process-flow1123331 -Ref: Basic High Level-Footnote-11126560 -Node: Basic Data Typing1126745 -Node: Glossary1130100 -Node: Copying1155562 -Node: GNU Free Documentation License1193119 -Node: Index1218256 +Ref: Ordinal Functions-Footnote-1584141 +Ref: Ordinal Functions-Footnote-2584393 +Node: Join Function584602 +Ref: Join Function-Footnote-1586373 +Node: Getlocaltime Function586573 +Node: Readfile Function590314 +Node: Data File Management592153 +Node: Filetrans Function592785 +Node: Rewind Function596854 +Node: File Checking598241 +Node: Empty Files599335 +Node: Ignoring Assigns601565 +Node: Getopt Function603118 +Ref: Getopt Function-Footnote-1614421 +Node: Passwd Functions614624 +Ref: Passwd Functions-Footnote-1623599 +Node: Group Functions623687 +Node: Walking Arrays631771 +Node: Sample Programs633908 +Node: Running Examples634582 +Node: Clones635310 +Node: Cut Program636534 +Node: Egrep Program646379 +Ref: Egrep Program-Footnote-1654152 +Node: Id Program654262 +Node: Split Program657878 +Ref: Split Program-Footnote-1661397 +Node: Tee Program661525 +Node: Uniq Program664328 +Node: Wc Program671757 +Ref: Wc Program-Footnote-1676023 +Ref: Wc Program-Footnote-2676223 +Node: Miscellaneous Programs676315 +Node: Dupword Program677503 +Node: Alarm Program679534 +Node: Translate Program684287 +Ref: Translate Program-Footnote-1688674 +Ref: Translate Program-Footnote-2688922 +Node: Labels Program689056 +Ref: Labels Program-Footnote-1692427 +Node: Word Sorting692511 +Node: History Sorting696395 +Node: Extract Program698234 +Ref: Extract Program-Footnote-1705737 +Node: Simple Sed705865 +Node: Igawk Program708927 +Ref: Igawk Program-Footnote-1724084 +Ref: Igawk Program-Footnote-2724285 +Node: Anagram Program724423 +Node: Signature Program727491 +Node: Advanced Features728591 +Node: Nondecimal Data730477 +Node: Array Sorting732060 +Node: Controlling Array Traversal732757 +Node: Array Sorting Functions741041 +Ref: Array Sorting Functions-Footnote-1744910 +Node: Two-way I/O745104 +Ref: Two-way I/O-Footnote-1750536 +Node: TCP/IP Networking750606 +Node: Profiling753450 +Node: Internationalization760947 +Node: I18N and L10N762372 +Node: Explaining gettext763058 +Ref: Explaining gettext-Footnote-1768126 +Ref: Explaining gettext-Footnote-2768310 +Node: Programmer i18n768475 +Node: Translator i18n772677 +Node: String Extraction773470 +Ref: String Extraction-Footnote-1774431 +Node: Printf Ordering774517 +Ref: Printf Ordering-Footnote-1777301 +Node: I18N Portability777365 +Ref: I18N Portability-Footnote-1779814 +Node: I18N Example779877 +Ref: I18N Example-Footnote-1782515 +Node: Gawk I18N782587 +Node: Debugger783208 +Node: Debugging784179 +Node: Debugging Concepts784612 +Node: Debugging Terms786468 +Node: Awk Debugging789065 +Node: Sample Debugging Session789957 +Node: Debugger Invocation790477 +Node: Finding The Bug791809 +Node: List of Debugger Commands798297 +Node: Breakpoint Control799631 +Node: Debugger Execution Control803295 +Node: Viewing And Changing Data806655 +Node: Execution Stack810011 +Node: Debugger Info811478 +Node: Miscellaneous Debugger Commands815460 +Node: Readline Support820636 +Node: Limitations821467 +Node: Arbitrary Precision Arithmetic823719 +Ref: Arbitrary Precision Arithmetic-Footnote-1825368 +Node: General Arithmetic825516 +Node: Floating Point Issues827236 +Node: String Conversion Precision828117 +Ref: String Conversion Precision-Footnote-1829822 +Node: Unexpected Results829931 +Node: POSIX Floating Point Problems832084 +Ref: POSIX Floating Point Problems-Footnote-1835909 +Node: Integer Programming835947 +Node: Floating-point Programming837686 +Ref: Floating-point Programming-Footnote-1844017 +Ref: Floating-point Programming-Footnote-2844287 +Node: Floating-point Representation844551 +Node: Floating-point Context845716 +Ref: table-ieee-formats846555 +Node: Rounding Mode847939 +Ref: table-rounding-modes848418 +Ref: Rounding Mode-Footnote-1851433 +Node: Gawk and MPFR851612 +Node: Arbitrary Precision Floats852867 +Ref: Arbitrary Precision Floats-Footnote-1855310 +Node: Setting Precision855626 +Ref: table-predefined-precision-strings856312 +Node: Setting Rounding Mode858457 +Ref: table-gawk-rounding-modes858861 +Node: Floating-point Constants860048 +Node: Changing Precision861477 +Ref: Changing Precision-Footnote-1862874 +Node: Exact Arithmetic863048 +Node: Arbitrary Precision Integers866186 +Ref: Arbitrary Precision Integers-Footnote-1869204 +Node: Dynamic Extensions869351 +Node: Extension Intro870809 +Node: Plugin License872074 +Node: Extension Mechanism Outline872759 +Ref: load-extension873176 +Ref: load-new-function874654 +Ref: call-new-function875649 +Node: Extension API Description877664 +Node: Extension API Functions Introduction878877 +Node: General Data Types883743 +Ref: General Data Types-Footnote-1889348 +Node: Requesting Values889647 +Ref: table-value-types-returned890378 +Node: Constructor Functions891332 +Node: Registration Functions894352 +Node: Extension Functions895037 +Node: Exit Callback Functions897262 +Node: Extension Version String898511 +Node: Input Parsers899161 +Node: Output Wrappers908918 +Node: Two-way processors913428 +Node: Printing Messages915636 +Ref: Printing Messages-Footnote-1916713 +Node: Updating `ERRNO'916865 +Node: Accessing Parameters917604 +Node: Symbol Table Access918834 +Node: Symbol table by name919346 +Node: Symbol table by cookie921093 +Ref: Symbol table by cookie-Footnote-1925223 +Node: Cached values925286 +Ref: Cached values-Footnote-1928735 +Node: Array Manipulation928826 +Ref: Array Manipulation-Footnote-1929924 +Node: Array Data Types929963 +Ref: Array Data Types-Footnote-1932666 +Node: Array Functions932758 +Node: Flattening Arrays936524 +Node: Creating Arrays943376 +Node: Extension API Variables948101 +Node: Extension Versioning948737 +Node: Extension API Informational Variables950638 +Node: Extension API Boilerplate951724 +Node: Finding Extensions955528 +Node: Extension Example956088 +Node: Internal File Description956818 +Node: Internal File Ops960909 +Ref: Internal File Ops-Footnote-1972417 +Node: Using Internal File Ops972557 +Ref: Using Internal File Ops-Footnote-1974910 +Node: Extension Samples975176 +Node: Extension Sample File Functions976700 +Node: Extension Sample Fnmatch985185 +Node: Extension Sample Fork986911 +Node: Extension Sample Inplace988129 +Node: Extension Sample Ord989907 +Node: Extension Sample Readdir990743 +Node: Extension Sample Revout992275 +Node: Extension Sample Rev2way992868 +Node: Extension Sample Read write array993558 +Node: Extension Sample Readfile995441 +Node: Extension Sample API Tests996259 +Node: Extension Sample Time996784 +Node: gawkextlib998148 +Node: Language History1000929 +Node: V7/SVR3.11002522 +Node: SVR41004842 +Node: POSIX1006284 +Node: BTL1007670 +Node: POSIX/GNU1008404 +Node: Feature History1014003 +Node: Common Extensions1026967 +Node: Ranges and Locales1028279 +Ref: Ranges and Locales-Footnote-11032897 +Ref: Ranges and Locales-Footnote-21032924 +Ref: Ranges and Locales-Footnote-31033184 +Node: Contributors1033405 +Node: Installation1038550 +Node: Gawk Distribution1039444 +Node: Getting1039928 +Node: Extracting1040754 +Node: Distribution contents1042446 +Node: Unix Installation1048151 +Node: Quick Installation1048768 +Node: Additional Configuration Options1051212 +Node: Configuration Philosophy1052948 +Node: Non-Unix Installation1055302 +Node: PC Installation1055760 +Node: PC Binary Installation1057059 +Node: PC Compiling1058907 +Node: PC Testing1061851 +Node: PC Using1063027 +Node: Cygwin1067212 +Node: MSYS1068212 +Node: VMS Installation1068726 +Node: VMS Compilation1069490 +Ref: VMS Compilation-Footnote-11071105 +Node: VMS Dynamic Extensions1071163 +Node: VMS Installation Details1072536 +Node: VMS Running1074783 +Node: VMS GNV1077617 +Node: VMS Old Gawk1078340 +Node: Bugs1078810 +Node: Other Versions1082728 +Node: Notes1088812 +Node: Compatibility Mode1089612 +Node: Additions1090395 +Node: Accessing The Source1091322 +Node: Adding Code1092762 +Node: New Ports1098807 +Node: Derived Files1102942 +Ref: Derived Files-Footnote-11108263 +Ref: Derived Files-Footnote-21108297 +Ref: Derived Files-Footnote-31108897 +Node: Future Extensions1108995 +Node: Implementation Limitations1109578 +Node: Extension Design1110830 +Node: Old Extension Problems1111984 +Ref: Old Extension Problems-Footnote-11113492 +Node: Extension New Mechanism Goals1113549 +Ref: Extension New Mechanism Goals-Footnote-11116914 +Node: Extension Other Design Decisions1117100 +Node: Extension Future Growth1119206 +Node: Old Extension Mechanism1120042 +Node: Basic Concepts1121782 +Node: Basic High Level1122463 +Ref: figure-general-flow1122734 +Ref: figure-process-flow1123333 +Ref: Basic High Level-Footnote-11126562 +Node: Basic Data Typing1126747 +Node: Glossary1130102 +Node: Copying1155564 +Node: GNU Free Documentation License1193121 +Node: Index1218258  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index c7eb3988..10fd9b2c 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -19538,7 +19538,7 @@ function _ord_init( low, high, i, t) @cindex ASCII @cindex EBCDIC @cindex mark parity -Some explanation of the numbers used by @code{chr} is worthwhile. +Some explanation of the numbers used by @code{chr()} is worthwhile. The most prominent character set in use today is ASCII.@footnote{This is changing; many systems use Unicode, a very large character set that includes ASCII as a subset. On systems with full Unicode support, @@ -32280,14 +32280,14 @@ The usage is: @item @@load "filefuncs" This is how you load the extension. -@cindex @code{chdir} extension function +@cindex @code{chdir()} extension function @item 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}. -@cindex @code{stat} extension function +@cindex @code{stat()} extension function @item result = stat("/some/path", statdata [, follow]) The @code{stat()} function provides a hook into the @code{stat()} system call. @@ -32377,7 +32377,7 @@ or Not all systems support all file types. @end multitable -@cindex @code{fts} extension function +@cindex @code{fts()} extension function @item flags = or(FTS_PHYSICAL, ...) @itemx result = fts(pathlist, flags, filedata) Walk the file trees provided in @code{pathlist} and fill in the @@ -32498,7 +32498,7 @@ See @file{test/fts.awk} in the @command{gawk} distribution for an example. @node Extension Sample Fnmatch @subsection Interface To @code{fnmatch()} -@cindex @code{fnmatch} extension function +@cindex @code{fnmatch()} extension function This extension provides an interface to the C library @code{fnmatch()} function. The usage is: @@ -32571,7 +32571,7 @@ The @code{fork} extension adds three functions, as follows. @item @@load "fork" This is how you load the extension. -@cindex @code{fork} extension function +@cindex @code{fork()} extension function @item pid = fork() This function creates a new process. The return value is the zero in the child and the process-id number of the child in the parent, or @minus{}1 @@ -32579,13 +32579,13 @@ 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 +@cindex @code{waitpid()} extension function @item ret = waitpid(pid) 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. -@cindex @code{wait} extension function +@cindex @code{wait()} extension function @item ret = wait() This function waits for the first child to die. The return value is that of the @@ -32672,11 +32672,11 @@ The @code{ordchr} extension adds two functions, named @item @@load "ordchr" This is how you load the extension. -@cindex @code{ord} extension function +@cindex @code{ord()} extension function @item number = ord(string) Return the numeric value of the first character in @code{string}. -@cindex @code{chr} extension function +@cindex @code{chr()} extension function @item char = chr(number) Return a string whose first character is that represented by @code{number}. @end table @@ -32793,14 +32793,14 @@ The @code{rwarray} extension adds two functions, named @code{writea()} and @code{reada()}, as follows: @table @code -@cindex @code{writea} extension function +@cindex @code{writea()} extension function @item ret = writea(file, array) This function takes a string argument, which is the name of the file to which dump the array, and the array itself as the second argument. @code{writea()} understands multidimensional arrays. It returns one on success, or zero upon failure. -@cindex @code{reada} extension function +@cindex @code{reada()} extension function @item ret = reada(file, array) @code{reada()} is the inverse of @code{writea()}; it reads the file named as its first argument, filling in @@ -32843,7 +32843,7 @@ named @code{readfile()}: @item @@load "readfile" This is how you load the extension. -@cindex @code{readfile} extension function +@cindex @code{readfile()} extension function @item result = readfile("/some/path") The argument is the name of the file to read. The return value is a string containing the entire contents of the requested file. Upon error, @@ -32884,7 +32884,7 @@ inserting @samp{@@load "time"} in your script. @item @@load "time" This is how you load the extension. -@cindex @code{gettimeofday} extension function +@cindex @code{gettimeofday()} extension function @item the_time = gettimeofday() Return the time in seconds that has elapsed since 1970-01-01 UTC as a floating point value. If the time is unavailable on this platform, return @@ -32894,7 +32894,7 @@ If the standard C @code{gettimeofday()} system call is available on this platform, then it simply returns the value. Otherwise, if on Windows, it tries to use @code{GetSystemTimeAsFileTime()}. -@cindex @code{sleep} extension function +@cindex @code{sleep()} extension function @item result = sleep(@var{seconds}) 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}. diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 2ef3d077..09502879 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -18716,7 +18716,7 @@ function _ord_init( low, high, i, t) @cindex ASCII @cindex EBCDIC @cindex mark parity -Some explanation of the numbers used by @code{chr} is worthwhile. +Some explanation of the numbers used by @code{chr()} is worthwhile. The most prominent character set in use today is ASCII.@footnote{This is changing; many systems use Unicode, a very large character set that includes ASCII as a subset. On systems with full Unicode support, @@ -31429,14 +31429,14 @@ The usage is: @item @@load "filefuncs" This is how you load the extension. -@cindex @code{chdir} extension function +@cindex @code{chdir()} extension function @item 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}. -@cindex @code{stat} extension function +@cindex @code{stat()} extension function @item result = stat("/some/path", statdata [, follow]) The @code{stat()} function provides a hook into the @code{stat()} system call. @@ -31526,7 +31526,7 @@ or Not all systems support all file types. @end multitable -@cindex @code{fts} extension function +@cindex @code{fts()} extension function @item flags = or(FTS_PHYSICAL, ...) @itemx result = fts(pathlist, flags, filedata) Walk the file trees provided in @code{pathlist} and fill in the @@ -31647,7 +31647,7 @@ See @file{test/fts.awk} in the @command{gawk} distribution for an example. @node Extension Sample Fnmatch @subsection Interface To @code{fnmatch()} -@cindex @code{fnmatch} extension function +@cindex @code{fnmatch()} extension function This extension provides an interface to the C library @code{fnmatch()} function. The usage is: @@ -31720,7 +31720,7 @@ The @code{fork} extension adds three functions, as follows. @item @@load "fork" This is how you load the extension. -@cindex @code{fork} extension function +@cindex @code{fork()} extension function @item pid = fork() This function creates a new process. The return value is the zero in the child and the process-id number of the child in the parent, or @minus{}1 @@ -31728,13 +31728,13 @@ 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 +@cindex @code{waitpid()} extension function @item ret = waitpid(pid) 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. -@cindex @code{wait} extension function +@cindex @code{wait()} extension function @item ret = wait() This function waits for the first child to die. The return value is that of the @@ -31821,11 +31821,11 @@ The @code{ordchr} extension adds two functions, named @item @@load "ordchr" This is how you load the extension. -@cindex @code{ord} extension function +@cindex @code{ord()} extension function @item number = ord(string) Return the numeric value of the first character in @code{string}. -@cindex @code{chr} extension function +@cindex @code{chr()} extension function @item char = chr(number) Return a string whose first character is that represented by @code{number}. @end table @@ -31942,14 +31942,14 @@ The @code{rwarray} extension adds two functions, named @code{writea()} and @code{reada()}, as follows: @table @code -@cindex @code{writea} extension function +@cindex @code{writea()} extension function @item ret = writea(file, array) This function takes a string argument, which is the name of the file to which dump the array, and the array itself as the second argument. @code{writea()} understands multidimensional arrays. It returns one on success, or zero upon failure. -@cindex @code{reada} extension function +@cindex @code{reada()} extension function @item ret = reada(file, array) @code{reada()} is the inverse of @code{writea()}; it reads the file named as its first argument, filling in @@ -31992,7 +31992,7 @@ named @code{readfile()}: @item @@load "readfile" This is how you load the extension. -@cindex @code{readfile} extension function +@cindex @code{readfile()} extension function @item result = readfile("/some/path") The argument is the name of the file to read. The return value is a string containing the entire contents of the requested file. Upon error, @@ -32033,7 +32033,7 @@ inserting @samp{@@load "time"} in your script. @item @@load "time" This is how you load the extension. -@cindex @code{gettimeofday} extension function +@cindex @code{gettimeofday()} extension function @item the_time = gettimeofday() Return the time in seconds that has elapsed since 1970-01-01 UTC as a floating point value. If the time is unavailable on this platform, return @@ -32043,7 +32043,7 @@ If the standard C @code{gettimeofday()} system call is available on this platform, then it simply returns the value. Otherwise, if on Windows, it tries to use @code{GetSystemTimeAsFileTime()}. -@cindex @code{sleep} extension function +@cindex @code{sleep()} extension function @item result = sleep(@var{seconds}) 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}. -- cgit v1.2.3 From c712957772b810b017088e7b052fa06495c44471 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 31 Jan 2014 11:28:29 +0200 Subject: Minor doc fixes. --- doc/ChangeLog | 5 + doc/gawk.info | 548 ++++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 30 ++-- doc/gawktexi.in | 30 ++-- 4 files changed, 309 insertions(+), 304 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 7618db88..a5d48926 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2014-01-31 Arnold D. Robbins + + * gawktexi.in: Add `()' to names of extension functions in indexing + commands and in one place in the text. Consistency, don'tcha know. + 2014-01-30 Arnold D. Robbins * gawktexi.in: Add a few missing STARTOFRANGE comments. diff --git a/doc/gawk.info b/doc/gawk.info index defd9fed..3e6c3ea4 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -13986,7 +13986,7 @@ corresponding character. Both functions are written very nicely in } } - Some explanation of the numbers used by `chr' is worthwhile. The + Some explanation of the numbers used by `chr()' is worthwhile. The most prominent character set in use today is ASCII.(1) Although an 8-bit byte can hold 256 distinct values (from 0 to 255), ASCII only defines characters that use the values from 0 to 127.(2) In the now @@ -30563,10 +30563,10 @@ Index * characters, transliterating: Translate Program. (line 6) * characters, values of as numbers: Ordinal Functions. (line 6) * Chassell, Robert J.: Acknowledgments. (line 33) -* chdir extension function: Extension Sample File Functions. +* chdir() extension function: Extension Sample File Functions. (line 12) * chem utility: Glossary. (line 151) -* chr extension function: Extension Sample Ord. +* chr() extension function: Extension Sample Ord. (line 15) * chr() user-defined function: Ordinal Functions. (line 16) * clear debugger command: Breakpoint Control. (line 36) @@ -31203,14 +31203,14 @@ Index * floating-point, numbers <1>: Unexpected Results. (line 6) * floating-point, numbers: General Arithmetic. (line 6) * floating-point, VAX/VMS: VMS Running. (line 51) -* fnmatch extension function: Extension Sample Fnmatch. +* fnmatch() extension function: Extension Sample Fnmatch. (line 6) * FNR variable <1>: Auto-set. (line 103) * FNR variable: Records. (line 6) * FNR variable, changing: Auto-set. (line 314) * for statement: For Statement. (line 6) * for statement, looping over arrays: Scanning an Array. (line 20) -* fork extension function: Extension Sample Fork. +* fork() extension function: Extension Sample Fork. (line 11) * format specifiers, mixing regular with positional specifiers: Printf Ordering. (line 57) @@ -31252,7 +31252,7 @@ Index * FSF (Free Software Foundation) <1>: Glossary. (line 305) * FSF (Free Software Foundation) <2>: Getting. (line 10) * FSF (Free Software Foundation): Manual History. (line 6) -* fts extension function: Extension Sample File Functions. +* fts() extension function: Extension Sample File Functions. (line 77) * FUNCTAB array: Auto-set. (line 119) * function calls: Function Calls. (line 6) @@ -31440,7 +31440,7 @@ Index * gettext library: Explaining gettext. (line 6) * gettext library, locale categories: Explaining gettext. (line 80) * gettext() function (C library): Explaining gettext. (line 62) -* gettimeofday extension function: Extension Sample Time. +* gettimeofday() extension function: Extension Sample Time. (line 13) * GMP: Arbitrary Precision Arithmetic. (line 6) @@ -31894,7 +31894,7 @@ Index * OR bitwise operation: Bitwise Functions. (line 6) * or Boolean-logic operator: Boolean Ops. (line 6) * or() function (gawk): Bitwise Functions. (line 49) -* ord extension function: Extension Sample Ord. +* ord() extension function: Extension Sample Ord. (line 12) * ord() user-defined function: Ordinal Functions. (line 16) * order of evaluation, concatenation: Concatenation. (line 41) @@ -32142,13 +32142,13 @@ Index * Rankin, Pat <2>: Contributors. (line 37) * Rankin, Pat <3>: Assignment Ops. (line 100) * Rankin, Pat: Acknowledgments. (line 60) -* reada extension function: Extension Sample Read write array. +* reada() extension function: Extension Sample Read write array. (line 15) * readable data files, checking: File Checking. (line 6) * readable.awk program: File Checking. (line 11) * readdir extension: Extension Sample Readdir. (line 9) -* readfile extension function: Extension Sample Readfile. +* readfile() extension function: Extension Sample Readfile. (line 11) * readfile() user-defined function: Readfile Function. (line 30) * recipe for a programming language: History. (line 6) @@ -32392,9 +32392,9 @@ Index * single-character fields: Single Character Fields. (line 6) * Skywalker, Luke: Undocumented. (line 6) -* sleep extension function: Extension Sample Time. - (line 23) * sleep utility: Alarm Program. (line 109) +* sleep() extension function: Extension Sample Time. + (line 23) * Solaris, POSIX-compliant awk: Other Versions. (line 96) * sort function, arrays, sorting: Array Sorting Functions. (line 6) @@ -32438,7 +32438,7 @@ Index * standard input <1>: Special FD. (line 6) * standard input: Read Terminal. (line 6) * standard output: Special FD. (line 6) -* stat extension function: Extension Sample File Functions. +* stat() extension function: Extension Sample File Functions. (line 18) * statements, compound, control statements and: Statements. (line 10) * statements, control, in actions: Statements. (line 6) @@ -32672,9 +32672,9 @@ Index * w debugger command (alias for watch): Viewing And Changing Data. (line 67) * w utility: Constant Size. (line 22) -* wait extension function: Extension Sample Fork. +* wait() extension function: Extension Sample Fork. (line 22) -* waitpid extension function: Extension Sample Fork. +* waitpid() extension function: Extension Sample Fork. (line 18) * walk_array() user-defined function: Walking Arrays. (line 14) * Wall, Larry <1>: Future Extensions. (line 6) @@ -32706,7 +32706,7 @@ Index * words, counting: Wc Program. (line 6) * words, duplicate, searching for: Dupword Program. (line 6) * words, usage counts, generating: Word Sorting. (line 6) -* writea extension function: Extension Sample Read write array. +* writea() extension function: Extension Sample Read write array. (line 9) * xgettext utility: String Extraction. (line 13) * XOR bitwise operation: Bitwise Functions. (line 6) @@ -33008,263 +33008,263 @@ Node: Assert Function574792 Node: Round Function578118 Node: Cliff Random Function579661 Node: Ordinal Functions580677 -Ref: Ordinal Functions-Footnote-1583747 -Ref: Ordinal Functions-Footnote-2583999 -Node: Join Function584208 -Ref: Join Function-Footnote-1585979 -Node: Getlocaltime Function586179 -Node: Readfile Function589920 -Node: Data File Management591759 -Node: Filetrans Function592391 -Node: Rewind Function596460 -Node: File Checking597847 -Node: Empty Files598941 -Node: Ignoring Assigns601171 -Node: Getopt Function602724 -Ref: Getopt Function-Footnote-1614027 -Node: Passwd Functions614230 -Ref: Passwd Functions-Footnote-1623205 -Node: Group Functions623293 -Node: Walking Arrays631377 -Node: Sample Programs633514 -Node: Running Examples634188 -Node: Clones634916 -Node: Cut Program636140 -Node: Egrep Program645985 -Ref: Egrep Program-Footnote-1653758 -Node: Id Program653868 -Node: Split Program657484 -Ref: Split Program-Footnote-1661003 -Node: Tee Program661131 -Node: Uniq Program663934 -Node: Wc Program671363 -Ref: Wc Program-Footnote-1675629 -Ref: Wc Program-Footnote-2675829 -Node: Miscellaneous Programs675921 -Node: Dupword Program677109 -Node: Alarm Program679140 -Node: Translate Program683893 -Ref: Translate Program-Footnote-1688280 -Ref: Translate Program-Footnote-2688528 -Node: Labels Program688662 -Ref: Labels Program-Footnote-1692033 -Node: Word Sorting692117 -Node: History Sorting696001 -Node: Extract Program697840 -Ref: Extract Program-Footnote-1705343 -Node: Simple Sed705471 -Node: Igawk Program708533 -Ref: Igawk Program-Footnote-1723690 -Ref: Igawk Program-Footnote-2723891 -Node: Anagram Program724029 -Node: Signature Program727097 -Node: Advanced Features728197 -Node: Nondecimal Data730083 -Node: Array Sorting731666 -Node: Controlling Array Traversal732363 -Node: Array Sorting Functions740647 -Ref: Array Sorting Functions-Footnote-1744516 -Node: Two-way I/O744710 -Ref: Two-way I/O-Footnote-1750142 -Node: TCP/IP Networking750212 -Node: Profiling753056 -Node: Internationalization760553 -Node: I18N and L10N761978 -Node: Explaining gettext762664 -Ref: Explaining gettext-Footnote-1767732 -Ref: Explaining gettext-Footnote-2767916 -Node: Programmer i18n768081 -Node: Translator i18n772283 -Node: String Extraction773076 -Ref: String Extraction-Footnote-1774037 -Node: Printf Ordering774123 -Ref: Printf Ordering-Footnote-1776907 -Node: I18N Portability776971 -Ref: I18N Portability-Footnote-1779420 -Node: I18N Example779483 -Ref: I18N Example-Footnote-1782121 -Node: Gawk I18N782193 -Node: Debugger782814 -Node: Debugging783785 -Node: Debugging Concepts784218 -Node: Debugging Terms786074 -Node: Awk Debugging788671 -Node: Sample Debugging Session789563 -Node: Debugger Invocation790083 -Node: Finding The Bug791415 -Node: List of Debugger Commands797903 -Node: Breakpoint Control799237 -Node: Debugger Execution Control802901 -Node: Viewing And Changing Data806261 -Node: Execution Stack809617 -Node: Debugger Info811084 -Node: Miscellaneous Debugger Commands815066 -Node: Readline Support820242 -Node: Limitations821073 -Node: Arbitrary Precision Arithmetic823325 -Ref: Arbitrary Precision Arithmetic-Footnote-1824974 -Node: General Arithmetic825122 -Node: Floating Point Issues826842 -Node: String Conversion Precision827723 -Ref: String Conversion Precision-Footnote-1829428 -Node: Unexpected Results829537 -Node: POSIX Floating Point Problems831690 -Ref: POSIX Floating Point Problems-Footnote-1835515 -Node: Integer Programming835553 -Node: Floating-point Programming837292 -Ref: Floating-point Programming-Footnote-1843623 -Ref: Floating-point Programming-Footnote-2843893 -Node: Floating-point Representation844157 -Node: Floating-point Context845322 -Ref: table-ieee-formats846161 -Node: Rounding Mode847545 -Ref: table-rounding-modes848024 -Ref: Rounding Mode-Footnote-1851039 -Node: Gawk and MPFR851218 -Node: Arbitrary Precision Floats852473 -Ref: Arbitrary Precision Floats-Footnote-1854916 -Node: Setting Precision855232 -Ref: table-predefined-precision-strings855918 -Node: Setting Rounding Mode858063 -Ref: table-gawk-rounding-modes858467 -Node: Floating-point Constants859654 -Node: Changing Precision861083 -Ref: Changing Precision-Footnote-1862480 -Node: Exact Arithmetic862654 -Node: Arbitrary Precision Integers865792 -Ref: Arbitrary Precision Integers-Footnote-1868810 -Node: Dynamic Extensions868957 -Node: Extension Intro870415 -Node: Plugin License871680 -Node: Extension Mechanism Outline872365 -Ref: load-extension872782 -Ref: load-new-function874260 -Ref: call-new-function875255 -Node: Extension API Description877270 -Node: Extension API Functions Introduction878483 -Node: General Data Types883349 -Ref: General Data Types-Footnote-1888954 -Node: Requesting Values889253 -Ref: table-value-types-returned889984 -Node: Constructor Functions890938 -Node: Registration Functions893958 -Node: Extension Functions894643 -Node: Exit Callback Functions896868 -Node: Extension Version String898117 -Node: Input Parsers898767 -Node: Output Wrappers908524 -Node: Two-way processors913034 -Node: Printing Messages915242 -Ref: Printing Messages-Footnote-1916319 -Node: Updating `ERRNO'916471 -Node: Accessing Parameters917210 -Node: Symbol Table Access918440 -Node: Symbol table by name918952 -Node: Symbol table by cookie920699 -Ref: Symbol table by cookie-Footnote-1924829 -Node: Cached values924892 -Ref: Cached values-Footnote-1928341 -Node: Array Manipulation928432 -Ref: Array Manipulation-Footnote-1929530 -Node: Array Data Types929569 -Ref: Array Data Types-Footnote-1932272 -Node: Array Functions932364 -Node: Flattening Arrays936130 -Node: Creating Arrays942982 -Node: Extension API Variables947707 -Node: Extension Versioning948343 -Node: Extension API Informational Variables950244 -Node: Extension API Boilerplate951330 -Node: Finding Extensions955134 -Node: Extension Example955694 -Node: Internal File Description956424 -Node: Internal File Ops960515 -Ref: Internal File Ops-Footnote-1972023 -Node: Using Internal File Ops972163 -Ref: Using Internal File Ops-Footnote-1974516 -Node: Extension Samples974782 -Node: Extension Sample File Functions976306 -Node: Extension Sample Fnmatch984791 -Node: Extension Sample Fork986517 -Node: Extension Sample Inplace987735 -Node: Extension Sample Ord989513 -Node: Extension Sample Readdir990349 -Node: Extension Sample Revout991881 -Node: Extension Sample Rev2way992474 -Node: Extension Sample Read write array993164 -Node: Extension Sample Readfile995047 -Node: Extension Sample API Tests995865 -Node: Extension Sample Time996390 -Node: gawkextlib997754 -Node: Language History1000535 -Node: V7/SVR3.11002128 -Node: SVR41004448 -Node: POSIX1005890 -Node: BTL1007276 -Node: POSIX/GNU1008010 -Node: Feature History1013609 -Node: Common Extensions1026573 -Node: Ranges and Locales1027885 -Ref: Ranges and Locales-Footnote-11032503 -Ref: Ranges and Locales-Footnote-21032530 -Ref: Ranges and Locales-Footnote-31032790 -Node: Contributors1033011 -Node: Installation1038156 -Node: Gawk Distribution1039050 -Node: Getting1039534 -Node: Extracting1040360 -Node: Distribution contents1042052 -Node: Unix Installation1047757 -Node: Quick Installation1048374 -Node: Additional Configuration Options1050818 -Node: Configuration Philosophy1052554 -Node: Non-Unix Installation1054908 -Node: PC Installation1055366 -Node: PC Binary Installation1056665 -Node: PC Compiling1058513 -Node: PC Testing1061457 -Node: PC Using1062633 -Node: Cygwin1066818 -Node: MSYS1067818 -Node: VMS Installation1068332 -Node: VMS Compilation1069096 -Ref: VMS Compilation-Footnote-11070711 -Node: VMS Dynamic Extensions1070769 -Node: VMS Installation Details1072142 -Node: VMS Running1074389 -Node: VMS GNV1077223 -Node: VMS Old Gawk1077946 -Node: Bugs1078416 -Node: Other Versions1082334 -Node: Notes1088418 -Node: Compatibility Mode1089218 -Node: Additions1090001 -Node: Accessing The Source1090928 -Node: Adding Code1092368 -Node: New Ports1098413 -Node: Derived Files1102548 -Ref: Derived Files-Footnote-11107869 -Ref: Derived Files-Footnote-21107903 -Ref: Derived Files-Footnote-31108503 -Node: Future Extensions1108601 -Node: Implementation Limitations1109184 -Node: Extension Design1110436 -Node: Old Extension Problems1111590 -Ref: Old Extension Problems-Footnote-11113098 -Node: Extension New Mechanism Goals1113155 -Ref: Extension New Mechanism Goals-Footnote-11116520 -Node: Extension Other Design Decisions1116706 -Node: Extension Future Growth1118812 -Node: Old Extension Mechanism1119648 -Node: Basic Concepts1121388 -Node: Basic High Level1122069 -Ref: figure-general-flow1122340 -Ref: figure-process-flow1122939 -Ref: Basic High Level-Footnote-11126168 -Node: Basic Data Typing1126353 -Node: Glossary1129708 -Node: Copying1155170 -Node: GNU Free Documentation License1192727 -Node: Index1217864 +Ref: Ordinal Functions-Footnote-1583749 +Ref: Ordinal Functions-Footnote-2584001 +Node: Join Function584210 +Ref: Join Function-Footnote-1585981 +Node: Getlocaltime Function586181 +Node: Readfile Function589922 +Node: Data File Management591761 +Node: Filetrans Function592393 +Node: Rewind Function596462 +Node: File Checking597849 +Node: Empty Files598943 +Node: Ignoring Assigns601173 +Node: Getopt Function602726 +Ref: Getopt Function-Footnote-1614029 +Node: Passwd Functions614232 +Ref: Passwd Functions-Footnote-1623207 +Node: Group Functions623295 +Node: Walking Arrays631379 +Node: Sample Programs633516 +Node: Running Examples634190 +Node: Clones634918 +Node: Cut Program636142 +Node: Egrep Program645987 +Ref: Egrep Program-Footnote-1653760 +Node: Id Program653870 +Node: Split Program657486 +Ref: Split Program-Footnote-1661005 +Node: Tee Program661133 +Node: Uniq Program663936 +Node: Wc Program671365 +Ref: Wc Program-Footnote-1675631 +Ref: Wc Program-Footnote-2675831 +Node: Miscellaneous Programs675923 +Node: Dupword Program677111 +Node: Alarm Program679142 +Node: Translate Program683895 +Ref: Translate Program-Footnote-1688282 +Ref: Translate Program-Footnote-2688530 +Node: Labels Program688664 +Ref: Labels Program-Footnote-1692035 +Node: Word Sorting692119 +Node: History Sorting696003 +Node: Extract Program697842 +Ref: Extract Program-Footnote-1705345 +Node: Simple Sed705473 +Node: Igawk Program708535 +Ref: Igawk Program-Footnote-1723692 +Ref: Igawk Program-Footnote-2723893 +Node: Anagram Program724031 +Node: Signature Program727099 +Node: Advanced Features728199 +Node: Nondecimal Data730085 +Node: Array Sorting731668 +Node: Controlling Array Traversal732365 +Node: Array Sorting Functions740649 +Ref: Array Sorting Functions-Footnote-1744518 +Node: Two-way I/O744712 +Ref: Two-way I/O-Footnote-1750144 +Node: TCP/IP Networking750214 +Node: Profiling753058 +Node: Internationalization760555 +Node: I18N and L10N761980 +Node: Explaining gettext762666 +Ref: Explaining gettext-Footnote-1767734 +Ref: Explaining gettext-Footnote-2767918 +Node: Programmer i18n768083 +Node: Translator i18n772285 +Node: String Extraction773078 +Ref: String Extraction-Footnote-1774039 +Node: Printf Ordering774125 +Ref: Printf Ordering-Footnote-1776909 +Node: I18N Portability776973 +Ref: I18N Portability-Footnote-1779422 +Node: I18N Example779485 +Ref: I18N Example-Footnote-1782123 +Node: Gawk I18N782195 +Node: Debugger782816 +Node: Debugging783787 +Node: Debugging Concepts784220 +Node: Debugging Terms786076 +Node: Awk Debugging788673 +Node: Sample Debugging Session789565 +Node: Debugger Invocation790085 +Node: Finding The Bug791417 +Node: List of Debugger Commands797905 +Node: Breakpoint Control799239 +Node: Debugger Execution Control802903 +Node: Viewing And Changing Data806263 +Node: Execution Stack809619 +Node: Debugger Info811086 +Node: Miscellaneous Debugger Commands815068 +Node: Readline Support820244 +Node: Limitations821075 +Node: Arbitrary Precision Arithmetic823327 +Ref: Arbitrary Precision Arithmetic-Footnote-1824976 +Node: General Arithmetic825124 +Node: Floating Point Issues826844 +Node: String Conversion Precision827725 +Ref: String Conversion Precision-Footnote-1829430 +Node: Unexpected Results829539 +Node: POSIX Floating Point Problems831692 +Ref: POSIX Floating Point Problems-Footnote-1835517 +Node: Integer Programming835555 +Node: Floating-point Programming837294 +Ref: Floating-point Programming-Footnote-1843625 +Ref: Floating-point Programming-Footnote-2843895 +Node: Floating-point Representation844159 +Node: Floating-point Context845324 +Ref: table-ieee-formats846163 +Node: Rounding Mode847547 +Ref: table-rounding-modes848026 +Ref: Rounding Mode-Footnote-1851041 +Node: Gawk and MPFR851220 +Node: Arbitrary Precision Floats852475 +Ref: Arbitrary Precision Floats-Footnote-1854918 +Node: Setting Precision855234 +Ref: table-predefined-precision-strings855920 +Node: Setting Rounding Mode858065 +Ref: table-gawk-rounding-modes858469 +Node: Floating-point Constants859656 +Node: Changing Precision861085 +Ref: Changing Precision-Footnote-1862482 +Node: Exact Arithmetic862656 +Node: Arbitrary Precision Integers865794 +Ref: Arbitrary Precision Integers-Footnote-1868812 +Node: Dynamic Extensions868959 +Node: Extension Intro870417 +Node: Plugin License871682 +Node: Extension Mechanism Outline872367 +Ref: load-extension872784 +Ref: load-new-function874262 +Ref: call-new-function875257 +Node: Extension API Description877272 +Node: Extension API Functions Introduction878485 +Node: General Data Types883351 +Ref: General Data Types-Footnote-1888956 +Node: Requesting Values889255 +Ref: table-value-types-returned889986 +Node: Constructor Functions890940 +Node: Registration Functions893960 +Node: Extension Functions894645 +Node: Exit Callback Functions896870 +Node: Extension Version String898119 +Node: Input Parsers898769 +Node: Output Wrappers908526 +Node: Two-way processors913036 +Node: Printing Messages915244 +Ref: Printing Messages-Footnote-1916321 +Node: Updating `ERRNO'916473 +Node: Accessing Parameters917212 +Node: Symbol Table Access918442 +Node: Symbol table by name918954 +Node: Symbol table by cookie920701 +Ref: Symbol table by cookie-Footnote-1924831 +Node: Cached values924894 +Ref: Cached values-Footnote-1928343 +Node: Array Manipulation928434 +Ref: Array Manipulation-Footnote-1929532 +Node: Array Data Types929571 +Ref: Array Data Types-Footnote-1932274 +Node: Array Functions932366 +Node: Flattening Arrays936132 +Node: Creating Arrays942984 +Node: Extension API Variables947709 +Node: Extension Versioning948345 +Node: Extension API Informational Variables950246 +Node: Extension API Boilerplate951332 +Node: Finding Extensions955136 +Node: Extension Example955696 +Node: Internal File Description956426 +Node: Internal File Ops960517 +Ref: Internal File Ops-Footnote-1972025 +Node: Using Internal File Ops972165 +Ref: Using Internal File Ops-Footnote-1974518 +Node: Extension Samples974784 +Node: Extension Sample File Functions976308 +Node: Extension Sample Fnmatch984793 +Node: Extension Sample Fork986519 +Node: Extension Sample Inplace987737 +Node: Extension Sample Ord989515 +Node: Extension Sample Readdir990351 +Node: Extension Sample Revout991883 +Node: Extension Sample Rev2way992476 +Node: Extension Sample Read write array993166 +Node: Extension Sample Readfile995049 +Node: Extension Sample API Tests995867 +Node: Extension Sample Time996392 +Node: gawkextlib997756 +Node: Language History1000537 +Node: V7/SVR3.11002130 +Node: SVR41004450 +Node: POSIX1005892 +Node: BTL1007278 +Node: POSIX/GNU1008012 +Node: Feature History1013611 +Node: Common Extensions1026575 +Node: Ranges and Locales1027887 +Ref: Ranges and Locales-Footnote-11032505 +Ref: Ranges and Locales-Footnote-21032532 +Ref: Ranges and Locales-Footnote-31032792 +Node: Contributors1033013 +Node: Installation1038158 +Node: Gawk Distribution1039052 +Node: Getting1039536 +Node: Extracting1040362 +Node: Distribution contents1042054 +Node: Unix Installation1047759 +Node: Quick Installation1048376 +Node: Additional Configuration Options1050820 +Node: Configuration Philosophy1052556 +Node: Non-Unix Installation1054910 +Node: PC Installation1055368 +Node: PC Binary Installation1056667 +Node: PC Compiling1058515 +Node: PC Testing1061459 +Node: PC Using1062635 +Node: Cygwin1066820 +Node: MSYS1067820 +Node: VMS Installation1068334 +Node: VMS Compilation1069098 +Ref: VMS Compilation-Footnote-11070713 +Node: VMS Dynamic Extensions1070771 +Node: VMS Installation Details1072144 +Node: VMS Running1074391 +Node: VMS GNV1077225 +Node: VMS Old Gawk1077948 +Node: Bugs1078418 +Node: Other Versions1082336 +Node: Notes1088420 +Node: Compatibility Mode1089220 +Node: Additions1090003 +Node: Accessing The Source1090930 +Node: Adding Code1092370 +Node: New Ports1098415 +Node: Derived Files1102550 +Ref: Derived Files-Footnote-11107871 +Ref: Derived Files-Footnote-21107905 +Ref: Derived Files-Footnote-31108505 +Node: Future Extensions1108603 +Node: Implementation Limitations1109186 +Node: Extension Design1110438 +Node: Old Extension Problems1111592 +Ref: Old Extension Problems-Footnote-11113100 +Node: Extension New Mechanism Goals1113157 +Ref: Extension New Mechanism Goals-Footnote-11116522 +Node: Extension Other Design Decisions1116708 +Node: Extension Future Growth1118814 +Node: Old Extension Mechanism1119650 +Node: Basic Concepts1121390 +Node: Basic High Level1122071 +Ref: figure-general-flow1122342 +Ref: figure-process-flow1122941 +Ref: Basic High Level-Footnote-11126170 +Node: Basic Data Typing1126355 +Node: Glossary1129710 +Node: Copying1155172 +Node: GNU Free Documentation License1192729 +Node: Index1217866  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index b396f9e0..6af87dd0 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -19530,7 +19530,7 @@ function _ord_init( low, high, i, t) @cindex ASCII @cindex EBCDIC @cindex mark parity -Some explanation of the numbers used by @code{chr} is worthwhile. +Some explanation of the numbers used by @code{chr()} is worthwhile. The most prominent character set in use today is ASCII.@footnote{This is changing; many systems use Unicode, a very large character set that includes ASCII as a subset. On systems with full Unicode support, @@ -32272,14 +32272,14 @@ The usage is: @item @@load "filefuncs" This is how you load the extension. -@cindex @code{chdir} extension function +@cindex @code{chdir()} extension function @item 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}. -@cindex @code{stat} extension function +@cindex @code{stat()} extension function @item result = stat("/some/path", statdata [, follow]) The @code{stat()} function provides a hook into the @code{stat()} system call. @@ -32369,7 +32369,7 @@ or Not all systems support all file types. @end multitable -@cindex @code{fts} extension function +@cindex @code{fts()} extension function @item flags = or(FTS_PHYSICAL, ...) @itemx result = fts(pathlist, flags, filedata) Walk the file trees provided in @code{pathlist} and fill in the @@ -32490,7 +32490,7 @@ See @file{test/fts.awk} in the @command{gawk} distribution for an example. @node Extension Sample Fnmatch @subsection Interface To @code{fnmatch()} -@cindex @code{fnmatch} extension function +@cindex @code{fnmatch()} extension function This extension provides an interface to the C library @code{fnmatch()} function. The usage is: @@ -32563,7 +32563,7 @@ The @code{fork} extension adds three functions, as follows. @item @@load "fork" This is how you load the extension. -@cindex @code{fork} extension function +@cindex @code{fork()} extension function @item pid = fork() This function creates a new process. The return value is the zero in the child and the process-id number of the child in the parent, or @minus{}1 @@ -32571,13 +32571,13 @@ 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 +@cindex @code{waitpid()} extension function @item ret = waitpid(pid) 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. -@cindex @code{wait} extension function +@cindex @code{wait()} extension function @item ret = wait() This function waits for the first child to die. The return value is that of the @@ -32664,11 +32664,11 @@ The @code{ordchr} extension adds two functions, named @item @@load "ordchr" This is how you load the extension. -@cindex @code{ord} extension function +@cindex @code{ord()} extension function @item number = ord(string) Return the numeric value of the first character in @code{string}. -@cindex @code{chr} extension function +@cindex @code{chr()} extension function @item char = chr(number) Return a string whose first character is that represented by @code{number}. @end table @@ -32785,14 +32785,14 @@ The @code{rwarray} extension adds two functions, named @code{writea()} and @code{reada()}, as follows: @table @code -@cindex @code{writea} extension function +@cindex @code{writea()} extension function @item ret = writea(file, array) This function takes a string argument, which is the name of the file to which dump the array, and the array itself as the second argument. @code{writea()} understands multidimensional arrays. It returns one on success, or zero upon failure. -@cindex @code{reada} extension function +@cindex @code{reada()} extension function @item ret = reada(file, array) @code{reada()} is the inverse of @code{writea()}; it reads the file named as its first argument, filling in @@ -32835,7 +32835,7 @@ named @code{readfile()}: @item @@load "readfile" This is how you load the extension. -@cindex @code{readfile} extension function +@cindex @code{readfile()} extension function @item result = readfile("/some/path") The argument is the name of the file to read. The return value is a string containing the entire contents of the requested file. Upon error, @@ -32876,7 +32876,7 @@ inserting @samp{@@load "time"} in your script. @item @@load "time" This is how you load the extension. -@cindex @code{gettimeofday} extension function +@cindex @code{gettimeofday()} extension function @item the_time = gettimeofday() Return the time in seconds that has elapsed since 1970-01-01 UTC as a floating point value. If the time is unavailable on this platform, return @@ -32886,7 +32886,7 @@ If the standard C @code{gettimeofday()} system call is available on this platform, then it simply returns the value. Otherwise, if on Windows, it tries to use @code{GetSystemTimeAsFileTime()}. -@cindex @code{sleep} extension function +@cindex @code{sleep()} extension function @item result = sleep(@var{seconds}) 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}. diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 2e6928e0..b7a8e012 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -18708,7 +18708,7 @@ function _ord_init( low, high, i, t) @cindex ASCII @cindex EBCDIC @cindex mark parity -Some explanation of the numbers used by @code{chr} is worthwhile. +Some explanation of the numbers used by @code{chr()} is worthwhile. The most prominent character set in use today is ASCII.@footnote{This is changing; many systems use Unicode, a very large character set that includes ASCII as a subset. On systems with full Unicode support, @@ -31421,14 +31421,14 @@ The usage is: @item @@load "filefuncs" This is how you load the extension. -@cindex @code{chdir} extension function +@cindex @code{chdir()} extension function @item 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}. -@cindex @code{stat} extension function +@cindex @code{stat()} extension function @item result = stat("/some/path", statdata [, follow]) The @code{stat()} function provides a hook into the @code{stat()} system call. @@ -31518,7 +31518,7 @@ or Not all systems support all file types. @end multitable -@cindex @code{fts} extension function +@cindex @code{fts()} extension function @item flags = or(FTS_PHYSICAL, ...) @itemx result = fts(pathlist, flags, filedata) Walk the file trees provided in @code{pathlist} and fill in the @@ -31639,7 +31639,7 @@ See @file{test/fts.awk} in the @command{gawk} distribution for an example. @node Extension Sample Fnmatch @subsection Interface To @code{fnmatch()} -@cindex @code{fnmatch} extension function +@cindex @code{fnmatch()} extension function This extension provides an interface to the C library @code{fnmatch()} function. The usage is: @@ -31712,7 +31712,7 @@ The @code{fork} extension adds three functions, as follows. @item @@load "fork" This is how you load the extension. -@cindex @code{fork} extension function +@cindex @code{fork()} extension function @item pid = fork() This function creates a new process. The return value is the zero in the child and the process-id number of the child in the parent, or @minus{}1 @@ -31720,13 +31720,13 @@ 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 +@cindex @code{waitpid()} extension function @item ret = waitpid(pid) 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. -@cindex @code{wait} extension function +@cindex @code{wait()} extension function @item ret = wait() This function waits for the first child to die. The return value is that of the @@ -31813,11 +31813,11 @@ The @code{ordchr} extension adds two functions, named @item @@load "ordchr" This is how you load the extension. -@cindex @code{ord} extension function +@cindex @code{ord()} extension function @item number = ord(string) Return the numeric value of the first character in @code{string}. -@cindex @code{chr} extension function +@cindex @code{chr()} extension function @item char = chr(number) Return a string whose first character is that represented by @code{number}. @end table @@ -31934,14 +31934,14 @@ The @code{rwarray} extension adds two functions, named @code{writea()} and @code{reada()}, as follows: @table @code -@cindex @code{writea} extension function +@cindex @code{writea()} extension function @item ret = writea(file, array) This function takes a string argument, which is the name of the file to which dump the array, and the array itself as the second argument. @code{writea()} understands multidimensional arrays. It returns one on success, or zero upon failure. -@cindex @code{reada} extension function +@cindex @code{reada()} extension function @item ret = reada(file, array) @code{reada()} is the inverse of @code{writea()}; it reads the file named as its first argument, filling in @@ -31984,7 +31984,7 @@ named @code{readfile()}: @item @@load "readfile" This is how you load the extension. -@cindex @code{readfile} extension function +@cindex @code{readfile()} extension function @item result = readfile("/some/path") The argument is the name of the file to read. The return value is a string containing the entire contents of the requested file. Upon error, @@ -32025,7 +32025,7 @@ inserting @samp{@@load "time"} in your script. @item @@load "time" This is how you load the extension. -@cindex @code{gettimeofday} extension function +@cindex @code{gettimeofday()} extension function @item the_time = gettimeofday() Return the time in seconds that has elapsed since 1970-01-01 UTC as a floating point value. If the time is unavailable on this platform, return @@ -32035,7 +32035,7 @@ If the standard C @code{gettimeofday()} system call is available on this platform, then it simply returns the value. Otherwise, if on Windows, it tries to use @code{GetSystemTimeAsFileTime()}. -@cindex @code{sleep} extension function +@cindex @code{sleep()} extension function @item result = sleep(@var{seconds}) 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}. -- cgit v1.2.3 From 8e1bb1e107849bba12e163026e5ac1bc9ddd7ec9 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 31 Jan 2014 12:10:50 +0200 Subject: More changes to dist-hook. --- ChangeLog | 6 ++++++ Makefile.am | 5 ++++- Makefile.in | 5 ++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9b92bd2e..2a6d1df7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2014-01-31 Arnold D. Robbins + + * Makefile.am (dist-hook): Improve creation of pc/config.h. We + have to jump through a lot of hoops for 'make distcheck' to + actually work. + 2014-01-30 Arnold D. Robbins * Makefile.am (dist-hook): Improve creation of pc/config.h to copy diff --git a/Makefile.am b/Makefile.am index ee70378a..a8acdc48 100644 --- a/Makefile.am +++ b/Makefile.am @@ -172,11 +172,14 @@ check-local: gawk$(EXEEXT) dist-hook: cd $(distdir)/extension ; rm -f *.o *.so cd $(srcdir)/pc ; \ + chmod u+w config.h ; \ sed -n -f configpk.sed < ../configure.ac > /tmp/tmp.sed ; \ sed -f config.sed < ../configh.in > /tmp/config.tmp ; \ sed -f /tmp/tmp.sed < /tmp/config.tmp > config.h ; \ $(RM) /tmp/tmp.sed /tmp/config.tmp - cp pc/config.h $(distdir)/pc/config.h + pwd + chmod u+w $(distdir)/pc/config.h + cp $(srcdir)/pc/config.h $(distdir)/pc/config.h # Special rules for individual files # Use of awk instead of $(AWK) is deliberate, in case gawk doesn't build diff --git a/Makefile.in b/Makefile.in index 3ca45b2b..fe921ad8 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1171,11 +1171,14 @@ check-local: gawk$(EXEEXT) dist-hook: cd $(distdir)/extension ; rm -f *.o *.so cd $(srcdir)/pc ; \ + chmod u+w config.h ; \ sed -n -f configpk.sed < ../configure.ac > /tmp/tmp.sed ; \ sed -f config.sed < ../configh.in > /tmp/config.tmp ; \ sed -f /tmp/tmp.sed < /tmp/config.tmp > config.h ; \ $(RM) /tmp/tmp.sed /tmp/config.tmp - cp pc/config.h $(distdir)/pc/config.h + pwd + chmod u+w $(distdir)/pc/config.h + cp $(srcdir)/pc/config.h $(distdir)/pc/config.h # Special rules for individual files # Use of awk instead of $(AWK) is deliberate, in case gawk doesn't build -- cgit v1.2.3 From 4cb70d5caf61fcb63b2b4b8995e063aa96238dae Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 31 Jan 2014 12:13:10 +0200 Subject: Bump version for test tarball. --- configure | 20 ++++++++++---------- configure.ac | 2 +- pc/config.h | 6 +++--- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/configure b/configure index b94d92a4..8d34771a 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for GNU Awk 4.1.0c. +# Generated by GNU Autoconf 2.69 for GNU Awk 4.1.0d. # # Report bugs to . # @@ -580,8 +580,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GNU Awk' PACKAGE_TARNAME='gawk' -PACKAGE_VERSION='4.1.0c' -PACKAGE_STRING='GNU Awk 4.1.0c' +PACKAGE_VERSION='4.1.0d' +PACKAGE_STRING='GNU Awk 4.1.0d' PACKAGE_BUGREPORT='bug-gawk@gnu.org' PACKAGE_URL='http://www.gnu.org/software/gawk/' @@ -1324,7 +1324,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures GNU Awk 4.1.0c to adapt to many kinds of systems. +\`configure' configures GNU Awk 4.1.0d to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1394,7 +1394,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GNU Awk 4.1.0c:";; + short | recursive ) echo "Configuration of GNU Awk 4.1.0d:";; esac cat <<\_ACEOF @@ -1512,7 +1512,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -GNU Awk configure 4.1.0c +GNU Awk configure 4.1.0d generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2221,7 +2221,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by GNU Awk $as_me 4.1.0c, which was +It was created by GNU Awk $as_me 4.1.0d, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3104,7 +3104,7 @@ fi # Define the identity of the package. PACKAGE='gawk' - VERSION='4.1.0c' + VERSION='4.1.0d' cat >>confdefs.h <<_ACEOF @@ -11539,7 +11539,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by GNU Awk $as_me 4.1.0c, which was +This file was extended by GNU Awk $as_me 4.1.0d, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -11607,7 +11607,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -GNU Awk config.status 4.1.0c +GNU Awk config.status 4.1.0d configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 70d19009..1047cd10 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ dnl dnl Process this file with autoconf to produce a configure script. -AC_INIT([GNU Awk], 4.1.0c, bug-gawk@gnu.org, gawk) +AC_INIT([GNU Awk], 4.1.0d, bug-gawk@gnu.org, gawk) # This is a hack. Different versions of install on different systems # are just too different. Chuck it and use install-sh. diff --git a/pc/config.h b/pc/config.h index cd489877..d7f9ba91 100644 --- a/pc/config.h +++ b/pc/config.h @@ -423,7 +423,7 @@ #define PACKAGE_NAME "GNU Awk" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "GNU Awk 4.1.0c" +#define PACKAGE_STRING "GNU Awk 4.1.0d" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "gawk" @@ -432,7 +432,7 @@ #define PACKAGE_URL "http://www.gnu.org/software/gawk/" /* Define to the version of this package. */ -#define PACKAGE_VERSION "4.1.0c" +#define PACKAGE_VERSION "4.1.0d" /* Define to 1 if *printf supports %F format */ #undef PRINTF_HAS_F_FORMAT @@ -494,7 +494,7 @@ /* Version number of package */ -#define VERSION "4.1.0c" +#define VERSION "4.1.0d" /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE -- cgit v1.2.3 From 1855be261370b4489136bcf14536e0a2db3bd13d Mon Sep 17 00:00:00 2001 From: Scott Deifik Date: Mon, 3 Feb 2014 18:54:11 +0200 Subject: pc/Makefile.tst: Include original test/Makefile.in lines as comments. --- pc/ChangeLog | 5 +++++ pc/Makefile.tst | 16 ++++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/pc/ChangeLog b/pc/ChangeLog index 5f75283f..404bcb68 100644 --- a/pc/ChangeLog +++ b/pc/ChangeLog @@ -1,3 +1,8 @@ +2014-02-03 Scott Deifik + + * Makefile.tst: Include original test/Makefile.in lines as + comments. + 2014-01-28 Eli Zaretskii * Makefile.tst (strftime): Pass the value of 'date' command diff --git a/pc/Makefile.tst b/pc/Makefile.tst index e843eaa7..cab49423 100644 --- a/pc/Makefile.tst +++ b/pc/Makefile.tst @@ -431,12 +431,10 @@ nonl:: @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ strftime:: - @echo This test could fail on slow machines or on a minute boundary, - @echo so if it does, double check the actual results: @echo $@ # @GAWKLOCALE=C; export GAWKLOCALE; \ # TZ=GMT0; export TZ; \ -# (LC_ALL=C date) | $(AWK) -v OUTPUT=_$@ -f "$(srcdir)"/strftime.awk +# $(AWK) -v OUTPUT=_$@ -f "$(srcdir)"/strftime.awk @GAWKLOCALE=C; export GAWKLOCALE; \ TZ=GMT0; export TZ; \ $(AWK) -v OUTPUT=_$@ -v DATECMD="$(DATE)" -f "$(srcdir)"/strftime.awk @@ -1026,8 +1024,8 @@ inplace3:: testext:: @echo $@ -# @$(AWK) '/^(@load|BEGIN)/,/^}/' $(top_srcdir)/extension/testext.c > testext.awk - @$(AWK) ' /^(@load|BEGIN)/,/^}/' $(top_srcdir)/extension/testext.c > testext.awk +# @$(AWK) '/^(@load|BEGIN)/,/^}/' "$(top_srcdir)"/extension/testext.c > testext.awk + @$(AWK) ' /^(@load|BEGIN)/,/^}/' "$(top_srcdir)"/extension/testext.c > testext.awk @$(AWK) -f testext.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ testext.awk @@ -1038,12 +1036,14 @@ readdir: fi @echo $@ @echo This test may fail on MinGW if $(LS) does not report full Windows file index as the inode - @$(AWK) -f "$(srcdir)"/readdir.awk $(top_srcdir) > _$@ + @$(AWK) -f "$(srcdir)"/readdir.awk "$(top_srcdir)" > _$@ +# @ls -afi "$(top_srcdir)" > _dirlist @$(LS) -afi "$(top_srcdir)" > _dirlist +# @ls -lna "$(top_srcdir)" | sed 1d > _longlist @$(LS) -lna "$(top_srcdir)" | sed 1d > _longlist @$(AWK) -f "$(srcdir)"/readdir0.awk -v extout=_$@ \ -v dirlist=_dirlist -v longlist=_longlist > $@.ok - @-$(CMP) $@.ok _$@ && rm -f $@.ok _$@ + @-$(CMP) $@.ok _$@ && rm -f $@.ok _$@ _dirlist _longlist fts: @case `uname` in \ @@ -1056,6 +1056,7 @@ fts: esac @echo $@ @echo Expect $@ to fail with MinGW because function 'fts' is not defined. +# @$(AWK) -f "$(srcdir)"/fts.awk @$(AWK) -f "$(srcdir)"/fts.awk || echo EXIT CODE: $$? >>_$@ @-$(CMP) $@.ok _$@ && rm -f $@.ok _$@ @@ -1130,7 +1131,6 @@ backsmalls2: @[ -z "$$GAWKLOCALE" ] && GAWKLOCALE=en_US.UTF-8; \ AWKPATH="$(srcdir)" $(AWK) -f $@.awk "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ - Gt-dummy: # file Maketests, generated from Makefile.am by the Gentests program addcomma: -- cgit v1.2.3 From 5a1e957a2cda7d1f0062454a1c6caa4c835bd201 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 3 Feb 2014 21:04:18 +0200 Subject: Fix strftime test. --- test/ChangeLog | 9 ++++++++- test/strftime.awk | 10 ++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/test/ChangeLog b/test/ChangeLog index ff57e6da..8a5945bc 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,4 +1,11 @@ -2014-01-28 Eli Zaretskii +2014-02-03 Stepan Kasal + + * strftime.awk: the default format uses %e, not %d (Introduced on + 2014-01-16; the previous code mangled the output of command "date" + to match %d.) Remove the "mucking" for cygwin, it's obsolete and + incompatible with %e. + +2014-01-28 Eli Zaretskii * strftime.awk: If DATECMD variable is non-empty, use it instead of the literal "date" as the 'date'-like command. diff --git a/test/strftime.awk b/test/strftime.awk index 73cdc698..f1276c15 100644 --- a/test/strftime.awk +++ b/test/strftime.awk @@ -1,10 +1,6 @@ # strftime.awk ; test the strftime code # # input is the output of `date', see Makefile.in -# -# The mucking about with $0 and $NF is to avoid problems -# on cygwin, where the timezone field is empty and there -# are two consecutive blanks. BEGIN { maxtries = 10 @@ -13,7 +9,7 @@ BEGIN { datecmd = DATECMD if (datecmd == "") datecmd = "date" - fmt = "%a %b %d %H:%M:%S %Z %Y" + fmt = "%a %b %e %H:%M:%S %Z %Y" # loop until before equals after, thereby protecting # against a race condition where the seconds field might have @@ -35,7 +31,5 @@ BEGIN { } } print sd > "strftime.ok" - $0 = after - $NF = $NF - print > OUTPUT + print after > OUTPUT } -- cgit v1.2.3 From ffef130c33f07bd245823413e6f12105aa8dcbf9 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 3 Feb 2014 21:04:42 +0200 Subject: Remove compilation warning. --- ChangeLog | 5 +++++ awkgram.c | 2 ++ awkgram.y | 2 ++ 3 files changed, 9 insertions(+) diff --git a/ChangeLog b/ChangeLog index 2a6d1df7..43bc5bd1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-02-03 Arnold D. Robbins + + * awkgram.y (negate_num): Bracket `tval' in #ifdef MPFR since it's + only used in that code. + 2014-01-31 Arnold D. Robbins * Makefile.am (dist-hook): Improve creation of pc/config.h. We diff --git a/awkgram.c b/awkgram.c index 58ac3480..cd37cd7d 100644 --- a/awkgram.c +++ b/awkgram.c @@ -4512,7 +4512,9 @@ getfname(NODE *(*fptr)(int)) void negate_num(NODE *n) { +#ifdef HAVE_MPFR int tval = 0; +#endif if (! is_mpg_number(n)) { n->numbr = -n->numbr; diff --git a/awkgram.y b/awkgram.y index 6bbc150a..ecce1f6e 100644 --- a/awkgram.y +++ b/awkgram.y @@ -1964,7 +1964,9 @@ getfname(NODE *(*fptr)(int)) void negate_num(NODE *n) { +#ifdef HAVE_MPFR int tval = 0; +#endif if (! is_mpg_number(n)) { n->numbr = -n->numbr; -- cgit v1.2.3 From 9c2180330d85a9915b14c5fb5346dbc90b49fe87 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 3 Feb 2014 21:05:05 +0200 Subject: A number of small documentation updates. --- doc/ChangeLog | 5 ++++ doc/gawk.info | 4 ++-- doc/gawk.texi | 18 +++++++------- doc/gawkinet.info | 72 +++++++++++++++++++++++++++---------------------------- doc/gawkinet.texi | 6 ++--- doc/gawktexi.in | 18 +++++++------- doc/texinfo.tex | 14 +++++++++-- 7 files changed, 76 insertions(+), 61 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index a5d48926..d0865f91 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2014-02-03 Arnold D. Robbins + + * gawktexi.in, gawkinet.texi: Minor fixes, mostly in indexing. + * texinfo.tex: Update to latest. + 2014-01-31 Arnold D. Robbins * gawktexi.in: Add `()' to names of extension functions in indexing diff --git a/doc/gawk.info b/doc/gawk.info index 3e6c3ea4..53fd4920 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -30010,7 +30010,6 @@ Index * - (hyphen), in bracket expressions: Bracket Expressions. (line 17) * --assign option: Options. (line 46) * --bignum option: Options. (line 201) -* --c option: Options. (line 95) * --characters-as-bytes option: Options. (line 82) * --copyright option: Options. (line 102) * --debug option: Options. (line 122) @@ -30029,7 +30028,6 @@ Index * --gen-pot option: Options. (line 161) * --help option: Options. (line 168) * --include option: Options. (line 32) -* --L option: Options. (line 288) * --lint option <1>: Options. (line 182) * --lint option: Command Line. (line 20) * --lint-old option: Options. (line 288) @@ -30060,6 +30058,7 @@ Index (line 35) * -b option: Options. (line 82) * -C option: Options. (line 102) +* -c option: Options. (line 95) * -D option: Options. (line 122) * -d option: Options. (line 107) * -E option: Options. (line 139) @@ -30074,6 +30073,7 @@ Index * -g option: Options. (line 161) * -h option: Options. (line 168) * -i option: Options. (line 32) +* -L option: Options. (line 288) * -l option: Options. (line 173) * -M option: Options. (line 201) * -N option: Options. (line 215) diff --git a/doc/gawk.texi b/doc/gawk.texi index 6af87dd0..f25d21df 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -1261,7 +1261,7 @@ and the program ``the @command{awk} utility.'' This @value{DOCUMENT} explains both how to write programs in the @command{awk} language and how to run the @command{awk} utility. -The term @dfn{@command{awk} program} refers to a program written by you in +The term ``@command{awk} program'' refers to a program written by you in the @command{awk} programming language. @cindex @command{gawk}, @command{awk} and @@ -3338,7 +3338,7 @@ multibyte characters. This option is an easy way to tell @command{gawk}: @item -c @itemx --traditional -@cindex @code{--c} option +@cindex @code{-c} option @cindex @code{--traditional} option @cindex compatibility mode (@command{gawk}), specifying Specify @dfn{compatibility mode}, in which the GNU extensions to @@ -3633,7 +3633,7 @@ can't access your system (other than the specified input data file). @item -t @itemx --lint-old -@cindex @code{--L} option +@cindex @code{-L} option @cindex @code{--lint-old} option Warn about constructs that are not available in the original version of @command{awk} from Version 7 Unix @@ -8855,8 +8855,8 @@ Redirections in @command{awk} are written just like redirections in shell commands, except that they are written inside the @command{awk} program. @c the commas here are part of the see also -@cindex @code{print} statement, See Also redirection, of output -@cindex @code{printf} statement, See Also redirection, of output +@cindex @code{print} statement, See Also redirection@comma{} of output +@cindex @code{printf} statement, See Also redirection@comma{} of output There are four forms of output redirection: output to a file, output appended to a file, output through a pipe to another command, and output to a coprocess. They are all shown for the @code{print} statement, @@ -20636,7 +20636,7 @@ use @code{getopt()} to process their arguments. @c STARTOFRANGE libfudata @cindex libraries of @command{awk} functions, user database, reading @c STARTOFRANGE flibudata -@cindex functions, library, user database, reading +@cindex functions, library, user database@comma{} reading @c STARTOFRANGE udatar @cindex user database@comma{} reading @c STARTOFRANGE dataur @@ -21004,7 +21004,7 @@ uses these functions. @c STARTOFRANGE libfgdata @cindex libraries of @command{awk} functions, group database, reading @c STARTOFRANGE flibgdata -@cindex functions, library, group database, reading +@cindex functions, library, group database@comma{} reading @c STARTOFRANGE gdatar @cindex group database, reading @c STARTOFRANGE datagr @@ -24943,7 +24943,7 @@ It contains the following chapters: @node Advanced Features @chapter Advanced Features of @command{gawk} -@cindex advanced features, network connections, See Also networks, connections +@cindex advanced features, network connections, See Also networks@comma{} connections @c STARTOFRANGE gawadv @cindex @command{gawk}, features, advanced @c STARTOFRANGE advgaw @@ -34612,7 +34612,7 @@ helping David Trueman, and as the primary maintainer since around 1994. @appendix Installing @command{gawk} @c last two commas are part of see also -@cindex operating systems, See Also GNU/Linux, PC operating systems, Unix +@cindex operating systems, See Also GNU/Linux@comma{} PC operating systems@comma{} Unix @c STARTOFRANGE gligawk @cindex @command{gawk}, installing @c STARTOFRANGE ingawk diff --git a/doc/gawkinet.info b/doc/gawkinet.info index c8ce6b8d..0a0d69d8 100644 --- a/doc/gawkinet.info +++ b/doc/gawkinet.info @@ -613,7 +613,7 @@ tcp, udp x 0 x Invalid tcp, udp 0 0 0 Invalid tcp, udp 0 x 0 Invalid -Table 2.1: /inet Special File Components +Table 2.1: /inet Special File Components In general, TCP is the preferred mechanism to use. It is the simplest protocol to understand and to use. Use UDP only if @@ -4358,40 +4358,40 @@ Node: Using Networking17966 Node: Gawk Special Files20284 Node: Special File Fields22094 Ref: table-inet-components25967 -Node: Comparing Protocols27290 -Node: File /inet/tcp27823 -Node: File /inet/udp28849 -Node: TCP Connecting29947 -Node: Troubleshooting32285 -Ref: Troubleshooting-Footnote-135337 -Node: Interacting35906 -Node: Setting Up38636 -Node: Email42130 -Node: Web page44456 -Ref: Web page-Footnote-147261 -Node: Primitive Service47458 -Node: Interacting Service50192 -Ref: Interacting Service-Footnote-159321 -Node: CGI Lib59353 -Node: Simple Server66314 -Ref: Simple Server-Footnote-174037 -Node: Caveats74138 -Node: Challenges75281 -Node: Some Applications and Techniques83960 -Node: PANIC86417 -Node: GETURL88135 -Node: REMCONF90758 -Node: URLCHK96234 -Node: WEBGRAB100069 -Node: STATIST104519 -Ref: STATIST-Footnote-1116227 -Node: MAZE116672 -Node: MOBAGWHO122856 -Ref: MOBAGWHO-Footnote-1136800 -Node: STOXPRED136855 -Node: PROTBASE151110 -Node: Links164191 -Node: GNU Free Documentation License167625 -Node: Index192764 +Node: Comparing Protocols27287 +Node: File /inet/tcp27820 +Node: File /inet/udp28846 +Node: TCP Connecting29944 +Node: Troubleshooting32282 +Ref: Troubleshooting-Footnote-135334 +Node: Interacting35903 +Node: Setting Up38633 +Node: Email42127 +Node: Web page44453 +Ref: Web page-Footnote-147258 +Node: Primitive Service47455 +Node: Interacting Service50189 +Ref: Interacting Service-Footnote-159318 +Node: CGI Lib59350 +Node: Simple Server66311 +Ref: Simple Server-Footnote-174034 +Node: Caveats74135 +Node: Challenges75278 +Node: Some Applications and Techniques83957 +Node: PANIC86414 +Node: GETURL88132 +Node: REMCONF90755 +Node: URLCHK96231 +Node: WEBGRAB100066 +Node: STATIST104516 +Ref: STATIST-Footnote-1116224 +Node: MAZE116669 +Node: MOBAGWHO122853 +Ref: MOBAGWHO-Footnote-1136797 +Node: STOXPRED136852 +Node: PROTBASE151107 +Node: Links164188 +Node: GNU Free Documentation License167622 +Node: Index192761  End Tag Table diff --git a/doc/gawkinet.texi b/doc/gawkinet.texi index eb0f2d81..40198e1d 100644 --- a/doc/gawkinet.texi +++ b/doc/gawkinet.texi @@ -597,7 +597,7 @@ is started, @command{gawk} creates the appropriate network connection, and then two-way I/O proceeds as usual. @c last comma is part of see-also -@cindex input/output, two-way, See Also @command{gawk}, networking +@cindex input/output, two-way, See Also @command{gawk}@comma{} networking @cindex TCP/IP, sockets and At the C, C++, and Perl level, networking is accomplished via @dfn{sockets}, an Application Programming Interface (API) originally @@ -1144,9 +1144,9 @@ or the application cannot tolerate virtual circuit overhead. @node Setting Up, Email, Interacting, Using Networking @section Setting Up a Service @c last comma is part of tertiary -@cindex networks, @command{gawk} and, service, establishing +@cindex networks, @command{gawk} and, service@comma{} establishing @c last comma is part of tertiary -@cindex @command{gawk}, networking, service, establishing +@cindex @command{gawk}, networking, service@comma{} establishing The preceding programs behaved as clients that connect to a server somewhere on the Internet and request a particular service. Now we set up such a service to mimic the behavior of the @samp{daytime} service. diff --git a/doc/gawktexi.in b/doc/gawktexi.in index b7a8e012..ac793ea7 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -1228,7 +1228,7 @@ and the program ``the @command{awk} utility.'' This @value{DOCUMENT} explains both how to write programs in the @command{awk} language and how to run the @command{awk} utility. -The term @dfn{@command{awk} program} refers to a program written by you in +The term ``@command{awk} program'' refers to a program written by you in the @command{awk} programming language. @cindex @command{gawk}, @command{awk} and @@ -3266,7 +3266,7 @@ multibyte characters. This option is an easy way to tell @command{gawk}: @item -c @itemx --traditional -@cindex @code{--c} option +@cindex @code{-c} option @cindex @code{--traditional} option @cindex compatibility mode (@command{gawk}), specifying Specify @dfn{compatibility mode}, in which the GNU extensions to @@ -3561,7 +3561,7 @@ can't access your system (other than the specified input data file). @item -t @itemx --lint-old -@cindex @code{--L} option +@cindex @code{-L} option @cindex @code{--lint-old} option Warn about constructs that are not available in the original version of @command{awk} from Version 7 Unix @@ -8481,8 +8481,8 @@ Redirections in @command{awk} are written just like redirections in shell commands, except that they are written inside the @command{awk} program. @c the commas here are part of the see also -@cindex @code{print} statement, See Also redirection, of output -@cindex @code{printf} statement, See Also redirection, of output +@cindex @code{print} statement, See Also redirection@comma{} of output +@cindex @code{printf} statement, See Also redirection@comma{} of output There are four forms of output redirection: output to a file, output appended to a file, output through a pipe to another command, and output to a coprocess. They are all shown for the @code{print} statement, @@ -19785,7 +19785,7 @@ use @code{getopt()} to process their arguments. @c STARTOFRANGE libfudata @cindex libraries of @command{awk} functions, user database, reading @c STARTOFRANGE flibudata -@cindex functions, library, user database, reading +@cindex functions, library, user database@comma{} reading @c STARTOFRANGE udatar @cindex user database@comma{} reading @c STARTOFRANGE dataur @@ -20153,7 +20153,7 @@ uses these functions. @c STARTOFRANGE libfgdata @cindex libraries of @command{awk} functions, group database, reading @c STARTOFRANGE flibgdata -@cindex functions, library, group database, reading +@cindex functions, library, group database@comma{} reading @c STARTOFRANGE gdatar @cindex group database, reading @c STARTOFRANGE datagr @@ -24092,7 +24092,7 @@ It contains the following chapters: @node Advanced Features @chapter Advanced Features of @command{gawk} -@cindex advanced features, network connections, See Also networks, connections +@cindex advanced features, network connections, See Also networks@comma{} connections @c STARTOFRANGE gawadv @cindex @command{gawk}, features, advanced @c STARTOFRANGE advgaw @@ -33761,7 +33761,7 @@ helping David Trueman, and as the primary maintainer since around 1994. @appendix Installing @command{gawk} @c last two commas are part of see also -@cindex operating systems, See Also GNU/Linux, PC operating systems, Unix +@cindex operating systems, See Also GNU/Linux@comma{} PC operating systems@comma{} Unix @c STARTOFRANGE gligawk @cindex @command{gawk}, installing @c STARTOFRANGE ingawk diff --git a/doc/texinfo.tex b/doc/texinfo.tex index 704d6645..174e4aba 100644 --- a/doc/texinfo.tex +++ b/doc/texinfo.tex @@ -3,7 +3,7 @@ % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % -\def\texinfoversion{2014-01-16.10} +\def\texinfoversion{2014-01-30.15} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, @@ -4649,6 +4649,16 @@ end \definedummyword\verb \definedummyword\w \definedummyword\xref + % + % Consider: + % @macro mkind{arg1,arg2} + % @cindex \arg2\ + % @end macro + % @mkind{foo, bar} + % The space after the comma will end up in the temporary definition + % that we make for arg2 (see \parsemargdef ff.). We want all this to be + % expanded for the sake of the index, so we end up just seeing "bar". + \let\xeatspaces = \eatspaces } % \indexnofonts is used when outputting the strings to sort the index @@ -7474,7 +7484,7 @@ end % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.BLAH for each BLAH -% in the params list to some hook where the argument si to be expanded. If +% in the params list to some hook where the argument is to be expanded. If % there are less than 10 arguments that hook is to be replaced by ##N where N % is the position in that list, that is to say the macro arguments are to be % defined `a la TeX in the macro body. -- cgit v1.2.3 From 489a63923b753883500b8981b1fa578491d8f4ad Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 4 Feb 2014 06:23:53 +0200 Subject: Fix a spelling error in the ChangeLog. --- test/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/ChangeLog b/test/ChangeLog index 8a5945bc..18b912dd 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -29,7 +29,7 @@ * Makefile.am (strftime): Remove comment about the race condition, since this should be fixed. And gawk now calls date inside the script. - * strftime.awk: Based on an idea from Pat Ranking, fix the race + * strftime.awk: Based on an idea from Pat Rankin, fix the race condition by looping repeatedly over strftime/date/strftime until the before and after strftime results match. That should fix the race condition where the seconds field might increment between -- cgit v1.2.3 From b8d5e85062765f4bad3a05f6186bc6b7c25abd84 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 4 Feb 2014 06:24:13 +0200 Subject: Sync dfa.c to GNU grep. --- ChangeLog | 4 ++++ dfa.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 43bc5bd1..10f6aa97 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2014-02-04 Arnold D. Robbins + + * dfa.c (to_uchar): Make use of this. Syncs with GNU grep. + 2014-02-03 Arnold D. Robbins * awkgram.y (negate_num): Bracket `tval' in #ifdef MPFR since it's diff --git a/dfa.c b/dfa.c index ef456e11..d5e7fdf6 100644 --- a/dfa.c +++ b/dfa.c @@ -3045,7 +3045,7 @@ match_mb_charset (struct dfa *d, state_num s, position pos, size_t idx) /* Match in range 0-255? */ if (wc < NOTCHAR && work_mbc->cset != -1 - && tstbit ((unsigned char) wc, d->charclasses[work_mbc->cset])) + && tstbit (to_uchar (wc), d->charclasses[work_mbc->cset])) goto charset_matched; /* match with a character class? */ -- cgit v1.2.3 From c9d672c5a1b2b6f1094ac0f3cc9d51c3ad02ea5c Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 4 Feb 2014 06:24:28 +0200 Subject: More markup fixes, in the indexing. --- doc/ChangeLog | 4 + doc/gawk.info | 745 ++++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 64 ++--- doc/gawktexi.in | 64 ++--- 4 files changed, 440 insertions(+), 437 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index d0865f91..e7290d1a 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-02-03 Arnold D. Robbins + + * gawktexi.in: More minor fixes, in indexing. + 2014-02-03 Arnold D. Robbins * gawktexi.in, gawkinet.texi: Minor fixes, mostly in indexing. diff --git a/doc/gawk.info b/doc/gawk.info index 53fd4920..329f15d3 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -7906,7 +7906,6 @@ of error is very difficult to spot when scanning the source code. string comparison (true) `a = 2; b = " +2"' - `a == b' string comparison (false) @@ -30364,7 +30363,7 @@ Index * awk, POSIX and: Preface. (line 23) * awk, POSIX and, See Also POSIX awk: Preface. (line 23) * awk, regexp constants and: Comparison Operators. - (line 103) + (line 102) * awk, See Also gawk: Preface. (line 36) * awk, terms describing: This Manual. (line 6) * awk, uses for <1>: When. (line 6) @@ -30632,7 +30631,7 @@ Index (line 9) * comparison expressions, as patterns: Expression Patterns. (line 14) * comparison expressions, string vs. regexp: Comparison Operators. - (line 79) + (line 78) * compatibility mode (gawk), extensions: POSIX/GNU. (line 6) * compatibility mode (gawk), file names: Special Caveats. (line 9) * compatibility mode (gawk), hexadecimal numbers: Nondecimal-numbers. @@ -32170,7 +32169,7 @@ Index * reference counting, sorting arrays: Array Sorting Functions. (line 77) * regexp constants <1>: Comparison Operators. - (line 103) + (line 102) * regexp constants <2>: Regexp Constants. (line 6) * regexp constants: Regexp Usage. (line 57) * regexp constants, /=.../, /= operator and: Assignment Ops. (line 147) @@ -32897,374 +32896,374 @@ Node: Variable Typing334515 Ref: Variable Typing-Footnote-1338412 Node: Comparison Operators338534 Ref: table-relational-ops338944 -Node: POSIX String Comparison342493 -Ref: POSIX String Comparison-Footnote-1343449 -Node: Boolean Ops343587 -Ref: Boolean Ops-Footnote-1347665 -Node: Conditional Exp347756 -Node: Function Calls349488 -Node: Precedence353082 -Node: Locales356751 -Node: Patterns and Actions357840 -Node: Pattern Overview358894 -Node: Regexp Patterns360563 -Node: Expression Patterns361106 -Node: Ranges364791 -Node: BEGIN/END367757 -Node: Using BEGIN/END368519 -Ref: Using BEGIN/END-Footnote-1371250 -Node: I/O And BEGIN/END371356 -Node: BEGINFILE/ENDFILE373638 -Node: Empty376552 -Node: Using Shell Variables376868 -Node: Action Overview379153 -Node: Statements381510 -Node: If Statement383364 -Node: While Statement384863 -Node: Do Statement386907 -Node: For Statement388063 -Node: Switch Statement391215 -Node: Break Statement393312 -Node: Continue Statement395302 -Node: Next Statement397095 -Node: Nextfile Statement399485 -Node: Exit Statement402128 -Node: Built-in Variables404544 -Node: User-modified405639 -Ref: User-modified-Footnote-1413997 -Node: Auto-set414059 -Ref: Auto-set-Footnote-1427137 -Ref: Auto-set-Footnote-2427342 -Node: ARGC and ARGV427398 -Node: Arrays431249 -Node: Array Basics432754 -Node: Array Intro433580 -Node: Reference to Elements437897 -Node: Assigning Elements440167 -Node: Array Example440658 -Node: Scanning an Array442390 -Node: Controlling Scanning444704 -Ref: Controlling Scanning-Footnote-1449791 -Node: Delete450107 -Ref: Delete-Footnote-1452872 -Node: Numeric Array Subscripts452929 -Node: Uninitialized Subscripts455112 -Node: Multidimensional456739 -Node: Multiscanning459832 -Node: Arrays of Arrays461421 -Node: Functions466061 -Node: Built-in466880 -Node: Calling Built-in467958 -Node: Numeric Functions469946 -Ref: Numeric Functions-Footnote-1473778 -Ref: Numeric Functions-Footnote-2474135 -Ref: Numeric Functions-Footnote-3474183 -Node: String Functions474452 -Ref: String Functions-Footnote-1497372 -Ref: String Functions-Footnote-2497501 -Ref: String Functions-Footnote-3497749 -Node: Gory Details497836 -Ref: table-sub-escapes499515 -Ref: table-sub-posix-92500869 -Ref: table-sub-proposed502220 -Ref: table-posix-sub503574 -Ref: table-gensub-escapes505119 -Ref: Gory Details-Footnote-1506295 -Ref: Gory Details-Footnote-2506346 -Node: I/O Functions506497 -Ref: I/O Functions-Footnote-1513482 -Node: Time Functions513629 -Ref: Time Functions-Footnote-1524562 -Ref: Time Functions-Footnote-2524630 -Ref: Time Functions-Footnote-3524788 -Ref: Time Functions-Footnote-4524899 -Ref: Time Functions-Footnote-5525011 -Ref: Time Functions-Footnote-6525238 -Node: Bitwise Functions525504 -Ref: table-bitwise-ops526066 -Ref: Bitwise Functions-Footnote-1530287 -Node: Type Functions530471 -Node: I18N Functions531622 -Node: User-defined533249 -Node: Definition Syntax534053 -Ref: Definition Syntax-Footnote-1538963 -Node: Function Example539032 -Node: Function Caveats541626 -Node: Calling A Function542047 -Node: Variable Scope543162 -Node: Pass By Value/Reference546125 -Node: Return Statement549633 -Node: Dynamic Typing552614 -Node: Indirect Calls553545 -Node: Library Functions563230 -Ref: Library Functions-Footnote-1566743 -Ref: Library Functions-Footnote-2566886 -Node: Library Names567057 -Ref: Library Names-Footnote-1570528 -Ref: Library Names-Footnote-2570748 -Node: General Functions570834 -Node: Strtonum Function571862 -Node: Assert Function574792 -Node: Round Function578118 -Node: Cliff Random Function579661 -Node: Ordinal Functions580677 -Ref: Ordinal Functions-Footnote-1583749 -Ref: Ordinal Functions-Footnote-2584001 -Node: Join Function584210 -Ref: Join Function-Footnote-1585981 -Node: Getlocaltime Function586181 -Node: Readfile Function589922 -Node: Data File Management591761 -Node: Filetrans Function592393 -Node: Rewind Function596462 -Node: File Checking597849 -Node: Empty Files598943 -Node: Ignoring Assigns601173 -Node: Getopt Function602726 -Ref: Getopt Function-Footnote-1614029 -Node: Passwd Functions614232 -Ref: Passwd Functions-Footnote-1623207 -Node: Group Functions623295 -Node: Walking Arrays631379 -Node: Sample Programs633516 -Node: Running Examples634190 -Node: Clones634918 -Node: Cut Program636142 -Node: Egrep Program645987 -Ref: Egrep Program-Footnote-1653760 -Node: Id Program653870 -Node: Split Program657486 -Ref: Split Program-Footnote-1661005 -Node: Tee Program661133 -Node: Uniq Program663936 -Node: Wc Program671365 -Ref: Wc Program-Footnote-1675631 -Ref: Wc Program-Footnote-2675831 -Node: Miscellaneous Programs675923 -Node: Dupword Program677111 -Node: Alarm Program679142 -Node: Translate Program683895 -Ref: Translate Program-Footnote-1688282 -Ref: Translate Program-Footnote-2688530 -Node: Labels Program688664 -Ref: Labels Program-Footnote-1692035 -Node: Word Sorting692119 -Node: History Sorting696003 -Node: Extract Program697842 -Ref: Extract Program-Footnote-1705345 -Node: Simple Sed705473 -Node: Igawk Program708535 -Ref: Igawk Program-Footnote-1723692 -Ref: Igawk Program-Footnote-2723893 -Node: Anagram Program724031 -Node: Signature Program727099 -Node: Advanced Features728199 -Node: Nondecimal Data730085 -Node: Array Sorting731668 -Node: Controlling Array Traversal732365 -Node: Array Sorting Functions740649 -Ref: Array Sorting Functions-Footnote-1744518 -Node: Two-way I/O744712 -Ref: Two-way I/O-Footnote-1750144 -Node: TCP/IP Networking750214 -Node: Profiling753058 -Node: Internationalization760555 -Node: I18N and L10N761980 -Node: Explaining gettext762666 -Ref: Explaining gettext-Footnote-1767734 -Ref: Explaining gettext-Footnote-2767918 -Node: Programmer i18n768083 -Node: Translator i18n772285 -Node: String Extraction773078 -Ref: String Extraction-Footnote-1774039 -Node: Printf Ordering774125 -Ref: Printf Ordering-Footnote-1776909 -Node: I18N Portability776973 -Ref: I18N Portability-Footnote-1779422 -Node: I18N Example779485 -Ref: I18N Example-Footnote-1782123 -Node: Gawk I18N782195 -Node: Debugger782816 -Node: Debugging783787 -Node: Debugging Concepts784220 -Node: Debugging Terms786076 -Node: Awk Debugging788673 -Node: Sample Debugging Session789565 -Node: Debugger Invocation790085 -Node: Finding The Bug791417 -Node: List of Debugger Commands797905 -Node: Breakpoint Control799239 -Node: Debugger Execution Control802903 -Node: Viewing And Changing Data806263 -Node: Execution Stack809619 -Node: Debugger Info811086 -Node: Miscellaneous Debugger Commands815068 -Node: Readline Support820244 -Node: Limitations821075 -Node: Arbitrary Precision Arithmetic823327 -Ref: Arbitrary Precision Arithmetic-Footnote-1824976 -Node: General Arithmetic825124 -Node: Floating Point Issues826844 -Node: String Conversion Precision827725 -Ref: String Conversion Precision-Footnote-1829430 -Node: Unexpected Results829539 -Node: POSIX Floating Point Problems831692 -Ref: POSIX Floating Point Problems-Footnote-1835517 -Node: Integer Programming835555 -Node: Floating-point Programming837294 -Ref: Floating-point Programming-Footnote-1843625 -Ref: Floating-point Programming-Footnote-2843895 -Node: Floating-point Representation844159 -Node: Floating-point Context845324 -Ref: table-ieee-formats846163 -Node: Rounding Mode847547 -Ref: table-rounding-modes848026 -Ref: Rounding Mode-Footnote-1851041 -Node: Gawk and MPFR851220 -Node: Arbitrary Precision Floats852475 -Ref: Arbitrary Precision Floats-Footnote-1854918 -Node: Setting Precision855234 -Ref: table-predefined-precision-strings855920 -Node: Setting Rounding Mode858065 -Ref: table-gawk-rounding-modes858469 -Node: Floating-point Constants859656 -Node: Changing Precision861085 -Ref: Changing Precision-Footnote-1862482 -Node: Exact Arithmetic862656 -Node: Arbitrary Precision Integers865794 -Ref: Arbitrary Precision Integers-Footnote-1868812 -Node: Dynamic Extensions868959 -Node: Extension Intro870417 -Node: Plugin License871682 -Node: Extension Mechanism Outline872367 -Ref: load-extension872784 -Ref: load-new-function874262 -Ref: call-new-function875257 -Node: Extension API Description877272 -Node: Extension API Functions Introduction878485 -Node: General Data Types883351 -Ref: General Data Types-Footnote-1888956 -Node: Requesting Values889255 -Ref: table-value-types-returned889986 -Node: Constructor Functions890940 -Node: Registration Functions893960 -Node: Extension Functions894645 -Node: Exit Callback Functions896870 -Node: Extension Version String898119 -Node: Input Parsers898769 -Node: Output Wrappers908526 -Node: Two-way processors913036 -Node: Printing Messages915244 -Ref: Printing Messages-Footnote-1916321 -Node: Updating `ERRNO'916473 -Node: Accessing Parameters917212 -Node: Symbol Table Access918442 -Node: Symbol table by name918954 -Node: Symbol table by cookie920701 -Ref: Symbol table by cookie-Footnote-1924831 -Node: Cached values924894 -Ref: Cached values-Footnote-1928343 -Node: Array Manipulation928434 -Ref: Array Manipulation-Footnote-1929532 -Node: Array Data Types929571 -Ref: Array Data Types-Footnote-1932274 -Node: Array Functions932366 -Node: Flattening Arrays936132 -Node: Creating Arrays942984 -Node: Extension API Variables947709 -Node: Extension Versioning948345 -Node: Extension API Informational Variables950246 -Node: Extension API Boilerplate951332 -Node: Finding Extensions955136 -Node: Extension Example955696 -Node: Internal File Description956426 -Node: Internal File Ops960517 -Ref: Internal File Ops-Footnote-1972025 -Node: Using Internal File Ops972165 -Ref: Using Internal File Ops-Footnote-1974518 -Node: Extension Samples974784 -Node: Extension Sample File Functions976308 -Node: Extension Sample Fnmatch984793 -Node: Extension Sample Fork986519 -Node: Extension Sample Inplace987737 -Node: Extension Sample Ord989515 -Node: Extension Sample Readdir990351 -Node: Extension Sample Revout991883 -Node: Extension Sample Rev2way992476 -Node: Extension Sample Read write array993166 -Node: Extension Sample Readfile995049 -Node: Extension Sample API Tests995867 -Node: Extension Sample Time996392 -Node: gawkextlib997756 -Node: Language History1000537 -Node: V7/SVR3.11002130 -Node: SVR41004450 -Node: POSIX1005892 -Node: BTL1007278 -Node: POSIX/GNU1008012 -Node: Feature History1013611 -Node: Common Extensions1026575 -Node: Ranges and Locales1027887 -Ref: Ranges and Locales-Footnote-11032505 -Ref: Ranges and Locales-Footnote-21032532 -Ref: Ranges and Locales-Footnote-31032792 -Node: Contributors1033013 -Node: Installation1038158 -Node: Gawk Distribution1039052 -Node: Getting1039536 -Node: Extracting1040362 -Node: Distribution contents1042054 -Node: Unix Installation1047759 -Node: Quick Installation1048376 -Node: Additional Configuration Options1050820 -Node: Configuration Philosophy1052556 -Node: Non-Unix Installation1054910 -Node: PC Installation1055368 -Node: PC Binary Installation1056667 -Node: PC Compiling1058515 -Node: PC Testing1061459 -Node: PC Using1062635 -Node: Cygwin1066820 -Node: MSYS1067820 -Node: VMS Installation1068334 -Node: VMS Compilation1069098 -Ref: VMS Compilation-Footnote-11070713 -Node: VMS Dynamic Extensions1070771 -Node: VMS Installation Details1072144 -Node: VMS Running1074391 -Node: VMS GNV1077225 -Node: VMS Old Gawk1077948 -Node: Bugs1078418 -Node: Other Versions1082336 -Node: Notes1088420 -Node: Compatibility Mode1089220 -Node: Additions1090003 -Node: Accessing The Source1090930 -Node: Adding Code1092370 -Node: New Ports1098415 -Node: Derived Files1102550 -Ref: Derived Files-Footnote-11107871 -Ref: Derived Files-Footnote-21107905 -Ref: Derived Files-Footnote-31108505 -Node: Future Extensions1108603 -Node: Implementation Limitations1109186 -Node: Extension Design1110438 -Node: Old Extension Problems1111592 -Ref: Old Extension Problems-Footnote-11113100 -Node: Extension New Mechanism Goals1113157 -Ref: Extension New Mechanism Goals-Footnote-11116522 -Node: Extension Other Design Decisions1116708 -Node: Extension Future Growth1118814 -Node: Old Extension Mechanism1119650 -Node: Basic Concepts1121390 -Node: Basic High Level1122071 -Ref: figure-general-flow1122342 -Ref: figure-process-flow1122941 -Ref: Basic High Level-Footnote-11126170 -Node: Basic Data Typing1126355 -Node: Glossary1129710 -Node: Copying1155172 -Node: GNU Free Documentation License1192729 -Node: Index1217866 +Node: POSIX String Comparison342492 +Ref: POSIX String Comparison-Footnote-1343448 +Node: Boolean Ops343586 +Ref: Boolean Ops-Footnote-1347664 +Node: Conditional Exp347755 +Node: Function Calls349487 +Node: Precedence353081 +Node: Locales356750 +Node: Patterns and Actions357839 +Node: Pattern Overview358893 +Node: Regexp Patterns360562 +Node: Expression Patterns361105 +Node: Ranges364790 +Node: BEGIN/END367756 +Node: Using BEGIN/END368518 +Ref: Using BEGIN/END-Footnote-1371249 +Node: I/O And BEGIN/END371355 +Node: BEGINFILE/ENDFILE373637 +Node: Empty376551 +Node: Using Shell Variables376867 +Node: Action Overview379152 +Node: Statements381509 +Node: If Statement383363 +Node: While Statement384862 +Node: Do Statement386906 +Node: For Statement388062 +Node: Switch Statement391214 +Node: Break Statement393311 +Node: Continue Statement395301 +Node: Next Statement397094 +Node: Nextfile Statement399484 +Node: Exit Statement402127 +Node: Built-in Variables404543 +Node: User-modified405638 +Ref: User-modified-Footnote-1413996 +Node: Auto-set414058 +Ref: Auto-set-Footnote-1427136 +Ref: Auto-set-Footnote-2427341 +Node: ARGC and ARGV427397 +Node: Arrays431248 +Node: Array Basics432753 +Node: Array Intro433579 +Node: Reference to Elements437896 +Node: Assigning Elements440166 +Node: Array Example440657 +Node: Scanning an Array442389 +Node: Controlling Scanning444703 +Ref: Controlling Scanning-Footnote-1449790 +Node: Delete450106 +Ref: Delete-Footnote-1452871 +Node: Numeric Array Subscripts452928 +Node: Uninitialized Subscripts455111 +Node: Multidimensional456738 +Node: Multiscanning459831 +Node: Arrays of Arrays461420 +Node: Functions466060 +Node: Built-in466879 +Node: Calling Built-in467957 +Node: Numeric Functions469945 +Ref: Numeric Functions-Footnote-1473777 +Ref: Numeric Functions-Footnote-2474134 +Ref: Numeric Functions-Footnote-3474182 +Node: String Functions474451 +Ref: String Functions-Footnote-1497371 +Ref: String Functions-Footnote-2497500 +Ref: String Functions-Footnote-3497748 +Node: Gory Details497835 +Ref: table-sub-escapes499514 +Ref: table-sub-posix-92500868 +Ref: table-sub-proposed502219 +Ref: table-posix-sub503573 +Ref: table-gensub-escapes505118 +Ref: Gory Details-Footnote-1506294 +Ref: Gory Details-Footnote-2506345 +Node: I/O Functions506496 +Ref: I/O Functions-Footnote-1513481 +Node: Time Functions513628 +Ref: Time Functions-Footnote-1524561 +Ref: Time Functions-Footnote-2524629 +Ref: Time Functions-Footnote-3524787 +Ref: Time Functions-Footnote-4524898 +Ref: Time Functions-Footnote-5525010 +Ref: Time Functions-Footnote-6525237 +Node: Bitwise Functions525503 +Ref: table-bitwise-ops526065 +Ref: Bitwise Functions-Footnote-1530286 +Node: Type Functions530470 +Node: I18N Functions531621 +Node: User-defined533248 +Node: Definition Syntax534052 +Ref: Definition Syntax-Footnote-1538962 +Node: Function Example539031 +Node: Function Caveats541625 +Node: Calling A Function542046 +Node: Variable Scope543161 +Node: Pass By Value/Reference546124 +Node: Return Statement549632 +Node: Dynamic Typing552613 +Node: Indirect Calls553544 +Node: Library Functions563229 +Ref: Library Functions-Footnote-1566742 +Ref: Library Functions-Footnote-2566885 +Node: Library Names567056 +Ref: Library Names-Footnote-1570527 +Ref: Library Names-Footnote-2570747 +Node: General Functions570833 +Node: Strtonum Function571861 +Node: Assert Function574791 +Node: Round Function578117 +Node: Cliff Random Function579660 +Node: Ordinal Functions580676 +Ref: Ordinal Functions-Footnote-1583748 +Ref: Ordinal Functions-Footnote-2584000 +Node: Join Function584209 +Ref: Join Function-Footnote-1585980 +Node: Getlocaltime Function586180 +Node: Readfile Function589921 +Node: Data File Management591760 +Node: Filetrans Function592392 +Node: Rewind Function596461 +Node: File Checking597848 +Node: Empty Files598942 +Node: Ignoring Assigns601172 +Node: Getopt Function602725 +Ref: Getopt Function-Footnote-1614028 +Node: Passwd Functions614231 +Ref: Passwd Functions-Footnote-1623206 +Node: Group Functions623294 +Node: Walking Arrays631378 +Node: Sample Programs633515 +Node: Running Examples634189 +Node: Clones634917 +Node: Cut Program636141 +Node: Egrep Program645986 +Ref: Egrep Program-Footnote-1653759 +Node: Id Program653869 +Node: Split Program657485 +Ref: Split Program-Footnote-1661004 +Node: Tee Program661132 +Node: Uniq Program663935 +Node: Wc Program671364 +Ref: Wc Program-Footnote-1675630 +Ref: Wc Program-Footnote-2675830 +Node: Miscellaneous Programs675922 +Node: Dupword Program677110 +Node: Alarm Program679141 +Node: Translate Program683894 +Ref: Translate Program-Footnote-1688281 +Ref: Translate Program-Footnote-2688529 +Node: Labels Program688663 +Ref: Labels Program-Footnote-1692034 +Node: Word Sorting692118 +Node: History Sorting696002 +Node: Extract Program697841 +Ref: Extract Program-Footnote-1705344 +Node: Simple Sed705472 +Node: Igawk Program708534 +Ref: Igawk Program-Footnote-1723691 +Ref: Igawk Program-Footnote-2723892 +Node: Anagram Program724030 +Node: Signature Program727098 +Node: Advanced Features728198 +Node: Nondecimal Data730084 +Node: Array Sorting731667 +Node: Controlling Array Traversal732364 +Node: Array Sorting Functions740648 +Ref: Array Sorting Functions-Footnote-1744517 +Node: Two-way I/O744711 +Ref: Two-way I/O-Footnote-1750143 +Node: TCP/IP Networking750213 +Node: Profiling753057 +Node: Internationalization760554 +Node: I18N and L10N761979 +Node: Explaining gettext762665 +Ref: Explaining gettext-Footnote-1767733 +Ref: Explaining gettext-Footnote-2767917 +Node: Programmer i18n768082 +Node: Translator i18n772284 +Node: String Extraction773077 +Ref: String Extraction-Footnote-1774038 +Node: Printf Ordering774124 +Ref: Printf Ordering-Footnote-1776908 +Node: I18N Portability776972 +Ref: I18N Portability-Footnote-1779421 +Node: I18N Example779484 +Ref: I18N Example-Footnote-1782122 +Node: Gawk I18N782194 +Node: Debugger782815 +Node: Debugging783786 +Node: Debugging Concepts784219 +Node: Debugging Terms786075 +Node: Awk Debugging788672 +Node: Sample Debugging Session789564 +Node: Debugger Invocation790084 +Node: Finding The Bug791416 +Node: List of Debugger Commands797904 +Node: Breakpoint Control799238 +Node: Debugger Execution Control802902 +Node: Viewing And Changing Data806262 +Node: Execution Stack809618 +Node: Debugger Info811085 +Node: Miscellaneous Debugger Commands815067 +Node: Readline Support820243 +Node: Limitations821074 +Node: Arbitrary Precision Arithmetic823326 +Ref: Arbitrary Precision Arithmetic-Footnote-1824975 +Node: General Arithmetic825123 +Node: Floating Point Issues826843 +Node: String Conversion Precision827724 +Ref: String Conversion Precision-Footnote-1829429 +Node: Unexpected Results829538 +Node: POSIX Floating Point Problems831691 +Ref: POSIX Floating Point Problems-Footnote-1835516 +Node: Integer Programming835554 +Node: Floating-point Programming837293 +Ref: Floating-point Programming-Footnote-1843624 +Ref: Floating-point Programming-Footnote-2843894 +Node: Floating-point Representation844158 +Node: Floating-point Context845323 +Ref: table-ieee-formats846162 +Node: Rounding Mode847546 +Ref: table-rounding-modes848025 +Ref: Rounding Mode-Footnote-1851040 +Node: Gawk and MPFR851219 +Node: Arbitrary Precision Floats852474 +Ref: Arbitrary Precision Floats-Footnote-1854917 +Node: Setting Precision855233 +Ref: table-predefined-precision-strings855919 +Node: Setting Rounding Mode858064 +Ref: table-gawk-rounding-modes858468 +Node: Floating-point Constants859655 +Node: Changing Precision861084 +Ref: Changing Precision-Footnote-1862481 +Node: Exact Arithmetic862655 +Node: Arbitrary Precision Integers865793 +Ref: Arbitrary Precision Integers-Footnote-1868811 +Node: Dynamic Extensions868958 +Node: Extension Intro870416 +Node: Plugin License871681 +Node: Extension Mechanism Outline872366 +Ref: load-extension872783 +Ref: load-new-function874261 +Ref: call-new-function875256 +Node: Extension API Description877271 +Node: Extension API Functions Introduction878484 +Node: General Data Types883350 +Ref: General Data Types-Footnote-1888955 +Node: Requesting Values889254 +Ref: table-value-types-returned889985 +Node: Constructor Functions890939 +Node: Registration Functions893959 +Node: Extension Functions894644 +Node: Exit Callback Functions896869 +Node: Extension Version String898118 +Node: Input Parsers898768 +Node: Output Wrappers908525 +Node: Two-way processors913035 +Node: Printing Messages915243 +Ref: Printing Messages-Footnote-1916320 +Node: Updating `ERRNO'916472 +Node: Accessing Parameters917211 +Node: Symbol Table Access918441 +Node: Symbol table by name918953 +Node: Symbol table by cookie920700 +Ref: Symbol table by cookie-Footnote-1924830 +Node: Cached values924893 +Ref: Cached values-Footnote-1928342 +Node: Array Manipulation928433 +Ref: Array Manipulation-Footnote-1929531 +Node: Array Data Types929570 +Ref: Array Data Types-Footnote-1932273 +Node: Array Functions932365 +Node: Flattening Arrays936131 +Node: Creating Arrays942983 +Node: Extension API Variables947708 +Node: Extension Versioning948344 +Node: Extension API Informational Variables950245 +Node: Extension API Boilerplate951331 +Node: Finding Extensions955135 +Node: Extension Example955695 +Node: Internal File Description956425 +Node: Internal File Ops960516 +Ref: Internal File Ops-Footnote-1972024 +Node: Using Internal File Ops972164 +Ref: Using Internal File Ops-Footnote-1974517 +Node: Extension Samples974783 +Node: Extension Sample File Functions976307 +Node: Extension Sample Fnmatch984792 +Node: Extension Sample Fork986518 +Node: Extension Sample Inplace987736 +Node: Extension Sample Ord989514 +Node: Extension Sample Readdir990350 +Node: Extension Sample Revout991882 +Node: Extension Sample Rev2way992475 +Node: Extension Sample Read write array993165 +Node: Extension Sample Readfile995048 +Node: Extension Sample API Tests995866 +Node: Extension Sample Time996391 +Node: gawkextlib997755 +Node: Language History1000536 +Node: V7/SVR3.11002129 +Node: SVR41004449 +Node: POSIX1005891 +Node: BTL1007277 +Node: POSIX/GNU1008011 +Node: Feature History1013610 +Node: Common Extensions1026574 +Node: Ranges and Locales1027886 +Ref: Ranges and Locales-Footnote-11032504 +Ref: Ranges and Locales-Footnote-21032531 +Ref: Ranges and Locales-Footnote-31032791 +Node: Contributors1033012 +Node: Installation1038157 +Node: Gawk Distribution1039051 +Node: Getting1039535 +Node: Extracting1040361 +Node: Distribution contents1042053 +Node: Unix Installation1047758 +Node: Quick Installation1048375 +Node: Additional Configuration Options1050819 +Node: Configuration Philosophy1052555 +Node: Non-Unix Installation1054909 +Node: PC Installation1055367 +Node: PC Binary Installation1056666 +Node: PC Compiling1058514 +Node: PC Testing1061458 +Node: PC Using1062634 +Node: Cygwin1066819 +Node: MSYS1067819 +Node: VMS Installation1068333 +Node: VMS Compilation1069097 +Ref: VMS Compilation-Footnote-11070712 +Node: VMS Dynamic Extensions1070770 +Node: VMS Installation Details1072143 +Node: VMS Running1074390 +Node: VMS GNV1077224 +Node: VMS Old Gawk1077947 +Node: Bugs1078417 +Node: Other Versions1082335 +Node: Notes1088419 +Node: Compatibility Mode1089219 +Node: Additions1090002 +Node: Accessing The Source1090929 +Node: Adding Code1092369 +Node: New Ports1098414 +Node: Derived Files1102549 +Ref: Derived Files-Footnote-11107870 +Ref: Derived Files-Footnote-21107904 +Ref: Derived Files-Footnote-31108504 +Node: Future Extensions1108602 +Node: Implementation Limitations1109185 +Node: Extension Design1110437 +Node: Old Extension Problems1111591 +Ref: Old Extension Problems-Footnote-11113099 +Node: Extension New Mechanism Goals1113156 +Ref: Extension New Mechanism Goals-Footnote-11116521 +Node: Extension Other Design Decisions1116707 +Node: Extension Future Growth1118813 +Node: Old Extension Mechanism1119649 +Node: Basic Concepts1121389 +Node: Basic High Level1122070 +Ref: figure-general-flow1122341 +Ref: figure-process-flow1122940 +Ref: Basic High Level-Footnote-11126169 +Node: Basic Data Typing1126354 +Node: Glossary1129709 +Node: Copying1155171 +Node: GNU Free Documentation License1192728 +Node: Index1217865  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index f25d21df..f238c45f 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -2113,7 +2113,7 @@ more convenient to put the program into a separate file. In order to tell awk -f @var{source-file} @var{input-file1} @var{input-file2} @dots{} @end example -@cindex @code{-f} option +@cindex @option{-f} option @cindex command line, options @cindex options, command-line The @option{-f} instructs the @command{awk} utility to get the @command{awk} program @@ -3193,7 +3193,7 @@ It is possible to invoke @command{awk} with an empty program: awk '' datafile1 datafile2 @end example -@cindex @code{--lint} option +@cindex @option{--lint} option @noindent Doing so makes little sense, though; @command{awk} exits silently when given an empty program. @@ -3233,16 +3233,16 @@ The following list describes options mandated by the POSIX standard: @table @code @item -F @var{fs} @itemx --field-separator @var{fs} -@cindex @code{-F} option -@cindex @code{--field-separator} option +@cindex @option{-F} option +@cindex @option{--field-separator} option @cindex @code{FS} variable, @code{--field-separator} option and Set the @code{FS} variable to @var{fs} (@pxref{Field Separators}). @item -f @var{source-file} @itemx --file @var{source-file} -@cindex @code{-f} option -@cindex @code{--file} option +@cindex @option{-f} option +@cindex @option{--file} option @cindex @command{awk} programs, location of Read @command{awk} program source from @var{source-file} instead of in the first non-option argument. @@ -3252,8 +3252,8 @@ each specified @var{source-file}. @item -i @var{source-file} @itemx --include @var{source-file} -@cindex @code{-i} option -@cindex @code{--include} option +@cindex @option{-i} option +@cindex @option{--include} option @cindex @command{awk} programs, location of Read @command{awk} source library from @var{source-file}. This option is completely equivalent to using the @samp{@@include} directive inside @@ -3268,8 +3268,8 @@ find the main source code via the @option{-f} option or on the command-line. @item -v @var{var}=@var{val} @itemx --assign @var{var}=@var{val} -@cindex @code{-v} option -@cindex @code{--assign} option +@cindex @option{-v} option +@cindex @option{--assign} option @cindex variables, setting Set the variable @var{var} to the value @var{val} @emph{before} execution of the program begins. Such variable values are available @@ -3290,7 +3290,7 @@ predefined value you may have given. @end quotation @item -W @var{gawk-opt} -@cindex @code{-W} option +@cindex @option{-W} option Provide an implementation-specific option. This is the POSIX convention for providing implementation-specific options. These options @@ -3600,8 +3600,8 @@ data (@pxref{Locales}). @c @cindex automatic warnings @c @cindex warnings, automatic -@cindex @code{--traditional} option, @code{--posix} option and -@cindex @code{--posix} option, @code{--traditional} option and +@cindex @option{--traditional} option, @code{--posix} option and +@cindex @option{--posix} option, @code{--traditional} option and If you supply both @option{--traditional} and @option{--posix} on the command line, @option{--posix} takes precedence. @command{gawk} also issues a warning if both options are supplied. @@ -3656,14 +3656,14 @@ As long as program text has been supplied, any other options are flagged as invalid with a warning message but are otherwise ignored. -@cindex @code{-F} option, @code{-Ft} sets @code{FS} to TAB +@cindex @option{-F} option, @option{-Ft} sets @code{FS} to TAB In compatibility mode, as a special case, if the value of @var{fs} supplied to the @option{-F} option is @samp{t}, then @code{FS} is set to the TAB character (@code{"\t"}). This is true only for @option{--traditional} and not for @option{--posix} (@pxref{Field Separators}). -@cindex @code{-f} option, multiple uses +@cindex @option{-f} option, multiple uses The @option{-f} option may be used more than once on the command line. If it is, @command{awk} reads its program source from all of the named files, as if they had been concatenated together into one big file. This is @@ -3690,7 +3690,7 @@ and library source code (@pxref{AWKPATH Variable}). The @option{--source} option may also be used multiple times on the command line. -@cindex @code{--source} option +@cindex @option{--source} option If no @option{-f} or @option{--source} option is specified, then @command{gawk} uses the first non-option command-line argument as the text of the program source code. @@ -6576,7 +6576,7 @@ behaves this way. @node Command Line Field Separator @subsection Setting @code{FS} from the Command Line -@cindex @code{-F} option +@cindex @option{-F} option @cindex options, command-line @cindex command line, options @cindex field separators, on command line @@ -7382,7 +7382,7 @@ rest of this @value{DOCUMENT} and have a good knowledge of how @command{awk} wor @cindex @code{ERRNO} variable @cindex differences in @command{awk} and @command{gawk}, @code{getline} command @cindex @code{getline} command, return values -@cindex @code{--sandbox} option, input redirection with @command{getline} +@cindex @option{--sandbox} option, input redirection with @code{getline} The @code{getline} command returns one if it finds a record and zero if it encounters the end of the file. If there is some error in getting @@ -8838,7 +8838,7 @@ on the @code{print} statement @cindex output redirection @c STARTOFRANGE reout @cindex redirection of output -@cindex @code{--sandbox} option, output redirection with @code{print}, @code{printf} +@cindex @option{--sandbox} option, output redirection with @code{print}, @code{printf} So far, the output from @code{print} and @code{printf} has gone to the standard output, usually the screen. Both @code{print} and @code{printf} can @@ -9981,7 +9981,7 @@ Such an assignment has the following form: @var{variable}=@var{text} @end example -@cindex @code{-v} option +@cindex @option{-v} option @noindent With it, a variable is set either at the beginning of the @command{awk} run or in between input files. @@ -11289,7 +11289,7 @@ string comparison (true) string comparison (true) @item a = 2; b = " +2" -@item a == b +@itemx a == b string comparison (false) @end table @@ -16844,7 +16844,7 @@ close("/bin/sh") @noindent @cindex troubleshooting, @code{system()} function -@cindex @code{--sandbox} option, disabling @code{system()} function +@cindex @option{--sandbox} option, disabling @code{system()} function However, if your @command{awk} program is interactive, @code{system()} is useful for running large self-contained programs, such as a shell or an editor. @@ -19070,7 +19070,7 @@ The leading capital letter indicates that it is global, while the fact that the variable name is not all capital letters indicates that the variable is not one of @command{awk}'s built-in variables, such as @code{FS}. -@cindex @code{--dump-variables} option +@cindex @option{--dump-variables} option 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 @@ -25009,7 +25009,7 @@ discusses the ability to dynamically add new built-in functions to @node Nondecimal Data @section Allowing Nondecimal Input Data -@cindex @code{--non-decimal-data} option +@cindex @option{--non-decimal-data} option @cindex advanced features, nondecimal input data @cindex input, data@comma{} nondecimal @cindex constants, nondecimal @@ -25053,7 +25053,7 @@ using this facility could lead to surprising results, the default is to leave it disabled. If you want it, you must explicitly request it. @cindex programming conventions, @code{--non-decimal-data} option -@cindex @code{--non-decimal-data} option, @code{strtonum()} function and +@cindex @option{--non-decimal-data} option, @code{strtonum()} function and @cindex @code{strtonum()} function (@command{gawk}), @code{--non-decimal-data} option and @quotation CAUTION @emph{Use of this option is not recommended.} @@ -25761,7 +25761,7 @@ When @command{gawk} has finished running, it creates a profile of your program i named @file{awkprof.out}. Because it is profiling, it also executes up to 45% slower than @command{gawk} normally does. -@cindex @code{--profile} option +@cindex @option{--profile} option As shown in the following example, the @option{--profile} option can be used to change the name of the file where @command{gawk} will write the profile: @@ -26480,13 +26480,13 @@ is covered. @subsection Extracting Marked Strings @cindex strings, extracting @cindex marked strings@comma{} extracting -@cindex @code{--gen-pot} option +@cindex @option{--gen-pot} option @cindex command-line options, string extraction @cindex string extraction (internationalization) @cindex marked string extraction (internationalization) @cindex extraction, of marked strings (internationalization) -@cindex @code{--gen-pot} option +@cindex @option{--gen-pot} option Once your @command{awk} program is working, and all the strings have been marked and you've set (and perhaps bound) the text domain, it is time to produce translations. @@ -35017,7 +35017,7 @@ command line when compiling @command{gawk} from scratch, including: @table @code -@cindex @code{--disable-extensions} configuration option +@cindex @option{--disable-extensions} configuration option @cindex configuration option, @code{--disable-extensions} @item --disable-extensions Disable configuring and building the sample extensions in the @@ -35025,7 +35025,7 @@ Disable configuring and building the sample extensions in the The default action is to dynamically check if the extensions can be configured and compiled. -@cindex @code{--disable-lint} configuration option +@cindex @option{--disable-lint} configuration option @cindex configuration option, @code{--disable-lint} @item --disable-lint Disable all lint checking within @code{gawk}. The @@ -35045,14 +35045,14 @@ 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. -@cindex @code{--disable-nls} configuration option +@cindex @option{--disable-nls} configuration option @cindex configuration option, @code{--disable-nls} @item --disable-nls Disable all message-translation facilities. This is usually not desirable, but it may bring you some slight performance improvement. -@cindex @code{--with-whiny-user-strftime} configuration option +@cindex @option{--with-whiny-user-strftime} configuration option @cindex configuration option, @code{--with-whiny-user-strftime} @item --with-whiny-user-strftime Force use of the included version of the @code{strftime()} diff --git a/doc/gawktexi.in b/doc/gawktexi.in index ac793ea7..6fdc67a3 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -2080,7 +2080,7 @@ more convenient to put the program into a separate file. In order to tell awk -f @var{source-file} @var{input-file1} @var{input-file2} @dots{} @end example -@cindex @code{-f} option +@cindex @option{-f} option @cindex command line, options @cindex options, command-line The @option{-f} instructs the @command{awk} utility to get the @command{awk} program @@ -3121,7 +3121,7 @@ It is possible to invoke @command{awk} with an empty program: awk '' datafile1 datafile2 @end example -@cindex @code{--lint} option +@cindex @option{--lint} option @noindent Doing so makes little sense, though; @command{awk} exits silently when given an empty program. @@ -3161,16 +3161,16 @@ The following list describes options mandated by the POSIX standard: @table @code @item -F @var{fs} @itemx --field-separator @var{fs} -@cindex @code{-F} option -@cindex @code{--field-separator} option +@cindex @option{-F} option +@cindex @option{--field-separator} option @cindex @code{FS} variable, @code{--field-separator} option and Set the @code{FS} variable to @var{fs} (@pxref{Field Separators}). @item -f @var{source-file} @itemx --file @var{source-file} -@cindex @code{-f} option -@cindex @code{--file} option +@cindex @option{-f} option +@cindex @option{--file} option @cindex @command{awk} programs, location of Read @command{awk} program source from @var{source-file} instead of in the first non-option argument. @@ -3180,8 +3180,8 @@ each specified @var{source-file}. @item -i @var{source-file} @itemx --include @var{source-file} -@cindex @code{-i} option -@cindex @code{--include} option +@cindex @option{-i} option +@cindex @option{--include} option @cindex @command{awk} programs, location of Read @command{awk} source library from @var{source-file}. This option is completely equivalent to using the @samp{@@include} directive inside @@ -3196,8 +3196,8 @@ find the main source code via the @option{-f} option or on the command-line. @item -v @var{var}=@var{val} @itemx --assign @var{var}=@var{val} -@cindex @code{-v} option -@cindex @code{--assign} option +@cindex @option{-v} option +@cindex @option{--assign} option @cindex variables, setting Set the variable @var{var} to the value @var{val} @emph{before} execution of the program begins. Such variable values are available @@ -3218,7 +3218,7 @@ predefined value you may have given. @end quotation @item -W @var{gawk-opt} -@cindex @code{-W} option +@cindex @option{-W} option Provide an implementation-specific option. This is the POSIX convention for providing implementation-specific options. These options @@ -3528,8 +3528,8 @@ data (@pxref{Locales}). @c @cindex automatic warnings @c @cindex warnings, automatic -@cindex @code{--traditional} option, @code{--posix} option and -@cindex @code{--posix} option, @code{--traditional} option and +@cindex @option{--traditional} option, @code{--posix} option and +@cindex @option{--posix} option, @code{--traditional} option and If you supply both @option{--traditional} and @option{--posix} on the command line, @option{--posix} takes precedence. @command{gawk} also issues a warning if both options are supplied. @@ -3584,14 +3584,14 @@ As long as program text has been supplied, any other options are flagged as invalid with a warning message but are otherwise ignored. -@cindex @code{-F} option, @code{-Ft} sets @code{FS} to TAB +@cindex @option{-F} option, @option{-Ft} sets @code{FS} to TAB In compatibility mode, as a special case, if the value of @var{fs} supplied to the @option{-F} option is @samp{t}, then @code{FS} is set to the TAB character (@code{"\t"}). This is true only for @option{--traditional} and not for @option{--posix} (@pxref{Field Separators}). -@cindex @code{-f} option, multiple uses +@cindex @option{-f} option, multiple uses The @option{-f} option may be used more than once on the command line. If it is, @command{awk} reads its program source from all of the named files, as if they had been concatenated together into one big file. This is @@ -3618,7 +3618,7 @@ and library source code (@pxref{AWKPATH Variable}). The @option{--source} option may also be used multiple times on the command line. -@cindex @code{--source} option +@cindex @option{--source} option If no @option{-f} or @option{--source} option is specified, then @command{gawk} uses the first non-option command-line argument as the text of the program source code. @@ -6297,7 +6297,7 @@ behaves this way. @node Command Line Field Separator @subsection Setting @code{FS} from the Command Line -@cindex @code{-F} option +@cindex @option{-F} option @cindex options, command-line @cindex command line, options @cindex field separators, on command line @@ -7008,7 +7008,7 @@ rest of this @value{DOCUMENT} and have a good knowledge of how @command{awk} wor @cindex @code{ERRNO} variable @cindex differences in @command{awk} and @command{gawk}, @code{getline} command @cindex @code{getline} command, return values -@cindex @code{--sandbox} option, input redirection with @command{getline} +@cindex @option{--sandbox} option, input redirection with @code{getline} The @code{getline} command returns one if it finds a record and zero if it encounters the end of the file. If there is some error in getting @@ -8464,7 +8464,7 @@ on the @code{print} statement @cindex output redirection @c STARTOFRANGE reout @cindex redirection of output -@cindex @code{--sandbox} option, output redirection with @code{print}, @code{printf} +@cindex @option{--sandbox} option, output redirection with @code{print}, @code{printf} So far, the output from @code{print} and @code{printf} has gone to the standard output, usually the screen. Both @code{print} and @code{printf} can @@ -9478,7 +9478,7 @@ Such an assignment has the following form: @var{variable}=@var{text} @end example -@cindex @code{-v} option +@cindex @option{-v} option @noindent With it, a variable is set either at the beginning of the @command{awk} run or in between input files. @@ -10674,7 +10674,7 @@ string comparison (true) string comparison (true) @item a = 2; b = " +2" -@item a == b +@itemx a == b string comparison (false) @end table @@ -16150,7 +16150,7 @@ close("/bin/sh") @noindent @cindex troubleshooting, @code{system()} function -@cindex @code{--sandbox} option, disabling @code{system()} function +@cindex @option{--sandbox} option, disabling @code{system()} function However, if your @command{awk} program is interactive, @code{system()} is useful for running large self-contained programs, such as a shell or an editor. @@ -18248,7 +18248,7 @@ The leading capital letter indicates that it is global, while the fact that the variable name is not all capital letters indicates that the variable is not one of @command{awk}'s built-in variables, such as @code{FS}. -@cindex @code{--dump-variables} option +@cindex @option{--dump-variables} option 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 @@ -24158,7 +24158,7 @@ discusses the ability to dynamically add new built-in functions to @node Nondecimal Data @section Allowing Nondecimal Input Data -@cindex @code{--non-decimal-data} option +@cindex @option{--non-decimal-data} option @cindex advanced features, nondecimal input data @cindex input, data@comma{} nondecimal @cindex constants, nondecimal @@ -24202,7 +24202,7 @@ using this facility could lead to surprising results, the default is to leave it disabled. If you want it, you must explicitly request it. @cindex programming conventions, @code{--non-decimal-data} option -@cindex @code{--non-decimal-data} option, @code{strtonum()} function and +@cindex @option{--non-decimal-data} option, @code{strtonum()} function and @cindex @code{strtonum()} function (@command{gawk}), @code{--non-decimal-data} option and @quotation CAUTION @emph{Use of this option is not recommended.} @@ -24910,7 +24910,7 @@ When @command{gawk} has finished running, it creates a profile of your program i named @file{awkprof.out}. Because it is profiling, it also executes up to 45% slower than @command{gawk} normally does. -@cindex @code{--profile} option +@cindex @option{--profile} option As shown in the following example, the @option{--profile} option can be used to change the name of the file where @command{gawk} will write the profile: @@ -25629,13 +25629,13 @@ is covered. @subsection Extracting Marked Strings @cindex strings, extracting @cindex marked strings@comma{} extracting -@cindex @code{--gen-pot} option +@cindex @option{--gen-pot} option @cindex command-line options, string extraction @cindex string extraction (internationalization) @cindex marked string extraction (internationalization) @cindex extraction, of marked strings (internationalization) -@cindex @code{--gen-pot} option +@cindex @option{--gen-pot} option Once your @command{awk} program is working, and all the strings have been marked and you've set (and perhaps bound) the text domain, it is time to produce translations. @@ -34166,7 +34166,7 @@ command line when compiling @command{gawk} from scratch, including: @table @code -@cindex @code{--disable-extensions} configuration option +@cindex @option{--disable-extensions} configuration option @cindex configuration option, @code{--disable-extensions} @item --disable-extensions Disable configuring and building the sample extensions in the @@ -34174,7 +34174,7 @@ Disable configuring and building the sample extensions in the The default action is to dynamically check if the extensions can be configured and compiled. -@cindex @code{--disable-lint} configuration option +@cindex @option{--disable-lint} configuration option @cindex configuration option, @code{--disable-lint} @item --disable-lint Disable all lint checking within @code{gawk}. The @@ -34194,14 +34194,14 @@ 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. -@cindex @code{--disable-nls} configuration option +@cindex @option{--disable-nls} configuration option @cindex configuration option, @code{--disable-nls} @item --disable-nls Disable all message-translation facilities. This is usually not desirable, but it may bring you some slight performance improvement. -@cindex @code{--with-whiny-user-strftime} configuration option +@cindex @option{--with-whiny-user-strftime} configuration option @cindex configuration option, @code{--with-whiny-user-strftime} @item --with-whiny-user-strftime Force use of the included version of the @code{strftime()} -- cgit v1.2.3 From 70d4fd5995f9a2dbc3ccec19d27536f6931ae38d Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 4 Feb 2014 13:32:28 +0200 Subject: Update nl translation. --- po/nl.gmo | Bin 73994 -> 80863 bytes po/nl.po | 135 +++++++++++++++++++++++++++++++------------------------------- 2 files changed, 67 insertions(+), 68 deletions(-) diff --git a/po/nl.gmo b/po/nl.gmo index 6ef2fffb..b30682cd 100644 Binary files a/po/nl.gmo and b/po/nl.gmo differ diff --git a/po/nl.po b/po/nl.po index 83aa7f6d..71fb563d 100644 --- a/po/nl.po +++ b/po/nl.po @@ -4,14 +4,14 @@ # # “Flierefluiten!!†# -# Benno Schulenberg , 2005, 2007, 2010, 2011, 2012, 2013, 2014. # Erwin Poeze , 2009. +# Benno Schulenberg , 2005, 2007, 2010, 2011, 2012, 2013, 2014. 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" -"PO-Revision-Date: 2014-01-21 10:56+0100\n" +"PO-Revision-Date: 2014-02-04 11:18+0100\n" "Last-Translator: Benno Schulenberg \n" "Language-Team: Dutch \n" "Language: nl\n" @@ -942,25 +942,25 @@ msgstr "save \"%s\": commando niet toegestaan." #: command.y:339 msgid "Can't use command `commands' for breakpoint/watchpoint commands" -msgstr "" +msgstr "Kan commando 'commands' niet voor breekpunt-/kijkpunt-commando's gebruiken" #: command.y:341 msgid "no breakpoint/watchpoint has been set yet" -msgstr "" +msgstr "er is nog geen breekpunt/kijkpunt gezet" #: command.y:343 msgid "invalid breakpoint/watchpoint number" -msgstr "" +msgstr "ongeldig nummer van breekpunt/kijkpunt" #: command.y:348 #, c-format msgid "Type commands for when %s %d is hit, one per line.\n" -msgstr "" +msgstr "Typ de commando's voor wanneer %s %d getroffen wordt, één per regel.\n" #: command.y:350 #, c-format msgid "End with the command \"end\"\n" -msgstr "Eindig met het commando \"end\".\n" +msgstr "Eindig met het commando 'end'.\n" #: command.y:357 msgid "`end' valid only in command `commands' or `eval'" @@ -977,7 +977,7 @@ msgstr "trace: ongeldige optie -- \"%s\"" #: command.y:387 msgid "condition: invalid breakpoint/watchpoint number" -msgstr "" +msgstr "condition: ongeldig nummer van breekpunt/kijkpunt" #: command.y:449 msgid "argument not a string" @@ -1017,91 +1017,91 @@ msgstr "niet-nul geheel getal" #: command.y:817 msgid "backtrace [N] - print trace of all or N innermost (outermost if N < 0) frames." -msgstr "backtrace [N] - trace printen van alle of N binnenste frames (of buitenste als N < 0)" +msgstr "backtrace [N] - een trace weergeven van alle of N binnenste frames (of buitenste als N < 0)" #: command.y:819 msgid "break [[filename:]N|function] - set breakpoint at the specified location." -msgstr "break [[BESTANDSNAAM:]N|FUNCTIE] - breekpunt zetten op gegeven positie" +msgstr "break [[BESTANDSNAAM:]REGELNUMMER|FUNCTIE] - breekpunt zetten op gegeven positie" #: command.y:821 msgid "clear [[filename:]N|function] - delete breakpoints previously set." -msgstr "clear [[BESTANDSNAAM:]N|FUNCTIE] - eerder gezet breekpunt verwijderen" +msgstr "clear [[BESTANDSNAAM:]REGELNUMMER|FUNCTIE] - eerder gezet breekpunt verwijderen" #: command.y:823 msgid "commands [num] - starts a list of commands to be executed at a breakpoint(watchpoint) hit." -msgstr "" +msgstr "commands [NUMMER] - een lijst van commando's beginnen die uitgevoerd moeten worden wanneer een breekpunt/kijkpunt getroffen wordt" #: command.y:825 msgid "condition num [expr] - set or clear breakpoint or watchpoint condition." -msgstr "" +msgstr "condition NUMMER [EXPRESSIE] - de conditie van een breekpunt/kijkpunt zetten of wissen" #: command.y:827 msgid "continue [COUNT] - continue program being debugged." -msgstr "" +msgstr "continue [AANTAL] - doorgaan met het programma in de debugger" #: command.y:829 msgid "delete [breakpoints] [range] - delete specified breakpoints." -msgstr "" +msgstr "delete [BREEKPUNTEN] [BEREIK] - de gegeven breekpunten verwijderen" #: command.y:831 msgid "disable [breakpoints] [range] - disable specified breakpoints." -msgstr "" +msgstr "disable [BREEKPUNTEN] [BEREIK] - de gegeven breekpunten uitschakelen" #: command.y:833 msgid "display [var] - print value of variable each time the program stops." -msgstr "display [VAR] - waarde van variabele printen elke keer dat het programma stopt" +msgstr "display [VAR] - waarde van variabele weergeven elke keer dat het programma stopt" #: command.y:835 msgid "down [N] - move N frames down the stack." -msgstr "" +msgstr "down [AANTAL] - dit aantal frames naar beneden in de stack gaan" #: command.y:837 msgid "dump [filename] - dump instructions to file or stdout." -msgstr "dump [BESTANDSNAAM] - instructies dumpen op standaarduitvoer of naar bestand" +msgstr "dump [BESTANDSNAAM] - instructies dumpen op standaarduitvoer (of naar bestand)" #: command.y:839 msgid "enable [once|del] [breakpoints] [range] - enable specified breakpoints." -msgstr "" +msgstr "enable [once|del] [BREEKPUNTEN] [BEREIK] - de gegeven breekpunten inschakelen" #: command.y:841 msgid "end - end a list of commands or awk statements." -msgstr "" +msgstr "end - een lijst van commando's of awk-statements beëindigen" #: command.y:843 msgid "eval stmt|[p1, p2, ...] - evaluate awk statement(s)." -msgstr "" +msgstr "eval STATEMENT|[p1, p2, ...] - awk-statement(s) evalueren" #: command.y:845 msgid "finish - execute until selected stack frame returns." -msgstr "" +msgstr "finish - uitvoeren totdat het geselecteerde stack-frame terugkeert" #: command.y:847 msgid "frame [N] - select and print stack frame number N." -msgstr "" +msgstr "frame [NUMMER] - stack-frame met dit nummer selecteren en weergeven" #: command.y:849 msgid "help [command] - print list of commands or explanation of command." -msgstr "" +msgstr "help [COMMANDO] - lijst van beschikbare commando's (of uitleg van commando) tonen" #: command.y:851 msgid "ignore N COUNT - set ignore-count of breakpoint number N to COUNT." -msgstr "" +msgstr "ignore NUMMER AANTAL - het aantal keren dat dit breekpuntnummer genegeerd moet worden" #: command.y:853 msgid "info topic - source|sources|variables|functions|break|frame|args|locals|display|watch." -msgstr "" +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 "" +msgstr "list [-|+|[BESTANDSNAAM:]REGELNUMMER|FUNCTIE|BEREIK] - aangegeven regels tonen" #: command.y:857 msgid "next [COUNT] - step program, proceeding through subroutine calls." -msgstr "" +msgstr "next [AANTAL] - programma uitvoeren tot de volgende bronregel bereikt is" #: command.y:859 msgid "nexti [COUNT] - step one instruction, but proceed through subroutine calls." -msgstr "" +msgstr "nexti [AANTAL] - één instructie (of dit aantal) uitvoeren, waarbij een functie-aanroep als één telt" #: command.y:861 msgid "option [name[=value]] - set or display debugger option(s)." @@ -1109,7 +1109,7 @@ msgstr "option [NAAM[=WAARDE]] - opties van debugger tonen of instellen" #: command.y:863 msgid "print var [var] - print value of a variable or array." -msgstr "print VAR [VAR] - waarde van variabele of array printen" +msgstr "print VAR [VAR] - waarde van variabele of array weergeven" #: command.y:865 msgid "printf format, [arg], ... - formatted output." @@ -1121,7 +1121,7 @@ msgstr "quit - de debugger verlaten" #: command.y:869 msgid "return [value] - make selected stack frame return to its caller." -msgstr "return [WAARDE] - gekozen stackframe terug laten keren naar aanroeper" +msgstr "return [WAARDE] - gekozen stack-frame terug laten keren naar aanroeper" #: command.y:871 msgid "run - start or restart executing program." @@ -1137,7 +1137,7 @@ msgstr "set VAR = WAARDE - een waarde aan een scalaire variabele toekennen" #: command.y:879 msgid "silent - suspends usual message when stopped at a breakpoint/watchpoint." -msgstr "" +msgstr "silent - de gewone meldingen bij het stoppen bij een breekpunt/kijkpunt onderdrukken" #: command.y:881 msgid "source file - execute commands from file." @@ -1149,35 +1149,35 @@ msgstr "step [AANTAL] - programma uitvoeren tot een andere bronregel bereikt is" #: command.y:885 msgid "stepi [COUNT] - step one instruction exactly." -msgstr "stepi [AANTAL] - precies één of dit aantal instructies uitvoeren" +msgstr "stepi [AANTAL] - precies één (of dit aantal) instructies uitvoeren" #: command.y:887 msgid "tbreak [[filename:]N|function] - set a temporary breakpoint." -msgstr "" +msgstr "tbreak [[BESTANDSNAAM:]REGELNUMMER|FUNCTIE] - een tijdelijk breekpunt zetten" #: command.y:889 msgid "trace on|off - print instruction before executing." -msgstr "" +msgstr "trace on|off - instructie weergeven alvorens deze uit te voeren" #: command.y:891 msgid "undisplay [N] - remove variable(s) from automatic display list." -msgstr "" +msgstr "undisplay [AANTAL] - variabele(n) van automatische weergavelijst verwijderen" #: command.y:893 msgid "until [[filename:]N|function] - execute until program reaches a different line or line N within current frame." -msgstr "" +msgstr "until [[BESTANDSNAAM:]N|FUNCTIE] - programma uitvoeren totdat deze een andere regel bereikt of regel N binnen het huidige frame" #: command.y:895 msgid "unwatch [N] - remove variable(s) from watch list." -msgstr "" +msgstr "unwatch [AANTAL] - variabele(n) van de kijklijst verwijderen" #: command.y:897 msgid "up [N] - move N frames up the stack." -msgstr "" +msgstr "up [AANTAL] - dit aantal frames naar boven in de stack gaan" #: command.y:899 msgid "watch var - set a watchpoint for a variable." -msgstr "" +msgstr "watch VAR - een kijkpunt voor een variabele zetten" #: command.y:1011 debug.c:401 msg.c:135 #, c-format @@ -1219,31 +1219,31 @@ msgstr "ongedefinieerd commando: %s\n" #: debug.c:252 msgid "set or show the number of lines to keep in history file." -msgstr "" +msgstr "zetten of tonen van maximum aantal regels in geschiedenisbestand" #: debug.c:254 msgid "set or show the list command window size." -msgstr "" +msgstr "zetten of tonen van venstergrootte van list-commando" #: debug.c:256 msgid "set or show gawk output file." -msgstr "" +msgstr "zetten of tonen van gawk-uitvoerbestand" #: debug.c:258 msgid "set or show debugger prompt." -msgstr "" +msgstr "zetten of tonen van debugger-prompt" #: debug.c:260 msgid "(un)set or show saving of command history (value=on|off)." -msgstr "" +msgstr "zetten of tonen van opslaan van commandogeschiedenis (waarde=on|off)" #: debug.c:262 msgid "(un)set or show saving of options (value=on|off)." -msgstr "" +msgstr "zetten of tonen van opslaan van opties (waarde=on|off)" #: debug.c:264 msgid "(un)set or show instruction tracing (value=on|off)." -msgstr "" +msgstr "zetten of tonen van instructie-tracing (waarde=on|off)" #: debug.c:345 msgid "program not running." @@ -1308,25 +1308,27 @@ msgid "" "Number Disp Enabled Location\n" "\n" msgstr "" +"Nummer Toon Actief Locatie\n" +"\n" #: debug.c:765 #, c-format msgid "\tno of hits = %ld\n" -msgstr "" +msgstr "\taantal treffers = %ld\n" #: debug.c:767 #, c-format msgid "\tignore next %ld hit(s)\n" -msgstr "" +msgstr "\tvolgende %ld treffer(s) negeren\n" #: debug.c:769 debug.c:909 #, c-format msgid "\tstop condition: %s\n" -msgstr "" +msgstr "\tstopconditie: %s\n" #: debug.c:771 debug.c:911 msgid "\tcommands:\n" -msgstr "" +msgstr "\tcommando's:\n" #: debug.c:793 #, c-format @@ -1377,12 +1379,16 @@ msgid "" "Auto-display variables:\n" "\n" msgstr "" +"Automatisch weer te geven variabelen:\n" +"\n" #: debug.c:889 msgid "" "Watch variables:\n" "\n" msgstr "" +"Kijkvariabelen:\n" +"\n" #: debug.c:1029 #, c-format @@ -1437,17 +1443,17 @@ msgstr "'%s' is een functie" #: debug.c:1465 #, c-format msgid "watchpoint %d is unconditional\n" -msgstr "" +msgstr "kijkpunt %d is zonder conditie\n" #: debug.c:1499 #, c-format msgid "No display item numbered %ld" -msgstr "" +msgstr "Er is geen weergave-item met nummer %ld" #: debug.c:1502 #, c-format msgid "No watch item numbered %ld" -msgstr "" +msgstr "Er is geen kijk-item met nummer %ld" #: debug.c:1528 #, c-format @@ -1461,12 +1467,12 @@ msgstr "scalaire waarde wordt gebruikt als array" #: debug.c:1856 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" -msgstr "" +msgstr "Kijkpunt %d is verwijderd omdat parameter buiten bereik is.\n" #: debug.c:1867 #, c-format msgid "Display %d deleted because parameter is out of scope.\n" -msgstr "" +msgstr "Weergave %d is verwijderd omdat parameter buiten bereik is.\n" #: debug.c:1900 #, c-format @@ -2079,7 +2085,7 @@ msgstr "fts: kan array niet pletten\n" #: extension/filefuncs.c:824 msgid "fts: ignoring sneaky FTS_NOSTAT flag. nyah, nyah, nyah." -msgstr "" +msgstr "fts: listige FTS_NOSTAT-vlag wordt genegeerd -- lekker puh :)" #: extension/filefuncs.c:841 msgid "fts: clear_array() failed\n" @@ -3283,6 +3289,8 @@ msgid "" "\t# Loaded extensions (-l and/or @load)\n" "\n" msgstr "" +"\t# Geladen uitbreidingen ('-l' en/of '@load')\n" +"\n" #: profile.c:972 #, c-format @@ -3374,7 +3382,7 @@ msgstr "Geen eerdere reguliere expressie" #: symbol.c:741 msgid "can not pop main context" -msgstr "" +msgstr "kan hoofdcontext niet poppen" #~ 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" @@ -3556,15 +3564,6 @@ msgstr "" #~ msgid "\t-m[fr] val\n" #~ msgstr "\t-m[fr] waarde\n" -#~ msgid "\t-W compat\t\t--compat\n" -#~ msgstr "\t-W compat\t\t\t--compat\n" - -#~ msgid "\t-W copyleft\t\t--copyleft\n" -#~ msgstr "\t-W copyleft\t\t\t--copyleft\n" - -#~ msgid "\t-W usage\t\t--usage\n" -#~ msgstr "\t-W usage\t\t\t--usage\n" - #~ msgid "can't convert string to float" #~ msgstr "kan string niet converteren naar drijvende-komma-getal" -- cgit v1.2.3 From 7292540a9f11befc187bc77e56846f94ec0bda58 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 7 Feb 2014 14:32:46 +0200 Subject: Doc updates. --- doc/ChangeLog | 4 + doc/gawk.info | 1166 +++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 99 ++--- doc/gawktexi.in | 99 ++--- 4 files changed, 639 insertions(+), 729 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index e7290d1a..94e8b306 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-02-07 Arnold D. Robbins + + * gawktexi.in: More minor fixes, update UPDATE_MONTH. + 2014-02-03 Arnold D. Robbins * gawktexi.in: More minor fixes, in indexing. diff --git a/doc/gawk.info b/doc/gawk.info index 329f15d3..6523199c 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -1816,18 +1816,8 @@ and the first four months of the current year. Mar 24 75 70 495 Apr 21 70 74 514 - If you are reading this in GNU Emacs using Info, you can copy the -regions of text showing these sample files into your own test files. -This way you can try out the examples shown in the remainder of this -document. You do this by using the command `M-x write-region' to copy -text from the Info file into a file for use with `awk' (*Note -Miscellaneous File Operations: (emacs)Misc File Ops, for more -information). Using this information, create your own `BBS-list' and -`inventory-shipped' files and practice what you learn in this Info file. - - If you are using the stand-alone version of Info, see *note Extract -Program::, for an `awk' program that extracts these data files from -`gawk.texi', the (generated) Texinfo source file for this Info file. + The sample files are included in the `gawk' distribution, in the +directory `awklib/eg/data'.  File: gawk.info, Node: Very Simple, Next: Two Rules, Prev: Sample Data Files, Up: Getting Started @@ -2238,7 +2228,7 @@ File: gawk.info, Node: Invoking Gawk, Next: Regexp, Prev: Getting Started, U 2 Running `awk' and `gawk' ************************** -This major node covers how to run awk, both POSIX-standard and +This major node covers how to run `awk', both POSIX-standard and `gawk'-specific command-line options, and what `awk' and `gawk' do with non-option arguments. It then proceeds to cover how `gawk' searches for source files, reading standard input along with other files, @@ -2314,22 +2304,8 @@ The following list describes options mandated by the POSIX standard: `--file SOURCE-FILE' Read `awk' program source from SOURCE-FILE instead of in the first non-option argument. This option may be given multiple times; the - `awk' program consists of the concatenation the contents of each - specified SOURCE-FILE. - -`-i SOURCE-FILE' -`--include SOURCE-FILE' - Read `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 will not be loaded if it has been previously - loaded, whereas the `-f' will always load 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. Thus, after processing an `-i' argument, `gawk' still - expects to find the main source code via the `-f' option or on the - command-line. + `awk' program consists of the concatenation of the contents of + each specified SOURCE-FILE. `-v VAR=VAL' `--assign VAR=VAL' @@ -2458,6 +2434,20 @@ The following list describes options mandated by the POSIX standard: Print a "usage" message summarizing the short and long style options that `gawk' accepts and then exit. +`-i SOURCE-FILE' +`--include SOURCE-FILE' + Read `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 will not be loaded if it has been previously + loaded, whereas the `-f' will always load 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. Thus, after processing an `-i' argument, `gawk' still + expects to find the main source code via the `-f' option or on the + command-line. + `-l LIB' `--load LIB' Load a shared library LIB. This searches for the library using the @@ -4765,14 +4755,15 @@ File: gawk.info, Node: Constant Size, Next: Splitting By Content, Prev: Field 4.6 Reading Fixed-Width Data ============================ -(This minor node discusses an advanced feature of `awk'. If you are a -novice `awk' user, you might want to skip it on the first reading.) + NOTE: This minor node discusses an advanced feature of `gawk'. If + you are a novice `awk' user, you might want to skip it on the + first reading. -`gawk' provides a facility for dealing with fixed-width fields with no -distinctive field separator. For example, data of this nature arises -in the input for old Fortran programs where numbers are run together, -or in the output of programs that did not anticipate the use of their -output as input for other programs. + `gawk' provides a facility for dealing with fixed-width fields with +no distinctive field separator. For example, data of this nature +arises in the input for old Fortran programs where numbers are run +together, or in the output of programs that did not anticipate the use +of their output as input for other programs. An example of the latter is a table where all the columns are lined up by the use of a variable number of spaces and _empty fields are just @@ -4871,10 +4862,11 @@ File: gawk.info, Node: Splitting By Content, Next: Multiple Line, Prev: Const 4.7 Defining Fields By Content ============================== -(This minor node discusses an advanced feature of `awk'. If you are a -novice `awk' user, you might want to skip it on the first reading.) + NOTE: This minor node discusses an advanced feature of `gawk'. If + you are a novice `awk' user, you might want to skip it on the + first reading. -Normally, when using `FS', `gawk' defines the fields as the parts of + Normally, when using `FS', `gawk' defines the fields as the parts of the record that occur in between each field separator. In other words, `FS' defines what a field _is not_, instead of what a field _is_. However, there are times when you really want to define the fields by @@ -21880,11 +21872,8 @@ that use them. allowing `gawk' to use them as it needs to. `typedef enum awk_bool {' - ` awk_false = 0,' - ` awk_true' - `} awk_bool_t;' A simple boolean type. @@ -30005,13 +29994,13 @@ Index * - (hyphen), -- operator: Increment Ops. (line 48) * - (hyphen), -= operator <1>: Precedence. (line 95) * - (hyphen), -= operator: Assignment Ops. (line 129) -* - (hyphen), filenames beginning with: Options. (line 73) +* - (hyphen), filenames beginning with: Options. (line 59) * - (hyphen), in bracket expressions: Bracket Expressions. (line 17) -* --assign option: Options. (line 46) +* --assign option: Options. (line 32) * --bignum option: Options. (line 201) -* --characters-as-bytes option: Options. (line 82) -* --copyright option: Options. (line 102) -* --debug option: Options. (line 122) +* --characters-as-bytes option: Options. (line 68) +* --copyright option: Options. (line 88) +* --debug option: Options. (line 108) * --disable-extensions configuration option: Additional Configuration Options. (line 9) * --disable-lint configuration option: Additional Configuration Options. @@ -30019,14 +30008,14 @@ Index * --disable-nls configuration option: Additional Configuration Options. (line 30) * --dump-variables option <1>: Library Names. (line 45) -* --dump-variables option: Options. (line 107) -* --exec option: Options. (line 139) +* --dump-variables option: Options. (line 93) +* --exec option: Options. (line 125) * --field-separator option: Options. (line 21) * --file option: Options. (line 25) * --gen-pot option <1>: String Extraction. (line 6) -* --gen-pot option: Options. (line 161) -* --help option: Options. (line 168) -* --include option: Options. (line 32) +* --gen-pot option: Options. (line 147) +* --help option: Options. (line 154) +* --include option: Options. (line 159) * --lint option <1>: Options. (line 182) * --lint option: Command Line. (line 20) * --lint-old option: Options. (line 288) @@ -30048,20 +30037,20 @@ Index * --sandbox option, input redirection with getline: Getline. (line 19) * --sandbox option, output redirection with print, printf: Redirection. (line 6) -* --source option: Options. (line 131) -* --traditional option: Options. (line 95) +* --source option: Options. (line 117) +* --traditional option: Options. (line 81) * --traditional option, --posix option and: Options. (line 266) * --use-lc-numeric option: Options. (line 215) * --version option: Options. (line 293) * --with-whiny-user-strftime configuration option: Additional Configuration Options. (line 35) -* -b option: Options. (line 82) -* -C option: Options. (line 102) -* -c option: Options. (line 95) -* -D option: Options. (line 122) -* -d option: Options. (line 107) -* -E option: Options. (line 139) -* -e option: Options. (line 131) +* -b option: Options. (line 68) +* -C option: Options. (line 88) +* -c option: Options. (line 81) +* -D option: Options. (line 108) +* -d option: Options. (line 93) +* -E option: Options. (line 125) +* -e option: Options. (line 117) * -F option: Command Line Field Separator. (line 6) * -f option: Options. (line 25) @@ -30069,9 +30058,9 @@ Index * -f option: Long. (line 12) * -F option, -Ft sets FS to TAB: Options. (line 301) * -f option, multiple uses: Options. (line 306) -* -g option: Options. (line 161) -* -h option: Options. (line 168) -* -i option: Options. (line 32) +* -g option: Options. (line 147) +* -h option: Options. (line 154) +* -i option: Options. (line 159) * -L option: Options. (line 288) * -l option: Options. (line 173) * -M option: Options. (line 201) @@ -30085,8 +30074,8 @@ Index * -S option: Options. (line 279) * -v option: Assignment Options. (line 12) * -V option: Options. (line 293) -* -v option: Options. (line 46) -* -W option: Options. (line 60) +* -v option: Options. (line 32) +* -W option: Options. (line 46) * . (period): Regexp Operators. (line 43) * .gmo files: Explaining gettext. (line 41) * .gmo files, converting from .po: I18N Example. (line 62) @@ -30215,7 +30204,7 @@ Index * Ada programming language: Glossary. (line 20) * adding, features to gawk: Adding Code. (line 6) * adding, fields: Changing Fields. (line 53) -* advanced features, fixed-width data: Constant Size. (line 9) +* advanced features, fixed-width data: Constant Size. (line 10) * advanced features, gawk: Advanced Features. (line 6) * advanced features, network connections, See Also networks, connections: Advanced Features. (line 6) @@ -30224,7 +30213,7 @@ Index * advanced features, processes, communicating with: Two-way I/O. (line 23) * advanced features, specifying field content: Splitting By Content. - (line 9) + (line 10) * Aho, Alfred <1>: Contributors. (line 11) * Aho, Alfred: History. (line 17) * alarm clock example program: Alarm Program. (line 9) @@ -30326,7 +30315,7 @@ Index * asterisk (*), *= operator: Assignment Ops. (line 129) * atan2() function: Numeric Functions. (line 11) * awf (amazingly workable formatter) program: Glossary. (line 25) -* awk debugging, enabling: Options. (line 122) +* awk debugging, enabling: Options. (line 108) * awk language, POSIX version: Assignment Ops. (line 136) * awk profiling, enabling: Options. (line 235) * awk programs <1>: Two Rules. (line 6) @@ -30384,7 +30373,7 @@ Index * AWKPATH environment variable: AWKPATH Variable. (line 6) * awkprof.out file: Profiling. (line 6) * awksed.awk program: Simple Sed. (line 25) -* awkvars.out file: Options. (line 107) +* awkvars.out file: Options. (line 93) * b debugger command (alias for break): Breakpoint Control. (line 11) * backslash (\) <1>: Regexp Operators. (line 18) * backslash (\) <2>: Quoting. (line 31) @@ -30528,7 +30517,7 @@ Index * built-in functions: Functions. (line 6) * built-in functions, evaluation order: Calling Built-in. (line 30) * built-in variables: Built-in Variables. (line 6) -* built-in variables, -v option, setting with: Options. (line 54) +* built-in variables, -v option, setting with: Options. (line 40) * built-in variables, conveying information: Auto-set. (line 6) * built-in variables, user-modifiable: User-modified. (line 6) * Busybox Awk: Other Versions. (line 88) @@ -30551,7 +30540,7 @@ Index * case sensitivity, regexps and <1>: User-modified. (line 82) * case sensitivity, regexps and: Case-sensitivity. (line 6) * case sensitivity, string comparisons and: User-modified. (line 82) -* CGI, awk scripts for: Options. (line 139) +* CGI, awk scripts for: Options. (line 125) * character lists, See bracket expressions: Regexp Operators. (line 55) * character sets (machine character encodings) <1>: Glossary. (line 141) * character sets (machine character encodings): Ordinal Functions. @@ -30604,7 +30593,7 @@ Index (line 6) * command line, options <2>: Options. (line 6) * command line, options: Long. (line 12) -* command line, options, end of: Options. (line 68) +* command line, options, end of: Options. (line 54) * command line, variables, assigning on: Assignment Options. (line 6) * command-line options, processing: Getopt Function. (line 6) * command-line options, string extraction: String Extraction. (line 6) @@ -30638,7 +30627,7 @@ Index (line 60) * compatibility mode (gawk), octal numbers: Nondecimal-numbers. (line 60) -* compatibility mode (gawk), specifying: Options. (line 95) +* compatibility mode (gawk), specifying: Options. (line 81) * compiled programs <1>: Glossary. (line 165) * compiled programs: Basic High Level. (line 15) * compiling gawk for Cygwin: Cygwin. (line 6) @@ -30743,7 +30732,7 @@ Index * dark corner, split() function: String Functions. (line 358) * dark corner, strings, storing: Records. (line 195) * dark corner, value of ARGV[0]: Auto-set. (line 35) -* data, fixed-width: Constant Size. (line 9) +* data, fixed-width: Constant Size. (line 10) * data-driven languages: Basic High Level. (line 85) * database, group, reading: Group Functions. (line 6) * database, users, reading: Passwd Functions. (line 6) @@ -31131,7 +31120,7 @@ Index * fields, single-character: Single Character Fields. (line 6) * FIELDWIDTHS variable <1>: User-modified. (line 35) -* FIELDWIDTHS variable: Constant Size. (line 22) +* FIELDWIDTHS variable: Constant Size. (line 23) * file descriptors: Special FD. (line 6) * file names, distinguishing: Auto-set. (line 52) * file names, in compatibility mode: Special Caveats. (line 9) @@ -31155,7 +31144,7 @@ Index * files, as single records: Records. (line 200) * files, awk programs in: Long. (line 6) * files, awkprof.out: Profiling. (line 6) -* files, awkvars.out: Options. (line 107) +* files, awkvars.out: Options. (line 93) * files, closing: I/O Functions. (line 10) * files, descriptors, See file descriptors: Special FD. (line 6) * files, group: Group Functions. (line 6) @@ -31182,7 +31171,7 @@ Index * files, portable object template: Explaining gettext. (line 30) * files, portable object, converting to message object files: I18N Example. (line 62) -* files, portable object, generating: Options. (line 161) +* files, portable object, generating: Options. (line 147) * files, processing, ARGIND variable and: Auto-set. (line 47) * files, reading: Rewind Function. (line 6) * files, reading, multiline records: Multiple Line. (line 6) @@ -31194,7 +31183,7 @@ Index * finish debugger command: Debugger Execution Control. (line 39) * Fish, Fred: Contributors. (line 50) -* fixed-width data: Constant Size. (line 9) +* fixed-width data: Constant Size. (line 10) * flag variables <1>: Tee Program. (line 20) * flag variables: Boolean Ops. (line 67) * floating-point numbers, arbitrary precision: Arbitrary Precision Arithmetic. @@ -31228,7 +31217,7 @@ Index * forward slash (/), patterns and: Expression Patterns. (line 24) * FPAT variable <1>: User-modified. (line 45) * FPAT variable: Splitting By Content. - (line 26) + (line 27) * frame debugger command: Execution Stack. (line 25) * Free Documentation License (FDL): GNU Free Documentation License. (line 6) @@ -31333,12 +31322,12 @@ Index * gawk, features, advanced: Advanced Features. (line 6) * gawk, field separators and: User-modified. (line 77) * gawk, FIELDWIDTHS variable in <1>: User-modified. (line 35) -* gawk, FIELDWIDTHS variable in: Constant Size. (line 22) +* gawk, FIELDWIDTHS variable in: Constant Size. (line 23) * gawk, file names in: Special Files. (line 6) * gawk, format-control characters: Control Letters. (line 18) * gawk, FPAT variable in <1>: User-modified. (line 45) * gawk, FPAT variable in: Splitting By Content. - (line 26) + (line 27) * gawk, FUNCTAB array in: Auto-set. (line 119) * gawk, function arguments and: Calling Built-in. (line 16) * gawk, hexadecimal numbers and: Nondecimal-numbers. (line 42) @@ -31385,7 +31374,7 @@ Index * gawk, RT variable in: Records. (line 117) * gawk, See Also awk: Preface. (line 36) * gawk, source code, obtaining: Getting. (line 6) -* gawk, splitting fields and: Constant Size. (line 87) +* gawk, splitting fields and: Constant Size. (line 88) * gawk, string-translation functions: I18N Functions. (line 6) * gawk, SYMTAB array in: Auto-set. (line 274) * gawk, TEXTDOMAIN variable in: User-modified. (line 162) @@ -31451,7 +31440,7 @@ Index * GNU Lesser General Public License: Glossary. (line 405) * GNU long options <1>: Options. (line 6) * GNU long options: Command Line. (line 13) -* GNU long options, printing list of: Options. (line 168) +* GNU long options, printing list of: Options. (line 154) * GNU Project <1>: Glossary. (line 323) * GNU Project: Manual History. (line 11) * GNU/Linux <1>: Glossary. (line 624) @@ -31459,7 +31448,7 @@ Index * GNU/Linux: Manual History. (line 28) * GPL (General Public License) <1>: Glossary. (line 314) * GPL (General Public License): Manual History. (line 11) -* GPL (General Public License), printing: Options. (line 102) +* 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) @@ -31490,7 +31479,7 @@ Index * hyphen (-), -- operator: Increment Ops. (line 48) * hyphen (-), -= operator <1>: Precedence. (line 95) * hyphen (-), -= operator: Assignment Ops. (line 129) -* hyphen (-), filenames beginning with: Options. (line 73) +* hyphen (-), filenames beginning with: Options. (line 59) * hyphen (-), in bracket expressions: Bracket Expressions. (line 17) * i debugger command (alias for info): Debugger Info. (line 13) * id utility: Id Program. (line 6) @@ -31883,13 +31872,13 @@ Index (line 6) * options, command-line <2>: Options. (line 6) * options, command-line: Long. (line 12) -* options, command-line, end of: Options. (line 68) +* options, command-line, end of: Options. (line 54) * options, command-line, invoking awk: Command Line. (line 6) * options, command-line, processing: Getopt Function. (line 6) * options, deprecated: Obsolete. (line 6) * options, long <1>: Options. (line 6) * options, long: Command Line. (line 13) -* options, printing list of: Options. (line 168) +* options, printing list of: Options. (line 154) * OR bitwise operation: Bitwise Functions. (line 6) * or Boolean-logic operator: Boolean Ops. (line 6) * or() function (gawk): Bitwise Functions. (line 49) @@ -31985,7 +31974,7 @@ Index * portable object files: Explaining gettext. (line 36) * portable object files, converting to message object files: I18N Example. (line 62) -* portable object files, generating: Options. (line 161) +* portable object files, generating: Options. (line 147) * portable object template files: Explaining gettext. (line 30) * porting gawk: New Ports. (line 6) * positional specifiers, printf statement <1>: Printf Ordering. @@ -32069,7 +32058,7 @@ Index * printf statement, sprintf() function and: Round Function. (line 6) * printf statement, syntax of: Basic Printf. (line 6) * printing: Printing. (line 6) -* printing, list of options: Options. (line 168) +* printing, list of options: Options. (line 154) * printing, mailing labels: Labels Program. (line 6) * printing, unduplicated lines of text: Uniq Program. (line 6) * printing, user information: Id Program. (line 6) @@ -32409,7 +32398,7 @@ Index * source code, jawk: Other Versions. (line 112) * source code, libmawk: Other Versions. (line 120) * source code, mawk: Other Versions. (line 44) -* source code, mixing: Options. (line 131) +* source code, mixing: Options. (line 117) * source code, pawk: Other Versions. (line 78) * source code, QSE Awk: Other Versions. (line 130) * source code, QuikTrim Awk: Other Versions. (line 134) @@ -32511,7 +32500,6 @@ Index * Texinfo <3>: Extract Program. (line 12) * Texinfo <4>: Dupword Program. (line 17) * Texinfo <5>: Library Functions. (line 33) -* Texinfo <6>: Sample Data Files. (line 66) * Texinfo: Conventions. (line 6) * Texinfo, chapter beginnings in files: Regexp Operators. (line 22) * Texinfo, extracting programs from source files: Extract Program. @@ -32555,7 +32543,7 @@ Index (line 112) * troubleshooting, division: Arithmetic Ops. (line 44) * troubleshooting, fatal errors, field widths, specifying: Constant Size. - (line 22) + (line 23) * troubleshooting, fatal errors, printf format strings: Format Modifiers. (line 159) * troubleshooting, fflush() function: I/O Functions. (line 60) @@ -32579,7 +32567,7 @@ Index * troubleshooting, substr() function: String Functions. (line 496) * troubleshooting, system() function: I/O Functions. (line 94) * troubleshooting, typographical errors, global variables: Options. - (line 112) + (line 98) * true, logical: Truth Values. (line 6) * Trueman, David <1>: Contributors. (line 30) * Trueman, David <2>: Acknowledgments. (line 47) @@ -32635,7 +32623,7 @@ Index * variables, assigning on command line: Assignment Options. (line 6) * variables, built-in <1>: Built-in Variables. (line 6) * variables, built-in: Using Variables. (line 20) -* variables, built-in, -v option, setting with: Options. (line 54) +* variables, built-in, -v option, setting with: Options. (line 40) * variables, built-in, conveying information: Auto-set. (line 6) * variables, flag: Boolean Ops. (line 67) * variables, getline command into, using <1>: Getline/Variable/Coprocess. @@ -32646,12 +32634,12 @@ Index (line 6) * variables, getline command into, using: Getline/Variable. (line 6) * variables, global, for library functions: Library Names. (line 11) -* variables, global, printing list of: Options. (line 107) +* variables, global, printing list of: Options. (line 93) * variables, initializing: Using Variables. (line 20) * variables, local: Variable Scope. (line 6) * variables, names of: Arrays. (line 18) * variables, private: Library Names. (line 11) -* variables, setting: Options. (line 46) +* variables, setting: Options. (line 32) * variables, shadowing: Definition Syntax. (line 61) * variables, types of: Assignment Ops. (line 40) * variables, types of, comparison expressions and: Typing and Comparison. @@ -32670,7 +32658,7 @@ Index * Vinschen, Corinna: Acknowledgments. (line 60) * w debugger command (alias for watch): Viewing And Changing Data. (line 67) -* w utility: Constant Size. (line 22) +* w utility: Constant Size. (line 23) * wait() extension function: Extension Sample Fork. (line 22) * waitpid() extension function: Extension Sample Fork. @@ -32774,496 +32762,496 @@ Node: Comments80181 Node: Quoting82648 Node: DOS Quoting87271 Node: Sample Data Files87946 -Node: Very Simple90990 -Node: Two Rules95589 -Node: More Complex97736 -Ref: More Complex-Footnote-1100666 -Node: Statements/Lines100751 -Ref: Statements/Lines-Footnote-1105213 -Node: Other Features105478 -Node: When106406 -Node: Invoking Gawk108553 -Node: Command Line110014 -Node: Options110797 -Ref: Options-Footnote-1126189 -Node: Other Arguments126214 -Node: Naming Standard Input128872 -Node: Environment Variables129966 -Node: AWKPATH Variable130524 -Ref: AWKPATH Variable-Footnote-1133282 -Node: AWKLIBPATH Variable133542 -Node: Other Environment Variables134260 -Node: Exit Status137223 -Node: Include Files137898 -Node: Loading Shared Libraries141467 -Node: Obsolete142831 -Node: Undocumented143528 -Node: Regexp143770 -Node: Regexp Usage145159 -Node: Escape Sequences147185 -Node: Regexp Operators152854 -Ref: Regexp Operators-Footnote-1160234 -Ref: Regexp Operators-Footnote-2160381 -Node: Bracket Expressions160479 -Ref: table-char-classes162369 -Node: GNU Regexp Operators164892 -Node: Case-sensitivity168615 -Ref: Case-sensitivity-Footnote-1171583 -Ref: Case-sensitivity-Footnote-2171818 -Node: Leftmost Longest171926 -Node: Computed Regexps173127 -Node: Reading Files176464 -Node: Records178466 -Ref: Records-Footnote-1187355 -Node: Fields187392 -Ref: Fields-Footnote-1190425 -Node: Nonconstant Fields190511 -Node: Changing Fields192713 -Node: Field Separators198672 -Node: Default Field Splitting201374 -Node: Regexp Field Splitting202491 -Node: Single Character Fields205833 -Node: Command Line Field Separator206892 -Node: Full Line Fields210326 -Ref: Full Line Fields-Footnote-1210834 -Node: Field Splitting Summary210880 -Ref: Field Splitting Summary-Footnote-1213979 -Node: Constant Size214080 -Node: Splitting By Content218664 -Ref: Splitting By Content-Footnote-1222390 -Node: Multiple Line222430 -Ref: Multiple Line-Footnote-1228277 -Node: Getline228456 -Node: Plain Getline230672 -Node: Getline/Variable232767 -Node: Getline/File233914 -Node: Getline/Variable/File235255 -Ref: Getline/Variable/File-Footnote-1236854 -Node: Getline/Pipe236941 -Node: Getline/Variable/Pipe239640 -Node: Getline/Coprocess240747 -Node: Getline/Variable/Coprocess241999 -Node: Getline Notes242736 -Node: Getline Summary245523 -Ref: table-getline-variants245931 -Node: Read Timeout246843 -Ref: Read Timeout-Footnote-1250584 -Node: Command line directories250641 -Node: Printing251271 -Node: Print252902 -Node: Print Examples254239 -Node: Output Separators257023 -Node: OFMT258783 -Node: Printf260141 -Node: Basic Printf261047 -Node: Control Letters262586 -Node: Format Modifiers266398 -Node: Printf Examples272407 -Node: Redirection275122 -Node: Special Files282087 -Node: Special FD282620 -Ref: Special FD-Footnote-1286245 -Node: Special Network286319 -Node: Special Caveats287169 -Node: Close Files And Pipes287965 -Ref: Close Files And Pipes-Footnote-1294948 -Ref: Close Files And Pipes-Footnote-2295096 -Node: Expressions295246 -Node: Values296378 -Node: Constants297054 -Node: Scalar Constants297734 -Ref: Scalar Constants-Footnote-1298593 -Node: Nondecimal-numbers298775 -Node: Regexp Constants301775 -Node: Using Constant Regexps302250 -Node: Variables305305 -Node: Using Variables305960 -Node: Assignment Options307684 -Node: Conversion309556 -Ref: table-locale-affects315057 -Ref: Conversion-Footnote-1315681 -Node: All Operators315790 -Node: Arithmetic Ops316420 -Node: Concatenation318925 -Ref: Concatenation-Footnote-1321717 -Node: Assignment Ops321837 -Ref: table-assign-ops326825 -Node: Increment Ops328156 -Node: Truth Values and Conditions331590 -Node: Truth Values332673 -Node: Typing and Comparison333722 -Node: Variable Typing334515 -Ref: Variable Typing-Footnote-1338412 -Node: Comparison Operators338534 -Ref: table-relational-ops338944 -Node: POSIX String Comparison342492 -Ref: POSIX String Comparison-Footnote-1343448 -Node: Boolean Ops343586 -Ref: Boolean Ops-Footnote-1347664 -Node: Conditional Exp347755 -Node: Function Calls349487 -Node: Precedence353081 -Node: Locales356750 -Node: Patterns and Actions357839 -Node: Pattern Overview358893 -Node: Regexp Patterns360562 -Node: Expression Patterns361105 -Node: Ranges364790 -Node: BEGIN/END367756 -Node: Using BEGIN/END368518 -Ref: Using BEGIN/END-Footnote-1371249 -Node: I/O And BEGIN/END371355 -Node: BEGINFILE/ENDFILE373637 -Node: Empty376551 -Node: Using Shell Variables376867 -Node: Action Overview379152 -Node: Statements381509 -Node: If Statement383363 -Node: While Statement384862 -Node: Do Statement386906 -Node: For Statement388062 -Node: Switch Statement391214 -Node: Break Statement393311 -Node: Continue Statement395301 -Node: Next Statement397094 -Node: Nextfile Statement399484 -Node: Exit Statement402127 -Node: Built-in Variables404543 -Node: User-modified405638 -Ref: User-modified-Footnote-1413996 -Node: Auto-set414058 -Ref: Auto-set-Footnote-1427136 -Ref: Auto-set-Footnote-2427341 -Node: ARGC and ARGV427397 -Node: Arrays431248 -Node: Array Basics432753 -Node: Array Intro433579 -Node: Reference to Elements437896 -Node: Assigning Elements440166 -Node: Array Example440657 -Node: Scanning an Array442389 -Node: Controlling Scanning444703 -Ref: Controlling Scanning-Footnote-1449790 -Node: Delete450106 -Ref: Delete-Footnote-1452871 -Node: Numeric Array Subscripts452928 -Node: Uninitialized Subscripts455111 -Node: Multidimensional456738 -Node: Multiscanning459831 -Node: Arrays of Arrays461420 -Node: Functions466060 -Node: Built-in466879 -Node: Calling Built-in467957 -Node: Numeric Functions469945 -Ref: Numeric Functions-Footnote-1473777 -Ref: Numeric Functions-Footnote-2474134 -Ref: Numeric Functions-Footnote-3474182 -Node: String Functions474451 -Ref: String Functions-Footnote-1497371 -Ref: String Functions-Footnote-2497500 -Ref: String Functions-Footnote-3497748 -Node: Gory Details497835 -Ref: table-sub-escapes499514 -Ref: table-sub-posix-92500868 -Ref: table-sub-proposed502219 -Ref: table-posix-sub503573 -Ref: table-gensub-escapes505118 -Ref: Gory Details-Footnote-1506294 -Ref: Gory Details-Footnote-2506345 -Node: I/O Functions506496 -Ref: I/O Functions-Footnote-1513481 -Node: Time Functions513628 -Ref: Time Functions-Footnote-1524561 -Ref: Time Functions-Footnote-2524629 -Ref: Time Functions-Footnote-3524787 -Ref: Time Functions-Footnote-4524898 -Ref: Time Functions-Footnote-5525010 -Ref: Time Functions-Footnote-6525237 -Node: Bitwise Functions525503 -Ref: table-bitwise-ops526065 -Ref: Bitwise Functions-Footnote-1530286 -Node: Type Functions530470 -Node: I18N Functions531621 -Node: User-defined533248 -Node: Definition Syntax534052 -Ref: Definition Syntax-Footnote-1538962 -Node: Function Example539031 -Node: Function Caveats541625 -Node: Calling A Function542046 -Node: Variable Scope543161 -Node: Pass By Value/Reference546124 -Node: Return Statement549632 -Node: Dynamic Typing552613 -Node: Indirect Calls553544 -Node: Library Functions563229 -Ref: Library Functions-Footnote-1566742 -Ref: Library Functions-Footnote-2566885 -Node: Library Names567056 -Ref: Library Names-Footnote-1570527 -Ref: Library Names-Footnote-2570747 -Node: General Functions570833 -Node: Strtonum Function571861 -Node: Assert Function574791 -Node: Round Function578117 -Node: Cliff Random Function579660 -Node: Ordinal Functions580676 -Ref: Ordinal Functions-Footnote-1583748 -Ref: Ordinal Functions-Footnote-2584000 -Node: Join Function584209 -Ref: Join Function-Footnote-1585980 -Node: Getlocaltime Function586180 -Node: Readfile Function589921 -Node: Data File Management591760 -Node: Filetrans Function592392 -Node: Rewind Function596461 -Node: File Checking597848 -Node: Empty Files598942 -Node: Ignoring Assigns601172 -Node: Getopt Function602725 -Ref: Getopt Function-Footnote-1614028 -Node: Passwd Functions614231 -Ref: Passwd Functions-Footnote-1623206 -Node: Group Functions623294 -Node: Walking Arrays631378 -Node: Sample Programs633515 -Node: Running Examples634189 -Node: Clones634917 -Node: Cut Program636141 -Node: Egrep Program645986 -Ref: Egrep Program-Footnote-1653759 -Node: Id Program653869 -Node: Split Program657485 -Ref: Split Program-Footnote-1661004 -Node: Tee Program661132 -Node: Uniq Program663935 -Node: Wc Program671364 -Ref: Wc Program-Footnote-1675630 -Ref: Wc Program-Footnote-2675830 -Node: Miscellaneous Programs675922 -Node: Dupword Program677110 -Node: Alarm Program679141 -Node: Translate Program683894 -Ref: Translate Program-Footnote-1688281 -Ref: Translate Program-Footnote-2688529 -Node: Labels Program688663 -Ref: Labels Program-Footnote-1692034 -Node: Word Sorting692118 -Node: History Sorting696002 -Node: Extract Program697841 -Ref: Extract Program-Footnote-1705344 -Node: Simple Sed705472 -Node: Igawk Program708534 -Ref: Igawk Program-Footnote-1723691 -Ref: Igawk Program-Footnote-2723892 -Node: Anagram Program724030 -Node: Signature Program727098 -Node: Advanced Features728198 -Node: Nondecimal Data730084 -Node: Array Sorting731667 -Node: Controlling Array Traversal732364 -Node: Array Sorting Functions740648 -Ref: Array Sorting Functions-Footnote-1744517 -Node: Two-way I/O744711 -Ref: Two-way I/O-Footnote-1750143 -Node: TCP/IP Networking750213 -Node: Profiling753057 -Node: Internationalization760554 -Node: I18N and L10N761979 -Node: Explaining gettext762665 -Ref: Explaining gettext-Footnote-1767733 -Ref: Explaining gettext-Footnote-2767917 -Node: Programmer i18n768082 -Node: Translator i18n772284 -Node: String Extraction773077 -Ref: String Extraction-Footnote-1774038 -Node: Printf Ordering774124 -Ref: Printf Ordering-Footnote-1776908 -Node: I18N Portability776972 -Ref: I18N Portability-Footnote-1779421 -Node: I18N Example779484 -Ref: I18N Example-Footnote-1782122 -Node: Gawk I18N782194 -Node: Debugger782815 -Node: Debugging783786 -Node: Debugging Concepts784219 -Node: Debugging Terms786075 -Node: Awk Debugging788672 -Node: Sample Debugging Session789564 -Node: Debugger Invocation790084 -Node: Finding The Bug791416 -Node: List of Debugger Commands797904 -Node: Breakpoint Control799238 -Node: Debugger Execution Control802902 -Node: Viewing And Changing Data806262 -Node: Execution Stack809618 -Node: Debugger Info811085 -Node: Miscellaneous Debugger Commands815067 -Node: Readline Support820243 -Node: Limitations821074 -Node: Arbitrary Precision Arithmetic823326 -Ref: Arbitrary Precision Arithmetic-Footnote-1824975 -Node: General Arithmetic825123 -Node: Floating Point Issues826843 -Node: String Conversion Precision827724 -Ref: String Conversion Precision-Footnote-1829429 -Node: Unexpected Results829538 -Node: POSIX Floating Point Problems831691 -Ref: POSIX Floating Point Problems-Footnote-1835516 -Node: Integer Programming835554 -Node: Floating-point Programming837293 -Ref: Floating-point Programming-Footnote-1843624 -Ref: Floating-point Programming-Footnote-2843894 -Node: Floating-point Representation844158 -Node: Floating-point Context845323 -Ref: table-ieee-formats846162 -Node: Rounding Mode847546 -Ref: table-rounding-modes848025 -Ref: Rounding Mode-Footnote-1851040 -Node: Gawk and MPFR851219 -Node: Arbitrary Precision Floats852474 -Ref: Arbitrary Precision Floats-Footnote-1854917 -Node: Setting Precision855233 -Ref: table-predefined-precision-strings855919 -Node: Setting Rounding Mode858064 -Ref: table-gawk-rounding-modes858468 -Node: Floating-point Constants859655 -Node: Changing Precision861084 -Ref: Changing Precision-Footnote-1862481 -Node: Exact Arithmetic862655 -Node: Arbitrary Precision Integers865793 -Ref: Arbitrary Precision Integers-Footnote-1868811 -Node: Dynamic Extensions868958 -Node: Extension Intro870416 -Node: Plugin License871681 -Node: Extension Mechanism Outline872366 -Ref: load-extension872783 -Ref: load-new-function874261 -Ref: call-new-function875256 -Node: Extension API Description877271 -Node: Extension API Functions Introduction878484 -Node: General Data Types883350 -Ref: General Data Types-Footnote-1888955 -Node: Requesting Values889254 -Ref: table-value-types-returned889985 -Node: Constructor Functions890939 -Node: Registration Functions893959 -Node: Extension Functions894644 -Node: Exit Callback Functions896869 -Node: Extension Version String898118 -Node: Input Parsers898768 -Node: Output Wrappers908525 -Node: Two-way processors913035 -Node: Printing Messages915243 -Ref: Printing Messages-Footnote-1916320 -Node: Updating `ERRNO'916472 -Node: Accessing Parameters917211 -Node: Symbol Table Access918441 -Node: Symbol table by name918953 -Node: Symbol table by cookie920700 -Ref: Symbol table by cookie-Footnote-1924830 -Node: Cached values924893 -Ref: Cached values-Footnote-1928342 -Node: Array Manipulation928433 -Ref: Array Manipulation-Footnote-1929531 -Node: Array Data Types929570 -Ref: Array Data Types-Footnote-1932273 -Node: Array Functions932365 -Node: Flattening Arrays936131 -Node: Creating Arrays942983 -Node: Extension API Variables947708 -Node: Extension Versioning948344 -Node: Extension API Informational Variables950245 -Node: Extension API Boilerplate951331 -Node: Finding Extensions955135 -Node: Extension Example955695 -Node: Internal File Description956425 -Node: Internal File Ops960516 -Ref: Internal File Ops-Footnote-1972024 -Node: Using Internal File Ops972164 -Ref: Using Internal File Ops-Footnote-1974517 -Node: Extension Samples974783 -Node: Extension Sample File Functions976307 -Node: Extension Sample Fnmatch984792 -Node: Extension Sample Fork986518 -Node: Extension Sample Inplace987736 -Node: Extension Sample Ord989514 -Node: Extension Sample Readdir990350 -Node: Extension Sample Revout991882 -Node: Extension Sample Rev2way992475 -Node: Extension Sample Read write array993165 -Node: Extension Sample Readfile995048 -Node: Extension Sample API Tests995866 -Node: Extension Sample Time996391 -Node: gawkextlib997755 -Node: Language History1000536 -Node: V7/SVR3.11002129 -Node: SVR41004449 -Node: POSIX1005891 -Node: BTL1007277 -Node: POSIX/GNU1008011 -Node: Feature History1013610 -Node: Common Extensions1026574 -Node: Ranges and Locales1027886 -Ref: Ranges and Locales-Footnote-11032504 -Ref: Ranges and Locales-Footnote-21032531 -Ref: Ranges and Locales-Footnote-31032791 -Node: Contributors1033012 -Node: Installation1038157 -Node: Gawk Distribution1039051 -Node: Getting1039535 -Node: Extracting1040361 -Node: Distribution contents1042053 -Node: Unix Installation1047758 -Node: Quick Installation1048375 -Node: Additional Configuration Options1050819 -Node: Configuration Philosophy1052555 -Node: Non-Unix Installation1054909 -Node: PC Installation1055367 -Node: PC Binary Installation1056666 -Node: PC Compiling1058514 -Node: PC Testing1061458 -Node: PC Using1062634 -Node: Cygwin1066819 -Node: MSYS1067819 -Node: VMS Installation1068333 -Node: VMS Compilation1069097 -Ref: VMS Compilation-Footnote-11070712 -Node: VMS Dynamic Extensions1070770 -Node: VMS Installation Details1072143 -Node: VMS Running1074390 -Node: VMS GNV1077224 -Node: VMS Old Gawk1077947 -Node: Bugs1078417 -Node: Other Versions1082335 -Node: Notes1088419 -Node: Compatibility Mode1089219 -Node: Additions1090002 -Node: Accessing The Source1090929 -Node: Adding Code1092369 -Node: New Ports1098414 -Node: Derived Files1102549 -Ref: Derived Files-Footnote-11107870 -Ref: Derived Files-Footnote-21107904 -Ref: Derived Files-Footnote-31108504 -Node: Future Extensions1108602 -Node: Implementation Limitations1109185 -Node: Extension Design1110437 -Node: Old Extension Problems1111591 -Ref: Old Extension Problems-Footnote-11113099 -Node: Extension New Mechanism Goals1113156 -Ref: Extension New Mechanism Goals-Footnote-11116521 -Node: Extension Other Design Decisions1116707 -Node: Extension Future Growth1118813 -Node: Old Extension Mechanism1119649 -Node: Basic Concepts1121389 -Node: Basic High Level1122070 -Ref: figure-general-flow1122341 -Ref: figure-process-flow1122940 -Ref: Basic High Level-Footnote-11126169 -Node: Basic Data Typing1126354 -Node: Glossary1129709 -Node: Copying1155171 -Node: GNU Free Documentation License1192728 -Node: Index1217865 +Node: Very Simple90332 +Node: Two Rules94931 +Node: More Complex97078 +Ref: More Complex-Footnote-1100008 +Node: Statements/Lines100093 +Ref: Statements/Lines-Footnote-1104555 +Node: Other Features104820 +Node: When105748 +Node: Invoking Gawk107895 +Node: Command Line109358 +Node: Options110141 +Ref: Options-Footnote-1125536 +Node: Other Arguments125561 +Node: Naming Standard Input128219 +Node: Environment Variables129313 +Node: AWKPATH Variable129871 +Ref: AWKPATH Variable-Footnote-1132629 +Node: AWKLIBPATH Variable132889 +Node: Other Environment Variables133607 +Node: Exit Status136570 +Node: Include Files137245 +Node: Loading Shared Libraries140814 +Node: Obsolete142178 +Node: Undocumented142875 +Node: Regexp143117 +Node: Regexp Usage144506 +Node: Escape Sequences146532 +Node: Regexp Operators152201 +Ref: Regexp Operators-Footnote-1159581 +Ref: Regexp Operators-Footnote-2159728 +Node: Bracket Expressions159826 +Ref: table-char-classes161716 +Node: GNU Regexp Operators164239 +Node: Case-sensitivity167962 +Ref: Case-sensitivity-Footnote-1170930 +Ref: Case-sensitivity-Footnote-2171165 +Node: Leftmost Longest171273 +Node: Computed Regexps172474 +Node: Reading Files175811 +Node: Records177813 +Ref: Records-Footnote-1186702 +Node: Fields186739 +Ref: Fields-Footnote-1189772 +Node: Nonconstant Fields189858 +Node: Changing Fields192060 +Node: Field Separators198019 +Node: Default Field Splitting200721 +Node: Regexp Field Splitting201838 +Node: Single Character Fields205180 +Node: Command Line Field Separator206239 +Node: Full Line Fields209673 +Ref: Full Line Fields-Footnote-1210181 +Node: Field Splitting Summary210227 +Ref: Field Splitting Summary-Footnote-1213326 +Node: Constant Size213427 +Node: Splitting By Content218034 +Ref: Splitting By Content-Footnote-1221783 +Node: Multiple Line221823 +Ref: Multiple Line-Footnote-1227670 +Node: Getline227849 +Node: Plain Getline230065 +Node: Getline/Variable232160 +Node: Getline/File233307 +Node: Getline/Variable/File234648 +Ref: Getline/Variable/File-Footnote-1236247 +Node: Getline/Pipe236334 +Node: Getline/Variable/Pipe239033 +Node: Getline/Coprocess240140 +Node: Getline/Variable/Coprocess241392 +Node: Getline Notes242129 +Node: Getline Summary244916 +Ref: table-getline-variants245324 +Node: Read Timeout246236 +Ref: Read Timeout-Footnote-1249977 +Node: Command line directories250034 +Node: Printing250664 +Node: Print252295 +Node: Print Examples253632 +Node: Output Separators256416 +Node: OFMT258176 +Node: Printf259534 +Node: Basic Printf260440 +Node: Control Letters261979 +Node: Format Modifiers265791 +Node: Printf Examples271800 +Node: Redirection274515 +Node: Special Files281480 +Node: Special FD282013 +Ref: Special FD-Footnote-1285638 +Node: Special Network285712 +Node: Special Caveats286562 +Node: Close Files And Pipes287358 +Ref: Close Files And Pipes-Footnote-1294341 +Ref: Close Files And Pipes-Footnote-2294489 +Node: Expressions294639 +Node: Values295771 +Node: Constants296447 +Node: Scalar Constants297127 +Ref: Scalar Constants-Footnote-1297986 +Node: Nondecimal-numbers298168 +Node: Regexp Constants301168 +Node: Using Constant Regexps301643 +Node: Variables304698 +Node: Using Variables305353 +Node: Assignment Options307077 +Node: Conversion308949 +Ref: table-locale-affects314450 +Ref: Conversion-Footnote-1315074 +Node: All Operators315183 +Node: Arithmetic Ops315813 +Node: Concatenation318318 +Ref: Concatenation-Footnote-1321110 +Node: Assignment Ops321230 +Ref: table-assign-ops326218 +Node: Increment Ops327549 +Node: Truth Values and Conditions330983 +Node: Truth Values332066 +Node: Typing and Comparison333115 +Node: Variable Typing333908 +Ref: Variable Typing-Footnote-1337805 +Node: Comparison Operators337927 +Ref: table-relational-ops338337 +Node: POSIX String Comparison341885 +Ref: POSIX String Comparison-Footnote-1342841 +Node: Boolean Ops342979 +Ref: Boolean Ops-Footnote-1347057 +Node: Conditional Exp347148 +Node: Function Calls348880 +Node: Precedence352474 +Node: Locales356143 +Node: Patterns and Actions357232 +Node: Pattern Overview358286 +Node: Regexp Patterns359955 +Node: Expression Patterns360498 +Node: Ranges364183 +Node: BEGIN/END367149 +Node: Using BEGIN/END367911 +Ref: Using BEGIN/END-Footnote-1370642 +Node: I/O And BEGIN/END370748 +Node: BEGINFILE/ENDFILE373030 +Node: Empty375944 +Node: Using Shell Variables376260 +Node: Action Overview378545 +Node: Statements380902 +Node: If Statement382756 +Node: While Statement384255 +Node: Do Statement386299 +Node: For Statement387455 +Node: Switch Statement390607 +Node: Break Statement392704 +Node: Continue Statement394694 +Node: Next Statement396487 +Node: Nextfile Statement398877 +Node: Exit Statement401520 +Node: Built-in Variables403936 +Node: User-modified405031 +Ref: User-modified-Footnote-1413389 +Node: Auto-set413451 +Ref: Auto-set-Footnote-1426529 +Ref: Auto-set-Footnote-2426734 +Node: ARGC and ARGV426790 +Node: Arrays430641 +Node: Array Basics432146 +Node: Array Intro432972 +Node: Reference to Elements437289 +Node: Assigning Elements439559 +Node: Array Example440050 +Node: Scanning an Array441782 +Node: Controlling Scanning444096 +Ref: Controlling Scanning-Footnote-1449183 +Node: Delete449499 +Ref: Delete-Footnote-1452264 +Node: Numeric Array Subscripts452321 +Node: Uninitialized Subscripts454504 +Node: Multidimensional456131 +Node: Multiscanning459224 +Node: Arrays of Arrays460813 +Node: Functions465453 +Node: Built-in466272 +Node: Calling Built-in467350 +Node: Numeric Functions469338 +Ref: Numeric Functions-Footnote-1473170 +Ref: Numeric Functions-Footnote-2473527 +Ref: Numeric Functions-Footnote-3473575 +Node: String Functions473844 +Ref: String Functions-Footnote-1496764 +Ref: String Functions-Footnote-2496893 +Ref: String Functions-Footnote-3497141 +Node: Gory Details497228 +Ref: table-sub-escapes498907 +Ref: table-sub-posix-92500261 +Ref: table-sub-proposed501612 +Ref: table-posix-sub502966 +Ref: table-gensub-escapes504511 +Ref: Gory Details-Footnote-1505687 +Ref: Gory Details-Footnote-2505738 +Node: I/O Functions505889 +Ref: I/O Functions-Footnote-1512874 +Node: Time Functions513021 +Ref: Time Functions-Footnote-1523954 +Ref: Time Functions-Footnote-2524022 +Ref: Time Functions-Footnote-3524180 +Ref: Time Functions-Footnote-4524291 +Ref: Time Functions-Footnote-5524403 +Ref: Time Functions-Footnote-6524630 +Node: Bitwise Functions524896 +Ref: table-bitwise-ops525458 +Ref: Bitwise Functions-Footnote-1529679 +Node: Type Functions529863 +Node: I18N Functions531014 +Node: User-defined532641 +Node: Definition Syntax533445 +Ref: Definition Syntax-Footnote-1538355 +Node: Function Example538424 +Node: Function Caveats541018 +Node: Calling A Function541439 +Node: Variable Scope542554 +Node: Pass By Value/Reference545517 +Node: Return Statement549025 +Node: Dynamic Typing552006 +Node: Indirect Calls552937 +Node: Library Functions562622 +Ref: Library Functions-Footnote-1566135 +Ref: Library Functions-Footnote-2566278 +Node: Library Names566449 +Ref: Library Names-Footnote-1569920 +Ref: Library Names-Footnote-2570140 +Node: General Functions570226 +Node: Strtonum Function571254 +Node: Assert Function574184 +Node: Round Function577510 +Node: Cliff Random Function579053 +Node: Ordinal Functions580069 +Ref: Ordinal Functions-Footnote-1583141 +Ref: Ordinal Functions-Footnote-2583393 +Node: Join Function583602 +Ref: Join Function-Footnote-1585373 +Node: Getlocaltime Function585573 +Node: Readfile Function589314 +Node: Data File Management591153 +Node: Filetrans Function591785 +Node: Rewind Function595854 +Node: File Checking597241 +Node: Empty Files598335 +Node: Ignoring Assigns600565 +Node: Getopt Function602118 +Ref: Getopt Function-Footnote-1613421 +Node: Passwd Functions613624 +Ref: Passwd Functions-Footnote-1622599 +Node: Group Functions622687 +Node: Walking Arrays630771 +Node: Sample Programs632908 +Node: Running Examples633582 +Node: Clones634310 +Node: Cut Program635534 +Node: Egrep Program645379 +Ref: Egrep Program-Footnote-1653152 +Node: Id Program653262 +Node: Split Program656878 +Ref: Split Program-Footnote-1660397 +Node: Tee Program660525 +Node: Uniq Program663328 +Node: Wc Program670757 +Ref: Wc Program-Footnote-1675023 +Ref: Wc Program-Footnote-2675223 +Node: Miscellaneous Programs675315 +Node: Dupword Program676503 +Node: Alarm Program678534 +Node: Translate Program683287 +Ref: Translate Program-Footnote-1687674 +Ref: Translate Program-Footnote-2687922 +Node: Labels Program688056 +Ref: Labels Program-Footnote-1691427 +Node: Word Sorting691511 +Node: History Sorting695395 +Node: Extract Program697234 +Ref: Extract Program-Footnote-1704737 +Node: Simple Sed704865 +Node: Igawk Program707927 +Ref: Igawk Program-Footnote-1723084 +Ref: Igawk Program-Footnote-2723285 +Node: Anagram Program723423 +Node: Signature Program726491 +Node: Advanced Features727591 +Node: Nondecimal Data729477 +Node: Array Sorting731060 +Node: Controlling Array Traversal731757 +Node: Array Sorting Functions740041 +Ref: Array Sorting Functions-Footnote-1743910 +Node: Two-way I/O744104 +Ref: Two-way I/O-Footnote-1749536 +Node: TCP/IP Networking749606 +Node: Profiling752450 +Node: Internationalization759947 +Node: I18N and L10N761372 +Node: Explaining gettext762058 +Ref: Explaining gettext-Footnote-1767126 +Ref: Explaining gettext-Footnote-2767310 +Node: Programmer i18n767475 +Node: Translator i18n771677 +Node: String Extraction772470 +Ref: String Extraction-Footnote-1773431 +Node: Printf Ordering773517 +Ref: Printf Ordering-Footnote-1776301 +Node: I18N Portability776365 +Ref: I18N Portability-Footnote-1778814 +Node: I18N Example778877 +Ref: I18N Example-Footnote-1781515 +Node: Gawk I18N781587 +Node: Debugger782208 +Node: Debugging783179 +Node: Debugging Concepts783612 +Node: Debugging Terms785468 +Node: Awk Debugging788065 +Node: Sample Debugging Session788957 +Node: Debugger Invocation789477 +Node: Finding The Bug790809 +Node: List of Debugger Commands797297 +Node: Breakpoint Control798631 +Node: Debugger Execution Control802295 +Node: Viewing And Changing Data805655 +Node: Execution Stack809011 +Node: Debugger Info810478 +Node: Miscellaneous Debugger Commands814460 +Node: Readline Support819636 +Node: Limitations820467 +Node: Arbitrary Precision Arithmetic822719 +Ref: Arbitrary Precision Arithmetic-Footnote-1824368 +Node: General Arithmetic824516 +Node: Floating Point Issues826236 +Node: String Conversion Precision827117 +Ref: String Conversion Precision-Footnote-1828822 +Node: Unexpected Results828931 +Node: POSIX Floating Point Problems831084 +Ref: POSIX Floating Point Problems-Footnote-1834909 +Node: Integer Programming834947 +Node: Floating-point Programming836686 +Ref: Floating-point Programming-Footnote-1843017 +Ref: Floating-point Programming-Footnote-2843287 +Node: Floating-point Representation843551 +Node: Floating-point Context844716 +Ref: table-ieee-formats845555 +Node: Rounding Mode846939 +Ref: table-rounding-modes847418 +Ref: Rounding Mode-Footnote-1850433 +Node: Gawk and MPFR850612 +Node: Arbitrary Precision Floats851867 +Ref: Arbitrary Precision Floats-Footnote-1854310 +Node: Setting Precision854626 +Ref: table-predefined-precision-strings855312 +Node: Setting Rounding Mode857457 +Ref: table-gawk-rounding-modes857861 +Node: Floating-point Constants859048 +Node: Changing Precision860477 +Ref: Changing Precision-Footnote-1861874 +Node: Exact Arithmetic862048 +Node: Arbitrary Precision Integers865186 +Ref: Arbitrary Precision Integers-Footnote-1868204 +Node: Dynamic Extensions868351 +Node: Extension Intro869809 +Node: Plugin License871074 +Node: Extension Mechanism Outline871759 +Ref: load-extension872176 +Ref: load-new-function873654 +Ref: call-new-function874649 +Node: Extension API Description876664 +Node: Extension API Functions Introduction877877 +Node: General Data Types882743 +Ref: General Data Types-Footnote-1888345 +Node: Requesting Values888644 +Ref: table-value-types-returned889375 +Node: Constructor Functions890329 +Node: Registration Functions893349 +Node: Extension Functions894034 +Node: Exit Callback Functions896259 +Node: Extension Version String897508 +Node: Input Parsers898158 +Node: Output Wrappers907915 +Node: Two-way processors912425 +Node: Printing Messages914633 +Ref: Printing Messages-Footnote-1915710 +Node: Updating `ERRNO'915862 +Node: Accessing Parameters916601 +Node: Symbol Table Access917831 +Node: Symbol table by name918343 +Node: Symbol table by cookie920090 +Ref: Symbol table by cookie-Footnote-1924220 +Node: Cached values924283 +Ref: Cached values-Footnote-1927732 +Node: Array Manipulation927823 +Ref: Array Manipulation-Footnote-1928921 +Node: Array Data Types928960 +Ref: Array Data Types-Footnote-1931663 +Node: Array Functions931755 +Node: Flattening Arrays935521 +Node: Creating Arrays942373 +Node: Extension API Variables947098 +Node: Extension Versioning947734 +Node: Extension API Informational Variables949635 +Node: Extension API Boilerplate950721 +Node: Finding Extensions954525 +Node: Extension Example955085 +Node: Internal File Description955815 +Node: Internal File Ops959906 +Ref: Internal File Ops-Footnote-1971414 +Node: Using Internal File Ops971554 +Ref: Using Internal File Ops-Footnote-1973907 +Node: Extension Samples974173 +Node: Extension Sample File Functions975697 +Node: Extension Sample Fnmatch984182 +Node: Extension Sample Fork985908 +Node: Extension Sample Inplace987126 +Node: Extension Sample Ord988904 +Node: Extension Sample Readdir989740 +Node: Extension Sample Revout991272 +Node: Extension Sample Rev2way991865 +Node: Extension Sample Read write array992555 +Node: Extension Sample Readfile994438 +Node: Extension Sample API Tests995256 +Node: Extension Sample Time995781 +Node: gawkextlib997145 +Node: Language History999926 +Node: V7/SVR3.11001519 +Node: SVR41003839 +Node: POSIX1005281 +Node: BTL1006667 +Node: POSIX/GNU1007401 +Node: Feature History1013000 +Node: Common Extensions1025964 +Node: Ranges and Locales1027276 +Ref: Ranges and Locales-Footnote-11031894 +Ref: Ranges and Locales-Footnote-21031921 +Ref: Ranges and Locales-Footnote-31032181 +Node: Contributors1032402 +Node: Installation1037547 +Node: Gawk Distribution1038441 +Node: Getting1038925 +Node: Extracting1039751 +Node: Distribution contents1041443 +Node: Unix Installation1047148 +Node: Quick Installation1047765 +Node: Additional Configuration Options1050209 +Node: Configuration Philosophy1051945 +Node: Non-Unix Installation1054299 +Node: PC Installation1054757 +Node: PC Binary Installation1056056 +Node: PC Compiling1057904 +Node: PC Testing1060848 +Node: PC Using1062024 +Node: Cygwin1066209 +Node: MSYS1067209 +Node: VMS Installation1067723 +Node: VMS Compilation1068487 +Ref: VMS Compilation-Footnote-11070102 +Node: VMS Dynamic Extensions1070160 +Node: VMS Installation Details1071533 +Node: VMS Running1073780 +Node: VMS GNV1076614 +Node: VMS Old Gawk1077337 +Node: Bugs1077807 +Node: Other Versions1081725 +Node: Notes1087809 +Node: Compatibility Mode1088609 +Node: Additions1089392 +Node: Accessing The Source1090319 +Node: Adding Code1091759 +Node: New Ports1097804 +Node: Derived Files1101939 +Ref: Derived Files-Footnote-11107260 +Ref: Derived Files-Footnote-21107294 +Ref: Derived Files-Footnote-31107894 +Node: Future Extensions1107992 +Node: Implementation Limitations1108575 +Node: Extension Design1109827 +Node: Old Extension Problems1110981 +Ref: Old Extension Problems-Footnote-11112489 +Node: Extension New Mechanism Goals1112546 +Ref: Extension New Mechanism Goals-Footnote-11115911 +Node: Extension Other Design Decisions1116097 +Node: Extension Future Growth1118203 +Node: Old Extension Mechanism1119039 +Node: Basic Concepts1120779 +Node: Basic High Level1121460 +Ref: figure-general-flow1121731 +Ref: figure-process-flow1122330 +Ref: Basic High Level-Footnote-11125559 +Node: Basic Data Typing1125744 +Node: Glossary1129099 +Node: Copying1154561 +Node: GNU Free Documentation License1192118 +Node: Index1217255  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index f238c45f..1dd75e51 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -40,7 +40,7 @@ @c applies to and all the info about who's publishing this edition @c These apply across the board. -@set UPDATE-MONTH January, 2014 +@set UPDATE-MONTH February, 2014 @set VERSION 4.1 @set PATCHLEVEL 0 @@ -136,10 +136,7 @@ @ignore Some comments on the layout for TeX. -1. Use at least texinfo.tex 2000-09-06.09 -2. I have done A LOT of work to make this look good. There are `@page' commands - and use of `@group ... @end group' in a number of places. If you muck - with anything, it's your responsibility not to break the layout. +1. Use at least texinfo.tex 2014-01-30.15 @end ignore @c merge the function and variable indexes into the concept index @@ -2623,23 +2620,8 @@ Apr 21 70 74 514 @c endfile @end example -@ifinfo -If you are reading this in GNU Emacs using Info, you can copy the regions -of text showing these sample files into your own test files. This way you -can try out the examples shown in the remainder of this document. You do -this by using the command @kbd{M-x write-region} to copy text from the Info -file into a file for use with @command{awk} -(@xref{Misc File Ops, , Miscellaneous File Operations, emacs, GNU Emacs Manual}, -for more information). Using this information, create your own -@file{BBS-list} and @file{inventory-shipped} files and practice what you -learn in this @value{DOCUMENT}. - -@cindex Texinfo -If you are using the stand-alone version of Info, -see @ref{Extract Program}, -for an @command{awk} program that extracts these data files from -@file{gawk.texi}, the (generated) Texinfo source file for this Info file. -@end ifinfo +The sample files are included in the @command{gawk} distribution, +in the directory @file{awklib/eg/data}. @node Very Simple @section Some Simple Examples @@ -3136,7 +3118,7 @@ easier to maintain and usually run more efficiently. @node Invoking Gawk @chapter Running @command{awk} and @command{gawk} -This @value{CHAPTER} covers how to run awk, both POSIX-standard +This @value{CHAPTER} covers how to run @command{awk}, both POSIX-standard and @command{gawk}-specific command-line options, and what @command{awk} and @command{gawk} do with non-option arguments. @@ -3247,25 +3229,9 @@ Set the @code{FS} variable to @var{fs} Read @command{awk} program source from @var{source-file} instead of in the first non-option argument. This option may be given multiple times; the @command{awk} -program consists of the concatenation the contents of +program consists of the concatenation of the contents of each specified @var{source-file}. -@item -i @var{source-file} -@itemx --include @var{source-file} -@cindex @option{-i} option -@cindex @option{--include} option -@cindex @command{awk} programs, location of -Read @command{awk} source library from @var{source-file}. This option is -completely equivalent to using the @samp{@@include} directive inside -your program. This option is very -similar to the @option{-f} option, but there are two important differences. -First, when @option{-i} is used, the program source will not be loaded if it has -been previously loaded, whereas the @option{-f} will always load the file. -Second, because this option is intended to be used with code libraries, -@command{gawk} does not recognize such files as constituting main program -input. Thus, after processing an @option{-i} argument, @command{gawk} still expects to -find the main source code via the @option{-f} option or on the command-line. - @item -v @var{var}=@var{val} @itemx --assign @var{var}=@var{val} @cindex @option{-v} option @@ -3455,6 +3421,22 @@ for information about this option. Print a ``usage'' message summarizing the short and long style options that @command{gawk} accepts and then exit. +@item -i @var{source-file} +@itemx --include @var{source-file} +@cindex @option{-i} option +@cindex @option{--include} option +@cindex @command{awk} programs, location of +Read @command{awk} source library from @var{source-file}. This option is +completely equivalent to using the @samp{@@include} directive inside +your program. This option is very +similar to the @option{-f} option, but there are two important differences. +First, when @option{-i} is used, the program source will not be loaded if it has +been previously loaded, whereas the @option{-f} will always load the file. +Second, because this option is intended to be used with code libraries, +@command{gawk} does not recognize such files as constituting main program +input. Thus, after processing an @option{-i} argument, @command{gawk} still expects to +find the main source code via the @option{-f} option or on the command-line. + @item -l @var{lib} @itemx --load @var{lib} @cindex @code{-l} option @@ -6911,19 +6893,11 @@ will take effect. @node Constant Size @section Reading Fixed-Width Data -@ifnotinfo @quotation NOTE This @value{SECTION} discusses an advanced feature of @command{gawk}. If you are a novice @command{awk} user, you might want to skip it on the first reading. @end quotation -@end ifnotinfo - -@ifinfo -(This @value{SECTION} discusses an advanced feature of @command{awk}. -If you are a novice @command{awk} user, you might want to skip it on -the first reading.) -@end ifinfo @cindex data, fixed-width @cindex fixed-width data @@ -7053,19 +7027,11 @@ for an example of such a function). @node Splitting By Content @section Defining Fields By Content -@ifnotinfo @quotation NOTE This @value{SECTION} discusses an advanced feature of @command{gawk}. If you are a novice @command{awk} user, you might want to skip it on the first reading. @end quotation -@end ifnotinfo - -@ifinfo -(This @value{SECTION} discusses an advanced feature of @command{awk}. -If you are a novice @command{awk} user, you might want to skip it on -the first reading.) -@end ifinfo @cindex advanced features, specifying field content Normally, when using @code{FS}, @command{gawk} defines the fields as the @@ -13774,13 +13740,7 @@ 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}). -Unlike most of the variables described in this -@ifnotinfo -section, -@end ifnotinfo -@ifinfo -node, -@end ifinfo +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 @@ -23810,7 +23770,8 @@ printed and online documentation. @ifnotinfo Texinfo is fully documented in the book @cite{Texinfo---The GNU Documentation Format}, -available from the Free Software Foundation. +available from the Free Software Foundation, +and also available @uref{http://www.gnu.org/software/texinfo/manual/texinfo/, online}. @end ifnotinfo @ifinfo The Texinfo language is described fully, starting with @@ -29683,9 +29644,9 @@ certain fields in the API data structures unwritable from extension code, while allowing @command{gawk} to use them as it needs to. @item typedef enum awk_bool @{ -@item @ @ @ @ awk_false = 0, -@item @ @ @ @ awk_true -@item @} awk_bool_t; +@itemx @ @ @ @ awk_false = 0, +@itemx @ @ @ @ awk_true +@itemx @} awk_bool_t; A simple boolean type. @item typedef struct awk_string @{ @@ -36288,7 +36249,7 @@ for information on getting the latest version of @command{gawk}.) @item @ifnotinfo -Follow the @cite{GNU Coding Standards}. +Follow the @uref{http://www.gnu.org/prep/standards/, @cite{GNU Coding Standards}}. @end ifnotinfo @ifinfo See @inforef{Top, , Version, standards, GNU Coding Standards}. @@ -36447,11 +36408,9 @@ Be prepared to sign the appropriate paperwork. In order for the FSF to distribute your code, you must either place your code in the public domain and submit a signed statement to that effect, or assign the copyright in your code to the FSF. -@ifinfo Both of these actions are easy to do and @emph{many} people have done so already. If you have questions, please contact me, or @email{gnu@@gnu.org}. -@end ifinfo @item When doing a port, bear in mind that your code must coexist peacefully diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 6fdc67a3..e970d9a0 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -35,7 +35,7 @@ @c applies to and all the info about who's publishing this edition @c These apply across the board. -@set UPDATE-MONTH January, 2014 +@set UPDATE-MONTH February, 2014 @set VERSION 4.1 @set PATCHLEVEL 0 @@ -131,10 +131,7 @@ @ignore Some comments on the layout for TeX. -1. Use at least texinfo.tex 2000-09-06.09 -2. I have done A LOT of work to make this look good. There are `@page' commands - and use of `@group ... @end group' in a number of places. If you muck - with anything, it's your responsibility not to break the layout. +1. Use at least texinfo.tex 2014-01-30.15 @end ignore @c merge the function and variable indexes into the concept index @@ -2551,23 +2548,8 @@ Apr 21 70 74 514 @c endfile @end example -@ifinfo -If you are reading this in GNU Emacs using Info, you can copy the regions -of text showing these sample files into your own test files. This way you -can try out the examples shown in the remainder of this document. You do -this by using the command @kbd{M-x write-region} to copy text from the Info -file into a file for use with @command{awk} -(@xref{Misc File Ops, , Miscellaneous File Operations, emacs, GNU Emacs Manual}, -for more information). Using this information, create your own -@file{BBS-list} and @file{inventory-shipped} files and practice what you -learn in this @value{DOCUMENT}. - -@cindex Texinfo -If you are using the stand-alone version of Info, -see @ref{Extract Program}, -for an @command{awk} program that extracts these data files from -@file{gawk.texi}, the (generated) Texinfo source file for this Info file. -@end ifinfo +The sample files are included in the @command{gawk} distribution, +in the directory @file{awklib/eg/data}. @node Very Simple @section Some Simple Examples @@ -3064,7 +3046,7 @@ easier to maintain and usually run more efficiently. @node Invoking Gawk @chapter Running @command{awk} and @command{gawk} -This @value{CHAPTER} covers how to run awk, both POSIX-standard +This @value{CHAPTER} covers how to run @command{awk}, both POSIX-standard and @command{gawk}-specific command-line options, and what @command{awk} and @command{gawk} do with non-option arguments. @@ -3175,25 +3157,9 @@ Set the @code{FS} variable to @var{fs} Read @command{awk} program source from @var{source-file} instead of in the first non-option argument. This option may be given multiple times; the @command{awk} -program consists of the concatenation the contents of +program consists of the concatenation of the contents of each specified @var{source-file}. -@item -i @var{source-file} -@itemx --include @var{source-file} -@cindex @option{-i} option -@cindex @option{--include} option -@cindex @command{awk} programs, location of -Read @command{awk} source library from @var{source-file}. This option is -completely equivalent to using the @samp{@@include} directive inside -your program. This option is very -similar to the @option{-f} option, but there are two important differences. -First, when @option{-i} is used, the program source will not be loaded if it has -been previously loaded, whereas the @option{-f} will always load the file. -Second, because this option is intended to be used with code libraries, -@command{gawk} does not recognize such files as constituting main program -input. Thus, after processing an @option{-i} argument, @command{gawk} still expects to -find the main source code via the @option{-f} option or on the command-line. - @item -v @var{var}=@var{val} @itemx --assign @var{var}=@var{val} @cindex @option{-v} option @@ -3383,6 +3349,22 @@ for information about this option. Print a ``usage'' message summarizing the short and long style options that @command{gawk} accepts and then exit. +@item -i @var{source-file} +@itemx --include @var{source-file} +@cindex @option{-i} option +@cindex @option{--include} option +@cindex @command{awk} programs, location of +Read @command{awk} source library from @var{source-file}. This option is +completely equivalent to using the @samp{@@include} directive inside +your program. This option is very +similar to the @option{-f} option, but there are two important differences. +First, when @option{-i} is used, the program source will not be loaded if it has +been previously loaded, whereas the @option{-f} will always load the file. +Second, because this option is intended to be used with code libraries, +@command{gawk} does not recognize such files as constituting main program +input. Thus, after processing an @option{-i} argument, @command{gawk} still expects to +find the main source code via the @option{-f} option or on the command-line. + @item -l @var{lib} @itemx --load @var{lib} @cindex @code{-l} option @@ -6537,19 +6519,11 @@ will take effect. @node Constant Size @section Reading Fixed-Width Data -@ifnotinfo @quotation NOTE This @value{SECTION} discusses an advanced feature of @command{gawk}. If you are a novice @command{awk} user, you might want to skip it on the first reading. @end quotation -@end ifnotinfo - -@ifinfo -(This @value{SECTION} discusses an advanced feature of @command{awk}. -If you are a novice @command{awk} user, you might want to skip it on -the first reading.) -@end ifinfo @cindex data, fixed-width @cindex fixed-width data @@ -6679,19 +6653,11 @@ for an example of such a function). @node Splitting By Content @section Defining Fields By Content -@ifnotinfo @quotation NOTE This @value{SECTION} discusses an advanced feature of @command{gawk}. If you are a novice @command{awk} user, you might want to skip it on the first reading. @end quotation -@end ifnotinfo - -@ifinfo -(This @value{SECTION} discusses an advanced feature of @command{awk}. -If you are a novice @command{awk} user, you might want to skip it on -the first reading.) -@end ifinfo @cindex advanced features, specifying field content Normally, when using @code{FS}, @command{gawk} defines the fields as the @@ -13159,13 +13125,7 @@ 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}). -Unlike most of the variables described in this -@ifnotinfo -section, -@end ifnotinfo -@ifinfo -node, -@end ifinfo +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 @@ -22959,7 +22919,8 @@ printed and online documentation. @ifnotinfo Texinfo is fully documented in the book @cite{Texinfo---The GNU Documentation Format}, -available from the Free Software Foundation. +available from the Free Software Foundation, +and also available @uref{http://www.gnu.org/software/texinfo/manual/texinfo/, online}. @end ifnotinfo @ifinfo The Texinfo language is described fully, starting with @@ -28832,9 +28793,9 @@ certain fields in the API data structures unwritable from extension code, while allowing @command{gawk} to use them as it needs to. @item typedef enum awk_bool @{ -@item @ @ @ @ awk_false = 0, -@item @ @ @ @ awk_true -@item @} awk_bool_t; +@itemx @ @ @ @ awk_false = 0, +@itemx @ @ @ @ awk_true +@itemx @} awk_bool_t; A simple boolean type. @item typedef struct awk_string @{ @@ -35437,7 +35398,7 @@ for information on getting the latest version of @command{gawk}.) @item @ifnotinfo -Follow the @cite{GNU Coding Standards}. +Follow the @uref{http://www.gnu.org/prep/standards/, @cite{GNU Coding Standards}}. @end ifnotinfo @ifinfo See @inforef{Top, , Version, standards, GNU Coding Standards}. @@ -35596,11 +35557,9 @@ Be prepared to sign the appropriate paperwork. In order for the FSF to distribute your code, you must either place your code in the public domain and submit a signed statement to that effect, or assign the copyright in your code to the FSF. -@ifinfo Both of these actions are easy to do and @emph{many} people have done so already. If you have questions, please contact me, or @email{gnu@@gnu.org}. -@end ifinfo @item When doing a port, bear in mind that your code must coexist peacefully -- cgit v1.2.3 From 4311907208592a2c617251a5cd3792d97f94be6a Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 14 Feb 2014 13:21:41 +0200 Subject: Doc updates. --- doc/ChangeLog | 4 + doc/gawk.info | 921 ++++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 134 +++++---- doc/gawktexi.in | 124 ++++---- 4 files changed, 605 insertions(+), 578 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 94e8b306..17b4b291 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-02-14 Arnold D. Robbins + + * gawktexi.in: Lots of small edits. + 2014-02-07 Arnold D. Robbins * gawktexi.in: More minor fixes, update UPDATE_MONTH. diff --git a/doc/gawk.info b/doc/gawk.info index 6523199c..351d0d44 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -4083,18 +4083,23 @@ use for `RS' in this case: BEGIN { RS = "\0" } # whole file becomes one record? `gawk' in fact accepts this, and uses the NUL character for the -record separator. However, this usage is _not_ portable to other `awk' -implementations. +record separator. However, this usage is _not_ portable to most other +`awk' implementations. - All other `awk' implementations(1) store strings internally as -C-style strings. C strings use the NUL character as the string + Almost all other `awk' implementations(1) store strings internally +as C-style strings. C strings use the NUL character as the string terminator. In effect, this means that `RS = "\0"' is the same as `RS = ""'. (d.c.) + It happens that recent versions of `mawk' can use the NUL character +as a record separator. However, this is a special case: `mawk' does not +allow embedded NUL characters in strings. + The best way to treat a whole file as a single record is to simply read the file in, one record at a time, concatenating each record onto the end of the previous ones. + ---------- Footnotes ---------- (1) At least that we know about. @@ -7171,7 +7176,7 @@ decimal point when reading the `awk' program source code, and for command-line variable assignments (*note Other Arguments::). However, when interpreting input data, for `print' and `printf' output, and for number to string conversion, the local decimal point character is used. -(d.c.). Here are some examples indicating the difference in behavior, +(d.c.) Here are some examples indicating the difference in behavior, on a GNU/Linux system: $ export POSIXLY_CORRECT=1 Force POSIX behavior @@ -31141,7 +31146,7 @@ Index * files, /inet/... (gawk): TCP/IP Networking. (line 6) * files, /inet4/... (gawk): TCP/IP Networking. (line 6) * files, /inet6/... (gawk): TCP/IP Networking. (line 6) -* files, as single records: Records. (line 200) +* files, as single records: Records. (line 204) * files, awk programs in: Long. (line 6) * files, awkprof.out: Profiling. (line 6) * files, awkvars.out: Options. (line 93) @@ -32151,7 +32156,7 @@ Index * records, printing: Print. (line 22) * records, splitting input into: Records. (line 6) * records, terminating: Records. (line 117) -* records, treating files as: Records. (line 200) +* records, treating files as: Records. (line 204) * recursive functions: Definition Syntax. (line 73) * redirection of input: Getline/File. (line 6) * redirection of output: Redirection. (line 6) @@ -32802,456 +32807,456 @@ Node: Leftmost Longest171273 Node: Computed Regexps172474 Node: Reading Files175811 Node: Records177813 -Ref: Records-Footnote-1186702 -Node: Fields186739 -Ref: Fields-Footnote-1189772 -Node: Nonconstant Fields189858 -Node: Changing Fields192060 -Node: Field Separators198019 -Node: Default Field Splitting200721 -Node: Regexp Field Splitting201838 -Node: Single Character Fields205180 -Node: Command Line Field Separator206239 -Node: Full Line Fields209673 -Ref: Full Line Fields-Footnote-1210181 -Node: Field Splitting Summary210227 -Ref: Field Splitting Summary-Footnote-1213326 -Node: Constant Size213427 -Node: Splitting By Content218034 -Ref: Splitting By Content-Footnote-1221783 -Node: Multiple Line221823 -Ref: Multiple Line-Footnote-1227670 -Node: Getline227849 -Node: Plain Getline230065 -Node: Getline/Variable232160 -Node: Getline/File233307 -Node: Getline/Variable/File234648 -Ref: Getline/Variable/File-Footnote-1236247 -Node: Getline/Pipe236334 -Node: Getline/Variable/Pipe239033 -Node: Getline/Coprocess240140 -Node: Getline/Variable/Coprocess241392 -Node: Getline Notes242129 -Node: Getline Summary244916 -Ref: table-getline-variants245324 -Node: Read Timeout246236 -Ref: Read Timeout-Footnote-1249977 -Node: Command line directories250034 -Node: Printing250664 -Node: Print252295 -Node: Print Examples253632 -Node: Output Separators256416 -Node: OFMT258176 -Node: Printf259534 -Node: Basic Printf260440 -Node: Control Letters261979 -Node: Format Modifiers265791 -Node: Printf Examples271800 -Node: Redirection274515 -Node: Special Files281480 -Node: Special FD282013 -Ref: Special FD-Footnote-1285638 -Node: Special Network285712 -Node: Special Caveats286562 -Node: Close Files And Pipes287358 -Ref: Close Files And Pipes-Footnote-1294341 -Ref: Close Files And Pipes-Footnote-2294489 -Node: Expressions294639 -Node: Values295771 -Node: Constants296447 -Node: Scalar Constants297127 -Ref: Scalar Constants-Footnote-1297986 -Node: Nondecimal-numbers298168 -Node: Regexp Constants301168 -Node: Using Constant Regexps301643 -Node: Variables304698 -Node: Using Variables305353 -Node: Assignment Options307077 -Node: Conversion308949 -Ref: table-locale-affects314450 -Ref: Conversion-Footnote-1315074 -Node: All Operators315183 -Node: Arithmetic Ops315813 -Node: Concatenation318318 -Ref: Concatenation-Footnote-1321110 -Node: Assignment Ops321230 -Ref: table-assign-ops326218 -Node: Increment Ops327549 -Node: Truth Values and Conditions330983 -Node: Truth Values332066 -Node: Typing and Comparison333115 -Node: Variable Typing333908 -Ref: Variable Typing-Footnote-1337805 -Node: Comparison Operators337927 -Ref: table-relational-ops338337 -Node: POSIX String Comparison341885 -Ref: POSIX String Comparison-Footnote-1342841 -Node: Boolean Ops342979 -Ref: Boolean Ops-Footnote-1347057 -Node: Conditional Exp347148 -Node: Function Calls348880 -Node: Precedence352474 -Node: Locales356143 -Node: Patterns and Actions357232 -Node: Pattern Overview358286 -Node: Regexp Patterns359955 -Node: Expression Patterns360498 -Node: Ranges364183 -Node: BEGIN/END367149 -Node: Using BEGIN/END367911 -Ref: Using BEGIN/END-Footnote-1370642 -Node: I/O And BEGIN/END370748 -Node: BEGINFILE/ENDFILE373030 -Node: Empty375944 -Node: Using Shell Variables376260 -Node: Action Overview378545 -Node: Statements380902 -Node: If Statement382756 -Node: While Statement384255 -Node: Do Statement386299 -Node: For Statement387455 -Node: Switch Statement390607 -Node: Break Statement392704 -Node: Continue Statement394694 -Node: Next Statement396487 -Node: Nextfile Statement398877 -Node: Exit Statement401520 -Node: Built-in Variables403936 -Node: User-modified405031 -Ref: User-modified-Footnote-1413389 -Node: Auto-set413451 -Ref: Auto-set-Footnote-1426529 -Ref: Auto-set-Footnote-2426734 -Node: ARGC and ARGV426790 -Node: Arrays430641 -Node: Array Basics432146 -Node: Array Intro432972 -Node: Reference to Elements437289 -Node: Assigning Elements439559 -Node: Array Example440050 -Node: Scanning an Array441782 -Node: Controlling Scanning444096 -Ref: Controlling Scanning-Footnote-1449183 -Node: Delete449499 -Ref: Delete-Footnote-1452264 -Node: Numeric Array Subscripts452321 -Node: Uninitialized Subscripts454504 -Node: Multidimensional456131 -Node: Multiscanning459224 -Node: Arrays of Arrays460813 -Node: Functions465453 -Node: Built-in466272 -Node: Calling Built-in467350 -Node: Numeric Functions469338 -Ref: Numeric Functions-Footnote-1473170 -Ref: Numeric Functions-Footnote-2473527 -Ref: Numeric Functions-Footnote-3473575 -Node: String Functions473844 -Ref: String Functions-Footnote-1496764 -Ref: String Functions-Footnote-2496893 -Ref: String Functions-Footnote-3497141 -Node: Gory Details497228 -Ref: table-sub-escapes498907 -Ref: table-sub-posix-92500261 -Ref: table-sub-proposed501612 -Ref: table-posix-sub502966 -Ref: table-gensub-escapes504511 -Ref: Gory Details-Footnote-1505687 -Ref: Gory Details-Footnote-2505738 -Node: I/O Functions505889 -Ref: I/O Functions-Footnote-1512874 -Node: Time Functions513021 -Ref: Time Functions-Footnote-1523954 -Ref: Time Functions-Footnote-2524022 -Ref: Time Functions-Footnote-3524180 -Ref: Time Functions-Footnote-4524291 -Ref: Time Functions-Footnote-5524403 -Ref: Time Functions-Footnote-6524630 -Node: Bitwise Functions524896 -Ref: table-bitwise-ops525458 -Ref: Bitwise Functions-Footnote-1529679 -Node: Type Functions529863 -Node: I18N Functions531014 -Node: User-defined532641 -Node: Definition Syntax533445 -Ref: Definition Syntax-Footnote-1538355 -Node: Function Example538424 -Node: Function Caveats541018 -Node: Calling A Function541439 -Node: Variable Scope542554 -Node: Pass By Value/Reference545517 -Node: Return Statement549025 -Node: Dynamic Typing552006 -Node: Indirect Calls552937 -Node: Library Functions562622 -Ref: Library Functions-Footnote-1566135 -Ref: Library Functions-Footnote-2566278 -Node: Library Names566449 -Ref: Library Names-Footnote-1569920 -Ref: Library Names-Footnote-2570140 -Node: General Functions570226 -Node: Strtonum Function571254 -Node: Assert Function574184 -Node: Round Function577510 -Node: Cliff Random Function579053 -Node: Ordinal Functions580069 -Ref: Ordinal Functions-Footnote-1583141 -Ref: Ordinal Functions-Footnote-2583393 -Node: Join Function583602 -Ref: Join Function-Footnote-1585373 -Node: Getlocaltime Function585573 -Node: Readfile Function589314 -Node: Data File Management591153 -Node: Filetrans Function591785 -Node: Rewind Function595854 -Node: File Checking597241 -Node: Empty Files598335 -Node: Ignoring Assigns600565 -Node: Getopt Function602118 -Ref: Getopt Function-Footnote-1613421 -Node: Passwd Functions613624 -Ref: Passwd Functions-Footnote-1622599 -Node: Group Functions622687 -Node: Walking Arrays630771 -Node: Sample Programs632908 -Node: Running Examples633582 -Node: Clones634310 -Node: Cut Program635534 -Node: Egrep Program645379 -Ref: Egrep Program-Footnote-1653152 -Node: Id Program653262 -Node: Split Program656878 -Ref: Split Program-Footnote-1660397 -Node: Tee Program660525 -Node: Uniq Program663328 -Node: Wc Program670757 -Ref: Wc Program-Footnote-1675023 -Ref: Wc Program-Footnote-2675223 -Node: Miscellaneous Programs675315 -Node: Dupword Program676503 -Node: Alarm Program678534 -Node: Translate Program683287 -Ref: Translate Program-Footnote-1687674 -Ref: Translate Program-Footnote-2687922 -Node: Labels Program688056 -Ref: Labels Program-Footnote-1691427 -Node: Word Sorting691511 -Node: History Sorting695395 -Node: Extract Program697234 -Ref: Extract Program-Footnote-1704737 -Node: Simple Sed704865 -Node: Igawk Program707927 -Ref: Igawk Program-Footnote-1723084 -Ref: Igawk Program-Footnote-2723285 -Node: Anagram Program723423 -Node: Signature Program726491 -Node: Advanced Features727591 -Node: Nondecimal Data729477 -Node: Array Sorting731060 -Node: Controlling Array Traversal731757 -Node: Array Sorting Functions740041 -Ref: Array Sorting Functions-Footnote-1743910 -Node: Two-way I/O744104 -Ref: Two-way I/O-Footnote-1749536 -Node: TCP/IP Networking749606 -Node: Profiling752450 -Node: Internationalization759947 -Node: I18N and L10N761372 -Node: Explaining gettext762058 -Ref: Explaining gettext-Footnote-1767126 -Ref: Explaining gettext-Footnote-2767310 -Node: Programmer i18n767475 -Node: Translator i18n771677 -Node: String Extraction772470 -Ref: String Extraction-Footnote-1773431 -Node: Printf Ordering773517 -Ref: Printf Ordering-Footnote-1776301 -Node: I18N Portability776365 -Ref: I18N Portability-Footnote-1778814 -Node: I18N Example778877 -Ref: I18N Example-Footnote-1781515 -Node: Gawk I18N781587 -Node: Debugger782208 -Node: Debugging783179 -Node: Debugging Concepts783612 -Node: Debugging Terms785468 -Node: Awk Debugging788065 -Node: Sample Debugging Session788957 -Node: Debugger Invocation789477 -Node: Finding The Bug790809 -Node: List of Debugger Commands797297 -Node: Breakpoint Control798631 -Node: Debugger Execution Control802295 -Node: Viewing And Changing Data805655 -Node: Execution Stack809011 -Node: Debugger Info810478 -Node: Miscellaneous Debugger Commands814460 -Node: Readline Support819636 -Node: Limitations820467 -Node: Arbitrary Precision Arithmetic822719 -Ref: Arbitrary Precision Arithmetic-Footnote-1824368 -Node: General Arithmetic824516 -Node: Floating Point Issues826236 -Node: String Conversion Precision827117 -Ref: String Conversion Precision-Footnote-1828822 -Node: Unexpected Results828931 -Node: POSIX Floating Point Problems831084 -Ref: POSIX Floating Point Problems-Footnote-1834909 -Node: Integer Programming834947 -Node: Floating-point Programming836686 -Ref: Floating-point Programming-Footnote-1843017 -Ref: Floating-point Programming-Footnote-2843287 -Node: Floating-point Representation843551 -Node: Floating-point Context844716 -Ref: table-ieee-formats845555 -Node: Rounding Mode846939 -Ref: table-rounding-modes847418 -Ref: Rounding Mode-Footnote-1850433 -Node: Gawk and MPFR850612 -Node: Arbitrary Precision Floats851867 -Ref: Arbitrary Precision Floats-Footnote-1854310 -Node: Setting Precision854626 -Ref: table-predefined-precision-strings855312 -Node: Setting Rounding Mode857457 -Ref: table-gawk-rounding-modes857861 -Node: Floating-point Constants859048 -Node: Changing Precision860477 -Ref: Changing Precision-Footnote-1861874 -Node: Exact Arithmetic862048 -Node: Arbitrary Precision Integers865186 -Ref: Arbitrary Precision Integers-Footnote-1868204 -Node: Dynamic Extensions868351 -Node: Extension Intro869809 -Node: Plugin License871074 -Node: Extension Mechanism Outline871759 -Ref: load-extension872176 -Ref: load-new-function873654 -Ref: call-new-function874649 -Node: Extension API Description876664 -Node: Extension API Functions Introduction877877 -Node: General Data Types882743 -Ref: General Data Types-Footnote-1888345 -Node: Requesting Values888644 -Ref: table-value-types-returned889375 -Node: Constructor Functions890329 -Node: Registration Functions893349 -Node: Extension Functions894034 -Node: Exit Callback Functions896259 -Node: Extension Version String897508 -Node: Input Parsers898158 -Node: Output Wrappers907915 -Node: Two-way processors912425 -Node: Printing Messages914633 -Ref: Printing Messages-Footnote-1915710 -Node: Updating `ERRNO'915862 -Node: Accessing Parameters916601 -Node: Symbol Table Access917831 -Node: Symbol table by name918343 -Node: Symbol table by cookie920090 -Ref: Symbol table by cookie-Footnote-1924220 -Node: Cached values924283 -Ref: Cached values-Footnote-1927732 -Node: Array Manipulation927823 -Ref: Array Manipulation-Footnote-1928921 -Node: Array Data Types928960 -Ref: Array Data Types-Footnote-1931663 -Node: Array Functions931755 -Node: Flattening Arrays935521 -Node: Creating Arrays942373 -Node: Extension API Variables947098 -Node: Extension Versioning947734 -Node: Extension API Informational Variables949635 -Node: Extension API Boilerplate950721 -Node: Finding Extensions954525 -Node: Extension Example955085 -Node: Internal File Description955815 -Node: Internal File Ops959906 -Ref: Internal File Ops-Footnote-1971414 -Node: Using Internal File Ops971554 -Ref: Using Internal File Ops-Footnote-1973907 -Node: Extension Samples974173 -Node: Extension Sample File Functions975697 -Node: Extension Sample Fnmatch984182 -Node: Extension Sample Fork985908 -Node: Extension Sample Inplace987126 -Node: Extension Sample Ord988904 -Node: Extension Sample Readdir989740 -Node: Extension Sample Revout991272 -Node: Extension Sample Rev2way991865 -Node: Extension Sample Read write array992555 -Node: Extension Sample Readfile994438 -Node: Extension Sample API Tests995256 -Node: Extension Sample Time995781 -Node: gawkextlib997145 -Node: Language History999926 -Node: V7/SVR3.11001519 -Node: SVR41003839 -Node: POSIX1005281 -Node: BTL1006667 -Node: POSIX/GNU1007401 -Node: Feature History1013000 -Node: Common Extensions1025964 -Node: Ranges and Locales1027276 -Ref: Ranges and Locales-Footnote-11031894 -Ref: Ranges and Locales-Footnote-21031921 -Ref: Ranges and Locales-Footnote-31032181 -Node: Contributors1032402 -Node: Installation1037547 -Node: Gawk Distribution1038441 -Node: Getting1038925 -Node: Extracting1039751 -Node: Distribution contents1041443 -Node: Unix Installation1047148 -Node: Quick Installation1047765 -Node: Additional Configuration Options1050209 -Node: Configuration Philosophy1051945 -Node: Non-Unix Installation1054299 -Node: PC Installation1054757 -Node: PC Binary Installation1056056 -Node: PC Compiling1057904 -Node: PC Testing1060848 -Node: PC Using1062024 -Node: Cygwin1066209 -Node: MSYS1067209 -Node: VMS Installation1067723 -Node: VMS Compilation1068487 -Ref: VMS Compilation-Footnote-11070102 -Node: VMS Dynamic Extensions1070160 -Node: VMS Installation Details1071533 -Node: VMS Running1073780 -Node: VMS GNV1076614 -Node: VMS Old Gawk1077337 -Node: Bugs1077807 -Node: Other Versions1081725 -Node: Notes1087809 -Node: Compatibility Mode1088609 -Node: Additions1089392 -Node: Accessing The Source1090319 -Node: Adding Code1091759 -Node: New Ports1097804 -Node: Derived Files1101939 -Ref: Derived Files-Footnote-11107260 -Ref: Derived Files-Footnote-21107294 -Ref: Derived Files-Footnote-31107894 -Node: Future Extensions1107992 -Node: Implementation Limitations1108575 -Node: Extension Design1109827 -Node: Old Extension Problems1110981 -Ref: Old Extension Problems-Footnote-11112489 -Node: Extension New Mechanism Goals1112546 -Ref: Extension New Mechanism Goals-Footnote-11115911 -Node: Extension Other Design Decisions1116097 -Node: Extension Future Growth1118203 -Node: Old Extension Mechanism1119039 -Node: Basic Concepts1120779 -Node: Basic High Level1121460 -Ref: figure-general-flow1121731 -Ref: figure-process-flow1122330 -Ref: Basic High Level-Footnote-11125559 -Node: Basic Data Typing1125744 -Node: Glossary1129099 -Node: Copying1154561 -Node: GNU Free Documentation License1192118 -Node: Index1217255 +Ref: Records-Footnote-1186901 +Node: Fields186938 +Ref: Fields-Footnote-1189971 +Node: Nonconstant Fields190057 +Node: Changing Fields192259 +Node: Field Separators198218 +Node: Default Field Splitting200920 +Node: Regexp Field Splitting202037 +Node: Single Character Fields205379 +Node: Command Line Field Separator206438 +Node: Full Line Fields209872 +Ref: Full Line Fields-Footnote-1210380 +Node: Field Splitting Summary210426 +Ref: Field Splitting Summary-Footnote-1213525 +Node: Constant Size213626 +Node: Splitting By Content218233 +Ref: Splitting By Content-Footnote-1221982 +Node: Multiple Line222022 +Ref: Multiple Line-Footnote-1227869 +Node: Getline228048 +Node: Plain Getline230264 +Node: Getline/Variable232359 +Node: Getline/File233506 +Node: Getline/Variable/File234847 +Ref: Getline/Variable/File-Footnote-1236446 +Node: Getline/Pipe236533 +Node: Getline/Variable/Pipe239232 +Node: Getline/Coprocess240339 +Node: Getline/Variable/Coprocess241591 +Node: Getline Notes242328 +Node: Getline Summary245115 +Ref: table-getline-variants245523 +Node: Read Timeout246435 +Ref: Read Timeout-Footnote-1250176 +Node: Command line directories250233 +Node: Printing250863 +Node: Print252494 +Node: Print Examples253831 +Node: Output Separators256615 +Node: OFMT258375 +Node: Printf259733 +Node: Basic Printf260639 +Node: Control Letters262178 +Node: Format Modifiers265990 +Node: Printf Examples271999 +Node: Redirection274714 +Node: Special Files281679 +Node: Special FD282212 +Ref: Special FD-Footnote-1285837 +Node: Special Network285911 +Node: Special Caveats286761 +Node: Close Files And Pipes287557 +Ref: Close Files And Pipes-Footnote-1294540 +Ref: Close Files And Pipes-Footnote-2294688 +Node: Expressions294838 +Node: Values295970 +Node: Constants296646 +Node: Scalar Constants297326 +Ref: Scalar Constants-Footnote-1298185 +Node: Nondecimal-numbers298367 +Node: Regexp Constants301367 +Node: Using Constant Regexps301842 +Node: Variables304897 +Node: Using Variables305552 +Node: Assignment Options307276 +Node: Conversion309148 +Ref: table-locale-affects314648 +Ref: Conversion-Footnote-1315272 +Node: All Operators315381 +Node: Arithmetic Ops316011 +Node: Concatenation318516 +Ref: Concatenation-Footnote-1321308 +Node: Assignment Ops321428 +Ref: table-assign-ops326416 +Node: Increment Ops327747 +Node: Truth Values and Conditions331181 +Node: Truth Values332264 +Node: Typing and Comparison333313 +Node: Variable Typing334106 +Ref: Variable Typing-Footnote-1338003 +Node: Comparison Operators338125 +Ref: table-relational-ops338535 +Node: POSIX String Comparison342083 +Ref: POSIX String Comparison-Footnote-1343039 +Node: Boolean Ops343177 +Ref: Boolean Ops-Footnote-1347255 +Node: Conditional Exp347346 +Node: Function Calls349078 +Node: Precedence352672 +Node: Locales356341 +Node: Patterns and Actions357430 +Node: Pattern Overview358484 +Node: Regexp Patterns360153 +Node: Expression Patterns360696 +Node: Ranges364381 +Node: BEGIN/END367347 +Node: Using BEGIN/END368109 +Ref: Using BEGIN/END-Footnote-1370840 +Node: I/O And BEGIN/END370946 +Node: BEGINFILE/ENDFILE373228 +Node: Empty376142 +Node: Using Shell Variables376458 +Node: Action Overview378743 +Node: Statements381100 +Node: If Statement382954 +Node: While Statement384453 +Node: Do Statement386497 +Node: For Statement387653 +Node: Switch Statement390805 +Node: Break Statement392902 +Node: Continue Statement394892 +Node: Next Statement396685 +Node: Nextfile Statement399075 +Node: Exit Statement401718 +Node: Built-in Variables404134 +Node: User-modified405229 +Ref: User-modified-Footnote-1413587 +Node: Auto-set413649 +Ref: Auto-set-Footnote-1426727 +Ref: Auto-set-Footnote-2426932 +Node: ARGC and ARGV426988 +Node: Arrays430839 +Node: Array Basics432344 +Node: Array Intro433170 +Node: Reference to Elements437487 +Node: Assigning Elements439757 +Node: Array Example440248 +Node: Scanning an Array441980 +Node: Controlling Scanning444294 +Ref: Controlling Scanning-Footnote-1449381 +Node: Delete449697 +Ref: Delete-Footnote-1452462 +Node: Numeric Array Subscripts452519 +Node: Uninitialized Subscripts454702 +Node: Multidimensional456329 +Node: Multiscanning459422 +Node: Arrays of Arrays461011 +Node: Functions465651 +Node: Built-in466470 +Node: Calling Built-in467548 +Node: Numeric Functions469536 +Ref: Numeric Functions-Footnote-1473368 +Ref: Numeric Functions-Footnote-2473725 +Ref: Numeric Functions-Footnote-3473773 +Node: String Functions474042 +Ref: String Functions-Footnote-1496962 +Ref: String Functions-Footnote-2497091 +Ref: String Functions-Footnote-3497339 +Node: Gory Details497426 +Ref: table-sub-escapes499105 +Ref: table-sub-posix-92500459 +Ref: table-sub-proposed501810 +Ref: table-posix-sub503164 +Ref: table-gensub-escapes504709 +Ref: Gory Details-Footnote-1505885 +Ref: Gory Details-Footnote-2505936 +Node: I/O Functions506087 +Ref: I/O Functions-Footnote-1513072 +Node: Time Functions513219 +Ref: Time Functions-Footnote-1524152 +Ref: Time Functions-Footnote-2524220 +Ref: Time Functions-Footnote-3524378 +Ref: Time Functions-Footnote-4524489 +Ref: Time Functions-Footnote-5524601 +Ref: Time Functions-Footnote-6524828 +Node: Bitwise Functions525094 +Ref: table-bitwise-ops525656 +Ref: Bitwise Functions-Footnote-1529877 +Node: Type Functions530061 +Node: I18N Functions531212 +Node: User-defined532839 +Node: Definition Syntax533643 +Ref: Definition Syntax-Footnote-1538553 +Node: Function Example538622 +Node: Function Caveats541216 +Node: Calling A Function541637 +Node: Variable Scope542752 +Node: Pass By Value/Reference545715 +Node: Return Statement549223 +Node: Dynamic Typing552204 +Node: Indirect Calls553135 +Node: Library Functions562820 +Ref: Library Functions-Footnote-1566333 +Ref: Library Functions-Footnote-2566476 +Node: Library Names566647 +Ref: Library Names-Footnote-1570118 +Ref: Library Names-Footnote-2570338 +Node: General Functions570424 +Node: Strtonum Function571452 +Node: Assert Function574382 +Node: Round Function577708 +Node: Cliff Random Function579251 +Node: Ordinal Functions580267 +Ref: Ordinal Functions-Footnote-1583339 +Ref: Ordinal Functions-Footnote-2583591 +Node: Join Function583800 +Ref: Join Function-Footnote-1585571 +Node: Getlocaltime Function585771 +Node: Readfile Function589512 +Node: Data File Management591351 +Node: Filetrans Function591983 +Node: Rewind Function596052 +Node: File Checking597439 +Node: Empty Files598533 +Node: Ignoring Assigns600763 +Node: Getopt Function602316 +Ref: Getopt Function-Footnote-1613619 +Node: Passwd Functions613822 +Ref: Passwd Functions-Footnote-1622797 +Node: Group Functions622885 +Node: Walking Arrays630969 +Node: Sample Programs633106 +Node: Running Examples633780 +Node: Clones634508 +Node: Cut Program635732 +Node: Egrep Program645577 +Ref: Egrep Program-Footnote-1653350 +Node: Id Program653460 +Node: Split Program657076 +Ref: Split Program-Footnote-1660595 +Node: Tee Program660723 +Node: Uniq Program663526 +Node: Wc Program670955 +Ref: Wc Program-Footnote-1675221 +Ref: Wc Program-Footnote-2675421 +Node: Miscellaneous Programs675513 +Node: Dupword Program676701 +Node: Alarm Program678732 +Node: Translate Program683485 +Ref: Translate Program-Footnote-1687872 +Ref: Translate Program-Footnote-2688120 +Node: Labels Program688254 +Ref: Labels Program-Footnote-1691625 +Node: Word Sorting691709 +Node: History Sorting695593 +Node: Extract Program697432 +Ref: Extract Program-Footnote-1704935 +Node: Simple Sed705063 +Node: Igawk Program708125 +Ref: Igawk Program-Footnote-1723282 +Ref: Igawk Program-Footnote-2723483 +Node: Anagram Program723621 +Node: Signature Program726689 +Node: Advanced Features727789 +Node: Nondecimal Data729675 +Node: Array Sorting731258 +Node: Controlling Array Traversal731955 +Node: Array Sorting Functions740239 +Ref: Array Sorting Functions-Footnote-1744108 +Node: Two-way I/O744302 +Ref: Two-way I/O-Footnote-1749734 +Node: TCP/IP Networking749804 +Node: Profiling752648 +Node: Internationalization760145 +Node: I18N and L10N761570 +Node: Explaining gettext762256 +Ref: Explaining gettext-Footnote-1767324 +Ref: Explaining gettext-Footnote-2767508 +Node: Programmer i18n767673 +Node: Translator i18n771875 +Node: String Extraction772668 +Ref: String Extraction-Footnote-1773629 +Node: Printf Ordering773715 +Ref: Printf Ordering-Footnote-1776499 +Node: I18N Portability776563 +Ref: I18N Portability-Footnote-1779012 +Node: I18N Example779075 +Ref: I18N Example-Footnote-1781713 +Node: Gawk I18N781785 +Node: Debugger782406 +Node: Debugging783377 +Node: Debugging Concepts783810 +Node: Debugging Terms785666 +Node: Awk Debugging788263 +Node: Sample Debugging Session789155 +Node: Debugger Invocation789675 +Node: Finding The Bug791007 +Node: List of Debugger Commands797495 +Node: Breakpoint Control798829 +Node: Debugger Execution Control802493 +Node: Viewing And Changing Data805853 +Node: Execution Stack809209 +Node: Debugger Info810676 +Node: Miscellaneous Debugger Commands814658 +Node: Readline Support819834 +Node: Limitations820665 +Node: Arbitrary Precision Arithmetic822917 +Ref: Arbitrary Precision Arithmetic-Footnote-1824566 +Node: General Arithmetic824714 +Node: Floating Point Issues826434 +Node: String Conversion Precision827315 +Ref: String Conversion Precision-Footnote-1829020 +Node: Unexpected Results829129 +Node: POSIX Floating Point Problems831282 +Ref: POSIX Floating Point Problems-Footnote-1835107 +Node: Integer Programming835145 +Node: Floating-point Programming836884 +Ref: Floating-point Programming-Footnote-1843215 +Ref: Floating-point Programming-Footnote-2843485 +Node: Floating-point Representation843749 +Node: Floating-point Context844914 +Ref: table-ieee-formats845753 +Node: Rounding Mode847137 +Ref: table-rounding-modes847616 +Ref: Rounding Mode-Footnote-1850631 +Node: Gawk and MPFR850810 +Node: Arbitrary Precision Floats852065 +Ref: Arbitrary Precision Floats-Footnote-1854508 +Node: Setting Precision854824 +Ref: table-predefined-precision-strings855510 +Node: Setting Rounding Mode857655 +Ref: table-gawk-rounding-modes858059 +Node: Floating-point Constants859246 +Node: Changing Precision860675 +Ref: Changing Precision-Footnote-1862072 +Node: Exact Arithmetic862246 +Node: Arbitrary Precision Integers865384 +Ref: Arbitrary Precision Integers-Footnote-1868402 +Node: Dynamic Extensions868549 +Node: Extension Intro870007 +Node: Plugin License871272 +Node: Extension Mechanism Outline871957 +Ref: load-extension872374 +Ref: load-new-function873852 +Ref: call-new-function874847 +Node: Extension API Description876862 +Node: Extension API Functions Introduction878075 +Node: General Data Types882941 +Ref: General Data Types-Footnote-1888543 +Node: Requesting Values888842 +Ref: table-value-types-returned889573 +Node: Constructor Functions890527 +Node: Registration Functions893547 +Node: Extension Functions894232 +Node: Exit Callback Functions896457 +Node: Extension Version String897706 +Node: Input Parsers898356 +Node: Output Wrappers908113 +Node: Two-way processors912623 +Node: Printing Messages914831 +Ref: Printing Messages-Footnote-1915908 +Node: Updating `ERRNO'916060 +Node: Accessing Parameters916799 +Node: Symbol Table Access918029 +Node: Symbol table by name918541 +Node: Symbol table by cookie920288 +Ref: Symbol table by cookie-Footnote-1924418 +Node: Cached values924481 +Ref: Cached values-Footnote-1927930 +Node: Array Manipulation928021 +Ref: Array Manipulation-Footnote-1929119 +Node: Array Data Types929158 +Ref: Array Data Types-Footnote-1931861 +Node: Array Functions931953 +Node: Flattening Arrays935719 +Node: Creating Arrays942571 +Node: Extension API Variables947296 +Node: Extension Versioning947932 +Node: Extension API Informational Variables949833 +Node: Extension API Boilerplate950919 +Node: Finding Extensions954723 +Node: Extension Example955283 +Node: Internal File Description956013 +Node: Internal File Ops960104 +Ref: Internal File Ops-Footnote-1971612 +Node: Using Internal File Ops971752 +Ref: Using Internal File Ops-Footnote-1974105 +Node: Extension Samples974371 +Node: Extension Sample File Functions975895 +Node: Extension Sample Fnmatch984380 +Node: Extension Sample Fork986106 +Node: Extension Sample Inplace987324 +Node: Extension Sample Ord989102 +Node: Extension Sample Readdir989938 +Node: Extension Sample Revout991470 +Node: Extension Sample Rev2way992063 +Node: Extension Sample Read write array992753 +Node: Extension Sample Readfile994636 +Node: Extension Sample API Tests995454 +Node: Extension Sample Time995979 +Node: gawkextlib997343 +Node: Language History1000124 +Node: V7/SVR3.11001717 +Node: SVR41004037 +Node: POSIX1005479 +Node: BTL1006865 +Node: POSIX/GNU1007599 +Node: Feature History1013198 +Node: Common Extensions1026162 +Node: Ranges and Locales1027474 +Ref: Ranges and Locales-Footnote-11032092 +Ref: Ranges and Locales-Footnote-21032119 +Ref: Ranges and Locales-Footnote-31032379 +Node: Contributors1032600 +Node: Installation1037745 +Node: Gawk Distribution1038639 +Node: Getting1039123 +Node: Extracting1039949 +Node: Distribution contents1041641 +Node: Unix Installation1047346 +Node: Quick Installation1047963 +Node: Additional Configuration Options1050407 +Node: Configuration Philosophy1052143 +Node: Non-Unix Installation1054497 +Node: PC Installation1054955 +Node: PC Binary Installation1056254 +Node: PC Compiling1058102 +Node: PC Testing1061046 +Node: PC Using1062222 +Node: Cygwin1066407 +Node: MSYS1067407 +Node: VMS Installation1067921 +Node: VMS Compilation1068685 +Ref: VMS Compilation-Footnote-11070300 +Node: VMS Dynamic Extensions1070358 +Node: VMS Installation Details1071731 +Node: VMS Running1073978 +Node: VMS GNV1076812 +Node: VMS Old Gawk1077535 +Node: Bugs1078005 +Node: Other Versions1081923 +Node: Notes1088007 +Node: Compatibility Mode1088807 +Node: Additions1089590 +Node: Accessing The Source1090517 +Node: Adding Code1091957 +Node: New Ports1098002 +Node: Derived Files1102137 +Ref: Derived Files-Footnote-11107458 +Ref: Derived Files-Footnote-21107492 +Ref: Derived Files-Footnote-31108092 +Node: Future Extensions1108190 +Node: Implementation Limitations1108773 +Node: Extension Design1110025 +Node: Old Extension Problems1111179 +Ref: Old Extension Problems-Footnote-11112687 +Node: Extension New Mechanism Goals1112744 +Ref: Extension New Mechanism Goals-Footnote-11116109 +Node: Extension Other Design Decisions1116295 +Node: Extension Future Growth1118401 +Node: Old Extension Mechanism1119237 +Node: Basic Concepts1120977 +Node: Basic High Level1121658 +Ref: figure-general-flow1121929 +Ref: figure-process-flow1122528 +Ref: Basic High Level-Footnote-11125757 +Node: Basic Data Typing1125942 +Node: Glossary1129297 +Node: Copying1154759 +Node: GNU Free Documentation License1192316 +Node: Index1217453  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 1dd75e51..63489dae 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -3289,8 +3289,8 @@ The following list describes @command{gawk}-specific options: @table @code @item -b @itemx --characters-as-bytes -@cindex @code{-b} option -@cindex @code{--characters-as-bytes} option +@cindex @option{-b} option +@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. @@ -3304,8 +3304,8 @@ multibyte characters. This option is an easy way to tell @command{gawk}: @item -c @itemx --traditional -@cindex @code{-c} option -@cindex @code{--traditional} option +@cindex @option{-c} option +@cindex @option{--traditional} option @cindex compatibility mode (@command{gawk}), specifying Specify @dfn{compatibility mode}, in which the GNU extensions to the @command{awk} language are disabled, so that @command{gawk} behaves just @@ -3316,17 +3316,17 @@ which summarizes the extensions. Also see @item -C @itemx --copyright -@cindex @code{-C} option -@cindex @code{--copyright} option +@cindex @option{-C} option +@cindex @option{--copyright} option @cindex GPL (General Public License), printing Print the short version of the General Public License and then exit. @item -d@r{[}@var{file}@r{]} @itemx --dump-variables@r{[}=@var{file}@r{]} -@cindex @code{-d} option -@cindex @code{--dump-variables} option -@cindex @code{awkvars.out} file -@cindex files, @code{awkvars.out} +@cindex @option{-d} option +@cindex @option{--dump-variables} option +@cindex @file{awkvars.out} file +@cindex files, @file{awkvars.out} @cindex variables, global, printing list of Print a sorted list of global variables, their types, and final values to @var{file}. If no @var{file} is provided, print this @@ -3345,8 +3345,8 @@ names like @code{i}, @code{j}, etc.) @item -D@r{[}@var{file}@r{]} @itemx --debug=@r{[}@var{file}@r{]} -@cindex @code{-D} option -@cindex @code{--debug} option +@cindex @option{-D} option +@cindex @option{--debug} option @cindex @command{awk} debugging, enabling Enable debugging of @command{awk} programs (@pxref{Debugging}). @@ -3358,8 +3358,8 @@ No space is allowed between the @option{-D} and @var{file}, if @item -e @var{program-text} @itemx --source @var{program-text} -@cindex @code{-e} option -@cindex @code{--source} option +@cindex @option{-e} option +@cindex @option{--source} option @cindex source code, mixing Provide program source code in the @var{program-text}. This option allows you to mix source code in files with source @@ -3370,8 +3370,8 @@ programs (@pxref{AWKPATH Variable}). @item -E @var{file} @itemx --exec @var{file} -@cindex @code{-E} option -@cindex @code{--exec} option +@cindex @option{-E} option +@cindex @option{--exec} option @cindex @command{awk} programs, location of @cindex CGI, @command{awk} scripts for Similar to @option{-f}, read @command{awk} program text from @var{file}. @@ -3401,8 +3401,8 @@ with @samp{#!} scripts (@pxref{Executable Scripts}), like so: @item -g @itemx --gen-pot -@cindex @code{-g} option -@cindex @code{--gen-pot} option +@cindex @option{-g} option +@cindex @option{--gen-pot} option @cindex portable object files, generating @cindex files, portable object, generating Analyze the source program and @@ -3413,8 +3413,8 @@ for information about this option. @item -h @itemx --help -@cindex @code{-h} option -@cindex @code{--help} option +@cindex @option{-h} option +@cindex @option{--help} option @cindex GNU long options, printing list of @cindex options, printing list of @cindex printing, list of options @@ -3439,8 +3439,8 @@ find the main source code via the @option{-f} option or on the command-line. @item -l @var{lib} @itemx --load @var{lib} -@cindex @code{-l} option -@cindex @code{--load} option +@cindex @option{-l} option +@cindex @option{--load} option @cindex loading, library Load a shared library @var{lib}. This searches for the library using the @env{AWKLIBPATH} environment variable. The correct library suffix for your platform will be @@ -3451,8 +3451,8 @@ a shared library. @item -L @r{[}value@r{]} @itemx --lint@r{[}=value@r{]} -@cindex @code{-l} option -@cindex @code{--lint} option +@cindex @option{-l} option +@cindex @option{--lint} option @cindex lint checking, issuing warnings @cindex warnings, issuing Warn about constructs that are dubious or nonportable to @@ -3474,16 +3474,16 @@ care to search for all occurrences of each inappropriate construct. As @item -M @itemx --bignum -@cindex @code{-M} option -@cindex @code{--bignum} option +@cindex @option{-M} option +@cindex @option{--bignum} option Force arbitrary precision arithmetic on numbers. This option has no effect if @command{gawk} is not compiled to use the GNU MPFR and MP libraries (@pxref{Arbitrary Precision Arithmetic}). @item -n @itemx --non-decimal-data -@cindex @code{-n} option -@cindex @code{--non-decimal-data} option +@cindex @option{-n} option +@cindex @option{--non-decimal-data} option @cindex hexadecimal values@comma{} enabling interpretation of @cindex octal values@comma{} enabling interpretation of @cindex troubleshooting, @code{--non-decimal-data} option @@ -3498,15 +3498,15 @@ Use with care. @item -N @itemx --use-lc-numeric -@cindex @code{-N} option -@cindex @code{--use-lc-numeric} option +@cindex @option{-N} option +@cindex @option{--use-lc-numeric} option Force the use of the locale's decimal point character when parsing numeric input data (@pxref{Locales}). @item -o@r{[}@var{file}@r{]} @itemx --pretty-print@r{[}=@var{file}@r{]} -@cindex @code{-o} option -@cindex @code{--pretty-print} option +@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}. The optional @var{file} argument allows you to specify a different @@ -3516,16 +3516,16 @@ No space is allowed between the @option{-o} and @var{file}, if @item -O @itemx --optimize -@cindex @code{--optimize} option -@cindex @code{-O} option +@cindex @option{--optimize} option +@cindex @option{-O} option Enable some optimizations on the internal representation of the program. At the moment this includes just simple constant folding. The @command{gawk} maintainer hopes to add more optimizations over time. @item -p@r{[}@var{file}@r{]} @itemx --profile@r{[}=@var{file}@r{]} -@cindex @code{-p} option -@cindex @code{--profile} option +@cindex @option{-p} option +@cindex @option{--profile} option @cindex @command{awk} profiling, enabling Enable profiling of @command{awk} programs (@pxref{Profiling}). @@ -3540,8 +3540,8 @@ in the left margin, and function call counts for each function. @item -P @itemx --posix -@cindex @code{-P} option -@cindex @code{--posix} option +@cindex @option{-P} option +@cindex @option{--posix} option @cindex POSIX mode @cindex @command{gawk}, extensions@comma{} disabling Operate in strict POSIX mode. This disables all @command{gawk} @@ -3590,8 +3590,8 @@ also issues a warning if both options are supplied. @item -r @itemx --re-interval -@cindex @code{-r} option -@cindex @code{--re-interval} option +@cindex @option{-r} option +@cindex @option{--re-interval} option @cindex regular expressions, interval expressions and Allow interval expressions (@pxref{Regexp Operators}) @@ -3602,8 +3602,8 @@ and for use in combination with the @option{--traditional} option. @item -S @itemx --sandbox -@cindex @code{-S} option -@cindex @code{--sandbox} option +@cindex @option{-S} option +@cindex @option{--sandbox} option @cindex sandbox mode Disable the @code{system()} function, input redirections with @code{getline}, @@ -3615,16 +3615,16 @@ can't access your system (other than the specified input data file). @item -t @itemx --lint-old -@cindex @code{-L} option -@cindex @code{--lint-old} option +@cindex @option{-L} option +@cindex @option{--lint-old} option Warn about constructs that are not available in the original version of @command{awk} from Version 7 Unix (@pxref{V7/SVR3.1}). @item -V @itemx --version -@cindex @code{-V} option -@cindex @code{--version} option +@cindex @option{-V} option +@cindex @option{--version} option @cindex @command{gawk}, versions of, information about@comma{} printing Print version information for this particular copy of @command{gawk}. This allows you to determine if your copy of @command{gawk} is up to date @@ -5043,8 +5043,8 @@ These sequences are: @item Collating symbols Multicharacter collating elements enclosed between @samp{[.} and @samp{.]}. For example, if @samp{ch} is a collating element, -then @code{[[.ch.]]} is a regexp that matches this collating element, whereas -@code{[ch]} is a regexp that matches either @samp{c} or @samp{h}. +then @samp{[[.ch.]]} is a regexp that matches this collating element, whereas +@samp{[ch]} is a regexp that matches either @samp{c} or @samp{h}. @cindex bracket expressions, equivalence classes @item Equivalence classes @@ -5052,7 +5052,7 @@ 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, @code{[[=e=]]} is a regexp +``e,'' ``@`e,'' and ``@'e.'' In this case, @samp{[[=e=]]} is a regexp that matches any of @samp{e}, @samp{@'e}, or @samp{@`e}. @end table @@ -5096,7 +5096,7 @@ or underscores (@samp{_}): @item \s Matches any whitespace character. Think of it as shorthand for -@w{@code{[[:space:]]}}. +@w{@samp{[[:space:]]}}. @c @cindex operators, @code{\S} (@command{gawk}) @cindex backslash (@code{\}), @code{\S} operator (@command{gawk}) @@ -5104,7 +5104,7 @@ Think of it as shorthand for @item \S Matches any character that is not whitespace. Think of it as shorthand for -@w{@code{[^[:space:]]}}. +@w{@samp{[^[:space:]]}}. @c @cindex operators, @code{\w} (@command{gawk}) @cindex backslash (@code{\}), @code{\w} operator (@command{gawk}) @@ -5112,7 +5112,7 @@ Think of it as shorthand for @item \w Matches any word-constituent character---that is, it matches any letter, digit, or underscore. Think of it as shorthand for -@w{@code{[[:alnum:]_]}}. +@w{@samp{[[:alnum:]_]}}. @c @cindex operators, @code{\W} (@command{gawk}) @cindex backslash (@code{\}), @code{\W} operator (@command{gawk}) @@ -5120,7 +5120,7 @@ letter, digit, or underscore. Think of it as shorthand for @item \W Matches any character that is not word-constituent. Think of it as shorthand for -@w{@code{[^[:alnum:]_]}}. +@w{@samp{[^[:alnum:]_]}}. @c @cindex operators, @code{\<} (@command{gawk}) @cindex backslash (@code{\}), @code{\<} operator (@command{gawk}) @@ -5231,7 +5231,7 @@ are allowed. @item @code{--traditional} Traditional Unix @command{awk} regexps are matched. The GNU operators are not special, and interval expressions are not available. -The POSIX character classes (@code{[[:alnum:]]}, etc.) are supported, +The POSIX character classes (@samp{[[:alnum:]]}, etc.) are supported, as Brian Kernighan's @command{awk} does support them. Characters described by octal and hexadecimal escape sequences are treated literally, even if they represent regexp metacharacters. @@ -5857,21 +5857,27 @@ BEGIN @{ RS = "\0" @} # whole file becomes one record? @command{gawk} in fact accepts this, and uses the @sc{nul} character for the record separator. However, this usage is @emph{not} portable -to other @command{awk} implementations. +to most other @command{awk} implementations. @cindex dark corner, strings, storing -All other @command{awk} implementations@footnote{At least that we know +Almost all other @command{awk} implementations@footnote{At least that we know about.} store strings internally as C-style strings. C strings use the @sc{nul} character as the string terminator. In effect, this means that @samp{RS = "\0"} is the same as @samp{RS = ""}. @value{DARKCORNER} +It happens that recent versions of @command{mawk} can use the @sc{nul} +character as a record separator. However, this is a special case: +@command{mawk} does not allow embedded @sc{nul} characters in strings. + @cindex records, treating files as @cindex files, as single records The best way to treat a whole file as a single record is to simply read the file in, one record at a time, concatenating each record onto the end of the previous ones. +@c @strong{FIXME}: Using @sc{nul} is good for @file{/proc/environ} etc. + @docbook @end docbook @@ -5902,20 +5908,26 @@ BEGIN @{ RS = "\0" @} # whole file becomes one record? @command{gawk} in fact accepts this, and uses the @sc{nul} character for the record separator. However, this usage is @emph{not} portable -to other @command{awk} implementations. +to most other @command{awk} implementations. @cindex dark corner, strings, storing -All other @command{awk} implementations@footnote{At least that we know +Almost all other @command{awk} implementations@footnote{At least that we know about.} store strings internally as C-style strings. C strings use the @sc{nul} character as the string terminator. In effect, this means that @samp{RS = "\0"} is the same as @samp{RS = ""}. @value{DARKCORNER} +It happens that recent versions of @command{mawk} can use the @sc{nul} +character as a record separator. However, this is a special case: +@command{mawk} does not allow embedded @sc{nul} characters in strings. + @cindex records, treating files as @cindex files, as single records The best way to treat a whole file as a single record is to simply read the file in, one record at a time, concatenating each record onto the end of the previous ones. + +@c @strong{FIXME}: Using @sc{nul} is good for @file{/proc/environ} etc. @end cartouche @end ifnotdocbook @c ENDOFRANGE inspl @@ -10105,7 +10117,7 @@ point when reading the @command{awk} program source code, and for command-line variable assignments (@pxref{Other Arguments}). However, when interpreting input data, for @code{print} and @code{printf} output, and for number to string conversion, the local decimal point character is used. -@value{DARKCORNER}. +@value{DARKCORNER} Here are some examples indicating the difference in behavior, on a GNU/Linux system: @@ -34088,7 +34100,7 @@ The option for raw sockets was removed, since it was never implemented (@pxref{TCP/IP Networking}). @item -Ranges of the form @code{[d-h]} are treated as if they were in the +Ranges of the form @samp{[d-h]} are treated as if they were in the C locale, no matter what kind of regexp is being used, and even if @option{--posix} (@pxref{Ranges and Locales}). @@ -34296,7 +34308,7 @@ 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 @code{[A-Z]} match lowercase letters?!?'' +like ``why does @samp{[A-Z]} match lowercase letters?!?'' This situation existed for close to 10 years, if not more, and the @command{gawk} maintainer grew weary of trying to explain that diff --git a/doc/gawktexi.in b/doc/gawktexi.in index e970d9a0..71f960ab 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -3217,8 +3217,8 @@ The following list describes @command{gawk}-specific options: @table @code @item -b @itemx --characters-as-bytes -@cindex @code{-b} option -@cindex @code{--characters-as-bytes} option +@cindex @option{-b} option +@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. @@ -3232,8 +3232,8 @@ multibyte characters. This option is an easy way to tell @command{gawk}: @item -c @itemx --traditional -@cindex @code{-c} option -@cindex @code{--traditional} option +@cindex @option{-c} option +@cindex @option{--traditional} option @cindex compatibility mode (@command{gawk}), specifying Specify @dfn{compatibility mode}, in which the GNU extensions to the @command{awk} language are disabled, so that @command{gawk} behaves just @@ -3244,17 +3244,17 @@ which summarizes the extensions. Also see @item -C @itemx --copyright -@cindex @code{-C} option -@cindex @code{--copyright} option +@cindex @option{-C} option +@cindex @option{--copyright} option @cindex GPL (General Public License), printing Print the short version of the General Public License and then exit. @item -d@r{[}@var{file}@r{]} @itemx --dump-variables@r{[}=@var{file}@r{]} -@cindex @code{-d} option -@cindex @code{--dump-variables} option -@cindex @code{awkvars.out} file -@cindex files, @code{awkvars.out} +@cindex @option{-d} option +@cindex @option{--dump-variables} option +@cindex @file{awkvars.out} file +@cindex files, @file{awkvars.out} @cindex variables, global, printing list of Print a sorted list of global variables, their types, and final values to @var{file}. If no @var{file} is provided, print this @@ -3273,8 +3273,8 @@ names like @code{i}, @code{j}, etc.) @item -D@r{[}@var{file}@r{]} @itemx --debug=@r{[}@var{file}@r{]} -@cindex @code{-D} option -@cindex @code{--debug} option +@cindex @option{-D} option +@cindex @option{--debug} option @cindex @command{awk} debugging, enabling Enable debugging of @command{awk} programs (@pxref{Debugging}). @@ -3286,8 +3286,8 @@ No space is allowed between the @option{-D} and @var{file}, if @item -e @var{program-text} @itemx --source @var{program-text} -@cindex @code{-e} option -@cindex @code{--source} option +@cindex @option{-e} option +@cindex @option{--source} option @cindex source code, mixing Provide program source code in the @var{program-text}. This option allows you to mix source code in files with source @@ -3298,8 +3298,8 @@ programs (@pxref{AWKPATH Variable}). @item -E @var{file} @itemx --exec @var{file} -@cindex @code{-E} option -@cindex @code{--exec} option +@cindex @option{-E} option +@cindex @option{--exec} option @cindex @command{awk} programs, location of @cindex CGI, @command{awk} scripts for Similar to @option{-f}, read @command{awk} program text from @var{file}. @@ -3329,8 +3329,8 @@ with @samp{#!} scripts (@pxref{Executable Scripts}), like so: @item -g @itemx --gen-pot -@cindex @code{-g} option -@cindex @code{--gen-pot} option +@cindex @option{-g} option +@cindex @option{--gen-pot} option @cindex portable object files, generating @cindex files, portable object, generating Analyze the source program and @@ -3341,8 +3341,8 @@ for information about this option. @item -h @itemx --help -@cindex @code{-h} option -@cindex @code{--help} option +@cindex @option{-h} option +@cindex @option{--help} option @cindex GNU long options, printing list of @cindex options, printing list of @cindex printing, list of options @@ -3367,8 +3367,8 @@ find the main source code via the @option{-f} option or on the command-line. @item -l @var{lib} @itemx --load @var{lib} -@cindex @code{-l} option -@cindex @code{--load} option +@cindex @option{-l} option +@cindex @option{--load} option @cindex loading, library Load a shared library @var{lib}. This searches for the library using the @env{AWKLIBPATH} environment variable. The correct library suffix for your platform will be @@ -3379,8 +3379,8 @@ a shared library. @item -L @r{[}value@r{]} @itemx --lint@r{[}=value@r{]} -@cindex @code{-l} option -@cindex @code{--lint} option +@cindex @option{-l} option +@cindex @option{--lint} option @cindex lint checking, issuing warnings @cindex warnings, issuing Warn about constructs that are dubious or nonportable to @@ -3402,16 +3402,16 @@ care to search for all occurrences of each inappropriate construct. As @item -M @itemx --bignum -@cindex @code{-M} option -@cindex @code{--bignum} option +@cindex @option{-M} option +@cindex @option{--bignum} option Force arbitrary precision arithmetic on numbers. This option has no effect if @command{gawk} is not compiled to use the GNU MPFR and MP libraries (@pxref{Arbitrary Precision Arithmetic}). @item -n @itemx --non-decimal-data -@cindex @code{-n} option -@cindex @code{--non-decimal-data} option +@cindex @option{-n} option +@cindex @option{--non-decimal-data} option @cindex hexadecimal values@comma{} enabling interpretation of @cindex octal values@comma{} enabling interpretation of @cindex troubleshooting, @code{--non-decimal-data} option @@ -3426,15 +3426,15 @@ Use with care. @item -N @itemx --use-lc-numeric -@cindex @code{-N} option -@cindex @code{--use-lc-numeric} option +@cindex @option{-N} option +@cindex @option{--use-lc-numeric} option Force the use of the locale's decimal point character when parsing numeric input data (@pxref{Locales}). @item -o@r{[}@var{file}@r{]} @itemx --pretty-print@r{[}=@var{file}@r{]} -@cindex @code{-o} option -@cindex @code{--pretty-print} option +@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}. The optional @var{file} argument allows you to specify a different @@ -3444,16 +3444,16 @@ No space is allowed between the @option{-o} and @var{file}, if @item -O @itemx --optimize -@cindex @code{--optimize} option -@cindex @code{-O} option +@cindex @option{--optimize} option +@cindex @option{-O} option Enable some optimizations on the internal representation of the program. At the moment this includes just simple constant folding. The @command{gawk} maintainer hopes to add more optimizations over time. @item -p@r{[}@var{file}@r{]} @itemx --profile@r{[}=@var{file}@r{]} -@cindex @code{-p} option -@cindex @code{--profile} option +@cindex @option{-p} option +@cindex @option{--profile} option @cindex @command{awk} profiling, enabling Enable profiling of @command{awk} programs (@pxref{Profiling}). @@ -3468,8 +3468,8 @@ in the left margin, and function call counts for each function. @item -P @itemx --posix -@cindex @code{-P} option -@cindex @code{--posix} option +@cindex @option{-P} option +@cindex @option{--posix} option @cindex POSIX mode @cindex @command{gawk}, extensions@comma{} disabling Operate in strict POSIX mode. This disables all @command{gawk} @@ -3518,8 +3518,8 @@ also issues a warning if both options are supplied. @item -r @itemx --re-interval -@cindex @code{-r} option -@cindex @code{--re-interval} option +@cindex @option{-r} option +@cindex @option{--re-interval} option @cindex regular expressions, interval expressions and Allow interval expressions (@pxref{Regexp Operators}) @@ -3530,8 +3530,8 @@ and for use in combination with the @option{--traditional} option. @item -S @itemx --sandbox -@cindex @code{-S} option -@cindex @code{--sandbox} option +@cindex @option{-S} option +@cindex @option{--sandbox} option @cindex sandbox mode Disable the @code{system()} function, input redirections with @code{getline}, @@ -3543,16 +3543,16 @@ can't access your system (other than the specified input data file). @item -t @itemx --lint-old -@cindex @code{-L} option -@cindex @code{--lint-old} option +@cindex @option{-L} option +@cindex @option{--lint-old} option Warn about constructs that are not available in the original version of @command{awk} from Version 7 Unix (@pxref{V7/SVR3.1}). @item -V @itemx --version -@cindex @code{-V} option -@cindex @code{--version} option +@cindex @option{-V} option +@cindex @option{--version} option @cindex @command{gawk}, versions of, information about@comma{} printing Print version information for this particular copy of @command{gawk}. This allows you to determine if your copy of @command{gawk} is up to date @@ -4890,8 +4890,8 @@ These sequences are: @item Collating symbols Multicharacter collating elements enclosed between @samp{[.} and @samp{.]}. For example, if @samp{ch} is a collating element, -then @code{[[.ch.]]} is a regexp that matches this collating element, whereas -@code{[ch]} is a regexp that matches either @samp{c} or @samp{h}. +then @samp{[[.ch.]]} is a regexp that matches this collating element, whereas +@samp{[ch]} is a regexp that matches either @samp{c} or @samp{h}. @cindex bracket expressions, equivalence classes @item Equivalence classes @@ -4899,7 +4899,7 @@ 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, @code{[[=e=]]} is a regexp +``e,'' ``@`e,'' and ``@'e.'' In this case, @samp{[[=e=]]} is a regexp that matches any of @samp{e}, @samp{@'e}, or @samp{@`e}. @end table @@ -4943,7 +4943,7 @@ or underscores (@samp{_}): @item \s Matches any whitespace character. Think of it as shorthand for -@w{@code{[[:space:]]}}. +@w{@samp{[[:space:]]}}. @c @cindex operators, @code{\S} (@command{gawk}) @cindex backslash (@code{\}), @code{\S} operator (@command{gawk}) @@ -4951,7 +4951,7 @@ Think of it as shorthand for @item \S Matches any character that is not whitespace. Think of it as shorthand for -@w{@code{[^[:space:]]}}. +@w{@samp{[^[:space:]]}}. @c @cindex operators, @code{\w} (@command{gawk}) @cindex backslash (@code{\}), @code{\w} operator (@command{gawk}) @@ -4959,7 +4959,7 @@ Think of it as shorthand for @item \w Matches any word-constituent character---that is, it matches any letter, digit, or underscore. Think of it as shorthand for -@w{@code{[[:alnum:]_]}}. +@w{@samp{[[:alnum:]_]}}. @c @cindex operators, @code{\W} (@command{gawk}) @cindex backslash (@code{\}), @code{\W} operator (@command{gawk}) @@ -4967,7 +4967,7 @@ letter, digit, or underscore. Think of it as shorthand for @item \W Matches any character that is not word-constituent. Think of it as shorthand for -@w{@code{[^[:alnum:]_]}}. +@w{@samp{[^[:alnum:]_]}}. @c @cindex operators, @code{\<} (@command{gawk}) @cindex backslash (@code{\}), @code{\<} operator (@command{gawk}) @@ -5078,7 +5078,7 @@ are allowed. @item @code{--traditional} Traditional Unix @command{awk} regexps are matched. The GNU operators are not special, and interval expressions are not available. -The POSIX character classes (@code{[[:alnum:]]}, etc.) are supported, +The POSIX character classes (@samp{[[:alnum:]]}, etc.) are supported, as Brian Kernighan's @command{awk} does support them. Characters described by octal and hexadecimal escape sequences are treated literally, even if they represent regexp metacharacters. @@ -5655,20 +5655,26 @@ BEGIN @{ RS = "\0" @} # whole file becomes one record? @command{gawk} in fact accepts this, and uses the @sc{nul} character for the record separator. However, this usage is @emph{not} portable -to other @command{awk} implementations. +to most other @command{awk} implementations. @cindex dark corner, strings, storing -All other @command{awk} implementations@footnote{At least that we know +Almost all other @command{awk} implementations@footnote{At least that we know about.} store strings internally as C-style strings. C strings use the @sc{nul} character as the string terminator. In effect, this means that @samp{RS = "\0"} is the same as @samp{RS = ""}. @value{DARKCORNER} +It happens that recent versions of @command{mawk} can use the @sc{nul} +character as a record separator. However, this is a special case: +@command{mawk} does not allow embedded @sc{nul} characters in strings. + @cindex records, treating files as @cindex files, as single records The best way to treat a whole file as a single record is to simply read the file in, one record at a time, concatenating each record onto the end of the previous ones. + +@c @strong{FIXME}: Using @sc{nul} is good for @file{/proc/environ} etc. @end sidebar @c ENDOFRANGE inspl @c ENDOFRANGE recspl @@ -9602,7 +9608,7 @@ point when reading the @command{awk} program source code, and for command-line variable assignments (@pxref{Other Arguments}). However, when interpreting input data, for @code{print} and @code{printf} output, and for number to string conversion, the local decimal point character is used. -@value{DARKCORNER}. +@value{DARKCORNER} Here are some examples indicating the difference in behavior, on a GNU/Linux system: @@ -33237,7 +33243,7 @@ The option for raw sockets was removed, since it was never implemented (@pxref{TCP/IP Networking}). @item -Ranges of the form @code{[d-h]} are treated as if they were in the +Ranges of the form @samp{[d-h]} are treated as if they were in the C locale, no matter what kind of regexp is being used, and even if @option{--posix} (@pxref{Ranges and Locales}). @@ -33445,7 +33451,7 @@ 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 @code{[A-Z]} match lowercase letters?!?'' +like ``why does @samp{[A-Z]} match lowercase letters?!?'' This situation existed for close to 10 years, if not more, and the @command{gawk} maintainer grew weary of trying to explain that -- cgit v1.2.3 From a6131306dd49537de45afdfdc6d4ad2dcac7655b Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 14 Feb 2014 13:22:51 +0200 Subject: VMS updates. --- extension/ChangeLog | 4 ++++ extension/time.c | 31 ++++++++++++++++++++----------- vms/ChangeLog | 7 ++++++- vms/vmstest.com | 11 ++++++++++- 4 files changed, 40 insertions(+), 13 deletions(-) diff --git a/extension/ChangeLog b/extension/ChangeLog index 965e0c66..bde626de 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,7 @@ +2014-02-12 John E. Malmberg + + * time.c: Better hack for nanosleep bug based on feedback from HP. + 2013-12-29 John E. Malmberg * filefuncs.c: Fix compile on VMS. diff --git a/extension/time.c b/extension/time.c index b1e9a40a..c336df88 100644 --- a/extension/time.c +++ b/extension/time.c @@ -1,25 +1,24 @@ /* * time.c - Builtin functions that provide time-related functions. - * */ /* * Copyright (C) 2012, 2013 * the Free Software Foundation, Inc. - * + * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. - * + * * GAWK is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. - * + * * GAWK is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA @@ -46,18 +45,28 @@ #undef gettimeofday #endif #ifdef __ia64__ -/* nanosleep not working on IA64 */ +/* nanosleep not working correctly on IA64 */ static int -vms_fake_nanosleep(const struct timespec *rqdly, struct timespec *rmdly) +vms_fake_nanosleep(struct timespec *rqdly, struct timespec *rmdly) { int result; + struct timespec mtime1, mtime2; - result = sleep(rqdly->tv_sec); - if (result == 0) { + result = nanosleep(rqdly, &mtime1); + if (result == 0) return 0; - } else { - return -1; + + /* On IA64 it returns 100 nanoseconds early with an error */ + if ((mtime1.tv_sec == 0) && (mtime1.tv_nsec <= 100)) { + mtime1.tv_nsec += 100; + result = nanosleep(&mtime1, &mtime2); + if (result == 0) + return 0; + if ((mtime2.tv_sec == 0) && (mtime2.tv_nsec <= 100)) { + return 0; + } } + return result; } #define nanosleep(x,y) vms_fake_nanosleep(x, y) #endif diff --git a/vms/ChangeLog b/vms/ChangeLog index c3780cf3..94bc9f1a 100644 --- a/vms/ChangeLog +++ b/vms/ChangeLog @@ -1,3 +1,8 @@ +2014-02-12 John E. Malmberg + + * vmstest.com: (strftime) requires GNV Coreutils date command to run + (readdir) fix file cleanup to not generate warnings. + 2014-01-21 John E. Malmberg * generate_config_vms_h_gawk.com: upate copyright and fix exit status. @@ -9,7 +14,7 @@ 2014-01-03 John E. Malmberg * config_h.com, generate_config_vms_h_gawk.com, - vms_args.c, vms_cli.c, vms_fwrite.c, vms_gawk.c, vms_misc.c, + vms_args.c, vms_cli.c, vms_fwrite.c, vms_gawk.c, vms_misc.c, vms_popen.c: Update copyright to 2014. * descrip.mms: Improve spotless cleanup. * vmstest.com: Improve test cleanup. diff --git a/vms/vmstest.com b/vms/vmstest.com index 4b5e2d5c..30bdbf22 100644 --- a/vms/vmstest.com +++ b/vms/vmstest.com @@ -606,6 +606,14 @@ $ ! this test could fail on slow machines or on a second boundary, $ ! so if it does, double check the actual results $ ! This test needs SYS$TIMEZONE_NAME and SYS$TIMEZONE_RULE $ ! to be properly defined. +$ ! This test now needs GNV Corutils to work +$ date_bin = "gnv$gnu:[bin]gnv$date.exe" +$ if f$search(date_bin) .eqs. "" +$ then +$ echo "''test' skipped" +$ return +$ endif +$ date := $'date_bin' $!! date | gawk -v "OUTPUT"=_strftime.tmp -f strftime.awk $ now = f$time() $ wkd = f$extract(0,3,f$cvtime(now,,"WEEKDAY")) @@ -1902,7 +1910,8 @@ $ then $ call exit_code '$status' _'test'.tmp $ write sys$output _'test'.tmp $ else -$ rm _'test'.tmp;*,_'test'.;* +$ if f$search("_''test'.tmp") .nes. "" then rm _'test'.tmp;* +$ if f$search("_''test'.") .nes. "" then rm _'test'.;* $ endif $ set On $ return -- cgit v1.2.3 From 1e8ab702f8a94ae0c53fc6d65698e037f200b39e Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sat, 15 Feb 2014 19:27:24 +0200 Subject: Update to Bison 3.0.2. --- ChangeLog | 4 + NEWS | 3 +- awkgram.c | 2575 ++++++++++++++++++++++++++++--------------------------------- command.c | 1429 +++++++++++++++------------------- 4 files changed, 1811 insertions(+), 2200 deletions(-) diff --git a/ChangeLog b/ChangeLog index 10f6aa97..11a4b29c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2014-02-15 Arnold D. Robbins + + * awkgram.c, command.c: Regenerated - Bison 3.0.2. + 2014-02-04 Arnold D. Robbins * dfa.c (to_uchar): Make use of this. Syncs with GNU grep. diff --git a/NEWS b/NEWS index 88b0e893..10e8b1f8 100644 --- a/NEWS +++ b/NEWS @@ -25,7 +25,8 @@ Changes from 4.1.0 to 4.1.1 8. The --include option, documented since 4.0, now actually works. -9. Infrastructure updated to automake 1.13.4 and libtool 2.4.2.418. +9. Infrastructure updated to automake 1.13.4, bison 3.0.2, and + libtool 2.4.2.418. 10. The configure script now accepts a --disable-extensions option, which disables checking for and building the extensions. diff --git a/awkgram.c b/awkgram.c index cd37cd7d..948e63bf 100644 --- a/awkgram.c +++ b/awkgram.c @@ -1,19 +1,19 @@ -/* A Bison parser, made by GNU Bison 2.7.12-4996. */ +/* A Bison parser, made by GNU Bison 3.0.2. */ /* 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-2013 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 the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program. If not, see . */ @@ -26,7 +26,7 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ @@ -44,7 +44,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.7.12-4996" +#define YYBISON_VERSION "3.0.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -62,8 +62,7 @@ /* Copy the first part of user declarations. */ -/* Line 371 of yacc.c */ -#line 26 "awkgram.y" +#line 26 "awkgram.y" /* yacc.c:339 */ #ifdef GAWKDEBUG #define YYDEBUG 12 @@ -198,14 +197,13 @@ extern double fmod(double x, double y); #define is_identchar(c) (isalnum(c) || (c) == '_') -/* Line 371 of yacc.c */ -#line 203 "awkgram.c" +#line 201 "awkgram.c" /* yacc.c:339 */ -# ifndef YY_NULL +# ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULL nullptr +# define YY_NULLPTR nullptr # else -# define YY_NULL 0 +# define YY_NULLPTR 0 # endif # endif @@ -218,7 +216,7 @@ extern double fmod(double x, double y); #endif -/* Enabling traces. */ +/* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif @@ -226,64 +224,63 @@ extern double fmod(double x, double y); extern int yydebug; #endif -/* Tokens. */ +/* Token type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - FUNC_CALL = 258, - NAME = 259, - REGEXP = 260, - FILENAME = 261, - YNUMBER = 262, - YSTRING = 263, - RELOP = 264, - IO_OUT = 265, - IO_IN = 266, - ASSIGNOP = 267, - ASSIGN = 268, - MATCHOP = 269, - CONCAT_OP = 270, - SUBSCRIPT = 271, - LEX_BEGIN = 272, - LEX_END = 273, - LEX_IF = 274, - LEX_ELSE = 275, - LEX_RETURN = 276, - LEX_DELETE = 277, - LEX_SWITCH = 278, - LEX_CASE = 279, - LEX_DEFAULT = 280, - LEX_WHILE = 281, - LEX_DO = 282, - LEX_FOR = 283, - LEX_BREAK = 284, - LEX_CONTINUE = 285, - LEX_PRINT = 286, - LEX_PRINTF = 287, - LEX_NEXT = 288, - LEX_EXIT = 289, - LEX_FUNCTION = 290, - LEX_BEGINFILE = 291, - LEX_ENDFILE = 292, - LEX_GETLINE = 293, - LEX_NEXTFILE = 294, - LEX_IN = 295, - LEX_AND = 296, - LEX_OR = 297, - INCREMENT = 298, - DECREMENT = 299, - LEX_BUILTIN = 300, - LEX_LENGTH = 301, - LEX_EOF = 302, - LEX_INCLUDE = 303, - LEX_EVAL = 304, - LEX_LOAD = 305, - NEWLINE = 306, - SLASH_BEFORE_EQUAL = 307, - UNARY = 308 - }; + enum yytokentype + { + FUNC_CALL = 258, + NAME = 259, + REGEXP = 260, + FILENAME = 261, + YNUMBER = 262, + YSTRING = 263, + RELOP = 264, + IO_OUT = 265, + IO_IN = 266, + ASSIGNOP = 267, + ASSIGN = 268, + MATCHOP = 269, + CONCAT_OP = 270, + SUBSCRIPT = 271, + LEX_BEGIN = 272, + LEX_END = 273, + LEX_IF = 274, + LEX_ELSE = 275, + LEX_RETURN = 276, + LEX_DELETE = 277, + LEX_SWITCH = 278, + LEX_CASE = 279, + LEX_DEFAULT = 280, + LEX_WHILE = 281, + LEX_DO = 282, + LEX_FOR = 283, + LEX_BREAK = 284, + LEX_CONTINUE = 285, + LEX_PRINT = 286, + LEX_PRINTF = 287, + LEX_NEXT = 288, + LEX_EXIT = 289, + LEX_FUNCTION = 290, + LEX_BEGINFILE = 291, + LEX_ENDFILE = 292, + LEX_GETLINE = 293, + LEX_NEXTFILE = 294, + LEX_IN = 295, + LEX_AND = 296, + LEX_OR = 297, + INCREMENT = 298, + DECREMENT = 299, + LEX_BUILTIN = 300, + LEX_LENGTH = 301, + LEX_EOF = 302, + LEX_INCLUDE = 303, + LEX_EVAL = 304, + LEX_LOAD = 305, + NEWLINE = 306, + SLASH_BEFORE_EQUAL = 307, + UNARY = 308 + }; #endif /* Tokens. */ #define FUNC_CALL 258 @@ -338,37 +335,23 @@ extern int yydebug; #define SLASH_BEFORE_EQUAL 307 #define UNARY 308 - - +/* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef int YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif + extern YYSTYPE yylval; -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); -#else -int yyparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ /* Copy the second part of user declarations. */ -/* Line 390 of yacc.c */ -#line 372 "awkgram.c" +#line 355 "awkgram.c" /* yacc.c:358 */ #ifdef short # undef short @@ -382,11 +365,8 @@ typedef unsigned char yytype_uint8; #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; -#elif (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -typedef signed char yytype_int8; #else -typedef short int yytype_int8; +typedef signed char yytype_int8; #endif #ifdef YYTYPE_UINT16 @@ -406,8 +386,7 @@ typedef short int yytype_int16; # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +# elif ! defined YYSIZE_T # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else @@ -429,11 +408,30 @@ typedef short int yytype_int16; # endif #endif -#ifndef __attribute__ -/* This feature is available in gcc versions 2.5 and later. */ -# if (! defined __GNUC__ || __GNUC__ < 2 \ - || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)) -# define __attribute__(Spec) /* empty */ +#ifndef YY_ATTRIBUTE +# if (defined __GNUC__ \ + && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ + || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C +# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +# else +# define YY_ATTRIBUTE(Spec) /* empty */ +# endif +#endif + +#ifndef YY_ATTRIBUTE_PURE +# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) +#endif + +#if !defined _Noreturn \ + && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) +# if defined _MSC_VER && 1200 <= _MSC_VER +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) # endif #endif @@ -444,25 +442,26 @@ typedef short int yytype_int16; # define YYUSE(E) /* empty */ #endif - -/* Identity function, used to suppress warnings about constant conditions. */ -#ifndef lint -# define YYID(N) (N) +#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") #else -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static int -YYID (int yyi) -#else -static int -YYID (yyi) - int yyi; +# define YY_INITIAL_VALUE(Value) Value #endif -{ - return yyi; -} +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif + #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ @@ -480,8 +479,7 @@ YYID (yyi) # define alloca _alloca # else # define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS # include /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS @@ -493,8 +491,8 @@ YYID (yyi) # endif # ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) + /* Pacify GCC's 'empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely @@ -510,7 +508,7 @@ YYID (yyi) # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) + && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 @@ -518,15 +516,13 @@ YYID (yyi) # endif # ifndef YYMALLOC # define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +# if ! defined malloc && ! defined EXIT_SUCCESS void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +# if ! defined free && ! defined EXIT_SUCCESS void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif @@ -536,7 +532,7 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc @@ -561,16 +557,16 @@ union yyalloc elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (YYID (0)) +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (0) #endif @@ -589,7 +585,7 @@ union yyalloc for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ - while (YYID (0)) + while (0) # endif # endif #endif /* !YYCOPY_NEEDED */ @@ -605,17 +601,19 @@ union yyalloc #define YYNNTS 65 /* YYNRULES -- Number of rules. */ #define YYNRULES 188 -/* YYNRULES -- Number of states. */ +/* YYNSTATES -- Number of states. */ #define YYNSTATES 335 -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned + by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 308 -#define YYTRANSLATE(YYX) \ +#define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, without out-of-bounds checking. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -652,96 +650,7 @@ static const yytype_uint8 yytranslate[] = }; #if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const yytype_uint16 yyprhs[] = -{ - 0, 0, 3, 4, 7, 10, 13, 16, 19, 22, - 25, 30, 35, 37, 40, 42, 44, 47, 49, 50, - 52, 57, 59, 61, 63, 65, 71, 73, 75, 77, - 80, 82, 84, 91, 92, 96, 98, 100, 101, 104, - 107, 109, 112, 115, 119, 121, 131, 138, 147, 156, - 169, 181, 183, 186, 189, 192, 195, 199, 200, 205, - 208, 209, 214, 215, 220, 225, 227, 228, 230, 231, - 234, 237, 243, 248, 250, 253, 256, 258, 260, 262, - 264, 266, 270, 271, 272, 276, 283, 293, 295, 298, - 299, 301, 302, 305, 306, 308, 310, 314, 316, 319, - 323, 324, 326, 327, 329, 331, 335, 337, 340, 344, - 348, 352, 356, 360, 364, 368, 372, 378, 380, 382, - 384, 387, 389, 391, 393, 395, 397, 399, 402, 404, - 408, 412, 416, 420, 424, 428, 432, 435, 438, 444, - 449, 453, 457, 461, 465, 469, 473, 475, 478, 482, - 487, 492, 494, 496, 498, 501, 504, 506, 508, 511, - 514, 516, 519, 524, 525, 527, 528, 531, 533, 536, - 538, 542, 544, 547, 550, 552, 555, 557, 561, 563, - 565, 566, 569, 572, 574, 575, 577, 579, 581 -}; - -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const yytype_int16 yyrhs[] = -{ - 76, 0, -1, -1, 76, 77, -1, 76, 105, -1, - 76, 47, -1, 76, 1, -1, 80, 81, -1, 80, - 89, -1, 84, 81, -1, 69, 48, 78, 89, -1, - 69, 50, 79, 89, -1, 6, -1, 6, 1, -1, - 1, -1, 6, -1, 6, 1, -1, 1, -1, -1, - 113, -1, 113, 55, 106, 113, -1, 17, -1, 18, - -1, 36, -1, 37, -1, 133, 88, 134, 136, 106, - -1, 4, -1, 3, -1, 83, -1, 69, 49, -1, - 45, -1, 46, -1, 35, 82, 67, 108, 135, 106, - -1, -1, 87, 86, 5, -1, 61, -1, 52, -1, - -1, 88, 90, -1, 88, 1, -1, 105, -1, 137, - 106, -1, 137, 106, -1, 133, 88, 134, -1, 104, - -1, 23, 67, 113, 135, 106, 133, 97, 106, 134, - -1, 26, 67, 113, 135, 106, 90, -1, 27, 106, - 90, 26, 67, 113, 135, 106, -1, 28, 67, 4, - 40, 130, 135, 106, 90, -1, 28, 67, 96, 137, - 106, 113, 137, 106, 96, 135, 106, 90, -1, 28, - 67, 96, 137, 106, 137, 106, 96, 135, 106, 90, - -1, 91, -1, 29, 89, -1, 30, 89, -1, 33, - 89, -1, 39, 89, -1, 34, 110, 89, -1, -1, - 21, 92, 110, 89, -1, 93, 89, -1, -1, 100, - 94, 101, 102, -1, -1, 22, 4, 95, 124, -1, - 22, 67, 4, 68, -1, 113, -1, -1, 93, -1, - -1, 97, 98, -1, 97, 1, -1, 24, 99, 138, - 106, 88, -1, 25, 138, 106, 88, -1, 7, -1, - 59, 7, -1, 58, 7, -1, 8, -1, 85, -1, - 31, -1, 32, -1, 111, -1, 67, 112, 135, -1, - -1, -1, 10, 103, 117, -1, 19, 67, 113, 135, - 106, 90, -1, 19, 67, 113, 135, 106, 90, 20, - 106, 90, -1, 51, -1, 105, 51, -1, -1, 105, - -1, -1, 56, 118, -1, -1, 109, -1, 4, -1, - 109, 139, 4, -1, 1, -1, 109, 1, -1, 109, - 139, 1, -1, -1, 113, -1, -1, 112, -1, 113, - -1, 112, 139, 113, -1, 1, -1, 112, 1, -1, - 112, 1, 113, -1, 112, 139, 1, -1, 131, 114, - 113, -1, 113, 41, 113, -1, 113, 42, 113, -1, - 113, 14, 113, -1, 113, 40, 130, -1, 113, 116, - 113, -1, 113, 53, 113, 54, 113, -1, 117, -1, - 13, -1, 12, -1, 52, 13, -1, 9, -1, 56, - -1, 115, -1, 57, -1, 118, -1, 119, -1, 117, - 118, -1, 120, -1, 118, 65, 118, -1, 118, 60, - 118, -1, 118, 61, 118, -1, 118, 62, 118, -1, - 118, 58, 118, -1, 118, 59, 118, -1, 38, 123, - 107, -1, 131, 43, -1, 131, 44, -1, 67, 112, - 135, 40, 130, -1, 117, 11, 38, 123, -1, 119, - 65, 118, -1, 119, 60, 118, -1, 119, 61, 118, - -1, 119, 62, 118, -1, 119, 58, 118, -1, 119, - 59, 118, -1, 85, -1, 63, 118, -1, 67, 113, - 135, -1, 45, 67, 111, 135, -1, 46, 67, 111, - 135, -1, 46, -1, 121, -1, 131, -1, 43, 131, - -1, 44, 131, -1, 7, -1, 8, -1, 59, 118, - -1, 58, 118, -1, 122, -1, 69, 122, -1, 3, - 67, 111, 135, -1, -1, 131, -1, -1, 125, 16, - -1, 126, -1, 125, 126, -1, 127, -1, 70, 112, - 71, -1, 127, -1, 128, 127, -1, 128, 16, -1, - 4, -1, 4, 129, -1, 130, -1, 66, 120, 132, - -1, 43, -1, 44, -1, -1, 72, 106, -1, 73, - 106, -1, 68, -1, -1, 137, -1, 74, -1, 54, - -1, 55, 106, -1 -}; - -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ + /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 200, 200, 202, 207, 208, 214, 226, 230, 241, @@ -795,13 +704,13 @@ static const char *const yytname[] = "func_call", "direct_func_call", "opt_variable", "delete_subscript_list", "delete_subscript", "delete_exp_list", "bracketed_exp_list", "subscript", "subscript_list", "simple_variable", "variable", "opt_incdec", "l_brace", - "r_brace", "r_paren", "opt_semi", "semi", "colon", "comma", YY_NULL + "r_brace", "r_paren", "opt_semi", "semi", "colon", "comma", YY_NULLPTR }; #endif # ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ +/* YYTOKNUM[NUM] -- (External) token number corresponding to the + (internal) symbol number NUM (which must be that of a token). */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, @@ -815,110 +724,18 @@ static const yytype_uint16 yytoknum[] = }; # endif -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = -{ - 0, 75, 76, 76, 76, 76, 76, 77, 77, 77, - 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, - 80, 80, 80, 80, 80, 81, 82, 82, 82, 82, - 83, 83, 84, 86, 85, 87, 87, 88, 88, 88, - 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 91, 91, 91, 91, 91, 92, 91, 91, - 94, 93, 95, 93, 93, 93, 96, 96, 97, 97, - 97, 98, 98, 99, 99, 99, 99, 99, 100, 100, - 101, 101, 102, 103, 102, 104, 104, 105, 105, 106, - 106, 107, 107, 108, 108, 109, 109, 109, 109, 109, - 110, 110, 111, 111, 112, 112, 112, 112, 112, 112, - 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, - 114, 115, 115, 116, 116, 117, 117, 117, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, - 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, - 121, 121, 122, 123, 123, 124, 124, 125, 125, 126, - 127, 128, 128, 129, 130, 130, 131, 131, 132, 132, - 132, 133, 134, 135, 136, 136, 137, 138, 139 -}; +#define YYPACT_NINF -273 -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = -{ - 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, - 4, 4, 1, 2, 1, 1, 2, 1, 0, 1, - 4, 1, 1, 1, 1, 5, 1, 1, 1, 2, - 1, 1, 6, 0, 3, 1, 1, 0, 2, 2, - 1, 2, 2, 3, 1, 9, 6, 8, 8, 12, - 11, 1, 2, 2, 2, 2, 3, 0, 4, 2, - 0, 4, 0, 4, 4, 1, 0, 1, 0, 2, - 2, 5, 4, 1, 2, 2, 1, 1, 1, 1, - 1, 3, 0, 0, 3, 6, 9, 1, 2, 0, - 1, 0, 2, 0, 1, 1, 3, 1, 2, 3, - 0, 1, 0, 1, 1, 3, 1, 2, 3, 3, - 3, 3, 3, 3, 3, 3, 5, 1, 1, 1, - 2, 1, 1, 1, 1, 1, 1, 2, 1, 3, - 3, 3, 3, 3, 3, 3, 2, 2, 5, 4, - 3, 3, 3, 3, 3, 3, 1, 2, 3, 4, - 4, 1, 1, 1, 2, 2, 1, 1, 2, 2, - 1, 2, 4, 0, 1, 0, 2, 1, 2, 1, - 3, 1, 2, 2, 1, 2, 1, 3, 1, 1, - 0, 2, 2, 1, 0, 1, 1, 1, 2 -}; +#define yypact_value_is_default(Yystate) \ + (!!((Yystate) == (-273))) -/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const yytype_uint8 yydefact[] = -{ - 2, 0, 1, 6, 0, 174, 156, 157, 21, 22, - 0, 23, 24, 163, 0, 0, 0, 151, 5, 87, - 36, 0, 0, 35, 0, 0, 0, 0, 3, 0, - 0, 146, 33, 4, 19, 117, 125, 126, 128, 152, - 160, 176, 153, 0, 0, 171, 0, 175, 27, 26, - 30, 31, 0, 0, 28, 91, 164, 154, 155, 0, - 0, 0, 159, 153, 158, 147, 0, 180, 153, 106, - 0, 104, 0, 0, 161, 89, 186, 7, 8, 40, - 37, 89, 9, 0, 88, 121, 0, 0, 0, 0, - 0, 89, 122, 124, 123, 0, 0, 127, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 119, 118, 136, 137, 0, 0, 0, 0, 104, 0, - 173, 172, 29, 0, 0, 135, 0, 0, 0, 178, - 179, 177, 107, 89, 183, 0, 0, 148, 14, 0, - 0, 17, 0, 0, 90, 181, 0, 41, 34, 113, - 114, 111, 112, 0, 0, 115, 163, 133, 134, 130, - 131, 132, 129, 144, 145, 141, 142, 143, 140, 120, - 110, 162, 170, 97, 95, 0, 0, 92, 149, 150, - 108, 188, 0, 109, 105, 13, 10, 16, 11, 39, - 0, 57, 0, 0, 0, 89, 0, 0, 0, 78, - 79, 0, 100, 0, 89, 38, 51, 0, 60, 44, - 65, 37, 184, 89, 0, 20, 139, 89, 98, 0, - 138, 0, 100, 62, 0, 0, 0, 0, 66, 52, - 53, 54, 0, 101, 55, 182, 59, 0, 0, 89, - 185, 42, 116, 32, 99, 96, 0, 0, 165, 0, - 0, 0, 0, 174, 67, 0, 56, 0, 82, 80, - 43, 25, 89, 58, 63, 0, 167, 169, 64, 89, - 89, 0, 0, 89, 0, 83, 61, 0, 166, 168, - 0, 0, 0, 0, 0, 81, 0, 85, 68, 46, - 0, 89, 0, 89, 84, 89, 0, 89, 0, 89, - 66, 0, 70, 0, 0, 69, 0, 47, 48, 66, - 0, 86, 73, 76, 0, 0, 77, 0, 187, 89, - 45, 0, 89, 75, 74, 89, 37, 89, 0, 37, - 0, 0, 50, 0, 49 -}; +#define YYTABLE_NINF -104 -/* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_int16 yydefgoto[] = -{ - -1, 1, 28, 140, 143, 29, 77, 53, 54, 30, - 31, 83, 32, 146, 78, 205, 206, 222, 207, 237, - 248, 255, 296, 305, 317, 208, 258, 276, 286, 209, - 144, 145, 125, 175, 176, 232, 116, 117, 210, 115, - 94, 95, 35, 36, 37, 38, 39, 40, 55, 264, - 265, 266, 45, 46, 47, 41, 42, 131, 211, 212, - 137, 239, 213, 319, 136 -}; +#define yytable_value_is_error(Yytable_value) \ + (!!((Yytable_value) == (-104))) -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -273 + /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ static const yytype_int16 yypact[] = { -273, 376, -273, -273, -27, -21, -273, -273, -273, -273, @@ -957,7 +774,48 @@ static const yytype_int16 yypact[] = 448, 710, -273, 522, -273 }; -/* YYPGOTO[NTERM-NUM]. */ + /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE does not specify something else to do. Zero + means the default is an error. */ +static const yytype_uint8 yydefact[] = +{ + 2, 0, 1, 6, 0, 174, 156, 157, 21, 22, + 0, 23, 24, 163, 0, 0, 0, 151, 5, 87, + 36, 0, 0, 35, 0, 0, 0, 0, 3, 0, + 0, 146, 33, 4, 19, 117, 125, 126, 128, 152, + 160, 176, 153, 0, 0, 171, 0, 175, 27, 26, + 30, 31, 0, 0, 28, 91, 164, 154, 155, 0, + 0, 0, 159, 153, 158, 147, 0, 180, 153, 106, + 0, 104, 0, 0, 161, 89, 186, 7, 8, 40, + 37, 89, 9, 0, 88, 121, 0, 0, 0, 0, + 0, 89, 122, 124, 123, 0, 0, 127, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 119, 118, 136, 137, 0, 0, 0, 0, 104, 0, + 173, 172, 29, 0, 0, 135, 0, 0, 0, 178, + 179, 177, 107, 89, 183, 0, 0, 148, 14, 0, + 0, 17, 0, 0, 90, 181, 0, 41, 34, 113, + 114, 111, 112, 0, 0, 115, 163, 133, 134, 130, + 131, 132, 129, 144, 145, 141, 142, 143, 140, 120, + 110, 162, 170, 97, 95, 0, 0, 92, 149, 150, + 108, 188, 0, 109, 105, 13, 10, 16, 11, 39, + 0, 57, 0, 0, 0, 89, 0, 0, 0, 78, + 79, 0, 100, 0, 89, 38, 51, 0, 60, 44, + 65, 37, 184, 89, 0, 20, 139, 89, 98, 0, + 138, 0, 100, 62, 0, 0, 0, 0, 66, 52, + 53, 54, 0, 101, 55, 182, 59, 0, 0, 89, + 185, 42, 116, 32, 99, 96, 0, 0, 165, 0, + 0, 0, 0, 174, 67, 0, 56, 0, 82, 80, + 43, 25, 89, 58, 63, 0, 167, 169, 64, 89, + 89, 0, 0, 89, 0, 83, 61, 0, 166, 168, + 0, 0, 0, 0, 0, 81, 0, 85, 68, 46, + 0, 89, 0, 89, 84, 89, 0, 89, 0, 89, + 66, 0, 70, 0, 0, 69, 0, 47, 48, 66, + 0, 86, 73, 76, 0, 0, 77, 0, 187, 89, + 45, 0, 89, 75, 74, 89, 37, 89, 0, 37, + 0, 0, 50, 0, 49 +}; + + /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -273, -273, -273, -273, -273, -273, 208, -273, -273, -273, @@ -969,10 +827,21 @@ static const yytype_int16 yypgoto[] = -46, -273, -25, -57, 85 }; -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -104 + /* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int16 yydefgoto[] = +{ + -1, 1, 28, 140, 143, 29, 77, 53, 54, 30, + 31, 83, 32, 146, 78, 205, 206, 222, 207, 237, + 248, 255, 296, 305, 317, 208, 258, 276, 286, 209, + 144, 145, 125, 175, 176, 232, 116, 117, 210, 115, + 94, 95, 35, 36, 37, 38, 39, 40, 55, 264, + 265, 266, 45, 46, 47, 41, 42, 131, 211, 212, + 137, 239, 213, 319, 136 +}; + + /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule whose + number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { 34, 80, 80, 70, 81, 126, 127, 260, 121, 238, @@ -1093,12 +962,6 @@ static const yytype_int16 yytable[] = 0, 90, 214, 0, 92, 93 }; -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-273))) - -#define yytable_value_is_error(Yytable_value) \ - (!!((Yytable_value) == (-104))) - static const yytype_int16 yycheck[] = { 1, 29, 30, 26, 29, 59, 60, 238, 46, 211, @@ -1219,8 +1082,8 @@ static const yytype_int16 yycheck[] = -1, 53, 54, -1, 56, 57 }; -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ + /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 76, 0, 1, 3, 4, 7, 8, 17, 18, @@ -1259,30 +1122,64 @@ static const yytype_uint8 yystos[] = 88, 106, 90, 88, 90 }; -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - - -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. However, - YYFAIL appears to be in use. Nevertheless, it is formally deprecated - in Bison 2.4.2's NEWS entry, where a plan to phase it out is - discussed. */ - -#define YYFAIL goto yyerrlab -#if defined YYFAIL - /* This is here to suppress warnings from the GCC cpp's - -Wunused-macros. Normally we don't worry about that warning, but - some users do, and we want to make it easy for users to remove - YYFAIL uses, which will produce warnings from Bison 2.5. */ -#endif + /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 75, 76, 76, 76, 76, 76, 77, 77, 77, + 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, + 80, 80, 80, 80, 80, 81, 82, 82, 82, 82, + 83, 83, 84, 86, 85, 87, 87, 88, 88, 88, + 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 91, 91, 91, 91, 91, 92, 91, 91, + 94, 93, 95, 93, 93, 93, 96, 96, 97, 97, + 97, 98, 98, 99, 99, 99, 99, 99, 100, 100, + 101, 101, 102, 103, 102, 104, 104, 105, 105, 106, + 106, 107, 107, 108, 108, 109, 109, 109, 109, 109, + 110, 110, 111, 111, 112, 112, 112, 112, 112, 112, + 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, + 114, 115, 115, 116, 116, 117, 117, 117, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, + 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 121, 121, 122, 123, 123, 124, 124, 125, 125, 126, + 127, 128, 128, 129, 130, 130, 131, 131, 132, 132, + 132, 133, 134, 135, 136, 136, 137, 138, 139 +}; + + /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, + 4, 4, 1, 2, 1, 1, 2, 1, 0, 1, + 4, 1, 1, 1, 1, 5, 1, 1, 1, 2, + 1, 1, 6, 0, 3, 1, 1, 0, 2, 2, + 1, 2, 2, 3, 1, 9, 6, 8, 8, 12, + 11, 1, 2, 2, 2, 2, 3, 0, 4, 2, + 0, 4, 0, 4, 4, 1, 0, 1, 0, 2, + 2, 5, 4, 1, 2, 2, 1, 1, 1, 1, + 1, 3, 0, 0, 3, 6, 9, 1, 2, 0, + 1, 0, 2, 0, 1, 1, 3, 1, 2, 3, + 0, 1, 0, 1, 1, 3, 1, 2, 3, 3, + 3, 3, 3, 3, 3, 3, 5, 1, 1, 1, + 2, 1, 1, 1, 1, 1, 1, 2, 1, 3, + 3, 3, 3, 3, 3, 3, 2, 2, 5, 4, + 3, 3, 3, 3, 3, 3, 1, 2, 3, 4, + 4, 1, 1, 1, 2, 2, 1, 1, 2, 2, + 1, 2, 4, 0, 1, 0, 2, 1, 2, 1, + 3, 1, 2, 2, 1, 2, 1, 3, 1, 1, + 0, 2, 2, 1, 0, 1, 1, 1, 2 +}; + + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + #define YYRECOVERING() (!!yyerrstatus) @@ -1299,27 +1196,15 @@ do \ else \ { \ yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (YYID (0)) + YYERROR; \ + } \ +while (0) /* Error token number */ -#define YYTERROR 1 -#define YYERRCODE 256 +#define YYTERROR 1 +#define YYERRCODE 256 -/* This macro is provided for backward compatibility. */ -#ifndef YY_LOCATION_PRINT -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -#endif - - -/* YYLEX -- calling `yylex' with the right arguments. */ -#ifdef YYLEX_PARAM -# define YYLEX yylex (YYLEX_PARAM) -#else -# define YYLEX yylex () -#endif /* Enable debugging if requested. */ #if YYDEBUG @@ -1329,40 +1214,36 @@ while (YYID (0)) # define YYFPRINTF fprintf # endif -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (YYID (0)) +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Type, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (YYID (0)) +/* This macro is provided for backward compatibility. */ +#ifndef YY_LOCATION_PRINT +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +#endif -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + + +/*----------------------------------------. +| Print this symbol's value on YYOUTPUT. | +`----------------------------------------*/ -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) -#else -static void -yy_symbol_value_print (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; -#endif { FILE *yyo = yyoutput; YYUSE (yyo); @@ -1371,8 +1252,6 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep) # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# else - YYUSE (yyoutput); # endif YYUSE (yytype); } @@ -1382,22 +1261,11 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep) | Print this symbol on YYOUTPUT. | `--------------------------------*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) -#else -static void -yy_symbol_print (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; -#endif { - if (yytype < YYNTOKENS) - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + YYFPRINTF (yyoutput, "%s %s (", + yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep); YYFPRINTF (yyoutput, ")"); @@ -1408,16 +1276,8 @@ yy_symbol_print (yyoutput, yytype, yyvaluep) | TOP (included). | `------------------------------------------------------------------*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) -#else -static void -yy_stack_print (yybottom, yytop) - yytype_int16 *yybottom; - yytype_int16 *yytop; -#endif { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@ -1428,49 +1288,42 @@ yy_stack_print (yybottom, yytop) YYFPRINTF (stderr, "\n"); } -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (YYID (0)) +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void -yy_reduce_print (YYSTYPE *yyvsp, int yyrule) -#else -static void -yy_reduce_print (yyvsp, yyrule) - YYSTYPE *yyvsp; - int yyrule; -#endif +yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) { + unsigned long int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - yyrule - 1, yylno); + yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], - &(yyvsp[(yyi + 1) - (yynrhs)]) - ); + yy_symbol_print (stderr, + yystos[yyssp[yyi + 1 - yynrhs]], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); YYFPRINTF (stderr, "\n"); } } -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyvsp, Rule); \ -} while (YYID (0)) +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyssp, yyvsp, Rule); \ +} while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ @@ -1484,7 +1337,7 @@ int yydebug; /* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH +#ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif @@ -1507,15 +1360,8 @@ int yydebug; # define yystrlen strlen # else /* Return the length of YYSTR. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) -#else -static YYSIZE_T -yystrlen (yystr) - const char *yystr; -#endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) @@ -1531,16 +1377,8 @@ yystrlen (yystr) # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) -#else -static char * -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -#endif { char *yyd = yydest; const char *yys = yysrc; @@ -1570,27 +1408,27 @@ yytnamerr (char *yyres, const char *yystr) char const *yyp = yystr; for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } do_not_strip_quotes: ; } @@ -1613,11 +1451,11 @@ static int yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); + YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ - const char *yyformat = YY_NULL; + const char *yyformat = YY_NULLPTR; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per @@ -1625,10 +1463,6 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, int yycount = 0; /* There are many possibilities here to consider: - - Assume YYFAIL is not used. It's too flawed to consider. See - - for details. YYERROR is fine as it does not invoke this - function. - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected @@ -1678,7 +1512,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, } yyarg[yycount++] = yytname[yyx]; { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); + YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; @@ -1745,26 +1579,17 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, | Release the memory associated to this symbol. | `-----------------------------------------------*/ -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) -#else -static void -yydestruct (yymsg, yytype, yyvaluep) - const char *yymsg; - int yytype; - YYSTYPE *yyvaluep; -#endif { YYUSE (yyvaluep); - if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END } @@ -1773,18 +1598,8 @@ yydestruct (yymsg, yytype, yyvaluep) /* The lookahead symbol. */ int yychar; - -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ -#endif - /* The semantic value of the lookahead symbol. */ -YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); - +YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; @@ -1793,35 +1608,16 @@ int yynerrs; | yyparse. | `----------*/ -#ifdef YYPARSE_PARAM -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -yyparse (void *YYPARSE_PARAM) -#else -int -yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -#endif -#else /* ! YYPARSE_PARAM */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) int yyparse (void) -#else -int -yyparse () - -#endif -#endif { int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: - `yyss': related to states. - `yyvs': related to semantic values. + 'yyss': related to states. + 'yyvs': related to semantic values. Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ @@ -1889,23 +1685,23 @@ yyparse () #ifdef yyoverflow { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); - - yyss = yyss1; - yyvs = yyvs1; + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE @@ -1913,22 +1709,22 @@ yyparse () # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; + goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; + yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss_alloc, yyss); - YYSTACK_RELOCATE (yyvs_alloc, yyvs); + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ @@ -1937,10 +1733,10 @@ yyparse () yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) - YYABORT; + YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); @@ -1969,7 +1765,7 @@ yybackup: if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); - yychar = YYLEX; + yychar = yylex (); } if (yychar <= YYEOF) @@ -2034,7 +1830,7 @@ yyreduce: yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. + '$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison @@ -2048,27 +1844,26 @@ yyreduce: switch (yyn) { case 3: -/* Line 1787 of yacc.c */ -#line 203 "awkgram.y" +#line 203 "awkgram.y" /* yacc.c:1646 */ { rule = 0; yyerrok; } +#line 1853 "awkgram.c" /* yacc.c:1646 */ break; case 5: -/* Line 1787 of yacc.c */ -#line 209 "awkgram.y" +#line 209 "awkgram.y" /* yacc.c:1646 */ { next_sourcefile(); if (sourcefile == srcfiles) process_deferred(); } +#line 1863 "awkgram.c" /* yacc.c:1646 */ break; case 6: -/* Line 1787 of yacc.c */ -#line 215 "awkgram.y" +#line 215 "awkgram.y" /* yacc.c:1646 */ { rule = 0; /* @@ -2077,277 +1872,277 @@ yyreduce: */ /* yyerrok; */ } +#line 1876 "awkgram.c" /* yacc.c:1646 */ break; case 7: -/* Line 1787 of yacc.c */ -#line 227 "awkgram.y" +#line 227 "awkgram.y" /* yacc.c:1646 */ { - (void) append_rule((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)])); + (void) append_rule((yyvsp[-1]), (yyvsp[0])); } +#line 1884 "awkgram.c" /* yacc.c:1646 */ break; case 8: -/* Line 1787 of yacc.c */ -#line 231 "awkgram.y" +#line 231 "awkgram.y" /* yacc.c:1646 */ { if (rule != Rule) { msg(_("%s blocks must have an action part"), ruletab[rule]); errcount++; - } else if ((yyvsp[(1) - (2)]) == NULL) { + } else if ((yyvsp[-1]) == NULL) { msg(_("each rule must have a pattern or an action part")); errcount++; } else /* pattern rule with non-empty pattern */ - (void) append_rule((yyvsp[(1) - (2)]), NULL); + (void) append_rule((yyvsp[-1]), NULL); } +#line 1899 "awkgram.c" /* yacc.c:1646 */ break; case 9: -/* Line 1787 of yacc.c */ -#line 242 "awkgram.y" +#line 242 "awkgram.y" /* yacc.c:1646 */ { in_function = NULL; - (void) mk_function((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)])); + (void) mk_function((yyvsp[-1]), (yyvsp[0])); yyerrok; } +#line 1909 "awkgram.c" /* yacc.c:1646 */ break; case 10: -/* Line 1787 of yacc.c */ -#line 248 "awkgram.y" +#line 248 "awkgram.y" /* yacc.c:1646 */ { want_source = false; yyerrok; } +#line 1918 "awkgram.c" /* yacc.c:1646 */ break; case 11: -/* Line 1787 of yacc.c */ -#line 253 "awkgram.y" +#line 253 "awkgram.y" /* yacc.c:1646 */ { want_source = false; yyerrok; } +#line 1927 "awkgram.c" /* yacc.c:1646 */ break; case 12: -/* Line 1787 of yacc.c */ -#line 261 "awkgram.y" +#line 261 "awkgram.y" /* yacc.c:1646 */ { - if (include_source((yyvsp[(1) - (1)])) < 0) + if (include_source((yyvsp[0])) < 0) YYABORT; - efree((yyvsp[(1) - (1)])->lextok); - bcfree((yyvsp[(1) - (1)])); + efree((yyvsp[0])->lextok); + bcfree((yyvsp[0])); (yyval) = NULL; } +#line 1939 "awkgram.c" /* yacc.c:1646 */ break; case 13: -/* Line 1787 of yacc.c */ -#line 269 "awkgram.y" +#line 269 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 1945 "awkgram.c" /* yacc.c:1646 */ break; case 14: -/* Line 1787 of yacc.c */ -#line 271 "awkgram.y" +#line 271 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 1951 "awkgram.c" /* yacc.c:1646 */ break; case 15: -/* Line 1787 of yacc.c */ -#line 276 "awkgram.y" +#line 276 "awkgram.y" /* yacc.c:1646 */ { - if (load_library((yyvsp[(1) - (1)])) < 0) + if (load_library((yyvsp[0])) < 0) YYABORT; - efree((yyvsp[(1) - (1)])->lextok); - bcfree((yyvsp[(1) - (1)])); + efree((yyvsp[0])->lextok); + bcfree((yyvsp[0])); (yyval) = NULL; } +#line 1963 "awkgram.c" /* yacc.c:1646 */ break; case 16: -/* Line 1787 of yacc.c */ -#line 284 "awkgram.y" +#line 284 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 1969 "awkgram.c" /* yacc.c:1646 */ break; case 17: -/* Line 1787 of yacc.c */ -#line 286 "awkgram.y" +#line 286 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 1975 "awkgram.c" /* yacc.c:1646 */ break; case 18: -/* Line 1787 of yacc.c */ -#line 291 "awkgram.y" +#line 291 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; rule = Rule; } +#line 1981 "awkgram.c" /* yacc.c:1646 */ break; case 19: -/* Line 1787 of yacc.c */ -#line 293 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); rule = Rule; } +#line 293 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); rule = Rule; } +#line 1987 "awkgram.c" /* yacc.c:1646 */ break; case 20: -/* Line 1787 of yacc.c */ -#line 295 "awkgram.y" +#line 295 "awkgram.y" /* yacc.c:1646 */ { INSTRUCTION *tp; - add_lint((yyvsp[(1) - (4)]), LINT_assign_in_cond); - add_lint((yyvsp[(4) - (4)]), LINT_assign_in_cond); + add_lint((yyvsp[-3]), LINT_assign_in_cond); + add_lint((yyvsp[0]), LINT_assign_in_cond); tp = instruction(Op_no_op); - list_prepend((yyvsp[(1) - (4)]), bcalloc(Op_line_range, !!do_pretty_print + 1, 0)); - (yyvsp[(1) - (4)])->nexti->triggered = false; - (yyvsp[(1) - (4)])->nexti->target_jmp = (yyvsp[(4) - (4)])->nexti; + list_prepend((yyvsp[-3]), bcalloc(Op_line_range, !!do_pretty_print + 1, 0)); + (yyvsp[-3])->nexti->triggered = false; + (yyvsp[-3])->nexti->target_jmp = (yyvsp[0])->nexti; - list_append((yyvsp[(1) - (4)]), instruction(Op_cond_pair)); - (yyvsp[(1) - (4)])->lasti->line_range = (yyvsp[(1) - (4)])->nexti; - (yyvsp[(1) - (4)])->lasti->target_jmp = tp; + list_append((yyvsp[-3]), instruction(Op_cond_pair)); + (yyvsp[-3])->lasti->line_range = (yyvsp[-3])->nexti; + (yyvsp[-3])->lasti->target_jmp = tp; - list_append((yyvsp[(4) - (4)]), instruction(Op_cond_pair)); - (yyvsp[(4) - (4)])->lasti->line_range = (yyvsp[(1) - (4)])->nexti; - (yyvsp[(4) - (4)])->lasti->target_jmp = tp; + list_append((yyvsp[0]), instruction(Op_cond_pair)); + (yyvsp[0])->lasti->line_range = (yyvsp[-3])->nexti; + (yyvsp[0])->lasti->target_jmp = tp; if (do_pretty_print) { - ((yyvsp[(1) - (4)])->nexti + 1)->condpair_left = (yyvsp[(1) - (4)])->lasti; - ((yyvsp[(1) - (4)])->nexti + 1)->condpair_right = (yyvsp[(4) - (4)])->lasti; + ((yyvsp[-3])->nexti + 1)->condpair_left = (yyvsp[-3])->lasti; + ((yyvsp[-3])->nexti + 1)->condpair_right = (yyvsp[0])->lasti; } - (yyval) = list_append(list_merge((yyvsp[(1) - (4)]), (yyvsp[(4) - (4)])), tp); + (yyval) = list_append(list_merge((yyvsp[-3]), (yyvsp[0])), tp); rule = Rule; } +#line 2017 "awkgram.c" /* yacc.c:1646 */ break; case 21: -/* Line 1787 of yacc.c */ -#line 321 "awkgram.y" +#line 321 "awkgram.y" /* yacc.c:1646 */ { static int begin_seen = 0; if (do_lint_old && ++begin_seen == 2) - warning_ln((yyvsp[(1) - (1)])->source_line, + warning_ln((yyvsp[0])->source_line, _("old awk does not support multiple `BEGIN' or `END' rules")); - (yyvsp[(1) - (1)])->in_rule = rule = BEGIN; - (yyvsp[(1) - (1)])->source_file = source; - (yyval) = (yyvsp[(1) - (1)]); + (yyvsp[0])->in_rule = rule = BEGIN; + (yyvsp[0])->source_file = source; + (yyval) = (yyvsp[0]); } +#line 2032 "awkgram.c" /* yacc.c:1646 */ break; case 22: -/* Line 1787 of yacc.c */ -#line 332 "awkgram.y" +#line 332 "awkgram.y" /* yacc.c:1646 */ { static int end_seen = 0; if (do_lint_old && ++end_seen == 2) - warning_ln((yyvsp[(1) - (1)])->source_line, + warning_ln((yyvsp[0])->source_line, _("old awk does not support multiple `BEGIN' or `END' rules")); - (yyvsp[(1) - (1)])->in_rule = rule = END; - (yyvsp[(1) - (1)])->source_file = source; - (yyval) = (yyvsp[(1) - (1)]); + (yyvsp[0])->in_rule = rule = END; + (yyvsp[0])->source_file = source; + (yyval) = (yyvsp[0]); } +#line 2047 "awkgram.c" /* yacc.c:1646 */ break; case 23: -/* Line 1787 of yacc.c */ -#line 343 "awkgram.y" +#line 343 "awkgram.y" /* yacc.c:1646 */ { - (yyvsp[(1) - (1)])->in_rule = rule = BEGINFILE; - (yyvsp[(1) - (1)])->source_file = source; - (yyval) = (yyvsp[(1) - (1)]); + (yyvsp[0])->in_rule = rule = BEGINFILE; + (yyvsp[0])->source_file = source; + (yyval) = (yyvsp[0]); } +#line 2057 "awkgram.c" /* yacc.c:1646 */ break; case 24: -/* Line 1787 of yacc.c */ -#line 349 "awkgram.y" +#line 349 "awkgram.y" /* yacc.c:1646 */ { - (yyvsp[(1) - (1)])->in_rule = rule = ENDFILE; - (yyvsp[(1) - (1)])->source_file = source; - (yyval) = (yyvsp[(1) - (1)]); + (yyvsp[0])->in_rule = rule = ENDFILE; + (yyvsp[0])->source_file = source; + (yyval) = (yyvsp[0]); } +#line 2067 "awkgram.c" /* yacc.c:1646 */ break; case 25: -/* Line 1787 of yacc.c */ -#line 358 "awkgram.y" +#line 358 "awkgram.y" /* yacc.c:1646 */ { - if ((yyvsp[(2) - (5)]) == NULL) + if ((yyvsp[-3]) == NULL) (yyval) = list_create(instruction(Op_no_op)); else - (yyval) = (yyvsp[(2) - (5)]); + (yyval) = (yyvsp[-3]); } +#line 2078 "awkgram.c" /* yacc.c:1646 */ break; case 26: -/* Line 1787 of yacc.c */ -#line 368 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 368 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 2084 "awkgram.c" /* yacc.c:1646 */ break; case 27: -/* Line 1787 of yacc.c */ -#line 370 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 370 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 2090 "awkgram.c" /* yacc.c:1646 */ break; case 28: -/* Line 1787 of yacc.c */ -#line 372 "awkgram.y" +#line 372 "awkgram.y" /* yacc.c:1646 */ { yyerror(_("`%s' is a built-in function, it cannot be redefined"), tokstart); YYABORT; } +#line 2100 "awkgram.c" /* yacc.c:1646 */ break; case 29: -/* Line 1787 of yacc.c */ -#line 378 "awkgram.y" - { (yyval) = (yyvsp[(2) - (2)]); } +#line 378 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 2106 "awkgram.c" /* yacc.c:1646 */ break; case 32: -/* Line 1787 of yacc.c */ -#line 388 "awkgram.y" +#line 388 "awkgram.y" /* yacc.c:1646 */ { - (yyvsp[(1) - (6)])->source_file = source; - if (install_function((yyvsp[(2) - (6)])->lextok, (yyvsp[(1) - (6)]), (yyvsp[(4) - (6)])) < 0) + (yyvsp[-5])->source_file = source; + if (install_function((yyvsp[-4])->lextok, (yyvsp[-5]), (yyvsp[-2])) < 0) YYABORT; - in_function = (yyvsp[(2) - (6)])->lextok; - (yyvsp[(2) - (6)])->lextok = NULL; - bcfree((yyvsp[(2) - (6)])); + in_function = (yyvsp[-4])->lextok; + (yyvsp[-4])->lextok = NULL; + bcfree((yyvsp[-4])); /* $4 already free'd in install_function */ - (yyval) = (yyvsp[(1) - (6)]); + (yyval) = (yyvsp[-5]); } +#line 2121 "awkgram.c" /* yacc.c:1646 */ break; case 33: -/* Line 1787 of yacc.c */ -#line 406 "awkgram.y" +#line 406 "awkgram.y" /* yacc.c:1646 */ { want_regexp = true; } +#line 2127 "awkgram.c" /* yacc.c:1646 */ break; case 34: -/* Line 1787 of yacc.c */ -#line 408 "awkgram.y" +#line 408 "awkgram.y" /* yacc.c:1646 */ { NODE *n, *exp; char *re; size_t len; - re = (yyvsp[(3) - (3)])->lextok; - (yyvsp[(3) - (3)])->lextok = NULL; + re = (yyvsp[0])->lextok; + (yyvsp[0])->lextok = NULL; len = strlen(re); if (do_lint) { if (len == 0) - lintwarn_ln((yyvsp[(3) - (3)])->source_line, + lintwarn_ln((yyvsp[0])->source_line, _("regexp constant `//' looks like a C++ comment, but is not")); else if (re[0] == '*' && re[len-1] == '*') /* possible C comment */ - lintwarn_ln((yyvsp[(3) - (3)])->source_line, + lintwarn_ln((yyvsp[0])->source_line, _("regexp constant `/%s/' looks like a C comment, but is not"), re); } @@ -2357,73 +2152,73 @@ yyreduce: unref(exp); YYABORT; } - (yyval) = (yyvsp[(3) - (3)]); + (yyval) = (yyvsp[0]); (yyval)->opcode = Op_match_rec; (yyval)->memory = n; } +#line 2160 "awkgram.c" /* yacc.c:1646 */ break; case 35: -/* Line 1787 of yacc.c */ -#line 440 "awkgram.y" - { bcfree((yyvsp[(1) - (1)])); } +#line 440 "awkgram.y" /* yacc.c:1646 */ + { bcfree((yyvsp[0])); } +#line 2166 "awkgram.c" /* yacc.c:1646 */ break; case 37: -/* Line 1787 of yacc.c */ -#line 446 "awkgram.y" +#line 446 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 2172 "awkgram.c" /* yacc.c:1646 */ break; case 38: -/* Line 1787 of yacc.c */ -#line 448 "awkgram.y" +#line 448 "awkgram.y" /* yacc.c:1646 */ { - if ((yyvsp[(2) - (2)]) == NULL) - (yyval) = (yyvsp[(1) - (2)]); + if ((yyvsp[0]) == NULL) + (yyval) = (yyvsp[-1]); else { - add_lint((yyvsp[(2) - (2)]), LINT_no_effect); - if ((yyvsp[(1) - (2)]) == NULL) - (yyval) = (yyvsp[(2) - (2)]); + add_lint((yyvsp[0]), LINT_no_effect); + if ((yyvsp[-1]) == NULL) + (yyval) = (yyvsp[0]); else - (yyval) = list_merge((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)])); + (yyval) = list_merge((yyvsp[-1]), (yyvsp[0])); } yyerrok; } +#line 2189 "awkgram.c" /* yacc.c:1646 */ break; case 39: -/* Line 1787 of yacc.c */ -#line 461 "awkgram.y" +#line 461 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 2195 "awkgram.c" /* yacc.c:1646 */ break; case 42: -/* Line 1787 of yacc.c */ -#line 471 "awkgram.y" +#line 471 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 2201 "awkgram.c" /* yacc.c:1646 */ break; case 43: -/* Line 1787 of yacc.c */ -#line 473 "awkgram.y" - { (yyval) = (yyvsp[(2) - (3)]); } +#line 473 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[-1]); } +#line 2207 "awkgram.c" /* yacc.c:1646 */ break; case 44: -/* Line 1787 of yacc.c */ -#line 475 "awkgram.y" +#line 475 "awkgram.y" /* yacc.c:1646 */ { if (do_pretty_print) - (yyval) = list_prepend((yyvsp[(1) - (1)]), instruction(Op_exec_count)); + (yyval) = list_prepend((yyvsp[0]), instruction(Op_exec_count)); else - (yyval) = (yyvsp[(1) - (1)]); + (yyval) = (yyvsp[0]); } +#line 2218 "awkgram.c" /* yacc.c:1646 */ break; case 45: -/* Line 1787 of yacc.c */ -#line 482 "awkgram.y" +#line 482 "awkgram.y" /* yacc.c:1646 */ { INSTRUCTION *dflt, *curr = NULL, *cexp, *cstmt; INSTRUCTION *ip, *nextc, *tbreak; @@ -2438,9 +2233,9 @@ yyreduce: dflt = instruction(Op_jmp); dflt->target_jmp = tbreak; /* if no case match and no explicit default */ - if ((yyvsp[(7) - (9)]) != NULL) { - curr = (yyvsp[(7) - (9)])->nexti; - bcfree((yyvsp[(7) - (9)])); /* Op_list */ + if ((yyvsp[-2]) != NULL) { + curr = (yyvsp[-2])->nexti; + bcfree((yyvsp[-2])); /* Op_list */ } /* else curr = NULL; */ @@ -2496,13 +2291,13 @@ yyreduce: if (case_values != NULL) efree(case_values); - ip = (yyvsp[(3) - (9)]); + ip = (yyvsp[-6]); if (do_pretty_print) { - (void) list_prepend(ip, (yyvsp[(1) - (9)])); + (void) list_prepend(ip, (yyvsp[-8])); (void) list_prepend(ip, instruction(Op_exec_count)); - (yyvsp[(1) - (9)])->target_break = tbreak; - ((yyvsp[(1) - (9)]) + 1)->switch_start = cexp->nexti; - ((yyvsp[(1) - (9)]) + 1)->switch_end = cexp->lasti; + (yyvsp[-8])->target_break = tbreak; + ((yyvsp[-8]) + 1)->switch_start = cexp->nexti; + ((yyvsp[-8]) + 1)->switch_end = cexp->lasti; }/* else $1 is NULL */ @@ -2513,11 +2308,11 @@ yyreduce: break_allowed--; fix_break_continue(ip, tbreak, NULL); } +#line 2312 "awkgram.c" /* yacc.c:1646 */ break; case 46: -/* Line 1787 of yacc.c */ -#line 572 "awkgram.y" +#line 572 "awkgram.y" /* yacc.c:1646 */ { /* * ----------------- @@ -2535,22 +2330,22 @@ yyreduce: INSTRUCTION *ip, *tbreak, *tcont; tbreak = instruction(Op_no_op); - add_lint((yyvsp[(3) - (6)]), LINT_assign_in_cond); - tcont = (yyvsp[(3) - (6)])->nexti; - ip = list_append((yyvsp[(3) - (6)]), instruction(Op_jmp_false)); + add_lint((yyvsp[-3]), LINT_assign_in_cond); + tcont = (yyvsp[-3])->nexti; + ip = list_append((yyvsp[-3]), instruction(Op_jmp_false)); ip->lasti->target_jmp = tbreak; if (do_pretty_print) { (void) list_append(ip, instruction(Op_exec_count)); - (yyvsp[(1) - (6)])->target_break = tbreak; - (yyvsp[(1) - (6)])->target_continue = tcont; - ((yyvsp[(1) - (6)]) + 1)->while_body = ip->lasti; - (void) list_prepend(ip, (yyvsp[(1) - (6)])); + (yyvsp[-5])->target_break = tbreak; + (yyvsp[-5])->target_continue = tcont; + ((yyvsp[-5]) + 1)->while_body = ip->lasti; + (void) list_prepend(ip, (yyvsp[-5])); }/* else $1 is NULL */ - if ((yyvsp[(6) - (6)]) != NULL) - (void) list_merge(ip, (yyvsp[(6) - (6)])); + if ((yyvsp[0]) != NULL) + (void) list_merge(ip, (yyvsp[0])); (void) list_append(ip, instruction(Op_jmp)); ip->lasti->target_jmp = tcont; (yyval) = list_append(ip, tbreak); @@ -2559,11 +2354,11 @@ yyreduce: continue_allowed--; fix_break_continue(ip, tbreak, tcont); } +#line 2358 "awkgram.c" /* yacc.c:1646 */ break; case 47: -/* Line 1787 of yacc.c */ -#line 614 "awkgram.y" +#line 614 "awkgram.y" /* yacc.c:1646 */ { /* * ----------------- @@ -2580,12 +2375,12 @@ yyreduce: INSTRUCTION *ip, *tbreak, *tcont; tbreak = instruction(Op_no_op); - tcont = (yyvsp[(6) - (8)])->nexti; - add_lint((yyvsp[(6) - (8)]), LINT_assign_in_cond); - if ((yyvsp[(3) - (8)]) != NULL) - ip = list_merge((yyvsp[(3) - (8)]), (yyvsp[(6) - (8)])); + tcont = (yyvsp[-2])->nexti; + add_lint((yyvsp[-2]), LINT_assign_in_cond); + if ((yyvsp[-5]) != NULL) + ip = list_merge((yyvsp[-5]), (yyvsp[-2])); else - ip = list_prepend((yyvsp[(6) - (8)]), instruction(Op_no_op)); + ip = list_prepend((yyvsp[-2]), instruction(Op_no_op)); if (do_pretty_print) (void) list_prepend(ip, instruction(Op_exec_count)); (void) list_append(ip, instruction(Op_jmp_true)); @@ -2597,29 +2392,29 @@ yyreduce: fix_break_continue(ip, tbreak, tcont); if (do_pretty_print) { - (yyvsp[(1) - (8)])->target_break = tbreak; - (yyvsp[(1) - (8)])->target_continue = tcont; - ((yyvsp[(1) - (8)]) + 1)->doloop_cond = tcont; - (yyval) = list_prepend(ip, (yyvsp[(1) - (8)])); - bcfree((yyvsp[(4) - (8)])); + (yyvsp[-7])->target_break = tbreak; + (yyvsp[-7])->target_continue = tcont; + ((yyvsp[-7]) + 1)->doloop_cond = tcont; + (yyval) = list_prepend(ip, (yyvsp[-7])); + bcfree((yyvsp[-4])); } /* else $1 and $4 are NULLs */ } +#line 2404 "awkgram.c" /* yacc.c:1646 */ break; case 48: -/* Line 1787 of yacc.c */ -#line 656 "awkgram.y" +#line 656 "awkgram.y" /* yacc.c:1646 */ { INSTRUCTION *ip; - char *var_name = (yyvsp[(3) - (8)])->lextok; - - if ((yyvsp[(8) - (8)]) != NULL - && (yyvsp[(8) - (8)])->lasti->opcode == Op_K_delete - && (yyvsp[(8) - (8)])->lasti->expr_count == 1 - && (yyvsp[(8) - (8)])->nexti->opcode == Op_push - && ((yyvsp[(8) - (8)])->nexti->memory->type != Node_var || !((yyvsp[(8) - (8)])->nexti->memory->var_update)) - && strcmp((yyvsp[(8) - (8)])->nexti->memory->vname, var_name) == 0 + char *var_name = (yyvsp[-5])->lextok; + + if ((yyvsp[0]) != NULL + && (yyvsp[0])->lasti->opcode == Op_K_delete + && (yyvsp[0])->lasti->expr_count == 1 + && (yyvsp[0])->nexti->opcode == Op_push + && ((yyvsp[0])->nexti->memory->type != Node_var || !((yyvsp[0])->nexti->memory->var_update)) + && strcmp((yyvsp[0])->nexti->memory->vname, var_name) == 0 ) { /* Efficiency hack. Recognize the special case of @@ -2636,25 +2431,25 @@ yyreduce: */ NODE *arr = NULL; - ip = (yyvsp[(8) - (8)])->nexti->nexti; - if ((yyvsp[(5) - (8)])->nexti->opcode == Op_push && (yyvsp[(5) - (8)])->lasti == (yyvsp[(5) - (8)])->nexti) - arr = (yyvsp[(5) - (8)])->nexti->memory; + ip = (yyvsp[0])->nexti->nexti; + if ((yyvsp[-3])->nexti->opcode == Op_push && (yyvsp[-3])->lasti == (yyvsp[-3])->nexti) + arr = (yyvsp[-3])->nexti->memory; if (arr != NULL && ip->opcode == Op_no_op && ip->nexti->opcode == Op_push_array && strcmp(ip->nexti->memory->vname, arr->vname) == 0 - && ip->nexti->nexti == (yyvsp[(8) - (8)])->lasti + && ip->nexti->nexti == (yyvsp[0])->lasti ) { - (void) make_assignable((yyvsp[(8) - (8)])->nexti); - (yyvsp[(8) - (8)])->lasti->opcode = Op_K_delete_loop; - (yyvsp[(8) - (8)])->lasti->expr_count = 0; - if ((yyvsp[(1) - (8)]) != NULL) - bcfree((yyvsp[(1) - (8)])); + (void) make_assignable((yyvsp[0])->nexti); + (yyvsp[0])->lasti->opcode = Op_K_delete_loop; + (yyvsp[0])->lasti->expr_count = 0; + if ((yyvsp[-7]) != NULL) + bcfree((yyvsp[-7])); efree(var_name); - bcfree((yyvsp[(3) - (8)])); - bcfree((yyvsp[(4) - (8)])); - bcfree((yyvsp[(5) - (8)])); - (yyval) = (yyvsp[(8) - (8)]); + bcfree((yyvsp[-5])); + bcfree((yyvsp[-4])); + bcfree((yyvsp[-3])); + (yyval) = (yyvsp[0]); } else goto regular_loop; } else { @@ -2671,50 +2466,50 @@ yyreduce: * ib:[Op_arrayfor_final ] */ regular_loop: - ip = (yyvsp[(5) - (8)]); + ip = (yyvsp[-3]); ip->nexti->opcode = Op_push_array; tbreak = instruction(Op_arrayfor_final); - (yyvsp[(4) - (8)])->opcode = Op_arrayfor_incr; - (yyvsp[(4) - (8)])->array_var = variable((yyvsp[(3) - (8)])->source_line, var_name, Node_var); - (yyvsp[(4) - (8)])->target_jmp = tbreak; - tcont = (yyvsp[(4) - (8)]); - (yyvsp[(3) - (8)])->opcode = Op_arrayfor_init; - (yyvsp[(3) - (8)])->target_jmp = tbreak; - (void) list_append(ip, (yyvsp[(3) - (8)])); + (yyvsp[-4])->opcode = Op_arrayfor_incr; + (yyvsp[-4])->array_var = variable((yyvsp[-5])->source_line, var_name, Node_var); + (yyvsp[-4])->target_jmp = tbreak; + tcont = (yyvsp[-4]); + (yyvsp[-5])->opcode = Op_arrayfor_init; + (yyvsp[-5])->target_jmp = tbreak; + (void) list_append(ip, (yyvsp[-5])); if (do_pretty_print) { - (yyvsp[(1) - (8)])->opcode = Op_K_arrayfor; - (yyvsp[(1) - (8)])->target_continue = tcont; - (yyvsp[(1) - (8)])->target_break = tbreak; - (void) list_append(ip, (yyvsp[(1) - (8)])); + (yyvsp[-7])->opcode = Op_K_arrayfor; + (yyvsp[-7])->target_continue = tcont; + (yyvsp[-7])->target_break = tbreak; + (void) list_append(ip, (yyvsp[-7])); } /* else $1 is NULL */ /* add update_FOO instruction if necessary */ - if ((yyvsp[(4) - (8)])->array_var->type == Node_var && (yyvsp[(4) - (8)])->array_var->var_update) { + if ((yyvsp[-4])->array_var->type == Node_var && (yyvsp[-4])->array_var->var_update) { (void) list_append(ip, instruction(Op_var_update)); - ip->lasti->update_var = (yyvsp[(4) - (8)])->array_var->var_update; + ip->lasti->update_var = (yyvsp[-4])->array_var->var_update; } - (void) list_append(ip, (yyvsp[(4) - (8)])); + (void) list_append(ip, (yyvsp[-4])); /* add set_FOO instruction if necessary */ - if ((yyvsp[(4) - (8)])->array_var->type == Node_var && (yyvsp[(4) - (8)])->array_var->var_assign) { + if ((yyvsp[-4])->array_var->type == Node_var && (yyvsp[-4])->array_var->var_assign) { (void) list_append(ip, instruction(Op_var_assign)); - ip->lasti->assign_var = (yyvsp[(4) - (8)])->array_var->var_assign; + ip->lasti->assign_var = (yyvsp[-4])->array_var->var_assign; } if (do_pretty_print) { (void) list_append(ip, instruction(Op_exec_count)); - ((yyvsp[(1) - (8)]) + 1)->forloop_cond = (yyvsp[(4) - (8)]); - ((yyvsp[(1) - (8)]) + 1)->forloop_body = ip->lasti; + ((yyvsp[-7]) + 1)->forloop_cond = (yyvsp[-4]); + ((yyvsp[-7]) + 1)->forloop_body = ip->lasti; } - if ((yyvsp[(8) - (8)]) != NULL) - (void) list_merge(ip, (yyvsp[(8) - (8)])); + if ((yyvsp[0]) != NULL) + (void) list_merge(ip, (yyvsp[0])); (void) list_append(ip, instruction(Op_jmp)); - ip->lasti->target_jmp = (yyvsp[(4) - (8)]); + ip->lasti->target_jmp = (yyvsp[-4]); (yyval) = list_append(ip, tbreak); fix_break_continue(ip, tbreak, tcont); } @@ -2722,157 +2517,157 @@ regular_loop: break_allowed--; continue_allowed--; } +#line 2521 "awkgram.c" /* yacc.c:1646 */ break; case 49: -/* Line 1787 of yacc.c */ -#line 769 "awkgram.y" +#line 769 "awkgram.y" /* yacc.c:1646 */ { - (yyval) = mk_for_loop((yyvsp[(1) - (12)]), (yyvsp[(3) - (12)]), (yyvsp[(6) - (12)]), (yyvsp[(9) - (12)]), (yyvsp[(12) - (12)])); + (yyval) = mk_for_loop((yyvsp[-11]), (yyvsp[-9]), (yyvsp[-6]), (yyvsp[-3]), (yyvsp[0])); break_allowed--; continue_allowed--; } +#line 2532 "awkgram.c" /* yacc.c:1646 */ break; case 50: -/* Line 1787 of yacc.c */ -#line 776 "awkgram.y" +#line 776 "awkgram.y" /* yacc.c:1646 */ { - (yyval) = mk_for_loop((yyvsp[(1) - (11)]), (yyvsp[(3) - (11)]), (INSTRUCTION *) NULL, (yyvsp[(8) - (11)]), (yyvsp[(11) - (11)])); + (yyval) = mk_for_loop((yyvsp[-10]), (yyvsp[-8]), (INSTRUCTION *) NULL, (yyvsp[-3]), (yyvsp[0])); break_allowed--; continue_allowed--; } +#line 2543 "awkgram.c" /* yacc.c:1646 */ break; case 51: -/* Line 1787 of yacc.c */ -#line 783 "awkgram.y" +#line 783 "awkgram.y" /* yacc.c:1646 */ { if (do_pretty_print) - (yyval) = list_prepend((yyvsp[(1) - (1)]), instruction(Op_exec_count)); + (yyval) = list_prepend((yyvsp[0]), instruction(Op_exec_count)); else - (yyval) = (yyvsp[(1) - (1)]); + (yyval) = (yyvsp[0]); } +#line 2554 "awkgram.c" /* yacc.c:1646 */ break; case 52: -/* Line 1787 of yacc.c */ -#line 793 "awkgram.y" +#line 793 "awkgram.y" /* yacc.c:1646 */ { if (! break_allowed) - error_ln((yyvsp[(1) - (2)])->source_line, + error_ln((yyvsp[-1])->source_line, _("`break' is not allowed outside a loop or switch")); - (yyvsp[(1) - (2)])->target_jmp = NULL; - (yyval) = list_create((yyvsp[(1) - (2)])); + (yyvsp[-1])->target_jmp = NULL; + (yyval) = list_create((yyvsp[-1])); } +#line 2567 "awkgram.c" /* yacc.c:1646 */ break; case 53: -/* Line 1787 of yacc.c */ -#line 802 "awkgram.y" +#line 802 "awkgram.y" /* yacc.c:1646 */ { if (! continue_allowed) - error_ln((yyvsp[(1) - (2)])->source_line, + error_ln((yyvsp[-1])->source_line, _("`continue' is not allowed outside a loop")); - (yyvsp[(1) - (2)])->target_jmp = NULL; - (yyval) = list_create((yyvsp[(1) - (2)])); + (yyvsp[-1])->target_jmp = NULL; + (yyval) = list_create((yyvsp[-1])); } +#line 2580 "awkgram.c" /* yacc.c:1646 */ break; case 54: -/* Line 1787 of yacc.c */ -#line 811 "awkgram.y" +#line 811 "awkgram.y" /* yacc.c:1646 */ { /* if inside function (rule = 0), resolve context at run-time */ if (rule && rule != Rule) - error_ln((yyvsp[(1) - (2)])->source_line, + error_ln((yyvsp[-1])->source_line, _("`next' used in %s action"), ruletab[rule]); - (yyvsp[(1) - (2)])->target_jmp = ip_rec; - (yyval) = list_create((yyvsp[(1) - (2)])); + (yyvsp[-1])->target_jmp = ip_rec; + (yyval) = list_create((yyvsp[-1])); } +#line 2593 "awkgram.c" /* yacc.c:1646 */ break; case 55: -/* Line 1787 of yacc.c */ -#line 820 "awkgram.y" +#line 820 "awkgram.y" /* yacc.c:1646 */ { /* if inside function (rule = 0), resolve context at run-time */ if (rule == BEGIN || rule == END || rule == ENDFILE) - error_ln((yyvsp[(1) - (2)])->source_line, + error_ln((yyvsp[-1])->source_line, _("`nextfile' used in %s action"), ruletab[rule]); - (yyvsp[(1) - (2)])->target_newfile = ip_newfile; - (yyvsp[(1) - (2)])->target_endfile = ip_endfile; - (yyval) = list_create((yyvsp[(1) - (2)])); + (yyvsp[-1])->target_newfile = ip_newfile; + (yyvsp[-1])->target_endfile = ip_endfile; + (yyval) = list_create((yyvsp[-1])); } +#line 2608 "awkgram.c" /* yacc.c:1646 */ break; case 56: -/* Line 1787 of yacc.c */ -#line 831 "awkgram.y" +#line 831 "awkgram.y" /* yacc.c:1646 */ { /* Initialize the two possible jump targets, the actual target * is resolved at run-time. */ - (yyvsp[(1) - (3)])->target_end = ip_end; /* first instruction in end_block */ - (yyvsp[(1) - (3)])->target_atexit = ip_atexit; /* cleanup and go home */ + (yyvsp[-2])->target_end = ip_end; /* first instruction in end_block */ + (yyvsp[-2])->target_atexit = ip_atexit; /* cleanup and go home */ - if ((yyvsp[(2) - (3)]) == NULL) { - (yyval) = list_create((yyvsp[(1) - (3)])); + if ((yyvsp[-1]) == NULL) { + (yyval) = list_create((yyvsp[-2])); (void) list_prepend((yyval), instruction(Op_push_i)); (yyval)->nexti->memory = dupnode(Nnull_string); } else - (yyval) = list_append((yyvsp[(2) - (3)]), (yyvsp[(1) - (3)])); + (yyval) = list_append((yyvsp[-1]), (yyvsp[-2])); } +#line 2627 "awkgram.c" /* yacc.c:1646 */ break; case 57: -/* Line 1787 of yacc.c */ -#line 846 "awkgram.y" +#line 846 "awkgram.y" /* yacc.c:1646 */ { if (! in_function) yyerror(_("`return' used outside function context")); } +#line 2636 "awkgram.c" /* yacc.c:1646 */ break; case 58: -/* Line 1787 of yacc.c */ -#line 849 "awkgram.y" +#line 849 "awkgram.y" /* yacc.c:1646 */ { - if ((yyvsp[(3) - (4)]) == NULL) { - (yyval) = list_create((yyvsp[(1) - (4)])); + if ((yyvsp[-1]) == NULL) { + (yyval) = list_create((yyvsp[-3])); (void) list_prepend((yyval), instruction(Op_push_i)); (yyval)->nexti->memory = dupnode(Nnull_string); } else { if (do_optimize - && (yyvsp[(3) - (4)])->lasti->opcode == Op_func_call - && strcmp((yyvsp[(3) - (4)])->lasti->func_name, in_function) == 0 + && (yyvsp[-1])->lasti->opcode == Op_func_call + && strcmp((yyvsp[-1])->lasti->func_name, in_function) == 0 ) { /* Do tail recursion optimization. Tail * call without a return value is recognized * in mk_function(). */ - ((yyvsp[(3) - (4)])->lasti + 1)->tail_call = true; + ((yyvsp[-1])->lasti + 1)->tail_call = true; } - (yyval) = list_append((yyvsp[(3) - (4)]), (yyvsp[(1) - (4)])); + (yyval) = list_append((yyvsp[-1]), (yyvsp[-3])); } } +#line 2661 "awkgram.c" /* yacc.c:1646 */ break; case 60: -/* Line 1787 of yacc.c */ -#line 881 "awkgram.y" +#line 881 "awkgram.y" /* yacc.c:1646 */ { in_print = true; in_parens = 0; } +#line 2667 "awkgram.c" /* yacc.c:1646 */ break; case 61: -/* Line 1787 of yacc.c */ -#line 882 "awkgram.y" +#line 882 "awkgram.y" /* yacc.c:1646 */ { /* * Optimization: plain `print' has no expression list, so $3 is null. @@ -2880,12 +2675,12 @@ regular_loop: * which is faster for these two cases. */ - if ((yyvsp[(1) - (4)])->opcode == Op_K_print && - ((yyvsp[(3) - (4)]) == NULL - || ((yyvsp[(3) - (4)])->lasti->opcode == Op_field_spec - && (yyvsp[(3) - (4)])->nexti->nexti->nexti == (yyvsp[(3) - (4)])->lasti - && (yyvsp[(3) - (4)])->nexti->nexti->opcode == Op_push_i - && (yyvsp[(3) - (4)])->nexti->nexti->memory->type == Node_val) + if ((yyvsp[-3])->opcode == Op_K_print && + ((yyvsp[-1]) == NULL + || ((yyvsp[-1])->lasti->opcode == Op_field_spec + && (yyvsp[-1])->nexti->nexti->nexti == (yyvsp[-1])->lasti + && (yyvsp[-1])->nexti->nexti->opcode == Op_push_i + && (yyvsp[-1])->nexti->nexti->memory->type == Node_val) ) ) { static bool warned = false; @@ -2898,37 +2693,37 @@ regular_loop: * [Op_K_print_rec | NULL | redir_type | expr_count] */ - if ((yyvsp[(3) - (4)]) != NULL) { - NODE *n = (yyvsp[(3) - (4)])->nexti->nexti->memory; + if ((yyvsp[-1]) != NULL) { + NODE *n = (yyvsp[-1])->nexti->nexti->memory; if (! iszero(n)) goto regular_print; - bcfree((yyvsp[(3) - (4)])->lasti); /* Op_field_spec */ + bcfree((yyvsp[-1])->lasti); /* Op_field_spec */ unref(n); /* Node_val */ - bcfree((yyvsp[(3) - (4)])->nexti->nexti); /* Op_push_i */ - bcfree((yyvsp[(3) - (4)])->nexti); /* Op_list */ - bcfree((yyvsp[(3) - (4)])); /* Op_list */ + bcfree((yyvsp[-1])->nexti->nexti); /* Op_push_i */ + bcfree((yyvsp[-1])->nexti); /* Op_list */ + bcfree((yyvsp[-1])); /* Op_list */ } else { if (do_lint && (rule == BEGIN || rule == END) && ! warned) { warned = true; - lintwarn_ln((yyvsp[(1) - (4)])->source_line, + lintwarn_ln((yyvsp[-3])->source_line, _("plain `print' in BEGIN or END rule should probably be `print \"\"'")); } } - (yyvsp[(1) - (4)])->expr_count = 0; - (yyvsp[(1) - (4)])->opcode = Op_K_print_rec; - if ((yyvsp[(4) - (4)]) == NULL) { /* no redircetion */ - (yyvsp[(1) - (4)])->redir_type = redirect_none; - (yyval) = list_create((yyvsp[(1) - (4)])); + (yyvsp[-3])->expr_count = 0; + (yyvsp[-3])->opcode = Op_K_print_rec; + if ((yyvsp[0]) == NULL) { /* no redircetion */ + (yyvsp[-3])->redir_type = redirect_none; + (yyval) = list_create((yyvsp[-3])); } else { INSTRUCTION *ip; - ip = (yyvsp[(4) - (4)])->nexti; - (yyvsp[(1) - (4)])->redir_type = ip->redir_type; - (yyvsp[(4) - (4)])->nexti = ip->nexti; + ip = (yyvsp[0])->nexti; + (yyvsp[-3])->redir_type = ip->redir_type; + (yyvsp[0])->nexti = ip->nexti; bcfree(ip); - (yyval) = list_append((yyvsp[(4) - (4)]), (yyvsp[(1) - (4)])); + (yyval) = list_append((yyvsp[0]), (yyvsp[-3])); } } else { /* ----------------- @@ -2941,59 +2736,59 @@ regular_loop: * */ regular_print: - if ((yyvsp[(4) - (4)]) == NULL) { /* no redirection */ - if ((yyvsp[(3) - (4)]) == NULL) { /* printf without arg */ - (yyvsp[(1) - (4)])->expr_count = 0; - (yyvsp[(1) - (4)])->redir_type = redirect_none; - (yyval) = list_create((yyvsp[(1) - (4)])); + if ((yyvsp[0]) == NULL) { /* no redirection */ + if ((yyvsp[-1]) == NULL) { /* printf without arg */ + (yyvsp[-3])->expr_count = 0; + (yyvsp[-3])->redir_type = redirect_none; + (yyval) = list_create((yyvsp[-3])); } else { - INSTRUCTION *t = (yyvsp[(3) - (4)]); - (yyvsp[(1) - (4)])->expr_count = count_expressions(&t, false); - (yyvsp[(1) - (4)])->redir_type = redirect_none; - (yyval) = list_append(t, (yyvsp[(1) - (4)])); + INSTRUCTION *t = (yyvsp[-1]); + (yyvsp[-3])->expr_count = count_expressions(&t, false); + (yyvsp[-3])->redir_type = redirect_none; + (yyval) = list_append(t, (yyvsp[-3])); } } else { INSTRUCTION *ip; - ip = (yyvsp[(4) - (4)])->nexti; - (yyvsp[(1) - (4)])->redir_type = ip->redir_type; - (yyvsp[(4) - (4)])->nexti = ip->nexti; + ip = (yyvsp[0])->nexti; + (yyvsp[-3])->redir_type = ip->redir_type; + (yyvsp[0])->nexti = ip->nexti; bcfree(ip); - if ((yyvsp[(3) - (4)]) == NULL) { - (yyvsp[(1) - (4)])->expr_count = 0; - (yyval) = list_append((yyvsp[(4) - (4)]), (yyvsp[(1) - (4)])); + if ((yyvsp[-1]) == NULL) { + (yyvsp[-3])->expr_count = 0; + (yyval) = list_append((yyvsp[0]), (yyvsp[-3])); } else { - INSTRUCTION *t = (yyvsp[(3) - (4)]); - (yyvsp[(1) - (4)])->expr_count = count_expressions(&t, false); - (yyval) = list_append(list_merge((yyvsp[(4) - (4)]), t), (yyvsp[(1) - (4)])); + INSTRUCTION *t = (yyvsp[-1]); + (yyvsp[-3])->expr_count = count_expressions(&t, false); + (yyval) = list_append(list_merge((yyvsp[0]), t), (yyvsp[-3])); } } } } +#line 2768 "awkgram.c" /* yacc.c:1646 */ break; case 62: -/* Line 1787 of yacc.c */ -#line 979 "awkgram.y" +#line 979 "awkgram.y" /* yacc.c:1646 */ { sub_counter = 0; } +#line 2774 "awkgram.c" /* yacc.c:1646 */ break; case 63: -/* Line 1787 of yacc.c */ -#line 980 "awkgram.y" +#line 980 "awkgram.y" /* yacc.c:1646 */ { - char *arr = (yyvsp[(2) - (4)])->lextok; + char *arr = (yyvsp[-2])->lextok; - (yyvsp[(2) - (4)])->opcode = Op_push_array; - (yyvsp[(2) - (4)])->memory = variable((yyvsp[(2) - (4)])->source_line, arr, Node_var_new); + (yyvsp[-2])->opcode = Op_push_array; + (yyvsp[-2])->memory = variable((yyvsp[-2])->source_line, arr, Node_var_new); if (! do_posix && ! do_traditional) { - if ((yyvsp[(2) - (4)])->memory == symbol_table) + if ((yyvsp[-2])->memory == symbol_table) fatal(_("`delete' is not allowed with SYMTAB")); - else if ((yyvsp[(2) - (4)])->memory == func_table) + else if ((yyvsp[-2])->memory == func_table) fatal(_("`delete' is not allowed with FUNCTAB")); } - if ((yyvsp[(4) - (4)]) == NULL) { + if ((yyvsp[0]) == NULL) { /* * As of September 2012, POSIX has added support * for `delete array'. See: @@ -3005,525 +2800,525 @@ regular_print: * Also, since BWK awk supports it, we don't have to * check do_traditional either. */ - (yyvsp[(1) - (4)])->expr_count = 0; - (yyval) = list_append(list_create((yyvsp[(2) - (4)])), (yyvsp[(1) - (4)])); + (yyvsp[-3])->expr_count = 0; + (yyval) = list_append(list_create((yyvsp[-2])), (yyvsp[-3])); } else { - (yyvsp[(1) - (4)])->expr_count = sub_counter; - (yyval) = list_append(list_append((yyvsp[(4) - (4)]), (yyvsp[(2) - (4)])), (yyvsp[(1) - (4)])); + (yyvsp[-3])->expr_count = sub_counter; + (yyval) = list_append(list_append((yyvsp[0]), (yyvsp[-2])), (yyvsp[-3])); } } +#line 2811 "awkgram.c" /* yacc.c:1646 */ break; case 64: -/* Line 1787 of yacc.c */ -#line 1017 "awkgram.y" +#line 1017 "awkgram.y" /* yacc.c:1646 */ { static bool warned = false; - char *arr = (yyvsp[(3) - (4)])->lextok; + char *arr = (yyvsp[-1])->lextok; if (do_lint && ! warned) { warned = true; - lintwarn_ln((yyvsp[(1) - (4)])->source_line, + lintwarn_ln((yyvsp[-3])->source_line, _("`delete(array)' is a non-portable tawk extension")); } if (do_traditional) { - error_ln((yyvsp[(1) - (4)])->source_line, + error_ln((yyvsp[-3])->source_line, _("`delete(array)' is a non-portable tawk extension")); } - (yyvsp[(3) - (4)])->memory = variable((yyvsp[(3) - (4)])->source_line, arr, Node_var_new); - (yyvsp[(3) - (4)])->opcode = Op_push_array; - (yyvsp[(1) - (4)])->expr_count = 0; - (yyval) = list_append(list_create((yyvsp[(3) - (4)])), (yyvsp[(1) - (4)])); + (yyvsp[-1])->memory = variable((yyvsp[-1])->source_line, arr, Node_var_new); + (yyvsp[-1])->opcode = Op_push_array; + (yyvsp[-3])->expr_count = 0; + (yyval) = list_append(list_create((yyvsp[-1])), (yyvsp[-3])); if (! do_posix && ! do_traditional) { - if ((yyvsp[(3) - (4)])->memory == symbol_table) + if ((yyvsp[-1])->memory == symbol_table) fatal(_("`delete' is not allowed with SYMTAB")); - else if ((yyvsp[(3) - (4)])->memory == func_table) + else if ((yyvsp[-1])->memory == func_table) fatal(_("`delete' is not allowed with FUNCTAB")); } } +#line 2841 "awkgram.c" /* yacc.c:1646 */ break; case 65: -/* Line 1787 of yacc.c */ -#line 1043 "awkgram.y" - { (yyval) = optimize_assignment((yyvsp[(1) - (1)])); } +#line 1043 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = optimize_assignment((yyvsp[0])); } +#line 2847 "awkgram.c" /* yacc.c:1646 */ break; case 66: -/* Line 1787 of yacc.c */ -#line 1048 "awkgram.y" +#line 1048 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 2853 "awkgram.c" /* yacc.c:1646 */ break; case 67: -/* Line 1787 of yacc.c */ -#line 1050 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 1050 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 2859 "awkgram.c" /* yacc.c:1646 */ break; case 68: -/* Line 1787 of yacc.c */ -#line 1055 "awkgram.y" +#line 1055 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 2865 "awkgram.c" /* yacc.c:1646 */ break; case 69: -/* Line 1787 of yacc.c */ -#line 1057 "awkgram.y" +#line 1057 "awkgram.y" /* yacc.c:1646 */ { - if ((yyvsp[(1) - (2)]) == NULL) - (yyval) = list_create((yyvsp[(2) - (2)])); + if ((yyvsp[-1]) == NULL) + (yyval) = list_create((yyvsp[0])); else - (yyval) = list_prepend((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)])); + (yyval) = list_prepend((yyvsp[-1]), (yyvsp[0])); } +#line 2876 "awkgram.c" /* yacc.c:1646 */ break; case 70: -/* Line 1787 of yacc.c */ -#line 1064 "awkgram.y" +#line 1064 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 2882 "awkgram.c" /* yacc.c:1646 */ break; case 71: -/* Line 1787 of yacc.c */ -#line 1069 "awkgram.y" +#line 1069 "awkgram.y" /* yacc.c:1646 */ { - INSTRUCTION *casestmt = (yyvsp[(5) - (5)]); - if ((yyvsp[(5) - (5)]) == NULL) + INSTRUCTION *casestmt = (yyvsp[0]); + if ((yyvsp[0]) == NULL) casestmt = list_create(instruction(Op_no_op)); if (do_pretty_print) (void) list_prepend(casestmt, instruction(Op_exec_count)); - (yyvsp[(1) - (5)])->case_exp = (yyvsp[(2) - (5)]); - (yyvsp[(1) - (5)])->case_stmt = casestmt; - bcfree((yyvsp[(3) - (5)])); - (yyval) = (yyvsp[(1) - (5)]); + (yyvsp[-4])->case_exp = (yyvsp[-3]); + (yyvsp[-4])->case_stmt = casestmt; + bcfree((yyvsp[-2])); + (yyval) = (yyvsp[-4]); } +#line 2898 "awkgram.c" /* yacc.c:1646 */ break; case 72: -/* Line 1787 of yacc.c */ -#line 1081 "awkgram.y" +#line 1081 "awkgram.y" /* yacc.c:1646 */ { - INSTRUCTION *casestmt = (yyvsp[(4) - (4)]); - if ((yyvsp[(4) - (4)]) == NULL) + INSTRUCTION *casestmt = (yyvsp[0]); + if ((yyvsp[0]) == NULL) casestmt = list_create(instruction(Op_no_op)); if (do_pretty_print) (void) list_prepend(casestmt, instruction(Op_exec_count)); - bcfree((yyvsp[(2) - (4)])); - (yyvsp[(1) - (4)])->case_stmt = casestmt; - (yyval) = (yyvsp[(1) - (4)]); + bcfree((yyvsp[-2])); + (yyvsp[-3])->case_stmt = casestmt; + (yyval) = (yyvsp[-3]); } +#line 2913 "awkgram.c" /* yacc.c:1646 */ break; case 73: -/* Line 1787 of yacc.c */ -#line 1095 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 1095 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 2919 "awkgram.c" /* yacc.c:1646 */ break; case 74: -/* Line 1787 of yacc.c */ -#line 1097 "awkgram.y" +#line 1097 "awkgram.y" /* yacc.c:1646 */ { - NODE *n = (yyvsp[(2) - (2)])->memory; + NODE *n = (yyvsp[0])->memory; (void) force_number(n); negate_num(n); - bcfree((yyvsp[(1) - (2)])); - (yyval) = (yyvsp[(2) - (2)]); + bcfree((yyvsp[-1])); + (yyval) = (yyvsp[0]); } +#line 2931 "awkgram.c" /* yacc.c:1646 */ break; case 75: -/* Line 1787 of yacc.c */ -#line 1105 "awkgram.y" +#line 1105 "awkgram.y" /* yacc.c:1646 */ { - bcfree((yyvsp[(1) - (2)])); - (yyval) = (yyvsp[(2) - (2)]); + bcfree((yyvsp[-1])); + (yyval) = (yyvsp[0]); } +#line 2940 "awkgram.c" /* yacc.c:1646 */ break; case 76: -/* Line 1787 of yacc.c */ -#line 1110 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 1110 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 2946 "awkgram.c" /* yacc.c:1646 */ break; case 77: -/* Line 1787 of yacc.c */ -#line 1112 "awkgram.y" +#line 1112 "awkgram.y" /* yacc.c:1646 */ { - (yyvsp[(1) - (1)])->opcode = Op_push_re; - (yyval) = (yyvsp[(1) - (1)]); + (yyvsp[0])->opcode = Op_push_re; + (yyval) = (yyvsp[0]); } +#line 2955 "awkgram.c" /* yacc.c:1646 */ break; case 78: -/* Line 1787 of yacc.c */ -#line 1120 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 1120 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 2961 "awkgram.c" /* yacc.c:1646 */ break; case 79: -/* Line 1787 of yacc.c */ -#line 1122 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 1122 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 2967 "awkgram.c" /* yacc.c:1646 */ break; case 81: -/* Line 1787 of yacc.c */ -#line 1132 "awkgram.y" +#line 1132 "awkgram.y" /* yacc.c:1646 */ { - (yyval) = (yyvsp[(2) - (3)]); + (yyval) = (yyvsp[-1]); } +#line 2975 "awkgram.c" /* yacc.c:1646 */ break; case 82: -/* Line 1787 of yacc.c */ -#line 1139 "awkgram.y" +#line 1139 "awkgram.y" /* yacc.c:1646 */ { in_print = false; in_parens = 0; (yyval) = NULL; } +#line 2985 "awkgram.c" /* yacc.c:1646 */ break; case 83: -/* Line 1787 of yacc.c */ -#line 1144 "awkgram.y" +#line 1144 "awkgram.y" /* yacc.c:1646 */ { in_print = false; in_parens = 0; } +#line 2991 "awkgram.c" /* yacc.c:1646 */ break; case 84: -/* Line 1787 of yacc.c */ -#line 1145 "awkgram.y" +#line 1145 "awkgram.y" /* yacc.c:1646 */ { - if ((yyvsp[(1) - (3)])->redir_type == redirect_twoway - && (yyvsp[(3) - (3)])->lasti->opcode == Op_K_getline_redir - && (yyvsp[(3) - (3)])->lasti->redir_type == redirect_twoway) + if ((yyvsp[-2])->redir_type == redirect_twoway + && (yyvsp[0])->lasti->opcode == Op_K_getline_redir + && (yyvsp[0])->lasti->redir_type == redirect_twoway) yyerror(_("multistage two-way pipelines don't work")); - (yyval) = list_prepend((yyvsp[(3) - (3)]), (yyvsp[(1) - (3)])); + (yyval) = list_prepend((yyvsp[0]), (yyvsp[-2])); } +#line 3003 "awkgram.c" /* yacc.c:1646 */ break; case 85: -/* Line 1787 of yacc.c */ -#line 1156 "awkgram.y" +#line 1156 "awkgram.y" /* yacc.c:1646 */ { - (yyval) = mk_condition((yyvsp[(3) - (6)]), (yyvsp[(1) - (6)]), (yyvsp[(6) - (6)]), NULL, NULL); + (yyval) = mk_condition((yyvsp[-3]), (yyvsp[-5]), (yyvsp[0]), NULL, NULL); } +#line 3011 "awkgram.c" /* yacc.c:1646 */ break; case 86: -/* Line 1787 of yacc.c */ -#line 1161 "awkgram.y" +#line 1161 "awkgram.y" /* yacc.c:1646 */ { - (yyval) = mk_condition((yyvsp[(3) - (9)]), (yyvsp[(1) - (9)]), (yyvsp[(6) - (9)]), (yyvsp[(7) - (9)]), (yyvsp[(9) - (9)])); + (yyval) = mk_condition((yyvsp[-6]), (yyvsp[-8]), (yyvsp[-3]), (yyvsp[-2]), (yyvsp[0])); } +#line 3019 "awkgram.c" /* yacc.c:1646 */ break; case 91: -/* Line 1787 of yacc.c */ -#line 1178 "awkgram.y" +#line 1178 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 3025 "awkgram.c" /* yacc.c:1646 */ break; case 92: -/* Line 1787 of yacc.c */ -#line 1180 "awkgram.y" +#line 1180 "awkgram.y" /* yacc.c:1646 */ { - bcfree((yyvsp[(1) - (2)])); - (yyval) = (yyvsp[(2) - (2)]); + bcfree((yyvsp[-1])); + (yyval) = (yyvsp[0]); } +#line 3034 "awkgram.c" /* yacc.c:1646 */ break; case 93: -/* Line 1787 of yacc.c */ -#line 1188 "awkgram.y" +#line 1188 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 3040 "awkgram.c" /* yacc.c:1646 */ break; case 94: -/* Line 1787 of yacc.c */ -#line 1190 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]) ; } +#line 1190 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]) ; } +#line 3046 "awkgram.c" /* yacc.c:1646 */ break; case 95: -/* Line 1787 of yacc.c */ -#line 1195 "awkgram.y" +#line 1195 "awkgram.y" /* yacc.c:1646 */ { - (yyvsp[(1) - (1)])->param_count = 0; - (yyval) = list_create((yyvsp[(1) - (1)])); + (yyvsp[0])->param_count = 0; + (yyval) = list_create((yyvsp[0])); } +#line 3055 "awkgram.c" /* yacc.c:1646 */ break; case 96: -/* Line 1787 of yacc.c */ -#line 1200 "awkgram.y" +#line 1200 "awkgram.y" /* yacc.c:1646 */ { - (yyvsp[(3) - (3)])->param_count = (yyvsp[(1) - (3)])->lasti->param_count + 1; - (yyval) = list_append((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)])); + (yyvsp[0])->param_count = (yyvsp[-2])->lasti->param_count + 1; + (yyval) = list_append((yyvsp[-2]), (yyvsp[0])); yyerrok; } +#line 3065 "awkgram.c" /* yacc.c:1646 */ break; case 97: -/* Line 1787 of yacc.c */ -#line 1206 "awkgram.y" +#line 1206 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 3071 "awkgram.c" /* yacc.c:1646 */ break; case 98: -/* Line 1787 of yacc.c */ -#line 1208 "awkgram.y" - { (yyval) = (yyvsp[(1) - (2)]); } +#line 1208 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[-1]); } +#line 3077 "awkgram.c" /* yacc.c:1646 */ break; case 99: -/* Line 1787 of yacc.c */ -#line 1210 "awkgram.y" - { (yyval) = (yyvsp[(1) - (3)]); } +#line 1210 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[-2]); } +#line 3083 "awkgram.c" /* yacc.c:1646 */ break; case 100: -/* Line 1787 of yacc.c */ -#line 1216 "awkgram.y" +#line 1216 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 3089 "awkgram.c" /* yacc.c:1646 */ break; case 101: -/* Line 1787 of yacc.c */ -#line 1218 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 1218 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 3095 "awkgram.c" /* yacc.c:1646 */ break; case 102: -/* Line 1787 of yacc.c */ -#line 1223 "awkgram.y" +#line 1223 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 3101 "awkgram.c" /* yacc.c:1646 */ break; case 103: -/* Line 1787 of yacc.c */ -#line 1225 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 1225 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 3107 "awkgram.c" /* yacc.c:1646 */ break; case 104: -/* Line 1787 of yacc.c */ -#line 1230 "awkgram.y" - { (yyval) = mk_expression_list(NULL, (yyvsp[(1) - (1)])); } +#line 1230 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = mk_expression_list(NULL, (yyvsp[0])); } +#line 3113 "awkgram.c" /* yacc.c:1646 */ break; case 105: -/* Line 1787 of yacc.c */ -#line 1232 "awkgram.y" +#line 1232 "awkgram.y" /* yacc.c:1646 */ { - (yyval) = mk_expression_list((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)])); + (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0])); yyerrok; } +#line 3122 "awkgram.c" /* yacc.c:1646 */ break; case 106: -/* Line 1787 of yacc.c */ -#line 1237 "awkgram.y" +#line 1237 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 3128 "awkgram.c" /* yacc.c:1646 */ break; case 107: -/* Line 1787 of yacc.c */ -#line 1239 "awkgram.y" +#line 1239 "awkgram.y" /* yacc.c:1646 */ { /* * Returning the expression list instead of NULL lets * snode get a list of arguments that it can count. */ - (yyval) = (yyvsp[(1) - (2)]); + (yyval) = (yyvsp[-1]); } +#line 3140 "awkgram.c" /* yacc.c:1646 */ break; case 108: -/* Line 1787 of yacc.c */ -#line 1247 "awkgram.y" +#line 1247 "awkgram.y" /* yacc.c:1646 */ { /* Ditto */ - (yyval) = mk_expression_list((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)])); + (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0])); } +#line 3149 "awkgram.c" /* yacc.c:1646 */ break; case 109: -/* Line 1787 of yacc.c */ -#line 1252 "awkgram.y" +#line 1252 "awkgram.y" /* yacc.c:1646 */ { /* Ditto */ - (yyval) = (yyvsp[(1) - (3)]); + (yyval) = (yyvsp[-2]); } +#line 3158 "awkgram.c" /* yacc.c:1646 */ break; case 110: -/* Line 1787 of yacc.c */ -#line 1261 "awkgram.y" +#line 1261 "awkgram.y" /* yacc.c:1646 */ { - if (do_lint && (yyvsp[(3) - (3)])->lasti->opcode == Op_match_rec) - lintwarn_ln((yyvsp[(2) - (3)])->source_line, + 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[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); + (yyval) = mk_assignment((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } +#line 3169 "awkgram.c" /* yacc.c:1646 */ break; case 111: -/* Line 1787 of yacc.c */ -#line 1268 "awkgram.y" - { (yyval) = mk_boolean((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } +#line 1268 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } +#line 3175 "awkgram.c" /* yacc.c:1646 */ break; case 112: -/* Line 1787 of yacc.c */ -#line 1270 "awkgram.y" - { (yyval) = mk_boolean((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } +#line 1270 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } +#line 3181 "awkgram.c" /* yacc.c:1646 */ break; case 113: -/* Line 1787 of yacc.c */ -#line 1272 "awkgram.y" +#line 1272 "awkgram.y" /* yacc.c:1646 */ { - if ((yyvsp[(1) - (3)])->lasti->opcode == Op_match_rec) - warning_ln((yyvsp[(2) - (3)])->source_line, + if ((yyvsp[-2])->lasti->opcode == Op_match_rec) + warning_ln((yyvsp[-1])->source_line, _("regular expression on left of `~' or `!~' operator")); - if ((yyvsp[(3) - (3)])->lasti == (yyvsp[(3) - (3)])->nexti && (yyvsp[(3) - (3)])->nexti->opcode == Op_match_rec) { - (yyvsp[(2) - (3)])->memory = (yyvsp[(3) - (3)])->nexti->memory; - bcfree((yyvsp[(3) - (3)])->nexti); /* Op_match_rec */ - bcfree((yyvsp[(3) - (3)])); /* Op_list */ - (yyval) = list_append((yyvsp[(1) - (3)]), (yyvsp[(2) - (3)])); + if ((yyvsp[0])->lasti == (yyvsp[0])->nexti && (yyvsp[0])->nexti->opcode == Op_match_rec) { + (yyvsp[-1])->memory = (yyvsp[0])->nexti->memory; + bcfree((yyvsp[0])->nexti); /* Op_match_rec */ + bcfree((yyvsp[0])); /* Op_list */ + (yyval) = list_append((yyvsp[-2]), (yyvsp[-1])); } else { - (yyvsp[(2) - (3)])->memory = make_regnode(Node_dynregex, NULL); - (yyval) = list_append(list_merge((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)])), (yyvsp[(2) - (3)])); + (yyvsp[-1])->memory = make_regnode(Node_dynregex, NULL); + (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), (yyvsp[-1])); } } +#line 3201 "awkgram.c" /* yacc.c:1646 */ break; case 114: -/* Line 1787 of yacc.c */ -#line 1288 "awkgram.y" +#line 1288 "awkgram.y" /* yacc.c:1646 */ { if (do_lint_old) - warning_ln((yyvsp[(2) - (3)])->source_line, + warning_ln((yyvsp[-1])->source_line, _("old awk does not support the keyword `in' except after `for'")); - (yyvsp[(3) - (3)])->nexti->opcode = Op_push_array; - (yyvsp[(2) - (3)])->opcode = Op_in_array; - (yyvsp[(2) - (3)])->expr_count = 1; - (yyval) = list_append(list_merge((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)])), (yyvsp[(2) - (3)])); + (yyvsp[0])->nexti->opcode = Op_push_array; + (yyvsp[-1])->opcode = Op_in_array; + (yyvsp[-1])->expr_count = 1; + (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), (yyvsp[-1])); } +#line 3215 "awkgram.c" /* yacc.c:1646 */ break; case 115: -/* Line 1787 of yacc.c */ -#line 1298 "awkgram.y" +#line 1298 "awkgram.y" /* yacc.c:1646 */ { - if (do_lint && (yyvsp[(3) - (3)])->lasti->opcode == Op_match_rec) - lintwarn_ln((yyvsp[(2) - (3)])->source_line, + 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[(1) - (3)]), (yyvsp[(3) - (3)])), (yyvsp[(2) - (3)])); + (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), (yyvsp[-1])); } +#line 3226 "awkgram.c" /* yacc.c:1646 */ break; case 116: -/* Line 1787 of yacc.c */ -#line 1305 "awkgram.y" - { (yyval) = mk_condition((yyvsp[(1) - (5)]), (yyvsp[(2) - (5)]), (yyvsp[(3) - (5)]), (yyvsp[(4) - (5)]), (yyvsp[(5) - (5)])); } +#line 1305 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); } +#line 3232 "awkgram.c" /* yacc.c:1646 */ break; case 117: -/* Line 1787 of yacc.c */ -#line 1307 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 1307 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 3238 "awkgram.c" /* yacc.c:1646 */ break; case 118: -/* Line 1787 of yacc.c */ -#line 1312 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 1312 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 3244 "awkgram.c" /* yacc.c:1646 */ break; case 119: -/* Line 1787 of yacc.c */ -#line 1314 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 1314 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 3250 "awkgram.c" /* yacc.c:1646 */ break; case 120: -/* Line 1787 of yacc.c */ -#line 1316 "awkgram.y" +#line 1316 "awkgram.y" /* yacc.c:1646 */ { - (yyvsp[(2) - (2)])->opcode = Op_assign_quotient; - (yyval) = (yyvsp[(2) - (2)]); + (yyvsp[0])->opcode = Op_assign_quotient; + (yyval) = (yyvsp[0]); } +#line 3259 "awkgram.c" /* yacc.c:1646 */ break; case 121: -/* Line 1787 of yacc.c */ -#line 1324 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 1324 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 3265 "awkgram.c" /* yacc.c:1646 */ break; case 122: -/* Line 1787 of yacc.c */ -#line 1326 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 1326 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 3271 "awkgram.c" /* yacc.c:1646 */ break; case 123: -/* Line 1787 of yacc.c */ -#line 1331 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 1331 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 3277 "awkgram.c" /* yacc.c:1646 */ break; case 124: -/* Line 1787 of yacc.c */ -#line 1333 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 1333 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 3283 "awkgram.c" /* yacc.c:1646 */ break; case 125: -/* Line 1787 of yacc.c */ -#line 1338 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 1338 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 3289 "awkgram.c" /* yacc.c:1646 */ break; case 126: -/* Line 1787 of yacc.c */ -#line 1340 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 1340 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 3295 "awkgram.c" /* yacc.c:1646 */ break; case 127: -/* Line 1787 of yacc.c */ -#line 1342 "awkgram.y" +#line 1342 "awkgram.y" /* yacc.c:1646 */ { int count = 2; bool is_simple_var = false; - if ((yyvsp[(1) - (2)])->lasti->opcode == Op_concat) { + if ((yyvsp[-1])->lasti->opcode == Op_concat) { /* multiple (> 2) adjacent strings optimization */ - is_simple_var = ((yyvsp[(1) - (2)])->lasti->concat_flag & CSVAR); - count = (yyvsp[(1) - (2)])->lasti->expr_count + 1; - (yyvsp[(1) - (2)])->lasti->opcode = Op_no_op; + is_simple_var = ((yyvsp[-1])->lasti->concat_flag & CSVAR); + count = (yyvsp[-1])->lasti->expr_count + 1; + (yyvsp[-1])->lasti->opcode = Op_no_op; } else { - is_simple_var = ((yyvsp[(1) - (2)])->nexti->opcode == Op_push - && (yyvsp[(1) - (2)])->lasti == (yyvsp[(1) - (2)])->nexti); /* first exp. is a simple + is_simple_var = ((yyvsp[-1])->nexti->opcode == Op_push + && (yyvsp[-1])->lasti == (yyvsp[-1])->nexti); /* first exp. is a simple * variable?; kludge for use * in Op_assign_concat. */ } if (do_optimize - && (yyvsp[(1) - (2)])->nexti == (yyvsp[(1) - (2)])->lasti && (yyvsp[(1) - (2)])->nexti->opcode == Op_push_i - && (yyvsp[(2) - (2)])->nexti == (yyvsp[(2) - (2)])->lasti && (yyvsp[(2) - (2)])->nexti->opcode == Op_push_i + && (yyvsp[-1])->nexti == (yyvsp[-1])->lasti && (yyvsp[-1])->nexti->opcode == Op_push_i + && (yyvsp[0])->nexti == (yyvsp[0])->lasti && (yyvsp[0])->nexti->opcode == Op_push_i ) { - NODE *n1 = (yyvsp[(1) - (2)])->nexti->memory; - NODE *n2 = (yyvsp[(2) - (2)])->nexti->memory; + NODE *n1 = (yyvsp[-1])->nexti->memory; + NODE *n2 = (yyvsp[0])->nexti->memory; size_t nlen; n1 = force_string(n1); @@ -3536,193 +3331,193 @@ regular_print: n1->flags &= ~(NUMCUR|NUMBER|NUMINT); n1->flags |= (STRING|STRCUR); unref(n2); - bcfree((yyvsp[(2) - (2)])->nexti); - bcfree((yyvsp[(2) - (2)])); - (yyval) = (yyvsp[(1) - (2)]); + bcfree((yyvsp[0])->nexti); + bcfree((yyvsp[0])); + (yyval) = (yyvsp[-1]); } else { - (yyval) = list_append(list_merge((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)])), instruction(Op_concat)); + (yyval) = list_append(list_merge((yyvsp[-1]), (yyvsp[0])), instruction(Op_concat)); (yyval)->lasti->concat_flag = (is_simple_var ? CSVAR : 0); (yyval)->lasti->expr_count = count; if (count > max_args) max_args = count; } } +#line 3346 "awkgram.c" /* yacc.c:1646 */ break; case 129: -/* Line 1787 of yacc.c */ -#line 1394 "awkgram.y" - { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } +#line 1394 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } +#line 3352 "awkgram.c" /* yacc.c:1646 */ break; case 130: -/* Line 1787 of yacc.c */ -#line 1396 "awkgram.y" - { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } +#line 1396 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } +#line 3358 "awkgram.c" /* yacc.c:1646 */ break; case 131: -/* Line 1787 of yacc.c */ -#line 1398 "awkgram.y" - { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } +#line 1398 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } +#line 3364 "awkgram.c" /* yacc.c:1646 */ break; case 132: -/* Line 1787 of yacc.c */ -#line 1400 "awkgram.y" - { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } +#line 1400 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } +#line 3370 "awkgram.c" /* yacc.c:1646 */ break; case 133: -/* Line 1787 of yacc.c */ -#line 1402 "awkgram.y" - { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } +#line 1402 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } +#line 3376 "awkgram.c" /* yacc.c:1646 */ break; case 134: -/* Line 1787 of yacc.c */ -#line 1404 "awkgram.y" - { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } +#line 1404 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } +#line 3382 "awkgram.c" /* yacc.c:1646 */ break; case 135: -/* Line 1787 of yacc.c */ -#line 1406 "awkgram.y" +#line 1406 "awkgram.y" /* yacc.c:1646 */ { /* * In BEGINFILE/ENDFILE, allow `getline var < file' */ if (rule == BEGINFILE || rule == ENDFILE) { - if ((yyvsp[(2) - (3)]) != NULL && (yyvsp[(3) - (3)]) != NULL) + if ((yyvsp[-1]) != NULL && (yyvsp[0]) != NULL) ; /* all ok */ else { - if ((yyvsp[(2) - (3)]) != NULL) - error_ln((yyvsp[(1) - (3)])->source_line, + if ((yyvsp[-1]) != NULL) + error_ln((yyvsp[-2])->source_line, _("`getline var' invalid inside `%s' rule"), ruletab[rule]); else - error_ln((yyvsp[(1) - (3)])->source_line, + error_ln((yyvsp[-2])->source_line, _("`getline' invalid inside `%s' rule"), ruletab[rule]); } } - if (do_lint && rule == END && (yyvsp[(3) - (3)]) == NULL) - lintwarn_ln((yyvsp[(1) - (3)])->source_line, + if (do_lint && rule == END && (yyvsp[0]) == NULL) + lintwarn_ln((yyvsp[-2])->source_line, _("non-redirected `getline' undefined inside END action")); - (yyval) = mk_getline((yyvsp[(1) - (3)]), (yyvsp[(2) - (3)]), (yyvsp[(3) - (3)]), redirect_input); + (yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), redirect_input); } +#line 3409 "awkgram.c" /* yacc.c:1646 */ break; case 136: -/* Line 1787 of yacc.c */ -#line 1429 "awkgram.y" +#line 1429 "awkgram.y" /* yacc.c:1646 */ { - (yyvsp[(2) - (2)])->opcode = Op_postincrement; - (yyval) = mk_assignment((yyvsp[(1) - (2)]), NULL, (yyvsp[(2) - (2)])); + (yyvsp[0])->opcode = Op_postincrement; + (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0])); } +#line 3418 "awkgram.c" /* yacc.c:1646 */ break; case 137: -/* Line 1787 of yacc.c */ -#line 1434 "awkgram.y" +#line 1434 "awkgram.y" /* yacc.c:1646 */ { - (yyvsp[(2) - (2)])->opcode = Op_postdecrement; - (yyval) = mk_assignment((yyvsp[(1) - (2)]), NULL, (yyvsp[(2) - (2)])); + (yyvsp[0])->opcode = Op_postdecrement; + (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0])); } +#line 3427 "awkgram.c" /* yacc.c:1646 */ break; case 138: -/* Line 1787 of yacc.c */ -#line 1439 "awkgram.y" +#line 1439 "awkgram.y" /* yacc.c:1646 */ { if (do_lint_old) { - warning_ln((yyvsp[(4) - (5)])->source_line, + warning_ln((yyvsp[-1])->source_line, _("old awk does not support the keyword `in' except after `for'")); - warning_ln((yyvsp[(4) - (5)])->source_line, + warning_ln((yyvsp[-1])->source_line, _("old awk does not support multidimensional arrays")); } - (yyvsp[(5) - (5)])->nexti->opcode = Op_push_array; - (yyvsp[(4) - (5)])->opcode = Op_in_array; - if ((yyvsp[(2) - (5)]) == NULL) { /* error */ + (yyvsp[0])->nexti->opcode = Op_push_array; + (yyvsp[-1])->opcode = Op_in_array; + if ((yyvsp[-3]) == NULL) { /* error */ errcount++; - (yyvsp[(4) - (5)])->expr_count = 0; - (yyval) = list_merge((yyvsp[(5) - (5)]), (yyvsp[(4) - (5)])); + (yyvsp[-1])->expr_count = 0; + (yyval) = list_merge((yyvsp[0]), (yyvsp[-1])); } else { - INSTRUCTION *t = (yyvsp[(2) - (5)]); - (yyvsp[(4) - (5)])->expr_count = count_expressions(&t, false); - (yyval) = list_append(list_merge(t, (yyvsp[(5) - (5)])), (yyvsp[(4) - (5)])); + INSTRUCTION *t = (yyvsp[-3]); + (yyvsp[-1])->expr_count = count_expressions(&t, false); + (yyval) = list_append(list_merge(t, (yyvsp[0])), (yyvsp[-1])); } } +#line 3451 "awkgram.c" /* yacc.c:1646 */ break; case 139: -/* Line 1787 of yacc.c */ -#line 1464 "awkgram.y" +#line 1464 "awkgram.y" /* yacc.c:1646 */ { - (yyval) = mk_getline((yyvsp[(3) - (4)]), (yyvsp[(4) - (4)]), (yyvsp[(1) - (4)]), (yyvsp[(2) - (4)])->redir_type); - bcfree((yyvsp[(2) - (4)])); + (yyval) = mk_getline((yyvsp[-1]), (yyvsp[0]), (yyvsp[-3]), (yyvsp[-2])->redir_type); + bcfree((yyvsp[-2])); } +#line 3460 "awkgram.c" /* yacc.c:1646 */ break; case 140: -/* Line 1787 of yacc.c */ -#line 1470 "awkgram.y" - { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } +#line 1470 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } +#line 3466 "awkgram.c" /* yacc.c:1646 */ break; case 141: -/* Line 1787 of yacc.c */ -#line 1472 "awkgram.y" - { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } +#line 1472 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } +#line 3472 "awkgram.c" /* yacc.c:1646 */ break; case 142: -/* Line 1787 of yacc.c */ -#line 1474 "awkgram.y" - { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } +#line 1474 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } +#line 3478 "awkgram.c" /* yacc.c:1646 */ break; case 143: -/* Line 1787 of yacc.c */ -#line 1476 "awkgram.y" - { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } +#line 1476 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } +#line 3484 "awkgram.c" /* yacc.c:1646 */ break; case 144: -/* Line 1787 of yacc.c */ -#line 1478 "awkgram.y" - { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } +#line 1478 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } +#line 3490 "awkgram.c" /* yacc.c:1646 */ break; case 145: -/* Line 1787 of yacc.c */ -#line 1480 "awkgram.y" - { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - (3)])); } +#line 1480 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } +#line 3496 "awkgram.c" /* yacc.c:1646 */ break; case 146: -/* Line 1787 of yacc.c */ -#line 1485 "awkgram.y" +#line 1485 "awkgram.y" /* yacc.c:1646 */ { - (yyval) = list_create((yyvsp[(1) - (1)])); + (yyval) = list_create((yyvsp[0])); } +#line 3504 "awkgram.c" /* yacc.c:1646 */ break; case 147: -/* Line 1787 of yacc.c */ -#line 1489 "awkgram.y" +#line 1489 "awkgram.y" /* yacc.c:1646 */ { - if ((yyvsp[(2) - (2)])->opcode == Op_match_rec) { - (yyvsp[(2) - (2)])->opcode = Op_nomatch; - (yyvsp[(1) - (2)])->opcode = Op_push_i; - (yyvsp[(1) - (2)])->memory = make_number(0.0); - (yyval) = list_append(list_append(list_create((yyvsp[(1) - (2)])), - instruction(Op_field_spec)), (yyvsp[(2) - (2)])); + if ((yyvsp[0])->opcode == Op_match_rec) { + (yyvsp[0])->opcode = Op_nomatch; + (yyvsp[-1])->opcode = Op_push_i; + (yyvsp[-1])->memory = make_number(0.0); + (yyval) = list_append(list_append(list_create((yyvsp[-1])), + instruction(Op_field_spec)), (yyvsp[0])); } else { - if (do_optimize && (yyvsp[(2) - (2)])->nexti == (yyvsp[(2) - (2)])->lasti - && (yyvsp[(2) - (2)])->nexti->opcode == Op_push_i - && ((yyvsp[(2) - (2)])->nexti->memory->flags & (MPFN|MPZN)) == 0 + if (do_optimize && (yyvsp[0])->nexti == (yyvsp[0])->lasti + && (yyvsp[0])->nexti->opcode == Op_push_i + && ((yyvsp[0])->nexti->memory->flags & (MPFN|MPZN)) == 0 ) { - NODE *n = (yyvsp[(2) - (2)])->nexti->memory; + NODE *n = (yyvsp[0])->nexti->memory; if ((n->flags & (STRCUR|STRING)) != 0) { n->numbr = (AWKNUM) (n->stlen == 0); n->flags &= ~(STRCUR|STRING); @@ -3732,139 +3527,139 @@ regular_print: n->stlen = 0; } else n->numbr = (AWKNUM) (n->numbr == 0.0); - bcfree((yyvsp[(1) - (2)])); - (yyval) = (yyvsp[(2) - (2)]); + bcfree((yyvsp[-1])); + (yyval) = (yyvsp[0]); } else { - (yyvsp[(1) - (2)])->opcode = Op_not; - add_lint((yyvsp[(2) - (2)]), LINT_assign_in_cond); - (yyval) = list_append((yyvsp[(2) - (2)]), (yyvsp[(1) - (2)])); + (yyvsp[-1])->opcode = Op_not; + add_lint((yyvsp[0]), LINT_assign_in_cond); + (yyval) = list_append((yyvsp[0]), (yyvsp[-1])); } } } +#line 3540 "awkgram.c" /* yacc.c:1646 */ break; case 148: -/* Line 1787 of yacc.c */ -#line 1521 "awkgram.y" - { (yyval) = (yyvsp[(2) - (3)]); } +#line 1521 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[-1]); } +#line 3546 "awkgram.c" /* yacc.c:1646 */ break; case 149: -/* Line 1787 of yacc.c */ -#line 1523 "awkgram.y" +#line 1523 "awkgram.y" /* yacc.c:1646 */ { - (yyval) = snode((yyvsp[(3) - (4)]), (yyvsp[(1) - (4)])); + (yyval) = snode((yyvsp[-1]), (yyvsp[-3])); if ((yyval) == NULL) YYABORT; } +#line 3556 "awkgram.c" /* yacc.c:1646 */ break; case 150: -/* Line 1787 of yacc.c */ -#line 1529 "awkgram.y" +#line 1529 "awkgram.y" /* yacc.c:1646 */ { - (yyval) = snode((yyvsp[(3) - (4)]), (yyvsp[(1) - (4)])); + (yyval) = snode((yyvsp[-1]), (yyvsp[-3])); if ((yyval) == NULL) YYABORT; } +#line 3566 "awkgram.c" /* yacc.c:1646 */ break; case 151: -/* Line 1787 of yacc.c */ -#line 1535 "awkgram.y" +#line 1535 "awkgram.y" /* yacc.c:1646 */ { static bool warned = false; if (do_lint && ! warned) { warned = true; - lintwarn_ln((yyvsp[(1) - (1)])->source_line, + lintwarn_ln((yyvsp[0])->source_line, _("call of `length' without parentheses is not portable")); } - (yyval) = snode(NULL, (yyvsp[(1) - (1)])); + (yyval) = snode(NULL, (yyvsp[0])); if ((yyval) == NULL) YYABORT; } +#line 3583 "awkgram.c" /* yacc.c:1646 */ break; case 154: -/* Line 1787 of yacc.c */ -#line 1550 "awkgram.y" +#line 1550 "awkgram.y" /* yacc.c:1646 */ { - (yyvsp[(1) - (2)])->opcode = Op_preincrement; - (yyval) = mk_assignment((yyvsp[(2) - (2)]), NULL, (yyvsp[(1) - (2)])); + (yyvsp[-1])->opcode = Op_preincrement; + (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1])); } +#line 3592 "awkgram.c" /* yacc.c:1646 */ break; case 155: -/* Line 1787 of yacc.c */ -#line 1555 "awkgram.y" +#line 1555 "awkgram.y" /* yacc.c:1646 */ { - (yyvsp[(1) - (2)])->opcode = Op_predecrement; - (yyval) = mk_assignment((yyvsp[(2) - (2)]), NULL, (yyvsp[(1) - (2)])); + (yyvsp[-1])->opcode = Op_predecrement; + (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1])); } +#line 3601 "awkgram.c" /* yacc.c:1646 */ break; case 156: -/* Line 1787 of yacc.c */ -#line 1560 "awkgram.y" +#line 1560 "awkgram.y" /* yacc.c:1646 */ { - (yyval) = list_create((yyvsp[(1) - (1)])); + (yyval) = list_create((yyvsp[0])); } +#line 3609 "awkgram.c" /* yacc.c:1646 */ break; case 157: -/* Line 1787 of yacc.c */ -#line 1564 "awkgram.y" +#line 1564 "awkgram.y" /* yacc.c:1646 */ { - (yyval) = list_create((yyvsp[(1) - (1)])); + (yyval) = list_create((yyvsp[0])); } +#line 3617 "awkgram.c" /* yacc.c:1646 */ break; case 158: -/* Line 1787 of yacc.c */ -#line 1568 "awkgram.y" +#line 1568 "awkgram.y" /* yacc.c:1646 */ { - if ((yyvsp[(2) - (2)])->lasti->opcode == Op_push_i - && ((yyvsp[(2) - (2)])->lasti->memory->flags & (STRCUR|STRING)) == 0 + if ((yyvsp[0])->lasti->opcode == Op_push_i + && ((yyvsp[0])->lasti->memory->flags & (STRCUR|STRING)) == 0 ) { - NODE *n = (yyvsp[(2) - (2)])->lasti->memory; + NODE *n = (yyvsp[0])->lasti->memory; (void) force_number(n); negate_num(n); - (yyval) = (yyvsp[(2) - (2)]); - bcfree((yyvsp[(1) - (2)])); + (yyval) = (yyvsp[0]); + bcfree((yyvsp[-1])); } else { - (yyvsp[(1) - (2)])->opcode = Op_unary_minus; - (yyval) = list_append((yyvsp[(2) - (2)]), (yyvsp[(1) - (2)])); + (yyvsp[-1])->opcode = Op_unary_minus; + (yyval) = list_append((yyvsp[0]), (yyvsp[-1])); } } +#line 3636 "awkgram.c" /* yacc.c:1646 */ break; case 159: -/* Line 1787 of yacc.c */ -#line 1583 "awkgram.y" +#line 1583 "awkgram.y" /* yacc.c:1646 */ { /* * was: $$ = $2 * POSIX semantics: force a conversion to numeric type */ - (yyvsp[(1) - (2)])->opcode = Op_plus_i; - (yyvsp[(1) - (2)])->memory = make_number(0.0); - (yyval) = list_append((yyvsp[(2) - (2)]), (yyvsp[(1) - (2)])); + (yyvsp[-1])->opcode = Op_plus_i; + (yyvsp[-1])->memory = make_number(0.0); + (yyval) = list_append((yyvsp[0]), (yyvsp[-1])); } +#line 3650 "awkgram.c" /* yacc.c:1646 */ break; case 160: -/* Line 1787 of yacc.c */ -#line 1596 "awkgram.y" +#line 1596 "awkgram.y" /* yacc.c:1646 */ { - func_use((yyvsp[(1) - (1)])->lasti->func_name, FUNC_USE); - (yyval) = (yyvsp[(1) - (1)]); + func_use((yyvsp[0])->lasti->func_name, FUNC_USE); + (yyval) = (yyvsp[0]); } +#line 3659 "awkgram.c" /* yacc.c:1646 */ break; case 161: -/* Line 1787 of yacc.c */ -#line 1601 "awkgram.y" +#line 1601 "awkgram.y" /* yacc.c:1646 */ { /* indirect function call */ INSTRUCTION *f, *t; @@ -3880,7 +3675,7 @@ regular_print: lintwarn("%s", msg); } - f = (yyvsp[(2) - (2)])->lasti; + f = (yyvsp[0])->lasti; f->opcode = Op_indirect_func_call; name = estrdup(f->func_name, strlen(f->func_name)); if (is_std_var(name)) @@ -3895,71 +3690,71 @@ regular_print: * @f(f="real_fun") */ - (yyval) = list_prepend((yyvsp[(2) - (2)]), t); + (yyval) = list_prepend((yyvsp[0]), t); } +#line 3696 "awkgram.c" /* yacc.c:1646 */ break; case 162: -/* Line 1787 of yacc.c */ -#line 1637 "awkgram.y" +#line 1637 "awkgram.y" /* yacc.c:1646 */ { - param_sanity((yyvsp[(3) - (4)])); - (yyvsp[(1) - (4)])->opcode = Op_func_call; - (yyvsp[(1) - (4)])->func_body = NULL; - if ((yyvsp[(3) - (4)]) == NULL) { /* no argument or error */ - ((yyvsp[(1) - (4)]) + 1)->expr_count = 0; - (yyval) = list_create((yyvsp[(1) - (4)])); + param_sanity((yyvsp[-1])); + (yyvsp[-3])->opcode = Op_func_call; + (yyvsp[-3])->func_body = NULL; + if ((yyvsp[-1]) == NULL) { /* no argument or error */ + ((yyvsp[-3]) + 1)->expr_count = 0; + (yyval) = list_create((yyvsp[-3])); } else { - INSTRUCTION *t = (yyvsp[(3) - (4)]); - ((yyvsp[(1) - (4)]) + 1)->expr_count = count_expressions(&t, true); - (yyval) = list_append(t, (yyvsp[(1) - (4)])); + INSTRUCTION *t = (yyvsp[-1]); + ((yyvsp[-3]) + 1)->expr_count = count_expressions(&t, true); + (yyval) = list_append(t, (yyvsp[-3])); } } +#line 3714 "awkgram.c" /* yacc.c:1646 */ break; case 163: -/* Line 1787 of yacc.c */ -#line 1654 "awkgram.y" +#line 1654 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 3720 "awkgram.c" /* yacc.c:1646 */ break; case 164: -/* Line 1787 of yacc.c */ -#line 1656 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 1656 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 3726 "awkgram.c" /* yacc.c:1646 */ break; case 165: -/* Line 1787 of yacc.c */ -#line 1661 "awkgram.y" +#line 1661 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 3732 "awkgram.c" /* yacc.c:1646 */ break; case 166: -/* Line 1787 of yacc.c */ -#line 1663 "awkgram.y" - { (yyval) = (yyvsp[(1) - (2)]); } +#line 1663 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[-1]); } +#line 3738 "awkgram.c" /* yacc.c:1646 */ break; case 167: -/* Line 1787 of yacc.c */ -#line 1668 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 1668 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 3744 "awkgram.c" /* yacc.c:1646 */ break; case 168: -/* Line 1787 of yacc.c */ -#line 1670 "awkgram.y" +#line 1670 "awkgram.y" /* yacc.c:1646 */ { - (yyval) = list_merge((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)])); + (yyval) = list_merge((yyvsp[-1]), (yyvsp[0])); } +#line 3752 "awkgram.c" /* yacc.c:1646 */ break; case 169: -/* Line 1787 of yacc.c */ -#line 1677 "awkgram.y" +#line 1677 "awkgram.y" /* yacc.c:1646 */ { - INSTRUCTION *ip = (yyvsp[(1) - (1)])->lasti; + INSTRUCTION *ip = (yyvsp[0])->lasti; int count = ip->sub_count; /* # of SUBSEP-seperated expressions */ if (count > 1) { /* change Op_subscript or Op_sub_array to Op_concat */ @@ -3969,152 +3764,152 @@ regular_print: } else ip->opcode = Op_no_op; sub_counter++; /* count # of dimensions */ - (yyval) = (yyvsp[(1) - (1)]); + (yyval) = (yyvsp[0]); } +#line 3770 "awkgram.c" /* yacc.c:1646 */ break; case 170: -/* Line 1787 of yacc.c */ -#line 1694 "awkgram.y" +#line 1694 "awkgram.y" /* yacc.c:1646 */ { - INSTRUCTION *t = (yyvsp[(2) - (3)]); - if ((yyvsp[(2) - (3)]) == NULL) { - error_ln((yyvsp[(3) - (3)])->source_line, + INSTRUCTION *t = (yyvsp[-1]); + if ((yyvsp[-1]) == NULL) { + error_ln((yyvsp[0])->source_line, _("invalid subscript expression")); /* install Null string as subscript. */ t = list_create(instruction(Op_push_i)); t->nexti->memory = dupnode(Nnull_string); - (yyvsp[(3) - (3)])->sub_count = 1; + (yyvsp[0])->sub_count = 1; } else - (yyvsp[(3) - (3)])->sub_count = count_expressions(&t, false); - (yyval) = list_append(t, (yyvsp[(3) - (3)])); + (yyvsp[0])->sub_count = count_expressions(&t, false); + (yyval) = list_append(t, (yyvsp[0])); } +#line 3788 "awkgram.c" /* yacc.c:1646 */ break; case 171: -/* Line 1787 of yacc.c */ -#line 1711 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 1711 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 3794 "awkgram.c" /* yacc.c:1646 */ break; case 172: -/* Line 1787 of yacc.c */ -#line 1713 "awkgram.y" +#line 1713 "awkgram.y" /* yacc.c:1646 */ { - (yyval) = list_merge((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)])); + (yyval) = list_merge((yyvsp[-1]), (yyvsp[0])); } +#line 3802 "awkgram.c" /* yacc.c:1646 */ break; case 173: -/* Line 1787 of yacc.c */ -#line 1720 "awkgram.y" - { (yyval) = (yyvsp[(1) - (2)]); } +#line 1720 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[-1]); } +#line 3808 "awkgram.c" /* yacc.c:1646 */ break; case 174: -/* Line 1787 of yacc.c */ -#line 1725 "awkgram.y" +#line 1725 "awkgram.y" /* yacc.c:1646 */ { - char *var_name = (yyvsp[(1) - (1)])->lextok; + char *var_name = (yyvsp[0])->lextok; - (yyvsp[(1) - (1)])->opcode = Op_push; - (yyvsp[(1) - (1)])->memory = variable((yyvsp[(1) - (1)])->source_line, var_name, Node_var_new); - (yyval) = list_create((yyvsp[(1) - (1)])); + (yyvsp[0])->opcode = Op_push; + (yyvsp[0])->memory = variable((yyvsp[0])->source_line, var_name, Node_var_new); + (yyval) = list_create((yyvsp[0])); } +#line 3820 "awkgram.c" /* yacc.c:1646 */ break; case 175: -/* Line 1787 of yacc.c */ -#line 1733 "awkgram.y" +#line 1733 "awkgram.y" /* yacc.c:1646 */ { - char *arr = (yyvsp[(1) - (2)])->lextok; - (yyvsp[(1) - (2)])->memory = variable((yyvsp[(1) - (2)])->source_line, arr, Node_var_new); - (yyvsp[(1) - (2)])->opcode = Op_push_array; - (yyval) = list_prepend((yyvsp[(2) - (2)]), (yyvsp[(1) - (2)])); + 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 3831 "awkgram.c" /* yacc.c:1646 */ break; case 176: -/* Line 1787 of yacc.c */ -#line 1743 "awkgram.y" +#line 1743 "awkgram.y" /* yacc.c:1646 */ { - INSTRUCTION *ip = (yyvsp[(1) - (1)])->nexti; + INSTRUCTION *ip = (yyvsp[0])->nexti; if (ip->opcode == Op_push && ip->memory->type == Node_var && ip->memory->var_update ) { - (yyval) = list_prepend((yyvsp[(1) - (1)]), instruction(Op_var_update)); + (yyval) = list_prepend((yyvsp[0]), instruction(Op_var_update)); (yyval)->nexti->update_var = ip->memory->var_update; } else - (yyval) = (yyvsp[(1) - (1)]); + (yyval) = (yyvsp[0]); } +#line 3847 "awkgram.c" /* yacc.c:1646 */ break; case 177: -/* Line 1787 of yacc.c */ -#line 1755 "awkgram.y" +#line 1755 "awkgram.y" /* yacc.c:1646 */ { - (yyval) = list_append((yyvsp[(2) - (3)]), (yyvsp[(1) - (3)])); - if ((yyvsp[(3) - (3)]) != NULL) - mk_assignment((yyvsp[(2) - (3)]), NULL, (yyvsp[(3) - (3)])); + (yyval) = list_append((yyvsp[-1]), (yyvsp[-2])); + if ((yyvsp[0]) != NULL) + mk_assignment((yyvsp[-1]), NULL, (yyvsp[0])); } +#line 3857 "awkgram.c" /* yacc.c:1646 */ break; case 178: -/* Line 1787 of yacc.c */ -#line 1764 "awkgram.y" +#line 1764 "awkgram.y" /* yacc.c:1646 */ { - (yyvsp[(1) - (1)])->opcode = Op_postincrement; + (yyvsp[0])->opcode = Op_postincrement; } +#line 3865 "awkgram.c" /* yacc.c:1646 */ break; case 179: -/* Line 1787 of yacc.c */ -#line 1768 "awkgram.y" +#line 1768 "awkgram.y" /* yacc.c:1646 */ { - (yyvsp[(1) - (1)])->opcode = Op_postdecrement; + (yyvsp[0])->opcode = Op_postdecrement; } +#line 3873 "awkgram.c" /* yacc.c:1646 */ break; case 180: -/* Line 1787 of yacc.c */ -#line 1771 "awkgram.y" +#line 1771 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 3879 "awkgram.c" /* yacc.c:1646 */ break; case 182: -/* Line 1787 of yacc.c */ -#line 1779 "awkgram.y" +#line 1779 "awkgram.y" /* yacc.c:1646 */ { yyerrok; } +#line 3885 "awkgram.c" /* yacc.c:1646 */ break; case 183: -/* Line 1787 of yacc.c */ -#line 1783 "awkgram.y" +#line 1783 "awkgram.y" /* yacc.c:1646 */ { yyerrok; } +#line 3891 "awkgram.c" /* yacc.c:1646 */ break; case 186: -/* Line 1787 of yacc.c */ -#line 1792 "awkgram.y" +#line 1792 "awkgram.y" /* yacc.c:1646 */ { yyerrok; } +#line 3897 "awkgram.c" /* yacc.c:1646 */ break; case 187: -/* Line 1787 of yacc.c */ -#line 1796 "awkgram.y" - { (yyval) = (yyvsp[(1) - (1)]); yyerrok; } +#line 1796 "awkgram.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); yyerrok; } +#line 3903 "awkgram.c" /* yacc.c:1646 */ break; case 188: -/* Line 1787 of yacc.c */ -#line 1800 "awkgram.y" +#line 1800 "awkgram.y" /* yacc.c:1646 */ { yyerrok; } +#line 3909 "awkgram.c" /* yacc.c:1646 */ break; -/* Line 1787 of yacc.c */ -#line 4118 "awkgram.c" +#line 3913 "awkgram.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -4136,7 +3931,7 @@ regular_print: *++yyvsp = yyval; - /* Now `shift' the result of the reduction. Determine what state + /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ @@ -4151,9 +3946,9 @@ regular_print: goto yynewstate; -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ +/*--------------------------------------. +| yyerrlab -- here on detecting error. | +`--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ @@ -4204,20 +3999,20 @@ yyerrlab: if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an - error, discard it. */ + error, discard it. */ if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } else - { - yydestruct ("Error: discarding", - yytoken, &yylval); - yychar = YYEMPTY; - } + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } } /* Else will try to reuse lookahead token after shifting the error @@ -4236,7 +4031,7 @@ yyerrorlab: if (/*CONSTCOND*/ 0) goto yyerrorlab; - /* Do not reclaim the symbols of the rule which action triggered + /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; @@ -4249,29 +4044,29 @@ yyerrorlab: | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ + yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) - YYABORT; + YYABORT; yydestruct ("Error: popping", - yystos[yystate], yyvsp); + yystos[yystate], yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); @@ -4322,14 +4117,14 @@ yyreturn: yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); } - /* Do not reclaim the symbols of the rule which action triggered + /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); + yystos[*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow @@ -4340,13 +4135,9 @@ yyreturn: if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif - /* Make sure YYID is used. */ - return YYID (yyresult); + return yyresult; } - - -/* Line 2050 of yacc.c */ -#line 1802 "awkgram.y" +#line 1802 "awkgram.y" /* yacc.c:1906 */ struct token { diff --git a/command.c b/command.c index 91a8335e..c4fe1e48 100644 --- a/command.c +++ b/command.c @@ -1,19 +1,19 @@ -/* A Bison parser, made by GNU Bison 2.7.12-4996. */ +/* A Bison parser, made by GNU Bison 3.0.2. */ /* 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-2013 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 the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program. If not, see . */ @@ -26,7 +26,7 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ @@ -44,7 +44,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.7.12-4996" +#define YYBISON_VERSION "3.0.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -63,14 +63,14 @@ #define yyparse zzparse #define yylex zzlex #define yyerror zzerror -#define yylval zzlval -#define yychar zzchar #define yydebug zzdebug #define yynerrs zznerrs +#define yylval zzlval +#define yychar zzchar + /* Copy the first part of user declarations. */ -/* Line 371 of yacc.c */ -#line 26 "command.y" +#line 26 "command.y" /* yacc.c:339 */ #include "awk.h" #include "cmd.h" @@ -137,14 +137,13 @@ static void append_cmdarg(CMDARG *arg); static int find_argument(CMDARG *arg); #define YYSTYPE CMDARG * -/* Line 371 of yacc.c */ -#line 142 "command.c" +#line 141 "command.c" /* yacc.c:339 */ -# ifndef YY_NULL +# ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULL nullptr +# define YY_NULLPTR nullptr # else -# define YY_NULL 0 +# define YY_NULLPTR 0 # endif # endif @@ -157,7 +156,7 @@ static int find_argument(CMDARG *arg); #endif -/* Enabling traces. */ +/* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif @@ -165,59 +164,58 @@ static int find_argument(CMDARG *arg); extern int zzdebug; #endif -/* Tokens. */ +/* Token type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - D_BACKTRACE = 258, - D_BREAK = 259, - D_CLEAR = 260, - D_CONTINUE = 261, - D_DELETE = 262, - D_DISABLE = 263, - D_DOWN = 264, - D_ENABLE = 265, - D_FINISH = 266, - D_FRAME = 267, - D_HELP = 268, - D_IGNORE = 269, - D_INFO = 270, - D_LIST = 271, - D_NEXT = 272, - D_NEXTI = 273, - D_PRINT = 274, - D_PRINTF = 275, - D_QUIT = 276, - D_RETURN = 277, - D_RUN = 278, - D_SET = 279, - D_STEP = 280, - D_STEPI = 281, - D_TBREAK = 282, - D_UP = 283, - D_UNTIL = 284, - D_DISPLAY = 285, - D_UNDISPLAY = 286, - D_WATCH = 287, - D_UNWATCH = 288, - D_DUMP = 289, - D_TRACE = 290, - D_INT = 291, - D_STRING = 292, - D_NODE = 293, - D_VARIABLE = 294, - D_OPTION = 295, - D_COMMANDS = 296, - D_END = 297, - D_SILENT = 298, - D_SOURCE = 299, - D_SAVE = 300, - D_EVAL = 301, - D_CONDITION = 302, - D_STATEMENT = 303 - }; + enum yytokentype + { + D_BACKTRACE = 258, + D_BREAK = 259, + D_CLEAR = 260, + D_CONTINUE = 261, + D_DELETE = 262, + D_DISABLE = 263, + D_DOWN = 264, + D_ENABLE = 265, + D_FINISH = 266, + D_FRAME = 267, + D_HELP = 268, + D_IGNORE = 269, + D_INFO = 270, + D_LIST = 271, + D_NEXT = 272, + D_NEXTI = 273, + D_PRINT = 274, + D_PRINTF = 275, + D_QUIT = 276, + D_RETURN = 277, + D_RUN = 278, + D_SET = 279, + D_STEP = 280, + D_STEPI = 281, + D_TBREAK = 282, + D_UP = 283, + D_UNTIL = 284, + D_DISPLAY = 285, + D_UNDISPLAY = 286, + D_WATCH = 287, + D_UNWATCH = 288, + D_DUMP = 289, + D_TRACE = 290, + D_INT = 291, + D_STRING = 292, + D_NODE = 293, + D_VARIABLE = 294, + D_OPTION = 295, + D_COMMANDS = 296, + D_END = 297, + D_SILENT = 298, + D_SOURCE = 299, + D_SAVE = 300, + D_EVAL = 301, + D_CONDITION = 302, + D_STATEMENT = 303 + }; #endif /* Tokens. */ #define D_BACKTRACE 258 @@ -267,37 +265,23 @@ extern int zzdebug; #define D_CONDITION 302 #define D_STATEMENT 303 - - +/* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef int YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif + extern YYSTYPE zzlval; -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int zzparse (void *YYPARSE_PARAM); -#else -int zzparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus int zzparse (void); -#else -int zzparse (); -#endif -#endif /* ! YYPARSE_PARAM */ /* Copy the second part of user declarations. */ -/* Line 390 of yacc.c */ -#line 301 "command.c" +#line 285 "command.c" /* yacc.c:358 */ #ifdef short # undef short @@ -311,11 +295,8 @@ typedef unsigned char yytype_uint8; #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; -#elif (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -typedef signed char yytype_int8; #else -typedef short int yytype_int8; +typedef signed char yytype_int8; #endif #ifdef YYTYPE_UINT16 @@ -335,8 +316,7 @@ typedef short int yytype_int16; # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +# elif ! defined YYSIZE_T # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else @@ -358,11 +338,30 @@ typedef short int yytype_int16; # endif #endif -#ifndef __attribute__ -/* This feature is available in gcc versions 2.5 and later. */ -# if (! defined __GNUC__ || __GNUC__ < 2 \ - || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)) -# define __attribute__(Spec) /* empty */ +#ifndef YY_ATTRIBUTE +# if (defined __GNUC__ \ + && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ + || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C +# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +# else +# define YY_ATTRIBUTE(Spec) /* empty */ +# endif +#endif + +#ifndef YY_ATTRIBUTE_PURE +# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) +#endif + +#if !defined _Noreturn \ + && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) +# if defined _MSC_VER && 1200 <= _MSC_VER +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) # endif #endif @@ -373,24 +372,25 @@ typedef short int yytype_int16; # define YYUSE(E) /* empty */ #endif - -/* Identity function, used to suppress warnings about constant conditions. */ -#ifndef lint -# define YYID(N) (N) -#else -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static int -YYID (int yyi) +#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") #else -static int -YYID (yyi) - int yyi; +# define YY_INITIAL_VALUE(Value) Value #endif -{ - return yyi; -} +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + #if ! defined yyoverflow || YYERROR_VERBOSE @@ -409,8 +409,7 @@ YYID (yyi) # define alloca _alloca # else # define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS # include /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS @@ -422,8 +421,8 @@ YYID (yyi) # endif # ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) + /* Pacify GCC's 'empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely @@ -439,7 +438,7 @@ YYID (yyi) # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) + && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 @@ -447,15 +446,13 @@ YYID (yyi) # endif # ifndef YYMALLOC # define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +# if ! defined malloc && ! defined EXIT_SUCCESS void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) +# if ! defined free && ! defined EXIT_SUCCESS void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif @@ -465,7 +462,7 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc @@ -490,16 +487,16 @@ union yyalloc elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (YYID (0)) +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (0) #endif @@ -518,7 +515,7 @@ union yyalloc for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ - while (YYID (0)) + while (0) # endif # endif #endif /* !YYCOPY_NEEDED */ @@ -534,17 +531,19 @@ union yyalloc #define YYNNTS 55 /* YYNRULES -- Number of rules. */ #define YYNRULES 156 -/* YYNRULES -- Number of states. */ +/* YYNSTATES -- Number of states. */ #define YYNSTATES 203 -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned + by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 303 -#define YYTRANSLATE(YYX) \ +#define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, without out-of-bounds checking. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -581,73 +580,7 @@ static const yytype_uint8 yytranslate[] = }; #if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const yytype_uint16 yyprhs[] = -{ - 0, 0, 3, 4, 7, 9, 12, 15, 17, 19, - 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, - 41, 43, 45, 46, 51, 52, 53, 58, 62, 66, - 69, 71, 73, 75, 78, 81, 84, 88, 91, 92, - 96, 97, 101, 104, 107, 110, 113, 114, 120, 123, - 124, 128, 129, 133, 134, 139, 142, 145, 148, 151, - 154, 156, 158, 161, 162, 167, 169, 171, 173, 175, - 176, 178, 180, 183, 187, 189, 190, 192, 194, 196, - 197, 199, 203, 205, 206, 208, 210, 214, 218, 219, - 220, 224, 226, 227, 233, 237, 238, 240, 241, 243, - 244, 246, 247, 249, 251, 254, 256, 259, 263, 265, - 268, 272, 274, 276, 278, 280, 284, 286, 287, 289, - 291, 293, 295, 297, 301, 305, 309, 313, 314, 316, - 318, 320, 322, 325, 328, 330, 334, 336, 340, 344, - 346, 349, 351, 354, 357, 359, 362, 365, 366, 368, - 369, 371, 373, 376, 378, 381, 384 -}; - -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const yytype_int8 yyrhs[] = -{ - 60, 0, -1, -1, 60, 61, -1, 113, -1, 71, - 113, -1, 1, 113, -1, 6, -1, 17, -1, 18, - -1, 25, -1, 26, -1, 31, -1, 33, -1, 8, - -1, 7, -1, 28, -1, 9, -1, 3, -1, 12, - -1, 4, -1, 27, -1, -1, 46, 66, 81, 113, - -1, -1, -1, 68, 48, 69, 113, -1, 67, 68, - 42, -1, 46, 66, 84, -1, 13, 94, -1, 21, - -1, 23, -1, 11, -1, 62, 109, -1, 64, 110, - -1, 15, 37, -1, 14, 111, 36, -1, 10, 95, - -1, -1, 19, 72, 97, -1, -1, 20, 73, 99, - -1, 16, 100, -1, 29, 87, -1, 5, 87, -1, - 65, 88, -1, -1, 24, 74, 107, 49, 108, -1, - 40, 85, -1, -1, 22, 75, 93, -1, -1, 30, - 76, 91, -1, -1, 32, 77, 107, 79, -1, 63, - 102, -1, 34, 92, -1, 44, 37, -1, 45, 37, - -1, 41, 80, -1, 42, -1, 43, -1, 35, 37, - -1, -1, 47, 111, 78, 79, -1, 70, -1, 83, - -1, 109, -1, 1, -1, -1, 82, -1, 39, -1, - 82, 39, -1, 82, 50, 39, -1, 1, -1, -1, - 84, -1, 1, -1, 38, -1, -1, 37, -1, 37, - 49, 37, -1, 37, -1, -1, 111, -1, 86, -1, - 37, 51, 111, -1, 37, 51, 86, -1, -1, -1, - 111, 89, 79, -1, 86, -1, -1, 37, 51, 111, - 90, 79, -1, 37, 51, 86, -1, -1, 107, -1, - -1, 37, -1, -1, 108, -1, -1, 37, -1, 102, - -1, 37, 102, -1, 107, -1, 52, 39, -1, 52, - 39, 106, -1, 96, -1, 97, 96, -1, 97, 50, - 96, -1, 1, -1, 38, -1, 107, -1, 98, -1, - 99, 50, 98, -1, 1, -1, -1, 53, -1, 54, - -1, 111, -1, 86, -1, 101, -1, 37, 51, 111, - -1, 37, 51, 86, -1, 37, 51, 101, -1, 111, - 54, 111, -1, -1, 103, -1, 1, -1, 111, -1, - 101, -1, 103, 111, -1, 103, 101, -1, 108, -1, - 104, 50, 108, -1, 1, -1, 55, 104, 56, -1, - 55, 104, 1, -1, 105, -1, 106, 105, -1, 39, - -1, 57, 38, -1, 39, 106, -1, 38, -1, 53, - 38, -1, 54, 38, -1, -1, 111, -1, -1, 112, - -1, 36, -1, 53, 36, -1, 36, -1, 53, 36, - -1, 54, 36, -1, 58, -1 -}; - -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ + /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 106, 106, 108, 126, 127, 177, 184, 185, 186, @@ -693,13 +626,13 @@ static const char *const yytname[] = "printf_args", "list_args", "integer_range", "opt_integer_list", "integer_list", "exp_list", "subscript", "subscript_list", "variable", "node", "opt_plus_integer", "opt_integer", "plus_integer", "integer", - "nls", YY_NULL + "nls", YY_NULLPTR }; #endif # ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ +/* YYTOKNUM[NUM] -- (External) token number corresponding to the + (internal) symbol number NUM (which must be that of a token). */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, @@ -711,90 +644,18 @@ static const yytype_uint16 yytoknum[] = }; # endif -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = -{ - 0, 59, 60, 60, 61, 61, 61, 62, 62, 62, - 62, 62, 63, 63, 63, 63, 64, 64, 64, 64, - 65, 65, 66, 67, 68, 69, 68, 70, 70, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 72, 71, - 73, 71, 71, 71, 71, 71, 74, 71, 71, 75, - 71, 76, 71, 77, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 78, 71, 71, 79, 80, 80, 81, - 81, 82, 82, 82, 82, 83, 83, 83, 84, 85, - 85, 85, 86, 87, 87, 87, 87, 87, 88, 89, - 88, 88, 90, 88, 88, 91, 91, 92, 92, 93, - 93, 94, 94, 95, 95, 96, 96, 96, 97, 97, - 97, 97, 98, 98, 99, 99, 99, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 101, 102, 102, 102, - 103, 103, 103, 103, 104, 104, 104, 105, 105, 106, - 106, 107, 107, 107, 108, 108, 108, 109, 109, 110, - 110, 111, 111, 112, 112, 112, 113 -}; +#define YYPACT_NINF -151 -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = -{ - 0, 2, 0, 2, 1, 2, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 4, 0, 0, 4, 3, 3, 2, - 1, 1, 1, 2, 2, 2, 3, 2, 0, 3, - 0, 3, 2, 2, 2, 2, 0, 5, 2, 0, - 3, 0, 3, 0, 4, 2, 2, 2, 2, 2, - 1, 1, 2, 0, 4, 1, 1, 1, 1, 0, - 1, 1, 2, 3, 1, 0, 1, 1, 1, 0, - 1, 3, 1, 0, 1, 1, 3, 3, 0, 0, - 3, 1, 0, 5, 3, 0, 1, 0, 1, 0, - 1, 0, 1, 1, 2, 1, 2, 3, 1, 2, - 3, 1, 1, 1, 1, 3, 1, 0, 1, 1, - 1, 1, 1, 3, 3, 3, 3, 0, 1, 1, - 1, 1, 2, 2, 1, 3, 1, 3, 3, 1, - 2, 1, 2, 2, 1, 2, 2, 0, 1, 0, - 1, 1, 2, 1, 2, 2, 1 -}; +#define yypact_value_is_default(Yystate) \ + (!!((Yystate) == (-151))) -/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const yytype_uint8 yydefact[] = -{ - 2, 0, 1, 0, 18, 20, 83, 7, 15, 14, - 17, 0, 32, 19, 101, 0, 0, 117, 8, 9, - 38, 40, 30, 49, 31, 46, 10, 11, 21, 16, - 83, 51, 12, 53, 13, 97, 0, 79, 0, 60, - 61, 0, 0, 22, 0, 156, 3, 147, 0, 149, - 88, 24, 65, 0, 4, 6, 151, 82, 0, 85, - 44, 84, 129, 0, 37, 131, 103, 128, 130, 102, - 29, 0, 35, 82, 118, 119, 121, 42, 122, 120, - 0, 0, 99, 0, 43, 95, 0, 98, 56, 62, - 80, 48, 68, 59, 67, 148, 57, 58, 0, 63, - 33, 55, 153, 0, 0, 34, 150, 82, 91, 45, - 89, 0, 5, 0, 152, 104, 133, 132, 0, 36, - 0, 111, 141, 0, 0, 108, 39, 105, 116, 112, - 114, 41, 113, 144, 0, 0, 50, 100, 0, 52, - 96, 0, 0, 74, 78, 71, 0, 70, 28, 0, - 154, 155, 0, 0, 27, 25, 82, 87, 86, 126, - 124, 125, 123, 0, 139, 143, 106, 142, 0, 109, - 0, 145, 146, 0, 77, 54, 66, 76, 81, 23, - 72, 0, 64, 94, 92, 90, 0, 136, 0, 134, - 140, 107, 110, 115, 47, 73, 0, 26, 138, 0, - 137, 93, 135 -}; +#define YYTABLE_NINF -148 -/* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_int16 yydefgoto[] = -{ - -1, 1, 46, 47, 48, 49, 50, 98, 51, 111, - 186, 52, 53, 80, 81, 83, 82, 85, 86, 149, - 175, 93, 146, 147, 176, 177, 91, 59, 60, 109, - 153, 196, 139, 88, 136, 70, 64, 125, 126, 130, - 131, 77, 65, 66, 67, 188, 164, 165, 127, 137, - 94, 105, 68, 106, 54 -}; +#define yytable_value_is_error(Yytable_value) \ + 0 -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -151 + /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ static const yytype_int16 yypact[] = { -151, 145, -151, -34, -151, -151, 50, -151, -151, -151, @@ -820,7 +681,35 @@ static const yytype_int16 yypact[] = -151, -151, -151 }; -/* YYPGOTO[NTERM-NUM]. */ + /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE does not specify something else to do. Zero + means the default is an error. */ +static const yytype_uint8 yydefact[] = +{ + 2, 0, 1, 0, 18, 20, 83, 7, 15, 14, + 17, 0, 32, 19, 101, 0, 0, 117, 8, 9, + 38, 40, 30, 49, 31, 46, 10, 11, 21, 16, + 83, 51, 12, 53, 13, 97, 0, 79, 0, 60, + 61, 0, 0, 22, 0, 156, 3, 147, 0, 149, + 88, 24, 65, 0, 4, 6, 151, 82, 0, 85, + 44, 84, 129, 0, 37, 131, 103, 128, 130, 102, + 29, 0, 35, 82, 118, 119, 121, 42, 122, 120, + 0, 0, 99, 0, 43, 95, 0, 98, 56, 62, + 80, 48, 68, 59, 67, 148, 57, 58, 0, 63, + 33, 55, 153, 0, 0, 34, 150, 82, 91, 45, + 89, 0, 5, 0, 152, 104, 133, 132, 0, 36, + 0, 111, 141, 0, 0, 108, 39, 105, 116, 112, + 114, 41, 113, 144, 0, 0, 50, 100, 0, 52, + 96, 0, 0, 74, 78, 71, 0, 70, 28, 0, + 154, 155, 0, 0, 27, 25, 82, 87, 86, 126, + 124, 125, 123, 0, 139, 143, 106, 142, 0, 109, + 0, 145, 146, 0, 77, 54, 66, 76, 81, 23, + 72, 0, 64, 94, 92, 90, 0, 136, 0, 134, + 140, 107, 110, 115, 47, 73, 0, 26, 138, 0, + 137, 93, 135 +}; + + /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, @@ -831,10 +720,20 @@ static const yytype_int16 yypgoto[] = 97, -151, -5, -151, -3 }; -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -148 + /* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int16 yydefgoto[] = +{ + -1, 1, 46, 47, 48, 49, 50, 98, 51, 111, + 186, 52, 53, 80, 81, 83, 82, 85, 86, 149, + 175, 93, 146, 147, 176, 177, 91, 59, 60, 109, + 153, 196, 139, 88, 136, 70, 64, 125, 126, 130, + 131, 77, 65, 66, 67, 188, 164, 165, 127, 137, + 94, 105, 68, 106, 54 +}; + + /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule whose + number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { 55, 61, 76, 78, 132, 121, 138, 174, 140, 141, @@ -860,12 +759,6 @@ static const yytype_int16 yytable[] = 0, 0, 0, 45 }; -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-151))) - -#define yytable_value_is_error(Yytable_value) \ - YYID (0) - static const yytype_int16 yycheck[] = { 3, 6, 17, 17, 81, 1, 83, 1, 85, 86, @@ -891,8 +784,8 @@ static const yytype_int16 yycheck[] = -1, -1, -1, 58 }; -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ + /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 60, 0, 1, 3, 4, 5, 6, 7, 8, @@ -918,30 +811,58 @@ static const yytype_uint8 yystos[] = 56, 79, 108 }; -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - - -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. However, - YYFAIL appears to be in use. Nevertheless, it is formally deprecated - in Bison 2.4.2's NEWS entry, where a plan to phase it out is - discussed. */ - -#define YYFAIL goto yyerrlab -#if defined YYFAIL - /* This is here to suppress warnings from the GCC cpp's - -Wunused-macros. Normally we don't worry about that warning, but - some users do, and we want to make it easy for users to remove - YYFAIL uses, which will produce warnings from Bison 2.5. */ -#endif + /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 59, 60, 60, 61, 61, 61, 62, 62, 62, + 62, 62, 63, 63, 63, 63, 64, 64, 64, 64, + 65, 65, 66, 67, 68, 69, 68, 70, 70, 71, + 71, 71, 71, 71, 71, 71, 71, 71, 72, 71, + 73, 71, 71, 71, 71, 71, 74, 71, 71, 75, + 71, 76, 71, 77, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 78, 71, 71, 79, 80, 80, 81, + 81, 82, 82, 82, 82, 83, 83, 83, 84, 85, + 85, 85, 86, 87, 87, 87, 87, 87, 88, 89, + 88, 88, 90, 88, 88, 91, 91, 92, 92, 93, + 93, 94, 94, 95, 95, 96, 96, 96, 97, 97, + 97, 97, 98, 98, 99, 99, 99, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 101, 102, 102, 102, + 103, 103, 103, 103, 104, 104, 104, 105, 105, 106, + 106, 107, 107, 107, 108, 108, 108, 109, 109, 110, + 110, 111, 111, 112, 112, 112, 113 +}; + + /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 0, 2, 1, 2, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 4, 0, 0, 4, 3, 3, 2, + 1, 1, 1, 2, 2, 2, 3, 2, 0, 3, + 0, 3, 2, 2, 2, 2, 0, 5, 2, 0, + 3, 0, 3, 0, 4, 2, 2, 2, 2, 2, + 1, 1, 2, 0, 4, 1, 1, 1, 1, 0, + 1, 1, 2, 3, 1, 0, 1, 1, 1, 0, + 1, 3, 1, 0, 1, 1, 3, 3, 0, 0, + 3, 1, 0, 5, 3, 0, 1, 0, 1, 0, + 1, 0, 1, 1, 2, 1, 2, 3, 1, 2, + 3, 1, 1, 1, 1, 3, 1, 0, 1, 1, + 1, 1, 1, 3, 3, 3, 3, 0, 1, 1, + 1, 1, 2, 2, 1, 3, 1, 3, 3, 1, + 2, 1, 2, 2, 1, 2, 2, 0, 1, 0, + 1, 1, 2, 1, 2, 2, 1 +}; + + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + #define YYRECOVERING() (!!yyerrstatus) @@ -958,27 +879,15 @@ do \ else \ { \ yyerror (YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (YYID (0)) + YYERROR; \ + } \ +while (0) /* Error token number */ -#define YYTERROR 1 -#define YYERRCODE 256 +#define YYTERROR 1 +#define YYERRCODE 256 -/* This macro is provided for backward compatibility. */ -#ifndef YY_LOCATION_PRINT -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -#endif - - -/* YYLEX -- calling `yylex' with the right arguments. */ -#ifdef YYLEX_PARAM -# define YYLEX yylex (YYLEX_PARAM) -#else -# define YYLEX yylex () -#endif /* Enable debugging if requested. */ #if YYDEBUG @@ -988,40 +897,36 @@ while (YYID (0)) # define YYFPRINTF fprintf # endif -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (YYID (0)) +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + +/* This macro is provided for backward compatibility. */ +#ifndef YY_LOCATION_PRINT +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +#endif + -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Type, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (YYID (0)) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ +/*----------------------------------------. +| Print this symbol's value on YYOUTPUT. | +`----------------------------------------*/ -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) -#else -static void -yy_symbol_value_print (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; -#endif { FILE *yyo = yyoutput; YYUSE (yyo); @@ -1030,8 +935,6 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep) # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# else - YYUSE (yyoutput); # endif YYUSE (yytype); } @@ -1041,22 +944,11 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep) | Print this symbol on YYOUTPUT. | `--------------------------------*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) -#else -static void -yy_symbol_print (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE const * const yyvaluep; -#endif { - if (yytype < YYNTOKENS) - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + YYFPRINTF (yyoutput, "%s %s (", + yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep); YYFPRINTF (yyoutput, ")"); @@ -1067,16 +959,8 @@ yy_symbol_print (yyoutput, yytype, yyvaluep) | TOP (included). | `------------------------------------------------------------------*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) -#else -static void -yy_stack_print (yybottom, yytop) - yytype_int16 *yybottom; - yytype_int16 *yytop; -#endif { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@ -1087,49 +971,42 @@ yy_stack_print (yybottom, yytop) YYFPRINTF (stderr, "\n"); } -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (YYID (0)) +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -static void -yy_reduce_print (YYSTYPE *yyvsp, int yyrule) -#else static void -yy_reduce_print (yyvsp, yyrule) - YYSTYPE *yyvsp; - int yyrule; -#endif +yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) { + unsigned long int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - yyrule - 1, yylno); + yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], - &(yyvsp[(yyi + 1) - (yynrhs)]) - ); + yy_symbol_print (stderr, + yystos[yyssp[yyi + 1 - yynrhs]], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); YYFPRINTF (stderr, "\n"); } } -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyvsp, Rule); \ -} while (YYID (0)) +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyssp, yyvsp, Rule); \ +} while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ @@ -1143,7 +1020,7 @@ int yydebug; /* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH +#ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif @@ -1166,15 +1043,8 @@ int yydebug; # define yystrlen strlen # else /* Return the length of YYSTR. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) -#else -static YYSIZE_T -yystrlen (yystr) - const char *yystr; -#endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) @@ -1190,16 +1060,8 @@ yystrlen (yystr) # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) -#else -static char * -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -#endif { char *yyd = yydest; const char *yys = yysrc; @@ -1229,27 +1091,27 @@ yytnamerr (char *yyres, const char *yystr) char const *yyp = yystr; for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } do_not_strip_quotes: ; } @@ -1272,11 +1134,11 @@ static int yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); + YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ - const char *yyformat = YY_NULL; + const char *yyformat = YY_NULLPTR; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per @@ -1284,10 +1146,6 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, int yycount = 0; /* There are many possibilities here to consider: - - Assume YYFAIL is not used. It's too flawed to consider. See - - for details. YYERROR is fine as it does not invoke this - function. - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected @@ -1337,7 +1195,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, } yyarg[yycount++] = yytname[yyx]; { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); + YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; @@ -1404,26 +1262,17 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, | Release the memory associated to this symbol. | `-----------------------------------------------*/ -/*ARGSUSED*/ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) -#else -static void -yydestruct (yymsg, yytype, yyvaluep) - const char *yymsg; - int yytype; - YYSTYPE *yyvaluep; -#endif { YYUSE (yyvaluep); - if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END } @@ -1432,18 +1281,8 @@ yydestruct (yymsg, yytype, yyvaluep) /* The lookahead symbol. */ int yychar; - -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ -#endif - /* The semantic value of the lookahead symbol. */ -YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); - +YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; @@ -1452,35 +1291,16 @@ int yynerrs; | yyparse. | `----------*/ -#ifdef YYPARSE_PARAM -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) -int -yyparse (void *YYPARSE_PARAM) -#else -int -yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -#endif -#else /* ! YYPARSE_PARAM */ -#if (defined __STDC__ || defined __C99__FUNC__ \ - || defined __cplusplus || defined _MSC_VER) int yyparse (void) -#else -int -yyparse () - -#endif -#endif { int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: - `yyss': related to states. - `yyvs': related to semantic values. + 'yyss': related to states. + 'yyvs': related to semantic values. Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ @@ -1548,23 +1368,23 @@ yyparse () #ifdef yyoverflow { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); - - yyss = yyss1; - yyvs = yyvs1; + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE @@ -1572,22 +1392,22 @@ yyparse () # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; + goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; + yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss_alloc, yyss); - YYSTACK_RELOCATE (yyvs_alloc, yyvs); + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ @@ -1596,10 +1416,10 @@ yyparse () yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) - YYABORT; + YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); @@ -1628,7 +1448,7 @@ yybackup: if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); - yychar = YYLEX; + yychar = yylex (); } if (yychar <= YYEOF) @@ -1693,7 +1513,7 @@ yyreduce: yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. + '$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison @@ -1707,8 +1527,7 @@ yyreduce: switch (yyn) { case 3: -/* Line 1787 of yacc.c */ -#line 109 "command.y" +#line 109 "command.y" /* yacc.c:1646 */ { cmd_idx = -1; want_nodeval = false; @@ -1723,11 +1542,11 @@ yyreduce: arg_list = NULL; } } +#line 1546 "command.c" /* yacc.c:1646 */ break; case 5: -/* Line 1787 of yacc.c */ -#line 128 "command.y" +#line 128 "command.y" /* yacc.c:1646 */ { if (errcount == 0 && cmd_idx >= 0) { Func_cmd cmdfunc; @@ -1777,25 +1596,25 @@ yyreduce: YYACCEPT; } } +#line 1600 "command.c" /* yacc.c:1646 */ break; case 6: -/* Line 1787 of yacc.c */ -#line 178 "command.y" +#line 178 "command.y" /* yacc.c:1646 */ { yyerrok; } +#line 1608 "command.c" /* yacc.c:1646 */ break; case 22: -/* Line 1787 of yacc.c */ -#line 212 "command.y" +#line 212 "command.y" /* yacc.c:1646 */ { want_nodeval = true; } +#line 1614 "command.c" /* yacc.c:1646 */ break; case 23: -/* Line 1787 of yacc.c */ -#line 217 "command.y" +#line 217 "command.y" /* yacc.c:1646 */ { if (errcount == 0) { /* don't free arg_list; passed on to statement_list @@ -1811,11 +1630,11 @@ yyreduce: in_eval = true; } } +#line 1634 "command.c" /* yacc.c:1646 */ break; case 24: -/* Line 1787 of yacc.c */ -#line 236 "command.y" +#line 236 "command.y" /* yacc.c:1646 */ { (yyval) = append_statement(arg_list, (char *) start_EVAL); if (read_a_line == read_commands_string) /* unserializing 'eval' in 'commands' */ @@ -1823,27 +1642,27 @@ yyreduce: free_cmdarg(arg_list); arg_list = NULL; } +#line 1646 "command.c" /* yacc.c:1646 */ break; case 25: -/* Line 1787 of yacc.c */ -#line 243 "command.y" - { (yyval) = append_statement((yyvsp[(1) - (2)]), lexptr_begin); } +#line 243 "command.y" /* yacc.c:1646 */ + { (yyval) = append_statement((yyvsp[-1]), lexptr_begin); } +#line 1652 "command.c" /* yacc.c:1646 */ break; case 26: -/* Line 1787 of yacc.c */ -#line 244 "command.y" +#line 244 "command.y" /* yacc.c:1646 */ { - (yyval) = (yyvsp[(3) - (4)]); + (yyval) = (yyvsp[-1]); } +#line 1660 "command.c" /* yacc.c:1646 */ break; case 27: -/* Line 1787 of yacc.c */ -#line 251 "command.y" +#line 251 "command.y" /* yacc.c:1646 */ { - arg_list = append_statement((yyvsp[(2) - (3)]), (char *) end_EVAL); + arg_list = append_statement((yyvsp[-1]), (char *) end_EVAL); if (read_a_line == read_commands_string) { /* unserializing 'eval' in 'commands' */ char *str = arg_list->a_string; size_t len = strlen(str); @@ -1857,120 +1676,120 @@ yyreduce: cmd_idx = find_command("eval", 4); in_eval = false; } +#line 1680 "command.c" /* yacc.c:1646 */ break; case 28: -/* Line 1787 of yacc.c */ -#line 267 "command.y" +#line 267 "command.y" /* yacc.c:1646 */ { NODE *n; CMDARG *arg; - n = (yyvsp[(3) - (3)])->a_node; + n = (yyvsp[0])->a_node; arg = append_statement(NULL, (char *) start_EVAL); (void) append_statement(arg, n->stptr); (void) append_statement(arg, (char *) end_EVAL); free_cmdarg(arg_list); arg_list = arg; } +#line 1695 "command.c" /* yacc.c:1646 */ break; case 34: -/* Line 1787 of yacc.c */ -#line 286 "command.y" +#line 286 "command.y" /* yacc.c:1646 */ { if (cmdtab[cmd_idx].class == D_FRAME - && (yyvsp[(2) - (2)]) != NULL && (yyvsp[(2) - (2)])->a_int < 0) - yyerror(_("invalid frame number: %d"), (yyvsp[(2) - (2)])->a_int); + && (yyvsp[0]) != NULL && (yyvsp[0])->a_int < 0) + yyerror(_("invalid frame number: %d"), (yyvsp[0])->a_int); } +#line 1705 "command.c" /* yacc.c:1646 */ break; case 35: -/* Line 1787 of yacc.c */ -#line 292 "command.y" +#line 292 "command.y" /* yacc.c:1646 */ { - int idx = find_argument((yyvsp[(2) - (2)])); + int idx = find_argument((yyvsp[0])); if (idx < 0) - yyerror(_("info: invalid option - \"%s\""), (yyvsp[(2) - (2)])->a_string); + yyerror(_("info: invalid option - \"%s\""), (yyvsp[0])->a_string); else { - efree((yyvsp[(2) - (2)])->a_string); - (yyvsp[(2) - (2)])->a_string = NULL; - (yyvsp[(2) - (2)])->type = D_argument; - (yyvsp[(2) - (2)])->a_argument = argtab[idx].value; + efree((yyvsp[0])->a_string); + (yyvsp[0])->a_string = NULL; + (yyvsp[0])->type = D_argument; + (yyvsp[0])->a_argument = argtab[idx].value; } } +#line 1721 "command.c" /* yacc.c:1646 */ break; case 38: -/* Line 1787 of yacc.c */ -#line 305 "command.y" +#line 305 "command.y" /* yacc.c:1646 */ { want_nodeval = true; } +#line 1727 "command.c" /* yacc.c:1646 */ break; case 40: -/* Line 1787 of yacc.c */ -#line 306 "command.y" +#line 306 "command.y" /* yacc.c:1646 */ { want_nodeval = true; } +#line 1733 "command.c" /* yacc.c:1646 */ break; case 46: -/* Line 1787 of yacc.c */ -#line 311 "command.y" +#line 311 "command.y" /* yacc.c:1646 */ { want_nodeval = true; } +#line 1739 "command.c" /* yacc.c:1646 */ break; case 49: -/* Line 1787 of yacc.c */ -#line 313 "command.y" +#line 313 "command.y" /* yacc.c:1646 */ { want_nodeval = true; } +#line 1745 "command.c" /* yacc.c:1646 */ break; case 51: -/* Line 1787 of yacc.c */ -#line 314 "command.y" +#line 314 "command.y" /* yacc.c:1646 */ { want_nodeval = true; } +#line 1751 "command.c" /* yacc.c:1646 */ break; case 53: -/* Line 1787 of yacc.c */ -#line 315 "command.y" +#line 315 "command.y" /* yacc.c:1646 */ { want_nodeval = true; } +#line 1757 "command.c" /* yacc.c:1646 */ break; case 57: -/* Line 1787 of yacc.c */ -#line 319 "command.y" +#line 319 "command.y" /* yacc.c:1646 */ { - if (in_cmd_src((yyvsp[(2) - (2)])->a_string)) - yyerror(_("source \"%s\": already sourced."), (yyvsp[(2) - (2)])->a_string); + if (in_cmd_src((yyvsp[0])->a_string)) + yyerror(_("source \"%s\": already sourced."), (yyvsp[0])->a_string); } +#line 1766 "command.c" /* yacc.c:1646 */ break; case 58: -/* Line 1787 of yacc.c */ -#line 324 "command.y" +#line 324 "command.y" /* yacc.c:1646 */ { if (! input_from_tty) - yyerror(_("save \"%s\": command not permitted."), (yyvsp[(2) - (2)])->a_string); + yyerror(_("save \"%s\": command not permitted."), (yyvsp[0])->a_string); } +#line 1775 "command.c" /* yacc.c:1646 */ break; case 59: -/* Line 1787 of yacc.c */ -#line 329 "command.y" +#line 329 "command.y" /* yacc.c:1646 */ { int type = 0; int num; - if ((yyvsp[(2) - (2)]) != NULL) - num = (yyvsp[(2) - (2)])->a_int; + if ((yyvsp[0]) != NULL) + num = (yyvsp[0])->a_int; if (errcount != 0) ; else if (in_commands) yyerror(_("Can't use command `commands' for breakpoint/watchpoint commands")); - else if ((yyvsp[(2) - (2)]) == NULL && ! (type = has_break_or_watch_point(&num, true))) + else if ((yyvsp[0]) == NULL && ! (type = has_break_or_watch_point(&num, true))) yyerror(_("no breakpoint/watchpoint has been set yet")); - else if ((yyvsp[(2) - (2)]) != NULL && ! (type = has_break_or_watch_point(&num, false))) + else if ((yyvsp[0]) != NULL && ! (type = has_break_or_watch_point(&num, false))) yyerror(_("invalid breakpoint/watchpoint number")); if (type) { in_commands = true; @@ -1982,11 +1801,11 @@ yyreduce: } } } +#line 1805 "command.c" /* yacc.c:1646 */ break; case 60: -/* Line 1787 of yacc.c */ -#line 355 "command.y" +#line 355 "command.y" /* yacc.c:1646 */ { if (! in_commands) yyerror(_("`end' valid only in command `commands' or `eval'")); @@ -1996,54 +1815,54 @@ yyreduce: in_commands = false; } } +#line 1819 "command.c" /* yacc.c:1646 */ break; case 61: -/* Line 1787 of yacc.c */ -#line 365 "command.y" +#line 365 "command.y" /* yacc.c:1646 */ { if (! in_commands) yyerror(_("`silent' valid only in command `commands'")); } +#line 1828 "command.c" /* yacc.c:1646 */ break; case 62: -/* Line 1787 of yacc.c */ -#line 370 "command.y" +#line 370 "command.y" /* yacc.c:1646 */ { - int idx = find_argument((yyvsp[(2) - (2)])); + int idx = find_argument((yyvsp[0])); if (idx < 0) - yyerror(_("trace: invalid option - \"%s\""), (yyvsp[(2) - (2)])->a_string); + yyerror(_("trace: invalid option - \"%s\""), (yyvsp[0])->a_string); else { - efree((yyvsp[(2) - (2)])->a_string); - (yyvsp[(2) - (2)])->a_string = NULL; - (yyvsp[(2) - (2)])->type = D_argument; - (yyvsp[(2) - (2)])->a_argument = argtab[idx].value; + efree((yyvsp[0])->a_string); + (yyvsp[0])->a_string = NULL; + (yyvsp[0])->type = D_argument; + (yyvsp[0])->a_argument = argtab[idx].value; } } +#line 1844 "command.c" /* yacc.c:1646 */ break; case 63: -/* Line 1787 of yacc.c */ -#line 381 "command.y" +#line 381 "command.y" /* yacc.c:1646 */ { want_nodeval = true; } +#line 1850 "command.c" /* yacc.c:1646 */ break; case 64: -/* Line 1787 of yacc.c */ -#line 382 "command.y" +#line 382 "command.y" /* yacc.c:1646 */ { int type; - int num = (yyvsp[(2) - (4)])->a_int; + int num = (yyvsp[-2])->a_int; type = has_break_or_watch_point(&num, false); if (! type) yyerror(_("condition: invalid breakpoint/watchpoint number")); } +#line 1862 "command.c" /* yacc.c:1646 */ break; case 65: -/* Line 1787 of yacc.c */ -#line 390 "command.y" +#line 390 "command.y" /* yacc.c:1646 */ { if (in_commands) { /* Prepend command 'eval' to argument list */ @@ -2054,387 +1873,387 @@ yyreduce: arg_list = arg; } } +#line 1877 "command.c" /* yacc.c:1646 */ break; case 66: -/* Line 1787 of yacc.c */ -#line 404 "command.y" +#line 404 "command.y" /* yacc.c:1646 */ { - if ((yyvsp[(1) - (1)]) != NULL) { - NODE *n = (yyvsp[(1) - (1)])->a_node; - (yyvsp[(1) - (1)])->type = D_string; - (yyvsp[(1) - (1)])->a_string = n->stptr; + if ((yyvsp[0]) != NULL) { + NODE *n = (yyvsp[0])->a_node; + (yyvsp[0])->type = D_string; + (yyvsp[0])->a_string = n->stptr; freenode(n); } - (yyval) = (yyvsp[(1) - (1)]); + (yyval) = (yyvsp[0]); } +#line 1891 "command.c" /* yacc.c:1646 */ break; case 68: -/* Line 1787 of yacc.c */ -#line 418 "command.y" +#line 418 "command.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 1897 "command.c" /* yacc.c:1646 */ break; case 69: -/* Line 1787 of yacc.c */ -#line 423 "command.y" +#line 423 "command.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 1903 "command.c" /* yacc.c:1646 */ break; case 74: -/* Line 1787 of yacc.c */ -#line 432 "command.y" +#line 432 "command.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 1909 "command.c" /* yacc.c:1646 */ break; case 75: -/* Line 1787 of yacc.c */ -#line 437 "command.y" +#line 437 "command.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 1915 "command.c" /* yacc.c:1646 */ break; case 77: -/* Line 1787 of yacc.c */ -#line 440 "command.y" +#line 440 "command.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 1921 "command.c" /* yacc.c:1646 */ break; case 78: -/* Line 1787 of yacc.c */ -#line 445 "command.y" +#line 445 "command.y" /* yacc.c:1646 */ { NODE *n; - n = (yyvsp[(1) - (1)])->a_node; + n = (yyvsp[0])->a_node; if ((n->flags & STRING) == 0) yyerror(_("argument not a string")); } +#line 1932 "command.c" /* yacc.c:1646 */ break; case 79: -/* Line 1787 of yacc.c */ -#line 455 "command.y" +#line 455 "command.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 1938 "command.c" /* yacc.c:1646 */ break; case 80: -/* Line 1787 of yacc.c */ -#line 457 "command.y" +#line 457 "command.y" /* yacc.c:1646 */ { - if (find_option((yyvsp[(1) - (1)])->a_string) < 0) - yyerror(_("option: invalid parameter - \"%s\""), (yyvsp[(1) - (1)])->a_string); + if (find_option((yyvsp[0])->a_string) < 0) + yyerror(_("option: invalid parameter - \"%s\""), (yyvsp[0])->a_string); } +#line 1947 "command.c" /* yacc.c:1646 */ break; case 81: -/* Line 1787 of yacc.c */ -#line 462 "command.y" +#line 462 "command.y" /* yacc.c:1646 */ { - if (find_option((yyvsp[(1) - (3)])->a_string) < 0) - yyerror(_("option: invalid parameter - \"%s\""), (yyvsp[(1) - (3)])->a_string); + if (find_option((yyvsp[-2])->a_string) < 0) + yyerror(_("option: invalid parameter - \"%s\""), (yyvsp[-2])->a_string); } +#line 1956 "command.c" /* yacc.c:1646 */ break; case 82: -/* Line 1787 of yacc.c */ -#line 470 "command.y" +#line 470 "command.y" /* yacc.c:1646 */ { NODE *n; - n = lookup((yyvsp[(1) - (1)])->a_string); + n = lookup((yyvsp[0])->a_string); if (n == NULL || n->type != Node_func) - yyerror(_("no such function - \"%s\""), (yyvsp[(1) - (1)])->a_string); + yyerror(_("no such function - \"%s\""), (yyvsp[0])->a_string); else { - (yyvsp[(1) - (1)])->type = D_func; - efree((yyvsp[(1) - (1)])->a_string); - (yyvsp[(1) - (1)])->a_string = NULL; - (yyvsp[(1) - (1)])->a_node = n; + (yyvsp[0])->type = D_func; + efree((yyvsp[0])->a_string); + (yyvsp[0])->a_string = NULL; + (yyvsp[0])->a_node = n; } } +#line 1973 "command.c" /* yacc.c:1646 */ break; case 83: -/* Line 1787 of yacc.c */ -#line 486 "command.y" +#line 486 "command.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 1979 "command.c" /* yacc.c:1646 */ break; case 88: -/* Line 1787 of yacc.c */ -#line 495 "command.y" +#line 495 "command.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 1985 "command.c" /* yacc.c:1646 */ break; case 89: -/* Line 1787 of yacc.c */ -#line 496 "command.y" +#line 496 "command.y" /* yacc.c:1646 */ { want_nodeval = true; } +#line 1991 "command.c" /* yacc.c:1646 */ break; case 92: -/* Line 1787 of yacc.c */ -#line 498 "command.y" +#line 498 "command.y" /* yacc.c:1646 */ { want_nodeval = true; } +#line 1997 "command.c" /* yacc.c:1646 */ break; case 95: -/* Line 1787 of yacc.c */ -#line 504 "command.y" +#line 504 "command.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 2003 "command.c" /* yacc.c:1646 */ break; case 97: -/* Line 1787 of yacc.c */ -#line 510 "command.y" +#line 510 "command.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 2009 "command.c" /* yacc.c:1646 */ break; case 99: -/* Line 1787 of yacc.c */ -#line 516 "command.y" +#line 516 "command.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 2015 "command.c" /* yacc.c:1646 */ break; case 104: -/* Line 1787 of yacc.c */ -#line 528 "command.y" +#line 528 "command.y" /* yacc.c:1646 */ { - int idx = find_argument((yyvsp[(1) - (2)])); + int idx = find_argument((yyvsp[-1])); if (idx < 0) - yyerror(_("enable: invalid option - \"%s\""), (yyvsp[(1) - (2)])->a_string); + yyerror(_("enable: invalid option - \"%s\""), (yyvsp[-1])->a_string); else { - efree((yyvsp[(1) - (2)])->a_string); - (yyvsp[(1) - (2)])->a_string = NULL; - (yyvsp[(1) - (2)])->type = D_argument; - (yyvsp[(1) - (2)])->a_argument = argtab[idx].value; + efree((yyvsp[-1])->a_string); + (yyvsp[-1])->a_string = NULL; + (yyvsp[-1])->type = D_argument; + (yyvsp[-1])->a_argument = argtab[idx].value; } } +#line 2031 "command.c" /* yacc.c:1646 */ break; case 106: -/* Line 1787 of yacc.c */ -#line 544 "command.y" +#line 544 "command.y" /* yacc.c:1646 */ { - (yyvsp[(2) - (2)])->type = D_array; /* dump all items */ - (yyvsp[(2) - (2)])->a_count = 0; + (yyvsp[0])->type = D_array; /* dump all items */ + (yyvsp[0])->a_count = 0; } +#line 2040 "command.c" /* yacc.c:1646 */ break; case 107: -/* Line 1787 of yacc.c */ -#line 549 "command.y" +#line 549 "command.y" /* yacc.c:1646 */ { - (yyvsp[(2) - (3)])->type = D_array; - (yyvsp[(2) - (3)])->a_count = num_dim; + (yyvsp[-1])->type = D_array; + (yyvsp[-1])->a_count = num_dim; } +#line 2049 "command.c" /* yacc.c:1646 */ break; case 117: -/* Line 1787 of yacc.c */ -#line 575 "command.y" +#line 575 "command.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 2055 "command.c" /* yacc.c:1646 */ break; case 118: -/* Line 1787 of yacc.c */ -#line 577 "command.y" +#line 577 "command.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 2061 "command.c" /* yacc.c:1646 */ break; case 119: -/* Line 1787 of yacc.c */ -#line 579 "command.y" +#line 579 "command.y" /* yacc.c:1646 */ { CMDARG *a; a = mk_cmdarg(D_int); a->a_int = -1; append_cmdarg(a); } +#line 2072 "command.c" /* yacc.c:1646 */ break; case 126: -/* Line 1787 of yacc.c */ -#line 595 "command.y" +#line 595 "command.y" /* yacc.c:1646 */ { - if ((yyvsp[(1) - (3)])->a_int > (yyvsp[(3) - (3)])->a_int) + if ((yyvsp[-2])->a_int > (yyvsp[0])->a_int) yyerror(_("invalid range specification: %d - %d"), - (yyvsp[(1) - (3)])->a_int, (yyvsp[(3) - (3)])->a_int); + (yyvsp[-2])->a_int, (yyvsp[0])->a_int); else - (yyvsp[(1) - (3)])->type = D_range; - (yyval) = (yyvsp[(1) - (3)]); + (yyvsp[-2])->type = D_range; + (yyval) = (yyvsp[-2]); } +#line 2085 "command.c" /* yacc.c:1646 */ break; case 127: -/* Line 1787 of yacc.c */ -#line 607 "command.y" +#line 607 "command.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 2091 "command.c" /* yacc.c:1646 */ break; case 134: -/* Line 1787 of yacc.c */ -#line 621 "command.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 621 "command.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 2097 "command.c" /* yacc.c:1646 */ break; case 135: -/* Line 1787 of yacc.c */ -#line 623 "command.y" - { (yyval) = (yyvsp[(1) - (3)]); } +#line 623 "command.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[-2]); } +#line 2103 "command.c" /* yacc.c:1646 */ break; case 137: -/* Line 1787 of yacc.c */ -#line 629 "command.y" +#line 629 "command.y" /* yacc.c:1646 */ { CMDARG *a; NODE *subs; int count = 0; - for (a = (yyvsp[(2) - (3)]); a != NULL; a = a->next) + for (a = (yyvsp[-1]); a != NULL; a = a->next) count++; - subs = concat_args((yyvsp[(2) - (3)]), count); - free_cmdarg((yyvsp[(2) - (3)])->next); - (yyvsp[(2) - (3)])->next = NULL; - (yyvsp[(2) - (3)])->type = D_node; - (yyvsp[(2) - (3)])->a_node = subs; - (yyval) = (yyvsp[(2) - (3)]); + subs = concat_args((yyvsp[-1]), count); + free_cmdarg((yyvsp[-1])->next); + (yyvsp[-1])->next = NULL; + (yyvsp[-1])->type = D_node; + (yyvsp[-1])->a_node = subs; + (yyval) = (yyvsp[-1]); } +#line 2122 "command.c" /* yacc.c:1646 */ break; case 139: -/* Line 1787 of yacc.c */ -#line 648 "command.y" - { (yyval) = (yyvsp[(1) - (1)]); num_dim = 1; } +#line 648 "command.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); num_dim = 1; } +#line 2128 "command.c" /* yacc.c:1646 */ break; case 140: -/* Line 1787 of yacc.c */ -#line 650 "command.y" - { (yyval) = (yyvsp[(1) - (2)]); num_dim++; } +#line 650 "command.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[-1]); num_dim++; } +#line 2134 "command.c" /* yacc.c:1646 */ break; case 142: -/* Line 1787 of yacc.c */ -#line 656 "command.y" +#line 656 "command.y" /* yacc.c:1646 */ { - NODE *n = (yyvsp[(2) - (2)])->a_node; + NODE *n = (yyvsp[0])->a_node; if ((n->flags & NUMBER) == 0) yyerror(_("non-numeric value for field number")); else - (yyvsp[(2) - (2)])->type = D_field; - (yyval) = (yyvsp[(2) - (2)]); + (yyvsp[0])->type = D_field; + (yyval) = (yyvsp[0]); } +#line 2147 "command.c" /* yacc.c:1646 */ break; case 143: -/* Line 1787 of yacc.c */ -#line 665 "command.y" +#line 665 "command.y" /* yacc.c:1646 */ { /* a_string is array name, a_count is dimension count */ - (yyvsp[(1) - (2)])->type = D_subscript; - (yyvsp[(1) - (2)])->a_count = num_dim; - (yyval) = (yyvsp[(1) - (2)]); + (yyvsp[-1])->type = D_subscript; + (yyvsp[-1])->a_count = num_dim; + (yyval) = (yyvsp[-1]); } +#line 2158 "command.c" /* yacc.c:1646 */ break; case 144: -/* Line 1787 of yacc.c */ -#line 675 "command.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 675 "command.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 2164 "command.c" /* yacc.c:1646 */ break; case 145: -/* Line 1787 of yacc.c */ -#line 677 "command.y" +#line 677 "command.y" /* yacc.c:1646 */ { - NODE *n = (yyvsp[(2) - (2)])->a_node; + NODE *n = (yyvsp[0])->a_node; if ((n->flags & NUMBER) == 0) yyerror(_("non-numeric value found, numeric expected")); - (yyval) = (yyvsp[(2) - (2)]); + (yyval) = (yyvsp[0]); } +#line 2175 "command.c" /* yacc.c:1646 */ break; case 146: -/* Line 1787 of yacc.c */ -#line 684 "command.y" +#line 684 "command.y" /* yacc.c:1646 */ { - NODE *n = (yyvsp[(2) - (2)])->a_node; + NODE *n = (yyvsp[0])->a_node; if ((n->flags & NUMBER) == 0) yyerror(_("non-numeric value found, numeric expected")); else negate_num(n); - (yyval) = (yyvsp[(2) - (2)]); + (yyval) = (yyvsp[0]); } +#line 2188 "command.c" /* yacc.c:1646 */ break; case 147: -/* Line 1787 of yacc.c */ -#line 696 "command.y" +#line 696 "command.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 2194 "command.c" /* yacc.c:1646 */ break; case 148: -/* Line 1787 of yacc.c */ -#line 698 "command.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 698 "command.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 2200 "command.c" /* yacc.c:1646 */ break; case 149: -/* Line 1787 of yacc.c */ -#line 703 "command.y" +#line 703 "command.y" /* yacc.c:1646 */ { (yyval) = NULL; } +#line 2206 "command.c" /* yacc.c:1646 */ break; case 150: -/* Line 1787 of yacc.c */ -#line 705 "command.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 705 "command.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 2212 "command.c" /* yacc.c:1646 */ break; case 151: -/* Line 1787 of yacc.c */ -#line 710 "command.y" +#line 710 "command.y" /* yacc.c:1646 */ { - if ((yyvsp[(1) - (1)])->a_int == 0) + if ((yyvsp[0])->a_int == 0) yyerror(_("non-zero integer value")); - (yyval) = (yyvsp[(1) - (1)]); + (yyval) = (yyvsp[0]); } +#line 2222 "command.c" /* yacc.c:1646 */ break; case 152: -/* Line 1787 of yacc.c */ -#line 716 "command.y" +#line 716 "command.y" /* yacc.c:1646 */ { - if ((yyvsp[(2) - (2)])->a_int == 0) + if ((yyvsp[0])->a_int == 0) yyerror(_("non-zero integer value")); - (yyval) = (yyvsp[(2) - (2)]); + (yyval) = (yyvsp[0]); } +#line 2232 "command.c" /* yacc.c:1646 */ break; case 153: -/* Line 1787 of yacc.c */ -#line 725 "command.y" - { (yyval) = (yyvsp[(1) - (1)]); } +#line 725 "command.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 2238 "command.c" /* yacc.c:1646 */ break; case 154: -/* Line 1787 of yacc.c */ -#line 727 "command.y" - { (yyval) = (yyvsp[(2) - (2)]); } +#line 727 "command.y" /* yacc.c:1646 */ + { (yyval) = (yyvsp[0]); } +#line 2244 "command.c" /* yacc.c:1646 */ break; case 155: -/* Line 1787 of yacc.c */ -#line 729 "command.y" +#line 729 "command.y" /* yacc.c:1646 */ { - (yyvsp[(2) - (2)])->a_int = - (yyvsp[(2) - (2)])->a_int; - (yyval) = (yyvsp[(2) - (2)]); + (yyvsp[0])->a_int = - (yyvsp[0])->a_int; + (yyval) = (yyvsp[0]); } +#line 2253 "command.c" /* yacc.c:1646 */ break; case 156: -/* Line 1787 of yacc.c */ -#line 737 "command.y" +#line 737 "command.y" /* yacc.c:1646 */ { if (lexptr_begin != NULL) { if (input_from_tty && lexptr_begin[0] != '\0') @@ -2443,11 +2262,11 @@ yyreduce: lexptr_begin = NULL; } } +#line 2266 "command.c" /* yacc.c:1646 */ break; -/* Line 1787 of yacc.c */ -#line 2451 "command.c" +#line 2270 "command.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -2469,7 +2288,7 @@ yyreduce: *++yyvsp = yyval; - /* Now `shift' the result of the reduction. Determine what state + /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ @@ -2484,9 +2303,9 @@ yyreduce: goto yynewstate; -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ +/*--------------------------------------. +| yyerrlab -- here on detecting error. | +`--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ @@ -2537,20 +2356,20 @@ yyerrlab: if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an - error, discard it. */ + error, discard it. */ if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } else - { - yydestruct ("Error: discarding", - yytoken, &yylval); - yychar = YYEMPTY; - } + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } } /* Else will try to reuse lookahead token after shifting the error @@ -2569,7 +2388,7 @@ yyerrorlab: if (/*CONSTCOND*/ 0) goto yyerrorlab; - /* Do not reclaim the symbols of the rule which action triggered + /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; @@ -2582,29 +2401,29 @@ yyerrorlab: | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ + yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) - YYABORT; + YYABORT; yydestruct ("Error: popping", - yystos[yystate], yyvsp); + yystos[yystate], yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); @@ -2655,14 +2474,14 @@ yyreturn: yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); } - /* Do not reclaim the symbols of the rule which action triggered + /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); + yystos[*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow @@ -2673,13 +2492,9 @@ yyreturn: if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif - /* Make sure YYID is used. */ - return YYID (yyresult); + return yyresult; } - - -/* Line 2050 of yacc.c */ -#line 747 "command.y" +#line 747 "command.y" /* yacc.c:1906 */ -- cgit v1.2.3 From 3bf0935358ff2675f1329d3db5e1c02f2a7fe665 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sat, 15 Feb 2014 19:57:25 +0200 Subject: Bump version for test tarball. --- configure | 20 ++++++++++---------- configure.ac | 2 +- pc/config.h | 6 +++--- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/configure b/configure index 8d34771a..6c434883 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for GNU Awk 4.1.0d. +# Generated by GNU Autoconf 2.69 for GNU Awk 4.1.0e. # # Report bugs to . # @@ -580,8 +580,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GNU Awk' PACKAGE_TARNAME='gawk' -PACKAGE_VERSION='4.1.0d' -PACKAGE_STRING='GNU Awk 4.1.0d' +PACKAGE_VERSION='4.1.0e' +PACKAGE_STRING='GNU Awk 4.1.0e' PACKAGE_BUGREPORT='bug-gawk@gnu.org' PACKAGE_URL='http://www.gnu.org/software/gawk/' @@ -1324,7 +1324,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures GNU Awk 4.1.0d to adapt to many kinds of systems. +\`configure' configures GNU Awk 4.1.0e to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1394,7 +1394,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GNU Awk 4.1.0d:";; + short | recursive ) echo "Configuration of GNU Awk 4.1.0e:";; esac cat <<\_ACEOF @@ -1512,7 +1512,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -GNU Awk configure 4.1.0d +GNU Awk configure 4.1.0e generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2221,7 +2221,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by GNU Awk $as_me 4.1.0d, which was +It was created by GNU Awk $as_me 4.1.0e, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3104,7 +3104,7 @@ fi # Define the identity of the package. PACKAGE='gawk' - VERSION='4.1.0d' + VERSION='4.1.0e' cat >>confdefs.h <<_ACEOF @@ -11539,7 +11539,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by GNU Awk $as_me 4.1.0d, which was +This file was extended by GNU Awk $as_me 4.1.0e, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -11607,7 +11607,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -GNU Awk config.status 4.1.0d +GNU Awk config.status 4.1.0e configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 1047cd10..19a32c22 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ dnl dnl Process this file with autoconf to produce a configure script. -AC_INIT([GNU Awk], 4.1.0d, bug-gawk@gnu.org, gawk) +AC_INIT([GNU Awk], 4.1.0e, bug-gawk@gnu.org, gawk) # This is a hack. Different versions of install on different systems # are just too different. Chuck it and use install-sh. diff --git a/pc/config.h b/pc/config.h index d7f9ba91..1d9be09b 100644 --- a/pc/config.h +++ b/pc/config.h @@ -423,7 +423,7 @@ #define PACKAGE_NAME "GNU Awk" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "GNU Awk 4.1.0d" +#define PACKAGE_STRING "GNU Awk 4.1.0e" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "gawk" @@ -432,7 +432,7 @@ #define PACKAGE_URL "http://www.gnu.org/software/gawk/" /* Define to the version of this package. */ -#define PACKAGE_VERSION "4.1.0d" +#define PACKAGE_VERSION "4.1.0e" /* Define to 1 if *printf supports %F format */ #undef PRINTF_HAS_F_FORMAT @@ -494,7 +494,7 @@ /* Version number of package */ -#define VERSION "4.1.0d" +#define VERSION "4.1.0e" /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE -- cgit v1.2.3 From c0949ab99d94f660e1081b6e424dc622a403fc06 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sat, 15 Feb 2014 20:58:05 +0200 Subject: Updated Catalan translation. Add it to dist. --- po/LINGUAS | 1 + po/ca.gmo | Bin 0 -> 43102 bytes po/ca.po | 3523 +++++++++++++++++++++++++++++++++++++++++------------------- 3 files changed, 2419 insertions(+), 1105 deletions(-) create mode 100644 po/ca.gmo diff --git a/po/LINGUAS b/po/LINGUAS index 3ec9de9d..d00794ef 100644 --- a/po/LINGUAS +++ b/po/LINGUAS @@ -1,3 +1,4 @@ +ca da de es diff --git a/po/ca.gmo b/po/ca.gmo new file mode 100644 index 00000000..69ac0450 Binary files /dev/null and b/po/ca.gmo differ diff --git a/po/ca.po b/po/ca.po index d7b6e552..3d9564e7 100644 --- a/po/ca.po +++ b/po/ca.po @@ -1,14 +1,15 @@ # translation of gawk.po to Catalan # Copyright (C) 2003 Free Software Foundation, Inc. +# This file is distributed under the same license as the gawk package. # Antoni Bella Perez , 2003. -# +# Walter Garcia-Fontes , 2014. msgid "" msgstr "" -"Project-Id-Version: gawk 3.1.31\n" +"Project-Id-Version: gawk 4.1.0b\n" "Report-Msgid-Bugs-To: arnold@skeeve.com\n" -"POT-Creation-Date: 2011-03-18 12:00+0200\n" -"PO-Revision-Date: 2003-05-07 21:13+0100\n" -"Last-Translator: Antoni Bella Perez \n" +"POT-Creation-Date: 2014-01-14 22:23+0200\n" +"PO-Revision-Date: 2014-02-10 07:25+0100\n" +"Last-Translator: Walter Garcia-Fontes \n" "Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" @@ -16,1717 +17,2995 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.0.1\n" -#: array.c:103 -#, fuzzy, c-format +#: array.c:256 +#, c-format msgid "from %s" -msgstr "%s (de %s)" +msgstr "de %s" -#: array.c:267 -#, fuzzy +#: array.c:357 msgid "attempt to use a scalar value as array" -msgstr "s'ha intentat usar la dada escalar «%s» com a una matriu" - -#: array.c:270 -#, fuzzy, c-format -msgid "attempt to use function `%s' as an array" -msgstr "s'ha intentat usar la funció «%s» com a una matriu" +msgstr "s'ha intentat usar un valor escalar com a una matriu" -#: array.c:273 +#: array.c:359 #, c-format msgid "attempt to use scalar parameter `%s' as an array" -msgstr "s'ha intentat usar un paràmetre escalar «%s» com a una matriu" +msgstr "s'ha intentat usar un paràmetre escalar `%s' com a una matriu" -#: array.c:276 eval.c:2013 -#, fuzzy, c-format +#: array.c:362 +#, c-format msgid "attempt to use scalar `%s' as an array" -msgstr "s'ha intentat usar la dada escalar «%s» com a una matriu" +msgstr "s'ha intentat usar la dada escalar `%s' com a una matriu" -#: array.c:321 array.c:648 builtin.c:75 builtin.c:555 builtin.c:597 -#: builtin.c:610 builtin.c:1016 builtin.c:1028 eval.c:1381 eval.c:1385 -#: eval.c:1710 eval.c:1958 eval.c:2026 eval.c:2274 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" -msgstr "s'ha intentat usar la matriu «%s» en un context escalar" - -#: array.c:570 -#, fuzzy, c-format -msgid "reference to uninitialized element `%s[\"%.*s\"]'" -msgstr "referència a un element sense valor inicial «%s[\"%s\"]»" - -#: array.c:576 -#, c-format -msgid "subscript of array `%s' is null string" -msgstr "el subscript de la matriu «%s» és una cadena nul·la" +msgstr "s'ha intentat usar la matriu `%s' en un context escalar" -#: array.c:684 +#: array.c:583 #, c-format msgid "delete: index `%s' not in array `%s'" -msgstr "delete: l'índex «%s» no està en la matriu «%s»" - -#: array.c:708 -#, fuzzy, c-format -msgid "attempt to use scalar `%s[\"%.*s\"]' as an array" -msgstr "s'ha intentat usar la dada escalar «%s» com a una matriu" - -#: array.c:871 -#, c-format -msgid "%s: empty (null)\n" -msgstr "%s: buit (nul)\n" +msgstr "delete: l'índex `%s' no està en la matriu `%s'" -#: array.c:876 +#: array.c:597 #, c-format -msgid "%s: empty (zero)\n" -msgstr "%s: buit (zero)\n" - -#: array.c:880 -#, c-format -msgid "%s: table_size = %d, array_size = %d\n" -msgstr "%s: mida_taula = %d, mida_matriu = %d\n" - -#: array.c:915 -#, fuzzy, c-format -msgid "%s: is parameter\n" -msgstr "%s: és un paràmetre\n" - -#: array.c:919 -#, c-format -msgid "%s: array_ref to %s\n" -msgstr "%s: ref_matriu a %s\n" - -#: array.c:924 -#, fuzzy -msgid "adump: argument not an array" -msgstr "asort: el primer argument no és una matriu" +msgid "attempt to use scalar `%s[\"%.*s\"]' as an array" +msgstr "s'ha intentat usar la dada escalar `%s[\"%.*s\"]' com a una matriu" -#: array.c:1142 -#, fuzzy -msgid "attempt to use array in a scalar context" -msgstr "s'ha intentat usar la matriu «%s» en un context escalar" +#: array.c:776 +msgid "adump: first argument not an array" +msgstr "adump: el primer argument no és una matriu" -#: array.c:1239 -#, fuzzy +#: array.c:815 msgid "asort: second argument not an array" msgstr "asort: el segon argument no és una matriu" -#: array.c:1240 -#, fuzzy +#: array.c:816 msgid "asorti: second argument not an array" -msgstr "asort: el segon argument no és una matriu" +msgstr "asorti: el segon argument no és una matriu" -#: array.c:1247 -#, fuzzy +#: array.c:823 msgid "asort: first argument not an array" msgstr "asort: el primer argument no és una matriu" -#: array.c:1248 -#, fuzzy +#: array.c:824 msgid "asorti: first argument not an array" msgstr "asort: el primer argument no és una matriu" -#: awkgram.y:249 -#, fuzzy, c-format +#: array.c:831 +msgid "asort: cannot use a subarray of first arg for second arg" +msgstr "" + +#: array.c:832 +msgid "asorti: cannot use a subarray of first arg for second arg" +msgstr "" + +#: array.c:837 +msgid "asort: cannot use a subarray of second arg for first arg" +msgstr "" + +#: array.c:838 +msgid "asorti: cannot use a subarray of second arg for first arg" +msgstr "" + +#: array.c:1314 +#, c-format +msgid "`%s' is invalid as a function name" +msgstr "" + +#: array.c:1318 +#, c-format +msgid "sort comparison function `%s' is not defined" +msgstr "la funció de commparació d'ordenació `%s' no està definida" + +#: awkgram.y:233 +#, c-format msgid "%s blocks must have an action part" -msgstr "Els blocs FINAL han de tindre una part d'acció" +msgstr "%s blocs han de tenir una part d'acció" -#: awkgram.y:252 -#, fuzzy +#: awkgram.y:236 msgid "each rule must have a pattern or an action part" -msgstr "Els blocs FINAL han de tindre una part d'acció" +msgstr "cada regla ha de tenir un patró o una part d'acció" -#: awkgram.y:323 awkgram.y:334 -#, fuzzy +#: awkgram.y:325 awkgram.y:336 msgid "old awk does not support multiple `BEGIN' or `END' rules" -msgstr "l'antic awk no suporta l'operador «**=»" +msgstr "l'antic awk no suporta múltiples regles `BEGIN' i `END'" -#: awkgram.y:371 +#: awkgram.y:373 #, c-format msgid "`%s' is a built-in function, it cannot be redefined" -msgstr "«%s» és una funció interna, no pot ser redefinida" +msgstr "`%s' és una funció interna, no pot ser redefinida" -#: awkgram.y:432 -#, fuzzy +#: awkgram.y:419 msgid "regexp constant `//' looks like a C++ comment, but is not" -msgstr "" -"la constant d'expressió regular «/%s/» sembla un comentari en C, perà no ho " -"és" +msgstr "la constant d'expressió regular `//' sembla un comentari en C++, però no ho és" -#: awkgram.y:436 +#: awkgram.y:423 #, 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" +msgstr "la constant d'expressió regular `/%s/' sembla un comentari en C, perà no ho és" -#: awkgram.y:528 +#: awkgram.y:515 #, c-format msgid "duplicate case values in switch body: %s" msgstr "" -#: awkgram.y:549 +#: awkgram.y:536 msgid "duplicate `default' detected in switch body" msgstr "" -#: awkgram.y:811 -#, fuzzy +#: awkgram.y:796 awkgram.y:3699 msgid "`break' is not allowed outside a loop or switch" -msgstr "no es permet «break» a fora d'un bucle" +msgstr "no es permet `break' a fora d'un bucle o bifurcació" -#: awkgram.y:820 -#, fuzzy +#: awkgram.y:805 awkgram.y:3691 msgid "`continue' is not allowed outside a loop" -msgstr "no es permet «continue» a fora d'un bucle" +msgstr "no es permet `continue' a fora d'un bucle" -#: awkgram.y:829 -#, fuzzy, c-format +#: awkgram.y:815 +#, c-format msgid "`next' used in %s action" -msgstr "«next» és usat dintre de l'acció BEGIN o END" +msgstr "`next' usat a l'acció %s" -#: awkgram.y:837 -msgid "`nextfile' is a gawk extension" -msgstr "«nextfile» és una extensió de gawk" - -#: awkgram.y:840 -#, fuzzy, c-format +#: awkgram.y:824 +#, c-format msgid "`nextfile' used in %s action" -msgstr "«next» és usat dintre de l'acció BEGIN o END" +msgstr "`nextfile' usat a l'acció %s" -#: awkgram.y:863 +#: awkgram.y:848 msgid "`return' used outside function context" -msgstr "«return» és usat fora del context d'una funció" +msgstr "`return' és usat fora del context d'una funció" -#: awkgram.y:923 +#: awkgram.y:922 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 +msgid "`delete' is not allowed with SYMTAB" msgstr "" -"el «print» simple en la regla BEGIN o END probablement ha de ser «print \"\"»" -#: awkgram.y:993 awkgram.y:997 awkgram.y:1021 -msgid "`delete array' is a gawk extension" -msgstr "«delete array» és una extensió de gawk" +#: awkgram.y:990 awkgram.y:1039 +msgid "`delete' is not allowed with FUNCTAB" +msgstr "" -#: awkgram.y:1017 -#, fuzzy +#: awkgram.y:1024 awkgram.y:1028 msgid "`delete(array)' is a non-portable tawk extension" -msgstr "«delete array» és una extensió de gawk" +msgstr "`delete(array)' és una extenció tawk no portable" -#: awkgram.y:1133 +#: awkgram.y:1149 msgid "multistage two-way pipelines don't work" msgstr "les canonades bidireccionals multi-etapes no funcionen" -#: awkgram.y:1236 +#: awkgram.y:1264 msgid "regular expression on right of assignment" msgstr "expressió regular a la dreta d'una assignació" -#: awkgram.y:1247 +#: awkgram.y:1275 msgid "regular expression on left of `~' or `!~' operator" -msgstr "expressió regular a l'esquerra de l'operador «~» o «!~»" +msgstr "expressió regular a l'esquerra de l'operador `~' o `!~'" -#: awkgram.y:1263 awkgram.y:1417 -#, fuzzy +#: awkgram.y:1291 awkgram.y:1442 msgid "old awk does not support the keyword `in' except after `for'" -msgstr "l'antic awk no suporta l'operador «**=»" +msgstr "l'antic awk no dóna suport a la paraula clau `in' excepte després de `for'" -#: awkgram.y:1273 +#: awkgram.y:1301 msgid "regular expression on right of comparison" msgstr "expressió regular a la derta de la comparació" -#: awkgram.y:1392 -#, fuzzy, c-format +#: awkgram.y:1417 +#, c-format msgid "`getline var' invalid inside `%s' rule" -msgstr "port remot no vàlid en «%s»" +msgstr "`getline var' no és vàlid a dins de la regla `%s'" -#: awkgram.y:1395 eval.c:2649 -#, fuzzy, c-format +#: awkgram.y:1420 +#, c-format msgid "`getline' invalid inside `%s' rule" -msgstr "port remot no vàlid en «%s»" +msgstr "`getline' no és vàlid a dins de la regla `%s'" -#: awkgram.y:1400 +#: awkgram.y:1425 msgid "non-redirected `getline' undefined inside END action" -msgstr "«getline» no redirigit sense definir dintre de l'acció FINAL" +msgstr "`getline' no redirigit sense definir dintre de l'acció FINAL" -#: awkgram.y:1419 -#, fuzzy +#: awkgram.y:1444 msgid "old awk does not support multidimensional arrays" -msgstr "l'antic awk no suporta l'operador «**=»" +msgstr "l'antic awk no suporta matrius multidimensionals" -#: awkgram.y:1515 +#: awkgram.y:1541 msgid "call of `length' without parentheses is not portable" -msgstr "la crida de «length» sense parèntesis no és portable" +msgstr "la crida de `length' sense parèntesis no és portable" -#: awkgram.y:1578 -#, fuzzy +#: awkgram.y:1607 msgid "indirect function calls are a gawk extension" -msgstr "«nextfile» és una extensió de gawk" +msgstr "les crides a funcions indirectes són una extensió gawk" -#: awkgram.y:1591 -#, fuzzy, c-format +#: awkgram.y:1620 +#, c-format msgid "can not use special variable `%s' for indirect function call" -msgstr "funció «%s»: no pot usar el nom de la funció com a paràmetre" +msgstr "" -#: awkgram.y:1669 +#: awkgram.y:1698 msgid "invalid subscript expression" msgstr "expressió de subscript no vàlida" -#: awkgram.y:1709 -msgid "use of non-array as array" -msgstr "" - -#: awkgram.y:1973 awkgram.y:1993 msg.c:98 +#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "ADVERTIMENT: " -#: awkgram.y:1991 msg.c:130 +#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "Fatal: " -#: awkgram.y:2041 -#, fuzzy +#: awkgram.y:2092 msgid "unexpected newline or end of string" -msgstr "nova línia inesperada" +msgstr "nova línia inesperada o final d'una cadena de caràcters" -#: awkgram.y:2297 awkgram.y:2355 awkgram.y:2539 +#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 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)" +msgstr "no es pot obrir el fitxer font `%s' per a lectura (%s)" + +#: awkgram.y:2360 awkgram.y:2485 +#, 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:2298 awkgram.y:2356 builtin.c:119 +#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "motiu desconegut" -#: awkgram.y:2314 -#, fuzzy, c-format +#: awkgram.y:2371 awkgram.y:2395 +#, c-format +msgid "can't include `%s' and use it as a program file" +msgstr "" + +#: awkgram.y:2384 +#, c-format msgid "already included source file `%s'" -msgstr "no es pot llegir el fitxer font «%s» (%s)" +msgstr "ja s'ha inclòs el fitxer font `%s'" -#: awkgram.y:2340 -#, fuzzy +#: awkgram.y:2385 +#, c-format +msgid "already loaded shared library `%s'" +msgstr "" + +#: awkgram.y:2420 msgid "@include is a gawk extension" -msgstr "«nextfile» és una extensió de gawk" +msgstr "@include és una extensió de gawk" -#: awkgram.y:2346 +#: awkgram.y:2426 msgid "empty filename after @include" msgstr "" -#: awkgram.y:2491 +#: awkgram.y:2470 +msgid "@load is a gawk extension" +msgstr "@load és una extensió de gawk" + +#: awkgram.y:2476 +msgid "empty filename after @load" +msgstr "" + +#: awkgram.y:2610 msgid "empty program text on command line" msgstr "el text del programa en la línia de comandaments està buit" -#: awkgram.y:2606 +#: awkgram.y:2725 #, c-format msgid "can't read sourcefile `%s' (%s)" -msgstr "no es pot llegir el fitxer font «%s» (%s)" +msgstr "no es pot llegir el fitxer font `%s' (%s)" -#: awkgram.y:2617 +#: awkgram.y:2736 #, c-format msgid "source file `%s' is empty" -msgstr "el fitxer font «%s» està buit" +msgstr "el fitxer font `%s' està buit" -#: awkgram.y:2802 +#: awkgram.y:2913 msgid "source file does not end in newline" msgstr "el fitxer font no finalitza amb un retorn de carro" -#: awkgram.y:2879 +#: awkgram.y:3018 msgid "unterminated regexp ends with `\\' at end of file" -msgstr "expressió regular sense finalitzar acaba amb «\\» al final del fitxer" +msgstr "expressió regular sense finalitzar acaba amb `\\' al final del fitxer" -#: awkgram.y:2903 +#: awkgram.y:3042 #, c-format msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk" msgstr "" -#: awkgram.y:2907 +#: awkgram.y:3046 #, c-format msgid "tawk regex modifier `/.../%c' doesn't work in gawk" msgstr "" -#: awkgram.y:2914 +#: awkgram.y:3053 msgid "unterminated regexp" msgstr "expressió regular sense finalitzar" -#: awkgram.y:2918 +#: awkgram.y:3057 msgid "unterminated regexp at end of file" msgstr "expressió regular sense finalitzar al final del fitxer" -#: awkgram.y:2977 +#: awkgram.y:3116 msgid "use of `\\ #...' line continuation is not portable" -msgstr "l'ús de «\\ #...» com a continuació de línia no és portable" +msgstr "l'ús de `\\ #...' com a continuació de línia no és portable" -#: awkgram.y:2993 +#: awkgram.y:3132 msgid "backslash not last character on line" msgstr "la barra invertida no és l'últim caràcter en la línia" -#: awkgram.y:3054 +#: awkgram.y:3193 msgid "POSIX does not allow operator `**='" -msgstr "POSIX no permet l'operador «**=»" +msgstr "POSIX no permet l'operador `**='" -#: awkgram.y:3056 +#: awkgram.y:3195 msgid "old awk does not support operator `**='" -msgstr "l'antic awk no suporta l'operador «**=»" +msgstr "l'antic awk no suporta l'operador `**='" -#: awkgram.y:3065 +#: awkgram.y:3204 msgid "POSIX does not allow operator `**'" -msgstr "POSIX no permet l'operador «**»" +msgstr "POSIX no permet l'operador `**'" -#: awkgram.y:3067 +#: awkgram.y:3206 msgid "old awk does not support operator `**'" -msgstr "l'antic awk no suporta l'operador «**=»" +msgstr "l'antic awk no suporta l'operador `**='" -#: awkgram.y:3102 +#: awkgram.y:3241 msgid "operator `^=' is not supported in old awk" -msgstr "l'operador «^=» no està suportat en l'antic awk" +msgstr "l'operador `^=' no està suportat en l'antic awk" -#: awkgram.y:3110 +#: awkgram.y:3249 msgid "operator `^' is not supported in old awk" -msgstr "l'operador «^» no està suportat en l'antic awk" +msgstr "l'operador `^' no està suportat en l'antic awk" -#: awkgram.y:3203 awkgram.y:3219 +#: awkgram.y:3342 awkgram.y:3358 command.y:1178 msgid "unterminated string" msgstr "cadena sense finalitzar" -#: awkgram.y:3415 +#: awkgram.y:3579 #, c-format msgid "invalid char '%c' in expression" -msgstr "caràcter «%c» no vàlid en l'expressió" +msgstr "caràcter `%c' no vàlid en l'expressió" -#: awkgram.y:3462 +#: awkgram.y:3626 #, c-format msgid "`%s' is a gawk extension" -msgstr "«%s» és una extensió de gawk" - -#: awkgram.y:3467 -#, c-format -msgid "`%s' is a Bell Labs extension" -msgstr "«%s» és una extensió de Bell Labs" +msgstr "`%s' és una extensió de gawk" -#: awkgram.y:3472 +#: awkgram.y:3631 #, c-format msgid "POSIX does not allow `%s'" msgstr "POSIX no permet «%s»" -#: awkgram.y:3480 +#: awkgram.y:3639 #, c-format msgid "`%s' is not supported in old awk" -msgstr "«%s» no està suportat en l'antic awk" +msgstr "`%s' no està suportat en l'antic awk" -#: awkgram.y:3550 +#: awkgram.y:3729 msgid "`goto' considered harmful!\n" -msgstr "«goto» se considera nefast!\n" +msgstr "`goto' se considera nefast!\n" -#: awkgram.y:3602 +#: awkgram.y:3763 #, 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:3637 awkgram.y:3640 -msgid "match: third argument is a gawk extension" -msgstr "match: el tercer argument és una extensió de gawk" - -#: awkgram.y:3668 +#: awkgram.y:3798 #, 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:3673 -#, fuzzy, c-format +#: awkgram.y:3803 +#, c-format msgid "%s third parameter is not a changeable object" -msgstr "sub: el tercer argument no és un objecte intercanviable" +msgstr "%s el tercer paràmetre no és un objecte intercanviable" -#: awkgram.y:3759 awkgram.y:3762 +#: awkgram.y:3886 awkgram.y:3889 +msgid "match: third argument is a gawk extension" +msgstr "match: el tercer argument és una extensió de gawk" + +#: awkgram.y:3943 awkgram.y:3946 msgid "close: second argument is a gawk extension" msgstr "close: el segon argument és una extensió de gawk" -#: awkgram.y:3774 +#: awkgram.y:3958 msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore" -msgstr "" -"l'ús de dcgettext(_\"...\") no és correcte: elimineu el guió baix inicial" +msgstr "l'ús de dcgettext(_\"...\") no és correcte: elimineu el guió baix inicial" -#: awkgram.y:3789 -#, fuzzy +#: awkgram.y:3973 msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" -msgstr "" -"l'ús de dcgettext(_\"...\") no és correcte: elimineu el guió baix inicial" +msgstr "l'ús de dcgettext(_\"...\") no és correcte: elimineu el guió baix inicial" -#: awkgram.y:3881 -#, 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:3992 +msgid "index: regexp constant as second argument is not allowed" +msgstr "índex: no es permert una constant regexp com a segon argument" -#: awkgram.y:3923 +#: awkgram.y:4045 #, c-format msgid "function `%s': parameter `%s' shadows global variable" -msgstr "funció «%s»: paràmetre «%s» ofusca la variable global" +msgstr "funció `%s': paràmetre `%s' ofusca la variable global" -#: awkgram.y:4081 +#: awkgram.y:4102 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)" +msgstr "no es pot obrir `%s' per a escriptura (%s)" -#: awkgram.y:4082 profile.c:85 -msgid "sending profile to standard error" -msgstr "enviant el perfil a l'eixida d'error estàndard" +#: awkgram.y:4103 +msgid "sending variable list to standard error" +msgstr "s'està enviant la llista de variables a l'eixida d'error estàndard" -#: awkgram.y:4088 +#: awkgram.y:4111 #, c-format msgid "%s: close failed (%s)" msgstr "%s: tancament erroni (%s)" -#: awkgram.y:4140 +#: awkgram.y:4136 msgid "shadow_funcs() called twice!" msgstr "shadow_funcs() crida dos vegades!" -#: awkgram.y:4146 +#: awkgram.y:4144 msgid "there were shadowed variables." msgstr "" -#: awkgram.y:4176 +#: awkgram.y:4215 +#, c-format +msgid "function name `%s' previously defined" +msgstr "nom de la funció `%s' definida prèviament" + +#: awkgram.y:4261 #, 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" +msgstr "funció `%s»: no pot usar el nom de la funció com a paràmetre" -#: awkgram.y:4180 -#, fuzzy, c-format +#: awkgram.y:4264 +#, c-format msgid "function `%s': can't use special variable `%s' as a function parameter" -msgstr "funció «%s»: no pot usar el nom de la funció com a paràmetre" +msgstr "funció `%s': no es pot usar la variable especial `%s' com a un paràmetre de funció" -#: awkgram.y:4196 +#: awkgram.y:4272 #, c-format -msgid "function name `%s' previously defined" -msgstr "nom de la funció «%s» definida prèviament" +msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d" +msgstr "funció `%s': paràmetre #%d, `%s', duplica al paràmetre #%d" -#: awkgram.y:4364 awkgram.y:4370 +#: awkgram.y:4359 awkgram.y:4365 #, c-format msgid "function `%s' called but never defined" -msgstr "es crida a la funció «%s» però no s'ha definit" +msgstr "es crida a la funció `%s' però no s'ha definit" -#: awkgram.y:4373 -#, fuzzy, c-format +#: awkgram.y:4369 +#, c-format msgid "function `%s' defined but never called directly" -msgstr "es defineix la funció «%s» però no s'ha cridat mai" +msgstr "la funció `%s' està definida però no s'ha cridat mai directament" -#: awkgram.y:4405 +#: awkgram.y:4401 #, 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à" +msgstr "l'expressió regular constant per al paràmetre #%d condueix a un valor booleà" -#: awkgram.y:4514 -#, fuzzy, c-format +#: awkgram.y:4460 +#, c-format msgid "" "function `%s' called with space between name and `(',\n" "or used as a variable or an array" msgstr "" -"s'ha cridat a la funció «%s» amb espai entre el nom i el «(»,\n" -"%s" +"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:4761 eval.c:2206 +#: awkgram.y:4696 msgid "division by zero attempted" msgstr "s'ha intentat una divisió per zero" -#: awkgram.y:4770 eval.c:2222 +#: awkgram.y:4705 #, c-format msgid "division by zero attempted in `%%'" -msgstr "s'ha intentat una divisió per zero en «%%»" +msgstr "s'ha intentat una divisió per zero en `%%'" + +#: awkgram.y:5025 +msgid "cannot assign a value to the result of a field post-increment expression" +msgstr "" -#: builtin.c:117 +#: awkgram.y:5028 +#, c-format +msgid "invalid target of assignment (opcode %s)" +msgstr "destí no vàlid d'assignació (opcode %s)" + +#: builtin.c:133 #, c-format msgid "%s to \"%s\" failed (%s)" msgstr "%s a \"%s\" ha fallat (%s)" -#: builtin.c:118 +#: builtin.c:134 msgid "standard output" msgstr "eixida estàndard" -#: builtin.c:132 +#: builtin.c:148 msgid "exp: received non-numeric argument" msgstr "exp: s'ha rebut un argument que no és un número" -#: builtin.c:138 +#: builtin.c:154 #, c-format msgid "exp: argument %g is out of range" msgstr "exp: l'argument %g està fora de rang" -#: builtin.c:197 +#: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" -msgstr "" -"fflush: no es pot netejar: la canonada «%s» s'ha obert per a lectura, no per " -"a escriptura" +msgstr "fflush: no es pot netejar: la canonada `%s' s'ha obert per a lectura, no per a escriptura" -#: builtin.c:200 +#: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" -msgstr "" -"fflush: no es pot netejar: el fitxer «%s» s'ha obert per a lectura, no per a " -"escriptura" +msgstr "fflush: no es pot netejar: el fitxer `%s' s'ha obert per a lectura, no per a escriptura" -#: builtin.c:212 +#: builtin.c:244 #, c-format 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" +msgstr "fflush: `%s' no és un fitxer obert, canonada o co-procés" -#: builtin.c:330 +#: builtin.c:362 msgid "index: received non-string first argument" msgstr "índex: el primer argument rebut no és una cadena" -#: builtin.c:332 +#: builtin.c:364 msgid "index: received non-string second argument" msgstr "índex: el segon argument rebut no és una cadena" -#: builtin.c:454 +#: builtin.c:488 mpfr.c:757 msgid "int: received non-numeric argument" msgstr "int: s'ha rebut un argument no numèric" -#: builtin.c:490 -#, fuzzy +#: builtin.c:525 msgid "length: received array argument" -msgstr "length: s'ha rebut un argument que no és una cadena" +msgstr "length: s'ha rebut un argument de matriu" -#: builtin.c:493 -#, fuzzy +#: builtin.c:528 msgid "`length(array)' is a gawk extension" -msgstr "«delete array» és una extensió de gawk" +msgstr "`length(array)' és una extensió de gawk" -#: builtin.c:501 +#: builtin.c:544 msgid "length: received non-string argument" msgstr "length: s'ha rebut un argument que no és una cadena" -#: builtin.c:532 +#: builtin.c:575 msgid "log: received non-numeric argument" msgstr "log: s'ha rebut un argument no numèric" -#: builtin.c:535 +#: builtin.c:578 #, c-format msgid "log: received negative argument %g" msgstr "log: s'ha rebut l'argument negatiu %g" -#: builtin.c:593 builtin.c:604 +#: builtin.c:776 builtin.c:781 +msgid "fatal: must use `count$' on all formats or none" +msgstr "" + +#: builtin.c:851 +#, c-format +msgid "field width is ignored for `%%' specifier" +msgstr "" + +#: builtin.c:853 +#, c-format +msgid "precision is ignored for `%%' specifier" +msgstr "" + +#: builtin.c:855 +#, c-format +msgid "field width and precision are ignored for `%%' specifier" +msgstr "" + +#: builtin.c:906 +msgid "fatal: `$' is not permitted in awk formats" +msgstr "fatal: no es permeten `$' en els formats awk" + +#: builtin.c:915 +msgid "fatal: arg count with `$' must be > 0" +msgstr "fatal: el recompte d'arguments amb `$' ha de ser > 0" + +#: builtin.c:919 +#, 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 +msgid "fatal: `$' not permitted after period in format" +msgstr "fatal: no es permet `$' després d'un punt en el format" + +#: builtin.c:939 +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:1011 +msgid "`l' is meaningless in awk formats; ignored" +msgstr "`l' manca de significat en els formats awk; serà ignorat" + +#: builtin.c:1015 +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:1028 +msgid "`L' is meaningless in awk formats; ignored" +msgstr "`L' manca de significat en els formats awk; serà ignorat" + +#: builtin.c:1032 +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:1045 +msgid "`h' is meaningless in awk formats; ignored" +msgstr "`h' manca de significat en els formats awk; serà ignorat" + +#: builtin.c:1049 +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:1447 +#, c-format +msgid "[s]printf: value %g is out of range for `%%%c' format" +msgstr "" + +#: builtin.c:1545 +#, c-format +msgid "ignoring unknown format specifier character `%c': no argument converted" +msgstr "" + +#: builtin.c:1550 +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:1552 +msgid "^ ran out for this one" +msgstr "^ desbordament per a aquest" + +#: builtin.c:1559 +msgid "[s]printf: format specifier does not have control letter" +msgstr "[s]printf: l'especificador de format no conté lletra de control" + +#: builtin.c:1562 +msgid "too many arguments supplied for format string" +msgstr "s'han proporcionat masses arguments per a la cadena de format" + +#: builtin.c:1618 +msgid "sprintf: no arguments" +msgstr "sprintf: sense arguments" + +#: builtin.c:1641 builtin.c:1652 msgid "printf: no arguments" msgstr "printf: sense arguments" -#: builtin.c:645 +#: builtin.c:1695 msgid "sqrt: received non-numeric argument" msgstr "sqrt: s'ha rebut un argument no numèric" -#: builtin.c:649 +#: builtin.c:1699 #, c-format msgid "sqrt: called with negative argument %g" msgstr "sqrt: cridat amb l'argument negatiu %g" -#: builtin.c:673 -#, fuzzy, c-format +#: builtin.c:1730 +#, c-format msgid "substr: length %g is not >= 1" -msgstr "substr: la longitud %g és <= 0" +msgstr "substr: la longitud %g no és >= 1" -#: builtin.c:675 -#, fuzzy, c-format +#: builtin.c:1732 +#, c-format msgid "substr: length %g is not >= 0" -msgstr "substr: la longitud %g és <= 0" +msgstr "substr: la longitud %g no és >= 0" -#: builtin.c:682 +#: builtin.c:1739 #, 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:687 +#: builtin.c:1744 #, c-format msgid "substr: length %g too big for string indexing, truncating to %g" msgstr "" -#: builtin.c:699 +#: builtin.c:1756 #, 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:704 +#: builtin.c:1761 #, 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:729 +#: builtin.c:1786 msgid "substr: source string is zero length" msgstr "substr: la cadena font és de longitud zero" -#: builtin.c:745 -#, fuzzy, c-format +#: builtin.c:1802 +#, c-format msgid "substr: start index %g is past end of string" -msgstr "substr: l'índex d'inici %d sobrepassa l'acabament de la cadena" +msgstr "substr: l'índex d'inici %g sobrepassa l'acabament de la cadena" -#: builtin.c:753 -#, fuzzy, c-format -msgid "" -"substr: length %g at start index %g exceeds length of first argument (%lu)" -msgstr "" -"substr: la longitud %d a l'índex d'inici %d excedeix la longitud del 1er " -"argument (%d)" +#: builtin.c:1810 +#, c-format +msgid "substr: length %g at start index %g exceeds length of first argument (%lu)" +msgstr "substr: la longitud %g a l'índex d'inici %g excedeix la longitud del 1er argument (%lu)" -#: builtin.c:826 +#: builtin.c:1884 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" msgstr "" -#: builtin.c:840 -#, fuzzy +#: builtin.c:1907 msgid "strftime: received non-numeric second argument" -msgstr "strftime: el segon argument rebut no és numèric" +msgstr "strftime: s'ha rebut un segon argument no numèric" -#: builtin.c:847 -#, fuzzy +#: builtin.c:1911 +msgid "strftime: second argument less than 0 or too big for time_t" +msgstr "" + +#: builtin.c:1918 msgid "strftime: received non-string first argument" msgstr "strftime: el primer argument rebut no és una cadena" -#: builtin.c:853 +#: builtin.c:1925 msgid "strftime: received empty format string" msgstr "strftime: s'ha rebut una cadena de format buida" -#: builtin.c:919 +#: builtin.c:1991 msgid "mktime: received non-string argument" msgstr "mktime: s'ha rebut un argument que no és una cadena" -#: builtin.c:936 +#: builtin.c:2008 msgid "mktime: at least one of the values is out of the default range" msgstr "" -#: builtin.c:971 +#: builtin.c:2043 msgid "'system' function not allowed in sandbox mode" msgstr "" -#: builtin.c:976 -#, fuzzy +#: builtin.c:2048 msgid "system: received non-string argument" msgstr "system: s'ha rebut un argument que no és una cadena" -#: builtin.c:1031 eval.c:1411 eval.c:1936 eval.c:1949 +#: builtin.c:2168 #, c-format -msgid "reference to uninitialized variable `%s'" -msgstr "referència a una variable sense inicialitzar «%s»" - -#: builtin.c:1098 -#, fuzzy, c-format msgid "reference to uninitialized field `$%d'" -msgstr "referència a una variable sense inicialitzar «%s»" +msgstr "referència a una variable sense inicialitzar `$%d'" -#: builtin.c:1185 -#, fuzzy +#: builtin.c:2255 msgid "tolower: received non-string argument" msgstr "tolower: s'ha rebut un argument que no és una cadena" -#: builtin.c:1219 -#, fuzzy +#: builtin.c:2289 msgid "toupper: received non-string argument" msgstr "toupper: s'ha rebut un argument que no és una cadena" -#: builtin.c:1255 +#: builtin.c:2325 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2: el primer argument rebut no és numèric" -#: builtin.c:1257 +#: builtin.c:2327 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2: el segon argument rebut no és numèric" -#: builtin.c:1276 +#: builtin.c:2346 msgid "sin: received non-numeric argument" msgstr "sin: s'ha rebut un argument que no és numèric" -#: builtin.c:1292 +#: builtin.c:2362 msgid "cos: received non-numeric argument" msgstr "cos: s'ha rebut un argument que no és numèric" -#: builtin.c:1345 +#: builtin.c:2415 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand: s'ha rebut un argument que no és numèric" -#: builtin.c:1376 +#: builtin.c:2446 msgid "match: third argument is not an array" msgstr "match: el tercer argument no és una matriu" -#: builtin.c:1883 -#, fuzzy +#: builtin.c:2718 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub: el tercer argument de 0 és tractat com a 1" -#: builtin.c:1923 +#: builtin.c:3014 msgid "lshift: received non-numeric first argument" msgstr "lshift: el primer argument rebut no és numèric" -#: builtin.c:1925 -#, fuzzy +#: builtin.c:3016 msgid "lshift: received non-numeric second argument" -msgstr "atan2: el segon argument rebut no és numèric" +msgstr "lshift: el segon argument rebut no és numèric" -#: builtin.c:1931 +#: builtin.c:3022 #, c-format -msgid "lshift(%lf, %lf): negative values will give strange results" -msgstr "lshift(%lf, %lf): els valors negatius donaran resultats estranys" +msgid "lshift(%f, %f): negative values will give strange results" +msgstr "lshift(%f, %f): els valors negatius donaran resultats estranys" -#: builtin.c:1933 +#: builtin.c:3024 #, c-format -msgid "lshift(%lf, %lf): fractional values will be truncated" -msgstr "lshift(%lf, %lf): els valors fraccionaris sernn truncats" +msgid "lshift(%f, %f): fractional values will be truncated" +msgstr "lshift(%f, %f): els valors fraccionaris sernn truncats" -#: builtin.c:1935 +#: builtin.c:3026 #, c-format -msgid "lshift(%lf, %lf): too large shift value will give strange results" -msgstr "" -"lshift(%lf, %lf): un valor de desplaçament massa gran donarà resultats " -"estranys" +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:1960 +#: builtin.c:3051 msgid "rshift: received non-numeric first argument" msgstr "rshift: el primer argument rebut no és numèric" -#: builtin.c:1962 -#, fuzzy +#: builtin.c:3053 msgid "rshift: received non-numeric second argument" -msgstr "atan2: el segon argument rebut no és numèric" +msgstr "rshift: el segon argument rebut no és numèric" -#: builtin.c:1968 +#: builtin.c:3059 #, c-format -msgid "rshift(%lf, %lf): negative values will give strange results" -msgstr "rshift(%lf, %lf): els valors negatius donaran resultats estranys" +msgid "rshift(%f, %f): negative values will give strange results" +msgstr "rshift(%f, %f): els valors negatius donaran resultats estranys" -#: builtin.c:1970 +#: builtin.c:3061 #, c-format -msgid "rshift(%lf, %lf): fractional values will be truncated" -msgstr "rshift(%lf, %lf): els valors fraccionaris seran truncats" +msgid "rshift(%f, %f): fractional values will be truncated" +msgstr "rshift(%f, %f): els valors fraccionaris seran truncats" -#: builtin.c:1972 +#: builtin.c:3063 #, c-format -msgid "rshift(%lf, %lf): too large shift value will give strange results" -msgstr "" -"rshift(%lf, %lf): un valor de desplaçament massa gran donarà resultats " -"estranys" +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:1997 -msgid "and: received non-numeric first argument" -msgstr "and: el primer argument rebut no és numèric" - -#: builtin.c:1999 -#, fuzzy -msgid "and: received non-numeric second argument" -msgstr "atan2: el segon argument rebut no és numèric" +#: builtin.c:3088 mpfr.c:968 +msgid "and: called with less than two arguments" +msgstr "and: cridat amb menys de dos arguments" -#: builtin.c:2005 +#: builtin.c:3093 #, c-format -msgid "and(%lf, %lf): negative values will give strange results" -msgstr "and(%lf, %lf): els valors negatius donaran resultats estranys" +msgid "and: argument %d is non-numeric" +msgstr "exp: l'argument %d no és numèric" -#: builtin.c:2007 +#: builtin.c:3097 #, c-format -msgid "and(%lf, %lf): fractional values will be truncated" -msgstr "and(%lf, %lf): els valors fraccionaris seran truncats" - -#: builtin.c:2032 -msgid "or: received non-numeric first argument" -msgstr "or: el primer argument rebut no és numèric" +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:2034 -#, fuzzy -msgid "or: received non-numeric second argument" -msgstr "atan2: el segon argument rebut no és numèric" +#: builtin.c:3120 mpfr.c:1000 +msgid "or: called with less than two arguments" +msgstr "or: cridat amb menys de dos arguments" -#: builtin.c:2040 +#: builtin.c:3125 #, c-format -msgid "or(%lf, %lf): negative values will give strange results" -msgstr "or(%lf, %lf): els valors negatius donaran resultats estranys" +msgid "or: argument %d is non-numeric" +msgstr "or: l'argument %d no és numèric" -#: builtin.c:2042 +#: builtin.c:3129 #, c-format -msgid "or(%lf, %lf): fractional values will be truncated" -msgstr "or(%lf, %lf): els valors fraccionaris seran truncats" +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:2070 -msgid "xor: received non-numeric first argument" -msgstr "xor: el primer argument rebut no és numèric" - -#: builtin.c:2072 -#, fuzzy -msgid "xor: received non-numeric second argument" -msgstr "atan2: el segon argument rebut no és numèric" +#: builtin.c:3151 mpfr.c:1031 +msgid "xor: called with less than two arguments" +msgstr "xort: cridat amb menys de dos arguments" -#: builtin.c:2078 +#: builtin.c:3157 #, c-format -msgid "xor(%lf, %lf): negative values will give strange results" -msgstr "xor(%lf, %lf): els valors negatius donaran resultats estranys" +msgid "xor: argument %d is non-numeric" +msgstr "xor: l'argument %d no és numèric" -#: builtin.c:2080 +#: builtin.c:3161 #, c-format -msgid "xor(%lf, %lf): fractional values will be truncated" -msgstr "xor(%lf, %lf): els valors fraccionaris seran truncats" +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:2104 builtin.c:2110 +#: builtin.c:3186 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl: s'ha rebut un argument que no és numèric" -#: builtin.c:2112 +#: builtin.c:3192 #, c-format -msgid "compl(%lf): negative value will give strange results" -msgstr "compl(%lf): el valor negatiu donarà resultats estranys" +msgid "compl(%f): negative value will give strange results" +msgstr "compl(%f): el valor negatiu donarà resultats estranys" -#: builtin.c:2114 +#: builtin.c:3194 #, c-format -msgid "compl(%lf): fractional value will be truncated" -msgstr "compl(%lf): el valor fraccionari serà truncat" +msgid "compl(%f): fractional value will be truncated" +msgstr "compl(%f): el valor fraccionari serà truncat" -#: builtin.c:2283 +#: builtin.c:3363 #, c-format msgid "dcgettext: `%s' is not a valid locale category" -msgstr "dcgettext: «%s» no és una categoria local vàlida" +msgstr "dcgettext: `%s' no és una categoria local vàlida" -#: eval.c:410 +#: command.y:225 #, c-format -msgid "unknown nodetype %d" -msgstr "tipo de node %d desconegut" +msgid "Type (g)awk statement(s). End with the command \"end\"\n" +msgstr "" -#: eval.c:421 eval.c:435 -#, fuzzy, c-format -msgid "unknown opcode %d" -msgstr "tipo de node %d desconegut" +#: command.y:289 +#, c-format +msgid "invalid frame number: %d" +msgstr "número invàlid de marc: %d" -#: eval.c:432 +#: command.y:295 #, c-format -msgid "opcode %s not an operator or keyword" -msgstr "" +msgid "info: invalid option - \"%s\"" +msgstr "info: opció no vàlida - \"%s\"" -#: eval.c:485 -msgid "buffer overflow in genflags2str" -msgstr "desbordament del cau temporal en genflags2str" +#: command.y:321 +#, c-format +msgid "source \"%s\": already sourced." +msgstr "" -#: eval.c:696 +#: command.y:326 #, c-format -msgid "" -"\n" -"\t# Function Call Stack:\n" -"\n" +msgid "save \"%s\": command not permitted." msgstr "" -"\n" -"\t# Pila de Crides a les Funcions:\n" -"\n" -#: eval.c:723 -msgid "`IGNORECASE' is a gawk extension" -msgstr "«IGNORECASE» és una extensió de gawk" +#: command.y:339 +msgid "Can't use command `commands' for breakpoint/watchpoint commands" +msgstr "" -#: eval.c:752 -msgid "`BINMODE' is a gawk extension" -msgstr "«BINMODE» és una extensió de gawk" +#: command.y:341 +msgid "no breakpoint/watchpoint has been set yet" +msgstr "" -#: eval.c:810 -#, c-format -msgid "BINMODE value `%s' is invalid, treated as 3" +#: command.y:343 +msgid "invalid breakpoint/watchpoint number" msgstr "" -#: eval.c:900 +#: command.y:348 #, c-format -msgid "bad `%sFMT' specification `%s'" -msgstr "«%sFMT» especificació errònia «%s»" +msgid "Type commands for when %s %d is hit, one per line.\n" +msgstr "" -#: eval.c:978 -msgid "turning off `--lint' due to assignment to `LINT'" -msgstr "desactivant «--lint» degut a una assignació a «LINT»" +#: command.y:350 +#, c-format +msgid "End with the command \"end\"\n" +msgstr "" -#: eval.c:1247 -#, fuzzy -msgid "sorted array traversal is a gawk extension" -msgstr "«delete array» és una extensió de gawk" +#: command.y:357 +msgid "`end' valid only in command `commands' or `eval'" +msgstr "" -#: eval.c:1291 -msgid "`PROCINFO[\"sorted_in\"]' value is not recognized" +#: command.y:367 +msgid "`silent' valid only in command `commands'" msgstr "" -#: eval.c:1373 eval.c:1923 +#: command.y:373 #, c-format -msgid "can't use function name `%s' as variable or array" -msgstr "no es pot usar el nom de la funció «%s» com a variable o matriu" +msgid "trace: invalid option - \"%s\"" +msgstr "traç: opció no vàlida - \"%s\"" -#: eval.c:1401 -msgid "assignment is not allowed to result of builtin function" +#: command.y:387 +msgid "condition: invalid breakpoint/watchpoint number" msgstr "" -"no es permet l'assignació per a obtindre un resultat d'una funció interna" -#: eval.c:1410 eval.c:1935 eval.c:1948 +#: command.y:449 +msgid "argument not a string" +msgstr "l'argument no és una cadena de caràcters" + +#: command.y:459 command.y:464 #, c-format -msgid "reference to uninitialized argument `%s'" -msgstr "referència a un argument sense inicialitzar «%s»" +msgid "option: invalid parameter - \"%s\"" +msgstr "" -#: eval.c:1429 -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" +#: command.y:474 +#, c-format +msgid "no such function - \"%s\"" +msgstr "" -#: eval.c:1431 -#, fuzzy -msgid "attempt to field reference from null string" -msgstr "s'ha intentat una referència a partir d'una cadena nul·la" +#: command.y:531 +#, c-format +msgid "enable: invalid option - \"%s\"" +msgstr "enable: opció no vàlida - \"%s\"" -#: eval.c:1437 -#, fuzzy, c-format -msgid "attempt to access field %ld" -msgstr "s'ha intentat accedir al camp %d" +#: command.y:597 +#, c-format +msgid "invalid range specification: %d - %d" +msgstr "especificació no vàlida de rang: %d - %d" -#: eval.c:1446 -#, fuzzy, c-format -msgid "reference to uninitialized field `$%ld'" -msgstr "referència a una variable sense inicialitzar «%s»" +#: command.y:659 +msgid "non-numeric value for field number" +msgstr "" -#: eval.c:1508 +#: command.y:680 command.y:687 +msgid "non-numeric value found, numeric expected" +msgstr "" + +#: command.y:712 command.y:718 +msgid "non-zero integer value" +msgstr "" + +#: command.y:817 +msgid "backtrace [N] - print trace of all or N innermost (outermost if N < 0) frames." +msgstr "" + +#: command.y:819 +msgid "break [[filename:]N|function] - set breakpoint at the specified location." +msgstr "" + +#: command.y:821 +msgid "clear [[filename:]N|function] - delete breakpoints previously set." +msgstr "" + +#: command.y:823 +msgid "commands [num] - starts a list of commands to be executed at a breakpoint(watchpoint) hit." +msgstr "" + +#: command.y:825 +msgid "condition num [expr] - set or clear breakpoint or watchpoint condition." +msgstr "" + +#: command.y:827 +msgid "continue [COUNT] - continue program being debugged." +msgstr "" + +#: command.y:829 +msgid "delete [breakpoints] [range] - delete specified breakpoints." +msgstr "" + +#: command.y:831 +msgid "disable [breakpoints] [range] - disable specified breakpoints." +msgstr "" + +#: command.y:833 +msgid "display [var] - print value of variable each time the program stops." +msgstr "" + +#: command.y:835 +msgid "down [N] - move N frames down the stack." +msgstr "" + +#: command.y:837 +msgid "dump [filename] - dump instructions to file or stdout." +msgstr "" + +#: command.y:839 +msgid "enable [once|del] [breakpoints] [range] - enable specified breakpoints." +msgstr "" + +#: command.y:841 +msgid "end - end a list of commands or awk statements." +msgstr "" + +#: command.y:843 +msgid "eval stmt|[p1, p2, ...] - evaluate awk statement(s)." +msgstr "" + +#: command.y:845 +msgid "finish - execute until selected stack frame returns." +msgstr "" + +#: command.y:847 +msgid "frame [N] - select and print stack frame number N." +msgstr "" + +#: command.y:849 +msgid "help [command] - print list of commands or explanation of command." +msgstr "" + +#: command.y:851 +msgid "ignore N COUNT - set ignore-count of breakpoint number N to COUNT." +msgstr "" + +#: command.y:853 +msgid "info topic - source|sources|variables|functions|break|frame|args|locals|display|watch." +msgstr "" + +#: command.y:855 +msgid "list [-|+|[filename:]lineno|function|range] - list specified line(s)." +msgstr "" + +#: command.y:857 +msgid "next [COUNT] - step program, proceeding through subroutine calls." +msgstr "" + +#: command.y:859 +msgid "nexti [COUNT] - step one instruction, but proceed through subroutine calls." +msgstr "" + +#: command.y:861 +msgid "option [name[=value]] - set or display debugger option(s)." +msgstr "" + +#: command.y:863 +msgid "print var [var] - print value of a variable or array." +msgstr "" + +#: command.y:865 +msgid "printf format, [arg], ... - formatted output." +msgstr "" + +#: command.y:867 +msgid "quit - exit debugger." +msgstr "" + +#: command.y:869 +msgid "return [value] - make selected stack frame return to its caller." +msgstr "" + +#: command.y:871 +msgid "run - start or restart executing program." +msgstr "" + +#: command.y:874 +msgid "save filename - save commands from the session to file." +msgstr "" + +#: command.y:877 +msgid "set var = value - assign value to a scalar variable." +msgstr "" + +#: command.y:879 +msgid "silent - suspends usual message when stopped at a breakpoint/watchpoint." +msgstr "" + +#: command.y:881 +msgid "source file - execute commands from file." +msgstr "" + +#: command.y:883 +msgid "step [COUNT] - step program until it reaches a different source line." +msgstr "" + +#: command.y:885 +msgid "stepi [COUNT] - step one instruction exactly." +msgstr "" + +#: command.y:887 +msgid "tbreak [[filename:]N|function] - set a temporary breakpoint." +msgstr "" + +#: command.y:889 +msgid "trace on|off - print instruction before executing." +msgstr "" + +#: command.y:891 +msgid "undisplay [N] - remove variable(s) from automatic display list." +msgstr "" + +#: command.y:893 +msgid "until [[filename:]N|function] - execute until program reaches a different line or line N within current frame." +msgstr "" + +#: command.y:895 +msgid "unwatch [N] - remove variable(s) from watch list." +msgstr "" + +#: command.y:897 +msgid "up [N] - move N frames up the stack." +msgstr "" + +#: command.y:899 +msgid "watch var - set a watchpoint for a variable." +msgstr "" + +#: command.y:1011 debug.c:401 msg.c:135 +#, c-format +msgid "error: " +msgstr "Error: " + +#: command.y:1051 +#, c-format +msgid "can't read command (%s)\n" +msgstr "no es pot llegir la instraucció (%s)\n" + +#: command.y:1065 +#, c-format +msgid "can't read command (%s)" +msgstr "no es pot llegir la instrucció (%s)" + +#: command.y:1116 +msgid "invalid character in command" +msgstr "caràcter no vàlida en la instucció" + +#: command.y:1152 +#, c-format +msgid "unknown command - \"%.*s\", try help" +msgstr "" + +#: command.y:1222 +#, c-format +msgid "%s" +msgstr "" + +#: command.y:1284 +msgid "invalid character" +msgstr "caràcter no vàlid" + +#: command.y:1455 +#, c-format +msgid "undefined command: %s\n" +msgstr "" + +#: debug.c:252 +msgid "set or show the number of lines to keep in history file." +msgstr "" + +#: debug.c:254 +msgid "set or show the list command window size." +msgstr "" + +#: debug.c:256 +msgid "set or show gawk output file." +msgstr "" + +#: debug.c:258 +msgid "set or show debugger prompt." +msgstr "" + +#: debug.c:260 +msgid "(un)set or show saving of command history (value=on|off)." +msgstr "" + +#: debug.c:262 +msgid "(un)set or show saving of options (value=on|off)." +msgstr "" + +#: debug.c:264 +msgid "(un)set or show instruction tracing (value=on|off)." +msgstr "" + +#: debug.c:345 +msgid "program not running." +msgstr "" + +#: debug.c:448 debug.c:606 +#, c-format +msgid "can't read source file `%s' (%s)" +msgstr "no es pot llegir el fitxer font `%s' (%s)" + +#: debug.c:453 +#, c-format +msgid "source file `%s' is empty.\n" +msgstr "el fitxer font `%s' està buit\n" + +#: debug.c:480 +msgid "no current source file." +msgstr "" + +#: debug.c:505 +#, c-format +msgid "cannot find source file named `%s' (%s)" +msgstr "no es pot trobar el fitxer font `%s' (%s)" + +#: debug.c:529 +#, c-format +msgid "WARNING: source file `%s' modified since program compilation.\n" +msgstr "" + +#: debug.c:551 +#, c-format +msgid "line number %d out of range; `%s' has %d lines" +msgstr "" + +#: debug.c:611 +#, c-format +msgid "unexpected eof while reading file `%s', line %d" +msgstr "final de fitxer no esperat quan s'estava llegint el fitxer `%s', linía %d" + +#: debug.c:620 +#, c-format +msgid "source file `%s' modified since start of program execution" +msgstr "" + +#: debug.c:732 +#, c-format +msgid "Current source file: %s\n" +msgstr "" + +#: debug.c:733 +#, c-format +msgid "Number of lines: %d\n" +msgstr "" + +#: debug.c:740 +#, c-format +msgid "Source file (lines): %s (%d)\n" +msgstr "" + +#: debug.c:754 +msgid "" +"Number Disp Enabled Location\n" +"\n" +msgstr "" + +#: debug.c:765 +#, c-format +msgid "\tno of hits = %ld\n" +msgstr "" + +#: debug.c:767 +#, c-format +msgid "\tignore next %ld hit(s)\n" +msgstr "" + +#: debug.c:769 debug.c:909 +#, c-format +msgid "\tstop condition: %s\n" +msgstr "" + +#: debug.c:771 debug.c:911 +msgid "\tcommands:\n" +msgstr "" + +#: debug.c:793 +#, c-format +msgid "Current frame: " +msgstr "" + +#: debug.c:796 +#, c-format +msgid "Called by frame: " +msgstr "" + +#: debug.c:800 +#, c-format +msgid "Caller of frame: " +msgstr "" + +#: debug.c:818 +#, c-format +msgid "None in main().\n" +msgstr "" + +#: debug.c:848 +msgid "No arguments.\n" +msgstr "Sense arguments.\n" + +#: debug.c:849 +msgid "No locals.\n" +msgstr "" + +#: debug.c:857 +msgid "" +"All defined variables:\n" +"\n" +msgstr "" + +#: debug.c:867 +msgid "" +"All defined functions:\n" +"\n" +msgstr "" + +#: debug.c:886 +msgid "" +"Auto-display variables:\n" +"\n" +msgstr "" + +#: debug.c:889 +msgid "" +"Watch variables:\n" +"\n" +msgstr "" + +#: debug.c:1029 +#, c-format +msgid "no symbol `%s' in current context\n" +msgstr "" + +#: debug.c:1041 debug.c:1427 +#, c-format +msgid "`%s' is not an array\n" +msgstr "" + +#: debug.c:1055 +#, c-format +msgid "$%ld = uninitialized field\n" +msgstr "" + +#: debug.c:1076 +#, c-format +msgid "array `%s' is empty\n" +msgstr "la matriu `%s' està buida\n" + +#: debug.c:1119 debug.c:1171 +#, c-format +msgid "[\"%s\"] not in array `%s'\n" +msgstr "[\"%s\"] no està a la matriu `%s'\n" + +#: debug.c:1175 +#, c-format +msgid "`%s[\"%s\"]' is not an array\n" +msgstr "" + +#: debug.c:1236 debug.c:4964 +#, c-format +msgid "`%s' is not a scalar variable" +msgstr "" + +#: debug.c:1258 debug.c:4994 +#, c-format +msgid "attempt to use array `%s[\"%s\"]' in a scalar context" +msgstr "s'ha intentat usar la matriu `%s[\"%s\"]' en un context escalar" + +#: debug.c:1280 debug.c:5005 +#, c-format +msgid "attempt to use scalar `%s[\"%s\"]' as array" +msgstr "s'ha intentat usar la dada escalar `%s[\"%s\"]' com a una matriu" + +#: debug.c:1423 +#, c-format +msgid "`%s' is a function" +msgstr "`%s' és una funció" + +#: debug.c:1465 +#, c-format +msgid "watchpoint %d is unconditional\n" +msgstr "" + +#: debug.c:1499 +#, c-format +msgid "No display item numbered %ld" +msgstr "" + +#: debug.c:1502 +#, c-format +msgid "No watch item numbered %ld" +msgstr "" + +#: debug.c:1528 +#, fuzzy, c-format +msgid "%d: [\"%s\"] not in array `%s'\n" +msgstr "%d: [\"%s\"] no està a la matriu `%s'\n" + +#: debug.c:1767 +msgid "attempt to use scalar value as array" +msgstr "s'ha intentat usar una dada escalar com a una matriu" + +#: debug.c:1856 +#, c-format +msgid "Watchpoint %d deleted because parameter is out of scope.\n" +msgstr "" + +#: debug.c:1867 +#, c-format +msgid "Display %d deleted because parameter is out of scope.\n" +msgstr "" + +#: debug.c:1900 +#, c-format +msgid " in file `%s', line %d\n" +msgstr "al fitxer `%s', línia %d\n" + +#: debug.c:1921 +#, c-format +msgid " at `%s':%d" +msgstr "" + +#: debug.c:1937 debug.c:2000 +#, c-format +msgid "#%ld\tin " +msgstr "" + +#: debug.c:1974 +#, c-format +msgid "More stack frames follow ...\n" +msgstr "" + +#: debug.c:2017 +msgid "invalid frame number" +msgstr "número no vàlid de rang" + +#: debug.c:2200 +#, c-format +msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" +msgstr "" + +#: debug.c:2207 +#, c-format +msgid "Note: breakpoint %d (enabled), also set at %s:%d" +msgstr "" + +#: debug.c:2214 +#, c-format +msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" +msgstr "" + +#: debug.c:2221 +#, c-format +msgid "Note: breakpoint %d (disabled), also set at %s:%d" +msgstr "" + +#: debug.c:2238 +#, c-format +msgid "Breakpoint %d set at file `%s', line %d\n" +msgstr "Punt d'interrupció %d establert al fitxer `%s', línia %d\n" + +#: debug.c:2340 +#, c-format +msgid "Can't set breakpoint in file `%s'\n" +msgstr "" + +#: debug.c:2369 debug.c:2492 debug.c:3350 +#, c-format +msgid "line number %d in file `%s' out of range" +msgstr "el número de línia %d al fitxer `%s' està fora de rang" + +#: debug.c:2373 +#, c-format +msgid "Can't find rule!!!\n" +msgstr "" + +#: debug.c:2375 +#, c-format +msgid "Can't set breakpoint at `%s':%d\n" +msgstr "" + +#: debug.c:2387 +#, c-format +msgid "Can't set breakpoint in function `%s'\n" +msgstr "" + +#: debug.c:2403 +#, c-format +msgid "breakpoint %d set at file `%s', line %d is unconditional\n" +msgstr "" + +#: debug.c:2508 debug.c:2530 +#, c-format +msgid "Deleted breakpoint %d" +msgstr "" + +#: debug.c:2514 +#, c-format +msgid "No breakpoint(s) at entry to function `%s'\n" +msgstr "" + +#: debug.c:2541 +#, c-format +msgid "No breakpoint at file `%s', line #%d\n" +msgstr "No hi ha un punt d'interrupció al fitxer `%s', línia #%d\n" + +#: debug.c:2596 debug.c:2637 debug.c:2657 debug.c:2700 +msgid "invalid breakpoint number" +msgstr "" + +#: debug.c:2612 +msgid "Delete all breakpoints? (y or n) " +msgstr "" + +#: debug.c:2613 debug.c:2923 debug.c:2976 +msgid "y" +msgstr "" + +#: debug.c:2662 +#, c-format +msgid "Will ignore next %ld crossing(s) of breakpoint %d.\n" +msgstr "" + +#: debug.c:2666 +#, c-format +msgid "Will stop next time breakpoint %d is reached.\n" +msgstr "" + +#: debug.c:2783 +#, c-format +msgid "Can only debug programs provided with the `-f' option.\n" +msgstr "" + +#: debug.c:2908 +#, c-format +msgid "Failed to restart debugger" +msgstr "" + +#: debug.c:2922 +msgid "Program already running. Restart from beginning (y/n)? " +msgstr "" + +#: debug.c:2926 +#, c-format +msgid "Program not restarted\n" +msgstr "" + +#: debug.c:2936 +#, c-format +msgid "error: cannot restart, operation not allowed\n" +msgstr "" + +#: debug.c:2942 +#, c-format +msgid "error (%s): cannot restart, ignoring rest of the commands\n" +msgstr "" + +#: debug.c:2950 +#, c-format +msgid "Starting program: \n" +msgstr "" + +#: debug.c:2959 +#, c-format +msgid "Program exited %s with exit value: %d\n" +msgstr "" + +#: debug.c:2975 +msgid "The program is running. Exit anyway (y/n)? " +msgstr "" + +#: debug.c:3010 +#, c-format +msgid "Not stopped at any breakpoint; argument ignored.\n" +msgstr "" + +#: debug.c:3015 +#, c-format +msgid "invalid breakpoint number %d." +msgstr "" + +#: debug.c:3020 +#, c-format +msgid "Will ignore next %ld crossings of breakpoint %d.\n" +msgstr "" + +#: debug.c:3207 +#, c-format +msgid "'finish' not meaningful in the outermost frame main()\n" +msgstr "" + +#: debug.c:3212 +#, c-format +msgid "Run till return from " +msgstr "" + +#: debug.c:3255 +#, c-format +msgid "'return' not meaningful in the outermost frame main()\n" +msgstr "" + +#: debug.c:3369 +#, c-format +msgid "Can't find specified location in function `%s'\n" +msgstr "" + +#: debug.c:3377 +#, c-format +msgid "invalid source line %d in file `%s'" +msgstr "" + +#: debug.c:3392 +#, c-format +msgid "Can't find specified location %d in file `%s'\n" +msgstr "" + +#: debug.c:3424 +#, c-format +msgid "element not in array\n" +msgstr "l'element no està a la matriu\n" + +#: debug.c:3424 +#, c-format +msgid "untyped variable\n" +msgstr "" + +#: debug.c:3466 +#, c-format +msgid "Stopping in %s ...\n" +msgstr "" + +#: debug.c:3543 +#, c-format +msgid "'finish' not meaningful with non-local jump '%s'\n" +msgstr "" + +#: debug.c:3550 +#, c-format +msgid "'until' not meaningful with non-local jump '%s'\n" +msgstr "" + +#: debug.c:4185 +msgid "\t------[Enter] to continue or q [Enter] to quit------" +msgstr "" + +#: debug.c:4186 +msgid "q" +msgstr "" + +#: debug.c:5001 +#, c-format +msgid "[\"%s\"] not in array `%s'" +msgstr "[\"%s\"] no està a la matriu `%s'" + +#: debug.c:5207 +#, c-format +msgid "sending output to stdout\n" +msgstr "" + +#: debug.c:5247 +msgid "invalid number" +msgstr "" + +#: debug.c:5381 +#, c-format +msgid "`%s' not allowed in current context; statement ignored" +msgstr "" + +#: debug.c:5389 +msgid "`return' not allowed in current context; statement ignored" +msgstr "" + +#: debug.c:5590 +#, c-format +msgid "No symbol `%s' in current context" +msgstr "" + +#: 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 +msgid "unbalanced [" +msgstr "[ sense aparellar" + +#: dfa.c:1052 +msgid "invalid character class" +msgstr "classe no vàlida de caràcters" + +#: dfa.c:1228 +msgid "character class syntax is [[:space:]], not [:space:]" +msgstr "" + +#: dfa.c:1280 +msgid "unfinished \\ escape" +msgstr "seqüència d'escapada \\ sense finalitzar" + +#: dfa.c:1427 regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Contingut no vàlid de \\{\\}" + +#: dfa.c:1430 regcomp.c:176 +msgid "Regular expression too big" +msgstr "L'expressió regular és massa gran" + +#: dfa.c:1847 +msgid "unbalanced (" +msgstr "( sense aparellar" + +#: dfa.c:1973 +msgid "no syntax specified" +msgstr "no s'ha especificat una sintaxis" + +#: dfa.c:1981 +msgid "unbalanced )" +msgstr ") sense aparellar" + +#: eval.c:394 +#, c-format +msgid "unknown nodetype %d" +msgstr "tipo de node %d desconegut" + +#: eval.c:405 eval.c:419 +#, c-format +msgid "unknown opcode %d" +msgstr "opcode %d desconegut" + +#: eval.c:416 +#, c-format +msgid "opcode %s not an operator or keyword" +msgstr "" + +#: eval.c:472 +msgid "buffer overflow in genflags2str" +msgstr "desbordament del cau temporal en genflags2str" + +#: eval.c:675 +#, c-format +msgid "" +"\n" +"\t# Function Call Stack:\n" +"\n" +msgstr "" +"\n" +"\t# Pila de Crides a les Funcions:\n" +"\n" + +#: eval.c:704 +msgid "`IGNORECASE' is a gawk extension" +msgstr "`IGNORECASE' és una extensió de gawk" + +#: eval.c:736 +msgid "`BINMODE' is a gawk extension" +msgstr "`BINMODE' és una extensió de gawk" + +#: eval.c:794 +#, c-format +msgid "BINMODE value `%s' is invalid, treated as 3" +msgstr "" + +#: eval.c:885 +#, c-format +msgid "bad `%sFMT' specification `%s'" +msgstr "`%sFMT' especificació errònia `%s'" + +#: eval.c:969 +msgid "turning off `--lint' due to assignment to `LINT'" +msgstr "desactivant `--lint' degut a una assignació a `LINT'" + +#: eval.c:1147 +#, c-format +msgid "reference to uninitialized argument `%s'" +msgstr "referència a un argument sense inicialitzar `%s'" + +#: eval.c:1148 +#, c-format +msgid "reference to uninitialized variable `%s'" +msgstr "referència a una variable sense inicialitzar `%s'" + +#: eval.c:1166 +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 +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 +#, c-format +msgid "attempt to access field %ld" +msgstr "s'ha intentat accedir al camp %ld" + +#: eval.c:1185 +#, c-format +msgid "reference to uninitialized field `$%ld'" +msgstr "referència a una variable sense inicialitzar `$%ld'" + +#: eval.c:1272 +#, 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 +#, c-format +msgid "unwind_stack: unexpected type `%s'" +msgstr "" + +#: eval.c:1569 +msgid "division by zero attempted in `/='" +msgstr "s'ha intentat una divisió per zero en `/='" + +#: eval.c:1576 +#, c-format +msgid "division by zero attempted in `%%='" +msgstr "s'ha intentat una divisió per zero en `%%='" + +#: ext.c:89 ext.c:171 +msgid "extensions are not allowed in sandbox mode" +msgstr "" + +#: ext.c:92 +msgid "-l / @load are gawk extensions" +msgstr "-l / @load són extensions gawk" + +#: ext.c:95 +msgid "load_ext: received NULL lib_name" +msgstr "" + +#: ext.c:98 +#, 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 +#, c-format +msgid "load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n" +msgstr "" + +#: ext.c:110 +#, 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 +#, c-format +msgid "load_ext: library `%s' initialization routine `%s' failed\n" +msgstr "" + +#: ext.c:174 +msgid "`extension' is a gawk extension" +msgstr "`extension' és una extensió gawk" + +#: ext.c:177 +msgid "extension: received NULL lib_name" +msgstr "" + +#: ext.c:180 +#, c-format +msgid "extension: cannot open library `%s' (%s)" +msgstr "extension: no es pot obrir la biblioteca `%s' (%s)" + +#: ext.c:186 +#, 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 +#, 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 +msgid "make_builtin: missing function name" +msgstr "" + +#: ext.c:236 +#, c-format +msgid "make_builtin: can't redefine function `%s'" +msgstr "" + +#: ext.c:240 +#, c-format +msgid "make_builtin: function `%s' already defined" +msgstr "make_builtin: la funció `%s' ja està definida" + +#: ext.c:244 +#, c-format +msgid "make_builtin: function name `%s' previously defined" +msgstr "make_builtin: nom de la funció `%s' definida prèviament" + +#: ext.c:246 +#, c-format +msgid "make_builtin: can't use gawk built-in `%s' as function name" +msgstr "" + +#: ext.c:249 ext.c:304 +#, c-format +msgid "make_builtin: negative argument count for function `%s'" +msgstr "" + +#: ext.c:276 +msgid "extension: missing function name" +msgstr "" + +#: ext.c:279 ext.c:283 #, 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" +msgid "extension: illegal character `%c' in function name `%s'" +msgstr "extension: caràcter `%c' il·legal al nom de funció `%s'" -#: eval.c:1663 +#: ext.c:291 #, c-format -msgid "unwind_stack: unexpected type `%s'" +msgid "extension: can't redefine function `%s'" +msgstr "extension: no es pot redefinir la funció `%s'" + +#: ext.c:295 +#, c-format +msgid "extension: function `%s' already defined" +msgstr "extension: la funció `%s' ja està definida" + +#: ext.c:299 +#, c-format +msgid "extension: function name `%s' previously defined" +msgstr "extension: nom de la funció `%s' definida prèviament" + +#: ext.c:301 +#, c-format +msgid "extension: can't use gawk built-in `%s' as function name" msgstr "" -#: eval.c:1747 -msgid "division by zero attempted in `/='" -msgstr "s'ha intentat una divisió per zero en «/=»" +#: ext.c:375 +#, 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)" -#: eval.c:1754 +#: ext.c:378 #, c-format -msgid "division by zero attempted in `%%='" -msgstr "s'ha intentat una divisió per zero en «%%=»" +msgid "function `%s': missing argument #%d" +msgstr "funció `%s': falta l'argument #%d" -#: eval.c:2057 -msgid "assignment used in conditional context" -msgstr "assignació usada en un context condicional" +#: ext.c:395 +#, 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" -#: eval.c:2061 -msgid "statement has no effect" -msgstr "la sentència no té efecte" +#: ext.c:399 +#, c-format +msgid "function `%s': argument #%d: attempt to use array as a scalar" +msgstr "" -#: eval.c:2473 -#, fuzzy, c-format -msgid "for loop: array `%s' changed size from %ld to %ld during loop execution" +#: ext.c:413 +msgid "dynamic loading of library not supported" msgstr "" -"bucle for: la matriu «%s» ha canviat de mida de %d a %d durant l'execució " -"del bucle" -#: eval.c:2583 +#: extension/filefuncs.c:159 +msgid "chdir: called with incorrect number of arguments, expecting 1" +msgstr "chdir: cridat amb un nombre incorrecte d'arguments, s'esperava 1" + +#: extension/filefuncs.c:439 #, c-format -msgid "function called indirectly through `%s' does not exist" +msgid "stat: unable to read symbolic link `%s'" msgstr "" -#: eval.c:2595 +#: extension/filefuncs.c:472 +msgid "stat: called with wrong number of arguments" +msgstr "stat: cridat amb un nombre incorrecte d'arguments" + +#: extension/filefuncs.c:479 +msgid "stat: bad parameters" +msgstr "stata: argumetns dolents" + +#: extension/filefuncs.c:533 #, c-format -msgid "function `%s' not defined" -msgstr "la funció «%s» no està definida" +msgid "fts init: could not create variable %s" +msgstr "" -#: eval.c:2656 -#, fuzzy, c-format -msgid "non-redirected `getline' invalid inside `%s' rule" -msgstr "port remot no vàlid en «%s»" +#: extension/filefuncs.c:554 +msgid "fts is not supported on this system" +msgstr "fts no està suportat en aquest sistema" -#: eval.c:2717 -#, fuzzy, c-format -msgid "`nextfile' cannot be called from a `%s' rule" -msgstr "«nextfile» no es pot cridar des d'una regla FINAL" +#: extension/filefuncs.c:573 +msgid "fill_stat_element: could not create array" +msgstr "" -#: eval.c:2767 -#, fuzzy, c-format -msgid "`next' cannot be called from a `%s' rule" -msgstr "«next» no es pot cridar des d'una regla FINAL" +#: extension/filefuncs.c:582 +msgid "fill_stat_element: could not set element" +msgstr "" + +#: extension/filefuncs.c:597 +msgid "fill_path_element: could not set element" +msgstr "" + +#: extension/filefuncs.c:613 +msgid "fill_error_element: could not set element" +msgstr "" + +#: extension/filefuncs.c:660 extension/filefuncs.c:707 +msgid "fts-process: could not create array" +msgstr "" + +#: extension/filefuncs.c:670 extension/filefuncs.c:717 +#: extension/filefuncs.c:735 +msgid "fts-process: could not set element" +msgstr "" + +#: extension/filefuncs.c:784 +msgid "fts: called with incorrect number of arguments, expecting 3" +msgstr "fts: cridat amb un nombre incorrecte d'arguments, s'esperaven 3" + +#: extension/filefuncs.c:787 +msgid "fts: bad first parameter" +msgstr "fts: el segon argument és dolent" + +#: extension/filefuncs.c:793 +msgid "fts: bad second parameter" +msgstr "fts: el segon argument és dolent" + +#: extension/filefuncs.c:799 +msgid "fts: bad third parameter" +msgstr "fts: el tercer paràmeter es dolent" + +#: extension/filefuncs.c:806 +msgid "fts: could not flatten array\n" +msgstr "" + +#: extension/filefuncs.c:824 +msgid "fts: ignoring sneaky FTS_NOSTAT flag. nyah, nyah, nyah." +msgstr "" + +#: extension/filefuncs.c:841 +msgid "fts: clear_array() failed\n" +msgstr "" + +#: extension/fnmatch.c:112 +msgid "fnmatch: called with less than three arguments" +msgstr "fnmatch: s'ha cridat amb menys de tres arguments" + +#: extension/fnmatch.c:115 +msgid "fnmatch: called with more than three arguments" +msgstr "fnmatch: s'ha cridat amb més de tres arguments" + +#: extension/fnmatch.c:118 +msgid "fnmatch: could not get first argument" +msgstr "fnmatch: no s'ha pogut obtenir el segon argument" -#: eval.c:2834 +#: extension/fnmatch.c:123 +msgid "fnmatch: could not get second argument" +msgstr "fnmatch: no s'ha pogut obtenir el segon argument" + +#: extension/fnmatch.c:128 +msgid "fnmatch: could not get third argument" +msgstr "" + +#: extension/fnmatch.c:141 +msgid "fnmatch is not implemented on this system\n" +msgstr "" + +#: extension/fnmatch.c:173 +msgid "fnmatch init: could not add FNM_NOMATCH variable" +msgstr "" + +#: extension/fnmatch.c:183 #, c-format -msgid "Sorry, don't know how to interpret `%s'" +msgid "fnmatch init: could not set array element %s" msgstr "" -#: ext.c:64 -msgid "extensions are not allowed in sandbox mode" +#: extension/fnmatch.c:193 +msgid "fnmatch init: could not install FNM array" msgstr "" -#: ext.c:70 ext.c:75 -msgid "`extension' is a gawk extension" -msgstr "«extension» és una extensió gawk" +#: extension/fork.c:81 +msgid "fork: called with too many arguments" +msgstr "fork: s'ha cridat amb massa arguments" -#: ext.c:85 -#, fuzzy, c-format -msgid "fatal: extension: cannot open `%s' (%s)\n" -msgstr "extension: no es pot obrir «%s» (%s)\n" +#: extension/fork.c:94 +msgid "fork: PROCINFO is not an array!" +msgstr "" -#: ext.c:94 -#, fuzzy, c-format -msgid "" -"fatal: extension: library `%s': does not define " -"`plugin_is_GPL_compatible' (%s)\n" -msgstr "extension: biblioteca «%s»: no es pot cridar a la funció «%s» (%s)\n" +#: extension/fork.c:118 +msgid "waitpid: called with too many arguments" +msgstr "waitpid: s'ha cridat amb massa arguments" -#: ext.c:103 -#, fuzzy, c-format -msgid "fatal: extension: library `%s': cannot call function `%s' (%s)\n" -msgstr "extension: biblioteca «%s»: no es pot cridar a la funció «%s» (%s)\n" +#: extension/fork.c:126 +msgid "wait: called with no arguments" +msgstr "wait: s'ha cridat amb cap argument" -#: ext.c:137 -msgid "extension: missing function name" +#: extension/fork.c:143 +msgid "wait: called with too many arguments" +msgstr "wait: s'ha cridat amb massa arguments" + +#: extension/inplace.c:130 +msgid "inplace_begin: in-place editing already active" msgstr "" -#: ext.c:142 -#, fuzzy, c-format -msgid "extension: illegal character `%c' in function name `%s'" -msgstr "extension: biblioteca «%s»: no es pot cridar a la funció «%s» (%s)\n" +#: extension/inplace.c:133 extension/inplace.c:207 +#, c-format +msgid "inplace_begin: expects 2 arguments but called with %d" +msgstr "" -#: ext.c:151 -#, fuzzy, c-format -msgid "extension: can't redefine function `%s'" -msgstr "extension: no es pot obrir «%s» (%s)\n" +#: extension/inplace.c:136 +msgid "inplace_begin: cannot retrieve 1st argument as a string filename" +msgstr "" -#: ext.c:155 -#, fuzzy, c-format -msgid "extension: function `%s' already defined" -msgstr "la funció «%s» no està definida" +#: extension/inplace.c:144 +#, c-format +msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" +msgstr "" -#: ext.c:160 -#, fuzzy, c-format -msgid "extension: function name `%s' previously defined" -msgstr "nom de la funció «%s» definida prèviament" +#: extension/inplace.c:151 +#, c-format +msgid "inplace_begin: Cannot stat `%s' (%s)" +msgstr "implace_begin: No es pot obrir `%s' (%s)" -#: ext.c:162 -#, fuzzy, c-format -msgid "extension: can't use gawk built-in `%s' as function name" -msgstr "funció «%s»: no pot usar el nom de la funció com a paràmetre" +#: extension/inplace.c:158 +#, c-format +msgid "inplace_begin: `%s' is not a regular file" +msgstr "" -#: ext.c:166 +#: extension/inplace.c:169 #, c-format -msgid "make_builtin: negative argument count for function `%s'" +msgid "inplace_begin: mkstemp(`%s') failed (%s)" msgstr "" -#: ext.c:269 -#, fuzzy, c-format -msgid "function `%s' defined to take no more than %d argument(s)" -msgstr "es defineix la funció «%s» però no s'ha cridat mai" +#: extension/inplace.c:178 +#, c-format +msgid "inplace_begin: chmod failed (%s)" +msgstr "inplace_begin: ha fallat chmod (%s)" -#: ext.c:272 -#, fuzzy, c-format -msgid "function `%s': missing argument #%d" -msgstr "la funció «%s» no està definida" +#: extension/inplace.c:185 +#, c-format +msgid "inplace_begin: dup(stdout) failed (%s)" +msgstr "" -#: ext.c:282 -#, fuzzy, c-format -msgid "function `%s': argument #%d: attempt to use scalar as an array" -msgstr "s'ha intentat usar la dada escalar «%s» com a una matriu" +#: extension/inplace.c:188 +#, c-format +msgid "inplace_begin: dup2(%d, stdout) failed (%s)" +msgstr "" -#: ext.c:286 +#: extension/inplace.c:191 #, c-format -msgid "function `%s': argument #%d: attempt to use array as a scalar" +msgid "inplace_begin: close(%d) failed (%s)" +msgstr "inplace begin: close(%d) ha fallat (%s)" + +#: extension/inplace.c:210 +msgid "inplace_end: cannot retrieve 1st argument as a string filename" msgstr "" -#: ext.c:299 -msgid "Operation Not Supported" -msgstr "Operació No Suportada" +#: extension/inplace.c:217 +msgid "inplace_end: in-place editing not active" +msgstr "" + +#: extension/inplace.c:223 +#, c-format +msgid "inplace_end: dup2(%d, stdout) failed (%s)" +msgstr "" + +#: extension/inplace.c:226 +#, c-format +msgid "inplace_end: close(%d) failed (%s)" +msgstr "inplace_end: close(%d) ha fallat (%s)" + +#: extension/inplace.c:230 +#, c-format +msgid "inplace_end: fsetpos(stdout) failed (%s)" +msgstr "" + +#: extension/inplace.c:243 +#, c-format +msgid "inplace_end: link(`%s', `%s') failed (%s)" +msgstr "inplace_end: link(`%s', `%s') ha fallat (%s)" + +#: extension/inplace.c:253 +#, c-format +msgid "inplace_end: rename(`%s', `%s') failed (%s)" +msgstr "inplace_end: rename(`%s', `%s') ha fallat (%s)" + +#: extension/ordchr.c:69 +msgid "ord: called with too many arguments" +msgstr "ord: s'ha cridat amb massa arguments" + +#: extension/ordchr.c:75 +msgid "ord: called with no arguments" +msgstr "ord: s'ha cridat amb cap argument" + +#: extension/ordchr.c:77 +msgid "ord: called with inappropriate argument(s)" +msgstr "ord: s'ha cridat amb argument(s) no apropiat(s)" + +#: extension/ordchr.c:99 +msgid "chr: called with too many arguments" +msgstr "chr: s'ha cridat amb massa arguments" + +#: extension/ordchr.c:109 +msgid "chr: called with no arguments" +msgstr "chr: s'ha cridat amb cap argument" + +#: extension/ordchr.c:111 +msgid "chr: called with inappropriate argument(s)" +msgstr "chr: s'ha cridat amb argument(s) no apropiat(s)" + +#: extension/readdir.c:277 +#, c-format +msgid "dir_take_control_of: opendir/fdopendir failed: %s" +msgstr "" + +#: extension/readfile.c:84 +msgid "readfile: called with too many arguments" +msgstr "readfile: s'ha cridat amb massa arguments" -#: field.c:328 +#: extension/readfile.c:118 +msgid "readfile: called with no arguments" +msgstr "readfile: s'ha cridat amb cap argument" + +#: extension/rwarray.c:124 +msgid "writea: called with too many arguments" +msgstr "writea: s'ha cridat amb massa arguments" + +#: extension/rwarray.c:131 +#, 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 +#, 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 +#, c-format +msgid "write_array: could not flatten array\n" +msgstr "" + +#: extension/rwarray.c:198 +#, c-format +msgid "write_array: could not release flattened array\n" +msgstr "" + +#: extension/rwarray.c:280 +msgid "reada: called with too many arguments" +msgstr "reada: s'ha cridat amb massa arguments" + +#: extension/rwarray.c:287 +#, 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 +#, 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 +#, c-format +msgid "do_reada: clear_array failed\n" +msgstr "" + +#: extension/rwarray.c:374 +#, c-format +msgid "read_array: set_array_element failed\n" +msgstr "" + +#: extension/time.c:106 +msgid "gettimeofday: ignoring arguments" +msgstr "gettimeofday: s'estan ignorant els arguments" + +#: extension/time.c:137 +msgid "gettimeofday: not supported on this platform" +msgstr "" + +#: extension/time.c:158 +msgid "sleep: called with too many arguments" +msgstr "sleep: s'ha cridat amb massa arguments" + +#: extension/time.c:161 +msgid "sleep: missing required numeric argument" +msgstr "sleep: no hi ha un argument numèric requerit" + +#: extension/time.c:167 +msgid "sleep: argument is negative" +msgstr "sleep: l'argument és negatiu" + +#: extension/time.c:201 +msgid "sleep: not supported on this platform" +msgstr "" + +#: field.c:345 msgid "NF set to negative value" msgstr "NF s'inicialitza sobre un valor negatiu" -#: field.c:939 field.c:946 field.c:950 -#, fuzzy +#: field.c:971 field.c:978 field.c:982 msgid "split: fourth argument is a gawk extension" -msgstr "match: el tercer argument és una extensió de gawk" +msgstr "split: el quart argument és una extensió gawk" -#: field.c:943 -#, fuzzy +#: field.c:975 msgid "split: fourth argument is not an array" -msgstr "split: el segon argument no és una matriu" +msgstr "split: el quart argument no és una matriu" -#: field.c:957 +#: field.c:989 msgid "split: second argument is not an array" msgstr "split: el segon argument no és una matriu" -#: field.c:962 -msgid "split: can not use the same array for second and fourth args" +#: field.c:993 +msgid "split: cannot use the same array for second and fourth args" +msgstr "" + +#: field.c:998 +msgid "split: cannot use a subarray of second arg for fourth arg" +msgstr "" + +#: field.c:1001 +msgid "split: cannot use a subarray of fourth arg for second arg" msgstr "" -#: field.c:990 +#: field.c:1032 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:1031 -#, fuzzy +#: field.c:1072 msgid "patsplit: fourth argument is not an array" -msgstr "split: el segon argument no és una matriu" +msgstr "patsplit: el quart argument no és una matriu" -#: field.c:1036 -#, fuzzy +#: field.c:1077 msgid "patsplit: second argument is not an array" -msgstr "split: el segon argument no és una matriu" +msgstr "patsplit: el tercer argument no és una matriu" -#: field.c:1054 -#, fuzzy +#: field.c:1083 msgid "patsplit: third argument must be non-null" -msgstr "match: el tercer argument no és una matriu" +msgstr "patsplit: el segon argument no és una matriu" + +#: field.c:1087 +msgid "patsplit: cannot use the same array for second and fourth args" +msgstr "" + +#: field.c:1092 +msgid "patsplit: cannot use a subarray of second arg for fourth arg" +msgstr "" -#: field.c:1059 -msgid "patsplit: can not use the same array for second and fourth args" +#: field.c:1095 +msgid "patsplit: cannot use a subarray of fourth arg for second arg" msgstr "" -#: field.c:1089 +#: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" -msgstr "«FIELDWIDTHS» és una extensió de gawk" +msgstr "`FIELDWIDTHS' és una extensió de gawk" -#: field.c:1152 +#: field.c:1197 #, c-format msgid "invalid FIELDWIDTHS value, near `%s'" msgstr "" -#: field.c:1225 +#: field.c:1270 msgid "null string for `FS' is a gawk extension" -msgstr "la cadena nul·la per a «FS» és una extensió de gawk" +msgstr "la cadena nul·la per a `FS' és una extensió de gawk" -#: field.c:1229 -#, fuzzy +#: field.c:1274 msgid "old awk does not support regexps as value of `FS'" -msgstr "l'antic awk no suporta l'operador «**=»" +msgstr "l'antic awk no suporta expressions regulars com a valor de `FS'" -#: field.c:1348 -#, fuzzy +#: field.c:1393 msgid "`FPAT' is a gawk extension" -msgstr "«%s» és una extensió de gawk" +msgstr "`FPAT' és una extensió gawk" -#: getopt.c:574 getopt.c:590 -#, fuzzy, c-format -msgid "%s: option '%s' is ambiguous\n" -msgstr "%s: l'opció «%s» és ambigua\n" +#: gawkapi.c:146 +msgid "awk_value_to_node: received null retval" +msgstr "" -#: getopt.c:623 getopt.c:627 -#, fuzzy, c-format +#: gawkapi.c:384 +msgid "node_to_awk_value: received null node" +msgstr "" + +#: gawkapi.c:387 +msgid "node_to_awk_value: received null val" +msgstr "" + +#: gawkapi.c:808 +msgid "remove_element: received null array" +msgstr "" + +#: gawkapi.c:811 +msgid "remove_element: received null subscript" +msgstr "" + +#: gawkapi.c:948 +#, c-format +msgid "api_flatten_array: could not convert index %d\n" +msgstr "" + +#: gawkapi.c:953 +#, c-format +msgid "api_flatten_array: could not convert value %d\n" +msgstr "" + +#: getopt.c:604 getopt.c:633 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: l'opció `%s' és ambigua' and `>>' for file `%.*s'" -msgstr "mescla innecessària de «>» i «>>» per al fitxer «%.*s»" +msgstr "mescla innecessària de `>' i `>>' per al fitxer `%.*s'" -#: io.c:717 +#: io.c:863 #, c-format msgid "can't open pipe `%s' for output (%s)" -msgstr "no es pot obrir la canonada «%s» per a l'eixida (%s)" +msgstr "no es pot obrir la canonada `%s' per a l'eixida (%s)" -#: io.c:727 +#: io.c:873 #, c-format msgid "can't open pipe `%s' for input (%s)" -msgstr "no es pot obrir la canonada «%s» per a l'entrada (%s)" +msgstr "no es pot obrir la canonada `%s' per a l'entrada (%s)" -#: io.c:749 +#: io.c:904 #, 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)" +msgstr "no es pot obrir una canonada bidireccional `%s' per a les entrades/eixides (%s)" -#: io.c:831 +#: io.c:986 #, c-format msgid "can't redirect from `%s' (%s)" -msgstr "no es pot redirigir des de «%s» (%s)" +msgstr "no es pot redirigir des de `%s' (%s)" -#: io.c:834 +#: io.c:989 #, c-format msgid "can't redirect to `%s' (%s)" -msgstr "no es pot redirigir cap a «%s» (%s)" +msgstr "no es pot redirigir cap a `%s' (%s)" -#: io.c:883 -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:1040 +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:899 +#: io.c:1056 #, c-format msgid "close of `%s' failed (%s)." -msgstr "la finalització de «%s» ha fallat (%s)" +msgstr "la finalització de `%s' ha fallat (%s)" -#: io.c:907 +#: io.c:1064 msgid "too many pipes or input files open" msgstr "masses canonades o fitxers d'entrada oberts" -#: io.c:929 +#: io.c:1086 msgid "close: second argument must be `to' or `from'" -msgstr "close: el segon argument hauria de ser «to» o «from»" +msgstr "close: el segon argument hauria de ser `to' o `from'" -#: io.c:946 +#: io.c:1103 #, 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" +msgstr "close: `%.*s' no és un fitxer obert, canonada o co-procés" -#: io.c:951 +#: io.c:1108 msgid "close of redirection that was never opened" msgstr "finalització d'una redirecció que no s'ha obert" -#: io.c:1048 +#: io.c:1205 #, 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" +msgstr "close: la redirecció `%s' no s'obre amb `|&', s'ignora el segon argument" -#: io.c:1064 +#: io.c:1222 #, c-format msgid "failure status (%d) on pipe close of `%s' (%s)" -msgstr "estaus de falla (%d) en la finalització de la canonada «%s» (%s)" +msgstr "estaus de falla (%d) en la finalització de la canonada `%s' (%s)" -#: io.c:1067 +#: io.c:1225 #, c-format msgid "failure status (%d) on file close of `%s' (%s)" -msgstr "estatus de falla (%d) en la finalització del fitxer «%s» (%s)" +msgstr "estatus de falla (%d) en la finalització del fitxer `%s' (%s)" -#: io.c:1087 +#: io.c:1245 #, c-format msgid "no explicit close of socket `%s' provided" -msgstr "no s'aporta la finalització explícita del socket «%s»" +msgstr "no s'aporta la finalització explícita del socket `%s'" -#: io.c:1090 +#: io.c:1248 #, c-format msgid "no explicit close of co-process `%s' provided" -msgstr "no s'aporta la finalització explícita del co-procés «%s»" +msgstr "no s'aporta la finalització explícita del co-procés `%s'" -#: io.c:1093 +#: io.c:1251 #, c-format msgid "no explicit close of pipe `%s' provided" -msgstr "no s'aporta la finalització explícita de la canonada «%s»" +msgstr "no s'aporta la finalització explícita de la canonada `%s'" -#: io.c:1096 +#: io.c:1254 #, c-format msgid "no explicit close of file `%s' provided" -msgstr "no s'aporta la finalització explícita del fitxer «%s»" +msgstr "no s'aporta la finalització explícita del fitxer `%s'" -#: io.c:1124 io.c:1179 main.c:809 main.c:851 +#: io.c:1284 io.c:1342 main.c:864 main.c:906 #, c-format msgid "error writing standard output (%s)" msgstr "error a l'escriure en l'eixida estàndard (%s)" -#: io.c:1128 io.c:1184 +#: io.c:1289 io.c:1348 main.c:866 #, c-format msgid "error writing standard error (%s)" msgstr "error a l'escriure en l'eixida d'error estàndard (%s)" -#: io.c:1136 +#: io.c:1297 #, c-format msgid "pipe flush of `%s' failed (%s)." -msgstr "la neteja de la canonada de «%sx» ha fallat (%s)." +msgstr "la neteja de la canonada de `%sx' ha fallat (%s)." -#: io.c:1139 +#: io.c:1300 #, 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)." +msgstr "la neteja de la canonada per al co-procés de `%sx' ha fallat (%s)." -#: io.c:1142 +#: io.c:1303 #, c-format msgid "file flush of `%s' failed (%s)." -msgstr "la neteja del fitxer «%sx» ha fallat (%s)." +msgstr "la neteja del fitxer `%sx' ha fallat (%s)." -#: io.c:1257 +#: io.c:1420 #, fuzzy, c-format msgid "local port %s invalid in `/inet'" -msgstr "port local no vàlid en «%s»" +msgstr "port local no vàlid en `%s'" -#: io.c:1274 +#: io.c:1438 #, c-format msgid "remote host and port information (%s, %s) invalid" msgstr "" -#: io.c:1426 +#: 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»" +msgstr "no s'aporta cap protocol (conegut) en el nom del fitxer especial `%s'" -#: io.c:1440 +#: io.c:1604 #, c-format msgid "special file name `%s' is incomplete" -msgstr "el nom del fitxer especial «%s» està incomplet" +msgstr "el nom del fitxer especial `%s' està incomplet" -#: io.c:1457 +#: io.c:1621 msgid "must supply a remote hostname to `/inet'" -msgstr "s'ha de subministrar un nom de sistema remot a «/inet»" +msgstr "s'ha de subministrar un nom de sistema remot a `/inet'" -#: io.c:1475 +#: io.c:1639 msgid "must supply a remote port to `/inet'" -msgstr "s'ha de subministrar un port remot a «/inet»" +msgstr "s'ha de subministrar un port remot a `/inet'" -#: io.c:1521 +#: io.c:1685 msgid "TCP/IP communications are not supported" msgstr "les comunicacions TCP/IP no estan suportades" -#: io.c:1688 +#: io.c:1867 #, c-format msgid "could not open `%s', mode `%s'" -msgstr "no es pot obrir «%s», mode «%s»" +msgstr "no es pot obrir `%s', mode `%s'" -#: io.c:1739 +#: io.c:1917 #, fuzzy, c-format msgid "close of master pty failed (%s)" msgstr "ha fallat la finalització de la canonada (%s)" -#: io.c:1741 io.c:1909 io.c:2066 +#: io.c:1919 io.c:2105 io.c:2305 #, c-format msgid "close of stdout in child failed (%s)" -msgstr "" -"ha fallat la finalització de l'eixida estàndard en els processos fills (%s)" +msgstr "ha fallat la finalització de l'eixida estàndard en els processos fills (%s)" -#: io.c:1744 +#: io.c:1922 #, fuzzy, c-format msgid "moving slave pty to stdout in child failed (dup: %s)" -msgstr "" -"ha fallat la redirecció cap a l'eixida estàndard dels processos fills (dup: " -"%s)" +msgstr "ha fallat la redirecció cap a l'eixida estàndard dels processos fills (dup: %s)" -#: io.c:1746 io.c:1914 +#: io.c:1924 io.c:2110 #, 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)" +msgstr "ha fallat la finalització de l'entrada estàndard en els processos fills (%s)" -#: io.c:1749 +#: io.c:1927 #, fuzzy, c-format msgid "moving slave pty to stdin in child failed (dup: %s)" -msgstr "" -"ha fallat la redirecció cap a l'entrada estàndard dels processos fills (dup: " -"%s)" +msgstr "ha fallat la redirecció cap a l'entrada estàndard dels processos fills (dup: %s)" -#: io.c:1751 io.c:1772 +#: io.c:1929 io.c:1951 #, fuzzy, c-format msgid "close of slave pty failed (%s)" msgstr "ha fallat la finalització de la canonada (%s)" -#: io.c:1850 io.c:1912 io.c:2044 io.c:2069 +#: io.c:2040 io.c:2108 io.c:2276 io.c:2308 +#, 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 +#, 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 +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 +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 +#, c-format +msgid "close of pipe failed (%s)" +msgstr "ha fallat la finalització de la canonada (%s)" + +#: io.c:2174 +msgid "`|&' not supported" +msgstr "`|&' no està suportat" + +#: io.c:2261 +#, c-format +msgid "cannot open pipe `%s' (%s)" +msgstr "no es pot obrir la canonada `%s' (%s)" + +#: io.c:2318 +#, 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 +msgid "register_input_parser: received NULL pointer" +msgstr "" + +#: io.c:2818 #, c-format -msgid "moving pipe to stdout in child failed (dup: %s)" +msgid "input parser `%s' conflicts with previously installed input parser `%s'" msgstr "" -"ha fallat la redirecció cap a l'eixida estàndard dels processos fills (dup: " -"%s)" -#: io.c:1857 io.c:1917 +#: io.c:2825 #, c-format -msgid "moving pipe to stdin in child failed (dup: %s)" +msgid "input parser `%s' failed to open `%s'" msgstr "" -"ha fallat la redirecció cap a l'entrada estàndard dels processos fills (dup: " -"%s)" -#: io.c:1877 io.c:2059 -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:2845 +msgid "register_output_wrapper: received NULL pointer" +msgstr "" -#: io.c:1885 -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:2873 +#, c-format +msgid "output wrapper `%s' conflicts with previously installed output wrapper `%s'" +msgstr "" -#: io.c:1920 io.c:2071 io.c:2085 +#: io.c:2880 #, c-format -msgid "close of pipe failed (%s)" -msgstr "ha fallat la finalització de la canonada (%s)" +msgid "output wrapper `%s' failed to open `%s'" +msgstr "" -#: io.c:1965 -msgid "`|&' not supported" -msgstr "«|&» no està suportat" +#: io.c:2901 +msgid "register_output_processor: received NULL pointer" +msgstr "" -#: io.c:2031 +#: io.c:2930 #, c-format -msgid "cannot open pipe `%s' (%s)" -msgstr "no es pot obrir la canonada «%s» (%s)" +msgid "two-way processor `%s' conflicts with previously installed two-way processor `%s'" +msgstr "" -#: io.c:2079 +#: io.c:2939 #, 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)" +msgid "two way processor `%s' failed to open `%s'" +msgstr "" -#: io.c:2569 +#: io.c:3064 #, c-format msgid "data file `%s' is empty" -msgstr "el fitxer de dades «%s» està buit" +msgstr "el fitxer de dades `%s' està buit" -#: io.c:2610 io.c:2618 +#: io.c:3106 io.c:3114 msgid "could not allocate more input memory" msgstr "" -#: io.c:3171 +#: io.c:3682 msgid "multicharacter value of `RS' is a gawk extension" -msgstr "el valor multicaràcter de «RS» és una extensió de gawk" +msgstr "el valor multicaràcter de `RS' és una extensió de gawk" -#: io.c:3276 +#: io.c:3771 #, fuzzy msgid "IPv6 communication is not supported" msgstr "les comunicacions TCP/IP no estan suportades" -#: main.c:307 -msgid "out of memory" -msgstr "memòria esgotada" - -#: main.c:384 -msgid "`-m[fr]' option irrelevant in gawk" -msgstr "l'opción «-m[fr]» és irrellevant en gawk" - -#: main.c:386 -msgid "-m option usage: `-m[fr] nnn'" -msgstr "ús de l'opció -m: «-m[fr] nnn»" - -#: main.c:409 +#: main.c:405 #, fuzzy msgid "empty argument to `-e/--source' ignored" -msgstr "s'igonarà l'argument buit per a l'opció «--source»" +msgstr "s'igonarà l'argument buit per a l'opció `--source'" -#: main.c:475 +#: 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" +msgstr "%s: no es reconeix l'opció `-W %s', serà ignorada\n" -#: main.c:528 +#: main.c:541 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: l'opció requereix un argument -- %c\n" -#: main.c:549 +#: main.c:562 msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'" -msgstr "" -"la variable d'entorn «POSIXLY_CORRECT» està establerta: usant «--posix»" +msgstr "la variable d'entorn `POSIXLY_CORRECT' està establerta: usant `--posix'" -#: main.c:555 +#: main.c:568 msgid "`--posix' overrides `--traditional'" -msgstr "«--posix» solapa a «--traditional»" +msgstr "`--posix' solapa a `--traditional'" -#: main.c:566 +#: main.c:579 msgid "`--posix'/`--traditional' overrides `--non-decimal-data'" -msgstr "«--posix» i «--traditional» solapen a «--non-decimal-data»" +msgstr "`--posix' i `--traditional' solapen a `--non-decimal-data'" -#: main.c:570 +#: main.c:583 #, fuzzy, 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:575 +#: main.c:588 #, fuzzy -msgid "`--posix' overrides `--binary'" -msgstr "«--posix» solapa a «--traditional»" +msgid "`--posix' overrides `--characters-as-bytes'" +msgstr "`--posix' solapa a `--traditional'" -#: main.c:626 +#: main.c:647 #, fuzzy, c-format msgid "can't set binary mode on stdin (%s)" msgstr "no es pot establir el mode en l'entrada estàndard (%s)" -#: main.c:629 +#: main.c:650 #, fuzzy, 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:631 +#: main.c:652 #, fuzzy, 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:670 +#: main.c:710 msgid "no program text at all!" msgstr "no hi ha cap text per al programa!" -#: main.c:749 +#: main.c:799 #, 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:751 +#: main.c:801 #, 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:756 +#: main.c:806 #, fuzzy msgid "POSIX options:\t\tGNU long options: (standard)\n" msgstr "Opcions POSIX:\t\tOpcions llargues GNU:\n" -#: main.c:757 +#: main.c:807 msgid "\t-f progfile\t\t--file=progfile\n" msgstr "\t-f fitx_prog\t\t--file=fitx_prog\n" -#: main.c:758 +#: main.c:808 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:759 +#: main.c:809 msgid "\t-v var=val\t\t--assign=var=val\n" msgstr "\t-v var=valor\t\t--assign=var=valor\n" -#: main.c:760 +#: main.c:810 #, fuzzy msgid "Short options:\t\tGNU long options: (extensions)\n" msgstr "Opcions POSIX:\t\tOpcions llargues GNU:\n" -#: main.c:761 +#: main.c:811 msgid "\t-b\t\t\t--characters-as-bytes\n" msgstr "" -#: main.c:762 +#: main.c:812 #, fuzzy msgid "\t-c\t\t\t--traditional\n" msgstr "\t-W traditional\t\t--traditional\n" -#: main.c:763 +#: main.c:813 #, fuzzy msgid "\t-C\t\t\t--copyright\n" msgstr "\t-W copyright\t\t--copyright\n" -#: main.c:764 +#: main.c:814 #, fuzzy -msgid "\t-d [file]\t\t--dump-variables[=file]\n" +msgid "\t-d[file]\t\t--dump-variables[=file]\n" msgstr "\t-W dump-variables[=fitxer] --dump-variables[=fitxer]\n" -#: main.c:765 +#: main.c:815 +#, fuzzy +msgid "\t-D[file]\t\t--debug[=file]\n" +msgstr "\t-W profile[=fitxer]\t--profile[=fitxer]\n" + +#: main.c:816 #, fuzzy msgid "\t-e 'program-text'\t--source='program-text'\n" msgstr "\t-W source=text_prog\t--source=text_prog\n" -#: main.c:766 +#: main.c:817 #, fuzzy msgid "\t-E file\t\t\t--exec=file\n" -msgstr "\t-W profile[=fitxer]\t--profile[=fitxer]\n" +msgstr "\t-f fitx_prog\t\t--file=fitx_prog\n" -#: main.c:767 +#: main.c:818 #, fuzzy msgid "\t-g\t\t\t--gen-pot\n" msgstr "\t-W gen-po\t\t--gen-po\n" -#: main.c:768 +#: main.c:819 #, fuzzy msgid "\t-h\t\t\t--help\n" msgstr "\t-W help\t\t\t--help\n" -#: main.c:769 +#: main.c:820 +msgid "\t-i includefile\t\t--include=includefile\n" +msgstr "" + +#: main.c:821 +msgid "\t-l library\t\t--load=library\n" +msgstr "" + +#: main.c:822 #, fuzzy msgid "\t-L [fatal]\t\t--lint[=fatal]\n" msgstr "\t-W lint[=fatal]\t\t--lint[=fatal]\n" -#: main.c:770 +#: main.c:823 #, fuzzy msgid "\t-n\t\t\t--non-decimal-data\n" msgstr "\t-W non-decimal-data\t--non-decimal-data\n" -#: main.c:771 +#: main.c:824 +msgid "\t-M\t\t\t--bignum\n" +msgstr "" + +#: main.c:825 msgid "\t-N\t\t\t--use-lc-numeric\n" msgstr "" -#: main.c:772 +#: main.c:826 +#, fuzzy +msgid "\t-o[file]\t\t--pretty-print[=file]\n" +msgstr "\t-W profile[=fitxer]\t--profile[=fitxer]\n" + +#: main.c:827 msgid "\t-O\t\t\t--optimize\n" msgstr "" -#: main.c:773 +#: main.c:828 #, fuzzy -msgid "\t-p [file]\t\t--profile[=file]\n" +msgid "\t-p[file]\t\t--profile[=file]\n" msgstr "\t-W profile[=fitxer]\t--profile[=fitxer]\n" -#: main.c:774 +#: main.c:829 #, fuzzy msgid "\t-P\t\t\t--posix\n" msgstr "\t-W posix\t\t--posix\n" -#: main.c:775 +#: main.c:830 #, fuzzy msgid "\t-r\t\t\t--re-interval\n" msgstr "\t-W re-interval\t\t--re-interval\n" -#: main.c:777 -#, fuzzy -msgid "\t-R file\t\t\t--command=file\n" -msgstr "\t-W profile[=fitxer]\t--profile[=fitxer]\n" - -#: main.c:778 +#: main.c:831 msgid "\t-S\t\t\t--sandbox\n" msgstr "" -#: main.c:779 +#: main.c:832 #, fuzzy msgid "\t-t\t\t\t--lint-old\n" msgstr "\t-W lint-old\t\t--lint-old\n" -#: main.c:780 +#: main.c:833 #, fuzzy msgid "\t-V\t\t\t--version\n" msgstr "\t-W version\t\t--version\n" -#: main.c:782 +#: main.c:835 msgid "\t-W nostalgia\t\t--nostalgia\n" msgstr "\t-W nostalgia\t\t--nostalgia\n" -#: main.c:785 +#: main.c:838 #, fuzzy msgid "\t-Y\t\t--parsedebug\n" msgstr "\t-W parsedebug\t\t--parsedebug\n" @@ -1736,30 +3015,30 @@ msgstr "\t-W parsedebug\t\t--parsedebug\n" #. for this application. Please add _another line_ with the #. address for translation bugs. #. no-wrap -#: main.c:794 +#: main.c:847 #, fuzzy msgid "" "\n" "To report bugs, see node `Bugs' in `gawk.info', which is\n" "section `Reporting Problems and Bugs' in the printed version.\n" "\n" -msgstr "a la secció «Reporting Problems and Bugs» de la versió impresa.\n" +msgstr "a la secció `Reporting Problems and Bugs' de la versió impresa.\n" -#: main.c:798 +#: main.c:851 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:802 +#: main.c:855 msgid "" "Examples:\n" "\tgawk '{ sum += $1 }; END { print sum }' file\n" "\tgawk -F: '{ print $1 }' /etc/passwd\n" msgstr "" -#: main.c:822 +#: main.c:880 #, fuzzy, c-format msgid "" "Copyright (C) 1989, 1991-%d Free Software Foundation.\n" @@ -1778,7 +3057,7 @@ msgstr "" "Llicència, o (a la vostra elecció) qualsevol versió posterior.\n" "\n" -#: main.c:830 +#: main.c:888 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" @@ -1792,7 +3071,7 @@ msgstr "" "Per a més detalls consulteu la Llicència Pública General de GNU.\n" "\n" -#: main.c:841 +#: main.c:894 #, fuzzy msgid "" "You should have received a copy of the GNU General Public License\n" @@ -1802,125 +3081,180 @@ msgstr "" "Pública General de GNU; si no és així, escriviu a la Free Software\n" "Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n" -#: main.c:876 +#: main.c:931 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:1110 +#: main.c:1208 #, c-format msgid "unknown value for field spec: %d\n" msgstr "" -#: main.c:1170 +#: main.c:1306 #, c-format msgid "" "%s: `%s' argument to `-v' not in `var=value' form\n" "\n" msgstr "" -#: main.c:1190 +#: main.c:1332 #, c-format msgid "`%s' is not a legal variable name" msgstr "" -#: main.c:1193 +#: main.c:1335 #, c-format msgid "`%s' is not a variable name, looking for file `%s=%s'" msgstr "" -#: main.c:1246 +#: main.c:1339 +#, fuzzy, c-format +msgid "cannot use gawk builtin `%s' as variable name" +msgstr "no es pot usar el nom de la funció `%s' com a variable o matriu" + +#: main.c:1344 +#, fuzzy, c-format +msgid "cannot use function `%s' as variable name" +msgstr "no es pot usar el nom de la funció `%s' com a variable o matriu" + +#: main.c:1397 msgid "floating point exception" msgstr "excepció de coma flotant" -#: main.c:1253 +#: main.c:1404 msgid "fatal error: internal error" msgstr "error fatal: error intern" -#: main.c:1268 +#: main.c:1419 #, fuzzy msgid "fatal error: internal error: segfault" msgstr "error fatal: error intern" -#: main.c:1280 +#: main.c:1431 #, fuzzy msgid "fatal error: internal error: stack overflow" msgstr "error fatal: error intern" -#: main.c:1330 +#: main.c:1490 #, c-format msgid "no pre-opened fd %d" msgstr "no s'ha pre-obert el descriptor fd per a %d" -#: main.c:1337 +#: main.c:1497 #, 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" -#: main.c:1360 main.c:1369 +#: mpfr.c:550 #, c-format -msgid "could not find groups: %s" -msgstr "no es poden trobar els grups: %s" +msgid "PREC value `%.*s' is invalid" +msgstr "" + +#: mpfr.c:608 +#, c-format +msgid "RNDMODE value `%.*s' is invalid" +msgstr "" + +#: mpfr.c:698 +#, fuzzy, c-format +msgid "%s: received non-numeric argument" +msgstr "cos: s'ha rebut un argument que no és numèric" + +#: mpfr.c:800 +#, fuzzy +msgid "compl(%Rg): negative value will give strange results" +msgstr "compl(%lf): el valor negatiu donarà resultats estranys" + +#: mpfr.c:804 +#, fuzzy +msgid "comp(%Rg): fractional value will be truncated" +msgstr "compl(%lf): el valor fraccionari serà truncat" + +#: mpfr.c:816 +#, fuzzy, c-format +msgid "cmpl(%Zd): negative values will give strange results" +msgstr "compl(%lf): el valor negatiu donarà resultats estranys" -#: msg.c:63 +#: mpfr.c:835 +#, fuzzy, c-format +msgid "%s: received non-numeric argument #%d" +msgstr "cos: s'ha rebut un argument que no és numèric" + +#: mpfr.c:845 +msgid "%s: argument #%d has invalid value %Rg, using 0" +msgstr "" + +#: mpfr.c:857 +#, fuzzy +msgid "%s: argument #%d negative value %Rg will give strange results" +msgstr "and(%lf, %lf): els valors negatius donaran resultats estranys" + +#: mpfr.c:863 +#, fuzzy +msgid "%s: argument #%d fractional value %Rg will be truncated" +msgstr "and(%lf, %lf): els valors fraccionaris seran truncats" + +#: mpfr.c:878 +#, fuzzy, c-format +msgid "%s: argument #%d negative value %Zd will give strange results" +msgstr "and(%lf, %lf): els valors negatius donaran resultats estranys" + +#: msg.c:68 #, c-format msgid "cmd. line:" msgstr "línia cmd.:" -#: msg.c:107 -msgid "error: " -msgstr "Error: " - -#: node.c:401 +#: node.c:421 msgid "backslash at end of string" msgstr "barra invertida al final de la cadena" -#: node.c:502 +#: node.c:500 #, fuzzy, c-format msgid "old awk does not support the `\\%c' escape sequence" -msgstr "l'antic awk no suporta l'operador «**=»" +msgstr "l'antic awk no suporta l'operador `**='" -#: node.c:553 +#: node.c:551 msgid "POSIX does not allow `\\x' escapes" -msgstr "POSIX no permet seqüències d'escapada «\\x»" +msgstr "POSIX no permet seqüències d'escapada `\\x'" -#: node.c:559 +#: node.c:557 msgid "no hex digits in `\\x' escape sequence" -msgstr "no hi ha dígits hexadecimals en la seqüència d'escapada «\\x»" +msgstr "no hi ha dígits hexadecimals en la seqüència d'escapada `\\x'" -#: node.c:581 +#: node.c:579 #, c-format -msgid "" -"hex escape \\x%.*s of %d characters probably not interpreted the way you " -"expect" +msgid "hex escape \\x%.*s of %d characters probably not interpreted the way you expect" msgstr "" -#: node.c:596 +#: node.c:594 #, c-format msgid "escape sequence `\\%c' treated as plain `%c'" -msgstr "la seqüència d'escapada «\\%c» és tractada com a una simple «%c»" +msgstr "la seqüència d'escapada `\\%c' és tractada com a una simple `%c'" -#: node.c:735 -msgid "" -"Invalid multibyte data detected. There may be a mismatch between your data " -"and your locale." +#: node.c:739 +msgid "Invalid multibyte data detected. There may be a mismatch between your data and your locale." msgstr "" -#: posix/gawkmisc.c:175 +#: posix/gawkmisc.c:177 #, fuzzy, c-format msgid "%s %s `%s': could not get fd flags: (fcntl F_GETFD: %s)" -msgstr "%s %s «%s»: no es pot inicialitzar close-on-exec: (fcntl: %s)" +msgstr "%s %s `%s': no es pot inicialitzar close-on-exec: (fcntl: %s)" -#: posix/gawkmisc.c:187 +#: posix/gawkmisc.c:189 #, fuzzy, c-format msgid "%s %s `%s': could not set close-on-exec: (fcntl F_SETFD: %s)" -msgstr "%s %s «%s»: no es pot inicialitzar close-on-exec: (fcntl: %s)" +msgstr "%s %s `%s': no es pot inicialitzar close-on-exec: (fcntl: %s)" -#: profile.c:83 +#: profile.c:71 #, c-format msgid "could not open `%s' for writing: %s" -msgstr "no es pot obrir «%s» per a escriptura: %s" +msgstr "no es pot obrir `%s' per a escriptura: %s" + +#: profile.c:73 +msgid "sending profile to standard error" +msgstr "enviant el perfil a l'eixida d'error estàndard" -#: profile.c:203 +#: profile.c:193 #, fuzzy, c-format msgid "" "\t# %s block(s)\n" @@ -1929,8 +3263,8 @@ msgstr "" "\t# Bloc(s) FINAL\n" "\n" -#: profile.c:208 -#, fuzzy, c-format +#: profile.c:198 +#, c-format msgid "" "\t# Rule(s)\n" "\n" @@ -1938,17 +3272,29 @@ msgstr "" "\t# Regla(es)\n" "\n" -#: profile.c:279 +#: profile.c:272 #, fuzzy, c-format msgid "internal error: %s with null vname" msgstr "error intern: Node_var amb vname nul" -#: profile.c:938 +#: profile.c:537 +#, fuzzy +msgid "internal error: builtin with null fname" +msgstr "error intern: Node_var amb vname nul" + +#: profile.c:949 +#, c-format +msgid "" +"\t# Loaded extensions (-l and/or @load)\n" +"\n" +msgstr "" + +#: profile.c:972 #, c-format msgid "\t# gawk profile, created %s\n" msgstr "\t# perfil gawk, creat %s\n" -#: profile.c:1317 +#: profile.c:1475 #, c-format msgid "" "\n" @@ -1957,152 +3303,137 @@ msgstr "" "\n" "\t# Funcions, llistades alfabèticament\n" -#: profile.c:1356 +#: profile.c:1513 #, c-format msgid "redir2str: unknown redirection type %d" msgstr "" -#: re.c:589 -#, c-format -msgid "range of the form `[%c-%c]' is locale dependant" -msgstr "" - -#: re.c:611 +#: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" msgstr "" -#: regcomp.c:132 +#: regcomp.c:131 msgid "Success" msgstr "Èxit" -#: regcomp.c:135 +#: regcomp.c:134 msgid "No match" msgstr "No hi ha concordança" -#: regcomp.c:138 +#: regcomp.c:137 msgid "Invalid regular expression" msgstr "Expressió regular no vàlida" -#: regcomp.c:141 +#: regcomp.c:140 msgid "Invalid collation character" msgstr "Caràcter de comparació no vàlid" -#: regcomp.c:144 +#: regcomp.c:143 msgid "Invalid character class name" msgstr "Nom de classe de caràcters no vàlid" -#: regcomp.c:147 +#: regcomp.c:146 msgid "Trailing backslash" msgstr "Barra invertida extra al final" -#: regcomp.c:150 +#: regcomp.c:149 msgid "Invalid back reference" msgstr "Referència cap enradera no vàlida" -#: regcomp.c:153 +#: regcomp.c:152 msgid "Unmatched [ or [^" msgstr "[ o [^ desemparellats" -#: regcomp.c:156 +#: regcomp.c:155 msgid "Unmatched ( or \\(" msgstr "( o \\( desemparellats" -#: regcomp.c:159 +#: regcomp.c:158 msgid "Unmatched \\{" msgstr "\\{ desemparellat" -#: regcomp.c:162 -msgid "Invalid content of \\{\\}" -msgstr "Contingut no vàlid de \\{\\}" - -#: regcomp.c:165 +#: regcomp.c:164 msgid "Invalid range end" msgstr "Final de rang no vàlid" -#: regcomp.c:168 +#: regcomp.c:167 msgid "Memory exhausted" msgstr "Memòria exhaurida" -#: regcomp.c:171 +#: regcomp.c:170 msgid "Invalid preceding regular expression" msgstr "Expressió regular precedent no vàlida" -#: regcomp.c:174 +#: regcomp.c:173 msgid "Premature end of regular expression" msgstr "Fí prematura de l'expressió regular" -#: regcomp.c:177 -msgid "Regular expression too big" -msgstr "L'expressió regular és massa gran" - -#: regcomp.c:180 +#: regcomp.c:179 msgid "Unmatched ) or \\)" msgstr ") o \\) desemparellats" -#: regcomp.c:701 +#: regcomp.c:704 msgid "No previous regular expression" msgstr "No hi ha una expressió regular prèvia" -#~ msgid "statement may have no effect" -#~ msgstr "la declaració podria no tindre efecte" +#: symbol.c:741 +msgid "can not pop main context" +msgstr "" -#~ msgid "attempt to use scalar `%s' as array" -#~ msgstr "s'ha intentat usar la dada escalar «%s» com a una matriu" +#~ msgid "reference to uninitialized element `%s[\"%s\"]'" +#~ msgstr "referència a un element sense valor inicial `%s[\"%s\"]'" -#, fuzzy -#~ msgid "attempt to use array `%s' in scalar context" -#~ msgstr "s'ha intentat usar la matriu «%s» en un context escalar" +#~ msgid "subscript of array `%s' is null string" +#~ msgstr "el subscript de la matriu `%s' és una cadena nul·la" -#~ msgid "`continue' outside a loop is not allowed" -#~ msgstr "no es permet «continue» a fora d'un bucle" +#~ msgid "delete: illegal use of variable `%s' as array" +#~ msgstr "delete: ús il·legal de la variable `%s' com a una matriu" -#, fuzzy -#~ msgid "`break' outside a loop is not allowed" -#~ msgstr "no es permet «break» a fora d'un bucle" +#~ msgid "%s: empty (null)\n" +#~ msgstr "%s: buit (nul)\n" -#~ msgid "/inet/raw client not ready yet, sorry" -#~ msgstr "el client /inet/raw encara no està a punt, ho sento" +#~ msgid "%s: empty (zero)\n" +#~ msgstr "%s: buit (zero)\n" -#~ msgid "only root may use `/inet/raw'." -#~ msgstr "sols el root pot usar «/inet/raw»." +#~ msgid "%s: table_size = %d, array_size = %d\n" +#~ msgstr "%s: mida_taula = %d, mida_matriu = %d\n" -#~ msgid "/inet/raw server not ready yet, sorry" -#~ msgstr "el servidor /inet/raw encara no està a punt, ho sento" +#~ msgid "%s: array_ref to %s\n" +#~ msgstr "%s: ref_matriu a %s\n" -#~ msgid "\t-m[fr] val\n" -#~ msgstr "\t-m[fr] valor\n" +#~ msgid "and: received non-numeric first argument" +#~ msgstr "and: el primer argument rebut no és numèric" -#~ msgid "call of `length' without parentheses is deprecated by POSIX" -#~ msgstr "la crida de «length» sense parèntesis està desaprovada per POSIX" +#~ msgid "or: received non-numeric first argument" +#~ msgstr "or: el primer argument rebut no és numèric" -#, fuzzy -#~ msgid "reference to uninitialized field `$%s'" -#~ msgstr "referència a una variable sense inicialitzar «%s»" +#~ msgid "or(%lf, %lf): negative values will give strange results" +#~ msgstr "or(%lf, %lf): els valors negatius donaran resultats estranys" -#~ msgid "can't convert string to float" -#~ msgstr "no es pot convertir la cadena a coma flotant" +#~ msgid "or(%lf, %lf): fractional values will be truncated" +#~ msgstr "or(%lf, %lf): els valors fraccionaris seran truncats" -#~ msgid "`continue' outside a loop is not portable" -#~ msgstr "«continue» fora d'un bucle no és portable" +#~ msgid "xor: received non-numeric first argument" +#~ msgstr "xor: el primer argument rebut no és numèric" -#~ msgid "`break' outside a loop is not portable" -#~ msgstr "«break» a fora d'un bucle no és portable" +#~ msgid "xor(%lf, %lf): fractional values will be truncated" +#~ msgstr "xor(%lf, %lf): els valors fraccionaris seran truncats" -#~ msgid "`nextfile' cannot be called from a BEGIN rule" -#~ msgstr "«nextfile» no es pot cridar des d'una regla BEGIN" +#~ msgid "Operation Not Supported" +#~ msgstr "Operació No Suportada" -#~ msgid "`next' cannot be called from a BEGIN rule" -#~ msgstr "«next» no es pot cridar des d'una regla BEGIN" +#~ msgid "%s: illegal option -- %c\n" +#~ msgstr "%s: opció il·legal -- %c\n" -#~ msgid "file `%s' is a directory" -#~ msgstr "el fitxer «%s» és un directori" +#~ msgid "`-m[fr]' option irrelevant in gawk" +#~ msgstr "l'opción `-m[fr]' és irrellevant en gawk" -#~ msgid "use `PROCINFO[\"%s\"]' instead of `%s'" -#~ msgstr "useu «PROCINFO[\"%s\"]» en comptes de «%s»" +#~ msgid "-m option usage: `-m[fr] nnn'" +#~ msgstr "ús de l'opció -m: `-m[fr] nnn'" -#~ msgid "use `PROCINFO[...]' instead of `/dev/user'" -#~ msgstr "useu «PROCINFO[...]» en comptes de «/dev/user»" +#~ msgid "\t-m[fr] val\n" +#~ msgstr "\t-m[fr] valor\n" #~ msgid "\t-W compat\t\t--compat\n" #~ msgstr "\t-W compat\t\t--compat\n" @@ -2114,159 +3445,141 @@ msgstr "No hi ha una expressi #~ msgstr "\t-W usage\t\t--usage\n" #~ msgid "" -#~ "\t# BEGIN block(s)\n" #~ "\n" +#~ "To report bugs, see node `Bugs' in `gawk.info', which is\n" #~ msgstr "" -#~ "\t# Bloc(s) INICI\n" #~ "\n" +#~ "Per a informar d'errors, consulteu el node «Bugs' en «gawk.info', que està\n" -#~ msgid "`$' is not permitted in awk formats" -#~ msgstr "no es permeten «$» en els formats awk" - -#~ msgid "arg count with `$' must be > 0" -#~ msgstr "el compte d'arguments amb «$» ha de ser > 0" - -#, fuzzy -#~ msgid "arg count %ld greater than total number of supplied arguments" -#~ msgstr "" -#~ "el comte d'arguments %d és major que el nombre total d'arguments " -#~ "proporcionats" - -#~ msgid "`$' not permitted after period in format" -#~ msgstr "no es permet «$» després d'un punt en el format" - -#~ msgid "no `$' supplied for positional field width or precision" -#~ msgstr "no es proporciona «$» per a l'ample o precisió del camp de posició" - -#~ msgid "`l' is meaningless in awk formats; ignored" -#~ msgstr "«l» manca de significat en els formats awk; serà ignorat" - -#~ msgid "`l' is not permitted in POSIX awk formats" -#~ msgstr "«l» no està permés en els formats POSIX de awk" - -#~ msgid "`L' is meaningless in awk formats; ignored" -#~ msgstr "«L» manca de significat en els formats awk; serà ignorat" - -#~ msgid "`L' is not permitted in POSIX awk formats" -#~ msgstr "«L» no està permés en els formats POSIX de awk" - -#~ msgid "`h' is meaningless in awk formats; ignored" -#~ msgstr "«h» manca de significat en els formats awk; serà ignorat" - -#~ msgid "`h' is not permitted in POSIX awk formats" -#~ msgstr "«h» no està permés en els formats POSIX de awk" - -#~ msgid "not enough arguments to satisfy format string" -#~ msgstr "no hi ha prou arguments per a satisfer el format d'una cadena" - -#~ msgid "^ ran out for this one" -#~ msgstr "^ desbordament per a aquest" - -#~ msgid "[s]printf: format specifier does not have control letter" -#~ msgstr "[s]printf: l'especificador de format no conté lletra de control" - -#~ msgid "too many arguments supplied for format string" -#~ msgstr "s'han proporcionat masses arguments per a la cadena de format" - -#, fuzzy -#~ msgid "attempt to use array parameter `%s' in a scalar context" -#~ msgstr "s'ha intentat usar la matriu «%s» en un context escalar" +#~ msgid "invalid syntax in name `%s' for variable assignment" +#~ msgstr "sintaxi no vàlida en el nom «%s' per a l'asignació de la variable" -#~ msgid "can't open two way socket `%s' for input/output (%s)" -#~ msgstr "" -#~ "no es pot obrir un socket bidireccional «%s» per a les entrades/eixides " -#~ "(%s)" +#~ msgid "could not find groups: %s" +#~ msgstr "no es poden trobar els grups: %s" -#~ msgid "%s: illegal option -- %c\n" -#~ msgstr "%s: opció il·legal -- %c\n" +#~ msgid "internal error: Node_var_array with null vname" +#~ msgstr "error intern: Node_var_array amb vname nul" -#~ msgid "" -#~ "concatenation: side effects in one expression have changed the length of " -#~ "another!" -#~ msgstr "" -#~ "concatenació: els efectes colaterals en una expressió han canviat la " -#~ "longitud d'una altra!" +#~ msgid "or used in other expression context" +#~ msgstr "o s'ha emprat en un altre context de l'expressió" #~ msgid "illegal type (%s) in tree_eval" #~ msgstr "tipus il·legal (%s) en tree_eval" -#~ msgid "\t# -- main --\n" -#~ msgstr "\t# -- principal --\n" - -#~ msgid "invalid tree type %s in redirect()" -#~ msgstr "tipus d'arbre %s no vàlid dintre de redirect()" - -#~ msgid "unexpected type %s in prec_level" -#~ msgstr "tipus %s inesperat en prec_level" +#~ msgid "attempt to use function `%s' as array" +#~ msgstr "s'ha intentat usar la funció «%s» com a una matriu" -#, fuzzy -#~ msgid "Unknown node type %s in pp_var" -#~ msgstr "tipo de node %d desconegut" +#~ msgid "`%s' is a function, assignment is not allowed" +#~ msgstr "«%s» és una funció, l'assignació no és permesa" -#~ msgid "delete: illegal use of variable `%s' as array" -#~ msgstr "delete: ús il·legal de la variable «%s» com a una matriu" +#~ msgid "assignment is not allowed to result of builtin function" +#~ msgstr "no es permet l'assignació per a obtindre un resultat d'una funció interna" #~ msgid "" +#~ "\t# BEGIN block(s)\n" #~ "\n" -#~ "To report bugs, see node `Bugs' in `gawk.info', which is\n" #~ msgstr "" +#~ "\t# Bloc(s) INICI\n" #~ "\n" -#~ "Per a informar d'errors, consulteu el node «Bugs» en «gawk.info», que " -#~ "està\n" - -#~ msgid "invalid syntax in name `%s' for variable assignment" -#~ msgstr "sintaxi no vàlida en el nom «%s» per a l'asignació de la variable" - -#~ msgid "internal error: Node_var_array with null vname" -#~ msgstr "error intern: Node_var_array amb vname nul" - -#~ msgid "or used in other expression context" -#~ msgstr "o s'ha emprat en un altre context de l'expressió" -#~ msgid "`%s' is a function, assignment is not allowed" -#~ msgstr "«%s» és una funció, l'assignació no és permesa" +#~ msgid "unexpected type %s in prec_level" +#~ msgstr "tipus %s inesperat en prec_level" #~ msgid "BEGIN blocks must have an action part" #~ msgstr "Els blocs INICI han de tindre una part d'acció" -#~ msgid "`nextfile' used in BEGIN or END action" -#~ msgstr "«nextfile» és usat dintre de l'acció BEGIN o END" +#~ msgid "statement may have no effect" +#~ msgstr "la declaració podria no tindre efecte" #~ msgid "non-redirected `getline' undefined inside BEGIN or END action" #~ msgstr "«getline» no redirigit sense definir dintre de l'acció BEGIN o END" +#~ msgid "call of `length' without parentheses is deprecated by POSIX" +#~ msgstr "la crida de «length» sense parèntesis està desaprovada per POSIX" + #~ msgid "fptr %x not in tokentab\n" #~ msgstr "fptr %x no està en la taula de referència\n" +#~ msgid "`%s' is a Bell Labs extension" +#~ msgstr "«%s» és una extensió de Bell Labs" + #~ msgid "gsub third parameter is not a changeable object" #~ msgstr "gsub: el tercer argument no és un objecte intercanviable" -#~ msgid "Unfinished \\ escape" -#~ msgstr "seqüència d'escapada \\ sense finalitzar" - #~ msgid "unfinished repeat count" #~ msgstr "repetició del comptador sense finalitzar" #~ msgid "malformed repeat count" #~ msgstr "repetició del comptador malformada" -#~ msgid "Unbalanced [" -#~ msgstr "[ sense aparellar" +#~ msgid "out of memory" +#~ msgstr "memòria esgotada" -#~ msgid "Unbalanced (" -#~ msgstr "( sense aparellar" +#~ msgid "field %d in FIELDWIDTHS, must be > 0" +#~ msgstr "el camp %d en FIELDWIDTHS, hauria de ser > 0" -#~ msgid "No regexp syntax bits specified" -#~ msgstr "No s'especifiquen els bits de sintaxi de l'expressió regular" +#~ msgid "for loop: array `%s' changed size from %d to %d during loop execution" +#~ msgstr "bucle for: la matriu «%s» ha canviat de mida de %d a %d durant l'execució del bucle" -#~ msgid "Unbalanced )" -#~ msgstr ") sense aparellar" +#~ msgid "`break' outside a loop is not portable" +#~ msgstr "«break» a fora d'un bucle no és portable" -#~ msgid "field %d in FIELDWIDTHS, must be > 0" -#~ msgstr "el camp %d en FIELDWIDTHS, hauria de ser > 0" +#~ msgid "`continue' outside a loop is not portable" +#~ msgstr "«continue» fora d'un bucle no és portable" + +#~ msgid "`next' cannot be called from a BEGIN rule" +#~ msgstr "«next» no es pot cridar des d'una regla BEGIN" + +#~ msgid "`next' cannot be called from an END rule" +#~ msgstr "«next» no es pot cridar des d'una regla FINAL" + +#~ msgid "`nextfile' cannot be called from a BEGIN rule" +#~ msgstr "«nextfile» no es pot cridar des d'una regla BEGIN" + +#~ msgid "`nextfile' cannot be called from an END rule" +#~ msgstr "«nextfile» no es pot cridar des d'una regla FINAL" + +#~ msgid "statement has no effect" +#~ msgstr "la sentència no té efecte" + +#~ msgid "assignment used in conditional context" +#~ msgstr "assignació usada en un context condicional" + +#~ msgid "concatenation: side effects in one expression have changed the length of another!" +#~ msgstr "concatenació: els efectes colaterals en una expressió han canviat la longitud d'una altra!" #~ msgid "function %s called\n" #~ msgstr "s'ha cridat a la funció %s\n" -#~ msgid "internal error: file `%s', line %d\n" -#~ msgstr "error intern: fitxer «%s», línia %d\n" +#~ msgid "\t# -- main --\n" +#~ msgstr "\t# -- principal --\n" + +#~ msgid "invalid tree type %s in redirect()" +#~ msgstr "tipus d'arbre %s no vàlid dintre de redirect()" + +#~ msgid "can't open two way socket `%s' for input/output (%s)" +#~ msgstr "no es pot obrir un socket bidireccional «%s» per a les entrades/eixides (%s)" + +#~ msgid "/inet/raw client not ready yet, sorry" +#~ msgstr "el client /inet/raw encara no està a punt, ho sento" + +#~ msgid "only root may use `/inet/raw'." +#~ msgstr "sols el root pot usar «/inet/raw»." + +#~ msgid "/inet/raw server not ready yet, sorry" +#~ msgstr "el servidor /inet/raw encara no està a punt, ho sento" + +#~ msgid "file `%s' is a directory" +#~ msgstr "el fitxer «%s» és un directori" + +#~ msgid "use `PROCINFO[\"%s\"]' instead of `%s'" +#~ msgstr "useu «PROCINFO[\"%s\"]» en comptes de «%s»" + +#~ msgid "use `PROCINFO[...]' instead of `/dev/user'" +#~ msgstr "useu «PROCINFO[...]» en comptes de «/dev/user»" + +#~ msgid "error reading input file `%s': %s" +#~ msgstr "error en llegir el fitxer d'entrada «%s»: %s" + +#~ msgid "can't convert string to float" +#~ msgstr "no es pot convertir la cadena a coma flotant" -- cgit v1.2.3 From 21a94b55d96dc3e78a2f2eae11511038639e30ee Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sat, 15 Feb 2014 20:58:38 +0200 Subject: Update texinfo.tex. --- doc/ChangeLog | 4 ++++ doc/texinfo.tex | 20 ++++++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 17b4b291..69f5c79b 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-02-15 Arnold D. Robbins + + * texinfo.tex: Update to latest. + 2014-02-14 Arnold D. Robbins * gawktexi.in: Lots of small edits. diff --git a/doc/texinfo.tex b/doc/texinfo.tex index 174e4aba..b51ac3dc 100644 --- a/doc/texinfo.tex +++ b/doc/texinfo.tex @@ -3,11 +3,11 @@ % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % -\def\texinfoversion{2014-01-30.15} +\def\texinfoversion{2014-02-09.15} % % 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 Free Software Foundation, Inc. +% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 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 @@ -2650,8 +2650,10 @@ end % we put a little stretch before and after the breakable chars, to help % line breaking of long url's. The unequal skips make look better in % cmtt at least, especially for dots. -\def\urefprestretch{\urefprebreak \hskip0pt plus.13em } -\def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em } +\def\urefprestretchamount{.13em} +\def\urefpoststretchamount{.1em} +\def\urefprestretch{\urefprebreak \hskip0pt plus\urefprestretchamount\relax} +\def\urefpoststretch{\urefpostbreak \hskip0pt plus\urefprestretchamount\relax} % \def\urefcodeamp{\urefprestretch \&\urefpoststretch} \def\urefcodedot{\urefprestretch .\urefpoststretch} @@ -6421,8 +6423,6 @@ end % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip - % Flag to tell @lisp, etc., not to narrow margin. - \let\nonarrowing = t% % % If this cartouche directly follows a sectioning command, we need the % \parskip glue (backspaced over by default) or the cartouche can @@ -6589,9 +6589,13 @@ end % @raggedright does more-or-less normal line breaking but no right -% justification. From plain.tex. +% justification. From plain.tex. Don't stretch around special +% characters in urls in this environment, since the stretch at the right +% should be enough. \envdef\raggedright{% - \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax + \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax + \def\urefprestretchamount{0pt}% + \def\urefpoststretchamount{0pt}% } \let\Eraggedright\par -- cgit v1.2.3 From 5a41f696c4b8251583f5516084eaba3b752cb7f6 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 20 Feb 2014 19:41:21 +0200 Subject: Sync regex to GLIBC. --- ChangeLog | 5 +++++ regex.c | 2 +- regex.h | 4 ++-- regex_internal.c | 2 +- regex_internal.h | 2 +- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 11a4b29c..4e830e42 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-02-20 Arnold D. Robbins + + * regex.h, regex.c, regex_internal.c, regex_internal.h: Sync + with GLIBC. Mainly copyright updates. + 2014-02-15 Arnold D. Robbins * awkgram.c, command.c: Regenerated - Bison 3.0.2. diff --git a/regex.c b/regex.c index 167d35b2..f56e8692 100644 --- a/regex.c +++ b/regex.c @@ -1,5 +1,5 @@ /* Extended regular expression matching and search library. - Copyright (C) 2002-2013 Free Software Foundation, Inc. + Copyright (C) 2002-2014 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa . diff --git a/regex.h b/regex.h index c72079b2..56602961 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-2013 Free Software Foundation, Inc. + Copyright (C) 1985, 1989-2014 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 @@ -539,7 +539,7 @@ extern void re_set_registers (struct re_pattern_buffer *__buffer, regoff_t *__starts, regoff_t *__ends); #endif /* Use GNU */ -#if defined _REGEX_RE_COMP || (defined _LIBC && defined __USE_BSD) +#if defined _REGEX_RE_COMP || (defined _LIBC && defined __USE_MISC) # ifndef _CRAY /* 4.2 bsd compatibility. */ extern char *re_comp (const char *); diff --git a/regex_internal.c b/regex_internal.c index c7de18b6..10dd6e00 100644 --- a/regex_internal.c +++ b/regex_internal.c @@ -1,5 +1,5 @@ /* Extended regular expression matching and search library. - Copyright (C) 2002-2013 Free Software Foundation, Inc. + Copyright (C) 2002-2014 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa . diff --git a/regex_internal.h b/regex_internal.h index 448e32ea..c8981a08 100644 --- a/regex_internal.h +++ b/regex_internal.h @@ -1,5 +1,5 @@ /* Extended regular expression matching and search library. - Copyright (C) 2002-2013 Free Software Foundation, Inc. + Copyright (C) 2002-2014 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa . -- cgit v1.2.3 From 5e3f96e34832b2db0b33e38280643ff336c34450 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 20 Feb 2014 19:42:03 +0200 Subject: Sync dfa.c with grep. --- ChangeLog | 2 ++ dfa.c | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/ChangeLog b/ChangeLog index 4e830e42..404ba03c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,8 @@ * regex.h, regex.c, regex_internal.c, regex_internal.h: Sync with GLIBC. Mainly copyright updates. + * dfa.c (parse_bracket_exp): Sync with grep, where they restored + the buggy code. Sigh. 2014-02-15 Arnold D. Robbins diff --git a/dfa.c b/dfa.c index d5e7fdf6..19ca737f 100644 --- a/dfa.c +++ b/dfa.c @@ -1148,6 +1148,7 @@ parse_bracket_exp (void) } else { +#ifdef GAWK c1 = c; if (case_fold) { @@ -1156,6 +1157,32 @@ parse_bracket_exp (void) } for (c = c1; c <= c2; c++) setbit_case_fold_c (c, ccl); +#else + /* Defer to the system regex library about the meaning + of range expressions. */ + regex_t re; + char pattern[6] = { '[', 0, '-', 0, ']', 0 }; + char subject[2] = { 0, 0 }; + c1 = c; + if (case_fold) + { + c1 = tolower (c1); + c2 = tolower (c2); + } + + pattern[1] = c1; + pattern[3] = c2; + regcomp (&re, pattern, REG_NOSUB); + for (c = 0; c < NOTCHAR; ++c) + { + if ((case_fold && isupper (c))) + continue; + subject[0] = c; + if (regexec (&re, subject, 0, NULL, 0) != REG_NOMATCH) + setbit_case_fold_c (c, ccl); + } + regfree (&re); +#endif } colon_warning_state |= 8; -- cgit v1.2.3 From b4aa6a524d929ecf7c458acc456db50d6f11e7f4 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 20 Feb 2014 19:45:41 +0200 Subject: Sync getopt with GLIBC. --- ChangeLog | 2 ++ getopt.c | 2 +- getopt.h | 2 +- getopt1.c | 2 +- getopt_int.h | 2 +- 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 404ba03c..45bf91fe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,8 +2,10 @@ * regex.h, regex.c, regex_internal.c, regex_internal.h: Sync with GLIBC. Mainly copyright updates. + * getopt.c, getopt.h, getopt1.c, getopt_int.h: Ditto. * dfa.c (parse_bracket_exp): Sync with grep, where they restored the buggy code. Sigh. + * 2014-02-15 Arnold D. Robbins diff --git a/getopt.c b/getopt.c index a45e30f4..7bd42bb6 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-2013 Free Software Foundation, Inc. + Copyright (C) 1987-2014 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.h b/getopt.h index 5d19cb3d..da1a01ff 100644 --- a/getopt.h +++ b/getopt.h @@ -1,5 +1,5 @@ /* Declarations for getopt. - Copyright (C) 1989-2013 Free Software Foundation, Inc. + Copyright (C) 1989-2014 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 8be96571..32f2f6a6 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-2013 Free Software Foundation, Inc. + Copyright (C) 1987-2014 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 92f3871e..d255c8ee 100644 --- a/getopt_int.h +++ b/getopt_int.h @@ -1,5 +1,5 @@ /* Internal declarations for getopt. - Copyright (C) 1989-2013 Free Software Foundation, Inc. + Copyright (C) 1989-2014 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 -- cgit v1.2.3 From 2ce455acf7229b635cf7822063ac8c3f13d1ab80 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 20 Feb 2014 20:26:21 +0200 Subject: Remove a warning from interpret.h, update NEWS. --- ChangeLog | 7 ++++++- NEWS | 2 +- interpret.h | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 45bf91fe..9621c3c6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,7 +5,12 @@ * getopt.c, getopt.h, getopt1.c, getopt_int.h: Ditto. * dfa.c (parse_bracket_exp): Sync with grep, where they restored the buggy code. Sigh. - * + + Unrelated: + + * NEWS: Typo fix. + * interpret.h (r_interpret): Init a variable for BEGINFILE to avoid + compiler warnings. Thanks to Michal Jaegermann. 2014-02-15 Arnold D. Robbins diff --git a/NEWS b/NEWS index 10e8b1f8..eb7651b0 100644 --- a/NEWS +++ b/NEWS @@ -10,7 +10,7 @@ Changes from 4.1.0 to 4.1.1 1. The "stat" extension now includes a "devbsize" element which indicates the units for the "nblocks" element -2. The extension now facility works on MinGW. Many of the extensions can be +2. The extension facility now works on MinGW. Many of the extensions can be built and used directly. 3. A number of bugs in the pretty-printing / profiling code have been fixed. diff --git a/interpret.h b/interpret.h index ba70cf08..9243c892 100644 --- a/interpret.h +++ b/interpret.h @@ -1217,7 +1217,7 @@ match_re: ret = nextfile(& curfile, true); /* skip current file */ if (currule == BEGINFILE) { - long stack_size; + long stack_size = 0; ni = pop_exec_state(& currule, & source, & stack_size); -- cgit v1.2.3 From c0aeaf87402aa2670e76a32a888053fb64b879b0 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 20 Feb 2014 20:26:43 +0200 Subject: Add a quote in alarm program section. --- doc/ChangeLog | 4 + doc/gawk.info | 457 ++++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 26 ++++ doc/gawktexi.in | 26 ++++ 4 files changed, 286 insertions(+), 227 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 69f5c79b..dfebc27e 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-02-20 Arnold D. Robbins + + * gawktexi.in: Add a quote to the alarm clock program. + 2014-02-15 Arnold D. Robbins * texinfo.tex: Update to latest. diff --git a/doc/gawk.info b/doc/gawk.info index 351d0d44..a3ab750c 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -16657,6 +16657,8 @@ File: gawk.info, Node: Alarm Program, Next: Translate Program, Prev: Dupword Nothing cures insomnia like a ringing alarm clock. -- Arnold Robbins + Sleep is for web developers. -- Erik Quanstrom + The following program is a simple "alarm clock" program. You give it a time of day and an optional message. At the specified time, it prints the message on the standard output. In addition, you can give it @@ -30221,8 +30223,8 @@ Index (line 10) * Aho, Alfred <1>: Contributors. (line 11) * Aho, Alfred: History. (line 17) -* alarm clock example program: Alarm Program. (line 9) -* alarm.awk program: Alarm Program. (line 29) +* alarm clock example program: Alarm Program. (line 11) +* alarm.awk program: Alarm Program. (line 31) * algorithms: Basic High Level. (line 68) * Alpha (DEC): Manual History. (line 28) * amazing awk assembler (aaa): Glossary. (line 12) @@ -32106,6 +32108,7 @@ Index * q debugger command (alias for quit): Miscellaneous Debugger Commands. (line 99) * QSE Awk: Other Versions. (line 130) +* Quanstrom, Erik: Alarm Program. (line 8) * question mark (?) regexp operator <1>: GNU Regexp Operators. (line 59) * question mark (?) regexp operator: Regexp Operators. (line 111) @@ -32385,7 +32388,7 @@ Index * single-character fields: Single Character Fields. (line 6) * Skywalker, Luke: Undocumented. (line 6) -* sleep utility: Alarm Program. (line 109) +* sleep utility: Alarm Program. (line 111) * sleep() extension function: Extension Sample Time. (line 23) * Solaris, POSIX-compliant awk: Other Versions. (line 96) @@ -32524,7 +32527,7 @@ Index * tilde (~), ~ operator <5>: Computed Regexps. (line 6) * tilde (~), ~ operator <6>: Case-sensitivity. (line 26) * tilde (~), ~ operator: Regexp Usage. (line 19) -* time, alarm clock example program: Alarm Program. (line 9) +* time, alarm clock example program: Alarm Program. (line 11) * time, localization and: Explaining gettext. (line 115) * time, managing: Getlocaltime Function. (line 6) @@ -33035,228 +33038,228 @@ Ref: Wc Program-Footnote-2675421 Node: Miscellaneous Programs675513 Node: Dupword Program676701 Node: Alarm Program678732 -Node: Translate Program683485 -Ref: Translate Program-Footnote-1687872 -Ref: Translate Program-Footnote-2688120 -Node: Labels Program688254 -Ref: Labels Program-Footnote-1691625 -Node: Word Sorting691709 -Node: History Sorting695593 -Node: Extract Program697432 -Ref: Extract Program-Footnote-1704935 -Node: Simple Sed705063 -Node: Igawk Program708125 -Ref: Igawk Program-Footnote-1723282 -Ref: Igawk Program-Footnote-2723483 -Node: Anagram Program723621 -Node: Signature Program726689 -Node: Advanced Features727789 -Node: Nondecimal Data729675 -Node: Array Sorting731258 -Node: Controlling Array Traversal731955 -Node: Array Sorting Functions740239 -Ref: Array Sorting Functions-Footnote-1744108 -Node: Two-way I/O744302 -Ref: Two-way I/O-Footnote-1749734 -Node: TCP/IP Networking749804 -Node: Profiling752648 -Node: Internationalization760145 -Node: I18N and L10N761570 -Node: Explaining gettext762256 -Ref: Explaining gettext-Footnote-1767324 -Ref: Explaining gettext-Footnote-2767508 -Node: Programmer i18n767673 -Node: Translator i18n771875 -Node: String Extraction772668 -Ref: String Extraction-Footnote-1773629 -Node: Printf Ordering773715 -Ref: Printf Ordering-Footnote-1776499 -Node: I18N Portability776563 -Ref: I18N Portability-Footnote-1779012 -Node: I18N Example779075 -Ref: I18N Example-Footnote-1781713 -Node: Gawk I18N781785 -Node: Debugger782406 -Node: Debugging783377 -Node: Debugging Concepts783810 -Node: Debugging Terms785666 -Node: Awk Debugging788263 -Node: Sample Debugging Session789155 -Node: Debugger Invocation789675 -Node: Finding The Bug791007 -Node: List of Debugger Commands797495 -Node: Breakpoint Control798829 -Node: Debugger Execution Control802493 -Node: Viewing And Changing Data805853 -Node: Execution Stack809209 -Node: Debugger Info810676 -Node: Miscellaneous Debugger Commands814658 -Node: Readline Support819834 -Node: Limitations820665 -Node: Arbitrary Precision Arithmetic822917 -Ref: Arbitrary Precision Arithmetic-Footnote-1824566 -Node: General Arithmetic824714 -Node: Floating Point Issues826434 -Node: String Conversion Precision827315 -Ref: String Conversion Precision-Footnote-1829020 -Node: Unexpected Results829129 -Node: POSIX Floating Point Problems831282 -Ref: POSIX Floating Point Problems-Footnote-1835107 -Node: Integer Programming835145 -Node: Floating-point Programming836884 -Ref: Floating-point Programming-Footnote-1843215 -Ref: Floating-point Programming-Footnote-2843485 -Node: Floating-point Representation843749 -Node: Floating-point Context844914 -Ref: table-ieee-formats845753 -Node: Rounding Mode847137 -Ref: table-rounding-modes847616 -Ref: Rounding Mode-Footnote-1850631 -Node: Gawk and MPFR850810 -Node: Arbitrary Precision Floats852065 -Ref: Arbitrary Precision Floats-Footnote-1854508 -Node: Setting Precision854824 -Ref: table-predefined-precision-strings855510 -Node: Setting Rounding Mode857655 -Ref: table-gawk-rounding-modes858059 -Node: Floating-point Constants859246 -Node: Changing Precision860675 -Ref: Changing Precision-Footnote-1862072 -Node: Exact Arithmetic862246 -Node: Arbitrary Precision Integers865384 -Ref: Arbitrary Precision Integers-Footnote-1868402 -Node: Dynamic Extensions868549 -Node: Extension Intro870007 -Node: Plugin License871272 -Node: Extension Mechanism Outline871957 -Ref: load-extension872374 -Ref: load-new-function873852 -Ref: call-new-function874847 -Node: Extension API Description876862 -Node: Extension API Functions Introduction878075 -Node: General Data Types882941 -Ref: General Data Types-Footnote-1888543 -Node: Requesting Values888842 -Ref: table-value-types-returned889573 -Node: Constructor Functions890527 -Node: Registration Functions893547 -Node: Extension Functions894232 -Node: Exit Callback Functions896457 -Node: Extension Version String897706 -Node: Input Parsers898356 -Node: Output Wrappers908113 -Node: Two-way processors912623 -Node: Printing Messages914831 -Ref: Printing Messages-Footnote-1915908 -Node: Updating `ERRNO'916060 -Node: Accessing Parameters916799 -Node: Symbol Table Access918029 -Node: Symbol table by name918541 -Node: Symbol table by cookie920288 -Ref: Symbol table by cookie-Footnote-1924418 -Node: Cached values924481 -Ref: Cached values-Footnote-1927930 -Node: Array Manipulation928021 -Ref: Array Manipulation-Footnote-1929119 -Node: Array Data Types929158 -Ref: Array Data Types-Footnote-1931861 -Node: Array Functions931953 -Node: Flattening Arrays935719 -Node: Creating Arrays942571 -Node: Extension API Variables947296 -Node: Extension Versioning947932 -Node: Extension API Informational Variables949833 -Node: Extension API Boilerplate950919 -Node: Finding Extensions954723 -Node: Extension Example955283 -Node: Internal File Description956013 -Node: Internal File Ops960104 -Ref: Internal File Ops-Footnote-1971612 -Node: Using Internal File Ops971752 -Ref: Using Internal File Ops-Footnote-1974105 -Node: Extension Samples974371 -Node: Extension Sample File Functions975895 -Node: Extension Sample Fnmatch984380 -Node: Extension Sample Fork986106 -Node: Extension Sample Inplace987324 -Node: Extension Sample Ord989102 -Node: Extension Sample Readdir989938 -Node: Extension Sample Revout991470 -Node: Extension Sample Rev2way992063 -Node: Extension Sample Read write array992753 -Node: Extension Sample Readfile994636 -Node: Extension Sample API Tests995454 -Node: Extension Sample Time995979 -Node: gawkextlib997343 -Node: Language History1000124 -Node: V7/SVR3.11001717 -Node: SVR41004037 -Node: POSIX1005479 -Node: BTL1006865 -Node: POSIX/GNU1007599 -Node: Feature History1013198 -Node: Common Extensions1026162 -Node: Ranges and Locales1027474 -Ref: Ranges and Locales-Footnote-11032092 -Ref: Ranges and Locales-Footnote-21032119 -Ref: Ranges and Locales-Footnote-31032379 -Node: Contributors1032600 -Node: Installation1037745 -Node: Gawk Distribution1038639 -Node: Getting1039123 -Node: Extracting1039949 -Node: Distribution contents1041641 -Node: Unix Installation1047346 -Node: Quick Installation1047963 -Node: Additional Configuration Options1050407 -Node: Configuration Philosophy1052143 -Node: Non-Unix Installation1054497 -Node: PC Installation1054955 -Node: PC Binary Installation1056254 -Node: PC Compiling1058102 -Node: PC Testing1061046 -Node: PC Using1062222 -Node: Cygwin1066407 -Node: MSYS1067407 -Node: VMS Installation1067921 -Node: VMS Compilation1068685 -Ref: VMS Compilation-Footnote-11070300 -Node: VMS Dynamic Extensions1070358 -Node: VMS Installation Details1071731 -Node: VMS Running1073978 -Node: VMS GNV1076812 -Node: VMS Old Gawk1077535 -Node: Bugs1078005 -Node: Other Versions1081923 -Node: Notes1088007 -Node: Compatibility Mode1088807 -Node: Additions1089590 -Node: Accessing The Source1090517 -Node: Adding Code1091957 -Node: New Ports1098002 -Node: Derived Files1102137 -Ref: Derived Files-Footnote-11107458 -Ref: Derived Files-Footnote-21107492 -Ref: Derived Files-Footnote-31108092 -Node: Future Extensions1108190 -Node: Implementation Limitations1108773 -Node: Extension Design1110025 -Node: Old Extension Problems1111179 -Ref: Old Extension Problems-Footnote-11112687 -Node: Extension New Mechanism Goals1112744 -Ref: Extension New Mechanism Goals-Footnote-11116109 -Node: Extension Other Design Decisions1116295 -Node: Extension Future Growth1118401 -Node: Old Extension Mechanism1119237 -Node: Basic Concepts1120977 -Node: Basic High Level1121658 -Ref: figure-general-flow1121929 -Ref: figure-process-flow1122528 -Ref: Basic High Level-Footnote-11125757 -Node: Basic Data Typing1125942 -Node: Glossary1129297 -Node: Copying1154759 -Node: GNU Free Documentation License1192316 -Node: Index1217453 +Node: Translate Program683539 +Ref: Translate Program-Footnote-1687926 +Ref: Translate Program-Footnote-2688174 +Node: Labels Program688308 +Ref: Labels Program-Footnote-1691679 +Node: Word Sorting691763 +Node: History Sorting695647 +Node: Extract Program697486 +Ref: Extract Program-Footnote-1704989 +Node: Simple Sed705117 +Node: Igawk Program708179 +Ref: Igawk Program-Footnote-1723336 +Ref: Igawk Program-Footnote-2723537 +Node: Anagram Program723675 +Node: Signature Program726743 +Node: Advanced Features727843 +Node: Nondecimal Data729729 +Node: Array Sorting731312 +Node: Controlling Array Traversal732009 +Node: Array Sorting Functions740293 +Ref: Array Sorting Functions-Footnote-1744162 +Node: Two-way I/O744356 +Ref: Two-way I/O-Footnote-1749788 +Node: TCP/IP Networking749858 +Node: Profiling752702 +Node: Internationalization760199 +Node: I18N and L10N761624 +Node: Explaining gettext762310 +Ref: Explaining gettext-Footnote-1767378 +Ref: Explaining gettext-Footnote-2767562 +Node: Programmer i18n767727 +Node: Translator i18n771929 +Node: String Extraction772722 +Ref: String Extraction-Footnote-1773683 +Node: Printf Ordering773769 +Ref: Printf Ordering-Footnote-1776553 +Node: I18N Portability776617 +Ref: I18N Portability-Footnote-1779066 +Node: I18N Example779129 +Ref: I18N Example-Footnote-1781767 +Node: Gawk I18N781839 +Node: Debugger782460 +Node: Debugging783431 +Node: Debugging Concepts783864 +Node: Debugging Terms785720 +Node: Awk Debugging788317 +Node: Sample Debugging Session789209 +Node: Debugger Invocation789729 +Node: Finding The Bug791061 +Node: List of Debugger Commands797549 +Node: Breakpoint Control798883 +Node: Debugger Execution Control802547 +Node: Viewing And Changing Data805907 +Node: Execution Stack809263 +Node: Debugger Info810730 +Node: Miscellaneous Debugger Commands814712 +Node: Readline Support819888 +Node: Limitations820719 +Node: Arbitrary Precision Arithmetic822971 +Ref: Arbitrary Precision Arithmetic-Footnote-1824620 +Node: General Arithmetic824768 +Node: Floating Point Issues826488 +Node: String Conversion Precision827369 +Ref: String Conversion Precision-Footnote-1829074 +Node: Unexpected Results829183 +Node: POSIX Floating Point Problems831336 +Ref: POSIX Floating Point Problems-Footnote-1835161 +Node: Integer Programming835199 +Node: Floating-point Programming836938 +Ref: Floating-point Programming-Footnote-1843269 +Ref: Floating-point Programming-Footnote-2843539 +Node: Floating-point Representation843803 +Node: Floating-point Context844968 +Ref: table-ieee-formats845807 +Node: Rounding Mode847191 +Ref: table-rounding-modes847670 +Ref: Rounding Mode-Footnote-1850685 +Node: Gawk and MPFR850864 +Node: Arbitrary Precision Floats852119 +Ref: Arbitrary Precision Floats-Footnote-1854562 +Node: Setting Precision854878 +Ref: table-predefined-precision-strings855564 +Node: Setting Rounding Mode857709 +Ref: table-gawk-rounding-modes858113 +Node: Floating-point Constants859300 +Node: Changing Precision860729 +Ref: Changing Precision-Footnote-1862126 +Node: Exact Arithmetic862300 +Node: Arbitrary Precision Integers865438 +Ref: Arbitrary Precision Integers-Footnote-1868456 +Node: Dynamic Extensions868603 +Node: Extension Intro870061 +Node: Plugin License871326 +Node: Extension Mechanism Outline872011 +Ref: load-extension872428 +Ref: load-new-function873906 +Ref: call-new-function874901 +Node: Extension API Description876916 +Node: Extension API Functions Introduction878129 +Node: General Data Types882995 +Ref: General Data Types-Footnote-1888597 +Node: Requesting Values888896 +Ref: table-value-types-returned889627 +Node: Constructor Functions890581 +Node: Registration Functions893601 +Node: Extension Functions894286 +Node: Exit Callback Functions896511 +Node: Extension Version String897760 +Node: Input Parsers898410 +Node: Output Wrappers908167 +Node: Two-way processors912677 +Node: Printing Messages914885 +Ref: Printing Messages-Footnote-1915962 +Node: Updating `ERRNO'916114 +Node: Accessing Parameters916853 +Node: Symbol Table Access918083 +Node: Symbol table by name918595 +Node: Symbol table by cookie920342 +Ref: Symbol table by cookie-Footnote-1924472 +Node: Cached values924535 +Ref: Cached values-Footnote-1927984 +Node: Array Manipulation928075 +Ref: Array Manipulation-Footnote-1929173 +Node: Array Data Types929212 +Ref: Array Data Types-Footnote-1931915 +Node: Array Functions932007 +Node: Flattening Arrays935773 +Node: Creating Arrays942625 +Node: Extension API Variables947350 +Node: Extension Versioning947986 +Node: Extension API Informational Variables949887 +Node: Extension API Boilerplate950973 +Node: Finding Extensions954777 +Node: Extension Example955337 +Node: Internal File Description956067 +Node: Internal File Ops960158 +Ref: Internal File Ops-Footnote-1971666 +Node: Using Internal File Ops971806 +Ref: Using Internal File Ops-Footnote-1974159 +Node: Extension Samples974425 +Node: Extension Sample File Functions975949 +Node: Extension Sample Fnmatch984434 +Node: Extension Sample Fork986160 +Node: Extension Sample Inplace987378 +Node: Extension Sample Ord989156 +Node: Extension Sample Readdir989992 +Node: Extension Sample Revout991524 +Node: Extension Sample Rev2way992117 +Node: Extension Sample Read write array992807 +Node: Extension Sample Readfile994690 +Node: Extension Sample API Tests995508 +Node: Extension Sample Time996033 +Node: gawkextlib997397 +Node: Language History1000178 +Node: V7/SVR3.11001771 +Node: SVR41004091 +Node: POSIX1005533 +Node: BTL1006919 +Node: POSIX/GNU1007653 +Node: Feature History1013252 +Node: Common Extensions1026216 +Node: Ranges and Locales1027528 +Ref: Ranges and Locales-Footnote-11032146 +Ref: Ranges and Locales-Footnote-21032173 +Ref: Ranges and Locales-Footnote-31032433 +Node: Contributors1032654 +Node: Installation1037799 +Node: Gawk Distribution1038693 +Node: Getting1039177 +Node: Extracting1040003 +Node: Distribution contents1041695 +Node: Unix Installation1047400 +Node: Quick Installation1048017 +Node: Additional Configuration Options1050461 +Node: Configuration Philosophy1052197 +Node: Non-Unix Installation1054551 +Node: PC Installation1055009 +Node: PC Binary Installation1056308 +Node: PC Compiling1058156 +Node: PC Testing1061100 +Node: PC Using1062276 +Node: Cygwin1066461 +Node: MSYS1067461 +Node: VMS Installation1067975 +Node: VMS Compilation1068739 +Ref: VMS Compilation-Footnote-11070354 +Node: VMS Dynamic Extensions1070412 +Node: VMS Installation Details1071785 +Node: VMS Running1074032 +Node: VMS GNV1076866 +Node: VMS Old Gawk1077589 +Node: Bugs1078059 +Node: Other Versions1081977 +Node: Notes1088061 +Node: Compatibility Mode1088861 +Node: Additions1089644 +Node: Accessing The Source1090571 +Node: Adding Code1092011 +Node: New Ports1098056 +Node: Derived Files1102191 +Ref: Derived Files-Footnote-11107512 +Ref: Derived Files-Footnote-21107546 +Ref: Derived Files-Footnote-31108146 +Node: Future Extensions1108244 +Node: Implementation Limitations1108827 +Node: Extension Design1110079 +Node: Old Extension Problems1111233 +Ref: Old Extension Problems-Footnote-11112741 +Node: Extension New Mechanism Goals1112798 +Ref: Extension New Mechanism Goals-Footnote-11116163 +Node: Extension Other Design Decisions1116349 +Node: Extension Future Growth1118455 +Node: Old Extension Mechanism1119291 +Node: Basic Concepts1121031 +Node: Basic High Level1121712 +Ref: figure-general-flow1121983 +Ref: figure-process-flow1122582 +Ref: Basic High Level-Footnote-11125811 +Node: Basic Data Typing1125996 +Node: Glossary1129351 +Node: Copying1154813 +Node: GNU Free Documentation License1192370 +Node: Index1217507  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 63489dae..75c7b758 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -23115,6 +23115,32 @@ word, comparing it to the previous one: @i{Nothing cures insomnia like a ringing alarm clock.} @author Arnold Robbins @end quotation +@cindex Quanstrom, Erik +@ignore +Date: Sat, 15 Feb 2014 16:47:09 -0500 +Subject: Re: 9atom install question +Message-ID: +From: Erik Quanstrom +To: Aharon Robbins + +yes. + +- erik + +Aharon Robbins wrote: + +>> sleep is for web developers. +> +>Can I quote you, in the gawk manual? +> +>Thanks, +> +>Arnold +@end ignore +@quotation +@i{Sleep is for web developers.} +@author Erik Quanstrom +@end quotation @c STARTOFRANGE tialarm @cindex time, alarm clock example program diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 71f960ab..cd9c775e 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -22258,6 +22258,32 @@ word, comparing it to the previous one: @i{Nothing cures insomnia like a ringing alarm clock.} @author Arnold Robbins @end quotation +@cindex Quanstrom, Erik +@ignore +Date: Sat, 15 Feb 2014 16:47:09 -0500 +Subject: Re: 9atom install question +Message-ID: +From: Erik Quanstrom +To: Aharon Robbins + +yes. + +- erik + +Aharon Robbins wrote: + +>> sleep is for web developers. +> +>Can I quote you, in the gawk manual? +> +>Thanks, +> +>Arnold +@end ignore +@quotation +@i{Sleep is for web developers.} +@author Erik Quanstrom +@end quotation @c STARTOFRANGE tialarm @cindex time, alarm clock example program -- cgit v1.2.3 From 0a66ebd338de385b08e8cf80c39b99f5abc205db Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 21 Feb 2014 13:48:17 +0200 Subject: Sync dfa with grep. --- ChangeLog | 4 ++++ dfa.c | 43 +++++++++++++++++++++++-------------------- dfa.h | 2 ++ 3 files changed, 29 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9621c3c6..a6736b21 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2014-02-21 Arnold D. Robbins + + * dfa.h, dfa.c (parse_bracket_exp): Sync with grep. + 2014-02-20 Arnold D. Robbins * regex.h, regex.c, regex_internal.c, regex_internal.h: Sync diff --git a/dfa.c b/dfa.c index 19ca737f..03a61878 100644 --- a/dfa.c +++ b/dfa.c @@ -791,7 +791,7 @@ setbit_case_fold_c (int b, charclass c) /* UTF-8 encoding allows some optimizations that we can't otherwise assume in a multibyte encoding. */ -static inline int +int using_utf8 (void) { static int utf8 = -1; @@ -1160,28 +1160,31 @@ parse_bracket_exp (void) #else /* Defer to the system regex library about the meaning of range expressions. */ - regex_t re; - char pattern[6] = { '[', 0, '-', 0, ']', 0 }; - char subject[2] = { 0, 0 }; - c1 = c; - if (case_fold) - { - c1 = tolower (c1); - c2 = tolower (c2); - } - - pattern[1] = c1; - pattern[3] = c2; - regcomp (&re, pattern, REG_NOSUB); - for (c = 0; c < NOTCHAR; ++c) + struct re_pattern_buffer re = { 0 }; + char const *compile_msg; +#if 199901 <= __STDC_VERSION__ + char pattern[] = { '[', '\\', c, '-', '\\', c2, ']' }; +#else + char pattern[] = { '[', '\\', 0, '-', '\\', 0, ']' }; + pattern[2] = c; + pattern[5] = c2; +#endif + re_set_syntax (syntax_bits | RE_BACKSLASH_ESCAPE_IN_LISTS); + compile_msg = re_compile_pattern (pattern, sizeof pattern, &re); + if (compile_msg) + dfaerror (compile_msg); + for (c = 0; c < NOTCHAR; c++) { - if ((case_fold && isupper (c))) - continue; - subject[0] = c; - if (regexec (&re, subject, 0, NULL, 0) != REG_NOMATCH) - setbit_case_fold_c (c, ccl); + char subject = c; + switch (re_match (&re, &subject, 1, 0, NULL)) + { + case 1: setbit (c, ccl); break; + case -1: break; + default: xalloc_die (); + } } regfree (&re); + re_set_syntax (syntax_bits); #endif } diff --git a/dfa.h b/dfa.h index bacd4894..7e0674fc 100644 --- a/dfa.h +++ b/dfa.h @@ -99,3 +99,5 @@ extern void dfawarn (const char *); takes a single argument, a NUL-terminated string describing the error. The user must supply a dfaerror. */ extern _Noreturn void dfaerror (const char *); + +extern int using_utf8 (void); -- cgit v1.2.3 From dad57e4fdd815c9038267ec0fc7aa593f20b0a05 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 26 Feb 2014 20:38:51 +0200 Subject: Fix configure for MirBSD also. Bleah. --- ChangeLog | 5 +++++ configure | 4 +--- configure.ac | 4 +--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index a6736b21..3edd067d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-02-26 Arnold D. Robbins + + * configure.ac: Set up do-nothing extension/Makefile on + MirBSD also. + 2014-02-21 Arnold D. Robbins * dfa.h, dfa.c (parse_bracket_exp): Sync with grep. diff --git a/configure b/configure index 6c434883..2b4a193a 100755 --- a/configure +++ b/configure @@ -10068,9 +10068,7 @@ if test "x$enable_extensions" != "xno"; then extensions_supported=no case $host_os in - mirbsd*) - : ;; - openedition*) # OS/390 z/OS POSIX layer + mirbsd* | openedition*) # OS/390 z/OS POSIX layer cat << \EOF > extension/Makefile all dist check clean distclean install uninstall distcheck: @exit 0 diff --git a/configure.ac b/configure.ac index 19a32c22..98b62168 100644 --- a/configure.ac +++ b/configure.ac @@ -290,9 +290,7 @@ if test "x$enable_extensions" != "xno"; then dnl On MirBSD (and probably other systems), don't even try. case $host_os in - mirbsd*) - : ;; - openedition*) # OS/390 z/OS POSIX layer + mirbsd* | openedition*) # OS/390 z/OS POSIX layer cat << \EOF > extension/Makefile all dist check clean distclean install uninstall distcheck: @exit 0 -- cgit v1.2.3 From c40640f98379cbe112277033e3a8ab4caaa35ab8 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 27 Feb 2014 05:57:47 +0200 Subject: Start on doc fixes. --- doc/ChangeLog | 5 + doc/gawk.info | 923 +++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 166 +++++----- doc/gawktexi.in | 166 +++++----- 4 files changed, 658 insertions(+), 602 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index dfebc27e..89164b93 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2014-02-27 Arnold D. Robbins + + * gawktexi.in: Lots of small fixes throughout, update of + profiling output. + 2014-02-20 Arnold D. Robbins * gawktexi.in: Add a quote to the alarm clock program. diff --git a/doc/gawk.info b/doc/gawk.info index a3ab750c..eb7c52fb 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -9116,9 +9116,11 @@ File: gawk.info, Node: Switch Statement, Next: Break Statement, Prev: For Sta 7.4.5 The `switch' Statement ---------------------------- -The `switch' statement allows the evaluation of an expression and the -execution of statements based on a `case' match. Case statements are -checked for a match in the order they are defined. If no suitable +This minor node describes a `gawk'-specific feature. + + The `switch' statement allows the evaluation of an expression and +the execution of statements based on a `case' match. Case statements +are checked for a match in the order they are defined. If no suitable `case' is found, the `default' section is executed, if supplied. Each `case' contains a single constant, be it numeric, string, or @@ -11969,10 +11971,10 @@ parameters are enclosed in square brackets ([ ]): function--`gawk' also buffers its output and the `fflush()' function forces `gawk' to flush its buffers. - `fflush()' was added to Brian Kernighan's version of `awk' in 1994. - For over two decades, it was not part of the POSIX standard. As - of December, 2012, it was accepted for inclusion into the POSIX - standard. See the Austin Group website + `fflush()' was added to Brian Kernighan's version of `awk' in + April of 1992. For two decades, it was not part of the POSIX + standard. As of December, 2012, it was accepted for inclusion + into the POSIX standard. See the Austin Group website (http://austingroupbugs.net/view.php?id=634). POSIX standardizes `fflush()' as follows: If there is no argument, @@ -12689,7 +12691,7 @@ 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 built-in variables (*note Built-in Variables::. Not all versions of `awk' enforce this -restriction. +restriction.) The BODY-OF-FUNCTION consists of `awk' statements. It is the most important part of the definition, because it says what the function @@ -12732,8 +12734,8 @@ function. When this happens, we say the function is "recursive". The act of a function calling itself is called "recursion". All the built-in functions return a value to their caller. -User-defined functions can do also, using the `return' statement, which -is described in detail in *note Return Statement::. Many of the +User-defined functions can do so also, using the `return' statement, +which is described in detail in *note Return Statement::. Many of the subsequent examples in this minor node use the `return' statement. In many `awk' implementations, including `gawk', the keyword @@ -12803,7 +12805,8 @@ 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'. (This guarantees portability. The use of `delete ARRAY' to delete the -contents of an entire array is a nonstandard extension.) +contents of an entire array is a 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. @@ -12843,13 +12846,19 @@ an `awk' version of `ctime()': return strftime(format, ts) } + ---------- Footnotes ---------- + + (1) Late in 2012. +  File: gawk.info, Node: Function Caveats, Next: Return Statement, Prev: Function Example, Up: User-defined 9.2.3 Calling User-Defined Functions ------------------------------------ -This section describes how to call a user-defined function. +"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 +the function. * Menu: @@ -12863,16 +12872,12 @@ File: gawk.info, Node: Calling A Function, Next: Variable Scope, Up: Function 9.2.3.1 Writing A Function Call ............................... -"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 -the function. - - A function call consists of the function name followed by the -arguments in parentheses. `awk' expressions are what you write in the -call for the arguments. Each time the call is executed, these -expressions are evaluated, and the values become the actual arguments. -For example, here is a call to `foo()' with three arguments (the first -being a string concatenation): +A function call consists of the function name followed by the arguments +in parentheses. `awk' expressions are what you write in the call for +the arguments. Each time the call is executed, these expressions are +evaluated, and the values become the actual arguments. For example, +here is a call to `foo()' with three arguments (the first being a +string concatenation): foo(x y, "lose", 4 * z) @@ -13267,7 +13272,7 @@ and then a closing right parenthesis, with the addition of a leading `@' character: the_func = "sum" - result = @the_func() # calls the `sum' function + result = @the_func() # calls the sum() function Here is a full program that processes the previously shown data, using indirect function calls. @@ -13418,8 +13423,8 @@ order. Next comes a sorting function. It is parameterized with the starting and ending field numbers and the comparison function. It -builds an array with the data and calls `quicksort' appropriately, and -then formats the results as a single string: +builds an array with the data and calls `quicksort()' appropriately, +and then formats the results as a single string: # do_sort --- sort the data according to `compare' # and return it as a string @@ -13619,7 +13624,7 @@ will be accidentally shared with the user's program. In addition, several of the library functions use a prefix that helps indicate what function or set of functions use the variables--for -example, `_pw_byname' in the user database routines (*note Passwd +example, `_pw_byname()' in the user database routines (*note Passwd Functions::). This convention is recommended, since it even further decreases the chance of inadvertent conflict among variable names. Note that this convention is used equally well for variable names and @@ -13870,9 +13875,9 @@ File: gawk.info, Node: Round Function, Next: Cliff Random Function, Prev: Ass The way `printf' and `sprintf()' (*note Printf::) perform rounding often depends upon the system's C `sprintf()' subroutine. On many -machines, `sprintf()' rounding is "unbiased," which means it doesn't -always round a trailing `.5' up, contrary to naive expectations. In -unbiased rounding, `.5' rounds to even, rather than always up, so 1.5 +machines, `sprintf()' rounding is "unbiased", which means it doesn't +always round a trailing .5 up, contrary to naive expectations. In +unbiased rounding, .5 rounds to even, rather than always up, so 1.5 rounds to 2 but 4.5 rounds to 4. This means that if you are using a format that does rounding (e.g., `"%.0f"'), you should check what your system does. The following function does traditional rounding; it @@ -13906,7 +13911,7 @@ might be useful if your `awk''s `printf' does unbiased rounding: } # test harness - { print $0, round($0) } + # { print $0, round($0) }  File: gawk.info, Node: Cliff Random Function, Next: Ordinal Functions, Prev: Round Function, Up: General Functions @@ -13982,8 +13987,8 @@ corresponding character. Both functions are written very nicely in } } - Some explanation of the numbers used by `chr()' is worthwhile. The -most prominent character set in use today is ASCII.(1) Although an + Some explanation of the numbers used by `_ord_init()' is worthwhile. +The most prominent character set in use today is ASCII.(1) Although an 8-bit byte can hold 256 distinct values (from 0 to 255), ASCII only defines characters that use the values from 0 to 127.(2) In the now distant past, at least one minicomputer manufacturer used ASCII, but @@ -14033,7 +14038,7 @@ tests such as used here prohibitively expensive. (2) ASCII has been extended in many countries to use the values from 128 to 255 for country-specific characters. If your system uses these -extensions, you can simplify `_ord_init' to loop from 0 to 255. +extensions, you can simplify `_ord_init()' to loop from 0 to 255.  File: gawk.info, Node: Join Function, Next: Getlocaltime Function, Prev: Ordinal Functions, Up: General Functions @@ -14474,7 +14479,7 @@ File: gawk.info, Node: Ignoring Assigns, Prev: Empty Files, Up: Data File Man Occasionally, you might not want `awk' to process command-line variable assignments (*note Assignment Options::). In particular, if you have a -file name that contain an `=' character, `awk' treats the file name as +file name that contains an `=' character, `awk' treats the file name as an assignment, and does not process it. Some users have suggested an additional command-line option for @@ -14970,7 +14975,7 @@ later. The test can only be true for `gawk'. It is false if using `FS' or `FPAT', or on some other `awk' implementation. The code that checks for using `FPAT', using `using_fpat' and -`PROCINFO["FS"]' is similar. +`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 @@ -14990,9 +14995,9 @@ create the element with the null string as its value: return _pw_byname[name] } - Similarly, the `getpwuid' function takes a user ID number argument. -If that user number is in the database, it returns the appropriate -line. Otherwise, it returns the null string: + Similarly, the `getpwuid()' function takes a user ID number +argument. If that user number is in the database, it returns the +appropriate line. Otherwise, it returns the null string: function getpwuid(uid) { @@ -15339,8 +15344,8 @@ index and value, use the indirect function call syntax (*note Indirect Calls::) on `process', passing it the index and the value. When calling `walk_array()', you would pass the name of a -user-defined function that expects to receive and index and a value, -and then processes the element. +user-defined function that expects to receive an index and a value, and +then processes the element.  File: gawk.info, Node: Sample Programs, Next: Advanced Features, Prev: Library Functions, Up: Top @@ -15601,7 +15606,7 @@ fields to print are `$1', `$3', and `$5'. The intermediate fields are the fields to print, and `t' tracks the complete field list, including filler fields: - function set_charlist( field, i, j, f, g, t, + function set_charlist( field, i, j, f, g, n, m, t, filler, last, len) { field = 1 # count total fields @@ -18527,7 +18532,8 @@ regular pipes. ---------- Footnotes ---------- - (1) This is very different from the same operator in the C shell. + (1) This is very different from the same operator in the C shell and +in Bash.  File: gawk.info, Node: TCP/IP Networking, Next: Profiling, Prev: Two-way I/O, Up: Advanced Features @@ -18665,56 +18671,64 @@ 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 have to work late): +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 Sun Aug 13 00:00:15 2000 + # gawk profile, created Thu Feb 27 05:16:21 2014 - # BEGIN block(s) + # BEGIN block(s) - BEGIN { - 1 print "First BEGIN rule" - 1 print "Second BEGIN rule" - } + BEGIN { + 1 print "First BEGIN rule" + } - # Rule(s) + BEGIN { + 1 print "Second BEGIN rule" + } - 5 /foo/ { # 2 - 2 print "matched /foo/, gosh" - 6 for (i = 1; i <= 3; i++) { - 6 sing() - } - } + # Rule(s) - 5 { - 5 if (/foo/) { # 2 - 2 print "if is true" - 3 } else { - 3 print "else is true" - } - } + 5 /foo/ { # 2 + 2 print "matched /foo/, gosh" + 6 for (i = 1; i <= 3; i++) { + 6 sing() + } + } - # END block(s) + 5 { + 5 if (/foo/) { # 2 + 2 print "if is true" + 3 } else { + 3 print "else is true" + } + } - END { - 1 print "First END rule" - 1 print "Second END rule" - } + # END block(s) - # Functions, listed alphabetically + END { + 1 print "First END rule" + } - 6 function sing(dummy) - { - 6 print "I gotta be me!" - } + END { + 1 print "Second END rule" + } + + + # Functions, listed alphabetically + + 6 function sing(dummy) + { + 6 print "I gotta be me!" + } This example illustrates many of the basic features of profiling output. They are as follows: - * The program is printed in the order `BEGIN' rule, `BEGINFILE' rule, - pattern/action rules, `ENDFILE' rule, `END' rule and functions, - listed alphabetically. Multiple `BEGIN' and `END' rules are - merged together, as are multiple `BEGINFILE' and `ENDFILE' rules. + * The program is printed in the order `BEGIN' rules, `BEGINFILE' + 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. * Pattern-action rules have two counts. The first count, to the left of the rule, shows how many times the rule's pattern was @@ -18765,8 +18779,7 @@ you typed when you wrote it. This is because `gawk' creates the profiled version by "pretty printing" its internal representation of the program. The advantage to this is that `gawk' can produce a standard representation. The disadvantage is that all source-code -comments are lost, as are the distinctions among multiple `BEGIN', -`END', `BEGINFILE', and `ENDFILE' rules. Also, things such as: +comments are lost. Also, things such as: /foo/ @@ -18825,6 +18838,9 @@ by the `Ctrl-<\>' key. called this way, `gawk' "pretty prints" the program into `awkprof.out', without any execution counts. + NOTE: The `--pretty-print' option still runs your program. This + will change in the next major release. +  File: gawk.info, Node: Internationalization, Next: Debugger, Prev: Advanced Features, Up: Top @@ -25672,7 +25688,7 @@ as working in this fashion, and in particular, would teach that the `[A-Z]' was the "correct" way to match uppercase letters. And indeed, this was true.(1) - The 1993 POSIX standard introduced the idea of locales (*note + The 1992 POSIX standard introduced the idea of locales (*note Locales::). Since many locales include other letters besides the plain twenty-six letters of the American English alphabet, the POSIX standard added character classes (*note Bracket Expressions::) as a way to match @@ -29975,7 +29991,7 @@ Index * ' (single quote): One-shot. (line 15) * ' (single quote), vs. apostrophe: Comments. (line 27) * ' (single quote), with double quotes: Quoting. (line 53) -* () (parentheses) <1>: Profiling. (line 138) +* () (parentheses) <1>: Profiling. (line 146) * () (parentheses): Regexp Operators. (line 79) * * (asterisk), * operator, as multiplication operator: Precedence. (line 55) @@ -30481,7 +30497,7 @@ Index * Boolean expressions, as patterns: Expression Patterns. (line 41) * Boolean operators, See Boolean expressions: Boolean Ops. (line 6) * Bourne shell, quoting rules for: Quoting. (line 18) -* braces ({}): Profiling. (line 134) +* braces ({}): Profiling. (line 142) * braces ({}), actions and: Action Overview. (line 19) * braces ({}), statements, grouping: Statements. (line 10) * bracket expressions <1>: Bracket Expressions. (line 6) @@ -30688,7 +30704,7 @@ Index * csh utility: Statements/Lines. (line 44) * csh utility, POSIXLY_CORRECT environment variable: Options. (line 348) * csh utility, |& operator, comparison with: Two-way I/O. (line 44) -* ctime() user-defined function: Function Example. (line 72) +* ctime() user-defined function: Function Example. (line 73) * currency symbols, localization: Explaining gettext. (line 103) * custom.h file: Configuration Philosophy. (line 30) @@ -31288,8 +31304,8 @@ Index * functions, undefined: Pass By Value/Reference. (line 71) * functions, user-defined: User-defined. (line 6) -* functions, user-defined, calling: Calling A Function. (line 6) -* functions, user-defined, counts: Profiling. (line 129) +* functions, user-defined, calling: Function Caveats. (line 6) +* functions, user-defined, counts: Profiling. (line 137) * functions, user-defined, library of: Library Functions. (line 6) * functions, user-defined, next/nextfile statements and <1>: Nextfile Statement. (line 47) @@ -31297,7 +31313,7 @@ Index (line 45) * G-d: Acknowledgments. (line 78) * Garfinkle, Scott: Contributors. (line 34) -* gawk program, dynamic profiling: Profiling. (line 172) +* gawk program, dynamic profiling: Profiling. (line 179) * gawk, ARGIND variable in: Other Arguments. (line 12) * gawk, awk and <1>: This Manual. (line 14) * gawk, awk and: Preface. (line 23) @@ -31480,7 +31496,7 @@ Index * hexadecimal values, enabling interpretation of: Options. (line 207) * histsort.awk program: History Sorting. (line 25) * Hughes, Phil: Acknowledgments. (line 43) -* HUP signal: Profiling. (line 204) +* HUP signal: Profiling. (line 211) * hyphen (-), - operator: Precedence. (line 52) * hyphen (-), -- operator <1>: Precedence. (line 46) * hyphen (-), -- operator: Increment Ops. (line 48) @@ -31556,7 +31572,7 @@ Index * insomnia, cure for: Alarm Program. (line 6) * installation, VMS: VMS Installation. (line 6) * installing gawk: Installation. (line 6) -* INT signal (MS-Windows): Profiling. (line 207) +* INT signal (MS-Windows): Profiling. (line 214) * int() function: Numeric Functions. (line 23) * integer, arbitrary precision: Arbitrary Precision Integers. (line 6) @@ -31603,11 +31619,12 @@ Index * Kernighan, Brian <2>: Other Versions. (line 13) * Kernighan, Brian <3>: Contributors. (line 11) * Kernighan, Brian <4>: BTL. (line 6) -* Kernighan, Brian <5>: Concatenation. (line 6) -* Kernighan, Brian <6>: Acknowledgments. (line 72) -* Kernighan, Brian <7>: Conventions. (line 34) +* Kernighan, Brian <5>: Library Functions. (line 12) +* Kernighan, Brian <6>: Concatenation. (line 6) +* Kernighan, Brian <7>: Acknowledgments. (line 72) +* Kernighan, Brian <8>: Conventions. (line 34) * Kernighan, Brian: History. (line 17) -* kill command, dynamic profiling: Profiling. (line 181) +* kill command, dynamic profiling: Profiling. (line 188) * Knights, jedi: Undocumented. (line 6) * Knuth, Donald: Arbitrary Precision Arithmetic. (line 6) @@ -31704,7 +31721,7 @@ Index * long options: Command Line. (line 13) * loops: While Statement. (line 6) * loops, continue statements and: For Statement. (line 64) -* loops, count for header: Profiling. (line 123) +* loops, count for header: Profiling. (line 131) * loops, exiting: Break Statement. (line 6) * loops, See Also while statement: While Statement. (line 6) * ls utility: More Complex. (line 15) @@ -31912,14 +31929,14 @@ Index * p debugger command (alias for print): Viewing And Changing Data. (line 36) * P1003.1 POSIX standard: Glossary. (line 462) -* parentheses () <1>: Profiling. (line 138) +* parentheses () <1>: Profiling. (line 146) * parentheses (): Regexp Operators. (line 79) * password file: Passwd Functions. (line 16) * patsplit() function (gawk): String Functions. (line 290) * patterns: Patterns and Actions. (line 6) * patterns, comparison expressions as: Expression Patterns. (line 14) -* patterns, counts: Profiling. (line 110) +* patterns, counts: Profiling. (line 118) * patterns, default: Very Simple. (line 34) * patterns, empty: Empty. (line 6) * patterns, expressions as: Regexp Patterns. (line 6) @@ -31944,6 +31961,7 @@ Index * pipes, output: Redirection. (line 57) * Pitts, Dave <1>: Bugs. (line 73) * Pitts, Dave: Acknowledgments. (line 60) +* Plauger, P.J.: Library Functions. (line 12) * plus sign (+): Regexp Operators. (line 102) * plus sign (+), + operator: Precedence. (line 52) * plus sign (+), ++ operator <1>: Precedence. (line 46) @@ -32080,7 +32098,7 @@ Index * PROCINFO array <6>: Auto-set. (line 133) * PROCINFO array: Obsolete. (line 11) * profiling awk programs: Profiling. (line 6) -* profiling awk programs, dynamically: Profiling. (line 172) +* profiling awk programs, dynamically: Profiling. (line 179) * program, definition of: Getting Started. (line 21) * programmers, attractiveness of: Two-way I/O. (line 6) * programming conventions, --non-decimal-data option: Nondecimal Data. @@ -32116,7 +32134,7 @@ Index * QuikTrim Awk: Other Versions. (line 134) * quit debugger command: Miscellaneous Debugger Commands. (line 99) -* QUIT signal (MS-Windows): Profiling. (line 207) +* QUIT signal (MS-Windows): Profiling. (line 214) * quoting <1>: Comments. (line 27) * quoting <2>: Long. (line 26) * quoting: Read Terminal. (line 25) @@ -32215,7 +32233,7 @@ Index * return statement, user-defined functions: Return Statement. (line 6) * return value, close() function: Close Files And Pipes. (line 130) -* rev() user-defined function: Function Example. (line 52) +* rev() user-defined function: Function Example. (line 53) * revoutput extension: Extension Sample Revout. (line 11) * revtwoway extension: Extension Sample Rev2way. @@ -32368,14 +32386,14 @@ Index (line 56) * sidebar, Using close()'s Return Value: Close Files And Pipes. (line 128) -* SIGHUP signal: Profiling. (line 204) -* SIGINT signal (MS-Windows): Profiling. (line 207) -* signals, HUP/SIGHUP: Profiling. (line 204) -* signals, INT/SIGINT (MS-Windows): Profiling. (line 207) -* signals, QUIT/SIGQUIT (MS-Windows): Profiling. (line 207) -* signals, USR1/SIGUSR1: Profiling. (line 181) -* SIGQUIT signal (MS-Windows): Profiling. (line 207) -* SIGUSR1 signal: Profiling. (line 181) +* SIGHUP signal: Profiling. (line 211) +* SIGINT signal (MS-Windows): Profiling. (line 214) +* signals, HUP/SIGHUP: Profiling. (line 211) +* signals, INT/SIGINT (MS-Windows): Profiling. (line 214) +* signals, QUIT/SIGQUIT (MS-Windows): Profiling. (line 214) +* signals, USR1/SIGUSR1: Profiling. (line 188) +* SIGQUIT signal (MS-Windows): Profiling. (line 214) +* SIGUSR1 signal: Profiling. (line 188) * silent debugger command: Debugger Execution Control. (line 10) * sin() function: Numeric Functions. (line 75) @@ -32616,12 +32634,12 @@ Index * up debugger command: Execution Stack. (line 33) * user database, reading: Passwd Functions. (line 6) * user-defined, functions: User-defined. (line 6) -* user-defined, functions, counts: Profiling. (line 129) +* user-defined, functions, counts: Profiling. (line 137) * user-defined, variables: Variables. (line 6) * user-modifiable variables: User-modified. (line 6) * users, information about, printing: Id Program. (line 6) * users, information about, retrieving: Passwd Functions. (line 16) -* USR1 signal: Profiling. (line 181) +* USR1 signal: Profiling. (line 188) * values, numeric: Basic Data Typing. (line 13) * values, string: Basic Data Typing. (line 13) * variable typing: Typing and Comparison. @@ -32713,7 +32731,7 @@ Index * zero, negative vs. positive: Unexpected Results. (line 34) * zerofile.awk program: Empty Files. (line 21) * Zoulas, Christos: Contributors. (line 66) -* {} (braces): Profiling. (line 134) +* {} (braces): Profiling. (line 142) * {} (braces), actions and: Action Overview. (line 19) * {} (braces), statements, grouping: Statements. (line 10) * | (vertical bar): Regexp Operators. (line 69) @@ -32919,347 +32937,348 @@ Node: While Statement384453 Node: Do Statement386497 Node: For Statement387653 Node: Switch Statement390805 -Node: Break Statement392902 -Node: Continue Statement394892 -Node: Next Statement396685 -Node: Nextfile Statement399075 -Node: Exit Statement401718 -Node: Built-in Variables404134 -Node: User-modified405229 -Ref: User-modified-Footnote-1413587 -Node: Auto-set413649 -Ref: Auto-set-Footnote-1426727 -Ref: Auto-set-Footnote-2426932 -Node: ARGC and ARGV426988 -Node: Arrays430839 -Node: Array Basics432344 -Node: Array Intro433170 -Node: Reference to Elements437487 -Node: Assigning Elements439757 -Node: Array Example440248 -Node: Scanning an Array441980 -Node: Controlling Scanning444294 -Ref: Controlling Scanning-Footnote-1449381 -Node: Delete449697 -Ref: Delete-Footnote-1452462 -Node: Numeric Array Subscripts452519 -Node: Uninitialized Subscripts454702 -Node: Multidimensional456329 -Node: Multiscanning459422 -Node: Arrays of Arrays461011 -Node: Functions465651 -Node: Built-in466470 -Node: Calling Built-in467548 -Node: Numeric Functions469536 -Ref: Numeric Functions-Footnote-1473368 -Ref: Numeric Functions-Footnote-2473725 -Ref: Numeric Functions-Footnote-3473773 -Node: String Functions474042 -Ref: String Functions-Footnote-1496962 -Ref: String Functions-Footnote-2497091 -Ref: String Functions-Footnote-3497339 -Node: Gory Details497426 -Ref: table-sub-escapes499105 -Ref: table-sub-posix-92500459 -Ref: table-sub-proposed501810 -Ref: table-posix-sub503164 -Ref: table-gensub-escapes504709 -Ref: Gory Details-Footnote-1505885 -Ref: Gory Details-Footnote-2505936 -Node: I/O Functions506087 -Ref: I/O Functions-Footnote-1513072 -Node: Time Functions513219 -Ref: Time Functions-Footnote-1524152 -Ref: Time Functions-Footnote-2524220 -Ref: Time Functions-Footnote-3524378 -Ref: Time Functions-Footnote-4524489 -Ref: Time Functions-Footnote-5524601 -Ref: Time Functions-Footnote-6524828 -Node: Bitwise Functions525094 -Ref: table-bitwise-ops525656 -Ref: Bitwise Functions-Footnote-1529877 -Node: Type Functions530061 -Node: I18N Functions531212 -Node: User-defined532839 -Node: Definition Syntax533643 -Ref: Definition Syntax-Footnote-1538553 -Node: Function Example538622 -Node: Function Caveats541216 -Node: Calling A Function541637 -Node: Variable Scope542752 -Node: Pass By Value/Reference545715 -Node: Return Statement549223 -Node: Dynamic Typing552204 -Node: Indirect Calls553135 -Node: Library Functions562820 -Ref: Library Functions-Footnote-1566333 -Ref: Library Functions-Footnote-2566476 -Node: Library Names566647 -Ref: Library Names-Footnote-1570118 -Ref: Library Names-Footnote-2570338 -Node: General Functions570424 -Node: Strtonum Function571452 -Node: Assert Function574382 -Node: Round Function577708 -Node: Cliff Random Function579251 -Node: Ordinal Functions580267 -Ref: Ordinal Functions-Footnote-1583339 -Ref: Ordinal Functions-Footnote-2583591 -Node: Join Function583800 -Ref: Join Function-Footnote-1585571 -Node: Getlocaltime Function585771 -Node: Readfile Function589512 -Node: Data File Management591351 -Node: Filetrans Function591983 -Node: Rewind Function596052 -Node: File Checking597439 -Node: Empty Files598533 -Node: Ignoring Assigns600763 -Node: Getopt Function602316 -Ref: Getopt Function-Footnote-1613619 -Node: Passwd Functions613822 -Ref: Passwd Functions-Footnote-1622797 -Node: Group Functions622885 -Node: Walking Arrays630969 -Node: Sample Programs633106 -Node: Running Examples633780 -Node: Clones634508 -Node: Cut Program635732 -Node: Egrep Program645577 -Ref: Egrep Program-Footnote-1653350 -Node: Id Program653460 -Node: Split Program657076 -Ref: Split Program-Footnote-1660595 -Node: Tee Program660723 -Node: Uniq Program663526 -Node: Wc Program670955 -Ref: Wc Program-Footnote-1675221 -Ref: Wc Program-Footnote-2675421 -Node: Miscellaneous Programs675513 -Node: Dupword Program676701 -Node: Alarm Program678732 -Node: Translate Program683539 -Ref: Translate Program-Footnote-1687926 -Ref: Translate Program-Footnote-2688174 -Node: Labels Program688308 -Ref: Labels Program-Footnote-1691679 -Node: Word Sorting691763 -Node: History Sorting695647 -Node: Extract Program697486 -Ref: Extract Program-Footnote-1704989 -Node: Simple Sed705117 -Node: Igawk Program708179 -Ref: Igawk Program-Footnote-1723336 -Ref: Igawk Program-Footnote-2723537 -Node: Anagram Program723675 -Node: Signature Program726743 -Node: Advanced Features727843 -Node: Nondecimal Data729729 -Node: Array Sorting731312 -Node: Controlling Array Traversal732009 -Node: Array Sorting Functions740293 -Ref: Array Sorting Functions-Footnote-1744162 -Node: Two-way I/O744356 -Ref: Two-way I/O-Footnote-1749788 -Node: TCP/IP Networking749858 -Node: Profiling752702 -Node: Internationalization760199 -Node: I18N and L10N761624 -Node: Explaining gettext762310 -Ref: Explaining gettext-Footnote-1767378 -Ref: Explaining gettext-Footnote-2767562 -Node: Programmer i18n767727 -Node: Translator i18n771929 -Node: String Extraction772722 -Ref: String Extraction-Footnote-1773683 -Node: Printf Ordering773769 -Ref: Printf Ordering-Footnote-1776553 -Node: I18N Portability776617 -Ref: I18N Portability-Footnote-1779066 -Node: I18N Example779129 -Ref: I18N Example-Footnote-1781767 -Node: Gawk I18N781839 -Node: Debugger782460 -Node: Debugging783431 -Node: Debugging Concepts783864 -Node: Debugging Terms785720 -Node: Awk Debugging788317 -Node: Sample Debugging Session789209 -Node: Debugger Invocation789729 -Node: Finding The Bug791061 -Node: List of Debugger Commands797549 -Node: Breakpoint Control798883 -Node: Debugger Execution Control802547 -Node: Viewing And Changing Data805907 -Node: Execution Stack809263 -Node: Debugger Info810730 -Node: Miscellaneous Debugger Commands814712 -Node: Readline Support819888 -Node: Limitations820719 -Node: Arbitrary Precision Arithmetic822971 -Ref: Arbitrary Precision Arithmetic-Footnote-1824620 -Node: General Arithmetic824768 -Node: Floating Point Issues826488 -Node: String Conversion Precision827369 -Ref: String Conversion Precision-Footnote-1829074 -Node: Unexpected Results829183 -Node: POSIX Floating Point Problems831336 -Ref: POSIX Floating Point Problems-Footnote-1835161 -Node: Integer Programming835199 -Node: Floating-point Programming836938 -Ref: Floating-point Programming-Footnote-1843269 -Ref: Floating-point Programming-Footnote-2843539 -Node: Floating-point Representation843803 -Node: Floating-point Context844968 -Ref: table-ieee-formats845807 -Node: Rounding Mode847191 -Ref: table-rounding-modes847670 -Ref: Rounding Mode-Footnote-1850685 -Node: Gawk and MPFR850864 -Node: Arbitrary Precision Floats852119 -Ref: Arbitrary Precision Floats-Footnote-1854562 -Node: Setting Precision854878 -Ref: table-predefined-precision-strings855564 -Node: Setting Rounding Mode857709 -Ref: table-gawk-rounding-modes858113 -Node: Floating-point Constants859300 -Node: Changing Precision860729 -Ref: Changing Precision-Footnote-1862126 -Node: Exact Arithmetic862300 -Node: Arbitrary Precision Integers865438 -Ref: Arbitrary Precision Integers-Footnote-1868456 -Node: Dynamic Extensions868603 -Node: Extension Intro870061 -Node: Plugin License871326 -Node: Extension Mechanism Outline872011 -Ref: load-extension872428 -Ref: load-new-function873906 -Ref: call-new-function874901 -Node: Extension API Description876916 -Node: Extension API Functions Introduction878129 -Node: General Data Types882995 -Ref: General Data Types-Footnote-1888597 -Node: Requesting Values888896 -Ref: table-value-types-returned889627 -Node: Constructor Functions890581 -Node: Registration Functions893601 -Node: Extension Functions894286 -Node: Exit Callback Functions896511 -Node: Extension Version String897760 -Node: Input Parsers898410 -Node: Output Wrappers908167 -Node: Two-way processors912677 -Node: Printing Messages914885 -Ref: Printing Messages-Footnote-1915962 -Node: Updating `ERRNO'916114 -Node: Accessing Parameters916853 -Node: Symbol Table Access918083 -Node: Symbol table by name918595 -Node: Symbol table by cookie920342 -Ref: Symbol table by cookie-Footnote-1924472 -Node: Cached values924535 -Ref: Cached values-Footnote-1927984 -Node: Array Manipulation928075 -Ref: Array Manipulation-Footnote-1929173 -Node: Array Data Types929212 -Ref: Array Data Types-Footnote-1931915 -Node: Array Functions932007 -Node: Flattening Arrays935773 -Node: Creating Arrays942625 -Node: Extension API Variables947350 -Node: Extension Versioning947986 -Node: Extension API Informational Variables949887 -Node: Extension API Boilerplate950973 -Node: Finding Extensions954777 -Node: Extension Example955337 -Node: Internal File Description956067 -Node: Internal File Ops960158 -Ref: Internal File Ops-Footnote-1971666 -Node: Using Internal File Ops971806 -Ref: Using Internal File Ops-Footnote-1974159 -Node: Extension Samples974425 -Node: Extension Sample File Functions975949 -Node: Extension Sample Fnmatch984434 -Node: Extension Sample Fork986160 -Node: Extension Sample Inplace987378 -Node: Extension Sample Ord989156 -Node: Extension Sample Readdir989992 -Node: Extension Sample Revout991524 -Node: Extension Sample Rev2way992117 -Node: Extension Sample Read write array992807 -Node: Extension Sample Readfile994690 -Node: Extension Sample API Tests995508 -Node: Extension Sample Time996033 -Node: gawkextlib997397 -Node: Language History1000178 -Node: V7/SVR3.11001771 -Node: SVR41004091 -Node: POSIX1005533 -Node: BTL1006919 -Node: POSIX/GNU1007653 -Node: Feature History1013252 -Node: Common Extensions1026216 -Node: Ranges and Locales1027528 -Ref: Ranges and Locales-Footnote-11032146 -Ref: Ranges and Locales-Footnote-21032173 -Ref: Ranges and Locales-Footnote-31032433 -Node: Contributors1032654 -Node: Installation1037799 -Node: Gawk Distribution1038693 -Node: Getting1039177 -Node: Extracting1040003 -Node: Distribution contents1041695 -Node: Unix Installation1047400 -Node: Quick Installation1048017 -Node: Additional Configuration Options1050461 -Node: Configuration Philosophy1052197 -Node: Non-Unix Installation1054551 -Node: PC Installation1055009 -Node: PC Binary Installation1056308 -Node: PC Compiling1058156 -Node: PC Testing1061100 -Node: PC Using1062276 -Node: Cygwin1066461 -Node: MSYS1067461 -Node: VMS Installation1067975 -Node: VMS Compilation1068739 -Ref: VMS Compilation-Footnote-11070354 -Node: VMS Dynamic Extensions1070412 -Node: VMS Installation Details1071785 -Node: VMS Running1074032 -Node: VMS GNV1076866 -Node: VMS Old Gawk1077589 -Node: Bugs1078059 -Node: Other Versions1081977 -Node: Notes1088061 -Node: Compatibility Mode1088861 -Node: Additions1089644 -Node: Accessing The Source1090571 -Node: Adding Code1092011 -Node: New Ports1098056 -Node: Derived Files1102191 -Ref: Derived Files-Footnote-11107512 -Ref: Derived Files-Footnote-21107546 -Ref: Derived Files-Footnote-31108146 -Node: Future Extensions1108244 -Node: Implementation Limitations1108827 -Node: Extension Design1110079 -Node: Old Extension Problems1111233 -Ref: Old Extension Problems-Footnote-11112741 -Node: Extension New Mechanism Goals1112798 -Ref: Extension New Mechanism Goals-Footnote-11116163 -Node: Extension Other Design Decisions1116349 -Node: Extension Future Growth1118455 -Node: Old Extension Mechanism1119291 -Node: Basic Concepts1121031 -Node: Basic High Level1121712 -Ref: figure-general-flow1121983 -Ref: figure-process-flow1122582 -Ref: Basic High Level-Footnote-11125811 -Node: Basic Data Typing1125996 -Node: Glossary1129351 -Node: Copying1154813 -Node: GNU Free Documentation License1192370 -Node: Index1217507 +Node: Break Statement392959 +Node: Continue Statement394949 +Node: Next Statement396742 +Node: Nextfile Statement399132 +Node: Exit Statement401775 +Node: Built-in Variables404191 +Node: User-modified405286 +Ref: User-modified-Footnote-1413644 +Node: Auto-set413706 +Ref: Auto-set-Footnote-1426784 +Ref: Auto-set-Footnote-2426989 +Node: ARGC and ARGV427045 +Node: Arrays430896 +Node: Array Basics432401 +Node: Array Intro433227 +Node: Reference to Elements437544 +Node: Assigning Elements439814 +Node: Array Example440305 +Node: Scanning an Array442037 +Node: Controlling Scanning444351 +Ref: Controlling Scanning-Footnote-1449438 +Node: Delete449754 +Ref: Delete-Footnote-1452519 +Node: Numeric Array Subscripts452576 +Node: Uninitialized Subscripts454759 +Node: Multidimensional456386 +Node: Multiscanning459479 +Node: Arrays of Arrays461068 +Node: Functions465708 +Node: Built-in466527 +Node: Calling Built-in467605 +Node: Numeric Functions469593 +Ref: Numeric Functions-Footnote-1473425 +Ref: Numeric Functions-Footnote-2473782 +Ref: Numeric Functions-Footnote-3473830 +Node: String Functions474099 +Ref: String Functions-Footnote-1497019 +Ref: String Functions-Footnote-2497148 +Ref: String Functions-Footnote-3497396 +Node: Gory Details497483 +Ref: table-sub-escapes499162 +Ref: table-sub-posix-92500516 +Ref: table-sub-proposed501867 +Ref: table-posix-sub503221 +Ref: table-gensub-escapes504766 +Ref: Gory Details-Footnote-1505942 +Ref: Gory Details-Footnote-2505993 +Node: I/O Functions506144 +Ref: I/O Functions-Footnote-1513134 +Node: Time Functions513281 +Ref: Time Functions-Footnote-1524214 +Ref: Time Functions-Footnote-2524282 +Ref: Time Functions-Footnote-3524440 +Ref: Time Functions-Footnote-4524551 +Ref: Time Functions-Footnote-5524663 +Ref: Time Functions-Footnote-6524890 +Node: Bitwise Functions525156 +Ref: table-bitwise-ops525718 +Ref: Bitwise Functions-Footnote-1529939 +Node: Type Functions530123 +Node: I18N Functions531274 +Node: User-defined532901 +Node: Definition Syntax533705 +Ref: Definition Syntax-Footnote-1538619 +Node: Function Example538688 +Ref: Function Example-Footnote-1541337 +Node: Function Caveats541359 +Node: Calling A Function541877 +Node: Variable Scope542832 +Node: Pass By Value/Reference545795 +Node: Return Statement549303 +Node: Dynamic Typing552284 +Node: Indirect Calls553215 +Node: Library Functions562902 +Ref: Library Functions-Footnote-1566415 +Ref: Library Functions-Footnote-2566558 +Node: Library Names566729 +Ref: Library Names-Footnote-1570202 +Ref: Library Names-Footnote-2570422 +Node: General Functions570508 +Node: Strtonum Function571536 +Node: Assert Function574466 +Node: Round Function577792 +Node: Cliff Random Function579333 +Node: Ordinal Functions580349 +Ref: Ordinal Functions-Footnote-1583426 +Ref: Ordinal Functions-Footnote-2583678 +Node: Join Function583889 +Ref: Join Function-Footnote-1585660 +Node: Getlocaltime Function585860 +Node: Readfile Function589601 +Node: Data File Management591440 +Node: Filetrans Function592072 +Node: Rewind Function596141 +Node: File Checking597528 +Node: Empty Files598622 +Node: Ignoring Assigns600852 +Node: Getopt Function602406 +Ref: Getopt Function-Footnote-1613709 +Node: Passwd Functions613912 +Ref: Passwd Functions-Footnote-1622890 +Node: Group Functions622978 +Node: Walking Arrays631062 +Node: Sample Programs633198 +Node: Running Examples633872 +Node: Clones634600 +Node: Cut Program635824 +Node: Egrep Program645675 +Ref: Egrep Program-Footnote-1653448 +Node: Id Program653558 +Node: Split Program657174 +Ref: Split Program-Footnote-1660693 +Node: Tee Program660821 +Node: Uniq Program663624 +Node: Wc Program671053 +Ref: Wc Program-Footnote-1675319 +Ref: Wc Program-Footnote-2675519 +Node: Miscellaneous Programs675611 +Node: Dupword Program676799 +Node: Alarm Program678830 +Node: Translate Program683637 +Ref: Translate Program-Footnote-1688024 +Ref: Translate Program-Footnote-2688272 +Node: Labels Program688406 +Ref: Labels Program-Footnote-1691777 +Node: Word Sorting691861 +Node: History Sorting695745 +Node: Extract Program697584 +Ref: Extract Program-Footnote-1705087 +Node: Simple Sed705215 +Node: Igawk Program708277 +Ref: Igawk Program-Footnote-1723434 +Ref: Igawk Program-Footnote-2723635 +Node: Anagram Program723773 +Node: Signature Program726841 +Node: Advanced Features727941 +Node: Nondecimal Data729827 +Node: Array Sorting731410 +Node: Controlling Array Traversal732107 +Node: Array Sorting Functions740391 +Ref: Array Sorting Functions-Footnote-1744260 +Node: Two-way I/O744454 +Ref: Two-way I/O-Footnote-1749886 +Node: TCP/IP Networking749968 +Node: Profiling752812 +Node: Internationalization760315 +Node: I18N and L10N761740 +Node: Explaining gettext762426 +Ref: Explaining gettext-Footnote-1767494 +Ref: Explaining gettext-Footnote-2767678 +Node: Programmer i18n767843 +Node: Translator i18n772045 +Node: String Extraction772838 +Ref: String Extraction-Footnote-1773799 +Node: Printf Ordering773885 +Ref: Printf Ordering-Footnote-1776669 +Node: I18N Portability776733 +Ref: I18N Portability-Footnote-1779182 +Node: I18N Example779245 +Ref: I18N Example-Footnote-1781883 +Node: Gawk I18N781955 +Node: Debugger782576 +Node: Debugging783547 +Node: Debugging Concepts783980 +Node: Debugging Terms785836 +Node: Awk Debugging788433 +Node: Sample Debugging Session789325 +Node: Debugger Invocation789845 +Node: Finding The Bug791177 +Node: List of Debugger Commands797665 +Node: Breakpoint Control798999 +Node: Debugger Execution Control802663 +Node: Viewing And Changing Data806023 +Node: Execution Stack809379 +Node: Debugger Info810846 +Node: Miscellaneous Debugger Commands814828 +Node: Readline Support820004 +Node: Limitations820835 +Node: Arbitrary Precision Arithmetic823087 +Ref: Arbitrary Precision Arithmetic-Footnote-1824736 +Node: General Arithmetic824884 +Node: Floating Point Issues826604 +Node: String Conversion Precision827485 +Ref: String Conversion Precision-Footnote-1829190 +Node: Unexpected Results829299 +Node: POSIX Floating Point Problems831452 +Ref: POSIX Floating Point Problems-Footnote-1835277 +Node: Integer Programming835315 +Node: Floating-point Programming837054 +Ref: Floating-point Programming-Footnote-1843385 +Ref: Floating-point Programming-Footnote-2843655 +Node: Floating-point Representation843919 +Node: Floating-point Context845084 +Ref: table-ieee-formats845923 +Node: Rounding Mode847307 +Ref: table-rounding-modes847786 +Ref: Rounding Mode-Footnote-1850801 +Node: Gawk and MPFR850980 +Node: Arbitrary Precision Floats852235 +Ref: Arbitrary Precision Floats-Footnote-1854678 +Node: Setting Precision854994 +Ref: table-predefined-precision-strings855680 +Node: Setting Rounding Mode857825 +Ref: table-gawk-rounding-modes858229 +Node: Floating-point Constants859416 +Node: Changing Precision860845 +Ref: Changing Precision-Footnote-1862242 +Node: Exact Arithmetic862416 +Node: Arbitrary Precision Integers865554 +Ref: Arbitrary Precision Integers-Footnote-1868572 +Node: Dynamic Extensions868719 +Node: Extension Intro870177 +Node: Plugin License871442 +Node: Extension Mechanism Outline872127 +Ref: load-extension872544 +Ref: load-new-function874022 +Ref: call-new-function875017 +Node: Extension API Description877032 +Node: Extension API Functions Introduction878245 +Node: General Data Types883111 +Ref: General Data Types-Footnote-1888713 +Node: Requesting Values889012 +Ref: table-value-types-returned889743 +Node: Constructor Functions890697 +Node: Registration Functions893717 +Node: Extension Functions894402 +Node: Exit Callback Functions896627 +Node: Extension Version String897876 +Node: Input Parsers898526 +Node: Output Wrappers908283 +Node: Two-way processors912793 +Node: Printing Messages915001 +Ref: Printing Messages-Footnote-1916078 +Node: Updating `ERRNO'916230 +Node: Accessing Parameters916969 +Node: Symbol Table Access918199 +Node: Symbol table by name918711 +Node: Symbol table by cookie920458 +Ref: Symbol table by cookie-Footnote-1924588 +Node: Cached values924651 +Ref: Cached values-Footnote-1928100 +Node: Array Manipulation928191 +Ref: Array Manipulation-Footnote-1929289 +Node: Array Data Types929328 +Ref: Array Data Types-Footnote-1932031 +Node: Array Functions932123 +Node: Flattening Arrays935889 +Node: Creating Arrays942741 +Node: Extension API Variables947466 +Node: Extension Versioning948102 +Node: Extension API Informational Variables950003 +Node: Extension API Boilerplate951089 +Node: Finding Extensions954893 +Node: Extension Example955453 +Node: Internal File Description956183 +Node: Internal File Ops960274 +Ref: Internal File Ops-Footnote-1971782 +Node: Using Internal File Ops971922 +Ref: Using Internal File Ops-Footnote-1974275 +Node: Extension Samples974541 +Node: Extension Sample File Functions976065 +Node: Extension Sample Fnmatch984550 +Node: Extension Sample Fork986276 +Node: Extension Sample Inplace987494 +Node: Extension Sample Ord989272 +Node: Extension Sample Readdir990108 +Node: Extension Sample Revout991640 +Node: Extension Sample Rev2way992233 +Node: Extension Sample Read write array992923 +Node: Extension Sample Readfile994806 +Node: Extension Sample API Tests995624 +Node: Extension Sample Time996149 +Node: gawkextlib997513 +Node: Language History1000294 +Node: V7/SVR3.11001887 +Node: SVR41004207 +Node: POSIX1005649 +Node: BTL1007035 +Node: POSIX/GNU1007769 +Node: Feature History1013368 +Node: Common Extensions1026332 +Node: Ranges and Locales1027644 +Ref: Ranges and Locales-Footnote-11032262 +Ref: Ranges and Locales-Footnote-21032289 +Ref: Ranges and Locales-Footnote-31032549 +Node: Contributors1032770 +Node: Installation1037915 +Node: Gawk Distribution1038809 +Node: Getting1039293 +Node: Extracting1040119 +Node: Distribution contents1041811 +Node: Unix Installation1047516 +Node: Quick Installation1048133 +Node: Additional Configuration Options1050577 +Node: Configuration Philosophy1052313 +Node: Non-Unix Installation1054667 +Node: PC Installation1055125 +Node: PC Binary Installation1056424 +Node: PC Compiling1058272 +Node: PC Testing1061216 +Node: PC Using1062392 +Node: Cygwin1066577 +Node: MSYS1067577 +Node: VMS Installation1068091 +Node: VMS Compilation1068855 +Ref: VMS Compilation-Footnote-11070470 +Node: VMS Dynamic Extensions1070528 +Node: VMS Installation Details1071901 +Node: VMS Running1074148 +Node: VMS GNV1076982 +Node: VMS Old Gawk1077705 +Node: Bugs1078175 +Node: Other Versions1082093 +Node: Notes1088177 +Node: Compatibility Mode1088977 +Node: Additions1089760 +Node: Accessing The Source1090687 +Node: Adding Code1092127 +Node: New Ports1098172 +Node: Derived Files1102307 +Ref: Derived Files-Footnote-11107628 +Ref: Derived Files-Footnote-21107662 +Ref: Derived Files-Footnote-31108262 +Node: Future Extensions1108360 +Node: Implementation Limitations1108943 +Node: Extension Design1110195 +Node: Old Extension Problems1111349 +Ref: Old Extension Problems-Footnote-11112857 +Node: Extension New Mechanism Goals1112914 +Ref: Extension New Mechanism Goals-Footnote-11116279 +Node: Extension Other Design Decisions1116465 +Node: Extension Future Growth1118571 +Node: Old Extension Mechanism1119407 +Node: Basic Concepts1121147 +Node: Basic High Level1121828 +Ref: figure-general-flow1122099 +Ref: figure-process-flow1122698 +Ref: Basic High Level-Footnote-11125927 +Node: Basic Data Typing1126112 +Node: Glossary1129467 +Node: Copying1154929 +Node: GNU Free Documentation License1192486 +Node: Index1217623  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 75c7b758..50496c26 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -12893,6 +12893,8 @@ for more information on this version of the @code{for} loop. @cindex @code{case} keyword @cindex @code{default} keyword +This @value{SECTION} describes a @command{gawk}-specific feature. + The @code{switch} statement allows the evaluation of an expression and the execution of statements based on a @code{case} match. Case statements are checked for a match in the order they are defined. If no suitable @@ -16745,11 +16747,10 @@ This is the purpose of the @code{fflush()} function---@command{gawk} also buffers its output and the @code{fflush()} function forces @command{gawk} to flush its buffers. -@code{fflush()} was added to Brian Kernighan's -version of @command{awk} in 1994. -For over two decades, it was not part of the POSIX standard. -As of December, 2012, it was accepted for -inclusion into the POSIX standard. +@code{fflush()} was added to Brian Kernighan's version of @command{awk} in +April of 1992. For two decades, it was not part of the POSIX standard. +As of December, 2012, it was accepted for inclusion into the POSIX +standard. See @uref{http://austingroupbugs.net/view.php?id=634, the Austin Group website}. POSIX standardizes @code{fflush()} as follows: If there @@ -17881,7 +17882,7 @@ 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 built-in variables (@pxref{Built-in Variables}. Not all versions of @command{awk} -enforce this restriction. +enforce this restriction.) The @var{body-of-function} consists of @command{awk} statements. It is the most important part of the definition, because it says what the function @@ -17928,7 +17929,7 @@ function. When this happens, we say the function is @dfn{recursive}. The act of a function calling itself is called @dfn{recursion}. All the built-in functions return a value to their caller. -User-defined functions can do also, using the @code{return} statement, +User-defined functions can do so also, using the @code{return} statement, which is described in detail in @ref{Return Statement}. Many of the subsequent examples in this @value{SECTION} use the @code{return} statement. @@ -18020,7 +18021,8 @@ Instead of having to repeat this loop everywhere that you need to clear out 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 nonstandard extension.) +the contents of an entire array is a 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. @@ -18076,7 +18078,10 @@ function ctime(ts, format) @subsection Calling User-Defined Functions @c STARTOFRANGE fudc -This section describes how to call a user-defined function. +@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 +the function. @menu * Calling A Function:: Don't use spaces. @@ -18087,11 +18092,6 @@ This section describes how to call a user-defined function. @node Calling A Function @subsubsection Writing A Function Call -@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 -the function. - A function call consists of the function name followed by the arguments in parentheses. @command{awk} expressions are what you write in the call for the arguments. Each time the call is executed, these @@ -18561,7 +18561,7 @@ character: @example the_func = "sum" -result = @@the_func() # calls the `sum' function +result = @@the_func() # calls the sum() function @end example Here is a full program that processes the previously shown data, @@ -18682,8 +18682,9 @@ We can do something similar using @command{gawk}, like this: @ignore @c file eg/lib/quicksort.awk # -# Arnold Robbins, arnold@skeeve.com, Public Domain +# Arnold Robbins, arnold@@skeeve.com, Public Domain # January 2009 + @c endfile @end ignore @@ -18756,7 +18757,7 @@ or equal to), which yields data sorted in descending order. Next comes a sorting function. It is parameterized with the starting and ending field numbers and the comparison function. It builds an array with -the data and calls @code{quicksort} appropriately, and then formats the +the data and calls @code{quicksort()} appropriately, and then formats the results as a single string: @example @@ -18894,6 +18895,8 @@ 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. +@cindex Kernighan, Brian +@cindex Plauger, P.J.@: In their seminal 1976 book, @cite{Software Tools},@footnote{Sadly, over 35 years later, many of the lessons taught by this book have yet to be learned by a vast number of practicing programmers.} Brian Kernighan @@ -19023,7 +19026,7 @@ with the user's program. @cindex underscore (@code{_}), in names of private variables In addition, several of the library functions use a prefix that helps indicate what function or set of functions use the variables---for example, -@code{_pw_byname} in the user database routines +@code{_pw_byname()} in the user database routines (@pxref{Passwd Functions}). This convention is recommended, since it even further decreases the chance of inadvertent conflict among variable names. Note that this @@ -19337,9 +19340,9 @@ with an @code{exit} statement. The way @code{printf} and @code{sprintf()} (@pxref{Printf}) perform rounding often depends upon the system's C @code{sprintf()} -subroutine. On many machines, @code{sprintf()} rounding is ``unbiased,'' -which means it doesn't always round a trailing @samp{.5} up, contrary -to naive expectations. In unbiased rounding, @samp{.5} rounds to even, +subroutine. On many machines, @code{sprintf()} rounding is @dfn{unbiased}, +which means it doesn't always round a trailing .5 up, contrary +to naive expectations. In unbiased rounding, .5 rounds to even, rather than always up, so 1.5 rounds to 2 but 4.5 rounds to 4. This means that if you are using a format that does rounding (e.g., @code{"%.0f"}), you should check what your system does. The following function does @@ -19388,7 +19391,7 @@ function round(x, ival, aval, fraction) @c don't include test harness in the file that gets installed # test harness -@{ print $0, round($0) @} +# @{ print $0, round($0) @} @end example @node Cliff Random Function @@ -19502,7 +19505,7 @@ function _ord_init( low, high, i, t) @cindex ASCII @cindex EBCDIC @cindex mark parity -Some explanation of the numbers used by @code{chr()} is worthwhile. +Some explanation of the numbers used by @code{_ord_init()} is worthwhile. The most prominent character set in use today is ASCII.@footnote{This is changing; many systems use Unicode, a very large character set that includes ASCII as a subset. On systems with full Unicode support, @@ -19513,7 +19516,7 @@ Although an defines characters that use the values from 0 to 127.@footnote{ASCII has been extended in many countries to use the values from 128 to 255 for country-specific characters. If your system uses these extensions, -you can simplify @code{_ord_init} to loop from 0 to 255.} +you can simplify @code{_ord_init()} to loop from 0 to 255.} In the now distant past, at least one minicomputer manufacturer @c Pr1me, blech @@ -20187,7 +20190,7 @@ END @{ Occasionally, you might not want @command{awk} to process command-line variable assignments (@pxref{Assignment Options}). -In particular, if you have a file name that contain an @samp{=} character, +In particular, if you have a file name that contains an @samp{=} character, @command{awk} treats the file name as an assignment, and does not process it. Some users have suggested an additional command-line option for @command{gawk} @@ -20866,7 +20869,7 @@ field-splitting mechanism later. The test can only be true for or on some other @command{awk} implementation. The code that checks for using @code{FPAT}, using @code{using_fpat} -and @code{PROCINFO["FS"]} is similar. +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. @@ -20896,10 +20899,9 @@ function getpwnam(name) @end example @cindex @code{getpwuid()} function (C library) -Similarly, -the @code{getpwuid} function takes a user ID number argument. If that -user number is in the database, it returns the appropriate line. Otherwise, it -returns the null string: +Similarly, the @code{getpwuid()} function takes a user ID number +argument. If that user number is in the database, it returns the +appropriate line. Otherwise, it returns the null string: @cindex @code{getpwuid()} user-defined function @example @@ -21403,7 +21405,7 @@ index and value, use the indirect function call syntax and the value. When calling @code{walk_array()}, you would pass the name of a user-defined -function that expects to receive and index and a value, and then processes +function that expects to receive an index and a value, and then processes the element. @@ -21757,7 +21759,7 @@ complete field list, including filler fields: @example @c file eg/prog/cut.awk -function set_charlist( field, i, j, f, g, t, +function set_charlist( field, i, j, f, g, n, m, t, filler, last, len) @{ field = 1 # count total fields @@ -24485,7 +24487,7 @@ BEGIN @{ @c endfile @end example -The stack is initialized with @code{ARGV[1]}, which will be @file{/dev/stdin}. +The stack is initialized with @code{ARGV[1]}, which will be @samp{/dev/stdin}. The main loop comes next. Input lines are read in succession. Lines that do not start with @samp{@@include} are printed verbatim. If the line does start with @samp{@@include}, the file name is in @code{$2}. @@ -25527,7 +25529,7 @@ open a @emph{two-way} pipe to another process. The second process is termed a @dfn{coprocess}, since it runs in parallel with @command{gawk}. The two-way connection is created using the @samp{|&} operator (borrowed from the Korn shell, @command{ksh}):@footnote{This is very -different from the same operator in the C shell.} +different from the same operator in the C shell and in Bash.} @example do @{ @@ -25815,52 +25817,60 @@ foo 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 illustrates that @command{awk} -programmers sometimes have to work late): +Here is the @file{awkprof.out} that results from running the +@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.) @cindex @code{BEGIN} pattern @cindex @code{END} pattern @example - # gawk profile, created Sun Aug 13 00:00:15 2000 + # gawk profile, created Thu Feb 27 05:16:21 2014 - # BEGIN block(s) + # BEGIN block(s) - BEGIN @{ - 1 print "First BEGIN rule" - 1 print "Second BEGIN rule" - @} + BEGIN @{ + 1 print "First BEGIN rule" + @} - # Rule(s) + BEGIN @{ + 1 print "Second BEGIN rule" + @} - 5 /foo/ @{ # 2 - 2 print "matched /foo/, gosh" - 6 for (i = 1; i <= 3; i++) @{ - 6 sing() - @} - @} + # Rule(s) - 5 @{ - 5 if (/foo/) @{ # 2 - 2 print "if is true" - 3 @} else @{ - 3 print "else is true" - @} - @} + 5 /foo/ @{ # 2 + 2 print "matched /foo/, gosh" + 6 for (i = 1; i <= 3; i++) @{ + 6 sing() + @} + @} - # END block(s) + 5 @{ + 5 if (/foo/) @{ # 2 + 2 print "if is true" + 3 @} else @{ + 3 print "else is true" + @} + @} - END @{ - 1 print "First END rule" - 1 print "Second END rule" - @} + # END block(s) - # Functions, listed alphabetically + END @{ + 1 print "First END rule" + @} - 6 function sing(dummy) - @{ - 6 print "I gotta be me!" - @} + END @{ + 1 print "Second END rule" + @} + + + # Functions, listed alphabetically + + 6 function sing(dummy) + @{ + 6 print "I gotta be me!" + @} @end example This example illustrates many of the basic features of profiling output. @@ -25868,13 +25878,14 @@ They are as follows: @itemize @bullet @item -The program is printed in the order @code{BEGIN} rule, -@code{BEGINFILE} rule, +The program is printed in the order @code{BEGIN} rules, +@code{BEGINFILE} rules, pattern/action rules, -@code{ENDFILE} rule, @code{END} rule and functions, listed +@code{ENDFILE} rules, @code{END} rules and functions, listed alphabetically. -Multiple @code{BEGIN} and @code{END} rules are merged together, -as are multiple @code{BEGINFILE} and @code{ENDFILE} rules. +Multiple @code{BEGIN} and @code{END} rules retain their +separate identities, as do +multiple @code{BEGINFILE} and @code{ENDFILE} rules. @cindex patterns, counts @item @@ -25955,8 +25966,8 @@ typed when you wrote it. This is because @command{gawk} creates the profiled version by ``pretty printing'' its internal representation of the program. The advantage to this is that @command{gawk} can produce a standard representation. The disadvantage is that all source-code -comments are lost, as are the distinctions among multiple @code{BEGIN}, -@code{END}, @code{BEGINFILE}, and @code{ENDFILE} rules. Also, things such as: +comments are lost. +Also, things such as: @example /foo/ @@ -26046,6 +26057,11 @@ keyboard. The @code{INT} signal is generated by the Finally, @command{gawk} also accepts another option, @option{--pretty-print}. When called this way, @command{gawk} ``pretty prints'' the program into @file{awkprof.out}, without any execution counts. + +@quotation NOTE +The @option{--pretty-print} option still runs your program. +This will change in the next major release. +@end quotation @c ENDOFRANGE advgaw @c ENDOFRANGE gawadv @c ENDOFRANGE awkp @@ -34284,7 +34300,7 @@ as working in this fashion, and in particular, would teach that the that @samp{[A-Z]} was the ``correct'' way to match uppercase letters. And indeed, this was true.@footnote{And Life was good.} -The 1993 POSIX standard introduced the idea of locales (@pxref{Locales}). +The 1992 POSIX standard introduced the idea of locales (@pxref{Locales}). Since many locales include other letters besides the plain twenty-six letters of the American English alphabet, the POSIX standard added character classes (@pxref{Bracket Expressions}) as a way to match diff --git a/doc/gawktexi.in b/doc/gawktexi.in index cd9c775e..48c09f31 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -12272,6 +12272,8 @@ for more information on this version of the @code{for} loop. @cindex @code{case} keyword @cindex @code{default} keyword +This @value{SECTION} describes a @command{gawk}-specific feature. + The @code{switch} statement allows the evaluation of an expression and the execution of statements based on a @code{case} match. Case statements are checked for a match in the order they are defined. If no suitable @@ -16045,11 +16047,10 @@ This is the purpose of the @code{fflush()} function---@command{gawk} also buffers its output and the @code{fflush()} function forces @command{gawk} to flush its buffers. -@code{fflush()} was added to Brian Kernighan's -version of @command{awk} in 1994. -For over two decades, it was not part of the POSIX standard. -As of December, 2012, it was accepted for -inclusion into the POSIX standard. +@code{fflush()} was added to Brian Kernighan's version of @command{awk} in +April of 1992. For two decades, it was not part of the POSIX standard. +As of December, 2012, it was accepted for inclusion into the POSIX +standard. See @uref{http://austingroupbugs.net/view.php?id=634, the Austin Group website}. POSIX standardizes @code{fflush()} as follows: If there @@ -17053,7 +17054,7 @@ 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 built-in variables (@pxref{Built-in Variables}. Not all versions of @command{awk} -enforce this restriction. +enforce this restriction.) The @var{body-of-function} consists of @command{awk} statements. It is the most important part of the definition, because it says what the function @@ -17100,7 +17101,7 @@ function. When this happens, we say the function is @dfn{recursive}. The act of a function calling itself is called @dfn{recursion}. All the built-in functions return a value to their caller. -User-defined functions can do also, using the @code{return} statement, +User-defined functions can do so also, using the @code{return} statement, which is described in detail in @ref{Return Statement}. Many of the subsequent examples in this @value{SECTION} use the @code{return} statement. @@ -17192,7 +17193,8 @@ Instead of having to repeat this loop everywhere that you need to clear out 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 nonstandard extension.) +the contents of an entire array is a 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. @@ -17248,7 +17250,10 @@ function ctime(ts, format) @subsection Calling User-Defined Functions @c STARTOFRANGE fudc -This section describes how to call a user-defined function. +@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 +the function. @menu * Calling A Function:: Don't use spaces. @@ -17259,11 +17264,6 @@ This section describes how to call a user-defined function. @node Calling A Function @subsubsection Writing A Function Call -@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 -the function. - A function call consists of the function name followed by the arguments in parentheses. @command{awk} expressions are what you write in the call for the arguments. Each time the call is executed, these @@ -17733,7 +17733,7 @@ character: @example the_func = "sum" -result = @@the_func() # calls the `sum' function +result = @@the_func() # calls the sum() function @end example Here is a full program that processes the previously shown data, @@ -17854,8 +17854,9 @@ We can do something similar using @command{gawk}, like this: @ignore @c file eg/lib/quicksort.awk # -# Arnold Robbins, arnold@skeeve.com, Public Domain +# Arnold Robbins, arnold@@skeeve.com, Public Domain # January 2009 + @c endfile @end ignore @@ -17928,7 +17929,7 @@ or equal to), which yields data sorted in descending order. Next comes a sorting function. It is parameterized with the starting and ending field numbers and the comparison function. It builds an array with -the data and calls @code{quicksort} appropriately, and then formats the +the data and calls @code{quicksort()} appropriately, and then formats the results as a single string: @example @@ -18066,6 +18067,8 @@ 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. +@cindex Kernighan, Brian +@cindex Plauger, P.J.@: In their seminal 1976 book, @cite{Software Tools},@footnote{Sadly, over 35 years later, many of the lessons taught by this book have yet to be learned by a vast number of practicing programmers.} Brian Kernighan @@ -18195,7 +18198,7 @@ with the user's program. @cindex underscore (@code{_}), in names of private variables In addition, several of the library functions use a prefix that helps indicate what function or set of functions use the variables---for example, -@code{_pw_byname} in the user database routines +@code{_pw_byname()} in the user database routines (@pxref{Passwd Functions}). This convention is recommended, since it even further decreases the chance of inadvertent conflict among variable names. Note that this @@ -18509,9 +18512,9 @@ with an @code{exit} statement. The way @code{printf} and @code{sprintf()} (@pxref{Printf}) perform rounding often depends upon the system's C @code{sprintf()} -subroutine. On many machines, @code{sprintf()} rounding is ``unbiased,'' -which means it doesn't always round a trailing @samp{.5} up, contrary -to naive expectations. In unbiased rounding, @samp{.5} rounds to even, +subroutine. On many machines, @code{sprintf()} rounding is @dfn{unbiased}, +which means it doesn't always round a trailing .5 up, contrary +to naive expectations. In unbiased rounding, .5 rounds to even, rather than always up, so 1.5 rounds to 2 but 4.5 rounds to 4. This means that if you are using a format that does rounding (e.g., @code{"%.0f"}), you should check what your system does. The following function does @@ -18560,7 +18563,7 @@ function round(x, ival, aval, fraction) @c don't include test harness in the file that gets installed # test harness -@{ print $0, round($0) @} +# @{ print $0, round($0) @} @end example @node Cliff Random Function @@ -18674,7 +18677,7 @@ function _ord_init( low, high, i, t) @cindex ASCII @cindex EBCDIC @cindex mark parity -Some explanation of the numbers used by @code{chr()} is worthwhile. +Some explanation of the numbers used by @code{_ord_init()} is worthwhile. The most prominent character set in use today is ASCII.@footnote{This is changing; many systems use Unicode, a very large character set that includes ASCII as a subset. On systems with full Unicode support, @@ -18685,7 +18688,7 @@ Although an defines characters that use the values from 0 to 127.@footnote{ASCII has been extended in many countries to use the values from 128 to 255 for country-specific characters. If your system uses these extensions, -you can simplify @code{_ord_init} to loop from 0 to 255.} +you can simplify @code{_ord_init()} to loop from 0 to 255.} In the now distant past, at least one minicomputer manufacturer @c Pr1me, blech @@ -19330,7 +19333,7 @@ END @{ Occasionally, you might not want @command{awk} to process command-line variable assignments (@pxref{Assignment Options}). -In particular, if you have a file name that contain an @samp{=} character, +In particular, if you have a file name that contains an @samp{=} character, @command{awk} treats the file name as an assignment, and does not process it. Some users have suggested an additional command-line option for @command{gawk} @@ -20009,7 +20012,7 @@ field-splitting mechanism later. The test can only be true for or on some other @command{awk} implementation. The code that checks for using @code{FPAT}, using @code{using_fpat} -and @code{PROCINFO["FS"]} is similar. +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. @@ -20039,10 +20042,9 @@ function getpwnam(name) @end example @cindex @code{getpwuid()} function (C library) -Similarly, -the @code{getpwuid} function takes a user ID number argument. If that -user number is in the database, it returns the appropriate line. Otherwise, it -returns the null string: +Similarly, the @code{getpwuid()} function takes a user ID number +argument. If that user number is in the database, it returns the +appropriate line. Otherwise, it returns the null string: @cindex @code{getpwuid()} user-defined function @example @@ -20546,7 +20548,7 @@ index and value, use the indirect function call syntax and the value. When calling @code{walk_array()}, you would pass the name of a user-defined -function that expects to receive and index and a value, and then processes +function that expects to receive an index and a value, and then processes the element. @@ -20900,7 +20902,7 @@ complete field list, including filler fields: @example @c file eg/prog/cut.awk -function set_charlist( field, i, j, f, g, t, +function set_charlist( field, i, j, f, g, n, m, t, filler, last, len) @{ field = 1 # count total fields @@ -23628,7 +23630,7 @@ BEGIN @{ @c endfile @end example -The stack is initialized with @code{ARGV[1]}, which will be @file{/dev/stdin}. +The stack is initialized with @code{ARGV[1]}, which will be @samp{/dev/stdin}. The main loop comes next. Input lines are read in succession. Lines that do not start with @samp{@@include} are printed verbatim. If the line does start with @samp{@@include}, the file name is in @code{$2}. @@ -24670,7 +24672,7 @@ open a @emph{two-way} pipe to another process. The second process is termed a @dfn{coprocess}, since it runs in parallel with @command{gawk}. The two-way connection is created using the @samp{|&} operator (borrowed from the Korn shell, @command{ksh}):@footnote{This is very -different from the same operator in the C shell.} +different from the same operator in the C shell and in Bash.} @example do @{ @@ -24958,52 +24960,60 @@ foo 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 illustrates that @command{awk} -programmers sometimes have to work late): +Here is the @file{awkprof.out} that results from running the +@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.) @cindex @code{BEGIN} pattern @cindex @code{END} pattern @example - # gawk profile, created Sun Aug 13 00:00:15 2000 + # gawk profile, created Thu Feb 27 05:16:21 2014 - # BEGIN block(s) + # BEGIN block(s) - BEGIN @{ - 1 print "First BEGIN rule" - 1 print "Second BEGIN rule" - @} + BEGIN @{ + 1 print "First BEGIN rule" + @} - # Rule(s) + BEGIN @{ + 1 print "Second BEGIN rule" + @} - 5 /foo/ @{ # 2 - 2 print "matched /foo/, gosh" - 6 for (i = 1; i <= 3; i++) @{ - 6 sing() - @} - @} + # Rule(s) - 5 @{ - 5 if (/foo/) @{ # 2 - 2 print "if is true" - 3 @} else @{ - 3 print "else is true" - @} - @} + 5 /foo/ @{ # 2 + 2 print "matched /foo/, gosh" + 6 for (i = 1; i <= 3; i++) @{ + 6 sing() + @} + @} - # END block(s) + 5 @{ + 5 if (/foo/) @{ # 2 + 2 print "if is true" + 3 @} else @{ + 3 print "else is true" + @} + @} - END @{ - 1 print "First END rule" - 1 print "Second END rule" - @} + # END block(s) - # Functions, listed alphabetically + END @{ + 1 print "First END rule" + @} - 6 function sing(dummy) - @{ - 6 print "I gotta be me!" - @} + END @{ + 1 print "Second END rule" + @} + + + # Functions, listed alphabetically + + 6 function sing(dummy) + @{ + 6 print "I gotta be me!" + @} @end example This example illustrates many of the basic features of profiling output. @@ -25011,13 +25021,14 @@ They are as follows: @itemize @bullet @item -The program is printed in the order @code{BEGIN} rule, -@code{BEGINFILE} rule, +The program is printed in the order @code{BEGIN} rules, +@code{BEGINFILE} rules, pattern/action rules, -@code{ENDFILE} rule, @code{END} rule and functions, listed +@code{ENDFILE} rules, @code{END} rules and functions, listed alphabetically. -Multiple @code{BEGIN} and @code{END} rules are merged together, -as are multiple @code{BEGINFILE} and @code{ENDFILE} rules. +Multiple @code{BEGIN} and @code{END} rules retain their +separate identities, as do +multiple @code{BEGINFILE} and @code{ENDFILE} rules. @cindex patterns, counts @item @@ -25098,8 +25109,8 @@ typed when you wrote it. This is because @command{gawk} creates the profiled version by ``pretty printing'' its internal representation of the program. The advantage to this is that @command{gawk} can produce a standard representation. The disadvantage is that all source-code -comments are lost, as are the distinctions among multiple @code{BEGIN}, -@code{END}, @code{BEGINFILE}, and @code{ENDFILE} rules. Also, things such as: +comments are lost. +Also, things such as: @example /foo/ @@ -25189,6 +25200,11 @@ keyboard. The @code{INT} signal is generated by the Finally, @command{gawk} also accepts another option, @option{--pretty-print}. When called this way, @command{gawk} ``pretty prints'' the program into @file{awkprof.out}, without any execution counts. + +@quotation NOTE +The @option{--pretty-print} option still runs your program. +This will change in the next major release. +@end quotation @c ENDOFRANGE advgaw @c ENDOFRANGE gawadv @c ENDOFRANGE awkp @@ -33427,7 +33443,7 @@ as working in this fashion, and in particular, would teach that the that @samp{[A-Z]} was the ``correct'' way to match uppercase letters. And indeed, this was true.@footnote{And Life was good.} -The 1993 POSIX standard introduced the idea of locales (@pxref{Locales}). +The 1992 POSIX standard introduced the idea of locales (@pxref{Locales}). Since many locales include other letters besides the plain twenty-six letters of the American English alphabet, the POSIX standard added character classes (@pxref{Bracket Expressions}) as a way to match -- cgit v1.2.3 From 6994c5d1fc086915699a04bba84596c6fbf488da Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 27 Feb 2014 06:01:05 +0200 Subject: Files regenerated after previous doc update. --- awklib/eg/lib/quicksort.awk | 3 ++- awklib/eg/prog/cut.awk | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/awklib/eg/lib/quicksort.awk b/awklib/eg/lib/quicksort.awk index 7a635d6f..43357ac6 100644 --- a/awklib/eg/lib/quicksort.awk +++ b/awklib/eg/lib/quicksort.awk @@ -1,8 +1,9 @@ # quicksort.awk --- Quicksort algorithm, with user-supplied # comparison function # -# Arnold Robbins, arnoldskeeve.com, Public Domain +# 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 # diff --git a/awklib/eg/prog/cut.awk b/awklib/eg/prog/cut.awk index 16b4bdaa..1399411e 100644 --- a/awklib/eg/prog/cut.awk +++ b/awklib/eg/prog/cut.awk @@ -86,7 +86,7 @@ function set_fieldlist( n, m, i, j, k, f, g) } nfields = j - 1 } -function set_charlist( field, i, j, f, g, t, +function set_charlist( field, i, j, f, g, n, m, t, filler, last, len) { field = 1 # count total fields -- cgit v1.2.3 From d80438ac6fef9137ab0450f02cd507d422aa9c32 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 27 Feb 2014 06:01:30 +0200 Subject: Lots of enum/int fixes. --- ChangeLog | 10 ++++++ array.c | 2 +- awk.h | 1 + builtin.c | 4 +-- gawkapi.c | 117 +++++++++++++++++++++++++++++++------------------------------- 5 files changed, 72 insertions(+), 62 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3edd067d..507cd3e7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2014-02-27 Arnold D. Robbins + + Fixes for enum/int mismatches as warned by some compilers. + + * awk.h (ANONE): New enum for array sorting. + * array.c (assoc_list): Use it. + * builtin.c (format_tree): New MP_NONE value. + * gawkapi.c: Use awk_false and awk_true everywhere instead of + false and true. + 2014-02-26 Arnold D. Robbins * configure.ac: Set up do-nothing extension/Makefile on diff --git a/array.c b/array.c index 37894da5..840808e4 100644 --- a/array.c +++ b/array.c @@ -1279,7 +1279,7 @@ assoc_list(NODE *symbol, const char *sort_str, sort_context_t sort_ctxt) INSTRUCTION *code = NULL; extern int currule; int save_rule = 0; - assoc_kind_t assoc_kind = 0; + assoc_kind_t assoc_kind = ANONE; elem_size = 1; diff --git a/awk.h b/awk.h index 1414358c..a846483a 100644 --- a/awk.h +++ b/awk.h @@ -1327,6 +1327,7 @@ if (--val) \ /* array.c */ typedef enum { SORTED_IN = 1, ASORT, ASORTI } sort_context_t; typedef enum { + ANONE = 0x00, /* "unused" value */ AINDEX = 0x001, /* list of indices */ AVALUE = 0x002, /* list of values */ AINUM = 0x004, /* numeric index */ diff --git a/builtin.c b/builtin.c index 7a969cbc..72aea3b0 100644 --- a/builtin.c +++ b/builtin.c @@ -719,7 +719,7 @@ format_tree( mpz_ptr zi; mpfr_ptr mf; #endif - enum { MP_INT_WITH_PREC = 1, MP_INT_WITHOUT_PREC, MP_FLOAT } fmt_type; + enum { MP_NONE = 0, MP_INT_WITH_PREC = 1, MP_INT_WITHOUT_PREC, MP_FLOAT } fmt_type; static const char sp[] = " "; static const char zero_string[] = "0"; @@ -817,7 +817,7 @@ format_tree( mf = NULL; zi = NULL; #endif - fmt_type = 0; + fmt_type = MP_NONE; lj = alt = big_flag = bigbig_flag = small_flag = false; fill = sp; diff --git a/gawkapi.c b/gawkapi.c index 9936d530..fb456ce7 100644 --- a/gawkapi.c +++ b/gawkapi.c @@ -43,7 +43,7 @@ api_get_argument(awk_ext_id_t id, size_t count, NODE *arg; if (result == NULL) - return false; + return awk_false; (void) id; @@ -59,7 +59,7 @@ api_get_argument(awk_ext_id_t id, size_t count, */ arg = get_argument(count); if (arg == NULL) - return false; + return awk_false; /* if type is undefined */ if (arg->type == Node_var_new) { @@ -84,7 +84,7 @@ array: /* get the array here */ arg = get_array_argument(count, false); if (arg == NULL) - return false; + return awk_false; return node_to_awk_value(arg, result, wanted); @@ -92,11 +92,11 @@ scalar: /* at this point we have a real type that is not an array */ arg = get_scalar_argument(count, false); if (arg == NULL) - return false; + return awk_false; return node_to_awk_value(arg, result, wanted); #else - return false; + return awk_false; #endif } @@ -114,23 +114,23 @@ api_set_argument(awk_ext_id_t id, (void) id; if (array == NULL || array->type != Node_var_array) - return false; + return awk_false; if ( (arg = get_argument(count)) == NULL || arg->type != Node_var_new) - return false; + return awk_false; arg = get_array_argument(count, false); if (arg == NULL) - return false; + return awk_false; array->vname = arg->vname; *arg = *array; freenode(array); - return true; + return awk_true; #else - return false; + return awk_false; #endif } @@ -314,12 +314,12 @@ api_add_ext_func(awk_ext_id_t id, (void) namespace; if (func == NULL) - return false; + return awk_false; #ifdef DYNAMIC return make_builtin(func); #else - return false; + return awk_false; #endif } @@ -378,7 +378,7 @@ api_awk_atexit(awk_ext_id_t id, static awk_bool_t node_to_awk_value(NODE *node, awk_value_t *val, awk_valtype_t wanted) { - awk_bool_t ret = false; + awk_bool_t ret = awk_false; if (node == NULL) fatal(_("node_to_awk_value: received null node")); @@ -390,7 +390,7 @@ node_to_awk_value(NODE *node, awk_value_t *val, awk_valtype_t wanted) case Node_var_new: /* undefined variable */ val->val_type = AWK_UNDEFINED; if (wanted == AWK_UNDEFINED) { - ret = true; + ret = awk_true; } break; @@ -399,7 +399,7 @@ node_to_awk_value(NODE *node, awk_value_t *val, awk_valtype_t wanted) if (wanted == AWK_SCALAR) { val->val_type = AWK_SCALAR; val->scalar_cookie = (void *) node; - ret = true; + ret = awk_true; break; } @@ -414,7 +414,7 @@ node_to_awk_value(NODE *node, awk_value_t *val, awk_valtype_t wanted) (void) force_number(node); if ((node->flags & NUMCUR) != 0) { val->num_value = get_number_d(node); - ret = true; + ret = awk_true; } break; @@ -425,7 +425,7 @@ node_to_awk_value(NODE *node, awk_value_t *val, awk_valtype_t wanted) if ((node->flags & STRCUR) != 0) { val->str_value.str = node->stptr; val->str_value.len = node->stlen; - ret = true; + ret = awk_true; } break; @@ -436,7 +436,7 @@ node_to_awk_value(NODE *node, awk_value_t *val, awk_valtype_t wanted) val->val_type = AWK_STRING; } else val->val_type = AWK_UNDEFINED; - ret = false; + ret = awk_false; break; case AWK_UNDEFINED: @@ -444,12 +444,12 @@ node_to_awk_value(NODE *node, awk_value_t *val, awk_valtype_t wanted) if ((node->flags & NUMBER) != 0) { val->val_type = AWK_NUMBER; val->num_value = get_number_d(node); - ret = true; + ret = awk_true; } else if ((node->flags & STRING) != 0) { val->val_type = AWK_STRING; val->str_value.str = node->stptr; val->str_value.len = node->stlen; - ret = true; + ret = awk_true; } else val->val_type = AWK_UNDEFINED; break; @@ -464,15 +464,14 @@ node_to_awk_value(NODE *node, awk_value_t *val, awk_valtype_t wanted) val->val_type = AWK_ARRAY; if (wanted == AWK_ARRAY || wanted == AWK_UNDEFINED) { val->array_cookie = node; - ret = true; - } else { - ret = false; - } + ret = awk_true; + } else + ret = awk_false; break; default: val->val_type = AWK_UNDEFINED; - ret = false; + ret = awk_false; break; } @@ -510,7 +509,7 @@ api_sym_lookup(awk_ext_id_t id, || *name == '\0' || result == NULL || (node = lookup(name)) == NULL) - return false; + return awk_false; if (is_off_limits_var(name)) /* a built-in variable */ node->flags |= NO_EXT_SET; @@ -531,7 +530,7 @@ api_sym_lookup_scalar(awk_ext_id_t id, if (node == NULL || result == NULL || node->type != Node_var) - return false; + return awk_false; update_global_values(); /* make sure stuff like NF, NR, are up to date */ @@ -551,7 +550,7 @@ api_sym_update(awk_ext_id_t id, if ( name == NULL || *name == '\0' || value == NULL) - return false; + return awk_false; switch (value->val_type) { case AWK_NUMBER: @@ -564,7 +563,7 @@ api_sym_update(awk_ext_id_t id, default: /* fatal(_("api_sym_update: invalid value for type of new value (%d)"), value->val_type); */ - return false; + return awk_false; } node = lookup(name); @@ -586,7 +585,7 @@ api_sym_update(awk_ext_id_t id, node->var_value = awk_value_to_node(value); } - return true; + return awk_true; } /* @@ -596,7 +595,7 @@ api_sym_update(awk_ext_id_t id, if ( (node->flags & NO_EXT_SET) != 0 || is_off_limits_var(name)) { /* most built-in vars not allowed */ node->flags |= NO_EXT_SET; - return false; + return awk_false; } if ( value->val_type != AWK_ARRAY @@ -606,10 +605,10 @@ api_sym_update(awk_ext_id_t id, if (node->type == Node_var_new && value->val_type != AWK_UNDEFINED) node->type = Node_var; - return true; + return awk_true; } - return false; + return awk_false; } /* api_sym_update_scalar --- update a scalar cookie */ @@ -625,7 +624,7 @@ api_sym_update_scalar(awk_ext_id_t id, || node == NULL || node->type != Node_var || (node->flags & NO_EXT_SET) != 0) - return false; + return awk_false; /* * Optimization: if valref is 1, and the new value is a string or @@ -650,7 +649,7 @@ api_sym_update_scalar(awk_ext_id_t id, r->flags = MALLOC|NUMBER|NUMCUR; r->stptr = NULL; r->stlen = 0; - return true; + return awk_true; } break; case AWK_STRING: @@ -670,7 +669,7 @@ api_sym_update_scalar(awk_ext_id_t id, r->stfmt = -1; r->stptr = value->str_value.str; r->stlen = value->str_value.len; - return true; + return awk_true; } break; case AWK_UNDEFINED: @@ -679,13 +678,13 @@ api_sym_update_scalar(awk_ext_id_t id, break; default: /* AWK_ARRAY or invalid type */ - return false; + return awk_false; } /* do it the hard (slow) way */ unref(node->var_value); node->var_value = awk_value_to_node(value); - return true; + return awk_true; } /* @@ -694,7 +693,7 @@ api_sym_update_scalar(awk_ext_id_t id, * Any scalar value is fine, so only AWK_ARRAY (or an invalid type) is illegal. */ -static inline int +static inline bool valid_subscript_type(awk_valtype_t valtype) { switch (valtype) { @@ -733,21 +732,21 @@ api_get_array_element(awk_ext_id_t id, || result == NULL || index == NULL || ! valid_subscript_type(index->val_type)) - return false; + return awk_false; subscript = awk_value_to_node(index); /* if it doesn't exist, return false */ if (in_array(array, subscript) == NULL) { unref(subscript); - return false; + return awk_false; } aptr = assoc_lookup(array, subscript); if (aptr == NULL) { /* can't happen */ unref(subscript); - return false; + return awk_false; } unref(subscript); @@ -777,7 +776,7 @@ api_set_array_element(awk_ext_id_t id, awk_array_t a_cookie, || index == NULL || value == NULL || ! valid_subscript_type(index->val_type)) - return false; + return awk_false; tmp = awk_value_to_node(index); aptr = assoc_lookup(array, tmp); @@ -791,7 +790,7 @@ api_set_array_element(awk_ext_id_t id, awk_array_t a_cookie, make_aname(elem); } - return true; + return awk_true; } /* @@ -843,13 +842,13 @@ api_del_array_element(awk_ext_id_t id, || (array->flags & NO_EXT_SET) != 0 || index == NULL || ! valid_subscript_type(index->val_type)) - return false; + return awk_false; sub = awk_value_to_node(index); remove_element(array, sub); unref(sub); - return true; + return awk_true; } /* @@ -864,10 +863,10 @@ api_get_element_count(awk_ext_id_t id, NODE *node = (NODE *) a_cookie; if (count == NULL || node == NULL || node->type != Node_var_array) - return false; + return awk_false; *count = node->table_size; - return true; + return awk_true; } /* api_create_array --- create a new array cookie to which elements may be added */ @@ -894,10 +893,10 @@ api_clear_array(awk_ext_id_t id, awk_array_t a_cookie) if ( node == NULL || node->type != Node_var_array || (node->flags & NO_EXT_SET) != 0) - return false; + return awk_false; assoc_clear(node); - return true; + return awk_true; } /* api_flatten_array --- flatten out an array so that it can be looped over easily. */ @@ -916,7 +915,7 @@ api_flatten_array(awk_ext_id_t id, || array->type != Node_var_array || array->table_size == 0 || data == NULL) - return false; + return awk_false; alloc_size = sizeof(awk_flat_array_t) + (array->table_size - 1) * sizeof(awk_element_t); @@ -954,7 +953,7 @@ api_flatten_array(awk_ext_id_t id, (int) i); } } - return true; + return awk_true; } /* @@ -978,7 +977,7 @@ api_release_flattened_array(awk_ext_id_t id, || array != (NODE *) data->opaque1 || data->count != array->table_size || data->opaque2 == NULL) - return false; + return awk_false; list = (NODE **) data->opaque2; @@ -995,7 +994,7 @@ api_release_flattened_array(awk_ext_id_t id, efree(list); efree(data); - return true; + return awk_true; } /* api_create_value --- create a cached value */ @@ -1005,7 +1004,7 @@ api_create_value(awk_ext_id_t id, awk_value_t *value, awk_value_cookie_t *result) { if (value == NULL || result == NULL) - return false; + return awk_false; switch (value->val_type) { case AWK_NUMBER: @@ -1013,10 +1012,10 @@ api_create_value(awk_ext_id_t id, awk_value_t *value, break; default: /* reject anything other than a simple scalar */ - return false; + return awk_false; } - return (*result = awk_value_to_node(value)) != NULL; + return (awk_bool_t) ((*result = awk_value_to_node(value)) != NULL); } /* api_release_value --- release a cached value */ @@ -1027,10 +1026,10 @@ api_release_value(awk_ext_id_t id, awk_value_cookie_t value) NODE *val = (NODE *) value; if (val == NULL) - return false; + return awk_false; unref(val); - return true; + return awk_true; } /* -- cgit v1.2.3 From 4cea49ca8f817354ffd513c6ec808152e9299f21 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 27 Feb 2014 23:29:44 +0200 Subject: Finish up doc fixes before releasing. --- doc/ChangeLog | 2 +- doc/gawk.info | 520 ++++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 114 ++++++------- doc/gawktexi.in | 114 ++++++------- 4 files changed, 371 insertions(+), 379 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 89164b93..ccbeaafd 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,7 +1,7 @@ 2014-02-27 Arnold D. Robbins * gawktexi.in: Lots of small fixes throughout, update of - profiling output. + profiling output. Finished fixes needed before a release. 2014-02-20 Arnold D. Robbins diff --git a/doc/gawk.info b/doc/gawk.info index eb7c52fb..73ab988f 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -19134,9 +19134,9 @@ File: gawk.info, Node: Translator i18n, Next: I18N Example, Prev: Programmer =============================== Once a program's translatable strings have been marked, they must be -extracted to create the initial `.po' file. As part of translation, it -is often helpful to rearrange the order in which arguments to `printf' -are output. +extracted to create the initial `.pot' file. As part of translation, +it is often helpful to rearrange the order in which arguments to +`printf' are output. `gawk''s `--gen-pot' command-line option extracts the messages and is discussed next. After that, `printf''s ability to rearrange the @@ -19209,7 +19209,7 @@ second: $ gawk 'BEGIN { > string = "Dont Panic" - > printf _"%2$d characters live in \"%1$s\"\n", + > printf "%2$d characters live in \"%1$s\"\n", > string, length(string) > }' -| 10 characters live in "Dont Panic" @@ -19234,7 +19234,7 @@ precision capability: `gawk' does not allow you to mix regular format specifiers and those with positional specifiers in the same string: - $ gawk 'BEGIN { printf _"%d %3$s\n", 1, 2, "hi" }' + $ gawk 'BEGIN { printf "%d %3$s\n", 1, 2, "hi" }' error--> gawk: cmd. line:1: fatal: must use `count$' on all formats or none NOTE: There are some pathological cases that `gawk' may fail to @@ -19596,7 +19596,7 @@ File: gawk.info, Node: Debugger Invocation, Next: Finding The Bug, Up: Sample 14.2.1 How to Start the Debugger -------------------------------- -Starting the debugger is almost exactly like running `awk', except you +Starting the debugger is almost exactly like running `gawk', 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' @@ -19709,8 +19709,8 @@ our test input above. Let's look at `NR': -| NR = number (2) So we can see that `are_equal()' was only called for the second record -of the file. Of course, this is because our program contained a rule -for `NR == 1': +of the file. Of course, this is because our program contains a rule for +`NR == 1': NR == 1 { last = $0 @@ -21525,7 +21525,7 @@ floating-point value to begin with: gawk -M 'BEGIN { n = 13.0; print n % 2.0 }' - Note that for the particular example above, there is likely best to + Note that for the particular example above, it is likely best to just use the following: gawk -M 'BEGIN { n = 13; print n % 2 }' @@ -22162,7 +22162,7 @@ Extension functions are described by the following record: `awk_value_t *(*function)(int num_actual_args, awk_value_t *result);' This is a pointer to the C function that provides the desired functionality. The function must fill in the result with either a - number or a string. `awk' takes ownership of any string memory. + number or a string. `gawk' takes ownership of any string memory. As mentioned earlier, string memory *must* come from `malloc()'. The `num_actual_args' argument tells the C function how many @@ -24057,7 +24057,7 @@ declarations and argument checking: awk_array_t array; int ret; struct stat sbuf; - /* default is stat() */ + /* default is lstat() */ int (*statfunc)(const char *path, struct stat *sbuf) = lstat; assert(result != NULL); @@ -24455,12 +24455,16 @@ File: gawk.info, Node: Extension Sample Fnmatch, Next: Extension Sample Fork, This extension provides an interface to the C library `fnmatch()' function. The usage is: - @load "fnmatch" +`@load "fnmatch"' + This is how you load the extension. - result = fnmatch(pattern, string, flags) +`result = fnmatch(pattern, string, flags)' + The return value is zero on success, `FNM_NOMATCH' if the string + did not match the pattern, or a different non-zero value if an + error occurred. - The `fnmatch' extension adds a single function named `fnmatch()', -one constant (`FNM_NOMATCH'), and an array of flag values named `FNM'. + Besides the `fnmatch()' function, the `fnmatch' extension adds one +constant (`FNM_NOMATCH'), and an array of flag values named `FNM'. The arguments to `fnmatch()' are: @@ -24474,10 +24478,6 @@ one constant (`FNM_NOMATCH'), and an array of flag values named `FNM'. Either zero, or the bitwise OR of one or more of the flags in the `FNM' array. - The return value is zero on success, `FNM_NOMATCH' if the string did -not match the pattern, or a different non-zero value if an error -occurred. - The flags are follows: `FNM["CASEFOLD"]' Corresponds to the `FNM_CASEFOLD' flag as defined in @@ -24513,14 +24513,14 @@ The `fork' extension adds three functions, as follows. This is how you load the extension. `pid = fork()' - This function creates a new process. The return value is the zero - in 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. + 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 + -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()' @@ -25610,7 +25610,7 @@ in POSIX `awk', in the order they were added to `gawk'. - The `-i' and `--include' options load `awk' library files. - - The `-l' and `--load' options for load compiled dynamic + - The `-l' and `--load' options load compiled dynamic extensions. - The `-M' and `--bignum' options enable MPFR. @@ -25624,8 +25624,9 @@ in POSIX `awk', in the order they were added to `gawk'. * Support for high precision arithmetic with MPFR. (*note Gawk and MPFR::). - * The `and()', `or()' and `xor()' functions allow any number of - arguments, with a minimum of two (*note Bitwise Functions::). + * The `and()', `or()' and `xor()' functions changed to allow any + number of arguments, with a minimum of two (*note Bitwise + Functions::). * The dynamic extension interface was completely redone (*note Dynamic Extensions::). @@ -25644,18 +25645,18 @@ available versions of `awk' (*note Other Versions::). Feature BWK Awk Mawk GNU Awk -------------------------------------------------------- `\x' Escape sequence X X X -`RS' as regexp 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 -`**' and `**=' operators X X -`fflush()' function X X X -`func' keyword X X -`nextfile' statement X X X `delete' without subscript X X X +`fflush()' function X X X `length()' of an array X X X +`nextfile' statement 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 (Technically speaking, as of late 2012, `fflush()', `delete ARRAY', @@ -25751,17 +25752,17 @@ 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'; +the default regexp matching; with `--traditional' and with `--posix'; in all cases, `gawk' remains POSIX compliant. ---------- Footnotes ---------- (1) And Life was good. - (2) And thus was born the Campain for Rational Range Interpretation -(or RRI). A number of GNU tools, such as `grep' and `sed', have either -implemented this change, or will soon. Thanks to Karl Berry for -coining the phrase "Rational Range Interpretation." + (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." (3) See the standard (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_05) @@ -26243,8 +26244,8 @@ failure is not described there, please send in a bug report (*note Bugs::). Of course, once you've built `gawk', it is likely that you will wish -to install it. To do so, you need to run the command `make check', as -a user with the appropriate permissions. How to do this varies by +to install it. To do so, you need to run the command `make install', +as a user with the appropriate permissions. How to do this varies by system, but on many systems you can use the `sudo' command to do so. The command then becomes `sudo make install'. It is likely that you will be asked for your password, and you will have to have been set up @@ -26527,10 +26528,9 @@ File: gawk.info, Node: PC Using, Next: Cygwin, Prev: PC Testing, Up: PC Inst B.3.1.4 Using `gawk' on PC Operating Systems ............................................ -With the exception of the Cygwin environment, the `|&' operator and -TCP/IP networking (*note TCP/IP Networking::) are not supported for -MS-DOS or MS-Windows. EMX (OS/2 only) does support at least the `|&' -operator. +Under MS-DOS and MS-Windows, the Cygwin and MinGW environments support +both the `|&' operator and TCP/IP networking (*note TCP/IP +Networking::). EMX (OS/2 only) supports at least the `|&' operator. The MS-DOS and MS-Windows versions of `gawk' search for program files as described in *note AWKPATH Variable::. However, semicolons @@ -26623,9 +26623,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 Unix, 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 +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: tar -xvpzf gawk-4.1.0.tar.gz @@ -26637,10 +26637,6 @@ same as for a Unix system: on Cygwin takes considerably longer. However, it does finish, and then the `make' proceeds as usual. - NOTE: The `|&' operator and TCP/IP networking (*note TCP/IP - Networking::) are fully supported in the Cygwin environment. This - is not true for any other environment on MS-Windows. -  File: gawk.info, Node: MSYS, Prev: Cygwin, Up: PC Installation @@ -26804,7 +26800,8 @@ add the `gawk' and `awk' to the system wide `DCLTABLES'. The DCL syntax is documented in the `gawk.hlp' file. - Optionally, `gawk.hlp' entry can be loaded into a VMS help library: + Optionally, the `gawk.hlp' entry can be loaded into a VMS help +library: $ LIBRARY/HELP sys$help:helplib [.vms]gawk.hlp @@ -30122,7 +30119,7 @@ Index * /inet4/... special files (gawk): TCP/IP Networking. (line 6) * /inet6/... special files (gawk): TCP/IP Networking. (line 6) * ; (semicolon): Statements/Lines. (line 91) -* ; (semicolon), AWKPATH variable and: PC Using. (line 11) +* ; (semicolon), AWKPATH variable and: PC Using. (line 10) * ; (semicolon), separating statements in actions <1>: Statements. (line 10) * ; (semicolon), separating statements in actions: Action Overview. @@ -30392,7 +30389,7 @@ Index * awk, versions of, See Also Brian Kernighan's awk: BTL. (line 6) * awka compiler for awk: Other Versions. (line 64) * AWKLIBPATH environment variable: AWKLIBPATH Variable. (line 6) -* AWKPATH environment variable <1>: PC Using. (line 11) +* AWKPATH environment variable <1>: PC Using. (line 10) * AWKPATH environment variable: AWKPATH Variable. (line 6) * awkprof.out file: Profiling. (line 6) * awksed.awk program: Simple Sed. (line 25) @@ -30485,7 +30482,7 @@ Index * bindtextdomain() function (gawk): I18N Functions. (line 12) * bindtextdomain() function (gawk), portability and: I18N Portability. (line 33) -* BINMODE variable <1>: PC Using. (line 34) +* BINMODE variable <1>: PC Using. (line 33) * BINMODE variable: User-modified. (line 10) * bits2str() user-defined function: Bitwise Functions. (line 70) * bitwise, complement: Bitwise Functions. (line 25) @@ -30630,7 +30627,7 @@ Index * common extensions, /dev/stdin special file: Special FD. (line 46) * common extensions, /dev/stdout special file: Special FD. (line 46) * common extensions, \x escape sequence: Escape Sequences. (line 61) -* common extensions, BINMODE variable: PC Using. (line 34) +* 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 83) * common extensions, length() applied to an array: String Functions. @@ -30899,7 +30896,7 @@ Index * differences in awk and gawk, BEGINFILE/ENDFILE patterns: BEGINFILE/ENDFILE. (line 6) * differences in awk and gawk, BINMODE variable <1>: PC Using. - (line 34) + (line 33) * differences in awk and gawk, BINMODE variable: User-modified. (line 23) * differences in awk and gawk, close() function: Close Files And Pipes. @@ -31086,7 +31083,7 @@ Index * extensions, common, /dev/stdin special file: Special FD. (line 46) * extensions, common, /dev/stdout special file: Special FD. (line 46) * extensions, common, \x escape sequence: Escape Sequences. (line 61) -* extensions, common, BINMODE variable: PC Using. (line 34) +* extensions, common, BINMODE variable: PC Using. (line 33) * extensions, common, delete to delete entire arrays: Delete. (line 39) * extensions, common, func keyword: Definition Syntax. (line 83) * extensions, common, length() applied to an array: String Functions. @@ -31215,7 +31212,7 @@ Index * floating-point, numbers: General Arithmetic. (line 6) * floating-point, VAX/VMS: VMS Running. (line 51) * fnmatch() extension function: Extension Sample Fnmatch. - (line 6) + (line 12) * FNR variable <1>: Auto-set. (line 103) * FNR variable: Records. (line 6) * FNR variable, changing: Auto-set. (line 314) @@ -31375,11 +31372,11 @@ Index * gawk, line continuation in: Conditional Exp. (line 34) * gawk, LINT variable in: User-modified. (line 98) * gawk, list of contributors to: Contributors. (line 6) -* gawk, MS-DOS version of: PC Using. (line 11) -* gawk, MS-Windows version of: PC Using. (line 11) +* gawk, MS-DOS version of: PC Using. (line 10) +* gawk, MS-Windows version of: PC Using. (line 10) * gawk, newlines in: Statements/Lines. (line 12) * gawk, octal numbers and: Nondecimal-numbers. (line 42) -* gawk, OS/2 version of: PC Using. (line 11) +* gawk, OS/2 version of: PC Using. (line 10) * gawk, PROCINFO array in <1>: Two-way I/O. (line 116) * gawk, PROCINFO array in <2>: Time Functions. (line 47) * gawk, PROCINFO array in: Auto-set. (line 133) @@ -31743,7 +31740,7 @@ Index (line 9) * matching, leftmost longest: Multiple Line. (line 26) * matching, null strings: Gory Details. (line 164) -* mawk program: Other Versions. (line 44) +* mawk utility: Other Versions. (line 44) * McPhee, Patrick: Contributors. (line 100) * message object files: Explaining gettext. (line 41) * message object files, converting from portable object files: I18N Example. @@ -32143,6 +32140,7 @@ Index * r debugger command (alias for run): Debugger Execution Control. (line 62) * Rakitzis, Byron: History Sorting. (line 25) +* Ramey, Chet <1>: General Data Types. (line 6) * Ramey, Chet: Acknowledgments. (line 60) * rand() function: Numeric Functions. (line 34) * random numbers, Cliff: Cliff Random Function. @@ -32255,9 +32253,10 @@ Index * Robbins, Arnold <1>: Future Extensions. (line 6) * Robbins, Arnold <2>: Bugs. (line 32) * Robbins, Arnold <3>: Contributors. (line 132) -* Robbins, Arnold <4>: Alarm Program. (line 6) -* Robbins, Arnold <5>: Passwd Functions. (line 90) -* Robbins, Arnold <6>: Getline/Pipe. (line 39) +* Robbins, Arnold <4>: General Data Types. (line 6) +* Robbins, Arnold <5>: Alarm Program. (line 6) +* Robbins, Arnold <6>: Passwd Functions. (line 90) +* Robbins, Arnold <7>: Getline/Pipe. (line 39) * Robbins, Arnold: Command Line Field Separator. (line 80) * Robbins, Bill: Getline/Pipe. (line 39) @@ -32299,13 +32298,13 @@ Index * Schreiber, Bert: Acknowledgments. (line 38) * Schreiber, Rita: Acknowledgments. (line 38) * search paths <1>: VMS Running. (line 58) -* search paths <2>: PC Using. (line 11) +* search paths <2>: PC Using. (line 10) * search paths <3>: Igawk Program. (line 368) * search paths <4>: AWKLIBPATH Variable. (line 6) * search paths: AWKPATH Variable. (line 6) * search paths, for shared libraries: AWKLIBPATH Variable. (line 6) * search paths, for source files <1>: VMS Running. (line 58) -* search paths, for source files <2>: PC Using. (line 11) +* search paths, for source files <2>: PC Using. (line 10) * search paths, for source files <3>: Igawk Program. (line 368) * search paths, for source files: AWKPATH Variable. (line 6) * searching: String Functions. (line 150) @@ -32316,7 +32315,7 @@ Index * sed utility: Field Splitting Summary. (line 46) * semicolon (;): Statements/Lines. (line 91) -* semicolon (;), AWKPATH variable and: PC Using. (line 11) +* semicolon (;), AWKPATH variable and: PC Using. (line 10) * semicolon (;), separating statements in actions <1>: Statements. (line 10) * semicolon (;), separating statements in actions: Action Overview. @@ -32337,6 +32336,7 @@ Index (line 12) * shells, quoting, rules for: Quoting. (line 18) * shells, scripts: One-shot. (line 22) +* shells, sea: Undocumented. (line 8) * shells, variables: Using Shell Variables. (line 6) * shift, bitwise: Bitwise Functions. (line 32) @@ -32625,7 +32625,7 @@ Index * Unix awk, password files, field separators and: Command Line Field Separator. (line 72) * Unix, awk scripts and: Executable Scripts. (line 6) -* UNIXROOT variable, on OS/2 systems: PC Using. (line 17) +* UNIXROOT variable, on OS/2 systems: PC Using. (line 16) * unsigned integers: General Arithmetic. (line 15) * until debugger command: Debugger Execution Control. (line 83) @@ -33089,196 +33089,196 @@ Ref: Explaining gettext-Footnote-1767494 Ref: Explaining gettext-Footnote-2767678 Node: Programmer i18n767843 Node: Translator i18n772045 -Node: String Extraction772838 -Ref: String Extraction-Footnote-1773799 -Node: Printf Ordering773885 -Ref: Printf Ordering-Footnote-1776669 -Node: I18N Portability776733 -Ref: I18N Portability-Footnote-1779182 -Node: I18N Example779245 -Ref: I18N Example-Footnote-1781883 -Node: Gawk I18N781955 -Node: Debugger782576 -Node: Debugging783547 -Node: Debugging Concepts783980 -Node: Debugging Terms785836 -Node: Awk Debugging788433 -Node: Sample Debugging Session789325 -Node: Debugger Invocation789845 +Node: String Extraction772839 +Ref: String Extraction-Footnote-1773800 +Node: Printf Ordering773886 +Ref: Printf Ordering-Footnote-1776668 +Node: I18N Portability776732 +Ref: I18N Portability-Footnote-1779181 +Node: I18N Example779244 +Ref: I18N Example-Footnote-1781882 +Node: Gawk I18N781954 +Node: Debugger782575 +Node: Debugging783546 +Node: Debugging Concepts783979 +Node: Debugging Terms785835 +Node: Awk Debugging788432 +Node: Sample Debugging Session789324 +Node: Debugger Invocation789844 Node: Finding The Bug791177 -Node: List of Debugger Commands797665 -Node: Breakpoint Control798999 -Node: Debugger Execution Control802663 -Node: Viewing And Changing Data806023 -Node: Execution Stack809379 -Node: Debugger Info810846 -Node: Miscellaneous Debugger Commands814828 -Node: Readline Support820004 -Node: Limitations820835 -Node: Arbitrary Precision Arithmetic823087 -Ref: Arbitrary Precision Arithmetic-Footnote-1824736 -Node: General Arithmetic824884 -Node: Floating Point Issues826604 -Node: String Conversion Precision827485 -Ref: String Conversion Precision-Footnote-1829190 -Node: Unexpected Results829299 -Node: POSIX Floating Point Problems831452 -Ref: POSIX Floating Point Problems-Footnote-1835277 -Node: Integer Programming835315 -Node: Floating-point Programming837054 -Ref: Floating-point Programming-Footnote-1843385 -Ref: Floating-point Programming-Footnote-2843655 -Node: Floating-point Representation843919 -Node: Floating-point Context845084 -Ref: table-ieee-formats845923 -Node: Rounding Mode847307 -Ref: table-rounding-modes847786 -Ref: Rounding Mode-Footnote-1850801 -Node: Gawk and MPFR850980 -Node: Arbitrary Precision Floats852235 -Ref: Arbitrary Precision Floats-Footnote-1854678 -Node: Setting Precision854994 -Ref: table-predefined-precision-strings855680 -Node: Setting Rounding Mode857825 -Ref: table-gawk-rounding-modes858229 -Node: Floating-point Constants859416 -Node: Changing Precision860845 -Ref: Changing Precision-Footnote-1862242 -Node: Exact Arithmetic862416 -Node: Arbitrary Precision Integers865554 -Ref: Arbitrary Precision Integers-Footnote-1868572 -Node: Dynamic Extensions868719 -Node: Extension Intro870177 -Node: Plugin License871442 -Node: Extension Mechanism Outline872127 -Ref: load-extension872544 -Ref: load-new-function874022 -Ref: call-new-function875017 -Node: Extension API Description877032 -Node: Extension API Functions Introduction878245 -Node: General Data Types883111 -Ref: General Data Types-Footnote-1888713 -Node: Requesting Values889012 -Ref: table-value-types-returned889743 -Node: Constructor Functions890697 -Node: Registration Functions893717 -Node: Extension Functions894402 -Node: Exit Callback Functions896627 -Node: Extension Version String897876 -Node: Input Parsers898526 -Node: Output Wrappers908283 -Node: Two-way processors912793 -Node: Printing Messages915001 -Ref: Printing Messages-Footnote-1916078 -Node: Updating `ERRNO'916230 -Node: Accessing Parameters916969 -Node: Symbol Table Access918199 -Node: Symbol table by name918711 -Node: Symbol table by cookie920458 -Ref: Symbol table by cookie-Footnote-1924588 -Node: Cached values924651 -Ref: Cached values-Footnote-1928100 -Node: Array Manipulation928191 -Ref: Array Manipulation-Footnote-1929289 -Node: Array Data Types929328 -Ref: Array Data Types-Footnote-1932031 -Node: Array Functions932123 -Node: Flattening Arrays935889 -Node: Creating Arrays942741 -Node: Extension API Variables947466 -Node: Extension Versioning948102 -Node: Extension API Informational Variables950003 -Node: Extension API Boilerplate951089 -Node: Finding Extensions954893 -Node: Extension Example955453 -Node: Internal File Description956183 -Node: Internal File Ops960274 -Ref: Internal File Ops-Footnote-1971782 -Node: Using Internal File Ops971922 -Ref: Using Internal File Ops-Footnote-1974275 -Node: Extension Samples974541 -Node: Extension Sample File Functions976065 -Node: Extension Sample Fnmatch984550 -Node: Extension Sample Fork986276 -Node: Extension Sample Inplace987494 -Node: Extension Sample Ord989272 -Node: Extension Sample Readdir990108 -Node: Extension Sample Revout991640 -Node: Extension Sample Rev2way992233 -Node: Extension Sample Read write array992923 -Node: Extension Sample Readfile994806 -Node: Extension Sample API Tests995624 -Node: Extension Sample Time996149 -Node: gawkextlib997513 -Node: Language History1000294 -Node: V7/SVR3.11001887 -Node: SVR41004207 -Node: POSIX1005649 -Node: BTL1007035 -Node: POSIX/GNU1007769 -Node: Feature History1013368 -Node: Common Extensions1026332 -Node: Ranges and Locales1027644 -Ref: Ranges and Locales-Footnote-11032262 -Ref: Ranges and Locales-Footnote-21032289 -Ref: Ranges and Locales-Footnote-31032549 -Node: Contributors1032770 -Node: Installation1037915 -Node: Gawk Distribution1038809 -Node: Getting1039293 -Node: Extracting1040119 -Node: Distribution contents1041811 -Node: Unix Installation1047516 -Node: Quick Installation1048133 -Node: Additional Configuration Options1050577 -Node: Configuration Philosophy1052313 -Node: Non-Unix Installation1054667 -Node: PC Installation1055125 -Node: PC Binary Installation1056424 -Node: PC Compiling1058272 -Node: PC Testing1061216 -Node: PC Using1062392 -Node: Cygwin1066577 -Node: MSYS1067577 -Node: VMS Installation1068091 -Node: VMS Compilation1068855 -Ref: VMS Compilation-Footnote-11070470 -Node: VMS Dynamic Extensions1070528 -Node: VMS Installation Details1071901 -Node: VMS Running1074148 -Node: VMS GNV1076982 -Node: VMS Old Gawk1077705 -Node: Bugs1078175 -Node: Other Versions1082093 -Node: Notes1088177 -Node: Compatibility Mode1088977 -Node: Additions1089760 -Node: Accessing The Source1090687 -Node: Adding Code1092127 -Node: New Ports1098172 -Node: Derived Files1102307 -Ref: Derived Files-Footnote-11107628 -Ref: Derived Files-Footnote-21107662 -Ref: Derived Files-Footnote-31108262 -Node: Future Extensions1108360 -Node: Implementation Limitations1108943 -Node: Extension Design1110195 -Node: Old Extension Problems1111349 -Ref: Old Extension Problems-Footnote-11112857 -Node: Extension New Mechanism Goals1112914 -Ref: Extension New Mechanism Goals-Footnote-11116279 -Node: Extension Other Design Decisions1116465 -Node: Extension Future Growth1118571 -Node: Old Extension Mechanism1119407 -Node: Basic Concepts1121147 -Node: Basic High Level1121828 -Ref: figure-general-flow1122099 -Ref: figure-process-flow1122698 -Ref: Basic High Level-Footnote-11125927 -Node: Basic Data Typing1126112 -Node: Glossary1129467 -Node: Copying1154929 -Node: GNU Free Documentation License1192486 -Node: Index1217623 +Node: List of Debugger Commands797664 +Node: Breakpoint Control798998 +Node: Debugger Execution Control802662 +Node: Viewing And Changing Data806022 +Node: Execution Stack809378 +Node: Debugger Info810845 +Node: Miscellaneous Debugger Commands814827 +Node: Readline Support820003 +Node: Limitations820834 +Node: Arbitrary Precision Arithmetic823086 +Ref: Arbitrary Precision Arithmetic-Footnote-1824735 +Node: General Arithmetic824883 +Node: Floating Point Issues826603 +Node: String Conversion Precision827484 +Ref: String Conversion Precision-Footnote-1829189 +Node: Unexpected Results829298 +Node: POSIX Floating Point Problems831451 +Ref: POSIX Floating Point Problems-Footnote-1835276 +Node: Integer Programming835314 +Node: Floating-point Programming837053 +Ref: Floating-point Programming-Footnote-1843384 +Ref: Floating-point Programming-Footnote-2843654 +Node: Floating-point Representation843918 +Node: Floating-point Context845083 +Ref: table-ieee-formats845922 +Node: Rounding Mode847306 +Ref: table-rounding-modes847785 +Ref: Rounding Mode-Footnote-1850800 +Node: Gawk and MPFR850979 +Node: Arbitrary Precision Floats852234 +Ref: Arbitrary Precision Floats-Footnote-1854677 +Node: Setting Precision854993 +Ref: table-predefined-precision-strings855679 +Node: Setting Rounding Mode857824 +Ref: table-gawk-rounding-modes858228 +Node: Floating-point Constants859415 +Node: Changing Precision860844 +Ref: Changing Precision-Footnote-1862241 +Node: Exact Arithmetic862415 +Node: Arbitrary Precision Integers865553 +Ref: Arbitrary Precision Integers-Footnote-1868568 +Node: Dynamic Extensions868715 +Node: Extension Intro870173 +Node: Plugin License871438 +Node: Extension Mechanism Outline872123 +Ref: load-extension872540 +Ref: load-new-function874018 +Ref: call-new-function875013 +Node: Extension API Description877028 +Node: Extension API Functions Introduction878241 +Node: General Data Types883107 +Ref: General Data Types-Footnote-1888709 +Node: Requesting Values889008 +Ref: table-value-types-returned889739 +Node: Constructor Functions890693 +Node: Registration Functions893713 +Node: Extension Functions894398 +Node: Exit Callback Functions896624 +Node: Extension Version String897873 +Node: Input Parsers898523 +Node: Output Wrappers908280 +Node: Two-way processors912790 +Node: Printing Messages914998 +Ref: Printing Messages-Footnote-1916075 +Node: Updating `ERRNO'916227 +Node: Accessing Parameters916966 +Node: Symbol Table Access918196 +Node: Symbol table by name918708 +Node: Symbol table by cookie920455 +Ref: Symbol table by cookie-Footnote-1924585 +Node: Cached values924648 +Ref: Cached values-Footnote-1928097 +Node: Array Manipulation928188 +Ref: Array Manipulation-Footnote-1929286 +Node: Array Data Types929325 +Ref: Array Data Types-Footnote-1932028 +Node: Array Functions932120 +Node: Flattening Arrays935886 +Node: Creating Arrays942738 +Node: Extension API Variables947463 +Node: Extension Versioning948099 +Node: Extension API Informational Variables950000 +Node: Extension API Boilerplate951086 +Node: Finding Extensions954890 +Node: Extension Example955450 +Node: Internal File Description956180 +Node: Internal File Ops960271 +Ref: Internal File Ops-Footnote-1971780 +Node: Using Internal File Ops971920 +Ref: Using Internal File Ops-Footnote-1974273 +Node: Extension Samples974539 +Node: Extension Sample File Functions976063 +Node: Extension Sample Fnmatch984548 +Node: Extension Sample Fork986317 +Node: Extension Sample Inplace987530 +Node: Extension Sample Ord989308 +Node: Extension Sample Readdir990144 +Node: Extension Sample Revout991676 +Node: Extension Sample Rev2way992269 +Node: Extension Sample Read write array992959 +Node: Extension Sample Readfile994842 +Node: Extension Sample API Tests995660 +Node: Extension Sample Time996185 +Node: gawkextlib997549 +Node: Language History1000330 +Node: V7/SVR3.11001923 +Node: SVR41004243 +Node: POSIX1005685 +Node: BTL1007071 +Node: POSIX/GNU1007805 +Node: Feature History1013404 +Node: Common Extensions1026380 +Node: Ranges and Locales1027692 +Ref: Ranges and Locales-Footnote-11032309 +Ref: Ranges and Locales-Footnote-21032336 +Ref: Ranges and Locales-Footnote-31032570 +Node: Contributors1032791 +Node: Installation1037936 +Node: Gawk Distribution1038830 +Node: Getting1039314 +Node: Extracting1040140 +Node: Distribution contents1041832 +Node: Unix Installation1047537 +Node: Quick Installation1048154 +Node: Additional Configuration Options1050600 +Node: Configuration Philosophy1052336 +Node: Non-Unix Installation1054690 +Node: PC Installation1055148 +Node: PC Binary Installation1056447 +Node: PC Compiling1058295 +Node: PC Testing1061239 +Node: PC Using1062415 +Node: Cygwin1066583 +Node: MSYS1067392 +Node: VMS Installation1067906 +Node: VMS Compilation1068670 +Ref: VMS Compilation-Footnote-11070285 +Node: VMS Dynamic Extensions1070343 +Node: VMS Installation Details1071716 +Node: VMS Running1073967 +Node: VMS GNV1076801 +Node: VMS Old Gawk1077524 +Node: Bugs1077994 +Node: Other Versions1081912 +Node: Notes1087996 +Node: Compatibility Mode1088796 +Node: Additions1089579 +Node: Accessing The Source1090506 +Node: Adding Code1091946 +Node: New Ports1097991 +Node: Derived Files1102126 +Ref: Derived Files-Footnote-11107447 +Ref: Derived Files-Footnote-21107481 +Ref: Derived Files-Footnote-31108081 +Node: Future Extensions1108179 +Node: Implementation Limitations1108762 +Node: Extension Design1110014 +Node: Old Extension Problems1111168 +Ref: Old Extension Problems-Footnote-11112676 +Node: Extension New Mechanism Goals1112733 +Ref: Extension New Mechanism Goals-Footnote-11116098 +Node: Extension Other Design Decisions1116284 +Node: Extension Future Growth1118390 +Node: Old Extension Mechanism1119226 +Node: Basic Concepts1120966 +Node: Basic High Level1121647 +Ref: figure-general-flow1121918 +Ref: figure-process-flow1122517 +Ref: Basic High Level-Footnote-11125746 +Node: Basic Data Typing1125931 +Node: Glossary1129286 +Node: Copying1154748 +Node: GNU Free Documentation License1192305 +Node: Index1217442  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 50496c26..736c42c3 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -4221,6 +4221,7 @@ in case some option becomes obsolete in a future version of @command{gawk}. @author Obi-Wan @end quotation +@cindex shells, sea This @value{SECTION} intentionally left blank. @@ -4233,7 +4234,7 @@ blank. @table @code @item -W nostalgia @itemx --nostalgia -Print the message @code{"awk: bailing out near line 1"} and dump core. +Print the message @samp{awk: bailing out near line 1} and dump core. This option was inspired by the common behavior of very early versions of Unix @command{awk} and by a t--shirt. The message is @emph{not} subject to translation in non-English locales. @@ -6558,7 +6559,7 @@ $ @kbd{echo a b | gawk 'BEGIN @{ FS = "" @}} @end example @cindex dark corner, @code{FS} as null string -@cindex FS variable, as null string +@cindex @code{FS} variable, as null string Traditionally, the behavior of @code{FS} equal to @code{""} was not defined. In this case, most versions of Unix @command{awk} simply treat the entire record as only having one field. @@ -26475,7 +26476,7 @@ and use translations from @command{awk}. @cindex portable object files @cindex files, portable object Once a program's translatable strings have been marked, they must -be extracted to create the initial @file{.po} file. +be extracted to create the initial @file{.pot} file. As part of translation, it is often helpful to rearrange the order in which arguments to @code{printf} are output. @@ -26570,7 +26571,7 @@ example, @samp{string} is the first argument and @samp{length(string)} is the se @example $ @kbd{gawk 'BEGIN @{} > @kbd{string = "Dont Panic"} -> @kbd{printf _"%2$d characters live in \"%1$s\"\n",} +> @kbd{printf "%2$d characters live in \"%1$s\"\n",} > @kbd{string, length(string)} > @kbd{@}'} @print{} 10 characters live in "Dont Panic" @@ -26604,7 +26605,7 @@ This is somewhat counterintuitive. and those with positional specifiers in the same string: @example -$ @kbd{gawk 'BEGIN @{ printf _"%d %3$s\n", 1, 2, "hi" @}'} +$ @kbd{gawk 'BEGIN @{ printf "%d %3$s\n", 1, 2, "hi" @}'} @error{} gawk: cmd. line:1: fatal: must use `count$' on all formats or none @end example @@ -27020,12 +27021,13 @@ as our example. @node Debugger Invocation @subsection How to Start the Debugger -Starting the debugger is almost exactly like running @command{awk}, 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.) In our case, -we invoke the debugger like this: +Starting the debugger is almost exactly like running @command{gawk}, +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.) +In our case, we invoke the debugger like this: @example $ @kbd{gawk -D -f getopt.awk -f join.awk -f uniq.awk inputfile} @@ -27158,7 +27160,7 @@ gawk> @kbd{p NR} @noindent So we can see that @code{are_equal()} was only called for the second record -of the file. Of course, this is because our program contained a rule for +of the file. Of course, this is because our program contains a rule for @samp{NR == 1}: @example @@ -29325,7 +29327,7 @@ to begin with: gawk -M 'BEGIN @{ n = 13.0; print n % 2.0 @}' @end example -Note that for the particular example above, there is likely best +Note that for the particular example above, it is likely best to just use the following: @example @@ -29670,6 +29672,8 @@ the macros as if they were functions. @node General Data Types @subsection General Purpose Data Types +@cindex Robbins, Arnold +@cindex Ramey, Chet @quotation @i{I have a true love/hate relationship with unions.} @author Arnold Robbins @@ -29997,7 +30001,7 @@ Letter case in function names is significant. This is a pointer to the C function that provides the desired functionality. The function must fill in the result with either a number -or a string. @command{awk} takes ownership of any string memory. +or a string. @command{gawk} takes ownership of any string memory. As mentioned earlier, string memory @strong{must} come from @code{malloc()}. The @code{num_actual_args} argument tells the C function how many @@ -32067,7 +32071,7 @@ do_stat(int nargs, awk_value_t *result) awk_array_t array; int ret; struct stat sbuf; - /* default is stat() */ + /* default is lstat() */ int (*statfunc)(const char *path, struct stat *sbuf) = lstat; assert(result != NULL); @@ -32295,7 +32299,7 @@ upon success or less than zero upon error. In the latter case it updates @code{ERRNO}. @cindex @code{stat()} extension function -@item result = stat("/some/path", statdata [, follow]) +@item result = stat("/some/path", statdata @r{[}, follow@r{]}) The @code{stat()} function provides a hook into the @code{stat()} system call. It returns zero upon success or less than zero upon error. @@ -32505,19 +32509,23 @@ See @file{test/fts.awk} in the @command{gawk} distribution for an example. @node Extension Sample Fnmatch @subsection Interface To @code{fnmatch()} -@cindex @code{fnmatch()} extension function This extension provides an interface to the C library @code{fnmatch()} function. The usage is: -@example -@@load "fnmatch" +@table @code +@item @@load "fnmatch" +This is how you load the extension. -result = fnmatch(pattern, string, flags) -@end example +@cindex @code{fnmatch()} extension function +@item result = fnmatch(pattern, string, flags) +The return value is zero on success, @code{FNM_NOMATCH} +if the string did not match the pattern, or +a different non-zero value if an error occurred. +@end table -The @code{fnmatch} extension adds a single function named -@code{fnmatch()}, one constant (@code{FNM_NOMATCH}), and an array of -flag values named @code{FNM}. +Besides the @code{fnmatch()} function, the @code{fnmatch} extension +adds one constant (@code{FNM_NOMATCH}), and an array of flag values +named @code{FNM}. The arguments to @code{fnmatch()} are: @@ -32533,10 +32541,6 @@ Either zero, or the bitwise OR of one or more of the flags in the @code{FNM} array. @end table -The return value is zero on success, @code{FNM_NOMATCH} -if the string did not match the pattern, or -a different non-zero value if an error occurred. - The flags are follows: @multitable @columnfractions .25 .75 @@ -32580,15 +32584,15 @@ 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 the zero in the -child and the process-id number of the child in the parent, or @minus{}1 +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 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. @@ -34212,7 +34216,7 @@ The @option{-i} and @option{--include} options load @command{awk} library files. @item -The @option{-l} and @option{--load} options for load compiled dynamic extensions. +The @option{-l} and @option{--load} options load compiled dynamic extensions. @item The @option{-M} and @option{--bignum} options enable MPFR. @@ -34233,7 +34237,7 @@ Support for high precision arithmetic with MPFR. @item The @code{and()}, @code{or()} and @code{xor()} functions -allow any number of arguments, +changed to allow any number of arguments, with a minimum of two (@pxref{Bitwise Functions}). @@ -34258,18 +34262,18 @@ the three most widely-used freely available versions of @command{awk} @multitable {@file{/dev/stderr} special file} {BWK Awk} {Mawk} {GNU Awk} @headitem Feature @tab BWK Awk @tab Mawk @tab GNU Awk @item @samp{\x} Escape sequence @tab X @tab X @tab X -@item @code{RS} as regexp @tab @tab X @tab X @item @code{FS} as null string @tab X @tab X @tab X @item @file{/dev/stdin} special file @tab X @tab X @tab X @item @file{/dev/stdout} special file @tab X @tab X @tab X @item @file{/dev/stderr} special file @tab X @tab X @tab X -@item @code{**} and @code{**=} operators @tab X @tab @tab X -@item @code{fflush()} function @tab X @tab X @tab X -@item @code{func} keyword @tab X @tab @tab X -@item @code{nextfile} statement @tab X @tab X @tab X @item @code{delete} without subscript @tab X @tab X @tab X +@item @code{fflush()} function @tab X @tab X @tab X @item @code{length()} of an array @tab X @tab X @tab X +@item @code{nextfile} statement @tab X @tab X @tab X +@item @code{**} and @code{**=} operators @tab X @tab @tab X +@item @code{func} keyword @tab X @tab @tab X @item @code{BINMODE} variable @tab @tab X @tab X +@item @code{RS} as regexp @tab @tab X @tab X @item Time related functions @tab @tab X @tab X @end multitable @@ -34358,10 +34362,10 @@ the @command{gawk} maintainer grew weary of trying to explain that was in the user's locale. During the development of version 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 Campain for Rational Range Interpretation (or RRI). A number -of GNU tools, such as @command{grep} and @command{sed}, have either -implemented this change, or will soon. Thanks to Karl Berry for coining the phrase -``Rational Range Interpretation.''} +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.''} Fortunately, shortly before the final release of @command{gawk} 4.0, the maintainer learned that the 2008 standard had changed the @@ -34374,7 +34378,7 @@ 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 +cases: the default regexp matching; with @option{--traditional} and with @option{--posix}; in all cases, @command{gawk} remains POSIX compliant. @node Contributors @@ -35015,7 +35019,7 @@ please send in a bug report (@pxref{Bugs}). Of course, once you've built @command{gawk}, it is likely that you will wish to install it. To do so, you need to run the command @samp{make -check}, as a user with the appropriate permissions. How to do this +install}, as a user with the appropriate permissions. How to do this varies by system, but on many systems you can use the @command{sudo} command to do so. The command then becomes @samp{sudo make install}. It is likely that you will be asked for your password, and you will have @@ -35341,11 +35345,10 @@ multibyte functionality is not available. @c STARTOFRANGE pcgawon @cindex PC operating systems, @command{gawk} on -With the exception of the Cygwin environment, -the @samp{|&} operator and TCP/IP networking -(@pxref{TCP/IP Networking}) -are not supported for MS-DOS or MS-Windows. EMX (OS/2 only) does support -at least the @samp{|&} operator. +Under MS-DOS and MS-Windows, the Cygwin and MinGW environments support +both the @samp{|&} operator and TCP/IP networking +(@pxref{TCP/IP Networking}). +EMX (OS/2 only) supports at least the @samp{|&} operator. @cindex search paths @cindex search paths, for source files @@ -35475,7 +35478,7 @@ 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 Unix, using the +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: @@ -35491,13 +35494,6 @@ When compared to GNU/Linux on the same system, the @samp{configure} step on Cygwin takes considerably longer. However, it does finish, and then the @samp{make} proceeds as usual. -@quotation NOTE -The @samp{|&} operator and TCP/IP networking -(@pxref{TCP/IP Networking}) -are fully supported in the Cygwin environment. This is not true -for any other environment on MS-Windows. -@end quotation - @node MSYS @appendixsubsubsec Using @command{gawk} In The MSYS Environment @@ -35676,7 +35672,7 @@ add the @command{gawk} and @command{awk} to the system wide @samp{DCLTABLES}. The DCL syntax is documented in the @file{gawk.hlp} file. -Optionally, @file{gawk.hlp} entry can be loaded into a VMS help library: +Optionally, the @file{gawk.hlp} entry can be loaded into a VMS help library: @example $ @kbd{LIBRARY/HELP sys$help:helplib [.vms]gawk.hlp} @@ -36018,7 +36014,7 @@ from GCC (the GNU Compiler Collection) works quite nicely. for a list of extensions in this @command{awk} that are not in POSIX @command{awk}. @cindex Brennan, Michael -@cindex @command{mawk} program +@cindex @command{mawk} utility @cindex source code, @command{mawk} @item @command{mawk} Michael Brennan wrote an independent implementation of @command{awk}, diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 48c09f31..cb9546ea 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -4149,6 +4149,7 @@ in case some option becomes obsolete in a future version of @command{gawk}. @author Obi-Wan @end quotation +@cindex shells, sea This @value{SECTION} intentionally left blank. @@ -4161,7 +4162,7 @@ blank. @table @code @item -W nostalgia @itemx --nostalgia -Print the message @code{"awk: bailing out near line 1"} and dump core. +Print the message @samp{awk: bailing out near line 1} and dump core. This option was inspired by the common behavior of very early versions of Unix @command{awk} and by a t--shirt. The message is @emph{not} subject to translation in non-English locales. @@ -6273,7 +6274,7 @@ $ @kbd{echo a b | gawk 'BEGIN @{ FS = "" @}} @end example @cindex dark corner, @code{FS} as null string -@cindex FS variable, as null string +@cindex @code{FS} variable, as null string Traditionally, the behavior of @code{FS} equal to @code{""} was not defined. In this case, most versions of Unix @command{awk} simply treat the entire record as only having one field. @@ -25618,7 +25619,7 @@ and use translations from @command{awk}. @cindex portable object files @cindex files, portable object Once a program's translatable strings have been marked, they must -be extracted to create the initial @file{.po} file. +be extracted to create the initial @file{.pot} file. As part of translation, it is often helpful to rearrange the order in which arguments to @code{printf} are output. @@ -25713,7 +25714,7 @@ example, @samp{string} is the first argument and @samp{length(string)} is the se @example $ @kbd{gawk 'BEGIN @{} > @kbd{string = "Dont Panic"} -> @kbd{printf _"%2$d characters live in \"%1$s\"\n",} +> @kbd{printf "%2$d characters live in \"%1$s\"\n",} > @kbd{string, length(string)} > @kbd{@}'} @print{} 10 characters live in "Dont Panic" @@ -25747,7 +25748,7 @@ This is somewhat counterintuitive. and those with positional specifiers in the same string: @example -$ @kbd{gawk 'BEGIN @{ printf _"%d %3$s\n", 1, 2, "hi" @}'} +$ @kbd{gawk 'BEGIN @{ printf "%d %3$s\n", 1, 2, "hi" @}'} @error{} gawk: cmd. line:1: fatal: must use `count$' on all formats or none @end example @@ -26163,12 +26164,13 @@ as our example. @node Debugger Invocation @subsection How to Start the Debugger -Starting the debugger is almost exactly like running @command{awk}, 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.) In our case, -we invoke the debugger like this: +Starting the debugger is almost exactly like running @command{gawk}, +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.) +In our case, we invoke the debugger like this: @example $ @kbd{gawk -D -f getopt.awk -f join.awk -f uniq.awk inputfile} @@ -26301,7 +26303,7 @@ gawk> @kbd{p NR} @noindent So we can see that @code{are_equal()} was only called for the second record -of the file. Of course, this is because our program contained a rule for +of the file. Of course, this is because our program contains a rule for @samp{NR == 1}: @example @@ -28468,7 +28470,7 @@ to begin with: gawk -M 'BEGIN @{ n = 13.0; print n % 2.0 @}' @end example -Note that for the particular example above, there is likely best +Note that for the particular example above, it is likely best to just use the following: @example @@ -28813,6 +28815,8 @@ the macros as if they were functions. @node General Data Types @subsection General Purpose Data Types +@cindex Robbins, Arnold +@cindex Ramey, Chet @quotation @i{I have a true love/hate relationship with unions.} @author Arnold Robbins @@ -29140,7 +29144,7 @@ Letter case in function names is significant. This is a pointer to the C function that provides the desired functionality. The function must fill in the result with either a number -or a string. @command{awk} takes ownership of any string memory. +or a string. @command{gawk} takes ownership of any string memory. As mentioned earlier, string memory @strong{must} come from @code{malloc()}. The @code{num_actual_args} argument tells the C function how many @@ -31210,7 +31214,7 @@ do_stat(int nargs, awk_value_t *result) awk_array_t array; int ret; struct stat sbuf; - /* default is stat() */ + /* default is lstat() */ int (*statfunc)(const char *path, struct stat *sbuf) = lstat; assert(result != NULL); @@ -31438,7 +31442,7 @@ upon success or less than zero upon error. In the latter case it updates @code{ERRNO}. @cindex @code{stat()} extension function -@item result = stat("/some/path", statdata [, follow]) +@item result = stat("/some/path", statdata @r{[}, follow@r{]}) The @code{stat()} function provides a hook into the @code{stat()} system call. It returns zero upon success or less than zero upon error. @@ -31648,19 +31652,23 @@ See @file{test/fts.awk} in the @command{gawk} distribution for an example. @node Extension Sample Fnmatch @subsection Interface To @code{fnmatch()} -@cindex @code{fnmatch()} extension function This extension provides an interface to the C library @code{fnmatch()} function. The usage is: -@example -@@load "fnmatch" +@table @code +@item @@load "fnmatch" +This is how you load the extension. -result = fnmatch(pattern, string, flags) -@end example +@cindex @code{fnmatch()} extension function +@item result = fnmatch(pattern, string, flags) +The return value is zero on success, @code{FNM_NOMATCH} +if the string did not match the pattern, or +a different non-zero value if an error occurred. +@end table -The @code{fnmatch} extension adds a single function named -@code{fnmatch()}, one constant (@code{FNM_NOMATCH}), and an array of -flag values named @code{FNM}. +Besides the @code{fnmatch()} function, the @code{fnmatch} extension +adds one constant (@code{FNM_NOMATCH}), and an array of flag values +named @code{FNM}. The arguments to @code{fnmatch()} are: @@ -31676,10 +31684,6 @@ Either zero, or the bitwise OR of one or more of the flags in the @code{FNM} array. @end table -The return value is zero on success, @code{FNM_NOMATCH} -if the string did not match the pattern, or -a different non-zero value if an error occurred. - The flags are follows: @multitable @columnfractions .25 .75 @@ -31723,15 +31727,15 @@ 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 the zero in the -child and the process-id number of the child in the parent, or @minus{}1 +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 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. @@ -33355,7 +33359,7 @@ The @option{-i} and @option{--include} options load @command{awk} library files. @item -The @option{-l} and @option{--load} options for load compiled dynamic extensions. +The @option{-l} and @option{--load} options load compiled dynamic extensions. @item The @option{-M} and @option{--bignum} options enable MPFR. @@ -33376,7 +33380,7 @@ Support for high precision arithmetic with MPFR. @item The @code{and()}, @code{or()} and @code{xor()} functions -allow any number of arguments, +changed to allow any number of arguments, with a minimum of two (@pxref{Bitwise Functions}). @@ -33401,18 +33405,18 @@ the three most widely-used freely available versions of @command{awk} @multitable {@file{/dev/stderr} special file} {BWK Awk} {Mawk} {GNU Awk} @headitem Feature @tab BWK Awk @tab Mawk @tab GNU Awk @item @samp{\x} Escape sequence @tab X @tab X @tab X -@item @code{RS} as regexp @tab @tab X @tab X @item @code{FS} as null string @tab X @tab X @tab X @item @file{/dev/stdin} special file @tab X @tab X @tab X @item @file{/dev/stdout} special file @tab X @tab X @tab X @item @file{/dev/stderr} special file @tab X @tab X @tab X -@item @code{**} and @code{**=} operators @tab X @tab @tab X -@item @code{fflush()} function @tab X @tab X @tab X -@item @code{func} keyword @tab X @tab @tab X -@item @code{nextfile} statement @tab X @tab X @tab X @item @code{delete} without subscript @tab X @tab X @tab X +@item @code{fflush()} function @tab X @tab X @tab X @item @code{length()} of an array @tab X @tab X @tab X +@item @code{nextfile} statement @tab X @tab X @tab X +@item @code{**} and @code{**=} operators @tab X @tab @tab X +@item @code{func} keyword @tab X @tab @tab X @item @code{BINMODE} variable @tab @tab X @tab X +@item @code{RS} as regexp @tab @tab X @tab X @item Time related functions @tab @tab X @tab X @end multitable @@ -33501,10 +33505,10 @@ the @command{gawk} maintainer grew weary of trying to explain that was in the user's locale. During the development of version 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 Campain for Rational Range Interpretation (or RRI). A number -of GNU tools, such as @command{grep} and @command{sed}, have either -implemented this change, or will soon. Thanks to Karl Berry for coining the phrase -``Rational Range Interpretation.''} +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.''} Fortunately, shortly before the final release of @command{gawk} 4.0, the maintainer learned that the 2008 standard had changed the @@ -33517,7 +33521,7 @@ 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 +cases: the default regexp matching; with @option{--traditional} and with @option{--posix}; in all cases, @command{gawk} remains POSIX compliant. @node Contributors @@ -34158,7 +34162,7 @@ please send in a bug report (@pxref{Bugs}). Of course, once you've built @command{gawk}, it is likely that you will wish to install it. To do so, you need to run the command @samp{make -check}, as a user with the appropriate permissions. How to do this +install}, as a user with the appropriate permissions. How to do this varies by system, but on many systems you can use the @command{sudo} command to do so. The command then becomes @samp{sudo make install}. It is likely that you will be asked for your password, and you will have @@ -34484,11 +34488,10 @@ multibyte functionality is not available. @c STARTOFRANGE pcgawon @cindex PC operating systems, @command{gawk} on -With the exception of the Cygwin environment, -the @samp{|&} operator and TCP/IP networking -(@pxref{TCP/IP Networking}) -are not supported for MS-DOS or MS-Windows. EMX (OS/2 only) does support -at least the @samp{|&} operator. +Under MS-DOS and MS-Windows, the Cygwin and MinGW environments support +both the @samp{|&} operator and TCP/IP networking +(@pxref{TCP/IP Networking}). +EMX (OS/2 only) supports at least the @samp{|&} operator. @cindex search paths @cindex search paths, for source files @@ -34618,7 +34621,7 @@ 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 Unix, using the +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: @@ -34634,13 +34637,6 @@ When compared to GNU/Linux on the same system, the @samp{configure} step on Cygwin takes considerably longer. However, it does finish, and then the @samp{make} proceeds as usual. -@quotation NOTE -The @samp{|&} operator and TCP/IP networking -(@pxref{TCP/IP Networking}) -are fully supported in the Cygwin environment. This is not true -for any other environment on MS-Windows. -@end quotation - @node MSYS @appendixsubsubsec Using @command{gawk} In The MSYS Environment @@ -34819,7 +34815,7 @@ add the @command{gawk} and @command{awk} to the system wide @samp{DCLTABLES}. The DCL syntax is documented in the @file{gawk.hlp} file. -Optionally, @file{gawk.hlp} entry can be loaded into a VMS help library: +Optionally, the @file{gawk.hlp} entry can be loaded into a VMS help library: @example $ @kbd{LIBRARY/HELP sys$help:helplib [.vms]gawk.hlp} @@ -35161,7 +35157,7 @@ from GCC (the GNU Compiler Collection) works quite nicely. for a list of extensions in this @command{awk} that are not in POSIX @command{awk}. @cindex Brennan, Michael -@cindex @command{mawk} program +@cindex @command{mawk} utility @cindex source code, @command{mawk} @item @command{mawk} Michael Brennan wrote an independent implementation of @command{awk}, -- cgit v1.2.3 From 0b27d28fad7db725bb6a72c025c91ac39f5eeaf3 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 28 Feb 2014 14:22:43 +0200 Subject: Sync dfa with grep, update a test. --- ChangeLog | 5 ++ dfa.c | 142 ++++++++++++++++++++++++++++--------------------------- test/ChangeLog | 4 ++ test/regrange.ok | 2 +- 4 files changed, 83 insertions(+), 70 deletions(-) diff --git a/ChangeLog b/ChangeLog index 507cd3e7..965cd1f7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-02-28 Arnold D. Robbins + + * dfa.c: Sync with grep. Looks like good improvement with + respect to bracket expressions. + 2014-02-27 Arnold D. Robbins Fixes for enum/int mismatches as warned by some compilers. diff --git a/dfa.c b/dfa.c index 03a61878..2e9d2fd0 100644 --- a/dfa.c +++ b/dfa.c @@ -219,7 +219,8 @@ enum EMPTY = NOTCHAR, /* EMPTY is a terminal symbol that matches the empty string. */ - BACKREF, /* BACKREF is generated by \; it + BACKREF, /* BACKREF is generated by \ + or by any other construct that is not completely handled. If the scanner detects a transition on backref, it returns a kind of "semi-success" indicating that @@ -811,6 +812,45 @@ using_utf8 (void) return utf8; } +/* Return true if the current locale is known to be a unibyte locale + without multicharacter collating sequences and where range + comparisons simply use the native encoding. These locales can be + processed more efficiently. */ + +static bool +using_simple_locale (void) +{ + /* True if the native character set is known to be compatible with + the C locale. The following test isn't perfect, but it's good + enough in practice, as only ASCII and EBCDIC are in common use + and this test correctly accepts ASCII and rejects EBCDIC. */ + enum { native_c_charset = + ('\b' == 8 && '\t' == 9 && '\n' == 10 && '\v' == 11 && '\f' == 12 + && '\r' == 13 && ' ' == 32 && '!' == 33 && '"' == 34 && '#' == 35 + && '%' == 37 && '&' == 38 && '\'' == 39 && '(' == 40 && ')' == 41 + && '*' == 42 && '+' == 43 && ',' == 44 && '-' == 45 && '.' == 46 + && '/' == 47 && '0' == 48 && '9' == 57 && ':' == 58 && ';' == 59 + && '<' == 60 && '=' == 61 && '>' == 62 && '?' == 63 && 'A' == 65 + && 'Z' == 90 && '[' == 91 && '\\' == 92 && ']' == 93 && '^' == 94 + && '_' == 95 && 'a' == 97 && 'z' == 122 && '{' == 123 && '|' == 124 + && '}' == 125 && '~' == 126) + }; + + if (! native_c_charset || MB_CUR_MAX > 1) + return false; + else + { + static int unibyte_c = -1; + if (unibyte_c < 0) + { + char *locale = setlocale (LC_ALL, 0); + unibyte_c = (locale && (STREQ (locale, "C") + || STREQ (locale, "POSIX"))); + } + return unibyte_c; + } +} + /* Lexical analyzer. All the dross that deals with the obnoxious GNU Regex syntax bits is located here. The poor, suffering reader is referred to the GNU Regex documentation for the @@ -928,7 +968,7 @@ static const struct dfa_ctype prednames[] = { {"upper", isupper, false}, {"lower", islower, false}, {"digit", isdigit, true}, - {"xdigit", isxdigit, true}, + {"xdigit", isxdigit, false}, {"space", isspace, false}, {"punct", ispunct, false}, {"alnum", isalnum, false}, @@ -959,6 +999,10 @@ parse_bracket_exp (void) int c, c1, c2; charclass ccl; + /* True if this is a bracket expression that dfaexec is known to + process correctly. */ + bool known_bracket_exp = true; + /* Used to warn about [:space:]. Bit 0 = first character is a colon. Bit 1 = last character is a colon. @@ -1000,6 +1044,7 @@ parse_bracket_exp (void) { FETCH_WC (c, wc, _("unbalanced [")); invert = 1; + known_bracket_exp = using_simple_locale (); } else invert = 0; @@ -1014,16 +1059,14 @@ parse_bracket_exp (void) we just treat it as a bunch of ordinary characters. We can do this because we assume regex has checked for syntax errors before dfa is ever called. */ - if (c == '[' && (syntax_bits & RE_CHAR_CLASSES)) + if (c == '[') { #define MAX_BRACKET_STRING_LEN 32 char str[MAX_BRACKET_STRING_LEN + 1]; FETCH_WC (c1, wc1, _("unbalanced [")); - /* If pattern contains '[[:', '[[.', or '[[='. */ - if (c1 == ':' - /* TODO: handle '[[.' and '[[=' also for MB_CUR_MAX == 1. */ - || (MB_CUR_MAX > 1 && (c1 == '.' || c1 == '='))) + if ((c1 == ':' && (syntax_bits & RE_CHAR_CLASSES)) + || c1 == '.' || c1 == '=') { size_t len = 0; for (;;) @@ -1042,7 +1085,10 @@ parse_bracket_exp (void) /* Fetch bracket. */ FETCH_WC (c, wc, _("unbalanced [")); if (c1 == ':') - /* build character class. */ + /* Build character class. POSIX allows character + classes to match multicharacter collating elements, + but the regex code does not support that, so do not + worry about that possibility. */ { char const *class = (case_fold && (STREQ (str, "upper") @@ -1066,28 +1112,9 @@ parse_bracket_exp (void) if (pred->func (c2)) setbit_case_fold_c (c2, ccl); } + else + known_bracket_exp = false; - else if (MBS_SUPPORT && (c1 == '=' || c1 == '.')) - { - char *elem = xmemdup (str, len + 1); - - if (c1 == '=') - /* build equivalence class. */ - { - REALLOC_IF_NECESSARY (work_mbc->equivs, - equivs_al, work_mbc->nequivs + 1); - work_mbc->equivs[work_mbc->nequivs++] = elem; - } - - if (c1 == '.') - /* build collating element. */ - { - REALLOC_IF_NECESSARY (work_mbc->coll_elems, - coll_elems_al, - work_mbc->ncoll_elems + 1); - work_mbc->coll_elems[work_mbc->ncoll_elems++] = elem; - } - } colon_warning_state |= 8; /* Fetch new lookahead character. */ @@ -1109,6 +1136,16 @@ parse_bracket_exp (void) /* build range characters. */ { FETCH_WC (c2, wc2, _("unbalanced [")); + + /* A bracket expression like [a-[.aa.]] matches an unknown set. + Treat it like [-a[.aa.]] while parsing it, and + remember that the set is unknown. */ + if (c2 == '[' && *lexptr == '.') + { + known_bracket_exp = false; + c2 = ']'; + } + if (c2 == ']') { /* In the case [x-], the - is an ordinary hyphen, @@ -1146,47 +1183,11 @@ parse_bracket_exp (void) work_mbc->range_ends[work_mbc->nranges++] = towupper (wc2); } } + else if (using_simple_locale ()) + for (; c <= c2; c++) + setbit_case_fold_c (c, ccl); else - { -#ifdef GAWK - c1 = c; - if (case_fold) - { - c1 = tolower (c1); - c2 = tolower (c2); - } - for (c = c1; c <= c2; c++) - setbit_case_fold_c (c, ccl); -#else - /* Defer to the system regex library about the meaning - of range expressions. */ - struct re_pattern_buffer re = { 0 }; - char const *compile_msg; -#if 199901 <= __STDC_VERSION__ - char pattern[] = { '[', '\\', c, '-', '\\', c2, ']' }; -#else - char pattern[] = { '[', '\\', 0, '-', '\\', 0, ']' }; - pattern[2] = c; - pattern[5] = c2; -#endif - re_set_syntax (syntax_bits | RE_BACKSLASH_ESCAPE_IN_LISTS); - compile_msg = re_compile_pattern (pattern, sizeof pattern, &re); - if (compile_msg) - dfaerror (compile_msg); - for (c = 0; c < NOTCHAR; c++) - { - char subject = c; - switch (re_match (&re, &subject, 1, 0, NULL)) - { - case 1: setbit (c, ccl); break; - case -1: break; - default: xalloc_die (); - } - } - regfree (&re); - re_set_syntax (syntax_bits); -#endif - } + known_bracket_exp = false; colon_warning_state |= 8; FETCH_WC (c1, wc1, _("unbalanced [")); @@ -1224,6 +1225,9 @@ parse_bracket_exp (void) if (colon_warning_state == 7) dfawarn (_("character class syntax is [[:space:]], not [:space:]")); + if (! known_bracket_exp) + return BACKREF; + if (MB_CUR_MAX > 1) { static charclass zeroclass; diff --git a/test/ChangeLog b/test/ChangeLog index 18b912dd..ab7ff0f2 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2014-02-28 Arnold D. Robbins + + * regrange.ok: Update after code improvements. + 2014-02-03 Stepan Kasal * strftime.awk: the default format uses %e, not %d (Introduced on diff --git a/test/regrange.ok b/test/regrange.ok index 1fa00c70..ae8c6499 100644 --- a/test/regrange.ok +++ b/test/regrange.ok @@ -3,4 +3,4 @@ "c" ~ /[[a-d]/ --> 1 "\" ~ /[\[-\]]/ --> 1 "[.c.]" ~ /[a-[.e.]]/ --> 1 -"[.d.]" ~ /[[.c.]-[.z.]]/ --> 0 +"[.d.]" ~ /[[.c.]-[.z.]]/ --> 1 -- cgit v1.2.3 From 4bd44218e46dd480a9fa2fa422a1cd58566f2aa9 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 28 Feb 2014 15:00:34 +0200 Subject: Updated CA translation. --- po/ca.po | 801 +++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 396 insertions(+), 405 deletions(-) diff --git a/po/ca.po b/po/ca.po index 3d9564e7..fa0f6328 100644 --- a/po/ca.po +++ b/po/ca.po @@ -8,7 +8,7 @@ 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" -"PO-Revision-Date: 2014-02-10 07:25+0100\n" +"PO-Revision-Date: 2014-02-26 20:18+0100\n" "Last-Translator: Walter Garcia-Fontes \n" "Language-Team: Catalan \n" "Language: ca\n" @@ -75,29 +75,29 @@ msgstr "asort: el primer argument no #: array.c:831 msgid "asort: cannot use a subarray of first arg for second arg" -msgstr "" +msgstr "asort: no es pot usar una submatriu com a primer argument per al segon argument" #: array.c:832 msgid "asorti: cannot use a subarray of first arg for second arg" -msgstr "" +msgstr "asorti: no es pot usar una submatriu com a primer argument per al segon argument" #: array.c:837 msgid "asort: cannot use a subarray of second arg for first arg" -msgstr "" +msgstr "asort: no es pot usar una submatriu com a segon argument per al primer argument" #: array.c:838 msgid "asorti: cannot use a subarray of second arg for first arg" -msgstr "" +msgstr "asorti: no es pot usar una submatriu com a segon argument per al primer argument" #: array.c:1314 #, c-format msgid "`%s' is invalid as a function name" -msgstr "" +msgstr "`%s' no és vàlid com a nom de funció" #: array.c:1318 #, c-format msgid "sort comparison function `%s' is not defined" -msgstr "la funció de commparació d'ordenació `%s' no està definida" +msgstr "la funció de comparació d'ordenació `%s' no està definida" #: awkgram.y:233 #, c-format @@ -124,16 +124,16 @@ msgstr "la constant d'expressi #: awkgram.y:423 #, 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" +msgstr "la constant d'expressió regular `/%s/' sembla un comentari en C, però no ho és" #: awkgram.y:515 #, c-format msgid "duplicate case values in switch body: %s" -msgstr "" +msgstr "valors duplicats de casos al cos de l'expressió switch: %s" #: awkgram.y:536 msgid "duplicate `default' detected in switch body" -msgstr "" +msgstr "s'ha detectat el cas predeterminat `default' duplicat a l'expressió switch " #: awkgram.y:796 awkgram.y:3699 msgid "`break' is not allowed outside a loop or switch" @@ -163,15 +163,15 @@ msgstr "el `print' #: awkgram.y:988 awkgram.y:1037 msgid "`delete' is not allowed with SYMTAB" -msgstr "" +msgstr "no es permet `delete' amb SYMTAB" #: awkgram.y:990 awkgram.y:1039 msgid "`delete' is not allowed with FUNCTAB" -msgstr "" +msgstr "no es permet `delete' a FUNCTAB" #: awkgram.y:1024 awkgram.y:1028 msgid "`delete(array)' is a non-portable tawk extension" -msgstr "`delete(array)' és una extenció tawk no portable" +msgstr "`delete(array)' és una extensió tawk no portable" #: awkgram.y:1149 msgid "multistage two-way pipelines don't work" @@ -191,7 +191,7 @@ msgstr "l'antic awk no d #: awkgram.y:1301 msgid "regular expression on right of comparison" -msgstr "expressió regular a la derta de la comparació" +msgstr "expressió regular a la dreta de la comparació" #: awkgram.y:1417 #, c-format @@ -222,19 +222,19 @@ msgstr "les crides a funcions indirectes s #: awkgram.y:1620 #, c-format msgid "can not use special variable `%s' for indirect function call" -msgstr "" +msgstr "no es pot usar la variable especial `%s' per a una crida indirecta de funció" #: awkgram.y:1698 msgid "invalid subscript expression" -msgstr "expressió de subscript no vàlida" +msgstr "expressió de subíndex no vàlida" #: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " -msgstr "ADVERTIMENT: " +msgstr "advertiment: " #: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " -msgstr "Fatal: " +msgstr "fatal: " #: awkgram.y:2092 msgid "unexpected newline or end of string" @@ -258,7 +258,7 @@ msgstr "motiu desconegut" #: awkgram.y:2371 awkgram.y:2395 #, c-format msgid "can't include `%s' and use it as a program file" -msgstr "" +msgstr "no es pot incloure `%s' i usar-lo com un fitxer de programa" #: awkgram.y:2384 #, c-format @@ -268,7 +268,7 @@ msgstr "ja s'ha incl #: awkgram.y:2385 #, c-format msgid "already loaded shared library `%s'" -msgstr "" +msgstr "ja s'ha carregat la biblioteca compartida `%s'" #: awkgram.y:2420 msgid "@include is a gawk extension" @@ -276,7 +276,7 @@ msgstr "@include #: awkgram.y:2426 msgid "empty filename after @include" -msgstr "" +msgstr "nom de fitxer buit després de @include" #: awkgram.y:2470 msgid "@load is a gawk extension" @@ -284,7 +284,7 @@ msgstr "@load #: awkgram.y:2476 msgid "empty filename after @load" -msgstr "" +msgstr "fitxer buit després de @load" #: awkgram.y:2610 msgid "empty program text on command line" @@ -311,12 +311,12 @@ msgstr "expressi #: awkgram.y:3042 #, c-format msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk" -msgstr "" +msgstr "%s: %d: el modificador regex tawk `/.../%c' no funciona a gawk" #: awkgram.y:3046 #, c-format msgid "tawk regex modifier `/.../%c' doesn't work in gawk" -msgstr "" +msgstr "el modificador regex tawk `/.../%c' no funciona a gawk" #: awkgram.y:3053 msgid "unterminated regexp" @@ -384,7 +384,7 @@ msgstr "`%s' no est #: awkgram.y:3729 msgid "`goto' considered harmful!\n" -msgstr "`goto' se considera nefast!\n" +msgstr "`goto' es considera perjudicial!\n" #: awkgram.y:3763 #, c-format @@ -419,7 +419,7 @@ msgstr "l' #: awkgram.y:3992 msgid "index: regexp constant as second argument is not allowed" -msgstr "índex: no es permert una constant regexp com a segon argument" +msgstr "índex: no es permet una constant regexp com a segon argument" #: awkgram.y:4045 #, c-format @@ -442,11 +442,11 @@ msgstr "%s: tancament erroni (%s)" #: awkgram.y:4136 msgid "shadow_funcs() called twice!" -msgstr "shadow_funcs() crida dos vegades!" +msgstr "shadow_funcs() s'ha cridat dues vegades!" #: awkgram.y:4144 msgid "there were shadowed variables." -msgstr "" +msgstr "hi ha hagut variables a l'ombra" #: awkgram.y:4215 #, c-format @@ -503,7 +503,7 @@ msgstr "s'ha intentat una divisi #: awkgram.y:5025 msgid "cannot assign a value to the result of a field post-increment expression" -msgstr "" +msgstr "no es pot assignar un valor al resultat d'una expressió post-increment de camp" #: awkgram.y:5028 #, c-format @@ -517,7 +517,7 @@ msgstr "%s a \"%s\" ha fallat (%s)" #: builtin.c:134 msgid "standard output" -msgstr "eixida estàndard" +msgstr "sortida estàndard" #: builtin.c:148 msgid "exp: received non-numeric argument" @@ -578,22 +578,22 @@ msgstr "log: s'ha rebut l'argument negatiu %g" #: builtin.c:776 builtin.c:781 msgid "fatal: must use `count$' on all formats or none" -msgstr "" +msgstr "fatal: s'ha d'usar `count$' a tots els format o a cap" #: builtin.c:851 #, c-format msgid "field width is ignored for `%%' specifier" -msgstr "" +msgstr "l'amplada de camp s'ignorarà per a l'especificador `%%'" #: builtin.c:853 #, c-format msgid "precision is ignored for `%%' specifier" -msgstr "" +msgstr "la precisió s'ignorarà per a l'especificador `%%'" #: builtin.c:855 #, c-format msgid "field width and precision are ignored for `%%' specifier" -msgstr "" +msgstr "l'amplada de camp i la precisió s'ignoraran per a l'especificador `%%'" #: builtin.c:906 msgid "fatal: `$' is not permitted in awk formats" @@ -622,7 +622,7 @@ msgstr "`l' manca de significat en els formats awk; ser #: builtin.c:1015 msgid "fatal: `l' is not permitted in POSIX awk formats" -msgstr "fatal: `l' no està permés en els formats POSIX de awk" +msgstr "fatal: `l' no està permès en els formats POSIX de awk" #: builtin.c:1028 msgid "`L' is meaningless in awk formats; ignored" @@ -630,7 +630,7 @@ msgstr "`L' manca de significat en els formats awk; ser #: builtin.c:1032 msgid "fatal: `L' is not permitted in POSIX awk formats" -msgstr "fatal: `L' no està permés en els formats POSIX de awk" +msgstr "fatal: `L' no està permès en els formats POSIX de awk" #: builtin.c:1045 msgid "`h' is meaningless in awk formats; ignored" @@ -638,17 +638,17 @@ msgstr "`h' manca de significat en els formats awk; ser #: builtin.c:1049 msgid "fatal: `h' is not permitted in POSIX awk formats" -msgstr "fatal: `h' no està permés en els formats POSIX de awk" +msgstr "fatal: `h' no està permès en els formats POSIX de awk" #: builtin.c:1447 #, c-format msgid "[s]printf: value %g is out of range for `%%%c' format" -msgstr "" +msgstr "[s]printf: el valor %g està fora de rang per al format `%%%c'" #: builtin.c:1545 #, c-format msgid "ignoring unknown format specifier character `%c': no argument converted" -msgstr "" +msgstr "s'ignorarà el caràcter especificador de format `%c': no s'ha convertit cap argument" #: builtin.c:1550 msgid "fatal: not enough arguments to satisfy format string" @@ -701,7 +701,7 @@ msgstr "substr: la longitud sobre un nombre no enter %g ser #: builtin.c:1744 #, c-format msgid "substr: length %g too big for string indexing, truncating to %g" -msgstr "" +msgstr "substr: la llargada %g és massa gran per a la indexació de cadenes de caràcters, es truncarà a %g" #: builtin.c:1756 #, c-format @@ -725,11 +725,11 @@ msgstr "substr: l' #: builtin.c:1810 #, c-format msgid "substr: length %g at start index %g exceeds length of first argument (%lu)" -msgstr "substr: la longitud %g a l'índex d'inici %g excedeix la longitud del 1er argument (%lu)" +msgstr "substr: la longitud %g a l'índex d'inici %g excedeix la longitud del primer argument (%lu)" #: builtin.c:1884 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" -msgstr "" +msgstr "strftime: el valor de format a PROCINFO[\"strftime\"] té tipus numèric" #: builtin.c:1907 msgid "strftime: received non-numeric second argument" @@ -737,7 +737,7 @@ msgstr "strftime: s'ha rebut un segon argument no num #: builtin.c:1911 msgid "strftime: second argument less than 0 or too big for time_t" -msgstr "" +msgstr "strftime: el segon argument és més petit que 0 o massa gran per a time_t" #: builtin.c:1918 msgid "strftime: received non-string first argument" @@ -753,11 +753,11 @@ msgstr "mktime: s'ha rebut un argument que no #: builtin.c:2008 msgid "mktime: at least one of the values is out of the default range" -msgstr "" +msgstr "mktime: almenys un dels valors està forra del rang predeterminat" #: builtin.c:2043 msgid "'system' function not allowed in sandbox mode" -msgstr "" +msgstr "la funció 'system' no es permet fora del mode entorn de proves" #: builtin.c:2048 msgid "system: received non-string argument" @@ -914,7 +914,7 @@ msgstr "dcgettext: `%s' no #: command.y:225 #, c-format msgid "Type (g)awk statement(s). End with the command \"end\"\n" -msgstr "" +msgstr "Escriviu proposició(ns) g(awk). Termineu amb la instrucció \"end\"\n" #: command.y:289 #, c-format @@ -929,42 +929,42 @@ msgstr "info: opci #: command.y:321 #, c-format msgid "source \"%s\": already sourced." -msgstr "" +msgstr "source \"%s\": ja s'ha utilitzat." #: command.y:326 #, c-format msgid "save \"%s\": command not permitted." -msgstr "" +msgstr "save \"%s\": ordre no permesa." #: command.y:339 msgid "Can't use command `commands' for breakpoint/watchpoint commands" -msgstr "" +msgstr "No es pot usar l'ordre `commands' per a ordres de punt d'interrupció/inspecció" #: command.y:341 msgid "no breakpoint/watchpoint has been set yet" -msgstr "" +msgstr "no s'ha establert encara cap punt d'interrupció/verificació" #: command.y:343 msgid "invalid breakpoint/watchpoint number" -msgstr "" +msgstr "número de punt d'interrupció/inspecció no vàlid" #: command.y:348 #, c-format msgid "Type commands for when %s %d is hit, one per line.\n" -msgstr "" +msgstr "Escriviu les ordres per a quan s'assoleix %s %d, una per línia.\n" #: command.y:350 #, c-format msgid "End with the command \"end\"\n" -msgstr "" +msgstr "Termineu amb l'ordre \"end\"\n" #: command.y:357 msgid "`end' valid only in command `commands' or `eval'" -msgstr "" +msgstr "`end' és vàlid sols a les ordres `commands' o `eval'" #: command.y:367 msgid "`silent' valid only in command `commands'" -msgstr "" +msgstr "`silent' és vàlid sols a l'ordre `commands'" #: command.y:373 #, c-format @@ -973,7 +973,7 @@ msgstr "tra #: command.y:387 msgid "condition: invalid breakpoint/watchpoint number" -msgstr "" +msgstr "condició: número de punt d'interrupció/inspecció no vàlid" #: command.y:449 msgid "argument not a string" @@ -982,12 +982,12 @@ msgstr "l'argument no #: command.y:459 command.y:464 #, c-format msgid "option: invalid parameter - \"%s\"" -msgstr "" +msgstr "opció: paràmetre no vàlid - \"%s\"" #: command.y:474 #, c-format msgid "no such function - \"%s\"" -msgstr "" +msgstr "no existeix aquesta funció - \"%s\"" #: command.y:531 #, c-format @@ -1001,194 +1001,194 @@ msgstr "especificaci #: command.y:659 msgid "non-numeric value for field number" -msgstr "" +msgstr "valor no numèric per al número de camp" #: command.y:680 command.y:687 msgid "non-numeric value found, numeric expected" -msgstr "" +msgstr "s'ha trobat un valor no numèric, s'esperava un valor numèric" #: command.y:712 command.y:718 msgid "non-zero integer value" -msgstr "" +msgstr "valor enter no zero" #: command.y:817 msgid "backtrace [N] - print trace of all or N innermost (outermost if N < 0) frames." -msgstr "" +msgstr "backtrace [N] - imprimeix la traça de tot els N marcs interiors (exteriors si N < 0)." #: command.y:819 msgid "break [[filename:]N|function] - set breakpoint at the specified location." -msgstr "" +msgstr "break [[fitxer:]N|funció] - estableix el punt d'interrupció a la ubicació especificada." #: command.y:821 msgid "clear [[filename:]N|function] - delete breakpoints previously set." -msgstr "" +msgstr "clear [[fitxer:]N|funció] - suprimeix els punts establerts prèviament." #: command.y:823 msgid "commands [num] - starts a list of commands to be executed at a breakpoint(watchpoint) hit." -msgstr "" +msgstr "commands [num] - inicia una llista d'ordres a executar quan s'arribi a un punt d'interrupció/inspecció." #: command.y:825 msgid "condition num [expr] - set or clear breakpoint or watchpoint condition." -msgstr "" +msgstr "condition num [expr] - estableix o neteja una condició de punt d'interrupció o d'inspecció." #: command.y:827 msgid "continue [COUNT] - continue program being debugged." -msgstr "" +msgstr "continue [RECOMPTE] - continua el programa que s'està depurant." #: command.y:829 msgid "delete [breakpoints] [range] - delete specified breakpoints." -msgstr "" +msgstr "delete [punts d'interrupció] [rang] - esborra els punts d'interrupció especificats." #: command.y:831 msgid "disable [breakpoints] [range] - disable specified breakpoints." -msgstr "" +msgstr "disable [punts d'interrupció] [rang] - deshabilita els punts d'interrupció especificats." #: command.y:833 msgid "display [var] - print value of variable each time the program stops." -msgstr "" +msgstr "display [var] - imprimeix el valor de la variable cada cop que el programa s'atura" #: command.y:835 msgid "down [N] - move N frames down the stack." -msgstr "" +msgstr "down [N] - mou N marcs cap a baix a la pila." #: command.y:837 msgid "dump [filename] - dump instructions to file or stdout." -msgstr "" +msgstr "dump [filename] - aboca les instruccions a un fitxer o a la sortida estàndard." #: command.y:839 msgid "enable [once|del] [breakpoints] [range] - enable specified breakpoints." -msgstr "" +msgstr "enable [once|del] [punts d'interrupció] [rang] - habilita els punts d'interrupció especificats." #: command.y:841 msgid "end - end a list of commands or awk statements." -msgstr "" +msgstr "end - finalitza una llista de ordres o declaracions awk." #: command.y:843 msgid "eval stmt|[p1, p2, ...] - evaluate awk statement(s)." -msgstr "" +msgstr "eval stmt|[p1, p2, ...] - avalua la(es) declaració(ns) awk." #: command.y:845 msgid "finish - execute until selected stack frame returns." -msgstr "" +msgstr "finish - executa fins que hi hagi un retorn del marc de pila seleccionat." #: command.y:847 msgid "frame [N] - select and print stack frame number N." -msgstr "" +msgstr "frame [N] - selecciona i imprimeix el marc de pila amb número N." #: command.y:849 msgid "help [command] - print list of commands or explanation of command." -msgstr "" +msgstr "help [ordre] - imprimeix una llista d'ordres o una explica de l'ordre." #: command.y:851 msgid "ignore N COUNT - set ignore-count of breakpoint number N to COUNT." -msgstr "" +msgstr "ignore N RECOMPTE - estableix ignore-count del punt d'interrupció número N fins RECOMPTE." #: command.y:853 msgid "info topic - source|sources|variables|functions|break|frame|args|locals|display|watch." -msgstr "" +msgstr "info topic - source|sources|variables|functions|break|frame|args|locals|display|watch." #: command.y:855 msgid "list [-|+|[filename:]lineno|function|range] - list specified line(s)." -msgstr "" +msgstr "list [-|+|[fitxer:]número-de-línia|funció|rang] - fes una llista la(es) línia(es) especificada(es)." #: command.y:857 msgid "next [COUNT] - step program, proceeding through subroutine calls." -msgstr "" +msgstr "next [RECOMPTE] - avança el programa pas per pas, tot procedint a través de les crides de subrutines." #: command.y:859 msgid "nexti [COUNT] - step one instruction, but proceed through subroutine calls." -msgstr "" +msgstr "nexti [RECOMPTE] - avança una instrucció, però procedeix a través de crides de subrutines." #: command.y:861 msgid "option [name[=value]] - set or display debugger option(s)." -msgstr "" +msgstr "option [nom[=valor]] - estableix o mostra la(es) opció(ns) del depurador." #: command.y:863 msgid "print var [var] - print value of a variable or array." -msgstr "" +msgstr "print var [var] - imprimeix el valor de la variable o matriu." #: command.y:865 msgid "printf format, [arg], ... - formatted output." -msgstr "" +msgstr "printf format, [arg], ... - sortida amb format." #: command.y:867 msgid "quit - exit debugger." -msgstr "" +msgstr "quit - surt del depurador." #: command.y:869 msgid "return [value] - make selected stack frame return to its caller." -msgstr "" +msgstr "return [valor] - fes que el marc seleccionat de pila retorni a l'element que l'ha cridat." #: command.y:871 msgid "run - start or restart executing program." -msgstr "" +msgstr "run - inicia o reinicia el programa que s'està executant." #: command.y:874 msgid "save filename - save commands from the session to file." -msgstr "" +msgstr "save filename - desa les ordres de la sessió a un fitxer." #: command.y:877 msgid "set var = value - assign value to a scalar variable." -msgstr "" +msgstr "set var = valor - assigna un valor a una variable escalar." #: command.y:879 msgid "silent - suspends usual message when stopped at a breakpoint/watchpoint." -msgstr "" +msgstr "silent - suspèn els missatges habituals quan s'autra a un punt d'interrupció/inspecció." #: command.y:881 msgid "source file - execute commands from file." -msgstr "" +msgstr "source file - executa una ordre des d'un fitxer." #: command.y:883 msgid "step [COUNT] - step program until it reaches a different source line." -msgstr "" +msgstr "step [RECOMPTE] - avança pas per pas pel programa fins que arribi a una línia diferent de la font." #: command.y:885 msgid "stepi [COUNT] - step one instruction exactly." -msgstr "" +msgstr "stepi [RECOMPTE] - avança exactament una instrucció." #: command.y:887 msgid "tbreak [[filename:]N|function] - set a temporary breakpoint." -msgstr "" +msgstr "tbreak [[fitxer:]N|funció] - estableix un punt temporari d'interrupció." #: command.y:889 msgid "trace on|off - print instruction before executing." -msgstr "" +msgstr "trace on|off - imprimeix la instrucció abans d'executar-la." #: command.y:891 msgid "undisplay [N] - remove variable(s) from automatic display list." -msgstr "" +msgstr "undisplay [N] - remou la(es) variable(s) de la llista automàtica visualització." #: command.y:893 msgid "until [[filename:]N|function] - execute until program reaches a different line or line N within current frame." -msgstr "" +msgstr "until [[fitxer:]N|funció] - executa fins que el programa arribi a una línia diferent a la línia N dins del marc actual." #: command.y:895 msgid "unwatch [N] - remove variable(s) from watch list." -msgstr "" +msgstr "unwatch [N] - remou la(es) variable(s) de la llista d'inspecció." #: command.y:897 msgid "up [N] - move N frames up the stack." -msgstr "" +msgstr "up [N] - mou-te N marcs cap a dalt de la pila." #: command.y:899 msgid "watch var - set a watchpoint for a variable." -msgstr "" +msgstr "watch var - estableix un punt d'inspecció per a una variable." #: command.y:1011 debug.c:401 msg.c:135 #, c-format msgid "error: " -msgstr "Error: " +msgstr "error: " #: command.y:1051 #, c-format msgid "can't read command (%s)\n" -msgstr "no es pot llegir la instraucció (%s)\n" +msgstr "no es pot llegir l'ordre (%s)\n" #: command.y:1065 #, c-format msgid "can't read command (%s)" -msgstr "no es pot llegir la instrucció (%s)" +msgstr "no es pot llegir l'ordre (%s)" #: command.y:1116 msgid "invalid character in command" @@ -1197,12 +1197,12 @@ msgstr "car #: command.y:1152 #, c-format msgid "unknown command - \"%.*s\", try help" -msgstr "" +msgstr "ordre desconeguda - \"%.*s\", prova l'ajuda" #: command.y:1222 #, c-format msgid "%s" -msgstr "" +msgstr "%s" #: command.y:1284 msgid "invalid character" @@ -1211,39 +1211,39 @@ msgstr "car #: command.y:1455 #, c-format msgid "undefined command: %s\n" -msgstr "" +msgstr "ordre no definida: %s\n" #: debug.c:252 msgid "set or show the number of lines to keep in history file." -msgstr "" +msgstr "estableix o mostra el número de línies a mantenir al fitxer d'història." #: debug.c:254 msgid "set or show the list command window size." -msgstr "" +msgstr "estableix o mostra la mida de la finestra de llista d'ordres." #: debug.c:256 msgid "set or show gawk output file." -msgstr "" +msgstr "estableix o mostra el fitxer de sortida gawk." #: debug.c:258 msgid "set or show debugger prompt." -msgstr "" +msgstr "estableix o mostra l'indicador del depurador." #: debug.c:260 msgid "(un)set or show saving of command history (value=on|off)." -msgstr "" +msgstr "estableix(anul·la) o mostra el desament de la història d'ordres (valor=on|off)." #: debug.c:262 msgid "(un)set or show saving of options (value=on|off)." -msgstr "" +msgstr "estableix(anul·la) o mostra el desament d'opcions (valor=on|off)." #: debug.c:264 msgid "(un)set or show instruction tracing (value=on|off)." -msgstr "" +msgstr "estableix(anul·la) o mostra el seguiment d'instruccions (valor=on|off)." #: debug.c:345 msgid "program not running." -msgstr "" +msgstr "el programa no s'està executant." #: debug.c:448 debug.c:606 #, c-format @@ -1257,7 +1257,7 @@ msgstr "el fitxer font `%s' est #: debug.c:480 msgid "no current source file." -msgstr "" +msgstr "no hi ha un fitxer font." #: debug.c:505 #, c-format @@ -1267,82 +1267,84 @@ msgstr "no es pot trobar el fitxer font `%s' (%s)" #: debug.c:529 #, c-format msgid "WARNING: source file `%s' modified since program compilation.\n" -msgstr "" +msgstr "ADVERTIMENT: el fitxer font `%s' s'ha modificat des de la compilació del programa.\n" #: debug.c:551 #, c-format msgid "line number %d out of range; `%s' has %d lines" -msgstr "" +msgstr "línia número %d fora de rang; `%s' té %d línies" #: debug.c:611 #, c-format msgid "unexpected eof while reading file `%s', line %d" -msgstr "final de fitxer no esperat quan s'estava llegint el fitxer `%s', linía %d" +msgstr "final de fitxer no esperat quan s'estava llegint el fitxer `%s', línia %d" #: debug.c:620 #, c-format msgid "source file `%s' modified since start of program execution" -msgstr "" +msgstr "el fitxer font `%s' s'ha modificat des de l'inici de l'execució del programa" #: debug.c:732 #, c-format msgid "Current source file: %s\n" -msgstr "" +msgstr "Fitxer font actual: %s\n" #: debug.c:733 #, c-format msgid "Number of lines: %d\n" -msgstr "" +msgstr "Nombre de línies: %d\n" #: debug.c:740 #, c-format msgid "Source file (lines): %s (%d)\n" -msgstr "" +msgstr "Fitxer font (línies): %s (%d)\n" #: debug.c:754 msgid "" "Number Disp Enabled Location\n" "\n" msgstr "" +"Ubicació habilitada per número disp\n" +"\n" #: debug.c:765 #, c-format msgid "\tno of hits = %ld\n" -msgstr "" +msgstr "\tnúmero de accessos = %ld\n" #: debug.c:767 #, c-format msgid "\tignore next %ld hit(s)\n" -msgstr "" +msgstr "\tignora el(s) pròxim(s) %ld accés(sos)\n" #: debug.c:769 debug.c:909 #, c-format msgid "\tstop condition: %s\n" -msgstr "" +msgstr "\tcondició d'aturada: %s\n" #: debug.c:771 debug.c:911 msgid "\tcommands:\n" -msgstr "" +msgstr "\tordres:\n" #: debug.c:793 #, c-format msgid "Current frame: " -msgstr "" +msgstr "Marc actual: " #: debug.c:796 #, c-format msgid "Called by frame: " -msgstr "" +msgstr "Cridat per marc: " #: debug.c:800 #, c-format msgid "Caller of frame: " -msgstr "" +msgstr "Cridador de marc: " #: debug.c:818 #, c-format msgid "None in main().\n" -msgstr "" +msgstr "Cap a main().\n" #: debug.c:848 msgid "No arguments.\n" @@ -1350,46 +1352,54 @@ msgstr "Sense arguments.\n" #: debug.c:849 msgid "No locals.\n" -msgstr "" +msgstr "No hi ha locals.\n" #: debug.c:857 msgid "" "All defined variables:\n" "\n" msgstr "" +"Totes les variables definides:\n" +"\n" #: debug.c:867 msgid "" "All defined functions:\n" "\n" msgstr "" +"Totes les funcions definides:\n" +"\n" #: debug.c:886 msgid "" "Auto-display variables:\n" "\n" msgstr "" +"Mostra automàticament les variables:\n" +"\n" #: debug.c:889 msgid "" "Watch variables:\n" "\n" msgstr "" +"Inspecciona les variables:\n" +"\n" #: debug.c:1029 #, c-format msgid "no symbol `%s' in current context\n" -msgstr "" +msgstr "no hi ha el símbol `%s' al context actual\n" #: debug.c:1041 debug.c:1427 #, c-format msgid "`%s' is not an array\n" -msgstr "" +msgstr "`%s' no és una matriu\n" #: debug.c:1055 #, c-format msgid "$%ld = uninitialized field\n" -msgstr "" +msgstr "$%ld = camp sense inicialitzar\n" #: debug.c:1076 #, c-format @@ -1404,12 +1414,12 @@ msgstr "[\"%s\"] no est #: debug.c:1175 #, c-format msgid "`%s[\"%s\"]' is not an array\n" -msgstr "" +msgstr "`%s[\"%s\"]' no és una matriu\n" #: debug.c:1236 debug.c:4964 #, c-format msgid "`%s' is not a scalar variable" -msgstr "" +msgstr "`%s' no és una variable escalar" #: debug.c:1258 debug.c:4994 #, c-format @@ -1429,20 +1439,20 @@ msgstr "`%s' #: debug.c:1465 #, c-format msgid "watchpoint %d is unconditional\n" -msgstr "" +msgstr "el punt d'inspecció %d és incondicional\n" #: debug.c:1499 #, c-format msgid "No display item numbered %ld" -msgstr "" +msgstr "No hi ha un element de visualització numerat %ld" #: debug.c:1502 #, c-format msgid "No watch item numbered %ld" -msgstr "" +msgstr "No hi ha un element d'inspecció numerat %ld" #: debug.c:1528 -#, fuzzy, c-format +#, c-format msgid "%d: [\"%s\"] not in array `%s'\n" msgstr "%d: [\"%s\"] no està a la matriu `%s'\n" @@ -1453,12 +1463,12 @@ msgstr "s'ha intentat usar una dada escalar com a una matriu" #: debug.c:1856 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" -msgstr "" +msgstr "El punt d'inspecció %d s'ha esborrat perquè el paràmetre està fora d'abast.\n" #: debug.c:1867 #, c-format msgid "Display %d deleted because parameter is out of scope.\n" -msgstr "" +msgstr "La vista %d s'ha suprimit perquè el paràmetre està fora de l'abast.\n" #: debug.c:1900 #, c-format @@ -1468,17 +1478,17 @@ msgstr "al fitxer `%s', l #: debug.c:1921 #, c-format msgid " at `%s':%d" -msgstr "" +msgstr " a `%s':%d" #: debug.c:1937 debug.c:2000 #, c-format msgid "#%ld\tin " -msgstr "" +msgstr "#%ld\ten " #: debug.c:1974 #, c-format msgid "More stack frames follow ...\n" -msgstr "" +msgstr "Segueixen més marcs de pila ...\n" #: debug.c:2017 msgid "invalid frame number" @@ -1487,22 +1497,22 @@ msgstr "n #: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" -msgstr "" +msgstr "Nota: el punt d'interrupció %d (habilitat, ignora els %ld accessos següents), també s'ha establert a %s:%d" #: debug.c:2207 #, c-format msgid "Note: breakpoint %d (enabled), also set at %s:%d" -msgstr "" +msgstr "Nota: el punt d'interrupció %d (habilitat), també s'ha establert a %s:%d" #: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" -msgstr "" +msgstr "Nota: el punt d'interrupció %d (deshabilitat, ignora els %ld accessos següents), també s'ha establert a %s:%d" #: debug.c:2221 #, c-format msgid "Note: breakpoint %d (disabled), also set at %s:%d" -msgstr "" +msgstr "Nota: el punt d'interrupció %d (deshabilitat), també s'ha establert a %s:%d" #: debug.c:2238 #, c-format @@ -1512,7 +1522,7 @@ msgstr "Punt d'interrupci #: debug.c:2340 #, c-format msgid "Can't set breakpoint in file `%s'\n" -msgstr "" +msgstr "No es pot establir el punt d'interrupció al fitxer `%s'\n" #: debug.c:2369 debug.c:2492 debug.c:3350 #, c-format @@ -1522,32 +1532,32 @@ msgstr "el n #: debug.c:2373 #, c-format msgid "Can't find rule!!!\n" -msgstr "" +msgstr "No es pot trobar la regla!!!\n" #: debug.c:2375 #, c-format msgid "Can't set breakpoint at `%s':%d\n" -msgstr "" +msgstr "No es pot establir el punt d'interrupció a `%s':%d\n" #: debug.c:2387 #, c-format msgid "Can't set breakpoint in function `%s'\n" -msgstr "" +msgstr "No est pot establir el punt d'interrupció a la funció `%s'\n" #: debug.c:2403 #, c-format msgid "breakpoint %d set at file `%s', line %d is unconditional\n" -msgstr "" +msgstr "el punt d'interrupció %d establert al fitxer `%s', línia %d és incondicional\n" #: debug.c:2508 debug.c:2530 #, c-format msgid "Deleted breakpoint %d" -msgstr "" +msgstr "Punt interrupció suprimit %d" #: debug.c:2514 #, c-format msgid "No breakpoint(s) at entry to function `%s'\n" -msgstr "" +msgstr "No hi ha punt(s) d'interrupció a l'entrada a la funció `%s'\n" #: debug.c:2541 #, c-format @@ -1556,113 +1566,113 @@ msgstr "No hi ha un punt d'interrupci #: debug.c:2596 debug.c:2637 debug.c:2657 debug.c:2700 msgid "invalid breakpoint number" -msgstr "" +msgstr "número no vàlid de punt d'interrupció" #: debug.c:2612 msgid "Delete all breakpoints? (y or n) " -msgstr "" +msgstr "Suprimir tots els punts d'interrupció (s o n) " #: debug.c:2613 debug.c:2923 debug.c:2976 msgid "y" -msgstr "" +msgstr "s" #: debug.c:2662 #, c-format msgid "Will ignore next %ld crossing(s) of breakpoint %d.\n" -msgstr "" +msgstr "S'ignoraran el(s) %ld creuament(s) següent(s) del punt d'interrupció %d.\n" #: debug.c:2666 #, c-format msgid "Will stop next time breakpoint %d is reached.\n" -msgstr "" +msgstr "S'aturarà la pròxima vegada que s'assoleixi el punt d'interrupció %d.\n" #: debug.c:2783 #, c-format msgid "Can only debug programs provided with the `-f' option.\n" -msgstr "" +msgstr "Sols es poden depurar programes que tenen l'opció `-f'.\n" #: debug.c:2908 #, c-format msgid "Failed to restart debugger" -msgstr "" +msgstr "No s'ha pogut reiniciar el depurador." #: debug.c:2922 msgid "Program already running. Restart from beginning (y/n)? " -msgstr "" +msgstr "El programa ja està corrent. S'ha de reiniciar des del principi (s/n)?" #: debug.c:2926 #, c-format msgid "Program not restarted\n" -msgstr "" +msgstr "No s'ha reiniciat el programa\n" #: debug.c:2936 #, c-format msgid "error: cannot restart, operation not allowed\n" -msgstr "" +msgstr "error: no es pot reiniciar, l'operació no està permesa\n" #: debug.c:2942 #, c-format msgid "error (%s): cannot restart, ignoring rest of the commands\n" -msgstr "" +msgstr "error (%s): no es pot reiniciar, s'ignoraran la resta de les ordres\n" #: debug.c:2950 #, c-format msgid "Starting program: \n" -msgstr "" +msgstr "S'està iniciant el programa: \n" #: debug.c:2959 #, c-format msgid "Program exited %s with exit value: %d\n" -msgstr "" +msgstr "El programa ha tingut la sortida %s amb el valor de sortida: %d\n" #: debug.c:2975 msgid "The program is running. Exit anyway (y/n)? " -msgstr "" +msgstr "El programa s'està executant. Voleu sortir tot i això (s/n)? " #: debug.c:3010 #, c-format msgid "Not stopped at any breakpoint; argument ignored.\n" -msgstr "" +msgstr "No s'ha detingut a cap punt d'interrupció; s'ignorarà l'argument.\n" #: debug.c:3015 #, c-format msgid "invalid breakpoint number %d." -msgstr "" +msgstr "número no vàlid de punt d'interrupció %d." #: debug.c:3020 #, c-format msgid "Will ignore next %ld crossings of breakpoint %d.\n" -msgstr "" +msgstr "S'ignoraran els pròxims %ld creuaments de punt d'interrupció %d.\n" #: debug.c:3207 #, c-format msgid "'finish' not meaningful in the outermost frame main()\n" -msgstr "" +msgstr "'finish' no té significat al marc més extern main()\n" #: debug.c:3212 #, c-format msgid "Run till return from " -msgstr "" +msgstr "Executa fins retornar de " #: debug.c:3255 #, c-format msgid "'return' not meaningful in the outermost frame main()\n" -msgstr "" +msgstr "'return' no té significat al marc més extern main()\n" #: debug.c:3369 #, c-format msgid "Can't find specified location in function `%s'\n" -msgstr "" +msgstr "No es pot trobar la ubicació especificada a la funció `%s'\n" #: debug.c:3377 #, c-format msgid "invalid source line %d in file `%s'" -msgstr "" +msgstr "línia %d no vàlida de font al fitxer `%s'" #: debug.c:3392 #, c-format msgid "Can't find specified location %d in file `%s'\n" -msgstr "" +msgstr "No es pot trobar la ubicació especificada %d al fitxer `%s'\n" #: debug.c:3424 #, c-format @@ -1672,30 +1682,30 @@ msgstr "l'element no est #: debug.c:3424 #, c-format msgid "untyped variable\n" -msgstr "" +msgstr "variable sense tipus\n" #: debug.c:3466 #, c-format msgid "Stopping in %s ...\n" -msgstr "" +msgstr "S'està aturant a %s ...\n" #: debug.c:3543 #, c-format msgid "'finish' not meaningful with non-local jump '%s'\n" -msgstr "" +msgstr "'finish' no té significat amb salt no local '%s'\n" #: debug.c:3550 #, c-format msgid "'until' not meaningful with non-local jump '%s'\n" -msgstr "" +msgstr "'until' no té significat amb salt no local '%s'\n" #: debug.c:4185 msgid "\t------[Enter] to continue or q [Enter] to quit------" -msgstr "" +msgstr "\t------[Intro] per continuar o q [Intro] per sortir------" #: debug.c:4186 msgid "q" -msgstr "" +msgstr "q" #: debug.c:5001 #, c-format @@ -1705,25 +1715,25 @@ msgstr "[\"%s\"] no est #: debug.c:5207 #, c-format msgid "sending output to stdout\n" -msgstr "" +msgstr "s'està enviant la sortida a la sortida estàndard\n" #: debug.c:5247 msgid "invalid number" -msgstr "" +msgstr "número no vàlid" #: debug.c:5381 #, c-format msgid "`%s' not allowed in current context; statement ignored" -msgstr "" +msgstr "`%s' no està permès al context actual; s'ignorarà la declaració" #: debug.c:5389 msgid "`return' not allowed in current context; statement ignored" -msgstr "" +msgstr "`return' no està permès al context actual; s'ignorarà la declaració" #: debug.c:5590 #, c-format msgid "No symbol `%s' in current context" -msgstr "" +msgstr "No hi ha un símbol `%s' al context actual" #: 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 @@ -1736,7 +1746,7 @@ msgstr "classe no v #: dfa.c:1228 msgid "character class syntax is [[:space:]], not [:space:]" -msgstr "" +msgstr "la sintaxi de la classe de caràcters és [[:espai:]], no [:espai:]" #: dfa.c:1280 msgid "unfinished \\ escape" @@ -1756,7 +1766,7 @@ msgstr "( sense aparellar" #: dfa.c:1973 msgid "no syntax specified" -msgstr "no s'ha especificat una sintaxis" +msgstr "no s'ha especificat una sintaxi" #: dfa.c:1981 msgid "unbalanced )" @@ -1765,7 +1775,7 @@ msgstr ") sense aparellar" #: eval.c:394 #, c-format msgid "unknown nodetype %d" -msgstr "tipo de node %d desconegut" +msgstr "tipus de node %d desconegut" #: eval.c:405 eval.c:419 #, c-format @@ -1775,7 +1785,7 @@ msgstr "opcode %d desconegut" #: eval.c:416 #, c-format msgid "opcode %s not an operator or keyword" -msgstr "" +msgstr "l'opcode %s no és un operador o una paraula clau" #: eval.c:472 msgid "buffer overflow in genflags2str" @@ -1789,7 +1799,7 @@ msgid "" "\n" msgstr "" "\n" -"\t# Pila de Crides a les Funcions:\n" +"\t# Pila de crida a les funcions:\n" "\n" #: eval.c:704 @@ -1803,7 +1813,7 @@ msgstr "`BINMODE' #: eval.c:794 #, c-format msgid "BINMODE value `%s' is invalid, treated as 3" -msgstr "" +msgstr "El valor BINMODE `%s' no és vàlid, es tractarà com 3" #: eval.c:885 #, c-format @@ -1850,7 +1860,7 @@ msgstr "s'ha cridat a la funci #: eval.c:1473 #, c-format msgid "unwind_stack: unexpected type `%s'" -msgstr "" +msgstr "unwind_stack: tipus no esperat `%s'" #: eval.c:1569 msgid "division by zero attempted in `/='" @@ -1863,7 +1873,7 @@ msgstr "s'ha intentat una divisi #: ext.c:89 ext.c:171 msgid "extensions are not allowed in sandbox mode" -msgstr "" +msgstr "les extensions no estan permeses en mode de proves" #: ext.c:92 msgid "-l / @load are gawk extensions" @@ -1871,7 +1881,7 @@ msgstr "-l / @load s #: ext.c:95 msgid "load_ext: received NULL lib_name" -msgstr "" +msgstr "load_ext: s'ha rebut lib_name nul" #: ext.c:98 #, c-format @@ -1881,7 +1891,7 @@ msgstr "load_ext: no es pot obrir la llibreria `%s' (%s)\n" #: ext.c:104 #, c-format msgid "load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n" -msgstr "" +msgstr "load_ext: biblioteca `%s': no defineix `plugin_is_GPL_compatible' (%s)\n" #: ext.c:110 #, c-format @@ -1891,7 +1901,7 @@ msgstr "load_ext: biblioteca `%s': no es pot cridar a la funci #: ext.c:114 #, c-format msgid "load_ext: library `%s' initialization routine `%s' failed\n" -msgstr "" +msgstr "load_ext: la biblioteca `%s' amb rutina d'inicialització `%s' ha fallat\n" #: ext.c:174 msgid "`extension' is a gawk extension" @@ -1899,7 +1909,7 @@ msgstr "`extension' #: ext.c:177 msgid "extension: received NULL lib_name" -msgstr "" +msgstr "extension: s'ha rebut lib_name nul" #: ext.c:180 #, c-format @@ -1918,12 +1928,12 @@ msgstr "extension: biblioteca `%s': no es pot cridar a la funci #: ext.c:221 msgid "make_builtin: missing function name" -msgstr "" +msgstr "make_builtin: nom absent de funció" #: ext.c:236 #, c-format msgid "make_builtin: can't redefine function `%s'" -msgstr "" +msgstr "make_builtin: no es pot redefinir la funció `%s'" #: ext.c:240 #, c-format @@ -1938,16 +1948,16 @@ msgstr "make_builtin: nom de la funci #: ext.c:246 #, c-format msgid "make_builtin: can't use gawk built-in `%s' as function name" -msgstr "" +msgstr "make_builtin: no es pot usar el nom intern `%s' com a nom de funció" #: ext.c:249 ext.c:304 #, c-format msgid "make_builtin: negative argument count for function `%s'" -msgstr "" +msgstr "make_builtin: recompte negatiu d'arguments per a la funció `%s'" #: ext.c:276 msgid "extension: missing function name" -msgstr "" +msgstr "extension: nom absent de funció" #: ext.c:279 ext.c:283 #, c-format @@ -1972,7 +1982,7 @@ msgstr "extension: nom de la funci #: ext.c:301 #, c-format msgid "extension: can't use gawk built-in `%s' as function name" -msgstr "" +msgstr "extension: no es pot usar el nom intern `%s' com a nom de funció" #: ext.c:375 #, c-format @@ -1987,16 +1997,16 @@ msgstr "funci #: ext.c:395 #, 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" +msgstr "funció `%s': argument #%d: s'ha intentat usar una dada escalar com a una matriu" #: ext.c:399 #, c-format msgid "function `%s': argument #%d: attempt to use array as a scalar" -msgstr "" +msgstr "funció `%s': argument #%d: s'ha intentat usar una matriu com a un escalar" #: ext.c:413 msgid "dynamic loading of library not supported" -msgstr "" +msgstr "no està suportada la càrrega dinàmica de la biblioteca" #: extension/filefuncs.c:159 msgid "chdir: called with incorrect number of arguments, expecting 1" @@ -2005,7 +2015,7 @@ msgstr "chdir: cridat amb un nombre incorrecte d'arguments, s'esperava 1" #: extension/filefuncs.c:439 #, c-format msgid "stat: unable to read symbolic link `%s'" -msgstr "" +msgstr "stat: no s'ha pogut llegir l'enllaç simbòlic `%s'" #: extension/filefuncs.c:472 msgid "stat: called with wrong number of arguments" @@ -2013,12 +2023,12 @@ msgstr "stat: cridat amb un nombre incorrecte d'arguments" #: extension/filefuncs.c:479 msgid "stat: bad parameters" -msgstr "stata: argumetns dolents" +msgstr "stata: arguments dolents" #: extension/filefuncs.c:533 #, c-format msgid "fts init: could not create variable %s" -msgstr "" +msgstr "fts init: no s'ha pogut crear la variable %s" #: extension/filefuncs.c:554 msgid "fts is not supported on this system" @@ -2026,28 +2036,28 @@ msgstr "fts no est #: extension/filefuncs.c:573 msgid "fill_stat_element: could not create array" -msgstr "" +msgstr "fill_stat_element: no s'ha pogut crear la matriu" #: extension/filefuncs.c:582 msgid "fill_stat_element: could not set element" -msgstr "" +msgstr "fill_stat_element: no s'ha pogut establir l'element" #: extension/filefuncs.c:597 msgid "fill_path_element: could not set element" -msgstr "" +msgstr "fill_path_element: no s'ha pogut establir l'element" #: extension/filefuncs.c:613 msgid "fill_error_element: could not set element" -msgstr "" +msgstr "fill_error_element: no s'ha pogut establir l'element" #: extension/filefuncs.c:660 extension/filefuncs.c:707 msgid "fts-process: could not create array" -msgstr "" +msgstr "fts-process: no s'ha pogut crear la matriu" #: extension/filefuncs.c:670 extension/filefuncs.c:717 #: extension/filefuncs.c:735 msgid "fts-process: could not set element" -msgstr "" +msgstr "fts-process: no s'ha pogut establir l'element" #: extension/filefuncs.c:784 msgid "fts: called with incorrect number of arguments, expecting 3" @@ -2067,15 +2077,15 @@ msgstr "fts: el tercer par #: extension/filefuncs.c:806 msgid "fts: could not flatten array\n" -msgstr "" +msgstr "fts: no s'ha pogut aplanar la matriu\n" #: extension/filefuncs.c:824 msgid "fts: ignoring sneaky FTS_NOSTAT flag. nyah, nyah, nyah." -msgstr "" +msgstr "fts: s'ignorarà l'indicador FTS_NOSTAT furtiu. T'he enxampat!" #: extension/filefuncs.c:841 msgid "fts: clear_array() failed\n" -msgstr "" +msgstr "fts: clear_array() ha fallat\n" #: extension/fnmatch.c:112 msgid "fnmatch: called with less than three arguments" @@ -2095,24 +2105,24 @@ msgstr "fnmatch: no s'ha pogut obtenir el segon argument" #: extension/fnmatch.c:128 msgid "fnmatch: could not get third argument" -msgstr "" +msgstr "fnmatch: no s'ha pogut obtenir el tercer argument" #: extension/fnmatch.c:141 msgid "fnmatch is not implemented on this system\n" -msgstr "" +msgstr "fnmatch no està implementat en aquest sistema\n" #: extension/fnmatch.c:173 msgid "fnmatch init: could not add FNM_NOMATCH variable" -msgstr "" +msgstr "fnmatch init: no s'ha pogut afegir la variable FNM_NOMATCH" #: extension/fnmatch.c:183 #, c-format msgid "fnmatch init: could not set array element %s" -msgstr "" +msgstr "fnmatch init: no s'ha pogut establir l'element de matriu %s" #: extension/fnmatch.c:193 msgid "fnmatch init: could not install FNM array" -msgstr "" +msgstr "fnmatch init: no s'ha pogut instal·lar la matriu FNM" #: extension/fork.c:81 msgid "fork: called with too many arguments" @@ -2120,7 +2130,7 @@ msgstr "fork: s'ha cridat amb massa arguments" #: extension/fork.c:94 msgid "fork: PROCINFO is not an array!" -msgstr "" +msgstr "fork: PROCINFO no és una matriu!" #: extension/fork.c:118 msgid "waitpid: called with too many arguments" @@ -2136,21 +2146,21 @@ msgstr "wait: s'ha cridat amb massa arguments" #: extension/inplace.c:130 msgid "inplace_begin: in-place editing already active" -msgstr "" +msgstr "inplace_begin: l'edició in situ ja està activa" #: extension/inplace.c:133 extension/inplace.c:207 #, c-format msgid "inplace_begin: expects 2 arguments but called with %d" -msgstr "" +msgstr "inplace_begin: s'esperaven 2 arguments però s'ha cridat amb %d" #: extension/inplace.c:136 msgid "inplace_begin: cannot retrieve 1st argument as a string filename" -msgstr "" +msgstr "inplace_begin: no es pot obtenir el primer argument com nom de fitxer cadena de caràcters" #: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" -msgstr "" +msgstr "inplace_begin: s'està deshabilitant l'edició in situ per al nom de fitxer no vàlid `%s'" #: extension/inplace.c:151 #, c-format @@ -2160,12 +2170,12 @@ msgstr "implace_begin: No es pot obrir `%s' (%s)" #: extension/inplace.c:158 #, c-format msgid "inplace_begin: `%s' is not a regular file" -msgstr "" +msgstr "inplace_begin: `%s' no és un fitxer regular" #: extension/inplace.c:169 #, c-format msgid "inplace_begin: mkstemp(`%s') failed (%s)" -msgstr "" +msgstr "inplace_begin: mkstemp(`%s') ha fallat (%s)" #: extension/inplace.c:178 #, c-format @@ -2175,12 +2185,12 @@ msgstr "inplace_begin: ha fallat chmod (%s)" #: extension/inplace.c:185 #, c-format msgid "inplace_begin: dup(stdout) failed (%s)" -msgstr "" +msgstr "inplace_begin: dup(stdout) ha fallat(%s)" #: extension/inplace.c:188 #, c-format msgid "inplace_begin: dup2(%d, stdout) failed (%s)" -msgstr "" +msgstr "inplace_begin: dup2(%d, stdout) ha fallat (%s)" #: extension/inplace.c:191 #, c-format @@ -2189,16 +2199,16 @@ msgstr "inplace begin: close(%d) ha fallat (%s)" #: extension/inplace.c:210 msgid "inplace_end: cannot retrieve 1st argument as a string filename" -msgstr "" +msgstr "inplace_end: no es pot obtenir el primer argument com un nom de fitxer cadena de caràcters" #: extension/inplace.c:217 msgid "inplace_end: in-place editing not active" -msgstr "" +msgstr "inplace_end: no està activa l'edició in situ" #: extension/inplace.c:223 #, c-format msgid "inplace_end: dup2(%d, stdout) failed (%s)" -msgstr "" +msgstr "inplace_end: dup2(%d, stdout) ha fallat (%s)" #: extension/inplace.c:226 #, c-format @@ -2208,7 +2218,7 @@ msgstr "inplace_end: close(%d) ha fallat (%s)" #: extension/inplace.c:230 #, c-format msgid "inplace_end: fsetpos(stdout) failed (%s)" -msgstr "" +msgstr "inplace_end: fsetpos(stdout) ha fallat (%s)" #: extension/inplace.c:243 #, c-format @@ -2247,7 +2257,7 @@ msgstr "chr: s'ha cridat amb argument(s) no apropiat(s)" #: extension/readdir.c:277 #, c-format msgid "dir_take_control_of: opendir/fdopendir failed: %s" -msgstr "" +msgstr "dir_take_control_of: opendir/fdopendir ha fallat: %s" #: extension/readfile.c:84 msgid "readfile: called with too many arguments" @@ -2274,12 +2284,12 @@ msgstr "do_writea: l'argument 1 no #: extension/rwarray.c:184 #, c-format msgid "write_array: could not flatten array\n" -msgstr "" +msgstr "write_array: no s'ha pogut aplanar la matriu\n" #: extension/rwarray.c:198 #, c-format msgid "write_array: could not release flattened array\n" -msgstr "" +msgstr "write_array: no s'ha pogut alliberar la matriu aplanada\n" #: extension/rwarray.c:280 msgid "reada: called with too many arguments" @@ -2298,12 +2308,12 @@ msgstr "do_reada: l'argument 1 no #: extension/rwarray.c:337 #, c-format msgid "do_reada: clear_array failed\n" -msgstr "" +msgstr "do_reada: clear_array ha fallat\n" #: extension/rwarray.c:374 #, c-format msgid "read_array: set_array_element failed\n" -msgstr "" +msgstr "read_array: set_array_element ha fallat\n" #: extension/time.c:106 msgid "gettimeofday: ignoring arguments" @@ -2311,7 +2321,7 @@ msgstr "gettimeofday: s'estan ignorant els arguments" #: extension/time.c:137 msgid "gettimeofday: not supported on this platform" -msgstr "" +msgstr "gettimeofday: no està suportat en aquesta plataforma" #: extension/time.c:158 msgid "sleep: called with too many arguments" @@ -2327,7 +2337,7 @@ msgstr "sleep: l'argument #: extension/time.c:201 msgid "sleep: not supported on this platform" -msgstr "" +msgstr "sleep: no està suportat en aquesta plataforma" #: field.c:345 msgid "NF set to negative value" @@ -2347,15 +2357,15 @@ msgstr "split: el segon argument no #: field.c:993 msgid "split: cannot use the same array for second and fourth args" -msgstr "" +msgstr "split: no es pot usar una submatriu de segon argument per a quart argument" #: field.c:998 msgid "split: cannot use a subarray of second arg for fourth arg" -msgstr "" +msgstr "split: no es pot usar una submatriu de segon argument per a quart argument" #: field.c:1001 msgid "split: cannot use a subarray of fourth arg for second arg" -msgstr "" +msgstr "split: no est pot usar una submatriu de quart argument per a segon argument" #: field.c:1032 msgid "split: null string for third arg is a gawk extension" @@ -2375,15 +2385,15 @@ msgstr "patsplit: el segon argument no #: field.c:1087 msgid "patsplit: cannot use the same array for second and fourth args" -msgstr "" +msgstr "patsplit: no es pot usar la mateixa matriu per a segon i quart argument" #: field.c:1092 msgid "patsplit: cannot use a subarray of second arg for fourth arg" -msgstr "" +msgstr "patsplit: no es pot usar una submatriu de segon argument per a quart argument" #: field.c:1095 msgid "patsplit: cannot use a subarray of fourth arg for second arg" -msgstr "" +msgstr "patsplit: no es pot usar una submatriu de quart argument per a segon argument" #: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" @@ -2392,7 +2402,7 @@ msgstr "`FIELDWIDTHS' #: field.c:1197 #, c-format msgid "invalid FIELDWIDTHS value, near `%s'" -msgstr "" +msgstr "valor FIELDWIDTHS no vàlid, a prop de `%s'" #: field.c:1270 msgid "null string for `FS' is a gawk extension" @@ -2408,33 +2418,33 @@ msgstr "`FPAT' #: gawkapi.c:146 msgid "awk_value_to_node: received null retval" -msgstr "" +msgstr "awk_value_to_node: s'ha rebut retval nul" #: gawkapi.c:384 msgid "node_to_awk_value: received null node" -msgstr "" +msgstr "node_to_awk_value: s'ha rebut un node nul" #: gawkapi.c:387 msgid "node_to_awk_value: received null val" -msgstr "" +msgstr "node_to_awk_value: s'ha rebut un valor nul" #: gawkapi.c:808 msgid "remove_element: received null array" -msgstr "" +msgstr "remove_element: s'ha rebut una matriu nul·la" #: gawkapi.c:811 msgid "remove_element: received null subscript" -msgstr "" +msgstr "remove_element: s'ha rebut un subíndex nul" #: gawkapi.c:948 #, c-format msgid "api_flatten_array: could not convert index %d\n" -msgstr "" +msgstr "api_flatten_array: no s'ha pogut convertir l'índex %d\n" #: gawkapi.c:953 #, c-format msgid "api_flatten_array: could not convert value %d\n" -msgstr "" +msgstr "api_flatten_array: no s'ha pogut convertir el valor %d\n" #: getopt.c:604 getopt.c:633 #, c-format @@ -2494,7 +2504,7 @@ msgstr "%s: l'opci #: io.c:392 #, c-format msgid "command line argument `%s' is a directory: skipped" -msgstr "" +msgstr "l'argument `%s' de línia d'ordres és un directori: s'ignorarà" #: io.c:395 io.c:513 #, c-format @@ -2508,7 +2518,7 @@ msgstr "la finalitzaci #: io.c:716 msgid "redirection not allowed in sandbox mode" -msgstr "" +msgstr "no est permeten redireccions en mode de proves" #: io.c:750 #, c-format @@ -2589,12 +2599,12 @@ msgstr "close: la redirecci #: io.c:1222 #, c-format msgid "failure status (%d) on pipe close of `%s' (%s)" -msgstr "estaus de falla (%d) en la finalització de la canonada `%s' (%s)" +msgstr "estat de fallada (%d) en la finalització de la canonada `%s' (%s)" #: io.c:1225 #, c-format msgid "failure status (%d) on file close of `%s' (%s)" -msgstr "estatus de falla (%d) en la finalització del fitxer `%s' (%s)" +msgstr "estat de falla (%d) en la finalització del fitxer `%s' (%s)" #: io.c:1245 #, c-format @@ -2619,12 +2629,12 @@ msgstr "no s'aporta la finalitzaci #: io.c:1284 io.c:1342 main.c:864 main.c:906 #, c-format msgid "error writing standard output (%s)" -msgstr "error a l'escriure en l'eixida estàndard (%s)" +msgstr "error en escriure a la sortida estàndard (%s)" #: io.c:1289 io.c:1348 main.c:866 #, c-format msgid "error writing standard error (%s)" -msgstr "error a l'escriure en l'eixida d'error estàndard (%s)" +msgstr "error en escriure a la sortida d'error estàndard (%s)" #: io.c:1297 #, c-format @@ -2639,17 +2649,17 @@ msgstr "la neteja de la canonada per al co-proc #: io.c:1303 #, c-format msgid "file flush of `%s' failed (%s)." -msgstr "la neteja del fitxer `%sx' ha fallat (%s)." +msgstr "la neteja del fitxer `%s' ha fallat (%s)." #: io.c:1420 -#, fuzzy, c-format +#, c-format msgid "local port %s invalid in `/inet'" -msgstr "port local no vàlid en `%s'" +msgstr "port local %s no vàlid a `/inet'" #: io.c:1438 #, c-format msgid "remote host and port information (%s, %s) invalid" -msgstr "" +msgstr "amfitrió remot i informació de port (%s, %s) no vàlids" #: io.c:1590 #, c-format @@ -2679,19 +2689,19 @@ msgid "could not open `%s', mode `%s'" msgstr "no es pot obrir `%s', mode `%s'" #: io.c:1917 -#, fuzzy, c-format +#, c-format msgid "close of master pty failed (%s)" -msgstr "ha fallat la finalització de la canonada (%s)" +msgstr "ha fallat el tancament del pty mestre (%s)" #: io.c:1919 io.c:2105 io.c:2305 #, c-format msgid "close of stdout in child failed (%s)" -msgstr "ha fallat la finalització de l'eixida estàndard en els processos fills (%s)" +msgstr "ha fallat la finalització de la sortida estàndard en els processos fills (%s)" #: io.c:1922 -#, fuzzy, c-format +#, c-format msgid "moving slave pty to stdout in child failed (dup: %s)" -msgstr "ha fallat la redirecció cap a l'eixida estàndard dels processos fills (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 #, c-format @@ -2699,14 +2709,14 @@ 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 -#, fuzzy, c-format +#, c-format msgid "moving slave pty to stdin in child failed (dup: %s)" -msgstr "ha fallat la redirecció cap a l'entrada estàndard dels processos fills (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 -#, fuzzy, c-format +#, c-format msgid "close of slave pty failed (%s)" -msgstr "ha fallat la finalització de la canonada (%s)" +msgstr "ha fallat el tancament del pty esclau (%s)" #: io.c:2040 io.c:2108 io.c:2276 io.c:2308 #, c-format @@ -2747,45 +2757,45 @@ msgstr "no es pot crear el proc #: io.c:2790 msgid "register_input_parser: received NULL pointer" -msgstr "" +msgstr "register_input_parser: s'ha rebut un punter nul" #: io.c:2818 #, c-format msgid "input parser `%s' conflicts with previously installed input parser `%s'" -msgstr "" +msgstr "l'analitzador d'entrades `%s' està en conflicte amb analitzador d'entrades `%s' instal·lat prèviament" #: io.c:2825 #, c-format msgid "input parser `%s' failed to open `%s'" -msgstr "" +msgstr "l'analitzador d'entrada `%s' no ha pogut obrir `%s'" #: io.c:2845 msgid "register_output_wrapper: received NULL pointer" -msgstr "" +msgstr "register_output_wrapper: s'ha rebut un punter nul" #: io.c:2873 #, c-format msgid "output wrapper `%s' conflicts with previously installed output wrapper `%s'" -msgstr "" +msgstr "l'embolcall de sortida `%s' està en conflicte amb l'embolcall de sortida `%s' instal·lat prèviament" #: io.c:2880 #, c-format msgid "output wrapper `%s' failed to open `%s'" -msgstr "" +msgstr "l'embolcall de sortida `%s' no ha pogut obrir `%s'" #: io.c:2901 msgid "register_output_processor: received NULL pointer" -msgstr "" +msgstr "register_output_processor: s'ha rebut un punter nul" #: io.c:2930 #, c-format msgid "two-way processor `%s' conflicts with previously installed two-way processor `%s'" -msgstr "" +msgstr "el processsador de dues vies `%s' està en conflicte amb el processador de dues vies `%s' instal·lat prèviament" #: io.c:2939 #, c-format msgid "two way processor `%s' failed to open `%s'" -msgstr "" +msgstr "el processador de dues vies `%s' no ha pogut obrir `%s'" #: io.c:3064 #, c-format @@ -2794,21 +2804,19 @@ msgstr "el fitxer de dades `%s' est #: io.c:3106 io.c:3114 msgid "could not allocate more input memory" -msgstr "" +msgstr "no s'ha pogut assignar més memòria d'entrada" #: io.c:3682 msgid "multicharacter value of `RS' is a gawk extension" msgstr "el valor multicaràcter de `RS' és una extensió de gawk" #: io.c:3771 -#, fuzzy msgid "IPv6 communication is not supported" -msgstr "les comunicacions TCP/IP no estan suportades" +msgstr "la comunicació IPv6 no està suportada" #: main.c:405 -#, fuzzy msgid "empty argument to `-e/--source' ignored" -msgstr "s'igonarà l'argument buit per a l'opció `--source'" +msgstr "s'ignonarà l'argument buit de `-e/--source'" #: main.c:495 #, c-format @@ -2833,27 +2841,26 @@ msgid "`--posix'/`--traditional' overrides `--non-decimal-data'" msgstr "`--posix' i `--traditional' solapen a `--non-decimal-data'" #: main.c:583 -#, fuzzy, c-format +#, 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 -#, fuzzy msgid "`--posix' overrides `--characters-as-bytes'" -msgstr "`--posix' solapa a `--traditional'" +msgstr "`--posix' anul·la a `--characters-as-bytes'" #: main.c:647 -#, fuzzy, c-format +#, c-format msgid "can't set binary mode on stdin (%s)" -msgstr "no es pot establir el mode en l'entrada estàndard (%s)" +msgstr "no es pot establir el mode binari en l'entrada estàndard (%s)" #: main.c:650 -#, fuzzy, c-format +#, 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 -#, fuzzy, c-format +#, 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)" @@ -2872,9 +2879,8 @@ 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 -#, fuzzy msgid "POSIX options:\t\tGNU long options: (standard)\n" -msgstr "Opcions POSIX:\t\tOpcions llargues GNU:\n" +msgstr "Opcions POSIX:\t\tOpcions llargues GNU: (estàndard)\n" #: main.c:807 msgid "\t-f progfile\t\t--file=progfile\n" @@ -2889,126 +2895,108 @@ 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 -#, fuzzy msgid "Short options:\t\tGNU long options: (extensions)\n" -msgstr "Opcions POSIX:\t\tOpcions llargues GNU:\n" +msgstr "Opcions curtes:\t\tOpcions llargues GNU: (extensions)\n" #: main.c:811 msgid "\t-b\t\t\t--characters-as-bytes\n" -msgstr "" +msgstr "\t-b\t\t\t--characters-as-bytes\n" #: main.c:812 -#, fuzzy msgid "\t-c\t\t\t--traditional\n" -msgstr "\t-W traditional\t\t--traditional\n" +msgstr "\t-c\t\t\t--traditional\n" #: main.c:813 -#, fuzzy msgid "\t-C\t\t\t--copyright\n" -msgstr "\t-W copyright\t\t--copyright\n" +msgstr "\t-C\t\t\t--copyright\n" #: main.c:814 -#, fuzzy msgid "\t-d[file]\t\t--dump-variables[=file]\n" -msgstr "\t-W dump-variables[=fitxer] --dump-variables[=fitxer]\n" +msgstr "\t-d[file]\t\t--dump-variables[=file]\n" #: main.c:815 -#, fuzzy msgid "\t-D[file]\t\t--debug[=file]\n" -msgstr "\t-W profile[=fitxer]\t--profile[=fitxer]\n" +msgstr "\t-D[file]\t\t--debug[=file]\n" #: main.c:816 -#, fuzzy msgid "\t-e 'program-text'\t--source='program-text'\n" -msgstr "\t-W source=text_prog\t--source=text_prog\n" +msgstr "\t-e 'program-text'\t--source='program-text'\n" #: main.c:817 -#, fuzzy msgid "\t-E file\t\t\t--exec=file\n" -msgstr "\t-f fitx_prog\t\t--file=fitx_prog\n" +msgstr "\t-E file\t\t\t--exec=file\n" #: main.c:818 -#, fuzzy msgid "\t-g\t\t\t--gen-pot\n" -msgstr "\t-W gen-po\t\t--gen-po\n" +msgstr "\t-g\t\t\t--gen-pot\n" #: main.c:819 -#, fuzzy msgid "\t-h\t\t\t--help\n" -msgstr "\t-W help\t\t\t--help\n" +msgstr "\t-h\t\t\t--help\n" #: main.c:820 msgid "\t-i includefile\t\t--include=includefile\n" -msgstr "" +msgstr "\t-i includefile\t\t--include=fitxer a incloure\n" #: main.c:821 msgid "\t-l library\t\t--load=library\n" -msgstr "" +msgstr "\t-l library\t\t--load=biblioteca\n" #: main.c:822 -#, fuzzy msgid "\t-L [fatal]\t\t--lint[=fatal]\n" -msgstr "\t-W lint[=fatal]\t\t--lint[=fatal]\n" +msgstr "\t-L [fatal]\t\t--lint[=fatal]\n" #: main.c:823 -#, fuzzy msgid "\t-n\t\t\t--non-decimal-data\n" -msgstr "\t-W non-decimal-data\t--non-decimal-data\n" +msgstr "\t-n\t\t\t--non-decimal-data\n" #: main.c:824 msgid "\t-M\t\t\t--bignum\n" -msgstr "" +msgstr "\t-M\t\t\t--bignum\n" #: main.c:825 msgid "\t-N\t\t\t--use-lc-numeric\n" -msgstr "" +msgstr "\t-N\t\t\t--use-lc-numeric\n" #: main.c:826 -#, fuzzy msgid "\t-o[file]\t\t--pretty-print[=file]\n" -msgstr "\t-W profile[=fitxer]\t--profile[=fitxer]\n" +msgstr "\t-o[file]\t\t--pretty-print[=file]\n" #: main.c:827 msgid "\t-O\t\t\t--optimize\n" -msgstr "" +msgstr "\t-O\t\t\t--optimize\n" #: main.c:828 -#, fuzzy msgid "\t-p[file]\t\t--profile[=file]\n" -msgstr "\t-W profile[=fitxer]\t--profile[=fitxer]\n" +msgstr "\t-p[file]\t\t--profile[=file]\n" #: main.c:829 -#, fuzzy msgid "\t-P\t\t\t--posix\n" -msgstr "\t-W posix\t\t--posix\n" +msgstr "\t-P\t\t\t--posix\n" #: main.c:830 -#, fuzzy msgid "\t-r\t\t\t--re-interval\n" -msgstr "\t-W re-interval\t\t--re-interval\n" +msgstr "\t-r\t\t\t--re-interval\n" #: main.c:831 msgid "\t-S\t\t\t--sandbox\n" -msgstr "" +msgstr "\t-S\t\t\t--sandbox\n" #: main.c:832 -#, fuzzy msgid "\t-t\t\t\t--lint-old\n" -msgstr "\t-W lint-old\t\t--lint-old\n" +msgstr "\t-t\t\t\t--lint-old\n" #: main.c:833 -#, fuzzy msgid "\t-V\t\t\t--version\n" -msgstr "\t-W version\t\t--version\n" +msgstr "\t-V\t\t\t--version\n" #: main.c:835 msgid "\t-W nostalgia\t\t--nostalgia\n" msgstr "\t-W nostalgia\t\t--nostalgia\n" #: main.c:838 -#, fuzzy msgid "\t-Y\t\t--parsedebug\n" -msgstr "\t-W parsedebug\t\t--parsedebug\n" +msgstr "\t-Y\t\t--parsedebug\n" #. TRANSLATORS: --help output 5 (end) #. TRANSLATORS: the placeholder indicates the bug-reporting address @@ -3016,13 +3004,16 @@ msgstr "\t-W parsedebug\t\t--parsedebug\n" #. address for translation bugs. #. no-wrap #: main.c:847 -#, fuzzy msgid "" "\n" "To report bugs, see node `Bugs' in `gawk.info', which is\n" "section `Reporting Problems and Bugs' in the printed version.\n" "\n" -msgstr "a la secció `Reporting Problems and Bugs' de la versió impresa.\n" +msgstr "" +"\n" +"Per informar d'errors, vegeu el node `Bugs' a `gawk.info', que\n" +"és la secció `Informant sobre problemes i errors' a la versió impresa.\n" +"Informeu dels errors de traducció a \n" #: main.c:851 msgid "" @@ -3030,6 +3021,8 @@ msgid "" "By default it reads standard input and writes standard output.\n" "\n" msgstr "" +"gawk és un llenguatge d'anàlisi i processament de patrons.\n" +"De forma predeterminada llegeix l'entrada estàndard i escriu a la sortida estàndar.\n" #: main.c:855 msgid "" @@ -3037,9 +3030,12 @@ msgid "" "\tgawk '{ sum += $1 }; END { print sum }' file\n" "\tgawk -F: '{ print $1 }' /etc/passwd\n" msgstr "" +"Exemples:\n" +"\tgawk '{ sum += $1 }; END { print sum }' fitxer\n" +"\tgawk -F: '{ print $1 }' /etc/passwd\n" #: main.c:880 -#, fuzzy, c-format +#, c-format msgid "" "Copyright (C) 1989, 1991-%d Free Software Foundation.\n" "\n" @@ -3053,7 +3049,7 @@ msgstr "" "\n" "Aquest programa és programari lliure; pot redistribuir-se i/o modificar-se\n" "sota els termes de la Llicència Pública General de GNU tal i como està\n" -"publicada per la Free Software Foundation; ja siga en la versió 2 de la\n" +"publicada per la Free Software Foundation; ja siga en la versió 3 de la\n" "Llicència, o (a la vostra elecció) qualsevol versió posterior.\n" "\n" @@ -3072,14 +3068,12 @@ msgstr "" "\n" #: main.c:894 -#, fuzzy 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 "" -"Junt amb aquest programa hauríeu d'haber rebut una còpia de la Llicència\n" -"Pública General de GNU; si no és així, escriviu a la Free Software\n" -"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n" +"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 msgid "-Ft does not set FS to tab in POSIX awk" @@ -3088,7 +3082,7 @@ msgstr "-Ft no permet inicialitzar FS a un tabulador en la versi #: main.c:1208 #, c-format msgid "unknown value for field spec: %d\n" -msgstr "" +msgstr "valor desconegut per a l'especificació de camp: %d\n" #: main.c:1306 #, c-format @@ -3096,26 +3090,28 @@ msgid "" "%s: `%s' argument to `-v' not in `var=value' form\n" "\n" msgstr "" +"%s: `%s' l'argument per a `-v' no està en forma `var=valor'\n" +"\n" #: main.c:1332 #, c-format msgid "`%s' is not a legal variable name" -msgstr "" +msgstr "`%s' no és nom legal de variable" #: main.c:1335 #, c-format msgid "`%s' is not a variable name, looking for file `%s=%s'" -msgstr "" +msgstr "`%s' no és un valor de variable, s'esperava fitxer `%s=%s'" #: main.c:1339 -#, fuzzy, c-format +#, c-format msgid "cannot use gawk builtin `%s' as variable name" -msgstr "no es pot usar el nom de la funció `%s' com a variable o matriu" +msgstr "no es pot usar el nom de la funció integrada `%s' com a nom de variable" #: main.c:1344 -#, fuzzy, c-format +#, c-format msgid "cannot use function `%s' as variable name" -msgstr "no es pot usar el nom de la funció `%s' com a variable o matriu" +msgstr "no es pot usar el nom de la funció interna `%s' com nom de variable" #: main.c:1397 msgid "floating point exception" @@ -3126,14 +3122,12 @@ msgid "fatal error: internal error" msgstr "error fatal: error intern" #: main.c:1419 -#, fuzzy msgid "fatal error: internal error: segfault" -msgstr "error fatal: error intern" +msgstr "error fatal: error intern: segfault" #: main.c:1431 -#, fuzzy msgid "fatal error: internal error: stack overflow" -msgstr "error fatal: error intern" +msgstr "error fatal: error intern: sobreeiximent de pila" #: main.c:1490 #, c-format @@ -3148,56 +3142,52 @@ msgstr "no es pot pre-obrir /dev/null per al descriptor fd %d" #: mpfr.c:550 #, c-format msgid "PREC value `%.*s' is invalid" -msgstr "" +msgstr "Valor PREC `%.*s' no és vàlid" #: mpfr.c:608 #, c-format msgid "RNDMODE value `%.*s' is invalid" -msgstr "" +msgstr "Valor RNDMODE `%.*s' no és vàlid" #: mpfr.c:698 -#, fuzzy, c-format +#, c-format msgid "%s: received non-numeric argument" -msgstr "cos: s'ha rebut un argument que no és numèric" +msgstr "%s: s'ha rebut un argument que no és numèric" #: mpfr.c:800 -#, fuzzy msgid "compl(%Rg): negative value will give strange results" -msgstr "compl(%lf): el valor negatiu donarà resultats estranys" +msgstr "compl(%Rg): el valor negatiu donarà resultats estranys" #: mpfr.c:804 -#, fuzzy msgid "comp(%Rg): fractional value will be truncated" -msgstr "compl(%lf): el valor fraccionari serà truncat" +msgstr "compl(%Rg): el valor fraccionari serà truncat" #: mpfr.c:816 -#, fuzzy, c-format +#, c-format msgid "cmpl(%Zd): negative values will give strange results" -msgstr "compl(%lf): el valor negatiu donarà resultats estranys" +msgstr "cmpl(%Zd): els valors negatius donaran resultats estranys" #: mpfr.c:835 -#, fuzzy, c-format +#, c-format msgid "%s: received non-numeric argument #%d" -msgstr "cos: s'ha rebut un argument que no és numèric" +msgstr "%s: s'ha rebut un argument no numèric #%d" #: mpfr.c:845 msgid "%s: argument #%d has invalid value %Rg, using 0" -msgstr "" +msgstr "%s: l'argument #%d té valor no vàlid %Rg, s'usarà 0" #: mpfr.c:857 -#, fuzzy msgid "%s: argument #%d negative value %Rg will give strange results" -msgstr "and(%lf, %lf): els valors negatius donaran resultats estranys" +msgstr "%s: l'argument #%d amb valor negatiu %Rg donarà resultats estranys" #: mpfr.c:863 -#, fuzzy msgid "%s: argument #%d fractional value %Rg will be truncated" -msgstr "and(%lf, %lf): els valors fraccionaris seran truncats" +msgstr "%s: l'argument #%d amb valor fraccional %Rg serà truncat" #: mpfr.c:878 -#, fuzzy, c-format +#, c-format msgid "%s: argument #%d negative value %Zd will give strange results" -msgstr "and(%lf, %lf): els valors negatius donaran resultats estranys" +msgstr "%s: l'argument #%d amb valor negatiu %Zd donarà resultats estranys" #: msg.c:68 #, c-format @@ -3209,9 +3199,9 @@ msgid "backslash at end of string" msgstr "barra invertida al final de la cadena" #: node.c:500 -#, fuzzy, c-format +#, c-format msgid "old awk does not support the `\\%c' escape sequence" -msgstr "l'antic awk no suporta l'operador `**='" +msgstr "l'antic awk no dóna suport a la seqüencia d'escapada `\\%c'" #: node.c:551 msgid "POSIX does not allow `\\x' escapes" @@ -3224,7 +3214,7 @@ msgstr "no hi ha d #: node.c:579 #, c-format msgid "hex escape \\x%.*s of %d characters probably not interpreted the way you expect" -msgstr "" +msgstr "probablement no s'han interpretat els caràcters hex escape \\x%.*s of %d de la manera que esperàveu" #: node.c:594 #, c-format @@ -3233,17 +3223,17 @@ msgstr "la seq #: node.c:739 msgid "Invalid multibyte data detected. There may be a mismatch between your data and your locale." -msgstr "" +msgstr "S'han detectat dades multibyte no vàlides. Pot haver-hi una discordança entre les vostres dades i la vostra configuració local" #: posix/gawkmisc.c:177 -#, fuzzy, c-format +#, c-format msgid "%s %s `%s': could not get fd flags: (fcntl F_GETFD: %s)" -msgstr "%s %s `%s': no es pot inicialitzar close-on-exec: (fcntl: %s)" +msgstr "%s %s `%s': no s'han pogut obtenir els indicadors fd: (fcntl F_GETFD: %s)" #: posix/gawkmisc.c:189 -#, fuzzy, c-format +#, c-format msgid "%s %s `%s': could not set close-on-exec: (fcntl F_SETFD: %s)" -msgstr "%s %s `%s': no es pot inicialitzar close-on-exec: (fcntl: %s)" +msgstr "%s %s `%s': no s'ha pogut establir close-on-exec: (fcntl F_SETFD: %s)" #: profile.c:71 #, c-format @@ -3255,12 +3245,12 @@ msgid "sending profile to standard error" msgstr "enviant el perfil a l'eixida d'error estàndard" #: profile.c:193 -#, fuzzy, c-format +#, c-format msgid "" "\t# %s block(s)\n" "\n" msgstr "" -"\t# Bloc(s) FINAL\n" +"\t# %s bloc(s)\n" "\n" #: profile.c:198 @@ -3273,14 +3263,13 @@ msgstr "" "\n" #: profile.c:272 -#, fuzzy, c-format +#, c-format msgid "internal error: %s with null vname" -msgstr "error intern: Node_var amb vname nul" +msgstr "error intern: %s amb vname nul" #: profile.c:537 -#, fuzzy msgid "internal error: builtin with null fname" -msgstr "error intern: Node_var amb vname nul" +msgstr "error intern: funció integrada amb fname nul" #: profile.c:949 #, c-format @@ -3288,6 +3277,8 @@ msgid "" "\t# Loaded extensions (-l and/or @load)\n" "\n" msgstr "" +"\t# Extensions carregades (-l i/o @load)\n" +"\n" #: profile.c:972 #, c-format @@ -3306,12 +3297,12 @@ msgstr "" #: profile.c:1513 #, c-format msgid "redir2str: unknown redirection type %d" -msgstr "" +msgstr "redir2str: tipus desconegut de redireccionament %d" #: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" -msgstr "" +msgstr "el component regexp `%.*s' probablement hauria de ser `[%.*s]'" #: regcomp.c:131 msgid "Success" @@ -3339,7 +3330,7 @@ msgstr "Barra invertida extra al final" #: regcomp.c:149 msgid "Invalid back reference" -msgstr "Referència cap enradera no vàlida" +msgstr "Referència cap endarrere no vàlida" #: regcomp.c:152 msgid "Unmatched [ or [^" @@ -3379,7 +3370,7 @@ msgstr "No hi ha una expressi #: symbol.c:741 msgid "can not pop main context" -msgstr "" +msgstr "no es pot mostrar el context principal" #~ msgid "reference to uninitialized element `%s[\"%s\"]'" #~ msgstr "referència a un element sense valor inicial `%s[\"%s\"]'" -- cgit v1.2.3 From abe4984928229338afd2dc9bbeb95bb9f361ef94 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 3 Mar 2014 21:28:10 +0200 Subject: Sync dfa with grep. --- ChangeLog | 4 ++ dfa.c | 171 +++++++++++++++++++++++++++++++------------------------------- 2 files changed, 90 insertions(+), 85 deletions(-) diff --git a/ChangeLog b/ChangeLog index 965cd1f7..1b08057b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2014-03-03 Arnold D. Robbins + + * dfa.c: Sync with grep. Yet again. + 2014-02-28 Arnold D. Robbins * dfa.c: Sync with grep. Looks like good improvement with diff --git a/dfa.c b/dfa.c index 2e9d2fd0..3dd3c209 100644 --- a/dfa.c +++ b/dfa.c @@ -130,7 +130,7 @@ typedef unsigned int charclass[CHARCLASS_INTS]; /* Convert a possibly-signed character to an unsigned character. This is a bit safer than casting to unsigned char, since it catches some type errors that the cast doesn't. */ -static inline unsigned char +static unsigned char to_uchar (char ch) { return ch; @@ -732,42 +732,27 @@ dfasyntax (reg_syntax_t bits, int fold, unsigned char eol) this may happen when folding case in weird Turkish locales where dotless i/dotted I are not included in the chosen character set. Return whether a bit was set in the charclass. */ -#if MBS_SUPPORT static bool setbit_wc (wint_t wc, charclass c) { +#if MBS_SUPPORT int b = wctob (wc); if (b == EOF) return false; setbit (b, c); return true; -} - -/* Set a bit in the charclass for the given single byte character, - if it is valid in the current character set. */ -static void -setbit_c (int b, charclass c) -{ - /* Do nothing if b is invalid in this character set. */ - if (MB_CUR_MAX > 1 && btowc (b) == WEOF) - return; - setbit (b, c); -} #else -# define setbit_c setbit -static inline bool -setbit_wc (wint_t wc, charclass c) -{ abort (); /*NOTREACHED*/ return false; -} #endif +} -/* Like setbit_c, but if case is folded, set both cases of a letter. For - MB_CUR_MAX > 1, the resulting charset is only used as an optimization, - and the caller takes care of setting the appropriate field of struct - mb_char_classes. */ +/* Set a bit for B in the charclass C, if B is a valid single byte + character in the current character set. If case is folded, set B's + lower and upper case variants similarly. If MB_CUR_MAX > 1, the + resulting charset is used only as an optimization, and the caller + should set the appropriate field of struct mb_char_classes. */ static void setbit_case_fold_c (int b, charclass c) { @@ -776,16 +761,21 @@ setbit_case_fold_c (int b, charclass c) wint_t wc = btowc (b); if (wc == WEOF) return; - setbit (b, c); - if (case_fold && iswalpha (wc)) - setbit_wc (iswupper (wc) ? towlower (wc) : towupper (wc), c); + if (case_fold) + { + setbit_wc (towlower (wc), c); + setbit_wc (towupper (wc), c); + } } else { - setbit (b, c); - if (case_fold && isalpha (b)) - setbit_c (isupper (b) ? tolower (b) : toupper (b), c); + if (case_fold) + { + setbit (tolower (b), c); + setbit (toupper (b), c); + } } + setbit (b, c); } @@ -843,7 +833,7 @@ using_simple_locale (void) static int unibyte_c = -1; if (unibyte_c < 0) { - char *locale = setlocale (LC_ALL, 0); + char *locale = setlocale (LC_ALL, NULL); unibyte_c = (locale && (STREQ (locale, "C") || STREQ (locale, "POSIX"))); } @@ -1146,52 +1136,51 @@ parse_bracket_exp (void) c2 = ']'; } - if (c2 == ']') + if (c2 != ']') { - /* In the case [x-], the - is an ordinary hyphen, - which is left in c1, the lookahead character. */ - lexptr -= cur_mb_len; - lexleft += cur_mb_len; - } - } - - if (c1 == '-' && c2 != ']') - { - if (c2 == '\\' && (syntax_bits & RE_BACKSLASH_ESCAPE_IN_LISTS)) - FETCH_WC (c2, wc2, _("unbalanced [")); + if (c2 == '\\' && (syntax_bits & RE_BACKSLASH_ESCAPE_IN_LISTS)) + FETCH_WC (c2, wc2, _("unbalanced [")); - if (MB_CUR_MAX > 1) - { - /* When case folding map a range, say [m-z] (or even [M-z]) - to the pair of ranges, [m-z] [M-Z]. */ - REALLOC_IF_NECESSARY (work_mbc->range_sts, - range_sts_al, work_mbc->nranges + 1); - REALLOC_IF_NECESSARY (work_mbc->range_ends, - range_ends_al, work_mbc->nranges + 1); - work_mbc->range_sts[work_mbc->nranges] = - case_fold ? towlower (wc) : (wchar_t) wc; - work_mbc->range_ends[work_mbc->nranges++] = - case_fold ? towlower (wc2) : (wchar_t) wc2; - - if (case_fold && (iswalpha (wc) || iswalpha (wc2))) + if (MB_CUR_MAX > 1) { + /* When case folding map a range, say [m-z] (or even [M-z]) + to the pair of ranges, [m-z] [M-Z]. Although this code + is wrong in multiple ways, it's never used in practice. + FIXME: Remove this (and related) unused code. */ REALLOC_IF_NECESSARY (work_mbc->range_sts, range_sts_al, work_mbc->nranges + 1); - work_mbc->range_sts[work_mbc->nranges] = towupper (wc); REALLOC_IF_NECESSARY (work_mbc->range_ends, range_ends_al, work_mbc->nranges + 1); - work_mbc->range_ends[work_mbc->nranges++] = towupper (wc2); + work_mbc->range_sts[work_mbc->nranges] = + case_fold ? towlower (wc) : (wchar_t) wc; + work_mbc->range_ends[work_mbc->nranges++] = + case_fold ? towlower (wc2) : (wchar_t) wc2; + + if (case_fold && (iswalpha (wc) || iswalpha (wc2))) + { + REALLOC_IF_NECESSARY (work_mbc->range_sts, + range_sts_al, work_mbc->nranges + 1); + work_mbc->range_sts[work_mbc->nranges] = towupper (wc); + REALLOC_IF_NECESSARY (work_mbc->range_ends, + range_ends_al, work_mbc->nranges + 1); + work_mbc->range_ends[work_mbc->nranges++] = towupper (wc2); + } } + else if (using_simple_locale ()) + for (; c <= c2; c++) + setbit_case_fold_c (c, ccl); + else + known_bracket_exp = false; + + colon_warning_state |= 8; + FETCH_WC (c1, wc1, _("unbalanced [")); + continue; } - else if (using_simple_locale ()) - for (; c <= c2; c++) - setbit_case_fold_c (c, ccl); - else - known_bracket_exp = false; - colon_warning_state |= 8; - FETCH_WC (c1, wc1, _("unbalanced [")); - continue; + /* In the case [x-], the - is an ordinary hyphen, + which is left in c1, the lookahead character. */ + lexptr -= cur_mb_len; + lexleft += cur_mb_len; } colon_warning_state |= (c == ':') ? 2 : 4; @@ -1202,16 +1191,22 @@ parse_bracket_exp (void) continue; } - if (case_fold && iswalpha (wc)) + if (case_fold) { - wc = towlower (wc); - if (!setbit_wc (wc, ccl)) + wint_t folded = towlower (wc); + if (folded != wc && !setbit_wc (folded, ccl)) + { + REALLOC_IF_NECESSARY (work_mbc->chars, chars_al, + work_mbc->nchars + 1); + work_mbc->chars[work_mbc->nchars++] = folded; + } + folded = towupper (wc); + if (folded != wc && !setbit_wc (folded, ccl)) { REALLOC_IF_NECESSARY (work_mbc->chars, chars_al, work_mbc->nchars + 1); - work_mbc->chars[work_mbc->nchars++] = wc; + work_mbc->chars[work_mbc->nchars++] = folded; } - wc = towupper (wc); } if (!setbit_wc (wc, ccl)) { @@ -1557,7 +1552,7 @@ lex (void) if (MB_CUR_MAX > 1) return lasttok = WCHAR; - if (case_fold && isalpha (c)) + if (case_fold && (tolower (c) != c || toupper (c) != c)) { zeroset (ccl); setbit_case_fold_c (c, ccl); @@ -1645,10 +1640,11 @@ addtok (token t) work_mbc->nchars = 0; } - /* UTF-8 allows treating a simple, non-inverted MBCSET like a CSET. */ + /* If the MBCSET is non-inverted and doesn't include neither + character classes including multibyte characters, range + expressions, equivalence classes nor collating elements, + it can be replaced to a simple CSET. */ if (work_mbc->invert - || (!using_utf8 () && work_mbc->cset != -1) - || work_mbc->nchars != 0 || work_mbc->nch_classes != 0 || work_mbc->nranges != 0 || work_mbc->nequivs != 0 || work_mbc->ncoll_elems != 0) @@ -1663,7 +1659,6 @@ addtok (token t) that the mbcset is empty now. Do nothing in that case. */ if (work_mbc->cset != -1) { - assert (using_utf8 ()); addtok (CSET + work_mbc->cset); if (need_or) addtok (OR); @@ -1801,17 +1796,23 @@ add_utf8_anychar (void) static void atom (void) { - if (0) + if (MBS_SUPPORT && tok == WCHAR) { - /* empty */ - } - else if (MBS_SUPPORT && tok == WCHAR) - { - addtok_wc (case_fold ? towlower (wctok) : wctok); - if (case_fold && iswalpha (wctok)) + addtok_wc (wctok); + if (case_fold) { - addtok_wc (towupper (wctok)); - addtok (OR); + wint_t folded = towlower (wctok); + if (folded != wctok) + { + addtok_wc (folded); + addtok (OR); + } + folded = towupper (wctok); + if (folded != wctok) + { + addtok_wc (folded); + addtok (OR); + } } tok = lex (); -- cgit v1.2.3 From a76a789747458e3690e44ee81332099a3f80c156 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 5 Mar 2014 06:00:03 +0200 Subject: Continue to straighten out enum usage. --- ChangeLog | 11 +++++++++++ awk.h | 2 +- awkgram.c | 4 ++-- awkgram.y | 4 ++-- cmd.h | 3 ++- command.c | 2 +- command.y | 2 +- ext.c | 8 ++++---- io.c | 2 +- 9 files changed, 25 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1b08057b..669f5a0c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2014-03-05 Arnold D. Robbins + + Straighten out enumerated types some more. + + * awk.h (add_srcfile): Fix type of first parameter. + * awkgram.y (add_srcfile, do_add_srcfile): Ditto. + * cmd.h (A_NONE): New enum nametypeval. + * command.y (argtab): Use it in final value. + * ext.c (make_builtin): Use awk_false, awk_true. + * io.c (init_output_wrapper): Use awk_false. + 2014-03-03 Arnold D. Robbins * dfa.c: Sync with grep. Yet again. diff --git a/awk.h b/awk.h index a846483a..5fe1e0b5 100644 --- a/awk.h +++ b/awk.h @@ -1371,7 +1371,7 @@ extern const char *getfname(NODE *(*)(int)); extern NODE *stopme(int nargs); extern void shadow_funcs(void); extern int check_special(const char *name); -extern SRCFILE *add_srcfile(int stype, char *src, SRCFILE *curr, bool *already_included, int *errcode); +extern SRCFILE *add_srcfile(enum srctype stype, char *src, SRCFILE *curr, bool *already_included, int *errcode); 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); diff --git a/awkgram.c b/awkgram.c index 948e63bf..80d6ea05 100644 --- a/awkgram.c +++ b/awkgram.c @@ -4675,7 +4675,7 @@ parse_program(INSTRUCTION **pcode) /* do_add_srcfile --- add one item to srcfiles */ static SRCFILE * -do_add_srcfile(int stype, char *src, char *path, SRCFILE *thisfile) +do_add_srcfile(enum srctype stype, char *src, char *path, SRCFILE *thisfile) { SRCFILE *s; @@ -4697,7 +4697,7 @@ do_add_srcfile(int stype, char *src, char *path, SRCFILE *thisfile) */ SRCFILE * -add_srcfile(int stype, char *src, SRCFILE *thisfile, bool *already_included, int *errcode) +add_srcfile(enum srctype stype, char *src, SRCFILE *thisfile, bool *already_included, int *errcode) { SRCFILE *s; struct stat sbuf; diff --git a/awkgram.y b/awkgram.y index ecce1f6e..7d530b7f 100644 --- a/awkgram.y +++ b/awkgram.y @@ -2336,7 +2336,7 @@ parse_program(INSTRUCTION **pcode) /* do_add_srcfile --- add one item to srcfiles */ static SRCFILE * -do_add_srcfile(int stype, char *src, char *path, SRCFILE *thisfile) +do_add_srcfile(enum srctype stype, char *src, char *path, SRCFILE *thisfile) { SRCFILE *s; @@ -2358,7 +2358,7 @@ do_add_srcfile(int stype, char *src, char *path, SRCFILE *thisfile) */ SRCFILE * -add_srcfile(int stype, char *src, SRCFILE *thisfile, bool *already_included, int *errcode) +add_srcfile(enum srctype stype, char *src, SRCFILE *thisfile, bool *already_included, int *errcode) { SRCFILE *s; struct stat sbuf; diff --git a/cmd.h b/cmd.h index 5a5fd294..3c64efbe 100644 --- a/cmd.h +++ b/cmd.h @@ -109,7 +109,8 @@ enum argtype { /* non-number arguments to commands */ enum nametypeval { - A_ARGS = 1, + A_NONE = 0, + A_ARGS, A_BREAK, A_DEL, A_DISPLAY, diff --git a/command.c b/command.c index c4fe1e48..2d4ccf8c 100644 --- a/command.c +++ b/command.c @@ -2667,7 +2667,7 @@ struct argtoken argtab[] = { { "sources", D_info, A_SOURCES }, { "variables", D_info, A_VARIABLES }, { "watch", D_info, A_WATCH }, - { NULL, D_illegal, 0 }, + { NULL, D_illegal, A_NONE }, }; diff --git a/command.y b/command.y index 742b185a..576af159 100644 --- a/command.y +++ b/command.y @@ -916,7 +916,7 @@ struct argtoken argtab[] = { { "sources", D_info, A_SOURCES }, { "variables", D_info, A_VARIABLES }, { "watch", D_info, A_WATCH }, - { NULL, D_illegal, 0 }, + { NULL, D_illegal, A_NONE }, }; diff --git a/ext.c b/ext.c index cae882ff..09e10164 100644 --- a/ext.c +++ b/ext.c @@ -221,11 +221,11 @@ make_builtin(const awk_ext_func_t *funcinfo) fatal(_("make_builtin: missing function name")); if (! is_letter(*sp)) - return false; + return awk_false; for (sp++; (c = *sp++) != '\0';) { if (! is_identifier_char(c)) - return false; + return awk_false; } f = lookup(name); @@ -238,7 +238,7 @@ make_builtin(const awk_ext_func_t *funcinfo) /* multiple extension() calls etc. */ if (do_lint) lintwarn(_("make_builtin: function `%s' already defined"), name); - return false; + return awk_false; } else /* variable name etc. */ fatal(_("make_builtin: function name `%s' previously defined"), name); @@ -258,7 +258,7 @@ make_builtin(const awk_ext_func_t *funcinfo) symbol = install_symbol(estrdup(name, strlen(name)), Node_ext_func); symbol->code_ptr = b; track_ext_func(name); - return true; + return awk_true; } /* make_old_builtin --- register name to be called as func with a builtin body */ diff --git a/io.c b/io.c index 3e527da0..b0b60deb 100644 --- a/io.c +++ b/io.c @@ -3968,7 +3968,7 @@ init_output_wrapper(awk_output_buf_t *outbuf) outbuf->mode = NULL; outbuf->fp = NULL; outbuf->opaque = NULL; - outbuf->redirected = false; + outbuf->redirected = awk_false; outbuf->gawk_fwrite = gawk_fwrite; outbuf->gawk_fflush = gawk_fflush; outbuf->gawk_ferror = gawk_ferror; -- cgit v1.2.3 From bed0aeffb78aa0d7eef182885efaee24c08a88ba Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 5 Mar 2014 06:30:44 +0200 Subject: Minor fix in debug.c. --- ChangeLog | 5 +++++ debug.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 669f5a0c..862e2e8c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -9,6 +9,11 @@ * ext.c (make_builtin): Use awk_false, awk_true. * io.c (init_output_wrapper): Use awk_false. + Unrelated: + + * debug.c (do_commands): Initialize num to silence warnings. + Thanks to Michal Jaegermann. + 2014-03-03 Arnold D. Robbins * dfa.c: Sync with grep. Yet again. diff --git a/debug.c b/debug.c index 8df9ed0d..b55f3577 100644 --- a/debug.c +++ b/debug.c @@ -4851,7 +4851,7 @@ do_commands(CMDARG *arg, int cmd) struct commands_item *c; if (cmd == D_commands) { - int num, type; + int num = -1, type; if (arg == NULL) type = has_break_or_watch_point(&num, true); else { -- cgit v1.2.3 From fe9bbbd473aad5e3ca992bb7b1634c69d658265a Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 5 Mar 2014 20:36:11 +0200 Subject: Update VMS doc. --- doc/ChangeLog | 5 ++++ doc/gawk.info | 87 ++++++++++++++++++++++++++------------------------------- doc/gawk.texi | 11 ++------ doc/gawktexi.in | 11 ++------ 4 files changed, 49 insertions(+), 65 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index ccbeaafd..5e42570d 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2014-03-02 John E. Malmberg + + * gawktext.in: Remove paragraph about obsolete VMS + compilers. Update reference about building PCSI kit. + 2014-02-27 Arnold D. Robbins * gawktexi.in: Lots of small fixes throughout, update of diff --git a/doc/gawk.info b/doc/gawk.info index 73ab988f..11e5a71a 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -26698,20 +26698,13 @@ available from `https://github.com/endlesssoftware/mmk'. With `ODS-5' volumes and extended parsing enabled, the case of the target parameter may need to be exact. - Older versions of `gawk' could be built with VAX C or GNU C on -VAX/VMS, as well as with DEC C, but that is no longer supported. DEC C -(also briefly known as "Compaq C" and now known as "HP C," but referred -to here as "DEC C") is required. Both `vmsbuild.com' and `descrip.mms' -contain some obsolete support for the older compilers but are set up to -use DEC C by default. - `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) - Work is currently being done for a procedure to build `gawk' and -create a PCSI kit for compatible with the GNV product. + The `[.vms]gawk_build_steps.txt' provides information on how to build +`gawk' into a PCSI kit that is compatible with the GNV product. ---------- Footnotes ---------- @@ -33242,43 +33235,43 @@ Node: Cygwin1066583 Node: MSYS1067392 Node: VMS Installation1067906 Node: VMS Compilation1068670 -Ref: VMS Compilation-Footnote-11070285 -Node: VMS Dynamic Extensions1070343 -Node: VMS Installation Details1071716 -Node: VMS Running1073967 -Node: VMS GNV1076801 -Node: VMS Old Gawk1077524 -Node: Bugs1077994 -Node: Other Versions1081912 -Node: Notes1087996 -Node: Compatibility Mode1088796 -Node: Additions1089579 -Node: Accessing The Source1090506 -Node: Adding Code1091946 -Node: New Ports1097991 -Node: Derived Files1102126 -Ref: Derived Files-Footnote-11107447 -Ref: Derived Files-Footnote-21107481 -Ref: Derived Files-Footnote-31108081 -Node: Future Extensions1108179 -Node: Implementation Limitations1108762 -Node: Extension Design1110014 -Node: Old Extension Problems1111168 -Ref: Old Extension Problems-Footnote-11112676 -Node: Extension New Mechanism Goals1112733 -Ref: Extension New Mechanism Goals-Footnote-11116098 -Node: Extension Other Design Decisions1116284 -Node: Extension Future Growth1118390 -Node: Old Extension Mechanism1119226 -Node: Basic Concepts1120966 -Node: Basic High Level1121647 -Ref: figure-general-flow1121918 -Ref: figure-process-flow1122517 -Ref: Basic High Level-Footnote-11125746 -Node: Basic Data Typing1125931 -Node: Glossary1129286 -Node: Copying1154748 -Node: GNU Free Documentation License1192305 -Node: Index1217442 +Ref: VMS Compilation-Footnote-11069922 +Node: VMS Dynamic Extensions1069980 +Node: VMS Installation Details1071353 +Node: VMS Running1073604 +Node: VMS GNV1076438 +Node: VMS Old Gawk1077161 +Node: Bugs1077631 +Node: Other Versions1081549 +Node: Notes1087633 +Node: Compatibility Mode1088433 +Node: Additions1089216 +Node: Accessing The Source1090143 +Node: Adding Code1091583 +Node: New Ports1097628 +Node: Derived Files1101763 +Ref: Derived Files-Footnote-11107084 +Ref: Derived Files-Footnote-21107118 +Ref: Derived Files-Footnote-31107718 +Node: Future Extensions1107816 +Node: Implementation Limitations1108399 +Node: Extension Design1109651 +Node: Old Extension Problems1110805 +Ref: Old Extension Problems-Footnote-11112313 +Node: Extension New Mechanism Goals1112370 +Ref: Extension New Mechanism Goals-Footnote-11115735 +Node: Extension Other Design Decisions1115921 +Node: Extension Future Growth1118027 +Node: Old Extension Mechanism1118863 +Node: Basic Concepts1120603 +Node: Basic High Level1121284 +Ref: figure-general-flow1121555 +Ref: figure-process-flow1122154 +Ref: Basic High Level-Footnote-11125383 +Node: Basic Data Typing1125568 +Node: Glossary1128923 +Node: Copying1154385 +Node: GNU Free Documentation License1191942 +Node: Index1217079  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 736c42c3..eefdf4e9 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -35561,21 +35561,14 @@ can better handle @code{ODS-5} volumes with upper- and lowercase filenames. With @code{ODS-5} volumes and extended parsing enabled, the case of the target parameter may need to be exact. -Older versions of @command{gawk} could be built with VAX C or -GNU C on VAX/VMS, as well as with DEC C, but that is no longer -supported. DEC C (also briefly known as ``Compaq C'' and now known -as ``HP C,'' but referred to here as ``DEC C'') is required. Both -@code{vmsbuild.com} and @code{descrip.mms} contain some obsolete support -for the older compilers but are set up to use DEC C by default. - @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. 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.''} -Work is currently being done for a procedure to build @command{gawk} and create -a PCSI kit for compatible with the GNV product. +The @file{[.vms]gawk_build_steps.txt} provides information on how to build +@command{gawk} into a PCSI kit that is compatible with the GNV product. @node VMS Dynamic Extensions @appendixsubsubsec Compiling @command{gawk} Dynamic Extensions on VMS diff --git a/doc/gawktexi.in b/doc/gawktexi.in index cb9546ea..790bd130 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -34704,21 +34704,14 @@ can better handle @code{ODS-5} volumes with upper- and lowercase filenames. With @code{ODS-5} volumes and extended parsing enabled, the case of the target parameter may need to be exact. -Older versions of @command{gawk} could be built with VAX C or -GNU C on VAX/VMS, as well as with DEC C, but that is no longer -supported. DEC C (also briefly known as ``Compaq C'' and now known -as ``HP C,'' but referred to here as ``DEC C'') is required. Both -@code{vmsbuild.com} and @code{descrip.mms} contain some obsolete support -for the older compilers but are set up to use DEC C by default. - @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. 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.''} -Work is currently being done for a procedure to build @command{gawk} and create -a PCSI kit for compatible with the GNV product. +The @file{[.vms]gawk_build_steps.txt} provides information on how to build +@command{gawk} into a PCSI kit that is compatible with the GNV product. @node VMS Dynamic Extensions @appendixsubsubsec Compiling @command{gawk} Dynamic Extensions on VMS -- cgit v1.2.3 From 31206f0309881ee76cb7aba8c7537b15c34b78aa Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 5 Mar 2014 22:28:40 +0200 Subject: Minor fix for mktime. --- ChangeLog | 5 +++++ builtin.c | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 862e2e8c..887d026c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -14,6 +14,11 @@ * debug.c (do_commands): Initialize num to silence warnings. Thanks to Michal Jaegermann. + Unrelated: + + * builtin.c (do_mktime): Change lint warning for minutes to + check against 59, not 60. Thanks to Hermann Peifer for the report. + 2014-03-03 Arnold D. Robbins * dfa.c: Sync with grep. Yet again. diff --git a/builtin.c b/builtin.c index 72aea3b0..ffc303ab 100644 --- a/builtin.c +++ b/builtin.c @@ -1999,10 +1999,10 @@ do_mktime(int nargs) & hour, & minute, & second, & dst); - if (do_lint /* Ready? Set! Go: */ - && ( (second < 0 || second > 60) - || (minute < 0 || minute > 60) - || (hour < 0 || hour > 23) + if ( do_lint /* Ready? Set! Go: */ + && ( (second < 0 || second > 60) + || (minute < 0 || minute > 59) + || (hour < 0 || hour > 23) /* FIXME ISO 8601 allows 24 ? */ || (day < 1 || day > 31) || (month < 1 || month > 12) )) lintwarn(_("mktime: at least one of the values is out of the default range")); -- cgit v1.2.3 From 4c0b1ddb06fd9329fd34db65a93e067d6426a7d1 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 7 Mar 2014 10:46:18 +0200 Subject: First round of indexing improvements. --- doc/ChangeLog | 6 +- doc/gawk.info | 850 +++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 118 ++++++-- doc/gawktexi.in | 116 ++++++-- 4 files changed, 640 insertions(+), 450 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 5e42570d..cf61ad19 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,6 +1,10 @@ +2014-03-07 Arnold D. Robbins + + * gawktexi.in: Indexing improvements. + 2014-03-02 John E. Malmberg - * gawktext.in: Remove paragraph about obsolete VMS + * gawktexi.in: Remove paragraph about obsolete VMS compilers. Update reference about building PCSI kit. 2014-02-27 Arnold D. Robbins diff --git a/doc/gawk.info b/doc/gawk.info index 11e5a71a..6fb7ee3e 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -8559,6 +8559,10 @@ worked around; range patterns do not combine with other patterns: error--> gawk: cmd. line:1: (/1/,/2/) || /Yes/ error--> gawk: cmd. line:1: ^ syntax error + As a minor point of interest, although it is poor style, POSIX +allows you to put a newline after the comma in a range pattern. +(d.c.) +  File: gawk.info, Node: BEGIN/END, Next: BEGINFILE/ENDFILE, Prev: Ranges, Up: Pattern Overview @@ -9379,12 +9383,12 @@ listed in `ARGV'. standard. See the Austin Group website (http://austingroupbugs.net/view.php?id=607). - The current version of the Brian Kernighan's `awk' (*note Other -Versions::) also supports `nextfile'. However, it doesn'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 the Brian Kernighan's `awk', and `mawk' +(*note Other Versions::) 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 @@ -29964,11 +29968,11 @@ Index * # (number sign), #! (executable scripts): Executable Scripts. (line 6) * # (number sign), commenting: Comments. (line 6) -* $ (dollar sign): Regexp Operators. (line 35) * $ (dollar sign), $ field operator <1>: Precedence. (line 43) * $ (dollar sign), $ field operator: Fields. (line 19) * $ (dollar sign), incrementing fields and arrays: Increment Ops. (line 30) +* $ (dollar sign), regexp operator: Regexp Operators. (line 35) * % (percent sign), % operator: Precedence. (line 55) * % (percent sign), %= operator <1>: Precedence. (line 95) * % (percent sign), %= operator: Assignment Ops. (line 129) @@ -29995,12 +29999,12 @@ Index * * (asterisk), **= operator: Assignment Ops. (line 129) * * (asterisk), *= operator <1>: Precedence. (line 95) * * (asterisk), *= operator: Assignment Ops. (line 129) -* + (plus sign): Regexp Operators. (line 102) * + (plus sign), + operator: Precedence. (line 52) * + (plus sign), ++ operator <1>: Precedence. (line 46) * + (plus sign), ++ operator: Increment Ops. (line 11) * + (plus sign), += operator <1>: Precedence. (line 95) * + (plus sign), += operator: Assignment Ops. (line 82) +* + (plus sign), regexp operator: Regexp Operators. (line 102) * , (comma), in range patterns: Ranges. (line 6) * - (hyphen), - operator: Precedence. (line 52) * - (hyphen), -- operator <1>: Precedence. (line 46) @@ -30106,17 +30110,18 @@ Index (line 147) * / (forward slash), patterns and: Expression Patterns. (line 24) * /= operator vs. /=.../ regexp constant: Assignment Ops. (line 147) -* /dev/... special files (gawk): Special FD. (line 46) -* /dev/fd/N special files: Special FD. (line 46) +* /dev/... special files: Special FD. (line 46) +* /dev/fd/N special files (gawk): Special FD. (line 46) * /inet/... special files (gawk): TCP/IP Networking. (line 6) * /inet4/... special files (gawk): TCP/IP Networking. (line 6) * /inet6/... special files (gawk): TCP/IP Networking. (line 6) -* ; (semicolon): Statements/Lines. (line 91) * ; (semicolon), AWKPATH variable and: PC Using. (line 10) * ; (semicolon), separating statements in actions <1>: Statements. (line 10) -* ; (semicolon), separating statements in actions: Action Overview. +* ; (semicolon), separating statements in actions <2>: Action Overview. (line 19) +* ; (semicolon), separating statements in actions: Statements/Lines. + (line 91) * < (left angle bracket), < operator <1>: Precedence. (line 65) * < (left angle bracket), < operator: Comparison Operators. (line 11) @@ -30137,10 +30142,10 @@ Index (line 11) * > (right angle bracket), >> operator (I/O) <1>: Precedence. (line 65) * > (right angle bracket), >> operator (I/O): Redirection. (line 50) -* ? (question mark) regexp operator <1>: GNU Regexp Operators. - (line 59) -* ? (question mark) regexp operator: Regexp Operators. (line 111) * ? (question mark), ?: operator: Precedence. (line 92) +* ? (question mark), regexp operator <1>: GNU Regexp Operators. + (line 59) +* ? (question mark), regexp operator: Regexp Operators. (line 111) * [] (square brackets): Regexp Operators. (line 55) * \ (backslash) <1>: Regexp Operators. (line 18) * \ (backslash) <2>: Quoting. (line 31) @@ -30192,20 +30197,21 @@ Index * \ (backslash), in escape sequences, POSIX and: Escape Sequences. (line 112) * \ (backslash), in regexp constants: Computed Regexps. (line 28) -* ^ (caret): GNU Regexp Operators. - (line 59) * ^ (caret), ^ operator: Precedence. (line 49) * ^ (caret), ^= operator <1>: Precedence. (line 95) * ^ (caret), ^= operator: Assignment Ops. (line 129) * ^ (caret), in bracket expressions: Bracket Expressions. (line 17) -* ^ (caret), regexp operator: Regexp Operators. (line 22) -* ^, in FS: Regexp Field Splitting. +* ^ (caret), in FS: Regexp Field Splitting. + (line 59) +* ^ (caret), regexp operator <1>: GNU Regexp Operators. (line 59) +* ^ (caret), regexp operator: Regexp Operators. (line 22) * _ (underscore), C macro: Explaining gettext. (line 70) * _ (underscore), in names of private variables: Library Names. (line 29) * _ (underscore), translatable string: Programmer i18n. (line 69) * _gr_init() user-defined function: Group Functions. (line 82) +* _ord_init() user-defined function: Ordinal Functions. (line 16) * _pw_init() user-defined function: Passwd Functions. (line 105) * accessing fields: Fields. (line 6) * account information <1>: Group Functions. (line 6) @@ -30219,8 +30225,6 @@ Index * adding, fields: Changing Fields. (line 53) * advanced features, fixed-width data: Constant Size. (line 10) * advanced features, gawk: Advanced Features. (line 6) -* advanced features, network connections, See Also networks, connections: Advanced Features. - (line 6) * advanced features, network programming: TCP/IP Networking. (line 6) * advanced features, nondecimal input data: Nondecimal Data. (line 6) * advanced features, processes, communicating with: Two-way I/O. @@ -30242,6 +30246,7 @@ Index * ampersand (&), gsub()/gensub()/sub() functions and: Gory Details. (line 6) * anagram.awk program: Anagram Program. (line 22) +* anagrams, finding: Anagram Program. (line 6) * AND bitwise operation: Bitwise Functions. (line 6) * and Boolean-logic operator: Boolean Ops. (line 6) * and() function (gawk): Bitwise Functions. (line 39) @@ -30440,8 +30445,8 @@ Index * backslash (\), in regexp constants: Computed Regexps. (line 28) * backtrace debugger command: Execution Stack. (line 13) * BBS-list file: Sample Data Files. (line 6) -* Beebe, Nelson <1>: Other Versions. (line 78) -* Beebe, Nelson: Acknowledgments. (line 60) +* Beebe, Nelson H.F. <1>: Other Versions. (line 78) +* Beebe, Nelson H.F.: Acknowledgments. (line 60) * BEGIN pattern <1>: Profiling. (line 62) * BEGIN pattern <2>: BEGIN/END. (line 6) * BEGIN pattern <3>: Field Separators. (line 45) @@ -30467,7 +30472,9 @@ Index * BEGINFILE pattern, Boolean patterns and: Expression Patterns. (line 73) * beginfile() user-defined function: Filetrans Function. (line 62) +* Bentley, Jon: Glossary. (line 151) * Benzinger, Michael: Contributors. (line 97) +* Berry, Karl <1>: Ranges and Locales. (line 74) * Berry, Karl: Acknowledgments. (line 33) * binary input/output: User-modified. (line 10) * bindtextdomain() function (C library): Explaining gettext. (line 49) @@ -30509,9 +30516,28 @@ Index * Brennan, Michael <1>: Other Versions. (line 6) * Brennan, Michael <2>: Two-way I/O. (line 6) * Brennan, Michael <3>: Simple Sed. (line 25) -* Brennan, Michael: Delete. (line 56) -* Brian Kernighan's awk: Other Versions. (line 13) +* Brennan, Michael <4>: Delete. (line 56) +* Brennan, Michael: Foreword. (line 83) +* Brian Kernighan's awk <1>: I/O Functions. (line 40) +* Brian Kernighan's awk <2>: Gory Details. (line 15) +* Brian Kernighan's awk <3>: String Functions. (line 489) +* Brian Kernighan's awk <4>: Delete. (line 48) +* Brian Kernighan's awk <5>: Nextfile Statement. (line 47) +* Brian Kernighan's awk <6>: Continue Statement. (line 43) +* Brian Kernighan's awk <7>: Break Statement. (line 51) +* Brian Kernighan's awk <8>: I/O And BEGIN/END. (line 16) +* Brian Kernighan's awk <9>: Concatenation. (line 36) +* Brian Kernighan's awk <10>: Getline/Pipe. (line 62) +* Brian Kernighan's awk <11>: Regexp Field Splitting. + (line 67) +* Brian Kernighan's awk <12>: GNU Regexp Operators. + (line 83) +* Brian Kernighan's awk <13>: Escape Sequences. (line 116) +* Brian Kernighan's awk <14>: When. (line 21) +* Brian Kernighan's awk: Preface. (line 15) * Brian Kernighan's awk, extensions: BTL. (line 6) +* Brian Kernighan's awk, source code: Other Versions. (line 13) +* Brini, Davide: Signature Program. (line 6) * Broder, Alan J.: Contributors. (line 88) * Brown, Martin: Contributors. (line 82) * BSD-based operating systems: Glossary. (line 624) @@ -30538,12 +30564,12 @@ Index (line 47) * call by value: Pass By Value/Reference. (line 18) -* caret (^): GNU Regexp Operators. - (line 59) * caret (^), ^ operator: Precedence. (line 49) * caret (^), ^= operator <1>: Precedence. (line 95) * caret (^), ^= operator: Assignment Ops. (line 129) * caret (^), in bracket expressions: Bracket Expressions. (line 17) +* caret (^), regexp operator <1>: GNU Regexp Operators. + (line 59) * caret (^), regexp operator: Regexp Operators. (line 22) * case keyword: Switch Statement. (line 6) * case sensitivity, array indices and: Array Intro. (line 91) @@ -30554,6 +30580,8 @@ Index * case sensitivity, regexps and: Case-sensitivity. (line 6) * case sensitivity, string comparisons and: User-modified. (line 82) * CGI, awk scripts for: Options. (line 125) +* character classes, See bracket expressions: Regexp Operators. + (line 55) * character lists, See bracket expressions: Regexp Operators. (line 55) * character sets (machine character encodings) <1>: Glossary. (line 141) * character sets (machine character encodings): Ordinal Functions. @@ -30894,6 +30922,8 @@ Index (line 23) * differences in awk and gawk, close() function: Close Files And Pipes. (line 81) +* differences in awk and gawk, command line directories: Command line directories. + (line 6) * differences in awk and gawk, ERRNO variable: Auto-set. (line 73) * differences in awk and gawk, error messages: Special FD. (line 16) * differences in awk and gawk, FIELDWIDTHS variable: User-modified. @@ -30936,8 +30966,6 @@ Index (line 346) * differences in awk and gawk, strings: Scalar Constants. (line 20) * differences in awk and gawk, strings, storing: Records. (line 191) -* differences in awk and gawk, strtonum() function (gawk): String Functions. - (line 401) * differences in awk and gawk, SYMTAB variable: Auto-set. (line 274) * differences in awk and gawk, TEXTDOMAIN variable: User-modified. (line 162) @@ -30957,11 +30985,11 @@ Index * documentation, of awk programs: Library Names. (line 6) * documentation, online: Manual History. (line 11) * documents, searching: Dupword Program. (line 6) -* dollar sign ($): Regexp Operators. (line 35) * dollar sign ($), $ field operator <1>: Precedence. (line 43) * dollar sign ($), $ field operator: Fields. (line 19) * dollar sign ($), incrementing fields and arrays: Increment Ops. (line 30) +* dollar sign ($), regexp operator: Regexp Operators. (line 35) * double precision floating-point: General Arithmetic. (line 21) * double quote (") <1>: Quoting. (line 37) * double quote ("): Read Terminal. (line 25) @@ -31078,6 +31106,7 @@ Index * extensions, common, \x escape sequence: Escape Sequences. (line 61) * 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 40) * extensions, common, func keyword: Definition Syntax. (line 83) * extensions, common, length() applied to an array: String Functions. (line 193) @@ -31199,10 +31228,10 @@ Index * fixed-width data: Constant Size. (line 10) * flag variables <1>: Tee Program. (line 20) * flag variables: Boolean Ops. (line 67) -* floating-point numbers, arbitrary precision: Arbitrary Precision Arithmetic. - (line 6) * floating-point, numbers <1>: Unexpected Results. (line 6) * floating-point, numbers: General Arithmetic. (line 6) +* floating-point, numbers, arbitrary precision: Arbitrary Precision Arithmetic. + (line 6) * floating-point, VAX/VMS: VMS Running. (line 51) * fnmatch() extension function: Extension Sample Fnmatch. (line 12) @@ -31605,14 +31634,16 @@ Index * Kahrs, Ju"rgen: Acknowledgments. (line 60) * Kasal, Stepan: Acknowledgments. (line 60) * Kenobi, Obi-Wan: Undocumented. (line 6) -* Kernighan, Brian <1>: Basic Data Typing. (line 55) -* Kernighan, Brian <2>: Other Versions. (line 13) -* Kernighan, Brian <3>: Contributors. (line 11) -* Kernighan, Brian <4>: BTL. (line 6) -* Kernighan, Brian <5>: Library Functions. (line 12) -* Kernighan, Brian <6>: Concatenation. (line 6) -* Kernighan, Brian <7>: Acknowledgments. (line 72) -* Kernighan, Brian <8>: Conventions. (line 34) +* Kernighan, Brian <1>: Glossary. (line 151) +* Kernighan, Brian <2>: Basic Data Typing. (line 55) +* Kernighan, Brian <3>: Other Versions. (line 13) +* Kernighan, Brian <4>: Contributors. (line 11) +* Kernighan, Brian <5>: BTL. (line 6) +* Kernighan, Brian <6>: Library Functions. (line 12) +* Kernighan, Brian <7>: Concatenation. (line 6) +* Kernighan, Brian <8>: Getline/Pipe. (line 6) +* Kernighan, Brian <9>: Acknowledgments. (line 72) +* Kernighan, Brian <10>: Conventions. (line 34) * Kernighan, Brian: History. (line 17) * kill command, dynamic profiling: Profiling. (line 188) * Knights, jedi: Undocumented. (line 6) @@ -31733,7 +31764,11 @@ Index (line 9) * matching, leftmost longest: Multiple Line. (line 26) * matching, null strings: Gory Details. (line 164) -* mawk utility: Other Versions. (line 44) +* mawk utility <1>: Other Versions. (line 44) +* 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 124) * McPhee, Patrick: Contributors. (line 100) * message object files: Explaining gettext. (line 41) * message object files, converting from portable object files: I18N Example. @@ -31952,12 +31987,12 @@ Index * Pitts, Dave <1>: Bugs. (line 73) * Pitts, Dave: Acknowledgments. (line 60) * Plauger, P.J.: Library Functions. (line 12) -* plus sign (+): Regexp Operators. (line 102) * plus sign (+), + operator: Precedence. (line 52) * plus sign (+), ++ operator <1>: Precedence. (line 46) * plus sign (+), ++ operator: Increment Ops. (line 11) * plus sign (+), += operator <1>: Precedence. (line 95) * plus sign (+), += operator: Assignment Ops. (line 82) +* plus sign (+), regexp operator: Regexp Operators. (line 102) * pointers to functions: Indirect Calls. (line 6) * portability: Escape Sequences. (line 94) * portability, #! (executable scripts): Executable Scripts. (line 33) @@ -32117,10 +32152,10 @@ Index (line 99) * QSE Awk: Other Versions. (line 130) * Quanstrom, Erik: Alarm Program. (line 8) -* question mark (?) regexp operator <1>: GNU Regexp Operators. - (line 59) -* question mark (?) regexp operator: Regexp Operators. (line 111) * question mark (?), ?: operator: Precedence. (line 92) +* question mark (?), regexp operator <1>: GNU Regexp Operators. + (line 59) +* question mark (?), regexp operator: Regexp Operators. (line 111) * QuikTrim Awk: Other Versions. (line 134) * quit debugger command: Miscellaneous Debugger Commands. (line 99) @@ -32143,6 +32178,7 @@ Index * random numbers, seed of: Numeric Functions. (line 64) * range expressions (regexps): Bracket Expressions. (line 6) * range patterns: Ranges. (line 6) +* range patterns, line continuation and: Ranges. (line 65) * Rankin, Pat <1>: Bugs. (line 72) * Rankin, Pat <2>: Contributors. (line 37) * Rankin, Pat <3>: Assignment Ops. (line 100) @@ -32307,12 +32343,13 @@ Index * sed utility <2>: Simple Sed. (line 6) * sed utility: Field Splitting Summary. (line 46) -* semicolon (;): Statements/Lines. (line 91) * semicolon (;), AWKPATH variable and: PC Using. (line 10) * semicolon (;), separating statements in actions <1>: Statements. (line 10) -* semicolon (;), separating statements in actions: Action Overview. +* semicolon (;), separating statements in actions <2>: Action Overview. (line 19) +* semicolon (;), separating statements in actions: Statements/Lines. + (line 91) * separators, field: User-modified. (line 56) * separators, field, FIELDWIDTHS variable and: User-modified. (line 35) * separators, field, FPAT variable and: User-modified. (line 45) @@ -32385,6 +32422,7 @@ Index * signals, INT/SIGINT (MS-Windows): Profiling. (line 214) * signals, QUIT/SIGQUIT (MS-Windows): Profiling. (line 214) * signals, USR1/SIGUSR1: Profiling. (line 188) +* signature program: Signature Program. (line 6) * SIGQUIT signal (MS-Windows): Profiling. (line 214) * SIGUSR1 signal: Profiling. (line 188) * silent debugger command: Debugger Execution Control. @@ -32605,7 +32643,9 @@ Index * undisplay debugger command: Viewing And Changing Data. (line 80) * undocumented features: Undocumented. (line 6) -* Unicode: Glossary. (line 141) +* Unicode <1>: Glossary. (line 141) +* 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) @@ -32916,362 +32956,362 @@ Node: Pattern Overview358484 Node: Regexp Patterns360153 Node: Expression Patterns360696 Node: Ranges364381 -Node: BEGIN/END367347 -Node: Using BEGIN/END368109 -Ref: Using BEGIN/END-Footnote-1370840 -Node: I/O And BEGIN/END370946 -Node: BEGINFILE/ENDFILE373228 -Node: Empty376142 -Node: Using Shell Variables376458 -Node: Action Overview378743 -Node: Statements381100 -Node: If Statement382954 -Node: While Statement384453 -Node: Do Statement386497 -Node: For Statement387653 -Node: Switch Statement390805 -Node: Break Statement392959 -Node: Continue Statement394949 -Node: Next Statement396742 -Node: Nextfile Statement399132 -Node: Exit Statement401775 -Node: Built-in Variables404191 -Node: User-modified405286 -Ref: User-modified-Footnote-1413644 -Node: Auto-set413706 -Ref: Auto-set-Footnote-1426784 -Ref: Auto-set-Footnote-2426989 -Node: ARGC and ARGV427045 -Node: Arrays430896 -Node: Array Basics432401 -Node: Array Intro433227 -Node: Reference to Elements437544 -Node: Assigning Elements439814 -Node: Array Example440305 -Node: Scanning an Array442037 -Node: Controlling Scanning444351 -Ref: Controlling Scanning-Footnote-1449438 -Node: Delete449754 -Ref: Delete-Footnote-1452519 -Node: Numeric Array Subscripts452576 -Node: Uninitialized Subscripts454759 -Node: Multidimensional456386 -Node: Multiscanning459479 -Node: Arrays of Arrays461068 -Node: Functions465708 -Node: Built-in466527 -Node: Calling Built-in467605 -Node: Numeric Functions469593 -Ref: Numeric Functions-Footnote-1473425 -Ref: Numeric Functions-Footnote-2473782 -Ref: Numeric Functions-Footnote-3473830 -Node: String Functions474099 -Ref: String Functions-Footnote-1497019 -Ref: String Functions-Footnote-2497148 -Ref: String Functions-Footnote-3497396 -Node: Gory Details497483 -Ref: table-sub-escapes499162 -Ref: table-sub-posix-92500516 -Ref: table-sub-proposed501867 -Ref: table-posix-sub503221 -Ref: table-gensub-escapes504766 -Ref: Gory Details-Footnote-1505942 -Ref: Gory Details-Footnote-2505993 -Node: I/O Functions506144 -Ref: I/O Functions-Footnote-1513134 -Node: Time Functions513281 -Ref: Time Functions-Footnote-1524214 -Ref: Time Functions-Footnote-2524282 -Ref: Time Functions-Footnote-3524440 -Ref: Time Functions-Footnote-4524551 -Ref: Time Functions-Footnote-5524663 -Ref: Time Functions-Footnote-6524890 -Node: Bitwise Functions525156 -Ref: table-bitwise-ops525718 -Ref: Bitwise Functions-Footnote-1529939 -Node: Type Functions530123 -Node: I18N Functions531274 -Node: User-defined532901 -Node: Definition Syntax533705 -Ref: Definition Syntax-Footnote-1538619 -Node: Function Example538688 -Ref: Function Example-Footnote-1541337 -Node: Function Caveats541359 -Node: Calling A Function541877 -Node: Variable Scope542832 -Node: Pass By Value/Reference545795 -Node: Return Statement549303 -Node: Dynamic Typing552284 -Node: Indirect Calls553215 -Node: Library Functions562902 -Ref: Library Functions-Footnote-1566415 -Ref: Library Functions-Footnote-2566558 -Node: Library Names566729 -Ref: Library Names-Footnote-1570202 -Ref: Library Names-Footnote-2570422 -Node: General Functions570508 -Node: Strtonum Function571536 -Node: Assert Function574466 -Node: Round Function577792 -Node: Cliff Random Function579333 -Node: Ordinal Functions580349 -Ref: Ordinal Functions-Footnote-1583426 -Ref: Ordinal Functions-Footnote-2583678 -Node: Join Function583889 -Ref: Join Function-Footnote-1585660 -Node: Getlocaltime Function585860 -Node: Readfile Function589601 -Node: Data File Management591440 -Node: Filetrans Function592072 -Node: Rewind Function596141 -Node: File Checking597528 -Node: Empty Files598622 -Node: Ignoring Assigns600852 -Node: Getopt Function602406 -Ref: Getopt Function-Footnote-1613709 -Node: Passwd Functions613912 -Ref: Passwd Functions-Footnote-1622890 -Node: Group Functions622978 -Node: Walking Arrays631062 -Node: Sample Programs633198 -Node: Running Examples633872 -Node: Clones634600 -Node: Cut Program635824 -Node: Egrep Program645675 -Ref: Egrep Program-Footnote-1653448 -Node: Id Program653558 -Node: Split Program657174 -Ref: Split Program-Footnote-1660693 -Node: Tee Program660821 -Node: Uniq Program663624 -Node: Wc Program671053 -Ref: Wc Program-Footnote-1675319 -Ref: Wc Program-Footnote-2675519 -Node: Miscellaneous Programs675611 -Node: Dupword Program676799 -Node: Alarm Program678830 -Node: Translate Program683637 -Ref: Translate Program-Footnote-1688024 -Ref: Translate Program-Footnote-2688272 -Node: Labels Program688406 -Ref: Labels Program-Footnote-1691777 -Node: Word Sorting691861 -Node: History Sorting695745 -Node: Extract Program697584 -Ref: Extract Program-Footnote-1705087 -Node: Simple Sed705215 -Node: Igawk Program708277 -Ref: Igawk Program-Footnote-1723434 -Ref: Igawk Program-Footnote-2723635 -Node: Anagram Program723773 -Node: Signature Program726841 -Node: Advanced Features727941 -Node: Nondecimal Data729827 -Node: Array Sorting731410 -Node: Controlling Array Traversal732107 -Node: Array Sorting Functions740391 -Ref: Array Sorting Functions-Footnote-1744260 -Node: Two-way I/O744454 -Ref: Two-way I/O-Footnote-1749886 -Node: TCP/IP Networking749968 -Node: Profiling752812 -Node: Internationalization760315 -Node: I18N and L10N761740 -Node: Explaining gettext762426 -Ref: Explaining gettext-Footnote-1767494 -Ref: Explaining gettext-Footnote-2767678 -Node: Programmer i18n767843 -Node: Translator i18n772045 -Node: String Extraction772839 -Ref: String Extraction-Footnote-1773800 -Node: Printf Ordering773886 -Ref: Printf Ordering-Footnote-1776668 -Node: I18N Portability776732 -Ref: I18N Portability-Footnote-1779181 -Node: I18N Example779244 -Ref: I18N Example-Footnote-1781882 -Node: Gawk I18N781954 -Node: Debugger782575 -Node: Debugging783546 -Node: Debugging Concepts783979 -Node: Debugging Terms785835 -Node: Awk Debugging788432 -Node: Sample Debugging Session789324 -Node: Debugger Invocation789844 -Node: Finding The Bug791177 -Node: List of Debugger Commands797664 -Node: Breakpoint Control798998 -Node: Debugger Execution Control802662 -Node: Viewing And Changing Data806022 -Node: Execution Stack809378 -Node: Debugger Info810845 -Node: Miscellaneous Debugger Commands814827 -Node: Readline Support820003 -Node: Limitations820834 -Node: Arbitrary Precision Arithmetic823086 -Ref: Arbitrary Precision Arithmetic-Footnote-1824735 -Node: General Arithmetic824883 -Node: Floating Point Issues826603 -Node: String Conversion Precision827484 -Ref: String Conversion Precision-Footnote-1829189 -Node: Unexpected Results829298 -Node: POSIX Floating Point Problems831451 -Ref: POSIX Floating Point Problems-Footnote-1835276 -Node: Integer Programming835314 -Node: Floating-point Programming837053 -Ref: Floating-point Programming-Footnote-1843384 -Ref: Floating-point Programming-Footnote-2843654 -Node: Floating-point Representation843918 -Node: Floating-point Context845083 -Ref: table-ieee-formats845922 -Node: Rounding Mode847306 -Ref: table-rounding-modes847785 -Ref: Rounding Mode-Footnote-1850800 -Node: Gawk and MPFR850979 -Node: Arbitrary Precision Floats852234 -Ref: Arbitrary Precision Floats-Footnote-1854677 -Node: Setting Precision854993 -Ref: table-predefined-precision-strings855679 -Node: Setting Rounding Mode857824 -Ref: table-gawk-rounding-modes858228 -Node: Floating-point Constants859415 -Node: Changing Precision860844 -Ref: Changing Precision-Footnote-1862241 -Node: Exact Arithmetic862415 -Node: Arbitrary Precision Integers865553 -Ref: Arbitrary Precision Integers-Footnote-1868568 -Node: Dynamic Extensions868715 -Node: Extension Intro870173 -Node: Plugin License871438 -Node: Extension Mechanism Outline872123 -Ref: load-extension872540 -Ref: load-new-function874018 -Ref: call-new-function875013 -Node: Extension API Description877028 -Node: Extension API Functions Introduction878241 -Node: General Data Types883107 -Ref: General Data Types-Footnote-1888709 -Node: Requesting Values889008 -Ref: table-value-types-returned889739 -Node: Constructor Functions890693 -Node: Registration Functions893713 -Node: Extension Functions894398 -Node: Exit Callback Functions896624 -Node: Extension Version String897873 -Node: Input Parsers898523 -Node: Output Wrappers908280 -Node: Two-way processors912790 -Node: Printing Messages914998 -Ref: Printing Messages-Footnote-1916075 -Node: Updating `ERRNO'916227 -Node: Accessing Parameters916966 -Node: Symbol Table Access918196 -Node: Symbol table by name918708 -Node: Symbol table by cookie920455 -Ref: Symbol table by cookie-Footnote-1924585 -Node: Cached values924648 -Ref: Cached values-Footnote-1928097 -Node: Array Manipulation928188 -Ref: Array Manipulation-Footnote-1929286 -Node: Array Data Types929325 -Ref: Array Data Types-Footnote-1932028 -Node: Array Functions932120 -Node: Flattening Arrays935886 -Node: Creating Arrays942738 -Node: Extension API Variables947463 -Node: Extension Versioning948099 -Node: Extension API Informational Variables950000 -Node: Extension API Boilerplate951086 -Node: Finding Extensions954890 -Node: Extension Example955450 -Node: Internal File Description956180 -Node: Internal File Ops960271 -Ref: Internal File Ops-Footnote-1971780 -Node: Using Internal File Ops971920 -Ref: Using Internal File Ops-Footnote-1974273 -Node: Extension Samples974539 -Node: Extension Sample File Functions976063 -Node: Extension Sample Fnmatch984548 -Node: Extension Sample Fork986317 -Node: Extension Sample Inplace987530 -Node: Extension Sample Ord989308 -Node: Extension Sample Readdir990144 -Node: Extension Sample Revout991676 -Node: Extension Sample Rev2way992269 -Node: Extension Sample Read write array992959 -Node: Extension Sample Readfile994842 -Node: Extension Sample API Tests995660 -Node: Extension Sample Time996185 -Node: gawkextlib997549 -Node: Language History1000330 -Node: V7/SVR3.11001923 -Node: SVR41004243 -Node: POSIX1005685 -Node: BTL1007071 -Node: POSIX/GNU1007805 -Node: Feature History1013404 -Node: Common Extensions1026380 -Node: Ranges and Locales1027692 -Ref: Ranges and Locales-Footnote-11032309 -Ref: Ranges and Locales-Footnote-21032336 -Ref: Ranges and Locales-Footnote-31032570 -Node: Contributors1032791 -Node: Installation1037936 -Node: Gawk Distribution1038830 -Node: Getting1039314 -Node: Extracting1040140 -Node: Distribution contents1041832 -Node: Unix Installation1047537 -Node: Quick Installation1048154 -Node: Additional Configuration Options1050600 -Node: Configuration Philosophy1052336 -Node: Non-Unix Installation1054690 -Node: PC Installation1055148 -Node: PC Binary Installation1056447 -Node: PC Compiling1058295 -Node: PC Testing1061239 -Node: PC Using1062415 -Node: Cygwin1066583 -Node: MSYS1067392 -Node: VMS Installation1067906 -Node: VMS Compilation1068670 -Ref: VMS Compilation-Footnote-11069922 -Node: VMS Dynamic Extensions1069980 -Node: VMS Installation Details1071353 -Node: VMS Running1073604 -Node: VMS GNV1076438 -Node: VMS Old Gawk1077161 -Node: Bugs1077631 -Node: Other Versions1081549 -Node: Notes1087633 -Node: Compatibility Mode1088433 -Node: Additions1089216 -Node: Accessing The Source1090143 -Node: Adding Code1091583 -Node: New Ports1097628 -Node: Derived Files1101763 -Ref: Derived Files-Footnote-11107084 -Ref: Derived Files-Footnote-21107118 -Ref: Derived Files-Footnote-31107718 -Node: Future Extensions1107816 -Node: Implementation Limitations1108399 -Node: Extension Design1109651 -Node: Old Extension Problems1110805 -Ref: Old Extension Problems-Footnote-11112313 -Node: Extension New Mechanism Goals1112370 -Ref: Extension New Mechanism Goals-Footnote-11115735 -Node: Extension Other Design Decisions1115921 -Node: Extension Future Growth1118027 -Node: Old Extension Mechanism1118863 -Node: Basic Concepts1120603 -Node: Basic High Level1121284 -Ref: figure-general-flow1121555 -Ref: figure-process-flow1122154 -Ref: Basic High Level-Footnote-11125383 -Node: Basic Data Typing1125568 -Node: Glossary1128923 -Node: Copying1154385 -Node: GNU Free Documentation License1191942 -Node: Index1217079 +Node: BEGIN/END367485 +Node: Using BEGIN/END368247 +Ref: Using BEGIN/END-Footnote-1370978 +Node: I/O And BEGIN/END371084 +Node: BEGINFILE/ENDFILE373366 +Node: Empty376280 +Node: Using Shell Variables376596 +Node: Action Overview378881 +Node: Statements381238 +Node: If Statement383092 +Node: While Statement384591 +Node: Do Statement386635 +Node: For Statement387791 +Node: Switch Statement390943 +Node: Break Statement393097 +Node: Continue Statement395087 +Node: Next Statement396880 +Node: Nextfile Statement399270 +Node: Exit Statement401925 +Node: Built-in Variables404341 +Node: User-modified405436 +Ref: User-modified-Footnote-1413794 +Node: Auto-set413856 +Ref: Auto-set-Footnote-1426934 +Ref: Auto-set-Footnote-2427139 +Node: ARGC and ARGV427195 +Node: Arrays431046 +Node: Array Basics432551 +Node: Array Intro433377 +Node: Reference to Elements437694 +Node: Assigning Elements439964 +Node: Array Example440455 +Node: Scanning an Array442187 +Node: Controlling Scanning444501 +Ref: Controlling Scanning-Footnote-1449588 +Node: Delete449904 +Ref: Delete-Footnote-1452669 +Node: Numeric Array Subscripts452726 +Node: Uninitialized Subscripts454909 +Node: Multidimensional456536 +Node: Multiscanning459629 +Node: Arrays of Arrays461218 +Node: Functions465858 +Node: Built-in466677 +Node: Calling Built-in467755 +Node: Numeric Functions469743 +Ref: Numeric Functions-Footnote-1473575 +Ref: Numeric Functions-Footnote-2473932 +Ref: Numeric Functions-Footnote-3473980 +Node: String Functions474249 +Ref: String Functions-Footnote-1497169 +Ref: String Functions-Footnote-2497298 +Ref: String Functions-Footnote-3497546 +Node: Gory Details497633 +Ref: table-sub-escapes499312 +Ref: table-sub-posix-92500666 +Ref: table-sub-proposed502017 +Ref: table-posix-sub503371 +Ref: table-gensub-escapes504916 +Ref: Gory Details-Footnote-1506092 +Ref: Gory Details-Footnote-2506143 +Node: I/O Functions506294 +Ref: I/O Functions-Footnote-1513284 +Node: Time Functions513431 +Ref: Time Functions-Footnote-1524364 +Ref: Time Functions-Footnote-2524432 +Ref: Time Functions-Footnote-3524590 +Ref: Time Functions-Footnote-4524701 +Ref: Time Functions-Footnote-5524813 +Ref: Time Functions-Footnote-6525040 +Node: Bitwise Functions525306 +Ref: table-bitwise-ops525868 +Ref: Bitwise Functions-Footnote-1530089 +Node: Type Functions530273 +Node: I18N Functions531424 +Node: User-defined533051 +Node: Definition Syntax533855 +Ref: Definition Syntax-Footnote-1538769 +Node: Function Example538838 +Ref: Function Example-Footnote-1541487 +Node: Function Caveats541509 +Node: Calling A Function542027 +Node: Variable Scope542982 +Node: Pass By Value/Reference545945 +Node: Return Statement549453 +Node: Dynamic Typing552434 +Node: Indirect Calls553365 +Node: Library Functions563052 +Ref: Library Functions-Footnote-1566565 +Ref: Library Functions-Footnote-2566708 +Node: Library Names566879 +Ref: Library Names-Footnote-1570352 +Ref: Library Names-Footnote-2570572 +Node: General Functions570658 +Node: Strtonum Function571686 +Node: Assert Function574616 +Node: Round Function577942 +Node: Cliff Random Function579483 +Node: Ordinal Functions580499 +Ref: Ordinal Functions-Footnote-1583576 +Ref: Ordinal Functions-Footnote-2583828 +Node: Join Function584039 +Ref: Join Function-Footnote-1585810 +Node: Getlocaltime Function586010 +Node: Readfile Function589751 +Node: Data File Management591590 +Node: Filetrans Function592222 +Node: Rewind Function596291 +Node: File Checking597678 +Node: Empty Files598772 +Node: Ignoring Assigns601002 +Node: Getopt Function602556 +Ref: Getopt Function-Footnote-1613859 +Node: Passwd Functions614062 +Ref: Passwd Functions-Footnote-1623040 +Node: Group Functions623128 +Node: Walking Arrays631212 +Node: Sample Programs633348 +Node: Running Examples634022 +Node: Clones634750 +Node: Cut Program635974 +Node: Egrep Program645825 +Ref: Egrep Program-Footnote-1653598 +Node: Id Program653708 +Node: Split Program657324 +Ref: Split Program-Footnote-1660843 +Node: Tee Program660971 +Node: Uniq Program663774 +Node: Wc Program671203 +Ref: Wc Program-Footnote-1675469 +Ref: Wc Program-Footnote-2675669 +Node: Miscellaneous Programs675761 +Node: Dupword Program676949 +Node: Alarm Program678980 +Node: Translate Program683787 +Ref: Translate Program-Footnote-1688174 +Ref: Translate Program-Footnote-2688422 +Node: Labels Program688556 +Ref: Labels Program-Footnote-1691927 +Node: Word Sorting692011 +Node: History Sorting695895 +Node: Extract Program697734 +Ref: Extract Program-Footnote-1705237 +Node: Simple Sed705365 +Node: Igawk Program708427 +Ref: Igawk Program-Footnote-1723584 +Ref: Igawk Program-Footnote-2723785 +Node: Anagram Program723923 +Node: Signature Program726991 +Node: Advanced Features728091 +Node: Nondecimal Data729977 +Node: Array Sorting731560 +Node: Controlling Array Traversal732257 +Node: Array Sorting Functions740541 +Ref: Array Sorting Functions-Footnote-1744410 +Node: Two-way I/O744604 +Ref: Two-way I/O-Footnote-1750036 +Node: TCP/IP Networking750118 +Node: Profiling752962 +Node: Internationalization760465 +Node: I18N and L10N761890 +Node: Explaining gettext762576 +Ref: Explaining gettext-Footnote-1767644 +Ref: Explaining gettext-Footnote-2767828 +Node: Programmer i18n767993 +Node: Translator i18n772195 +Node: String Extraction772989 +Ref: String Extraction-Footnote-1773950 +Node: Printf Ordering774036 +Ref: Printf Ordering-Footnote-1776818 +Node: I18N Portability776882 +Ref: I18N Portability-Footnote-1779331 +Node: I18N Example779394 +Ref: I18N Example-Footnote-1782032 +Node: Gawk I18N782104 +Node: Debugger782725 +Node: Debugging783696 +Node: Debugging Concepts784129 +Node: Debugging Terms785985 +Node: Awk Debugging788582 +Node: Sample Debugging Session789474 +Node: Debugger Invocation789994 +Node: Finding The Bug791327 +Node: List of Debugger Commands797814 +Node: Breakpoint Control799148 +Node: Debugger Execution Control802812 +Node: Viewing And Changing Data806172 +Node: Execution Stack809528 +Node: Debugger Info810995 +Node: Miscellaneous Debugger Commands814977 +Node: Readline Support820153 +Node: Limitations820984 +Node: Arbitrary Precision Arithmetic823236 +Ref: Arbitrary Precision Arithmetic-Footnote-1824885 +Node: General Arithmetic825033 +Node: Floating Point Issues826753 +Node: String Conversion Precision827634 +Ref: String Conversion Precision-Footnote-1829339 +Node: Unexpected Results829448 +Node: POSIX Floating Point Problems831601 +Ref: POSIX Floating Point Problems-Footnote-1835426 +Node: Integer Programming835464 +Node: Floating-point Programming837203 +Ref: Floating-point Programming-Footnote-1843534 +Ref: Floating-point Programming-Footnote-2843804 +Node: Floating-point Representation844068 +Node: Floating-point Context845233 +Ref: table-ieee-formats846072 +Node: Rounding Mode847456 +Ref: table-rounding-modes847935 +Ref: Rounding Mode-Footnote-1850950 +Node: Gawk and MPFR851129 +Node: Arbitrary Precision Floats852384 +Ref: Arbitrary Precision Floats-Footnote-1854827 +Node: Setting Precision855143 +Ref: table-predefined-precision-strings855829 +Node: Setting Rounding Mode857974 +Ref: table-gawk-rounding-modes858378 +Node: Floating-point Constants859565 +Node: Changing Precision860994 +Ref: Changing Precision-Footnote-1862391 +Node: Exact Arithmetic862565 +Node: Arbitrary Precision Integers865703 +Ref: Arbitrary Precision Integers-Footnote-1868718 +Node: Dynamic Extensions868865 +Node: Extension Intro870323 +Node: Plugin License871588 +Node: Extension Mechanism Outline872273 +Ref: load-extension872690 +Ref: load-new-function874168 +Ref: call-new-function875163 +Node: Extension API Description877178 +Node: Extension API Functions Introduction878391 +Node: General Data Types883257 +Ref: General Data Types-Footnote-1888859 +Node: Requesting Values889158 +Ref: table-value-types-returned889889 +Node: Constructor Functions890843 +Node: Registration Functions893863 +Node: Extension Functions894548 +Node: Exit Callback Functions896774 +Node: Extension Version String898023 +Node: Input Parsers898673 +Node: Output Wrappers908430 +Node: Two-way processors912940 +Node: Printing Messages915148 +Ref: Printing Messages-Footnote-1916225 +Node: Updating `ERRNO'916377 +Node: Accessing Parameters917116 +Node: Symbol Table Access918346 +Node: Symbol table by name918858 +Node: Symbol table by cookie920605 +Ref: Symbol table by cookie-Footnote-1924735 +Node: Cached values924798 +Ref: Cached values-Footnote-1928247 +Node: Array Manipulation928338 +Ref: Array Manipulation-Footnote-1929436 +Node: Array Data Types929475 +Ref: Array Data Types-Footnote-1932178 +Node: Array Functions932270 +Node: Flattening Arrays936036 +Node: Creating Arrays942888 +Node: Extension API Variables947613 +Node: Extension Versioning948249 +Node: Extension API Informational Variables950150 +Node: Extension API Boilerplate951236 +Node: Finding Extensions955040 +Node: Extension Example955600 +Node: Internal File Description956330 +Node: Internal File Ops960421 +Ref: Internal File Ops-Footnote-1971930 +Node: Using Internal File Ops972070 +Ref: Using Internal File Ops-Footnote-1974423 +Node: Extension Samples974689 +Node: Extension Sample File Functions976213 +Node: Extension Sample Fnmatch984698 +Node: Extension Sample Fork986467 +Node: Extension Sample Inplace987680 +Node: Extension Sample Ord989458 +Node: Extension Sample Readdir990294 +Node: Extension Sample Revout991826 +Node: Extension Sample Rev2way992419 +Node: Extension Sample Read write array993109 +Node: Extension Sample Readfile994992 +Node: Extension Sample API Tests995810 +Node: Extension Sample Time996335 +Node: gawkextlib997699 +Node: Language History1000480 +Node: V7/SVR3.11002073 +Node: SVR41004393 +Node: POSIX1005835 +Node: BTL1007221 +Node: POSIX/GNU1007955 +Node: Feature History1013554 +Node: Common Extensions1026530 +Node: Ranges and Locales1027842 +Ref: Ranges and Locales-Footnote-11032459 +Ref: Ranges and Locales-Footnote-21032486 +Ref: Ranges and Locales-Footnote-31032720 +Node: Contributors1032941 +Node: Installation1038086 +Node: Gawk Distribution1038980 +Node: Getting1039464 +Node: Extracting1040290 +Node: Distribution contents1041982 +Node: Unix Installation1047687 +Node: Quick Installation1048304 +Node: Additional Configuration Options1050750 +Node: Configuration Philosophy1052486 +Node: Non-Unix Installation1054840 +Node: PC Installation1055298 +Node: PC Binary Installation1056597 +Node: PC Compiling1058445 +Node: PC Testing1061389 +Node: PC Using1062565 +Node: Cygwin1066733 +Node: MSYS1067542 +Node: VMS Installation1068056 +Node: VMS Compilation1068820 +Ref: VMS Compilation-Footnote-11070072 +Node: VMS Dynamic Extensions1070130 +Node: VMS Installation Details1071503 +Node: VMS Running1073754 +Node: VMS GNV1076588 +Node: VMS Old Gawk1077311 +Node: Bugs1077781 +Node: Other Versions1081699 +Node: Notes1087783 +Node: Compatibility Mode1088583 +Node: Additions1089366 +Node: Accessing The Source1090293 +Node: Adding Code1091733 +Node: New Ports1097778 +Node: Derived Files1101913 +Ref: Derived Files-Footnote-11107234 +Ref: Derived Files-Footnote-21107268 +Ref: Derived Files-Footnote-31107868 +Node: Future Extensions1107966 +Node: Implementation Limitations1108549 +Node: Extension Design1109801 +Node: Old Extension Problems1110955 +Ref: Old Extension Problems-Footnote-11112463 +Node: Extension New Mechanism Goals1112520 +Ref: Extension New Mechanism Goals-Footnote-11115885 +Node: Extension Other Design Decisions1116071 +Node: Extension Future Growth1118177 +Node: Old Extension Mechanism1119013 +Node: Basic Concepts1120753 +Node: Basic High Level1121434 +Ref: figure-general-flow1121705 +Ref: figure-process-flow1122304 +Ref: Basic High Level-Footnote-11125533 +Node: Basic Data Typing1125718 +Node: Glossary1129073 +Node: Copying1154535 +Node: GNU Free Documentation License1192092 +Node: Index1217229  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index eefdf4e9..713f5a46 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -1000,6 +1000,7 @@ Arnold has distilled over a decade of experience writing and using AWK programs, and developing @command{gawk}, into this book. If you use AWK or want to learn how, then read this book. +@cindex Brennan, Michael @display Michael Brennan Author of @command{mawk} @@ -1024,6 +1025,7 @@ Such jobs are often easier with @command{awk}. The @command{awk} utility interprets a special-purpose programming language that makes it easy to handle simple data-reformatting jobs. +@cindex Brian Kernighan's @command{awk} The GNU implementation of @command{awk} is called @command{gawk}; if you invoke it with the proper options or environment variables (@pxref{Options}), it is fully @@ -1774,7 +1776,7 @@ significant editorial help for this @value{DOCUMENT} for the 3.1 release of @command{gawk}. @end quotation -@cindex Beebe, Nelson +@cindex Beebe, Nelson H.F.@: @cindex Buening, Andreas @cindex Collado, Manuel @cindex Colombo, Antonio @@ -3033,8 +3035,8 @@ noticed because it is ``hidden'' inside the comment. Thus, the @code{BEGIN} is noted as a syntax error. @cindex statements, multiple -@cindex @code{;} (semicolon) -@cindex semicolon (@code{;}) +@cindex @code{;} (semicolon), separating statements in actions +@cindex semicolon (@code{;}), separating statements in actions When @command{awk} statements within one rule are short, you might want to put more than one of them on a line. This is accomplished by separating the statements with a semicolon (@samp{;}). @@ -3094,6 +3096,7 @@ used once, and thrown away. Because @command{awk} programs are interpreted, you can avoid the (usually lengthy) compilation part of the typical edit-compile-test-debug cycle of software development. +@cindex Brian Kernighan's @command{awk} Complex programs have been written in @command{awk}, including a complete retargetable assembler for eight-bit microprocessors (@pxref{Glossary}, for more information), and a microcode assembler for a special-purpose Prolog @@ -4585,6 +4588,7 @@ leaves what happens as undefined. There are two choices: @c @cindex automatic warnings @c @cindex warnings, automatic +@cindex Brian Kernighan's @command{awk} @table @asis @item Strip the backslash out This is what Brian Kernighan's @command{awk} and @command{gawk} both do. @@ -4598,6 +4602,7 @@ two backslashes in the string: @samp{FS = @w{"[ \t]+\\|[ \t]+"}}.) @cindex @command{gawk}, escape sequences @cindex Unix @command{awk}, backslashes in escape sequences +@cindex @command{mawk} utility @item Leave the backslash alone Some other @command{awk} implementations do this. In such implementations, typing @code{"a\qc"} is the same as typing @@ -4626,6 +4631,7 @@ leaves what happens as undefined. There are two choices: @c @cindex automatic warnings @c @cindex warnings, automatic +@cindex Brian Kernighan's @command{awk} @table @asis @item Strip the backslash out This is what Brian Kernighan's @command{awk} and @command{gawk} both do. @@ -4639,6 +4645,7 @@ two backslashes in the string: @samp{FS = @w{"[ \t]+\\|[ \t]+"}}.) @cindex @command{gawk}, escape sequences @cindex Unix @command{awk}, backslashes in escape sequences +@cindex @command{mawk} utility @item Leave the backslash alone Some other @command{awk} implementations do this. In such implementations, typing @code{"a\qc"} is the same as typing @@ -4749,8 +4756,8 @@ The condition is not true in the following example: if ("line1\nLINE 2" ~ /^L/) @dots{} @end example -@cindex @code{$} (dollar sign) -@cindex dollar sign (@code{$}) +@cindex @code{$} (dollar sign), regexp operator +@cindex dollar sign (@code{$}), regexp operator @item $ This is similar to @samp{^}, but it matches only at the end of a string. For example, @samp{p$} @@ -4784,6 +4791,7 @@ may not be able to match the @sc{nul} character. @cindex bracket expressions @cindex character sets, See Also bracket expressions @cindex character lists, See bracket expressions +@cindex character classes, See bracket expressions @item [@dots{}] This is called a @dfn{bracket expression}.@footnote{In other literature, you may see a bracket expression referred to as either a @@ -4845,8 +4853,8 @@ prints every record in @file{sample} containing a string of the form Notice the escaping of the parentheses by preceding them with backslashes. -@cindex @code{+} (plus sign) -@cindex plus sign (@code{+}) +@cindex @code{+} (plus sign), regexp operator +@cindex plus sign (@code{+}), regexp operator @item + This symbol is similar to @samp{*}, except that the preceding expression must be matched at least once. This means that @samp{wh+y} @@ -4859,8 +4867,8 @@ way of writing the last @samp{*} example: awk '/\(c[ad]+r x\)/ @{ print @}' sample @end example -@cindex @code{?} (question mark) regexp operator -@cindex question mark (@code{?}) regexp operator +@cindex @code{?} (question mark), regexp operator +@cindex question mark (@code{?}), regexp operator @item ? This symbol is similar to @samp{*}, except that the preceding expression can be matched either once or not at all. For example, @samp{fe?d} @@ -5182,10 +5190,10 @@ Matches the empty string at the end of a buffer (string). @end table -@cindex @code{^} (caret) -@cindex caret (@code{^}) -@cindex @code{?} (question mark) regexp operator -@cindex question mark (@code{?}) regexp operator +@cindex @code{^} (caret), regexp operator +@cindex caret (@code{^}), regexp operator +@cindex @code{?} (question mark), regexp operator +@cindex question mark (@code{?}), regexp operator Because @samp{^} and @samp{$} always work in terms of the beginning and end of strings, these operators don't add any new capabilities for @command{awk}. They are provided for compatibility with other @@ -5229,6 +5237,7 @@ Only POSIX regexps are supported; the GNU operators are not special (e.g., @samp{\w} matches a literal @samp{w}). Interval expressions are allowed. +@cindex Brian Kernighan's @command{awk} @item @code{--traditional} Traditional Unix @command{awk} regexps are matched. The GNU operators are not special, and interval expressions are not available. @@ -6505,7 +6514,7 @@ was ignored when finding @code{$1}, it is not part of the new @code{$0}. Finally, the last @code{print} statement prints the new @code{$0}. @cindex @code{FS}, containing @code{^} -@cindex @code{^}, in @code{FS} +@cindex @code{^} (caret), in @code{FS} @cindex dark corner, @code{^}, in @code{FS} There is an additional subtlety to be aware of when using regular expressions for field splitting. @@ -6516,6 +6525,7 @@ different @command{awk} versions answer this question differently, and you should not rely on any specific behavior in your programs. @value{DARKCORNER} +@cindex Brian Kernighan's @command{awk} As a point of information, Brian Kernighan's @command{awk} allows @samp{^} to match only at the beginning of the record. @command{gawk} also works this way. For example: @@ -7596,6 +7606,7 @@ that does handle nested @samp{@@include} statements. @subsection Using @code{getline} from a Pipe @c From private email, dated October 2, 1988. Used by permission, March 2013. +@cindex Kernighan, Brian @quotation @i{Omniscience has much to recommend it. Failing that, attention to details would be useful.} @@ -7683,6 +7694,8 @@ because the concatenation operator is not parenthesized. You should write it as @samp{(@w{"echo "} "date") | getline} if you want your program to be portable to all @command{awk} implementations. +@cindex Brian Kernighan's @command{awk} +@cindex @command{mawk} utility @quotation NOTE Unfortunately, @command{gawk} has not been consistent in its treatment of a construct like @samp{@w{"echo "} "date" | getline}. @@ -8007,6 +8020,7 @@ indefinitely until some other process opens it for writing. @node Command line directories @section Directories On The Command Line +@cindex differences in @command{awk} and @command{gawk}, command line directories @cindex directories, command line @cindex command line, directories on @@ -9159,9 +9173,9 @@ has been ported to, not just those that are POSIX-compliant: @cindex extensions, common@comma{} @code{/dev/stdout} special file @cindex extensions, common@comma{} @code{/dev/stderr} special file @cindex file names, standard streams in @command{gawk} -@cindex @code{/dev/@dots{}} special files (@command{gawk}) +@cindex @code{/dev/@dots{}} special files @cindex files, @code{/dev/@dots{}} special files -@cindex @code{/dev/fd/@var{N}} special files +@cindex @code{/dev/fd/@var{N}} special files (@command{gawk}) @table @file @item /dev/stdin The standard input (file descriptor 0). @@ -10346,6 +10360,8 @@ name = "name" print "something meaningful" > file name @end example +@cindex Brian Kernighan's @command{awk} +@cindex @command{mawk} utility @noindent This produces a syntax error with some versions of Unix @command{awk}.@footnote{It happens that Brian Kernighan's @@ -12191,6 +12207,11 @@ $ @kbd{echo Yes | gawk '(/1/,/2/) || /Yes/'} @error{} gawk: cmd. line:1: ^ syntax error @end example +@cindex range patterns, line continuation and +As a minor point of interest, although it is poor style, +POSIX allows you to put a newline after the comma in +a range pattern. @value{DARKCORNER} + @node BEGIN/END @subsection The @code{BEGIN} and @code{END} Special Patterns @@ -12289,6 +12310,7 @@ to give @code{$0} a real value is to execute a @code{getline} command without a variable (@pxref{Getline}). Another way is simply to assign a value to @code{$0}. +@cindex Brian Kernighan's @command{awk} @cindex differences in @command{awk} and @command{gawk}, @code{BEGIN}/@code{END} patterns @cindex POSIX @command{awk}, @code{BEGIN}/@code{END} patterns @cindex @code{print} statement, @code{BEGIN}/@code{END} patterns and @@ -13019,6 +13041,7 @@ This is discussed in @ref{Switch Statement}. @cindex POSIX @command{awk}, @code{break} statement and @cindex dark corner, @code{break} statement @cindex @command{gawk}, @code{break} statement in +@cindex Brian Kernighan's @command{awk} The @code{break} statement has no meaning when used outside the body of a loop or @code{switch}. However, although it was never documented, @@ -13083,6 +13106,7 @@ This program loops forever once @code{x} reaches 5. @cindex POSIX @command{awk}, @code{continue} statement and @cindex dark corner, @code{continue} statement @cindex @command{gawk}, @code{continue} statement in +@cindex Brian Kernighan's @command{awk} The @code{continue} statement has no special meaning with respect to the @code{switch} statement, nor does it have any meaning when used outside the body of a loop. Historical versions of @command{awk} treated a @code{continue} @@ -13220,8 +13244,10 @@ See @uref{http://austingroupbugs.net/view.php?id=607, the Austin Group website}. @cindex functions, user-defined, @code{next}/@code{nextfile} statements and @cindex @code{nextfile} statement, user-defined functions and -The current version of the Brian Kernighan's @command{awk} (@pxref{Other -Versions}) also supports @code{nextfile}. However, it doesn't allow the +@cindex Brian Kernighan's @command{awk} +@cindex @command{mawk} utility +The current version of the Brian Kernighan's @command{awk}, and @command{mawk} (@pxref{Other +Versions}) 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 next record and starts processing it with the first rule in the program, @@ -14879,6 +14905,7 @@ Using this version of the @code{delete} statement is about three times more efficient than the equivalent loop that deletes each element one at a time. +@cindex Brian Kernighan's @command{awk} @quotation NOTE For many years, using @code{delete} without a subscript was a @command{gawk} extension. @@ -16111,7 +16138,6 @@ you use the @option{--non-decimal-data} option, which isn't recommended. Note also that @code{strtonum()} uses the current locale's decimal point for recognizing numbers (@pxref{Locales}). -@cindex differences in @command{awk} and @command{gawk}, @code{strtonum()} function (@command{gawk}) @code{strtonum()} is a @command{gawk} extension; it is not available in compatibility mode (@pxref{Options}). @@ -16230,6 +16256,7 @@ suffix is also returned if @var{length} is greater than the number of characters remaining in the string, counting from character @var{start}. +@cindex Brian Kernighan's @command{awk} If @var{start} is less than one, @code{substr()} treats it as if it was one. (POSIX doesn't specify what to do in this case: Brian Kernighan's @command{awk} acts this way, and therefore @command{gawk} @@ -16309,6 +16336,7 @@ and builds an internal copy of it that can be executed. Then there is the runtime level, which is when @command{awk} actually scans the replacement string to determine what to generate. +@cindex Brian Kernighan's @command{awk} At both levels, @command{awk} looks for a defined set of characters that can come after a backslash. At the lexical level, it looks for the escape sequences listed in @ref{Escape Sequences}. @@ -16748,6 +16776,8 @@ This is the purpose of the @code{fflush()} function---@command{gawk} also buffers its output and the @code{fflush()} function forces @command{gawk} to flush its buffers. +@cindex extensions, common@comma{} @code{fflush()} function +@cindex Brian Kernighan's @command{awk} @code{fflush()} was added to Brian Kernighan's version of @command{awk} in April of 1992. For two decades, it was not part of the POSIX standard. As of December, 2012, it was accepted for inclusion into the POSIX @@ -19459,6 +19489,7 @@ reason to build them into the @command{awk} interpreter: @cindex @code{ord()} user-defined function @cindex @code{chr()} user-defined function +@cindex @code{_ord_init()} user-defined function @example @c file eg/lib/ord.awk # ord.awk --- do ord and chr @@ -19505,6 +19536,7 @@ function _ord_init( low, high, i, t) @cindex character sets (machine character encodings) @cindex ASCII @cindex EBCDIC +@cindex Unicode @cindex mark parity Some explanation of the numbers used by @code{_ord_init()} is worthwhile. The most prominent character set in use today is ASCII.@footnote{This @@ -21857,6 +21889,7 @@ of picking the input line apart by characters. @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} @@ -22142,12 +22175,14 @@ or not. @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. @@ -22284,6 +22319,7 @@ The POSIX version of @command{id} takes arguments that control which information is printed. Modify this version to accept the same arguments and perform in the same way. @end ignore +@c ENDOFRANGE id @node Split Program @subsection Splitting a Large File into Pieces @@ -22292,6 +22328,7 @@ arguments and perform in the same way. @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 @@ -22435,12 +22472,14 @@ which isn't true for EBCDIC systems. @c Exercise: Fix these problems. @c BFD... @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 @@ -22555,6 +22594,7 @@ END \ @} @c endfile @end example +@c ENDOFRANGE tee @node Uniq Program @subsection Printing Nonduplicated Lines of Text @@ -22565,6 +22605,7 @@ END \ @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 @@ -22816,6 +22857,7 @@ END @{ @end example @c ENDOFRANGE prunt @c ENDOFRANGE tpul +@c ENDOFRANGE uniq @node Wc Program @subsection Counting Things @@ -22832,6 +22874,7 @@ END @{ @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: @@ -23014,6 +23057,7 @@ END @{ @c ENDOFRANGE lico @c ENDOFRANGE woco @c ENDOFRANGE chco +@c ENDOFRANGE wc @c ENDOFRANGE posimawk @node Miscellaneous Programs @@ -23308,6 +23352,7 @@ seconds are necessary: @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: @@ -23456,6 +23501,7 @@ An obvious improvement to this program would be to set up the assumes that the ``from'' and ``to'' lists will never change throughout the lifetime of the program. @c ENDOFRANGE chtra +@c ENDOFRANGE tr @node Labels Program @subsection Printing Mailing Labels @@ -23515,6 +23561,7 @@ 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 @@ -23582,6 +23629,7 @@ END \ @end example @c ENDOFRANGE prml @c ENDOFRANGE mlprint +@c ENDOFRANGE labels @node Word Sorting @subsection Generating Word-Usage Counts @@ -23648,6 +23696,7 @@ 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 @@ -23709,6 +23758,7 @@ 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 @@ -23738,6 +23788,7 @@ 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 @@ -23780,6 +23831,7 @@ print data[lines[i]], lines[i] 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 @@ -23890,6 +23942,7 @@ 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 @@ -24048,6 +24101,7 @@ END @{ @end example @c ENDOFRANGE texse @c ENDOFRANGE fitex +@c ENDOFRANGE extract @node Simple Sed @subsection A Simple Stream Editor @@ -24077,6 +24131,7 @@ additional arguments are treated as data file 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 @@ -24173,6 +24228,7 @@ Exercise: what are the advantages and disadvantages of this version versus sed? Others? @end ignore +@c ENDOFRANGE awksed @node Igawk Program @subsection An Easy Way to Use Library Functions @@ -24316,6 +24372,7 @@ program. The program is as follows: +@c STARTOFRANGE igawk @cindex @code{igawk.sh} program @example @c file eg/prog/igawk.sh @@ -24675,10 +24732,12 @@ statements for the desired library functions. @c ENDOFRANGE libfex @c ENDOFRANGE flibex @c ENDOFRANGE awkpex +@c ENDOFRANGE igawk @node Anagram Program @subsection Finding Anagrams From A Dictionary +@cindex anagrams, finding An interesting programming challenge is to search for @dfn{anagrams} in a word list (such as @@ -24698,6 +24757,7 @@ 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 @@ -24805,10 +24865,13 @@ babels beslab babery yabber @dots{} @end example +@c ENDOFRANGE anagram @node Signature Program @subsection And Now For Something Completely Different +@cindex signature program +@cindex Brini, Davide The following program was written by Davide Brini @c (@email{dave_br@@gmx.com}) and is published on @uref{http://backreference.org/2011/02/03/obfuscated-awk/, @@ -24940,12 +25003,15 @@ It contains the following chapters: @item @ref{Dynamic Extensions}. +@end itemize @end ifdocbook @end ignore @node Advanced Features @chapter Advanced Features of @command{gawk} +@ifset WITH_NETWORK_CHAPTER @cindex advanced features, network connections, See Also networks@comma{} connections +@end ifset @c STARTOFRANGE gawadv @cindex @command{gawk}, features, advanced @c STARTOFRANGE advgaw @@ -26174,6 +26240,7 @@ lookup of the translations. @cindex @code{.po} files @cindex files, @code{.po} +@c STARTOFRANGE portobfi @cindex portable object files @cindex files, portable object @item @@ -26185,6 +26252,7 @@ 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 @@ -26525,6 +26593,8 @@ second argument to @code{dcngettext()}.@footnote{The @xref{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 @@ -28110,7 +28180,7 @@ be added, and of course feel free to try to add them yourself! @cindex arbitrary precision @cindex multiple precision @cindex infinite precision -@cindex floating-point numbers, arbitrary precision +@cindex floating-point, numbers@comma{} arbitrary precision @cindex MPFR @cindex GMP @@ -34343,6 +34413,7 @@ This output is unexpected, since the @samp{bc} at the end of This result is due to the locale setting (and thus you may not see it on your system). +@cindex Unicode Similar considerations apply to other ranges. For example, @samp{["-/]} is perfectly valid in ASCII, but is not valid in many Unicode locales, such as @samp{en_US.UTF-8}. @@ -34356,6 +34427,7 @@ 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?!?'' +@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 @@ -35968,7 +36040,7 @@ This @value{SECTION} briefly describes where to get them: @cindex Kernighan, Brian @cindex source code, Brian Kernighan's @command{awk} @cindex @command{awk}, versions of, See Also Brian Kernighan's @command{awk} -@cindex Brian Kernighan's @command{awk} +@cindex Brian Kernighan's @command{awk}, source code @item Unix @command{awk} Brian Kernighan, one of the original designers of Unix @command{awk}, has made his implementation of @@ -36053,7 +36125,7 @@ To get @command{awka}, go to @url{http://sourceforge.net/projects/awka}. The project seems to be frozen; no new code changes have been made since approximately 2003. -@cindex Beebe, Nelson +@cindex Beebe, Nelson H.F.@: @cindex @command{pawk} (profiling version of Brian Kernighan's @command{awk}) @cindex source code, @command{pawk} @item @command{pawk} @@ -37463,6 +37535,8 @@ The @uref{http://www.unicode.org, Unicode character set} is becoming increasingly popular and standard, and is particularly widely used on GNU/Linux systems. +@cindex Kernighan, Brian +@cindex Bentley, Jon @cindex @command{chem} utility @item CHEM A preprocessor for @command{pic} that reads descriptions of molecules diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 790bd130..dd3d1409 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -995,6 +995,7 @@ Arnold has distilled over a decade of experience writing and using AWK programs, and developing @command{gawk}, into this book. If you use AWK or want to learn how, then read this book. +@cindex Brennan, Michael @display Michael Brennan Author of @command{mawk} @@ -1019,6 +1020,7 @@ Such jobs are often easier with @command{awk}. The @command{awk} utility interprets a special-purpose programming language that makes it easy to handle simple data-reformatting jobs. +@cindex Brian Kernighan's @command{awk} The GNU implementation of @command{awk} is called @command{gawk}; if you invoke it with the proper options or environment variables (@pxref{Options}), it is fully @@ -1741,7 +1743,7 @@ significant editorial help for this @value{DOCUMENT} for the 3.1 release of @command{gawk}. @end quotation -@cindex Beebe, Nelson +@cindex Beebe, Nelson H.F.@: @cindex Buening, Andreas @cindex Collado, Manuel @cindex Colombo, Antonio @@ -2961,8 +2963,8 @@ noticed because it is ``hidden'' inside the comment. Thus, the @code{BEGIN} is noted as a syntax error. @cindex statements, multiple -@cindex @code{;} (semicolon) -@cindex semicolon (@code{;}) +@cindex @code{;} (semicolon), separating statements in actions +@cindex semicolon (@code{;}), separating statements in actions When @command{awk} statements within one rule are short, you might want to put more than one of them on a line. This is accomplished by separating the statements with a semicolon (@samp{;}). @@ -3022,6 +3024,7 @@ used once, and thrown away. Because @command{awk} programs are interpreted, you can avoid the (usually lengthy) compilation part of the typical edit-compile-test-debug cycle of software development. +@cindex Brian Kernighan's @command{awk} Complex programs have been written in @command{awk}, including a complete retargetable assembler for eight-bit microprocessors (@pxref{Glossary}, for more information), and a microcode assembler for a special-purpose Prolog @@ -4508,6 +4511,7 @@ leaves what happens as undefined. There are two choices: @c @cindex automatic warnings @c @cindex warnings, automatic +@cindex Brian Kernighan's @command{awk} @table @asis @item Strip the backslash out This is what Brian Kernighan's @command{awk} and @command{gawk} both do. @@ -4521,6 +4525,7 @@ two backslashes in the string: @samp{FS = @w{"[ \t]+\\|[ \t]+"}}.) @cindex @command{gawk}, escape sequences @cindex Unix @command{awk}, backslashes in escape sequences +@cindex @command{mawk} utility @item Leave the backslash alone Some other @command{awk} implementations do this. In such implementations, typing @code{"a\qc"} is the same as typing @@ -4596,8 +4601,8 @@ The condition is not true in the following example: if ("line1\nLINE 2" ~ /^L/) @dots{} @end example -@cindex @code{$} (dollar sign) -@cindex dollar sign (@code{$}) +@cindex @code{$} (dollar sign), regexp operator +@cindex dollar sign (@code{$}), regexp operator @item $ This is similar to @samp{^}, but it matches only at the end of a string. For example, @samp{p$} @@ -4631,6 +4636,7 @@ may not be able to match the @sc{nul} character. @cindex bracket expressions @cindex character sets, See Also bracket expressions @cindex character lists, See bracket expressions +@cindex character classes, See bracket expressions @item [@dots{}] This is called a @dfn{bracket expression}.@footnote{In other literature, you may see a bracket expression referred to as either a @@ -4692,8 +4698,8 @@ prints every record in @file{sample} containing a string of the form Notice the escaping of the parentheses by preceding them with backslashes. -@cindex @code{+} (plus sign) -@cindex plus sign (@code{+}) +@cindex @code{+} (plus sign), regexp operator +@cindex plus sign (@code{+}), regexp operator @item + This symbol is similar to @samp{*}, except that the preceding expression must be matched at least once. This means that @samp{wh+y} @@ -4706,8 +4712,8 @@ way of writing the last @samp{*} example: awk '/\(c[ad]+r x\)/ @{ print @}' sample @end example -@cindex @code{?} (question mark) regexp operator -@cindex question mark (@code{?}) regexp operator +@cindex @code{?} (question mark), regexp operator +@cindex question mark (@code{?}), regexp operator @item ? This symbol is similar to @samp{*}, except that the preceding expression can be matched either once or not at all. For example, @samp{fe?d} @@ -5029,10 +5035,10 @@ Matches the empty string at the end of a buffer (string). @end table -@cindex @code{^} (caret) -@cindex caret (@code{^}) -@cindex @code{?} (question mark) regexp operator -@cindex question mark (@code{?}) regexp operator +@cindex @code{^} (caret), regexp operator +@cindex caret (@code{^}), regexp operator +@cindex @code{?} (question mark), regexp operator +@cindex question mark (@code{?}), regexp operator Because @samp{^} and @samp{$} always work in terms of the beginning and end of strings, these operators don't add any new capabilities for @command{awk}. They are provided for compatibility with other @@ -5076,6 +5082,7 @@ Only POSIX regexps are supported; the GNU operators are not special (e.g., @samp{\w} matches a literal @samp{w}). Interval expressions are allowed. +@cindex Brian Kernighan's @command{awk} @item @code{--traditional} Traditional Unix @command{awk} regexps are matched. The GNU operators are not special, and interval expressions are not available. @@ -6220,7 +6227,7 @@ was ignored when finding @code{$1}, it is not part of the new @code{$0}. Finally, the last @code{print} statement prints the new @code{$0}. @cindex @code{FS}, containing @code{^} -@cindex @code{^}, in @code{FS} +@cindex @code{^} (caret), in @code{FS} @cindex dark corner, @code{^}, in @code{FS} There is an additional subtlety to be aware of when using regular expressions for field splitting. @@ -6231,6 +6238,7 @@ different @command{awk} versions answer this question differently, and you should not rely on any specific behavior in your programs. @value{DARKCORNER} +@cindex Brian Kernighan's @command{awk} As a point of information, Brian Kernighan's @command{awk} allows @samp{^} to match only at the beginning of the record. @command{gawk} also works this way. For example: @@ -7216,6 +7224,7 @@ that does handle nested @samp{@@include} statements. @subsection Using @code{getline} from a Pipe @c From private email, dated October 2, 1988. Used by permission, March 2013. +@cindex Kernighan, Brian @quotation @i{Omniscience has much to recommend it. Failing that, attention to details would be useful.} @@ -7303,6 +7312,8 @@ because the concatenation operator is not parenthesized. You should write it as @samp{(@w{"echo "} "date") | getline} if you want your program to be portable to all @command{awk} implementations. +@cindex Brian Kernighan's @command{awk} +@cindex @command{mawk} utility @quotation NOTE Unfortunately, @command{gawk} has not been consistent in its treatment of a construct like @samp{@w{"echo "} "date" | getline}. @@ -7627,6 +7638,7 @@ indefinitely until some other process opens it for writing. @node Command line directories @section Directories On The Command Line +@cindex differences in @command{awk} and @command{gawk}, command line directories @cindex directories, command line @cindex command line, directories on @@ -8741,9 +8753,9 @@ has been ported to, not just those that are POSIX-compliant: @cindex extensions, common@comma{} @code{/dev/stdout} special file @cindex extensions, common@comma{} @code{/dev/stderr} special file @cindex file names, standard streams in @command{gawk} -@cindex @code{/dev/@dots{}} special files (@command{gawk}) +@cindex @code{/dev/@dots{}} special files @cindex files, @code{/dev/@dots{}} special files -@cindex @code{/dev/fd/@var{N}} special files +@cindex @code{/dev/fd/@var{N}} special files (@command{gawk}) @table @file @item /dev/stdin The standard input (file descriptor 0). @@ -9837,6 +9849,8 @@ name = "name" print "something meaningful" > file name @end example +@cindex Brian Kernighan's @command{awk} +@cindex @command{mawk} utility @noindent This produces a syntax error with some versions of Unix @command{awk}.@footnote{It happens that Brian Kernighan's @@ -11570,6 +11584,11 @@ $ @kbd{echo Yes | gawk '(/1/,/2/) || /Yes/'} @error{} gawk: cmd. line:1: ^ syntax error @end example +@cindex range patterns, line continuation and +As a minor point of interest, although it is poor style, +POSIX allows you to put a newline after the comma in +a range pattern. @value{DARKCORNER} + @node BEGIN/END @subsection The @code{BEGIN} and @code{END} Special Patterns @@ -11668,6 +11687,7 @@ to give @code{$0} a real value is to execute a @code{getline} command without a variable (@pxref{Getline}). Another way is simply to assign a value to @code{$0}. +@cindex Brian Kernighan's @command{awk} @cindex differences in @command{awk} and @command{gawk}, @code{BEGIN}/@code{END} patterns @cindex POSIX @command{awk}, @code{BEGIN}/@code{END} patterns @cindex @code{print} statement, @code{BEGIN}/@code{END} patterns and @@ -12398,6 +12418,7 @@ This is discussed in @ref{Switch Statement}. @cindex POSIX @command{awk}, @code{break} statement and @cindex dark corner, @code{break} statement @cindex @command{gawk}, @code{break} statement in +@cindex Brian Kernighan's @command{awk} The @code{break} statement has no meaning when used outside the body of a loop or @code{switch}. However, although it was never documented, @@ -12462,6 +12483,7 @@ This program loops forever once @code{x} reaches 5. @cindex POSIX @command{awk}, @code{continue} statement and @cindex dark corner, @code{continue} statement @cindex @command{gawk}, @code{continue} statement in +@cindex Brian Kernighan's @command{awk} The @code{continue} statement has no special meaning with respect to the @code{switch} statement, nor does it have any meaning when used outside the body of a loop. Historical versions of @command{awk} treated a @code{continue} @@ -12599,8 +12621,10 @@ See @uref{http://austingroupbugs.net/view.php?id=607, the Austin Group website}. @cindex functions, user-defined, @code{next}/@code{nextfile} statements and @cindex @code{nextfile} statement, user-defined functions and -The current version of the Brian Kernighan's @command{awk} (@pxref{Other -Versions}) also supports @code{nextfile}. However, it doesn't allow the +@cindex Brian Kernighan's @command{awk} +@cindex @command{mawk} utility +The current version of the Brian Kernighan's @command{awk}, and @command{mawk} (@pxref{Other +Versions}) 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 next record and starts processing it with the first rule in the program, @@ -14212,6 +14236,7 @@ Using this version of the @code{delete} statement is about three times more efficient than the equivalent loop that deletes each element one at a time. +@cindex Brian Kernighan's @command{awk} @quotation NOTE For many years, using @code{delete} without a subscript was a @command{gawk} extension. @@ -15444,7 +15469,6 @@ you use the @option{--non-decimal-data} option, which isn't recommended. Note also that @code{strtonum()} uses the current locale's decimal point for recognizing numbers (@pxref{Locales}). -@cindex differences in @command{awk} and @command{gawk}, @code{strtonum()} function (@command{gawk}) @code{strtonum()} is a @command{gawk} extension; it is not available in compatibility mode (@pxref{Options}). @@ -15563,6 +15587,7 @@ suffix is also returned if @var{length} is greater than the number of characters remaining in the string, counting from character @var{start}. +@cindex Brian Kernighan's @command{awk} If @var{start} is less than one, @code{substr()} treats it as if it was one. (POSIX doesn't specify what to do in this case: Brian Kernighan's @command{awk} acts this way, and therefore @command{gawk} @@ -15642,6 +15667,7 @@ and builds an internal copy of it that can be executed. Then there is the runtime level, which is when @command{awk} actually scans the replacement string to determine what to generate. +@cindex Brian Kernighan's @command{awk} At both levels, @command{awk} looks for a defined set of characters that can come after a backslash. At the lexical level, it looks for the escape sequences listed in @ref{Escape Sequences}. @@ -16048,6 +16074,8 @@ This is the purpose of the @code{fflush()} function---@command{gawk} also buffers its output and the @code{fflush()} function forces @command{gawk} to flush its buffers. +@cindex extensions, common@comma{} @code{fflush()} function +@cindex Brian Kernighan's @command{awk} @code{fflush()} was added to Brian Kernighan's version of @command{awk} in April of 1992. For two decades, it was not part of the POSIX standard. As of December, 2012, it was accepted for inclusion into the POSIX @@ -18631,6 +18659,7 @@ reason to build them into the @command{awk} interpreter: @cindex @code{ord()} user-defined function @cindex @code{chr()} user-defined function +@cindex @code{_ord_init()} user-defined function @example @c file eg/lib/ord.awk # ord.awk --- do ord and chr @@ -18677,6 +18706,7 @@ function _ord_init( low, high, i, t) @cindex character sets (machine character encodings) @cindex ASCII @cindex EBCDIC +@cindex Unicode @cindex mark parity Some explanation of the numbers used by @code{_ord_init()} is worthwhile. The most prominent character set in use today is ASCII.@footnote{This @@ -21000,6 +21030,7 @@ of picking the input line apart by characters. @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} @@ -21285,12 +21316,14 @@ or not. @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. @@ -21427,6 +21460,7 @@ The POSIX version of @command{id} takes arguments that control which information is printed. Modify this version to accept the same arguments and perform in the same way. @end ignore +@c ENDOFRANGE id @node Split Program @subsection Splitting a Large File into Pieces @@ -21435,6 +21469,7 @@ arguments and perform in the same way. @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 @@ -21578,12 +21613,14 @@ which isn't true for EBCDIC systems. @c Exercise: Fix these problems. @c BFD... @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 @@ -21698,6 +21735,7 @@ END \ @} @c endfile @end example +@c ENDOFRANGE tee @node Uniq Program @subsection Printing Nonduplicated Lines of Text @@ -21708,6 +21746,7 @@ END \ @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 @@ -21959,6 +21998,7 @@ END @{ @end example @c ENDOFRANGE prunt @c ENDOFRANGE tpul +@c ENDOFRANGE uniq @node Wc Program @subsection Counting Things @@ -21975,6 +22015,7 @@ END @{ @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: @@ -22157,6 +22198,7 @@ END @{ @c ENDOFRANGE lico @c ENDOFRANGE woco @c ENDOFRANGE chco +@c ENDOFRANGE wc @c ENDOFRANGE posimawk @node Miscellaneous Programs @@ -22451,6 +22493,7 @@ seconds are necessary: @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: @@ -22599,6 +22642,7 @@ An obvious improvement to this program would be to set up the assumes that the ``from'' and ``to'' lists will never change throughout the lifetime of the program. @c ENDOFRANGE chtra +@c ENDOFRANGE tr @node Labels Program @subsection Printing Mailing Labels @@ -22658,6 +22702,7 @@ 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 @@ -22725,6 +22770,7 @@ END \ @end example @c ENDOFRANGE prml @c ENDOFRANGE mlprint +@c ENDOFRANGE labels @node Word Sorting @subsection Generating Word-Usage Counts @@ -22791,6 +22837,7 @@ 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 @@ -22852,6 +22899,7 @@ 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 @@ -22881,6 +22929,7 @@ 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 @@ -22923,6 +22972,7 @@ print data[lines[i]], lines[i] 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 @@ -23033,6 +23083,7 @@ 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 @@ -23191,6 +23242,7 @@ END @{ @end example @c ENDOFRANGE texse @c ENDOFRANGE fitex +@c ENDOFRANGE extract @node Simple Sed @subsection A Simple Stream Editor @@ -23220,6 +23272,7 @@ additional arguments are treated as data file 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 @@ -23316,6 +23369,7 @@ Exercise: what are the advantages and disadvantages of this version versus sed? Others? @end ignore +@c ENDOFRANGE awksed @node Igawk Program @subsection An Easy Way to Use Library Functions @@ -23459,6 +23513,7 @@ program. The program is as follows: +@c STARTOFRANGE igawk @cindex @code{igawk.sh} program @example @c file eg/prog/igawk.sh @@ -23818,10 +23873,12 @@ statements for the desired library functions. @c ENDOFRANGE libfex @c ENDOFRANGE flibex @c ENDOFRANGE awkpex +@c ENDOFRANGE igawk @node Anagram Program @subsection Finding Anagrams From A Dictionary +@cindex anagrams, finding An interesting programming challenge is to search for @dfn{anagrams} in a word list (such as @@ -23841,6 +23898,7 @@ 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 @@ -23948,10 +24006,13 @@ babels beslab babery yabber @dots{} @end example +@c ENDOFRANGE anagram @node Signature Program @subsection And Now For Something Completely Different +@cindex signature program +@cindex Brini, Davide The following program was written by Davide Brini @c (@email{dave_br@@gmx.com}) and is published on @uref{http://backreference.org/2011/02/03/obfuscated-awk/, @@ -24083,12 +24144,15 @@ It contains the following chapters: @item @ref{Dynamic Extensions}. +@end itemize @end ifdocbook @end ignore @node Advanced Features @chapter Advanced Features of @command{gawk} +@ifset WITH_NETWORK_CHAPTER @cindex advanced features, network connections, See Also networks@comma{} connections +@end ifset @c STARTOFRANGE gawadv @cindex @command{gawk}, features, advanced @c STARTOFRANGE advgaw @@ -25317,6 +25381,7 @@ lookup of the translations. @cindex @code{.po} files @cindex files, @code{.po} +@c STARTOFRANGE portobfi @cindex portable object files @cindex files, portable object @item @@ -25328,6 +25393,7 @@ 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 @@ -25668,6 +25734,8 @@ second argument to @code{dcngettext()}.@footnote{The @xref{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 @@ -27253,7 +27321,7 @@ be added, and of course feel free to try to add them yourself! @cindex arbitrary precision @cindex multiple precision @cindex infinite precision -@cindex floating-point numbers, arbitrary precision +@cindex floating-point, numbers@comma{} arbitrary precision @cindex MPFR @cindex GMP @@ -33486,6 +33554,7 @@ This output is unexpected, since the @samp{bc} at the end of This result is due to the locale setting (and thus you may not see it on your system). +@cindex Unicode Similar considerations apply to other ranges. For example, @samp{["-/]} is perfectly valid in ASCII, but is not valid in many Unicode locales, such as @samp{en_US.UTF-8}. @@ -33499,6 +33568,7 @@ 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?!?'' +@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 @@ -35111,7 +35181,7 @@ This @value{SECTION} briefly describes where to get them: @cindex Kernighan, Brian @cindex source code, Brian Kernighan's @command{awk} @cindex @command{awk}, versions of, See Also Brian Kernighan's @command{awk} -@cindex Brian Kernighan's @command{awk} +@cindex Brian Kernighan's @command{awk}, source code @item Unix @command{awk} Brian Kernighan, one of the original designers of Unix @command{awk}, has made his implementation of @@ -35196,7 +35266,7 @@ To get @command{awka}, go to @url{http://sourceforge.net/projects/awka}. The project seems to be frozen; no new code changes have been made since approximately 2003. -@cindex Beebe, Nelson +@cindex Beebe, Nelson H.F.@: @cindex @command{pawk} (profiling version of Brian Kernighan's @command{awk}) @cindex source code, @command{pawk} @item @command{pawk} @@ -36606,6 +36676,8 @@ The @uref{http://www.unicode.org, Unicode character set} is becoming increasingly popular and standard, and is particularly widely used on GNU/Linux systems. +@cindex Kernighan, Brian +@cindex Bentley, Jon @cindex @command{chem} utility @item CHEM A preprocessor for @command{pic} that reads descriptions of molecules -- cgit v1.2.3 From a0841dfa1e1a7ebdd8d29188ce7b304c67daa42d Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sat, 8 Mar 2014 21:22:18 +0200 Subject: Some new helper files added. --- helpers/ChangeLog | 4 ++++ helpers/quoteconvert2.sh | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ helpers/scanfmt.c | 22 ++++++++++++++++++++++ helpers/tryfmt.c | 23 +++++++++++++++++++++++ 4 files changed, 98 insertions(+) create mode 100755 helpers/quoteconvert2.sh create mode 100644 helpers/scanfmt.c create mode 100644 helpers/tryfmt.c diff --git a/helpers/ChangeLog b/helpers/ChangeLog index 91d43464..14affebc 100644 --- a/helpers/ChangeLog +++ b/helpers/ChangeLog @@ -1,3 +1,7 @@ +2014-03-08 Arnold D. Robbins + + * quoteconvert2.sh, tryfmt.c, scanfmt.c: New files. + 2013-12-21 Arnold D. Robbins * testdfa.c: Fix some bugs and compiler warnings. diff --git a/helpers/quoteconvert2.sh b/helpers/quoteconvert2.sh new file mode 100755 index 00000000..e33a4d05 --- /dev/null +++ b/helpers/quoteconvert2.sh @@ -0,0 +1,49 @@ +#!/bin/sh + +# quoteconvert2.sh --- test locale dependent output of numbers +# Michal Jaegermann, michal@harddata.com, 2014/Mar/1 + +#AWK="../gawk" +SCRIPT=`basename $0` + +if [ "$AWK" = "" ] +then + echo $0: You must set AWK >&2 + exit 1 +fi + +# The last entry on this list represents "a locale with a typo". + +llist=" +C +en_US +en_US.utf8 +de_DE +de_DE.utf8 +fr_FR +fr_FR.utf8 +pt_PT +pt_PT.utf8 +pt_BR +pt_BR.utf8 +ru_RU +ru_RU.utf8 +pl_PX +" + +error=0 +for lc in $llist ; do + wanted=`LC_ALL=$lc locale -c LC_NUMERIC 2>/dev/null | \ + $AWK 'NR == 2 { decimal_point = $0 } + NR == 3 { thousands_sep = $0 } + END { printf("123%s456%s789%s15\n", + thousands_sep, thousands_sep, decimal_point)}'` + got=`LC_ALL=$lc $AWK "BEGIN {printf(\"%'.2f\n\",123456789.15)}"` + if [ "$wanted" != "$got" ] ; then + echo "$lc - unexpected output $got instead of $wanted" + error=1 + fi +done + +[ "$error" = 0 ] && echo ok || echo bummer +exit $error diff --git a/helpers/scanfmt.c b/helpers/scanfmt.c new file mode 100644 index 00000000..2d7bd73a --- /dev/null +++ b/helpers/scanfmt.c @@ -0,0 +1,22 @@ +/* + * Test out ' flag in different locales. + * Michal Jaegermann + * March, 2014 + */ + +#include +#include +#include +int +main(int argc, char **argv) +{ + double t; + + if (argc == 1) + return 1; + + setlocale(LC_ALL, getenv("LC_ALL")); + sscanf(argv[1], "%lf", &t); + printf("%.2f\n", t); + return 0; +} diff --git a/helpers/tryfmt.c b/helpers/tryfmt.c new file mode 100644 index 00000000..8166d3f1 --- /dev/null +++ b/helpers/tryfmt.c @@ -0,0 +1,23 @@ +/* + * Test out ' flag in different locales. + * Michal Jaegermann + * March, 2014 + */ + +#include +#include +#include +int +main(int argc, char **argv) +{ + const char *fmt; + if (argc == 1) + fmt = "%'.2f"; + else + fmt = argv[1]; + + setlocale(LC_ALL, getenv("LC_ALL")); + printf(fmt, 12456789.01); + printf("\n"); + return 0; +} -- cgit v1.2.3 From b4343b17479151d438d32530cdd2541262e3088e Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Sat, 8 Mar 2014 14:41:00 -0500 Subject: Add memory allocation functions to gawk API. --- ChangeLog | 10 + doc/ChangeLog | 5 + doc/gawk.info | 1224 +++++++++++++++++++++++++------------------------ doc/gawk.texi | 105 +++-- doc/gawktexi.in | 105 +++-- extension/ChangeLog | 11 + extension/filefuncs.c | 6 +- extension/inplace.c | 6 +- extension/readdir.c | 4 +- extension/readfile.c | 2 +- extension/revtwoway.c | 4 +- extension/rwarray.c | 6 +- extension/testext.c | 4 +- gawkapi.c | 6 + gawkapi.h | 24 +- 15 files changed, 828 insertions(+), 694 deletions(-) diff --git a/ChangeLog b/ChangeLog index 887d026c..31d1d616 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2014-03-08 Andrew J. Schorr + + * gawkapi.c (api_impl): Add memory allocation function pointers. + * gawkapi.h (GAWK_API_MINOR_VERSION): Bump. + (gawk_api_t): Add memory allocation function pointers api_malloc, + api_calloc, api_realloc, and api_free. + (gawk_malloc, gawk_calloc, gawk_realloc, gawk_free): New macros. + (emalloc): Replace malloc with gawk_malloc. + (erealloc): Replace erealloc with gawk_erealloc. + 2014-03-05 Arnold D. Robbins Straighten out enumerated types some more. diff --git a/doc/ChangeLog b/doc/ChangeLog index cf61ad19..085ba317 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2014-03-08 Andrew J. Schorr + + * gawktexi.in: Document new extension API functions api_malloc, + api_calloc, api_realloc, and api_free. + 2014-03-07 Arnold D. Robbins * gawktexi.in: Indexing improvements. diff --git a/doc/gawk.info b/doc/gawk.info index 6fb7ee3e..799d1c11 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -522,6 +522,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) * Extension API Functions Introduction:: Introduction to the API functions. * General Data Types:: The data types. * Requesting Values:: How to get a value. +* Memory Allocation Functions:: Functions for allocating memory. * Constructor Functions:: Functions for creating values. * Registration Functions:: Functions to register things with `gawk'. @@ -21733,6 +21734,7 @@ This (rather large) minor node describes the API in detail. * Extension API Functions Introduction:: Introduction to the API functions. * General Data Types:: The data types. * Requesting Values:: How to get a value. +* Memory Allocation Functions:: Functions for allocating memory. * Constructor Functions:: Functions for creating values. * Registration Functions:: Functions to register things with `gawk'. @@ -21809,10 +21811,8 @@ operations: `EOF' `' `FILE' `' `NULL' `' - `malloc()' `' `memcpy()' `' `memset()' `' - `realloc()' `' `size_t' `' `struct stat' `' @@ -21838,7 +21838,9 @@ operations: * All pointers filled in by `gawk' are 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 `malloc()' and is managed by `gawk' from then on. + from calling the api-provided function pointers `api_malloc()', + `api_calloc()' or `api_realloc()' and is managed by `gawk' from + then on. * The API defines several simple `struct's that map values as seen from `awk'. A value can be a `double', a string, or an array (as @@ -21910,7 +21912,9 @@ that use them. `} awk_string_t;' This represents a mutable string. `gawk' owns the memory pointed to if it supplied the value. Otherwise, it takes ownership of the - memory pointed to. *Such memory must come from `malloc()'!* + memory pointed to. *Such memory must come from calling the + api-provided function pointers `api_malloc()', `api_calloc()', or + `api_realloc()'!* As mentioned earlier, strings are maintained using the current multibyte encoding. @@ -22015,7 +22019,7 @@ the value. See also the entry for "Cookie" in the *note Glossary::.  -File: gawk.info, Node: Requesting Values, Next: Constructor Functions, Prev: General Data Types, Up: Extension API Description +File: gawk.info, Node: Requesting Values, Next: Memory Allocation Functions, Prev: General Data Types, Up: Extension API Description 16.4.3 Requesting Values ------------------------ @@ -22048,46 +22052,37 @@ Requested: Scalar Scalar Scalar false false Table 16.1: Value Types Returned  -File: gawk.info, Node: Constructor Functions, Next: Registration Functions, Prev: Requesting Values, Up: Extension API Description +File: gawk.info, Node: Memory Allocation Functions, Next: Constructor Functions, Prev: Requesting Values, Up: Extension API Description -16.4.4 Constructor Functions and Convenience Macros ---------------------------------------------------- +16.4.4 Memory Allocation Functions and Convenience Macros +--------------------------------------------------------- -The API provides a number of "constructor" functions for creating -string and numeric values, as well as a number of convenience macros. -This node presents them all as function prototypes, in the way that -extension code would use them. +The API provides a number of "memory allocation" functions for +allocating memory that can be passed to gawk, as well as a number of +convenience macros. -`static inline awk_value_t *' -`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'. +`void *gawk_malloc(size_t size);' + Call `gawk'-provided `api_malloc()' to allocate storage that may + be passed to `gawk'. -`static inline awk_value_t *' -`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 `malloc()'. The idea here - is that the data is passed directly to `gawk', which assumes - responsibility for it. It returns `result'. +`void *gawk_calloc(size_t nmemb, size_t size);' + Call `gawk'-provided `api_calloc()' to allocate storage that may + be passed to `gawk'. -`static inline awk_value_t *' -`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'. +`void *gawk_realloc(void *ptr, size_t size);' + Call `gawk'-provided `api_realloc()' to allocate storage that may + be passed to `gawk'. -`static inline awk_value_t *' -`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'. +`void gawk_free(void *ptr);' + Call `gawk'-provided `api_free()' to release storage that was + allocated with `gawk_malloc()', `gawk_calloc()' or + `gawk_realloc()'. - Two convenience macros may be used for allocating storage from -`malloc()' and `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. + Two convenience macros may be used for allocating storage from the +api-provided function pointers `api_malloc()' and `api_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. `#define emalloc(pointer, type, size, message) ...' The arguments to this macro are as follows: @@ -22096,7 +22091,7 @@ procedure calls that do not return a value. `type' The type of the pointer variable, used to create a cast for - the call to `malloc()'. + the call to `api_malloc()'. `size' The total number of bytes to be allocated. @@ -22116,14 +22111,52 @@ 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 `realloc()', instead of - `malloc()'. The arguments are the same as for the `emalloc()' + This is like `emalloc()', but it calls `api_realloc()', instead of + `api_malloc()'. The arguments are the same as for the `emalloc()' macro. + +File: gawk.info, Node: Constructor Functions, Next: Registration Functions, Prev: Memory Allocation Functions, Up: Extension API Description + +16.4.5 Constructor Functions +---------------------------- + +The API provides a number of "constructor" functions for creating +string and numeric values, as well as a number of convenience macros. +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)' + 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)' + 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 the api-provided + functions `api_malloc()', `api_calloc()' or `api_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)' + 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)' + This function simply creates a numeric value in the `awk_value_t' + variable pointed to by `result'. +  File: gawk.info, Node: Registration Functions, Next: Printing Messages, Prev: Constructor Functions, Up: Extension API Description -16.4.5 Registration Functions +16.4.6 Registration Functions ----------------------------- This minor node describes the API functions for registering parts of @@ -22141,7 +22174,7 @@ your extension with `gawk'.  File: gawk.info, Node: Extension Functions, Next: Exit Callback Functions, Up: Registration Functions -16.4.5.1 Registering An Extension Function +16.4.6.1 Registering An Extension Function .......................................... Extension functions are described by the following record: @@ -22167,7 +22200,9 @@ Extension functions are described by the following record: This is a pointer to the C function that provides the desired functionality. The function must fill in the result with either a number or a string. `gawk' takes ownership of any string memory. - As mentioned earlier, string memory *must* come from `malloc()'. + As mentioned earlier, string memory *must* come from the + api-provided functions `api_malloc()', `api_calloc()' or + `api_realloc()'. The `num_actual_args' argument tells the C function how many actual parameters were passed from the calling `awk' code. @@ -22193,7 +22228,7 @@ register it with `gawk' using this API function:  File: gawk.info, Node: Exit Callback Functions, Next: Extension Version String, Prev: Extension Functions, Up: Registration Functions -16.4.5.2 Registering An Exit Callback Function +16.4.6.2 Registering An Exit Callback Function .............................................. An "exit callback" function is a function that `gawk' calls before it @@ -22222,7 +22257,7 @@ order--that is, in the reverse order in which they are registered with  File: gawk.info, Node: Extension Version String, Next: Input Parsers, Prev: Exit Callback Functions, Up: Registration Functions -16.4.5.3 Registering An Extension Version String +16.4.6.3 Registering An Extension Version String ................................................ You can register a version string which indicates the name and version @@ -22238,7 +22273,7 @@ invoked with the `--version' option.  File: gawk.info, Node: Input Parsers, Next: Output Wrappers, Prev: Extension Version String, Up: Registration Functions -16.4.5.4 Customized Input Parsers +16.4.6.4 Customized Input Parsers ................................. By default, `gawk' reads text files as its input. It uses the value of @@ -22460,7 +22495,7 @@ whether or not to activate an input parser (*note BEGINFILE/ENDFILE::).  File: gawk.info, Node: Output Wrappers, Next: Two-way processors, Prev: Input Parsers, Up: Registration Functions -16.4.5.5 Customized Output Wrappers +16.4.6.5 Customized Output Wrappers ................................... An "output wrapper" is the mirror image of an input parser. It allows @@ -22567,7 +22602,7 @@ normally.  File: gawk.info, Node: Two-way processors, Prev: Output Wrappers, Up: Registration Functions -16.4.5.6 Customized Two-way Processors +16.4.6.6 Customized Two-way Processors ...................................... A "two-way processor" combines an input parser and an output wrapper for @@ -22620,7 +22655,7 @@ can take this" and "take over for this" functions,  File: gawk.info, Node: Printing Messages, Next: Updating `ERRNO', Prev: Registration Functions, Up: Extension API Description -16.4.6 Printing Messages +16.4.7 Printing Messages ------------------------ You can print different kinds of warning messages from your extension, @@ -22651,7 +22686,7 @@ the pity.  File: gawk.info, Node: Updating `ERRNO', Next: Accessing Parameters, Prev: Printing Messages, Up: Extension API Description -16.4.7 Updating `ERRNO' +16.4.8 Updating `ERRNO' ----------------------- The following functions allow you to update the `ERRNO' variable: @@ -22672,7 +22707,7 @@ The following functions allow you to update the `ERRNO' variable:  File: gawk.info, Node: Accessing Parameters, Next: Symbol Table Access, Prev: Updating `ERRNO', Up: Extension API Description -16.4.8 Accessing and Updating Parameters +16.4.9 Accessing and Updating Parameters ---------------------------------------- Two functions give you access to the arguments (parameters) passed to @@ -22698,8 +22733,8 @@ your extension function. They are:  File: gawk.info, Node: Symbol Table Access, Next: Array Manipulation, Prev: Accessing Parameters, Up: Extension API Description -16.4.9 Symbol Table Access --------------------------- +16.4.10 Symbol Table Access +--------------------------- Two sets of routines provide access to global variables, and one set allows you to create and release cached values. @@ -22713,8 +22748,8 @@ allows you to create and release cached values.  File: gawk.info, Node: Symbol table by name, Next: Symbol table by cookie, Up: Symbol Table Access -16.4.9.1 Variable Access and Update by Name -........................................... +16.4.10.1 Variable Access and Update by Name +............................................ The following routines provide the ability to access and update global `awk'-level variables by name. In compiler terminology, identifiers of @@ -22749,8 +22784,8 @@ cannot change any of those variables.  File: gawk.info, Node: Symbol table by cookie, Next: Cached values, Prev: Symbol table by name, Up: Symbol Table Access -16.4.9.2 Variable Access and Update by Cookie -............................................. +16.4.10.2 Variable Access and Update by Cookie +.............................................. A "scalar cookie" is an opaque handle that provides access to a global variable or array. It is an optimization that avoids looking up @@ -22862,8 +22897,8 @@ like this:  File: gawk.info, Node: Cached values, Prev: Symbol table by cookie, Up: Symbol Table Access -16.4.9.3 Creating and Using Cached Values -......................................... +16.4.10.3 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 are not @@ -22873,8 +22908,9 @@ variables using `sym_update()' or `sym_update_scalar()', as you like. However, you can understand the point of cached values if you remember that _every_ string value's storage _must_ come from -`malloc()'. If you have 20 variables, all of which have the same -string value, you must create 20 identical copies of the string.(1) +`api_malloc()', `api_calloc()' or `api_realloc()'. If you have 20 +variables, all of which have the same string value, you must create 20 +identical copies of the string.(1) It is clearly more efficient, if possible, to create a value once, and then tell `gawk' to reuse the value for multiple variables. That is @@ -22957,7 +22993,7 @@ using `release_value()'.  File: gawk.info, Node: Array Manipulation, Next: Extension API Variables, Prev: Symbol Table Access, Up: Extension API Description -16.4.10 Array Manipulation +16.4.11 Array Manipulation -------------------------- The primary data structure(1) in `awk' is the associative array (*note @@ -22984,7 +23020,7 @@ arrays of arrays (*note General Data Types::).  File: gawk.info, Node: Array Data Types, Next: Array Functions, Up: Array Manipulation -16.4.10.1 Array Data Types +16.4.11.1 Array Data Types .......................... The data types associated with arrays are listed below. @@ -23051,7 +23087,7 @@ overuse this term.  File: gawk.info, Node: Array Functions, Next: Flattening Arrays, Prev: Array Data Types, Up: Array Manipulation -16.4.10.2 Array Functions +16.4.11.2 Array Functions ......................... The following functions relate to individual array elements. @@ -23077,7 +23113,8 @@ The following functions relate to individual array elements. 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 `malloc()', and `gawk' + string value of `index' must come from the api-provided functions + `api_malloc()', `api_calloc()' or `api_realloc()' and `gawk' releases the storage. `awk_bool_t set_array_element(awk_array_t a_cookie,' @@ -23128,7 +23165,7 @@ The following functions relate to individual array elements.  File: gawk.info, Node: Flattening Arrays, Next: Creating Arrays, Prev: Array Functions, Up: Array Manipulation -16.4.10.3 Working With All The Elements of an Array +16.4.11.3 Working With All The Elements of an Array ................................................... To "flatten" an array is create a structure that represents the full @@ -23302,7 +23339,7 @@ return value to success, and returns:  File: gawk.info, Node: Creating Arrays, Prev: Flattening Arrays, Up: Array Manipulation -16.4.10.4 How To Create and Populate Arrays +16.4.11.4 How To Create and Populate Arrays ........................................... Besides working with arrays created by `awk' code, you can create @@ -23441,7 +23478,7 @@ environment variable.)  File: gawk.info, Node: Extension API Variables, Next: Extension API Boilerplate, Prev: Array Manipulation, Up: Extension API Description -16.4.11 API Variables +16.4.12 API Variables --------------------- The API provides two sets of variables. The first provides information @@ -23458,7 +23495,7 @@ information about how `gawk' was invoked.  File: gawk.info, Node: Extension Versioning, Next: Extension API Informational Variables, Up: Extension API Variables -16.4.11.1 API Version Constants and Variables +16.4.12.1 API Version Constants and Variables ............................................. The API provides both a "major" and a "minor" version number. The API @@ -23507,7 +23544,7 @@ Boilerplate::).  File: gawk.info, Node: Extension API Informational Variables, Prev: Extension Versioning, Up: Extension API Variables -16.4.11.2 Informational Variables +16.4.12.2 Informational Variables ................................. The API provides access to several variables that describe whether the @@ -23543,7 +23580,7 @@ change during execution.  File: gawk.info, Node: Extension API Boilerplate, Prev: Extension API Variables, Up: Extension API Description -16.4.12 Boilerplate Code +16.4.13 Boilerplate Code ------------------------ As mentioned earlier (*note Extension Mechanism Outline::), the function @@ -32792,526 +32829,527 @@ Index  Tag Table: Node: Top1366 -Node: Foreword40856 -Node: Preface45201 -Ref: Preface-Footnote-148254 -Ref: Preface-Footnote-248350 -Node: History48582 -Node: Names50956 -Ref: Names-Footnote-152433 -Node: This Manual52505 -Ref: This Manual-Footnote-158279 -Node: Conventions58379 -Node: Manual History60535 -Ref: Manual History-Footnote-163983 -Ref: Manual History-Footnote-264024 -Node: How To Contribute64098 -Node: Acknowledgments65242 -Node: Getting Started69436 -Node: Running gawk71815 -Node: One-shot73001 -Node: Read Terminal74226 -Ref: Read Terminal-Footnote-175876 -Ref: Read Terminal-Footnote-276152 -Node: Long76323 -Node: Executable Scripts77699 -Ref: Executable Scripts-Footnote-179532 -Ref: Executable Scripts-Footnote-279634 -Node: Comments80181 -Node: Quoting82648 -Node: DOS Quoting87271 -Node: Sample Data Files87946 -Node: Very Simple90332 -Node: Two Rules94931 -Node: More Complex97078 -Ref: More Complex-Footnote-1100008 -Node: Statements/Lines100093 -Ref: Statements/Lines-Footnote-1104555 -Node: Other Features104820 -Node: When105748 -Node: Invoking Gawk107895 -Node: Command Line109358 -Node: Options110141 -Ref: Options-Footnote-1125536 -Node: Other Arguments125561 -Node: Naming Standard Input128219 -Node: Environment Variables129313 -Node: AWKPATH Variable129871 -Ref: AWKPATH Variable-Footnote-1132629 -Node: AWKLIBPATH Variable132889 -Node: Other Environment Variables133607 -Node: Exit Status136570 -Node: Include Files137245 -Node: Loading Shared Libraries140814 -Node: Obsolete142178 -Node: Undocumented142875 -Node: Regexp143117 -Node: Regexp Usage144506 -Node: Escape Sequences146532 -Node: Regexp Operators152201 -Ref: Regexp Operators-Footnote-1159581 -Ref: Regexp Operators-Footnote-2159728 -Node: Bracket Expressions159826 -Ref: table-char-classes161716 -Node: GNU Regexp Operators164239 -Node: Case-sensitivity167962 -Ref: Case-sensitivity-Footnote-1170930 -Ref: Case-sensitivity-Footnote-2171165 -Node: Leftmost Longest171273 -Node: Computed Regexps172474 -Node: Reading Files175811 -Node: Records177813 -Ref: Records-Footnote-1186901 -Node: Fields186938 -Ref: Fields-Footnote-1189971 -Node: Nonconstant Fields190057 -Node: Changing Fields192259 -Node: Field Separators198218 -Node: Default Field Splitting200920 -Node: Regexp Field Splitting202037 -Node: Single Character Fields205379 -Node: Command Line Field Separator206438 -Node: Full Line Fields209872 -Ref: Full Line Fields-Footnote-1210380 -Node: Field Splitting Summary210426 -Ref: Field Splitting Summary-Footnote-1213525 -Node: Constant Size213626 -Node: Splitting By Content218233 -Ref: Splitting By Content-Footnote-1221982 -Node: Multiple Line222022 -Ref: Multiple Line-Footnote-1227869 -Node: Getline228048 -Node: Plain Getline230264 -Node: Getline/Variable232359 -Node: Getline/File233506 -Node: Getline/Variable/File234847 -Ref: Getline/Variable/File-Footnote-1236446 -Node: Getline/Pipe236533 -Node: Getline/Variable/Pipe239232 -Node: Getline/Coprocess240339 -Node: Getline/Variable/Coprocess241591 -Node: Getline Notes242328 -Node: Getline Summary245115 -Ref: table-getline-variants245523 -Node: Read Timeout246435 -Ref: Read Timeout-Footnote-1250176 -Node: Command line directories250233 -Node: Printing250863 -Node: Print252494 -Node: Print Examples253831 -Node: Output Separators256615 -Node: OFMT258375 -Node: Printf259733 -Node: Basic Printf260639 -Node: Control Letters262178 -Node: Format Modifiers265990 -Node: Printf Examples271999 -Node: Redirection274714 -Node: Special Files281679 -Node: Special FD282212 -Ref: Special FD-Footnote-1285837 -Node: Special Network285911 -Node: Special Caveats286761 -Node: Close Files And Pipes287557 -Ref: Close Files And Pipes-Footnote-1294540 -Ref: Close Files And Pipes-Footnote-2294688 -Node: Expressions294838 -Node: Values295970 -Node: Constants296646 -Node: Scalar Constants297326 -Ref: Scalar Constants-Footnote-1298185 -Node: Nondecimal-numbers298367 -Node: Regexp Constants301367 -Node: Using Constant Regexps301842 -Node: Variables304897 -Node: Using Variables305552 -Node: Assignment Options307276 -Node: Conversion309148 -Ref: table-locale-affects314648 -Ref: Conversion-Footnote-1315272 -Node: All Operators315381 -Node: Arithmetic Ops316011 -Node: Concatenation318516 -Ref: Concatenation-Footnote-1321308 -Node: Assignment Ops321428 -Ref: table-assign-ops326416 -Node: Increment Ops327747 -Node: Truth Values and Conditions331181 -Node: Truth Values332264 -Node: Typing and Comparison333313 -Node: Variable Typing334106 -Ref: Variable Typing-Footnote-1338003 -Node: Comparison Operators338125 -Ref: table-relational-ops338535 -Node: POSIX String Comparison342083 -Ref: POSIX String Comparison-Footnote-1343039 -Node: Boolean Ops343177 -Ref: Boolean Ops-Footnote-1347255 -Node: Conditional Exp347346 -Node: Function Calls349078 -Node: Precedence352672 -Node: Locales356341 -Node: Patterns and Actions357430 -Node: Pattern Overview358484 -Node: Regexp Patterns360153 -Node: Expression Patterns360696 -Node: Ranges364381 -Node: BEGIN/END367485 -Node: Using BEGIN/END368247 -Ref: Using BEGIN/END-Footnote-1370978 -Node: I/O And BEGIN/END371084 -Node: BEGINFILE/ENDFILE373366 -Node: Empty376280 -Node: Using Shell Variables376596 -Node: Action Overview378881 -Node: Statements381238 -Node: If Statement383092 -Node: While Statement384591 -Node: Do Statement386635 -Node: For Statement387791 -Node: Switch Statement390943 -Node: Break Statement393097 -Node: Continue Statement395087 -Node: Next Statement396880 -Node: Nextfile Statement399270 -Node: Exit Statement401925 -Node: Built-in Variables404341 -Node: User-modified405436 -Ref: User-modified-Footnote-1413794 -Node: Auto-set413856 -Ref: Auto-set-Footnote-1426934 -Ref: Auto-set-Footnote-2427139 -Node: ARGC and ARGV427195 -Node: Arrays431046 -Node: Array Basics432551 -Node: Array Intro433377 -Node: Reference to Elements437694 -Node: Assigning Elements439964 -Node: Array Example440455 -Node: Scanning an Array442187 -Node: Controlling Scanning444501 -Ref: Controlling Scanning-Footnote-1449588 -Node: Delete449904 -Ref: Delete-Footnote-1452669 -Node: Numeric Array Subscripts452726 -Node: Uninitialized Subscripts454909 -Node: Multidimensional456536 -Node: Multiscanning459629 -Node: Arrays of Arrays461218 -Node: Functions465858 -Node: Built-in466677 -Node: Calling Built-in467755 -Node: Numeric Functions469743 -Ref: Numeric Functions-Footnote-1473575 -Ref: Numeric Functions-Footnote-2473932 -Ref: Numeric Functions-Footnote-3473980 -Node: String Functions474249 -Ref: String Functions-Footnote-1497169 -Ref: String Functions-Footnote-2497298 -Ref: String Functions-Footnote-3497546 -Node: Gory Details497633 -Ref: table-sub-escapes499312 -Ref: table-sub-posix-92500666 -Ref: table-sub-proposed502017 -Ref: table-posix-sub503371 -Ref: table-gensub-escapes504916 -Ref: Gory Details-Footnote-1506092 -Ref: Gory Details-Footnote-2506143 -Node: I/O Functions506294 -Ref: I/O Functions-Footnote-1513284 -Node: Time Functions513431 -Ref: Time Functions-Footnote-1524364 -Ref: Time Functions-Footnote-2524432 -Ref: Time Functions-Footnote-3524590 -Ref: Time Functions-Footnote-4524701 -Ref: Time Functions-Footnote-5524813 -Ref: Time Functions-Footnote-6525040 -Node: Bitwise Functions525306 -Ref: table-bitwise-ops525868 -Ref: Bitwise Functions-Footnote-1530089 -Node: Type Functions530273 -Node: I18N Functions531424 -Node: User-defined533051 -Node: Definition Syntax533855 -Ref: Definition Syntax-Footnote-1538769 -Node: Function Example538838 -Ref: Function Example-Footnote-1541487 -Node: Function Caveats541509 -Node: Calling A Function542027 -Node: Variable Scope542982 -Node: Pass By Value/Reference545945 -Node: Return Statement549453 -Node: Dynamic Typing552434 -Node: Indirect Calls553365 -Node: Library Functions563052 -Ref: Library Functions-Footnote-1566565 -Ref: Library Functions-Footnote-2566708 -Node: Library Names566879 -Ref: Library Names-Footnote-1570352 -Ref: Library Names-Footnote-2570572 -Node: General Functions570658 -Node: Strtonum Function571686 -Node: Assert Function574616 -Node: Round Function577942 -Node: Cliff Random Function579483 -Node: Ordinal Functions580499 -Ref: Ordinal Functions-Footnote-1583576 -Ref: Ordinal Functions-Footnote-2583828 -Node: Join Function584039 -Ref: Join Function-Footnote-1585810 -Node: Getlocaltime Function586010 -Node: Readfile Function589751 -Node: Data File Management591590 -Node: Filetrans Function592222 -Node: Rewind Function596291 -Node: File Checking597678 -Node: Empty Files598772 -Node: Ignoring Assigns601002 -Node: Getopt Function602556 -Ref: Getopt Function-Footnote-1613859 -Node: Passwd Functions614062 -Ref: Passwd Functions-Footnote-1623040 -Node: Group Functions623128 -Node: Walking Arrays631212 -Node: Sample Programs633348 -Node: Running Examples634022 -Node: Clones634750 -Node: Cut Program635974 -Node: Egrep Program645825 -Ref: Egrep Program-Footnote-1653598 -Node: Id Program653708 -Node: Split Program657324 -Ref: Split Program-Footnote-1660843 -Node: Tee Program660971 -Node: Uniq Program663774 -Node: Wc Program671203 -Ref: Wc Program-Footnote-1675469 -Ref: Wc Program-Footnote-2675669 -Node: Miscellaneous Programs675761 -Node: Dupword Program676949 -Node: Alarm Program678980 -Node: Translate Program683787 -Ref: Translate Program-Footnote-1688174 -Ref: Translate Program-Footnote-2688422 -Node: Labels Program688556 -Ref: Labels Program-Footnote-1691927 -Node: Word Sorting692011 -Node: History Sorting695895 -Node: Extract Program697734 -Ref: Extract Program-Footnote-1705237 -Node: Simple Sed705365 -Node: Igawk Program708427 -Ref: Igawk Program-Footnote-1723584 -Ref: Igawk Program-Footnote-2723785 -Node: Anagram Program723923 -Node: Signature Program726991 -Node: Advanced Features728091 -Node: Nondecimal Data729977 -Node: Array Sorting731560 -Node: Controlling Array Traversal732257 -Node: Array Sorting Functions740541 -Ref: Array Sorting Functions-Footnote-1744410 -Node: Two-way I/O744604 -Ref: Two-way I/O-Footnote-1750036 -Node: TCP/IP Networking750118 -Node: Profiling752962 -Node: Internationalization760465 -Node: I18N and L10N761890 -Node: Explaining gettext762576 -Ref: Explaining gettext-Footnote-1767644 -Ref: Explaining gettext-Footnote-2767828 -Node: Programmer i18n767993 -Node: Translator i18n772195 -Node: String Extraction772989 -Ref: String Extraction-Footnote-1773950 -Node: Printf Ordering774036 -Ref: Printf Ordering-Footnote-1776818 -Node: I18N Portability776882 -Ref: I18N Portability-Footnote-1779331 -Node: I18N Example779394 -Ref: I18N Example-Footnote-1782032 -Node: Gawk I18N782104 -Node: Debugger782725 -Node: Debugging783696 -Node: Debugging Concepts784129 -Node: Debugging Terms785985 -Node: Awk Debugging788582 -Node: Sample Debugging Session789474 -Node: Debugger Invocation789994 -Node: Finding The Bug791327 -Node: List of Debugger Commands797814 -Node: Breakpoint Control799148 -Node: Debugger Execution Control802812 -Node: Viewing And Changing Data806172 -Node: Execution Stack809528 -Node: Debugger Info810995 -Node: Miscellaneous Debugger Commands814977 -Node: Readline Support820153 -Node: Limitations820984 -Node: Arbitrary Precision Arithmetic823236 -Ref: Arbitrary Precision Arithmetic-Footnote-1824885 -Node: General Arithmetic825033 -Node: Floating Point Issues826753 -Node: String Conversion Precision827634 -Ref: String Conversion Precision-Footnote-1829339 -Node: Unexpected Results829448 -Node: POSIX Floating Point Problems831601 -Ref: POSIX Floating Point Problems-Footnote-1835426 -Node: Integer Programming835464 -Node: Floating-point Programming837203 -Ref: Floating-point Programming-Footnote-1843534 -Ref: Floating-point Programming-Footnote-2843804 -Node: Floating-point Representation844068 -Node: Floating-point Context845233 -Ref: table-ieee-formats846072 -Node: Rounding Mode847456 -Ref: table-rounding-modes847935 -Ref: Rounding Mode-Footnote-1850950 -Node: Gawk and MPFR851129 -Node: Arbitrary Precision Floats852384 -Ref: Arbitrary Precision Floats-Footnote-1854827 -Node: Setting Precision855143 -Ref: table-predefined-precision-strings855829 -Node: Setting Rounding Mode857974 -Ref: table-gawk-rounding-modes858378 -Node: Floating-point Constants859565 -Node: Changing Precision860994 -Ref: Changing Precision-Footnote-1862391 -Node: Exact Arithmetic862565 -Node: Arbitrary Precision Integers865703 -Ref: Arbitrary Precision Integers-Footnote-1868718 -Node: Dynamic Extensions868865 -Node: Extension Intro870323 -Node: Plugin License871588 -Node: Extension Mechanism Outline872273 -Ref: load-extension872690 -Ref: load-new-function874168 -Ref: call-new-function875163 -Node: Extension API Description877178 -Node: Extension API Functions Introduction878391 -Node: General Data Types883257 -Ref: General Data Types-Footnote-1888859 -Node: Requesting Values889158 -Ref: table-value-types-returned889889 -Node: Constructor Functions890843 -Node: Registration Functions893863 -Node: Extension Functions894548 -Node: Exit Callback Functions896774 -Node: Extension Version String898023 -Node: Input Parsers898673 -Node: Output Wrappers908430 -Node: Two-way processors912940 -Node: Printing Messages915148 -Ref: Printing Messages-Footnote-1916225 -Node: Updating `ERRNO'916377 -Node: Accessing Parameters917116 -Node: Symbol Table Access918346 -Node: Symbol table by name918858 -Node: Symbol table by cookie920605 -Ref: Symbol table by cookie-Footnote-1924735 -Node: Cached values924798 -Ref: Cached values-Footnote-1928247 -Node: Array Manipulation928338 -Ref: Array Manipulation-Footnote-1929436 -Node: Array Data Types929475 -Ref: Array Data Types-Footnote-1932178 -Node: Array Functions932270 -Node: Flattening Arrays936036 -Node: Creating Arrays942888 -Node: Extension API Variables947613 -Node: Extension Versioning948249 -Node: Extension API Informational Variables950150 -Node: Extension API Boilerplate951236 -Node: Finding Extensions955040 -Node: Extension Example955600 -Node: Internal File Description956330 -Node: Internal File Ops960421 -Ref: Internal File Ops-Footnote-1971930 -Node: Using Internal File Ops972070 -Ref: Using Internal File Ops-Footnote-1974423 -Node: Extension Samples974689 -Node: Extension Sample File Functions976213 -Node: Extension Sample Fnmatch984698 -Node: Extension Sample Fork986467 -Node: Extension Sample Inplace987680 -Node: Extension Sample Ord989458 -Node: Extension Sample Readdir990294 -Node: Extension Sample Revout991826 -Node: Extension Sample Rev2way992419 -Node: Extension Sample Read write array993109 -Node: Extension Sample Readfile994992 -Node: Extension Sample API Tests995810 -Node: Extension Sample Time996335 -Node: gawkextlib997699 -Node: Language History1000480 -Node: V7/SVR3.11002073 -Node: SVR41004393 -Node: POSIX1005835 -Node: BTL1007221 -Node: POSIX/GNU1007955 -Node: Feature History1013554 -Node: Common Extensions1026530 -Node: Ranges and Locales1027842 -Ref: Ranges and Locales-Footnote-11032459 -Ref: Ranges and Locales-Footnote-21032486 -Ref: Ranges and Locales-Footnote-31032720 -Node: Contributors1032941 -Node: Installation1038086 -Node: Gawk Distribution1038980 -Node: Getting1039464 -Node: Extracting1040290 -Node: Distribution contents1041982 -Node: Unix Installation1047687 -Node: Quick Installation1048304 -Node: Additional Configuration Options1050750 -Node: Configuration Philosophy1052486 -Node: Non-Unix Installation1054840 -Node: PC Installation1055298 -Node: PC Binary Installation1056597 -Node: PC Compiling1058445 -Node: PC Testing1061389 -Node: PC Using1062565 -Node: Cygwin1066733 -Node: MSYS1067542 -Node: VMS Installation1068056 -Node: VMS Compilation1068820 -Ref: VMS Compilation-Footnote-11070072 -Node: VMS Dynamic Extensions1070130 -Node: VMS Installation Details1071503 -Node: VMS Running1073754 -Node: VMS GNV1076588 -Node: VMS Old Gawk1077311 -Node: Bugs1077781 -Node: Other Versions1081699 -Node: Notes1087783 -Node: Compatibility Mode1088583 -Node: Additions1089366 -Node: Accessing The Source1090293 -Node: Adding Code1091733 -Node: New Ports1097778 -Node: Derived Files1101913 -Ref: Derived Files-Footnote-11107234 -Ref: Derived Files-Footnote-21107268 -Ref: Derived Files-Footnote-31107868 -Node: Future Extensions1107966 -Node: Implementation Limitations1108549 -Node: Extension Design1109801 -Node: Old Extension Problems1110955 -Ref: Old Extension Problems-Footnote-11112463 -Node: Extension New Mechanism Goals1112520 -Ref: Extension New Mechanism Goals-Footnote-11115885 -Node: Extension Other Design Decisions1116071 -Node: Extension Future Growth1118177 -Node: Old Extension Mechanism1119013 -Node: Basic Concepts1120753 -Node: Basic High Level1121434 -Ref: figure-general-flow1121705 -Ref: figure-process-flow1122304 -Ref: Basic High Level-Footnote-11125533 -Node: Basic Data Typing1125718 -Node: Glossary1129073 -Node: Copying1154535 -Node: GNU Free Documentation License1192092 -Node: Index1217229 +Node: Foreword40929 +Node: Preface45274 +Ref: Preface-Footnote-148327 +Ref: Preface-Footnote-248423 +Node: History48655 +Node: Names51029 +Ref: Names-Footnote-152506 +Node: This Manual52578 +Ref: This Manual-Footnote-158352 +Node: Conventions58452 +Node: Manual History60608 +Ref: Manual History-Footnote-164056 +Ref: Manual History-Footnote-264097 +Node: How To Contribute64171 +Node: Acknowledgments65315 +Node: Getting Started69509 +Node: Running gawk71888 +Node: One-shot73074 +Node: Read Terminal74299 +Ref: Read Terminal-Footnote-175949 +Ref: Read Terminal-Footnote-276225 +Node: Long76396 +Node: Executable Scripts77772 +Ref: Executable Scripts-Footnote-179605 +Ref: Executable Scripts-Footnote-279707 +Node: Comments80254 +Node: Quoting82721 +Node: DOS Quoting87344 +Node: Sample Data Files88019 +Node: Very Simple90405 +Node: Two Rules95004 +Node: More Complex97151 +Ref: More Complex-Footnote-1100081 +Node: Statements/Lines100166 +Ref: Statements/Lines-Footnote-1104628 +Node: Other Features104893 +Node: When105821 +Node: Invoking Gawk107968 +Node: Command Line109431 +Node: Options110214 +Ref: Options-Footnote-1125609 +Node: Other Arguments125634 +Node: Naming Standard Input128292 +Node: Environment Variables129386 +Node: AWKPATH Variable129944 +Ref: AWKPATH Variable-Footnote-1132702 +Node: AWKLIBPATH Variable132962 +Node: Other Environment Variables133680 +Node: Exit Status136643 +Node: Include Files137318 +Node: Loading Shared Libraries140887 +Node: Obsolete142251 +Node: Undocumented142948 +Node: Regexp143190 +Node: Regexp Usage144579 +Node: Escape Sequences146605 +Node: Regexp Operators152274 +Ref: Regexp Operators-Footnote-1159654 +Ref: Regexp Operators-Footnote-2159801 +Node: Bracket Expressions159899 +Ref: table-char-classes161789 +Node: GNU Regexp Operators164312 +Node: Case-sensitivity168035 +Ref: Case-sensitivity-Footnote-1171003 +Ref: Case-sensitivity-Footnote-2171238 +Node: Leftmost Longest171346 +Node: Computed Regexps172547 +Node: Reading Files175884 +Node: Records177886 +Ref: Records-Footnote-1186974 +Node: Fields187011 +Ref: Fields-Footnote-1190044 +Node: Nonconstant Fields190130 +Node: Changing Fields192332 +Node: Field Separators198291 +Node: Default Field Splitting200993 +Node: Regexp Field Splitting202110 +Node: Single Character Fields205452 +Node: Command Line Field Separator206511 +Node: Full Line Fields209945 +Ref: Full Line Fields-Footnote-1210453 +Node: Field Splitting Summary210499 +Ref: Field Splitting Summary-Footnote-1213598 +Node: Constant Size213699 +Node: Splitting By Content218306 +Ref: Splitting By Content-Footnote-1222055 +Node: Multiple Line222095 +Ref: Multiple Line-Footnote-1227942 +Node: Getline228121 +Node: Plain Getline230337 +Node: Getline/Variable232432 +Node: Getline/File233579 +Node: Getline/Variable/File234920 +Ref: Getline/Variable/File-Footnote-1236519 +Node: Getline/Pipe236606 +Node: Getline/Variable/Pipe239305 +Node: Getline/Coprocess240412 +Node: Getline/Variable/Coprocess241664 +Node: Getline Notes242401 +Node: Getline Summary245188 +Ref: table-getline-variants245596 +Node: Read Timeout246508 +Ref: Read Timeout-Footnote-1250249 +Node: Command line directories250306 +Node: Printing250936 +Node: Print252567 +Node: Print Examples253904 +Node: Output Separators256688 +Node: OFMT258448 +Node: Printf259806 +Node: Basic Printf260712 +Node: Control Letters262251 +Node: Format Modifiers266063 +Node: Printf Examples272072 +Node: Redirection274787 +Node: Special Files281752 +Node: Special FD282285 +Ref: Special FD-Footnote-1285910 +Node: Special Network285984 +Node: Special Caveats286834 +Node: Close Files And Pipes287630 +Ref: Close Files And Pipes-Footnote-1294613 +Ref: Close Files And Pipes-Footnote-2294761 +Node: Expressions294911 +Node: Values296043 +Node: Constants296719 +Node: Scalar Constants297399 +Ref: Scalar Constants-Footnote-1298258 +Node: Nondecimal-numbers298440 +Node: Regexp Constants301440 +Node: Using Constant Regexps301915 +Node: Variables304970 +Node: Using Variables305625 +Node: Assignment Options307349 +Node: Conversion309221 +Ref: table-locale-affects314721 +Ref: Conversion-Footnote-1315345 +Node: All Operators315454 +Node: Arithmetic Ops316084 +Node: Concatenation318589 +Ref: Concatenation-Footnote-1321381 +Node: Assignment Ops321501 +Ref: table-assign-ops326489 +Node: Increment Ops327820 +Node: Truth Values and Conditions331254 +Node: Truth Values332337 +Node: Typing and Comparison333386 +Node: Variable Typing334179 +Ref: Variable Typing-Footnote-1338076 +Node: Comparison Operators338198 +Ref: table-relational-ops338608 +Node: POSIX String Comparison342156 +Ref: POSIX String Comparison-Footnote-1343112 +Node: Boolean Ops343250 +Ref: Boolean Ops-Footnote-1347328 +Node: Conditional Exp347419 +Node: Function Calls349151 +Node: Precedence352745 +Node: Locales356414 +Node: Patterns and Actions357503 +Node: Pattern Overview358557 +Node: Regexp Patterns360226 +Node: Expression Patterns360769 +Node: Ranges364454 +Node: BEGIN/END367558 +Node: Using BEGIN/END368320 +Ref: Using BEGIN/END-Footnote-1371051 +Node: I/O And BEGIN/END371157 +Node: BEGINFILE/ENDFILE373439 +Node: Empty376353 +Node: Using Shell Variables376669 +Node: Action Overview378954 +Node: Statements381311 +Node: If Statement383165 +Node: While Statement384664 +Node: Do Statement386708 +Node: For Statement387864 +Node: Switch Statement391016 +Node: Break Statement393170 +Node: Continue Statement395160 +Node: Next Statement396953 +Node: Nextfile Statement399343 +Node: Exit Statement401998 +Node: Built-in Variables404414 +Node: User-modified405509 +Ref: User-modified-Footnote-1413867 +Node: Auto-set413929 +Ref: Auto-set-Footnote-1427007 +Ref: Auto-set-Footnote-2427212 +Node: ARGC and ARGV427268 +Node: Arrays431119 +Node: Array Basics432624 +Node: Array Intro433450 +Node: Reference to Elements437767 +Node: Assigning Elements440037 +Node: Array Example440528 +Node: Scanning an Array442260 +Node: Controlling Scanning444574 +Ref: Controlling Scanning-Footnote-1449661 +Node: Delete449977 +Ref: Delete-Footnote-1452742 +Node: Numeric Array Subscripts452799 +Node: Uninitialized Subscripts454982 +Node: Multidimensional456609 +Node: Multiscanning459702 +Node: Arrays of Arrays461291 +Node: Functions465931 +Node: Built-in466750 +Node: Calling Built-in467828 +Node: Numeric Functions469816 +Ref: Numeric Functions-Footnote-1473648 +Ref: Numeric Functions-Footnote-2474005 +Ref: Numeric Functions-Footnote-3474053 +Node: String Functions474322 +Ref: String Functions-Footnote-1497242 +Ref: String Functions-Footnote-2497371 +Ref: String Functions-Footnote-3497619 +Node: Gory Details497706 +Ref: table-sub-escapes499385 +Ref: table-sub-posix-92500739 +Ref: table-sub-proposed502090 +Ref: table-posix-sub503444 +Ref: table-gensub-escapes504989 +Ref: Gory Details-Footnote-1506165 +Ref: Gory Details-Footnote-2506216 +Node: I/O Functions506367 +Ref: I/O Functions-Footnote-1513357 +Node: Time Functions513504 +Ref: Time Functions-Footnote-1524437 +Ref: Time Functions-Footnote-2524505 +Ref: Time Functions-Footnote-3524663 +Ref: Time Functions-Footnote-4524774 +Ref: Time Functions-Footnote-5524886 +Ref: Time Functions-Footnote-6525113 +Node: Bitwise Functions525379 +Ref: table-bitwise-ops525941 +Ref: Bitwise Functions-Footnote-1530162 +Node: Type Functions530346 +Node: I18N Functions531497 +Node: User-defined533124 +Node: Definition Syntax533928 +Ref: Definition Syntax-Footnote-1538842 +Node: Function Example538911 +Ref: Function Example-Footnote-1541560 +Node: Function Caveats541582 +Node: Calling A Function542100 +Node: Variable Scope543055 +Node: Pass By Value/Reference546018 +Node: Return Statement549526 +Node: Dynamic Typing552507 +Node: Indirect Calls553438 +Node: Library Functions563125 +Ref: Library Functions-Footnote-1566638 +Ref: Library Functions-Footnote-2566781 +Node: Library Names566952 +Ref: Library Names-Footnote-1570425 +Ref: Library Names-Footnote-2570645 +Node: General Functions570731 +Node: Strtonum Function571759 +Node: Assert Function574689 +Node: Round Function578015 +Node: Cliff Random Function579556 +Node: Ordinal Functions580572 +Ref: Ordinal Functions-Footnote-1583649 +Ref: Ordinal Functions-Footnote-2583901 +Node: Join Function584112 +Ref: Join Function-Footnote-1585883 +Node: Getlocaltime Function586083 +Node: Readfile Function589824 +Node: Data File Management591663 +Node: Filetrans Function592295 +Node: Rewind Function596364 +Node: File Checking597751 +Node: Empty Files598845 +Node: Ignoring Assigns601075 +Node: Getopt Function602629 +Ref: Getopt Function-Footnote-1613932 +Node: Passwd Functions614135 +Ref: Passwd Functions-Footnote-1623113 +Node: Group Functions623201 +Node: Walking Arrays631285 +Node: Sample Programs633421 +Node: Running Examples634095 +Node: Clones634823 +Node: Cut Program636047 +Node: Egrep Program645898 +Ref: Egrep Program-Footnote-1653671 +Node: Id Program653781 +Node: Split Program657397 +Ref: Split Program-Footnote-1660916 +Node: Tee Program661044 +Node: Uniq Program663847 +Node: Wc Program671276 +Ref: Wc Program-Footnote-1675542 +Ref: Wc Program-Footnote-2675742 +Node: Miscellaneous Programs675834 +Node: Dupword Program677022 +Node: Alarm Program679053 +Node: Translate Program683860 +Ref: Translate Program-Footnote-1688247 +Ref: Translate Program-Footnote-2688495 +Node: Labels Program688629 +Ref: Labels Program-Footnote-1692000 +Node: Word Sorting692084 +Node: History Sorting695968 +Node: Extract Program697807 +Ref: Extract Program-Footnote-1705310 +Node: Simple Sed705438 +Node: Igawk Program708500 +Ref: Igawk Program-Footnote-1723657 +Ref: Igawk Program-Footnote-2723858 +Node: Anagram Program723996 +Node: Signature Program727064 +Node: Advanced Features728164 +Node: Nondecimal Data730050 +Node: Array Sorting731633 +Node: Controlling Array Traversal732330 +Node: Array Sorting Functions740614 +Ref: Array Sorting Functions-Footnote-1744483 +Node: Two-way I/O744677 +Ref: Two-way I/O-Footnote-1750109 +Node: TCP/IP Networking750191 +Node: Profiling753035 +Node: Internationalization760538 +Node: I18N and L10N761963 +Node: Explaining gettext762649 +Ref: Explaining gettext-Footnote-1767717 +Ref: Explaining gettext-Footnote-2767901 +Node: Programmer i18n768066 +Node: Translator i18n772268 +Node: String Extraction773062 +Ref: String Extraction-Footnote-1774023 +Node: Printf Ordering774109 +Ref: Printf Ordering-Footnote-1776891 +Node: I18N Portability776955 +Ref: I18N Portability-Footnote-1779404 +Node: I18N Example779467 +Ref: I18N Example-Footnote-1782105 +Node: Gawk I18N782177 +Node: Debugger782798 +Node: Debugging783769 +Node: Debugging Concepts784202 +Node: Debugging Terms786058 +Node: Awk Debugging788655 +Node: Sample Debugging Session789547 +Node: Debugger Invocation790067 +Node: Finding The Bug791400 +Node: List of Debugger Commands797887 +Node: Breakpoint Control799221 +Node: Debugger Execution Control802885 +Node: Viewing And Changing Data806245 +Node: Execution Stack809601 +Node: Debugger Info811068 +Node: Miscellaneous Debugger Commands815050 +Node: Readline Support820226 +Node: Limitations821057 +Node: Arbitrary Precision Arithmetic823309 +Ref: Arbitrary Precision Arithmetic-Footnote-1824958 +Node: General Arithmetic825106 +Node: Floating Point Issues826826 +Node: String Conversion Precision827707 +Ref: String Conversion Precision-Footnote-1829412 +Node: Unexpected Results829521 +Node: POSIX Floating Point Problems831674 +Ref: POSIX Floating Point Problems-Footnote-1835499 +Node: Integer Programming835537 +Node: Floating-point Programming837276 +Ref: Floating-point Programming-Footnote-1843607 +Ref: Floating-point Programming-Footnote-2843877 +Node: Floating-point Representation844141 +Node: Floating-point Context845306 +Ref: table-ieee-formats846145 +Node: Rounding Mode847529 +Ref: table-rounding-modes848008 +Ref: Rounding Mode-Footnote-1851023 +Node: Gawk and MPFR851202 +Node: Arbitrary Precision Floats852457 +Ref: Arbitrary Precision Floats-Footnote-1854900 +Node: Setting Precision855216 +Ref: table-predefined-precision-strings855902 +Node: Setting Rounding Mode858047 +Ref: table-gawk-rounding-modes858451 +Node: Floating-point Constants859638 +Node: Changing Precision861067 +Ref: Changing Precision-Footnote-1862464 +Node: Exact Arithmetic862638 +Node: Arbitrary Precision Integers865776 +Ref: Arbitrary Precision Integers-Footnote-1868791 +Node: Dynamic Extensions868938 +Node: Extension Intro870396 +Node: Plugin License871661 +Node: Extension Mechanism Outline872346 +Ref: load-extension872763 +Ref: load-new-function874241 +Ref: call-new-function875236 +Node: Extension API Description877251 +Node: Extension API Functions Introduction878538 +Node: General Data Types883410 +Ref: General Data Types-Footnote-1889105 +Node: Requesting Values889404 +Ref: table-value-types-returned890141 +Node: Memory Allocation Functions891095 +Node: Constructor Functions893456 +Node: Registration Functions895214 +Node: Extension Functions895899 +Node: Exit Callback Functions898201 +Node: Extension Version String899450 +Node: Input Parsers900100 +Node: Output Wrappers909857 +Node: Two-way processors914367 +Node: Printing Messages916575 +Ref: Printing Messages-Footnote-1917652 +Node: Updating `ERRNO'917804 +Node: Accessing Parameters918543 +Node: Symbol Table Access919773 +Node: Symbol table by name920287 +Node: Symbol table by cookie922036 +Ref: Symbol table by cookie-Footnote-1926168 +Node: Cached values926231 +Ref: Cached values-Footnote-1929721 +Node: Array Manipulation929812 +Ref: Array Manipulation-Footnote-1930910 +Node: Array Data Types930949 +Ref: Array Data Types-Footnote-1933652 +Node: Array Functions933744 +Node: Flattening Arrays937580 +Node: Creating Arrays944432 +Node: Extension API Variables949157 +Node: Extension Versioning949793 +Node: Extension API Informational Variables951694 +Node: Extension API Boilerplate952780 +Node: Finding Extensions956584 +Node: Extension Example957144 +Node: Internal File Description957874 +Node: Internal File Ops961965 +Ref: Internal File Ops-Footnote-1973474 +Node: Using Internal File Ops973614 +Ref: Using Internal File Ops-Footnote-1975967 +Node: Extension Samples976233 +Node: Extension Sample File Functions977757 +Node: Extension Sample Fnmatch986242 +Node: Extension Sample Fork988011 +Node: Extension Sample Inplace989224 +Node: Extension Sample Ord991002 +Node: Extension Sample Readdir991838 +Node: Extension Sample Revout993370 +Node: Extension Sample Rev2way993963 +Node: Extension Sample Read write array994653 +Node: Extension Sample Readfile996536 +Node: Extension Sample API Tests997354 +Node: Extension Sample Time997879 +Node: gawkextlib999243 +Node: Language History1002024 +Node: V7/SVR3.11003617 +Node: SVR41005937 +Node: POSIX1007379 +Node: BTL1008765 +Node: POSIX/GNU1009499 +Node: Feature History1015098 +Node: Common Extensions1028074 +Node: Ranges and Locales1029386 +Ref: Ranges and Locales-Footnote-11034003 +Ref: Ranges and Locales-Footnote-21034030 +Ref: Ranges and Locales-Footnote-31034264 +Node: Contributors1034485 +Node: Installation1039630 +Node: Gawk Distribution1040524 +Node: Getting1041008 +Node: Extracting1041834 +Node: Distribution contents1043526 +Node: Unix Installation1049231 +Node: Quick Installation1049848 +Node: Additional Configuration Options1052294 +Node: Configuration Philosophy1054030 +Node: Non-Unix Installation1056384 +Node: PC Installation1056842 +Node: PC Binary Installation1058141 +Node: PC Compiling1059989 +Node: PC Testing1062933 +Node: PC Using1064109 +Node: Cygwin1068277 +Node: MSYS1069086 +Node: VMS Installation1069600 +Node: VMS Compilation1070364 +Ref: VMS Compilation-Footnote-11071616 +Node: VMS Dynamic Extensions1071674 +Node: VMS Installation Details1073047 +Node: VMS Running1075298 +Node: VMS GNV1078132 +Node: VMS Old Gawk1078855 +Node: Bugs1079325 +Node: Other Versions1083243 +Node: Notes1089327 +Node: Compatibility Mode1090127 +Node: Additions1090910 +Node: Accessing The Source1091837 +Node: Adding Code1093277 +Node: New Ports1099322 +Node: Derived Files1103457 +Ref: Derived Files-Footnote-11108778 +Ref: Derived Files-Footnote-21108812 +Ref: Derived Files-Footnote-31109412 +Node: Future Extensions1109510 +Node: Implementation Limitations1110093 +Node: Extension Design1111345 +Node: Old Extension Problems1112499 +Ref: Old Extension Problems-Footnote-11114007 +Node: Extension New Mechanism Goals1114064 +Ref: Extension New Mechanism Goals-Footnote-11117429 +Node: Extension Other Design Decisions1117615 +Node: Extension Future Growth1119721 +Node: Old Extension Mechanism1120557 +Node: Basic Concepts1122297 +Node: Basic High Level1122978 +Ref: figure-general-flow1123249 +Ref: figure-process-flow1123848 +Ref: Basic High Level-Footnote-11127077 +Node: Basic Data Typing1127262 +Node: Glossary1130617 +Node: Copying1156079 +Node: GNU Free Documentation License1193636 +Node: Index1218773  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 713f5a46..f0c7d6e6 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -742,6 +742,7 @@ particular records in a file and perform operations upon them. * Extension API Functions Introduction:: Introduction to the API functions. * General Data Types:: The data types. * Requesting Values:: How to get a value. +* Memory Allocation Functions:: Functions for allocating memory. * Constructor Functions:: Functions for creating values. * Registration Functions:: Functions to register things with @command{gawk}. @@ -29575,6 +29576,7 @@ This (rather large) @value{SECTION} describes the API in detail. * Extension API Functions Introduction:: Introduction to the API functions. * General Data Types:: The data types. * Requesting Values:: How to get a value. +* Memory Allocation Functions:: Functions for allocating memory. * Constructor Functions:: Functions for creating values. * Registration Functions:: Functions to register things with @command{gawk}. @@ -29668,10 +29670,8 @@ corresponding standard header file @emph{before} including @file{gawkapi.h}: @item @code{EOF} @tab @code{} @item @code{FILE} @tab @code{} @item @code{NULL} @tab @code{} -@item @code{malloc()} @tab @code{} @item @code{memcpy()} @tab @code{} @item @code{memset()} @tab @code{} -@item @code{realloc()} @tab @code{} @item @code{size_t} @tab @code{} @item @code{struct stat} @tab @code{} @end multitable @@ -29701,7 +29701,7 @@ does not support this keyword, you should either place All pointers filled in by @command{gawk} are 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 @code{malloc()} and is managed +from the extension @emph{must} come from calling the api-provided function pointers @code{api_malloc()}, @code{api_calloc()} or @code{api_realloc()} and is managed by @command{gawk} from then on. @item @@ -29784,7 +29784,7 @@ A simple boolean type. This represents a mutable string. @command{gawk} owns the memory pointed to if it supplied the value. Otherwise, it takes ownership of the memory pointed to. -@strong{Such memory must come from @code{malloc()}!} +@strong{Such memory must come from calling the api-provided function pointers @code{api_malloc()}, @code{api_calloc()}, or @code{api_realloc()}!} As mentioned earlier, strings are maintained using the current multibyte encoding. @@ -29946,44 +29946,33 @@ value type, as appropriate. This behavior is summarized in @end float @end ifplaintext -@node Constructor Functions -@subsection Constructor Functions and Convenience Macros +@node Memory Allocation Functions +@subsection Memory Allocation Functions and Convenience Macros -The API provides a number of @dfn{constructor} functions for creating -string and numeric values, as well as a number of convenience macros. -This @value{SUBSECTION} presents them all as function prototypes, in -the way that extension code would use them. +The API provides a number of @dfn{memory allocation} functions for +allocating memory that can be passed to gawk, as well as a number of convenience macros. @table @code -@item static inline awk_value_t * -@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 void *gawk_malloc(size_t size); +Call @command{gawk}-provided @code{api_malloc()} to allocate storage that may +be passed to @command{gawk}. -@item static inline awk_value_t * -@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{malloc()}. The idea here -is that the data is passed directly to @command{gawk}, which assumes -responsibility for it. It returns @code{result}. +@item void *gawk_calloc(size_t nmemb, size_t size); +Call @command{gawk}-provided @code{api_calloc()} to allocate storage that may +be passed to @command{gawk}. -@item static inline awk_value_t * -@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 void *gawk_realloc(void *ptr, size_t size); +Call @command{gawk}-provided @code{api_realloc()} to allocate storage that may +be passed to @command{gawk}. -@item static inline awk_value_t * -@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}. +@item void gawk_free(void *ptr); +Call @command{gawk}-provided @code{api_free()} to release storage that was +allocated with @code{gawk_malloc()}, @code{gawk_calloc()} or @code{gawk_realloc()}. @end table -Two convenience macros may be used for allocating storage from @code{malloc()} -and @code{realloc()}. If the allocation fails, they cause @command{gawk} to + +Two convenience macros may be used for allocating storage from the api-provided function pointers @code{api_malloc()} +and @code{api_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. @@ -29996,7 +29985,7 @@ The arguments to this macro are as follows: The pointer variable to point at the allocated storage. @item type -The type of the pointer variable, used to create a cast for the call to @code{malloc()}. +The type of the pointer variable, used to create a cast for the call to @code{api_malloc()}. @item size The total number of bytes to be allocated. @@ -30020,11 +30009,47 @@ 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{realloc()}, -instead of @code{malloc()}. +This is like @code{emalloc()}, but it calls @code{api_realloc()}, +instead of @code{api_malloc()}. The arguments are the same as for the @code{emalloc()} macro. @end table +@node Constructor Functions +@subsection Constructor Functions + +The API provides a number of @dfn{constructor} functions for creating +string and numeric values, as well as a number of convenience macros. +This @value{SUBSECTION} presents them all as function prototypes, in +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) +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) +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 the api-provided functions @code{api_malloc()}, @code{api_calloc()} or @code{api_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) +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) +This function simply creates a numeric value in the @code{awk_value_t} variable +pointed to by @code{result}. +@end table + @node Registration Functions @subsection Registration Functions @@ -30072,7 +30097,7 @@ This is a pointer to the C function that provides the desired functionality. The function must fill in the 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 @code{malloc()}. +As mentioned earlier, string memory @strong{must} come from the api-provided functions @code{api_malloc()}, @code{api_calloc()} or @code{api_realloc()}. The @code{num_actual_args} argument tells the C function how many actual parameters were passed from the calling @command{awk} code. @@ -30810,7 +30835,7 @@ assign those values to variables using @code{sym_update()} or @code{sym_update_scalar()}, as you like. However, you can understand the point of cached values if you remember that -@emph{every} string value's storage @emph{must} come from @code{malloc()}. +@emph{every} string value's storage @emph{must} come from @code{api_malloc()}, @code{api_calloc()} or @code{api_realloc()}. If you have 20 variables, all of which have the same string value, you must create 20 identical copies of the string.@footnote{Numeric values are clearly less problematic, requiring only a C @code{double} to store.} @@ -31007,7 +31032,7 @@ requires that you understand how such values are converted to strings (@pxref{Conversion}); thus using integral values is safest. As with @emph{all} strings passed into @code{gawk} from an extension, -the string value of @code{index} must come from @code{malloc()}, and +the string value of @code{index} must come from the api-provided functions @code{api_malloc()}, @code{api_calloc()} or @code{api_realloc()} and @command{gawk} releases the storage. @item awk_bool_t set_array_element(awk_array_t a_cookie, diff --git a/doc/gawktexi.in b/doc/gawktexi.in index dd3d1409..3720a0dc 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -737,6 +737,7 @@ particular records in a file and perform operations upon them. * Extension API Functions Introduction:: Introduction to the API functions. * General Data Types:: The data types. * Requesting Values:: How to get a value. +* Memory Allocation Functions:: Functions for allocating memory. * Constructor Functions:: Functions for creating values. * Registration Functions:: Functions to register things with @command{gawk}. @@ -28716,6 +28717,7 @@ This (rather large) @value{SECTION} describes the API in detail. * Extension API Functions Introduction:: Introduction to the API functions. * General Data Types:: The data types. * Requesting Values:: How to get a value. +* Memory Allocation Functions:: Functions for allocating memory. * Constructor Functions:: Functions for creating values. * Registration Functions:: Functions to register things with @command{gawk}. @@ -28809,10 +28811,8 @@ corresponding standard header file @emph{before} including @file{gawkapi.h}: @item @code{EOF} @tab @code{} @item @code{FILE} @tab @code{} @item @code{NULL} @tab @code{} -@item @code{malloc()} @tab @code{} @item @code{memcpy()} @tab @code{} @item @code{memset()} @tab @code{} -@item @code{realloc()} @tab @code{} @item @code{size_t} @tab @code{} @item @code{struct stat} @tab @code{} @end multitable @@ -28842,7 +28842,7 @@ does not support this keyword, you should either place All pointers filled in by @command{gawk} are 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 @code{malloc()} and is managed +from the extension @emph{must} come from calling the api-provided function pointers @code{api_malloc()}, @code{api_calloc()} or @code{api_realloc()} and is managed by @command{gawk} from then on. @item @@ -28925,7 +28925,7 @@ A simple boolean type. This represents a mutable string. @command{gawk} owns the memory pointed to if it supplied the value. Otherwise, it takes ownership of the memory pointed to. -@strong{Such memory must come from @code{malloc()}!} +@strong{Such memory must come from calling the api-provided function pointers @code{api_malloc()}, @code{api_calloc()}, or @code{api_realloc()}!} As mentioned earlier, strings are maintained using the current multibyte encoding. @@ -29087,44 +29087,33 @@ value type, as appropriate. This behavior is summarized in @end float @end ifplaintext -@node Constructor Functions -@subsection Constructor Functions and Convenience Macros +@node Memory Allocation Functions +@subsection Memory Allocation Functions and Convenience Macros -The API provides a number of @dfn{constructor} functions for creating -string and numeric values, as well as a number of convenience macros. -This @value{SUBSECTION} presents them all as function prototypes, in -the way that extension code would use them. +The API provides a number of @dfn{memory allocation} functions for +allocating memory that can be passed to gawk, as well as a number of convenience macros. @table @code -@item static inline awk_value_t * -@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 void *gawk_malloc(size_t size); +Call @command{gawk}-provided @code{api_malloc()} to allocate storage that may +be passed to @command{gawk}. -@item static inline awk_value_t * -@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{malloc()}. The idea here -is that the data is passed directly to @command{gawk}, which assumes -responsibility for it. It returns @code{result}. +@item void *gawk_calloc(size_t nmemb, size_t size); +Call @command{gawk}-provided @code{api_calloc()} to allocate storage that may +be passed to @command{gawk}. -@item static inline awk_value_t * -@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 void *gawk_realloc(void *ptr, size_t size); +Call @command{gawk}-provided @code{api_realloc()} to allocate storage that may +be passed to @command{gawk}. -@item static inline awk_value_t * -@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}. +@item void gawk_free(void *ptr); +Call @command{gawk}-provided @code{api_free()} to release storage that was +allocated with @code{gawk_malloc()}, @code{gawk_calloc()} or @code{gawk_realloc()}. @end table -Two convenience macros may be used for allocating storage from @code{malloc()} -and @code{realloc()}. If the allocation fails, they cause @command{gawk} to + +Two convenience macros may be used for allocating storage from the api-provided function pointers @code{api_malloc()} +and @code{api_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. @@ -29137,7 +29126,7 @@ The arguments to this macro are as follows: The pointer variable to point at the allocated storage. @item type -The type of the pointer variable, used to create a cast for the call to @code{malloc()}. +The type of the pointer variable, used to create a cast for the call to @code{api_malloc()}. @item size The total number of bytes to be allocated. @@ -29161,11 +29150,47 @@ 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{realloc()}, -instead of @code{malloc()}. +This is like @code{emalloc()}, but it calls @code{api_realloc()}, +instead of @code{api_malloc()}. The arguments are the same as for the @code{emalloc()} macro. @end table +@node Constructor Functions +@subsection Constructor Functions + +The API provides a number of @dfn{constructor} functions for creating +string and numeric values, as well as a number of convenience macros. +This @value{SUBSECTION} presents them all as function prototypes, in +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) +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) +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 the api-provided functions @code{api_malloc()}, @code{api_calloc()} or @code{api_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) +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) +This function simply creates a numeric value in the @code{awk_value_t} variable +pointed to by @code{result}. +@end table + @node Registration Functions @subsection Registration Functions @@ -29213,7 +29238,7 @@ This is a pointer to the C function that provides the desired functionality. The function must fill in the 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 @code{malloc()}. +As mentioned earlier, string memory @strong{must} come from the api-provided functions @code{api_malloc()}, @code{api_calloc()} or @code{api_realloc()}. The @code{num_actual_args} argument tells the C function how many actual parameters were passed from the calling @command{awk} code. @@ -29951,7 +29976,7 @@ assign those values to variables using @code{sym_update()} or @code{sym_update_scalar()}, as you like. However, you can understand the point of cached values if you remember that -@emph{every} string value's storage @emph{must} come from @code{malloc()}. +@emph{every} string value's storage @emph{must} come from @code{api_malloc()}, @code{api_calloc()} or @code{api_realloc()}. If you have 20 variables, all of which have the same string value, you must create 20 identical copies of the string.@footnote{Numeric values are clearly less problematic, requiring only a C @code{double} to store.} @@ -30148,7 +30173,7 @@ requires that you understand how such values are converted to strings (@pxref{Conversion}); thus using integral values is safest. As with @emph{all} strings passed into @code{gawk} from an extension, -the string value of @code{index} must come from @code{malloc()}, and +the string value of @code{index} must come from the api-provided functions @code{api_malloc()}, @code{api_calloc()} or @code{api_realloc()} and @command{gawk} releases the storage. @item awk_bool_t set_array_element(awk_array_t a_cookie, diff --git a/extension/ChangeLog b/extension/ChangeLog index bde626de..4a1fe2ed 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,14 @@ +2014-03-08 Andrew J. Schorr + + * filefuncs.c (read_symlink, do_fts): Replace free with gawk_free. + * inplace.c (at_exit, do_inplace_end): Ditto. + * readdir.c (dir_close): Ditto. + * readfile.c (do_readfile): Ditto. + * revtwoway.c (close_two_proc_data): Ditto. + * rwarray (read_elem): Replace realloc with gawk_realloc. + (read_value): Replace malloc and free with gawk_malloc and gawk_free. + * testext.c (try_modify_environ): Replace free with gawk_free. + 2014-02-12 John E. Malmberg * time.c: Better hack for nanosleep bug based on feedback from HP. diff --git a/extension/filefuncs.c b/extension/filefuncs.c index 3eb2a6b5..58acab4d 100644 --- a/extension/filefuncs.c +++ b/extension/filefuncs.c @@ -284,7 +284,7 @@ read_symlink(const char *fname, size_t bufsize, ssize_t *linksize) returns -1 with errno == ERANGE if the buffer is too small. */ if (errno != ERANGE) { - free(buf); + gawk_free(buf); return NULL; } } @@ -293,7 +293,7 @@ read_symlink(const char *fname, size_t bufsize, ssize_t *linksize) buf[*linksize] = '\0'; return buf; } - free(buf); + gawk_free(buf); if (bufsize <= MAXSIZE/2) bufsize *= 2; else if (bufsize < MAXSIZE) @@ -854,7 +854,7 @@ do_fts(int nargs, awk_value_t *result) out: if (pathvector != NULL) - free(pathvector); + gawk_free(pathvector); if (path_array != NULL) (void) release_flattened_array(pathlist.array_cookie, path_array); diff --git a/extension/inplace.c b/extension/inplace.c index 91b1a229..b6228a5b 100644 --- a/extension/inplace.c +++ b/extension/inplace.c @@ -96,7 +96,7 @@ at_exit(void *data, int exit_status) (void) exit_status; /* silence warnings */ if (state.tname) { unlink(state.tname); - free(state.tname); + gawk_free(state.tname); state.tname = NULL; } } @@ -242,7 +242,7 @@ do_inplace_end(int nargs, awk_value_t *result) if (link(filename.str_value.str, bakname) < 0) fatal(ext_id, _("inplace_end: link(`%s', `%s') failed (%s)"), filename.str_value.str, bakname, strerror(errno)); - free(bakname); + gawk_free(bakname); } #ifdef __MINGW32__ @@ -252,7 +252,7 @@ do_inplace_end(int nargs, awk_value_t *result) if (rename(state.tname, filename.str_value.str) < 0) fatal(ext_id, _("inplace_end: rename(`%s', `%s') failed (%s)"), state.tname, filename.str_value.str, strerror(errno)); - free(state.tname); + gawk_free(state.tname); state.tname = NULL; return make_number(0, result); } diff --git a/extension/readdir.c b/extension/readdir.c index 91296801..5b9a7913 100644 --- a/extension/readdir.c +++ b/extension/readdir.c @@ -235,8 +235,8 @@ dir_close(awk_input_buf_t *iobuf) the_dir = (open_directory_t *) iobuf->opaque; closedir(the_dir->dp); - free(the_dir->buf); - free(the_dir); + gawk_free(the_dir->buf); + gawk_free(the_dir); iobuf->fd = -1; } diff --git a/extension/readfile.c b/extension/readfile.c index 06889c3d..71d67ee6 100644 --- a/extension/readfile.c +++ b/extension/readfile.c @@ -107,7 +107,7 @@ do_readfile(int nargs, awk_value_t *result) if ((ret = read(fd, text, sbuf.st_size)) != sbuf.st_size) { (void) close(fd); update_ERRNO_int(errno); - free(text); + gawk_free(text); goto done; } diff --git a/extension/revtwoway.c b/extension/revtwoway.c index 5f490825..675e0efa 100644 --- a/extension/revtwoway.c +++ b/extension/revtwoway.c @@ -119,8 +119,8 @@ close_two_proc_data(two_way_proc_data_t *proc_data) return; } - free(proc_data->data); - free(proc_data); + gawk_free(proc_data->data); + gawk_free(proc_data); } /* diff --git a/extension/rwarray.c b/extension/rwarray.c index 6185000b..940acd62 100644 --- a/extension/rwarray.c +++ b/extension/rwarray.c @@ -408,7 +408,7 @@ read_elem(FILE *fp, awk_element_t *element) buflen = index_len; } else if (buflen < index_len) { /* reallocate buffer */ - char *cp = realloc(buffer, index_len); + char *cp = gawk_realloc(buffer, index_len); if (cp == NULL) return awk_false; @@ -468,11 +468,11 @@ read_value(FILE *fp, awk_value_t *value) len = ntohl(len); value->val_type = AWK_STRING; value->str_value.len = len; - value->str_value.str = malloc(len + 2); + value->str_value.str = gawk_malloc(len + 2); memset(value->str_value.str, '\0', len + 2); if (fread(value->str_value.str, 1, len, fp) != (ssize_t) len) { - free(value->str_value.str); + gawk_free(value->str_value.str); return awk_false; } } diff --git a/extension/testext.c b/extension/testext.c index d11272b8..22f2eb84 100644 --- a/extension/testext.c +++ b/extension/testext.c @@ -237,8 +237,8 @@ try_modify_environ(int nargs, awk_value_t *result) printf("try_modify_environ: set_array_element of ENVIRON passed\n"); } else { printf("try_modify_environ: set_array_element of ENVIRON failed\n"); - free(index.str_value.str); - free(value.str_value.str); + gawk_free(index.str_value.str); + gawk_free(value.str_value.str); } if (! flatten_array(environ_array, & flat_array)) { diff --git a/gawkapi.c b/gawkapi.c index fb456ce7..782cee48 100644 --- a/gawkapi.c +++ b/gawkapi.c @@ -1111,6 +1111,12 @@ gawk_api_t api_impl = { api_clear_array, api_flatten_array, api_release_flattened_array, + + /* Memory allocation */ + malloc, + calloc, + realloc, + free, }; /* init_ext_api --- init the extension API */ diff --git a/gawkapi.h b/gawkapi.h index b26ee24c..e84f2dea 100644 --- a/gawkapi.h +++ b/gawkapi.h @@ -30,7 +30,6 @@ * * FILE - * NULL - - * malloc() - * memset(), memcpy() - * size_t - * struct stat - @@ -62,7 +61,7 @@ * * Additional important information: * - * 1. ALL string values in awk_value_t objects need to come from malloc(). + * 1. ALL string values in awk_value_t objects need to come from api_malloc(). * Gawk will handle releasing the storage if necessary. This is slightly * awkward, in that you can't take an awk_value_t that you got from gawk * and reuse it directly, even for something that is conceptually pass @@ -264,7 +263,7 @@ typedef struct awk_two_way_processor { /* Current version of the API. */ enum { GAWK_API_MAJOR_VERSION = 1, - GAWK_API_MINOR_VERSION = 0 + GAWK_API_MINOR_VERSION = 1 }; /* A number of typedefs related to different types of values. */ @@ -665,6 +664,16 @@ typedef struct gawk_api { awk_bool_t (*api_release_flattened_array)(awk_ext_id_t id, awk_array_t a_cookie, awk_flat_array_t *data); + + /* + * Hooks to provide access to gawk's memory allocation functions. + * This ensures that memory passed between gawk and the extension + * is allocated and released by the same library. + */ + void *(*api_malloc)(size_t size); + void *(*api_calloc)(size_t nmemb, size_t size); + void *(*api_realloc)(void *ptr, size_t size); + void (*api_free)(void *ptr); } gawk_api_t; #ifndef GAWK /* these are not for the gawk code itself! */ @@ -736,6 +745,11 @@ typedef struct gawk_api { #define release_flattened_array(array, data) \ (api->api_release_flattened_array(ext_id, array, data)) +#define gawk_malloc(size) (api->api_malloc(size)) +#define gawk_calloc(nmemb, size) (api->api_calloc(nmemb, size)) +#define gawk_realloc(ptr, size) (api->api_realloc(ptr, size)) +#define gawk_free(ptr) (api->api_free(ptr)) + #define create_value(value, result) \ (api->api_create_value(ext_id, value,result)) @@ -747,13 +761,13 @@ typedef struct gawk_api { #define emalloc(pointer, type, size, message) \ do { \ - if ((pointer = (type) malloc(size)) == 0) \ + if ((pointer = (type) gawk_malloc(size)) == 0) \ fatal(ext_id, "%s: malloc of %d bytes failed\n", message, size); \ } while(0) #define erealloc(pointer, type, size, message) \ do { \ - if ((pointer = (type) realloc(pointer, size)) == 0) \ + if ((pointer = (type) gawk_realloc(pointer, size)) == 0) \ fatal(ext_id, "%s: realloc of %d bytes failed\n", message, size); \ } while(0) -- cgit v1.2.3 From c972e253abc34f8bd02f6ade74e7999a2b6d8a08 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sat, 8 Mar 2014 22:11:34 +0200 Subject: Update doc on API memory allocation, add to NEWS. --- NEWS | 4 + doc/ChangeLog | 5 ++ doc/gawk.info | 274 +++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 31 +++++-- doc/gawktexi.in | 31 +++++-- 5 files changed, 199 insertions(+), 146 deletions(-) diff --git a/NEWS b/NEWS index eb7651b0..50b88a97 100644 --- a/NEWS +++ b/NEWS @@ -36,6 +36,10 @@ is now generated by a DCL script. Also, the extension facility works and several of the extensions can be built and used. Currently, the extension facility only works on Alpha and Itanium. +12. The API now provides functions pointers for malloc(), calloc(), +realloc() and free(), to insure that the same memory allocation +functions are always used. This bumps the minor version by one. + XXX. A number of bugs have been fixed. See the ChangeLog. Changes from 4.0.2 to 4.1.0 diff --git a/doc/ChangeLog b/doc/ChangeLog index 085ba317..99b81306 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2014-03-08 Arnold D. Robbins + + * gawktexi.in: Minor edits to the discussion of the memory allocation + functions. + 2014-03-08 Andrew J. Schorr * gawktexi.in: Document new extension API functions api_malloc, diff --git a/doc/gawk.info b/doc/gawk.info index 799d1c11..9a569829 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -21783,6 +21783,8 @@ operations: * Symbol table access: retrieving a global variable, creating one, or changing one. + * Allocating, reallocating, and releasing memory. + * Creating and releasing cached values; this provides an efficient way to use values for multiple variables and can be a big performance win. @@ -21838,8 +21840,8 @@ operations: * All pointers filled in by `gawk' are 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 the api-provided function pointers `api_malloc()', - `api_calloc()' or `api_realloc()' and is managed by `gawk' from + from calling the API-provided function pointers `api_malloc()', + `api_calloc()' or `api_realloc()', and is managed by `gawk' from then on. * The API defines several simple `struct's that map values as seen @@ -21913,7 +21915,7 @@ that use them. This represents a mutable string. `gawk' owns the memory pointed to if it supplied the value. Otherwise, it takes ownership of the memory pointed to. *Such memory must come from calling the - api-provided function pointers `api_malloc()', `api_calloc()', or + API-provided function pointers `api_malloc()', `api_calloc()', or `api_realloc()'!* As mentioned earlier, strings are maintained using the current @@ -22058,7 +22060,7 @@ File: gawk.info, Node: Memory Allocation Functions, Next: Constructor Function --------------------------------------------------------- The API provides a number of "memory allocation" functions for -allocating memory that can be passed to gawk, as well as a number of +allocating memory that can be passed to `gawk', as well as a number of convenience macros. `void *gawk_malloc(size_t size);' @@ -22078,8 +22080,14 @@ convenience macros. allocated with `gawk_malloc()', `gawk_calloc()' or `gawk_realloc()'. + 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 `gawk' executable.(1) If `gawk' were to +use its version of `free()' when the memory came from an unrelated +version of `malloc()', unexpected behavior would likely result. + Two convenience macros may be used for allocating storage from the -api-provided function pointers `api_malloc()' and `api_realloc()'. If +API-provided function pointers `api_malloc()' and `api_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. @@ -22115,6 +22123,11 @@ not return a value. `api_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 +Unix-like systems as well. +  File: gawk.info, Node: Constructor Functions, Next: Registration Functions, Prev: Memory Allocation Functions, Up: Extension API Description @@ -33226,130 +33239,131 @@ Ref: load-new-function874241 Ref: call-new-function875236 Node: Extension API Description877251 Node: Extension API Functions Introduction878538 -Node: General Data Types883410 -Ref: General Data Types-Footnote-1889105 -Node: Requesting Values889404 -Ref: table-value-types-returned890141 -Node: Memory Allocation Functions891095 -Node: Constructor Functions893456 -Node: Registration Functions895214 -Node: Extension Functions895899 -Node: Exit Callback Functions898201 -Node: Extension Version String899450 -Node: Input Parsers900100 -Node: Output Wrappers909857 -Node: Two-way processors914367 -Node: Printing Messages916575 -Ref: Printing Messages-Footnote-1917652 -Node: Updating `ERRNO'917804 -Node: Accessing Parameters918543 -Node: Symbol Table Access919773 -Node: Symbol table by name920287 -Node: Symbol table by cookie922036 -Ref: Symbol table by cookie-Footnote-1926168 -Node: Cached values926231 -Ref: Cached values-Footnote-1929721 -Node: Array Manipulation929812 -Ref: Array Manipulation-Footnote-1930910 -Node: Array Data Types930949 -Ref: Array Data Types-Footnote-1933652 -Node: Array Functions933744 -Node: Flattening Arrays937580 -Node: Creating Arrays944432 -Node: Extension API Variables949157 -Node: Extension Versioning949793 -Node: Extension API Informational Variables951694 -Node: Extension API Boilerplate952780 -Node: Finding Extensions956584 -Node: Extension Example957144 -Node: Internal File Description957874 -Node: Internal File Ops961965 -Ref: Internal File Ops-Footnote-1973474 -Node: Using Internal File Ops973614 -Ref: Using Internal File Ops-Footnote-1975967 -Node: Extension Samples976233 -Node: Extension Sample File Functions977757 -Node: Extension Sample Fnmatch986242 -Node: Extension Sample Fork988011 -Node: Extension Sample Inplace989224 -Node: Extension Sample Ord991002 -Node: Extension Sample Readdir991838 -Node: Extension Sample Revout993370 -Node: Extension Sample Rev2way993963 -Node: Extension Sample Read write array994653 -Node: Extension Sample Readfile996536 -Node: Extension Sample API Tests997354 -Node: Extension Sample Time997879 -Node: gawkextlib999243 -Node: Language History1002024 -Node: V7/SVR3.11003617 -Node: SVR41005937 -Node: POSIX1007379 -Node: BTL1008765 -Node: POSIX/GNU1009499 -Node: Feature History1015098 -Node: Common Extensions1028074 -Node: Ranges and Locales1029386 -Ref: Ranges and Locales-Footnote-11034003 -Ref: Ranges and Locales-Footnote-21034030 -Ref: Ranges and Locales-Footnote-31034264 -Node: Contributors1034485 -Node: Installation1039630 -Node: Gawk Distribution1040524 -Node: Getting1041008 -Node: Extracting1041834 -Node: Distribution contents1043526 -Node: Unix Installation1049231 -Node: Quick Installation1049848 -Node: Additional Configuration Options1052294 -Node: Configuration Philosophy1054030 -Node: Non-Unix Installation1056384 -Node: PC Installation1056842 -Node: PC Binary Installation1058141 -Node: PC Compiling1059989 -Node: PC Testing1062933 -Node: PC Using1064109 -Node: Cygwin1068277 -Node: MSYS1069086 -Node: VMS Installation1069600 -Node: VMS Compilation1070364 -Ref: VMS Compilation-Footnote-11071616 -Node: VMS Dynamic Extensions1071674 -Node: VMS Installation Details1073047 -Node: VMS Running1075298 -Node: VMS GNV1078132 -Node: VMS Old Gawk1078855 -Node: Bugs1079325 -Node: Other Versions1083243 -Node: Notes1089327 -Node: Compatibility Mode1090127 -Node: Additions1090910 -Node: Accessing The Source1091837 -Node: Adding Code1093277 -Node: New Ports1099322 -Node: Derived Files1103457 -Ref: Derived Files-Footnote-11108778 -Ref: Derived Files-Footnote-21108812 -Ref: Derived Files-Footnote-31109412 -Node: Future Extensions1109510 -Node: Implementation Limitations1110093 -Node: Extension Design1111345 -Node: Old Extension Problems1112499 -Ref: Old Extension Problems-Footnote-11114007 -Node: Extension New Mechanism Goals1114064 -Ref: Extension New Mechanism Goals-Footnote-11117429 -Node: Extension Other Design Decisions1117615 -Node: Extension Future Growth1119721 -Node: Old Extension Mechanism1120557 -Node: Basic Concepts1122297 -Node: Basic High Level1122978 -Ref: figure-general-flow1123249 -Ref: figure-process-flow1123848 -Ref: Basic High Level-Footnote-11127077 -Node: Basic Data Typing1127262 -Node: Glossary1130617 -Node: Copying1156079 -Node: GNU Free Documentation License1193636 -Node: Index1218773 +Node: General Data Types883465 +Ref: General Data Types-Footnote-1889160 +Node: Requesting Values889459 +Ref: table-value-types-returned890196 +Node: Memory Allocation Functions891150 +Ref: Memory Allocation Functions-Footnote-1893896 +Node: Constructor Functions893992 +Node: Registration Functions895750 +Node: Extension Functions896435 +Node: Exit Callback Functions898737 +Node: Extension Version String899986 +Node: Input Parsers900636 +Node: Output Wrappers910393 +Node: Two-way processors914903 +Node: Printing Messages917111 +Ref: Printing Messages-Footnote-1918188 +Node: Updating `ERRNO'918340 +Node: Accessing Parameters919079 +Node: Symbol Table Access920309 +Node: Symbol table by name920823 +Node: Symbol table by cookie922572 +Ref: Symbol table by cookie-Footnote-1926704 +Node: Cached values926767 +Ref: Cached values-Footnote-1930257 +Node: Array Manipulation930348 +Ref: Array Manipulation-Footnote-1931446 +Node: Array Data Types931485 +Ref: Array Data Types-Footnote-1934188 +Node: Array Functions934280 +Node: Flattening Arrays938116 +Node: Creating Arrays944968 +Node: Extension API Variables949693 +Node: Extension Versioning950329 +Node: Extension API Informational Variables952230 +Node: Extension API Boilerplate953316 +Node: Finding Extensions957120 +Node: Extension Example957680 +Node: Internal File Description958410 +Node: Internal File Ops962501 +Ref: Internal File Ops-Footnote-1974010 +Node: Using Internal File Ops974150 +Ref: Using Internal File Ops-Footnote-1976503 +Node: Extension Samples976769 +Node: Extension Sample File Functions978293 +Node: Extension Sample Fnmatch986778 +Node: Extension Sample Fork988547 +Node: Extension Sample Inplace989760 +Node: Extension Sample Ord991538 +Node: Extension Sample Readdir992374 +Node: Extension Sample Revout993906 +Node: Extension Sample Rev2way994499 +Node: Extension Sample Read write array995189 +Node: Extension Sample Readfile997072 +Node: Extension Sample API Tests997890 +Node: Extension Sample Time998415 +Node: gawkextlib999779 +Node: Language History1002560 +Node: V7/SVR3.11004153 +Node: SVR41006473 +Node: POSIX1007915 +Node: BTL1009301 +Node: POSIX/GNU1010035 +Node: Feature History1015634 +Node: Common Extensions1028610 +Node: Ranges and Locales1029922 +Ref: Ranges and Locales-Footnote-11034539 +Ref: Ranges and Locales-Footnote-21034566 +Ref: Ranges and Locales-Footnote-31034800 +Node: Contributors1035021 +Node: Installation1040166 +Node: Gawk Distribution1041060 +Node: Getting1041544 +Node: Extracting1042370 +Node: Distribution contents1044062 +Node: Unix Installation1049767 +Node: Quick Installation1050384 +Node: Additional Configuration Options1052830 +Node: Configuration Philosophy1054566 +Node: Non-Unix Installation1056920 +Node: PC Installation1057378 +Node: PC Binary Installation1058677 +Node: PC Compiling1060525 +Node: PC Testing1063469 +Node: PC Using1064645 +Node: Cygwin1068813 +Node: MSYS1069622 +Node: VMS Installation1070136 +Node: VMS Compilation1070900 +Ref: VMS Compilation-Footnote-11072152 +Node: VMS Dynamic Extensions1072210 +Node: VMS Installation Details1073583 +Node: VMS Running1075834 +Node: VMS GNV1078668 +Node: VMS Old Gawk1079391 +Node: Bugs1079861 +Node: Other Versions1083779 +Node: Notes1089863 +Node: Compatibility Mode1090663 +Node: Additions1091446 +Node: Accessing The Source1092373 +Node: Adding Code1093813 +Node: New Ports1099858 +Node: Derived Files1103993 +Ref: Derived Files-Footnote-11109314 +Ref: Derived Files-Footnote-21109348 +Ref: Derived Files-Footnote-31109948 +Node: Future Extensions1110046 +Node: Implementation Limitations1110629 +Node: Extension Design1111881 +Node: Old Extension Problems1113035 +Ref: Old Extension Problems-Footnote-11114543 +Node: Extension New Mechanism Goals1114600 +Ref: Extension New Mechanism Goals-Footnote-11117965 +Node: Extension Other Design Decisions1118151 +Node: Extension Future Growth1120257 +Node: Old Extension Mechanism1121093 +Node: Basic Concepts1122833 +Node: Basic High Level1123514 +Ref: figure-general-flow1123785 +Ref: figure-process-flow1124384 +Ref: Basic High Level-Footnote-11127613 +Node: Basic Data Typing1127798 +Node: Glossary1131153 +Node: Copying1156615 +Node: GNU Free Documentation License1194172 +Node: Index1219309  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index f0c7d6e6..09beef82 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -29631,6 +29631,9 @@ an array. Symbol table access: retrieving a global variable, creating one, or changing one. +@item +Allocating, reallocating, and releasing memory. + @item Creating and releasing cached values; this provides an efficient way to use values for multiple variables and @@ -29701,8 +29704,9 @@ does not support this keyword, you should either place All pointers filled in by @command{gawk} are 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 the api-provided function pointers @code{api_malloc()}, @code{api_calloc()} or @code{api_realloc()} and is managed -by @command{gawk} from then on. +from the extension @emph{must} come from calling the API-provided function +pointers @code{api_malloc()}, @code{api_calloc()} or @code{api_realloc()}, +and is managed by @command{gawk} from then on. @item The API defines several simple @code{struct}s that map values as seen @@ -29784,7 +29788,8 @@ A simple boolean type. This represents a mutable string. @command{gawk} owns the memory pointed to if it supplied the value. Otherwise, it takes ownership of the memory pointed to. -@strong{Such memory must come from calling the api-provided function pointers @code{api_malloc()}, @code{api_calloc()}, or @code{api_realloc()}!} +@strong{Such memory must come from calling the API-provided function +pointers @code{api_malloc()}, @code{api_calloc()}, or @code{api_realloc()}!} As mentioned earlier, strings are maintained using the current multibyte encoding. @@ -29950,7 +29955,8 @@ value type, as appropriate. This behavior is summarized in @subsection Memory Allocation Functions and Convenience Macros The API provides a number of @dfn{memory allocation} functions for -allocating memory that can be passed to gawk, as well as a number of convenience macros. +allocating memory that can be passed to @command{gawk}, as well as a number of +convenience macros. @table @code @item void *gawk_malloc(size_t size); @@ -29970,10 +29976,19 @@ Call @command{gawk}-provided @code{api_free()} to release storage that was allocated with @code{gawk_malloc()}, @code{gawk_calloc()} or @code{gawk_realloc()}. @end table - -Two convenience macros may be used for allocating storage from the api-provided function pointers @code{api_malloc()} -and @code{api_realloc()}. If the allocation fails, they cause @command{gawk} to -exit with a fatal error message. They should be used as if they were +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 +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 +likely result. + +Two convenience macros may be used for allocating storage +from the API-provided function pointers @code{api_malloc()} and +@code{api_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. @table @code diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 3720a0dc..6d7c5055 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -28772,6 +28772,9 @@ an array. Symbol table access: retrieving a global variable, creating one, or changing one. +@item +Allocating, reallocating, and releasing memory. + @item Creating and releasing cached values; this provides an efficient way to use values for multiple variables and @@ -28842,8 +28845,9 @@ does not support this keyword, you should either place All pointers filled in by @command{gawk} are 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 the api-provided function pointers @code{api_malloc()}, @code{api_calloc()} or @code{api_realloc()} and is managed -by @command{gawk} from then on. +from the extension @emph{must} come from calling the API-provided function +pointers @code{api_malloc()}, @code{api_calloc()} or @code{api_realloc()}, +and is managed by @command{gawk} from then on. @item The API defines several simple @code{struct}s that map values as seen @@ -28925,7 +28929,8 @@ A simple boolean type. This represents a mutable string. @command{gawk} owns the memory pointed to if it supplied the value. Otherwise, it takes ownership of the memory pointed to. -@strong{Such memory must come from calling the api-provided function pointers @code{api_malloc()}, @code{api_calloc()}, or @code{api_realloc()}!} +@strong{Such memory must come from calling the API-provided function +pointers @code{api_malloc()}, @code{api_calloc()}, or @code{api_realloc()}!} As mentioned earlier, strings are maintained using the current multibyte encoding. @@ -29091,7 +29096,8 @@ value type, as appropriate. This behavior is summarized in @subsection Memory Allocation Functions and Convenience Macros The API provides a number of @dfn{memory allocation} functions for -allocating memory that can be passed to gawk, as well as a number of convenience macros. +allocating memory that can be passed to @command{gawk}, as well as a number of +convenience macros. @table @code @item void *gawk_malloc(size_t size); @@ -29111,10 +29117,19 @@ Call @command{gawk}-provided @code{api_free()} to release storage that was allocated with @code{gawk_malloc()}, @code{gawk_calloc()} or @code{gawk_realloc()}. @end table - -Two convenience macros may be used for allocating storage from the api-provided function pointers @code{api_malloc()} -and @code{api_realloc()}. If the allocation fails, they cause @command{gawk} to -exit with a fatal error message. They should be used as if they were +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 +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 +likely result. + +Two convenience macros may be used for allocating storage +from the API-provided function pointers @code{api_malloc()} and +@code{api_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. @table @code -- cgit v1.2.3 From 9234beafca50945843fe41697000d4bcc7d5b0ba Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 10 Mar 2014 22:15:11 +0200 Subject: Sync dfa with grep. --- ChangeLog | 4 ++ dfa.c | 142 +++++++++++++++++++++++++++++++++++++++----------------------- dfa.h | 8 ++++ 3 files changed, 101 insertions(+), 53 deletions(-) diff --git a/ChangeLog b/ChangeLog index 31d1d616..bdd31107 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2014-03-10 Arnold D. Robbins + + * dfa.h, dfa.c: Sync with grep. Yet again. + 2014-03-08 Andrew J. Schorr * gawkapi.c (api_impl): Add memory allocation function pointers. diff --git a/dfa.c b/dfa.c index 3dd3c209..8771bbee 100644 --- a/dfa.c +++ b/dfa.c @@ -45,6 +45,11 @@ #include "dfa.h" +/* Gawk doesn't use Gnulib, so don't assume static_assert is present. */ +#ifndef static_assert +# define static_assert(cond, diagnostic) \ + extern int (*foo (void)) [!!sizeof (struct { int foo: (cond) ? 8 : -1; })] +#endif #define STREQ(a, b) (strcmp (a, b) == 0) @@ -748,34 +753,16 @@ setbit_wc (wint_t wc, charclass c) #endif } -/* Set a bit for B in the charclass C, if B is a valid single byte - character in the current character set. If case is folded, set B's - lower and upper case variants similarly. If MB_CUR_MAX > 1, the - resulting charset is used only as an optimization, and the caller - should set the appropriate field of struct mb_char_classes. */ +/* Set a bit for B and its case variants in the charclass C. + MB_CUR_MAX must be 1. */ static void setbit_case_fold_c (int b, charclass c) { - if (MB_CUR_MAX > 1) - { - wint_t wc = btowc (b); - if (wc == WEOF) - return; - if (case_fold) - { - setbit_wc (towlower (wc), c); - setbit_wc (towupper (wc), c); - } - } - else - { - if (case_fold) - { - setbit (tolower (b), c); - setbit (toupper (b), c); - } - } - setbit (b, c); + int ub = toupper (b); + int i; + for (i = 0; i < NOTCHAR; i++) + if (toupper (i) == ub) + setbit (i, c); } @@ -940,6 +927,50 @@ static unsigned char const *buf_end; /* reference to end in dfaexec. */ # define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif +/* The set of wchar_t values C such that there's a useful locale + somewhere where C != towupper (C) && C != towlower (towupper (C)). + For example, 0x00B5 (U+00B5 MICRO SIGN) is in this table, because + towupper (0x00B5) == 0x039C (U+039C GREEK CAPITAL LETTER MU), and + towlower (0x039C) == 0x03BC (U+03BC GREEK SMALL LETTER MU). */ +static short const lonesome_lower[] = + { + 0x00B5, 0x0131, 0x017F, 0x01C5, 0x01C8, 0x01CB, 0x01F2, 0x0345, + 0x03C2, 0x03D0, 0x03D1, 0x03D5, 0x03D6, 0x03F0, 0x03F1, + + /* U+03F2 GREEK LUNATE SIGMA SYMBOL lacks a specific uppercase + counterpart in locales predating Unicode 4.0.0 (April 2003). */ + 0x03F2, + + 0x03F5, 0x1E9B, 0x1FBE, + }; + +static_assert ((sizeof lonesome_lower / sizeof *lonesome_lower + 2 + == CASE_FOLDED_BUFSIZE), + "CASE_FOLDED_BUFSIZE is wrong"); + +/* Find the characters equal to C after case-folding, other than C + itself, and store them into FOLDED. Return the number of characters + stored. */ +int +case_folded_counterparts (wchar_t c, wchar_t folded[CASE_FOLDED_BUFSIZE]) +{ + int i; + int n = 0; + wint_t uc = towupper (c); + wint_t lc = towlower (uc); + if (uc != c) + folded[n++] = uc; + if (lc != uc && lc != c && towupper (lc) == uc) + folded[n++] = lc; + for (i = 0; i < sizeof lonesome_lower / sizeof *lonesome_lower; i++) + { + wint_t li = lonesome_lower[i]; + if (li != lc && li != uc && li != c && towupper (li) == uc) + folded[n++] = li; + } + return n; +} + typedef int predicate (int); /* The following list maps the names of the Posix named character classes @@ -1100,7 +1131,7 @@ parse_bracket_exp (void) for (c2 = 0; c2 < NOTCHAR; ++c2) if (pred->func (c2)) - setbit_case_fold_c (c2, ccl); + setbit (c2, ccl); } else known_bracket_exp = false; @@ -1167,8 +1198,21 @@ parse_bracket_exp (void) } } else if (using_simple_locale ()) - for (; c <= c2; c++) - setbit_case_fold_c (c, ccl); + { + for (c1 = c; c1 <= c2; c1++) + setbit (c1, ccl); + if (case_fold) + { + int uc = toupper (c); + int uc2 = toupper (c2); + for (c1 = 0; c1 < NOTCHAR; c1++) + { + int uc1 = toupper (c1); + if (uc <= uc1 && uc1 <= uc2) + setbit (c1, ccl); + } + } + } else known_bracket_exp = false; @@ -1187,26 +1231,22 @@ parse_bracket_exp (void) if (MB_CUR_MAX == 1) { - setbit_case_fold_c (c, ccl); + if (case_fold) + setbit_case_fold_c (c, ccl); + else + setbit (c, ccl); continue; } if (case_fold) { - wint_t folded = towlower (wc); - if (folded != wc && !setbit_wc (folded, ccl)) - { - REALLOC_IF_NECESSARY (work_mbc->chars, chars_al, - work_mbc->nchars + 1); - work_mbc->chars[work_mbc->nchars++] = folded; - } - folded = towupper (wc); - if (folded != wc && !setbit_wc (folded, ccl)) - { - REALLOC_IF_NECESSARY (work_mbc->chars, chars_al, - work_mbc->nchars + 1); - work_mbc->chars[work_mbc->nchars++] = folded; - } + wchar_t folded[CASE_FOLDED_BUFSIZE]; + int i, n = case_folded_counterparts (wc, folded); + REALLOC_IF_NECESSARY (work_mbc->chars, chars_al, + work_mbc->nchars + n); + for (i = 0; i < n; i++) + if (!setbit_wc (folded[i], ccl)) + work_mbc->chars[work_mbc->nchars++] = folded[i]; } if (!setbit_wc (wc, ccl)) { @@ -1552,7 +1592,7 @@ lex (void) if (MB_CUR_MAX > 1) return lasttok = WCHAR; - if (case_fold && (tolower (c) != c || toupper (c) != c)) + if (case_fold && isalpha (c)) { zeroset (ccl); setbit_case_fold_c (c, ccl); @@ -1799,18 +1839,14 @@ atom (void) if (MBS_SUPPORT && tok == WCHAR) { addtok_wc (wctok); + if (case_fold) { - wint_t folded = towlower (wctok); - if (folded != wctok) - { - addtok_wc (folded); - addtok (OR); - } - folded = towupper (wctok); - if (folded != wctok) + wchar_t folded[CASE_FOLDED_BUFSIZE]; + int i, n = case_folded_counterparts (wctok, folded); + for (i = 0; i < n; i++) { - addtok_wc (folded); + addtok_wc (folded[i]); addtok (OR); } } diff --git a/dfa.h b/dfa.h index 7e0674fc..24fbcbe7 100644 --- a/dfa.h +++ b/dfa.h @@ -101,3 +101,11 @@ extern void dfawarn (const char *); extern _Noreturn void dfaerror (const char *); extern int using_utf8 (void); + +/* Maximum number of characters that can be the case-folded + counterparts of a single character, not counting the character + itself. This is 1 for towupper, 1 for towlower, and 1 for each + entry in LONESOME_LOWER; see dfa.c. */ +enum { CASE_FOLDED_BUFSIZE = 1 + 1 + 19 }; + +extern int case_folded_counterparts (wchar_t, wchar_t[CASE_FOLDED_BUFSIZE]); -- cgit v1.2.3 From ba969a84610a47183856f99349056e4b49c8eb7f Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 10 Mar 2014 22:15:36 +0200 Subject: Fixes from GNULIB for Mac OS X mixed case matching. --- ChangeLog | 2 ++ regex_internal.c | 15 +++++---------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index bdd31107..d889f9ef 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,8 @@ 2014-03-10 Arnold D. Robbins * dfa.h, dfa.c: Sync with grep. Yet again. + * regex_internal.c (built_wcs_upper_buffer, build_upper_buffer): + Fixes from GNULIB for mixed case matching on Mac OS X. 2014-03-08 Andrew J. Schorr diff --git a/regex_internal.c b/regex_internal.c index 10dd6e00..056cff3d 100644 --- a/regex_internal.c +++ b/regex_internal.c @@ -320,12 +320,11 @@ build_wcs_upper_buffer (re_string_t *pstr) + byte_idx), remain_len, &pstr->cur_state); if (BE (mbclen + 2 > 2, 1)) { - wchar_t wcu = wc; - if (iswlower (wc)) + wchar_t wcu = towupper (wc); + if (wcu != wc) { size_t mbcdlen; - wcu = towupper (wc); mbcdlen = wcrtomb (buf, wcu, &prev_st); if (BE (mbclen == mbcdlen, 1)) memcpy (pstr->mbs + byte_idx, buf, mbclen); @@ -390,12 +389,11 @@ build_wcs_upper_buffer (re_string_t *pstr) mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state); if (BE (mbclen + 2 > 2, 1)) { - wchar_t wcu = wc; - if (iswlower (wc)) + wchar_t wcu = towupper (wc); + if (wcu != wc) { size_t mbcdlen; - wcu = towupper (wc); mbcdlen = wcrtomb ((char *) buf, wcu, &prev_st); if (BE (mbclen == mbcdlen, 1)) memcpy (pstr->mbs + byte_idx, buf, mbclen); @@ -547,10 +545,7 @@ build_upper_buffer (re_string_t *pstr) int ch = pstr->raw_mbs[pstr->raw_mbs_idx + char_idx]; if (BE (pstr->trans != NULL, 0)) ch = pstr->trans[ch]; - if (islower (ch)) - pstr->mbs[char_idx] = toupper (ch); - else - pstr->mbs[char_idx] = ch; + pstr->mbs[char_idx] = toupper (ch); } pstr->valid_len = char_idx; pstr->valid_raw_len = char_idx; -- cgit v1.2.3 From 1e956e9f38bc43bb68bd88a286fa7c6a66af2503 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 10 Mar 2014 22:17:08 +0200 Subject: Improvement in helpers/quoteconvert2.sh. --- helpers/ChangeLog | 5 +++++ helpers/quoteconvert2.sh | 12 ++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/helpers/ChangeLog b/helpers/ChangeLog index 14affebc..e5087f37 100644 --- a/helpers/ChangeLog +++ b/helpers/ChangeLog @@ -1,3 +1,8 @@ +2014-03-10 Arnold D. Robbins + + * quoteconvert2.sh: Use .UTF-8 locales per request from + Michal Jaegermann. + 2014-03-08 Arnold D. Robbins * quoteconvert2.sh, tryfmt.c, scanfmt.c: New files. diff --git a/helpers/quoteconvert2.sh b/helpers/quoteconvert2.sh index e33a4d05..63750a37 100755 --- a/helpers/quoteconvert2.sh +++ b/helpers/quoteconvert2.sh @@ -17,17 +17,17 @@ fi llist=" C en_US -en_US.utf8 +en_US.UTF-8 de_DE -de_DE.utf8 +de_DE.UTF-8 fr_FR -fr_FR.utf8 +fr_FR.UTF-8 pt_PT -pt_PT.utf8 +pt_PT.UTF-8 pt_BR -pt_BR.utf8 +pt_BR.UTF-8 ru_RU -ru_RU.utf8 +ru_RU.UTF-8 pl_PX " -- cgit v1.2.3 From 295bee08215e33ec82e34978cecc593b698c9ad9 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 10 Mar 2014 22:32:14 +0200 Subject: Indexing improvements. --- doc/ChangeLog | 4 ++ doc/gawk.info | 148 +++++++++++++++++++++++++++++++------------------------- doc/gawk.texi | 27 +++++++++-- doc/gawktexi.in | 27 +++++++++-- 4 files changed, 130 insertions(+), 76 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 99b81306..6bb4e9c0 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-03-10 Arnold D. Robbins + + * gawktexi.in: Finish indexing improvements. (For now, anyway.) + 2014-03-08 Arnold D. Robbins * gawktexi.in: Minor edits to the discussion of the memory allocation diff --git a/doc/gawk.info b/doc/gawk.info index 9a569829..a275d9c2 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -25928,6 +25928,9 @@ Info file, in approximate chronological order: * Anders Wallin helped keep the VMS port going for several years. + * Assaf Gordon contributed the code to implement the `--sandbox' + option. + * John Haque made the following contributions: - The modifications to convert `gawk' into a byte-code @@ -31292,12 +31295,12 @@ Index * for statement, looping over arrays: Scanning an Array. (line 20) * fork() extension function: Extension Sample Fork. (line 11) +* format specifiers: Basic Printf. (line 15) * format specifiers, mixing regular with positional specifiers: Printf Ordering. (line 57) * format specifiers, printf statement: Control Letters. (line 6) * format specifiers, strftime() function (gawk): Time Functions. (line 88) -* format strings: Basic Printf. (line 15) * formats, numeric output: OFMT. (line 6) * formatting output: Printf. (line 6) * forward slash (/): Regexp. (line 10) @@ -31522,6 +31525,12 @@ Index * gettext() function (C library): Explaining gettext. (line 62) * gettimeofday() extension function: Extension Sample Time. (line 13) +* git utility <1>: Adding Code. (line 111) +* git utility <2>: Accessing The Source. + (line 10) +* git utility <3>: Other Versions. (line 29) +* git utility: gawkextlib. (line 29) +* git, use of for gawk source code: Derived Files. (line 6) * GMP: Arbitrary Precision Arithmetic. (line 6) * GNITS mailing list: Acknowledgments. (line 52) @@ -31538,6 +31547,7 @@ Index * GNU/Linux <1>: Glossary. (line 624) * 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 314) * GPL (General Public License): Manual History. (line 11) * GPL (General Public License), printing: Options. (line 88) @@ -31555,7 +31565,7 @@ Index (line 66) * Hankerson, Darrel <1>: Contributors. (line 60) * Hankerson, Darrel: Acknowledgments. (line 60) -* Haque, John: Contributors. (line 105) +* Haque, John: Contributors. (line 108) * Hartholz, Elaine: Acknowledgments. (line 38) * Hartholz, Marshall: Acknowledgments. (line 38) * Hasegawa, Isamu: Contributors. (line 94) @@ -31643,9 +31653,9 @@ Index * installing gawk: Installation. (line 6) * INT signal (MS-Windows): Profiling. (line 214) * int() function: Numeric Functions. (line 23) -* integer, arbitrary precision: Arbitrary Precision Integers. - (line 6) * integers: General Arithmetic. (line 6) +* integers, arbitrary precision: Arbitrary Precision Integers. + (line 6) * integers, unsigned: General Arithmetic. (line 15) * interacting with other programs: I/O Functions. (line 72) * internationalization <1>: I18N and L10N. (line 6) @@ -31791,10 +31801,15 @@ Index * login information: Passwd Functions. (line 16) * long options: Command Line. (line 13) * loops: While Statement. (line 6) +* loops, break statement and: Break Statement. (line 6) * loops, continue statements and: For Statement. (line 64) * loops, count for header: Profiling. (line 131) +* loops, do-while: Do Statement. (line 6) * loops, exiting: Break Statement. (line 6) +* loops, for, array scanning: Scanning an Array. (line 6) +* loops, for, iterative: For Statement. (line 6) * loops, See Also while statement: While Statement. (line 6) +* loops, while: While Statement. (line 6) * ls utility: More Complex. (line 15) * lshift() function (gawk): Bitwise Functions. (line 46) * lvalues/rvalues: Assignment Ops. (line 32) @@ -32191,10 +32206,10 @@ Index * programming conventions, private variable names: Library Names. (line 23) * programming language, recipe for: History. (line 6) -* Programming languages, Ada: Glossary. (line 20) +* programming languages, Ada: Glossary. (line 20) * programming languages, data-driven vs. procedural: Getting Started. (line 12) -* Programming languages, Java: Glossary. (line 388) +* programming languages, Java: Glossary. (line 388) * programming, basic steps: Basic High Level. (line 20) * programming, concepts: Basic Concepts. (line 6) * pwcat program: Passwd Functions. (line 23) @@ -32331,7 +32346,7 @@ Index * RLENGTH variable, match() function and: String Functions. (line 220) * Robbins, Arnold <1>: Future Extensions. (line 6) * Robbins, Arnold <2>: Bugs. (line 32) -* Robbins, Arnold <3>: Contributors. (line 132) +* Robbins, Arnold <3>: Contributors. (line 135) * Robbins, Arnold <4>: General Data Types. (line 6) * Robbins, Arnold <5>: Alarm Program. (line 6) * Robbins, Arnold <6>: Passwd Functions. (line 90) @@ -32372,7 +32387,7 @@ Index (line 68) * sandbox mode: Options. (line 279) * scalar values: Basic Data Typing. (line 13) -* Schorr, Andrew <1>: Contributors. (line 128) +* Schorr, Andrew <1>: Contributors. (line 131) * Schorr, Andrew: Acknowledgments. (line 60) * Schreiber, Bert: Acknowledgments. (line 38) * Schreiber, Rita: Acknowledgments. (line 38) @@ -32507,6 +32522,7 @@ Index * source code, mawk: Other Versions. (line 44) * source code, mixing: Options. (line 117) * source code, pawk: Other Versions. (line 78) +* source code, pawk (Python version): Other Versions. (line 124) * source code, QSE Awk: Other Versions. (line 130) * source code, QuikTrim Awk: Other Versions. (line 134) * source code, Solaris awk: Other Versions. (line 96) @@ -32807,7 +32823,7 @@ Index * xgettext utility: String Extraction. (line 13) * XOR bitwise operation: Bitwise Functions. (line 6) * xor() function (gawk): Bitwise Functions. (line 55) -* Yawitz, Efraim: Contributors. (line 126) +* Yawitz, Efraim: Contributors. (line 129) * Zaretskii, Eli <1>: Bugs. (line 70) * Zaretskii, Eli <2>: Contributors. (line 55) * Zaretskii, Eli: Acknowledgments. (line 60) @@ -33308,62 +33324,62 @@ Ref: Ranges and Locales-Footnote-11034539 Ref: Ranges and Locales-Footnote-21034566 Ref: Ranges and Locales-Footnote-31034800 Node: Contributors1035021 -Node: Installation1040166 -Node: Gawk Distribution1041060 -Node: Getting1041544 -Node: Extracting1042370 -Node: Distribution contents1044062 -Node: Unix Installation1049767 -Node: Quick Installation1050384 -Node: Additional Configuration Options1052830 -Node: Configuration Philosophy1054566 -Node: Non-Unix Installation1056920 -Node: PC Installation1057378 -Node: PC Binary Installation1058677 -Node: PC Compiling1060525 -Node: PC Testing1063469 -Node: PC Using1064645 -Node: Cygwin1068813 -Node: MSYS1069622 -Node: VMS Installation1070136 -Node: VMS Compilation1070900 -Ref: VMS Compilation-Footnote-11072152 -Node: VMS Dynamic Extensions1072210 -Node: VMS Installation Details1073583 -Node: VMS Running1075834 -Node: VMS GNV1078668 -Node: VMS Old Gawk1079391 -Node: Bugs1079861 -Node: Other Versions1083779 -Node: Notes1089863 -Node: Compatibility Mode1090663 -Node: Additions1091446 -Node: Accessing The Source1092373 -Node: Adding Code1093813 -Node: New Ports1099858 -Node: Derived Files1103993 -Ref: Derived Files-Footnote-11109314 -Ref: Derived Files-Footnote-21109348 -Ref: Derived Files-Footnote-31109948 -Node: Future Extensions1110046 -Node: Implementation Limitations1110629 -Node: Extension Design1111881 -Node: Old Extension Problems1113035 -Ref: Old Extension Problems-Footnote-11114543 -Node: Extension New Mechanism Goals1114600 -Ref: Extension New Mechanism Goals-Footnote-11117965 -Node: Extension Other Design Decisions1118151 -Node: Extension Future Growth1120257 -Node: Old Extension Mechanism1121093 -Node: Basic Concepts1122833 -Node: Basic High Level1123514 -Ref: figure-general-flow1123785 -Ref: figure-process-flow1124384 -Ref: Basic High Level-Footnote-11127613 -Node: Basic Data Typing1127798 -Node: Glossary1131153 -Node: Copying1156615 -Node: GNU Free Documentation License1194172 -Node: Index1219309 +Node: Installation1040248 +Node: Gawk Distribution1041142 +Node: Getting1041626 +Node: Extracting1042452 +Node: Distribution contents1044144 +Node: Unix Installation1049849 +Node: Quick Installation1050466 +Node: Additional Configuration Options1052912 +Node: Configuration Philosophy1054648 +Node: Non-Unix Installation1057002 +Node: PC Installation1057460 +Node: PC Binary Installation1058759 +Node: PC Compiling1060607 +Node: PC Testing1063551 +Node: PC Using1064727 +Node: Cygwin1068895 +Node: MSYS1069704 +Node: VMS Installation1070218 +Node: VMS Compilation1070982 +Ref: VMS Compilation-Footnote-11072234 +Node: VMS Dynamic Extensions1072292 +Node: VMS Installation Details1073665 +Node: VMS Running1075916 +Node: VMS GNV1078750 +Node: VMS Old Gawk1079473 +Node: Bugs1079943 +Node: Other Versions1083861 +Node: Notes1089945 +Node: Compatibility Mode1090745 +Node: Additions1091528 +Node: Accessing The Source1092455 +Node: Adding Code1093895 +Node: New Ports1099940 +Node: Derived Files1104075 +Ref: Derived Files-Footnote-11109396 +Ref: Derived Files-Footnote-21109430 +Ref: Derived Files-Footnote-31110030 +Node: Future Extensions1110128 +Node: Implementation Limitations1110711 +Node: Extension Design1111963 +Node: Old Extension Problems1113117 +Ref: Old Extension Problems-Footnote-11114625 +Node: Extension New Mechanism Goals1114682 +Ref: Extension New Mechanism Goals-Footnote-11118047 +Node: Extension Other Design Decisions1118233 +Node: Extension Future Growth1120339 +Node: Old Extension Mechanism1121175 +Node: Basic Concepts1122915 +Node: Basic High Level1123596 +Ref: figure-general-flow1123867 +Ref: figure-process-flow1124466 +Ref: Basic High Level-Footnote-11127695 +Node: Basic Data Typing1127880 +Node: Glossary1131235 +Node: Copying1156697 +Node: GNU Free Documentation License1194254 +Node: Index1219391  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 09beef82..d6844144 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -8359,7 +8359,7 @@ parentheses are necessary if any of the item expressions use the @samp{>} relational operator; otherwise, it can be confused with an output redirection (@pxref{Redirection}). -@cindex format strings +@cindex format specifiers The difference between @code{printf} and @code{print} is the @var{format} argument. This is an expression whose value is taken as a string; it specifies how to output each of the other arguments. It is called the @@ -12706,6 +12706,7 @@ the first thing on its line. @subsection The @code{while} Statement @cindex @code{while} statement @cindex loops +@cindex loops, @code{while} @cindex loops, See Also @code{while} statement In programming, a @dfn{loop} is a part of a program that can @@ -12766,6 +12767,7 @@ program is harder to read without it. @node Do Statement @subsection The @code{do}-@code{while} Statement @cindex @code{do}-@code{while} statement +@cindex loops, @code{do}-@code{while} The @code{do} loop is a variation of the @code{while} looping statement. The @code{do} loop executes the @var{body} once and then repeats the @@ -12811,6 +12813,7 @@ occasionally is there a real use for a @code{do} statement. @node For Statement @subsection The @code{for} Statement @cindex @code{for} statement +@cindex loops, @code{for}, iterative The @code{for} statement makes it more convenient to count iterations of a loop. The general form of the @code{for} statement looks like this: @@ -12983,6 +12986,7 @@ it is not available. @subsection The @code{break} Statement @cindex @code{break} statement @cindex loops, exiting +@cindex loops, @code{break} statement and The @code{break} statement jumps out of the innermost @code{for}, @code{while}, or @code{do} loop that encloses it. The following example @@ -14620,6 +14624,7 @@ END @{ @subsection Scanning All Elements of an Array @cindex elements in arrays, scanning @cindex arrays, scanning +@cindex loops, @code{for}, array scanning 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 @@ -29310,7 +29315,7 @@ the problem at hand is often the correct approach in such situations. @node Arbitrary Precision Integers @section Arbitrary Precision Integer Arithmetic with @command{gawk} -@cindex integer, arbitrary precision +@cindex integers, arbitrary precision If one of the options @option{--bignum} or @option{-M} is specified, @command{gawk} performs all @@ -33060,6 +33065,7 @@ The @code{time} extension described earlier (@pxref{Extension Sample Time}) was originally from this project but has been moved in to the main @command{gawk} distribution. +@cindex @command{git} utility You can check out the code for the @code{gawkextlib} project using the @uref{http://git-scm.com, GIT} distributed source code control system. The command is as follows: @@ -34689,6 +34695,11 @@ environments. @cindex Wallin, Anders Anders Wallin helped keep the VMS port going for several years. +@item +@cindex Gordon, Assaf +Assaf Gordon contributed the code to implement the +@option{--sandbox} option. + @item @cindex Haque, John John Haque made the following contributions: @@ -36100,6 +36111,7 @@ It is available in several archive formats: @uref{http://www.cs.princeton.edu/~bwk/btl.mirror/awk.zip} @end table +@cindex @command{git} utility You can also retrieve it from Git Hub: @example @@ -36228,6 +36240,7 @@ This is an embeddable @command{awk} interpreter derived from @uref{http://repo.hu/projects/libmawk/}. @item @code{pawk} +@cindex source code, @command{pawk} (Python version) @cindex @code{pawk}, @command{awk}-like facilities for Python This is a Python module that claims to bring @command{awk}-like features to Python. See @uref{https://github.com/alecthomas/pawk} @@ -36333,6 +36346,7 @@ As @command{gawk} is Free Software, the source code is always available. @ref{Gawk Distribution}, describes how to get and build the formal, released versions of @command{gawk}. +@cindex @command{git} utility 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 @@ -36508,6 +36522,7 @@ If possible, please update the @command{man} page as well. You will also have to sign paperwork for your documentation changes. +@cindex @command{git} utility @item Submit changes as unified diffs. Use @samp{diff -u -r -N} to compare @@ -36641,6 +36656,8 @@ coding style and brace layout that suits your taste. @node Derived Files @appendixsubsec Why Generated Files Are Kept In @command{git} +@c STARTOFRANGE gawkgit +@cindex @command{git}, use of for @command{gawk} source code @c From emails written March 22, 2012, to the gawk developers list. If you look at the @command{gawk} source in the @command{git} @@ -36820,7 +36837,7 @@ 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 @@ -37399,7 +37416,7 @@ better written in another language. You can get it from @uref{http://awk.info/?awk100/aaa}. @cindex Ada programming language -@cindex Programming languages, Ada +@cindex programming languages, Ada @item Ada A programming language originally defined by the U.S.@: Department of Defense for embedded programming. It was designed to enforce good @@ -37882,7 +37899,7 @@ information about the name of the organization and its language-independent three-letter acronym. @cindex Java programming language -@cindex Programming languages, Java +@cindex programming languages, Java @item Java A modern programming language originally developed by Sun Microsystems (now Oracle) supporting Object-Oriented programming. Although usually diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 6d7c5055..1fe75843 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -7977,7 +7977,7 @@ parentheses are necessary if any of the item expressions use the @samp{>} relational operator; otherwise, it can be confused with an output redirection (@pxref{Redirection}). -@cindex format strings +@cindex format specifiers The difference between @code{printf} and @code{print} is the @var{format} argument. This is an expression whose value is taken as a string; it specifies how to output each of the other arguments. It is called the @@ -12083,6 +12083,7 @@ the first thing on its line. @subsection The @code{while} Statement @cindex @code{while} statement @cindex loops +@cindex loops, @code{while} @cindex loops, See Also @code{while} statement In programming, a @dfn{loop} is a part of a program that can @@ -12143,6 +12144,7 @@ program is harder to read without it. @node Do Statement @subsection The @code{do}-@code{while} Statement @cindex @code{do}-@code{while} statement +@cindex loops, @code{do}-@code{while} The @code{do} loop is a variation of the @code{while} looping statement. The @code{do} loop executes the @var{body} once and then repeats the @@ -12188,6 +12190,7 @@ occasionally is there a real use for a @code{do} statement. @node For Statement @subsection The @code{for} Statement @cindex @code{for} statement +@cindex loops, @code{for}, iterative The @code{for} statement makes it more convenient to count iterations of a loop. The general form of the @code{for} statement looks like this: @@ -12360,6 +12363,7 @@ it is not available. @subsection The @code{break} Statement @cindex @code{break} statement @cindex loops, exiting +@cindex loops, @code{break} statement and The @code{break} statement jumps out of the innermost @code{for}, @code{while}, or @code{do} loop that encloses it. The following example @@ -13951,6 +13955,7 @@ END @{ @subsection Scanning All Elements of an Array @cindex elements in arrays, scanning @cindex arrays, scanning +@cindex loops, @code{for}, array scanning 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 @@ -28451,7 +28456,7 @@ the problem at hand is often the correct approach in such situations. @node Arbitrary Precision Integers @section Arbitrary Precision Integer Arithmetic with @command{gawk} -@cindex integer, arbitrary precision +@cindex integers, arbitrary precision If one of the options @option{--bignum} or @option{-M} is specified, @command{gawk} performs all @@ -32201,6 +32206,7 @@ The @code{time} extension described earlier (@pxref{Extension Sample Time}) was originally from this project but has been moved in to the main @command{gawk} distribution. +@cindex @command{git} utility You can check out the code for the @code{gawkextlib} project using the @uref{http://git-scm.com, GIT} distributed source code control system. The command is as follows: @@ -33830,6 +33836,11 @@ environments. @cindex Wallin, Anders Anders Wallin helped keep the VMS port going for several years. +@item +@cindex Gordon, Assaf +Assaf Gordon contributed the code to implement the +@option{--sandbox} option. + @item @cindex Haque, John John Haque made the following contributions: @@ -35241,6 +35252,7 @@ It is available in several archive formats: @uref{http://www.cs.princeton.edu/~bwk/btl.mirror/awk.zip} @end table +@cindex @command{git} utility You can also retrieve it from Git Hub: @example @@ -35369,6 +35381,7 @@ This is an embeddable @command{awk} interpreter derived from @uref{http://repo.hu/projects/libmawk/}. @item @code{pawk} +@cindex source code, @command{pawk} (Python version) @cindex @code{pawk}, @command{awk}-like facilities for Python This is a Python module that claims to bring @command{awk}-like features to Python. See @uref{https://github.com/alecthomas/pawk} @@ -35474,6 +35487,7 @@ As @command{gawk} is Free Software, the source code is always available. @ref{Gawk Distribution}, describes how to get and build the formal, released versions of @command{gawk}. +@cindex @command{git} utility 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 @@ -35649,6 +35663,7 @@ If possible, please update the @command{man} page as well. You will also have to sign paperwork for your documentation changes. +@cindex @command{git} utility @item Submit changes as unified diffs. Use @samp{diff -u -r -N} to compare @@ -35782,6 +35797,8 @@ coding style and brace layout that suits your taste. @node Derived Files @appendixsubsec Why Generated Files Are Kept In @command{git} +@c STARTOFRANGE gawkgit +@cindex @command{git}, use of for @command{gawk} source code @c From emails written March 22, 2012, to the gawk developers list. If you look at the @command{gawk} source in the @command{git} @@ -35961,7 +35978,7 @@ 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 @@ -36540,7 +36557,7 @@ better written in another language. You can get it from @uref{http://awk.info/?awk100/aaa}. @cindex Ada programming language -@cindex Programming languages, Ada +@cindex programming languages, Ada @item Ada A programming language originally defined by the U.S.@: Department of Defense for embedded programming. It was designed to enforce good @@ -37023,7 +37040,7 @@ information about the name of the organization and its language-independent three-letter acronym. @cindex Java programming language -@cindex Programming languages, Java +@cindex programming languages, Java @item Java A modern programming language originally developed by Sun Microsystems (now Oracle) supporting Object-Oriented programming. Although usually -- cgit v1.2.3 From 379f62687358dfda19694dea92389e092372fc2c Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 10 Mar 2014 22:35:01 +0200 Subject: Fix thousands separator problems and update doc. --- NEWS | 5 +++++ builtin.c | 30 +++++++++++++++++++++++------- doc/ChangeLog | 5 +++++ doc/awkcard.in | 5 +++-- doc/gawk.1 | 11 ++++++++++- 5 files changed, 46 insertions(+), 10 deletions(-) diff --git a/NEWS b/NEWS index 50b88a97..063386bd 100644 --- a/NEWS +++ b/NEWS @@ -40,6 +40,11 @@ extension facility only works on Alpha and Itanium. realloc() and free(), to insure that the same memory allocation functions are always used. This bumps the minor version by one. +13. The printf quote flag now works correctly in locales with a different +decimal point character but without a thousands separator character. +If the thousands separator is a string, it will be correctly added +to decimal numbers. + XXX. A number of bugs have been fixed. See the ChangeLog. Changes from 4.0.2 to 4.1.0 diff --git a/builtin.c b/builtin.c index ffc303ab..7a6bfc62 100644 --- a/builtin.c +++ b/builtin.c @@ -994,9 +994,7 @@ check_pos: goto check_pos; case '\'': #if defined(HAVE_LOCALE_H) - /* allow quote_flag if there is a thousands separator. */ - if (loc.thousands_sep[0] != '\0') - quote_flag = true; + quote_flag = true; goto check_pos; #else goto retry; @@ -1196,6 +1194,9 @@ out0: } if (i < 1) goto out_of_range; +#if defined(HAVE_LOCALE_H) + quote_flag = (quote_flag && loc.thousands_sep[0] != 0); +#endif chp = &cpbufs[1].buf[i-1]; ii = jj = 0; do { @@ -1203,8 +1204,14 @@ out0: chp--; i--; #if defined(HAVE_LOCALE_H) if (quote_flag && loc.grouping[ii] && ++jj == loc.grouping[ii]) { - if (i) /* only add if more digits coming */ - PREPEND(loc.thousands_sep[0]); /* XXX - assumption it's one char */ + if (i) { /* only add if more digits coming */ + int k; + const char *ts = loc.thousands_sep; + + for (k = strlen(ts) - 1; k >= 0; k--) { + PREPEND(ts[k]); + } + } if (loc.grouping[ii+1] == 0) jj = 0; /* keep using current val in loc.grouping[ii] */ else if (loc.grouping[ii+1] == CHAR_MAX) @@ -1359,6 +1366,9 @@ mpf1: } #ifdef HAVE_MPFR int0: +#endif +#if defined(HAVE_LOCALE_H) + quote_flag = (quote_flag && loc.thousands_sep[0] != 0); #endif /* * When to fill with zeroes is of course not simple. @@ -1378,8 +1388,14 @@ mpf1: uval /= base; #if defined(HAVE_LOCALE_H) if (base == 10 && quote_flag && loc.grouping[ii] && ++jj == loc.grouping[ii]) { - if (uval) /* only add if more digits coming */ - PREPEND(loc.thousands_sep[0]); /* XXX --- assumption it's one char */ + if (uval) { /* only add if more digits coming */ + int k; + const char *ts = loc.thousands_sep; + + for (k = strlen(ts) - 1; k >= 0; k--) { + PREPEND(ts[k]); + } + } if (loc.grouping[ii+1] == 0) jj = 0; /* keep using current val in loc.grouping[ii] */ else if (loc.grouping[ii+1] == CHAR_MAX) diff --git a/doc/ChangeLog b/doc/ChangeLog index 6bb4e9c0..15e6d958 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -2,6 +2,11 @@ * gawktexi.in: Finish indexing improvements. (For now, anyway.) + Unrelated: + + * gawk.1: Document the quote flag! (Better late than never.) + * awkcard.in: Update documentation of quote flag. + 2014-03-08 Arnold D. Robbins * gawktexi.in: Minor edits to the discussion of the memory allocation diff --git a/doc/awkcard.in b/doc/awkcard.in index 610032b7..5f3a9735 100644 --- a/doc/awkcard.in +++ b/doc/awkcard.in @@ -1,7 +1,7 @@ .\" AWK Reference Card --- Arnold Robbins, arnold@skeeve.com .\" .\" Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, -.\" 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013 +.\" 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013, 2014 .\" Free Software Foundation, Inc. .\" .\" Permission is granted to make and distribute verbatim copies of @@ -1493,7 +1493,8 @@ Only has an effect when the field width is wider than the value to be printed. T} \*(CB\*(FC'\*(FR T{ -Use the locale's thousands separator for \*(FC%d\fP, \*(FC%i\fP, and \*(FC%u\fP.\*(CD +Use the locale's thousands separator and decimal +point characters.\*(CD T} \*(FIwidth\fP T{ Pad the field to this width. The field is normally diff --git a/doc/gawk.1 b/doc/gawk.1 index f88c707c..97ad9776 100644 --- a/doc/gawk.1 +++ b/doc/gawk.1 @@ -13,7 +13,7 @@ . if \w'\(rq' .ds rq "\(rq . \} .\} -.TH GAWK 1 "Jan 28 2014" "Free Software Foundation" "Utility Commands" +.TH GAWK 1 "Mar 08 2014" "Free Software Foundation" "Utility Commands" .SH NAME gawk \- pattern scanning and processing language .SH SYNOPSIS @@ -2448,6 +2448,15 @@ This applies only to the numeric output formats. This flag only has an effect when the field width is wider than the value to be printed. .TP +.B ' +A single quote character instructs +.I gawk +to insert the locale's thousands-separator character +into decimal numbers, and to also use the locale's +decimal point character with floating point formats. +This requires correct locale support in the C library +and in the definition of the current locale. +.TP .I width The field should be padded to this width. The field is normally padded with spaces. With the -- cgit v1.2.3 From 0102531b85a7cb85320c0b499c52d44f6822d1f0 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 10 Mar 2014 22:36:45 +0200 Subject: Update ChangeLog for previous commit. Oops. --- ChangeLog | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ChangeLog b/ChangeLog index d889f9ef..0797b374 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,14 @@ * regex_internal.c (built_wcs_upper_buffer, build_upper_buffer): Fixes from GNULIB for mixed case matching on Mac OS X. + Unrelated: + + * builtin.c (format_tree): Smarten handling of %' flag. Always + pass it in for floating point formats. Then only add the + thousands_sep if there is one. Also, allow for thousands_sep + to be a string, not just one character. Thanks to Michal Jaegermann + for the report. + 2014-03-08 Andrew J. Schorr * gawkapi.c (api_impl): Add memory allocation function pointers. -- cgit v1.2.3 From ac5d2bf77c871ab5c9da4ff34a11416a61cee826 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 11 Mar 2014 22:29:38 +0200 Subject: Build fix for BSD systems. --- configure | 4 ++++ m4/ChangeLog | 6 ++++++ m4/readline.m4 | 4 ++++ 3 files changed, 14 insertions(+) diff --git a/configure b/configure index 2b4a193a..5f55dc2b 100755 --- a/configure +++ b/configure @@ -10467,6 +10467,10 @@ $as_echo "$_found_readline" >&6; } LIBS=$_readline_save_libs if test $_found_readline = yes ; then + case $host_os in + *bsd* ) _combo="$_combo -ltermcap" + ;; + esac $as_echo "#define HAVE_LIBREADLINE 1" >>confdefs.h diff --git a/m4/ChangeLog b/m4/ChangeLog index 9e2c279b..cbb20483 100644 --- a/m4/ChangeLog +++ b/m4/ChangeLog @@ -1,3 +1,9 @@ +2014-03-11 Arnold D. Robbins + + * readline.m4: Add manual check for *bsd* OS and add -ltermcap + if so. Hack, slash. Can you say "quick and dirty" boys and girls? + I knew you could. + 2013-10-16 Arnold D. Robbins * readline.m4: Add check for NULL return from readline() in diff --git a/m4/readline.m4 b/m4/readline.m4 index af2745db..03ee5aef 100644 --- a/m4/readline.m4 +++ b/m4/readline.m4 @@ -70,6 +70,10 @@ dnl action if cross compiling: LIBS=$_readline_save_libs if test $_found_readline = yes ; then + case $host_os in + *bsd* ) _combo="$_combo -ltermcap" + ;; + esac AC_DEFINE(HAVE_LIBREADLINE,1, [Define to 1 if you have a fully functional readline library.]) AC_SUBST(LIBREADLINE,$_combo) -- cgit v1.2.3 From 1d88044bc1478bdb8195acda33ad79baa4a0621f Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 17 Mar 2014 20:14:51 +0200 Subject: Deal with Mac OS X .dSYM directories. --- .gitignore | 2 ++ ChangeLog | 5 +++++ awklib/ChangeLog | 5 +++++ awklib/Makefile.am | 1 + awklib/Makefile.in | 1 + 5 files changed, 14 insertions(+) diff --git a/.gitignore b/.gitignore index 71be0874..899a16c0 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,8 @@ # Directories autom4te.cache .deps +grcat.dSYM +pwcat.dSYM # Single files. Makefile diff --git a/ChangeLog b/ChangeLog index 0797b374..1e47e10b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-03-17 Arnold D. Robbins + + * .gitignore: Add .dSYM directories for Mac OS X. + Thanks to Hermann Peifer for the suggestion. + 2014-03-10 Arnold D. Robbins * dfa.h, dfa.c: Sync with grep. Yet again. diff --git a/awklib/ChangeLog b/awklib/ChangeLog index e47d37b2..e0baf3cb 100644 --- a/awklib/ChangeLog +++ b/awklib/ChangeLog @@ -1,3 +1,8 @@ +2014-03-17 Arnold D. Robbins + + * Makefile.am (clean-local): Clean up .dSYM directories for Mac OS X. + Thanks to Hermann Piefer for the suggestion. + 2013-05-09 Arnold D. Robbins * 4.1.0: Release tar ball made. diff --git a/awklib/Makefile.am b/awklib/Makefile.am index b10fa644..6ffbea81 100644 --- a/awklib/Makefile.am +++ b/awklib/Makefile.am @@ -62,6 +62,7 @@ uninstall-local: clean-local: rm -f $(AUXAWK) igawk *.exe rm -fr eg.old + rm -fr grcat.dSYM pwcat.dSYM $(srcdir)/stamp-eg: $(srcdir)/../doc/gawk.texi $(srcdir)/../doc/gawkinet.texi cd $(srcdir) && \ diff --git a/awklib/Makefile.in b/awklib/Makefile.in index 15e6c24d..d32ae04a 100644 --- a/awklib/Makefile.in +++ b/awklib/Makefile.in @@ -715,6 +715,7 @@ uninstall-local: clean-local: rm -f $(AUXAWK) igawk *.exe rm -fr eg.old + rm -fr grcat.dSYM pwcat.dSYM $(srcdir)/stamp-eg: $(srcdir)/../doc/gawk.texi $(srcdir)/../doc/gawkinet.texi cd $(srcdir) && \ -- cgit v1.2.3 From 0137c489a6e6042d1df9e3818878cfc11ad6cd8f Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 17 Mar 2014 21:32:08 +0200 Subject: Minor edits in NEWS. --- NEWS | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/NEWS b/NEWS index 063386bd..c6a4f216 100644 --- a/NEWS +++ b/NEWS @@ -8,7 +8,7 @@ Changes from 4.1.0 to 4.1.1 --------------------------- 1. The "stat" extension now includes a "devbsize" element which indicates - the units for the "nblocks" element + the units for the "nblocks" element. 2. The extension facility now works on MinGW. Many of the extensions can be built and used directly. @@ -29,23 +29,23 @@ Changes from 4.1.0 to 4.1.1 libtool 2.4.2.418. 10. The configure script now accepts a --disable-extensions option, -which disables checking for and building the extensions. + which disables checking for and building the extensions. 11. The VMS port has been considerably improved. In particular config.h -is now generated by a DCL script. Also, the extension facility works -and several of the extensions can be built and used. Currently, the -extension facility only works on Alpha and Itanium. + is now generated by a DCL script. Also, the extension facility works + and several of the extensions can be built and used. Currently, the + extension facility only works on Alpha and Itanium. 12. The API now provides functions pointers for malloc(), calloc(), -realloc() and free(), to insure that the same memory allocation -functions are always used. This bumps the minor version by one. + realloc() and free(), to insure that the same memory allocation + functions are always used. This bumps the minor version by one. 13. The printf quote flag now works correctly in locales with a different -decimal point character but without a thousands separator character. -If the thousands separator is a string, it will be correctly added -to decimal numbers. + decimal point character but without a thousands separator character. + If the thousands separator is a string, it will be correctly added + to decimal numbers. -XXX. A number of bugs have been fixed. See the ChangeLog. +14. A number of bugs have been fixed. See the ChangeLog. Changes from 4.0.2 to 4.1.0 --------------------------- -- cgit v1.2.3 From d69f7993a398d89e00d4cae154f07790f1419a09 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 17 Mar 2014 21:39:27 +0200 Subject: Bump version for test release. --- configure | 20 ++++++++++---------- configure.ac | 2 +- pc/config.h | 6 +++--- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/configure b/configure index 5f55dc2b..aa682f0b 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for GNU Awk 4.1.0e. +# Generated by GNU Autoconf 2.69 for GNU Awk 4.1.0f. # # Report bugs to . # @@ -580,8 +580,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GNU Awk' PACKAGE_TARNAME='gawk' -PACKAGE_VERSION='4.1.0e' -PACKAGE_STRING='GNU Awk 4.1.0e' +PACKAGE_VERSION='4.1.0f' +PACKAGE_STRING='GNU Awk 4.1.0f' PACKAGE_BUGREPORT='bug-gawk@gnu.org' PACKAGE_URL='http://www.gnu.org/software/gawk/' @@ -1324,7 +1324,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures GNU Awk 4.1.0e to adapt to many kinds of systems. +\`configure' configures GNU Awk 4.1.0f to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1394,7 +1394,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GNU Awk 4.1.0e:";; + short | recursive ) echo "Configuration of GNU Awk 4.1.0f:";; esac cat <<\_ACEOF @@ -1512,7 +1512,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -GNU Awk configure 4.1.0e +GNU Awk configure 4.1.0f generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2221,7 +2221,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by GNU Awk $as_me 4.1.0e, which was +It was created by GNU Awk $as_me 4.1.0f, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3104,7 +3104,7 @@ fi # Define the identity of the package. PACKAGE='gawk' - VERSION='4.1.0e' + VERSION='4.1.0f' cat >>confdefs.h <<_ACEOF @@ -11541,7 +11541,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by GNU Awk $as_me 4.1.0e, which was +This file was extended by GNU Awk $as_me 4.1.0f, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -11609,7 +11609,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -GNU Awk config.status 4.1.0e +GNU Awk config.status 4.1.0f configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 98b62168..903385a6 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ dnl dnl Process this file with autoconf to produce a configure script. -AC_INIT([GNU Awk], 4.1.0e, bug-gawk@gnu.org, gawk) +AC_INIT([GNU Awk], 4.1.0f, bug-gawk@gnu.org, gawk) # This is a hack. Different versions of install on different systems # are just too different. Chuck it and use install-sh. diff --git a/pc/config.h b/pc/config.h index 1d9be09b..b35dbc8f 100644 --- a/pc/config.h +++ b/pc/config.h @@ -423,7 +423,7 @@ #define PACKAGE_NAME "GNU Awk" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "GNU Awk 4.1.0e" +#define PACKAGE_STRING "GNU Awk 4.1.0f" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "gawk" @@ -432,7 +432,7 @@ #define PACKAGE_URL "http://www.gnu.org/software/gawk/" /* Define to the version of this package. */ -#define PACKAGE_VERSION "4.1.0e" +#define PACKAGE_VERSION "4.1.0f" /* Define to 1 if *printf supports %F format */ #undef PRINTF_HAS_F_FORMAT @@ -494,7 +494,7 @@ /* Version number of package */ -#define VERSION "4.1.0e" +#define VERSION "4.1.0f" /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE -- cgit v1.2.3 From 371eaf153f33f9db15d4b00aa4d873e39afee4c1 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 21 Mar 2014 13:41:21 +0200 Subject: Fix dfa for systems without locales. --- ChangeLog | 5 +++++ dfa.c | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/ChangeLog b/ChangeLog index 1e47e10b..310c7988 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-03-21 Arnold D. Robbins + + * dfa.c (using_simple_locale): Add ifdefs in case there is no + locale support at all. Thanks to Scott Deifik for the report. + 2014-03-17 Arnold D. Robbins * .gitignore: Add .dSYM directories for Mac OS X. diff --git a/dfa.c b/dfa.c index 8771bbee..813c239b 100644 --- a/dfa.c +++ b/dfa.c @@ -820,9 +820,13 @@ using_simple_locale (void) static int unibyte_c = -1; if (unibyte_c < 0) { +#ifdef LC_ALL char *locale = setlocale (LC_ALL, NULL); unibyte_c = (locale && (STREQ (locale, "C") || STREQ (locale, "POSIX"))); +#else + unibyte_c = 1; +#endif } return unibyte_c; } -- cgit v1.2.3 From c44e165c9e7aaa57026a0b7e8a3a97d54c7f7db0 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 21 Mar 2014 13:49:14 +0200 Subject: Bump version for beta tarball. --- configure | 20 ++++++++++---------- configure.ac | 2 +- pc/config.h | 6 +++--- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/configure b/configure index aa682f0b..a99a924a 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for GNU Awk 4.1.0f. +# Generated by GNU Autoconf 2.69 for GNU Awk 4.1.0g. # # Report bugs to . # @@ -580,8 +580,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GNU Awk' PACKAGE_TARNAME='gawk' -PACKAGE_VERSION='4.1.0f' -PACKAGE_STRING='GNU Awk 4.1.0f' +PACKAGE_VERSION='4.1.0g' +PACKAGE_STRING='GNU Awk 4.1.0g' PACKAGE_BUGREPORT='bug-gawk@gnu.org' PACKAGE_URL='http://www.gnu.org/software/gawk/' @@ -1324,7 +1324,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures GNU Awk 4.1.0f to adapt to many kinds of systems. +\`configure' configures GNU Awk 4.1.0g to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1394,7 +1394,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GNU Awk 4.1.0f:";; + short | recursive ) echo "Configuration of GNU Awk 4.1.0g:";; esac cat <<\_ACEOF @@ -1512,7 +1512,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -GNU Awk configure 4.1.0f +GNU Awk configure 4.1.0g generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2221,7 +2221,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by GNU Awk $as_me 4.1.0f, which was +It was created by GNU Awk $as_me 4.1.0g, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3104,7 +3104,7 @@ fi # Define the identity of the package. PACKAGE='gawk' - VERSION='4.1.0f' + VERSION='4.1.0g' cat >>confdefs.h <<_ACEOF @@ -11541,7 +11541,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by GNU Awk $as_me 4.1.0f, which was +This file was extended by GNU Awk $as_me 4.1.0g, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -11609,7 +11609,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -GNU Awk config.status 4.1.0f +GNU Awk config.status 4.1.0g configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 903385a6..8e823796 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ dnl dnl Process this file with autoconf to produce a configure script. -AC_INIT([GNU Awk], 4.1.0f, bug-gawk@gnu.org, gawk) +AC_INIT([GNU Awk], 4.1.0g, bug-gawk@gnu.org, gawk) # This is a hack. Different versions of install on different systems # are just too different. Chuck it and use install-sh. diff --git a/pc/config.h b/pc/config.h index b35dbc8f..38d77490 100644 --- a/pc/config.h +++ b/pc/config.h @@ -423,7 +423,7 @@ #define PACKAGE_NAME "GNU Awk" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "GNU Awk 4.1.0f" +#define PACKAGE_STRING "GNU Awk 4.1.0g" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "gawk" @@ -432,7 +432,7 @@ #define PACKAGE_URL "http://www.gnu.org/software/gawk/" /* Define to the version of this package. */ -#define PACKAGE_VERSION "4.1.0f" +#define PACKAGE_VERSION "4.1.0g" /* Define to 1 if *printf supports %F format */ #undef PRINTF_HAS_F_FORMAT @@ -494,7 +494,7 @@ /* Version number of package */ -#define VERSION "4.1.0f" +#define VERSION "4.1.0g" /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE -- cgit v1.2.3 From ac1f9a6de76def07e6966f7701d5af2cfdb661f0 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 21 Mar 2014 14:40:00 +0200 Subject: Bump UPDATE_YEAR in main.c. --- ChangeLog | 4 ++++ main.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 310c7988..63d1c557 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,10 @@ * dfa.c (using_simple_locale): Add ifdefs in case there is no locale support at all. Thanks to Scott Deifik for the report. + Unrelated: + + * main.c (UPDATE_YEAR): Set to 2014. + 2014-03-17 Arnold D. Robbins * .gitignore: Add .dSYM directories for Mac OS X. diff --git a/main.c b/main.c index 4f77510f..dad39f4d 100644 --- a/main.c +++ b/main.c @@ -24,7 +24,7 @@ */ /* FIX THIS BEFORE EVERY RELEASE: */ -#define UPDATE_YEAR 2013 +#define UPDATE_YEAR 2014 #include "awk.h" #include "getopt.h" -- cgit v1.2.3 From a17d64b1c25dec5a94a3e4407ba431ed3ddeb473 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 23 Mar 2014 22:44:37 +0200 Subject: Irix fix for dfa.c. --- ChangeLog | 5 +++++ dfa.c | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 63d1c557..fac05e9f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-03-23 Arnold D. Robbins + + * dfa.c: Move include of dfa.h around for correct building + on Irix. Thanks to Nelson H.F. Beebe for the report. + 2014-03-21 Arnold D. Robbins * dfa.c (using_simple_locale): Add ifdefs in case there is no diff --git a/dfa.c b/dfa.c index 813c239b..0fc68cff 100644 --- a/dfa.c +++ b/dfa.c @@ -43,8 +43,6 @@ #include "missing_d/gawkbool.h" #endif /* HAVE_STDBOOL_H */ -#include "dfa.h" - /* Gawk doesn't use Gnulib, so don't assume static_assert is present. */ #ifndef static_assert # define static_assert(cond, diagnostic) \ @@ -89,6 +87,8 @@ #include "xalloc.h" +#include "dfa.h" + #ifdef GAWK static int is_blank (int c) -- cgit v1.2.3 From a6789ab02f8fe2cf57d7ee0fc74437cf8703249c Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 23 Mar 2014 22:45:26 +0200 Subject: Fix in .gitignore. --- .gitignore | 3 +-- ChangeLog | 4 ++++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 899a16c0..72445191 100644 --- a/.gitignore +++ b/.gitignore @@ -5,8 +5,7 @@ # Directories autom4te.cache .deps -grcat.dSYM -pwcat.dSYM +*.dSYM # Single files. Makefile diff --git a/ChangeLog b/ChangeLog index fac05e9f..bea3720c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,10 @@ * dfa.c: Move include of dfa.h around for correct building on Irix. Thanks to Nelson H.F. Beebe for the report. + Unrelated: + + * .gitignore: Simplify .dSYM pattern for Mac OS X. + 2014-03-21 Arnold D. Robbins * dfa.c (using_simple_locale): Add ifdefs in case there is no -- cgit v1.2.3 From d84037582745e908a51378e61b0fc3cb5dbcce38 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 23 Mar 2014 22:46:01 +0200 Subject: Updated pl translation. --- po/pl.po | 1334 +++++++++++++++++++++++++++++--------------------------------- 1 file changed, 615 insertions(+), 719 deletions(-) diff --git a/po/pl.po b/po/pl.po index 6d647581..62b674f8 100644 --- a/po/pl.po +++ b/po/pl.po @@ -1,107 +1,102 @@ # Polish translations for GNU AWK package. -# Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. +# Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the gawk package. # -# Wojciech Polak , 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012, 2013. +# Wojciech Polak , 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014. # additional help by Sergey Poznyakoff , 2003. # msgid "" msgstr "" -"Project-Id-Version: gawk 4.0.75\n" +"Project-Id-Version: gawk 4.1.0b\n" "Report-Msgid-Bugs-To: arnold@skeeve.com\n" -"POT-Creation-Date: 2013-05-09 16:05+0300\n" -"PO-Revision-Date: 2013-05-05 18:29+0200\n" +"POT-Creation-Date: 2014-01-14 22:23+0200\n" +"PO-Revision-Date: 2014-03-22 17:49+0100\n" "Last-Translator: Wojciech Polak \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: array.c:254 +#: array.c:256 #, c-format msgid "from %s" msgstr "od %s" -#: array.c:354 +#: array.c:357 msgid "attempt to use a scalar value as array" msgstr "próba użycia wartoÅ›ci skalarnej jako tablicy" -#: array.c:356 +#: array.c:359 #, c-format msgid "attempt to use scalar parameter `%s' as an array" msgstr "próba użycia parametru `%s' skalaru jako tablicy" -#: array.c:359 +#: array.c:362 #, c-format msgid "attempt to use scalar `%s' as an array" msgstr "próba użycia skalaru `%s' jako tablicy" -#: array.c:406 array.c:573 builtin.c:85 builtin.c:1591 builtin.c:1637 -#: builtin.c:1650 builtin.c:2078 builtin.c:2092 eval.c:1121 eval.c:1125 -#: eval.c:1524 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" msgstr "próba użycia tablicy `%s' w kontekÅ›cie skalaru" -#: array.c:580 +#: array.c:583 #, c-format msgid "delete: index `%s' not in array `%s'" msgstr "delete: indeks `%s' nie jest w tablicy `%s'" -#: array.c:594 +#: array.c:597 #, c-format msgid "attempt to use scalar `%s[\"%.*s\"]' as an array" msgstr "próba użycia skalaru `%s[\"%.*s\"]' jako tablicy" -#: array.c:773 +#: array.c:776 msgid "adump: first argument not an array" msgstr "adump: pierwszy argument nie jest tablicÄ…" -#: array.c:812 +#: array.c:815 msgid "asort: second argument not an array" msgstr "asort: drugi argument nie jest tablicÄ…" -#: array.c:813 +#: array.c:816 msgid "asorti: second argument not an array" msgstr "asorti: drugi argument nie jest tablicÄ…" -#: array.c:820 +#: array.c:823 msgid "asort: first argument not an array" msgstr "asort: pierwszy argument nie jest tablicÄ…" -#: array.c:821 +#: array.c:824 msgid "asorti: first argument not an array" msgstr "asorti: pierwszy argument nie jest tablicÄ…" -#: array.c:828 +#: array.c:831 msgid "asort: cannot use a subarray of first arg for second arg" -msgstr "" -"asort: nie można użyć podtablicy pierwszego argumentu dla drugiego argumentu" +msgstr "asort: nie można użyć podtablicy pierwszego argumentu dla drugiego argumentu" -#: array.c:829 +#: array.c:832 msgid "asorti: cannot use a subarray of first arg for second arg" -msgstr "" -"asorti: nie można użyć podtablicy pierwszego argumentu dla drugiego argumentu" +msgstr "asorti: nie można użyć podtablicy pierwszego argumentu dla drugiego argumentu" -#: array.c:834 +#: array.c:837 msgid "asort: cannot use a subarray of second arg for first arg" -msgstr "" -"asort: nie można użyć podtablicy drugiego argumentu dla pierwszego argumentu" +msgstr "asort: nie można użyć podtablicy drugiego argumentu dla pierwszego argumentu" -#: array.c:835 +#: array.c:838 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" +msgstr "asorti: nie można użyć podtablicy drugiego argumentu dla pierwszego argumentu" -#: array.c:1309 +#: array.c:1314 #, c-format msgid "`%s' is invalid as a function name" msgstr "nieprawidÅ‚owa nazwa funkcji `%s'" -#: array.c:1313 +#: array.c:1318 #, c-format msgid "sort comparison function `%s' is not defined" msgstr "funkcja porównujÄ…ca w sortowaniu `%s' nie zostaÅ‚a zdefiniowna" @@ -122,19 +117,16 @@ msgstr "stary awk nie wspiera wielokrotnych reguÅ‚ `BEGIN' lub `END'" #: awkgram.y:373 #, 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" +msgstr "`%s' jest funkcjÄ… wbudowanÄ…, wiÄ™c nie może zostać ponownie zdefiniowana" #: awkgram.y:419 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" +msgstr "staÅ‚e wyrażenie regularne `//' wyglÄ…da jak komentarz C++, ale nim nie jest" #: awkgram.y:423 #, 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" +msgstr "staÅ‚e wyrażenie regularne `/%s/' wyglÄ…da jak komentarz C, ale nim nie jest" #: awkgram.y:515 #, c-format @@ -169,9 +161,7 @@ msgstr "`return' użyty poza kontekstem funkcji" #: awkgram.y:922 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 \"\"'" +msgstr "zwykÅ‚y `print' w reguÅ‚ach BEGIN lub END powinien prawdopodobnie być jako `print \"\"'" #: awkgram.y:988 awkgram.y:1037 msgid "`delete' is not allowed with SYMTAB" @@ -199,8 +189,7 @@ msgstr "wyrażenie regularne po lewej stronie operatora `~' lub `!~'" #: awkgram.y:1291 awkgram.y:1442 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'" +msgstr "stary awk nie wspiera sÅ‚owa kluczowego `in', z wyjÄ…tkiem po sÅ‚owie `for'" #: awkgram.y:1301 msgid "regular expression on right of comparison" @@ -218,8 +207,7 @@ msgstr "nieprawidÅ‚owy `getline' wewnÄ…trz reguÅ‚y `%s'" #: awkgram.y:1425 msgid "non-redirected `getline' undefined inside END action" -msgstr "" -"komenda `getline' bez przekierowania nie jest zdefiniowana wewnÄ…trz akcji END" +msgstr "komenda `getline' bez przekierowania nie jest zdefiniowana wewnÄ…trz akcji END" #: awkgram.y:1444 msgid "old awk does not support multidimensional arrays" @@ -236,18 +224,17 @@ msgstr "poÅ›rednie wywoÅ‚ania funkcji sÄ… rozszerzeniem gawk" #: awkgram.y:1620 #, 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" +msgstr "nie można użyć specjalnej zmiennej `%s' do poÅ›redniego wywoÅ‚ania funkcji" #: awkgram.y:1698 msgid "invalid subscript expression" msgstr "nieprawidÅ‚owe wyrażenie indeksowe" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:119 +#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "ostrzeżenie: " -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:151 +#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "fatalny błąd: " @@ -255,8 +242,8 @@ msgstr "fatalny błąd: " msgid "unexpected newline or end of string" msgstr "niespodziewany znak nowego wiersza lub koÅ„ca Å‚aÅ„cucha" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:517 debug.c:533 -#: debug.c:2792 debug.c:5040 +#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 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)" @@ -266,7 +253,7 @@ msgstr "nie można otworzyć pliku źródÅ‚owego `%s' do czytania (%s)" msgid "can't open shared library `%s' for reading (%s)" msgstr "nie można otworzyć współdzielonej biblioteki `%s' do czytania (%s)" -#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:130 debug.c:5191 +#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "nieznany powód" @@ -321,15 +308,12 @@ msgstr "plik źródÅ‚owy nie posiada na koÅ„cu znaku nowego wiersza" #: awkgram.y:3018 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" +msgstr "niezakoÅ„czone prawidÅ‚owo wyrażenie regularne koÅ„czy siÄ™ znakiem `\\' na koÅ„cu pliku" #: awkgram.y:3042 #, 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" +msgstr "%s: %d: modyfikator wyrażenia regularnego `/.../%c' tawk nie dziaÅ‚a w gawk" #: awkgram.y:3046 #, c-format @@ -412,9 +396,7 @@ msgstr "%d jest nieprawidÅ‚owe jako liczba argumentów dla %s" #: awkgram.y:3798 #, 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" +msgstr "%s: literaÅ‚ Å‚aÅ„cuchowy jako ostatni argument podstawienia nie ma żadnego efektu" #: awkgram.y:3803 #, c-format @@ -438,16 +420,15 @@ msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" msgstr "nieprawidÅ‚owe użycie dcngettext(_\"...\"): usuÅ„ znak podkreÅ›lenia" #: awkgram.y:3992 -#, fuzzy msgid "index: regexp constant as second argument is not allowed" -msgstr "index: otrzymano drugi argument, który nie jest Å‚aÅ„cuchem" +msgstr "index: staÅ‚y regexp jako drugi argument nie jest dozwolony" #: awkgram.y:4045 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "funkcja `%s': parametr `%s' zasÅ‚ania globalnÄ… zmiennÄ…" -#: awkgram.y:4102 debug.c:4021 debug.c:4064 debug.c:5189 +#: awkgram.y:4102 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)" @@ -482,460 +463,452 @@ msgstr "funkcja `%s': nie można użyć nazwy funkcji jako nazwy parametru" #: awkgram.y:4264 #, 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" +msgstr "funkcja `%s': nie można użyć specjalnej zmiennej `%s' jako parametru funkcji" #: awkgram.y:4272 #, c-format msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d" msgstr "funkcja `%s': parametr #%d, `%s', powiela parametr #%d" -#: awkgram.y:4366 awkgram.y:4372 +#: awkgram.y:4359 awkgram.y:4365 #, c-format msgid "function `%s' called but never defined" msgstr "funkcja `%s' zostaÅ‚a wywoÅ‚ana, ale nigdy nie zostaÅ‚a zdefiniowana" -#: awkgram.y:4376 +#: awkgram.y:4369 #, 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" +msgstr "funkcja `%s' zostaÅ‚a zdefiniowana, ale nigdy nie zostaÅ‚a wywoÅ‚ana bezpoÅ›rednio" -#: awkgram.y:4408 +#: awkgram.y:4401 #, 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:4467 +#: awkgram.y:4460 #, c-format msgid "" "function `%s' called with space between name and `(',\n" "or used as a variable or an array" msgstr "" -"funkcja `%s' zostaÅ‚a wywoÅ‚ana z biaÅ‚ymi znakami pomiÄ™dzy jej nazwÄ… a znakiem " -"`(',\n" +"funkcja `%s' zostaÅ‚a wywoÅ‚ana z biaÅ‚ymi znakami pomiÄ™dzy jej nazwÄ… a znakiem `(',\n" "lub użyta jako zmienna lub jako tablica" -#: awkgram.y:4703 +#: awkgram.y:4696 msgid "division by zero attempted" msgstr "próba dzielenia przez zero" -#: awkgram.y:4712 +#: awkgram.y:4705 #, c-format msgid "division by zero attempted in `%%'" msgstr "próba dzielenia przez zero w `%%'" -#: builtin.c:128 +#: awkgram.y:5025 +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:5028 +#, c-format +msgid "invalid target of assignment (opcode %s)" +msgstr "nieprawidÅ‚owy cel przypisania (opcode %s)" + +#: builtin.c:133 #, c-format msgid "%s to \"%s\" failed (%s)" msgstr "%s do \"%s\" nie powiódÅ‚ siÄ™ (%s)" -#: builtin.c:129 +#: builtin.c:134 msgid "standard output" msgstr "standardowe wyjÅ›cie" -#: builtin.c:143 +#: builtin.c:148 msgid "exp: received non-numeric argument" msgstr "exp: otrzymano argument nie bÄ™dÄ…cy liczbÄ…" -#: builtin.c:149 +#: builtin.c:154 #, c-format msgid "exp: argument %g is out of range" msgstr "exp: argument %g jest poza zasiÄ™giem" -#: builtin.c:224 +#: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" -msgstr "" -"fflush: nie można opróżnić: potok `%s' otwarty do czytania, a nie do zapisu" +msgstr "fflush: nie można opróżnić: potok `%s' otwarty do czytania, a nie do zapisu" -#: builtin.c:227 +#: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" -msgstr "" -"fflush: nie można opróżnić: plik `%s' otwarty do czytania, a nie do zapisu" +msgstr "fflush: nie można opróżnić: plik `%s' otwarty do czytania, a nie do zapisu" -#: builtin.c:239 +#: builtin.c:244 #, c-format 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:357 +#: builtin.c:362 msgid "index: received non-string first argument" msgstr "index: otrzymano pierwszy argument, który nie jest Å‚aÅ„cuchem" -#: builtin.c:359 +#: builtin.c:364 msgid "index: received non-string second argument" msgstr "index: otrzymano drugi argument, który nie jest Å‚aÅ„cuchem" -#: builtin.c:483 mpfr.c:757 +#: builtin.c:488 mpfr.c:757 msgid "int: received non-numeric argument" msgstr "int: otrzymano argument, który nie jest liczbÄ…" -#: builtin.c:520 +#: builtin.c:525 msgid "length: received array argument" msgstr "length: otrzymano argument, który jest tablicÄ…" -#: builtin.c:523 +#: builtin.c:528 msgid "`length(array)' is a gawk extension" msgstr "`length(tablica)' jest rozszerzeniem gawk" -#: builtin.c:539 +#: builtin.c:544 msgid "length: received non-string argument" msgstr "length: otrzymano argument, który nie jest Å‚aÅ„cuchem" -#: builtin.c:570 +#: builtin.c:575 msgid "log: received non-numeric argument" msgstr "log: otrzymano argument, który nie jest liczbÄ…" -#: builtin.c:573 +#: builtin.c:578 #, c-format msgid "log: received negative argument %g" msgstr "log: otrzymano ujemny argument %g" -#: builtin.c:771 builtin.c:776 +#: builtin.c:776 builtin.c:781 msgid "fatal: must use `count$' on all formats or none" msgstr "fatal: należy użyć `count$' we wszystkich formatach lub nic" -#: builtin.c:846 +#: builtin.c:851 #, c-format msgid "field width is ignored for `%%' specifier" msgstr "szerokość pola jest ignorowana dla specyfikatora `%%'" -#: builtin.c:848 +#: builtin.c:853 #, c-format msgid "precision is ignored for `%%' specifier" msgstr "precyzja jest ignorowana dla specyfikatora `%%'" -#: builtin.c:850 +#: builtin.c:855 #, c-format msgid "field width and precision are ignored for `%%' specifier" msgstr "szerokość pola i precyzja sÄ… ignorowane dla specyfikatora `%%'" -#: builtin.c:901 +#: builtin.c:906 msgid "fatal: `$' is not permitted in awk formats" msgstr "fatal: `$' jest niedozwolony w formatach awk" -#: builtin.c:910 +#: builtin.c:915 msgid "fatal: arg count with `$' must be > 0" msgstr "fatal: argument count z `$' musi być > 0" -#: builtin.c:914 +#: builtin.c:919 #, 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" +msgstr "fatal: argument count %ld wiÄ™kszy niż caÅ‚kowita suma argumentów dostarczonych" -#: builtin.c:918 +#: builtin.c:923 msgid "fatal: `$' not permitted after period in format" msgstr "fatal: `$' jest niedozwolony po kropce w formacie" -#: builtin.c:934 +#: builtin.c:939 msgid "fatal: no `$' supplied for positional field width or precision" msgstr "fatal: brak `$' dla pozycyjnej szerokoÅ›ci pola lub precyzji" -#: builtin.c:1006 +#: builtin.c:1011 msgid "`l' is meaningless in awk formats; ignored" msgstr "`l' jest bezsensowny w formatach awk; zignorowany" -#: builtin.c:1010 +#: builtin.c:1015 msgid "fatal: `l' is not permitted in POSIX awk formats" msgstr "fatal: `l' jest niedozwolony w formatach POSIX awk" -#: builtin.c:1023 +#: builtin.c:1028 msgid "`L' is meaningless in awk formats; ignored" msgstr "`L' jest bezsensowny w formatach awk; zignorowany" -#: builtin.c:1027 +#: builtin.c:1032 msgid "fatal: `L' is not permitted in POSIX awk formats" msgstr "fatal: `L' jest niedozwolony w formatach POSIX awk" -#: builtin.c:1040 +#: builtin.c:1045 msgid "`h' is meaningless in awk formats; ignored" msgstr "`h' jest bezsensowny w formatach awk; zignorowany" -#: builtin.c:1044 +#: builtin.c:1049 msgid "fatal: `h' is not permitted in POSIX awk formats" msgstr "fatal: `h' jest niedozwolony w formatach POSIX awk" -#: builtin.c:1439 +#: builtin.c:1447 #, 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:1537 +#: builtin.c:1545 #, c-format msgid "ignoring unknown format specifier character `%c': no argument converted" -msgstr "" -"pominiÄ™cie nieznanego formatu specyfikatora znaku `%c': nie skonwertowano " -"argumentu" +msgstr "pominiÄ™cie nieznanego formatu specyfikatora znaku `%c': nie skonwertowano argumentu" -#: builtin.c:1542 +#: builtin.c:1550 msgid "fatal: not enough arguments to satisfy format string" -msgstr "" -"fatal: brak wystarczajÄ…cej liczby argumentów, aby zaspokoić Å‚aÅ„cuch " -"formatujÄ…cy" +msgstr "fatal: brak wystarczajÄ…cej liczby argumentów, aby zaspokoić Å‚aÅ„cuch formatujÄ…cy" -#: builtin.c:1544 +#: builtin.c:1552 msgid "^ ran out for this one" msgstr "zabrakÅ‚o ^" -#: builtin.c:1551 +#: builtin.c:1559 msgid "[s]printf: format specifier does not have control letter" msgstr "[s]printf: specyfikator formatu nie posiada kontrolnej litery" -#: builtin.c:1554 +#: builtin.c:1562 msgid "too many arguments supplied for format string" msgstr "zbyt dużo podanych argumentów w Å‚aÅ„cuchu formatujÄ…cym" -#: builtin.c:1610 +#: builtin.c:1618 msgid "sprintf: no arguments" msgstr "sprintf: brak argumentów" -#: builtin.c:1633 builtin.c:1644 +#: builtin.c:1641 builtin.c:1652 msgid "printf: no arguments" msgstr "printf: brak argumentów" -#: builtin.c:1687 +#: builtin.c:1695 msgid "sqrt: received non-numeric argument" msgstr "sqrt: otrzymano argument, który nie jest liczbÄ…" -#: builtin.c:1691 +#: builtin.c:1699 #, c-format msgid "sqrt: called with negative argument %g" msgstr "sqrt: wywoÅ‚ana z ujemnym argumentem %g" -#: builtin.c:1722 +#: builtin.c:1730 #, c-format msgid "substr: length %g is not >= 1" msgstr "substr: dÅ‚ugość %g nie jest >= 1" -#: builtin.c:1724 +#: builtin.c:1732 #, c-format msgid "substr: length %g is not >= 0" msgstr "substr: dÅ‚ugość %g nie jest >= 0" -#: builtin.c:1731 +#: builtin.c:1739 #, 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:1736 +#: builtin.c:1744 #, 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:1748 +#: builtin.c:1756 #, 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:1753 +#: builtin.c:1761 #, 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" +msgstr "substr: poczÄ…tkowy indeks %g, który nie jest liczbÄ… caÅ‚kowitÄ…, zostanie obciÄ™ty" -#: builtin.c:1778 +#: builtin.c:1786 msgid "substr: source string is zero length" msgstr "substr: Å‚aÅ„cuch źródÅ‚owy ma zerowÄ… dÅ‚ugość" -#: builtin.c:1794 +#: builtin.c:1802 #, 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:1802 +#: builtin.c:1810 #, c-format -msgid "" -"substr: length %g at start index %g exceeds length of first argument (%lu)" -msgstr "" -"substr: dÅ‚ugość %g zaczynajÄ…c od %g przekracza dÅ‚ugość pierwszego argumentu " -"(%lu)" +msgid "substr: length %g at start index %g exceeds length of first argument (%lu)" +msgstr "substr: dÅ‚ugość %g zaczynajÄ…c od %g przekracza dÅ‚ugość pierwszego argumentu (%lu)" -#: builtin.c:1876 +#: builtin.c:1884 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" -msgstr "" -"strftime: wartość formatu w PROCINFO[\"strftime\"] posiada typ numeryczny" +msgstr "strftime: wartość formatu w PROCINFO[\"strftime\"] posiada typ numeryczny" -#: builtin.c:1899 +#: builtin.c:1907 msgid "strftime: received non-numeric second argument" msgstr "strftime: otrzymano drugi argument, który nie jest liczbÄ…" -#: builtin.c:1903 +#: builtin.c:1911 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:1910 +#: builtin.c:1918 msgid "strftime: received non-string first argument" msgstr "strftime: otrzymano pierwszy argument, który nie jest Å‚aÅ„cuchem" -#: builtin.c:1917 +#: builtin.c:1925 msgid "strftime: received empty format string" msgstr "strftime: otrzymano pusty Å‚aÅ„cuch formatujÄ…cy" -#: builtin.c:1983 +#: builtin.c:1991 msgid "mktime: received non-string argument" msgstr "mktime: otrzymano argument, który nie jest Å‚aÅ„cuchem" -#: builtin.c:2000 +#: builtin.c:2008 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:2035 +#: builtin.c:2043 msgid "'system' function not allowed in sandbox mode" msgstr "funkcja 'system' nie jest dozwolona w trybie piaskownicy" -#: builtin.c:2040 +#: builtin.c:2048 msgid "system: received non-string argument" msgstr "system: otrzymano argument, który nie jest Å‚aÅ„cuchem" -#: builtin.c:2160 +#: builtin.c:2168 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "odwoÅ‚anie do niezainicjowanego pola `$%d'" -#: builtin.c:2247 +#: builtin.c:2255 msgid "tolower: received non-string argument" msgstr "tolower: otrzymano argument, który nie jest Å‚aÅ„cuchem" -#: builtin.c:2281 +#: builtin.c:2289 msgid "toupper: received non-string argument" msgstr "toupper: otrzymano argument, który nie jest Å‚aÅ„cuchem" -#: builtin.c:2317 mpfr.c:672 +#: builtin.c:2325 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2: otrzymano pierwszy argument, który nie jest liczbÄ…" -#: builtin.c:2319 mpfr.c:674 +#: builtin.c:2327 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2: otrzymano drugi argument, który nie jest liczbÄ…" -#: builtin.c:2338 +#: builtin.c:2346 msgid "sin: received non-numeric argument" msgstr "sin: otrzymano argument, który nie jest liczbÄ…" -#: builtin.c:2354 +#: builtin.c:2362 msgid "cos: received non-numeric argument" msgstr "cos: otrzymano argument, który nie jest liczbÄ…" -#: builtin.c:2407 mpfr.c:1156 +#: builtin.c:2415 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand: otrzymano argument, który nie jest liczbÄ…" -#: builtin.c:2438 +#: builtin.c:2446 msgid "match: third argument is not an array" msgstr "match: otrzymano trzeci argument, który nie jest tablicÄ…" -#: builtin.c:2710 +#: builtin.c:2718 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub: trzeci argument 0 potraktowany jako 1" -#: builtin.c:3003 +#: builtin.c:3014 msgid "lshift: received non-numeric first argument" msgstr "lshift: otrzymano pierwszy argument, który nie jest liczbÄ…" -#: builtin.c:3005 +#: builtin.c:3016 msgid "lshift: received non-numeric second argument" msgstr "lshift: otrzymano drugi argument, który nie jest liczbÄ…" -#: builtin.c:3011 +#: builtin.c:3022 #, c-format msgid "lshift(%f, %f): negative values will give strange results" msgstr "lshift(%f, %f): ujemne wartoÅ›ci spowodujÄ… dziwne wyniki" -#: builtin.c:3013 +#: builtin.c:3024 #, c-format msgid "lshift(%f, %f): fractional values will be truncated" msgstr "lshift(%f, %f): uÅ‚amkowe wartoÅ›ci zostanÄ… obciÄ™te" -#: builtin.c:3015 +#: builtin.c:3026 #, 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:3040 +#: builtin.c:3051 msgid "rshift: received non-numeric first argument" msgstr "rshift: otrzymano pierwszy argument, który nie jest liczbÄ…" -#: builtin.c:3042 +#: builtin.c:3053 msgid "rshift: received non-numeric second argument" msgstr "rshift: otrzymano drugi argument, który nie jest liczbÄ…" -#: builtin.c:3048 +#: builtin.c:3059 #, c-format msgid "rshift(%f, %f): negative values will give strange results" msgstr "rshift(%f, %f): ujemne wartoÅ›ci spowodujÄ… dziwne wyniki" -#: builtin.c:3050 +#: builtin.c:3061 #, c-format msgid "rshift(%f, %f): fractional values will be truncated" msgstr "rshift(%f, %f): uÅ‚amkowe wartoÅ›ci zostanÄ… obciÄ™te" -#: builtin.c:3052 +#: builtin.c:3063 #, 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:3077 mpfr.c:968 +#: builtin.c:3088 mpfr.c:968 msgid "and: called with less than two arguments" msgstr "and: wywoÅ‚ano z mniej niż dwoma argumentami" -#: builtin.c:3082 +#: builtin.c:3093 #, c-format msgid "and: argument %d is non-numeric" msgstr "and: argument %d nie jest liczbÄ…" -#: builtin.c:3086 +#: builtin.c:3097 #, 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:3109 mpfr.c:1000 +#: builtin.c:3120 mpfr.c:1000 msgid "or: called with less than two arguments" msgstr "or: wywoÅ‚ano z mniej niż dwoma argumentami" -#: builtin.c:3114 +#: builtin.c:3125 #, c-format msgid "or: argument %d is non-numeric" msgstr "or: argument %d nie jest liczbÄ…" -#: builtin.c:3118 +#: builtin.c:3129 #, 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:3140 mpfr.c:1031 +#: builtin.c:3151 mpfr.c:1031 msgid "xor: called with less than two arguments" msgstr "xor: wywoÅ‚ano z mniej niż dwoma argumentami" -#: builtin.c:3146 +#: builtin.c:3157 #, c-format msgid "xor: argument %d is non-numeric" msgstr "xor: argument %d nie jest liczbÄ…" -#: builtin.c:3150 +#: builtin.c:3161 #, 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:3175 mpfr.c:787 +#: builtin.c:3186 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl: otrzymano argument, który nie jest liczbÄ…" -#: builtin.c:3181 +#: builtin.c:3192 #, c-format msgid "compl(%f): negative value will give strange results" msgstr "compl(%f): ujemne wartoÅ›ci spowodujÄ… dziwne wyniki" -#: builtin.c:3183 +#: builtin.c:3194 #, c-format msgid "compl(%f): fractional value will be truncated" msgstr "compl(%f): uÅ‚amkowe wartoÅ›ci zostanÄ… obciÄ™te" -#: builtin.c:3352 +#: builtin.c:3363 #, c-format msgid "dcgettext: `%s' is not a valid locale category" msgstr "dcgettext: `%s' nie jest prawidÅ‚owÄ… kategoriÄ… lokalizacji" @@ -1041,14 +1014,11 @@ msgid "non-zero integer value" msgstr "niezerowa wartość" #: command.y:817 -msgid "" -"backtrace [N] - print trace of all or N innermost (outermost if N < 0) " -"frames." +msgid "backtrace [N] - print trace of all or N innermost (outermost if N < 0) frames." msgstr "" #: command.y:819 -msgid "" -"break [[filename:]N|function] - set breakpoint at the specified location." +msgid "break [[filename:]N|function] - set breakpoint at the specified location." msgstr "" #: command.y:821 @@ -1056,9 +1026,7 @@ msgid "clear [[filename:]N|function] - delete breakpoints previously set." msgstr "" #: command.y:823 -msgid "" -"commands [num] - starts a list of commands to be executed at a breakpoint" -"(watchpoint) hit." +msgid "commands [num] - starts a list of commands to be executed at a breakpoint(watchpoint) hit." msgstr "" #: command.y:825 @@ -1118,9 +1086,7 @@ msgid "ignore N COUNT - set ignore-count of breakpoint number N to COUNT." msgstr "" #: command.y:853 -msgid "" -"info topic - source|sources|variables|functions|break|frame|args|locals|" -"display|watch." +msgid "info topic - source|sources|variables|functions|break|frame|args|locals|display|watch." msgstr "" #: command.y:855 @@ -1132,8 +1098,7 @@ msgid "next [COUNT] - step program, proceeding through subroutine calls." msgstr "" #: command.y:859 -msgid "" -"nexti [COUNT] - step one instruction, but proceed through subroutine calls." +msgid "nexti [COUNT] - step one instruction, but proceed through subroutine calls." msgstr "" #: command.y:861 @@ -1169,8 +1134,7 @@ msgid "set var = value - assign value to a scalar variable." msgstr "" #: command.y:879 -msgid "" -"silent - suspends usual message when stopped at a breakpoint/watchpoint." +msgid "silent - suspends usual message when stopped at a breakpoint/watchpoint." msgstr "" #: command.y:881 @@ -1198,9 +1162,7 @@ msgid "undisplay [N] - remove variable(s) from automatic display list." msgstr "" #: command.y:893 -msgid "" -"until [[filename:]N|function] - execute until program reaches a different " -"line or line N within current frame." +msgid "until [[filename:]N|function] - execute until program reaches a different line or line N within current frame." msgstr "" #: command.y:895 @@ -1215,7 +1177,7 @@ msgstr "" msgid "watch var - set a watchpoint for a variable." msgstr "" -#: command.y:1011 debug.c:395 msg.c:128 +#: command.y:1011 debug.c:401 msg.c:135 #, c-format msgid "error: " msgstr "błąd: " @@ -1253,93 +1215,93 @@ msgstr "nieprawidÅ‚owy znak" msgid "undefined command: %s\n" msgstr "niezdefiniowana komenda: %s\n" -#: debug.c:246 +#: debug.c:252 msgid "set or show the number of lines to keep in history file." msgstr "" -#: debug.c:248 +#: debug.c:254 msgid "set or show the list command window size." msgstr "" -#: debug.c:250 +#: debug.c:256 msgid "set or show gawk output file." msgstr "" -#: debug.c:252 +#: debug.c:258 msgid "set or show debugger prompt." msgstr "" -#: debug.c:254 +#: debug.c:260 msgid "(un)set or show saving of command history (value=on|off)." msgstr "" -#: debug.c:256 +#: debug.c:262 msgid "(un)set or show saving of options (value=on|off)." msgstr "" -#: debug.c:258 +#: debug.c:264 msgid "(un)set or show instruction tracing (value=on|off)." msgstr "" -#: debug.c:339 +#: debug.c:345 msgid "program not running." msgstr "" -#: debug.c:442 debug.c:597 +#: debug.c:448 debug.c:606 #, c-format msgid "can't read source file `%s' (%s)" msgstr "nie można odczytać pliku źródÅ‚owego `%s' (%s)" -#: debug.c:447 +#: debug.c:453 #, c-format msgid "source file `%s' is empty.\n" msgstr "plik źródÅ‚owy `%s' jest pusty.\n" -#: debug.c:474 +#: debug.c:480 msgid "no current source file." msgstr "brak aktualnego pliku źródÅ‚owego." -#: debug.c:499 +#: debug.c:505 #, c-format msgid "cannot find source file named `%s' (%s)" msgstr "nie można znaleźć pliku źródÅ‚owego `%s' (%s)" -#: debug.c:523 +#: debug.c:529 #, c-format msgid "WARNING: source file `%s' modified since program compilation.\n" msgstr "UWAGA: plik źródÅ‚owy `%s' ulegÅ‚ zmianie od kompilacji programu.\n" -#: debug.c:542 +#: debug.c:551 #, c-format msgid "line number %d out of range; `%s' has %d lines" msgstr "" -#: debug.c:602 +#: debug.c:611 #, c-format msgid "unexpected eof while reading file `%s', line %d" msgstr "niespodziewany koniec pliku podczas czytania `%s', linia %d" -#: debug.c:611 +#: debug.c:620 #, c-format msgid "source file `%s' modified since start of program execution" msgstr "plik źródÅ‚owy `%s' ulegÅ‚ zmianie od rozpoczÄ™cia dziaÅ‚ania programu" -#: debug.c:723 +#: debug.c:732 #, c-format msgid "Current source file: %s\n" msgstr "Aktualny plik źródÅ‚owy: %s\n" -#: debug.c:724 +#: debug.c:733 #, c-format msgid "Number of lines: %d\n" msgstr "Ilość linii: %d\n" -#: debug.c:731 +#: debug.c:740 #, c-format msgid "Source file (lines): %s (%d)\n" msgstr "Plik źródÅ‚owy (linie): %s (%d)\n" -#: debug.c:745 +#: debug.c:754 msgid "" "Number Disp Enabled Location\n" "\n" @@ -1347,54 +1309,54 @@ msgstr "" "Numer Disp Enabled Lokacja\n" "\n" -#: debug.c:756 +#: debug.c:765 #, c-format msgid "\tno of hits = %ld\n" msgstr "" -#: debug.c:758 +#: debug.c:767 #, c-format msgid "\tignore next %ld hit(s)\n" msgstr "" -#: debug.c:760 debug.c:900 +#: debug.c:769 debug.c:909 #, c-format msgid "\tstop condition: %s\n" msgstr "\tkoniec warunku: %s\n" -#: debug.c:762 debug.c:902 +#: debug.c:771 debug.c:911 msgid "\tcommands:\n" msgstr "\tkomendy:\n" -#: debug.c:784 +#: debug.c:793 #, c-format msgid "Current frame: " msgstr "Aktualna ramka: " -#: debug.c:787 +#: debug.c:796 #, c-format msgid "Called by frame: " msgstr "" -#: debug.c:791 +#: debug.c:800 #, c-format msgid "Caller of frame: " msgstr "" -#: debug.c:809 +#: debug.c:818 #, c-format msgid "None in main().\n" msgstr "" -#: debug.c:839 +#: debug.c:848 msgid "No arguments.\n" msgstr "Brak argumentów.\n" -#: debug.c:840 +#: debug.c:849 msgid "No locals.\n" msgstr "" -#: debug.c:848 +#: debug.c:857 msgid "" "All defined variables:\n" "\n" @@ -1402,7 +1364,7 @@ msgstr "" "Wszystkie zdefiniowane zmienne:\n" "\n" -#: debug.c:858 +#: debug.c:867 msgid "" "All defined functions:\n" "\n" @@ -1410,13 +1372,13 @@ msgstr "" "Wszystkie zdefiniowane funkcje:\n" "\n" -#: debug.c:877 +#: debug.c:886 msgid "" "Auto-display variables:\n" "\n" msgstr "" -#: debug.c:880 +#: debug.c:889 msgid "" "Watch variables:\n" "\n" @@ -1424,358 +1386,357 @@ msgstr "" "Obserwowane zmienne:\n" "\n" -#: debug.c:1020 +#: debug.c:1029 #, c-format msgid "no symbol `%s' in current context\n" msgstr "brak symbolu `%s' w bieżącym kontekÅ›cie\n" -#: debug.c:1032 debug.c:1418 +#: debug.c:1041 debug.c:1427 #, c-format msgid "`%s' is not an array\n" msgstr "`%s' nie jest tablicÄ…\n" -#: debug.c:1046 +#: debug.c:1055 #, c-format msgid "$%ld = uninitialized field\n" msgstr "$%ld = niezainicjowane pole\n" -#: debug.c:1067 +#: debug.c:1076 #, c-format msgid "array `%s' is empty\n" msgstr "tablica `%s' jest pusta\n" -#: debug.c:1110 debug.c:1162 +#: debug.c:1119 debug.c:1171 #, c-format msgid "[\"%s\"] not in array `%s'\n" msgstr "[\"%s\"] nie ma w tablicy `%s'\n" -#: debug.c:1166 +#: debug.c:1175 #, c-format msgid "`%s[\"%s\"]' is not an array\n" msgstr "`%s[\"%s\"]' nie jest tablicÄ…\n" -#: debug.c:1227 debug.c:4949 +#: debug.c:1236 debug.c:4964 #, c-format msgid "`%s' is not a scalar variable" msgstr "`%s' nie jest zmiennÄ… skalarnÄ…" -#: debug.c:1249 debug.c:4979 +#: debug.c:1258 debug.c:4994 #, c-format msgid "attempt to use array `%s[\"%s\"]' in a scalar context" msgstr "próba użycia tablicy `%s[\"%s\"]' w kontekÅ›cie skalaru" -#: debug.c:1271 debug.c:4990 +#: debug.c:1280 debug.c:5005 #, c-format msgid "attempt to use scalar `%s[\"%s\"]' as array" msgstr "próba użycia skalaru `%s[\"%s\"]' jako tablicy" -#: debug.c:1414 +#: debug.c:1423 #, c-format msgid "`%s' is a function" msgstr "`%s' jest funkcjÄ…" -#: debug.c:1456 +#: debug.c:1465 #, c-format msgid "watchpoint %d is unconditional\n" msgstr "" -#: debug.c:1490 +#: debug.c:1499 #, c-format msgid "No display item numbered %ld" msgstr "" -#: debug.c:1493 +#: debug.c:1502 #, c-format msgid "No watch item numbered %ld" msgstr "" -#: debug.c:1519 +#: debug.c:1528 #, c-format msgid "%d: [\"%s\"] not in array `%s'\n" msgstr "%d: [\"%s\"] nie ma w tablicy `%s'\n" -#: debug.c:1758 +#: debug.c:1767 msgid "attempt to use scalar value as array" msgstr "próba użycia wartoÅ›ci skalarnej jako tablicy" -#: debug.c:1847 +#: debug.c:1856 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" msgstr "" -#: debug.c:1858 +#: debug.c:1867 #, c-format msgid "Display %d deleted because parameter is out of scope.\n" msgstr "" -#: debug.c:1891 +#: debug.c:1900 #, c-format msgid " in file `%s', line %d\n" msgstr " w pliku `%s', linia %d\n" -#: debug.c:1912 +#: debug.c:1921 #, c-format msgid " at `%s':%d" msgstr " w `%s':%d" -#: debug.c:1928 debug.c:1991 +#: debug.c:1937 debug.c:2000 #, c-format msgid "#%ld\tin " msgstr "#%ld\tw " -#: debug.c:1965 +#: debug.c:1974 #, c-format msgid "More stack frames follow ...\n" msgstr "" -#: debug.c:2008 +#: debug.c:2017 msgid "invalid frame number" msgstr "nieprawidÅ‚owy numer ramki" -#: debug.c:2180 +#: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" msgstr "" -#: debug.c:2187 +#: debug.c:2207 #, c-format msgid "Note: breakpoint %d (enabled), also set at %s:%d" msgstr "" -#: debug.c:2194 +#: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" msgstr "" -#: debug.c:2201 +#: debug.c:2221 #, c-format msgid "Note: breakpoint %d (disabled), also set at %s:%d" msgstr "" -#: debug.c:2218 +#: debug.c:2238 #, c-format msgid "Breakpoint %d set at file `%s', line %d\n" msgstr "Breakpoint %d ustawiony w pliku `%s', linia %d\n" -#: debug.c:2320 +#: debug.c:2340 #, c-format msgid "Can't set breakpoint in file `%s'\n" msgstr "" -#: debug.c:2349 debug.c:2472 debug.c:3330 +#: debug.c:2369 debug.c:2492 debug.c:3350 #, c-format msgid "line number %d in file `%s' out of range" msgstr "numer linii %d w pliku `%s' jest poza zasiÄ™giem" -#: debug.c:2353 +#: debug.c:2373 #, c-format msgid "Can't find rule!!!\n" msgstr "Nie można znaleźć reguÅ‚y!!!\n" -#: debug.c:2355 +#: debug.c:2375 #, c-format msgid "Can't set breakpoint at `%s':%d\n" msgstr "" -#: debug.c:2367 +#: debug.c:2387 #, c-format msgid "Can't set breakpoint in function `%s'\n" msgstr "" -#: debug.c:2383 +#: debug.c:2403 #, c-format msgid "breakpoint %d set at file `%s', line %d is unconditional\n" msgstr "" -#: debug.c:2488 debug.c:2510 +#: debug.c:2508 debug.c:2530 #, c-format msgid "Deleted breakpoint %d" msgstr "Skasowany breakpoint %d" -#: debug.c:2494 +#: debug.c:2514 #, c-format msgid "No breakpoint(s) at entry to function `%s'\n" msgstr "" -#: debug.c:2521 +#: debug.c:2541 #, c-format msgid "No breakpoint at file `%s', line #%d\n" msgstr "Brak breakpointa w pliku `%s', linii #%d\n" -#: debug.c:2576 debug.c:2617 debug.c:2637 debug.c:2680 +#: debug.c:2596 debug.c:2637 debug.c:2657 debug.c:2700 msgid "invalid breakpoint number" msgstr "" -#: debug.c:2592 +#: debug.c:2612 msgid "Delete all breakpoints? (y or n) " msgstr "Czy skasować wszystkie breakpointy? (y lub n) " -#: debug.c:2593 debug.c:2903 debug.c:2956 +#: debug.c:2613 debug.c:2923 debug.c:2976 msgid "y" msgstr "t" -#: debug.c:2642 +#: debug.c:2662 #, c-format msgid "Will ignore next %ld crossing(s) of breakpoint %d.\n" msgstr "" -#: debug.c:2646 +#: debug.c:2666 #, c-format msgid "Will stop next time breakpoint %d is reached.\n" msgstr "" -#: debug.c:2763 +#: debug.c:2783 #, c-format msgid "Can only debug programs provided with the `-f' option.\n" msgstr "" -#: debug.c:2888 +#: debug.c:2908 #, c-format msgid "Failed to restart debugger" msgstr "" -#: debug.c:2902 +#: debug.c:2922 msgid "Program already running. Restart from beginning (y/n)? " msgstr "" -#: debug.c:2906 +#: debug.c:2926 #, c-format msgid "Program not restarted\n" msgstr "" -#: debug.c:2916 +#: debug.c:2936 #, c-format msgid "error: cannot restart, operation not allowed\n" msgstr "" -#: debug.c:2922 +#: debug.c:2942 #, c-format msgid "error (%s): cannot restart, ignoring rest of the commands\n" msgstr "" -#: debug.c:2930 +#: debug.c:2950 #, c-format msgid "Starting program: \n" msgstr "Uruchamianie programu: \n" -#: debug.c:2939 +#: debug.c:2959 #, c-format msgid "Program exited %s with exit value: %d\n" msgstr "" -#: debug.c:2955 +#: debug.c:2975 msgid "The program is running. Exit anyway (y/n)? " msgstr "" -#: debug.c:2990 +#: debug.c:3010 #, c-format msgid "Not stopped at any breakpoint; argument ignored.\n" msgstr "" -#: debug.c:2995 +#: debug.c:3015 #, c-format msgid "invalid breakpoint number %d." msgstr "" -#: debug.c:3000 +#: debug.c:3020 #, c-format msgid "Will ignore next %ld crossings of breakpoint %d.\n" msgstr "" -#: debug.c:3187 +#: debug.c:3207 #, c-format msgid "'finish' not meaningful in the outermost frame main()\n" msgstr "" -#: debug.c:3192 +#: debug.c:3212 #, c-format msgid "Run till return from " msgstr "" -#: debug.c:3235 +#: debug.c:3255 #, c-format msgid "'return' not meaningful in the outermost frame main()\n" msgstr "" -#: debug.c:3349 +#: debug.c:3369 #, c-format msgid "Can't find specified location in function `%s'\n" msgstr "" -#: debug.c:3357 +#: debug.c:3377 #, c-format msgid "invalid source line %d in file `%s'" msgstr "nieprawidÅ‚owa linia źródÅ‚owa %d w pliku `%s'" -#: debug.c:3372 +#: debug.c:3392 #, c-format msgid "Can't find specified location %d in file `%s'\n" msgstr "" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "element not in array\n" msgstr "brak elementu w tablicy\n" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "untyped variable\n" msgstr "zmienna bez typu\n" -#: debug.c:3446 +#: debug.c:3466 #, c-format msgid "Stopping in %s ...\n" msgstr "" -#: debug.c:3523 +#: debug.c:3543 #, c-format msgid "'finish' not meaningful with non-local jump '%s'\n" msgstr "" -#: debug.c:3530 +#: debug.c:3550 #, c-format msgid "'until' not meaningful with non-local jump '%s'\n" msgstr "" -#: debug.c:4165 +#: debug.c:4185 msgid "\t------[Enter] to continue or q [Enter] to quit------" msgstr "" -#: debug.c:4166 +#: debug.c:4186 msgid "q" msgstr "q" -#: debug.c:4986 +#: debug.c:5001 #, c-format msgid "[\"%s\"] not in array `%s'" msgstr "[\"%s\"] nie ma w tablicy `%s'" -#: debug.c:5192 +#: debug.c:5207 #, c-format msgid "sending output to stdout\n" msgstr "wysyÅ‚anie wyjÅ›cia na stdout\n" -#: debug.c:5232 +#: debug.c:5247 msgid "invalid number" msgstr "nieprawidÅ‚owa liczba" -#: debug.c:5366 +#: debug.c:5381 #, c-format msgid "`%s' not allowed in current context; statement ignored" msgstr "polecenie `%s' nie może być wywoÅ‚ane w tym kontekÅ›cie; zignorowano" -#: debug.c:5374 +#: debug.c:5389 msgid "`return' not allowed in current context; statement ignored" -msgstr "" -"instrukcja `return' nie może być wywoÅ‚ana w tym kontekÅ›cie; zignorowano" +msgstr "instrukcja `return' nie może być wywoÅ‚ana w tym kontekÅ›cie; zignorowano" -#: debug.c:5575 +#: debug.c:5590 #, c-format msgid "No symbol `%s' in current context" msgstr "Brak symbolu `%s' w bieżącym kontekÅ›cie" #: 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:1192 +#: dfa.c:1106 dfa.c:1111 dfa.c:1124 dfa.c:1191 msgid "unbalanced [" msgstr "[ nie do pary" @@ -1783,31 +1744,31 @@ msgstr "[ nie do pary" msgid "invalid character class" msgstr "nieprawidÅ‚owa klasa znaku" -#: dfa.c:1229 +#: dfa.c:1228 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "skÅ‚adnia klasy znaku to [[:space:]], a nie [:space:]" -#: dfa.c:1281 +#: dfa.c:1280 msgid "unfinished \\ escape" msgstr "niedokoÅ„czona sekwencja ucieczki \\" -#: dfa.c:1428 regcomp.c:161 +#: dfa.c:1427 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "NieprawidÅ‚owa zawartość \\{\\}" -#: dfa.c:1431 regcomp.c:176 +#: dfa.c:1430 regcomp.c:176 msgid "Regular expression too big" msgstr "Wyrażenie regularne jest zbyt duże" -#: dfa.c:1816 +#: dfa.c:1847 msgid "unbalanced (" msgstr "( nie do pary" -#: dfa.c:1943 +#: dfa.c:1973 msgid "no syntax specified" msgstr "nie podano skÅ‚adni" -#: dfa.c:1951 +#: dfa.c:1981 msgid "unbalanced )" msgstr ") nie do pary" @@ -1826,11 +1787,11 @@ msgstr "nieznany opcode %d" msgid "opcode %s not an operator or keyword" msgstr "opcode %s nie jest operatorem ani sÅ‚owem kluczowym" -#: eval.c:471 +#: eval.c:472 msgid "buffer overflow in genflags2str" msgstr "przepeÅ‚nienie bufora w genflags2str" -#: eval.c:674 +#: eval.c:675 #, c-format msgid "" "\n" @@ -1841,73 +1802,71 @@ msgstr "" "\t# Stos WywoÅ‚awczy Funkcji:\n" "\n" -#: eval.c:703 +#: eval.c:704 msgid "`IGNORECASE' is a gawk extension" msgstr "`IGNORECASE' jest rozszerzeniem gawk" -#: eval.c:735 +#: eval.c:736 msgid "`BINMODE' is a gawk extension" msgstr "`BINMODE' jest rozszerzeniem gawk" -#: eval.c:793 +#: eval.c:794 #, 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:884 +#: eval.c:885 #, c-format msgid "bad `%sFMT' specification `%s'" msgstr "zÅ‚a specyfikacja `%sFMT' `%s'" -#: eval.c:968 +#: eval.c:969 msgid "turning off `--lint' due to assignment to `LINT'" msgstr "wyłączenie `--lint' z powodu przypisania do `LINT'" -#: eval.c:1146 +#: eval.c:1147 #, c-format msgid "reference to uninitialized argument `%s'" msgstr "odwoÅ‚anie do niezainicjowanego argumentu `%s'" -#: eval.c:1147 +#: eval.c:1148 #, c-format msgid "reference to uninitialized variable `%s'" msgstr "odwoÅ‚anie do niezainicjowanej zmiennej `%s'" -#: eval.c:1165 +#: eval.c:1166 msgid "attempt to field reference from non-numeric value" msgstr "próba odwoÅ‚ania do pola poprzez nienumerycznÄ… wartość" -#: eval.c:1167 +#: eval.c:1168 msgid "attempt to field reference from null string" msgstr "próba odwoÅ‚ania z zerowego Å‚aÅ„cucha" -#: eval.c:1175 +#: eval.c:1176 #, c-format msgid "attempt to access field %ld" msgstr "próba dostÄ™pu do pola %ld" -#: eval.c:1184 +#: eval.c:1185 #, c-format msgid "reference to uninitialized field `$%ld'" msgstr "odwoÅ‚anie do niezainicjowanego pola `$%ld'" -#: eval.c:1271 +#: eval.c:1272 #, 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" +msgstr "funkcja `%s' zostaÅ‚a wywoÅ‚ana z wiÄ™kszÄ… iloÅ›ciÄ… argumentów niż zostaÅ‚o to zadeklarowane" -#: eval.c:1466 +#: eval.c:1473 #, c-format msgid "unwind_stack: unexpected type `%s'" msgstr "unwind_stack: niespodziewany typ `%s'" -#: eval.c:1562 +#: eval.c:1569 msgid "division by zero attempted in `/='" msgstr "próba dzielenia przez zero w `/='" -#: eval.c:1569 +#: eval.c:1576 #, c-format msgid "division by zero attempted in `%%='" msgstr "próba dzielenia przez zero w `%%='" @@ -1920,7 +1879,7 @@ msgstr "rozszerzenia nie sÄ… dozwolone w trybie piaskownicy" msgid "-l / @load are gawk extensions" msgstr "-l / @load sÄ… rozszerzeniami gawk" -#: ext.c:95 ext.c:177 +#: ext.c:95 msgid "load_ext: received NULL lib_name" msgstr "load_ext: otrzymano NULL lib_name" @@ -1931,10 +1890,8 @@ msgstr "load_ext: nie można otworzyć biblioteki `%s' (%s)\n" #: ext.c:104 #, 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" +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 #, c-format @@ -1944,13 +1901,16 @@ msgstr "load_ext: biblioteka `%s': nie można wywoÅ‚ać funkcji `%s' (%s)\n" #: ext.c:114 #, 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" +msgstr "load_ext: funkcja inicjalizujÄ…ca `%s' biblioteki `%s' nie powiodÅ‚a siÄ™\n" #: ext.c:174 msgid "`extension' is a gawk extension" msgstr "`extension' jest rozszerzeniem gawk" +#: ext.c:177 +msgid "extension: received NULL lib_name" +msgstr "extension: otrzymano NULL lib_name" + #: ext.c:180 #, c-format msgid "extension: cannot open library `%s' (%s)" @@ -1958,10 +1918,8 @@ msgstr "extension: nie można otworzyć biblioteki `%s' (%s)" #: ext.c:186 #, 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)" +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 #, c-format @@ -1972,36 +1930,36 @@ msgstr "extension: biblioteka `%s': nie można wywoÅ‚ać funkcji `%s' (%s)" msgid "make_builtin: missing function name" msgstr "make_builtin: brakujÄ…ca nazwa funkcji" -#: ext.c:238 +#: ext.c:236 #, c-format msgid "make_builtin: can't redefine function `%s'" msgstr "make_builtin: nie można zredefiniować funkcji `%s'" -#: ext.c:242 +#: ext.c:240 #, c-format msgid "make_builtin: function `%s' already defined" msgstr "make_builtin: funkcja `%s' zostaÅ‚a już zdefiniowana" -#: ext.c:246 +#: ext.c:244 #, c-format msgid "make_builtin: function name `%s' previously defined" msgstr "make_builtin: nazwa funkcji `%s' zostaÅ‚a zdefiniowana wczeÅ›niej" -#: ext.c:248 +#: ext.c:246 #, 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:251 ext.c:304 +#: ext.c:249 ext.c:304 #, c-format msgid "make_builtin: negative argument count for function `%s'" msgstr "make_builtin: ujemny licznik argumentów dla funkcji `%s'" -#: ext.c:278 +#: ext.c:276 msgid "extension: missing function name" msgstr "extension: brakujÄ…ca nazwa funkcji" -#: ext.c:283 +#: ext.c:279 ext.c:283 #, c-format msgid "extension: illegal character `%c' in function name `%s'" msgstr "extension: nieprawidÅ‚owy znak `%c' w nazwie funkcji `%s'" @@ -2026,139 +1984,143 @@ msgstr "extension: nazwa funkcji `%s' zostaÅ‚a zdefiniowana wczeÅ›niej" 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:374 +#: ext.c:375 #, 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:377 +#: ext.c:378 #, c-format msgid "function `%s': missing argument #%d" msgstr "funkcja `%s': brakuje #%d argumentu" -#: ext.c:394 +#: ext.c:395 #, 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:398 +#: ext.c:399 #, 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:412 +#: ext.c:413 msgid "dynamic loading of library not supported" msgstr "dynamiczne Å‚adowanie biblioteki nie jest wspierane" -#: extension/filefuncs.c:97 +#: extension/filefuncs.c:159 msgid "chdir: called with incorrect number of arguments, expecting 1" msgstr "chdir: wywoÅ‚ano z nieprawidÅ‚owÄ… iloÅ›ciÄ… argumentów, spodziewano siÄ™ 1" -#: extension/filefuncs.c:343 +#: extension/filefuncs.c:439 #, c-format msgid "stat: unable to read symbolic link `%s'" msgstr "stat: nie można odczytać dowiÄ…zania symbolicznego `%s'" -#: extension/filefuncs.c:376 +#: extension/filefuncs.c:472 msgid "stat: called with wrong number of arguments" msgstr "stat: wywoÅ‚ano z nieprawidÅ‚owÄ… iloÅ›ciÄ… argumentów" -#: extension/filefuncs.c:383 +#: extension/filefuncs.c:479 msgid "stat: bad parameters" msgstr "stat: zÅ‚e parametry" -#: extension/filefuncs.c:437 +#: extension/filefuncs.c:533 #, c-format msgid "fts init: could not create variable %s" msgstr "fts init: nie można utworzyć zmiennej %s" -#: extension/filefuncs.c:460 +#: extension/filefuncs.c:554 +msgid "fts is not supported on this system" +msgstr "funkcja fts nie jest wspierana w tym systemie" + +#: extension/filefuncs.c:573 msgid "fill_stat_element: could not create array" msgstr "fill_stat_element: nie można utworzyć tablicy" -#: extension/filefuncs.c:469 +#: extension/filefuncs.c:582 msgid "fill_stat_element: could not set element" msgstr "fill_stat_element: nie można ustawić elementu" -#: extension/filefuncs.c:484 +#: extension/filefuncs.c:597 msgid "fill_path_element: could not set element" msgstr "fill_path_element: nie można ustawić elementu" -#: extension/filefuncs.c:500 +#: extension/filefuncs.c:613 msgid "fill_error_element: could not set element" msgstr "fill_error_element: nie można ustawić elementu" -#: extension/filefuncs.c:547 extension/filefuncs.c:594 +#: extension/filefuncs.c:660 extension/filefuncs.c:707 msgid "fts-process: could not create array" msgstr "fts-process: nie można utworzyć tablicy" -#: extension/filefuncs.c:557 extension/filefuncs.c:604 -#: extension/filefuncs.c:622 +#: extension/filefuncs.c:670 extension/filefuncs.c:717 +#: extension/filefuncs.c:735 msgid "fts-process: could not set element" msgstr "fts-process: nie można ustawić elementu" -#: extension/filefuncs.c:671 +#: extension/filefuncs.c:784 msgid "fts: called with incorrect number of arguments, expecting 3" msgstr "fts: wywoÅ‚ano z nieprawidÅ‚owÄ… iloÅ›ciÄ… argumentów, powinny być 3" -#: extension/filefuncs.c:674 +#: extension/filefuncs.c:787 msgid "fts: bad first parameter" msgstr "fts: nieprawidÅ‚owy pierwszy parametr" -#: extension/filefuncs.c:680 +#: extension/filefuncs.c:793 msgid "fts: bad second parameter" msgstr "fts: nieprawidÅ‚owy drugi parametr" -#: extension/filefuncs.c:686 +#: extension/filefuncs.c:799 msgid "fts: bad third parameter" msgstr "fts: nieprawidÅ‚owy trzeci parametr" -#: extension/filefuncs.c:693 +#: extension/filefuncs.c:806 msgid "fts: could not flatten array\n" msgstr "fts: nie można spÅ‚aszczyć tablicy\n" -#: extension/filefuncs.c:711 +#: extension/filefuncs.c:824 msgid "fts: ignoring sneaky FTS_NOSTAT flag. nyah, nyah, nyah." msgstr "fts: zignorowano flagÄ™ FTS_NOSTAT. nyah, nyah, nyah." -#: extension/filefuncs.c:728 +#: extension/filefuncs.c:841 msgid "fts: clear_array() failed\n" msgstr "fts: clear_array() nie powiodÅ‚a siÄ™\n" -#: extension/fnmatch.c:98 +#: extension/fnmatch.c:112 msgid "fnmatch: called with less than three arguments" msgstr "fnmatch: wywoÅ‚ano z mniej niż trzema argumentami" -#: extension/fnmatch.c:101 +#: extension/fnmatch.c:115 msgid "fnmatch: called with more than three arguments" msgstr "fnmatch: wywoÅ‚ano z wiÄ™cej niż trzema argumentami" -#: extension/fnmatch.c:104 +#: extension/fnmatch.c:118 msgid "fnmatch: could not get first argument" msgstr "fnmatch: nie można pobrać pierwszego argumentu" -#: extension/fnmatch.c:109 +#: extension/fnmatch.c:123 msgid "fnmatch: could not get second argument" msgstr "fnmatch: nie można pobrać drugiego argumentu" -#: extension/fnmatch.c:114 +#: extension/fnmatch.c:128 msgid "fnmatch: could not get third argument" msgstr "fnmatch: nie można pobrać trzeciego argumentu" -#: extension/fnmatch.c:127 +#: extension/fnmatch.c:141 msgid "fnmatch is not implemented on this system\n" msgstr "funkcja fnmatch nie zostaÅ‚a zaimplementowana w tym systemie\n" -#: extension/fnmatch.c:159 +#: extension/fnmatch.c:173 msgid "fnmatch init: could not add FNM_NOMATCH variable" msgstr "fnmatch init: nie można byÅ‚o dodać zmiennej FNM_NOMATCH" -#: extension/fnmatch.c:169 +#: extension/fnmatch.c:183 #, c-format msgid "fnmatch init: could not set array element %s" msgstr "fnmatch init: nie można byÅ‚o ustawić elementu tablicy %s" -#: extension/fnmatch.c:179 +#: extension/fnmatch.c:193 msgid "fnmatch init: could not install FNM array" msgstr "fnmatch init: nie można byÅ‚o zainstalować tablicy FNM" @@ -2182,90 +2144,88 @@ msgstr "wait: wywoÅ‚ano bez argumentów" msgid "wait: called with too many arguments" msgstr "wait: wywoÅ‚ana ze zbyt dużą iloÅ›ciÄ… argumentów" -#: extension/inplace.c:110 +#: extension/inplace.c:130 msgid "inplace_begin: in-place editing already active" msgstr "inplace_begin: edycja w miejscu jest już aktywna" -#: extension/inplace.c:113 extension/inplace.c:187 +#: extension/inplace.c:133 extension/inplace.c:207 #, c-format msgid "inplace_begin: expects 2 arguments but called with %d" msgstr "inplace_begin: spodziewano siÄ™ 2 argumentów, a otrzymano %d" -#: extension/inplace.c:116 +#: extension/inplace.c:136 msgid "inplace_begin: cannot retrieve 1st argument as a string filename" msgstr "inplace_begin: nie można pobrać pierwszego argumentu jako nazwy pliku" -#: extension/inplace.c:124 +#: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" -msgstr "" -"inplace_begin: wyłączenie edycji w miejscu dla nieprawidÅ‚owej nazwy pliku `" -"%s'" +msgstr "inplace_begin: wyłączenie edycji w miejscu dla nieprawidÅ‚owej nazwy pliku `%s'" -#: extension/inplace.c:131 +#: extension/inplace.c:151 #, c-format msgid "inplace_begin: Cannot stat `%s' (%s)" msgstr "inplace_begin: nie można sprawdzić `%s' (%s)" -#: extension/inplace.c:138 +#: extension/inplace.c:158 #, c-format msgid "inplace_begin: `%s' is not a regular file" msgstr "inplace_begin: `%s' nie jest zwykÅ‚ym plikiem" -#: extension/inplace.c:149 +#: extension/inplace.c:169 #, c-format msgid "inplace_begin: mkstemp(`%s') failed (%s)" msgstr "inplace_begin: wywoÅ‚anie mkstemp(`%s') nie powiodÅ‚o siÄ™ (%s)" -#: extension/inplace.c:158 +#: extension/inplace.c:178 #, c-format msgid "inplace_begin: chmod failed (%s)" msgstr "inplace_begin: funkcja chmod nie powiodÅ‚a siÄ™ (%s)" -#: extension/inplace.c:165 +#: extension/inplace.c:185 #, c-format msgid "inplace_begin: dup(stdout) failed (%s)" msgstr "inplace_begin: wywoÅ‚anie dup(stdout) nie powiodÅ‚o siÄ™ (%s)" -#: extension/inplace.c:168 +#: extension/inplace.c:188 #, 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:171 +#: extension/inplace.c:191 #, c-format msgid "inplace_begin: close(%d) failed (%s)" msgstr "inplace_begin: wywoÅ‚anie close(%d) nie powiodÅ‚o siÄ™ (%s)" -#: extension/inplace.c:190 +#: extension/inplace.c:210 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:197 +#: extension/inplace.c:217 msgid "inplace_end: in-place editing not active" msgstr "inplace_end: edycja w miejscu nie jest aktywna" -#: extension/inplace.c:203 +#: extension/inplace.c:223 #, 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:206 +#: extension/inplace.c:226 #, c-format msgid "inplace_end: close(%d) failed (%s)" msgstr "inplace_end: wywoÅ‚anie close(%d) nie powiodÅ‚o siÄ™ (%s)" -#: extension/inplace.c:210 +#: extension/inplace.c:230 #, c-format msgid "inplace_end: fsetpos(stdout) failed (%s)" msgstr "inplace_end: wywoÅ‚anie fsetpos(stdout) nie powiodÅ‚o siÄ™ (%s)" -#: extension/inplace.c:223 +#: extension/inplace.c:243 #, 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:229 +#: extension/inplace.c:253 #, c-format msgid "inplace_end: rename(`%s', `%s') failed (%s)" msgstr "inplace_end: wywoÅ‚anie rename(`%s', `%s') nie powiodÅ‚o siÄ™ (%s)" @@ -2294,7 +2254,7 @@ msgstr "chr: wywoÅ‚ano bez argumentów" msgid "chr: called with inappropriate argument(s)" msgstr "chr: wywoÅ‚ano z nieprawidÅ‚owymi argumentami" -#: extension/readdir.c:203 +#: extension/readdir.c:277 #, c-format msgid "dir_take_control_of: opendir/fdopendir failed: %s" msgstr "dir_take_control_of: wywoÅ‚anie opendir/fdopendir nie powiodÅ‚o siÄ™: %s" @@ -2307,160 +2267,152 @@ 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:120 +#: extension/rwarray.c:124 msgid "writea: called with too many arguments" msgstr "writea: wywoÅ‚ana ze zbyt dużą iloÅ›ciÄ… argumentów" -#: extension/rwarray.c:127 +#: extension/rwarray.c:131 #, c-format msgid "do_writea: argument 0 is not a string\n" msgstr "do_writea: argument 0 nie jest tekstem\n" -#: extension/rwarray.c:133 +#: extension/rwarray.c:137 #, c-format msgid "do_writea: argument 1 is not an array\n" msgstr "do_writea: argument 1 nie jest tablicÄ…\n" -#: extension/rwarray.c:180 +#: extension/rwarray.c:184 #, c-format msgid "write_array: could not flatten array\n" msgstr "write_array: nie można spÅ‚aszczyć tablicy\n" -#: extension/rwarray.c:194 +#: extension/rwarray.c:198 #, 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:276 +#: extension/rwarray.c:280 msgid "reada: called with too many arguments" msgstr "reada: wywoÅ‚ana ze zbyt dużą iloÅ›ciÄ… argumentów" -#: extension/rwarray.c:283 +#: extension/rwarray.c:287 #, c-format msgid "do_reada: argument 0 is not a string\n" msgstr "do_reada: argument 0 nie jest tekstem\n" -#: extension/rwarray.c:289 +#: extension/rwarray.c:293 #, c-format msgid "do_reada: argument 1 is not an array\n" msgstr "do_reada: argument 1 nie jest tablicÄ…\n" -#: extension/rwarray.c:333 +#: extension/rwarray.c:337 #, c-format msgid "do_reada: clear_array failed\n" msgstr "do_reada: clear_array nie powiodÅ‚a siÄ™\n" -#: extension/rwarray.c:370 +#: extension/rwarray.c:374 #, c-format msgid "read_array: set_array_element failed\n" msgstr "read_array: set_array_element nie powiodÅ‚a siÄ™\n" -#: extension/time.c:81 +#: extension/time.c:106 msgid "gettimeofday: ignoring arguments" msgstr "gettimeofday: zignorowano argumenty" -#: extension/time.c:112 +#: extension/time.c:137 msgid "gettimeofday: not supported on this platform" msgstr "gettimeofday: funkcja nie jest wspierana na tej platformie" -#: extension/time.c:133 +#: extension/time.c:158 msgid "sleep: called with too many arguments" msgstr "sleep: wywoÅ‚ana ze zbyt dużą iloÅ›ciÄ… argumentów" -#: extension/time.c:136 +#: extension/time.c:161 msgid "sleep: missing required numeric argument" msgstr "sleep: brakuje wymaganego argumentu numerycznego" -#: extension/time.c:142 +#: extension/time.c:167 msgid "sleep: argument is negative" msgstr "sleep: argument jest ujemny" -#: extension/time.c:176 +#: extension/time.c:201 msgid "sleep: not supported on this platform" msgstr "sleep: funkcja nie jest wspierana na tej platformie" -#: field.c:339 +#: field.c:345 msgid "NF set to negative value" msgstr "NF ustawiony na wartość ujemnÄ…" -#: field.c:964 field.c:971 field.c:975 +#: field.c:971 field.c:978 field.c:982 msgid "split: fourth argument is a gawk extension" msgstr "split: czwarty argument jest rozszerzeniem gawk" -#: field.c:968 +#: field.c:975 msgid "split: fourth argument is not an array" msgstr "split: czwarty argument nie jest tablicÄ…" -#: field.c:982 +#: field.c:989 msgid "split: second argument is not an array" msgstr "split: drugi argument nie jest tablicÄ…" -#: field.c:986 +#: field.c:993 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" +msgstr "split: nie można użyć tej samej tablicy dla drugiego i czwartego argumentu" -#: field.c:991 +#: field.c:998 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" +msgstr "split: nie można użyć podtablicy drugiego argumentu dla czwartego argumentu" -#: field.c:994 +#: field.c:1001 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" +msgstr "split: nie można użyć podtablicy czwartego argumentu dla drugiego argumentu" -#: field.c:1023 +#: field.c:1032 msgid "split: null string for third arg is a gawk extension" msgstr "split: zerowy Å‚aÅ„cuch dla trzeciego argumentu jest rozszerzeniem gawk" -#: field.c:1063 +#: field.c:1072 msgid "patsplit: fourth argument is not an array" msgstr "patsplit: czwarty argument nie jest tablicÄ…" -#: field.c:1068 +#: field.c:1077 msgid "patsplit: second argument is not an array" msgstr "patsplit: drugi argument nie jest tablicÄ…" -#: field.c:1074 +#: field.c:1083 msgid "patsplit: third argument must be non-null" msgstr "patsplit: trzeci argument nie może być pusty" -#: field.c:1078 +#: field.c:1087 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" +msgstr "patsplit: nie można użyć tej samej tablicy dla drugiego i czwartego argumentu" -#: field.c:1083 +#: field.c:1092 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" +msgstr "patsplit: nie można użyć podtablicy drugiego argumentu dla czwartego argumentu" -#: field.c:1086 +#: field.c:1095 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" +msgstr "patsplit: nie można użyć podtablicy czwartego argumentu dla drugiego argumentu" -#: field.c:1124 +#: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" msgstr "`FIELDWIDTHS' jest rozszerzeniem gawk" -#: field.c:1188 +#: field.c:1197 #, c-format msgid "invalid FIELDWIDTHS value, near `%s'" msgstr "nieprawidÅ‚owa wartość FIELDWIDTHS, w pobliżu `%s'" -#: field.c:1261 +#: field.c:1270 msgid "null string for `FS' is a gawk extension" msgstr "zerowy Å‚aÅ„cuch dla `FS' jest rozszerzeniem gawk" -#: field.c:1265 +#: field.c:1274 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:1384 +#: field.c:1393 msgid "`FPAT' is a gawk extension" msgstr "`FPAT' jest rozszerzeniem gawk" @@ -2484,597 +2436,565 @@ msgstr "remove_element: otrzymano tablicÄ™ null" msgid "remove_element: received null subscript" msgstr "remove_element: otrzymano null subscript" -#: gawkapi.c:943 +#: gawkapi.c:948 #, 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:948 +#: gawkapi.c:953 #, 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" -#: getopt.c:603 getopt.c:632 +#: getopt.c:604 getopt.c:633 #, c-format msgid "%s: option '%s' is ambiguous; possibilities:" msgstr "%s: opcja '%s' jest niejednoznaczna; możliwoÅ›ci:" -#: getopt.c:678 getopt.c:682 +#: getopt.c:679 getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: opcja '--%s' nie może mieć argumentów\n" -#: getopt.c:691 getopt.c:696 +#: getopt.c:692 getopt.c:697 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: opcja '%c%s' nie może mieć argumentów\n" -#: getopt.c:739 getopt.c:758 +#: getopt.c:740 getopt.c:759 #, c-format msgid "%s: option '--%s' requires an argument\n" msgstr "%s: opcja '--%s' wymaga argumentu\n" -#: getopt.c:796 getopt.c:799 +#: getopt.c:797 getopt.c:800 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: nieznana opcja '--%s'\n" -#: getopt.c:807 getopt.c:810 +#: getopt.c:808 getopt.c:811 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: nieznana opcja '%c%s'\n" -#: getopt.c:859 getopt.c:862 +#: getopt.c:860 getopt.c:863 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: błędna opcja -- '%c'\n" -#: getopt.c:915 getopt.c:932 getopt.c:1142 getopt.c:1160 +#: getopt.c:916 getopt.c:933 getopt.c:1143 getopt.c:1161 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: opcja wymaga argumentu -- '%c'\n" -#: getopt.c:988 getopt.c:1004 +#: getopt.c:989 getopt.c:1005 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: opcja '-W %s' jest niejednoznaczna\n" -#: getopt.c:1028 getopt.c:1046 +#: getopt.c:1029 getopt.c:1047 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: opcja '-W %s' nie może mieć argumentów\n" -#: getopt.c:1067 getopt.c:1085 +#: getopt.c:1068 getopt.c:1086 #, c-format msgid "%s: option '-W %s' requires an argument\n" msgstr "%s: opcja '-W %s' wymaga argumentu\n" -#: io.c:347 +#: io.c:392 #, c-format msgid "command line argument `%s' is a directory: skipped" msgstr "argument linii poleceÅ„ `%s' jest katalogiem: pominiÄ™to" -#: io.c:350 io.c:463 +#: io.c:395 io.c:513 #, c-format msgid "cannot open file `%s' for reading (%s)" msgstr "nie można otworzyć pliku `%s' do czytania (%s)" -#: io.c:590 +#: io.c:640 #, c-format msgid "close of fd %d (`%s') failed (%s)" msgstr "zamkniÄ™cie fd %d (`%s') nie powiodÅ‚o siÄ™ (%s)" -#: io.c:666 +#: io.c:716 msgid "redirection not allowed in sandbox mode" msgstr "przekierowanie nie jest dozwolone w trybie piaskownicy" -#: io.c:700 +#: io.c:750 #, c-format msgid "expression in `%s' redirection only has numeric value" msgstr "wyrażenie w przekierowaniu `%s' ma tylko wartość numerycznÄ…" -#: io.c:706 +#: io.c:756 #, c-format msgid "expression for `%s' redirection has null string value" msgstr "wyrażenie dla przekierowania `%s' ma zerowÄ… wartość Å‚aÅ„cucha" -#: io.c:711 +#: io.c:761 #, 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" +msgstr "nazwa pliku `%s' dla przekierowania `%s' może być rezultatem logicznego wyrażenia" -#: io.c:754 +#: io.c:809 #, c-format msgid "unnecessary mixing of `>' and `>>' for file `%.*s'" msgstr "niepotrzebne mieszanie `>' i `>>' dla pliku `%.*s'" -#: io.c:808 +#: io.c:863 #, c-format msgid "can't open pipe `%s' for output (%s)" msgstr "nie można otworzyć potoku `%s' jako wyjÅ›cia (%s)" -#: io.c:818 +#: io.c:873 #, c-format msgid "can't open pipe `%s' for input (%s)" msgstr "nie można otworzyć potoku `%s' jako wejÅ›cia (%s)" -#: io.c:849 +#: io.c:904 #, 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)" +msgstr "nie można otworzyć dwukierunkowego potoku `%s' jako wejÅ›cia/wyjÅ›cia (%s)" -#: io.c:928 +#: io.c:986 #, c-format msgid "can't redirect from `%s' (%s)" msgstr "nie można przekierować z `%s' (%s)" -#: io.c:931 +#: io.c:989 #, c-format msgid "can't redirect to `%s' (%s)" msgstr "nie można przekierować do `%s' (%s)" -#: io.c:982 -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:1040 +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:998 +#: io.c:1056 #, c-format msgid "close of `%s' failed (%s)." msgstr "zamkniÄ™cie `%s' nie powiodÅ‚o siÄ™ (%s)." -#: io.c:1006 +#: io.c:1064 msgid "too many pipes or input files open" msgstr "zbyt dużo otwartych potoków lub plików wejÅ›ciowych" -#: io.c:1028 +#: io.c:1086 msgid "close: second argument must be `to' or `from'" msgstr "close: drugim argumentem musi być `to' lub `from'" -#: io.c:1045 +#: io.c:1103 #, 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" +msgstr "close: `%.*s' nie jest ani otwartym plikiem, ani potokiem, ani procesem" -#: io.c:1050 +#: io.c:1108 msgid "close of redirection that was never opened" msgstr "zamkniÄ™cie przekierowania, które nigdy nie zostaÅ‚o otwarte" -#: io.c:1147 +#: io.c:1205 #, c-format msgid "close: redirection `%s' not opened with `|&', second argument ignored" -msgstr "" -"close: przekierowanie `%s' nie zostaÅ‚o otwarte z `|&', drugi argument " -"zignorowany" +msgstr "close: przekierowanie `%s' nie zostaÅ‚o otwarte z `|&', drugi argument zignorowany" -#: io.c:1164 +#: io.c:1222 #, c-format msgid "failure status (%d) on pipe close of `%s' (%s)" msgstr "status awarii (%d) podczas zamykania potoku `%s' (%s)" -#: io.c:1167 +#: io.c:1225 #, c-format msgid "failure status (%d) on file close of `%s' (%s)" msgstr "status awarii (%d) podczas zamykania pliku `%s' (%s)" -#: io.c:1187 +#: io.c:1245 #, c-format msgid "no explicit close of socket `%s' provided" msgstr "brak jawnego zamkniÄ™cia gniazdka `%s'" -#: io.c:1190 +#: io.c:1248 #, c-format msgid "no explicit close of co-process `%s' provided" msgstr "brak jawnego zamkniÄ™cia procesu pomocniczego `%s'" -#: io.c:1193 +#: io.c:1251 #, c-format msgid "no explicit close of pipe `%s' provided" msgstr "brak jawnego zamkniÄ™cia potoku `%s'" -#: io.c:1196 +#: io.c:1254 #, c-format msgid "no explicit close of file `%s' provided" msgstr "brak jawnego zamkniÄ™cia pliku `%s'" -#: io.c:1224 io.c:1279 main.c:842 main.c:879 +#: io.c:1284 io.c:1342 main.c:864 main.c:906 #, c-format msgid "error writing standard output (%s)" msgstr "błąd podczas zapisu na standardowe wyjÅ›cie (%s)" -#: io.c:1228 io.c:1284 +#: io.c:1289 io.c:1348 main.c:866 #, c-format msgid "error writing standard error (%s)" msgstr "błąd podczas zapisu na standardowe wyjÅ›cie diagnostyczne (%s)" -#: io.c:1236 +#: io.c:1297 #, c-format msgid "pipe flush of `%s' failed (%s)." msgstr "opróżnienie potoku `%s' nie powiodÅ‚o siÄ™ (%s)." -#: io.c:1239 +#: io.c:1300 #, 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)." +msgstr "opróżnienie potoku do `%s' przez proces pomocniczy nie powiodÅ‚o siÄ™ (%s)." -#: io.c:1242 +#: io.c:1303 #, c-format msgid "file flush of `%s' failed (%s)." msgstr "opróżnienie pliku `%s' nie powiodÅ‚o siÄ™ (%s)." -#: io.c:1356 +#: io.c:1420 #, c-format msgid "local port %s invalid in `/inet'" msgstr "nieprawidÅ‚owy lokalny port %s w `/inet'" -#: io.c:1374 +#: io.c:1438 #, 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:1526 +#: 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:1540 +#: io.c:1604 #, c-format msgid "special file name `%s' is incomplete" msgstr "specjalna nazwa pliku `%s' jest niekompletna" -#: io.c:1557 +#: io.c:1621 msgid "must supply a remote hostname to `/inet'" msgstr "należy dostarczyć nazwÄ™ zdalnego hosta do `/inet'" -#: io.c:1575 +#: io.c:1639 msgid "must supply a remote port to `/inet'" msgstr "należy dostarczyć numer zdalnego portu do `/inet'" -#: io.c:1621 +#: io.c:1685 msgid "TCP/IP communications are not supported" msgstr "Komunikacja TCP/IP nie jest wspierana" -#: io.c:1796 +#: io.c:1867 #, c-format msgid "could not open `%s', mode `%s'" msgstr "nie można otworzyć `%s', tryb `%s'" -#: io.c:1846 +#: io.c:1917 #, c-format msgid "close of master pty failed (%s)" msgstr "zamkniÄ™cie nadrzÄ™dnego pty nie powiodÅ‚o siÄ™ (%s)" -#: io.c:1848 io.c:2024 io.c:2194 +#: io.c:1919 io.c:2105 io.c:2305 #, c-format msgid "close of stdout in child failed (%s)" -msgstr "" -"zamkniÄ™cie standardowego wyjÅ›cia w procesie potomnym nie powiodÅ‚o siÄ™ (%s)" +msgstr "zamkniÄ™cie standardowego wyjÅ›cia w procesie potomnym nie powiodÅ‚o siÄ™ (%s)" -#: io.c:1851 +#: io.c:1922 #, 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)" +msgstr "przesuniÄ™cie podlegÅ‚ego pty na standardowe wyjÅ›cie w procesie potomnym nie powiodÅ‚o siÄ™ (dup: %s)" -#: io.c:1853 io.c:2029 +#: io.c:1924 io.c:2110 #, c-format msgid "close of stdin in child failed (%s)" -msgstr "" -"zamkniÄ™cie standardowego wejÅ›cia w procesie potomnym nie powiodÅ‚o siÄ™ (%s)" +msgstr "zamkniÄ™cie standardowego wejÅ›cia w procesie potomnym nie powiodÅ‚o siÄ™ (%s)" -#: io.c:1856 +#: io.c:1927 #, 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)" +msgstr "przesuniÄ™cie podlegÅ‚ego pty na standardowe wejÅ›cie w procesie potomnym nie powiodÅ‚o siÄ™ (dup: %s)" -#: io.c:1858 io.c:1879 +#: io.c:1929 io.c:1951 #, c-format msgid "close of slave pty failed (%s)" msgstr "zamkniÄ™cie podlegÅ‚ego pty nie powiodÅ‚o siÄ™ (%s)" -#: io.c:1965 io.c:2027 io.c:2171 io.c:2197 +#: io.c:2040 io.c:2108 io.c:2276 io.c:2308 #, 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)" +msgstr "przesuniÄ™cie potoku na standardowe wyjÅ›cie w procesie potomnym nie powiodÅ‚o siÄ™ (dup: %s)" -#: io.c:1972 io.c:2032 +#: io.c:2047 io.c:2113 #, 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)" +msgstr "przesuniÄ™cie potoku na standardowe wejÅ›cie w procesie potomnym nie powiodÅ‚o siÄ™ (dup: %s)" -#: io.c:1992 io.c:2187 +#: io.c:2073 io.c:2298 msgid "restoring stdout in parent process failed\n" -msgstr "" -"odzyskanie standardowego wyjÅ›cia w procesie potomnym nie powiodÅ‚o siÄ™\n" +msgstr "odzyskanie standardowego wyjÅ›cia w procesie potomnym nie powiodÅ‚o siÄ™\n" -#: io.c:2000 +#: io.c:2081 msgid "restoring stdin in parent process failed\n" -msgstr "" -"odzyskanie standardowego wejÅ›cia w procesie potomnym nie powiodÅ‚o siÄ™\n" +msgstr "odzyskanie standardowego wejÅ›cia w procesie potomnym nie powiodÅ‚o siÄ™\n" -#: io.c:2035 io.c:2199 io.c:2213 +#: io.c:2116 io.c:2310 io.c:2324 #, c-format msgid "close of pipe failed (%s)" msgstr "zamkniÄ™cie potoku nie powiodÅ‚o siÄ™ (%s)" -#: io.c:2089 +#: io.c:2174 msgid "`|&' not supported" msgstr "`|&' nie jest wspierany" -#: io.c:2156 +#: io.c:2261 #, c-format msgid "cannot open pipe `%s' (%s)" msgstr "nie można otworzyć potoku `%s' (%s)" -#: io.c:2207 +#: io.c:2318 #, c-format msgid "cannot create child process for `%s' (fork: %s)" msgstr "nie można utworzyć procesu potomnego dla `%s' (fork: %s)" -#: io.c:2667 +#: io.c:2790 msgid "register_input_parser: received NULL pointer" msgstr "register_input_parser: otrzymano wskaźnik NULL" -#: io.c:2695 +#: io.c:2818 #, c-format msgid "input parser `%s' conflicts with previously installed input parser `%s'" -msgstr "" -"parser wejÅ›cia `%s' konfliktuje z poprzednio zainstalowanym parserem `%s'" +msgstr "parser wejÅ›cia `%s' konfliktuje z poprzednio zainstalowanym parserem `%s'" -#: io.c:2702 +#: io.c:2825 #, c-format msgid "input parser `%s' failed to open `%s'" msgstr "parser wejÅ›cia `%s': nie powiodÅ‚o siÄ™ otwarcie `%s'" -#: io.c:2722 +#: io.c:2845 msgid "register_output_wrapper: received NULL pointer" msgstr "register_output_wrapper: otrzymano wskaźnik NULL" -#: io.c:2750 +#: io.c:2873 #, c-format -msgid "" -"output wrapper `%s' conflicts with previously installed output wrapper `%s'" -msgstr "" -"otoczka wyjÅ›cia `%s' konfliktuje z poprzednio zainstalowanÄ… otoczkÄ… `%s'" +msgid "output wrapper `%s' conflicts with previously installed output wrapper `%s'" +msgstr "otoczka wyjÅ›cia `%s' konfliktuje z poprzednio zainstalowanÄ… otoczkÄ… `%s'" -#: io.c:2757 +#: io.c:2880 #, c-format msgid "output wrapper `%s' failed to open `%s'" msgstr "otoczka wyjÅ›cia `%s': nie powiodÅ‚o siÄ™ otwarcie `%s'" -#: io.c:2778 +#: io.c:2901 msgid "register_output_processor: received NULL pointer" msgstr "register_output_processor: otrzymano wskaźnik NULL" -#: io.c:2807 +#: io.c:2930 #, c-format -msgid "" -"two-way processor `%s' conflicts with previously installed two-way processor " -"`%s'" -msgstr "" -"dwukierunkowy procesor `%s' konfliktuje z poprzednio zainstalowanym " -"procesorem `%s'" +msgid "two-way processor `%s' conflicts with previously installed two-way processor `%s'" +msgstr "dwukierunkowy procesor `%s' konfliktuje z poprzednio zainstalowanym procesorem `%s'" -#: io.c:2816 +#: io.c:2939 #, c-format msgid "two way processor `%s' failed to open `%s'" msgstr "dwukierunkowy procesor `%s' zawiódÅ‚ w otwarciu `%s'" -#: io.c:2923 +#: io.c:3064 #, c-format msgid "data file `%s' is empty" msgstr "plik danych `%s' jest pusty" -#: io.c:2965 io.c:2973 +#: io.c:3106 io.c:3114 msgid "could not allocate more input memory" msgstr "nie można zarezerwować wiÄ™cej pamiÄ™ci wejÅ›ciowej" -#: io.c:3539 +#: io.c:3682 msgid "multicharacter value of `RS' is a gawk extension" msgstr "wieloznakowa wartość `RS' jest rozszerzeniem gawk" -#: io.c:3628 +#: io.c:3771 msgid "IPv6 communication is not supported" msgstr "Komunikacja IPv6 nie jest wspierana" -#: main.c:388 +#: main.c:405 msgid "empty argument to `-e/--source' ignored" msgstr "pusty argument dla opcji `-e/--source' zostaÅ‚ zignorowany" -#: main.c:478 +#: main.c:495 #, c-format msgid "%s: option `-W %s' unrecognized, ignored\n" msgstr "%s: opcja `-W %s' nierozpoznana i zignorowana\n" -#: main.c:524 +#: main.c:541 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: opcja musi mieć argument -- %c\n" -#: main.c:545 +#: main.c:562 msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'" -msgstr "" -"zmienna Å›rodowiskowa `POSIXLY_CORRECT' ustawiona: `--posix' zostaÅ‚ włączony" +msgstr "zmienna Å›rodowiskowa `POSIXLY_CORRECT' ustawiona: `--posix' zostaÅ‚ włączony" -#: main.c:551 +#: main.c:568 msgid "`--posix' overrides `--traditional'" msgstr "opcja `--posix' zostanie użyta nad `--traditional'" -#: main.c:562 +#: main.c:579 msgid "`--posix'/`--traditional' overrides `--non-decimal-data'" msgstr "`--posix'/`--traditional' użyte nad opcjÄ… `--non-decimal-data'" -#: main.c:566 +#: main.c:583 #, 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" +msgstr "uruchamianie %s setuid root może być problemem pod wzglÄ™dem bezpieczeÅ„stwa" -#: main.c:571 +#: main.c:588 msgid "`--posix' overrides `--characters-as-bytes'" msgstr "opcja `--posix' zostanie użyta nad `--characters-as-bytes'" -#: main.c:630 +#: main.c:647 #, 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:633 +#: main.c:650 #, 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:635 +#: main.c:652 #, 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:693 +#: main.c:710 msgid "no program text at all!" msgstr "brak tekstu programu!" -#: main.c:779 +#: main.c:799 #, 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" +msgstr "Użycie: %s [styl opcji POSIX lub GNU] -f plik_z_programem [--] plik ...\n" -#: main.c:781 +#: main.c:801 #, 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:786 +#: main.c:806 msgid "POSIX options:\t\tGNU long options: (standard)\n" msgstr "Opcje POSIX:\t\tDÅ‚ugie opcje GNU (standard):\n" -#: main.c:787 +#: main.c:807 msgid "\t-f progfile\t\t--file=progfile\n" msgstr "\t-f program\t\t--file=program\n" -#: main.c:788 +#: main.c:808 msgid "\t-F fs\t\t\t--field-separator=fs\n" msgstr "\t-F fs\t\t\t--field-separator=fs\n" -#: main.c:789 +#: main.c:809 msgid "\t-v var=val\t\t--assign=var=val\n" msgstr "\t-v zmienna=wartość\t--assign=zmienna=wartość\n" -#: main.c:790 +#: main.c:810 msgid "Short options:\t\tGNU long options: (extensions)\n" msgstr "Krótkie opcje:\t\tDÅ‚ugie opcje GNU: (rozszerzenia)\n" -#: main.c:791 +#: main.c:811 msgid "\t-b\t\t\t--characters-as-bytes\n" msgstr "\t-b\t\t\t--characters-as-bytes\n" -#: main.c:792 +#: main.c:812 msgid "\t-c\t\t\t--traditional\n" msgstr "\t-c\t\t\t--traditional\n" -#: main.c:793 +#: main.c:813 msgid "\t-C\t\t\t--copyright\n" msgstr "\t-C\t\t\t--copyright\n" -#: main.c:794 +#: main.c:814 msgid "\t-d[file]\t\t--dump-variables[=file]\n" msgstr "\t-d[plik]\t\t--dump-variables[=plik]\n" -#: main.c:795 +#: main.c:815 msgid "\t-D[file]\t\t--debug[=file]\n" msgstr "\t-D[plik]\t\t--debug[=plik]\n" -#: main.c:796 +#: main.c:816 msgid "\t-e 'program-text'\t--source='program-text'\n" msgstr "\t-e 'tekst-programu'\t--source='tekst-programu'\n" -#: main.c:797 +#: main.c:817 msgid "\t-E file\t\t\t--exec=file\n" msgstr "\t-E plik\t\t\t--exec=plik\n" -#: main.c:798 +#: main.c:818 msgid "\t-g\t\t\t--gen-pot\n" msgstr "\t-g\t\t\t--gen-pot\n" -#: main.c:799 +#: main.c:819 msgid "\t-h\t\t\t--help\n" msgstr "\t-h\t\t\t--help\n" -#: main.c:800 +#: main.c:820 msgid "\t-i includefile\t\t--include=includefile\n" msgstr "\t-i plikinclude\t\t--include=plikinclude\n" -#: main.c:801 +#: main.c:821 msgid "\t-l library\t\t--load=library\n" msgstr "\t-l biblioteka\t\t--load=biblioteka\n" -#: main.c:802 +#: main.c:822 msgid "\t-L [fatal]\t\t--lint[=fatal]\n" msgstr "\t-L [fatal]\t\t--lint[=fatal]\n" -#: main.c:803 +#: 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:804 +#: main.c:824 msgid "\t-M\t\t\t--bignum\n" msgstr "\t-M\t\t\t--bignum\n" -#: main.c:805 +#: main.c:825 msgid "\t-N\t\t\t--use-lc-numeric\n" msgstr "\t-N\t\t\t--use-lc-numeric\n" -#: main.c:806 +#: main.c:826 msgid "\t-o[file]\t\t--pretty-print[=file]\n" msgstr "\t-o[plik]\t\t--pretty-print[=plik]\n" -#: main.c:807 +#: main.c:827 msgid "\t-O\t\t\t--optimize\n" msgstr "\t-O\t\t\t--optimize\n" -#: main.c:808 +#: main.c:828 msgid "\t-p[file]\t\t--profile[=file]\n" msgstr "\t-p[plik]\t\t--profile[=plik]\n" -#: main.c:809 +#: main.c:829 msgid "\t-P\t\t\t--posix\n" msgstr "\t-P\t\t\t--posix\n" -#: main.c:810 +#: main.c:830 msgid "\t-r\t\t\t--re-interval\n" msgstr "\t-r\t\t\t--re-interval\n" -#: main.c:811 +#: main.c:831 msgid "\t-S\t\t\t--sandbox\n" msgstr "\t-S\t\t\t--sandbox\n" -#: main.c:812 +#: main.c:832 msgid "\t-t\t\t\t--lint-old\n" msgstr "\t-t\t\t\t--lint-old\n" -#: main.c:813 +#: main.c:833 msgid "\t-V\t\t\t--version\n" msgstr "\t-V\t\t\t--version\n" -#: main.c:815 +#: main.c:835 msgid "\t-W nostalgia\t\t--nostalgia\n" msgstr "\t-W nostalgia\t\t--nostalgia\n" -#: main.c:818 +#: main.c:838 msgid "\t-Y\t\t--parsedebug\n" msgstr "\t-Y\t\t--parsedebug\n" @@ -3083,7 +3003,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:827 +#: main.c:847 msgid "" "\n" "To report bugs, see node `Bugs' in `gawk.info', which is\n" @@ -3096,7 +3016,7 @@ msgstr "" "dokumentacji.\n" "\n" -#: main.c:831 +#: main.c:851 msgid "" "gawk is a pattern scanning and processing language.\n" "By default it reads standard input and writes standard output.\n" @@ -3106,7 +3026,7 @@ msgstr "" "Program domyÅ›lnie czyta standardowe wejÅ›cie i zapisuje standardowe wyjÅ›cie.\n" "\n" -#: main.c:835 +#: main.c:855 msgid "" "Examples:\n" "\tgawk '{ sum += $1 }; END { print sum }' file\n" @@ -3116,7 +3036,7 @@ msgstr "" "\tgawk '{ suma += $1 }; END { print suma }' plik\n" "\tgawk -F: '{ print $1 }' /etc/passwd\n" -#: main.c:855 +#: main.c:880 #, c-format msgid "" "Copyright (C) 1989, 1991-%d Free Software Foundation.\n" @@ -3135,7 +3055,7 @@ msgstr "" "tej Licencji lub którejÅ› z późniejszych wersji.\n" "\n" -#: main.c:863 +#: main.c:888 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" @@ -3150,7 +3070,7 @@ msgstr "" "PowszechnÄ… LicencjÄ™ PublicznÄ… GNU.\n" "\n" -#: main.c:869 +#: main.c:894 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" @@ -3159,16 +3079,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:904 +#: main.c:931 msgid "-Ft does not set FS to tab in POSIX awk" msgstr "-Ft nie ustawia FS na znak tabulatora w POSIX awk" -#: main.c:1181 +#: main.c:1208 #, c-format msgid "unknown value for field spec: %d\n" msgstr "nieznana wartość dla specyfikacji pola: %d\n" -#: main.c:1279 +#: main.c:1306 #, c-format msgid "" "%s: `%s' argument to `-v' not in `var=value' form\n" @@ -3177,48 +3097,48 @@ msgstr "" "%s: argument `%s' dla `-v' nie jest zgodny ze skÅ‚adniÄ… `zmienna=wartość'\n" "\n" -#: main.c:1305 +#: main.c:1332 #, c-format msgid "`%s' is not a legal variable name" msgstr "`%s' nie jest dozwolonÄ… nazwÄ… zmiennej" -#: main.c:1308 +#: main.c:1335 #, 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:1312 +#: main.c:1339 #, 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:1317 +#: main.c:1344 #, c-format msgid "cannot use function `%s' as variable name" msgstr "nie można użyć funkcji `%s' jako nazwy zmiennej" -#: main.c:1370 +#: main.c:1397 msgid "floating point exception" msgstr "wyjÄ…tek zmiennopozycyjny" -#: main.c:1377 +#: main.c:1404 msgid "fatal error: internal error" msgstr "fatalny błąd: wewnÄ™trzny błąd" -#: main.c:1392 +#: main.c:1419 msgid "fatal error: internal error: segfault" msgstr "fatalny błąd: wewnÄ™trzny błąd: błąd segmentacji" -#: main.c:1404 +#: main.c:1431 msgid "fatal error: internal error: stack overflow" msgstr "fatalny błąd: wewnÄ™trzny błąd: przepeÅ‚nienie stosu" -#: main.c:1463 +#: main.c:1490 #, c-format msgid "no pre-opened fd %d" msgstr "brak już otwartego fd %d" -#: main.c:1470 +#: main.c:1497 #, c-format msgid "could not pre-open /dev/null for fd %d" msgstr "nie można otworzyć zawczasu /dev/null dla fd %d" @@ -3273,7 +3193,7 @@ msgstr "%s: argument #%d uÅ‚amkowa wartość %Rg zostanie obciÄ™ta" msgid "%s: argument #%d negative value %Zd will give strange results" msgstr "%s: argument #%d ujemna wartość %Zd spowoduje dziwne wyniki" -#: msg.c:61 +#: msg.c:68 #, c-format msgid "cmd. line:" msgstr "linia poleceÅ„:" @@ -3297,12 +3217,8 @@ msgstr "brak liczb szesnastkowych w sekwencji ucieczki `\\x'" #: node.c:579 #, c-format -msgid "" -"hex escape \\x%.*s of %d characters probably not interpreted the way you " -"expect" -msgstr "" -"szesnastkowa sekwencja ucieczki \\x%.*s %d znaków prawdopodobnie nie zostaÅ‚a " -"zinterpretowana jak tego oczekujesz" +msgid "hex escape \\x%.*s of %d characters probably not interpreted the way you expect" +msgstr "szesnastkowa sekwencja ucieczki \\x%.*s %d znaków prawdopodobnie nie zostaÅ‚a zinterpretowana jak tego oczekujesz" #: node.c:594 #, c-format @@ -3310,12 +3226,8 @@ msgid "escape sequence `\\%c' treated as plain `%c'" msgstr "sekwencja ucieczki `\\%c' potraktowana jako zwykÅ‚e `%c'" #: node.c:739 -msgid "" -"Invalid multibyte data detected. There may be a mismatch between your data " -"and your locale." -msgstr "" -"Wykryto nieprawidÅ‚owe dane. Możliwe jest niedopasowanie pomiÄ™dzy Twoimi " -"danymi a ustawieniami regionalnymi." +msgid "Invalid multibyte data detected. There may be a mismatch between your data and your locale." +msgstr "Wykryto nieprawidÅ‚owe dane. Możliwe jest niedopasowanie pomiÄ™dzy Twoimi danymi a ustawieniami regionalnymi." #: posix/gawkmisc.c:177 #, c-format @@ -3327,16 +3239,16 @@ msgstr "%s %s `%s': nie można uzyskać flag fd: (fcntl F_GETFD: %s)" msgid "%s %s `%s': could not set close-on-exec: (fcntl F_SETFD: %s)" msgstr "%s %s `%s': nie można ustawić close-on-exec: (fcntl F_SETFD: %s)" -#: profile.c:70 +#: profile.c:71 #, c-format msgid "could not open `%s' for writing: %s" msgstr "nie można otworzyć `%s' do zapisu: %s" -#: profile.c:72 +#: profile.c:73 msgid "sending profile to standard error" msgstr "wysyÅ‚anie profilu na standardowe wyjÅ›cie diagnostyczne" -#: profile.c:188 +#: profile.c:193 #, c-format msgid "" "\t# %s block(s)\n" @@ -3345,7 +3257,7 @@ msgstr "" "\t# %s blok(i)\n" "\n" -#: profile.c:193 +#: profile.c:198 #, c-format msgid "" "\t# Rule(s)\n" @@ -3354,16 +3266,16 @@ msgstr "" "\t# ReguÅ‚a(i)\n" "\n" -#: profile.c:267 +#: profile.c:272 #, c-format msgid "internal error: %s with null vname" msgstr "wewnÄ™trzny błąd: %s z zerowym vname" -#: profile.c:530 +#: profile.c:537 msgid "internal error: builtin with null fname" msgstr "wewnÄ™trzny błąd: builtin z fname null" -#: profile.c:942 +#: profile.c:949 #, c-format msgid "" "\t# Loaded extensions (-l and/or @load)\n" @@ -3372,12 +3284,12 @@ msgstr "" "\t# ZaÅ‚adowane rozszerzenia (-l i/lub @load)\n" "\n" -#: profile.c:965 +#: profile.c:972 #, c-format msgid "\t# gawk profile, created %s\n" msgstr "\t# profil programu gawk, utworzony %s\n" -#: profile.c:1351 +#: profile.c:1475 #, c-format msgid "" "\n" @@ -3386,17 +3298,12 @@ msgstr "" "\n" "\t# Funkcje, spis alfabetyczny\n" -#: profile.c:1389 +#: profile.c:1513 #, c-format msgid "redir2str: unknown redirection type %d" msgstr "redir2str: nieznany typ przekierowania %d" -#: re.c:583 -#, c-format -msgid "range of the form `[%c-%c]' is locale dependent" -msgstr "zasiÄ™g formy `[%c-%c]' jest zależny od lokalizacji" - -#: re.c:610 +#: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" msgstr "komponent regexp `%.*s' powinien być prawdopodobnie `[%.*s]'" @@ -3465,10 +3372,13 @@ msgstr "Niedopasowany znak ) lub \\)" msgid "No previous regular expression" msgstr "Brak poprzedniego wyrażenia regularnego" -#: symbol.c:740 +#: symbol.c:741 msgid "can not pop main context" msgstr "nie można zdjąć głównego kontekstu" +#~ 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" @@ -3538,11 +3448,8 @@ msgstr "nie można zdjąć głównego kontekstu" #~ msgid "statement has no effect" #~ msgstr "instrukcja nie ma żadnego efektu" -#~ msgid "" -#~ "for loop: array `%s' changed size from %ld to %ld during loop execution" -#~ msgstr "" -#~ "pÄ™tla for: tablica `%s' zmieniÅ‚a rozmiar z %ld do %ld podczas wykonywania " -#~ "pÄ™tli" +#~ msgid "for loop: array `%s' changed size from %ld to %ld during loop execution" +#~ msgstr "pÄ™tla for: tablica `%s' zmieniÅ‚a rozmiar z %ld do %ld podczas wykonywania pÄ™tli" #~ msgid "function called indirectly through `%s' does not exist" #~ msgstr "poÅ›rednio wywoÅ‚ana funkcja poprzez `%s' nie istnieje" @@ -3551,9 +3458,7 @@ msgstr "nie można zdjąć głównego kontekstu" #~ 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'" +#~ 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" @@ -3598,8 +3503,7 @@ msgstr "nie można zdjąć głównego kontekstu" #~ msgstr "próba użycia skalaru `%s' jako tablicy" #~ msgid "call of `length' without parentheses is deprecated by POSIX" -#~ msgstr "" -#~ "wywoÅ‚anie `length' bez podania nawiasów jest niezalecane przez POSIX" +#~ msgstr "wywoÅ‚anie `length' bez podania nawiasów jest niezalecane przez POSIX" #~ msgid "division by zero attempted in `/'" #~ msgstr "próba dzielenia przez zero w `/'" @@ -3622,12 +3526,8 @@ msgstr "nie można zdjąć głównego kontekstu" #~ msgid "`nextfile' cannot be called from a BEGIN rule" #~ msgstr "instrukcja `nextfile' nie może być wywoÅ‚ana z wnÄ™trza reguÅ‚y BEGIN" -#~ msgid "" -#~ "concatenation: side effects in one expression have changed the length of " -#~ "another!" -#~ msgstr "" -#~ "konkatenacja: skutki uboczne w jednym wyrażeniu spowodowaÅ‚y zmianÄ™ " -#~ "dÅ‚ugoÅ›ci innego wyrażenia!" +#~ msgid "concatenation: side effects in one expression have changed the length of another!" +#~ msgstr "konkatenacja: skutki uboczne w jednym wyrażeniu spowodowaÅ‚y zmianÄ™ dÅ‚ugoÅ›ci innego wyrażenia!" #~ msgid "illegal type (%s) in tree_eval" #~ msgstr "nieprawidÅ‚owy typ (%s) w tree_eval" @@ -3691,8 +3591,7 @@ msgstr "nie można zdjąć głównego kontekstu" #~ msgstr "Nieznany typ wÄ™zÅ‚a %s w pp_var" #~ msgid "can't open two way socket `%s' for input/output (%s)" -#~ msgstr "" -#~ "nie można otworzyć dwukierunkowego gniazda `%s' jako wejÅ›cia/wyjÅ›cia (%s)" +#~ msgstr "nie można otworzyć dwukierunkowego gniazda `%s' jako wejÅ›cia/wyjÅ›cia (%s)" #~ msgid "%s: illegal option -- %c\n" #~ msgstr "%s: niewÅ‚aÅ›ciwa opcja -- %c\n" @@ -3711,8 +3610,7 @@ msgstr "nie można zdjąć głównego kontekstu" #~ "To report bugs, see node `Bugs' in `gawk.info', which is\n" #~ msgstr "" #~ "\n" -#~ "Aby zgÅ‚osić błędy, prosimy zobaczyć wÄ™zeÅ‚ `Bugs' w `gawk.info', który " -#~ "jest\n" +#~ "Aby zgÅ‚osić błędy, prosimy zobaczyć wÄ™zeÅ‚ `Bugs' w `gawk.info', który jest\n" #~ msgid "invalid syntax in name `%s' for variable assignment" #~ msgstr "błąd skÅ‚adni w nazwie `%s' dla przypisania zmiennej" @@ -3733,9 +3631,7 @@ msgstr "nie można zdjąć głównego kontekstu" #~ msgstr "`nextfile' użyty w akcji BEGIN lub END" #~ msgid "non-redirected `getline' undefined inside BEGIN or END action" -#~ msgstr "" -#~ "komenda `getline' bez przekierowania nie jest zdefiniowana wewnÄ…trz akcji " -#~ "BEGIN lub END" +#~ msgstr "komenda `getline' bez przekierowania nie jest zdefiniowana wewnÄ…trz akcji BEGIN lub END" #~ msgid "fptr %x not in tokentab\n" #~ msgstr "brak fptr %x w tokentab\n" -- cgit v1.2.3 From 3355ce597d39925ea1221c92f62ef8dcb80d7274 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 23 Mar 2014 22:47:41 +0200 Subject: Add default defn's for constants in extension files. --- extension/ChangeLog | 7 +++++++ extension/gawkfts.c | 4 ++++ extension/readdir.c | 4 ++++ 3 files changed, 15 insertions(+) diff --git a/extension/ChangeLog b/extension/ChangeLog index 4a1fe2ed..61381171 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,10 @@ +2014-03-23 Arnold D. Robbins + + * gawkfts.c (MAXPATHLEN): Add a default definition. Thanks to + Antonio Diaz Dian and Nelson H.F. Beebe. + * readdir.c (PATH_MAX): Add a default definition. Thanks to + Nelson H.F. Beebe. + 2014-03-08 Andrew J. Schorr * filefuncs.c (read_symlink, do_fts): Replace free with gawk_free. diff --git a/extension/gawkfts.c b/extension/gawkfts.c index 25a4c108..4a712153 100644 --- a/extension/gawkfts.c +++ b/extension/gawkfts.c @@ -139,6 +139,10 @@ static int fts_safe_changedir(const FTS *, const FTSENT *, int, #define _DIAGASSERT(expression) +#ifndef MAXPATHLEN +#define MAXPATHLEN 1024 /* a guess */ +#endif + FTS * fts_open(char * const *argv, int options, int (*compar)(const FTSENT **, const FTSENT **)) diff --git a/extension/readdir.c b/extension/readdir.c index 5b9a7913..bf14e486 100644 --- a/extension/readdir.c +++ b/extension/readdir.c @@ -67,6 +67,10 @@ #define _(msgid) gettext(msgid) #define N_(msgid) msgid +#ifndef PATH_MAX +#define PATH_MAX 1024 /* a good guess */ +#endif + static const gawk_api_t *api; /* for convenience macros to work */ static awk_ext_id_t *ext_id; static const char *ext_version = "readdir extension: version 1.0"; -- cgit v1.2.3 From 82da42cf14d16813bca40431e86dc78b2ca6d7f5 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 27 Mar 2014 20:58:06 +0200 Subject: BBS-list examples redone. Yay! Thanks to Antonio. --- doc/ChangeLog | 5 + doc/gawk.info | 1658 ++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 508 ++++++++--------- doc/gawktexi.in | 508 ++++++++--------- 4 files changed, 1353 insertions(+), 1326 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 15e6d958..fed2cc82 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2014-03-27 Antonio Giovanni Colombo + + * gawktexi.in: Redo all the examples using BBS-list to a different + file that doesn't use out-of-date concepts. + 2014-03-10 Arnold D. Robbins * gawktexi.in: Finish indexing improvements. (For now, anyway.) diff --git a/doc/gawk.info b/doc/gawk.info index a275d9c2..2e18da5b 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -1767,30 +1767,30 @@ File: gawk.info, Node: Sample Data Files, Next: Very Simple, Prev: Running ga =============================== Many of the examples in this Info file take their input from two sample -data files. The first, `BBS-list', represents a list of computer -bulletin board systems together with information about those systems. +data files. The first, `mail-list', represents a list of peoples' names +together with their email addresses and information about those people. The second data file, called `inventory-shipped', contains information about monthly shipments. In both files, each line is considered to be one "record". - In the data file `BBS-list', each record contains the name of a -computer bulletin board, its phone number, the board's baud rate(s), -and a code for the number of hours it is operational. An `A' in the -last column means the board operates 24 hours a day. A `B' in the last -column means the board only operates on evening and weekend hours. A -`C' means the board operates only on weekends: - - aardvark 555-5553 1200/300 B - alpo-net 555-3412 2400/1200/300 A - barfly 555-7685 1200/300 A - bites 555-1675 2400/1200/300 A - camelot 555-0542 300 C - core 555-2912 1200/300 C - fooey 555-1234 2400/1200/300 B - foot 555-6699 1200/300 B - macfoo 555-6480 1200/300 A - sdace 555-3430 2400/1200/300 A - sabafoo 555-2127 1200/300 C + In the data file `mail-list', each record contains the name of a +person, his/her phone number, his/her email-address, and a code for +their relationship with the author of the list. An `A' in the last +column means that the person is an acquaintance. An `F' in the last +column means that the person is a friend. An `R' means that the person +is a relative: + + Amelia 555-5553 amelia.zodiacusque@gmail.com F + Anthony 555-3412 anthony.asserturo@hotmail.com A + Becky 555-7685 becky.algebrarum@gmail.com A + Bill 555-1675 bill.drowning@hotmail.com A + Broderick 555-0542 broderick.aliquotiens@yahoo.com R + Camilla 555-2912 camilla.infusarum@skynet.be R + Fabius 555-1234 fabius.undevicesimus@ucb.edu F + Julie 555-6699 julie.perscrutabor@skeeve.com F + Martin 555-6480 martin.codicibus@hotmail.com A + Samuel 555-3430 samuel.lanceolis@shu.edu A + Jean-Paul 555-2127 jeanpaul.campanorum@nyu.edu R The data file `inventory-shipped' represents information about shipments during the year. Each record contains the month, the number @@ -1827,32 +1827,32 @@ 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 `BBS-list' for the character string `foo' (a grouping of +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 cars in a train"): - awk '/foo/ { print $0 }' BBS-list + awk '/li/ { print $0 }' mail-list -When lines containing `foo' are found, they are printed because +When lines containing `li' are found, they are printed because `print $0' means print the current line. (Just `print' by itself means the same thing, so we could have written that instead.) - You will notice that slashes (`/') surround the string `foo' in the -`awk' program. The slashes indicate that `foo' is the pattern to -search for. This type of pattern is called a "regular expression", -which is covered in more detail later (*note Regexp::). The pattern is -allowed to match parts of words. There are single quotes around the -`awk' program so that the shell won't interpret any of it as special -shell characters. + You will notice that slashes (`/') surround the string `li' in the +`awk' program. The slashes indicate that `li' is the pattern to search +for. This type of pattern is called a "regular expression", which is +covered in more detail later (*note Regexp::). The pattern is allowed +to match parts of words. There are single quotes around the `awk' +program so that the shell won't interpret any of it as special shell +characters. Here is what this program prints: - $ awk '/foo/ { print $0 }' BBS-list - -| fooey 555-1234 2400/1200/300 B - -| foot 555-6699 1200/300 B - -| macfoo 555-6480 1200/300 A - -| sabafoo 555-2127 1200/300 C + $ awk '/li/ { print $0 }' mail-list + -| Amelia 555-5553 amelia.zodiacusque@gmail.com F + -| Broderick 555-0542 broderick.aliquotiens@yahoo.com R + -| Julie 555-6699 julie.perscrutabor@skeeve.com F + -| Samuel 555-3430 samuel.lanceolis@shu.edu A In an `awk' rule, either the pattern or the action can be omitted, but not both. If the pattern is omitted, then the action is performed @@ -1861,7 +1861,7 @@ is to print all lines that match the pattern. Thus, we could leave out the action (the `print' statement and the curly braces) in the previous example and the result would be the same: -`awk' prints all lines matching the pattern `foo'. By comparison, +`awk' prints all lines matching the pattern `li'. By comparison, omitting the `print' statement but retaining the curly braces makes an empty action that does nothing (i.e., no lines are printed). @@ -1967,25 +1967,19 @@ the string `21'. If a line contains both strings, it is printed twice, once by each rule. This is what happens if we run this program on our two sample data -files, `BBS-list' and `inventory-shipped': +files, `mail-list' and `inventory-shipped': $ awk '/12/ { print $0 } - > /21/ { print $0 }' BBS-list inventory-shipped - -| aardvark 555-5553 1200/300 B - -| alpo-net 555-3412 2400/1200/300 A - -| barfly 555-7685 1200/300 A - -| bites 555-1675 2400/1200/300 A - -| core 555-2912 1200/300 C - -| fooey 555-1234 2400/1200/300 B - -| foot 555-6699 1200/300 B - -| macfoo 555-6480 1200/300 A - -| sdace 555-3430 2400/1200/300 A - -| sabafoo 555-2127 1200/300 C - -| sabafoo 555-2127 1200/300 C + > /21/ { print $0 }' mail-list inventory-shipped + -| Anthony 555-3412 anthony.asserturo@hotmail.com A + -| Camilla 555-2912 camilla.infusarum@skynet.be R + -| Fabius 555-1234 fabius.undevicesimus@ucb.edu F + -| Jean-Paul 555-2127 jeanpaul.campanorum@nyu.edu R + -| Jean-Paul 555-2127 jeanpaul.campanorum@nyu.edu R -| Jan 21 36 64 620 -| Apr 21 70 74 514 -Note how the line beginning with `sabafoo' in `BBS-list' was printed +Note how the line beginning with `Jean-Paul' in `mail-list' was printed twice, once for each rule.  @@ -2061,7 +2055,7 @@ Most often, each line in an `awk' program is a separate statement or separate rule, like this: awk '/12/ { print $0 } - /21/ { print $0 }' BBS-list inventory-shipped + /21/ { print $0 }' mail-list inventory-shipped However, `gawk' ignores newlines after any of the following symbols and keywords: @@ -3106,14 +3100,14 @@ A regular expression can be used as a pattern by enclosing it in slashes. Then the regular expression is tested against the entire text of each record. (Normally, it only needs to match some part of the text in order to succeed.) For example, the following prints the -second field of each record that contains the string `foo' anywhere in +second field of each record that contains the string `li' anywhere in it: - $ awk '/foo/ { print $2 }' BBS-list - -| 555-1234 + $ awk '/li/ { print $2 }' mail-list + -| 555-5553 + -| 555-0542 -| 555-6699 - -| 555-6480 - -| 555-2127 + -| 555-3430 Regular expressions can also be used in matching expressions. These expressions allow you to specify the string to match against; it need @@ -3921,67 +3915,82 @@ processed, so that the very first record is read with the proper separator. To do this, use the special `BEGIN' pattern (*note BEGIN/END::). For example: - awk 'BEGIN { RS = "/" } - { print $0 }' BBS-list - -changes the value of `RS' to `"/"', before reading any input. This is -a string whose first character is a slash; as a result, records are -separated by slashes. 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 slash changed to a -newline. Here are the results of running the program on `BBS-list': - - $ awk 'BEGIN { RS = "/" } - > { print $0 }' BBS-list - -| aardvark 555-5553 1200 - -| 300 B - -| alpo-net 555-3412 2400 - -| 1200 - -| 300 A - -| barfly 555-7685 1200 - -| 300 A - -| bites 555-1675 2400 - -| 1200 - -| 300 A - -| camelot 555-0542 300 C - -| core 555-2912 1200 - -| 300 C - -| fooey 555-1234 2400 - -| 1200 - -| 300 B - -| foot 555-6699 1200 - -| 300 B - -| macfoo 555-6480 1200 - -| 300 A - -| sdace 555-3430 2400 - -| 1200 - -| 300 A - -| sabafoo 555-2127 1200 - -| 300 C + 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': + + $ awk 'BEGIN { RS = "u" } + > { print $0 }' mail-list + -| Amelia 555-5553 amelia.zodiac + -| sq + -| e@gmail.com F + -| Anthony 555-3412 anthony.assert + -| ro@hotmail.com A + -| Becky 555-7685 becky.algebrar + -| m@gmail.com A + -| Bill 555-1675 bill.drowning@hotmail.com A + -| Broderick 555-0542 broderick.aliq + -| otiens@yahoo.com R + -| Camilla 555-2912 camilla.inf + -| sar + -| m@skynet.be R + -| Fabi + -| s 555-1234 fabi + -| s. + -| ndevicesim + -| s@ + -| cb.ed + -| F + -| J + -| lie 555-6699 j + -| lie.perscr + -| tabor@skeeve.com F + -| Martin 555-6480 martin.codicib + -| s@hotmail.com A + -| Sam + -| el 555-3430 sam + -| el.lanceolis@sh + -| .ed + -| A + -| Jean-Pa + -| l 555-2127 jeanpa + -| l.campanor + -| m@ny + -| .ed + -| R -| -Note that the entry for the `camelot' BBS is not split. In the -original data file (*note Sample Data Files::), the line looks like -this: +Note that the entry for the name `Bill' is not split. In the original +data file (*note Sample Data Files::), the line looks like this: - camelot 555-0542 300 C + Bill 555-1675 bill.drowning@hotmail.com A -It has one baud rate only, so there are no slashes in the record, -unlike the others which have two or more baud rates. In fact, this -record is treated as part of the record for the `core' BBS; the newline +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! Another way to change the record separator is on the command line, using the variable-assignment feature (*note Other Arguments::): - awk '{ print $0 }' RS="/" BBS-list + awk '{ print $0 }' RS="u" mail-list -This sets `RS' to `/' before processing `BBS-list'. +This sets `RS' to `u' before processing `mail-list'. - Using an unusual character such as `/' for the record separator -produces correct behavior in the vast majority of cases. + Using an alphabetic character such as `u' for the record separator +is highly likely to produce strange results. Using an unusual +character such as `/' is more likely to produce correct behavior in the +majority of cases, but there are no guarantees. The moral is: Know Your +Data. There is one unusual case, that occurs when `gawk' is being fully POSIX-compliant (*note Options::). Then, the following (extreme) @@ -4150,26 +4159,24 @@ get the empty string. (If used in a numeric operation, you get zero.) field, is a special case: it represents the whole input record when you are not interested in specific fields. Here are some more examples: - $ awk '$1 ~ /foo/ { print $0 }' BBS-list - -| fooey 555-1234 2400/1200/300 B - -| foot 555-6699 1200/300 B - -| macfoo 555-6480 1200/300 A - -| sabafoo 555-2127 1200/300 C + $ awk '$1 ~ /li/ { print $0 }' mail-list + -| Amelia 555-5553 amelia.zodiacusque@gmail.com F + -| Julie 555-6699 julie.perscrutabor@skeeve.com F -This example prints each record in the file `BBS-list' whose first -field contains the string `foo'. The operator `~' is called a -"matching operator" (*note Regexp Usage::); it tests whether a string -(here, the field `$1') matches a given regular expression. +This example prints each record in the file `mail-list' whose first +field contains the string `li'. The operator `~' is called a "matching +operator" (*note Regexp Usage::); it tests whether a string (here, the +field `$1') matches a given regular expression. - By contrast, the following example looks for `foo' in _the entire + By contrast, the following example looks for `li' in _the entire record_ and prints the first field and the last field for each matching input record: - $ awk '/foo/ { print $1, $NF }' BBS-list - -| fooey B - -| foot B - -| macfoo A - -| sabafoo C + $ awk '/li/ { print $1, $NF }' mail-list + -| Amelia F + -| Broderick R + -| Julie F + -| Samuel A ---------- Footnotes ---------- @@ -4197,16 +4204,16 @@ For the twentieth record, field number 20 is printed; most likely, the record has fewer than 20 fields, so this prints a blank line. Here is another example of using expressions as field numbers: - awk '{ print $(2*2) }' BBS-list + 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 that the multiplication is done before the `$' operation; they are necessary whenever there is a binary operator in the field-number -expression. This example, then, prints the hours of operation (the -fourth field) for every line of the file `BBS-list'. (All of the `awk' -operators are listed, in order of decreasing precedence, in *note +expression. This example, then, prints the type of relationship (the +fourth field) for every line of the file `mail-list'. (All of the +`awk' operators are listed, in order of decreasing precedence, in *note Precedence::.) If the field number you compute is zero, you get the entire record. @@ -4603,53 +4610,46 @@ type `-F\t' at the shell, without any quotes, the `\' gets deleted, so TABs and not `t's. Use `-v FS="t"' or `-F"[t]"' on the command line if you really do want to separate your fields with `t's. - As an example, let's use an `awk' program file called `baud.awk' -that contains the pattern `/300/' and the action `print $1': + As an example, let's use an `awk' program file called `edu.awk' that +contains the pattern `/edu/' and the action `print $1': - /300/ { print $1 } + /edu/ { print $1 } Let's also set `FS' to be the `-' character and run the program on -the file `BBS-list'. The following command prints a list of the names -of the bulletin boards that operate at 300 baud and the first three +the file `mail-list'. The following command prints a list of the names +of the people that work at or attend a university, and the first three digits of their phone numbers: - $ awk -F- -f baud.awk BBS-list - -| aardvark 555 - -| alpo - -| barfly 555 - -| bites 555 - -| camelot 555 - -| core 555 - -| fooey 555 - -| foot 555 - -| macfoo 555 - -| sdace 555 - -| sabafoo 555 - -Note the second line of output. The second line in the original file + $ awk -F- -f edu.awk mail-list + -| Fabius 555 + -| Samuel 555 + -| Jean + +Note the third line of output. The third line in the original file looked like this: - alpo-net 555-3412 2400/1200/300 A + Jean-Paul 555-2127 jeanpaul.campanorum@nyu.edu R - The `-' as part of the system's name was used as the field + The `-' as part of the person's name was used as the field separator, instead of the `-' in the phone number that was originally intended. This demonstrates why you have to be careful in choosing 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 password file entry might -look like this: +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: - arnold:xyzzy:2076:10:Arnold Robbins:/home/arnold:/bin/bash + arnold:x:2076:10:Arnold Robbins:/home/arnold:/bin/bash The following program searches the system password file and prints -the entries for users who have no password: +the entries for users whose full name is not indicated: - awk -F: '$2 == ""' /etc/passwd + awk -F: '$5 == ""' /etc/passwd  File: gawk.info, Node: Full Line Fields, Next: Field Splitting Summary, Prev: Command Line Field Separator, Up: Field Separators @@ -5835,13 +5835,29 @@ prints the first and second fields of each input record, separated by a semicolon, with a blank line added after each newline: $ awk 'BEGIN { OFS = ";"; ORS = "\n\n" } - > { print $1, $2 }' BBS-list - -| aardvark;555-5553 + > { print $1, $2 }' mail-list + -| Amelia;555-5553 -| - -| alpo-net;555-3412 + -| Anthony;555-3412 + -| + -| Becky;555-7685 + -| + -| Bill;555-1675 + -| + -| Broderick;555-0542 + -| + -| Camilla;555-2912 + -| + -| Fabius;555-1234 + -| + -| Julie;555-6699 + -| + -| Martin;555-6480 + -| + -| Samuel;555-3430 + -| + -| Jean-Paul;555-2127 -| - -| barfly;555-7685 - ... If the value of `ORS' does not contain a newline, the program's output runs together on a single line. @@ -6210,25 +6226,25 @@ File: gawk.info, Node: Printf Examples, Prev: Format Modifiers, Up: Printf The following simple example shows how to use `printf' to make an aligned table: - awk '{ printf "%-10s %s\n", $1, $2 }' BBS-list + awk '{ printf "%-10s %s\n", $1, $2 }' mail-list -This command prints the names of the bulletin boards (`$1') in the file -`BBS-list' as a string of 10 characters that are left-justified. It +This command prints the names of the people (`$1') in the file +`mail-list' as a string of 10 characters that are left-justified. It also prints the phone numbers (`$2') next on the line. This produces an aligned two-column table of names and phone numbers, as shown here: - $ awk '{ printf "%-10s %s\n", $1, $2 }' BBS-list - -| aardvark 555-5553 - -| alpo-net 555-3412 - -| barfly 555-7685 - -| bites 555-1675 - -| camelot 555-0542 - -| core 555-2912 - -| fooey 555-1234 - -| foot 555-6699 - -| macfoo 555-6480 - -| sdace 555-3430 - -| sabafoo 555-2127 + $ awk '{ printf "%-10s %s\n", $1, $2 }' mail-list + -| Amelia 555-5553 + -| Anthony 555-3412 + -| Becky 555-7685 + -| Bill 555-1675 + -| Broderick 555-0542 + -| Camilla 555-2912 + -| Fabius 555-1234 + -| Julie 555-6699 + -| Martin 555-6480 + -| Samuel 555-3430 + -| 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 @@ -6246,14 +6262,14 @@ beginning of the `awk' program: awk 'BEGIN { print "Name Number" print "---- ------" } - { printf "%-10s %s\n", $1, $2 }' BBS-list + { printf "%-10s %s\n", $1, $2 }' mail-list The above example mixes `print' and `printf' statements in the same program. Using just `printf' statements can produce the same results: awk 'BEGIN { printf "%-10s %s\n", "Name", "Number" printf "%-10s %s\n", "----", "------" } - { printf "%-10s %s\n", $1, $2 }' BBS-list + { printf "%-10s %s\n", $1, $2 }' mail-list Printing each column heading with the same format specification used for the column elements ensures that the headings are aligned just like @@ -6265,7 +6281,7 @@ be emphasized by storing it in a variable, like this: awk 'BEGIN { format = "%-10s %s\n" printf format, "Name", "Number" printf format, "----", "------" } - { printf format, $1, $2 }' BBS-list + { printf format, $1, $2 }' mail-list At this point, it would be a worthwhile exercise to use the `printf' statement to line up the headings and table data for the @@ -6305,19 +6321,19 @@ work identically for `printf': the same OUTPUT-FILE do not erase OUTPUT-FILE, but append to it. (This is different from how you use redirections in shell scripts.) If OUTPUT-FILE does not exist, it is created. For example, here - is how an `awk' program can write a list of BBS names to one file - named `name-list', and a list of phone numbers to another file + is how an `awk' program can write a list of peoples' names to one + file named `name-list', and a list of phone numbers to another file named `phone-list': $ awk '{ print $2 > "phone-list" - > print $1 > "name-list" }' BBS-list + > print $1 > "name-list" }' mail-list $ cat phone-list -| 555-5553 -| 555-3412 ... $ cat name-list - -| aardvark - -| alpo-net + -| Amelia + -| Anthony ... Each output file contains one name or number per line. @@ -6338,12 +6354,12 @@ work identically for `printf': The redirection argument COMMAND is actually an `awk' expression. Its value is converted to a string whose contents give the shell command to be run. For example, the following produces two files, - one unsorted list of BBS names, and one list sorted in reverse + one unsorted list of peoples' names, and one list sorted in reverse alphabetical order: awk '{ print $1 > "names.unsorted" command = "sort -r > names.sorted" - print $1 | command }' BBS-list + print $1 | command }' mail-list The unsorted list is written with an ordinary redirection, while the sorted list is written by piping through the `sort' utility. @@ -7073,16 +7089,16 @@ assignment is performed at a time determined by its position among the input file arguments--after the processing of the preceding input file argument. For example: - awk '{ print $n }' n=4 inventory-shipped n=2 BBS-list + awk '{ print $n }' n=4 inventory-shipped n=2 mail-list prints the value of field number `n' for all input records. Before the first file is read, the command line sets the variable `n' equal to four. This causes the fourth field to be printed in lines from `inventory-shipped'. After the first file has finished, but before the second file is started, `n' is set to two, so that the second field is -printed in lines from `BBS-list': +printed in lines from `mail-list': - $ awk '{ print $n }' n=4 inventory-shipped n=2 BBS-list + $ awk '{ print $n }' n=4 inventory-shipped n=2 mail-list -| 15 -| 24 ... @@ -7343,17 +7359,17 @@ a specific operator to represent it. Instead, concatenation is performed by writing expressions next to one another, with no operator. For example: - $ awk '{ print "Field number one: " $1 }' BBS-list - -| Field number one: aardvark - -| Field number one: alpo-net + $ awk '{ print "Field number one: " $1 }' mail-list + -| Field number one: Amelia + -| Field number one: Anthony ... Without the space in the string constant after the `:', the line runs together. For example: - $ awk '{ print "Field number one:" $1 }' BBS-list - -| Field number one:aardvark - -| Field number one:alpo-net + $ awk '{ print "Field number one:" $1 }' mail-list + -| Field number one:Amelia + -| Field number one:Anthony ... Because string concatenation does not have an explicit operator, it @@ -7999,9 +8015,9 @@ Boolean operators are: `BOOLEAN1 && BOOLEAN2' True if both BOOLEAN1 and BOOLEAN2 are true. For example, the following statement prints the current input record if it contains - both `2400' and `foo': + both `edu' and `li': - if ($0 ~ /2400/ && $0 ~ /foo/) print + if ($0 ~ /edu/ && $0 ~ /li/) print The subexpression BOOLEAN2 is evaluated only if BOOLEAN1 is true. This can make a difference when BOOLEAN2 contains expressions that @@ -8012,9 +8028,9 @@ Boolean operators are: `BOOLEAN1 || BOOLEAN2' True if at least one of BOOLEAN1 or BOOLEAN2 is true. For example, the following statement prints all records in the input - that contain _either_ `2400' or `foo' or both: + that contain _either_ `edu' or `li' or both: - if ($0 ~ /2400/ || $0 ~ /foo/) print + if ($0 ~ /edu/ || $0 ~ /li/) print The subexpression BOOLEAN2 is evaluated only if BOOLEAN1 is false. This can make a difference when BOOLEAN2 contains expressions that @@ -8434,56 +8450,53 @@ operand is either a constant regular expression enclosed in slashes (`/REGEXP/'), or any expression whose string value is used as a dynamic regular expression (*note Computed Regexps::). The following example prints the second field of each input record whose first field is -precisely `foo': +precisely `li': - $ awk '$1 == "foo" { print $2 }' BBS-list + $ awk '$1 == "li" { print $2 }' mail-list -(There is no output, because there is no BBS site with the exact name -`foo'.) Contrast this with the following regular expression match, -which accepts any record with a first field that contains `foo': +(There is no output, because there is no person with the exact name +`li'.) Contrast this with the following regular expression match, which +accepts any record with a first field that contains `li': - $ awk '$1 ~ /foo/ { print $2 }' BBS-list - -| 555-1234 + $ awk '$1 ~ /foo/ { print $2 }' mail-list + -| 555-5553 -| 555-6699 - -| 555-6480 - -| 555-2127 A regexp constant as a pattern is also a special case of an -expression pattern. The expression `/foo/' has the value one if `foo' -appears in the current input record. Thus, as a pattern, `/foo/' -matches any record containing `foo'. +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 match. For example, the following command prints all the records in -`BBS-list' that contain both `2400' and `foo': - - $ awk '/2400/ && /foo/' BBS-list - -| fooey 555-1234 2400/1200/300 B - - The following command prints all records in `BBS-list' that contain -_either_ `2400' or `foo' (or both, of course): - - $ awk '/2400/ || /foo/' BBS-list - -| alpo-net 555-3412 2400/1200/300 A - -| bites 555-1675 2400/1200/300 A - -| fooey 555-1234 2400/1200/300 B - -| foot 555-6699 1200/300 B - -| macfoo 555-6480 1200/300 A - -| sdace 555-3430 2400/1200/300 A - -| sabafoo 555-2127 1200/300 C - - The following command prints all records in `BBS-list' that do _not_ -contain the string `foo': - - $ awk '! /foo/' BBS-list - -| aardvark 555-5553 1200/300 B - -| alpo-net 555-3412 2400/1200/300 A - -| barfly 555-7685 1200/300 A - -| bites 555-1675 2400/1200/300 A - -| camelot 555-0542 300 C - -| core 555-2912 1200/300 C - -| sdace 555-3430 2400/1200/300 A +`mail-list' that contain both `edu' and `li': + + $ awk '/edu/ && /li/' mail-list + -| Samuel 555-3430 samuel.lanceolis@shu.edu A + + The following command prints all records in `mail-list' that contain +_either_ `edu' or `li' (or both, of course): + + $ awk '/edu/ || /li/' mail-list + -| Amelia 555-5553 amelia.zodiacusque@gmail.com F + -| Broderick 555-0542 broderick.aliquotiens@yahoo.com R + -| Fabius 555-1234 fabius.undevicesimus@ucb.edu F + -| Julie 555-6699 julie.perscrutabor@skeeve.com F + -| Samuel 555-3430 samuel.lanceolis@shu.edu A + -| Jean-Paul 555-2127 jeanpaul.campanorum@nyu.edu R + + The following command prints all records in `mail-list' that do +_not_ contain the string `li': + + $ awk '! /li/' mail-list + -| Anthony 555-3412 anthony.asserturo@hotmail.com A + -| Becky 555-7685 becky.algebrarum@gmail.com A + -| Bill 555-1675 bill.drowning@hotmail.com A + -| Camilla 555-2912 camilla.infusarum@skynet.be R + -| Fabius 555-1234 fabius.undevicesimus@ucb.edu F + -| Martin 555-6480 martin.codicibus@hotmail.com A + -| Jean-Paul 555-2127 jeanpaul.campanorum@nyu.edu R The subexpressions of a Boolean operator in a pattern can be constant regular expressions, comparisons, or any other `awk' @@ -8594,19 +8607,19 @@ read. Likewise, an `END' rule is executed once only, after all the input is read. For example: $ awk ' - > BEGIN { print "Analysis of \"foo\"" } - > /foo/ { ++n } - > END { print "\"foo\" appears", n, "times." }' BBS-list - -| Analysis of "foo" - -| "foo" appears 4 times. - - This program finds the number of records in the input file `BBS-list' -that contain the string `foo'. The `BEGIN' rule prints a title for the -report. There is no need to use the `BEGIN' rule to initialize the -counter `n' to zero, since `awk' does this automatically (*note -Variables::). The second rule increments the variable `n' every time a -record containing the pattern `foo' is read. The `END' rule prints the -value of `n' at the end of the run. + > BEGIN { print "Analysis of \"li\"" } + > /li/ { ++n } + > END { print "\"li\" appears in", n, "records." }' mail-list + -| Analysis of "li" + -| "li" appears in 4 records. + + This program finds the number of records in the input file +`mail-list' that contain the string `li'. The `BEGIN' rule prints a +title for the report. There is no need to use the `BEGIN' rule to +initialize the counter `n' to zero, since `awk' does this automatically +(*note Variables::). The second rule increments the variable `n' every +time a record containing the pattern `li' is read. The `END' rule +prints the value of `n' at the end of the run. The special patterns `BEGIN' and `END' cannot be used in ranges or with Boolean operators (indeed, they cannot be used with any operators). @@ -8757,7 +8770,7 @@ File: gawk.info, Node: Empty, Prev: BEGINFILE/ENDFILE, Up: Pattern Overview An empty (i.e., nonexistent) pattern is considered to match _every_ input record. For example, the program: - awk '{ print $1 }' BBS-list + awk '{ print $1 }' mail-list prints the first field of every record. @@ -9673,13 +9686,13 @@ with a pound sign (`#'). $ awk 'BEGIN { > for (i = 0; i < ARGC; i++) > print ARGV[i] - > }' inventory-shipped BBS-list + > }' inventory-shipped mail-list -| awk -| inventory-shipped - -| BBS-list + -| mail-list `ARGV[0]' contains `awk', `ARGV[1]' contains `inventory-shipped', - and `ARGV[2]' contains `BBS-list'. The value of `ARGC' is three, + and `ARGV[2]' contains `mail-list'. The value of `ARGC' is three, one more than the index of the last element in `ARGV', because the elements are numbered from zero. @@ -10006,13 +10019,13 @@ information contained in `ARGC' and `ARGV': $ awk 'BEGIN { > for (i = 0; i < ARGC; i++) > print ARGV[i] - > }' inventory-shipped BBS-list + > }' inventory-shipped mail-list -| awk -| inventory-shipped - -| BBS-list + -| mail-list In this example, `ARGV[0]' contains `awk', `ARGV[1]' contains -`inventory-shipped', and `ARGV[2]' contains `BBS-list'. Notice that +`inventory-shipped', and `ARGV[2]' contains `mail-list'. Notice that the `awk' program is not entered in `ARGV'. The other command-line options, with their arguments, are also not entered. This includes variable assignments done with the `-v' option (*note Options::). @@ -25958,6 +25971,10 @@ Info file, in approximate chronological order: 4.1 was driven primarily by Arnold Robbins and Andrew Schorr, with notable contributions from the rest of the development team. + * Antonio Giovanni Colombo rewrote a number of examples in the early + chapters that were severely dated, for which I am incredibly + grateful. + * Arnold Robbins has been working on `gawk' since 1988, at first helping David Trueman, and as the primary maintainer since around 1994. @@ -28213,9 +28230,6 @@ Bash The GNU version of the standard shell (the Bourne-Again SHell). See also "Bourne Shell." -BBS - See "Bulletin Board System." - Bit Short for "Binary Digit." All values in computer memory ultimately reduce to binary digits: values that are either zero or @@ -28261,11 +28275,6 @@ Built-in Variable Braces See "Curly Braces." -Bulletin Board System - A computer system allowing users to log in and read and/or leave - messages for other users of the system, much like leaving paper - notes on a bulletin board. - C The system programming language that most GNU software is written in. The `awk' programming language has C-like syntax, and this @@ -30352,7 +30361,7 @@ Index (line 6) * artificial intelligence, gawk and: Distribution contents. (line 52) -* ASCII <1>: Glossary. (line 141) +* ASCII <1>: Glossary. (line 133) * ASCII: Ordinal Functions. (line 45) * asort() function (gawk) <1>: Array Sorting Functions. (line 6) @@ -30497,7 +30506,6 @@ Index (line 112) * backslash (\), in regexp constants: Computed Regexps. (line 28) * backtrace debugger command: Execution Stack. (line 13) -* BBS-list file: Sample Data Files. (line 6) * Beebe, Nelson H.F. <1>: Other Versions. (line 78) * Beebe, Nelson H.F.: Acknowledgments. (line 60) * BEGIN pattern <1>: Profiling. (line 62) @@ -30506,7 +30514,7 @@ Index * BEGIN pattern: Records. (line 29) * BEGIN pattern, assert() user-defined function and: Assert Function. (line 83) -* BEGIN pattern, Boolean patterns and: Expression Patterns. (line 73) +* 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) @@ -30523,9 +30531,9 @@ Index * BEGIN pattern, TEXTDOMAIN variable and: Programmer i18n. (line 60) * BEGINFILE pattern: BEGINFILE/ENDFILE. (line 6) * BEGINFILE pattern, Boolean patterns and: Expression Patterns. - (line 73) + (line 70) * beginfile() user-defined function: Filetrans Function. (line 62) -* Bentley, Jon: Glossary. (line 151) +* Bentley, Jon: Glossary. (line 143) * Benzinger, Michael: Contributors. (line 97) * Berry, Karl <1>: Ranges and Locales. (line 74) * Berry, Karl: Acknowledgments. (line 33) @@ -30544,7 +30552,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 41) +* 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) @@ -30593,7 +30601,7 @@ Index * Brini, Davide: Signature Program. (line 6) * Broder, Alan J.: Contributors. (line 88) * Brown, Martin: Contributors. (line 82) -* BSD-based operating systems: Glossary. (line 624) +* BSD-based operating systems: Glossary. (line 616) * bt debugger command (alias for backtrace): Execution Stack. (line 13) * Buening, Andreas <1>: Bugs. (line 71) * Buening, Andreas <2>: Contributors. (line 92) @@ -30636,7 +30644,7 @@ Index * character classes, See bracket expressions: Regexp Operators. (line 55) * character lists, See bracket expressions: Regexp Operators. (line 55) -* character sets (machine character encodings) <1>: Glossary. (line 141) +* character sets (machine character encodings) <1>: Glossary. (line 133) * character sets (machine character encodings): Ordinal Functions. (line 45) * character sets, See Also bracket expressions: Regexp Operators. @@ -30647,7 +30655,7 @@ Index * Chassell, Robert J.: Acknowledgments. (line 33) * chdir() extension function: Extension Sample File Functions. (line 12) -* chem utility: Glossary. (line 151) +* chem utility: Glossary. (line 143) * chr() extension function: Extension Sample Ord. (line 15) * chr() user-defined function: Ordinal Functions. (line 16) @@ -30670,6 +30678,7 @@ Index * Collado, Manuel: Acknowledgments. (line 60) * collating elements: Bracket Expressions. (line 69) * collating symbols: Bracket Expressions. (line 76) +* Colombo, Antonio <1>: Contributors. (line 135) * Colombo, Antonio: Acknowledgments. (line 60) * columns, aligning: Print Examples. (line 70) * columns, cutting: Cut Program. (line 6) @@ -30706,7 +30715,7 @@ Index * common extensions, func keyword: Definition Syntax. (line 83) * common extensions, length() applied to an array: String Functions. (line 193) -* common extensions, RS as a regexp: Records. (line 120) +* common extensions, RS as a regexp: Records. (line 135) * common extensions, single character fields: Single Character Fields. (line 6) * comp.lang.awk newsgroup: Bugs. (line 38) @@ -30722,7 +30731,7 @@ Index * compatibility mode (gawk), octal numbers: Nondecimal-numbers. (line 60) * compatibility mode (gawk), specifying: Options. (line 81) -* compiled programs <1>: Glossary. (line 165) +* compiled programs <1>: Glossary. (line 157) * 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) @@ -30764,7 +30773,7 @@ Index * CONVFMT variable: Conversion. (line 29) * CONVFMT variable, array subscripts and: Numeric Array Subscripts. (line 6) -* cookie: Glossary. (line 157) +* cookie: Glossary. (line 149) * coprocesses <1>: Two-way I/O. (line 44) * coprocesses: Redirection. (line 102) * coprocesses, closing: Close Files And Pipes. @@ -30783,7 +30792,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 38) -* dark corner <1>: Glossary. (line 197) +* dark corner <1>: Glossary. (line 189) * dark corner: Conventions. (line 38) * dark corner, "0" is actually true: Truth Values. (line 24) * dark corner, /= operator vs. /=.../ regexp constant: Assignment Ops. @@ -30810,7 +30819,7 @@ Index * dark corner, format-control characters: Control Letters. (line 18) * dark corner, FS as null string: Single Character Fields. (line 20) -* dark corner, input files: Records. (line 103) +* dark corner, input files: Records. (line 118) * dark corner, invoking awk: Command Line. (line 16) * dark corner, length() function: String Functions. (line 179) * dark corner, locale's decimal point character: Conversion. (line 77) @@ -30824,7 +30833,7 @@ Index * dark corner, regexp constants, as arguments to user-defined functions: Using Constant Regexps. (line 43) * dark corner, split() function: String Functions. (line 358) -* dark corner, strings, storing: Records. (line 195) +* dark corner, strings, storing: Records. (line 210) * dark corner, value of ARGV[0]: Auto-set. (line 35) * data, fixed-width: Constant Size. (line 10) * data-driven languages: Basic High Level. (line 85) @@ -31006,19 +31015,19 @@ Index * differences in awk and gawk, print/printf statements: Format Modifiers. (line 13) * differences in awk and gawk, PROCINFO array: Auto-set. (line 133) -* differences in awk and gawk, record separators: Records. (line 117) +* differences in awk and gawk, record separators: Records. (line 132) * differences in awk and gawk, regexp constants: Using Constant Regexps. (line 43) * differences in awk and gawk, regular expressions: Case-sensitivity. (line 26) -* differences in awk and gawk, RS/RT variables: Records. (line 172) +* differences in awk and gawk, RS/RT variables: Records. (line 187) * differences in awk and gawk, RT variable: Auto-set. (line 266) * differences in awk and gawk, single-character fields: Single Character Fields. (line 6) * differences in awk and gawk, split() function: String Functions. (line 346) * differences in awk and gawk, strings: Scalar Constants. (line 20) -* differences in awk and gawk, strings, storing: Records. (line 191) +* differences in awk and gawk, strings, storing: Records. (line 206) * differences in awk and gawk, SYMTAB variable: Auto-set. (line 274) * differences in awk and gawk, TEXTDOMAIN variable: User-modified. (line 162) @@ -31076,7 +31085,7 @@ Index * END pattern, assert() user-defined function and: Assert Function. (line 75) * END pattern, backslash continuation and: Egrep Program. (line 220) -* END pattern, Boolean patterns and: Expression Patterns. (line 73) +* 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 45) @@ -31085,7 +31094,7 @@ 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 73) +* ENDFILE pattern, Boolean patterns and: Expression Patterns. (line 70) * endfile() user-defined function: Filetrans Function. (line 62) * endgrent() function (C library): Group Functions. (line 215) * endgrent() user-defined function: Group Functions. (line 218) @@ -31093,7 +31102,7 @@ Index * endpwent() user-defined function: Passwd Functions. (line 213) * ENVIRON array: Auto-set. (line 60) * environment variables: Auto-set. (line 60) -* epoch, definition of: Glossary. (line 243) +* epoch, definition of: Glossary. (line 235) * equals sign (=), = operator: Assignment Ops. (line 6) * equals sign (=), == operator <1>: Precedence. (line 65) * equals sign (=), == operator: Comparison Operators. @@ -31163,7 +31172,7 @@ Index * extensions, common, func keyword: Definition Syntax. (line 83) * extensions, common, length() applied to an array: String Functions. (line 193) -* extensions, common, RS as a regexp: Records. (line 120) +* extensions, common, RS as a regexp: Records. (line 135) * extensions, common, single character fields: Single Character Fields. (line 6) * extensions, in gawk, not in POSIX awk: POSIX/GNU. (line 6) @@ -31236,7 +31245,7 @@ Index * files, /inet/... (gawk): TCP/IP Networking. (line 6) * files, /inet4/... (gawk): TCP/IP Networking. (line 6) * files, /inet6/... (gawk): TCP/IP Networking. (line 6) -* files, as single records: Records. (line 204) +* files, as single records: Records. (line 219) * files, awk programs in: Long. (line 6) * files, awkprof.out: Profiling. (line 6) * files, awkvars.out: Options. (line 93) @@ -31316,10 +31325,10 @@ Index * frame debugger command: Execution Stack. (line 25) * Free Documentation License (FDL): GNU Free Documentation License. (line 6) -* Free Software Foundation (FSF) <1>: Glossary. (line 305) +* Free Software Foundation (FSF) <1>: Glossary. (line 297) * Free Software Foundation (FSF) <2>: Getting. (line 10) * Free Software Foundation (FSF): Manual History. (line 6) -* FreeBSD: Glossary. (line 624) +* FreeBSD: Glossary. (line 616) * FS variable <1>: User-modified. (line 56) * FS variable: Field Separators. (line 15) * FS variable, --field-separator option and: Options. (line 21) @@ -31332,7 +31341,7 @@ Index (line 6) * FS, containing ^: Regexp Field Splitting. (line 59) -* FSF (Free Software Foundation) <1>: Glossary. (line 305) +* FSF (Free Software Foundation) <1>: Glossary. (line 297) * FSF (Free Software Foundation) <2>: Getting. (line 10) * FSF (Free Software Foundation): Manual History. (line 6) * fts() extension function: Extension Sample File Functions. @@ -31466,7 +31475,7 @@ Index * gawk, RT variable in <2>: Getline/Variable/File. (line 10) * gawk, RT variable in <3>: Multiple Line. (line 129) -* gawk, RT variable in: Records. (line 117) +* gawk, RT variable in: Records. (line 132) * gawk, See Also awk: Preface. (line 36) * gawk, source code, obtaining: Getting. (line 6) * gawk, splitting fields and: Constant Size. (line 88) @@ -31480,7 +31489,7 @@ Index * gawk, word-boundary operator: GNU Regexp Operators. (line 63) * gawkextlib project: gawkextlib. (line 6) -* General Public License (GPL): Glossary. (line 314) +* General Public License (GPL): Glossary. (line 306) * General Public License, See GPL: Manual History. (line 11) * gensub() function (gawk) <1>: String Functions. (line 81) * gensub() function (gawk): Using Constant Regexps. @@ -31537,18 +31546,18 @@ Index * GNU awk, See gawk: Preface. (line 49) * GNU Free Documentation License: GNU Free Documentation License. (line 6) -* GNU General Public License: Glossary. (line 314) -* GNU Lesser General Public License: Glossary. (line 405) +* GNU General Public License: Glossary. (line 306) +* GNU Lesser General Public License: Glossary. (line 397) * 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 323) +* GNU Project <1>: Glossary. (line 315) * GNU Project: Manual History. (line 11) -* GNU/Linux <1>: Glossary. (line 624) +* GNU/Linux <1>: Glossary. (line 616) * 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 314) +* GPL (General Public License) <1>: Glossary. (line 306) * GPL (General Public License): Manual History. (line 11) * GPL (General Public License), printing: Options. (line 88) * grcat program: Group Functions. (line 16) @@ -31674,19 +31683,19 @@ Index * internationalization, localization, portability and: I18N Portability. (line 6) * internationalizing a program: Explaining gettext. (line 6) -* interpreted programs <1>: Glossary. (line 365) +* interpreted programs <1>: Glossary. (line 357) * interpreted programs: Basic High Level. (line 15) * interval expressions: Regexp Operators. (line 116) * inventory-shipped file: Sample Data Files. (line 32) * isarray() function (gawk): Type Functions. (line 11) -* ISO: Glossary. (line 376) -* ISO 8859-1: Glossary. (line 141) -* ISO Latin-1: Glossary. (line 141) +* ISO: Glossary. (line 368) +* ISO 8859-1: Glossary. (line 133) +* ISO Latin-1: Glossary. (line 133) * Jacobs, Andrew: Passwd Functions. (line 90) * Jaegermann, Michal <1>: Contributors. (line 45) * Jaegermann, Michal: Acknowledgments. (line 60) * Java implementation of awk: Other Versions. (line 112) -* Java programming language: Glossary. (line 388) +* Java programming language: Glossary. (line 380) * jawk: Other Versions. (line 112) * Jedi knights: Undocumented. (line 6) * join() user-defined function: Join Function. (line 18) @@ -31694,7 +31703,7 @@ Index * Kahrs, Ju"rgen: Acknowledgments. (line 60) * Kasal, Stepan: Acknowledgments. (line 60) * Kenobi, Obi-Wan: Undocumented. (line 6) -* Kernighan, Brian <1>: Glossary. (line 151) +* Kernighan, Brian <1>: Glossary. (line 143) * Kernighan, Brian <2>: Basic Data Typing. (line 55) * Kernighan, Brian <3>: Other Versions. (line 13) * Kernighan, Brian <4>: Contributors. (line 11) @@ -31735,8 +31744,8 @@ Index * left shift, bitwise: Bitwise Functions. (line 32) * leftmost longest match: Multiple Line. (line 26) * length() function: String Functions. (line 163) -* Lesser General Public License (LGPL): Glossary. (line 405) -* LGPL (Lesser General Public License): Glossary. (line 405) +* Lesser General Public License (LGPL): Glossary. (line 397) +* LGPL (Lesser General Public License): Glossary. (line 397) * libmawk: Other Versions. (line 120) * libraries of awk functions: Library Functions. (line 6) * libraries of awk functions, assertions: Assert Function. (line 6) @@ -31781,7 +31790,7 @@ Index * lint checking, undefined functions: Pass By Value/Reference. (line 88) * LINT variable: User-modified. (line 98) -* Linux <1>: Glossary. (line 624) +* Linux <1>: Glossary. (line 616) * Linux <2>: I18N Example. (line 55) * Linux: Manual History. (line 28) * list debugger command: Miscellaneous Debugger Commands. @@ -31813,6 +31822,7 @@ Index * ls utility: More Complex. (line 15) * lshift() function (gawk): Bitwise Functions. (line 46) * lvalues/rvalues: Assignment Ops. (line 32) +* 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 72) @@ -31862,7 +31872,7 @@ Index * namespace issues, functions: Definition Syntax. (line 20) * nawk utility: Names. (line 17) * negative zero: Unexpected Results. (line 34) -* NetBSD: Glossary. (line 624) +* NetBSD: Glossary. (line 616) * networks, programming: TCP/IP Networking. (line 6) * networks, support for: Special Network. (line 6) * newlines <1>: Boolean Ops. (line 67) @@ -31909,7 +31919,7 @@ Index * null strings <2>: Truth Values. (line 6) * null strings <3>: Regexp Field Splitting. (line 43) -* null strings: Records. (line 107) +* null strings: Records. (line 122) * null strings, array elements and: Delete. (line 27) * null strings, as array subscripts: Uninitialized Subscripts. (line 43) @@ -31947,7 +31957,7 @@ Index * OFS variable <1>: User-modified. (line 124) * OFS variable <2>: Output Separators. (line 6) * OFS variable: Changing Fields. (line 64) -* OpenBSD: Glossary. (line 624) +* OpenBSD: Glossary. (line 616) * OpenSolaris: Other Versions. (line 96) * operating systems, BSD-based: Manual History. (line 28) * operating systems, PC, gawk on: PC Using. (line 6) @@ -32018,7 +32028,7 @@ Index * output, standard: Special FD. (line 6) * p debugger command (alias for print): Viewing And Changing Data. (line 36) -* P1003.1 POSIX standard: Glossary. (line 462) +* P1003.1 POSIX standard: Glossary. (line 454) * parentheses () <1>: Profiling. (line 146) * parentheses (): Regexp Operators. (line 79) * password file: Passwd Functions. (line 16) @@ -32031,7 +32041,7 @@ Index * patterns, empty: Empty. (line 6) * patterns, expressions as: Regexp Patterns. (line 6) * patterns, ranges in: Ranges. (line 6) -* patterns, regexp constants as: Expression Patterns. (line 36) +* patterns, regexp constants as: Expression Patterns. (line 34) * patterns, types of: Pattern Overview. (line 15) * pawk (profiling version of Brian Kernighan's awk): Other Versions. (line 78) @@ -32069,7 +32079,7 @@ Index (line 112) * portability, close() function and: Close Files And Pipes. (line 81) -* portability, data files as single record: Records. (line 179) +* portability, data files as single record: Records. (line 194) * portability, deleting array elements: Delete. (line 56) * portability, example programs: Library Functions. (line 42) * portability, functions, defining: Definition Syntax. (line 99) @@ -32209,7 +32219,7 @@ Index * programming languages, Ada: Glossary. (line 20) * programming languages, data-driven vs. procedural: Getting Started. (line 12) -* programming languages, Java: Glossary. (line 388) +* programming languages, Java: Glossary. (line 380) * programming, basic steps: Basic High Level. (line 20) * programming, concepts: Basic Concepts. (line 6) * pwcat program: Passwd Functions. (line 23) @@ -32260,16 +32270,16 @@ Index * recipe for a programming language: History. (line 6) * record separators <1>: User-modified. (line 143) * record separators: Records. (line 14) -* record separators, changing: Records. (line 81) -* record separators, regular expressions as: Records. (line 117) +* record separators, changing: Records. (line 93) +* record separators, regular expressions as: Records. (line 132) * record separators, with multiline records: Multiple Line. (line 10) * records <1>: Basic High Level. (line 73) * records: Reading Files. (line 14) * records, multiline: Multiple Line. (line 6) * records, printing: Print. (line 22) * records, splitting input into: Records. (line 6) -* records, terminating: Records. (line 117) -* records, treating files as: Records. (line 204) +* records, terminating: Records. (line 132) +* records, treating files as: Records. (line 219) * recursive functions: Definition Syntax. (line 73) * redirection of input: Getline/File. (line 6) * redirection of output: Redirection. (line 6) @@ -32280,7 +32290,7 @@ Index * regexp constants <2>: Regexp Constants. (line 6) * regexp constants: Regexp Usage. (line 57) * regexp constants, /=.../, /= operator and: Assignment Ops. (line 147) -* regexp constants, as patterns: Expression Patterns. (line 36) +* 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 28) @@ -32293,7 +32303,7 @@ Index (line 6) * regular expressions, as patterns <1>: Regexp Patterns. (line 6) * regular expressions, as patterns: Regexp Usage. (line 6) -* regular expressions, as record separators: Records. (line 117) +* regular expressions, as record separators: Records. (line 132) * regular expressions, case sensitivity <1>: User-modified. (line 82) * regular expressions, case sensitivity: Case-sensitivity. (line 6) * regular expressions, computed: Computed Regexps. (line 6) @@ -32346,13 +32356,13 @@ Index * RLENGTH variable, match() function and: String Functions. (line 220) * Robbins, Arnold <1>: Future Extensions. (line 6) * Robbins, Arnold <2>: Bugs. (line 32) -* Robbins, Arnold <3>: Contributors. (line 135) +* Robbins, Arnold <3>: Contributors. (line 139) * Robbins, Arnold <4>: General Data Types. (line 6) * Robbins, Arnold <5>: Alarm Program. (line 6) * Robbins, Arnold <6>: Passwd Functions. (line 90) * Robbins, Arnold <7>: Getline/Pipe. (line 39) * Robbins, Arnold: Command Line Field Separator. - (line 80) + (line 73) * Robbins, Bill: Getline/Pipe. (line 39) * Robbins, Harry: Acknowledgments. (line 78) * Robbins, Jean: Acknowledgments. (line 78) @@ -32376,7 +32386,7 @@ Index * RT variable <2>: Getline/Variable/File. (line 10) * RT variable <3>: Multiple Line. (line 129) -* RT variable: Records. (line 117) +* RT variable: Records. (line 132) * Rubin, Paul <1>: Contributors. (line 15) * Rubin, Paul: History. (line 30) * rule, definition of: Getting Started. (line 21) @@ -32421,7 +32431,7 @@ Index * separators, field, POSIX and: Fields. (line 6) * separators, for records <1>: User-modified. (line 143) * separators, for records: Records. (line 14) -* separators, for records, regular expressions as: Records. (line 117) +* separators, for records, regular expressions as: Records. (line 132) * separators, for statements in actions: Action Overview. (line 19) * separators, subscript: User-modified. (line 156) * set debugger command: Viewing And Changing Data. @@ -32471,7 +32481,7 @@ Index * sidebar, Piping into sh: Redirection. (line 140) * sidebar, Portability Issues with #!: Executable Scripts. (line 31) * sidebar, Recipe For A Programming Language: History. (line 6) -* sidebar, RS = "\0" Is Not Portable: Records. (line 177) +* sidebar, RS = "\0" Is Not Portable: Records. (line 192) * sidebar, So Why Does gawk have BEGINFILE and ENDFILE?: Filetrans Function. (line 83) * sidebar, Syntactic Ambiguities Between /= and Regular Expressions: Assignment Ops. @@ -32541,7 +32551,7 @@ Index * sqrt() function: Numeric Functions. (line 78) * square brackets ([]): Regexp Operators. (line 55) * srand() function: Numeric Functions. (line 82) -* Stallman, Richard <1>: Glossary. (line 305) +* Stallman, Richard <1>: Glossary. (line 297) * Stallman, Richard <2>: Contributors. (line 23) * Stallman, Richard <3>: Acknowledgments. (line 18) * Stallman, Richard: Manual History. (line 6) @@ -32571,7 +32581,7 @@ Index * strings, converting <1>: Bitwise Functions. (line 109) * strings, converting: Conversion. (line 6) * strings, converting, numbers to: User-modified. (line 28) -* strings, empty, See null strings: Records. (line 107) +* strings, empty, See null strings: Records. (line 122) * strings, extracting: String Extraction. (line 6) * strings, for localization: Programmer i18n. (line 14) * strings, length of: Scalar Constants. (line 20) @@ -32613,7 +32623,7 @@ Index * TCP/IP, support for: Special Network. (line 6) * tee utility: Tee Program. (line 6) * tee.awk program: Tee Program. (line 26) -* terminating records: Records. (line 117) +* terminating records: Records. (line 132) * testbits.awk program: Bitwise Functions. (line 70) * testext extension: Extension Sample API Tests. (line 6) @@ -32709,20 +32719,20 @@ Index * undisplay debugger command: Viewing And Changing Data. (line 80) * undocumented features: Undocumented. (line 6) -* Unicode <1>: Glossary. (line 141) +* Unicode <1>: Glossary. (line 133) * 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 624) +* Unix: Glossary. (line 616) * Unix awk, backslashes in escape sequences: Escape Sequences. (line 124) * Unix awk, close() function and: Close Files And Pipes. (line 130) * Unix awk, password files, field separators and: Command Line Field Separator. - (line 72) + (line 64) * Unix, awk scripts and: Executable Scripts. (line 6) * UNIXROOT variable, on OS/2 systems: PC Using. (line 16) * unsigned integers: General Arithmetic. (line 15) @@ -32887,499 +32897,499 @@ Node: Comments80254 Node: Quoting82721 Node: DOS Quoting87344 Node: Sample Data Files88019 -Node: Very Simple90405 -Node: Two Rules95004 -Node: More Complex97151 -Ref: More Complex-Footnote-1100081 -Node: Statements/Lines100166 -Ref: Statements/Lines-Footnote-1104628 -Node: Other Features104893 -Node: When105821 -Node: Invoking Gawk107968 -Node: Command Line109431 -Node: Options110214 -Ref: Options-Footnote-1125609 -Node: Other Arguments125634 -Node: Naming Standard Input128292 -Node: Environment Variables129386 -Node: AWKPATH Variable129944 -Ref: AWKPATH Variable-Footnote-1132702 -Node: AWKLIBPATH Variable132962 -Node: Other Environment Variables133680 -Node: Exit Status136643 -Node: Include Files137318 -Node: Loading Shared Libraries140887 -Node: Obsolete142251 -Node: Undocumented142948 -Node: Regexp143190 -Node: Regexp Usage144579 -Node: Escape Sequences146605 -Node: Regexp Operators152274 -Ref: Regexp Operators-Footnote-1159654 -Ref: Regexp Operators-Footnote-2159801 -Node: Bracket Expressions159899 -Ref: table-char-classes161789 -Node: GNU Regexp Operators164312 -Node: Case-sensitivity168035 -Ref: Case-sensitivity-Footnote-1171003 -Ref: Case-sensitivity-Footnote-2171238 -Node: Leftmost Longest171346 -Node: Computed Regexps172547 -Node: Reading Files175884 -Node: Records177886 -Ref: Records-Footnote-1186974 -Node: Fields187011 -Ref: Fields-Footnote-1190044 -Node: Nonconstant Fields190130 -Node: Changing Fields192332 -Node: Field Separators198291 -Node: Default Field Splitting200993 -Node: Regexp Field Splitting202110 -Node: Single Character Fields205452 -Node: Command Line Field Separator206511 -Node: Full Line Fields209945 -Ref: Full Line Fields-Footnote-1210453 -Node: Field Splitting Summary210499 -Ref: Field Splitting Summary-Footnote-1213598 -Node: Constant Size213699 -Node: Splitting By Content218306 -Ref: Splitting By Content-Footnote-1222055 -Node: Multiple Line222095 -Ref: Multiple Line-Footnote-1227942 -Node: Getline228121 -Node: Plain Getline230337 -Node: Getline/Variable232432 -Node: Getline/File233579 -Node: Getline/Variable/File234920 -Ref: Getline/Variable/File-Footnote-1236519 -Node: Getline/Pipe236606 -Node: Getline/Variable/Pipe239305 -Node: Getline/Coprocess240412 -Node: Getline/Variable/Coprocess241664 -Node: Getline Notes242401 -Node: Getline Summary245188 -Ref: table-getline-variants245596 -Node: Read Timeout246508 -Ref: Read Timeout-Footnote-1250249 -Node: Command line directories250306 -Node: Printing250936 -Node: Print252567 -Node: Print Examples253904 -Node: Output Separators256688 -Node: OFMT258448 -Node: Printf259806 -Node: Basic Printf260712 -Node: Control Letters262251 -Node: Format Modifiers266063 -Node: Printf Examples272072 -Node: Redirection274787 -Node: Special Files281752 -Node: Special FD282285 -Ref: Special FD-Footnote-1285910 -Node: Special Network285984 -Node: Special Caveats286834 -Node: Close Files And Pipes287630 -Ref: Close Files And Pipes-Footnote-1294613 -Ref: Close Files And Pipes-Footnote-2294761 -Node: Expressions294911 -Node: Values296043 -Node: Constants296719 -Node: Scalar Constants297399 -Ref: Scalar Constants-Footnote-1298258 -Node: Nondecimal-numbers298440 -Node: Regexp Constants301440 -Node: Using Constant Regexps301915 -Node: Variables304970 -Node: Using Variables305625 -Node: Assignment Options307349 -Node: Conversion309221 -Ref: table-locale-affects314721 -Ref: Conversion-Footnote-1315345 -Node: All Operators315454 -Node: Arithmetic Ops316084 -Node: Concatenation318589 -Ref: Concatenation-Footnote-1321381 -Node: Assignment Ops321501 -Ref: table-assign-ops326489 -Node: Increment Ops327820 -Node: Truth Values and Conditions331254 -Node: Truth Values332337 -Node: Typing and Comparison333386 -Node: Variable Typing334179 -Ref: Variable Typing-Footnote-1338076 -Node: Comparison Operators338198 -Ref: table-relational-ops338608 -Node: POSIX String Comparison342156 -Ref: POSIX String Comparison-Footnote-1343112 -Node: Boolean Ops343250 -Ref: Boolean Ops-Footnote-1347328 -Node: Conditional Exp347419 -Node: Function Calls349151 -Node: Precedence352745 -Node: Locales356414 -Node: Patterns and Actions357503 -Node: Pattern Overview358557 -Node: Regexp Patterns360226 -Node: Expression Patterns360769 -Node: Ranges364454 -Node: BEGIN/END367558 -Node: Using BEGIN/END368320 -Ref: Using BEGIN/END-Footnote-1371051 -Node: I/O And BEGIN/END371157 -Node: BEGINFILE/ENDFILE373439 -Node: Empty376353 -Node: Using Shell Variables376669 -Node: Action Overview378954 -Node: Statements381311 -Node: If Statement383165 -Node: While Statement384664 -Node: Do Statement386708 -Node: For Statement387864 -Node: Switch Statement391016 -Node: Break Statement393170 -Node: Continue Statement395160 -Node: Next Statement396953 -Node: Nextfile Statement399343 -Node: Exit Statement401998 -Node: Built-in Variables404414 -Node: User-modified405509 -Ref: User-modified-Footnote-1413867 -Node: Auto-set413929 -Ref: Auto-set-Footnote-1427007 -Ref: Auto-set-Footnote-2427212 -Node: ARGC and ARGV427268 -Node: Arrays431119 -Node: Array Basics432624 -Node: Array Intro433450 -Node: Reference to Elements437767 -Node: Assigning Elements440037 -Node: Array Example440528 -Node: Scanning an Array442260 -Node: Controlling Scanning444574 -Ref: Controlling Scanning-Footnote-1449661 -Node: Delete449977 -Ref: Delete-Footnote-1452742 -Node: Numeric Array Subscripts452799 -Node: Uninitialized Subscripts454982 -Node: Multidimensional456609 -Node: Multiscanning459702 -Node: Arrays of Arrays461291 -Node: Functions465931 -Node: Built-in466750 -Node: Calling Built-in467828 -Node: Numeric Functions469816 -Ref: Numeric Functions-Footnote-1473648 -Ref: Numeric Functions-Footnote-2474005 -Ref: Numeric Functions-Footnote-3474053 -Node: String Functions474322 -Ref: String Functions-Footnote-1497242 -Ref: String Functions-Footnote-2497371 -Ref: String Functions-Footnote-3497619 -Node: Gory Details497706 -Ref: table-sub-escapes499385 -Ref: table-sub-posix-92500739 -Ref: table-sub-proposed502090 -Ref: table-posix-sub503444 -Ref: table-gensub-escapes504989 -Ref: Gory Details-Footnote-1506165 -Ref: Gory Details-Footnote-2506216 -Node: I/O Functions506367 -Ref: I/O Functions-Footnote-1513357 -Node: Time Functions513504 -Ref: Time Functions-Footnote-1524437 -Ref: Time Functions-Footnote-2524505 -Ref: Time Functions-Footnote-3524663 -Ref: Time Functions-Footnote-4524774 -Ref: Time Functions-Footnote-5524886 -Ref: Time Functions-Footnote-6525113 -Node: Bitwise Functions525379 -Ref: table-bitwise-ops525941 -Ref: Bitwise Functions-Footnote-1530162 -Node: Type Functions530346 -Node: I18N Functions531497 -Node: User-defined533124 -Node: Definition Syntax533928 -Ref: Definition Syntax-Footnote-1538842 -Node: Function Example538911 -Ref: Function Example-Footnote-1541560 -Node: Function Caveats541582 -Node: Calling A Function542100 -Node: Variable Scope543055 -Node: Pass By Value/Reference546018 -Node: Return Statement549526 -Node: Dynamic Typing552507 -Node: Indirect Calls553438 -Node: Library Functions563125 -Ref: Library Functions-Footnote-1566638 -Ref: Library Functions-Footnote-2566781 -Node: Library Names566952 -Ref: Library Names-Footnote-1570425 -Ref: Library Names-Footnote-2570645 -Node: General Functions570731 -Node: Strtonum Function571759 -Node: Assert Function574689 -Node: Round Function578015 -Node: Cliff Random Function579556 -Node: Ordinal Functions580572 -Ref: Ordinal Functions-Footnote-1583649 -Ref: Ordinal Functions-Footnote-2583901 -Node: Join Function584112 -Ref: Join Function-Footnote-1585883 -Node: Getlocaltime Function586083 -Node: Readfile Function589824 -Node: Data File Management591663 -Node: Filetrans Function592295 -Node: Rewind Function596364 -Node: File Checking597751 -Node: Empty Files598845 -Node: Ignoring Assigns601075 -Node: Getopt Function602629 -Ref: Getopt Function-Footnote-1613932 -Node: Passwd Functions614135 -Ref: Passwd Functions-Footnote-1623113 -Node: Group Functions623201 -Node: Walking Arrays631285 -Node: Sample Programs633421 -Node: Running Examples634095 -Node: Clones634823 -Node: Cut Program636047 -Node: Egrep Program645898 -Ref: Egrep Program-Footnote-1653671 -Node: Id Program653781 -Node: Split Program657397 -Ref: Split Program-Footnote-1660916 -Node: Tee Program661044 -Node: Uniq Program663847 -Node: Wc Program671276 -Ref: Wc Program-Footnote-1675542 -Ref: Wc Program-Footnote-2675742 -Node: Miscellaneous Programs675834 -Node: Dupword Program677022 -Node: Alarm Program679053 -Node: Translate Program683860 -Ref: Translate Program-Footnote-1688247 -Ref: Translate Program-Footnote-2688495 -Node: Labels Program688629 -Ref: Labels Program-Footnote-1692000 -Node: Word Sorting692084 -Node: History Sorting695968 -Node: Extract Program697807 -Ref: Extract Program-Footnote-1705310 -Node: Simple Sed705438 -Node: Igawk Program708500 -Ref: Igawk Program-Footnote-1723657 -Ref: Igawk Program-Footnote-2723858 -Node: Anagram Program723996 -Node: Signature Program727064 -Node: Advanced Features728164 -Node: Nondecimal Data730050 -Node: Array Sorting731633 -Node: Controlling Array Traversal732330 -Node: Array Sorting Functions740614 -Ref: Array Sorting Functions-Footnote-1744483 -Node: Two-way I/O744677 -Ref: Two-way I/O-Footnote-1750109 -Node: TCP/IP Networking750191 -Node: Profiling753035 -Node: Internationalization760538 -Node: I18N and L10N761963 -Node: Explaining gettext762649 -Ref: Explaining gettext-Footnote-1767717 -Ref: Explaining gettext-Footnote-2767901 -Node: Programmer i18n768066 -Node: Translator i18n772268 -Node: String Extraction773062 -Ref: String Extraction-Footnote-1774023 -Node: Printf Ordering774109 -Ref: Printf Ordering-Footnote-1776891 -Node: I18N Portability776955 -Ref: I18N Portability-Footnote-1779404 -Node: I18N Example779467 -Ref: I18N Example-Footnote-1782105 -Node: Gawk I18N782177 -Node: Debugger782798 -Node: Debugging783769 -Node: Debugging Concepts784202 -Node: Debugging Terms786058 -Node: Awk Debugging788655 -Node: Sample Debugging Session789547 -Node: Debugger Invocation790067 -Node: Finding The Bug791400 -Node: List of Debugger Commands797887 -Node: Breakpoint Control799221 -Node: Debugger Execution Control802885 -Node: Viewing And Changing Data806245 -Node: Execution Stack809601 -Node: Debugger Info811068 -Node: Miscellaneous Debugger Commands815050 -Node: Readline Support820226 -Node: Limitations821057 -Node: Arbitrary Precision Arithmetic823309 -Ref: Arbitrary Precision Arithmetic-Footnote-1824958 -Node: General Arithmetic825106 -Node: Floating Point Issues826826 -Node: String Conversion Precision827707 -Ref: String Conversion Precision-Footnote-1829412 -Node: Unexpected Results829521 -Node: POSIX Floating Point Problems831674 -Ref: POSIX Floating Point Problems-Footnote-1835499 -Node: Integer Programming835537 -Node: Floating-point Programming837276 -Ref: Floating-point Programming-Footnote-1843607 -Ref: Floating-point Programming-Footnote-2843877 -Node: Floating-point Representation844141 -Node: Floating-point Context845306 -Ref: table-ieee-formats846145 -Node: Rounding Mode847529 -Ref: table-rounding-modes848008 -Ref: Rounding Mode-Footnote-1851023 -Node: Gawk and MPFR851202 -Node: Arbitrary Precision Floats852457 -Ref: Arbitrary Precision Floats-Footnote-1854900 -Node: Setting Precision855216 -Ref: table-predefined-precision-strings855902 -Node: Setting Rounding Mode858047 -Ref: table-gawk-rounding-modes858451 -Node: Floating-point Constants859638 -Node: Changing Precision861067 -Ref: Changing Precision-Footnote-1862464 -Node: Exact Arithmetic862638 -Node: Arbitrary Precision Integers865776 -Ref: Arbitrary Precision Integers-Footnote-1868791 -Node: Dynamic Extensions868938 -Node: Extension Intro870396 -Node: Plugin License871661 -Node: Extension Mechanism Outline872346 -Ref: load-extension872763 -Ref: load-new-function874241 -Ref: call-new-function875236 -Node: Extension API Description877251 -Node: Extension API Functions Introduction878538 -Node: General Data Types883465 -Ref: General Data Types-Footnote-1889160 -Node: Requesting Values889459 -Ref: table-value-types-returned890196 -Node: Memory Allocation Functions891150 -Ref: Memory Allocation Functions-Footnote-1893896 -Node: Constructor Functions893992 -Node: Registration Functions895750 -Node: Extension Functions896435 -Node: Exit Callback Functions898737 -Node: Extension Version String899986 -Node: Input Parsers900636 -Node: Output Wrappers910393 -Node: Two-way processors914903 -Node: Printing Messages917111 -Ref: Printing Messages-Footnote-1918188 -Node: Updating `ERRNO'918340 -Node: Accessing Parameters919079 -Node: Symbol Table Access920309 -Node: Symbol table by name920823 -Node: Symbol table by cookie922572 -Ref: Symbol table by cookie-Footnote-1926704 -Node: Cached values926767 -Ref: Cached values-Footnote-1930257 -Node: Array Manipulation930348 -Ref: Array Manipulation-Footnote-1931446 -Node: Array Data Types931485 -Ref: Array Data Types-Footnote-1934188 -Node: Array Functions934280 -Node: Flattening Arrays938116 -Node: Creating Arrays944968 -Node: Extension API Variables949693 -Node: Extension Versioning950329 -Node: Extension API Informational Variables952230 -Node: Extension API Boilerplate953316 -Node: Finding Extensions957120 -Node: Extension Example957680 -Node: Internal File Description958410 -Node: Internal File Ops962501 -Ref: Internal File Ops-Footnote-1974010 -Node: Using Internal File Ops974150 -Ref: Using Internal File Ops-Footnote-1976503 -Node: Extension Samples976769 -Node: Extension Sample File Functions978293 -Node: Extension Sample Fnmatch986778 -Node: Extension Sample Fork988547 -Node: Extension Sample Inplace989760 -Node: Extension Sample Ord991538 -Node: Extension Sample Readdir992374 -Node: Extension Sample Revout993906 -Node: Extension Sample Rev2way994499 -Node: Extension Sample Read write array995189 -Node: Extension Sample Readfile997072 -Node: Extension Sample API Tests997890 -Node: Extension Sample Time998415 -Node: gawkextlib999779 -Node: Language History1002560 -Node: V7/SVR3.11004153 -Node: SVR41006473 -Node: POSIX1007915 -Node: BTL1009301 -Node: POSIX/GNU1010035 -Node: Feature History1015634 -Node: Common Extensions1028610 -Node: Ranges and Locales1029922 -Ref: Ranges and Locales-Footnote-11034539 -Ref: Ranges and Locales-Footnote-21034566 -Ref: Ranges and Locales-Footnote-31034800 -Node: Contributors1035021 -Node: Installation1040248 -Node: Gawk Distribution1041142 -Node: Getting1041626 -Node: Extracting1042452 -Node: Distribution contents1044144 -Node: Unix Installation1049849 -Node: Quick Installation1050466 -Node: Additional Configuration Options1052912 -Node: Configuration Philosophy1054648 -Node: Non-Unix Installation1057002 -Node: PC Installation1057460 -Node: PC Binary Installation1058759 -Node: PC Compiling1060607 -Node: PC Testing1063551 -Node: PC Using1064727 -Node: Cygwin1068895 -Node: MSYS1069704 -Node: VMS Installation1070218 -Node: VMS Compilation1070982 -Ref: VMS Compilation-Footnote-11072234 -Node: VMS Dynamic Extensions1072292 -Node: VMS Installation Details1073665 -Node: VMS Running1075916 -Node: VMS GNV1078750 -Node: VMS Old Gawk1079473 -Node: Bugs1079943 -Node: Other Versions1083861 -Node: Notes1089945 -Node: Compatibility Mode1090745 -Node: Additions1091528 -Node: Accessing The Source1092455 -Node: Adding Code1093895 -Node: New Ports1099940 -Node: Derived Files1104075 -Ref: Derived Files-Footnote-11109396 -Ref: Derived Files-Footnote-21109430 -Ref: Derived Files-Footnote-31110030 -Node: Future Extensions1110128 -Node: Implementation Limitations1110711 -Node: Extension Design1111963 -Node: Old Extension Problems1113117 -Ref: Old Extension Problems-Footnote-11114625 -Node: Extension New Mechanism Goals1114682 -Ref: Extension New Mechanism Goals-Footnote-11118047 -Node: Extension Other Design Decisions1118233 -Node: Extension Future Growth1120339 -Node: Old Extension Mechanism1121175 -Node: Basic Concepts1122915 -Node: Basic High Level1123596 -Ref: figure-general-flow1123867 -Ref: figure-process-flow1124466 -Ref: Basic High Level-Footnote-11127695 -Node: Basic Data Typing1127880 -Node: Glossary1131235 -Node: Copying1156697 -Node: GNU Free Documentation License1194254 -Node: Index1219391 +Node: Very Simple90534 +Node: Two Rules95185 +Node: More Complex97083 +Ref: More Complex-Footnote-1100013 +Node: Statements/Lines100098 +Ref: Statements/Lines-Footnote-1104561 +Node: Other Features104826 +Node: When105754 +Node: Invoking Gawk107901 +Node: Command Line109364 +Node: Options110147 +Ref: Options-Footnote-1125542 +Node: Other Arguments125567 +Node: Naming Standard Input128225 +Node: Environment Variables129319 +Node: AWKPATH Variable129877 +Ref: AWKPATH Variable-Footnote-1132635 +Node: AWKLIBPATH Variable132895 +Node: Other Environment Variables133613 +Node: Exit Status136576 +Node: Include Files137251 +Node: Loading Shared Libraries140820 +Node: Obsolete142184 +Node: Undocumented142881 +Node: Regexp143123 +Node: Regexp Usage144512 +Node: Escape Sequences146537 +Node: Regexp Operators152206 +Ref: Regexp Operators-Footnote-1159586 +Ref: Regexp Operators-Footnote-2159733 +Node: Bracket Expressions159831 +Ref: table-char-classes161721 +Node: GNU Regexp Operators164244 +Node: Case-sensitivity167967 +Ref: Case-sensitivity-Footnote-1170935 +Ref: Case-sensitivity-Footnote-2171170 +Node: Leftmost Longest171278 +Node: Computed Regexps172479 +Node: Reading Files175816 +Node: Records177818 +Ref: Records-Footnote-1187341 +Node: Fields187378 +Ref: Fields-Footnote-1190334 +Node: Nonconstant Fields190420 +Node: Changing Fields192626 +Node: Field Separators198585 +Node: Default Field Splitting201287 +Node: Regexp Field Splitting202404 +Node: Single Character Fields205746 +Node: Command Line Field Separator206805 +Node: Full Line Fields210147 +Ref: Full Line Fields-Footnote-1210655 +Node: Field Splitting Summary210701 +Ref: Field Splitting Summary-Footnote-1213800 +Node: Constant Size213901 +Node: Splitting By Content218508 +Ref: Splitting By Content-Footnote-1222257 +Node: Multiple Line222297 +Ref: Multiple Line-Footnote-1228144 +Node: Getline228323 +Node: Plain Getline230539 +Node: Getline/Variable232634 +Node: Getline/File233781 +Node: Getline/Variable/File235122 +Ref: Getline/Variable/File-Footnote-1236721 +Node: Getline/Pipe236808 +Node: Getline/Variable/Pipe239507 +Node: Getline/Coprocess240614 +Node: Getline/Variable/Coprocess241866 +Node: Getline Notes242603 +Node: Getline Summary245390 +Ref: table-getline-variants245798 +Node: Read Timeout246710 +Ref: Read Timeout-Footnote-1250451 +Node: Command line directories250508 +Node: Printing251138 +Node: Print252769 +Node: Print Examples254106 +Node: Output Separators256890 +Node: OFMT258906 +Node: Printf260264 +Node: Basic Printf261170 +Node: Control Letters262709 +Node: Format Modifiers266521 +Node: Printf Examples272530 +Node: Redirection275242 +Node: Special Files282216 +Node: Special FD282749 +Ref: Special FD-Footnote-1286374 +Node: Special Network286448 +Node: Special Caveats287298 +Node: Close Files And Pipes288094 +Ref: Close Files And Pipes-Footnote-1295077 +Ref: Close Files And Pipes-Footnote-2295225 +Node: Expressions295375 +Node: Values296507 +Node: Constants297183 +Node: Scalar Constants297863 +Ref: Scalar Constants-Footnote-1298722 +Node: Nondecimal-numbers298904 +Node: Regexp Constants301904 +Node: Using Constant Regexps302379 +Node: Variables305434 +Node: Using Variables306089 +Node: Assignment Options307813 +Node: Conversion309688 +Ref: table-locale-affects315188 +Ref: Conversion-Footnote-1315812 +Node: All Operators315921 +Node: Arithmetic Ops316551 +Node: Concatenation319056 +Ref: Concatenation-Footnote-1321844 +Node: Assignment Ops321964 +Ref: table-assign-ops326952 +Node: Increment Ops328283 +Node: Truth Values and Conditions331717 +Node: Truth Values332800 +Node: Typing and Comparison333849 +Node: Variable Typing334642 +Ref: Variable Typing-Footnote-1338539 +Node: Comparison Operators338661 +Ref: table-relational-ops339071 +Node: POSIX String Comparison342619 +Ref: POSIX String Comparison-Footnote-1343575 +Node: Boolean Ops343713 +Ref: Boolean Ops-Footnote-1347783 +Node: Conditional Exp347874 +Node: Function Calls349606 +Node: Precedence353200 +Node: Locales356869 +Node: Patterns and Actions357958 +Node: Pattern Overview359012 +Node: Regexp Patterns360681 +Node: Expression Patterns361224 +Node: Ranges365005 +Node: BEGIN/END368109 +Node: Using BEGIN/END368871 +Ref: Using BEGIN/END-Footnote-1371607 +Node: I/O And BEGIN/END371713 +Node: BEGINFILE/ENDFILE373995 +Node: Empty376909 +Node: Using Shell Variables377226 +Node: Action Overview379511 +Node: Statements381868 +Node: If Statement383722 +Node: While Statement385221 +Node: Do Statement387265 +Node: For Statement388421 +Node: Switch Statement391573 +Node: Break Statement393727 +Node: Continue Statement395717 +Node: Next Statement397510 +Node: Nextfile Statement399900 +Node: Exit Statement402555 +Node: Built-in Variables404971 +Node: User-modified406066 +Ref: User-modified-Footnote-1414424 +Node: Auto-set414486 +Ref: Auto-set-Footnote-1427567 +Ref: Auto-set-Footnote-2427772 +Node: ARGC and ARGV427828 +Node: Arrays431682 +Node: Array Basics433187 +Node: Array Intro434013 +Node: Reference to Elements438330 +Node: Assigning Elements440600 +Node: Array Example441091 +Node: Scanning an Array442823 +Node: Controlling Scanning445137 +Ref: Controlling Scanning-Footnote-1450224 +Node: Delete450540 +Ref: Delete-Footnote-1453305 +Node: Numeric Array Subscripts453362 +Node: Uninitialized Subscripts455545 +Node: Multidimensional457172 +Node: Multiscanning460265 +Node: Arrays of Arrays461854 +Node: Functions466494 +Node: Built-in467313 +Node: Calling Built-in468391 +Node: Numeric Functions470379 +Ref: Numeric Functions-Footnote-1474211 +Ref: Numeric Functions-Footnote-2474568 +Ref: Numeric Functions-Footnote-3474616 +Node: String Functions474885 +Ref: String Functions-Footnote-1497805 +Ref: String Functions-Footnote-2497934 +Ref: String Functions-Footnote-3498182 +Node: Gory Details498269 +Ref: table-sub-escapes499948 +Ref: table-sub-posix-92501302 +Ref: table-sub-proposed502653 +Ref: table-posix-sub504007 +Ref: table-gensub-escapes505552 +Ref: Gory Details-Footnote-1506728 +Ref: Gory Details-Footnote-2506779 +Node: I/O Functions506930 +Ref: I/O Functions-Footnote-1513920 +Node: Time Functions514067 +Ref: Time Functions-Footnote-1525000 +Ref: Time Functions-Footnote-2525068 +Ref: Time Functions-Footnote-3525226 +Ref: Time Functions-Footnote-4525337 +Ref: Time Functions-Footnote-5525449 +Ref: Time Functions-Footnote-6525676 +Node: Bitwise Functions525942 +Ref: table-bitwise-ops526504 +Ref: Bitwise Functions-Footnote-1530725 +Node: Type Functions530909 +Node: I18N Functions532060 +Node: User-defined533687 +Node: Definition Syntax534491 +Ref: Definition Syntax-Footnote-1539405 +Node: Function Example539474 +Ref: Function Example-Footnote-1542123 +Node: Function Caveats542145 +Node: Calling A Function542663 +Node: Variable Scope543618 +Node: Pass By Value/Reference546581 +Node: Return Statement550089 +Node: Dynamic Typing553070 +Node: Indirect Calls554001 +Node: Library Functions563688 +Ref: Library Functions-Footnote-1567201 +Ref: Library Functions-Footnote-2567344 +Node: Library Names567515 +Ref: Library Names-Footnote-1570988 +Ref: Library Names-Footnote-2571208 +Node: General Functions571294 +Node: Strtonum Function572322 +Node: Assert Function575252 +Node: Round Function578578 +Node: Cliff Random Function580119 +Node: Ordinal Functions581135 +Ref: Ordinal Functions-Footnote-1584212 +Ref: Ordinal Functions-Footnote-2584464 +Node: Join Function584675 +Ref: Join Function-Footnote-1586446 +Node: Getlocaltime Function586646 +Node: Readfile Function590387 +Node: Data File Management592226 +Node: Filetrans Function592858 +Node: Rewind Function596927 +Node: File Checking598314 +Node: Empty Files599408 +Node: Ignoring Assigns601638 +Node: Getopt Function603192 +Ref: Getopt Function-Footnote-1614495 +Node: Passwd Functions614698 +Ref: Passwd Functions-Footnote-1623676 +Node: Group Functions623764 +Node: Walking Arrays631848 +Node: Sample Programs633984 +Node: Running Examples634658 +Node: Clones635386 +Node: Cut Program636610 +Node: Egrep Program646461 +Ref: Egrep Program-Footnote-1654234 +Node: Id Program654344 +Node: Split Program657960 +Ref: Split Program-Footnote-1661479 +Node: Tee Program661607 +Node: Uniq Program664410 +Node: Wc Program671839 +Ref: Wc Program-Footnote-1676105 +Ref: Wc Program-Footnote-2676305 +Node: Miscellaneous Programs676397 +Node: Dupword Program677585 +Node: Alarm Program679616 +Node: Translate Program684423 +Ref: Translate Program-Footnote-1688810 +Ref: Translate Program-Footnote-2689058 +Node: Labels Program689192 +Ref: Labels Program-Footnote-1692563 +Node: Word Sorting692647 +Node: History Sorting696531 +Node: Extract Program698370 +Ref: Extract Program-Footnote-1705873 +Node: Simple Sed706001 +Node: Igawk Program709063 +Ref: Igawk Program-Footnote-1724220 +Ref: Igawk Program-Footnote-2724421 +Node: Anagram Program724559 +Node: Signature Program727627 +Node: Advanced Features728727 +Node: Nondecimal Data730613 +Node: Array Sorting732196 +Node: Controlling Array Traversal732893 +Node: Array Sorting Functions741177 +Ref: Array Sorting Functions-Footnote-1745046 +Node: Two-way I/O745240 +Ref: Two-way I/O-Footnote-1750672 +Node: TCP/IP Networking750754 +Node: Profiling753598 +Node: Internationalization761101 +Node: I18N and L10N762526 +Node: Explaining gettext763212 +Ref: Explaining gettext-Footnote-1768280 +Ref: Explaining gettext-Footnote-2768464 +Node: Programmer i18n768629 +Node: Translator i18n772831 +Node: String Extraction773625 +Ref: String Extraction-Footnote-1774586 +Node: Printf Ordering774672 +Ref: Printf Ordering-Footnote-1777454 +Node: I18N Portability777518 +Ref: I18N Portability-Footnote-1779967 +Node: I18N Example780030 +Ref: I18N Example-Footnote-1782668 +Node: Gawk I18N782740 +Node: Debugger783361 +Node: Debugging784332 +Node: Debugging Concepts784765 +Node: Debugging Terms786621 +Node: Awk Debugging789218 +Node: Sample Debugging Session790110 +Node: Debugger Invocation790630 +Node: Finding The Bug791963 +Node: List of Debugger Commands798450 +Node: Breakpoint Control799784 +Node: Debugger Execution Control803448 +Node: Viewing And Changing Data806808 +Node: Execution Stack810164 +Node: Debugger Info811631 +Node: Miscellaneous Debugger Commands815613 +Node: Readline Support820789 +Node: Limitations821620 +Node: Arbitrary Precision Arithmetic823872 +Ref: Arbitrary Precision Arithmetic-Footnote-1825521 +Node: General Arithmetic825669 +Node: Floating Point Issues827389 +Node: String Conversion Precision828270 +Ref: String Conversion Precision-Footnote-1829975 +Node: Unexpected Results830084 +Node: POSIX Floating Point Problems832237 +Ref: POSIX Floating Point Problems-Footnote-1836062 +Node: Integer Programming836100 +Node: Floating-point Programming837839 +Ref: Floating-point Programming-Footnote-1844170 +Ref: Floating-point Programming-Footnote-2844440 +Node: Floating-point Representation844704 +Node: Floating-point Context845869 +Ref: table-ieee-formats846708 +Node: Rounding Mode848092 +Ref: table-rounding-modes848571 +Ref: Rounding Mode-Footnote-1851586 +Node: Gawk and MPFR851765 +Node: Arbitrary Precision Floats853020 +Ref: Arbitrary Precision Floats-Footnote-1855463 +Node: Setting Precision855779 +Ref: table-predefined-precision-strings856465 +Node: Setting Rounding Mode858610 +Ref: table-gawk-rounding-modes859014 +Node: Floating-point Constants860201 +Node: Changing Precision861630 +Ref: Changing Precision-Footnote-1863027 +Node: Exact Arithmetic863201 +Node: Arbitrary Precision Integers866339 +Ref: Arbitrary Precision Integers-Footnote-1869354 +Node: Dynamic Extensions869501 +Node: Extension Intro870959 +Node: Plugin License872224 +Node: Extension Mechanism Outline872909 +Ref: load-extension873326 +Ref: load-new-function874804 +Ref: call-new-function875799 +Node: Extension API Description877814 +Node: Extension API Functions Introduction879101 +Node: General Data Types884028 +Ref: General Data Types-Footnote-1889723 +Node: Requesting Values890022 +Ref: table-value-types-returned890759 +Node: Memory Allocation Functions891713 +Ref: Memory Allocation Functions-Footnote-1894459 +Node: Constructor Functions894555 +Node: Registration Functions896313 +Node: Extension Functions896998 +Node: Exit Callback Functions899300 +Node: Extension Version String900549 +Node: Input Parsers901199 +Node: Output Wrappers910956 +Node: Two-way processors915466 +Node: Printing Messages917674 +Ref: Printing Messages-Footnote-1918751 +Node: Updating `ERRNO'918903 +Node: Accessing Parameters919642 +Node: Symbol Table Access920872 +Node: Symbol table by name921386 +Node: Symbol table by cookie923135 +Ref: Symbol table by cookie-Footnote-1927267 +Node: Cached values927330 +Ref: Cached values-Footnote-1930820 +Node: Array Manipulation930911 +Ref: Array Manipulation-Footnote-1932009 +Node: Array Data Types932048 +Ref: Array Data Types-Footnote-1934751 +Node: Array Functions934843 +Node: Flattening Arrays938679 +Node: Creating Arrays945531 +Node: Extension API Variables950256 +Node: Extension Versioning950892 +Node: Extension API Informational Variables952793 +Node: Extension API Boilerplate953879 +Node: Finding Extensions957683 +Node: Extension Example958243 +Node: Internal File Description958973 +Node: Internal File Ops963064 +Ref: Internal File Ops-Footnote-1974573 +Node: Using Internal File Ops974713 +Ref: Using Internal File Ops-Footnote-1977066 +Node: Extension Samples977332 +Node: Extension Sample File Functions978856 +Node: Extension Sample Fnmatch987341 +Node: Extension Sample Fork989110 +Node: Extension Sample Inplace990323 +Node: Extension Sample Ord992101 +Node: Extension Sample Readdir992937 +Node: Extension Sample Revout994469 +Node: Extension Sample Rev2way995062 +Node: Extension Sample Read write array995752 +Node: Extension Sample Readfile997635 +Node: Extension Sample API Tests998453 +Node: Extension Sample Time998978 +Node: gawkextlib1000342 +Node: Language History1003123 +Node: V7/SVR3.11004716 +Node: SVR41007036 +Node: POSIX1008478 +Node: BTL1009864 +Node: POSIX/GNU1010598 +Node: Feature History1016197 +Node: Common Extensions1029173 +Node: Ranges and Locales1030485 +Ref: Ranges and Locales-Footnote-11035102 +Ref: Ranges and Locales-Footnote-21035129 +Ref: Ranges and Locales-Footnote-31035363 +Node: Contributors1035584 +Node: Installation1040965 +Node: Gawk Distribution1041859 +Node: Getting1042343 +Node: Extracting1043169 +Node: Distribution contents1044861 +Node: Unix Installation1050566 +Node: Quick Installation1051183 +Node: Additional Configuration Options1053629 +Node: Configuration Philosophy1055365 +Node: Non-Unix Installation1057719 +Node: PC Installation1058177 +Node: PC Binary Installation1059476 +Node: PC Compiling1061324 +Node: PC Testing1064268 +Node: PC Using1065444 +Node: Cygwin1069612 +Node: MSYS1070421 +Node: VMS Installation1070935 +Node: VMS Compilation1071699 +Ref: VMS Compilation-Footnote-11072951 +Node: VMS Dynamic Extensions1073009 +Node: VMS Installation Details1074382 +Node: VMS Running1076633 +Node: VMS GNV1079467 +Node: VMS Old Gawk1080190 +Node: Bugs1080660 +Node: Other Versions1084578 +Node: Notes1090662 +Node: Compatibility Mode1091462 +Node: Additions1092245 +Node: Accessing The Source1093172 +Node: Adding Code1094612 +Node: New Ports1100657 +Node: Derived Files1104792 +Ref: Derived Files-Footnote-11110113 +Ref: Derived Files-Footnote-21110147 +Ref: Derived Files-Footnote-31110747 +Node: Future Extensions1110845 +Node: Implementation Limitations1111428 +Node: Extension Design1112680 +Node: Old Extension Problems1113834 +Ref: Old Extension Problems-Footnote-11115342 +Node: Extension New Mechanism Goals1115399 +Ref: Extension New Mechanism Goals-Footnote-11118764 +Node: Extension Other Design Decisions1118950 +Node: Extension Future Growth1121056 +Node: Old Extension Mechanism1121892 +Node: Basic Concepts1123632 +Node: Basic High Level1124313 +Ref: figure-general-flow1124584 +Ref: figure-process-flow1125183 +Ref: Basic High Level-Footnote-11128412 +Node: Basic Data Typing1128597 +Node: Glossary1131952 +Node: Copying1157181 +Node: GNU Free Documentation License1194738 +Node: Index1219875  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index d6844144..30ba377b 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -2555,40 +2555,39 @@ gawk "@{ print \"\042\" $0 \"\042\" @}" @var{file} @c For gawk >= 4.0, update these data files. No-one has such slow modems! @cindex input files, examples -@cindex @code{BBS-list} file +@cindex @code{mail-list} file Many of the examples in this @value{DOCUMENT} take their input from two sample -data files. The first, @file{BBS-list}, represents a list of -computer bulletin board systems together with information about those systems. +data files. The first, @file{mail-list}, represents a list of peoples' names +together with their email addresses and information about those people. The second data file, called @file{inventory-shipped}, contains information about monthly shipments. In both files, each line is considered to be one @dfn{record}. -In the data file @file{BBS-list}, each record contains the name of a computer -bulletin board, its phone number, the board's baud rate(s), and a code for -the number of hours it is operational. An @samp{A} in the last column -means the board operates 24 hours a day. A @samp{B} in the last -column means the board only operates on evening and weekend hours. -A @samp{C} means the board operates only on weekends: +In the data file @file{mail-list}, each record contains the name of a person, +his/her phone number, his/her email-address, and a code for their relationship +with the author of the list. An @samp{A} in the last column +means that the person is an acquaintance. An @samp{F} in the last +column means that the person is a friend. +An @samp{R} means that the person is a relative: -@c 2e: Update the baud rates to reflect today's faster modems @example @c system if test ! -d eg ; then mkdir eg ; fi @c system if test ! -d eg/lib ; then mkdir eg/lib ; fi @c system if test ! -d eg/data ; then mkdir eg/data ; fi @c system if test ! -d eg/prog ; then mkdir eg/prog ; fi @c system if test ! -d eg/misc ; then mkdir eg/misc ; fi -@c file eg/data/BBS-list -aardvark 555-5553 1200/300 B -alpo-net 555-3412 2400/1200/300 A -barfly 555-7685 1200/300 A -bites 555-1675 2400/1200/300 A -camelot 555-0542 300 C -core 555-2912 1200/300 C -fooey 555-1234 2400/1200/300 B -foot 555-6699 1200/300 B -macfoo 555-6480 1200/300 A -sdace 555-3430 2400/1200/300 A -sabafoo 555-2127 1200/300 C +@c file eg/data/mail-list +Amelia 555-5553 amelia.zodiacusque@@gmail.com F +Anthony 555-3412 anthony.asserturo@@hotmail.com A +Becky 555-7685 becky.algebrarum@@gmail.com A +Bill 555-1675 bill.drowning@@hotmail.com A +Broderick 555-0542 broderick.aliquotiens@@yahoo.com R +Camilla 555-2912 camilla.infusarum@@skynet.be R +Fabius 555-1234 fabius.undevicesimus@@ucb.edu F +Julie 555-6699 julie.perscrutabor@@skeeve.com F +Martin 555-6480 martin.codicibus@@hotmail.com A +Samuel 555-3430 samuel.lanceolis@@shu.edu A +Jean-Paul 555-2127 jeanpaul.campanorum@@nyu.edu R @c endfile @end example @@ -2630,23 +2629,23 @@ in the directory @file{awklib/eg/data}. @section Some Simple Examples The following command runs a simple @command{awk} program that searches the -input file @file{BBS-list} for the character string @samp{foo} (a +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''): @example -awk '/foo/ @{ print $0 @}' BBS-list +awk '/li/ @{ print $0 @}' mail-list @end example @noindent -When lines containing @samp{foo} are found, they are printed because +When lines containing @samp{li} are found, they are printed because @w{@samp{print $0}} means print the current line. (Just @samp{print} by itself means the same thing, so we could have written that instead.) -You will notice that slashes (@samp{/}) surround the string @samp{foo} -in the @command{awk} program. The slashes indicate that @samp{foo} +You will notice that slashes (@samp{/}) surround the string @samp{li} +in the @command{awk} program. The slashes indicate that @samp{li} is the pattern to search for. This type of pattern is called a @dfn{regular expression}, which is covered in more detail later (@pxref{Regexp}). @@ -2658,11 +2657,11 @@ interpret any of it as special shell characters. Here is what this program prints: @example -$ @kbd{awk '/foo/ @{ print $0 @}' BBS-list} -@print{} fooey 555-1234 2400/1200/300 B -@print{} foot 555-6699 1200/300 B -@print{} macfoo 555-6480 1200/300 A -@print{} sabafoo 555-2127 1200/300 C +$ @kbd{awk '/li/ @{ print $0 @}' mail-list} +@print{} Amelia 555-5553 amelia.zodiacusque@@gmail.com F +@print{} Broderick 555-0542 broderick.aliquotiens@@yahoo.com R +@print{} Julie 555-6699 julie.perscrutabor@@skeeve.com F +@print{} Samuel 555-3430 samuel.lanceolis@@shu.edu A @end example @cindex actions, default @@ -2675,7 +2674,7 @@ action is to print all lines that match the pattern. @cindex actions, empty Thus, we could leave out the action (the @code{print} statement and the curly braces) in the previous example and the result would be the same: -@command{awk} prints all lines matching the pattern @samp{foo}. By comparison, +@command{awk} prints all lines matching the pattern @samp{li}. By comparison, omitting the @code{print} statement but retaining the curly braces makes an empty action that does nothing (i.e., no lines are printed). @@ -2820,29 +2819,23 @@ This program prints every line that contains the string strings, it is printed twice, once by each rule. This is what happens if we run this program on our two sample data files, -@file{BBS-list} and @file{inventory-shipped}: +@file{mail-list} and @file{inventory-shipped}: @example $ @kbd{awk '/12/ @{ print $0 @}} -> @kbd{/21/ @{ print $0 @}' BBS-list inventory-shipped} -@print{} aardvark 555-5553 1200/300 B -@print{} alpo-net 555-3412 2400/1200/300 A -@print{} barfly 555-7685 1200/300 A -@print{} bites 555-1675 2400/1200/300 A -@print{} core 555-2912 1200/300 C -@print{} fooey 555-1234 2400/1200/300 B -@print{} foot 555-6699 1200/300 B -@print{} macfoo 555-6480 1200/300 A -@print{} sdace 555-3430 2400/1200/300 A -@print{} sabafoo 555-2127 1200/300 C -@print{} sabafoo 555-2127 1200/300 C +> @kbd{/21/ @{ print $0 @}' mail-list inventory-shipped} +@print{} Anthony 555-3412 anthony.asserturo@@hotmail.com A +@print{} Camilla 555-2912 camilla.infusarum@@skynet.be R +@print{} Fabius 555-1234 fabius.undevicesimus@@ucb.edu F +@print{} Jean-Paul 555-2127 jeanpaul.campanorum@@nyu.edu R +@print{} Jean-Paul 555-2127 jeanpaul.campanorum@@nyu.edu R @print{} Jan 21 36 64 620 @print{} Apr 21 70 74 514 @end example @noindent -Note how the line beginning with @samp{sabafoo} -in @file{BBS-list} was printed twice, once for each rule. +Note how the line beginning with @samp{Jean-Paul} +in @file{mail-list} was printed twice, once for each rule. @node More Complex @section A More Complex Example @@ -2921,7 +2914,7 @@ separate rule, like this: @example awk '/12/ @{ print $0 @} - /21/ @{ print $0 @}' BBS-list inventory-shipped + /21/ @{ print $0 @}' mail-list inventory-shipped @end example @cindex @command{gawk}, newlines in @@ -4331,14 +4324,14 @@ slashes. Then the regular expression is tested against the entire text of each record. (Normally, it only needs to match some part of the text in order to succeed.) For example, the following prints the second field of each record that contains the string -@samp{foo} anywhere in it: +@samp{li} anywhere in it: @example -$ @kbd{awk '/foo/ @{ print $2 @}' BBS-list} -@print{} 555-1234 +$ @kbd{awk '/li/ @{ print $2 @}' mail-list} +@print{} 555-5553 +@print{} 555-0542 @print{} 555-6699 -@print{} 555-6480 -@print{} 555-2127 +@print{} 555-3430 @end example @cindex regular expressions, operators @@ -5647,66 +5640,78 @@ For example: @cindex @code{BEGIN} pattern @example -awk 'BEGIN @{ RS = "/" @} - @{ print $0 @}' BBS-list +awk 'BEGIN @{ RS = "u" @} + @{ print $0 @}' mail-list @end example @noindent -changes the value of @code{RS} to @code{"/"}, before reading any input. -This is a string whose first character is a slash; as a result, records -are separated by slashes. Then the input file is read, and the second +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 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 -with each slash changed to a newline. Here are the results of running -the program on @file{BBS-list}: - -@example -$ @kbd{awk 'BEGIN @{ RS = "/" @}} -> @kbd{@{ print $0 @}' BBS-list} -@print{} aardvark 555-5553 1200 -@print{} 300 B -@print{} alpo-net 555-3412 2400 -@print{} 1200 -@print{} 300 A -@print{} barfly 555-7685 1200 -@print{} 300 A -@print{} bites 555-1675 2400 -@print{} 1200 -@print{} 300 A -@print{} camelot 555-0542 300 C -@print{} core 555-2912 1200 -@print{} 300 C -@print{} fooey 555-1234 2400 -@print{} 1200 -@print{} 300 B -@print{} foot 555-6699 1200 -@print{} 300 B -@print{} macfoo 555-6480 1200 -@print{} 300 A -@print{} sdace 555-3430 2400 -@print{} 1200 -@print{} 300 A -@print{} sabafoo 555-2127 1200 -@print{} 300 C -@print{} +with each @samp{u} changed to a newline. Here are the results of running +the program on @file{mail-list}: + +@example +$ @kbd{awk 'BEGIN @{ RS = "u" @}} +> @kbd{@{ print $0 @}' mail-list} +@print{} Amelia 555-5553 amelia.zodiac +@print{} sq +@print{} e@@gmail.com F +@print{} Anthony 555-3412 anthony.assert +@print{} ro@@hotmail.com A +@print{} Becky 555-7685 becky.algebrar +@print{} m@@gmail.com A +@print{} Bill 555-1675 bill.drowning@@hotmail.com A +@print{} Broderick 555-0542 broderick.aliq +@print{} otiens@@yahoo.com R +@print{} Camilla 555-2912 camilla.inf +@print{} sar +@print{} m@@skynet.be R +@print{} Fabi +@print{} s 555-1234 fabi +@print{} s. +@print{} ndevicesim +@print{} s@@ +@print{} cb.ed +@print{} F +@print{} J +@print{} lie 555-6699 j +@print{} lie.perscr +@print{} tabor@@skeeve.com F +@print{} Martin 555-6480 martin.codicib +@print{} s@@hotmail.com A +@print{} Sam +@print{} el 555-3430 sam +@print{} el.lanceolis@@sh +@print{} .ed +@print{} A +@print{} Jean-Pa +@print{} l 555-2127 jeanpa +@print{} l.campanor +@print{} m@@ny +@print{} .ed +@print{} R +@print{} @end example @noindent -Note that the entry for the @samp{camelot} BBS is not split. +Note that the entry for the name @samp{Bill} is not split. In the original data file (@pxref{Sample Data Files}), the line looks like this: @example -camelot 555-0542 300 C +Bill 555-1675 bill.drowning@@hotmail.com A @end example @noindent -It has one baud rate only, so there are no slashes in the record, -unlike the others which have two or more baud rates. -In fact, this record is treated as part of the record -for the @samp{core} BBS; the newline separating them in the output +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}. +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 @command{awk} when it printed the record! @@ -5717,14 +5722,17 @@ using the variable-assignment feature (@pxref{Other Arguments}): @example -awk '@{ print $0 @}' RS="/" BBS-list +awk '@{ print $0 @}' RS="u" mail-list @end example @noindent -This sets @code{RS} to @samp{/} before processing @file{BBS-list}. +This sets @code{RS} to @samp{u} before processing @file{mail-list}. -Using an unusual character such as @samp{/} for the record separator -produces correct behavior in the vast majority of cases. +Using an alphabetic character such as @samp{u} for the record separator +is highly likely to produce strange results. +Using an unusual character such as @samp{/} is more likely to +produce correct behavior in the majority of cases, but there +are no guarantees. The moral is: Know Your Data. There is one unusual case, that occurs when @command{gawk} is being fully POSIX-compliant (@pxref{Options}). @@ -6011,31 +6019,29 @@ when you are not interested in specific fields. Here are some more examples: @example -$ @kbd{awk '$1 ~ /foo/ @{ print $0 @}' BBS-list} -@print{} fooey 555-1234 2400/1200/300 B -@print{} foot 555-6699 1200/300 B -@print{} macfoo 555-6480 1200/300 A -@print{} sabafoo 555-2127 1200/300 C +$ @kbd{awk '$1 ~ /li/ @{ print $0 @}' mail-list} +@print{} Amelia 555-5553 amelia.zodiacusque@@gmail.com F +@print{} Julie 555-6699 julie.perscrutabor@@skeeve.com F @end example @noindent -This example prints each record in the file @file{BBS-list} whose first -field contains the string @samp{foo}. The operator @samp{~} is called a +This example prints each record in the file @file{mail-list} whose first +field contains the string @samp{li}. The operator @samp{~} is called a @dfn{matching operator} (@pxref{Regexp Usage}); it tests whether a string (here, the field @code{$1}) matches a given regular expression. By contrast, the following example -looks for @samp{foo} in @emph{the entire record} and prints the first +looks for @samp{li} in @emph{the entire record} and prints the first field and the last field for each matching input record: @example -$ @kbd{awk '/foo/ @{ print $1, $NF @}' BBS-list} -@print{} fooey B -@print{} foot B -@print{} macfoo A -@print{} sabafoo C +$ @kbd{awk '/li/ @{ print $1, $NF @}' mail-list} +@print{} Amelia F +@print{} Broderick R +@print{} Julie F +@print{} Samuel A @end example @c ENDOFRANGE fiex @@ -6063,7 +6069,7 @@ the record has fewer than 20 fields, so this prints a blank line. Here is another example of using expressions as field numbers: @example -awk '@{ print $(2*2) @}' BBS-list +awk '@{ print $(2*2) @}' mail-list @end example @command{awk} evaluates the expression @samp{(2*2)} and uses @@ -6072,8 +6078,8 @@ 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 in the field-number expression. This example, then, prints the -hours of operation (the fourth field) for every line of the file -@file{BBS-list}. (All of the @command{awk} operators are listed, in +type of relationship (the fourth field) for every line of the file +@file{mail-list}. (All of the @command{awk} operators are listed, in order of decreasing precedence, in @ref{Precedence}.) @@ -6635,66 +6641,59 @@ figures that you really want your fields to be separated with TABs and not @samp{t}s. Use @samp{-v FS="t"} or @samp{-F"[t]"} on the command line if you really do want to separate your fields with @samp{t}s. -As an example, let's use an @command{awk} program file called @file{baud.awk} -that contains the pattern @code{/300/} and the action @samp{print $1}: +As an example, let's use an @command{awk} program file called @file{edu.awk} +that contains the pattern @code{/edu/} and the action @samp{print $1}: @example -/300/ @{ print $1 @} +/edu/ @{ print $1 @} @end example Let's also set @code{FS} to be the @samp{-} character and run the -program on the file @file{BBS-list}. The following command prints a -list of the names of the bulletin boards that operate at 300 baud and +program on the file @file{mail-list}. The following command prints a +list of the names of the people that work at or attend a university, and the first three digits of their phone numbers: @c tweaked to make the tex output look better in @smallbook @example -$ @kbd{awk -F- -f baud.awk BBS-list} -@print{} aardvark 555 -@print{} alpo -@print{} barfly 555 -@print{} bites 555 -@print{} camelot 555 -@print{} core 555 -@print{} fooey 555 -@print{} foot 555 -@print{} macfoo 555 -@print{} sdace 555 -@print{} sabafoo 555 +$ @kbd{awk -F- -f edu.awk mail-list} +@print{} Fabius 555 +@print{} Samuel 555 +@print{} Jean @end example @noindent -Note the second line of output. The second line +Note the third line of output. The third line in the original file looked like this: @example -alpo-net 555-3412 2400/1200/300 A +Jean-Paul 555-2127 jeanpaul.campanorum@@nyu.edu R @end example -The @samp{-} as part of the system's name was used as the field +The @samp{-} as part of the person's name was used as the field separator, instead of the @samp{-} in the phone number that was originally intended. This demonstrates why you have to be careful in 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 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 password file entry might look -like this: +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 @samp{x} in the second field.) A password file +entry might look like this: @cindex Robbins, Arnold @example -arnold:xyzzy:2076:10:Arnold Robbins:/home/arnold:/bin/bash +arnold:x:2076:10:Arnold Robbins:/home/arnold:/bin/bash @end example The following program searches the system password file and prints -the entries for users who have no password: +the entries for users whose full name is not indicated: @example -awk -F: '$2 == ""' /etc/passwd +awk -F: '$5 == ""' /etc/passwd @end example @node Full Line Fields @@ -8265,13 +8264,29 @@ program by using a new value of @code{OFS}. @example $ @kbd{awk 'BEGIN @{ OFS = ";"; ORS = "\n\n" @}} -> @kbd{@{ print $1, $2 @}' BBS-list} -@print{} aardvark;555-5553 -@print{} -@print{} alpo-net;555-3412 -@print{} -@print{} barfly;555-7685 -@dots{} +> @kbd{@{ print $1, $2 @}' mail-list} +@print{} Amelia;555-5553 +@print{} +@print{} Anthony;555-3412 +@print{} +@print{} Becky;555-7685 +@print{} +@print{} Bill;555-1675 +@print{} +@print{} Broderick;555-0542 +@print{} +@print{} Camilla;555-2912 +@print{} +@print{} Fabius;555-1234 +@print{} +@print{} Julie;555-6699 +@print{} +@print{} Martin;555-6480 +@print{} +@print{} Samuel;555-3430 +@print{} +@print{} Jean-Paul;555-2127 +@print{} @end example If the value of @code{ORS} does not contain a newline, the program's output @@ -8745,30 +8760,30 @@ The following simple example shows how to use @code{printf} to make an aligned table: @example -awk '@{ printf "%-10s %s\n", $1, $2 @}' BBS-list +awk '@{ printf "%-10s %s\n", $1, $2 @}' mail-list @end example @noindent This command -prints the names of the bulletin boards (@code{$1}) in the file -@file{BBS-list} as a string of 10 characters that are left-justified. It also +prints the names of the people (@code{$1}) in the file +@file{mail-list} as a string of 10 characters that are left-justified. It also prints the phone numbers (@code{$2}) next on the line. This produces an aligned two-column table of names and phone numbers, as shown here: @example -$ @kbd{awk '@{ printf "%-10s %s\n", $1, $2 @}' BBS-list} -@print{} aardvark 555-5553 -@print{} alpo-net 555-3412 -@print{} barfly 555-7685 -@print{} bites 555-1675 -@print{} camelot 555-0542 -@print{} core 555-2912 -@print{} fooey 555-1234 -@print{} foot 555-6699 -@print{} macfoo 555-6480 -@print{} sdace 555-3430 -@print{} sabafoo 555-2127 +$ @kbd{awk '@{ printf "%-10s %s\n", $1, $2 @}' mail-list} +@print{} Amelia 555-5553 +@print{} Anthony 555-3412 +@print{} Becky 555-7685 +@print{} Bill 555-1675 +@print{} Broderick 555-0542 +@print{} Camilla 555-2912 +@print{} Fabius 555-1234 +@print{} Julie 555-6699 +@print{} Martin 555-6480 +@print{} Samuel 555-3430 +@print{} Jean-Paul 555-2127 @end example In this case, the phone numbers had to be printed as strings because @@ -8789,7 +8804,7 @@ the @command{awk} program: @example awk 'BEGIN @{ print "Name Number" print "---- ------" @} - @{ printf "%-10s %s\n", $1, $2 @}' BBS-list + @{ printf "%-10s %s\n", $1, $2 @}' mail-list @end example The above example mixes @code{print} and @code{printf} statements in @@ -8799,7 +8814,7 @@ same results: @example awk 'BEGIN @{ printf "%-10s %s\n", "Name", "Number" printf "%-10s %s\n", "----", "------" @} - @{ printf "%-10s %s\n", $1, $2 @}' BBS-list + @{ printf "%-10s %s\n", $1, $2 @}' mail-list @end example @noindent @@ -8814,7 +8829,7 @@ emphasized by storing it in a variable, like this: awk 'BEGIN @{ format = "%-10s %s\n" printf format, "Name", "Number" printf format, "----", "------" @} - @{ printf format, $1, $2 @}' BBS-list + @{ printf format, $1, $2 @}' mail-list @end example @c !!! exercise @@ -8871,20 +8886,20 @@ before the first output is written to it. Subsequent writes to the same @var{output-file} do not erase @var{output-file}, but append to it. (This is different from how you use redirections in shell scripts.) If @var{output-file} does not exist, it is created. For example, here -is how an @command{awk} program can write a list of BBS names to one +is how an @command{awk} program can write a list of peoples' names to one file named @file{name-list}, and a list of phone numbers to another file named @file{phone-list}: @example $ @kbd{awk '@{ print $2 > "phone-list"} -> @kbd{print $1 > "name-list" @}' BBS-list} +> @kbd{print $1 > "name-list" @}' mail-list} $ @kbd{cat phone-list} @print{} 555-5553 @print{} 555-3412 @dots{} $ @kbd{cat name-list} -@print{} aardvark -@print{} alpo-net +@print{} Amelia +@print{} Anthony @dots{} @end example @@ -8913,7 +8928,7 @@ to another process created to execute @var{command}. The redirection argument @var{command} is actually an @command{awk} expression. Its value is converted to a string whose contents give the shell command to be run. For example, the following produces two -files, one unsorted list of BBS names, and one list sorted in reverse +files, one unsorted list of peoples' names, and one list sorted in reverse alphabetical order: @ignore @@ -8926,7 +8941,7 @@ alone for now and let's hope no-one notices. @example awk '@{ print $1 > "names.unsorted" command = "sort -r > names.sorted" - print $1 | command @}' BBS-list + print $1 | command @}' mail-list @end example The unsorted list is written with an ordinary redirection, while @@ -9997,7 +10012,7 @@ its position among the input file arguments---after the processing of the preceding input file argument. For example: @example -awk '@{ print $n @}' n=4 inventory-shipped n=2 BBS-list +awk '@{ print $n @}' n=4 inventory-shipped n=2 mail-list @end example @noindent @@ -10006,10 +10021,10 @@ the first file is read, the command line sets the variable @code{n} equal to four. This causes the fourth field to be printed in lines from @file{inventory-shipped}. After the first file has finished, but before the second file is started, @code{n} is set to two, so that the -second field is printed in lines from @file{BBS-list}: +second field is printed in lines from @file{mail-list}: @example -$ @kbd{awk '@{ print $n @}' n=4 inventory-shipped n=2 BBS-list} +$ @kbd{awk '@{ print $n @}' n=4 inventory-shipped n=2 mail-list} @print{} 15 @print{} 24 @dots{} @@ -10332,9 +10347,9 @@ specific operator to represent it. Instead, concatenation is performed by writing expressions next to one another, with no operator. For example: @example -$ @kbd{awk '@{ print "Field number one: " $1 @}' BBS-list} -@print{} Field number one: aardvark -@print{} Field number one: alpo-net +$ @kbd{awk '@{ print "Field number one: " $1 @}' mail-list} +@print{} Field number one: Amelia +@print{} Field number one: Anthony @dots{} @end example @@ -10342,9 +10357,9 @@ Without the space in the string constant after the @samp{:}, the line runs together. For example: @example -$ @kbd{awk '@{ print "Field number one:" $1 @}' BBS-list} -@print{} Field number one:aardvark -@print{} Field number one:alpo-net +$ @kbd{awk '@{ print "Field number one:" $1 @}' mail-list} +@print{} Field number one:Amelia +@print{} Field number one:Anthony @dots{} @end example @@ -11419,10 +11434,10 @@ The Boolean operators are: @item @var{boolean1} && @var{boolean2} True if both @var{boolean1} and @var{boolean2} are true. For example, the following statement prints the current input record if it contains -both @samp{2400} and @samp{foo}: +both @samp{edu} and @samp{li}: @example -if ($0 ~ /2400/ && $0 ~ /foo/) print +if ($0 ~ /edu/ && $0 ~ /li/) print @end example @cindex side effects, Boolean operators @@ -11435,11 +11450,11 @@ no substring @samp{foo} in the record. @item @var{boolean1} || @var{boolean2} True if at least one of @var{boolean1} or @var{boolean2} is true. For example, the following statement prints all records in the input -that contain @emph{either} @samp{2400} or -@samp{foo} or both: +that contain @emph{either} @samp{edu} or +@samp{li} or both: @example -if ($0 ~ /2400/ || $0 ~ /foo/) print +if ($0 ~ /edu/ || $0 ~ /li/) print @end example The subexpression @var{boolean2} is evaluated only if @var{boolean1} @@ -12034,7 +12049,7 @@ slashes (@code{/@var{regexp}/}), or any expression whose string value is used as a dynamic regular expression (@pxref{Computed Regexps}). The following example prints the second field of each input record -whose first field is precisely @samp{foo}: +whose first field is precisely @samp{li}: @cindex @code{/} (forward slash), patterns and @cindex forward slash (@code{/}), patterns and @@ -12043,68 +12058,65 @@ whose first field is precisely @samp{foo}: @cindex @code{!} (exclamation point), @code{!~} operator @cindex exclamation point (@code{!}), @code{!~} operator @example -$ @kbd{awk '$1 == "foo" @{ print $2 @}' BBS-list} +$ @kbd{awk '$1 == "li" @{ print $2 @}' mail-list} @end example @noindent -(There is no output, because there is no BBS site with the exact name @samp{foo}.) +(There is no output, because there is no person with the exact name @samp{li}.) Contrast this with the following regular expression match, which -accepts any record with a first field that contains @samp{foo}: +accepts any record with a first field that contains @samp{li}: @example -$ @kbd{awk '$1 ~ /foo/ @{ print $2 @}' BBS-list} -@print{} 555-1234 +$ @kbd{awk '$1 ~ /foo/ @{ print $2 @}' mail-list} +@print{} 555-5553 @print{} 555-6699 -@print{} 555-6480 -@print{} 555-2127 @end example @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{/foo/} has the value one if @samp{foo} -appears in the current input record. Thus, as a pattern, @code{/foo/} -matches any record containing @samp{foo}. +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}. @cindex Boolean expressions, as patterns Boolean expressions are also commonly used as patterns. Whether the pattern matches an input record depends on whether its subexpressions match. For example, the following command prints all the records in -@file{BBS-list} that contain both @samp{2400} and @samp{foo}: +@file{mail-list} that contain both @samp{edu} and @samp{li}: @example -$ @kbd{awk '/2400/ && /foo/' BBS-list} -@print{} fooey 555-1234 2400/1200/300 B +$ @kbd{awk '/edu/ && /li/' mail-list} +@print{} Samuel 555-3430 samuel.lanceolis@@shu.edu A @end example The following command prints all records in -@file{BBS-list} that contain @emph{either} @samp{2400} or @samp{foo} +@file{mail-list} that contain @emph{either} @samp{edu} or @samp{li} (or both, of course): @example -$ @kbd{awk '/2400/ || /foo/' BBS-list} -@print{} alpo-net 555-3412 2400/1200/300 A -@print{} bites 555-1675 2400/1200/300 A -@print{} fooey 555-1234 2400/1200/300 B -@print{} foot 555-6699 1200/300 B -@print{} macfoo 555-6480 1200/300 A -@print{} sdace 555-3430 2400/1200/300 A -@print{} sabafoo 555-2127 1200/300 C +$ @kbd{awk '/edu/ || /li/' mail-list} +@print{} Amelia 555-5553 amelia.zodiacusque@@gmail.com F +@print{} Broderick 555-0542 broderick.aliquotiens@@yahoo.com R +@print{} Fabius 555-1234 fabius.undevicesimus@@ucb.edu F +@print{} Julie 555-6699 julie.perscrutabor@@skeeve.com F +@print{} Samuel 555-3430 samuel.lanceolis@@shu.edu A +@print{} Jean-Paul 555-2127 jeanpaul.campanorum@@nyu.edu R @end example The following command prints all records in -@file{BBS-list} that do @emph{not} contain the string @samp{foo}: +@file{mail-list} that do @emph{not} contain the string @samp{li}: @example -$ @kbd{awk '! /foo/' BBS-list} -@print{} aardvark 555-5553 1200/300 B -@print{} alpo-net 555-3412 2400/1200/300 A -@print{} barfly 555-7685 1200/300 A -@print{} bites 555-1675 2400/1200/300 A -@print{} camelot 555-0542 300 C -@print{} core 555-2912 1200/300 C -@print{} sdace 555-3430 2400/1200/300 A +$ @kbd{awk '! /li/' mail-list} +@print{} Anthony 555-3412 anthony.asserturo@@hotmail.com A +@print{} Becky 555-7685 becky.algebrarum@@gmail.com A +@print{} Bill 555-1675 bill.drowning@@hotmail.com A +@print{} Camilla 555-2912 camilla.infusarum@@skynet.be R +@print{} Fabius 555-1234 fabius.undevicesimus@@ucb.edu F +@print{} Martin 555-6480 martin.codicibus@@hotmail.com A +@print{} Jean-Paul 555-2127 jeanpaul.campanorum@@nyu.edu R @end example @cindex @code{BEGIN} pattern, Boolean patterns and @@ -12243,22 +12255,22 @@ input is read. For example: @example $ @kbd{awk '} -> @kbd{BEGIN @{ print "Analysis of \"foo\"" @}} -> @kbd{/foo/ @{ ++n @}} -> @kbd{END @{ print "\"foo\" appears", n, "times." @}' BBS-list} -@print{} Analysis of "foo" -@print{} "foo" appears 4 times. +> @kbd{BEGIN @{ print "Analysis of \"li\"" @}} +> @kbd{/li/ @{ ++n @}} +> @kbd{END @{ print "\"li\" appears in", n, "records." @}' mail-list} +@print{} Analysis of "li" +@print{} "li" appears in 4 records. @end example @cindex @code{BEGIN} pattern, operators and @cindex @code{END} pattern, operators and -This program finds the number of records in the input file @file{BBS-list} -that contain the string @samp{foo}. The @code{BEGIN} rule prints a title +This program finds the number of records in the input file @file{mail-list} +that contain the string @samp{li}. The @code{BEGIN} rule prints a title for the report. There is no need to use the @code{BEGIN} rule to initialize the counter @code{n} to zero, since @command{awk} does this automatically (@pxref{Variables}). The second rule increments the variable @code{n} every time a -record containing the pattern @samp{foo} is read. The @code{END} rule +record containing the pattern @samp{li} is read. The @code{END} rule prints the value of @code{n} at the end of the run. The special patterns @code{BEGIN} and @code{END} cannot be used in ranges @@ -12422,7 +12434,7 @@ both @code{BEGINFILE} and @code{ENDFILE}. Only the @samp{getline In most other @command{awk} implementations, or if @command{gawk} is in compatibility mode (@pxref{Options}), they are not special. -@c FIXME: For 4.1 maybe deal with this? +@c FIXME: For 4.2 maybe deal with this? @ignore Date: Tue, 17 May 2011 02:06:10 PDT From: rankin@pactechdata.com (Pat Rankin) @@ -12453,7 +12465,7 @@ An empty (i.e., nonexistent) pattern is considered to match @emph{every} input record. For example, the program: @example -awk '@{ print $1 @}' BBS-list +awk '@{ print $1 @}' mail-list @end example @noindent @@ -13655,16 +13667,16 @@ In the following example: $ @kbd{awk 'BEGIN @{} > @kbd{for (i = 0; i < ARGC; i++)} > @kbd{print ARGV[i]} -> @kbd{@}' inventory-shipped BBS-list} +> @kbd{@}' inventory-shipped mail-list} @print{} awk @print{} inventory-shipped -@print{} BBS-list +@print{} mail-list @end example @noindent @code{ARGV[0]} contains @samp{awk}, @code{ARGV[1]} contains @samp{inventory-shipped}, and @code{ARGV[2]} contains -@samp{BBS-list}. The value of @code{ARGC} is three, one more than the +@samp{mail-list}. The value of @code{ARGC} is three, one more than the index of the last element in @code{ARGV}, because the elements are numbered from zero. @@ -14131,16 +14143,16 @@ and @code{ARGV}: $ @kbd{awk 'BEGIN @{} > @kbd{for (i = 0; i < ARGC; i++)} > @kbd{print ARGV[i]} -> @kbd{@}' inventory-shipped BBS-list} +> @kbd{@}' inventory-shipped mail-list} @print{} awk @print{} inventory-shipped -@print{} BBS-list +@print{} mail-list @end example @noindent In this example, @code{ARGV[0]} contains @samp{awk}, @code{ARGV[1]} contains @samp{inventory-shipped}, and @code{ARGV[2]} contains -@samp{BBS-list}. +@samp{mail-list}. Notice that the @command{awk} program is not entered in @code{ARGV}. The other command-line options, with their arguments, are also not entered. This includes variable assignments done with the @option{-v} @@ -34743,6 +34755,11 @@ The development of the extension API first released with Arnold Robbins and Andrew Schorr, with notable contributions from the rest of the development team. +@item +@cindex Colombo, Antonio +Antonio Giovanni Colombo rewrote a number of examples in the early +chapters that were severely dated, for which I am incredibly grateful. + @item @cindex Robbins, Arnold Arnold Robbins @@ -37484,9 +37501,6 @@ The GNU version of the standard shell @end ifinfo See also ``Bourne Shell.'' -@item BBS -See ``Bulletin Board System.'' - @item Bit Short for ``Binary Digit.'' All values in computer memory ultimately reduce to binary digits: values @@ -37561,11 +37575,6 @@ Changing some of them affects @command{awk}'s running environment. @item Braces See ``Curly Braces.'' -@item Bulletin Board System -A computer system allowing users to log in and read and/or leave messages -for other users of the system, much like leaving paper notes on a bulletin -board. - @item C The system programming language that most GNU software is written in. The @command{awk} programming language has C-like syntax, and this @value{DOCUMENT} @@ -39531,8 +39540,6 @@ Suggestions: % Next edition: % 1. Standardize the error messages from the functions and programs % in the two sample code chapters. -% 2. Nuke the BBS stuff and use something that won't be obsolete -% 3. Turn the advanced notes into sidebars by using @cartouche Better sidebars can almost sort of be done with: @@ -39564,4 +39571,3 @@ But to use it you have to say } which sorta sucks. - diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 1fe75843..9a5c0168 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -2483,40 +2483,39 @@ gawk "@{ print \"\042\" $0 \"\042\" @}" @var{file} @c For gawk >= 4.0, update these data files. No-one has such slow modems! @cindex input files, examples -@cindex @code{BBS-list} file +@cindex @code{mail-list} file Many of the examples in this @value{DOCUMENT} take their input from two sample -data files. The first, @file{BBS-list}, represents a list of -computer bulletin board systems together with information about those systems. +data files. The first, @file{mail-list}, represents a list of peoples' names +together with their email addresses and information about those people. The second data file, called @file{inventory-shipped}, contains information about monthly shipments. In both files, each line is considered to be one @dfn{record}. -In the data file @file{BBS-list}, each record contains the name of a computer -bulletin board, its phone number, the board's baud rate(s), and a code for -the number of hours it is operational. An @samp{A} in the last column -means the board operates 24 hours a day. A @samp{B} in the last -column means the board only operates on evening and weekend hours. -A @samp{C} means the board operates only on weekends: +In the data file @file{mail-list}, each record contains the name of a person, +his/her phone number, his/her email-address, and a code for their relationship +with the author of the list. An @samp{A} in the last column +means that the person is an acquaintance. An @samp{F} in the last +column means that the person is a friend. +An @samp{R} means that the person is a relative: -@c 2e: Update the baud rates to reflect today's faster modems @example @c system if test ! -d eg ; then mkdir eg ; fi @c system if test ! -d eg/lib ; then mkdir eg/lib ; fi @c system if test ! -d eg/data ; then mkdir eg/data ; fi @c system if test ! -d eg/prog ; then mkdir eg/prog ; fi @c system if test ! -d eg/misc ; then mkdir eg/misc ; fi -@c file eg/data/BBS-list -aardvark 555-5553 1200/300 B -alpo-net 555-3412 2400/1200/300 A -barfly 555-7685 1200/300 A -bites 555-1675 2400/1200/300 A -camelot 555-0542 300 C -core 555-2912 1200/300 C -fooey 555-1234 2400/1200/300 B -foot 555-6699 1200/300 B -macfoo 555-6480 1200/300 A -sdace 555-3430 2400/1200/300 A -sabafoo 555-2127 1200/300 C +@c file eg/data/mail-list +Amelia 555-5553 amelia.zodiacusque@@gmail.com F +Anthony 555-3412 anthony.asserturo@@hotmail.com A +Becky 555-7685 becky.algebrarum@@gmail.com A +Bill 555-1675 bill.drowning@@hotmail.com A +Broderick 555-0542 broderick.aliquotiens@@yahoo.com R +Camilla 555-2912 camilla.infusarum@@skynet.be R +Fabius 555-1234 fabius.undevicesimus@@ucb.edu F +Julie 555-6699 julie.perscrutabor@@skeeve.com F +Martin 555-6480 martin.codicibus@@hotmail.com A +Samuel 555-3430 samuel.lanceolis@@shu.edu A +Jean-Paul 555-2127 jeanpaul.campanorum@@nyu.edu R @c endfile @end example @@ -2558,23 +2557,23 @@ in the directory @file{awklib/eg/data}. @section Some Simple Examples The following command runs a simple @command{awk} program that searches the -input file @file{BBS-list} for the character string @samp{foo} (a +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''): @example -awk '/foo/ @{ print $0 @}' BBS-list +awk '/li/ @{ print $0 @}' mail-list @end example @noindent -When lines containing @samp{foo} are found, they are printed because +When lines containing @samp{li} are found, they are printed because @w{@samp{print $0}} means print the current line. (Just @samp{print} by itself means the same thing, so we could have written that instead.) -You will notice that slashes (@samp{/}) surround the string @samp{foo} -in the @command{awk} program. The slashes indicate that @samp{foo} +You will notice that slashes (@samp{/}) surround the string @samp{li} +in the @command{awk} program. The slashes indicate that @samp{li} is the pattern to search for. This type of pattern is called a @dfn{regular expression}, which is covered in more detail later (@pxref{Regexp}). @@ -2586,11 +2585,11 @@ interpret any of it as special shell characters. Here is what this program prints: @example -$ @kbd{awk '/foo/ @{ print $0 @}' BBS-list} -@print{} fooey 555-1234 2400/1200/300 B -@print{} foot 555-6699 1200/300 B -@print{} macfoo 555-6480 1200/300 A -@print{} sabafoo 555-2127 1200/300 C +$ @kbd{awk '/li/ @{ print $0 @}' mail-list} +@print{} Amelia 555-5553 amelia.zodiacusque@@gmail.com F +@print{} Broderick 555-0542 broderick.aliquotiens@@yahoo.com R +@print{} Julie 555-6699 julie.perscrutabor@@skeeve.com F +@print{} Samuel 555-3430 samuel.lanceolis@@shu.edu A @end example @cindex actions, default @@ -2603,7 +2602,7 @@ action is to print all lines that match the pattern. @cindex actions, empty Thus, we could leave out the action (the @code{print} statement and the curly braces) in the previous example and the result would be the same: -@command{awk} prints all lines matching the pattern @samp{foo}. By comparison, +@command{awk} prints all lines matching the pattern @samp{li}. By comparison, omitting the @code{print} statement but retaining the curly braces makes an empty action that does nothing (i.e., no lines are printed). @@ -2748,29 +2747,23 @@ This program prints every line that contains the string strings, it is printed twice, once by each rule. This is what happens if we run this program on our two sample data files, -@file{BBS-list} and @file{inventory-shipped}: +@file{mail-list} and @file{inventory-shipped}: @example $ @kbd{awk '/12/ @{ print $0 @}} -> @kbd{/21/ @{ print $0 @}' BBS-list inventory-shipped} -@print{} aardvark 555-5553 1200/300 B -@print{} alpo-net 555-3412 2400/1200/300 A -@print{} barfly 555-7685 1200/300 A -@print{} bites 555-1675 2400/1200/300 A -@print{} core 555-2912 1200/300 C -@print{} fooey 555-1234 2400/1200/300 B -@print{} foot 555-6699 1200/300 B -@print{} macfoo 555-6480 1200/300 A -@print{} sdace 555-3430 2400/1200/300 A -@print{} sabafoo 555-2127 1200/300 C -@print{} sabafoo 555-2127 1200/300 C +> @kbd{/21/ @{ print $0 @}' mail-list inventory-shipped} +@print{} Anthony 555-3412 anthony.asserturo@@hotmail.com A +@print{} Camilla 555-2912 camilla.infusarum@@skynet.be R +@print{} Fabius 555-1234 fabius.undevicesimus@@ucb.edu F +@print{} Jean-Paul 555-2127 jeanpaul.campanorum@@nyu.edu R +@print{} Jean-Paul 555-2127 jeanpaul.campanorum@@nyu.edu R @print{} Jan 21 36 64 620 @print{} Apr 21 70 74 514 @end example @noindent -Note how the line beginning with @samp{sabafoo} -in @file{BBS-list} was printed twice, once for each rule. +Note how the line beginning with @samp{Jean-Paul} +in @file{mail-list} was printed twice, once for each rule. @node More Complex @section A More Complex Example @@ -2849,7 +2842,7 @@ separate rule, like this: @example awk '/12/ @{ print $0 @} - /21/ @{ print $0 @}' BBS-list inventory-shipped + /21/ @{ print $0 @}' mail-list inventory-shipped @end example @cindex @command{gawk}, newlines in @@ -4259,14 +4252,14 @@ slashes. Then the regular expression is tested against the entire text of each record. (Normally, it only needs to match some part of the text in order to succeed.) For example, the following prints the second field of each record that contains the string -@samp{foo} anywhere in it: +@samp{li} anywhere in it: @example -$ @kbd{awk '/foo/ @{ print $2 @}' BBS-list} -@print{} 555-1234 +$ @kbd{awk '/li/ @{ print $2 @}' mail-list} +@print{} 555-5553 +@print{} 555-0542 @print{} 555-6699 -@print{} 555-6480 -@print{} 555-2127 +@print{} 555-3430 @end example @cindex regular expressions, operators @@ -5448,66 +5441,78 @@ For example: @cindex @code{BEGIN} pattern @example -awk 'BEGIN @{ RS = "/" @} - @{ print $0 @}' BBS-list +awk 'BEGIN @{ RS = "u" @} + @{ print $0 @}' mail-list @end example @noindent -changes the value of @code{RS} to @code{"/"}, before reading any input. -This is a string whose first character is a slash; as a result, records -are separated by slashes. Then the input file is read, and the second +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 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 -with each slash changed to a newline. Here are the results of running -the program on @file{BBS-list}: - -@example -$ @kbd{awk 'BEGIN @{ RS = "/" @}} -> @kbd{@{ print $0 @}' BBS-list} -@print{} aardvark 555-5553 1200 -@print{} 300 B -@print{} alpo-net 555-3412 2400 -@print{} 1200 -@print{} 300 A -@print{} barfly 555-7685 1200 -@print{} 300 A -@print{} bites 555-1675 2400 -@print{} 1200 -@print{} 300 A -@print{} camelot 555-0542 300 C -@print{} core 555-2912 1200 -@print{} 300 C -@print{} fooey 555-1234 2400 -@print{} 1200 -@print{} 300 B -@print{} foot 555-6699 1200 -@print{} 300 B -@print{} macfoo 555-6480 1200 -@print{} 300 A -@print{} sdace 555-3430 2400 -@print{} 1200 -@print{} 300 A -@print{} sabafoo 555-2127 1200 -@print{} 300 C -@print{} +with each @samp{u} changed to a newline. Here are the results of running +the program on @file{mail-list}: + +@example +$ @kbd{awk 'BEGIN @{ RS = "u" @}} +> @kbd{@{ print $0 @}' mail-list} +@print{} Amelia 555-5553 amelia.zodiac +@print{} sq +@print{} e@@gmail.com F +@print{} Anthony 555-3412 anthony.assert +@print{} ro@@hotmail.com A +@print{} Becky 555-7685 becky.algebrar +@print{} m@@gmail.com A +@print{} Bill 555-1675 bill.drowning@@hotmail.com A +@print{} Broderick 555-0542 broderick.aliq +@print{} otiens@@yahoo.com R +@print{} Camilla 555-2912 camilla.inf +@print{} sar +@print{} m@@skynet.be R +@print{} Fabi +@print{} s 555-1234 fabi +@print{} s. +@print{} ndevicesim +@print{} s@@ +@print{} cb.ed +@print{} F +@print{} J +@print{} lie 555-6699 j +@print{} lie.perscr +@print{} tabor@@skeeve.com F +@print{} Martin 555-6480 martin.codicib +@print{} s@@hotmail.com A +@print{} Sam +@print{} el 555-3430 sam +@print{} el.lanceolis@@sh +@print{} .ed +@print{} A +@print{} Jean-Pa +@print{} l 555-2127 jeanpa +@print{} l.campanor +@print{} m@@ny +@print{} .ed +@print{} R +@print{} @end example @noindent -Note that the entry for the @samp{camelot} BBS is not split. +Note that the entry for the name @samp{Bill} is not split. In the original data file (@pxref{Sample Data Files}), the line looks like this: @example -camelot 555-0542 300 C +Bill 555-1675 bill.drowning@@hotmail.com A @end example @noindent -It has one baud rate only, so there are no slashes in the record, -unlike the others which have two or more baud rates. -In fact, this record is treated as part of the record -for the @samp{core} BBS; the newline separating them in the output +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}. +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 @command{awk} when it printed the record! @@ -5518,14 +5523,17 @@ using the variable-assignment feature (@pxref{Other Arguments}): @example -awk '@{ print $0 @}' RS="/" BBS-list +awk '@{ print $0 @}' RS="u" mail-list @end example @noindent -This sets @code{RS} to @samp{/} before processing @file{BBS-list}. +This sets @code{RS} to @samp{u} before processing @file{mail-list}. -Using an unusual character such as @samp{/} for the record separator -produces correct behavior in the vast majority of cases. +Using an alphabetic character such as @samp{u} for the record separator +is highly likely to produce strange results. +Using an unusual character such as @samp{/} is more likely to +produce correct behavior in the majority of cases, but there +are no guarantees. The moral is: Know Your Data. There is one unusual case, that occurs when @command{gawk} is being fully POSIX-compliant (@pxref{Options}). @@ -5755,31 +5763,29 @@ when you are not interested in specific fields. Here are some more examples: @example -$ @kbd{awk '$1 ~ /foo/ @{ print $0 @}' BBS-list} -@print{} fooey 555-1234 2400/1200/300 B -@print{} foot 555-6699 1200/300 B -@print{} macfoo 555-6480 1200/300 A -@print{} sabafoo 555-2127 1200/300 C +$ @kbd{awk '$1 ~ /li/ @{ print $0 @}' mail-list} +@print{} Amelia 555-5553 amelia.zodiacusque@@gmail.com F +@print{} Julie 555-6699 julie.perscrutabor@@skeeve.com F @end example @noindent -This example prints each record in the file @file{BBS-list} whose first -field contains the string @samp{foo}. The operator @samp{~} is called a +This example prints each record in the file @file{mail-list} whose first +field contains the string @samp{li}. The operator @samp{~} is called a @dfn{matching operator} (@pxref{Regexp Usage}); it tests whether a string (here, the field @code{$1}) matches a given regular expression. By contrast, the following example -looks for @samp{foo} in @emph{the entire record} and prints the first +looks for @samp{li} in @emph{the entire record} and prints the first field and the last field for each matching input record: @example -$ @kbd{awk '/foo/ @{ print $1, $NF @}' BBS-list} -@print{} fooey B -@print{} foot B -@print{} macfoo A -@print{} sabafoo C +$ @kbd{awk '/li/ @{ print $1, $NF @}' mail-list} +@print{} Amelia F +@print{} Broderick R +@print{} Julie F +@print{} Samuel A @end example @c ENDOFRANGE fiex @@ -5807,7 +5813,7 @@ the record has fewer than 20 fields, so this prints a blank line. Here is another example of using expressions as field numbers: @example -awk '@{ print $(2*2) @}' BBS-list +awk '@{ print $(2*2) @}' mail-list @end example @command{awk} evaluates the expression @samp{(2*2)} and uses @@ -5816,8 +5822,8 @@ 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 in the field-number expression. This example, then, prints the -hours of operation (the fourth field) for every line of the file -@file{BBS-list}. (All of the @command{awk} operators are listed, in +type of relationship (the fourth field) for every line of the file +@file{mail-list}. (All of the @command{awk} operators are listed, in order of decreasing precedence, in @ref{Precedence}.) @@ -6348,66 +6354,59 @@ figures that you really want your fields to be separated with TABs and not @samp{t}s. Use @samp{-v FS="t"} or @samp{-F"[t]"} on the command line if you really do want to separate your fields with @samp{t}s. -As an example, let's use an @command{awk} program file called @file{baud.awk} -that contains the pattern @code{/300/} and the action @samp{print $1}: +As an example, let's use an @command{awk} program file called @file{edu.awk} +that contains the pattern @code{/edu/} and the action @samp{print $1}: @example -/300/ @{ print $1 @} +/edu/ @{ print $1 @} @end example Let's also set @code{FS} to be the @samp{-} character and run the -program on the file @file{BBS-list}. The following command prints a -list of the names of the bulletin boards that operate at 300 baud and +program on the file @file{mail-list}. The following command prints a +list of the names of the people that work at or attend a university, and the first three digits of their phone numbers: @c tweaked to make the tex output look better in @smallbook @example -$ @kbd{awk -F- -f baud.awk BBS-list} -@print{} aardvark 555 -@print{} alpo -@print{} barfly 555 -@print{} bites 555 -@print{} camelot 555 -@print{} core 555 -@print{} fooey 555 -@print{} foot 555 -@print{} macfoo 555 -@print{} sdace 555 -@print{} sabafoo 555 +$ @kbd{awk -F- -f edu.awk mail-list} +@print{} Fabius 555 +@print{} Samuel 555 +@print{} Jean @end example @noindent -Note the second line of output. The second line +Note the third line of output. The third line in the original file looked like this: @example -alpo-net 555-3412 2400/1200/300 A +Jean-Paul 555-2127 jeanpaul.campanorum@@nyu.edu R @end example -The @samp{-} as part of the system's name was used as the field +The @samp{-} as part of the person's name was used as the field separator, instead of the @samp{-} in the phone number that was originally intended. This demonstrates why you have to be careful in 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 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 password file entry might look -like this: +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 @samp{x} in the second field.) A password file +entry might look like this: @cindex Robbins, Arnold @example -arnold:xyzzy:2076:10:Arnold Robbins:/home/arnold:/bin/bash +arnold:x:2076:10:Arnold Robbins:/home/arnold:/bin/bash @end example The following program searches the system password file and prints -the entries for users who have no password: +the entries for users whose full name is not indicated: @example -awk -F: '$2 == ""' /etc/passwd +awk -F: '$5 == ""' /etc/passwd @end example @node Full Line Fields @@ -7883,13 +7882,29 @@ program by using a new value of @code{OFS}. @example $ @kbd{awk 'BEGIN @{ OFS = ";"; ORS = "\n\n" @}} -> @kbd{@{ print $1, $2 @}' BBS-list} -@print{} aardvark;555-5553 -@print{} -@print{} alpo-net;555-3412 -@print{} -@print{} barfly;555-7685 -@dots{} +> @kbd{@{ print $1, $2 @}' mail-list} +@print{} Amelia;555-5553 +@print{} +@print{} Anthony;555-3412 +@print{} +@print{} Becky;555-7685 +@print{} +@print{} Bill;555-1675 +@print{} +@print{} Broderick;555-0542 +@print{} +@print{} Camilla;555-2912 +@print{} +@print{} Fabius;555-1234 +@print{} +@print{} Julie;555-6699 +@print{} +@print{} Martin;555-6480 +@print{} +@print{} Samuel;555-3430 +@print{} +@print{} Jean-Paul;555-2127 +@print{} @end example If the value of @code{ORS} does not contain a newline, the program's output @@ -8363,30 +8378,30 @@ The following simple example shows how to use @code{printf} to make an aligned table: @example -awk '@{ printf "%-10s %s\n", $1, $2 @}' BBS-list +awk '@{ printf "%-10s %s\n", $1, $2 @}' mail-list @end example @noindent This command -prints the names of the bulletin boards (@code{$1}) in the file -@file{BBS-list} as a string of 10 characters that are left-justified. It also +prints the names of the people (@code{$1}) in the file +@file{mail-list} as a string of 10 characters that are left-justified. It also prints the phone numbers (@code{$2}) next on the line. This produces an aligned two-column table of names and phone numbers, as shown here: @example -$ @kbd{awk '@{ printf "%-10s %s\n", $1, $2 @}' BBS-list} -@print{} aardvark 555-5553 -@print{} alpo-net 555-3412 -@print{} barfly 555-7685 -@print{} bites 555-1675 -@print{} camelot 555-0542 -@print{} core 555-2912 -@print{} fooey 555-1234 -@print{} foot 555-6699 -@print{} macfoo 555-6480 -@print{} sdace 555-3430 -@print{} sabafoo 555-2127 +$ @kbd{awk '@{ printf "%-10s %s\n", $1, $2 @}' mail-list} +@print{} Amelia 555-5553 +@print{} Anthony 555-3412 +@print{} Becky 555-7685 +@print{} Bill 555-1675 +@print{} Broderick 555-0542 +@print{} Camilla 555-2912 +@print{} Fabius 555-1234 +@print{} Julie 555-6699 +@print{} Martin 555-6480 +@print{} Samuel 555-3430 +@print{} Jean-Paul 555-2127 @end example In this case, the phone numbers had to be printed as strings because @@ -8407,7 +8422,7 @@ the @command{awk} program: @example awk 'BEGIN @{ print "Name Number" print "---- ------" @} - @{ printf "%-10s %s\n", $1, $2 @}' BBS-list + @{ printf "%-10s %s\n", $1, $2 @}' mail-list @end example The above example mixes @code{print} and @code{printf} statements in @@ -8417,7 +8432,7 @@ same results: @example awk 'BEGIN @{ printf "%-10s %s\n", "Name", "Number" printf "%-10s %s\n", "----", "------" @} - @{ printf "%-10s %s\n", $1, $2 @}' BBS-list + @{ printf "%-10s %s\n", $1, $2 @}' mail-list @end example @noindent @@ -8432,7 +8447,7 @@ emphasized by storing it in a variable, like this: awk 'BEGIN @{ format = "%-10s %s\n" printf format, "Name", "Number" printf format, "----", "------" @} - @{ printf format, $1, $2 @}' BBS-list + @{ printf format, $1, $2 @}' mail-list @end example @c !!! exercise @@ -8489,20 +8504,20 @@ before the first output is written to it. Subsequent writes to the same @var{output-file} do not erase @var{output-file}, but append to it. (This is different from how you use redirections in shell scripts.) If @var{output-file} does not exist, it is created. For example, here -is how an @command{awk} program can write a list of BBS names to one +is how an @command{awk} program can write a list of peoples' names to one file named @file{name-list}, and a list of phone numbers to another file named @file{phone-list}: @example $ @kbd{awk '@{ print $2 > "phone-list"} -> @kbd{print $1 > "name-list" @}' BBS-list} +> @kbd{print $1 > "name-list" @}' mail-list} $ @kbd{cat phone-list} @print{} 555-5553 @print{} 555-3412 @dots{} $ @kbd{cat name-list} -@print{} aardvark -@print{} alpo-net +@print{} Amelia +@print{} Anthony @dots{} @end example @@ -8531,7 +8546,7 @@ to another process created to execute @var{command}. The redirection argument @var{command} is actually an @command{awk} expression. Its value is converted to a string whose contents give the shell command to be run. For example, the following produces two -files, one unsorted list of BBS names, and one list sorted in reverse +files, one unsorted list of peoples' names, and one list sorted in reverse alphabetical order: @ignore @@ -8544,7 +8559,7 @@ alone for now and let's hope no-one notices. @example awk '@{ print $1 > "names.unsorted" command = "sort -r > names.sorted" - print $1 | command @}' BBS-list + print $1 | command @}' mail-list @end example The unsorted list is written with an ordinary redirection, while @@ -9486,7 +9501,7 @@ its position among the input file arguments---after the processing of the preceding input file argument. For example: @example -awk '@{ print $n @}' n=4 inventory-shipped n=2 BBS-list +awk '@{ print $n @}' n=4 inventory-shipped n=2 mail-list @end example @noindent @@ -9495,10 +9510,10 @@ the first file is read, the command line sets the variable @code{n} equal to four. This causes the fourth field to be printed in lines from @file{inventory-shipped}. After the first file has finished, but before the second file is started, @code{n} is set to two, so that the -second field is printed in lines from @file{BBS-list}: +second field is printed in lines from @file{mail-list}: @example -$ @kbd{awk '@{ print $n @}' n=4 inventory-shipped n=2 BBS-list} +$ @kbd{awk '@{ print $n @}' n=4 inventory-shipped n=2 mail-list} @print{} 15 @print{} 24 @dots{} @@ -9821,9 +9836,9 @@ specific operator to represent it. Instead, concatenation is performed by writing expressions next to one another, with no operator. For example: @example -$ @kbd{awk '@{ print "Field number one: " $1 @}' BBS-list} -@print{} Field number one: aardvark -@print{} Field number one: alpo-net +$ @kbd{awk '@{ print "Field number one: " $1 @}' mail-list} +@print{} Field number one: Amelia +@print{} Field number one: Anthony @dots{} @end example @@ -9831,9 +9846,9 @@ Without the space in the string constant after the @samp{:}, the line runs together. For example: @example -$ @kbd{awk '@{ print "Field number one:" $1 @}' BBS-list} -@print{} Field number one:aardvark -@print{} Field number one:alpo-net +$ @kbd{awk '@{ print "Field number one:" $1 @}' mail-list} +@print{} Field number one:Amelia +@print{} Field number one:Anthony @dots{} @end example @@ -10796,10 +10811,10 @@ The Boolean operators are: @item @var{boolean1} && @var{boolean2} True if both @var{boolean1} and @var{boolean2} are true. For example, the following statement prints the current input record if it contains -both @samp{2400} and @samp{foo}: +both @samp{edu} and @samp{li}: @example -if ($0 ~ /2400/ && $0 ~ /foo/) print +if ($0 ~ /edu/ && $0 ~ /li/) print @end example @cindex side effects, Boolean operators @@ -10812,11 +10827,11 @@ no substring @samp{foo} in the record. @item @var{boolean1} || @var{boolean2} True if at least one of @var{boolean1} or @var{boolean2} is true. For example, the following statement prints all records in the input -that contain @emph{either} @samp{2400} or -@samp{foo} or both: +that contain @emph{either} @samp{edu} or +@samp{li} or both: @example -if ($0 ~ /2400/ || $0 ~ /foo/) print +if ($0 ~ /edu/ || $0 ~ /li/) print @end example The subexpression @var{boolean2} is evaluated only if @var{boolean1} @@ -11411,7 +11426,7 @@ slashes (@code{/@var{regexp}/}), or any expression whose string value is used as a dynamic regular expression (@pxref{Computed Regexps}). The following example prints the second field of each input record -whose first field is precisely @samp{foo}: +whose first field is precisely @samp{li}: @cindex @code{/} (forward slash), patterns and @cindex forward slash (@code{/}), patterns and @@ -11420,68 +11435,65 @@ whose first field is precisely @samp{foo}: @cindex @code{!} (exclamation point), @code{!~} operator @cindex exclamation point (@code{!}), @code{!~} operator @example -$ @kbd{awk '$1 == "foo" @{ print $2 @}' BBS-list} +$ @kbd{awk '$1 == "li" @{ print $2 @}' mail-list} @end example @noindent -(There is no output, because there is no BBS site with the exact name @samp{foo}.) +(There is no output, because there is no person with the exact name @samp{li}.) Contrast this with the following regular expression match, which -accepts any record with a first field that contains @samp{foo}: +accepts any record with a first field that contains @samp{li}: @example -$ @kbd{awk '$1 ~ /foo/ @{ print $2 @}' BBS-list} -@print{} 555-1234 +$ @kbd{awk '$1 ~ /foo/ @{ print $2 @}' mail-list} +@print{} 555-5553 @print{} 555-6699 -@print{} 555-6480 -@print{} 555-2127 @end example @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{/foo/} has the value one if @samp{foo} -appears in the current input record. Thus, as a pattern, @code{/foo/} -matches any record containing @samp{foo}. +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}. @cindex Boolean expressions, as patterns Boolean expressions are also commonly used as patterns. Whether the pattern matches an input record depends on whether its subexpressions match. For example, the following command prints all the records in -@file{BBS-list} that contain both @samp{2400} and @samp{foo}: +@file{mail-list} that contain both @samp{edu} and @samp{li}: @example -$ @kbd{awk '/2400/ && /foo/' BBS-list} -@print{} fooey 555-1234 2400/1200/300 B +$ @kbd{awk '/edu/ && /li/' mail-list} +@print{} Samuel 555-3430 samuel.lanceolis@@shu.edu A @end example The following command prints all records in -@file{BBS-list} that contain @emph{either} @samp{2400} or @samp{foo} +@file{mail-list} that contain @emph{either} @samp{edu} or @samp{li} (or both, of course): @example -$ @kbd{awk '/2400/ || /foo/' BBS-list} -@print{} alpo-net 555-3412 2400/1200/300 A -@print{} bites 555-1675 2400/1200/300 A -@print{} fooey 555-1234 2400/1200/300 B -@print{} foot 555-6699 1200/300 B -@print{} macfoo 555-6480 1200/300 A -@print{} sdace 555-3430 2400/1200/300 A -@print{} sabafoo 555-2127 1200/300 C +$ @kbd{awk '/edu/ || /li/' mail-list} +@print{} Amelia 555-5553 amelia.zodiacusque@@gmail.com F +@print{} Broderick 555-0542 broderick.aliquotiens@@yahoo.com R +@print{} Fabius 555-1234 fabius.undevicesimus@@ucb.edu F +@print{} Julie 555-6699 julie.perscrutabor@@skeeve.com F +@print{} Samuel 555-3430 samuel.lanceolis@@shu.edu A +@print{} Jean-Paul 555-2127 jeanpaul.campanorum@@nyu.edu R @end example The following command prints all records in -@file{BBS-list} that do @emph{not} contain the string @samp{foo}: +@file{mail-list} that do @emph{not} contain the string @samp{li}: @example -$ @kbd{awk '! /foo/' BBS-list} -@print{} aardvark 555-5553 1200/300 B -@print{} alpo-net 555-3412 2400/1200/300 A -@print{} barfly 555-7685 1200/300 A -@print{} bites 555-1675 2400/1200/300 A -@print{} camelot 555-0542 300 C -@print{} core 555-2912 1200/300 C -@print{} sdace 555-3430 2400/1200/300 A +$ @kbd{awk '! /li/' mail-list} +@print{} Anthony 555-3412 anthony.asserturo@@hotmail.com A +@print{} Becky 555-7685 becky.algebrarum@@gmail.com A +@print{} Bill 555-1675 bill.drowning@@hotmail.com A +@print{} Camilla 555-2912 camilla.infusarum@@skynet.be R +@print{} Fabius 555-1234 fabius.undevicesimus@@ucb.edu F +@print{} Martin 555-6480 martin.codicibus@@hotmail.com A +@print{} Jean-Paul 555-2127 jeanpaul.campanorum@@nyu.edu R @end example @cindex @code{BEGIN} pattern, Boolean patterns and @@ -11620,22 +11632,22 @@ input is read. For example: @example $ @kbd{awk '} -> @kbd{BEGIN @{ print "Analysis of \"foo\"" @}} -> @kbd{/foo/ @{ ++n @}} -> @kbd{END @{ print "\"foo\" appears", n, "times." @}' BBS-list} -@print{} Analysis of "foo" -@print{} "foo" appears 4 times. +> @kbd{BEGIN @{ print "Analysis of \"li\"" @}} +> @kbd{/li/ @{ ++n @}} +> @kbd{END @{ print "\"li\" appears in", n, "records." @}' mail-list} +@print{} Analysis of "li" +@print{} "li" appears in 4 records. @end example @cindex @code{BEGIN} pattern, operators and @cindex @code{END} pattern, operators and -This program finds the number of records in the input file @file{BBS-list} -that contain the string @samp{foo}. The @code{BEGIN} rule prints a title +This program finds the number of records in the input file @file{mail-list} +that contain the string @samp{li}. The @code{BEGIN} rule prints a title for the report. There is no need to use the @code{BEGIN} rule to initialize the counter @code{n} to zero, since @command{awk} does this automatically (@pxref{Variables}). The second rule increments the variable @code{n} every time a -record containing the pattern @samp{foo} is read. The @code{END} rule +record containing the pattern @samp{li} is read. The @code{END} rule prints the value of @code{n} at the end of the run. The special patterns @code{BEGIN} and @code{END} cannot be used in ranges @@ -11799,7 +11811,7 @@ both @code{BEGINFILE} and @code{ENDFILE}. Only the @samp{getline In most other @command{awk} implementations, or if @command{gawk} is in compatibility mode (@pxref{Options}), they are not special. -@c FIXME: For 4.1 maybe deal with this? +@c FIXME: For 4.2 maybe deal with this? @ignore Date: Tue, 17 May 2011 02:06:10 PDT From: rankin@pactechdata.com (Pat Rankin) @@ -11830,7 +11842,7 @@ An empty (i.e., nonexistent) pattern is considered to match @emph{every} input record. For example, the program: @example -awk '@{ print $1 @}' BBS-list +awk '@{ print $1 @}' mail-list @end example @noindent @@ -13032,16 +13044,16 @@ In the following example: $ @kbd{awk 'BEGIN @{} > @kbd{for (i = 0; i < ARGC; i++)} > @kbd{print ARGV[i]} -> @kbd{@}' inventory-shipped BBS-list} +> @kbd{@}' inventory-shipped mail-list} @print{} awk @print{} inventory-shipped -@print{} BBS-list +@print{} mail-list @end example @noindent @code{ARGV[0]} contains @samp{awk}, @code{ARGV[1]} contains @samp{inventory-shipped}, and @code{ARGV[2]} contains -@samp{BBS-list}. The value of @code{ARGC} is three, one more than the +@samp{mail-list}. The value of @code{ARGC} is three, one more than the index of the last element in @code{ARGV}, because the elements are numbered from zero. @@ -13462,16 +13474,16 @@ and @code{ARGV}: $ @kbd{awk 'BEGIN @{} > @kbd{for (i = 0; i < ARGC; i++)} > @kbd{print ARGV[i]} -> @kbd{@}' inventory-shipped BBS-list} +> @kbd{@}' inventory-shipped mail-list} @print{} awk @print{} inventory-shipped -@print{} BBS-list +@print{} mail-list @end example @noindent In this example, @code{ARGV[0]} contains @samp{awk}, @code{ARGV[1]} contains @samp{inventory-shipped}, and @code{ARGV[2]} contains -@samp{BBS-list}. +@samp{mail-list}. Notice that the @command{awk} program is not entered in @code{ARGV}. The other command-line options, with their arguments, are also not entered. This includes variable assignments done with the @option{-v} @@ -33884,6 +33896,11 @@ The development of the extension API first released with Arnold Robbins and Andrew Schorr, with notable contributions from the rest of the development team. +@item +@cindex Colombo, Antonio +Antonio Giovanni Colombo rewrote a number of examples in the early +chapters that were severely dated, for which I am incredibly grateful. + @item @cindex Robbins, Arnold Arnold Robbins @@ -36625,9 +36642,6 @@ The GNU version of the standard shell @end ifinfo See also ``Bourne Shell.'' -@item BBS -See ``Bulletin Board System.'' - @item Bit Short for ``Binary Digit.'' All values in computer memory ultimately reduce to binary digits: values @@ -36702,11 +36716,6 @@ Changing some of them affects @command{awk}'s running environment. @item Braces See ``Curly Braces.'' -@item Bulletin Board System -A computer system allowing users to log in and read and/or leave messages -for other users of the system, much like leaving paper notes on a bulletin -board. - @item C The system programming language that most GNU software is written in. The @command{awk} programming language has C-like syntax, and this @value{DOCUMENT} @@ -38672,8 +38681,6 @@ Suggestions: % Next edition: % 1. Standardize the error messages from the functions and programs % in the two sample code chapters. -% 2. Nuke the BBS stuff and use something that won't be obsolete -% 3. Turn the advanced notes into sidebars by using @cartouche Better sidebars can almost sort of be done with: @@ -38705,4 +38712,3 @@ But to use it you have to say } which sorta sucks. - -- cgit v1.2.3 From bfd8866ce49d4a816e5e11f0d3cbdda298ea5ec9 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 27 Mar 2014 21:56:53 +0200 Subject: Update awklib/eg/data/ files after doc changes. --- awklib/eg/data/BBS-list | 11 ----------- awklib/eg/data/mail-list | 11 +++++++++++ 2 files changed, 11 insertions(+), 11 deletions(-) delete mode 100644 awklib/eg/data/BBS-list create mode 100644 awklib/eg/data/mail-list diff --git a/awklib/eg/data/BBS-list b/awklib/eg/data/BBS-list deleted file mode 100644 index 1007417f..00000000 --- a/awklib/eg/data/BBS-list +++ /dev/null @@ -1,11 +0,0 @@ -aardvark 555-5553 1200/300 B -alpo-net 555-3412 2400/1200/300 A -barfly 555-7685 1200/300 A -bites 555-1675 2400/1200/300 A -camelot 555-0542 300 C -core 555-2912 1200/300 C -fooey 555-1234 2400/1200/300 B -foot 555-6699 1200/300 B -macfoo 555-6480 1200/300 A -sdace 555-3430 2400/1200/300 A -sabafoo 555-2127 1200/300 C diff --git a/awklib/eg/data/mail-list b/awklib/eg/data/mail-list new file mode 100644 index 00000000..37ff350a --- /dev/null +++ b/awklib/eg/data/mail-list @@ -0,0 +1,11 @@ +Amelia 555-5553 amelia.zodiacusque@gmail.com F +Anthony 555-3412 anthony.asserturo@hotmail.com A +Becky 555-7685 becky.algebrarum@gmail.com A +Bill 555-1675 bill.drowning@hotmail.com A +Broderick 555-0542 broderick.aliquotiens@yahoo.com R +Camilla 555-2912 camilla.infusarum@skynet.be R +Fabius 555-1234 fabius.undevicesimus@ucb.edu F +Julie 555-6699 julie.perscrutabor@skeeve.com F +Martin 555-6480 martin.codicibus@hotmail.com A +Samuel 555-3430 samuel.lanceolis@shu.edu A +Jean-Paul 555-2127 jeanpaul.campanorum@nyu.edu R -- cgit v1.2.3 From 00c8e9d7dbd0a868f066f3f83c277d0cd3901af5 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 27 Mar 2014 21:57:30 +0200 Subject: First round of indexing changes. --- doc/ChangeLog | 4 + doc/gawk.info | 1577 +++++++++++++++++++++++++++++++------------------------ doc/gawk.texi | 423 ++++++++++----- doc/gawktexi.in | 417 ++++++++++----- 4 files changed, 1487 insertions(+), 934 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index fed2cc82..1a59539c 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-03-27 Eli Zaretskii + + * gawktexi.in: First round of massive indexing improvements. + 2014-03-27 Antonio Giovanni Colombo * gawktexi.in: Redo all the examples using BBS-list to a different diff --git a/doc/gawk.info b/doc/gawk.info index 2e18da5b..29af8ab4 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -2475,7 +2475,7 @@ The following list describes options mandated by the POSIX standard: `--bignum' Force arbitrary precision arithmetic on numbers. This option has no effect if `gawk' is not compiled to use the GNU MPFR and MP - libraries (*note Arbitrary Precision Arithmetic::). + libraries (*note Gawk and MPFR::). `-n' `--non-decimal-data' @@ -2743,13 +2743,14 @@ on the command-line with the `-f' option. In most `awk' implementations, you must supply a precise path name for each program file, unless the file is in the current directory. But in `gawk', if the file name supplied to the `-f' or `-i' options does not contain a -`/', then `gawk' searches a list of directories (called the "search -path"), one by one, looking for a file with the specified name. +directory separator `/', then `gawk' searches a list of directories +(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 -colons. `gawk' gets its search path from the `AWKPATH' environment +colons(1). `gawk' gets its search path from the `AWKPATH' environment variable. If that variable does not exist, `gawk' uses a default path, -`.:/usr/local/share/awk'.(1) +`.:/usr/local/share/awk'.(2) The search path feature is particularly useful for building libraries of useful `awk' functions. The library files can be placed in a @@ -2790,7 +2791,9 @@ found, and `gawk' no longer needs to use `AWKPATH'. ---------- Footnotes ---------- - (1) Your version of `gawk' may use a different directory; it will + (1) Semicolons on MS-Windows and MS-DOS. + + (2) Your version of `gawk' may use a different directory; it will depend upon how `gawk' was built and installed. The actual directory is the value of `$(datadir)' generated when `gawk' was configured. You probably don't need to worry about this, though. @@ -9873,8 +9876,8 @@ with a pound sign (`#'). The following additional elements in the array are available to provide information about the MPFR and GMP libraries if your - version of `gawk' supports arbitrary precision numbers (*note - Arbitrary Precision Arithmetic::): + version of `gawk' supports arbitrary precision numbers (*note Gawk + and MPFR::): `PROCINFO["mpfr_version"]' The version of the GNU MPFR library. @@ -11272,9 +11275,10 @@ pound sign (`#'): SOURCE is duplicated into DEST. DEST is then sorted, leaving the indices of SOURCE unchanged. - When comparing strings, `IGNORECASE' affects the sorting. If the - SOURCE array contains subarrays as values (*note Arrays of - Arrays::), they will come last, after all scalar values. + When comparing strings, `IGNORECASE' affects the sorting (*note + Array Sorting Functions::). If the SOURCE array contains + subarrays as values (*note Arrays of Arrays::), they will come + last, after all scalar values. For example, if the contents of `a' are as follows: @@ -11313,7 +11317,7 @@ pound sign (`#'): `$0'. It returns the modified string as the result of the function and the original target string is _not_ changed. - `gensub()' is a general substitution function. It's purpose is to + `gensub()' is a general substitution function. Its purpose is to provide more features than the standard `sub()' and `gsub()' functions. @@ -16028,9 +16032,9 @@ groups in the `PROCINFO' array have the indices `"group1"' through However, we don't know in advance how many of these groups there are. This loop works by starting at one, concatenating the value with -`"group"', and then using `in' to see if that value is in the array. -Eventually, `i' is incremented past the last group in the array and the -loop exits. +`"group"', and then using `in' to see if that value is in the array +(*note Reference to Elements::). Eventually, `i' is incremented past +the last group in the array and the loop exits. The loop is also correct if there are _no_ supplementary groups; then the condition is false the first time it's tested, and the loop @@ -30024,9 +30028,9 @@ Index * ! (exclamation point), !~ operator <5>: Computed Regexps. (line 6) * ! (exclamation point), !~ operator <6>: Case-sensitivity. (line 26) * ! (exclamation point), !~ operator: Regexp Usage. (line 19) -* " (double quote) <1>: Quoting. (line 37) -* " (double quote): Read Terminal. (line 25) +* " (double quote) in shell commands: Read Terminal. (line 25) * " (double quote), in regexp constants: Computed Regexps. (line 28) +* " (double quote), in shell commands: Quoting. (line 37) * # (number sign), #! (executable scripts): Executable Scripts. (line 6) * # (number sign), commenting: Comments. (line 6) @@ -30042,13 +30046,13 @@ Index * & (ampersand), && operator: Boolean Ops. (line 57) * & (ampersand), gsub()/gensub()/sub() functions and: Gory Details. (line 6) -* ' (single quote) <1>: Quoting. (line 31) -* ' (single quote) <2>: Long. (line 33) * ' (single quote): One-shot. (line 15) +* ' (single quote) in gawk command lines: Long. (line 33) +* ' (single quote), in shell commands: Quoting. (line 31) * ' (single quote), vs. apostrophe: Comments. (line 27) * ' (single quote), with double quotes: Quoting. (line 53) -* () (parentheses) <1>: Profiling. (line 146) * () (parentheses): Regexp Operators. (line 79) +* () (parentheses), in a profile: Profiling. (line 146) * * (asterisk), * operator, as multiplication operator: Precedence. (line 55) * * (asterisk), * operator, as regexp operator: Regexp Operators. @@ -30086,8 +30090,9 @@ Index (line 15) * --disable-nls configuration option: Additional Configuration Options. (line 30) -* --dump-variables option <1>: Library Names. (line 45) * --dump-variables option: Options. (line 93) +* --dump-variables option, using for library functions: Library Names. + (line 45) * --exec option: Options. (line 125) * --field-separator option: Options. (line 21) * --file option: Options. (line 25) @@ -30130,12 +30135,12 @@ Index * -d option: Options. (line 93) * -E option: Options. (line 125) * -e option: Options. (line 117) -* -F option: Command Line Field Separator. - (line 6) * -f option: Options. (line 25) * -F option: Options. (line 21) * -f option: Long. (line 12) * -F option, -Ft sets FS to TAB: Options. (line 301) +* -F option, command line: Command Line Field Separator. + (line 6) * -f option, multiple uses: Options. (line 306) * -g option: Options. (line 147) * -h option: Options. (line 154) @@ -30155,7 +30160,7 @@ Index * -V option: Options. (line 293) * -v option: Options. (line 32) * -W option: Options. (line 46) -* . (period): Regexp Operators. (line 43) +* . (period), regexp operator: Regexp Operators. (line 43) * .gmo files: Explaining gettext. (line 41) * .gmo files, converting from .po: I18N Example. (line 62) * .gmo files, specifying directory of <1>: Programmer i18n. (line 47) @@ -30164,7 +30169,7 @@ Index * .po files: Explaining gettext. (line 36) * .po files, converting to .gmo: I18N Example. (line 62) * .pot files: Explaining gettext. (line 30) -* / (forward slash): Regexp. (line 10) +* / (forward slash) to enclose regular expressions: Regexp. (line 10) * / (forward slash), / operator: Precedence. (line 55) * / (forward slash), /= operator <1>: Precedence. (line 95) * / (forward slash), /= operator: Assignment Ops. (line 129) @@ -30208,11 +30213,9 @@ Index * ? (question mark), regexp operator <1>: GNU Regexp Operators. (line 59) * ? (question mark), regexp operator: Regexp Operators. (line 111) -* [] (square brackets): Regexp Operators. (line 55) -* \ (backslash) <1>: Regexp Operators. (line 18) -* \ (backslash) <2>: Quoting. (line 31) -* \ (backslash) <3>: Comments. (line 50) -* \ (backslash): Read Terminal. (line 25) +* [] (square brackets), regexp operator: Regexp Operators. (line 55) +* \ (backslash): Comments. (line 50) +* \ (backslash) in shell commands: Read Terminal. (line 25) * \ (backslash), \" escape sequence: Escape Sequences. (line 76) * \ (backslash), \' operator (gawk): GNU Regexp Operators. (line 56) @@ -30259,6 +30262,8 @@ Index * \ (backslash), in escape sequences, POSIX and: Escape Sequences. (line 112) * \ (backslash), in regexp constants: Computed Regexps. (line 28) +* \ (backslash), in shell commands: Quoting. (line 31) +* \ (backslash), regexp operator: Regexp Operators. (line 18) * ^ (caret), ^ operator: Precedence. (line 49) * ^ (caret), ^= operator <1>: Precedence. (line 95) * ^ (caret), ^= operator: Assignment Ops. (line 129) @@ -30276,6 +30281,8 @@ Index * _ord_init() user-defined function: Ordinal Functions. (line 16) * _pw_init() user-defined function: Passwd Functions. (line 105) * accessing fields: Fields. (line 6) +* accessing global variables from extensions: Symbol Table Access. + (line 6) * account information <1>: Group Functions. (line 6) * account information: Passwd Functions. (line 16) * actions: Action Overview. (line 6) @@ -30298,6 +30305,8 @@ Index * alarm clock example program: Alarm Program. (line 11) * alarm.awk program: Alarm Program. (line 31) * algorithms: Basic High Level. (line 68) +* allocating memory for extensions: Memory Allocation Functions. + (line 6) * Alpha (DEC): Manual History. (line 28) * amazing awk assembler (aaa): Glossary. (line 12) * amazingly workable formatter (awf): Glossary. (line 25) @@ -30313,13 +30322,20 @@ Index * and Boolean-logic operator: Boolean Ops. (line 6) * and() function (gawk): Bitwise Functions. (line 39) * ANSI: Glossary. (line 35) +* API informational variables: Extension API Informational Variables. + (line 6) +* API version: Extension Versioning. + (line 6) * arbitrary precision: Arbitrary Precision Arithmetic. (line 6) +* arbitrary precision integers: Arbitrary Precision Integers. + (line 6) * archeologists: Bugs. (line 6) -* ARGC/ARGV variables <1>: ARGC and ARGV. (line 6) +* arctangent: Numeric Functions. (line 11) * ARGC/ARGV variables: Auto-set. (line 11) * ARGC/ARGV variables, command-line arguments: Other Arguments. (line 12) +* ARGC/ARGV variables, how to use: ARGC and ARGV. (line 6) * ARGC/ARGV variables, portability and: Executable Scripts. (line 42) * ARGIND variable: Auto-set. (line 40) * ARGIND variable, command-line arguments: Other Arguments. (line 12) @@ -30329,36 +30345,50 @@ Index * arguments, command-line, invoking awk: Command Line. (line 6) * arguments, in function calls: Function Calls. (line 16) * arguments, processing: Getopt Function. (line 6) +* ARGV array, indexing into: Other Arguments. (line 12) * arithmetic operators: Arithmetic Ops. (line 6) +* array manipulation in extensions: Array Manipulation. (line 6) +* array members: Reference to Elements. + (line 6) +* array scanning order, controlling: Controlling Scanning. + (line 12) +* array, number of elements: String Functions. (line 194) * 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 91) * arrays, as parameters to functions: Pass By Value/Reference. (line 47) * arrays, associative: Array Intro. (line 49) * arrays, associative, library functions and: Library Names. (line 57) * arrays, deleting entire contents: Delete. (line 39) -* arrays, elements, assigning: Assigning Elements. (line 6) +* arrays, elements that don't exist: Reference to Elements. + (line 23) +* arrays, elements, assigning values: Assigning Elements. (line 6) * arrays, elements, deleting: Delete. (line 6) -* arrays, elements, order of: Scanning an Array. (line 48) -* arrays, elements, referencing: Reference to Elements. - (line 6) +* arrays, elements, order of access by in operator: Scanning an Array. + (line 48) * arrays, elements, retrieving number of: String Functions. (line 32) * arrays, for statement and: Scanning an Array. (line 20) -* arrays, IGNORECASE variable and: Array Intro. (line 91) * arrays, indexing: Array Intro. (line 49) * arrays, merging into strings: Join Function. (line 6) * arrays, multidimensional: Multidimensional. (line 10) * arrays, multidimensional, scanning: Multiscanning. (line 11) -* arrays, names of: Arrays. (line 18) +* arrays, names of, and names of functions/variables: Arrays. (line 18) +* arrays, numeric subscripts: Numeric Array Subscripts. + (line 6) +* arrays, referencing elements: Reference to Elements. + (line 6) * arrays, scanning: Scanning an Array. (line 6) * arrays, sorting: Array Sorting Functions. (line 6) -* arrays, sorting, IGNORECASE variable and: Array Sorting Functions. +* arrays, sorting, and IGNORECASE variable: Array Sorting Functions. (line 83) * arrays, sparse: Array Intro. (line 70) -* arrays, subscripts: Numeric Array Subscripts. - (line 6) * 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) @@ -30376,6 +30406,8 @@ Index * assert() function (C library): Assert Function. (line 6) * assert() user-defined function: Assert Function. (line 28) * assertions: Assert Function. (line 6) +* assign values to variables, in debugger: Viewing And Changing Data. + (line 59) * assignment operators: Assignment Ops. (line 6) * assignment operators, evaluation order: Assignment Ops. (line 111) * assignment operators, lvalues/rvalues: Assignment Ops. (line 32) @@ -30394,6 +30426,7 @@ Index * asterisk (*), *= operator <1>: Precedence. (line 95) * asterisk (*), *= operator: Assignment Ops. (line 129) * atan2() function: Numeric Functions. (line 11) +* automatic displays, in debugger: Debugger Info. (line 24) * awf (amazingly workable formatter) program: Glossary. (line 25) * awk debugging, enabling: Options. (line 108) * awk language, POSIX version: Assignment Ops. (line 136) @@ -30455,10 +30488,8 @@ Index * awksed.awk program: Simple Sed. (line 25) * awkvars.out file: Options. (line 93) * b debugger command (alias for break): Breakpoint Control. (line 11) -* backslash (\) <1>: Regexp Operators. (line 18) -* backslash (\) <2>: Quoting. (line 31) -* backslash (\) <3>: Comments. (line 50) -* backslash (\): Read Terminal. (line 25) +* backslash (\): Comments. (line 50) +* backslash (\) in shell commands: Read Terminal. (line 25) * backslash (\), \" escape sequence: Escape Sequences. (line 76) * backslash (\), \' operator (gawk): GNU Regexp Operators. (line 56) @@ -30505,13 +30536,15 @@ Index * backslash (\), in escape sequences, POSIX and: Escape Sequences. (line 112) * backslash (\), in regexp constants: Computed Regexps. (line 28) +* backslash (\), in shell commands: Quoting. (line 31) +* backslash (\), regexp operator: Regexp Operators. (line 18) * backtrace debugger command: Execution Stack. (line 13) * Beebe, Nelson H.F. <1>: Other Versions. (line 78) * Beebe, Nelson H.F.: Acknowledgments. (line 60) -* BEGIN pattern <1>: Profiling. (line 62) +* BEGIN pattern <1>: Using BEGIN/END. (line 6) * BEGIN pattern <2>: BEGIN/END. (line 6) -* BEGIN pattern <3>: Field Separators. (line 45) -* BEGIN pattern: Records. (line 29) +* BEGIN pattern: Field Separators. (line 45) +* 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 70) @@ -30545,7 +30578,12 @@ Index (line 33) * BINMODE variable <1>: PC Using. (line 33) * BINMODE variable: User-modified. (line 10) +* bit-manipulation functions: Bitwise Functions. (line 6) * bits2str() user-defined function: Bitwise Functions. (line 70) +* bitwise AND: Bitwise Functions. (line 39) +* bitwise complement: Bitwise Functions. (line 43) +* bitwise OR: Bitwise Functions. (line 49) +* bitwise XOR: Bitwise Functions. (line 55) * bitwise, complement: Bitwise Functions. (line 25) * bitwise, operations: Bitwise Functions. (line 6) * bitwise, shift: Bitwise Functions. (line 32) @@ -30574,6 +30612,14 @@ Index (line 6) * break debugger command: Breakpoint Control. (line 11) * break statement: Break Statement. (line 6) +* breakpoint: Debugging Terms. (line 33) +* breakpoint at location, how to delete: Breakpoint Control. (line 36) +* breakpoint commands: Debugger Execution Control. + (line 10) +* breakpoint condition: Breakpoint Control. (line 54) +* breakpoint, delete by number: Breakpoint Control. (line 64) +* breakpoint, how to disable or enable: Breakpoint Control. (line 69) +* breakpoint, setting: Breakpoint Control. (line 11) * Brennan, Michael <1>: Other Versions. (line 6) * Brennan, Michael <2>: Two-way I/O. (line 6) * Brennan, Michael <3>: Simple Sed. (line 25) @@ -30581,7 +30627,7 @@ Index * Brennan, Michael: Foreword. (line 83) * Brian Kernighan's awk <1>: I/O Functions. (line 40) * Brian Kernighan's awk <2>: Gory Details. (line 15) -* Brian Kernighan's awk <3>: String Functions. (line 489) +* Brian Kernighan's awk <3>: String Functions. (line 490) * Brian Kernighan's awk <4>: Delete. (line 48) * Brian Kernighan's awk <5>: Nextfile Statement. (line 47) * Brian Kernighan's awk <6>: Continue Statement. (line 43) @@ -30625,6 +30671,7 @@ Index (line 47) * call by value: Pass By Value/Reference. (line 18) +* call stack, display in debugger: Execution Stack. (line 13) * caret (^), ^ operator: Precedence. (line 49) * caret (^), ^= operator <1>: Precedence. (line 95) * caret (^), ^= operator: Assignment Ops. (line 129) @@ -30633,16 +30680,18 @@ Index (line 59) * caret (^), regexp operator: Regexp Operators. (line 22) * case keyword: Switch Statement. (line 6) +* case sensitivity, and regexps: User-modified. (line 82) +* case sensitivity, and string comparisons: User-modified. (line 82) * case sensitivity, array indices and: Array Intro. (line 91) -* case sensitivity, converting case: String Functions. (line 519) +* case sensitivity, converting case: String Functions. (line 520) * case sensitivity, example programs: Library Functions. (line 53) * case sensitivity, gawk: Case-sensitivity. (line 26) -* case sensitivity, regexps and <1>: User-modified. (line 82) * case sensitivity, regexps and: Case-sensitivity. (line 6) -* case sensitivity, string comparisons and: User-modified. (line 82) * CGI, awk scripts for: Options. (line 125) +* changing precision of a number: Changing Precision. (line 6) * character classes, See bracket expressions: Regexp Operators. (line 55) +* character lists in regular expression: Bracket Expressions. (line 6) * character lists, See bracket expressions: Regexp Operators. (line 55) * character sets (machine character encodings) <1>: Glossary. (line 133) * character sets (machine character encodings): Ordinal Functions. @@ -30664,12 +30713,12 @@ Index (line 6) * cliff_rand() user-defined function: Cliff Random Function. (line 12) +* close file or coprocess: I/O Functions. (line 10) * close() function <1>: I/O Functions. (line 10) -* close() function <2>: Close Files And Pipes. +* close() function: Close Files And Pipes. (line 18) -* close() function <3>: Getline/Pipe. (line 27) -* close() function: Getline/Variable/File. - (line 30) +* close() function, portability: Close Files And Pipes. + (line 81) * close() function, return value: Close Files And Pipes. (line 130) * close() function, two-way pipes and: Two-way I/O. (line 77) @@ -30683,6 +30732,7 @@ Index * columns, aligning: Print Examples. (line 70) * columns, cutting: Cut Program. (line 6) * comma (,), in range patterns: Ranges. (line 6) +* command completion, in debugger: Readline Support. (line 6) * command line, arguments <1>: ARGC and ARGV. (line 6) * command line, arguments <2>: Auto-set. (line 11) * command line, arguments: Other Arguments. (line 6) @@ -30692,16 +30742,16 @@ Index * command line, FS on, setting: Command Line Field Separator. (line 6) * command line, invoking awk from: Command Line. (line 6) -* command line, options <1>: Command Line Field Separator. - (line 6) -* command line, options <2>: Options. (line 6) -* command line, options: Long. (line 12) +* command line, option -f: Long. (line 12) +* command line, options: Options. (line 6) * command line, options, end of: Options. (line 54) * command line, variables, assigning on: Assignment Options. (line 6) * command-line options, processing: Getopt Function. (line 6) * command-line options, string extraction: String Extraction. (line 6) * commands debugger command: Debugger Execution Control. (line 10) +* commands to execute at breakpoint: Debugger Execution Control. + (line 10) * commenting: Comments. (line 6) * commenting, backslash continuation and: Statements/Lines. (line 76) * common extensions, ** operator: Arithmetic Ops. (line 30) @@ -30714,7 +30764,7 @@ Index * common extensions, delete to delete entire arrays: Delete. (line 39) * common extensions, func keyword: Definition Syntax. (line 83) * common extensions, length() applied to an array: String Functions. - (line 193) + (line 194) * common extensions, RS as a regexp: Records. (line 135) * common extensions, single character fields: Single Character Fields. (line 6) @@ -30753,25 +30803,33 @@ Index (line 35) * configuration options, gawk: Additional Configuration Options. (line 6) +* constant regexps: Regexp Usage. (line 57) * constants, floating-point: Floating-point Constants. (line 6) * constants, nondecimal: Nondecimal Data. (line 6) +* constants, numeric: Scalar Constants. (line 6) * constants, types of: Constants. (line 6) * context, floating-point: Floating-point Context. (line 6) +* continue program, in debugger: Debugger Execution Control. + (line 33) * continue statement: Continue Statement. (line 6) * control statements: Statements. (line 6) -* converting, case: String Functions. (line 519) -* converting, dates to timestamps: Time Functions. (line 75) -* converting, during subscripting: Numeric Array Subscripts. +* controlling array scanning order: Controlling Scanning. + (line 12) +* convert string to lower case: String Functions. (line 521) +* convert string to number: String Functions. (line 385) +* convert string to upper case: String Functions. (line 527) +* converting integer array subscripts: Numeric Array Subscripts. (line 31) +* converting, dates to timestamps: Time Functions. (line 75) * converting, numbers to strings <1>: Bitwise Functions. (line 109) * converting, numbers to strings: Conversion. (line 6) * converting, strings to numbers <1>: Bitwise Functions. (line 109) * converting, strings to numbers: Conversion. (line 6) * CONVFMT variable <1>: User-modified. (line 28) * CONVFMT variable: Conversion. (line 29) -* CONVFMT variable, array subscripts and: Numeric Array Subscripts. +* CONVFMT variable, and array subscripts: Numeric Array Subscripts. (line 6) * cookie: Glossary. (line 149) * coprocesses <1>: Two-way I/O. (line 44) @@ -30780,14 +30838,19 @@ Index (line 6) * coprocesses, getline from: Getline/Coprocess. (line 6) * cos() function: Numeric Functions. (line 15) +* cosine: Numeric Functions. (line 15) * counting: Wc Program. (line 6) * csh utility: Statements/Lines. (line 44) * csh utility, POSIXLY_CORRECT environment variable: Options. (line 348) * csh utility, |& operator, comparison with: Two-way I/O. (line 44) * ctime() user-defined function: Function Example. (line 73) * currency symbols, localization: Explaining gettext. (line 103) +* current system time: Time Functions. (line 65) * custom.h file: Configuration Philosophy. (line 30) +* customized input parser: Input Parsers. (line 6) +* customized output wrapper: Output Wrappers. (line 6) +* customized two-way processor: Two-way processors. (line 6) * cut utility: Cut Program. (line 6) * cut.awk program: Cut Program. (line 45) * d debugger command (alias for delete): Breakpoint Control. (line 64) @@ -30821,7 +30884,7 @@ Index (line 20) * dark corner, input files: Records. (line 118) * dark corner, invoking awk: Command Line. (line 16) -* dark corner, length() function: String Functions. (line 179) +* dark corner, length() function: String Functions. (line 180) * dark corner, locale's decimal point character: Conversion. (line 77) * dark corner, multiline records: Multiple Line. (line 35) * dark corner, NF variable, decrementing: Changing Fields. (line 107) @@ -30832,7 +30895,7 @@ Index (line 147) * dark corner, regexp constants, as arguments to user-defined functions: Using Constant Regexps. (line 43) -* dark corner, split() function: String Functions. (line 358) +* dark corner, split() function: String Functions. (line 359) * dark corner, strings, storing: Records. (line 210) * dark corner, value of ARGV[0]: Auto-set. (line 35) * data, fixed-width: Constant Size. (line 10) @@ -30951,6 +31014,12 @@ Index (line 67) * debugger commands, watch: Viewing And Changing Data. (line 67) +* debugger history file: Debugger Info. (line 80) +* debugger history size: Debugger Info. (line 65) +* debugger options: Debugger Info. (line 57) +* debugger prompt: Debugger Info. (line 77) +* debugger, how to start: Debugger Invocation. (line 6) +* debugger, read commands from a file: Debugger Info. (line 96) * debugging awk programs: Debugger. (line 6) * debugging gawk, bug reports: Bugs. (line 9) * decimal point character, locale specific: Options. (line 263) @@ -30959,12 +31028,18 @@ Index * Deifik, Scott <1>: Bugs. (line 70) * Deifik, Scott <2>: Contributors. (line 53) * Deifik, Scott: Acknowledgments. (line 60) +* delete ARRAY: Delete. (line 39) +* delete breakpoint at location: Breakpoint Control. (line 36) +* delete breakpoint by number: Breakpoint Control. (line 64) * delete debugger command: Breakpoint Control. (line 64) * delete statement: Delete. (line 6) +* delete watchpoint: Viewing And Changing Data. + (line 84) * deleting elements in arrays: Delete. (line 6) * deleting entire arrays: Delete. (line 39) * Demaille, Akim: Acknowledgments. (line 60) -* differences between gawk and awk: String Functions. (line 193) +* describe call stack frame, in debugger: Debugger Info. (line 27) +* differences between gawk and awk: String Functions. (line 194) * differences in awk and gawk, ARGC/ARGV variables: ARGC and ARGV. (line 88) * differences in awk and gawk, ARGIND variable: Auto-set. (line 40) @@ -31011,7 +31086,7 @@ Index (line 34) * differences in awk and gawk, LINT variable: User-modified. (line 98) * differences in awk and gawk, match() function: String Functions. - (line 256) + (line 257) * differences in awk and gawk, print/printf statements: Format Modifiers. (line 13) * differences in awk and gawk, PROCINFO array: Auto-set. (line 133) @@ -31025,7 +31100,7 @@ Index * differences in awk and gawk, single-character fields: Single Character Fields. (line 6) * differences in awk and gawk, split() function: String Functions. - (line 346) + (line 347) * differences in awk and gawk, strings: Scalar Constants. (line 20) * differences in awk and gawk, strings, storing: Records. (line 206) * differences in awk and gawk, SYMTAB variable: Auto-set. (line 274) @@ -31035,15 +31110,18 @@ Index (line 66) * directories, command line: Command line directories. (line 6) -* directories, searching <1>: Igawk Program. (line 368) -* directories, searching <2>: AWKLIBPATH Variable. (line 6) -* directories, searching: AWKPATH Variable. (line 6) +* directories, searching: Igawk Program. (line 368) +* directories, searching for shared libraries: AWKLIBPATH Variable. + (line 6) +* directories, searching for source files: AWKPATH Variable. (line 6) +* disable breakpoint: Breakpoint Control. (line 69) * disable debugger command: Breakpoint Control. (line 69) * display debugger command: Viewing And Changing Data. (line 8) +* display debugger options: Debugger Info. (line 57) * division: Arithmetic Ops. (line 44) -* do-while statement <1>: Do Statement. (line 6) -* do-while statement: Regexp Usage. (line 19) +* do-while statement: Do Statement. (line 6) +* do-while statement, use of regexps in: Regexp Usage. (line 19) * documentation, of awk programs: Library Names. (line 6) * documentation, online: Manual History. (line 11) * documents, searching: Dupword Program. (line 6) @@ -31053,35 +31131,46 @@ Index (line 30) * dollar sign ($), regexp operator: Regexp Operators. (line 35) * double precision floating-point: General Arithmetic. (line 21) -* double quote (") <1>: Quoting. (line 37) -* double quote ("): Read Terminal. (line 25) +* double quote (") in shell commands: Read Terminal. (line 25) * double quote ("), in regexp constants: Computed Regexps. (line 28) +* double quote ("), in shell commands: Quoting. (line 37) * down debugger command: Execution Stack. (line 21) * Drepper, Ulrich: Acknowledgments. (line 52) +* dump all variables of a program: Options. (line 93) * dump debugger command: Miscellaneous Debugger Commands. (line 9) * dupword.awk program: Dupword Program. (line 31) +* dynamic profiling: Profiling. (line 179) +* 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 138) +* effective user id of gawk user: Auto-set. (line 142) * egrep utility <1>: Egrep Program. (line 6) * egrep utility: Bracket Expressions. (line 24) * egrep.awk program: Egrep Program. (line 54) -* elements in arrays: Reference to Elements. - (line 6) -* elements in arrays, assigning: Assigning Elements. (line 6) +* elements in arrays, assigning values: Assigning Elements. (line 6) * elements in arrays, deleting: Delete. (line 6) -* elements in arrays, order of: Scanning an Array. (line 48) +* elements in arrays, order of access by in operator: Scanning an Array. + (line 48) * elements in arrays, scanning: Scanning an Array. (line 6) +* elements of arrays: Reference to Elements. + (line 6) * email address for bug reports, bug-gawk@gnu.org: Bugs. (line 30) * EMISTERED: TCP/IP Networking. (line 6) +* empty array elements: Reference to Elements. + (line 18) * empty pattern: Empty. (line 6) +* empty strings: Records. (line 122) * empty strings, See null strings: Regexp Field Splitting. (line 43) +* enable breakpoint: Breakpoint Control. (line 73) * enable debugger command: Breakpoint Control. (line 73) * end debugger command: Debugger Execution Control. (line 10) -* END pattern <1>: Profiling. (line 62) +* END pattern <1>: Using BEGIN/END. (line 6) * END pattern: BEGIN/END. (line 6) +* END pattern, and profiling: Profiling. (line 62) * END pattern, assert() user-defined function and: Assert Function. (line 75) * END pattern, backslash continuation and: Egrep Program. (line 220) @@ -31101,7 +31190,9 @@ Index * endpwent() function (C library): Passwd Functions. (line 210) * endpwent() user-defined function: Passwd Functions. (line 213) * ENVIRON array: Auto-set. (line 60) -* environment variables: Auto-set. (line 60) +* environment variables used by gawk: Environment Variables. + (line 6) +* environment variables, in ENVIRON array: Auto-set. (line 60) * epoch, definition of: Glossary. (line 235) * equals sign (=), = operator: Assignment Ops. (line 6) * equals sign (=), == operator <1>: Precedence. (line 65) @@ -31109,19 +31200,21 @@ Index (line 11) * EREs (Extended Regular Expressions): Bracket Expressions. (line 24) * ERRNO variable <1>: TCP/IP Networking. (line 54) -* ERRNO variable <2>: Auto-set. (line 73) -* ERRNO variable <3>: BEGINFILE/ENDFILE. (line 26) -* ERRNO variable <4>: Close Files And Pipes. +* ERRNO variable: Auto-set. (line 73) +* ERRNO variable, with BEGINFILE pattern: BEGINFILE/ENDFILE. (line 26) +* ERRNO variable, with close() function: Close Files And Pipes. (line 138) -* ERRNO variable: Getline. (line 19) +* ERRNO variable, with getline command: Getline. (line 19) * error handling: Special FD. (line 16) * error handling, ERRNO variable and: Auto-set. (line 73) * error output: Special FD. (line 6) * escape processing, gsub()/gensub()/sub() functions: Gory Details. (line 6) -* escape sequences: Escape Sequences. (line 6) +* escape sequences, in strings: Escape Sequences. (line 6) * eval debugger command: Viewing And Changing Data. (line 23) +* evaluate expressions, in debugger: Viewing And Changing Data. + (line 23) * evaluation order: Increment Ops. (line 60) * evaluation order, concatenation: Concatenation. (line 41) * evaluation order, functions: Calling Built-in. (line 30) @@ -31144,9 +31237,12 @@ Index * exit statement: Exit Statement. (line 6) * exit status, of gawk: Exit Status. (line 6) * exit status, of VMS: VMS Running. (line 29) +* exit the debugger: Miscellaneous Debugger Commands. + (line 99) * exp() function: Numeric Functions. (line 18) * expand utility: Very Simple. (line 69) * Expat XML parser library: gawkextlib. (line 35) +* exponent: Numeric Functions. (line 18) * expressions: Expressions. (line 6) * expressions, as patterns: Expression Patterns. (line 6) * expressions, assignment: Assignment Ops. (line 6) @@ -31158,6 +31254,20 @@ Index (line 9) * expressions, selecting: Conditional Exp. (line 6) * Extended Regular Expressions (EREs): Bracket Expressions. (line 24) +* extension API: Extension API Description. + (line 6) +* extension API informational variables: Extension API Informational Variables. + (line 6) +* extension API version: Extension Versioning. + (line 6) +* extension API, version number: Auto-set. (line 229) +* extension example: Extension Example. (line 6) +* extension registration: Registration Functions. + (line 6) +* extension search path: Finding Extensions. (line 6) +* extensions distributed with gawk: Extension Samples. (line 6) +* extensions, allocating memory: Memory Allocation Functions. + (line 6) * extensions, Brian Kernighan's awk <1>: Common Extensions. (line 6) * extensions, Brian Kernighan's awk: BTL. (line 6) * extensions, common, ** operator: Arithmetic Ops. (line 30) @@ -31171,12 +31281,13 @@ Index * extensions, common, fflush() function: I/O Functions. (line 40) * extensions, common, func keyword: Definition Syntax. (line 83) * extensions, common, length() applied to an array: String Functions. - (line 193) + (line 194) * extensions, common, RS as a regexp: Records. (line 135) * extensions, common, single character fields: Single Character Fields. (line 6) * extensions, in gawk, not in POSIX awk: POSIX/GNU. (line 6) * extensions, mawk: Common Extensions. (line 6) +* extensions, where to find: gawkextlib. (line 6) * extract.awk program: Extract Program. (line 79) * extraction, of marked strings (internationalization): String Extraction. (line 6) @@ -31194,16 +31305,16 @@ Index * field numbers: Nonconstant Fields. (line 6) * field operator $: Fields. (line 19) * field operators, dollar sign as: Fields. (line 19) +* field separator, in multiline records: Multiple Line. (line 41) +* field separator, on command line: Command Line Field Separator. + (line 6) +* field separator, POSIX and: Field Splitting Summary. + (line 40) * field separators <1>: User-modified. (line 56) * field separators: Field Separators. (line 15) * field separators, choice of: Field Separators. (line 51) * field separators, FIELDWIDTHS variable and: User-modified. (line 35) * field separators, FPAT variable and: User-modified. (line 45) -* field separators, in multiline records: Multiple Line. (line 41) -* field separators, on command line: Command Line Field Separator. - (line 6) -* field separators, POSIX and <1>: Field Splitting Summary. - (line 40) * field separators, POSIX and: Fields. (line 6) * field separators, regular expressions as <1>: Regexp Field Splitting. (line 6) @@ -31245,7 +31356,6 @@ Index * files, /inet/... (gawk): TCP/IP Networking. (line 6) * files, /inet4/... (gawk): TCP/IP Networking. (line 6) * files, /inet6/... (gawk): TCP/IP Networking. (line 6) -* files, as single records: Records. (line 219) * files, awk programs in: Long. (line 6) * files, awkprof.out: Profiling. (line 6) * files, awkvars.out: Options. (line 93) @@ -31284,6 +31394,8 @@ Index * files, source, search path for: Igawk Program. (line 368) * files, splitting: Split Program. (line 6) * files, Texinfo, extracting programs from: Extract Program. (line 6) +* find substring in string: String Functions. (line 151) +* finding extensions: Finding Extensions. (line 6) * finish debugger command: Debugger Execution Control. (line 39) * Fish, Fred: Contributors. (line 50) @@ -31295,6 +31407,7 @@ Index * floating-point, numbers, arbitrary precision: Arbitrary Precision Arithmetic. (line 6) * floating-point, VAX/VMS: VMS Running. (line 51) +* flush buffered output: I/O Functions. (line 25) * fnmatch() extension function: Extension Sample Fnmatch. (line 12) * FNR variable <1>: Auto-set. (line 103) @@ -31310,9 +31423,11 @@ Index * format specifiers, printf statement: Control Letters. (line 6) * format specifiers, strftime() function (gawk): Time Functions. (line 88) +* format time string: Time Functions. (line 48) * formats, numeric output: OFMT. (line 6) * formatting output: Printf. (line 6) -* forward slash (/): Regexp. (line 10) +* formatting strings: String Functions. (line 378) +* forward slash (/) to enclose regular expressions: Regexp. (line 10) * forward slash (/), / operator: Precedence. (line 55) * forward slash (/), /= operator <1>: Precedence. (line 95) * forward slash (/), /= operator: Assignment Ops. (line 129) @@ -31341,6 +31456,7 @@ Index (line 6) * FS, containing ^: Regexp Field Splitting. (line 59) +* FS, in multiline records: Multiple Line. (line 41) * FSF (Free Software Foundation) <1>: Glossary. (line 297) * FSF (Free Software Foundation) <2>: Getting. (line 10) * FSF (Free Software Foundation): Manual History. (line 6) @@ -31349,6 +31465,7 @@ Index * FUNCTAB array: Auto-set. (line 119) * function calls: Function Calls. (line 6) * function calls, indirect: Indirect Calls. (line 6) +* function definition example: Function Example. (line 6) * function pointers: Indirect Calls. (line 6) * functions, arrays as parameters to: Pass By Value/Reference. (line 47) @@ -31386,7 +31503,7 @@ Index (line 71) * functions, user-defined: User-defined. (line 6) * functions, user-defined, calling: Function Caveats. (line 6) -* functions, user-defined, counts: Profiling. (line 137) +* functions, user-defined, counts, in a profile: Profiling. (line 137) * functions, user-defined, library of: Library Functions. (line 6) * functions, user-defined, next/nextfile statements and <1>: Nextfile Statement. (line 47) @@ -31395,6 +31512,7 @@ Index * G-d: Acknowledgments. (line 78) * Garfinkle, Scott: Contributors. (line 34) * gawk program, dynamic profiling: Profiling. (line 179) +* gawk version: Auto-set. (line 204) * gawk, ARGIND variable in: Other Arguments. (line 12) * gawk, awk and <1>: This Manual. (line 14) * gawk, awk and: Preface. (line 23) @@ -31403,7 +31521,7 @@ Index * gawk, built-in variables and: Built-in Variables. (line 14) * gawk, character classes and: Bracket Expressions. (line 90) * gawk, coding style in: Adding Code. (line 38) -* gawk, command-line options: GNU Regexp Operators. +* gawk, command-line options, and regular expressions: GNU Regexp Operators. (line 70) * gawk, comparison operators and: Comparison Operators. (line 50) @@ -31437,7 +31555,7 @@ Index * 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 32) +* gawk, IGNORECASE variable in <2>: String Functions. (line 48) * gawk, IGNORECASE variable in <3>: Array Intro. (line 91) * gawk, IGNORECASE variable in <4>: User-modified. (line 82) * gawk, IGNORECASE variable in: Case-sensitivity. (line 26) @@ -31472,9 +31590,7 @@ Index (line 6) * gawk, regular expressions, precedence: Regexp Operators. (line 161) * gawk, RT variable in <1>: Auto-set. (line 266) -* gawk, RT variable in <2>: Getline/Variable/File. - (line 10) -* gawk, RT variable in <3>: Multiple Line. (line 129) +* gawk, RT variable in <2>: Multiple Line. (line 129) * gawk, RT variable in: Records. (line 132) * gawk, See Also awk: Preface. (line 36) * gawk, source code, obtaining: Getting. (line 6) @@ -31488,10 +31604,12 @@ Index * gawk, VMS version of: VMS Installation. (line 6) * gawk, word-boundary operator: GNU Regexp Operators. (line 63) +* gawkextlib: gawkextlib. (line 6) * gawkextlib project: gawkextlib. (line 6) * General Public License (GPL): Glossary. (line 306) * General Public License, See GPL: Manual History. (line 11) -* gensub() function (gawk) <1>: String Functions. (line 81) +* generate time values: Time Functions. (line 25) +* gensub() function (gawk) <1>: String Functions. (line 82) * gensub() function (gawk): Using Constant Regexps. (line 43) * gensub() function (gawk), escape processing: Gory Details. (line 6) @@ -31517,6 +31635,8 @@ Index * getline command, FILENAME variable and: Getline Notes. (line 19) * getline command, return values: Getline. (line 19) * getline command, variants: Getline Summary. (line 6) +* 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) * getlocaltime() user-defined function: Getlocaltime Function. @@ -31540,8 +31660,7 @@ Index * git utility <3>: Other Versions. (line 29) * git utility: gawkextlib. (line 29) * git, use of for gawk source code: Derived Files. (line 6) -* GMP: Arbitrary Precision Arithmetic. - (line 6) +* GMP: Gawk and MPFR. (line 6) * GNITS mailing list: Acknowledgments. (line 52) * GNU awk, See gawk: Preface. (line 49) * GNU Free Documentation License: GNU Free Documentation License. @@ -31564,11 +31683,12 @@ Index * 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 177) * groups, information about: Group Functions. (line 6) -* gsub() function <1>: String Functions. (line 134) +* gsub() function <1>: String Functions. (line 135) * gsub() function: Using Constant Regexps. (line 43) -* gsub() function, arguments of: String Functions. (line 459) +* gsub() function, arguments of: String Functions. (line 460) * gsub() function, escape processing: Gory Details. (line 6) * h debugger command (alias for help): Miscellaneous Debugger Commands. (line 66) @@ -31582,9 +31702,10 @@ Index (line 66) * hexadecimal numbers: Nondecimal-numbers. (line 6) * hexadecimal values, enabling interpretation of: Options. (line 207) +* history expansion, in debugger: Readline Support. (line 6) * histsort.awk program: History Sorting. (line 25) * Hughes, Phil: Acknowledgments. (line 43) -* HUP signal: Profiling. (line 211) +* HUP signal, for dynamic profiling: Profiling. (line 211) * hyphen (-), - operator: Precedence. (line 52) * hyphen (-), -- operator <1>: Precedence. (line 46) * hyphen (-), -- operator: Increment Ops. (line 48) @@ -31597,38 +31718,37 @@ Index * id.awk program: Id Program. (line 30) * IEEE-754 format: Floating-point Representation. (line 6) -* if statement <1>: If Statement. (line 6) -* if statement: Regexp Usage. (line 19) +* if statement: If Statement. (line 6) * if statement, actions, changing: Ranges. (line 25) +* if statement, use of regexps in: Regexp Usage. (line 19) * igawk.sh program: Igawk Program. (line 124) +* ignore breakpoint: Breakpoint Control. (line 87) * ignore debugger command: Breakpoint Control. (line 87) -* IGNORECASE variable <1>: Array Sorting Functions. - (line 83) -* IGNORECASE variable <2>: String Functions. (line 32) -* IGNORECASE variable <3>: Array Intro. (line 91) -* IGNORECASE variable <4>: User-modified. (line 82) -* IGNORECASE variable: Case-sensitivity. (line 26) -* IGNORECASE variable, array sorting and: Array Sorting Functions. +* IGNORECASE variable: User-modified. (line 82) +* IGNORECASE variable, and array indices: Array Intro. (line 91) +* IGNORECASE variable, and array sorting functions: Array Sorting Functions. (line 83) -* IGNORECASE variable, array subscripts and: Array Intro. (line 91) * IGNORECASE variable, in example programs: Library Functions. (line 53) +* IGNORECASE variable, ~ and !~ operators: Case-sensitivity. (line 26) * Illumos: Other Versions. (line 104) * Illumos, POSIX-compliant awk: Other Versions. (line 104) * implementation issues, gawk: Notes. (line 6) * implementation issues, gawk, debugging: Compatibility Mode. (line 6) * implementation issues, gawk, limits <1>: Redirection. (line 135) * implementation issues, gawk, limits: Getline Notes. (line 14) -* in operator <1>: Id Program. (line 93) -* in operator <2>: Scanning an Array. (line 17) -* in operator <3>: Reference to Elements. - (line 37) -* in operator <4>: For Statement. (line 75) -* in operator <5>: Precedence. (line 83) +* in operator <1>: For Statement. (line 75) +* in operator <2>: Precedence. (line 83) * in operator: Comparison Operators. (line 11) +* in operator, index existence in multidimensional arrays: Multidimensional. + (line 43) +* in operator, order of array access: Scanning an Array. (line 48) +* in operator, testing if array element exists: Reference to Elements. + (line 37) +* in operator, use in loops: Scanning an Array. (line 17) * increment operators: Increment Ops. (line 6) -* index() function: String Functions. (line 150) +* index() function: String Functions. (line 151) * indexing arrays: Array Intro. (line 49) * indirect function calls: Indirect Calls. (line 6) * infinite precision: Arbitrary Precision Arithmetic. @@ -31646,6 +31766,7 @@ Index * input files, running awk without: Read Terminal. (line 6) * input files, variable assignments and: Other Arguments. (line 19) * input pipeline: Getline/Pipe. (line 9) +* input record, length of: String Functions. (line 171) * input redirection: Getline/File. (line 6) * input, data, nondecimal: Nondecimal Data. (line 6) * input, explicit: Getline. (line 6) @@ -31654,14 +31775,18 @@ Index * input, splitting into records: Records. (line 6) * input, standard <1>: Special FD. (line 6) * input, standard: Read Terminal. (line 6) +* input/output functions: I/O Functions. (line 6) * input/output, binary: User-modified. (line 10) * input/output, from BEGIN and END: I/O And BEGIN/END. (line 6) * input/output, two-way: Two-way I/O. (line 44) * 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 signal (MS-Windows): Profiling. (line 214) * int() function: Numeric Functions. (line 23) +* integer array indices: Numeric Array Subscripts. + (line 31) * integers: General Arithmetic. (line 6) * integers, arbitrary precision: Arbitrary Precision Integers. (line 6) @@ -31685,8 +31810,9 @@ Index * internationalizing a program: Explaining gettext. (line 6) * interpreted programs <1>: Glossary. (line 357) * interpreted programs: Basic High Level. (line 15) -* interval expressions: Regexp Operators. (line 116) +* interval expressions, regexp operator: Regexp Operators. (line 116) * inventory-shipped file: Sample Data Files. (line 32) +* invoke shell command: I/O Functions. (line 72) * isarray() function (gawk): Type Functions. (line 11) * ISO: Glossary. (line 368) * ISO 8859-1: Glossary. (line 133) @@ -31741,9 +31867,12 @@ Index * left angle bracket (<), <= operator <1>: Precedence. (line 65) * left angle bracket (<), <= operator: Comparison Operators. (line 11) +* left shift: Bitwise Functions. (line 46) * left shift, bitwise: Bitwise Functions. (line 32) * leftmost longest match: Multiple Line. (line 26) -* length() function: String Functions. (line 163) +* length of input record: String Functions. (line 171) +* length of string: String Functions. (line 164) +* length() function: String Functions. (line 164) * Lesser General Public License (LGPL): Glossary. (line 397) * LGPL (Lesser General Public License): Glossary. (line 397) * libmawk: Other Versions. (line 120) @@ -31793,10 +31922,12 @@ Index * Linux <1>: Glossary. (line 616) * Linux <2>: I18N Example. (line 55) * Linux: Manual History. (line 28) +* list all global variables, in debugger: Debugger Info. (line 48) * list debugger command: Miscellaneous Debugger Commands. (line 72) +* list function definitions, in debugger: Debugger Info. (line 30) * loading, library: Options. (line 173) -* local variables: Variable Scope. (line 6) +* local variables, in a function: Variable Scope. (line 6) * locale categories: Explaining gettext. (line 80) * locale decimal point character: Options. (line 263) * locale, definition of: Locales. (line 6) @@ -31805,6 +31936,7 @@ Index (line 6) * log files, timestamps in: Time Functions. (line 6) * log() function: Numeric Functions. (line 30) +* logarithm: Numeric Functions. (line 30) * logical false/true: Truth Values. (line 6) * logical operators, See Boolean expressions: Boolean Ops. (line 6) * login information: Passwd Functions. (line 16) @@ -31812,7 +31944,7 @@ Index * loops: While Statement. (line 6) * loops, break statement and: Break Statement. (line 6) * loops, continue statements and: For Statement. (line 64) -* loops, count for header: Profiling. (line 131) +* loops, count for header, in a profile: Profiling. (line 131) * loops, do-while: Do Statement. (line 6) * loops, exiting: Break Statement. (line 6) * loops, for, array scanning: Scanning an Array. (line 6) @@ -31832,9 +31964,10 @@ Index (line 6) * marked strings, extracting: String Extraction. (line 6) * Marx, Groucho: Increment Ops. (line 60) -* match() function: String Functions. (line 203) +* match regexp in string: String Functions. (line 204) +* match() function: String Functions. (line 204) * match() function, RSTART/RLENGTH variables: String Functions. - (line 220) + (line 221) * matching, expressions, See comparison expressions: Typing and Comparison. (line 9) * matching, leftmost longest: Multiple Line. (line 26) @@ -31844,6 +31977,7 @@ Index * mawk utility <3>: Concatenation. (line 36) * mawk utility <4>: Getline/Pipe. (line 62) * mawk utility: Escape Sequences. (line 124) +* maximum precision supported by MPFR library: Auto-set. (line 218) * McPhee, Patrick: Contributors. (line 100) * message object files: Explaining gettext. (line 41) * message object files, converting from portable object files: I18N Example. @@ -31852,15 +31986,18 @@ Index (line 47) * message object files, specifying directory of: Explaining gettext. (line 53) +* messages from extensions: Printing Messages. (line 6) +* metacharacters in regular expressions: Regexp Operators. (line 6) * metacharacters, escape sequences for: Escape Sequences. (line 130) +* minimum precision supported by MPFR library: Auto-set. (line 221) * mktime() function (gawk): Time Functions. (line 25) * modifiers, in format specifiers: Format Modifiers. (line 6) * monetary information, localization: Explaining gettext. (line 103) -* MPFR: Arbitrary Precision Arithmetic. - (line 6) +* MPFR: Gawk and MPFR. (line 6) * msgfmt utility: I18N Example. (line 62) * multiple precision: Arbitrary Precision Arithmetic. (line 6) +* multiple-line records: Multiple Line. (line 6) * n debugger command (alias for next): Debugger Execution Control. (line 43) * names, arrays/variables <1>: Library Names. (line 6) @@ -31911,6 +32048,8 @@ Index * ni debugger command (alias for nexti): Debugger Execution Control. (line 49) * noassign.awk program: Ignoring Assigns. (line 15) +* non-existent array elements: Reference to Elements. + (line 23) * not Boolean-logic operator: Boolean Ops. (line 6) * NR variable <1>: Auto-set. (line 128) * NR variable: Records. (line 6) @@ -31920,12 +32059,14 @@ Index * null strings <3>: Regexp Field Splitting. (line 43) * null strings: Records. (line 122) -* null strings, array elements and: Delete. (line 27) +* null strings in gawk arguments, quoting and: Quoting. (line 62) +* null strings, and deleting array elements: Delete. (line 27) * null strings, as array subscripts: Uninitialized Subscripts. (line 43) * null strings, converting numbers to strings: Conversion. (line 21) * null strings, matching: Gory Details. (line 164) -* null strings, quoting and: Quoting. (line 62) +* number as string of bits: Bitwise Functions. (line 109) +* number of array elements: String Functions. (line 194) * number sign (#), #! (executable scripts): Executable Scripts. (line 6) * number sign (#), commenting: Comments. (line 6) @@ -31940,9 +32081,9 @@ Index * numbers, floating-point: General Arithmetic. (line 6) * numbers, hexadecimal: Nondecimal-numbers. (line 6) * numbers, octal: Nondecimal-numbers. (line 6) -* numbers, random: Numeric Functions. (line 64) * numbers, rounding: Round Function. (line 6) -* numeric, constants: Scalar Constants. (line 6) +* numeric constants: Scalar Constants. (line 6) +* numeric functions: Numeric Functions. (line 6) * numeric, output format: OFMT. (line 6) * numeric, strings: Variable Typing. (line 6) * o debugger command (alias for option): Debugger Info. (line 57) @@ -31992,10 +32133,7 @@ Index * operators, word-boundary (gawk): GNU Regexp Operators. (line 63) * option debugger command: Debugger Info. (line 57) -* options, command-line <1>: Command Line Field Separator. - (line 6) -* options, command-line <2>: Options. (line 6) -* options, command-line: Long. (line 12) +* options, command-line: Options. (line 6) * options, command-line, end of: Options. (line 54) * options, command-line, invoking awk: Command Line. (line 6) * options, command-line, processing: Getopt Function. (line 6) @@ -32016,6 +32154,7 @@ Index * output record separator, See ORS variable: Output Separators. (line 20) * output redirection: Redirection. (line 6) +* output wrapper: Output Wrappers. (line 6) * output, buffering: I/O Functions. (line 29) * output, duplicating into files: Tee Program. (line 6) * output, files, closing: Close Files And Pipes. @@ -32029,14 +32168,15 @@ Index * p debugger command (alias for print): Viewing And Changing Data. (line 36) * P1003.1 POSIX standard: Glossary. (line 454) -* parentheses () <1>: Profiling. (line 146) +* parent process id of gawk process: Auto-set. (line 186) * parentheses (): Regexp Operators. (line 79) +* parentheses (), in a profile: Profiling. (line 146) * password file: Passwd Functions. (line 16) -* patsplit() function (gawk): String Functions. (line 290) +* patsplit() function (gawk): String Functions. (line 291) * patterns: Patterns and Actions. (line 6) * patterns, comparison expressions as: Expression Patterns. (line 14) -* patterns, counts: Profiling. (line 118) +* patterns, counts, in a profile: Profiling. (line 118) * patterns, default: Very Simple. (line 34) * patterns, empty: Empty. (line 6) * patterns, expressions as: Regexp Patterns. (line 6) @@ -32051,17 +32191,18 @@ Index * percent sign (%), % operator: Precedence. (line 55) * percent sign (%), %= operator <1>: Precedence. (line 95) * percent sign (%), %= operator: Assignment Ops. (line 129) -* period (.): Regexp Operators. (line 43) +* period (.), regexp operator: Regexp Operators. (line 43) * Perl: Future Extensions. (line 6) * Peters, Arno: Contributors. (line 85) * Peterson, Hal: Contributors. (line 39) -* pipes, closing: Close Files And Pipes. +* pipe, closing: Close Files And Pipes. (line 6) -* pipes, input: Getline/Pipe. (line 9) -* pipes, output: Redirection. (line 57) +* pipe, input: Getline/Pipe. (line 9) +* pipe, output: Redirection. (line 57) * Pitts, Dave <1>: Bugs. (line 73) * Pitts, Dave: Acknowledgments. (line 60) * Plauger, P.J.: Library Functions. (line 12) +* plug-in: Extension Intro. (line 6) * plus sign (+), + operator: Precedence. (line 52) * plus sign (+), ++ operator <1>: Precedence. (line 46) * plus sign (+), ++ operator: Increment Ops. (line 11) @@ -32086,7 +32227,7 @@ Index * portability, gawk: New Ports. (line 6) * portability, gettext library and: Explaining gettext. (line 10) * portability, internationalization and: I18N Portability. (line 6) -* portability, length() function: String Functions. (line 172) +* portability, length() function: String Functions. (line 173) * portability, new awk vs. old awk: Conversion. (line 55) * portability, next statement in user-defined functions: Pass By Value/Reference. (line 91) @@ -32094,7 +32235,7 @@ Index * portability, operators: Increment Ops. (line 60) * portability, operators, not in POSIX awk: Precedence. (line 98) * portability, POSIXLY_CORRECT environment variable: Options. (line 353) -* portability, substr() function: String Functions. (line 509) +* portability, substr() function: String Functions. (line 510) * portable object files <1>: Translator i18n. (line 6) * portable object files: Explaining gettext. (line 36) * portable object files, converting to message object files: I18N Example. @@ -32131,7 +32272,7 @@ Index * POSIX awk, FS variable and: User-modified. (line 66) * POSIX awk, function keyword in: Definition Syntax. (line 83) * POSIX awk, functions and, gsub()/sub(): Gory Details. (line 54) -* POSIX awk, functions and, length(): String Functions. (line 172) +* POSIX awk, functions and, length(): String Functions. (line 173) * POSIX awk, GNU long options and: Options. (line 15) * POSIX awk, interval expressions in: Regexp Operators. (line 135) * POSIX awk, next/nextfile statements and: Next Statement. (line 45) @@ -32164,6 +32305,8 @@ Index * print statement, See Also redirection, of output: Redirection. (line 17) * print statement, sprintf() function and: Round Function. (line 6) +* print variables, in debugger: Viewing And Changing Data. + (line 36) * printf debugger command: Viewing And Changing Data. (line 54) * printf statement <1>: Printf. (line 6) @@ -32183,22 +32326,30 @@ Index * printf statement, sprintf() function and: Round Function. (line 6) * printf statement, syntax of: Basic Printf. (line 6) * printing: Printing. (line 6) +* printing messages from extensions: Printing Messages. (line 6) * printing, list of options: Options. (line 154) * printing, mailing labels: Labels Program. (line 6) * printing, unduplicated lines of text: Uniq Program. (line 6) * printing, user information: Id Program. (line 6) * private variables: Library Names. (line 11) +* process group id of gawk process: Auto-set. (line 180) +* process id of gawk process: Auto-set. (line 183) * processes, two-way communications with: Two-way I/O. (line 23) * processing data: Basic High Level. (line 6) -* PROCINFO array <1>: Two-way I/O. (line 116) -* PROCINFO array <2>: Id Program. (line 15) -* PROCINFO array <3>: Group Functions. (line 6) -* PROCINFO array <4>: Passwd Functions. (line 6) -* PROCINFO array <5>: Time Functions. (line 47) -* PROCINFO array <6>: Auto-set. (line 133) -* PROCINFO array: Obsolete. (line 11) +* PROCINFO array <1>: Passwd Functions. (line 6) +* PROCINFO array <2>: Time Functions. (line 47) +* PROCINFO array: Auto-set. (line 133) +* PROCINFO array, and communications via ptys: Two-way I/O. (line 116) +* 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 161) +* PROCINFO array, uses: Auto-set. (line 239) +* PROCINFO, values of sorted_in: Controlling Scanning. + (line 24) * profiling awk programs: Profiling. (line 6) * profiling awk programs, dynamically: Profiling. (line 179) +* program identifiers: Auto-set. (line 151) * program, definition of: Getting Started. (line 21) * programmers, attractiveness of: Two-way I/O. (line 6) * programming conventions, --non-decimal-data option: Nondecimal Data. @@ -32235,11 +32386,9 @@ Index * quit debugger command: Miscellaneous Debugger Commands. (line 99) * QUIT signal (MS-Windows): Profiling. (line 214) -* quoting <1>: Comments. (line 27) -* quoting <2>: Long. (line 26) -* quoting: Read Terminal. (line 25) -* quoting, rules for: Quoting. (line 6) -* quoting, tricks for: Quoting. (line 71) +* quoting in gawk command lines: Long. (line 26) +* quoting in gawk command lines, tricks for: Quoting. (line 71) +* quoting, for small awk programs: Comments. (line 27) * r debugger command (alias for run): Debugger Execution Control. (line 62) * Rakitzis, Byron: History Sorting. (line 25) @@ -32267,6 +32416,7 @@ Index * readfile() extension function: Extension Sample Readfile. (line 11) * readfile() user-defined function: Readfile Function. (line 30) +* reading input files: Reading Files. (line 6) * recipe for a programming language: History. (line 6) * record separators <1>: User-modified. (line 143) * record separators: Records. (line 14) @@ -32281,10 +32431,12 @@ Index * records, terminating: Records. (line 132) * records, treating files as: Records. (line 219) * recursive functions: Definition Syntax. (line 73) +* redirect gawk output, in debugger: Debugger Info. (line 72) * redirection of input: Getline/File. (line 6) * redirection of output: Redirection. (line 6) * reference counting, sorting arrays: Array Sorting Functions. (line 77) +* regexp: Regexp. (line 6) * regexp constants <1>: Comparison Operators. (line 102) * regexp constants <2>: Regexp Constants. (line 6) @@ -32295,7 +32447,8 @@ Index (line 28) * regexp constants, slashes vs. quotes: Computed Regexps. (line 28) * regexp constants, vs. string constants: Computed Regexps. (line 38) -* regexp, See regular expressions: Regexp. (line 6) +* register extension: Registration Functions. + (line 6) * regular expressions: Regexp. (line 6) * regular expressions as field separators: Field Separators. (line 51) * regular expressions, anchors in: Regexp Operators. (line 22) @@ -32330,6 +32483,7 @@ 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 406) * return debugger command: Debugger Execution Control. (line 54) * return statement, user-defined functions: Return Statement. (line 6) @@ -32350,10 +32504,11 @@ Index (line 11) * right angle bracket (>), >> operator (I/O) <1>: Precedence. (line 65) * right angle bracket (>), >> operator (I/O): Redirection. (line 50) +* right shift: Bitwise Functions. (line 52) * right shift, bitwise: Bitwise Functions. (line 32) * Ritchie, Dennis: Basic Data Typing. (line 55) * RLENGTH variable: Auto-set. (line 253) -* RLENGTH variable, match() function and: String Functions. (line 220) +* RLENGTH variable, match() function and: String Functions. (line 221) * Robbins, Arnold <1>: Future Extensions. (line 6) * Robbins, Arnold <2>: Bugs. (line 32) * Robbins, Arnold <3>: Contributors. (line 139) @@ -32370,6 +32525,7 @@ Index * Robbins, Miriam <2>: Getline/Pipe. (line 39) * Robbins, Miriam: Acknowledgments. (line 78) * Rommel, Kai Uwe: Contributors. (line 42) +* round to nearest integer: Numeric Functions. (line 23) * round() user-defined function: Round Function. (line 16) * rounding mode, floating-point: Rounding Mode. (line 6) * rounding numbers: Round Function. (line 6) @@ -32381,11 +32537,9 @@ Index * RS variable, multiline records and: Multiple Line. (line 17) * rshift() function (gawk): Bitwise Functions. (line 52) * RSTART variable: Auto-set. (line 259) -* RSTART variable, match() function and: String Functions. (line 220) +* RSTART variable, match() function and: String Functions. (line 221) * RT variable <1>: Auto-set. (line 266) -* RT variable <2>: Getline/Variable/File. - (line 10) -* RT variable <3>: Multiple Line. (line 129) +* RT variable <2>: Multiple Line. (line 129) * RT variable: Records. (line 132) * Rubin, Paul <1>: Contributors. (line 15) * Rubin, Paul: History. (line 30) @@ -32395,29 +32549,35 @@ Index * rvalues/lvalues: Assignment Ops. (line 32) * s debugger command (alias for step): Debugger Execution Control. (line 68) +* sample debugging session: Sample Debugging Session. + (line 6) * sandbox mode: Options. (line 279) +* save debugger options: Debugger Info. (line 84) +* 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 131) * Schorr, Andrew: Acknowledgments. (line 60) * Schreiber, Bert: Acknowledgments. (line 38) * Schreiber, Rita: Acknowledgments. (line 38) +* search and replace in strings: String Functions. (line 82) +* search in string: String Functions. (line 151) * search paths <1>: VMS Running. (line 58) * search paths <2>: PC Using. (line 10) -* search paths <3>: Igawk Program. (line 368) -* search paths <4>: AWKLIBPATH Variable. (line 6) -* search paths: AWKPATH Variable. (line 6) +* search paths: Igawk Program. (line 368) * search paths, for shared libraries: AWKLIBPATH Variable. (line 6) * search paths, for source files <1>: VMS Running. (line 58) * search paths, for source files <2>: PC Using. (line 10) * search paths, for source files <3>: Igawk Program. (line 368) * search paths, for source files: AWKPATH Variable. (line 6) -* searching: String Functions. (line 150) * searching, files for regular expressions: Egrep Program. (line 6) * searching, for words: Dupword Program. (line 6) * sed utility <1>: Glossary. (line 12) * sed utility <2>: Simple Sed. (line 6) * sed utility: Field Splitting Summary. (line 46) +* seeding random number generator: Numeric Functions. (line 64) * semicolon (;), AWKPATH variable and: PC Using. (line 10) * semicolon (;), separating statements in actions <1>: Statements. (line 10) @@ -32434,8 +32594,18 @@ Index * separators, for records, regular expressions as: Records. (line 132) * separators, for statements in actions: Action Overview. (line 19) * separators, subscript: User-modified. (line 156) +* set breakpoint: Breakpoint Control. (line 11) * set debugger command: Viewing And Changing Data. (line 59) +* set directory of message catalogs: I18N Functions. (line 12) +* set watchpoint: Viewing And Changing Data. + (line 67) +* setting rounding mode: Setting Rounding Mode. + (line 6) +* setting working precision: Setting Precision. (line 6) +* shadowing of variable values: Definition Syntax. (line 61) +* shell quoting, double quote: Read Terminal. (line 25) +* shell quoting, rules for: Quoting. (line 6) * shells, piping commands into: Redirection. (line 142) * shells, quoting: Using Shell Variables. (line 12) @@ -32446,6 +32616,13 @@ Index (line 6) * shift, bitwise: Bitwise Functions. (line 32) * short-circuit operators: Boolean Ops. (line 57) +* show all source files, in debugger: Debugger Info. (line 45) +* show breakpoints: Debugger Info. (line 21) +* show function arguments, in debugger: Debugger Info. (line 18) +* show local variables, in debugger: Debugger Info. (line 34) +* show name of current source file, in debugger: Debugger Info. + (line 37) +* show watchpoints: Debugger Info. (line 51) * si debugger command (alias for stepi): Debugger Execution Control. (line 76) * side effects <1>: Increment Ops. (line 11) @@ -32491,31 +32668,36 @@ Index (line 56) * sidebar, Using close()'s Return Value: Close Files And Pipes. (line 128) -* SIGHUP signal: Profiling. (line 211) +* SIGHUP signal, for dynamic profiling: Profiling. (line 211) * SIGINT signal (MS-Windows): Profiling. (line 214) -* signals, HUP/SIGHUP: Profiling. (line 211) +* signals, HUP/SIGHUP, for profiling: Profiling. (line 211) * signals, INT/SIGINT (MS-Windows): Profiling. (line 214) * signals, QUIT/SIGQUIT (MS-Windows): Profiling. (line 214) -* signals, USR1/SIGUSR1: Profiling. (line 188) +* signals, USR1/SIGUSR1, for profiling: Profiling. (line 188) * signature program: Signature Program. (line 6) * SIGQUIT signal (MS-Windows): Profiling. (line 214) -* SIGUSR1 signal: Profiling. (line 188) +* SIGUSR1 signal, for dynamic profiling: Profiling. (line 188) * silent debugger command: Debugger Execution Control. (line 10) * sin() function: Numeric Functions. (line 75) +* sine: Numeric Functions. (line 75) * single precision floating-point: General Arithmetic. (line 21) -* single quote (') <1>: Quoting. (line 31) -* single quote (') <2>: Long. (line 33) * single quote ('): One-shot. (line 15) +* single quote (') in gawk command lines: Long. (line 33) +* single quote ('), in shell commands: Quoting. (line 31) * single quote ('), vs. apostrophe: Comments. (line 27) * single quote ('), with double quotes: Quoting. (line 53) * single-character fields: Single Character Fields. (line 6) +* single-step execution, in the debugger: Debugger Execution Control. + (line 43) * Skywalker, Luke: Undocumented. (line 6) * sleep utility: Alarm Program. (line 111) * sleep() extension function: Extension Sample Time. (line 23) * Solaris, POSIX-compliant awk: Other Versions. (line 96) +* sort array: String Functions. (line 32) +* sort array indices: String Functions. (line 32) * sort function, arrays, sorting: Array Sorting Functions. (line 6) * sort utility: Word Sorting. (line 50) @@ -32539,18 +32721,21 @@ Index * source files, search path for: Igawk Program. (line 368) * sparse arrays: Array Intro. (line 70) * Spencer, Henry: Glossary. (line 12) +* split string into array: String Functions. (line 291) * split utility: Split Program. (line 6) -* split() function: String Functions. (line 312) +* split() function: String Functions. (line 313) * split() function, array elements, deleting: Delete. (line 61) * split.awk program: Split Program. (line 30) -* sprintf() function <1>: String Functions. (line 377) +* sprintf() function <1>: String Functions. (line 378) * sprintf() function: OFMT. (line 15) * sprintf() function, OFMT variable and: User-modified. (line 124) * sprintf() function, print/printf statements and: Round Function. (line 6) * sqrt() function: Numeric Functions. (line 78) -* square brackets ([]): Regexp Operators. (line 55) +* square brackets ([]), regexp operator: Regexp Operators. (line 55) +* square root: Numeric Functions. (line 78) * srand() function: Numeric Functions. (line 82) +* stack frame: Debugging Terms. (line 10) * Stallman, Richard <1>: Glossary. (line 297) * Stallman, Richard <2>: Contributors. (line 23) * Stallman, Richard <3>: Acknowledgments. (line 18) @@ -32559,6 +32744,7 @@ Index * standard input <1>: Special FD. (line 6) * standard input: Read Terminal. (line 6) * standard output: Special FD. (line 6) +* starting the debugger: Debugger Invocation. (line 6) * stat() extension function: Extension Sample File Functions. (line 18) * statements, compound, control statements and: Statements. (line 10) @@ -32568,6 +32754,8 @@ Index (line 68) * stepi debugger command: Debugger Execution Control. (line 76) +* stop automatic display, in debugger: Viewing And Changing Data. + (line 80) * stream editors <1>: Simple Sed. (line 6) * stream editors: Field Splitting Summary. (line 46) @@ -32576,27 +32764,32 @@ Index * string constants, vs. regexp constants: Computed Regexps. (line 38) * string extraction (internationalization): String Extraction. (line 6) +* string length: String Functions. (line 164) * string operators: Concatenation. (line 8) +* string, regular expression match: String Functions. (line 204) +* string-manipulation functions: String Functions. (line 6) * string-matching operators: Regexp Usage. (line 19) +* string-translation functions: I18N Functions. (line 6) +* strings splitting, example: String Functions. (line 333) * strings, converting <1>: Bitwise Functions. (line 109) * strings, converting: Conversion. (line 6) +* strings, converting letter case: String Functions. (line 520) * strings, converting, numbers to: User-modified. (line 28) * strings, empty, See null strings: Records. (line 122) * strings, extracting: String Extraction. (line 6) * strings, for localization: Programmer i18n. (line 14) -* strings, length of: Scalar Constants. (line 20) +* 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) -* strings, splitting: String Functions. (line 332) -* strtonum() function (gawk): String Functions. (line 384) +* strtonum() function (gawk): String Functions. (line 385) * strtonum() function (gawk), --non-decimal-data option and: Nondecimal Data. (line 36) -* sub() function <1>: String Functions. (line 405) +* sub() function <1>: String Functions. (line 406) * sub() function: Using Constant Regexps. (line 43) -* sub() function, arguments of: String Functions. (line 459) +* sub() function, arguments of: String Functions. (line 460) * sub() function, escape processing: Gory Details. (line 6) * subscript separators: User-modified. (line 156) * subscripts in arrays, multidimensional: Multidimensional. (line 10) @@ -32607,9 +32800,13 @@ Index * subscripts in arrays, uninitialized variables as: Uninitialized Subscripts. (line 6) * SUBSEP variable: User-modified. (line 156) -* SUBSEP variable, multidimensional arrays: Multidimensional. (line 16) -* substr() function: String Functions. (line 478) +* SUBSEP variable, and multidimensional arrays: Multidimensional. + (line 16) +* substitute in string: String Functions. (line 82) +* substr() function: String Functions. (line 479) +* substring: String Functions. (line 479) * Sumner, Andrew: Other Versions. (line 64) +* supplementary groups of gawk process: Auto-set. (line 234) * switch statement: Switch Statement. (line 6) * SYMTAB array: Auto-set. (line 274) * syntactic ambiguity: /= operator vs. /=.../ regexp constant: Assignment Ops. @@ -32623,6 +32820,7 @@ Index * TCP/IP, support for: Special Network. (line 6) * tee utility: Tee Program. (line 6) * tee.awk program: Tee Program. (line 26) +* temporary breakpoint: Breakpoint Control. (line 90) * terminating records: Records. (line 132) * testbits.awk program: Bitwise Functions. (line 70) * testext extension: Extension Sample API Tests. @@ -32652,6 +32850,7 @@ Index * tilde (~), ~ operator <5>: Computed Regexps. (line 6) * tilde (~), ~ operator <6>: Case-sensitivity. (line 26) * tilde (~), ~ operator: Regexp Usage. (line 19) +* time functions: Time Functions. (line 6) * time, alarm clock example program: Alarm Program. (line 11) * time, localization and: Explaining gettext. (line 115) * time, managing: Getlocaltime Function. @@ -32662,12 +32861,15 @@ Index * timestamps, converting dates to: Time Functions. (line 75) * timestamps, formatted: Getlocaltime Function. (line 6) -* tolower() function: String Functions. (line 520) -* toupper() function: String Functions. (line 526) +* tolower() function: String Functions. (line 521) +* toupper() function: String Functions. (line 527) * tr utility: Translate Program. (line 6) * trace debugger command: Miscellaneous Debugger Commands. (line 108) +* traceback, display in debugger: Execution Stack. (line 13) +* translate string: I18N Functions. (line 22) * translate.awk program: Translate Program. (line 55) +* treating files, as single records: Records. (line 219) * troubleshooting, --non-decimal-data option: Options. (line 207) * troubleshooting, == operator: Comparison Operators. (line 37) @@ -32686,9 +32888,9 @@ Index * 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 469) -* troubleshooting, match() function: String Functions. (line 285) -* troubleshooting, patsplit() function: String Functions. (line 308) +* troubleshooting, gsub()/sub() functions: String Functions. (line 470) +* troubleshooting, match() function: String Functions. (line 286) +* troubleshooting, patsplit() function: String Functions. (line 309) * troubleshooting, print statement, omitting commas: Print Examples. (line 31) * troubleshooting, printing: Redirection. (line 118) @@ -32697,7 +32899,7 @@ Index * troubleshooting, regexp constants vs. string constants: Computed Regexps. (line 38) * troubleshooting, string concatenation: Concatenation. (line 26) -* troubleshooting, substr() function: String Functions. (line 496) +* troubleshooting, substr() function: String Functions. (line 497) * troubleshooting, system() function: I/O Functions. (line 94) * troubleshooting, typographical errors, global variables: Options. (line 98) @@ -32710,6 +32912,8 @@ Index * type conversion: Conversion. (line 21) * u debugger command (alias for until): Debugger Execution Control. (line 83) +* unassigned array elements: Reference to Elements. + (line 18) * undefined functions: Pass By Value/Reference. (line 71) * underscore (_), C macro: Explaining gettext. (line 70) @@ -32742,15 +32946,16 @@ Index (line 84) * up debugger command: Execution Stack. (line 33) * user database, reading: Passwd Functions. (line 6) -* user-defined, functions: User-defined. (line 6) -* user-defined, functions, counts: Profiling. (line 137) +* user-defined functions: User-defined. (line 6) +* user-defined, functions, counts, in a profile: Profiling. (line 137) * user-defined, variables: Variables. (line 6) * user-modifiable variables: User-modified. (line 6) * users, information about, printing: Id Program. (line 6) * users, information about, retrieving: Passwd Functions. (line 16) -* USR1 signal: Profiling. (line 188) +* USR1 signal, for dynamic profiling: Profiling. (line 188) * values, numeric: Basic Data Typing. (line 13) * values, string: Basic Data Typing. (line 13) +* variable assignments and input files: Other Arguments. (line 19) * variable typing: Typing and Comparison. (line 9) * variables <1>: Basic Data Typing. (line 6) @@ -32771,7 +32976,7 @@ Index * variables, global, for library functions: Library Names. (line 11) * variables, global, printing list of: Options. (line 93) * variables, initializing: Using Variables. (line 20) -* variables, local: Variable Scope. (line 6) +* variables, local to a function: Variable Scope. (line 6) * variables, names of: Arrays. (line 18) * variables, private: Library Names. (line 11) * variables, setting: Options. (line 32) @@ -32782,6 +32987,10 @@ Index * variables, uninitialized, as array subscripts: Uninitialized Subscripts. (line 6) * variables, user-defined: Variables. (line 6) +* version of gawk: Auto-set. (line 204) +* version of gawk extension API: Auto-set. (line 229) +* version of GNU MP library: Auto-set. (line 215) +* version of GNU MPFR library: Auto-set. (line 211) * vertical bar (|): Regexp Operators. (line 69) * vertical bar (|), | operator (I/O) <1>: Precedence. (line 65) * vertical bar (|), | operator (I/O): Getline/Pipe. (line 9) @@ -32805,12 +33014,13 @@ Index * warnings, issuing: Options. (line 182) * watch debugger command: Viewing And Changing Data. (line 67) +* watchpoint: Debugging Terms. (line 42) * wc utility: Wc Program. (line 6) * wc.awk program: Wc Program. (line 46) * Weinberger, Peter <1>: Contributors. (line 11) * Weinberger, Peter: History. (line 17) -* while statement <1>: While Statement. (line 6) -* while statement: Regexp Usage. (line 19) +* while statement: While Statement. (line 6) +* while statement, use of regexps in: Regexp Usage. (line 19) * whitespace, as field separators: Default Field Splitting. (line 6) * whitespace, functions, calling: Calling Built-in. (line 10) @@ -32908,488 +33118,489 @@ Node: When105754 Node: Invoking Gawk107901 Node: Command Line109364 Node: Options110147 -Ref: Options-Footnote-1125542 -Node: Other Arguments125567 -Node: Naming Standard Input128225 -Node: Environment Variables129319 -Node: AWKPATH Variable129877 -Ref: AWKPATH Variable-Footnote-1132635 -Node: AWKLIBPATH Variable132895 -Node: Other Environment Variables133613 -Node: Exit Status136576 -Node: Include Files137251 -Node: Loading Shared Libraries140820 -Node: Obsolete142184 -Node: Undocumented142881 -Node: Regexp143123 -Node: Regexp Usage144512 -Node: Escape Sequences146537 -Node: Regexp Operators152206 -Ref: Regexp Operators-Footnote-1159586 -Ref: Regexp Operators-Footnote-2159733 -Node: Bracket Expressions159831 -Ref: table-char-classes161721 -Node: GNU Regexp Operators164244 -Node: Case-sensitivity167967 -Ref: Case-sensitivity-Footnote-1170935 -Ref: Case-sensitivity-Footnote-2171170 -Node: Leftmost Longest171278 -Node: Computed Regexps172479 -Node: Reading Files175816 -Node: Records177818 -Ref: Records-Footnote-1187341 -Node: Fields187378 -Ref: Fields-Footnote-1190334 -Node: Nonconstant Fields190420 -Node: Changing Fields192626 -Node: Field Separators198585 -Node: Default Field Splitting201287 -Node: Regexp Field Splitting202404 -Node: Single Character Fields205746 -Node: Command Line Field Separator206805 -Node: Full Line Fields210147 -Ref: Full Line Fields-Footnote-1210655 -Node: Field Splitting Summary210701 -Ref: Field Splitting Summary-Footnote-1213800 -Node: Constant Size213901 -Node: Splitting By Content218508 -Ref: Splitting By Content-Footnote-1222257 -Node: Multiple Line222297 -Ref: Multiple Line-Footnote-1228144 -Node: Getline228323 -Node: Plain Getline230539 -Node: Getline/Variable232634 -Node: Getline/File233781 -Node: Getline/Variable/File235122 -Ref: Getline/Variable/File-Footnote-1236721 -Node: Getline/Pipe236808 -Node: Getline/Variable/Pipe239507 -Node: Getline/Coprocess240614 -Node: Getline/Variable/Coprocess241866 -Node: Getline Notes242603 -Node: Getline Summary245390 -Ref: table-getline-variants245798 -Node: Read Timeout246710 -Ref: Read Timeout-Footnote-1250451 -Node: Command line directories250508 -Node: Printing251138 -Node: Print252769 -Node: Print Examples254106 -Node: Output Separators256890 -Node: OFMT258906 -Node: Printf260264 -Node: Basic Printf261170 -Node: Control Letters262709 -Node: Format Modifiers266521 -Node: Printf Examples272530 -Node: Redirection275242 -Node: Special Files282216 -Node: Special FD282749 -Ref: Special FD-Footnote-1286374 -Node: Special Network286448 -Node: Special Caveats287298 -Node: Close Files And Pipes288094 -Ref: Close Files And Pipes-Footnote-1295077 -Ref: Close Files And Pipes-Footnote-2295225 -Node: Expressions295375 -Node: Values296507 -Node: Constants297183 -Node: Scalar Constants297863 -Ref: Scalar Constants-Footnote-1298722 -Node: Nondecimal-numbers298904 -Node: Regexp Constants301904 -Node: Using Constant Regexps302379 -Node: Variables305434 -Node: Using Variables306089 -Node: Assignment Options307813 -Node: Conversion309688 -Ref: table-locale-affects315188 -Ref: Conversion-Footnote-1315812 -Node: All Operators315921 -Node: Arithmetic Ops316551 -Node: Concatenation319056 -Ref: Concatenation-Footnote-1321844 -Node: Assignment Ops321964 -Ref: table-assign-ops326952 -Node: Increment Ops328283 -Node: Truth Values and Conditions331717 -Node: Truth Values332800 -Node: Typing and Comparison333849 -Node: Variable Typing334642 -Ref: Variable Typing-Footnote-1338539 -Node: Comparison Operators338661 -Ref: table-relational-ops339071 -Node: POSIX String Comparison342619 -Ref: POSIX String Comparison-Footnote-1343575 -Node: Boolean Ops343713 -Ref: Boolean Ops-Footnote-1347783 -Node: Conditional Exp347874 -Node: Function Calls349606 -Node: Precedence353200 -Node: Locales356869 -Node: Patterns and Actions357958 -Node: Pattern Overview359012 -Node: Regexp Patterns360681 -Node: Expression Patterns361224 -Node: Ranges365005 -Node: BEGIN/END368109 -Node: Using BEGIN/END368871 -Ref: Using BEGIN/END-Footnote-1371607 -Node: I/O And BEGIN/END371713 -Node: BEGINFILE/ENDFILE373995 -Node: Empty376909 -Node: Using Shell Variables377226 -Node: Action Overview379511 -Node: Statements381868 -Node: If Statement383722 -Node: While Statement385221 -Node: Do Statement387265 -Node: For Statement388421 -Node: Switch Statement391573 -Node: Break Statement393727 -Node: Continue Statement395717 -Node: Next Statement397510 -Node: Nextfile Statement399900 -Node: Exit Statement402555 -Node: Built-in Variables404971 -Node: User-modified406066 -Ref: User-modified-Footnote-1414424 -Node: Auto-set414486 -Ref: Auto-set-Footnote-1427567 -Ref: Auto-set-Footnote-2427772 -Node: ARGC and ARGV427828 -Node: Arrays431682 -Node: Array Basics433187 -Node: Array Intro434013 -Node: Reference to Elements438330 -Node: Assigning Elements440600 -Node: Array Example441091 -Node: Scanning an Array442823 -Node: Controlling Scanning445137 -Ref: Controlling Scanning-Footnote-1450224 -Node: Delete450540 -Ref: Delete-Footnote-1453305 -Node: Numeric Array Subscripts453362 -Node: Uninitialized Subscripts455545 -Node: Multidimensional457172 -Node: Multiscanning460265 -Node: Arrays of Arrays461854 -Node: Functions466494 -Node: Built-in467313 -Node: Calling Built-in468391 -Node: Numeric Functions470379 -Ref: Numeric Functions-Footnote-1474211 -Ref: Numeric Functions-Footnote-2474568 -Ref: Numeric Functions-Footnote-3474616 -Node: String Functions474885 -Ref: String Functions-Footnote-1497805 -Ref: String Functions-Footnote-2497934 -Ref: String Functions-Footnote-3498182 -Node: Gory Details498269 -Ref: table-sub-escapes499948 -Ref: table-sub-posix-92501302 -Ref: table-sub-proposed502653 -Ref: table-posix-sub504007 -Ref: table-gensub-escapes505552 -Ref: Gory Details-Footnote-1506728 -Ref: Gory Details-Footnote-2506779 -Node: I/O Functions506930 -Ref: I/O Functions-Footnote-1513920 -Node: Time Functions514067 -Ref: Time Functions-Footnote-1525000 -Ref: Time Functions-Footnote-2525068 -Ref: Time Functions-Footnote-3525226 -Ref: Time Functions-Footnote-4525337 -Ref: Time Functions-Footnote-5525449 -Ref: Time Functions-Footnote-6525676 -Node: Bitwise Functions525942 -Ref: table-bitwise-ops526504 -Ref: Bitwise Functions-Footnote-1530725 -Node: Type Functions530909 -Node: I18N Functions532060 -Node: User-defined533687 -Node: Definition Syntax534491 -Ref: Definition Syntax-Footnote-1539405 -Node: Function Example539474 -Ref: Function Example-Footnote-1542123 -Node: Function Caveats542145 -Node: Calling A Function542663 -Node: Variable Scope543618 -Node: Pass By Value/Reference546581 -Node: Return Statement550089 -Node: Dynamic Typing553070 -Node: Indirect Calls554001 -Node: Library Functions563688 -Ref: Library Functions-Footnote-1567201 -Ref: Library Functions-Footnote-2567344 -Node: Library Names567515 -Ref: Library Names-Footnote-1570988 -Ref: Library Names-Footnote-2571208 -Node: General Functions571294 -Node: Strtonum Function572322 -Node: Assert Function575252 -Node: Round Function578578 -Node: Cliff Random Function580119 -Node: Ordinal Functions581135 -Ref: Ordinal Functions-Footnote-1584212 -Ref: Ordinal Functions-Footnote-2584464 -Node: Join Function584675 -Ref: Join Function-Footnote-1586446 -Node: Getlocaltime Function586646 -Node: Readfile Function590387 -Node: Data File Management592226 -Node: Filetrans Function592858 -Node: Rewind Function596927 -Node: File Checking598314 -Node: Empty Files599408 -Node: Ignoring Assigns601638 -Node: Getopt Function603192 -Ref: Getopt Function-Footnote-1614495 -Node: Passwd Functions614698 -Ref: Passwd Functions-Footnote-1623676 -Node: Group Functions623764 -Node: Walking Arrays631848 -Node: Sample Programs633984 -Node: Running Examples634658 -Node: Clones635386 -Node: Cut Program636610 -Node: Egrep Program646461 -Ref: Egrep Program-Footnote-1654234 -Node: Id Program654344 -Node: Split Program657960 -Ref: Split Program-Footnote-1661479 -Node: Tee Program661607 -Node: Uniq Program664410 -Node: Wc Program671839 -Ref: Wc Program-Footnote-1676105 -Ref: Wc Program-Footnote-2676305 -Node: Miscellaneous Programs676397 -Node: Dupword Program677585 -Node: Alarm Program679616 -Node: Translate Program684423 -Ref: Translate Program-Footnote-1688810 -Ref: Translate Program-Footnote-2689058 -Node: Labels Program689192 -Ref: Labels Program-Footnote-1692563 -Node: Word Sorting692647 -Node: History Sorting696531 -Node: Extract Program698370 -Ref: Extract Program-Footnote-1705873 -Node: Simple Sed706001 -Node: Igawk Program709063 -Ref: Igawk Program-Footnote-1724220 -Ref: Igawk Program-Footnote-2724421 -Node: Anagram Program724559 -Node: Signature Program727627 -Node: Advanced Features728727 -Node: Nondecimal Data730613 -Node: Array Sorting732196 -Node: Controlling Array Traversal732893 -Node: Array Sorting Functions741177 -Ref: Array Sorting Functions-Footnote-1745046 -Node: Two-way I/O745240 -Ref: Two-way I/O-Footnote-1750672 -Node: TCP/IP Networking750754 -Node: Profiling753598 -Node: Internationalization761101 -Node: I18N and L10N762526 -Node: Explaining gettext763212 -Ref: Explaining gettext-Footnote-1768280 -Ref: Explaining gettext-Footnote-2768464 -Node: Programmer i18n768629 -Node: Translator i18n772831 -Node: String Extraction773625 -Ref: String Extraction-Footnote-1774586 -Node: Printf Ordering774672 -Ref: Printf Ordering-Footnote-1777454 -Node: I18N Portability777518 -Ref: I18N Portability-Footnote-1779967 -Node: I18N Example780030 -Ref: I18N Example-Footnote-1782668 -Node: Gawk I18N782740 -Node: Debugger783361 -Node: Debugging784332 -Node: Debugging Concepts784765 -Node: Debugging Terms786621 -Node: Awk Debugging789218 -Node: Sample Debugging Session790110 -Node: Debugger Invocation790630 -Node: Finding The Bug791963 -Node: List of Debugger Commands798450 -Node: Breakpoint Control799784 -Node: Debugger Execution Control803448 -Node: Viewing And Changing Data806808 -Node: Execution Stack810164 -Node: Debugger Info811631 -Node: Miscellaneous Debugger Commands815613 -Node: Readline Support820789 -Node: Limitations821620 -Node: Arbitrary Precision Arithmetic823872 -Ref: Arbitrary Precision Arithmetic-Footnote-1825521 -Node: General Arithmetic825669 -Node: Floating Point Issues827389 -Node: String Conversion Precision828270 -Ref: String Conversion Precision-Footnote-1829975 -Node: Unexpected Results830084 -Node: POSIX Floating Point Problems832237 -Ref: POSIX Floating Point Problems-Footnote-1836062 -Node: Integer Programming836100 -Node: Floating-point Programming837839 -Ref: Floating-point Programming-Footnote-1844170 -Ref: Floating-point Programming-Footnote-2844440 -Node: Floating-point Representation844704 -Node: Floating-point Context845869 -Ref: table-ieee-formats846708 -Node: Rounding Mode848092 -Ref: table-rounding-modes848571 -Ref: Rounding Mode-Footnote-1851586 -Node: Gawk and MPFR851765 -Node: Arbitrary Precision Floats853020 -Ref: Arbitrary Precision Floats-Footnote-1855463 -Node: Setting Precision855779 -Ref: table-predefined-precision-strings856465 -Node: Setting Rounding Mode858610 -Ref: table-gawk-rounding-modes859014 -Node: Floating-point Constants860201 -Node: Changing Precision861630 -Ref: Changing Precision-Footnote-1863027 -Node: Exact Arithmetic863201 -Node: Arbitrary Precision Integers866339 -Ref: Arbitrary Precision Integers-Footnote-1869354 -Node: Dynamic Extensions869501 -Node: Extension Intro870959 -Node: Plugin License872224 -Node: Extension Mechanism Outline872909 -Ref: load-extension873326 -Ref: load-new-function874804 -Ref: call-new-function875799 -Node: Extension API Description877814 -Node: Extension API Functions Introduction879101 -Node: General Data Types884028 -Ref: General Data Types-Footnote-1889723 -Node: Requesting Values890022 -Ref: table-value-types-returned890759 -Node: Memory Allocation Functions891713 -Ref: Memory Allocation Functions-Footnote-1894459 -Node: Constructor Functions894555 -Node: Registration Functions896313 -Node: Extension Functions896998 -Node: Exit Callback Functions899300 -Node: Extension Version String900549 -Node: Input Parsers901199 -Node: Output Wrappers910956 -Node: Two-way processors915466 -Node: Printing Messages917674 -Ref: Printing Messages-Footnote-1918751 -Node: Updating `ERRNO'918903 -Node: Accessing Parameters919642 -Node: Symbol Table Access920872 -Node: Symbol table by name921386 -Node: Symbol table by cookie923135 -Ref: Symbol table by cookie-Footnote-1927267 -Node: Cached values927330 -Ref: Cached values-Footnote-1930820 -Node: Array Manipulation930911 -Ref: Array Manipulation-Footnote-1932009 -Node: Array Data Types932048 -Ref: Array Data Types-Footnote-1934751 -Node: Array Functions934843 -Node: Flattening Arrays938679 -Node: Creating Arrays945531 -Node: Extension API Variables950256 -Node: Extension Versioning950892 -Node: Extension API Informational Variables952793 -Node: Extension API Boilerplate953879 -Node: Finding Extensions957683 -Node: Extension Example958243 -Node: Internal File Description958973 -Node: Internal File Ops963064 -Ref: Internal File Ops-Footnote-1974573 -Node: Using Internal File Ops974713 -Ref: Using Internal File Ops-Footnote-1977066 -Node: Extension Samples977332 -Node: Extension Sample File Functions978856 -Node: Extension Sample Fnmatch987341 -Node: Extension Sample Fork989110 -Node: Extension Sample Inplace990323 -Node: Extension Sample Ord992101 -Node: Extension Sample Readdir992937 -Node: Extension Sample Revout994469 -Node: Extension Sample Rev2way995062 -Node: Extension Sample Read write array995752 -Node: Extension Sample Readfile997635 -Node: Extension Sample API Tests998453 -Node: Extension Sample Time998978 -Node: gawkextlib1000342 -Node: Language History1003123 -Node: V7/SVR3.11004716 -Node: SVR41007036 -Node: POSIX1008478 -Node: BTL1009864 -Node: POSIX/GNU1010598 -Node: Feature History1016197 -Node: Common Extensions1029173 -Node: Ranges and Locales1030485 -Ref: Ranges and Locales-Footnote-11035102 -Ref: Ranges and Locales-Footnote-21035129 -Ref: Ranges and Locales-Footnote-31035363 -Node: Contributors1035584 -Node: Installation1040965 -Node: Gawk Distribution1041859 -Node: Getting1042343 -Node: Extracting1043169 -Node: Distribution contents1044861 -Node: Unix Installation1050566 -Node: Quick Installation1051183 -Node: Additional Configuration Options1053629 -Node: Configuration Philosophy1055365 -Node: Non-Unix Installation1057719 -Node: PC Installation1058177 -Node: PC Binary Installation1059476 -Node: PC Compiling1061324 -Node: PC Testing1064268 -Node: PC Using1065444 -Node: Cygwin1069612 -Node: MSYS1070421 -Node: VMS Installation1070935 -Node: VMS Compilation1071699 -Ref: VMS Compilation-Footnote-11072951 -Node: VMS Dynamic Extensions1073009 -Node: VMS Installation Details1074382 -Node: VMS Running1076633 -Node: VMS GNV1079467 -Node: VMS Old Gawk1080190 -Node: Bugs1080660 -Node: Other Versions1084578 -Node: Notes1090662 -Node: Compatibility Mode1091462 -Node: Additions1092245 -Node: Accessing The Source1093172 -Node: Adding Code1094612 -Node: New Ports1100657 -Node: Derived Files1104792 -Ref: Derived Files-Footnote-11110113 -Ref: Derived Files-Footnote-21110147 -Ref: Derived Files-Footnote-31110747 -Node: Future Extensions1110845 -Node: Implementation Limitations1111428 -Node: Extension Design1112680 -Node: Old Extension Problems1113834 -Ref: Old Extension Problems-Footnote-11115342 -Node: Extension New Mechanism Goals1115399 -Ref: Extension New Mechanism Goals-Footnote-11118764 -Node: Extension Other Design Decisions1118950 -Node: Extension Future Growth1121056 -Node: Old Extension Mechanism1121892 -Node: Basic Concepts1123632 -Node: Basic High Level1124313 -Ref: figure-general-flow1124584 -Ref: figure-process-flow1125183 -Ref: Basic High Level-Footnote-11128412 -Node: Basic Data Typing1128597 -Node: Glossary1131952 -Node: Copying1157181 -Node: GNU Free Documentation License1194738 -Node: Index1219875 +Ref: Options-Footnote-1125525 +Node: Other Arguments125550 +Node: Naming Standard Input128208 +Node: Environment Variables129302 +Node: AWKPATH Variable129860 +Ref: AWKPATH Variable-Footnote-1132641 +Ref: AWKPATH Variable-Footnote-2132686 +Node: AWKLIBPATH Variable132946 +Node: Other Environment Variables133664 +Node: Exit Status136627 +Node: Include Files137302 +Node: Loading Shared Libraries140871 +Node: Obsolete142235 +Node: Undocumented142932 +Node: Regexp143174 +Node: Regexp Usage144563 +Node: Escape Sequences146588 +Node: Regexp Operators152257 +Ref: Regexp Operators-Footnote-1159637 +Ref: Regexp Operators-Footnote-2159784 +Node: Bracket Expressions159882 +Ref: table-char-classes161772 +Node: GNU Regexp Operators164295 +Node: Case-sensitivity168018 +Ref: Case-sensitivity-Footnote-1170986 +Ref: Case-sensitivity-Footnote-2171221 +Node: Leftmost Longest171329 +Node: Computed Regexps172530 +Node: Reading Files175867 +Node: Records177869 +Ref: Records-Footnote-1187392 +Node: Fields187429 +Ref: Fields-Footnote-1190385 +Node: Nonconstant Fields190471 +Node: Changing Fields192677 +Node: Field Separators198636 +Node: Default Field Splitting201338 +Node: Regexp Field Splitting202455 +Node: Single Character Fields205797 +Node: Command Line Field Separator206856 +Node: Full Line Fields210198 +Ref: Full Line Fields-Footnote-1210706 +Node: Field Splitting Summary210752 +Ref: Field Splitting Summary-Footnote-1213851 +Node: Constant Size213952 +Node: Splitting By Content218559 +Ref: Splitting By Content-Footnote-1222308 +Node: Multiple Line222348 +Ref: Multiple Line-Footnote-1228195 +Node: Getline228374 +Node: Plain Getline230590 +Node: Getline/Variable232685 +Node: Getline/File233832 +Node: Getline/Variable/File235173 +Ref: Getline/Variable/File-Footnote-1236772 +Node: Getline/Pipe236859 +Node: Getline/Variable/Pipe239558 +Node: Getline/Coprocess240665 +Node: Getline/Variable/Coprocess241917 +Node: Getline Notes242654 +Node: Getline Summary245441 +Ref: table-getline-variants245849 +Node: Read Timeout246761 +Ref: Read Timeout-Footnote-1250502 +Node: Command line directories250559 +Node: Printing251189 +Node: Print252820 +Node: Print Examples254157 +Node: Output Separators256941 +Node: OFMT258957 +Node: Printf260315 +Node: Basic Printf261221 +Node: Control Letters262760 +Node: Format Modifiers266572 +Node: Printf Examples272581 +Node: Redirection275293 +Node: Special Files282267 +Node: Special FD282800 +Ref: Special FD-Footnote-1286425 +Node: Special Network286499 +Node: Special Caveats287349 +Node: Close Files And Pipes288145 +Ref: Close Files And Pipes-Footnote-1295128 +Ref: Close Files And Pipes-Footnote-2295276 +Node: Expressions295426 +Node: Values296558 +Node: Constants297234 +Node: Scalar Constants297914 +Ref: Scalar Constants-Footnote-1298773 +Node: Nondecimal-numbers298955 +Node: Regexp Constants301955 +Node: Using Constant Regexps302430 +Node: Variables305485 +Node: Using Variables306140 +Node: Assignment Options307864 +Node: Conversion309739 +Ref: table-locale-affects315239 +Ref: Conversion-Footnote-1315863 +Node: All Operators315972 +Node: Arithmetic Ops316602 +Node: Concatenation319107 +Ref: Concatenation-Footnote-1321895 +Node: Assignment Ops322015 +Ref: table-assign-ops327003 +Node: Increment Ops328334 +Node: Truth Values and Conditions331768 +Node: Truth Values332851 +Node: Typing and Comparison333900 +Node: Variable Typing334693 +Ref: Variable Typing-Footnote-1338590 +Node: Comparison Operators338712 +Ref: table-relational-ops339122 +Node: POSIX String Comparison342670 +Ref: POSIX String Comparison-Footnote-1343626 +Node: Boolean Ops343764 +Ref: Boolean Ops-Footnote-1347834 +Node: Conditional Exp347925 +Node: Function Calls349657 +Node: Precedence353251 +Node: Locales356920 +Node: Patterns and Actions358009 +Node: Pattern Overview359063 +Node: Regexp Patterns360732 +Node: Expression Patterns361275 +Node: Ranges365056 +Node: BEGIN/END368160 +Node: Using BEGIN/END368922 +Ref: Using BEGIN/END-Footnote-1371658 +Node: I/O And BEGIN/END371764 +Node: BEGINFILE/ENDFILE374046 +Node: Empty376960 +Node: Using Shell Variables377277 +Node: Action Overview379562 +Node: Statements381919 +Node: If Statement383773 +Node: While Statement385272 +Node: Do Statement387316 +Node: For Statement388472 +Node: Switch Statement391624 +Node: Break Statement393778 +Node: Continue Statement395768 +Node: Next Statement397561 +Node: Nextfile Statement399951 +Node: Exit Statement402606 +Node: Built-in Variables405022 +Node: User-modified406117 +Ref: User-modified-Footnote-1414475 +Node: Auto-set414537 +Ref: Auto-set-Footnote-1427601 +Ref: Auto-set-Footnote-2427806 +Node: ARGC and ARGV427862 +Node: Arrays431716 +Node: Array Basics433221 +Node: Array Intro434047 +Node: Reference to Elements438364 +Node: Assigning Elements440634 +Node: Array Example441125 +Node: Scanning an Array442857 +Node: Controlling Scanning445171 +Ref: Controlling Scanning-Footnote-1450258 +Node: Delete450574 +Ref: Delete-Footnote-1453339 +Node: Numeric Array Subscripts453396 +Node: Uninitialized Subscripts455579 +Node: Multidimensional457206 +Node: Multiscanning460299 +Node: Arrays of Arrays461888 +Node: Functions466528 +Node: Built-in467347 +Node: Calling Built-in468425 +Node: Numeric Functions470413 +Ref: Numeric Functions-Footnote-1474245 +Ref: Numeric Functions-Footnote-2474602 +Ref: Numeric Functions-Footnote-3474650 +Node: String Functions474919 +Ref: String Functions-Footnote-1497877 +Ref: String Functions-Footnote-2498006 +Ref: String Functions-Footnote-3498254 +Node: Gory Details498341 +Ref: table-sub-escapes500020 +Ref: table-sub-posix-92501374 +Ref: table-sub-proposed502725 +Ref: table-posix-sub504079 +Ref: table-gensub-escapes505624 +Ref: Gory Details-Footnote-1506800 +Ref: Gory Details-Footnote-2506851 +Node: I/O Functions507002 +Ref: I/O Functions-Footnote-1513992 +Node: Time Functions514139 +Ref: Time Functions-Footnote-1525072 +Ref: Time Functions-Footnote-2525140 +Ref: Time Functions-Footnote-3525298 +Ref: Time Functions-Footnote-4525409 +Ref: Time Functions-Footnote-5525521 +Ref: Time Functions-Footnote-6525748 +Node: Bitwise Functions526014 +Ref: table-bitwise-ops526576 +Ref: Bitwise Functions-Footnote-1530797 +Node: Type Functions530981 +Node: I18N Functions532132 +Node: User-defined533759 +Node: Definition Syntax534563 +Ref: Definition Syntax-Footnote-1539477 +Node: Function Example539546 +Ref: Function Example-Footnote-1542195 +Node: Function Caveats542217 +Node: Calling A Function542735 +Node: Variable Scope543690 +Node: Pass By Value/Reference546653 +Node: Return Statement550161 +Node: Dynamic Typing553142 +Node: Indirect Calls554073 +Node: Library Functions563760 +Ref: Library Functions-Footnote-1567273 +Ref: Library Functions-Footnote-2567416 +Node: Library Names567587 +Ref: Library Names-Footnote-1571060 +Ref: Library Names-Footnote-2571280 +Node: General Functions571366 +Node: Strtonum Function572394 +Node: Assert Function575324 +Node: Round Function578650 +Node: Cliff Random Function580191 +Node: Ordinal Functions581207 +Ref: Ordinal Functions-Footnote-1584284 +Ref: Ordinal Functions-Footnote-2584536 +Node: Join Function584747 +Ref: Join Function-Footnote-1586518 +Node: Getlocaltime Function586718 +Node: Readfile Function590459 +Node: Data File Management592298 +Node: Filetrans Function592930 +Node: Rewind Function596999 +Node: File Checking598386 +Node: Empty Files599480 +Node: Ignoring Assigns601710 +Node: Getopt Function603264 +Ref: Getopt Function-Footnote-1614567 +Node: Passwd Functions614770 +Ref: Passwd Functions-Footnote-1623748 +Node: Group Functions623836 +Node: Walking Arrays631920 +Node: Sample Programs634056 +Node: Running Examples634730 +Node: Clones635458 +Node: Cut Program636682 +Node: Egrep Program646533 +Ref: Egrep Program-Footnote-1654306 +Node: Id Program654416 +Node: Split Program658065 +Ref: Split Program-Footnote-1661584 +Node: Tee Program661712 +Node: Uniq Program664515 +Node: Wc Program671944 +Ref: Wc Program-Footnote-1676210 +Ref: Wc Program-Footnote-2676410 +Node: Miscellaneous Programs676502 +Node: Dupword Program677690 +Node: Alarm Program679721 +Node: Translate Program684528 +Ref: Translate Program-Footnote-1688915 +Ref: Translate Program-Footnote-2689163 +Node: Labels Program689297 +Ref: Labels Program-Footnote-1692668 +Node: Word Sorting692752 +Node: History Sorting696636 +Node: Extract Program698475 +Ref: Extract Program-Footnote-1705978 +Node: Simple Sed706106 +Node: Igawk Program709168 +Ref: Igawk Program-Footnote-1724325 +Ref: Igawk Program-Footnote-2724526 +Node: Anagram Program724664 +Node: Signature Program727732 +Node: Advanced Features728832 +Node: Nondecimal Data730718 +Node: Array Sorting732301 +Node: Controlling Array Traversal732998 +Node: Array Sorting Functions741282 +Ref: Array Sorting Functions-Footnote-1745151 +Node: Two-way I/O745345 +Ref: Two-way I/O-Footnote-1750777 +Node: TCP/IP Networking750859 +Node: Profiling753703 +Node: Internationalization761206 +Node: I18N and L10N762631 +Node: Explaining gettext763317 +Ref: Explaining gettext-Footnote-1768385 +Ref: Explaining gettext-Footnote-2768569 +Node: Programmer i18n768734 +Node: Translator i18n772936 +Node: String Extraction773730 +Ref: String Extraction-Footnote-1774691 +Node: Printf Ordering774777 +Ref: Printf Ordering-Footnote-1777559 +Node: I18N Portability777623 +Ref: I18N Portability-Footnote-1780072 +Node: I18N Example780135 +Ref: I18N Example-Footnote-1782773 +Node: Gawk I18N782845 +Node: Debugger783466 +Node: Debugging784437 +Node: Debugging Concepts784870 +Node: Debugging Terms786726 +Node: Awk Debugging789323 +Node: Sample Debugging Session790215 +Node: Debugger Invocation790735 +Node: Finding The Bug792068 +Node: List of Debugger Commands798555 +Node: Breakpoint Control799889 +Node: Debugger Execution Control803553 +Node: Viewing And Changing Data806913 +Node: Execution Stack810269 +Node: Debugger Info811736 +Node: Miscellaneous Debugger Commands815718 +Node: Readline Support820894 +Node: Limitations821725 +Node: Arbitrary Precision Arithmetic823977 +Ref: Arbitrary Precision Arithmetic-Footnote-1825626 +Node: General Arithmetic825774 +Node: Floating Point Issues827494 +Node: String Conversion Precision828375 +Ref: String Conversion Precision-Footnote-1830080 +Node: Unexpected Results830189 +Node: POSIX Floating Point Problems832342 +Ref: POSIX Floating Point Problems-Footnote-1836167 +Node: Integer Programming836205 +Node: Floating-point Programming837944 +Ref: Floating-point Programming-Footnote-1844275 +Ref: Floating-point Programming-Footnote-2844545 +Node: Floating-point Representation844809 +Node: Floating-point Context845974 +Ref: table-ieee-formats846813 +Node: Rounding Mode848197 +Ref: table-rounding-modes848676 +Ref: Rounding Mode-Footnote-1851691 +Node: Gawk and MPFR851870 +Node: Arbitrary Precision Floats853125 +Ref: Arbitrary Precision Floats-Footnote-1855568 +Node: Setting Precision855884 +Ref: table-predefined-precision-strings856570 +Node: Setting Rounding Mode858715 +Ref: table-gawk-rounding-modes859119 +Node: Floating-point Constants860306 +Node: Changing Precision861735 +Ref: Changing Precision-Footnote-1863132 +Node: Exact Arithmetic863306 +Node: Arbitrary Precision Integers866444 +Ref: Arbitrary Precision Integers-Footnote-1869459 +Node: Dynamic Extensions869606 +Node: Extension Intro871064 +Node: Plugin License872329 +Node: Extension Mechanism Outline873014 +Ref: load-extension873431 +Ref: load-new-function874909 +Ref: call-new-function875904 +Node: Extension API Description877919 +Node: Extension API Functions Introduction879206 +Node: General Data Types884133 +Ref: General Data Types-Footnote-1889828 +Node: Requesting Values890127 +Ref: table-value-types-returned890864 +Node: Memory Allocation Functions891818 +Ref: Memory Allocation Functions-Footnote-1894564 +Node: Constructor Functions894660 +Node: Registration Functions896418 +Node: Extension Functions897103 +Node: Exit Callback Functions899405 +Node: Extension Version String900654 +Node: Input Parsers901304 +Node: Output Wrappers911061 +Node: Two-way processors915571 +Node: Printing Messages917779 +Ref: Printing Messages-Footnote-1918856 +Node: Updating `ERRNO'919008 +Node: Accessing Parameters919747 +Node: Symbol Table Access920977 +Node: Symbol table by name921491 +Node: Symbol table by cookie923240 +Ref: Symbol table by cookie-Footnote-1927372 +Node: Cached values927435 +Ref: Cached values-Footnote-1930925 +Node: Array Manipulation931016 +Ref: Array Manipulation-Footnote-1932114 +Node: Array Data Types932153 +Ref: Array Data Types-Footnote-1934856 +Node: Array Functions934948 +Node: Flattening Arrays938784 +Node: Creating Arrays945636 +Node: Extension API Variables950361 +Node: Extension Versioning950997 +Node: Extension API Informational Variables952898 +Node: Extension API Boilerplate953984 +Node: Finding Extensions957788 +Node: Extension Example958348 +Node: Internal File Description959078 +Node: Internal File Ops963169 +Ref: Internal File Ops-Footnote-1974678 +Node: Using Internal File Ops974818 +Ref: Using Internal File Ops-Footnote-1977171 +Node: Extension Samples977437 +Node: Extension Sample File Functions978961 +Node: Extension Sample Fnmatch987446 +Node: Extension Sample Fork989215 +Node: Extension Sample Inplace990428 +Node: Extension Sample Ord992206 +Node: Extension Sample Readdir993042 +Node: Extension Sample Revout994574 +Node: Extension Sample Rev2way995167 +Node: Extension Sample Read write array995857 +Node: Extension Sample Readfile997740 +Node: Extension Sample API Tests998558 +Node: Extension Sample Time999083 +Node: gawkextlib1000447 +Node: Language History1003228 +Node: V7/SVR3.11004821 +Node: SVR41007141 +Node: POSIX1008583 +Node: BTL1009969 +Node: POSIX/GNU1010703 +Node: Feature History1016302 +Node: Common Extensions1029278 +Node: Ranges and Locales1030590 +Ref: Ranges and Locales-Footnote-11035207 +Ref: Ranges and Locales-Footnote-21035234 +Ref: Ranges and Locales-Footnote-31035468 +Node: Contributors1035689 +Node: Installation1041070 +Node: Gawk Distribution1041964 +Node: Getting1042448 +Node: Extracting1043274 +Node: Distribution contents1044966 +Node: Unix Installation1050671 +Node: Quick Installation1051288 +Node: Additional Configuration Options1053734 +Node: Configuration Philosophy1055470 +Node: Non-Unix Installation1057824 +Node: PC Installation1058282 +Node: PC Binary Installation1059581 +Node: PC Compiling1061429 +Node: PC Testing1064373 +Node: PC Using1065549 +Node: Cygwin1069717 +Node: MSYS1070526 +Node: VMS Installation1071040 +Node: VMS Compilation1071804 +Ref: VMS Compilation-Footnote-11073056 +Node: VMS Dynamic Extensions1073114 +Node: VMS Installation Details1074487 +Node: VMS Running1076738 +Node: VMS GNV1079572 +Node: VMS Old Gawk1080295 +Node: Bugs1080765 +Node: Other Versions1084683 +Node: Notes1090767 +Node: Compatibility Mode1091567 +Node: Additions1092350 +Node: Accessing The Source1093277 +Node: Adding Code1094717 +Node: New Ports1100762 +Node: Derived Files1104897 +Ref: Derived Files-Footnote-11110218 +Ref: Derived Files-Footnote-21110252 +Ref: Derived Files-Footnote-31110852 +Node: Future Extensions1110950 +Node: Implementation Limitations1111533 +Node: Extension Design1112785 +Node: Old Extension Problems1113939 +Ref: Old Extension Problems-Footnote-11115447 +Node: Extension New Mechanism Goals1115504 +Ref: Extension New Mechanism Goals-Footnote-11118869 +Node: Extension Other Design Decisions1119055 +Node: Extension Future Growth1121161 +Node: Old Extension Mechanism1121997 +Node: Basic Concepts1123737 +Node: Basic High Level1124418 +Ref: figure-general-flow1124689 +Ref: figure-process-flow1125288 +Ref: Basic High Level-Footnote-11128517 +Node: Basic Data Typing1128702 +Node: Glossary1132057 +Node: Copying1157286 +Node: GNU Free Documentation License1194843 +Node: Index1219980  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 30ba377b..aa9e3ee4 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -2070,11 +2070,11 @@ $ @kbd{awk "BEGIN @{ print \"Don't Panic!\" @}"} @print{} Don't Panic! @end example -@cindex quoting -@cindex double quote (@code{"}) -@cindex @code{"} (double quote) -@cindex @code{\} (backslash) -@cindex backslash (@code{\}) +@cindex shell quoting, double quote +@cindex double quote (@code{"}) in shell commands +@cindex @code{"} (double quote) in shell commands +@cindex @code{\} (backslash) in shell commands +@cindex backslash (@code{\}) in shell commands This program does not read any input. The @samp{\} before each of the inner double quotes is necessary because of the shell's quoting rules---in particular because it mixes both single quotes and @@ -2114,8 +2114,7 @@ awk -f @var{source-file} @var{input-file1} @var{input-file2} @dots{} @end example @cindex @option{-f} option -@cindex command line, options -@cindex options, command-line +@cindex command line, option @option{-f} The @option{-f} instructs the @command{awk} utility to get the @command{awk} program from the file @var{source-file}. Any file name can be used for @var{source-file}. For example, you could put the program: @@ -2138,7 +2137,7 @@ does the same thing as this one: awk "BEGIN @{ print \"Don't Panic!\" @}" @end example -@cindex quoting +@cindex quoting in @command{gawk} command lines @noindent This was explained earlier (@pxref{Read Terminal}). @@ -2149,9 +2148,9 @@ program did not have single quotes around it. The quotes are only needed for programs that are provided on the @command{awk} command line. @c STARTOFRANGE sq1x -@cindex single quote (@code{'}) +@cindex single quote (@code{'}) in @command{gawk} command lines @c STARTOFRANGE qs2x -@cindex @code{'} (single quote) +@cindex @code{'} (single quote) in @command{gawk} command lines If you want to clearly identify your @command{awk} program files as such, you can add the extension @file{.awk} to the file name. This doesn't affect the execution of the @command{awk} program but it does make @@ -2300,7 +2299,7 @@ programs, but this usually isn't very useful; the purpose of a comment is to help you or another person understand the program when reading it at a later time. -@cindex quoting +@cindex quoting, for small awk programs @cindex single quote (@code{'}), vs.@: apostrophe @cindex @code{'} (single quote), vs.@: apostrophe @quotation CAUTION @@ -2341,7 +2340,7 @@ The next @value{SUBSECTION} describes the shell's quoting rules. @node Quoting @subsection Shell-Quoting Issues -@cindex quoting, rules for +@cindex shell quoting, rules for @menu * DOS Quoting:: Quoting in Windows Batch Files. @@ -2376,10 +2375,10 @@ that character. The shell removes the backslash and passes the quoted character on to the command. @item -@cindex @code{\} (backslash) -@cindex backslash (@code{\}) -@cindex single quote (@code{'}) -@cindex @code{'} (single quote) +@cindex @code{\} (backslash), in shell commands +@cindex backslash (@code{\}), in shell commands +@cindex single quote (@code{'}), in shell commands +@cindex @code{'} (single quote), in shell commands Single quotes protect everything between the opening and closing quotes. The shell does no interpretation of the quoted text, passing it on verbatim to the command. @@ -2389,8 +2388,8 @@ Refer back to for an example of what happens if you try. @item -@cindex double quote (@code{"}) -@cindex @code{"} (double quote) +@cindex double quote (@code{"}), in shell commands +@cindex @code{"} (double quote), in shell commands Double quotes protect most things between the opening and closing quotes. The shell does at least variable and command substitution on the quoted text. Different shells may do additional kinds of processing on double-quoted text. @@ -2427,7 +2426,7 @@ awk -F "" '@var{program}' @var{files} # correct @end example @noindent -@cindex null strings, quoting and +@cindex null strings in @command{gawk} arguments, quoting and Don't use this: @example @@ -2440,7 +2439,7 @@ as the value of @code{FS}, and the first file name as the text of the program! This results in syntax errors at best, and confusing behavior at worst. @end itemize -@cindex quoting, tricks for +@cindex quoting in @command{gawk} command lines, tricks for Mixing single and double quotes is difficult. You have to resort to shell quoting tricks, like this: @@ -3322,6 +3321,7 @@ Print the short version of the General Public License and then exit. @itemx --dump-variables@r{[}=@var{file}@r{]} @cindex @option{-d} option @cindex @option{--dump-variables} option +@cindex dump all variables of a program @cindex @file{awkvars.out} file @cindex files, @file{awkvars.out} @cindex variables, global, printing list of @@ -3475,7 +3475,7 @@ care to search for all occurrences of each inappropriate construct. As @cindex @option{--bignum} option Force arbitrary precision arithmetic on numbers. This option has no effect if @command{gawk} is not compiled to use the GNU MPFR and MP libraries -(@pxref{Arbitrary Precision Arithmetic}). +(@pxref{Gawk and MPFR}). @item -n @itemx --non-decimal-data @@ -3728,6 +3728,7 @@ file at all. @cindex @command{gawk}, @code{ARGIND} variable in @cindex @code{ARGIND} variable, command-line arguments +@cindex @code{ARGV} array, indexing into @cindex @code{ARGC}/@code{ARGV} variables, command-line arguments All these arguments are made available to your @command{awk} program in the @code{ARGV} array (@pxref{Built-in Variables}). Command-line options @@ -3738,6 +3739,7 @@ sets the variable @code{ARGIND} to the index in @code{ARGV} of the current element. @cindex input files, variable assignments and +@cindex variable assignments and input files The distinction between file name arguments and variable-assignment arguments is made when @command{awk} is about to open the next input file. At that point in execution, it checks the file name to see whether @@ -3815,6 +3817,7 @@ this file name itself.) @node Environment Variables @section The Environment Variables @command{gawk} Uses +@cindex environment variables used by @command{gawk} A number of environment variables influence how @command{gawk} behaves. @@ -3830,8 +3833,7 @@ behaves. @node AWKPATH Variable @subsection The @env{AWKPATH} Environment Variable @cindex @env{AWKPATH} environment variable -@cindex directories, searching -@cindex search paths +@cindex directories, searching for source files @cindex search paths, for source files @cindex differences in @command{awk} and @command{gawk}, @code{AWKPATH} environment variable @ifinfo @@ -3843,12 +3845,12 @@ implementations, you must supply a precise path name for each program file, unless the file is in the current directory. But in @command{gawk}, if the file name supplied to the @option{-f} or @option{-i} options -does not contain a @samp{/}, then @command{gawk} searches a list of +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 file with the specified name. The search path is a string consisting of directory names -separated by colons. @command{gawk} gets its search path from the +separated by colons@footnote{Semicolons on MS-Windows and MS-DOS.}. @command{gawk} gets its search path from the @env{AWKPATH} environment variable. If that variable does not exist, @command{gawk} uses a default path, @samp{.:/usr/local/share/awk}.@footnote{Your version of @command{gawk} @@ -3906,8 +3908,7 @@ found, and @command{gawk} no longer needs to use @env{AWKPATH}. @node AWKLIBPATH Variable @subsection The @env{AWKLIBPATH} Environment Variable @cindex @env{AWKLIBPATH} environment variable -@cindex directories, searching -@cindex search paths +@cindex directories, searching for shared libraries @cindex search paths, for shared libraries @cindex differences in @command{awk} and @command{gawk}, @code{AWKLIBPATH} environment variable @@ -4192,7 +4193,6 @@ they will @emph{not} be in the next release). @c update this section for each release! -@cindex @code{PROCINFO} array The process-related special files @file{/dev/pid}, @file{/dev/ppid}, @file{/dev/pgrpid}, and @file{/dev/user} were deprecated in @command{gawk} 3.1, but still worked. As of version 4.0, they are no longer @@ -4277,7 +4277,7 @@ long-undocumented ``feature'' of Unix @code{awk}. @node Regexp @chapter Regular Expressions -@cindex regexp, See regular expressions +@cindex regexp @c STARTOFRANGE regexp @cindex regular expressions @@ -4286,8 +4286,8 @@ set of strings. Because regular expressions are such a fundamental part of @command{awk} programming, their format and use deserve a separate @value{CHAPTER}. -@cindex forward slash (@code{/}) -@cindex @code{/} (forward slash) +@cindex forward slash (@code{/}) to enclose regular expressions +@cindex @code{/} (forward slash) to enclose regular expressions A regular expression enclosed in slashes (@samp{/}) is an @command{awk} pattern that matches every input record whose text belongs to that set. @@ -4343,9 +4343,9 @@ $ @kbd{awk '/li/ @{ print $2 @}' mail-list} @cindex @code{!} (exclamation point), @code{!~} operator @cindex exclamation point (@code{!}), @code{!~} operator @c @cindex operators, @code{!~} -@cindex @code{if} statement -@cindex @code{while} statement -@cindex @code{do}-@code{while} statement +@cindex @code{if} statement, use of regexps in +@cindex @code{while} statement, use of regexps in +@cindex @code{do}-@code{while} statement, use of regexps in @c @cindex statements, @code{if} @c @cindex statements, @code{while} @c @cindex statements, @code{do} @@ -4404,6 +4404,7 @@ $ @kbd{awk '$1 !~ /J/' inventory-shipped} @end example @cindex regexp constants +@cindex constant regexps @cindex regular expressions, constants, See regexp constants When a regexp is enclosed in slashes, such as @code{/foo/}, we call it a @dfn{regexp constant}, much like @code{5.27} is a numeric constant and @@ -4412,7 +4413,7 @@ a @dfn{regexp constant}, much like @code{5.27} is a numeric constant and @node Escape Sequences @section Escape Sequences -@cindex escape sequences +@cindex escape sequences, in strings @cindex backslash (@code{\}), in escape sequences @cindex @code{\} (backslash), in escape sequences Some characters cannot be included literally in string constants @@ -4706,6 +4707,7 @@ escape sequences literally when used in regexp constants. Thus, @section Regular Expression Operators @c STARTOFRANGE regexpo @cindex regular expressions, operators +@cindex metacharacters in regular expressions You can combine regular expressions with special characters, called @dfn{regular expression operators} or @dfn{metacharacters}, to @@ -4724,8 +4726,8 @@ Here is a list of metacharacters. All characters that are not escape sequences and that are not listed in the table stand for themselves: @table @code -@cindex backslash (@code{\}) -@cindex @code{\} (backslash) +@cindex backslash (@code{\}), regexp operator +@cindex @code{\} (backslash), regexp operator @item \ This is used to suppress the special meaning of a character when matching. For example, @samp{\$} @@ -4763,8 +4765,8 @@ The condition in the following example is not true: if ("line1\nLINE 2" ~ /1$/) @dots{} @end example -@cindex @code{.} (period) -@cindex period (@code{.}) +@cindex @code{.} (period), regexp operator +@cindex period (@code{.}), regexp operator @item . @r{(period)} This matches any single character, @emph{including} the newline character. For example, @samp{.P} @@ -4780,8 +4782,8 @@ character, which is a character with all bits equal to zero. Otherwise, @sc{nul} is just another character. Other versions of @command{awk} may not be able to match the @sc{nul} character. -@cindex @code{[]} (square brackets) -@cindex square brackets (@code{[]}) +@cindex @code{[]} (square brackets), regexp operator +@cindex square brackets (@code{[]}), regexp operator @cindex bracket expressions @cindex character sets, See Also bracket expressions @cindex character lists, See bracket expressions @@ -4868,7 +4870,7 @@ This symbol is similar to @samp{*}, except that the preceding expression can be matched either once or not at all. For example, @samp{fe?d} matches @samp{fed} and @samp{fd}, but nothing else. -@cindex interval expressions +@cindex interval expressions, regexp operator @item @{@var{n}@} @itemx @{@var{n},@} @itemx @{@var{n},@var{m}@} @@ -4945,6 +4947,7 @@ expressions are not available in regular expressions. @cindex bracket expressions @cindex bracket expressions, range expressions @cindex range expressions (regexps) +@cindex character lists in regular expression As mentioned earlier, a bracket expression matches any character amongst those listed between the opening and closing square brackets. @@ -5208,7 +5211,7 @@ lesser of two evils. @c @c Should really do this with file inclusion. @cindex regular expressions, @command{gawk}, command-line options -@cindex @command{gawk}, command-line options +@cindex @command{gawk}, command-line options, and regular expressions The various command-line options (@pxref{Options}) control how @command{gawk} interprets characters in regexps: @@ -5287,7 +5290,7 @@ This works in any POSIX-compliant @command{awk}. @cindex tilde (@code{~}), @code{~} operator @cindex @code{!} (exclamation point), @code{!~} operator @cindex exclamation point (@code{!}), @code{!~} operator -@cindex @code{IGNORECASE} variable +@cindex @code{IGNORECASE} variable, @code{~} and @code{!~} operators @cindex @command{gawk}, @code{IGNORECASE} variable in @c @cindex variables, @code{IGNORECASE} Another method, specific to @command{gawk}, is to set the variable @@ -5552,6 +5555,7 @@ occur often in practice, but it's worth noting for future reference. @chapter Reading Input Files @c STARTOFRANGE infir +@cindex reading input files @cindex input files, reading @cindex input files @cindex @code{FILENAME} variable @@ -5638,7 +5642,6 @@ To do this, use the special @code{BEGIN} pattern (@pxref{BEGIN/END}). For example: -@cindex @code{BEGIN} pattern @example awk 'BEGIN @{ RS = "u" @} @{ print $0 @}' mail-list @@ -5754,6 +5757,7 @@ Reaching the end of an input file terminates the current input record, even if the last character in the file is not the character in @code{RS}. @value{DARKCORNER} +@cindex empty strings @cindex null strings @cindex strings, empty, See null strings The empty string @code{""} (a string without any characters) @@ -5890,7 +5894,7 @@ character as a record separator. However, this is a special case: @command{mawk} does not allow embedded @sc{nul} characters in strings. @cindex records, treating files as -@cindex files, as single records +@cindex treating files, as single records The best way to treat a whole file as a single record is to simply read the file in, one record at a time, concatenating each record onto the end of the previous ones. @@ -5941,7 +5945,7 @@ character as a record separator. However, this is a special case: @command{mawk} does not allow embedded @sc{nul} characters in strings. @cindex records, treating files as -@cindex files, as single records +@cindex treating files, as single records The best way to treat a whole file as a single record is to simply read the file in, one record at a time, concatenating each record onto the end of the previous ones. @@ -6588,10 +6592,8 @@ behaves this way. @node Command Line Field Separator @subsection Setting @code{FS} from the Command Line -@cindex @option{-F} option -@cindex options, command-line -@cindex command line, options -@cindex field separators, on command line +@cindex @option{-F} option, command line +@cindex field separator, on command line @cindex command line, @code{FS} on@comma{} setting @cindex @code{FS} variable, setting from command line @@ -6756,7 +6758,7 @@ POSIX standard.) @cindex POSIX @command{awk}, field separators and -@cindex field separators, POSIX and +@cindex field separator, POSIX and 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} @@ -6809,7 +6811,7 @@ root:nSijPlPhZZwgE:0:0:Root:/: @cindex POSIX @command{awk}, field separators and -@cindex field separators, POSIX and +@cindex field separator, POSIX and 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} @@ -7169,6 +7171,7 @@ available for splitting regular strings (@pxref{String Functions}). @node Multiple Line @section Multiple-Line Records +@cindex multiple-line records @c STARTOFRANGE recm @cindex records, multiline @c STARTOFRANGE imr @@ -7220,7 +7223,8 @@ after the last record, the final newline is removed from the record. In the second case, this special processing is not done. @value{DARKCORNER} -@cindex field separators, in multiline records +@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 of the lines into fields in the normal manner. This happens by default @@ -7368,7 +7372,7 @@ and study the @code{getline} command @emph{after} you have reviewed the rest of this @value{DOCUMENT} and have a good knowledge of how @command{awk} works. @cindex @command{gawk}, @code{ERRNO} variable in -@cindex @code{ERRNO} variable +@cindex @code{ERRNO} variable, with @command{getline} command @cindex differences in @command{awk} and @command{gawk}, @code{getline} command @cindex @code{getline} command, return values @cindex @option{--sandbox} option, input redirection with @code{getline} @@ -7464,6 +7468,7 @@ rule in the program. @xref{Next Statement}. @node Getline/Variable @subsection Using @code{getline} into a Variable +@cindex @code{getline} into a variable @cindex variables, @code{getline} command into@comma{} using You can use @samp{getline @var{var}} to read the next record from @@ -7515,6 +7520,7 @@ the value of @code{NF} do not change. @node Getline/File @subsection Using @code{getline} from a File +@cindex @code{getline} from a file @cindex input redirection @cindex redirection of input @cindex @code{<} (left angle bracket), @code{<} operator (I/O) @@ -7563,8 +7569,6 @@ from the file @var{file}, and put it in the variable @var{var}. As above, @var{file} is a string-valued expression that specifies the file from which to read. -@cindex @command{gawk}, @code{RT} variable in -@cindex @code{RT} variable In this version of @code{getline}, none of the built-in variables are changed and the record is not split into fields. The only variable changed is @var{var}.@footnote{This is not quite true. @code{RT} could @@ -7589,7 +7593,6 @@ Note here how the name of the extra input file is not built into the program; it is taken directly from the data, specifically from the second field on the @samp{@@include} line. -@cindex @code{close()} function The @code{close()} function is called to ensure that if two identical @samp{@@include} lines appear in the input, the entire specified file is included twice. @@ -7616,7 +7619,7 @@ Failing that, attention to details would be useful.} @cindex @code{|} (vertical bar), @code{|} operator (I/O) @cindex vertical bar (@code{|}), @code{|} operator (I/O) @cindex input pipeline -@cindex pipes, input +@cindex pipe, input @cindex operators, input/output The output of a command can also be piped into @code{getline}, using @samp{@var{command} | getline}. In @@ -7640,7 +7643,6 @@ produced by running the rest of the line as a shell command: @end example @noindent -@cindex @code{close()} function The @code{close()} function is called to ensure that if two identical @samp{@@execute} lines appear in the input, the command is run for each one. @@ -8917,7 +8919,7 @@ appended to the file. If @var{output-file} does not exist, then it is created. @cindex @code{|} (vertical bar), @code{|} operator (I/O) -@cindex pipes, output +@cindex pipe, output @cindex output, pipes @item print @var{items} | @var{command} It is possible to send output to another program through a pipe @@ -9292,7 +9294,7 @@ Doing so results in unpredictable behavior. @c STARTOFRANGE ofc @cindex output, files@comma{} closing @c STARTOFRANGE pc -@cindex pipes, closing +@cindex pipe, closing @c STARTOFRANGE cc @cindex coprocesses, closing @cindex @code{getline} command, coprocesses@comma{} using from @@ -9395,6 +9397,7 @@ a separate message. @cindex differences in @command{awk} and @command{gawk}, @code{close()} function @cindex portability, @code{close()} function and +@cindex @code{close()} function, portability If you use more files than the system allows you to have open, @command{gawk} attempts to multiplex the available open files among your data files. @command{gawk}'s ability to do this depends upon the @@ -9479,7 +9482,7 @@ retval = close(command) # syntax error in many Unix awks @end example @cindex @command{gawk}, @code{ERRNO} variable in -@cindex @code{ERRNO} variable +@cindex @code{ERRNO} variable, with @command{close()} function @command{gawk} treats @code{close()} as a function. The return value is @minus{}1 if the argument names something that was never opened with a redirection, or if there is @@ -9535,7 +9538,7 @@ retval = close(command) # syntax error in many Unix awks @end example @cindex @command{gawk}, @code{ERRNO} variable in -@cindex @code{ERRNO} variable +@cindex @code{ERRNO} variable, with @command{close()} function @command{gawk} treats @code{close()} as a function. The return value is @minus{}1 if the argument names something that was never opened with a redirection, or if there is @@ -9635,7 +9638,8 @@ have different forms, but are stored identically internally. @node Scalar Constants @subsubsection Numeric and String Constants -@cindex numeric, constants +@cindex constants, numeric +@cindex numeric constants A @dfn{numeric constant} stands for a number. This number can be an integer, a decimal fraction, or a number in scientific (exponential) notation.@footnote{The internal representation of all numbers, @@ -9661,7 +9665,7 @@ double-quotation marks. For example: @noindent @cindex differences in @command{awk} and @command{gawk}, strings -@cindex strings, length of +@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). @@ -12249,6 +12253,8 @@ programmers. @node Using BEGIN/END @subsubsection Startup and Cleanup Actions +@cindex @code{BEGIN} pattern +@cindex @code{END} pattern A @code{BEGIN} rule is executed once only, before the first input record is read. Likewise, an @code{END} rule is executed once only, after all the input is read. For example: @@ -12392,7 +12398,7 @@ you can bypass the fatal error and move on to the next file on the command line. @cindex @command{gawk}, @code{ERRNO} variable in -@cindex @code{ERRNO} variable +@cindex @code{ERRNO} variable, with @code{BEGINFILE} pattern @cindex @code{nextfile} statement, @code{BEGINFILE}/@code{ENDFILE} patterns and You do this by checking if the @code{ERRNO} variable is not the empty string; if so, then @command{gawk} was not able to open the file. In @@ -13501,8 +13507,8 @@ is to simply say @samp{FS = FS}, perhaps with an explanatory comment. @cindex @command{gawk}, @code{IGNORECASE} variable in @cindex @code{IGNORECASE} variable @cindex differences in @command{awk} and @command{gawk}, @code{IGNORECASE} variable -@cindex case sensitivity, string comparisons and -@cindex case sensitivity, regexps and +@cindex case sensitivity, and string comparisons +@cindex case sensitivity, and regexps @cindex regular expressions, case sensitivity @item IGNORECASE # If @code{IGNORECASE} is nonzero or non-null, then all string comparisons @@ -13719,7 +13725,7 @@ or if @command{gawk} is in compatibility mode it is not special. @cindex @code{ENVIRON} array -@cindex environment variables +@cindex environment variables, in @code{ENVIRON} array @item ENVIRON An associative array containing the values of the environment. The array indices are the environment variable names; the elements are the values of @@ -13834,10 +13840,12 @@ The following elements (listed alphabetically) are guaranteed to be available: @table @code +@cindex effective group id of @command{gawk} user @item PROCINFO["egid"] The value of the @code{getegid()} system call. @item PROCINFO["euid"] +@cindex effective user id of @command{gawk} user The value of the @code{geteuid()} system call. @item PROCINFO["FS"] @@ -13847,6 +13855,7 @@ This is 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. For each identifier, the value of the element is one of the following: @@ -13875,15 +13884,19 @@ after it has finished parsing the program; they are @emph{not} updated while the program runs. @item PROCINFO["gid"] +@cindex group id of @command{gawk} user The value of the @code{getgid()} system call. @item PROCINFO["pgrpid"] +@cindex process group id of @command{gawk} process The process group ID of the current process. @item PROCINFO["pid"] +@cindex process id of @command{gawk} process The process ID of the current process. @item PROCINFO["ppid"] +@cindex parent process id of @command{gawk} process The parent process ID of the current process. @item PROCINFO["sorted_in"] @@ -13903,25 +13916,31 @@ Assigning a new value to this element changes the default. The value of the @code{getuid()} system call. @item PROCINFO["version"] +@cindex version of @command{gawk} +@cindex @command{gawk} version The version of @command{gawk}. @end table The following additional elements in the array are available to provide information about the MPFR and GMP libraries if your version of @command{gawk} supports arbitrary precision numbers -(@pxref{Arbitrary Precision Arithmetic}): +(@pxref{Gawk and MPFR}): @table @code +@cindex version of GNU MPFR library @item PROCINFO["mpfr_version"] The version of the GNU MPFR library. @item PROCINFO["gmp_version"] +@cindex version of GNU MP library The version of the GNU MP library. @item PROCINFO["prec_max"] +@cindex maximum precision supported by MPFR library The maximum precision supported by MPFR. @item PROCINFO["prec_min"] +@cindex minimum precision supported by MPFR library The minimum precision required by MPFR. @end table @@ -13932,12 +13951,15 @@ of @command{gawk} supports dynamic loading of extension functions @table @code @item PROCINFO["api_major"] +@cindex version of @command{gawk} extension API +@cindex extension API, version number The major version of the extension API. @item PROCINFO["api_minor"] The minor version of the extension API. @end table +@cindex supplementary groups of @command{gawk} process On some systems, there may be elements in the array, @code{"group1"} through @code{"group@var{N}"} for some @var{N}. @var{N} is the number of supplementary groups that the process has. Use the @code{in} operator @@ -13945,7 +13967,7 @@ to test for these elements (@pxref{Reference to Elements}). @cindex @command{gawk}, @code{PROCINFO} array in -@cindex @code{PROCINFO} array +@cindex @code{PROCINFO} array, uses The @code{PROCINFO} array has the following additional uses: @itemize @bullet @@ -14131,7 +14153,7 @@ changed. @node ARGC and ARGV @subsection Using @code{ARGC} and @code{ARGV} -@cindex @code{ARGC}/@code{ARGV} variables +@cindex @code{ARGC}/@code{ARGV} variables, how to use @cindex arguments, command-line @cindex command line, arguments @@ -14276,7 +14298,7 @@ ability to support true multidimensional arrays. @cindex variables, names of @cindex functions, names of -@cindex arrays, names of +@cindex arrays, names of, and names of functions/variables @cindex names, arrays/variables @cindex namespace issues @command{awk} maintains a single set @@ -14452,10 +14474,9 @@ Here, the number @code{1} isn't double-quoted, since @command{awk} automatically converts it to a string. @cindex @command{gawk}, @code{IGNORECASE} variable in -@cindex @code{IGNORECASE} variable @cindex case sensitivity, array indices and -@cindex arrays, @code{IGNORECASE} variable and -@cindex @code{IGNORECASE} variable, array subscripts and +@cindex arrays, and @code{IGNORECASE} variable +@cindex @code{IGNORECASE} variable, and array indices The value of @code{IGNORECASE} has no effect upon array subscripting. The identical string value used to store an array element must be used to retrieve it. @@ -14471,8 +14492,9 @@ is independent of the number of elements in the array. @node Reference to Elements @subsection Referring to an Array Element -@cindex arrays, elements, referencing -@cindex elements in arrays +@cindex arrays, referencing elements +@cindex array members +@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: @@ -14489,11 +14511,16 @@ 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 of array @code{foo} at index @samp{4.3}. +@cindex arrays, unassigned elements +@cindex unassigned array elements +@cindex empty array elements A reference to an array element that has no recorded value yields a value of @code{""}, the null string. This includes elements that have not been assigned any value as well as elements that have been deleted (@pxref{Delete}). +@cindex non-existent array elements +@cindex arrays, elements that don't exist @quotation NOTE A reference to an element that does not exist @emph{automatically} creates that array element, with the null string as its value. (In some cases, @@ -14513,7 +14540,7 @@ if it didn't exist before! @end quotation @c @cindex arrays, @code{in} operator and -@cindex @code{in} operator +@cindex @code{in} operator, testing if array element exists To determine whether an element exists in an array at a certain index, use the following expression: @@ -14548,8 +14575,8 @@ if (frequencies[2] != "") @node Assigning Elements @subsection Assigning Array Elements -@cindex arrays, elements, assigning -@cindex elements in arrays, assigning +@cindex arrays, elements, assigning values +@cindex elements in arrays, assigning values Array elements can be assigned values just like @command{awk} variables: @@ -14566,6 +14593,7 @@ assign to that element of the array. @node Array Example @subsection Basic Array Example +@cindex arrays, an example of using 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 @@ -14635,6 +14663,7 @@ END @{ @node Scanning an Array @subsection Scanning All Elements of an Array @cindex elements in arrays, scanning +@cindex scanning arrays @cindex arrays, scanning @cindex loops, @code{for}, array scanning @@ -14653,7 +14682,7 @@ for (@var{var} in @var{array}) @end example @noindent -@cindex @code{in} operator +@cindex @code{in} operator, use in loops This loop executes @var{body} once for each index in @var{array} that the program has previously used, with the variable @var{var} set to that index. @@ -14692,8 +14721,9 @@ END @{ @xref{Word Sorting}, for a more detailed example of this type. -@cindex arrays, elements, order of -@cindex elements in arrays, order of +@cindex arrays, elements, order of access by @code{in} operator +@cindex elements in arrays, order of access by @code{in} operator +@cindex @code{in} operator, order of array access The order in which elements of the array are accessed by this statement is determined by the internal arrangement of the array elements within @command{awk} and normally cannot be controlled or changed. This can lead to @@ -14711,6 +14741,8 @@ determines the order in which the array is traversed. This order is usually based on the internal implementation of arrays and will vary from one version of @command{awk} to the next. +@cindex array scanning order, controlling +@cindex controlling array scanning order 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.'' @@ -14727,6 +14759,7 @@ to use for comparison of array elements. This advanced feature is described later, in @ref{Array Sorting}. @end itemize +@cindex @code{PROCINFO}, values of @code{sorted_in} The following special values for @code{PROCINFO["sorted_in"]} are available: @table @code @@ -14887,7 +14920,7 @@ if (4 in foo) print "This will never be printed" @end example -@cindex null strings, array elements and +@cindex null strings, and deleting array elements It is important to note that deleting an element is @emph{not} the same as assigning it a null value (the empty string, @code{""}). For example: @@ -14909,6 +14942,7 @@ is not in the array is deleted. @cindex extensions, common@comma{} @code{delete} to delete entire arrays @cindex arrays, deleting entire contents @cindex deleting entire arrays +@cindex @code{delete} @var{array} @cindex differences in @command{awk} and @command{gawk}, array elements, deleting All the elements of an array may be deleted with a single statement by leaving off the subscript in the @code{delete} statement, @@ -14966,9 +15000,9 @@ a = 3 @section Using Numbers to Subscript Arrays @cindex numbers, as array subscripts -@cindex arrays, subscripts +@cindex arrays, numeric subscripts @cindex subscripts in arrays, numbers as -@cindex @code{CONVFMT} variable, array subscripts and +@cindex @code{CONVFMT} variable, and array subscripts An important aspect to remember about arrays is that @emph{array subscripts are always strings}. When a numeric value is used as a subscript, it is converted to a string value before being used for subscripting @@ -14998,7 +15032,8 @@ string value from @code{xyz}---this time @code{"12.15"}---because the value of @code{CONVFMT} only allows two significant digits. This test fails, since @code{"12.15"} is different from @code{"12.153"}. -@cindex converting, during subscripting +@cindex converting integer array subscripts +@cindex integer array indices According to the rules for conversions (@pxref{Conversion}), integer values are always converted to strings as integers, no matter what the @@ -15104,7 +15139,7 @@ languages, including @command{awk}) to refer to an element of a two-dimensional array named @code{grid} is with @code{grid[@var{x},@var{y}]}. -@cindex @code{SUBSEP} variable, multidimensional arrays +@cindex @code{SUBSEP} variable, and multidimensional arrays Multidimensional arrays are supported in @command{awk} through concatenation of indices into one string. @command{awk} converts the indices into strings @@ -15136,6 +15171,7 @@ combined strings that are ambiguous. Suppose that @code{SUBSEP} is "b@@c"]}} are indistinguishable because both are actually stored as @samp{foo["a@@b@@c"]}. +@cindex @code{in} operator, index existence in multidimensional arrays To test whether a particular index sequence exists in a multidimensional array, use the same operator (@code{in}) that is used for single dimensional arrays. Write the whole sequence of indices @@ -15201,6 +15237,7 @@ multidimensional @emph{way of accessing} an array. @cindex subscripts in arrays, multidimensional, scanning @cindex arrays, multidimensional, scanning +@cindex scanning multidimensional arrays However, if your program has an array that is always accessed as multidimensional, you can get the effect of scanning it by combining the scanning @code{for} statement @@ -15242,6 +15279,7 @@ separate indices is recovered. @node Arrays of Arrays @section Arrays of Arrays +@cindex arrays of arrays @command{gawk} goes beyond standard @command{awk}'s multidimensional array access and provides true arrays of @@ -15501,6 +15539,7 @@ two arguments 11 and 10. @node Numeric Functions @subsection Numeric Functions +@cindex numeric functions The following list describes all of the built-in functions that work with numbers. @@ -15509,21 +15548,25 @@ Optional parameters are enclosed in square brackets@w{ ([ ]):} @table @code @item atan2(@var{y}, @var{x}) @cindex @code{atan2()} function +@cindex arctangent Return the arctangent of @code{@var{y} / @var{x}} in radians. You can use @samp{pi = atan2(0, -1)} to retrieve the value of @value{PI}. @item cos(@var{x}) @cindex @code{cos()} function +@cindex cosine Return the cosine of @var{x}, with @var{x} in radians. @item exp(@var{x}) @cindex @code{exp()} function +@cindex exponent Return the exponential of @var{x} (@code{e ^ @var{x}}) or report an error if @var{x} is out of range. The range of values @var{x} can have depends on your machine's floating-point representation. @item int(@var{x}) @cindex @code{int()} function +@cindex round to nearest integer Return the nearest integer to @var{x}, located between @var{x} and zero and truncated toward zero. @@ -15532,6 +15575,7 @@ is @minus{}3, and @code{int(-3)} is @minus{}3 as well. @item log(@var{x}) @cindex @code{log()} function +@cindex logarithm Return the natural logarithm of @var{x}, if @var{x} is positive; otherwise, report an error. @@ -15578,7 +15622,7 @@ function roll(n) @{ return 1 + int(rand() * n) @} @} @end example -@cindex numbers, random +@cindex seeding random number generator @cindex random numbers, seed of @quotation CAUTION In most @command{awk} implementations, including @command{gawk}, @@ -15595,10 +15639,12 @@ use @code{srand()}. @item sin(@var{x}) @cindex @code{sin()} function +@cindex sine Return the sine of @var{x}, with @var{x} in radians. @item sqrt(@var{x}) @cindex @code{sqrt()} function +@cindex square root Return the positive square root of @var{x}. @command{gawk} prints a warning message if @var{x} is negative. Thus, @code{sqrt(4)} is 2. @@ -15634,6 +15680,7 @@ sequences of random numbers. @node String Functions @subsection String-Manipulation Functions +@cindex string-manipulation functions The functions in this @value{SECTION} look at or change the text of one or more strings. @@ -15663,10 +15710,10 @@ pound sign@w{ (@samp{#}):} @item asort(@var{source} @r{[}, @var{dest} @r{[}, @var{how} @r{]} @r{]}) # @itemx asorti(@var{source} @r{[}, @var{dest} @r{[}, @var{how} @r{]} @r{]}) # @cindex @code{asorti()} function (@command{gawk}) +@cindex sort array @cindex arrays, elements, retrieving number of @cindex @code{asort()} function (@command{gawk}) -@cindex @command{gawk}, @code{IGNORECASE} variable in -@cindex @code{IGNORECASE} variable +@cindex sort array indices These two functions are similar in behavior, so they are described together. @@ -15684,7 +15731,9 @@ sequential integers starting with one. If the optional array @var{dest} is specified, then @var{source} is duplicated into @var{dest}. @var{dest} is then sorted, leaving the indices of @var{source} unchanged. -When comparing strings, @code{IGNORECASE} affects the sorting. If the +@cindex @command{gawk}, @code{IGNORECASE} variable in +When comparing strings, @code{IGNORECASE} affects the sorting +(@pxref{Array Sorting Functions}). If the @var{source} array contains subarrays as values (@pxref{Arrays of Arrays}), they will come last, after all scalar values. @@ -15728,6 +15777,8 @@ are not available in compatibility mode (@pxref{Options}). @item gensub(@var{regexp}, @var{replacement}, @var{how} @r{[}, @var{target}@r{]}) # @cindex @code{gensub()} function (@command{gawk}) +@cindex search and replace in strings +@cindex substitute in string Search the target string @var{target} for matches of the regular expression @var{regexp}. If @var{how} is a string beginning with @samp{g} or @samp{G} (short for ``global''), then replace all matches of @var{regexp} with @@ -15736,7 +15787,7 @@ which match of @var{regexp} to replace. If no @var{target} is supplied, use @code{$0}. It returns the modified string as the result of the function and the original target string is @emph{not} changed. -@code{gensub()} is a general substitution function. It's purpose is +@code{gensub()} is a general substitution function. Its purpose is to provide more features than the standard @code{sub()} and @code{gsub()} functions. @@ -15813,7 +15864,8 @@ and the third argument must be assignable. @item index(@var{in}, @var{find}) @cindex @code{index()} function -@cindex searching +@cindex search in string +@cindex find substring in string Search the string @var{in} for the first occurrence of the string @var{find}, and return the position in characters where that occurrence begins in the string @var{in}. Consider the following example: @@ -15831,6 +15883,8 @@ It is a fatal error to use a regexp constant for @var{find}. @item length(@r{[}@var{string}@r{]}) @cindex @code{length()} function +@cindex string length +@cindex length of string Return the number of characters in @var{string}. If @var{string} is a number, the length of the digit string representing that number is returned. For example, @code{length("abcde")} is five. By @@ -15838,6 +15892,8 @@ contrast, @code{length(15 * 35)} works out to three. In this example, 15 * 35 = 525, and 525 is then converted to the string @code{"525"}, which has three characters. +@cindex length of input record +@cindex input record, length of If no argument is supplied, @code{length()} returns the length of @code{$0}. @c @cindex historical features @@ -15876,6 +15932,8 @@ warning about this. @cindex common extensions, @code{length()} applied to an array @cindex extensions, common@comma{} @code{length()} applied to an array @cindex differences between @command{gawk} and @command{awk} +@cindex number of array elements +@cindex array, number of elements With @command{gawk} and several other @command{awk} implementations, when given an array argument, the @code{length()} function returns the number of elements in the array. @value{COMMONEXT} @@ -15890,6 +15948,8 @@ If @option{--posix} is supplied, using an array argument is a fatal error @item match(@var{string}, @var{regexp} @r{[}, @var{array}@r{]}) @cindex @code{match()} function +@cindex string, regular expression match +@cindex match regexp in string Search @var{string} for the longest, leftmost substring matched by the regular expression, @var{regexp} and return the character position, or @dfn{index}, @@ -16005,6 +16065,7 @@ using a third argument is a fatal error. @item patsplit(@var{string}, @var{array} @r{[}, @var{fieldpat} @r{[}, @var{seps} @r{]} @r{]}) # @cindex @code{patsplit()} function (@command{gawk}) +@cindex split string into array Divide @var{string} into pieces defined by @var{fieldpat} and store the pieces in @var{array} and the separator strings in the @@ -16064,7 +16125,7 @@ split("cul-de-sac", a, "-", seps) @end example @noindent -@cindex strings, splitting +@cindex strings splitting, example splits the string @samp{cul-de-sac} into three fields using @samp{-} as the separator. It sets the contents of the array @code{a} as follows: @@ -16121,6 +16182,7 @@ If @var{string} does not match @var{fieldsep} at all (but is not null), @item sprintf(@var{format}, @var{expression1}, @dots{}) @cindex @code{sprintf()} function +@cindex formatting strings Return (without printing) the string that @code{printf} would have printed out with the same arguments (@pxref{Printf}). @@ -16134,6 +16196,7 @@ pival = sprintf("pi = %.2f (approx.)", 22/7) assigns the string @w{@samp{pi = 3.14 (approx.)}} to the variable @code{pival}. @cindex @code{strtonum()} function (@command{gawk}) +@cindex convert string to number @item strtonum(@var{str}) # Examine @var{str} and return its numeric value. If @var{str} begins with a leading @samp{0}, @code{strtonum()} assumes that @var{str} @@ -16161,6 +16224,7 @@ in compatibility mode (@pxref{Options}). @item sub(@var{regexp}, @var{replacement} @r{[}, @var{target}@r{]}) @cindex @code{sub()} function +@cindex replace in string Search @var{target}, which is treated as a string, for the leftmost, longest substring matched by the regular expression @var{regexp}. Modify the entire string @@ -16261,6 +16325,7 @@ string, and then the value of that string is treated as the regexp to match. @item substr(@var{string}, @var{start} @r{[}, @var{length}@r{]}) @cindex @code{substr()} function +@cindex substring Return a @var{length}-character-long substring of @var{string}, starting at character number @var{start}. The first character of a string is character number one.@footnote{This is different from @@ -16317,9 +16382,10 @@ string = substr(string, 1, 2) "CDE" substr(string, 6) @end example @cindex case sensitivity, converting case -@cindex converting, case +@cindex strings, converting letter case @item tolower(@var{string}) @cindex @code{tolower()} function +@cindex convert string to lower case Return a copy of @var{string}, with each uppercase character in the string replaced with its corresponding lowercase character. Nonalphabetic characters are left unchanged. For example, @@ -16327,6 +16393,7 @@ Nonalphabetic characters are left unchanged. For example, @item toupper(@var{string}) @cindex @code{toupper()} function +@cindex convert string to upper case Return a copy of @var{string}, with each lowercase character in the string replaced with its corresponding uppercase character. Nonalphabetic characters are left unchanged. For example, @@ -16752,6 +16819,7 @@ Although this makes a certain amount of sense, it can be surprising. @node I/O Functions @subsection Input/Output Functions +@cindex input/output functions The following functions relate to input/output (I/O). Optional parameters are enclosed in square brackets ([ ]): @@ -16760,6 +16828,7 @@ Optional parameters are enclosed in square brackets ([ ]): @item close(@var{filename} @r{[}, @var{how}@r{]}) @cindex @code{close()} function @cindex files, closing +@cindex close file or coprocess Close the file @var{filename} for input or output. Alternatively, the argument may be a shell command that was used for creating a coprocess, or for redirecting to or from a pipe; then the coprocess or pipe is closed. @@ -16777,6 +16846,7 @@ which discusses this feature in more detail and gives an example. @item fflush(@r{[}@var{filename}@r{]}) @cindex @code{fflush()} function +@cindex flush buffered output Flush any buffered output associated with @var{filename}, which is either a file opened for writing or a shell command for redirecting output to a pipe or coprocess. @@ -16836,6 +16906,7 @@ In such a case, @code{fflush()} returns @minus{}1, as well. @item system(@var{command}) @cindex @code{system()} function +@cindex invoke shell command @cindex interacting with other programs Execute the operating-system command @var{command} and then return to the @command{awk} program. @@ -17110,6 +17181,7 @@ you would see the latter (undesirable) output. @node Time Functions @subsection Time Functions +@cindex time functions @c STARTOFRANGE tst @cindex timestamps @@ -17149,6 +17221,7 @@ Optional parameters are enclosed in square brackets ([ ]): @table @code @item mktime(@var{datespec}) @cindex @code{mktime()} function (@command{gawk}) +@cindex generate time values Turn @var{datespec} into a timestamp in the same form as is returned by @code{systime()}. It is similar to the function of the same name in ISO C. The argument, @var{datespec}, is a string of the form @@ -17179,6 +17252,7 @@ is out of range, @code{mktime()} returns @minus{}1. @item strftime(@r{[}@var{format} @r{[}, @var{timestamp} @r{[}, @var{utc-flag}@r{]]]}) @c STARTOFRANGE strf @cindex @code{strftime()} function (@command{gawk}) +@cindex format time string Format the time specified by @var{timestamp} based on the contents of the @var{format} string and return the result. It is similar to the function of the same name in ISO C. @@ -17200,6 +17274,7 @@ change the default format. @item systime() @cindex @code{systime()} function (@command{gawk}) @cindex timestamps +@cindex current system time Return the current time as the number of seconds since the system epoch. On POSIX systems, this is the number of seconds since 1970-01-01 00:00:00 UTC, not counting leap seconds. @@ -17493,6 +17568,7 @@ gawk 'BEGIN @{ @node Bitwise Functions @subsection Bit-Manipulation Functions +@cindex bit-manipulation functions @c STARTOFRANGE bit @cindex bitwise, operations @c STARTOFRANGE and @@ -17656,26 +17732,32 @@ bitwise operations just described. They are: @cindex @command{gawk}, bitwise operations in @table @code @cindex @code{and()} function (@command{gawk}) +@cindex bitwise AND @item and(@var{v1}, @var{v2} @r{[}, @r{@dots{}]}) Return the bitwise AND of the arguments. There must be at least two. @cindex @code{compl()} function (@command{gawk}) +@cindex bitwise complement @item compl(@var{val}) Return the bitwise complement of @var{val}. @cindex @code{lshift()} function (@command{gawk}) +@cindex left shift @item lshift(@var{val}, @var{count}) Return the value of @var{val}, shifted left by @var{count} bits. @cindex @code{or()} function (@command{gawk}) +@cindex bitwise OR @item or(@var{v1}, @var{v2} @r{[}, @r{@dots{}]}) Return the bitwise OR of the arguments. There must be at least two. @cindex @code{rshift()} function (@command{gawk}) +@cindex right shift @item rshift(@var{val}, @var{count}) Return the value of @var{val}, shifted right by @var{count} bits. @cindex @code{xor()} function (@command{gawk}) +@cindex bitwise XOR @item xor(@var{v1}, @var{v2} @r{[}, @r{@dots{}]}) Return the bitwise XOR of the arguments. There must be at least two. @end table @@ -17767,6 +17849,7 @@ $ @kbd{gawk -f testbits.awk} @cindex strings, converting @cindex numbers, converting @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, @@ -17803,6 +17886,7 @@ that traverses every element of a true multidimensional array @table @code @cindex @code{isarray()} function (@command{gawk}) +@cindex scalar or array @item isarray(@var{x}) Return a true value if @var{x} is an array. Otherwise return false. @end table @@ -17824,6 +17908,7 @@ will end up turning it into a scalar. @subsection String-Translation Functions @cindex @command{gawk}, string-translation functions @cindex functions, string-translation +@cindex string-translation functions @cindex internationalization @cindex @command{awk} programs, internationalizing @@ -17836,6 +17921,7 @@ Optional parameters are enclosed in square brackets ([ ]): @table @code @cindex @code{bindtextdomain()} function (@command{gawk}) +@cindex set directory of message catalogs @item bindtextdomain(@var{directory} @r{[}, @var{domain}@r{]}) Set the directory in which @command{gawk} will look for message translation files, in case they @@ -17849,6 +17935,7 @@ If @var{directory} is the null string (@code{""}), then given @var{domain}. @cindex @code{dcgettext()} function (@command{gawk}) +@cindex translate string @item dcgettext(@var{string} @r{[}, @var{domain} @r{[}, @var{category}@r{]]}) Return the translation of @var{string} in text domain @var{domain} for locale category @var{category}. @@ -17872,7 +17959,7 @@ The default value for @var{category} is @code{"LC_MESSAGES"}. @section User-Defined Functions @c STARTOFRANGE udfunc -@cindex user-defined, functions +@cindex user-defined functions @c STARTOFRANGE funcud @cindex functions, user-defined Complicated @command{awk} programs can often be simplified by defining @@ -17958,6 +18045,7 @@ conventional to place some extra space between the arguments and the local variables, in order to document how your function is supposed to be used. @cindex variables, shadowing +@cindex shadowing of variable values 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 @@ -18016,6 +18104,7 @@ keyword @code{function} when defining a function. @node Function Example @subsection Function Definition Examples +@cindex function definition example Here is an example of a user-defined function, called @code{myprint()}, that takes a number and prints it in a specific format: @@ -18164,8 +18253,8 @@ an error. @node Variable Scope @subsubsection Controlling Variable Scope -@cindex local variables -@cindex variables, local +@cindex local variables, in a function +@cindex variables, local to a function There is no way to make a variable local to a @code{@{ @dots{} @}} 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 @@ -19094,7 +19183,7 @@ The leading capital letter indicates that it is global, while the fact that the variable name is not all capital letters indicates that the variable is not one of @command{awk}'s built-in variables, such as @code{FS}. -@cindex @option{--dump-variables} option +@cindex @option{--dump-variables} option, using for library functions 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 @@ -20911,7 +21000,7 @@ from anywhere within a user's program, and the user may have his or her own way of splitting records and fields. -@cindex @code{PROCINFO} array +@cindex @code{PROCINFO} array, testing the field splitting The @code{using_fw} variable checks @code{PROCINFO["FS"]}, which is @code{"FIELDWIDTHS"} if field splitting is being done with @code{FIELDWIDTHS}. This makes it possible to restore the correct @@ -21034,7 +21123,7 @@ uses these functions. @cindex group database, reading @c STARTOFRANGE datagr @cindex database, group, reading -@cindex @code{PROCINFO} array +@cindex @code{PROCINFO} array, and group membership @cindex @code{getgrent()} function (C library) @cindex @code{getgrent()} user-defined function @cindex groups@comma{} information about @@ -22213,7 +22302,7 @@ $ @kbd{id} @print{} uid=500(arnold) gid=500(arnold) groups=6(disk),7(lp),19(floppy) @end example -@cindex @code{PROCINFO} array +@cindex @code{PROCINFO} array, and user and group ID numbers This information is part of what is provided by @command{gawk}'s @code{PROCINFO} array (@pxref{Built-in Variables}). However, the @command{id} utility provides a more palatable output than just @@ -22314,7 +22403,6 @@ BEGIN \ @c endfile @end example -@cindex @code{in} operator The test in the @code{for} loop is worth noting. Any supplementary groups in the @code{PROCINFO} array have the indices @code{"group1"} through @code{"group@var{N}"} for some @@ -22324,7 +22412,7 @@ there are. This loop works by starting at one, concatenating the value with @code{"group"}, and then using @code{in} to see if that value is -in the array. Eventually, @code{i} is incremented past +in the array (@pxref{Reference to Elements}). Eventually, @code{i} is incremented past the last group in the array and the loop exits. The loop is also correct if there are @emph{no} supplementary @@ -25533,9 +25621,8 @@ both arrays use the values. @c Document It And Call It A Feature. Sigh. @cindex @command{gawk}, @code{IGNORECASE} variable in -@cindex @code{IGNORECASE} variable -@cindex arrays, sorting, @code{IGNORECASE} variable and -@cindex @code{IGNORECASE} variable, array sorting and +@cindex arrays, sorting, and @code{IGNORECASE} variable +@cindex @code{IGNORECASE} variable, and array sorting functions Because @code{IGNORECASE} affects string comparisons, the value of @code{IGNORECASE} also affects sorting for both @code{asort()} and @code{asorti()}. Note also that the locale's sorting order does @emph{not} @@ -25704,7 +25791,7 @@ As a side note, the assignment @samp{LC_ALL=C} in the @command{sort} command ensures traditional Unix (ASCII) sorting from @command{sort}. @cindex @command{gawk}, @code{PROCINFO} array in -@cindex @code{PROCINFO} array +@cindex @code{PROCINFO} array, and communications via ptys You may also use pseudo-ttys (ptys) for two-way communication instead of pipes, if your system supports them. This is done on a per-command basis, by setting a special element @@ -25907,8 +25994,8 @@ Here is the @file{awkprof.out} that results from running the illustrates that @command{awk} programmers sometimes get up very early in the morning to work.) -@cindex @code{BEGIN} pattern -@cindex @code{END} pattern +@cindex @code{BEGIN} pattern, and profiling +@cindex @code{END} pattern, and profiling @example # gawk profile, created Thu Feb 27 05:16:21 2014 @@ -25972,7 +26059,7 @@ Multiple @code{BEGIN} and @code{END} rules retain their separate identities, as do multiple @code{BEGINFILE} and @code{ENDFILE} rules. -@cindex patterns, counts +@cindex patterns, counts, in a profile @item Pattern-action rules have two counts. The first count, to the left of the rule, shows how many times @@ -25992,7 +26079,7 @@ is a count showing how many times the condition was true. The count for the @code{else} indicates how many times the test failed. -@cindex loops, count for header +@cindex loops, count for header, in a profile @item The count for a loop header (such as @code{for} or @code{while}) shows how many times the loop test was executed. @@ -26000,8 +26087,8 @@ or @code{while}) shows how many times the loop test was executed. statement in a rule to determine how many times the rule was executed. If the first statement is a loop, the count is misleading.) -@cindex functions, user-defined, counts -@cindex user-defined, functions, counts +@cindex functions, user-defined, counts, in a profile +@cindex user-defined, functions, counts, in a profile @item For user-defined functions, the count next to the @code{function} keyword indicates how many times the function was called. @@ -26015,8 +26102,8 @@ The layout uses ``K&R'' style with TABs. Braces are used everywhere, even when the body of an @code{if}, @code{else}, or loop is only a single statement. -@cindex @code{()} (parentheses) -@cindex parentheses @code{()} +@cindex @code{()} (parentheses), in a profile +@cindex parentheses @code{()}, in a profile @item Parentheses are used only where needed, as indicated by the structure of the program and the precedence rules. @@ -26072,6 +26159,7 @@ which is correct, but possibly surprising. @cindex profiling @command{awk} programs, dynamically @cindex @command{gawk} program, dynamic profiling +@cindex dynamic profiling Besides creating profiles when a program has completed, @command{gawk} can produce a profile while it is running. This is useful if your @command{awk} program goes into an @@ -26085,9 +26173,9 @@ $ @kbd{gawk --profile -f myprog &} @end example @cindex @command{kill} command@comma{} dynamic profiling -@cindex @code{USR1} signal -@cindex @code{SIGUSR1} signal -@cindex signals, @code{USR1}/@code{SIGUSR1} +@cindex @code{USR1} signal, for dynamic profiling +@cindex @code{SIGUSR1} signal, for dynamic profiling +@cindex signals, @code{USR1}/@code{SIGUSR1}, for profiling @noindent The shell prints a job number and process ID number; in this case, 13992. Use the @command{kill} command to send the @code{USR1} signal @@ -26118,9 +26206,9 @@ You may send @command{gawk} the @code{USR1} signal as many times as you like. Each time, the profile and function call trace are appended to the output profile file. -@cindex @code{HUP} signal -@cindex @code{SIGHUP} signal -@cindex signals, @code{HUP}/@code{SIGHUP} +@cindex @code{HUP} signal, for dynamic profiling +@cindex @code{SIGHUP} signal, for dynamic profiling +@cindex signals, @code{HUP}/@code{SIGHUP}, for profiling If you use the @code{HUP} signal instead of the @code{USR1} signal, @command{gawk} produces the profile and the function call trace and then exits. @@ -27034,6 +27122,7 @@ The following list defines terms used throughout the rest of this @value{CHAPTER}. @table @dfn +@cindex stack frame @item Stack Frame Programs generally call functions during the course of their execution. One function can call another, or a function can call itself (recursion). @@ -27055,6 +27144,7 @@ invoked. Commands that print the call stack print information about each stack frame (as detailed later on). @item Breakpoint +@cindex breakpoint During debugging, you often wish to let the program run until it reaches a certain point, and then continue execution from there one statement (or instruction) at a time. The way to do this is to set @@ -27064,6 +27154,7 @@ take over control of the program's execution. You can add and remove as many breakpoints as you like. @item Watchpoint +@cindex watchpoint A watchpoint is similar to a breakpoint. The difference is that breakpoints are oriented around the code: stop when a certain point in the code is reached. A watchpoint, however, specifies that program execution @@ -27095,6 +27186,7 @@ by the higher-level @command{awk} commands. @node Sample Debugging Session @section Sample Debugging Session +@cindex sample debugging session In order to illustrate the use of @command{gawk} as a debugger, let's look at a sample debugging session. We will use the @command{awk} implementation of the @@ -27108,6 +27200,8 @@ as our example. @node Debugger Invocation @subsection How to Start the Debugger +@cindex starting the debugger +@cindex debugger, how to start Starting the debugger is almost exactly like running @command{gawk}, except you have to pass an additional option @option{--debug} or the @@ -27448,6 +27542,8 @@ controlling breakpoints are: @cindex debugger commands, @code{break} @cindex @code{break} debugger command @cindex @code{b} debugger command (alias for @code{break}) +@cindex set breakpoint +@cindex breakpoint, setting @item @code{break} [[@var{filename}@code{:}]@var{n} | @var{function}] [@code{"@var{expression}"}] @itemx @code{b} [[@var{filename}@code{:}]@var{n} | @var{function}] [@code{"@var{expression}"}] Without any argument, set a breakpoint at the next instruction @@ -27478,6 +27574,8 @@ it continues executing the program. @cindex debugger commands, @code{clear} @cindex @code{clear} debugger command +@cindex delete breakpoint at location +@cindex breakpoint at location, how to delete @item @code{clear} [[@var{filename}@code{:}]@var{n} | @var{function}] Without any argument, delete any breakpoint at the next instruction to be executed in the selected stack frame. If the program stops at @@ -27498,6 +27596,7 @@ Delete breakpoint(s) set at entry to function @var{function}. @cindex debugger commands, @code{condition} @cindex @code{condition} debugger command +@cindex breakpoint condition @item @code{condition} @var{n} @code{"@var{expression}"} Add a condition to existing breakpoint or watchpoint @var{n}. The condition is an @command{awk} expression that the debugger evaluates @@ -27511,6 +27610,8 @@ watchpoint is made unconditional. @cindex debugger commands, @code{delete} @cindex @code{delete} debugger command @cindex @code{d} debugger command (alias for @code{delete}) +@cindex delete breakpoint by number +@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 @@ -27518,6 +27619,8 @@ all defined breakpoints if no argument is supplied. @cindex debugger commands, @code{disable} @cindex @code{disable} debugger command +@cindex disable breakpoint +@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. @@ -27526,6 +27629,7 @@ any argument, disables all breakpoints. @cindex debugger commands, @code{enable} @cindex @code{enable} debugger command @cindex @code{e} debugger command (alias for @code{enable}) +@cindex enable breakpoint @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 @@ -27545,6 +27649,7 @@ the program stops at the breakpoint. @cindex debugger commands, @code{ignore} @cindex @code{ignore} debugger command +@cindex ignore breakpoint @item @code{ignore} @var{n} @var{count} Ignore breakpoint number @var{n} the next @var{count} times it is hit. @@ -27553,6 +27658,7 @@ hit. @cindex debugger commands, @code{tbreak} @cindex @code{tbreak} debugger command @cindex @code{t} debugger command (alias for @code{tbreak}) +@cindex temporary breakpoint @item @code{tbreak} [[@var{filename}@code{:}]@var{n} | @var{function}] @itemx @code{t} [[@var{filename}@code{:}]@var{n} | @var{function}] Set a temporary breakpoint (enabled for only one stop). @@ -27573,6 +27679,8 @@ execution of the program than we saw in our earlier example: @cindex @code{silent} debugger command @cindex debugger commands, @code{end} @cindex @code{end} debugger command +@cindex breakpoint commands +@cindex commands to execute at breakpoint @item @code{commands} [@var{n}] @itemx @code{silent} @itemx @dots{} @@ -27600,6 +27708,7 @@ gawk> @cindex debugger commands, @code{c} (@code{continue}) @cindex debugger commands, @code{continue} +@cindex continue program, in debugger @item @code{continue} [@var{count}] @itemx @code{c} [@var{count}] Resume program execution. If continued from a breakpoint and @var{count} is @@ -27616,6 +27725,7 @@ Print the returned value. @cindex debugger commands, @code{next} @cindex @code{next} debugger command @cindex @code{n} debugger command (alias for @code{next}) +@cindex single-step execution, in the debugger @item @code{next} [@var{count}] @itemx @code{n} [@var{count}] Continue execution to the next source line, stepping over function calls. @@ -27710,6 +27820,7 @@ items on the list. @cindex debugger commands, @code{eval} @cindex @code{eval} debugger command +@cindex evaluate expressions, in debugger @item @code{eval "@var{awk statements}"} Evaluate @var{awk statements} in the context of the running program. You can do anything that an @command{awk} program would do: assign @@ -27727,6 +27838,7 @@ parameters defined by the program. @cindex debugger commands, @code{print} @cindex @code{print} debugger command @cindex @code{p} debugger command (alias for @code{print}) +@cindex print variables, in debugger @item @code{print} @var{var1}[@code{,} @var{var2} @dots{}] @itemx @code{p} @var{var1}[@code{,} @var{var2} @dots{}] Print the value of a @command{gawk} variable or field. @@ -27760,6 +27872,7 @@ No newline is printed unless one is specified. @cindex debugger commands, @code{set} @cindex @code{set} debugger command +@cindex assign values to variables, in debugger @item @code{set} @var{var}@code{=}@var{value} Assign a constant (number or string) value to an @command{awk} variable or field. @@ -27772,6 +27885,7 @@ You can also set special @command{awk} variables, such as @code{FS}, @cindex debugger commands, @code{watch} @cindex @code{watch} debugger command @cindex @code{w} debugger command (alias for @code{watch}) +@cindex set watchpoint @item @code{watch} @var{var} | @code{$}@var{n} [@code{"@var{expression}"}] @itemx @code{w} @var{var} | @code{$}@var{n} [@code{"@var{expression}"}] Add variable @var{var} (or field @code{$@var{n}}) to the watch list. @@ -27788,12 +27902,14 @@ then the debugger stops execution and prompts for a command. Otherwise, @cindex debugger commands, @code{undisplay} @cindex @code{undisplay} debugger command +@cindex stop automatic display, in debugger @item @code{undisplay} [@var{n}] Remove item number @var{n} (or all items, if no argument) from the automatic display list. @cindex debugger commands, @code{unwatch} @cindex @code{unwatch} debugger command +@cindex delete watchpoint @item @code{unwatch} [@var{n}] Remove item number @var{n} (or all items, if no argument) from the watch list. @@ -27814,6 +27930,8 @@ functions which called the one you are in. The commands for doing this are: @cindex debugger commands, @code{backtrace} @cindex @code{backtrace} debugger command @cindex @code{bt} debugger command (alias for @code{backtrace}) +@cindex call stack, display in debugger +@cindex traceback, display in debugger @item @code{backtrace} [@var{count}] @itemx @code{bt} [@var{count}] Print a backtrace of all function calls (stack frames), or innermost @var{count} @@ -27867,25 +27985,32 @@ The value for @var{what} should be one of the following: @c nested table @table @code @item args +@cindex show function arguments, in debugger Arguments of the selected frame. @item break +@cindex show breakpoints List all currently set breakpoints. @item display +@cindex automatic displays, in debugger List all items in the automatic display list. @item frame +@cindex describe call stack frame, in debugger Description of the selected stack frame. @item functions +@cindex list function definitions, in debugger List all function definitions including source file names and line numbers. @item locals +@cindex show local variables, in debugger Local variables of the selected frame. @item source +@cindex show name of current source file, in debugger The name of the current source file. Each time the program stops, the current source file is the file containing the current instruction. When the debugger first starts, the current source file is the first file @@ -27894,12 +28019,15 @@ included via the @option{-f} option. The be used at any time to change the current source. @item sources +@cindex show all source files, in debugger List all program sources. @item variables +@cindex list all global variables, in debugger List all global variables. @item watch +@cindex show watchpoints List all items in the watch list. @end table @end table @@ -27913,6 +28041,8 @@ from a file. The commands are: @cindex debugger commands, @code{option} @cindex @code{option} debugger command @cindex @code{o} debugger command (alias for @code{option}) +@cindex display debugger options +@cindex debugger options @item @code{option} [@var{name}[@code{=}@var{value}]] @itemx @code{o} [@var{name}[@code{=}@var{value}]] Without an argument, display the available debugger options @@ -27924,6 +28054,7 @@ The available options are: @c nested table @table @code @item history_size +@cindex debugger history size The maximum number of lines to keep in the history file @file{./.gawk_history}. The default is 100. @@ -27931,23 +28062,28 @@ The default is 100. The number of lines that @code{list} prints. The default is 15. @item outfile +@cindex redirect @command{gawk} output, in debugger Send @command{gawk} output to a file; debugger output still goes to standard output. An empty string (@code{""}) resets output to standard output. @item prompt +@cindex debugger prompt The debugger prompt. The default is @samp{@w{gawk> }}. @item save_history @r{[}on @r{|} off@r{]} +@cindex debugger history file Save command history to file @file{./.gawk_history}. The default is @code{on}. @item save_options @r{[}on @r{|} off@r{]} +@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. @item trace @r{[}on @r{|} off@r{]} +@cindex instruction tracing, in debugger Turn instruction tracing on or off. The default is @code{off}. @end table @@ -27956,6 +28092,7 @@ Save the commands from the current session to the given file name, so that they can be replayed using the @command{source} command. @item @code{source} @var{filename} +@cindex debugger, read commands from a file Run command(s) from a file; an error in any command does not terminate execution of subsequent commands. Comments (lines starting with @samp{#}) are allowed in a command file. @@ -28088,6 +28225,7 @@ function @var{function}. This command may change the current source file. @cindex debugger commands, @code{quit} @cindex @code{quit} debugger command @cindex @code{q} debugger command (alias for @code{quit}) +@cindex exit the debugger @item @code{quit} @itemx @code{q} Exit the debugger. Debugging is great fun, but sometimes we all have @@ -28111,6 +28249,8 @@ fairly self-explanatory, and using @code{stepi} and @code{nexti} while @node Readline Support @section Readline Support +@cindex command completion, in debugger +@cindex history expansion, in debugger If @command{gawk} is compiled with the @code{readline} library, you can take advantage of that library's command completion and history expansion @@ -28199,8 +28339,6 @@ be added, and of course feel free to try to add them yourself! @cindex multiple precision @cindex infinite precision @cindex floating-point, numbers@comma{} arbitrary precision -@cindex MPFR -@cindex GMP @cindex Knuth, Donald @quotation @@ -28964,6 +29102,8 @@ when you change the rounding mode. @node Gawk and MPFR @section @command{gawk} + MPFR = Powerful Arithmetic +@cindex MPFR +@cindex GMP The rest of this @value{CHAPTER} describes how to use the arbitrary precision (also known as @dfn{multiple precision} or @dfn{infinite precision}) numeric @@ -29068,6 +29208,7 @@ your program. @node Setting Precision @subsection Setting the Working Precision @cindex @code{PREC} variable +@cindex setting working precision @command{gawk} uses a global working precision; it does not keep track of the precision or accuracy of individual numbers. Performing an arithmetic @@ -29143,6 +29284,7 @@ issues that occur because numbers are stored internally in binary. @node Setting Rounding Mode @subsection Setting the Rounding Mode @cindex @code{ROUNDMODE} variable +@cindex setting rounding mode The @code{ROUNDMODE} variable provides program level control over the rounding mode. @@ -29210,6 +29352,7 @@ In the first case, the number is stored with the default precision of 53 bits. @node Changing Precision @subsection Changing the Precision of a Number +@cindex changing precision of a number @cindex Laurie, Dirk @quotation @@ -29328,6 +29471,7 @@ the problem at hand is often the correct approach in such situations. @node Arbitrary Precision Integers @section Arbitrary Precision Integer Arithmetic with @command{gawk} @cindex integers, arbitrary precision +@cindex arbitrary precision integers If one of the options @option{--bignum} or @option{-M} is specified, @command{gawk} performs all @@ -29424,6 +29568,7 @@ gawk -M 'BEGIN @{ n = 13; print n % 2 @}' @node Dynamic Extensions @chapter Writing Extensions for @command{gawk} +@cindex dynamically loaded extensions It is possible to add new functions written in C or C++ to @command{gawk} using dynamically loaded libraries. This facility is available on systems @@ -29458,6 +29603,7 @@ When @option{--sandbox} is specified, extensions are disabled @node Extension Intro @section Introduction +@cindex plug-in An @dfn{extension} (sometimes called a @dfn{plug-in}) is a piece of external compiled code that @command{gawk} can load at runtime to provide additional functionality, over and above the built-in capabilities @@ -29586,6 +29732,7 @@ happen, but we all know how @emph{that} goes.) @node Extension API Description @section API Description +@cindex extension API This (rather large) @value{SECTION} describes the API in detail. @@ -29970,6 +30117,8 @@ value type, as appropriate. This behavior is summarized in @node Memory Allocation Functions @subsection Memory Allocation Functions and Convenience Macros +@cindex allocating memory for extensions +@cindex extensions, allocating memory The API provides a number of @dfn{memory allocation} functions for allocating memory that can be passed to @command{gawk}, as well as a number of @@ -30084,6 +30233,8 @@ pointed to by @code{result}. @node Registration Functions @subsection Registration Functions +@cindex register extension +@cindex extension registration This @value{SECTION} describes the API functions for registering parts of your extension with @command{gawk}. @@ -30205,6 +30356,7 @@ is invoked with the @option{--version} option. @node Input Parsers @subsubsection Customized Input Parsers +@cindex customized input parser By default, @command{gawk} reads text files as its input. It uses the value of @code{RS} to find the end of the record, and then uses @code{FS} @@ -30452,7 +30604,9 @@ Register the input parser pointed to by @code{input_parser} with @node Output Wrappers @subsubsection Customized Output Wrappers +@cindex customized output wrapper +@cindex output wrapper An @dfn{output wrapper} is the mirror image of an input parser. It allows an extension to take over the output to a file opened with the @samp{>} or @samp{>>} I/O redirection operators (@pxref{Redirection}). @@ -30566,6 +30720,7 @@ Register the output wrapper pointed to by @code{output_wrapper} with @node Two-way processors @subsubsection Customized Two-way Processors +@cindex customized two-way processor A @dfn{two-way processor} combines an input parser and an output wrapper for two-way I/O with the @samp{|&} operator (@pxref{Redirection}). It makes identical @@ -30623,6 +30778,8 @@ Register the two-way processor pointed to by @code{two_way_processor} with @node Printing Messages @subsection Printing Messages +@cindex printing messages from extensions +@cindex messages from extensions You can print different kinds of warning messages from your extension, as described below. Note that for these functions, @@ -30696,6 +30853,7 @@ for more information on creating arrays. @node Symbol Table Access @subsection Symbol Table Access +@cindex accessing global variables from extensions Two sets of routines provide access to global variables, and one set allows you to create and release cached values. @@ -30953,6 +31111,7 @@ you should release any cached values that you created, using @node Array Manipulation @subsection Array Manipulation +@cindex array manipulation in extensions The primary data structure@footnote{Okay, the only data structure.} in @command{awk} is the associative array (@pxref{Arrays}). @@ -31532,6 +31691,8 @@ information about how @command{gawk} was invoked. @node Extension Versioning @subsubsection API Version Constants and Variables +@cindex API version +@cindex extension API version The API provides both a ``major'' and a ``minor'' version number. The API versions are available at compile time as constants: @@ -31585,6 +31746,8 @@ provided in @file{gawkapi.h} (discussed later, in @node Extension API Informational Variables @subsubsection Informational Variables +@cindex API informational variables +@cindex extension API informational variables The API provides access to several variables that describe whether the corresponding command-line options were enabled when @@ -31730,6 +31893,8 @@ the version string with @command{gawk}. @node Finding Extensions @section How @command{gawk} Finds Extensions +@cindex extension search path +@cindex finding extensions Compiled extensions have to be installed in a directory where @command{gawk} can find them. If @command{gawk} is configured and @@ -31740,6 +31905,7 @@ path with a list of directories to search for compiled extensions. @node Extension Example @section Example: Some File Functions +@cindex extension example @quotation @i{No matter where you go, there you are.} @@ -32384,6 +32550,7 @@ $ @kbd{AWKLIBPATH=$PWD gawk -f testff.awk} @node Extension Samples @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 that come in the @command{gawk} distribution. Some of them are intended @@ -33044,6 +33211,8 @@ tries to use @code{nanosleep()} or @code{select()} to implement the delay. @node gawkextlib @section The @code{gawkextlib} Project +@cindex @code{gawkextlib} +@cindex extensions, where to find @cindex @code{gawkextlib} project The @uref{http://sourceforge.net/projects/gawkextlib/, @code{gawkextlib}} diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 9a5c0168..bd604300 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -2037,11 +2037,11 @@ $ @kbd{awk "BEGIN @{ print \"Don't Panic!\" @}"} @print{} Don't Panic! @end example -@cindex quoting -@cindex double quote (@code{"}) -@cindex @code{"} (double quote) -@cindex @code{\} (backslash) -@cindex backslash (@code{\}) +@cindex shell quoting, double quote +@cindex double quote (@code{"}) in shell commands +@cindex @code{"} (double quote) in shell commands +@cindex @code{\} (backslash) in shell commands +@cindex backslash (@code{\}) in shell commands This program does not read any input. The @samp{\} before each of the inner double quotes is necessary because of the shell's quoting rules---in particular because it mixes both single quotes and @@ -2081,8 +2081,7 @@ awk -f @var{source-file} @var{input-file1} @var{input-file2} @dots{} @end example @cindex @option{-f} option -@cindex command line, options -@cindex options, command-line +@cindex command line, option @option{-f} The @option{-f} instructs the @command{awk} utility to get the @command{awk} program from the file @var{source-file}. Any file name can be used for @var{source-file}. For example, you could put the program: @@ -2105,7 +2104,7 @@ does the same thing as this one: awk "BEGIN @{ print \"Don't Panic!\" @}" @end example -@cindex quoting +@cindex quoting in @command{gawk} command lines @noindent This was explained earlier (@pxref{Read Terminal}). @@ -2116,9 +2115,9 @@ program did not have single quotes around it. The quotes are only needed for programs that are provided on the @command{awk} command line. @c STARTOFRANGE sq1x -@cindex single quote (@code{'}) +@cindex single quote (@code{'}) in @command{gawk} command lines @c STARTOFRANGE qs2x -@cindex @code{'} (single quote) +@cindex @code{'} (single quote) in @command{gawk} command lines If you want to clearly identify your @command{awk} program files as such, you can add the extension @file{.awk} to the file name. This doesn't affect the execution of the @command{awk} program but it does make @@ -2228,7 +2227,7 @@ programs, but this usually isn't very useful; the purpose of a comment is to help you or another person understand the program when reading it at a later time. -@cindex quoting +@cindex quoting, for small awk programs @cindex single quote (@code{'}), vs.@: apostrophe @cindex @code{'} (single quote), vs.@: apostrophe @quotation CAUTION @@ -2269,7 +2268,7 @@ The next @value{SUBSECTION} describes the shell's quoting rules. @node Quoting @subsection Shell-Quoting Issues -@cindex quoting, rules for +@cindex shell quoting, rules for @menu * DOS Quoting:: Quoting in Windows Batch Files. @@ -2304,10 +2303,10 @@ that character. The shell removes the backslash and passes the quoted character on to the command. @item -@cindex @code{\} (backslash) -@cindex backslash (@code{\}) -@cindex single quote (@code{'}) -@cindex @code{'} (single quote) +@cindex @code{\} (backslash), in shell commands +@cindex backslash (@code{\}), in shell commands +@cindex single quote (@code{'}), in shell commands +@cindex @code{'} (single quote), in shell commands Single quotes protect everything between the opening and closing quotes. The shell does no interpretation of the quoted text, passing it on verbatim to the command. @@ -2317,8 +2316,8 @@ Refer back to for an example of what happens if you try. @item -@cindex double quote (@code{"}) -@cindex @code{"} (double quote) +@cindex double quote (@code{"}), in shell commands +@cindex @code{"} (double quote), in shell commands Double quotes protect most things between the opening and closing quotes. The shell does at least variable and command substitution on the quoted text. Different shells may do additional kinds of processing on double-quoted text. @@ -2355,7 +2354,7 @@ awk -F "" '@var{program}' @var{files} # correct @end example @noindent -@cindex null strings, quoting and +@cindex null strings in @command{gawk} arguments, quoting and Don't use this: @example @@ -2368,7 +2367,7 @@ as the value of @code{FS}, and the first file name as the text of the program! This results in syntax errors at best, and confusing behavior at worst. @end itemize -@cindex quoting, tricks for +@cindex quoting in @command{gawk} command lines, tricks for Mixing single and double quotes is difficult. You have to resort to shell quoting tricks, like this: @@ -3250,6 +3249,7 @@ Print the short version of the General Public License and then exit. @itemx --dump-variables@r{[}=@var{file}@r{]} @cindex @option{-d} option @cindex @option{--dump-variables} option +@cindex dump all variables of a program @cindex @file{awkvars.out} file @cindex files, @file{awkvars.out} @cindex variables, global, printing list of @@ -3403,7 +3403,7 @@ care to search for all occurrences of each inappropriate construct. As @cindex @option{--bignum} option Force arbitrary precision arithmetic on numbers. This option has no effect if @command{gawk} is not compiled to use the GNU MPFR and MP libraries -(@pxref{Arbitrary Precision Arithmetic}). +(@pxref{Gawk and MPFR}). @item -n @itemx --non-decimal-data @@ -3656,6 +3656,7 @@ file at all. @cindex @command{gawk}, @code{ARGIND} variable in @cindex @code{ARGIND} variable, command-line arguments +@cindex @code{ARGV} array, indexing into @cindex @code{ARGC}/@code{ARGV} variables, command-line arguments All these arguments are made available to your @command{awk} program in the @code{ARGV} array (@pxref{Built-in Variables}). Command-line options @@ -3666,6 +3667,7 @@ sets the variable @code{ARGIND} to the index in @code{ARGV} of the current element. @cindex input files, variable assignments and +@cindex variable assignments and input files The distinction between file name arguments and variable-assignment arguments is made when @command{awk} is about to open the next input file. At that point in execution, it checks the file name to see whether @@ -3743,6 +3745,7 @@ this file name itself.) @node Environment Variables @section The Environment Variables @command{gawk} Uses +@cindex environment variables used by @command{gawk} A number of environment variables influence how @command{gawk} behaves. @@ -3758,8 +3761,7 @@ behaves. @node AWKPATH Variable @subsection The @env{AWKPATH} Environment Variable @cindex @env{AWKPATH} environment variable -@cindex directories, searching -@cindex search paths +@cindex directories, searching for source files @cindex search paths, for source files @cindex differences in @command{awk} and @command{gawk}, @code{AWKPATH} environment variable @ifinfo @@ -3771,12 +3773,12 @@ implementations, you must supply a precise path name for each program file, unless the file is in the current directory. But in @command{gawk}, if the file name supplied to the @option{-f} or @option{-i} options -does not contain a @samp{/}, then @command{gawk} searches a list of +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 file with the specified name. The search path is a string consisting of directory names -separated by colons. @command{gawk} gets its search path from the +separated by colons@footnote{Semicolons on MS-Windows and MS-DOS.}. @command{gawk} gets its search path from the @env{AWKPATH} environment variable. If that variable does not exist, @command{gawk} uses a default path, @samp{.:/usr/local/share/awk}.@footnote{Your version of @command{gawk} @@ -3834,8 +3836,7 @@ found, and @command{gawk} no longer needs to use @env{AWKPATH}. @node AWKLIBPATH Variable @subsection The @env{AWKLIBPATH} Environment Variable @cindex @env{AWKLIBPATH} environment variable -@cindex directories, searching -@cindex search paths +@cindex directories, searching for shared libraries @cindex search paths, for shared libraries @cindex differences in @command{awk} and @command{gawk}, @code{AWKLIBPATH} environment variable @@ -4120,7 +4121,6 @@ they will @emph{not} be in the next release). @c update this section for each release! -@cindex @code{PROCINFO} array The process-related special files @file{/dev/pid}, @file{/dev/ppid}, @file{/dev/pgrpid}, and @file{/dev/user} were deprecated in @command{gawk} 3.1, but still worked. As of version 4.0, they are no longer @@ -4205,7 +4205,7 @@ long-undocumented ``feature'' of Unix @code{awk}. @node Regexp @chapter Regular Expressions -@cindex regexp, See regular expressions +@cindex regexp @c STARTOFRANGE regexp @cindex regular expressions @@ -4214,8 +4214,8 @@ set of strings. Because regular expressions are such a fundamental part of @command{awk} programming, their format and use deserve a separate @value{CHAPTER}. -@cindex forward slash (@code{/}) -@cindex @code{/} (forward slash) +@cindex forward slash (@code{/}) to enclose regular expressions +@cindex @code{/} (forward slash) to enclose regular expressions A regular expression enclosed in slashes (@samp{/}) is an @command{awk} pattern that matches every input record whose text belongs to that set. @@ -4271,9 +4271,9 @@ $ @kbd{awk '/li/ @{ print $2 @}' mail-list} @cindex @code{!} (exclamation point), @code{!~} operator @cindex exclamation point (@code{!}), @code{!~} operator @c @cindex operators, @code{!~} -@cindex @code{if} statement -@cindex @code{while} statement -@cindex @code{do}-@code{while} statement +@cindex @code{if} statement, use of regexps in +@cindex @code{while} statement, use of regexps in +@cindex @code{do}-@code{while} statement, use of regexps in @c @cindex statements, @code{if} @c @cindex statements, @code{while} @c @cindex statements, @code{do} @@ -4332,6 +4332,7 @@ $ @kbd{awk '$1 !~ /J/' inventory-shipped} @end example @cindex regexp constants +@cindex constant regexps @cindex regular expressions, constants, See regexp constants When a regexp is enclosed in slashes, such as @code{/foo/}, we call it a @dfn{regexp constant}, much like @code{5.27} is a numeric constant and @@ -4340,7 +4341,7 @@ a @dfn{regexp constant}, much like @code{5.27} is a numeric constant and @node Escape Sequences @section Escape Sequences -@cindex escape sequences +@cindex escape sequences, in strings @cindex backslash (@code{\}), in escape sequences @cindex @code{\} (backslash), in escape sequences Some characters cannot be included literally in string constants @@ -4551,6 +4552,7 @@ escape sequences literally when used in regexp constants. Thus, @section Regular Expression Operators @c STARTOFRANGE regexpo @cindex regular expressions, operators +@cindex metacharacters in regular expressions You can combine regular expressions with special characters, called @dfn{regular expression operators} or @dfn{metacharacters}, to @@ -4569,8 +4571,8 @@ Here is a list of metacharacters. All characters that are not escape sequences and that are not listed in the table stand for themselves: @table @code -@cindex backslash (@code{\}) -@cindex @code{\} (backslash) +@cindex backslash (@code{\}), regexp operator +@cindex @code{\} (backslash), regexp operator @item \ This is used to suppress the special meaning of a character when matching. For example, @samp{\$} @@ -4608,8 +4610,8 @@ The condition in the following example is not true: if ("line1\nLINE 2" ~ /1$/) @dots{} @end example -@cindex @code{.} (period) -@cindex period (@code{.}) +@cindex @code{.} (period), regexp operator +@cindex period (@code{.}), regexp operator @item . @r{(period)} This matches any single character, @emph{including} the newline character. For example, @samp{.P} @@ -4625,8 +4627,8 @@ character, which is a character with all bits equal to zero. Otherwise, @sc{nul} is just another character. Other versions of @command{awk} may not be able to match the @sc{nul} character. -@cindex @code{[]} (square brackets) -@cindex square brackets (@code{[]}) +@cindex @code{[]} (square brackets), regexp operator +@cindex square brackets (@code{[]}), regexp operator @cindex bracket expressions @cindex character sets, See Also bracket expressions @cindex character lists, See bracket expressions @@ -4713,7 +4715,7 @@ This symbol is similar to @samp{*}, except that the preceding expression can be matched either once or not at all. For example, @samp{fe?d} matches @samp{fed} and @samp{fd}, but nothing else. -@cindex interval expressions +@cindex interval expressions, regexp operator @item @{@var{n}@} @itemx @{@var{n},@} @itemx @{@var{n},@var{m}@} @@ -4790,6 +4792,7 @@ expressions are not available in regular expressions. @cindex bracket expressions @cindex bracket expressions, range expressions @cindex range expressions (regexps) +@cindex character lists in regular expression As mentioned earlier, a bracket expression matches any character amongst those listed between the opening and closing square brackets. @@ -5053,7 +5056,7 @@ lesser of two evils. @c @c Should really do this with file inclusion. @cindex regular expressions, @command{gawk}, command-line options -@cindex @command{gawk}, command-line options +@cindex @command{gawk}, command-line options, and regular expressions The various command-line options (@pxref{Options}) control how @command{gawk} interprets characters in regexps: @@ -5132,7 +5135,7 @@ This works in any POSIX-compliant @command{awk}. @cindex tilde (@code{~}), @code{~} operator @cindex @code{!} (exclamation point), @code{!~} operator @cindex exclamation point (@code{!}), @code{!~} operator -@cindex @code{IGNORECASE} variable +@cindex @code{IGNORECASE} variable, @code{~} and @code{!~} operators @cindex @command{gawk}, @code{IGNORECASE} variable in @c @cindex variables, @code{IGNORECASE} Another method, specific to @command{gawk}, is to set the variable @@ -5353,6 +5356,7 @@ occur often in practice, but it's worth noting for future reference. @chapter Reading Input Files @c STARTOFRANGE infir +@cindex reading input files @cindex input files, reading @cindex input files @cindex @code{FILENAME} variable @@ -5439,7 +5443,6 @@ To do this, use the special @code{BEGIN} pattern (@pxref{BEGIN/END}). For example: -@cindex @code{BEGIN} pattern @example awk 'BEGIN @{ RS = "u" @} @{ print $0 @}' mail-list @@ -5555,6 +5558,7 @@ Reaching the end of an input file terminates the current input record, even if the last character in the file is not the character in @code{RS}. @value{DARKCORNER} +@cindex empty strings @cindex null strings @cindex strings, empty, See null strings The empty string @code{""} (a string without any characters) @@ -5686,7 +5690,7 @@ character as a record separator. However, this is a special case: @command{mawk} does not allow embedded @sc{nul} characters in strings. @cindex records, treating files as -@cindex files, as single records +@cindex treating files, as single records The best way to treat a whole file as a single record is to simply read the file in, one record at a time, concatenating each record onto the end of the previous ones. @@ -6301,10 +6305,8 @@ behaves this way. @node Command Line Field Separator @subsection Setting @code{FS} from the Command Line -@cindex @option{-F} option -@cindex options, command-line -@cindex command line, options -@cindex field separators, on command line +@cindex @option{-F} option, command line +@cindex field separator, on command line @cindex command line, @code{FS} on@comma{} setting @cindex @code{FS} variable, setting from command line @@ -6464,7 +6466,7 @@ POSIX standard.) @sidebar Changing @code{FS} Does Not Affect the Fields @cindex POSIX @command{awk}, field separators and -@cindex field separators, POSIX and +@cindex field separator, POSIX and 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} @@ -6787,6 +6789,7 @@ available for splitting regular strings (@pxref{String Functions}). @node Multiple Line @section Multiple-Line Records +@cindex multiple-line records @c STARTOFRANGE recm @cindex records, multiline @c STARTOFRANGE imr @@ -6838,7 +6841,8 @@ after the last record, the final newline is removed from the record. In the second case, this special processing is not done. @value{DARKCORNER} -@cindex field separators, in multiline records +@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 of the lines into fields in the normal manner. This happens by default @@ -6986,7 +6990,7 @@ and study the @code{getline} command @emph{after} you have reviewed the rest of this @value{DOCUMENT} and have a good knowledge of how @command{awk} works. @cindex @command{gawk}, @code{ERRNO} variable in -@cindex @code{ERRNO} variable +@cindex @code{ERRNO} variable, with @command{getline} command @cindex differences in @command{awk} and @command{gawk}, @code{getline} command @cindex @code{getline} command, return values @cindex @option{--sandbox} option, input redirection with @code{getline} @@ -7082,6 +7086,7 @@ rule in the program. @xref{Next Statement}. @node Getline/Variable @subsection Using @code{getline} into a Variable +@cindex @code{getline} into a variable @cindex variables, @code{getline} command into@comma{} using You can use @samp{getline @var{var}} to read the next record from @@ -7133,6 +7138,7 @@ the value of @code{NF} do not change. @node Getline/File @subsection Using @code{getline} from a File +@cindex @code{getline} from a file @cindex input redirection @cindex redirection of input @cindex @code{<} (left angle bracket), @code{<} operator (I/O) @@ -7181,8 +7187,6 @@ from the file @var{file}, and put it in the variable @var{var}. As above, @var{file} is a string-valued expression that specifies the file from which to read. -@cindex @command{gawk}, @code{RT} variable in -@cindex @code{RT} variable In this version of @code{getline}, none of the built-in variables are changed and the record is not split into fields. The only variable changed is @var{var}.@footnote{This is not quite true. @code{RT} could @@ -7207,7 +7211,6 @@ Note here how the name of the extra input file is not built into the program; it is taken directly from the data, specifically from the second field on the @samp{@@include} line. -@cindex @code{close()} function The @code{close()} function is called to ensure that if two identical @samp{@@include} lines appear in the input, the entire specified file is included twice. @@ -7234,7 +7237,7 @@ Failing that, attention to details would be useful.} @cindex @code{|} (vertical bar), @code{|} operator (I/O) @cindex vertical bar (@code{|}), @code{|} operator (I/O) @cindex input pipeline -@cindex pipes, input +@cindex pipe, input @cindex operators, input/output The output of a command can also be piped into @code{getline}, using @samp{@var{command} | getline}. In @@ -7258,7 +7261,6 @@ produced by running the rest of the line as a shell command: @end example @noindent -@cindex @code{close()} function The @code{close()} function is called to ensure that if two identical @samp{@@execute} lines appear in the input, the command is run for each one. @@ -8535,7 +8537,7 @@ appended to the file. If @var{output-file} does not exist, then it is created. @cindex @code{|} (vertical bar), @code{|} operator (I/O) -@cindex pipes, output +@cindex pipe, output @cindex output, pipes @item print @var{items} | @var{command} It is possible to send output to another program through a pipe @@ -8872,7 +8874,7 @@ Doing so results in unpredictable behavior. @c STARTOFRANGE ofc @cindex output, files@comma{} closing @c STARTOFRANGE pc -@cindex pipes, closing +@cindex pipe, closing @c STARTOFRANGE cc @cindex coprocesses, closing @cindex @code{getline} command, coprocesses@comma{} using from @@ -8975,6 +8977,7 @@ a separate message. @cindex differences in @command{awk} and @command{gawk}, @code{close()} function @cindex portability, @code{close()} function and +@cindex @code{close()} function, portability If you use more files than the system allows you to have open, @command{gawk} attempts to multiplex the available open files among your data files. @command{gawk}'s ability to do this depends upon the @@ -9054,7 +9057,7 @@ retval = close(command) # syntax error in many Unix awks @end example @cindex @command{gawk}, @code{ERRNO} variable in -@cindex @code{ERRNO} variable +@cindex @code{ERRNO} variable, with @command{close()} function @command{gawk} treats @code{close()} as a function. The return value is @minus{}1 if the argument names something that was never opened with a redirection, or if there is @@ -9153,7 +9156,8 @@ have different forms, but are stored identically internally. @node Scalar Constants @subsubsection Numeric and String Constants -@cindex numeric, constants +@cindex constants, numeric +@cindex numeric constants A @dfn{numeric constant} stands for a number. This number can be an integer, a decimal fraction, or a number in scientific (exponential) notation.@footnote{The internal representation of all numbers, @@ -9179,7 +9183,7 @@ double-quotation marks. For example: @noindent @cindex differences in @command{awk} and @command{gawk}, strings -@cindex strings, length of +@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). @@ -11626,6 +11630,8 @@ programmers. @node Using BEGIN/END @subsubsection Startup and Cleanup Actions +@cindex @code{BEGIN} pattern +@cindex @code{END} pattern A @code{BEGIN} rule is executed once only, before the first input record is read. Likewise, an @code{END} rule is executed once only, after all the input is read. For example: @@ -11769,7 +11775,7 @@ you can bypass the fatal error and move on to the next file on the command line. @cindex @command{gawk}, @code{ERRNO} variable in -@cindex @code{ERRNO} variable +@cindex @code{ERRNO} variable, with @code{BEGINFILE} pattern @cindex @code{nextfile} statement, @code{BEGINFILE}/@code{ENDFILE} patterns and You do this by checking if the @code{ERRNO} variable is not the empty string; if so, then @command{gawk} was not able to open the file. In @@ -12878,8 +12884,8 @@ is to simply say @samp{FS = FS}, perhaps with an explanatory comment. @cindex @command{gawk}, @code{IGNORECASE} variable in @cindex @code{IGNORECASE} variable @cindex differences in @command{awk} and @command{gawk}, @code{IGNORECASE} variable -@cindex case sensitivity, string comparisons and -@cindex case sensitivity, regexps and +@cindex case sensitivity, and string comparisons +@cindex case sensitivity, and regexps @cindex regular expressions, case sensitivity @item IGNORECASE # If @code{IGNORECASE} is nonzero or non-null, then all string comparisons @@ -13096,7 +13102,7 @@ or if @command{gawk} is in compatibility mode it is not special. @cindex @code{ENVIRON} array -@cindex environment variables +@cindex environment variables, in @code{ENVIRON} array @item ENVIRON An associative array containing the values of the environment. The array indices are the environment variable names; the elements are the values of @@ -13211,10 +13217,12 @@ The following elements (listed alphabetically) are guaranteed to be available: @table @code +@cindex effective group id of @command{gawk} user @item PROCINFO["egid"] The value of the @code{getegid()} system call. @item PROCINFO["euid"] +@cindex effective user id of @command{gawk} user The value of the @code{geteuid()} system call. @item PROCINFO["FS"] @@ -13224,6 +13232,7 @@ This is 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. For each identifier, the value of the element is one of the following: @@ -13252,15 +13261,19 @@ after it has finished parsing the program; they are @emph{not} updated while the program runs. @item PROCINFO["gid"] +@cindex group id of @command{gawk} user The value of the @code{getgid()} system call. @item PROCINFO["pgrpid"] +@cindex process group id of @command{gawk} process The process group ID of the current process. @item PROCINFO["pid"] +@cindex process id of @command{gawk} process The process ID of the current process. @item PROCINFO["ppid"] +@cindex parent process id of @command{gawk} process The parent process ID of the current process. @item PROCINFO["sorted_in"] @@ -13280,25 +13293,31 @@ Assigning a new value to this element changes the default. The value of the @code{getuid()} system call. @item PROCINFO["version"] +@cindex version of @command{gawk} +@cindex @command{gawk} version The version of @command{gawk}. @end table The following additional elements in the array are available to provide information about the MPFR and GMP libraries if your version of @command{gawk} supports arbitrary precision numbers -(@pxref{Arbitrary Precision Arithmetic}): +(@pxref{Gawk and MPFR}): @table @code +@cindex version of GNU MPFR library @item PROCINFO["mpfr_version"] The version of the GNU MPFR library. @item PROCINFO["gmp_version"] +@cindex version of GNU MP library The version of the GNU MP library. @item PROCINFO["prec_max"] +@cindex maximum precision supported by MPFR library The maximum precision supported by MPFR. @item PROCINFO["prec_min"] +@cindex minimum precision supported by MPFR library The minimum precision required by MPFR. @end table @@ -13309,12 +13328,15 @@ of @command{gawk} supports dynamic loading of extension functions @table @code @item PROCINFO["api_major"] +@cindex version of @command{gawk} extension API +@cindex extension API, version number The major version of the extension API. @item PROCINFO["api_minor"] The minor version of the extension API. @end table +@cindex supplementary groups of @command{gawk} process On some systems, there may be elements in the array, @code{"group1"} through @code{"group@var{N}"} for some @var{N}. @var{N} is the number of supplementary groups that the process has. Use the @code{in} operator @@ -13322,7 +13344,7 @@ to test for these elements (@pxref{Reference to Elements}). @cindex @command{gawk}, @code{PROCINFO} array in -@cindex @code{PROCINFO} array +@cindex @code{PROCINFO} array, uses The @code{PROCINFO} array has the following additional uses: @itemize @bullet @@ -13462,7 +13484,7 @@ changed. @node ARGC and ARGV @subsection Using @code{ARGC} and @code{ARGV} -@cindex @code{ARGC}/@code{ARGV} variables +@cindex @code{ARGC}/@code{ARGV} variables, how to use @cindex arguments, command-line @cindex command line, arguments @@ -13607,7 +13629,7 @@ ability to support true multidimensional arrays. @cindex variables, names of @cindex functions, names of -@cindex arrays, names of +@cindex arrays, names of, and names of functions/variables @cindex names, arrays/variables @cindex namespace issues @command{awk} maintains a single set @@ -13783,10 +13805,9 @@ Here, the number @code{1} isn't double-quoted, since @command{awk} automatically converts it to a string. @cindex @command{gawk}, @code{IGNORECASE} variable in -@cindex @code{IGNORECASE} variable @cindex case sensitivity, array indices and -@cindex arrays, @code{IGNORECASE} variable and -@cindex @code{IGNORECASE} variable, array subscripts and +@cindex arrays, and @code{IGNORECASE} variable +@cindex @code{IGNORECASE} variable, and array indices The value of @code{IGNORECASE} has no effect upon array subscripting. The identical string value used to store an array element must be used to retrieve it. @@ -13802,8 +13823,9 @@ is independent of the number of elements in the array. @node Reference to Elements @subsection Referring to an Array Element -@cindex arrays, elements, referencing -@cindex elements in arrays +@cindex arrays, referencing elements +@cindex array members +@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: @@ -13820,11 +13842,16 @@ 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 of array @code{foo} at index @samp{4.3}. +@cindex arrays, unassigned elements +@cindex unassigned array elements +@cindex empty array elements A reference to an array element that has no recorded value yields a value of @code{""}, the null string. This includes elements that have not been assigned any value as well as elements that have been deleted (@pxref{Delete}). +@cindex non-existent array elements +@cindex arrays, elements that don't exist @quotation NOTE A reference to an element that does not exist @emph{automatically} creates that array element, with the null string as its value. (In some cases, @@ -13844,7 +13871,7 @@ if it didn't exist before! @end quotation @c @cindex arrays, @code{in} operator and -@cindex @code{in} operator +@cindex @code{in} operator, testing if array element exists To determine whether an element exists in an array at a certain index, use the following expression: @@ -13879,8 +13906,8 @@ if (frequencies[2] != "") @node Assigning Elements @subsection Assigning Array Elements -@cindex arrays, elements, assigning -@cindex elements in arrays, assigning +@cindex arrays, elements, assigning values +@cindex elements in arrays, assigning values Array elements can be assigned values just like @command{awk} variables: @@ -13897,6 +13924,7 @@ assign to that element of the array. @node Array Example @subsection Basic Array Example +@cindex arrays, an example of using 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 @@ -13966,6 +13994,7 @@ END @{ @node Scanning an Array @subsection Scanning All Elements of an Array @cindex elements in arrays, scanning +@cindex scanning arrays @cindex arrays, scanning @cindex loops, @code{for}, array scanning @@ -13984,7 +14013,7 @@ for (@var{var} in @var{array}) @end example @noindent -@cindex @code{in} operator +@cindex @code{in} operator, use in loops This loop executes @var{body} once for each index in @var{array} that the program has previously used, with the variable @var{var} set to that index. @@ -14023,8 +14052,9 @@ END @{ @xref{Word Sorting}, for a more detailed example of this type. -@cindex arrays, elements, order of -@cindex elements in arrays, order of +@cindex arrays, elements, order of access by @code{in} operator +@cindex elements in arrays, order of access by @code{in} operator +@cindex @code{in} operator, order of array access The order in which elements of the array are accessed by this statement is determined by the internal arrangement of the array elements within @command{awk} and normally cannot be controlled or changed. This can lead to @@ -14042,6 +14072,8 @@ determines the order in which the array is traversed. This order is usually based on the internal implementation of arrays and will vary from one version of @command{awk} to the next. +@cindex array scanning order, controlling +@cindex controlling array scanning order 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.'' @@ -14058,6 +14090,7 @@ to use for comparison of array elements. This advanced feature is described later, in @ref{Array Sorting}. @end itemize +@cindex @code{PROCINFO}, values of @code{sorted_in} The following special values for @code{PROCINFO["sorted_in"]} are available: @table @code @@ -14218,7 +14251,7 @@ if (4 in foo) print "This will never be printed" @end example -@cindex null strings, array elements and +@cindex null strings, and deleting array elements It is important to note that deleting an element is @emph{not} the same as assigning it a null value (the empty string, @code{""}). For example: @@ -14240,6 +14273,7 @@ is not in the array is deleted. @cindex extensions, common@comma{} @code{delete} to delete entire arrays @cindex arrays, deleting entire contents @cindex deleting entire arrays +@cindex @code{delete} @var{array} @cindex differences in @command{awk} and @command{gawk}, array elements, deleting All the elements of an array may be deleted with a single statement by leaving off the subscript in the @code{delete} statement, @@ -14297,9 +14331,9 @@ a = 3 @section Using Numbers to Subscript Arrays @cindex numbers, as array subscripts -@cindex arrays, subscripts +@cindex arrays, numeric subscripts @cindex subscripts in arrays, numbers as -@cindex @code{CONVFMT} variable, array subscripts and +@cindex @code{CONVFMT} variable, and array subscripts An important aspect to remember about arrays is that @emph{array subscripts are always strings}. When a numeric value is used as a subscript, it is converted to a string value before being used for subscripting @@ -14329,7 +14363,8 @@ string value from @code{xyz}---this time @code{"12.15"}---because the value of @code{CONVFMT} only allows two significant digits. This test fails, since @code{"12.15"} is different from @code{"12.153"}. -@cindex converting, during subscripting +@cindex converting integer array subscripts +@cindex integer array indices According to the rules for conversions (@pxref{Conversion}), integer values are always converted to strings as integers, no matter what the @@ -14435,7 +14470,7 @@ languages, including @command{awk}) to refer to an element of a two-dimensional array named @code{grid} is with @code{grid[@var{x},@var{y}]}. -@cindex @code{SUBSEP} variable, multidimensional arrays +@cindex @code{SUBSEP} variable, and multidimensional arrays Multidimensional arrays are supported in @command{awk} through concatenation of indices into one string. @command{awk} converts the indices into strings @@ -14467,6 +14502,7 @@ combined strings that are ambiguous. Suppose that @code{SUBSEP} is "b@@c"]}} are indistinguishable because both are actually stored as @samp{foo["a@@b@@c"]}. +@cindex @code{in} operator, index existence in multidimensional arrays To test whether a particular index sequence exists in a multidimensional array, use the same operator (@code{in}) that is used for single dimensional arrays. Write the whole sequence of indices @@ -14532,6 +14568,7 @@ multidimensional @emph{way of accessing} an array. @cindex subscripts in arrays, multidimensional, scanning @cindex arrays, multidimensional, scanning +@cindex scanning multidimensional arrays However, if your program has an array that is always accessed as multidimensional, you can get the effect of scanning it by combining the scanning @code{for} statement @@ -14573,6 +14610,7 @@ separate indices is recovered. @node Arrays of Arrays @section Arrays of Arrays +@cindex arrays of arrays @command{gawk} goes beyond standard @command{awk}'s multidimensional array access and provides true arrays of @@ -14832,6 +14870,7 @@ two arguments 11 and 10. @node Numeric Functions @subsection Numeric Functions +@cindex numeric functions The following list describes all of the built-in functions that work with numbers. @@ -14840,21 +14879,25 @@ Optional parameters are enclosed in square brackets@w{ ([ ]):} @table @code @item atan2(@var{y}, @var{x}) @cindex @code{atan2()} function +@cindex arctangent Return the arctangent of @code{@var{y} / @var{x}} in radians. You can use @samp{pi = atan2(0, -1)} to retrieve the value of @value{PI}. @item cos(@var{x}) @cindex @code{cos()} function +@cindex cosine Return the cosine of @var{x}, with @var{x} in radians. @item exp(@var{x}) @cindex @code{exp()} function +@cindex exponent Return the exponential of @var{x} (@code{e ^ @var{x}}) or report an error if @var{x} is out of range. The range of values @var{x} can have depends on your machine's floating-point representation. @item int(@var{x}) @cindex @code{int()} function +@cindex round to nearest integer Return the nearest integer to @var{x}, located between @var{x} and zero and truncated toward zero. @@ -14863,6 +14906,7 @@ is @minus{}3, and @code{int(-3)} is @minus{}3 as well. @item log(@var{x}) @cindex @code{log()} function +@cindex logarithm Return the natural logarithm of @var{x}, if @var{x} is positive; otherwise, report an error. @@ -14909,7 +14953,7 @@ function roll(n) @{ return 1 + int(rand() * n) @} @} @end example -@cindex numbers, random +@cindex seeding random number generator @cindex random numbers, seed of @quotation CAUTION In most @command{awk} implementations, including @command{gawk}, @@ -14926,10 +14970,12 @@ use @code{srand()}. @item sin(@var{x}) @cindex @code{sin()} function +@cindex sine Return the sine of @var{x}, with @var{x} in radians. @item sqrt(@var{x}) @cindex @code{sqrt()} function +@cindex square root Return the positive square root of @var{x}. @command{gawk} prints a warning message if @var{x} is negative. Thus, @code{sqrt(4)} is 2. @@ -14965,6 +15011,7 @@ sequences of random numbers. @node String Functions @subsection String-Manipulation Functions +@cindex string-manipulation functions The functions in this @value{SECTION} look at or change the text of one or more strings. @@ -14994,10 +15041,10 @@ pound sign@w{ (@samp{#}):} @item asort(@var{source} @r{[}, @var{dest} @r{[}, @var{how} @r{]} @r{]}) # @itemx asorti(@var{source} @r{[}, @var{dest} @r{[}, @var{how} @r{]} @r{]}) # @cindex @code{asorti()} function (@command{gawk}) +@cindex sort array @cindex arrays, elements, retrieving number of @cindex @code{asort()} function (@command{gawk}) -@cindex @command{gawk}, @code{IGNORECASE} variable in -@cindex @code{IGNORECASE} variable +@cindex sort array indices These two functions are similar in behavior, so they are described together. @@ -15015,7 +15062,9 @@ sequential integers starting with one. If the optional array @var{dest} is specified, then @var{source} is duplicated into @var{dest}. @var{dest} is then sorted, leaving the indices of @var{source} unchanged. -When comparing strings, @code{IGNORECASE} affects the sorting. If the +@cindex @command{gawk}, @code{IGNORECASE} variable in +When comparing strings, @code{IGNORECASE} affects the sorting +(@pxref{Array Sorting Functions}). If the @var{source} array contains subarrays as values (@pxref{Arrays of Arrays}), they will come last, after all scalar values. @@ -15059,6 +15108,8 @@ are not available in compatibility mode (@pxref{Options}). @item gensub(@var{regexp}, @var{replacement}, @var{how} @r{[}, @var{target}@r{]}) # @cindex @code{gensub()} function (@command{gawk}) +@cindex search and replace in strings +@cindex substitute in string Search the target string @var{target} for matches of the regular expression @var{regexp}. If @var{how} is a string beginning with @samp{g} or @samp{G} (short for ``global''), then replace all matches of @var{regexp} with @@ -15067,7 +15118,7 @@ which match of @var{regexp} to replace. If no @var{target} is supplied, use @code{$0}. It returns the modified string as the result of the function and the original target string is @emph{not} changed. -@code{gensub()} is a general substitution function. It's purpose is +@code{gensub()} is a general substitution function. Its purpose is to provide more features than the standard @code{sub()} and @code{gsub()} functions. @@ -15144,7 +15195,8 @@ and the third argument must be assignable. @item index(@var{in}, @var{find}) @cindex @code{index()} function -@cindex searching +@cindex search in string +@cindex find substring in string Search the string @var{in} for the first occurrence of the string @var{find}, and return the position in characters where that occurrence begins in the string @var{in}. Consider the following example: @@ -15162,6 +15214,8 @@ It is a fatal error to use a regexp constant for @var{find}. @item length(@r{[}@var{string}@r{]}) @cindex @code{length()} function +@cindex string length +@cindex length of string Return the number of characters in @var{string}. If @var{string} is a number, the length of the digit string representing that number is returned. For example, @code{length("abcde")} is five. By @@ -15169,6 +15223,8 @@ contrast, @code{length(15 * 35)} works out to three. In this example, 15 * 35 = 525, and 525 is then converted to the string @code{"525"}, which has three characters. +@cindex length of input record +@cindex input record, length of If no argument is supplied, @code{length()} returns the length of @code{$0}. @c @cindex historical features @@ -15207,6 +15263,8 @@ warning about this. @cindex common extensions, @code{length()} applied to an array @cindex extensions, common@comma{} @code{length()} applied to an array @cindex differences between @command{gawk} and @command{awk} +@cindex number of array elements +@cindex array, number of elements With @command{gawk} and several other @command{awk} implementations, when given an array argument, the @code{length()} function returns the number of elements in the array. @value{COMMONEXT} @@ -15221,6 +15279,8 @@ If @option{--posix} is supplied, using an array argument is a fatal error @item match(@var{string}, @var{regexp} @r{[}, @var{array}@r{]}) @cindex @code{match()} function +@cindex string, regular expression match +@cindex match regexp in string Search @var{string} for the longest, leftmost substring matched by the regular expression, @var{regexp} and return the character position, or @dfn{index}, @@ -15336,6 +15396,7 @@ using a third argument is a fatal error. @item patsplit(@var{string}, @var{array} @r{[}, @var{fieldpat} @r{[}, @var{seps} @r{]} @r{]}) # @cindex @code{patsplit()} function (@command{gawk}) +@cindex split string into array Divide @var{string} into pieces defined by @var{fieldpat} and store the pieces in @var{array} and the separator strings in the @@ -15395,7 +15456,7 @@ split("cul-de-sac", a, "-", seps) @end example @noindent -@cindex strings, splitting +@cindex strings splitting, example splits the string @samp{cul-de-sac} into three fields using @samp{-} as the separator. It sets the contents of the array @code{a} as follows: @@ -15452,6 +15513,7 @@ If @var{string} does not match @var{fieldsep} at all (but is not null), @item sprintf(@var{format}, @var{expression1}, @dots{}) @cindex @code{sprintf()} function +@cindex formatting strings Return (without printing) the string that @code{printf} would have printed out with the same arguments (@pxref{Printf}). @@ -15465,6 +15527,7 @@ pival = sprintf("pi = %.2f (approx.)", 22/7) assigns the string @w{@samp{pi = 3.14 (approx.)}} to the variable @code{pival}. @cindex @code{strtonum()} function (@command{gawk}) +@cindex convert string to number @item strtonum(@var{str}) # Examine @var{str} and return its numeric value. If @var{str} begins with a leading @samp{0}, @code{strtonum()} assumes that @var{str} @@ -15492,6 +15555,7 @@ in compatibility mode (@pxref{Options}). @item sub(@var{regexp}, @var{replacement} @r{[}, @var{target}@r{]}) @cindex @code{sub()} function +@cindex replace in string Search @var{target}, which is treated as a string, for the leftmost, longest substring matched by the regular expression @var{regexp}. Modify the entire string @@ -15592,6 +15656,7 @@ string, and then the value of that string is treated as the regexp to match. @item substr(@var{string}, @var{start} @r{[}, @var{length}@r{]}) @cindex @code{substr()} function +@cindex substring Return a @var{length}-character-long substring of @var{string}, starting at character number @var{start}. The first character of a string is character number one.@footnote{This is different from @@ -15648,9 +15713,10 @@ string = substr(string, 1, 2) "CDE" substr(string, 6) @end example @cindex case sensitivity, converting case -@cindex converting, case +@cindex strings, converting letter case @item tolower(@var{string}) @cindex @code{tolower()} function +@cindex convert string to lower case Return a copy of @var{string}, with each uppercase character in the string replaced with its corresponding lowercase character. Nonalphabetic characters are left unchanged. For example, @@ -15658,6 +15724,7 @@ Nonalphabetic characters are left unchanged. For example, @item toupper(@var{string}) @cindex @code{toupper()} function +@cindex convert string to upper case Return a copy of @var{string}, with each lowercase character in the string replaced with its corresponding uppercase character. Nonalphabetic characters are left unchanged. For example, @@ -16050,6 +16117,7 @@ Although this makes a certain amount of sense, it can be surprising. @node I/O Functions @subsection Input/Output Functions +@cindex input/output functions The following functions relate to input/output (I/O). Optional parameters are enclosed in square brackets ([ ]): @@ -16058,6 +16126,7 @@ Optional parameters are enclosed in square brackets ([ ]): @item close(@var{filename} @r{[}, @var{how}@r{]}) @cindex @code{close()} function @cindex files, closing +@cindex close file or coprocess Close the file @var{filename} for input or output. Alternatively, the argument may be a shell command that was used for creating a coprocess, or for redirecting to or from a pipe; then the coprocess or pipe is closed. @@ -16075,6 +16144,7 @@ which discusses this feature in more detail and gives an example. @item fflush(@r{[}@var{filename}@r{]}) @cindex @code{fflush()} function +@cindex flush buffered output Flush any buffered output associated with @var{filename}, which is either a file opened for writing or a shell command for redirecting output to a pipe or coprocess. @@ -16134,6 +16204,7 @@ In such a case, @code{fflush()} returns @minus{}1, as well. @item system(@var{command}) @cindex @code{system()} function +@cindex invoke shell command @cindex interacting with other programs Execute the operating-system command @var{command} and then return to the @command{awk} program. @@ -16280,6 +16351,7 @@ you would see the latter (undesirable) output. @node Time Functions @subsection Time Functions +@cindex time functions @c STARTOFRANGE tst @cindex timestamps @@ -16319,6 +16391,7 @@ Optional parameters are enclosed in square brackets ([ ]): @table @code @item mktime(@var{datespec}) @cindex @code{mktime()} function (@command{gawk}) +@cindex generate time values Turn @var{datespec} into a timestamp in the same form as is returned by @code{systime()}. It is similar to the function of the same name in ISO C. The argument, @var{datespec}, is a string of the form @@ -16349,6 +16422,7 @@ is out of range, @code{mktime()} returns @minus{}1. @item strftime(@r{[}@var{format} @r{[}, @var{timestamp} @r{[}, @var{utc-flag}@r{]]]}) @c STARTOFRANGE strf @cindex @code{strftime()} function (@command{gawk}) +@cindex format time string Format the time specified by @var{timestamp} based on the contents of the @var{format} string and return the result. It is similar to the function of the same name in ISO C. @@ -16370,6 +16444,7 @@ change the default format. @item systime() @cindex @code{systime()} function (@command{gawk}) @cindex timestamps +@cindex current system time Return the current time as the number of seconds since the system epoch. On POSIX systems, this is the number of seconds since 1970-01-01 00:00:00 UTC, not counting leap seconds. @@ -16663,6 +16738,7 @@ gawk 'BEGIN @{ @node Bitwise Functions @subsection Bit-Manipulation Functions +@cindex bit-manipulation functions @c STARTOFRANGE bit @cindex bitwise, operations @c STARTOFRANGE and @@ -16826,26 +16902,32 @@ bitwise operations just described. They are: @cindex @command{gawk}, bitwise operations in @table @code @cindex @code{and()} function (@command{gawk}) +@cindex bitwise AND @item and(@var{v1}, @var{v2} @r{[}, @r{@dots{}]}) Return the bitwise AND of the arguments. There must be at least two. @cindex @code{compl()} function (@command{gawk}) +@cindex bitwise complement @item compl(@var{val}) Return the bitwise complement of @var{val}. @cindex @code{lshift()} function (@command{gawk}) +@cindex left shift @item lshift(@var{val}, @var{count}) Return the value of @var{val}, shifted left by @var{count} bits. @cindex @code{or()} function (@command{gawk}) +@cindex bitwise OR @item or(@var{v1}, @var{v2} @r{[}, @r{@dots{}]}) Return the bitwise OR of the arguments. There must be at least two. @cindex @code{rshift()} function (@command{gawk}) +@cindex right shift @item rshift(@var{val}, @var{count}) Return the value of @var{val}, shifted right by @var{count} bits. @cindex @code{xor()} function (@command{gawk}) +@cindex bitwise XOR @item xor(@var{v1}, @var{v2} @r{[}, @r{@dots{}]}) Return the bitwise XOR of the arguments. There must be at least two. @end table @@ -16937,6 +17019,7 @@ $ @kbd{gawk -f testbits.awk} @cindex strings, converting @cindex numbers, converting @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, @@ -16973,6 +17056,7 @@ that traverses every element of a true multidimensional array @table @code @cindex @code{isarray()} function (@command{gawk}) +@cindex scalar or array @item isarray(@var{x}) Return a true value if @var{x} is an array. Otherwise return false. @end table @@ -16994,6 +17078,7 @@ will end up turning it into a scalar. @subsection String-Translation Functions @cindex @command{gawk}, string-translation functions @cindex functions, string-translation +@cindex string-translation functions @cindex internationalization @cindex @command{awk} programs, internationalizing @@ -17006,6 +17091,7 @@ Optional parameters are enclosed in square brackets ([ ]): @table @code @cindex @code{bindtextdomain()} function (@command{gawk}) +@cindex set directory of message catalogs @item bindtextdomain(@var{directory} @r{[}, @var{domain}@r{]}) Set the directory in which @command{gawk} will look for message translation files, in case they @@ -17019,6 +17105,7 @@ If @var{directory} is the null string (@code{""}), then given @var{domain}. @cindex @code{dcgettext()} function (@command{gawk}) +@cindex translate string @item dcgettext(@var{string} @r{[}, @var{domain} @r{[}, @var{category}@r{]]}) Return the translation of @var{string} in text domain @var{domain} for locale category @var{category}. @@ -17042,7 +17129,7 @@ The default value for @var{category} is @code{"LC_MESSAGES"}. @section User-Defined Functions @c STARTOFRANGE udfunc -@cindex user-defined, functions +@cindex user-defined functions @c STARTOFRANGE funcud @cindex functions, user-defined Complicated @command{awk} programs can often be simplified by defining @@ -17128,6 +17215,7 @@ conventional to place some extra space between the arguments and the local variables, in order to document how your function is supposed to be used. @cindex variables, shadowing +@cindex shadowing of variable values 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 @@ -17186,6 +17274,7 @@ keyword @code{function} when defining a function. @node Function Example @subsection Function Definition Examples +@cindex function definition example Here is an example of a user-defined function, called @code{myprint()}, that takes a number and prints it in a specific format: @@ -17334,8 +17423,8 @@ an error. @node Variable Scope @subsubsection Controlling Variable Scope -@cindex local variables -@cindex variables, local +@cindex local variables, in a function +@cindex variables, local to a function There is no way to make a variable local to a @code{@{ @dots{} @}} 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 @@ -18264,7 +18353,7 @@ The leading capital letter indicates that it is global, while the fact that the variable name is not all capital letters indicates that the variable is not one of @command{awk}'s built-in variables, such as @code{FS}. -@cindex @option{--dump-variables} option +@cindex @option{--dump-variables} option, using for library functions 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 @@ -20052,7 +20141,7 @@ from anywhere within a user's program, and the user may have his or her own way of splitting records and fields. -@cindex @code{PROCINFO} array +@cindex @code{PROCINFO} array, testing the field splitting The @code{using_fw} variable checks @code{PROCINFO["FS"]}, which is @code{"FIELDWIDTHS"} if field splitting is being done with @code{FIELDWIDTHS}. This makes it possible to restore the correct @@ -20175,7 +20264,7 @@ uses these functions. @cindex group database, reading @c STARTOFRANGE datagr @cindex database, group, reading -@cindex @code{PROCINFO} array +@cindex @code{PROCINFO} array, and group membership @cindex @code{getgrent()} function (C library) @cindex @code{getgrent()} user-defined function @cindex groups@comma{} information about @@ -21354,7 +21443,7 @@ $ @kbd{id} @print{} uid=500(arnold) gid=500(arnold) groups=6(disk),7(lp),19(floppy) @end example -@cindex @code{PROCINFO} array +@cindex @code{PROCINFO} array, and user and group ID numbers This information is part of what is provided by @command{gawk}'s @code{PROCINFO} array (@pxref{Built-in Variables}). However, the @command{id} utility provides a more palatable output than just @@ -21455,7 +21544,6 @@ BEGIN \ @c endfile @end example -@cindex @code{in} operator The test in the @code{for} loop is worth noting. Any supplementary groups in the @code{PROCINFO} array have the indices @code{"group1"} through @code{"group@var{N}"} for some @@ -21465,7 +21553,7 @@ there are. This loop works by starting at one, concatenating the value with @code{"group"}, and then using @code{in} to see if that value is -in the array. Eventually, @code{i} is incremented past +in the array (@pxref{Reference to Elements}). Eventually, @code{i} is incremented past the last group in the array and the loop exits. The loop is also correct if there are @emph{no} supplementary @@ -24674,9 +24762,8 @@ both arrays use the values. @c Document It And Call It A Feature. Sigh. @cindex @command{gawk}, @code{IGNORECASE} variable in -@cindex @code{IGNORECASE} variable -@cindex arrays, sorting, @code{IGNORECASE} variable and -@cindex @code{IGNORECASE} variable, array sorting and +@cindex arrays, sorting, and @code{IGNORECASE} variable +@cindex @code{IGNORECASE} variable, and array sorting functions Because @code{IGNORECASE} affects string comparisons, the value of @code{IGNORECASE} also affects sorting for both @code{asort()} and @code{asorti()}. Note also that the locale's sorting order does @emph{not} @@ -24845,7 +24932,7 @@ As a side note, the assignment @samp{LC_ALL=C} in the @command{sort} command ensures traditional Unix (ASCII) sorting from @command{sort}. @cindex @command{gawk}, @code{PROCINFO} array in -@cindex @code{PROCINFO} array +@cindex @code{PROCINFO} array, and communications via ptys You may also use pseudo-ttys (ptys) for two-way communication instead of pipes, if your system supports them. This is done on a per-command basis, by setting a special element @@ -25048,8 +25135,8 @@ Here is the @file{awkprof.out} that results from running the illustrates that @command{awk} programmers sometimes get up very early in the morning to work.) -@cindex @code{BEGIN} pattern -@cindex @code{END} pattern +@cindex @code{BEGIN} pattern, and profiling +@cindex @code{END} pattern, and profiling @example # gawk profile, created Thu Feb 27 05:16:21 2014 @@ -25113,7 +25200,7 @@ Multiple @code{BEGIN} and @code{END} rules retain their separate identities, as do multiple @code{BEGINFILE} and @code{ENDFILE} rules. -@cindex patterns, counts +@cindex patterns, counts, in a profile @item Pattern-action rules have two counts. The first count, to the left of the rule, shows how many times @@ -25133,7 +25220,7 @@ is a count showing how many times the condition was true. The count for the @code{else} indicates how many times the test failed. -@cindex loops, count for header +@cindex loops, count for header, in a profile @item The count for a loop header (such as @code{for} or @code{while}) shows how many times the loop test was executed. @@ -25141,8 +25228,8 @@ or @code{while}) shows how many times the loop test was executed. statement in a rule to determine how many times the rule was executed. If the first statement is a loop, the count is misleading.) -@cindex functions, user-defined, counts -@cindex user-defined, functions, counts +@cindex functions, user-defined, counts, in a profile +@cindex user-defined, functions, counts, in a profile @item For user-defined functions, the count next to the @code{function} keyword indicates how many times the function was called. @@ -25156,8 +25243,8 @@ The layout uses ``K&R'' style with TABs. Braces are used everywhere, even when the body of an @code{if}, @code{else}, or loop is only a single statement. -@cindex @code{()} (parentheses) -@cindex parentheses @code{()} +@cindex @code{()} (parentheses), in a profile +@cindex parentheses @code{()}, in a profile @item Parentheses are used only where needed, as indicated by the structure of the program and the precedence rules. @@ -25213,6 +25300,7 @@ which is correct, but possibly surprising. @cindex profiling @command{awk} programs, dynamically @cindex @command{gawk} program, dynamic profiling +@cindex dynamic profiling Besides creating profiles when a program has completed, @command{gawk} can produce a profile while it is running. This is useful if your @command{awk} program goes into an @@ -25226,9 +25314,9 @@ $ @kbd{gawk --profile -f myprog &} @end example @cindex @command{kill} command@comma{} dynamic profiling -@cindex @code{USR1} signal -@cindex @code{SIGUSR1} signal -@cindex signals, @code{USR1}/@code{SIGUSR1} +@cindex @code{USR1} signal, for dynamic profiling +@cindex @code{SIGUSR1} signal, for dynamic profiling +@cindex signals, @code{USR1}/@code{SIGUSR1}, for profiling @noindent The shell prints a job number and process ID number; in this case, 13992. Use the @command{kill} command to send the @code{USR1} signal @@ -25259,9 +25347,9 @@ You may send @command{gawk} the @code{USR1} signal as many times as you like. Each time, the profile and function call trace are appended to the output profile file. -@cindex @code{HUP} signal -@cindex @code{SIGHUP} signal -@cindex signals, @code{HUP}/@code{SIGHUP} +@cindex @code{HUP} signal, for dynamic profiling +@cindex @code{SIGHUP} signal, for dynamic profiling +@cindex signals, @code{HUP}/@code{SIGHUP}, for profiling If you use the @code{HUP} signal instead of the @code{USR1} signal, @command{gawk} produces the profile and the function call trace and then exits. @@ -26175,6 +26263,7 @@ The following list defines terms used throughout the rest of this @value{CHAPTER}. @table @dfn +@cindex stack frame @item Stack Frame Programs generally call functions during the course of their execution. One function can call another, or a function can call itself (recursion). @@ -26196,6 +26285,7 @@ invoked. Commands that print the call stack print information about each stack frame (as detailed later on). @item Breakpoint +@cindex breakpoint During debugging, you often wish to let the program run until it reaches a certain point, and then continue execution from there one statement (or instruction) at a time. The way to do this is to set @@ -26205,6 +26295,7 @@ take over control of the program's execution. You can add and remove as many breakpoints as you like. @item Watchpoint +@cindex watchpoint A watchpoint is similar to a breakpoint. The difference is that breakpoints are oriented around the code: stop when a certain point in the code is reached. A watchpoint, however, specifies that program execution @@ -26236,6 +26327,7 @@ by the higher-level @command{awk} commands. @node Sample Debugging Session @section Sample Debugging Session +@cindex sample debugging session In order to illustrate the use of @command{gawk} as a debugger, let's look at a sample debugging session. We will use the @command{awk} implementation of the @@ -26249,6 +26341,8 @@ as our example. @node Debugger Invocation @subsection How to Start the Debugger +@cindex starting the debugger +@cindex debugger, how to start Starting the debugger is almost exactly like running @command{gawk}, except you have to pass an additional option @option{--debug} or the @@ -26589,6 +26683,8 @@ controlling breakpoints are: @cindex debugger commands, @code{break} @cindex @code{break} debugger command @cindex @code{b} debugger command (alias for @code{break}) +@cindex set breakpoint +@cindex breakpoint, setting @item @code{break} [[@var{filename}@code{:}]@var{n} | @var{function}] [@code{"@var{expression}"}] @itemx @code{b} [[@var{filename}@code{:}]@var{n} | @var{function}] [@code{"@var{expression}"}] Without any argument, set a breakpoint at the next instruction @@ -26619,6 +26715,8 @@ it continues executing the program. @cindex debugger commands, @code{clear} @cindex @code{clear} debugger command +@cindex delete breakpoint at location +@cindex breakpoint at location, how to delete @item @code{clear} [[@var{filename}@code{:}]@var{n} | @var{function}] Without any argument, delete any breakpoint at the next instruction to be executed in the selected stack frame. If the program stops at @@ -26639,6 +26737,7 @@ Delete breakpoint(s) set at entry to function @var{function}. @cindex debugger commands, @code{condition} @cindex @code{condition} debugger command +@cindex breakpoint condition @item @code{condition} @var{n} @code{"@var{expression}"} Add a condition to existing breakpoint or watchpoint @var{n}. The condition is an @command{awk} expression that the debugger evaluates @@ -26652,6 +26751,8 @@ watchpoint is made unconditional. @cindex debugger commands, @code{delete} @cindex @code{delete} debugger command @cindex @code{d} debugger command (alias for @code{delete}) +@cindex delete breakpoint by number +@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 @@ -26659,6 +26760,8 @@ all defined breakpoints if no argument is supplied. @cindex debugger commands, @code{disable} @cindex @code{disable} debugger command +@cindex disable breakpoint +@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. @@ -26667,6 +26770,7 @@ any argument, disables all breakpoints. @cindex debugger commands, @code{enable} @cindex @code{enable} debugger command @cindex @code{e} debugger command (alias for @code{enable}) +@cindex enable breakpoint @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 @@ -26686,6 +26790,7 @@ the program stops at the breakpoint. @cindex debugger commands, @code{ignore} @cindex @code{ignore} debugger command +@cindex ignore breakpoint @item @code{ignore} @var{n} @var{count} Ignore breakpoint number @var{n} the next @var{count} times it is hit. @@ -26694,6 +26799,7 @@ hit. @cindex debugger commands, @code{tbreak} @cindex @code{tbreak} debugger command @cindex @code{t} debugger command (alias for @code{tbreak}) +@cindex temporary breakpoint @item @code{tbreak} [[@var{filename}@code{:}]@var{n} | @var{function}] @itemx @code{t} [[@var{filename}@code{:}]@var{n} | @var{function}] Set a temporary breakpoint (enabled for only one stop). @@ -26714,6 +26820,8 @@ execution of the program than we saw in our earlier example: @cindex @code{silent} debugger command @cindex debugger commands, @code{end} @cindex @code{end} debugger command +@cindex breakpoint commands +@cindex commands to execute at breakpoint @item @code{commands} [@var{n}] @itemx @code{silent} @itemx @dots{} @@ -26741,6 +26849,7 @@ gawk> @cindex debugger commands, @code{c} (@code{continue}) @cindex debugger commands, @code{continue} +@cindex continue program, in debugger @item @code{continue} [@var{count}] @itemx @code{c} [@var{count}] Resume program execution. If continued from a breakpoint and @var{count} is @@ -26757,6 +26866,7 @@ Print the returned value. @cindex debugger commands, @code{next} @cindex @code{next} debugger command @cindex @code{n} debugger command (alias for @code{next}) +@cindex single-step execution, in the debugger @item @code{next} [@var{count}] @itemx @code{n} [@var{count}] Continue execution to the next source line, stepping over function calls. @@ -26851,6 +26961,7 @@ items on the list. @cindex debugger commands, @code{eval} @cindex @code{eval} debugger command +@cindex evaluate expressions, in debugger @item @code{eval "@var{awk statements}"} Evaluate @var{awk statements} in the context of the running program. You can do anything that an @command{awk} program would do: assign @@ -26868,6 +26979,7 @@ parameters defined by the program. @cindex debugger commands, @code{print} @cindex @code{print} debugger command @cindex @code{p} debugger command (alias for @code{print}) +@cindex print variables, in debugger @item @code{print} @var{var1}[@code{,} @var{var2} @dots{}] @itemx @code{p} @var{var1}[@code{,} @var{var2} @dots{}] Print the value of a @command{gawk} variable or field. @@ -26901,6 +27013,7 @@ No newline is printed unless one is specified. @cindex debugger commands, @code{set} @cindex @code{set} debugger command +@cindex assign values to variables, in debugger @item @code{set} @var{var}@code{=}@var{value} Assign a constant (number or string) value to an @command{awk} variable or field. @@ -26913,6 +27026,7 @@ You can also set special @command{awk} variables, such as @code{FS}, @cindex debugger commands, @code{watch} @cindex @code{watch} debugger command @cindex @code{w} debugger command (alias for @code{watch}) +@cindex set watchpoint @item @code{watch} @var{var} | @code{$}@var{n} [@code{"@var{expression}"}] @itemx @code{w} @var{var} | @code{$}@var{n} [@code{"@var{expression}"}] Add variable @var{var} (or field @code{$@var{n}}) to the watch list. @@ -26929,12 +27043,14 @@ then the debugger stops execution and prompts for a command. Otherwise, @cindex debugger commands, @code{undisplay} @cindex @code{undisplay} debugger command +@cindex stop automatic display, in debugger @item @code{undisplay} [@var{n}] Remove item number @var{n} (or all items, if no argument) from the automatic display list. @cindex debugger commands, @code{unwatch} @cindex @code{unwatch} debugger command +@cindex delete watchpoint @item @code{unwatch} [@var{n}] Remove item number @var{n} (or all items, if no argument) from the watch list. @@ -26955,6 +27071,8 @@ functions which called the one you are in. The commands for doing this are: @cindex debugger commands, @code{backtrace} @cindex @code{backtrace} debugger command @cindex @code{bt} debugger command (alias for @code{backtrace}) +@cindex call stack, display in debugger +@cindex traceback, display in debugger @item @code{backtrace} [@var{count}] @itemx @code{bt} [@var{count}] Print a backtrace of all function calls (stack frames), or innermost @var{count} @@ -27008,25 +27126,32 @@ The value for @var{what} should be one of the following: @c nested table @table @code @item args +@cindex show function arguments, in debugger Arguments of the selected frame. @item break +@cindex show breakpoints List all currently set breakpoints. @item display +@cindex automatic displays, in debugger List all items in the automatic display list. @item frame +@cindex describe call stack frame, in debugger Description of the selected stack frame. @item functions +@cindex list function definitions, in debugger List all function definitions including source file names and line numbers. @item locals +@cindex show local variables, in debugger Local variables of the selected frame. @item source +@cindex show name of current source file, in debugger The name of the current source file. Each time the program stops, the current source file is the file containing the current instruction. When the debugger first starts, the current source file is the first file @@ -27035,12 +27160,15 @@ included via the @option{-f} option. The be used at any time to change the current source. @item sources +@cindex show all source files, in debugger List all program sources. @item variables +@cindex list all global variables, in debugger List all global variables. @item watch +@cindex show watchpoints List all items in the watch list. @end table @end table @@ -27054,6 +27182,8 @@ from a file. The commands are: @cindex debugger commands, @code{option} @cindex @code{option} debugger command @cindex @code{o} debugger command (alias for @code{option}) +@cindex display debugger options +@cindex debugger options @item @code{option} [@var{name}[@code{=}@var{value}]] @itemx @code{o} [@var{name}[@code{=}@var{value}]] Without an argument, display the available debugger options @@ -27065,6 +27195,7 @@ The available options are: @c nested table @table @code @item history_size +@cindex debugger history size The maximum number of lines to keep in the history file @file{./.gawk_history}. The default is 100. @@ -27072,23 +27203,28 @@ The default is 100. The number of lines that @code{list} prints. The default is 15. @item outfile +@cindex redirect @command{gawk} output, in debugger Send @command{gawk} output to a file; debugger output still goes to standard output. An empty string (@code{""}) resets output to standard output. @item prompt +@cindex debugger prompt The debugger prompt. The default is @samp{@w{gawk> }}. @item save_history @r{[}on @r{|} off@r{]} +@cindex debugger history file Save command history to file @file{./.gawk_history}. The default is @code{on}. @item save_options @r{[}on @r{|} off@r{]} +@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. @item trace @r{[}on @r{|} off@r{]} +@cindex instruction tracing, in debugger Turn instruction tracing on or off. The default is @code{off}. @end table @@ -27097,6 +27233,7 @@ Save the commands from the current session to the given file name, so that they can be replayed using the @command{source} command. @item @code{source} @var{filename} +@cindex debugger, read commands from a file Run command(s) from a file; an error in any command does not terminate execution of subsequent commands. Comments (lines starting with @samp{#}) are allowed in a command file. @@ -27229,6 +27366,7 @@ function @var{function}. This command may change the current source file. @cindex debugger commands, @code{quit} @cindex @code{quit} debugger command @cindex @code{q} debugger command (alias for @code{quit}) +@cindex exit the debugger @item @code{quit} @itemx @code{q} Exit the debugger. Debugging is great fun, but sometimes we all have @@ -27252,6 +27390,8 @@ fairly self-explanatory, and using @code{stepi} and @code{nexti} while @node Readline Support @section Readline Support +@cindex command completion, in debugger +@cindex history expansion, in debugger If @command{gawk} is compiled with the @code{readline} library, you can take advantage of that library's command completion and history expansion @@ -27340,8 +27480,6 @@ be added, and of course feel free to try to add them yourself! @cindex multiple precision @cindex infinite precision @cindex floating-point, numbers@comma{} arbitrary precision -@cindex MPFR -@cindex GMP @cindex Knuth, Donald @quotation @@ -28105,6 +28243,8 @@ when you change the rounding mode. @node Gawk and MPFR @section @command{gawk} + MPFR = Powerful Arithmetic +@cindex MPFR +@cindex GMP The rest of this @value{CHAPTER} describes how to use the arbitrary precision (also known as @dfn{multiple precision} or @dfn{infinite precision}) numeric @@ -28209,6 +28349,7 @@ your program. @node Setting Precision @subsection Setting the Working Precision @cindex @code{PREC} variable +@cindex setting working precision @command{gawk} uses a global working precision; it does not keep track of the precision or accuracy of individual numbers. Performing an arithmetic @@ -28284,6 +28425,7 @@ issues that occur because numbers are stored internally in binary. @node Setting Rounding Mode @subsection Setting the Rounding Mode @cindex @code{ROUNDMODE} variable +@cindex setting rounding mode The @code{ROUNDMODE} variable provides program level control over the rounding mode. @@ -28351,6 +28493,7 @@ In the first case, the number is stored with the default precision of 53 bits. @node Changing Precision @subsection Changing the Precision of a Number +@cindex changing precision of a number @cindex Laurie, Dirk @quotation @@ -28469,6 +28612,7 @@ the problem at hand is often the correct approach in such situations. @node Arbitrary Precision Integers @section Arbitrary Precision Integer Arithmetic with @command{gawk} @cindex integers, arbitrary precision +@cindex arbitrary precision integers If one of the options @option{--bignum} or @option{-M} is specified, @command{gawk} performs all @@ -28565,6 +28709,7 @@ gawk -M 'BEGIN @{ n = 13; print n % 2 @}' @node Dynamic Extensions @chapter Writing Extensions for @command{gawk} +@cindex dynamically loaded extensions It is possible to add new functions written in C or C++ to @command{gawk} using dynamically loaded libraries. This facility is available on systems @@ -28599,6 +28744,7 @@ When @option{--sandbox} is specified, extensions are disabled @node Extension Intro @section Introduction +@cindex plug-in An @dfn{extension} (sometimes called a @dfn{plug-in}) is a piece of external compiled code that @command{gawk} can load at runtime to provide additional functionality, over and above the built-in capabilities @@ -28727,6 +28873,7 @@ happen, but we all know how @emph{that} goes.) @node Extension API Description @section API Description +@cindex extension API This (rather large) @value{SECTION} describes the API in detail. @@ -29111,6 +29258,8 @@ value type, as appropriate. This behavior is summarized in @node Memory Allocation Functions @subsection Memory Allocation Functions and Convenience Macros +@cindex allocating memory for extensions +@cindex extensions, allocating memory The API provides a number of @dfn{memory allocation} functions for allocating memory that can be passed to @command{gawk}, as well as a number of @@ -29225,6 +29374,8 @@ pointed to by @code{result}. @node Registration Functions @subsection Registration Functions +@cindex register extension +@cindex extension registration This @value{SECTION} describes the API functions for registering parts of your extension with @command{gawk}. @@ -29346,6 +29497,7 @@ is invoked with the @option{--version} option. @node Input Parsers @subsubsection Customized Input Parsers +@cindex customized input parser By default, @command{gawk} reads text files as its input. It uses the value of @code{RS} to find the end of the record, and then uses @code{FS} @@ -29593,7 +29745,9 @@ Register the input parser pointed to by @code{input_parser} with @node Output Wrappers @subsubsection Customized Output Wrappers +@cindex customized output wrapper +@cindex output wrapper An @dfn{output wrapper} is the mirror image of an input parser. It allows an extension to take over the output to a file opened with the @samp{>} or @samp{>>} I/O redirection operators (@pxref{Redirection}). @@ -29707,6 +29861,7 @@ Register the output wrapper pointed to by @code{output_wrapper} with @node Two-way processors @subsubsection Customized Two-way Processors +@cindex customized two-way processor A @dfn{two-way processor} combines an input parser and an output wrapper for two-way I/O with the @samp{|&} operator (@pxref{Redirection}). It makes identical @@ -29764,6 +29919,8 @@ Register the two-way processor pointed to by @code{two_way_processor} with @node Printing Messages @subsection Printing Messages +@cindex printing messages from extensions +@cindex messages from extensions You can print different kinds of warning messages from your extension, as described below. Note that for these functions, @@ -29837,6 +29994,7 @@ for more information on creating arrays. @node Symbol Table Access @subsection Symbol Table Access +@cindex accessing global variables from extensions Two sets of routines provide access to global variables, and one set allows you to create and release cached values. @@ -30094,6 +30252,7 @@ you should release any cached values that you created, using @node Array Manipulation @subsection Array Manipulation +@cindex array manipulation in extensions The primary data structure@footnote{Okay, the only data structure.} in @command{awk} is the associative array (@pxref{Arrays}). @@ -30673,6 +30832,8 @@ information about how @command{gawk} was invoked. @node Extension Versioning @subsubsection API Version Constants and Variables +@cindex API version +@cindex extension API version The API provides both a ``major'' and a ``minor'' version number. The API versions are available at compile time as constants: @@ -30726,6 +30887,8 @@ provided in @file{gawkapi.h} (discussed later, in @node Extension API Informational Variables @subsubsection Informational Variables +@cindex API informational variables +@cindex extension API informational variables The API provides access to several variables that describe whether the corresponding command-line options were enabled when @@ -30871,6 +31034,8 @@ the version string with @command{gawk}. @node Finding Extensions @section How @command{gawk} Finds Extensions +@cindex extension search path +@cindex finding extensions Compiled extensions have to be installed in a directory where @command{gawk} can find them. If @command{gawk} is configured and @@ -30881,6 +31046,7 @@ path with a list of directories to search for compiled extensions. @node Extension Example @section Example: Some File Functions +@cindex extension example @quotation @i{No matter where you go, there you are.} @@ -31525,6 +31691,7 @@ $ @kbd{AWKLIBPATH=$PWD gawk -f testff.awk} @node Extension Samples @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 that come in the @command{gawk} distribution. Some of them are intended @@ -32185,6 +32352,8 @@ tries to use @code{nanosleep()} or @code{select()} to implement the delay. @node gawkextlib @section The @code{gawkextlib} Project +@cindex @code{gawkextlib} +@cindex extensions, where to find @cindex @code{gawkextlib} project The @uref{http://sourceforge.net/projects/gawkextlib/, @code{gawkextlib}} -- cgit v1.2.3 From ef5a25cdb3af19a1f2cc14e25e1a93914aae82c1 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 27 Mar 2014 22:22:35 +0200 Subject: Finishing indexing changes, special treatment for functions. --- doc/ChangeLog | 6 + doc/gawk.info | 714 ++++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 130 ++++++----- doc/gawktexi.in | 130 ++++++----- 4 files changed, 518 insertions(+), 462 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 1a59539c..84750e4a 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,9 @@ +2014-03-27 Arnold D. Robbins + + * gawktexi.in: Finish the massive indexing improvements such that + functions are indexed the way I want in TeX and the way Eli + wants in Info. + 2014-03-27 Eli Zaretskii * gawktexi.in: First round of massive indexing improvements. diff --git a/doc/gawk.info b/doc/gawk.info index 29af8ab4..033a804e 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -12199,7 +12199,8 @@ enclosed in square brackets ([ ]): Variables::). The default string value is `"%a %b %e %H:%M:%S %Z %Y"'. This format string produces output that is equivalent to that of the `date' utility. You can assign - a new value to `PROCINFO["strftime"]' to change the default format. + a new value to `PROCINFO["strftime"]' to change the default + format; see below for the various format directives. `systime()' Return the current time as the number of seconds since the system @@ -30051,8 +30052,8 @@ Index * ' (single quote), in shell commands: Quoting. (line 31) * ' (single quote), vs. apostrophe: Comments. (line 27) * ' (single quote), with double quotes: Quoting. (line 53) -* () (parentheses): Regexp Operators. (line 79) * () (parentheses), in a profile: Profiling. (line 146) +* () (parentheses), regexp operator: Regexp Operators. (line 79) * * (asterisk), * operator, as multiplication operator: Precedence. (line 55) * * (asterisk), * operator, as regexp operator: Regexp Operators. @@ -30318,9 +30319,9 @@ Index (line 6) * anagram.awk program: Anagram Program. (line 22) * anagrams, finding: Anagram Program. (line 6) +* and: Bitwise Functions. (line 39) * AND bitwise operation: Bitwise Functions. (line 6) * and Boolean-logic operator: Boolean Ops. (line 6) -* and() function (gawk): Bitwise Functions. (line 39) * ANSI: Glossary. (line 35) * API informational variables: Extension API Informational Variables. (line 6) @@ -30393,14 +30394,14 @@ Index (line 52) * ASCII <1>: Glossary. (line 133) * ASCII: Ordinal Functions. (line 45) -* asort() function (gawk) <1>: Array Sorting Functions. +* asort <1>: Array Sorting Functions. (line 6) -* asort() function (gawk): String Functions. (line 32) +* asort: String Functions. (line 32) * asort() function (gawk), arrays, sorting: Array Sorting Functions. (line 6) -* asorti() function (gawk) <1>: Array Sorting Functions. +* asorti <1>: Array Sorting Functions. (line 6) -* asorti() function (gawk): String Functions. (line 32) +* asorti: String Functions. (line 32) * asorti() function (gawk), arrays, sorting: Array Sorting Functions. (line 6) * assert() function (C library): Assert Function. (line 6) @@ -30571,9 +30572,9 @@ Index * Berry, Karl <1>: Ranges and Locales. (line 74) * Berry, Karl: Acknowledgments. (line 33) * binary input/output: User-modified. (line 10) +* bindtextdomain <1>: Programmer i18n. (line 47) +* bindtextdomain: I18N Functions. (line 12) * bindtextdomain() function (C library): Explaining gettext. (line 49) -* bindtextdomain() function (gawk) <1>: Programmer i18n. (line 47) -* bindtextdomain() function (gawk): I18N Functions. (line 12) * bindtextdomain() function (gawk), portability and: I18N Portability. (line 33) * BINMODE variable <1>: PC Using. (line 33) @@ -30713,10 +30714,10 @@ Index (line 6) * cliff_rand() user-defined function: Cliff Random Function. (line 12) -* close file or coprocess: I/O Functions. (line 10) -* close() function <1>: I/O Functions. (line 10) -* close() function: Close Files And Pipes. +* close <1>: I/O Functions. (line 10) +* close: Close Files And Pipes. (line 18) +* close file or coprocess: I/O Functions. (line 10) * close() function, portability: Close Files And Pipes. (line 81) * close() function, return value: Close Files And Pipes. @@ -30787,7 +30788,7 @@ Index * compiling gawk for MS-DOS and MS-Windows: PC Compiling. (line 13) * compiling gawk for VMS: VMS Compilation. (line 6) * compiling gawk with EMX for OS/2: PC Compiling. (line 28) -* compl() function (gawk): Bitwise Functions. (line 43) +* compl: Bitwise Functions. (line 43) * complement, bitwise: Bitwise Functions. (line 25) * compound statements, control statements and: Statements. (line 10) * concatenating: Concatenation. (line 8) @@ -30822,7 +30823,7 @@ Index * convert string to upper case: String Functions. (line 527) * converting integer array subscripts: Numeric Array Subscripts. (line 31) -* converting, dates to timestamps: Time Functions. (line 75) +* converting, dates to timestamps: Time Functions. (line 76) * converting, numbers to strings <1>: Bitwise Functions. (line 109) * converting, numbers to strings: Conversion. (line 6) * converting, strings to numbers <1>: Bitwise Functions. (line 109) @@ -30837,7 +30838,7 @@ Index * coprocesses, closing: Close Files And Pipes. (line 6) * coprocesses, getline from: Getline/Coprocess. (line 6) -* cos() function: Numeric Functions. (line 15) +* cos: Numeric Functions. (line 15) * cosine: Numeric Functions. (line 15) * counting: Wc Program. (line 6) * csh utility: Statements/Lines. (line 44) @@ -30845,7 +30846,7 @@ Index * csh utility, |& operator, comparison with: Two-way I/O. (line 44) * ctime() user-defined function: Function Example. (line 73) * currency symbols, localization: Explaining gettext. (line 103) -* current system time: Time Functions. (line 65) +* current system time: Time Functions. (line 66) * custom.h file: Configuration Philosophy. (line 30) * customized input parser: Input Parsers. (line 6) @@ -30903,18 +30904,18 @@ Index * database, group, reading: Group Functions. (line 6) * database, users, reading: Passwd Functions. (line 6) * date utility, GNU: Time Functions. (line 17) -* date utility, POSIX: Time Functions. (line 262) -* dates, converting to timestamps: Time Functions. (line 75) +* date utility, POSIX: Time Functions. (line 263) +* dates, converting to timestamps: Time Functions. (line 76) * dates, information related to, localization: Explaining gettext. (line 115) * Davies, Stephen <1>: Contributors. (line 74) * Davies, Stephen: Acknowledgments. (line 60) -* dcgettext() function (gawk) <1>: Programmer i18n. (line 19) -* dcgettext() function (gawk): I18N Functions. (line 22) +* dcgettext <1>: Programmer i18n. (line 19) +* dcgettext: I18N Functions. (line 22) * dcgettext() function (gawk), portability and: I18N Portability. (line 33) -* dcngettext() function (gawk) <1>: Programmer i18n. (line 36) -* dcngettext() function (gawk): I18N Functions. (line 28) +* dcngettext <1>: Programmer i18n. (line 36) +* dcngettext: I18N Functions. (line 28) * dcngettext() function (gawk), portability and: I18N Portability. (line 33) * deadlocks: Two-way I/O. (line 70) @@ -31239,7 +31240,7 @@ Index * exit status, of VMS: VMS Running. (line 29) * exit the debugger: Miscellaneous Debugger Commands. (line 99) -* exp() function: Numeric Functions. (line 18) +* exp: Numeric Functions. (line 18) * expand utility: Very Simple. (line 69) * Expat XML parser library: gawkextlib. (line 35) * exponent: Numeric Functions. (line 18) @@ -31301,7 +31302,7 @@ Index * features, undocumented: Undocumented. (line 6) * Fenlason, Jay <1>: Contributors. (line 18) * Fenlason, Jay: History. (line 30) -* fflush() function: I/O Functions. (line 25) +* fflush: I/O Functions. (line 25) * field numbers: Nonconstant Fields. (line 6) * field operator $: Fields. (line 19) * field operators, dollar sign as: Fields. (line 19) @@ -31422,7 +31423,7 @@ Index (line 57) * format specifiers, printf statement: Control Letters. (line 6) * format specifiers, strftime() function (gawk): Time Functions. - (line 88) + (line 89) * format time string: Time Functions. (line 48) * formats, numeric output: OFMT. (line 6) * formatting output: Printf. (line 6) @@ -31609,8 +31610,8 @@ Index * General Public License (GPL): Glossary. (line 306) * General Public License, See GPL: Manual History. (line 11) * generate time values: Time Functions. (line 25) -* gensub() function (gawk) <1>: String Functions. (line 82) -* gensub() function (gawk): Using Constant Regexps. +* gensub <1>: String Functions. (line 82) +* gensub: Using Constant Regexps. (line 43) * gensub() function (gawk), escape processing: Gory Details. (line 6) * getaddrinfo() function (C library): TCP/IP Networking. (line 38) @@ -31685,8 +31686,8 @@ Index * group file: Group Functions. (line 6) * group id of gawk user: Auto-set. (line 177) * groups, information about: Group Functions. (line 6) -* gsub() function <1>: String Functions. (line 135) -* gsub() function: Using Constant Regexps. +* gsub <1>: String Functions. (line 135) +* gsub: Using Constant Regexps. (line 43) * gsub() function, arguments of: String Functions. (line 460) * gsub() function, escape processing: Gory Details. (line 6) @@ -31730,7 +31731,8 @@ Index (line 83) * IGNORECASE variable, in example programs: Library Functions. (line 53) -* IGNORECASE variable, ~ and !~ operators: Case-sensitivity. (line 26) +* IGNORECASE variable, with ~ and !~ operators: Case-sensitivity. + (line 26) * Illumos: Other Versions. (line 104) * Illumos, POSIX-compliant awk: Other Versions. (line 104) * implementation issues, gawk: Notes. (line 6) @@ -31748,7 +31750,7 @@ Index (line 37) * in operator, use in loops: Scanning an Array. (line 17) * increment operators: Increment Ops. (line 6) -* index() function: String Functions. (line 151) +* index: String Functions. (line 151) * indexing arrays: Array Intro. (line 49) * indirect function calls: Indirect Calls. (line 6) * infinite precision: Arbitrary Precision Arithmetic. @@ -31783,8 +31785,8 @@ Index * installation, VMS: VMS Installation. (line 6) * installing gawk: Installation. (line 6) * instruction tracing, in debugger: Debugger Info. (line 89) +* int: Numeric Functions. (line 23) * INT signal (MS-Windows): Profiling. (line 214) -* int() function: Numeric Functions. (line 23) * integer array indices: Numeric Array Subscripts. (line 31) * integers: General Arithmetic. (line 6) @@ -31813,7 +31815,7 @@ Index * interval expressions, regexp operator: Regexp Operators. (line 116) * inventory-shipped file: Sample Data Files. (line 32) * invoke shell command: I/O Functions. (line 72) -* isarray() function (gawk): Type Functions. (line 11) +* isarray: Type Functions. (line 11) * ISO: Glossary. (line 368) * ISO 8859-1: Glossary. (line 133) * ISO Latin-1: Glossary. (line 133) @@ -31870,9 +31872,9 @@ Index * left shift: Bitwise Functions. (line 46) * left shift, bitwise: Bitwise Functions. (line 32) * leftmost longest match: Multiple Line. (line 26) +* length: String Functions. (line 164) * length of input record: String Functions. (line 171) * length of string: String Functions. (line 164) -* length() function: String Functions. (line 164) * Lesser General Public License (LGPL): Glossary. (line 397) * LGPL (Lesser General Public License): Glossary. (line 397) * libmawk: Other Versions. (line 120) @@ -31934,8 +31936,8 @@ Index * localization: I18N and L10N. (line 6) * localization, See internationalization, localization: I18N and L10N. (line 6) +* log: Numeric Functions. (line 30) * log files, timestamps in: Time Functions. (line 6) -* log() function: Numeric Functions. (line 30) * logarithm: Numeric Functions. (line 30) * logical false/true: Truth Values. (line 6) * logical operators, See Boolean expressions: Boolean Ops. (line 6) @@ -31952,7 +31954,7 @@ Index * loops, See Also while statement: While Statement. (line 6) * loops, while: While Statement. (line 6) * ls utility: More Complex. (line 15) -* lshift() function (gawk): Bitwise Functions. (line 46) +* lshift: Bitwise Functions. (line 46) * lvalues/rvalues: Assignment Ops. (line 32) * mail-list file: Sample Data Files. (line 6) * mailing labels, printing: Labels Program. (line 6) @@ -31964,8 +31966,8 @@ Index (line 6) * marked strings, extracting: String Extraction. (line 6) * Marx, Groucho: Increment Ops. (line 60) +* match: String Functions. (line 204) * match regexp in string: String Functions. (line 204) -* match() function: String Functions. (line 204) * match() function, RSTART/RLENGTH variables: String Functions. (line 221) * matching, expressions, See comparison expressions: Typing and Comparison. @@ -31990,7 +31992,7 @@ Index * metacharacters in regular expressions: Regexp Operators. (line 6) * metacharacters, escape sequences for: Escape Sequences. (line 130) * minimum precision supported by MPFR library: Auto-set. (line 221) -* mktime() function (gawk): Time Functions. (line 25) +* mktime: Time Functions. (line 25) * modifiers, in format specifiers: Format Modifiers. (line 6) * monetary information, localization: Explaining gettext. (line 103) * MPFR: Gawk and MPFR. (line 6) @@ -32141,9 +32143,9 @@ Index * options, long <1>: Options. (line 6) * options, long: Command Line. (line 13) * options, printing list of: Options. (line 154) +* or: Bitwise Functions. (line 49) * OR bitwise operation: Bitwise Functions. (line 6) * or Boolean-logic operator: Boolean Ops. (line 6) -* or() function (gawk): Bitwise Functions. (line 49) * ord() extension function: Extension Sample Ord. (line 12) * ord() user-defined function: Ordinal Functions. (line 16) @@ -32169,10 +32171,10 @@ Index (line 36) * P1003.1 POSIX standard: Glossary. (line 454) * parent process id of gawk process: Auto-set. (line 186) -* parentheses (): Regexp Operators. (line 79) * parentheses (), in a profile: Profiling. (line 146) +* parentheses (), regexp operator: Regexp Operators. (line 79) * password file: Passwd Functions. (line 16) -* patsplit() function (gawk): String Functions. (line 291) +* patsplit: String Functions. (line 291) * patterns: Patterns and Actions. (line 6) * patterns, comparison expressions as: Expression Patterns. (line 14) @@ -32265,7 +32267,7 @@ Index * POSIX awk, changes in awk versions: POSIX. (line 6) * POSIX awk, continue statement and: Continue Statement. (line 43) * POSIX awk, CONVFMT variable and: User-modified. (line 28) -* POSIX awk, date utility and: Time Functions. (line 262) +* POSIX awk, date utility and: Time Functions. (line 263) * POSIX awk, field separators and <1>: Field Splitting Summary. (line 40) * POSIX awk, field separators and: Fields. (line 6) @@ -32394,7 +32396,7 @@ Index * Rakitzis, Byron: History Sorting. (line 25) * Ramey, Chet <1>: General Data Types. (line 6) * Ramey, Chet: Acknowledgments. (line 60) -* rand() function: Numeric Functions. (line 34) +* rand: Numeric Functions. (line 34) * random numbers, Cliff: Cliff Random Function. (line 6) * random numbers, rand()/srand() functions: Numeric Functions. @@ -32535,7 +32537,7 @@ Index * RS variable <1>: User-modified. (line 143) * RS variable: Records. (line 20) * RS variable, multiline records and: Multiple Line. (line 17) -* rshift() function (gawk): Bitwise Functions. (line 52) +* rshift: Bitwise Functions. (line 52) * RSTART variable: Auto-set. (line 259) * RSTART variable, match() function and: String Functions. (line 221) * RT variable <1>: Auto-set. (line 266) @@ -32679,7 +32681,7 @@ Index * SIGUSR1 signal, for dynamic profiling: Profiling. (line 188) * silent debugger command: Debugger Execution Control. (line 10) -* sin() function: Numeric Functions. (line 75) +* sin: Numeric Functions. (line 75) * sine: Numeric Functions. (line 75) * single precision floating-point: General Arithmetic. (line 21) * single quote ('): One-shot. (line 15) @@ -32721,20 +32723,20 @@ Index * source files, search path for: Igawk Program. (line 368) * sparse arrays: Array Intro. (line 70) * Spencer, Henry: Glossary. (line 12) +* split: String Functions. (line 313) * split string into array: String Functions. (line 291) * split utility: Split Program. (line 6) -* split() function: String Functions. (line 313) * split() function, array elements, deleting: Delete. (line 61) * split.awk program: Split Program. (line 30) -* sprintf() function <1>: String Functions. (line 378) -* sprintf() function: OFMT. (line 15) +* sprintf <1>: String Functions. (line 378) +* sprintf: OFMT. (line 15) * sprintf() function, OFMT variable and: User-modified. (line 124) * sprintf() function, print/printf statements and: Round Function. (line 6) -* sqrt() function: Numeric Functions. (line 78) +* sqrt: Numeric Functions. (line 78) * square brackets ([]), regexp operator: Regexp Operators. (line 55) * square root: Numeric Functions. (line 78) -* srand() function: Numeric Functions. (line 82) +* srand: Numeric Functions. (line 82) * stack frame: Debugging Terms. (line 10) * Stallman, Richard <1>: Glossary. (line 297) * Stallman, Richard <2>: Contributors. (line 23) @@ -32759,7 +32761,7 @@ Index * stream editors <1>: Simple Sed. (line 6) * stream editors: Field Splitting Summary. (line 46) -* strftime() function (gawk): Time Functions. (line 48) +* strftime: Time Functions. (line 48) * string constants: Scalar Constants. (line 15) * string constants, vs. regexp constants: Computed Regexps. (line 38) * string extraction (internationalization): String Extraction. @@ -32783,11 +32785,11 @@ Index * strings, null: Regexp Field Splitting. (line 43) * strings, numeric: Variable Typing. (line 6) -* strtonum() function (gawk): String Functions. (line 385) +* strtonum: String Functions. (line 385) * strtonum() function (gawk), --non-decimal-data option and: Nondecimal Data. (line 36) -* sub() function <1>: String Functions. (line 406) -* sub() function: Using Constant Regexps. +* sub <1>: String Functions. (line 406) +* sub: Using Constant Regexps. (line 43) * sub() function, arguments of: String Functions. (line 460) * sub() function, escape processing: Gory Details. (line 6) @@ -32803,7 +32805,7 @@ Index * SUBSEP variable, and multidimensional arrays: Multidimensional. (line 16) * substitute in string: String Functions. (line 82) -* substr() function: String Functions. (line 479) +* substr: String Functions. (line 479) * substring: String Functions. (line 479) * Sumner, Andrew: Other Versions. (line 64) * supplementary groups of gawk process: Auto-set. (line 234) @@ -32811,8 +32813,8 @@ Index * SYMTAB array: Auto-set. (line 274) * syntactic ambiguity: /= operator vs. /=.../ regexp constant: Assignment Ops. (line 147) -* system() function: I/O Functions. (line 72) -* systime() function (gawk): Time Functions. (line 65) +* system: I/O Functions. (line 72) +* systime: Time Functions. (line 66) * t debugger command (alias for tbreak): Breakpoint Control. (line 90) * tbreak debugger command: Breakpoint Control. (line 90) * Tcl: Library Names. (line 57) @@ -32858,11 +32860,11 @@ Index * time, retrieving: Time Functions. (line 17) * timeout, reading input: Read Timeout. (line 6) * timestamps: Time Functions. (line 6) -* timestamps, converting dates to: Time Functions. (line 75) +* timestamps, converting dates to: Time Functions. (line 76) * timestamps, formatted: Getlocaltime Function. (line 6) -* tolower() function: String Functions. (line 521) -* toupper() function: String Functions. (line 527) +* tolower: String Functions. (line 521) +* toupper: String Functions. (line 527) * tr utility: Translate Program. (line 6) * trace debugger command: Miscellaneous Debugger Commands. (line 108) @@ -33041,8 +33043,8 @@ Index * writea() extension function: Extension Sample Read write array. (line 9) * xgettext utility: String Extraction. (line 13) +* xor: Bitwise Functions. (line 55) * XOR bitwise operation: Bitwise Functions. (line 6) -* xor() function (gawk): Bitwise Functions. (line 55) * Yawitz, Efraim: Contributors. (line 129) * Zaretskii, Eli <1>: Bugs. (line 70) * Zaretskii, Eli <2>: Contributors. (line 55) @@ -33307,300 +33309,300 @@ Ref: Gory Details-Footnote-2506851 Node: I/O Functions507002 Ref: I/O Functions-Footnote-1513992 Node: Time Functions514139 -Ref: Time Functions-Footnote-1525072 -Ref: Time Functions-Footnote-2525140 -Ref: Time Functions-Footnote-3525298 -Ref: Time Functions-Footnote-4525409 -Ref: Time Functions-Footnote-5525521 -Ref: Time Functions-Footnote-6525748 -Node: Bitwise Functions526014 -Ref: table-bitwise-ops526576 -Ref: Bitwise Functions-Footnote-1530797 -Node: Type Functions530981 -Node: I18N Functions532132 -Node: User-defined533759 -Node: Definition Syntax534563 -Ref: Definition Syntax-Footnote-1539477 -Node: Function Example539546 -Ref: Function Example-Footnote-1542195 -Node: Function Caveats542217 -Node: Calling A Function542735 -Node: Variable Scope543690 -Node: Pass By Value/Reference546653 -Node: Return Statement550161 -Node: Dynamic Typing553142 -Node: Indirect Calls554073 -Node: Library Functions563760 -Ref: Library Functions-Footnote-1567273 -Ref: Library Functions-Footnote-2567416 -Node: Library Names567587 -Ref: Library Names-Footnote-1571060 -Ref: Library Names-Footnote-2571280 -Node: General Functions571366 -Node: Strtonum Function572394 -Node: Assert Function575324 -Node: Round Function578650 -Node: Cliff Random Function580191 -Node: Ordinal Functions581207 -Ref: Ordinal Functions-Footnote-1584284 -Ref: Ordinal Functions-Footnote-2584536 -Node: Join Function584747 -Ref: Join Function-Footnote-1586518 -Node: Getlocaltime Function586718 -Node: Readfile Function590459 -Node: Data File Management592298 -Node: Filetrans Function592930 -Node: Rewind Function596999 -Node: File Checking598386 -Node: Empty Files599480 -Node: Ignoring Assigns601710 -Node: Getopt Function603264 -Ref: Getopt Function-Footnote-1614567 -Node: Passwd Functions614770 -Ref: Passwd Functions-Footnote-1623748 -Node: Group Functions623836 -Node: Walking Arrays631920 -Node: Sample Programs634056 -Node: Running Examples634730 -Node: Clones635458 -Node: Cut Program636682 -Node: Egrep Program646533 -Ref: Egrep Program-Footnote-1654306 -Node: Id Program654416 -Node: Split Program658065 -Ref: Split Program-Footnote-1661584 -Node: Tee Program661712 -Node: Uniq Program664515 -Node: Wc Program671944 -Ref: Wc Program-Footnote-1676210 -Ref: Wc Program-Footnote-2676410 -Node: Miscellaneous Programs676502 -Node: Dupword Program677690 -Node: Alarm Program679721 -Node: Translate Program684528 -Ref: Translate Program-Footnote-1688915 -Ref: Translate Program-Footnote-2689163 -Node: Labels Program689297 -Ref: Labels Program-Footnote-1692668 -Node: Word Sorting692752 -Node: History Sorting696636 -Node: Extract Program698475 -Ref: Extract Program-Footnote-1705978 -Node: Simple Sed706106 -Node: Igawk Program709168 -Ref: Igawk Program-Footnote-1724325 -Ref: Igawk Program-Footnote-2724526 -Node: Anagram Program724664 -Node: Signature Program727732 -Node: Advanced Features728832 -Node: Nondecimal Data730718 -Node: Array Sorting732301 -Node: Controlling Array Traversal732998 -Node: Array Sorting Functions741282 -Ref: Array Sorting Functions-Footnote-1745151 -Node: Two-way I/O745345 -Ref: Two-way I/O-Footnote-1750777 -Node: TCP/IP Networking750859 -Node: Profiling753703 -Node: Internationalization761206 -Node: I18N and L10N762631 -Node: Explaining gettext763317 -Ref: Explaining gettext-Footnote-1768385 -Ref: Explaining gettext-Footnote-2768569 -Node: Programmer i18n768734 -Node: Translator i18n772936 -Node: String Extraction773730 -Ref: String Extraction-Footnote-1774691 -Node: Printf Ordering774777 -Ref: Printf Ordering-Footnote-1777559 -Node: I18N Portability777623 -Ref: I18N Portability-Footnote-1780072 -Node: I18N Example780135 -Ref: I18N Example-Footnote-1782773 -Node: Gawk I18N782845 -Node: Debugger783466 -Node: Debugging784437 -Node: Debugging Concepts784870 -Node: Debugging Terms786726 -Node: Awk Debugging789323 -Node: Sample Debugging Session790215 -Node: Debugger Invocation790735 -Node: Finding The Bug792068 -Node: List of Debugger Commands798555 -Node: Breakpoint Control799889 -Node: Debugger Execution Control803553 -Node: Viewing And Changing Data806913 -Node: Execution Stack810269 -Node: Debugger Info811736 -Node: Miscellaneous Debugger Commands815718 -Node: Readline Support820894 -Node: Limitations821725 -Node: Arbitrary Precision Arithmetic823977 -Ref: Arbitrary Precision Arithmetic-Footnote-1825626 -Node: General Arithmetic825774 -Node: Floating Point Issues827494 -Node: String Conversion Precision828375 -Ref: String Conversion Precision-Footnote-1830080 -Node: Unexpected Results830189 -Node: POSIX Floating Point Problems832342 -Ref: POSIX Floating Point Problems-Footnote-1836167 -Node: Integer Programming836205 -Node: Floating-point Programming837944 -Ref: Floating-point Programming-Footnote-1844275 -Ref: Floating-point Programming-Footnote-2844545 -Node: Floating-point Representation844809 -Node: Floating-point Context845974 -Ref: table-ieee-formats846813 -Node: Rounding Mode848197 -Ref: table-rounding-modes848676 -Ref: Rounding Mode-Footnote-1851691 -Node: Gawk and MPFR851870 -Node: Arbitrary Precision Floats853125 -Ref: Arbitrary Precision Floats-Footnote-1855568 -Node: Setting Precision855884 -Ref: table-predefined-precision-strings856570 -Node: Setting Rounding Mode858715 -Ref: table-gawk-rounding-modes859119 -Node: Floating-point Constants860306 -Node: Changing Precision861735 -Ref: Changing Precision-Footnote-1863132 -Node: Exact Arithmetic863306 -Node: Arbitrary Precision Integers866444 -Ref: Arbitrary Precision Integers-Footnote-1869459 -Node: Dynamic Extensions869606 -Node: Extension Intro871064 -Node: Plugin License872329 -Node: Extension Mechanism Outline873014 -Ref: load-extension873431 -Ref: load-new-function874909 -Ref: call-new-function875904 -Node: Extension API Description877919 -Node: Extension API Functions Introduction879206 -Node: General Data Types884133 -Ref: General Data Types-Footnote-1889828 -Node: Requesting Values890127 -Ref: table-value-types-returned890864 -Node: Memory Allocation Functions891818 -Ref: Memory Allocation Functions-Footnote-1894564 -Node: Constructor Functions894660 -Node: Registration Functions896418 -Node: Extension Functions897103 -Node: Exit Callback Functions899405 -Node: Extension Version String900654 -Node: Input Parsers901304 -Node: Output Wrappers911061 -Node: Two-way processors915571 -Node: Printing Messages917779 -Ref: Printing Messages-Footnote-1918856 -Node: Updating `ERRNO'919008 -Node: Accessing Parameters919747 -Node: Symbol Table Access920977 -Node: Symbol table by name921491 -Node: Symbol table by cookie923240 -Ref: Symbol table by cookie-Footnote-1927372 -Node: Cached values927435 -Ref: Cached values-Footnote-1930925 -Node: Array Manipulation931016 -Ref: Array Manipulation-Footnote-1932114 -Node: Array Data Types932153 -Ref: Array Data Types-Footnote-1934856 -Node: Array Functions934948 -Node: Flattening Arrays938784 -Node: Creating Arrays945636 -Node: Extension API Variables950361 -Node: Extension Versioning950997 -Node: Extension API Informational Variables952898 -Node: Extension API Boilerplate953984 -Node: Finding Extensions957788 -Node: Extension Example958348 -Node: Internal File Description959078 -Node: Internal File Ops963169 -Ref: Internal File Ops-Footnote-1974678 -Node: Using Internal File Ops974818 -Ref: Using Internal File Ops-Footnote-1977171 -Node: Extension Samples977437 -Node: Extension Sample File Functions978961 -Node: Extension Sample Fnmatch987446 -Node: Extension Sample Fork989215 -Node: Extension Sample Inplace990428 -Node: Extension Sample Ord992206 -Node: Extension Sample Readdir993042 -Node: Extension Sample Revout994574 -Node: Extension Sample Rev2way995167 -Node: Extension Sample Read write array995857 -Node: Extension Sample Readfile997740 -Node: Extension Sample API Tests998558 -Node: Extension Sample Time999083 -Node: gawkextlib1000447 -Node: Language History1003228 -Node: V7/SVR3.11004821 -Node: SVR41007141 -Node: POSIX1008583 -Node: BTL1009969 -Node: POSIX/GNU1010703 -Node: Feature History1016302 -Node: Common Extensions1029278 -Node: Ranges and Locales1030590 -Ref: Ranges and Locales-Footnote-11035207 -Ref: Ranges and Locales-Footnote-21035234 -Ref: Ranges and Locales-Footnote-31035468 -Node: Contributors1035689 -Node: Installation1041070 -Node: Gawk Distribution1041964 -Node: Getting1042448 -Node: Extracting1043274 -Node: Distribution contents1044966 -Node: Unix Installation1050671 -Node: Quick Installation1051288 -Node: Additional Configuration Options1053734 -Node: Configuration Philosophy1055470 -Node: Non-Unix Installation1057824 -Node: PC Installation1058282 -Node: PC Binary Installation1059581 -Node: PC Compiling1061429 -Node: PC Testing1064373 -Node: PC Using1065549 -Node: Cygwin1069717 -Node: MSYS1070526 -Node: VMS Installation1071040 -Node: VMS Compilation1071804 -Ref: VMS Compilation-Footnote-11073056 -Node: VMS Dynamic Extensions1073114 -Node: VMS Installation Details1074487 -Node: VMS Running1076738 -Node: VMS GNV1079572 -Node: VMS Old Gawk1080295 -Node: Bugs1080765 -Node: Other Versions1084683 -Node: Notes1090767 -Node: Compatibility Mode1091567 -Node: Additions1092350 -Node: Accessing The Source1093277 -Node: Adding Code1094717 -Node: New Ports1100762 -Node: Derived Files1104897 -Ref: Derived Files-Footnote-11110218 -Ref: Derived Files-Footnote-21110252 -Ref: Derived Files-Footnote-31110852 -Node: Future Extensions1110950 -Node: Implementation Limitations1111533 -Node: Extension Design1112785 -Node: Old Extension Problems1113939 -Ref: Old Extension Problems-Footnote-11115447 -Node: Extension New Mechanism Goals1115504 -Ref: Extension New Mechanism Goals-Footnote-11118869 -Node: Extension Other Design Decisions1119055 -Node: Extension Future Growth1121161 -Node: Old Extension Mechanism1121997 -Node: Basic Concepts1123737 -Node: Basic High Level1124418 -Ref: figure-general-flow1124689 -Ref: figure-process-flow1125288 -Ref: Basic High Level-Footnote-11128517 -Node: Basic Data Typing1128702 -Node: Glossary1132057 -Node: Copying1157286 -Node: GNU Free Documentation License1194843 -Node: Index1219980 +Ref: Time Functions-Footnote-1525122 +Ref: Time Functions-Footnote-2525190 +Ref: Time Functions-Footnote-3525348 +Ref: Time Functions-Footnote-4525459 +Ref: Time Functions-Footnote-5525571 +Ref: Time Functions-Footnote-6525798 +Node: Bitwise Functions526064 +Ref: table-bitwise-ops526626 +Ref: Bitwise Functions-Footnote-1530847 +Node: Type Functions531031 +Node: I18N Functions532182 +Node: User-defined533809 +Node: Definition Syntax534613 +Ref: Definition Syntax-Footnote-1539527 +Node: Function Example539596 +Ref: Function Example-Footnote-1542245 +Node: Function Caveats542267 +Node: Calling A Function542785 +Node: Variable Scope543740 +Node: Pass By Value/Reference546703 +Node: Return Statement550211 +Node: Dynamic Typing553192 +Node: Indirect Calls554123 +Node: Library Functions563810 +Ref: Library Functions-Footnote-1567323 +Ref: Library Functions-Footnote-2567466 +Node: Library Names567637 +Ref: Library Names-Footnote-1571110 +Ref: Library Names-Footnote-2571330 +Node: General Functions571416 +Node: Strtonum Function572444 +Node: Assert Function575374 +Node: Round Function578700 +Node: Cliff Random Function580241 +Node: Ordinal Functions581257 +Ref: Ordinal Functions-Footnote-1584334 +Ref: Ordinal Functions-Footnote-2584586 +Node: Join Function584797 +Ref: Join Function-Footnote-1586568 +Node: Getlocaltime Function586768 +Node: Readfile Function590509 +Node: Data File Management592348 +Node: Filetrans Function592980 +Node: Rewind Function597049 +Node: File Checking598436 +Node: Empty Files599530 +Node: Ignoring Assigns601760 +Node: Getopt Function603314 +Ref: Getopt Function-Footnote-1614617 +Node: Passwd Functions614820 +Ref: Passwd Functions-Footnote-1623798 +Node: Group Functions623886 +Node: Walking Arrays631970 +Node: Sample Programs634106 +Node: Running Examples634780 +Node: Clones635508 +Node: Cut Program636732 +Node: Egrep Program646583 +Ref: Egrep Program-Footnote-1654356 +Node: Id Program654466 +Node: Split Program658115 +Ref: Split Program-Footnote-1661634 +Node: Tee Program661762 +Node: Uniq Program664565 +Node: Wc Program671994 +Ref: Wc Program-Footnote-1676260 +Ref: Wc Program-Footnote-2676460 +Node: Miscellaneous Programs676552 +Node: Dupword Program677740 +Node: Alarm Program679771 +Node: Translate Program684578 +Ref: Translate Program-Footnote-1688965 +Ref: Translate Program-Footnote-2689213 +Node: Labels Program689347 +Ref: Labels Program-Footnote-1692718 +Node: Word Sorting692802 +Node: History Sorting696686 +Node: Extract Program698525 +Ref: Extract Program-Footnote-1706028 +Node: Simple Sed706156 +Node: Igawk Program709218 +Ref: Igawk Program-Footnote-1724375 +Ref: Igawk Program-Footnote-2724576 +Node: Anagram Program724714 +Node: Signature Program727782 +Node: Advanced Features728882 +Node: Nondecimal Data730768 +Node: Array Sorting732351 +Node: Controlling Array Traversal733048 +Node: Array Sorting Functions741332 +Ref: Array Sorting Functions-Footnote-1745201 +Node: Two-way I/O745395 +Ref: Two-way I/O-Footnote-1750827 +Node: TCP/IP Networking750909 +Node: Profiling753753 +Node: Internationalization761256 +Node: I18N and L10N762681 +Node: Explaining gettext763367 +Ref: Explaining gettext-Footnote-1768435 +Ref: Explaining gettext-Footnote-2768619 +Node: Programmer i18n768784 +Node: Translator i18n772986 +Node: String Extraction773780 +Ref: String Extraction-Footnote-1774741 +Node: Printf Ordering774827 +Ref: Printf Ordering-Footnote-1777609 +Node: I18N Portability777673 +Ref: I18N Portability-Footnote-1780122 +Node: I18N Example780185 +Ref: I18N Example-Footnote-1782823 +Node: Gawk I18N782895 +Node: Debugger783516 +Node: Debugging784487 +Node: Debugging Concepts784920 +Node: Debugging Terms786776 +Node: Awk Debugging789373 +Node: Sample Debugging Session790265 +Node: Debugger Invocation790785 +Node: Finding The Bug792118 +Node: List of Debugger Commands798605 +Node: Breakpoint Control799939 +Node: Debugger Execution Control803603 +Node: Viewing And Changing Data806963 +Node: Execution Stack810319 +Node: Debugger Info811786 +Node: Miscellaneous Debugger Commands815768 +Node: Readline Support820944 +Node: Limitations821775 +Node: Arbitrary Precision Arithmetic824027 +Ref: Arbitrary Precision Arithmetic-Footnote-1825676 +Node: General Arithmetic825824 +Node: Floating Point Issues827544 +Node: String Conversion Precision828425 +Ref: String Conversion Precision-Footnote-1830130 +Node: Unexpected Results830239 +Node: POSIX Floating Point Problems832392 +Ref: POSIX Floating Point Problems-Footnote-1836217 +Node: Integer Programming836255 +Node: Floating-point Programming837994 +Ref: Floating-point Programming-Footnote-1844325 +Ref: Floating-point Programming-Footnote-2844595 +Node: Floating-point Representation844859 +Node: Floating-point Context846024 +Ref: table-ieee-formats846863 +Node: Rounding Mode848247 +Ref: table-rounding-modes848726 +Ref: Rounding Mode-Footnote-1851741 +Node: Gawk and MPFR851920 +Node: Arbitrary Precision Floats853175 +Ref: Arbitrary Precision Floats-Footnote-1855618 +Node: Setting Precision855934 +Ref: table-predefined-precision-strings856620 +Node: Setting Rounding Mode858765 +Ref: table-gawk-rounding-modes859169 +Node: Floating-point Constants860356 +Node: Changing Precision861785 +Ref: Changing Precision-Footnote-1863182 +Node: Exact Arithmetic863356 +Node: Arbitrary Precision Integers866494 +Ref: Arbitrary Precision Integers-Footnote-1869509 +Node: Dynamic Extensions869656 +Node: Extension Intro871114 +Node: Plugin License872379 +Node: Extension Mechanism Outline873064 +Ref: load-extension873481 +Ref: load-new-function874959 +Ref: call-new-function875954 +Node: Extension API Description877969 +Node: Extension API Functions Introduction879256 +Node: General Data Types884183 +Ref: General Data Types-Footnote-1889878 +Node: Requesting Values890177 +Ref: table-value-types-returned890914 +Node: Memory Allocation Functions891868 +Ref: Memory Allocation Functions-Footnote-1894614 +Node: Constructor Functions894710 +Node: Registration Functions896468 +Node: Extension Functions897153 +Node: Exit Callback Functions899455 +Node: Extension Version String900704 +Node: Input Parsers901354 +Node: Output Wrappers911111 +Node: Two-way processors915621 +Node: Printing Messages917829 +Ref: Printing Messages-Footnote-1918906 +Node: Updating `ERRNO'919058 +Node: Accessing Parameters919797 +Node: Symbol Table Access921027 +Node: Symbol table by name921541 +Node: Symbol table by cookie923290 +Ref: Symbol table by cookie-Footnote-1927422 +Node: Cached values927485 +Ref: Cached values-Footnote-1930975 +Node: Array Manipulation931066 +Ref: Array Manipulation-Footnote-1932164 +Node: Array Data Types932203 +Ref: Array Data Types-Footnote-1934906 +Node: Array Functions934998 +Node: Flattening Arrays938834 +Node: Creating Arrays945686 +Node: Extension API Variables950411 +Node: Extension Versioning951047 +Node: Extension API Informational Variables952948 +Node: Extension API Boilerplate954034 +Node: Finding Extensions957838 +Node: Extension Example958398 +Node: Internal File Description959128 +Node: Internal File Ops963219 +Ref: Internal File Ops-Footnote-1974728 +Node: Using Internal File Ops974868 +Ref: Using Internal File Ops-Footnote-1977221 +Node: Extension Samples977487 +Node: Extension Sample File Functions979011 +Node: Extension Sample Fnmatch987496 +Node: Extension Sample Fork989265 +Node: Extension Sample Inplace990478 +Node: Extension Sample Ord992256 +Node: Extension Sample Readdir993092 +Node: Extension Sample Revout994624 +Node: Extension Sample Rev2way995217 +Node: Extension Sample Read write array995907 +Node: Extension Sample Readfile997790 +Node: Extension Sample API Tests998608 +Node: Extension Sample Time999133 +Node: gawkextlib1000497 +Node: Language History1003278 +Node: V7/SVR3.11004871 +Node: SVR41007191 +Node: POSIX1008633 +Node: BTL1010019 +Node: POSIX/GNU1010753 +Node: Feature History1016352 +Node: Common Extensions1029328 +Node: Ranges and Locales1030640 +Ref: Ranges and Locales-Footnote-11035257 +Ref: Ranges and Locales-Footnote-21035284 +Ref: Ranges and Locales-Footnote-31035518 +Node: Contributors1035739 +Node: Installation1041120 +Node: Gawk Distribution1042014 +Node: Getting1042498 +Node: Extracting1043324 +Node: Distribution contents1045016 +Node: Unix Installation1050721 +Node: Quick Installation1051338 +Node: Additional Configuration Options1053784 +Node: Configuration Philosophy1055520 +Node: Non-Unix Installation1057874 +Node: PC Installation1058332 +Node: PC Binary Installation1059631 +Node: PC Compiling1061479 +Node: PC Testing1064423 +Node: PC Using1065599 +Node: Cygwin1069767 +Node: MSYS1070576 +Node: VMS Installation1071090 +Node: VMS Compilation1071854 +Ref: VMS Compilation-Footnote-11073106 +Node: VMS Dynamic Extensions1073164 +Node: VMS Installation Details1074537 +Node: VMS Running1076788 +Node: VMS GNV1079622 +Node: VMS Old Gawk1080345 +Node: Bugs1080815 +Node: Other Versions1084733 +Node: Notes1090817 +Node: Compatibility Mode1091617 +Node: Additions1092400 +Node: Accessing The Source1093327 +Node: Adding Code1094767 +Node: New Ports1100812 +Node: Derived Files1104947 +Ref: Derived Files-Footnote-11110268 +Ref: Derived Files-Footnote-21110302 +Ref: Derived Files-Footnote-31110902 +Node: Future Extensions1111000 +Node: Implementation Limitations1111583 +Node: Extension Design1112835 +Node: Old Extension Problems1113989 +Ref: Old Extension Problems-Footnote-11115497 +Node: Extension New Mechanism Goals1115554 +Ref: Extension New Mechanism Goals-Footnote-11118919 +Node: Extension Other Design Decisions1119105 +Node: Extension Future Growth1121211 +Node: Old Extension Mechanism1122047 +Node: Basic Concepts1123787 +Node: Basic High Level1124468 +Ref: figure-general-flow1124739 +Ref: figure-process-flow1125338 +Ref: Basic High Level-Footnote-11128567 +Node: Basic Data Typing1128752 +Node: Glossary1132107 +Node: Copying1157336 +Node: GNU Free Documentation License1194893 +Node: Index1220030  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index aa9e3ee4..f3c54551 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -134,6 +134,30 @@ @end macro @end ifnothtml +@c Indexing macros +@ifinfo + +@macro cindexawkfunc{name} +@cindex @code{\name\} +@end macro + +@macro cindexgawkfunc{name} +@cindex @code{\name\} +@end macro + +@end ifinfo + +@ifnotinfo + +@macro cindexawkfunc{name} +@cindex @code{\name\()} function +@end macro + +@macro cindexgawkfunc{name} +@cindex @code{\name\()} function (@command{gawk}) +@end macro +@end ifnotinfo + @ignore Some comments on the layout for TeX. 1. Use at least texinfo.tex 2014-01-30.15 @@ -4820,8 +4844,8 @@ means it matches any string that starts with @samp{P} or contains a digit. The alternation applies to the largest possible regexps on either side. -@cindex @code{()} (parentheses) -@cindex parentheses @code{()} +@cindex @code{()} (parentheses), regexp operator +@cindex parentheses @code{()}, regexp operator @item (@dots{}) Parentheses are used for grouping in regular expressions, as in arithmetic. They can be used to concatenate regular expressions @@ -5290,7 +5314,7 @@ This works in any POSIX-compliant @command{awk}. @cindex tilde (@code{~}), @code{~} operator @cindex @code{!} (exclamation point), @code{!~} operator @cindex exclamation point (@code{!}), @code{!~} operator -@cindex @code{IGNORECASE} variable, @code{~} and @code{!~} operators +@cindex @code{IGNORECASE} variable, with @code{~} and @code{!~} operators @cindex @command{gawk}, @code{IGNORECASE} variable in @c @cindex variables, @code{IGNORECASE} Another method, specific to @command{gawk}, is to set the variable @@ -8310,7 +8334,7 @@ numbers can be formatted. The different format specifications are discussed more fully in @ref{Control Letters}. -@cindex @code{sprintf()} function +@cindexawkfunc{sprintf} @cindex @code{OFMT} variable @cindex output, format specifier@comma{} @code{OFMT} The built-in variable @code{OFMT} contains the default format specification @@ -9312,7 +9336,7 @@ the file name or command associated with it, and subsequent writes to the same file or command are appended to the previous writes. The file or pipe stays open until @command{awk} exits. -@cindex @code{close()} function +@cindexawkfunc{close} This implies that special steps are necessary in order to read the same file again from the beginning, or to rerun a shell command (rather than reading more output from the same command). The @code{close()} function @@ -9881,9 +9905,9 @@ upon the contents of the current input record. @cindex differences in @command{awk} and @command{gawk}, regexp constants @cindex dark corner, regexp constants, as arguments to user-defined functions -@cindex @code{gensub()} function (@command{gawk}) -@cindex @code{sub()} function -@cindex @code{gsub()} function +@cindexgawkfunc{gensub} +@cindexawkfunc{sub} +@cindexawkfunc{gsub} Constant regular expressions are also used as the first argument for the @code{gensub()}, @code{sub()}, and @code{gsub()} functions, as the second argument of the @code{match()} function, @@ -15553,19 +15577,19 @@ Return the arctangent of @code{@var{y} / @var{x}} in radians. You can use @samp{pi = atan2(0, -1)} to retrieve the value of @value{PI}. @item cos(@var{x}) -@cindex @code{cos()} function +@cindexawkfunc{cos} @cindex cosine Return the cosine of @var{x}, with @var{x} in radians. @item exp(@var{x}) -@cindex @code{exp()} function +@cindexawkfunc{exp} @cindex exponent Return the exponential of @var{x} (@code{e ^ @var{x}}) or report an error if @var{x} is out of range. The range of values @var{x} can have depends on your machine's floating-point representation. @item int(@var{x}) -@cindex @code{int()} function +@cindexawkfunc{int} @cindex round to nearest integer Return the nearest integer to @var{x}, located between @var{x} and zero and truncated toward zero. @@ -15574,13 +15598,13 @@ 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 log(@var{x}) -@cindex @code{log()} function +@cindexawkfunc{log} @cindex logarithm Return the natural logarithm of @var{x}, if @var{x} is positive; otherwise, report an error. @item rand() -@cindex @code{rand()} function +@cindexawkfunc{rand} @cindex random numbers, @code{rand()}/@code{srand()} functions Return a random number. The values of @code{rand()} are uniformly distributed between zero and one. @@ -15638,19 +15662,19 @@ use @code{srand()}. @end quotation @item sin(@var{x}) -@cindex @code{sin()} function +@cindexawkfunc{sin} @cindex sine Return the sine of @var{x}, with @var{x} in radians. @item sqrt(@var{x}) -@cindex @code{sqrt()} function +@cindexawkfunc{sqrt} @cindex square root Return the positive square root of @var{x}. @command{gawk} prints a warning message if @var{x} is negative. Thus, @code{sqrt(4)} is 2. @item srand(@r{[}@var{x}@r{]}) -@cindex @code{srand()} function +@cindexawkfunc{srand} Set the starting point, or seed, for generating random numbers to the value @var{x}. @@ -15709,10 +15733,10 @@ pound sign@w{ (@samp{#}):} @table @code @item asort(@var{source} @r{[}, @var{dest} @r{[}, @var{how} @r{]} @r{]}) # @itemx asorti(@var{source} @r{[}, @var{dest} @r{[}, @var{how} @r{]} @r{]}) # -@cindex @code{asorti()} function (@command{gawk}) +@cindexgawkfunc{asorti} @cindex sort array @cindex arrays, elements, retrieving number of -@cindex @code{asort()} function (@command{gawk}) +@cindexgawkfunc{asort} @cindex sort array indices These two functions are similar in behavior, so they are described together. @@ -15776,7 +15800,7 @@ a[3] = "middle" are not available in compatibility mode (@pxref{Options}). @item gensub(@var{regexp}, @var{replacement}, @var{how} @r{[}, @var{target}@r{]}) # -@cindex @code{gensub()} function (@command{gawk}) +@cindexgawkfunc{gensub} @cindex search and replace in strings @cindex substitute in string Search the target string @var{target} for matches of the regular @@ -15841,7 +15865,7 @@ is the original unchanged value of @var{target}. in compatibility mode (@pxref{Options}). @item gsub(@var{regexp}, @var{replacement} @r{[}, @var{target}@r{]}) -@cindex @code{gsub()} function +@cindexawkfunc{gsub} Search @var{target} for @emph{all} of the longest, leftmost, @emph{nonoverlapping} matching substrings it can find and replace them with @var{replacement}. @@ -15863,7 +15887,7 @@ As in @code{sub()}, the characters @samp{&} and @samp{\} are special, and the third argument must be assignable. @item index(@var{in}, @var{find}) -@cindex @code{index()} function +@cindexawkfunc{index} @cindex search in string @cindex find substring in string Search the string @var{in} for the first occurrence of the string @@ -15882,7 +15906,7 @@ If @var{find} is not found, @code{index()} returns zero. It is a fatal error to use a regexp constant for @var{find}. @item length(@r{[}@var{string}@r{]}) -@cindex @code{length()} function +@cindexawkfunc{length} @cindex string length @cindex length of string Return the number of characters in @var{string}. If @@ -15947,7 +15971,7 @@ If @option{--posix} is supplied, using an array argument is a fatal error (@pxref{Arrays}). @item match(@var{string}, @var{regexp} @r{[}, @var{array}@r{]}) -@cindex @code{match()} function +@cindexawkfunc{match} @cindex string, regular expression match @cindex match regexp in string Search @var{string} for the @@ -16064,7 +16088,7 @@ The @var{array} argument to @code{match()} is a using a third argument is a fatal error. @item patsplit(@var{string}, @var{array} @r{[}, @var{fieldpat} @r{[}, @var{seps} @r{]} @r{]}) # -@cindex @code{patsplit()} function (@command{gawk}) +@cindexgawkfunc{patsplit} @cindex split string into array Divide @var{string} into pieces defined by @var{fieldpat} @@ -16096,7 +16120,7 @@ The @code{patsplit()} function is a it is not available. @item split(@var{string}, @var{array} @r{[}, @var{fieldsep} @r{[}, @var{seps} @r{]} @r{]}) -@cindex @code{split()} function +@cindexawkfunc{split} Divide @var{string} into pieces separated by @var{fieldsep} and store the pieces in @var{array} and the separator strings in the @var{seps} array. The first piece is stored in @@ -16181,7 +16205,7 @@ If @var{string} does not match @var{fieldsep} at all (but is not null), @var{string}. @item sprintf(@var{format}, @var{expression1}, @dots{}) -@cindex @code{sprintf()} function +@cindexawkfunc{sprintf} @cindex formatting strings Return (without printing) the string that @code{printf} would have printed out with the same arguments @@ -16195,7 +16219,7 @@ pival = sprintf("pi = %.2f (approx.)", 22/7) @noindent assigns the string @w{@samp{pi = 3.14 (approx.)}} to the variable @code{pival}. -@cindex @code{strtonum()} function (@command{gawk}) +@cindexgawkfunc{strtonum} @cindex convert string to number @item strtonum(@var{str}) # Examine @var{str} and return its numeric value. If @var{str} @@ -16223,7 +16247,7 @@ for recognizing numbers (@pxref{Locales}). in compatibility mode (@pxref{Options}). @item sub(@var{regexp}, @var{replacement} @r{[}, @var{target}@r{]}) -@cindex @code{sub()} function +@cindexawkfunc{sub} @cindex replace in string Search @var{target}, which is treated as a string, for the leftmost, longest substring matched by the regular expression @var{regexp}. @@ -16324,7 +16348,7 @@ Finally, if the @var{regexp} is not a regexp constant, it is converted into a string, and then the value of that string is treated as the regexp to match. @item substr(@var{string}, @var{start} @r{[}, @var{length}@r{]}) -@cindex @code{substr()} function +@cindexawkfunc{substr} @cindex substring Return a @var{length}-character-long substring of @var{string}, starting at character number @var{start}. The first character of a @@ -16384,7 +16408,7 @@ string = substr(string, 1, 2) "CDE" substr(string, 6) @cindex case sensitivity, converting case @cindex strings, converting letter case @item tolower(@var{string}) -@cindex @code{tolower()} function +@cindexawkfunc{tolower} @cindex convert string to lower case Return a copy of @var{string}, with each uppercase character in the string replaced with its corresponding lowercase character. @@ -16392,7 +16416,7 @@ Nonalphabetic characters are left unchanged. For example, @code{tolower("MiXeD cAsE 123")} returns @code{"mixed case 123"}. @item toupper(@var{string}) -@cindex @code{toupper()} function +@cindexawkfunc{toupper} @cindex convert string to upper case Return a copy of @var{string}, with each lowercase character in the string replaced with its corresponding uppercase character. @@ -16826,7 +16850,7 @@ Optional parameters are enclosed in square brackets ([ ]): @table @code @item close(@var{filename} @r{[}, @var{how}@r{]}) -@cindex @code{close()} function +@cindexawkfunc{close} @cindex files, closing @cindex close file or coprocess Close the file @var{filename} for input or output. Alternatively, the @@ -16845,7 +16869,7 @@ not matter. which discusses this feature in more detail and gives an example. @item fflush(@r{[}@var{filename}@r{]}) -@cindex @code{fflush()} function +@cindexawkfunc{fflush} @cindex flush buffered output Flush any buffered output associated with @var{filename}, which is either a file opened for writing or a shell command for redirecting output to @@ -16905,7 +16929,7 @@ or if @var{filename} is not an open file, pipe, or coprocess. In such a case, @code{fflush()} returns @minus{}1, as well. @item system(@var{command}) -@cindex @code{system()} function +@cindexawkfunc{system} @cindex invoke shell command @cindex interacting with other programs Execute the operating-system @@ -17220,7 +17244,7 @@ Optional parameters are enclosed in square brackets ([ ]): @table @code @item mktime(@var{datespec}) -@cindex @code{mktime()} function (@command{gawk}) +@cindexgawkfunc{mktime} @cindex generate time values Turn @var{datespec} into a timestamp in the same form as is returned by @code{systime()}. It is similar to the function of the @@ -17251,7 +17275,7 @@ is out of range, @code{mktime()} returns @minus{}1. @cindex @code{PROCINFO} array @item strftime(@r{[}@var{format} @r{[}, @var{timestamp} @r{[}, @var{utc-flag}@r{]]]}) @c STARTOFRANGE strf -@cindex @code{strftime()} function (@command{gawk}) +@cindexgawkfunc{strftime} @cindex format time string Format the time specified by @var{timestamp} based on the contents of the @var{format} string and return the result. @@ -17269,10 +17293,10 @@ The default string value is @code{@w{"%a %b %e %H:%M:%S %Z %Y"}}. This format string produces output that is equivalent to that of the @command{date} utility. You can assign a new value to @code{PROCINFO["strftime"]} to -change the default format. +change the default format; see below for the various format directives. @item systime() -@cindex @code{systime()} function (@command{gawk}) +@cindexgawkfunc{systime} @cindex timestamps @cindex current system time Return the current time as the number of seconds since @@ -17731,32 +17755,32 @@ bitwise operations just described. They are: @cindex @command{gawk}, bitwise operations in @table @code -@cindex @code{and()} function (@command{gawk}) +@cindexgawkfunc{and} @cindex bitwise AND @item and(@var{v1}, @var{v2} @r{[}, @r{@dots{}]}) Return the bitwise AND of the arguments. There must be at least two. -@cindex @code{compl()} function (@command{gawk}) +@cindexgawkfunc{compl} @cindex bitwise complement @item compl(@var{val}) Return the bitwise complement of @var{val}. -@cindex @code{lshift()} function (@command{gawk}) +@cindexgawkfunc{lshift} @cindex left shift @item lshift(@var{val}, @var{count}) Return the value of @var{val}, shifted left by @var{count} bits. -@cindex @code{or()} function (@command{gawk}) +@cindexgawkfunc{or} @cindex bitwise OR @item or(@var{v1}, @var{v2} @r{[}, @r{@dots{}]}) Return the bitwise OR of the arguments. There must be at least two. -@cindex @code{rshift()} function (@command{gawk}) +@cindexgawkfunc{rshift} @cindex right shift @item rshift(@var{val}, @var{count}) Return the value of @var{val}, shifted right by @var{count} bits. -@cindex @code{xor()} function (@command{gawk}) +@cindexgawkfunc{xor} @cindex bitwise XOR @item xor(@var{v1}, @var{v2} @r{[}, @r{@dots{}]}) Return the bitwise XOR of the arguments. There must be at least two. @@ -17885,7 +17909,7 @@ that traverses every element of a true multidimensional array (@pxref{Arrays of Arrays}). @table @code -@cindex @code{isarray()} function (@command{gawk}) +@cindexgawkfunc{isarray} @cindex scalar or array @item isarray(@var{x}) Return a true value if @var{x} is an array. Otherwise return false. @@ -17920,7 +17944,7 @@ for the full story. Optional parameters are enclosed in square brackets ([ ]): @table @code -@cindex @code{bindtextdomain()} function (@command{gawk}) +@cindexgawkfunc{bindtextdomain} @cindex set directory of message catalogs @item bindtextdomain(@var{directory} @r{[}, @var{domain}@r{]}) Set the directory in which @@ -17934,7 +17958,7 @@ If @var{directory} is the null string (@code{""}), then @code{bindtextdomain()} returns the current binding for the given @var{domain}. -@cindex @code{dcgettext()} function (@command{gawk}) +@cindexgawkfunc{dcgettext} @cindex translate string @item dcgettext(@var{string} @r{[}, @var{domain} @r{[}, @var{category}@r{]]}) Return the translation of @var{string} in @@ -17942,7 +17966,7 @@ text domain @var{domain} for locale category @var{category}. The default value for @var{domain} is the current value of @code{TEXTDOMAIN}. The default value for @var{category} is @code{"LC_MESSAGES"}. -@cindex @code{dcngettext()} function (@command{gawk}) +@cindexgawkfunc{dcngettext} @item dcngettext(@var{string1}, @var{string2}, @var{number} @r{[}, @var{domain} @r{[}, @var{category}@r{]]}) Return the plural form used for @var{number} of the translation of @var{string1} and @var{string2} in text domain @@ -25524,9 +25548,9 @@ sorted array traversal is not the default. @subsection Sorting Array Values and Indices with @command{gawk} @cindex arrays, sorting -@cindex @code{asort()} function (@command{gawk}) +@cindexgawkfunc{asort} @cindex @code{asort()} function (@command{gawk}), arrays@comma{} sorting -@cindex @code{asorti()} function (@command{gawk}) +@cindexgawkfunc{asorti} @cindex @code{asorti()} function (@command{gawk}), arrays@comma{} sorting @cindex sort function, arrays, sorting In most @command{awk} implementations, sorting an array requires writing @@ -26506,7 +26530,7 @@ String constants marked with a leading underscore are candidates for translation at runtime. String constants without a leading underscore are not translated. -@cindex @code{dcgettext()} function (@command{gawk}) +@cindexgawkfunc{dcgettext} @item dcgettext(@var{string} @r{[}, @var{domain} @r{[}, @var{category}@r{]]}) Return the translation of @var{string} in text domain @var{domain} for locale category @var{category}. @@ -26532,7 +26556,7 @@ chosen to be simple and to allow for reasonable @command{awk}-style default arguments. @end quotation -@cindex @code{dcngettext()} function (@command{gawk}) +@cindexgawkfunc{dcngettext} @item dcngettext(@var{string1}, @var{string2}, @var{number} @r{[}, @var{domain} @r{[}, @var{category}@r{]]}) Return the plural form used for @var{number} of the translation of @var{string1} and @var{string2} in text domain @@ -26548,7 +26572,7 @@ The same remarks about argument order as for the @code{dcgettext()} function app @cindex files, @code{.gmo}, specifying directory of @cindex message object files, specifying directory of @cindex files, message object, specifying directory of -@cindex @code{bindtextdomain()} function (@command{gawk}) +@cindexgawkfunc{bindtextdomain} @item bindtextdomain(@var{directory} @r{[}, @var{domain}@r{]}) Change the directory in which @code{gettext} looks for @file{.gmo} files, in case they diff --git a/doc/gawktexi.in b/doc/gawktexi.in index bd604300..7ca73834 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -129,6 +129,30 @@ @end macro @end ifnothtml +@c Indexing macros +@ifinfo + +@macro cindexawkfunc{name} +@cindex @code{\name\} +@end macro + +@macro cindexgawkfunc{name} +@cindex @code{\name\} +@end macro + +@end ifinfo + +@ifnotinfo + +@macro cindexawkfunc{name} +@cindex @code{\name\()} function +@end macro + +@macro cindexgawkfunc{name} +@cindex @code{\name\()} function (@command{gawk}) +@end macro +@end ifnotinfo + @ignore Some comments on the layout for TeX. 1. Use at least texinfo.tex 2014-01-30.15 @@ -4665,8 +4689,8 @@ means it matches any string that starts with @samp{P} or contains a digit. The alternation applies to the largest possible regexps on either side. -@cindex @code{()} (parentheses) -@cindex parentheses @code{()} +@cindex @code{()} (parentheses), regexp operator +@cindex parentheses @code{()}, regexp operator @item (@dots{}) Parentheses are used for grouping in regular expressions, as in arithmetic. They can be used to concatenate regular expressions @@ -5135,7 +5159,7 @@ This works in any POSIX-compliant @command{awk}. @cindex tilde (@code{~}), @code{~} operator @cindex @code{!} (exclamation point), @code{!~} operator @cindex exclamation point (@code{!}), @code{!~} operator -@cindex @code{IGNORECASE} variable, @code{~} and @code{!~} operators +@cindex @code{IGNORECASE} variable, with @code{~} and @code{!~} operators @cindex @command{gawk}, @code{IGNORECASE} variable in @c @cindex variables, @code{IGNORECASE} Another method, specific to @command{gawk}, is to set the variable @@ -7928,7 +7952,7 @@ numbers can be formatted. The different format specifications are discussed more fully in @ref{Control Letters}. -@cindex @code{sprintf()} function +@cindexawkfunc{sprintf} @cindex @code{OFMT} variable @cindex output, format specifier@comma{} @code{OFMT} The built-in variable @code{OFMT} contains the default format specification @@ -8892,7 +8916,7 @@ the file name or command associated with it, and subsequent writes to the same file or command are appended to the previous writes. The file or pipe stays open until @command{awk} exits. -@cindex @code{close()} function +@cindexawkfunc{close} This implies that special steps are necessary in order to read the same file again from the beginning, or to rerun a shell command (rather than reading more output from the same command). The @code{close()} function @@ -9370,9 +9394,9 @@ upon the contents of the current input record. @cindex differences in @command{awk} and @command{gawk}, regexp constants @cindex dark corner, regexp constants, as arguments to user-defined functions -@cindex @code{gensub()} function (@command{gawk}) -@cindex @code{sub()} function -@cindex @code{gsub()} function +@cindexgawkfunc{gensub} +@cindexawkfunc{sub} +@cindexawkfunc{gsub} Constant regular expressions are also used as the first argument for the @code{gensub()}, @code{sub()}, and @code{gsub()} functions, as the second argument of the @code{match()} function, @@ -14884,19 +14908,19 @@ Return the arctangent of @code{@var{y} / @var{x}} in radians. You can use @samp{pi = atan2(0, -1)} to retrieve the value of @value{PI}. @item cos(@var{x}) -@cindex @code{cos()} function +@cindexawkfunc{cos} @cindex cosine Return the cosine of @var{x}, with @var{x} in radians. @item exp(@var{x}) -@cindex @code{exp()} function +@cindexawkfunc{exp} @cindex exponent Return the exponential of @var{x} (@code{e ^ @var{x}}) or report an error if @var{x} is out of range. The range of values @var{x} can have depends on your machine's floating-point representation. @item int(@var{x}) -@cindex @code{int()} function +@cindexawkfunc{int} @cindex round to nearest integer Return the nearest integer to @var{x}, located between @var{x} and zero and truncated toward zero. @@ -14905,13 +14929,13 @@ 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 log(@var{x}) -@cindex @code{log()} function +@cindexawkfunc{log} @cindex logarithm Return the natural logarithm of @var{x}, if @var{x} is positive; otherwise, report an error. @item rand() -@cindex @code{rand()} function +@cindexawkfunc{rand} @cindex random numbers, @code{rand()}/@code{srand()} functions Return a random number. The values of @code{rand()} are uniformly distributed between zero and one. @@ -14969,19 +14993,19 @@ use @code{srand()}. @end quotation @item sin(@var{x}) -@cindex @code{sin()} function +@cindexawkfunc{sin} @cindex sine Return the sine of @var{x}, with @var{x} in radians. @item sqrt(@var{x}) -@cindex @code{sqrt()} function +@cindexawkfunc{sqrt} @cindex square root Return the positive square root of @var{x}. @command{gawk} prints a warning message if @var{x} is negative. Thus, @code{sqrt(4)} is 2. @item srand(@r{[}@var{x}@r{]}) -@cindex @code{srand()} function +@cindexawkfunc{srand} Set the starting point, or seed, for generating random numbers to the value @var{x}. @@ -15040,10 +15064,10 @@ pound sign@w{ (@samp{#}):} @table @code @item asort(@var{source} @r{[}, @var{dest} @r{[}, @var{how} @r{]} @r{]}) # @itemx asorti(@var{source} @r{[}, @var{dest} @r{[}, @var{how} @r{]} @r{]}) # -@cindex @code{asorti()} function (@command{gawk}) +@cindexgawkfunc{asorti} @cindex sort array @cindex arrays, elements, retrieving number of -@cindex @code{asort()} function (@command{gawk}) +@cindexgawkfunc{asort} @cindex sort array indices These two functions are similar in behavior, so they are described together. @@ -15107,7 +15131,7 @@ a[3] = "middle" are not available in compatibility mode (@pxref{Options}). @item gensub(@var{regexp}, @var{replacement}, @var{how} @r{[}, @var{target}@r{]}) # -@cindex @code{gensub()} function (@command{gawk}) +@cindexgawkfunc{gensub} @cindex search and replace in strings @cindex substitute in string Search the target string @var{target} for matches of the regular @@ -15172,7 +15196,7 @@ is the original unchanged value of @var{target}. in compatibility mode (@pxref{Options}). @item gsub(@var{regexp}, @var{replacement} @r{[}, @var{target}@r{]}) -@cindex @code{gsub()} function +@cindexawkfunc{gsub} Search @var{target} for @emph{all} of the longest, leftmost, @emph{nonoverlapping} matching substrings it can find and replace them with @var{replacement}. @@ -15194,7 +15218,7 @@ As in @code{sub()}, the characters @samp{&} and @samp{\} are special, and the third argument must be assignable. @item index(@var{in}, @var{find}) -@cindex @code{index()} function +@cindexawkfunc{index} @cindex search in string @cindex find substring in string Search the string @var{in} for the first occurrence of the string @@ -15213,7 +15237,7 @@ If @var{find} is not found, @code{index()} returns zero. It is a fatal error to use a regexp constant for @var{find}. @item length(@r{[}@var{string}@r{]}) -@cindex @code{length()} function +@cindexawkfunc{length} @cindex string length @cindex length of string Return the number of characters in @var{string}. If @@ -15278,7 +15302,7 @@ If @option{--posix} is supplied, using an array argument is a fatal error (@pxref{Arrays}). @item match(@var{string}, @var{regexp} @r{[}, @var{array}@r{]}) -@cindex @code{match()} function +@cindexawkfunc{match} @cindex string, regular expression match @cindex match regexp in string Search @var{string} for the @@ -15395,7 +15419,7 @@ The @var{array} argument to @code{match()} is a using a third argument is a fatal error. @item patsplit(@var{string}, @var{array} @r{[}, @var{fieldpat} @r{[}, @var{seps} @r{]} @r{]}) # -@cindex @code{patsplit()} function (@command{gawk}) +@cindexgawkfunc{patsplit} @cindex split string into array Divide @var{string} into pieces defined by @var{fieldpat} @@ -15427,7 +15451,7 @@ The @code{patsplit()} function is a it is not available. @item split(@var{string}, @var{array} @r{[}, @var{fieldsep} @r{[}, @var{seps} @r{]} @r{]}) -@cindex @code{split()} function +@cindexawkfunc{split} Divide @var{string} into pieces separated by @var{fieldsep} and store the pieces in @var{array} and the separator strings in the @var{seps} array. The first piece is stored in @@ -15512,7 +15536,7 @@ If @var{string} does not match @var{fieldsep} at all (but is not null), @var{string}. @item sprintf(@var{format}, @var{expression1}, @dots{}) -@cindex @code{sprintf()} function +@cindexawkfunc{sprintf} @cindex formatting strings Return (without printing) the string that @code{printf} would have printed out with the same arguments @@ -15526,7 +15550,7 @@ pival = sprintf("pi = %.2f (approx.)", 22/7) @noindent assigns the string @w{@samp{pi = 3.14 (approx.)}} to the variable @code{pival}. -@cindex @code{strtonum()} function (@command{gawk}) +@cindexgawkfunc{strtonum} @cindex convert string to number @item strtonum(@var{str}) # Examine @var{str} and return its numeric value. If @var{str} @@ -15554,7 +15578,7 @@ for recognizing numbers (@pxref{Locales}). in compatibility mode (@pxref{Options}). @item sub(@var{regexp}, @var{replacement} @r{[}, @var{target}@r{]}) -@cindex @code{sub()} function +@cindexawkfunc{sub} @cindex replace in string Search @var{target}, which is treated as a string, for the leftmost, longest substring matched by the regular expression @var{regexp}. @@ -15655,7 +15679,7 @@ Finally, if the @var{regexp} is not a regexp constant, it is converted into a string, and then the value of that string is treated as the regexp to match. @item substr(@var{string}, @var{start} @r{[}, @var{length}@r{]}) -@cindex @code{substr()} function +@cindexawkfunc{substr} @cindex substring Return a @var{length}-character-long substring of @var{string}, starting at character number @var{start}. The first character of a @@ -15715,7 +15739,7 @@ string = substr(string, 1, 2) "CDE" substr(string, 6) @cindex case sensitivity, converting case @cindex strings, converting letter case @item tolower(@var{string}) -@cindex @code{tolower()} function +@cindexawkfunc{tolower} @cindex convert string to lower case Return a copy of @var{string}, with each uppercase character in the string replaced with its corresponding lowercase character. @@ -15723,7 +15747,7 @@ Nonalphabetic characters are left unchanged. For example, @code{tolower("MiXeD cAsE 123")} returns @code{"mixed case 123"}. @item toupper(@var{string}) -@cindex @code{toupper()} function +@cindexawkfunc{toupper} @cindex convert string to upper case Return a copy of @var{string}, with each lowercase character in the string replaced with its corresponding uppercase character. @@ -16124,7 +16148,7 @@ Optional parameters are enclosed in square brackets ([ ]): @table @code @item close(@var{filename} @r{[}, @var{how}@r{]}) -@cindex @code{close()} function +@cindexawkfunc{close} @cindex files, closing @cindex close file or coprocess Close the file @var{filename} for input or output. Alternatively, the @@ -16143,7 +16167,7 @@ not matter. which discusses this feature in more detail and gives an example. @item fflush(@r{[}@var{filename}@r{]}) -@cindex @code{fflush()} function +@cindexawkfunc{fflush} @cindex flush buffered output Flush any buffered output associated with @var{filename}, which is either a file opened for writing or a shell command for redirecting output to @@ -16203,7 +16227,7 @@ or if @var{filename} is not an open file, pipe, or coprocess. In such a case, @code{fflush()} returns @minus{}1, as well. @item system(@var{command}) -@cindex @code{system()} function +@cindexawkfunc{system} @cindex invoke shell command @cindex interacting with other programs Execute the operating-system @@ -16390,7 +16414,7 @@ Optional parameters are enclosed in square brackets ([ ]): @table @code @item mktime(@var{datespec}) -@cindex @code{mktime()} function (@command{gawk}) +@cindexgawkfunc{mktime} @cindex generate time values Turn @var{datespec} into a timestamp in the same form as is returned by @code{systime()}. It is similar to the function of the @@ -16421,7 +16445,7 @@ is out of range, @code{mktime()} returns @minus{}1. @cindex @code{PROCINFO} array @item strftime(@r{[}@var{format} @r{[}, @var{timestamp} @r{[}, @var{utc-flag}@r{]]]}) @c STARTOFRANGE strf -@cindex @code{strftime()} function (@command{gawk}) +@cindexgawkfunc{strftime} @cindex format time string Format the time specified by @var{timestamp} based on the contents of the @var{format} string and return the result. @@ -16439,10 +16463,10 @@ The default string value is @code{@w{"%a %b %e %H:%M:%S %Z %Y"}}. This format string produces output that is equivalent to that of the @command{date} utility. You can assign a new value to @code{PROCINFO["strftime"]} to -change the default format. +change the default format; see below for the various format directives. @item systime() -@cindex @code{systime()} function (@command{gawk}) +@cindexgawkfunc{systime} @cindex timestamps @cindex current system time Return the current time as the number of seconds since @@ -16901,32 +16925,32 @@ bitwise operations just described. They are: @cindex @command{gawk}, bitwise operations in @table @code -@cindex @code{and()} function (@command{gawk}) +@cindexgawkfunc{and} @cindex bitwise AND @item and(@var{v1}, @var{v2} @r{[}, @r{@dots{}]}) Return the bitwise AND of the arguments. There must be at least two. -@cindex @code{compl()} function (@command{gawk}) +@cindexgawkfunc{compl} @cindex bitwise complement @item compl(@var{val}) Return the bitwise complement of @var{val}. -@cindex @code{lshift()} function (@command{gawk}) +@cindexgawkfunc{lshift} @cindex left shift @item lshift(@var{val}, @var{count}) Return the value of @var{val}, shifted left by @var{count} bits. -@cindex @code{or()} function (@command{gawk}) +@cindexgawkfunc{or} @cindex bitwise OR @item or(@var{v1}, @var{v2} @r{[}, @r{@dots{}]}) Return the bitwise OR of the arguments. There must be at least two. -@cindex @code{rshift()} function (@command{gawk}) +@cindexgawkfunc{rshift} @cindex right shift @item rshift(@var{val}, @var{count}) Return the value of @var{val}, shifted right by @var{count} bits. -@cindex @code{xor()} function (@command{gawk}) +@cindexgawkfunc{xor} @cindex bitwise XOR @item xor(@var{v1}, @var{v2} @r{[}, @r{@dots{}]}) Return the bitwise XOR of the arguments. There must be at least two. @@ -17055,7 +17079,7 @@ that traverses every element of a true multidimensional array (@pxref{Arrays of Arrays}). @table @code -@cindex @code{isarray()} function (@command{gawk}) +@cindexgawkfunc{isarray} @cindex scalar or array @item isarray(@var{x}) Return a true value if @var{x} is an array. Otherwise return false. @@ -17090,7 +17114,7 @@ for the full story. Optional parameters are enclosed in square brackets ([ ]): @table @code -@cindex @code{bindtextdomain()} function (@command{gawk}) +@cindexgawkfunc{bindtextdomain} @cindex set directory of message catalogs @item bindtextdomain(@var{directory} @r{[}, @var{domain}@r{]}) Set the directory in which @@ -17104,7 +17128,7 @@ If @var{directory} is the null string (@code{""}), then @code{bindtextdomain()} returns the current binding for the given @var{domain}. -@cindex @code{dcgettext()} function (@command{gawk}) +@cindexgawkfunc{dcgettext} @cindex translate string @item dcgettext(@var{string} @r{[}, @var{domain} @r{[}, @var{category}@r{]]}) Return the translation of @var{string} in @@ -17112,7 +17136,7 @@ text domain @var{domain} for locale category @var{category}. The default value for @var{domain} is the current value of @code{TEXTDOMAIN}. The default value for @var{category} is @code{"LC_MESSAGES"}. -@cindex @code{dcngettext()} function (@command{gawk}) +@cindexgawkfunc{dcngettext} @item dcngettext(@var{string1}, @var{string2}, @var{number} @r{[}, @var{domain} @r{[}, @var{category}@r{]]}) Return the plural form used for @var{number} of the translation of @var{string1} and @var{string2} in text domain @@ -24665,9 +24689,9 @@ sorted array traversal is not the default. @subsection Sorting Array Values and Indices with @command{gawk} @cindex arrays, sorting -@cindex @code{asort()} function (@command{gawk}) +@cindexgawkfunc{asort} @cindex @code{asort()} function (@command{gawk}), arrays@comma{} sorting -@cindex @code{asorti()} function (@command{gawk}) +@cindexgawkfunc{asorti} @cindex @code{asorti()} function (@command{gawk}), arrays@comma{} sorting @cindex sort function, arrays, sorting In most @command{awk} implementations, sorting an array requires writing @@ -25647,7 +25671,7 @@ String constants marked with a leading underscore are candidates for translation at runtime. String constants without a leading underscore are not translated. -@cindex @code{dcgettext()} function (@command{gawk}) +@cindexgawkfunc{dcgettext} @item dcgettext(@var{string} @r{[}, @var{domain} @r{[}, @var{category}@r{]]}) Return the translation of @var{string} in text domain @var{domain} for locale category @var{category}. @@ -25673,7 +25697,7 @@ chosen to be simple and to allow for reasonable @command{awk}-style default arguments. @end quotation -@cindex @code{dcngettext()} function (@command{gawk}) +@cindexgawkfunc{dcngettext} @item dcngettext(@var{string1}, @var{string2}, @var{number} @r{[}, @var{domain} @r{[}, @var{category}@r{]]}) Return the plural form used for @var{number} of the translation of @var{string1} and @var{string2} in text domain @@ -25689,7 +25713,7 @@ The same remarks about argument order as for the @code{dcgettext()} function app @cindex files, @code{.gmo}, specifying directory of @cindex message object files, specifying directory of @cindex files, message object, specifying directory of -@cindex @code{bindtextdomain()} function (@command{gawk}) +@cindexgawkfunc{bindtextdomain} @item bindtextdomain(@var{directory} @r{[}, @var{domain}@r{]}) Change the directory in which @code{gettext} looks for @file{.gmo} files, in case they -- cgit v1.2.3 From 17cb726be0dea75864a89d31054459c02702786e Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 27 Mar 2014 22:28:23 +0200 Subject: Add note that lookup of PROCINFO can fail. --- doc/ChangeLog | 5 ++ doc/gawk.info | 217 +++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 7 ++ doc/gawktexi.in | 7 ++ 4 files changed, 130 insertions(+), 106 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 84750e4a..c8781f4e 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -4,6 +4,11 @@ functions are indexed the way I want in TeX and the way Eli wants in Info. + Unrelated: + + * gawktexi.in: Add a note in extension chapter that lookup of + PROCINFO can fail. + 2014-03-27 Eli Zaretskii * gawktexi.in: First round of massive indexing improvements. diff --git a/doc/gawk.info b/doc/gawk.info index 033a804e..ea2a718f 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -22812,6 +22812,11 @@ termed a "symbol table". However, with the exception of the `PROCINFO' array, an extension cannot change any of those variables. + NOTE: It is possible for the lookup of `PROCINFO' to fail. This + happens if the `awk' program being run does not reference + `PROCINFO'; in this case `gawk' doesn't bother to create the array + and populate it. +  File: gawk.info, Node: Symbol table by cookie, Next: Cached values, Prev: Symbol table by name, Up: Symbol Table Access @@ -33498,111 +33503,111 @@ Node: Updating `ERRNO'919058 Node: Accessing Parameters919797 Node: Symbol Table Access921027 Node: Symbol table by name921541 -Node: Symbol table by cookie923290 -Ref: Symbol table by cookie-Footnote-1927422 -Node: Cached values927485 -Ref: Cached values-Footnote-1930975 -Node: Array Manipulation931066 -Ref: Array Manipulation-Footnote-1932164 -Node: Array Data Types932203 -Ref: Array Data Types-Footnote-1934906 -Node: Array Functions934998 -Node: Flattening Arrays938834 -Node: Creating Arrays945686 -Node: Extension API Variables950411 -Node: Extension Versioning951047 -Node: Extension API Informational Variables952948 -Node: Extension API Boilerplate954034 -Node: Finding Extensions957838 -Node: Extension Example958398 -Node: Internal File Description959128 -Node: Internal File Ops963219 -Ref: Internal File Ops-Footnote-1974728 -Node: Using Internal File Ops974868 -Ref: Using Internal File Ops-Footnote-1977221 -Node: Extension Samples977487 -Node: Extension Sample File Functions979011 -Node: Extension Sample Fnmatch987496 -Node: Extension Sample Fork989265 -Node: Extension Sample Inplace990478 -Node: Extension Sample Ord992256 -Node: Extension Sample Readdir993092 -Node: Extension Sample Revout994624 -Node: Extension Sample Rev2way995217 -Node: Extension Sample Read write array995907 -Node: Extension Sample Readfile997790 -Node: Extension Sample API Tests998608 -Node: Extension Sample Time999133 -Node: gawkextlib1000497 -Node: Language History1003278 -Node: V7/SVR3.11004871 -Node: SVR41007191 -Node: POSIX1008633 -Node: BTL1010019 -Node: POSIX/GNU1010753 -Node: Feature History1016352 -Node: Common Extensions1029328 -Node: Ranges and Locales1030640 -Ref: Ranges and Locales-Footnote-11035257 -Ref: Ranges and Locales-Footnote-21035284 -Ref: Ranges and Locales-Footnote-31035518 -Node: Contributors1035739 -Node: Installation1041120 -Node: Gawk Distribution1042014 -Node: Getting1042498 -Node: Extracting1043324 -Node: Distribution contents1045016 -Node: Unix Installation1050721 -Node: Quick Installation1051338 -Node: Additional Configuration Options1053784 -Node: Configuration Philosophy1055520 -Node: Non-Unix Installation1057874 -Node: PC Installation1058332 -Node: PC Binary Installation1059631 -Node: PC Compiling1061479 -Node: PC Testing1064423 -Node: PC Using1065599 -Node: Cygwin1069767 -Node: MSYS1070576 -Node: VMS Installation1071090 -Node: VMS Compilation1071854 -Ref: VMS Compilation-Footnote-11073106 -Node: VMS Dynamic Extensions1073164 -Node: VMS Installation Details1074537 -Node: VMS Running1076788 -Node: VMS GNV1079622 -Node: VMS Old Gawk1080345 -Node: Bugs1080815 -Node: Other Versions1084733 -Node: Notes1090817 -Node: Compatibility Mode1091617 -Node: Additions1092400 -Node: Accessing The Source1093327 -Node: Adding Code1094767 -Node: New Ports1100812 -Node: Derived Files1104947 -Ref: Derived Files-Footnote-11110268 -Ref: Derived Files-Footnote-21110302 -Ref: Derived Files-Footnote-31110902 -Node: Future Extensions1111000 -Node: Implementation Limitations1111583 -Node: Extension Design1112835 -Node: Old Extension Problems1113989 -Ref: Old Extension Problems-Footnote-11115497 -Node: Extension New Mechanism Goals1115554 -Ref: Extension New Mechanism Goals-Footnote-11118919 -Node: Extension Other Design Decisions1119105 -Node: Extension Future Growth1121211 -Node: Old Extension Mechanism1122047 -Node: Basic Concepts1123787 -Node: Basic High Level1124468 -Ref: figure-general-flow1124739 -Ref: figure-process-flow1125338 -Ref: Basic High Level-Footnote-11128567 -Node: Basic Data Typing1128752 -Node: Glossary1132107 -Node: Copying1157336 -Node: GNU Free Documentation License1194893 -Node: Index1220030 +Node: Symbol table by cookie923517 +Ref: Symbol table by cookie-Footnote-1927649 +Node: Cached values927712 +Ref: Cached values-Footnote-1931202 +Node: Array Manipulation931293 +Ref: Array Manipulation-Footnote-1932391 +Node: Array Data Types932430 +Ref: Array Data Types-Footnote-1935133 +Node: Array Functions935225 +Node: Flattening Arrays939061 +Node: Creating Arrays945913 +Node: Extension API Variables950638 +Node: Extension Versioning951274 +Node: Extension API Informational Variables953175 +Node: Extension API Boilerplate954261 +Node: Finding Extensions958065 +Node: Extension Example958625 +Node: Internal File Description959355 +Node: Internal File Ops963446 +Ref: Internal File Ops-Footnote-1974955 +Node: Using Internal File Ops975095 +Ref: Using Internal File Ops-Footnote-1977448 +Node: Extension Samples977714 +Node: Extension Sample File Functions979238 +Node: Extension Sample Fnmatch987723 +Node: Extension Sample Fork989492 +Node: Extension Sample Inplace990705 +Node: Extension Sample Ord992483 +Node: Extension Sample Readdir993319 +Node: Extension Sample Revout994851 +Node: Extension Sample Rev2way995444 +Node: Extension Sample Read write array996134 +Node: Extension Sample Readfile998017 +Node: Extension Sample API Tests998835 +Node: Extension Sample Time999360 +Node: gawkextlib1000724 +Node: Language History1003505 +Node: V7/SVR3.11005098 +Node: SVR41007418 +Node: POSIX1008860 +Node: BTL1010246 +Node: POSIX/GNU1010980 +Node: Feature History1016579 +Node: Common Extensions1029555 +Node: Ranges and Locales1030867 +Ref: Ranges and Locales-Footnote-11035484 +Ref: Ranges and Locales-Footnote-21035511 +Ref: Ranges and Locales-Footnote-31035745 +Node: Contributors1035966 +Node: Installation1041347 +Node: Gawk Distribution1042241 +Node: Getting1042725 +Node: Extracting1043551 +Node: Distribution contents1045243 +Node: Unix Installation1050948 +Node: Quick Installation1051565 +Node: Additional Configuration Options1054011 +Node: Configuration Philosophy1055747 +Node: Non-Unix Installation1058101 +Node: PC Installation1058559 +Node: PC Binary Installation1059858 +Node: PC Compiling1061706 +Node: PC Testing1064650 +Node: PC Using1065826 +Node: Cygwin1069994 +Node: MSYS1070803 +Node: VMS Installation1071317 +Node: VMS Compilation1072081 +Ref: VMS Compilation-Footnote-11073333 +Node: VMS Dynamic Extensions1073391 +Node: VMS Installation Details1074764 +Node: VMS Running1077015 +Node: VMS GNV1079849 +Node: VMS Old Gawk1080572 +Node: Bugs1081042 +Node: Other Versions1084960 +Node: Notes1091044 +Node: Compatibility Mode1091844 +Node: Additions1092627 +Node: Accessing The Source1093554 +Node: Adding Code1094994 +Node: New Ports1101039 +Node: Derived Files1105174 +Ref: Derived Files-Footnote-11110495 +Ref: Derived Files-Footnote-21110529 +Ref: Derived Files-Footnote-31111129 +Node: Future Extensions1111227 +Node: Implementation Limitations1111810 +Node: Extension Design1113062 +Node: Old Extension Problems1114216 +Ref: Old Extension Problems-Footnote-11115724 +Node: Extension New Mechanism Goals1115781 +Ref: Extension New Mechanism Goals-Footnote-11119146 +Node: Extension Other Design Decisions1119332 +Node: Extension Future Growth1121438 +Node: Old Extension Mechanism1122274 +Node: Basic Concepts1124014 +Node: Basic High Level1124695 +Ref: figure-general-flow1124966 +Ref: figure-process-flow1125565 +Ref: Basic High Level-Footnote-11128794 +Node: Basic Data Typing1128979 +Node: Glossary1132334 +Node: Copying1157563 +Node: GNU Free Documentation License1195120 +Node: Index1220257  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index f3c54551..6c41c99a 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -30923,6 +30923,13 @@ An extension can look up the value of @command{gawk}'s special variables. However, with the exception of the @code{PROCINFO} array, an extension cannot change any of those variables. +@quotation NOTE +It is possible for the lookup of @code{PROCINFO} to fail. This happens if +the @command{awk} program being run does not reference @code{PROCINFO}; +in this case @command{gawk} doesn't bother to create the array and +populate it. +@end quotation + @node Symbol table by cookie @subsubsection Variable Access and Update by Cookie diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 7ca73834..db949be2 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -30064,6 +30064,13 @@ An extension can look up the value of @command{gawk}'s special variables. However, with the exception of the @code{PROCINFO} array, an extension cannot change any of those variables. +@quotation NOTE +It is possible for the lookup of @code{PROCINFO} to fail. This happens if +the @command{awk} program being run does not reference @code{PROCINFO}; +in this case @command{gawk} doesn't bother to create the array and +populate it. +@end quotation + @node Symbol table by cookie @subsubsection Variable Access and Update by Cookie -- cgit v1.2.3 From 4d396858eb897f2bb6d318b851a369ee92e50147 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 27 Mar 2014 22:49:58 +0200 Subject: Add input parser to readfile extension, document it and test it. --- NEWS | 5 +- doc/gawk.info | 157 ++++++++++++++++++++++++++----------------------- doc/gawk.texi | 8 ++- doc/gawktexi.in | 8 ++- extension/ChangeLog | 6 ++ extension/readfile.3am | 20 ++++++- extension/readfile.c | 148 +++++++++++++++++++++++++++++++++++++++++----- test/ChangeLog | 5 ++ test/Makefile.am | 8 ++- test/Makefile.in | 8 ++- test/readfile2.awk | 12 ++++ test/readfile2.ok | 21 +++++++ 12 files changed, 308 insertions(+), 98 deletions(-) create mode 100644 test/readfile2.awk create mode 100644 test/readfile2.ok diff --git a/NEWS b/NEWS index c6a4f216..423a46f0 100644 --- a/NEWS +++ b/NEWS @@ -45,7 +45,10 @@ Changes from 4.1.0 to 4.1.1 If the thousands separator is a string, it will be correctly added to decimal numbers. -14. A number of bugs have been fixed. See the ChangeLog. +14. The readfile extension now has an input parser that will read whole + files as a single record. + +15. A number of bugs have been fixed. See the ChangeLog. Changes from 4.0.2 to 4.1.0 --------------------------- diff --git a/doc/gawk.info b/doc/gawk.info index ea2a718f..6bff2719 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -24830,7 +24830,8 @@ File: gawk.info, Node: Extension Sample Readfile, Next: Extension Sample API T 16.7.10 Reading An Entire File ------------------------------ -The `readfile' extension adds a single function named `readfile()': +The `readfile' extension adds a single function named `readfile()', and +an input parser: `@load "readfile"' This is how you load the extension. @@ -24840,6 +24841,12 @@ The `readfile' extension adds a single function named `readfile()': a string containing the entire contents of the requested file. Upon error, the function returns the empty string and sets `ERRNO'. +`BEGIN { PROCINFO["readfile"] = 1 }' + In addition, the extension adds an input parser that is activated + if `PROCINFO["readfile"]' exists. When activated, each input file + is returned in its entirety as `$0'. `RT' is set to the null + string. + Here is an example: @load "readfile" @@ -32421,7 +32428,7 @@ Index * readdir extension: Extension Sample Readdir. (line 9) * readfile() extension function: Extension Sample Readfile. - (line 11) + (line 12) * readfile() user-defined function: Readfile Function. (line 30) * reading input files: Reading Files. (line 6) * recipe for a programming language: History. (line 6) @@ -33536,78 +33543,78 @@ Node: Extension Sample Revout994851 Node: Extension Sample Rev2way995444 Node: Extension Sample Read write array996134 Node: Extension Sample Readfile998017 -Node: Extension Sample API Tests998835 -Node: Extension Sample Time999360 -Node: gawkextlib1000724 -Node: Language History1003505 -Node: V7/SVR3.11005098 -Node: SVR41007418 -Node: POSIX1008860 -Node: BTL1010246 -Node: POSIX/GNU1010980 -Node: Feature History1016579 -Node: Common Extensions1029555 -Node: Ranges and Locales1030867 -Ref: Ranges and Locales-Footnote-11035484 -Ref: Ranges and Locales-Footnote-21035511 -Ref: Ranges and Locales-Footnote-31035745 -Node: Contributors1035966 -Node: Installation1041347 -Node: Gawk Distribution1042241 -Node: Getting1042725 -Node: Extracting1043551 -Node: Distribution contents1045243 -Node: Unix Installation1050948 -Node: Quick Installation1051565 -Node: Additional Configuration Options1054011 -Node: Configuration Philosophy1055747 -Node: Non-Unix Installation1058101 -Node: PC Installation1058559 -Node: PC Binary Installation1059858 -Node: PC Compiling1061706 -Node: PC Testing1064650 -Node: PC Using1065826 -Node: Cygwin1069994 -Node: MSYS1070803 -Node: VMS Installation1071317 -Node: VMS Compilation1072081 -Ref: VMS Compilation-Footnote-11073333 -Node: VMS Dynamic Extensions1073391 -Node: VMS Installation Details1074764 -Node: VMS Running1077015 -Node: VMS GNV1079849 -Node: VMS Old Gawk1080572 -Node: Bugs1081042 -Node: Other Versions1084960 -Node: Notes1091044 -Node: Compatibility Mode1091844 -Node: Additions1092627 -Node: Accessing The Source1093554 -Node: Adding Code1094994 -Node: New Ports1101039 -Node: Derived Files1105174 -Ref: Derived Files-Footnote-11110495 -Ref: Derived Files-Footnote-21110529 -Ref: Derived Files-Footnote-31111129 -Node: Future Extensions1111227 -Node: Implementation Limitations1111810 -Node: Extension Design1113062 -Node: Old Extension Problems1114216 -Ref: Old Extension Problems-Footnote-11115724 -Node: Extension New Mechanism Goals1115781 -Ref: Extension New Mechanism Goals-Footnote-11119146 -Node: Extension Other Design Decisions1119332 -Node: Extension Future Growth1121438 -Node: Old Extension Mechanism1122274 -Node: Basic Concepts1124014 -Node: Basic High Level1124695 -Ref: figure-general-flow1124966 -Ref: figure-process-flow1125565 -Ref: Basic High Level-Footnote-11128794 -Node: Basic Data Typing1128979 -Node: Glossary1132334 -Node: Copying1157563 -Node: GNU Free Documentation License1195120 -Node: Index1220257 +Node: Extension Sample API Tests999117 +Node: Extension Sample Time999642 +Node: gawkextlib1001006 +Node: Language History1003787 +Node: V7/SVR3.11005380 +Node: SVR41007700 +Node: POSIX1009142 +Node: BTL1010528 +Node: POSIX/GNU1011262 +Node: Feature History1016861 +Node: Common Extensions1029837 +Node: Ranges and Locales1031149 +Ref: Ranges and Locales-Footnote-11035766 +Ref: Ranges and Locales-Footnote-21035793 +Ref: Ranges and Locales-Footnote-31036027 +Node: Contributors1036248 +Node: Installation1041629 +Node: Gawk Distribution1042523 +Node: Getting1043007 +Node: Extracting1043833 +Node: Distribution contents1045525 +Node: Unix Installation1051230 +Node: Quick Installation1051847 +Node: Additional Configuration Options1054293 +Node: Configuration Philosophy1056029 +Node: Non-Unix Installation1058383 +Node: PC Installation1058841 +Node: PC Binary Installation1060140 +Node: PC Compiling1061988 +Node: PC Testing1064932 +Node: PC Using1066108 +Node: Cygwin1070276 +Node: MSYS1071085 +Node: VMS Installation1071599 +Node: VMS Compilation1072363 +Ref: VMS Compilation-Footnote-11073615 +Node: VMS Dynamic Extensions1073673 +Node: VMS Installation Details1075046 +Node: VMS Running1077297 +Node: VMS GNV1080131 +Node: VMS Old Gawk1080854 +Node: Bugs1081324 +Node: Other Versions1085242 +Node: Notes1091326 +Node: Compatibility Mode1092126 +Node: Additions1092909 +Node: Accessing The Source1093836 +Node: Adding Code1095276 +Node: New Ports1101321 +Node: Derived Files1105456 +Ref: Derived Files-Footnote-11110777 +Ref: Derived Files-Footnote-21110811 +Ref: Derived Files-Footnote-31111411 +Node: Future Extensions1111509 +Node: Implementation Limitations1112092 +Node: Extension Design1113344 +Node: Old Extension Problems1114498 +Ref: Old Extension Problems-Footnote-11116006 +Node: Extension New Mechanism Goals1116063 +Ref: Extension New Mechanism Goals-Footnote-11119428 +Node: Extension Other Design Decisions1119614 +Node: Extension Future Growth1121720 +Node: Old Extension Mechanism1122556 +Node: Basic Concepts1124296 +Node: Basic High Level1124977 +Ref: figure-general-flow1125248 +Ref: figure-process-flow1125847 +Ref: Basic High Level-Footnote-11129076 +Node: Basic Data Typing1129261 +Node: Glossary1132616 +Node: Copying1157845 +Node: GNU Free Documentation License1195402 +Node: Index1220539  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 6c41c99a..139af5f7 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -33173,7 +33173,7 @@ ret = reada("arraydump.bin", array) @subsection Reading An Entire File The @code{readfile} extension adds a single function -named @code{readfile()}: +named @code{readfile()}, and an input parser: @table @code @item @@load "readfile" @@ -33184,6 +33184,12 @@ This is how you load the extension. The argument is the name of the file to read. The return value is a string containing the entire contents of the requested file. Upon error, the function returns the empty string and sets @code{ERRNO}. + +@item BEGIN @{ PROCINFO["readfile"] = 1 @} +In addition, the extension adds an input parser that is activated if +@code{PROCINFO["readfile"]} exists. +When activated, each input file is returned in its entirety as @code{$0}. +@code{RT} is set to the null string. @end table Here is an example: diff --git a/doc/gawktexi.in b/doc/gawktexi.in index db949be2..dfdf3434 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -32314,7 +32314,7 @@ ret = reada("arraydump.bin", array) @subsection Reading An Entire File The @code{readfile} extension adds a single function -named @code{readfile()}: +named @code{readfile()}, and an input parser: @table @code @item @@load "readfile" @@ -32325,6 +32325,12 @@ This is how you load the extension. The argument is the name of the file to read. The return value is a string containing the entire contents of the requested file. Upon error, the function returns the empty string and sets @code{ERRNO}. + +@item BEGIN @{ PROCINFO["readfile"] = 1 @} +In addition, the extension adds an input parser that is activated if +@code{PROCINFO["readfile"]} exists. +When activated, each input file is returned in its entirety as @code{$0}. +@code{RT} is set to the null string. @end table Here is an example: diff --git a/extension/ChangeLog b/extension/ChangeLog index 61381171..02c26f3d 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,9 @@ +2014-03-27 Arnold D. Robbins + + * readfile.c: Add an input parser that works off of + PROCINFO["readfile"]. + * readfile.3am: Document same. + 2014-03-23 Arnold D. Robbins * gawkfts.c (MAXPATHLEN): Add a default definition. Thanks to diff --git a/extension/readfile.3am b/extension/readfile.3am index 688d9cd5..0cb2eb5b 100644 --- a/extension/readfile.3am +++ b/extension/readfile.3am @@ -1,4 +1,4 @@ -.TH READFILE 3am "Jan 15 2013" "Free Software Foundation" "GNU Awk Extension Modules" +.TH READFILE 3am "Mar 24 2013" "Free Software Foundation" "GNU Awk Extension Modules" .SH NAME readfile \- return the entire contents of a file as a string .SH SYNOPSIS @@ -6,6 +6,14 @@ readfile \- return the entire contents of a file as a string @load "readfile" .sp result = readfile("/some/path") +.sp +.ft R +For making whole files be single records: +.sp +.ft CW +@load "readfile" +.br +BEGIN { PROCINFO["readfile"] = 1 } .ft R .SH DESCRIPTION The @@ -18,6 +26,14 @@ the requested file. .PP Upon error, the function returns the empty string and sets .BR ERRNO . +.PP +In addition, it adds an input parser that is activated if +.ft CW +PROCINFO["readfile"] +.ft R +exists. +When activated, each input file is returned in its entirety as \f(CW$0\fR. +\f(CWRT\fP is set to the null string. ... .SH NOTES ... .SH BUGS .SH EXAMPLE @@ -47,7 +63,7 @@ if (contents == "" && ERRNO != "") { Arnold Robbins, .BR arnold@skeeve.com . .SH COPYING PERMISSIONS -Copyright \(co 2012, 2013, +Copyright \(co 2012, 2013, 2014, Free Software Foundation, Inc. .PP Permission is granted to make and distribute verbatim copies of diff --git a/extension/readfile.c b/extension/readfile.c index 71d67ee6..67fa9eca 100644 --- a/extension/readfile.c +++ b/extension/readfile.c @@ -61,11 +61,39 @@ static const gawk_api_t *api; /* for convenience macros to work */ static awk_ext_id_t *ext_id; -static const char *ext_version = "readfile extension: version 1.0"; -static awk_bool_t (*init_func)(void) = NULL; +static const char *ext_version = "readfile extension: version 2.0"; +static awk_bool_t init_readfile(); +static awk_bool_t (*init_func)(void) = init_readfile; int plugin_is_GPL_compatible; +/* read_file_to_buffer --- handle the mechanics of reading the file */ + +static char * +read_file_to_buffer(int fd, const struct stat *sbuf) +{ + char *text = NULL; + int ret; + + if ((sbuf->st_mode & S_IFMT) != S_IFREG) { + errno = EINVAL; + update_ERRNO_int(errno); + goto done; + } + + emalloc(text, char *, sbuf->st_size + 2, "do_readfile"); + memset(text, '\0', sbuf->st_size + 2); + + if ((ret = read(fd, text, sbuf->st_size)) != sbuf->st_size) { + update_ERRNO_int(errno); + gawk_free(text); + text = NULL; + /* fall through to return */ + } +done: + return text; +} + /* do_readfile --- read a file into memory */ static awk_value_t * @@ -90,10 +118,6 @@ do_readfile(int nargs, awk_value_t *result) if (ret < 0) { update_ERRNO_int(errno); goto done; - } else if ((sbuf.st_mode & S_IFMT) != S_IFREG) { - errno = EINVAL; - update_ERRNO_int(errno); - goto done; } if ((fd = open(filename.str_value.str, O_RDONLY|O_BINARY)) < 0) { @@ -101,15 +125,9 @@ do_readfile(int nargs, awk_value_t *result) goto done; } - emalloc(text, char *, sbuf.st_size + 2, "do_readfile"); - memset(text, '\0', sbuf.st_size + 2); - - if ((ret = read(fd, text, sbuf.st_size)) != sbuf.st_size) { - (void) close(fd); - update_ERRNO_int(errno); - gawk_free(text); - goto done; - } + text = read_file_to_buffer(fd, & sbuf); + if (text == NULL) + goto done; /* ERRNO already updated */ close(fd); make_malloced_string(text, sbuf.st_size, result); @@ -117,12 +135,110 @@ do_readfile(int nargs, awk_value_t *result) } else if (do_lint) lintwarn(ext_id, _("readfile: called with no arguments")); - done: /* Set the return value */ return result; } +/* readfile_get_record --- read the whole file as one record */ + +static int +readfile_get_record(char **out, awk_input_buf_t *iobuf, int *errcode, + char **rt_start, size_t *rt_len) +{ + char *text; + + /* + * The caller sets *errcode to 0, so we should set it only if an + * error occurs. + */ + + if (out == NULL || iobuf == NULL) + return EOF; + + if (iobuf->opaque != NULL) { + /* + * Already read the whole file, + * free up stuff and return EOF + */ + gawk_free(iobuf->opaque); + iobuf->opaque = NULL; + return EOF; + } + + /* read file */ + text = read_file_to_buffer(iobuf->fd, & iobuf->sbuf); + if (text == NULL) + return EOF; + + /* set up the iobuf for next time */ + iobuf->opaque = text; + + /* set return values */ + *rt_start = NULL; + *rt_len = 0; + *out = text; + + /* return count */ + return iobuf->sbuf.st_size; +} + +/* readfile_can_take_file --- return true if we want the file */ + +static awk_bool_t +readfile_can_take_file(const awk_input_buf_t *iobuf) +{ + awk_value_t array, index, value; + + if (iobuf == NULL) + return awk_false; + + /* + * This could fail if PROCINFO isn't referenced from + * the awk program. It's not a "can't happen" error. + */ + if (! sym_lookup("PROCINFO", AWK_ARRAY, & array)) { + return awk_false; + } + + (void) make_const_string("readfile", 8, & index); + + if (! get_array_element(array.array_cookie, & index, AWK_UNDEFINED, & value)) { + return awk_false; + } + + return awk_true; +} + +/* readfile_take_control_of --- take over the file */ + +static awk_bool_t +readfile_take_control_of(awk_input_buf_t *iobuf) +{ + if (iobuf == NULL) + return awk_false; + + iobuf->get_record = readfile_get_record; + return awk_true; +} + +static awk_input_parser_t readfile_parser = { + "readfile", + readfile_can_take_file, + readfile_take_control_of, + NULL +}; + +/* init_readfile --- set things up */ + +static awk_bool_t +init_readfile() +{ + register_input_parser(& readfile_parser); + + return awk_true; +} + static awk_ext_func_t func_table[] = { { "readfile", do_readfile, 1 }, }; diff --git a/test/ChangeLog b/test/ChangeLog index ab7ff0f2..f8d9f943 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2014-03-27 Arnold D. Robbins + + * Makefile.am (readfile2): New test. + * readfile2.awk, readfile2.ok: New files. + 2014-02-28 Arnold D. Robbins * regrange.ok: Update after code improvements. diff --git a/test/Makefile.am b/test/Makefile.am index ca39e0b8..d92f358e 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -708,6 +708,7 @@ EXTRA_DIST = \ range1.ok \ readdir.awk \ readdir0.awk \ + readfile2.awk \ rebt8b1.awk \ rebt8b1.ok \ rebt8b2.awk \ @@ -1019,7 +1020,7 @@ LOCALE_CHARSET_TESTS = \ SHLIB_TESTS = \ fnmatch filefuncs fork fork2 fts functab4 inplace1 inplace2 inplace3 \ - ordchr ordchr2 readdir readfile revout revtwoway rwarray testext time + ordchr ordchr2 readdir readfile readfile2 revout revtwoway rwarray testext time # List of the tests which should be run with --lint option: NEED_LINT = \ @@ -1734,6 +1735,11 @@ readfile:: @$(AWK) -l readfile 'BEGIN {printf "%s", readfile("Makefile")}' >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) Makefile _$@ && rm -f _$@ || cp -p Makefile $@.ok +readfile2:: + @echo $@ + @$(AWK) -f "$(srcdir)"/$@.awk "$(srcdir)"/$@.awk "$(srcdir)"/readdir.awk > _$@ || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + include2:: @echo $@ @AWKPATH="$(srcdir)" $(AWK) --include inclib 'BEGIN {print sandwich("a", "b", "c")}' >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/Makefile.in b/test/Makefile.in index 52fa49ef..6e1bcbb3 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -954,6 +954,7 @@ EXTRA_DIST = \ range1.ok \ readdir.awk \ readdir0.awk \ + readfile2.awk \ rebt8b1.awk \ rebt8b1.ok \ rebt8b2.awk \ @@ -1261,7 +1262,7 @@ LOCALE_CHARSET_TESTS = \ SHLIB_TESTS = \ fnmatch filefuncs fork fork2 fts functab4 inplace1 inplace2 inplace3 \ - ordchr ordchr2 readdir readfile revout revtwoway rwarray testext time + ordchr ordchr2 readdir readfile readfile2 revout revtwoway rwarray testext time # List of the tests which should be run with --lint option: @@ -2158,6 +2159,11 @@ readfile:: @$(AWK) -l readfile 'BEGIN {printf "%s", readfile("Makefile")}' >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) Makefile _$@ && rm -f _$@ || cp -p Makefile $@.ok +readfile2:: + @echo $@ + @$(AWK) -f "$(srcdir)"/$@.awk "$(srcdir)"/$@.awk "$(srcdir)"/readdir.awk > _$@ || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + include2:: @echo $@ @AWKPATH="$(srcdir)" $(AWK) --include inclib 'BEGIN {print sandwich("a", "b", "c")}' >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/readfile2.awk b/test/readfile2.awk new file mode 100644 index 00000000..c21483fc --- /dev/null +++ b/test/readfile2.awk @@ -0,0 +1,12 @@ +@load "readfile" +BEGIN { PROCINFO["readfile"] = 1 } +BEGINFILE { print "Start of", basename(FILENAME) } +{ printf ("%d: <%s>\n", FNR, $0 ) } +ENDFILE { print "End of", basename(FILENAME) } + +function basename(file, result) +{ + result = file + gsub(".*/", "", result) + return result +} diff --git a/test/readfile2.ok b/test/readfile2.ok new file mode 100644 index 00000000..be1ded6c --- /dev/null +++ b/test/readfile2.ok @@ -0,0 +1,21 @@ +Start of readfile2.awk +1: <@load "readfile" +BEGIN { PROCINFO["readfile"] = 1 } +BEGINFILE { print "Start of", basename(FILENAME) } +{ printf ("%d: <%s>\n", FNR, $0 ) } +ENDFILE { print "End of", basename(FILENAME) } + +function basename(file, result) +{ + result = file + gsub(".*/", "", result) + return result +} +> +End of readfile2.awk +Start of readdir.awk +1: <@load "readdir" + +{ print } +> +End of readdir.awk -- cgit v1.2.3 From 5376b7c9d12f5c47c7d0d56df3eeaa39855aec3b Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 28 Mar 2014 10:17:32 +0300 Subject: Improvements in both configure.ac files. --- ChangeLog | 5 ++ configure | 67 ++++------------ configure.ac | 9 +-- extension/ChangeLog | 5 ++ extension/configh.in | 20 ++++- extension/configure | 211 ++++++++++++++++++++++++++++++++++++++++++++++--- extension/configure.ac | 4 +- 7 files changed, 251 insertions(+), 70 deletions(-) diff --git a/ChangeLog b/ChangeLog index bea3720c..a3fa36ab 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-03-28 Arnold D. Robbins + + * configure.ac: Remove duplicate AC_HEADER_TIME and rearrange + order of macros some. May help on older systems. + 2014-03-23 Arnold D. Robbins * dfa.c: Move include of dfa.h around for correct building diff --git a/configure b/configure index a99a924a..d4a7d484 100755 --- a/configure +++ b/configure @@ -8102,6 +8102,22 @@ $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi +for ac_header in arpa/inet.h fcntl.h limits.h locale.h libintl.h mcheck.h \ + netdb.h netinet/in.h stdarg.h stddef.h string.h \ + sys/ioctl.h sys/param.h sys/socket.h sys/time.h unistd.h \ + termios.h stropts.h wchar.h wctype.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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : @@ -8383,22 +8399,6 @@ $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi -for ac_header in arpa/inet.h fcntl.h limits.h locale.h libintl.h mcheck.h \ - netdb.h netinet/in.h stdarg.h stddef.h string.h \ - sys/ioctl.h sys/param.h sys/socket.h sys/time.h unistd.h \ - termios.h stropts.h wchar.h wctype.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 - if test "$ac_cv_header_string_h" = yes then @@ -10614,41 +10614,6 @@ cat >>confdefs.h <<_ACEOF _ACEOF -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 : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include - -int -main () -{ -if ((struct tm *) 0) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_time=yes -else - ac_cv_header_time=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 -$as_echo "$ac_cv_header_time" >&6; } -if test $ac_cv_header_time = yes; then - -$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h - fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 diff --git a/configure.ac b/configure.ac index 8e823796..85f0497b 100644 --- a/configure.ac +++ b/configure.ac @@ -137,14 +137,14 @@ AM_LANGINFO_CODESET gt_LC_MESSAGES dnl checks for header files -AC_HEADER_STDC -AC_HEADER_STDBOOL -AC_HEADER_SYS_WAIT -AC_HEADER_TIME AC_CHECK_HEADERS(arpa/inet.h fcntl.h limits.h locale.h libintl.h mcheck.h \ netdb.h netinet/in.h stdarg.h stddef.h string.h \ sys/ioctl.h sys/param.h sys/socket.h sys/time.h unistd.h \ termios.h stropts.h wchar.h wctype.h) +AC_HEADER_STDC +AC_HEADER_STDBOOL +AC_HEADER_SYS_WAIT +AC_HEADER_TIME if test "$ac_cv_header_string_h" = yes then @@ -378,7 +378,6 @@ GNUPG_CHECK_MPFR dnl checks for structure members AC_CHECK_MEMBERS([struct stat.st_blksize]) -AC_HEADER_TIME AC_STRUCT_TM AC_STRUCT_TIMEZONE diff --git a/extension/ChangeLog b/extension/ChangeLog index 02c26f3d..a07b667e 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,8 @@ +2014-03-28 Arnold D. Robbins + + * configure.ac: Add AC_HEADER_TIME and AC_HEADER_DIRENT, and + rearrange order of macros some. May help on older systems. + 2014-03-27 Arnold D. Robbins * readfile.c: Add an input parser that works off of diff --git a/extension/configh.in b/extension/configh.in index 8add211a..5842f2f4 100644 --- a/extension/configh.in +++ b/extension/configh.in @@ -30,7 +30,8 @@ */ #undef HAVE_DECL_DIRFD -/* Define to 1 if you have the header file. */ +/* Define to 1 if you have the header file, and it defines `DIR'. + */ #undef HAVE_DIRENT_H /* Define to 1 if you have the `dirfd' function. */ @@ -75,6 +76,9 @@ /* Define to 1 if you have the `nanosleep' function. */ #undef HAVE_NANOSLEEP +/* Define to 1 if you have the header file, and it defines `DIR'. */ +#undef HAVE_NDIR_H + /* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT @@ -93,6 +97,14 @@ /* Define to 1 if `st_blksize' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BLKSIZE +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#undef HAVE_SYS_DIR_H + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#undef HAVE_SYS_NDIR_H + /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H @@ -108,9 +120,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H -/* Define to 1 if you have the header file. */ -#undef HAVE_TIME_H - /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H @@ -149,6 +158,9 @@ /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS +/* Define to 1 if you can safely include both and . */ +#undef TIME_WITH_SYS_TIME + /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE diff --git a/extension/configure b/extension/configure index 025e2723..1b7b33d6 100755 --- a/extension/configure +++ b/extension/configure @@ -14052,6 +14052,177 @@ else $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 +#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 : @@ -14102,18 +14273,40 @@ fi fi fi -for ac_header in dirent.h fnmatch.h limits.h time.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 +{ $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 : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +int +main () +{ +if ((struct tm *) 0) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_time=yes +else + ac_cv_header_time=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 +$as_echo "$ac_cv_header_time" >&6; } +if test $ac_cv_header_time = yes; then -done +$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h + +fi for ac_func in fdopendir fnmatch gettimeofday \ diff --git a/extension/configure.ac b/extension/configure.ac index 412fec09..7be50b34 100644 --- a/extension/configure.ac +++ b/extension/configure.ac @@ -66,8 +66,10 @@ else AC_MSG_RESULT([no]) fi +AC_CHECK_HEADERS(fnmatch.h limits.h sys/time.h sys/select.h sys/param.h) +AC_HEADER_DIRENT AC_HEADER_MAJOR -AC_CHECK_HEADERS(dirent.h fnmatch.h limits.h time.h sys/time.h sys/select.h sys/param.h) +AC_HEADER_TIME AC_CHECK_FUNCS(fdopendir fnmatch gettimeofday \ getdtablesize nanosleep select GetSystemTimeAsFileTime) -- cgit v1.2.3 From 4368c38c91c0909c8e111e7511680af65dd0a983 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 28 Mar 2014 14:27:30 +0300 Subject: Minor cleanup to indexing. --- doc/ChangeLog | 4 ++++ doc/gawk.info | 17 +++++++++-------- doc/gawk.texi | 17 +++++++++-------- doc/gawktexi.in | 17 +++++++++-------- 4 files changed, 31 insertions(+), 24 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index c8781f4e..23522a7b 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-03-28 Arnold D. Robbins + + * gawktexi.in: Minor cleanups to the indexing. + 2014-03-27 Arnold D. Robbins * gawktexi.in: Finish the massive indexing improvements such that diff --git a/doc/gawk.info b/doc/gawk.info index 6bff2719..41c35282 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -23149,7 +23149,7 @@ The following functions relate to individual array elements. 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 the api-provided functions + string value of `index' must come from the API-provided functions `api_malloc()', `api_calloc()' or `api_realloc()' and `gawk' releases the storage. @@ -30438,7 +30438,7 @@ Index * asterisk (*), **= operator: Assignment Ops. (line 129) * asterisk (*), *= operator <1>: Precedence. (line 95) * asterisk (*), *= operator: Assignment Ops. (line 129) -* atan2() function: Numeric Functions. (line 11) +* atan2: Numeric Functions. (line 11) * automatic displays, in debugger: Debugger Info. (line 24) * awf (amazingly workable formatter) program: Glossary. (line 25) * awk debugging, enabling: Options. (line 108) @@ -31027,6 +31027,7 @@ Index (line 67) * debugger commands, watch: Viewing And Changing Data. (line 67) +* debugger default list amount: Debugger Info. (line 69) * debugger history file: Debugger Info. (line 80) * debugger history size: Debugger Info. (line 65) * debugger options: Debugger Info. (line 57) @@ -31157,8 +31158,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 138) -* effective user id of gawk user: Auto-set. (line 142) +* effective group ID of gawk user: Auto-set. (line 138) +* effective user ID of gawk user: Auto-set. (line 142) * egrep utility <1>: Egrep Program. (line 6) * egrep utility: Bracket Expressions. (line 24) * egrep.awk program: Egrep Program. (line 54) @@ -31696,7 +31697,7 @@ Index * 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 177) +* group ID of gawk user: Auto-set. (line 177) * groups, information about: Group Functions. (line 6) * gsub <1>: String Functions. (line 135) * gsub: Using Constant Regexps. @@ -32182,7 +32183,7 @@ Index * p debugger command (alias for print): Viewing And Changing Data. (line 36) * P1003.1 POSIX standard: Glossary. (line 454) -* parent process id of gawk process: Auto-set. (line 186) +* parent process ID of gawk process: Auto-set. (line 186) * parentheses (), in a profile: Profiling. (line 146) * parentheses (), regexp operator: Regexp Operators. (line 79) * password file: Passwd Functions. (line 16) @@ -32346,8 +32347,8 @@ 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 id of gawk process: Auto-set. (line 180) -* process id of gawk process: Auto-set. (line 183) +* process group idIDof gawk process: Auto-set. (line 180) +* process ID of gawk process: Auto-set. (line 183) * processes, two-way communications with: Two-way I/O. (line 23) * processing data: Basic High Level. (line 6) * PROCINFO array <1>: Passwd Functions. (line 6) diff --git a/doc/gawk.texi b/doc/gawk.texi index 139af5f7..22230d10 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -13864,12 +13864,12 @@ The following elements (listed alphabetically) are guaranteed to be available: @table @code -@cindex effective group id of @command{gawk} user +@cindex effective group ID of @command{gawk} user @item PROCINFO["egid"] The value of the @code{getegid()} system call. @item PROCINFO["euid"] -@cindex effective user id of @command{gawk} user +@cindex effective user ID of @command{gawk} user The value of the @code{geteuid()} system call. @item PROCINFO["FS"] @@ -13908,19 +13908,19 @@ after it has finished parsing the program; they are @emph{not} updated while the program runs. @item PROCINFO["gid"] -@cindex group id of @command{gawk} user +@cindex group ID of @command{gawk} user The value of the @code{getgid()} system call. @item PROCINFO["pgrpid"] -@cindex process group id of @command{gawk} process +@cindex process group idIDof @command{gawk} process The process group ID of the current process. @item PROCINFO["pid"] -@cindex process id of @command{gawk} process +@cindex process ID of @command{gawk} process The process ID of the current process. @item PROCINFO["ppid"] -@cindex parent process id of @command{gawk} process +@cindex parent process ID of @command{gawk} process The parent process ID of the current process. @item PROCINFO["sorted_in"] @@ -15571,7 +15571,7 @@ Optional parameters are enclosed in square brackets@w{ ([ ]):} @table @code @item atan2(@var{y}, @var{x}) -@cindex @code{atan2()} function +@cindexawkfunc{atan2} @cindex arctangent Return the arctangent of @code{@var{y} / @var{x}} in radians. You can use @samp{pi = atan2(0, -1)} to retrieve the value of @value{PI}. @@ -28083,6 +28083,7 @@ The maximum number of lines to keep in the history file @file{./.gawk_history}. The default is 100. @item listsize +@cindex debugger default list amount The number of lines that @code{list} prints. The default is 15. @item outfile @@ -31254,7 +31255,7 @@ requires that you understand how such values are converted to strings (@pxref{Conversion}); thus using integral values is safest. As with @emph{all} strings passed into @code{gawk} from an extension, -the string value of @code{index} must come from the api-provided functions @code{api_malloc()}, @code{api_calloc()} or @code{api_realloc()} and +the string value of @code{index} must come from the API-provided functions @code{api_malloc()}, @code{api_calloc()} or @code{api_realloc()} and @command{gawk} releases the storage. @item awk_bool_t set_array_element(awk_array_t a_cookie, diff --git a/doc/gawktexi.in b/doc/gawktexi.in index dfdf3434..74920586 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -13241,12 +13241,12 @@ The following elements (listed alphabetically) are guaranteed to be available: @table @code -@cindex effective group id of @command{gawk} user +@cindex effective group ID of @command{gawk} user @item PROCINFO["egid"] The value of the @code{getegid()} system call. @item PROCINFO["euid"] -@cindex effective user id of @command{gawk} user +@cindex effective user ID of @command{gawk} user The value of the @code{geteuid()} system call. @item PROCINFO["FS"] @@ -13285,19 +13285,19 @@ after it has finished parsing the program; they are @emph{not} updated while the program runs. @item PROCINFO["gid"] -@cindex group id of @command{gawk} user +@cindex group ID of @command{gawk} user The value of the @code{getgid()} system call. @item PROCINFO["pgrpid"] -@cindex process group id of @command{gawk} process +@cindex process group idIDof @command{gawk} process The process group ID of the current process. @item PROCINFO["pid"] -@cindex process id of @command{gawk} process +@cindex process ID of @command{gawk} process The process ID of the current process. @item PROCINFO["ppid"] -@cindex parent process id of @command{gawk} process +@cindex parent process ID of @command{gawk} process The parent process ID of the current process. @item PROCINFO["sorted_in"] @@ -14902,7 +14902,7 @@ Optional parameters are enclosed in square brackets@w{ ([ ]):} @table @code @item atan2(@var{y}, @var{x}) -@cindex @code{atan2()} function +@cindexawkfunc{atan2} @cindex arctangent Return the arctangent of @code{@var{y} / @var{x}} in radians. You can use @samp{pi = atan2(0, -1)} to retrieve the value of @value{PI}. @@ -27224,6 +27224,7 @@ The maximum number of lines to keep in the history file @file{./.gawk_history}. The default is 100. @item listsize +@cindex debugger default list amount The number of lines that @code{list} prints. The default is 15. @item outfile @@ -30395,7 +30396,7 @@ requires that you understand how such values are converted to strings (@pxref{Conversion}); thus using integral values is safest. As with @emph{all} strings passed into @code{gawk} from an extension, -the string value of @code{index} must come from the api-provided functions @code{api_malloc()}, @code{api_calloc()} or @code{api_realloc()} and +the string value of @code{index} must come from the API-provided functions @code{api_malloc()}, @code{api_calloc()} or @code{api_realloc()} and @command{gawk} releases the storage. @item awk_bool_t set_array_element(awk_array_t a_cookie, -- cgit v1.2.3 From 97ffd21c9b52c3405d27fb9f8d69480a9e681c4e Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 28 Mar 2014 14:54:40 +0300 Subject: Create valid DocBook XML output with current makeinfo. --- doc/ChangeLog | 5 + doc/gawk.info | 1078 +++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 346 ++++++++++++++++-- doc/gawktexi.in | 346 ++++++++++++++++-- 4 files changed, 1180 insertions(+), 595 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 23522a7b..8c34d4c0 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -2,6 +2,11 @@ * gawktexi.in: Minor cleanups to the indexing. + Unrelated: + + * gawktexi.in: Merge in changes needed for creating valid + DocBook XML. Works with post-5.2 Texinfo and dblatex! + 2014-03-27 Arnold D. Robbins * gawktexi.in: Finish the massive indexing improvements such that diff --git a/doc/gawk.info b/doc/gawk.info index 41c35282..f63c62ce 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -9,8 +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, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013, 2014 + Copyright (C) 1989, 1991, 1992, 1993, 1996-2005, 2007, 2009-2014 Free Software Foundation, Inc. @@ -41,8 +40,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, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013, 2014 + Copyright (C) 1989, 1991, 1992, 1993, 1996-2005, 2007, 2009-2014 Free Software Foundation, Inc. @@ -28014,7 +28012,7 @@ D.1 What a Program Does ======================= At the most basic level, the job of a program is to process some input -data and produce results. See *note figure-general-flow::. +data and produce results. See *note figure-general-flow::. _______ +------+ / \ +---------+ @@ -28398,8 +28396,8 @@ Dynamic Regular Expression (*Note Computed Regexps::.) Environment - A collection of strings, of the form NAME`='VAL, that each program - has available to it. Users generally place values into the + 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'. @@ -28814,7 +28812,6 @@ GNU General Public License ************************** Version 3, 29 June 2007 - Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' Everyone is permitted to copy and distribute verbatim copies of this @@ -29537,7 +29534,6 @@ GNU Free Documentation License ****************************** Version 1.3, 3 November 2008 - Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. `http://fsf.org/' @@ -30662,7 +30658,7 @@ Index * Brown, Martin: Contributors. (line 82) * BSD-based operating systems: Glossary. (line 616) * bt debugger command (alias for backtrace): Execution Stack. (line 13) -* Buening, Andreas <1>: Bugs. (line 71) +* Buening, Andreas <1>: Bugs. (line 70) * Buening, Andreas <2>: Contributors. (line 92) * Buening, Andreas: Acknowledgments. (line 60) * buffering, input/output <1>: Two-way I/O. (line 70) @@ -31308,7 +31304,7 @@ Index * f debugger command (alias for frame): Execution Stack. (line 25) * false, logical: Truth Values. (line 6) * FDL (Free Documentation License): GNU Free Documentation License. - (line 6) + (line 7) * features, adding to gawk: Adding Code. (line 6) * features, advanced, See advanced features: Obsolete. (line 6) * features, deprecated: Obsolete. (line 6) @@ -31453,7 +31449,7 @@ Index (line 27) * frame debugger command: Execution Stack. (line 25) * Free Documentation License (FDL): GNU Free Documentation License. - (line 6) + (line 7) * Free Software Foundation (FSF) <1>: Glossary. (line 297) * Free Software Foundation (FSF) <2>: Getting. (line 10) * Free Software Foundation (FSF): Manual History. (line 6) @@ -31678,7 +31674,7 @@ Index * GNITS mailing list: Acknowledgments. (line 52) * GNU awk, See gawk: Preface. (line 49) * GNU Free Documentation License: GNU Free Documentation License. - (line 6) + (line 7) * GNU General Public License: Glossary. (line 306) * GNU Lesser General Public License: Glossary. (line 397) * GNU long options <1>: Options. (line 6) @@ -31972,7 +31968,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 72) +* Malmberg, John <1>: Bugs. (line 70) * Malmberg, John: Acknowledgments. (line 60) * mark parity: Ordinal Functions. (line 45) * marked string extraction (internationalization): String Extraction. @@ -32214,7 +32210,7 @@ Index (line 6) * pipe, input: Getline/Pipe. (line 9) * pipe, output: Redirection. (line 57) -* Pitts, Dave <1>: Bugs. (line 73) +* Pitts, Dave <1>: Bugs. (line 70) * Pitts, Dave: Acknowledgments. (line 60) * Plauger, P.J.: Library Functions. (line 12) * plug-in: Extension Intro. (line 6) @@ -32418,7 +32414,7 @@ Index * range expressions (regexps): Bracket Expressions. (line 6) * range patterns: Ranges. (line 6) * range patterns, line continuation and: Ranges. (line 65) -* Rankin, Pat <1>: Bugs. (line 72) +* Rankin, Pat <1>: Bugs. (line 70) * Rankin, Pat <2>: Contributors. (line 37) * Rankin, Pat <3>: Assignment Ops. (line 100) * Rankin, Pat: Acknowledgments. (line 60) @@ -33092,530 +33088,530 @@ Index  Tag Table: -Node: Top1366 -Node: Foreword40929 -Node: Preface45274 -Ref: Preface-Footnote-148327 -Ref: Preface-Footnote-248423 -Node: History48655 -Node: Names51029 -Ref: Names-Footnote-152506 -Node: This Manual52578 -Ref: This Manual-Footnote-158352 -Node: Conventions58452 -Node: Manual History60608 -Ref: Manual History-Footnote-164056 -Ref: Manual History-Footnote-264097 -Node: How To Contribute64171 -Node: Acknowledgments65315 -Node: Getting Started69509 -Node: Running gawk71888 -Node: One-shot73074 -Node: Read Terminal74299 -Ref: Read Terminal-Footnote-175949 -Ref: Read Terminal-Footnote-276225 -Node: Long76396 -Node: Executable Scripts77772 -Ref: Executable Scripts-Footnote-179605 -Ref: Executable Scripts-Footnote-279707 -Node: Comments80254 -Node: Quoting82721 -Node: DOS Quoting87344 -Node: Sample Data Files88019 -Node: Very Simple90534 -Node: Two Rules95185 -Node: More Complex97083 -Ref: More Complex-Footnote-1100013 -Node: Statements/Lines100098 -Ref: Statements/Lines-Footnote-1104561 -Node: Other Features104826 -Node: When105754 -Node: Invoking Gawk107901 -Node: Command Line109364 -Node: Options110147 -Ref: Options-Footnote-1125525 -Node: Other Arguments125550 -Node: Naming Standard Input128208 -Node: Environment Variables129302 -Node: AWKPATH Variable129860 -Ref: AWKPATH Variable-Footnote-1132641 -Ref: AWKPATH Variable-Footnote-2132686 -Node: AWKLIBPATH Variable132946 -Node: Other Environment Variables133664 -Node: Exit Status136627 -Node: Include Files137302 -Node: Loading Shared Libraries140871 -Node: Obsolete142235 -Node: Undocumented142932 -Node: Regexp143174 -Node: Regexp Usage144563 -Node: Escape Sequences146588 -Node: Regexp Operators152257 -Ref: Regexp Operators-Footnote-1159637 -Ref: Regexp Operators-Footnote-2159784 -Node: Bracket Expressions159882 -Ref: table-char-classes161772 -Node: GNU Regexp Operators164295 -Node: Case-sensitivity168018 -Ref: Case-sensitivity-Footnote-1170986 -Ref: Case-sensitivity-Footnote-2171221 -Node: Leftmost Longest171329 -Node: Computed Regexps172530 -Node: Reading Files175867 -Node: Records177869 -Ref: Records-Footnote-1187392 -Node: Fields187429 -Ref: Fields-Footnote-1190385 -Node: Nonconstant Fields190471 -Node: Changing Fields192677 -Node: Field Separators198636 -Node: Default Field Splitting201338 -Node: Regexp Field Splitting202455 -Node: Single Character Fields205797 -Node: Command Line Field Separator206856 -Node: Full Line Fields210198 -Ref: Full Line Fields-Footnote-1210706 -Node: Field Splitting Summary210752 -Ref: Field Splitting Summary-Footnote-1213851 -Node: Constant Size213952 -Node: Splitting By Content218559 -Ref: Splitting By Content-Footnote-1222308 -Node: Multiple Line222348 -Ref: Multiple Line-Footnote-1228195 -Node: Getline228374 -Node: Plain Getline230590 -Node: Getline/Variable232685 -Node: Getline/File233832 -Node: Getline/Variable/File235173 -Ref: Getline/Variable/File-Footnote-1236772 -Node: Getline/Pipe236859 -Node: Getline/Variable/Pipe239558 -Node: Getline/Coprocess240665 -Node: Getline/Variable/Coprocess241917 -Node: Getline Notes242654 -Node: Getline Summary245441 -Ref: table-getline-variants245849 -Node: Read Timeout246761 -Ref: Read Timeout-Footnote-1250502 -Node: Command line directories250559 -Node: Printing251189 -Node: Print252820 -Node: Print Examples254157 -Node: Output Separators256941 -Node: OFMT258957 -Node: Printf260315 -Node: Basic Printf261221 -Node: Control Letters262760 -Node: Format Modifiers266572 -Node: Printf Examples272581 -Node: Redirection275293 -Node: Special Files282267 -Node: Special FD282800 -Ref: Special FD-Footnote-1286425 -Node: Special Network286499 -Node: Special Caveats287349 -Node: Close Files And Pipes288145 -Ref: Close Files And Pipes-Footnote-1295128 -Ref: Close Files And Pipes-Footnote-2295276 -Node: Expressions295426 -Node: Values296558 -Node: Constants297234 -Node: Scalar Constants297914 -Ref: Scalar Constants-Footnote-1298773 -Node: Nondecimal-numbers298955 -Node: Regexp Constants301955 -Node: Using Constant Regexps302430 -Node: Variables305485 -Node: Using Variables306140 -Node: Assignment Options307864 -Node: Conversion309739 -Ref: table-locale-affects315239 -Ref: Conversion-Footnote-1315863 -Node: All Operators315972 -Node: Arithmetic Ops316602 -Node: Concatenation319107 -Ref: Concatenation-Footnote-1321895 -Node: Assignment Ops322015 -Ref: table-assign-ops327003 -Node: Increment Ops328334 -Node: Truth Values and Conditions331768 -Node: Truth Values332851 -Node: Typing and Comparison333900 -Node: Variable Typing334693 -Ref: Variable Typing-Footnote-1338590 -Node: Comparison Operators338712 -Ref: table-relational-ops339122 -Node: POSIX String Comparison342670 -Ref: POSIX String Comparison-Footnote-1343626 -Node: Boolean Ops343764 -Ref: Boolean Ops-Footnote-1347834 -Node: Conditional Exp347925 -Node: Function Calls349657 -Node: Precedence353251 -Node: Locales356920 -Node: Patterns and Actions358009 -Node: Pattern Overview359063 -Node: Regexp Patterns360732 -Node: Expression Patterns361275 -Node: Ranges365056 -Node: BEGIN/END368160 -Node: Using BEGIN/END368922 -Ref: Using BEGIN/END-Footnote-1371658 -Node: I/O And BEGIN/END371764 -Node: BEGINFILE/ENDFILE374046 -Node: Empty376960 -Node: Using Shell Variables377277 -Node: Action Overview379562 -Node: Statements381919 -Node: If Statement383773 -Node: While Statement385272 -Node: Do Statement387316 -Node: For Statement388472 -Node: Switch Statement391624 -Node: Break Statement393778 -Node: Continue Statement395768 -Node: Next Statement397561 -Node: Nextfile Statement399951 -Node: Exit Statement402606 -Node: Built-in Variables405022 -Node: User-modified406117 -Ref: User-modified-Footnote-1414475 -Node: Auto-set414537 -Ref: Auto-set-Footnote-1427601 -Ref: Auto-set-Footnote-2427806 -Node: ARGC and ARGV427862 -Node: Arrays431716 -Node: Array Basics433221 -Node: Array Intro434047 -Node: Reference to Elements438364 -Node: Assigning Elements440634 -Node: Array Example441125 -Node: Scanning an Array442857 -Node: Controlling Scanning445171 -Ref: Controlling Scanning-Footnote-1450258 -Node: Delete450574 -Ref: Delete-Footnote-1453339 -Node: Numeric Array Subscripts453396 -Node: Uninitialized Subscripts455579 -Node: Multidimensional457206 -Node: Multiscanning460299 -Node: Arrays of Arrays461888 -Node: Functions466528 -Node: Built-in467347 -Node: Calling Built-in468425 -Node: Numeric Functions470413 -Ref: Numeric Functions-Footnote-1474245 -Ref: Numeric Functions-Footnote-2474602 -Ref: Numeric Functions-Footnote-3474650 -Node: String Functions474919 -Ref: String Functions-Footnote-1497877 -Ref: String Functions-Footnote-2498006 -Ref: String Functions-Footnote-3498254 -Node: Gory Details498341 -Ref: table-sub-escapes500020 -Ref: table-sub-posix-92501374 -Ref: table-sub-proposed502725 -Ref: table-posix-sub504079 -Ref: table-gensub-escapes505624 -Ref: Gory Details-Footnote-1506800 -Ref: Gory Details-Footnote-2506851 -Node: I/O Functions507002 -Ref: I/O Functions-Footnote-1513992 -Node: Time Functions514139 -Ref: Time Functions-Footnote-1525122 -Ref: Time Functions-Footnote-2525190 -Ref: Time Functions-Footnote-3525348 -Ref: Time Functions-Footnote-4525459 -Ref: Time Functions-Footnote-5525571 -Ref: Time Functions-Footnote-6525798 -Node: Bitwise Functions526064 -Ref: table-bitwise-ops526626 -Ref: Bitwise Functions-Footnote-1530847 -Node: Type Functions531031 -Node: I18N Functions532182 -Node: User-defined533809 -Node: Definition Syntax534613 -Ref: Definition Syntax-Footnote-1539527 -Node: Function Example539596 -Ref: Function Example-Footnote-1542245 -Node: Function Caveats542267 -Node: Calling A Function542785 -Node: Variable Scope543740 -Node: Pass By Value/Reference546703 -Node: Return Statement550211 -Node: Dynamic Typing553192 -Node: Indirect Calls554123 -Node: Library Functions563810 -Ref: Library Functions-Footnote-1567323 -Ref: Library Functions-Footnote-2567466 -Node: Library Names567637 -Ref: Library Names-Footnote-1571110 -Ref: Library Names-Footnote-2571330 -Node: General Functions571416 -Node: Strtonum Function572444 -Node: Assert Function575374 -Node: Round Function578700 -Node: Cliff Random Function580241 -Node: Ordinal Functions581257 -Ref: Ordinal Functions-Footnote-1584334 -Ref: Ordinal Functions-Footnote-2584586 -Node: Join Function584797 -Ref: Join Function-Footnote-1586568 -Node: Getlocaltime Function586768 -Node: Readfile Function590509 -Node: Data File Management592348 -Node: Filetrans Function592980 -Node: Rewind Function597049 -Node: File Checking598436 -Node: Empty Files599530 -Node: Ignoring Assigns601760 -Node: Getopt Function603314 -Ref: Getopt Function-Footnote-1614617 -Node: Passwd Functions614820 -Ref: Passwd Functions-Footnote-1623798 -Node: Group Functions623886 -Node: Walking Arrays631970 -Node: Sample Programs634106 -Node: Running Examples634780 -Node: Clones635508 -Node: Cut Program636732 -Node: Egrep Program646583 -Ref: Egrep Program-Footnote-1654356 -Node: Id Program654466 -Node: Split Program658115 -Ref: Split Program-Footnote-1661634 -Node: Tee Program661762 -Node: Uniq Program664565 -Node: Wc Program671994 -Ref: Wc Program-Footnote-1676260 -Ref: Wc Program-Footnote-2676460 -Node: Miscellaneous Programs676552 -Node: Dupword Program677740 -Node: Alarm Program679771 -Node: Translate Program684578 -Ref: Translate Program-Footnote-1688965 -Ref: Translate Program-Footnote-2689213 -Node: Labels Program689347 -Ref: Labels Program-Footnote-1692718 -Node: Word Sorting692802 -Node: History Sorting696686 -Node: Extract Program698525 -Ref: Extract Program-Footnote-1706028 -Node: Simple Sed706156 -Node: Igawk Program709218 -Ref: Igawk Program-Footnote-1724375 -Ref: Igawk Program-Footnote-2724576 -Node: Anagram Program724714 -Node: Signature Program727782 -Node: Advanced Features728882 -Node: Nondecimal Data730768 -Node: Array Sorting732351 -Node: Controlling Array Traversal733048 -Node: Array Sorting Functions741332 -Ref: Array Sorting Functions-Footnote-1745201 -Node: Two-way I/O745395 -Ref: Two-way I/O-Footnote-1750827 -Node: TCP/IP Networking750909 -Node: Profiling753753 -Node: Internationalization761256 -Node: I18N and L10N762681 -Node: Explaining gettext763367 -Ref: Explaining gettext-Footnote-1768435 -Ref: Explaining gettext-Footnote-2768619 -Node: Programmer i18n768784 -Node: Translator i18n772986 -Node: String Extraction773780 -Ref: String Extraction-Footnote-1774741 -Node: Printf Ordering774827 -Ref: Printf Ordering-Footnote-1777609 -Node: I18N Portability777673 -Ref: I18N Portability-Footnote-1780122 -Node: I18N Example780185 -Ref: I18N Example-Footnote-1782823 -Node: Gawk I18N782895 -Node: Debugger783516 -Node: Debugging784487 -Node: Debugging Concepts784920 -Node: Debugging Terms786776 -Node: Awk Debugging789373 -Node: Sample Debugging Session790265 -Node: Debugger Invocation790785 -Node: Finding The Bug792118 -Node: List of Debugger Commands798605 -Node: Breakpoint Control799939 -Node: Debugger Execution Control803603 -Node: Viewing And Changing Data806963 -Node: Execution Stack810319 -Node: Debugger Info811786 -Node: Miscellaneous Debugger Commands815768 -Node: Readline Support820944 -Node: Limitations821775 -Node: Arbitrary Precision Arithmetic824027 -Ref: Arbitrary Precision Arithmetic-Footnote-1825676 -Node: General Arithmetic825824 -Node: Floating Point Issues827544 -Node: String Conversion Precision828425 -Ref: String Conversion Precision-Footnote-1830130 -Node: Unexpected Results830239 -Node: POSIX Floating Point Problems832392 -Ref: POSIX Floating Point Problems-Footnote-1836217 -Node: Integer Programming836255 -Node: Floating-point Programming837994 -Ref: Floating-point Programming-Footnote-1844325 -Ref: Floating-point Programming-Footnote-2844595 -Node: Floating-point Representation844859 -Node: Floating-point Context846024 -Ref: table-ieee-formats846863 -Node: Rounding Mode848247 -Ref: table-rounding-modes848726 -Ref: Rounding Mode-Footnote-1851741 -Node: Gawk and MPFR851920 -Node: Arbitrary Precision Floats853175 -Ref: Arbitrary Precision Floats-Footnote-1855618 -Node: Setting Precision855934 -Ref: table-predefined-precision-strings856620 -Node: Setting Rounding Mode858765 -Ref: table-gawk-rounding-modes859169 -Node: Floating-point Constants860356 -Node: Changing Precision861785 -Ref: Changing Precision-Footnote-1863182 -Node: Exact Arithmetic863356 -Node: Arbitrary Precision Integers866494 -Ref: Arbitrary Precision Integers-Footnote-1869509 -Node: Dynamic Extensions869656 -Node: Extension Intro871114 -Node: Plugin License872379 -Node: Extension Mechanism Outline873064 -Ref: load-extension873481 -Ref: load-new-function874959 -Ref: call-new-function875954 -Node: Extension API Description877969 -Node: Extension API Functions Introduction879256 -Node: General Data Types884183 -Ref: General Data Types-Footnote-1889878 -Node: Requesting Values890177 -Ref: table-value-types-returned890914 -Node: Memory Allocation Functions891868 -Ref: Memory Allocation Functions-Footnote-1894614 -Node: Constructor Functions894710 -Node: Registration Functions896468 -Node: Extension Functions897153 -Node: Exit Callback Functions899455 -Node: Extension Version String900704 -Node: Input Parsers901354 -Node: Output Wrappers911111 -Node: Two-way processors915621 -Node: Printing Messages917829 -Ref: Printing Messages-Footnote-1918906 -Node: Updating `ERRNO'919058 -Node: Accessing Parameters919797 -Node: Symbol Table Access921027 -Node: Symbol table by name921541 -Node: Symbol table by cookie923517 -Ref: Symbol table by cookie-Footnote-1927649 -Node: Cached values927712 -Ref: Cached values-Footnote-1931202 -Node: Array Manipulation931293 -Ref: Array Manipulation-Footnote-1932391 -Node: Array Data Types932430 -Ref: Array Data Types-Footnote-1935133 -Node: Array Functions935225 -Node: Flattening Arrays939061 -Node: Creating Arrays945913 -Node: Extension API Variables950638 -Node: Extension Versioning951274 -Node: Extension API Informational Variables953175 -Node: Extension API Boilerplate954261 -Node: Finding Extensions958065 -Node: Extension Example958625 -Node: Internal File Description959355 -Node: Internal File Ops963446 -Ref: Internal File Ops-Footnote-1974955 -Node: Using Internal File Ops975095 -Ref: Using Internal File Ops-Footnote-1977448 -Node: Extension Samples977714 -Node: Extension Sample File Functions979238 -Node: Extension Sample Fnmatch987723 -Node: Extension Sample Fork989492 -Node: Extension Sample Inplace990705 -Node: Extension Sample Ord992483 -Node: Extension Sample Readdir993319 -Node: Extension Sample Revout994851 -Node: Extension Sample Rev2way995444 -Node: Extension Sample Read write array996134 -Node: Extension Sample Readfile998017 -Node: Extension Sample API Tests999117 -Node: Extension Sample Time999642 -Node: gawkextlib1001006 -Node: Language History1003787 -Node: V7/SVR3.11005380 -Node: SVR41007700 -Node: POSIX1009142 -Node: BTL1010528 -Node: POSIX/GNU1011262 -Node: Feature History1016861 -Node: Common Extensions1029837 -Node: Ranges and Locales1031149 -Ref: Ranges and Locales-Footnote-11035766 -Ref: Ranges and Locales-Footnote-21035793 -Ref: Ranges and Locales-Footnote-31036027 -Node: Contributors1036248 -Node: Installation1041629 -Node: Gawk Distribution1042523 -Node: Getting1043007 -Node: Extracting1043833 -Node: Distribution contents1045525 -Node: Unix Installation1051230 -Node: Quick Installation1051847 -Node: Additional Configuration Options1054293 -Node: Configuration Philosophy1056029 -Node: Non-Unix Installation1058383 -Node: PC Installation1058841 -Node: PC Binary Installation1060140 -Node: PC Compiling1061988 -Node: PC Testing1064932 -Node: PC Using1066108 -Node: Cygwin1070276 -Node: MSYS1071085 -Node: VMS Installation1071599 -Node: VMS Compilation1072363 -Ref: VMS Compilation-Footnote-11073615 -Node: VMS Dynamic Extensions1073673 -Node: VMS Installation Details1075046 -Node: VMS Running1077297 -Node: VMS GNV1080131 -Node: VMS Old Gawk1080854 -Node: Bugs1081324 -Node: Other Versions1085242 -Node: Notes1091326 -Node: Compatibility Mode1092126 -Node: Additions1092909 -Node: Accessing The Source1093836 -Node: Adding Code1095276 -Node: New Ports1101321 -Node: Derived Files1105456 -Ref: Derived Files-Footnote-11110777 -Ref: Derived Files-Footnote-21110811 -Ref: Derived Files-Footnote-31111411 -Node: Future Extensions1111509 -Node: Implementation Limitations1112092 -Node: Extension Design1113344 -Node: Old Extension Problems1114498 -Ref: Old Extension Problems-Footnote-11116006 -Node: Extension New Mechanism Goals1116063 -Ref: Extension New Mechanism Goals-Footnote-11119428 -Node: Extension Other Design Decisions1119614 -Node: Extension Future Growth1121720 -Node: Old Extension Mechanism1122556 -Node: Basic Concepts1124296 -Node: Basic High Level1124977 -Ref: figure-general-flow1125248 -Ref: figure-process-flow1125847 -Ref: Basic High Level-Footnote-11129076 -Node: Basic Data Typing1129261 -Node: Glossary1132616 -Node: Copying1157845 -Node: GNU Free Documentation License1195402 -Node: Index1220539 +Node: Top1292 +Node: Foreword40781 +Node: Preface45126 +Ref: Preface-Footnote-148179 +Ref: Preface-Footnote-248275 +Node: History48507 +Node: Names50881 +Ref: Names-Footnote-152358 +Node: This Manual52430 +Ref: This Manual-Footnote-158204 +Node: Conventions58304 +Node: Manual History60460 +Ref: Manual History-Footnote-163908 +Ref: Manual History-Footnote-263949 +Node: How To Contribute64023 +Node: Acknowledgments65167 +Node: Getting Started69361 +Node: Running gawk71740 +Node: One-shot72926 +Node: Read Terminal74151 +Ref: Read Terminal-Footnote-175801 +Ref: Read Terminal-Footnote-276077 +Node: Long76248 +Node: Executable Scripts77624 +Ref: Executable Scripts-Footnote-179457 +Ref: Executable Scripts-Footnote-279559 +Node: Comments80106 +Node: Quoting82573 +Node: DOS Quoting87196 +Node: Sample Data Files87871 +Node: Very Simple90386 +Node: Two Rules95037 +Node: More Complex96935 +Ref: More Complex-Footnote-199865 +Node: Statements/Lines99950 +Ref: Statements/Lines-Footnote-1104413 +Node: Other Features104678 +Node: When105606 +Node: Invoking Gawk107753 +Node: Command Line109216 +Node: Options109999 +Ref: Options-Footnote-1125377 +Node: Other Arguments125402 +Node: Naming Standard Input128060 +Node: Environment Variables129154 +Node: AWKPATH Variable129712 +Ref: AWKPATH Variable-Footnote-1132493 +Ref: AWKPATH Variable-Footnote-2132538 +Node: AWKLIBPATH Variable132798 +Node: Other Environment Variables133516 +Node: Exit Status136479 +Node: Include Files137154 +Node: Loading Shared Libraries140723 +Node: Obsolete142087 +Node: Undocumented142784 +Node: Regexp143026 +Node: Regexp Usage144415 +Node: Escape Sequences146440 +Node: Regexp Operators152109 +Ref: Regexp Operators-Footnote-1159489 +Ref: Regexp Operators-Footnote-2159636 +Node: Bracket Expressions159734 +Ref: table-char-classes161624 +Node: GNU Regexp Operators164147 +Node: Case-sensitivity167870 +Ref: Case-sensitivity-Footnote-1170838 +Ref: Case-sensitivity-Footnote-2171073 +Node: Leftmost Longest171181 +Node: Computed Regexps172382 +Node: Reading Files175719 +Node: Records177721 +Ref: Records-Footnote-1187244 +Node: Fields187281 +Ref: Fields-Footnote-1190237 +Node: Nonconstant Fields190323 +Node: Changing Fields192529 +Node: Field Separators198488 +Node: Default Field Splitting201190 +Node: Regexp Field Splitting202307 +Node: Single Character Fields205649 +Node: Command Line Field Separator206708 +Node: Full Line Fields210050 +Ref: Full Line Fields-Footnote-1210558 +Node: Field Splitting Summary210604 +Ref: Field Splitting Summary-Footnote-1213703 +Node: Constant Size213804 +Node: Splitting By Content218411 +Ref: Splitting By Content-Footnote-1222160 +Node: Multiple Line222200 +Ref: Multiple Line-Footnote-1228047 +Node: Getline228226 +Node: Plain Getline230442 +Node: Getline/Variable232537 +Node: Getline/File233684 +Node: Getline/Variable/File235025 +Ref: Getline/Variable/File-Footnote-1236624 +Node: Getline/Pipe236711 +Node: Getline/Variable/Pipe239410 +Node: Getline/Coprocess240517 +Node: Getline/Variable/Coprocess241769 +Node: Getline Notes242506 +Node: Getline Summary245293 +Ref: table-getline-variants245701 +Node: Read Timeout246613 +Ref: Read Timeout-Footnote-1250354 +Node: Command line directories250411 +Node: Printing251041 +Node: Print252672 +Node: Print Examples254009 +Node: Output Separators256793 +Node: OFMT258809 +Node: Printf260167 +Node: Basic Printf261073 +Node: Control Letters262612 +Node: Format Modifiers266424 +Node: Printf Examples272433 +Node: Redirection275145 +Node: Special Files282119 +Node: Special FD282652 +Ref: Special FD-Footnote-1286277 +Node: Special Network286351 +Node: Special Caveats287201 +Node: Close Files And Pipes287997 +Ref: Close Files And Pipes-Footnote-1294980 +Ref: Close Files And Pipes-Footnote-2295128 +Node: Expressions295278 +Node: Values296410 +Node: Constants297086 +Node: Scalar Constants297766 +Ref: Scalar Constants-Footnote-1298625 +Node: Nondecimal-numbers298807 +Node: Regexp Constants301807 +Node: Using Constant Regexps302282 +Node: Variables305337 +Node: Using Variables305992 +Node: Assignment Options307716 +Node: Conversion309591 +Ref: table-locale-affects315091 +Ref: Conversion-Footnote-1315715 +Node: All Operators315824 +Node: Arithmetic Ops316454 +Node: Concatenation318959 +Ref: Concatenation-Footnote-1321747 +Node: Assignment Ops321867 +Ref: table-assign-ops326855 +Node: Increment Ops328186 +Node: Truth Values and Conditions331620 +Node: Truth Values332703 +Node: Typing and Comparison333752 +Node: Variable Typing334545 +Ref: Variable Typing-Footnote-1338442 +Node: Comparison Operators338564 +Ref: table-relational-ops338974 +Node: POSIX String Comparison342522 +Ref: POSIX String Comparison-Footnote-1343478 +Node: Boolean Ops343616 +Ref: Boolean Ops-Footnote-1347686 +Node: Conditional Exp347777 +Node: Function Calls349509 +Node: Precedence353103 +Node: Locales356772 +Node: Patterns and Actions357861 +Node: Pattern Overview358915 +Node: Regexp Patterns360584 +Node: Expression Patterns361127 +Node: Ranges364908 +Node: BEGIN/END368012 +Node: Using BEGIN/END368774 +Ref: Using BEGIN/END-Footnote-1371510 +Node: I/O And BEGIN/END371616 +Node: BEGINFILE/ENDFILE373898 +Node: Empty376812 +Node: Using Shell Variables377129 +Node: Action Overview379414 +Node: Statements381771 +Node: If Statement383625 +Node: While Statement385124 +Node: Do Statement387168 +Node: For Statement388324 +Node: Switch Statement391476 +Node: Break Statement393630 +Node: Continue Statement395620 +Node: Next Statement397413 +Node: Nextfile Statement399803 +Node: Exit Statement402458 +Node: Built-in Variables404874 +Node: User-modified405969 +Ref: User-modified-Footnote-1414327 +Node: Auto-set414389 +Ref: Auto-set-Footnote-1427453 +Ref: Auto-set-Footnote-2427658 +Node: ARGC and ARGV427714 +Node: Arrays431568 +Node: Array Basics433073 +Node: Array Intro433899 +Node: Reference to Elements438216 +Node: Assigning Elements440486 +Node: Array Example440977 +Node: Scanning an Array442709 +Node: Controlling Scanning445023 +Ref: Controlling Scanning-Footnote-1450110 +Node: Delete450426 +Ref: Delete-Footnote-1453191 +Node: Numeric Array Subscripts453248 +Node: Uninitialized Subscripts455431 +Node: Multidimensional457058 +Node: Multiscanning460151 +Node: Arrays of Arrays461740 +Node: Functions466380 +Node: Built-in467199 +Node: Calling Built-in468277 +Node: Numeric Functions470265 +Ref: Numeric Functions-Footnote-1474097 +Ref: Numeric Functions-Footnote-2474454 +Ref: Numeric Functions-Footnote-3474502 +Node: String Functions474771 +Ref: String Functions-Footnote-1497729 +Ref: String Functions-Footnote-2497858 +Ref: String Functions-Footnote-3498106 +Node: Gory Details498193 +Ref: table-sub-escapes499872 +Ref: table-sub-posix-92501226 +Ref: table-sub-proposed502577 +Ref: table-posix-sub503931 +Ref: table-gensub-escapes505476 +Ref: Gory Details-Footnote-1506652 +Ref: Gory Details-Footnote-2506703 +Node: I/O Functions506854 +Ref: I/O Functions-Footnote-1513844 +Node: Time Functions513991 +Ref: Time Functions-Footnote-1524974 +Ref: Time Functions-Footnote-2525042 +Ref: Time Functions-Footnote-3525200 +Ref: Time Functions-Footnote-4525311 +Ref: Time Functions-Footnote-5525423 +Ref: Time Functions-Footnote-6525650 +Node: Bitwise Functions525916 +Ref: table-bitwise-ops526478 +Ref: Bitwise Functions-Footnote-1530699 +Node: Type Functions530883 +Node: I18N Functions532034 +Node: User-defined533661 +Node: Definition Syntax534465 +Ref: Definition Syntax-Footnote-1539379 +Node: Function Example539448 +Ref: Function Example-Footnote-1542097 +Node: Function Caveats542119 +Node: Calling A Function542637 +Node: Variable Scope543592 +Node: Pass By Value/Reference546555 +Node: Return Statement550063 +Node: Dynamic Typing553044 +Node: Indirect Calls553975 +Node: Library Functions563662 +Ref: Library Functions-Footnote-1567175 +Ref: Library Functions-Footnote-2567318 +Node: Library Names567489 +Ref: Library Names-Footnote-1570962 +Ref: Library Names-Footnote-2571182 +Node: General Functions571268 +Node: Strtonum Function572296 +Node: Assert Function575226 +Node: Round Function578552 +Node: Cliff Random Function580093 +Node: Ordinal Functions581109 +Ref: Ordinal Functions-Footnote-1584186 +Ref: Ordinal Functions-Footnote-2584438 +Node: Join Function584649 +Ref: Join Function-Footnote-1586420 +Node: Getlocaltime Function586620 +Node: Readfile Function590361 +Node: Data File Management592200 +Node: Filetrans Function592832 +Node: Rewind Function596901 +Node: File Checking598288 +Node: Empty Files599382 +Node: Ignoring Assigns601612 +Node: Getopt Function603166 +Ref: Getopt Function-Footnote-1614469 +Node: Passwd Functions614672 +Ref: Passwd Functions-Footnote-1623650 +Node: Group Functions623738 +Node: Walking Arrays631822 +Node: Sample Programs633958 +Node: Running Examples634632 +Node: Clones635360 +Node: Cut Program636584 +Node: Egrep Program646435 +Ref: Egrep Program-Footnote-1654208 +Node: Id Program654318 +Node: Split Program657967 +Ref: Split Program-Footnote-1661486 +Node: Tee Program661614 +Node: Uniq Program664417 +Node: Wc Program671846 +Ref: Wc Program-Footnote-1676112 +Ref: Wc Program-Footnote-2676312 +Node: Miscellaneous Programs676404 +Node: Dupword Program677592 +Node: Alarm Program679623 +Node: Translate Program684430 +Ref: Translate Program-Footnote-1688817 +Ref: Translate Program-Footnote-2689065 +Node: Labels Program689199 +Ref: Labels Program-Footnote-1692570 +Node: Word Sorting692654 +Node: History Sorting696538 +Node: Extract Program698377 +Ref: Extract Program-Footnote-1705880 +Node: Simple Sed706008 +Node: Igawk Program709070 +Ref: Igawk Program-Footnote-1724227 +Ref: Igawk Program-Footnote-2724428 +Node: Anagram Program724566 +Node: Signature Program727634 +Node: Advanced Features728734 +Node: Nondecimal Data730620 +Node: Array Sorting732203 +Node: Controlling Array Traversal732900 +Node: Array Sorting Functions741184 +Ref: Array Sorting Functions-Footnote-1745053 +Node: Two-way I/O745247 +Ref: Two-way I/O-Footnote-1750679 +Node: TCP/IP Networking750761 +Node: Profiling753605 +Node: Internationalization761108 +Node: I18N and L10N762533 +Node: Explaining gettext763219 +Ref: Explaining gettext-Footnote-1768287 +Ref: Explaining gettext-Footnote-2768471 +Node: Programmer i18n768636 +Node: Translator i18n772838 +Node: String Extraction773632 +Ref: String Extraction-Footnote-1774593 +Node: Printf Ordering774679 +Ref: Printf Ordering-Footnote-1777461 +Node: I18N Portability777525 +Ref: I18N Portability-Footnote-1779974 +Node: I18N Example780037 +Ref: I18N Example-Footnote-1782675 +Node: Gawk I18N782747 +Node: Debugger783368 +Node: Debugging784339 +Node: Debugging Concepts784772 +Node: Debugging Terms786628 +Node: Awk Debugging789225 +Node: Sample Debugging Session790117 +Node: Debugger Invocation790637 +Node: Finding The Bug791970 +Node: List of Debugger Commands798457 +Node: Breakpoint Control799791 +Node: Debugger Execution Control803455 +Node: Viewing And Changing Data806815 +Node: Execution Stack810171 +Node: Debugger Info811638 +Node: Miscellaneous Debugger Commands815620 +Node: Readline Support820796 +Node: Limitations821627 +Node: Arbitrary Precision Arithmetic823879 +Ref: Arbitrary Precision Arithmetic-Footnote-1825528 +Node: General Arithmetic825676 +Node: Floating Point Issues827396 +Node: String Conversion Precision828277 +Ref: String Conversion Precision-Footnote-1829982 +Node: Unexpected Results830091 +Node: POSIX Floating Point Problems832244 +Ref: POSIX Floating Point Problems-Footnote-1836069 +Node: Integer Programming836107 +Node: Floating-point Programming837846 +Ref: Floating-point Programming-Footnote-1844177 +Ref: Floating-point Programming-Footnote-2844447 +Node: Floating-point Representation844711 +Node: Floating-point Context845876 +Ref: table-ieee-formats846715 +Node: Rounding Mode848099 +Ref: table-rounding-modes848578 +Ref: Rounding Mode-Footnote-1851593 +Node: Gawk and MPFR851772 +Node: Arbitrary Precision Floats853027 +Ref: Arbitrary Precision Floats-Footnote-1855470 +Node: Setting Precision855786 +Ref: table-predefined-precision-strings856472 +Node: Setting Rounding Mode858617 +Ref: table-gawk-rounding-modes859021 +Node: Floating-point Constants860208 +Node: Changing Precision861637 +Ref: Changing Precision-Footnote-1863034 +Node: Exact Arithmetic863208 +Node: Arbitrary Precision Integers866346 +Ref: Arbitrary Precision Integers-Footnote-1869361 +Node: Dynamic Extensions869508 +Node: Extension Intro870966 +Node: Plugin License872231 +Node: Extension Mechanism Outline872916 +Ref: load-extension873333 +Ref: load-new-function874811 +Ref: call-new-function875806 +Node: Extension API Description877821 +Node: Extension API Functions Introduction879108 +Node: General Data Types884035 +Ref: General Data Types-Footnote-1889730 +Node: Requesting Values890029 +Ref: table-value-types-returned890766 +Node: Memory Allocation Functions891720 +Ref: Memory Allocation Functions-Footnote-1894466 +Node: Constructor Functions894562 +Node: Registration Functions896320 +Node: Extension Functions897005 +Node: Exit Callback Functions899307 +Node: Extension Version String900556 +Node: Input Parsers901206 +Node: Output Wrappers910963 +Node: Two-way processors915473 +Node: Printing Messages917681 +Ref: Printing Messages-Footnote-1918758 +Node: Updating `ERRNO'918910 +Node: Accessing Parameters919649 +Node: Symbol Table Access920879 +Node: Symbol table by name921393 +Node: Symbol table by cookie923369 +Ref: Symbol table by cookie-Footnote-1927501 +Node: Cached values927564 +Ref: Cached values-Footnote-1931054 +Node: Array Manipulation931145 +Ref: Array Manipulation-Footnote-1932243 +Node: Array Data Types932282 +Ref: Array Data Types-Footnote-1934985 +Node: Array Functions935077 +Node: Flattening Arrays938913 +Node: Creating Arrays945765 +Node: Extension API Variables950490 +Node: Extension Versioning951126 +Node: Extension API Informational Variables953027 +Node: Extension API Boilerplate954113 +Node: Finding Extensions957917 +Node: Extension Example958477 +Node: Internal File Description959207 +Node: Internal File Ops963298 +Ref: Internal File Ops-Footnote-1974807 +Node: Using Internal File Ops974947 +Ref: Using Internal File Ops-Footnote-1977300 +Node: Extension Samples977566 +Node: Extension Sample File Functions979090 +Node: Extension Sample Fnmatch987575 +Node: Extension Sample Fork989344 +Node: Extension Sample Inplace990557 +Node: Extension Sample Ord992335 +Node: Extension Sample Readdir993171 +Node: Extension Sample Revout994703 +Node: Extension Sample Rev2way995296 +Node: Extension Sample Read write array995986 +Node: Extension Sample Readfile997869 +Node: Extension Sample API Tests998969 +Node: Extension Sample Time999494 +Node: gawkextlib1000858 +Node: Language History1003639 +Node: V7/SVR3.11005232 +Node: SVR41007552 +Node: POSIX1008994 +Node: BTL1010380 +Node: POSIX/GNU1011114 +Node: Feature History1016713 +Node: Common Extensions1029689 +Node: Ranges and Locales1031001 +Ref: Ranges and Locales-Footnote-11035618 +Ref: Ranges and Locales-Footnote-21035645 +Ref: Ranges and Locales-Footnote-31035879 +Node: Contributors1036100 +Node: Installation1041481 +Node: Gawk Distribution1042375 +Node: Getting1042859 +Node: Extracting1043685 +Node: Distribution contents1045377 +Node: Unix Installation1051082 +Node: Quick Installation1051699 +Node: Additional Configuration Options1054145 +Node: Configuration Philosophy1055881 +Node: Non-Unix Installation1058235 +Node: PC Installation1058693 +Node: PC Binary Installation1059992 +Node: PC Compiling1061840 +Node: PC Testing1064784 +Node: PC Using1065960 +Node: Cygwin1070128 +Node: MSYS1070937 +Node: VMS Installation1071451 +Node: VMS Compilation1072215 +Ref: VMS Compilation-Footnote-11073467 +Node: VMS Dynamic Extensions1073525 +Node: VMS Installation Details1074898 +Node: VMS Running1077149 +Node: VMS GNV1079983 +Node: VMS Old Gawk1080706 +Node: Bugs1081176 +Node: Other Versions1085094 +Node: Notes1091178 +Node: Compatibility Mode1091978 +Node: Additions1092761 +Node: Accessing The Source1093688 +Node: Adding Code1095128 +Node: New Ports1101173 +Node: Derived Files1105308 +Ref: Derived Files-Footnote-11110629 +Ref: Derived Files-Footnote-21110663 +Ref: Derived Files-Footnote-31111263 +Node: Future Extensions1111361 +Node: Implementation Limitations1111944 +Node: Extension Design1113196 +Node: Old Extension Problems1114350 +Ref: Old Extension Problems-Footnote-11115858 +Node: Extension New Mechanism Goals1115915 +Ref: Extension New Mechanism Goals-Footnote-11119280 +Node: Extension Other Design Decisions1119466 +Node: Extension Future Growth1121572 +Node: Old Extension Mechanism1122408 +Node: Basic Concepts1124148 +Node: Basic High Level1124829 +Ref: figure-general-flow1125101 +Ref: figure-process-flow1125700 +Ref: Basic High Level-Footnote-11128929 +Node: Basic Data Typing1129114 +Node: Glossary1132469 +Node: Copying1157700 +Node: GNU Free Documentation License1195256 +Node: Index1220392  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 22230d10..b6af32e5 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -116,11 +116,19 @@ @end ifnottex @ifnottex +@ifnotdocbook @macro ii{text} @i{\text\} @end macro +@end ifnotdocbook @end ifnottex +@ifdocbook +@macro ii{text} +@inlineraw{docbook,\text\} +@end macro +@end ifdocbook + @c For HTML, spell out email addresses, to avoid problems with @c address harvesters for spammers. @ifhtml @@ -176,6 +184,10 @@ Some comments on the layout for TeX. @syncodeindex fn cp @syncodeindex vr cp @end ifxml +@ifdocbook +@synindex fn cp +@synindex vr cp +@end ifdocbook @c If "finalout" is commented out, the printed output will show @c black boxes that mark lines that are too long. Thus, it is @@ -187,10 +199,26 @@ Some comments on the layout for TeX. @end iftex @copying -Copyright @copyright{} 1989, 1991, 1992, 1993, 1996, 1997, 1998, 1999, -2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013, -2014 +@docbook +Published by: + +Free Software Foundation +51 Franklin Street, Fifth Floor +Boston, MA 02110-1301 USA +Phone: +1-617-542-5942 +Fax: +1-617-542-2652 +Email: gnu@@gnu.org +URL: http://www.gnu.org/ + +Copyright © 1989, 1991, 1992, 1993, 1996–2005, 2007, 2009–2014 +Free Software Foundation, Inc. +All Rights Reserved. +@end docbook + +@ifnotdocbook +Copyright @copyright{} 1989, 1991, 1992, 1993, 1996--2005, 2007, 2009--2014 @* Free Software Foundation, Inc. +@end ifnotdocbook @sp 2 This is Edition @value{EDITION} of @cite{@value{TITLE}: @value{SUBTITLE}}, @@ -238,6 +266,7 @@ supports it in developing GNU and promoting software freedom.'' @subtitle @value{UPDATE-MONTH} @author Arnold D. Robbins +@ifnotdocbook @c Include the Distribution inside the titlepage environment so @c that headings are turned off. Headings on and off do not work. @@ -262,6 +291,7 @@ URL: @uref{http://www.gnu.org/} @* ISBN 1-882114-28-0 @* @sp 2 @insertcopying +@end ifnotdocbook @end titlepage @c Thanks to Bob Chassell for directions on doing dedications. @@ -286,6 +316,18 @@ ISBN 1-882114-28-0 @* @headings on @end iftex +@docbook + + +To Miriam, for making me complete. +To Chana, for the joy you bring us. +To Rivka, for the exponential increase. +To Nachum, for the added dimension. +To Malka, for the new beginning. + + +@end docbook + @iftex @headings off @evenheading @thispage@ @ @ @strong{@value{TITLE}} @| @| @@ -294,6 +336,7 @@ ISBN 1-882114-28-0 @* @ifnottex @ifnotxml +@ifnotdocbook @node Top @top General Introduction @c Preface node should come right after the Top @@ -305,6 +348,7 @@ particular records in a file and perform operations upon them. @insertcopying +@end ifnotdocbook @end ifnotxml @end ifnottex @@ -1001,21 +1045,37 @@ and the AWK prototype becomes the product. The new @command{pgawk} (profiling @command{gawk}), produces program execution counts. I recently experimented with an algorithm that for -@math{n} lines of input, exhibited +@ifnotdocbook +@math{n} +@end ifnotdocbook +@ifdocbook +@i{n} +@end ifdocbook +lines of input, exhibited @tex $\sim\! Cn^2$ @end tex @ifnottex +@ifnotdocbook ~ C n^2 +@end ifnotdocbook @end ifnottex +@docbook +∼ Cn2  +@end docbook performance, while theory predicted @tex $\sim\! Cn\log n$ @end tex @ifnottex +@ifnotdocbook ~ C n log n +@end ifnotdocbook @end ifnottex +@docbook +∼ Cn log n  +@end docbook behavior. A few minutes poring over the @file{awkprof.out} profile pinpointed the problem to a single line of code. @command{pgawk} is a welcome addition to @@ -3176,10 +3236,19 @@ There are two ways to run @command{awk}---with an explicit program or with one or more program files. Here are templates for both of them; items enclosed in [@dots{}] in these templates are optional: +@ifnotdocbook @example awk @r{[@var{options}]} -f progfile @r{[@code{--}]} @var{file} @dots{} awk @r{[@var{options}]} @r{[@code{--}]} '@var{program}' @var{file} @dots{} @end example +@end ifnotdocbook + +@c FIXME - find a better way to mark this up in docbook +@docbook +awk [options] -f progfile [--] file … +awk [options] [--] 'program' file … + +@end docbook @cindex GNU long options @cindex long options @@ -17225,7 +17294,18 @@ it is the number of seconds since 1970-01-01 00:00:00 UTC, not counting leap seconds.@footnote{@xref{Glossary}, especially the entries ``Epoch'' and ``UTC.''} All known POSIX-compliant systems support timestamps from 0 through -@math{2^{31} - 1}, which is sufficient to represent times through +@iftex +@math{2^{31} - 1}, +@end iftex +@ifnottex +@ifnotdocbook +2^31 - 1, +@end ifnotdocbook +@end ifnottex +@docbook +231 − 1,  +@end docbook +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. @@ -27574,15 +27654,16 @@ Without any argument, set a breakpoint at the next instruction to be executed in the selected stack frame. Arguments can be one of the following: +@c @asis for docbook @c nested table -@table @var -@item n +@table @asis +@item @var{n} Set a breakpoint at line number @var{n} in the current source file. -@item filename@code{:}n +@item @var{filename}@code{:}@var{n} Set a breakpoint at line number @var{n} in source file @var{filename}. -@item function +@item @var{function} Set a breakpoint at entry to (the first instruction of) function @var{function}. @end table @@ -27607,14 +27688,14 @@ a breakpoint, this deletes that breakpoint so that the program does not stop at that location again. Arguments can be one of the following: @c nested table -@table @var -@item n +@table @asis +@item @var{n} Delete breakpoint(s) set at line number @var{n} in the current source file. -@item filename@code{:}n +@item @var{filename}@code{:}@var{n} Delete breakpoint(s) set at line number @var{n} in source file @var{filename}. -@item function +@item @var{function} Delete breakpoint(s) set at entry to function @var{function}. @end table @@ -28216,8 +28297,8 @@ about the command @var{command}. @cindex debugger commands, @code{list} @cindex @code{list} debugger command @cindex @code{l} debugger command (alias for @code{list}) -@item @code{list} [@code{-} | @code{+} | @var{n} | @var{filename@code{:}n} | @var{n}--@var{m} | @var{function}] -@itemx @code{l} [@code{-} | @code{+} | @var{n} | @var{filename@code{:}n} | @var{n}--@var{m} | @var{function}] +@item @code{list} [@code{-} | @code{+} | @var{n} | @var{filename}@code{:}@var{n} | @var{n}--@var{m} | @var{function}] +@itemx @code{l} [@code{-} | @code{+} | @var{n} | @var{filename}@code{:}@var{n} | @var{n}--@var{m} | @var{function}] Print the specified lines (default 15) from the current source file or the file named @var{filename}. The possible arguments to @code{list} are as follows: @@ -28237,7 +28318,7 @@ Print lines centered around line number @var{n}. @item @var{n}--@var{m} Print lines from @var{n} to @var{m}. -@item @var{filename@code{:}n} +@item @var{filename}@code{:}@var{n} Print lines centered around line number @var{n} in source file @var{filename}. This command may change the current source file. @@ -28707,23 +28788,38 @@ then the answer is @math{2^{53}}. @end iftex @ifnottex +@ifnotdocbook 2^53. +@end ifnotdocbook @end ifnottex +@docbook +253.  +@end docbook The next representable number is the even number @iftex @math{2^{53} + 2}, @end iftex @ifnottex +@ifnotdocbook 2^53 + 2, +@end ifnotdocbook @end ifnottex +@docbook +253 + 2, +@end docbook meaning it is unlikely that you will be able to make @command{gawk} print @iftex @math{2^{53} + 1} @end iftex @ifnottex +@ifnotdocbook 2^53 + 1 +@end ifnotdocbook @end ifnottex +@docbook +253 + 1  +@end docbook in integer format. The range of integers exactly representable by a 64-bit double is @@ -28731,8 +28827,13 @@ is @math{[-2^{53}, 2^{53}]}. @end iftex @ifnottex +@ifnotdocbook [@minus{}2^53, 2^53]. +@end ifnotdocbook @end ifnottex +@docbook +[−253, 253].  +@end docbook If you ever see an integer outside this range in @command{awk} using 64-bit doubles, you have reason to be very suspicious about the accuracy of the output. Here is a simple program with erroneous output: @@ -28956,8 +29057,13 @@ number is then @math{s @cdot 2^e}. @end iftex @ifnottex +@ifnotdocbook @var{s * 2^e}. +@end ifnotdocbook @end ifnottex +@docbook +s ċ 2e.  +@end docbook The first bit of a non-zero binary significand is always one, so the significand in an IEEE-754 format only includes the fractional part, leaving the leading one implicit. @@ -29200,8 +29306,13 @@ numbers are not implemented.} (@math{emax = 2^{30} - 1, emin = -emax}) @end iftex @ifnottex +@ifnotdocbook (@var{emax} = 2^30 @minus{} 1, @var{emin} = @minus{}@var{emax}) +@end ifnotdocbook @end ifnottex +@docbook +(emax = 230 − 1, emin = −emax)  +@end docbook for all floating-point contexts. There is no explicit mechanism to adjust the exponent range. MPFR does not implement subnormal numbers by default, @@ -29273,8 +29384,15 @@ formula: @math{prec = 3.322 @cdot dps} @end iftex @ifnottex +@ifnotdocbook @var{prec} = 3.322 * @var{dps} +@end ifnotdocbook @end ifnottex +@docbook + +prec = 3.322 ċ dps + +@end docbook @noindent Here, @var{prec} denotes the binary precision @@ -29674,8 +29792,14 @@ Communication between @command{gawk} and an extension is two-way. First, when an extension is loaded, it is passed a pointer to a @code{struct} whose fields are function pointers. +@ifnotdocbook This is shown in @ref{load-extension}. +@end ifnotdocbook +@ifdocbook +This is shown in @inlineraw{docbook, }. +@end ifdocbook +@ifnotdocbook @float Figure,load-extension @caption{Loading The Extension} @c FIXME: One day, it should not be necessary to have two cases, @@ -29688,13 +29812,27 @@ This is shown in @ref{load-extension}. @center @image{api-figure1, , , Loading the extension} @end ifnotinfo @end float +@end ifnotdocbook + +@docbook +
+Loading the extension + +
+@end docbook The extension can call functions inside @command{gawk} through these function pointers, at runtime, without needing (link-time) access to @command{gawk}'s symbols. One of these function pointers is to a function for ``registering'' new built-in functions. +@ifnotdocbook This is shown in @ref{load-new-function}. +@end ifnotdocbook +@ifdocbook +This is shown in @inlineraw{docboook, }. +@end ifdocbook +@ifnotdocbook @float Figure,load-new-function @caption{Loading The New Function} @ifinfo @@ -29704,14 +29842,28 @@ This is shown in @ref{load-new-function}. @center @image{api-figure2, , , Loading the new function} @end ifnotinfo @end float +@end ifnotdocbook + +@docbook +
+Loading the new function + +
+@end docbook In the other direction, the extension registers its new functions with @command{gawk} by passing function pointers to the functions that provide the new feature (@code{do_chdir()}, for example). @command{gawk} associates the function pointer with a name and can then call it, using a defined calling convention. +@ifnotdocbook This is shown in @ref{call-new-function}. +@end ifnotdocbook +@ifdocbook +This is shown in @inlineraw{docbook, }. +@end ifdocbook +@ifnotdocbook @float Figure,call-new-function @caption{Calling The New Function} @ifinfo @@ -29721,6 +29873,14 @@ This is shown in @ref{call-new-function}. @center @image{api-figure3, , , Calling the new function} @end ifnotinfo @end float +@end ifnotdocbook + +@docbook +
+Calling The New Function + +
+@end docbook The @code{do_@var{xxx}()} function, in turn, then uses the function pointers in the API @code{struct} to do its work, such as updating @@ -30094,7 +30254,94 @@ 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}. +@c FIXME: Try to do this with spans... +@ifdocbook +@anchor{table-value-types-returned} +@end ifdocbook +@docbook + + + + + Type of Actual Value: + + + + + + + + + + + + + + + + + String + Number + Array + Undefined + + + + + + String + String + String + false + false + + + + Number + Number if can be converted, else false + Number + false + false + + + Type + Array + false + false + Array + false + + + Requested: + Scalar + Scalar + Scalar + false + false + + + + Undefined + String + Number + Array + Undefined + + + + Value Cookie + false + false + false + false + + + + +@end docbook + @ifnotplaintext +@ifnotdocbook @float Table,table-value-types-returned @caption{Value Types Returned} @multitable @columnfractions .50 .50 @@ -30110,6 +30357,7 @@ value type, as appropriate. This behavior is summarized in @item @tab @b{Value Cookie} @tab false @tab false @tab false @tab false @end multitable @end float +@end ifnotdocbook @end ifnotplaintext @ifplaintext @float Table,table-value-types-returned @@ -36266,22 +36514,23 @@ authoritative if it conflicts with this @value{DOCUMENT}. The people maintaining the non-Unix ports of @command{gawk} are as follows: -@multitable {MS-Windows with MINGW} {123456789012345678901234567890123456789001234567890} +@c put the index entries outside the table, for docbook @cindex Deifik, Scott +@cindex Zaretskii, Eli +@cindex Buening, Andreas +@cindex Rankin, Pat +@cindex Malmberg, John +@cindex Pitts, Dave +@multitable {MS-Windows with MINGW} {123456789012345678901234567890123456789001234567890} @item MS-DOS with DJGPP @tab Scott Deifik, @EMAIL{scottd.mail@@sbcglobal.net,scottd dot mail at sbcglobal dot net}. -@cindex Zaretskii, Eli @item MS-Windows with MINGW @tab Eli Zaretskii, @EMAIL{eliz@@gnu.org,eliz at gnu dot org}. -@cindex Buening, Andreas @item OS/2 @tab Andreas Buening, @EMAIL{andreas.buening@@nexgo.de,andreas dot buening at nexgo dot de}. -@cindex Rankin, Pat -@cindex Malmberg, John @item VMS @tab Pat Rankin, @EMAIL{r.pat.rankin@@gmail.com,r.pat.rankin at gmail.com}, and John Malmberg, @EMAIL{wb8tyw@@qsl.net,wb8tyw at qsl.net}. -@cindex Pitts, Dave @item z/OS (OS/390) @tab Dave Pitts, @EMAIL{dpitts@@cozx.com,dpitts at cozx dot com}. @end multitable @@ -37432,8 +37681,15 @@ other introductory texts that you should refer to instead.) @cindex processing data At the most basic level, the job of a program is to process -some input data and produce results. See @ref{figure-general-flow}. +some input data and produce results. +@ifnotdocbook +See @ref{figure-general-flow}. +@end ifnotdocbook +@ifdocbook +See @inlineraw{docbook, }. +@end ifdocbook +@ifnotdocbook @float Figure,figure-general-flow @caption{General Program Flow} @ifinfo @@ -37443,6 +37699,14 @@ some input data and produce results. See @ref{figure-general-flow}. @center @image{general-program, , , General program flow} @end ifnotinfo @end float +@end ifnotdocbook + +@docbook +
+General Program Flow + +
+@end docbook @cindex compiled programs @cindex interpreted programs @@ -37458,9 +37722,15 @@ instructions in your program to process the data. @cindex programming, basic steps When you write a program, it usually consists -of the following, very basic set of steps, as shown -in @ref{figure-process-flow}: +of the following, very basic set of steps, +@ifnotdocbook +as shown in @ref{figure-process-flow}: +@end ifnotdocbook +@ifdocbook +as shown in @inlineraw{docbook }: +@end ifdocbook +@ifnotdocbook @float Figure,figure-process-flow @caption{Basic Program Steps} @ifinfo @@ -37470,6 +37740,14 @@ in @ref{figure-process-flow}: @center @image{process-flow, , , Basic Program Stages} @end ifnotinfo @end float +@end ifnotdocbook + +@docbook +
+Basic Program Stages + +
+@end docbook @table @asis @item Initialization @@ -37946,7 +38224,7 @@ ordinary expression. It could be a string constant, such as (@xref{Computed Regexps}.) @item Environment -A collection of strings, of the form @var{name@code{=}val}, that each +A collection of strings, of the form @var{name}@code{=}@code{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}. @@ -38402,7 +38680,12 @@ record or a string. @c The GNU General Public License. @node Copying @unnumbered GNU General Public License +@ifnotdocbook @center Version 3, 29 June 2007 +@end ifnotdocbook +@docbook +Version 3, 29 June 2007 +@end docbook @c This file is intended to be included within another document, @c hence no sectioning command or @node. @@ -39127,10 +39410,17 @@ first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}. @c The GNU Free Documentation License. @node GNU Free Documentation License @unnumbered GNU Free Documentation License +@ifnotdocbook +@center Version 1.3, 3 November 2008 +@end ifnotdocbook + +@docbook +Version 1.3, 3 November 2008 +@end docbook + @cindex FDL (Free Documentation License) @cindex Free Documentation License (FDL) @cindex GNU Free Documentation License -@center Version 1.3, 3 November 2008 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @@ -39635,8 +39925,10 @@ to permit their use in free software. @c ispell-local-pdict: "ispell-dict" @c End: +@ifnotdocbook @node Index @unnumbered Index +@end ifnotdocbook @printindex cp @bye diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 74920586..8b0ddda0 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -111,11 +111,19 @@ @end ifnottex @ifnottex +@ifnotdocbook @macro ii{text} @i{\text\} @end macro +@end ifnotdocbook @end ifnottex +@ifdocbook +@macro ii{text} +@inlineraw{docbook,\text\} +@end macro +@end ifdocbook + @c For HTML, spell out email addresses, to avoid problems with @c address harvesters for spammers. @ifhtml @@ -171,6 +179,10 @@ Some comments on the layout for TeX. @syncodeindex fn cp @syncodeindex vr cp @end ifxml +@ifdocbook +@synindex fn cp +@synindex vr cp +@end ifdocbook @c If "finalout" is commented out, the printed output will show @c black boxes that mark lines that are too long. Thus, it is @@ -182,10 +194,26 @@ Some comments on the layout for TeX. @end iftex @copying -Copyright @copyright{} 1989, 1991, 1992, 1993, 1996, 1997, 1998, 1999, -2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013, -2014 +@docbook +Published by: + +Free Software Foundation +51 Franklin Street, Fifth Floor +Boston, MA 02110-1301 USA +Phone: +1-617-542-5942 +Fax: +1-617-542-2652 +Email: gnu@@gnu.org +URL: http://www.gnu.org/ + +Copyright © 1989, 1991, 1992, 1993, 1996–2005, 2007, 2009–2014 +Free Software Foundation, Inc. +All Rights Reserved. +@end docbook + +@ifnotdocbook +Copyright @copyright{} 1989, 1991, 1992, 1993, 1996--2005, 2007, 2009--2014 @* Free Software Foundation, Inc. +@end ifnotdocbook @sp 2 This is Edition @value{EDITION} of @cite{@value{TITLE}: @value{SUBTITLE}}, @@ -233,6 +261,7 @@ supports it in developing GNU and promoting software freedom.'' @subtitle @value{UPDATE-MONTH} @author Arnold D. Robbins +@ifnotdocbook @c Include the Distribution inside the titlepage environment so @c that headings are turned off. Headings on and off do not work. @@ -257,6 +286,7 @@ URL: @uref{http://www.gnu.org/} @* ISBN 1-882114-28-0 @* @sp 2 @insertcopying +@end ifnotdocbook @end titlepage @c Thanks to Bob Chassell for directions on doing dedications. @@ -281,6 +311,18 @@ ISBN 1-882114-28-0 @* @headings on @end iftex +@docbook + + +To Miriam, for making me complete. +To Chana, for the joy you bring us. +To Rivka, for the exponential increase. +To Nachum, for the added dimension. +To Malka, for the new beginning. + + +@end docbook + @iftex @headings off @evenheading @thispage@ @ @ @strong{@value{TITLE}} @| @| @@ -289,6 +331,7 @@ ISBN 1-882114-28-0 @* @ifnottex @ifnotxml +@ifnotdocbook @node Top @top General Introduction @c Preface node should come right after the Top @@ -300,6 +343,7 @@ particular records in a file and perform operations upon them. @insertcopying +@end ifnotdocbook @end ifnotxml @end ifnottex @@ -996,21 +1040,37 @@ and the AWK prototype becomes the product. The new @command{pgawk} (profiling @command{gawk}), produces program execution counts. I recently experimented with an algorithm that for -@math{n} lines of input, exhibited +@ifnotdocbook +@math{n} +@end ifnotdocbook +@ifdocbook +@i{n} +@end ifdocbook +lines of input, exhibited @tex $\sim\! Cn^2$ @end tex @ifnottex +@ifnotdocbook ~ C n^2 +@end ifnotdocbook @end ifnottex +@docbook +∼ Cn2  +@end docbook performance, while theory predicted @tex $\sim\! Cn\log n$ @end tex @ifnottex +@ifnotdocbook ~ C n log n +@end ifnotdocbook @end ifnottex +@docbook +∼ Cn log n  +@end docbook behavior. A few minutes poring over the @file{awkprof.out} profile pinpointed the problem to a single line of code. @command{pgawk} is a welcome addition to @@ -3104,10 +3164,19 @@ There are two ways to run @command{awk}---with an explicit program or with one or more program files. Here are templates for both of them; items enclosed in [@dots{}] in these templates are optional: +@ifnotdocbook @example awk @r{[@var{options}]} -f progfile @r{[@code{--}]} @var{file} @dots{} awk @r{[@var{options}]} @r{[@code{--}]} '@var{program}' @var{file} @dots{} @end example +@end ifnotdocbook + +@c FIXME - find a better way to mark this up in docbook +@docbook +awk [options] -f progfile [--] file … +awk [options] [--] 'program' file … + +@end docbook @cindex GNU long options @cindex long options @@ -16395,7 +16464,18 @@ it is the number of seconds since 1970-01-01 00:00:00 UTC, not counting leap seconds.@footnote{@xref{Glossary}, especially the entries ``Epoch'' and ``UTC.''} All known POSIX-compliant systems support timestamps from 0 through -@math{2^{31} - 1}, which is sufficient to represent times through +@iftex +@math{2^{31} - 1}, +@end iftex +@ifnottex +@ifnotdocbook +2^31 - 1, +@end ifnotdocbook +@end ifnottex +@docbook +231 − 1,  +@end docbook +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. @@ -26715,15 +26795,16 @@ Without any argument, set a breakpoint at the next instruction to be executed in the selected stack frame. Arguments can be one of the following: +@c @asis for docbook @c nested table -@table @var -@item n +@table @asis +@item @var{n} Set a breakpoint at line number @var{n} in the current source file. -@item filename@code{:}n +@item @var{filename}@code{:}@var{n} Set a breakpoint at line number @var{n} in source file @var{filename}. -@item function +@item @var{function} Set a breakpoint at entry to (the first instruction of) function @var{function}. @end table @@ -26748,14 +26829,14 @@ a breakpoint, this deletes that breakpoint so that the program does not stop at that location again. Arguments can be one of the following: @c nested table -@table @var -@item n +@table @asis +@item @var{n} Delete breakpoint(s) set at line number @var{n} in the current source file. -@item filename@code{:}n +@item @var{filename}@code{:}@var{n} Delete breakpoint(s) set at line number @var{n} in source file @var{filename}. -@item function +@item @var{function} Delete breakpoint(s) set at entry to function @var{function}. @end table @@ -27357,8 +27438,8 @@ about the command @var{command}. @cindex debugger commands, @code{list} @cindex @code{list} debugger command @cindex @code{l} debugger command (alias for @code{list}) -@item @code{list} [@code{-} | @code{+} | @var{n} | @var{filename@code{:}n} | @var{n}--@var{m} | @var{function}] -@itemx @code{l} [@code{-} | @code{+} | @var{n} | @var{filename@code{:}n} | @var{n}--@var{m} | @var{function}] +@item @code{list} [@code{-} | @code{+} | @var{n} | @var{filename}@code{:}@var{n} | @var{n}--@var{m} | @var{function}] +@itemx @code{l} [@code{-} | @code{+} | @var{n} | @var{filename}@code{:}@var{n} | @var{n}--@var{m} | @var{function}] Print the specified lines (default 15) from the current source file or the file named @var{filename}. The possible arguments to @code{list} are as follows: @@ -27378,7 +27459,7 @@ Print lines centered around line number @var{n}. @item @var{n}--@var{m} Print lines from @var{n} to @var{m}. -@item @var{filename@code{:}n} +@item @var{filename}@code{:}@var{n} Print lines centered around line number @var{n} in source file @var{filename}. This command may change the current source file. @@ -27848,23 +27929,38 @@ then the answer is @math{2^{53}}. @end iftex @ifnottex +@ifnotdocbook 2^53. +@end ifnotdocbook @end ifnottex +@docbook +253.  +@end docbook The next representable number is the even number @iftex @math{2^{53} + 2}, @end iftex @ifnottex +@ifnotdocbook 2^53 + 2, +@end ifnotdocbook @end ifnottex +@docbook +253 + 2, +@end docbook meaning it is unlikely that you will be able to make @command{gawk} print @iftex @math{2^{53} + 1} @end iftex @ifnottex +@ifnotdocbook 2^53 + 1 +@end ifnotdocbook @end ifnottex +@docbook +253 + 1  +@end docbook in integer format. The range of integers exactly representable by a 64-bit double is @@ -27872,8 +27968,13 @@ is @math{[-2^{53}, 2^{53}]}. @end iftex @ifnottex +@ifnotdocbook [@minus{}2^53, 2^53]. +@end ifnotdocbook @end ifnottex +@docbook +[−253, 253].  +@end docbook If you ever see an integer outside this range in @command{awk} using 64-bit doubles, you have reason to be very suspicious about the accuracy of the output. Here is a simple program with erroneous output: @@ -28097,8 +28198,13 @@ number is then @math{s @cdot 2^e}. @end iftex @ifnottex +@ifnotdocbook @var{s * 2^e}. +@end ifnotdocbook @end ifnottex +@docbook +s ċ 2e.  +@end docbook The first bit of a non-zero binary significand is always one, so the significand in an IEEE-754 format only includes the fractional part, leaving the leading one implicit. @@ -28341,8 +28447,13 @@ numbers are not implemented.} (@math{emax = 2^{30} - 1, emin = -emax}) @end iftex @ifnottex +@ifnotdocbook (@var{emax} = 2^30 @minus{} 1, @var{emin} = @minus{}@var{emax}) +@end ifnotdocbook @end ifnottex +@docbook +(emax = 230 − 1, emin = −emax)  +@end docbook for all floating-point contexts. There is no explicit mechanism to adjust the exponent range. MPFR does not implement subnormal numbers by default, @@ -28414,8 +28525,15 @@ formula: @math{prec = 3.322 @cdot dps} @end iftex @ifnottex +@ifnotdocbook @var{prec} = 3.322 * @var{dps} +@end ifnotdocbook @end ifnottex +@docbook + +prec = 3.322 ċ dps + +@end docbook @noindent Here, @var{prec} denotes the binary precision @@ -28815,8 +28933,14 @@ Communication between @command{gawk} and an extension is two-way. First, when an extension is loaded, it is passed a pointer to a @code{struct} whose fields are function pointers. +@ifnotdocbook This is shown in @ref{load-extension}. +@end ifnotdocbook +@ifdocbook +This is shown in @inlineraw{docbook, }. +@end ifdocbook +@ifnotdocbook @float Figure,load-extension @caption{Loading The Extension} @c FIXME: One day, it should not be necessary to have two cases, @@ -28829,13 +28953,27 @@ This is shown in @ref{load-extension}. @center @image{api-figure1, , , Loading the extension} @end ifnotinfo @end float +@end ifnotdocbook + +@docbook +
+Loading the extension + +
+@end docbook The extension can call functions inside @command{gawk} through these function pointers, at runtime, without needing (link-time) access to @command{gawk}'s symbols. One of these function pointers is to a function for ``registering'' new built-in functions. +@ifnotdocbook This is shown in @ref{load-new-function}. +@end ifnotdocbook +@ifdocbook +This is shown in @inlineraw{docboook, }. +@end ifdocbook +@ifnotdocbook @float Figure,load-new-function @caption{Loading The New Function} @ifinfo @@ -28845,14 +28983,28 @@ This is shown in @ref{load-new-function}. @center @image{api-figure2, , , Loading the new function} @end ifnotinfo @end float +@end ifnotdocbook + +@docbook +
+Loading the new function + +
+@end docbook In the other direction, the extension registers its new functions with @command{gawk} by passing function pointers to the functions that provide the new feature (@code{do_chdir()}, for example). @command{gawk} associates the function pointer with a name and can then call it, using a defined calling convention. +@ifnotdocbook This is shown in @ref{call-new-function}. +@end ifnotdocbook +@ifdocbook +This is shown in @inlineraw{docbook, }. +@end ifdocbook +@ifnotdocbook @float Figure,call-new-function @caption{Calling The New Function} @ifinfo @@ -28862,6 +29014,14 @@ This is shown in @ref{call-new-function}. @center @image{api-figure3, , , Calling the new function} @end ifnotinfo @end float +@end ifnotdocbook + +@docbook +
+Calling The New Function + +
+@end docbook The @code{do_@var{xxx}()} function, in turn, then uses the function pointers in the API @code{struct} to do its work, such as updating @@ -29235,7 +29395,94 @@ 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}. +@c FIXME: Try to do this with spans... +@ifdocbook +@anchor{table-value-types-returned} +@end ifdocbook +@docbook + + + + + Type of Actual Value: + + + + + + + + + + + + + + + + + String + Number + Array + Undefined + + + + + + String + String + String + false + false + + + + Number + Number if can be converted, else false + Number + false + false + + + Type + Array + false + false + Array + false + + + Requested: + Scalar + Scalar + Scalar + false + false + + + + Undefined + String + Number + Array + Undefined + + + + Value Cookie + false + false + false + false + + + + +@end docbook + @ifnotplaintext +@ifnotdocbook @float Table,table-value-types-returned @caption{Value Types Returned} @multitable @columnfractions .50 .50 @@ -29251,6 +29498,7 @@ value type, as appropriate. This behavior is summarized in @item @tab @b{Value Cookie} @tab false @tab false @tab false @tab false @end multitable @end float +@end ifnotdocbook @end ifnotplaintext @ifplaintext @float Table,table-value-types-returned @@ -35407,22 +35655,23 @@ authoritative if it conflicts with this @value{DOCUMENT}. The people maintaining the non-Unix ports of @command{gawk} are as follows: -@multitable {MS-Windows with MINGW} {123456789012345678901234567890123456789001234567890} +@c put the index entries outside the table, for docbook @cindex Deifik, Scott +@cindex Zaretskii, Eli +@cindex Buening, Andreas +@cindex Rankin, Pat +@cindex Malmberg, John +@cindex Pitts, Dave +@multitable {MS-Windows with MINGW} {123456789012345678901234567890123456789001234567890} @item MS-DOS with DJGPP @tab Scott Deifik, @EMAIL{scottd.mail@@sbcglobal.net,scottd dot mail at sbcglobal dot net}. -@cindex Zaretskii, Eli @item MS-Windows with MINGW @tab Eli Zaretskii, @EMAIL{eliz@@gnu.org,eliz at gnu dot org}. -@cindex Buening, Andreas @item OS/2 @tab Andreas Buening, @EMAIL{andreas.buening@@nexgo.de,andreas dot buening at nexgo dot de}. -@cindex Rankin, Pat -@cindex Malmberg, John @item VMS @tab Pat Rankin, @EMAIL{r.pat.rankin@@gmail.com,r.pat.rankin at gmail.com}, and John Malmberg, @EMAIL{wb8tyw@@qsl.net,wb8tyw at qsl.net}. -@cindex Pitts, Dave @item z/OS (OS/390) @tab Dave Pitts, @EMAIL{dpitts@@cozx.com,dpitts at cozx dot com}. @end multitable @@ -36573,8 +36822,15 @@ other introductory texts that you should refer to instead.) @cindex processing data At the most basic level, the job of a program is to process -some input data and produce results. See @ref{figure-general-flow}. +some input data and produce results. +@ifnotdocbook +See @ref{figure-general-flow}. +@end ifnotdocbook +@ifdocbook +See @inlineraw{docbook, }. +@end ifdocbook +@ifnotdocbook @float Figure,figure-general-flow @caption{General Program Flow} @ifinfo @@ -36584,6 +36840,14 @@ some input data and produce results. See @ref{figure-general-flow}. @center @image{general-program, , , General program flow} @end ifnotinfo @end float +@end ifnotdocbook + +@docbook +
+General Program Flow + +
+@end docbook @cindex compiled programs @cindex interpreted programs @@ -36599,9 +36863,15 @@ instructions in your program to process the data. @cindex programming, basic steps When you write a program, it usually consists -of the following, very basic set of steps, as shown -in @ref{figure-process-flow}: +of the following, very basic set of steps, +@ifnotdocbook +as shown in @ref{figure-process-flow}: +@end ifnotdocbook +@ifdocbook +as shown in @inlineraw{docbook }: +@end ifdocbook +@ifnotdocbook @float Figure,figure-process-flow @caption{Basic Program Steps} @ifinfo @@ -36611,6 +36881,14 @@ in @ref{figure-process-flow}: @center @image{process-flow, , , Basic Program Stages} @end ifnotinfo @end float +@end ifnotdocbook + +@docbook +
+Basic Program Stages + +
+@end docbook @table @asis @item Initialization @@ -37087,7 +37365,7 @@ ordinary expression. It could be a string constant, such as (@xref{Computed Regexps}.) @item Environment -A collection of strings, of the form @var{name@code{=}val}, that each +A collection of strings, of the form @var{name}@code{=}@code{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}. @@ -37543,7 +37821,12 @@ record or a string. @c The GNU General Public License. @node Copying @unnumbered GNU General Public License +@ifnotdocbook @center Version 3, 29 June 2007 +@end ifnotdocbook +@docbook +Version 3, 29 June 2007 +@end docbook @c This file is intended to be included within another document, @c hence no sectioning command or @node. @@ -38268,10 +38551,17 @@ first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}. @c The GNU Free Documentation License. @node GNU Free Documentation License @unnumbered GNU Free Documentation License +@ifnotdocbook +@center Version 1.3, 3 November 2008 +@end ifnotdocbook + +@docbook +Version 1.3, 3 November 2008 +@end docbook + @cindex FDL (Free Documentation License) @cindex Free Documentation License (FDL) @cindex GNU Free Documentation License -@center Version 1.3, 3 November 2008 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @@ -38776,8 +39066,10 @@ to permit their use in free software. @c ispell-local-pdict: "ispell-dict" @c End: +@ifnotdocbook @node Index @unnumbered Index +@end ifnotdocbook @printindex cp @bye -- cgit v1.2.3 From 17ac00e1ffa2c18b258c77f6820d57f0085832a0 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 30 Mar 2014 20:21:48 +0300 Subject: Sync dfa.c with grep. --- ChangeLog | 4 ++ dfa.c | 189 ++++++++++++++++++++++++++++++++++++-------------------------- 2 files changed, 115 insertions(+), 78 deletions(-) diff --git a/ChangeLog b/ChangeLog index a3fa36ab..62264bf8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2014-03-30 Arnold D. Robbins + + * dfa.c: Sync with GNU grep. + 2014-03-28 Arnold D. Robbins * configure.ac: Remove duplicate AC_HEADER_TIME and rearrange diff --git a/dfa.c b/dfa.c index 0fc68cff..378305df 100644 --- a/dfa.c +++ b/dfa.c @@ -43,7 +43,11 @@ #include "missing_d/gawkbool.h" #endif /* HAVE_STDBOOL_H */ -/* Gawk doesn't use Gnulib, so don't assume static_assert is present. */ +/* Gawk doesn't use Gnulib, so don't assume that setlocale and + static_assert are present. */ +#ifndef LC_ALL +# define setlocale(category, locale) NULL +#endif #ifndef static_assert # define static_assert(cond, diagnostic) \ extern int (*foo (void)) [!!sizeof (struct { int foo: (cond) ? 8 : -1; })] @@ -408,6 +412,14 @@ struct dfa size_t nmultibyte_prop; int *multibyte_prop; +#if MBS_SUPPORT + /* A table indexed by byte values that contains the corresponding wide + character (if any) for that byte. WEOF means the byte is the + leading byte of a multibyte character. Invalid and null bytes are + mapped to themselves. */ + wint_t mbrtowc_cache[NOTCHAR]; +#endif + /* Array of the bracket expression in the DFA. */ struct mb_char_classes *mbcsets; size_t nmbcsets; @@ -510,6 +522,64 @@ static void regexp (void); } \ while (false) +static void +dfambcache (struct dfa *d) +{ +#if MBS_SUPPORT + int i; + for (i = CHAR_MIN; i <= CHAR_MAX; ++i) + { + char c = i; + unsigned char uc = i; + mbstate_t s = { 0 }; + wchar_t wc; + wint_t wi; + switch (mbrtowc (&wc, &c, 1, &s)) + { + default: wi = wc; break; + case (size_t) -2: wi = WEOF; break; + case (size_t) -1: wi = uc; break; + } + d->mbrtowc_cache[uc] = wi; + } +#endif +} + +#if MBS_SUPPORT +/* Given the dfa D, store into *PWC the result of converting the + leading bytes of the multibyte buffer S of length N bytes, updating + the conversion state in *MBS. On conversion error, convert just a + single byte as-is. Return the number of bytes converted. + + This differs from mbrtowc (PWC, S, N, MBS) as follows: + + * Extra arg D, containing an mbrtowc_cache for speed. + * N must be at least 1. + * S[N - 1] must be a sentinel byte. + * Shift encodings are not supported. + * The return value is always in the range 1..N. + * *MBS is always valid afterwards. + * *PWC is always set to something. */ +static size_t +mbs_to_wchar (struct dfa *d, wchar_t *pwc, char const *s, size_t n, + mbstate_t *mbs) +{ + unsigned char uc = s[0]; + wint_t wc = d->mbrtowc_cache[uc]; + + if (wc == WEOF) + { + size_t nbytes = mbrtowc (pwc, s, n, mbs); + if (0 < nbytes && nbytes < (size_t) -2) + return nbytes; + memset (mbs, 0, sizeof *mbs); + wc = uc; + } + + *pwc = wc; + return 1; +} +#endif #ifdef DEBUG @@ -820,13 +890,10 @@ using_simple_locale (void) static int unibyte_c = -1; if (unibyte_c < 0) { -#ifdef LC_ALL - char *locale = setlocale (LC_ALL, NULL); - unibyte_c = (locale && (STREQ (locale, "C") - || STREQ (locale, "POSIX"))); -#else - unibyte_c = 1; -#endif + char const *locale = setlocale (LC_ALL, NULL); + unibyte_c = (!locale + || STREQ (locale, "C") + || STREQ (locale, "POSIX")); } return unibyte_c; } @@ -848,7 +915,7 @@ static int minrep, maxrep; /* Repeat counts for {m,n}. */ static int cur_mb_len = 1; /* Length of the multibyte representation of wctok. */ /* These variables are used only if (MB_CUR_MAX > 1). */ -static mbstate_t mbs; /* Mbstate for mbrlen. */ +static mbstate_t mbs; /* mbstate for mbrtowc. */ static wchar_t wctok; /* Wide character representation of the current multibyte character. */ static unsigned char *mblen_buf;/* Correspond to the input buffer in dfaexec. @@ -885,32 +952,18 @@ static unsigned char const *buf_end; /* reference to end in dfaexec. */ else \ { \ wchar_t _wc; \ - cur_mb_len = mbrtowc (&_wc, lexptr, lexleft, &mbs); \ - if (cur_mb_len <= 0) \ - { \ - cur_mb_len = 1; \ - --lexleft; \ - (wc) = (c) = to_uchar (*lexptr++); \ - } \ - else \ - { \ - lexptr += cur_mb_len; \ - lexleft -= cur_mb_len; \ - (wc) = _wc; \ - (c) = wctob (wc); \ - } \ + size_t nbytes = mbs_to_wchar (dfa, &_wc, lexptr, lexleft, &mbs); \ + cur_mb_len = nbytes; \ + (wc) = _wc; \ + (c) = nbytes == 1 ? to_uchar (*lexptr) : EOF; \ + lexptr += nbytes; \ + lexleft -= nbytes; \ } \ } while (0) -# define FETCH(c, eoferr) \ - do { \ - wint_t wc; \ - FETCH_WC (c, wc, eoferr); \ - } while (0) - #else /* Note that characters become unsigned here. */ -# define FETCH(c, eoferr) \ +# define FETCH_WC(c, unused, eoferr) \ do { \ if (! lexleft) \ { \ @@ -923,8 +976,6 @@ static unsigned char const *buf_end; /* reference to end in dfaexec. */ --lexleft; \ } while (0) -# define FETCH_WC(c, unused, eoferr) FETCH (c, eoferr) - #endif /* MBS_SUPPORT */ #ifndef MIN @@ -1302,14 +1353,9 @@ lex (void) "if (backslash) ...". */ for (i = 0; i < 2; ++i) { - if (MB_CUR_MAX > 1) - { - FETCH_WC (c, wctok, NULL); - if ((int) c == EOF) - goto normal_char; - } - else - FETCH (c, NULL); + FETCH_WC (c, wctok, NULL); + if (c == (unsigned int) EOF) + goto normal_char; switch (c) { @@ -1726,16 +1772,19 @@ static void addtok_wc (wint_t wc) { unsigned char buf[MB_LEN_MAX]; - mbstate_t s; + mbstate_t s = { 0 }; int i; - memset (&s, 0, sizeof s); - cur_mb_len = wcrtomb ((char *) buf, wc, &s); + size_t stored_bytes = wcrtomb ((char *) buf, wc, &s); - /* This is merely stop-gap. When cur_mb_len is 0 or negative, - buf[0] is undefined, yet skipping the addtok_mb call altogether - can result in heap corruption. */ - if (cur_mb_len <= 0) - buf[0] = 0; + if (stored_bytes != (size_t) -1) + cur_mb_len = stored_bytes; + else + { + /* This is merely stop-gap. buf[0] is undefined, yet skipping + the addtok_mb call altogether can corrupt the heap. */ + cur_mb_len = 1; + buf[0] = 0; + } addtok_mb (buf[0], cur_mb_len == 1 ? 3 : 1); for (i = 1; i < cur_mb_len; i++) @@ -3356,43 +3405,26 @@ transit_state (struct dfa *d, state_num s, unsigned char const **pp) /* Initialize mblen_buf and inputwcs with data from the next line. */ static void -prepare_wc_buf (const char *begin, const char *end) +prepare_wc_buf (struct dfa *d, const char *begin, const char *end) { #if MBS_SUPPORT unsigned char eol = eolbyte; - size_t remain_bytes, i; + size_t i; + size_t ilim = end - begin + 1; buf_begin = (unsigned char *) begin; - remain_bytes = 0; - for (i = 0; i < end - begin + 1; i++) + for (i = 0; i < ilim; i++) { - if (remain_bytes == 0) - { - remain_bytes - = mbrtowc (inputwcs + i, begin + i, end - begin - i + 1, &mbs); - if (remain_bytes < 1 - || remain_bytes == (size_t) -1 - || remain_bytes == (size_t) -2 - || (remain_bytes == 1 && inputwcs[i] == (wchar_t) begin[i])) - { - remain_bytes = 0; - inputwcs[i] = (wchar_t) begin[i]; - mblen_buf[i] = 0; - if (begin[i] == eol) - break; - } - else - { - mblen_buf[i] = remain_bytes; - remain_bytes--; - } - } - else + size_t nbytes = mbs_to_wchar (d, inputwcs + i, begin + i, ilim - i, &mbs); + mblen_buf[i] = nbytes - (nbytes == 1); + if (begin[i] == eol) + break; + while (--nbytes != 0) { - mblen_buf[i] = remain_bytes; + i++; + mblen_buf[i] = nbytes; inputwcs[i] = 0; - remain_bytes--; } } @@ -3439,7 +3471,7 @@ dfaexec (struct dfa *d, char const *begin, char *end, MALLOC (mblen_buf, end - begin + 2); MALLOC (inputwcs, end - begin + 2); memset (&mbs, 0, sizeof (mbstate_t)); - prepare_wc_buf ((const char *) p, end); + prepare_wc_buf (d, (const char *) p, end); } for (;;) @@ -3529,7 +3561,7 @@ dfaexec (struct dfa *d, char const *begin, char *end, ++*count; if (d->mb_cur_max > 1) - prepare_wc_buf ((const char *) p, end); + prepare_wc_buf (d, (const char *) p, end); } /* Check if we've run off the end of the buffer. */ @@ -3648,6 +3680,7 @@ void dfacomp (char const *s, size_t len, struct dfa *d, int searchflag) { dfainit (d); + dfambcache (d); dfaparse (s, len, d); dfamust (d); dfaoptimize (d); -- cgit v1.2.3 From a247bbb74aea1f82a73799d25494463663667c54 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 30 Mar 2014 21:25:34 +0300 Subject: Some more docbook fixes. --- doc/ChangeLog | 4 ++++ doc/gawk.texi | 35 +++++++++++++++++++++++++---------- doc/gawktexi.in | 35 +++++++++++++++++++++++++---------- 3 files changed, 54 insertions(+), 20 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 8c34d4c0..b0a25850 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-03-30 Arnold D. Robbins + + * gawktexi.in: Cleanups to docbook, finish math stuff. + 2014-03-28 Arnold D. Robbins * gawktexi.in: Minor cleanups to the indexing. diff --git a/doc/gawk.texi b/doc/gawk.texi index b6af32e5..48219eb8 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -169,6 +169,9 @@ @ignore Some comments on the layout for TeX. 1. Use at least texinfo.tex 2014-01-30.15 +2. When using @docbook, if the last line is part of a paragraph, end +it with a space and @c so that the lines won't run together. This is a +quirk of the language / makeinfo, and isn't going to change. @end ignore @c merge the function and variable indexes into the concept index @@ -1061,7 +1064,7 @@ $\sim\! Cn^2$ @end ifnotdocbook @end ifnottex @docbook -∼ Cn2  +∼ Cn2 @c @end docbook performance, while theory predicted @@ -1074,7 +1077,7 @@ $\sim\! Cn\log n$ @end ifnotdocbook @end ifnottex @docbook -∼ Cn log n  +∼ Cn log n @c @end docbook behavior. A few minutes poring over the @file{awkprof.out} profile pinpointed the problem to @@ -17303,7 +17306,7 @@ All known POSIX-compliant systems support timestamps from 0 through @end ifnotdocbook @end ifnottex @docbook -231 − 1,  +231 − 1, @c @end docbook which is sufficient to represent times through 2038-01-19 03:14:07 UTC. Many systems support a wider range of timestamps, @@ -28793,7 +28796,7 @@ then the answer is @end ifnotdocbook @end ifnottex @docbook -253.  +253. @c @end docbook The next representable number is the even number @iftex @@ -28805,7 +28808,7 @@ The next representable number is the even number @end ifnotdocbook @end ifnottex @docbook -253 + 2, +253 + 2, @c @end docbook meaning it is unlikely that you will be able to make @command{gawk} print @@ -28818,7 +28821,7 @@ meaning it is unlikely that you will be able to make @end ifnotdocbook @end ifnottex @docbook -253 + 1  +253 + 1 @c @end docbook in integer format. The range of integers exactly representable by a 64-bit double @@ -28832,7 +28835,7 @@ is @end ifnotdocbook @end ifnottex @docbook -[−253, 253].  +[−253, 253]. @c @end docbook If you ever see an integer outside this range in @command{awk} using 64-bit doubles, you have reason to be very suspicious about @@ -29062,7 +29065,7 @@ number is then @end ifnotdocbook @end ifnottex @docbook -s ċ 2e.  +s ⋅ 2e. @c @end docbook The first bit of a non-zero binary significand is always one, so the significand in an IEEE-754 format only includes the @@ -29311,7 +29314,7 @@ numbers are not implemented.} @end ifnotdocbook @end ifnottex @docbook -(emax = 230 − 1, emin = −emax)  +(emax = 230 − 1, emin = −emax) @c @end docbook for all floating-point contexts. There is no explicit mechanism to adjust the exponent range. @@ -29390,7 +29393,7 @@ formula: @end ifnottex @docbook -prec = 3.322 ċ dps +prec = 3.322 ⋅ dps @c @end docbook @@ -29628,8 +29631,13 @@ For example, the following computes @math{5^{4^{3^{2}}}}, @end iftex @ifnottex +@ifnotdocbook 5^4^3^2, +@end ifnotdocbook @end ifnottex +@docbook +5432, @c +@end docbook the result of which is beyond the limits of ordinary @command{gawk} numbers: @@ -29651,9 +29659,16 @@ floating-point values instead, the precision needed for correct output would be @math{3.322 @cdot 183231}, @end iftex @ifnottex +@ifnotdocbook @samp{prec = 3.322 * dps}), would be 3.322 x 183231, +@end ifnotdocbook @end ifnottex +@docbook +prec = 3.322 ⋅ dps), +would be +prec = 3.322 ⋅ 183231, @c +@end docbook or 608693. The result from an arithmetic operation with an integer and a floating-point value diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 8b0ddda0..81407770 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -164,6 +164,9 @@ @ignore Some comments on the layout for TeX. 1. Use at least texinfo.tex 2014-01-30.15 +2. When using @docbook, if the last line is part of a paragraph, end +it with a space and @c so that the lines won't run together. This is a +quirk of the language / makeinfo, and isn't going to change. @end ignore @c merge the function and variable indexes into the concept index @@ -1056,7 +1059,7 @@ $\sim\! Cn^2$ @end ifnotdocbook @end ifnottex @docbook -∼ Cn2  +∼ Cn2 @c @end docbook performance, while theory predicted @@ -1069,7 +1072,7 @@ $\sim\! Cn\log n$ @end ifnotdocbook @end ifnottex @docbook -∼ Cn log n  +∼ Cn log n @c @end docbook behavior. A few minutes poring over the @file{awkprof.out} profile pinpointed the problem to @@ -16473,7 +16476,7 @@ All known POSIX-compliant systems support timestamps from 0 through @end ifnotdocbook @end ifnottex @docbook -231 − 1,  +231 − 1, @c @end docbook which is sufficient to represent times through 2038-01-19 03:14:07 UTC. Many systems support a wider range of timestamps, @@ -27934,7 +27937,7 @@ then the answer is @end ifnotdocbook @end ifnottex @docbook -253.  +253. @c @end docbook The next representable number is the even number @iftex @@ -27946,7 +27949,7 @@ The next representable number is the even number @end ifnotdocbook @end ifnottex @docbook -253 + 2, +253 + 2, @c @end docbook meaning it is unlikely that you will be able to make @command{gawk} print @@ -27959,7 +27962,7 @@ meaning it is unlikely that you will be able to make @end ifnotdocbook @end ifnottex @docbook -253 + 1  +253 + 1 @c @end docbook in integer format. The range of integers exactly representable by a 64-bit double @@ -27973,7 +27976,7 @@ is @end ifnotdocbook @end ifnottex @docbook -[−253, 253].  +[−253, 253]. @c @end docbook If you ever see an integer outside this range in @command{awk} using 64-bit doubles, you have reason to be very suspicious about @@ -28203,7 +28206,7 @@ number is then @end ifnotdocbook @end ifnottex @docbook -s ċ 2e.  +s ⋅ 2e. @c @end docbook The first bit of a non-zero binary significand is always one, so the significand in an IEEE-754 format only includes the @@ -28452,7 +28455,7 @@ numbers are not implemented.} @end ifnotdocbook @end ifnottex @docbook -(emax = 230 − 1, emin = −emax)  +(emax = 230 − 1, emin = −emax) @c @end docbook for all floating-point contexts. There is no explicit mechanism to adjust the exponent range. @@ -28531,7 +28534,7 @@ formula: @end ifnottex @docbook -prec = 3.322 ċ dps +prec = 3.322 ⋅ dps @c @end docbook @@ -28769,8 +28772,13 @@ For example, the following computes @math{5^{4^{3^{2}}}}, @end iftex @ifnottex +@ifnotdocbook 5^4^3^2, +@end ifnotdocbook @end ifnottex +@docbook +5432, @c +@end docbook the result of which is beyond the limits of ordinary @command{gawk} numbers: @@ -28792,9 +28800,16 @@ floating-point values instead, the precision needed for correct output would be @math{3.322 @cdot 183231}, @end iftex @ifnottex +@ifnotdocbook @samp{prec = 3.322 * dps}), would be 3.322 x 183231, +@end ifnotdocbook @end ifnottex +@docbook +prec = 3.322 ⋅ dps), +would be +prec = 3.322 ⋅ 183231, @c +@end docbook or 608693. The result from an arithmetic operation with an integer and a floating-point value -- cgit v1.2.3 From d5c54d68d8657428bc8e1d4280152ec24adeacf6 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 31 Mar 2014 21:31:18 +0300 Subject: Remove -Wextra from gcc command line in extension dir.. --- extension/ChangeLog | 6 ++++++ extension/configure | 2 +- extension/configure.ac | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/extension/ChangeLog b/extension/ChangeLog index a07b667e..863fc1e8 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,9 @@ +2014-03-31 Arnold D. Robbins + + * configure.ac: Remove -Wextra to avoid killing compilations + on older versions of gcc. Thanks to Antonio Diaz Diaz for + the report. + 2014-03-28 Arnold D. Robbins * configure.ac: Add AC_HEADER_TIME and AC_HEADER_DIRENT, and diff --git a/extension/configure b/extension/configure index 1b7b33d6..7f660287 100755 --- a/extension/configure +++ b/extension/configure @@ -14034,7 +14034,7 @@ pkgextensiondir='${libdir}/gawk' if test "$GCC" = yes then - CFLAGS="$CFLAGS -Wall -Wextra" + CFLAGS="$CFLAGS -Wall" # Don't add -Wextra, hurts older gcc fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special development options" >&5 diff --git a/extension/configure.ac b/extension/configure.ac index 7be50b34..3a0a60b9 100644 --- a/extension/configure.ac +++ b/extension/configure.ac @@ -51,7 +51,7 @@ AC_SUBST([pkgextensiondir], ['${libdir}/gawk']) if test "$GCC" = yes then - CFLAGS="$CFLAGS -Wall -Wextra" + CFLAGS="$CFLAGS -Wall" # Don't add -Wextra, hurts older gcc fi AC_MSG_CHECKING([for special development options]) -- cgit v1.2.3 From 69d85d51dfd0f2e3b464585633d270f06fa1e846 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 31 Mar 2014 22:17:13 +0300 Subject: Update copyright years on files changed in 2014. --- Makefile.am | 2 +- Makefile.in | 2 +- array.c | 2 +- awk.h | 2 +- builtin.c | 2 +- cmd.h | 2 +- extension/ChangeLog | 2 +- extension/configure.ac | 2 +- extension/filefuncs.c | 2 +- extension/inplace.c | 2 +- extension/readdir.c | 2 +- extension/readfile.c | 3 ++- extension/revtwoway.c | 2 +- extension/rwarray.c | 2 +- extension/testext.c | 2 +- extension/time.c | 2 +- gawkapi.c | 2 +- gawkapi.h | 2 +- interpret.h | 2 +- m4/readline.m4 | 2 +- main.c | 2 +- pc/Makefile | 11 +++++++++++ pc/Makefile.tst | 2 +- 23 files changed, 34 insertions(+), 22 deletions(-) diff --git a/Makefile.am b/Makefile.am index a8acdc48..6e5715d7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,7 +1,7 @@ # # Makefile.am --- automake input file for gawk # -# Copyright (C) 2000-2013 the Free Software Foundation, Inc. +# Copyright (C) 2000-2014 the Free Software Foundation, Inc. # # This file is part of GAWK, the GNU implementation of the # AWK Programming Language. diff --git a/Makefile.in b/Makefile.in index fe921ad8..d243df5b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -17,7 +17,7 @@ # # Makefile.am --- automake input file for gawk # -# Copyright (C) 2000-2013 the Free Software Foundation, Inc. +# Copyright (C) 2000-2014 the Free Software Foundation, Inc. # # This file is part of GAWK, the GNU implementation of the # AWK Programming Language. diff --git a/array.c b/array.c index 840808e4..682b8ddb 100644 --- a/array.c +++ b/array.c @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 1986, 1988, 1989, 1991-2013 the Free Software Foundation, Inc. + * Copyright (C) 1986, 1988, 1989, 1991-2014 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. diff --git a/awk.h b/awk.h index 5fe1e0b5..5f420936 100644 --- a/awk.h +++ b/awk.h @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 1986, 1988, 1989, 1991-2013 the Free Software Foundation, Inc. + * Copyright (C) 1986, 1988, 1989, 1991-2014 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. diff --git a/builtin.c b/builtin.c index 7a6bfc62..b5d38d8d 100644 --- a/builtin.c +++ b/builtin.c @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 1986, 1988, 1989, 1991-2013 the Free Software Foundation, Inc. + * Copyright (C) 1986, 1988, 1989, 1991-2014 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. diff --git a/cmd.h b/cmd.h index 3c64efbe..6fca6d0a 100644 --- a/cmd.h +++ b/cmd.h @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 2004, 2010, 2011, 2013 the Free Software Foundation, Inc. + * Copyright (C) 2004, 2010, 2011, 2013, 2014 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. diff --git a/extension/ChangeLog b/extension/ChangeLog index 863fc1e8..4eb96818 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -29,7 +29,7 @@ * readdir.c (dir_close): Ditto. * readfile.c (do_readfile): Ditto. * revtwoway.c (close_two_proc_data): Ditto. - * rwarray (read_elem): Replace realloc with gawk_realloc. + * rwarray.c (read_elem): Replace realloc with gawk_realloc. (read_value): Replace malloc and free with gawk_malloc and gawk_free. * testext.c (try_modify_environ): Replace free with gawk_free. diff --git a/extension/configure.ac b/extension/configure.ac index 3a0a60b9..c4a69c52 100644 --- a/extension/configure.ac +++ b/extension/configure.ac @@ -1,7 +1,7 @@ dnl dnl configure.ac --- autoconf input file for gawk dnl -dnl Copyright (C) 2012, 2013 the Free Software Foundation, Inc. +dnl Copyright (C) 2012-2014 the Free Software Foundation, Inc. dnl dnl This file is part of GAWK, the GNU implementation of the dnl AWK Programming Language. diff --git a/extension/filefuncs.c b/extension/filefuncs.c index 58acab4d..d5249a4e 100644 --- a/extension/filefuncs.c +++ b/extension/filefuncs.c @@ -9,7 +9,7 @@ */ /* - * Copyright (C) 2001, 2004, 2005, 2010, 2011, 2012, 2013 + * Copyright (C) 2001, 2004, 2005, 2010, 2011, 2012, 2013, 2014 * the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the diff --git a/extension/inplace.c b/extension/inplace.c index b6228a5b..e2f8b73f 100644 --- a/extension/inplace.c +++ b/extension/inplace.c @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 2013 the Free Software Foundation, Inc. + * Copyright (C) 2013, 2014 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. diff --git a/extension/readdir.c b/extension/readdir.c index bf14e486..7bcabcb0 100644 --- a/extension/readdir.c +++ b/extension/readdir.c @@ -10,7 +10,7 @@ */ /* - * Copyright (C) 2012, 2013 the Free Software Foundation, Inc. + * Copyright (C) 2012-2014 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. diff --git a/extension/readfile.c b/extension/readfile.c index 67fa9eca..d4b4aef9 100644 --- a/extension/readfile.c +++ b/extension/readfile.c @@ -8,10 +8,11 @@ * Revised for new dynamic function facilities * Mon Jun 14 14:53:07 IDT 2004 * Revised for formal API May 2012 + * Added input parser March 2014 */ /* - * Copyright (C) 2002, 2003, 2004, 2011, 2012, 2013 + * Copyright (C) 2002, 2003, 2004, 2011, 2012, 2013, 2014 * the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the diff --git a/extension/revtwoway.c b/extension/revtwoway.c index 675e0efa..c0d9381a 100644 --- a/extension/revtwoway.c +++ b/extension/revtwoway.c @@ -7,7 +7,7 @@ */ /* - * Copyright (C) 2012, 2013 the Free Software Foundation, Inc. + * Copyright (C) 2012-2014 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. diff --git a/extension/rwarray.c b/extension/rwarray.c index 940acd62..aa05a0d5 100644 --- a/extension/rwarray.c +++ b/extension/rwarray.c @@ -7,7 +7,7 @@ */ /* - * Copyright (C) 2009, 2010, 2011, 2012, 2013 the Free Software Foundation, Inc. + * Copyright (C) 2009-2014 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. diff --git a/extension/testext.c b/extension/testext.c index 22f2eb84..2dda339f 100644 --- a/extension/testext.c +++ b/extension/testext.c @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 2012, 2013 + * Copyright (C) 2012, 2013, 2014 * the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the diff --git a/extension/time.c b/extension/time.c index c336df88..19466e08 100644 --- a/extension/time.c +++ b/extension/time.c @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 2012, 2013 + * Copyright (C) 2012, 2013, 2014 * the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the diff --git a/gawkapi.c b/gawkapi.c index 782cee48..bcf8d90a 100644 --- a/gawkapi.c +++ b/gawkapi.c @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 2012, 2013 the Free Software Foundation, Inc. + * Copyright (C) 2012-2014 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. diff --git a/gawkapi.h b/gawkapi.h index e84f2dea..5ccadc21 100644 --- a/gawkapi.h +++ b/gawkapi.h @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 2012, 2013 the Free Software Foundation, Inc. + * Copyright (C) 2012-2014 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. diff --git a/interpret.h b/interpret.h index 9243c892..29feb821 100644 --- a/interpret.h +++ b/interpret.h @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 1986, 1988, 1989, 1991-2013 the Free Software Foundation, Inc. + * Copyright (C) 1986, 1988, 1989, 1991-2014 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. diff --git a/m4/readline.m4 b/m4/readline.m4 index 03ee5aef..77ed8b25 100644 --- a/m4/readline.m4 +++ b/m4/readline.m4 @@ -1,5 +1,5 @@ dnl Check for readline and dependencies -dnl Copyright (C) 2004, 2005, 2013 Free Software Foundation, Inc. +dnl Copyright (C) 2004, 2005, 2013, 2014 Free Software Foundation, Inc. dnl dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General diff --git a/main.c b/main.c index dad39f4d..47fd51c9 100644 --- a/main.c +++ b/main.c @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 1986, 1988, 1989, 1991-2013 the Free Software Foundation, Inc. + * Copyright (C) 1986, 1988, 1989, 1991-2014 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. diff --git a/pc/Makefile b/pc/Makefile index 9d98cb1c..d1c08069 100644 --- a/pc/Makefile +++ b/pc/Makefile @@ -6,6 +6,17 @@ # Tested with GNU make on Windows, OS/2 and DOS. +# Copyright (C) 1989-2014 Free Software Foundation, Inc. + +# This Makefile is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + default: @echo "Enter $(MAK) target " @echo " where 'target' is chosen from " diff --git a/pc/Makefile.tst b/pc/Makefile.tst index cab49423..866b4692 100644 --- a/pc/Makefile.tst +++ b/pc/Makefile.tst @@ -1,6 +1,6 @@ # Makefile for GNU Awk test suite. # -# Copyright (C) 1988-2013 the Free Software Foundation, Inc. +# Copyright (C) 1988-2014 the Free Software Foundation, Inc. # # This file is part of GAWK, the GNU implementation of the # AWK Programming Language. -- cgit v1.2.3 From 9e76f361366d88cb3659bee39e4550729671b59e Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 2 Apr 2014 21:31:40 +0300 Subject: README_d/README.gcc-3 file added. --- README_d/ChangeLog | 4 ++++ README_d/README.gcc-3 | 11 +++++++++++ 2 files changed, 15 insertions(+) create mode 100644 README_d/README.gcc-3 diff --git a/README_d/ChangeLog b/README_d/ChangeLog index a31eca7c..3abce253 100644 --- a/README_d/ChangeLog +++ b/README_d/ChangeLog @@ -1,3 +1,7 @@ +2014-04-02 Arnold D. Robbins + + * README.gcc-3: New file. + 2014-01-22 Arnold D. Robbins * README.solaris: Updated. diff --git a/README_d/README.gcc-3 b/README_d/README.gcc-3 new file mode 100644 index 00000000..c76a9af7 --- /dev/null +++ b/README_d/README.gcc-3 @@ -0,0 +1,11 @@ +Wed Apr 2 21:29:17 IDT 2014 +============================ + +I have had a report that on a GNU/Linux system using gcc 3.3.6 (32 bit) +that the aasort test fails. Compiling without -O builds a gawk that +does pass all tests. + +Caveat Emptor. + +Arnold Robbins +arnold@skeeve.com -- cgit v1.2.3 From a491abf24eea77376a10fd6c7b4b569d0c314599 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 3 Apr 2014 21:37:22 +0300 Subject: Minor code cleanup in regcomp.c. --- ChangeLog | 5 +++++ regcomp.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 62264bf8..af92a7c4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-04-03 Arnold D. Robbins + + * regcomp.c (parse_bracket_exp): Move a call to `re_free' inside + an ifdef. Makes the code marginally cleaner. + 2014-03-30 Arnold D. Robbins * dfa.c: Sync with GNU grep. diff --git a/regcomp.c b/regcomp.c index f3c4587d..776b7134 100644 --- a/regcomp.c +++ b/regcomp.c @@ -3128,8 +3128,8 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, if (BE (sbcset == NULL, 0)) #endif /* RE_ENABLE_I18N */ { - re_free (sbcset); #ifdef RE_ENABLE_I18N + re_free (sbcset); re_free (mbcset); #endif *err = REG_ESPACE; -- cgit v1.2.3 From a32f6ebcbe39093b9e4cf91c621da46342fcc593 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 3 Apr 2014 21:48:44 +0300 Subject: Fix test/Makefile.am for making dists. --- test/ChangeLog | 4 ++++ test/Makefile.am | 1 + test/Makefile.in | 1 + 3 files changed, 6 insertions(+) diff --git a/test/ChangeLog b/test/ChangeLog index f8d9f943..68615c9a 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2014-04-03 Arnold D. Robbins + + * Makefile.am (EXTRA_DIST): Add readfile2.ok. Oops. + 2014-03-27 Arnold D. Robbins * Makefile.am (readfile2): New test. diff --git a/test/Makefile.am b/test/Makefile.am index d92f358e..d295f6f2 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -709,6 +709,7 @@ EXTRA_DIST = \ readdir.awk \ readdir0.awk \ readfile2.awk \ + readfile2.ok \ rebt8b1.awk \ rebt8b1.ok \ rebt8b2.awk \ diff --git a/test/Makefile.in b/test/Makefile.in index 6e1bcbb3..0c582a00 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -955,6 +955,7 @@ EXTRA_DIST = \ readdir.awk \ readdir0.awk \ readfile2.awk \ + readfile2.ok \ rebt8b1.awk \ rebt8b1.ok \ rebt8b2.awk \ -- cgit v1.2.3 From 0ae379ef3b1c09d15978bc12b5e959d6e8f24061 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 3 Apr 2014 21:49:08 +0300 Subject: Bump version for test tarball. --- configure | 20 ++++++++++---------- configure.ac | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/configure b/configure index d4a7d484..05d640cb 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for GNU Awk 4.1.0g. +# Generated by GNU Autoconf 2.69 for GNU Awk 4.1.0h. # # Report bugs to . # @@ -580,8 +580,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GNU Awk' PACKAGE_TARNAME='gawk' -PACKAGE_VERSION='4.1.0g' -PACKAGE_STRING='GNU Awk 4.1.0g' +PACKAGE_VERSION='4.1.0h' +PACKAGE_STRING='GNU Awk 4.1.0h' PACKAGE_BUGREPORT='bug-gawk@gnu.org' PACKAGE_URL='http://www.gnu.org/software/gawk/' @@ -1324,7 +1324,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures GNU Awk 4.1.0g to adapt to many kinds of systems. +\`configure' configures GNU Awk 4.1.0h to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1394,7 +1394,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GNU Awk 4.1.0g:";; + short | recursive ) echo "Configuration of GNU Awk 4.1.0h:";; esac cat <<\_ACEOF @@ -1512,7 +1512,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -GNU Awk configure 4.1.0g +GNU Awk configure 4.1.0h generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2221,7 +2221,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by GNU Awk $as_me 4.1.0g, which was +It was created by GNU Awk $as_me 4.1.0h, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3104,7 +3104,7 @@ fi # Define the identity of the package. PACKAGE='gawk' - VERSION='4.1.0g' + VERSION='4.1.0h' cat >>confdefs.h <<_ACEOF @@ -11506,7 +11506,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by GNU Awk $as_me 4.1.0g, which was +This file was extended by GNU Awk $as_me 4.1.0h, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -11574,7 +11574,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -GNU Awk config.status 4.1.0g +GNU Awk config.status 4.1.0h configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 85f0497b..95647bf5 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ dnl dnl Process this file with autoconf to produce a configure script. -AC_INIT([GNU Awk], 4.1.0g, bug-gawk@gnu.org, gawk) +AC_INIT([GNU Awk], 4.1.0h, bug-gawk@gnu.org, gawk) # This is a hack. Different versions of install on different systems # are just too different. Chuck it and use install-sh. -- cgit v1.2.3 From 17fdac5a535106e32ad8c8aa9ac23b0f10573ccd Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 3 Apr 2014 21:50:15 +0300 Subject: Bump version is pc/config.h after doing so for tarball. --- pc/config.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pc/config.h b/pc/config.h index 38d77490..0c7fec35 100644 --- a/pc/config.h +++ b/pc/config.h @@ -423,7 +423,7 @@ #define PACKAGE_NAME "GNU Awk" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "GNU Awk 4.1.0g" +#define PACKAGE_STRING "GNU Awk 4.1.0h" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "gawk" @@ -432,7 +432,7 @@ #define PACKAGE_URL "http://www.gnu.org/software/gawk/" /* Define to the version of this package. */ -#define PACKAGE_VERSION "4.1.0g" +#define PACKAGE_VERSION "4.1.0h" /* Define to 1 if *printf supports %F format */ #undef PRINTF_HAS_F_FORMAT @@ -494,7 +494,7 @@ /* Version number of package */ -#define VERSION "4.1.0g" +#define VERSION "4.1.0h" /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE -- cgit v1.2.3 From 396767664c93e58b106e000dd52fd973c8b5b273 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 4 Apr 2014 11:43:07 +0300 Subject: Fix a compilation warning. --- extension/ChangeLog | 6 ++++++ extension/time.c | 4 +--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/extension/ChangeLog b/extension/ChangeLog index 4eb96818..c3726398 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,9 @@ +2014-04-04 Arnold D. Robbins + + * time.c: Include unconditionally to get declaration + of nanosleep on Linux. Avoids a warning. Thanks to Michal + Jaegermann. + 2014-03-31 Arnold D. Robbins * configure.ac: Remove -Wextra to avoid killing compilations diff --git a/extension/time.c b/extension/time.c index 19466e08..e6b2b39f 100644 --- a/extension/time.c +++ b/extension/time.c @@ -85,15 +85,13 @@ static awk_bool_t (*init_func)(void) = NULL; int plugin_is_GPL_compatible; +#include #if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H) #include #endif #if defined(HAVE_SELECT) && defined(HAVE_SYS_SELECT_H) #include #endif -#if defined(HAVE_NANOSLEEP) && defined(HAVE_TIME_H) -#include -#endif #if defined(HAVE_GETSYSTEMTIMEASFILETIME) #define WIN32_LEAN_AND_MEAN #include -- cgit v1.2.3 From 9e59349a27123aa29b4652fed407a4fd902f4fcb Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 4 Apr 2014 12:31:05 +0300 Subject: Update Checklist file in git repo. --- Checklist | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Checklist b/Checklist index 98faf6cb..e0e1ffec 100644 --- a/Checklist +++ b/Checklist @@ -1,4 +1,4 @@ -Sun Apr 21 23:14:21 IDT 2013 +Fri Apr 4 11:43:29 IDT 2014 ============================ A checklist for making releases @@ -12,20 +12,18 @@ README_d/* edited VMS/* version stuff up to date vms/vmsbuild.com vms/descrip.mms - vms/vms-conf.h: update VERSION and PACKAGE_VERSION NEWS is up to date Any new options have been added to usage function All paper work signed and sent in All files checked in Version information is correct in - version.c doc/gawk.1 doc/awkcard.in - doc/gawk.texi + doc/gawktexi.in doc/gawkinet.texi extension/configure.ac doc/texinfo.tex is up to date -doc/gawk.texi is up to date +doc/gawktexi.in is up to date doc/gawkinet.texi is up to date doc/gawk.1 is up to date doc/awkcard.in is up to date @@ -43,6 +41,8 @@ Testing on compile with tcc compile with clang + compile 32 bit tests - clang and gcc + configure --disable-lint configure --disable-nls configure --with-whiny-user-strftime -- cgit v1.2.3 From 729a652d8e504f0897ea216505b027ae2d682c16 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 8 Apr 2014 19:14:52 +0300 Subject: Prettify lists of tests. --- test/ChangeLog | 4 ++++ test/Makefile.am | 3 +-- test/Makefile.in | 3 +-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/test/ChangeLog b/test/ChangeLog index 68615c9a..f694c61c 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2014-04-04 Arnold D. Robbins + + * Makefile.am: Prettify list of tests a little bit. + 2014-04-03 Arnold D. Robbins * Makefile.am (EXTRA_DIST): Add readfile2.ok. Oops. diff --git a/test/Makefile.am b/test/Makefile.am index d295f6f2..dc379e06 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -947,8 +947,7 @@ BASIC_TESTS = \ arrayref arrymem1 arryref2 arryref3 arryref4 arryref5 arynasty \ arynocls aryprm1 aryprm2 aryprm3 aryprm4 aryprm5 aryprm6 aryprm7 \ aryprm8 arysubnm asgext awkpath \ - back89 backgsub \ - badassign1 \ + back89 backgsub badassign1 \ childin clobber closebad clsflnam compare compare2 concat1 concat2 \ concat3 concat4 convfmt \ datanonl defref delargv delarpm2 delarprm delfunc dfamb1 dfastress dynlj \ diff --git a/test/Makefile.in b/test/Makefile.in index 0c582a00..d94c6e67 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -1192,8 +1192,7 @@ BASIC_TESTS = \ arrayref arrymem1 arryref2 arryref3 arryref4 arryref5 arynasty \ arynocls aryprm1 aryprm2 aryprm3 aryprm4 aryprm5 aryprm6 aryprm7 \ aryprm8 arysubnm asgext awkpath \ - back89 backgsub \ - badassign1 \ + back89 backgsub badassign1 \ childin clobber closebad clsflnam compare compare2 concat1 concat2 \ concat3 concat4 convfmt \ datanonl defref delargv delarpm2 delarprm delfunc dfamb1 dfastress dynlj \ -- cgit v1.2.3 From 71cc6bfcf68acc63dca06eb3cd5bfa42d1ec7dcf Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 8 Apr 2014 19:15:10 +0300 Subject: Typo fix in README_d/README.pc. --- README_d/README.pc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_d/README.pc b/README_d/README.pc index 32a81fc1..63ba473e 100644 --- a/README_d/README.pc +++ b/README_d/README.pc @@ -18,7 +18,7 @@ The `configure' step takes a long time, but works otherwise. ******************************** N O T E ******************************* * The `|&' operator only works when gawk is compiled for Cygwin or for * -* MinGW. Neither * socket support nor two-way pipes work in any other * +* MinGW. Neither socket support nor two-way pipes work in any other * * Windows environment! * ************************************************************************ -- cgit v1.2.3 From d15916f332c4e03c7496051e9e7301a4d1fe5b2d Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 8 Apr 2014 19:15:55 +0300 Subject: Update texinfo.tex to latest. --- doc/ChangeLog | 4 ++++ doc/texinfo.tex | 49 ++++++++++++++++++++++++++++++------------------- 2 files changed, 34 insertions(+), 19 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index b0a25850..c38f8748 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-04-08 Arnold D. Robbins + + * texinfo.tex: Update to latest. + 2014-03-30 Arnold D. Robbins * gawktexi.in: Cleanups to docbook, finish math stuff. diff --git a/doc/texinfo.tex b/doc/texinfo.tex index b51ac3dc..7506dffb 100644 --- a/doc/texinfo.tex +++ b/doc/texinfo.tex @@ -3,7 +3,7 @@ % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % -\def\texinfoversion{2014-02-09.15} +\def\texinfoversion{2014-03-18.17} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, @@ -3935,19 +3935,23 @@ end } % multitable-only commands. -% -% @headitem starts a heading row, which we typeset in bold. -% Assignments have to be global since we are inside the implicit group -% of an alignment entry. \everycr resets \everytab so we don't have to +% +% @headitem starts a heading row, which we typeset in bold. Assignments +% have to be global since we are inside the implicit group of an +% alignment entry. \everycr below resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \checkenv\multitable \crcr + \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % +% default for tables with no headings. +\let\headitemcrhook=\relax +% % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we again encounter the problem the 1sp was intended to solve. @@ -3978,15 +3982,15 @@ end % \everycr = {% \noalign{% - \global\everytab={}% + \global\everytab={}% Reset from possible headitem. \global\colcount=0 % Reset the column counter. - % Check for saved footnotes, etc. + % + % Check for saved footnotes, etc.: \checkinserts - % Keeps underfull box messages off when table breaks over pages. - %\filbreak - % Maybe so, but it also creates really weird page breaks when the - % table breaks over pages. Wouldn't \vfil be better? Wait until the - % problem manifests itself, so it can be fixed for real --karl. + % + % Perhaps a \nobreak, then reset: + \headitemcrhook + \global\let\headitemcrhook=\relax }% }% % @@ -4428,7 +4432,7 @@ end % complicated, when \tex is in effect and \{ is a \delimiter again. % We can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. Perhaps we - % should define @lbrace and @rbrace commands a la @comma. + % should use @lbracechar and @rbracechar? \def\{{{\tt\char123}}% \def\}{{\tt\char125}}% % @@ -4449,8 +4453,7 @@ end % @end macro % ... % @funindex commtest - % - % The above is not enough to reproduce the bug, but it gives the flavor. + % This is not enough to reproduce the bug, but it gives the flavor. % % Sample whatsit resulting: % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} @@ -4663,6 +4666,9 @@ end \let\xeatspaces = \eatspaces } +% For testing: output @{ and @} in index sort strings as \{ and \}. +\newif\ifusebracesinindexes + % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string @@ -4691,11 +4697,16 @@ end % Unfortunately, texindex is not prepared to handle braces in the % content at all. So for index sorting, we map @{ and @} to strings % starting with |, since that ASCII character is between ASCII { and }. - \def\{{|a}% - \def\lbracechar{|a}% + \ifusebracesinindexes + \def\lbracechar{\lbracecmd}% + \def\rbracechar{\rbracecmd}% + \else + \def\lbracechar{|a}% + \def\rbracechar{|b}% + \fi + \let\{=\lbracechar + \let\}=\rbracechar % - \def\}{|b}% - \def\rbracechar{|b}% % % Non-English letters. \def\AA{AA}% -- cgit v1.2.3 From dc5af665700d9b04fdf9c18930526d28eef5d5d9 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 8 Apr 2014 21:15:08 +0300 Subject: Make release tar ball. --- ChangeLog | 9 + README | 23 +- README_d/ChangeLog | 4 + awklib/ChangeLog | 4 + configure | 20 +- configure.ac | 2 +- doc/ChangeLog | 6 + doc/awkcard.in | 8 +- doc/gawk.info | 1087 +++++++++++++++++++------------------- doc/gawk.texi | 24 +- doc/gawktexi.in | 24 +- extension/ChangeLog | 8 + extension/build-aux/ChangeLog | 4 + extension/configure | 20 +- extension/configure.ac | 2 +- extension/m4/ChangeLog | 4 + helpers/ChangeLog | 4 + m4/ChangeLog | 4 + missing_d/ChangeLog | 4 + pc/ChangeLog | 4 + pc/config.h | 6 +- po/ChangeLog | 4 + po/ca.gmo | Bin 43102 -> 83005 bytes po/ca.po | 738 ++++++++++++++++---------- po/da.gmo | Bin 42270 -> 42160 bytes po/da.po | 1157 ++++++++++++++++++++-------------------- po/de.gmo | Bin 45338 -> 45199 bytes po/de.po | 1159 +++++++++++++++++++++-------------------- po/es.gmo | Bin 44713 -> 44600 bytes po/es.po | 1157 ++++++++++++++++++++-------------------- po/fi.gmo | Bin 84555 -> 84555 bytes po/fi.po | 692 ++++++++++++++---------- po/fr.gmo | Bin 85628 -> 85628 bytes po/fr.po | 702 +++++++++++++++---------- po/gawk.pot | 316 +++++------ po/it.gmo | Bin 81018 -> 81018 bytes po/it.po | 318 +++++------ po/ja.gmo | Bin 47970 -> 47970 bytes po/ja.po | 1158 ++++++++++++++++++++-------------------- po/ms.gmo | Bin 1184 -> 1184 bytes po/ms.po | 1153 ++++++++++++++++++++-------------------- po/nl.gmo | Bin 80863 -> 80863 bytes po/nl.po | 630 +++++++++++++--------- po/pl.gmo | Bin 70599 -> 71101 bytes po/pl.po | 603 ++++++++++++--------- po/sv.gmo | Bin 80916 -> 80916 bytes po/sv.po | 571 ++++++++++++-------- po/vi.gmo | Bin 93025 -> 93025 bytes po/vi.po | 657 ++++++++++++++--------- posix/ChangeLog | 4 + test/ChangeLog | 4 + vms/ChangeLog | 8 + vms/descrip.mms | 2 +- vms/vax/ChangeLog | 4 + vms/vmsbuild.com | 5 +- 55 files changed, 6766 insertions(+), 5547 deletions(-) diff --git a/ChangeLog b/ChangeLog index af92a7c4..4c2e7e83 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2014-04-08 Arnold D. Robbins + + * 4.1.1: Release tar ball made. + +2014-04-08 Arnold D. Robbins + + * README: Update. + * configure.ac: Bump version. + 2014-04-03 Arnold D. Robbins * regcomp.c (parse_bracket_exp): Move a call to `re_free' inside diff --git a/README b/README index 85127f45..028637ec 100644 --- a/README +++ b/README @@ -7,19 +7,21 @@ README: -This is GNU Awk 4.1.0. It is upwardly compatible with Brian Kernighan's +This is GNU Awk 4.1.1. It is upwardly compatible with Brian Kernighan's version of Unix awk. It is almost completely compliant with the 2008 POSIX 1003.1 standard for awk. (See the note below about POSIX.) -This is a major new release. See NEWS and ChangeLog for details. +This is a bug-fix release. See NEWS and ChangeLog for details. -Work to be done is described briefly in the TODO file. Changes in this -version are summarized in the NEWS file. +Work to be done is described briefly in the TODO file, which is available +only in the 'master' branch in the Git repo. + +Changes in this version are summarized in the NEWS file. Read the file POSIX.STD for a discussion of issues where the standard says one thing but gawk does something different. -To format the documentation with TeX, use at least version 2013-03-19.11 +To format the documentation with TeX, use at least version 2014-03-18.17 of texinfo.tex. There is a usable copy of texinfo.tex in the doc directory. INSTALLATION: @@ -45,9 +47,12 @@ Automake. After successful compilation, do `make check' to run the test suite. There should be no output from the `cmp' invocations except in the cases where there are small differences in floating point values, and -possibly in the case of strftime. Several of the tests ignore errors -on purpose; those are not a problem. If there are other differences, -please investigate and report the problem. +possibly in the case of strftime. There may be differences based on +installed (or not installed) locales and the quality of multibyte +character support on your system. + +Several of the tests ignore errors on purpose; those are not a problem. +If there are other differences, please investigate and report the problem. PRINTING THE MANUAL @@ -65,7 +70,7 @@ the section in the manual on reporting bugs. Note that comp.lang.awk is about the worst place to post a gawk bug report. Please, use the mechanisms outlined in the manual. -Email should be sent to bug-gawk@gnu.org. This is now a separate mailing +Email should be sent to bug-gawk@gnu.org. This is a separate mailing list at GNU Central. The advantage to using this address is that bug reports are archived at GNU Central. diff --git a/README_d/ChangeLog b/README_d/ChangeLog index 3abce253..6bc828d9 100644 --- a/README_d/ChangeLog +++ b/README_d/ChangeLog @@ -1,3 +1,7 @@ +2014-04-08 Arnold D. Robbins + + * 4.1.1: Release tar ball made. + 2014-04-02 Arnold D. Robbins * README.gcc-3: New file. diff --git a/awklib/ChangeLog b/awklib/ChangeLog index e0baf3cb..6ef0bbde 100644 --- a/awklib/ChangeLog +++ b/awklib/ChangeLog @@ -1,3 +1,7 @@ +2014-04-08 Arnold D. Robbins + + * 4.1.1: Release tar ball made. + 2014-03-17 Arnold D. Robbins * Makefile.am (clean-local): Clean up .dSYM directories for Mac OS X. diff --git a/configure b/configure index 05d640cb..9d80aee9 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for GNU Awk 4.1.0h. +# Generated by GNU Autoconf 2.69 for GNU Awk 4.1.1. # # Report bugs to . # @@ -580,8 +580,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GNU Awk' PACKAGE_TARNAME='gawk' -PACKAGE_VERSION='4.1.0h' -PACKAGE_STRING='GNU Awk 4.1.0h' +PACKAGE_VERSION='4.1.1' +PACKAGE_STRING='GNU Awk 4.1.1' PACKAGE_BUGREPORT='bug-gawk@gnu.org' PACKAGE_URL='http://www.gnu.org/software/gawk/' @@ -1324,7 +1324,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures GNU Awk 4.1.0h to adapt to many kinds of systems. +\`configure' configures GNU Awk 4.1.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1394,7 +1394,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GNU Awk 4.1.0h:";; + short | recursive ) echo "Configuration of GNU Awk 4.1.1:";; esac cat <<\_ACEOF @@ -1512,7 +1512,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -GNU Awk configure 4.1.0h +GNU Awk configure 4.1.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2221,7 +2221,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by GNU Awk $as_me 4.1.0h, which was +It was created by GNU Awk $as_me 4.1.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3104,7 +3104,7 @@ fi # Define the identity of the package. PACKAGE='gawk' - VERSION='4.1.0h' + VERSION='4.1.1' cat >>confdefs.h <<_ACEOF @@ -11506,7 +11506,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by GNU Awk $as_me 4.1.0h, which was +This file was extended by GNU Awk $as_me 4.1.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -11574,7 +11574,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -GNU Awk config.status 4.1.0h +GNU Awk config.status 4.1.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 95647bf5..941334e3 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ dnl dnl Process this file with autoconf to produce a configure script. -AC_INIT([GNU Awk], 4.1.0h, bug-gawk@gnu.org, gawk) +AC_INIT([GNU Awk], 4.1.1, bug-gawk@gnu.org, gawk) # This is a hack. Different versions of install on different systems # are just too different. Chuck it and use install-sh. diff --git a/doc/ChangeLog b/doc/ChangeLog index c38f8748..222a677f 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,6 +1,12 @@ +2014-04-08 Arnold D. Robbins + + * 4.1.1: Release tar ball made. + 2014-04-08 Arnold D. Robbins * texinfo.tex: Update to latest. + * awkcard.in: Update copyright, patchlevel in download. + * gawktexi.in: Update patchlevel, update month, spell check. 2014-03-30 Arnold D. Robbins diff --git a/doc/awkcard.in b/doc/awkcard.in index 5f3a9735..ca28f0a7 100644 --- a/doc/awkcard.in +++ b/doc/awkcard.in @@ -100,7 +100,7 @@ Brian Kernighan and Michael Brennan who reviewed it. \*(CD .SL .nf -\*(FRCopyright \(co 1996\(en2005, 2007, 2009\(en2013 +\*(FRCopyright \(co 1996\(en2005, 2007, 2009\(en2014 Free Software Foundation, Inc. .nf .BT @@ -1939,7 +1939,7 @@ to use the current domain.\*(CB .ES .nf \*(CDHost: \*(FCftp.gnu.org\*(FR -File: \*(FC/gnu/gawk/gawk-4.1.0.tar.gz\fP +File: \*(FC/gnu/gawk/gawk-4.1.1.tar.gz\fP .in +.2i .fi GNU \*(AK (\*(GK). There may be a later version. @@ -1969,8 +1969,8 @@ maintains it.\*(CX .\" --- Copying Permissions .ES .fi -\*(CDCopyright \(co 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, -2007, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. +\*(CDCopyright \(co 1996\(en2005, +2007, 2009\(en2014 Free Software Foundation, Inc. .sp .5 Permission is granted to make and distribute verbatim copies of this reference card provided the copyright notice and this permission notice diff --git a/doc/gawk.info b/doc/gawk.info index f63c62ce..8a26992f 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -14,7 +14,7 @@ Free Software Foundation, Inc. This is Edition 4.1 of `GAWK: Effective AWK Programming: A User's -Guide for GNU Awk', for the 4.1.0 (or later) version of the GNU +Guide for GNU Awk', for the 4.1.1 (or later) version of the GNU implementation of AWK. Permission is granted to copy, distribute and/or modify this document @@ -45,7 +45,7 @@ Free Software Foundation, Inc. This is Edition 4.1 of `GAWK: Effective AWK Programming: A User's -Guide for GNU Awk', for the 4.1.0 (or later) version of the GNU +Guide for GNU Awk', for the 4.1.1 (or later) version of the GNU implementation of AWK. Permission is granted to copy, distribute and/or modify this document @@ -583,7 +583,8 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) version of `awk'. * POSIX/GNU:: The extensions in `gawk' not in POSIX `awk'. -* Feature History:: The history of the features in `gawk'. +* Feature History:: The history of the features in + `gawk'. * Common Extensions:: Common Extensions Summary. * Ranges and Locales:: How locales used to affect regexp ranges. @@ -9954,7 +9955,7 @@ with a pound sign (`#'). the `delete' statement with the `SYMTAB' array. You may use an index for `SYMTAB' that is not a predefined - identifer: + identifier: SYMTAB["xxx"] = 5 print SYMTAB["xxx"] @@ -12611,7 +12612,7 @@ of Arrays::). traversing a multidimensional array: you can test if an element is itself an array or not. The second is inside the body of a user-defined function (not discussed yet; *note User-defined::), to -test if a paramater is an array or not. +test if a parameter is an array or not. Note, however, that using `isarray()' at the global level to test variables makes no sense. Since you are the one writing the program, you @@ -21172,11 +21173,15 @@ need it. arbitrary precision arithmetic. The easiest way to find out is to look at the output of the following command: - $ gawk --version - -| GNU Awk 4.1.0, API: 1.0 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2) - -| Copyright (C) 1989, 1991-2013 Free Software Foundation. + $ ./gawk --version + -| GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2) + -| Copyright (C) 1989, 1991-2014 Free Software Foundation. ... +(You may see different version numbers than what's shown here. That's +OK; what's important is to see that GNU MPFR and GNU MP are listed in +the output.) + `gawk' uses the GNU MPFR (http://www.mpfr.org) and GNU MP (http://gmplib.org) (GMP) libraries for arbitrary precision arithmetic on numbers. So if you do not see the names of these libraries in the @@ -26046,7 +26051,7 @@ There are three ways to get GNU software: supported. If you have the `wget' program, you can use a command like the following: - wget http://ftp.gnu.org/gnu/gawk/gawk-4.1.0.tar.gz + wget http://ftp.gnu.org/gnu/gawk/gawk-4.1.1.tar.gz The GNU software archive is mirrored around the world. The up-to-date list of mirror sites is available from the main FSF web site @@ -26065,26 +26070,26 @@ 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'. - Once you have the distribution (for example, `gawk-4.1.0.tar.gz'), + Once you have the distribution (for example, `gawk-4.1.1.tar.gz'), use `gzip' to expand the file and then use `tar' to extract it. You can use the following pipeline to produce the `gawk' distribution: # Under System V, add 'o' to the tar options - gzip -d -c gawk-4.1.0.tar.gz | tar -xvpf - + gzip -d -c gawk-4.1.1.tar.gz | tar -xvpf - On a system with GNU `tar', you can let `tar' do the decompression for you: - tar -xvpzf gawk-4.1.0.tar.gz + tar -xvpzf gawk-4.1.1.tar.gz -Extracting the archive creates a directory named `gawk-4.1.0' in the +Extracting the archive creates a directory named `gawk-4.1.1' in the current directory. The distribution file name is of the form `gawk-V.R.P.tar.gz'. The V represents the major version of `gawk', the R represents the current release of version V, and the P represents a "patch level", meaning that minor bugs have been fixed in the release. The current patch -level is 0, but when retrieving distributions, you should get the +level is 1, but when retrieving distributions, you should get the version with the highest version, release, and patch level. (Note, however, that patch levels greater than or equal to 70 denote "beta" or nonproduction software; you might not want to retrieve such a version @@ -26294,7 +26299,7 @@ Unix-derived systems, GNU/Linux, BSD-based systems, and the Cygwin environment for MS-Windows. After you have extracted the `gawk' distribution, `cd' to -`gawk-4.1.0'. Like most GNU software, `gawk' is configured +`gawk-4.1.1'. Like most GNU software, `gawk' is configured automatically for your system by running the `configure' program. This program is a Bourne shell script that is generated automatically using GNU `autoconf'. (The `autoconf' software is described fully starting @@ -26717,8 +26722,8 @@ 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: - tar -xvpzf gawk-4.1.0.tar.gz - cd gawk-4.1.0 + tar -xvpzf gawk-4.1.1.tar.gz + cd gawk-4.1.1 ./configure make @@ -33089,529 +33094,529 @@ Index  Tag Table: Node: Top1292 -Node: Foreword40781 -Node: Preface45126 -Ref: Preface-Footnote-148179 -Ref: Preface-Footnote-248275 -Node: History48507 -Node: Names50881 -Ref: Names-Footnote-152358 -Node: This Manual52430 -Ref: This Manual-Footnote-158204 -Node: Conventions58304 -Node: Manual History60460 -Ref: Manual History-Footnote-163908 -Ref: Manual History-Footnote-263949 -Node: How To Contribute64023 -Node: Acknowledgments65167 -Node: Getting Started69361 -Node: Running gawk71740 -Node: One-shot72926 -Node: Read Terminal74151 -Ref: Read Terminal-Footnote-175801 -Ref: Read Terminal-Footnote-276077 -Node: Long76248 -Node: Executable Scripts77624 -Ref: Executable Scripts-Footnote-179457 -Ref: Executable Scripts-Footnote-279559 -Node: Comments80106 -Node: Quoting82573 -Node: DOS Quoting87196 -Node: Sample Data Files87871 -Node: Very Simple90386 -Node: Two Rules95037 -Node: More Complex96935 -Ref: More Complex-Footnote-199865 -Node: Statements/Lines99950 -Ref: Statements/Lines-Footnote-1104413 -Node: Other Features104678 -Node: When105606 -Node: Invoking Gawk107753 -Node: Command Line109216 -Node: Options109999 -Ref: Options-Footnote-1125377 -Node: Other Arguments125402 -Node: Naming Standard Input128060 -Node: Environment Variables129154 -Node: AWKPATH Variable129712 -Ref: AWKPATH Variable-Footnote-1132493 -Ref: AWKPATH Variable-Footnote-2132538 -Node: AWKLIBPATH Variable132798 -Node: Other Environment Variables133516 -Node: Exit Status136479 -Node: Include Files137154 -Node: Loading Shared Libraries140723 -Node: Obsolete142087 -Node: Undocumented142784 -Node: Regexp143026 -Node: Regexp Usage144415 -Node: Escape Sequences146440 -Node: Regexp Operators152109 -Ref: Regexp Operators-Footnote-1159489 -Ref: Regexp Operators-Footnote-2159636 -Node: Bracket Expressions159734 -Ref: table-char-classes161624 -Node: GNU Regexp Operators164147 -Node: Case-sensitivity167870 -Ref: Case-sensitivity-Footnote-1170838 -Ref: Case-sensitivity-Footnote-2171073 -Node: Leftmost Longest171181 -Node: Computed Regexps172382 -Node: Reading Files175719 -Node: Records177721 -Ref: Records-Footnote-1187244 -Node: Fields187281 -Ref: Fields-Footnote-1190237 -Node: Nonconstant Fields190323 -Node: Changing Fields192529 -Node: Field Separators198488 -Node: Default Field Splitting201190 -Node: Regexp Field Splitting202307 -Node: Single Character Fields205649 -Node: Command Line Field Separator206708 -Node: Full Line Fields210050 -Ref: Full Line Fields-Footnote-1210558 -Node: Field Splitting Summary210604 -Ref: Field Splitting Summary-Footnote-1213703 -Node: Constant Size213804 -Node: Splitting By Content218411 -Ref: Splitting By Content-Footnote-1222160 -Node: Multiple Line222200 -Ref: Multiple Line-Footnote-1228047 -Node: Getline228226 -Node: Plain Getline230442 -Node: Getline/Variable232537 -Node: Getline/File233684 -Node: Getline/Variable/File235025 -Ref: Getline/Variable/File-Footnote-1236624 -Node: Getline/Pipe236711 -Node: Getline/Variable/Pipe239410 -Node: Getline/Coprocess240517 -Node: Getline/Variable/Coprocess241769 -Node: Getline Notes242506 -Node: Getline Summary245293 -Ref: table-getline-variants245701 -Node: Read Timeout246613 -Ref: Read Timeout-Footnote-1250354 -Node: Command line directories250411 -Node: Printing251041 -Node: Print252672 -Node: Print Examples254009 -Node: Output Separators256793 -Node: OFMT258809 -Node: Printf260167 -Node: Basic Printf261073 -Node: Control Letters262612 -Node: Format Modifiers266424 -Node: Printf Examples272433 -Node: Redirection275145 -Node: Special Files282119 -Node: Special FD282652 -Ref: Special FD-Footnote-1286277 -Node: Special Network286351 -Node: Special Caveats287201 -Node: Close Files And Pipes287997 -Ref: Close Files And Pipes-Footnote-1294980 -Ref: Close Files And Pipes-Footnote-2295128 -Node: Expressions295278 -Node: Values296410 -Node: Constants297086 -Node: Scalar Constants297766 -Ref: Scalar Constants-Footnote-1298625 -Node: Nondecimal-numbers298807 -Node: Regexp Constants301807 -Node: Using Constant Regexps302282 -Node: Variables305337 -Node: Using Variables305992 -Node: Assignment Options307716 -Node: Conversion309591 -Ref: table-locale-affects315091 -Ref: Conversion-Footnote-1315715 -Node: All Operators315824 -Node: Arithmetic Ops316454 -Node: Concatenation318959 -Ref: Concatenation-Footnote-1321747 -Node: Assignment Ops321867 -Ref: table-assign-ops326855 -Node: Increment Ops328186 -Node: Truth Values and Conditions331620 -Node: Truth Values332703 -Node: Typing and Comparison333752 -Node: Variable Typing334545 -Ref: Variable Typing-Footnote-1338442 -Node: Comparison Operators338564 -Ref: table-relational-ops338974 -Node: POSIX String Comparison342522 -Ref: POSIX String Comparison-Footnote-1343478 -Node: Boolean Ops343616 -Ref: Boolean Ops-Footnote-1347686 -Node: Conditional Exp347777 -Node: Function Calls349509 -Node: Precedence353103 -Node: Locales356772 -Node: Patterns and Actions357861 -Node: Pattern Overview358915 -Node: Regexp Patterns360584 -Node: Expression Patterns361127 -Node: Ranges364908 -Node: BEGIN/END368012 -Node: Using BEGIN/END368774 -Ref: Using BEGIN/END-Footnote-1371510 -Node: I/O And BEGIN/END371616 -Node: BEGINFILE/ENDFILE373898 -Node: Empty376812 -Node: Using Shell Variables377129 -Node: Action Overview379414 -Node: Statements381771 -Node: If Statement383625 -Node: While Statement385124 -Node: Do Statement387168 -Node: For Statement388324 -Node: Switch Statement391476 -Node: Break Statement393630 -Node: Continue Statement395620 -Node: Next Statement397413 -Node: Nextfile Statement399803 -Node: Exit Statement402458 -Node: Built-in Variables404874 -Node: User-modified405969 -Ref: User-modified-Footnote-1414327 -Node: Auto-set414389 -Ref: Auto-set-Footnote-1427453 -Ref: Auto-set-Footnote-2427658 -Node: ARGC and ARGV427714 -Node: Arrays431568 -Node: Array Basics433073 -Node: Array Intro433899 -Node: Reference to Elements438216 -Node: Assigning Elements440486 -Node: Array Example440977 -Node: Scanning an Array442709 -Node: Controlling Scanning445023 -Ref: Controlling Scanning-Footnote-1450110 -Node: Delete450426 -Ref: Delete-Footnote-1453191 -Node: Numeric Array Subscripts453248 -Node: Uninitialized Subscripts455431 -Node: Multidimensional457058 -Node: Multiscanning460151 -Node: Arrays of Arrays461740 -Node: Functions466380 -Node: Built-in467199 -Node: Calling Built-in468277 -Node: Numeric Functions470265 -Ref: Numeric Functions-Footnote-1474097 -Ref: Numeric Functions-Footnote-2474454 -Ref: Numeric Functions-Footnote-3474502 -Node: String Functions474771 -Ref: String Functions-Footnote-1497729 -Ref: String Functions-Footnote-2497858 -Ref: String Functions-Footnote-3498106 -Node: Gory Details498193 -Ref: table-sub-escapes499872 -Ref: table-sub-posix-92501226 -Ref: table-sub-proposed502577 -Ref: table-posix-sub503931 -Ref: table-gensub-escapes505476 -Ref: Gory Details-Footnote-1506652 -Ref: Gory Details-Footnote-2506703 -Node: I/O Functions506854 -Ref: I/O Functions-Footnote-1513844 -Node: Time Functions513991 -Ref: Time Functions-Footnote-1524974 -Ref: Time Functions-Footnote-2525042 -Ref: Time Functions-Footnote-3525200 -Ref: Time Functions-Footnote-4525311 -Ref: Time Functions-Footnote-5525423 -Ref: Time Functions-Footnote-6525650 -Node: Bitwise Functions525916 -Ref: table-bitwise-ops526478 -Ref: Bitwise Functions-Footnote-1530699 -Node: Type Functions530883 -Node: I18N Functions532034 -Node: User-defined533661 -Node: Definition Syntax534465 -Ref: Definition Syntax-Footnote-1539379 -Node: Function Example539448 -Ref: Function Example-Footnote-1542097 -Node: Function Caveats542119 -Node: Calling A Function542637 -Node: Variable Scope543592 -Node: Pass By Value/Reference546555 -Node: Return Statement550063 -Node: Dynamic Typing553044 -Node: Indirect Calls553975 -Node: Library Functions563662 -Ref: Library Functions-Footnote-1567175 -Ref: Library Functions-Footnote-2567318 -Node: Library Names567489 -Ref: Library Names-Footnote-1570962 -Ref: Library Names-Footnote-2571182 -Node: General Functions571268 -Node: Strtonum Function572296 -Node: Assert Function575226 -Node: Round Function578552 -Node: Cliff Random Function580093 -Node: Ordinal Functions581109 -Ref: Ordinal Functions-Footnote-1584186 -Ref: Ordinal Functions-Footnote-2584438 -Node: Join Function584649 -Ref: Join Function-Footnote-1586420 -Node: Getlocaltime Function586620 -Node: Readfile Function590361 -Node: Data File Management592200 -Node: Filetrans Function592832 -Node: Rewind Function596901 -Node: File Checking598288 -Node: Empty Files599382 -Node: Ignoring Assigns601612 -Node: Getopt Function603166 -Ref: Getopt Function-Footnote-1614469 -Node: Passwd Functions614672 -Ref: Passwd Functions-Footnote-1623650 -Node: Group Functions623738 -Node: Walking Arrays631822 -Node: Sample Programs633958 -Node: Running Examples634632 -Node: Clones635360 -Node: Cut Program636584 -Node: Egrep Program646435 -Ref: Egrep Program-Footnote-1654208 -Node: Id Program654318 -Node: Split Program657967 -Ref: Split Program-Footnote-1661486 -Node: Tee Program661614 -Node: Uniq Program664417 -Node: Wc Program671846 -Ref: Wc Program-Footnote-1676112 -Ref: Wc Program-Footnote-2676312 -Node: Miscellaneous Programs676404 -Node: Dupword Program677592 -Node: Alarm Program679623 -Node: Translate Program684430 -Ref: Translate Program-Footnote-1688817 -Ref: Translate Program-Footnote-2689065 -Node: Labels Program689199 -Ref: Labels Program-Footnote-1692570 -Node: Word Sorting692654 -Node: History Sorting696538 -Node: Extract Program698377 -Ref: Extract Program-Footnote-1705880 -Node: Simple Sed706008 -Node: Igawk Program709070 -Ref: Igawk Program-Footnote-1724227 -Ref: Igawk Program-Footnote-2724428 -Node: Anagram Program724566 -Node: Signature Program727634 -Node: Advanced Features728734 -Node: Nondecimal Data730620 -Node: Array Sorting732203 -Node: Controlling Array Traversal732900 -Node: Array Sorting Functions741184 -Ref: Array Sorting Functions-Footnote-1745053 -Node: Two-way I/O745247 -Ref: Two-way I/O-Footnote-1750679 -Node: TCP/IP Networking750761 -Node: Profiling753605 -Node: Internationalization761108 -Node: I18N and L10N762533 -Node: Explaining gettext763219 -Ref: Explaining gettext-Footnote-1768287 -Ref: Explaining gettext-Footnote-2768471 -Node: Programmer i18n768636 -Node: Translator i18n772838 -Node: String Extraction773632 -Ref: String Extraction-Footnote-1774593 -Node: Printf Ordering774679 -Ref: Printf Ordering-Footnote-1777461 -Node: I18N Portability777525 -Ref: I18N Portability-Footnote-1779974 -Node: I18N Example780037 -Ref: I18N Example-Footnote-1782675 -Node: Gawk I18N782747 -Node: Debugger783368 -Node: Debugging784339 -Node: Debugging Concepts784772 -Node: Debugging Terms786628 -Node: Awk Debugging789225 -Node: Sample Debugging Session790117 -Node: Debugger Invocation790637 -Node: Finding The Bug791970 -Node: List of Debugger Commands798457 -Node: Breakpoint Control799791 -Node: Debugger Execution Control803455 -Node: Viewing And Changing Data806815 -Node: Execution Stack810171 -Node: Debugger Info811638 -Node: Miscellaneous Debugger Commands815620 -Node: Readline Support820796 -Node: Limitations821627 -Node: Arbitrary Precision Arithmetic823879 -Ref: Arbitrary Precision Arithmetic-Footnote-1825528 -Node: General Arithmetic825676 -Node: Floating Point Issues827396 -Node: String Conversion Precision828277 -Ref: String Conversion Precision-Footnote-1829982 -Node: Unexpected Results830091 -Node: POSIX Floating Point Problems832244 -Ref: POSIX Floating Point Problems-Footnote-1836069 -Node: Integer Programming836107 -Node: Floating-point Programming837846 -Ref: Floating-point Programming-Footnote-1844177 -Ref: Floating-point Programming-Footnote-2844447 -Node: Floating-point Representation844711 -Node: Floating-point Context845876 -Ref: table-ieee-formats846715 -Node: Rounding Mode848099 -Ref: table-rounding-modes848578 -Ref: Rounding Mode-Footnote-1851593 -Node: Gawk and MPFR851772 -Node: Arbitrary Precision Floats853027 -Ref: Arbitrary Precision Floats-Footnote-1855470 -Node: Setting Precision855786 -Ref: table-predefined-precision-strings856472 -Node: Setting Rounding Mode858617 -Ref: table-gawk-rounding-modes859021 -Node: Floating-point Constants860208 -Node: Changing Precision861637 -Ref: Changing Precision-Footnote-1863034 -Node: Exact Arithmetic863208 -Node: Arbitrary Precision Integers866346 -Ref: Arbitrary Precision Integers-Footnote-1869361 -Node: Dynamic Extensions869508 -Node: Extension Intro870966 -Node: Plugin License872231 -Node: Extension Mechanism Outline872916 -Ref: load-extension873333 -Ref: load-new-function874811 -Ref: call-new-function875806 -Node: Extension API Description877821 -Node: Extension API Functions Introduction879108 -Node: General Data Types884035 -Ref: General Data Types-Footnote-1889730 -Node: Requesting Values890029 -Ref: table-value-types-returned890766 -Node: Memory Allocation Functions891720 -Ref: Memory Allocation Functions-Footnote-1894466 -Node: Constructor Functions894562 -Node: Registration Functions896320 -Node: Extension Functions897005 -Node: Exit Callback Functions899307 -Node: Extension Version String900556 -Node: Input Parsers901206 -Node: Output Wrappers910963 -Node: Two-way processors915473 -Node: Printing Messages917681 -Ref: Printing Messages-Footnote-1918758 -Node: Updating `ERRNO'918910 -Node: Accessing Parameters919649 -Node: Symbol Table Access920879 -Node: Symbol table by name921393 -Node: Symbol table by cookie923369 -Ref: Symbol table by cookie-Footnote-1927501 -Node: Cached values927564 -Ref: Cached values-Footnote-1931054 -Node: Array Manipulation931145 -Ref: Array Manipulation-Footnote-1932243 -Node: Array Data Types932282 -Ref: Array Data Types-Footnote-1934985 -Node: Array Functions935077 -Node: Flattening Arrays938913 -Node: Creating Arrays945765 -Node: Extension API Variables950490 -Node: Extension Versioning951126 -Node: Extension API Informational Variables953027 -Node: Extension API Boilerplate954113 -Node: Finding Extensions957917 -Node: Extension Example958477 -Node: Internal File Description959207 -Node: Internal File Ops963298 -Ref: Internal File Ops-Footnote-1974807 -Node: Using Internal File Ops974947 -Ref: Using Internal File Ops-Footnote-1977300 -Node: Extension Samples977566 -Node: Extension Sample File Functions979090 -Node: Extension Sample Fnmatch987575 -Node: Extension Sample Fork989344 -Node: Extension Sample Inplace990557 -Node: Extension Sample Ord992335 -Node: Extension Sample Readdir993171 -Node: Extension Sample Revout994703 -Node: Extension Sample Rev2way995296 -Node: Extension Sample Read write array995986 -Node: Extension Sample Readfile997869 -Node: Extension Sample API Tests998969 -Node: Extension Sample Time999494 -Node: gawkextlib1000858 -Node: Language History1003639 -Node: V7/SVR3.11005232 -Node: SVR41007552 -Node: POSIX1008994 -Node: BTL1010380 -Node: POSIX/GNU1011114 -Node: Feature History1016713 -Node: Common Extensions1029689 -Node: Ranges and Locales1031001 -Ref: Ranges and Locales-Footnote-11035618 -Ref: Ranges and Locales-Footnote-21035645 -Ref: Ranges and Locales-Footnote-31035879 -Node: Contributors1036100 -Node: Installation1041481 -Node: Gawk Distribution1042375 -Node: Getting1042859 -Node: Extracting1043685 -Node: Distribution contents1045377 -Node: Unix Installation1051082 -Node: Quick Installation1051699 -Node: Additional Configuration Options1054145 -Node: Configuration Philosophy1055881 -Node: Non-Unix Installation1058235 -Node: PC Installation1058693 -Node: PC Binary Installation1059992 -Node: PC Compiling1061840 -Node: PC Testing1064784 -Node: PC Using1065960 -Node: Cygwin1070128 -Node: MSYS1070937 -Node: VMS Installation1071451 -Node: VMS Compilation1072215 -Ref: VMS Compilation-Footnote-11073467 -Node: VMS Dynamic Extensions1073525 -Node: VMS Installation Details1074898 -Node: VMS Running1077149 -Node: VMS GNV1079983 -Node: VMS Old Gawk1080706 -Node: Bugs1081176 -Node: Other Versions1085094 -Node: Notes1091178 -Node: Compatibility Mode1091978 -Node: Additions1092761 -Node: Accessing The Source1093688 -Node: Adding Code1095128 -Node: New Ports1101173 -Node: Derived Files1105308 -Ref: Derived Files-Footnote-11110629 -Ref: Derived Files-Footnote-21110663 -Ref: Derived Files-Footnote-31111263 -Node: Future Extensions1111361 -Node: Implementation Limitations1111944 -Node: Extension Design1113196 -Node: Old Extension Problems1114350 -Ref: Old Extension Problems-Footnote-11115858 -Node: Extension New Mechanism Goals1115915 -Ref: Extension New Mechanism Goals-Footnote-11119280 -Node: Extension Other Design Decisions1119466 -Node: Extension Future Growth1121572 -Node: Old Extension Mechanism1122408 -Node: Basic Concepts1124148 -Node: Basic High Level1124829 -Ref: figure-general-flow1125101 -Ref: figure-process-flow1125700 -Ref: Basic High Level-Footnote-11128929 -Node: Basic Data Typing1129114 -Node: Glossary1132469 -Node: Copying1157700 -Node: GNU Free Documentation License1195256 -Node: Index1220392 +Node: Foreword40821 +Node: Preface45166 +Ref: Preface-Footnote-148219 +Ref: Preface-Footnote-248315 +Node: History48547 +Node: Names50921 +Ref: Names-Footnote-152398 +Node: This Manual52470 +Ref: This Manual-Footnote-158244 +Node: Conventions58344 +Node: Manual History60500 +Ref: Manual History-Footnote-163948 +Ref: Manual History-Footnote-263989 +Node: How To Contribute64063 +Node: Acknowledgments65207 +Node: Getting Started69401 +Node: Running gawk71780 +Node: One-shot72966 +Node: Read Terminal74191 +Ref: Read Terminal-Footnote-175841 +Ref: Read Terminal-Footnote-276117 +Node: Long76288 +Node: Executable Scripts77664 +Ref: Executable Scripts-Footnote-179497 +Ref: Executable Scripts-Footnote-279599 +Node: Comments80146 +Node: Quoting82613 +Node: DOS Quoting87236 +Node: Sample Data Files87911 +Node: Very Simple90426 +Node: Two Rules95077 +Node: More Complex96975 +Ref: More Complex-Footnote-199905 +Node: Statements/Lines99990 +Ref: Statements/Lines-Footnote-1104453 +Node: Other Features104718 +Node: When105646 +Node: Invoking Gawk107793 +Node: Command Line109256 +Node: Options110039 +Ref: Options-Footnote-1125417 +Node: Other Arguments125442 +Node: Naming Standard Input128100 +Node: Environment Variables129194 +Node: AWKPATH Variable129752 +Ref: AWKPATH Variable-Footnote-1132533 +Ref: AWKPATH Variable-Footnote-2132578 +Node: AWKLIBPATH Variable132838 +Node: Other Environment Variables133556 +Node: Exit Status136519 +Node: Include Files137194 +Node: Loading Shared Libraries140763 +Node: Obsolete142127 +Node: Undocumented142824 +Node: Regexp143066 +Node: Regexp Usage144455 +Node: Escape Sequences146480 +Node: Regexp Operators152149 +Ref: Regexp Operators-Footnote-1159529 +Ref: Regexp Operators-Footnote-2159676 +Node: Bracket Expressions159774 +Ref: table-char-classes161664 +Node: GNU Regexp Operators164187 +Node: Case-sensitivity167910 +Ref: Case-sensitivity-Footnote-1170878 +Ref: Case-sensitivity-Footnote-2171113 +Node: Leftmost Longest171221 +Node: Computed Regexps172422 +Node: Reading Files175759 +Node: Records177761 +Ref: Records-Footnote-1187284 +Node: Fields187321 +Ref: Fields-Footnote-1190277 +Node: Nonconstant Fields190363 +Node: Changing Fields192569 +Node: Field Separators198528 +Node: Default Field Splitting201230 +Node: Regexp Field Splitting202347 +Node: Single Character Fields205689 +Node: Command Line Field Separator206748 +Node: Full Line Fields210090 +Ref: Full Line Fields-Footnote-1210598 +Node: Field Splitting Summary210644 +Ref: Field Splitting Summary-Footnote-1213743 +Node: Constant Size213844 +Node: Splitting By Content218451 +Ref: Splitting By Content-Footnote-1222200 +Node: Multiple Line222240 +Ref: Multiple Line-Footnote-1228087 +Node: Getline228266 +Node: Plain Getline230482 +Node: Getline/Variable232577 +Node: Getline/File233724 +Node: Getline/Variable/File235065 +Ref: Getline/Variable/File-Footnote-1236664 +Node: Getline/Pipe236751 +Node: Getline/Variable/Pipe239450 +Node: Getline/Coprocess240557 +Node: Getline/Variable/Coprocess241809 +Node: Getline Notes242546 +Node: Getline Summary245333 +Ref: table-getline-variants245741 +Node: Read Timeout246653 +Ref: Read Timeout-Footnote-1250394 +Node: Command line directories250451 +Node: Printing251081 +Node: Print252712 +Node: Print Examples254049 +Node: Output Separators256833 +Node: OFMT258849 +Node: Printf260207 +Node: Basic Printf261113 +Node: Control Letters262652 +Node: Format Modifiers266464 +Node: Printf Examples272473 +Node: Redirection275185 +Node: Special Files282159 +Node: Special FD282692 +Ref: Special FD-Footnote-1286317 +Node: Special Network286391 +Node: Special Caveats287241 +Node: Close Files And Pipes288037 +Ref: Close Files And Pipes-Footnote-1295020 +Ref: Close Files And Pipes-Footnote-2295168 +Node: Expressions295318 +Node: Values296450 +Node: Constants297126 +Node: Scalar Constants297806 +Ref: Scalar Constants-Footnote-1298665 +Node: Nondecimal-numbers298847 +Node: Regexp Constants301847 +Node: Using Constant Regexps302322 +Node: Variables305377 +Node: Using Variables306032 +Node: Assignment Options307756 +Node: Conversion309631 +Ref: table-locale-affects315131 +Ref: Conversion-Footnote-1315755 +Node: All Operators315864 +Node: Arithmetic Ops316494 +Node: Concatenation318999 +Ref: Concatenation-Footnote-1321787 +Node: Assignment Ops321907 +Ref: table-assign-ops326895 +Node: Increment Ops328226 +Node: Truth Values and Conditions331660 +Node: Truth Values332743 +Node: Typing and Comparison333792 +Node: Variable Typing334585 +Ref: Variable Typing-Footnote-1338482 +Node: Comparison Operators338604 +Ref: table-relational-ops339014 +Node: POSIX String Comparison342562 +Ref: POSIX String Comparison-Footnote-1343518 +Node: Boolean Ops343656 +Ref: Boolean Ops-Footnote-1347726 +Node: Conditional Exp347817 +Node: Function Calls349549 +Node: Precedence353143 +Node: Locales356812 +Node: Patterns and Actions357901 +Node: Pattern Overview358955 +Node: Regexp Patterns360624 +Node: Expression Patterns361167 +Node: Ranges364948 +Node: BEGIN/END368052 +Node: Using BEGIN/END368814 +Ref: Using BEGIN/END-Footnote-1371550 +Node: I/O And BEGIN/END371656 +Node: BEGINFILE/ENDFILE373938 +Node: Empty376852 +Node: Using Shell Variables377169 +Node: Action Overview379454 +Node: Statements381811 +Node: If Statement383665 +Node: While Statement385164 +Node: Do Statement387208 +Node: For Statement388364 +Node: Switch Statement391516 +Node: Break Statement393670 +Node: Continue Statement395660 +Node: Next Statement397453 +Node: Nextfile Statement399843 +Node: Exit Statement402498 +Node: Built-in Variables404914 +Node: User-modified406009 +Ref: User-modified-Footnote-1414367 +Node: Auto-set414429 +Ref: Auto-set-Footnote-1427494 +Ref: Auto-set-Footnote-2427699 +Node: ARGC and ARGV427755 +Node: Arrays431609 +Node: Array Basics433114 +Node: Array Intro433940 +Node: Reference to Elements438257 +Node: Assigning Elements440527 +Node: Array Example441018 +Node: Scanning an Array442750 +Node: Controlling Scanning445064 +Ref: Controlling Scanning-Footnote-1450151 +Node: Delete450467 +Ref: Delete-Footnote-1453232 +Node: Numeric Array Subscripts453289 +Node: Uninitialized Subscripts455472 +Node: Multidimensional457099 +Node: Multiscanning460192 +Node: Arrays of Arrays461781 +Node: Functions466421 +Node: Built-in467240 +Node: Calling Built-in468318 +Node: Numeric Functions470306 +Ref: Numeric Functions-Footnote-1474138 +Ref: Numeric Functions-Footnote-2474495 +Ref: Numeric Functions-Footnote-3474543 +Node: String Functions474812 +Ref: String Functions-Footnote-1497770 +Ref: String Functions-Footnote-2497899 +Ref: String Functions-Footnote-3498147 +Node: Gory Details498234 +Ref: table-sub-escapes499913 +Ref: table-sub-posix-92501267 +Ref: table-sub-proposed502618 +Ref: table-posix-sub503972 +Ref: table-gensub-escapes505517 +Ref: Gory Details-Footnote-1506693 +Ref: Gory Details-Footnote-2506744 +Node: I/O Functions506895 +Ref: I/O Functions-Footnote-1513885 +Node: Time Functions514032 +Ref: Time Functions-Footnote-1525015 +Ref: Time Functions-Footnote-2525083 +Ref: Time Functions-Footnote-3525241 +Ref: Time Functions-Footnote-4525352 +Ref: Time Functions-Footnote-5525464 +Ref: Time Functions-Footnote-6525691 +Node: Bitwise Functions525957 +Ref: table-bitwise-ops526519 +Ref: Bitwise Functions-Footnote-1530740 +Node: Type Functions530924 +Node: I18N Functions532075 +Node: User-defined533702 +Node: Definition Syntax534506 +Ref: Definition Syntax-Footnote-1539420 +Node: Function Example539489 +Ref: Function Example-Footnote-1542138 +Node: Function Caveats542160 +Node: Calling A Function542678 +Node: Variable Scope543633 +Node: Pass By Value/Reference546596 +Node: Return Statement550104 +Node: Dynamic Typing553085 +Node: Indirect Calls554016 +Node: Library Functions563703 +Ref: Library Functions-Footnote-1567216 +Ref: Library Functions-Footnote-2567359 +Node: Library Names567530 +Ref: Library Names-Footnote-1571003 +Ref: Library Names-Footnote-2571223 +Node: General Functions571309 +Node: Strtonum Function572337 +Node: Assert Function575267 +Node: Round Function578593 +Node: Cliff Random Function580134 +Node: Ordinal Functions581150 +Ref: Ordinal Functions-Footnote-1584227 +Ref: Ordinal Functions-Footnote-2584479 +Node: Join Function584690 +Ref: Join Function-Footnote-1586461 +Node: Getlocaltime Function586661 +Node: Readfile Function590402 +Node: Data File Management592241 +Node: Filetrans Function592873 +Node: Rewind Function596942 +Node: File Checking598329 +Node: Empty Files599423 +Node: Ignoring Assigns601653 +Node: Getopt Function603207 +Ref: Getopt Function-Footnote-1614510 +Node: Passwd Functions614713 +Ref: Passwd Functions-Footnote-1623691 +Node: Group Functions623779 +Node: Walking Arrays631863 +Node: Sample Programs633999 +Node: Running Examples634673 +Node: Clones635401 +Node: Cut Program636625 +Node: Egrep Program646476 +Ref: Egrep Program-Footnote-1654249 +Node: Id Program654359 +Node: Split Program658008 +Ref: Split Program-Footnote-1661527 +Node: Tee Program661655 +Node: Uniq Program664458 +Node: Wc Program671887 +Ref: Wc Program-Footnote-1676153 +Ref: Wc Program-Footnote-2676353 +Node: Miscellaneous Programs676445 +Node: Dupword Program677633 +Node: Alarm Program679664 +Node: Translate Program684471 +Ref: Translate Program-Footnote-1688858 +Ref: Translate Program-Footnote-2689106 +Node: Labels Program689240 +Ref: Labels Program-Footnote-1692611 +Node: Word Sorting692695 +Node: History Sorting696579 +Node: Extract Program698418 +Ref: Extract Program-Footnote-1705921 +Node: Simple Sed706049 +Node: Igawk Program709111 +Ref: Igawk Program-Footnote-1724268 +Ref: Igawk Program-Footnote-2724469 +Node: Anagram Program724607 +Node: Signature Program727675 +Node: Advanced Features728775 +Node: Nondecimal Data730661 +Node: Array Sorting732244 +Node: Controlling Array Traversal732941 +Node: Array Sorting Functions741225 +Ref: Array Sorting Functions-Footnote-1745094 +Node: Two-way I/O745288 +Ref: Two-way I/O-Footnote-1750720 +Node: TCP/IP Networking750802 +Node: Profiling753646 +Node: Internationalization761149 +Node: I18N and L10N762574 +Node: Explaining gettext763260 +Ref: Explaining gettext-Footnote-1768328 +Ref: Explaining gettext-Footnote-2768512 +Node: Programmer i18n768677 +Node: Translator i18n772879 +Node: String Extraction773673 +Ref: String Extraction-Footnote-1774634 +Node: Printf Ordering774720 +Ref: Printf Ordering-Footnote-1777502 +Node: I18N Portability777566 +Ref: I18N Portability-Footnote-1780015 +Node: I18N Example780078 +Ref: I18N Example-Footnote-1782716 +Node: Gawk I18N782788 +Node: Debugger783409 +Node: Debugging784380 +Node: Debugging Concepts784813 +Node: Debugging Terms786669 +Node: Awk Debugging789266 +Node: Sample Debugging Session790158 +Node: Debugger Invocation790678 +Node: Finding The Bug792011 +Node: List of Debugger Commands798498 +Node: Breakpoint Control799832 +Node: Debugger Execution Control803496 +Node: Viewing And Changing Data806856 +Node: Execution Stack810212 +Node: Debugger Info811679 +Node: Miscellaneous Debugger Commands815661 +Node: Readline Support820837 +Node: Limitations821668 +Node: Arbitrary Precision Arithmetic823920 +Ref: Arbitrary Precision Arithmetic-Footnote-1825569 +Node: General Arithmetic825717 +Node: Floating Point Issues827437 +Node: String Conversion Precision828318 +Ref: String Conversion Precision-Footnote-1830023 +Node: Unexpected Results830132 +Node: POSIX Floating Point Problems832285 +Ref: POSIX Floating Point Problems-Footnote-1836110 +Node: Integer Programming836148 +Node: Floating-point Programming837887 +Ref: Floating-point Programming-Footnote-1844218 +Ref: Floating-point Programming-Footnote-2844488 +Node: Floating-point Representation844752 +Node: Floating-point Context845917 +Ref: table-ieee-formats846756 +Node: Rounding Mode848140 +Ref: table-rounding-modes848619 +Ref: Rounding Mode-Footnote-1851634 +Node: Gawk and MPFR851813 +Node: Arbitrary Precision Floats853224 +Ref: Arbitrary Precision Floats-Footnote-1855667 +Node: Setting Precision855983 +Ref: table-predefined-precision-strings856669 +Node: Setting Rounding Mode858814 +Ref: table-gawk-rounding-modes859218 +Node: Floating-point Constants860405 +Node: Changing Precision861834 +Ref: Changing Precision-Footnote-1863231 +Node: Exact Arithmetic863405 +Node: Arbitrary Precision Integers866543 +Ref: Arbitrary Precision Integers-Footnote-1869558 +Node: Dynamic Extensions869705 +Node: Extension Intro871163 +Node: Plugin License872428 +Node: Extension Mechanism Outline873113 +Ref: load-extension873530 +Ref: load-new-function875008 +Ref: call-new-function876003 +Node: Extension API Description878018 +Node: Extension API Functions Introduction879305 +Node: General Data Types884232 +Ref: General Data Types-Footnote-1889927 +Node: Requesting Values890226 +Ref: table-value-types-returned890963 +Node: Memory Allocation Functions891917 +Ref: Memory Allocation Functions-Footnote-1894663 +Node: Constructor Functions894759 +Node: Registration Functions896517 +Node: Extension Functions897202 +Node: Exit Callback Functions899504 +Node: Extension Version String900753 +Node: Input Parsers901403 +Node: Output Wrappers911160 +Node: Two-way processors915670 +Node: Printing Messages917878 +Ref: Printing Messages-Footnote-1918955 +Node: Updating `ERRNO'919107 +Node: Accessing Parameters919846 +Node: Symbol Table Access921076 +Node: Symbol table by name921590 +Node: Symbol table by cookie923566 +Ref: Symbol table by cookie-Footnote-1927698 +Node: Cached values927761 +Ref: Cached values-Footnote-1931251 +Node: Array Manipulation931342 +Ref: Array Manipulation-Footnote-1932440 +Node: Array Data Types932479 +Ref: Array Data Types-Footnote-1935182 +Node: Array Functions935274 +Node: Flattening Arrays939110 +Node: Creating Arrays945962 +Node: Extension API Variables950687 +Node: Extension Versioning951323 +Node: Extension API Informational Variables953224 +Node: Extension API Boilerplate954310 +Node: Finding Extensions958114 +Node: Extension Example958674 +Node: Internal File Description959404 +Node: Internal File Ops963495 +Ref: Internal File Ops-Footnote-1975004 +Node: Using Internal File Ops975144 +Ref: Using Internal File Ops-Footnote-1977497 +Node: Extension Samples977763 +Node: Extension Sample File Functions979287 +Node: Extension Sample Fnmatch987772 +Node: Extension Sample Fork989541 +Node: Extension Sample Inplace990754 +Node: Extension Sample Ord992532 +Node: Extension Sample Readdir993368 +Node: Extension Sample Revout994900 +Node: Extension Sample Rev2way995493 +Node: Extension Sample Read write array996183 +Node: Extension Sample Readfile998066 +Node: Extension Sample API Tests999166 +Node: Extension Sample Time999691 +Node: gawkextlib1001055 +Node: Language History1003836 +Node: V7/SVR3.11005429 +Node: SVR41007749 +Node: POSIX1009191 +Node: BTL1010577 +Node: POSIX/GNU1011311 +Node: Feature History1016910 +Node: Common Extensions1029886 +Node: Ranges and Locales1031198 +Ref: Ranges and Locales-Footnote-11035815 +Ref: Ranges and Locales-Footnote-21035842 +Ref: Ranges and Locales-Footnote-31036076 +Node: Contributors1036297 +Node: Installation1041678 +Node: Gawk Distribution1042572 +Node: Getting1043056 +Node: Extracting1043882 +Node: Distribution contents1045574 +Node: Unix Installation1051279 +Node: Quick Installation1051896 +Node: Additional Configuration Options1054342 +Node: Configuration Philosophy1056078 +Node: Non-Unix Installation1058432 +Node: PC Installation1058890 +Node: PC Binary Installation1060189 +Node: PC Compiling1062037 +Node: PC Testing1064981 +Node: PC Using1066157 +Node: Cygwin1070325 +Node: MSYS1071134 +Node: VMS Installation1071648 +Node: VMS Compilation1072412 +Ref: VMS Compilation-Footnote-11073664 +Node: VMS Dynamic Extensions1073722 +Node: VMS Installation Details1075095 +Node: VMS Running1077346 +Node: VMS GNV1080180 +Node: VMS Old Gawk1080903 +Node: Bugs1081373 +Node: Other Versions1085291 +Node: Notes1091375 +Node: Compatibility Mode1092175 +Node: Additions1092958 +Node: Accessing The Source1093885 +Node: Adding Code1095325 +Node: New Ports1101370 +Node: Derived Files1105505 +Ref: Derived Files-Footnote-11110826 +Ref: Derived Files-Footnote-21110860 +Ref: Derived Files-Footnote-31111460 +Node: Future Extensions1111558 +Node: Implementation Limitations1112141 +Node: Extension Design1113393 +Node: Old Extension Problems1114547 +Ref: Old Extension Problems-Footnote-11116055 +Node: Extension New Mechanism Goals1116112 +Ref: Extension New Mechanism Goals-Footnote-11119477 +Node: Extension Other Design Decisions1119663 +Node: Extension Future Growth1121769 +Node: Old Extension Mechanism1122605 +Node: Basic Concepts1124345 +Node: Basic High Level1125026 +Ref: figure-general-flow1125298 +Ref: figure-process-flow1125897 +Ref: Basic High Level-Footnote-11129126 +Node: Basic Data Typing1129311 +Node: Glossary1132666 +Node: Copying1157897 +Node: GNU Free Documentation License1195453 +Node: Index1220589  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 48219eb8..ad2e6558 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -40,9 +40,9 @@ @c applies to and all the info about who's publishing this edition @c These apply across the board. -@set UPDATE-MONTH February, 2014 +@set UPDATE-MONTH April, 2014 @set VERSION 4.1 -@set PATCHLEVEL 0 +@set PATCHLEVEL 1 @set FSF @@ -876,7 +876,8 @@ particular records in a file and perform operations upon them. version of @command{awk}. * POSIX/GNU:: The extensions in @command{gawk} not in POSIX @command{awk}. -* Feature History:: The history of the features in @command{gawk}. +* Feature History:: The history of the features in + @command{gawk}. * Common Extensions:: Common Extensions Summary. * Ranges and Locales:: How locales used to affect regexp ranges. @@ -14135,7 +14136,7 @@ if an element in @code{SYMTAB} is an array. Also, you may not use the @code{delete} statement with the @code{SYMTAB} array. -You may use an index for @code{SYMTAB} that is not a predefined identifer: +You may use an index for @code{SYMTAB} that is not a predefined identifier: @example SYMTAB["xxx"] = 5 @@ -18001,7 +18002,7 @@ Return a true value if @var{x} is an array. Otherwise return false. @code{isarray()} is meant for use in two circumstances. The first is when traversing a multidimensional array: you can test if an element is itself an array or not. The second is inside the body of a user-defined function -(not discussed yet; @pxref{User-defined}), to test if a paramater is an +(not discussed yet; @pxref{User-defined}), to test if a parameter is an array or not. Note, however, that using @code{isarray()} at the global level to test @@ -29250,12 +29251,17 @@ The easiest way to find out is to look at the output of the following command: @example -$ @kbd{gawk --version} -@print{} GNU Awk 4.1.0, API: 1.0 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2) -@print{} Copyright (C) 1989, 1991-2013 Free Software Foundation. +$ @kbd{./gawk --version} +@print{} GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2) +@print{} Copyright (C) 1989, 1991-2014 Free Software Foundation. @dots{} @end example +@noindent +(You may see different version numbers than what's shown here. That's OK; +what's important is to see that GNU MPFR and GNU MP are listed in +the output.) + @command{gawk} uses the @uref{http://www.mpfr.org, GNU MPFR} and @@ -29844,7 +29850,7 @@ function for ``registering'' new built-in functions. This is shown in @ref{load-new-function}. @end ifnotdocbook @ifdocbook -This is shown in @inlineraw{docboook, }. +This is shown in @inlineraw{docbook, }. @end ifdocbook @ifnotdocbook diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 81407770..80d4e743 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -35,9 +35,9 @@ @c applies to and all the info about who's publishing this edition @c These apply across the board. -@set UPDATE-MONTH February, 2014 +@set UPDATE-MONTH April, 2014 @set VERSION 4.1 -@set PATCHLEVEL 0 +@set PATCHLEVEL 1 @set FSF @@ -871,7 +871,8 @@ particular records in a file and perform operations upon them. version of @command{awk}. * POSIX/GNU:: The extensions in @command{gawk} not in POSIX @command{awk}. -* Feature History:: The history of the features in @command{gawk}. +* Feature History:: The history of the features in + @command{gawk}. * Common Extensions:: Common Extensions Summary. * Ranges and Locales:: How locales used to affect regexp ranges. @@ -13512,7 +13513,7 @@ if an element in @code{SYMTAB} is an array. Also, you may not use the @code{delete} statement with the @code{SYMTAB} array. -You may use an index for @code{SYMTAB} that is not a predefined identifer: +You may use an index for @code{SYMTAB} that is not a predefined identifier: @example SYMTAB["xxx"] = 5 @@ -17171,7 +17172,7 @@ Return a true value if @var{x} is an array. Otherwise return false. @code{isarray()} is meant for use in two circumstances. The first is when traversing a multidimensional array: you can test if an element is itself an array or not. The second is inside the body of a user-defined function -(not discussed yet; @pxref{User-defined}), to test if a paramater is an +(not discussed yet; @pxref{User-defined}), to test if a parameter is an array or not. Note, however, that using @code{isarray()} at the global level to test @@ -28391,12 +28392,17 @@ The easiest way to find out is to look at the output of the following command: @example -$ @kbd{gawk --version} -@print{} GNU Awk 4.1.0, API: 1.0 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2) -@print{} Copyright (C) 1989, 1991-2013 Free Software Foundation. +$ @kbd{./gawk --version} +@print{} GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2) +@print{} Copyright (C) 1989, 1991-2014 Free Software Foundation. @dots{} @end example +@noindent +(You may see different version numbers than what's shown here. That's OK; +what's important is to see that GNU MPFR and GNU MP are listed in +the output.) + @command{gawk} uses the @uref{http://www.mpfr.org, GNU MPFR} and @@ -28985,7 +28991,7 @@ function for ``registering'' new built-in functions. This is shown in @ref{load-new-function}. @end ifnotdocbook @ifdocbook -This is shown in @inlineraw{docboook, }. +This is shown in @inlineraw{docbook, }. @end ifdocbook @ifnotdocbook diff --git a/extension/ChangeLog b/extension/ChangeLog index c3726398..afd64ff7 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,11 @@ +2014-04-08 Arnold D. Robbins + + * 4.1.1: Release tar ball made. + +2014-04-08 Arnold D. Robbins + + * configure.ac: Bump version before release. + 2014-04-04 Arnold D. Robbins * time.c: Include unconditionally to get declaration diff --git a/extension/build-aux/ChangeLog b/extension/build-aux/ChangeLog index b578de8b..697db607 100644 --- a/extension/build-aux/ChangeLog +++ b/extension/build-aux/ChangeLog @@ -1,3 +1,7 @@ +2014-04-08 Arnold D. Robbins + + * 4.1.1: Release tar ball made. + 2014-01-03 Arnold D. Robbins * config.guess, config.rpath, config.sub, depcomp, diff --git a/extension/configure b/extension/configure index 7f660287..2105648d 100755 --- a/extension/configure +++ b/extension/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for GNU Awk Bundled Extensions 4.1.0. +# Generated by GNU Autoconf 2.69 for GNU Awk Bundled Extensions 4.1.1. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GNU Awk Bundled Extensions' PACKAGE_TARNAME='gawk-extensions' -PACKAGE_VERSION='4.1.0' -PACKAGE_STRING='GNU Awk Bundled Extensions 4.1.0' +PACKAGE_VERSION='4.1.1' +PACKAGE_STRING='GNU Awk Bundled Extensions 4.1.1' PACKAGE_BUGREPORT='bug-gawk@gnu.org' PACKAGE_URL='http://www.gnu.org/software/gawk-extensions/' @@ -1333,7 +1333,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures GNU Awk Bundled Extensions 4.1.0 to adapt to many kinds of systems. +\`configure' configures GNU Awk Bundled Extensions 4.1.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1403,7 +1403,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GNU Awk Bundled Extensions 4.1.0:";; + short | recursive ) echo "Configuration of GNU Awk Bundled Extensions 4.1.1:";; esac cat <<\_ACEOF @@ -1518,7 +1518,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -GNU Awk Bundled Extensions configure 4.1.0 +GNU Awk Bundled Extensions configure 4.1.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1990,7 +1990,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by GNU Awk Bundled Extensions $as_me 4.1.0, which was +It was created by GNU Awk Bundled Extensions $as_me 4.1.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -4172,7 +4172,7 @@ fi # Define the identity of the package. PACKAGE='gawk-extensions' - VERSION='4.1.0' + VERSION='4.1.1' cat >>confdefs.h <<_ACEOF @@ -15017,7 +15017,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by GNU Awk Bundled Extensions $as_me 4.1.0, which was +This file was extended by GNU Awk Bundled Extensions $as_me 4.1.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -15085,7 +15085,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -GNU Awk Bundled Extensions config.status 4.1.0 +GNU Awk Bundled Extensions config.status 4.1.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/extension/configure.ac b/extension/configure.ac index c4a69c52..1f876a0e 100644 --- a/extension/configure.ac +++ b/extension/configure.ac @@ -23,7 +23,7 @@ dnl dnl Process this file with autoconf to produce a configure script. -AC_INIT([GNU Awk Bundled Extensions], 4.1.0, bug-gawk@gnu.org, gawk-extensions) +AC_INIT([GNU Awk Bundled Extensions], 4.1.1, bug-gawk@gnu.org, gawk-extensions) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_AUX_DIR([build-aux]) diff --git a/extension/m4/ChangeLog b/extension/m4/ChangeLog index 821ef9ed..349bbcc8 100644 --- a/extension/m4/ChangeLog +++ b/extension/m4/ChangeLog @@ -1,3 +1,7 @@ +2014-04-08 Arnold D. Robbins + + * 4.1.1: Release tar ball made. + 2013-12-21 Arnold D. Robbins * libtool.m4, ltoptions.m4, ltversion.m4: Update to diff --git a/helpers/ChangeLog b/helpers/ChangeLog index e5087f37..17624c3f 100644 --- a/helpers/ChangeLog +++ b/helpers/ChangeLog @@ -1,3 +1,7 @@ +2014-04-08 Arnold D. Robbins + + * 4.1.1: Release tar ball made. + 2014-03-10 Arnold D. Robbins * quoteconvert2.sh: Use .UTF-8 locales per request from diff --git a/m4/ChangeLog b/m4/ChangeLog index cbb20483..81fdcec0 100644 --- a/m4/ChangeLog +++ b/m4/ChangeLog @@ -1,3 +1,7 @@ +2014-04-08 Arnold D. Robbins + + * 4.1.1: Release tar ball made. + 2014-03-11 Arnold D. Robbins * readline.m4: Add manual check for *bsd* OS and add -ltermcap diff --git a/missing_d/ChangeLog b/missing_d/ChangeLog index f94c070d..70fbde64 100644 --- a/missing_d/ChangeLog +++ b/missing_d/ChangeLog @@ -1,3 +1,7 @@ +2014-04-08 Arnold D. Robbins + + * 4.1.1: Release tar ball made. + 2013-05-09 Arnold D. Robbins * 4.1.0: Release tar ball made. diff --git a/pc/ChangeLog b/pc/ChangeLog index 404bcb68..d8e60c98 100644 --- a/pc/ChangeLog +++ b/pc/ChangeLog @@ -1,3 +1,7 @@ +2014-04-08 Arnold D. Robbins + + * 4.1.1: Release tar ball made. + 2014-02-03 Scott Deifik * Makefile.tst: Include original test/Makefile.in lines as diff --git a/pc/config.h b/pc/config.h index 0c7fec35..a2ed4a4f 100644 --- a/pc/config.h +++ b/pc/config.h @@ -423,7 +423,7 @@ #define PACKAGE_NAME "GNU Awk" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "GNU Awk 4.1.0h" +#define PACKAGE_STRING "GNU Awk 4.1.1" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "gawk" @@ -432,7 +432,7 @@ #define PACKAGE_URL "http://www.gnu.org/software/gawk/" /* Define to the version of this package. */ -#define PACKAGE_VERSION "4.1.0h" +#define PACKAGE_VERSION "4.1.1" /* Define to 1 if *printf supports %F format */ #undef PRINTF_HAS_F_FORMAT @@ -494,7 +494,7 @@ /* Version number of package */ -#define VERSION "4.1.0h" +#define VERSION "4.1.1" /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE diff --git a/po/ChangeLog b/po/ChangeLog index 31d9fa1d..a9cca765 100644 --- a/po/ChangeLog +++ b/po/ChangeLog @@ -1,3 +1,7 @@ +2014-04-08 Arnold D. Robbins + + * 4.1.1: Release tar ball made. + 2013-05-09 Arnold D. Robbins * 4.1.0: Release tar ball made. diff --git a/po/ca.gmo b/po/ca.gmo index 69ac0450..465f05a5 100644 Binary files a/po/ca.gmo and b/po/ca.gmo differ diff --git a/po/ca.po b/po/ca.po index fa0f6328..444f09c4 100644 --- a/po/ca.po +++ b/po/ca.po @@ -7,7 +7,7 @@ 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" +"POT-Creation-Date: 2014-04-08 19:23+0300\n" "PO-Revision-Date: 2014-02-26 20:18+0100\n" "Last-Translator: Walter Garcia-Fontes \n" "Language-Team: Catalan \n" @@ -36,8 +36,8 @@ msgstr "s'ha intentat usar un par 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:1599 builtin.c:1645 -#: builtin.c:1658 builtin.c:2086 builtin.c:2100 eval.c:1122 eval.c:1126 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" @@ -75,19 +75,27 @@ msgstr "asort: el primer argument no #: array.c:831 msgid "asort: cannot use a subarray of first arg for second arg" -msgstr "asort: no es pot usar una submatriu com a primer argument per al segon argument" +msgstr "" +"asort: no es pot usar una submatriu com a primer argument per al segon " +"argument" #: array.c:832 msgid "asorti: cannot use a subarray of first arg for second arg" -msgstr "asorti: no es pot usar una submatriu com a primer argument per al segon argument" +msgstr "" +"asorti: no es pot usar una submatriu com a primer argument per al segon " +"argument" #: array.c:837 msgid "asort: cannot use a subarray of second arg for first arg" -msgstr "asort: no es pot usar una submatriu com a segon argument per al primer argument" +msgstr "" +"asort: no es pot usar una submatriu com a segon argument per al primer " +"argument" #: array.c:838 msgid "asorti: cannot use a subarray of second arg for first arg" -msgstr "asorti: no es pot usar una submatriu com a segon argument per al primer argument" +msgstr "" +"asorti: no es pot usar una submatriu com a segon argument per al primer " +"argument" #: array.c:1314 #, c-format @@ -119,12 +127,16 @@ msgstr "`%s' #: awkgram.y:419 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" +msgstr "" +"la constant d'expressió regular `//' sembla un comentari en C++, però no ho " +"és" #: awkgram.y:423 #, 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" +msgstr "" +"la constant d'expressió regular `/%s/' sembla un comentari en C, però no ho " +"és" #: awkgram.y:515 #, c-format @@ -133,13 +145,14 @@ msgstr "valors duplicats de casos al cos de l'expressi #: awkgram.y:536 msgid "duplicate `default' detected in switch body" -msgstr "s'ha detectat el cas predeterminat `default' duplicat a l'expressió switch " +msgstr "" +"s'ha detectat el cas predeterminat `default' duplicat a l'expressió switch " -#: awkgram.y:796 awkgram.y:3699 +#: awkgram.y:796 awkgram.y:3723 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:3691 +#: awkgram.y:805 awkgram.y:3715 msgid "`continue' is not allowed outside a loop" msgstr "no es permet `continue' a fora d'un bucle" @@ -159,7 +172,9 @@ msgstr "`return' #: awkgram.y:922 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 \"\"'" +msgstr "" +"el `print'» simple en la regla BEGIN o END probablement ha de ser `print " +"\"\"'" #: awkgram.y:988 awkgram.y:1037 msgid "`delete' is not allowed with SYMTAB" @@ -187,7 +202,8 @@ msgstr "expressi #: awkgram.y:1291 awkgram.y:1442 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'" +msgstr "" +"l'antic awk no dóna suport a la paraula clau `in' excepte després de `for'" #: awkgram.y:1301 msgid "regular expression on right of comparison" @@ -222,268 +238,274 @@ msgstr "les crides a funcions indirectes s #: awkgram.y:1620 #, 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ó" +msgstr "" +"no es pot usar la variable especial `%s' per a una crida indirecta de funció" #: awkgram.y:1698 msgid "invalid subscript expression" msgstr "expressió de subíndex no vàlida" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126 +#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "advertiment: " -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158 +#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "fatal: " -#: awkgram.y:2092 +#: awkgram.y:2116 msgid "unexpected newline or end of string" msgstr "nova línia inesperada o final d'una cadena de caràcters" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:523 debug.c:539 +#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 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:2360 awkgram.y:2485 +#: awkgram.y:2384 awkgram.y:2509 #, 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:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:135 debug.c:5206 +#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "motiu desconegut" -#: awkgram.y:2371 awkgram.y:2395 +#: awkgram.y:2395 awkgram.y:2419 #, 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:2384 +#: awkgram.y:2408 #, c-format msgid "already included source file `%s'" msgstr "ja s'ha inclòs el fitxer font `%s'" -#: awkgram.y:2385 +#: awkgram.y:2409 #, c-format msgid "already loaded shared library `%s'" msgstr "ja s'ha carregat la biblioteca compartida `%s'" -#: awkgram.y:2420 +#: awkgram.y:2444 msgid "@include is a gawk extension" msgstr "@include és una extensió de gawk" -#: awkgram.y:2426 +#: awkgram.y:2450 msgid "empty filename after @include" msgstr "nom de fitxer buit després de @include" -#: awkgram.y:2470 +#: awkgram.y:2494 msgid "@load is a gawk extension" msgstr "@load és una extensió de gawk" -#: awkgram.y:2476 +#: awkgram.y:2500 msgid "empty filename after @load" msgstr "fitxer buit després de @load" -#: awkgram.y:2610 +#: awkgram.y:2634 msgid "empty program text on command line" msgstr "el text del programa en la línia de comandaments està buit" -#: awkgram.y:2725 +#: awkgram.y:2749 #, c-format msgid "can't read sourcefile `%s' (%s)" msgstr "no es pot llegir el fitxer font `%s' (%s)" -#: awkgram.y:2736 +#: awkgram.y:2760 #, c-format msgid "source file `%s' is empty" msgstr "el fitxer font `%s' està buit" -#: awkgram.y:2913 +#: awkgram.y:2937 msgid "source file does not end in newline" msgstr "el fitxer font no finalitza amb un retorn de carro" -#: awkgram.y:3018 +#: awkgram.y:3042 msgid "unterminated regexp ends with `\\' at end of file" msgstr "expressió regular sense finalitzar acaba amb `\\' al final del fitxer" -#: awkgram.y:3042 +#: awkgram.y:3066 #, 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:3046 +#: awkgram.y:3070 #, c-format msgid "tawk regex modifier `/.../%c' doesn't work in gawk" msgstr "el modificador regex tawk `/.../%c' no funciona a gawk" -#: awkgram.y:3053 +#: awkgram.y:3077 msgid "unterminated regexp" msgstr "expressió regular sense finalitzar" -#: awkgram.y:3057 +#: awkgram.y:3081 msgid "unterminated regexp at end of file" msgstr "expressió regular sense finalitzar al final del fitxer" -#: awkgram.y:3116 +#: awkgram.y:3140 msgid "use of `\\ #...' line continuation is not portable" msgstr "l'ús de `\\ #...' com a continuació de línia no és portable" -#: awkgram.y:3132 +#: awkgram.y:3156 msgid "backslash not last character on line" msgstr "la barra invertida no és l'últim caràcter en la línia" -#: awkgram.y:3193 +#: awkgram.y:3217 msgid "POSIX does not allow operator `**='" msgstr "POSIX no permet l'operador `**='" -#: awkgram.y:3195 +#: awkgram.y:3219 msgid "old awk does not support operator `**='" msgstr "l'antic awk no suporta l'operador `**='" -#: awkgram.y:3204 +#: awkgram.y:3228 msgid "POSIX does not allow operator `**'" msgstr "POSIX no permet l'operador `**'" -#: awkgram.y:3206 +#: awkgram.y:3230 msgid "old awk does not support operator `**'" msgstr "l'antic awk no suporta l'operador `**='" -#: awkgram.y:3241 +#: awkgram.y:3265 msgid "operator `^=' is not supported in old awk" msgstr "l'operador `^=' no està suportat en l'antic awk" -#: awkgram.y:3249 +#: awkgram.y:3273 msgid "operator `^' is not supported in old awk" msgstr "l'operador `^' no està suportat en l'antic awk" -#: awkgram.y:3342 awkgram.y:3358 command.y:1178 +#: awkgram.y:3366 awkgram.y:3382 command.y:1178 msgid "unterminated string" msgstr "cadena sense finalitzar" -#: awkgram.y:3579 +#: awkgram.y:3603 #, c-format msgid "invalid char '%c' in expression" msgstr "caràcter `%c' no vàlid en l'expressió" -#: awkgram.y:3626 +#: awkgram.y:3650 #, c-format msgid "`%s' is a gawk extension" msgstr "`%s' és una extensió de gawk" -#: awkgram.y:3631 +#: awkgram.y:3655 #, c-format msgid "POSIX does not allow `%s'" msgstr "POSIX no permet «%s»" -#: awkgram.y:3639 +#: awkgram.y:3663 #, c-format msgid "`%s' is not supported in old awk" msgstr "`%s' no està suportat en l'antic awk" -#: awkgram.y:3729 +#: awkgram.y:3753 msgid "`goto' considered harmful!\n" msgstr "`goto' es considera perjudicial!\n" -#: awkgram.y:3763 +#: awkgram.y:3787 #, 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:3798 +#: awkgram.y:3822 #, 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:3803 +#: awkgram.y:3827 #, c-format msgid "%s third parameter is not a changeable object" msgstr "%s el tercer paràmetre no és un objecte intercanviable" -#: awkgram.y:3886 awkgram.y:3889 +#: awkgram.y:3910 awkgram.y:3913 msgid "match: third argument is a gawk extension" msgstr "match: el tercer argument és una extensió de gawk" -#: awkgram.y:3943 awkgram.y:3946 +#: awkgram.y:3967 awkgram.y:3970 msgid "close: second argument is a gawk extension" msgstr "close: el segon argument és una extensió de gawk" -#: awkgram.y:3958 +#: awkgram.y:3982 msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore" -msgstr "l'ús de dcgettext(_\"...\") no és correcte: elimineu el guió baix inicial" +msgstr "" +"l'ús de dcgettext(_\"...\") no és correcte: elimineu el guió baix inicial" -#: awkgram.y:3973 +#: awkgram.y:3997 msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" -msgstr "l'ús de dcgettext(_\"...\") no és correcte: elimineu el guió baix inicial" +msgstr "" +"l'ús de dcgettext(_\"...\") no és correcte: elimineu el guió baix inicial" -#: awkgram.y:3992 +#: awkgram.y:4016 msgid "index: regexp constant as second argument is not allowed" msgstr "índex: no es permet una constant regexp com a segon argument" -#: awkgram.y:4045 +#: awkgram.y:4069 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "funció `%s': paràmetre `%s' ofusca la variable global" -#: awkgram.y:4102 debug.c:4041 debug.c:4084 debug.c:5204 +#: awkgram.y:4126 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:4103 +#: awkgram.y:4127 msgid "sending variable list to standard error" msgstr "s'està enviant la llista de variables a l'eixida d'error estàndard" -#: awkgram.y:4111 +#: awkgram.y:4135 #, c-format msgid "%s: close failed (%s)" msgstr "%s: tancament erroni (%s)" -#: awkgram.y:4136 +#: awkgram.y:4160 msgid "shadow_funcs() called twice!" msgstr "shadow_funcs() s'ha cridat dues vegades!" -#: awkgram.y:4144 +#: awkgram.y:4168 msgid "there were shadowed variables." msgstr "hi ha hagut variables a l'ombra" -#: awkgram.y:4215 +#: awkgram.y:4239 #, c-format msgid "function name `%s' previously defined" msgstr "nom de la funció `%s' definida prèviament" -#: awkgram.y:4261 +#: awkgram.y:4285 #, 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:4264 +#: awkgram.y:4288 #, 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ó" +msgstr "" +"funció `%s': no es pot usar la variable especial `%s' com a un paràmetre de " +"funció" -#: awkgram.y:4272 +#: awkgram.y:4296 #, 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:4359 awkgram.y:4365 +#: awkgram.y:4383 awkgram.y:4389 #, c-format msgid "function `%s' called but never defined" msgstr "es crida a la funció `%s' però no s'ha definit" -#: awkgram.y:4369 +#: awkgram.y:4393 #, 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:4401 +#: awkgram.y:4425 #, 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à" +msgstr "" +"l'expressió regular constant per al paràmetre #%d condueix a un valor booleà" -#: awkgram.y:4460 +#: awkgram.y:4484 #, c-format msgid "" "function `%s' called with space between name and `(',\n" @@ -492,20 +514,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:4696 +#: awkgram.y:4720 msgid "division by zero attempted" msgstr "s'ha intentat una divisió per zero" -#: awkgram.y:4705 +#: awkgram.y:4729 #, c-format msgid "division by zero attempted in `%%'" msgstr "s'ha intentat una divisió per zero en `%%'" -#: awkgram.y:5025 -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:5049 +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:5028 +#: awkgram.y:5052 #, c-format msgid "invalid target of assignment (opcode %s)" msgstr "destí no vàlid d'assignació (opcode %s)" @@ -531,12 +556,16 @@ msgstr "exp: l'argument %g est #: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" -msgstr "fflush: no es pot netejar: la canonada `%s' s'ha obert per a lectura, no per a escriptura" +msgstr "" +"fflush: no es pot netejar: la canonada `%s' s'ha obert per a lectura, no per " +"a escriptura" #: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" -msgstr "fflush: no es pot netejar: el fitxer `%s' s'ha obert per a lectura, no per a escriptura" +msgstr "" +"fflush: no es pot netejar: el fitxer `%s' s'ha obert per a lectura, no per a " +"escriptura" #: builtin.c:244 #, c-format @@ -606,7 +635,9 @@ msgstr "fatal: el recompte d'arguments amb `$' ha de ser > 0" #: builtin.c:919 #, 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" +msgstr "" +"fatal: el recompte d'arguments %ld és major que el nombre total d'arguments " +"proporcionats" #: builtin.c:923 msgid "fatal: `$' not permitted after period in format" @@ -614,299 +645,310 @@ msgstr "fatal: no es permet `$' despr #: builtin.c:939 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ó" +msgstr "" +"fatal: no es proporciona `$' per a l'ample o precisió del camp de posició" -#: builtin.c:1011 +#: builtin.c:1009 msgid "`l' is meaningless in awk formats; ignored" msgstr "`l' manca de significat en els formats awk; serà ignorat" -#: builtin.c:1015 +#: builtin.c:1013 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:1028 +#: builtin.c:1026 msgid "`L' is meaningless in awk formats; ignored" msgstr "`L' manca de significat en els formats awk; serà ignorat" -#: builtin.c:1032 +#: builtin.c:1030 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:1045 +#: builtin.c:1043 msgid "`h' is meaningless in awk formats; ignored" msgstr "`h' manca de significat en els formats awk; serà ignorat" -#: builtin.c:1049 +#: builtin.c:1047 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:1447 +#: builtin.c:1463 #, 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:1545 +#: builtin.c:1561 #, 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" +msgstr "" +"s'ignorarà el caràcter especificador de format `%c': no s'ha convertit cap " +"argument" -#: builtin.c:1550 +#: builtin.c:1566 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:1552 +#: builtin.c:1568 msgid "^ ran out for this one" msgstr "^ desbordament per a aquest" -#: builtin.c:1559 +#: builtin.c:1575 msgid "[s]printf: format specifier does not have control letter" msgstr "[s]printf: l'especificador de format no conté lletra de control" -#: builtin.c:1562 +#: builtin.c:1578 msgid "too many arguments supplied for format string" msgstr "s'han proporcionat masses arguments per a la cadena de format" -#: builtin.c:1618 +#: builtin.c:1634 msgid "sprintf: no arguments" msgstr "sprintf: sense arguments" -#: builtin.c:1641 builtin.c:1652 +#: builtin.c:1657 builtin.c:1668 msgid "printf: no arguments" msgstr "printf: sense arguments" -#: builtin.c:1695 +#: builtin.c:1711 msgid "sqrt: received non-numeric argument" msgstr "sqrt: s'ha rebut un argument no numèric" -#: builtin.c:1699 +#: builtin.c:1715 #, c-format msgid "sqrt: called with negative argument %g" msgstr "sqrt: cridat amb l'argument negatiu %g" -#: builtin.c:1730 +#: builtin.c:1746 #, c-format msgid "substr: length %g is not >= 1" msgstr "substr: la longitud %g no és >= 1" -#: builtin.c:1732 +#: builtin.c:1748 #, c-format msgid "substr: length %g is not >= 0" msgstr "substr: la longitud %g no és >= 0" -#: builtin.c:1739 +#: builtin.c:1755 #, 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:1744 +#: builtin.c:1760 #, 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" +msgstr "" +"substr: la llargada %g és massa gran per a la indexació de cadenes de " +"caràcters, es truncarà a %g" -#: builtin.c:1756 +#: builtin.c:1772 #, 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:1761 +#: builtin.c:1777 #, 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:1786 +#: builtin.c:1802 msgid "substr: source string is zero length" msgstr "substr: la cadena font és de longitud zero" -#: builtin.c:1802 +#: builtin.c:1818 #, 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:1810 +#: builtin.c:1826 #, c-format -msgid "substr: length %g at start index %g exceeds length of first argument (%lu)" -msgstr "substr: la longitud %g a l'índex d'inici %g excedeix la longitud del primer argument (%lu)" +msgid "" +"substr: length %g at start index %g exceeds length of first argument (%lu)" +msgstr "" +"substr: la longitud %g a l'índex d'inici %g excedeix la longitud del primer " +"argument (%lu)" -#: builtin.c:1884 +#: builtin.c:1900 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:1907 +#: builtin.c:1923 msgid "strftime: received non-numeric second argument" msgstr "strftime: s'ha rebut un segon argument no numèric" -#: builtin.c:1911 +#: builtin.c:1927 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" +msgstr "" +"strftime: el segon argument és més petit que 0 o massa gran per a time_t" -#: builtin.c:1918 +#: builtin.c:1934 msgid "strftime: received non-string first argument" msgstr "strftime: el primer argument rebut no és una cadena" -#: builtin.c:1925 +#: builtin.c:1941 msgid "strftime: received empty format string" msgstr "strftime: s'ha rebut una cadena de format buida" -#: builtin.c:1991 +#: builtin.c:2007 msgid "mktime: received non-string argument" msgstr "mktime: s'ha rebut un argument que no és una cadena" -#: builtin.c:2008 +#: builtin.c:2024 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:2043 +#: builtin.c:2059 msgid "'system' function not allowed in sandbox mode" msgstr "la funció 'system' no es permet fora del mode entorn de proves" -#: builtin.c:2048 +#: builtin.c:2064 msgid "system: received non-string argument" msgstr "system: s'ha rebut un argument que no és una cadena" -#: builtin.c:2168 +#: builtin.c:2184 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "referència a una variable sense inicialitzar `$%d'" -#: builtin.c:2255 +#: builtin.c:2271 msgid "tolower: received non-string argument" msgstr "tolower: s'ha rebut un argument que no és una cadena" -#: builtin.c:2289 +#: builtin.c:2305 msgid "toupper: received non-string argument" msgstr "toupper: s'ha rebut un argument que no és una cadena" -#: builtin.c:2325 mpfr.c:672 +#: builtin.c:2341 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2: el primer argument rebut no és numèric" -#: builtin.c:2327 mpfr.c:674 +#: builtin.c:2343 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2: el segon argument rebut no és numèric" -#: builtin.c:2346 +#: builtin.c:2362 msgid "sin: received non-numeric argument" msgstr "sin: s'ha rebut un argument que no és numèric" -#: builtin.c:2362 +#: builtin.c:2378 msgid "cos: received non-numeric argument" msgstr "cos: s'ha rebut un argument que no és numèric" -#: builtin.c:2415 mpfr.c:1156 +#: builtin.c:2431 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand: s'ha rebut un argument que no és numèric" -#: builtin.c:2446 +#: builtin.c:2462 msgid "match: third argument is not an array" msgstr "match: el tercer argument no és una matriu" -#: builtin.c:2718 +#: builtin.c:2734 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub: el tercer argument de 0 és tractat com a 1" -#: builtin.c:3014 +#: builtin.c:3030 msgid "lshift: received non-numeric first argument" msgstr "lshift: el primer argument rebut no és numèric" -#: builtin.c:3016 +#: builtin.c:3032 msgid "lshift: received non-numeric second argument" msgstr "lshift: el segon argument rebut no és numèric" -#: builtin.c:3022 +#: builtin.c:3038 #, c-format msgid "lshift(%f, %f): negative values will give strange results" msgstr "lshift(%f, %f): els valors negatius donaran resultats estranys" -#: builtin.c:3024 +#: builtin.c:3040 #, c-format msgid "lshift(%f, %f): fractional values will be truncated" msgstr "lshift(%f, %f): els valors fraccionaris sernn truncats" -#: builtin.c:3026 +#: builtin.c:3042 #, 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" +msgstr "" +"lshift(%f, %f): un valor de desplaçament massa gran donarà resultats estranys" -#: builtin.c:3051 +#: builtin.c:3067 msgid "rshift: received non-numeric first argument" msgstr "rshift: el primer argument rebut no és numèric" -#: builtin.c:3053 +#: builtin.c:3069 msgid "rshift: received non-numeric second argument" msgstr "rshift: el segon argument rebut no és numèric" -#: builtin.c:3059 +#: builtin.c:3075 #, c-format msgid "rshift(%f, %f): negative values will give strange results" msgstr "rshift(%f, %f): els valors negatius donaran resultats estranys" -#: builtin.c:3061 +#: builtin.c:3077 #, c-format msgid "rshift(%f, %f): fractional values will be truncated" msgstr "rshift(%f, %f): els valors fraccionaris seran truncats" -#: builtin.c:3063 +#: builtin.c:3079 #, 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" +msgstr "" +"rshift(%f, %f): un valor de desplaçament massa gran donarà resultats estranys" -#: builtin.c:3088 mpfr.c:968 +#: builtin.c:3104 mpfr.c:968 msgid "and: called with less than two arguments" msgstr "and: cridat amb menys de dos arguments" -#: builtin.c:3093 +#: builtin.c:3109 #, c-format msgid "and: argument %d is non-numeric" msgstr "exp: l'argument %d no és numèric" -#: builtin.c:3097 +#: builtin.c:3113 #, 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:3120 mpfr.c:1000 +#: builtin.c:3136 mpfr.c:1000 msgid "or: called with less than two arguments" msgstr "or: cridat amb menys de dos arguments" -#: builtin.c:3125 +#: builtin.c:3141 #, c-format msgid "or: argument %d is non-numeric" msgstr "or: l'argument %d no és numèric" -#: builtin.c:3129 +#: builtin.c:3145 #, 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:3151 mpfr.c:1031 +#: builtin.c:3167 mpfr.c:1031 msgid "xor: called with less than two arguments" msgstr "xort: cridat amb menys de dos arguments" -#: builtin.c:3157 +#: builtin.c:3173 #, c-format msgid "xor: argument %d is non-numeric" msgstr "xor: l'argument %d no és numèric" -#: builtin.c:3161 +#: builtin.c:3177 #, 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:3186 mpfr.c:787 +#: builtin.c:3202 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl: s'ha rebut un argument que no és numèric" -#: builtin.c:3192 +#: builtin.c:3208 #, c-format msgid "compl(%f): negative value will give strange results" msgstr "compl(%f): el valor negatiu donarà resultats estranys" -#: builtin.c:3194 +#: builtin.c:3210 #, c-format msgid "compl(%f): fractional value will be truncated" msgstr "compl(%f): el valor fraccionari serà truncat" -#: builtin.c:3363 +#: builtin.c:3379 #, c-format msgid "dcgettext: `%s' is not a valid locale category" msgstr "dcgettext: `%s' no és una categoria local vàlida" @@ -938,7 +980,9 @@ msgstr "save \"%s\": ordre no permesa." #: command.y:339 msgid "Can't use command `commands' for breakpoint/watchpoint commands" -msgstr "No es pot usar l'ordre `commands' per a ordres de punt d'interrupció/inspecció" +msgstr "" +"No es pot usar l'ordre `commands' per a ordres de punt d'interrupció/" +"inspecció" #: command.y:341 msgid "no breakpoint/watchpoint has been set yet" @@ -1012,24 +1056,38 @@ msgid "non-zero integer value" msgstr "valor enter no zero" #: command.y:817 -msgid "backtrace [N] - 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)." +msgid "" +"backtrace [N] - 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:819 -msgid "break [[filename:]N|function] - set breakpoint at the specified location." -msgstr "break [[fitxer:]N|funció] - estableix el punt d'interrupció a la ubicació especificada." +msgid "" +"break [[filename:]N|function] - set breakpoint at the specified location." +msgstr "" +"break [[fitxer:]N|funció] - estableix el punt d'interrupció a la ubicació " +"especificada." #: command.y:821 msgid "clear [[filename:]N|function] - delete breakpoints previously set." -msgstr "clear [[fitxer:]N|funció] - suprimeix els punts establerts prèviament." +msgstr "" +"clear [[fitxer:]N|funció] - suprimeix els punts establerts prèviament." #: command.y:823 -msgid "commands [num] - starts a list of commands to be executed at a breakpoint(watchpoint) hit." -msgstr "commands [num] - inicia una llista d'ordres a executar quan s'arribi a un punt d'interrupció/inspecció." +msgid "" +"commands [num] - starts a list of commands to be executed at a " +"breakpoint(watchpoint) hit." +msgstr "" +"commands [num] - inicia una llista d'ordres a executar quan s'arribi a un " +"punt d'interrupció/inspecció." #: command.y:825 msgid "condition num [expr] - set or clear breakpoint or watchpoint condition." -msgstr "condition num [expr] - estableix o neteja una condició de punt d'interrupció o d'inspecció." +msgstr "" +"condition num [expr] - estableix o neteja una condició de punt d'interrupció " +"o d'inspecció." #: command.y:827 msgid "continue [COUNT] - continue program being debugged." @@ -1037,15 +1095,21 @@ msgstr "continue [RECOMPTE] - continua el programa que s'est #: command.y:829 msgid "delete [breakpoints] [range] - delete specified breakpoints." -msgstr "delete [punts d'interrupció] [rang] - esborra els punts d'interrupció especificats." +msgstr "" +"delete [punts d'interrupció] [rang] - esborra els punts d'interrupció " +"especificats." #: command.y:831 msgid "disable [breakpoints] [range] - disable specified breakpoints." -msgstr "disable [punts d'interrupció] [rang] - deshabilita els punts d'interrupció especificats." +msgstr "" +"disable [punts d'interrupció] [rang] - deshabilita els punts d'interrupció " +"especificats." #: command.y:833 msgid "display [var] - print value of variable each time the program stops." -msgstr "display [var] - imprimeix el valor de la variable cada cop que el programa s'atura" +msgstr "" +"display [var] - imprimeix el valor de la variable cada cop que el programa " +"s'atura" #: command.y:835 msgid "down [N] - move N frames down the stack." @@ -1053,11 +1117,15 @@ msgstr "down [N] - mou N marcs cap a baix a la pila." #: command.y:837 msgid "dump [filename] - dump instructions to file or stdout." -msgstr "dump [filename] - aboca les instruccions a un fitxer o a la sortida estàndard." +msgstr "" +"dump [filename] - aboca les instruccions a un fitxer o a la sortida " +"estàndard." #: command.y:839 msgid "enable [once|del] [breakpoints] [range] - enable specified breakpoints." -msgstr "enable [once|del] [punts d'interrupció] [rang] - habilita els punts d'interrupció especificats." +msgstr "" +"enable [once|del] [punts d'interrupció] [rang] - habilita els punts " +"d'interrupció especificats." #: command.y:841 msgid "end - end a list of commands or awk statements." @@ -1069,7 +1137,8 @@ msgstr "eval stmt|[p1, p2, ...] - avalua la(es) declaraci #: command.y:845 msgid "finish - execute until selected stack frame returns." -msgstr "finish - executa fins que hi hagi un retorn del marc de pila seleccionat." +msgstr "" +"finish - executa fins que hi hagi un retorn del marc de pila seleccionat." #: command.y:847 msgid "frame [N] - select and print stack frame number N." @@ -1081,27 +1150,41 @@ msgstr "help [ordre] - imprimeix una llista d'ordres o una explica de l'ordre." #: command.y:851 msgid "ignore N COUNT - set ignore-count of breakpoint number N to COUNT." -msgstr "ignore N RECOMPTE - estableix ignore-count del punt d'interrupció número N fins RECOMPTE." +msgstr "" +"ignore N RECOMPTE - estableix ignore-count del punt d'interrupció número N " +"fins RECOMPTE." #: command.y:853 -msgid "info topic - source|sources|variables|functions|break|frame|args|locals|display|watch." -msgstr "info topic - 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 topic - 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 [-|+|[fitxer:]número-de-línia|funció|rang] - fes una llista la(es) línia(es) especificada(es)." +msgstr "" +"list [-|+|[fitxer:]número-de-línia|funció|rang] - fes una llista la(es) " +"línia(es) especificada(es)." #: command.y:857 msgid "next [COUNT] - step program, proceeding through subroutine calls." -msgstr "next [RECOMPTE] - avança el programa pas per pas, tot procedint a través de les crides de subrutines." +msgstr "" +"next [RECOMPTE] - avança el programa pas per pas, tot procedint a través de " +"les crides de subrutines." #: command.y:859 -msgid "nexti [COUNT] - step one instruction, but proceed through subroutine calls." -msgstr "nexti [RECOMPTE] - avança una instrucció, però procedeix a través de crides de subrutines." +msgid "" +"nexti [COUNT] - step one instruction, but proceed through subroutine calls." +msgstr "" +"nexti [RECOMPTE] - avança una instrucció, però procedeix a través de crides " +"de subrutines." #: command.y:861 msgid "option [name[=value]] - set or display debugger option(s)." -msgstr "option [nom[=valor]] - estableix o mostra la(es) opció(ns) del depurador." +msgstr "" +"option [nom[=valor]] - estableix o mostra la(es) opció(ns) del depurador." #: command.y:863 msgid "print var [var] - print value of a variable or array." @@ -1117,7 +1200,9 @@ msgstr "quit - surt del depurador." #: command.y:869 msgid "return [value] - make selected stack frame return to its caller." -msgstr "return [valor] - fes que el marc seleccionat de pila retorni a l'element que l'ha cridat." +msgstr "" +"return [valor] - fes que el marc seleccionat de pila retorni a l'element que " +"l'ha cridat." #: command.y:871 msgid "run - start or restart executing program." @@ -1132,8 +1217,11 @@ msgid "set var = value - assign value to a scalar variable." msgstr "set var = valor - assigna un valor a una variable escalar." #: command.y:879 -msgid "silent - suspends usual message when stopped at a breakpoint/watchpoint." -msgstr "silent - suspèn els missatges habituals quan s'autra a un punt d'interrupció/inspecció." +msgid "" +"silent - suspends usual message when stopped at a breakpoint/watchpoint." +msgstr "" +"silent - suspèn els missatges habituals quan s'autra a un punt d'interrupció/" +"inspecció." #: command.y:881 msgid "source file - execute commands from file." @@ -1141,7 +1229,9 @@ msgstr "source file - executa una ordre des d'un fitxer." #: command.y:883 msgid "step [COUNT] - step program until it reaches a different source line." -msgstr "step [RECOMPTE] - avança pas per pas pel programa fins que arribi a una línia diferent de la font." +msgstr "" +"step [RECOMPTE] - avança pas per pas pel programa fins que arribi a una " +"línia diferent de la font." #: command.y:885 msgid "stepi [COUNT] - step one instruction exactly." @@ -1149,7 +1239,8 @@ msgstr "stepi [RECOMPTE] - avan #: command.y:887 msgid "tbreak [[filename:]N|function] - set a temporary breakpoint." -msgstr "tbreak [[fitxer:]N|funció] - estableix un punt temporari d'interrupció." +msgstr "" +"tbreak [[fitxer:]N|funció] - estableix un punt temporari d'interrupció." #: command.y:889 msgid "trace on|off - print instruction before executing." @@ -1157,11 +1248,17 @@ msgstr "trace on|off - imprimeix la instrucci #: command.y:891 msgid "undisplay [N] - remove variable(s) from automatic display list." -msgstr "undisplay [N] - remou la(es) variable(s) de la llista automàtica visualització." +msgstr "" +"undisplay [N] - remou la(es) variable(s) de la llista automàtica " +"visualització." #: command.y:893 -msgid "until [[filename:]N|function] - execute until program reaches a different line or line N within current frame." -msgstr "until [[fitxer:]N|funció] - executa fins que el programa arribi a una línia diferent a la línia N dins del marc actual." +msgid "" +"until [[filename:]N|function] - execute until program reaches a different " +"line or line N within current frame." +msgstr "" +"until [[fitxer:]N|funció] - executa fins que el programa arribi a una línia " +"diferent a la línia N dins del marc actual." #: command.y:895 msgid "unwatch [N] - remove variable(s) from watch list." @@ -1215,7 +1312,8 @@ msgstr "ordre no definida: %s\n" #: debug.c:252 msgid "set or show the number of lines to keep in history file." -msgstr "estableix o mostra el número de línies a mantenir al fitxer d'història." +msgstr "" +"estableix o mostra el número de línies a mantenir al fitxer d'història." #: debug.c:254 msgid "set or show the list command window size." @@ -1231,7 +1329,9 @@ msgstr "estableix o mostra l'indicador del depurador." #: debug.c:260 msgid "(un)set or show saving of command history (value=on|off)." -msgstr "estableix(anul·la) o mostra el desament de la història d'ordres (valor=on|off)." +msgstr "" +"estableix(anul·la) o mostra el desament de la història d'ordres (valor=on|" +"off)." #: debug.c:262 msgid "(un)set or show saving of options (value=on|off)." @@ -1239,7 +1339,8 @@ msgstr "estableix(anul #: debug.c:264 msgid "(un)set or show instruction tracing (value=on|off)." -msgstr "estableix(anul·la) o mostra el seguiment d'instruccions (valor=on|off)." +msgstr "" +"estableix(anul·la) o mostra el seguiment d'instruccions (valor=on|off)." #: debug.c:345 msgid "program not running." @@ -1267,7 +1368,9 @@ msgstr "no es pot trobar el fitxer font `%s' (%s)" #: debug.c:529 #, c-format msgid "WARNING: source file `%s' modified since program compilation.\n" -msgstr "ADVERTIMENT: el fitxer font `%s' s'ha modificat des de la compilació del programa.\n" +msgstr "" +"ADVERTIMENT: el fitxer font `%s' s'ha modificat des de la compilació del " +"programa.\n" #: debug.c:551 #, c-format @@ -1277,12 +1380,14 @@ msgstr "l #: debug.c:611 #, c-format msgid "unexpected eof while reading file `%s', line %d" -msgstr "final de fitxer no esperat quan s'estava llegint el fitxer `%s', línia %d" +msgstr "" +"final de fitxer no esperat quan s'estava llegint el fitxer `%s', línia %d" #: debug.c:620 #, c-format msgid "source file `%s' modified since start of program execution" -msgstr "el fitxer font `%s' s'ha modificat des de l'inici de l'execució del programa" +msgstr "" +"el fitxer font `%s' s'ha modificat des de l'inici de l'execució del programa" #: debug.c:732 #, c-format @@ -1463,7 +1568,8 @@ msgstr "s'ha intentat usar una dada escalar com a una matriu" #: debug.c:1856 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" -msgstr "El punt d'inspecció %d s'ha esborrat perquè el paràmetre està fora d'abast.\n" +msgstr "" +"El punt d'inspecció %d s'ha esborrat perquè el paràmetre està fora d'abast.\n" #: debug.c:1867 #, c-format @@ -1497,22 +1603,28 @@ msgstr "n #: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" -msgstr "Nota: el punt d'interrupció %d (habilitat, ignora els %ld accessos següents), també s'ha establert a %s:%d" +msgstr "" +"Nota: el punt d'interrupció %d (habilitat, ignora els %ld accessos " +"següents), també s'ha establert a %s:%d" #: debug.c:2207 #, c-format msgid "Note: breakpoint %d (enabled), also set at %s:%d" -msgstr "Nota: el punt d'interrupció %d (habilitat), també s'ha establert a %s:%d" +msgstr "" +"Nota: el punt d'interrupció %d (habilitat), també s'ha establert a %s:%d" #: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" -msgstr "Nota: el punt d'interrupció %d (deshabilitat, ignora els %ld accessos següents), també s'ha establert a %s:%d" +msgstr "" +"Nota: el punt d'interrupció %d (deshabilitat, ignora els %ld accessos " +"següents), també s'ha establert a %s:%d" #: debug.c:2221 #, c-format msgid "Note: breakpoint %d (disabled), also set at %s:%d" -msgstr "Nota: el punt d'interrupció %d (deshabilitat), també s'ha establert a %s:%d" +msgstr "" +"Nota: el punt d'interrupció %d (deshabilitat), també s'ha establert a %s:%d" #: debug.c:2238 #, c-format @@ -1547,7 +1659,9 @@ msgstr "No est pot establir el punt d'interrupci #: debug.c:2403 #, c-format msgid "breakpoint %d set at file `%s', line %d is unconditional\n" -msgstr "el punt d'interrupció %d establert al fitxer `%s', línia %d és incondicional\n" +msgstr "" +"el punt d'interrupció %d establert al fitxer `%s', línia %d és " +"incondicional\n" #: debug.c:2508 debug.c:2530 #, c-format @@ -1579,12 +1693,14 @@ msgstr "s" #: debug.c:2662 #, c-format msgid "Will ignore next %ld crossing(s) of breakpoint %d.\n" -msgstr "S'ignoraran el(s) %ld creuament(s) següent(s) del punt d'interrupció %d.\n" +msgstr "" +"S'ignoraran el(s) %ld creuament(s) següent(s) del punt d'interrupció %d.\n" #: debug.c:2666 #, c-format msgid "Will stop next time breakpoint %d is reached.\n" -msgstr "S'aturarà la pròxima vegada que s'assoleixi el punt d'interrupció %d.\n" +msgstr "" +"S'aturarà la pròxima vegada que s'assoleixi el punt d'interrupció %d.\n" #: debug.c:2783 #, c-format @@ -1735,40 +1851,40 @@ msgstr "`return' no est msgid "No symbol `%s' in current context" msgstr "No hi ha un símbol `%s' al context actual" -#: 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: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 msgid "unbalanced [" msgstr "[ sense aparellar" -#: dfa.c:1052 +#: dfa.c:1174 msgid "invalid character class" msgstr "classe no vàlida de caràcters" -#: dfa.c:1228 +#: dfa.c:1316 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "la sintaxi de la classe de caràcters és [[:espai:]], no [:espai:]" -#: dfa.c:1280 +#: dfa.c:1366 msgid "unfinished \\ escape" msgstr "seqüència d'escapada \\ sense finalitzar" -#: dfa.c:1427 regcomp.c:161 +#: dfa.c:1513 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "Contingut no vàlid de \\{\\}" -#: dfa.c:1430 regcomp.c:176 +#: dfa.c:1516 regcomp.c:176 msgid "Regular expression too big" msgstr "L'expressió regular és massa gran" -#: dfa.c:1847 +#: dfa.c:1936 msgid "unbalanced (" msgstr "( sense aparellar" -#: dfa.c:1973 +#: dfa.c:2062 msgid "no syntax specified" msgstr "no s'ha especificat una sintaxi" -#: dfa.c:1981 +#: dfa.c:2070 msgid "unbalanced )" msgstr ") sense aparellar" @@ -1890,8 +2006,10 @@ msgstr "load_ext: no es pot obrir la llibreria `%s' (%s)\n" #: ext.c:104 #, 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" +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 #, c-format @@ -1901,7 +2019,8 @@ msgstr "load_ext: biblioteca `%s': no es pot cridar a la funci #: ext.c:114 #, 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" +msgstr "" +"load_ext: la biblioteca `%s' amb rutina d'inicialització `%s' ha fallat\n" #: ext.c:174 msgid "`extension' is a gawk extension" @@ -1918,8 +2037,10 @@ msgstr "extension: no es pot obrir la biblioteca `%s' (%s)" #: ext.c:186 #, 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)" +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 #, c-format @@ -1997,12 +2118,15 @@ msgstr "funci #: ext.c:395 #, 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" +msgstr "" +"funció `%s': argument #%d: s'ha intentat usar una dada escalar com a una " +"matriu" #: ext.c:399 #, 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" +msgstr "" +"funció `%s': argument #%d: s'ha intentat usar una matriu com a un escalar" #: ext.c:413 msgid "dynamic loading of library not supported" @@ -2155,12 +2279,16 @@ msgstr "inplace_begin: s'esperaven 2 arguments per #: extension/inplace.c:136 msgid "inplace_begin: cannot retrieve 1st argument as a string filename" -msgstr "inplace_begin: no es pot obtenir el primer argument com nom de fitxer cadena de caràcters" +msgstr "" +"inplace_begin: no es pot obtenir el primer argument com nom de fitxer cadena " +"de caràcters" #: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" -msgstr "inplace_begin: s'està deshabilitant l'edició in situ per al nom de fitxer no vàlid `%s'" +msgstr "" +"inplace_begin: s'està deshabilitant l'edició in situ per al nom de fitxer no " +"vàlid `%s'" #: extension/inplace.c:151 #, c-format @@ -2199,7 +2327,9 @@ msgstr "inplace begin: close(%d) ha fallat (%s)" #: extension/inplace.c:210 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" +msgstr "" +"inplace_end: no es pot obtenir el primer argument com un nom de fitxer " +"cadena de caràcters" #: extension/inplace.c:217 msgid "inplace_end: in-place editing not active" @@ -2254,16 +2384,16 @@ msgstr "chr: s'ha cridat amb cap argument" msgid "chr: called with inappropriate argument(s)" msgstr "chr: s'ha cridat amb argument(s) no apropiat(s)" -#: 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 ha fallat: %s" -#: extension/readfile.c:84 +#: extension/readfile.c:113 msgid "readfile: called with too many arguments" msgstr "readfile: s'ha cridat amb massa arguments" -#: extension/readfile.c:118 +#: extension/readfile.c:137 msgid "readfile: called with no arguments" msgstr "readfile: s'ha cridat amb cap argument" @@ -2315,27 +2445,27 @@ msgstr "do_reada: clear_array ha fallat\n" msgid "read_array: set_array_element failed\n" msgstr "read_array: set_array_element ha fallat\n" -#: extension/time.c:106 +#: extension/time.c:113 msgid "gettimeofday: ignoring arguments" msgstr "gettimeofday: s'estan ignorant els arguments" -#: extension/time.c:137 +#: extension/time.c:144 msgid "gettimeofday: not supported on this platform" msgstr "gettimeofday: no està suportat en aquesta plataforma" -#: extension/time.c:158 +#: extension/time.c:165 msgid "sleep: called with too many arguments" msgstr "sleep: s'ha cridat amb massa arguments" -#: extension/time.c:161 +#: extension/time.c:168 msgid "sleep: missing required numeric argument" msgstr "sleep: no hi ha un argument numèric requerit" -#: extension/time.c:167 +#: extension/time.c:174 msgid "sleep: argument is negative" msgstr "sleep: l'argument és negatiu" -#: extension/time.c:201 +#: extension/time.c:208 msgid "sleep: not supported on this platform" msgstr "sleep: no està suportat en aquesta plataforma" @@ -2357,15 +2487,18 @@ msgstr "split: el segon argument no #: field.c:993 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" +msgstr "" +"split: no es pot usar una submatriu de segon argument per a quart argument" #: field.c:998 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" +msgstr "" +"split: no es pot usar una submatriu de segon argument per a quart argument" #: field.c:1001 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" +msgstr "" +"split: no est pot usar una submatriu de quart argument per a segon argument" #: field.c:1032 msgid "split: null string for third arg is a gawk extension" @@ -2385,15 +2518,18 @@ msgstr "patsplit: el segon argument no #: field.c:1087 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" +msgstr "" +"patsplit: no es pot usar la mateixa matriu per a segon i quart argument" #: field.c:1092 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" +msgstr "" +"patsplit: no es pot usar una submatriu de segon argument per a quart argument" #: field.c:1095 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" +msgstr "" +"patsplit: no es pot usar una submatriu de quart argument per a segon argument" #: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" @@ -2428,20 +2564,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:808 +#: gawkapi.c:807 msgid "remove_element: received null array" msgstr "remove_element: s'ha rebut una matriu nul·la" -#: gawkapi.c:811 +#: gawkapi.c:810 msgid "remove_element: received null subscript" msgstr "remove_element: s'ha rebut un subíndex nul" -#: gawkapi.c:948 +#: gawkapi.c:947 #, 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:953 +#: gawkapi.c:952 #, 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" @@ -2533,7 +2669,9 @@ msgstr "l'expressi #: io.c:761 #, 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" +msgstr "" +"el fitxer `%s' per a la redirecció `%s' pot ser resultat d'una expressió " +"lògica" #: io.c:809 #, c-format @@ -2553,7 +2691,9 @@ msgstr "no es pot obrir la canonada `%s' per a l'entrada (%s)" #: io.c:904 #, 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)" +msgstr "" +"no es pot obrir una canonada bidireccional `%s' per a les entrades/eixides " +"(%s)" #: io.c:986 #, c-format @@ -2566,8 +2706,11 @@ msgid "can't redirect to `%s' (%s)" msgstr "no es pot redirigir cap a `%s' (%s)" #: io.c:1040 -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" +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 #, c-format @@ -2594,7 +2737,8 @@ msgstr "finalitzaci #: io.c:1205 #, 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" +msgstr "" +"close: la redirecció `%s' no s'obre amb `|&', s'ignora el segon argument" #: io.c:1222 #, c-format @@ -2696,22 +2840,28 @@ msgstr "ha fallat el tancament del pty mestre (%s)" #: io.c:1919 io.c:2105 io.c:2305 #, 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)" +msgstr "" +"ha fallat la finalització de la sortida estàndard en els processos fills (%s)" #: io.c:1922 #, 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)" +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 #, 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)" +msgstr "" +"ha fallat la finalització de l'entrada estàndard en els processos fills (%s)" #: io.c:1927 #, 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)" +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 #, c-format @@ -2721,12 +2871,16 @@ msgstr "ha fallat el tancament del pty esclau (%s)" #: io.c:2040 io.c:2108 io.c:2276 io.c:2308 #, 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)" +msgstr "" +"ha fallat la redirecció cap a l'eixida estàndard dels processos fills (dup: " +"%s)" #: io.c:2047 io.c:2113 #, 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)" +msgstr "" +"ha fallat la redirecció cap a l'entrada estàndard dels processos fills (dup: " +"%s)" #: io.c:2073 io.c:2298 msgid "restoring stdout in parent process failed\n" @@ -2762,7 +2916,9 @@ msgstr "register_input_parser: s'ha rebut un punter nul" #: io.c:2818 #, 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" +msgstr "" +"l'analitzador d'entrades `%s' està en conflicte amb analitzador d'entrades `" +"%s' instal·lat prèviament" #: io.c:2825 #, c-format @@ -2775,8 +2931,11 @@ msgstr "register_output_wrapper: s'ha rebut un punter nul" #: io.c:2873 #, c-format -msgid "output wrapper `%s' conflicts with previously installed output wrapper `%s'" -msgstr "l'embolcall de sortida `%s' està en conflicte amb l'embolcall de sortida `%s' instal·lat prèviament" +msgid "" +"output wrapper `%s' conflicts with previously installed output wrapper `%s'" +msgstr "" +"l'embolcall de sortida `%s' està en conflicte amb l'embolcall de sortida `" +"%s' instal·lat prèviament" #: io.c:2880 #, c-format @@ -2789,8 +2948,12 @@ msgstr "register_output_processor: s'ha rebut un punter nul" #: io.c:2930 #, c-format -msgid "two-way processor `%s' conflicts with previously installed two-way processor `%s'" -msgstr "el processsador de dues vies `%s' està en conflicte amb el processador de dues vies `%s' instal·lat prèviament" +msgid "" +"two-way processor `%s' conflicts with previously installed two-way processor " +"`%s'" +msgstr "" +"el processsador de dues vies `%s' està en conflicte amb el processador de " +"dues vies `%s' instal·lat prèviament" #: io.c:2939 #, c-format @@ -2830,7 +2993,8 @@ msgstr "%s: l'opci #: main.c:562 msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'" -msgstr "la variable d'entorn `POSIXLY_CORRECT' està establerta: usant `--posix'" +msgstr "" +"la variable d'entorn `POSIXLY_CORRECT' està establerta: usant `--posix'" #: main.c:568 msgid "`--posix' overrides `--traditional'" @@ -3022,7 +3186,8 @@ msgid "" "\n" msgstr "" "gawk és un llenguatge d'anàlisi i processament de patrons.\n" -"De forma predeterminada llegeix l'entrada estàndard i escriu a la sortida estàndar.\n" +"De forma predeterminada llegeix l'entrada estàndard i escriu a la sortida " +"estàndar.\n" #: main.c:855 msgid "" @@ -3106,7 +3271,8 @@ msgstr "`%s' no #: main.c:1339 #, 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" +msgstr "" +"no es pot usar el nom de la funció integrada `%s' com a nom de variable" #: main.c:1344 #, c-format @@ -3213,8 +3379,12 @@ msgstr "no hi ha d #: node.c:579 #, c-format -msgid "hex escape \\x%.*s of %d characters probably not interpreted the way you expect" -msgstr "probablement no s'han interpretat els caràcters hex escape \\x%.*s of %d de la manera que esperàveu" +msgid "" +"hex escape \\x%.*s of %d characters probably not interpreted the way you " +"expect" +msgstr "" +"probablement no s'han interpretat els caràcters hex escape \\x%.*s of %d de " +"la manera que esperàveu" #: node.c:594 #, c-format @@ -3222,13 +3392,18 @@ 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 -msgid "Invalid multibyte data detected. There may be a mismatch between your data and your locale." -msgstr "S'han detectat dades multibyte no vàlides. Pot haver-hi una discordança entre les vostres dades i la vostra configuració local" +msgid "" +"Invalid multibyte data detected. There may be a mismatch between your data " +"and your locale." +msgstr "" +"S'han detectat dades multibyte no vàlides. Pot haver-hi una discordança " +"entre les vostres dades i la vostra configuració local" #: posix/gawkmisc.c:177 #, c-format msgid "%s %s `%s': could not get fd flags: (fcntl F_GETFD: %s)" -msgstr "%s %s `%s': no s'han pogut obtenir els indicadors fd: (fcntl F_GETFD: %s)" +msgstr "" +"%s %s `%s': no s'han pogut obtenir els indicadors fd: (fcntl F_GETFD: %s)" #: posix/gawkmisc.c:189 #, c-format @@ -3440,7 +3615,8 @@ msgstr "no es pot mostrar el context principal" #~ "To report bugs, see node `Bugs' in `gawk.info', which is\n" #~ msgstr "" #~ "\n" -#~ "Per a informar d'errors, consulteu el node «Bugs' en «gawk.info', que està\n" +#~ "Per a informar d'errors, consulteu el node «Bugs' en «gawk.info', que " +#~ "està\n" #~ msgid "invalid syntax in name `%s' for variable assignment" #~ msgstr "sintaxi no vàlida en el nom «%s' per a l'asignació de la variable" @@ -3464,7 +3640,8 @@ msgstr "no es pot mostrar el context principal" #~ msgstr "«%s» és una funció, l'assignació no és permesa" #~ msgid "assignment is not allowed to result of builtin function" -#~ msgstr "no es permet l'assignació per a obtindre un resultat d'una funció interna" +#~ msgstr "" +#~ "no es permet l'assignació per a obtindre un resultat d'una funció interna" #~ msgid "" #~ "\t# BEGIN block(s)\n" @@ -3509,8 +3686,11 @@ msgstr "no es pot mostrar el context principal" #~ msgid "field %d in FIELDWIDTHS, must be > 0" #~ msgstr "el camp %d en FIELDWIDTHS, hauria de ser > 0" -#~ msgid "for loop: array `%s' changed size from %d to %d during loop execution" -#~ msgstr "bucle for: la matriu «%s» ha canviat de mida de %d a %d durant l'execució del bucle" +#~ msgid "" +#~ "for loop: array `%s' changed size from %d to %d during loop execution" +#~ msgstr "" +#~ "bucle for: la matriu «%s» ha canviat de mida de %d a %d durant l'execució " +#~ "del bucle" #~ msgid "`break' outside a loop is not portable" #~ msgstr "«break» a fora d'un bucle no és portable" @@ -3536,8 +3716,12 @@ msgstr "no es pot mostrar el context principal" #~ msgid "assignment used in conditional context" #~ msgstr "assignació usada en un context condicional" -#~ msgid "concatenation: side effects in one expression have changed the length of another!" -#~ msgstr "concatenació: els efectes colaterals en una expressió han canviat la longitud d'una altra!" +#~ msgid "" +#~ "concatenation: side effects in one expression have changed the length of " +#~ "another!" +#~ msgstr "" +#~ "concatenació: els efectes colaterals en una expressió han canviat la " +#~ "longitud d'una altra!" #~ msgid "function %s called\n" #~ msgstr "s'ha cridat a la funció %s\n" @@ -3549,7 +3733,9 @@ msgstr "no es pot mostrar el context principal" #~ msgstr "tipus d'arbre %s no vàlid dintre de redirect()" #~ msgid "can't open two way socket `%s' for input/output (%s)" -#~ msgstr "no es pot obrir un socket bidireccional «%s» per a les entrades/eixides (%s)" +#~ msgstr "" +#~ "no es pot obrir un socket bidireccional «%s» per a les entrades/eixides " +#~ "(%s)" #~ msgid "/inet/raw client not ready yet, sorry" #~ msgstr "el client /inet/raw encara no està a punt, ho sento" diff --git a/po/da.gmo b/po/da.gmo index 3655ffb5..0ba7ffc0 100644 Binary files a/po/da.gmo and b/po/da.gmo differ diff --git a/po/da.po b/po/da.po index 2ce06bf8..f3840840 100644 --- a/po/da.po +++ b/po/da.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: gawk 4.0.0h\n" "Report-Msgid-Bugs-To: arnold@skeeve.com\n" -"POT-Creation-Date: 2013-05-09 16:05+0300\n" +"POT-Creation-Date: 2014-04-08 19:23+0300\n" "PO-Revision-Date: 2012-02-06 10:37+0100\n" "Last-Translator: Keld Simonsen \n" "Language-Team: Danish \n" @@ -21,89 +21,89 @@ msgstr "" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: array.c:254 +#: array.c:256 #, c-format msgid "from %s" msgstr "fra %s" -#: array.c:354 +#: array.c:357 msgid "attempt to use a scalar value as array" msgstr "forsøg på at bruge en skalar som array" -#: array.c:356 +#: array.c:359 #, c-format msgid "attempt to use scalar parameter `%s' as an array" msgstr "forsøg på at bruge skalarparameteren '%s' som et array" -#: array.c:359 +#: array.c:362 #, c-format msgid "attempt to use scalar `%s' as an array" msgstr "forsøg på at bruge skalar '%s' som et array" -#: array.c:406 array.c:573 builtin.c:85 builtin.c:1591 builtin.c:1637 -#: builtin.c:1650 builtin.c:2078 builtin.c:2092 eval.c:1121 eval.c:1125 -#: eval.c:1524 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" msgstr "forsøg på at bruge array '%s' i skalarsammenhæng" -#: array.c:580 +#: array.c:583 #, c-format msgid "delete: index `%s' not in array `%s'" msgstr "delete: indeks '%s' findes ikke i array '%s'" -#: array.c:594 +#: array.c:597 #, c-format msgid "attempt to use scalar `%s[\"%.*s\"]' as an array" msgstr "forsøg på at bruge skalaren '%s[\"%.*s\"]' som array" -#: array.c:773 +#: array.c:776 #, fuzzy msgid "adump: first argument not an array" msgstr "adump: argument er ikke et array" -#: array.c:812 +#: array.c:815 msgid "asort: second argument not an array" msgstr "asort: andet argument er ikke et array" -#: array.c:813 +#: array.c:816 msgid "asorti: second argument not an array" msgstr "asorti: andet argument er ikke et array" -#: array.c:820 +#: array.c:823 msgid "asort: first argument not an array" msgstr "asort: første argument er ikke et array" -#: array.c:821 +#: array.c:824 msgid "asorti: first argument not an array" msgstr "asorti: første argument er ikke et array" -#: array.c:828 +#: array.c:831 msgid "asort: cannot use a subarray of first arg for second arg" msgstr "" "asort: kan ikke bruge et underarray af første argument for andet argument" -#: array.c:829 +#: array.c:832 msgid "asorti: cannot use a subarray of first arg for second arg" msgstr "" "asorti: kan ikke bruge et underarray af første argument for andet argument" -#: array.c:834 +#: array.c:837 msgid "asort: cannot use a subarray of second arg for first arg" msgstr "" "asort: kan ikke bruge et underarray af andet argument for første argument" -#: array.c:835 +#: array.c:838 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:1309 +#: array.c:1314 #, c-format msgid "`%s' is invalid as a function name" msgstr "'%s' er ugyldigt som funktionsnavn" -#: array.c:1313 +#: array.c:1318 #, c-format msgid "sort comparison function `%s' is not defined" msgstr "funktionen for sorteringssammenligning '%s' er ikke defineret" @@ -145,11 +145,11 @@ msgstr "dublet case-v msgid "duplicate `default' detected in switch body" msgstr "dublet 'default' opdaget i switch-krop" -#: awkgram.y:796 awkgram.y:3699 +#: awkgram.y:796 awkgram.y:3723 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:3691 +#: awkgram.y:805 awkgram.y:3715 msgid "`continue' is not allowed outside a loop" msgstr "'continue' uden for en løkke er ikke tilladt" @@ -241,272 +241,272 @@ msgstr "kan ikke bruge specialvariabel '%s' til indirekte funktionskald" msgid "invalid subscript expression" msgstr "ugyldigt indeksudtryk" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:119 +#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "advarsel: " -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:151 +#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "fatal: " -#: awkgram.y:2092 +#: awkgram.y:2116 msgid "unexpected newline or end of string" msgstr "uventet nylinjetegn eller strengafslutning" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:517 debug.c:533 -#: debug.c:2792 debug.c:5040 +#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 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:2360 awkgram.y:2485 +#: awkgram.y:2384 awkgram.y:2509 #, 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:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:130 debug.c:5191 +#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "ukendt årsag" -#: awkgram.y:2371 awkgram.y:2395 +#: awkgram.y:2395 awkgram.y:2419 #, c-format msgid "can't include `%s' and use it as a program file" msgstr "" -#: awkgram.y:2384 +#: awkgram.y:2408 #, c-format msgid "already included source file `%s'" msgstr "allerede inkluderet kildefil '%s'" -#: awkgram.y:2385 +#: awkgram.y:2409 #, fuzzy, c-format msgid "already loaded shared library `%s'" msgstr "allerede inkluderet kildefil '%s'" -#: awkgram.y:2420 +#: awkgram.y:2444 msgid "@include is a gawk extension" msgstr "@include er en gawk-udvidelse" -#: awkgram.y:2426 +#: awkgram.y:2450 msgid "empty filename after @include" msgstr "tomt filnavn efter @include" -#: awkgram.y:2470 +#: awkgram.y:2494 #, fuzzy msgid "@load is a gawk extension" msgstr "@include er en gawk-udvidelse" -#: awkgram.y:2476 +#: awkgram.y:2500 #, fuzzy msgid "empty filename after @load" msgstr "tomt filnavn efter @include" -#: awkgram.y:2610 +#: awkgram.y:2634 msgid "empty program text on command line" msgstr "tom programtekst på kommandolinjen" -#: awkgram.y:2725 +#: awkgram.y:2749 #, c-format msgid "can't read sourcefile `%s' (%s)" msgstr "kan ikke læse kildefilen '%s' (%s)" -#: awkgram.y:2736 +#: awkgram.y:2760 #, c-format msgid "source file `%s' is empty" msgstr "kildefilen '%s' er tom" -#: awkgram.y:2913 +#: awkgram.y:2937 msgid "source file does not end in newline" msgstr "kildefilen slutter ikke med en ny linje" -#: awkgram.y:3018 +#: awkgram.y:3042 msgid "unterminated regexp ends with `\\' at end of file" msgstr "uafsluttet regulært udtryk slutter med '\\' i slutningen af filen" -#: awkgram.y:3042 +#: awkgram.y:3066 #, 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:3046 +#: awkgram.y:3070 #, c-format msgid "tawk regex modifier `/.../%c' doesn't work in gawk" msgstr "regex-ændringstegn '/.../%c' fra tawk virker ikke i gawk" -#: awkgram.y:3053 +#: awkgram.y:3077 msgid "unterminated regexp" msgstr "uafsluttet regulært udtryk" -#: awkgram.y:3057 +#: awkgram.y:3081 msgid "unterminated regexp at end of file" msgstr "uafsluttet regulært udtryk i slutningen af filen" -#: awkgram.y:3116 +#: awkgram.y:3140 msgid "use of `\\ #...' line continuation is not portable" msgstr "brug af '\\ #...' for linjefortsættelse er ikke portabelt" -#: awkgram.y:3132 +#: awkgram.y:3156 msgid "backslash not last character on line" msgstr "sidste tegn på linjen er ikke en omvendt skråstreg" -#: awkgram.y:3193 +#: awkgram.y:3217 msgid "POSIX does not allow operator `**='" msgstr "POSIX tillader ikke operatoren '**='" -#: awkgram.y:3195 +#: awkgram.y:3219 msgid "old awk does not support operator `**='" msgstr "gamle versioner af awk understøtter ikke operatoren '**='" -#: awkgram.y:3204 +#: awkgram.y:3228 msgid "POSIX does not allow operator `**'" msgstr "POSIX tillader ikke operatoren '**'" -#: awkgram.y:3206 +#: awkgram.y:3230 msgid "old awk does not support operator `**'" msgstr "gamle versioner af awk understøtter ikke operatoren '**'" -#: awkgram.y:3241 +#: awkgram.y:3265 msgid "operator `^=' is not supported in old awk" msgstr "operatoren '^=' understøttes ikke i gamle versioner af awk" -#: awkgram.y:3249 +#: awkgram.y:3273 msgid "operator `^' is not supported in old awk" msgstr "operatoren '^' understøttes ikke i gamle versioner af awk" -#: awkgram.y:3342 awkgram.y:3358 command.y:1178 +#: awkgram.y:3366 awkgram.y:3382 command.y:1178 msgid "unterminated string" msgstr "uafsluttet streng" -#: awkgram.y:3579 +#: awkgram.y:3603 #, c-format msgid "invalid char '%c' in expression" msgstr "ugyldigt tegn '%c' i udtryk" -#: awkgram.y:3626 +#: awkgram.y:3650 #, c-format msgid "`%s' is a gawk extension" msgstr "'%s' er en gawk-udvidelse" -#: awkgram.y:3631 +#: awkgram.y:3655 #, c-format msgid "POSIX does not allow `%s'" msgstr "POSIX tillader ikke '%s'" -#: awkgram.y:3639 +#: awkgram.y:3663 #, c-format msgid "`%s' is not supported in old awk" msgstr "'%s' understøttes ikke i gamle versioner af awk" -#: awkgram.y:3729 +#: awkgram.y:3753 msgid "`goto' considered harmful!\n" msgstr "'goto' anses for skadelig!\n" -#: awkgram.y:3763 +#: awkgram.y:3787 #, c-format msgid "%d is invalid as number of arguments for %s" msgstr "%d er et ugyldigt antal argumenter for %s" -#: awkgram.y:3798 +#: awkgram.y:3822 #, 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:3803 +#: awkgram.y:3827 #, c-format msgid "%s third parameter is not a changeable object" msgstr "%s: tredje argument er ikke et ændringsbart objekt" -#: awkgram.y:3886 awkgram.y:3889 +#: awkgram.y:3910 awkgram.y:3913 msgid "match: third argument is a gawk extension" msgstr "match: tredje argument er en gawk-udvidelse" -#: awkgram.y:3943 awkgram.y:3946 +#: awkgram.y:3967 awkgram.y:3970 msgid "close: second argument is a gawk extension" msgstr "close: andet argument er en gawk-udvidelse" -#: awkgram.y:3958 +#: awkgram.y:3982 msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore" msgstr "" "brug af dcgettext(_\"...\") er forkert: fjern det indledende " "understregningstegn" -#: awkgram.y:3973 +#: awkgram.y:3997 msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" msgstr "" "brug af dcgettext(_\"...\") er forkert: fjern det indledende " "understregningstegn" -#: awkgram.y:3992 +#: awkgram.y:4016 #, fuzzy msgid "index: regexp constant as second argument is not allowed" msgstr "indeks: andet argument er ikke en streng" -#: awkgram.y:4045 +#: awkgram.y:4069 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "funktionen '%s': parameteren '%s' overskygger en global variabel" -#: awkgram.y:4102 debug.c:4021 debug.c:4064 debug.c:5189 +#: awkgram.y:4126 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:4103 +#: awkgram.y:4127 msgid "sending variable list to standard error" msgstr "sender variabelliste til standard fejl" -#: awkgram.y:4111 +#: awkgram.y:4135 #, c-format msgid "%s: close failed (%s)" msgstr "%s: lukning mislykkedes (%s)" -#: awkgram.y:4136 +#: awkgram.y:4160 msgid "shadow_funcs() called twice!" msgstr "shadow_funcs() kaldt to gange!" -#: awkgram.y:4144 +#: awkgram.y:4168 msgid "there were shadowed variables." msgstr "der var skyggede variable." -#: awkgram.y:4215 +#: awkgram.y:4239 #, c-format msgid "function name `%s' previously defined" msgstr "funktionsnavnet '%s' er allerede defineret" -#: awkgram.y:4261 +#: awkgram.y:4285 #, c-format msgid "function `%s': can't use function name as parameter name" msgstr "funktionen '%s': kan ikke bruge funktionsnavn som parameternavn" -#: awkgram.y:4264 +#: awkgram.y:4288 #, 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:4272 +#: awkgram.y:4296 #, c-format msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d" msgstr "funktionen '%s': parameter %d, '%s', er samme som parameter %d" -#: awkgram.y:4366 awkgram.y:4372 +#: awkgram.y:4383 awkgram.y:4389 #, c-format msgid "function `%s' called but never defined" msgstr "funktionen '%s' kaldt, men aldrig defineret" -#: awkgram.y:4376 +#: awkgram.y:4393 #, c-format msgid "function `%s' defined but never called directly" msgstr "funktionen '%s' defineret, men aldrig kaldt direkte" -#: awkgram.y:4408 +#: awkgram.y:4425 #, 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:4467 +#: awkgram.y:4484 #, c-format msgid "" "function `%s' called with space between name and `(',\n" @@ -515,232 +515,242 @@ msgstr "" "funktionen '%s' kaldt med blanktegn mellem navnet og '(',\n" "eller brugt som en variabel eller et array" -#: awkgram.y:4703 +#: awkgram.y:4720 msgid "division by zero attempted" msgstr "forsøgte at dividere med nul" -#: awkgram.y:4712 +#: awkgram.y:4729 #, c-format msgid "division by zero attempted in `%%'" msgstr "forsøgte at dividere med nul i '%%'" -#: builtin.c:128 +#: awkgram.y:5049 +msgid "" +"cannot assign a value to the result of a field post-increment expression" +msgstr "" + +#: awkgram.y:5052 +#, fuzzy, c-format +msgid "invalid target of assignment (opcode %s)" +msgstr "%d er et ugyldigt antal argumenter for %s" + +#: builtin.c:133 #, c-format msgid "%s to \"%s\" failed (%s)" msgstr "%s til '%s' mislykkedes (%s)" -#: builtin.c:129 +#: builtin.c:134 msgid "standard output" msgstr "standard ud" -#: builtin.c:143 +#: builtin.c:148 msgid "exp: received non-numeric argument" msgstr "exp: fik et ikke-numerisk argument" -#: builtin.c:149 +#: builtin.c:154 #, c-format msgid "exp: argument %g is out of range" msgstr "exp: argumentet %g er uden for det tilladte område" -#: builtin.c:224 +#: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" msgstr "" "fflush: kan ikke rense: datakanalen '%s' åbnet for læsning, ikke skrivning" -#: builtin.c:227 +#: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" msgstr "fflush: kan ikke rense: filen '%s' åbnet for læsning, ikke skrivning" -#: builtin.c:239 +#: builtin.c:244 #, c-format 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:357 +#: builtin.c:362 msgid "index: received non-string first argument" msgstr "indeks: første argument er ikke en streng" -#: builtin.c:359 +#: builtin.c:364 msgid "index: received non-string second argument" msgstr "indeks: andet argument er ikke en streng" -#: builtin.c:483 mpfr.c:757 +#: builtin.c:488 mpfr.c:757 msgid "int: received non-numeric argument" msgstr "int: fik et ikke-numerisk argument" -#: builtin.c:520 +#: builtin.c:525 msgid "length: received array argument" msgstr "length: fik et array-argument" -#: builtin.c:523 +#: builtin.c:528 msgid "`length(array)' is a gawk extension" msgstr "'length(array)' er en gawk-udvidelse" -#: builtin.c:539 +#: builtin.c:544 msgid "length: received non-string argument" msgstr "length: fik et argument som ikke er en streng" -#: builtin.c:570 +#: builtin.c:575 msgid "log: received non-numeric argument" msgstr "log: fik et ikke-numerisk argument" -#: builtin.c:573 +#: builtin.c:578 #, c-format msgid "log: received negative argument %g" msgstr "log: fik et negativt argument %g" -#: builtin.c:771 builtin.c:776 +#: builtin.c:776 builtin.c:781 msgid "fatal: must use `count$' on all formats or none" msgstr "fatal: skal bruge 'count$' på alle formater eller ikke nogen" -#: builtin.c:846 +#: builtin.c:851 #, c-format msgid "field width is ignored for `%%' specifier" msgstr "feltbredde ignoreret for '%%'-angivelse" -#: builtin.c:848 +#: builtin.c:853 #, c-format msgid "precision is ignored for `%%' specifier" msgstr "præcision ignoreret for '%%'-angivelse" -#: builtin.c:850 +#: builtin.c:855 #, c-format msgid "field width and precision are ignored for `%%' specifier" msgstr "feltbredde og præcision ignoreret for '%%'-angivelse" -#: builtin.c:901 +#: builtin.c:906 msgid "fatal: `$' is not permitted in awk formats" msgstr "fatal: '$' tillades ikke i awk-formater" -#: builtin.c:910 +#: builtin.c:915 msgid "fatal: arg count with `$' must be > 0" msgstr "fatal: argumentantallet med '$' skal være > 0" -#: builtin.c:914 +#: builtin.c:919 #, 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:918 +#: builtin.c:923 msgid "fatal: `$' not permitted after period in format" msgstr "fatal: '$' tillades ikke efter et punktum i formatet" -#: builtin.c:934 +#: builtin.c:939 msgid "fatal: no `$' supplied for positional field width or precision" msgstr "" "fatal: intet '$' angivet for bredde eller præcision af positionsangivet felt" -#: builtin.c:1006 +#: builtin.c:1009 msgid "`l' is meaningless in awk formats; ignored" msgstr "'l' er meningsløst i awk-formater, ignoreret" -#: builtin.c:1010 +#: builtin.c:1013 msgid "fatal: `l' is not permitted in POSIX awk formats" msgstr "fatal: 'l' tillades ikke i POSIX awk-formater" -#: builtin.c:1023 +#: builtin.c:1026 msgid "`L' is meaningless in awk formats; ignored" msgstr "'L' er meningsløst i awk-formater, ignoreret" -#: builtin.c:1027 +#: builtin.c:1030 msgid "fatal: `L' is not permitted in POSIX awk formats" msgstr "fatal: 'L' tillades ikke i POSIX awk-formater" -#: builtin.c:1040 +#: builtin.c:1043 msgid "`h' is meaningless in awk formats; ignored" msgstr "'h' er meningsløst i awk-formater, ignoreret" -#: builtin.c:1044 +#: builtin.c:1047 msgid "fatal: `h' is not permitted in POSIX awk formats" msgstr "fatal: 'h' tillades ikke i POSIX awk-formater" -#: builtin.c:1439 +#: builtin.c:1463 #, 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:1537 +#: builtin.c:1561 #, c-format msgid "ignoring unknown format specifier character `%c': no argument converted" msgstr "" "ignorerer ukendt formatspecificeringstegn '%c': intet argument konverteret" -#: builtin.c:1542 +#: builtin.c:1566 msgid "fatal: not enough arguments to satisfy format string" msgstr "fatal: for få argumenter til formatstrengen" -#: builtin.c:1544 +#: builtin.c:1568 msgid "^ ran out for this one" msgstr "^ sluttede her" -#: builtin.c:1551 +#: builtin.c:1575 msgid "[s]printf: format specifier does not have control letter" msgstr "[s]printf: formatspecifikation har intet kommandobogstav" -#: builtin.c:1554 +#: builtin.c:1578 msgid "too many arguments supplied for format string" msgstr "for mange argumenter til formatstrengen" -#: builtin.c:1610 +#: builtin.c:1634 #, fuzzy msgid "sprintf: no arguments" msgstr "printf: ingen argumenter" -#: builtin.c:1633 builtin.c:1644 +#: builtin.c:1657 builtin.c:1668 msgid "printf: no arguments" msgstr "printf: ingen argumenter" -#: builtin.c:1687 +#: builtin.c:1711 msgid "sqrt: received non-numeric argument" msgstr "sqrt: fik ikke-numerisk argument" -#: builtin.c:1691 +#: builtin.c:1715 #, c-format msgid "sqrt: called with negative argument %g" msgstr "sqrt: kaldt med negativt argument %g" -#: builtin.c:1722 +#: builtin.c:1746 #, c-format msgid "substr: length %g is not >= 1" msgstr "substr: længden %g er ikke >= 1" -#: builtin.c:1724 +#: builtin.c:1748 #, c-format msgid "substr: length %g is not >= 0" msgstr "substr: længden %g er ikke >= 0" -#: builtin.c:1731 +#: builtin.c:1755 #, 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:1736 +#: builtin.c:1760 #, 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:1748 +#: builtin.c:1772 #, c-format msgid "substr: start index %g is invalid, using 1" msgstr "substr: startindeks %g er ugyldigt, bruger 1" -#: builtin.c:1753 +#: builtin.c:1777 #, 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:1778 +#: builtin.c:1802 msgid "substr: source string is zero length" msgstr "substr: kildestrengen er tom" -#: builtin.c:1794 +#: builtin.c:1818 #, c-format msgid "substr: start index %g is past end of string" msgstr "substr: startindeks %g er forbi slutningen på strengen" -#: builtin.c:1802 +#: builtin.c:1826 #, c-format msgid "" "substr: length %g at start index %g exceeds length of first argument (%lu)" @@ -748,191 +758,191 @@ msgstr "" "substr: længden %g ved startindeks %g overskrider længden af første argument " "(%lu)" -#: builtin.c:1876 +#: builtin.c:1900 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" msgstr "strftime: formatværdi i PROCINFO[\"strftime\"] har numerisk type" -#: builtin.c:1899 +#: builtin.c:1923 msgid "strftime: received non-numeric second argument" msgstr "strftime: fik et ikke-numerisk andet argument" -#: builtin.c:1903 +#: builtin.c:1927 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:1910 +#: builtin.c:1934 msgid "strftime: received non-string first argument" msgstr "strftime: fik et første argument som ikke er en streng" -#: builtin.c:1917 +#: builtin.c:1941 msgid "strftime: received empty format string" msgstr "strftime: fik en tom formatstreng" -#: builtin.c:1983 +#: builtin.c:2007 msgid "mktime: received non-string argument" msgstr "mktime: fik et argument som ikke er en streng" -#: builtin.c:2000 +#: builtin.c:2024 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:2035 +#: builtin.c:2059 msgid "'system' function not allowed in sandbox mode" msgstr "'system'-funktion ikke tilladt i sandkasse-tilstand" -#: builtin.c:2040 +#: builtin.c:2064 msgid "system: received non-string argument" msgstr "system: fik et argument som ikke er en streng" -#: builtin.c:2160 +#: builtin.c:2184 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "reference til ikke-initieret felt '$%d'" -#: builtin.c:2247 +#: builtin.c:2271 msgid "tolower: received non-string argument" msgstr "tolower: fik et argument som ikke er en streng" -#: builtin.c:2281 +#: builtin.c:2305 msgid "toupper: received non-string argument" msgstr "toupper: fik et argument som ikke er en streng" -#: builtin.c:2317 mpfr.c:672 +#: builtin.c:2341 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2: fik et ikke-numerisk første argument" -#: builtin.c:2319 mpfr.c:674 +#: builtin.c:2343 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2: fik et ikke-numerisk andet argument" -#: builtin.c:2338 +#: builtin.c:2362 msgid "sin: received non-numeric argument" msgstr "sin: fik et ikke-numerisk argument" -#: builtin.c:2354 +#: builtin.c:2378 msgid "cos: received non-numeric argument" msgstr "cos: fik et ikke-numerisk argument" -#: builtin.c:2407 mpfr.c:1156 +#: builtin.c:2431 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand: fik et ikke-numerisk argument" -#: builtin.c:2438 +#: builtin.c:2462 msgid "match: third argument is not an array" msgstr "match: tredje argument er ikke et array" -#: builtin.c:2710 +#: builtin.c:2734 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub: 0 i tredje argument behandlet som 1" -#: builtin.c:3003 +#: builtin.c:3030 msgid "lshift: received non-numeric first argument" msgstr "lshift: fik et ikke-numerisk første argument" -#: builtin.c:3005 +#: builtin.c:3032 msgid "lshift: received non-numeric second argument" msgstr "lshift: fik et ikke-numerisk andet argument" -#: builtin.c:3011 +#: builtin.c:3038 #, 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:3013 +#: builtin.c:3040 #, fuzzy, c-format msgid "lshift(%f, %f): fractional values will be truncated" msgstr "lshift(%lf, %lf): kommatalsværdier vil blive trunkeret" -#: builtin.c:3015 +#: builtin.c:3042 #, 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:3040 +#: builtin.c:3067 msgid "rshift: received non-numeric first argument" msgstr "rshift: fik et ikke-numerisk første argument" -#: builtin.c:3042 +#: builtin.c:3069 msgid "rshift: received non-numeric second argument" msgstr "rshift: fik et ikke-numerisk andet argument" -#: builtin.c:3048 +#: builtin.c:3075 #, 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:3050 +#: builtin.c:3077 #, fuzzy, c-format msgid "rshift(%f, %f): fractional values will be truncated" msgstr "rshift(%lf, %lf): kommatalsværdier vil blive trunkeret" -#: builtin.c:3052 +#: builtin.c:3079 #, 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:3077 mpfr.c:968 +#: builtin.c:3104 mpfr.c:968 #, fuzzy msgid "and: called with less than two arguments" msgstr "sqrt: kaldt med negativt argument %g" -#: builtin.c:3082 +#: builtin.c:3109 #, fuzzy, c-format msgid "and: argument %d is non-numeric" msgstr "exp: argumentet %g er uden for det tilladte område" -#: builtin.c:3086 +#: builtin.c:3113 #, 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:3109 mpfr.c:1000 +#: builtin.c:3136 mpfr.c:1000 #, fuzzy msgid "or: called with less than two arguments" msgstr "sqrt: kaldt med negativt argument %g" -#: builtin.c:3114 +#: builtin.c:3141 #, fuzzy, c-format msgid "or: argument %d is non-numeric" msgstr "exp: argumentet %g er uden for det tilladte område" -#: builtin.c:3118 +#: builtin.c:3145 #, 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:3140 mpfr.c:1031 +#: builtin.c:3167 mpfr.c:1031 #, fuzzy msgid "xor: called with less than two arguments" msgstr "sqrt: kaldt med negativt argument %g" -#: builtin.c:3146 +#: builtin.c:3173 #, fuzzy, c-format msgid "xor: argument %d is non-numeric" msgstr "exp: argumentet %g er uden for det tilladte område" -#: builtin.c:3150 +#: builtin.c:3177 #, 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:3175 mpfr.c:787 +#: builtin.c:3202 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl: fik et ikke-numerisk argument" -#: builtin.c:3181 +#: builtin.c:3208 #, 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:3183 +#: builtin.c:3210 #, fuzzy, c-format msgid "compl(%f): fractional value will be truncated" msgstr "compl(%lf): kommatalsværdier vil blive trunkeret" -#: builtin.c:3352 +#: builtin.c:3379 #, c-format msgid "dcgettext: `%s' is not a valid locale category" msgstr "dcgettext: '%s' er ikke en gyldig lokalitetskategori" @@ -1056,8 +1066,8 @@ msgstr "" #: command.y:823 msgid "" -"commands [num] - starts a list of commands to be executed at a breakpoint" -"(watchpoint) hit." +"commands [num] - starts a list of commands to be executed at a " +"breakpoint(watchpoint) hit." msgstr "" #: command.y:825 @@ -1214,7 +1224,7 @@ msgstr "" msgid "watch var - set a watchpoint for a variable." msgstr "" -#: command.y:1011 debug.c:395 msg.c:128 +#: command.y:1011 debug.c:401 msg.c:135 #, c-format msgid "error: " msgstr "fejl: " @@ -1254,557 +1264,557 @@ msgstr "Ugyldigt sorteringstegn" msgid "undefined command: %s\n" msgstr "" -#: debug.c:246 +#: debug.c:252 msgid "set or show the number of lines to keep in history file." msgstr "" -#: debug.c:248 +#: debug.c:254 msgid "set or show the list command window size." msgstr "" -#: debug.c:250 +#: debug.c:256 msgid "set or show gawk output file." msgstr "" -#: debug.c:252 +#: debug.c:258 msgid "set or show debugger prompt." msgstr "" -#: debug.c:254 +#: debug.c:260 msgid "(un)set or show saving of command history (value=on|off)." msgstr "" -#: debug.c:256 +#: debug.c:262 msgid "(un)set or show saving of options (value=on|off)." msgstr "" -#: debug.c:258 +#: debug.c:264 msgid "(un)set or show instruction tracing (value=on|off)." msgstr "" -#: debug.c:339 +#: debug.c:345 msgid "program not running." msgstr "" -#: debug.c:442 debug.c:597 +#: debug.c:448 debug.c:606 #, fuzzy, c-format msgid "can't read source file `%s' (%s)" msgstr "kan ikke læse kildefilen '%s' (%s)" -#: debug.c:447 +#: debug.c:453 #, fuzzy, c-format msgid "source file `%s' is empty.\n" msgstr "kildefilen '%s' er tom" -#: debug.c:474 +#: debug.c:480 msgid "no current source file." msgstr "" -#: debug.c:499 +#: debug.c:505 #, fuzzy, c-format msgid "cannot find source file named `%s' (%s)" msgstr "kan ikke læse kildefilen '%s' (%s)" -#: debug.c:523 +#: debug.c:529 #, c-format msgid "WARNING: source file `%s' modified since program compilation.\n" msgstr "" -#: debug.c:542 +#: debug.c:551 #, c-format msgid "line number %d out of range; `%s' has %d lines" msgstr "" -#: debug.c:602 +#: debug.c:611 #, fuzzy, c-format msgid "unexpected eof while reading file `%s', line %d" msgstr "uventet nylinjetegn eller strengafslutning" -#: debug.c:611 +#: debug.c:620 #, c-format msgid "source file `%s' modified since start of program execution" msgstr "" -#: debug.c:723 +#: debug.c:732 #, fuzzy, c-format msgid "Current source file: %s\n" msgstr "allerede inkluderet kildefil '%s'" -#: debug.c:724 +#: debug.c:733 #, c-format msgid "Number of lines: %d\n" msgstr "" -#: debug.c:731 +#: debug.c:740 #, c-format msgid "Source file (lines): %s (%d)\n" msgstr "" -#: debug.c:745 +#: debug.c:754 msgid "" "Number Disp Enabled Location\n" "\n" msgstr "" -#: debug.c:756 +#: debug.c:765 #, c-format msgid "\tno of hits = %ld\n" msgstr "" -#: debug.c:758 +#: debug.c:767 #, c-format msgid "\tignore next %ld hit(s)\n" msgstr "" -#: debug.c:760 debug.c:900 +#: debug.c:769 debug.c:909 #, c-format msgid "\tstop condition: %s\n" msgstr "" -#: debug.c:762 debug.c:902 +#: debug.c:771 debug.c:911 msgid "\tcommands:\n" msgstr "" -#: debug.c:784 +#: debug.c:793 #, c-format msgid "Current frame: " msgstr "" -#: debug.c:787 +#: debug.c:796 #, c-format msgid "Called by frame: " msgstr "" -#: debug.c:791 +#: debug.c:800 #, c-format msgid "Caller of frame: " msgstr "" -#: debug.c:809 +#: debug.c:818 #, c-format msgid "None in main().\n" msgstr "" -#: debug.c:839 +#: debug.c:848 #, fuzzy msgid "No arguments.\n" msgstr "printf: ingen argumenter" -#: debug.c:840 +#: debug.c:849 msgid "No locals.\n" msgstr "" -#: debug.c:848 +#: debug.c:857 msgid "" "All defined variables:\n" "\n" msgstr "" -#: debug.c:858 +#: debug.c:867 msgid "" "All defined functions:\n" "\n" msgstr "" -#: debug.c:877 +#: debug.c:886 msgid "" "Auto-display variables:\n" "\n" msgstr "" -#: debug.c:880 +#: debug.c:889 msgid "" "Watch variables:\n" "\n" msgstr "" -#: debug.c:1020 +#: debug.c:1029 #, fuzzy, c-format msgid "no symbol `%s' in current context\n" msgstr "'exit' kan ikke kaldes i den aktuelle kontekst" -#: debug.c:1032 debug.c:1418 +#: debug.c:1041 debug.c:1427 #, fuzzy, c-format msgid "`%s' is not an array\n" msgstr "'%s' er ikke et gyldigt variabelnavn" -#: debug.c:1046 +#: debug.c:1055 #, fuzzy, c-format msgid "$%ld = uninitialized field\n" msgstr "reference til ikke-initieret felt '$%d'" -#: debug.c:1067 +#: debug.c:1076 #, fuzzy, c-format msgid "array `%s' is empty\n" msgstr "datafilen '%s' er tom" -#: debug.c:1110 debug.c:1162 +#: debug.c:1119 debug.c:1171 #, fuzzy, c-format msgid "[\"%s\"] not in array `%s'\n" msgstr "delete: indeks '%s' findes ikke i array '%s'" -#: debug.c:1166 +#: debug.c:1175 #, c-format msgid "`%s[\"%s\"]' is not an array\n" msgstr "" -#: debug.c:1227 debug.c:4949 +#: debug.c:1236 debug.c:4964 #, fuzzy, c-format msgid "`%s' is not a scalar variable" msgstr "'%s' er ikke et gyldigt variabelnavn" -#: debug.c:1249 debug.c:4979 +#: debug.c:1258 debug.c:4994 #, fuzzy, c-format msgid "attempt to use array `%s[\"%s\"]' in a scalar context" msgstr "forsøg på at bruge array '%s[\"%.*s\"]' i skalarsammenhæng" -#: debug.c:1271 debug.c:4990 +#: debug.c:1280 debug.c:5005 #, fuzzy, c-format msgid "attempt to use scalar `%s[\"%s\"]' as array" msgstr "forsøg på at bruge skalaren '%s[\"%.*s\"]' som array" -#: debug.c:1414 +#: debug.c:1423 #, fuzzy, c-format msgid "`%s' is a function" msgstr "'%s' er ugyldigt som funktionsnavn" -#: debug.c:1456 +#: debug.c:1465 #, c-format msgid "watchpoint %d is unconditional\n" msgstr "" -#: debug.c:1490 +#: debug.c:1499 #, c-format msgid "No display item numbered %ld" msgstr "" -#: debug.c:1493 +#: debug.c:1502 #, c-format msgid "No watch item numbered %ld" msgstr "" -#: debug.c:1519 +#: debug.c:1528 #, fuzzy, c-format msgid "%d: [\"%s\"] not in array `%s'\n" msgstr "delete: indeks '%s' findes ikke i array '%s'" -#: debug.c:1758 +#: debug.c:1767 #, fuzzy msgid "attempt to use scalar value as array" msgstr "forsøg på at bruge en skalar som array" -#: debug.c:1847 +#: debug.c:1856 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" msgstr "" -#: debug.c:1858 +#: debug.c:1867 #, c-format msgid "Display %d deleted because parameter is out of scope.\n" msgstr "" -#: debug.c:1891 +#: debug.c:1900 #, c-format msgid " in file `%s', line %d\n" msgstr "" -#: debug.c:1912 +#: debug.c:1921 #, c-format msgid " at `%s':%d" msgstr "" -#: debug.c:1928 debug.c:1991 +#: debug.c:1937 debug.c:2000 #, c-format msgid "#%ld\tin " msgstr "" -#: debug.c:1965 +#: debug.c:1974 #, c-format msgid "More stack frames follow ...\n" msgstr "" -#: debug.c:2008 +#: debug.c:2017 #, fuzzy msgid "invalid frame number" msgstr "Ugyldig intervalslutning" -#: debug.c:2180 +#: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" msgstr "" -#: debug.c:2187 +#: debug.c:2207 #, c-format msgid "Note: breakpoint %d (enabled), also set at %s:%d" msgstr "" -#: debug.c:2194 +#: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" msgstr "" -#: debug.c:2201 +#: debug.c:2221 #, c-format msgid "Note: breakpoint %d (disabled), also set at %s:%d" msgstr "" -#: debug.c:2218 +#: debug.c:2238 #, c-format msgid "Breakpoint %d set at file `%s', line %d\n" msgstr "" -#: debug.c:2320 +#: debug.c:2340 #, c-format msgid "Can't set breakpoint in file `%s'\n" msgstr "" -#: debug.c:2349 debug.c:2472 debug.c:3330 +#: debug.c:2369 debug.c:2492 debug.c:3350 #, fuzzy, c-format msgid "line number %d in file `%s' out of range" msgstr "exp: argumentet %g er uden for det tilladte område" -#: debug.c:2353 +#: debug.c:2373 #, c-format msgid "Can't find rule!!!\n" msgstr "" -#: debug.c:2355 +#: debug.c:2375 #, c-format msgid "Can't set breakpoint at `%s':%d\n" msgstr "" -#: debug.c:2367 +#: debug.c:2387 #, c-format msgid "Can't set breakpoint in function `%s'\n" msgstr "" -#: debug.c:2383 +#: debug.c:2403 #, c-format msgid "breakpoint %d set at file `%s', line %d is unconditional\n" msgstr "" -#: debug.c:2488 debug.c:2510 +#: debug.c:2508 debug.c:2530 #, c-format msgid "Deleted breakpoint %d" msgstr "" -#: debug.c:2494 +#: debug.c:2514 #, c-format msgid "No breakpoint(s) at entry to function `%s'\n" msgstr "" -#: debug.c:2521 +#: debug.c:2541 #, fuzzy, c-format msgid "No breakpoint at file `%s', line #%d\n" msgstr "fejl ved læsning af inddatafilen '%s': %s" -#: debug.c:2576 debug.c:2617 debug.c:2637 debug.c:2680 +#: debug.c:2596 debug.c:2637 debug.c:2657 debug.c:2700 msgid "invalid breakpoint number" msgstr "" -#: debug.c:2592 +#: debug.c:2612 msgid "Delete all breakpoints? (y or n) " msgstr "" -#: debug.c:2593 debug.c:2903 debug.c:2956 +#: debug.c:2613 debug.c:2923 debug.c:2976 msgid "y" msgstr "" -#: debug.c:2642 +#: debug.c:2662 #, c-format msgid "Will ignore next %ld crossing(s) of breakpoint %d.\n" msgstr "" -#: debug.c:2646 +#: debug.c:2666 #, c-format msgid "Will stop next time breakpoint %d is reached.\n" msgstr "" -#: debug.c:2763 +#: debug.c:2783 #, c-format msgid "Can only debug programs provided with the `-f' option.\n" msgstr "" -#: debug.c:2888 +#: debug.c:2908 #, c-format msgid "Failed to restart debugger" msgstr "" -#: debug.c:2902 +#: debug.c:2922 msgid "Program already running. Restart from beginning (y/n)? " msgstr "" -#: debug.c:2906 +#: debug.c:2926 #, c-format msgid "Program not restarted\n" msgstr "" -#: debug.c:2916 +#: debug.c:2936 #, c-format msgid "error: cannot restart, operation not allowed\n" msgstr "" -#: debug.c:2922 +#: debug.c:2942 #, c-format msgid "error (%s): cannot restart, ignoring rest of the commands\n" msgstr "" -#: debug.c:2930 +#: debug.c:2950 #, c-format msgid "Starting program: \n" msgstr "" -#: debug.c:2939 +#: debug.c:2959 #, c-format msgid "Program exited %s with exit value: %d\n" msgstr "" -#: debug.c:2955 +#: debug.c:2975 msgid "The program is running. Exit anyway (y/n)? " msgstr "" -#: debug.c:2990 +#: debug.c:3010 #, c-format msgid "Not stopped at any breakpoint; argument ignored.\n" msgstr "" -#: debug.c:2995 +#: debug.c:3015 #, c-format msgid "invalid breakpoint number %d." msgstr "" -#: debug.c:3000 +#: debug.c:3020 #, c-format msgid "Will ignore next %ld crossings of breakpoint %d.\n" msgstr "" -#: debug.c:3187 +#: debug.c:3207 #, c-format msgid "'finish' not meaningful in the outermost frame main()\n" msgstr "" -#: debug.c:3192 +#: debug.c:3212 #, c-format msgid "Run till return from " msgstr "" -#: debug.c:3235 +#: debug.c:3255 #, c-format msgid "'return' not meaningful in the outermost frame main()\n" msgstr "" -#: debug.c:3349 +#: debug.c:3369 #, c-format msgid "Can't find specified location in function `%s'\n" msgstr "" -#: debug.c:3357 +#: debug.c:3377 #, fuzzy, c-format msgid "invalid source line %d in file `%s'" msgstr "allerede inkluderet kildefil '%s'" -#: debug.c:3372 +#: debug.c:3392 #, c-format msgid "Can't find specified location %d in file `%s'\n" msgstr "" -#: debug.c:3404 +#: debug.c:3424 #, fuzzy, c-format msgid "element not in array\n" msgstr "delete: indeks '%s' findes ikke i array '%s'" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "untyped variable\n" msgstr "" -#: debug.c:3446 +#: debug.c:3466 #, c-format msgid "Stopping in %s ...\n" msgstr "" -#: debug.c:3523 +#: debug.c:3543 #, c-format msgid "'finish' not meaningful with non-local jump '%s'\n" msgstr "" -#: debug.c:3530 +#: debug.c:3550 #, c-format msgid "'until' not meaningful with non-local jump '%s'\n" msgstr "" -#: debug.c:4165 +#: debug.c:4185 msgid "\t------[Enter] to continue or q [Enter] to quit------" msgstr "" -#: debug.c:4166 +#: debug.c:4186 msgid "q" msgstr "" -#: debug.c:4986 +#: debug.c:5001 #, fuzzy, c-format msgid "[\"%s\"] not in array `%s'" msgstr "delete: indeks '%s' findes ikke i array '%s'" -#: debug.c:5192 +#: debug.c:5207 #, c-format msgid "sending output to stdout\n" msgstr "" -#: debug.c:5232 +#: debug.c:5247 msgid "invalid number" msgstr "" -#: debug.c:5366 +#: debug.c:5381 #, fuzzy, c-format msgid "`%s' not allowed in current context; statement ignored" msgstr "'exit' kan ikke kaldes i den aktuelle kontekst" -#: debug.c:5374 +#: debug.c:5389 #, fuzzy msgid "`return' not allowed in current context; statement ignored" msgstr "'exit' kan ikke kaldes i den aktuelle kontekst" -#: debug.c:5575 +#: debug.c:5590 #, fuzzy, c-format msgid "No symbol `%s' in current context" msgstr "forsøg på at bruge array '%s' i skalarsammenhæng" -#: 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:1192 +#: 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 msgid "unbalanced [" msgstr "" -#: dfa.c:1052 +#: dfa.c:1174 #, fuzzy msgid "invalid character class" msgstr "Ugyldigt tegnklassenavn" -#: dfa.c:1229 +#: dfa.c:1316 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "" -#: dfa.c:1281 +#: dfa.c:1366 msgid "unfinished \\ escape" msgstr "" -#: dfa.c:1428 regcomp.c:161 +#: dfa.c:1513 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "Ugyldigt indhold i \\{\\}" -#: dfa.c:1431 regcomp.c:176 +#: dfa.c:1516 regcomp.c:176 msgid "Regular expression too big" msgstr "Regulært udtryk for stort" -#: dfa.c:1816 +#: dfa.c:1936 msgid "unbalanced (" msgstr "" -#: dfa.c:1943 +#: dfa.c:2062 msgid "no syntax specified" msgstr "" -#: dfa.c:1951 +#: dfa.c:2070 msgid "unbalanced )" msgstr "" @@ -1823,11 +1833,11 @@ msgstr "ukendt opkode %d" msgid "opcode %s not an operator or keyword" msgstr "opkode %s er ikke en operator eller et nøgleord" -#: eval.c:471 +#: eval.c:472 msgid "buffer overflow in genflags2str" msgstr "bufferoverløb i genflags2str" -#: eval.c:674 +#: eval.c:675 #, c-format msgid "" "\n" @@ -1838,71 +1848,71 @@ msgstr "" "\t# Funktionskaldsstak:\n" "\n" -#: eval.c:703 +#: eval.c:704 msgid "`IGNORECASE' is a gawk extension" msgstr "'IGNORECASE' er en gawk-udvidelse" -#: eval.c:735 +#: eval.c:736 msgid "`BINMODE' is a gawk extension" msgstr "'BINMODE' er en gawk-udvidelse" -#: eval.c:793 +#: eval.c:794 #, c-format msgid "BINMODE value `%s' is invalid, treated as 3" msgstr "BINMODE værdi '%s' er ugyldig, behandles som 3" -#: eval.c:884 +#: eval.c:885 #, c-format msgid "bad `%sFMT' specification `%s'" msgstr "forkert '%sFMT'-specifikation '%s'" -#: eval.c:968 +#: eval.c:969 msgid "turning off `--lint' due to assignment to `LINT'" msgstr "deaktiverer '--lint' på grund af en tildeling til 'LINT'" -#: eval.c:1146 +#: eval.c:1147 #, c-format msgid "reference to uninitialized argument `%s'" msgstr "reference til ikke-initieret argument '%s'" -#: eval.c:1147 +#: eval.c:1148 #, c-format msgid "reference to uninitialized variable `%s'" msgstr "reference til ikke-initieret variabel '%s'" -#: eval.c:1165 +#: eval.c:1166 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:1167 +#: eval.c:1168 msgid "attempt to field reference from null string" msgstr "forsøg på at referere til et felt fra tom streng" -#: eval.c:1175 +#: eval.c:1176 #, c-format msgid "attempt to access field %ld" msgstr "forsøg på at få adgang til felt %ld" -#: eval.c:1184 +#: eval.c:1185 #, c-format msgid "reference to uninitialized field `$%ld'" msgstr "reference til ikke-initieret felt '$%ld'" -#: eval.c:1271 +#: eval.c:1272 #, c-format msgid "function `%s' called with more arguments than declared" msgstr "funktionen '%s' kaldt med flere argumenter end deklareret" -#: eval.c:1466 +#: eval.c:1473 #, c-format msgid "unwind_stack: unexpected type `%s'" msgstr "unwind_stack: uventet type `%s'" -#: eval.c:1562 +#: eval.c:1569 msgid "division by zero attempted in `/='" msgstr "forsøgte at dividere med nul i '/='" -#: eval.c:1569 +#: eval.c:1576 #, c-format msgid "division by zero attempted in `%%='" msgstr "forsøgte at dividere med nul i '%%='" @@ -1916,7 +1926,7 @@ msgstr "udvidelser er ikke tilladt i sandkasse-tilstand" msgid "-l / @load are gawk extensions" msgstr "@include er en gawk-udvidelse" -#: ext.c:95 ext.c:177 +#: ext.c:95 msgid "load_ext: received NULL lib_name" msgstr "" @@ -1948,6 +1958,10 @@ msgstr "" msgid "`extension' is a gawk extension" msgstr "'extension' er en gawk-udvidelse" +#: ext.c:177 +msgid "extension: received NULL lib_name" +msgstr "" + #: ext.c:180 #, fuzzy, c-format msgid "extension: cannot open library `%s' (%s)" @@ -1972,37 +1986,37 @@ msgstr "" msgid "make_builtin: missing function name" msgstr "extension: mangler funktionsnavn" -#: ext.c:238 +#: ext.c:236 #, fuzzy, c-format msgid "make_builtin: can't redefine function `%s'" msgstr "extension: kan ikke omdefinere funktion '%s'" -#: ext.c:242 +#: ext.c:240 #, fuzzy, c-format msgid "make_builtin: function `%s' already defined" msgstr "extension: funktionen '%s' er allerede defineret" -#: ext.c:246 +#: ext.c:244 #, fuzzy, c-format msgid "make_builtin: function name `%s' previously defined" msgstr "extension: funktionsnavnet '%s' er defineret tidligere" -#: ext.c:248 +#: ext.c:246 #, 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:251 ext.c:304 +#: ext.c:249 ext.c:304 #, c-format msgid "make_builtin: negative argument count for function `%s'" msgstr "make_builtin: negativt argumentantal for funktion '%s'" -#: ext.c:278 +#: ext.c:276 #, fuzzy msgid "extension: missing function name" msgstr "extension: mangler funktionsnavn" -#: ext.c:283 +#: ext.c:279 ext.c:283 #, fuzzy, c-format msgid "extension: illegal character `%c' in function name `%s'" msgstr "extension: ugyldigt tegn '%c' i funktionsnavn '%s'" @@ -2027,155 +2041,160 @@ msgstr "funktionsnavnet '%s' er allerede defineret" 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:374 +#: ext.c:375 #, 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:377 +#: ext.c:378 #, c-format msgid "function `%s': missing argument #%d" msgstr "funktion '%s': mangler argument nummer %d" -#: ext.c:394 +#: ext.c:395 #, 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:398 +#: ext.c:399 #, 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:412 +#: ext.c:413 msgid "dynamic loading of library not supported" msgstr "" -#: extension/filefuncs.c:97 +#: extension/filefuncs.c:159 #, fuzzy msgid "chdir: called with incorrect number of arguments, expecting 1" msgstr "sqrt: kaldt med negativt argument %g" -#: extension/filefuncs.c:343 +#: extension/filefuncs.c:439 #, c-format msgid "stat: unable to read symbolic link `%s'" msgstr "" -#: extension/filefuncs.c:376 +#: extension/filefuncs.c:472 #, fuzzy msgid "stat: called with wrong number of arguments" msgstr "sqrt: kaldt med negativt argument %g" -#: extension/filefuncs.c:383 +#: extension/filefuncs.c:479 #, fuzzy msgid "stat: bad parameters" msgstr "%s: er parameter\n" -#: extension/filefuncs.c:437 +#: extension/filefuncs.c:533 #, fuzzy, c-format msgid "fts init: could not create variable %s" msgstr "indeks: andet argument er ikke en streng" -#: extension/filefuncs.c:460 +#: extension/filefuncs.c:554 +#, fuzzy +msgid "fts is not supported on this system" +msgstr "'%s' understøttes ikke i gamle versioner af awk" + +#: extension/filefuncs.c:573 msgid "fill_stat_element: could not create array" msgstr "" -#: extension/filefuncs.c:469 +#: extension/filefuncs.c:582 msgid "fill_stat_element: could not set element" msgstr "" -#: extension/filefuncs.c:484 +#: extension/filefuncs.c:597 #, fuzzy msgid "fill_path_element: could not set element" msgstr "indeks: andet argument er ikke en streng" -#: extension/filefuncs.c:500 +#: extension/filefuncs.c:613 msgid "fill_error_element: could not set element" msgstr "" -#: extension/filefuncs.c:547 extension/filefuncs.c:594 +#: extension/filefuncs.c:660 extension/filefuncs.c:707 msgid "fts-process: could not create array" msgstr "" -#: extension/filefuncs.c:557 extension/filefuncs.c:604 -#: extension/filefuncs.c:622 +#: extension/filefuncs.c:670 extension/filefuncs.c:717 +#: extension/filefuncs.c:735 #, fuzzy msgid "fts-process: could not set element" msgstr "indeks: andet argument er ikke en streng" -#: extension/filefuncs.c:671 +#: extension/filefuncs.c:784 #, fuzzy msgid "fts: called with incorrect number of arguments, expecting 3" msgstr "sqrt: kaldt med negativt argument %g" -#: extension/filefuncs.c:674 +#: extension/filefuncs.c:787 #, fuzzy msgid "fts: bad first parameter" msgstr "%s: er parameter\n" -#: extension/filefuncs.c:680 +#: extension/filefuncs.c:793 #, fuzzy msgid "fts: bad second parameter" msgstr "%s: er parameter\n" -#: extension/filefuncs.c:686 +#: extension/filefuncs.c:799 #, fuzzy msgid "fts: bad third parameter" msgstr "%s: er parameter\n" -#: extension/filefuncs.c:693 +#: extension/filefuncs.c:806 #, fuzzy msgid "fts: could not flatten array\n" msgstr "'%s' er ikke et gyldigt variabelnavn" -#: extension/filefuncs.c:711 +#: extension/filefuncs.c:824 msgid "fts: ignoring sneaky FTS_NOSTAT flag. nyah, nyah, nyah." msgstr "" -#: extension/filefuncs.c:728 +#: extension/filefuncs.c:841 msgid "fts: clear_array() failed\n" msgstr "" -#: extension/fnmatch.c:98 +#: extension/fnmatch.c:112 #, fuzzy msgid "fnmatch: called with less than three arguments" msgstr "sqrt: kaldt med negativt argument %g" -#: extension/fnmatch.c:101 +#: extension/fnmatch.c:115 #, fuzzy msgid "fnmatch: called with more than three arguments" msgstr "sqrt: kaldt med negativt argument %g" -#: extension/fnmatch.c:104 +#: extension/fnmatch.c:118 #, fuzzy msgid "fnmatch: could not get first argument" msgstr "strftime: fik et første argument som ikke er en streng" -#: extension/fnmatch.c:109 +#: extension/fnmatch.c:123 #, fuzzy msgid "fnmatch: could not get second argument" msgstr "indeks: andet argument er ikke en streng" -#: extension/fnmatch.c:114 +#: extension/fnmatch.c:128 msgid "fnmatch: could not get third argument" msgstr "" -#: extension/fnmatch.c:127 +#: extension/fnmatch.c:141 msgid "fnmatch is not implemented on this system\n" msgstr "" -#: extension/fnmatch.c:159 +#: extension/fnmatch.c:173 msgid "fnmatch init: could not add FNM_NOMATCH variable" msgstr "" -#: extension/fnmatch.c:169 +#: extension/fnmatch.c:183 #, c-format msgid "fnmatch init: could not set array element %s" msgstr "" -#: extension/fnmatch.c:179 +#: extension/fnmatch.c:193 msgid "fnmatch init: could not install FNM array" msgstr "" @@ -2203,88 +2222,88 @@ msgstr "sqrt: kaldt med negativt argument %g" msgid "wait: called with too many arguments" msgstr "sqrt: kaldt med negativt argument %g" -#: extension/inplace.c:110 +#: extension/inplace.c:130 msgid "inplace_begin: in-place editing already active" msgstr "" -#: extension/inplace.c:113 extension/inplace.c:187 +#: extension/inplace.c:133 extension/inplace.c:207 #, c-format msgid "inplace_begin: expects 2 arguments but called with %d" msgstr "" -#: extension/inplace.c:116 +#: extension/inplace.c:136 msgid "inplace_begin: cannot retrieve 1st argument as a string filename" msgstr "" -#: extension/inplace.c:124 +#: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" msgstr "" -#: extension/inplace.c:131 +#: extension/inplace.c:151 #, fuzzy, c-format msgid "inplace_begin: Cannot stat `%s' (%s)" msgstr "atalt: extension: kan ikke åbne '%s' (%s)\n" -#: extension/inplace.c:138 +#: extension/inplace.c:158 #, fuzzy, c-format msgid "inplace_begin: `%s' is not a regular file" msgstr "'%s' er ikke et gyldigt variabelnavn" -#: extension/inplace.c:149 +#: extension/inplace.c:169 #, c-format msgid "inplace_begin: mkstemp(`%s') failed (%s)" msgstr "" -#: extension/inplace.c:158 +#: extension/inplace.c:178 #, fuzzy, c-format msgid "inplace_begin: chmod failed (%s)" msgstr "%s: lukning mislykkedes (%s)" -#: extension/inplace.c:165 +#: extension/inplace.c:185 #, c-format msgid "inplace_begin: dup(stdout) failed (%s)" msgstr "" -#: extension/inplace.c:168 +#: extension/inplace.c:188 #, c-format msgid "inplace_begin: dup2(%d, stdout) failed (%s)" msgstr "" -#: extension/inplace.c:171 +#: extension/inplace.c:191 #, fuzzy, c-format msgid "inplace_begin: close(%d) failed (%s)" msgstr "%s: lukning mislykkedes (%s)" -#: extension/inplace.c:190 +#: extension/inplace.c:210 msgid "inplace_end: cannot retrieve 1st argument as a string filename" msgstr "" -#: extension/inplace.c:197 +#: extension/inplace.c:217 msgid "inplace_end: in-place editing not active" msgstr "" -#: extension/inplace.c:203 +#: extension/inplace.c:223 #, c-format msgid "inplace_end: dup2(%d, stdout) failed (%s)" msgstr "" -#: extension/inplace.c:206 +#: extension/inplace.c:226 #, fuzzy, c-format msgid "inplace_end: close(%d) failed (%s)" msgstr "%s: lukning mislykkedes (%s)" -#: extension/inplace.c:210 +#: extension/inplace.c:230 #, c-format msgid "inplace_end: fsetpos(stdout) failed (%s)" msgstr "" -#: extension/inplace.c:223 +#: extension/inplace.c:243 #, fuzzy, c-format msgid "inplace_end: link(`%s', `%s') failed (%s)" msgstr "datakanalsrensning af '%s' mislykkedes (%s)." -#: extension/inplace.c:229 +#: extension/inplace.c:253 #, fuzzy, c-format msgid "inplace_end: rename(`%s', `%s') failed (%s)" msgstr "lukning af fd %d ('%s') mislykkedes (%s)" @@ -2319,177 +2338,177 @@ msgstr "sqrt: kaldt med negativt argument %g" msgid "chr: called with inappropriate argument(s)" msgstr "sqrt: kaldt med negativt argument %g" -#: extension/readdir.c:203 +#: extension/readdir.c:281 #, c-format msgid "dir_take_control_of: opendir/fdopendir failed: %s" msgstr "" -#: extension/readfile.c:84 +#: extension/readfile.c:113 #, fuzzy msgid "readfile: called with too many arguments" msgstr "sqrt: kaldt med negativt argument %g" -#: extension/readfile.c:118 +#: extension/readfile.c:137 #, fuzzy msgid "readfile: called with no arguments" msgstr "sqrt: kaldt med negativt argument %g" -#: extension/rwarray.c:120 +#: extension/rwarray.c:124 #, fuzzy msgid "writea: called with too many arguments" msgstr "sqrt: kaldt med negativt argument %g" -#: extension/rwarray.c:127 +#: extension/rwarray.c:131 #, 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:133 +#: extension/rwarray.c:137 #, 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:180 +#: extension/rwarray.c:184 #, c-format msgid "write_array: could not flatten array\n" msgstr "" -#: extension/rwarray.c:194 +#: extension/rwarray.c:198 #, c-format msgid "write_array: could not release flattened array\n" msgstr "" -#: extension/rwarray.c:276 +#: extension/rwarray.c:280 #, fuzzy msgid "reada: called with too many arguments" msgstr "sqrt: kaldt med negativt argument %g" -#: extension/rwarray.c:283 +#: extension/rwarray.c:287 #, 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:289 +#: extension/rwarray.c:293 #, fuzzy, c-format msgid "do_reada: argument 1 is not an array\n" msgstr "match: tredje argument er ikke et array" -#: extension/rwarray.c:333 +#: extension/rwarray.c:337 #, c-format msgid "do_reada: clear_array failed\n" msgstr "" -#: extension/rwarray.c:370 +#: extension/rwarray.c:374 #, c-format msgid "read_array: set_array_element failed\n" msgstr "" -#: extension/time.c:81 +#: extension/time.c:113 #, fuzzy msgid "gettimeofday: ignoring arguments" msgstr "mktime: fik et argument som ikke er en streng" -#: extension/time.c:112 +#: extension/time.c:144 msgid "gettimeofday: not supported on this platform" msgstr "" -#: extension/time.c:133 +#: extension/time.c:165 #, fuzzy msgid "sleep: called with too many arguments" msgstr "sqrt: kaldt med negativt argument %g" -#: extension/time.c:136 +#: extension/time.c:168 #, fuzzy msgid "sleep: missing required numeric argument" msgstr "exp: fik et ikke-numerisk argument" -#: extension/time.c:142 +#: extension/time.c:174 #, fuzzy msgid "sleep: argument is negative" msgstr "exp: argumentet %g er uden for det tilladte område" -#: extension/time.c:176 +#: extension/time.c:208 msgid "sleep: not supported on this platform" msgstr "" -#: field.c:339 +#: field.c:345 msgid "NF set to negative value" msgstr "NF sat til en negativ værdi" -#: field.c:964 field.c:971 field.c:975 +#: field.c:971 field.c:978 field.c:982 msgid "split: fourth argument is a gawk extension" msgstr "split: fjerde argument er en gawk-udvidelse" -#: field.c:968 +#: field.c:975 msgid "split: fourth argument is not an array" msgstr "split: fjerde argument er ikke et array" -#: field.c:982 +#: field.c:989 msgid "split: second argument is not an array" msgstr "split: andet argument er ikke et array" -#: field.c:986 +#: field.c:993 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:991 +#: field.c:998 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:994 +#: field.c:1001 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:1023 +#: field.c:1032 msgid "split: null string for third arg is a gawk extension" msgstr "split: tom streng som tredje argument er en gawk-udvidelse" -#: field.c:1063 +#: field.c:1072 msgid "patsplit: fourth argument is not an array" msgstr "patsplit: fjerde argument er ikke et array" -#: field.c:1068 +#: field.c:1077 msgid "patsplit: second argument is not an array" msgstr "patsplit: andet argument er ikke et array" -#: field.c:1074 +#: field.c:1083 msgid "patsplit: third argument must be non-null" msgstr "patmatch: tredje argument er ikke et array" -#: field.c:1078 +#: field.c:1087 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:1083 +#: field.c:1092 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:1086 +#: field.c:1095 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:1124 +#: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" msgstr "'FIELDWIDTHS' er en gawk-udvidelse" -#: field.c:1188 +#: field.c:1197 #, c-format msgid "invalid FIELDWIDTHS value, near `%s'" msgstr "ugyldig FIELDWIDTHS værdi, nær '%s" -#: field.c:1261 +#: field.c:1270 msgid "null string for `FS' is a gawk extension" msgstr "tom streng som 'FS' er en gawk-udvidelse" -#: field.c:1265 +#: field.c:1274 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:1384 +#: field.c:1393 msgid "`FPAT' is a gawk extension" msgstr "'FPAT' er en gawk-udvidelse" @@ -2505,590 +2524,590 @@ msgstr "" msgid "node_to_awk_value: received null val" msgstr "" -#: gawkapi.c:808 +#: gawkapi.c:807 #, fuzzy msgid "remove_element: received null array" msgstr "length: fik et array-argument" -#: gawkapi.c:811 +#: gawkapi.c:810 msgid "remove_element: received null subscript" msgstr "" -#: gawkapi.c:943 +#: gawkapi.c:947 #, c-format msgid "api_flatten_array: could not convert index %d\n" msgstr "" -#: gawkapi.c:948 +#: gawkapi.c:952 #, c-format msgid "api_flatten_array: could not convert value %d\n" msgstr "" -#: getopt.c:603 getopt.c:632 +#: getopt.c:604 getopt.c:633 #, fuzzy, c-format msgid "%s: option '%s' is ambiguous; possibilities:" msgstr "%s: flaget '%s' er flertydigt\n" -#: getopt.c:678 getopt.c:682 +#: getopt.c:679 getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: flaget '--%s' tillader ikke noget argument\n" -#: getopt.c:691 getopt.c:696 +#: getopt.c:692 getopt.c:697 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: flaget '%c%s' tillader ikke noget argument\n" -#: getopt.c:739 getopt.c:758 +#: getopt.c:740 getopt.c:759 #, c-format msgid "%s: option '--%s' requires an argument\n" msgstr "%s: flaget '--%s' kræver et argument\n" -#: getopt.c:796 getopt.c:799 +#: getopt.c:797 getopt.c:800 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: ukendt flag '--%s'\n" -#: getopt.c:807 getopt.c:810 +#: getopt.c:808 getopt.c:811 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: ukendt flag '%c%s'\n" -#: getopt.c:859 getopt.c:862 +#: getopt.c:860 getopt.c:863 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: ugyldigt flag - '%c'\n" -#: getopt.c:915 getopt.c:932 getopt.c:1142 getopt.c:1160 +#: getopt.c:916 getopt.c:933 getopt.c:1143 getopt.c:1161 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: flaget kræver et argument - '%c'\n" -#: getopt.c:988 getopt.c:1004 +#: getopt.c:989 getopt.c:1005 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: flaget '-W %s' er flertydigt\n" -#: getopt.c:1028 getopt.c:1046 +#: getopt.c:1029 getopt.c:1047 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: flaget '-W %s' tillader ikke noget argument\n" -#: getopt.c:1067 getopt.c:1085 +#: getopt.c:1068 getopt.c:1086 #, c-format msgid "%s: option '-W %s' requires an argument\n" msgstr "%s: flaget '-W %s' kræver et argument\n" -#: io.c:347 +#: io.c:392 #, c-format msgid "command line argument `%s' is a directory: skipped" msgstr "kommandolinjeargument '%s' er et katalog, oversprunget" -#: io.c:350 io.c:463 +#: io.c:395 io.c:513 #, c-format msgid "cannot open file `%s' for reading (%s)" msgstr "kan ikke åbne filen '%s' for læsning (%s)" -#: io.c:590 +#: io.c:640 #, c-format msgid "close of fd %d (`%s') failed (%s)" msgstr "lukning af fd %d ('%s') mislykkedes (%s)" -#: io.c:666 +#: io.c:716 msgid "redirection not allowed in sandbox mode" msgstr "omdirigering ikke tilladt i sandkasse-tilstand" -#: io.c:700 +#: io.c:750 #, c-format msgid "expression in `%s' redirection only has numeric value" msgstr "udtrykket i '%s'-omdirigering har kun numerisk værdi" -#: io.c:706 +#: io.c:756 #, 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:711 +#: io.c:761 #, 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:754 +#: io.c:809 #, c-format msgid "unnecessary mixing of `>' and `>>' for file `%.*s'" msgstr "unødig blanding af '>' og '>>' for filen '%.*s'" -#: io.c:808 +#: io.c:863 #, c-format msgid "can't open pipe `%s' for output (%s)" msgstr "kan ikke åbne datakanalen '%s' for udskrivning (%s)" -#: io.c:818 +#: io.c:873 #, c-format msgid "can't open pipe `%s' for input (%s)" msgstr "kan ikke åbne datakanalen '%s' for indtastning (%s)" -#: io.c:849 +#: io.c:904 #, 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:928 +#: io.c:986 #, c-format msgid "can't redirect from `%s' (%s)" msgstr "kan ikke omdirigere fra '%s' (%s)" -#: io.c:931 +#: io.c:989 #, c-format msgid "can't redirect to `%s' (%s)" msgstr "kan ikke omdirigere til '%s' (%s)" -#: io.c:982 +#: io.c:1040 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:998 +#: io.c:1056 #, c-format msgid "close of `%s' failed (%s)." msgstr "lukning af '%s' mislykkedes (%s)." -#: io.c:1006 +#: io.c:1064 msgid "too many pipes or input files open" msgstr "for mange datakanaler eller inddatafiler åbne" -#: io.c:1028 +#: io.c:1086 msgid "close: second argument must be `to' or `from'" msgstr "close: andet argument skal være 'to' eller 'from'" -#: io.c:1045 +#: io.c:1103 #, 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:1050 +#: io.c:1108 msgid "close of redirection that was never opened" msgstr "lukning af omdirigering som aldrig blev åbnet" -#: io.c:1147 +#: io.c:1205 #, 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:1164 +#: io.c:1222 #, c-format msgid "failure status (%d) on pipe close of `%s' (%s)" msgstr "fejlstatus (%d) fra lukning af datakanalen '%s' (%s)" -#: io.c:1167 +#: io.c:1225 #, c-format msgid "failure status (%d) on file close of `%s' (%s)" msgstr "fejlstatus (%d) fra fillukning af '%s' (%s)" -#: io.c:1187 +#: io.c:1245 #, c-format msgid "no explicit close of socket `%s' provided" msgstr "ingen eksplicit lukning af soklen '%s' angivet" -#: io.c:1190 +#: io.c:1248 #, c-format msgid "no explicit close of co-process `%s' provided" msgstr "ingen eksplicit lukning af ko-processen '%s' angivet" -#: io.c:1193 +#: io.c:1251 #, c-format msgid "no explicit close of pipe `%s' provided" msgstr "ingen eksplicit lukning af datakanalen '%s' angivet" -#: io.c:1196 +#: io.c:1254 #, c-format msgid "no explicit close of file `%s' provided" msgstr "ingen eksplicit lukning af filen '%s' angivet" -#: io.c:1224 io.c:1279 main.c:842 main.c:879 +#: io.c:1284 io.c:1342 main.c:864 main.c:906 #, c-format msgid "error writing standard output (%s)" msgstr "fejl ved skrivning til standard ud (%s)" -#: io.c:1228 io.c:1284 +#: io.c:1289 io.c:1348 main.c:866 #, c-format msgid "error writing standard error (%s)" msgstr "fejl ved skrivning til standard fejl (%s)" -#: io.c:1236 +#: io.c:1297 #, c-format msgid "pipe flush of `%s' failed (%s)." msgstr "datakanalsrensning af '%s' mislykkedes (%s)." -#: io.c:1239 +#: io.c:1300 #, c-format msgid "co-process flush of pipe to `%s' failed (%s)." msgstr "ko-procesrensning af datakanalen til '%s' mislykkedes (%s)." -#: io.c:1242 +#: io.c:1303 #, c-format msgid "file flush of `%s' failed (%s)." msgstr "filrensning af '%s' mislykkedes (%s)." -#: io.c:1356 +#: io.c:1420 #, c-format msgid "local port %s invalid in `/inet'" msgstr "lokal port %s ugyldig i '/inet'" -#: io.c:1374 +#: io.c:1438 #, c-format msgid "remote host and port information (%s, %s) invalid" msgstr "fjernvært og portinformation (%s, %s) ugyldige" -#: io.c:1526 +#: 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:1540 +#: io.c:1604 #, c-format msgid "special file name `%s' is incomplete" msgstr "special-filnavn '%s' er ufuldstændigt" -#: io.c:1557 +#: io.c:1621 msgid "must supply a remote hostname to `/inet'" msgstr "fjernmaskinenavn til '/inet' skal angives" -#: io.c:1575 +#: io.c:1639 msgid "must supply a remote port to `/inet'" msgstr "fjernport til '/inet' skal angives" -#: io.c:1621 +#: io.c:1685 msgid "TCP/IP communications are not supported" msgstr "TCP/IP-kommunikation understøttes ikke" -#: io.c:1796 +#: io.c:1867 #, c-format msgid "could not open `%s', mode `%s'" msgstr "kunne ikke åbne '%s', tilstand '%s'" -#: io.c:1846 +#: io.c:1917 #, c-format msgid "close of master pty failed (%s)" msgstr "lukning af master-pty mislykkedes (%s)" -#: io.c:1848 io.c:2024 io.c:2194 +#: io.c:1919 io.c:2105 io.c:2305 #, c-format msgid "close of stdout in child failed (%s)" msgstr "lukning af standard ud i underproces mislykkedes (%s)" -#: io.c:1851 +#: io.c:1922 #, 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:1853 io.c:2029 +#: io.c:1924 io.c:2110 #, c-format msgid "close of stdin in child failed (%s)" msgstr "lukning af standard ind i underproces mislykkedes (%s)" -#: io.c:1856 +#: io.c:1927 #, 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:1858 io.c:1879 +#: io.c:1929 io.c:1951 #, c-format msgid "close of slave pty failed (%s)" msgstr "lukning af slave-pty mislykkedes (%s)" -#: io.c:1965 io.c:2027 io.c:2171 io.c:2197 +#: io.c:2040 io.c:2108 io.c:2276 io.c:2308 #, 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:1972 io.c:2032 +#: io.c:2047 io.c:2113 #, 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:1992 io.c:2187 +#: io.c:2073 io.c:2298 msgid "restoring stdout in parent process failed\n" msgstr "genskabelse af standard ud i forælderprocessen mislykkedes\n" -#: io.c:2000 +#: io.c:2081 msgid "restoring stdin in parent process failed\n" msgstr "genskabelse af standard ind i forælderprocessen mislykkedes\n" -#: io.c:2035 io.c:2199 io.c:2213 +#: io.c:2116 io.c:2310 io.c:2324 #, c-format msgid "close of pipe failed (%s)" msgstr "lukning af datakanalen mislykkedes (%s)" -#: io.c:2089 +#: io.c:2174 msgid "`|&' not supported" msgstr "'|&' understøttes ikke" -#: io.c:2156 +#: io.c:2261 #, c-format msgid "cannot open pipe `%s' (%s)" msgstr "kan ikke åbne datakanalen '%s' (%s)" -#: io.c:2207 +#: io.c:2318 #, c-format msgid "cannot create child process for `%s' (fork: %s)" msgstr "kan ikke oprette barneproces for '%s' (fork: %s)" -#: io.c:2667 +#: io.c:2790 msgid "register_input_parser: received NULL pointer" msgstr "" -#: io.c:2695 +#: io.c:2818 #, c-format msgid "input parser `%s' conflicts with previously installed input parser `%s'" msgstr "" -#: io.c:2702 +#: io.c:2825 #, c-format msgid "input parser `%s' failed to open `%s'" msgstr "" -#: io.c:2722 +#: io.c:2845 msgid "register_output_wrapper: received NULL pointer" msgstr "" -#: io.c:2750 +#: io.c:2873 #, c-format msgid "" "output wrapper `%s' conflicts with previously installed output wrapper `%s'" msgstr "" -#: io.c:2757 +#: io.c:2880 #, c-format msgid "output wrapper `%s' failed to open `%s'" msgstr "" -#: io.c:2778 +#: io.c:2901 msgid "register_output_processor: received NULL pointer" msgstr "" -#: io.c:2807 +#: io.c:2930 #, c-format msgid "" "two-way processor `%s' conflicts with previously installed two-way processor " "`%s'" msgstr "" -#: io.c:2816 +#: io.c:2939 #, c-format msgid "two way processor `%s' failed to open `%s'" msgstr "" -#: io.c:2923 +#: io.c:3064 #, c-format msgid "data file `%s' is empty" msgstr "datafilen '%s' er tom" -#: io.c:2965 io.c:2973 +#: io.c:3106 io.c:3114 msgid "could not allocate more input memory" msgstr "kunne ikke allokere mere hukommelse til inddata" -#: io.c:3539 +#: io.c:3682 msgid "multicharacter value of `RS' is a gawk extension" msgstr "'RS' som flertegnsværdi er en gawk-udvidelse" -#: io.c:3628 +#: io.c:3771 msgid "IPv6 communication is not supported" msgstr "IPv6-kommunikation understøttes ikke" -#: main.c:388 +#: main.c:405 msgid "empty argument to `-e/--source' ignored" msgstr "tomt argument til '-e/--source' ignoreret" -#: main.c:478 +#: main.c:495 #, c-format msgid "%s: option `-W %s' unrecognized, ignored\n" msgstr "%s: flaget '-W %s' ukendt, ignoreret\n" -#: main.c:524 +#: main.c:541 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: flaget kræver et argument -- %c\n" -#: main.c:545 +#: main.c:562 msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'" msgstr "miljøvariablen 'POSIXLY_CORRECT' sat: aktiverer '--posix'" -#: main.c:551 +#: main.c:568 msgid "`--posix' overrides `--traditional'" msgstr "'--posix' tilsidesætter '--traditional'" -#: main.c:562 +#: main.c:579 msgid "`--posix'/`--traditional' overrides `--non-decimal-data'" msgstr "'--posix'/'--traditional' tilsidesætter '--non-decimal-data'" -#: main.c:566 +#: main.c:583 #, 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:571 +#: main.c:588 #, fuzzy msgid "`--posix' overrides `--characters-as-bytes'" msgstr "'--posix' tilsidesætter '--binary'" -#: main.c:630 +#: main.c:647 #, 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:633 +#: main.c:650 #, 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:635 +#: main.c:652 #, 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:693 +#: main.c:710 msgid "no program text at all!" msgstr "ingen programtekst overhovedet!" -#: main.c:779 +#: main.c:799 #, 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:781 +#: main.c:801 #, 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:786 +#: main.c:806 msgid "POSIX options:\t\tGNU long options: (standard)\n" msgstr "POSIX-flag:\t\tlange GNU-flag: (standard)\n" -#: main.c:787 +#: main.c:807 msgid "\t-f progfile\t\t--file=progfile\n" msgstr "\t-f progfil\t\t--file=progfil\n" -#: main.c:788 +#: main.c:808 msgid "\t-F fs\t\t\t--field-separator=fs\n" msgstr "\t-F fs\t\t\t--field-separator=fs\n" -#: main.c:789 +#: main.c:809 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:790 +#: main.c:810 msgid "Short options:\t\tGNU long options: (extensions)\n" msgstr "POSIX-flag:\t\tlange GNU-flag: (udvidelser)\n" -#: main.c:791 +#: main.c:811 msgid "\t-b\t\t\t--characters-as-bytes\n" msgstr "\t-b\t\t\t--characters-as-bytes\n" -#: main.c:792 +#: main.c:812 msgid "\t-c\t\t\t--traditional\n" msgstr "\t-c\t\t\t--traditional\n" -#: main.c:793 +#: main.c:813 msgid "\t-C\t\t\t--copyright\n" msgstr "\t-C\t\t\t--copyright\n" -#: main.c:794 +#: main.c:814 msgid "\t-d[file]\t\t--dump-variables[=file]\n" msgstr "\t-d[fil]\t\t--dump-variables[=fil]\n" -#: main.c:795 +#: main.c:815 #, fuzzy msgid "\t-D[file]\t\t--debug[=file]\n" msgstr "\t-p[fil]\t\t--profile[=fil]\n" -#: main.c:796 +#: main.c:816 msgid "\t-e 'program-text'\t--source='program-text'\n" msgstr "\t-e 'programtekst'\t--source='programtekst'\n" -#: main.c:797 +#: main.c:817 msgid "\t-E file\t\t\t--exec=file\n" msgstr "\t-E fil\t\t\t--exec=fil\n" -#: main.c:798 +#: main.c:818 msgid "\t-g\t\t\t--gen-pot\n" msgstr "\t-g\t\t\t--gen-pot\n" -#: main.c:799 +#: main.c:819 msgid "\t-h\t\t\t--help\n" msgstr "\t-h\t\t\t--help\n" -#: main.c:800 +#: main.c:820 msgid "\t-i includefile\t\t--include=includefile\n" msgstr "" -#: main.c:801 +#: main.c:821 msgid "\t-l library\t\t--load=library\n" msgstr "" -#: main.c:802 +#: main.c:822 msgid "\t-L [fatal]\t\t--lint[=fatal]\n" msgstr "\t-L [fatal]\t\t--lint[=fatal]\n" -#: main.c:803 +#: 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:804 +#: main.c:824 #, fuzzy msgid "\t-M\t\t\t--bignum\n" msgstr "\t-g\t\t\t--gen-pot\n" -#: main.c:805 +#: main.c:825 msgid "\t-N\t\t\t--use-lc-numeric\n" msgstr "\t-N\t\t\t--use-lc-numeric\n" -#: main.c:806 +#: main.c:826 #, fuzzy msgid "\t-o[file]\t\t--pretty-print[=file]\n" msgstr "\t-p[fil]\t\t--profile[=fil]\n" -#: main.c:807 +#: main.c:827 msgid "\t-O\t\t\t--optimize\n" msgstr "\t-O\t\t\t--optimize\n" -#: main.c:808 +#: main.c:828 msgid "\t-p[file]\t\t--profile[=file]\n" msgstr "\t-p[fil]\t\t--profile[=fil]\n" -#: main.c:809 +#: main.c:829 msgid "\t-P\t\t\t--posix\n" msgstr "\t-P\t\t\t--posix\n" -#: main.c:810 +#: main.c:830 msgid "\t-r\t\t\t--re-interval\n" msgstr "\t-r\t\t\t--re-interval\n" -#: main.c:811 +#: main.c:831 msgid "\t-S\t\t\t--sandbox\n" msgstr "\t-S\t\t\t--sandbox\n" -#: main.c:812 +#: main.c:832 msgid "\t-t\t\t\t--lint-old\n" msgstr "\t-t\t\t\t--lint-old\n" -#: main.c:813 +#: main.c:833 msgid "\t-V\t\t\t--version\n" msgstr "\t-V\t\t\t--version\n" -#: main.c:815 +#: main.c:835 msgid "\t-W nostalgia\t\t--nostalgia\n" msgstr "\t-W nostalgia\t\t--nostalgia\n" -#: main.c:818 +#: main.c:838 msgid "\t-Y\t\t--parsedebug\n" msgstr "\t-Y\t\t--parsedebug\n" @@ -3097,7 +3116,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:827 +#: main.c:847 msgid "" "\n" "To report bugs, see node `Bugs' in `gawk.info', which is\n" @@ -3110,7 +3129,7 @@ msgstr "" "\n" "Rapportér kommentarer til oversættelsen til .\n" -#: main.c:831 +#: main.c:851 msgid "" "gawk is a pattern scanning and processing language.\n" "By default it reads standard input and writes standard output.\n" @@ -3120,7 +3139,7 @@ msgstr "" "Almindeligvis læser gawk fra standard ind og skriver til standard ud.\n" "\n" -#: main.c:835 +#: main.c:855 msgid "" "Examples:\n" "\tgawk '{ sum += $1 }; END { print sum }' file\n" @@ -3130,7 +3149,7 @@ msgstr "" "\tgawk '{ sum += $1 }; END { print sum }' fil\n" "\tgawk -F: '{ print $1 }' /etc/passwd\n" -#: main.c:855 +#: main.c:880 #, c-format msgid "" "Copyright (C) 1989, 1991-%d Free Software Foundation.\n" @@ -3150,7 +3169,7 @@ msgstr "" "enhver senere version.\n" "\n" -#: main.c:863 +#: main.c:888 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" @@ -3164,7 +3183,7 @@ msgstr "" "General Public License for yderligere information.\n" "\n" -#: main.c:869 +#: main.c:894 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" @@ -3172,16 +3191,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:904 +#: main.c:931 msgid "-Ft does not set FS to tab in POSIX awk" msgstr "-Ft sætter ikke FS til tab i POSIX-awk" -#: main.c:1181 +#: main.c:1208 #, c-format msgid "unknown value for field spec: %d\n" msgstr "ukendt værdi for felt-spec: %d\n" -#: main.c:1279 +#: main.c:1306 #, c-format msgid "" "%s: `%s' argument to `-v' not in `var=value' form\n" @@ -3190,48 +3209,48 @@ msgstr "" "%s: '%s' argument til '-v' ikke på formen 'var=værdi'\n" "\n" -#: main.c:1305 +#: main.c:1332 #, c-format msgid "`%s' is not a legal variable name" msgstr "'%s' er ikke et gyldigt variabelnavn" -#: main.c:1308 +#: main.c:1335 #, 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:1312 +#: main.c:1339 #, c-format msgid "cannot use gawk builtin `%s' as variable name" msgstr "kan ikke bruge gawk's indbyggede '%s' som variabelnavn" -#: main.c:1317 +#: main.c:1344 #, c-format msgid "cannot use function `%s' as variable name" msgstr "kan ikke bruge funktion '%s' som variabelnavn" -#: main.c:1370 +#: main.c:1397 msgid "floating point exception" msgstr "flydendetalsundtagelse" -#: main.c:1377 +#: main.c:1404 msgid "fatal error: internal error" msgstr "fatal fejl: intern fejl" -#: main.c:1392 +#: main.c:1419 msgid "fatal error: internal error: segfault" msgstr "fatal fejl: intern fejl: segmentfejl" -#: main.c:1404 +#: main.c:1431 msgid "fatal error: internal error: stack overflow" msgstr "fatal fejl: intern fejl: stakoverløb" -#: main.c:1463 +#: main.c:1490 #, c-format msgid "no pre-opened fd %d" msgstr "ingen fd %d åbnet i forvejen" -#: main.c:1470 +#: main.c:1497 #, c-format msgid "could not pre-open /dev/null for fd %d" msgstr "kunne ikke i forvejen åbne /dev/null for fd %d" @@ -3290,7 +3309,7 @@ msgstr "or(%lf, %lf): kommatalsv msgid "%s: argument #%d negative value %Zd will give strange results" msgstr "compl(%lf): negative værdier vil give mærkelige resultater" -#: msg.c:61 +#: msg.c:68 #, c-format msgid "cmd. line:" msgstr "kommandolinje:" @@ -3344,16 +3363,16 @@ msgstr "%s %s '%s': kunne ikke f msgid "%s %s `%s': could not set close-on-exec: (fcntl F_SETFD: %s)" msgstr "%s %s '%s': kunne ikke sætte luk-ved-exec (fcntl F_SETFD: %s)" -#: profile.c:70 +#: profile.c:71 #, c-format msgid "could not open `%s' for writing: %s" msgstr "kunne ikke åbne '%s' for skrivning: %s" -#: profile.c:72 +#: profile.c:73 msgid "sending profile to standard error" msgstr "sender profilen til standard fejl" -#: profile.c:188 +#: profile.c:193 #, c-format msgid "" "\t# %s block(s)\n" @@ -3362,7 +3381,7 @@ msgstr "" "\t# %s blokke\n" "\n" -#: profile.c:193 +#: profile.c:198 #, c-format msgid "" "\t# Rule(s)\n" @@ -3371,29 +3390,29 @@ msgstr "" "\t# Regler\n" "\n" -#: profile.c:267 +#: profile.c:272 #, c-format msgid "internal error: %s with null vname" msgstr "intern fejl: %s med null vname" -#: profile.c:530 +#: profile.c:537 #, fuzzy msgid "internal error: builtin with null fname" msgstr "intern fejl: %s med null vname" -#: profile.c:942 +#: profile.c:949 #, c-format msgid "" "\t# Loaded extensions (-l and/or @load)\n" "\n" msgstr "" -#: profile.c:965 +#: profile.c:972 #, c-format msgid "\t# gawk profile, created %s\n" msgstr "\t# profil til gawk oprettet %s\n" -#: profile.c:1351 +#: profile.c:1475 #, c-format msgid "" "\n" @@ -3402,17 +3421,12 @@ msgstr "" "\n" "\t# Funktioner, listede alfabetisk\n" -#: profile.c:1389 +#: profile.c:1513 #, c-format msgid "redir2str: unknown redirection type %d" msgstr "redir2str: uykendt omdirigeringstype %d" -#: re.c:583 -#, c-format -msgid "range of the form `[%c-%c]' is locale dependent" -msgstr "område på formen `[%c-%c]' er locale-afhængig" - -#: re.c:610 +#: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" msgstr "regexp-komponent `%.*s' skulle nok være `[%.*s]'" @@ -3481,10 +3495,13 @@ msgstr "Ubalanceret ) eller \\)" msgid "No previous regular expression" msgstr "Intet foregående regulært udtryk" -#: symbol.c:740 +#: symbol.c:741 msgid "can not pop main context" msgstr "" +#~ msgid "range of the form `[%c-%c]' is locale dependent" +#~ msgstr "område på formen `[%c-%c]' er locale-afhængig" + #, fuzzy #~ msgid "[s]printf called with no arguments" #~ msgstr "sqrt: kaldt med negativt argument %g" diff --git a/po/de.gmo b/po/de.gmo index f8ae3a41..e46946bb 100644 Binary files a/po/de.gmo and b/po/de.gmo differ diff --git a/po/de.po b/po/de.po index e5b8a93d..f92c3bb7 100644 --- a/po/de.po +++ b/po/de.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gawk 4.0.0h\n" "Report-Msgid-Bugs-To: arnold@skeeve.com\n" -"POT-Creation-Date: 2013-05-09 16:05+0300\n" +"POT-Creation-Date: 2014-04-08 19:23+0300\n" "PO-Revision-Date: 2012-01-30 16:21+0100\n" "Last-Translator: Philipp Thomas \n" "Language-Team: German \n" @@ -17,93 +17,93 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -#: array.c:254 +#: array.c:256 #, c-format msgid "from %s" msgstr "von %s" -#: array.c:354 +#: array.c:357 msgid "attempt to use a scalar value as array" msgstr "Es wird versucht, einen Skalar als Feld zu verwenden" -#: array.c:356 +#: array.c:359 #, c-format msgid "attempt to use scalar parameter `%s' as an array" msgstr "Es wird versucht, den skalaren Parameter »%s« als Feld zu verwenden" -#: array.c:359 +#: array.c:362 #, c-format msgid "attempt to use scalar `%s' as an array" msgstr "Es wird versucht, den Skalar »%s« als Array zu verwenden" -#: array.c:406 array.c:573 builtin.c:85 builtin.c:1591 builtin.c:1637 -#: builtin.c:1650 builtin.c:2078 builtin.c:2092 eval.c:1121 eval.c:1125 -#: eval.c:1524 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" msgstr "Es wird versucht, das Feld »%s« in einem Skalarkontext zu verwenden" -#: array.c:580 +#: array.c:583 #, c-format msgid "delete: index `%s' not in array `%s'" msgstr "delete: Index »%s« ist in Feld »%s« nicht vorhanden" -#: array.c:594 +#: array.c:597 #, c-format msgid "attempt to use scalar `%s[\"%.*s\"]' as an array" msgstr "Es wird versucht, den Skalar »%s[\"%.*s\"]« als Feld zu verwenden" -#: array.c:773 +#: array.c:776 #, fuzzy msgid "adump: first argument not an array" msgstr "adump: Das Argument ist kein Feld" -#: array.c:812 +#: array.c:815 msgid "asort: second argument not an array" msgstr "asort: Das zweite Argument ist kein Feld" -#: array.c:813 +#: array.c:816 msgid "asorti: second argument not an array" msgstr "asorti: Das zweite Argument ist kein Feld" -#: array.c:820 +#: array.c:823 msgid "asort: first argument not an array" msgstr "asort: Das erste Argument ist kein Feld" -#: array.c:821 +#: array.c:824 msgid "asorti: first argument not an array" msgstr "asorti: Das erste Argument ist kein Feld" -#: array.c:828 +#: 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" -#: array.c:829 +#: 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" -#: array.c:834 +#: 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" -#: array.c:835 +#: 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" -#: array.c:1309 +#: array.c:1314 #, c-format msgid "`%s' is invalid as a function name" msgstr "»%s« ist ein unzulässiger Funktionsname" -#: array.c:1313 +#: array.c:1318 #, c-format msgid "sort comparison function `%s' is not defined" msgstr "Die Vergleichsfunktion »%s« für das Sortieren ist nicht definiert" @@ -148,12 +148,12 @@ msgstr "doppelte Case-Werte im Switch-Block: %s" msgid "duplicate `default' detected in switch body" msgstr "doppeltes »default« im Switch-Block gefunden" -#: awkgram.y:796 awkgram.y:3699 +#: awkgram.y:796 awkgram.y:3723 msgid "`break' is not allowed outside a loop or switch" msgstr "" "»break« ist außerhalb einer Schleife oder eines Switch-Blocks nicht zulässig" -#: awkgram.y:805 awkgram.y:3691 +#: awkgram.y:805 awkgram.y:3715 msgid "`continue' is not allowed outside a loop" msgstr "»continue« ist außerhalb einer Schleife nicht zulässig" @@ -246,279 +246,279 @@ msgstr "" msgid "invalid subscript expression" msgstr "Ungültiger Index-Ausdruck" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:119 +#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "Warnung: " -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:151 +#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "Fatal: " -#: awkgram.y:2092 +#: awkgram.y:2116 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:517 debug.c:533 -#: debug.c:2792 debug.c:5040 +#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 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:2384 awkgram.y:2509 #, fuzzy, c-format msgid "can't open shared library `%s' for reading (%s)" msgstr "Quelldatei »%s« kann nicht zum Lesen geöffnet werden (%s)" -#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:130 debug.c:5191 +#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "Unbekannte Ursache" -#: awkgram.y:2371 awkgram.y:2395 +#: awkgram.y:2395 awkgram.y:2419 #, c-format msgid "can't include `%s' and use it as a program file" msgstr "" -#: awkgram.y:2384 +#: awkgram.y:2408 #, c-format msgid "already included source file `%s'" msgstr "Quelldatei »%s« wurde bereits eingebunden" -#: awkgram.y:2385 +#: awkgram.y:2409 #, fuzzy, c-format msgid "already loaded shared library `%s'" msgstr "Quelldatei »%s« wurde bereits eingebunden" -#: awkgram.y:2420 +#: awkgram.y:2444 msgid "@include is a gawk extension" msgstr "»@include« ist eine gawk-Erweiterung" -#: awkgram.y:2426 +#: awkgram.y:2450 msgid "empty filename after @include" msgstr "leerer Dateiname nach @include" -#: awkgram.y:2470 +#: awkgram.y:2494 #, fuzzy msgid "@load is a gawk extension" msgstr "»@include« ist eine gawk-Erweiterung" -#: awkgram.y:2476 +#: awkgram.y:2500 #, fuzzy msgid "empty filename after @load" msgstr "leerer Dateiname nach @include" -#: awkgram.y:2610 +#: awkgram.y:2634 msgid "empty program text on command line" msgstr "Kein Programmtext auf der Kommandozeile" -#: awkgram.y:2725 +#: awkgram.y:2749 #, c-format msgid "can't read sourcefile `%s' (%s)" msgstr "Die Quelldatei »%s« kann nicht gelesen werden (%s)" -#: awkgram.y:2736 +#: awkgram.y:2760 #, c-format msgid "source file `%s' is empty" msgstr "Die Quelldatei »%s« ist leer" -#: awkgram.y:2913 +#: awkgram.y:2937 msgid "source file does not end in newline" msgstr "Die Quelldatei hört nicht mit einem Zeilenende auf" -#: awkgram.y:3018 +#: awkgram.y:3042 msgid "unterminated regexp ends with `\\' at end of file" msgstr "" "Nicht beendeter regulärer Ausdruck (hört mit '\\' auf) am Ende der Datei" -#: awkgram.y:3042 +#: awkgram.y:3066 #, 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" -#: awkgram.y:3046 +#: awkgram.y:3070 #, 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" -#: awkgram.y:3053 +#: awkgram.y:3077 msgid "unterminated regexp" msgstr "Nicht beendeter regulärer Ausdruck" -#: awkgram.y:3057 +#: awkgram.y:3081 msgid "unterminated regexp at end of file" msgstr "Nicht beendeter regulärer Ausdruck am Dateiende" -#: awkgram.y:3116 +#: awkgram.y:3140 msgid "use of `\\ #...' line continuation is not portable" msgstr "" "Die Verwendung von »\\#...« zur Fortsetzung von Zeilen ist nicht portabel" -#: awkgram.y:3132 +#: awkgram.y:3156 msgid "backslash not last character on line" msgstr "das letzte Zeichen auf der Zeile ist kein Backslash (»\\«)" -#: awkgram.y:3193 +#: awkgram.y:3217 msgid "POSIX does not allow operator `**='" msgstr "POSIX erlaubt den Operator »**=« nicht" -#: awkgram.y:3195 +#: awkgram.y:3219 msgid "old awk does not support operator `**='" msgstr "Das alte awk unterstützt den Operator »**=« nicht" -#: awkgram.y:3204 +#: awkgram.y:3228 msgid "POSIX does not allow operator `**'" msgstr "POSIX erlaubt den Operator »**« nicht" -#: awkgram.y:3206 +#: awkgram.y:3230 msgid "old awk does not support operator `**'" msgstr "Das alte awk unterstützt den Operator »**« nicht" -#: awkgram.y:3241 +#: awkgram.y:3265 msgid "operator `^=' is not supported in old awk" msgstr "Das alte awk unterstützt den Operator »^=« nicht" -#: awkgram.y:3249 +#: awkgram.y:3273 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:3366 awkgram.y:3382 command.y:1178 msgid "unterminated string" msgstr "Nicht beendete Zeichenkette" -#: awkgram.y:3579 +#: awkgram.y:3603 #, c-format msgid "invalid char '%c' in expression" msgstr "Ungültiges Zeichen »%c« in einem Ausdruck" -#: awkgram.y:3626 +#: awkgram.y:3650 #, c-format msgid "`%s' is a gawk extension" msgstr "»%s« ist eine gawk-Erweiterung" -#: awkgram.y:3631 +#: awkgram.y:3655 #, c-format msgid "POSIX does not allow `%s'" msgstr "POSIX erlaubt »%s« nicht" -#: awkgram.y:3639 +#: awkgram.y:3663 #, c-format msgid "`%s' is not supported in old awk" msgstr "»%s« wird im alten awk nicht unterstützt" -#: awkgram.y:3729 +#: awkgram.y:3753 msgid "`goto' considered harmful!\n" msgstr "»goto« gilt als schlechter Stil!\n" -#: awkgram.y:3763 +#: awkgram.y:3787 #, 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:3822 #, 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:3827 #, 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:3910 awkgram.y:3913 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:3967 awkgram.y:3970 msgid "close: second argument is a gawk extension" msgstr "close: Das zweite Argument ist eine gawk-Erweiterung" -#: awkgram.y:3958 +#: awkgram.y:3982 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:3997 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:4016 #, fuzzy msgid "index: regexp constant as second argument is not allowed" msgstr "index: Zweites Argument ist kein string" -#: awkgram.y:4045 +#: awkgram.y:4069 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "Funktion »%s«: Parameter »%s« verdeckt eine globale Variable" -#: awkgram.y:4102 debug.c:4021 debug.c:4064 debug.c:5189 +#: awkgram.y:4126 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:4127 msgid "sending variable list to standard error" msgstr "Die Liste der Variablen wird auf der Standardfehlerausgabe ausgegeben" -#: awkgram.y:4111 +#: awkgram.y:4135 #, c-format msgid "%s: close failed (%s)" msgstr "%s: close ist gescheitert (%s)" -#: awkgram.y:4136 +#: awkgram.y:4160 msgid "shadow_funcs() called twice!" msgstr "shadow_funcs() zweimal aufgerufen!" -#: awkgram.y:4144 +#: awkgram.y:4168 msgid "there were shadowed variables." msgstr "es sind verdeckte Variablen vorhanden" -#: awkgram.y:4215 +#: awkgram.y:4239 #, c-format msgid "function name `%s' previously defined" msgstr "Funktion »%s« wurde bereits definiert" -#: awkgram.y:4261 +#: awkgram.y:4285 #, 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:4288 #, 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" -#: awkgram.y:4272 +#: awkgram.y:4296 #, c-format msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d" msgstr "Funktion »%s«: Parameter #%d, »%s« wiederholt Parameter #%d" -#: awkgram.y:4366 awkgram.y:4372 +#: awkgram.y:4383 awkgram.y:4389 #, c-format msgid "function `%s' called but never defined" msgstr "Aufgerufene Funktion »%s« ist nirgends definiert" -#: awkgram.y:4376 +#: awkgram.y:4393 #, c-format msgid "function `%s' defined but never called directly" msgstr "Funktion »%s« wurde definiert aber nirgends aufgerufen" -#: awkgram.y:4408 +#: awkgram.y:4425 #, 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:4467 +#: awkgram.y:4484 #, c-format msgid "" "function `%s' called with space between name and `(',\n" @@ -527,238 +527,248 @@ msgstr "" "Funktion »%s« wird mit Leerzeichen zwischen Name und »(« aufgerufen, \n" "oder als Variable oder Feld verwendet" -#: awkgram.y:4703 +#: awkgram.y:4720 msgid "division by zero attempted" msgstr "Division durch Null wurde versucht" -#: awkgram.y:4712 +#: awkgram.y:4729 #, c-format msgid "division by zero attempted in `%%'" msgstr "Division durch Null versucht in »%%«" -#: builtin.c:128 +#: awkgram.y:5049 +msgid "" +"cannot assign a value to the result of a field post-increment expression" +msgstr "" + +#: awkgram.y:5052 +#, fuzzy, c-format +msgid "invalid target of assignment (opcode %s)" +msgstr "Unzulässige Argumentzahl %d für %s" + +#: builtin.c:133 #, c-format msgid "%s to \"%s\" failed (%s)" msgstr "%s to \"%s\" fehlgeschlagen (%s)" -#: builtin.c:129 +#: builtin.c:134 msgid "standard output" msgstr "Standardausgabe" -#: builtin.c:143 +#: builtin.c:148 msgid "exp: received non-numeric argument" msgstr "exp: das Argument ist keine Zahl" -#: builtin.c:149 +#: builtin.c:154 #, c-format msgid "exp: argument %g is out of range" msgstr "exp: das Argument %g liegt außerhalb des gültigen Bereichs" -#: builtin.c:224 +#: 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" -#: builtin.c:227 +#: 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" -#: builtin.c:239 +#: 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:357 +#: builtin.c:362 msgid "index: received non-string first argument" msgstr "index: Erstes Argument ist kein String" -#: builtin.c:359 +#: builtin.c:364 msgid "index: received non-string second argument" msgstr "index: Zweites Argument ist kein string" -#: builtin.c:483 mpfr.c:757 +#: builtin.c:488 mpfr.c:757 msgid "int: received non-numeric argument" msgstr "Argument ist keine Zahl" -#: builtin.c:520 +#: builtin.c:525 msgid "length: received array argument" msgstr "length: Argument ist ein Feld" -#: builtin.c:523 +#: builtin.c:528 msgid "`length(array)' is a gawk extension" msgstr "»length(array)« ist eine gawk-Erweiterung" -#: builtin.c:539 +#: builtin.c:544 msgid "length: received non-string argument" msgstr "length: Argument ist kein String" -#: builtin.c:570 +#: builtin.c:575 msgid "log: received non-numeric argument" msgstr "log: Argument ist keine Zahl" -#: builtin.c:573 +#: builtin.c:578 #, c-format msgid "log: received negative argument %g" msgstr "log: Negatives Argument %g" -#: builtin.c:771 builtin.c:776 +#: builtin.c:776 builtin.c:781 msgid "fatal: must use `count$' on all formats or none" msgstr "Fatal: »count$« muss auf alle Formate angewandt werden oder auf keines" -#: builtin.c:846 +#: builtin.c:851 #, c-format msgid "field width is ignored for `%%' specifier" msgstr "Feldbreite wird für die »%%«-Angabe ignoriert" -#: builtin.c:848 +#: builtin.c:853 #, c-format msgid "precision is ignored for `%%' specifier" msgstr "Genauigkeit wird für die »%%«-Angabe ignoriert" -#: builtin.c:850 +#: builtin.c:855 #, c-format msgid "field width and precision are ignored for `%%' specifier" msgstr "Feldbreite und Genauigkeit werden für die »%%«-Angabe ignoriert" -#: builtin.c:901 +#: builtin.c:906 msgid "fatal: `$' is not permitted in awk formats" msgstr "Fatal: »$« ist in awk-Formaten nicht zulässig" -#: builtin.c:910 +#: builtin.c:915 msgid "fatal: arg count with `$' must be > 0" msgstr "Fatal: die Anzahl der Argumen bei »$« muss > 0 sein" -#: builtin.c:914 +#: builtin.c:919 #, 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" -#: builtin.c:918 +#: builtin.c:923 msgid "fatal: `$' not permitted after period in format" msgstr "Fatal: »$« nach Punkt in Formatangabe nicht zulässig" -#: builtin.c:934 +#: builtin.c:939 msgid "fatal: no `$' supplied for positional field width or precision" msgstr "Fatal: »$« fehlt in positionsabhängiger Feldbreite oder Genauigkeit" # -#: builtin.c:1006 +#: builtin.c:1009 msgid "`l' is meaningless in awk formats; ignored" msgstr "»l« ist in awk-Formaten bedeutungslos, ignoriert" -#: builtin.c:1010 +#: builtin.c:1013 msgid "fatal: `l' is not permitted in POSIX awk formats" msgstr "Fatal: »l« ist in POSIX-awk-Formaten nicht zulässig" -#: builtin.c:1023 +#: builtin.c:1026 msgid "`L' is meaningless in awk formats; ignored" msgstr "»L« ist in awk-Formaten bedeutungslos, ignoriert" -#: builtin.c:1027 +#: builtin.c:1030 msgid "fatal: `L' is not permitted in POSIX awk formats" msgstr "Fatal: »L« ist in POSIX-awk-Formaten nicht zulässig" -#: builtin.c:1040 +#: builtin.c:1043 msgid "`h' is meaningless in awk formats; ignored" msgstr "»h« ist in awk-Formaten bedeutungslos, ignoriert" -#: builtin.c:1044 +#: builtin.c:1047 msgid "fatal: `h' is not permitted in POSIX awk formats" msgstr "Fatal: »h« ist in POSIX-awk-Formaten nicht zulässig" -#: builtin.c:1439 +#: builtin.c:1463 #, 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:1537 +#: builtin.c:1561 #, 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" -#: builtin.c:1542 +#: builtin.c:1566 msgid "fatal: not enough arguments to satisfy format string" msgstr "Fatal: Nicht genügend Argumente für die Formatangabe" -#: builtin.c:1544 +#: builtin.c:1568 msgid "^ ran out for this one" msgstr "^ hierfür fehlte es" -#: builtin.c:1551 +#: builtin.c:1575 msgid "[s]printf: format specifier does not have control letter" msgstr "[s]printf: Format-Spezifikation hat keinen Controlcode" -#: builtin.c:1554 +#: builtin.c:1578 msgid "too many arguments supplied for format string" msgstr "Zu viele Argumente für den Formatstring" -#: builtin.c:1610 +#: builtin.c:1634 #, fuzzy msgid "sprintf: no arguments" msgstr "printf: Keine Argumente" -#: builtin.c:1633 builtin.c:1644 +#: builtin.c:1657 builtin.c:1668 msgid "printf: no arguments" msgstr "printf: Keine Argumente" -#: builtin.c:1687 +#: builtin.c:1711 msgid "sqrt: received non-numeric argument" msgstr "sqrt: das Argument ist keine Zahl" -#: builtin.c:1691 +#: builtin.c:1715 #, c-format msgid "sqrt: called with negative argument %g" msgstr "sqrt: das Argument %g ist negativ" -#: builtin.c:1722 +#: builtin.c:1746 #, c-format msgid "substr: length %g is not >= 1" msgstr "substr: Länge %g ist nicht >= 1" -#: builtin.c:1724 +#: builtin.c:1748 #, c-format msgid "substr: length %g is not >= 0" msgstr "substr: Länge %g ist nicht >= 0" -#: builtin.c:1731 +#: builtin.c:1755 #, c-format msgid "substr: non-integer length %g will be truncated" msgstr "substr: Nicht ganzzahlige Länge %g wird abgeschnitten" -#: builtin.c:1736 +#: builtin.c:1760 #, 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" -#: builtin.c:1748 +#: builtin.c:1772 #, c-format msgid "substr: start index %g is invalid, using 1" msgstr "substr: Start-Index %g ist ungültig, 1 wird verwendet" -#: builtin.c:1753 +#: builtin.c:1777 #, c-format msgid "substr: non-integer start index %g will be truncated" msgstr "substr: Nicht ganzzahliger Start-Wert %g wird abgeschnitten" -#: builtin.c:1778 +#: builtin.c:1802 msgid "substr: source string is zero length" msgstr "substr: Quellstring ist leer" -#: builtin.c:1794 +#: builtin.c:1818 #, 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:1802 +#: builtin.c:1826 #, c-format msgid "" "substr: length %g at start index %g exceeds length of first argument (%lu)" @@ -766,197 +776,197 @@ msgstr "" "substr: Länge %g am Start-Wert %g überschreitet die Länge des ersten " "Arguments (%lu)" -#: builtin.c:1876 +#: builtin.c:1900 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" msgstr "strftime: Formatwert in PROCINFO[\"strftime\"] ist numerischen Typs" -#: builtin.c:1899 +#: builtin.c:1923 msgid "strftime: received non-numeric second argument" msgstr "strftime: Das zweite Argument ist keine Zahl" -#: builtin.c:1903 +#: builtin.c:1927 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" -#: builtin.c:1910 +#: builtin.c:1934 msgid "strftime: received non-string first argument" msgstr "strftime: Das erste Argument ist kein String" -#: builtin.c:1917 +#: builtin.c:1941 msgid "strftime: received empty format string" msgstr "strftime: Der Format-String ist leer" -#: builtin.c:1983 +#: builtin.c:2007 msgid "mktime: received non-string argument" msgstr "mktime: Das Argument ist kein String" -#: builtin.c:2000 +#: builtin.c:2024 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:2035 +#: builtin.c:2059 msgid "'system' function not allowed in sandbox mode" msgstr "Die Funktion »system« ist im Sandbox-Modus nicht erlaubt" -#: builtin.c:2040 +#: builtin.c:2064 msgid "system: received non-string argument" msgstr "system: Das Argument ist kein String" -#: builtin.c:2160 +#: builtin.c:2184 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "Referenz auf das nicht initialisierte Feld »$%d«" -#: builtin.c:2247 +#: builtin.c:2271 msgid "tolower: received non-string argument" msgstr "tolower: das Argument ist kein String" -#: builtin.c:2281 +#: builtin.c:2305 msgid "toupper: received non-string argument" msgstr "toupper: das Argument ist kein String" -#: builtin.c:2317 mpfr.c:672 +#: builtin.c:2341 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2: das erste Argument ist keine Zahl" -#: builtin.c:2319 mpfr.c:674 +#: builtin.c:2343 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2: das zweite Argument ist keine Zahl" -#: builtin.c:2338 +#: builtin.c:2362 msgid "sin: received non-numeric argument" msgstr "sin: das Argument ist keine Zahl" -#: builtin.c:2354 +#: builtin.c:2378 msgid "cos: received non-numeric argument" msgstr "cos: das Argument ist keine Zahl" -#: builtin.c:2407 mpfr.c:1156 +#: builtin.c:2431 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand: das Argument ist keine Zahl" -#: builtin.c:2438 +#: builtin.c:2462 msgid "match: third argument is not an array" msgstr "match: das dritte Argument ist kein Array" -#: builtin.c:2710 +#: builtin.c:2734 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub: 0 als drittes Argument wird als 1 interpretiert" -#: builtin.c:3003 +#: builtin.c:3030 msgid "lshift: received non-numeric first argument" msgstr "lshift: das erste Argument ist keine Zahl" -#: builtin.c:3005 +#: builtin.c:3032 msgid "lshift: received non-numeric second argument" msgstr "lshift: das zweite Argument ist keine Zahl" -#: builtin.c:3011 +#: builtin.c:3038 #, fuzzy, c-format msgid "lshift(%f, %f): negative values will give strange results" msgstr "" "lshift(%lf, %lf): Negative Werte werden zu merkwürdigen Ergebnissen führen" -#: builtin.c:3013 +#: builtin.c:3040 #, fuzzy, c-format msgid "lshift(%f, %f): fractional values will be truncated" msgstr "lshift(%lf, %lf): Dezimalteil wird abgeschnitten" -#: builtin.c:3015 +#: builtin.c:3042 #, fuzzy, c-format msgid "lshift(%f, %f): too large shift value will give strange results" msgstr "" "lshift(%lf, %lf): Zu große Shift-Werte werden zu merkwürdigen Ergebnissen " "führen" -#: builtin.c:3040 +#: builtin.c:3067 msgid "rshift: received non-numeric first argument" msgstr "rshift: das erste Argument ist keine Zahl" -#: builtin.c:3042 +#: builtin.c:3069 msgid "rshift: received non-numeric second argument" msgstr "rshift: das zweite Argument ist keine Zahl" -#: builtin.c:3048 +#: builtin.c:3075 #, fuzzy, c-format msgid "rshift(%f, %f): negative values will give strange results" msgstr "" "rshift (%lf, %lf): Negative Werte werden zu merkwürdigen Ergebnissen führen" -#: builtin.c:3050 +#: builtin.c:3077 #, fuzzy, c-format msgid "rshift(%f, %f): fractional values will be truncated" msgstr "rshift(%lf, %lf): Dezimalteil wird abgeschnitten" -#: builtin.c:3052 +#: builtin.c:3079 #, fuzzy, c-format msgid "rshift(%f, %f): too large shift value will give strange results" msgstr "" "rshift(%lf, %lf): Zu große Shift-Werte werden zu merkwürdigen Ergebnissen " "führen" -#: builtin.c:3077 mpfr.c:968 +#: builtin.c:3104 mpfr.c:968 #, fuzzy msgid "and: called with less than two arguments" msgstr "sqrt: das Argument %g ist negativ" -#: builtin.c:3082 +#: builtin.c:3109 #, fuzzy, c-format msgid "and: argument %d is non-numeric" msgstr "exp: das Argument %g liegt außerhalb des gültigen Bereichs" -#: builtin.c:3086 +#: builtin.c:3113 #, fuzzy, c-format msgid "and: argument %d negative value %g will give strange results" msgstr "" "and(%lf, %lf): Negative Werte werden zu merkwürdigen Ergebnissen führen" -#: builtin.c:3109 mpfr.c:1000 +#: builtin.c:3136 mpfr.c:1000 #, fuzzy msgid "or: called with less than two arguments" msgstr "sqrt: das Argument %g ist negativ" -#: builtin.c:3114 +#: builtin.c:3141 #, fuzzy, c-format msgid "or: argument %d is non-numeric" msgstr "exp: das Argument %g liegt außerhalb des gültigen Bereichs" -#: builtin.c:3118 +#: builtin.c:3145 #, fuzzy, c-format msgid "or: argument %d negative value %g will give strange results" msgstr "compl(%lf): Negativer Wert wird zu merkwürdigen Ergebnissen führen" -#: builtin.c:3140 mpfr.c:1031 +#: builtin.c:3167 mpfr.c:1031 #, fuzzy msgid "xor: called with less than two arguments" msgstr "sqrt: das Argument %g ist negativ" -#: builtin.c:3146 +#: builtin.c:3173 #, fuzzy, c-format msgid "xor: argument %d is non-numeric" msgstr "exp: das Argument %g liegt außerhalb des gültigen Bereichs" -#: builtin.c:3150 +#: builtin.c:3177 #, fuzzy, c-format msgid "xor: argument %d negative value %g will give strange results" msgstr "xor(%lf, %lf: Negative Werte werden zu merkwürdigen Ergebnissen führen" -#: builtin.c:3175 mpfr.c:787 +#: builtin.c:3202 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl: das erste Argument ist keine Zahl" -#: builtin.c:3181 +#: builtin.c:3208 #, fuzzy, c-format msgid "compl(%f): negative value will give strange results" msgstr "compl(%lf): Negativer Wert wird zu merkwürdigen Ergebnissen führen" -#: builtin.c:3183 +#: builtin.c:3210 #, fuzzy, c-format msgid "compl(%f): fractional value will be truncated" msgstr "compl(%lf): Dezimalteil wird abgeschnitten" -#: builtin.c:3352 +#: builtin.c:3379 #, c-format msgid "dcgettext: `%s' is not a valid locale category" msgstr "dcgettext: »%s« ist keine gültige Locale-Kategorie" @@ -1080,8 +1090,8 @@ msgstr "" #: command.y:823 msgid "" -"commands [num] - starts a list of commands to be executed at a breakpoint" -"(watchpoint) hit." +"commands [num] - starts a list of commands to be executed at a " +"breakpoint(watchpoint) hit." msgstr "" #: command.y:825 @@ -1238,7 +1248,7 @@ msgstr "" msgid "watch var - set a watchpoint for a variable." msgstr "" -#: command.y:1011 debug.c:395 msg.c:128 +#: command.y:1011 debug.c:401 msg.c:135 #, c-format msgid "error: " msgstr "Fehler: " @@ -1278,558 +1288,558 @@ msgstr "Ungültiges Zeichen" msgid "undefined command: %s\n" msgstr "" -#: debug.c:246 +#: debug.c:252 msgid "set or show the number of lines to keep in history file." msgstr "" -#: debug.c:248 +#: debug.c:254 msgid "set or show the list command window size." msgstr "" -#: debug.c:250 +#: debug.c:256 msgid "set or show gawk output file." msgstr "" -#: debug.c:252 +#: debug.c:258 msgid "set or show debugger prompt." msgstr "" -#: debug.c:254 +#: debug.c:260 msgid "(un)set or show saving of command history (value=on|off)." msgstr "" -#: debug.c:256 +#: debug.c:262 msgid "(un)set or show saving of options (value=on|off)." msgstr "" -#: debug.c:258 +#: debug.c:264 msgid "(un)set or show instruction tracing (value=on|off)." msgstr "" -#: debug.c:339 +#: debug.c:345 msgid "program not running." msgstr "" -#: debug.c:442 debug.c:597 +#: debug.c:448 debug.c:606 #, fuzzy, c-format msgid "can't read source file `%s' (%s)" msgstr "Die Quelldatei »%s« kann nicht gelesen werden (%s)" -#: debug.c:447 +#: debug.c:453 #, fuzzy, c-format msgid "source file `%s' is empty.\n" msgstr "Die Quelldatei »%s« ist leer" -#: debug.c:474 +#: debug.c:480 msgid "no current source file." msgstr "" -#: debug.c:499 +#: debug.c:505 #, fuzzy, c-format msgid "cannot find source file named `%s' (%s)" msgstr "Die Quelldatei »%s« kann nicht gelesen werden (%s)" -#: debug.c:523 +#: debug.c:529 #, c-format msgid "WARNING: source file `%s' modified since program compilation.\n" msgstr "" -#: debug.c:542 +#: debug.c:551 #, c-format msgid "line number %d out of range; `%s' has %d lines" msgstr "" -#: debug.c:602 +#: debug.c:611 #, fuzzy, c-format msgid "unexpected eof while reading file `%s', line %d" msgstr "Unerwarteter Zeilenumbruch oder Ende der Zeichenkette" -#: debug.c:611 +#: debug.c:620 #, c-format msgid "source file `%s' modified since start of program execution" msgstr "" -#: debug.c:723 +#: debug.c:732 #, fuzzy, c-format msgid "Current source file: %s\n" msgstr "Quelldatei »%s« wurde bereits eingebunden" -#: debug.c:724 +#: debug.c:733 #, c-format msgid "Number of lines: %d\n" msgstr "" -#: debug.c:731 +#: debug.c:740 #, c-format msgid "Source file (lines): %s (%d)\n" msgstr "" -#: debug.c:745 +#: debug.c:754 msgid "" "Number Disp Enabled Location\n" "\n" msgstr "" -#: debug.c:756 +#: debug.c:765 #, c-format msgid "\tno of hits = %ld\n" msgstr "" -#: debug.c:758 +#: debug.c:767 #, c-format msgid "\tignore next %ld hit(s)\n" msgstr "" -#: debug.c:760 debug.c:900 +#: debug.c:769 debug.c:909 #, c-format msgid "\tstop condition: %s\n" msgstr "" -#: debug.c:762 debug.c:902 +#: debug.c:771 debug.c:911 msgid "\tcommands:\n" msgstr "" -#: debug.c:784 +#: debug.c:793 #, c-format msgid "Current frame: " msgstr "" -#: debug.c:787 +#: debug.c:796 #, c-format msgid "Called by frame: " msgstr "" -#: debug.c:791 +#: debug.c:800 #, c-format msgid "Caller of frame: " msgstr "" -#: debug.c:809 +#: debug.c:818 #, c-format msgid "None in main().\n" msgstr "" -#: debug.c:839 +#: debug.c:848 #, fuzzy msgid "No arguments.\n" msgstr "printf: Keine Argumente" -#: debug.c:840 +#: debug.c:849 msgid "No locals.\n" msgstr "" -#: debug.c:848 +#: debug.c:857 msgid "" "All defined variables:\n" "\n" msgstr "" -#: debug.c:858 +#: debug.c:867 msgid "" "All defined functions:\n" "\n" msgstr "" -#: debug.c:877 +#: debug.c:886 msgid "" "Auto-display variables:\n" "\n" msgstr "" -#: debug.c:880 +#: debug.c:889 msgid "" "Watch variables:\n" "\n" msgstr "" -#: debug.c:1020 +#: debug.c:1029 #, fuzzy, c-format msgid "no symbol `%s' in current context\n" msgstr "»exit« kann im aktuellen Kontext nicht aufgerufen werden" -#: debug.c:1032 debug.c:1418 +#: debug.c:1041 debug.c:1427 #, fuzzy, c-format msgid "`%s' is not an array\n" msgstr "»%s« ist kein gültiger Variablenname" -#: debug.c:1046 +#: debug.c:1055 #, fuzzy, c-format msgid "$%ld = uninitialized field\n" msgstr "Referenz auf das nicht initialisierte Feld »$%d«" -#: debug.c:1067 +#: debug.c:1076 #, fuzzy, c-format msgid "array `%s' is empty\n" msgstr "Die Datei »%s« ist leer" -#: debug.c:1110 debug.c:1162 +#: debug.c:1119 debug.c:1171 #, fuzzy, c-format msgid "[\"%s\"] not in array `%s'\n" msgstr "delete: Index »%s« ist in Feld »%s« nicht vorhanden" -#: debug.c:1166 +#: debug.c:1175 #, c-format msgid "`%s[\"%s\"]' is not an array\n" msgstr "" -#: debug.c:1227 debug.c:4949 +#: debug.c:1236 debug.c:4964 #, fuzzy, c-format msgid "`%s' is not a scalar variable" msgstr "»%s« ist kein gültiger Variablenname" -#: debug.c:1249 debug.c:4979 +#: debug.c:1258 debug.c:4994 #, fuzzy, 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" -#: debug.c:1271 debug.c:4990 +#: debug.c:1280 debug.c:5005 #, fuzzy, c-format msgid "attempt to use scalar `%s[\"%s\"]' as array" msgstr "Es wird versucht, den Skalar »%s[\"%.*s\"]« als Feld zu verwenden" -#: debug.c:1414 +#: debug.c:1423 #, fuzzy, c-format msgid "`%s' is a function" msgstr "»%s« ist ein unzulässiger Funktionsname" -#: debug.c:1456 +#: debug.c:1465 #, c-format msgid "watchpoint %d is unconditional\n" msgstr "" -#: debug.c:1490 +#: debug.c:1499 #, c-format msgid "No display item numbered %ld" msgstr "" -#: debug.c:1493 +#: debug.c:1502 #, c-format msgid "No watch item numbered %ld" msgstr "" -#: debug.c:1519 +#: debug.c:1528 #, fuzzy, c-format msgid "%d: [\"%s\"] not in array `%s'\n" msgstr "delete: Index »%s« ist in Feld »%s« nicht vorhanden" -#: debug.c:1758 +#: debug.c:1767 #, fuzzy msgid "attempt to use scalar value as array" msgstr "Es wird versucht, einen Skalar als Feld zu verwenden" -#: debug.c:1847 +#: debug.c:1856 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" msgstr "" -#: debug.c:1858 +#: debug.c:1867 #, c-format msgid "Display %d deleted because parameter is out of scope.\n" msgstr "" -#: debug.c:1891 +#: debug.c:1900 #, c-format msgid " in file `%s', line %d\n" msgstr "" -#: debug.c:1912 +#: debug.c:1921 #, c-format msgid " at `%s':%d" msgstr "" -#: debug.c:1928 debug.c:1991 +#: debug.c:1937 debug.c:2000 #, c-format msgid "#%ld\tin " msgstr "" -#: debug.c:1965 +#: debug.c:1974 #, c-format msgid "More stack frames follow ...\n" msgstr "" -#: debug.c:2008 +#: debug.c:2017 #, fuzzy msgid "invalid frame number" msgstr "Ungültiges Bereichsende" -#: debug.c:2180 +#: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" msgstr "" -#: debug.c:2187 +#: debug.c:2207 #, c-format msgid "Note: breakpoint %d (enabled), also set at %s:%d" msgstr "" -#: debug.c:2194 +#: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" msgstr "" -#: debug.c:2201 +#: debug.c:2221 #, c-format msgid "Note: breakpoint %d (disabled), also set at %s:%d" msgstr "" -#: debug.c:2218 +#: debug.c:2238 #, c-format msgid "Breakpoint %d set at file `%s', line %d\n" msgstr "" -#: debug.c:2320 +#: debug.c:2340 #, c-format msgid "Can't set breakpoint in file `%s'\n" msgstr "" -#: debug.c:2349 debug.c:2472 debug.c:3330 +#: debug.c:2369 debug.c:2492 debug.c:3350 #, fuzzy, c-format msgid "line number %d in file `%s' out of range" msgstr "exp: das Argument %g liegt außerhalb des gültigen Bereichs" -#: debug.c:2353 +#: debug.c:2373 #, c-format msgid "Can't find rule!!!\n" msgstr "" -#: debug.c:2355 +#: debug.c:2375 #, c-format msgid "Can't set breakpoint at `%s':%d\n" msgstr "" -#: debug.c:2367 +#: debug.c:2387 #, c-format msgid "Can't set breakpoint in function `%s'\n" msgstr "" -#: debug.c:2383 +#: debug.c:2403 #, c-format msgid "breakpoint %d set at file `%s', line %d is unconditional\n" msgstr "" -#: debug.c:2488 debug.c:2510 +#: debug.c:2508 debug.c:2530 #, c-format msgid "Deleted breakpoint %d" msgstr "" -#: debug.c:2494 +#: debug.c:2514 #, c-format msgid "No breakpoint(s) at entry to function `%s'\n" msgstr "" -#: debug.c:2521 +#: debug.c:2541 #, fuzzy, c-format msgid "No breakpoint at file `%s', line #%d\n" msgstr "Fehler beim Lesen der Eingabedatei »%s«: %s" -#: debug.c:2576 debug.c:2617 debug.c:2637 debug.c:2680 +#: debug.c:2596 debug.c:2637 debug.c:2657 debug.c:2700 msgid "invalid breakpoint number" msgstr "" -#: debug.c:2592 +#: debug.c:2612 msgid "Delete all breakpoints? (y or n) " msgstr "" -#: debug.c:2593 debug.c:2903 debug.c:2956 +#: debug.c:2613 debug.c:2923 debug.c:2976 msgid "y" msgstr "" -#: debug.c:2642 +#: debug.c:2662 #, c-format msgid "Will ignore next %ld crossing(s) of breakpoint %d.\n" msgstr "" -#: debug.c:2646 +#: debug.c:2666 #, c-format msgid "Will stop next time breakpoint %d is reached.\n" msgstr "" -#: debug.c:2763 +#: debug.c:2783 #, c-format msgid "Can only debug programs provided with the `-f' option.\n" msgstr "" -#: debug.c:2888 +#: debug.c:2908 #, c-format msgid "Failed to restart debugger" msgstr "" -#: debug.c:2902 +#: debug.c:2922 msgid "Program already running. Restart from beginning (y/n)? " msgstr "" -#: debug.c:2906 +#: debug.c:2926 #, c-format msgid "Program not restarted\n" msgstr "" -#: debug.c:2916 +#: debug.c:2936 #, c-format msgid "error: cannot restart, operation not allowed\n" msgstr "" -#: debug.c:2922 +#: debug.c:2942 #, c-format msgid "error (%s): cannot restart, ignoring rest of the commands\n" msgstr "" -#: debug.c:2930 +#: debug.c:2950 #, c-format msgid "Starting program: \n" msgstr "" -#: debug.c:2939 +#: debug.c:2959 #, c-format msgid "Program exited %s with exit value: %d\n" msgstr "" -#: debug.c:2955 +#: debug.c:2975 msgid "The program is running. Exit anyway (y/n)? " msgstr "" -#: debug.c:2990 +#: debug.c:3010 #, c-format msgid "Not stopped at any breakpoint; argument ignored.\n" msgstr "" -#: debug.c:2995 +#: debug.c:3015 #, c-format msgid "invalid breakpoint number %d." msgstr "" -#: debug.c:3000 +#: debug.c:3020 #, c-format msgid "Will ignore next %ld crossings of breakpoint %d.\n" msgstr "" -#: debug.c:3187 +#: debug.c:3207 #, c-format msgid "'finish' not meaningful in the outermost frame main()\n" msgstr "" -#: debug.c:3192 +#: debug.c:3212 #, c-format msgid "Run till return from " msgstr "" -#: debug.c:3235 +#: debug.c:3255 #, c-format msgid "'return' not meaningful in the outermost frame main()\n" msgstr "" -#: debug.c:3349 +#: debug.c:3369 #, c-format msgid "Can't find specified location in function `%s'\n" msgstr "" -#: debug.c:3357 +#: debug.c:3377 #, fuzzy, c-format msgid "invalid source line %d in file `%s'" msgstr "Quelldatei »%s« wurde bereits eingebunden" -#: debug.c:3372 +#: debug.c:3392 #, c-format msgid "Can't find specified location %d in file `%s'\n" msgstr "" -#: debug.c:3404 +#: debug.c:3424 #, fuzzy, c-format msgid "element not in array\n" msgstr "delete: Index »%s« ist in Feld »%s« nicht vorhanden" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "untyped variable\n" msgstr "" -#: debug.c:3446 +#: debug.c:3466 #, c-format msgid "Stopping in %s ...\n" msgstr "" -#: debug.c:3523 +#: debug.c:3543 #, c-format msgid "'finish' not meaningful with non-local jump '%s'\n" msgstr "" -#: debug.c:3530 +#: debug.c:3550 #, c-format msgid "'until' not meaningful with non-local jump '%s'\n" msgstr "" -#: debug.c:4165 +#: debug.c:4185 msgid "\t------[Enter] to continue or q [Enter] to quit------" msgstr "" -#: debug.c:4166 +#: debug.c:4186 msgid "q" msgstr "" -#: debug.c:4986 +#: debug.c:5001 #, fuzzy, c-format msgid "[\"%s\"] not in array `%s'" msgstr "delete: Index »%s« ist in Feld »%s« nicht vorhanden" -#: debug.c:5192 +#: debug.c:5207 #, c-format msgid "sending output to stdout\n" msgstr "" -#: debug.c:5232 +#: debug.c:5247 msgid "invalid number" msgstr "" -#: debug.c:5366 +#: debug.c:5381 #, fuzzy, c-format msgid "`%s' not allowed in current context; statement ignored" msgstr "»exit« kann im aktuellen Kontext nicht aufgerufen werden" -#: debug.c:5374 +#: debug.c:5389 #, fuzzy msgid "`return' not allowed in current context; statement ignored" msgstr "»exit« kann im aktuellen Kontext nicht aufgerufen werden" -#: debug.c:5575 +#: debug.c:5590 #, c-format msgid "No symbol `%s' in current context" msgstr "" -#: 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:1192 +#: 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 msgid "unbalanced [" msgstr "" -#: dfa.c:1052 +#: dfa.c:1174 #, fuzzy msgid "invalid character class" msgstr "Ungültiger Name für eine Zeichenklasse" -#: dfa.c:1229 +#: dfa.c:1316 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "" -#: dfa.c:1281 +#: dfa.c:1366 msgid "unfinished \\ escape" msgstr "" -#: dfa.c:1428 regcomp.c:161 +#: dfa.c:1513 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "Ungültiger Inhalt von \\{\\}" -#: dfa.c:1431 regcomp.c:176 +#: dfa.c:1516 regcomp.c:176 msgid "Regular expression too big" msgstr "Regulärer Ausdruck ist zu groß" -#: dfa.c:1816 +#: dfa.c:1936 msgid "unbalanced (" msgstr "" -#: dfa.c:1943 +#: dfa.c:2062 msgid "no syntax specified" msgstr "" -#: dfa.c:1951 +#: dfa.c:2070 msgid "unbalanced )" msgstr "" @@ -1848,11 +1858,11 @@ msgstr "Unbekannter Opcode %d" msgid "opcode %s not an operator or keyword" msgstr "Opcode %s ist weder ein Operator noch ein Schlüsselwort" -#: eval.c:471 +#: eval.c:472 msgid "buffer overflow in genflags2str" msgstr "Pufferüberlauf in genflags2str" -#: eval.c:674 +#: eval.c:675 #, c-format msgid "" "\n" @@ -1863,71 +1873,71 @@ msgstr "" "\t# Funktions-Aufruf-Stack\n" "\n" -#: eval.c:703 +#: eval.c:704 msgid "`IGNORECASE' is a gawk extension" msgstr "»IGNORECASE« ist eine gawk-Erweiterung" -#: eval.c:735 +#: eval.c:736 msgid "`BINMODE' is a gawk extension" msgstr "»BINMODE« ist eine gawk-Erweiterung" -#: eval.c:793 +#: eval.c:794 #, 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:884 +#: eval.c:885 #, c-format msgid "bad `%sFMT' specification `%s'" msgstr "Falsche »%sFMT«-Angabe »%s«" -#: eval.c:968 +#: eval.c:969 msgid "turning off `--lint' due to assignment to `LINT'" msgstr "»--lint« wird abgeschaltet, da an »LINT« zugewiesen wird" -#: eval.c:1146 +#: eval.c:1147 #, c-format msgid "reference to uninitialized argument `%s'" msgstr "Referenz auf nicht initialisiertes Argument »%s«" -#: eval.c:1147 +#: eval.c:1148 #, c-format msgid "reference to uninitialized variable `%s'" msgstr "Referenz auf die nicht initialisierte Variable »%s«" -#: eval.c:1165 +#: eval.c:1166 msgid "attempt to field reference from non-numeric value" msgstr "Nicht numerischer Wert für Feldreferenz verwendet" -#: eval.c:1167 +#: eval.c:1168 msgid "attempt to field reference from null string" msgstr "Referenz auf ein Feld von einem Null-String" -#: eval.c:1175 +#: eval.c:1176 #, c-format msgid "attempt to access field %ld" msgstr "Versuch des Zugriffs auf Feld %ld" -#: eval.c:1184 +#: eval.c:1185 #, c-format msgid "reference to uninitialized field `$%ld'" msgstr "Referenz auf das nicht initialisierte Feld »$%ld«" -#: eval.c:1271 +#: eval.c:1272 #, c-format msgid "function `%s' called with more arguments than declared" msgstr "Funktion »%s« mit zu vielen Argumenten aufgerufen" -#: eval.c:1466 +#: eval.c:1473 #, c-format msgid "unwind_stack: unexpected type `%s'" msgstr "unwind_stack: unerwarteter Typ »%s«" -#: eval.c:1562 +#: eval.c:1569 msgid "division by zero attempted in `/='" msgstr "Division durch Null versucht in »/=«" -#: eval.c:1569 +#: eval.c:1576 #, c-format msgid "division by zero attempted in `%%='" msgstr "Division durch Null versucht in »%%=«" @@ -1941,7 +1951,7 @@ msgstr "Erweiterungen sind im Sandbox-Modus nicht erlaubt" msgid "-l / @load are gawk extensions" msgstr "»@include« ist eine gawk-Erweiterung" -#: ext.c:95 ext.c:177 +#: ext.c:95 msgid "load_ext: received NULL lib_name" msgstr "" @@ -1974,6 +1984,10 @@ msgstr "" msgid "`extension' is a gawk extension" msgstr "»extension« ist eine gawk-Erweiterung" +#: ext.c:177 +msgid "extension: received NULL lib_name" +msgstr "" + #: ext.c:180 #, fuzzy, c-format msgid "extension: cannot open library `%s' (%s)" @@ -1999,39 +2013,39 @@ msgstr "" msgid "make_builtin: missing function name" msgstr "Erweiterung: Funktionsname fehlt" -#: ext.c:238 +#: ext.c:236 #, fuzzy, c-format msgid "make_builtin: can't redefine function `%s'" msgstr "Erweiterung: Funktion »%s« kann nicht neu definiert werden" -#: ext.c:242 +#: ext.c:240 #, fuzzy, c-format msgid "make_builtin: function `%s' already defined" msgstr "Erweiterung: Funktion »%s« wurde bereits definiert" -#: ext.c:246 +#: ext.c:244 #, fuzzy, c-format msgid "make_builtin: function name `%s' previously defined" msgstr "Erweiterung: Funktion »%s« wurde bereits vorher definiert" -#: ext.c:248 +#: ext.c:246 #, fuzzy, c-format msgid "make_builtin: can't use gawk built-in `%s' as function name" msgstr "" "Erweiterung: die eingebaute Funktion »%s« kann nicht als Funktionsname " "verwendet werden" -#: ext.c:251 ext.c:304 +#: ext.c:249 ext.c:304 #, c-format msgid "make_builtin: negative argument count for function `%s'" msgstr "make_builtin: negative Anzahl von Argumenten für Funktion »%s«" -#: ext.c:278 +#: ext.c:276 #, fuzzy msgid "extension: missing function name" msgstr "Erweiterung: Funktionsname fehlt" -#: ext.c:283 +#: ext.c:279 ext.c:283 #, fuzzy, c-format msgid "extension: illegal character `%c' in function name `%s'" msgstr "Erweiterung: unzulässiges Zeichen »%c« in Funktionsname »%s«" @@ -2058,159 +2072,164 @@ msgstr "" "Erweiterung: die eingebaute Funktion »%s« kann nicht als Funktionsname " "verwendet werden" -#: ext.c:374 +#: ext.c:375 #, 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" -#: ext.c:377 +#: ext.c:378 #, c-format msgid "function `%s': missing argument #%d" msgstr "Funktion »%s«: fehlendes Argument #%d" -#: ext.c:394 +#: ext.c:395 #, 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" -#: ext.c:398 +#: ext.c:399 #, 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" -#: ext.c:412 +#: ext.c:413 msgid "dynamic loading of library not supported" msgstr "" -#: extension/filefuncs.c:97 +#: extension/filefuncs.c:159 #, fuzzy msgid "chdir: called with incorrect number of arguments, expecting 1" msgstr "sqrt: das Argument %g ist negativ" -#: extension/filefuncs.c:343 +#: extension/filefuncs.c:439 #, c-format msgid "stat: unable to read symbolic link `%s'" msgstr "" -#: extension/filefuncs.c:376 +#: extension/filefuncs.c:472 #, fuzzy msgid "stat: called with wrong number of arguments" msgstr "sqrt: das Argument %g ist negativ" -#: extension/filefuncs.c:383 +#: extension/filefuncs.c:479 #, fuzzy msgid "stat: bad parameters" msgstr "%s: ist ein Parameter\n" -#: extension/filefuncs.c:437 +#: extension/filefuncs.c:533 #, fuzzy, c-format msgid "fts init: could not create variable %s" msgstr "index: Zweites Argument ist kein string" -#: extension/filefuncs.c:460 +#: extension/filefuncs.c:554 +#, fuzzy +msgid "fts is not supported on this system" +msgstr "»%s« wird im alten awk nicht unterstützt" + +#: extension/filefuncs.c:573 msgid "fill_stat_element: could not create array" msgstr "" -#: extension/filefuncs.c:469 +#: extension/filefuncs.c:582 msgid "fill_stat_element: could not set element" msgstr "" -#: extension/filefuncs.c:484 +#: extension/filefuncs.c:597 #, fuzzy msgid "fill_path_element: could not set element" msgstr "index: Zweites Argument ist kein string" -#: extension/filefuncs.c:500 +#: extension/filefuncs.c:613 msgid "fill_error_element: could not set element" msgstr "" -#: extension/filefuncs.c:547 extension/filefuncs.c:594 +#: extension/filefuncs.c:660 extension/filefuncs.c:707 msgid "fts-process: could not create array" msgstr "" -#: extension/filefuncs.c:557 extension/filefuncs.c:604 -#: extension/filefuncs.c:622 +#: extension/filefuncs.c:670 extension/filefuncs.c:717 +#: extension/filefuncs.c:735 #, fuzzy msgid "fts-process: could not set element" msgstr "index: Zweites Argument ist kein string" -#: extension/filefuncs.c:671 +#: extension/filefuncs.c:784 #, fuzzy msgid "fts: called with incorrect number of arguments, expecting 3" msgstr "sqrt: das Argument %g ist negativ" -#: extension/filefuncs.c:674 +#: extension/filefuncs.c:787 #, fuzzy msgid "fts: bad first parameter" msgstr "%s: ist ein Parameter\n" -#: extension/filefuncs.c:680 +#: extension/filefuncs.c:793 #, fuzzy msgid "fts: bad second parameter" msgstr "%s: ist ein Parameter\n" -#: extension/filefuncs.c:686 +#: extension/filefuncs.c:799 #, fuzzy msgid "fts: bad third parameter" msgstr "%s: ist ein Parameter\n" -#: extension/filefuncs.c:693 +#: extension/filefuncs.c:806 #, fuzzy msgid "fts: could not flatten array\n" msgstr "»%s« ist kein gültiger Variablenname" -#: extension/filefuncs.c:711 +#: extension/filefuncs.c:824 msgid "fts: ignoring sneaky FTS_NOSTAT flag. nyah, nyah, nyah." msgstr "" -#: extension/filefuncs.c:728 +#: extension/filefuncs.c:841 msgid "fts: clear_array() failed\n" msgstr "" -#: extension/fnmatch.c:98 +#: extension/fnmatch.c:112 #, fuzzy msgid "fnmatch: called with less than three arguments" msgstr "sqrt: das Argument %g ist negativ" -#: extension/fnmatch.c:101 +#: extension/fnmatch.c:115 #, fuzzy msgid "fnmatch: called with more than three arguments" msgstr "sqrt: das Argument %g ist negativ" -#: extension/fnmatch.c:104 +#: extension/fnmatch.c:118 #, fuzzy msgid "fnmatch: could not get first argument" msgstr "strftime: Das erste Argument ist kein String" -#: extension/fnmatch.c:109 +#: extension/fnmatch.c:123 #, fuzzy msgid "fnmatch: could not get second argument" msgstr "index: Zweites Argument ist kein string" -#: extension/fnmatch.c:114 +#: extension/fnmatch.c:128 msgid "fnmatch: could not get third argument" msgstr "" -#: extension/fnmatch.c:127 +#: extension/fnmatch.c:141 msgid "fnmatch is not implemented on this system\n" msgstr "" -#: extension/fnmatch.c:159 +#: extension/fnmatch.c:173 msgid "fnmatch init: could not add FNM_NOMATCH variable" msgstr "" -#: extension/fnmatch.c:169 +#: extension/fnmatch.c:183 #, c-format msgid "fnmatch init: could not set array element %s" msgstr "" -#: extension/fnmatch.c:179 +#: extension/fnmatch.c:193 msgid "fnmatch init: could not install FNM array" msgstr "" @@ -2238,88 +2257,88 @@ msgstr "sqrt: das Argument %g ist negativ" msgid "wait: called with too many arguments" msgstr "sqrt: das Argument %g ist negativ" -#: extension/inplace.c:110 +#: extension/inplace.c:130 msgid "inplace_begin: in-place editing already active" msgstr "" -#: extension/inplace.c:113 extension/inplace.c:187 +#: extension/inplace.c:133 extension/inplace.c:207 #, c-format msgid "inplace_begin: expects 2 arguments but called with %d" msgstr "" -#: extension/inplace.c:116 +#: extension/inplace.c:136 msgid "inplace_begin: cannot retrieve 1st argument as a string filename" msgstr "" -#: extension/inplace.c:124 +#: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" msgstr "" -#: extension/inplace.c:131 +#: extension/inplace.c:151 #, fuzzy, c-format msgid "inplace_begin: Cannot stat `%s' (%s)" msgstr "Fatal: extension: »%s« kann nicht geöffnet werden (%s)\n" -#: extension/inplace.c:138 +#: extension/inplace.c:158 #, fuzzy, c-format msgid "inplace_begin: `%s' is not a regular file" msgstr "»%s« ist kein gültiger Variablenname" -#: extension/inplace.c:149 +#: extension/inplace.c:169 #, c-format msgid "inplace_begin: mkstemp(`%s') failed (%s)" msgstr "" -#: extension/inplace.c:158 +#: extension/inplace.c:178 #, fuzzy, c-format msgid "inplace_begin: chmod failed (%s)" msgstr "%s: close ist gescheitert (%s)" -#: extension/inplace.c:165 +#: extension/inplace.c:185 #, c-format msgid "inplace_begin: dup(stdout) failed (%s)" msgstr "" -#: extension/inplace.c:168 +#: extension/inplace.c:188 #, c-format msgid "inplace_begin: dup2(%d, stdout) failed (%s)" msgstr "" -#: extension/inplace.c:171 +#: extension/inplace.c:191 #, fuzzy, c-format msgid "inplace_begin: close(%d) failed (%s)" msgstr "%s: close ist gescheitert (%s)" -#: extension/inplace.c:190 +#: extension/inplace.c:210 msgid "inplace_end: cannot retrieve 1st argument as a string filename" msgstr "" -#: extension/inplace.c:197 +#: extension/inplace.c:217 msgid "inplace_end: in-place editing not active" msgstr "" -#: extension/inplace.c:203 +#: extension/inplace.c:223 #, c-format msgid "inplace_end: dup2(%d, stdout) failed (%s)" msgstr "" -#: extension/inplace.c:206 +#: extension/inplace.c:226 #, fuzzy, c-format msgid "inplace_end: close(%d) failed (%s)" msgstr "%s: close ist gescheitert (%s)" -#: extension/inplace.c:210 +#: extension/inplace.c:230 #, c-format msgid "inplace_end: fsetpos(stdout) failed (%s)" msgstr "" -#: extension/inplace.c:223 +#: extension/inplace.c:243 #, fuzzy, c-format msgid "inplace_end: link(`%s', `%s') failed (%s)" msgstr "Das Leeren der Pipe »%s« ist gescheitert (%s)" -#: extension/inplace.c:229 +#: extension/inplace.c:253 #, fuzzy, c-format msgid "inplace_end: rename(`%s', `%s') failed (%s)" msgstr "Das Schließen des Dateideskriptors %d (»%s«) ist gescheitert (%s)" @@ -2354,185 +2373,185 @@ msgstr "sqrt: das Argument %g ist negativ" msgid "chr: called with inappropriate argument(s)" msgstr "sqrt: das Argument %g ist negativ" -#: extension/readdir.c:203 +#: extension/readdir.c:281 #, c-format msgid "dir_take_control_of: opendir/fdopendir failed: %s" msgstr "" -#: extension/readfile.c:84 +#: extension/readfile.c:113 #, fuzzy msgid "readfile: called with too many arguments" msgstr "sqrt: das Argument %g ist negativ" -#: extension/readfile.c:118 +#: extension/readfile.c:137 #, fuzzy msgid "readfile: called with no arguments" msgstr "sqrt: das Argument %g ist negativ" -#: extension/rwarray.c:120 +#: extension/rwarray.c:124 #, fuzzy msgid "writea: called with too many arguments" msgstr "sqrt: das Argument %g ist negativ" -#: extension/rwarray.c:127 +#: extension/rwarray.c:131 #, fuzzy, c-format msgid "do_writea: argument 0 is not a string\n" msgstr "exp: das Argument %g liegt außerhalb des gültigen Bereichs" -#: extension/rwarray.c:133 +#: extension/rwarray.c:137 #, fuzzy, c-format msgid "do_writea: argument 1 is not an array\n" msgstr "split: das vierte Argument ist kein Feld" -#: extension/rwarray.c:180 +#: extension/rwarray.c:184 #, c-format msgid "write_array: could not flatten array\n" msgstr "" -#: extension/rwarray.c:194 +#: extension/rwarray.c:198 #, c-format msgid "write_array: could not release flattened array\n" msgstr "" -#: extension/rwarray.c:276 +#: extension/rwarray.c:280 #, fuzzy msgid "reada: called with too many arguments" msgstr "sqrt: das Argument %g ist negativ" -#: extension/rwarray.c:283 +#: extension/rwarray.c:287 #, fuzzy, c-format msgid "do_reada: argument 0 is not a string\n" msgstr "exp: das Argument %g liegt außerhalb des gültigen Bereichs" -#: extension/rwarray.c:289 +#: extension/rwarray.c:293 #, fuzzy, c-format msgid "do_reada: argument 1 is not an array\n" msgstr "match: das dritte Argument ist kein Array" -#: extension/rwarray.c:333 +#: extension/rwarray.c:337 #, c-format msgid "do_reada: clear_array failed\n" msgstr "" -#: extension/rwarray.c:370 +#: extension/rwarray.c:374 #, c-format msgid "read_array: set_array_element failed\n" msgstr "" -#: extension/time.c:81 +#: extension/time.c:113 #, fuzzy msgid "gettimeofday: ignoring arguments" msgstr "mktime: Das Argument ist kein String" -#: extension/time.c:112 +#: extension/time.c:144 msgid "gettimeofday: not supported on this platform" msgstr "" -#: extension/time.c:133 +#: extension/time.c:165 #, fuzzy msgid "sleep: called with too many arguments" msgstr "sqrt: das Argument %g ist negativ" -#: extension/time.c:136 +#: extension/time.c:168 #, fuzzy msgid "sleep: missing required numeric argument" msgstr "exp: das Argument ist keine Zahl" -#: extension/time.c:142 +#: extension/time.c:174 #, fuzzy msgid "sleep: argument is negative" msgstr "exp: das Argument %g liegt außerhalb des gültigen Bereichs" -#: extension/time.c:176 +#: extension/time.c:208 msgid "sleep: not supported on this platform" msgstr "" -#: field.c:339 +#: field.c:345 msgid "NF set to negative value" msgstr "NF wird ein negativer Wert zugewiesen" -#: field.c:964 field.c:971 field.c:975 +#: field.c:971 field.c:978 field.c:982 msgid "split: fourth argument is a gawk extension" msgstr "split: das vierte Argument ist eine gawk-Erweiterung" -#: field.c:968 +#: field.c:975 msgid "split: fourth argument is not an array" msgstr "split: das vierte Argument ist kein Feld" -#: field.c:982 +#: field.c:989 msgid "split: second argument is not an array" msgstr "split: das zweite Argument ist kein Feld" -#: field.c:986 +#: field.c:993 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" -#: field.c:991 +#: field.c:998 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" -#: field.c:994 +#: field.c:1001 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" -#: field.c:1023 +#: field.c:1032 msgid "split: null string for third arg is a gawk extension" msgstr "split: Null-String als drittes Argument ist eine gawk-Erweiterung" -#: field.c:1063 +#: field.c:1072 msgid "patsplit: fourth argument is not an array" msgstr "patsplit: Das vierte Argument ist kein Feld" -#: field.c:1068 +#: field.c:1077 msgid "patsplit: second argument is not an array" msgstr "patsplit: Das zweite Argument ist kein Feld" -#: field.c:1074 +#: field.c:1083 msgid "patsplit: third argument must be non-null" msgstr "patsplit: Das dritte Argument darf nicht Null sein" -#: field.c:1078 +#: field.c:1087 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" -#: field.c:1083 +#: field.c:1092 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" -#: field.c:1086 +#: field.c:1095 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" -#: field.c:1124 +#: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" msgstr "»FIELDWIDTHS« ist eine gawk-Erweiterung" -#: field.c:1188 +#: field.c:1197 #, c-format msgid "invalid FIELDWIDTHS value, near `%s'" msgstr "ungültiger FIELDWIDTHS-Wert nah bei »%s«" -#: field.c:1261 +#: field.c:1270 msgid "null string for `FS' is a gawk extension" msgstr "Null-String für »FS« ist eine gawk-Erweiterung" -#: field.c:1265 +#: field.c:1274 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:1384 +#: field.c:1393 msgid "`FPAT' is a gawk extension" msgstr "»FPAT« ist eine gawk-Erweiterung" @@ -2548,610 +2567,610 @@ msgstr "" msgid "node_to_awk_value: received null val" msgstr "" -#: gawkapi.c:808 +#: gawkapi.c:807 #, fuzzy msgid "remove_element: received null array" msgstr "length: Argument ist ein Feld" -#: gawkapi.c:811 +#: gawkapi.c:810 msgid "remove_element: received null subscript" msgstr "" -#: gawkapi.c:943 +#: gawkapi.c:947 #, c-format msgid "api_flatten_array: could not convert index %d\n" msgstr "" -#: gawkapi.c:948 +#: gawkapi.c:952 #, c-format msgid "api_flatten_array: could not convert value %d\n" msgstr "" -#: getopt.c:603 getopt.c:632 +#: getopt.c:604 getopt.c:633 #, fuzzy, c-format msgid "%s: option '%s' is ambiguous; possibilities:" msgstr "%s: Option »%s« ist mehrdeutig\n" -#: getopt.c:678 getopt.c:682 +#: getopt.c:679 getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: Die Option »--%s« hat keine Argumente\n" -#: getopt.c:691 getopt.c:696 +#: getopt.c:692 getopt.c:697 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: Die Option »%c%s« hat keine Argument\n" -#: getopt.c:739 getopt.c:758 +#: getopt.c:740 getopt.c:759 #, c-format msgid "%s: option '--%s' requires an argument\n" msgstr "%s: Die Option »%s« erfordert ein Argument\n" -#: getopt.c:796 getopt.c:799 +#: getopt.c:797 getopt.c:800 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: Die Option »--%s« ist unbekannt\n" -#: getopt.c:807 getopt.c:810 +#: getopt.c:808 getopt.c:811 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: Die Option »%c%s« ist unbekannt\n" -#: getopt.c:859 getopt.c:862 +#: getopt.c:860 getopt.c:863 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: Ungültige Option -- »%c«\n" -#: getopt.c:915 getopt.c:932 getopt.c:1142 getopt.c:1160 +#: getopt.c:916 getopt.c:933 getopt.c:1143 getopt.c:1161 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s Die Option »%c« erfordert ein Argument\n" -#: getopt.c:988 getopt.c:1004 +#: getopt.c:989 getopt.c:1005 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: Die Option »-W %s« ist mehrdeutig\n" -#: getopt.c:1028 getopt.c:1046 +#: getopt.c:1029 getopt.c:1047 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: Die Option »-W %s« hat keine Argumente\n" -#: getopt.c:1067 getopt.c:1085 +#: getopt.c:1068 getopt.c:1086 #, c-format msgid "%s: option '-W %s' requires an argument\n" msgstr "%s: Die Option »-W %s« erfordert ein Argument\n" -#: io.c:347 +#: io.c:392 #, c-format msgid "command line argument `%s' is a directory: skipped" msgstr "" "das Kommandozeilen-Argument »%s« ist ein Verzeichnis: wird übersprungen" -#: io.c:350 io.c:463 +#: io.c:395 io.c:513 #, c-format msgid "cannot open file `%s' for reading (%s)" msgstr "Die Datei »%s« kann nicht zum Lesen geöffnet werden (%s)" -#: io.c:590 +#: io.c:640 #, c-format msgid "close of fd %d (`%s') failed (%s)" msgstr "Das Schließen des Dateideskriptors %d (»%s«) ist gescheitert (%s)" -#: io.c:666 +#: io.c:716 msgid "redirection not allowed in sandbox mode" msgstr "Umlenkungen sind im Sandbox-Modus nicht erlaubt" -#: io.c:700 +#: io.c:750 #, c-format msgid "expression in `%s' redirection only has numeric value" msgstr "" "Der Ausdruck in einer Umlenkung mittels »%s« hat nur einen numerischen Wert" -#: io.c:706 +#: io.c:756 #, 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:711 +#: io.c:761 #, 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" -#: io.c:754 +#: io.c:809 #, c-format msgid "unnecessary mixing of `>' and `>>' for file `%.*s'" msgstr "Unnötige Kombination von »>« und »>>« für Datei »%.*s«" -#: io.c:808 +#: io.c:863 #, 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:818 +#: io.c:873 #, 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:849 +#: io.c:904 #, 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)" -#: io.c:928 +#: io.c:986 #, c-format msgid "can't redirect from `%s' (%s)" msgstr "Von »%s« kann nicht umgelenkt werden (%s)" -#: io.c:931 +#: io.c:989 #, c-format msgid "can't redirect to `%s' (%s)" msgstr "Zu »%s« kann nicht umgelenkt werden (%s)" -#: io.c:982 +#: 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:998 +#: io.c:1056 #, c-format msgid "close of `%s' failed (%s)." msgstr "Das Schließen von »%s« ist gescheitert (%s)." -#: io.c:1006 +#: io.c:1064 msgid "too many pipes or input files open" msgstr "Zu viele Pipes oder Eingabedateien offen" -#: io.c:1028 +#: io.c:1086 msgid "close: second argument must be `to' or `from'" msgstr "close: Das zweite Argument muss »to« oder »from« sein" -#: io.c:1045 +#: io.c:1103 #, 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:1050 +#: io.c:1108 msgid "close of redirection that was never opened" msgstr "»close« für eine Umlenkung, die nie geöffnet wurde" -#: io.c:1147 +#: io.c:1205 #, 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" -#: io.c:1164 +#: io.c:1222 #, c-format msgid "failure status (%d) on pipe close of `%s' (%s)" msgstr "Fehlerstatus (%d) beim Schließen der Pipe »%s« (%s)" -#: io.c:1167 +#: io.c:1225 #, c-format msgid "failure status (%d) on file close of `%s' (%s)" msgstr "Fehlerstatus (%d) beim Schließen der Datei »%s« (%s)" -#: io.c:1187 +#: io.c:1245 #, c-format msgid "no explicit close of socket `%s' provided" msgstr "Das explizite Schließen des Sockets »%s« fehlt" -#: io.c:1190 +#: io.c:1248 #, c-format msgid "no explicit close of co-process `%s' provided" msgstr "Das explizite Schließen des Ko-Prozesses »%s« fehlt" -#: io.c:1193 +#: io.c:1251 #, c-format msgid "no explicit close of pipe `%s' provided" msgstr "Das explizite Schließen der Pipe »%s« fehlt" -#: io.c:1196 +#: io.c:1254 #, c-format msgid "no explicit close of file `%s' provided" msgstr "Das explizite Schließen der Datei »%s« fehlt" -#: io.c:1224 io.c:1279 main.c:842 main.c:879 +#: io.c:1284 io.c:1342 main.c:864 main.c:906 #, c-format msgid "error writing standard output (%s)" msgstr "Fehler beim Schreiben auf die Standardausgabe (%s)" -#: io.c:1228 io.c:1284 +#: io.c:1289 io.c:1348 main.c:866 #, c-format msgid "error writing standard error (%s)" msgstr "Fehler beim Schreiben auf die Standardfehlerausgabe (%s)" -#: io.c:1236 +#: io.c:1297 #, c-format msgid "pipe flush of `%s' failed (%s)." msgstr "Das Leeren der Pipe »%s« ist gescheitert (%s)" -#: io.c:1239 +#: io.c:1300 #, 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:1242 +#: io.c:1303 #, c-format msgid "file flush of `%s' failed (%s)." msgstr "Das Leeren der Datei »%s« ist gescheitert (%s)" -#: io.c:1356 +#: io.c:1420 #, c-format msgid "local port %s invalid in `/inet'" msgstr "Der lokale Port »%s« ist ungültig in »/inet«" -#: io.c:1374 +#: io.c:1438 #, 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:1526 +#: 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:1540 +#: io.c:1604 #, c-format msgid "special file name `%s' is incomplete" msgstr "Der Dateiname »%s« ist unvollständig" -#: io.c:1557 +#: io.c:1621 msgid "must supply a remote hostname to `/inet'" msgstr "Sie müssen in /inet einen Rechnernamen angeben" -#: io.c:1575 +#: io.c:1639 msgid "must supply a remote port to `/inet'" msgstr "Sie müssen in »/inet« einen Port angeben" -#: io.c:1621 +#: io.c:1685 msgid "TCP/IP communications are not supported" msgstr "TCP/IP-Verbindungen werden nicht unterstützt" -#: io.c:1796 +#: io.c:1867 #, c-format msgid "could not open `%s', mode `%s'" msgstr "»%s« konnte nicht geöffnet werden, Modus »%s«" -#: io.c:1846 +#: io.c:1917 #, c-format msgid "close of master pty failed (%s)" msgstr "" "Das Schließen der übergeordneten Terminal-Gerätedatei ist gescheitert (%s)" -#: io.c:1848 io.c:2024 io.c:2194 +#: io.c:1919 io.c:2105 io.c:2305 #, c-format msgid "close of stdout in child failed (%s)" msgstr "Das Schließen der Standardausgabe im Kindprozess ist gescheitert (%s)" -#: io.c:1851 +#: io.c:1922 #, 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)" -#: io.c:1853 io.c:2029 +#: io.c:1924 io.c:2110 #, c-format msgid "close of stdin in child failed (%s)" msgstr "Schließen von stdin im Kindprozess gescheitert (%s)" -#: io.c:1856 +#: io.c:1927 #, 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)" -#: io.c:1858 io.c:1879 +#: io.c:1929 io.c:1951 #, c-format msgid "close of slave pty failed (%s)" msgstr "" "Das Schließen der untergeordneten Terminal-Gerätedatei ist gescheitert (%s)" -#: io.c:1965 io.c:2027 io.c:2171 io.c:2197 +#: io.c:2040 io.c:2108 io.c:2276 io.c:2308 #, 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)" -#: io.c:1972 io.c:2032 +#: io.c:2047 io.c:2113 #, 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)" -#: io.c:1992 io.c:2187 +#: io.c:2073 io.c:2298 msgid "restoring stdout in parent process failed\n" msgstr "" "Das Wiederherstellen der Standardausgabe im Elternprozess ist gescheitert\n" -#: io.c:2000 +#: io.c:2081 msgid "restoring stdin in parent process failed\n" msgstr "" "Das Wiederherstellen der Standardeingabe im Elternprozess ist gescheitert\n" -#: io.c:2035 io.c:2199 io.c:2213 +#: io.c:2116 io.c:2310 io.c:2324 #, c-format msgid "close of pipe failed (%s)" msgstr "Das Schließen der Pipe ist gescheitert (%s)" -#: io.c:2089 +#: io.c:2174 msgid "`|&' not supported" msgstr "»|&« wird nicht unterstützt" -#: io.c:2156 +#: io.c:2261 #, c-format msgid "cannot open pipe `%s' (%s)" msgstr "Pipe »%s« kann nicht geöffnet werden (%s)" -#: io.c:2207 +#: io.c:2318 #, c-format msgid "cannot create child process for `%s' (fork: %s)" msgstr "Kindprozess für »%s« kann nicht erzeugt werden (fork: %s)" -#: io.c:2667 +#: io.c:2790 msgid "register_input_parser: received NULL pointer" msgstr "" -#: io.c:2695 +#: io.c:2818 #, c-format msgid "input parser `%s' conflicts with previously installed input parser `%s'" msgstr "" -#: io.c:2702 +#: io.c:2825 #, c-format msgid "input parser `%s' failed to open `%s'" msgstr "" -#: io.c:2722 +#: io.c:2845 msgid "register_output_wrapper: received NULL pointer" msgstr "" -#: io.c:2750 +#: io.c:2873 #, c-format msgid "" "output wrapper `%s' conflicts with previously installed output wrapper `%s'" msgstr "" -#: io.c:2757 +#: io.c:2880 #, c-format msgid "output wrapper `%s' failed to open `%s'" msgstr "" -#: io.c:2778 +#: io.c:2901 msgid "register_output_processor: received NULL pointer" msgstr "" -#: io.c:2807 +#: io.c:2930 #, c-format msgid "" "two-way processor `%s' conflicts with previously installed two-way processor " "`%s'" msgstr "" -#: io.c:2816 +#: io.c:2939 #, c-format msgid "two way processor `%s' failed to open `%s'" msgstr "" -#: io.c:2923 +#: io.c:3064 #, c-format msgid "data file `%s' is empty" msgstr "Die Datei »%s« ist leer" -#: io.c:2965 io.c:2973 +#: io.c:3106 io.c:3114 msgid "could not allocate more input memory" msgstr "Es konnte kein weiterer Speicher für die Eingabe beschafft werden" -#: io.c:3539 +#: io.c:3682 msgid "multicharacter value of `RS' is a gawk extension" msgstr "Multicharacter-Wert von »RS« ist eine gawk-Erweiterung" -#: io.c:3628 +#: io.c:3771 msgid "IPv6 communication is not supported" msgstr "IPv6-Verbindungen werden nicht unterstützt" -#: main.c:388 +#: main.c:405 msgid "empty argument to `-e/--source' ignored" msgstr "Das leere Argument für »--source« wird ignoriert" -#: main.c:478 +#: 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:524 +#: main.c:541 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: Die Option %c erfordert ein Argument\n" -#: main.c:545 +#: main.c:562 msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'" msgstr "" "Die Umgebungsvariable »POSIXLY_CORRECT« ist gesetzt: »--posix« wird " "eingeschaltet" -#: main.c:551 +#: main.c:568 msgid "`--posix' overrides `--traditional'" msgstr "»--posix« hat Vorrang vor »--traditional«" -#: main.c:562 +#: main.c:579 msgid "`--posix'/`--traditional' overrides `--non-decimal-data'" msgstr "»--posix« /»--traditional« hat Vorrang vor »--non-decimal-data«" -#: main.c:566 +#: main.c:583 #, 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:571 +#: main.c:588 #, fuzzy msgid "`--posix' overrides `--characters-as-bytes'" msgstr "»--posix« hat Vorrang vor »--binary«" -#: main.c:630 +#: main.c:647 #, 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)" -#: main.c:633 +#: main.c:650 #, 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)" -#: main.c:635 +#: main.c:652 #, 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)" -#: main.c:693 +#: main.c:710 msgid "no program text at all!" msgstr "Es wurde überhaupt kein Programmtext angegeben!" -#: main.c:779 +#: main.c:799 #, 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:781 +#: main.c:801 #, 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:786 +#: main.c:806 msgid "POSIX options:\t\tGNU long options: (standard)\n" msgstr "POSIX-Optionen\t\tlange GNU-Optionen: (standard)\n" -#: main.c:787 +#: main.c:807 msgid "\t-f progfile\t\t--file=progfile\n" msgstr "\t-f PROGRAMM\t\t--file=PROGRAMM\n" -#: main.c:788 +#: main.c:808 msgid "\t-F fs\t\t\t--field-separator=fs\n" msgstr "\t-F Feldtrenner\t\t\t--field-separator=Feldtrenner\n" -#: main.c:789 +#: main.c:809 msgid "\t-v var=val\t\t--assign=var=val\n" msgstr "\t-v var=Wert\t\t--assign=var=Wert\n" -#: main.c:790 +#: main.c:810 msgid "Short options:\t\tGNU long options: (extensions)\n" msgstr "POSIX-Optionen\t\tGNU-Optionen (lang): (Erweiterungen)\n" -#: main.c:791 +#: main.c:811 msgid "\t-b\t\t\t--characters-as-bytes\n" msgstr "\t-b\t\t\t--characters-as-bytes\n" -#: main.c:792 +#: main.c:812 msgid "\t-c\t\t\t--traditional\n" msgstr "\t-c\t\t\t--traditional\n" -#: main.c:793 +#: main.c:813 msgid "\t-C\t\t\t--copyright\n" msgstr "\t-C\t\t\t--copyright\n" -#: main.c:794 +#: main.c:814 msgid "\t-d[file]\t\t--dump-variables[=file]\n" msgstr "\t-d [Datei]\t\t--dump-variables[=Datei]\n" -#: main.c:795 +#: main.c:815 #, fuzzy msgid "\t-D[file]\t\t--debug[=file]\n" msgstr "\t-p [Datei]\t\t--profile[=Datei]\n" -#: main.c:796 +#: main.c:816 msgid "\t-e 'program-text'\t--source='program-text'\n" msgstr "\t-e 'Programmtext'\t--source=Programmtext\n" -#: main.c:797 +#: main.c:817 msgid "\t-E file\t\t\t--exec=file\n" msgstr "\t-E Datei\t\t\t--exec=Datei\n" -#: main.c:798 +#: main.c:818 msgid "\t-g\t\t\t--gen-pot\n" msgstr "\t-g\t\t\t--gen-pot\n" -#: main.c:799 +#: main.c:819 msgid "\t-h\t\t\t--help\n" msgstr "\t-h\t\t\t--help\n" -#: main.c:800 +#: main.c:820 msgid "\t-i includefile\t\t--include=includefile\n" msgstr "" -#: main.c:801 +#: main.c:821 msgid "\t-l library\t\t--load=library\n" msgstr "" -#: main.c:802 +#: main.c:822 msgid "\t-L [fatal]\t\t--lint[=fatal]\n" msgstr "\t-L [fatal]\t\t--lint[=fatal]\n" -#: main.c:803 +#: 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:804 +#: main.c:824 #, fuzzy msgid "\t-M\t\t\t--bignum\n" msgstr "\t-g\t\t\t--gen-pot\n" -#: main.c:805 +#: main.c:825 msgid "\t-N\t\t\t--use-lc-numeric\n" msgstr "\t-N\t\t\t--use-lc-numeric\n" -#: main.c:806 +#: main.c:826 #, fuzzy msgid "\t-o[file]\t\t--pretty-print[=file]\n" msgstr "\t-p [Datei]\t\t--profile[=Datei]\n" -#: main.c:807 +#: main.c:827 msgid "\t-O\t\t\t--optimize\n" msgstr "\t-O\t\t\t--optimize\n" -#: main.c:808 +#: main.c:828 msgid "\t-p[file]\t\t--profile[=file]\n" msgstr "\t-p [Datei]\t\t--profile[=Datei]\n" -#: main.c:809 +#: main.c:829 msgid "\t-P\t\t\t--posix\n" msgstr "\t-P\t\t\t--posix\n" -#: main.c:810 +#: main.c:830 msgid "\t-r\t\t\t--re-interval\n" msgstr "\t-r\t\t\t--re-interval\n" -#: main.c:811 +#: main.c:831 msgid "\t-S\t\t\t--sandbox\n" msgstr "\t-S\t\t\t--sandbox\n" -#: main.c:812 +#: main.c:832 msgid "\t-t\t\t\t--lint-old\n" msgstr "\t-t\t\t\t--lint-old\n" -#: main.c:813 +#: main.c:833 msgid "\t-V\t\t\t--version\n" msgstr "\t-V\t\t\t--version\n" -#: main.c:815 +#: main.c:835 msgid "\t-W nostalgia\t\t--nostalgia\n" msgstr "\t-W nostalgia\t\t--nostalgia\n" -#: main.c:818 +#: main.c:838 msgid "\t-Y\t\t--parsedebug\n" msgstr "\t-Y\t\t--parsedebug\n" @@ -3160,7 +3179,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:827 +#: main.c:847 msgid "" "\n" "To report bugs, see node `Bugs' in `gawk.info', which is\n" @@ -3176,7 +3195,7 @@ msgstr "" "an translation-team-de@lists.sourceforge.net\n" "\n" -#: main.c:831 +#: main.c:851 msgid "" "gawk is a pattern scanning and processing language.\n" "By default it reads standard input and writes standard output.\n" @@ -3187,7 +3206,7 @@ msgstr "" "auf der Standardausgabe aus.\n" "\n" -#: main.c:835 +#: main.c:855 msgid "" "Examples:\n" "\tgawk '{ sum += $1 }; END { print sum }' file\n" @@ -3197,7 +3216,7 @@ msgstr "" "\tgawk '{ sum += $1 }; END { print sum }' file\n" "\tgawk -F: '{ print $1 }' /etc/passwd\n" -#: main.c:855 +#: main.c:880 #, c-format msgid "" "Copyright (C) 1989, 1991-%d Free Software Foundation.\n" @@ -3217,7 +3236,7 @@ msgstr "" "spätere Version.\n" "\n" -#: main.c:863 +#: main.c:888 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" @@ -3230,7 +3249,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:869 +#: main.c:894 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" @@ -3239,16 +3258,16 @@ msgstr "" "diesem Programm erhalten haben. Wenn nicht, lesen Sie bitte\n" "http://www.gnu.org/licenses/.\n" -#: main.c:904 +#: main.c:931 msgid "-Ft does not set FS to tab in POSIX awk" msgstr "-Ft setzt FS im POSIX-awk nicht auf Tab" -#: main.c:1181 +#: main.c:1208 #, c-format msgid "unknown value for field spec: %d\n" msgstr "unbekannter Wert für eine Feldangabe: %d\n" -#: main.c:1279 +#: main.c:1306 #, c-format msgid "" "%s: `%s' argument to `-v' not in `var=value' form\n" @@ -3257,50 +3276,50 @@ msgstr "" "%s: Argument »%s« von »-v« ist nicht in der Form »Variable=Wert«\n" "\n" -#: main.c:1305 +#: main.c:1332 #, c-format msgid "`%s' is not a legal variable name" msgstr "»%s« ist kein gültiger Variablenname" -#: main.c:1308 +#: main.c:1335 #, 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:1312 +#: main.c:1339 #, c-format msgid "cannot use gawk builtin `%s' as variable name" msgstr "" "die eingebaute Funktion »%s« kann nicht als Variablenname verwendet werden" # c-format -#: main.c:1317 +#: main.c:1344 #, c-format msgid "cannot use function `%s' as variable name" msgstr "Funktion »%s« kann nicht als Name einer Variablen verwendet werden" -#: main.c:1370 +#: main.c:1397 msgid "floating point exception" msgstr "Fließkomma-Ausnahme" -#: main.c:1377 +#: main.c:1404 msgid "fatal error: internal error" msgstr "Fataler Fehler: interner Fehler" -#: main.c:1392 +#: main.c:1419 msgid "fatal error: internal error: segfault" msgstr "Fataler Fehler: interner Fehler: Speicherbegrenzungsfehler" -#: main.c:1404 +#: main.c:1431 msgid "fatal error: internal error: stack overflow" msgstr "Fataler Fehler: interner Fehler: Stapelüberlauf" -#: main.c:1463 +#: main.c:1490 #, c-format msgid "no pre-opened fd %d" msgstr "Kein bereits geöffneter Dateideskriptor %d" -#: main.c:1470 +#: main.c:1497 #, c-format msgid "could not pre-open /dev/null for fd %d" msgstr "/dev/null konnte nicht für Dateideskriptor %d geöffnet werden" @@ -3359,7 +3378,7 @@ msgstr "or(%lf, %lf): Dezimalteil wird abgeschnitten" msgid "%s: argument #%d negative value %Zd will give strange results" msgstr "compl(%lf): Negativer Wert wird zu merkwürdigen Ergebnissen führen" -#: msg.c:61 +#: msg.c:68 #, c-format msgid "cmd. line:" msgstr "Kommandozeile:" @@ -3416,16 +3435,16 @@ 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)" -#: profile.c:70 +#: profile.c:71 #, c-format msgid "could not open `%s' for writing: %s" msgstr "»%s« konnte nicht zum Schreiben geöffnet werden: %s" -#: profile.c:72 +#: profile.c:73 msgid "sending profile to standard error" msgstr "Das Profil wird auf der Standardfehlerausgabe ausgegeben" -#: profile.c:188 +#: profile.c:193 #, c-format msgid "" "\t# %s block(s)\n" @@ -3434,7 +3453,7 @@ msgstr "" "\t# %s Blöcke\n" "\n" -#: profile.c:193 +#: profile.c:198 #, c-format msgid "" "\t# Rule(s)\n" @@ -3443,29 +3462,29 @@ msgstr "" "\t# Regeln(s)\n" "\n" -#: profile.c:267 +#: profile.c:272 #, c-format msgid "internal error: %s with null vname" msgstr "Interner Fehler: %s mit null vname" -#: profile.c:530 +#: profile.c:537 #, fuzzy msgid "internal error: builtin with null fname" msgstr "Interner Fehler: %s mit null vname" -#: profile.c:942 +#: profile.c:949 #, c-format msgid "" "\t# Loaded extensions (-l and/or @load)\n" "\n" msgstr "" -#: profile.c:965 +#: profile.c:972 #, c-format msgid "\t# gawk profile, created %s\n" msgstr "\t# gawk-Profil, erzeugt %s\n" -#: profile.c:1351 +#: profile.c:1475 #, c-format msgid "" "\n" @@ -3474,18 +3493,12 @@ msgstr "" "\n" "\t# Funktionen in alphabetischer Reihenfolge\n" -#: profile.c:1389 +#: profile.c:1513 #, c-format msgid "redir2str: unknown redirection type %d" msgstr "redir2str: unbekannter Umlenkungstyp %d" -#: re.c:583 -#, c-format -msgid "range of the form `[%c-%c]' is locale dependent" -msgstr "" -"Ein Bereich in der Form »[%c-%c]« ist abhängig von der gesetzten Locale" - -#: re.c:610 +#: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" msgstr "" @@ -3555,10 +3568,14 @@ msgstr ") oder \\) werden nicht geöffnet" msgid "No previous regular expression" msgstr "Kein vorangehender regulärer Ausdruck" -#: symbol.c:740 +#: symbol.c:741 msgid "can not pop main context" msgstr "" +#~ msgid "range of the form `[%c-%c]' is locale dependent" +#~ msgstr "" +#~ "Ein Bereich in der Form »[%c-%c]« ist abhängig von der gesetzten Locale" + #, fuzzy #~ msgid "[s]printf called with no arguments" #~ msgstr "sqrt: das Argument %g ist negativ" diff --git a/po/es.gmo b/po/es.gmo index 53ace354..0bfebbae 100644 Binary files a/po/es.gmo and b/po/es.gmo differ diff --git a/po/es.po b/po/es.po index 59b53afb..d16109a9 100644 --- a/po/es.po +++ b/po/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gawk 4.0.0h\n" "Report-Msgid-Bugs-To: arnold@skeeve.com\n" -"POT-Creation-Date: 2013-05-09 16:05+0300\n" +"POT-Creation-Date: 2014-04-08 19:23+0300\n" "PO-Revision-Date: 2012-01-30 07:42-0600\n" "Last-Translator: Cristian Othón Martínez Vera \n" "Language-Team: Spanish \n" @@ -16,93 +16,93 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: array.c:254 +#: array.c:256 #, c-format msgid "from %s" msgstr "desde %s" -#: array.c:354 +#: array.c:357 msgid "attempt to use a scalar value as array" msgstr "se intentó usar un valor escalar como una matriz" -#: array.c:356 +#: array.c:359 #, c-format msgid "attempt to use scalar parameter `%s' as an array" msgstr "se intentó usar el parámetro escalar `%s como una matriz'" -#: array.c:359 +#: array.c:362 #, c-format msgid "attempt to use scalar `%s' as an array" msgstr "se intentó usar el escalar `%s' como una matriz" -#: array.c:406 array.c:573 builtin.c:85 builtin.c:1591 builtin.c:1637 -#: builtin.c:1650 builtin.c:2078 builtin.c:2092 eval.c:1121 eval.c:1125 -#: eval.c:1524 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" msgstr "se intentó usar la matriz `%s' en un contexto escalar" -#: array.c:580 +#: array.c:583 #, c-format msgid "delete: index `%s' not in array `%s'" msgstr "delete: el índice `%s' no está en la matriz `%s'" -#: array.c:594 +#: array.c:597 #, c-format msgid "attempt to use scalar `%s[\"%.*s\"]' as an array" msgstr "se intentó usar el dato escalar `%s[\"%.*s\"]' como una matriz" -#: array.c:773 +#: array.c:776 #, fuzzy msgid "adump: first argument not an array" msgstr "adump: el argumento no es una matriz" -#: array.c:812 +#: array.c:815 msgid "asort: second argument not an array" msgstr "asort: el segundo argumento no es una matriz" -#: array.c:813 +#: array.c:816 msgid "asorti: second argument not an array" msgstr "asorti: el segundo argumento no es una matriz" -#: array.c:820 +#: array.c:823 msgid "asort: first argument not an array" msgstr "asort: el primer argumento no es una matriz" -#: array.c:821 +#: array.c:824 msgid "asorti: first argument not an array" msgstr "asorti: el primer argumento no es una matriz" -#: array.c:828 +#: array.c:831 msgid "asort: cannot use a subarray of first arg for second arg" msgstr "" "asort: no se puede usar una submatriz del primer argumento para el segundo " "argumento" -#: array.c:829 +#: array.c:832 msgid "asorti: cannot use a subarray of first arg for second arg" msgstr "" "asorti: no se puede usar una submatriz del primer argumento para el segundo " "argumento" -#: array.c:834 +#: array.c:837 msgid "asort: cannot use a subarray of second arg for first arg" msgstr "" "asort: no se puede usar una submatriz del segundo argumento para el primer " "argumento" -#: array.c:835 +#: array.c:838 msgid "asorti: cannot use a subarray of second arg for first arg" msgstr "" "asorti: no se puede usar una submatriz del segundo argumento para el primer " "argumento" -#: array.c:1309 +#: array.c:1314 #, c-format msgid "`%s' is invalid as a function name" msgstr "`%s' es inválido como un nombre de función" -#: array.c:1313 +#: array.c:1318 #, c-format msgid "sort comparison function `%s' is not defined" msgstr "la función de comparación de ordenamiento `%s' no está definida" @@ -147,11 +147,11 @@ msgstr "valores case duplicados en el cuerpo de un switch: %s" msgid "duplicate `default' detected in switch body" msgstr "se detectó un `default' duplicado en el cuerpo de un switch" -#: awkgram.y:796 awkgram.y:3699 +#: awkgram.y:796 awkgram.y:3723 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:3691 +#: awkgram.y:805 awkgram.y:3715 msgid "`continue' is not allowed outside a loop" msgstr "no se permite `continue' fuera de un bucle" @@ -243,275 +243,275 @@ msgstr "" msgid "invalid subscript expression" msgstr "expresión de subíndice inválida" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:119 +#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "aviso: " -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:151 +#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "fatal: " -#: awkgram.y:2092 +#: awkgram.y:2116 msgid "unexpected newline or end of string" msgstr "nueva línea o fin de la cadena inesperados" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:517 debug.c:533 -#: debug.c:2792 debug.c:5040 +#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 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:2360 awkgram.y:2485 +#: awkgram.y:2384 awkgram.y:2509 #, 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:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:130 debug.c:5191 +#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "razón desconocida" -#: awkgram.y:2371 awkgram.y:2395 +#: awkgram.y:2395 awkgram.y:2419 #, c-format msgid "can't include `%s' and use it as a program file" msgstr "" -#: awkgram.y:2384 +#: awkgram.y:2408 #, c-format msgid "already included source file `%s'" msgstr "ya se incluyó el fichero fuente `%s'" -#: awkgram.y:2385 +#: awkgram.y:2409 #, fuzzy, c-format msgid "already loaded shared library `%s'" msgstr "ya se incluyó el fichero fuente `%s'" -#: awkgram.y:2420 +#: awkgram.y:2444 msgid "@include is a gawk extension" msgstr "@include es una extensión de gawk" -#: awkgram.y:2426 +#: awkgram.y:2450 msgid "empty filename after @include" msgstr "nombre de fichero vacío después de @include" -#: awkgram.y:2470 +#: awkgram.y:2494 #, fuzzy msgid "@load is a gawk extension" msgstr "@include es una extensión de gawk" -#: awkgram.y:2476 +#: awkgram.y:2500 #, fuzzy msgid "empty filename after @load" msgstr "nombre de fichero vacío después de @include" -#: awkgram.y:2610 +#: awkgram.y:2634 msgid "empty program text on command line" msgstr "texto de programa vacío en la linea de órdenes" -#: awkgram.y:2725 +#: awkgram.y:2749 #, c-format msgid "can't read sourcefile `%s' (%s)" msgstr "no se puede leer el fichero fuente `%s' (%s)" -#: awkgram.y:2736 +#: awkgram.y:2760 #, c-format msgid "source file `%s' is empty" msgstr "el fichero fuente `%s' está vacío" -#: awkgram.y:2913 +#: awkgram.y:2937 msgid "source file does not end in newline" msgstr "el fichero fuente no termina con línea nueva" -#: awkgram.y:3018 +#: awkgram.y:3042 msgid "unterminated regexp ends with `\\' at end of file" msgstr "expresión regular sin terminar termina con `\\` al final del fichero" -#: awkgram.y:3042 +#: awkgram.y:3066 #, 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:3046 +#: awkgram.y:3070 #, 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:3053 +#: awkgram.y:3077 msgid "unterminated regexp" msgstr "expresión regular sin terminar" -#: awkgram.y:3057 +#: awkgram.y:3081 msgid "unterminated regexp at end of file" msgstr "expresión regular sin terminar al final del fichero" -#: awkgram.y:3116 +#: awkgram.y:3140 msgid "use of `\\ #...' line continuation is not portable" msgstr "el uso de la continuación de línea `\\ #...' no es transportable" -#: awkgram.y:3132 +#: awkgram.y:3156 msgid "backslash not last character on line" msgstr "la barra invertida no es el último caracter en la línea" -#: awkgram.y:3193 +#: awkgram.y:3217 msgid "POSIX does not allow operator `**='" msgstr "POSIX no permite el operador `**='" -#: awkgram.y:3195 +#: awkgram.y:3219 msgid "old awk does not support operator `**='" msgstr "el awk antiguo no admite el operador `**='" -#: awkgram.y:3204 +#: awkgram.y:3228 msgid "POSIX does not allow operator `**'" msgstr "POSIX no permite el operador `**'" -#: awkgram.y:3206 +#: awkgram.y:3230 msgid "old awk does not support operator `**'" msgstr "el awk antiguo no admite el operador `**='" -#: awkgram.y:3241 +#: awkgram.y:3265 msgid "operator `^=' is not supported in old awk" msgstr "el operador `^=' no se admite en el awk antiguo" -#: awkgram.y:3249 +#: awkgram.y:3273 msgid "operator `^' is not supported in old awk" msgstr "el operador `^' no se admite en el awk antiguo" -#: awkgram.y:3342 awkgram.y:3358 command.y:1178 +#: awkgram.y:3366 awkgram.y:3382 command.y:1178 msgid "unterminated string" msgstr "cadena sin terminar" -#: awkgram.y:3579 +#: awkgram.y:3603 #, c-format msgid "invalid char '%c' in expression" msgstr "caracter '%c' inválido en la expresión" -#: awkgram.y:3626 +#: awkgram.y:3650 #, c-format msgid "`%s' is a gawk extension" msgstr "`%s' es una extensión de gawk" -#: awkgram.y:3631 +#: awkgram.y:3655 #, c-format msgid "POSIX does not allow `%s'" msgstr "POSIX no permite `%s'" -#: awkgram.y:3639 +#: awkgram.y:3663 #, c-format msgid "`%s' is not supported in old awk" msgstr "`%s' no se admite en el awk antiguo" -#: awkgram.y:3729 +#: awkgram.y:3753 msgid "`goto' considered harmful!\n" msgstr "¡`goto' se considera dañino!\n" -#: awkgram.y:3763 +#: awkgram.y:3787 #, 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:3798 +#: awkgram.y:3822 #, 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:3803 +#: awkgram.y:3827 #, c-format msgid "%s third parameter is not a changeable object" msgstr "el tercer argumento de %s no es un objecto modificable" -#: awkgram.y:3886 awkgram.y:3889 +#: awkgram.y:3910 awkgram.y:3913 msgid "match: third argument is a gawk extension" msgstr "match: el tercer argumento es una extensión de gawk" -#: awkgram.y:3943 awkgram.y:3946 +#: awkgram.y:3967 awkgram.y:3970 msgid "close: second argument is a gawk extension" msgstr "close: el segundo argumento es una extensión de gawk" -#: awkgram.y:3958 +#: awkgram.y:3982 msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore" msgstr "" "el uso de dcgettext(_\"...\") es incorrecto: quite el subrayado inicial" -#: awkgram.y:3973 +#: awkgram.y:3997 msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" msgstr "" "el uso de dcngettext(_\"...\") es incorrecto: quite el subrayado inicial" -#: awkgram.y:3992 +#: awkgram.y:4016 #, fuzzy msgid "index: regexp constant as second argument is not allowed" msgstr "index: el segundo argumento recibido no es una cadena" -#: awkgram.y:4045 +#: awkgram.y:4069 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "función `%s': parámetro `%s' oscurece la variable global" -#: awkgram.y:4102 debug.c:4021 debug.c:4064 debug.c:5189 +#: awkgram.y:4126 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:4103 +#: awkgram.y:4127 msgid "sending variable list to standard error" msgstr "se envía la lista de variables a la salida estándar de error" -#: awkgram.y:4111 +#: awkgram.y:4135 #, c-format msgid "%s: close failed (%s)" msgstr "%s: falló close (%s)" -#: awkgram.y:4136 +#: awkgram.y:4160 msgid "shadow_funcs() called twice!" msgstr "¡se llamó shadow_funcs() dos veces!" -#: awkgram.y:4144 +#: awkgram.y:4168 msgid "there were shadowed variables." msgstr "hay variables opacadas." -#: awkgram.y:4215 +#: awkgram.y:4239 #, c-format msgid "function name `%s' previously defined" msgstr "el nombre de función `%s' se definió previamente" -#: awkgram.y:4261 +#: awkgram.y:4285 #, 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:4264 +#: awkgram.y:4288 #, 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:4272 +#: awkgram.y:4296 #, 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:4366 awkgram.y:4372 +#: awkgram.y:4383 awkgram.y:4389 #, c-format msgid "function `%s' called but never defined" msgstr "se llamó a la función `%s' pero nunca se definió" -#: awkgram.y:4376 +#: awkgram.y:4393 #, c-format msgid "function `%s' defined but never called directly" msgstr "se definió la función `%s' pero nunca se llamó directamente" -#: awkgram.y:4408 +#: awkgram.y:4425 #, 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:4467 +#: awkgram.y:4484 #, c-format msgid "" "function `%s' called with space between name and `(',\n" @@ -520,243 +520,253 @@ 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:4703 +#: awkgram.y:4720 msgid "division by zero attempted" msgstr "se intentó una división por cero" -#: awkgram.y:4712 +#: awkgram.y:4729 #, c-format msgid "division by zero attempted in `%%'" msgstr "se intentó una división por cero en `%%'" -#: builtin.c:128 +#: awkgram.y:5049 +msgid "" +"cannot assign a value to the result of a field post-increment expression" +msgstr "" + +#: awkgram.y:5052 +#, fuzzy, c-format +msgid "invalid target of assignment (opcode %s)" +msgstr "%d es inválido como número de argumentos para %s" + +#: builtin.c:133 #, c-format msgid "%s to \"%s\" failed (%s)" msgstr "falló %s a \"%s\" (%s)" -#: builtin.c:129 +#: builtin.c:134 msgid "standard output" msgstr "salida estándar" -#: builtin.c:143 +#: builtin.c:148 msgid "exp: received non-numeric argument" msgstr "exp: se recibió un argumento que no es númerico" -#: builtin.c:149 +#: builtin.c:154 #, c-format msgid "exp: argument %g is out of range" msgstr "exp: el argumento %g está fuera de rango" -#: builtin.c:224 +#: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" msgstr "" "fflush: no se puede limpiar: se abrió la tubería `%s' para lectura, no para " "escritura" -#: builtin.c:227 +#: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" msgstr "" "fflush: no se puede limpiar: se abrió el fichero `%s' para lectura, no para " "escritura" -#: builtin.c:239 +#: builtin.c:244 #, c-format 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:357 +#: builtin.c:362 msgid "index: received non-string first argument" msgstr "index: el primer argumento recibido no es una cadena" -#: builtin.c:359 +#: builtin.c:364 msgid "index: received non-string second argument" msgstr "index: el segundo argumento recibido no es una cadena" -#: builtin.c:483 mpfr.c:757 +#: builtin.c:488 mpfr.c:757 msgid "int: received non-numeric argument" msgstr "int: se recibió un argumento que no es númerico" -#: builtin.c:520 +#: builtin.c:525 msgid "length: received array argument" msgstr "length: se recibió un argumento de matriz" -#: builtin.c:523 +#: builtin.c:528 msgid "`length(array)' is a gawk extension" msgstr "`length(array)' es una extensión de gawk" -#: builtin.c:539 +#: builtin.c:544 msgid "length: received non-string argument" msgstr "length: se recibió un argumento que no es una cadena" -#: builtin.c:570 +#: builtin.c:575 msgid "log: received non-numeric argument" msgstr "log: se recibió un argumento que no es númerico" -#: builtin.c:573 +#: builtin.c:578 #, c-format msgid "log: received negative argument %g" msgstr "log: se recibió el argumento negativo %g" -#: builtin.c:771 builtin.c:776 +#: builtin.c:776 builtin.c:781 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:846 +#: builtin.c:851 #, c-format msgid "field width is ignored for `%%' specifier" msgstr "se descarta la anchura del campo para el especificador `%%'" -#: builtin.c:848 +#: builtin.c:853 #, c-format msgid "precision is ignored for `%%' specifier" msgstr "se descarta la precisión para el especificador `%%'" -#: builtin.c:850 +#: builtin.c:855 #, 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:901 +#: builtin.c:906 msgid "fatal: `$' is not permitted in awk formats" msgstr "fatal: no se permite `$' en los formatos de awk" -#: builtin.c:910 +#: builtin.c:915 msgid "fatal: arg count with `$' must be > 0" msgstr "fatal: la cuenta de argumentos con `$' debe ser > 0" -#: builtin.c:914 +#: builtin.c:919 #, 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:918 +#: builtin.c:923 msgid "fatal: `$' not permitted after period in format" msgstr "fatal: no se permite `$' después de un punto en el formato" -#: builtin.c:934 +#: builtin.c:939 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:1006 +#: builtin.c:1009 msgid "`l' is meaningless in awk formats; ignored" msgstr "`l' no tiene significado en los formatos de awk; se descarta" -#: builtin.c:1010 +#: builtin.c:1013 msgid "fatal: `l' is not permitted in POSIX awk formats" msgstr "fatal: no se permite `l' en los formatos POSIX de awk" -#: builtin.c:1023 +#: builtin.c:1026 msgid "`L' is meaningless in awk formats; ignored" msgstr "`L' no tiene significado en los formatos de awk; se descarta" -#: builtin.c:1027 +#: builtin.c:1030 msgid "fatal: `L' is not permitted in POSIX awk formats" msgstr "fatal: no se permite `L' en los formatos POSIX de awk" -#: builtin.c:1040 +#: builtin.c:1043 msgid "`h' is meaningless in awk formats; ignored" msgstr "`h' no tiene significado en los formatos de awk; se descarta" -#: builtin.c:1044 +#: builtin.c:1047 msgid "fatal: `h' is not permitted in POSIX awk formats" msgstr "fatal: no se permite `h' en los formatos POSIX de awk" -#: builtin.c:1439 +#: builtin.c:1463 #, 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:1537 +#: builtin.c:1561 #, 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:1542 +#: builtin.c:1566 msgid "fatal: not enough arguments to satisfy format string" msgstr "" "fatal: no hay suficientes argumentos para satisfacer a la cadena de formato" -#: builtin.c:1544 +#: builtin.c:1568 msgid "^ ran out for this one" msgstr "se acabó ^ para éste" -#: builtin.c:1551 +#: builtin.c:1575 msgid "[s]printf: format specifier does not have control letter" msgstr "[s]printf: el especificador de formato no tiene letras de control" -#: builtin.c:1554 +#: builtin.c:1578 msgid "too many arguments supplied for format string" msgstr "se proporcionaron demasiados argumentos para la cadena de formato" -#: builtin.c:1610 +#: builtin.c:1634 #, fuzzy msgid "sprintf: no arguments" msgstr "printf: sin argumentos" -#: builtin.c:1633 builtin.c:1644 +#: builtin.c:1657 builtin.c:1668 msgid "printf: no arguments" msgstr "printf: sin argumentos" -#: builtin.c:1687 +#: builtin.c:1711 msgid "sqrt: received non-numeric argument" msgstr "sqrt: se recibió un argumento que no es un númerico" -#: builtin.c:1691 +#: builtin.c:1715 #, c-format msgid "sqrt: called with negative argument %g" msgstr "sqrt: se llamó con el argumento negativo %g" -#: builtin.c:1722 +#: builtin.c:1746 #, c-format msgid "substr: length %g is not >= 1" msgstr "substr: la longitud %g no es >= 1" -#: builtin.c:1724 +#: builtin.c:1748 #, c-format msgid "substr: length %g is not >= 0" msgstr "substr: la longitud %g no es >= 0" -#: builtin.c:1731 +#: builtin.c:1755 #, c-format msgid "substr: non-integer length %g will be truncated" msgstr "substr: se truncará la longitud no entera %g" -#: builtin.c:1736 +#: builtin.c:1760 #, 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:1748 +#: builtin.c:1772 #, 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:1753 +#: builtin.c:1777 #, 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:1778 +#: builtin.c:1802 msgid "substr: source string is zero length" msgstr "substr: la cadena de origen es de longitud cero" -#: builtin.c:1794 +#: builtin.c:1818 #, 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:1802 +#: builtin.c:1826 #, c-format msgid "" "substr: length %g at start index %g exceeds length of first argument (%lu)" @@ -764,196 +774,196 @@ msgstr "" "substr: la cadena %g en el índice de inicio %g excede la longitud del primer " "argumento (%lu)" -#: builtin.c:1876 +#: builtin.c:1900 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:1899 +#: builtin.c:1923 msgid "strftime: received non-numeric second argument" msgstr "strftime: el segundo argumento recibido no es númerico" -#: builtin.c:1903 +#: builtin.c:1927 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:1910 +#: builtin.c:1934 msgid "strftime: received non-string first argument" msgstr "strftime: el primer argumento recibido no es una cadena" -#: builtin.c:1917 +#: builtin.c:1941 msgid "strftime: received empty format string" msgstr "strftime: se recibió una cadena de formato vacía" -#: builtin.c:1983 +#: builtin.c:2007 msgid "mktime: received non-string argument" msgstr "mktime: se recibió un argumento que no es una cadena" -#: builtin.c:2000 +#: builtin.c:2024 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:2035 +#: builtin.c:2059 msgid "'system' function not allowed in sandbox mode" msgstr "no se permite la función 'system' en modo sandbox" -#: builtin.c:2040 +#: builtin.c:2064 msgid "system: received non-string argument" msgstr "system: se recibió un argumento que no es una cadena" -#: builtin.c:2160 +#: builtin.c:2184 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "referencia al campo sin inicializar `$%d'" -#: builtin.c:2247 +#: builtin.c:2271 msgid "tolower: received non-string argument" msgstr "tolower: se recibió un argumento que no es una cadena" -#: builtin.c:2281 +#: builtin.c:2305 msgid "toupper: received non-string argument" msgstr "toupper: se recibió un argumento que no es una cadena" -#: builtin.c:2317 mpfr.c:672 +#: builtin.c:2341 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2: el primer argumento recibido no es númerico" -#: builtin.c:2319 mpfr.c:674 +#: builtin.c:2343 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2: el segundo argumento recibido no es númerico" -#: builtin.c:2338 +#: builtin.c:2362 msgid "sin: received non-numeric argument" msgstr "sin: se recibió un argumento que no es númerico" -#: builtin.c:2354 +#: builtin.c:2378 msgid "cos: received non-numeric argument" msgstr "cos: se recibió un argumento que no es númerico" -#: builtin.c:2407 mpfr.c:1156 +#: builtin.c:2431 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand: se recibió un argumento que no es númerico" -#: builtin.c:2438 +#: builtin.c:2462 msgid "match: third argument is not an array" msgstr "match: el tercer argumento no es una matriz" -#: builtin.c:2710 +#: builtin.c:2734 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub: el tercer argumento de 0 se trata como 1" -#: builtin.c:3003 +#: builtin.c:3030 msgid "lshift: received non-numeric first argument" msgstr "lshift: el primer argumento recibido no es númerico" -#: builtin.c:3005 +#: builtin.c:3032 msgid "lshift: received non-numeric second argument" msgstr "lshift: el segundo argumento recibido no es númerico" -#: builtin.c:3011 +#: builtin.c:3038 #, 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:3013 +#: builtin.c:3040 #, fuzzy, c-format msgid "lshift(%f, %f): fractional values will be truncated" msgstr "lshift(%lf, %lf): los valores fraccionarios se truncarán" -#: builtin.c:3015 +#: builtin.c:3042 #, 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:3040 +#: builtin.c:3067 msgid "rshift: received non-numeric first argument" msgstr "rshift: el primer argumento recibido no es númerico" -#: builtin.c:3042 +#: builtin.c:3069 msgid "rshift: received non-numeric second argument" msgstr "rshift: el segundo argumento recibido no es númerico" -#: builtin.c:3048 +#: builtin.c:3075 #, 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:3050 +#: builtin.c:3077 #, fuzzy, c-format msgid "rshift(%f, %f): fractional values will be truncated" msgstr "rshift(%lf, %lf): los valores fraccionarios serán truncados" -#: builtin.c:3052 +#: builtin.c:3079 #, 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:3077 mpfr.c:968 +#: builtin.c:3104 mpfr.c:968 #, fuzzy msgid "and: called with less than two arguments" msgstr "sqrt: se llamó con el argumento negativo %g" -#: builtin.c:3082 +#: builtin.c:3109 #, fuzzy, c-format msgid "and: argument %d is non-numeric" msgstr "exp: el argumento %g está fuera de rango" -#: builtin.c:3086 +#: builtin.c:3113 #, 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:3109 mpfr.c:1000 +#: builtin.c:3136 mpfr.c:1000 #, fuzzy msgid "or: called with less than two arguments" msgstr "sqrt: se llamó con el argumento negativo %g" -#: builtin.c:3114 +#: builtin.c:3141 #, fuzzy, c-format msgid "or: argument %d is non-numeric" msgstr "exp: el argumento %g está fuera de rango" -#: builtin.c:3118 +#: builtin.c:3145 #, 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:3140 mpfr.c:1031 +#: builtin.c:3167 mpfr.c:1031 #, fuzzy msgid "xor: called with less than two arguments" msgstr "sqrt: se llamó con el argumento negativo %g" -#: builtin.c:3146 +#: builtin.c:3173 #, fuzzy, c-format msgid "xor: argument %d is non-numeric" msgstr "exp: el argumento %g está fuera de rango" -#: builtin.c:3150 +#: builtin.c:3177 #, 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:3175 mpfr.c:787 +#: builtin.c:3202 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl: se recibió un argumento que no es númerico" -#: builtin.c:3181 +#: builtin.c:3208 #, fuzzy, c-format msgid "compl(%f): negative value will give strange results" msgstr "compl(%lf): el valor negativo dará resultados extraños" -#: builtin.c:3183 +#: builtin.c:3210 #, fuzzy, c-format msgid "compl(%f): fractional value will be truncated" msgstr "compl(%lf): el valor fraccionario se truncará" -#: builtin.c:3352 +#: builtin.c:3379 #, c-format msgid "dcgettext: `%s' is not a valid locale category" msgstr "dcgettext: `%s' no es una categoría local válida" @@ -1077,8 +1087,8 @@ msgstr "" #: command.y:823 msgid "" -"commands [num] - starts a list of commands to be executed at a breakpoint" -"(watchpoint) hit." +"commands [num] - starts a list of commands to be executed at a " +"breakpoint(watchpoint) hit." msgstr "" #: command.y:825 @@ -1235,7 +1245,7 @@ msgstr "" msgid "watch var - set a watchpoint for a variable." msgstr "" -#: command.y:1011 debug.c:395 msg.c:128 +#: command.y:1011 debug.c:401 msg.c:135 #, c-format msgid "error: " msgstr "error: " @@ -1275,561 +1285,561 @@ msgstr "Caracter de ordenación inválido" msgid "undefined command: %s\n" msgstr "" -#: debug.c:246 +#: debug.c:252 msgid "set or show the number of lines to keep in history file." msgstr "" -#: debug.c:248 +#: debug.c:254 msgid "set or show the list command window size." msgstr "" -#: debug.c:250 +#: debug.c:256 msgid "set or show gawk output file." msgstr "" -#: debug.c:252 +#: debug.c:258 msgid "set or show debugger prompt." msgstr "" -#: debug.c:254 +#: debug.c:260 msgid "(un)set or show saving of command history (value=on|off)." msgstr "" -#: debug.c:256 +#: debug.c:262 msgid "(un)set or show saving of options (value=on|off)." msgstr "" -#: debug.c:258 +#: debug.c:264 msgid "(un)set or show instruction tracing (value=on|off)." msgstr "" -#: debug.c:339 +#: debug.c:345 msgid "program not running." msgstr "" -#: debug.c:442 debug.c:597 +#: debug.c:448 debug.c:606 #, fuzzy, c-format msgid "can't read source file `%s' (%s)" msgstr "no se puede leer el fichero fuente `%s' (%s)" -#: debug.c:447 +#: debug.c:453 #, fuzzy, c-format msgid "source file `%s' is empty.\n" msgstr "el fichero fuente `%s' está vacío" -#: debug.c:474 +#: debug.c:480 msgid "no current source file." msgstr "" -#: debug.c:499 +#: debug.c:505 #, fuzzy, c-format msgid "cannot find source file named `%s' (%s)" msgstr "no se puede leer el fichero fuente `%s' (%s)" -#: debug.c:523 +#: debug.c:529 #, c-format msgid "WARNING: source file `%s' modified since program compilation.\n" msgstr "" -#: debug.c:542 +#: debug.c:551 #, c-format msgid "line number %d out of range; `%s' has %d lines" msgstr "" -#: debug.c:602 +#: debug.c:611 #, fuzzy, c-format msgid "unexpected eof while reading file `%s', line %d" msgstr "error interno: fichero `%s', línea %d\n" -#: debug.c:611 +#: debug.c:620 #, c-format msgid "source file `%s' modified since start of program execution" msgstr "" -#: debug.c:723 +#: debug.c:732 #, fuzzy, c-format msgid "Current source file: %s\n" msgstr "ya se incluyó el fichero fuente `%s'" -#: debug.c:724 +#: debug.c:733 #, c-format msgid "Number of lines: %d\n" msgstr "" -#: debug.c:731 +#: debug.c:740 #, c-format msgid "Source file (lines): %s (%d)\n" msgstr "" -#: debug.c:745 +#: debug.c:754 msgid "" "Number Disp Enabled Location\n" "\n" msgstr "" -#: debug.c:756 +#: debug.c:765 #, c-format msgid "\tno of hits = %ld\n" msgstr "" -#: debug.c:758 +#: debug.c:767 #, c-format msgid "\tignore next %ld hit(s)\n" msgstr "" -#: debug.c:760 debug.c:900 +#: debug.c:769 debug.c:909 #, c-format msgid "\tstop condition: %s\n" msgstr "" -#: debug.c:762 debug.c:902 +#: debug.c:771 debug.c:911 msgid "\tcommands:\n" msgstr "" -#: debug.c:784 +#: debug.c:793 #, c-format msgid "Current frame: " msgstr "" -#: debug.c:787 +#: debug.c:796 #, c-format msgid "Called by frame: " msgstr "" -#: debug.c:791 +#: debug.c:800 #, c-format msgid "Caller of frame: " msgstr "" -#: debug.c:809 +#: debug.c:818 #, c-format msgid "None in main().\n" msgstr "" -#: debug.c:839 +#: debug.c:848 #, fuzzy msgid "No arguments.\n" msgstr "printf: sin argumentos" -#: debug.c:840 +#: debug.c:849 msgid "No locals.\n" msgstr "" -#: debug.c:848 +#: debug.c:857 msgid "" "All defined variables:\n" "\n" msgstr "" -#: debug.c:858 +#: debug.c:867 msgid "" "All defined functions:\n" "\n" msgstr "" -#: debug.c:877 +#: debug.c:886 msgid "" "Auto-display variables:\n" "\n" msgstr "" -#: debug.c:880 +#: debug.c:889 msgid "" "Watch variables:\n" "\n" msgstr "" -#: debug.c:1020 +#: debug.c:1029 #, fuzzy, c-format msgid "no symbol `%s' in current context\n" msgstr "`exit' no se puede llamar en el contexto actual" -#: debug.c:1032 debug.c:1418 +#: debug.c:1041 debug.c:1427 #, fuzzy, c-format msgid "`%s' is not an array\n" msgstr "`%s' no es un nombre de variable legal" -#: debug.c:1046 +#: debug.c:1055 #, fuzzy, c-format msgid "$%ld = uninitialized field\n" msgstr "referencia al campo sin inicializar `$%d'" -#: debug.c:1067 +#: debug.c:1076 #, fuzzy, c-format msgid "array `%s' is empty\n" msgstr "el fichero de datos `%s' está vacío" -#: debug.c:1110 debug.c:1162 +#: debug.c:1119 debug.c:1171 #, fuzzy, c-format msgid "[\"%s\"] not in array `%s'\n" msgstr "delete: el índice `%s' no está en la matriz `%s'" -#: debug.c:1166 +#: debug.c:1175 #, c-format msgid "`%s[\"%s\"]' is not an array\n" msgstr "" -#: debug.c:1227 debug.c:4949 +#: debug.c:1236 debug.c:4964 #, fuzzy, c-format msgid "`%s' is not a scalar variable" msgstr "`%s' no es un nombre de variable legal" -#: debug.c:1249 debug.c:4979 +#: debug.c:1258 debug.c:4994 #, fuzzy, c-format msgid "attempt to use array `%s[\"%s\"]' in a scalar context" msgstr "se intentó usar la matriz `%s[\"%.*s\"]' en un contexto escalar" -#: debug.c:1271 debug.c:4990 +#: debug.c:1280 debug.c:5005 #, fuzzy, c-format msgid "attempt to use scalar `%s[\"%s\"]' as array" msgstr "se intentó usar el dato escalar `%s[\"%.*s\"]' como una matriz" -#: debug.c:1414 +#: debug.c:1423 #, fuzzy, c-format msgid "`%s' is a function" msgstr "`%s' es inválido como un nombre de función" -#: debug.c:1456 +#: debug.c:1465 #, c-format msgid "watchpoint %d is unconditional\n" msgstr "" -#: debug.c:1490 +#: debug.c:1499 #, c-format msgid "No display item numbered %ld" msgstr "" -#: debug.c:1493 +#: debug.c:1502 #, c-format msgid "No watch item numbered %ld" msgstr "" -#: debug.c:1519 +#: debug.c:1528 #, fuzzy, c-format msgid "%d: [\"%s\"] not in array `%s'\n" msgstr "delete: el índice `%s' no está en la matriz `%s'" -#: debug.c:1758 +#: debug.c:1767 #, fuzzy msgid "attempt to use scalar value as array" msgstr "se intentó usar un valor escalar como una matriz" -#: debug.c:1847 +#: debug.c:1856 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" msgstr "" -#: debug.c:1858 +#: debug.c:1867 #, c-format msgid "Display %d deleted because parameter is out of scope.\n" msgstr "" -#: debug.c:1891 +#: debug.c:1900 #, fuzzy, c-format msgid " in file `%s', line %d\n" msgstr "error interno: fichero `%s', línea %d\n" -#: debug.c:1912 +#: debug.c:1921 #, c-format msgid " at `%s':%d" msgstr "" -#: debug.c:1928 debug.c:1991 +#: debug.c:1937 debug.c:2000 #, c-format msgid "#%ld\tin " msgstr "" -#: debug.c:1965 +#: debug.c:1974 #, c-format msgid "More stack frames follow ...\n" msgstr "" -#: debug.c:2008 +#: debug.c:2017 #, fuzzy msgid "invalid frame number" msgstr "Final de rango inválido" -#: debug.c:2180 +#: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" msgstr "" -#: debug.c:2187 +#: debug.c:2207 #, c-format msgid "Note: breakpoint %d (enabled), also set at %s:%d" msgstr "" -#: debug.c:2194 +#: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" msgstr "" -#: debug.c:2201 +#: debug.c:2221 #, c-format msgid "Note: breakpoint %d (disabled), also set at %s:%d" msgstr "" -#: debug.c:2218 +#: debug.c:2238 #, fuzzy, c-format msgid "Breakpoint %d set at file `%s', line %d\n" msgstr "error interno: fichero `%s', línea %d\n" -#: debug.c:2320 +#: debug.c:2340 #, c-format msgid "Can't set breakpoint in file `%s'\n" msgstr "" -#: debug.c:2349 debug.c:2472 debug.c:3330 +#: debug.c:2369 debug.c:2492 debug.c:3350 #, fuzzy, c-format msgid "line number %d in file `%s' out of range" msgstr "exp: el argumento %g está fuera de rango" -#: debug.c:2353 +#: debug.c:2373 #, c-format msgid "Can't find rule!!!\n" msgstr "" -#: debug.c:2355 +#: debug.c:2375 #, c-format msgid "Can't set breakpoint at `%s':%d\n" msgstr "" -#: debug.c:2367 +#: debug.c:2387 #, c-format msgid "Can't set breakpoint in function `%s'\n" msgstr "" -#: debug.c:2383 +#: debug.c:2403 #, c-format msgid "breakpoint %d set at file `%s', line %d is unconditional\n" msgstr "" -#: debug.c:2488 debug.c:2510 +#: debug.c:2508 debug.c:2530 #, c-format msgid "Deleted breakpoint %d" msgstr "" -#: debug.c:2494 +#: debug.c:2514 #, c-format msgid "No breakpoint(s) at entry to function `%s'\n" msgstr "" -#: debug.c:2521 +#: debug.c:2541 #, fuzzy, c-format msgid "No breakpoint at file `%s', line #%d\n" msgstr "error interno: fichero `%s', línea %d\n" -#: debug.c:2576 debug.c:2617 debug.c:2637 debug.c:2680 +#: debug.c:2596 debug.c:2637 debug.c:2657 debug.c:2700 msgid "invalid breakpoint number" msgstr "" -#: debug.c:2592 +#: debug.c:2612 msgid "Delete all breakpoints? (y or n) " msgstr "" -#: debug.c:2593 debug.c:2903 debug.c:2956 +#: debug.c:2613 debug.c:2923 debug.c:2976 msgid "y" msgstr "" -#: debug.c:2642 +#: debug.c:2662 #, c-format msgid "Will ignore next %ld crossing(s) of breakpoint %d.\n" msgstr "" -#: debug.c:2646 +#: debug.c:2666 #, c-format msgid "Will stop next time breakpoint %d is reached.\n" msgstr "" -#: debug.c:2763 +#: debug.c:2783 #, c-format msgid "Can only debug programs provided with the `-f' option.\n" msgstr "" -#: debug.c:2888 +#: debug.c:2908 #, c-format msgid "Failed to restart debugger" msgstr "" -#: debug.c:2902 +#: debug.c:2922 msgid "Program already running. Restart from beginning (y/n)? " msgstr "" -#: debug.c:2906 +#: debug.c:2926 #, c-format msgid "Program not restarted\n" msgstr "" -#: debug.c:2916 +#: debug.c:2936 #, c-format msgid "error: cannot restart, operation not allowed\n" msgstr "" -#: debug.c:2922 +#: debug.c:2942 #, c-format msgid "error (%s): cannot restart, ignoring rest of the commands\n" msgstr "" -#: debug.c:2930 +#: debug.c:2950 #, c-format msgid "Starting program: \n" msgstr "" -#: debug.c:2939 +#: debug.c:2959 #, c-format msgid "Program exited %s with exit value: %d\n" msgstr "" -#: debug.c:2955 +#: debug.c:2975 msgid "The program is running. Exit anyway (y/n)? " msgstr "" -#: debug.c:2990 +#: debug.c:3010 #, c-format msgid "Not stopped at any breakpoint; argument ignored.\n" msgstr "" -#: debug.c:2995 +#: debug.c:3015 #, c-format msgid "invalid breakpoint number %d." msgstr "" -#: debug.c:3000 +#: debug.c:3020 #, c-format msgid "Will ignore next %ld crossings of breakpoint %d.\n" msgstr "" -#: debug.c:3187 +#: debug.c:3207 #, c-format msgid "'finish' not meaningful in the outermost frame main()\n" msgstr "" -#: debug.c:3192 +#: debug.c:3212 #, c-format msgid "Run till return from " msgstr "" -#: debug.c:3235 +#: debug.c:3255 #, c-format msgid "'return' not meaningful in the outermost frame main()\n" msgstr "" -#: debug.c:3349 +#: debug.c:3369 #, c-format msgid "Can't find specified location in function `%s'\n" msgstr "" -#: debug.c:3357 +#: debug.c:3377 #, fuzzy, c-format msgid "invalid source line %d in file `%s'" msgstr "ya se incluyó el fichero fuente `%s'" -#: debug.c:3372 +#: debug.c:3392 #, c-format msgid "Can't find specified location %d in file `%s'\n" msgstr "" -#: debug.c:3404 +#: debug.c:3424 #, fuzzy, c-format msgid "element not in array\n" msgstr "delete: el índice `%s' no está en la matriz `%s'" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "untyped variable\n" msgstr "" -#: debug.c:3446 +#: debug.c:3466 #, c-format msgid "Stopping in %s ...\n" msgstr "" -#: debug.c:3523 +#: debug.c:3543 #, c-format msgid "'finish' not meaningful with non-local jump '%s'\n" msgstr "" -#: debug.c:3530 +#: debug.c:3550 #, c-format msgid "'until' not meaningful with non-local jump '%s'\n" msgstr "" -#: debug.c:4165 +#: debug.c:4185 msgid "\t------[Enter] to continue or q [Enter] to quit------" msgstr "" -#: debug.c:4166 +#: debug.c:4186 msgid "q" msgstr "" -#: debug.c:4986 +#: debug.c:5001 #, fuzzy, c-format msgid "[\"%s\"] not in array `%s'" msgstr "delete: el índice `%s' no está en la matriz `%s'" -#: debug.c:5192 +#: debug.c:5207 #, c-format msgid "sending output to stdout\n" msgstr "" -#: debug.c:5232 +#: debug.c:5247 msgid "invalid number" msgstr "" -#: debug.c:5366 +#: debug.c:5381 #, fuzzy, c-format msgid "`%s' not allowed in current context; statement ignored" msgstr "`exit' no se puede llamar en el contexto actual" -#: debug.c:5374 +#: debug.c:5389 #, fuzzy msgid "`return' not allowed in current context; statement ignored" msgstr "`exit' no se puede llamar en el contexto actual" -#: debug.c:5575 +#: debug.c:5590 #, fuzzy, c-format msgid "No symbol `%s' in current context" msgstr "se intentó usar la matriz `%s' en un contexto escalar" -#: 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:1192 +#: 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 #, fuzzy msgid "unbalanced [" msgstr "[ desbalanceado" -#: dfa.c:1052 +#: dfa.c:1174 #, fuzzy msgid "invalid character class" msgstr "Nombre de clase de caracter inválido" -#: dfa.c:1229 +#: dfa.c:1316 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "" -#: dfa.c:1281 +#: dfa.c:1366 #, fuzzy msgid "unfinished \\ escape" msgstr "Escape \\ sin terminar" -#: dfa.c:1428 regcomp.c:161 +#: dfa.c:1513 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "Contenido inválido de \\{\\}" -#: dfa.c:1431 regcomp.c:176 +#: dfa.c:1516 regcomp.c:176 msgid "Regular expression too big" msgstr "La expresión regular es demasiado grande" -#: dfa.c:1816 +#: dfa.c:1936 #, fuzzy msgid "unbalanced (" msgstr "( desbalanceado" -#: dfa.c:1943 +#: dfa.c:2062 #, fuzzy msgid "no syntax specified" msgstr "No se especifican los bits de sintaxis de la expresión regular" -#: dfa.c:1951 +#: dfa.c:2070 #, fuzzy msgid "unbalanced )" msgstr ") desbalanceado" @@ -1849,11 +1859,11 @@ msgstr "código de operación %d desconocido" 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:471 +#: eval.c:472 msgid "buffer overflow in genflags2str" msgstr "desbordamiento de almacenamiento temporal en genflags2str" -#: eval.c:674 +#: eval.c:675 #, c-format msgid "" "\n" @@ -1864,71 +1874,71 @@ msgstr "" "\t# Pila de Llamadas de Funciones:\n" "\n" -#: eval.c:703 +#: eval.c:704 msgid "`IGNORECASE' is a gawk extension" msgstr "`IGNORECASE' es una extensión de gawk" -#: eval.c:735 +#: eval.c:736 msgid "`BINMODE' is a gawk extension" msgstr "`BINMODE' es una extensión de gawk" -#: eval.c:793 +#: eval.c:794 #, 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:884 +#: eval.c:885 #, c-format msgid "bad `%sFMT' specification `%s'" msgstr "especificación `%sFMT' `%s' errónea" -#: eval.c:968 +#: eval.c:969 msgid "turning off `--lint' due to assignment to `LINT'" msgstr "se desactiva `--lint' debido a una asignación a `LINT'" -#: eval.c:1146 +#: eval.c:1147 #, c-format msgid "reference to uninitialized argument `%s'" msgstr "referencia al argumento sin inicializar `%s'" -#: eval.c:1147 +#: eval.c:1148 #, c-format msgid "reference to uninitialized variable `%s'" msgstr "referencia a la variable sin inicializar `%s'" -#: eval.c:1165 +#: eval.c:1166 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:1167 +#: eval.c:1168 msgid "attempt to field reference from null string" msgstr "se intentó una referencia de campo desde una cadena nula" -#: eval.c:1175 +#: eval.c:1176 #, c-format msgid "attempt to access field %ld" msgstr "se intentó acceder al campo %ld" -#: eval.c:1184 +#: eval.c:1185 #, c-format msgid "reference to uninitialized field `$%ld'" msgstr "referencia al campo sin inicializar `$%ld'" -#: eval.c:1271 +#: eval.c:1272 #, 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:1466 +#: eval.c:1473 #, c-format msgid "unwind_stack: unexpected type `%s'" msgstr "unwind_stack: tipo `%s' inesperado" -#: eval.c:1562 +#: eval.c:1569 msgid "division by zero attempted in `/='" msgstr "se intentó una división por cero en `/='" -#: eval.c:1569 +#: eval.c:1576 #, c-format msgid "division by zero attempted in `%%='" msgstr "se intentó una división por cero en `%%='" @@ -1942,7 +1952,7 @@ msgstr "no se permiten las extensiones en modo sandbox" msgid "-l / @load are gawk extensions" msgstr "@include es una extensión de gawk" -#: ext.c:95 ext.c:177 +#: ext.c:95 msgid "load_ext: received NULL lib_name" msgstr "" @@ -1975,6 +1985,10 @@ msgstr "" msgid "`extension' is a gawk extension" msgstr "`extension' es una extensión de gawk" +#: ext.c:177 +msgid "extension: received NULL lib_name" +msgstr "" + #: ext.c:180 #, fuzzy, c-format msgid "extension: cannot open library `%s' (%s)" @@ -2000,39 +2014,39 @@ msgstr "" msgid "make_builtin: missing function name" msgstr "extension: falta el nombre de la función" -#: ext.c:238 +#: ext.c:236 #, fuzzy, c-format msgid "make_builtin: can't redefine function `%s'" msgstr "extension: no se puede redefinir la función `%s'" -#: ext.c:242 +#: ext.c:240 #, fuzzy, c-format msgid "make_builtin: function `%s' already defined" msgstr "extension: la función `%s' ya está definida" -#: ext.c:246 +#: ext.c:244 #, fuzzy, c-format msgid "make_builtin: function name `%s' previously defined" msgstr "extension: el nombre de función `%s' se definió previamente" -#: ext.c:248 +#: ext.c:246 #, 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:251 ext.c:304 +#: ext.c:249 ext.c:304 #, 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:278 +#: ext.c:276 #, fuzzy msgid "extension: missing function name" msgstr "extension: falta el nombre de la función" -#: ext.c:283 +#: ext.c:279 ext.c:283 #, 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'" @@ -2059,155 +2073,160 @@ msgstr "" "extension: no se puede utilizar la orden interna de gawk `%s' como nombre de " "función" -#: ext.c:374 +#: ext.c:375 #, 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:377 +#: ext.c:378 #, c-format msgid "function `%s': missing argument #%d" msgstr "función `%s': falta el argumento #%d" -#: ext.c:394 +#: ext.c:395 #, 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:398 +#: ext.c:399 #, 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:412 +#: ext.c:413 msgid "dynamic loading of library not supported" msgstr "" -#: extension/filefuncs.c:97 +#: extension/filefuncs.c:159 #, fuzzy msgid "chdir: called with incorrect number of arguments, expecting 1" msgstr "sqrt: se llamó con el argumento negativo %g" -#: extension/filefuncs.c:343 +#: extension/filefuncs.c:439 #, c-format msgid "stat: unable to read symbolic link `%s'" msgstr "" -#: extension/filefuncs.c:376 +#: extension/filefuncs.c:472 #, fuzzy msgid "stat: called with wrong number of arguments" msgstr "sqrt: se llamó con el argumento negativo %g" -#: extension/filefuncs.c:383 +#: extension/filefuncs.c:479 #, fuzzy msgid "stat: bad parameters" msgstr "%s: es un parámetro\n" -#: extension/filefuncs.c:437 +#: extension/filefuncs.c:533 #, fuzzy, c-format msgid "fts init: could not create variable %s" msgstr "index: el segundo argumento recibido no es una cadena" -#: extension/filefuncs.c:460 +#: extension/filefuncs.c:554 +#, fuzzy +msgid "fts is not supported on this system" +msgstr "`%s' no se admite en el awk antiguo" + +#: extension/filefuncs.c:573 msgid "fill_stat_element: could not create array" msgstr "" -#: extension/filefuncs.c:469 +#: extension/filefuncs.c:582 msgid "fill_stat_element: could not set element" msgstr "" -#: extension/filefuncs.c:484 +#: extension/filefuncs.c:597 #, fuzzy msgid "fill_path_element: could not set element" msgstr "index: el segundo argumento recibido no es una cadena" -#: extension/filefuncs.c:500 +#: extension/filefuncs.c:613 msgid "fill_error_element: could not set element" msgstr "" -#: extension/filefuncs.c:547 extension/filefuncs.c:594 +#: extension/filefuncs.c:660 extension/filefuncs.c:707 msgid "fts-process: could not create array" msgstr "" -#: extension/filefuncs.c:557 extension/filefuncs.c:604 -#: extension/filefuncs.c:622 +#: extension/filefuncs.c:670 extension/filefuncs.c:717 +#: extension/filefuncs.c:735 #, fuzzy msgid "fts-process: could not set element" msgstr "index: el segundo argumento recibido no es una cadena" -#: extension/filefuncs.c:671 +#: extension/filefuncs.c:784 #, fuzzy msgid "fts: called with incorrect number of arguments, expecting 3" msgstr "sqrt: se llamó con el argumento negativo %g" -#: extension/filefuncs.c:674 +#: extension/filefuncs.c:787 #, fuzzy msgid "fts: bad first parameter" msgstr "%s: es un parámetro\n" -#: extension/filefuncs.c:680 +#: extension/filefuncs.c:793 #, fuzzy msgid "fts: bad second parameter" msgstr "%s: es un parámetro\n" -#: extension/filefuncs.c:686 +#: extension/filefuncs.c:799 #, fuzzy msgid "fts: bad third parameter" msgstr "%s: es un parámetro\n" -#: extension/filefuncs.c:693 +#: extension/filefuncs.c:806 #, fuzzy msgid "fts: could not flatten array\n" msgstr "`%s' no es un nombre de variable legal" -#: extension/filefuncs.c:711 +#: extension/filefuncs.c:824 msgid "fts: ignoring sneaky FTS_NOSTAT flag. nyah, nyah, nyah." msgstr "" -#: extension/filefuncs.c:728 +#: extension/filefuncs.c:841 msgid "fts: clear_array() failed\n" msgstr "" -#: extension/fnmatch.c:98 +#: extension/fnmatch.c:112 #, fuzzy msgid "fnmatch: called with less than three arguments" msgstr "sqrt: se llamó con el argumento negativo %g" -#: extension/fnmatch.c:101 +#: extension/fnmatch.c:115 #, fuzzy msgid "fnmatch: called with more than three arguments" msgstr "sqrt: se llamó con el argumento negativo %g" -#: extension/fnmatch.c:104 +#: extension/fnmatch.c:118 #, fuzzy msgid "fnmatch: could not get first argument" msgstr "strftime: el primer argumento recibido no es una cadena" -#: extension/fnmatch.c:109 +#: extension/fnmatch.c:123 #, fuzzy msgid "fnmatch: could not get second argument" msgstr "index: el segundo argumento recibido no es una cadena" -#: extension/fnmatch.c:114 +#: extension/fnmatch.c:128 msgid "fnmatch: could not get third argument" msgstr "" -#: extension/fnmatch.c:127 +#: extension/fnmatch.c:141 msgid "fnmatch is not implemented on this system\n" msgstr "" -#: extension/fnmatch.c:159 +#: extension/fnmatch.c:173 msgid "fnmatch init: could not add FNM_NOMATCH variable" msgstr "" -#: extension/fnmatch.c:169 +#: extension/fnmatch.c:183 #, c-format msgid "fnmatch init: could not set array element %s" msgstr "" -#: extension/fnmatch.c:179 +#: extension/fnmatch.c:193 msgid "fnmatch init: could not install FNM array" msgstr "" @@ -2235,88 +2254,88 @@ msgstr "sqrt: se llamó con el argumento negativo %g" msgid "wait: called with too many arguments" msgstr "sqrt: se llamó con el argumento negativo %g" -#: extension/inplace.c:110 +#: extension/inplace.c:130 msgid "inplace_begin: in-place editing already active" msgstr "" -#: extension/inplace.c:113 extension/inplace.c:187 +#: extension/inplace.c:133 extension/inplace.c:207 #, c-format msgid "inplace_begin: expects 2 arguments but called with %d" msgstr "" -#: extension/inplace.c:116 +#: extension/inplace.c:136 msgid "inplace_begin: cannot retrieve 1st argument as a string filename" msgstr "" -#: extension/inplace.c:124 +#: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" msgstr "" -#: extension/inplace.c:131 +#: extension/inplace.c:151 #, fuzzy, c-format msgid "inplace_begin: Cannot stat `%s' (%s)" msgstr "fatal: extension: no se puede abrir `%s' (%s)\n" -#: extension/inplace.c:138 +#: extension/inplace.c:158 #, fuzzy, c-format msgid "inplace_begin: `%s' is not a regular file" msgstr "`%s' no es un nombre de variable legal" -#: extension/inplace.c:149 +#: extension/inplace.c:169 #, c-format msgid "inplace_begin: mkstemp(`%s') failed (%s)" msgstr "" -#: extension/inplace.c:158 +#: extension/inplace.c:178 #, fuzzy, c-format msgid "inplace_begin: chmod failed (%s)" msgstr "%s: falló close (%s)" -#: extension/inplace.c:165 +#: extension/inplace.c:185 #, c-format msgid "inplace_begin: dup(stdout) failed (%s)" msgstr "" -#: extension/inplace.c:168 +#: extension/inplace.c:188 #, c-format msgid "inplace_begin: dup2(%d, stdout) failed (%s)" msgstr "" -#: extension/inplace.c:171 +#: extension/inplace.c:191 #, fuzzy, c-format msgid "inplace_begin: close(%d) failed (%s)" msgstr "%s: falló close (%s)" -#: extension/inplace.c:190 +#: extension/inplace.c:210 msgid "inplace_end: cannot retrieve 1st argument as a string filename" msgstr "" -#: extension/inplace.c:197 +#: extension/inplace.c:217 msgid "inplace_end: in-place editing not active" msgstr "" -#: extension/inplace.c:203 +#: extension/inplace.c:223 #, c-format msgid "inplace_end: dup2(%d, stdout) failed (%s)" msgstr "" -#: extension/inplace.c:206 +#: extension/inplace.c:226 #, fuzzy, c-format msgid "inplace_end: close(%d) failed (%s)" msgstr "%s: falló close (%s)" -#: extension/inplace.c:210 +#: extension/inplace.c:230 #, c-format msgid "inplace_end: fsetpos(stdout) failed (%s)" msgstr "" -#: extension/inplace.c:223 +#: extension/inplace.c:243 #, 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:229 +#: extension/inplace.c:253 #, fuzzy, c-format msgid "inplace_end: rename(`%s', `%s') failed (%s)" msgstr "falló al cerrar el df %d (`%s') (%s)" @@ -2351,185 +2370,185 @@ msgstr "sqrt: se llamó con el argumento negativo %g" msgid "chr: called with inappropriate argument(s)" msgstr "sqrt: se llamó con el argumento negativo %g" -#: extension/readdir.c:203 +#: extension/readdir.c:281 #, c-format msgid "dir_take_control_of: opendir/fdopendir failed: %s" msgstr "" -#: extension/readfile.c:84 +#: extension/readfile.c:113 #, fuzzy msgid "readfile: called with too many arguments" msgstr "sqrt: se llamó con el argumento negativo %g" -#: extension/readfile.c:118 +#: extension/readfile.c:137 #, fuzzy msgid "readfile: called with no arguments" msgstr "sqrt: se llamó con el argumento negativo %g" -#: extension/rwarray.c:120 +#: extension/rwarray.c:124 #, fuzzy msgid "writea: called with too many arguments" msgstr "sqrt: se llamó con el argumento negativo %g" -#: extension/rwarray.c:127 +#: extension/rwarray.c:131 #, 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:133 +#: extension/rwarray.c:137 #, 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:180 +#: extension/rwarray.c:184 #, c-format msgid "write_array: could not flatten array\n" msgstr "" -#: extension/rwarray.c:194 +#: extension/rwarray.c:198 #, c-format msgid "write_array: could not release flattened array\n" msgstr "" -#: extension/rwarray.c:276 +#: extension/rwarray.c:280 #, fuzzy msgid "reada: called with too many arguments" msgstr "sqrt: se llamó con el argumento negativo %g" -#: extension/rwarray.c:283 +#: extension/rwarray.c:287 #, 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:289 +#: extension/rwarray.c:293 #, 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:333 +#: extension/rwarray.c:337 #, c-format msgid "do_reada: clear_array failed\n" msgstr "" -#: extension/rwarray.c:370 +#: extension/rwarray.c:374 #, c-format msgid "read_array: set_array_element failed\n" msgstr "" -#: extension/time.c:81 +#: extension/time.c:113 #, fuzzy msgid "gettimeofday: ignoring arguments" msgstr "mktime: se recibió un argumento que no es una cadena" -#: extension/time.c:112 +#: extension/time.c:144 msgid "gettimeofday: not supported on this platform" msgstr "" -#: extension/time.c:133 +#: extension/time.c:165 #, fuzzy msgid "sleep: called with too many arguments" msgstr "sqrt: se llamó con el argumento negativo %g" -#: extension/time.c:136 +#: extension/time.c:168 #, fuzzy msgid "sleep: missing required numeric argument" msgstr "exp: se recibió un argumento que no es númerico" -#: extension/time.c:142 +#: extension/time.c:174 #, fuzzy msgid "sleep: argument is negative" msgstr "exp: el argumento %g está fuera de rango" -#: extension/time.c:176 +#: extension/time.c:208 msgid "sleep: not supported on this platform" msgstr "" -#: field.c:339 +#: field.c:345 msgid "NF set to negative value" msgstr "se definió NF con un valor negativo" -#: field.c:964 field.c:971 field.c:975 +#: field.c:971 field.c:978 field.c:982 msgid "split: fourth argument is a gawk extension" msgstr "split: el cuarto argumento es una extensión de gawk" -#: field.c:968 +#: field.c:975 msgid "split: fourth argument is not an array" msgstr "split: el cuarto argumento no es una matriz" -#: field.c:982 +#: field.c:989 msgid "split: second argument is not an array" msgstr "split: el segundo argumento no es una matriz" -#: field.c:986 +#: field.c:993 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:991 +#: field.c:998 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:994 +#: field.c:1001 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:1023 +#: field.c:1032 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:1063 +#: field.c:1072 msgid "patsplit: fourth argument is not an array" msgstr "patsplit: el cuarto argumento no es una matriz" -#: field.c:1068 +#: field.c:1077 msgid "patsplit: second argument is not an array" msgstr "patsplit: el segundo argumento no es una matriz" -#: field.c:1074 +#: field.c:1083 msgid "patsplit: third argument must be non-null" msgstr "patsplit: el tercer argumento no debe ser nulo" -#: field.c:1078 +#: field.c:1087 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:1083 +#: field.c:1092 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:1086 +#: field.c:1095 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:1124 +#: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" msgstr "`FIELDWIDTHS' es una extensión gawk" -#: field.c:1188 +#: field.c:1197 #, c-format msgid "invalid FIELDWIDTHS value, near `%s'" msgstr "valor de FIELDWIDTHS inválido, cerca de `%s'" -#: field.c:1261 +#: field.c:1270 msgid "null string for `FS' is a gawk extension" msgstr "la cadena nula para `FS' es una extensión de gawk" -#: field.c:1265 +#: field.c:1274 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:1384 +#: field.c:1393 msgid "`FPAT' is a gawk extension" msgstr "`FPAT' es una extensión de gawk" @@ -2545,602 +2564,602 @@ msgstr "" msgid "node_to_awk_value: received null val" msgstr "" -#: gawkapi.c:808 +#: gawkapi.c:807 #, fuzzy msgid "remove_element: received null array" msgstr "length: se recibió un argumento de matriz" -#: gawkapi.c:811 +#: gawkapi.c:810 msgid "remove_element: received null subscript" msgstr "" -#: gawkapi.c:943 +#: gawkapi.c:947 #, c-format msgid "api_flatten_array: could not convert index %d\n" msgstr "" -#: gawkapi.c:948 +#: gawkapi.c:952 #, c-format msgid "api_flatten_array: could not convert value %d\n" msgstr "" -#: getopt.c:603 getopt.c:632 +#: getopt.c:604 getopt.c:633 #, fuzzy, c-format msgid "%s: option '%s' is ambiguous; possibilities:" msgstr "%s: la opción '%s' es ambigua\n" -#: getopt.c:678 getopt.c:682 +#: getopt.c:679 getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: la opción '--%s' no admite ningún argumento\n" -#: getopt.c:691 getopt.c:696 +#: getopt.c:692 getopt.c:697 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: la opción '%c%s' no admite ningún argumento\n" -#: getopt.c:739 getopt.c:758 +#: getopt.c:740 getopt.c:759 #, c-format msgid "%s: option '--%s' requires an argument\n" msgstr "%s: la opción '--%s' requiere un argumento\n" -#: getopt.c:796 getopt.c:799 +#: getopt.c:797 getopt.c:800 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: no se reconoce la opción '--%s'\n" -#: getopt.c:807 getopt.c:810 +#: getopt.c:808 getopt.c:811 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: no se reconoce la opción '%c%s'\n" -#: getopt.c:859 getopt.c:862 +#: getopt.c:860 getopt.c:863 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: opción inválida -- '%c'\n" -#: getopt.c:915 getopt.c:932 getopt.c:1142 getopt.c:1160 +#: getopt.c:916 getopt.c:933 getopt.c:1143 getopt.c:1161 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: la opción requiere un argumento -- '%c'\n" -#: getopt.c:988 getopt.c:1004 +#: getopt.c:989 getopt.c:1005 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: la opción '-W %s' es ambigua\n" -#: getopt.c:1028 getopt.c:1046 +#: getopt.c:1029 getopt.c:1047 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: la opción '-W %s' no admite ningún argumento\n" -#: getopt.c:1067 getopt.c:1085 +#: getopt.c:1068 getopt.c:1086 #, c-format msgid "%s: option '-W %s' requires an argument\n" msgstr "%s: la opción '-W %s' requiere un argumento\n" -#: io.c:347 +#: io.c:392 #, 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:350 io.c:463 +#: io.c:395 io.c:513 #, c-format msgid "cannot open file `%s' for reading (%s)" msgstr "no se puede abrir el fichero `%s' para lectura (%s)" -#: io.c:590 +#: io.c:640 #, c-format msgid "close of fd %d (`%s') failed (%s)" msgstr "falló al cerrar el df %d (`%s') (%s)" -#: io.c:666 +#: io.c:716 msgid "redirection not allowed in sandbox mode" msgstr "no se permite la redirección en modo sandbox" -#: io.c:700 +#: io.c:750 #, 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:706 +#: io.c:756 #, 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:711 +#: io.c:761 #, 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:754 +#: io.c:809 #, c-format msgid "unnecessary mixing of `>' and `>>' for file `%.*s'" msgstr "mezcla innecesaria de `>' y `>>' para el fichero `%.*s'" -#: io.c:808 +#: io.c:863 #, 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:818 +#: io.c:873 #, 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:849 +#: io.c:904 #, 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:928 +#: io.c:986 #, c-format msgid "can't redirect from `%s' (%s)" msgstr "no se puede redirigir desde `%s' (%s)" -#: io.c:931 +#: io.c:989 #, c-format msgid "can't redirect to `%s' (%s)" msgstr "no se puede redirigir a `%s' (%s)" -#: io.c:982 +#: io.c:1040 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:998 +#: io.c:1056 #, c-format msgid "close of `%s' failed (%s)." msgstr "falló al cerrar `%s' (%s)." -#: io.c:1006 +#: io.c:1064 msgid "too many pipes or input files open" msgstr "demasiadas tuberías o ficheros de entrada abiertos" -#: io.c:1028 +#: io.c:1086 msgid "close: second argument must be `to' or `from'" msgstr "close: el segundo argumento debe ser `to' o `from'" -#: io.c:1045 +#: io.c:1103 #, 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:1050 +#: io.c:1108 msgid "close of redirection that was never opened" msgstr "se cerró una redirección que nunca se abrió" -#: io.c:1147 +#: io.c:1205 #, 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:1164 +#: io.c:1222 #, 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:1167 +#: io.c:1225 #, 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:1187 +#: io.c:1245 #, c-format msgid "no explicit close of socket `%s' provided" msgstr "no se provee el cerrado explícito del `socket' `%s'" -#: io.c:1190 +#: io.c:1248 #, 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:1193 +#: io.c:1251 #, 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:1196 +#: io.c:1254 #, c-format msgid "no explicit close of file `%s' provided" msgstr "no se provee el cerrado explícito del fichero `%s'" -#: io.c:1224 io.c:1279 main.c:842 main.c:879 +#: io.c:1284 io.c:1342 main.c:864 main.c:906 #, c-format msgid "error writing standard output (%s)" msgstr "error al escribir en la salida estándar (%s)" -#: io.c:1228 io.c:1284 +#: io.c:1289 io.c:1348 main.c:866 #, c-format msgid "error writing standard error (%s)" msgstr "error al escribir en la salida estándar de error (%s)" -#: io.c:1236 +#: io.c:1297 #, c-format msgid "pipe flush of `%s' failed (%s)." msgstr "falló la limpieza de la tubería de `%s' (%s)." -#: io.c:1239 +#: io.c:1300 #, 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:1242 +#: io.c:1303 #, c-format msgid "file flush of `%s' failed (%s)." msgstr "falló la limpieza del fichero de `%s' (%s)." -#: io.c:1356 +#: io.c:1420 #, c-format msgid "local port %s invalid in `/inet'" msgstr "puerto local %s inválido en `/inet'" -#: io.c:1374 +#: io.c:1438 #, 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:1526 +#: 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:1540 +#: io.c:1604 #, c-format msgid "special file name `%s' is incomplete" msgstr "el nombre de fichero especial `%s' está incompleto" -#: io.c:1557 +#: 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:1575 +#: io.c:1639 msgid "must supply a remote port to `/inet'" msgstr "se debe proporcionar a `/inet' un puerto remoto" -#: io.c:1621 +#: io.c:1685 msgid "TCP/IP communications are not supported" msgstr "no se admiten las comunicaciones TCP/IP" -#: io.c:1796 +#: io.c:1867 #, c-format msgid "could not open `%s', mode `%s'" msgstr "no se puede abrir `%s', modo `%s'" -#: io.c:1846 +#: io.c:1917 #, c-format msgid "close of master pty failed (%s)" msgstr "falló al cerrar el pty maestro (%s)" -#: io.c:1848 io.c:2024 io.c:2194 +#: io.c:1919 io.c:2105 io.c:2305 #, c-format msgid "close of stdout in child failed (%s)" msgstr "falló al cerrar la salida estándar en el hijo (%s)" -#: io.c:1851 +#: io.c:1922 #, 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:1853 io.c:2029 +#: io.c:1924 io.c:2110 #, c-format msgid "close of stdin in child failed (%s)" msgstr "falló al cerrar la entrada estándar en el hijo (%s)" -#: io.c:1856 +#: io.c:1927 #, 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:1858 io.c:1879 +#: io.c:1929 io.c:1951 #, c-format msgid "close of slave pty failed (%s)" msgstr "falló al cerrar el pty esclavo (%s)" -#: io.c:1965 io.c:2027 io.c:2171 io.c:2197 +#: io.c:2040 io.c:2108 io.c:2276 io.c:2308 #, 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:1972 io.c:2032 +#: io.c:2047 io.c:2113 #, 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:1992 io.c:2187 +#: io.c:2073 io.c:2298 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:2000 +#: io.c:2081 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:2035 io.c:2199 io.c:2213 +#: io.c:2116 io.c:2310 io.c:2324 #, c-format msgid "close of pipe failed (%s)" msgstr "falló al cerrar la tubería (%s)" -#: io.c:2089 +#: io.c:2174 msgid "`|&' not supported" msgstr "no se admite `|&'" -#: io.c:2156 +#: io.c:2261 #, c-format msgid "cannot open pipe `%s' (%s)" msgstr "no se puede abrir la tubería `%s' (%s)" -#: io.c:2207 +#: io.c:2318 #, 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:2667 +#: io.c:2790 msgid "register_input_parser: received NULL pointer" msgstr "" -#: io.c:2695 +#: io.c:2818 #, c-format msgid "input parser `%s' conflicts with previously installed input parser `%s'" msgstr "" -#: io.c:2702 +#: io.c:2825 #, c-format msgid "input parser `%s' failed to open `%s'" msgstr "" -#: io.c:2722 +#: io.c:2845 msgid "register_output_wrapper: received NULL pointer" msgstr "" -#: io.c:2750 +#: io.c:2873 #, c-format msgid "" "output wrapper `%s' conflicts with previously installed output wrapper `%s'" msgstr "" -#: io.c:2757 +#: io.c:2880 #, c-format msgid "output wrapper `%s' failed to open `%s'" msgstr "" -#: io.c:2778 +#: io.c:2901 msgid "register_output_processor: received NULL pointer" msgstr "" -#: io.c:2807 +#: io.c:2930 #, c-format msgid "" "two-way processor `%s' conflicts with previously installed two-way processor " "`%s'" msgstr "" -#: io.c:2816 +#: io.c:2939 #, c-format msgid "two way processor `%s' failed to open `%s'" msgstr "" -#: io.c:2923 +#: io.c:3064 #, c-format msgid "data file `%s' is empty" msgstr "el fichero de datos `%s' está vacío" -#: io.c:2965 io.c:2973 +#: io.c:3106 io.c:3114 msgid "could not allocate more input memory" msgstr "no se puede reservar más memoria de entrada" -#: io.c:3539 +#: io.c:3682 msgid "multicharacter value of `RS' is a gawk extension" msgstr "el valor multicaracter de `RS' es una extensión de gawk" -#: io.c:3628 +#: io.c:3771 msgid "IPv6 communication is not supported" msgstr "no se admite la comunicación IPv6" -#: main.c:388 +#: main.c:405 msgid "empty argument to `-e/--source' ignored" msgstr "se descarta el argumento vacío para `-e/--source'" -#: main.c:478 +#: 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:524 +#: 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:545 +#: main.c:562 msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'" msgstr "" "la variable de ambiente `POSIXLY_CORRECT' está definida: se activa `--posix'" -#: main.c:551 +#: main.c:568 msgid "`--posix' overrides `--traditional'" msgstr "`--posix' se impone a `--traditional'" -#: main.c:562 +#: main.c:579 msgid "`--posix'/`--traditional' overrides `--non-decimal-data'" msgstr "`--posix'/`--traditional' se imponen a `--non-decimal-data'" -#: main.c:566 +#: main.c:583 #, 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:571 +#: main.c:588 #, fuzzy msgid "`--posix' overrides `--characters-as-bytes'" msgstr "`--posix' se impone a `--binary'" -#: main.c:630 +#: main.c:647 #, 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:633 +#: main.c:650 #, 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:635 +#: main.c:652 #, 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:693 +#: main.c:710 msgid "no program text at all!" msgstr "¡No hay ningún programa de texto!" -#: main.c:779 +#: main.c:799 #, 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:781 +#: main.c:801 #, 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:786 +#: main.c:806 msgid "POSIX options:\t\tGNU long options: (standard)\n" msgstr "Opciones POSIX:\t\tOpciones largas GNU: (estándar)\n" -#: main.c:787 +#: main.c:807 msgid "\t-f progfile\t\t--file=progfile\n" msgstr "\t-f fichprog\t\t--file=fichprog\n" -#: main.c:788 +#: main.c:808 msgid "\t-F fs\t\t\t--field-separator=fs\n" msgstr "\t-F sc\t\t\t--field-separator=sc\n" -#: main.c:789 +#: main.c:809 msgid "\t-v var=val\t\t--assign=var=val\n" msgstr "\t-v var=valor\t\t--assign=var=valor\n" -#: main.c:790 +#: main.c:810 msgid "Short options:\t\tGNU long options: (extensions)\n" msgstr "Opciones cortas:\t\tOpciones largas GNU: (extensiones)\n" -#: main.c:791 +#: main.c:811 msgid "\t-b\t\t\t--characters-as-bytes\n" msgstr "\t-b\t\t\t--characters-as-bytes\n" -#: main.c:792 +#: main.c:812 msgid "\t-c\t\t\t--traditional\n" msgstr "\t-c\t\t\t--traditional\n" -#: main.c:793 +#: main.c:813 msgid "\t-C\t\t\t--copyright\n" msgstr "\t-C\t\t\t--copyright\n" -#: main.c:794 +#: main.c:814 msgid "\t-d[file]\t\t--dump-variables[=file]\n" msgstr "\t-d[fichero]\t\t--dump-variables[=fichero]\n" -#: main.c:795 +#: main.c:815 #, 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:796 +#: main.c:816 msgid "\t-e 'program-text'\t--source='program-text'\n" msgstr "\t-e 'texto-prog'\t--source='texto-prog'\n" -#: main.c:797 +#: main.c:817 msgid "\t-E file\t\t\t--exec=file\n" msgstr "\t-E fichero\t\t--exec=fichero\n" -#: main.c:798 +#: main.c:818 msgid "\t-g\t\t\t--gen-pot\n" msgstr "\t-g\t\t\t--gen-pot\n" -#: main.c:799 +#: main.c:819 msgid "\t-h\t\t\t--help\n" msgstr "\t-h\t\t\t--help\n" -#: main.c:800 +#: main.c:820 msgid "\t-i includefile\t\t--include=includefile\n" msgstr "" -#: main.c:801 +#: main.c:821 msgid "\t-l library\t\t--load=library\n" msgstr "" -#: main.c:802 +#: main.c:822 msgid "\t-L [fatal]\t\t--lint[=fatal]\n" msgstr "\t-L [fatal]\t\t--lint[=fatal]\n" -#: main.c:803 +#: 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:804 +#: main.c:824 #, fuzzy msgid "\t-M\t\t\t--bignum\n" msgstr "\t-g\t\t\t--gen-pot\n" -#: main.c:805 +#: main.c:825 msgid "\t-N\t\t\t--use-lc-numeric\n" msgstr "\t-N\t\t\t--use-lc-numeric\n" -#: main.c:806 +#: main.c:826 #, fuzzy msgid "\t-o[file]\t\t--pretty-print[=file]\n" msgstr "\t-p[fichero]\t\t--profile[=fichero]\n" -#: main.c:807 +#: main.c:827 msgid "\t-O\t\t\t--optimize\n" msgstr "\t-O\t\t\t--optimize\n" -#: main.c:808 +#: main.c:828 msgid "\t-p[file]\t\t--profile[=file]\n" msgstr "\t-p[fichero]\t\t--profile[=fichero]\n" -#: main.c:809 +#: main.c:829 msgid "\t-P\t\t\t--posix\n" msgstr "\t-P\t\t\t--posix\n" -#: main.c:810 +#: main.c:830 msgid "\t-r\t\t\t--re-interval\n" msgstr "\t-r\t\t\t--re-interval\n" -#: main.c:811 +#: main.c:831 msgid "\t-S\t\t\t--sandbox\n" msgstr "\t-S\t\t\t--sandbox\n" -#: main.c:812 +#: main.c:832 msgid "\t-t\t\t\t--lint-old\n" msgstr "\t-t\t\t\t--lint-old\n" -#: main.c:813 +#: main.c:833 msgid "\t-V\t\t\t--version\n" msgstr "\t-V\t\t\t--version\n" -#: main.c:815 +#: main.c:835 msgid "\t-W nostalgia\t\t--nostalgia\n" msgstr "\t-W nostalgia\t\t--nostalgia\n" -#: main.c:818 +#: main.c:838 msgid "\t-Y\t\t--parsedebug\n" msgstr "\t-Y\t\t--parsedebug\n" @@ -3149,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:827 +#: main.c:847 msgid "" "\n" "To report bugs, see node `Bugs' in `gawk.info', which is\n" @@ -3163,7 +3182,7 @@ msgstr "" "Reporte los errores de los mensajes en español a .\n" "\n" -#: main.c:831 +#: main.c:851 msgid "" "gawk is a pattern scanning and processing language.\n" "By default it reads standard input and writes standard output.\n" @@ -3173,7 +3192,7 @@ msgstr "" "Por defecto lee la entrada estándar y escribe en la salida estándar.\n" "\n" -#: main.c:835 +#: main.c:855 msgid "" "Examples:\n" "\tgawk '{ sum += $1 }; END { print sum }' file\n" @@ -3183,7 +3202,7 @@ msgstr "" "\tgawk '{ sum += $1 }; END { print sum }' fichero\n" "\tgawk -F: '{ print $1 }' /etc/passwd\n" -#: main.c:855 +#: main.c:880 #, c-format msgid "" "Copyright (C) 1989, 1991-%d Free Software Foundation.\n" @@ -3203,7 +3222,7 @@ msgstr "" "(a su elección) cualquier versión posterior.\n" "\n" -#: main.c:863 +#: main.c:888 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" @@ -3217,7 +3236,7 @@ msgstr "" "Licencia Pública General de GNU para más detalles.\n" "\n" -#: main.c:869 +#: main.c:894 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" @@ -3226,16 +3245,16 @@ msgstr "" "junto con este programa. Si no es así, consulte\n" "http://www.gnu.org/licenses/.\n" -#: main.c:904 +#: main.c:931 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:1181 +#: main.c:1208 #, c-format msgid "unknown value for field spec: %d\n" msgstr "valor desconocido para la especificación de campo: %d\n" -#: main.c:1279 +#: main.c:1306 #, c-format msgid "" "%s: `%s' argument to `-v' not in `var=value' form\n" @@ -3244,49 +3263,49 @@ msgstr "" "%s: el argumento `%s' para `-v' no es de la forma `var=valor'\n" "\n" -#: main.c:1305 +#: main.c:1332 #, c-format msgid "`%s' is not a legal variable name" msgstr "`%s' no es un nombre de variable legal" -#: main.c:1308 +#: main.c:1335 #, 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:1312 +#: main.c:1339 #, 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:1317 +#: main.c:1344 #, 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:1370 +#: main.c:1397 msgid "floating point exception" msgstr "excepción de coma flotante" -#: main.c:1377 +#: main.c:1404 msgid "fatal error: internal error" msgstr "error fatal: error interno" -#: main.c:1392 +#: main.c:1419 msgid "fatal error: internal error: segfault" msgstr "error fatal: error interno: falla de segmentación" -#: main.c:1404 +#: main.c:1431 msgid "fatal error: internal error: stack overflow" msgstr "error fatal: error interno: desbordamiento de pila" -#: main.c:1463 +#: main.c:1490 #, c-format msgid "no pre-opened fd %d" msgstr "no existe el df %d abierto previamente" -#: main.c:1470 +#: main.c:1497 #, c-format msgid "could not pre-open /dev/null for fd %d" msgstr "no se puede abrir previamente /dev/null para el df %d" @@ -3345,7 +3364,7 @@ msgstr "or(%lf, %lf): los valores fraccionarios serán truncados" msgid "%s: argument #%d negative value %Zd will give strange results" msgstr "compl(%lf): el valor negativo dará resultados extraños" -#: msg.c:61 +#: msg.c:68 #, c-format msgid "cmd. line:" msgstr "línea ord.:" @@ -3400,16 +3419,16 @@ msgstr "" msgid "%s %s `%s': could not set close-on-exec: (fcntl F_SETFD: %s)" msgstr "%s %s `%s': no se puede establecer close-on-exec: (fcntl F_SETFD: %s)" -#: profile.c:70 +#: profile.c:71 #, c-format msgid "could not open `%s' for writing: %s" msgstr "no se puede abrir `%s' para escritura: %s" -#: profile.c:72 +#: profile.c:73 msgid "sending profile to standard error" msgstr "se envía el perfil a la salida estándar de error" -#: profile.c:188 +#: profile.c:193 #, c-format msgid "" "\t# %s block(s)\n" @@ -3418,7 +3437,7 @@ msgstr "" "\t# bloque(s) %s\n" "\n" -#: profile.c:193 +#: profile.c:198 #, c-format msgid "" "\t# Rule(s)\n" @@ -3427,29 +3446,29 @@ msgstr "" "\t# Regla(s)\n" "\n" -#: profile.c:267 +#: profile.c:272 #, c-format msgid "internal error: %s with null vname" msgstr "error interno: %s con vname nulo" -#: profile.c:530 +#: profile.c:537 #, fuzzy msgid "internal error: builtin with null fname" msgstr "error interno: %s con vname nulo" -#: profile.c:942 +#: profile.c:949 #, c-format msgid "" "\t# Loaded extensions (-l and/or @load)\n" "\n" msgstr "" -#: profile.c:965 +#: profile.c:972 #, c-format msgid "\t# gawk profile, created %s\n" msgstr "\t# perfil de gawk, creado %s\n" -#: profile.c:1351 +#: profile.c:1475 #, c-format msgid "" "\n" @@ -3458,17 +3477,12 @@ msgstr "" "\n" "\t# Funciones, enumeradas alfabéticamente\n" -#: profile.c:1389 +#: profile.c:1513 #, c-format msgid "redir2str: unknown redirection type %d" msgstr "redir2str: tipo de redirección %d desconocida" -#: re.c:583 -#, c-format -msgid "range of the form `[%c-%c]' is locale dependent" -msgstr "el rango de la forma `[%c-%c]' depende del local" - -#: re.c:610 +#: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" msgstr "" @@ -3538,10 +3552,13 @@ msgstr ") o \\) desemparejados" msgid "No previous regular expression" msgstr "No hay una expresión regular previa" -#: symbol.c:740 +#: symbol.c:741 msgid "can not pop main context" msgstr "" +#~ msgid "range of the form `[%c-%c]' is locale dependent" +#~ msgstr "el rango de la forma `[%c-%c]' depende del local" + #, fuzzy #~ msgid "[s]printf called with no arguments" #~ msgstr "sqrt: se llamó con el argumento negativo %g" diff --git a/po/fi.gmo b/po/fi.gmo index 117053a5..478aa070 100644 Binary files a/po/fi.gmo and b/po/fi.gmo differ diff --git a/po/fi.po b/po/fi.po index 0f3ba5ac..49014233 100644 --- a/po/fi.po +++ b/po/fi.po @@ -7,7 +7,7 @@ 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" +"POT-Creation-Date: 2014-04-08 19:23+0300\n" "PO-Revision-Date: 2014-01-16 13:32+0200\n" "Last-Translator: Jorma Karvonen \n" "Language-Team: Finnish \n" @@ -37,8 +37,8 @@ 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:1599 builtin.c:1645 -#: builtin.c:1658 builtin.c:2086 builtin.c:2100 eval.c:1122 eval.c:1126 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" @@ -76,19 +76,27 @@ msgstr "asorti: ensimmäinen argumentti ei ole taulukko" #: array.c:831 msgid "asort: cannot use a subarray of first arg for second arg" -msgstr "asort: ensimmäisen argumentin alitaulukon käyttö toiselle argumentille epäonnistui" +msgstr "" +"asort: ensimmäisen argumentin alitaulukon käyttö toiselle argumentille " +"epäonnistui" #: array.c:832 msgid "asorti: cannot use a subarray of first arg for second arg" -msgstr "asorti: ensimmäisen argumentin alitaulukon käyttö toiselle argumentille epäonnistui" +msgstr "" +"asorti: ensimmäisen argumentin alitaulukon käyttö toiselle argumentille " +"epäonnistui" #: array.c:837 msgid "asort: cannot use a subarray of second arg for first arg" -msgstr "asort: toisen argumentin alitaulukon käyttö ensimmäiselle argumentille epäonnistui" +msgstr "" +"asort: toisen argumentin alitaulukon käyttö ensimmäiselle argumentille " +"epäonnistui" #: array.c:838 msgid "asorti: cannot use a subarray of second arg for first arg" -msgstr "asorti: toisen argumentin alitaulukon käyttö ensimmäiselle argumentille epäonnistui" +msgstr "" +"asorti: toisen argumentin alitaulukon käyttö ensimmäiselle argumentille " +"epäonnistui" #: array.c:1314 #, c-format @@ -120,12 +128,14 @@ msgstr "â€%s†on sisäänrakennettu funktio. Sitä ei voi määritellä uudel #: awkgram.y:419 msgid "regexp constant `//' looks like a C++ comment, but is not" -msgstr "säännöllisen lausekkeen vakio â€//†näyttää C++-kommentilta, mutta ei ole" +msgstr "" +"säännöllisen lausekkeen vakio â€//†näyttää C++-kommentilta, mutta ei ole" #: awkgram.y:423 #, 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" +msgstr "" +"säännöllisen lausekkeen vakio â€/%s/†näyttää C-kommentilta, mutta ei ole" #: awkgram.y:515 #, c-format @@ -136,11 +146,11 @@ msgstr "kaksi samanlaista case-arvoa switch-rakenteen rungossa: %s" msgid "duplicate `default' detected in switch body" msgstr "kaksoiskappale â€default†havaittu switch-rungossa" -#: awkgram.y:796 awkgram.y:3699 +#: awkgram.y:796 awkgram.y:3723 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:3691 +#: awkgram.y:805 awkgram.y:3715 msgid "`continue' is not allowed outside a loop" msgstr "â€continue†ei ole sallittu silmukan ulkopuolella" @@ -160,7 +170,8 @@ msgstr "â€return†käytetty funktiokontekstin ulkopuolella" #: awkgram.y:922 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 \"\"â€" +msgstr "" +"pelkkä â€print†BEGIN- tai END-säännössä pitäisi luultavasti olla â€print \"\"â€" #: awkgram.y:988 awkgram.y:1037 msgid "`delete' is not allowed with SYMTAB" @@ -229,262 +240,266 @@ msgstr "erikoismuuttujan â€%s†käyttö epäsuoralle funktiokutsulle epäonni msgid "invalid subscript expression" msgstr "virheellinen indeksointilauseke" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126 +#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "varoitus: " -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158 +#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "tuhoisa: " -#: awkgram.y:2092 +#: awkgram.y:2116 msgid "unexpected newline or end of string" msgstr "odottamaton rivinvaihto tai merkkijonon loppu" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:523 debug.c:539 +#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 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:2360 awkgram.y:2485 +#: awkgram.y:2384 awkgram.y:2509 #, c-format msgid "can't open shared library `%s' for reading (%s)" msgstr "jaetun kirjaston â€%s†avaaminen lukemista varten (%s) epäonnistui" -#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:135 debug.c:5206 +#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "syy tuntematon" -#: awkgram.y:2371 awkgram.y:2395 +#: awkgram.y:2395 awkgram.y:2419 #, 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:2384 +#: awkgram.y:2408 #, c-format msgid "already included source file `%s'" msgstr "on jo sisällytetty lähdetiedostoon â€%sâ€" -#: awkgram.y:2385 +#: awkgram.y:2409 #, c-format msgid "already loaded shared library `%s'" msgstr "jaettu kirjasto â€%s†on jo ladattu" -#: awkgram.y:2420 +#: awkgram.y:2444 msgid "@include is a gawk extension" msgstr "@include on gawk-laajennus" -#: awkgram.y:2426 +#: awkgram.y:2450 msgid "empty filename after @include" msgstr "tyhjä tiedostonimi @include:n jälkeen" -#: awkgram.y:2470 +#: awkgram.y:2494 msgid "@load is a gawk extension" msgstr "@load on gawk-laajennus" -#: awkgram.y:2476 +#: awkgram.y:2500 msgid "empty filename after @load" msgstr "tyhjä tiedostonimi @load:n jälkeen" -#: awkgram.y:2610 +#: awkgram.y:2634 msgid "empty program text on command line" msgstr "tyhjä ohjelmateksti komentorivillä" -#: awkgram.y:2725 +#: awkgram.y:2749 #, c-format msgid "can't read sourcefile `%s' (%s)" msgstr "lähdetiedoston â€%s†(%s) lukeminen epäonnistui" -#: awkgram.y:2736 +#: awkgram.y:2760 #, c-format msgid "source file `%s' is empty" msgstr "lähdetiedosto â€%s†on tyhjä" -#: awkgram.y:2913 +#: awkgram.y:2937 msgid "source file does not end in newline" msgstr "lähdetiedoston lopussa ei ole rivinvaihtoa" -#: awkgram.y:3018 +#: awkgram.y:3042 msgid "unterminated regexp ends with `\\' at end of file" -msgstr "päättämätön säännöllinen lauseke loppuu â€\\â€-merkkeihin tiedoston lopussa" +msgstr "" +"päättämätön säännöllinen lauseke loppuu â€\\â€-merkkeihin tiedoston lopussa" -#: awkgram.y:3042 +#: awkgram.y:3066 #, 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:3046 +#: awkgram.y:3070 #, c-format msgid "tawk regex modifier `/.../%c' doesn't work in gawk" msgstr "tawkin regex-määre â€/.../%c†ei toimi gawkissa" -#: awkgram.y:3053 +#: awkgram.y:3077 msgid "unterminated regexp" msgstr "päättämätön säännöllinen lauseke" -#: awkgram.y:3057 +#: awkgram.y:3081 msgid "unterminated regexp at end of file" msgstr "päättämätön säännöllinen lauseke tiedoston lopussa" -#: awkgram.y:3116 +#: awkgram.y:3140 msgid "use of `\\ #...' line continuation is not portable" msgstr "â€\\ #...â€-rivijatkamisen käyttö ei ole siirrettävä" -#: awkgram.y:3132 +#: awkgram.y:3156 msgid "backslash not last character on line" msgstr "kenoviiva ei ole rivin viimeinen merkki" -#: awkgram.y:3193 +#: awkgram.y:3217 msgid "POSIX does not allow operator `**='" msgstr "POSIX ei salli operaattoria â€**=â€" -#: awkgram.y:3195 +#: awkgram.y:3219 msgid "old awk does not support operator `**='" msgstr "vanha awk ei tue operaattoria â€**=â€" -#: awkgram.y:3204 +#: awkgram.y:3228 msgid "POSIX does not allow operator `**'" msgstr "POSIX ei salli operaattoria â€**â€" -#: awkgram.y:3206 +#: awkgram.y:3230 msgid "old awk does not support operator `**'" msgstr "vanha awk ei tue operaattoria â€**â€" -#: awkgram.y:3241 +#: awkgram.y:3265 msgid "operator `^=' is not supported in old awk" msgstr "operaattoria â€^=†ei tueta vanhassa awk:ssa" -#: awkgram.y:3249 +#: awkgram.y:3273 msgid "operator `^' is not supported in old awk" msgstr "operaattoria â€^†ei tueta vanhassa awk:ssa" -#: awkgram.y:3342 awkgram.y:3358 command.y:1178 +#: awkgram.y:3366 awkgram.y:3382 command.y:1178 msgid "unterminated string" msgstr "päättämätön merkkijono" -#: awkgram.y:3579 +#: awkgram.y:3603 #, c-format msgid "invalid char '%c' in expression" msgstr "virheellinen merkki ’%c’ lausekkeessa" -#: awkgram.y:3626 +#: awkgram.y:3650 #, c-format msgid "`%s' is a gawk extension" msgstr "â€%s†on gawk-laajennus" -#: awkgram.y:3631 +#: awkgram.y:3655 #, c-format msgid "POSIX does not allow `%s'" msgstr "POSIX ei salli operaattoria â€%sâ€" -#: awkgram.y:3639 +#: awkgram.y:3663 #, c-format msgid "`%s' is not supported in old awk" msgstr "â€%s†ei ole tuettu vanhassa awk-ohjelmassa" -#: awkgram.y:3729 +#: awkgram.y:3753 msgid "`goto' considered harmful!\n" msgstr "â€gotoâ€-käskyä pidetään haitallisena!\n" -#: awkgram.y:3763 +#: awkgram.y:3787 #, c-format msgid "%d is invalid as number of arguments for %s" msgstr "%d on virheellinen argumenttilukumäärä operaattorille %s" -#: awkgram.y:3798 +#: awkgram.y:3822 #, c-format msgid "%s: string literal as last arg of substitute has no effect" -msgstr "%s: merkkijonoliteraalilla ei ole vaikutusta korvauksen viimeisenä argumenttina" +msgstr "" +"%s: merkkijonoliteraalilla ei ole vaikutusta korvauksen viimeisenä " +"argumenttina" -#: awkgram.y:3803 +#: awkgram.y:3827 #, c-format msgid "%s third parameter is not a changeable object" msgstr "%s kolmas parametri ei ole vaihdettava objekti" -#: awkgram.y:3886 awkgram.y:3889 +#: awkgram.y:3910 awkgram.y:3913 msgid "match: third argument is a gawk extension" msgstr "match: kolmas argumentti on gawk-laajennus" -#: awkgram.y:3943 awkgram.y:3946 +#: awkgram.y:3967 awkgram.y:3970 msgid "close: second argument is a gawk extension" msgstr "close: toinen argumentti on gawk-laajennus" -#: awkgram.y:3958 +#: awkgram.y:3982 msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore" msgstr "dcgettext(_\"...\")-käyttö on virheellinen: poista alaviiva alusta" -#: awkgram.y:3973 +#: awkgram.y:3997 msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" msgstr "dcngettext(_\"...\")-käyttö on virheellinen: poista alaviiva alusta" -#: awkgram.y:3992 +#: awkgram.y:4016 msgid "index: regexp constant as second argument is not allowed" msgstr "index: regexp-vakio toisena argumenttina ei ole sallittu" -#: awkgram.y:4045 +#: awkgram.y:4069 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "funktio â€%sâ€: parametri â€%s†varjostaa yleismuuttujaa" -#: awkgram.y:4102 debug.c:4041 debug.c:4084 debug.c:5204 +#: awkgram.y:4126 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:4103 +#: awkgram.y:4127 msgid "sending variable list to standard error" msgstr "lähetetään muuttujaluettelo vakiovirheeseen" -#: awkgram.y:4111 +#: awkgram.y:4135 #, c-format msgid "%s: close failed (%s)" msgstr "%s: sulkeminen epäonnistui (%s)" -#: awkgram.y:4136 +#: awkgram.y:4160 msgid "shadow_funcs() called twice!" msgstr "shadow_funcs() kutsuttu kahdesti!" -#: awkgram.y:4144 +#: awkgram.y:4168 msgid "there were shadowed variables." msgstr "siellä oli varjostettuja muuttujia." -#: awkgram.y:4215 +#: awkgram.y:4239 #, c-format msgid "function name `%s' previously defined" msgstr "funktionimi â€%s†on jo aikaisemmin määritelty" -#: awkgram.y:4261 +#: awkgram.y:4285 #, c-format msgid "function `%s': can't use function name as parameter name" msgstr "funktio â€%sâ€: funktionimen käyttö parametrinimenä epäonnistui" -#: awkgram.y:4264 +#: awkgram.y:4288 #, 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" +msgstr "" +"funktio â€%sâ€: erikoismuuttujan â€%s†käyttö funktioparametrina epäonnistui" -#: awkgram.y:4272 +#: awkgram.y:4296 #, c-format msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d" msgstr "funktio â€%sâ€: parametri #%d, â€%sâ€, samanlainen parametri #%d" -#: awkgram.y:4359 awkgram.y:4365 +#: awkgram.y:4383 awkgram.y:4389 #, c-format msgid "function `%s' called but never defined" msgstr "funktiota â€%s†kutsuttiin, mutta sitä ei ole koskaan määritelty" -#: awkgram.y:4369 +#: awkgram.y:4393 #, c-format msgid "function `%s' defined but never called directly" msgstr "funktio â€%s†määriteltiin, mutta sitä ei ole koskaan kutsuttu suoraan" -#: awkgram.y:4401 +#: awkgram.y:4425 #, c-format msgid "regexp constant for parameter #%d yields boolean value" msgstr "säännöllisen lausekkeen vakio parametrille #%d antaa boolean-arvon" -#: awkgram.y:4460 +#: awkgram.y:4484 #, c-format msgid "" "function `%s' called with space between name and `(',\n" @@ -493,20 +508,21 @@ msgstr "" "funktio â€%s†kutsuttu välilyönnillä nimen ja â€(â€-merkin\n" "välillä, tai käytetty muuttujana tai taulukkona" -#: awkgram.y:4696 +#: awkgram.y:4720 msgid "division by zero attempted" msgstr "nollalla jakoa yritettiin" -#: awkgram.y:4705 +#: awkgram.y:4729 #, c-format msgid "division by zero attempted in `%%'" msgstr "jakoa nollalla yritettiin operaattorissa â€%%â€" -#: awkgram.y:5025 -msgid "cannot assign a value to the result of a field post-increment expression" +#: awkgram.y:5049 +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:5028 +#: awkgram.y:5052 #, c-format msgid "invalid target of assignment (opcode %s)" msgstr "virheellinen liittämiskohde (käskykoodi %s)" @@ -533,12 +549,16 @@ msgstr "exp: argumentti %g on lukualueen ulkopuolella" #: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" -msgstr "fflush: tyhjentäminen epäonnistui: putki â€%s†avattu lukemista varten, ei kirjoittamiseen" +msgstr "" +"fflush: tyhjentäminen epäonnistui: putki â€%s†avattu lukemista varten, ei " +"kirjoittamiseen" #: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" -msgstr "fflush: tyhjentäminen epäonnistui: tiedosto â€%s†avattu lukemista varten, ei kirjoittamiseen" +msgstr "" +"fflush: tyhjentäminen epäonnistui: tiedosto â€%s†avattu lukemista varten, ei " +"kirjoittamiseen" #: builtin.c:244 #, c-format @@ -608,7 +628,9 @@ msgstr "kohtalokas: argumenttilukumäärän argumentilla â€$†on oltava > 0" #: builtin.c:919 #, 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ä" +msgstr "" +"kohtalokas: argumenttilukumäärä %ld on suurempi kuin toimitettujen " +"argumenttien lukumäärä" #: builtin.c:923 msgid "fatal: `$' not permitted after period in format" @@ -616,299 +638,309 @@ msgstr "kohtalokas: â€$â€-argumentti ei ole sallittu pisteen jälkeen muodossa #: builtin.c:939 msgid "fatal: no `$' supplied for positional field width or precision" -msgstr "kohtalokas: ei â€$â€-argumenttia tarjottu sijantikenttäleveydelle tai tarkkuudelle" +msgstr "" +"kohtalokas: ei â€$â€-argumenttia tarjottu sijantikenttäleveydelle tai " +"tarkkuudelle" -#: builtin.c:1011 +#: builtin.c:1009 msgid "`l' is meaningless in awk formats; ignored" msgstr "â€l†on merkityksetön awk-muodoissa; ohitetaan" -#: builtin.c:1015 +#: builtin.c:1013 msgid "fatal: `l' is not permitted in POSIX awk formats" msgstr "kohtalokas: â€l†ei ole sallittu POSIX awk -muodoissa" -#: builtin.c:1028 +#: builtin.c:1026 msgid "`L' is meaningless in awk formats; ignored" msgstr "â€L†on merkityksetön awk-muodoissa; ohitetaan" -#: builtin.c:1032 +#: builtin.c:1030 msgid "fatal: `L' is not permitted in POSIX awk formats" msgstr "kohtalokas: â€L†ei ole sallittu POSIX awk -muodoissa" -#: builtin.c:1045 +#: builtin.c:1043 msgid "`h' is meaningless in awk formats; ignored" msgstr "â€h†on merkityksetön awk-muodoissa; ohitetaan" -#: builtin.c:1049 +#: builtin.c:1047 msgid "fatal: `h' is not permitted in POSIX awk formats" msgstr "kohtalokas: â€h†ei ole sallittu POSIX awk -muodoissa" -#: builtin.c:1447 +#: builtin.c:1463 #, 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:1545 +#: builtin.c:1561 #, c-format msgid "ignoring unknown format specifier character `%c': no argument converted" -msgstr "ohitetaan tuntematon muotoargumenttimerkki â€%câ€: ei muunnettu argumenttia" +msgstr "" +"ohitetaan tuntematon muotoargumenttimerkki â€%câ€: ei muunnettu argumenttia" -#: builtin.c:1550 +#: builtin.c:1566 msgid "fatal: not enough arguments to satisfy format string" msgstr "kohtalokas: ei kylliksi argumentteja muotomerkkijonon tyydyttämiseksi" -#: builtin.c:1552 +#: builtin.c:1568 msgid "^ ran out for this one" msgstr "^ tällainen loppui kesken" -#: builtin.c:1559 +#: builtin.c:1575 msgid "[s]printf: format specifier does not have control letter" msgstr "[s]printf: muotoargumentilla ei ole ohjauskirjainta" -#: builtin.c:1562 +#: builtin.c:1578 msgid "too many arguments supplied for format string" msgstr "muotomerkkijonoon toimitettu liian monta argumenttia" -#: builtin.c:1618 +#: builtin.c:1634 msgid "sprintf: no arguments" msgstr "sprintf: ei argumentteja" -#: builtin.c:1641 builtin.c:1652 +#: builtin.c:1657 builtin.c:1668 msgid "printf: no arguments" msgstr "printf: ei argumentteja" -#: builtin.c:1695 +#: builtin.c:1711 msgid "sqrt: received non-numeric argument" msgstr "sqrt: vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:1699 +#: builtin.c:1715 #, c-format msgid "sqrt: called with negative argument %g" msgstr "sqrt: kutsuttu negatiivisella argumentilla %g" -#: builtin.c:1730 +#: builtin.c:1746 #, c-format msgid "substr: length %g is not >= 1" msgstr "substr: pituus %g ei ole >= 1" -#: builtin.c:1732 +#: builtin.c:1748 #, c-format msgid "substr: length %g is not >= 0" msgstr "substr: pituus %g ei ole >= 0" -#: builtin.c:1739 +#: builtin.c:1755 #, c-format msgid "substr: non-integer length %g will be truncated" msgstr "substr: typistetään pituus %g, joka ei ole kokonaisluku" -#: builtin.c:1744 +#: builtin.c:1760 #, 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" +msgstr "" +"substr: pituus %g liian suuri merkkijononindeksointiin, typistetään arvoon %g" -#: builtin.c:1756 +#: builtin.c:1772 #, c-format msgid "substr: start index %g is invalid, using 1" msgstr "substr: aloitusindeksi %g on virheellinen, käytetään 1:tä" -#: builtin.c:1761 +#: builtin.c:1777 #, c-format msgid "substr: non-integer start index %g will be truncated" msgstr "substr: typistetään aloitusindeksi %g, joka ei ole kokonaisluku" -#: builtin.c:1786 +#: builtin.c:1802 msgid "substr: source string is zero length" msgstr "substr: lähdemerkkijono on nollapituinen" -#: builtin.c:1802 +#: builtin.c:1818 #, c-format msgid "substr: start index %g is past end of string" msgstr "substr: aloitusindeksi %g on merkkijonon lopun jälkeen" -#: builtin.c:1810 +#: builtin.c:1826 #, c-format -msgid "substr: length %g at start index %g exceeds length of first argument (%lu)" -msgstr "substr: pituus %g alkuindeksissä %g ylittää ensimmäisen argumentin pituuden (%lu)" +msgid "" +"substr: length %g at start index %g exceeds length of first argument (%lu)" +msgstr "" +"substr: pituus %g alkuindeksissä %g ylittää ensimmäisen argumentin pituuden " +"(%lu)" -#: builtin.c:1884 +#: builtin.c:1900 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" -msgstr "strftime: muotoarvolla kohteessa PROCINFO[\"strftime\"] on numerotyyppi" +msgstr "" +"strftime: muotoarvolla kohteessa PROCINFO[\"strftime\"] on numerotyyppi" -#: builtin.c:1907 +#: builtin.c:1923 msgid "strftime: received non-numeric second argument" msgstr "strftime: toinen vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:1911 +#: builtin.c:1927 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" +msgstr "" +"strftime: toinen argumentti on pienempi kuin 0 tai liian suuri time_t-" +"rakenteeseen" -#: builtin.c:1918 +#: builtin.c:1934 msgid "strftime: received non-string first argument" msgstr "strftime: ensimmäinen vastaanotettu argumentti ei ole merkkijono" -#: builtin.c:1925 +#: builtin.c:1941 msgid "strftime: received empty format string" msgstr "strftime: vastaanotettu tyhjä muotomerkkijono" -#: builtin.c:1991 +#: builtin.c:2007 msgid "mktime: received non-string argument" msgstr "mktime: vastaanotettu argumentti ei ole merkkijono" -#: builtin.c:2008 +#: builtin.c:2024 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:2043 +#: builtin.c:2059 msgid "'system' function not allowed in sandbox mode" msgstr "’system’-funktio ei ole sallittu hiekkalaatikkotilassa" -#: builtin.c:2048 +#: builtin.c:2064 msgid "system: received non-string argument" msgstr "system: vastaanotettu argumentti ei ole merkkijono" -#: builtin.c:2168 +#: builtin.c:2184 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "viite alustamattomaan kenttään â€$%dâ€" -#: builtin.c:2255 +#: builtin.c:2271 msgid "tolower: received non-string argument" msgstr "tolower: vastaanotettu argumentti ei ole merkkijono" -#: builtin.c:2289 +#: builtin.c:2305 msgid "toupper: received non-string argument" msgstr "toupper: vastaanotettu argumentti ei ole merkkijono" -#: builtin.c:2325 mpfr.c:672 +#: builtin.c:2341 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2: ensimmäinen vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:2327 mpfr.c:674 +#: builtin.c:2343 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2: toinen vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:2346 +#: builtin.c:2362 msgid "sin: received non-numeric argument" msgstr "sin: vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:2362 +#: builtin.c:2378 msgid "cos: received non-numeric argument" msgstr "cos: vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:2415 mpfr.c:1156 +#: builtin.c:2431 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand: vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:2446 +#: builtin.c:2462 msgid "match: third argument is not an array" msgstr "match: kolmas argumentti ei ole taulukko" -#: builtin.c:2718 +#: builtin.c:2734 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub: 0-arvoinen kolmas argumentti käsitellään kuin 1" -#: builtin.c:3014 +#: builtin.c:3030 msgid "lshift: received non-numeric first argument" msgstr "lshift: ensimmäinen vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:3016 +#: builtin.c:3032 msgid "lshift: received non-numeric second argument" msgstr "lshift: toinen vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:3022 +#: builtin.c:3038 #, c-format msgid "lshift(%f, %f): negative values will give strange results" msgstr "lshift(%f, %f): negatiiviset arvot antavat outoja tuloksia" -#: builtin.c:3024 +#: builtin.c:3040 #, c-format msgid "lshift(%f, %f): fractional values will be truncated" msgstr "lshift(%f, %f): jaosarvot typistetään" -#: builtin.c:3026 +#: builtin.c:3042 #, 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:3051 +#: builtin.c:3067 msgid "rshift: received non-numeric first argument" msgstr "rshift: ensimmäinen vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:3053 +#: builtin.c:3069 msgid "rshift: received non-numeric second argument" msgstr "rshift: toinen vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:3059 +#: builtin.c:3075 #, c-format msgid "rshift(%f, %f): negative values will give strange results" msgstr "rshift(%f, %f): negatiiviset arvot antavat outoja tuloksia" -#: builtin.c:3061 +#: builtin.c:3077 #, c-format msgid "rshift(%f, %f): fractional values will be truncated" msgstr "rshift(%f, %f): jaosarvot typistetään" -#: builtin.c:3063 +#: builtin.c:3079 #, 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:3088 mpfr.c:968 +#: builtin.c:3104 mpfr.c:968 msgid "and: called with less than two arguments" msgstr "and: kutsuttu vähemmällä kuin kahdella argumentilla" -#: builtin.c:3093 +#: builtin.c:3109 #, c-format msgid "and: argument %d is non-numeric" msgstr "and: argumentti %d ei ole numeeraaliargumentti" -#: builtin.c:3097 +#: builtin.c:3113 #, 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:3120 mpfr.c:1000 +#: builtin.c:3136 mpfr.c:1000 msgid "or: called with less than two arguments" msgstr "or: kutsuttu vähemmällä kuin kahdella argumentilla" -#: builtin.c:3125 +#: builtin.c:3141 #, c-format msgid "or: argument %d is non-numeric" msgstr "or: argumentti %d ei ole numeraaliargumentti" -#: builtin.c:3129 +#: builtin.c:3145 #, 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:3151 mpfr.c:1031 +#: builtin.c:3167 mpfr.c:1031 msgid "xor: called with less than two arguments" msgstr "xor: kutsuttu vähemmällä kuin kahdella argumentilla" -#: builtin.c:3157 +#: builtin.c:3173 #, c-format msgid "xor: argument %d is non-numeric" msgstr "xor: argumentti %d ei ole numeraaliargumentti" -#: builtin.c:3161 +#: builtin.c:3177 #, 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:3186 mpfr.c:787 +#: builtin.c:3202 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl: vastaanotettu argumentti ei ole numeerinen" -#: builtin.c:3192 +#: builtin.c:3208 #, c-format msgid "compl(%f): negative value will give strange results" msgstr "compl(%f): negatiivinen arvo antaa outoja tuloksia" -#: builtin.c:3194 +#: builtin.c:3210 #, c-format msgid "compl(%f): fractional value will be truncated" msgstr "compl(%f): jaosarvo typistetään" -#: builtin.c:3363 +#: builtin.c:3379 #, c-format msgid "dcgettext: `%s' is not a valid locale category" msgstr "dcgettext: â€%s†ei ole kelvollinen paikallinen kategoria" @@ -940,7 +972,8 @@ msgstr "save â€%sâ€: komento ei ole sallittu." #: command.y:339 msgid "Can't use command `commands' for breakpoint/watchpoint commands" -msgstr "Komennon â€commands†käyttö breakpoint/watchpoint-komentoja varten epäonnistui" +msgstr "" +"Komennon â€commands†käyttö breakpoint/watchpoint-komentoja varten epäonnistui" #: command.y:341 msgid "no breakpoint/watchpoint has been set yet" @@ -1014,24 +1047,36 @@ msgid "non-zero integer value" msgstr "nollasta poikkeava kokonaislukuarvo" #: command.y:817 -msgid "backtrace [N] - 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." +msgid "" +"backtrace [N] - 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:819 -msgid "break [[filename:]N|function] - set breakpoint at the specified location." -msgstr "break [[filename:]N|function] - aseta breakpoint määriteltyyn sijaintiin." +msgid "" +"break [[filename:]N|function] - set breakpoint at the specified location." +msgstr "" +"break [[filename:]N|function] - aseta breakpoint määriteltyyn sijaintiin." #: command.y:821 msgid "clear [[filename:]N|function] - delete breakpoints previously set." -msgstr "clear [[filename:]N|function] - poista aiemmin asetetut breakpoint-kohdat." +msgstr "" +"clear [[filename:]N|function] - poista aiemmin asetetut breakpoint-kohdat." #: command.y:823 -msgid "commands [num] - starts a list of commands to be executed at a breakpoint(watchpoint) hit." -msgstr "commands [num] - aloittaa komentojen luettelon, joka suoritetaan keskeytyskohta(watchpoint)osumassa." +msgid "" +"commands [num] - starts a list of commands to be executed at a " +"breakpoint(watchpoint) hit." +msgstr "" +"commands [num] - aloittaa komentojen luettelon, joka suoritetaan " +"keskeytyskohta(watchpoint)osumassa." #: command.y:825 msgid "condition num [expr] - set or clear breakpoint or watchpoint condition." -msgstr "condition num [expr] - aseta tai nollaa keskeytyskohta- tai vahtikohtaehdot." +msgstr "" +"condition num [expr] - aseta tai nollaa keskeytyskohta- tai vahtikohtaehdot." #: command.y:827 msgid "continue [COUNT] - continue program being debugged." @@ -1039,15 +1084,19 @@ msgstr "continue [COUNT] - continue program being debugged." #: command.y:829 msgid "delete [breakpoints] [range] - delete specified breakpoints." -msgstr "delete [keskeytyskohdat] [lukualue] - poista määritellyt keskeytyskohdat." +msgstr "" +"delete [keskeytyskohdat] [lukualue] - poista määritellyt keskeytyskohdat." #: command.y:831 msgid "disable [breakpoints] [range] - disable specified breakpoints." -msgstr "disable [keskeytyskohdat] [lukualue] - ota pois käytöstä määritellyt keskeytyskohdat." +msgstr "" +"disable [keskeytyskohdat] [lukualue] - ota pois käytöstä määritellyt " +"keskeytyskohdat." #: command.y:833 msgid "display [var] - print value of variable each time the program stops." -msgstr "display [muuttuja] - tulosta muuttujan arvo joka kerta kun ohjelma pysähtyy." +msgstr "" +"display [muuttuja] - tulosta muuttujan arvo joka kerta kun ohjelma pysähtyy." #: command.y:835 msgid "down [N] - move N frames down the stack." @@ -1059,7 +1108,9 @@ msgstr "dump [tiedostonimi] - vedosta käskyt tiedostoon tai vakiotulosteeseen." #: command.y:839 msgid "enable [once|del] [breakpoints] [range] - enable specified breakpoints." -msgstr "enable [once|del] [keskeytyskohdat] [lukualue] - ota käyttöön määritellyt keskeytyskohdat." +msgstr "" +"enable [once|del] [keskeytyskohdat] [lukualue] - ota käyttöön määritellyt " +"keskeytyskohdat." #: command.y:841 msgid "end - end a list of commands or awk statements." @@ -1083,23 +1134,32 @@ msgstr "help [komento] - tulosta komentoluettelo tai komennon selitys." #: command.y:851 msgid "ignore N COUNT - set ignore-count of breakpoint number N to COUNT." -msgstr "ignore N COUNT - aseta keskeytyskohdan ignore-count numero N arvoon COUNT." +msgstr "" +"ignore N COUNT - aseta keskeytyskohdan ignore-count numero N arvoon COUNT." #: command.y:853 -msgid "info topic - source|sources|variables|functions|break|frame|args|locals|display|watch." -msgstr "info aihe - 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 aihe - 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 [-|+|[tiedostonimi:]rivinumero|funktio|lukualue] - luettele määritellyt rivit." +msgstr "" +"list [-|+|[tiedostonimi:]rivinumero|funktio|lukualue] - luettele määritellyt " +"rivit." #: command.y:857 msgid "next [COUNT] - step program, proceeding through subroutine calls." msgstr "next [COUNT] - askella ohjelmaa, etene alirutiinikutsujen kautta." #: command.y:859 -msgid "nexti [COUNT] - step one instruction, but proceed through subroutine calls." -msgstr "nexti [COUNT] - askella yksi käsky, mutta etene alirutiinikutsujen kautta." +msgid "" +"nexti [COUNT] - step one instruction, but proceed through subroutine calls." +msgstr "" +"nexti [COUNT] - askella yksi käsky, mutta etene alirutiinikutsujen kautta." #: command.y:861 msgid "option [name[=value]] - set or display debugger option(s)." @@ -1134,8 +1194,11 @@ msgid "set var = value - assign value to a scalar variable." msgstr "set var = arvo - liitä arvo skalaarimuuttujaan." #: command.y:879 -msgid "silent - suspends usual message when stopped at a breakpoint/watchpoint." -msgstr "silent - pysäyttää tavallisen viestin kun pysähdytään katkaisukohdassa/vahtipisteessä." +msgid "" +"silent - suspends usual message when stopped at a breakpoint/watchpoint." +msgstr "" +"silent - pysäyttää tavallisen viestin kun pysähdytään katkaisukohdassa/" +"vahtipisteessä." #: command.y:881 msgid "source file - execute commands from file." @@ -1143,7 +1206,8 @@ msgstr "source file - suorita komennot tiedostosta." #: command.y:883 msgid "step [COUNT] - step program until it reaches a different source line." -msgstr "step [COUNT] - askella ohjelmaa, kunnes se saavuttaa eri lähdekoodirivin." +msgstr "" +"step [COUNT] - askella ohjelmaa, kunnes se saavuttaa eri lähdekoodirivin." #: command.y:885 msgid "stepi [COUNT] - step one instruction exactly." @@ -1162,8 +1226,12 @@ msgid "undisplay [N] - remove variable(s) from automatic display list." msgstr "undisplay [N] - poista muuttuja(t) automaattisesta näyttöluettelosta." #: command.y:893 -msgid "until [[filename:]N|function] - execute until program reaches a different line or line N within current frame." -msgstr "until [[tiedostonimi:]N|funktio] - suorita kunnes ohjelma tavoittaa eri rivin tai rivin N nykyisen kehyksen sisällä." +msgid "" +"until [[filename:]N|function] - execute until program reaches a different " +"line or line N within current frame." +msgstr "" +"until [[tiedostonimi:]N|funktio] - suorita kunnes ohjelma tavoittaa eri " +"rivin tai rivin N nykyisen kehyksen sisällä." #: command.y:895 msgid "unwatch [N] - remove variable(s) from watch list." @@ -1233,7 +1301,8 @@ msgstr "aseta tai näytä vianjäljittäjäkehote." #: debug.c:260 msgid "(un)set or show saving of command history (value=on|off)." -msgstr "aseta, poista asetus tai näytä komentohistoriatallennus (value=on|off)." +msgstr "" +"aseta, poista asetus tai näytä komentohistoriatallennus (value=on|off)." #: debug.c:262 msgid "(un)set or show saving of options (value=on|off)." @@ -1269,7 +1338,9 @@ msgstr "lähdetiedostoa nimeltä â€%s†(%s) ei kyetä lukemaan" #: debug.c:529 #, c-format msgid "WARNING: source file `%s' modified since program compilation.\n" -msgstr "VAROITUS: lähdekooditiedostoa â€%s†on muokattu ohjelman kääntämisen jälkeen.\n" +msgstr "" +"VAROITUS: lähdekooditiedostoa â€%s†on muokattu ohjelman kääntämisen " +"jälkeen.\n" #: debug.c:551 #, c-format @@ -1279,12 +1350,14 @@ msgstr "rivinumero %d lukualueen ulkopuolella; kohteessa â€%s†on %d riviä" #: debug.c:611 #, c-format msgid "unexpected eof while reading file `%s', line %d" -msgstr "odottamaton eof-tiedostonloppumerkki luettaessa tiedostoa â€%sâ€, rivi %d" +msgstr "" +"odottamaton eof-tiedostonloppumerkki luettaessa tiedostoa â€%sâ€, rivi %d" #: debug.c:620 #, c-format msgid "source file `%s' modified since start of program execution" -msgstr "lähdekooditiedostoa â€%s†on muokattu ohjelman suorituksen aloituksen jälkeen" +msgstr "" +"lähdekooditiedostoa â€%s†on muokattu ohjelman suorituksen aloituksen jälkeen" #: debug.c:732 #, c-format @@ -1465,7 +1538,8 @@ msgstr "yritettiin käyttää skalaariarvoa taulukkona" #: debug.c:1856 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" -msgstr "Watchpoint %d poistettiin, koska parametri on lukualueen ulkopuolella.\n" +msgstr "" +"Watchpoint %d poistettiin, koska parametri on lukualueen ulkopuolella.\n" #: debug.c:1867 #, c-format @@ -1499,22 +1573,29 @@ msgstr "virheellinen kehysnumero" #: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" -msgstr "Huomaa: keskeytyskohta %d (otettu käyttöön, ohita seuraavat %ld osumaa), asetettu myös osoitteessa %s:%d" +msgstr "" +"Huomaa: keskeytyskohta %d (otettu käyttöön, ohita seuraavat %ld osumaa), " +"asetettu myös osoitteessa %s:%d" #: debug.c:2207 #, c-format msgid "Note: breakpoint %d (enabled), also set at %s:%d" -msgstr "Huomaa: keskeytyskohta %d (otettu käyttöön), asetettu myös kohdassa %s:%d" +msgstr "" +"Huomaa: keskeytyskohta %d (otettu käyttöön), asetettu myös kohdassa %s:%d" #: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" -msgstr "Huomaa: keskeytyskohta %d (otettu pois käytöstä, ohita seuraavat %ld osumaa), asetettu myös kohdassa %s:%d" +msgstr "" +"Huomaa: keskeytyskohta %d (otettu pois käytöstä, ohita seuraavat %ld " +"osumaa), asetettu myös kohdassa %s:%d" #: debug.c:2221 #, c-format msgid "Note: breakpoint %d (disabled), also set at %s:%d" -msgstr "Huomaa: keskeytyskohta %d (otettu pois käytöstä), asetettu myös kohdassa %s:%d" +msgstr "" +"Huomaa: keskeytyskohta %d (otettu pois käytöstä), asetettu myös kohdassa %s:" +"%d" #: debug.c:2238 #, c-format @@ -1591,7 +1672,8 @@ msgstr "Pysähtyy seuraavalla kerralla kun keskeytyskohta %d saavutetaan.\n" #: debug.c:2783 #, c-format msgid "Can only debug programs provided with the `-f' option.\n" -msgstr "Vain ohjelmia, jotka tarjoavat valitsimen â€-fâ€, voidaan vikajäljittää.\n" +msgstr "" +"Vain ohjelmia, jotka tarjoavat valitsimen â€-fâ€, voidaan vikajäljittää.\n" #: debug.c:2908 #, c-format @@ -1615,7 +1697,8 @@ msgstr "virhe: uudelleenkäynnistys epäonnistui, toiminto ei ole sallittu\n" #: debug.c:2942 #, c-format msgid "error (%s): cannot restart, ignoring rest of the commands\n" -msgstr "virhe (%s): uudelleenkäynnistys epäonnistui, loput komennot ohitetaan\n" +msgstr "" +"virhe (%s): uudelleenkäynnistys epäonnistui, loput komennot ohitetaan\n" #: debug.c:2950 #, c-format @@ -1649,7 +1732,8 @@ msgstr "Ohittaa seuraavat %ld keskeytyskohdan %d ylitystä.\n" #: debug.c:3207 #, c-format msgid "'finish' not meaningful in the outermost frame main()\n" -msgstr "’finish’ ei ole merkityksellinen ulommaisen kehyksen main()-funktiossa\n" +msgstr "" +"’finish’ ei ole merkityksellinen ulommaisen kehyksen main()-funktiossa\n" #: debug.c:3212 #, c-format @@ -1659,7 +1743,8 @@ msgstr "Suorita kunnes paluu kohteesta " #: debug.c:3255 #, c-format msgid "'return' not meaningful in the outermost frame main()\n" -msgstr "’return’ ei ole merkityksellinen ulommaisen kehyksen main()-funktiossa\n" +msgstr "" +"’return’ ei ole merkityksellinen ulommaisen kehyksen main()-funktiossa\n" #: debug.c:3369 #, c-format @@ -1737,40 +1822,40 @@ msgstr "â€return†ei ole sallittu nykyisessä asiayhteydessä; lause ohitetaa msgid "No symbol `%s' in current context" msgstr "Symbolia â€%s†ei ole nykyisesssä asiayhteydessä" -#: 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: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 msgid "unbalanced [" msgstr "pariton [" -#: dfa.c:1052 +#: dfa.c:1174 msgid "invalid character class" msgstr "virheellinen merkkiluokka" -#: dfa.c:1228 +#: dfa.c:1316 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "merkkiluokkasyntaksi on [[:space:]], ei [:space:]" -#: dfa.c:1280 +#: dfa.c:1366 msgid "unfinished \\ escape" msgstr "päättymätön \\-koodinvaihtomerkki" -#: dfa.c:1427 regcomp.c:161 +#: dfa.c:1513 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "Virheellinen \\{\\}-sisältö" -#: dfa.c:1430 regcomp.c:176 +#: dfa.c:1516 regcomp.c:176 msgid "Regular expression too big" msgstr "Säännöllinen lauseke on liian iso" -#: dfa.c:1847 +#: dfa.c:1936 msgid "unbalanced (" msgstr "pariton (" -#: dfa.c:1973 +#: dfa.c:2062 msgid "no syntax specified" msgstr "syntaksi ei ole määritelty" -#: dfa.c:1981 +#: dfa.c:2070 msgid "unbalanced )" msgstr "pariton )" @@ -1892,8 +1977,10 @@ msgstr "load_ext: kirjaston â€%s†(%s) avaus epäonnistui\n" #: ext.c:104 #, 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" +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 #, c-format @@ -1920,8 +2007,10 @@ msgstr "extension: kirjaston â€%s†(%s) avaus epäonnistui" #: ext.c:186 #, 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)" +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 #, c-format @@ -1950,7 +2039,9 @@ msgstr "make_builtin: funktionimi â€%s†on määritelty jo aiemmin" #: ext.c:246 #, 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" +msgstr "" +"make_builtin: gawk-ohjelman sisäisen muuttujanimen â€%s†käyttö funktionimenä " +"epäonnistui" #: ext.c:249 ext.c:304 #, c-format @@ -1984,7 +2075,9 @@ msgstr "extension: funktionimi â€%s†on määritelty jo aiemmin" #: ext.c:301 #, 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" +msgstr "" +"extension: gawk-ohjelman sisäisen muuttujanimen käyttö â€%s†funktionimenä " +"epäonnistui" #: ext.c:375 #, c-format @@ -2153,16 +2246,21 @@ msgstr "inplace_begin: kohdallaanmuokkaus on jo aktivoitu" #: extension/inplace.c:133 extension/inplace.c:207 #, c-format msgid "inplace_begin: expects 2 arguments but called with %d" -msgstr "inplace_begin: odotetaan 2 argumenttia, mutta kutsussa oli %d argumenttia" +msgstr "" +"inplace_begin: odotetaan 2 argumenttia, mutta kutsussa oli %d argumenttia" #: extension/inplace.c:136 msgid "inplace_begin: cannot retrieve 1st argument as a string filename" -msgstr "inplace_begin: ensimmäisen argumentin noutaminen merkkijonotiedostonimenä epäonnistui" +msgstr "" +"inplace_begin: ensimmäisen argumentin noutaminen merkkijonotiedostonimenä " +"epäonnistui" #: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" -msgstr "inplace_begin: ottaen pois käytöstä virheellisen TIEDOSTONIMI â€%s†muokkauksen" +msgstr "" +"inplace_begin: ottaen pois käytöstä virheellisen TIEDOSTONIMI â€%s†" +"muokkauksen" #: extension/inplace.c:151 #, c-format @@ -2201,7 +2299,9 @@ msgstr "inplace_begin: close(%d) epäonnistui (%s)" #: extension/inplace.c:210 msgid "inplace_end: cannot retrieve 1st argument as a string filename" -msgstr "inplace_end: ensimmäisen argumentin noutaminen merkkijonotiedostonimenä epäonnistui" +msgstr "" +"inplace_end: ensimmäisen argumentin noutaminen merkkijonotiedostonimenä " +"epäonnistui" #: extension/inplace.c:217 msgid "inplace_end: in-place editing not active" @@ -2256,16 +2356,16 @@ msgstr "chr: kutsuttu ilman argumentteja" msgid "chr: called with inappropriate argument(s)" msgstr "chr: kutsuttu sopimattomalla argumentilla" -#: 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 epäonnistui: %s" -#: extension/readfile.c:84 +#: extension/readfile.c:113 msgid "readfile: called with too many arguments" msgstr "readfile: kutsuttu liian monella argumentilla" -#: extension/readfile.c:118 +#: extension/readfile.c:137 msgid "readfile: called with no arguments" msgstr "readfile: kutsuttu ilman argumentteja" @@ -2317,27 +2417,27 @@ msgstr "do_reada: clear_array epäonnistui\n" msgid "read_array: set_array_element failed\n" msgstr "read_array: set_array_element epäonnistui\n" -#: extension/time.c:106 +#: extension/time.c:113 msgid "gettimeofday: ignoring arguments" msgstr "gettimeofday: ohitetaan argumentit" -#: extension/time.c:137 +#: extension/time.c:144 msgid "gettimeofday: not supported on this platform" msgstr "gettimeofday: ei ole tuettu tällä alustalla" -#: extension/time.c:158 +#: extension/time.c:165 msgid "sleep: called with too many arguments" msgstr "sleep: kutsuttu liian monella argumentilla" -#: extension/time.c:161 +#: extension/time.c:168 msgid "sleep: missing required numeric argument" msgstr "sleep: puuttuu vaadittu numeerinen argumentti" -#: extension/time.c:167 +#: extension/time.c:174 msgid "sleep: argument is negative" msgstr "sleep: argumentti on negatiivinen" -#: extension/time.c:201 +#: extension/time.c:208 msgid "sleep: not supported on this platform" msgstr "sleep: ei ole tuettu tällä alustalla" @@ -2359,15 +2459,20 @@ msgstr "split: toinen argumentti ei ole taulukko" #: field.c:993 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" +msgstr "" +"split: saman taulukon käyttö toiselle ja neljännelle argumentille epäonnistui" #: field.c:998 msgid "split: cannot use a subarray of second arg for fourth arg" -msgstr "split: toisen argumentin käyttö alitaulukkoa neljännelle argumentille epäonnistui" +msgstr "" +"split: toisen argumentin käyttö alitaulukkoa neljännelle argumentille " +"epäonnistui" #: field.c:1001 msgid "split: cannot use a subarray of fourth arg for second arg" -msgstr "split: neljännen argumentin käyttö alitaulukkoa toiselle argumentille epäonnistui" +msgstr "" +"split: neljännen argumentin käyttö alitaulukkoa toiselle argumentille " +"epäonnistui" #: field.c:1032 msgid "split: null string for third arg is a gawk extension" @@ -2387,15 +2492,21 @@ msgstr "patsplit: kolmas argumentti ei ole taulukko" #: field.c:1087 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" +msgstr "" +"patsplit: saman taulukon käyttö toiselle ja neljännelle argumentille " +"epäonnistui" #: field.c:1092 msgid "patsplit: cannot use a subarray of second arg for fourth arg" -msgstr "patsplit: toisen argumentin käyttö alitaulukkkoa neljännelle argumentille epäonnistui" +msgstr "" +"patsplit: toisen argumentin käyttö alitaulukkkoa neljännelle argumentille " +"epäonnistui" #: field.c:1095 msgid "patsplit: cannot use a subarray of fourth arg for second arg" -msgstr "patsplit: neljännen argumentin käyttö alitaulukkoa toiselle argumentille epäonnistui" +msgstr "" +"patsplit: neljännen argumentin käyttö alitaulukkoa toiselle argumentille " +"epäonnistui" #: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" @@ -2430,20 +2541,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:808 +#: gawkapi.c:807 msgid "remove_element: received null array" msgstr "remove_element: vastaanotettu null-taulukko" -#: gawkapi.c:811 +#: gawkapi.c:810 msgid "remove_element: received null subscript" msgstr "remove_element: vastaanotti null-alaindeksin" -#: gawkapi.c:948 +#: gawkapi.c:947 #, c-format msgid "api_flatten_array: could not convert index %d\n" msgstr "api_flatten_array: indeksin %d muuntaminen epäonnistui\n" -#: gawkapi.c:953 +#: gawkapi.c:952 #, c-format msgid "api_flatten_array: could not convert value %d\n" msgstr "api_flatten_array: arvon %d muuntaminen epäonnistui\n" @@ -2535,7 +2646,9 @@ msgstr "lausekkeella â€%sâ€-uudelleenohjauksessa on null-merkkijonoarvo" #: io.c:761 #, c-format msgid "filename `%s' for `%s' redirection may be result of logical expression" -msgstr "tiedostonimi â€%s†â€%sâ€-uudelleenohjaukselle saattaa olla loogisen lausekkeen tulos" +msgstr "" +"tiedostonimi â€%s†â€%sâ€-uudelleenohjaukselle saattaa olla loogisen lausekkeen " +"tulos" #: io.c:809 #, c-format @@ -2555,7 +2668,8 @@ msgstr "putken â€%s†avaaminen syötteelle (%s) epäonnistui" #: io.c:904 #, 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" +msgstr "" +"kaksisuuntaisen putken â€%s†avaaminen syötteelle/tulosteelle (%s) epäonnistui" #: io.c:986 #, c-format @@ -2568,8 +2682,11 @@ msgid "can't redirect to `%s' (%s)" msgstr "uudelleenohjaus putkeen â€%s†(%s) epäonnistui" #: io.c:1040 -msgid "reached system limit for open files: starting to multiplex file descriptors" -msgstr "saavutettiin avoimien tiedostojen järjestelmäraja: aloitetaan tiedostomäärittelijöiden lomittaminen" +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 #, c-format @@ -2596,7 +2713,9 @@ msgstr "suljettiin uudelleenohjaus, jota ei avattu koskaan" #: io.c:1205 #, c-format msgid "close: redirection `%s' not opened with `|&', second argument ignored" -msgstr "close: uudelleenohjaus â€%s†ei ole avattu operaattoreilla â€|&â€, toinen argumentti ohitettu" +msgstr "" +"close: uudelleenohjaus â€%s†ei ole avattu operaattoreilla â€|&â€, toinen " +"argumentti ohitettu" #: io.c:1222 #, c-format @@ -2703,7 +2822,9 @@ msgstr "vakiotulosteen sulkeminen lapsiprosessissa epäonnistui (%s)" #: io.c:1922 #, 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)" +msgstr "" +"â€slave ptyâ€:n siirtäminen vakiotulosteeseen lapsiprosessissa epäonnistui " +"(dup: %s)" #: io.c:1924 io.c:2110 #, c-format @@ -2713,7 +2834,9 @@ msgstr "vakiosyötteen sulkeminen lapsiprosessissa epäonnistui (%s)" #: io.c:1927 #, 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)" +msgstr "" +"â€slave ptyâ€:n siirtäminen vakiosyötteeseen lapsiprosessissa epäonnistui " +"(dup: %s)" #: io.c:1929 io.c:1951 #, c-format @@ -2723,12 +2846,14 @@ msgstr "â€slave ptyâ€:n sulkeminen epäonnistui (%s)" #: io.c:2040 io.c:2108 io.c:2276 io.c:2308 #, c-format msgid "moving pipe to stdout in child failed (dup: %s)" -msgstr "putken siirtäminen vakiotulosteeseen lapsiprosessissa epäonnistui (dup: %s)" +msgstr "" +"putken siirtäminen vakiotulosteeseen lapsiprosessissa epäonnistui (dup: %s)" #: io.c:2047 io.c:2113 #, c-format msgid "moving pipe to stdin in child failed (dup: %s)" -msgstr "putken siirtäminen vakiosyötteeseen lapsiprosessissa epäonnistui (dup: %s)" +msgstr "" +"putken siirtäminen vakiosyötteeseen lapsiprosessissa epäonnistui (dup: %s)" #: io.c:2073 io.c:2298 msgid "restoring stdout in parent process failed\n" @@ -2764,7 +2889,9 @@ msgstr "register_input_parser: vastaanotettiin NULL-osoitin" #: io.c:2818 #, 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" +msgstr "" +"syötejäsennin â€%s†on ristiriidassa aiemmin asennetun syötejäsentimen â€%s†" +"kanssa" #: io.c:2825 #, c-format @@ -2777,8 +2904,11 @@ msgstr "register_output_wrapper: vastaanotti NULL-osoittimen" #: io.c:2873 #, c-format -msgid "output wrapper `%s' conflicts with previously installed output wrapper `%s'" -msgstr "tulostekäärin â€%s†on ristiriidassa aiemmin asennetun tulostekäärimen â€%s†kanssa" +msgid "" +"output wrapper `%s' conflicts with previously installed output wrapper `%s'" +msgstr "" +"tulostekäärin â€%s†on ristiriidassa aiemmin asennetun tulostekäärimen â€%s†" +"kanssa" #: io.c:2880 #, c-format @@ -2791,8 +2921,12 @@ msgstr "register_output_processor: vastaanotti NULL-osoittimen" #: io.c:2930 #, c-format -msgid "two-way processor `%s' conflicts with previously installed two-way processor `%s'" -msgstr "kaksisuuntainen prosessori â€%s†on ristiriidassa aiemmin asennetun kaksisuuntaisen prosessorin â€%s†kanssa" +msgid "" +"two-way processor `%s' conflicts with previously installed two-way processor " +"`%s'" +msgstr "" +"kaksisuuntainen prosessori â€%s†on ristiriidassa aiemmin asennetun " +"kaksisuuntaisen prosessorin â€%s†kanssa" #: io.c:2939 #, c-format @@ -2832,7 +2966,9 @@ msgstr "%s: valitsin vaatii argumentin -- %c\n" #: main.c:562 msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'" -msgstr "ympäristömuuttuja â€POSIXLY_CORRECT†asetettu: käännetään päälle valitsin â€--posixâ€" +msgstr "" +"ympäristömuuttuja â€POSIXLY_CORRECT†asetettu: käännetään päälle valitsin â€--" +"posixâ€" #: main.c:568 msgid "`--posix' overrides `--traditional'" @@ -2840,7 +2976,8 @@ msgstr "valitsin â€--posix†korvaa valitsimen â€--traditionalâ€" #: main.c:579 msgid "`--posix'/`--traditional' overrides `--non-decimal-data'" -msgstr "valitsin â€--posix†tai â€--traditional†korvaa valitsimen â€--non-decimal-dataâ€" +msgstr "" +"valitsin â€--posix†tai â€--traditional†korvaa valitsimen â€--non-decimal-dataâ€" #: main.c:583 #, c-format @@ -2873,12 +3010,16 @@ msgstr "ei ohjelmatekstiä ollenkaan!" #: main.c:799 #, 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" +msgstr "" +"Käyttö: %s [POSIX- tai GNU-tyyliset valitsimet] -f ohjelmatiedosto [--] " +"tiedosto ...\n" #: main.c:801 #, 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" +msgstr "" +"Käyttö: %s [POSIX- tai GNU-tyyliset valitsimet] [--] %cohjelma%c " +"tiedosto ...\n" #: main.c:806 msgid "POSIX options:\t\tGNU long options: (standard)\n" @@ -3013,7 +3154,8 @@ msgid "" "\n" msgstr "" "\n" -"Virheiden ilmoittamista varten, katso solmua â€Bugs†tiedostossa â€gawk.infoâ€,\n" +"Virheiden ilmoittamista varten, katso solmua â€Bugs†tiedostossa â€gawk." +"infoâ€,\n" "joka on kappale â€Reporting Problems and Bugs†painetussa versiossa.\n" "\n" @@ -3109,7 +3251,8 @@ msgstr "â€%s†ei ole muuttujanimi, etsitään tiedostoa â€%s=%sâ€" #: main.c:1339 #, c-format msgid "cannot use gawk builtin `%s' as variable name" -msgstr "gawk-ohjelman sisäisen â€%sâ€-määrittelyn käyttö muuttujanimenä epäonnistui" +msgstr "" +"gawk-ohjelman sisäisen â€%sâ€-määrittelyn käyttö muuttujanimenä epäonnistui" #: main.c:1344 #, c-format @@ -3140,7 +3283,8 @@ msgstr "ei avattu uudelleen tiedostomäärittelijää %d" #: main.c:1497 #, c-format msgid "could not pre-open /dev/null for fd %d" -msgstr "laitteen /dev/null avaaminen uudelleen tiedostomäärittelijälle %d epäonnistui" +msgstr "" +"laitteen /dev/null avaaminen uudelleen tiedostomäärittelijälle %d epäonnistui" #: mpfr.c:550 #, c-format @@ -3216,8 +3360,12 @@ msgstr "ei heksadesimaalilukuja â€\\xâ€-koodinvaihtosekvenssissä" #: node.c:579 #, c-format -msgid "hex escape \\x%.*s of %d characters probably not interpreted the way you expect" -msgstr "heksadesimaalikoodinvaihtomerkkejä \\x%.*s / %d ei ole luultavasti tulkittu sillä tavalla kuin odotat" +msgid "" +"hex escape \\x%.*s of %d characters probably not interpreted the way you " +"expect" +msgstr "" +"heksadesimaalikoodinvaihtomerkkejä \\x%.*s / %d ei ole luultavasti tulkittu " +"sillä tavalla kuin odotat" #: node.c:594 #, c-format @@ -3225,8 +3373,12 @@ msgid "escape sequence `\\%c' treated as plain `%c'" msgstr "koodinvaihtosekvenssi â€\\%c†käsitelty kuin pelkkä â€%câ€" #: node.c:739 -msgid "Invalid multibyte data detected. There may be a mismatch between your data and your locale." -msgstr "Virheellinen monitavutieto havaittu. Paikallisasetuksesi ja tietojesi välillä saattaa olla täsmäämättömyys." +msgid "" +"Invalid multibyte data detected. There may be a mismatch between your data " +"and your locale." +msgstr "" +"Virheellinen monitavutieto havaittu. Paikallisasetuksesi ja tietojesi " +"välillä saattaa olla täsmäämättömyys." #: posix/gawkmisc.c:177 #, c-format @@ -3236,7 +3388,8 @@ msgstr "%s %s â€%sâ€: fd-lippujen hakeminen epäonnistui: (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 -asettaminen epäonnistui: (fcntl F_SETFD: %s)" +msgstr "" +"%s %s â€%sâ€: close-on-exec -asettaminen epäonnistui: (fcntl F_SETFD: %s)" #: profile.c:71 #, c-format @@ -3305,7 +3458,8 @@ msgstr "redir2str: tuntematon edelleenohjaustyyppi %d" #: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" -msgstr "säännöllisen lausekkeen komponentin â€%.*s†pitäisi luultavasti olla â€[%.*s]â€" +msgstr "" +"säännöllisen lausekkeen komponentin â€%.*s†pitäisi luultavasti olla â€[%.*s]â€" #: regcomp.c:131 msgid "Success" @@ -3447,8 +3601,11 @@ msgstr "pääsisällön pop-toiminto epäonnistui" #~ msgid "statement has no effect" #~ msgstr "käskyllä ei ole vaikutusta" -#~ msgid "for loop: array `%s' changed size from %ld to %ld during loop execution" -#~ msgstr "for-silmukka: taulukon â€%s†koko muuttui arvosta %ld arvoon %ld silmukan suorituksen aikana" +#~ msgid "" +#~ "for loop: array `%s' changed size from %ld to %ld during loop execution" +#~ msgstr "" +#~ "for-silmukka: taulukon â€%s†koko muuttui arvosta %ld arvoon %ld silmukan " +#~ "suorituksen aikana" #~ msgid "function called indirectly through `%s' does not exist" #~ msgstr "kohteen â€%s†kautta epäsuorasti kutsuttu funktio ei ole olemassa" @@ -3496,7 +3653,8 @@ msgstr "pääsisällön pop-toiminto epäonnistui" #~ msgstr "muisti loppui" #~ msgid "call of `length' without parentheses is deprecated by POSIX" -#~ msgstr "â€lengthâ€-kutsu ilman sulkumerkkejä on vanhentunut POSIX-standardissa" +#~ msgstr "" +#~ "â€lengthâ€-kutsu ilman sulkumerkkejä on vanhentunut POSIX-standardissa" #~ msgid "division by zero attempted in `/'" #~ msgstr "jakoa nollalla yritettiin operaatiossa â€/â€" @@ -3519,8 +3677,12 @@ msgstr "pääsisällön pop-toiminto epäonnistui" #~ msgid "`nextfile' cannot be called from a BEGIN rule" #~ msgstr "â€nextfile†ei voida kutsua BEGIN-säännöstä" -#~ msgid "concatenation: side effects in one expression have changed the length of another!" -#~ msgstr "concatenation: sivuvaikutukset yhdessä lausekkeessa ovat muuttaneet toisen pituutta!" +#~ msgid "" +#~ "concatenation: side effects in one expression have changed the length of " +#~ "another!" +#~ msgstr "" +#~ "concatenation: sivuvaikutukset yhdessä lausekkeessa ovat muuttaneet " +#~ "toisen pituutta!" #~ msgid "illegal type (%s) in tree_eval" #~ msgstr "virheellinen tyyppi (%s) funktiossa tree_eval" @@ -3584,7 +3746,9 @@ msgstr "pääsisällön pop-toiminto epäonnistui" #~ msgstr "Tuntematon solmutyyppi %s funktiossa pp_var" #~ msgid "can't open two way socket `%s' for input/output (%s)" -#~ msgstr "kaksisuuntaisen vastakkeen â€%s†avaaminen syötteelle/tulosteelle (%s) epäonnistui" +#~ msgstr "" +#~ "kaksisuuntaisen vastakkeen â€%s†avaaminen syötteelle/tulosteelle (%s) " +#~ "epäonnistui" #~ msgid "attempt to use scalar `%s' as array" #~ msgstr "yritettiin käyttää skalaaria â€%s†taulukkona" diff --git a/po/fr.gmo b/po/fr.gmo index b703ee0a..c962ab71 100644 Binary files a/po/fr.gmo and b/po/fr.gmo differ diff --git a/po/fr.po b/po/fr.po index d05521a2..2a951b29 100644 --- a/po/fr.po +++ b/po/fr.po @@ -9,9 +9,10 @@ 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" +"POT-Creation-Date: 2014-04-08 19:23+0300\n" "PO-Revision-Date: 2014-01-16 00:31+0100\n" -"Last-Translator: Jean-Philippe Guérard \n" +"Last-Translator: Jean-Philippe Guérard \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" @@ -38,8 +39,8 @@ 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:1599 builtin.c:1645 -#: builtin.c:1658 builtin.c:2086 builtin.c:2100 eval.c:1122 eval.c:1126 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" @@ -137,11 +138,11 @@ msgstr "le corps du switch comporte des cas répétés : %s" 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:3699 +#: awkgram.y:796 awkgram.y:3723 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:3691 +#: awkgram.y:805 awkgram.y:3715 msgid "`continue' is not allowed outside a loop" msgstr "« continue » est interdit en dehors d'une boucle ou d'un switch" @@ -161,7 +162,9 @@ msgstr "« return » est utilisé hors du contexte d'une fonction" #: awkgram.y:922 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 \"\" »" +msgstr "" +"dans BEGIN ou END, un « print » seul devrait sans doute être un « print " +"\"\" »" #: awkgram.y:988 awkgram.y:1037 msgid "`delete' is not allowed with SYMTAB" @@ -224,268 +227,285 @@ msgstr "les appels indirects de fonctions sont une extension gawk" #: awkgram.y:1620 #, 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" +msgstr "" +"impossible d'utiliser la variable spéciale « %s » pour un appel indirect de " +"fonction" #: awkgram.y:1698 msgid "invalid subscript expression" msgstr "expression indice incorrecte" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126 +#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "avertissement : " -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158 +#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "fatal : " -#: awkgram.y:2092 +#: awkgram.y:2116 msgid "unexpected newline or end of string" msgstr "fin de chaîne ou passage à la ligne inattendu" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:523 debug.c:539 +#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 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:2360 awkgram.y:2485 +#: awkgram.y:2384 awkgram.y:2509 #, 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:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:135 debug.c:5206 +#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "raison inconnue" -#: awkgram.y:2371 awkgram.y:2395 +#: awkgram.y:2395 awkgram.y:2419 #, 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:2384 +#: awkgram.y:2408 #, c-format msgid "already included source file `%s'" msgstr "le fichier source « %s » a déjà été intégré" -#: awkgram.y:2385 +#: awkgram.y:2409 #, c-format msgid "already loaded shared library `%s'" msgstr "la bibliothèque partagée « %s » est déjà chargée" -#: awkgram.y:2420 +#: awkgram.y:2444 msgid "@include is a gawk extension" msgstr "@include est une extension gawk" -#: awkgram.y:2426 +#: awkgram.y:2450 msgid "empty filename after @include" msgstr "Le nom de fichier après @include est vide" -#: awkgram.y:2470 +#: awkgram.y:2494 msgid "@load is a gawk extension" msgstr "@load est une extension gawk" -#: awkgram.y:2476 +#: awkgram.y:2500 msgid "empty filename after @load" msgstr "Le nom de fichier après @load est vide" -#: awkgram.y:2610 +#: awkgram.y:2634 msgid "empty program text on command line" msgstr "le programme indiqué en ligne de commande est vide" -#: awkgram.y:2725 +#: awkgram.y:2749 #, c-format msgid "can't read sourcefile `%s' (%s)" msgstr "impossible de lire le fichier source « %s » (%s)" -#: awkgram.y:2736 +#: awkgram.y:2760 #, c-format msgid "source file `%s' is empty" msgstr "le fichier source « %s » est vide" -#: awkgram.y:2913 +#: awkgram.y:2937 msgid "source file does not end in newline" msgstr "le fichier source ne se termine pas par un passage à la ligne" -#: awkgram.y:3018 +#: awkgram.y:3042 msgid "unterminated regexp ends with `\\' at end of file" -msgstr "expression rationnelle non refermée terminée par un « \\ » en fin de fichier" +msgstr "" +"expression rationnelle non refermée terminée par un « \\ » en fin de fichier" -#: awkgram.y:3042 +#: awkgram.y:3066 #, 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" +msgstr "" +"%s : %d : le modificateur d'expressions rationnelles « /.../%c » de tawk ne " +"marche pas dans gawk" -#: awkgram.y:3046 +#: awkgram.y:3070 #, 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" +msgstr "" +"le modificateur d'expressions rationnelles « /.../%c » de tawk ne marche pas " +"dans gawk" -#: awkgram.y:3053 +#: awkgram.y:3077 msgid "unterminated regexp" msgstr "expression rationnelle non refermée" -#: awkgram.y:3057 +#: awkgram.y:3081 msgid "unterminated regexp at end of file" msgstr "expression rationnelle non refermée en fin de fichier" -#: awkgram.y:3116 +#: awkgram.y:3140 msgid "use of `\\ #...' line continuation is not portable" -msgstr "l'utilisation de « \\ #... » pour prolonger une ligne n'est pas portable" +msgstr "" +"l'utilisation de « \\ #... » pour prolonger une ligne n'est pas portable" -#: awkgram.y:3132 +#: awkgram.y:3156 msgid "backslash not last character on line" msgstr "la barre oblique inverse n'est pas le dernier caractère de la ligne" -#: awkgram.y:3193 +#: awkgram.y:3217 msgid "POSIX does not allow operator `**='" msgstr "POSIX n'autorise pas l'opérateur « **= »" -#: awkgram.y:3195 +#: awkgram.y:3219 msgid "old awk does not support operator `**='" msgstr "l'ancien awk ne dispose pas de l'opérateur « **= »" -#: awkgram.y:3204 +#: awkgram.y:3228 msgid "POSIX does not allow operator `**'" msgstr "POSIX n'autorise pas l'opérateur « ** »" -#: awkgram.y:3206 +#: awkgram.y:3230 msgid "old awk does not support operator `**'" msgstr "l'ancien awk ne dispose pas de l'opérateur « ** »" -#: awkgram.y:3241 +#: awkgram.y:3265 msgid "operator `^=' is not supported in old awk" msgstr "l'ancien awk ne dispose pas de l'opérateur « ^= »" -#: awkgram.y:3249 +#: awkgram.y:3273 msgid "operator `^' is not supported in old awk" msgstr "l'ancien awk ne dispose pas de l'opérateur « ^ »" -#: awkgram.y:3342 awkgram.y:3358 command.y:1178 +#: awkgram.y:3366 awkgram.y:3382 command.y:1178 msgid "unterminated string" msgstr "chaîne non refermée" -#: awkgram.y:3579 +#: awkgram.y:3603 #, c-format msgid "invalid char '%c' in expression" msgstr "caractère incorrect « %c » dans l'expression" -#: awkgram.y:3626 +#: awkgram.y:3650 #, c-format msgid "`%s' is a gawk extension" msgstr "« %s » est une extension gawk" -#: awkgram.y:3631 +#: awkgram.y:3655 #, c-format msgid "POSIX does not allow `%s'" msgstr "POSIX n'autorise pas « %s »" -#: awkgram.y:3639 +#: awkgram.y:3663 #, c-format msgid "`%s' is not supported in old awk" msgstr "l'ancien awk ne dispose pas de « %s »" -#: awkgram.y:3729 +#: awkgram.y:3753 msgid "`goto' considered harmful!\n" msgstr "« goto est jugé dangereux ! » (Edsger W. Dijkstra)\n" -#: awkgram.y:3763 +#: awkgram.y:3787 #, 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:3798 +#: awkgram.y:3822 #, 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" +msgstr "" +"%s : une chaîne littérale en dernier argument d'une substitution est sans " +"effet" -#: awkgram.y:3803 +#: awkgram.y:3827 #, 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:3886 awkgram.y:3889 +#: awkgram.y:3910 awkgram.y:3913 msgid "match: third argument is a gawk extension" msgstr "match : le 3e argument est une extension gawk" -#: awkgram.y:3943 awkgram.y:3946 +#: awkgram.y:3967 awkgram.y:3970 msgid "close: second argument is a gawk extension" msgstr "close : le 2e argument est une extension gawk" -#: awkgram.y:3958 +#: awkgram.y:3982 msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore" -msgstr "utilisation incorrecte de dcgettext(_\"...\") : enlevez le souligné de tête" +msgstr "" +"utilisation incorrecte de dcgettext(_\"...\") : enlevez le souligné de tête" -#: awkgram.y:3973 +#: awkgram.y:3997 msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" -msgstr "utilisation incorrecte de dcngettext(_\"...\") : enlevez le souligné de tête" +msgstr "" +"utilisation incorrecte de dcngettext(_\"...\") : enlevez le souligné de tête" -#: awkgram.y:3992 +#: awkgram.y:4016 msgid "index: regexp constant as second argument is not allowed" -msgstr "index : le second argument ne peut être une expression rationnelle constante" +msgstr "" +"index : le second argument ne peut être une expression rationnelle constante" -#: awkgram.y:4045 +#: awkgram.y:4069 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "fonction « %s » : le paramètre « %s » masque la variable globale" -#: awkgram.y:4102 debug.c:4041 debug.c:4084 debug.c:5204 +#: awkgram.y:4126 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:4103 +#: awkgram.y:4127 msgid "sending variable list to standard error" msgstr "envoi de la liste des variables vers la sortie d'erreur standard" -#: awkgram.y:4111 +#: awkgram.y:4135 #, c-format msgid "%s: close failed (%s)" msgstr "%s : échec de la fermeture (%s)" -#: awkgram.y:4136 +#: awkgram.y:4160 msgid "shadow_funcs() called twice!" msgstr "shadows_funcs() a été appelé deux fois !" -#: awkgram.y:4144 +#: awkgram.y:4168 msgid "there were shadowed variables." msgstr "il y avait des variables masquées." -#: awkgram.y:4215 +#: awkgram.y:4239 #, c-format msgid "function name `%s' previously defined" msgstr "nom de fonction « %s » déjà défini" -#: awkgram.y:4261 +#: awkgram.y:4285 #, 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" +msgstr "" +"fonction « %s » : impossible d'utiliser un nom de fonction comme paramètre" -#: awkgram.y:4264 +#: awkgram.y:4288 #, 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" +msgstr "" +"fonction « %s » : impossible d'utiliser la variable spéciale « %s » comme " +"paramètre d'une fonction" -#: awkgram.y:4272 +#: awkgram.y:4296 #, 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" +msgstr "" +"fonction « %s » : paramètre #%d, « %s » est un doublon du paramètre #%d" -#: awkgram.y:4359 awkgram.y:4365 +#: awkgram.y:4383 awkgram.y:4389 #, c-format msgid "function `%s' called but never defined" msgstr "fonction « %s » appelée sans être définie" -#: awkgram.y:4369 +#: awkgram.y:4393 #, c-format msgid "function `%s' defined but never called directly" msgstr "fonction « %s » définie mais jamais appelée directement" -#: awkgram.y:4401 +#: awkgram.y:4425 #, 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:4460 +#: awkgram.y:4484 #, c-format msgid "" "function `%s' called with space between name and `(',\n" @@ -494,21 +514,24 @@ msgstr "" "fonction « %s » appelée avec un espace entre son nom\n" "et « ( », ou utilisée comme variable ou tableau" -#: awkgram.y:4696 +#: awkgram.y:4720 msgid "division by zero attempted" msgstr "tentative de division par zéro" -#: awkgram.y:4705 +#: awkgram.y:4729 #, c-format msgid "division by zero attempted in `%%'" msgstr "tentative de division par zéro dans « %% »" # gawk 'BEGIN { $1++ = 1 }' -#: awkgram.y:5025 -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:5049 +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:5028 +#: awkgram.y:5052 #, c-format msgid "invalid target of assignment (opcode %s)" msgstr "cible de l'assignement incorrecte (opcode %s)" @@ -534,17 +557,22 @@ msgstr "exp : l'argument %g est hors limite" #: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" -msgstr "fflush : vidage impossible : le tube « %s » est ouvert en lecture et non en écriture" +msgstr "" +"fflush : vidage impossible : le tube « %s » est ouvert en lecture et non en " +"écriture" #: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" -msgstr "fflush : vidage impossible : fichier « %s » ouvert en lecture, pas en écriture" +msgstr "" +"fflush : vidage impossible : fichier « %s » ouvert en lecture, pas en " +"écriture" #: builtin.c:244 #, c-format 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" +msgstr "" +"fflush : « %s » n'est ni un fichier ouvert, ni un tube, ni un co-processus" #: builtin.c:362 msgid "index: received non-string first argument" @@ -581,7 +609,8 @@ msgstr "log : l'argument est négatif %g" #: builtin.c:776 builtin.c:781 msgid "fatal: must use `count$' on all formats or none" -msgstr "fatal : « numéro$ » doit être utilisé pour toutes les formats ou pour aucun" +msgstr "" +"fatal : « numéro$ » doit être utilisé pour toutes les formats ou pour aucun" #: builtin.c:851 #, c-format @@ -609,7 +638,8 @@ msgstr "fatal : le numéro d'argument de « $ » doit être > 0" #: builtin.c:919 #, 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" +msgstr "" +"fatal : le numéro d'argument %ld est > au nombre total d'arguments fournis" #: builtin.c:923 msgid "fatal: `$' not permitted after period in format" @@ -617,300 +647,312 @@ msgstr "fatal : dans un format, « $ » ne doit pas suivre un point" #: builtin.c:939 msgid "fatal: no `$' supplied for positional field width or precision" -msgstr "fatal : aucun « $ » fourni pour la taille ou la précision du champ positionné" +msgstr "" +"fatal : aucun « $ » fourni pour la taille ou la précision du champ positionné" -#: builtin.c:1011 +#: builtin.c:1009 msgid "`l' is meaningless in awk formats; ignored" msgstr "« l » n'a aucun sens dans un format awk ; ignoré" -#: builtin.c:1015 +#: builtin.c:1013 msgid "fatal: `l' is not permitted in POSIX awk formats" msgstr "fatal : « l » est interdit dans un format awk POSIX" -#: builtin.c:1028 +#: builtin.c:1026 msgid "`L' is meaningless in awk formats; ignored" msgstr "« L » n'a aucun sens dans un format awk ; ignoré" -#: builtin.c:1032 +#: builtin.c:1030 msgid "fatal: `L' is not permitted in POSIX awk formats" msgstr "fatal : « L » est interdit dans un format awk POSIX" -#: builtin.c:1045 +#: builtin.c:1043 msgid "`h' is meaningless in awk formats; ignored" msgstr "« h » n'a aucun sens dans un format awk ; ignoré" -#: builtin.c:1049 +#: builtin.c:1047 msgid "fatal: `h' is not permitted in POSIX awk formats" msgstr "fatal : « h » est interdit dans un format awk POSIX" -#: builtin.c:1447 +#: builtin.c:1463 #, 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:1545 +#: builtin.c:1561 #, 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:1550 +#: builtin.c:1566 msgid "fatal: not enough arguments to satisfy format string" msgstr "fatal : pas assez d'arguments pour satisfaire la chaîne de formatage" -#: builtin.c:1552 +#: builtin.c:1568 msgid "^ ran out for this one" msgstr "^ à court pour celui-ci" -#: builtin.c:1559 +#: builtin.c:1575 msgid "[s]printf: format specifier does not have control letter" msgstr "[s]printf : spécification de format sans lettre de contrôle" -#: builtin.c:1562 +#: builtin.c:1578 msgid "too many arguments supplied for format string" msgstr "trop d'arguments pour la chaîne de formatage" -#: builtin.c:1618 +#: builtin.c:1634 msgid "sprintf: no arguments" msgstr "sprintf : aucun argument" -#: builtin.c:1641 builtin.c:1652 +#: builtin.c:1657 builtin.c:1668 msgid "printf: no arguments" msgstr "printf : aucun argument" -#: builtin.c:1695 +#: builtin.c:1711 msgid "sqrt: received non-numeric argument" msgstr "sqrt : l'argument n'est pas numérique" -#: builtin.c:1699 +#: builtin.c:1715 #, c-format msgid "sqrt: called with negative argument %g" msgstr "sqrt : appelé avec un argument négatif %g" -#: builtin.c:1730 +#: builtin.c:1746 #, c-format msgid "substr: length %g is not >= 1" msgstr "substr : la longueur %g n'est pas >= 1" -#: builtin.c:1732 +#: builtin.c:1748 #, c-format msgid "substr: length %g is not >= 0" msgstr "substr : la longueur %g n'est pas >= 0" -#: builtin.c:1739 +#: builtin.c:1755 #, 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:1744 +#: builtin.c:1760 #, 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:1756 +#: builtin.c:1772 #, 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:1761 +#: builtin.c:1777 #, 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:1786 +#: builtin.c:1802 msgid "substr: source string is zero length" msgstr "substr : la chaîne source est de longueur nulle" -#: builtin.c:1802 +#: builtin.c:1818 #, 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:1810 +#: builtin.c:1826 #, c-format -msgid "substr: length %g at start index %g exceeds length of first argument (%lu)" -msgstr "substr : la longueur %g à partir de %g dépasse la fin du 1er argument (%lu)" +msgid "" +"substr: length %g at start index %g exceeds length of first argument (%lu)" +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:1884 +#: builtin.c:1900 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" -msgstr "strftime : la valeur de formatage PROCINFO[\"strftime\"] est de type numérique" +msgstr "" +"strftime : la valeur de formatage PROCINFO[\"strftime\"] est de type " +"numérique" -#: builtin.c:1907 +#: builtin.c:1923 msgid "strftime: received non-numeric second argument" msgstr "strftime : le second argument n'est pas numérique" -#: builtin.c:1911 +#: builtin.c:1927 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:1918 +#: builtin.c:1934 msgid "strftime: received non-string first argument" msgstr "strftim : le premier argument n'est pas une chaîne" -#: builtin.c:1925 +#: builtin.c:1941 msgid "strftime: received empty format string" msgstr "strftime : la chaîne de formatage est vide" -#: builtin.c:1991 +#: builtin.c:2007 msgid "mktime: received non-string argument" msgstr "mktime : l'argument n'est pas une chaîne" -#: builtin.c:2008 +#: builtin.c:2024 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" +msgstr "" +"mktime : au moins l'une des valeurs est en dehors de la plage par défaut" -#: builtin.c:2043 +#: builtin.c:2059 msgid "'system' function not allowed in sandbox mode" msgstr "La fonction « system » est interdite en isolement (mode sandbox)" -#: builtin.c:2048 +#: builtin.c:2064 msgid "system: received non-string argument" msgstr "system : l'argument n'est pas une chaîne" -#: builtin.c:2168 +#: builtin.c:2184 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "référence à un champ non initialisé « $%d »" -#: builtin.c:2255 +#: builtin.c:2271 msgid "tolower: received non-string argument" msgstr "tolower : l'argument n'est pas une chaîne" -#: builtin.c:2289 +#: builtin.c:2305 msgid "toupper: received non-string argument" msgstr "toupper : l'argument n'est pas une chaîne" -#: builtin.c:2325 mpfr.c:672 +#: builtin.c:2341 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2 : le premier argument n'est pas numérique" -#: builtin.c:2327 mpfr.c:674 +#: builtin.c:2343 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2 : le second argument n'est pas numérique" -#: builtin.c:2346 +#: builtin.c:2362 msgid "sin: received non-numeric argument" msgstr "sin : l'argument n'est pas numérique" -#: builtin.c:2362 +#: builtin.c:2378 msgid "cos: received non-numeric argument" msgstr "cos : l'argument n'est pas numérique" -#: builtin.c:2415 mpfr.c:1156 +#: builtin.c:2431 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand : l'argument n'est pas numérique" -#: builtin.c:2446 +#: builtin.c:2462 msgid "match: third argument is not an array" msgstr "match : le 3e argument n'est pas un tableau" -#: builtin.c:2718 +#: builtin.c:2734 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub : le 3e argument vaut 0, il sera traité comme un 1" -#: builtin.c:3014 +#: builtin.c:3030 msgid "lshift: received non-numeric first argument" msgstr "lshift : le premier argument n'est pas numérique" -#: builtin.c:3016 +#: builtin.c:3032 msgid "lshift: received non-numeric second argument" msgstr "lshift : le second argument reçu n'est pas numérique" -#: builtin.c:3022 +#: builtin.c:3038 #, 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" +msgstr "" +"lshift(%f, %f) : les valeurs négatives donnent des résultats inattendus" -#: builtin.c:3024 +#: builtin.c:3040 #, 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:3026 +#: builtin.c:3042 #, 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:3051 +#: builtin.c:3067 msgid "rshift: received non-numeric first argument" msgstr "rshift : le premier argument n'est pas numérique" -#: builtin.c:3053 +#: builtin.c:3069 msgid "rshift: received non-numeric second argument" msgstr "rshift : le second argument reçu n'est pas numérique" -#: builtin.c:3059 +#: builtin.c:3075 #, 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" +msgstr "" +"rshift(%f, %f) : les valeurs négatives donneront des résultats inattendus" -#: builtin.c:3061 +#: builtin.c:3077 #, 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:3063 +#: builtin.c:3079 #, 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" +msgstr "" +"rshift(%f, %f) : un décalage trop grand donnera des résultats inattendus" -#: builtin.c:3088 mpfr.c:968 +#: builtin.c:3104 mpfr.c:968 msgid "and: called with less than two arguments" msgstr "and : appelé avec moins de 2 arguments" -#: builtin.c:3093 +#: builtin.c:3109 #, c-format msgid "and: argument %d is non-numeric" msgstr "and : l'argument %d n'est pas numérique" -#: builtin.c:3097 +#: builtin.c:3113 #, 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" +msgstr "" +"and : l'argument %d est négatif (%g) ce qui aura des résultats inattendus" -#: builtin.c:3120 mpfr.c:1000 +#: builtin.c:3136 mpfr.c:1000 msgid "or: called with less than two arguments" msgstr "or : appelé avec moins de 2 arguments" -#: builtin.c:3125 +#: builtin.c:3141 #, c-format msgid "or: argument %d is non-numeric" msgstr "or : l'argument %d n'est pas numérique" -#: builtin.c:3129 +#: builtin.c:3145 #, 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" +msgstr "" +"or : l'argument %d est négatif (%g) ce qui aura des résultats inattendus" -#: builtin.c:3151 mpfr.c:1031 +#: builtin.c:3167 mpfr.c:1031 msgid "xor: called with less than two arguments" msgstr "xor : appelé avec moins de 2 arguments" -#: builtin.c:3157 +#: builtin.c:3173 #, c-format msgid "xor: argument %d is non-numeric" msgstr "xor : l'argument %d n'est pas numérique" -#: builtin.c:3161 +#: builtin.c:3177 #, 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" +msgstr "" +"xor : l'argument %d est négatif (%g) ce qui aura des résultats inattendus" -#: builtin.c:3186 mpfr.c:787 +#: builtin.c:3202 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl : l'argument n'est pas numérique" -#: builtin.c:3192 +#: builtin.c:3208 #, 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:3194 +#: builtin.c:3210 #, c-format msgid "compl(%f): fractional value will be truncated" msgstr "compl(%f) : les valeurs non entières seront tronquées" -#: builtin.c:3363 +#: builtin.c:3379 #, 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" @@ -942,7 +984,8 @@ msgstr "sauve « %s » : commande interdite." #: command.y:339 msgid "Can't use command `commands' for breakpoint/watchpoint commands" -msgstr "Impossible d'utiliser « commands » pour des points d'arrêt ou de surveillance" +msgstr "" +"Impossible d'utiliser « commands » pour des points d'arrêt ou de surveillance" #: command.y:341 msgid "no breakpoint/watchpoint has been set yet" @@ -955,7 +998,8 @@ msgstr "numéro de point d'arrêt ou de surveillance incorrect" #: command.y:348 #, c-format msgid "Type commands for when %s %d is hit, one per line.\n" -msgstr "Entrez les commandes exécutées lors de l'appui de %s %d, une par ligne.\n" +msgstr "" +"Entrez les commandes exécutées lors de l'appui de %s %d, une par ligne.\n" #: command.y:350 #, c-format @@ -1016,24 +1060,36 @@ msgid "non-zero integer value" msgstr "valeur entière non nulle" #: command.y:817 -msgid "backtrace [N] - 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)." +msgid "" +"backtrace [N] - 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:819 -msgid "break [[filename:]N|function] - set breakpoint at the specified location." -msgstr "break [[fichier:]N|fonction] - définit un point d'arrêt à l'endroit indiqué." +msgid "" +"break [[filename:]N|function] - set breakpoint at the specified location." +msgstr "" +"break [[fichier:]N|fonction] - définit un point d'arrêt à l'endroit indiqué." #: command.y:821 msgid "clear [[filename:]N|function] - delete breakpoints previously set." msgstr "clear [[fichier:]N|fonction] - détruit un point d'arrêt existant." #: command.y:823 -msgid "commands [num] - starts a list of commands to be executed at a breakpoint(watchpoint) hit." -msgstr "commands [no] - débute une liste de commande à lancer aux points d'arrêt ou de surveillance." +msgid "" +"commands [num] - starts a list of commands to be executed at a " +"breakpoint(watchpoint) hit." +msgstr "" +"commands [no] - débute une liste de commande à lancer aux points d'arrêt ou " +"de surveillance." #: command.y:825 msgid "condition num [expr] - set or clear breakpoint or watchpoint condition." -msgstr "condition no [expr] - défini ou détruit une condition d'arrêt ou de surveillance." +msgstr "" +"condition no [expr] - défini ou détruit une condition d'arrêt ou de " +"surveillance." #: command.y:827 msgid "continue [COUNT] - continue program being debugged." @@ -1045,7 +1101,8 @@ msgstr "delete [points d'arrêt] [plage] - détruit les points d'arrêt indiqué #: command.y:831 msgid "disable [breakpoints] [range] - disable specified breakpoints." -msgstr "disable [points d'arrêt] [plage] - désactive les points d'arrêt indiqués." +msgstr "" +"disable [points d'arrêt] [plage] - désactive les points d'arrêt indiqués." #: command.y:833 msgid "display [var] - print value of variable each time the program stops." @@ -1057,11 +1114,13 @@ msgstr "down [N] - descend de N trames dans la pile." #: command.y:837 msgid "dump [filename] - dump instructions to file or stdout." -msgstr "dump [fichier] - vide les instructions vers la sortie standard ou un fichier." +msgstr "" +"dump [fichier] - vide les instructions vers la sortie standard ou un fichier." #: command.y:839 msgid "enable [once|del] [breakpoints] [range] - enable specified breakpoints." -msgstr "enable [once|del] [points d'arrêt] [plage] - active les points d'arrêt." +msgstr "" +"enable [once|del] [points d'arrêt] [plage] - active les points d'arrêt." #: command.y:841 msgid "end - end a list of commands or awk statements." @@ -1081,27 +1140,35 @@ msgstr "frame [N] - sélectionne et affiche la trame N de la pile." #: command.y:849 msgid "help [command] - print list of commands or explanation of command." -msgstr "help [commande] - affiche la liste des commandes ou explique la commande." +msgstr "" +"help [commande] - affiche la liste des commandes ou explique la commande." #: command.y:851 msgid "ignore N COUNT - set ignore-count of breakpoint number N to COUNT." msgstr "ignore N NB - ignore les NB prochaines occurrences du point d'arrêt N." #: command.y:853 -msgid "info topic - source|sources|variables|functions|break|frame|args|locals|display|watch." -msgstr "info sujet - 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 sujet - 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 [-|+|[fichier:]no_ligne|fonction|plage] - affiche les lignes indiquées." +msgstr "" +"list [-|+|[fichier:]no_ligne|fonction|plage] - affiche les lignes indiquées." #: command.y:857 msgid "next [COUNT] - step program, proceeding through subroutine calls." msgstr "next [NB] - avance ligne par ligne, sans détailler les sous-routines." #: command.y:859 -msgid "nexti [COUNT] - step one instruction, but proceed through subroutine calls." -msgstr "nexti [NB] - avance d'une instruction, sans détailler les sous-routines." +msgid "" +"nexti [COUNT] - step one instruction, but proceed through subroutine calls." +msgstr "" +"nexti [NB] - avance d'une instruction, sans détailler les sous-routines." #: command.y:861 msgid "option [name[=value]] - set or display debugger option(s)." @@ -1129,15 +1196,19 @@ msgstr "run - démarre et redémarre l'exécution du programme." #: command.y:874 msgid "save filename - save commands from the session to file." -msgstr "save fichier - enregistre les commandes de la sessions dans un fichier." +msgstr "" +"save fichier - enregistre les commandes de la sessions dans un fichier." #: command.y:877 msgid "set var = value - assign value to a scalar variable." msgstr "set var = valeur - assigne une valeur à une variable scalaire." #: command.y:879 -msgid "silent - suspends usual message when stopped at a breakpoint/watchpoint." -msgstr "silent - suspend les messages habituels lors des points d'arrêt et de surveillance." +msgid "" +"silent - suspends usual message when stopped at a breakpoint/watchpoint." +msgstr "" +"silent - suspend les messages habituels lors des points d'arrêt et de " +"surveillance." #: command.y:881 msgid "source file - execute commands from file." @@ -1161,11 +1232,17 @@ msgstr "trace on|off - affiche les instructions avant de les exécuter." #: command.y:891 msgid "undisplay [N] - remove variable(s) from automatic display list." -msgstr "undisplay [N] - retire la ou les variables de la liste d'affichage automatique." +msgstr "" +"undisplay [N] - retire la ou les variables de la liste d'affichage " +"automatique." #: command.y:893 -msgid "until [[filename:]N|function] - execute until program reaches a different line or line N within current frame." -msgstr "until [[fichier:]N|fonction] - exécution jusqu'à dépasser la ligne courant ou la ligne N, dans la trame actuelle." +msgid "" +"until [[filename:]N|function] - execute until program reaches a different " +"line or line N within current frame." +msgstr "" +"until [[fichier:]N|fonction] - exécution jusqu'à dépasser la ligne courant " +"ou la ligne N, dans la trame actuelle." #: command.y:895 msgid "unwatch [N] - remove variable(s) from watch list." @@ -1235,7 +1312,8 @@ msgstr "affiche ou définit l'invite du débogueur." #: debug.c:260 msgid "(un)set or show saving of command history (value=on|off)." -msgstr "affiche ou (dés)active l'enregistrement de l'historique (valeur=on|off)." +msgstr "" +"affiche ou (dés)active l'enregistrement de l'historique (valeur=on|off)." #: debug.c:262 msgid "(un)set or show saving of options (value=on|off)." @@ -1271,7 +1349,8 @@ msgstr "impossible de trouver le fichier source nommé « %s » (%s)" #: debug.c:529 #, c-format msgid "WARNING: source file `%s' modified since program compilation.\n" -msgstr "ATTENTION : fichier source « %s » modifié après compilation du programme.\n" +msgstr "" +"ATTENTION : fichier source « %s » modifié après compilation du programme.\n" #: debug.c:551 #, c-format @@ -1468,7 +1547,8 @@ msgstr "tentative d'utiliser un scalaire comme tableau" #: debug.c:1856 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" -msgstr "Point de surveillance %d détruit, car son paramètre est hors contexte.\n" +msgstr "" +"Point de surveillance %d détruit, car son paramètre est hors contexte.\n" #: debug.c:1867 #, c-format @@ -1502,7 +1582,8 @@ msgstr "Numéro de trame incorrect" #: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" -msgstr "Note : point d'arrêt %d (activé, ignore %ld occurrences) déjà défini à %s:%d" +msgstr "" +"Note : point d'arrêt %d (activé, ignore %ld occurrences) déjà défini à %s:%d" #: debug.c:2207 #, c-format @@ -1512,7 +1593,9 @@ msgstr "Note : point d'arrêt %d (activé) déjà défini à %s:%d" #: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" -msgstr "Note : point d'arrêt %d (désactivé, ignore %ld occurrences) déjà défini à %s:%d" +msgstr "" +"Note : point d'arrêt %d (désactivé, ignore %ld occurrences) déjà défini à %s:" +"%d" #: debug.c:2221 #, c-format @@ -1552,7 +1635,9 @@ msgstr "Impossible de définir un point d'arrêt dans la fonction « %s »\n" #: debug.c:2403 #, c-format msgid "breakpoint %d set at file `%s', line %d is unconditional\n" -msgstr "le point d'arrêt %d défini sur le fichier « %s », ligne %d est inconditionnel\n" +msgstr "" +"le point d'arrêt %d défini sur le fichier « %s », ligne %d est " +"inconditionnel\n" #: debug.c:2508 debug.c:2530 #, c-format @@ -1594,7 +1679,8 @@ msgstr "S'arrêtera à la prochaine occurrence du point d'arrêt %d.\n" #: debug.c:2783 #, c-format msgid "Can only debug programs provided with the `-f' option.\n" -msgstr "Seuls les programmes fournis via l'option « -f » peuvent être débogués.\n" +msgstr "" +"Seuls les programmes fournis via l'option « -f » peuvent être débogués.\n" #: debug.c:2908 #, c-format @@ -1740,40 +1826,40 @@ msgstr "« return » interdit dans ce contexte ; instruction ignorée" msgid "No symbol `%s' in current context" msgstr "Pas de symbole « %s » dans le contexte actuel" -#: 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: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 msgid "unbalanced [" msgstr "[ non apparié" -#: dfa.c:1052 +#: dfa.c:1174 msgid "invalid character class" msgstr "classe de caractères incorrecte" -#: dfa.c:1228 +#: dfa.c:1316 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "la syntaxe des classes de caractères est [[:space:]], et non [:space:]" -#: dfa.c:1280 +#: dfa.c:1366 msgid "unfinished \\ escape" msgstr "échappement \\ non terminé" -#: dfa.c:1427 regcomp.c:161 +#: dfa.c:1513 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "Contenu de \\{\\} incorrect" -#: dfa.c:1430 regcomp.c:176 +#: dfa.c:1516 regcomp.c:176 msgid "Regular expression too big" msgstr "Expression rationnelle trop grande" -#: dfa.c:1847 +#: dfa.c:1936 msgid "unbalanced (" msgstr "( non apparié" -#: dfa.c:1973 +#: dfa.c:2062 msgid "no syntax specified" msgstr "aucune syntaxe indiquée" -#: dfa.c:1981 +#: dfa.c:2070 msgid "unbalanced )" msgstr ") non apparié" @@ -1895,18 +1981,25 @@ msgstr "load_ext : impossible d'ouvrir la bibliothèque « %s » (%s)\n" #: ext.c:104 #, c-format -msgid "load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n" -msgstr "load_ext : bibliothèque « %s » : ne définit pas « plugin_is_GPL_compatible » (%s)\n" +msgid "" +"load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n" +msgstr "" +"load_ext : bibliothèque « %s » : ne définit pas " +"« plugin_is_GPL_compatible » (%s)\n" #: ext.c:110 #, 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" +msgstr "" +"load_ext : bibliothèque « %s » : impossible d'appeler la fonction " +"« %s » (%s)\n" #: ext.c:114 #, 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" +msgstr "" +"load_ext : bibliothèque « %s » : échec de la routine d'initialisation « %s " +"»\n" #: ext.c:174 msgid "`extension' is a gawk extension" @@ -1923,13 +2016,18 @@ msgstr "extension : impossible d'ouvrir la bibliothèque « %s » (%s)" #: ext.c:186 #, c-format -msgid "extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)" -msgstr "extension : bibliothèque « %s » : ne définit pas « plugin_is_GPL_compatible » (%s)" +msgid "" +"extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)" +msgstr "" +"extension : bibliothèque « %s » : ne définit pas " +"« plugin_is_GPL_compatible » (%s)" #: ext.c:190 #, c-format msgid "extension: library `%s': cannot call function `%s' (%s)" -msgstr "extension : bibliothèque « %s » : impossible d'appeler la fonction « %s » (%s)" +msgstr "" +"extension : bibliothèque « %s » : impossible d'appeler la fonction " +"« %s » (%s)" #: ext.c:221 msgid "make_builtin: missing function name" @@ -1953,7 +2051,9 @@ msgstr "make_builtin : nom de la fonction « %s » déjà défini" #: ext.c:246 #, 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" +msgstr "" +"make_builtin : impossible d'utiliser la fonction gawk « %s » comme nom de " +"fonction" #: ext.c:249 ext.c:304 #, c-format @@ -1987,7 +2087,9 @@ msgstr "extension : nom de la fonction « %s » déjà défini" #: ext.c:301 #, 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" +msgstr "" +"extension : impossible d'utiliser la fonction interne gawk « %s » comme nom " +"de fonction" #: ext.c:375 #, c-format @@ -2002,12 +2104,16 @@ msgstr "fonction « %s » : argument #%d manquant" #: ext.c:395 #, 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" +msgstr "" +"fonction « %s » : argument #%d : tentative d'utilisation d'un scalaire comme " +"tableau" #: ext.c:399 #, 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" +msgstr "" +"fonction « %s » : argument #%d : tentative d'utiliser un tableau comme " +"scalaire" #: ext.c:413 msgid "dynamic loading of library not supported" @@ -2160,12 +2266,15 @@ msgstr "inplace_begin : 2 arguments attendu, appelé avec %d" #: extension/inplace.c:136 msgid "inplace_begin: cannot retrieve 1st argument as a string filename" -msgstr "inplace_begin : impossible de récupérer le 1er argument comme nom de fichier" +msgstr "" +"inplace_begin : impossible de récupérer le 1er argument comme nom de fichier" #: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" -msgstr "inplace_begin : modification sur place annulée pour le fichier incorrect « %s »" +msgstr "" +"inplace_begin : modification sur place annulée pour le fichier incorrect " +"« %s »" #: extension/inplace.c:151 #, c-format @@ -2204,7 +2313,8 @@ msgstr "inplace_begin : échec de close(%d) (%s)" #: extension/inplace.c:210 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" +msgstr "" +"inplace_end : impossible de récupérer le 1er argument comme nom de fichier" #: extension/inplace.c:217 msgid "inplace_end: in-place editing not active" @@ -2259,16 +2369,16 @@ msgstr "chr : appelé sans argument" msgid "chr: called with inappropriate argument(s)" msgstr "chr : appelé avec des arguments incorrects" -#: extension/readdir.c:277 +#: extension/readdir.c:281 #, c-format msgid "dir_take_control_of: opendir/fdopendir failed: %s" msgstr "dir_take_control_of : échec de opendir/fdopendir : %s" -#: extension/readfile.c:84 +#: extension/readfile.c:113 msgid "readfile: called with too many arguments" msgstr "readfile : appelé avec trop d'arguments" -#: extension/readfile.c:118 +#: extension/readfile.c:137 msgid "readfile: called with no arguments" msgstr "readfile : appelé sans argument" @@ -2320,27 +2430,27 @@ msgstr "do_reada : échec de clear_array\n" msgid "read_array: set_array_element failed\n" msgstr "read_array : échec de set_array_element\n" -#: extension/time.c:106 +#: extension/time.c:113 msgid "gettimeofday: ignoring arguments" msgstr "gettimeofday : arguments ignorés" -#: extension/time.c:137 +#: extension/time.c:144 msgid "gettimeofday: not supported on this platform" msgstr "gettimeofday : n'est pas disponible sur cette plateforme" -#: extension/time.c:158 +#: extension/time.c:165 msgid "sleep: called with too many arguments" msgstr "sleep : appelé avec trop d'arguments" -#: extension/time.c:161 +#: extension/time.c:168 msgid "sleep: missing required numeric argument" msgstr "sleep : l'argument numérique requis est absent" -#: extension/time.c:167 +#: extension/time.c:174 msgid "sleep: argument is negative" msgstr "sleep : l'argument est négatif" -#: extension/time.c:201 +#: extension/time.c:208 msgid "sleep: not supported on this platform" msgstr "sleep : n'est pas disponible sur cette plateforme" @@ -2366,11 +2476,13 @@ msgstr "split : impossible d'utiliser le même tableau comme 2e et 4e argument" #: field.c:998 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" +msgstr "" +"split : impossible d'utiliser un sous-tableau du 2e argument en 4e argument" #: field.c:1001 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" +msgstr "" +"split : impossible d'utiliser un sous-tableau du 4e argument en 2e argument" #: field.c:1032 msgid "split: null string for third arg is a gawk extension" @@ -2390,15 +2502,20 @@ msgstr "patsplit : le 3e argument n'est pas un tableau" #: field.c:1087 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" +msgstr "" +"patsplit : impossible d'utiliser le même tableau comme 2e et 4e argument" #: field.c:1092 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" +msgstr "" +"patsplit : impossible d'utiliser un sous-tableau du 2e argument en 4e " +"argument" #: field.c:1095 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" +msgstr "" +"patsplit : impossible d'utiliser un sous-tableau du 4e argument en 2e " +"argument" #: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" @@ -2415,7 +2532,8 @@ msgstr "utiliser une chaîne vide pour « FS » est une extension gawk" #: field.c:1274 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 »" +msgstr "" +"l'ancien awk n'accepte pas les expr. rationnelles comme valeur de « FS »" #: field.c:1393 msgid "`FPAT' is a gawk extension" @@ -2433,20 +2551,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:808 +#: gawkapi.c:807 msgid "remove_element: received null array" msgstr "remove_element : tableau nul reçu" -#: gawkapi.c:811 +#: gawkapi.c:810 msgid "remove_element: received null subscript" msgstr "remove_element : indice nul reçu" -#: gawkapi.c:948 +#: gawkapi.c:947 #, 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:953 +#: gawkapi.c:952 #, c-format msgid "api_flatten_array: could not convert value %d\n" msgstr "api_flatten_array : impossible de convertir la valeur %d\n" @@ -2538,7 +2656,9 @@ msgstr "l'expression dans la redirection « %s » donne une chaîne nulle" #: io.c:761 #, 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" +msgstr "" +"le fichier « %s » de la redirection « %s » pourrait être le résultat d'une " +"expression booléenne" #: io.c:809 #, c-format @@ -2558,7 +2678,8 @@ msgstr "impossible d'ouvrir le tube « %s » en entrée (%s)" #: io.c:904 #, 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)" +msgstr "" +"impossible d'ouvrir un tube bidirectionnel « %s » en entrées-sorties (%s)" #: io.c:986 #, c-format @@ -2571,8 +2692,11 @@ msgid "can't redirect to `%s' (%s)" msgstr "impossible de rediriger vers « %s » (%s)" #: io.c:1040 -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" +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 #, c-format @@ -2590,7 +2714,8 @@ msgstr "close : le second argument doit être « to » ou « from »" #: io.c:1103 #, 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" +msgstr "" +"close : « %.*s » n'est ni un fichier ouvert, ni un tube ou un co-processus" #: io.c:1108 msgid "close of redirection that was never opened" @@ -2599,7 +2724,9 @@ msgstr "fermeture d'une redirection qui n'a jamais été ouverte" #: io.c:1205 #, 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é" +msgstr "" +"close : la redirection « %s » n'a pas été ouverte avec « |& », second " +"argument ignoré" #: io.c:1222 #, c-format @@ -2664,12 +2791,14 @@ msgstr "le port local %s n'est pas valide dans « /inet »" #: io.c:1438 #, 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" +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 »" +msgstr "" +"aucun protocole (connu) n'a été fourni dans le nom de fichier spécial « %s »" #: io.c:1604 #, c-format @@ -2706,7 +2835,9 @@ msgstr "échec de la fermeture de stdout du processus fils (%s)" #: io.c:1922 #, 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)" +msgstr "" +"échec du déplacement du pty esclave vers le stdout du processus fils (dup : " +"%s)" #: io.c:1924 io.c:2110 #, c-format @@ -2716,7 +2847,9 @@ msgstr "échec de fermeture du stdin du processus fils (%s)" #: io.c:1927 #, 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)" +msgstr "" +"échec du déplacement du pty esclave vers le stdin du processus fils (dup : " +"%s)" #: io.c:1929 io.c:1951 #, c-format @@ -2767,7 +2900,9 @@ msgstr "register_input_parser : pointeur NULL reçu" #: io.c:2818 #, 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é" +msgstr "" +"l'analyseur d'entrée « %s » est en conflit avec l'analyseur « %s » déjà " +"installé" #: io.c:2825 #, c-format @@ -2780,8 +2915,10 @@ msgstr "register_output_wrapper : pointeur NULL reçu" #: io.c:2873 #, 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é" +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 #, c-format @@ -2794,8 +2931,12 @@ msgstr "register_output_processor : pointeur NULL reçu" #: io.c:2930 #, c-format -msgid "two-way processor `%s' conflicts with previously installed two-way processor `%s'" -msgstr "le gestionnaire bidirectionnel « %s » est en conflit avec le gestionnaire « %s » déjà installé" +msgid "" +"two-way processor `%s' conflicts with previously installed two-way processor " +"`%s'" +msgstr "" +"le gestionnaire bidirectionnel « %s » est en conflit avec le gestionnaire " +"« %s » déjà installé" #: io.c:2939 #, c-format @@ -2813,7 +2954,8 @@ msgstr "impossible d'allouer plus de mémoire d'entrée" #: io.c:3682 msgid "multicharacter value of `RS' is a gawk extension" -msgstr "l'utilisation d'un « RS » de plusieurs caractères est une extension gawk" +msgstr "" +"l'utilisation d'un « RS » de plusieurs caractères est une extension gawk" #: io.c:3771 msgid "IPv6 communication is not supported" @@ -2835,7 +2977,9 @@ msgstr "%s : l'option requiert un argument - %c\n" #: main.c:562 msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'" -msgstr "variable d'environnement « POSIXLY__CORRECT » définie : activation de « --posix »" +msgstr "" +"variable d'environnement « POSIXLY__CORRECT » définie : activation de « --" +"posix »" #: main.c:568 msgid "`--posix' overrides `--traditional'" @@ -2843,12 +2987,14 @@ msgstr "« --posix » prend le pas sur « --traditional »" #: main.c:579 msgid "`--posix'/`--traditional' overrides `--non-decimal-data'" -msgstr "« --posix » et « --traditional » prennent le pas sur « --non-decimal-data »" +msgstr "" +"« --posix » et « --traditional » prennent le pas sur « --non-decimal-data »" #: main.c:583 #, 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é" +msgstr "" +"l'exécution de %s en mode setuid root peut être un problème de sécurité" #: main.c:588 msgid "`--posix' overrides `--characters-as-bytes'" @@ -2876,12 +3022,14 @@ msgstr "aucun programme !" #: main.c:799 #, 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" +msgstr "" +"Utilisation : %s [options GNU ou POSIX] -f fichier_prog [--] fichier ...\n" #: main.c:801 #, 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" +msgstr "" +"Utilisation : %s [options GNU ou POSIX] [--] %cprogramme%c fichier ...\n" #: main.c:806 msgid "POSIX options:\t\tGNU long options: (standard)\n" @@ -3190,7 +3338,8 @@ msgstr "%s : l'argument #%d a une valeur incorrecte %Rg, utilisation de 0" #: mpfr.c:857 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" +msgstr "" +"%s : argument #%d : la valeur négative %Rg donnera des résultats inattendus" #: mpfr.c:863 msgid "%s: argument #%d fractional value %Rg will be truncated" @@ -3199,7 +3348,8 @@ msgstr "%s : argument #%d : la valeur non entière %Rg sera tronquée" #: mpfr.c:878 #, c-format msgid "%s: argument #%d negative value %Zd will give strange results" -msgstr "%s : argument #%d : la valeur négative %Zd donnera des résultats inattendus" +msgstr "" +"%s : argument #%d : la valeur négative %Zd donnera des résultats inattendus" #: msg.c:68 #, c-format @@ -3225,8 +3375,12 @@ msgstr "aucun chiffre hexadécimal dans la séquence d'échappement « \\x » #: node.c:579 #, c-format -msgid "hex escape \\x%.*s of %d characters probably not interpreted the way you expect" -msgstr "la séquence d'échappement hexa. \\x%.*s de %d caractères ne sera probablement pas interprétée comme vous l'imaginez" +msgid "" +"hex escape \\x%.*s of %d characters probably not interpreted the way you " +"expect" +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 #, c-format @@ -3234,18 +3388,24 @@ msgid "escape sequence `\\%c' treated as plain `%c'" msgstr "séquence d'échappement « \\%c » traitée comme un simple « %c »" #: node.c:739 -msgid "Invalid multibyte data detected. There may be a mismatch between your data and your locale." -msgstr "Données multioctets non valables détectées. Possible incohérence entre données et paramètres régionaux (locale)." +msgid "" +"Invalid multibyte data detected. There may be a mismatch between your data " +"and your locale." +msgstr "" +"Données multioctets non valables détectées. Possible incohérence entre " +"données et paramètres régionaux (locale)." #: posix/gawkmisc.c:177 #, c-format msgid "%s %s `%s': could not get fd flags: (fcntl F_GETFD: %s)" -msgstr "%s %s « %s » : impossible d'obtenir les drapeaux du fd : (fcntl F_GETFD: %s)" +msgstr "" +"%s %s « %s » : impossible d'obtenir les drapeaux du fd : (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 »: impossible de positionner close-on-exec: (fcntl F_SETFD: %s)" +msgstr "" +"%s %s « %s »: impossible de positionner close-on-exec: (fcntl F_SETFD: %s)" #: profile.c:71 #, c-format @@ -3314,7 +3474,9 @@ msgstr "redir2str : type de redirection %d inconnu" #: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" -msgstr "le composant d'expression rationnelle « %.*s » devrait probablement être « [%.*s] »" +msgstr "" +"le composant d'expression rationnelle « %.*s » devrait probablement être " +"« [%.*s] »" #: regcomp.c:131 msgid "Success" diff --git a/po/gawk.pot b/po/gawk.pot index 527a4996..bb47fa9e 100644 --- a/po/gawk.pot +++ b/po/gawk.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gawk 4.1.0b\n" +"Project-Id-Version: gawk 4.1.1\n" "Report-Msgid-Bugs-To: arnold@skeeve.com\n" -"POT-Creation-Date: 2014-01-14 22:23+0200\n" +"POT-Creation-Date: 2014-04-08 19:23+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -36,8 +36,8 @@ msgstr "" msgid "attempt to use scalar `%s' as an array" msgstr "" -#: 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 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" @@ -135,11 +135,11 @@ msgstr "" msgid "duplicate `default' detected in switch body" msgstr "" -#: awkgram.y:796 awkgram.y:3699 +#: awkgram.y:796 awkgram.y:3723 msgid "`break' is not allowed outside a loop or switch" msgstr "" -#: awkgram.y:805 awkgram.y:3691 +#: awkgram.y:805 awkgram.y:3715 msgid "`continue' is not allowed outside a loop" msgstr "" @@ -228,283 +228,283 @@ msgstr "" msgid "invalid subscript expression" msgstr "" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126 +#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "" -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158 +#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "" -#: awkgram.y:2092 +#: awkgram.y:2116 msgid "unexpected newline or end of string" msgstr "" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:523 debug.c:539 +#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 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:2360 awkgram.y:2485 +#: awkgram.y:2384 awkgram.y:2509 #, c-format msgid "can't open shared library `%s' for reading (%s)" msgstr "" -#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:135 debug.c:5206 +#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "" -#: awkgram.y:2371 awkgram.y:2395 +#: awkgram.y:2395 awkgram.y:2419 #, c-format msgid "can't include `%s' and use it as a program file" msgstr "" -#: awkgram.y:2384 +#: awkgram.y:2408 #, c-format msgid "already included source file `%s'" msgstr "" -#: awkgram.y:2385 +#: awkgram.y:2409 #, c-format msgid "already loaded shared library `%s'" msgstr "" -#: awkgram.y:2420 +#: awkgram.y:2444 msgid "@include is a gawk extension" msgstr "" -#: awkgram.y:2426 +#: awkgram.y:2450 msgid "empty filename after @include" msgstr "" -#: awkgram.y:2470 +#: awkgram.y:2494 msgid "@load is a gawk extension" msgstr "" -#: awkgram.y:2476 +#: awkgram.y:2500 msgid "empty filename after @load" msgstr "" -#: awkgram.y:2610 +#: awkgram.y:2634 msgid "empty program text on command line" msgstr "" -#: awkgram.y:2725 +#: awkgram.y:2749 #, c-format msgid "can't read sourcefile `%s' (%s)" msgstr "" -#: awkgram.y:2736 +#: awkgram.y:2760 #, c-format msgid "source file `%s' is empty" msgstr "" -#: awkgram.y:2913 +#: awkgram.y:2937 msgid "source file does not end in newline" msgstr "" -#: awkgram.y:3018 +#: awkgram.y:3042 msgid "unterminated regexp ends with `\\' at end of file" msgstr "" -#: awkgram.y:3042 +#: awkgram.y:3066 #, c-format msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk" msgstr "" -#: awkgram.y:3046 +#: awkgram.y:3070 #, c-format msgid "tawk regex modifier `/.../%c' doesn't work in gawk" msgstr "" -#: awkgram.y:3053 +#: awkgram.y:3077 msgid "unterminated regexp" msgstr "" -#: awkgram.y:3057 +#: awkgram.y:3081 msgid "unterminated regexp at end of file" msgstr "" -#: awkgram.y:3116 +#: awkgram.y:3140 msgid "use of `\\ #...' line continuation is not portable" msgstr "" -#: awkgram.y:3132 +#: awkgram.y:3156 msgid "backslash not last character on line" msgstr "" -#: awkgram.y:3193 +#: awkgram.y:3217 msgid "POSIX does not allow operator `**='" msgstr "" -#: awkgram.y:3195 +#: awkgram.y:3219 msgid "old awk does not support operator `**='" msgstr "" -#: awkgram.y:3204 +#: awkgram.y:3228 msgid "POSIX does not allow operator `**'" msgstr "" -#: awkgram.y:3206 +#: awkgram.y:3230 msgid "old awk does not support operator `**'" msgstr "" -#: awkgram.y:3241 +#: awkgram.y:3265 msgid "operator `^=' is not supported in old awk" msgstr "" -#: awkgram.y:3249 +#: awkgram.y:3273 msgid "operator `^' is not supported in old awk" msgstr "" -#: awkgram.y:3342 awkgram.y:3358 command.y:1178 +#: awkgram.y:3366 awkgram.y:3382 command.y:1178 msgid "unterminated string" msgstr "" -#: awkgram.y:3579 +#: awkgram.y:3603 #, c-format msgid "invalid char '%c' in expression" msgstr "" -#: awkgram.y:3626 +#: awkgram.y:3650 #, c-format msgid "`%s' is a gawk extension" msgstr "" -#: awkgram.y:3631 +#: awkgram.y:3655 #, c-format msgid "POSIX does not allow `%s'" msgstr "" -#: awkgram.y:3639 +#: awkgram.y:3663 #, c-format msgid "`%s' is not supported in old awk" msgstr "" -#: awkgram.y:3729 +#: awkgram.y:3753 msgid "`goto' considered harmful!\n" msgstr "" -#: awkgram.y:3763 +#: awkgram.y:3787 #, c-format msgid "%d is invalid as number of arguments for %s" msgstr "" -#: awkgram.y:3798 +#: awkgram.y:3822 #, c-format msgid "%s: string literal as last arg of substitute has no effect" msgstr "" -#: awkgram.y:3803 +#: awkgram.y:3827 #, c-format msgid "%s third parameter is not a changeable object" msgstr "" -#: awkgram.y:3886 awkgram.y:3889 +#: awkgram.y:3910 awkgram.y:3913 msgid "match: third argument is a gawk extension" msgstr "" -#: awkgram.y:3943 awkgram.y:3946 +#: awkgram.y:3967 awkgram.y:3970 msgid "close: second argument is a gawk extension" msgstr "" -#: awkgram.y:3958 +#: awkgram.y:3982 msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore" msgstr "" -#: awkgram.y:3973 +#: awkgram.y:3997 msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" msgstr "" -#: awkgram.y:3992 +#: awkgram.y:4016 msgid "index: regexp constant as second argument is not allowed" msgstr "" -#: awkgram.y:4045 +#: awkgram.y:4069 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "" -#: awkgram.y:4102 debug.c:4041 debug.c:4084 debug.c:5204 +#: awkgram.y:4126 debug.c:4041 debug.c:4084 debug.c:5204 #, c-format msgid "could not open `%s' for writing (%s)" msgstr "" -#: awkgram.y:4103 +#: awkgram.y:4127 msgid "sending variable list to standard error" msgstr "" -#: awkgram.y:4111 +#: awkgram.y:4135 #, c-format msgid "%s: close failed (%s)" msgstr "" -#: awkgram.y:4136 +#: awkgram.y:4160 msgid "shadow_funcs() called twice!" msgstr "" -#: awkgram.y:4144 +#: awkgram.y:4168 msgid "there were shadowed variables." msgstr "" -#: awkgram.y:4215 +#: awkgram.y:4239 #, c-format msgid "function name `%s' previously defined" msgstr "" -#: awkgram.y:4261 +#: awkgram.y:4285 #, c-format msgid "function `%s': can't use function name as parameter name" msgstr "" -#: awkgram.y:4264 +#: awkgram.y:4288 #, c-format msgid "function `%s': can't use special variable `%s' as a function parameter" msgstr "" -#: awkgram.y:4272 +#: awkgram.y:4296 #, c-format msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d" msgstr "" -#: awkgram.y:4359 awkgram.y:4365 +#: awkgram.y:4383 awkgram.y:4389 #, c-format msgid "function `%s' called but never defined" msgstr "" -#: awkgram.y:4369 +#: awkgram.y:4393 #, c-format msgid "function `%s' defined but never called directly" msgstr "" -#: awkgram.y:4401 +#: awkgram.y:4425 #, c-format msgid "regexp constant for parameter #%d yields boolean value" msgstr "" -#: awkgram.y:4460 +#: awkgram.y:4484 #, c-format msgid "" "function `%s' called with space between name and `(',\n" "or used as a variable or an array" msgstr "" -#: awkgram.y:4696 +#: awkgram.y:4720 msgid "division by zero attempted" msgstr "" -#: awkgram.y:4705 +#: awkgram.y:4729 #, c-format msgid "division by zero attempted in `%%'" msgstr "" -#: awkgram.y:5025 +#: awkgram.y:5049 msgid "" "cannot assign a value to the result of a field post-increment expression" msgstr "" -#: awkgram.y:5028 +#: awkgram.y:5052 #, c-format msgid "invalid target of assignment (opcode %s)" msgstr "" @@ -615,298 +615,298 @@ msgstr "" msgid "fatal: no `$' supplied for positional field width or precision" msgstr "" -#: builtin.c:1011 +#: builtin.c:1009 msgid "`l' is meaningless in awk formats; ignored" msgstr "" -#: builtin.c:1015 +#: builtin.c:1013 msgid "fatal: `l' is not permitted in POSIX awk formats" msgstr "" -#: builtin.c:1028 +#: builtin.c:1026 msgid "`L' is meaningless in awk formats; ignored" msgstr "" -#: builtin.c:1032 +#: builtin.c:1030 msgid "fatal: `L' is not permitted in POSIX awk formats" msgstr "" -#: builtin.c:1045 +#: builtin.c:1043 msgid "`h' is meaningless in awk formats; ignored" msgstr "" -#: builtin.c:1049 +#: builtin.c:1047 msgid "fatal: `h' is not permitted in POSIX awk formats" msgstr "" -#: builtin.c:1447 +#: builtin.c:1463 #, c-format msgid "[s]printf: value %g is out of range for `%%%c' format" msgstr "" -#: builtin.c:1545 +#: builtin.c:1561 #, c-format msgid "ignoring unknown format specifier character `%c': no argument converted" msgstr "" -#: builtin.c:1550 +#: builtin.c:1566 msgid "fatal: not enough arguments to satisfy format string" msgstr "" -#: builtin.c:1552 +#: builtin.c:1568 msgid "^ ran out for this one" msgstr "" -#: builtin.c:1559 +#: builtin.c:1575 msgid "[s]printf: format specifier does not have control letter" msgstr "" -#: builtin.c:1562 +#: builtin.c:1578 msgid "too many arguments supplied for format string" msgstr "" -#: builtin.c:1618 +#: builtin.c:1634 msgid "sprintf: no arguments" msgstr "" -#: builtin.c:1641 builtin.c:1652 +#: builtin.c:1657 builtin.c:1668 msgid "printf: no arguments" msgstr "" -#: builtin.c:1695 +#: builtin.c:1711 msgid "sqrt: received non-numeric argument" msgstr "" -#: builtin.c:1699 +#: builtin.c:1715 #, c-format msgid "sqrt: called with negative argument %g" msgstr "" -#: builtin.c:1730 +#: builtin.c:1746 #, c-format msgid "substr: length %g is not >= 1" msgstr "" -#: builtin.c:1732 +#: builtin.c:1748 #, c-format msgid "substr: length %g is not >= 0" msgstr "" -#: builtin.c:1739 +#: builtin.c:1755 #, c-format msgid "substr: non-integer length %g will be truncated" msgstr "" -#: builtin.c:1744 +#: builtin.c:1760 #, c-format msgid "substr: length %g too big for string indexing, truncating to %g" msgstr "" -#: builtin.c:1756 +#: builtin.c:1772 #, c-format msgid "substr: start index %g is invalid, using 1" msgstr "" -#: builtin.c:1761 +#: builtin.c:1777 #, c-format msgid "substr: non-integer start index %g will be truncated" msgstr "" -#: builtin.c:1786 +#: builtin.c:1802 msgid "substr: source string is zero length" msgstr "" -#: builtin.c:1802 +#: builtin.c:1818 #, c-format msgid "substr: start index %g is past end of string" msgstr "" -#: builtin.c:1810 +#: builtin.c:1826 #, c-format msgid "" "substr: length %g at start index %g exceeds length of first argument (%lu)" msgstr "" -#: builtin.c:1884 +#: builtin.c:1900 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" msgstr "" -#: builtin.c:1907 +#: builtin.c:1923 msgid "strftime: received non-numeric second argument" msgstr "" -#: builtin.c:1911 +#: builtin.c:1927 msgid "strftime: second argument less than 0 or too big for time_t" msgstr "" -#: builtin.c:1918 +#: builtin.c:1934 msgid "strftime: received non-string first argument" msgstr "" -#: builtin.c:1925 +#: builtin.c:1941 msgid "strftime: received empty format string" msgstr "" -#: builtin.c:1991 +#: builtin.c:2007 msgid "mktime: received non-string argument" msgstr "" -#: builtin.c:2008 +#: builtin.c:2024 msgid "mktime: at least one of the values is out of the default range" msgstr "" -#: builtin.c:2043 +#: builtin.c:2059 msgid "'system' function not allowed in sandbox mode" msgstr "" -#: builtin.c:2048 +#: builtin.c:2064 msgid "system: received non-string argument" msgstr "" -#: builtin.c:2168 +#: builtin.c:2184 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "" -#: builtin.c:2255 +#: builtin.c:2271 msgid "tolower: received non-string argument" msgstr "" -#: builtin.c:2289 +#: builtin.c:2305 msgid "toupper: received non-string argument" msgstr "" -#: builtin.c:2325 mpfr.c:672 +#: builtin.c:2341 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "" -#: builtin.c:2327 mpfr.c:674 +#: builtin.c:2343 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "" -#: builtin.c:2346 +#: builtin.c:2362 msgid "sin: received non-numeric argument" msgstr "" -#: builtin.c:2362 +#: builtin.c:2378 msgid "cos: received non-numeric argument" msgstr "" -#: builtin.c:2415 mpfr.c:1156 +#: builtin.c:2431 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "" -#: builtin.c:2446 +#: builtin.c:2462 msgid "match: third argument is not an array" msgstr "" -#: builtin.c:2718 +#: builtin.c:2734 msgid "gensub: third argument of 0 treated as 1" msgstr "" -#: builtin.c:3014 +#: builtin.c:3030 msgid "lshift: received non-numeric first argument" msgstr "" -#: builtin.c:3016 +#: builtin.c:3032 msgid "lshift: received non-numeric second argument" msgstr "" -#: builtin.c:3022 +#: builtin.c:3038 #, c-format msgid "lshift(%f, %f): negative values will give strange results" msgstr "" -#: builtin.c:3024 +#: builtin.c:3040 #, c-format msgid "lshift(%f, %f): fractional values will be truncated" msgstr "" -#: builtin.c:3026 +#: builtin.c:3042 #, c-format msgid "lshift(%f, %f): too large shift value will give strange results" msgstr "" -#: builtin.c:3051 +#: builtin.c:3067 msgid "rshift: received non-numeric first argument" msgstr "" -#: builtin.c:3053 +#: builtin.c:3069 msgid "rshift: received non-numeric second argument" msgstr "" -#: builtin.c:3059 +#: builtin.c:3075 #, c-format msgid "rshift(%f, %f): negative values will give strange results" msgstr "" -#: builtin.c:3061 +#: builtin.c:3077 #, c-format msgid "rshift(%f, %f): fractional values will be truncated" msgstr "" -#: builtin.c:3063 +#: builtin.c:3079 #, c-format msgid "rshift(%f, %f): too large shift value will give strange results" msgstr "" -#: builtin.c:3088 mpfr.c:968 +#: builtin.c:3104 mpfr.c:968 msgid "and: called with less than two arguments" msgstr "" -#: builtin.c:3093 +#: builtin.c:3109 #, c-format msgid "and: argument %d is non-numeric" msgstr "" -#: builtin.c:3097 +#: builtin.c:3113 #, c-format msgid "and: argument %d negative value %g will give strange results" msgstr "" -#: builtin.c:3120 mpfr.c:1000 +#: builtin.c:3136 mpfr.c:1000 msgid "or: called with less than two arguments" msgstr "" -#: builtin.c:3125 +#: builtin.c:3141 #, c-format msgid "or: argument %d is non-numeric" msgstr "" -#: builtin.c:3129 +#: builtin.c:3145 #, c-format msgid "or: argument %d negative value %g will give strange results" msgstr "" -#: builtin.c:3151 mpfr.c:1031 +#: builtin.c:3167 mpfr.c:1031 msgid "xor: called with less than two arguments" msgstr "" -#: builtin.c:3157 +#: builtin.c:3173 #, c-format msgid "xor: argument %d is non-numeric" msgstr "" -#: builtin.c:3161 +#: builtin.c:3177 #, c-format msgid "xor: argument %d negative value %g will give strange results" msgstr "" -#: builtin.c:3186 mpfr.c:787 +#: builtin.c:3202 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "" -#: builtin.c:3192 +#: builtin.c:3208 #, c-format msgid "compl(%f): negative value will give strange results" msgstr "" -#: builtin.c:3194 +#: builtin.c:3210 #, c-format msgid "compl(%f): fractional value will be truncated" msgstr "" -#: builtin.c:3363 +#: builtin.c:3379 #, c-format msgid "dcgettext: `%s' is not a valid locale category" msgstr "" @@ -1736,40 +1736,40 @@ msgstr "" msgid "No symbol `%s' in current context" msgstr "" -#: 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: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 msgid "unbalanced [" msgstr "" -#: dfa.c:1052 +#: dfa.c:1174 msgid "invalid character class" msgstr "" -#: dfa.c:1228 +#: dfa.c:1316 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "" -#: dfa.c:1280 +#: dfa.c:1366 msgid "unfinished \\ escape" msgstr "" -#: dfa.c:1427 regcomp.c:161 +#: dfa.c:1513 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "" -#: dfa.c:1430 regcomp.c:176 +#: dfa.c:1516 regcomp.c:176 msgid "Regular expression too big" msgstr "" -#: dfa.c:1847 +#: dfa.c:1936 msgid "unbalanced (" msgstr "" -#: dfa.c:1973 +#: dfa.c:2062 msgid "no syntax specified" msgstr "" -#: dfa.c:1981 +#: dfa.c:2070 msgid "unbalanced )" msgstr "" @@ -2254,16 +2254,16 @@ msgstr "" msgid "chr: called with inappropriate argument(s)" msgstr "" -#: extension/readdir.c:277 +#: extension/readdir.c:281 #, c-format msgid "dir_take_control_of: opendir/fdopendir failed: %s" msgstr "" -#: extension/readfile.c:84 +#: extension/readfile.c:113 msgid "readfile: called with too many arguments" msgstr "" -#: extension/readfile.c:118 +#: extension/readfile.c:137 msgid "readfile: called with no arguments" msgstr "" @@ -2315,27 +2315,27 @@ msgstr "" msgid "read_array: set_array_element failed\n" msgstr "" -#: extension/time.c:106 +#: extension/time.c:113 msgid "gettimeofday: ignoring arguments" msgstr "" -#: extension/time.c:137 +#: extension/time.c:144 msgid "gettimeofday: not supported on this platform" msgstr "" -#: extension/time.c:158 +#: extension/time.c:165 msgid "sleep: called with too many arguments" msgstr "" -#: extension/time.c:161 +#: extension/time.c:168 msgid "sleep: missing required numeric argument" msgstr "" -#: extension/time.c:167 +#: extension/time.c:174 msgid "sleep: argument is negative" msgstr "" -#: extension/time.c:201 +#: extension/time.c:208 msgid "sleep: not supported on this platform" msgstr "" @@ -2428,20 +2428,20 @@ msgstr "" msgid "node_to_awk_value: received null val" msgstr "" -#: gawkapi.c:808 +#: gawkapi.c:807 msgid "remove_element: received null array" msgstr "" -#: gawkapi.c:811 +#: gawkapi.c:810 msgid "remove_element: received null subscript" msgstr "" -#: gawkapi.c:948 +#: gawkapi.c:947 #, c-format msgid "api_flatten_array: could not convert index %d\n" msgstr "" -#: gawkapi.c:953 +#: gawkapi.c:952 #, c-format msgid "api_flatten_array: could not convert value %d\n" msgstr "" diff --git a/po/it.gmo b/po/it.gmo index a81bb172..73f46395 100644 Binary files a/po/it.gmo and b/po/it.gmo differ diff --git a/po/it.po b/po/it.po index bd4b64c7..68f2d7f0 100644 --- a/po/it.po +++ b/po/it.po @@ -6,7 +6,7 @@ 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-01-15 10:40+0100\n" +"POT-Creation-Date: 2014-04-08 19:23+0300\n" "PO-Revision-Date: 2014-01-15 10:39+0100\n" "Last-Translator: Antonio Colombo \n" "Language-Team: Italian \n" @@ -34,8 +34,8 @@ 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:1599 builtin.c:1645 -#: builtin.c:1658 builtin.c:2086 builtin.c:2100 eval.c:1122 eval.c:1126 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" @@ -141,11 +141,11 @@ msgstr "valori di `case' doppi all'interno di uno `switch': %s" msgid "duplicate `default' detected in switch body" msgstr "valori di default doppi all'interno di uno `switch'" -#: awkgram.y:796 awkgram.y:3699 +#: awkgram.y:796 awkgram.y:3723 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:3691 +#: awkgram.y:805 awkgram.y:3715 msgid "`continue' is not allowed outside a loop" msgstr "`continue' non consentito fuori da un un ciclo" @@ -236,271 +236,271 @@ msgstr "" msgid "invalid subscript expression" msgstr "espressione indice invalida" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126 +#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "attenzione: " -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158 +#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "fatale: " -#: awkgram.y:2092 +#: awkgram.y:2116 msgid "unexpected newline or end of string" msgstr "carattere 'a capo' o fine stringa non previsti" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:523 debug.c:539 +#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 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:2360 awkgram.y:2485 +#: awkgram.y:2384 awkgram.y:2509 #, 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:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:135 debug.c:5206 +#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "ragione indeterminata" -#: awkgram.y:2371 awkgram.y:2395 +#: awkgram.y:2395 awkgram.y:2419 #, 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:2384 +#: awkgram.y:2408 #, c-format msgid "already included source file `%s'" msgstr "file sorgente `%s' già incluso" -#: awkgram.y:2385 +#: awkgram.y:2409 #, c-format msgid "already loaded shared library `%s'" msgstr "shared library `%s' già inclusa" -#: awkgram.y:2420 +#: awkgram.y:2444 msgid "@include is a gawk extension" msgstr "@include è un'estensione gawk" -#: awkgram.y:2426 +#: awkgram.y:2450 msgid "empty filename after @include" msgstr "nome-file mancante dopo @include" -#: awkgram.y:2470 +#: awkgram.y:2494 msgid "@load is a gawk extension" msgstr "@load è un'estensione gawk" -#: awkgram.y:2476 +#: awkgram.y:2500 msgid "empty filename after @load" msgstr "nome-file mancante dopo @include" -#: awkgram.y:2610 +#: awkgram.y:2634 msgid "empty program text on command line" msgstr "programma nullo sulla riga comandi" -#: awkgram.y:2725 +#: awkgram.y:2749 #, c-format msgid "can't read sourcefile `%s' (%s)" msgstr "non riesco a leggere file sorgente `%s' (%s)" -#: awkgram.y:2736 +#: awkgram.y:2760 #, c-format msgid "source file `%s' is empty" msgstr "file sorgente `%s' vuoto" -#: awkgram.y:2913 +#: awkgram.y:2937 msgid "source file does not end in newline" msgstr "file sorgente non termina con carattere 'a capo'" -#: awkgram.y:3018 +#: awkgram.y:3042 msgid "unterminated regexp ends with `\\' at end of file" msgstr "espressione regolare non completata termina con `\\' a fine file" -#: awkgram.y:3042 +#: awkgram.y:3066 #, 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:3046 +#: awkgram.y:3070 #, 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:3053 +#: awkgram.y:3077 msgid "unterminated regexp" msgstr "espressione regolare non completata" -#: awkgram.y:3057 +#: awkgram.y:3081 msgid "unterminated regexp at end of file" msgstr "espressione regolare non completata a fine file" -#: awkgram.y:3116 +#: awkgram.y:3140 msgid "use of `\\ #...' line continuation is not portable" msgstr "uso di `\\ #...' continuazione riga non portabile" -#: awkgram.y:3132 +#: awkgram.y:3156 msgid "backslash not last character on line" msgstr "'\\' non è l'ultimo carattere della riga" -#: awkgram.y:3193 +#: awkgram.y:3217 msgid "POSIX does not allow operator `**='" msgstr "POSIX non permette l'operatore `**='" -#: awkgram.y:3195 +#: awkgram.y:3219 msgid "old awk does not support operator `**='" msgstr "il vecchio awk non supporta l'operatore `**='" -#: awkgram.y:3204 +#: awkgram.y:3228 msgid "POSIX does not allow operator `**'" msgstr "POSIX non permette l'operatore `**'" -#: awkgram.y:3206 +#: awkgram.y:3230 msgid "old awk does not support operator `**'" msgstr "il vecchio awk non supporta l'operatore `**'" -#: awkgram.y:3241 +#: awkgram.y:3265 msgid "operator `^=' is not supported in old awk" msgstr "l'operatore `^=' non è supportato nel vecchio awk" -#: awkgram.y:3249 +#: awkgram.y:3273 msgid "operator `^' is not supported in old awk" msgstr "l'operatore `^' non è supportato nel vecchio awk" -#: awkgram.y:3342 awkgram.y:3358 command.y:1178 +#: awkgram.y:3366 awkgram.y:3382 command.y:1178 msgid "unterminated string" msgstr "stringa non terminata" -#: awkgram.y:3579 +#: awkgram.y:3603 #, c-format msgid "invalid char '%c' in expression" msgstr "carattere '%c' non valido in un'espressione" -#: awkgram.y:3626 +#: awkgram.y:3650 #, c-format msgid "`%s' is a gawk extension" msgstr "`%s' è un'estensione gawk" -#: awkgram.y:3631 +#: awkgram.y:3655 #, c-format msgid "POSIX does not allow `%s'" msgstr "POSIX non permette `%s'" -#: awkgram.y:3639 +#: awkgram.y:3663 #, c-format msgid "`%s' is not supported in old awk" msgstr "`%s' non è supportato nel vecchio awk" -#: awkgram.y:3729 +#: awkgram.y:3753 msgid "`goto' considered harmful!\n" msgstr "`goto' considerato pericoloso!\n" -#: awkgram.y:3763 +#: awkgram.y:3787 #, c-format msgid "%d is invalid as number of arguments for %s" msgstr "%d non valido come numero di argomenti per %s" -#: awkgram.y:3798 +#: awkgram.y:3822 #, 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:3803 +#: awkgram.y:3827 #, c-format msgid "%s third parameter is not a changeable object" msgstr "il terzo parametro di '%s' non è un oggetto modificabile" -#: awkgram.y:3886 awkgram.y:3889 +#: awkgram.y:3910 awkgram.y:3913 msgid "match: third argument is a gawk extension" msgstr "match: il terzo argomento è un'estensione gawk" -#: awkgram.y:3943 awkgram.y:3946 +#: awkgram.y:3967 awkgram.y:3970 msgid "close: second argument is a gawk extension" msgstr "close: il secondo argomento è un'estensione gawk" -#: awkgram.y:3958 +#: awkgram.y:3982 msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore" msgstr "" "uso scorretto di dcgettext(_\"...\"): togliere il carattere '_' iniziale" -#: awkgram.y:3973 +#: awkgram.y:3997 msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" msgstr "" "uso scorretto di dcngettext(_\"...\"): togliere il carattere '_' iniziale" -#: awkgram.y:3992 +#: awkgram.y:4016 msgid "index: regexp constant as second argument is not allowed" msgstr "index: espressione regolare come secondo argomento non consentita" -#: awkgram.y:4045 +#: awkgram.y:4069 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "funzione `%s': parametro `%s' nasconde variabile globale" -#: awkgram.y:4102 debug.c:4041 debug.c:4084 debug.c:5204 +#: awkgram.y:4126 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:4103 +#: awkgram.y:4127 msgid "sending variable list to standard error" msgstr "mando lista variabili a 'standard error'" -#: awkgram.y:4111 +#: awkgram.y:4135 #, c-format msgid "%s: close failed (%s)" msgstr "%s: `close' non riuscita (%s)" -#: awkgram.y:4136 +#: awkgram.y:4160 msgid "shadow_funcs() called twice!" msgstr "shadow_funcs() chiamata due volte!" -#: awkgram.y:4144 +#: awkgram.y:4168 msgid "there were shadowed variables." msgstr "c'erano variabili nascoste." -#: awkgram.y:4215 +#: awkgram.y:4239 #, c-format msgid "function name `%s' previously defined" msgstr "funzione di nome `%s' definita in precedenza" -#: awkgram.y:4261 +#: awkgram.y:4285 #, 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:4264 +#: awkgram.y:4288 #, 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:4272 +#: awkgram.y:4296 #, c-format msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d" msgstr "funzione `%s': parametro #%d, `%s', duplica parametro #%d" -#: awkgram.y:4359 awkgram.y:4365 +#: awkgram.y:4383 awkgram.y:4389 #, c-format msgid "function `%s' called but never defined" msgstr "funzione `%s' chiamata ma mai definita" -#: awkgram.y:4369 +#: awkgram.y:4393 #, c-format msgid "function `%s' defined but never called directly" msgstr "funzione `%s' definita ma mai chiamata direttamente" -#: awkgram.y:4401 +#: awkgram.y:4425 #, 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:4460 +#: awkgram.y:4484 #, c-format msgid "" "function `%s' called with space between name and `(',\n" @@ -509,23 +509,23 @@ msgstr "" "funzione `%s' chiamata con spazio tra il nome e `(',\n" "o usata come variabile o vettore" -#: awkgram.y:4696 +#: awkgram.y:4720 msgid "division by zero attempted" msgstr "tentativo di dividere per zero" -#: awkgram.y:4705 +#: awkgram.y:4729 #, c-format msgid "division by zero attempted in `%%'" msgstr "tentativo di dividere per zero in `%%'" -#: awkgram.y:5025 +#: awkgram.y:5049 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:5028 +#: awkgram.y:5052 #, c-format msgid "invalid target of assignment (opcode %s)" msgstr "destinazione di assegnazione non valida (codice operativo %s)" @@ -639,116 +639,116 @@ msgstr "fatale: `$' non consentito dopo il punto in un `format'" msgid "fatal: no `$' supplied for positional field width or precision" msgstr "fatale: manca `$' per i campi posizionali larghezza o precisione" -#: builtin.c:1011 +#: builtin.c:1009 msgid "`l' is meaningless in awk formats; ignored" msgstr "`l' non ha senso nei `format' awk; ignorato" -#: builtin.c:1015 +#: builtin.c:1013 msgid "fatal: `l' is not permitted in POSIX awk formats" msgstr "fatale: `l' non consentito nei `format' POSIX awk" -#: builtin.c:1028 +#: builtin.c:1026 msgid "`L' is meaningless in awk formats; ignored" msgstr "`L' non ha senso nei `format' awk; ignorato" -#: builtin.c:1032 +#: builtin.c:1030 msgid "fatal: `L' is not permitted in POSIX awk formats" msgstr "`L' non ha senso nei `format' awk; ignorato" -#: builtin.c:1045 +#: builtin.c:1043 msgid "`h' is meaningless in awk formats; ignored" msgstr "`h' non ha senso nei `format' awk; ignorato" -#: builtin.c:1049 +#: builtin.c:1047 msgid "fatal: `h' is not permitted in POSIX awk formats" msgstr "fatale: `h' non consentito nei `format' POSIX awk" -#: builtin.c:1447 +#: builtin.c:1463 #, 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'" -#: builtin.c:1545 +#: builtin.c:1561 #, c-format msgid "ignoring unknown format specifier character `%c': no argument converted" msgstr "" "carattere di `format' sconosciuto `%c' ignorato: nessun argomento convertito" -#: builtin.c:1550 +#: builtin.c:1566 msgid "fatal: not enough arguments to satisfy format string" msgstr "" "fatale: argomenti in numero minore di quelli richiesti dalla stringa di " "`format'" -#: builtin.c:1552 +#: builtin.c:1568 msgid "^ ran out for this one" msgstr "^ esauriti a questo punto" -#: builtin.c:1559 +#: builtin.c:1575 msgid "[s]printf: format specifier does not have control letter" msgstr "[s]printf: specifica di `format' senza un carattere di controllo" -#: builtin.c:1562 +#: builtin.c:1578 msgid "too many arguments supplied for format string" msgstr "troppi argomenti specificati per questa stringa di `format'" -#: builtin.c:1618 +#: builtin.c:1634 msgid "sprintf: no arguments" msgstr "sprintf: nessun argomento" -#: builtin.c:1641 builtin.c:1652 +#: builtin.c:1657 builtin.c:1668 msgid "printf: no arguments" msgstr "printf: nessun argomento" -#: builtin.c:1695 +#: builtin.c:1711 msgid "sqrt: received non-numeric argument" msgstr "sqrt: argomento non-numerico" -#: builtin.c:1699 +#: builtin.c:1715 #, c-format msgid "sqrt: called with negative argument %g" msgstr "sqrt: chiamata con argomento negativo %g" -#: builtin.c:1730 +#: builtin.c:1746 #, c-format msgid "substr: length %g is not >= 1" msgstr "substr: lunghezza %g non >= 1" -#: builtin.c:1732 +#: builtin.c:1748 #, c-format msgid "substr: length %g is not >= 0" msgstr "substr: lunghezza %g non >= 0" -#: builtin.c:1739 +#: builtin.c:1755 #, c-format msgid "substr: non-integer length %g will be truncated" msgstr "substr: lunghezza non intera %g: sarà troncata" -#: builtin.c:1744 +#: builtin.c:1760 #, 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:1756 +#: builtin.c:1772 #, c-format msgid "substr: start index %g is invalid, using 1" msgstr "substr: indice di partenza %g non valido, uso 1" -#: builtin.c:1761 +#: builtin.c:1777 #, c-format msgid "substr: non-integer start index %g will be truncated" msgstr "substr: indice di partenza non intero %g: sarà troncato" -#: builtin.c:1786 +#: builtin.c:1802 msgid "substr: source string is zero length" msgstr "substr: stringa di partenza lunga zero" -#: builtin.c:1802 +#: builtin.c:1818 #, 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:1810 +#: builtin.c:1826 #, c-format msgid "" "substr: length %g at start index %g exceeds length of first argument (%lu)" @@ -756,187 +756,187 @@ msgstr "" "substr: lunghezza %g all'indice di partenza %g supera la lunghezza del primo " "argomento (%lu)" -#: builtin.c:1884 +#: builtin.c:1900 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" msgstr "" "strftime: il valore del `format' in PROCINFO[\"strftime\"] è di tipo numerico" -#: builtin.c:1907 +#: builtin.c:1923 msgid "strftime: received non-numeric second argument" msgstr "strftime: secondo argomento non-numerico" -#: builtin.c:1911 +#: builtin.c:1927 msgid "strftime: second argument less than 0 or too big for time_t" msgstr "strftime: secondo argomento < 0 o troppo elevato per time_t" -#: builtin.c:1918 +#: builtin.c:1934 msgid "strftime: received non-string first argument" msgstr "strftime: il primo argomento non è una stringa" -#: builtin.c:1925 +#: builtin.c:1941 msgid "strftime: received empty format string" msgstr "strftime: `format' è una stringa nulla" -#: builtin.c:1991 +#: builtin.c:2007 msgid "mktime: received non-string argument" msgstr "mktime: l'argomento non è una stringa" -#: builtin.c:2008 +#: builtin.c:2024 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:2043 +#: builtin.c:2059 msgid "'system' function not allowed in sandbox mode" msgstr "funzione 'system' non consentita in modo `sandbox'" -#: builtin.c:2048 +#: builtin.c:2064 msgid "system: received non-string argument" msgstr "system: l'argomento non è una stringa" -#: builtin.c:2168 +#: builtin.c:2184 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "riferimento a variabile non inizializzata `$%d'" -#: builtin.c:2255 +#: builtin.c:2271 msgid "tolower: received non-string argument" msgstr "tolower: l'argomento non è una stringa" -#: builtin.c:2289 +#: builtin.c:2305 msgid "toupper: received non-string argument" msgstr "toupper: l'argomento non è una stringa" -#: builtin.c:2325 mpfr.c:672 +#: builtin.c:2341 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2: primo argomento non-numerico" -#: builtin.c:2327 mpfr.c:674 +#: builtin.c:2343 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2: secondo argomento non-numerico" -#: builtin.c:2346 +#: builtin.c:2362 msgid "sin: received non-numeric argument" msgstr "sin: argomento non-numerico" -#: builtin.c:2362 +#: builtin.c:2378 msgid "cos: received non-numeric argument" msgstr "cos: argomento non-numerico" -#: builtin.c:2415 mpfr.c:1156 +#: builtin.c:2431 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand: argomento non-numerico" -#: builtin.c:2446 +#: builtin.c:2462 msgid "match: third argument is not an array" msgstr "match: terzo argomento non-vettoriale" -#: builtin.c:2718 +#: builtin.c:2734 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub: il terzo argomento è 0, trattato come 1" -#: builtin.c:3014 +#: builtin.c:3030 msgid "lshift: received non-numeric first argument" msgstr "lshift: primo argomento non-numerico" -#: builtin.c:3016 +#: builtin.c:3032 msgid "lshift: received non-numeric second argument" msgstr "lshift: secondo argomento non-numerico" -#: builtin.c:3022 +#: builtin.c:3038 #, c-format msgid "lshift(%f, %f): negative values will give strange results" msgstr "lshift(%f, %f): valori negativi daranno risultati strani" -#: builtin.c:3024 +#: builtin.c:3040 #, c-format msgid "lshift(%f, %f): fractional values will be truncated" msgstr "lshift(%f, %f): valori decimali saranno troncati" -#: builtin.c:3026 +#: builtin.c:3042 #, 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:3051 +#: builtin.c:3067 msgid "rshift: received non-numeric first argument" msgstr "rshift: primo argomento ricevuto non-numerico" -#: builtin.c:3053 +#: builtin.c:3069 msgid "rshift: received non-numeric second argument" msgstr "rshift: secondo argomento non-numerico" -#: builtin.c:3059 +#: builtin.c:3075 #, c-format msgid "rshift(%f, %f): negative values will give strange results" msgstr "rshift(%f, %f): valori negativi daranno risultati strani" -#: builtin.c:3061 +#: builtin.c:3077 #, c-format msgid "rshift(%f, %f): fractional values will be truncated" msgstr "rshift(%f, %f): valori decimali saranno troncati" -#: builtin.c:3063 +#: builtin.c:3079 #, 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:3088 mpfr.c:968 +#: builtin.c:3104 mpfr.c:968 msgid "and: called with less than two arguments" msgstr "and: chiamata con meno di due argomenti" -#: builtin.c:3093 +#: builtin.c:3109 #, c-format msgid "and: argument %d is non-numeric" msgstr "and: argomento %d non-numerico" -#: builtin.c:3097 +#: builtin.c:3113 #, 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:3120 mpfr.c:1000 +#: builtin.c:3136 mpfr.c:1000 msgid "or: called with less than two arguments" msgstr "or: chiamata con meno di due argomenti" -#: builtin.c:3125 +#: builtin.c:3141 #, c-format msgid "or: argument %d is non-numeric" msgstr "or: argomento %d non-numerico" -#: builtin.c:3129 +#: builtin.c:3145 #, 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:3151 mpfr.c:1031 +#: builtin.c:3167 mpfr.c:1031 msgid "xor: called with less than two arguments" msgstr "xor: chiamata con meno di due argomenti" -#: builtin.c:3157 +#: builtin.c:3173 #, c-format msgid "xor: argument %d is non-numeric" msgstr "xor: argomento %d non-numerico" -#: builtin.c:3161 +#: builtin.c:3177 #, 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:3186 mpfr.c:787 +#: builtin.c:3202 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl: argomento non-numerico" -#: builtin.c:3192 +#: builtin.c:3208 #, c-format msgid "compl(%f): negative value will give strange results" msgstr "compl(%f): valore negativo, darà risultati strani" -#: builtin.c:3194 +#: builtin.c:3210 #, c-format msgid "compl(%f): fractional value will be truncated" msgstr "compl(%f): valori decimali saranno troncati" -#: builtin.c:3363 +#: builtin.c:3379 #, c-format msgid "dcgettext: `%s' is not a valid locale category" msgstr "dcgettext: `%s' non è una categoria `locale' valida" @@ -1063,8 +1063,8 @@ msgstr "clear [[nome-file:]N|funzione] - togli breakpoint impostati prima." #: command.y:823 msgid "" -"commands [num] - starts a list of commands to be executed at a breakpoint" -"(watchpoint) hit." +"commands [num] - starts a list of commands to be executed at a " +"breakpoint(watchpoint) hit." msgstr "" "commands [num] - inizia una lista di comandi da eseguire se si raggiunge un " "breakpoint (watchpoint)." @@ -1812,40 +1812,40 @@ msgstr "`return' non consentito nel contesto corrente; istruzione ignorata" msgid "No symbol `%s' in current context" msgstr "Simbolo `%s' non esiste nel contesto corrente" -#: 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: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 msgid "unbalanced [" msgstr "[ non chiusa" -#: dfa.c:1052 +#: dfa.c:1174 msgid "invalid character class" msgstr "character class non valida" -#: dfa.c:1228 +#: dfa.c:1316 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "sintassi character class è [[:spazio:]], non [:spazio:]" -#: dfa.c:1280 +#: dfa.c:1366 msgid "unfinished \\ escape" msgstr "sequenza escape \\ non completa" -#: dfa.c:1427 regcomp.c:161 +#: dfa.c:1513 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "Contenuto di \\{\\} non valido" -#: dfa.c:1430 regcomp.c:176 +#: dfa.c:1516 regcomp.c:176 msgid "Regular expression too big" msgstr "Espressione regolare troppo complessa" -#: dfa.c:1847 +#: dfa.c:1936 msgid "unbalanced (" msgstr "( non chiusa" -#: dfa.c:1973 +#: dfa.c:2062 msgid "no syntax specified" msgstr "nessuna sintassi specificata" -#: dfa.c:1981 +#: dfa.c:2070 msgid "unbalanced )" msgstr ") non aperta" @@ -2341,16 +2341,16 @@ msgstr "chr: chiamata senza argomenti" msgid "chr: called with inappropriate argument(s)" msgstr "chr: chiamata con argomento/i non corretto/i" -#: 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 non riuscita: %s" -#: extension/readfile.c:84 +#: extension/readfile.c:113 msgid "readfile: called with too many arguments" msgstr "readfile: chiamata con troppi argomenti" -#: extension/readfile.c:118 +#: extension/readfile.c:137 msgid "readfile: called with no arguments" msgstr "readfile: chiamata senza argomenti" @@ -2402,27 +2402,27 @@ msgstr "do_reada: clear_array non riuscita\n" msgid "read_array: set_array_element failed\n" msgstr "read_array: set_array_element non riuscita\n" -#: extension/time.c:106 +#: extension/time.c:113 msgid "gettimeofday: ignoring arguments" msgstr "gettimeofday: ignoro argomenti" -#: extension/time.c:137 +#: extension/time.c:144 msgid "gettimeofday: not supported on this platform" msgstr "gettimeofday: non supportato in questa architettura" -#: extension/time.c:158 +#: extension/time.c:165 msgid "sleep: called with too many arguments" msgstr "sleep: chiamata con troppi argomenti" -#: extension/time.c:161 +#: extension/time.c:168 msgid "sleep: missing required numeric argument" msgstr "sleep: manca necessario argomento numerico" -#: extension/time.c:167 +#: extension/time.c:174 msgid "sleep: argument is negative" msgstr "sleep: l'argomento è negativo" -#: extension/time.c:201 +#: extension/time.c:208 msgid "sleep: not supported on this platform" msgstr "sleep: non supportato in questa architettura" @@ -2525,20 +2525,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:808 +#: gawkapi.c:807 msgid "remove_element: received null array" msgstr "remove_element: ricevuto vettore nullo" -#: gawkapi.c:811 +#: gawkapi.c:810 msgid "remove_element: received null subscript" msgstr "remove_element: ricevuto indice nullo" -#: gawkapi.c:948 +#: gawkapi.c:947 #, 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:953 +#: gawkapi.c:952 #, 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" diff --git a/po/ja.gmo b/po/ja.gmo index faca679e..d1ef30cc 100644 Binary files a/po/ja.gmo and b/po/ja.gmo differ diff --git a/po/ja.po b/po/ja.po index 756f3548..ae5b61c8 100644 --- a/po/ja.po +++ b/po/ja.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gawk 4.0.0\n" "Report-Msgid-Bugs-To: arnold@skeeve.com\n" -"POT-Creation-Date: 2013-05-09 16:05+0300\n" +"POT-Creation-Date: 2014-04-08 19:23+0300\n" "PO-Revision-Date: 2011-07-17 08:28+0900\n" "Last-Translator: Yasuaki Taniguchi \n" "Language-Team: Japanese \n" @@ -18,85 +18,85 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: array.c:254 +#: array.c:256 #, c-format msgid "from %s" msgstr "%s ã‹ã‚‰" -#: array.c:354 +#: array.c:357 msgid "attempt to use a scalar value as array" msgstr "スカラー値をé…列ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹è©¦ã¿ã§ã™" -#: array.c:356 +#: array.c:359 #, c-format msgid "attempt to use scalar parameter `%s' as an array" msgstr "スカラー仮引数 `%s' ã‚’é…列ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹è©¦ã¿ã§ã™" -#: array.c:359 +#: array.c:362 #, c-format msgid "attempt to use scalar `%s' as an array" msgstr "スカラー `%s' ã‚’é…列ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹è©¦ã¿ã§ã™" -#: array.c:406 array.c:573 builtin.c:85 builtin.c:1591 builtin.c:1637 -#: builtin.c:1650 builtin.c:2078 builtin.c:2092 eval.c:1121 eval.c:1125 -#: eval.c:1524 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" msgstr "スカラーコンテキストã§é…列 `%s' を使用ã™ã‚‹è©¦ã¿ã§ã™" -#: array.c:580 +#: array.c:583 #, c-format msgid "delete: index `%s' not in array `%s'" msgstr "delete: é…列 `%2$s' 内ã«ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ `%1$s' ãŒã‚りã¾ã›ã‚“" -#: array.c:594 +#: array.c:597 #, c-format msgid "attempt to use scalar `%s[\"%.*s\"]' as an array" msgstr "スカラー `%s[\"%.*s\"]' ã‚’é…列ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹è©¦ã¿ã§ã™" -#: array.c:773 +#: array.c:776 #, fuzzy msgid "adump: first argument not an array" msgstr "adump: 引数ãŒé…列ã§ã¯ã‚りã¾ã›ã‚“" -#: array.c:812 +#: array.c:815 msgid "asort: second argument not an array" msgstr "asort: 第二引数ãŒé…列ã§ã¯ã‚りã¾ã›ã‚“" -#: array.c:813 +#: array.c:816 msgid "asorti: second argument not an array" msgstr "asorti: 第二引数ãŒé…列ã§ã¯ã‚りã¾ã›ã‚“" -#: array.c:820 +#: array.c:823 msgid "asort: first argument not an array" msgstr "asort: 第一引数ãŒé…列ã§ã¯ã‚りã¾ã›ã‚“" -#: array.c:821 +#: array.c:824 msgid "asorti: first argument not an array" msgstr "asorti: 第一引数ãŒé…列ã§ã¯ã‚りã¾ã›ã‚“" -#: array.c:828 +#: array.c:831 msgid "asort: cannot use a subarray of first arg for second arg" msgstr "asort: 第一引数ã®éƒ¨åˆ†é…列を第二引数用ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“" -#: array.c:829 +#: array.c:832 msgid "asorti: cannot use a subarray of first arg for second arg" msgstr "asorti: 第一引数ã®éƒ¨åˆ†é…列を第二引数用ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“" -#: array.c:834 +#: array.c:837 msgid "asort: cannot use a subarray of second arg for first arg" msgstr "asort: 第二引数ã®éƒ¨åˆ†é…列を第一引数用ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“" -#: array.c:835 +#: array.c:838 msgid "asorti: cannot use a subarray of second arg for first arg" msgstr "asorti: 第二引数ã®éƒ¨åˆ†é…列を第一引数用ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“" -#: array.c:1309 +#: array.c:1314 #, c-format msgid "`%s' is invalid as a function name" msgstr "`%s' ã¯é–¢æ•°åã¨ã—ã¦ã¯ç„¡åйã§ã™" -#: array.c:1313 +#: array.c:1318 #, c-format msgid "sort comparison function `%s' is not defined" msgstr "ソート比較関数 `%s' ãŒå®šç¾©ã•れã¦ã„ã¾ã›ã‚“" @@ -137,11 +137,11 @@ msgstr "switch æ–‡ã®ä¸­ã§é‡è¤‡ã—㟠case 値ãŒä½¿ç”¨ã•れã¦ã„ã¾ã™: %s" msgid "duplicate `default' detected in switch body" msgstr "switch æ–‡ã®ä¸­ã§é‡è¤‡ã—㟠`default' ãŒæ¤œå‡ºã•れã¾ã—ãŸ" -#: awkgram.y:796 awkgram.y:3699 +#: awkgram.y:796 awkgram.y:3723 msgid "`break' is not allowed outside a loop or switch" msgstr "`break' ã¯ãƒ«ãƒ¼ãƒ—ã¾ãŸã¯ switch ã®å¤–ã§ã¯è¨±å¯ã•れã¦ã„ã¾ã›ã‚“" -#: awkgram.y:805 awkgram.y:3691 +#: awkgram.y:805 awkgram.y:3715 msgid "`continue' is not allowed outside a loop" msgstr "`continue' ã¯ãƒ«ãƒ¼ãƒ—ã®å¤–ã§ã¯è¨±å¯ã•れã¦ã„ã¾ã›ã‚“" @@ -231,269 +231,269 @@ msgstr "特別ãªå¤‰æ•° `%s' ã¯é–“接関数呼ã³å‡ºã—用ã«ã¯ä½¿ç”¨å‡ºæ¥ã¾ msgid "invalid subscript expression" msgstr "添字ã®å¼ãŒç„¡åйã§ã™" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:119 +#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "警告: " -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:151 +#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "致命的: " -#: awkgram.y:2092 +#: awkgram.y:2116 msgid "unexpected newline or end of string" msgstr "予期ã—ãªã„改行ã¾ãŸã¯æ–‡å­—列終端ã§ã™" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:517 debug.c:533 -#: debug.c:2792 debug.c:5040 +#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 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:2360 awkgram.y:2485 +#: awkgram.y:2384 awkgram.y:2509 #, fuzzy, c-format msgid "can't open shared library `%s' for reading (%s)" msgstr "ソースファイル `%s' を読ã¿è¾¼ã¿ç”¨ã«é–‹ã‘ã¾ã›ã‚“ (%s)" -#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:130 debug.c:5191 +#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "åŽŸå› ä¸æ˜Ž" -#: awkgram.y:2371 awkgram.y:2395 +#: awkgram.y:2395 awkgram.y:2419 #, c-format msgid "can't include `%s' and use it as a program file" msgstr "" -#: awkgram.y:2384 +#: awkgram.y:2408 #, c-format msgid "already included source file `%s'" msgstr "ソースファイル `%s' ã¯æ—¢ã«èª­ã¿è¾¼ã¾ã‚Œã¦ã„ã¾ã™" -#: awkgram.y:2385 +#: awkgram.y:2409 #, fuzzy, c-format msgid "already loaded shared library `%s'" msgstr "ソースファイル `%s' ã¯æ—¢ã«èª­ã¿è¾¼ã¾ã‚Œã¦ã„ã¾ã™" -#: awkgram.y:2420 +#: awkgram.y:2444 msgid "@include is a gawk extension" msgstr "@include 㯠gawk æ‹¡å¼µã§ã™" -#: awkgram.y:2426 +#: awkgram.y:2450 msgid "empty filename after @include" msgstr "@include ã®å¾Œã«ç©ºã®ãƒ•ァイルåãŒã‚りã¾ã™" -#: awkgram.y:2470 +#: awkgram.y:2494 #, fuzzy msgid "@load is a gawk extension" msgstr "@include 㯠gawk æ‹¡å¼µã§ã™" -#: awkgram.y:2476 +#: awkgram.y:2500 #, fuzzy msgid "empty filename after @load" msgstr "@include ã®å¾Œã«ç©ºã®ãƒ•ァイルåãŒã‚りã¾ã™" -#: awkgram.y:2610 +#: awkgram.y:2634 msgid "empty program text on command line" msgstr "コマンド行ã®ãƒ—ログラム表記ãŒç©ºã§ã™" -#: awkgram.y:2725 +#: awkgram.y:2749 #, c-format msgid "can't read sourcefile `%s' (%s)" msgstr "ソースファイル `%s' を読ã¿è¾¼ã‚ã¾ã›ã‚“ (%s)" -#: awkgram.y:2736 +#: awkgram.y:2760 #, c-format msgid "source file `%s' is empty" msgstr "ソースファイル `%s' ã¯ç©ºã§ã™" -#: awkgram.y:2913 +#: awkgram.y:2937 msgid "source file does not end in newline" msgstr "ã‚½ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ”¹è¡Œã§çµ‚ã£ã¦ã„ã¾ã›ã‚“" -#: awkgram.y:3018 +#: awkgram.y:3042 msgid "unterminated regexp ends with `\\' at end of file" msgstr "終端ã•れã¦ã„ãªã„æ­£è¦è¡¨ç¾ãŒãƒ•ァイル最後㮠`\\' ã§çµ‚ã£ã¦ã„ã¾ã™ã€‚" -#: awkgram.y:3042 +#: awkgram.y:3066 #, c-format msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk" msgstr "%s: %d: tawk ã®æ­£è¦è¡¨ç¾ä¿®é£¾å­ `/.../%c' 㯠gawk ã§ä½¿ç”¨ã§ãã¾ã›ã‚“" -#: awkgram.y:3046 +#: awkgram.y:3070 #, c-format msgid "tawk regex modifier `/.../%c' doesn't work in gawk" msgstr "tawk ã®æ­£è¦è¡¨ç¾ä¿®é£¾å­ `/.../%c' 㯠gawk ã§ä½¿ç”¨ã§ãã¾ã›ã‚“" -#: awkgram.y:3053 +#: awkgram.y:3077 msgid "unterminated regexp" msgstr "æ­£è¦è¡¨ç¾ãŒçµ‚端ã•れã¦ã„ã¾ã›ã‚“" -#: awkgram.y:3057 +#: awkgram.y:3081 msgid "unterminated regexp at end of file" msgstr "ファイルã®ä¸­ã§æ­£è¦è¡¨ç¾ãŒçµ‚端ã•れã¦ã„ã¾ã›ã‚“" -#: awkgram.y:3116 +#: awkgram.y:3140 msgid "use of `\\ #...' line continuation is not portable" msgstr "`\\ #...' å½¢å¼ã®è¡Œç¶™ç¶šã¯ç§»æ¤æ€§ãŒã‚りã¾ã›ã‚“" -#: awkgram.y:3132 +#: awkgram.y:3156 msgid "backslash not last character on line" msgstr "ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ãŒè¡Œæœ€å¾Œã®æ–‡å­—ã«ãªã£ã¦ã„ã¾ã›ã‚“。" -#: awkgram.y:3193 +#: awkgram.y:3217 msgid "POSIX does not allow operator `**='" msgstr "POSIX ã§ã¯æ¼”ç®—å­ `**=' ã¯è¨±å¯ã•れã¦ã„ã¾ã›ã‚“" -#: awkgram.y:3195 +#: awkgram.y:3219 msgid "old awk does not support operator `**='" msgstr "å¤ã„ awk ã¯æ¼”ç®—å­ `**=' をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“" -#: awkgram.y:3204 +#: awkgram.y:3228 msgid "POSIX does not allow operator `**'" msgstr "POSIX ã§ã¯æ¼”ç®—å­ `**' ã¯è¨±å¯ã•れã¦ã„ã¾ã›ã‚“" -#: awkgram.y:3206 +#: awkgram.y:3230 msgid "old awk does not support operator `**'" msgstr "å¤ã„ awk ã¯æ¼”ç®—å­ `**' をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“" -#: awkgram.y:3241 +#: awkgram.y:3265 msgid "operator `^=' is not supported in old awk" msgstr "å¤ã„ awk ã¯æ¼”ç®—å­ `^=' をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“" -#: awkgram.y:3249 +#: awkgram.y:3273 msgid "operator `^' is not supported in old awk" msgstr "å¤ã„ awk ã¯æ¼”ç®—å­ `^' をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“" -#: awkgram.y:3342 awkgram.y:3358 command.y:1178 +#: awkgram.y:3366 awkgram.y:3382 command.y:1178 msgid "unterminated string" msgstr "文字列ãŒçµ‚端ã•れã¦ã„ã¾ã›ã‚“" -#: awkgram.y:3579 +#: awkgram.y:3603 #, c-format msgid "invalid char '%c' in expression" msgstr "å¼å†…ã«ç„¡åŠ¹ãªæ–‡å­— '%c' ãŒã‚りã¾ã™" -#: awkgram.y:3626 +#: awkgram.y:3650 #, c-format msgid "`%s' is a gawk extension" msgstr "`%s' 㯠gawk æ‹¡å¼µã§ã™" -#: awkgram.y:3631 +#: awkgram.y:3655 #, c-format msgid "POSIX does not allow `%s'" msgstr "POSIX ã§ã¯ `%s' ã¯è¨±å¯ã•れã¦ã„ã¾ã›ã‚“" -#: awkgram.y:3639 +#: awkgram.y:3663 #, c-format msgid "`%s' is not supported in old awk" msgstr "å¤ã„ awk 㯠`%s' をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“" -#: awkgram.y:3729 +#: awkgram.y:3753 msgid "`goto' considered harmful!\n" msgstr "`goto' ã¯æœ‰å®³ã ã¨è¦‹ãªã•れã¦ã„ã¾ã™!\n" -#: awkgram.y:3763 +#: awkgram.y:3787 #, c-format msgid "%d is invalid as number of arguments for %s" msgstr "%d 㯠%s 用ã®å¼•æ•°ã®æ•°ã¨ã—ã¦ã¯ç„¡åйã§ã™" -#: awkgram.y:3798 +#: awkgram.y:3822 #, c-format msgid "%s: string literal as last arg of substitute has no effect" msgstr "%s: æ–‡å­—åˆ—ãƒªãƒ†ãƒ©ãƒ«ã‚’ç½®ãæ›ãˆæœ€å¾Œã®å¼•æ•°ã«ä½¿ç”¨ã™ã‚‹ã¨åŠ¹æžœãŒã‚りã¾ã›ã‚“" -#: awkgram.y:3803 +#: awkgram.y:3827 #, c-format msgid "%s third parameter is not a changeable object" msgstr "%s 第三仮引数ã¯å¯å¤‰ã‚ªãƒ–ジェクトã§ã¯ã‚りã¾ã›ã‚“" -#: awkgram.y:3886 awkgram.y:3889 +#: awkgram.y:3910 awkgram.y:3913 msgid "match: third argument is a gawk extension" msgstr "match: 第三引数㯠gawk æ‹¡å¼µã§ã™" -#: awkgram.y:3943 awkgram.y:3946 +#: awkgram.y:3967 awkgram.y:3970 msgid "close: second argument is a gawk extension" msgstr "close: 第二引数㯠gawk æ‹¡å¼µã§ã™" -#: awkgram.y:3958 +#: awkgram.y:3982 msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore" msgstr "" "dcgettext(_\"...\")ã®ä½¿ç”¨æ³•ãŒé–“é•ã£ã¦ã„ã¾ã™: 先頭ã®ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢(_)を削除ã—" "ã¦ãã ã•ã„" -#: awkgram.y:3973 +#: awkgram.y:3997 msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" msgstr "" "dcngettext(_\"...\")ã®ä½¿ç”¨æ³•ãŒé–“é•ã£ã¦ã„ã¾ã™: 先頭ã®ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢(_)を削除ã—" "ã¦ãã ã•ã„" -#: awkgram.y:3992 +#: awkgram.y:4016 #, fuzzy msgid "index: regexp constant as second argument is not allowed" msgstr "index: 文字列ã§ã¯ç„¡ã„第二引数をå—ã‘å–りã¾ã—ãŸ" -#: awkgram.y:4045 +#: awkgram.y:4069 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "関数 `%s': 仮引数 `%s' ãŒå¤§åŸŸå¤‰æ•°ã‚’覆ã„éš ã—ã¦ã„ã¾ã™" -#: awkgram.y:4102 debug.c:4021 debug.c:4064 debug.c:5189 +#: awkgram.y:4126 debug.c:4041 debug.c:4084 debug.c:5204 #, c-format msgid "could not open `%s' for writing (%s)" msgstr "`%s' を書込ã¿ç”¨ã«é–‹ã‘ã¾ã›ã‚“ã§ã—㟠(%s)" -#: awkgram.y:4103 +#: awkgram.y:4127 msgid "sending variable list to standard error" msgstr "変数リストを標準エラーã«é€ã£ã¦ã„ã¾ã™" -#: awkgram.y:4111 +#: awkgram.y:4135 #, c-format msgid "%s: close failed (%s)" msgstr "%s: é–‰ã˜ã‚‹ã®ã«å¤±æ•—ã—ã¾ã—㟠(%s)" -#: awkgram.y:4136 +#: awkgram.y:4160 msgid "shadow_funcs() called twice!" msgstr "shadow_funcs() を二回呼ã³å‡ºã—ã¦ã„ã¾ã™!" -#: awkgram.y:4144 +#: awkgram.y:4168 msgid "there were shadowed variables." msgstr "覆ã„éš ã•れãŸå¤‰æ•°ãŒã‚りã¾ã—ãŸ" -#: awkgram.y:4215 +#: awkgram.y:4239 #, c-format msgid "function name `%s' previously defined" msgstr "関数å `%s' ã¯å‰ã«å®šç¾©ã•れã¦ã„ã¾ã™" -#: awkgram.y:4261 +#: awkgram.y:4285 #, c-format msgid "function `%s': can't use function name as parameter name" msgstr "関数 `%s': 関数åを仮引数åã¨ã—ã¦ä½¿ç”¨å‡ºæ¥ã¾ã›ã‚“" -#: awkgram.y:4264 +#: awkgram.y:4288 #, c-format msgid "function `%s': can't use special variable `%s' as a function parameter" msgstr "関数 `%s': 特別ãªå¤‰æ•° `%s' ã¯é–¢æ•°ã®ä»®å¼•æ•°ã¨ã—ã¦ä½¿ç”¨å‡ºæ¥ã¾ã›ã‚“" -#: awkgram.y:4272 +#: awkgram.y:4296 #, c-format msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d" msgstr "関数 `%s': 仮引数 #%d, `%s' ãŒä»®å¼•æ•° #%d ã¨é‡è¤‡ã—ã¦ã„ã¾ã™" -#: awkgram.y:4366 awkgram.y:4372 +#: awkgram.y:4383 awkgram.y:4389 #, c-format msgid "function `%s' called but never defined" msgstr "未定義ã®é–¢æ•° `%s' を呼ã³å‡ºã—ã¾ã—ãŸ" -#: awkgram.y:4376 +#: awkgram.y:4393 #, c-format msgid "function `%s' defined but never called directly" msgstr "関数 `%s' ã¯å®šç¾©ã•れã¦ã„ã¾ã™ãŒã€ä¸€åº¦ã‚‚直接呼ã³å‡ºã•れã¦ã„ã¾ã›ã‚“" -#: awkgram.y:4408 +#: awkgram.y:4425 #, c-format msgid "regexp constant for parameter #%d yields boolean value" msgstr "仮引数 #%d ç”¨ã®æ­£è¦è¡¨ç¾å®šæ•°ã¯çœŸå½å€¤ã‚’出力ã—ã¾ã™" -#: awkgram.y:4467 +#: awkgram.y:4484 #, c-format msgid "" "function `%s' called with space between name and `(',\n" @@ -502,235 +502,245 @@ msgstr "" "関数å㨠`(' ã®é–“ã«ã‚¹ãƒšãƒ¼ã‚¹ã‚’入れã¦é–¢æ•° `%s' を呼ã³å‡ºã—ã¦ã„ã¾ã™ã€‚\n" "ã¾ãŸã¯ã€å¤‰æ•°ã‹é…列ã¨ã—ã¦ä½¿ã‚れã¦ã„ã¾ã™ã€‚" -#: awkgram.y:4703 +#: awkgram.y:4720 msgid "division by zero attempted" msgstr "ゼロã«ã‚ˆã‚‹é™¤ç®—ãŒè©¦ã¿ã‚‰ã‚Œã¾ã—ãŸ" -#: awkgram.y:4712 +#: awkgram.y:4729 #, c-format msgid "division by zero attempted in `%%'" msgstr "`%%' 内ã§ã‚¼ãƒ­ã«ã‚ˆã‚‹é™¤ç®—ãŒè©¦ã¿ã‚‰ã‚Œã¾ã—ãŸ" -#: builtin.c:128 +#: awkgram.y:5049 +msgid "" +"cannot assign a value to the result of a field post-increment expression" +msgstr "" + +#: awkgram.y:5052 +#, fuzzy, c-format +msgid "invalid target of assignment (opcode %s)" +msgstr "%d 㯠%s 用ã®å¼•æ•°ã®æ•°ã¨ã—ã¦ã¯ç„¡åйã§ã™" + +#: builtin.c:133 #, c-format msgid "%s to \"%s\" failed (%s)" msgstr "%s ã‹ã‚‰ \"%s\" ã¸å‡ºåŠ›ã§ãã¾ã›ã‚“ (%s)。" -#: builtin.c:129 +#: builtin.c:134 msgid "standard output" msgstr "標準出力" -#: builtin.c:143 +#: builtin.c:148 msgid "exp: received non-numeric argument" msgstr "exp: å¼•æ•°ãŒæ•°å€¤ã§ã¯ã‚りã¾ã›ã‚“" -#: builtin.c:149 +#: builtin.c:154 #, c-format msgid "exp: argument %g is out of range" msgstr "exp: 引数 %g ãŒç¯„囲外ã§ã™" -#: builtin.c:224 +#: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" msgstr "" "fflush: flush ã§ãã¾ã›ã‚“: パイプ `%s' ã¯èª­ã¿è¾¼ã¿ç”¨ã«é–‹ã‹ã‚Œã¦ã„ã¾ã™ã€‚書ãè¾¼ã¿" "用ã§ã¯ã‚りã¾ã›ã‚“" -#: builtin.c:227 +#: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" msgstr "" "fflush: flush ã§ãã¾ã›ã‚“: ファイル `%s' ã¯èª­ã¿è¾¼ã¿ç”¨ã«é–‹ã‹ã‚Œã¦ã„ã¾ã™ã€‚書ãè¾¼" "ã¿ç”¨ã§ã¯ã‚りã¾ã›ã‚“" -#: builtin.c:239 +#: builtin.c:244 #, c-format msgid "fflush: `%s' is not an open file, pipe or co-process" msgstr "fflush: `%s' ãŒé–‹ã‹ã‚ŒãŸãƒ•ァイルã€ãƒ‘イプã€ãƒ—ロセス共有ã§ã¯ã‚りã¾ã›ã‚“" -#: builtin.c:357 +#: builtin.c:362 msgid "index: received non-string first argument" msgstr "index: 文字列ã§ã¯ç„¡ã„第一引数をå—ã‘å–りã¾ã—ãŸ" -#: builtin.c:359 +#: builtin.c:364 msgid "index: received non-string second argument" msgstr "index: 文字列ã§ã¯ç„¡ã„第二引数をå—ã‘å–りã¾ã—ãŸ" -#: builtin.c:483 mpfr.c:757 +#: builtin.c:488 mpfr.c:757 msgid "int: received non-numeric argument" msgstr "int: 数値ã§ã¯ç„¡ã„引数をå—ã‘å–りã¾ã—ãŸ" -#: builtin.c:520 +#: builtin.c:525 msgid "length: received array argument" msgstr "length: é…列引数をå—ã‘å–りã¾ã—ãŸ" -#: builtin.c:523 +#: builtin.c:528 msgid "`length(array)' is a gawk extension" msgstr "`length(array)' 㯠gawk æ‹¡å¼µã§ã™" -#: builtin.c:539 +#: builtin.c:544 msgid "length: received non-string argument" msgstr "length: 文字列ã§ã¯ç„¡ã„引数をå—ã‘å–りã¾ã—ãŸ" -#: builtin.c:570 +#: builtin.c:575 msgid "log: received non-numeric argument" msgstr "log: 数値ã§ã¯ç„¡ã„引数をå—ã‘å–りã¾ã—ãŸ" -#: builtin.c:573 +#: builtin.c:578 #, c-format msgid "log: received negative argument %g" msgstr "log: è² ã®å¼•æ•° %g ã‚’å—ã‘å–りã¾ã—ãŸ" -#: builtin.c:771 builtin.c:776 +#: builtin.c:776 builtin.c:781 msgid "fatal: must use `count$' on all formats or none" msgstr "" "致命的: `count$’ ã¯å…¨ã¦ã®æ›¸å¼ä½¿ç”¨ã™ã‚‹ã€ã¾ãŸã¯å…¨ã¦ã«ä½¿ç”¨ã—ãªã„ã®ã„ãšã‚Œã‹ã§ãªã‘" "れã°ã„ã‘ã¾ã›ã‚“" -#: builtin.c:846 +#: builtin.c:851 #, c-format msgid "field width is ignored for `%%' specifier" msgstr "`%%' 指定用ã®ãƒ•ィールド幅ã¯ç„¡è¦–ã•れã¾ã™" -#: builtin.c:848 +#: builtin.c:853 #, c-format msgid "precision is ignored for `%%' specifier" msgstr "`%%' 指定用ã®ãƒ•ィールド幅ã¯ç„¡è¦–ã•れã¾ã™" -#: builtin.c:850 +#: builtin.c:855 #, c-format msgid "field width and precision are ignored for `%%' specifier" msgstr "`%%' 指定用ã®ãƒ•ィールド幅ãŠã‚ˆã³ç²¾åº¦ã¯ç„¡è¦–ã•れã¾ã™" -#: builtin.c:901 +#: builtin.c:906 msgid "fatal: `$' is not permitted in awk formats" msgstr "致命的: `$' 㯠awk å½¢å¼å†…ã§ã¯è¨±å¯ã•れã¦ã„ã¾ã›ã‚“" -#: builtin.c:910 +#: builtin.c:915 msgid "fatal: arg count with `$' must be > 0" msgstr "致命的: `$' ã§æŒ‡å®šã™ã‚‹å¼•æ•°ã®ç•ªå·ã¯æ­£ã§ãªã‘れã°ã„ã‘ã¾ã›ã‚“" -#: builtin.c:914 +#: builtin.c:919 #, c-format msgid "fatal: arg count %ld greater than total number of supplied arguments" msgstr "致命的: 引数ã®ç•ªå· %ld ã¯å¼•æ•°ã¨ã—ã¦ä¸Žãˆã‚‰ã‚ŒãŸæ•°ã‚ˆã‚Šå¤§ãã„ã§ã™" -#: builtin.c:918 +#: builtin.c:923 msgid "fatal: `$' not permitted after period in format" msgstr "致命的: `$' ã¯æ›¸å¼æŒ‡å®šå†…ã®ãƒ”リオド `.' ã®å¾Œã«ä½¿ç”¨ã§ãã¾ã›ã‚“" -#: builtin.c:934 +#: builtin.c:939 msgid "fatal: no `$' supplied for positional field width or precision" msgstr "致命的: フィールド幅ã€ã¾ãŸã¯ç²¾åº¦ã®æŒ‡å®šå­ã« `$' ãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã›ã‚“" -#: builtin.c:1006 +#: builtin.c:1009 msgid "`l' is meaningless in awk formats; ignored" msgstr "awk ã®æ›¸å¼æŒ‡å®šã§ã¯ `l' ã¯ç„¡æ„味ã§ã™ã€‚無視ã—ã¾ã™" -#: builtin.c:1010 +#: builtin.c:1013 msgid "fatal: `l' is not permitted in POSIX awk formats" msgstr "致命的: POSIX awk 書å¼å†…ã§ã¯ `l' ã¯è¨±å¯ã•れã¦ã„ã¾ã›ã‚“" -#: builtin.c:1023 +#: builtin.c:1026 msgid "`L' is meaningless in awk formats; ignored" msgstr "awk ã®æ›¸å¼æŒ‡å®šã§ã¯ `L' ã¯ç„¡æ„味ã§ã™ã€‚無視ã—ã¾ã™ã€‚" -#: builtin.c:1027 +#: builtin.c:1030 msgid "fatal: `L' is not permitted in POSIX awk formats" msgstr "致命的: POSIX awk 書å¼å†…ã§ã¯ `L' ã¯è¨±å¯ã•れã¦ã„ã¾ã›ã‚“" -#: builtin.c:1040 +#: builtin.c:1043 msgid "`h' is meaningless in awk formats; ignored" msgstr "awk ã®æ›¸å¼æŒ‡å®šã§ã¯ `h' ã¯ç„¡æ„味ã§ã™ã€‚無視ã—ã¾ã™ã€‚" -#: builtin.c:1044 +#: builtin.c:1047 msgid "fatal: `h' is not permitted in POSIX awk formats" msgstr "致命的: POSIX awk 書å¼å†…ã§ã¯ `h' ã¯è¨±å¯ã•れã¦ã„ã¾ã›ã‚“" -#: builtin.c:1439 +#: builtin.c:1463 #, c-format msgid "[s]printf: value %g is out of range for `%%%c' format" msgstr "[s]printf: 値 %g ã¯æ›¸å¼ `%%%c' ã®ç¯„囲外ã§ã™" -#: builtin.c:1537 +#: builtin.c:1561 #, c-format msgid "ignoring unknown format specifier character `%c': no argument converted" msgstr "䏿˜Žãªæ›¸å¼æŒ‡å®šæ–‡å­— `%c' を無視ã—ã¦ã„ã¾ã™: 変æ›ã•れる引数ã¯ã‚りã¾ã›ã‚“" -#: builtin.c:1542 +#: builtin.c:1566 msgid "fatal: not enough arguments to satisfy format string" msgstr "致命的: æ›¸å¼æ–‡å­—列を満ãŸã™ååˆ†ãªæ•°ã®å¼•æ•°ãŒã‚りã¾ã›ã‚“" -#: builtin.c:1544 +#: builtin.c:1568 msgid "^ ran out for this one" msgstr "^ ã“ã“ã‹ã‚‰è¶³ã‚Šã¾ã›ã‚“" -#: builtin.c:1551 +#: builtin.c:1575 msgid "[s]printf: format specifier does not have control letter" msgstr "[s]printf: æ›¸å¼æŒ‡å®šå­ã«åˆ¶å¾¡æ–‡å­—ãŒã‚りã¾ã›ã‚“" -#: builtin.c:1554 +#: builtin.c:1578 msgid "too many arguments supplied for format string" msgstr "æ›¸å¼æ–‡å­—列ã«ä¸Žãˆã‚‰ã‚Œã¦ã„る引数ãŒå¤šã™ãŽã¾ã™" -#: builtin.c:1610 +#: builtin.c:1634 #, fuzzy msgid "sprintf: no arguments" msgstr "printf: 引数ãŒã‚りã¾ã›ã‚“" -#: builtin.c:1633 builtin.c:1644 +#: builtin.c:1657 builtin.c:1668 msgid "printf: no arguments" msgstr "printf: 引数ãŒã‚りã¾ã›ã‚“" -#: builtin.c:1687 +#: builtin.c:1711 msgid "sqrt: received non-numeric argument" msgstr "sqrt: 数値ã§ã¯ç„¡ã„引数をå—ã‘å–りã¾ã—ãŸ" -#: builtin.c:1691 +#: builtin.c:1715 #, c-format msgid "sqrt: called with negative argument %g" msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れã¾ã—ãŸ" -#: builtin.c:1722 +#: builtin.c:1746 #, c-format msgid "substr: length %g is not >= 1" msgstr "substr: é•·ã• %g ㌠1 以上ã§ã¯ã‚りã¾ã›ã‚“" -#: builtin.c:1724 +#: builtin.c:1748 #, c-format msgid "substr: length %g is not >= 0" msgstr "substr: é•·ã• %g ㌠0 以上ã§ã¯ã‚りã¾ã›ã‚“" -#: builtin.c:1731 +#: builtin.c:1755 #, c-format msgid "substr: non-integer length %g will be truncated" msgstr "substr: 文字数 %g ã®å°æ•°ç‚¹ä»¥ä¸‹ã¯åˆ‡ã‚Šæ¨ã¦ã¾ã™ã€‚" -#: builtin.c:1736 +#: builtin.c:1760 #, c-format msgid "substr: length %g too big for string indexing, truncating to %g" msgstr "substr: 文字数 %g ã¯æœ€å¤§å€¤ã‚’è¶…ãˆã¦ã„ã¾ã™ã€‚%g を使ã„ã¾ã™ã€‚" -#: builtin.c:1748 +#: builtin.c:1772 #, c-format msgid "substr: start index %g is invalid, using 1" msgstr "substr: 開始インデックス %g ãŒç„¡åйã§ã™ã€‚1を使用ã—ã¾ã™" -#: builtin.c:1753 +#: builtin.c:1777 #, c-format msgid "substr: non-integer start index %g will be truncated" msgstr "substr: 開始インデックス %g ãŒéžæ•´æ•°ã®ãŸã‚ã€å€¤ã¯åˆ‡ã‚Šæ¨ã¦ã‚‰ã‚Œã¾ã™" -#: builtin.c:1778 +#: builtin.c:1802 msgid "substr: source string is zero length" msgstr "substr: 文字列ã®é•·ã•ãŒã‚¼ãƒ­ã§ã™ã€‚" -#: builtin.c:1794 +#: builtin.c:1818 #, c-format msgid "substr: start index %g is past end of string" msgstr "substr: 開始インデックス %g ãŒæ–‡å­—列終端ã®å¾Œã«ã‚りã¾ã™" -#: builtin.c:1802 +#: builtin.c:1826 #, c-format msgid "" "substr: length %g at start index %g exceeds length of first argument (%lu)" @@ -738,189 +748,189 @@ msgstr "" "substr: 開始インデックス %2$g ã‹ã‚‰ã®é•·ã• %1$g ã¯ç¬¬ä¸€å¼•æ•°ã®é•·ã•ã‚’è¶…ãˆã¦ã„ã¾ã™ " "(%3$lu)" -#: builtin.c:1876 +#: builtin.c:1900 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" msgstr "strftime: PROCINFO[\"strftime\"] ã®æ›¸å¼ã®å€¤ã¯æ•°å€¤åž‹ã§ã™" -#: builtin.c:1899 +#: builtin.c:1923 msgid "strftime: received non-numeric second argument" msgstr "strftime: éžæ•°å€¤ã®ç¬¬äºŒå¼•æ•°ã‚’å—ã‘å–りã¾ã—ãŸ" -#: builtin.c:1903 +#: builtin.c:1927 msgid "strftime: second argument less than 0 or too big for time_t" msgstr "" -#: builtin.c:1910 +#: builtin.c:1934 msgid "strftime: received non-string first argument" msgstr "strftime: éžæ–‡å­—列ã®ç¬¬ä¸€å¼•æ•°ã‚’å—ã‘å–りã¾ã—ãŸ" -#: builtin.c:1917 +#: builtin.c:1941 msgid "strftime: received empty format string" msgstr "strftime: ç©ºã®æ›¸å¼æ–‡å­—列をå—ã‘å–りã¾ã—ãŸ" -#: builtin.c:1983 +#: builtin.c:2007 msgid "mktime: received non-string argument" msgstr "mktime: éžæ–‡å­—列引数をå—ã‘å–りã¾ã—ãŸ" -#: builtin.c:2000 +#: builtin.c:2024 msgid "mktime: at least one of the values is out of the default range" msgstr "mktime: 一ã¤ä»¥ä¸Šã®å€¤ãŒãƒ‡ãƒ•ォルトã®ç¯„囲を超ãˆã¦ã„ã¾ã™" -#: builtin.c:2035 +#: builtin.c:2059 msgid "'system' function not allowed in sandbox mode" msgstr "サンドボックスモードã§ã¯ 'system' 関数ã¯è¨±å¯ã•れã¦ã„ã¾ã›ã‚“" -#: builtin.c:2040 +#: builtin.c:2064 msgid "system: received non-string argument" msgstr "system: 文字列ã§ã¯ç„¡ã„引数をå—ã‘å–りã¾ã—ãŸ" -#: builtin.c:2160 +#: builtin.c:2184 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "åˆæœŸåŒ–ã•れã¦ã„ãªã„フィールド `$%d' ã¸ã®å‚ç…§ã§ã™" -#: builtin.c:2247 +#: builtin.c:2271 msgid "tolower: received non-string argument" msgstr "tolower: éžæ–‡å­—列引数をå—ã‘å–りã¾ã—ãŸ" -#: builtin.c:2281 +#: builtin.c:2305 msgid "toupper: received non-string argument" msgstr "toupper: éžæ–‡å­—列引数をå—ã‘å–りã¾ã—ãŸ" -#: builtin.c:2317 mpfr.c:672 +#: builtin.c:2341 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2: éžæ•°å€¤ã®ç¬¬ä¸€å¼•æ•°ã‚’å—ã‘å–りã¾ã—ãŸ" -#: builtin.c:2319 mpfr.c:674 +#: builtin.c:2343 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2: éžæ•°å€¤ã®ç¬¬äºŒå¼•æ•°ã‚’å—ã‘å–りã¾ã—ãŸ" -#: builtin.c:2338 +#: builtin.c:2362 msgid "sin: received non-numeric argument" msgstr "sin: éžæ•°å€¤ã®å¼•æ•°ã‚’å—ã‘å–りã¾ã—ãŸ" -#: builtin.c:2354 +#: builtin.c:2378 msgid "cos: received non-numeric argument" msgstr "cos: éžæ•°å€¤ã®å¼•æ•°ã‚’å—ã‘å–りã¾ã—ãŸ" -#: builtin.c:2407 mpfr.c:1156 +#: builtin.c:2431 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand: éžæ•°å€¤ã®å¼•æ•°ã‚’å—ã‘å–りã¾ã—ãŸ" -#: builtin.c:2438 +#: builtin.c:2462 msgid "match: third argument is not an array" msgstr "match: 第三引数ãŒé…列ã§ã¯ã‚りã¾ã›ã‚“" -#: builtin.c:2710 +#: builtin.c:2734 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub: 第三引数㌠0 ã§ã™ã€‚1 を代ã‚りã«ä½¿ç”¨ã—ã¾ã™" -#: builtin.c:3003 +#: builtin.c:3030 msgid "lshift: received non-numeric first argument" msgstr "lshift: éžæ•°å€¤ã®ç¬¬ä¸€å¼•æ•°ã‚’å—ã‘å–りã¾ã—ãŸ" -#: builtin.c:3005 +#: builtin.c:3032 msgid "lshift: received non-numeric second argument" msgstr "lshift: éžæ•°å€¤ã®ç¬¬äºŒå¼•æ•°ã‚’å—ã‘å–りã¾ã—ãŸ" -#: builtin.c:3011 +#: builtin.c:3038 #, fuzzy, c-format msgid "lshift(%f, %f): negative values will give strange results" msgstr "lshift(%lf, %lf): è² ã®æ•°å€¤ã‚’使用ã™ã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™" -#: builtin.c:3013 +#: builtin.c:3040 #, fuzzy, c-format msgid "lshift(%f, %f): fractional values will be truncated" msgstr "lshift(%lf, %lf): å°æ•°ç‚¹ä»¥ä¸‹ã¯åˆ‡ã‚Šæ¨ã¦ã‚‰ã‚Œã¾ã™" -#: builtin.c:3015 +#: builtin.c:3042 #, fuzzy, c-format msgid "lshift(%f, %f): too large shift value will give strange results" msgstr "lshift(%lf, %lf): シフト値ãŒå¤§ãéŽãŽã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™" -#: builtin.c:3040 +#: builtin.c:3067 msgid "rshift: received non-numeric first argument" msgstr "rshift: éžæ•°å€¤ã®ç¬¬ä¸€å¼•æ•°ã‚’å—ã‘å–りã¾ã—ãŸ" -#: builtin.c:3042 +#: builtin.c:3069 msgid "rshift: received non-numeric second argument" msgstr "rshift: éžæ•°å€¤ã®ç¬¬äºŒå¼•æ•°ã‚’å—ã‘å–りã¾ã—ãŸ" -#: builtin.c:3048 +#: builtin.c:3075 #, fuzzy, c-format msgid "rshift(%f, %f): negative values will give strange results" msgstr "rshift(%lf, %lf): è² ã®æ•°å€¤ã‚’使用ã™ã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™" -#: builtin.c:3050 +#: builtin.c:3077 #, fuzzy, c-format msgid "rshift(%f, %f): fractional values will be truncated" msgstr "rshift(%lf, %lf): å°æ•°ç‚¹ä»¥ä¸‹ã¯åˆ‡ã‚Šæ¨ã¦ã‚‰ã‚Œã¾ã™" -#: builtin.c:3052 +#: builtin.c:3079 #, fuzzy, c-format msgid "rshift(%f, %f): too large shift value will give strange results" msgstr "rshift(%lf, %lf): シフト値ãŒå¤§ãéŽãŽã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™" -#: builtin.c:3077 mpfr.c:968 +#: builtin.c:3104 mpfr.c:968 #, fuzzy msgid "and: called with less than two arguments" msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れã¾ã—ãŸ" -#: builtin.c:3082 +#: builtin.c:3109 #, fuzzy, c-format msgid "and: argument %d is non-numeric" msgstr "exp: 引数 %g ãŒç¯„囲外ã§ã™" -#: builtin.c:3086 +#: builtin.c:3113 #, fuzzy, c-format msgid "and: argument %d negative value %g will give strange results" msgstr "and(%lf, %lf): è² ã®æ•°å€¤ã‚’使用ã™ã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™" -#: builtin.c:3109 mpfr.c:1000 +#: builtin.c:3136 mpfr.c:1000 #, fuzzy msgid "or: called with less than two arguments" msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れã¾ã—ãŸ" -#: builtin.c:3114 +#: builtin.c:3141 #, fuzzy, c-format msgid "or: argument %d is non-numeric" msgstr "exp: 引数 %g ãŒç¯„囲外ã§ã™" -#: builtin.c:3118 +#: builtin.c:3145 #, fuzzy, c-format msgid "or: argument %d negative value %g will give strange results" msgstr "compl(%lf): è² ã®æ•°å€¤ã‚’使用ã™ã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™" -#: builtin.c:3140 mpfr.c:1031 +#: builtin.c:3167 mpfr.c:1031 #, fuzzy msgid "xor: called with less than two arguments" msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れã¾ã—ãŸ" -#: builtin.c:3146 +#: builtin.c:3173 #, fuzzy, c-format msgid "xor: argument %d is non-numeric" msgstr "exp: 引数 %g ãŒç¯„囲外ã§ã™" -#: builtin.c:3150 +#: builtin.c:3177 #, fuzzy, c-format msgid "xor: argument %d negative value %g will give strange results" msgstr "xor(%lf, %lf): è² ã®æ•°å€¤ã‚’使用ã™ã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™" -#: builtin.c:3175 mpfr.c:787 +#: builtin.c:3202 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl: éžæ•°å€¤ã®å¼•æ•°ã‚’å—ã‘å–りã¾ã—ãŸ" -#: builtin.c:3181 +#: builtin.c:3208 #, fuzzy, c-format msgid "compl(%f): negative value will give strange results" msgstr "compl(%lf): è² ã®æ•°å€¤ã‚’使用ã™ã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™" -#: builtin.c:3183 +#: builtin.c:3210 #, fuzzy, c-format msgid "compl(%f): fractional value will be truncated" msgstr "compl(%lf): å°æ•°ç‚¹ä»¥ä¸‹ã¯åˆ‡ã‚Šæ¨ã¦ã‚‰ã‚Œã¾ã™" -#: builtin.c:3352 +#: builtin.c:3379 #, c-format msgid "dcgettext: `%s' is not a valid locale category" msgstr "dcgettext: `%s' ã¯ç„¡åйãªãƒ­ã‚±ãƒ¼ãƒ«åŒºåˆ†ã§ã™" @@ -1044,8 +1054,8 @@ msgstr "" #: command.y:823 msgid "" -"commands [num] - starts a list of commands to be executed at a breakpoint" -"(watchpoint) hit." +"commands [num] - starts a list of commands to be executed at a " +"breakpoint(watchpoint) hit." msgstr "" #: command.y:825 @@ -1202,7 +1212,7 @@ msgstr "" msgid "watch var - set a watchpoint for a variable." msgstr "" -#: command.y:1011 debug.c:395 msg.c:128 +#: command.y:1011 debug.c:401 msg.c:135 #, c-format msgid "error: " msgstr "エラー: " @@ -1242,557 +1252,557 @@ msgstr "無効ãªç…§åˆæ–‡å­—ã§ã™" msgid "undefined command: %s\n" msgstr "" -#: debug.c:246 +#: debug.c:252 msgid "set or show the number of lines to keep in history file." msgstr "" -#: debug.c:248 +#: debug.c:254 msgid "set or show the list command window size." msgstr "" -#: debug.c:250 +#: debug.c:256 msgid "set or show gawk output file." msgstr "" -#: debug.c:252 +#: debug.c:258 msgid "set or show debugger prompt." msgstr "" -#: debug.c:254 +#: debug.c:260 msgid "(un)set or show saving of command history (value=on|off)." msgstr "" -#: debug.c:256 +#: debug.c:262 msgid "(un)set or show saving of options (value=on|off)." msgstr "" -#: debug.c:258 +#: debug.c:264 msgid "(un)set or show instruction tracing (value=on|off)." msgstr "" -#: debug.c:339 +#: debug.c:345 msgid "program not running." msgstr "" -#: debug.c:442 debug.c:597 +#: debug.c:448 debug.c:606 #, fuzzy, c-format msgid "can't read source file `%s' (%s)" msgstr "ソースファイル `%s' を読ã¿è¾¼ã‚ã¾ã›ã‚“ (%s)" -#: debug.c:447 +#: debug.c:453 #, fuzzy, c-format msgid "source file `%s' is empty.\n" msgstr "ソースファイル `%s' ã¯ç©ºã§ã™" -#: debug.c:474 +#: debug.c:480 msgid "no current source file." msgstr "" -#: debug.c:499 +#: debug.c:505 #, fuzzy, c-format msgid "cannot find source file named `%s' (%s)" msgstr "ソースファイル `%s' を読ã¿è¾¼ã‚ã¾ã›ã‚“ (%s)" -#: debug.c:523 +#: debug.c:529 #, c-format msgid "WARNING: source file `%s' modified since program compilation.\n" msgstr "" -#: debug.c:542 +#: debug.c:551 #, c-format msgid "line number %d out of range; `%s' has %d lines" msgstr "" -#: debug.c:602 +#: debug.c:611 #, fuzzy, c-format msgid "unexpected eof while reading file `%s', line %d" msgstr "予期ã—ãªã„改行ã¾ãŸã¯æ–‡å­—列終端ã§ã™" -#: debug.c:611 +#: debug.c:620 #, c-format msgid "source file `%s' modified since start of program execution" msgstr "" -#: debug.c:723 +#: debug.c:732 #, fuzzy, c-format msgid "Current source file: %s\n" msgstr "ソースファイル `%s' ã¯æ—¢ã«èª­ã¿è¾¼ã¾ã‚Œã¦ã„ã¾ã™" -#: debug.c:724 +#: debug.c:733 #, c-format msgid "Number of lines: %d\n" msgstr "" -#: debug.c:731 +#: debug.c:740 #, c-format msgid "Source file (lines): %s (%d)\n" msgstr "" -#: debug.c:745 +#: debug.c:754 msgid "" "Number Disp Enabled Location\n" "\n" msgstr "" -#: debug.c:756 +#: debug.c:765 #, c-format msgid "\tno of hits = %ld\n" msgstr "" -#: debug.c:758 +#: debug.c:767 #, c-format msgid "\tignore next %ld hit(s)\n" msgstr "" -#: debug.c:760 debug.c:900 +#: debug.c:769 debug.c:909 #, c-format msgid "\tstop condition: %s\n" msgstr "" -#: debug.c:762 debug.c:902 +#: debug.c:771 debug.c:911 msgid "\tcommands:\n" msgstr "" -#: debug.c:784 +#: debug.c:793 #, c-format msgid "Current frame: " msgstr "" -#: debug.c:787 +#: debug.c:796 #, c-format msgid "Called by frame: " msgstr "" -#: debug.c:791 +#: debug.c:800 #, c-format msgid "Caller of frame: " msgstr "" -#: debug.c:809 +#: debug.c:818 #, c-format msgid "None in main().\n" msgstr "" -#: debug.c:839 +#: debug.c:848 #, fuzzy msgid "No arguments.\n" msgstr "printf: 引数ãŒã‚りã¾ã›ã‚“" -#: debug.c:840 +#: debug.c:849 msgid "No locals.\n" msgstr "" -#: debug.c:848 +#: debug.c:857 msgid "" "All defined variables:\n" "\n" msgstr "" -#: debug.c:858 +#: debug.c:867 msgid "" "All defined functions:\n" "\n" msgstr "" -#: debug.c:877 +#: debug.c:886 msgid "" "Auto-display variables:\n" "\n" msgstr "" -#: debug.c:880 +#: debug.c:889 msgid "" "Watch variables:\n" "\n" msgstr "" -#: debug.c:1020 +#: debug.c:1029 #, fuzzy, c-format msgid "no symbol `%s' in current context\n" msgstr "`next' 㯠`%s' ã‹ã‚‰å‘¼ã³å‡ºã™ã“ã¨ãŒå‡ºæ¥ã¾ã›ã‚“" -#: debug.c:1032 debug.c:1418 +#: debug.c:1041 debug.c:1427 #, fuzzy, c-format msgid "`%s' is not an array\n" msgstr "`%s' ã¯ä¸æ­£ãªå¤‰æ•°åã§ã™" -#: debug.c:1046 +#: debug.c:1055 #, fuzzy, c-format msgid "$%ld = uninitialized field\n" msgstr "åˆæœŸåŒ–ã•れã¦ã„ãªã„フィールド `$%d' ã¸ã®å‚ç…§ã§ã™" -#: debug.c:1067 +#: debug.c:1076 #, fuzzy, c-format msgid "array `%s' is empty\n" msgstr "データファイル `%s' ã¯ç©ºã§ã™ã€‚" -#: debug.c:1110 debug.c:1162 +#: debug.c:1119 debug.c:1171 #, fuzzy, c-format msgid "[\"%s\"] not in array `%s'\n" msgstr "delete: é…列 `%2$s' 内ã«ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ `%1$s' ãŒã‚りã¾ã›ã‚“" -#: debug.c:1166 +#: debug.c:1175 #, c-format msgid "`%s[\"%s\"]' is not an array\n" msgstr "" -#: debug.c:1227 debug.c:4949 +#: debug.c:1236 debug.c:4964 #, fuzzy, c-format msgid "`%s' is not a scalar variable" msgstr "`%s' ã¯ä¸æ­£ãªå¤‰æ•°åã§ã™" -#: debug.c:1249 debug.c:4979 +#: debug.c:1258 debug.c:4994 #, fuzzy, c-format msgid "attempt to use array `%s[\"%s\"]' in a scalar context" msgstr "スカラーコンテキスト内ã§é…列 `%s[\"%.*s\"]' ã®ä½¿ç”¨ã®è©¦ã¿ã§ã™" -#: debug.c:1271 debug.c:4990 +#: debug.c:1280 debug.c:5005 #, fuzzy, c-format msgid "attempt to use scalar `%s[\"%s\"]' as array" msgstr "スカラー `%s[\"%.*s\"]' ã‚’é…列ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹è©¦ã¿ã§ã™" -#: debug.c:1414 +#: debug.c:1423 #, fuzzy, c-format msgid "`%s' is a function" msgstr "`%s' ã¯é–¢æ•°åã¨ã—ã¦ã¯ç„¡åйã§ã™" -#: debug.c:1456 +#: debug.c:1465 #, c-format msgid "watchpoint %d is unconditional\n" msgstr "" -#: debug.c:1490 +#: debug.c:1499 #, c-format msgid "No display item numbered %ld" msgstr "" -#: debug.c:1493 +#: debug.c:1502 #, c-format msgid "No watch item numbered %ld" msgstr "" -#: debug.c:1519 +#: debug.c:1528 #, fuzzy, c-format msgid "%d: [\"%s\"] not in array `%s'\n" msgstr "delete: é…列 `%2$s' 内ã«ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ `%1$s' ãŒã‚りã¾ã›ã‚“" -#: debug.c:1758 +#: debug.c:1767 #, fuzzy msgid "attempt to use scalar value as array" msgstr "スカラー値をé…列ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹è©¦ã¿ã§ã™" -#: debug.c:1847 +#: debug.c:1856 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" msgstr "" -#: debug.c:1858 +#: debug.c:1867 #, c-format msgid "Display %d deleted because parameter is out of scope.\n" msgstr "" -#: debug.c:1891 +#: debug.c:1900 #, c-format msgid " in file `%s', line %d\n" msgstr "" -#: debug.c:1912 +#: debug.c:1921 #, c-format msgid " at `%s':%d" msgstr "" -#: debug.c:1928 debug.c:1991 +#: debug.c:1937 debug.c:2000 #, c-format msgid "#%ld\tin " msgstr "" -#: debug.c:1965 +#: debug.c:1974 #, c-format msgid "More stack frames follow ...\n" msgstr "" -#: debug.c:2008 +#: debug.c:2017 #, fuzzy msgid "invalid frame number" msgstr "無効ãªç¯„囲終了ã§ã™" -#: debug.c:2180 +#: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" msgstr "" -#: debug.c:2187 +#: debug.c:2207 #, c-format msgid "Note: breakpoint %d (enabled), also set at %s:%d" msgstr "" -#: debug.c:2194 +#: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" msgstr "" -#: debug.c:2201 +#: debug.c:2221 #, c-format msgid "Note: breakpoint %d (disabled), also set at %s:%d" msgstr "" -#: debug.c:2218 +#: debug.c:2238 #, c-format msgid "Breakpoint %d set at file `%s', line %d\n" msgstr "" -#: debug.c:2320 +#: debug.c:2340 #, c-format msgid "Can't set breakpoint in file `%s'\n" msgstr "" -#: debug.c:2349 debug.c:2472 debug.c:3330 +#: debug.c:2369 debug.c:2492 debug.c:3350 #, fuzzy, c-format msgid "line number %d in file `%s' out of range" msgstr "exp: 引数 %g ãŒç¯„囲外ã§ã™" -#: debug.c:2353 +#: debug.c:2373 #, c-format msgid "Can't find rule!!!\n" msgstr "" -#: debug.c:2355 +#: debug.c:2375 #, c-format msgid "Can't set breakpoint at `%s':%d\n" msgstr "" -#: debug.c:2367 +#: debug.c:2387 #, c-format msgid "Can't set breakpoint in function `%s'\n" msgstr "" -#: debug.c:2383 +#: debug.c:2403 #, c-format msgid "breakpoint %d set at file `%s', line %d is unconditional\n" msgstr "" -#: debug.c:2488 debug.c:2510 +#: debug.c:2508 debug.c:2530 #, c-format msgid "Deleted breakpoint %d" msgstr "" -#: debug.c:2494 +#: debug.c:2514 #, c-format msgid "No breakpoint(s) at entry to function `%s'\n" msgstr "" -#: debug.c:2521 +#: debug.c:2541 #, fuzzy, c-format msgid "No breakpoint at file `%s', line #%d\n" msgstr "入力ファイル `%s' を読ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ: %s" -#: debug.c:2576 debug.c:2617 debug.c:2637 debug.c:2680 +#: debug.c:2596 debug.c:2637 debug.c:2657 debug.c:2700 msgid "invalid breakpoint number" msgstr "" -#: debug.c:2592 +#: debug.c:2612 msgid "Delete all breakpoints? (y or n) " msgstr "" -#: debug.c:2593 debug.c:2903 debug.c:2956 +#: debug.c:2613 debug.c:2923 debug.c:2976 msgid "y" msgstr "" -#: debug.c:2642 +#: debug.c:2662 #, c-format msgid "Will ignore next %ld crossing(s) of breakpoint %d.\n" msgstr "" -#: debug.c:2646 +#: debug.c:2666 #, c-format msgid "Will stop next time breakpoint %d is reached.\n" msgstr "" -#: debug.c:2763 +#: debug.c:2783 #, c-format msgid "Can only debug programs provided with the `-f' option.\n" msgstr "" -#: debug.c:2888 +#: debug.c:2908 #, c-format msgid "Failed to restart debugger" msgstr "" -#: debug.c:2902 +#: debug.c:2922 msgid "Program already running. Restart from beginning (y/n)? " msgstr "" -#: debug.c:2906 +#: debug.c:2926 #, c-format msgid "Program not restarted\n" msgstr "" -#: debug.c:2916 +#: debug.c:2936 #, c-format msgid "error: cannot restart, operation not allowed\n" msgstr "" -#: debug.c:2922 +#: debug.c:2942 #, c-format msgid "error (%s): cannot restart, ignoring rest of the commands\n" msgstr "" -#: debug.c:2930 +#: debug.c:2950 #, c-format msgid "Starting program: \n" msgstr "" -#: debug.c:2939 +#: debug.c:2959 #, c-format msgid "Program exited %s with exit value: %d\n" msgstr "" -#: debug.c:2955 +#: debug.c:2975 msgid "The program is running. Exit anyway (y/n)? " msgstr "" -#: debug.c:2990 +#: debug.c:3010 #, c-format msgid "Not stopped at any breakpoint; argument ignored.\n" msgstr "" -#: debug.c:2995 +#: debug.c:3015 #, c-format msgid "invalid breakpoint number %d." msgstr "" -#: debug.c:3000 +#: debug.c:3020 #, c-format msgid "Will ignore next %ld crossings of breakpoint %d.\n" msgstr "" -#: debug.c:3187 +#: debug.c:3207 #, c-format msgid "'finish' not meaningful in the outermost frame main()\n" msgstr "" -#: debug.c:3192 +#: debug.c:3212 #, c-format msgid "Run till return from " msgstr "" -#: debug.c:3235 +#: debug.c:3255 #, c-format msgid "'return' not meaningful in the outermost frame main()\n" msgstr "" -#: debug.c:3349 +#: debug.c:3369 #, c-format msgid "Can't find specified location in function `%s'\n" msgstr "" -#: debug.c:3357 +#: debug.c:3377 #, fuzzy, c-format msgid "invalid source line %d in file `%s'" msgstr "ソースファイル `%s' ã¯æ—¢ã«èª­ã¿è¾¼ã¾ã‚Œã¦ã„ã¾ã™" -#: debug.c:3372 +#: debug.c:3392 #, c-format msgid "Can't find specified location %d in file `%s'\n" msgstr "" -#: debug.c:3404 +#: debug.c:3424 #, fuzzy, c-format msgid "element not in array\n" msgstr "delete: é…列 `%2$s' 内ã«ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ `%1$s' ãŒã‚りã¾ã›ã‚“" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "untyped variable\n" msgstr "" -#: debug.c:3446 +#: debug.c:3466 #, c-format msgid "Stopping in %s ...\n" msgstr "" -#: debug.c:3523 +#: debug.c:3543 #, c-format msgid "'finish' not meaningful with non-local jump '%s'\n" msgstr "" -#: debug.c:3530 +#: debug.c:3550 #, c-format msgid "'until' not meaningful with non-local jump '%s'\n" msgstr "" -#: debug.c:4165 +#: debug.c:4185 msgid "\t------[Enter] to continue or q [Enter] to quit------" msgstr "" -#: debug.c:4166 +#: debug.c:4186 msgid "q" msgstr "" -#: debug.c:4986 +#: debug.c:5001 #, fuzzy, c-format msgid "[\"%s\"] not in array `%s'" msgstr "delete: é…列 `%2$s' 内ã«ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ `%1$s' ãŒã‚りã¾ã›ã‚“" -#: debug.c:5192 +#: debug.c:5207 #, c-format msgid "sending output to stdout\n" msgstr "" -#: debug.c:5232 +#: debug.c:5247 msgid "invalid number" msgstr "" -#: debug.c:5366 +#: debug.c:5381 #, fuzzy, c-format msgid "`%s' not allowed in current context; statement ignored" msgstr "`next' 㯠`%s' ã‹ã‚‰å‘¼ã³å‡ºã™ã“ã¨ãŒå‡ºæ¥ã¾ã›ã‚“" -#: debug.c:5374 +#: debug.c:5389 #, fuzzy msgid "`return' not allowed in current context; statement ignored" msgstr "`next' 㯠`%s' ã‹ã‚‰å‘¼ã³å‡ºã™ã“ã¨ãŒå‡ºæ¥ã¾ã›ã‚“" -#: debug.c:5575 +#: debug.c:5590 #, c-format msgid "No symbol `%s' in current context" msgstr "" -#: 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:1192 +#: 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 msgid "unbalanced [" msgstr "" -#: dfa.c:1052 +#: dfa.c:1174 #, fuzzy msgid "invalid character class" msgstr "ç„¡åŠ¹ãªæ–‡å­—クラスåã§ã™" -#: dfa.c:1229 +#: dfa.c:1316 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "" -#: dfa.c:1281 +#: dfa.c:1366 msgid "unfinished \\ escape" msgstr "" -#: dfa.c:1428 regcomp.c:161 +#: dfa.c:1513 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "\\{\\} ã®ä¸­èº«ãŒç„¡åйã§ã™" -#: dfa.c:1431 regcomp.c:176 +#: dfa.c:1516 regcomp.c:176 msgid "Regular expression too big" msgstr "æ­£è¦è¡¨ç¾ãŒå¤§ãã™ãŽã¾ã™" -#: dfa.c:1816 +#: dfa.c:1936 msgid "unbalanced (" msgstr "" -#: dfa.c:1943 +#: dfa.c:2062 msgid "no syntax specified" msgstr "" -#: dfa.c:1951 +#: dfa.c:2070 msgid "unbalanced )" msgstr "" @@ -1811,11 +1821,11 @@ msgstr "䏿˜Žãªã‚ªãƒšã‚³ãƒ¼ãƒ‰ %d ã§ã™" msgid "opcode %s not an operator or keyword" msgstr "オペコード %s ã¯æ¼”ç®—å­ã¾ãŸã¯äºˆç´„語ã§ã¯ã‚りã¾ã›ã‚“" -#: eval.c:471 +#: eval.c:472 msgid "buffer overflow in genflags2str" msgstr "genflags2str 内ã§ãƒãƒƒãƒ•ァオーãƒãƒ¼ãƒ•ローãŒç™ºç”Ÿã—ã¾ã—ãŸ" -#: eval.c:674 +#: eval.c:675 #, c-format msgid "" "\n" @@ -1826,71 +1836,71 @@ msgstr "" "\t# 呼出関数スタック:\n" "\n" -#: eval.c:703 +#: eval.c:704 msgid "`IGNORECASE' is a gawk extension" msgstr "`IGNORECASE' 㯠gawk æ‹¡å¼µã§ã™" -#: eval.c:735 +#: eval.c:736 msgid "`BINMODE' is a gawk extension" msgstr "`BINMODE' 㯠gawk æ‹¡å¼µã§ã™" -#: eval.c:793 +#: eval.c:794 #, c-format msgid "BINMODE value `%s' is invalid, treated as 3" msgstr "BINMODE 値 `%s' ã¯ç„¡åйã§ã™ã€‚代ã‚り㫠3 を使用ã—ã¾ã™" -#: eval.c:884 +#: eval.c:885 #, c-format msgid "bad `%sFMT' specification `%s'" msgstr "誤ã£ãŸ `%sFMT' 指定 `%s' ã§ã™" -#: eval.c:968 +#: eval.c:969 msgid "turning off `--lint' due to assignment to `LINT'" msgstr "`LINT' ã¸ã®ä»£å…¥ã«å¾“ã„ `--lint' を無効ã«ã—ã¾ã™" -#: eval.c:1146 +#: eval.c:1147 #, c-format msgid "reference to uninitialized argument `%s'" msgstr "åˆæœŸåŒ–ã•れã¦ã„ãªã„引数 `%s' ã¸ã®å‚ç…§ã§ã™" -#: eval.c:1147 +#: eval.c:1148 #, c-format msgid "reference to uninitialized variable `%s'" msgstr "åˆæœŸåŒ–ã•れã¦ã„ãªã„変数 `%s' ã¸ã®å‚ç…§ã§ã™" -#: eval.c:1165 +#: eval.c:1166 msgid "attempt to field reference from non-numeric value" msgstr "éžæ•°å€¤ã‚’使用ã—ãŸãƒ•イールドå‚ç…§ã®è©¦ã¿ã§ã™" -#: eval.c:1167 +#: eval.c:1168 msgid "attempt to field reference from null string" msgstr "NULL 文字列を使用ã—ã¦ãƒ•ィールドã®å‚照を試ã¿ã¦ã„ã¾ã™" -#: eval.c:1175 +#: eval.c:1176 #, c-format msgid "attempt to access field %ld" msgstr "フィールド %ld ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã®è©¦ã¿ã§ã™" -#: eval.c:1184 +#: eval.c:1185 #, c-format msgid "reference to uninitialized field `$%ld'" msgstr "åˆæœŸåŒ–ã•れã¦ã„ãªã„フィールド `$%ld' ã¸ã®å‚ç…§ã§ã™" -#: eval.c:1271 +#: eval.c:1272 #, c-format msgid "function `%s' called with more arguments than declared" msgstr "宣言ã•れã¦ã„る数より多ã„引数を使ã£ã¦é–¢æ•° `%s' を呼ã³å‡ºã—ã¾ã—ãŸ" -#: eval.c:1466 +#: eval.c:1473 #, c-format msgid "unwind_stack: unexpected type `%s'" msgstr "unwind_stack: 予期ã—ãªã„åž‹ `%s' ã§ã™" -#: eval.c:1562 +#: eval.c:1569 msgid "division by zero attempted in `/='" msgstr "`/=' 内ã§ã‚¼ãƒ­ã«ã‚ˆã‚‹é™¤ç®—ãŒè¡Œã‚れã¾ã—ãŸ" -#: eval.c:1569 +#: eval.c:1576 #, c-format msgid "division by zero attempted in `%%='" msgstr "`%%=' 内ã§ã‚¼ãƒ­ã«ã‚ˆã‚‹é™¤ç®—ãŒè¡Œã‚れã¾ã—ãŸ" @@ -1904,7 +1914,7 @@ msgstr "サンドボックスモード内ã§ã¯æ‹¡å¼µã¯è¨±å¯ã•れã¦ã„ã¾ã› msgid "-l / @load are gawk extensions" msgstr "@include 㯠gawk æ‹¡å¼µã§ã™" -#: ext.c:95 ext.c:177 +#: ext.c:95 msgid "load_ext: received NULL lib_name" msgstr "" @@ -1937,6 +1947,10 @@ msgstr "" msgid "`extension' is a gawk extension" msgstr "`extension' 㯠gawk æ‹¡å¼µã§ã™" +#: ext.c:177 +msgid "extension: received NULL lib_name" +msgstr "" + #: ext.c:180 #, fuzzy, c-format msgid "extension: cannot open library `%s' (%s)" @@ -1962,37 +1976,37 @@ msgstr "" msgid "make_builtin: missing function name" msgstr "extension: 関数åãŒã‚りã¾ã›ã‚“" -#: ext.c:238 +#: ext.c:236 #, fuzzy, c-format msgid "make_builtin: can't redefine function `%s'" msgstr "extension: 関数 `%s' ã‚’å†å®šç¾©ã§ãã¾ã›ã‚“" -#: ext.c:242 +#: ext.c:240 #, fuzzy, c-format msgid "make_builtin: function `%s' already defined" msgstr "extension: 関数 `%s' ã¯æ—¢ã«å®šç¾©ã•れã¦ã„ã¾ã™" -#: ext.c:246 +#: ext.c:244 #, fuzzy, c-format msgid "make_builtin: function name `%s' previously defined" msgstr "extension: 関数å `%s' ã¯å‰ã«å®šç¾©ã•れã¦ã„ã¾ã™" -#: ext.c:248 +#: ext.c:246 #, fuzzy, c-format msgid "make_builtin: can't use gawk built-in `%s' as function name" msgstr "extension: gawk ã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹ `%s' ã¯é–¢æ•°åã¨ã—ã¦ä½¿ç”¨å‡ºæ¥ã¾ã›ã‚“" -#: ext.c:251 ext.c:304 +#: ext.c:249 ext.c:304 #, c-format msgid "make_builtin: negative argument count for function `%s'" msgstr "make_builtin: 関数 `%s' ã®å¼•æ•°ã®æ•°ãŒè² ã§ã™" -#: ext.c:278 +#: ext.c:276 #, fuzzy msgid "extension: missing function name" msgstr "extension: 関数åãŒã‚りã¾ã›ã‚“" -#: ext.c:283 +#: ext.c:279 ext.c:283 #, fuzzy, c-format msgid "extension: illegal character `%c' in function name `%s'" msgstr "extension: 関数å `%2$s' ã®ä¸­ã§ä¸æ­£ãªæ–‡å­— `%1$c' ãŒä½¿ç”¨ã•れã¦ã„ã¾ã™" @@ -2017,153 +2031,158 @@ msgstr "関数å `%s' ã¯å‰ã«å®šç¾©ã•れã¦ã„ã¾ã™" msgid "extension: can't use gawk built-in `%s' as function name" msgstr "extension: gawk ã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹ `%s' ã¯é–¢æ•°åã¨ã—ã¦ä½¿ç”¨å‡ºæ¥ã¾ã›ã‚“" -#: ext.c:374 +#: ext.c:375 #, c-format msgid "function `%s' defined to take no more than %d argument(s)" msgstr "関数 `%s' ã«ä½¿ãˆã‚‹å¼•æ•°ã®æ•°ã¯ `%d' 以下ã¨å®šç¾©ã•れã¦ã„ã¾ã™" -#: ext.c:377 +#: ext.c:378 #, c-format msgid "function `%s': missing argument #%d" msgstr "関数 `%s': 引数 #%d ãŒã‚りã¾ã›ã‚“" -#: ext.c:394 +#: ext.c:395 #, c-format msgid "function `%s': argument #%d: attempt to use scalar as an array" msgstr "関数 `%s': 引数 #%d: スカラーをé…列ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹è©¦ã¿ã§ã™" -#: ext.c:398 +#: ext.c:399 #, c-format msgid "function `%s': argument #%d: attempt to use array as a scalar" msgstr "関数 `%s': 引数 #%d: é…列をスカラーã¨ã—ã¦ä½¿ç”¨ã™ã‚‹è©¦ã¿ã§ã™" -#: ext.c:412 +#: ext.c:413 msgid "dynamic loading of library not supported" msgstr "" -#: extension/filefuncs.c:97 +#: extension/filefuncs.c:159 #, fuzzy msgid "chdir: called with incorrect number of arguments, expecting 1" msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れã¾ã—ãŸ" -#: extension/filefuncs.c:343 +#: extension/filefuncs.c:439 #, c-format msgid "stat: unable to read symbolic link `%s'" msgstr "" -#: extension/filefuncs.c:376 +#: extension/filefuncs.c:472 #, fuzzy msgid "stat: called with wrong number of arguments" msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れã¾ã—ãŸ" -#: extension/filefuncs.c:383 +#: extension/filefuncs.c:479 #, fuzzy msgid "stat: bad parameters" msgstr "%s: 仮引数ã§ã™\n" -#: extension/filefuncs.c:437 +#: extension/filefuncs.c:533 #, fuzzy, c-format msgid "fts init: could not create variable %s" msgstr "index: 文字列ã§ã¯ç„¡ã„第二引数をå—ã‘å–りã¾ã—ãŸ" -#: extension/filefuncs.c:460 +#: extension/filefuncs.c:554 +#, fuzzy +msgid "fts is not supported on this system" +msgstr "å¤ã„ awk 㯠`%s' をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“" + +#: extension/filefuncs.c:573 msgid "fill_stat_element: could not create array" msgstr "" -#: extension/filefuncs.c:469 +#: extension/filefuncs.c:582 msgid "fill_stat_element: could not set element" msgstr "" -#: extension/filefuncs.c:484 +#: extension/filefuncs.c:597 #, fuzzy msgid "fill_path_element: could not set element" msgstr "index: 文字列ã§ã¯ç„¡ã„第二引数をå—ã‘å–りã¾ã—ãŸ" -#: extension/filefuncs.c:500 +#: extension/filefuncs.c:613 msgid "fill_error_element: could not set element" msgstr "" -#: extension/filefuncs.c:547 extension/filefuncs.c:594 +#: extension/filefuncs.c:660 extension/filefuncs.c:707 msgid "fts-process: could not create array" msgstr "" -#: extension/filefuncs.c:557 extension/filefuncs.c:604 -#: extension/filefuncs.c:622 +#: extension/filefuncs.c:670 extension/filefuncs.c:717 +#: extension/filefuncs.c:735 #, fuzzy msgid "fts-process: could not set element" msgstr "index: 文字列ã§ã¯ç„¡ã„第二引数をå—ã‘å–りã¾ã—ãŸ" -#: extension/filefuncs.c:671 +#: extension/filefuncs.c:784 #, fuzzy msgid "fts: called with incorrect number of arguments, expecting 3" msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れã¾ã—ãŸ" -#: extension/filefuncs.c:674 +#: extension/filefuncs.c:787 #, fuzzy msgid "fts: bad first parameter" msgstr "%s: 仮引数ã§ã™\n" -#: extension/filefuncs.c:680 +#: extension/filefuncs.c:793 #, fuzzy msgid "fts: bad second parameter" msgstr "%s: 仮引数ã§ã™\n" -#: extension/filefuncs.c:686 +#: extension/filefuncs.c:799 #, fuzzy msgid "fts: bad third parameter" msgstr "%s: 仮引数ã§ã™\n" -#: extension/filefuncs.c:693 +#: extension/filefuncs.c:806 #, fuzzy msgid "fts: could not flatten array\n" msgstr "`%s' ã¯ä¸æ­£ãªå¤‰æ•°åã§ã™" -#: extension/filefuncs.c:711 +#: extension/filefuncs.c:824 msgid "fts: ignoring sneaky FTS_NOSTAT flag. nyah, nyah, nyah." msgstr "" -#: extension/filefuncs.c:728 +#: extension/filefuncs.c:841 msgid "fts: clear_array() failed\n" msgstr "" -#: extension/fnmatch.c:98 +#: extension/fnmatch.c:112 #, fuzzy msgid "fnmatch: called with less than three arguments" msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れã¾ã—ãŸ" -#: extension/fnmatch.c:101 +#: extension/fnmatch.c:115 #, fuzzy msgid "fnmatch: called with more than three arguments" msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れã¾ã—ãŸ" -#: extension/fnmatch.c:104 +#: extension/fnmatch.c:118 #, fuzzy msgid "fnmatch: could not get first argument" msgstr "strftime: éžæ–‡å­—列ã®ç¬¬ä¸€å¼•æ•°ã‚’å—ã‘å–りã¾ã—ãŸ" -#: extension/fnmatch.c:109 +#: extension/fnmatch.c:123 #, fuzzy msgid "fnmatch: could not get second argument" msgstr "index: 文字列ã§ã¯ç„¡ã„第二引数をå—ã‘å–りã¾ã—ãŸ" -#: extension/fnmatch.c:114 +#: extension/fnmatch.c:128 msgid "fnmatch: could not get third argument" msgstr "" -#: extension/fnmatch.c:127 +#: extension/fnmatch.c:141 msgid "fnmatch is not implemented on this system\n" msgstr "" -#: extension/fnmatch.c:159 +#: extension/fnmatch.c:173 msgid "fnmatch init: could not add FNM_NOMATCH variable" msgstr "" -#: extension/fnmatch.c:169 +#: extension/fnmatch.c:183 #, c-format msgid "fnmatch init: could not set array element %s" msgstr "" -#: extension/fnmatch.c:179 +#: extension/fnmatch.c:193 msgid "fnmatch init: could not install FNM array" msgstr "" @@ -2191,88 +2210,88 @@ msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れã¾ã—ãŸ" msgid "wait: called with too many arguments" msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れã¾ã—ãŸ" -#: extension/inplace.c:110 +#: extension/inplace.c:130 msgid "inplace_begin: in-place editing already active" msgstr "" -#: extension/inplace.c:113 extension/inplace.c:187 +#: extension/inplace.c:133 extension/inplace.c:207 #, c-format msgid "inplace_begin: expects 2 arguments but called with %d" msgstr "" -#: extension/inplace.c:116 +#: extension/inplace.c:136 msgid "inplace_begin: cannot retrieve 1st argument as a string filename" msgstr "" -#: extension/inplace.c:124 +#: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" msgstr "" -#: extension/inplace.c:131 +#: extension/inplace.c:151 #, fuzzy, c-format msgid "inplace_begin: Cannot stat `%s' (%s)" msgstr "致命的: extension: `%s' ã‚’é–‹ãã“ã¨ãŒå‡ºæ¥ã¾ã›ã‚“ (%s)\n" -#: extension/inplace.c:138 +#: extension/inplace.c:158 #, fuzzy, c-format msgid "inplace_begin: `%s' is not a regular file" msgstr "`%s' ã¯ä¸æ­£ãªå¤‰æ•°åã§ã™" -#: extension/inplace.c:149 +#: extension/inplace.c:169 #, c-format msgid "inplace_begin: mkstemp(`%s') failed (%s)" msgstr "" -#: extension/inplace.c:158 +#: extension/inplace.c:178 #, fuzzy, c-format msgid "inplace_begin: chmod failed (%s)" msgstr "%s: é–‰ã˜ã‚‹ã®ã«å¤±æ•—ã—ã¾ã—㟠(%s)" -#: extension/inplace.c:165 +#: extension/inplace.c:185 #, c-format msgid "inplace_begin: dup(stdout) failed (%s)" msgstr "" -#: extension/inplace.c:168 +#: extension/inplace.c:188 #, c-format msgid "inplace_begin: dup2(%d, stdout) failed (%s)" msgstr "" -#: extension/inplace.c:171 +#: extension/inplace.c:191 #, fuzzy, c-format msgid "inplace_begin: close(%d) failed (%s)" msgstr "%s: é–‰ã˜ã‚‹ã®ã«å¤±æ•—ã—ã¾ã—㟠(%s)" -#: extension/inplace.c:190 +#: extension/inplace.c:210 msgid "inplace_end: cannot retrieve 1st argument as a string filename" msgstr "" -#: extension/inplace.c:197 +#: extension/inplace.c:217 msgid "inplace_end: in-place editing not active" msgstr "" -#: extension/inplace.c:203 +#: extension/inplace.c:223 #, c-format msgid "inplace_end: dup2(%d, stdout) failed (%s)" msgstr "" -#: extension/inplace.c:206 +#: extension/inplace.c:226 #, fuzzy, c-format msgid "inplace_end: close(%d) failed (%s)" msgstr "%s: é–‰ã˜ã‚‹ã®ã«å¤±æ•—ã—ã¾ã—㟠(%s)" -#: extension/inplace.c:210 +#: extension/inplace.c:230 #, c-format msgid "inplace_end: fsetpos(stdout) failed (%s)" msgstr "" -#: extension/inplace.c:223 +#: extension/inplace.c:243 #, fuzzy, c-format msgid "inplace_end: link(`%s', `%s') failed (%s)" msgstr "パイプ `%s' をフラッシュã§ãã¾ã›ã‚“ (%s)。" -#: extension/inplace.c:229 +#: extension/inplace.c:253 #, fuzzy, c-format msgid "inplace_end: rename(`%s', `%s') failed (%s)" msgstr "fd %d (`%s') ã‚’é–‰ã˜ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ (%s)" @@ -2307,173 +2326,173 @@ msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れã¾ã—ãŸ" msgid "chr: called with inappropriate argument(s)" msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れã¾ã—ãŸ" -#: extension/readdir.c:203 +#: extension/readdir.c:281 #, c-format msgid "dir_take_control_of: opendir/fdopendir failed: %s" msgstr "" -#: extension/readfile.c:84 +#: extension/readfile.c:113 #, fuzzy msgid "readfile: called with too many arguments" msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れã¾ã—ãŸ" -#: extension/readfile.c:118 +#: extension/readfile.c:137 #, fuzzy msgid "readfile: called with no arguments" msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れã¾ã—ãŸ" -#: extension/rwarray.c:120 +#: extension/rwarray.c:124 #, fuzzy msgid "writea: called with too many arguments" msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れã¾ã—ãŸ" -#: extension/rwarray.c:127 +#: extension/rwarray.c:131 #, fuzzy, c-format msgid "do_writea: argument 0 is not a string\n" msgstr "exp: 引数 %g ãŒç¯„囲外ã§ã™" -#: extension/rwarray.c:133 +#: extension/rwarray.c:137 #, fuzzy, c-format msgid "do_writea: argument 1 is not an array\n" msgstr "split: 第四引数ãŒé…列ã§ã¯ã‚りã¾ã›ã‚“" -#: extension/rwarray.c:180 +#: extension/rwarray.c:184 #, c-format msgid "write_array: could not flatten array\n" msgstr "" -#: extension/rwarray.c:194 +#: extension/rwarray.c:198 #, c-format msgid "write_array: could not release flattened array\n" msgstr "" -#: extension/rwarray.c:276 +#: extension/rwarray.c:280 #, fuzzy msgid "reada: called with too many arguments" msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れã¾ã—ãŸ" -#: extension/rwarray.c:283 +#: extension/rwarray.c:287 #, fuzzy, c-format msgid "do_reada: argument 0 is not a string\n" msgstr "exp: 引数 %g ãŒç¯„囲外ã§ã™" -#: extension/rwarray.c:289 +#: extension/rwarray.c:293 #, fuzzy, c-format msgid "do_reada: argument 1 is not an array\n" msgstr "match: 第三引数ãŒé…列ã§ã¯ã‚りã¾ã›ã‚“" -#: extension/rwarray.c:333 +#: extension/rwarray.c:337 #, c-format msgid "do_reada: clear_array failed\n" msgstr "" -#: extension/rwarray.c:370 +#: extension/rwarray.c:374 #, c-format msgid "read_array: set_array_element failed\n" msgstr "" -#: extension/time.c:81 +#: extension/time.c:113 #, fuzzy msgid "gettimeofday: ignoring arguments" msgstr "mktime: éžæ–‡å­—列引数をå—ã‘å–りã¾ã—ãŸ" -#: extension/time.c:112 +#: extension/time.c:144 msgid "gettimeofday: not supported on this platform" msgstr "" -#: extension/time.c:133 +#: extension/time.c:165 #, fuzzy msgid "sleep: called with too many arguments" msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れã¾ã—ãŸ" -#: extension/time.c:136 +#: extension/time.c:168 #, fuzzy msgid "sleep: missing required numeric argument" msgstr "exp: å¼•æ•°ãŒæ•°å€¤ã§ã¯ã‚りã¾ã›ã‚“" -#: extension/time.c:142 +#: extension/time.c:174 #, fuzzy msgid "sleep: argument is negative" msgstr "exp: 引数 %g ãŒç¯„囲外ã§ã™" -#: extension/time.c:176 +#: extension/time.c:208 msgid "sleep: not supported on this platform" msgstr "" -#: field.c:339 +#: field.c:345 msgid "NF set to negative value" msgstr "NF ãŒè² ã®å€¤ã«è¨­å®šã•れã¦ã„ã¾ã™" -#: field.c:964 field.c:971 field.c:975 +#: field.c:971 field.c:978 field.c:982 msgid "split: fourth argument is a gawk extension" msgstr "split: 第四引数㯠gawk æ‹¡å¼µã§ã™" -#: field.c:968 +#: field.c:975 msgid "split: fourth argument is not an array" msgstr "split: 第四引数ãŒé…列ã§ã¯ã‚りã¾ã›ã‚“" -#: field.c:982 +#: field.c:989 msgid "split: second argument is not an array" msgstr "split: 第二引数ãŒé…列ã§ã¯ã‚りã¾ã›ã‚“" -#: field.c:986 +#: field.c:993 msgid "split: cannot use the same array for second and fourth args" msgstr "split: 第二引数ã¨ç¬¬å››å¼•æ•°ã«åŒã˜é…列を使用ã™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“" -#: field.c:991 +#: field.c:998 msgid "split: cannot use a subarray of second arg for fourth arg" msgstr "split: 第四引数ã«ç¬¬äºŒå¼•æ•°ã®éƒ¨åˆ†é…列を使用ã™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“" -#: field.c:994 +#: field.c:1001 msgid "split: cannot use a subarray of fourth arg for second arg" msgstr "split: 第二引数ã«ç¬¬å››å¼•æ•°ã®éƒ¨åˆ†é…列を使用ã™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“" -#: field.c:1023 +#: field.c:1032 msgid "split: null string for third arg is a gawk extension" msgstr "split: 第三引数㫠NULL 文字列を使用ã™ã‚‹ã“ã¨ã¯ gawk æ‹¡å¼µã§ã™" -#: field.c:1063 +#: field.c:1072 msgid "patsplit: fourth argument is not an array" msgstr "patsplit: 第四引数ãŒé…列ã§ã¯ã‚りã¾ã›ã‚“" -#: field.c:1068 +#: field.c:1077 msgid "patsplit: second argument is not an array" msgstr "patsplit: 第二引数ãŒé…列ã§ã¯ã‚りã¾ã›ã‚“" -#: field.c:1074 +#: field.c:1083 msgid "patsplit: third argument must be non-null" msgstr "patsplit: 第三引数ã¯éž NULL ã§ãªã‘れã°ã„ã‘ã¾ã›ã‚“" -#: field.c:1078 +#: field.c:1087 msgid "patsplit: cannot use the same array for second and fourth args" msgstr "patsplit: 第二引数ã¨ç¬¬å››å¼•æ•°ã«åŒã˜é…列を使用ã™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“" -#: field.c:1083 +#: field.c:1092 msgid "patsplit: cannot use a subarray of second arg for fourth arg" msgstr "patsplit: 第四引数ã«ç¬¬äºŒå¼•æ•°ã®éƒ¨åˆ†é…列を使用ã™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“" -#: field.c:1086 +#: field.c:1095 msgid "patsplit: cannot use a subarray of fourth arg for second arg" msgstr "patsplit: 第二引数ã«ç¬¬å››å¼•æ•°ã®éƒ¨åˆ†é…列を使用ã™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“" -#: field.c:1124 +#: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" msgstr "`FIELDWIDTHS' 㯠gawk æ‹¡å¼µã§ã™" -#: field.c:1188 +#: field.c:1197 #, c-format msgid "invalid FIELDWIDTHS value, near `%s'" msgstr "`%s' 付近㮠FIELDWIDTHS 値ãŒç„¡åйã§ã™" -#: field.c:1261 +#: field.c:1270 msgid "null string for `FS' is a gawk extension" msgstr "`FS' ã« NULL 文字列を使用ã™ã‚‹ã®ã¯ gawk æ‹¡å¼µã§ã™" -#: field.c:1265 +#: field.c:1274 msgid "old awk does not support regexps as value of `FS'" msgstr "å¤ã„ awk 㯠`FS' ã®å€¤ã¨ã—ã¦æ­£è¦è¡¨ç¾ã‚’サãƒãƒ¼ãƒˆã—ã¾ã›ã‚“" -#: field.c:1384 +#: field.c:1393 msgid "`FPAT' is a gawk extension" msgstr "`FPAT' 㯠gawk æ‹¡å¼µã§ã™" @@ -2489,596 +2508,596 @@ msgstr "" msgid "node_to_awk_value: received null val" msgstr "" -#: gawkapi.c:808 +#: gawkapi.c:807 #, fuzzy msgid "remove_element: received null array" msgstr "length: é…列引数をå—ã‘å–りã¾ã—ãŸ" -#: gawkapi.c:811 +#: gawkapi.c:810 msgid "remove_element: received null subscript" msgstr "" -#: gawkapi.c:943 +#: gawkapi.c:947 #, c-format msgid "api_flatten_array: could not convert index %d\n" msgstr "" -#: gawkapi.c:948 +#: gawkapi.c:952 #, c-format msgid "api_flatten_array: could not convert value %d\n" msgstr "" -#: getopt.c:603 getopt.c:632 +#: getopt.c:604 getopt.c:633 #, fuzzy, c-format msgid "%s: option '%s' is ambiguous; possibilities:" msgstr "%s: オプション '%s' ã¯æ›–昧ã§ã™\n" -#: getopt.c:678 getopt.c:682 +#: getopt.c:679 getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: オプション '--%s' ã¯å¼•æ•°ã‚’å–ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“\n" -#: getopt.c:691 getopt.c:696 +#: getopt.c:692 getopt.c:697 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: オプション '%c%s' ã¯å¼•æ•°ã‚’å–ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“\n" -#: getopt.c:739 getopt.c:758 +#: getopt.c:740 getopt.c:759 #, c-format msgid "%s: option '--%s' requires an argument\n" msgstr "%s: オプション '--%s' ã«ã¯å¼•æ•°ãŒå¿…è¦ã§ã™\n" -#: getopt.c:796 getopt.c:799 +#: getopt.c:797 getopt.c:800 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: オプション '--%s' ã‚’èªè­˜ã§ãã¾ã›ã‚“\n" -#: getopt.c:807 getopt.c:810 +#: getopt.c:808 getopt.c:811 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: オプション '%c%s' ã‚’èªè­˜ã§ãã¾ã›ã‚“\n" -#: getopt.c:859 getopt.c:862 +#: getopt.c:860 getopt.c:863 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: 無効ãªã‚ªãƒ—ション -- '%c'\n" -#: getopt.c:915 getopt.c:932 getopt.c:1142 getopt.c:1160 +#: getopt.c:916 getopt.c:933 getopt.c:1143 getopt.c:1161 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: オプションã«ã¯å¼•æ•°ãŒå¿…è¦ã§ã™ -- '%c'\n" -#: getopt.c:988 getopt.c:1004 +#: getopt.c:989 getopt.c:1005 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: オプション '-W %s' ã¯æ›–昧ã§ã™\n" -#: getopt.c:1028 getopt.c:1046 +#: getopt.c:1029 getopt.c:1047 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: オプション '-W %s' ã¯å¼•æ•°ã‚’å–ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“\n" -#: getopt.c:1067 getopt.c:1085 +#: getopt.c:1068 getopt.c:1086 #, c-format msgid "%s: option '-W %s' requires an argument\n" msgstr "%s: オプション '-W %s' ã«ã¯å¼•æ•°ãŒå¿…è¦ã§ã™\n" -#: io.c:347 +#: io.c:392 #, c-format msgid "command line argument `%s' is a directory: skipped" msgstr "コマンドライン引数 `%s' ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã™: スキップã•れã¾ã—ãŸ" -#: io.c:350 io.c:463 +#: io.c:395 io.c:513 #, c-format msgid "cannot open file `%s' for reading (%s)" msgstr "ファイル `%s' を読ã¿è¾¼ã¿ç”¨ã«é–‹ã‘ã¾ã›ã‚“ (%s)" -#: io.c:590 +#: io.c:640 #, c-format msgid "close of fd %d (`%s') failed (%s)" msgstr "fd %d (`%s') ã‚’é–‰ã˜ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ (%s)" -#: io.c:666 +#: io.c:716 msgid "redirection not allowed in sandbox mode" msgstr "サンドボックスモード内ã§ã¯ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã¯è¨±å¯ã•れã¦ã„ã¾ã›ã‚“" -#: io.c:700 +#: io.c:750 #, c-format msgid "expression in `%s' redirection only has numeric value" msgstr "`%s' リダイレクトã®å‘½ä»¤å¼ã«æ•°å€¤ã—ã‹è¨˜è¿°ã•れã¦ã„ã¾ã›ã‚“。" -#: io.c:706 +#: io.c:756 #, c-format msgid "expression for `%s' redirection has null string value" msgstr "`%s' リダイレクトã®å‘½ä»¤å¼ãŒç©ºåˆ—ã§ã™ã€‚" -#: io.c:711 +#: io.c:761 #, c-format msgid "filename `%s' for `%s' redirection may be result of logical expression" msgstr "" "`%2$s' リダイレクトã«è«–ç†æ¼”ç®—ã®çµæžœã¨æ€ã‚れるファイルå `%1$s' ãŒä½¿ã‚れã¦ã„ã¾" "ã™ã€‚" -#: io.c:754 +#: io.c:809 #, c-format msgid "unnecessary mixing of `>' and `>>' for file `%.*s'" msgstr "ファイル `%.*s' ã§å¿…è¦ä»¥ä¸Šã« `>' 㨠`>>' を組åˆã›ã¦ã„ã¾ã™ã€‚" -#: io.c:808 +#: io.c:863 #, c-format msgid "can't open pipe `%s' for output (%s)" msgstr "出力用ã«ãƒ‘イプ `%s' ã‚’é–‹ã‘ã¾ã›ã‚“ (%s)" -#: io.c:818 +#: io.c:873 #, c-format msgid "can't open pipe `%s' for input (%s)" msgstr "入力用ã«ãƒ‘イプ `%s' ã‚’é–‹ã‘ã¾ã›ã‚“ (%s)" -#: io.c:849 +#: io.c:904 #, c-format msgid "can't open two way pipe `%s' for input/output (%s)" msgstr "入出力用ã®åŒæ–¹å‘パイプ `%s' ãŒé–‹ã‘ã¾ã›ã‚“ (%s)" -#: io.c:928 +#: io.c:986 #, c-format msgid "can't redirect from `%s' (%s)" msgstr "`%s' ã‹ã‚‰ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã§ãã¾ã›ã‚“ (%s)" -#: io.c:931 +#: io.c:989 #, c-format msgid "can't redirect to `%s' (%s)" msgstr "`%s' ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã§ãã¾ã›ã‚“ (%s)" -#: io.c:982 +#: io.c:1040 msgid "" "reached system limit for open files: starting to multiplex file descriptors" msgstr "" "é–‹ã„ã¦ã„ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã®æ•°ãŒã‚·ã‚¹ãƒ†ãƒ åˆ¶é™ã«é”ã—ã¾ã—ãŸã€‚ファイル記述å­ã‚’多é‡åŒ–ã—ã¾" "ã™ã€‚" -#: io.c:998 +#: io.c:1056 #, c-format msgid "close of `%s' failed (%s)." msgstr "`%s' ã‚’é–‰ã˜ã‚‹ã®ã«å¤±æ•—ã—ã¾ã—㟠(%s)" -#: io.c:1006 +#: io.c:1064 msgid "too many pipes or input files open" msgstr "é–‹ã„ã¦ã„るパイプã¾ãŸã¯å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã®æ•°ãŒå¤šéŽãŽã¾ã™ã€‚" -#: io.c:1028 +#: io.c:1086 msgid "close: second argument must be `to' or `from'" msgstr "close: 第二引数㯠`to' ã¾ãŸã¯ `from' ã§ãªã‘れã°ã„ã‘ã¾ã›ã‚“" -#: io.c:1045 +#: io.c:1103 #, c-format msgid "close: `%.*s' is not an open file, pipe or co-process" msgstr "close: `%.*s' ã¯é–‹ã„ã¦ã„るファイルã€ãƒ‘イプã€ãƒ—ロセス共有ã§ã¯ã‚りã¾ã›ã‚“" -#: io.c:1050 +#: io.c:1108 msgid "close of redirection that was never opened" msgstr "é–‹ã„ã¦ãªã„リダイレクトを閉ã˜ã‚ˆã†ã¨ã—ã¦ã„ã¾ã™" -#: io.c:1147 +#: io.c:1205 #, c-format msgid "close: redirection `%s' not opened with `|&', second argument ignored" msgstr "" "close: リダイレクト `%s' 㯠`|&' を使用ã—ã¦é–‹ã‹ã‚Œã¦ã„ã¾ã›ã‚“。第二引数ã¯ç„¡è¦–ã•" "れã¾ã—ãŸ" -#: io.c:1164 +#: io.c:1222 #, c-format msgid "failure status (%d) on pipe close of `%s' (%s)" msgstr "パイプ `%2$s' ã‚’é–‰ã˜ãŸã¨ãã®çŠ¶æ…‹ã‚³ãƒ¼ãƒ‰ãŒå¤±æ•— (%1$d) ã§ã—㟠(%3$s)。" -#: io.c:1167 +#: io.c:1225 #, c-format msgid "failure status (%d) on file close of `%s' (%s)" msgstr "ファイル `%2$s' ã‚’é–‰ã˜ãŸã¨ãã®çŠ¶æ…‹ã‚³ãƒ¼ãƒ‰ãŒå¤±æ•— (%1$d) ã§ã—㟠(%3$s)。" -#: io.c:1187 +#: io.c:1245 #, c-format msgid "no explicit close of socket `%s' provided" msgstr "ソケット `%s' を明示ã—ã¦é–‰ã˜ã¦ã„ã¾ã›ã‚“。" -#: io.c:1190 +#: io.c:1248 #, c-format msgid "no explicit close of co-process `%s' provided" msgstr "並行プロセス `%s' を明示ã—ã¦é–‰ã˜ã¦ã„ã¾ã›ã‚“。" -#: io.c:1193 +#: io.c:1251 #, c-format msgid "no explicit close of pipe `%s' provided" msgstr "パイプ `%s' を明示ã—ã¦é–‰ã˜ã¦ã„ã¾ã›ã‚“。" -#: io.c:1196 +#: io.c:1254 #, c-format msgid "no explicit close of file `%s' provided" msgstr "ファイル `%s' を明示ã—ã¦é–‰ã˜ã¦ã„ã¾ã›ã‚“。" -#: io.c:1224 io.c:1279 main.c:842 main.c:879 +#: io.c:1284 io.c:1342 main.c:864 main.c:906 #, c-format msgid "error writing standard output (%s)" msgstr "標準出力ã¸ã®æ›¸è¾¼ã¿ã‚¨ãƒ©ãƒ¼ (%s)" -#: io.c:1228 io.c:1284 +#: io.c:1289 io.c:1348 main.c:866 #, c-format msgid "error writing standard error (%s)" msgstr "標準エラーã¸ã®æ›¸è¾¼ã¿ã‚¨ãƒ©ãƒ¼ (%s)" -#: io.c:1236 +#: io.c:1297 #, c-format msgid "pipe flush of `%s' failed (%s)." msgstr "パイプ `%s' をフラッシュã§ãã¾ã›ã‚“ (%s)。" -#: io.c:1239 +#: io.c:1300 #, c-format msgid "co-process flush of pipe to `%s' failed (%s)." msgstr "`%s' ã¸æŽ¥ç¶šã™ã‚‹ãƒ‘イプを並行プロセスã‹ã‚‰ãƒ•ラッシュã§ãã¾ã›ã‚“ (%s)。" -#: io.c:1242 +#: io.c:1303 #, c-format msgid "file flush of `%s' failed (%s)." msgstr "ファイル `%s' をフラッシュã§ãã¾ã›ã‚“ (%s)。" -#: io.c:1356 +#: io.c:1420 #, c-format msgid "local port %s invalid in `/inet'" msgstr "`/inet' 内ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒ¼ãƒˆ %s ãŒç„¡åйã§ã™" -#: io.c:1374 +#: io.c:1438 #, c-format msgid "remote host and port information (%s, %s) invalid" msgstr "リモートã®ãƒ›ã‚¹ãƒˆãŠã‚ˆã³ãƒãƒ¼ãƒˆæƒ…å ± (%s, %s) ãŒç„¡åйã§ã™" -#: io.c:1526 +#: io.c:1590 #, c-format msgid "no (known) protocol supplied in special filename `%s'" msgstr "" "スペシャルファイルå `%s' ã«ï¼ˆèªè­˜ã§ãã‚‹ï¼‰ãƒ—ãƒ­ãƒˆã‚³ãƒ«ãŒæŒ‡å®šã•れã¦ã„ã¾ã›ã‚“" -#: io.c:1540 +#: io.c:1604 #, c-format msgid "special file name `%s' is incomplete" msgstr "スペシャルファイルå `%s' ã¯ä¸å®Œå…¨ã§ã™" -#: io.c:1557 +#: io.c:1621 msgid "must supply a remote hostname to `/inet'" msgstr "`/inet' ã«ã¯ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆåを与ãˆãªã‘れã°ã„ã‘ã¾ã›ã‚“" -#: io.c:1575 +#: io.c:1639 msgid "must supply a remote port to `/inet'" msgstr "`/inet' ã«ã¯ãƒªãƒ¢ãƒ¼ãƒˆãƒãƒ¼ãƒˆç•ªå·ã‚’与ãˆãªã‘れã°ã„ã‘ã¾ã›ã‚“" -#: io.c:1621 +#: io.c:1685 msgid "TCP/IP communications are not supported" msgstr "TCP/IP 通信ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" -#: io.c:1796 +#: io.c:1867 #, c-format msgid "could not open `%s', mode `%s'" msgstr "`%s' をモード `%s' ã§é–‹ã‘ã¾ã›ã‚“" -#: io.c:1846 +#: io.c:1917 #, c-format msgid "close of master pty failed (%s)" msgstr "マスター pty ã‚’é–‰ã˜ã‚‹ã®ã«å¤±æ•—ã—ã¾ã—㟠(%s)" -#: io.c:1848 io.c:2024 io.c:2194 +#: io.c:1919 io.c:2105 io.c:2305 #, c-format msgid "close of stdout in child failed (%s)" msgstr "å­ãƒ—ãƒ­ã‚»ã‚¹ãŒæ¨™æº–出力を閉ã˜ã‚‹ã®ã«å¤±æ•—ã—ã¾ã—㟠(%s)" -#: io.c:1851 +#: io.c:1922 #, c-format msgid "moving slave pty to stdout in child failed (dup: %s)" msgstr "å­ãƒ—ロセスãŒã‚¹ãƒ¬ãƒ¼ãƒ– pty を標準出力ã«ç§»å‹•ã§ãã¾ã›ã‚“ (dup: %s)。" -#: io.c:1853 io.c:2029 +#: io.c:1924 io.c:2110 #, c-format msgid "close of stdin in child failed (%s)" msgstr "å­ãƒ—ãƒ­ã‚»ã‚¹ãŒæ¨™æº–入力を閉ã˜ã‚‰ã‚Œã¾ã›ã‚“ (%s)。" -#: io.c:1856 +#: io.c:1927 #, c-format msgid "moving slave pty to stdin in child failed (dup: %s)" msgstr "å­ãƒ—ロセスãŒã‚¹ãƒ¬ãƒ¼ãƒ– pty を標準入力ã«ç§»å‹•ã§ãã¾ã›ã‚“ (dup: %s)。" -#: io.c:1858 io.c:1879 +#: io.c:1929 io.c:1951 #, c-format msgid "close of slave pty failed (%s)" msgstr "スレーブ pty ã‚’é–‰ã˜ã‚‹ã®ã«å¤±æ•—ã—ã¾ã—㟠(%s)" -#: io.c:1965 io.c:2027 io.c:2171 io.c:2197 +#: io.c:2040 io.c:2108 io.c:2276 io.c:2308 #, c-format msgid "moving pipe to stdout in child failed (dup: %s)" msgstr "å­ãƒ—ロセスãŒãƒ‘イプを標準出力ã«ç§»å‹•ã§ãã¾ã›ã‚“ (dup: %s)。" -#: io.c:1972 io.c:2032 +#: io.c:2047 io.c:2113 #, c-format msgid "moving pipe to stdin in child failed (dup: %s)" msgstr "å­ãƒ—ロセスãŒãƒ‘イプを標準入力ã«ç§»å‹•ã§ãã¾ã›ã‚“ (dup: %s)。" -#: io.c:1992 io.c:2187 +#: io.c:2073 io.c:2298 msgid "restoring stdout in parent process failed\n" msgstr "è¦ªãƒ—ãƒ­ã‚»ã‚¹ãŒæ¨™æº–出力を復旧ã§ãã¾ã›ã‚“。\n" -#: io.c:2000 +#: io.c:2081 msgid "restoring stdin in parent process failed\n" msgstr "è¦ªãƒ—ãƒ­ã‚»ã‚¹ãŒæ¨™æº–入力を復旧ã§ãã¾ã›ã‚“。\n" -#: io.c:2035 io.c:2199 io.c:2213 +#: io.c:2116 io.c:2310 io.c:2324 #, c-format msgid "close of pipe failed (%s)" msgstr "パイプを閉ã˜ã‚‰ã‚Œã¾ã›ã‚“ (%s)。" -#: io.c:2089 +#: io.c:2174 msgid "`|&' not supported" msgstr "`|&' ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。" -#: io.c:2156 +#: io.c:2261 #, c-format msgid "cannot open pipe `%s' (%s)" msgstr "パイプ `%s' ãŒé–‹ã‘ã¾ã›ã‚“ (%s)。" -#: io.c:2207 +#: io.c:2318 #, c-format msgid "cannot create child process for `%s' (fork: %s)" msgstr "`%s' 用ã®å­ãƒ—ロセスを実行ã§ãã¾ã›ã‚“ (fork: %s)。" -#: io.c:2667 +#: io.c:2790 msgid "register_input_parser: received NULL pointer" msgstr "" -#: io.c:2695 +#: io.c:2818 #, c-format msgid "input parser `%s' conflicts with previously installed input parser `%s'" msgstr "" -#: io.c:2702 +#: io.c:2825 #, c-format msgid "input parser `%s' failed to open `%s'" msgstr "" -#: io.c:2722 +#: io.c:2845 msgid "register_output_wrapper: received NULL pointer" msgstr "" -#: io.c:2750 +#: io.c:2873 #, c-format msgid "" "output wrapper `%s' conflicts with previously installed output wrapper `%s'" msgstr "" -#: io.c:2757 +#: io.c:2880 #, c-format msgid "output wrapper `%s' failed to open `%s'" msgstr "" -#: io.c:2778 +#: io.c:2901 msgid "register_output_processor: received NULL pointer" msgstr "" -#: io.c:2807 +#: io.c:2930 #, c-format msgid "" "two-way processor `%s' conflicts with previously installed two-way processor " "`%s'" msgstr "" -#: io.c:2816 +#: io.c:2939 #, c-format msgid "two way processor `%s' failed to open `%s'" msgstr "" -#: io.c:2923 +#: io.c:3064 #, c-format msgid "data file `%s' is empty" msgstr "データファイル `%s' ã¯ç©ºã§ã™ã€‚" -#: io.c:2965 io.c:2973 +#: io.c:3106 io.c:3114 msgid "could not allocate more input memory" msgstr "入力用メモリーをã“れ以上確ä¿ã§ãã¾ã›ã‚“。" -#: io.c:3539 +#: io.c:3682 msgid "multicharacter value of `RS' is a gawk extension" msgstr "è¤‡æ•°ã®æ–‡å­—ã‚’ `RS' ã«ä½¿ç”¨ã™ã‚‹ã®ã¯ gawk ç‰¹æœ‰ã®æ‹¡å¼µã§ã™ã€‚" -#: io.c:3628 +#: io.c:3771 msgid "IPv6 communication is not supported" msgstr "IPv6 通信ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" -#: main.c:388 +#: main.c:405 msgid "empty argument to `-e/--source' ignored" msgstr "`-e/--source' ã¸ã®ç©ºã®å¼•æ•°ã¯ç„¡è¦–ã•れã¾ã—ãŸ" -#: main.c:478 +#: main.c:495 #, c-format msgid "%s: option `-W %s' unrecognized, ignored\n" msgstr "%s: オプション `-W %s' ã¯èªè­˜ã§ãã¾ã›ã‚“。無視ã•れã¾ã—ãŸ\n" -#: main.c:524 +#: main.c:541 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: 引数ãŒå¿…è¦ãªã‚ªãƒ—ション -- %c\n" -#: main.c:545 +#: main.c:562 msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'" msgstr "" "環境変数 `POSIXLY_CORRECT' ãŒæŒ‡å®šã•れã¦ã„ã¾ã™ã€‚オプション `--posix' を有効ã«" "ã—ã¾ã™" -#: main.c:551 +#: main.c:568 msgid "`--posix' overrides `--traditional'" msgstr "オプション `--posix' 㯠`--traditional' を無効ã«ã—ã¾ã™ã€‚" -#: main.c:562 +#: main.c:579 msgid "`--posix'/`--traditional' overrides `--non-decimal-data'" msgstr "" "オプション `--posix'/`--traditional' 㯠`--non-decimal-data' を無効ã«ã—ã¾ã™ã€‚" -#: main.c:566 +#: main.c:583 #, c-format msgid "running %s setuid root may be a security problem" msgstr "" "setuid root ã§ %s を実行ã™ã‚‹ã¨ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ä¸Šã®å•題ãŒç™ºç”Ÿã™ã‚‹å ´åˆãŒã‚りã¾" "ã™ã€‚" -#: main.c:571 +#: main.c:588 #, fuzzy msgid "`--posix' overrides `--characters-as-bytes'" msgstr "`--posix' 㯠`--binary' を上書ãã—ã¾ã™" -#: main.c:630 +#: main.c:647 #, c-format msgid "can't set binary mode on stdin (%s)" msgstr "標準入力をãƒã‚¤ãƒŠãƒªãƒ¢ãƒ¼ãƒ‰ã«è¨­å®šã§ãã¾ã›ã‚“ (%s)" -#: main.c:633 +#: main.c:650 #, c-format msgid "can't set binary mode on stdout (%s)" msgstr "標準出力をãƒã‚¤ãƒŠãƒªãƒ¢ãƒ¼ãƒ‰ã«è¨­å®šã§ãã¾ã›ã‚“ (%s)" -#: main.c:635 +#: main.c:652 #, c-format msgid "can't set binary mode on stderr (%s)" msgstr "標準エラーをãƒã‚¤ãƒŠãƒªãƒ¢ãƒ¼ãƒ‰ã«è¨­å®šã§ãã¾ã›ã‚“ (%s)" -#: main.c:693 +#: main.c:710 msgid "no program text at all!" msgstr "プログラム文ãŒå…¨ãã‚りã¾ã›ã‚“!" -#: main.c:779 +#: main.c:799 #, c-format msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n" msgstr "" "使用法: %s [POSIX ã¾ãŸã¯ GNU å½¢å¼ã®ã‚ªãƒ—ション] -f progfile [--] file ...\n" -#: main.c:781 +#: main.c:801 #, c-format msgid "Usage: %s [POSIX or GNU style options] [--] %cprogram%c file ...\n" msgstr "" "使用法: %s [POSIX ã¾ãŸã¯ GNU å½¢å¼ã®ã‚ªãƒ—ション] [--] %cprogram%c file ...\n" -#: main.c:786 +#: main.c:806 msgid "POSIX options:\t\tGNU long options: (standard)\n" msgstr "POSIX オプション:\t\tGNU é•·ã„å½¢å¼ã®ã‚ªãƒ—ション: (標準)\n" -#: main.c:787 +#: main.c:807 msgid "\t-f progfile\t\t--file=progfile\n" msgstr "\t-f progfile\t\t--file=progfile\n" -#: main.c:788 +#: main.c:808 msgid "\t-F fs\t\t\t--field-separator=fs\n" msgstr "\t-F fs\t\t\t--field-separator=fs\n" -#: main.c:789 +#: main.c:809 msgid "\t-v var=val\t\t--assign=var=val\n" msgstr "\t-v var=val\t\t--assign=var=val\n" -#: main.c:790 +#: main.c:810 msgid "Short options:\t\tGNU long options: (extensions)\n" msgstr "短ã„オプション:\t\tGNU é•·ã„å½¢å¼ã®ã‚ªãƒ—ション: (æ‹¡å¼µ)\n" -#: main.c:791 +#: main.c:811 msgid "\t-b\t\t\t--characters-as-bytes\n" msgstr "\t-b\t\t\t--characters-as-bytes\n" -#: main.c:792 +#: main.c:812 msgid "\t-c\t\t\t--traditional\n" msgstr "\t-c\t\t\t--traditional\n" -#: main.c:793 +#: main.c:813 msgid "\t-C\t\t\t--copyright\n" msgstr "\t-C\t\t\t--copyright\n" -#: main.c:794 +#: main.c:814 msgid "\t-d[file]\t\t--dump-variables[=file]\n" msgstr "\t-d[file]\t\t--dump-variables[=file]\n" -#: main.c:795 +#: main.c:815 #, fuzzy msgid "\t-D[file]\t\t--debug[=file]\n" msgstr "\t-p[file]\t\t--profile[=file]\n" -#: main.c:796 +#: main.c:816 msgid "\t-e 'program-text'\t--source='program-text'\n" msgstr "\t-e 'program-text'\t--source='program-text'\n" -#: main.c:797 +#: main.c:817 msgid "\t-E file\t\t\t--exec=file\n" msgstr "\t-E file\t\t\t--exec=file\n" -#: main.c:798 +#: main.c:818 msgid "\t-g\t\t\t--gen-pot\n" msgstr "\t-g\t\t\t--gen-pot\n" -#: main.c:799 +#: main.c:819 msgid "\t-h\t\t\t--help\n" msgstr "\t-h\t\t\t--help\n" -#: main.c:800 +#: main.c:820 msgid "\t-i includefile\t\t--include=includefile\n" msgstr "" -#: main.c:801 +#: main.c:821 msgid "\t-l library\t\t--load=library\n" msgstr "" -#: main.c:802 +#: main.c:822 msgid "\t-L [fatal]\t\t--lint[=fatal]\n" msgstr "\t-L [fatal]\t\t--lint[=fatal]\n" -#: main.c:803 +#: 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:804 +#: main.c:824 #, fuzzy msgid "\t-M\t\t\t--bignum\n" msgstr "\t-g\t\t\t--gen-pot\n" -#: main.c:805 +#: main.c:825 msgid "\t-N\t\t\t--use-lc-numeric\n" msgstr "\t-N\t\t\t--use-lc-numeric\n" -#: main.c:806 +#: main.c:826 #, fuzzy msgid "\t-o[file]\t\t--pretty-print[=file]\n" msgstr "\t-p[file]\t\t--profile[=file]\n" -#: main.c:807 +#: main.c:827 msgid "\t-O\t\t\t--optimize\n" msgstr "\t-O\t\t\t--optimize\n" -#: main.c:808 +#: main.c:828 msgid "\t-p[file]\t\t--profile[=file]\n" msgstr "\t-p[file]\t\t--profile[=file]\n" -#: main.c:809 +#: main.c:829 msgid "\t-P\t\t\t--posix\n" msgstr "\t-P\t\t\t--posix\n" -#: main.c:810 +#: main.c:830 msgid "\t-r\t\t\t--re-interval\n" msgstr "\t-r\t\t\t--re-interval\n" -#: main.c:811 +#: main.c:831 msgid "\t-S\t\t\t--sandbox\n" msgstr "\t-S\t\t\t--sandbox\n" -#: main.c:812 +#: main.c:832 msgid "\t-t\t\t\t--lint-old\n" msgstr "\t-t\t\t\t--lint-old\n" -#: main.c:813 +#: main.c:833 msgid "\t-V\t\t\t--version\n" msgstr "\t-V\t\t\t--version\n" -#: main.c:815 +#: main.c:835 msgid "\t-W nostalgia\t\t--nostalgia\n" msgstr "\t-W nostalgia\t\t--nostalgia\n" -#: main.c:818 +#: main.c:838 msgid "\t-Y\t\t--parsedebug\n" msgstr "\t-Y\t\t--parsedebug\n" @@ -3087,7 +3106,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:827 +#: main.c:847 msgid "" "\n" "To report bugs, see node `Bugs' in `gawk.info', which is\n" @@ -3102,7 +3121,7 @@ msgstr "" "翻訳ã«é–¢ã™ã‚‹ãƒã‚°ã¯ã«å ±å‘Šã—ã¦ãã ã•" "ã„。\n" -#: main.c:831 +#: main.c:851 msgid "" "gawk is a pattern scanning and processing language.\n" "By default it reads standard input and writes standard output.\n" @@ -3112,7 +3131,7 @@ msgstr "" "デフォルト設定ã§ã¯ã€æ¨™æº–入力を読ã¿è¾¼ã¿ã€æ¨™æº–å‡ºåŠ›ã«æ›¸ã出ã—ã¾ã™ã€‚\n" "\n" -#: main.c:835 +#: main.c:855 msgid "" "Examples:\n" "\tgawk '{ sum += $1 }; END { print sum }' file\n" @@ -3122,7 +3141,7 @@ msgstr "" "\tgawk '{ sum += $1 }; END { print sum }' file\n" "\tgawk -F: '{ print $1 }' /etc/passwd\n" -#: main.c:855 +#: main.c:880 #, c-format msgid "" "Copyright (C) 1989, 1991-%d Free Software Foundation.\n" @@ -3141,7 +3160,7 @@ msgstr "" "(at your option) any later version.\n" "\n" -#: main.c:863 +#: main.c:888 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" @@ -3155,7 +3174,7 @@ msgstr "" "GNU General Public License for more details.\n" "\n" -#: main.c:869 +#: main.c:894 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" @@ -3163,16 +3182,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:904 +#: main.c:931 msgid "-Ft does not set FS to tab in POSIX awk" msgstr "POSIX awk ã§ã¯ -Ft 㯠FS をタブã«è¨­å®šã—ã¾ã›ã‚“" -#: main.c:1181 +#: main.c:1208 #, c-format msgid "unknown value for field spec: %d\n" msgstr "フィールド指定ã«ä¸æ˜Žãªå€¤ãŒã‚りã¾ã™: %d\n" -#: main.c:1279 +#: main.c:1306 #, c-format msgid "" "%s: `%s' argument to `-v' not in `var=value' form\n" @@ -3181,48 +3200,48 @@ msgstr "" "%s: オプション `-v' ã®å¼•æ•° `%s' ㌠`変数=代入値' ã®å½¢å¼ã«ãªã£ã¦ã„ã¾ã›ã‚“。\n" "\n" -#: main.c:1305 +#: main.c:1332 #, c-format msgid "`%s' is not a legal variable name" msgstr "`%s' ã¯ä¸æ­£ãªå¤‰æ•°åã§ã™" -#: main.c:1308 +#: main.c:1335 #, c-format msgid "`%s' is not a variable name, looking for file `%s=%s'" msgstr "`%s' ã¯å¤‰æ•°åã§ã¯ã‚りã¾ã›ã‚“。`%s=%s' ã®ãƒ•ァイルを探ã—ã¾ã™ã€‚" -#: main.c:1312 +#: main.c:1339 #, c-format msgid "cannot use gawk builtin `%s' as variable name" msgstr "gawk ã«çµ„ã¿è¾¼ã¿ã® `%s' ã¯å¤‰æ•°åã¨ã—ã¦ä½¿ç”¨å‡ºæ¥ã¾ã›ã‚“" -#: main.c:1317 +#: main.c:1344 #, c-format msgid "cannot use function `%s' as variable name" msgstr "関数 `%s' ã¯å¤‰æ•°åã¨ã—ã¦ä½¿ç”¨å‡ºæ¥ã¾ã›ã‚“" -#: main.c:1370 +#: main.c:1397 msgid "floating point exception" msgstr "æµ®å‹•å°æ•°ç‚¹ä¾‹å¤–" -#: main.c:1377 +#: main.c:1404 msgid "fatal error: internal error" msgstr "致命的エラー: 内部エラー" -#: main.c:1392 +#: main.c:1419 msgid "fatal error: internal error: segfault" msgstr "致命的エラー: 内部エラー: セグメンテーションé•å" -#: main.c:1404 +#: main.c:1431 msgid "fatal error: internal error: stack overflow" msgstr "致命的エラー: 内部エラー: スタックオーãƒãƒ¼ãƒ•ロー" -#: main.c:1463 +#: main.c:1490 #, c-format msgid "no pre-opened fd %d" msgstr "fd %d ãŒäº‹å‰ã«é–‹ã„ã¦ã„ã¾ã›ã‚“。" -#: main.c:1470 +#: main.c:1497 #, c-format msgid "could not pre-open /dev/null for fd %d" msgstr "事å‰ã« fd %d 用㫠/dev/null ã‚’é–‹ã‘ã¾ã›ã‚“。" @@ -3281,7 +3300,7 @@ msgstr "or(%lf, %lf): å°æ•°ç‚¹ä»¥ä¸‹ã¯åˆ‡ã‚Šæ¨ã¦ã‚‰ã‚Œã¾ã™" msgid "%s: argument #%d negative value %Zd will give strange results" msgstr "compl(%lf): è² ã®æ•°å€¤ã‚’使用ã™ã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™" -#: msg.c:61 +#: msg.c:68 #, c-format msgid "cmd. line:" msgstr "コマンドライン:" @@ -3335,16 +3354,16 @@ msgstr "%s %s `%s': fd フラグをå–å¾—ã§ãã¾ã›ã‚“: (fcntl F_GETFD: %s)" msgid "%s %s `%s': could not set close-on-exec: (fcntl F_SETFD: %s)" msgstr "%s %s `%s': close-on-exec を設定ã§ãã¾ã›ã‚“: (fcntl F_SETFD: %s)" -#: profile.c:70 +#: profile.c:71 #, c-format msgid "could not open `%s' for writing: %s" msgstr "`%s' を書込ã¿ç”¨ã«é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸ: %s" -#: profile.c:72 +#: profile.c:73 msgid "sending profile to standard error" msgstr "プロファイルを標準エラーã«é€ã£ã¦ã„ã¾ã™" -#: profile.c:188 +#: profile.c:193 #, c-format msgid "" "\t# %s block(s)\n" @@ -3353,7 +3372,7 @@ msgstr "" "\t# %s ブロック\n" "\n" -#: profile.c:193 +#: profile.c:198 #, c-format msgid "" "\t# Rule(s)\n" @@ -3362,29 +3381,29 @@ msgstr "" "\t# ルール\n" "\n" -#: profile.c:267 +#: profile.c:272 #, c-format msgid "internal error: %s with null vname" msgstr "内部エラー: %s ã® vname ãŒç„¡åйã§ã™ã€‚" -#: profile.c:530 +#: profile.c:537 #, fuzzy msgid "internal error: builtin with null fname" msgstr "内部エラー: %s ã® vname ãŒç„¡åйã§ã™ã€‚" -#: profile.c:942 +#: profile.c:949 #, c-format msgid "" "\t# Loaded extensions (-l and/or @load)\n" "\n" msgstr "" -#: profile.c:965 +#: profile.c:972 #, c-format msgid "\t# gawk profile, created %s\n" msgstr "\t# gawk プロファイルã€ä½œæˆæ—¥æ™‚ %s\n" -#: profile.c:1351 +#: profile.c:1475 #, c-format msgid "" "\n" @@ -3393,17 +3412,12 @@ msgstr "" "\n" "\t# 関数一覧(アルファベット順)\n" -#: profile.c:1389 +#: profile.c:1513 #, c-format msgid "redir2str: unknown redirection type %d" msgstr "redir2str: 䏿˜Žãªãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆåž‹ %d ã§ã™" -#: re.c:583 -#, fuzzy, c-format -msgid "range of the form `[%c-%c]' is locale dependent" -msgstr "`[%c-%c]' å½¢å¼ã®ç¯„囲ã¯ãƒ­ã‚±ãƒ¼ãƒ«ä¾å­˜ã§ã™" - -#: re.c:610 +#: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" msgstr "æ­£è¦è¡¨ç¾ã®è¦ç´  `%.*s' ã¯ãŠãらã `[%.*s]' ã§ã‚ã‚‹ã¹ãã§ã™" @@ -3472,10 +3486,14 @@ msgstr ") ã¾ãŸã¯ \\) ãŒä¸ä¸€è‡´ã§ã™" msgid "No previous regular expression" msgstr "以å‰ã«æ­£è¦è¡¨ç¾ãŒã‚りã¾ã›ã‚“" -#: symbol.c:740 +#: symbol.c:741 msgid "can not pop main context" msgstr "" +#, fuzzy +#~ msgid "range of the form `[%c-%c]' is locale dependent" +#~ msgstr "`[%c-%c]' å½¢å¼ã®ç¯„囲ã¯ãƒ­ã‚±ãƒ¼ãƒ«ä¾å­˜ã§ã™" + #, fuzzy #~ msgid "[s]printf called with no arguments" #~ msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•れã¾ã—ãŸ" diff --git a/po/ms.gmo b/po/ms.gmo index 0db272d3..6123c873 100644 Binary files a/po/ms.gmo and b/po/ms.gmo differ diff --git a/po/ms.po b/po/ms.po index 70121298..09ec6472 100644 --- a/po/ms.po +++ b/po/ms.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gawk 4.0.75\n" "Report-Msgid-Bugs-To: arnold@skeeve.com\n" -"POT-Creation-Date: 2013-05-09 16:05+0300\n" +"POT-Creation-Date: 2014-04-08 19:23+0300\n" "PO-Revision-Date: 2013-04-19 10:45+0800\n" "Last-Translator: Sharuzzaman Ahmat Raslan \n" "Language-Team: Malay \n" @@ -19,84 +19,84 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Poedit-SourceCharset: UTF-8\n" -#: array.c:254 +#: array.c:256 #, c-format msgid "from %s" msgstr "dari %s" -#: array.c:354 +#: array.c:357 msgid "attempt to use a scalar value as array" msgstr "cubaan untuk menggunakan nilai skalar sebagai tatasusunan" -#: array.c:356 +#: array.c:359 #, c-format msgid "attempt to use scalar parameter `%s' as an array" msgstr "cubaan untuk menggunakan parameter skalar `%s' sebagai tatasusunan" -#: array.c:359 +#: array.c:362 #, c-format msgid "attempt to use scalar `%s' as an array" msgstr "cubaan untuk menggunakan skalar `%s' sebagai tatasusunan" -#: array.c:406 array.c:573 builtin.c:85 builtin.c:1591 builtin.c:1637 -#: builtin.c:1650 builtin.c:2078 builtin.c:2092 eval.c:1121 eval.c:1125 -#: eval.c:1524 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" msgstr "cubaan untuk menggunakan tatasusunan `%s' dalam konteks skalar" -#: array.c:580 +#: array.c:583 #, c-format msgid "delete: index `%s' not in array `%s'" msgstr "padam: indeks `%s' tiada dalam tatasusunan `%s'" -#: array.c:594 +#: array.c:597 #, c-format msgid "attempt to use scalar `%s[\"%.*s\"]' as an array" msgstr "" -#: array.c:773 +#: array.c:776 msgid "adump: first argument not an array" msgstr "" -#: array.c:812 +#: array.c:815 msgid "asort: second argument not an array" msgstr "" -#: array.c:813 +#: array.c:816 msgid "asorti: second argument not an array" msgstr "" -#: array.c:820 +#: array.c:823 msgid "asort: first argument not an array" msgstr "" -#: array.c:821 +#: array.c:824 msgid "asorti: first argument not an array" msgstr "" -#: array.c:828 +#: array.c:831 msgid "asort: cannot use a subarray of first arg for second arg" msgstr "" -#: array.c:829 +#: array.c:832 msgid "asorti: cannot use a subarray of first arg for second arg" msgstr "" -#: array.c:834 +#: array.c:837 msgid "asort: cannot use a subarray of second arg for first arg" msgstr "" -#: array.c:835 +#: array.c:838 msgid "asorti: cannot use a subarray of second arg for first arg" msgstr "" -#: array.c:1309 +#: array.c:1314 #, c-format msgid "`%s' is invalid as a function name" msgstr "" -#: array.c:1313 +#: array.c:1318 #, c-format msgid "sort comparison function `%s' is not defined" msgstr "" @@ -137,11 +137,11 @@ msgstr "" msgid "duplicate `default' detected in switch body" msgstr "" -#: awkgram.y:796 awkgram.y:3699 +#: awkgram.y:796 awkgram.y:3723 msgid "`break' is not allowed outside a loop or switch" msgstr "" -#: awkgram.y:805 awkgram.y:3691 +#: awkgram.y:805 awkgram.y:3715 msgid "`continue' is not allowed outside a loop" msgstr "" @@ -230,675 +230,685 @@ msgstr "" msgid "invalid subscript expression" msgstr "" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:119 +#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "" -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:151 +#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "" -#: awkgram.y:2092 +#: awkgram.y:2116 msgid "unexpected newline or end of string" msgstr "" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:517 debug.c:533 -#: debug.c:2792 debug.c:5040 +#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 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:2360 awkgram.y:2485 +#: awkgram.y:2384 awkgram.y:2509 #, c-format msgid "can't open shared library `%s' for reading (%s)" msgstr "" -#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:130 debug.c:5191 +#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "" -#: awkgram.y:2371 awkgram.y:2395 +#: awkgram.y:2395 awkgram.y:2419 #, c-format msgid "can't include `%s' and use it as a program file" msgstr "" -#: awkgram.y:2384 +#: awkgram.y:2408 #, c-format msgid "already included source file `%s'" msgstr "" -#: awkgram.y:2385 +#: awkgram.y:2409 #, c-format msgid "already loaded shared library `%s'" msgstr "" -#: awkgram.y:2420 +#: awkgram.y:2444 msgid "@include is a gawk extension" msgstr "" -#: awkgram.y:2426 +#: awkgram.y:2450 msgid "empty filename after @include" msgstr "" -#: awkgram.y:2470 +#: awkgram.y:2494 msgid "@load is a gawk extension" msgstr "" -#: awkgram.y:2476 +#: awkgram.y:2500 msgid "empty filename after @load" msgstr "" -#: awkgram.y:2610 +#: awkgram.y:2634 msgid "empty program text on command line" msgstr "" -#: awkgram.y:2725 +#: awkgram.y:2749 #, c-format msgid "can't read sourcefile `%s' (%s)" msgstr "" -#: awkgram.y:2736 +#: awkgram.y:2760 #, c-format msgid "source file `%s' is empty" msgstr "" -#: awkgram.y:2913 +#: awkgram.y:2937 msgid "source file does not end in newline" msgstr "" -#: awkgram.y:3018 +#: awkgram.y:3042 msgid "unterminated regexp ends with `\\' at end of file" msgstr "" -#: awkgram.y:3042 +#: awkgram.y:3066 #, c-format msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk" msgstr "" -#: awkgram.y:3046 +#: awkgram.y:3070 #, c-format msgid "tawk regex modifier `/.../%c' doesn't work in gawk" msgstr "" -#: awkgram.y:3053 +#: awkgram.y:3077 msgid "unterminated regexp" msgstr "" -#: awkgram.y:3057 +#: awkgram.y:3081 msgid "unterminated regexp at end of file" msgstr "" -#: awkgram.y:3116 +#: awkgram.y:3140 msgid "use of `\\ #...' line continuation is not portable" msgstr "" -#: awkgram.y:3132 +#: awkgram.y:3156 msgid "backslash not last character on line" msgstr "" -#: awkgram.y:3193 +#: awkgram.y:3217 msgid "POSIX does not allow operator `**='" msgstr "" -#: awkgram.y:3195 +#: awkgram.y:3219 msgid "old awk does not support operator `**='" msgstr "" -#: awkgram.y:3204 +#: awkgram.y:3228 msgid "POSIX does not allow operator `**'" msgstr "" -#: awkgram.y:3206 +#: awkgram.y:3230 msgid "old awk does not support operator `**'" msgstr "" -#: awkgram.y:3241 +#: awkgram.y:3265 msgid "operator `^=' is not supported in old awk" msgstr "" -#: awkgram.y:3249 +#: awkgram.y:3273 msgid "operator `^' is not supported in old awk" msgstr "" -#: awkgram.y:3342 awkgram.y:3358 command.y:1178 +#: awkgram.y:3366 awkgram.y:3382 command.y:1178 msgid "unterminated string" msgstr "" -#: awkgram.y:3579 +#: awkgram.y:3603 #, c-format msgid "invalid char '%c' in expression" msgstr "" -#: awkgram.y:3626 +#: awkgram.y:3650 #, c-format msgid "`%s' is a gawk extension" msgstr "" -#: awkgram.y:3631 +#: awkgram.y:3655 #, c-format msgid "POSIX does not allow `%s'" msgstr "" -#: awkgram.y:3639 +#: awkgram.y:3663 #, c-format msgid "`%s' is not supported in old awk" msgstr "" -#: awkgram.y:3729 +#: awkgram.y:3753 msgid "`goto' considered harmful!\n" msgstr "" -#: awkgram.y:3763 +#: awkgram.y:3787 #, c-format msgid "%d is invalid as number of arguments for %s" msgstr "" -#: awkgram.y:3798 +#: awkgram.y:3822 #, c-format msgid "%s: string literal as last arg of substitute has no effect" msgstr "" -#: awkgram.y:3803 +#: awkgram.y:3827 #, c-format msgid "%s third parameter is not a changeable object" msgstr "" -#: awkgram.y:3886 awkgram.y:3889 +#: awkgram.y:3910 awkgram.y:3913 msgid "match: third argument is a gawk extension" msgstr "" -#: awkgram.y:3943 awkgram.y:3946 +#: awkgram.y:3967 awkgram.y:3970 msgid "close: second argument is a gawk extension" msgstr "" -#: awkgram.y:3958 +#: awkgram.y:3982 msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore" msgstr "" -#: awkgram.y:3973 +#: awkgram.y:3997 msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" msgstr "" -#: awkgram.y:3992 +#: awkgram.y:4016 msgid "index: regexp constant as second argument is not allowed" msgstr "" -#: awkgram.y:4045 +#: awkgram.y:4069 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "" -#: awkgram.y:4102 debug.c:4021 debug.c:4064 debug.c:5189 +#: awkgram.y:4126 debug.c:4041 debug.c:4084 debug.c:5204 #, c-format msgid "could not open `%s' for writing (%s)" msgstr "" -#: awkgram.y:4103 +#: awkgram.y:4127 msgid "sending variable list to standard error" msgstr "" -#: awkgram.y:4111 +#: awkgram.y:4135 #, c-format msgid "%s: close failed (%s)" msgstr "" -#: awkgram.y:4136 +#: awkgram.y:4160 msgid "shadow_funcs() called twice!" msgstr "" -#: awkgram.y:4144 +#: awkgram.y:4168 msgid "there were shadowed variables." msgstr "" -#: awkgram.y:4215 +#: awkgram.y:4239 #, c-format msgid "function name `%s' previously defined" msgstr "" -#: awkgram.y:4261 +#: awkgram.y:4285 #, c-format msgid "function `%s': can't use function name as parameter name" msgstr "" -#: awkgram.y:4264 +#: awkgram.y:4288 #, c-format msgid "function `%s': can't use special variable `%s' as a function parameter" msgstr "" -#: awkgram.y:4272 +#: awkgram.y:4296 #, c-format msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d" msgstr "" -#: awkgram.y:4366 awkgram.y:4372 +#: awkgram.y:4383 awkgram.y:4389 #, c-format msgid "function `%s' called but never defined" msgstr "" -#: awkgram.y:4376 +#: awkgram.y:4393 #, c-format msgid "function `%s' defined but never called directly" msgstr "" -#: awkgram.y:4408 +#: awkgram.y:4425 #, c-format msgid "regexp constant for parameter #%d yields boolean value" msgstr "" -#: awkgram.y:4467 +#: awkgram.y:4484 #, c-format msgid "" "function `%s' called with space between name and `(',\n" "or used as a variable or an array" msgstr "" -#: awkgram.y:4703 +#: awkgram.y:4720 msgid "division by zero attempted" msgstr "" -#: awkgram.y:4712 +#: awkgram.y:4729 #, c-format msgid "division by zero attempted in `%%'" msgstr "" -#: builtin.c:128 +#: awkgram.y:5049 +msgid "" +"cannot assign a value to the result of a field post-increment expression" +msgstr "" + +#: awkgram.y:5052 +#, c-format +msgid "invalid target of assignment (opcode %s)" +msgstr "" + +#: builtin.c:133 #, c-format msgid "%s to \"%s\" failed (%s)" msgstr "" -#: builtin.c:129 +#: builtin.c:134 msgid "standard output" msgstr "" -#: builtin.c:143 +#: builtin.c:148 msgid "exp: received non-numeric argument" msgstr "" -#: builtin.c:149 +#: builtin.c:154 #, c-format msgid "exp: argument %g is out of range" msgstr "" -#: builtin.c:224 +#: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" msgstr "" -#: builtin.c:227 +#: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" msgstr "" -#: builtin.c:239 +#: builtin.c:244 #, c-format msgid "fflush: `%s' is not an open file, pipe or co-process" msgstr "" -#: builtin.c:357 +#: builtin.c:362 msgid "index: received non-string first argument" msgstr "" -#: builtin.c:359 +#: builtin.c:364 msgid "index: received non-string second argument" msgstr "" -#: builtin.c:483 mpfr.c:757 +#: builtin.c:488 mpfr.c:757 msgid "int: received non-numeric argument" msgstr "" -#: builtin.c:520 +#: builtin.c:525 msgid "length: received array argument" msgstr "" -#: builtin.c:523 +#: builtin.c:528 msgid "`length(array)' is a gawk extension" msgstr "" -#: builtin.c:539 +#: builtin.c:544 msgid "length: received non-string argument" msgstr "" -#: builtin.c:570 +#: builtin.c:575 msgid "log: received non-numeric argument" msgstr "" -#: builtin.c:573 +#: builtin.c:578 #, c-format msgid "log: received negative argument %g" msgstr "" -#: builtin.c:771 builtin.c:776 +#: builtin.c:776 builtin.c:781 msgid "fatal: must use `count$' on all formats or none" msgstr "" -#: builtin.c:846 +#: builtin.c:851 #, c-format msgid "field width is ignored for `%%' specifier" msgstr "" -#: builtin.c:848 +#: builtin.c:853 #, c-format msgid "precision is ignored for `%%' specifier" msgstr "" -#: builtin.c:850 +#: builtin.c:855 #, c-format msgid "field width and precision are ignored for `%%' specifier" msgstr "" -#: builtin.c:901 +#: builtin.c:906 msgid "fatal: `$' is not permitted in awk formats" msgstr "" -#: builtin.c:910 +#: builtin.c:915 msgid "fatal: arg count with `$' must be > 0" msgstr "" -#: builtin.c:914 +#: builtin.c:919 #, c-format msgid "fatal: arg count %ld greater than total number of supplied arguments" msgstr "" -#: builtin.c:918 +#: builtin.c:923 msgid "fatal: `$' not permitted after period in format" msgstr "" -#: builtin.c:934 +#: builtin.c:939 msgid "fatal: no `$' supplied for positional field width or precision" msgstr "" -#: builtin.c:1006 +#: builtin.c:1009 msgid "`l' is meaningless in awk formats; ignored" msgstr "" -#: builtin.c:1010 +#: builtin.c:1013 msgid "fatal: `l' is not permitted in POSIX awk formats" msgstr "" -#: builtin.c:1023 +#: builtin.c:1026 msgid "`L' is meaningless in awk formats; ignored" msgstr "" -#: builtin.c:1027 +#: builtin.c:1030 msgid "fatal: `L' is not permitted in POSIX awk formats" msgstr "" -#: builtin.c:1040 +#: builtin.c:1043 msgid "`h' is meaningless in awk formats; ignored" msgstr "" -#: builtin.c:1044 +#: builtin.c:1047 msgid "fatal: `h' is not permitted in POSIX awk formats" msgstr "" -#: builtin.c:1439 +#: builtin.c:1463 #, c-format msgid "[s]printf: value %g is out of range for `%%%c' format" msgstr "" -#: builtin.c:1537 +#: builtin.c:1561 #, c-format msgid "ignoring unknown format specifier character `%c': no argument converted" msgstr "" -#: builtin.c:1542 +#: builtin.c:1566 msgid "fatal: not enough arguments to satisfy format string" msgstr "" -#: builtin.c:1544 +#: builtin.c:1568 msgid "^ ran out for this one" msgstr "" -#: builtin.c:1551 +#: builtin.c:1575 msgid "[s]printf: format specifier does not have control letter" msgstr "" -#: builtin.c:1554 +#: builtin.c:1578 msgid "too many arguments supplied for format string" msgstr "" -#: builtin.c:1610 +#: builtin.c:1634 msgid "sprintf: no arguments" msgstr "" -#: builtin.c:1633 builtin.c:1644 +#: builtin.c:1657 builtin.c:1668 msgid "printf: no arguments" msgstr "" -#: builtin.c:1687 +#: builtin.c:1711 msgid "sqrt: received non-numeric argument" msgstr "" -#: builtin.c:1691 +#: builtin.c:1715 #, c-format msgid "sqrt: called with negative argument %g" msgstr "" -#: builtin.c:1722 +#: builtin.c:1746 #, c-format msgid "substr: length %g is not >= 1" msgstr "" -#: builtin.c:1724 +#: builtin.c:1748 #, c-format msgid "substr: length %g is not >= 0" msgstr "" -#: builtin.c:1731 +#: builtin.c:1755 #, c-format msgid "substr: non-integer length %g will be truncated" msgstr "" -#: builtin.c:1736 +#: builtin.c:1760 #, c-format msgid "substr: length %g too big for string indexing, truncating to %g" msgstr "" -#: builtin.c:1748 +#: builtin.c:1772 #, c-format msgid "substr: start index %g is invalid, using 1" msgstr "" -#: builtin.c:1753 +#: builtin.c:1777 #, c-format msgid "substr: non-integer start index %g will be truncated" msgstr "" -#: builtin.c:1778 +#: builtin.c:1802 msgid "substr: source string is zero length" msgstr "" -#: builtin.c:1794 +#: builtin.c:1818 #, c-format msgid "substr: start index %g is past end of string" msgstr "" -#: builtin.c:1802 +#: builtin.c:1826 #, c-format msgid "" "substr: length %g at start index %g exceeds length of first argument (%lu)" msgstr "" -#: builtin.c:1876 +#: builtin.c:1900 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" msgstr "" -#: builtin.c:1899 +#: builtin.c:1923 msgid "strftime: received non-numeric second argument" msgstr "" -#: builtin.c:1903 +#: builtin.c:1927 msgid "strftime: second argument less than 0 or too big for time_t" msgstr "" -#: builtin.c:1910 +#: builtin.c:1934 msgid "strftime: received non-string first argument" msgstr "" -#: builtin.c:1917 +#: builtin.c:1941 msgid "strftime: received empty format string" msgstr "" -#: builtin.c:1983 +#: builtin.c:2007 msgid "mktime: received non-string argument" msgstr "" -#: builtin.c:2000 +#: builtin.c:2024 msgid "mktime: at least one of the values is out of the default range" msgstr "" -#: builtin.c:2035 +#: builtin.c:2059 msgid "'system' function not allowed in sandbox mode" msgstr "" -#: builtin.c:2040 +#: builtin.c:2064 msgid "system: received non-string argument" msgstr "" -#: builtin.c:2160 +#: builtin.c:2184 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "" -#: builtin.c:2247 +#: builtin.c:2271 msgid "tolower: received non-string argument" msgstr "" -#: builtin.c:2281 +#: builtin.c:2305 msgid "toupper: received non-string argument" msgstr "" -#: builtin.c:2317 mpfr.c:672 +#: builtin.c:2341 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "" -#: builtin.c:2319 mpfr.c:674 +#: builtin.c:2343 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "" -#: builtin.c:2338 +#: builtin.c:2362 msgid "sin: received non-numeric argument" msgstr "" -#: builtin.c:2354 +#: builtin.c:2378 msgid "cos: received non-numeric argument" msgstr "" -#: builtin.c:2407 mpfr.c:1156 +#: builtin.c:2431 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "" -#: builtin.c:2438 +#: builtin.c:2462 msgid "match: third argument is not an array" msgstr "" -#: builtin.c:2710 +#: builtin.c:2734 msgid "gensub: third argument of 0 treated as 1" msgstr "" -#: builtin.c:3003 +#: builtin.c:3030 msgid "lshift: received non-numeric first argument" msgstr "" -#: builtin.c:3005 +#: builtin.c:3032 msgid "lshift: received non-numeric second argument" msgstr "" -#: builtin.c:3011 +#: builtin.c:3038 #, c-format msgid "lshift(%f, %f): negative values will give strange results" msgstr "" -#: builtin.c:3013 +#: builtin.c:3040 #, c-format msgid "lshift(%f, %f): fractional values will be truncated" msgstr "" -#: builtin.c:3015 +#: builtin.c:3042 #, c-format msgid "lshift(%f, %f): too large shift value will give strange results" msgstr "" -#: builtin.c:3040 +#: builtin.c:3067 msgid "rshift: received non-numeric first argument" msgstr "" -#: builtin.c:3042 +#: builtin.c:3069 msgid "rshift: received non-numeric second argument" msgstr "" -#: builtin.c:3048 +#: builtin.c:3075 #, c-format msgid "rshift(%f, %f): negative values will give strange results" msgstr "" -#: builtin.c:3050 +#: builtin.c:3077 #, c-format msgid "rshift(%f, %f): fractional values will be truncated" msgstr "" -#: builtin.c:3052 +#: builtin.c:3079 #, c-format msgid "rshift(%f, %f): too large shift value will give strange results" msgstr "" -#: builtin.c:3077 mpfr.c:968 +#: builtin.c:3104 mpfr.c:968 msgid "and: called with less than two arguments" msgstr "" -#: builtin.c:3082 +#: builtin.c:3109 #, c-format msgid "and: argument %d is non-numeric" msgstr "" -#: builtin.c:3086 +#: builtin.c:3113 #, c-format msgid "and: argument %d negative value %g will give strange results" msgstr "" -#: builtin.c:3109 mpfr.c:1000 +#: builtin.c:3136 mpfr.c:1000 msgid "or: called with less than two arguments" msgstr "" -#: builtin.c:3114 +#: builtin.c:3141 #, c-format msgid "or: argument %d is non-numeric" msgstr "" -#: builtin.c:3118 +#: builtin.c:3145 #, c-format msgid "or: argument %d negative value %g will give strange results" msgstr "" -#: builtin.c:3140 mpfr.c:1031 +#: builtin.c:3167 mpfr.c:1031 msgid "xor: called with less than two arguments" msgstr "" -#: builtin.c:3146 +#: builtin.c:3173 #, c-format msgid "xor: argument %d is non-numeric" msgstr "" -#: builtin.c:3150 +#: builtin.c:3177 #, c-format msgid "xor: argument %d negative value %g will give strange results" msgstr "" -#: builtin.c:3175 mpfr.c:787 +#: builtin.c:3202 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "" -#: builtin.c:3181 +#: builtin.c:3208 #, c-format msgid "compl(%f): negative value will give strange results" msgstr "" -#: builtin.c:3183 +#: builtin.c:3210 #, c-format msgid "compl(%f): fractional value will be truncated" msgstr "" -#: builtin.c:3352 +#: builtin.c:3379 #, c-format msgid "dcgettext: `%s' is not a valid locale category" msgstr "" @@ -1020,8 +1030,8 @@ msgstr "" #: command.y:823 msgid "" -"commands [num] - starts a list of commands to be executed at a breakpoint" -"(watchpoint) hit." +"commands [num] - starts a list of commands to be executed at a " +"breakpoint(watchpoint) hit." msgstr "" #: command.y:825 @@ -1178,7 +1188,7 @@ msgstr "" msgid "watch var - set a watchpoint for a variable." msgstr "" -#: command.y:1011 debug.c:395 msg.c:128 +#: command.y:1011 debug.c:401 msg.c:135 #, c-format msgid "error: " msgstr "" @@ -1216,552 +1226,552 @@ msgstr "" msgid "undefined command: %s\n" msgstr "" -#: debug.c:246 +#: debug.c:252 msgid "set or show the number of lines to keep in history file." msgstr "" -#: debug.c:248 +#: debug.c:254 msgid "set or show the list command window size." msgstr "" -#: debug.c:250 +#: debug.c:256 msgid "set or show gawk output file." msgstr "" -#: debug.c:252 +#: debug.c:258 msgid "set or show debugger prompt." msgstr "" -#: debug.c:254 +#: debug.c:260 msgid "(un)set or show saving of command history (value=on|off)." msgstr "" -#: debug.c:256 +#: debug.c:262 msgid "(un)set or show saving of options (value=on|off)." msgstr "" -#: debug.c:258 +#: debug.c:264 msgid "(un)set or show instruction tracing (value=on|off)." msgstr "" -#: debug.c:339 +#: debug.c:345 msgid "program not running." msgstr "" -#: debug.c:442 debug.c:597 +#: debug.c:448 debug.c:606 #, c-format msgid "can't read source file `%s' (%s)" msgstr "" -#: debug.c:447 +#: debug.c:453 #, c-format msgid "source file `%s' is empty.\n" msgstr "" -#: debug.c:474 +#: debug.c:480 msgid "no current source file." msgstr "" -#: debug.c:499 +#: debug.c:505 #, c-format msgid "cannot find source file named `%s' (%s)" msgstr "" -#: debug.c:523 +#: debug.c:529 #, c-format msgid "WARNING: source file `%s' modified since program compilation.\n" msgstr "" -#: debug.c:542 +#: debug.c:551 #, c-format msgid "line number %d out of range; `%s' has %d lines" msgstr "" -#: debug.c:602 +#: debug.c:611 #, c-format msgid "unexpected eof while reading file `%s', line %d" msgstr "" -#: debug.c:611 +#: debug.c:620 #, c-format msgid "source file `%s' modified since start of program execution" msgstr "" -#: debug.c:723 +#: debug.c:732 #, c-format msgid "Current source file: %s\n" msgstr "" -#: debug.c:724 +#: debug.c:733 #, c-format msgid "Number of lines: %d\n" msgstr "" -#: debug.c:731 +#: debug.c:740 #, c-format msgid "Source file (lines): %s (%d)\n" msgstr "" -#: debug.c:745 +#: debug.c:754 msgid "" "Number Disp Enabled Location\n" "\n" msgstr "" -#: debug.c:756 +#: debug.c:765 #, c-format msgid "\tno of hits = %ld\n" msgstr "" -#: debug.c:758 +#: debug.c:767 #, c-format msgid "\tignore next %ld hit(s)\n" msgstr "" -#: debug.c:760 debug.c:900 +#: debug.c:769 debug.c:909 #, c-format msgid "\tstop condition: %s\n" msgstr "" -#: debug.c:762 debug.c:902 +#: debug.c:771 debug.c:911 msgid "\tcommands:\n" msgstr "" -#: debug.c:784 +#: debug.c:793 #, c-format msgid "Current frame: " msgstr "" -#: debug.c:787 +#: debug.c:796 #, c-format msgid "Called by frame: " msgstr "" -#: debug.c:791 +#: debug.c:800 #, c-format msgid "Caller of frame: " msgstr "" -#: debug.c:809 +#: debug.c:818 #, c-format msgid "None in main().\n" msgstr "" -#: debug.c:839 +#: debug.c:848 msgid "No arguments.\n" msgstr "" -#: debug.c:840 +#: debug.c:849 msgid "No locals.\n" msgstr "" -#: debug.c:848 +#: debug.c:857 msgid "" "All defined variables:\n" "\n" msgstr "" -#: debug.c:858 +#: debug.c:867 msgid "" "All defined functions:\n" "\n" msgstr "" -#: debug.c:877 +#: debug.c:886 msgid "" "Auto-display variables:\n" "\n" msgstr "" -#: debug.c:880 +#: debug.c:889 msgid "" "Watch variables:\n" "\n" msgstr "" -#: debug.c:1020 +#: debug.c:1029 #, c-format msgid "no symbol `%s' in current context\n" msgstr "" -#: debug.c:1032 debug.c:1418 +#: debug.c:1041 debug.c:1427 #, c-format msgid "`%s' is not an array\n" msgstr "" -#: debug.c:1046 +#: debug.c:1055 #, c-format msgid "$%ld = uninitialized field\n" msgstr "" -#: debug.c:1067 +#: debug.c:1076 #, c-format msgid "array `%s' is empty\n" msgstr "" -#: debug.c:1110 debug.c:1162 +#: debug.c:1119 debug.c:1171 #, c-format msgid "[\"%s\"] not in array `%s'\n" msgstr "" -#: debug.c:1166 +#: debug.c:1175 #, c-format msgid "`%s[\"%s\"]' is not an array\n" msgstr "" -#: debug.c:1227 debug.c:4949 +#: debug.c:1236 debug.c:4964 #, c-format msgid "`%s' is not a scalar variable" msgstr "" -#: debug.c:1249 debug.c:4979 +#: debug.c:1258 debug.c:4994 #, c-format msgid "attempt to use array `%s[\"%s\"]' in a scalar context" msgstr "" -#: debug.c:1271 debug.c:4990 +#: debug.c:1280 debug.c:5005 #, c-format msgid "attempt to use scalar `%s[\"%s\"]' as array" msgstr "" -#: debug.c:1414 +#: debug.c:1423 #, c-format msgid "`%s' is a function" msgstr "" -#: debug.c:1456 +#: debug.c:1465 #, c-format msgid "watchpoint %d is unconditional\n" msgstr "" -#: debug.c:1490 +#: debug.c:1499 #, c-format msgid "No display item numbered %ld" msgstr "" -#: debug.c:1493 +#: debug.c:1502 #, c-format msgid "No watch item numbered %ld" msgstr "" -#: debug.c:1519 +#: debug.c:1528 #, c-format msgid "%d: [\"%s\"] not in array `%s'\n" msgstr "" -#: debug.c:1758 +#: debug.c:1767 msgid "attempt to use scalar value as array" msgstr "" -#: debug.c:1847 +#: debug.c:1856 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" msgstr "" -#: debug.c:1858 +#: debug.c:1867 #, c-format msgid "Display %d deleted because parameter is out of scope.\n" msgstr "" -#: debug.c:1891 +#: debug.c:1900 #, c-format msgid " in file `%s', line %d\n" msgstr "" -#: debug.c:1912 +#: debug.c:1921 #, c-format msgid " at `%s':%d" msgstr "" -#: debug.c:1928 debug.c:1991 +#: debug.c:1937 debug.c:2000 #, c-format msgid "#%ld\tin " msgstr "" -#: debug.c:1965 +#: debug.c:1974 #, c-format msgid "More stack frames follow ...\n" msgstr "" -#: debug.c:2008 +#: debug.c:2017 msgid "invalid frame number" msgstr "" -#: debug.c:2180 +#: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" msgstr "" -#: debug.c:2187 +#: debug.c:2207 #, c-format msgid "Note: breakpoint %d (enabled), also set at %s:%d" msgstr "" -#: debug.c:2194 +#: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" msgstr "" -#: debug.c:2201 +#: debug.c:2221 #, c-format msgid "Note: breakpoint %d (disabled), also set at %s:%d" msgstr "" -#: debug.c:2218 +#: debug.c:2238 #, c-format msgid "Breakpoint %d set at file `%s', line %d\n" msgstr "" -#: debug.c:2320 +#: debug.c:2340 #, c-format msgid "Can't set breakpoint in file `%s'\n" msgstr "" -#: debug.c:2349 debug.c:2472 debug.c:3330 +#: debug.c:2369 debug.c:2492 debug.c:3350 #, c-format msgid "line number %d in file `%s' out of range" msgstr "" -#: debug.c:2353 +#: debug.c:2373 #, c-format msgid "Can't find rule!!!\n" msgstr "" -#: debug.c:2355 +#: debug.c:2375 #, c-format msgid "Can't set breakpoint at `%s':%d\n" msgstr "" -#: debug.c:2367 +#: debug.c:2387 #, c-format msgid "Can't set breakpoint in function `%s'\n" msgstr "" -#: debug.c:2383 +#: debug.c:2403 #, c-format msgid "breakpoint %d set at file `%s', line %d is unconditional\n" msgstr "" -#: debug.c:2488 debug.c:2510 +#: debug.c:2508 debug.c:2530 #, c-format msgid "Deleted breakpoint %d" msgstr "" -#: debug.c:2494 +#: debug.c:2514 #, c-format msgid "No breakpoint(s) at entry to function `%s'\n" msgstr "" -#: debug.c:2521 +#: debug.c:2541 #, c-format msgid "No breakpoint at file `%s', line #%d\n" msgstr "" -#: debug.c:2576 debug.c:2617 debug.c:2637 debug.c:2680 +#: debug.c:2596 debug.c:2637 debug.c:2657 debug.c:2700 msgid "invalid breakpoint number" msgstr "" -#: debug.c:2592 +#: debug.c:2612 msgid "Delete all breakpoints? (y or n) " msgstr "" -#: debug.c:2593 debug.c:2903 debug.c:2956 +#: debug.c:2613 debug.c:2923 debug.c:2976 msgid "y" msgstr "" -#: debug.c:2642 +#: debug.c:2662 #, c-format msgid "Will ignore next %ld crossing(s) of breakpoint %d.\n" msgstr "" -#: debug.c:2646 +#: debug.c:2666 #, c-format msgid "Will stop next time breakpoint %d is reached.\n" msgstr "" -#: debug.c:2763 +#: debug.c:2783 #, c-format msgid "Can only debug programs provided with the `-f' option.\n" msgstr "" -#: debug.c:2888 +#: debug.c:2908 #, c-format msgid "Failed to restart debugger" msgstr "" -#: debug.c:2902 +#: debug.c:2922 msgid "Program already running. Restart from beginning (y/n)? " msgstr "" -#: debug.c:2906 +#: debug.c:2926 #, c-format msgid "Program not restarted\n" msgstr "" -#: debug.c:2916 +#: debug.c:2936 #, c-format msgid "error: cannot restart, operation not allowed\n" msgstr "" -#: debug.c:2922 +#: debug.c:2942 #, c-format msgid "error (%s): cannot restart, ignoring rest of the commands\n" msgstr "" -#: debug.c:2930 +#: debug.c:2950 #, c-format msgid "Starting program: \n" msgstr "" -#: debug.c:2939 +#: debug.c:2959 #, c-format msgid "Program exited %s with exit value: %d\n" msgstr "" -#: debug.c:2955 +#: debug.c:2975 msgid "The program is running. Exit anyway (y/n)? " msgstr "" -#: debug.c:2990 +#: debug.c:3010 #, c-format msgid "Not stopped at any breakpoint; argument ignored.\n" msgstr "" -#: debug.c:2995 +#: debug.c:3015 #, c-format msgid "invalid breakpoint number %d." msgstr "" -#: debug.c:3000 +#: debug.c:3020 #, c-format msgid "Will ignore next %ld crossings of breakpoint %d.\n" msgstr "" -#: debug.c:3187 +#: debug.c:3207 #, c-format msgid "'finish' not meaningful in the outermost frame main()\n" msgstr "" -#: debug.c:3192 +#: debug.c:3212 #, c-format msgid "Run till return from " msgstr "" -#: debug.c:3235 +#: debug.c:3255 #, c-format msgid "'return' not meaningful in the outermost frame main()\n" msgstr "" -#: debug.c:3349 +#: debug.c:3369 #, c-format msgid "Can't find specified location in function `%s'\n" msgstr "" -#: debug.c:3357 +#: debug.c:3377 #, c-format msgid "invalid source line %d in file `%s'" msgstr "" -#: debug.c:3372 +#: debug.c:3392 #, c-format msgid "Can't find specified location %d in file `%s'\n" msgstr "" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "element not in array\n" msgstr "" -#: debug.c:3404 +#: debug.c:3424 #, c-format msgid "untyped variable\n" msgstr "" -#: debug.c:3446 +#: debug.c:3466 #, c-format msgid "Stopping in %s ...\n" msgstr "" -#: debug.c:3523 +#: debug.c:3543 #, c-format msgid "'finish' not meaningful with non-local jump '%s'\n" msgstr "" -#: debug.c:3530 +#: debug.c:3550 #, c-format msgid "'until' not meaningful with non-local jump '%s'\n" msgstr "" -#: debug.c:4165 +#: debug.c:4185 msgid "\t------[Enter] to continue or q [Enter] to quit------" msgstr "" -#: debug.c:4166 +#: debug.c:4186 msgid "q" msgstr "" -#: debug.c:4986 +#: debug.c:5001 #, c-format msgid "[\"%s\"] not in array `%s'" msgstr "" -#: debug.c:5192 +#: debug.c:5207 #, c-format msgid "sending output to stdout\n" msgstr "" -#: debug.c:5232 +#: debug.c:5247 msgid "invalid number" msgstr "" -#: debug.c:5366 +#: debug.c:5381 #, c-format msgid "`%s' not allowed in current context; statement ignored" msgstr "" -#: debug.c:5374 +#: debug.c:5389 msgid "`return' not allowed in current context; statement ignored" msgstr "" -#: debug.c:5575 +#: debug.c:5590 #, c-format msgid "No symbol `%s' in current context" msgstr "" -#: 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:1192 +#: 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 msgid "unbalanced [" msgstr "" -#: dfa.c:1052 +#: dfa.c:1174 msgid "invalid character class" msgstr "" -#: dfa.c:1229 +#: dfa.c:1316 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "" -#: dfa.c:1281 +#: dfa.c:1366 msgid "unfinished \\ escape" msgstr "" -#: dfa.c:1428 regcomp.c:161 +#: dfa.c:1513 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "" -#: dfa.c:1431 regcomp.c:176 +#: dfa.c:1516 regcomp.c:176 msgid "Regular expression too big" msgstr "" -#: dfa.c:1816 +#: dfa.c:1936 msgid "unbalanced (" msgstr "" -#: dfa.c:1943 +#: dfa.c:2062 msgid "no syntax specified" msgstr "" -#: dfa.c:1951 +#: dfa.c:2070 msgid "unbalanced )" msgstr "" @@ -1780,11 +1790,11 @@ msgstr "" msgid "opcode %s not an operator or keyword" msgstr "" -#: eval.c:471 +#: eval.c:472 msgid "buffer overflow in genflags2str" msgstr "" -#: eval.c:674 +#: eval.c:675 #, c-format msgid "" "\n" @@ -1792,71 +1802,71 @@ msgid "" "\n" msgstr "" -#: eval.c:703 +#: eval.c:704 msgid "`IGNORECASE' is a gawk extension" msgstr "" -#: eval.c:735 +#: eval.c:736 msgid "`BINMODE' is a gawk extension" msgstr "" -#: eval.c:793 +#: eval.c:794 #, c-format msgid "BINMODE value `%s' is invalid, treated as 3" msgstr "" -#: eval.c:884 +#: eval.c:885 #, c-format msgid "bad `%sFMT' specification `%s'" msgstr "" -#: eval.c:968 +#: eval.c:969 msgid "turning off `--lint' due to assignment to `LINT'" msgstr "" -#: eval.c:1146 +#: eval.c:1147 #, c-format msgid "reference to uninitialized argument `%s'" msgstr "" -#: eval.c:1147 +#: eval.c:1148 #, c-format msgid "reference to uninitialized variable `%s'" msgstr "" -#: eval.c:1165 +#: eval.c:1166 msgid "attempt to field reference from non-numeric value" msgstr "" -#: eval.c:1167 +#: eval.c:1168 msgid "attempt to field reference from null string" msgstr "" -#: eval.c:1175 +#: eval.c:1176 #, c-format msgid "attempt to access field %ld" msgstr "" -#: eval.c:1184 +#: eval.c:1185 #, c-format msgid "reference to uninitialized field `$%ld'" msgstr "" -#: eval.c:1271 +#: eval.c:1272 #, c-format msgid "function `%s' called with more arguments than declared" msgstr "" -#: eval.c:1466 +#: eval.c:1473 #, c-format msgid "unwind_stack: unexpected type `%s'" msgstr "" -#: eval.c:1562 +#: eval.c:1569 msgid "division by zero attempted in `/='" msgstr "" -#: eval.c:1569 +#: eval.c:1576 #, c-format msgid "division by zero attempted in `%%='" msgstr "" @@ -1869,7 +1879,7 @@ msgstr "" msgid "-l / @load are gawk extensions" msgstr "" -#: ext.c:95 ext.c:177 +#: ext.c:95 msgid "load_ext: received NULL lib_name" msgstr "" @@ -1898,6 +1908,10 @@ msgstr "" msgid "`extension' is a gawk extension" msgstr "" +#: ext.c:177 +msgid "extension: received NULL lib_name" +msgstr "" + #: ext.c:180 #, c-format msgid "extension: cannot open library `%s' (%s)" @@ -1918,36 +1932,36 @@ msgstr "" msgid "make_builtin: missing function name" msgstr "" -#: ext.c:238 +#: ext.c:236 #, c-format msgid "make_builtin: can't redefine function `%s'" msgstr "" -#: ext.c:242 +#: ext.c:240 #, c-format msgid "make_builtin: function `%s' already defined" msgstr "" -#: ext.c:246 +#: ext.c:244 #, c-format msgid "make_builtin: function name `%s' previously defined" msgstr "" -#: ext.c:248 +#: ext.c:246 #, c-format msgid "make_builtin: can't use gawk built-in `%s' as function name" msgstr "" -#: ext.c:251 ext.c:304 +#: ext.c:249 ext.c:304 #, c-format msgid "make_builtin: negative argument count for function `%s'" msgstr "" -#: ext.c:278 +#: ext.c:276 msgid "extension: missing function name" msgstr "" -#: ext.c:283 +#: ext.c:279 ext.c:283 #, c-format msgid "extension: illegal character `%c' in function name `%s'" msgstr "" @@ -1972,139 +1986,143 @@ msgstr "" msgid "extension: can't use gawk built-in `%s' as function name" msgstr "" -#: ext.c:374 +#: ext.c:375 #, c-format msgid "function `%s' defined to take no more than %d argument(s)" msgstr "" -#: ext.c:377 +#: ext.c:378 #, c-format msgid "function `%s': missing argument #%d" msgstr "" -#: ext.c:394 +#: ext.c:395 #, c-format msgid "function `%s': argument #%d: attempt to use scalar as an array" msgstr "" -#: ext.c:398 +#: ext.c:399 #, c-format msgid "function `%s': argument #%d: attempt to use array as a scalar" msgstr "" -#: ext.c:412 +#: ext.c:413 msgid "dynamic loading of library not supported" msgstr "" -#: extension/filefuncs.c:97 +#: extension/filefuncs.c:159 msgid "chdir: called with incorrect number of arguments, expecting 1" msgstr "" -#: extension/filefuncs.c:343 +#: extension/filefuncs.c:439 #, c-format msgid "stat: unable to read symbolic link `%s'" msgstr "" -#: extension/filefuncs.c:376 +#: extension/filefuncs.c:472 msgid "stat: called with wrong number of arguments" msgstr "" -#: extension/filefuncs.c:383 +#: extension/filefuncs.c:479 msgid "stat: bad parameters" msgstr "" -#: extension/filefuncs.c:437 +#: extension/filefuncs.c:533 #, c-format msgid "fts init: could not create variable %s" msgstr "" -#: extension/filefuncs.c:460 +#: extension/filefuncs.c:554 +msgid "fts is not supported on this system" +msgstr "" + +#: extension/filefuncs.c:573 msgid "fill_stat_element: could not create array" msgstr "" -#: extension/filefuncs.c:469 +#: extension/filefuncs.c:582 msgid "fill_stat_element: could not set element" msgstr "" -#: extension/filefuncs.c:484 +#: extension/filefuncs.c:597 msgid "fill_path_element: could not set element" msgstr "" -#: extension/filefuncs.c:500 +#: extension/filefuncs.c:613 msgid "fill_error_element: could not set element" msgstr "" -#: extension/filefuncs.c:547 extension/filefuncs.c:594 +#: extension/filefuncs.c:660 extension/filefuncs.c:707 msgid "fts-process: could not create array" msgstr "" -#: extension/filefuncs.c:557 extension/filefuncs.c:604 -#: extension/filefuncs.c:622 +#: extension/filefuncs.c:670 extension/filefuncs.c:717 +#: extension/filefuncs.c:735 msgid "fts-process: could not set element" msgstr "" -#: extension/filefuncs.c:671 +#: extension/filefuncs.c:784 msgid "fts: called with incorrect number of arguments, expecting 3" msgstr "" -#: extension/filefuncs.c:674 +#: extension/filefuncs.c:787 msgid "fts: bad first parameter" msgstr "" -#: extension/filefuncs.c:680 +#: extension/filefuncs.c:793 msgid "fts: bad second parameter" msgstr "" -#: extension/filefuncs.c:686 +#: extension/filefuncs.c:799 msgid "fts: bad third parameter" msgstr "" -#: extension/filefuncs.c:693 +#: extension/filefuncs.c:806 msgid "fts: could not flatten array\n" msgstr "" -#: extension/filefuncs.c:711 +#: extension/filefuncs.c:824 msgid "fts: ignoring sneaky FTS_NOSTAT flag. nyah, nyah, nyah." msgstr "" -#: extension/filefuncs.c:728 +#: extension/filefuncs.c:841 msgid "fts: clear_array() failed\n" msgstr "" -#: extension/fnmatch.c:98 +#: extension/fnmatch.c:112 msgid "fnmatch: called with less than three arguments" msgstr "" -#: extension/fnmatch.c:101 +#: extension/fnmatch.c:115 msgid "fnmatch: called with more than three arguments" msgstr "" -#: extension/fnmatch.c:104 +#: extension/fnmatch.c:118 msgid "fnmatch: could not get first argument" msgstr "" -#: extension/fnmatch.c:109 +#: extension/fnmatch.c:123 msgid "fnmatch: could not get second argument" msgstr "" -#: extension/fnmatch.c:114 +#: extension/fnmatch.c:128 msgid "fnmatch: could not get third argument" msgstr "" -#: extension/fnmatch.c:127 +#: extension/fnmatch.c:141 msgid "fnmatch is not implemented on this system\n" msgstr "" -#: extension/fnmatch.c:159 +#: extension/fnmatch.c:173 msgid "fnmatch init: could not add FNM_NOMATCH variable" msgstr "" -#: extension/fnmatch.c:169 +#: extension/fnmatch.c:183 #, c-format msgid "fnmatch init: could not set array element %s" msgstr "" -#: extension/fnmatch.c:179 +#: extension/fnmatch.c:193 msgid "fnmatch init: could not install FNM array" msgstr "" @@ -2128,88 +2146,88 @@ msgstr "" msgid "wait: called with too many arguments" msgstr "" -#: extension/inplace.c:110 +#: extension/inplace.c:130 msgid "inplace_begin: in-place editing already active" msgstr "" -#: extension/inplace.c:113 extension/inplace.c:187 +#: extension/inplace.c:133 extension/inplace.c:207 #, c-format msgid "inplace_begin: expects 2 arguments but called with %d" msgstr "" -#: extension/inplace.c:116 +#: extension/inplace.c:136 msgid "inplace_begin: cannot retrieve 1st argument as a string filename" msgstr "" -#: extension/inplace.c:124 +#: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" msgstr "" -#: extension/inplace.c:131 +#: extension/inplace.c:151 #, c-format msgid "inplace_begin: Cannot stat `%s' (%s)" msgstr "" -#: extension/inplace.c:138 +#: extension/inplace.c:158 #, c-format msgid "inplace_begin: `%s' is not a regular file" msgstr "" -#: extension/inplace.c:149 +#: extension/inplace.c:169 #, c-format msgid "inplace_begin: mkstemp(`%s') failed (%s)" msgstr "" -#: extension/inplace.c:158 +#: extension/inplace.c:178 #, c-format msgid "inplace_begin: chmod failed (%s)" msgstr "" -#: extension/inplace.c:165 +#: extension/inplace.c:185 #, c-format msgid "inplace_begin: dup(stdout) failed (%s)" msgstr "" -#: extension/inplace.c:168 +#: extension/inplace.c:188 #, c-format msgid "inplace_begin: dup2(%d, stdout) failed (%s)" msgstr "" -#: extension/inplace.c:171 +#: extension/inplace.c:191 #, c-format msgid "inplace_begin: close(%d) failed (%s)" msgstr "" -#: extension/inplace.c:190 +#: extension/inplace.c:210 msgid "inplace_end: cannot retrieve 1st argument as a string filename" msgstr "" -#: extension/inplace.c:197 +#: extension/inplace.c:217 msgid "inplace_end: in-place editing not active" msgstr "" -#: extension/inplace.c:203 +#: extension/inplace.c:223 #, c-format msgid "inplace_end: dup2(%d, stdout) failed (%s)" msgstr "" -#: extension/inplace.c:206 +#: extension/inplace.c:226 #, c-format msgid "inplace_end: close(%d) failed (%s)" msgstr "" -#: extension/inplace.c:210 +#: extension/inplace.c:230 #, c-format msgid "inplace_end: fsetpos(stdout) failed (%s)" msgstr "" -#: extension/inplace.c:223 +#: extension/inplace.c:243 #, c-format msgid "inplace_end: link(`%s', `%s') failed (%s)" msgstr "" -#: extension/inplace.c:229 +#: extension/inplace.c:253 #, c-format msgid "inplace_end: rename(`%s', `%s') failed (%s)" msgstr "" @@ -2238,165 +2256,165 @@ msgstr "" msgid "chr: called with inappropriate argument(s)" msgstr "" -#: extension/readdir.c:203 +#: extension/readdir.c:281 #, c-format msgid "dir_take_control_of: opendir/fdopendir failed: %s" msgstr "" -#: extension/readfile.c:84 +#: extension/readfile.c:113 msgid "readfile: called with too many arguments" msgstr "" -#: extension/readfile.c:118 +#: extension/readfile.c:137 msgid "readfile: called with no arguments" msgstr "" -#: extension/rwarray.c:120 +#: extension/rwarray.c:124 msgid "writea: called with too many arguments" msgstr "" -#: extension/rwarray.c:127 +#: extension/rwarray.c:131 #, c-format msgid "do_writea: argument 0 is not a string\n" msgstr "" -#: extension/rwarray.c:133 +#: extension/rwarray.c:137 #, c-format msgid "do_writea: argument 1 is not an array\n" msgstr "" -#: extension/rwarray.c:180 +#: extension/rwarray.c:184 #, c-format msgid "write_array: could not flatten array\n" msgstr "" -#: extension/rwarray.c:194 +#: extension/rwarray.c:198 #, c-format msgid "write_array: could not release flattened array\n" msgstr "" -#: extension/rwarray.c:276 +#: extension/rwarray.c:280 msgid "reada: called with too many arguments" msgstr "" -#: extension/rwarray.c:283 +#: extension/rwarray.c:287 #, c-format msgid "do_reada: argument 0 is not a string\n" msgstr "" -#: extension/rwarray.c:289 +#: extension/rwarray.c:293 #, c-format msgid "do_reada: argument 1 is not an array\n" msgstr "" -#: extension/rwarray.c:333 +#: extension/rwarray.c:337 #, c-format msgid "do_reada: clear_array failed\n" msgstr "" -#: extension/rwarray.c:370 +#: extension/rwarray.c:374 #, c-format msgid "read_array: set_array_element failed\n" msgstr "" -#: extension/time.c:81 +#: extension/time.c:113 msgid "gettimeofday: ignoring arguments" msgstr "" -#: extension/time.c:112 +#: extension/time.c:144 msgid "gettimeofday: not supported on this platform" msgstr "" -#: extension/time.c:133 +#: extension/time.c:165 msgid "sleep: called with too many arguments" msgstr "" -#: extension/time.c:136 +#: extension/time.c:168 msgid "sleep: missing required numeric argument" msgstr "" -#: extension/time.c:142 +#: extension/time.c:174 msgid "sleep: argument is negative" msgstr "" -#: extension/time.c:176 +#: extension/time.c:208 msgid "sleep: not supported on this platform" msgstr "" -#: field.c:339 +#: field.c:345 msgid "NF set to negative value" msgstr "" -#: field.c:964 field.c:971 field.c:975 +#: field.c:971 field.c:978 field.c:982 msgid "split: fourth argument is a gawk extension" msgstr "" -#: field.c:968 +#: field.c:975 msgid "split: fourth argument is not an array" msgstr "" -#: field.c:982 +#: field.c:989 msgid "split: second argument is not an array" msgstr "" -#: field.c:986 +#: field.c:993 msgid "split: cannot use the same array for second and fourth args" msgstr "" -#: field.c:991 +#: field.c:998 msgid "split: cannot use a subarray of second arg for fourth arg" msgstr "" -#: field.c:994 +#: field.c:1001 msgid "split: cannot use a subarray of fourth arg for second arg" msgstr "" -#: field.c:1023 +#: field.c:1032 msgid "split: null string for third arg is a gawk extension" msgstr "" -#: field.c:1063 +#: field.c:1072 msgid "patsplit: fourth argument is not an array" msgstr "" -#: field.c:1068 +#: field.c:1077 msgid "patsplit: second argument is not an array" msgstr "" -#: field.c:1074 +#: field.c:1083 msgid "patsplit: third argument must be non-null" msgstr "" -#: field.c:1078 +#: field.c:1087 msgid "patsplit: cannot use the same array for second and fourth args" msgstr "" -#: field.c:1083 +#: field.c:1092 msgid "patsplit: cannot use a subarray of second arg for fourth arg" msgstr "" -#: field.c:1086 +#: field.c:1095 msgid "patsplit: cannot use a subarray of fourth arg for second arg" msgstr "" -#: field.c:1124 +#: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" msgstr "" -#: field.c:1188 +#: field.c:1197 #, c-format msgid "invalid FIELDWIDTHS value, near `%s'" msgstr "" -#: field.c:1261 +#: field.c:1270 msgid "null string for `FS' is a gawk extension" msgstr "" -#: field.c:1265 +#: field.c:1274 msgid "old awk does not support regexps as value of `FS'" msgstr "" -#: field.c:1384 +#: field.c:1393 msgid "`FPAT' is a gawk extension" msgstr "" @@ -2412,577 +2430,577 @@ msgstr "" msgid "node_to_awk_value: received null val" msgstr "" -#: gawkapi.c:808 +#: gawkapi.c:807 msgid "remove_element: received null array" msgstr "" -#: gawkapi.c:811 +#: gawkapi.c:810 msgid "remove_element: received null subscript" msgstr "" -#: gawkapi.c:943 +#: gawkapi.c:947 #, c-format msgid "api_flatten_array: could not convert index %d\n" msgstr "" -#: gawkapi.c:948 +#: gawkapi.c:952 #, c-format msgid "api_flatten_array: could not convert value %d\n" msgstr "" -#: getopt.c:603 getopt.c:632 +#: getopt.c:604 getopt.c:633 #, c-format msgid "%s: option '%s' is ambiguous; possibilities:" msgstr "" -#: getopt.c:678 getopt.c:682 +#: getopt.c:679 getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "" -#: getopt.c:691 getopt.c:696 +#: getopt.c:692 getopt.c:697 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "" -#: getopt.c:739 getopt.c:758 +#: getopt.c:740 getopt.c:759 #, c-format msgid "%s: option '--%s' requires an argument\n" msgstr "" -#: getopt.c:796 getopt.c:799 +#: getopt.c:797 getopt.c:800 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "" -#: getopt.c:807 getopt.c:810 +#: getopt.c:808 getopt.c:811 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "" -#: getopt.c:859 getopt.c:862 +#: getopt.c:860 getopt.c:863 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "" -#: getopt.c:915 getopt.c:932 getopt.c:1142 getopt.c:1160 +#: getopt.c:916 getopt.c:933 getopt.c:1143 getopt.c:1161 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "" -#: getopt.c:988 getopt.c:1004 +#: getopt.c:989 getopt.c:1005 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "" -#: getopt.c:1028 getopt.c:1046 +#: getopt.c:1029 getopt.c:1047 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "" -#: getopt.c:1067 getopt.c:1085 +#: getopt.c:1068 getopt.c:1086 #, c-format msgid "%s: option '-W %s' requires an argument\n" msgstr "" -#: io.c:347 +#: io.c:392 #, c-format msgid "command line argument `%s' is a directory: skipped" msgstr "" -#: io.c:350 io.c:463 +#: io.c:395 io.c:513 #, c-format msgid "cannot open file `%s' for reading (%s)" msgstr "" -#: io.c:590 +#: io.c:640 #, c-format msgid "close of fd %d (`%s') failed (%s)" msgstr "" -#: io.c:666 +#: io.c:716 msgid "redirection not allowed in sandbox mode" msgstr "" -#: io.c:700 +#: io.c:750 #, c-format msgid "expression in `%s' redirection only has numeric value" msgstr "" -#: io.c:706 +#: io.c:756 #, c-format msgid "expression for `%s' redirection has null string value" msgstr "" -#: io.c:711 +#: io.c:761 #, c-format msgid "filename `%s' for `%s' redirection may be result of logical expression" msgstr "" -#: io.c:754 +#: io.c:809 #, c-format msgid "unnecessary mixing of `>' and `>>' for file `%.*s'" msgstr "" -#: io.c:808 +#: io.c:863 #, c-format msgid "can't open pipe `%s' for output (%s)" msgstr "" -#: io.c:818 +#: io.c:873 #, c-format msgid "can't open pipe `%s' for input (%s)" msgstr "" -#: io.c:849 +#: io.c:904 #, c-format msgid "can't open two way pipe `%s' for input/output (%s)" msgstr "" -#: io.c:928 +#: io.c:986 #, c-format msgid "can't redirect from `%s' (%s)" msgstr "" -#: io.c:931 +#: io.c:989 #, c-format msgid "can't redirect to `%s' (%s)" msgstr "" -#: io.c:982 +#: io.c:1040 msgid "" "reached system limit for open files: starting to multiplex file descriptors" msgstr "" -#: io.c:998 +#: io.c:1056 #, c-format msgid "close of `%s' failed (%s)." msgstr "" -#: io.c:1006 +#: io.c:1064 msgid "too many pipes or input files open" msgstr "" -#: io.c:1028 +#: io.c:1086 msgid "close: second argument must be `to' or `from'" msgstr "" -#: io.c:1045 +#: io.c:1103 #, c-format msgid "close: `%.*s' is not an open file, pipe or co-process" msgstr "" -#: io.c:1050 +#: io.c:1108 msgid "close of redirection that was never opened" msgstr "" -#: io.c:1147 +#: io.c:1205 #, c-format msgid "close: redirection `%s' not opened with `|&', second argument ignored" msgstr "" -#: io.c:1164 +#: io.c:1222 #, c-format msgid "failure status (%d) on pipe close of `%s' (%s)" msgstr "" -#: io.c:1167 +#: io.c:1225 #, c-format msgid "failure status (%d) on file close of `%s' (%s)" msgstr "" -#: io.c:1187 +#: io.c:1245 #, c-format msgid "no explicit close of socket `%s' provided" msgstr "" -#: io.c:1190 +#: io.c:1248 #, c-format msgid "no explicit close of co-process `%s' provided" msgstr "" -#: io.c:1193 +#: io.c:1251 #, c-format msgid "no explicit close of pipe `%s' provided" msgstr "" -#: io.c:1196 +#: io.c:1254 #, c-format msgid "no explicit close of file `%s' provided" msgstr "" -#: io.c:1224 io.c:1279 main.c:842 main.c:879 +#: io.c:1284 io.c:1342 main.c:864 main.c:906 #, c-format msgid "error writing standard output (%s)" msgstr "" -#: io.c:1228 io.c:1284 +#: io.c:1289 io.c:1348 main.c:866 #, c-format msgid "error writing standard error (%s)" msgstr "" -#: io.c:1236 +#: io.c:1297 #, c-format msgid "pipe flush of `%s' failed (%s)." msgstr "" -#: io.c:1239 +#: io.c:1300 #, c-format msgid "co-process flush of pipe to `%s' failed (%s)." msgstr "" -#: io.c:1242 +#: io.c:1303 #, c-format msgid "file flush of `%s' failed (%s)." msgstr "" -#: io.c:1356 +#: io.c:1420 #, c-format msgid "local port %s invalid in `/inet'" msgstr "" -#: io.c:1374 +#: io.c:1438 #, c-format msgid "remote host and port information (%s, %s) invalid" msgstr "" -#: io.c:1526 +#: io.c:1590 #, c-format msgid "no (known) protocol supplied in special filename `%s'" msgstr "" -#: io.c:1540 +#: io.c:1604 #, c-format msgid "special file name `%s' is incomplete" msgstr "" -#: io.c:1557 +#: io.c:1621 msgid "must supply a remote hostname to `/inet'" msgstr "" -#: io.c:1575 +#: io.c:1639 msgid "must supply a remote port to `/inet'" msgstr "" -#: io.c:1621 +#: io.c:1685 msgid "TCP/IP communications are not supported" msgstr "" -#: io.c:1796 +#: io.c:1867 #, c-format msgid "could not open `%s', mode `%s'" msgstr "" -#: io.c:1846 +#: io.c:1917 #, c-format msgid "close of master pty failed (%s)" msgstr "" -#: io.c:1848 io.c:2024 io.c:2194 +#: io.c:1919 io.c:2105 io.c:2305 #, c-format msgid "close of stdout in child failed (%s)" msgstr "" -#: io.c:1851 +#: io.c:1922 #, c-format msgid "moving slave pty to stdout in child failed (dup: %s)" msgstr "" -#: io.c:1853 io.c:2029 +#: io.c:1924 io.c:2110 #, c-format msgid "close of stdin in child failed (%s)" msgstr "" -#: io.c:1856 +#: io.c:1927 #, c-format msgid "moving slave pty to stdin in child failed (dup: %s)" msgstr "" -#: io.c:1858 io.c:1879 +#: io.c:1929 io.c:1951 #, c-format msgid "close of slave pty failed (%s)" msgstr "" -#: io.c:1965 io.c:2027 io.c:2171 io.c:2197 +#: io.c:2040 io.c:2108 io.c:2276 io.c:2308 #, c-format msgid "moving pipe to stdout in child failed (dup: %s)" msgstr "" -#: io.c:1972 io.c:2032 +#: io.c:2047 io.c:2113 #, c-format msgid "moving pipe to stdin in child failed (dup: %s)" msgstr "" -#: io.c:1992 io.c:2187 +#: io.c:2073 io.c:2298 msgid "restoring stdout in parent process failed\n" msgstr "" -#: io.c:2000 +#: io.c:2081 msgid "restoring stdin in parent process failed\n" msgstr "" -#: io.c:2035 io.c:2199 io.c:2213 +#: io.c:2116 io.c:2310 io.c:2324 #, c-format msgid "close of pipe failed (%s)" msgstr "" -#: io.c:2089 +#: io.c:2174 msgid "`|&' not supported" msgstr "" -#: io.c:2156 +#: io.c:2261 #, c-format msgid "cannot open pipe `%s' (%s)" msgstr "" -#: io.c:2207 +#: io.c:2318 #, c-format msgid "cannot create child process for `%s' (fork: %s)" msgstr "" -#: io.c:2667 +#: io.c:2790 msgid "register_input_parser: received NULL pointer" msgstr "" -#: io.c:2695 +#: io.c:2818 #, c-format msgid "input parser `%s' conflicts with previously installed input parser `%s'" msgstr "" -#: io.c:2702 +#: io.c:2825 #, c-format msgid "input parser `%s' failed to open `%s'" msgstr "" -#: io.c:2722 +#: io.c:2845 msgid "register_output_wrapper: received NULL pointer" msgstr "" -#: io.c:2750 +#: io.c:2873 #, c-format msgid "" "output wrapper `%s' conflicts with previously installed output wrapper `%s'" msgstr "" -#: io.c:2757 +#: io.c:2880 #, c-format msgid "output wrapper `%s' failed to open `%s'" msgstr "" -#: io.c:2778 +#: io.c:2901 msgid "register_output_processor: received NULL pointer" msgstr "" -#: io.c:2807 +#: io.c:2930 #, c-format msgid "" "two-way processor `%s' conflicts with previously installed two-way processor " "`%s'" msgstr "" -#: io.c:2816 +#: io.c:2939 #, c-format msgid "two way processor `%s' failed to open `%s'" msgstr "" -#: io.c:2923 +#: io.c:3064 #, c-format msgid "data file `%s' is empty" msgstr "" -#: io.c:2965 io.c:2973 +#: io.c:3106 io.c:3114 msgid "could not allocate more input memory" msgstr "" -#: io.c:3539 +#: io.c:3682 msgid "multicharacter value of `RS' is a gawk extension" msgstr "" -#: io.c:3628 +#: io.c:3771 msgid "IPv6 communication is not supported" msgstr "" -#: main.c:388 +#: main.c:405 msgid "empty argument to `-e/--source' ignored" msgstr "" -#: main.c:478 +#: main.c:495 #, c-format msgid "%s: option `-W %s' unrecognized, ignored\n" msgstr "" -#: main.c:524 +#: main.c:541 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "" -#: main.c:545 +#: main.c:562 msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'" msgstr "" -#: main.c:551 +#: main.c:568 msgid "`--posix' overrides `--traditional'" msgstr "" -#: main.c:562 +#: main.c:579 msgid "`--posix'/`--traditional' overrides `--non-decimal-data'" msgstr "" -#: main.c:566 +#: main.c:583 #, c-format msgid "running %s setuid root may be a security problem" msgstr "" -#: main.c:571 +#: main.c:588 msgid "`--posix' overrides `--characters-as-bytes'" msgstr "" -#: main.c:630 +#: main.c:647 #, c-format msgid "can't set binary mode on stdin (%s)" msgstr "" -#: main.c:633 +#: main.c:650 #, c-format msgid "can't set binary mode on stdout (%s)" msgstr "" -#: main.c:635 +#: main.c:652 #, c-format msgid "can't set binary mode on stderr (%s)" msgstr "" -#: main.c:693 +#: main.c:710 msgid "no program text at all!" msgstr "" -#: main.c:779 +#: main.c:799 #, c-format msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n" msgstr "" -#: main.c:781 +#: main.c:801 #, c-format msgid "Usage: %s [POSIX or GNU style options] [--] %cprogram%c file ...\n" msgstr "" -#: main.c:786 +#: main.c:806 msgid "POSIX options:\t\tGNU long options: (standard)\n" msgstr "" -#: main.c:787 +#: main.c:807 msgid "\t-f progfile\t\t--file=progfile\n" msgstr "" -#: main.c:788 +#: main.c:808 msgid "\t-F fs\t\t\t--field-separator=fs\n" msgstr "" -#: main.c:789 +#: main.c:809 msgid "\t-v var=val\t\t--assign=var=val\n" msgstr "" -#: main.c:790 +#: main.c:810 msgid "Short options:\t\tGNU long options: (extensions)\n" msgstr "" -#: main.c:791 +#: main.c:811 msgid "\t-b\t\t\t--characters-as-bytes\n" msgstr "" -#: main.c:792 +#: main.c:812 msgid "\t-c\t\t\t--traditional\n" msgstr "" -#: main.c:793 +#: main.c:813 msgid "\t-C\t\t\t--copyright\n" msgstr "" -#: main.c:794 +#: main.c:814 msgid "\t-d[file]\t\t--dump-variables[=file]\n" msgstr "" -#: main.c:795 +#: main.c:815 msgid "\t-D[file]\t\t--debug[=file]\n" msgstr "" -#: main.c:796 +#: main.c:816 msgid "\t-e 'program-text'\t--source='program-text'\n" msgstr "" -#: main.c:797 +#: main.c:817 msgid "\t-E file\t\t\t--exec=file\n" msgstr "" -#: main.c:798 +#: main.c:818 msgid "\t-g\t\t\t--gen-pot\n" msgstr "" -#: main.c:799 +#: main.c:819 msgid "\t-h\t\t\t--help\n" msgstr "" -#: main.c:800 +#: main.c:820 msgid "\t-i includefile\t\t--include=includefile\n" msgstr "" -#: main.c:801 +#: main.c:821 msgid "\t-l library\t\t--load=library\n" msgstr "" -#: main.c:802 +#: main.c:822 msgid "\t-L [fatal]\t\t--lint[=fatal]\n" msgstr "" -#: main.c:803 +#: main.c:823 msgid "\t-n\t\t\t--non-decimal-data\n" msgstr "" -#: main.c:804 +#: main.c:824 msgid "\t-M\t\t\t--bignum\n" msgstr "" -#: main.c:805 +#: main.c:825 msgid "\t-N\t\t\t--use-lc-numeric\n" msgstr "" -#: main.c:806 +#: main.c:826 msgid "\t-o[file]\t\t--pretty-print[=file]\n" msgstr "" -#: main.c:807 +#: main.c:827 msgid "\t-O\t\t\t--optimize\n" msgstr "" -#: main.c:808 +#: main.c:828 msgid "\t-p[file]\t\t--profile[=file]\n" msgstr "" -#: main.c:809 +#: main.c:829 msgid "\t-P\t\t\t--posix\n" msgstr "" -#: main.c:810 +#: main.c:830 msgid "\t-r\t\t\t--re-interval\n" msgstr "" -#: main.c:811 +#: main.c:831 msgid "\t-S\t\t\t--sandbox\n" msgstr "" -#: main.c:812 +#: main.c:832 msgid "\t-t\t\t\t--lint-old\n" msgstr "" -#: main.c:813 +#: main.c:833 msgid "\t-V\t\t\t--version\n" msgstr "" -#: main.c:815 +#: main.c:835 msgid "\t-W nostalgia\t\t--nostalgia\n" msgstr "" -#: main.c:818 +#: main.c:838 msgid "\t-Y\t\t--parsedebug\n" msgstr "" @@ -2991,7 +3009,7 @@ msgstr "" #. for this application. Please add _another line_ with the #. address for translation bugs. #. no-wrap -#: main.c:827 +#: main.c:847 msgid "" "\n" "To report bugs, see node `Bugs' in `gawk.info', which is\n" @@ -2999,21 +3017,21 @@ msgid "" "\n" msgstr "" -#: main.c:831 +#: main.c:851 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:835 +#: main.c:855 msgid "" "Examples:\n" "\tgawk '{ sum += $1 }; END { print sum }' file\n" "\tgawk -F: '{ print $1 }' /etc/passwd\n" msgstr "" -#: main.c:855 +#: main.c:880 #, c-format msgid "" "Copyright (C) 1989, 1991-%d Free Software Foundation.\n" @@ -3025,7 +3043,7 @@ msgid "" "\n" msgstr "" -#: main.c:863 +#: main.c:888 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" @@ -3034,70 +3052,70 @@ msgid "" "\n" msgstr "" -#: main.c:869 +#: main.c:894 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:904 +#: main.c:931 msgid "-Ft does not set FS to tab in POSIX awk" msgstr "" -#: main.c:1181 +#: main.c:1208 #, c-format msgid "unknown value for field spec: %d\n" msgstr "" -#: main.c:1279 +#: main.c:1306 #, c-format msgid "" "%s: `%s' argument to `-v' not in `var=value' form\n" "\n" msgstr "" -#: main.c:1305 +#: main.c:1332 #, c-format msgid "`%s' is not a legal variable name" msgstr "" -#: main.c:1308 +#: main.c:1335 #, c-format msgid "`%s' is not a variable name, looking for file `%s=%s'" msgstr "" -#: main.c:1312 +#: main.c:1339 #, c-format msgid "cannot use gawk builtin `%s' as variable name" msgstr "" -#: main.c:1317 +#: main.c:1344 #, c-format msgid "cannot use function `%s' as variable name" msgstr "" -#: main.c:1370 +#: main.c:1397 msgid "floating point exception" msgstr "" -#: main.c:1377 +#: main.c:1404 msgid "fatal error: internal error" msgstr "" -#: main.c:1392 +#: main.c:1419 msgid "fatal error: internal error: segfault" msgstr "" -#: main.c:1404 +#: main.c:1431 msgid "fatal error: internal error: stack overflow" msgstr "" -#: main.c:1463 +#: main.c:1490 #, c-format msgid "no pre-opened fd %d" msgstr "" -#: main.c:1470 +#: main.c:1497 #, c-format msgid "could not pre-open /dev/null for fd %d" msgstr "" @@ -3152,7 +3170,7 @@ msgstr "" msgid "%s: argument #%d negative value %Zd will give strange results" msgstr "" -#: msg.c:61 +#: msg.c:68 #, c-format msgid "cmd. line:" msgstr "" @@ -3202,68 +3220,63 @@ msgstr "" msgid "%s %s `%s': could not set close-on-exec: (fcntl F_SETFD: %s)" msgstr "" -#: profile.c:70 +#: profile.c:71 #, c-format msgid "could not open `%s' for writing: %s" msgstr "" -#: profile.c:72 +#: profile.c:73 msgid "sending profile to standard error" msgstr "" -#: profile.c:188 +#: profile.c:193 #, c-format msgid "" "\t# %s block(s)\n" "\n" msgstr "" -#: profile.c:193 +#: profile.c:198 #, c-format msgid "" "\t# Rule(s)\n" "\n" msgstr "" -#: profile.c:267 +#: profile.c:272 #, c-format msgid "internal error: %s with null vname" msgstr "" -#: profile.c:530 +#: profile.c:537 msgid "internal error: builtin with null fname" msgstr "" -#: profile.c:942 +#: profile.c:949 #, c-format msgid "" "\t# Loaded extensions (-l and/or @load)\n" "\n" msgstr "" -#: profile.c:965 +#: profile.c:972 #, c-format msgid "\t# gawk profile, created %s\n" msgstr "" -#: profile.c:1351 +#: profile.c:1475 #, c-format msgid "" "\n" "\t# Functions, listed alphabetically\n" msgstr "" -#: profile.c:1389 +#: profile.c:1513 #, c-format msgid "redir2str: unknown redirection type %d" msgstr "" -#: re.c:583 -#, c-format -msgid "range of the form `[%c-%c]' is locale dependent" -msgstr "" - -#: re.c:610 +#: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" msgstr "" @@ -3332,6 +3345,6 @@ msgstr "" msgid "No previous regular expression" msgstr "" -#: symbol.c:740 +#: symbol.c:741 msgid "can not pop main context" msgstr "" diff --git a/po/nl.gmo b/po/nl.gmo index b30682cd..76c57134 100644 Binary files a/po/nl.gmo and b/po/nl.gmo differ diff --git a/po/nl.po b/po/nl.po index 71fb563d..dc037a99 100644 --- a/po/nl.po +++ b/po/nl.po @@ -10,7 +10,7 @@ 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" +"POT-Creation-Date: 2014-04-08 19:23+0300\n" "PO-Revision-Date: 2014-02-04 11:18+0100\n" "Last-Translator: Benno Schulenberg \n" "Language-Team: Dutch \n" @@ -40,8 +40,8 @@ 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:1599 builtin.c:1645 -#: builtin.c:1658 builtin.c:2086 builtin.c:2100 eval.c:1122 eval.c:1126 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" @@ -79,19 +79,27 @@ msgstr "asorti: eerste argument is geen array" #: array.c:831 msgid "asort: cannot use a subarray of first arg for second arg" -msgstr "asort: een subarray van het eerste argument kan niet als tweede argument gebruikt worden" +msgstr "" +"asort: een subarray van het eerste argument kan niet als tweede argument " +"gebruikt worden" #: array.c:832 msgid "asorti: cannot use a subarray of first arg for second arg" -msgstr "asorti: een subarray van het eerste argument kan niet als tweede argument gebruikt worden" +msgstr "" +"asorti: een subarray van het eerste argument kan niet als tweede argument " +"gebruikt worden" #: array.c:837 msgid "asort: cannot use a subarray of second arg for first arg" -msgstr "asort: een subarray van het tweede argument kan niet als eerste argument gebruikt worden" +msgstr "" +"asort: een subarray van het tweede argument kan niet als eerste argument " +"gebruikt worden" #: array.c:838 msgid "asorti: cannot use a subarray of second arg for first arg" -msgstr "asorti: een subarray van het tweede argument kan niet als eerste argument gebruikt worden" +msgstr "" +"asorti: een subarray van het tweede argument kan niet als eerste argument " +"gebruikt worden" #: array.c:1314 #, c-format @@ -139,11 +147,11 @@ msgstr "dubbele 'case'-waarde in 'switch'-opdracht: %s" msgid "duplicate `default' detected in switch body" msgstr "dubbele 'default' in 'switch'-opdracht" -#: awkgram.y:796 awkgram.y:3699 +#: awkgram.y:796 awkgram.y:3723 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:3691 +#: awkgram.y:805 awkgram.y:3715 msgid "`continue' is not allowed outside a loop" msgstr "'continue' buiten een lus is niet toegestaan" @@ -163,7 +171,8 @@ msgstr "'return' wordt gebruikt buiten functiecontext" #: awkgram.y:922 msgid "plain `print' in BEGIN or END rule should probably be `print \"\"'" -msgstr "kale 'print' in BEGIN- of END-regel moet vermoedelijk 'print \"\"' zijn" +msgstr "" +"kale 'print' in BEGIN- of END-regel moet vermoedelijk 'print \"\"' zijn" #: awkgram.y:988 awkgram.y:1037 msgid "`delete' is not allowed with SYMTAB" @@ -226,268 +235,272 @@ msgstr "indirecte functieaanroepen zijn een gawk-uitbreiding" #: awkgram.y:1620 #, c-format msgid "can not use special variable `%s' for indirect function call" -msgstr "kan speciale variabele '%s' niet voor indirecte functieaanroep gebruiken" +msgstr "" +"kan speciale variabele '%s' niet voor indirecte functieaanroep gebruiken" #: awkgram.y:1698 msgid "invalid subscript expression" msgstr "ongeldige index-expressie" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126 +#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "waarschuwing: " -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158 +#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "fataal: " -#: awkgram.y:2092 +#: awkgram.y:2116 msgid "unexpected newline or end of string" msgstr "onverwacht regeleinde of einde van string" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:523 debug.c:539 +#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 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:2360 awkgram.y:2485 +#: awkgram.y:2384 awkgram.y:2509 #, 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:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:135 debug.c:5206 +#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "reden onbekend" -#: awkgram.y:2371 awkgram.y:2395 +#: awkgram.y:2395 awkgram.y:2419 #, 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:2384 +#: awkgram.y:2408 #, c-format msgid "already included source file `%s'" msgstr "bronbestand '%s' is reeds ingesloten" -#: awkgram.y:2385 +#: awkgram.y:2409 #, c-format msgid "already loaded shared library `%s'" msgstr "gedeelde bibliotheek '%s' is reeds geladen" -#: awkgram.y:2420 +#: awkgram.y:2444 msgid "@include is a gawk extension" msgstr "'@include' is een gawk-uitbreiding" -#: awkgram.y:2426 +#: awkgram.y:2450 msgid "empty filename after @include" msgstr "lege bestandsnaam na '@include'" -#: awkgram.y:2470 +#: awkgram.y:2494 msgid "@load is a gawk extension" msgstr "'@load' is een gawk-uitbreiding" -#: awkgram.y:2476 +#: awkgram.y:2500 msgid "empty filename after @load" msgstr "lege bestandsnaam na '@load'" -#: awkgram.y:2610 +#: awkgram.y:2634 msgid "empty program text on command line" msgstr "lege programmatekst op opdrachtregel" -#: awkgram.y:2725 +#: awkgram.y:2749 #, c-format msgid "can't read sourcefile `%s' (%s)" msgstr "kan bronbestand '%s' niet lezen (%s)" -#: awkgram.y:2736 +#: awkgram.y:2760 #, c-format msgid "source file `%s' is empty" msgstr "bronbestand '%s' is leeg" -#: awkgram.y:2913 +#: awkgram.y:2937 msgid "source file does not end in newline" msgstr "bronbestand eindigt niet met een regeleindeteken (LF)" -#: awkgram.y:3018 +#: awkgram.y:3042 msgid "unterminated regexp ends with `\\' at end of file" msgstr "onafgesloten reguliere expressie eindigt met '\\' aan bestandseinde" -#: awkgram.y:3042 +#: awkgram.y:3066 #, 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:3046 +#: awkgram.y:3070 #, c-format msgid "tawk regex modifier `/.../%c' doesn't work in gawk" msgstr "regexp-optie '/.../%c' van 'tawk' werkt niet in gawk" -#: awkgram.y:3053 +#: awkgram.y:3077 msgid "unterminated regexp" msgstr "onafgesloten reguliere expressie" -#: awkgram.y:3057 +#: awkgram.y:3081 msgid "unterminated regexp at end of file" msgstr "onafgesloten reguliere expressie aan bestandseinde" -#: awkgram.y:3116 +#: awkgram.y:3140 msgid "use of `\\ #...' line continuation is not portable" msgstr "gebruik van regelvoortzetting '\\ #...' is niet overdraagbaar" -#: awkgram.y:3132 +#: awkgram.y:3156 msgid "backslash not last character on line" msgstr "backslash is niet het laatste teken op de regel" -#: awkgram.y:3193 +#: awkgram.y:3217 msgid "POSIX does not allow operator `**='" msgstr "POSIX staat operator '**=' niet toe" -#: awkgram.y:3195 +#: awkgram.y:3219 msgid "old awk does not support operator `**='" msgstr "oude 'awk' kent de operator '**=' niet" -#: awkgram.y:3204 +#: awkgram.y:3228 msgid "POSIX does not allow operator `**'" msgstr "POSIX staat operator '**' niet toe" -#: awkgram.y:3206 +#: awkgram.y:3230 msgid "old awk does not support operator `**'" msgstr "oude 'awk' kent de operator '**' niet" -#: awkgram.y:3241 +#: awkgram.y:3265 msgid "operator `^=' is not supported in old awk" msgstr "oude 'awk' kent de operator '^=' niet" -#: awkgram.y:3249 +#: awkgram.y:3273 msgid "operator `^' is not supported in old awk" msgstr "oude 'awk' kent de operator '^' niet" -#: awkgram.y:3342 awkgram.y:3358 command.y:1178 +#: awkgram.y:3366 awkgram.y:3382 command.y:1178 msgid "unterminated string" msgstr "onafgesloten string" -#: awkgram.y:3579 +#: awkgram.y:3603 #, c-format msgid "invalid char '%c' in expression" msgstr "ongeldig teken '%c' in expressie" -#: awkgram.y:3626 +#: awkgram.y:3650 #, c-format msgid "`%s' is a gawk extension" msgstr "'%s' is een gawk-uitbreiding" -#: awkgram.y:3631 +#: awkgram.y:3655 #, c-format msgid "POSIX does not allow `%s'" msgstr "POSIX staat '%s' niet toe" -#: awkgram.y:3639 +#: awkgram.y:3663 #, c-format msgid "`%s' is not supported in old awk" msgstr "oude 'awk' kent '%s' niet" -#: awkgram.y:3729 +#: awkgram.y:3753 msgid "`goto' considered harmful!\n" msgstr "'goto' wordt als schadelijk beschouwd!\n" -#: awkgram.y:3763 +#: awkgram.y:3787 #, c-format msgid "%d is invalid as number of arguments for %s" msgstr "%d is een ongeldig aantal argumenten voor %s" -#: awkgram.y:3798 +#: awkgram.y:3822 #, 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:3803 +#: awkgram.y:3827 #, c-format msgid "%s third parameter is not a changeable object" msgstr "%s: derde parameter is geen veranderbaar object" -#: awkgram.y:3886 awkgram.y:3889 +#: awkgram.y:3910 awkgram.y:3913 msgid "match: third argument is a gawk extension" msgstr "match: derde argument is een gawk-uitbreiding" -#: awkgram.y:3943 awkgram.y:3946 +#: awkgram.y:3967 awkgram.y:3970 msgid "close: second argument is a gawk extension" msgstr "close: tweede argument is een gawk-uitbreiding" -#: awkgram.y:3958 +#: awkgram.y:3982 msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore" msgstr "dcgettext(_\"...\") is onjuist: verwijder het liggende streepje" -#: awkgram.y:3973 +#: awkgram.y:3997 msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" msgstr "dcngettext(_\"...\") is onjuist: verwijder het liggende streepje" -#: awkgram.y:3992 +#: awkgram.y:4016 msgid "index: regexp constant as second argument is not allowed" -msgstr "index: een reguliere-expressie-constante als tweede argument is niet toegestaan" +msgstr "" +"index: een reguliere-expressie-constante als tweede argument is niet " +"toegestaan" -#: awkgram.y:4045 +#: awkgram.y:4069 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "functie '%s': parameter '%s' schaduwt een globale variabele" -#: awkgram.y:4102 debug.c:4041 debug.c:4084 debug.c:5204 +#: awkgram.y:4126 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:4103 +#: awkgram.y:4127 msgid "sending variable list to standard error" msgstr "variabelenlijst gaat naar standaardfoutuitvoer" -#: awkgram.y:4111 +#: awkgram.y:4135 #, c-format msgid "%s: close failed (%s)" msgstr "%s: sluiten is mislukt (%s)" -#: awkgram.y:4136 +#: awkgram.y:4160 msgid "shadow_funcs() called twice!" msgstr "shadow_funcs() twee keer aangeroepen!" -#: awkgram.y:4144 +#: awkgram.y:4168 msgid "there were shadowed variables." msgstr "er waren geschaduwde variabelen." -#: awkgram.y:4215 +#: awkgram.y:4239 #, c-format msgid "function name `%s' previously defined" msgstr "functienaam '%s' is al eerder gedefinieerd" -#: awkgram.y:4261 +#: awkgram.y:4285 #, c-format msgid "function `%s': can't use function name as parameter name" msgstr "functie '%s': kan functienaam niet als parameternaam gebruiken" -#: awkgram.y:4264 +#: awkgram.y:4288 #, 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" +msgstr "" +"functie '%s': kan speciale variabele '%s' niet als functieparameter gebruiken" -#: awkgram.y:4272 +#: awkgram.y:4296 #, c-format msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d" msgstr "functie '%s': parameter #%d, '%s', dupliceert parameter #%d" -#: awkgram.y:4359 awkgram.y:4365 +#: awkgram.y:4383 awkgram.y:4389 #, c-format msgid "function `%s' called but never defined" msgstr "functie '%s' wordt aangeroepen maar is nergens gedefinieerd" -#: awkgram.y:4369 +#: awkgram.y:4393 #, c-format msgid "function `%s' defined but never called directly" msgstr "functie '%s' is gedefinieerd maar wordt nergens direct aangeroepen" -#: awkgram.y:4401 +#: awkgram.y:4425 #, c-format msgid "regexp constant for parameter #%d yields boolean value" msgstr "regexp-constante als parameter #%d levert booleanwaarde op" -#: awkgram.y:4460 +#: awkgram.y:4484 #, c-format msgid "" "function `%s' called with space between name and `(',\n" @@ -496,20 +509,23 @@ msgstr "" "functie '%s' wordt aangeroepen met een spatie tussen naam en '(',\n" "of wordt gebruikt als variabele of array" -#: awkgram.y:4696 +#: awkgram.y:4720 msgid "division by zero attempted" msgstr "deling door nul" -#: awkgram.y:4705 +#: awkgram.y:4729 #, c-format msgid "division by zero attempted in `%%'" msgstr "deling door nul in '%%'" -#: awkgram.y:5025 -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:5049 +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:5028 +#: awkgram.y:5052 #, c-format msgid "invalid target of assignment (opcode %s)" msgstr "ongeldig doel van toewijzing (opcode %s)" @@ -535,12 +551,16 @@ msgstr "exp: argument %g ligt buiten toegestane bereik" #: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" -msgstr "fflush: kan pijp niet leegmaken: '%s' is geopend om te lezen, niet om te schrijven" +msgstr "" +"fflush: kan pijp niet leegmaken: '%s' is geopend om te lezen, niet om te " +"schrijven" #: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" -msgstr "fflush: kan bestand niet leegmaken: '%s' is geopend om te lezen, niet om te schrijven" +msgstr "" +"fflush: kan bestand niet leegmaken: '%s' is geopend om te lezen, niet om te " +"schrijven" #: builtin.c:244 #, c-format @@ -620,297 +640,302 @@ msgstr "fataal: '$' is niet toegestaan na een punt in de opmaak" msgid "fatal: no `$' supplied for positional field width or precision" msgstr "fataal: geen '$' opgegeven bij positionele veldbreedte of -precisie" -#: builtin.c:1011 +#: builtin.c:1009 msgid "`l' is meaningless in awk formats; ignored" msgstr "'l' is betekenisloos in awk-opmaak; genegeerd" -#: builtin.c:1015 +#: builtin.c:1013 msgid "fatal: `l' is not permitted in POSIX awk formats" msgstr "fataal: 'l' is niet toegestaan in POSIX awk-opmaak" -#: builtin.c:1028 +#: builtin.c:1026 msgid "`L' is meaningless in awk formats; ignored" msgstr "'L' is betekenisloos in awk-opmaak; genegeerd" -#: builtin.c:1032 +#: builtin.c:1030 msgid "fatal: `L' is not permitted in POSIX awk formats" msgstr "fataal: 'L' is niet toegestaan in POSIX awk-opmaak" -#: builtin.c:1045 +#: builtin.c:1043 msgid "`h' is meaningless in awk formats; ignored" msgstr "'h' is betekenisloos in awk-opmaak; genegeerd" -#: builtin.c:1049 +#: builtin.c:1047 msgid "fatal: `h' is not permitted in POSIX awk formats" msgstr "fataal: 'h' is niet toegestaan in POSIX awk-opmaak" -#: builtin.c:1447 +#: builtin.c:1463 #, 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:1545 +#: builtin.c:1561 #, c-format msgid "ignoring unknown format specifier character `%c': no argument converted" -msgstr "onbekend opmaakteken '%c' wordt genegeerd: geen argument is geconverteerd" +msgstr "" +"onbekend opmaakteken '%c' wordt genegeerd: geen argument is geconverteerd" -#: builtin.c:1550 +#: builtin.c:1566 msgid "fatal: not enough arguments to satisfy format string" msgstr "fataal: niet genoeg argumenten voor opmaakstring" -#: builtin.c:1552 +#: builtin.c:1568 msgid "^ ran out for this one" msgstr "niet genoeg ^ voor deze" -#: builtin.c:1559 +#: builtin.c:1575 msgid "[s]printf: format specifier does not have control letter" msgstr "[s]printf: opmaakaanduiding mist een stuurletter" -#: builtin.c:1562 +#: builtin.c:1578 msgid "too many arguments supplied for format string" msgstr "te veel argumenten voor opmaakstring" -#: builtin.c:1618 +#: builtin.c:1634 msgid "sprintf: no arguments" msgstr "sprintf: geen argumenten" -#: builtin.c:1641 builtin.c:1652 +#: builtin.c:1657 builtin.c:1668 msgid "printf: no arguments" msgstr "printf: geen argumenten" -#: builtin.c:1695 +#: builtin.c:1711 msgid "sqrt: received non-numeric argument" msgstr "sqrt: argument is geen getal" -#: builtin.c:1699 +#: builtin.c:1715 #, c-format msgid "sqrt: called with negative argument %g" msgstr "sqrt: argument %g is negatief" -#: builtin.c:1730 +#: builtin.c:1746 #, c-format msgid "substr: length %g is not >= 1" msgstr "substr: lengte %g is niet >= 1" -#: builtin.c:1732 +#: builtin.c:1748 #, c-format msgid "substr: length %g is not >= 0" msgstr "substr: lengte %g is niet >= 0" -#: builtin.c:1739 +#: builtin.c:1755 #, c-format msgid "substr: non-integer length %g will be truncated" msgstr "substr: lengte %g is geen integer; wordt afgekapt" -#: builtin.c:1744 +#: builtin.c:1760 #, 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" +msgstr "" +"substr: lengte %g is te groot voor stringindexering; wordt verkort tot %g" -#: builtin.c:1756 +#: builtin.c:1772 #, c-format msgid "substr: start index %g is invalid, using 1" msgstr "substr: startindex %g is ongeldig; 1 wordt gebruikt" -#: builtin.c:1761 +#: builtin.c:1777 #, c-format msgid "substr: non-integer start index %g will be truncated" msgstr "substr: startindex %g is geen integer; wordt afgekapt" -#: builtin.c:1786 +#: builtin.c:1802 msgid "substr: source string is zero length" msgstr "substr: bronstring heeft lengte nul" -#: builtin.c:1802 +#: builtin.c:1818 #, 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:1810 +#: builtin.c:1826 #, c-format -msgid "substr: length %g at start index %g exceeds length of first argument (%lu)" -msgstr "substr: lengte %g bij startindex %g is groter dan de lengte van het eerste argument (%lu)" +msgid "" +"substr: length %g at start index %g exceeds length of first argument (%lu)" +msgstr "" +"substr: lengte %g bij startindex %g is groter dan de lengte van het eerste " +"argument (%lu)" -#: builtin.c:1884 +#: builtin.c:1900 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" msgstr "strftime: opmaakwaarde in PROCINFO[\"strftime\"] is numeriek" -#: builtin.c:1907 +#: builtin.c:1923 msgid "strftime: received non-numeric second argument" msgstr "strftime: tweede argument is geen getal" -#: builtin.c:1911 +#: builtin.c:1927 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:1918 +#: builtin.c:1934 msgid "strftime: received non-string first argument" msgstr "strftime: eerste argument is geen string" -#: builtin.c:1925 +#: builtin.c:1941 msgid "strftime: received empty format string" msgstr "strftime: opmaakstring is leeg" -#: builtin.c:1991 +#: builtin.c:2007 msgid "mktime: received non-string argument" msgstr "mktime: argument is geen string" -#: builtin.c:2008 +#: builtin.c:2024 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:2043 +#: builtin.c:2059 msgid "'system' function not allowed in sandbox mode" msgstr "'system'-functie is niet toegestaan in sandbox-modus" -#: builtin.c:2048 +#: builtin.c:2064 msgid "system: received non-string argument" msgstr "system: argument is geen string" -#: builtin.c:2168 +#: builtin.c:2184 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "verwijzing naar ongeïnitialiseerd veld '$%d'" -#: builtin.c:2255 +#: builtin.c:2271 msgid "tolower: received non-string argument" msgstr "tolower: argument is geen string" -#: builtin.c:2289 +#: builtin.c:2305 msgid "toupper: received non-string argument" msgstr "toupper: argument is geen string" -#: builtin.c:2325 mpfr.c:672 +#: builtin.c:2341 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2: eerste argument is geen getal" -#: builtin.c:2327 mpfr.c:674 +#: builtin.c:2343 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2: tweede argument is geen getal" -#: builtin.c:2346 +#: builtin.c:2362 msgid "sin: received non-numeric argument" msgstr "sin: argument is geen getal" -#: builtin.c:2362 +#: builtin.c:2378 msgid "cos: received non-numeric argument" msgstr "cos: argument is geen getal" -#: builtin.c:2415 mpfr.c:1156 +#: builtin.c:2431 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand: argument is geen getal" -#: builtin.c:2446 +#: builtin.c:2462 msgid "match: third argument is not an array" msgstr "match: derde argument is geen array" -#: builtin.c:2718 +#: builtin.c:2734 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub: derde argument is 0; wordt beschouwd als 1" -#: builtin.c:3014 +#: builtin.c:3030 msgid "lshift: received non-numeric first argument" msgstr "lshift: eerste argument is geen getal" -#: builtin.c:3016 +#: builtin.c:3032 msgid "lshift: received non-numeric second argument" msgstr "lshift: tweede argument is geen getal" -#: builtin.c:3022 +#: builtin.c:3038 #, c-format msgid "lshift(%f, %f): negative values will give strange results" msgstr "lshift(%f, %f): negatieve waarden geven rare resultaten" -#: builtin.c:3024 +#: builtin.c:3040 #, c-format msgid "lshift(%f, %f): fractional values will be truncated" msgstr "lshift(%f, %f): cijfers na de komma worden afgekapt" -#: builtin.c:3026 +#: builtin.c:3042 #, 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:3051 +#: builtin.c:3067 msgid "rshift: received non-numeric first argument" msgstr "rshift: eerste argument is geen getal" -#: builtin.c:3053 +#: builtin.c:3069 msgid "rshift: received non-numeric second argument" msgstr "rshift: tweede argument is geen getal" -#: builtin.c:3059 +#: builtin.c:3075 #, c-format msgid "rshift(%f, %f): negative values will give strange results" msgstr "rshift(%f, %f): negatieve waarden geven rare resultaten" -#: builtin.c:3061 +#: builtin.c:3077 #, c-format msgid "rshift(%f, %f): fractional values will be truncated" msgstr "rshift(%f, %f): cijfers na de komma worden afgekapt" -#: builtin.c:3063 +#: builtin.c:3079 #, 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:3088 mpfr.c:968 +#: builtin.c:3104 mpfr.c:968 msgid "and: called with less than two arguments" msgstr "and: aangeroepen met minder dan twee argumenten" -#: builtin.c:3093 +#: builtin.c:3109 #, c-format msgid "and: argument %d is non-numeric" msgstr "and: argument %d is niet-numeriek" -#: builtin.c:3097 +#: builtin.c:3113 #, 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:3120 mpfr.c:1000 +#: builtin.c:3136 mpfr.c:1000 msgid "or: called with less than two arguments" msgstr "or: aangeroepen met minder dan twee argumenten" -#: builtin.c:3125 +#: builtin.c:3141 #, c-format msgid "or: argument %d is non-numeric" msgstr "or: argument %d is niet-numeriek" -#: builtin.c:3129 +#: builtin.c:3145 #, 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:3151 mpfr.c:1031 +#: builtin.c:3167 mpfr.c:1031 msgid "xor: called with less than two arguments" msgstr "xor: aangeroepen met minder dan twee argumenten" -#: builtin.c:3157 +#: builtin.c:3173 #, c-format msgid "xor: argument %d is non-numeric" msgstr "xor: argument %d is niet-numeriek" -#: builtin.c:3161 +#: builtin.c:3177 #, 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:3186 mpfr.c:787 +#: builtin.c:3202 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl: argument is geen getal" -#: builtin.c:3192 +#: builtin.c:3208 #, c-format msgid "compl(%f): negative value will give strange results" msgstr "compl(%f): negatieve waarden geven rare resultaten" -#: builtin.c:3194 +#: builtin.c:3210 #, c-format msgid "compl(%f): fractional value will be truncated" msgstr "compl(%f): cijfers na de komma worden afgekapt" -#: builtin.c:3363 +#: builtin.c:3379 #, c-format msgid "dcgettext: `%s' is not a valid locale category" msgstr "dcgettext: '%s' is geen geldige taalregio-deelcategorie" @@ -942,7 +967,8 @@ msgstr "save \"%s\": commando niet toegestaan." #: command.y:339 msgid "Can't use command `commands' for breakpoint/watchpoint commands" -msgstr "Kan commando 'commands' niet voor breekpunt-/kijkpunt-commando's gebruiken" +msgstr "" +"Kan commando 'commands' niet voor breekpunt-/kijkpunt-commando's gebruiken" #: command.y:341 msgid "no breakpoint/watchpoint has been set yet" @@ -1016,24 +1042,39 @@ msgid "non-zero integer value" msgstr "niet-nul geheel getal" #: command.y:817 -msgid "backtrace [N] - 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)" +msgid "" +"backtrace [N] - 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:819 -msgid "break [[filename:]N|function] - set breakpoint at the specified location." -msgstr "break [[BESTANDSNAAM:]REGELNUMMER|FUNCTIE] - breekpunt zetten op gegeven positie" +msgid "" +"break [[filename:]N|function] - set breakpoint at the specified location." +msgstr "" +"break [[BESTANDSNAAM:]REGELNUMMER|FUNCTIE] - breekpunt zetten op gegeven " +"positie" #: command.y:821 msgid "clear [[filename:]N|function] - delete breakpoints previously set." -msgstr "clear [[BESTANDSNAAM:]REGELNUMMER|FUNCTIE] - eerder gezet breekpunt verwijderen" +msgstr "" +"clear [[BESTANDSNAAM:]REGELNUMMER|FUNCTIE] - eerder gezet breekpunt " +"verwijderen" #: command.y:823 -msgid "commands [num] - starts a list of commands to be executed at a breakpoint(watchpoint) hit." -msgstr "commands [NUMMER] - een lijst van commando's beginnen die uitgevoerd moeten worden wanneer een breekpunt/kijkpunt getroffen wordt" +msgid "" +"commands [num] - starts a list of commands to be executed at a " +"breakpoint(watchpoint) hit." +msgstr "" +"commands [NUMMER] - een lijst van commando's beginnen die uitgevoerd moeten " +"worden wanneer een breekpunt/kijkpunt getroffen wordt" #: command.y:825 msgid "condition num [expr] - set or clear breakpoint or watchpoint condition." -msgstr "condition NUMMER [EXPRESSIE] - de conditie van een breekpunt/kijkpunt zetten of wissen" +msgstr "" +"condition NUMMER [EXPRESSIE] - de conditie van een breekpunt/kijkpunt zetten " +"of wissen" #: command.y:827 msgid "continue [COUNT] - continue program being debugged." @@ -1049,7 +1090,9 @@ msgstr "disable [BREEKPUNTEN] [BEREIK] - de gegeven breekpunten uitschakelen" #: command.y:833 msgid "display [var] - print value of variable each time the program stops." -msgstr "display [VAR] - waarde van variabele weergeven elke keer dat het programma stopt" +msgstr "" +"display [VAR] - waarde van variabele weergeven elke keer dat het programma " +"stopt" #: command.y:835 msgid "down [N] - move N frames down the stack." @@ -1057,11 +1100,14 @@ msgstr "down [AANTAL] - dit aantal frames naar beneden in de stack gaan" #: command.y:837 msgid "dump [filename] - dump instructions to file or stdout." -msgstr "dump [BESTANDSNAAM] - instructies dumpen op standaarduitvoer (of naar bestand)" +msgstr "" +"dump [BESTANDSNAAM] - instructies dumpen op standaarduitvoer (of naar " +"bestand)" #: command.y:839 msgid "enable [once|del] [breakpoints] [range] - enable specified breakpoints." -msgstr "enable [once|del] [BREEKPUNTEN] [BEREIK] - de gegeven breekpunten inschakelen" +msgstr "" +"enable [once|del] [BREEKPUNTEN] [BEREIK] - de gegeven breekpunten inschakelen" #: command.y:841 msgid "end - end a list of commands or awk statements." @@ -1081,27 +1127,41 @@ msgstr "frame [NUMMER] - stack-frame met dit nummer selecteren en weergeven" #: command.y:849 msgid "help [command] - print list of commands or explanation of command." -msgstr "help [COMMANDO] - lijst van beschikbare commando's (of uitleg van commando) tonen" +msgstr "" +"help [COMMANDO] - lijst van beschikbare commando's (of uitleg van commando) " +"tonen" #: command.y:851 msgid "ignore N COUNT - set ignore-count of breakpoint number N to COUNT." -msgstr "ignore NUMMER AANTAL - het aantal keren dat dit breekpuntnummer genegeerd moet worden" +msgstr "" +"ignore NUMMER AANTAL - het aantal keren dat dit breekpuntnummer genegeerd " +"moet worden" #: 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 [-|+|[BESTANDSNAAM:]REGELNUMMER|FUNCTIE|BEREIK] - aangegeven regels tonen" +msgstr "" +"list [-|+|[BESTANDSNAAM:]REGELNUMMER|FUNCTIE|BEREIK] - aangegeven regels " +"tonen" #: command.y:857 msgid "next [COUNT] - step program, proceeding through subroutine calls." -msgstr "next [AANTAL] - programma uitvoeren tot de volgende bronregel bereikt is" +msgstr "" +"next [AANTAL] - programma uitvoeren tot de volgende bronregel bereikt is" #: command.y:859 -msgid "nexti [COUNT] - step one instruction, but proceed through subroutine calls." -msgstr "nexti [AANTAL] - één instructie (of dit aantal) uitvoeren, waarbij een functie-aanroep als één telt" +msgid "" +"nexti [COUNT] - step one instruction, but proceed through subroutine calls." +msgstr "" +"nexti [AANTAL] - één instructie (of dit aantal) uitvoeren, waarbij een " +"functie-aanroep als één telt" #: command.y:861 msgid "option [name[=value]] - set or display debugger option(s)." @@ -1136,8 +1196,11 @@ msgid "set var = value - assign value to a scalar variable." msgstr "set VAR = WAARDE - een waarde aan een scalaire variabele toekennen" #: command.y:879 -msgid "silent - suspends usual message when stopped at a breakpoint/watchpoint." -msgstr "silent - de gewone meldingen bij het stoppen bij een breekpunt/kijkpunt onderdrukken" +msgid "" +"silent - suspends usual message when stopped at a breakpoint/watchpoint." +msgstr "" +"silent - de gewone meldingen bij het stoppen bij een breekpunt/kijkpunt " +"onderdrukken" #: command.y:881 msgid "source file - execute commands from file." @@ -1145,7 +1208,8 @@ msgstr "source BESTANDSNAAM - commando's uit dit bestand uitvoeren" #: command.y:883 msgid "step [COUNT] - step program until it reaches a different source line." -msgstr "step [AANTAL] - programma uitvoeren tot een andere bronregel bereikt is" +msgstr "" +"step [AANTAL] - programma uitvoeren tot een andere bronregel bereikt is" #: command.y:885 msgid "stepi [COUNT] - step one instruction exactly." @@ -1153,7 +1217,8 @@ msgstr "stepi [AANTAL] - precies één (of dit aantal) instructies uitvoeren" #: command.y:887 msgid "tbreak [[filename:]N|function] - set a temporary breakpoint." -msgstr "tbreak [[BESTANDSNAAM:]REGELNUMMER|FUNCTIE] - een tijdelijk breekpunt zetten" +msgstr "" +"tbreak [[BESTANDSNAAM:]REGELNUMMER|FUNCTIE] - een tijdelijk breekpunt zetten" #: command.y:889 msgid "trace on|off - print instruction before executing." @@ -1161,11 +1226,16 @@ msgstr "trace on|off - instructie weergeven alvorens deze uit te voeren" #: command.y:891 msgid "undisplay [N] - remove variable(s) from automatic display list." -msgstr "undisplay [AANTAL] - variabele(n) van automatische weergavelijst verwijderen" +msgstr "" +"undisplay [AANTAL] - variabele(n) van automatische weergavelijst verwijderen" #: command.y:893 -msgid "until [[filename:]N|function] - execute until program reaches a different line or line N within current frame." -msgstr "until [[BESTANDSNAAM:]N|FUNCTIE] - programma uitvoeren totdat deze een andere regel bereikt of regel N binnen het huidige frame" +msgid "" +"until [[filename:]N|function] - execute until program reaches a different " +"line or line N within current frame." +msgstr "" +"until [[BESTANDSNAAM:]N|FUNCTIE] - programma uitvoeren totdat deze een " +"andere regel bereikt of regel N binnen het huidige frame" #: command.y:895 msgid "unwatch [N] - remove variable(s) from watch list." @@ -1271,7 +1341,8 @@ msgstr "kan geen bronbestand met naam '%s' vinden (%s)" #: debug.c:529 #, c-format msgid "WARNING: source file `%s' modified since program compilation.\n" -msgstr "Waarschuwing: bronbestand '%s' is gewijzigd sinds programmacompilatie.\n" +msgstr "" +"Waarschuwing: bronbestand '%s' is gewijzigd sinds programmacompilatie.\n" #: debug.c:551 #, c-format @@ -1501,7 +1572,9 @@ msgstr "ongeldig framenummer" #: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" -msgstr "Opmerking: breekpunt %d (ingeschakeld, volgende %ld passages genegeerd), ook gezet op %s:%d" +msgstr "" +"Opmerking: breekpunt %d (ingeschakeld, volgende %ld passages genegeerd), ook " +"gezet op %s:%d" #: debug.c:2207 #, c-format @@ -1511,7 +1584,9 @@ msgstr "Opmerking: breekpunt %d (ingeschakeld), ook gezet op %s:%d" #: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" -msgstr "Opmerking: breekpunt %d (uitgeschakeld, volgende %ld passages genegeerd), ook gezet op %s:%d" +msgstr "" +"Opmerking: breekpunt %d (uitgeschakeld, volgende %ld passages genegeerd), " +"ook gezet op %s:%d" #: debug.c:2221 #, c-format @@ -1617,7 +1692,8 @@ msgstr "fout: kan niet herstarten; operatie is niet toegestaan\n" #: debug.c:2942 #, c-format msgid "error (%s): cannot restart, ignoring rest of the commands\n" -msgstr "fout(%s): kan niet herstarten; de resterende commando's worden genegeerd\n" +msgstr "" +"fout(%s): kan niet herstarten; de resterende commando's worden genegeerd\n" #: debug.c:2950 #, c-format @@ -1705,7 +1781,8 @@ msgstr "'until' is niet zinvol met een niet-lokale sprong '%s'\n" #: debug.c:4185 msgid "\t------[Enter] to continue or q [Enter] to quit------" -msgstr "\t------[Enter] om verder te gaan, of [q] [Enter] om af te sluiten------" +msgstr "" +"\t------[Enter] om verder te gaan, of [q] [Enter] om af te sluiten------" #: debug.c:4186 msgid "q" @@ -1739,40 +1816,40 @@ msgstr "'return' is niet toegestaan in huidige context; statement is genegeerd" msgid "No symbol `%s' in current context" msgstr "Geen symbool '%s' in huidige context" -#: 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: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 msgid "unbalanced [" msgstr "ongepaarde [" -#: dfa.c:1052 +#: dfa.c:1174 msgid "invalid character class" msgstr "ongeldige tekenklasse" -#: dfa.c:1228 +#: dfa.c:1316 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "syntax van tekenklasse is [[:space:]], niet [:space:]" -#: dfa.c:1280 +#: dfa.c:1366 msgid "unfinished \\ escape" msgstr "onafgemaakte \\-stuurcode" -#: dfa.c:1427 regcomp.c:161 +#: dfa.c:1513 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "Ongeldige inhoud van \\{\\}" -#: dfa.c:1430 regcomp.c:176 +#: dfa.c:1516 regcomp.c:176 msgid "Regular expression too big" msgstr "Reguliere expressie is te groot" -#: dfa.c:1847 +#: dfa.c:1936 msgid "unbalanced (" msgstr "ongepaarde (" -#: dfa.c:1973 +#: dfa.c:2062 msgid "no syntax specified" msgstr "geen syntax opgegeven" -#: dfa.c:1981 +#: dfa.c:2070 msgid "unbalanced )" msgstr "ongepaarde )" @@ -1894,8 +1971,10 @@ msgstr "load_ext: kan bibliotheek '%s' niet openen (%s)\n" #: ext.c:104 #, 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" +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 #, c-format @@ -1922,8 +2001,10 @@ msgstr "extension: kan bibliotheek '%s' niet openen (%s)" #: ext.c:186 #, 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)" +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 #, c-format @@ -1952,7 +2033,8 @@ msgstr "make_builtin: functienaam '%s' is al eerder gedefinieerd" #: ext.c:246 #, 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" +msgstr "" +"make_builtin: kan in gawk ingebouwde '%s' niet als functienaam gebruiken" #: ext.c:249 ext.c:304 #, c-format @@ -1991,7 +2073,8 @@ msgstr "extension: kan in gawk ingebouwde '%s' niet als functienaam gebruiken" #: ext.c:375 #, 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" +msgstr "" +"functie '%s' is gedefinieerd om niet meer dan %d argument(en) te accepteren" #: ext.c:378 #, c-format @@ -2014,7 +2097,8 @@ msgstr "het dynamisch laden van de bibliotheek wordt niet ondersteund" #: extension/filefuncs.c:159 msgid "chdir: called with incorrect number of arguments, expecting 1" -msgstr "chdir: aangeroepen met onjuist aantal argumenten; één wordt er verwacht" +msgstr "" +"chdir: aangeroepen met onjuist aantal argumenten; één wordt er verwacht" #: extension/filefuncs.c:439 #, c-format @@ -2065,7 +2149,8 @@ msgstr "fts-verwerking: kan element niet instellen" #: extension/filefuncs.c:784 msgid "fts: called with incorrect number of arguments, expecting 3" -msgstr "fts: aangeroepen met onjuist aantal argumenten; drie worden er verwacht" +msgstr "" +"fts: aangeroepen met onjuist aantal argumenten; drie worden er verwacht" #: extension/filefuncs.c:787 msgid "fts: bad first parameter" @@ -2159,12 +2244,15 @@ msgstr "inplace_begin(): verwachtte twee argumenten maar is aangeroepen met %d" #: extension/inplace.c:136 msgid "inplace_begin: cannot retrieve 1st argument as a string filename" -msgstr "inplace_begin(): kan eerste argument niet als bestandsnaamstring oppakken" +msgstr "" +"inplace_begin(): kan eerste argument niet als bestandsnaamstring oppakken" #: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" -msgstr "inplace_begin(): in-situ-bewerken wordt uitgeschakeld voor ongeldige bestandsnaam '%s'" +msgstr "" +"inplace_begin(): in-situ-bewerken wordt uitgeschakeld voor ongeldige " +"bestandsnaam '%s'" #: extension/inplace.c:151 #, c-format @@ -2203,7 +2291,8 @@ msgstr "inplace_begin(): close(%d) is mislukt (%s)" #: extension/inplace.c:210 msgid "inplace_end: cannot retrieve 1st argument as a string filename" -msgstr "inplace_end(): kan eerste argument niet als bestandsnaamstring oppakken" +msgstr "" +"inplace_end(): kan eerste argument niet als bestandsnaamstring oppakken" #: extension/inplace.c:217 msgid "inplace_end: in-place editing not active" @@ -2258,16 +2347,16 @@ msgstr "chr: aangeroepen zonder argumenten" msgid "chr: called with inappropriate argument(s)" msgstr "chr: aangeroepen met onjuiste 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() is mislukt: %s" -#: extension/readfile.c:84 +#: extension/readfile.c:113 msgid "readfile: called with too many arguments" msgstr "readfile: aangeroepen met te veel argumenten" -#: extension/readfile.c:118 +#: extension/readfile.c:137 msgid "readfile: called with no arguments" msgstr "readfile: aangeroepen zonder argumenten" @@ -2319,27 +2408,27 @@ msgstr "do_reada: clear_array() is mislukt\n" msgid "read_array: set_array_element failed\n" msgstr "read_array: set_array_element() is mislukt\n" -#: extension/time.c:106 +#: extension/time.c:113 msgid "gettimeofday: ignoring arguments" msgstr "gettimeofday: argumenten worden genegeerd" -#: extension/time.c:137 +#: extension/time.c:144 msgid "gettimeofday: not supported on this platform" msgstr "gettimeofday: wordt op dit platform niet ondersteund" -#: extension/time.c:158 +#: extension/time.c:165 msgid "sleep: called with too many arguments" msgstr "sleep: aangeroepen met te veel argumenten" -#: extension/time.c:161 +#: extension/time.c:168 msgid "sleep: missing required numeric argument" msgstr "sleep: vereist numeriek argument ontbreekt" -#: extension/time.c:167 +#: extension/time.c:174 msgid "sleep: argument is negative" msgstr "sleep: argument is negatief" -#: extension/time.c:201 +#: extension/time.c:208 msgid "sleep: not supported on this platform" msgstr "sleep: wordt op dit platform niet ondersteund" @@ -2361,15 +2450,21 @@ msgstr "split: tweede argument is geen array" #: field.c:993 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" +msgstr "" +"split: hetzelfde array kan niet zowel als tweede als als vierde argument " +"gebruikt worden" #: field.c:998 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" +msgstr "" +"split: een subarray van het tweede argument kan niet als vierde argument " +"gebruikt worden" #: field.c:1001 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" +msgstr "" +"split: een subarray van het vierde argument kan niet als tweede argument " +"gebruikt worden" #: field.c:1032 msgid "split: null string for third arg is a gawk extension" @@ -2389,15 +2484,21 @@ msgstr "patsplit: derde argument moet niet-nil zijn" #: field.c:1087 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" +msgstr "" +"patsplit: hetzelfde array kan niet zowel als tweede als als vierde argument " +"gebruikt worden" #: field.c:1092 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" +msgstr "" +"patsplit: een subarray van het tweede argument kan niet als vierde argument " +"gebruikt worden" #: field.c:1095 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" +msgstr "" +"patsplit: een subarray van het vierde argument kan niet als tweede argument " +"gebruikt worden" #: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" @@ -2432,20 +2533,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:808 +#: gawkapi.c:807 msgid "remove_element: received null array" msgstr "remove_element(): leeg array ontvangen" -#: gawkapi.c:811 +#: gawkapi.c:810 msgid "remove_element: received null subscript" msgstr "remove_element(): lege index ontvangen" -#: gawkapi.c:948 +#: gawkapi.c:947 #, c-format msgid "api_flatten_array: could not convert index %d\n" msgstr "api_flatten_array(): kan index %d niet converteren\n" -#: gawkapi.c:953 +#: gawkapi.c:952 #, c-format msgid "api_flatten_array: could not convert value %d\n" msgstr "api_flatten_array(): kan waarde %d niet converteren\n" @@ -2537,7 +2638,9 @@ msgstr "expressie voor omleiding '%s' heeft een lege string als waarde" #: io.c:761 #, 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" +msgstr "" +"bestandsnaam '%s' voor omleiding '%s' kan het resultaat zijn van een " +"logische expressie" #: io.c:809 #, c-format @@ -2570,8 +2673,10 @@ msgid "can't redirect to `%s' (%s)" msgstr "kan niet omleiden naar '%s' (%s)" #: io.c:1040 -msgid "reached system limit for open files: starting to multiplex file descriptors" -msgstr "systeemgrens voor aantal open bestanden is bereikt: begonnen met multiplexen" +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 #, c-format @@ -2598,7 +2703,9 @@ msgstr "sluiten van een nooit-geopende omleiding" #: io.c:1205 #, c-format msgid "close: redirection `%s' not opened with `|&', second argument ignored" -msgstr "close: omleiding '%s' is niet geopend met '|&'; tweede argument wordt genegeerd" +msgstr "" +"close: omleiding '%s' is niet geopend met '|&'; tweede argument wordt " +"genegeerd" #: io.c:1222 #, c-format @@ -2705,7 +2812,9 @@ msgstr "kan standaarduitvoer van dochterproces niet sluiten (%s)" #: io.c:1922 #, 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)" +msgstr "" +"kan slaaf-pty niet overzetten naar standaarduitvoer van dochterproces (dup: " +"%s)" #: io.c:1924 io.c:2110 #, c-format @@ -2715,7 +2824,9 @@ msgstr "kan standaardinvoer van dochterproces niet sluiten (%s)" #: io.c:1927 #, 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)" +msgstr "" +"kan slaaf-pty niet overzetten naar standaardinvoer van dochterproces (dup: " +"%s)" #: io.c:1929 io.c:1951 #, c-format @@ -2725,12 +2836,14 @@ msgstr "kan slaaf-pty niet sluiten (%s)" #: io.c:2040 io.c:2108 io.c:2276 io.c:2308 #, c-format msgid "moving pipe to stdout in child failed (dup: %s)" -msgstr "kan pijp niet overzetten naar standaarduitvoer van dochterproces (dup: %s)" +msgstr "" +"kan pijp niet overzetten naar standaarduitvoer van dochterproces (dup: %s)" #: io.c:2047 io.c:2113 #, c-format msgid "moving pipe to stdin in child failed (dup: %s)" -msgstr "kan pijp niet overzetten naar standaardinvoer van dochterproces (dup: %s)" +msgstr "" +"kan pijp niet overzetten naar standaardinvoer van dochterproces (dup: %s)" #: io.c:2073 io.c:2298 msgid "restoring stdout in parent process failed\n" @@ -2779,8 +2892,10 @@ msgstr "register_output_wrapper(): NULL-pointer gekregen" #: io.c:2873 #, 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'" +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 #, c-format @@ -2793,8 +2908,11 @@ msgstr "register_output_processor(): NULL-pointer gekregen" #: io.c:2930 #, c-format -msgid "two-way processor `%s' conflicts with previously installed two-way processor `%s'" -msgstr "tweeweg-processor '%s' botst met eerder geïnstalleerde tweeweg-processor '%s'" +msgid "" +"two-way processor `%s' conflicts with previously installed two-way processor " +"`%s'" +msgstr "" +"tweeweg-processor '%s' botst met eerder geïnstalleerde tweeweg-processor '%s'" #: io.c:2939 #, c-format @@ -3192,7 +3310,8 @@ msgstr "%s: negatieve waarde %2$Rg van argument #%1$d geeft rare resultaten" #: mpfr.c:863 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" +msgstr "" +"%s: cijfers na de komma van waarde %2$Rg van argument #%1$d worden afgekapt" #: mpfr.c:878 #, c-format @@ -3223,8 +3342,12 @@ msgstr "geen hex cijfers in stuurcodereeks '\\x'" #: node.c:579 #, c-format -msgid "hex escape \\x%.*s of %d characters probably not interpreted the way you expect" -msgstr "hexadecimale stuurcode \\x%.*s van %d tekens wordt waarschijnlijk niet afgehandeld zoals u verwacht" +msgid "" +"hex escape \\x%.*s of %d characters probably not interpreted the way you " +"expect" +msgstr "" +"hexadecimale stuurcode \\x%.*s van %d tekens wordt waarschijnlijk niet " +"afgehandeld zoals u verwacht" #: node.c:594 #, c-format @@ -3232,7 +3355,9 @@ msgid "escape sequence `\\%c' treated as plain `%c'" msgstr "stuurcodereeks '\\%c' behandeld als normale '%c'" #: node.c:739 -msgid "Invalid multibyte data detected. There may be a mismatch between your data and your locale." +msgid "" +"Invalid multibyte data detected. There may be a mismatch between your data " +"and your locale." msgstr "" "Ongeldige multibyte-gegevens gevonden.\n" "Uw gegevens passen vermoedelijk niet bij uw taalregio." @@ -3240,7 +3365,9 @@ msgstr "" #: posix/gawkmisc.c:177 #, c-format msgid "%s %s `%s': could not get fd flags: (fcntl F_GETFD: %s)" -msgstr "%s %s '%s': kan bestandsdescriptorvlaggen niet verkrijgen: (fcntl F_GETFD: %s)" +msgstr "" +"%s %s '%s': kan bestandsdescriptorvlaggen niet verkrijgen: (fcntl F_GETFD: " +"%s)" #: posix/gawkmisc.c:189 #, c-format @@ -3314,7 +3441,8 @@ msgstr "redir2str(): onbekend omleidingstype %d" #: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" -msgstr "component '%.*s' van reguliere expressie moet vermoedelijk '[%.*s]' zijn" +msgstr "" +"component '%.*s' van reguliere expressie moet vermoedelijk '[%.*s]' zijn" #: regcomp.c:131 msgid "Success" @@ -3385,7 +3513,9 @@ msgid "can not pop main context" msgstr "kan hoofdcontext niet poppen" #~ 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" +#~ 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" @@ -3456,8 +3586,11 @@ msgstr "kan hoofdcontext niet poppen" #~ msgid "statement has no effect" #~ msgstr "opdracht heeft geen effect" -#~ msgid "for loop: array `%s' changed size from %ld to %ld during loop execution" -#~ msgstr "for: array '%s' veranderde van grootte %ld naar %ld tijdens uitvoer van de lus" +#~ msgid "" +#~ "for loop: array `%s' changed size from %ld to %ld during loop execution" +#~ msgstr "" +#~ "for: array '%s' veranderde van grootte %ld naar %ld tijdens uitvoer van " +#~ "de lus" #~ msgid "function called indirectly through `%s' does not exist" #~ msgstr "indirect (via '%s') aangeroepen functie bestaat niet" @@ -3493,7 +3626,8 @@ msgstr "kan hoofdcontext niet poppen" #~ msgstr "kan groepen niet vinden: %s" #~ msgid "assignment is not allowed to result of builtin function" -#~ msgstr "toewijzing aan het resultaat van een ingebouwde functie is niet toegestaan" +#~ msgstr "" +#~ "toewijzing aan het resultaat van een ingebouwde functie is niet toegestaan" #~ msgid "attempt to use array in a scalar context" #~ msgstr "array wordt gebruikt in een scalaire context" @@ -3531,8 +3665,12 @@ msgstr "kan hoofdcontext niet poppen" #~ msgid "`nextfile' cannot be called from a BEGIN rule" #~ msgstr "'nextfile' kan niet aangeroepen worden in een BEGIN-regel" -#~ msgid "concatenation: side effects in one expression have changed the length of another!" -#~ msgstr "concatenation: neveneffecten in de ene expressie hebben de lengte van een andere veranderd!" +#~ msgid "" +#~ "concatenation: side effects in one expression have changed the length of " +#~ "another!" +#~ msgstr "" +#~ "concatenation: neveneffecten in de ene expressie hebben de lengte van een " +#~ "andere veranderd!" #~ msgid "illegal type (%s) in tree_eval" #~ msgstr "ongeldig type (%s) in tree_eval()" diff --git a/po/pl.gmo b/po/pl.gmo index 0683f658..b2c8e5fa 100644 Binary files a/po/pl.gmo and b/po/pl.gmo differ diff --git a/po/pl.po b/po/pl.po index 62b674f8..95ddbec2 100644 --- a/po/pl.po +++ b/po/pl.po @@ -9,7 +9,7 @@ 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" +"POT-Creation-Date: 2014-04-08 19:23+0300\n" "PO-Revision-Date: 2014-03-22 17:49+0100\n" "Last-Translator: Wojciech Polak \n" "Language-Team: Polish \n" @@ -17,7 +17,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" #: array.c:256 #, c-format @@ -38,8 +39,8 @@ 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:1599 builtin.c:1645 -#: builtin.c:1658 builtin.c:2086 builtin.c:2100 eval.c:1122 eval.c:1126 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" @@ -77,19 +78,23 @@ msgstr "asorti: pierwszy argument nie jest tablicÄ…" #: array.c:831 msgid "asort: cannot use a subarray of first arg for second arg" -msgstr "asort: nie można użyć podtablicy pierwszego argumentu dla drugiego argumentu" +msgstr "" +"asort: nie można użyć podtablicy pierwszego argumentu dla drugiego argumentu" #: array.c:832 msgid "asorti: cannot use a subarray of first arg for second arg" -msgstr "asorti: nie można użyć podtablicy pierwszego argumentu dla drugiego argumentu" +msgstr "" +"asorti: nie można użyć podtablicy pierwszego argumentu dla drugiego argumentu" #: array.c:837 msgid "asort: cannot use a subarray of second arg for first arg" -msgstr "asort: nie można użyć podtablicy drugiego argumentu dla pierwszego argumentu" +msgstr "" +"asort: nie można użyć podtablicy drugiego argumentu dla pierwszego argumentu" #: array.c:838 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" +msgstr "" +"asorti: nie można użyć podtablicy drugiego argumentu dla pierwszego argumentu" #: array.c:1314 #, c-format @@ -117,16 +122,19 @@ msgstr "stary awk nie wspiera wielokrotnych reguÅ‚ `BEGIN' lub `END'" #: awkgram.y:373 #, 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" +msgstr "" +"`%s' jest funkcjÄ… wbudowanÄ…, wiÄ™c nie może zostać ponownie zdefiniowana" #: awkgram.y:419 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" +msgstr "" +"staÅ‚e wyrażenie regularne `//' wyglÄ…da jak komentarz C++, ale nim nie jest" #: awkgram.y:423 #, 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" +msgstr "" +"staÅ‚e wyrażenie regularne `/%s/' wyglÄ…da jak komentarz C, ale nim nie jest" #: awkgram.y:515 #, c-format @@ -137,11 +145,11 @@ msgstr "powielone wartoÅ›ci case w ciele switch: %s" msgid "duplicate `default' detected in switch body" msgstr "wykryto powielony `default' w ciele switch" -#: awkgram.y:796 awkgram.y:3699 +#: awkgram.y:796 awkgram.y:3723 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:3691 +#: awkgram.y:805 awkgram.y:3715 msgid "`continue' is not allowed outside a loop" msgstr "instrukcja `continue' poza pÄ™tlÄ… jest niedozwolona" @@ -161,7 +169,9 @@ msgstr "`return' użyty poza kontekstem funkcji" #: awkgram.y:922 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 \"\"'" +msgstr "" +"zwykÅ‚y `print' w reguÅ‚ach BEGIN lub END powinien prawdopodobnie być jako " +"`print \"\"'" #: awkgram.y:988 awkgram.y:1037 msgid "`delete' is not allowed with SYMTAB" @@ -189,7 +199,8 @@ msgstr "wyrażenie regularne po lewej stronie operatora `~' lub `!~'" #: awkgram.y:1291 awkgram.y:1442 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'" +msgstr "" +"stary awk nie wspiera sÅ‚owa kluczowego `in', z wyjÄ…tkiem po sÅ‚owie `for'" #: awkgram.y:1301 msgid "regular expression on right of comparison" @@ -207,7 +218,8 @@ msgstr "nieprawidÅ‚owy `getline' wewnÄ…trz reguÅ‚y `%s'" #: awkgram.y:1425 msgid "non-redirected `getline' undefined inside END action" -msgstr "komenda `getline' bez przekierowania nie jest zdefiniowana wewnÄ…trz akcji END" +msgstr "" +"komenda `getline' bez przekierowania nie jest zdefiniowana wewnÄ…trz akcji END" #: awkgram.y:1444 msgid "old awk does not support multidimensional arrays" @@ -224,290 +236,301 @@ msgstr "poÅ›rednie wywoÅ‚ania funkcji sÄ… rozszerzeniem gawk" #: awkgram.y:1620 #, 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" +msgstr "" +"nie można użyć specjalnej zmiennej `%s' do poÅ›redniego wywoÅ‚ania funkcji" #: awkgram.y:1698 msgid "invalid subscript expression" msgstr "nieprawidÅ‚owe wyrażenie indeksowe" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126 +#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "ostrzeżenie: " -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158 +#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "fatalny błąd: " -#: awkgram.y:2092 +#: awkgram.y:2116 msgid "unexpected newline or end of string" msgstr "niespodziewany znak nowego wiersza lub koÅ„ca Å‚aÅ„cucha" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:523 debug.c:539 +#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 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:2360 awkgram.y:2485 +#: awkgram.y:2384 awkgram.y:2509 #, 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:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:135 debug.c:5206 +#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "nieznany powód" -#: awkgram.y:2371 awkgram.y:2395 +#: awkgram.y:2395 awkgram.y:2419 #, 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:2384 +#: awkgram.y:2408 #, c-format msgid "already included source file `%s'" msgstr "plik źródÅ‚owy `%s' jest już załączony" -#: awkgram.y:2385 +#: awkgram.y:2409 #, c-format msgid "already loaded shared library `%s'" msgstr "biblioteka współdzielona jest już zaÅ‚adowana `%s'" -#: awkgram.y:2420 +#: awkgram.y:2444 msgid "@include is a gawk extension" msgstr "@include jest rozszerzeniem gawk" -#: awkgram.y:2426 +#: awkgram.y:2450 msgid "empty filename after @include" msgstr "pusta nazwa pliku po @include" -#: awkgram.y:2470 +#: awkgram.y:2494 msgid "@load is a gawk extension" msgstr "@load jest rozszerzeniem gawk" -#: awkgram.y:2476 +#: awkgram.y:2500 msgid "empty filename after @load" msgstr "pusta nazwa pliku po @load" -#: awkgram.y:2610 +#: awkgram.y:2634 msgid "empty program text on command line" msgstr "pusty tekst programu w linii poleceÅ„" -#: awkgram.y:2725 +#: awkgram.y:2749 #, c-format msgid "can't read sourcefile `%s' (%s)" msgstr "nie można otworzyć pliku źródÅ‚owego `%s' (%s)" -#: awkgram.y:2736 +#: awkgram.y:2760 #, c-format msgid "source file `%s' is empty" msgstr "plik źródÅ‚owy `%s' jest pusty" -#: awkgram.y:2913 +#: awkgram.y:2937 msgid "source file does not end in newline" msgstr "plik źródÅ‚owy nie posiada na koÅ„cu znaku nowego wiersza" -#: awkgram.y:3018 +#: awkgram.y:3042 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" +msgstr "" +"niezakoÅ„czone prawidÅ‚owo wyrażenie regularne koÅ„czy siÄ™ znakiem `\\' na " +"koÅ„cu pliku" -#: awkgram.y:3042 +#: awkgram.y:3066 #, 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" +msgstr "" +"%s: %d: modyfikator wyrażenia regularnego `/.../%c' tawk nie dziaÅ‚a w gawk" -#: awkgram.y:3046 +#: awkgram.y:3070 #, 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:3053 +#: awkgram.y:3077 msgid "unterminated regexp" msgstr "niezakoÅ„czone wyrażenie regularne" -#: awkgram.y:3057 +#: awkgram.y:3081 msgid "unterminated regexp at end of file" msgstr "niezakoÅ„czone wyrażenie regularne na koÅ„cu pliku" -#: awkgram.y:3116 +#: awkgram.y:3140 msgid "use of `\\ #...' line continuation is not portable" msgstr "użycie `\\ #...' kontynuacji linii nie jest przenoÅ›ne" -#: awkgram.y:3132 +#: awkgram.y:3156 msgid "backslash not last character on line" msgstr "backslash nie jest ostatnim znakiem w wierszu" -#: awkgram.y:3193 +#: awkgram.y:3217 msgid "POSIX does not allow operator `**='" msgstr "POSIX nie zezwala na operator `**='" -#: awkgram.y:3195 +#: awkgram.y:3219 msgid "old awk does not support operator `**='" msgstr "stary awk nie wspiera operatora `**='" -#: awkgram.y:3204 +#: awkgram.y:3228 msgid "POSIX does not allow operator `**'" msgstr "POSIX nie zezwala na operator `**'" -#: awkgram.y:3206 +#: awkgram.y:3230 msgid "old awk does not support operator `**'" msgstr "stary awk nie wspiera operatora `**'" -#: awkgram.y:3241 +#: awkgram.y:3265 msgid "operator `^=' is not supported in old awk" msgstr "operator `^=' nie jest wspierany w starym awk" -#: awkgram.y:3249 +#: awkgram.y:3273 msgid "operator `^' is not supported in old awk" msgstr "operator `^' nie jest wspierany w starym awk" -#: awkgram.y:3342 awkgram.y:3358 command.y:1178 +#: awkgram.y:3366 awkgram.y:3382 command.y:1178 msgid "unterminated string" msgstr "niezakoÅ„czony Å‚aÅ„cuch" -#: awkgram.y:3579 +#: awkgram.y:3603 #, c-format msgid "invalid char '%c' in expression" msgstr "nieprawidÅ‚owy znak '%c' w wyrażeniu" -#: awkgram.y:3626 +#: awkgram.y:3650 #, c-format msgid "`%s' is a gawk extension" msgstr "`%s' jest rozszerzeniem gawk" -#: awkgram.y:3631 +#: awkgram.y:3655 #, c-format msgid "POSIX does not allow `%s'" msgstr "POSIX nie zezwala na `%s'" -#: awkgram.y:3639 +#: awkgram.y:3663 #, c-format msgid "`%s' is not supported in old awk" msgstr "`%s' nie jest wspierany w starym awk" -#: awkgram.y:3729 +#: awkgram.y:3753 msgid "`goto' considered harmful!\n" msgstr "`goto' uważane za szkodliwe!\n" -#: awkgram.y:3763 +#: awkgram.y:3787 #, 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:3798 +#: awkgram.y:3822 #, 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" +msgstr "" +"%s: literaÅ‚ Å‚aÅ„cuchowy jako ostatni argument podstawienia nie ma żadnego " +"efektu" -#: awkgram.y:3803 +#: awkgram.y:3827 #, c-format msgid "%s third parameter is not a changeable object" msgstr "%s trzeci parametr nie jest zmiennym obiektem" -#: awkgram.y:3886 awkgram.y:3889 +#: awkgram.y:3910 awkgram.y:3913 msgid "match: third argument is a gawk extension" msgstr "match: trzeci argument jest rozszerzeniem gawk" -#: awkgram.y:3943 awkgram.y:3946 +#: awkgram.y:3967 awkgram.y:3970 msgid "close: second argument is a gawk extension" msgstr "close: drugi argument jest rozszerzeniem gawk" -#: awkgram.y:3958 +#: awkgram.y:3982 msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore" msgstr "nieprawidÅ‚owe użycie dcgettext(_\"...\"): usuÅ„ znak podkreÅ›lenia" -#: awkgram.y:3973 +#: awkgram.y:3997 msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" msgstr "nieprawidÅ‚owe użycie dcngettext(_\"...\"): usuÅ„ znak podkreÅ›lenia" -#: awkgram.y:3992 +#: awkgram.y:4016 msgid "index: regexp constant as second argument is not allowed" msgstr "index: staÅ‚y regexp jako drugi argument nie jest dozwolony" -#: awkgram.y:4045 +#: awkgram.y:4069 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "funkcja `%s': parametr `%s' zasÅ‚ania globalnÄ… zmiennÄ…" -#: awkgram.y:4102 debug.c:4041 debug.c:4084 debug.c:5204 +#: awkgram.y:4126 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:4103 +#: awkgram.y:4127 msgid "sending variable list to standard error" msgstr "wysyÅ‚anie listy zmiennych na standardowe wyjÅ›cie diagnostyczne" -#: awkgram.y:4111 +#: awkgram.y:4135 #, c-format msgid "%s: close failed (%s)" msgstr "%s: zamkniÄ™cie nie powiodÅ‚o siÄ™ (%s)" -#: awkgram.y:4136 +#: awkgram.y:4160 msgid "shadow_funcs() called twice!" msgstr "shadow_funcs() wywoÅ‚ana podwójnie!" -#: awkgram.y:4144 +#: awkgram.y:4168 msgid "there were shadowed variables." msgstr "wystÄ…piÅ‚y przykryte zmienne." -#: awkgram.y:4215 +#: awkgram.y:4239 #, c-format msgid "function name `%s' previously defined" msgstr "nazwa funkcji `%s' zostaÅ‚a zdefiniowana poprzednio" -#: awkgram.y:4261 +#: awkgram.y:4285 #, 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:4264 +#: awkgram.y:4288 #, 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" +msgstr "" +"funkcja `%s': nie można użyć specjalnej zmiennej `%s' jako parametru funkcji" -#: awkgram.y:4272 +#: awkgram.y:4296 #, c-format msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d" msgstr "funkcja `%s': parametr #%d, `%s', powiela parametr #%d" -#: awkgram.y:4359 awkgram.y:4365 +#: awkgram.y:4383 awkgram.y:4389 #, c-format msgid "function `%s' called but never defined" msgstr "funkcja `%s' zostaÅ‚a wywoÅ‚ana, ale nigdy nie zostaÅ‚a zdefiniowana" -#: awkgram.y:4369 +#: awkgram.y:4393 #, 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" +msgstr "" +"funkcja `%s' zostaÅ‚a zdefiniowana, ale nigdy nie zostaÅ‚a wywoÅ‚ana " +"bezpoÅ›rednio" -#: awkgram.y:4401 +#: awkgram.y:4425 #, 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:4460 +#: awkgram.y:4484 #, c-format msgid "" "function `%s' called with space between name and `(',\n" "or used as a variable or an array" msgstr "" -"funkcja `%s' zostaÅ‚a wywoÅ‚ana z biaÅ‚ymi znakami pomiÄ™dzy jej nazwÄ… a znakiem `(',\n" +"funkcja `%s' zostaÅ‚a wywoÅ‚ana z biaÅ‚ymi znakami pomiÄ™dzy jej nazwÄ… a znakiem " +"`(',\n" "lub użyta jako zmienna lub jako tablica" -#: awkgram.y:4696 +#: awkgram.y:4720 msgid "division by zero attempted" msgstr "próba dzielenia przez zero" -#: awkgram.y:4705 +#: awkgram.y:4729 #, c-format msgid "division by zero attempted in `%%'" msgstr "próba dzielenia przez zero w `%%'" -#: awkgram.y:5025 -msgid "cannot assign a value to the result of a field post-increment expression" +#: awkgram.y:5049 +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:5028 +#: awkgram.y:5052 #, c-format msgid "invalid target of assignment (opcode %s)" msgstr "nieprawidÅ‚owy cel przypisania (opcode %s)" @@ -533,12 +556,14 @@ msgstr "exp: argument %g jest poza zasiÄ™giem" #: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" -msgstr "fflush: nie można opróżnić: potok `%s' otwarty do czytania, a nie do zapisu" +msgstr "" +"fflush: nie można opróżnić: potok `%s' otwarty do czytania, a nie do zapisu" #: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" -msgstr "fflush: nie można opróżnić: plik `%s' otwarty do czytania, a nie do zapisu" +msgstr "" +"fflush: nie można opróżnić: plik `%s' otwarty do czytania, a nie do zapisu" #: builtin.c:244 #, c-format @@ -608,7 +633,8 @@ msgstr "fatal: argument count z `$' musi być > 0" #: builtin.c:919 #, 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" +msgstr "" +"fatal: argument count %ld wiÄ™kszy niż caÅ‚kowita suma argumentów dostarczonych" #: builtin.c:923 msgid "fatal: `$' not permitted after period in format" @@ -618,297 +644,307 @@ msgstr "fatal: `$' jest niedozwolony po kropce w formacie" msgid "fatal: no `$' supplied for positional field width or precision" msgstr "fatal: brak `$' dla pozycyjnej szerokoÅ›ci pola lub precyzji" -#: builtin.c:1011 +#: builtin.c:1009 msgid "`l' is meaningless in awk formats; ignored" msgstr "`l' jest bezsensowny w formatach awk; zignorowany" -#: builtin.c:1015 +#: builtin.c:1013 msgid "fatal: `l' is not permitted in POSIX awk formats" msgstr "fatal: `l' jest niedozwolony w formatach POSIX awk" -#: builtin.c:1028 +#: builtin.c:1026 msgid "`L' is meaningless in awk formats; ignored" msgstr "`L' jest bezsensowny w formatach awk; zignorowany" -#: builtin.c:1032 +#: builtin.c:1030 msgid "fatal: `L' is not permitted in POSIX awk formats" msgstr "fatal: `L' jest niedozwolony w formatach POSIX awk" -#: builtin.c:1045 +#: builtin.c:1043 msgid "`h' is meaningless in awk formats; ignored" msgstr "`h' jest bezsensowny w formatach awk; zignorowany" -#: builtin.c:1049 +#: builtin.c:1047 msgid "fatal: `h' is not permitted in POSIX awk formats" msgstr "fatal: `h' jest niedozwolony w formatach POSIX awk" -#: builtin.c:1447 +#: builtin.c:1463 #, 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:1545 +#: builtin.c:1561 #, c-format msgid "ignoring unknown format specifier character `%c': no argument converted" -msgstr "pominiÄ™cie nieznanego formatu specyfikatora znaku `%c': nie skonwertowano argumentu" +msgstr "" +"pominiÄ™cie nieznanego formatu specyfikatora znaku `%c': nie skonwertowano " +"argumentu" -#: builtin.c:1550 +#: builtin.c:1566 msgid "fatal: not enough arguments to satisfy format string" -msgstr "fatal: brak wystarczajÄ…cej liczby argumentów, aby zaspokoić Å‚aÅ„cuch formatujÄ…cy" +msgstr "" +"fatal: brak wystarczajÄ…cej liczby argumentów, aby zaspokoić Å‚aÅ„cuch " +"formatujÄ…cy" -#: builtin.c:1552 +#: builtin.c:1568 msgid "^ ran out for this one" msgstr "zabrakÅ‚o ^" -#: builtin.c:1559 +#: builtin.c:1575 msgid "[s]printf: format specifier does not have control letter" msgstr "[s]printf: specyfikator formatu nie posiada kontrolnej litery" -#: builtin.c:1562 +#: builtin.c:1578 msgid "too many arguments supplied for format string" msgstr "zbyt dużo podanych argumentów w Å‚aÅ„cuchu formatujÄ…cym" -#: builtin.c:1618 +#: builtin.c:1634 msgid "sprintf: no arguments" msgstr "sprintf: brak argumentów" -#: builtin.c:1641 builtin.c:1652 +#: builtin.c:1657 builtin.c:1668 msgid "printf: no arguments" msgstr "printf: brak argumentów" -#: builtin.c:1695 +#: builtin.c:1711 msgid "sqrt: received non-numeric argument" msgstr "sqrt: otrzymano argument, który nie jest liczbÄ…" -#: builtin.c:1699 +#: builtin.c:1715 #, c-format msgid "sqrt: called with negative argument %g" msgstr "sqrt: wywoÅ‚ana z ujemnym argumentem %g" -#: builtin.c:1730 +#: builtin.c:1746 #, c-format msgid "substr: length %g is not >= 1" msgstr "substr: dÅ‚ugość %g nie jest >= 1" -#: builtin.c:1732 +#: builtin.c:1748 #, c-format msgid "substr: length %g is not >= 0" msgstr "substr: dÅ‚ugość %g nie jest >= 0" -#: builtin.c:1739 +#: builtin.c:1755 #, 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:1744 +#: builtin.c:1760 #, 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:1756 +#: builtin.c:1772 #, 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:1761 +#: builtin.c:1777 #, 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" +msgstr "" +"substr: poczÄ…tkowy indeks %g, który nie jest liczbÄ… caÅ‚kowitÄ…, zostanie " +"obciÄ™ty" -#: builtin.c:1786 +#: builtin.c:1802 msgid "substr: source string is zero length" msgstr "substr: Å‚aÅ„cuch źródÅ‚owy ma zerowÄ… dÅ‚ugość" -#: builtin.c:1802 +#: builtin.c:1818 #, 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:1810 +#: builtin.c:1826 #, c-format -msgid "substr: length %g at start index %g exceeds length of first argument (%lu)" -msgstr "substr: dÅ‚ugość %g zaczynajÄ…c od %g przekracza dÅ‚ugość pierwszego argumentu (%lu)" +msgid "" +"substr: length %g at start index %g exceeds length of first argument (%lu)" +msgstr "" +"substr: dÅ‚ugość %g zaczynajÄ…c od %g przekracza dÅ‚ugość pierwszego argumentu " +"(%lu)" -#: builtin.c:1884 +#: builtin.c:1900 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" -msgstr "strftime: wartość formatu w PROCINFO[\"strftime\"] posiada typ numeryczny" +msgstr "" +"strftime: wartość formatu w PROCINFO[\"strftime\"] posiada typ numeryczny" -#: builtin.c:1907 +#: builtin.c:1923 msgid "strftime: received non-numeric second argument" msgstr "strftime: otrzymano drugi argument, który nie jest liczbÄ…" -#: builtin.c:1911 +#: builtin.c:1927 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:1918 +#: builtin.c:1934 msgid "strftime: received non-string first argument" msgstr "strftime: otrzymano pierwszy argument, który nie jest Å‚aÅ„cuchem" -#: builtin.c:1925 +#: builtin.c:1941 msgid "strftime: received empty format string" msgstr "strftime: otrzymano pusty Å‚aÅ„cuch formatujÄ…cy" -#: builtin.c:1991 +#: builtin.c:2007 msgid "mktime: received non-string argument" msgstr "mktime: otrzymano argument, który nie jest Å‚aÅ„cuchem" -#: builtin.c:2008 +#: builtin.c:2024 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:2043 +#: builtin.c:2059 msgid "'system' function not allowed in sandbox mode" msgstr "funkcja 'system' nie jest dozwolona w trybie piaskownicy" -#: builtin.c:2048 +#: builtin.c:2064 msgid "system: received non-string argument" msgstr "system: otrzymano argument, który nie jest Å‚aÅ„cuchem" -#: builtin.c:2168 +#: builtin.c:2184 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "odwoÅ‚anie do niezainicjowanego pola `$%d'" -#: builtin.c:2255 +#: builtin.c:2271 msgid "tolower: received non-string argument" msgstr "tolower: otrzymano argument, który nie jest Å‚aÅ„cuchem" -#: builtin.c:2289 +#: builtin.c:2305 msgid "toupper: received non-string argument" msgstr "toupper: otrzymano argument, który nie jest Å‚aÅ„cuchem" -#: builtin.c:2325 mpfr.c:672 +#: builtin.c:2341 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2: otrzymano pierwszy argument, który nie jest liczbÄ…" -#: builtin.c:2327 mpfr.c:674 +#: builtin.c:2343 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2: otrzymano drugi argument, który nie jest liczbÄ…" -#: builtin.c:2346 +#: builtin.c:2362 msgid "sin: received non-numeric argument" msgstr "sin: otrzymano argument, który nie jest liczbÄ…" -#: builtin.c:2362 +#: builtin.c:2378 msgid "cos: received non-numeric argument" msgstr "cos: otrzymano argument, który nie jest liczbÄ…" -#: builtin.c:2415 mpfr.c:1156 +#: builtin.c:2431 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand: otrzymano argument, który nie jest liczbÄ…" -#: builtin.c:2446 +#: builtin.c:2462 msgid "match: third argument is not an array" msgstr "match: otrzymano trzeci argument, który nie jest tablicÄ…" -#: builtin.c:2718 +#: builtin.c:2734 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub: trzeci argument 0 potraktowany jako 1" -#: builtin.c:3014 +#: builtin.c:3030 msgid "lshift: received non-numeric first argument" msgstr "lshift: otrzymano pierwszy argument, który nie jest liczbÄ…" -#: builtin.c:3016 +#: builtin.c:3032 msgid "lshift: received non-numeric second argument" msgstr "lshift: otrzymano drugi argument, który nie jest liczbÄ…" -#: builtin.c:3022 +#: builtin.c:3038 #, c-format msgid "lshift(%f, %f): negative values will give strange results" msgstr "lshift(%f, %f): ujemne wartoÅ›ci spowodujÄ… dziwne wyniki" -#: builtin.c:3024 +#: builtin.c:3040 #, c-format msgid "lshift(%f, %f): fractional values will be truncated" msgstr "lshift(%f, %f): uÅ‚amkowe wartoÅ›ci zostanÄ… obciÄ™te" -#: builtin.c:3026 +#: builtin.c:3042 #, 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:3051 +#: builtin.c:3067 msgid "rshift: received non-numeric first argument" msgstr "rshift: otrzymano pierwszy argument, który nie jest liczbÄ…" -#: builtin.c:3053 +#: builtin.c:3069 msgid "rshift: received non-numeric second argument" msgstr "rshift: otrzymano drugi argument, który nie jest liczbÄ…" -#: builtin.c:3059 +#: builtin.c:3075 #, c-format msgid "rshift(%f, %f): negative values will give strange results" msgstr "rshift(%f, %f): ujemne wartoÅ›ci spowodujÄ… dziwne wyniki" -#: builtin.c:3061 +#: builtin.c:3077 #, c-format msgid "rshift(%f, %f): fractional values will be truncated" msgstr "rshift(%f, %f): uÅ‚amkowe wartoÅ›ci zostanÄ… obciÄ™te" -#: builtin.c:3063 +#: builtin.c:3079 #, 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:3088 mpfr.c:968 +#: builtin.c:3104 mpfr.c:968 msgid "and: called with less than two arguments" msgstr "and: wywoÅ‚ano z mniej niż dwoma argumentami" -#: builtin.c:3093 +#: builtin.c:3109 #, c-format msgid "and: argument %d is non-numeric" msgstr "and: argument %d nie jest liczbÄ…" -#: builtin.c:3097 +#: builtin.c:3113 #, 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:3120 mpfr.c:1000 +#: builtin.c:3136 mpfr.c:1000 msgid "or: called with less than two arguments" msgstr "or: wywoÅ‚ano z mniej niż dwoma argumentami" -#: builtin.c:3125 +#: builtin.c:3141 #, c-format msgid "or: argument %d is non-numeric" msgstr "or: argument %d nie jest liczbÄ…" -#: builtin.c:3129 +#: builtin.c:3145 #, 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:3151 mpfr.c:1031 +#: builtin.c:3167 mpfr.c:1031 msgid "xor: called with less than two arguments" msgstr "xor: wywoÅ‚ano z mniej niż dwoma argumentami" -#: builtin.c:3157 +#: builtin.c:3173 #, c-format msgid "xor: argument %d is non-numeric" msgstr "xor: argument %d nie jest liczbÄ…" -#: builtin.c:3161 +#: builtin.c:3177 #, 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:3186 mpfr.c:787 +#: builtin.c:3202 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl: otrzymano argument, który nie jest liczbÄ…" -#: builtin.c:3192 +#: builtin.c:3208 #, c-format msgid "compl(%f): negative value will give strange results" msgstr "compl(%f): ujemne wartoÅ›ci spowodujÄ… dziwne wyniki" -#: builtin.c:3194 +#: builtin.c:3210 #, c-format msgid "compl(%f): fractional value will be truncated" msgstr "compl(%f): uÅ‚amkowe wartoÅ›ci zostanÄ… obciÄ™te" -#: builtin.c:3363 +#: builtin.c:3379 #, c-format msgid "dcgettext: `%s' is not a valid locale category" msgstr "dcgettext: `%s' nie jest prawidÅ‚owÄ… kategoriÄ… lokalizacji" @@ -1014,11 +1050,14 @@ msgid "non-zero integer value" msgstr "niezerowa wartość" #: command.y:817 -msgid "backtrace [N] - print trace of all or N innermost (outermost if N < 0) frames." +msgid "" +"backtrace [N] - print trace of all or N innermost (outermost if N < 0) " +"frames." msgstr "" #: command.y:819 -msgid "break [[filename:]N|function] - set breakpoint at the specified location." +msgid "" +"break [[filename:]N|function] - set breakpoint at the specified location." msgstr "" #: command.y:821 @@ -1026,7 +1065,9 @@ msgid "clear [[filename:]N|function] - delete breakpoints previously set." msgstr "" #: command.y:823 -msgid "commands [num] - starts a list of commands to be executed at a breakpoint(watchpoint) hit." +msgid "" +"commands [num] - starts a list of commands to be executed at a " +"breakpoint(watchpoint) hit." msgstr "" #: command.y:825 @@ -1086,7 +1127,9 @@ msgid "ignore N COUNT - set ignore-count of breakpoint number N to COUNT." msgstr "" #: command.y:853 -msgid "info topic - source|sources|variables|functions|break|frame|args|locals|display|watch." +msgid "" +"info topic - source|sources|variables|functions|break|frame|args|locals|" +"display|watch." msgstr "" #: command.y:855 @@ -1098,7 +1141,8 @@ msgid "next [COUNT] - step program, proceeding through subroutine calls." msgstr "" #: command.y:859 -msgid "nexti [COUNT] - step one instruction, but proceed through subroutine calls." +msgid "" +"nexti [COUNT] - step one instruction, but proceed through subroutine calls." msgstr "" #: command.y:861 @@ -1134,7 +1178,8 @@ msgid "set var = value - assign value to a scalar variable." msgstr "" #: command.y:879 -msgid "silent - suspends usual message when stopped at a breakpoint/watchpoint." +msgid "" +"silent - suspends usual message when stopped at a breakpoint/watchpoint." msgstr "" #: command.y:881 @@ -1162,7 +1207,9 @@ msgid "undisplay [N] - remove variable(s) from automatic display list." msgstr "" #: command.y:893 -msgid "until [[filename:]N|function] - execute until program reaches a different line or line N within current frame." +msgid "" +"until [[filename:]N|function] - execute until program reaches a different " +"line or line N within current frame." msgstr "" #: command.y:895 @@ -1728,47 +1775,48 @@ msgstr "polecenie `%s' nie może być wywoÅ‚ane w tym kontekÅ›cie; zignorowano" #: debug.c:5389 msgid "`return' not allowed in current context; statement ignored" -msgstr "instrukcja `return' nie może być wywoÅ‚ana w tym kontekÅ›cie; zignorowano" +msgstr "" +"instrukcja `return' nie może być wywoÅ‚ana w tym kontekÅ›cie; zignorowano" #: debug.c:5590 #, c-format msgid "No symbol `%s' in current context" msgstr "Brak symbolu `%s' w bieżącym kontekÅ›cie" -#: 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: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 msgid "unbalanced [" msgstr "[ nie do pary" -#: dfa.c:1052 +#: dfa.c:1174 msgid "invalid character class" msgstr "nieprawidÅ‚owa klasa znaku" -#: dfa.c:1228 +#: dfa.c:1316 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "skÅ‚adnia klasy znaku to [[:space:]], a nie [:space:]" -#: dfa.c:1280 +#: dfa.c:1366 msgid "unfinished \\ escape" msgstr "niedokoÅ„czona sekwencja ucieczki \\" -#: dfa.c:1427 regcomp.c:161 +#: dfa.c:1513 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "NieprawidÅ‚owa zawartość \\{\\}" -#: dfa.c:1430 regcomp.c:176 +#: dfa.c:1516 regcomp.c:176 msgid "Regular expression too big" msgstr "Wyrażenie regularne jest zbyt duże" -#: dfa.c:1847 +#: dfa.c:1936 msgid "unbalanced (" msgstr "( nie do pary" -#: dfa.c:1973 +#: dfa.c:2062 msgid "no syntax specified" msgstr "nie podano skÅ‚adni" -#: dfa.c:1981 +#: dfa.c:2070 msgid "unbalanced )" msgstr ") nie do pary" @@ -1855,7 +1903,9 @@ msgstr "odwoÅ‚anie do niezainicjowanego pola `$%ld'" #: eval.c:1272 #, 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" +msgstr "" +"funkcja `%s' zostaÅ‚a wywoÅ‚ana z wiÄ™kszÄ… iloÅ›ciÄ… argumentów niż zostaÅ‚o to " +"zadeklarowane" #: eval.c:1473 #, c-format @@ -1890,8 +1940,10 @@ msgstr "load_ext: nie można otworzyć biblioteki `%s' (%s)\n" #: ext.c:104 #, 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" +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 #, c-format @@ -1901,7 +1953,8 @@ msgstr "load_ext: biblioteka `%s': nie można wywoÅ‚ać funkcji `%s' (%s)\n" #: ext.c:114 #, 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" +msgstr "" +"load_ext: funkcja inicjalizujÄ…ca `%s' biblioteki `%s' nie powiodÅ‚a siÄ™\n" #: ext.c:174 msgid "`extension' is a gawk extension" @@ -1918,8 +1971,10 @@ msgstr "extension: nie można otworzyć biblioteki `%s' (%s)" #: ext.c:186 #, 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)" +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 #, c-format @@ -2160,7 +2215,9 @@ msgstr "inplace_begin: nie można pobrać pierwszego argumentu jako nazwy pliku" #: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" -msgstr "inplace_begin: wyłączenie edycji w miejscu dla nieprawidÅ‚owej nazwy pliku `%s'" +msgstr "" +"inplace_begin: wyłączenie edycji w miejscu dla nieprawidÅ‚owej nazwy pliku `" +"%s'" #: extension/inplace.c:151 #, c-format @@ -2254,16 +2311,16 @@ msgstr "chr: wywoÅ‚ano bez argumentów" msgid "chr: called with inappropriate argument(s)" msgstr "chr: wywoÅ‚ano z nieprawidÅ‚owymi argumentami" -#: extension/readdir.c:277 +#: extension/readdir.c:281 #, c-format msgid "dir_take_control_of: opendir/fdopendir failed: %s" msgstr "dir_take_control_of: wywoÅ‚anie opendir/fdopendir nie powiodÅ‚o siÄ™: %s" -#: extension/readfile.c:84 +#: extension/readfile.c:113 msgid "readfile: called with too many arguments" msgstr "readfile: wywoÅ‚ana ze zbyt dużą iloÅ›ciÄ… argumentów" -#: extension/readfile.c:118 +#: extension/readfile.c:137 msgid "readfile: called with no arguments" msgstr "readfile: wywoÅ‚ano bez argumentów" @@ -2315,27 +2372,27 @@ msgstr "do_reada: clear_array nie powiodÅ‚a siÄ™\n" msgid "read_array: set_array_element failed\n" msgstr "read_array: set_array_element nie powiodÅ‚a siÄ™\n" -#: extension/time.c:106 +#: extension/time.c:113 msgid "gettimeofday: ignoring arguments" msgstr "gettimeofday: zignorowano argumenty" -#: extension/time.c:137 +#: extension/time.c:144 msgid "gettimeofday: not supported on this platform" msgstr "gettimeofday: funkcja nie jest wspierana na tej platformie" -#: extension/time.c:158 +#: extension/time.c:165 msgid "sleep: called with too many arguments" msgstr "sleep: wywoÅ‚ana ze zbyt dużą iloÅ›ciÄ… argumentów" -#: extension/time.c:161 +#: extension/time.c:168 msgid "sleep: missing required numeric argument" msgstr "sleep: brakuje wymaganego argumentu numerycznego" -#: extension/time.c:167 +#: extension/time.c:174 msgid "sleep: argument is negative" msgstr "sleep: argument jest ujemny" -#: extension/time.c:201 +#: extension/time.c:208 msgid "sleep: not supported on this platform" msgstr "sleep: funkcja nie jest wspierana na tej platformie" @@ -2357,15 +2414,18 @@ msgstr "split: drugi argument nie jest tablicÄ…" #: field.c:993 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" +msgstr "" +"split: nie można użyć tej samej tablicy dla drugiego i czwartego argumentu" #: field.c:998 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" +msgstr "" +"split: nie można użyć podtablicy drugiego argumentu dla czwartego argumentu" #: field.c:1001 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" +msgstr "" +"split: nie można użyć podtablicy czwartego argumentu dla drugiego argumentu" #: field.c:1032 msgid "split: null string for third arg is a gawk extension" @@ -2385,15 +2445,20 @@ msgstr "patsplit: trzeci argument nie może być pusty" #: field.c:1087 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" +msgstr "" +"patsplit: nie można użyć tej samej tablicy dla drugiego i czwartego argumentu" #: field.c:1092 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" +msgstr "" +"patsplit: nie można użyć podtablicy drugiego argumentu dla czwartego " +"argumentu" #: field.c:1095 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" +msgstr "" +"patsplit: nie można użyć podtablicy czwartego argumentu dla drugiego " +"argumentu" #: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" @@ -2428,20 +2493,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:808 +#: gawkapi.c:807 msgid "remove_element: received null array" msgstr "remove_element: otrzymano tablicÄ™ null" -#: gawkapi.c:811 +#: gawkapi.c:810 msgid "remove_element: received null subscript" msgstr "remove_element: otrzymano null subscript" -#: gawkapi.c:948 +#: gawkapi.c:947 #, 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:953 +#: gawkapi.c:952 #, 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" @@ -2533,7 +2598,9 @@ msgstr "wyrażenie dla przekierowania `%s' ma zerowÄ… wartość Å‚aÅ„cucha" #: io.c:761 #, 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" +msgstr "" +"nazwa pliku `%s' dla przekierowania `%s' może być rezultatem logicznego " +"wyrażenia" #: io.c:809 #, c-format @@ -2553,7 +2620,8 @@ msgstr "nie można otworzyć potoku `%s' jako wejÅ›cia (%s)" #: io.c:904 #, 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)" +msgstr "" +"nie można otworzyć dwukierunkowego potoku `%s' jako wejÅ›cia/wyjÅ›cia (%s)" #: io.c:986 #, c-format @@ -2566,8 +2634,11 @@ msgid "can't redirect to `%s' (%s)" msgstr "nie można przekierować do `%s' (%s)" #: io.c:1040 -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" +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 #, c-format @@ -2585,7 +2656,8 @@ msgstr "close: drugim argumentem musi być `to' lub `from'" #: io.c:1103 #, 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" +msgstr "" +"close: `%.*s' nie jest ani otwartym plikiem, ani potokiem, ani procesem" #: io.c:1108 msgid "close of redirection that was never opened" @@ -2594,7 +2666,9 @@ msgstr "zamkniÄ™cie przekierowania, które nigdy nie zostaÅ‚o otwarte" #: io.c:1205 #, c-format msgid "close: redirection `%s' not opened with `|&', second argument ignored" -msgstr "close: przekierowanie `%s' nie zostaÅ‚o otwarte z `|&', drugi argument zignorowany" +msgstr "" +"close: przekierowanie `%s' nie zostaÅ‚o otwarte z `|&', drugi argument " +"zignorowany" #: io.c:1222 #, c-format @@ -2644,7 +2718,8 @@ msgstr "opróżnienie potoku `%s' nie powiodÅ‚o siÄ™ (%s)." #: io.c:1300 #, 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)." +msgstr "" +"opróżnienie potoku do `%s' przez proces pomocniczy nie powiodÅ‚o siÄ™ (%s)." #: io.c:1303 #, c-format @@ -2696,22 +2771,28 @@ msgstr "zamkniÄ™cie nadrzÄ™dnego pty nie powiodÅ‚o siÄ™ (%s)" #: io.c:1919 io.c:2105 io.c:2305 #, c-format msgid "close of stdout in child failed (%s)" -msgstr "zamkniÄ™cie standardowego wyjÅ›cia w procesie potomnym nie powiodÅ‚o siÄ™ (%s)" +msgstr "" +"zamkniÄ™cie standardowego wyjÅ›cia w procesie potomnym nie powiodÅ‚o siÄ™ (%s)" #: io.c:1922 #, 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)" +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 #, c-format msgid "close of stdin in child failed (%s)" -msgstr "zamkniÄ™cie standardowego wejÅ›cia w procesie potomnym nie powiodÅ‚o siÄ™ (%s)" +msgstr "" +"zamkniÄ™cie standardowego wejÅ›cia w procesie potomnym nie powiodÅ‚o siÄ™ (%s)" #: io.c:1927 #, 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)" +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 #, c-format @@ -2721,20 +2802,26 @@ msgstr "zamkniÄ™cie podlegÅ‚ego pty nie powiodÅ‚o siÄ™ (%s)" #: io.c:2040 io.c:2108 io.c:2276 io.c:2308 #, 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)" +msgstr "" +"przesuniÄ™cie potoku na standardowe wyjÅ›cie w procesie potomnym nie powiodÅ‚o " +"siÄ™ (dup: %s)" #: io.c:2047 io.c:2113 #, 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)" +msgstr "" +"przesuniÄ™cie potoku na standardowe wejÅ›cie w procesie potomnym nie powiodÅ‚o " +"siÄ™ (dup: %s)" #: io.c:2073 io.c:2298 msgid "restoring stdout in parent process failed\n" -msgstr "odzyskanie standardowego wyjÅ›cia w procesie potomnym nie powiodÅ‚o siÄ™\n" +msgstr "" +"odzyskanie standardowego wyjÅ›cia w procesie potomnym nie powiodÅ‚o siÄ™\n" #: io.c:2081 msgid "restoring stdin in parent process failed\n" -msgstr "odzyskanie standardowego wejÅ›cia w procesie potomnym nie powiodÅ‚o siÄ™\n" +msgstr "" +"odzyskanie standardowego wejÅ›cia w procesie potomnym nie powiodÅ‚o siÄ™\n" #: io.c:2116 io.c:2310 io.c:2324 #, c-format @@ -2762,7 +2849,8 @@ msgstr "register_input_parser: otrzymano wskaźnik NULL" #: io.c:2818 #, c-format msgid "input parser `%s' conflicts with previously installed input parser `%s'" -msgstr "parser wejÅ›cia `%s' konfliktuje z poprzednio zainstalowanym parserem `%s'" +msgstr "" +"parser wejÅ›cia `%s' konfliktuje z poprzednio zainstalowanym parserem `%s'" #: io.c:2825 #, c-format @@ -2775,8 +2863,10 @@ msgstr "register_output_wrapper: otrzymano wskaźnik NULL" #: io.c:2873 #, c-format -msgid "output wrapper `%s' conflicts with previously installed output wrapper `%s'" -msgstr "otoczka wyjÅ›cia `%s' konfliktuje z poprzednio zainstalowanÄ… otoczkÄ… `%s'" +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 #, c-format @@ -2789,8 +2879,12 @@ msgstr "register_output_processor: otrzymano wskaźnik NULL" #: io.c:2930 #, c-format -msgid "two-way processor `%s' conflicts with previously installed two-way processor `%s'" -msgstr "dwukierunkowy procesor `%s' konfliktuje z poprzednio zainstalowanym procesorem `%s'" +msgid "" +"two-way processor `%s' conflicts with previously installed two-way processor " +"`%s'" +msgstr "" +"dwukierunkowy procesor `%s' konfliktuje z poprzednio zainstalowanym " +"procesorem `%s'" #: io.c:2939 #, c-format @@ -2830,7 +2924,8 @@ msgstr "%s: opcja musi mieć argument -- %c\n" #: main.c:562 msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'" -msgstr "zmienna Å›rodowiskowa `POSIXLY_CORRECT' ustawiona: `--posix' zostaÅ‚ włączony" +msgstr "" +"zmienna Å›rodowiskowa `POSIXLY_CORRECT' ustawiona: `--posix' zostaÅ‚ włączony" #: main.c:568 msgid "`--posix' overrides `--traditional'" @@ -2843,7 +2938,8 @@ msgstr "`--posix'/`--traditional' użyte nad opcjÄ… `--non-decimal-data'" #: main.c:583 #, 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" +msgstr "" +"uruchamianie %s setuid root może być problemem pod wzglÄ™dem bezpieczeÅ„stwa" #: main.c:588 msgid "`--posix' overrides `--characters-as-bytes'" @@ -2871,7 +2967,8 @@ msgstr "brak tekstu programu!" #: main.c:799 #, 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" +msgstr "" +"Użycie: %s [styl opcji POSIX lub GNU] -f plik_z_programem [--] plik ...\n" #: main.c:801 #, c-format @@ -3217,8 +3314,12 @@ msgstr "brak liczb szesnastkowych w sekwencji ucieczki `\\x'" #: node.c:579 #, c-format -msgid "hex escape \\x%.*s of %d characters probably not interpreted the way you expect" -msgstr "szesnastkowa sekwencja ucieczki \\x%.*s %d znaków prawdopodobnie nie zostaÅ‚a zinterpretowana jak tego oczekujesz" +msgid "" +"hex escape \\x%.*s of %d characters probably not interpreted the way you " +"expect" +msgstr "" +"szesnastkowa sekwencja ucieczki \\x%.*s %d znaków prawdopodobnie nie zostaÅ‚a " +"zinterpretowana jak tego oczekujesz" #: node.c:594 #, c-format @@ -3226,8 +3327,12 @@ msgid "escape sequence `\\%c' treated as plain `%c'" msgstr "sekwencja ucieczki `\\%c' potraktowana jako zwykÅ‚e `%c'" #: node.c:739 -msgid "Invalid multibyte data detected. There may be a mismatch between your data and your locale." -msgstr "Wykryto nieprawidÅ‚owe dane. Możliwe jest niedopasowanie pomiÄ™dzy Twoimi danymi a ustawieniami regionalnymi." +msgid "" +"Invalid multibyte data detected. There may be a mismatch between your data " +"and your locale." +msgstr "" +"Wykryto nieprawidÅ‚owe dane. Możliwe jest niedopasowanie pomiÄ™dzy Twoimi " +"danymi a ustawieniami regionalnymi." #: posix/gawkmisc.c:177 #, c-format @@ -3448,8 +3553,11 @@ msgstr "nie można zdjąć głównego kontekstu" #~ msgid "statement has no effect" #~ msgstr "instrukcja nie ma żadnego efektu" -#~ msgid "for loop: array `%s' changed size from %ld to %ld during loop execution" -#~ msgstr "pÄ™tla for: tablica `%s' zmieniÅ‚a rozmiar z %ld do %ld podczas wykonywania pÄ™tli" +#~ msgid "" +#~ "for loop: array `%s' changed size from %ld to %ld during loop execution" +#~ msgstr "" +#~ "pÄ™tla for: tablica `%s' zmieniÅ‚a rozmiar z %ld do %ld podczas wykonywania " +#~ "pÄ™tli" #~ msgid "function called indirectly through `%s' does not exist" #~ msgstr "poÅ›rednio wywoÅ‚ana funkcja poprzez `%s' nie istnieje" @@ -3458,7 +3566,9 @@ msgstr "nie można zdjąć głównego kontekstu" #~ 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'" +#~ 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" @@ -3503,7 +3613,8 @@ msgstr "nie można zdjąć głównego kontekstu" #~ msgstr "próba użycia skalaru `%s' jako tablicy" #~ msgid "call of `length' without parentheses is deprecated by POSIX" -#~ msgstr "wywoÅ‚anie `length' bez podania nawiasów jest niezalecane przez POSIX" +#~ msgstr "" +#~ "wywoÅ‚anie `length' bez podania nawiasów jest niezalecane przez POSIX" #~ msgid "division by zero attempted in `/'" #~ msgstr "próba dzielenia przez zero w `/'" @@ -3526,8 +3637,12 @@ msgstr "nie można zdjąć głównego kontekstu" #~ msgid "`nextfile' cannot be called from a BEGIN rule" #~ msgstr "instrukcja `nextfile' nie może być wywoÅ‚ana z wnÄ™trza reguÅ‚y BEGIN" -#~ msgid "concatenation: side effects in one expression have changed the length of another!" -#~ msgstr "konkatenacja: skutki uboczne w jednym wyrażeniu spowodowaÅ‚y zmianÄ™ dÅ‚ugoÅ›ci innego wyrażenia!" +#~ msgid "" +#~ "concatenation: side effects in one expression have changed the length of " +#~ "another!" +#~ msgstr "" +#~ "konkatenacja: skutki uboczne w jednym wyrażeniu spowodowaÅ‚y zmianÄ™ " +#~ "dÅ‚ugoÅ›ci innego wyrażenia!" #~ msgid "illegal type (%s) in tree_eval" #~ msgstr "nieprawidÅ‚owy typ (%s) w tree_eval" @@ -3591,7 +3706,8 @@ msgstr "nie można zdjąć głównego kontekstu" #~ msgstr "Nieznany typ wÄ™zÅ‚a %s w pp_var" #~ msgid "can't open two way socket `%s' for input/output (%s)" -#~ msgstr "nie można otworzyć dwukierunkowego gniazda `%s' jako wejÅ›cia/wyjÅ›cia (%s)" +#~ msgstr "" +#~ "nie można otworzyć dwukierunkowego gniazda `%s' jako wejÅ›cia/wyjÅ›cia (%s)" #~ msgid "%s: illegal option -- %c\n" #~ msgstr "%s: niewÅ‚aÅ›ciwa opcja -- %c\n" @@ -3610,7 +3726,8 @@ msgstr "nie można zdjąć głównego kontekstu" #~ "To report bugs, see node `Bugs' in `gawk.info', which is\n" #~ msgstr "" #~ "\n" -#~ "Aby zgÅ‚osić błędy, prosimy zobaczyć wÄ™zeÅ‚ `Bugs' w `gawk.info', który jest\n" +#~ "Aby zgÅ‚osić błędy, prosimy zobaczyć wÄ™zeÅ‚ `Bugs' w `gawk.info', który " +#~ "jest\n" #~ msgid "invalid syntax in name `%s' for variable assignment" #~ msgstr "błąd skÅ‚adni w nazwie `%s' dla przypisania zmiennej" @@ -3631,7 +3748,9 @@ msgstr "nie można zdjąć głównego kontekstu" #~ msgstr "`nextfile' użyty w akcji BEGIN lub END" #~ msgid "non-redirected `getline' undefined inside BEGIN or END action" -#~ msgstr "komenda `getline' bez przekierowania nie jest zdefiniowana wewnÄ…trz akcji BEGIN lub END" +#~ msgstr "" +#~ "komenda `getline' bez przekierowania nie jest zdefiniowana wewnÄ…trz akcji " +#~ "BEGIN lub END" #~ msgid "fptr %x not in tokentab\n" #~ msgstr "brak fptr %x w tokentab\n" diff --git a/po/sv.gmo b/po/sv.gmo index d0bebea6..11006e58 100644 Binary files a/po/sv.gmo and b/po/sv.gmo differ diff --git a/po/sv.po b/po/sv.po index 23e7037a..79b0bca8 100644 --- a/po/sv.po +++ b/po/sv.po @@ -10,7 +10,7 @@ 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" +"POT-Creation-Date: 2014-04-08 19:23+0300\n" "PO-Revision-Date: 2014-01-21 17:40+0100\n" "Last-Translator: Göran Uddeborg \n" "Language-Team: Swedish \n" @@ -38,8 +38,8 @@ 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:1599 builtin.c:1645 -#: builtin.c:1658 builtin.c:2086 builtin.c:2100 eval.c:1122 eval.c:1126 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" @@ -77,19 +77,27 @@ msgstr "asorti: första argumentet är inte en vektor" #: array.c:831 msgid "asort: cannot use a subarray of first arg for second arg" -msgstr "asort: det gÃ¥r inte att använda en delvektor av första argumentet som andra argument" +msgstr "" +"asort: det gÃ¥r inte att använda en delvektor av första argumentet som andra " +"argument" #: array.c:832 msgid "asorti: cannot use a subarray of first arg for second arg" -msgstr "asorti: det gÃ¥r inte att använda en delvektor av första argumentet som andra argument" +msgstr "" +"asorti: det gÃ¥r inte att använda en delvektor av första argumentet som andra " +"argument" #: array.c:837 msgid "asort: cannot use a subarray of second arg for first arg" -msgstr "asort: det gÃ¥r inte att använda en delvektor av andra argumentet som första argument" +msgstr "" +"asort: det gÃ¥r inte att använda en delvektor av andra argumentet som första " +"argument" #: array.c:838 msgid "asorti: cannot use a subarray of second arg for first arg" -msgstr "asorti: det gÃ¥r inte att använda en delvektor av andra argumentet som första argument" +msgstr "" +"asorti: det gÃ¥r inte att använda en delvektor av andra argumentet som första " +"argument" #: array.c:1314 #, c-format @@ -137,11 +145,11 @@ msgstr "upprepade case-värden i switch-sats: %s" msgid "duplicate `default' detected in switch body" msgstr "flera \"default\" upptäcktes i switch-sats" -#: awkgram.y:796 awkgram.y:3699 +#: awkgram.y:796 awkgram.y:3723 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:3691 +#: awkgram.y:805 awkgram.y:3715 msgid "`continue' is not allowed outside a loop" msgstr "\"continue\" är inte tillÃ¥tet utanför en slinga" @@ -161,7 +169,8 @@ msgstr "\"return\" använd utanför funktion" #: awkgram.y:922 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 \"\"'" +msgstr "" +"ensamt \"print\" i BEGIN eller END-regel bör troligen vara 'print \"\"'" #: awkgram.y:988 awkgram.y:1037 msgid "`delete' is not allowed with SYMTAB" @@ -224,268 +233,279 @@ msgstr "indirekta funktionsanrop är en gawk-utökning" #: awkgram.y:1620 #, 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" +msgstr "" +"det gÃ¥r inte att använda specialvariabeln \"%s\" för indirekta fuktionsanrop" #: awkgram.y:1698 msgid "invalid subscript expression" msgstr "ogiltig indexuttryck" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126 +#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "varning: " -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158 +#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "ödesdigert: " -#: awkgram.y:2092 +#: awkgram.y:2116 msgid "unexpected newline or end of string" msgstr "oväntat nyradstecken eller slut pÃ¥ strängen" -#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:523 debug.c:539 +#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 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:2360 awkgram.y:2485 +#: awkgram.y:2384 awkgram.y:2509 #, 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:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:135 debug.c:5206 +#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "okänd anledning" -#: awkgram.y:2371 awkgram.y:2395 +#: awkgram.y:2395 awkgram.y:2419 #, 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:2384 +#: awkgram.y:2408 #, c-format msgid "already included source file `%s'" msgstr "inkluderade redan källfilen \"%s\"" -#: awkgram.y:2385 +#: awkgram.y:2409 #, c-format msgid "already loaded shared library `%s'" msgstr "inkluderade redan det delade biblioteket â€%sâ€" -#: awkgram.y:2420 +#: awkgram.y:2444 msgid "@include is a gawk extension" msgstr "@include är en gawk-utökning" -#: awkgram.y:2426 +#: awkgram.y:2450 msgid "empty filename after @include" msgstr "tomt filnamn efter @include" -#: awkgram.y:2470 +#: awkgram.y:2494 msgid "@load is a gawk extension" msgstr "@load är en gawk-utökning" -#: awkgram.y:2476 +#: awkgram.y:2500 msgid "empty filename after @load" msgstr "tomt filnamn efter @load" -#: awkgram.y:2610 +#: awkgram.y:2634 msgid "empty program text on command line" msgstr "tom programtext pÃ¥ kommandoraden" -#: awkgram.y:2725 +#: awkgram.y:2749 #, c-format msgid "can't read sourcefile `%s' (%s)" msgstr "kan inte läsa källfilen \"%s\" (%s)" -#: awkgram.y:2736 +#: awkgram.y:2760 #, c-format msgid "source file `%s' is empty" msgstr "källfilen \"%s\" är tom" -#: awkgram.y:2913 +#: awkgram.y:2937 msgid "source file does not end in newline" msgstr "källfilen slutar inte med en ny rad" -#: awkgram.y:3018 +#: awkgram.y:3042 msgid "unterminated regexp ends with `\\' at end of file" msgstr "oavslutat reguljärt uttryck slutar med \"\\\" i slutet av filen" -#: awkgram.y:3042 +#: awkgram.y:3066 #, 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" +msgstr "" +"%s: %d: tawk-modifierare för reguljära uttryck \"/.../%c\" fungerar inte i " +"gawk" -#: awkgram.y:3046 +#: awkgram.y:3070 #, 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" +msgstr "" +"tawk-modifierare för reguljära uttryck \"/.../%c\" fungerar inte i gawk" -#: awkgram.y:3053 +#: awkgram.y:3077 msgid "unterminated regexp" msgstr "oavslutat reguljärt uttryck" -#: awkgram.y:3057 +#: awkgram.y:3081 msgid "unterminated regexp at end of file" msgstr "oavslutat reguljärt uttryck i slutet av filen" -#: awkgram.y:3116 +#: awkgram.y:3140 msgid "use of `\\ #...' line continuation is not portable" msgstr "Användning av \"\\ #...\" för radfortsättning är inte portabelt" -#: awkgram.y:3132 +#: awkgram.y:3156 msgid "backslash not last character on line" msgstr "sista tecknet pÃ¥ raden är inte ett omvänt snedstreck" -#: awkgram.y:3193 +#: awkgram.y:3217 msgid "POSIX does not allow operator `**='" msgstr "POSIX tillÃ¥ter inte operatorn \"**=\"" -#: awkgram.y:3195 +#: awkgram.y:3219 msgid "old awk does not support operator `**='" msgstr "gamla awk stöder inte operatorn \"**=\"" -#: awkgram.y:3204 +#: awkgram.y:3228 msgid "POSIX does not allow operator `**'" msgstr "POSIX tillÃ¥ter inte operatorn \"**\"" -#: awkgram.y:3206 +#: awkgram.y:3230 msgid "old awk does not support operator `**'" msgstr "gamla awk stöder inte operatorn \"**\"" -#: awkgram.y:3241 +#: awkgram.y:3265 msgid "operator `^=' is not supported in old awk" msgstr "operatorn \"^=\" stöds inte i gamla awk" -#: awkgram.y:3249 +#: awkgram.y:3273 msgid "operator `^' is not supported in old awk" msgstr "operatorn \"^\" stöds inte i gamla awk" -#: awkgram.y:3342 awkgram.y:3358 command.y:1178 +#: awkgram.y:3366 awkgram.y:3382 command.y:1178 msgid "unterminated string" msgstr "oavslutad sträng" -#: awkgram.y:3579 +#: awkgram.y:3603 #, c-format msgid "invalid char '%c' in expression" msgstr "ogiltigt tecken \"%c\" i uttryck" -#: awkgram.y:3626 +#: awkgram.y:3650 #, c-format msgid "`%s' is a gawk extension" msgstr "\"%s\" är en gawk-utökning" -#: awkgram.y:3631 +#: awkgram.y:3655 #, c-format msgid "POSIX does not allow `%s'" msgstr "POSIX tillÃ¥ter inte \"%s\"" -#: awkgram.y:3639 +#: awkgram.y:3663 #, c-format msgid "`%s' is not supported in old awk" msgstr "\"%s\" stöds inte i gamla awk" -#: awkgram.y:3729 +#: awkgram.y:3753 msgid "`goto' considered harmful!\n" msgstr "\"goto\" anses skadlig!\n" -#: awkgram.y:3763 +#: awkgram.y:3787 #, c-format msgid "%d is invalid as number of arguments for %s" msgstr "%d är ett ogiltigt antal argument för %s" -#: awkgram.y:3798 +#: awkgram.y:3822 #, 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" +msgstr "" +"%s: bokstavlig sträng som sista argument till ersättning har ingen effekt" -#: awkgram.y:3803 +#: awkgram.y:3827 #, c-format msgid "%s third parameter is not a changeable object" msgstr "%s: tredje argumentet är inte ett ändringsbart objekt" -#: awkgram.y:3886 awkgram.y:3889 +#: awkgram.y:3910 awkgram.y:3913 msgid "match: third argument is a gawk extension" msgstr "match: tredje argumentet är en gawk-utökning" -#: awkgram.y:3943 awkgram.y:3946 +#: awkgram.y:3967 awkgram.y:3970 msgid "close: second argument is a gawk extension" msgstr "close: andra argumentet är en gawk-utökning" -#: awkgram.y:3958 +#: awkgram.y:3982 msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore" -msgstr "användandet av dcgettext(_\"...\") är felaktigt: ta bort det inledande understrykningstecknet" +msgstr "" +"användandet av dcgettext(_\"...\") är felaktigt: ta bort det inledande " +"understrykningstecknet" -#: awkgram.y:3973 +#: awkgram.y:3997 msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore" -msgstr "användandet av dcngettext(_\"...\") är felaktigt: ta bort det inledande understrykningstecknet" +msgstr "" +"användandet av dcngettext(_\"...\") är felaktigt: ta bort det inledande " +"understrykningstecknet" -#: awkgram.y:3992 +#: awkgram.y:4016 msgid "index: regexp constant as second argument is not allowed" msgstr "index: reguljäruttryck som andra argumentet är inte tillÃ¥tet" -#: awkgram.y:4045 +#: awkgram.y:4069 #, c-format msgid "function `%s': parameter `%s' shadows global variable" msgstr "funktionen \"%s\": parametern \"%s\" överskuggar en global variabel" -#: awkgram.y:4102 debug.c:4041 debug.c:4084 debug.c:5204 +#: awkgram.y:4126 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:4103 +#: awkgram.y:4127 msgid "sending variable list to standard error" msgstr "skickar variabellista till standard fel" -#: awkgram.y:4111 +#: awkgram.y:4135 #, c-format msgid "%s: close failed (%s)" msgstr "%s: misslyckades att stänga (%s)" -#: awkgram.y:4136 +#: awkgram.y:4160 msgid "shadow_funcs() called twice!" msgstr "shadow_funcs() anropad tvÃ¥ gÃ¥nger!" -#: awkgram.y:4144 +#: awkgram.y:4168 msgid "there were shadowed variables." msgstr "det fanns överskuggade variabler." -#: awkgram.y:4215 +#: awkgram.y:4239 #, c-format msgid "function name `%s' previously defined" msgstr "funktionsnamnet \"%s\" är definierat sedan tidigare" -#: awkgram.y:4261 +#: awkgram.y:4285 #, 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:4264 +#: awkgram.y:4288 #, 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" +msgstr "" +"funktionen \"%s\": det gÃ¥r inte att använda specialvariabeln \"%s\" som en " +"funktionsparameter" -#: awkgram.y:4272 +#: awkgram.y:4296 #, c-format msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d" msgstr "funktionen \"%s\": parameter %d, \"%s\", är samma som parameter %d" -#: awkgram.y:4359 awkgram.y:4365 +#: awkgram.y:4383 awkgram.y:4389 #, c-format msgid "function `%s' called but never defined" msgstr "funktionen \"%s\" anropad men aldrig definierad" -#: awkgram.y:4369 +#: awkgram.y:4393 #, c-format msgid "function `%s' defined but never called directly" msgstr "funktionen \"%s\" definierad men aldrig anropad direkt" -#: awkgram.y:4401 +#: awkgram.y:4425 #, 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:4460 +#: awkgram.y:4484 #, c-format msgid "" "function `%s' called with space between name and `(',\n" @@ -494,20 +514,23 @@ msgstr "" "funktionen \"%s\" anropad med blanktecken mellan namnet och \"(\",\n" "eller använd som variabel eller vektor" -#: awkgram.y:4696 +#: awkgram.y:4720 msgid "division by zero attempted" msgstr "försökte dividera med noll" -#: awkgram.y:4705 +#: awkgram.y:4729 #, c-format msgid "division by zero attempted in `%%'" msgstr "försökte dividera med noll i \"%%\"" -#: awkgram.y:5025 -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:5049 +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:5028 +#: awkgram.y:5052 #, c-format msgid "invalid target of assignment (opcode %s)" msgstr "ogiltigt mÃ¥l för tilldelning (op-kod %s)" @@ -533,12 +556,14 @@ msgstr "exp: argumentet %g är inte inom tillÃ¥ten gräns" #: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" -msgstr "fflush: kan inte spola: röret \"%s\" öppnat för läsning, inte skrivning" +msgstr "" +"fflush: kan inte spola: röret \"%s\" öppnat för läsning, inte skrivning" #: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" -msgstr "fflush: kan inte spola: filen \"%s\" öppnad för läsning, inte skrivning" +msgstr "" +"fflush: kan inte spola: filen \"%s\" öppnad för läsning, inte skrivning" #: builtin.c:244 #, c-format @@ -616,299 +641,305 @@ msgstr "ödesdigert: \"$\" tillÃ¥ts inte efter en punkt i formatet" #: builtin.c:939 msgid "fatal: no `$' supplied for positional field width or precision" -msgstr "ödesdigert: inget \"$\" bifogat för positionsangiven fältbredd eller precision" +msgstr "" +"ödesdigert: inget \"$\" bifogat för positionsangiven fältbredd eller " +"precision" -#: builtin.c:1011 +#: builtin.c:1009 msgid "`l' is meaningless in awk formats; ignored" msgstr "\"l\" är meningslös i awk-format, ignorerad" -#: builtin.c:1015 +#: builtin.c:1013 msgid "fatal: `l' is not permitted in POSIX awk formats" msgstr "ödesdigert: \"l\" tillÃ¥ts inte i POSIX awk-format" -#: builtin.c:1028 +#: builtin.c:1026 msgid "`L' is meaningless in awk formats; ignored" msgstr "\"L\" är meningslös i awk-format, ignorerad" -#: builtin.c:1032 +#: builtin.c:1030 msgid "fatal: `L' is not permitted in POSIX awk formats" msgstr "ödesdigert: \"L\" tillÃ¥ts inte i POSIX awk-format" -#: builtin.c:1045 +#: builtin.c:1043 msgid "`h' is meaningless in awk formats; ignored" msgstr "\"h\" är meningslös i awk-format, ignorerad" -#: builtin.c:1049 +#: builtin.c:1047 msgid "fatal: `h' is not permitted in POSIX awk formats" msgstr "ödesdigert: \"h\" tillÃ¥ts inte i POSIX awk-format" -#: builtin.c:1447 +#: builtin.c:1463 #, 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:1545 +#: builtin.c:1561 #, c-format msgid "ignoring unknown format specifier character `%c': no argument converted" -msgstr "ignorerar okänt formatspecifikationstecken \"%c\": inget argument konverterat" +msgstr "" +"ignorerar okänt formatspecifikationstecken \"%c\": inget argument konverterat" -#: builtin.c:1550 +#: builtin.c:1566 msgid "fatal: not enough arguments to satisfy format string" msgstr "ödesdigert: för fÃ¥ argument för formatsträngen" -#: builtin.c:1552 +#: builtin.c:1568 msgid "^ ran out for this one" msgstr "^ tog slut här" -#: builtin.c:1559 +#: builtin.c:1575 msgid "[s]printf: format specifier does not have control letter" msgstr "[s]printf: formatspecifieraren har ingen kommandobokstav" -#: builtin.c:1562 +#: builtin.c:1578 msgid "too many arguments supplied for format string" msgstr "för mÃ¥nga argument för formatsträngen" -#: builtin.c:1618 +#: builtin.c:1634 msgid "sprintf: no arguments" msgstr "sprintf: inga argument" -#: builtin.c:1641 builtin.c:1652 +#: builtin.c:1657 builtin.c:1668 msgid "printf: no arguments" msgstr "printf: inga argument" -#: builtin.c:1695 +#: builtin.c:1711 msgid "sqrt: received non-numeric argument" msgstr "sqrt: fick ickenumeriskt argument" -#: builtin.c:1699 +#: builtin.c:1715 #, c-format msgid "sqrt: called with negative argument %g" msgstr "sqrt: anropad med negativt argument %g" -#: builtin.c:1730 +#: builtin.c:1746 #, c-format msgid "substr: length %g is not >= 1" msgstr "substr: längden %g är inte >= 1" -#: builtin.c:1732 +#: builtin.c:1748 #, c-format msgid "substr: length %g is not >= 0" msgstr "substr: längden %g är inte >= 0" -#: builtin.c:1739 +#: builtin.c:1755 #, 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:1744 +#: builtin.c:1760 #, 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:1756 +#: builtin.c:1772 #, c-format msgid "substr: start index %g is invalid, using 1" msgstr "substr: startindex %g är ogiltigt, använder 1" -#: builtin.c:1761 +#: builtin.c:1777 #, 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:1786 +#: builtin.c:1802 msgid "substr: source string is zero length" msgstr "substr: källsträngen är tom" -#: builtin.c:1802 +#: builtin.c:1818 #, c-format msgid "substr: start index %g is past end of string" msgstr "substr: startindex %g är bortom strängens slut" -#: builtin.c:1810 +#: builtin.c:1826 #, c-format -msgid "substr: length %g at start index %g exceeds length of first argument (%lu)" -msgstr "substr: längden %g vid startindex %g överskrider det första argumentets längd (%lu)" +msgid "" +"substr: length %g at start index %g exceeds length of first argument (%lu)" +msgstr "" +"substr: längden %g vid startindex %g överskrider det första argumentets " +"längd (%lu)" -#: builtin.c:1884 +#: builtin.c:1900 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type" msgstr "strftime: formatvärde i PROCINFO[\"strftime\"] har numerisk typ" -#: builtin.c:1907 +#: builtin.c:1923 msgid "strftime: received non-numeric second argument" msgstr "strftime: fick ett ickenumeriskt andra argument" -#: builtin.c:1911 +#: builtin.c:1927 msgid "strftime: second argument less than 0 or too big for time_t" msgstr "strftime: andra argimentet mindre än 0 eller för stort för time_t" -#: builtin.c:1918 +#: builtin.c:1934 msgid "strftime: received non-string first argument" msgstr "strftime: fick ett första argument som inte är en sträng" -#: builtin.c:1925 +#: builtin.c:1941 msgid "strftime: received empty format string" msgstr "strftime: fick en tom formatsträng" -#: builtin.c:1991 +#: builtin.c:2007 msgid "mktime: received non-string argument" msgstr "mktime: fick ett argument som inte är en sträng" -#: builtin.c:2008 +#: builtin.c:2024 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:2043 +#: builtin.c:2059 msgid "'system' function not allowed in sandbox mode" msgstr "funktionen \"system\" är inte tillÃ¥ten i sandlÃ¥deläge" -#: builtin.c:2048 +#: builtin.c:2064 msgid "system: received non-string argument" msgstr "system: fick ett argument som inte är en sträng" -#: builtin.c:2168 +#: builtin.c:2184 #, c-format msgid "reference to uninitialized field `$%d'" msgstr "referens till icke initierat fält \"$%d\"" -#: builtin.c:2255 +#: builtin.c:2271 msgid "tolower: received non-string argument" msgstr "tolower: fick ett argument som inte är en sträng" -#: builtin.c:2289 +#: builtin.c:2305 msgid "toupper: received non-string argument" msgstr "toupper: fick ett argument som inte är en sträng" -#: builtin.c:2325 mpfr.c:672 +#: builtin.c:2341 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2: fick ett ickenumeriskt första argument" -#: builtin.c:2327 mpfr.c:674 +#: builtin.c:2343 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2: fick ett ickenumeriskt andra argument" -#: builtin.c:2346 +#: builtin.c:2362 msgid "sin: received non-numeric argument" msgstr "sin: fick ett ickenumeriskt argument" -#: builtin.c:2362 +#: builtin.c:2378 msgid "cos: received non-numeric argument" msgstr "cos: fick ett ickenumeriskt argument" -#: builtin.c:2415 mpfr.c:1156 +#: builtin.c:2431 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand: fick ett ickenumeriskt argument" -#: builtin.c:2446 +#: builtin.c:2462 msgid "match: third argument is not an array" msgstr "match: tredje argumentet är inte en vektor" -#: builtin.c:2718 +#: builtin.c:2734 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub: nollan i tredje argumentet behandlad som en etta" -#: builtin.c:3014 +#: builtin.c:3030 msgid "lshift: received non-numeric first argument" msgstr "lshift: fick ett ickenumeriskt första argument" -#: builtin.c:3016 +#: builtin.c:3032 msgid "lshift: received non-numeric second argument" msgstr "lshift: fick ett ickenumeriskt andra argument" -#: builtin.c:3022 +#: builtin.c:3038 #, 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:3024 +#: builtin.c:3040 #, c-format msgid "lshift(%f, %f): fractional values will be truncated" msgstr "lshift(%f, %f): flyttalsvärden kommer huggas av" -#: builtin.c:3026 +#: builtin.c:3042 #, 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:3051 +#: builtin.c:3067 msgid "rshift: received non-numeric first argument" msgstr "rshift: fick ett ickenumeriskt första argument" -#: builtin.c:3053 +#: builtin.c:3069 msgid "rshift: received non-numeric second argument" msgstr "rshift: fick ett ickenumeriskt andra argument" -#: builtin.c:3059 +#: builtin.c:3075 #, 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:3061 +#: builtin.c:3077 #, c-format msgid "rshift(%f, %f): fractional values will be truncated" msgstr "rshift(%f, %f): flyttalsvärden kommer huggas av" -#: builtin.c:3063 +#: builtin.c:3079 #, 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:3088 mpfr.c:968 +#: builtin.c:3104 mpfr.c:968 msgid "and: called with less than two arguments" msgstr "and: anropad med mindre än tvÃ¥ argument" -#: builtin.c:3093 +#: builtin.c:3109 #, c-format msgid "and: argument %d is non-numeric" msgstr "and: argument %d är inte numeriskt" -#: builtin.c:3097 +#: builtin.c:3113 #, 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:3120 mpfr.c:1000 +#: builtin.c:3136 mpfr.c:1000 msgid "or: called with less than two arguments" msgstr "or: anropad med färre än tvÃ¥ argmuent" -#: builtin.c:3125 +#: builtin.c:3141 #, c-format msgid "or: argument %d is non-numeric" msgstr "or: argument %d är inte numeriskt" -#: builtin.c:3129 +#: builtin.c:3145 #, 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:3151 mpfr.c:1031 +#: builtin.c:3167 mpfr.c:1031 msgid "xor: called with less than two arguments" msgstr "xor: anropad med färre än tvÃ¥ argument" -#: builtin.c:3157 +#: builtin.c:3173 #, c-format msgid "xor: argument %d is non-numeric" msgstr "xor: argument %d är inte numeriskt" -#: builtin.c:3161 +#: builtin.c:3177 #, 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:3186 mpfr.c:787 +#: builtin.c:3202 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl: fick ett ickenumeriskt argument" -#: builtin.c:3192 +#: builtin.c:3208 #, c-format msgid "compl(%f): negative value will give strange results" msgstr "compl(%f): negativt värde kommer ge konstiga resultat" -#: builtin.c:3194 +#: builtin.c:3210 #, c-format msgid "compl(%f): fractional value will be truncated" msgstr "compl(%f): flyttalsvärde kommer huggas av" -#: builtin.c:3363 +#: builtin.c:3379 #, c-format msgid "dcgettext: `%s' is not a valid locale category" msgstr "dcgettext: \"%s\" är inte en giltig lokalkategori" @@ -940,7 +971,9 @@ msgstr "save \"%s\": kommandot inte tillÃ¥tet." #: command.y:339 msgid "Can't use command `commands' for breakpoint/watchpoint commands" -msgstr "Det gÃ¥r inte att använda kommandot â€commands†i brytpunkts-/observationspunktskommandon" +msgstr "" +"Det gÃ¥r inte att använda kommandot â€commands†i brytpunkts-/" +"observationspunktskommandon" #: command.y:341 msgid "no breakpoint/watchpoint has been set yet" @@ -1014,11 +1047,16 @@ msgid "non-zero integer value" msgstr "heltalsvärde som inte är noll" #: command.y:817 -msgid "backtrace [N] - 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." +msgid "" +"backtrace [N] - 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:819 -msgid "break [[filename:]N|function] - set breakpoint at the specified location." +msgid "" +"break [[filename:]N|function] - set breakpoint at the specified location." msgstr "break [[filename:]N|function] - sätt brytpunkt pÃ¥ den angivna platsen." #: command.y:821 @@ -1026,12 +1064,18 @@ msgid "clear [[filename:]N|function] - delete breakpoints previously set." msgstr "clear [[filnamn:]N|funktion] - radera tidigare satta brytpunkter." #: command.y:823 -msgid "commands [num] - starts a list of commands to be executed at a breakpoint(watchpoint) hit." -msgstr "commands [num] - startar en lista av kommandon att köra när en brytpunkt(observationspunkt) träffas." +msgid "" +"commands [num] - starts a list of commands to be executed at a " +"breakpoint(watchpoint) hit." +msgstr "" +"commands [num] - startar en lista av kommandon att köra när en " +"brytpunkt(observationspunkt) träffas." #: command.y:825 msgid "condition num [expr] - set or clear breakpoint or watchpoint condition." -msgstr "condition num [uttr] - sätt eller töm en brytpunkts eller observationspunkts villkor." +msgstr "" +"condition num [uttr] - sätt eller töm en brytpunkts eller observationspunkts " +"villkor." #: command.y:827 msgid "continue [COUNT] - continue program being debugged." @@ -1047,7 +1091,8 @@ msgstr "disable [brytpunkger] [intervall] - avaktivera angivna brytpunkter." #: command.y:833 msgid "display [var] - print value of variable each time the program stops." -msgstr "display [var] - skriv ut värdet pÃ¥ variabeln varje gÃ¥ng programmet stoppar." +msgstr "" +"display [var] - skriv ut värdet pÃ¥ variabeln varje gÃ¥ng programmet stoppar." #: command.y:835 msgid "down [N] - move N frames down the stack." @@ -1059,7 +1104,8 @@ msgstr "dump [filnamn] - skriv instruktioner till filen eller standard ut." #: command.y:839 msgid "enable [once|del] [breakpoints] [range] - enable specified breakpoints." -msgstr "enable [once|del] [brytpunkter] [intervall] - aktivera angivna brytpunkter." +msgstr "" +"enable [once|del] [brytpunkter] [intervall] - aktivera angivna brytpunkter." #: command.y:841 msgid "end - end a list of commands or awk statements." @@ -1079,15 +1125,21 @@ msgstr "frame [N] - välj och skriv ut stackram nummer N." #: command.y:849 msgid "help [command] - print list of commands or explanation of command." -msgstr "help [kommando] - skriv listan av kommandon eller en förklaring av kommando." +msgstr "" +"help [kommando] - skriv listan av kommandon eller en förklaring av kommando." #: command.y:851 msgid "ignore N COUNT - set ignore-count of breakpoint number N to COUNT." -msgstr "ignore N ANTAL - sätt ignoreringsantal pÃ¥ brytpunkt nummer N till ANTAL." +msgstr "" +"ignore N ANTAL - sätt ignoreringsantal pÃ¥ brytpunkt nummer N till ANTAL." #: command.y:853 -msgid "info topic - source|sources|variables|functions|break|frame|args|locals|display|watch." -msgstr "info topic - 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 topic - source|sources|variables|functions|break|frame|args|locals|" +"display|watch." #: command.y:855 msgid "list [-|+|[filename:]lineno|function|range] - list specified line(s)." @@ -1098,7 +1150,8 @@ msgid "next [COUNT] - step program, proceeding through subroutine calls." msgstr "next [ANTAL] - stega programmet, passera genom subrutinanrop." #: command.y:859 -msgid "nexti [COUNT] - step one instruction, but proceed through subroutine calls." +msgid "" +"nexti [COUNT] - step one instruction, but proceed through subroutine calls." msgstr "nexti [ANTAL] - stega en instruktion, men passera genom subrutinanrop." #: command.y:861 @@ -1134,8 +1187,11 @@ msgid "set var = value - assign value to a scalar variable." msgstr "set var = värde - tilldela värde till en skalär variabel." #: command.y:879 -msgid "silent - suspends usual message when stopped at a breakpoint/watchpoint." -msgstr "silent - undertrycker normala meddelanden vid stopp pÃ¥ en brytpunkt/observationspunkt. " +msgid "" +"silent - suspends usual message when stopped at a breakpoint/watchpoint." +msgstr "" +"silent - undertrycker normala meddelanden vid stopp pÃ¥ en brytpunkt/" +"observationspunkt. " #: command.y:881 msgid "source file - execute commands from file." @@ -1162,8 +1218,12 @@ msgid "undisplay [N] - remove variable(s) from automatic display list." msgstr "undisplay [N] - ta bort variabler frÃ¥n listan över automatiskt visade." #: command.y:893 -msgid "until [[filename:]N|function] - execute until program reaches a different line or line N within current frame." -msgstr "until [[filenamn:]N|funktion] - kör tills programmet nÃ¥r en annan rad eller rad N inom aktuell ram." +msgid "" +"until [[filename:]N|function] - execute until program reaches a different " +"line or line N within current frame." +msgstr "" +"until [[filenamn:]N|funktion] - kör tills programmet nÃ¥r en annan rad eller " +"rad N inom aktuell ram." #: command.y:895 msgid "unwatch [N] - remove variable(s) from watch list." @@ -1465,7 +1525,8 @@ msgstr "försök att använda ett skalärt värde som vektor" #: debug.c:1856 #, c-format msgid "Watchpoint %d deleted because parameter is out of scope.\n" -msgstr "Observationspunkt %d raderad för att parametern är utanför sin räckvidd.\n" +msgstr "" +"Observationspunkt %d raderad för att parametern är utanför sin räckvidd.\n" #: debug.c:1867 #, c-format @@ -1499,7 +1560,9 @@ msgstr "Ogiltigt ramnummer" #: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" -msgstr "Observera: brytpunkt %d (aktiverad, ingorera följande %ld träffar), är ocksÃ¥ satt vid %s:%d" +msgstr "" +"Observera: brytpunkt %d (aktiverad, ingorera följande %ld träffar), är ocksÃ¥ " +"satt vid %s:%d" #: debug.c:2207 #, c-format @@ -1509,7 +1572,9 @@ msgstr "Observera: brytpunkt %d (aktiverad), är ocksÃ¥ satt vid %s:%d" #: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" -msgstr "Observera: brytpunkt %d (avaktiverad, intorera följande %ld träffar), är ocksÃ¥ satt vid %s:%d" +msgstr "" +"Observera: brytpunkt %d (avaktiverad, intorera följande %ld träffar), är " +"ocksÃ¥ satt vid %s:%d" #: debug.c:2221 #, c-format @@ -1703,7 +1768,8 @@ msgstr "â€until†är inte meningsfullt med icke lokalt hopp â€%sâ€\n" #: debug.c:4185 msgid "\t------[Enter] to continue or q [Enter] to quit------" -msgstr "\t------[Retur] för att fortsätta eller a [Retur] för att avsluta------" +msgstr "" +"\t------[Retur] för att fortsätta eller a [Retur] för att avsluta------" #: debug.c:4186 msgid "q" @@ -1730,47 +1796,48 @@ msgstr "â€%s†är inte tillÃ¥tet i det aktuella sammanhanget; satsen ignorera #: debug.c:5389 msgid "`return' not allowed in current context; statement ignored" -msgstr "â€return†är inte tillÃ¥tet i det aktuella sammanhanget; satsen ignoreras" +msgstr "" +"â€return†är inte tillÃ¥tet i det aktuella sammanhanget; satsen ignoreras" #: debug.c:5590 #, c-format msgid "No symbol `%s' in current context" msgstr "Ingen symbol â€%s†i aktuell omgivning" -#: 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: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 msgid "unbalanced [" msgstr "obalanserad [" -#: dfa.c:1052 +#: dfa.c:1174 msgid "invalid character class" msgstr "ogiltig teckenklass" -#: dfa.c:1228 +#: dfa.c:1316 msgid "character class syntax is [[:space:]], not [:space:]" msgstr "syntaxen för teckenklass är [[:space:]], inte [:space:]" -#: dfa.c:1280 +#: dfa.c:1366 msgid "unfinished \\ escape" msgstr "oavslutad \\-följd" -#: dfa.c:1427 regcomp.c:161 +#: dfa.c:1513 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "Ogiltigt innehÃ¥ll i \\{\\}" -#: dfa.c:1430 regcomp.c:176 +#: dfa.c:1516 regcomp.c:176 msgid "Regular expression too big" msgstr "Reguljärt uttryck för stort" -#: dfa.c:1847 +#: dfa.c:1936 msgid "unbalanced (" msgstr "obalanserad (" -#: dfa.c:1973 +#: dfa.c:2062 msgid "no syntax specified" msgstr "ingen syntax angiven" -#: dfa.c:1981 +#: dfa.c:2070 msgid "unbalanced )" msgstr "obalanserad )" @@ -1892,8 +1959,10 @@ msgstr "load_ext: kan inte öppna biblioteket â€%s†(%s)\n" #: ext.c:104 #, 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" +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 #, c-format @@ -1903,7 +1972,8 @@ msgstr "load_ext: biblioteket â€%sâ€: kan inte anropa funktionen â€%s†(%s) #: ext.c:114 #, c-format msgid "load_ext: library `%s' initialization routine `%s' failed\n" -msgstr "load_ext: initieringsrutinen â€%2$s†i biblioteket â€%1$s†misslyckades\n" +msgstr "" +"load_ext: initieringsrutinen â€%2$s†i biblioteket â€%1$s†misslyckades\n" #: ext.c:174 msgid "`extension' is a gawk extension" @@ -1920,8 +1990,10 @@ msgstr "extension: kan inte öppna biblioteket â€%s†(%s)" #: ext.c:186 #, 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)" +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 #, c-format @@ -1950,7 +2022,8 @@ msgstr "make_builtin: funktionsnamnet â€%s†är definierat sedan tidigare" #: ext.c:246 #, 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" +msgstr "" +"make_builtin: kan inte använda gawks inbyggda â€%s†som ett funktionsnamn" #: ext.c:249 ext.c:304 #, c-format @@ -1984,7 +2057,8 @@ msgstr "extension: funktionsnamnet \"%s\" är definierat sedan tidigare" #: ext.c:301 #, 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" +msgstr "" +"extension: kan inte använda gawks inbyggda \"%s\" som ett funktionsnamn" #: ext.c:375 #, c-format @@ -2162,7 +2236,8 @@ msgstr "inplace_begin: kan inte hämta 1:a argumentet som en filnamnssträng" #: extension/inplace.c:144 #, c-format msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'" -msgstr "inplace_begin: avaktiverar redigering pÃ¥ plats för ogiltigt FILNAMN â€%sâ€" +msgstr "" +"inplace_begin: avaktiverar redigering pÃ¥ plats för ogiltigt FILNAMN â€%sâ€" #: extension/inplace.c:151 #, c-format @@ -2256,16 +2331,16 @@ msgstr "chr: anropad utan argument" msgid "chr: called with inappropriate argument(s)" msgstr "chr: anropad med felaktiga argument" -#: 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 misslyckades: %s" -#: extension/readfile.c:84 +#: extension/readfile.c:113 msgid "readfile: called with too many arguments" msgstr "readfile: anropad med för mÃ¥nga argument" -#: extension/readfile.c:118 +#: extension/readfile.c:137 msgid "readfile: called with no arguments" msgstr "readfile: anropad utan argument" @@ -2317,27 +2392,27 @@ msgstr "do_reada: clear_array misslyckades\n" msgid "read_array: set_array_element failed\n" msgstr "read_array: set_array_element misslyckades\n" -#: extension/time.c:106 +#: extension/time.c:113 msgid "gettimeofday: ignoring arguments" msgstr "gettimeofday: ignorerar argumenten" -#: extension/time.c:137 +#: extension/time.c:144 msgid "gettimeofday: not supported on this platform" msgstr "gettimeofday: stödjs inte pÃ¥ denna plattform" -#: extension/time.c:158 +#: extension/time.c:165 msgid "sleep: called with too many arguments" msgstr "sleep: anropad med för mÃ¥nga argument" -#: extension/time.c:161 +#: extension/time.c:168 msgid "sleep: missing required numeric argument" msgstr "sleep: nödvändigt numeriskt argument saknas" -#: extension/time.c:167 +#: extension/time.c:174 msgid "sleep: argument is negative" msgstr "sleep: argumentet är negativt" -#: extension/time.c:201 +#: extension/time.c:208 msgid "sleep: not supported on this platform" msgstr "sleep: stödjs inte pÃ¥ denna plattform" @@ -2359,15 +2434,20 @@ msgstr "split: andra argumentet är inte en vektor" #: field.c:993 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" +msgstr "" +"split: det gÃ¥r inte att använda samma vektor som andra och fjärde argument" #: field.c:998 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" +msgstr "" +"split: det gÃ¥r inte att använda en delvektor av andra argumentet som fjärde " +"argument" #: field.c:1001 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" +msgstr "" +"split: det gÃ¥r inte att använda en delvektor av fjärde argumentet som andra " +"argument" #: field.c:1032 msgid "split: null string for third arg is a gawk extension" @@ -2387,15 +2467,20 @@ msgstr "patsplit: tredje argumentet fÃ¥r inte vara tomt" #: field.c:1087 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" +msgstr "" +"patsplit: det gÃ¥r inte att använda samma vektor som andra och fjärde argument" #: field.c:1092 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" +msgstr "" +"patsplit: det gÃ¥r inte att använda en delvektor av andra argumentet som " +"fjärde argument" #: field.c:1095 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" +msgstr "" +"patsplit: det gÃ¥r inte att använda en delvektor av fjärde argumentet som " +"andra argument" #: field.c:1133 msgid "`FIELDWIDTHS' is a gawk extension" @@ -2430,20 +2515,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:808 +#: gawkapi.c:807 msgid "remove_element: received null array" msgstr "remove_element: fick en null-vektor" -#: gawkapi.c:811 +#: gawkapi.c:810 msgid "remove_element: received null subscript" msgstr "remove_element: mottog null-index" -#: gawkapi.c:948 +#: gawkapi.c:947 #, c-format msgid "api_flatten_array: could not convert index %d\n" msgstr "api_flatten_array: kunde inte konvertera index %d\n" -#: gawkapi.c:953 +#: gawkapi.c:952 #, c-format msgid "api_flatten_array: could not convert value %d\n" msgstr "api_flatten_array: kunde inte konvertera värdet %d\n" @@ -2535,7 +2620,9 @@ msgstr "uttrycket för \"%s\"-omdirigering har en tom sträng som värde" #: io.c:761 #, 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" +msgstr "" +"filnamnet \"%s\" för \"%s\"-omdirigering kan vara resultatet av ett logiskt " +"uttryck" #: io.c:809 #, c-format @@ -2568,8 +2655,10 @@ msgid "can't redirect to `%s' (%s)" msgstr "kan inte dirigera om till \"%s\" (%s)" #: io.c:1040 -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" +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 #, c-format @@ -2596,7 +2685,9 @@ msgstr "stängning av omdirigering som aldrig öppnades" #: io.c:1205 #, c-format msgid "close: redirection `%s' not opened with `|&', second argument ignored" -msgstr "close: omdirigeringen \"%s\" öppnades inte med \"|&\", andra argumentet ignorerat" +msgstr "" +"close: omdirigeringen \"%s\" öppnades inte med \"|&\", andra argumentet " +"ignorerat" #: io.c:1222 #, c-format @@ -2666,7 +2757,8 @@ 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\"" +msgstr "" +"inget (känt) protokoll tillhandahÃ¥llet i det speciella filnamnet \"%s\"" #: io.c:1604 #, c-format @@ -2764,7 +2856,9 @@ msgstr "register_input_parser: mottog NULL-pekare" #: io.c:2818 #, 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â€" +msgstr "" +"inmatningstolken â€%s†stÃ¥r i konflikt med tidigare installerad " +"inmatningstolk â€%sâ€" #: io.c:2825 #, c-format @@ -2777,8 +2871,11 @@ msgstr "register_output_wrapper: mottog NULL-pekare" #: io.c:2873 #, c-format -msgid "output wrapper `%s' conflicts with previously installed output wrapper `%s'" -msgstr "utmatningsomslag â€%s†stÃ¥r i konflikt med tidigare installerat utmatningsomslag â€%sâ€" +msgid "" +"output wrapper `%s' conflicts with previously installed output wrapper `%s'" +msgstr "" +"utmatningsomslag â€%s†stÃ¥r i konflikt med tidigare installerat " +"utmatningsomslag â€%sâ€" #: io.c:2880 #, c-format @@ -2791,8 +2888,12 @@ msgstr "register_output_processor: mottog NULL-pekare" #: io.c:2930 #, c-format -msgid "two-way processor `%s' conflicts with previously installed two-way processor `%s'" -msgstr "tvÃ¥vägsprocessorn â€%s†stÃ¥r i konflikt med tidigare installerad tvÃ¥vägsprocessor â€%sâ€" +msgid "" +"two-way processor `%s' conflicts with previously installed two-way processor " +"`%s'" +msgstr "" +"tvÃ¥vägsprocessorn â€%s†stÃ¥r i konflikt med tidigare installerad " +"tvÃ¥vägsprocessor â€%sâ€" #: io.c:2939 #, c-format @@ -2873,7 +2974,8 @@ msgstr "ingen programtext alls!" #: main.c:799 #, 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" +msgstr "" +"Användning: %s [POSIX- eller GNU-stilsflaggor] -f progfil [--] fil ...\n" #: main.c:801 #, c-format @@ -3216,8 +3318,12 @@ msgstr "inga hexadecimala siffror i \"\\x\"-kontrollsekvenser" #: node.c:579 #, c-format -msgid "hex escape \\x%.*s of %d characters probably not interpreted the way you expect" -msgstr "hexkod \\x%.*s med %d tecken tolkas förmodligen inte pÃ¥ det sätt du förväntar dig" +msgid "" +"hex escape \\x%.*s of %d characters probably not interpreted the way you " +"expect" +msgstr "" +"hexkod \\x%.*s med %d tecken tolkas förmodligen inte pÃ¥ det sätt du " +"förväntar dig" #: node.c:594 #, c-format @@ -3225,8 +3331,12 @@ msgid "escape sequence `\\%c' treated as plain `%c'" msgstr "kontrollsekvensen \"\\%c\" behandlad som bara \"%c\"" #: node.c:739 -msgid "Invalid multibyte data detected. There may be a mismatch between your data and your locale." -msgstr "Ogiltig multibytedata upptäckt. Dina data och din lokal stämmer kanske inte överens." +msgid "" +"Invalid multibyte data detected. There may be a mismatch between your data " +"and your locale." +msgstr "" +"Ogiltig multibytedata upptäckt. Dina data och din lokal stämmer kanske inte " +"överens." #: posix/gawkmisc.c:177 #, c-format @@ -3305,7 +3415,8 @@ msgstr "redir2str: okänd omdirigeringstyp %d" #: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" -msgstr "komponenten \"%.*s\" i reguljäruttryck skall förmodligen vara \"[%.*s]\"" +msgstr "" +"komponenten \"%.*s\" i reguljäruttryck skall förmodligen vara \"[%.*s]\"" #: regcomp.c:131 msgid "Success" diff --git a/po/vi.gmo b/po/vi.gmo index 2d663bc7..10c710dc 100644 Binary files a/po/vi.gmo and b/po/vi.gmo differ diff --git a/po/vi.po b/po/vi.po index 187d31a4..faa458a1 100644 --- a/po/vi.po +++ b/po/vi.po @@ -9,7 +9,7 @@ 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" +"POT-Creation-Date: 2014-04-08 19:23+0300\n" "PO-Revision-Date: 2014-01-16 14:52+0700\n" "Last-Translator: Trần Ngá»c Quân \n" "Language-Team: Vietnamese \n" @@ -40,8 +40,8 @@ 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:1599 builtin.c:1645 -#: builtin.c:1658 builtin.c:2086 builtin.c:2100 eval.c:1122 eval.c:1126 +#: 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 #, c-format msgid "attempt to use array `%s' in a scalar context" @@ -79,19 +79,27 @@ msgstr "asorti: đối số thứ nhất không phải là má»™t mảng" #: array.c:831 msgid "asort: cannot use a subarray of first arg for second arg" -msgstr "asort (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ứ nhất cho tham số thứ hai" +msgstr "" +"asort (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ứ nhất cho tham số thứ hai" #: array.c:832 msgid "asorti: cannot use a subarray of first arg for second arg" -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ứ nhất cho tham số thứ hai" +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ứ nhất cho tham số thứ hai" #: array.c:837 msgid "asort: cannot use a subarray of second arg for first arg" -msgstr "asort (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" +msgstr "" +"asort (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:838 msgid "asorti: cannot use a subarray of second arg for first arg" -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" +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 #, c-format @@ -114,7 +122,8 @@ 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 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)" +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 #, c-format @@ -123,12 +132,16 @@ msgstr "“%s†là má»™t hàm có sẵn nên nó không thể được định #: awkgram.y:419 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" +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 #, 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" +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 #, c-format @@ -137,13 +150,15 @@ msgstr "gặp giá trị case trùng trong thân chuyển đổi (switch body): #: awkgram.y:536 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)" +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:3699 +#: awkgram.y:796 awkgram.y:3723 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" +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:3691 +#: awkgram.y:805 awkgram.y:3715 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" @@ -163,7 +178,9 @@ msgstr "“return†(trở vá») được dùng ở ngoại ngữ cảnh hàm" #: awkgram.y:922 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â€â€â€" +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 msgid "`delete' is not allowed with SYMTAB" @@ -209,7 +226,9 @@ msgstr "“getline†không hợp lệ trong quy tắc “%sâ€" #: awkgram.y:1425 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." +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 msgid "old awk does not support multidimensional arrays" @@ -217,7 +236,9 @@ msgstr "awk cÅ© không há»— trợ mảng Ä‘a chiá»u" #: awkgram.y:1541 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" +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 msgid "indirect function calls are a gawk extension" @@ -232,262 +253,270 @@ msgstr "không thể dùng biến đặc biệt “%s†cho cú gá»i hàm giá msgid "invalid subscript expression" msgstr "biểu thức in thấp không hợp lệ" -#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126 +#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126 msgid "warning: " msgstr "cảnh báo: " -#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158 +#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158 msgid "fatal: " msgstr "lá»—i nghiêm trá»ng: " -#: awkgram.y:2092 +#: awkgram.y:2116 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:2359 awkgram.y:2435 awkgram.y:2658 debug.c:523 debug.c:539 +#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 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:2360 awkgram.y:2485 +#: awkgram.y:2384 awkgram.y:2509 #, 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:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:135 debug.c:5206 +#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206 msgid "reason unknown" msgstr "không rõ lý do" -#: awkgram.y:2371 awkgram.y:2395 +#: awkgram.y:2395 awkgram.y:2419 #, 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:2384 +#: awkgram.y:2408 #, c-format msgid "already included source file `%s'" msgstr "đã sẵn bao gồm tập tin nguồn “%sâ€" -#: awkgram.y:2385 +#: awkgram.y:2409 #, 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:2420 +#: awkgram.y:2444 msgid "@include is a gawk extension" msgstr "@include là phần mở rá»™ng cá»§a gawk" -#: awkgram.y:2426 +#: awkgram.y:2450 msgid "empty filename after @include" msgstr "tập tin trống sau @include" -#: awkgram.y:2470 +#: awkgram.y:2494 msgid "@load is a gawk extension" msgstr "@load là má»™t phần mở rá»™ng gawk" -#: awkgram.y:2476 +#: awkgram.y:2500 msgid "empty filename after @load" msgstr "tên tập tin trống sau @load" -#: awkgram.y:2610 +#: awkgram.y:2634 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:2725 +#: awkgram.y:2749 #, c-format msgid "can't read sourcefile `%s' (%s)" msgstr "không thể Ä‘á»c tập tin nguồn “%s†(%s)" -#: awkgram.y:2736 +#: awkgram.y:2760 #, c-format msgid "source file `%s' is empty" msgstr "tập tin nguồn “%s†là rá»—ng" -#: awkgram.y:2913 +#: awkgram.y:2937 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:3018 +#: awkgram.y:3042 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" +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:3042 +#: awkgram.y:3066 #, 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" +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:3046 +#: awkgram.y:3070 #, 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" +msgstr "" +"bá»™ sá»­a đổi biểu thức chính quy tawk “/.../%c†không hoạt động được trong gawk" -#: awkgram.y:3053 +#: awkgram.y:3077 msgid "unterminated regexp" msgstr "biểu thức chính quy chưa được chấm dứt" -#: awkgram.y:3057 +#: awkgram.y:3081 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:3116 +#: awkgram.y:3140 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:3132 +#: awkgram.y:3156 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:3193 +#: awkgram.y:3217 msgid "POSIX does not allow operator `**='" msgstr "POSIX không cho phép toán tá»­ “**=â€" -#: awkgram.y:3195 +#: awkgram.y:3219 msgid "old awk does not support operator `**='" msgstr "awk cÅ© không há»— trợ toán tá»­ “**=â€" -#: awkgram.y:3204 +#: awkgram.y:3228 msgid "POSIX does not allow operator `**'" msgstr "POSIX không cho phép toán tá»­ “**â€" -#: awkgram.y:3206 +#: awkgram.y:3230 msgid "old awk does not support operator `**'" msgstr "awk cÅ© không há»— trợ toán tá»­ “**â€" -#: awkgram.y:3241 +#: awkgram.y:3265 msgid "operator `^=' is not supported in old awk" msgstr "awk cÅ© không há»— trợ toán tá»­ “^=â€" -#: awkgram.y:3249 +#: awkgram.y:3273 msgid "operator `^' is not supported in old awk" msgstr "awk cÅ© không há»— trợ toán tá»­ “^â€" -#: awkgram.y:3342 awkgram.y:3358 command.y:1178 +#: awkgram.y:3366 awkgram.y:3382 command.y:1178 msgid "unterminated string" msgstr "chuá»—i không được chấm dứt" -#: awkgram.y:3579 +#: awkgram.y:3603 #, 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:3626 +#: awkgram.y:3650 #, c-format msgid "`%s' is a gawk extension" msgstr "“%s†là má»™t phần mở rá»™ng gawk" -#: awkgram.y:3631 +#: awkgram.y:3655 #, c-format msgid "POSIX does not allow `%s'" msgstr "POSIX không cho phép “%sâ€" -#: awkgram.y:3639 +#: awkgram.y:3663 #, c-format msgid "`%s' is not supported in old awk" msgstr "awk kiểu cÅ© không há»— trợ “%sâ€" -#: awkgram.y:3729 +#: awkgram.y:3753 msgid "`goto' considered harmful!\n" msgstr "“goto†được xem là có hại!\n" -#: awkgram.y:3763 +#: awkgram.y:3787 #, 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:3798 +#: awkgram.y:3822 #, 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" +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:3803 +#: awkgram.y:3827 #, 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:3886 awkgram.y:3889 +#: awkgram.y:3910 awkgram.y:3913 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:3943 awkgram.y:3946 +#: awkgram.y:3967 awkgram.y:3970 msgid "close: second argument is a gawk extension" msgstr "close: (đóng) đối số thứ hai là phần mở rá»™ng gawk" -#: awkgram.y:3958 +#: awkgram.y:3982 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:3973 +#: awkgram.y:3997 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:3992 +#: awkgram.y:4016 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" +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:4045 +#: awkgram.y:4069 #, 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:4102 debug.c:4041 debug.c:4084 debug.c:5204 +#: awkgram.y:4126 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:4103 +#: awkgram.y:4127 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:4111 +#: awkgram.y:4135 #, c-format msgid "%s: close failed (%s)" msgstr "%s: gặp lá»—i khi đóng (%s)" -#: awkgram.y:4136 +#: awkgram.y:4160 msgid "shadow_funcs() called twice!" msgstr "shadow_funcs() (hàm bóng) được gá»i hai lần!" -#: awkgram.y:4144 +#: awkgram.y:4168 msgid "there were shadowed variables." msgstr "có biến bị bóng." -#: awkgram.y:4215 +#: awkgram.y:4239 #, 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:4261 +#: awkgram.y:4285 #, 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:4264 +#: awkgram.y:4288 #, 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:4272 +#: awkgram.y:4296 #, 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:4359 awkgram.y:4365 +#: awkgram.y:4383 awkgram.y:4389 #, 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:4369 +#: awkgram.y:4393 #, 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:4401 +#: awkgram.y:4425 #, 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:4460 +#: awkgram.y:4484 #, c-format msgid "" "function `%s' called with space between name and `(',\n" @@ -496,20 +525,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:4696 +#: awkgram.y:4720 msgid "division by zero attempted" msgstr "gặp phép chia cho số không" -#: awkgram.y:4705 +#: awkgram.y:4729 #, c-format msgid "division by zero attempted in `%%'" msgstr "gặp phép chia cho số không trong “%%â€" -#: awkgram.y:5025 -msgid "cannot assign a value to the result of a field post-increment expression" +#: awkgram.y:5049 +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:5028 +#: awkgram.y:5052 #, c-format msgid "invalid target of assignment (opcode %s)" msgstr "gán Ä‘ich không hợp lệ (mã thi hành “%sâ€)" @@ -535,17 +565,22 @@ msgstr "exp: đối số “%g†nằm ngoài phạm vi" #: builtin.c:229 #, c-format msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing" -msgstr "fflush: không thể flush (đẩy dữ liệu lên đĩa): ống dẫn “%s†được mở để Ä‘á»c, không phải để ghi" +msgstr "" +"fflush: không thể flush (đẩy dữ liệu lên đĩa): ống dẫn “%s†được mở để Ä‘á»c, " +"không phải để ghi" #: builtin.c:232 #, c-format msgid "fflush: cannot flush: file `%s' opened for reading, not writing" -msgstr "fflush: không thể flush (đẩy dữ liệu vào đĩa): tập tin “%s†được mở để Ä‘á»c, không phải để ghi" +msgstr "" +"fflush: không thể flush (đẩy dữ liệu vào đĩa): tập tin “%s†được mở để Ä‘á»c, " +"không phải để ghi" #: builtin.c:244 #, c-format 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ở" +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 msgid "index: received non-string first argument" @@ -610,7 +645,8 @@ msgstr "lá»—i nghiêm trá»ng: số lượng đối số vá»›i “$†phải >0 #: builtin.c:919 #, 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" +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 msgid "fatal: `$' not permitted after period in format" @@ -618,299 +654,314 @@ msgstr "lá»—i nghiêm trá»ng: không cho phép “$†nằm sau dấu chấm t #: builtin.c:939 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" +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:1011 +#: builtin.c:1009 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:1015 +#: builtin.c:1013 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:1028 +#: builtin.c:1026 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:1032 +#: builtin.c:1030 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:1045 +#: builtin.c:1043 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:1049 +#: builtin.c:1047 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:1447 +#: builtin.c:1463 #, 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:1545 +#: builtin.c:1561 #, 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" +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:1550 +#: builtin.c:1566 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:1552 +#: builtin.c:1568 msgid "^ ran out for this one" msgstr "bị hết “^†cho cái này" -#: builtin.c:1559 +#: builtin.c:1575 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:1562 +#: builtin.c:1578 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:1618 +#: builtin.c:1634 msgid "sprintf: no arguments" msgstr "sprintf: không có đối số" -#: builtin.c:1641 builtin.c:1652 +#: builtin.c:1657 builtin.c:1668 msgid "printf: no arguments" msgstr "printf: không có đối số" -#: builtin.c:1695 +#: builtin.c:1711 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:1699 +#: builtin.c:1715 #, 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:1730 +#: builtin.c:1746 #, c-format msgid "substr: length %g is not >= 1" msgstr "substr: (chuá»—i con) độ dài %g không phải ≥1" -#: builtin.c:1732 +#: builtin.c:1748 #, c-format msgid "substr: length %g is not >= 0" msgstr "substr: (chuá»—i con) độ dài %g không phải ≥0" -#: builtin.c:1739 +#: builtin.c:1755 #, 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:1744 +#: builtin.c:1760 #, 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" +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:1756 +#: builtin.c:1772 #, 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:1761 +#: builtin.c:1777 #, 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" +msgstr "" +"substr: (chuá»—i con) chỉ số đầu không phải số nguyên “%g†sẽ bị cắt ngắn" -#: builtin.c:1786 +#: builtin.c:1802 msgid "substr: source string is zero length" msgstr "substr: (chuá»—i con) chuá»—i nguồn có độ dài số không" -#: builtin.c:1802 +#: builtin.c:1818 #, 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:1810 +#: builtin.c:1826 #, c-format -msgid "substr: length %g at start index %g exceeds length of first argument (%lu)" -msgstr "substr: (chuá»—i con) độ dài %g chỉ số đầu %g vượt quá độ dài cá»§a đối số đầu (%lu)" +msgid "" +"substr: length %g at start index %g exceeds length of first argument (%lu)" +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:1884 +#: builtin.c:1900 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ố" +msgstr "" +"strftime: giá trị định dạng trong PROCINFO[â€strftimeâ€] phải thuá»™c kiểu số" -#: builtin.c:1907 +#: builtin.c:1923 msgid "strftime: received non-numeric second argument" msgstr "strftime: đã nhận đối số thứ hai khác thuá»™c số" -#: builtin.c:1911 +#: builtin.c:1927 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:1918 +#: builtin.c:1934 msgid "strftime: received non-string first argument" msgstr "strftime: đã nhận đối số thứ nhất khác chuá»—i" -#: builtin.c:1925 +#: builtin.c:1941 msgid "strftime: received empty format string" msgstr "strftime: đã nhận chuá»—i định dạng rá»—ng" -#: builtin.c:1991 +#: builtin.c:2007 msgid "mktime: received non-string argument" msgstr "mktime: đã nhận đối số khác chuá»—i" -#: builtin.c:2008 +#: builtin.c:2024 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:2043 +#: builtin.c:2059 msgid "'system' function not allowed in sandbox mode" msgstr "hàm “system†không cho phép ở chế độ khuôn đúc" -#: builtin.c:2048 +#: builtin.c:2064 msgid "system: received non-string argument" msgstr "system: (hệ thống) đã nhận đối số khác chuá»—i" -#: builtin.c:2168 +#: builtin.c:2184 #, 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:2255 +#: builtin.c:2271 msgid "tolower: received non-string argument" msgstr "tolower: (đến thấp hÆ¡n) đã nhận đối số khác chuá»—i" -#: builtin.c:2289 +#: builtin.c:2305 msgid "toupper: received non-string argument" msgstr "toupper: (đến cao hÆ¡n) đã nhận đối số khác chuá»—i" -#: builtin.c:2325 mpfr.c:672 +#: builtin.c:2341 mpfr.c:672 msgid "atan2: received non-numeric first argument" msgstr "atan2: đã nhận đối số thứ nhất khác thuá»™c số" -#: builtin.c:2327 mpfr.c:674 +#: builtin.c:2343 mpfr.c:674 msgid "atan2: received non-numeric second argument" msgstr "atan2: đã nhận đối số thứ hai khác thuá»™c số" -#: builtin.c:2346 +#: builtin.c:2362 msgid "sin: received non-numeric argument" msgstr "sin: đã nhận đối số không phải thuá»™c số" -#: builtin.c:2362 +#: builtin.c:2378 msgid "cos: received non-numeric argument" msgstr "cos: đã nhận đối số không phải thuá»™c số" -#: builtin.c:2415 mpfr.c:1156 +#: builtin.c:2431 mpfr.c:1156 msgid "srand: received non-numeric argument" msgstr "srand: đã nhận đối số không phải thuá»™c số" -#: builtin.c:2446 +#: builtin.c:2462 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:2718 +#: builtin.c:2734 msgid "gensub: third argument of 0 treated as 1" msgstr "gensub: đối số thứ ba cá»§a 0 được xá»­ lý như 1" -#: builtin.c:3014 +#: builtin.c:3030 msgid "lshift: received non-numeric first argument" msgstr "lshift: đã nhận đối số đầu không phải thuá»™c số" -#: builtin.c:3016 +#: builtin.c:3032 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:3022 +#: builtin.c:3038 #, 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:3024 +#: builtin.c:3040 #, 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:3026 +#: builtin.c:3042 #, 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" +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:3051 +#: builtin.c:3067 msgid "rshift: received non-numeric first argument" msgstr "rshift: đã nhận đối số thứ nhất khác thuá»™c số" -#: builtin.c:3053 +#: builtin.c:3069 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:3059 +#: builtin.c:3075 #, 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:3061 +#: builtin.c:3077 #, 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:3063 +#: builtin.c:3079 #, 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" +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:3088 mpfr.c:968 +#: builtin.c:3104 mpfr.c:968 msgid "and: called with less than two arguments" msgstr "and: được gá»i vá»›i ít hÆ¡n hai đối số" -#: builtin.c:3093 +#: builtin.c:3109 #, c-format msgid "and: argument %d is non-numeric" msgstr "and: đối số %d không phải thuá»™c số" -#: builtin.c:3097 +#: builtin.c:3113 #, 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" +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:3120 mpfr.c:1000 +#: builtin.c:3136 mpfr.c:1000 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:3125 +#: builtin.c:3141 #, 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:3129 +#: builtin.c:3145 #, 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" +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:3151 mpfr.c:1031 +#: builtin.c:3167 mpfr.c:1031 msgid "xor: called with less than two arguments" msgstr "xor: được gá»i vá»›i ít hÆ¡n hai đối số" -#: builtin.c:3157 +#: builtin.c:3173 #, c-format msgid "xor: argument %d is non-numeric" msgstr "xor: đối số %d không thuá»™c kiểu số" -#: builtin.c:3161 +#: builtin.c:3177 #, 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:3186 mpfr.c:787 +#: builtin.c:3202 mpfr.c:787 msgid "compl: received non-numeric argument" msgstr "compl: (biên dịch) đã nhận được đối số không-phải-số" -#: builtin.c:3192 +#: builtin.c:3208 #, 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:3194 +#: builtin.c:3210 #, 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:3363 +#: builtin.c:3379 #, 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ệ" @@ -1016,24 +1067,35 @@ msgid "non-zero integer value" msgstr "giá trị số nguyên khác không" #: command.y:817 -msgid "backtrace [N] - 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)." +msgid "" +"backtrace [N] - 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:819 -msgid "break [[filename:]N|function] - set breakpoint at the specified location." +msgid "" +"break [[filename:]N|function] - set breakpoint at the specified location." msgstr "break [[tên_tập_tin:]N|hàm] - đặt Ä‘iểm ngắt tại vị trí đã cho." #: command.y:821 msgid "clear [[filename:]N|function] - delete breakpoints previously set." -msgstr "clear [[tên_tập_tin:]N|function] - xóa các Ä‘iểm ngắt được đặt trước đây." +msgstr "" +"clear [[tên_tập_tin:]N|function] - xóa các Ä‘iểm ngắt được đặt trước đây." #: command.y:823 -msgid "commands [num] - starts a list of commands to be executed at a breakpoint(watchpoint) hit." -msgstr "commands [số] - chạy má»™t danh sách các câu lệnh được thá»±c thi tại Ä‘iểm ngắt (hay Ä‘iểm theo dõi) tìm được." +msgid "" +"commands [num] - starts a list of commands to be executed at a " +"breakpoint(watchpoint) hit." +msgstr "" +"commands [số] - chạy má»™t danh sách các câu lệnh được thá»±c thi tại Ä‘iểm ngắt " +"(hay Ä‘iểm theo dõi) tìm được." #: command.y:825 msgid "condition num [expr] - set or clear breakpoint or watchpoint condition." -msgstr "condition num [expr] - đặt hay xóa Ä‘iểm ngắt hay Ä‘iá»u kiện Ä‘iểm theo dõi." +msgstr "" +"condition num [expr] - đặt hay xóa Ä‘iểm ngắt hay Ä‘iá»u kiện Ä‘iểm theo dõi." #: command.y:827 msgid "continue [COUNT] - continue program being debugged." @@ -1057,7 +1119,8 @@ msgstr "down [N] - chuyển xuống N khung stack." #: command.y:837 msgid "dump [filename] - dump instructions to file or stdout." -msgstr "dump [tên_tập_tin] - dump các chỉ lệnh ra tập tin hay đầu ra tiêu chuẩn." +msgstr "" +"dump [tên_tập_tin] - dump các chỉ lệnh ra tập tin hay đầu ra tiêu chuẩn." #: command.y:839 msgid "enable [once|del] [breakpoints] [range] - enable specified breakpoints." @@ -1088,8 +1151,11 @@ msgid "ignore N COUNT - set ignore-count of breakpoint number N to COUNT." msgstr "ignore N Sá»-LƯỢNG - đặt số lượng Ä‘iểm ngắt bị bá» qua." #: command.y:853 -msgid "info topic - source|sources|variables|functions|break|frame|args|locals|display|watch." -msgstr "info chá»§_đỠ- nguồn|nguồn|biến|hàm|break|frame|args|locals|display|watch." +msgid "" +"info topic - source|sources|variables|functions|break|frame|args|locals|" +"display|watch." +msgstr "" +"info chá»§_đỠ- nguồn|nguồn|biến|hàm|break|frame|args|locals|display|watch." #: command.y:855 msgid "list [-|+|[filename:]lineno|function|range] - list specified line(s)." @@ -1097,11 +1163,16 @@ msgstr "list [-|+|[tập_tin:]số_dòng|hàm|vùng] - liệt kê các dòng Ä‘ #: command.y:857 msgid "next [COUNT] - step program, proceeding through subroutine calls." -msgstr "next [Sá»_LƯỢNG] - nhảy má»™t chỉ lệnh, nhưng được xá»­ lý thông qua gá»i thá»§ tục con." +msgstr "" +"next [Sá»_LƯỢNG] - nhảy má»™t chỉ lệnh, nhưng được xá»­ lý thông qua gá»i thá»§ " +"tục con." #: command.y:859 -msgid "nexti [COUNT] - step one instruction, but proceed through subroutine calls." -msgstr "nexti [Sá»_LƯỢNG] - nhảy từng chỉ lệnh, nhưng được xá»­ lý thông qua gá»i thá»§ tục con." +msgid "" +"nexti [COUNT] - step one instruction, but proceed through subroutine calls." +msgstr "" +"nexti [Sá»_LƯỢNG] - nhảy từng chỉ lệnh, nhưng được xá»­ lý thông qua gá»i thá»§ " +"tục con." #: command.y:861 msgid "option [name[=value]] - set or display debugger option(s)." @@ -1121,7 +1192,9 @@ msgstr "quit - thoát khá»i chương trình gỡ lá»—i." #: command.y:869 msgid "return [value] - make selected stack frame return to its caller." -msgstr "return [giá-trị] - làm cho khung stack đã chá»n trả vá» giá trị này cho bá»™ gá»i nó." +msgstr "" +"return [giá-trị] - làm cho khung stack đã chá»n trả vá» giá trị này cho bá»™ gá»i " +"nó." #: command.y:871 msgid "run - start or restart executing program." @@ -1136,8 +1209,11 @@ msgid "set var = value - assign value to a scalar variable." msgstr "set biến = giá_trị - gán giá trị cho má»™t biến vô hướng." #: command.y:879 -msgid "silent - suspends usual message when stopped at a breakpoint/watchpoint." -msgstr "silent - chặn các lá»i nhắn thông thưá»ng khi dừng tại Ä‘iểm ngăt hay Ä‘iểm theo dõi." +msgid "" +"silent - suspends usual message when stopped at a breakpoint/watchpoint." +msgstr "" +"silent - chặn các lá»i nhắn thông thưá»ng khi dừng tại Ä‘iểm ngăt hay Ä‘iểm theo " +"dõi." #: command.y:881 msgid "source file - execute commands from file." @@ -1145,7 +1221,9 @@ msgstr "source file - thá»±c hiện các câu lệnh từ tập tin." #: command.y:883 msgid "step [COUNT] - step program until it reaches a different source line." -msgstr "step [Sá»_LƯỢNG] - chạy từng bước chương trình cho đến khi nó gặp má»™t dòng nguồn khác." +msgstr "" +"step [Sá»_LƯỢNG] - chạy từng bước chương trình cho đến khi nó gặp má»™t dòng " +"nguồn khác." #: command.y:885 msgid "stepi [COUNT] - step one instruction exactly." @@ -1164,8 +1242,12 @@ msgid "undisplay [N] - remove variable(s) from automatic display list." msgstr "undisplay [N] - gỡ bá» các biến từ danh sách hiển thị tá»± động." #: command.y:893 -msgid "until [[filename:]N|function] - execute until program reaches a different line or line N within current frame." -msgstr "until [[tên_tập_tin:]N|hàm] - thá»±c hiện cho đến khi chương trình đạt đến dòng khác hay dòng N trong khung hiện tại." +msgid "" +"until [[filename:]N|function] - execute until program reaches a different " +"line or line N within current frame." +msgstr "" +"until [[tên_tập_tin:]N|hàm] - thá»±c hiện cho đến khi chương trình đạt đến " +"dòng khác hay dòng N trong khung hiện tại." #: command.y:895 msgid "unwatch [N] - remove variable(s) from watch list." @@ -1501,7 +1583,9 @@ msgstr "số khung không hợp lệ" #: debug.c:2200 #, c-format msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d" -msgstr "Chú ý: Ä‘iểm ngắt %d (được bật, bá» qua %ld gợi ý tiếp), đồng thá»i được đặt tại %s:%d" +msgstr "" +"Chú ý: Ä‘iểm ngắt %d (được bật, bá» qua %ld gợi ý tiếp), đồng thá»i được đặt " +"tại %s:%d" #: debug.c:2207 #, c-format @@ -1511,7 +1595,9 @@ msgstr "Chú ý: Ä‘iểm ngắt %d (được bật), đồng thá»i được Ä‘ #: debug.c:2214 #, c-format msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d" -msgstr "Chú ý: Ä‘iểm ngắt %d (bị tắt, bá» qua %ld gợi ý tiếp), đồng thá»i được đặt tại %s:%d" +msgstr "" +"Chú ý: Ä‘iểm ngắt %d (bị tắt, bá» qua %ld gợi ý tiếp), đồng thá»i được đặt tại " +"%s:%d" #: debug.c:2221 #, c-format @@ -1593,7 +1679,8 @@ msgstr "Sẽ dừng lần gặp Ä‘iểm ngắt %d tiếp theo.\n" #: debug.c:2783 #, c-format msgid "Can only debug programs provided with the `-f' option.\n" -msgstr "Chỉ có thể gỡ lá»—i các chương trình được cung cấp cùng vá»›i tùy chá»n “-fâ€.\n" +msgstr "" +"Chỉ có thể gỡ lá»—i các chương trình được cung cấp cùng vá»›i tùy chá»n “-fâ€.\n" #: debug.c:2908 #, c-format @@ -1739,40 +1826,40 @@ msgstr "“return†không được phép trong ngữ cảnh hiện hành; câu 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: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: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 msgid "unbalanced [" msgstr "thiếu dấu ngoặc vuông mở [" -#: dfa.c:1052 +#: dfa.c:1174 msgid "invalid character class" msgstr "sai lá»›p ký tá»±" -#: dfa.c:1228 +#: dfa.c:1316 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:1280 +#: dfa.c:1366 msgid "unfinished \\ escape" msgstr "chưa kết thúc dãy thoát \\" -#: dfa.c:1427 regcomp.c:161 +#: dfa.c:1513 regcomp.c:161 msgid "Invalid content of \\{\\}" msgstr "Ná»™i dung cá»§a “\\{\\}†không hợp lệ" -#: dfa.c:1430 regcomp.c:176 +#: dfa.c:1516 regcomp.c:176 msgid "Regular expression too big" msgstr "Biểu thức chính quy quá lá»›n" -#: dfa.c:1847 +#: dfa.c:1936 msgid "unbalanced (" msgstr "thiếu dấu (" -#: dfa.c:1973 +#: dfa.c:2062 msgid "no syntax specified" msgstr "chưa chỉ rõ cú pháp" -#: dfa.c:1981 +#: dfa.c:2070 msgid "unbalanced )" msgstr "thiếu dấu )" @@ -1894,8 +1981,10 @@ msgstr "load_ext: không thể mở thư viện “%s†(%s)\n" #: ext.c:104 #, 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" +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 #, c-format @@ -1922,8 +2011,10 @@ msgstr "phần mở rá»™ng: không thể mở thư viện “%s†(%s)" #: ext.c:186 #, 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)" +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 #, c-format @@ -1952,7 +2043,9 @@ msgstr "make_builtin: hàm “%s†đã được định nghÄ©a trước đây #: ext.c:246 #, 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" +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 #, c-format @@ -1986,7 +2079,9 @@ msgstr "tên hàm “%s†đã được định nghÄ©a trước đó" #: ext.c:301 #, 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" +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 #, c-format @@ -2258,16 +2353,16 @@ msgstr "chr: được gá»i mà không có đối số" msgid "chr: called with inappropriate argument(s)" msgstr "chr: được gá»i vá»›i đối số không thích hợp" -#: 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 gặp lá»—i: %s" -#: extension/readfile.c:84 +#: extension/readfile.c:113 msgid "readfile: called with too many arguments" msgstr "readfile: được gá»i vá»›i quá nhiá»u đối số" -#: extension/readfile.c:118 +#: extension/readfile.c:137 msgid "readfile: called with no arguments" msgstr "readfile: được gá»i mà không có đối số" @@ -2319,27 +2414,27 @@ msgstr "do_reada: clear_array gặp lá»—i\n" msgid "read_array: set_array_element failed\n" msgstr "read_array: set_array_element gặp lá»—i\n" -#: extension/time.c:106 +#: extension/time.c:113 msgid "gettimeofday: ignoring arguments" msgstr "gettimeofday: Ä‘ang lá» Ä‘i các đối số" -#: extension/time.c:137 +#: extension/time.c:144 msgid "gettimeofday: not supported on this platform" msgstr "gettimeofday: không được há»— trợ trên ná»n tảng này" -#: extension/time.c:158 +#: extension/time.c:165 msgid "sleep: called with too many arguments" msgstr "sleep: được gá»i vá»›i quá nhiá»u đối số" -#: extension/time.c:161 +#: extension/time.c:168 msgid "sleep: missing required numeric argument" msgstr "sleep: thiếu đối số dạng số cần thiết" -#: extension/time.c:167 +#: extension/time.c:174 msgid "sleep: argument is negative" msgstr "sleep: đối số âm" -#: extension/time.c:201 +#: extension/time.c:208 msgid "sleep: not supported on this platform" msgstr "sleep: không được há»— trợ trên ná»n tảng này" @@ -2361,19 +2456,26 @@ msgstr "split: (chia tách) đối số thứ hai không phải là mảng" #: field.c:993 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ư" +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 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ư" +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 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" +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 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" +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 msgid "patsplit: fourth argument is not an array" @@ -2389,15 +2491,21 @@ msgstr "patsplit: đối số thứ ba không phải không rá»—ng" #: field.c:1087 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ư" +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 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ư" +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 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" +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 msgid "`FIELDWIDTHS' is a gawk extension" @@ -2432,20 +2540,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:808 +#: gawkapi.c:807 msgid "remove_element: received null array" msgstr "remove_element: mảng nhận được là null" -#: gawkapi.c:811 +#: gawkapi.c:810 msgid "remove_element: received null subscript" msgstr "remove_element: nhận được là null" -#: gawkapi.c:948 +#: gawkapi.c:947 #, 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:953 +#: gawkapi.c:952 #, 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" @@ -2537,7 +2645,9 @@ msgstr "biểu thức cho Ä‘iá»u chuyển hướng “%s†có giá trị chu #: io.c:761 #, 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ý" +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 #, c-format @@ -2570,8 +2680,11 @@ msgid "can't redirect to `%s' (%s)" msgstr "không thể chuyển hướng đến “%s†(%s)" #: io.c:1040 -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" +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 #, c-format @@ -2589,7 +2702,9 @@ msgstr "close: (đóng) đối số thứ hai phải là “to†(đến) hay #: io.c:1103 #, 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ở" +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 msgid "close of redirection that was never opened" @@ -2598,7 +2713,8 @@ msgstr "đóng má»™t chuyển hướng mà nó chưa từng được mở" #: io.c:1205 #, 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" +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 #, c-format @@ -2705,7 +2821,9 @@ msgstr "lá»—i đóng đầu ra tiêu chuẩn trong tiến trình con (%s)" #: io.c:1922 #, 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)" +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 #, c-format @@ -2715,7 +2833,9 @@ msgstr "lá»—i đóng thiết bị nhập chuẩn trong tiến trình con (%s)" #: io.c:1927 #, 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)" +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 #, c-format @@ -2725,12 +2845,16 @@ 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 #, 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)" +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 #, 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)" +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 msgid "restoring stdout in parent process failed\n" @@ -2766,7 +2890,9 @@ msgstr "register_input_parser: nhận được con trá» NULL" #: io.c:2818 #, 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â€" +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 #, c-format @@ -2779,8 +2905,10 @@ msgstr "register_output_wrapper: nhận được con trá» NULL" #: io.c:2873 #, 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â€" +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 #, c-format @@ -2793,8 +2921,12 @@ msgstr "register_output_processor: nhận được con trá» NULL" #: io.c:2930 #, c-format -msgid "two-way processor `%s' conflicts with previously installed two-way processor `%s'" -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â€" +msgid "" +"two-way processor `%s' conflicts with previously installed two-way processor " +"`%s'" +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 #, c-format @@ -2834,7 +2966,9 @@ msgstr "%s: tùy chá»n cần đến đối số “-- %câ€\n" #: main.c:562 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â€" +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 msgid "`--posix' overrides `--traditional'" @@ -2842,7 +2976,9 @@ msgstr "tùy chá»n “--posix†có quyá»n cao hÆ¡n “--traditional†(truy #: main.c:579 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)" +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 #, c-format @@ -2875,12 +3011,16 @@ msgstr "không có Ä‘oạn chữ chương trình nào cả!" #: main.c:799 #, 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" +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 #, 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" +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 msgid "POSIX options:\t\tGNU long options: (standard)\n" @@ -3225,8 +3365,12 @@ msgstr "không có số thập lúc nằm trong thoát chuá»—i “\\xâ€" #: node.c:579 #, c-format -msgid "hex escape \\x%.*s of %d characters probably not interpreted the way you expect" -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" +msgid "" +"hex escape \\x%.*s of %d characters probably not interpreted the way you " +"expect" +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 #, c-format @@ -3234,8 +3378,12 @@ 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 -msgid "Invalid multibyte data detected. There may be a mismatch between your data and your locale." -msgstr "Dữ liệu dạng Ä‘a byte (multibyte) không hợp lệ được tìm thấy. Tại đó có lẽ không khá»›p giữa dữ liệu cá»§a bạn và nÆ¡i xảy ra." +msgid "" +"Invalid multibyte data detected. There may be a mismatch between your data " +"and your locale." +msgstr "" +"Dữ liệu dạng Ä‘a byte (multibyte) không hợp lệ được tìm thấy. Tại đó có lẽ " +"không khá»›p giữa dữ liệu cá»§a bạn và nÆ¡i xảy ra." #: posix/gawkmisc.c:177 #, c-format @@ -3245,7 +3393,9 @@ msgstr "%s %s “%sâ€: không thể lấy cá» mô tả (fd): (fcntl F_GETFD: % #: posix/gawkmisc.c:189 #, c-format msgid "%s %s `%s': could not set close-on-exec: (fcntl F_SETFD: %s)" -msgstr "%s %s “%sâ€: không thể đặt “close-on-exec†(đóng má»™t khi thá»±c hiện): (fcntl F_SETFD: %s)" +msgstr "" +"%s %s “%sâ€: không thể đặt “close-on-exec†(đóng má»™t khi thá»±c hiện): (fcntl " +"F_SETFD: %s)" #: profile.c:71 #, c-format @@ -3314,7 +3464,9 @@ msgstr "redir2str: không hiểu kiểu chuyển hướng %d" #: re.c:607 #, c-format msgid "regexp component `%.*s' should probably be `[%.*s]'" -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]â€" +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 msgid "Success" @@ -3456,8 +3608,11 @@ msgstr "không thể pop (lấy ra) ngữ cảnh chính" #~ msgid "statement has no effect" #~ msgstr "câu không có tác dụng" -#~ msgid "for loop: array `%s' changed size from %ld to %ld during loop execution" -#~ msgstr "cho loop: (cho vòng lặp) mảng “%s†đã thay đổi kích thước từ %ld đến %ld trong khi thá»±c hiện vòng lặp" +#~ msgid "" +#~ "for loop: array `%s' changed size from %ld to %ld during loop execution" +#~ msgstr "" +#~ "cho loop: (cho vòng lặp) mảng “%s†đã thay đổi kích thước từ %ld đến %ld " +#~ "trong khi thá»±c hiện vòng lặp" #~ msgid "function called indirectly through `%s' does not exist" #~ msgstr "hàm được gá»i gián tiếp thông qua “%s†không tồn tại" diff --git a/posix/ChangeLog b/posix/ChangeLog index 9eb72ff4..b93b891f 100644 --- a/posix/ChangeLog +++ b/posix/ChangeLog @@ -1,3 +1,7 @@ +2014-04-08 Arnold D. Robbins + + * 4.1.1: Release tar ball made. + 2013-06-03 Arnold D. Robbins * gawkmisc.c (init_sockets): Remove ifdefs. diff --git a/test/ChangeLog b/test/ChangeLog index f694c61c..7bcd9dc6 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2014-04-08 Arnold D. Robbins + + * 4.1.1: Release tar ball made. + 2014-04-04 Arnold D. Robbins * Makefile.am: Prettify list of tests a little bit. diff --git a/vms/ChangeLog b/vms/ChangeLog index 94bc9f1a..1bb34475 100644 --- a/vms/ChangeLog +++ b/vms/ChangeLog @@ -1,3 +1,11 @@ +2014-04-08 Arnold D. Robbins + + * 4.1.1: Release tar ball made. + +2014-04-08 Arnold D. Robbins + + * descrip.mms, vmsbuild.com: Update patchlevel. + 2014-02-12 John E. Malmberg * vmstest.com: (strftime) requires GNV Coreutils date command to run diff --git a/vms/descrip.mms b/vms/descrip.mms index 1f24f8f1..a0b7bd6a 100644 --- a/vms/descrip.mms +++ b/vms/descrip.mms @@ -122,7 +122,7 @@ DOCS= $(DOCDIR)gawk.1,$(DOCDIR)gawk.texi,$(DOCDIR)texinfo.tex # Release of gawk REL=4.1 -PATCHLVL=0 +PATCHLVL=1 # generic target all : gawk diff --git a/vms/vax/ChangeLog b/vms/vax/ChangeLog index 526bc420..7cf2c4fa 100644 --- a/vms/vax/ChangeLog +++ b/vms/vax/ChangeLog @@ -1,3 +1,7 @@ +2014-04-08 Arnold D. Robbins + + * 4.1.1: Release tar ball made. + 2013-12-29 John Malmberg * ChangeLog: New directory. diff --git a/vms/vmsbuild.com b/vms/vmsbuild.com index 2c0d39f0..c13e4b57 100644 --- a/vms/vmsbuild.com +++ b/vms/vmsbuild.com @@ -10,10 +10,11 @@ $! gawk 3.1.1 revised, Apr'02 $! gawk 3.1.6 revised, Mar'07 $! gawk-bytecode revd, Jan'10 $! gawk 4.0.0 revd, May'11 -$! gawk 4.1.0 revd, Nov'12 +$! gawk 4.1.0 revd, May'13 +$! gawk 4.1.1 revd, Apr'14 $! $ REL = "4.1" !release version number -$ PATCHLVL = "0" +$ PATCHLVL = "1" $! $ if (f$getsyi("HW_MODEL") .lt. 1024) $ then -- cgit v1.2.3 From 4525c29d221587c522c11ac6ec50122832729cd5 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 11 Apr 2014 07:35:29 +0300 Subject: Define closemaybesocket if it isn't otherwise. --- ChangeLog | 6 ++++++ io.c | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/ChangeLog b/ChangeLog index 4c2e7e83..e32f4496 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2014-04-11 Arnold D. Robbins + + * io.c (closemabyesocket): Define if not defined, e.g. building + without socket code. Thanks to dave.gma@googlemail.com (Dave Sines) + for the report. + 2014-04-08 Arnold D. Robbins * 4.1.1: Release tar ball made. diff --git a/io.c b/io.c index b0b60deb..2a5c2e73 100644 --- a/io.c +++ b/io.c @@ -166,6 +166,12 @@ # define SOCKET int #endif +#else /* HAVE_SOCKETS */ + +#ifndef closemaybesocket +# define closemaybesocket(fd) close(fd) +#endif + #endif /* HAVE_SOCKETS */ #ifndef HAVE_SETSID -- cgit v1.2.3 From e28178f891964d8ec2209379ac615102519a6e06 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 11 Apr 2014 07:39:41 +0300 Subject: Add a warning that locale support is needed for the charset tests. --- test/ChangeLog | 6 ++++++ test/Makefile.am | 4 ++++ test/Makefile.in | 4 ++++ 3 files changed, 14 insertions(+) diff --git a/test/ChangeLog b/test/ChangeLog index 7bcd9dc6..7845e8ad 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,9 @@ +2014-04-11 Arnold D. Robbins + + * Makefile.am (charset-msg-start): Add a warning message that tests + may fail without adequate locale support, per request from + Nelson H.F. Beebe. + 2014-04-08 Arnold D. Robbins * 4.1.1: Release tar ball made. diff --git a/test/Makefile.am b/test/Makefile.am index dc379e06..32d6bd7b 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1143,6 +1143,10 @@ machine-msg-end: charset-msg-start: @echo "======== Starting tests that can vary based on character set or locale support ========" + @echo "************************************************" + @echo "** Some or all of these tests may fail if you **" + @echo "** have inadequate or missing locale support **" + @echo "************************************************" charset-msg-end: @echo "======== Done with tests that can vary based on character set or locale support ========" diff --git a/test/Makefile.in b/test/Makefile.in index d94c6e67..267fea75 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -1570,6 +1570,10 @@ machine-msg-end: charset-msg-start: @echo "======== Starting tests that can vary based on character set or locale support ========" + @echo "************************************************" + @echo "** Some or all of these tests may fail if you **" + @echo "** have inadequate or missing locale support **" + @echo "************************************************" charset-msg-end: @echo "======== Done with tests that can vary based on character set or locale support ========" -- cgit v1.2.3 From 976f73ab03569bb836aa5c949be1c1cc973b2d2e Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 11 Apr 2014 07:42:16 +0300 Subject: Use $(DESTDIR) in extension/Makefile.am when removing .la files. --- extension/ChangeLog | 6 ++++++ extension/Makefile.am | 2 +- extension/Makefile.in | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/extension/ChangeLog b/extension/ChangeLog index afd64ff7..f3a1c7a8 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,9 @@ +2014-04-11 Arnold D. Robbins + + * Makefile.am (install-data-hook): Use $(DESTDIR) when removing + the .la files. Thanks to Lars Wendler + for the report and fix. + 2014-04-08 Arnold D. Robbins * 4.1.1: Release tar ball made. diff --git a/extension/Makefile.am b/extension/Makefile.am index 9c49bb81..11826e2b 100644 --- a/extension/Makefile.am +++ b/extension/Makefile.am @@ -100,7 +100,7 @@ testext_la_LIBADD = $(MY_LIBS) install-data-hook: for i in $(pkgextension_LTLIBRARIES) ; do \ - $(RM) $(pkgextensiondir)/$$i ; \ + $(RM) $(DESTDIR)$(pkgextensiondir)/$$i ; \ done # Keep the uninstall check working: diff --git a/extension/Makefile.in b/extension/Makefile.in index 040cdb8f..d81b1696 100644 --- a/extension/Makefile.in +++ b/extension/Makefile.in @@ -1231,7 +1231,7 @@ uninstall-man: uninstall-man3 install-data-hook: for i in $(pkgextension_LTLIBRARIES) ; do \ - $(RM) $(pkgextensiondir)/$$i ; \ + $(RM) $(DESTDIR)$(pkgextensiondir)/$$i ; \ done # Keep the uninstall check working: -- cgit v1.2.3 From eb03b1e1816d524fcc2b78f6bdf502f515eae54e Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 17 Apr 2014 11:34:14 +0300 Subject: Add a note in TODO. --- TODO | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/TODO b/TODO index f7a10ba3..a4764946 100644 --- a/TODO +++ b/TODO @@ -1,4 +1,4 @@ -Thu Oct 24 22:11:44 IDT 2013 +Thu Apr 17 11:31:24 IDT 2014 ============================ There were too many files tracking different thoughts and ideas for @@ -19,6 +19,9 @@ TODO Minor Cleanups and Code Improvements ------------------------------------ + Nuke installing the igawk script and the igawk.1 man page. Just + remove them from the dist. + Review the bash source script for working with shared libraries in order to nuke the use of libtool. [ Partially started in the nolibtool branch. ] -- cgit v1.2.3 From a9221a2068449cd388a91aa5bc23fdb70d8babe3 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 17 Apr 2014 11:36:35 +0300 Subject: Update pc/Makefile.tst. --- pc/ChangeLog | 4 ++++ pc/Makefile.tst | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/pc/ChangeLog b/pc/ChangeLog index d8e60c98..a66edae9 100644 --- a/pc/ChangeLog +++ b/pc/ChangeLog @@ -1,3 +1,7 @@ +2014-04-17 Scott Deifik + + * Makefile.tst: Add readfile2 test. + 2014-04-08 Arnold D. Robbins * 4.1.1: Release tar ball made. diff --git a/pc/Makefile.tst b/pc/Makefile.tst index 866b4692..403daa25 100644 --- a/pc/Makefile.tst +++ b/pc/Makefile.tst @@ -211,7 +211,7 @@ LOCALE_CHARSET_TESTS = \ SHLIB_TESTS = \ fnmatch filefuncs fork fork2 fts functab4 inplace1 inplace2 inplace3 \ - ordchr ordchr2 readdir readfile revout revtwoway rwarray testext time + ordchr ordchr2 readdir readfile readfile2 revout revtwoway rwarray testext time # List of the tests which should be run with --lint option: NEED_LINT = \ @@ -950,6 +950,11 @@ readfile:: @$(AWK) -l readfile 'BEGIN {printf "%s", readfile("Makefile")}' >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) Makefile _$@ && rm -f _$@ || cp -p Makefile $@.ok +readfile2:: + @echo $@ + @$(AWK) -f "$(srcdir)"/$@.awk "$(srcdir)"/$@.awk "$(srcdir)"/readdir.awk > _$@ || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + include2:: @echo $@ @AWKPATH="$(srcdir)" $(AWK) --include inclib 'BEGIN {print sandwich("a", "b", "c")}' >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ -- cgit v1.2.3 From c0da63689b60c4e724b753a6796836d12ab09934 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 17 Apr 2014 18:35:25 +0300 Subject: Further fix in pc/Makefile.tst. --- pc/Makefile.tst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pc/Makefile.tst b/pc/Makefile.tst index 403daa25..610704e4 100644 --- a/pc/Makefile.tst +++ b/pc/Makefile.tst @@ -141,8 +141,7 @@ BASIC_TESTS = \ arrayref arrymem1 arryref2 arryref3 arryref4 arryref5 arynasty \ arynocls aryprm1 aryprm2 aryprm3 aryprm4 aryprm5 aryprm6 aryprm7 \ aryprm8 arysubnm asgext awkpath \ - back89 backgsub \ - badassign1 \ + back89 backgsub badassign1 \ childin clobber closebad clsflnam compare compare2 concat1 concat2 \ concat3 concat4 convfmt \ datanonl defref delargv delarpm2 delarprm delfunc dfamb1 dfastress dynlj \ -- cgit v1.2.3 From 83cdb74c338a83be6fe47201ef3f49c828a72c32 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 17 Apr 2014 18:35:49 +0300 Subject: Remove an obsolete paragraph from BUGS in gawk.1. --- doc/ChangeLog | 5 +++++ doc/gawk.1 | 7 +------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 222a677f..1d4a353f 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2014-04-17 Arnold D. Robbins + + * gawk.1: Remove the bit about single character programs overflowing + the parse stack. It doesn't seem to be true anymore. + 2014-04-08 Arnold D. Robbins * 4.1.1: Release tar ball made. diff --git a/doc/gawk.1 b/doc/gawk.1 index 97ad9776..c7646557 100644 --- a/doc/gawk.1 +++ b/doc/gawk.1 @@ -13,7 +13,7 @@ . if \w'\(rq' .ds rq "\(rq . \} .\} -.TH GAWK 1 "Mar 08 2014" "Free Software Foundation" "Utility Commands" +.TH GAWK 1 "Apr 17 2014" "Free Software Foundation" "Utility Commands" .SH NAME gawk \- pattern scanning and processing language .SH SYNOPSIS @@ -3906,11 +3906,6 @@ The .B \-F option is not necessary given the command line variable assignment feature; it remains only for backwards compatibility. -.PP -Syntactically invalid single character programs tend to overflow -the parse stack, generating a rather unhelpful message. Such programs -are surprisingly difficult to diagnose in the completely general case, -and the effort to do so really is not worth it. .SH SEE ALSO .IR egrep (1), .IR sed (1), -- cgit v1.2.3 From 1c8936c4d92b34c9c70ff8083e67d77c7fcfb439 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 17 Apr 2014 18:36:08 +0300 Subject: Add more info to README.git and update date. --- README.git | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/README.git b/README.git index 7d0d260c..b5794048 100644 --- a/README.git +++ b/README.git @@ -1,4 +1,4 @@ -Sat Dec 1 21:53:02 IST 2012 +Thu Apr 17 16:54:26 IDT 2014 ============================ If you are reading this, you have retrieved the gawk code base via @@ -350,3 +350,16 @@ has been pushed up to the Savannah repo or not. If your branch is completely local to your machine, use `git rebase'. Otherwise, use `git merge'. + +- How do I remove branches in my local repo that are no longer in the + remote repo? + + Either + git fetch --prume + or + git remote prune origin + + These remove the remote branches (i.e., origin/something) + that no longer exist on the remote. + + (Thanks to Stepan Kasal for this answer.) -- cgit v1.2.3 From f58c712b921b976b43d89dc45c2beaf115b3143e Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 18 Apr 2014 10:57:38 +0300 Subject: Fix problem with file links on Vax/VMS. --- vms/ChangeLog | 4 ++++ vms/gawk_alias_setup.com | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/vms/ChangeLog b/vms/ChangeLog index 1bb34475..9e055cf4 100644 --- a/vms/ChangeLog +++ b/vms/ChangeLog @@ -1,3 +1,7 @@ +2014-04-18 John E. Malmberg + + * gawk_alias_setup.com: Fix problem with file links on Vax/VMS. + 2014-04-08 Arnold D. Robbins * 4.1.1: Release tar ball made. diff --git a/vms/gawk_alias_setup.com b/vms/gawk_alias_setup.com index 73f70d15..a7f13f4b 100644 --- a/vms/gawk_alias_setup.com +++ b/vms/gawk_alias_setup.com @@ -59,14 +59,43 @@ $ alias = "gnv$gnu:''p4'''p3'" $ endif $ if f$search(file) .nes. "" $ then +$ fid = "" +$ mess = f$environment("message") +$ if f$search(alias) .nes. "" +$ then +$ on warn then goto fix_link +$ set message/nofac/nosev/noident/notext +$ fid = f$file_attributes(alias, "FID") +$ endif +$ goto fix_link_end +$fix_link: +$ set file/remove 'alias'; +$fix_link_end: +$ set message'mess' $ if f$search(alias) .eqs. "" $ then $ set file/enter='alias' 'file' $ endif $ alias1 = alias + "exe" -$ if (ftype .eqs. ".") .and. (f$search(alias1) .eqs. "") +$ if (ftype .eqs. ".") $ then +$ fid = "" +$ mess = f$environment("message") +$ if f$search(alias1) .nes. "" +$ then +$ on warn then goto fix_link1 +$ set message/nofac/nosev/noident/notext +$ fid = f$file_attributes(alias1, "FID") +$ endif +$ goto fix_link_end1 +$fix_link1: +$ set file/remove 'alias1'; +$fix_link_end1: +$ set message'mess' +$ if (f$search(alias1) .eqs. "") +$ then $ set file/enter='alias1' 'file' +$ endif $ endif $ endif $ exit @@ -78,7 +107,7 @@ $ if p4 .eqs. "" then p4 = p2 $ ftype = f$element(1, ".", p1) $ if ftype .eqs. "." $ then -$ file = "gnv$gnu:''p2'''p1'.EXE" +$ file = "gnv$gnu:''p2'gnv$''p1'.EXE" $ alias = "gnv$gnu:''p4'''p3'." $ else $ file = "gnv$gnu:''p2'''p1'" -- cgit v1.2.3 From 787a601c5eefb6dc49042e2ead2c5bd819f7ff8b Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 18 Apr 2014 15:21:56 +0300 Subject: Fix configure.ac to work with PCC (-Wl,-export-dynamic). --- ChangeLog | 5 +++++ configure | 2 +- configure.ac | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index e32f4496..2133d731 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-04-18 Arnold D. Robbins + + * configure.ac: Change adding of -export-dynamic for GCC to be + -Wl,-export-dynamic, which then works for PCC also. + 2014-04-11 Arnold D. Robbins * io.c (closemabyesocket): Define if not defined, e.g. building diff --git a/configure b/configure index 9d80aee9..31f1bf35 100755 --- a/configure +++ b/configure @@ -10151,7 +10151,7 @@ $as_echo "#define DYNAMIC 1" >>confdefs.h if test "$GCC" = yes; then case $host_os in linux*|freebsd*) - LDFLAGS="$LDFLAGS -export-dynamic" + LDFLAGS="$LDFLAGS -Wl,-export-dynamic" ;; esac fi diff --git a/configure.ac b/configure.ac index 941334e3..95356171 100644 --- a/configure.ac +++ b/configure.ac @@ -313,7 +313,7 @@ EOF if test "$GCC" = yes; then case $host_os in linux*|freebsd*) - LDFLAGS="$LDFLAGS -export-dynamic" + LDFLAGS="$LDFLAGS -Wl,-export-dynamic" ;; esac fi -- cgit v1.2.3 From 3cdb8b8cf57d6ccfd215d0170c2b616340719d86 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 20 Apr 2014 11:23:56 +0300 Subject: Fix a typo in README.git. --- README.git | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.git b/README.git index b5794048..c947cc24 100644 --- a/README.git +++ b/README.git @@ -355,7 +355,7 @@ Otherwise, use `git merge'. remote repo? Either - git fetch --prume + git fetch --prune or git remote prune origin -- cgit v1.2.3 From 975fbde5ddb54b76212f25e5f114758ebf91f572 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 20 Apr 2014 11:37:26 +0300 Subject: Fix do_rand order-of-evaluation dependency. --- ChangeLog | 7 +++++++ builtin.c | 10 ++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 92545988..f3d950b2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2014-04-20 Arnold D. Robbins + + * builtin.c (do_rand): Make calls to random() in predictable + order to avoid order of evaluation differences amongst compilers. + Thanks to Anders Magnusson (of the PCC team) + for the suggestion. + 2014-04-18 Arnold D. Robbins * configure.ac: Change adding of -export-dynamic for GCC to be diff --git a/builtin.c b/builtin.c index 875b3e5c..3464dc21 100644 --- a/builtin.c +++ b/builtin.c @@ -2454,8 +2454,14 @@ do_rand(int nargs ATTRIBUTE_UNUSED) */ do { - tmprand = 0.5 + ( (random()/RAND_DIVISOR + random()) - / RAND_DIVISOR); + long d1, d2; + /* + * Do the calls in predictable order to avoid + * compiler differences in order of evaluation. + */ + d1 = random(); + d2 = random(); + tmprand = 0.5 + ( (d1/RAND_DIVISOR + d2) / RAND_DIVISOR ); tmprand -= 0.5; } while (tmprand == 1.0); -- cgit v1.2.3 From 6e5964a4f6dd7d2476af106387f40c7ae9ead0c5 Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Sun, 20 Apr 2014 10:36:08 -0400 Subject: Improve socket name parsing to avoid false matches on names starting with /inet. --- ChangeLog | 13 ++++ io.c | 216 ++++++++++++++++++++++++++++++++------------------------------ 2 files changed, 126 insertions(+), 103 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2133d731..e586bd05 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2014-04-20 Andrew J. Schorr + + * io.c (struct inet_socket_info): Define new structure + for use in parsing special socket filenames. + (inetfile): Parse all components of the special socket filename + into the struct inet_socket_info. Returns true only if it is a + valid socket fliename, unlike the previous version which checked + for the '/inet[46]?/' prefix only. + (redirect): Patch to use updated inetfile() function. + (devopen): Remove logic to parse socket filenames, since this has + been moved into the inetfile() function. + (two_way_open): Update args to inetfile(). + 2014-04-18 Arnold D. Robbins * configure.ac: Change adding of -export-dynamic for GCC to be diff --git a/io.c b/io.c index 2a5c2e73..a6e786f7 100644 --- a/io.c +++ b/io.c @@ -279,7 +279,23 @@ static RECVALUE (*matchrec)(IOBUF *iop, struct recmatch *recm, SCANSTATE *state) static int get_a_record(char **out, IOBUF *iop, int *errcode); static void free_rp(struct redirect *rp); -static int inetfile(const char *str, int *length, int *family); + +struct inet_socket_info { + int family; /* AF_UNSPEC, AF_INET, or AF_INET6 */ + int protocol; /* SOCK_STREAM or SOCK_DGRAM */ + /* + * N.B. If we used 'char *' or 'const char *' pointers to the + * substrings, it would trigger compiler warnings about the casts + * in either inetfile() or devopen(). So we use offset/len to + * avoid that. + */ + struct { + int offset; + int len; + } localport, remotehost, remoteport; +}; + +static int inetfile(const char *str, struct inet_socket_info *isn); static NODE *in_PROCINFO(const char *pidx1, const char *pidx2, NODE **full_idx); static long get_read_timeout(IOBUF *iop); @@ -713,7 +729,9 @@ redirect(NODE *redir_exp, int redirtype, int *errflg) int fd; const char *what = NULL; bool new_rp = false; - int len; /* used with /inet */ +#ifdef HAVE_SOCKETS + struct inet_socket_info isi; +#endif static struct redirect *save_rp = NULL; /* hold onto rp that should * be freed for reuse */ @@ -772,9 +790,9 @@ redirect(NODE *redir_exp, int redirtype, int *errflg) * Use /inet4 to force IPv4, /inet6 to force IPv6, and plain * /inet will be whatever we get back from the system. */ - if (inetfile(str, & len, NULL)) { + if (inetfile(str, & isi)) { tflag |= RED_SOCKET; - if (strncmp(str + len, "tcp/", 4) == 0) + if (isi.protocol == SOCK_STREAM) tflag |= RED_TCP; /* use shutdown when closing */ } #endif /* HAVE_SOCKETS */ @@ -901,7 +919,7 @@ redirect(NODE *redir_exp, int redirtype, int *errflg) direction = "to/from"; if (! two_way_open(str, rp)) { #ifdef HAVE_SOCKETS - if (inetfile(str, NULL, NULL)) { + if (inetfile(str, NULL)) { *errflg = errno; /* do not free rp, saving it for reuse (save_rp = rp) */ return NULL; @@ -1538,8 +1556,7 @@ devopen(const char *name, const char *mode) char *cp; char *ptr; int flag = 0; - int len; - int family; + struct inet_socket_info isi; if (strcmp(name, "-") == 0) return fileno(stdin); @@ -1576,74 +1593,14 @@ devopen(const char *name, const char *mode) /* do not set close-on-exec for inherited fd's */ if (openfd != INVALID_HANDLE) return openfd; - } else if (inetfile(name, & len, & family)) { + } else if (inetfile(name, & isi)) { #ifdef HAVE_SOCKETS - /* /inet/protocol/localport/hostname/remoteport */ - int protocol; - char *hostname; - char *hostnameslastcharp; - char *localpname; - char *localpnamelastcharp; - - cp = (char *) name + len; - /* which protocol? */ - if (strncmp(cp, "tcp/", 4) == 0) - protocol = SOCK_STREAM; - else if (strncmp(cp, "udp/", 4) == 0) - protocol = SOCK_DGRAM; - else { - protocol = SOCK_STREAM; /* shut up the compiler */ - fatal(_("no (known) protocol supplied in special filename `%s'"), - name); - } - cp += 4; - - /* which localport? */ - localpname = cp; - while (*cp != '/' && *cp != '\0') - cp++; - /* - * Require a port, let them explicitly put 0 if - * they don't care. - */ - if (*cp != '/' || cp == localpname) - fatal(_("special file name `%s' is incomplete"), name); + cp = (char *) name; - /* - * We change the special file name temporarily because we - * need a 0-terminated string here for conversion with atoi(). - * By using atoi() the use of decimal numbers is enforced. - */ - *cp = '\0'; - localpnamelastcharp = cp; - - /* which hostname? */ - cp++; - hostname = cp; - while (*cp != '/' && *cp != '\0') - cp++; - if (*cp != '/' || cp == hostname) { - *localpnamelastcharp = '/'; - fatal(_("must supply a remote hostname to `/inet'")); - } - *cp = '\0'; - hostnameslastcharp = cp; - - /* which remoteport? */ - cp++; - /* - * The remote port ends the special file name. - * This means there already is a '\0' at the end of the string. - * Therefore no need to patch any string ending. - * - * Here too, require a port, let them explicitly put 0 if - * they don't care. - */ - if (*cp == '\0') { - *localpnamelastcharp = '/'; - *hostnameslastcharp = '/'; - fatal(_("must supply a remote port to `/inet'")); - } + /* socketopen requires NUL-terminated strings */ + cp[isi.localport.offset+isi.localport.len] = '\0'; + cp[isi.remotehost.offset+isi.remotehost.len] = '\0'; + /* remoteport comes last, so already NUL-terminated */ { #define DEFAULT_RETRIES 20 @@ -1680,13 +1637,14 @@ devopen(const char *name, const char *mode) retries = def_retries; do { - openfd = socketopen(family, protocol, localpname, cp, hostname); + openfd = socketopen(isi.family, isi.protocol, name+isi.localport.offset, name+isi.remoteport.offset, name+isi.remotehost.offset); retries--; } while (openfd == INVALID_HANDLE && retries > 0 && usleep(msleep) == 0); } - *localpnamelastcharp = '/'; - *hostnameslastcharp = '/'; + /* 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")); #endif /* HAVE_SOCKETS */ @@ -1700,9 +1658,8 @@ strictopen: /* On OS/2 and Windows directory access via open() is not permitted. */ struct stat buf; - int l, f; - if (!inetfile(name, &l, &f) + if (!inetfile(name, NULL) && stat(name, & buf) == 0 && S_ISDIR(buf.st_mode)) errno = EISDIR; } @@ -1724,7 +1681,7 @@ two_way_open(const char *str, struct redirect *rp) #ifdef HAVE_SOCKETS /* case 1: socket */ - if (inetfile(str, NULL, NULL)) { + if (inetfile(str, NULL)) { int fd, newfd; fd = devopen(str, "rw"); @@ -3751,34 +3708,87 @@ free_rp(struct redirect *rp) /* inetfile --- return true for a /inet special file, set other values */ static int -inetfile(const char *str, int *length, int *family) +inetfile(const char *str, struct inet_socket_info *isi) { - bool ret = false; - - if (strncmp(str, "/inet/", 6) == 0) { - ret = true; - if (length != NULL) - *length = 6; - if (family != NULL) - *family = AF_UNSPEC; - } else if (strncmp(str, "/inet4/", 7) == 0) { - ret = true; - if (length != NULL) - *length = 7; - if (family != NULL) - *family = AF_INET; - } else if (strncmp(str, "/inet6/", 7) == 0) { - ret = true; - if (length != NULL) - *length = 7; - if (family != NULL) - *family = AF_INET6; + const char *cp = str; + struct inet_socket_info buf; + + /* syntax: /inet/protocol/localport/hostname/remoteport */ + if (strncmp(cp, "/inet", 5) != 0) + /* quick exit */ + return false; + if (! isi) + isi = & buf; + cp += 5; + switch (*cp) { + case '/': + isi->family = AF_UNSPEC; + break; + case '4': + if (*++cp != '/') + return false; + isi->family = AF_INET; + break; + case '6': + if (*++cp != '/') + return false; + isi->family = AF_INET6; + break; + default: + return false; + } + cp++; /* skip past '/' */ + + /* which protocol? */ + if (strncmp(cp, "tcp/", 4) == 0) + isi->protocol = SOCK_STREAM; + else if (strncmp(cp, "udp/", 4) == 0) + isi->protocol = SOCK_DGRAM; + else + return false; + cp += 4; + + /* which localport? */ + isi->localport.offset = cp-str; + while (*cp != '/' && *cp != '\0') + cp++; + /* + * Require a port, let them explicitly put 0 if + * they don't care. + */ + if (*cp != '/' || ((isi->localport.len = (cp-str)-isi->localport.offset) == 0)) + return false; + + /* which hostname? */ + cp++; + isi->remotehost.offset = cp-str; + while (*cp != '/' && *cp != '\0') + cp++; + if (*cp != '/' || ((isi->remotehost.len = (cp-str)-isi->remotehost.offset) == 0)) + return false; + + /* which remoteport? */ + cp++; + /* + * The remote port ends the special file name. + * This means there already is a '\0' at the end of the string. + * Therefore no need to patch any string ending. + * + * Here too, require a port, let them explicitly put 0 if + * they don't care. + */ + isi->remoteport.offset = cp-str; + while (*cp != '/' && *cp != '\0') + cp++; + if (*cp != '\0' || ((isi->remoteport.len = (cp-str)-isi->remoteport.offset) == 0)) + return false; + #ifndef HAVE_GETADDRINFO + /* final check for IPv6: */ + if (isi->family == AF_INET6) fatal(_("IPv6 communication is not supported")); #endif - } - - return ret; + return true; } /* -- cgit v1.2.3 From ae8a268a242aea9c52cc194e28473e2ce4f8d2f2 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 24 Apr 2014 05:06:21 +0300 Subject: Update xalloc.h for pending merge with dfa. --- ChangeLog | 7 +++++++ xalloc.h | 24 ++++++++++++++++++++---- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index e586bd05..608a6c78 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2014-04-24 Arnold D. Robbins + + Update xalloc.h for pending merge with dfa. + + * xalloc.h (xstrdup): Implement this. + (x2nrealloc): Incorporate changed logic from GNULIB. + 2014-04-20 Andrew J. Schorr * io.c (struct inet_socket_info): Define new structure diff --git a/xalloc.h b/xalloc.h index eb0ef1a0..0d169cf9 100644 --- a/xalloc.h +++ b/xalloc.h @@ -136,6 +136,8 @@ xnmalloc (size_t n, size_t s) #ifdef GAWK #include +extern void r_fatal(const char *msg, ...) ATTRIBUTE_NORETURN ; + /* Allocate an array of N objects, each with S bytes of memory, dynamically, with error checking. S must be nonzero. Clear the contents afterwards. */ @@ -165,8 +167,6 @@ xrealloc(void *p, size_t size) void xalloc_die (void) { - extern void r_fatal(const char *msg, ...) ATTRIBUTE_NORETURN ; - r_fatal(_("xalloc: malloc failed: %s"), strerror(errno)); } @@ -179,6 +179,22 @@ xmemdup (void const *p, size_t s) { return memcpy (xmalloc (s), p, s); } + +/* xstrdup --- strdup and die if fails */ +char *xstrdup(const char *s) +{ + char *p; + int l; + + if (s == NULL) + r_fatal(_("xstrdup: null parameter")); + + l = strlen(s); + p = xmemdup(s, l + 1); + p[l] = '\0'; + + return p; +} #endif /* Change the size of an allocated block of memory P to an array of N @@ -260,7 +276,7 @@ x2nrealloc (void *p, size_t *pn, size_t s) requests, when the invoking code specifies an old size of zero. 64 bytes is the largest "small" request for the GNU C library malloc. */ - enum { DEFAULT_MXFAST = 64 }; + enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; n = DEFAULT_MXFAST / s; n += !n; @@ -274,7 +290,7 @@ x2nrealloc (void *p, size_t *pn, size_t s) worth the trouble. */ if ((size_t) -1 / 3 * 2 / s <= n) xalloc_die (); - n += (n + 1) / 2; + n += n / 2 + 1; } *pn = n; -- cgit v1.2.3 From 6c29291112b6b767e98ce3fb93dd4752d0ef1469 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 24 Apr 2014 05:46:08 +0300 Subject: Start on gawk manual updating. --- doc/ChangeLog | 4 + doc/gawk.info | 1156 ++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 182 +++++---- doc/gawktexi.in | 182 +++++---- 4 files changed, 817 insertions(+), 707 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 1d4a353f..243ef843 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-04-24 Arnold D. Robbins + + * gawktexi.in: Start on revisions. + 2014-04-17 Arnold D. Robbins * gawk.1: Remove the bit about single character programs overflowing diff --git a/doc/gawk.info b/doc/gawk.info index 8a26992f..589ac015 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -127,7 +127,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) * One-shot:: Running a short throwaway `awk' program. * Read Terminal:: Using no input files (input from - terminal instead). + the keyboard instead). * Long:: Putting permanent `awk' programs in files. * Executable Scripts:: Making self-contained `awk' @@ -791,6 +791,10 @@ and other `awk' implementations. * Perform simple network communications + * Profile and debug `awk' programs. + + * Extend the language with functions written in C or C++. + This Info file teaches you about the `awk' language and how you can use it effectively. You should already be familiar with basic system commands, such as `cat' and `ls',(2) as well as basic shell facilities, @@ -799,13 +803,12 @@ such as input/output (I/O) redirection and pipes. Implementations of the `awk' language are available for many different computing environments. This Info file, while describing the `awk' language in general, also describes the particular implementation -of `awk' called `gawk' (which stands for "GNU awk"). `gawk' runs on a -broad range of Unix systems, ranging from Intel(R)-architecture -PC-based computers up through large-scale systems, such as Crays. -`gawk' has also been ported to Mac OS X, Microsoft Windows (all -versions) and OS/2 PCs, and VMS. (Some other, obsolete systems to -which `gawk' was once ported are no longer supported and the code for -those systems has been removed.) +of `awk' called `gawk' (which stands for "GNU `awk'"). `gawk' runs on +a broad range of Unix systems, ranging from Intel(R)-architecture +PC-based computers up through large-scale systems. `gawk' has also +been ported to Mac OS X, Microsoft Windows (all versions), and OpenVMS. +(Some other, obsolete systems to which `gawk' was once ported are no +longer supported and the code for those systems has been removed.) * Menu: @@ -822,7 +825,7 @@ those systems has been removed.) ---------- Footnotes ---------- - (1) The 2008 POSIX standard is online at + (1) The 2008 POSIX standard is accessable online at `http://www.opengroup.org/onlinepubs/9699919799/'. (2) These commands are available on POSIX-compliant systems, as well @@ -892,20 +895,21 @@ The `awk' language has evolved over the years. Full details are provided in *note Language History::. The language described in this Info file is often referred to as "new `awk'" (`nawk'). - Because of this, there are systems with multiple versions of `awk'. -Some systems have an `awk' utility that implements the original version -of the `awk' language and a `nawk' utility for the new version. Others -have an `oawk' version for the "old `awk'" language and plain `awk' for -the new one. Still others only have one version, which is usually the -new one.(1) - - All in all, this makes it difficult for you to know which version of -`awk' you should run when writing your programs. The best advice we -can give here is to check your local documentation. Look for `awk', -`oawk', and `nawk', as well as for `gawk'. It is likely that you -already have some version of new `awk' on your system, which is what -you should use when running your programs. (Of course, if you're -reading this Info file, chances are good that you have `gawk'!) + For some time after new `awk' was introduced, there were systems +with multiple versions of `awk'. Some systems had an `awk' utility +that implemented the original version of the `awk' language and a +`nawk' utility for the new version. Others had an `oawk' version for +the "old `awk'" language and plain `awk' for the new one. Still others +only had one version, which is usually the new one. + + Today, only Solaris systems still use an old `awk' for the default +`awk' utility. (A more modern `awk' lives in `/usr/xpg6/bin' on these +systems.) All other modern systems use some version of new `awk'.(1) + + It is likely that you already have some version of new `awk' on your +system, which is what you should use when running your programs. (Of +course, if you're reading this Info file, chances are good that you +have `gawk'!) Throughout this Info file, whenever we refer to a language feature that should be available in any complete implementation of POSIX `awk', @@ -914,7 +918,7 @@ specific to the GNU implementation, we use the term `gawk'. ---------- Footnotes ---------- - (1) Often, these systems use `gawk' for their `awk' implementation! + (1) Many of these systems use `gawk' for their `awk' implementation!  File: gawk.info, Node: This Manual, Next: Conventions, Prev: Names, Up: Preface @@ -1168,11 +1172,10 @@ significant note for this edition was *note Debugger::. the major new additions are *note Arbitrary Precision Arithmetic::, and *note Dynamic Extensions::. - `GAWK: Effective AWK Programming' will undoubtedly continue to -evolve. An electronic version comes with the `gawk' distribution from -the FSF. If you find an error in this Info file, please report it! -*Note Bugs::, for information on submitting problem reports -electronically. + This Info file will undoubtedly continue to evolve. An electronic +version comes with the `gawk' distribution from the FSF. If you find +an error in this Info file, please report it! *Note Bugs::, for +information on submitting problem reports electronically. ---------- Footnotes ---------- @@ -1199,14 +1202,17 @@ something more broad, I acquired the `awk.info' domain. contributed code: the archive did not grow and the domain went unused for several years. - Fortunately, late in 2008, a volunteer took on the task of setting up -an `awk'-related web site--`http://awk.info'--and did a very nice job. + Late in 2008, a volunteer took on the task of setting up an +`awk'-related web site--`http://awk.info'--and did a very nice job. If you have written an interesting `awk' program, or have written a `gawk' extension that you would like to share with the rest of the world, please see `http://awk.info/?contribute' for how to contribute it to the web site. + As of this writing, this website is in search of a maintainer; please +contact me if you are interested. +  File: gawk.info, Node: Acknowledgments, Prev: How To Contribute, Up: Preface @@ -1297,7 +1303,7 @@ to take advantage of those opportunities. Arnold Robbins Nof Ayalon ISRAEL -May, 2013 +May, 2014  File: gawk.info, Node: Getting Started, Next: Invoking Gawk, Prev: Preface, Up: Top @@ -1375,7 +1381,7 @@ variations of each. * One-shot:: Running a short throwaway `awk' program. -* Read Terminal:: Using no input files (input from terminal +* Read Terminal:: Using no input files (input from the keyboard instead). * Long:: Putting permanent `awk' programs in files. @@ -1425,7 +1431,7 @@ following command line: awk 'PROGRAM' `awk' applies the PROGRAM to the "standard input", which usually means -whatever you type on the terminal. This continues until you indicate +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 character may be different. For example, on OS/2, it is `Ctrl-z'.) @@ -2381,7 +2387,7 @@ The following list describes options mandated by the POSIX standard: `--debug=[FILE]' Enable debugging of `awk' programs (*note Debugging::). By default, the debugger reads commands interactively from the - terminal. The optional FILE argument allows you to specify a file + keyboard. 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' and FILE, if FILE is supplied. @@ -2586,7 +2592,7 @@ having to be included into each individual program. (As mentioned in *note Definition Syntax::, function names must be unique.) With standard `awk', library functions can still be used, even if -the program is entered at the terminal, by specifying `-f /dev/tty'. +the program is entered at the keyboard, by specifying `-f /dev/tty'. After typing your program, type `Ctrl-d' (the end-of-file character) to terminate it. (You may also use `-f -' to read program source from the standard input but then you will not be able to also use the standard @@ -5111,7 +5117,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 terminal, sometimes the +stream--either the standard input (usually your keyboard, sometimes the output from another program) or from 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. @@ -5560,8 +5566,8 @@ File: gawk.info, Node: Read Timeout, Next: Command line directories, Prev: Ge 4.10 Reading Input With A Timeout ================================= -You may specify a timeout in milliseconds for reading input from a -terminal, pipe or two-way communication including, TCP/IP sockets. This +You may specify a timeout in milliseconds for reading input from the +keyboard, 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: @@ -5579,8 +5585,8 @@ from the server after a certain amount of time: else if (ERRNO != "") print ERRNO - Here is how to read interactively from the terminal(1) without -waiting for more than five seconds: + Here is how to read interactively from the user(1) without waiting +for more than five seconds: PROCINFO["/dev/stdin", "READ_TIMEOUT"] = 5000 while ((getline < "/dev/stdin") > 0) @@ -5591,7 +5597,7 @@ after waiting for the timeout period, return failure and set the `ERRNO' variable to an appropriate string value. A negative or zero value for the timeout is the same as specifying no timeout at all. - A timeout can also be set for reading from the terminal in the + A timeout can also be set for reading from the keyboard in the implicit loop that reads input records and matches them against patterns, like so: @@ -5644,7 +5650,7 @@ writing. ---------- Footnotes ---------- - (1) This assumes that standard input is the keyboard + (1) This assumes that standard input is the keyboard.  File: gawk.info, Node: Command line directories, Prev: Read Timeout, Up: Reading Files @@ -21173,7 +21179,7 @@ need it. arbitrary precision arithmetic. The easiest way to find out is to look at the output of the following command: - $ ./gawk --version + $ gawk --version -| GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2) -| Copyright (C) 1989, 1991-2014 Free Software Foundation. ... @@ -26263,8 +26269,8 @@ Various `.c', `.y', and `.h' files PC Installation::, for details). `vms/*' - Files needed for building `gawk' under VMS (*note VMS - Installation::, for details). + Files needed for building `gawk' under Vax/VMS and OpenVMS (*note + VMS Installation::, for details). `test/*' A test suite for `gawk'. You can use `make check' from the @@ -26748,8 +26754,8 @@ translation of `"\r\n"', since it won't. Caveat Emptor!  File: gawk.info, Node: VMS Installation, Prev: PC Installation, Up: Non-Unix Installation -B.3.2 How to Compile and Install `gawk' on VMS ----------------------------------------------- +B.3.2 How to Compile and Install `gawk' on Vax/VMS and OpenVMS +-------------------------------------------------------------- This node describes how to compile and install `gawk' under VMS. The older designation "VMS" is used throughout to refer to OpenVMS. @@ -31677,7 +31683,7 @@ Index * git, use of for gawk source code: Derived Files. (line 6) * GMP: Gawk and MPFR. (line 6) * GNITS mailing list: Acknowledgments. (line 52) -* GNU awk, See gawk: Preface. (line 49) +* GNU awk, See gawk: Preface. (line 53) * GNU Free Documentation License: GNU Free Documentation License. (line 7) * GNU General Public License: Glossary. (line 306) @@ -32023,7 +32029,7 @@ Index * namespace issues <1>: Library Names. (line 6) * namespace issues: Arrays. (line 18) * namespace issues, functions: Definition Syntax. (line 20) -* nawk utility: Names. (line 17) +* nawk utility: Names. (line 10) * negative zero: Unexpected Results. (line 34) * NetBSD: Glossary. (line 616) * networks, programming: TCP/IP Networking. (line 6) @@ -32103,7 +32109,7 @@ Index * numeric, output format: OFMT. (line 6) * numeric, strings: Variable Typing. (line 6) * o debugger command (alias for option): Debugger Info. (line 57) -* oawk utility: Names. (line 17) +* oawk utility: Names. (line 10) * obsolete features: Obsolete. (line 6) * octal numbers: Nondecimal-numbers. (line 6) * octal values, enabling interpretation of: Options. (line 207) @@ -33094,529 +33100,529 @@ Index  Tag Table: Node: Top1292 -Node: Foreword40821 -Node: Preface45166 -Ref: Preface-Footnote-148219 -Ref: Preface-Footnote-248315 -Node: History48547 -Node: Names50921 -Ref: Names-Footnote-152398 -Node: This Manual52470 -Ref: This Manual-Footnote-158244 -Node: Conventions58344 -Node: Manual History60500 -Ref: Manual History-Footnote-163948 -Ref: Manual History-Footnote-263989 -Node: How To Contribute64063 -Node: Acknowledgments65207 -Node: Getting Started69401 -Node: Running gawk71780 -Node: One-shot72966 -Node: Read Terminal74191 -Ref: Read Terminal-Footnote-175841 -Ref: Read Terminal-Footnote-276117 -Node: Long76288 -Node: Executable Scripts77664 -Ref: Executable Scripts-Footnote-179497 -Ref: Executable Scripts-Footnote-279599 -Node: Comments80146 -Node: Quoting82613 -Node: DOS Quoting87236 -Node: Sample Data Files87911 -Node: Very Simple90426 -Node: Two Rules95077 -Node: More Complex96975 -Ref: More Complex-Footnote-199905 -Node: Statements/Lines99990 -Ref: Statements/Lines-Footnote-1104453 -Node: Other Features104718 -Node: When105646 -Node: Invoking Gawk107793 -Node: Command Line109256 -Node: Options110039 -Ref: Options-Footnote-1125417 -Node: Other Arguments125442 -Node: Naming Standard Input128100 -Node: Environment Variables129194 -Node: AWKPATH Variable129752 -Ref: AWKPATH Variable-Footnote-1132533 -Ref: AWKPATH Variable-Footnote-2132578 -Node: AWKLIBPATH Variable132838 -Node: Other Environment Variables133556 -Node: Exit Status136519 -Node: Include Files137194 -Node: Loading Shared Libraries140763 -Node: Obsolete142127 -Node: Undocumented142824 -Node: Regexp143066 -Node: Regexp Usage144455 -Node: Escape Sequences146480 -Node: Regexp Operators152149 -Ref: Regexp Operators-Footnote-1159529 -Ref: Regexp Operators-Footnote-2159676 -Node: Bracket Expressions159774 -Ref: table-char-classes161664 -Node: GNU Regexp Operators164187 -Node: Case-sensitivity167910 -Ref: Case-sensitivity-Footnote-1170878 -Ref: Case-sensitivity-Footnote-2171113 -Node: Leftmost Longest171221 -Node: Computed Regexps172422 -Node: Reading Files175759 -Node: Records177761 -Ref: Records-Footnote-1187284 -Node: Fields187321 -Ref: Fields-Footnote-1190277 -Node: Nonconstant Fields190363 -Node: Changing Fields192569 -Node: Field Separators198528 -Node: Default Field Splitting201230 -Node: Regexp Field Splitting202347 -Node: Single Character Fields205689 -Node: Command Line Field Separator206748 -Node: Full Line Fields210090 -Ref: Full Line Fields-Footnote-1210598 -Node: Field Splitting Summary210644 -Ref: Field Splitting Summary-Footnote-1213743 -Node: Constant Size213844 -Node: Splitting By Content218451 -Ref: Splitting By Content-Footnote-1222200 -Node: Multiple Line222240 -Ref: Multiple Line-Footnote-1228087 -Node: Getline228266 -Node: Plain Getline230482 -Node: Getline/Variable232577 -Node: Getline/File233724 -Node: Getline/Variable/File235065 -Ref: Getline/Variable/File-Footnote-1236664 -Node: Getline/Pipe236751 -Node: Getline/Variable/Pipe239450 -Node: Getline/Coprocess240557 -Node: Getline/Variable/Coprocess241809 -Node: Getline Notes242546 -Node: Getline Summary245333 -Ref: table-getline-variants245741 -Node: Read Timeout246653 -Ref: Read Timeout-Footnote-1250394 -Node: Command line directories250451 -Node: Printing251081 -Node: Print252712 -Node: Print Examples254049 -Node: Output Separators256833 -Node: OFMT258849 -Node: Printf260207 -Node: Basic Printf261113 -Node: Control Letters262652 -Node: Format Modifiers266464 -Node: Printf Examples272473 -Node: Redirection275185 -Node: Special Files282159 -Node: Special FD282692 -Ref: Special FD-Footnote-1286317 -Node: Special Network286391 -Node: Special Caveats287241 -Node: Close Files And Pipes288037 -Ref: Close Files And Pipes-Footnote-1295020 -Ref: Close Files And Pipes-Footnote-2295168 -Node: Expressions295318 -Node: Values296450 -Node: Constants297126 -Node: Scalar Constants297806 -Ref: Scalar Constants-Footnote-1298665 -Node: Nondecimal-numbers298847 -Node: Regexp Constants301847 -Node: Using Constant Regexps302322 -Node: Variables305377 -Node: Using Variables306032 -Node: Assignment Options307756 -Node: Conversion309631 -Ref: table-locale-affects315131 -Ref: Conversion-Footnote-1315755 -Node: All Operators315864 -Node: Arithmetic Ops316494 -Node: Concatenation318999 -Ref: Concatenation-Footnote-1321787 -Node: Assignment Ops321907 -Ref: table-assign-ops326895 -Node: Increment Ops328226 -Node: Truth Values and Conditions331660 -Node: Truth Values332743 -Node: Typing and Comparison333792 -Node: Variable Typing334585 -Ref: Variable Typing-Footnote-1338482 -Node: Comparison Operators338604 -Ref: table-relational-ops339014 -Node: POSIX String Comparison342562 -Ref: POSIX String Comparison-Footnote-1343518 -Node: Boolean Ops343656 -Ref: Boolean Ops-Footnote-1347726 -Node: Conditional Exp347817 -Node: Function Calls349549 -Node: Precedence353143 -Node: Locales356812 -Node: Patterns and Actions357901 -Node: Pattern Overview358955 -Node: Regexp Patterns360624 -Node: Expression Patterns361167 -Node: Ranges364948 -Node: BEGIN/END368052 -Node: Using BEGIN/END368814 -Ref: Using BEGIN/END-Footnote-1371550 -Node: I/O And BEGIN/END371656 -Node: BEGINFILE/ENDFILE373938 -Node: Empty376852 -Node: Using Shell Variables377169 -Node: Action Overview379454 -Node: Statements381811 -Node: If Statement383665 -Node: While Statement385164 -Node: Do Statement387208 -Node: For Statement388364 -Node: Switch Statement391516 -Node: Break Statement393670 -Node: Continue Statement395660 -Node: Next Statement397453 -Node: Nextfile Statement399843 -Node: Exit Statement402498 -Node: Built-in Variables404914 -Node: User-modified406009 -Ref: User-modified-Footnote-1414367 -Node: Auto-set414429 -Ref: Auto-set-Footnote-1427494 -Ref: Auto-set-Footnote-2427699 -Node: ARGC and ARGV427755 -Node: Arrays431609 -Node: Array Basics433114 -Node: Array Intro433940 -Node: Reference to Elements438257 -Node: Assigning Elements440527 -Node: Array Example441018 -Node: Scanning an Array442750 -Node: Controlling Scanning445064 -Ref: Controlling Scanning-Footnote-1450151 -Node: Delete450467 -Ref: Delete-Footnote-1453232 -Node: Numeric Array Subscripts453289 -Node: Uninitialized Subscripts455472 -Node: Multidimensional457099 -Node: Multiscanning460192 -Node: Arrays of Arrays461781 -Node: Functions466421 -Node: Built-in467240 -Node: Calling Built-in468318 -Node: Numeric Functions470306 -Ref: Numeric Functions-Footnote-1474138 -Ref: Numeric Functions-Footnote-2474495 -Ref: Numeric Functions-Footnote-3474543 -Node: String Functions474812 -Ref: String Functions-Footnote-1497770 -Ref: String Functions-Footnote-2497899 -Ref: String Functions-Footnote-3498147 -Node: Gory Details498234 -Ref: table-sub-escapes499913 -Ref: table-sub-posix-92501267 -Ref: table-sub-proposed502618 -Ref: table-posix-sub503972 -Ref: table-gensub-escapes505517 -Ref: Gory Details-Footnote-1506693 -Ref: Gory Details-Footnote-2506744 -Node: I/O Functions506895 -Ref: I/O Functions-Footnote-1513885 -Node: Time Functions514032 -Ref: Time Functions-Footnote-1525015 -Ref: Time Functions-Footnote-2525083 -Ref: Time Functions-Footnote-3525241 -Ref: Time Functions-Footnote-4525352 -Ref: Time Functions-Footnote-5525464 -Ref: Time Functions-Footnote-6525691 -Node: Bitwise Functions525957 -Ref: table-bitwise-ops526519 -Ref: Bitwise Functions-Footnote-1530740 -Node: Type Functions530924 -Node: I18N Functions532075 -Node: User-defined533702 -Node: Definition Syntax534506 -Ref: Definition Syntax-Footnote-1539420 -Node: Function Example539489 -Ref: Function Example-Footnote-1542138 -Node: Function Caveats542160 -Node: Calling A Function542678 -Node: Variable Scope543633 -Node: Pass By Value/Reference546596 -Node: Return Statement550104 -Node: Dynamic Typing553085 -Node: Indirect Calls554016 -Node: Library Functions563703 -Ref: Library Functions-Footnote-1567216 -Ref: Library Functions-Footnote-2567359 -Node: Library Names567530 -Ref: Library Names-Footnote-1571003 -Ref: Library Names-Footnote-2571223 -Node: General Functions571309 -Node: Strtonum Function572337 -Node: Assert Function575267 -Node: Round Function578593 -Node: Cliff Random Function580134 -Node: Ordinal Functions581150 -Ref: Ordinal Functions-Footnote-1584227 -Ref: Ordinal Functions-Footnote-2584479 -Node: Join Function584690 -Ref: Join Function-Footnote-1586461 -Node: Getlocaltime Function586661 -Node: Readfile Function590402 -Node: Data File Management592241 -Node: Filetrans Function592873 -Node: Rewind Function596942 -Node: File Checking598329 -Node: Empty Files599423 -Node: Ignoring Assigns601653 -Node: Getopt Function603207 -Ref: Getopt Function-Footnote-1614510 -Node: Passwd Functions614713 -Ref: Passwd Functions-Footnote-1623691 -Node: Group Functions623779 -Node: Walking Arrays631863 -Node: Sample Programs633999 -Node: Running Examples634673 -Node: Clones635401 -Node: Cut Program636625 -Node: Egrep Program646476 -Ref: Egrep Program-Footnote-1654249 -Node: Id Program654359 -Node: Split Program658008 -Ref: Split Program-Footnote-1661527 -Node: Tee Program661655 -Node: Uniq Program664458 -Node: Wc Program671887 -Ref: Wc Program-Footnote-1676153 -Ref: Wc Program-Footnote-2676353 -Node: Miscellaneous Programs676445 -Node: Dupword Program677633 -Node: Alarm Program679664 -Node: Translate Program684471 -Ref: Translate Program-Footnote-1688858 -Ref: Translate Program-Footnote-2689106 -Node: Labels Program689240 -Ref: Labels Program-Footnote-1692611 -Node: Word Sorting692695 -Node: History Sorting696579 -Node: Extract Program698418 -Ref: Extract Program-Footnote-1705921 -Node: Simple Sed706049 -Node: Igawk Program709111 -Ref: Igawk Program-Footnote-1724268 -Ref: Igawk Program-Footnote-2724469 -Node: Anagram Program724607 -Node: Signature Program727675 -Node: Advanced Features728775 -Node: Nondecimal Data730661 -Node: Array Sorting732244 -Node: Controlling Array Traversal732941 -Node: Array Sorting Functions741225 -Ref: Array Sorting Functions-Footnote-1745094 -Node: Two-way I/O745288 -Ref: Two-way I/O-Footnote-1750720 -Node: TCP/IP Networking750802 -Node: Profiling753646 -Node: Internationalization761149 -Node: I18N and L10N762574 -Node: Explaining gettext763260 -Ref: Explaining gettext-Footnote-1768328 -Ref: Explaining gettext-Footnote-2768512 -Node: Programmer i18n768677 -Node: Translator i18n772879 -Node: String Extraction773673 -Ref: String Extraction-Footnote-1774634 -Node: Printf Ordering774720 -Ref: Printf Ordering-Footnote-1777502 -Node: I18N Portability777566 -Ref: I18N Portability-Footnote-1780015 -Node: I18N Example780078 -Ref: I18N Example-Footnote-1782716 -Node: Gawk I18N782788 -Node: Debugger783409 -Node: Debugging784380 -Node: Debugging Concepts784813 -Node: Debugging Terms786669 -Node: Awk Debugging789266 -Node: Sample Debugging Session790158 -Node: Debugger Invocation790678 -Node: Finding The Bug792011 -Node: List of Debugger Commands798498 -Node: Breakpoint Control799832 -Node: Debugger Execution Control803496 -Node: Viewing And Changing Data806856 -Node: Execution Stack810212 -Node: Debugger Info811679 -Node: Miscellaneous Debugger Commands815661 -Node: Readline Support820837 -Node: Limitations821668 -Node: Arbitrary Precision Arithmetic823920 -Ref: Arbitrary Precision Arithmetic-Footnote-1825569 -Node: General Arithmetic825717 -Node: Floating Point Issues827437 -Node: String Conversion Precision828318 -Ref: String Conversion Precision-Footnote-1830023 -Node: Unexpected Results830132 -Node: POSIX Floating Point Problems832285 -Ref: POSIX Floating Point Problems-Footnote-1836110 -Node: Integer Programming836148 -Node: Floating-point Programming837887 -Ref: Floating-point Programming-Footnote-1844218 -Ref: Floating-point Programming-Footnote-2844488 -Node: Floating-point Representation844752 -Node: Floating-point Context845917 -Ref: table-ieee-formats846756 -Node: Rounding Mode848140 -Ref: table-rounding-modes848619 -Ref: Rounding Mode-Footnote-1851634 -Node: Gawk and MPFR851813 -Node: Arbitrary Precision Floats853224 -Ref: Arbitrary Precision Floats-Footnote-1855667 -Node: Setting Precision855983 -Ref: table-predefined-precision-strings856669 -Node: Setting Rounding Mode858814 -Ref: table-gawk-rounding-modes859218 -Node: Floating-point Constants860405 -Node: Changing Precision861834 -Ref: Changing Precision-Footnote-1863231 -Node: Exact Arithmetic863405 -Node: Arbitrary Precision Integers866543 -Ref: Arbitrary Precision Integers-Footnote-1869558 -Node: Dynamic Extensions869705 -Node: Extension Intro871163 -Node: Plugin License872428 -Node: Extension Mechanism Outline873113 -Ref: load-extension873530 -Ref: load-new-function875008 -Ref: call-new-function876003 -Node: Extension API Description878018 -Node: Extension API Functions Introduction879305 -Node: General Data Types884232 -Ref: General Data Types-Footnote-1889927 -Node: Requesting Values890226 -Ref: table-value-types-returned890963 -Node: Memory Allocation Functions891917 -Ref: Memory Allocation Functions-Footnote-1894663 -Node: Constructor Functions894759 -Node: Registration Functions896517 -Node: Extension Functions897202 -Node: Exit Callback Functions899504 -Node: Extension Version String900753 -Node: Input Parsers901403 -Node: Output Wrappers911160 -Node: Two-way processors915670 -Node: Printing Messages917878 -Ref: Printing Messages-Footnote-1918955 -Node: Updating `ERRNO'919107 -Node: Accessing Parameters919846 -Node: Symbol Table Access921076 -Node: Symbol table by name921590 -Node: Symbol table by cookie923566 -Ref: Symbol table by cookie-Footnote-1927698 -Node: Cached values927761 -Ref: Cached values-Footnote-1931251 -Node: Array Manipulation931342 -Ref: Array Manipulation-Footnote-1932440 -Node: Array Data Types932479 -Ref: Array Data Types-Footnote-1935182 -Node: Array Functions935274 -Node: Flattening Arrays939110 -Node: Creating Arrays945962 -Node: Extension API Variables950687 -Node: Extension Versioning951323 -Node: Extension API Informational Variables953224 -Node: Extension API Boilerplate954310 -Node: Finding Extensions958114 -Node: Extension Example958674 -Node: Internal File Description959404 -Node: Internal File Ops963495 -Ref: Internal File Ops-Footnote-1975004 -Node: Using Internal File Ops975144 -Ref: Using Internal File Ops-Footnote-1977497 -Node: Extension Samples977763 -Node: Extension Sample File Functions979287 -Node: Extension Sample Fnmatch987772 -Node: Extension Sample Fork989541 -Node: Extension Sample Inplace990754 -Node: Extension Sample Ord992532 -Node: Extension Sample Readdir993368 -Node: Extension Sample Revout994900 -Node: Extension Sample Rev2way995493 -Node: Extension Sample Read write array996183 -Node: Extension Sample Readfile998066 -Node: Extension Sample API Tests999166 -Node: Extension Sample Time999691 -Node: gawkextlib1001055 -Node: Language History1003836 -Node: V7/SVR3.11005429 -Node: SVR41007749 -Node: POSIX1009191 -Node: BTL1010577 -Node: POSIX/GNU1011311 -Node: Feature History1016910 -Node: Common Extensions1029886 -Node: Ranges and Locales1031198 -Ref: Ranges and Locales-Footnote-11035815 -Ref: Ranges and Locales-Footnote-21035842 -Ref: Ranges and Locales-Footnote-31036076 -Node: Contributors1036297 -Node: Installation1041678 -Node: Gawk Distribution1042572 -Node: Getting1043056 -Node: Extracting1043882 -Node: Distribution contents1045574 -Node: Unix Installation1051279 -Node: Quick Installation1051896 -Node: Additional Configuration Options1054342 -Node: Configuration Philosophy1056078 -Node: Non-Unix Installation1058432 -Node: PC Installation1058890 -Node: PC Binary Installation1060189 -Node: PC Compiling1062037 -Node: PC Testing1064981 -Node: PC Using1066157 -Node: Cygwin1070325 -Node: MSYS1071134 -Node: VMS Installation1071648 -Node: VMS Compilation1072412 -Ref: VMS Compilation-Footnote-11073664 -Node: VMS Dynamic Extensions1073722 -Node: VMS Installation Details1075095 -Node: VMS Running1077346 -Node: VMS GNV1080180 -Node: VMS Old Gawk1080903 -Node: Bugs1081373 -Node: Other Versions1085291 -Node: Notes1091375 -Node: Compatibility Mode1092175 -Node: Additions1092958 -Node: Accessing The Source1093885 -Node: Adding Code1095325 -Node: New Ports1101370 -Node: Derived Files1105505 -Ref: Derived Files-Footnote-11110826 -Ref: Derived Files-Footnote-21110860 -Ref: Derived Files-Footnote-31111460 -Node: Future Extensions1111558 -Node: Implementation Limitations1112141 -Node: Extension Design1113393 -Node: Old Extension Problems1114547 -Ref: Old Extension Problems-Footnote-11116055 -Node: Extension New Mechanism Goals1116112 -Ref: Extension New Mechanism Goals-Footnote-11119477 -Node: Extension Other Design Decisions1119663 -Node: Extension Future Growth1121769 -Node: Old Extension Mechanism1122605 -Node: Basic Concepts1124345 -Node: Basic High Level1125026 -Ref: figure-general-flow1125298 -Ref: figure-process-flow1125897 -Ref: Basic High Level-Footnote-11129126 -Node: Basic Data Typing1129311 -Node: Glossary1132666 -Node: Copying1157897 -Node: GNU Free Documentation License1195453 -Node: Index1220589 +Node: Foreword40825 +Node: Preface45170 +Ref: Preface-Footnote-148303 +Ref: Preface-Footnote-248410 +Node: History48642 +Node: Names51016 +Ref: Names-Footnote-152480 +Node: This Manual52553 +Ref: This Manual-Footnote-158327 +Node: Conventions58427 +Node: Manual History60583 +Ref: Manual History-Footnote-164013 +Ref: Manual History-Footnote-264054 +Node: How To Contribute64128 +Node: Acknowledgments65367 +Node: Getting Started69561 +Node: Running gawk71940 +Node: One-shot73130 +Node: Read Terminal74355 +Ref: Read Terminal-Footnote-176005 +Ref: Read Terminal-Footnote-276281 +Node: Long76452 +Node: Executable Scripts77828 +Ref: Executable Scripts-Footnote-179661 +Ref: Executable Scripts-Footnote-279763 +Node: Comments80310 +Node: Quoting82777 +Node: DOS Quoting87400 +Node: Sample Data Files88075 +Node: Very Simple90590 +Node: Two Rules95241 +Node: More Complex97139 +Ref: More Complex-Footnote-1100069 +Node: Statements/Lines100154 +Ref: Statements/Lines-Footnote-1104617 +Node: Other Features104882 +Node: When105810 +Node: Invoking Gawk107957 +Node: Command Line109420 +Node: Options110203 +Ref: Options-Footnote-1125581 +Node: Other Arguments125606 +Node: Naming Standard Input128264 +Node: Environment Variables129358 +Node: AWKPATH Variable129916 +Ref: AWKPATH Variable-Footnote-1132697 +Ref: AWKPATH Variable-Footnote-2132742 +Node: AWKLIBPATH Variable133002 +Node: Other Environment Variables133720 +Node: Exit Status136683 +Node: Include Files137358 +Node: Loading Shared Libraries140927 +Node: Obsolete142291 +Node: Undocumented142988 +Node: Regexp143230 +Node: Regexp Usage144619 +Node: Escape Sequences146644 +Node: Regexp Operators152313 +Ref: Regexp Operators-Footnote-1159693 +Ref: Regexp Operators-Footnote-2159840 +Node: Bracket Expressions159938 +Ref: table-char-classes161828 +Node: GNU Regexp Operators164351 +Node: Case-sensitivity168074 +Ref: Case-sensitivity-Footnote-1171042 +Ref: Case-sensitivity-Footnote-2171277 +Node: Leftmost Longest171385 +Node: Computed Regexps172586 +Node: Reading Files175923 +Node: Records177925 +Ref: Records-Footnote-1187448 +Node: Fields187485 +Ref: Fields-Footnote-1190441 +Node: Nonconstant Fields190527 +Node: Changing Fields192733 +Node: Field Separators198692 +Node: Default Field Splitting201394 +Node: Regexp Field Splitting202511 +Node: Single Character Fields205853 +Node: Command Line Field Separator206912 +Node: Full Line Fields210254 +Ref: Full Line Fields-Footnote-1210762 +Node: Field Splitting Summary210808 +Ref: Field Splitting Summary-Footnote-1213907 +Node: Constant Size214008 +Node: Splitting By Content218615 +Ref: Splitting By Content-Footnote-1222364 +Node: Multiple Line222404 +Ref: Multiple Line-Footnote-1228251 +Node: Getline228430 +Node: Plain Getline230646 +Node: Getline/Variable232741 +Node: Getline/File233888 +Node: Getline/Variable/File235229 +Ref: Getline/Variable/File-Footnote-1236828 +Node: Getline/Pipe236915 +Node: Getline/Variable/Pipe239614 +Node: Getline/Coprocess240721 +Node: Getline/Variable/Coprocess241973 +Node: Getline Notes242710 +Node: Getline Summary245497 +Ref: table-getline-variants245905 +Node: Read Timeout246817 +Ref: Read Timeout-Footnote-1250556 +Node: Command line directories250614 +Node: Printing251244 +Node: Print252875 +Node: Print Examples254212 +Node: Output Separators256996 +Node: OFMT259012 +Node: Printf260370 +Node: Basic Printf261276 +Node: Control Letters262815 +Node: Format Modifiers266627 +Node: Printf Examples272636 +Node: Redirection275348 +Node: Special Files282322 +Node: Special FD282855 +Ref: Special FD-Footnote-1286480 +Node: Special Network286554 +Node: Special Caveats287404 +Node: Close Files And Pipes288200 +Ref: Close Files And Pipes-Footnote-1295183 +Ref: Close Files And Pipes-Footnote-2295331 +Node: Expressions295481 +Node: Values296613 +Node: Constants297289 +Node: Scalar Constants297969 +Ref: Scalar Constants-Footnote-1298828 +Node: Nondecimal-numbers299010 +Node: Regexp Constants302010 +Node: Using Constant Regexps302485 +Node: Variables305540 +Node: Using Variables306195 +Node: Assignment Options307919 +Node: Conversion309794 +Ref: table-locale-affects315294 +Ref: Conversion-Footnote-1315918 +Node: All Operators316027 +Node: Arithmetic Ops316657 +Node: Concatenation319162 +Ref: Concatenation-Footnote-1321950 +Node: Assignment Ops322070 +Ref: table-assign-ops327058 +Node: Increment Ops328389 +Node: Truth Values and Conditions331823 +Node: Truth Values332906 +Node: Typing and Comparison333955 +Node: Variable Typing334748 +Ref: Variable Typing-Footnote-1338645 +Node: Comparison Operators338767 +Ref: table-relational-ops339177 +Node: POSIX String Comparison342725 +Ref: POSIX String Comparison-Footnote-1343681 +Node: Boolean Ops343819 +Ref: Boolean Ops-Footnote-1347889 +Node: Conditional Exp347980 +Node: Function Calls349712 +Node: Precedence353306 +Node: Locales356975 +Node: Patterns and Actions358064 +Node: Pattern Overview359118 +Node: Regexp Patterns360787 +Node: Expression Patterns361330 +Node: Ranges365111 +Node: BEGIN/END368215 +Node: Using BEGIN/END368977 +Ref: Using BEGIN/END-Footnote-1371713 +Node: I/O And BEGIN/END371819 +Node: BEGINFILE/ENDFILE374101 +Node: Empty377015 +Node: Using Shell Variables377332 +Node: Action Overview379617 +Node: Statements381974 +Node: If Statement383828 +Node: While Statement385327 +Node: Do Statement387371 +Node: For Statement388527 +Node: Switch Statement391679 +Node: Break Statement393833 +Node: Continue Statement395823 +Node: Next Statement397616 +Node: Nextfile Statement400006 +Node: Exit Statement402661 +Node: Built-in Variables405077 +Node: User-modified406172 +Ref: User-modified-Footnote-1414530 +Node: Auto-set414592 +Ref: Auto-set-Footnote-1427657 +Ref: Auto-set-Footnote-2427862 +Node: ARGC and ARGV427918 +Node: Arrays431772 +Node: Array Basics433277 +Node: Array Intro434103 +Node: Reference to Elements438420 +Node: Assigning Elements440690 +Node: Array Example441181 +Node: Scanning an Array442913 +Node: Controlling Scanning445227 +Ref: Controlling Scanning-Footnote-1450314 +Node: Delete450630 +Ref: Delete-Footnote-1453395 +Node: Numeric Array Subscripts453452 +Node: Uninitialized Subscripts455635 +Node: Multidimensional457262 +Node: Multiscanning460355 +Node: Arrays of Arrays461944 +Node: Functions466584 +Node: Built-in467403 +Node: Calling Built-in468481 +Node: Numeric Functions470469 +Ref: Numeric Functions-Footnote-1474301 +Ref: Numeric Functions-Footnote-2474658 +Ref: Numeric Functions-Footnote-3474706 +Node: String Functions474975 +Ref: String Functions-Footnote-1497933 +Ref: String Functions-Footnote-2498062 +Ref: String Functions-Footnote-3498310 +Node: Gory Details498397 +Ref: table-sub-escapes500076 +Ref: table-sub-posix-92501430 +Ref: table-sub-proposed502781 +Ref: table-posix-sub504135 +Ref: table-gensub-escapes505680 +Ref: Gory Details-Footnote-1506856 +Ref: Gory Details-Footnote-2506907 +Node: I/O Functions507058 +Ref: I/O Functions-Footnote-1514048 +Node: Time Functions514195 +Ref: Time Functions-Footnote-1525178 +Ref: Time Functions-Footnote-2525246 +Ref: Time Functions-Footnote-3525404 +Ref: Time Functions-Footnote-4525515 +Ref: Time Functions-Footnote-5525627 +Ref: Time Functions-Footnote-6525854 +Node: Bitwise Functions526120 +Ref: table-bitwise-ops526682 +Ref: Bitwise Functions-Footnote-1530903 +Node: Type Functions531087 +Node: I18N Functions532238 +Node: User-defined533865 +Node: Definition Syntax534669 +Ref: Definition Syntax-Footnote-1539583 +Node: Function Example539652 +Ref: Function Example-Footnote-1542301 +Node: Function Caveats542323 +Node: Calling A Function542841 +Node: Variable Scope543796 +Node: Pass By Value/Reference546759 +Node: Return Statement550267 +Node: Dynamic Typing553248 +Node: Indirect Calls554179 +Node: Library Functions563866 +Ref: Library Functions-Footnote-1567379 +Ref: Library Functions-Footnote-2567522 +Node: Library Names567693 +Ref: Library Names-Footnote-1571166 +Ref: Library Names-Footnote-2571386 +Node: General Functions571472 +Node: Strtonum Function572500 +Node: Assert Function575430 +Node: Round Function578756 +Node: Cliff Random Function580297 +Node: Ordinal Functions581313 +Ref: Ordinal Functions-Footnote-1584390 +Ref: Ordinal Functions-Footnote-2584642 +Node: Join Function584853 +Ref: Join Function-Footnote-1586624 +Node: Getlocaltime Function586824 +Node: Readfile Function590565 +Node: Data File Management592404 +Node: Filetrans Function593036 +Node: Rewind Function597105 +Node: File Checking598492 +Node: Empty Files599586 +Node: Ignoring Assigns601816 +Node: Getopt Function603370 +Ref: Getopt Function-Footnote-1614673 +Node: Passwd Functions614876 +Ref: Passwd Functions-Footnote-1623854 +Node: Group Functions623942 +Node: Walking Arrays632026 +Node: Sample Programs634162 +Node: Running Examples634836 +Node: Clones635564 +Node: Cut Program636788 +Node: Egrep Program646639 +Ref: Egrep Program-Footnote-1654412 +Node: Id Program654522 +Node: Split Program658171 +Ref: Split Program-Footnote-1661690 +Node: Tee Program661818 +Node: Uniq Program664621 +Node: Wc Program672050 +Ref: Wc Program-Footnote-1676316 +Ref: Wc Program-Footnote-2676516 +Node: Miscellaneous Programs676608 +Node: Dupword Program677796 +Node: Alarm Program679827 +Node: Translate Program684634 +Ref: Translate Program-Footnote-1689021 +Ref: Translate Program-Footnote-2689269 +Node: Labels Program689403 +Ref: Labels Program-Footnote-1692774 +Node: Word Sorting692858 +Node: History Sorting696742 +Node: Extract Program698581 +Ref: Extract Program-Footnote-1706084 +Node: Simple Sed706212 +Node: Igawk Program709274 +Ref: Igawk Program-Footnote-1724431 +Ref: Igawk Program-Footnote-2724632 +Node: Anagram Program724770 +Node: Signature Program727838 +Node: Advanced Features728938 +Node: Nondecimal Data730824 +Node: Array Sorting732407 +Node: Controlling Array Traversal733104 +Node: Array Sorting Functions741388 +Ref: Array Sorting Functions-Footnote-1745257 +Node: Two-way I/O745451 +Ref: Two-way I/O-Footnote-1750883 +Node: TCP/IP Networking750965 +Node: Profiling753809 +Node: Internationalization761312 +Node: I18N and L10N762737 +Node: Explaining gettext763423 +Ref: Explaining gettext-Footnote-1768491 +Ref: Explaining gettext-Footnote-2768675 +Node: Programmer i18n768840 +Node: Translator i18n773042 +Node: String Extraction773836 +Ref: String Extraction-Footnote-1774797 +Node: Printf Ordering774883 +Ref: Printf Ordering-Footnote-1777665 +Node: I18N Portability777729 +Ref: I18N Portability-Footnote-1780178 +Node: I18N Example780241 +Ref: I18N Example-Footnote-1782879 +Node: Gawk I18N782951 +Node: Debugger783572 +Node: Debugging784543 +Node: Debugging Concepts784976 +Node: Debugging Terms786832 +Node: Awk Debugging789429 +Node: Sample Debugging Session790321 +Node: Debugger Invocation790841 +Node: Finding The Bug792174 +Node: List of Debugger Commands798661 +Node: Breakpoint Control799995 +Node: Debugger Execution Control803659 +Node: Viewing And Changing Data807019 +Node: Execution Stack810375 +Node: Debugger Info811842 +Node: Miscellaneous Debugger Commands815824 +Node: Readline Support821000 +Node: Limitations821831 +Node: Arbitrary Precision Arithmetic824083 +Ref: Arbitrary Precision Arithmetic-Footnote-1825732 +Node: General Arithmetic825880 +Node: Floating Point Issues827600 +Node: String Conversion Precision828481 +Ref: String Conversion Precision-Footnote-1830186 +Node: Unexpected Results830295 +Node: POSIX Floating Point Problems832448 +Ref: POSIX Floating Point Problems-Footnote-1836273 +Node: Integer Programming836311 +Node: Floating-point Programming838050 +Ref: Floating-point Programming-Footnote-1844381 +Ref: Floating-point Programming-Footnote-2844651 +Node: Floating-point Representation844915 +Node: Floating-point Context846080 +Ref: table-ieee-formats846919 +Node: Rounding Mode848303 +Ref: table-rounding-modes848782 +Ref: Rounding Mode-Footnote-1851797 +Node: Gawk and MPFR851976 +Node: Arbitrary Precision Floats853385 +Ref: Arbitrary Precision Floats-Footnote-1855828 +Node: Setting Precision856144 +Ref: table-predefined-precision-strings856830 +Node: Setting Rounding Mode858975 +Ref: table-gawk-rounding-modes859379 +Node: Floating-point Constants860566 +Node: Changing Precision861995 +Ref: Changing Precision-Footnote-1863392 +Node: Exact Arithmetic863566 +Node: Arbitrary Precision Integers866704 +Ref: Arbitrary Precision Integers-Footnote-1869719 +Node: Dynamic Extensions869866 +Node: Extension Intro871324 +Node: Plugin License872589 +Node: Extension Mechanism Outline873274 +Ref: load-extension873691 +Ref: load-new-function875169 +Ref: call-new-function876164 +Node: Extension API Description878179 +Node: Extension API Functions Introduction879466 +Node: General Data Types884393 +Ref: General Data Types-Footnote-1890088 +Node: Requesting Values890387 +Ref: table-value-types-returned891124 +Node: Memory Allocation Functions892078 +Ref: Memory Allocation Functions-Footnote-1894824 +Node: Constructor Functions894920 +Node: Registration Functions896678 +Node: Extension Functions897363 +Node: Exit Callback Functions899665 +Node: Extension Version String900914 +Node: Input Parsers901564 +Node: Output Wrappers911321 +Node: Two-way processors915831 +Node: Printing Messages918039 +Ref: Printing Messages-Footnote-1919116 +Node: Updating `ERRNO'919268 +Node: Accessing Parameters920007 +Node: Symbol Table Access921237 +Node: Symbol table by name921751 +Node: Symbol table by cookie923727 +Ref: Symbol table by cookie-Footnote-1927859 +Node: Cached values927922 +Ref: Cached values-Footnote-1931412 +Node: Array Manipulation931503 +Ref: Array Manipulation-Footnote-1932601 +Node: Array Data Types932640 +Ref: Array Data Types-Footnote-1935343 +Node: Array Functions935435 +Node: Flattening Arrays939271 +Node: Creating Arrays946123 +Node: Extension API Variables950848 +Node: Extension Versioning951484 +Node: Extension API Informational Variables953385 +Node: Extension API Boilerplate954471 +Node: Finding Extensions958275 +Node: Extension Example958835 +Node: Internal File Description959565 +Node: Internal File Ops963656 +Ref: Internal File Ops-Footnote-1975165 +Node: Using Internal File Ops975305 +Ref: Using Internal File Ops-Footnote-1977658 +Node: Extension Samples977924 +Node: Extension Sample File Functions979448 +Node: Extension Sample Fnmatch987933 +Node: Extension Sample Fork989702 +Node: Extension Sample Inplace990915 +Node: Extension Sample Ord992693 +Node: Extension Sample Readdir993529 +Node: Extension Sample Revout995061 +Node: Extension Sample Rev2way995654 +Node: Extension Sample Read write array996344 +Node: Extension Sample Readfile998227 +Node: Extension Sample API Tests999327 +Node: Extension Sample Time999852 +Node: gawkextlib1001216 +Node: Language History1003997 +Node: V7/SVR3.11005590 +Node: SVR41007910 +Node: POSIX1009352 +Node: BTL1010738 +Node: POSIX/GNU1011472 +Node: Feature History1017071 +Node: Common Extensions1030047 +Node: Ranges and Locales1031359 +Ref: Ranges and Locales-Footnote-11035976 +Ref: Ranges and Locales-Footnote-21036003 +Ref: Ranges and Locales-Footnote-31036237 +Node: Contributors1036458 +Node: Installation1041839 +Node: Gawk Distribution1042733 +Node: Getting1043217 +Node: Extracting1044043 +Node: Distribution contents1045735 +Node: Unix Installation1051456 +Node: Quick Installation1052073 +Node: Additional Configuration Options1054519 +Node: Configuration Philosophy1056255 +Node: Non-Unix Installation1058609 +Node: PC Installation1059067 +Node: PC Binary Installation1060366 +Node: PC Compiling1062214 +Node: PC Testing1065158 +Node: PC Using1066334 +Node: Cygwin1070502 +Node: MSYS1071311 +Node: VMS Installation1071825 +Node: VMS Compilation1072621 +Ref: VMS Compilation-Footnote-11073873 +Node: VMS Dynamic Extensions1073931 +Node: VMS Installation Details1075304 +Node: VMS Running1077555 +Node: VMS GNV1080389 +Node: VMS Old Gawk1081112 +Node: Bugs1081582 +Node: Other Versions1085500 +Node: Notes1091584 +Node: Compatibility Mode1092384 +Node: Additions1093167 +Node: Accessing The Source1094094 +Node: Adding Code1095534 +Node: New Ports1101579 +Node: Derived Files1105714 +Ref: Derived Files-Footnote-11111035 +Ref: Derived Files-Footnote-21111069 +Ref: Derived Files-Footnote-31111669 +Node: Future Extensions1111767 +Node: Implementation Limitations1112350 +Node: Extension Design1113602 +Node: Old Extension Problems1114756 +Ref: Old Extension Problems-Footnote-11116264 +Node: Extension New Mechanism Goals1116321 +Ref: Extension New Mechanism Goals-Footnote-11119686 +Node: Extension Other Design Decisions1119872 +Node: Extension Future Growth1121978 +Node: Old Extension Mechanism1122814 +Node: Basic Concepts1124554 +Node: Basic High Level1125235 +Ref: figure-general-flow1125507 +Ref: figure-process-flow1126106 +Ref: Basic High Level-Footnote-11129335 +Node: Basic Data Typing1129520 +Node: Glossary1132875 +Node: Copying1158106 +Node: GNU Free Documentation License1195662 +Node: Index1220798  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index ad2e6558..ca74e8ba 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -303,15 +303,15 @@ ISBN 1-882114-28-0 @* @page @w{ } @sp 9 -@center @i{To Miriam, for making me complete.} +@center @i{To my parents, for their love, and for the wonderful +example they set for me.} @sp 1 -@center @i{To Chana, for the joy you bring us.} +@center @i{To my wife Miriam, for making me complete. +Thank you for building your life together with me.} @sp 1 -@center @i{To Rivka, for the exponential increase.} +@center @i{To our children Chana, Rivka, Nachum and Malka, +for enrichening our lives in innumerable ways.} @sp 1 -@center @i{To Nachum, for the added dimension.} -@sp 1 -@center @i{To Malka, for the new beginning.} @w{ } @page @w{ } @@ -321,13 +321,12 @@ ISBN 1-882114-28-0 @* @docbook - -To Miriam, for making me complete. -To Chana, for the joy you bring us. -To Rivka, for the exponential increase. -To Nachum, for the added dimension. -To Malka, for the new beginning. - +To my parents, for their love, and for the wonderful +example they set for me. +To my wife Miriam, for making me complete. +Thank you for building your life together with me. +To our children Chana, Rivka, Nachum and Malka, +for enrichening our lives in innumerable ways. @end docbook @@ -420,7 +419,7 @@ particular records in a file and perform operations upon them. * One-shot:: Running a short throwaway @command{awk} program. * Read Terminal:: Using no input files (input from - terminal instead). + the keyboard instead). * Long:: Putting permanent @command{awk} programs in files. * Executable Scripts:: Making self-contained @command{awk} @@ -1119,7 +1118,7 @@ The GNU implementation of @command{awk} is called @command{gawk}; if you invoke it with the proper options or environment variables (@pxref{Options}), it is fully compatible with -the POSIX@footnote{The 2008 POSIX standard is online at +the POSIX@footnote{The 2008 POSIX standard is accessable online at @url{http://www.opengroup.org/onlinepubs/9699919799/}.} specification of the @command{awk} language and with the Unix version of @command{awk} maintained @@ -1171,6 +1170,12 @@ Sort data @item Perform simple network communications + +@item +Profile and debug @command{awk} programs. + +@item +Extend the language with functions written in C or C++. @end itemize This @value{DOCUMENT} teaches you about the @command{awk} language and @@ -1186,12 +1191,18 @@ Implementations of the @command{awk} language are available for many different computing environments. This @value{DOCUMENT}, while describing the @command{awk} language in general, also describes the particular implementation of @command{awk} called @command{gawk} (which stands for -``GNU awk''). @command{gawk} runs on a broad range of Unix systems, +``GNU @command{awk}''). @command{gawk} runs on a broad range of Unix systems, ranging from Intel@registeredsymbol{}-architecture PC-based computers -up through large-scale systems, -such as Crays. @command{gawk} has also been ported to Mac OS X, -Microsoft Windows (all versions) and OS/2 PCs, -and VMS. +up through large-scale systems. +@command{gawk} has also been ported to Mac OS X, +Microsoft Windows +@ifset FOR_PRINT +(all versions) and OS/2 PCs, +@end ifset +@ifclear FOR_PRINT +(all versions), +@end ifclear +and OpenVMS. (Some other, obsolete systems to which @command{gawk} was once ported are no longer supported and the code for those systems has been removed.) @@ -1312,26 +1323,26 @@ The language described in this @value{DOCUMENT} is often referred to as ``new @command{awk}'' (@command{nawk}). @cindex @command{awk}, versions of -Because of this, there are systems with multiple -versions of @command{awk}. -Some systems have an @command{awk} utility that implements the -original version of the @command{awk} language and a @command{nawk} utility -for the new version. -Others have an @command{oawk} version for the ``old @command{awk}'' -language and plain @command{awk} for the new one. Still others only -have one version, which is usually the new one.@footnote{Often, these systems -use @command{gawk} for their @command{awk} implementation!} - @cindex @command{nawk} utility @cindex @command{oawk} utility -All in all, this makes it difficult for you to know which version of -@command{awk} you should run when writing your programs. The best advice -we can give here is to check your local documentation. Look for @command{awk}, -@command{oawk}, and @command{nawk}, as well as for @command{gawk}. -It is likely that you already -have some version of new @command{awk} on your system, which is what -you should use when running your programs. (Of course, if you're reading -this @value{DOCUMENT}, chances are good that you have @command{gawk}!) +For some time after new @command{awk} was introduced, there were +systems with multiple versions of @command{awk}. Some systems had +an @command{awk} utility that implemented the original version of the +@command{awk} language and a @command{nawk} utility for the new version. +Others had an @command{oawk} version for the ``old @command{awk}'' +language and plain @command{awk} for the new one. Still others only +had one version, which is usually the new one. + +Today, only Solaris systems still use an old @command{awk} for the +default @command{awk} utility. (A more modern @command{awk} lives in +@file{/usr/xpg6/bin} on these systems.) All other modern systems use +some version of new @command{awk}.@footnote{Many of these systems use +@command{gawk} for their @command{awk} implementation!} + +It is likely that you already have some version of new @command{awk} on +your system, which is what you should use when running your programs. +(Of course, if you're reading this @value{DOCUMENT}, chances are good +that you have @command{gawk}!) Throughout this @value{DOCUMENT}, whenever we refer to a language feature that should be available in any complete implementation of POSIX @command{awk}, @@ -1493,6 +1504,32 @@ non-POSIX systems. It also describes how to report bugs in @command{gawk} and where to get other freely available @command{awk} implementations. +@ifset FOR_PRINT +To save space, we have omitted some of the appendices from this +printed edition. You may find them online, as follows: + +@uref{http://www.gnu.org/software/gawk/manual/html_node/Notes.html} +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. + +@uref{http://www.gnu.org/software/gawk/manual/html_node/Basic-Concepts.html} +provides some very cursory background material for those who +are completely unfamiliar with computer programming. + +@uref{http://www.gnu.org/software/gawk/manual/html_node/Glossary.html, +The Glossary} +defines most, if not all, the significant terms used +throughout the book. If you find terms that you aren't familiar with, +try looking them up here. + +@uref{http://www.gnu.org/software/gawk/manual/html_node/Copying.html} and +@uref{http://www.gnu.org/software/gawk/manual/html_node/GNU-Free-Documentation-License.html} +present the licenses that cover the @command{gawk} source code +and this @value{DOCUMENT}, respectively. +@end ifset + +@ifclear FOR_PRINT @ref{Notes}, describes how to disable @command{gawk}'s extensions, as well as how to contribute new code to @command{gawk}, @@ -1510,6 +1547,7 @@ try looking them up here. @ref{GNU Free Documentation License}, present the licenses that cover the @command{gawk} source code and this @value{DOCUMENT}, respectively. +@end ifclear @node Conventions @unnumberedsec Typographical Conventions @@ -1585,9 +1623,8 @@ the picture of a flashlight in the margin, as shown here. @end ifnottex They also appear in the index under the heading ``dark corner.'' -As noted by the opening quote, though, any -coverage of dark corners -is, by definition, incomplete. +As noted by the opening quote, though, any coverage of dark corners is, +by definition, incomplete. Extensions to the standard @command{awk} language that are supported by more than one @command{awk} implementation are marked @@ -1727,6 +1764,11 @@ the FSF published several preliminary versions (numbered 0.@var{x}). 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 +SSC published two editions of the @value{DOCUMENT} under the +title @cite{Effective awk Programming}, and in O'Reilly published +the edition in 2001. +@end ifset This edition maintains the basic structure of the previous editions. For Edition 4.0, the content has been thoroughly reviewed @@ -1738,13 +1780,12 @@ For edition @value{EDITION}, the content has been reorganized into parts, and the major new additions are @ref{Arbitrary Precision Arithmetic}, and @ref{Dynamic Extensions}. -@cite{@value{TITLE}} will undoubtedly continue to evolve. -An electronic version -comes with the @command{gawk} distribution from the FSF. -If you find an error in this @value{DOCUMENT}, please report it! -@xref{Bugs}, for information on submitting -problem reports electronically. +This @value{DOCUMENT} will undoubtedly continue to evolve. An electronic +version comes with the @command{gawk} distribution from the FSF. If you +find an error in this @value{DOCUMENT}, please report it! @xref{Bugs}, +for information on submitting problem reports electronically. +@ifclear FOR_PRINT @node How To Contribute @unnumberedsec How to Contribute @@ -1761,7 +1802,7 @@ However, I found that I could not dedicate enough time to managing contributed code: the archive did not grow and the domain went unused for several years. -Fortunately, late in 2008, a volunteer took on the task of setting up +Late in 2008, a volunteer took on the task of setting up an @command{awk}-related web site---@uref{http://awk.info}---and did a very nice job. @@ -1770,11 +1811,15 @@ a @command{gawk} extension that you would like to share with the rest of the world, please see @uref{http://awk.info/?contribute} for how to contribute it to the web site. +As of this writing, this website is in search of a maintainer; please +contact me if you are interested. + @ignore Other links: http://www.reddit.com/r/linux/comments/dtect/composing_music_in_awk/ @end ignore +@end ifclear @node Acknowledgments @unnumberedsec Acknowledgments @@ -1936,7 +1981,7 @@ take advantage of those opportunities. Arnold Robbins @* Nof Ayalon @* ISRAEL @* -May, 2013 +May, 2014 @iftex @part Part I:@* The @command{awk} Language @@ -1944,11 +1989,11 @@ May, 2013 @ignore @ifdocbook -@part Part I:@* The @command{awk} Language - -Part I describes the @command{awk} language and @command{gawk} program in detail. -It starts with the basics, and continues through all of the features of @command{awk} -and @command{gawk}. It contains the following chapters: +Part I describes the @command{awk} language and @command{gawk} program +in detail. It starts with the basics, and continues through all of +the features of @command{awk}. Included also are many, but not all, +of the features of @command{gawk}. This part contains the +following chapters: @itemize @bullet @item @@ -2071,7 +2116,7 @@ variations of each. @menu * One-shot:: Running a short throwaway @command{awk} program. -* Read Terminal:: Using no input files (input from terminal +* Read Terminal:: Using no input files (input from the keyboard instead). * Long:: Putting permanent @command{awk} programs in files. @@ -2135,10 +2180,15 @@ awk '@var{program}' @noindent @command{awk} applies the @var{program} to the @dfn{standard input}, -which usually means whatever you type on the terminal. This continues +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.) +@end ifset +@ifclear FOR_PRINT (On other operating systems, the end-of-file character may be different. For example, on OS/2, it is @kbd{Ctrl-z}.) +@end ifclear @cindex files, input, See input files @cindex input files, running @command{awk} without @@ -3444,7 +3494,7 @@ names like @code{i}, @code{j}, etc.) @cindex @command{awk} debugging, enabling Enable debugging of @command{awk} programs (@pxref{Debugging}). -By default, the debugger reads commands interactively from the terminal. +By default, the debugger reads commands interactively from the keyboard. The optional @var{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 @option{-D} and @var{file}, if @@ -3751,7 +3801,7 @@ of having to be included into each individual program. function names must be unique.) With standard @command{awk}, library functions can still be used, even -if the program is entered at the terminal, +if the program is entered at the keyboard, by specifying @samp{-f /dev/tty}. After typing your program, type @kbd{Ctrl-d} (the end-of-file character) to terminate it. (You may also use @samp{-f -} to read program source from the standard @@ -7455,7 +7505,7 @@ then @command{gawk} sets @code{RT} to the null string. @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 terminal, sometimes +input stream---either the standard input (usually your keyboard, sometimes the output from another program) or from the files specified on the command line. The @command{awk} language has a special built-in command called @code{getline} that @@ -8017,7 +8067,7 @@ Note: for each variant, @command{gawk} sets the @code{RT} built-in variable. @section Reading Input With A Timeout @cindex timeout, reading input -You may specify a timeout in milliseconds for reading input from a terminal, +You may specify a timeout in milliseconds for reading input from the keyboard, 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: @@ -8040,8 +8090,8 @@ else if (ERRNO != "") print ERRNO @end example -Here is how to read interactively from the terminal@footnote{This assumes -that standard input is the keyboard} without waiting +Here is how to read interactively from the user@footnote{This assumes +that standard input is the keyboard.} without waiting for more than five seconds: @example @@ -8056,7 +8106,7 @@ and set the @code{ERRNO} variable to an appropriate string value. A negative or zero value for the timeout is the same as specifying no timeout at all. -A timeout can also be set for reading from the terminal in the implicit +A timeout can also be set for reading from the keyboard in the implicit loop that reads input records and matches them against patterns, like so: @@ -29251,7 +29301,7 @@ The easiest way to find out is to look at the output of the following command: @example -$ @kbd{./gawk --version} +$ @kbd{gawk --version} @print{} GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2) @print{} Copyright (C) 1989, 1991-2014 Free Software Foundation. @dots{} @@ -35540,7 +35590,7 @@ Files needed for building @command{gawk} under MS-Windows and OS/2 (@pxref{PC Installation}, for details). @item vms/* -Files needed for building @command{gawk} under VMS +Files needed for building @command{gawk} under Vax/VMS and OpenVMS (@pxref{VMS Installation}, for details). @item test/* @@ -36122,7 +36172,7 @@ been ported to MS-Windows that expect @command{gawk} to do automatic translation of @code{"\r\n"}, since it won't. Caveat Emptor! @node VMS Installation -@appendixsubsec How to Compile and Install @command{gawk} on VMS +@appendixsubsec How to Compile and Install @command{gawk} on Vax/VMS and OpenVMS @c based on material from Pat Rankin @c now rankin@pactechdata.com diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 80d4e743..040731ce 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -298,15 +298,15 @@ ISBN 1-882114-28-0 @* @page @w{ } @sp 9 -@center @i{To Miriam, for making me complete.} +@center @i{To my parents, for their love, and for the wonderful +example they set for me.} @sp 1 -@center @i{To Chana, for the joy you bring us.} +@center @i{To my wife Miriam, for making me complete. +Thank you for building your life together with me.} @sp 1 -@center @i{To Rivka, for the exponential increase.} +@center @i{To our children Chana, Rivka, Nachum and Malka, +for enrichening our lives in innumerable ways.} @sp 1 -@center @i{To Nachum, for the added dimension.} -@sp 1 -@center @i{To Malka, for the new beginning.} @w{ } @page @w{ } @@ -316,13 +316,12 @@ ISBN 1-882114-28-0 @* @docbook - -To Miriam, for making me complete. -To Chana, for the joy you bring us. -To Rivka, for the exponential increase. -To Nachum, for the added dimension. -To Malka, for the new beginning. - +To my parents, for their love, and for the wonderful +example they set for me. +To my wife Miriam, for making me complete. +Thank you for building your life together with me. +To our children Chana, Rivka, Nachum and Malka, +for enrichening our lives in innumerable ways. @end docbook @@ -415,7 +414,7 @@ particular records in a file and perform operations upon them. * One-shot:: Running a short throwaway @command{awk} program. * Read Terminal:: Using no input files (input from - terminal instead). + the keyboard instead). * Long:: Putting permanent @command{awk} programs in files. * Executable Scripts:: Making self-contained @command{awk} @@ -1114,7 +1113,7 @@ The GNU implementation of @command{awk} is called @command{gawk}; if you invoke it with the proper options or environment variables (@pxref{Options}), it is fully compatible with -the POSIX@footnote{The 2008 POSIX standard is online at +the POSIX@footnote{The 2008 POSIX standard is accessable online at @url{http://www.opengroup.org/onlinepubs/9699919799/}.} specification of the @command{awk} language and with the Unix version of @command{awk} maintained @@ -1166,6 +1165,12 @@ Sort data @item Perform simple network communications + +@item +Profile and debug @command{awk} programs. + +@item +Extend the language with functions written in C or C++. @end itemize This @value{DOCUMENT} teaches you about the @command{awk} language and @@ -1181,12 +1186,18 @@ Implementations of the @command{awk} language are available for many different computing environments. This @value{DOCUMENT}, while describing the @command{awk} language in general, also describes the particular implementation of @command{awk} called @command{gawk} (which stands for -``GNU awk''). @command{gawk} runs on a broad range of Unix systems, +``GNU @command{awk}''). @command{gawk} runs on a broad range of Unix systems, ranging from Intel@registeredsymbol{}-architecture PC-based computers -up through large-scale systems, -such as Crays. @command{gawk} has also been ported to Mac OS X, -Microsoft Windows (all versions) and OS/2 PCs, -and VMS. +up through large-scale systems. +@command{gawk} has also been ported to Mac OS X, +Microsoft Windows +@ifset FOR_PRINT +(all versions) and OS/2 PCs, +@end ifset +@ifclear FOR_PRINT +(all versions), +@end ifclear +and OpenVMS. (Some other, obsolete systems to which @command{gawk} was once ported are no longer supported and the code for those systems has been removed.) @@ -1279,26 +1290,26 @@ The language described in this @value{DOCUMENT} is often referred to as ``new @command{awk}'' (@command{nawk}). @cindex @command{awk}, versions of -Because of this, there are systems with multiple -versions of @command{awk}. -Some systems have an @command{awk} utility that implements the -original version of the @command{awk} language and a @command{nawk} utility -for the new version. -Others have an @command{oawk} version for the ``old @command{awk}'' -language and plain @command{awk} for the new one. Still others only -have one version, which is usually the new one.@footnote{Often, these systems -use @command{gawk} for their @command{awk} implementation!} - @cindex @command{nawk} utility @cindex @command{oawk} utility -All in all, this makes it difficult for you to know which version of -@command{awk} you should run when writing your programs. The best advice -we can give here is to check your local documentation. Look for @command{awk}, -@command{oawk}, and @command{nawk}, as well as for @command{gawk}. -It is likely that you already -have some version of new @command{awk} on your system, which is what -you should use when running your programs. (Of course, if you're reading -this @value{DOCUMENT}, chances are good that you have @command{gawk}!) +For some time after new @command{awk} was introduced, there were +systems with multiple versions of @command{awk}. Some systems had +an @command{awk} utility that implemented the original version of the +@command{awk} language and a @command{nawk} utility for the new version. +Others had an @command{oawk} version for the ``old @command{awk}'' +language and plain @command{awk} for the new one. Still others only +had one version, which is usually the new one. + +Today, only Solaris systems still use an old @command{awk} for the +default @command{awk} utility. (A more modern @command{awk} lives in +@file{/usr/xpg6/bin} on these systems.) All other modern systems use +some version of new @command{awk}.@footnote{Many of these systems use +@command{gawk} for their @command{awk} implementation!} + +It is likely that you already have some version of new @command{awk} on +your system, which is what you should use when running your programs. +(Of course, if you're reading this @value{DOCUMENT}, chances are good +that you have @command{gawk}!) Throughout this @value{DOCUMENT}, whenever we refer to a language feature that should be available in any complete implementation of POSIX @command{awk}, @@ -1460,6 +1471,32 @@ non-POSIX systems. It also describes how to report bugs in @command{gawk} and where to get other freely available @command{awk} implementations. +@ifset FOR_PRINT +To save space, we have omitted some of the appendices from this +printed edition. You may find them online, as follows: + +@uref{http://www.gnu.org/software/gawk/manual/html_node/Notes.html} +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. + +@uref{http://www.gnu.org/software/gawk/manual/html_node/Basic-Concepts.html} +provides some very cursory background material for those who +are completely unfamiliar with computer programming. + +@uref{http://www.gnu.org/software/gawk/manual/html_node/Glossary.html, +The Glossary} +defines most, if not all, the significant terms used +throughout the book. If you find terms that you aren't familiar with, +try looking them up here. + +@uref{http://www.gnu.org/software/gawk/manual/html_node/Copying.html} and +@uref{http://www.gnu.org/software/gawk/manual/html_node/GNU-Free-Documentation-License.html} +present the licenses that cover the @command{gawk} source code +and this @value{DOCUMENT}, respectively. +@end ifset + +@ifclear FOR_PRINT @ref{Notes}, describes how to disable @command{gawk}'s extensions, as well as how to contribute new code to @command{gawk}, @@ -1477,6 +1514,7 @@ try looking them up here. @ref{GNU Free Documentation License}, present the licenses that cover the @command{gawk} source code and this @value{DOCUMENT}, respectively. +@end ifclear @node Conventions @unnumberedsec Typographical Conventions @@ -1552,9 +1590,8 @@ the picture of a flashlight in the margin, as shown here. @end ifnottex They also appear in the index under the heading ``dark corner.'' -As noted by the opening quote, though, any -coverage of dark corners -is, by definition, incomplete. +As noted by the opening quote, though, any coverage of dark corners is, +by definition, incomplete. Extensions to the standard @command{awk} language that are supported by more than one @command{awk} implementation are marked @@ -1694,6 +1731,11 @@ the FSF published several preliminary versions (numbered 0.@var{x}). 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 +SSC published two editions of the @value{DOCUMENT} under the +title @cite{Effective awk Programming}, and in O'Reilly published +the edition in 2001. +@end ifset This edition maintains the basic structure of the previous editions. For Edition 4.0, the content has been thoroughly reviewed @@ -1705,13 +1747,12 @@ For edition @value{EDITION}, the content has been reorganized into parts, and the major new additions are @ref{Arbitrary Precision Arithmetic}, and @ref{Dynamic Extensions}. -@cite{@value{TITLE}} will undoubtedly continue to evolve. -An electronic version -comes with the @command{gawk} distribution from the FSF. -If you find an error in this @value{DOCUMENT}, please report it! -@xref{Bugs}, for information on submitting -problem reports electronically. +This @value{DOCUMENT} will undoubtedly continue to evolve. An electronic +version comes with the @command{gawk} distribution from the FSF. If you +find an error in this @value{DOCUMENT}, please report it! @xref{Bugs}, +for information on submitting problem reports electronically. +@ifclear FOR_PRINT @node How To Contribute @unnumberedsec How to Contribute @@ -1728,7 +1769,7 @@ However, I found that I could not dedicate enough time to managing contributed code: the archive did not grow and the domain went unused for several years. -Fortunately, late in 2008, a volunteer took on the task of setting up +Late in 2008, a volunteer took on the task of setting up an @command{awk}-related web site---@uref{http://awk.info}---and did a very nice job. @@ -1737,11 +1778,15 @@ a @command{gawk} extension that you would like to share with the rest of the world, please see @uref{http://awk.info/?contribute} for how to contribute it to the web site. +As of this writing, this website is in search of a maintainer; please +contact me if you are interested. + @ignore Other links: http://www.reddit.com/r/linux/comments/dtect/composing_music_in_awk/ @end ignore +@end ifclear @node Acknowledgments @unnumberedsec Acknowledgments @@ -1903,7 +1948,7 @@ take advantage of those opportunities. Arnold Robbins @* Nof Ayalon @* ISRAEL @* -May, 2013 +May, 2014 @iftex @part Part I:@* The @command{awk} Language @@ -1911,11 +1956,11 @@ May, 2013 @ignore @ifdocbook -@part Part I:@* The @command{awk} Language - -Part I describes the @command{awk} language and @command{gawk} program in detail. -It starts with the basics, and continues through all of the features of @command{awk} -and @command{gawk}. It contains the following chapters: +Part I describes the @command{awk} language and @command{gawk} program +in detail. It starts with the basics, and continues through all of +the features of @command{awk}. Included also are many, but not all, +of the features of @command{gawk}. This part contains the +following chapters: @itemize @bullet @item @@ -2038,7 +2083,7 @@ variations of each. @menu * One-shot:: Running a short throwaway @command{awk} program. -* Read Terminal:: Using no input files (input from terminal +* Read Terminal:: Using no input files (input from the keyboard instead). * Long:: Putting permanent @command{awk} programs in files. @@ -2102,10 +2147,15 @@ awk '@var{program}' @noindent @command{awk} applies the @var{program} to the @dfn{standard input}, -which usually means whatever you type on the terminal. This continues +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.) +@end ifset +@ifclear FOR_PRINT (On other operating systems, the end-of-file character may be different. For example, on OS/2, it is @kbd{Ctrl-z}.) +@end ifclear @cindex files, input, See input files @cindex input files, running @command{awk} without @@ -3372,7 +3422,7 @@ names like @code{i}, @code{j}, etc.) @cindex @command{awk} debugging, enabling Enable debugging of @command{awk} programs (@pxref{Debugging}). -By default, the debugger reads commands interactively from the terminal. +By default, the debugger reads commands interactively from the keyboard. The optional @var{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 @option{-D} and @var{file}, if @@ -3679,7 +3729,7 @@ of having to be included into each individual program. function names must be unique.) With standard @command{awk}, library functions can still be used, even -if the program is entered at the terminal, +if the program is entered at the keyboard, by specifying @samp{-f /dev/tty}. After typing your program, type @kbd{Ctrl-d} (the end-of-file character) to terminate it. (You may also use @samp{-f -} to read program source from the standard @@ -7073,7 +7123,7 @@ then @command{gawk} sets @code{RT} to the null string. @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 terminal, sometimes +input stream---either the standard input (usually your keyboard, sometimes the output from another program) or from the files specified on the command line. The @command{awk} language has a special built-in command called @code{getline} that @@ -7635,7 +7685,7 @@ Note: for each variant, @command{gawk} sets the @code{RT} built-in variable. @section Reading Input With A Timeout @cindex timeout, reading input -You may specify a timeout in milliseconds for reading input from a terminal, +You may specify a timeout in milliseconds for reading input from the keyboard, 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: @@ -7658,8 +7708,8 @@ else if (ERRNO != "") print ERRNO @end example -Here is how to read interactively from the terminal@footnote{This assumes -that standard input is the keyboard} without waiting +Here is how to read interactively from the user@footnote{This assumes +that standard input is the keyboard.} without waiting for more than five seconds: @example @@ -7674,7 +7724,7 @@ and set the @code{ERRNO} variable to an appropriate string value. A negative or zero value for the timeout is the same as specifying no timeout at all. -A timeout can also be set for reading from the terminal in the implicit +A timeout can also be set for reading from the keyboard in the implicit loop that reads input records and matches them against patterns, like so: @@ -28392,7 +28442,7 @@ The easiest way to find out is to look at the output of the following command: @example -$ @kbd{./gawk --version} +$ @kbd{gawk --version} @print{} GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2) @print{} Copyright (C) 1989, 1991-2014 Free Software Foundation. @dots{} @@ -34681,7 +34731,7 @@ Files needed for building @command{gawk} under MS-Windows and OS/2 (@pxref{PC Installation}, for details). @item vms/* -Files needed for building @command{gawk} under VMS +Files needed for building @command{gawk} under Vax/VMS and OpenVMS (@pxref{VMS Installation}, for details). @item test/* @@ -35263,7 +35313,7 @@ been ported to MS-Windows that expect @command{gawk} to do automatic translation of @code{"\r\n"}, since it won't. Caveat Emptor! @node VMS Installation -@appendixsubsec How to Compile and Install @command{gawk} on VMS +@appendixsubsec How to Compile and Install @command{gawk} on Vax/VMS and OpenVMS @c based on material from Pat Rankin @c now rankin@pactechdata.com -- cgit v1.2.3 From 602c8e6544e079246701737d61bb00d80d115456 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 25 Apr 2014 13:16:45 +0300 Subject: Start a TODO list in gawktexi.in. --- doc/gawk.texi | 4 ++++ doc/gawktexi.in | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/doc/gawk.texi b/doc/gawk.texi index ca74e8ba..353adb7c 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -40141,3 +40141,7 @@ But to use it you have to say } which sorta sucks. + +TODO: +----- +1. Empty string vs. null string. 30 occurrences vs. 77, respectively. diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 040731ce..8e966ccd 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -39282,3 +39282,7 @@ But to use it you have to say } which sorta sucks. + +TODO: +----- +1. Empty string vs. null string. 30 occurrences vs. 77, respectively. -- cgit v1.2.3 From 57e6adcaa52609962670f3eb41c893810dbb8868 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 25 Apr 2014 13:17:49 +0300 Subject: Merge dfa from grep. --- ChangeLog | 4 + dfa.c | 1425 +++++++++++++++++++++++++++++-------------------------------- dfa.h | 28 +- 3 files changed, 700 insertions(+), 757 deletions(-) diff --git a/ChangeLog b/ChangeLog index 608a6c78..61bec4e6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2014-04-25 Arnold D. Robbins + + * dfa.h, dfa.c: Merge with GNU grep; lots of forward motion. + 2014-04-24 Arnold D. Robbins Update xalloc.h for pending merge with dfa. diff --git a/dfa.c b/dfa.c index 378305df..d306d5c9 100644 --- a/dfa.c +++ b/dfa.c @@ -37,21 +37,11 @@ #if HAVE_SETLOCALE #include #endif -#ifdef HAVE_STDBOOL_H -#include -#else -#include "missing_d/gawkbool.h" -#endif /* HAVE_STDBOOL_H */ -/* Gawk doesn't use Gnulib, so don't assume that setlocale and - static_assert are present. */ +/* Gawk doesn't use Gnulib, so don't assume that setlocale is present. */ #ifndef LC_ALL # define setlocale(category, locale) NULL #endif -#ifndef static_assert -# define static_assert(cond, diagnostic) \ - extern int (*foo (void)) [!!sizeof (struct { int foo: (cond) ? 8 : -1; })] -#endif #define STREQ(a, b) (strcmp (a, b) == 0) @@ -85,10 +75,6 @@ #endif #endif /* GAWK */ -#if HAVE_LANGINFO_CODESET -# include -#endif - #include "xalloc.h" #include "dfa.h" @@ -338,7 +324,8 @@ typedef struct size_t hash; /* Hash of the positions of this state. */ position_set elems; /* Positions this state could match. */ unsigned char context; /* Context from previous state. */ - char backref; /* True if this state matches a \. */ + bool has_backref; /* True if this state matches a \. */ + bool has_mbcset; /* True if this state matches a MBCSET. */ unsigned short constraint; /* Constraint for this state to accept. */ token first_end; /* Token value of the first END in elems. */ position_set mbps; /* Positions which can match multibyte @@ -355,13 +342,16 @@ typedef ptrdiff_t state_num; struct mb_char_classes { ptrdiff_t cset; - int invert; + bool invert; wchar_t *chars; /* Normal characters. */ size_t nchars; wctype_t *ch_classes; /* Character classes. */ size_t nch_classes; - wchar_t *range_sts; /* Range characters (start of the range). */ - wchar_t *range_ends; /* Range characters (end of the range). */ + struct /* Range characters. */ + { + wchar_t beg; /* Range start. */ + wchar_t end; /* Range end. */ + } *ranges; size_t nranges; char **equivs; /* Equivalence classes. */ size_t nequivs; @@ -387,10 +377,11 @@ struct dfa size_t nleaves; /* Number of leaves on the parse tree. */ size_t nregexps; /* Count of parallel regexps being built with dfaparse. */ - unsigned int mb_cur_max; /* Cached value of MB_CUR_MAX. */ + bool multibyte; /* True iff MB_CUR_MAX > 1. */ token utf8_anychar_classes[5]; /* To lower ANYCHAR in UTF-8 locales. */ + mbstate_t mbs; /* Multibyte conversion state. */ - /* The following are used only if MB_CUR_MAX > 1. */ + /* The following are valid only if MB_CUR_MAX > 1. */ /* The value of multibyte_prop[i] is defined by following rule. if tokens[i] < NOTCHAR @@ -409,7 +400,6 @@ struct dfa multibyte_prop = 3 , 1 , 0 , 2 , 3 */ - size_t nmultibyte_prop; int *multibyte_prop; #if MBS_SUPPORT @@ -425,10 +415,13 @@ struct dfa size_t nmbcsets; size_t mbcsets_alloc; + /* Fields filled by the superset. */ + struct dfa *superset; /* Hint of the dfa. */ + /* Fields filled by the state builder. */ dfa_state *states; /* States of the dfa. */ state_num sindex; /* Index for adding new states. */ - state_num salloc; /* Number of states currently allocated. */ + size_t salloc; /* Number of states currently allocated. */ /* Fields filled by the parse tree->NFA conversion. */ position_set *follows; /* Array of follow sets, indexed by position @@ -438,7 +431,7 @@ struct dfa matching the given position in a string matching the regexp. Allocated to the maximum possible position index. */ - int searchflag; /* True if we are supposed to build a searching + bool searchflag; /* True if we are supposed to build a searching as opposed to an exact matcher. A searching matcher finds the first and shortest string matching a regexp anywhere in the buffer, @@ -448,16 +441,16 @@ struct dfa /* Fields filled by dfaexec. */ state_num tralloc; /* Number of transition tables that have - slots so far. */ + slots so far, not counting trans[-1]. */ int trcount; /* Number of transition tables that have actually been built. */ state_num **trans; /* Transition tables for states that can never accept. If the transitions for a state have not yet been computed, or the state could possibly accept, its entry in - this table is NULL. */ - state_num **realtrans; /* Trans always points to realtrans + 1; this - is so trans[-1] can contain NULL. */ + this table is NULL. This points to one + past the start of the allocated array, + and trans[-1] is always NULL. */ state_num **fails; /* Transition tables after failing to accept on a state that potentially could do so. */ int *success; /* Table of acceptance conditions used in @@ -472,6 +465,11 @@ struct dfa struct dfamust *musts; /* List of strings, at least one of which is known to appear in any r.e. matching the dfa. */ + position_set mb_follows; /* Follow set added by ANYCHAR and/or MBCSET + on demand. */ + int *mb_match_lens; /* Array of length reduced by ANYCHAR and/or + MBCSET. Null if mb_follows.elems has not + been allocated. */ }; /* Some macros for user access to dfa internals. */ @@ -487,41 +485,6 @@ struct dfa static void dfamust (struct dfa *dfa); static void regexp (void); -/* These two macros are identical to the ones in gnulib's xalloc.h, - except that they do not cast the result to "(t *)", and thus may - be used via type-free CALLOC and MALLOC macros. */ -#undef XNMALLOC -#undef XCALLOC - -/* Allocate memory for N elements of type T, with error checking. */ -/* extern t *XNMALLOC (size_t n, typename t); */ -# define XNMALLOC(n, t) \ - (sizeof (t) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (t))) - -/* Allocate memory for N elements of type T, with error checking, - and zero it. */ -/* extern t *XCALLOC (size_t n, typename t); */ -# define XCALLOC(n, t) \ - (sizeof (t) == 1 ? xzalloc (n) : xcalloc (n, sizeof (t))) - -#define CALLOC(p, n) do { (p) = XCALLOC (n, *(p)); } while (0) -#undef MALLOC /* Irix defines this */ -#define MALLOC(p, n) do { (p) = XNMALLOC (n, *(p)); } while (0) -#define REALLOC(p, n) do {(p) = xnrealloc (p, n, sizeof (*(p))); } while (0) - -/* Reallocate an array of type *P if N_ALLOC is <= N_REQUIRED. */ -#define REALLOC_IF_NECESSARY(p, n_alloc, n_required) \ - do \ - { \ - if ((n_alloc) <= (n_required)) \ - { \ - size_t new_n_alloc = (n_required) + !(p); \ - (p) = x2nrealloc (p, &new_n_alloc, sizeof (*(p))); \ - (n_alloc) = new_n_alloc; \ - } \ - } \ - while (false) - static void dfambcache (struct dfa *d) { @@ -546,33 +509,34 @@ dfambcache (struct dfa *d) } #if MBS_SUPPORT -/* Given the dfa D, store into *PWC the result of converting the - leading bytes of the multibyte buffer S of length N bytes, updating - the conversion state in *MBS. On conversion error, convert just a - single byte as-is. Return the number of bytes converted. +/* Store into *PWC the result of converting the leading bytes of the + multibyte buffer S of length N bytes, using the mbrtowc_cache in *D + and updating the conversion state in *D. On conversion error, + convert just a single byte as-is. Return the number of bytes + converted. - This differs from mbrtowc (PWC, S, N, MBS) as follows: + This differs from mbrtowc (PWC, S, N, &D->mbs) as follows: - * Extra arg D, containing an mbrtowc_cache for speed. + * The last arg is a dfa *D instead of merely a multibyte conversion + state D->mbs. D also contains an mbrtowc_cache for speed. * N must be at least 1. * S[N - 1] must be a sentinel byte. * Shift encodings are not supported. * The return value is always in the range 1..N. - * *MBS is always valid afterwards. + * D->mbs is always valid afterwards. * *PWC is always set to something. */ static size_t -mbs_to_wchar (struct dfa *d, wchar_t *pwc, char const *s, size_t n, - mbstate_t *mbs) +mbs_to_wchar (wchar_t *pwc, char const *s, size_t n, struct dfa *d) { unsigned char uc = s[0]; wint_t wc = d->mbrtowc_cache[uc]; if (wc == WEOF) { - size_t nbytes = mbrtowc (pwc, s, n, mbs); + size_t nbytes = mbrtowc (pwc, s, n, &d->mbs); if (0 < nbytes && nbytes < (size_t) -2) return nbytes; - memset (mbs, 0, sizeof *mbs); + memset (&d->mbs, 0, sizeof d->mbs); wc = uc; } @@ -700,36 +664,60 @@ notset (charclass s) s[i] = ~s[i]; } -static int +static bool equal (charclass const s1, charclass const s2) { return memcmp (s1, s2, sizeof (charclass)) == 0; } -/* A pointer to the current dfa is kept here during parsing. */ -static struct dfa *dfa; +/* Ensure that the array addressed by PTR holds at least NITEMS + + (PTR || !NITEMS) items. Either return PTR, or reallocate the array + and return its new address. Although PTR may be null, the returned + value is never null. + + The array holds *NALLOC items; *NALLOC must be zero if PTR is null, + and is updated on reallocation. ITEMSIZE is the size of one item. + Avoid O(N**2) behavior on arrays growing linearly. */ +static void * +maybe_realloc (void *ptr, size_t nitems, size_t *nalloc, size_t itemsize) +{ + if (nitems < *nalloc) + return ptr; + *nalloc = nitems; + return x2nrealloc (ptr, nalloc, itemsize); +} -/* Find the index of charclass s in dfa->charclasses, or allocate a - new charclass. */ +/* In DFA D, find the index of charclass S, or allocate a new one. */ static size_t -charclass_index (charclass const s) +dfa_charclass_index (struct dfa *d, charclass const s) { size_t i; - for (i = 0; i < dfa->cindex; ++i) - if (equal (s, dfa->charclasses[i])) + for (i = 0; i < d->cindex; ++i) + if (equal (s, d->charclasses[i])) return i; - REALLOC_IF_NECESSARY (dfa->charclasses, dfa->calloc, dfa->cindex + 1); - ++dfa->cindex; - copyset (s, dfa->charclasses[i]); + d->charclasses = maybe_realloc (d->charclasses, d->cindex, &d->calloc, + sizeof *d->charclasses); + ++d->cindex; + copyset (s, d->charclasses[i]); return i; } +/* A pointer to the current dfa is kept here during parsing. */ +static struct dfa *dfa; + +/* Find the index of charclass S in the current DFA, or allocate a new one. */ +static size_t +charclass_index (charclass const s) +{ + return dfa_charclass_index (dfa, s); +} + /* Syntax bits controlling the behavior of the lexical analyzer. */ static reg_syntax_t syntax_bits, syntax_bits_set; /* Flag for case-folding letters into sets. */ -static int case_fold; +static bool case_fold; /* End-of-line byte in data. */ static unsigned char eolbyte; @@ -759,7 +747,7 @@ static charclass newline; static int char_context (unsigned char c) { - if (c == eolbyte || c == 0) + if (c == eolbyte) return CTX_NEWLINE; if (IS_WORD_CONSTITUENT (c)) return CTX_LETTER; @@ -784,7 +772,7 @@ dfasyntax (reg_syntax_t bits, int fold, unsigned char eol) syntax_bits_set = 1; syntax_bits = bits; - case_fold = fold; + case_fold = fold != 0; eolbyte = eol; for (i = 0; i < NOTCHAR; ++i) @@ -843,19 +831,16 @@ int using_utf8 (void) { static int utf8 = -1; - if (utf8 == -1) + if (utf8 < 0) { -#if defined HAVE_LANGINFO_CODESET && MBS_SUPPORT - utf8 = (STREQ (nl_langinfo (CODESET), "UTF-8")); -#else - utf8 = 0; -#endif + wchar_t wc; + mbstate_t mbs = { 0 }; + utf8 = mbrtowc (&wc, "\xc4\x80", 2, &mbs) == 2 && wc == 0x100; #ifdef LIBC_IS_BORKED if (gawk_mb_cur_max == 1) utf8 = 0; #endif } - return utf8; } @@ -907,7 +892,7 @@ using_simple_locale (void) static char const *lexptr; /* Pointer to next input character. */ static size_t lexleft; /* Number of characters remaining. */ static token lasttok; /* Previous token returned; initially END. */ -static int laststart; /* True if we're separated from beginning or (, +static bool laststart; /* True if we're separated from beginning or (, | only by zero-width characters. */ static size_t parens; /* Count of outstanding left parens. */ static int minrep, maxrep; /* Repeat counts for {m,n}. */ @@ -915,27 +900,8 @@ static int minrep, maxrep; /* Repeat counts for {m,n}. */ static int cur_mb_len = 1; /* Length of the multibyte representation of wctok. */ /* These variables are used only if (MB_CUR_MAX > 1). */ -static mbstate_t mbs; /* mbstate for mbrtowc. */ static wchar_t wctok; /* Wide character representation of the current multibyte character. */ -static unsigned char *mblen_buf;/* Correspond to the input buffer in dfaexec. - Each element stores the number of remaining - bytes of the corresponding multibyte - character in the input string. A element's - value is 0 if the corresponding character is - single-byte. - e.g., input : 'a', , , - mblen_buf : 0, 3, 2, 1 - */ -static wchar_t *inputwcs; /* Wide character representation of the input - string in dfaexec. - The length of this array is the same as - the length of input string (char array). - inputstring[i] is a single-byte char, - or the first byte of a multibyte char; - inputwcs[i] is the codepoint. */ -static unsigned char const *buf_begin; /* reference to begin in dfaexec. */ -static unsigned char const *buf_end; /* reference to end in dfaexec. */ #if MBS_SUPPORT @@ -952,7 +918,7 @@ static unsigned char const *buf_end; /* reference to end in dfaexec. */ else \ { \ wchar_t _wc; \ - size_t nbytes = mbs_to_wchar (dfa, &_wc, lexptr, lexleft, &mbs); \ + size_t nbytes = mbs_to_wchar (&_wc, lexptr, lexleft, dfa); \ cur_mb_len = nbytes; \ (wc) = _wc; \ (c) = nbytes == 1 ? to_uchar (*lexptr) : EOF; \ @@ -999,14 +965,17 @@ static short const lonesome_lower[] = 0x03F5, 0x1E9B, 0x1FBE, }; -static_assert ((sizeof lonesome_lower / sizeof *lonesome_lower + 2 - == CASE_FOLDED_BUFSIZE), - "CASE_FOLDED_BUFSIZE is wrong"); +/* Maximum number of characters that can be the case-folded + counterparts of a single character, not counting the character + itself. This is 1 for towupper, 1 for towlower, and 1 for each + entry in LONESOME_LOWER. */ +enum +{ CASE_FOLDED_BUFSIZE = 2 + sizeof lonesome_lower / sizeof *lonesome_lower }; /* Find the characters equal to C after case-folding, other than C itself, and store them into FOLDED. Return the number of characters stored. */ -int +static int case_folded_counterparts (wchar_t c, wchar_t folded[CASE_FOLDED_BUFSIZE]) { int i; @@ -1071,7 +1040,7 @@ find_pred (const char *str) static token parse_bracket_exp (void) { - int invert; + bool invert; int c, c1, c2; charclass ccl; @@ -1092,16 +1061,14 @@ parse_bracket_exp (void) /* Work area to build a mb_char_classes. */ struct mb_char_classes *work_mbc; - size_t chars_al, range_sts_al, range_ends_al, ch_classes_al, - equivs_al, coll_elems_al; + size_t chars_al, ranges_al, ch_classes_al, equivs_al, coll_elems_al; - chars_al = 0; - range_sts_al = range_ends_al = 0; - ch_classes_al = equivs_al = coll_elems_al = 0; - if (MB_CUR_MAX > 1) + chars_al = ranges_al = ch_classes_al = equivs_al = coll_elems_al = 0; + if (dfa->multibyte) { - REALLOC_IF_NECESSARY (dfa->mbcsets, dfa->mbcsets_alloc, - dfa->nmbcsets + 1); + dfa->mbcsets = maybe_realloc (dfa->mbcsets, dfa->nmbcsets, + &dfa->mbcsets_alloc, + sizeof *dfa->mbcsets); /* dfa->multibyte_prop[] hold the index of dfa->mbcsets. We will update dfa->multibyte_prop[] in addtok, because we can't @@ -1119,11 +1086,11 @@ parse_bracket_exp (void) if (c == '^') { FETCH_WC (c, wc, _("unbalanced [")); - invert = 1; + invert = true; known_bracket_exp = using_simple_locale (); } else - invert = 0; + invert = false; colon_warning_state = (c == ':'); do @@ -1173,14 +1140,15 @@ parse_bracket_exp (void) if (!pred) dfaerror (_("invalid character class")); - if (MB_CUR_MAX > 1 && !pred->single_byte_only) + if (dfa->multibyte && !pred->single_byte_only) { /* Store the character class as wctype_t. */ wctype_t wt = (wctype_t) wctype (class); - REALLOC_IF_NECESSARY (work_mbc->ch_classes, - ch_classes_al, - work_mbc->nch_classes + 1); + work_mbc->ch_classes + = maybe_realloc (work_mbc->ch_classes, + work_mbc->nch_classes, &ch_classes_al, + sizeof *work_mbc->ch_classes); work_mbc->ch_classes[work_mbc->nch_classes++] = wt; } @@ -1227,29 +1195,25 @@ parse_bracket_exp (void) if (c2 == '\\' && (syntax_bits & RE_BACKSLASH_ESCAPE_IN_LISTS)) FETCH_WC (c2, wc2, _("unbalanced [")); - if (MB_CUR_MAX > 1) + if (dfa->multibyte) { /* When case folding map a range, say [m-z] (or even [M-z]) to the pair of ranges, [m-z] [M-Z]. Although this code is wrong in multiple ways, it's never used in practice. FIXME: Remove this (and related) unused code. */ - REALLOC_IF_NECESSARY (work_mbc->range_sts, - range_sts_al, work_mbc->nranges + 1); - REALLOC_IF_NECESSARY (work_mbc->range_ends, - range_ends_al, work_mbc->nranges + 1); - work_mbc->range_sts[work_mbc->nranges] = - case_fold ? towlower (wc) : (wchar_t) wc; - work_mbc->range_ends[work_mbc->nranges++] = - case_fold ? towlower (wc2) : (wchar_t) wc2; + work_mbc->ranges + = maybe_realloc (work_mbc->ranges, work_mbc->nranges + 2, + &ranges_al, sizeof *work_mbc->ranges); + work_mbc->ranges[work_mbc->nranges].beg + = case_fold ? towlower (wc) : wc; + work_mbc->ranges[work_mbc->nranges++].end + = case_fold ? towlower (wc2) : wc2; if (case_fold && (iswalpha (wc) || iswalpha (wc2))) { - REALLOC_IF_NECESSARY (work_mbc->range_sts, - range_sts_al, work_mbc->nranges + 1); - work_mbc->range_sts[work_mbc->nranges] = towupper (wc); - REALLOC_IF_NECESSARY (work_mbc->range_ends, - range_ends_al, work_mbc->nranges + 1); - work_mbc->range_ends[work_mbc->nranges++] = towupper (wc2); + work_mbc->ranges[work_mbc->nranges].beg = towupper (wc); + work_mbc->ranges[work_mbc->nranges++].end + = towupper (wc2); } } else if (using_simple_locale ()) @@ -1284,7 +1248,7 @@ parse_bracket_exp (void) colon_warning_state |= (c == ':') ? 2 : 4; - if (MB_CUR_MAX == 1) + if (!dfa->multibyte) { if (case_fold) setbit_case_fold_c (c, ccl); @@ -1297,16 +1261,17 @@ parse_bracket_exp (void) { wchar_t folded[CASE_FOLDED_BUFSIZE]; int i, n = case_folded_counterparts (wc, folded); - REALLOC_IF_NECESSARY (work_mbc->chars, chars_al, - work_mbc->nchars + n); + work_mbc->chars = maybe_realloc (work_mbc->chars, + work_mbc->nchars + n, &chars_al, + sizeof *work_mbc->chars); for (i = 0; i < n; i++) if (!setbit_wc (folded[i], ccl)) work_mbc->chars[work_mbc->nchars++] = folded[i]; } if (!setbit_wc (wc, ccl)) { - REALLOC_IF_NECESSARY (work_mbc->chars, chars_al, - work_mbc->nchars + 1); + work_mbc->chars = maybe_realloc (work_mbc->chars, work_mbc->nchars, + &chars_al, sizeof *work_mbc->chars); work_mbc->chars[work_mbc->nchars++] = wc; } } @@ -1318,7 +1283,7 @@ parse_bracket_exp (void) if (! known_bracket_exp) return BACKREF; - if (MB_CUR_MAX > 1) + if (dfa->multibyte) { static charclass zeroclass; work_mbc->invert = invert; @@ -1328,7 +1293,7 @@ parse_bracket_exp (void) if (invert) { - assert (MB_CUR_MAX == 1); + assert (!dfa->multibyte); notset (ccl); if (syntax_bits & RE_HAT_LISTS_NOT_NEWLINE) clrbit (eolbyte, ccl); @@ -1341,7 +1306,7 @@ static token lex (void) { unsigned int c, c2; - int backslash = 0; + bool backslash = false; charclass ccl; int i; @@ -1364,7 +1329,7 @@ lex (void) goto normal_char; if (lexleft == 0) dfaerror (_("unfinished \\ escape")); - backslash = 1; + backslash = true; break; case '^': @@ -1402,7 +1367,7 @@ lex (void) case '9': if (backslash && !(syntax_bits & RE_NO_BK_REFS)) { - laststart = 0; + laststart = false; return lasttok = BACKREF; } goto normal_char; @@ -1517,7 +1482,7 @@ lex (void) lexptr = p; lexleft = lim - p; } - laststart = 0; + laststart = false; return lasttok = REPMN; case '|': @@ -1525,21 +1490,21 @@ lex (void) goto normal_char; if (backslash != ((syntax_bits & RE_NO_BK_VBAR) == 0)) goto normal_char; - laststart = 1; + laststart = true; return lasttok = OR; case '\n': if (syntax_bits & RE_LIMITED_OPS || backslash || !(syntax_bits & RE_NEWLINE_ALT)) goto normal_char; - laststart = 1; + laststart = true; return lasttok = OR; case '(': if (backslash != ((syntax_bits & RE_NO_BK_PARENS) == 0)) goto normal_char; ++parens; - laststart = 1; + laststart = true; return lasttok = LPAREN; case ')': @@ -1548,17 +1513,17 @@ lex (void) if (parens == 0 && syntax_bits & RE_UNMATCHED_RIGHT_PAREN_ORD) goto normal_char; --parens; - laststart = 0; + laststart = false; return lasttok = RPAREN; case '.': if (backslash) goto normal_char; - if (MB_CUR_MAX > 1) + if (dfa->multibyte) { /* In multibyte environment period must match with a single character not a byte. So we use ANYCHAR. */ - laststart = 0; + laststart = false; return lasttok = ANYCHAR; } zeroset (ccl); @@ -1567,14 +1532,14 @@ lex (void) clrbit (eolbyte, ccl); if (syntax_bits & RE_DOT_NOT_NULL) clrbit ('\0', ccl); - laststart = 0; + laststart = false; return lasttok = CSET + charclass_index (ccl); case 's': case 'S': if (!backslash || (syntax_bits & RE_NO_GNU_OPS)) goto normal_char; - if (MB_CUR_MAX == 1) + if (!dfa->multibyte) { zeroset (ccl); for (c2 = 0; c2 < NOTCHAR; ++c2) @@ -1582,7 +1547,7 @@ lex (void) setbit (c2, ccl); if (c == 'S') notset (ccl); - laststart = 0; + laststart = false; return lasttok = CSET + charclass_index (ccl); } @@ -1612,7 +1577,7 @@ lex (void) POP_LEX_STATE (); - laststart = 0; + laststart = false; return lasttok; case 'w': @@ -1625,21 +1590,21 @@ lex (void) setbit (c2, ccl); if (c == 'W') notset (ccl); - laststart = 0; + laststart = false; return lasttok = CSET + charclass_index (ccl); case '[': if (backslash) goto normal_char; - laststart = 0; + laststart = false; return lasttok = parse_bracket_exp (); default: normal_char: - laststart = 0; + laststart = false; /* For multibyte character sets, folding is done in atom. Always return WCHAR. */ - if (MB_CUR_MAX > 1) + if (dfa->multibyte) return lasttok = WCHAR; if (case_fold && isalpha (c)) @@ -1671,14 +1636,16 @@ static size_t depth; /* Current depth of a hypothetical stack static void addtok_mb (token t, int mbprop) { - if (MB_CUR_MAX > 1) + if (dfa->talloc == dfa->tindex) { - REALLOC_IF_NECESSARY (dfa->multibyte_prop, dfa->nmultibyte_prop, - dfa->tindex + 1); - dfa->multibyte_prop[dfa->tindex] = mbprop; + dfa->tokens = x2nrealloc (dfa->tokens, &dfa->talloc, + sizeof *dfa->tokens); + if (dfa->multibyte) + dfa->multibyte_prop = xnrealloc (dfa->multibyte_prop, dfa->talloc, + sizeof *dfa->multibyte_prop); } - - REALLOC_IF_NECESSARY (dfa->tokens, dfa->talloc, dfa->tindex + 1); + if (dfa->multibyte) + dfa->multibyte_prop[dfa->tindex] = mbprop; dfa->tokens[dfa->tindex++] = t; switch (t) @@ -1710,7 +1677,7 @@ static void addtok_wc (wint_t wc); static void addtok (token t) { - if (MB_CUR_MAX > 1 && t == MBCSET) + if (dfa->multibyte && t == MBCSET) { bool need_or = false; struct mb_char_classes *work_mbc = &dfa->mbcsets[dfa->nmbcsets - 1]; @@ -1967,7 +1934,7 @@ copytoks (size_t tindex, size_t ntokens) { size_t i; - if (MB_CUR_MAX > 1) + if (dfa->multibyte) for (i = 0; i < ntokens; ++i) addtok_mb (dfa->tokens[tindex + i], dfa->multibyte_prop[tindex + i]); else @@ -2050,12 +2017,12 @@ dfaparse (char const *s, size_t len, struct dfa *d) lexptr = s; lexleft = len; lasttok = END; - laststart = 1; + laststart = true; parens = 0; - if (MB_CUR_MAX > 1) + if (dfa->multibyte) { cur_mb_len = 0; - memset (&mbs, 0, sizeof mbs); + memset (&d->mbs, 0, sizeof d->mbs); } if (!syntax_bits_set) @@ -2080,19 +2047,24 @@ dfaparse (char const *s, size_t len, struct dfa *d) /* Some primitives for operating on sets of positions. */ -/* Copy one set to another; the destination must be large enough. */ +/* Copy one set to another. */ static void copy (position_set const *src, position_set * dst) { - REALLOC_IF_NECESSARY (dst->elems, dst->alloc, src->nelem); - memcpy (dst->elems, src->elems, sizeof (dst->elems[0]) * src->nelem); + if (dst->alloc < src->nelem) + { + free (dst->elems); + dst->alloc = src->nelem; + dst->elems = x2nrealloc (NULL, &dst->alloc, sizeof *dst->elems); + } + memcpy (dst->elems, src->elems, src->nelem * sizeof *dst->elems); dst->nelem = src->nelem; } static void alloc_position_set (position_set * s, size_t size) { - MALLOC (s->elems, size); + s->elems = xnmalloc (size, sizeof *s->elems); s->alloc = size; s->nelem = 0; } @@ -2122,7 +2094,7 @@ insert (position p, position_set * s) return; } - REALLOC_IF_NECESSARY (s->elems, s->alloc, count + 1); + s->elems = maybe_realloc (s->elems, count, &s->alloc, sizeof *s->elems); for (i = count; i > lo; i--) s->elems[i] = s->elems[i - 1]; s->elems[lo] = p; @@ -2136,7 +2108,12 @@ merge (position_set const *s1, position_set const *s2, position_set * m) { size_t i = 0, j = 0; - REALLOC_IF_NECESSARY (m->elems, m->alloc, s1->nelem + s2->nelem); + if (m->alloc < s1->nelem + s2->nelem) + { + free (m->elems); + m->elems = maybe_realloc (NULL, s1->nelem + s2->nelem, &m->alloc, + sizeof *m->elems); + } m->nelem = 0; while (i < s1->nelem && j < s2->nelem) if (s1->elems[i].index > s2->elems[j].index) @@ -2197,19 +2174,19 @@ state_index (struct dfa *d, position_set const *s, int context) } /* We'll have to create a new state. */ - REALLOC_IF_NECESSARY (d->states, d->salloc, d->sindex + 1); + d->states = maybe_realloc (d->states, d->sindex, &d->salloc, + sizeof *d->states); d->states[i].hash = hash; alloc_position_set (&d->states[i].elems, s->nelem); copy (s, &d->states[i].elems); d->states[i].context = context; - d->states[i].backref = 0; + d->states[i].has_backref = false; + d->states[i].has_mbcset = false; d->states[i].constraint = 0; d->states[i].first_end = 0; - if (MBS_SUPPORT) - { - d->states[i].mbps.nelem = 0; - d->states[i].mbps.elems = NULL; - } + d->states[i].mbps.nelem = 0; + d->states[i].mbps.elems = NULL; + for (j = 0; j < s->nelem; ++j) if (d->tokens[s->elems[j].index] < 0) { @@ -2222,7 +2199,7 @@ state_index (struct dfa *d, position_set const *s, int context) else if (d->tokens[s->elems[j].index] == BACKREF) { d->states[i].constraint = NO_CONSTRAINT; - d->states[i].backref = 1; + d->states[i].has_backref = true; } ++d->sindex; @@ -2239,10 +2216,10 @@ static void epsclosure (position_set * s, struct dfa const *d) { size_t i, j; - char *visited; /* Array of booleans, enough to use char, not int. */ position p, old; - CALLOC (visited, d->tindex); + /* Array of booleans, large enough to use char, not int. */ + char *visited = xzalloc (d->tindex); for (i = 0; i < s->nelem; ++i) if (d->tokens[s->elems[i].index] >= NOTCHAR @@ -2399,17 +2376,26 @@ state_separate_contexts (position_set const *s) void dfaanalyze (struct dfa *d, int searchflag) { - int *nullable; /* Nullable stack. */ - size_t *nfirstpos; /* Element count stack for firstpos sets. */ - position *firstpos; /* Array where firstpos elements are stored. */ - size_t *nlastpos; /* Element count stack for lastpos sets. */ - position *lastpos; /* Array where lastpos elements are stored. */ + /* Array allocated to hold position sets. */ + position *posalloc = xnmalloc (d->nleaves, 2 * sizeof *posalloc); + /* Firstpos and lastpos elements. */ + position *firstpos = posalloc + d->nleaves; + position *lastpos = firstpos + d->nleaves; + + /* Stack for element counts and nullable flags. */ + struct + { + /* Whether the entry is nullable. */ + bool nullable; + + /* Counts of firstpos and lastpos sets. */ + size_t nfirstpos; + size_t nlastpos; + } *stkalloc = xnmalloc (d->depth, sizeof *stkalloc), *stk = stkalloc; + position_set tmp; /* Temporary set for merging sets. */ position_set merged; /* Result of merging sets. */ int separate_contexts; /* Context wanted by some position. */ - int *o_nullable; - size_t *o_nfirst, *o_nlast; - position *o_firstpos, *o_lastpos; size_t i, j; position *pos; @@ -2423,21 +2409,9 @@ dfaanalyze (struct dfa *d, int searchflag) putc ('\n', stderr); #endif - d->searchflag = searchflag; - - MALLOC (nullable, d->depth); - o_nullable = nullable; - MALLOC (nfirstpos, d->depth); - o_nfirst = nfirstpos; - MALLOC (firstpos, d->nleaves); - o_firstpos = firstpos, firstpos += d->nleaves; - MALLOC (nlastpos, d->depth); - o_nlast = nlastpos; - MALLOC (lastpos, d->nleaves); - o_lastpos = lastpos, lastpos += d->nleaves; + d->searchflag = searchflag != 0; alloc_position_set (&merged, d->nleaves); - - CALLOC (d->follows, d->tindex); + d->follows = xcalloc (d->tindex, sizeof *d->follows); for (i = 0; i < d->tindex; ++i) { @@ -2445,20 +2419,21 @@ dfaanalyze (struct dfa *d, int searchflag) { case EMPTY: /* The empty set is nullable. */ - *nullable++ = 1; + stk->nullable = true; /* The firstpos and lastpos of the empty leaf are both empty. */ - *nfirstpos++ = *nlastpos++ = 0; + stk->nfirstpos = stk->nlastpos = 0; + stk++; break; case STAR: case PLUS: /* Every element in the firstpos of the argument is in the follow of every element in the lastpos. */ - tmp.nelem = nfirstpos[-1]; + tmp.nelem = stk[-1].nfirstpos; tmp.elems = firstpos; pos = lastpos; - for (j = 0; j < nlastpos[-1]; ++j) + for (j = 0; j < stk[-1].nlastpos; ++j) { merge (&tmp, &d->follows[pos[j].index], &merged); copy (&merged, &d->follows[pos[j].index]); @@ -2467,16 +2442,16 @@ dfaanalyze (struct dfa *d, int searchflag) case QMARK: /* A QMARK or STAR node is automatically nullable. */ if (d->tokens[i] != PLUS) - nullable[-1] = 1; + stk[-1].nullable = true; break; case CAT: /* Every element in the firstpos of the second argument is in the follow of every element in the lastpos of the first argument. */ - tmp.nelem = nfirstpos[-1]; + tmp.nelem = stk[-1].nfirstpos; tmp.elems = firstpos; - pos = lastpos + nlastpos[-1]; - for (j = 0; j < nlastpos[-2]; ++j) + pos = lastpos + stk[-1].nlastpos; + for (j = 0; j < stk[-2].nlastpos; ++j) { merge (&tmp, &d->follows[pos[j].index], &merged); copy (&merged, &d->follows[pos[j].index]); @@ -2484,43 +2459,39 @@ dfaanalyze (struct dfa *d, int searchflag) /* The firstpos of a CAT node is the firstpos of the first argument, union that of the second argument if the first is nullable. */ - if (nullable[-2]) - nfirstpos[-2] += nfirstpos[-1]; + if (stk[-2].nullable) + stk[-2].nfirstpos += stk[-1].nfirstpos; else - firstpos += nfirstpos[-1]; - --nfirstpos; + firstpos += stk[-1].nfirstpos; /* The lastpos of a CAT node is the lastpos of the second argument, union that of the first argument if the second is nullable. */ - if (nullable[-1]) - nlastpos[-2] += nlastpos[-1]; + if (stk[-1].nullable) + stk[-2].nlastpos += stk[-1].nlastpos; else { - pos = lastpos + nlastpos[-2]; - for (j = nlastpos[-1]; j-- > 0;) + pos = lastpos + stk[-2].nlastpos; + for (j = stk[-1].nlastpos; j-- > 0;) pos[j] = lastpos[j]; - lastpos += nlastpos[-2]; - nlastpos[-2] = nlastpos[-1]; + lastpos += stk[-2].nlastpos; + stk[-2].nlastpos = stk[-1].nlastpos; } - --nlastpos; /* A CAT node is nullable if both arguments are nullable. */ - nullable[-2] = nullable[-1] && nullable[-2]; - --nullable; + stk[-2].nullable &= stk[-1].nullable; + stk--; break; case OR: /* The firstpos is the union of the firstpos of each argument. */ - nfirstpos[-2] += nfirstpos[-1]; - --nfirstpos; + stk[-2].nfirstpos += stk[-1].nfirstpos; /* The lastpos is the union of the lastpos of each argument. */ - nlastpos[-2] += nlastpos[-1]; - --nlastpos; + stk[-2].nlastpos += stk[-1].nlastpos; /* An OR node is nullable if either argument is nullable. */ - nullable[-2] = nullable[-1] || nullable[-2]; - --nullable; + stk[-2].nullable |= stk[-1].nullable; + stk--; break; default: @@ -2529,10 +2500,12 @@ dfaanalyze (struct dfa *d, int searchflag) an "epsilon closure" effectively makes them nullable later. Backreferences have to get a real position so we can detect transitions on them later. But they are nullable. */ - *nullable++ = d->tokens[i] == BACKREF; + stk->nullable = d->tokens[i] == BACKREF; /* This position is in its own firstpos and lastpos. */ - *nfirstpos++ = *nlastpos++ = 1; + stk->nfirstpos = stk->nlastpos = 1; + stk++; + --firstpos, --lastpos; firstpos->index = lastpos->index = i; firstpos->constraint = lastpos->constraint = NO_CONSTRAINT; @@ -2546,15 +2519,16 @@ dfaanalyze (struct dfa *d, int searchflag) fprintf (stderr, "node %zd:", i); prtok (d->tokens[i]); putc ('\n', stderr); - fprintf (stderr, nullable[-1] ? " nullable: yes\n" : " nullable: no\n"); + fprintf (stderr, + stk[-1].nullable ? " nullable: yes\n" : " nullable: no\n"); fprintf (stderr, " firstpos:"); - for (j = nfirstpos[-1]; j-- > 0;) + for (j = stk[-1].nfirstpos; j-- > 0;) { fprintf (stderr, " %zd:", firstpos[j].index); prtok (d->tokens[firstpos[j].index]); } fprintf (stderr, "\n lastpos:"); - for (j = nlastpos[-1]; j-- > 0;) + for (j = stk[-1].nlastpos; j-- > 0;) { fprintf (stderr, " %zd:", lastpos[j].index); prtok (d->tokens[lastpos[j].index]); @@ -2591,25 +2565,18 @@ dfaanalyze (struct dfa *d, int searchflag) /* Get the epsilon closure of the firstpos of the regexp. The result will be the set of positions of state 0. */ merged.nelem = 0; - for (i = 0; i < nfirstpos[-1]; ++i) + for (i = 0; i < stk[-1].nfirstpos; ++i) insert (firstpos[i], &merged); epsclosure (&merged, d); /* Build the initial state. */ - d->salloc = 1; - d->sindex = 0; - MALLOC (d->states, d->salloc); - separate_contexts = state_separate_contexts (&merged); state_index (d, &merged, (separate_contexts & CTX_NEWLINE ? CTX_NEWLINE : separate_contexts ^ CTX_ANY)); - free (o_nullable); - free (o_nfirst); - free (o_firstpos); - free (o_nlast); - free (o_lastpos); + free (posalloc); + free (stkalloc); free (merged.elems); } @@ -2647,16 +2614,16 @@ dfaanalyze (struct dfa *d, int searchflag) void dfastate (state_num s, struct dfa *d, state_num trans[]) { - leaf_set *grps; /* As many as will ever be needed. */ - charclass *labels; /* Labels corresponding to the groups. */ + leaf_set grps[NOTCHAR]; /* As many as will ever be needed. */ + charclass labels[NOTCHAR]; /* Labels corresponding to the groups. */ size_t ngrps = 0; /* Number of groups actually used. */ position pos; /* Current position being considered. */ charclass matches; /* Set of matching characters. */ - int matchesf; /* True if matches is nonempty. */ + unsigned int matchesf; /* Nonzero if matches is nonempty. */ charclass intersect; /* Intersection with some label set. */ - int intersectf; /* True if intersect is nonempty. */ + unsigned int intersectf; /* Nonzero if intersect is nonempty. */ charclass leftovers; /* Stuff in the label that didn't match. */ - int leftoversf; /* True if leftovers is nonempty. */ + unsigned int leftoversf; /* Nonzero if leftovers is nonempty. */ position_set follows; /* Union of the follows of some group. */ position_set tmp; /* Temporary space for merging sets. */ int possible_contexts; /* Contexts that this group can match. */ @@ -2664,12 +2631,9 @@ dfastate (state_num s, struct dfa *d, state_num trans[]) state_num state; /* New state. */ state_num state_newline; /* New state on a newline transition. */ state_num state_letter; /* New state on a letter transition. */ - int next_isnt_1st_byte = 0; /* Flag if we can't add state0. */ + bool next_isnt_1st_byte = false; /* Flag if we can't add state0. */ size_t i, j, k; - MALLOC (grps, NOTCHAR); - MALLOC (labels, NOTCHAR); - zeroset (matches); for (i = 0; i < d->states[s].elems.nelem; ++i) @@ -2732,7 +2696,7 @@ dfastate (state_num s, struct dfa *d, state_num trans[]) matches. */ intersectf = 0; for (k = 0; k < CHARCLASS_INTS; ++k) - (intersect[k] = matches[k] & labels[j][k]) ? (intersectf = 1) : 0; + intersectf |= intersect[k] = matches[k] & labels[j][k]; if (!intersectf) continue; @@ -2743,8 +2707,8 @@ dfastate (state_num s, struct dfa *d, state_num trans[]) /* Even an optimizing compiler can't know this for sure. */ int match = matches[k], label = labels[j][k]; - (leftovers[k] = ~match & label) ? (leftoversf = 1) : 0; - (matches[k] = match & ~label) ? (matchesf = 1) : 0; + leftoversf |= leftovers[k] = ~match & label; + matchesf |= matches[k] = match & ~label; } /* If there were leftovers, create a new group labeled with them. */ @@ -2752,7 +2716,8 @@ dfastate (state_num s, struct dfa *d, state_num trans[]) { copyset (leftovers, labels[ngrps]); copyset (intersect, labels[j]); - MALLOC (grps[ngrps].elems, d->nleaves); + grps[ngrps].elems = xnmalloc (d->nleaves, + sizeof *grps[ngrps].elems); memcpy (grps[ngrps].elems, grps[j].elems, sizeof (grps[j].elems[0]) * grps[j].nelem); grps[ngrps].nelem = grps[j].nelem; @@ -2775,7 +2740,7 @@ dfastate (state_num s, struct dfa *d, state_num trans[]) { copyset (matches, labels[ngrps]); zeroset (matches); - MALLOC (grps[ngrps].elems, d->nleaves); + grps[ngrps].elems = xnmalloc (d->nleaves, sizeof *grps[ngrps].elems); grps[ngrps].nelem = 1; grps[ngrps].elems[0] = pos.index; ++ngrps; @@ -2821,7 +2786,7 @@ dfastate (state_num s, struct dfa *d, state_num trans[]) for (k = 0; k < d->follows[grps[i].elems[j]].nelem; ++k) insert (d->follows[grps[i].elems[j]].elems[k], &follows); - if (d->mb_cur_max > 1) + if (d->multibyte) { /* If a token in follows.elems is not 1st byte of a multibyte character, or the states of follows must accept the bytes @@ -2841,12 +2806,12 @@ dfastate (state_num s, struct dfa *d, state_num trans[]) codepoint of , it must not be but 2nd byte of , so we cannot add state[0]. */ - next_isnt_1st_byte = 0; + next_isnt_1st_byte = false; for (j = 0; j < follows.nelem; ++j) { if (!(d->multibyte_prop[follows.elems[j].index] & 1)) { - next_isnt_1st_byte = 1; + next_isnt_1st_byte = true; break; } } @@ -2855,7 +2820,7 @@ dfastate (state_num s, struct dfa *d, state_num trans[]) /* If we are building a searching matcher, throw in the positions of state 0 as well. */ if (d->searchflag - && (!MBS_SUPPORT || (d->mb_cur_max == 1 || !next_isnt_1st_byte))) + && (!MBS_SUPPORT || (!d->multibyte || !next_isnt_1st_byte))) for (j = 0; j < d->states[0].elems.nelem; ++j) insert (d->states[0].elems.elems[j], &follows); @@ -2897,8 +2862,31 @@ dfastate (state_num s, struct dfa *d, state_num trans[]) free (grps[i].elems); free (follows.elems); free (tmp.elems); - free (grps); - free (labels); +} + +/* Make sure D's state arrays are large enough to hold NEW_STATE. */ +static void +realloc_trans_if_necessary (struct dfa *d, state_num new_state) +{ + state_num oldalloc = d->tralloc; + if (oldalloc <= new_state) + { + state_num **realtrans = d->trans ? d->trans - 1 : NULL; + size_t newalloc, newalloc1; + newalloc1 = new_state + 1; + realtrans = x2nrealloc (realtrans, &newalloc1, sizeof *realtrans); + realtrans[0] = NULL; + d->trans = realtrans + 1; + d->tralloc = newalloc = newalloc1 - 1; + d->fails = xnrealloc (d->fails, newalloc, sizeof *d->fails); + d->success = xnrealloc (d->success, newalloc, sizeof *d->success); + d->newlines = xnrealloc (d->newlines, newalloc, sizeof *d->newlines); + for (; oldalloc < newalloc; oldalloc++) + { + d->trans[oldalloc] = NULL; + d->fails[oldalloc] = NULL; + } + } } /* Some routines for manipulating a compiled dfa's transition tables. @@ -2912,7 +2900,7 @@ static void build_state (state_num s, struct dfa *d) { state_num *trans; /* The new transition table. */ - state_num i; + state_num i, maxstate; /* Set an upper limit on the number of transition tables that will ever exist at once. 1024 is arbitrary. The idea is that the frequently @@ -2940,30 +2928,17 @@ build_state (state_num s, struct dfa *d) if (ACCEPTS_IN_CONTEXT (d->states[s].context, CTX_NONE, s, *d)) d->success[s] |= CTX_NONE; - MALLOC (trans, NOTCHAR); + trans = xmalloc (NOTCHAR * sizeof *trans); dfastate (s, d, trans); /* Now go through the new transition table, and make sure that the trans and fail arrays are allocated large enough to hold a pointer for the largest state mentioned in the table. */ + maxstate = -1; for (i = 0; i < NOTCHAR; ++i) - if (trans[i] >= d->tralloc) - { - state_num oldalloc = d->tralloc; - - while (trans[i] >= d->tralloc) - d->tralloc *= 2; - REALLOC (d->realtrans, d->tralloc + 1); - d->trans = d->realtrans + 1; - REALLOC (d->fails, d->tralloc); - REALLOC (d->success, d->tralloc); - REALLOC (d->newlines, d->tralloc); - while (oldalloc < d->tralloc) - { - d->trans[oldalloc] = NULL; - d->fails[oldalloc++] = NULL; - } - } + if (maxstate < trans[i]) + maxstate = trans[i]; + realloc_trans_if_necessary (d, maxstate); /* Keep the newline transition in a special place so we can use it as a sentinel. */ @@ -2979,65 +2954,21 @@ build_state (state_num s, struct dfa *d) static void build_state_zero (struct dfa *d) { - d->tralloc = 1; + /* Initial size of the transition tables; must be positive. */ + int initial_tab_size = 1; + + d->tralloc = 0; d->trcount = 0; - CALLOC (d->realtrans, d->tralloc + 1); - d->trans = d->realtrans + 1; - CALLOC (d->fails, d->tralloc); - MALLOC (d->success, d->tralloc); - MALLOC (d->newlines, d->tralloc); + d->trans = NULL; + d->fails = NULL; + d->success = NULL; + d->newlines = NULL; + realloc_trans_if_necessary (d, initial_tab_size); build_state (0, d); } /* Multibyte character handling sub-routines for dfaexec. */ -/* The initial state may encounter a byte which is not a single byte character - nor the first byte of a multibyte character. But it is incorrect for the - initial state to accept such a byte. For example, in Shift JIS the regular - expression "\\" accepts the codepoint 0x5c, but should not accept the second - byte of the codepoint 0x815c. Then the initial state must skip the bytes - that are not a single byte character nor the first byte of a multibyte - character. */ -#define SKIP_REMAINS_MB_IF_INITIAL_STATE(s, p) \ - if (s == 0) \ - { \ - while (inputwcs[p - buf_begin] == 0 \ - && mblen_buf[p - buf_begin] > 0 \ - && (unsigned char const *) p < buf_end) \ - ++p; \ - if ((char *) p >= end) \ - { \ - free (mblen_buf); \ - free (inputwcs); \ - *end = saved_end; \ - return NULL; \ - } \ - } - -static void -realloc_trans_if_necessary (struct dfa *d, state_num new_state) -{ - /* Make sure that the trans and fail arrays are allocated large enough - to hold a pointer for the new state. */ - if (new_state >= d->tralloc) - { - state_num oldalloc = d->tralloc; - - while (new_state >= d->tralloc) - d->tralloc *= 2; - REALLOC (d->realtrans, d->tralloc + 1); - d->trans = d->realtrans + 1; - REALLOC (d->fails, d->tralloc); - REALLOC (d->success, d->tralloc); - REALLOC (d->newlines, d->tralloc); - while (oldalloc < d->tralloc) - { - d->trans[oldalloc] = NULL; - d->fails[oldalloc++] = NULL; - } - } -} - /* Return values of transit_state_singlebyte, and transit_state_consume_1char. */ typedef enum @@ -3070,14 +3001,7 @@ transit_state_singlebyte (struct dfa *d, state_num s, unsigned char const *p, works = 0; } else if (works < 0) - { - if (p == buf_end) - { - /* At the moment, it must not happen. */ - abort (); - } - works = 0; - } + works = 0; else if (d->fails[works]) { works = d->fails[works][*p]; @@ -3092,18 +3016,13 @@ transit_state_singlebyte (struct dfa *d, state_num s, unsigned char const *p, return rval; } -/* Match a "." against the current context. buf_begin[IDX] is the - current position. Return the length of the match, in bytes. - POS is the position of the ".". */ +/* Match a "." against the current context. Return the length of the + match, in bytes. POS is the position of the ".". */ static int -match_anychar (struct dfa *d, state_num s, position pos, size_t idx) +match_anychar (struct dfa *d, state_num s, position pos, + wchar_t wc, size_t mbclen) { int context; - wchar_t wc; - int mbclen; - - wc = inputwcs[idx]; - mbclen = (mblen_buf[idx] == 0) ? 1 : mblen_buf[idx]; /* Check syntax bits. */ if (wc == (wchar_t) eolbyte) @@ -3125,16 +3044,14 @@ match_anychar (struct dfa *d, state_num s, position pos, size_t idx) } /* Match a bracket expression against the current context. - buf_begin[IDX] is the current position. Return the length of the match, in bytes. POS is the position of the bracket expression. */ static int -match_mb_charset (struct dfa *d, state_num s, position pos, size_t idx) +match_mb_charset (struct dfa *d, state_num s, position pos, + char const *p, wchar_t wc, size_t match_len) { size_t i; - int match; /* Matching succeeded. */ - int match_len; /* Length of the character (or collating element) - with which this operator matches. */ + bool match; /* Matching succeeded. */ int op_len; /* Length of the operator. */ char buffer[128]; @@ -3142,9 +3059,6 @@ match_mb_charset (struct dfa *d, state_num s, position pos, size_t idx) struct mb_char_classes *work_mbc; int context; - wchar_t wc; /* Current referring character. */ - - wc = inputwcs[idx]; /* Check syntax bits. */ if (wc == (wchar_t) eolbyte) @@ -3165,7 +3079,6 @@ match_mb_charset (struct dfa *d, state_num s, position pos, size_t idx) /* Assign the current referring operator to work_mbc. */ work_mbc = &(d->mbcsets[(d->multibyte_prop[pos.index]) >> 2]); match = !work_mbc->invert; - match_len = (mblen_buf[idx] == 0) ? 1 : mblen_buf[idx]; /* Match in range 0-255? */ if (wc < NOTCHAR && work_mbc->cset != -1 @@ -3179,14 +3092,14 @@ match_mb_charset (struct dfa *d, state_num s, position pos, size_t idx) goto charset_matched; } - strncpy (buffer, (char const *) buf_begin + idx, match_len); + strncpy (buffer, p, match_len); buffer[match_len] = '\0'; /* match with an equivalence class? */ for (i = 0; i < work_mbc->nequivs; i++) { op_len = strlen (work_mbc->equivs[i]); - strncpy (buffer, (char const *) buf_begin + idx, op_len); + strncpy (buffer, p, op_len); buffer[op_len] = '\0'; if (strcoll (work_mbc->equivs[i], buffer) == 0) { @@ -3199,7 +3112,7 @@ match_mb_charset (struct dfa *d, state_num s, position pos, size_t idx) for (i = 0; i < work_mbc->ncoll_elems; i++) { op_len = strlen (work_mbc->coll_elems[i]); - strncpy (buffer, (char const *) buf_begin + idx, op_len); + strncpy (buffer, p, op_len); buffer[op_len] = '\0'; if (strcoll (work_mbc->coll_elems[i], buffer) == 0) @@ -3212,7 +3125,7 @@ match_mb_charset (struct dfa *d, state_num s, position pos, size_t idx) /* match with a range? */ for (i = 0; i < work_mbc->nranges; i++) { - if (work_mbc->range_sts[i] <= wc && wc <= work_mbc->range_ends[i]) + if (work_mbc->ranges[i].beg <= wc && wc <= work_mbc->ranges[i].end) goto charset_matched; } @@ -3233,27 +3146,25 @@ charset_matched: array which corresponds to 'd->states[s].mbps.elem'; each element of the array contains the number of bytes with which the element can match. - 'idx' is the index from buf_begin, and it is the current position - in the buffer. - The caller MUST free the array which this function return. */ static int * -check_matching_with_multibyte_ops (struct dfa *d, state_num s, size_t idx) +check_matching_with_multibyte_ops (struct dfa *d, state_num s, + char const *p, wchar_t wc, size_t mbclen) { size_t i; int *rarray; - MALLOC (rarray, d->states[s].mbps.nelem); + rarray = d->mb_match_lens; for (i = 0; i < d->states[s].mbps.nelem; ++i) { position pos = d->states[s].mbps.elems[i]; switch (d->tokens[pos.index]) { case ANYCHAR: - rarray[i] = match_anychar (d, s, pos, idx); + rarray[i] = match_anychar (d, s, pos, wc, mbclen); break; case MBCSET: - rarray[i] = match_mb_charset (d, s, pos, idx); + rarray[i] = match_mb_charset (d, s, pos, p, wc, mbclen); break; default: break; /* cannot happen. */ @@ -3273,48 +3184,39 @@ check_matching_with_multibyte_ops (struct dfa *d, state_num s, size_t idx) static status_transit_state transit_state_consume_1char (struct dfa *d, state_num s, unsigned char const **pp, - int *match_lens, int *mbclen, position_set * pps) + wchar_t wc, size_t mbclen, + int *match_lens) { size_t i, j; int k; state_num s1, s2; - int *work_mbls; status_transit_state rs = TRANSIT_STATE_DONE; - /* Calculate the length of the (single/multi byte) character - to which p points. */ - *mbclen = (mblen_buf[*pp - buf_begin] == 0) ? 1 : mblen_buf[*pp - buf_begin]; + if (! match_lens && d->states[s].mbps.nelem != 0) + match_lens = check_matching_with_multibyte_ops (d, s, (char const *) *pp, + wc, mbclen); /* Calculate the state which can be reached from the state 's' by - consuming '*mbclen' single bytes from the buffer. */ + consuming 'mbclen' single bytes from the buffer. */ s1 = s; - for (k = 0; k < *mbclen; k++) + for (k = 0; k < mbclen; k++) { s2 = s1; rs = transit_state_singlebyte (d, s2, (*pp)++, &s1); } - /* Copy the positions contained by 's1' to the set 'pps'. */ - copy (&(d->states[s1].elems), pps); - - /* Check (input) match_lens, and initialize if it is NULL. */ - if (match_lens == NULL && d->states[s].mbps.nelem != 0) - work_mbls = check_matching_with_multibyte_ops (d, s, *pp - buf_begin); - else - work_mbls = match_lens; + copy (&d->states[s1].elems, &d->mb_follows); /* Add all of the positions which can be reached from 's' by consuming a single character. */ for (i = 0; i < d->states[s].mbps.nelem; i++) { - if (work_mbls[i] == *mbclen) + if (match_lens[i] == mbclen) for (j = 0; j < d->follows[d->states[s].mbps.elems[i].index].nelem; j++) - insert (d->follows[d->states[s].mbps.elems[i].index].elems[j], pps); + insert (d->follows[d->states[s].mbps.elems[i].index].elems[j], + &d->mb_follows); } - if (match_lens == NULL && work_mbls != NULL) - free (work_mbls); - /* FIXME: this return value is always ignored. */ return rs; } @@ -3323,7 +3225,8 @@ transit_state_consume_1char (struct dfa *d, state_num s, buffer. This function is for some operator which can match with a multi- byte character or a collating element (which may be multi characters). */ static state_num -transit_state (struct dfa *d, state_num s, unsigned char const **pp) +transit_state (struct dfa *d, state_num s, unsigned char const **pp, + unsigned char const *end) { state_num s1; int mbclen; /* The length of current input multibyte character. */ @@ -3331,7 +3234,6 @@ transit_state (struct dfa *d, state_num s, unsigned char const **pp) size_t i, j; int *match_lens = NULL; size_t nelem = d->states[s].mbps.nelem; /* Just a alias. */ - position_set follows; unsigned char const *p1 = *pp; wchar_t wc; @@ -3340,7 +3242,9 @@ transit_state (struct dfa *d, state_num s, unsigned char const **pp) We check whether each of them can match or not. */ { /* Note: caller must free the return value of this function. */ - match_lens = check_matching_with_multibyte_ops (d, s, *pp - buf_begin); + mbclen = mbs_to_wchar (&wc, (char const *) *pp, end - *pp, d); + match_lens = check_matching_with_multibyte_ops (d, s, (char const *) *pp, + wc, mbclen); for (i = 0; i < nelem; i++) /* Search the operator which match the longest string, @@ -3362,26 +3266,25 @@ transit_state (struct dfa *d, state_num s, unsigned char const **pp) if (rs == TRANSIT_STATE_DONE) ++*pp; - free (match_lens); return s1; } /* This state has some operators which can match a multibyte character. */ - alloc_position_set (&follows, d->nleaves); + d->mb_follows.nelem = 0; /* 'maxlen' may be longer than the length of a character, because it may not be a character but a (multi character) collating element. We enumerate all of the positions which 's' can reach by consuming 'maxlen' bytes. */ - transit_state_consume_1char (d, s, pp, match_lens, &mbclen, &follows); + transit_state_consume_1char (d, s, pp, wc, mbclen, match_lens); - wc = inputwcs[*pp - mbclen - buf_begin]; - s1 = state_index (d, &follows, wchar_context (wc)); + s1 = state_index (d, &d->mb_follows, wchar_context (wc)); realloc_trans_if_necessary (d, s1); while (*pp - p1 < maxlen) { - transit_state_consume_1char (d, s1, pp, NULL, &mbclen, &follows); + mbclen = mbs_to_wchar (&wc, (char const *) *pp, end - *pp, d); + transit_state_consume_1char (d, s1, pp, wc, mbclen, NULL); for (i = 0; i < nelem; i++) { @@ -3389,51 +3292,15 @@ transit_state (struct dfa *d, state_num s, unsigned char const **pp) for (j = 0; j < d->follows[d->states[s1].mbps.elems[i].index].nelem; j++) insert (d->follows[d->states[s1].mbps.elems[i].index].elems[j], - &follows); + &d->mb_follows); } - wc = inputwcs[*pp - mbclen - buf_begin]; - s1 = state_index (d, &follows, wchar_context (wc)); + s1 = state_index (d, &d->mb_follows, wchar_context (wc)); realloc_trans_if_necessary (d, s1); } - free (match_lens); - free (follows.elems); return s1; } - -/* Initialize mblen_buf and inputwcs with data from the next line. */ - -static void -prepare_wc_buf (struct dfa *d, const char *begin, const char *end) -{ -#if MBS_SUPPORT - unsigned char eol = eolbyte; - size_t i; - size_t ilim = end - begin + 1; - - buf_begin = (unsigned char *) begin; - - for (i = 0; i < ilim; i++) - { - size_t nbytes = mbs_to_wchar (d, inputwcs + i, begin + i, ilim - i, &mbs); - mblen_buf[i] = nbytes - (nbytes == 1); - if (begin[i] == eol) - break; - while (--nbytes != 0) - { - i++; - mblen_buf[i] = nbytes; - inputwcs[i] = 0; - } - } - - buf_end = (unsigned char *) (begin + i); - mblen_buf[i] = 0; - inputwcs[i] = 0; /* sentinel */ -#endif /* MBS_SUPPORT */ -} - /* Search through a buffer looking for a match to the given struct dfa. Find the first occurrence of a string matching the regexp in the buffer, and the shortest possible version thereof. Return a pointer to @@ -3451,39 +3318,64 @@ dfaexec (struct dfa *d, char const *begin, char *end, int allow_nl, size_t *count, int *backref) { state_num s, s1; /* Current state. */ - unsigned char const *p; /* Current input character. */ + unsigned char const *p, *mbp; /* Current input character. */ state_num **trans, *t; /* Copy of d->trans so it can be optimized into a register. */ unsigned char eol = eolbyte; /* Likewise for eolbyte. */ unsigned char saved_end; + size_t nlcount = 0; if (!d->tralloc) build_state_zero (d); s = s1 = 0; - p = (unsigned char const *) begin; + p = mbp = (unsigned char const *) begin; trans = d->trans; saved_end = *(unsigned char *) end; *end = eol; - if (d->mb_cur_max > 1) + if (d->multibyte) { - MALLOC (mblen_buf, end - begin + 2); - MALLOC (inputwcs, end - begin + 2); - memset (&mbs, 0, sizeof (mbstate_t)); - prepare_wc_buf (d, (const char *) p, end); + memset (&d->mbs, 0, sizeof d->mbs); + if (! d->mb_match_lens) + { + d->mb_match_lens = xnmalloc (d->nleaves, sizeof *d->mb_match_lens); + alloc_position_set (&d->mb_follows, d->nleaves); + } } for (;;) { - if (d->mb_cur_max > 1) + if (d->multibyte) { while ((t = trans[s]) != NULL) { - if (p > buf_end) - break; s1 = s; - SKIP_REMAINS_MB_IF_INITIAL_STATE (s, p); + + if (s == 0) + { + /* The initial state may encounter a byte which is not + a single byte character nor the first byte of a + multibyte character. But it is incorrect for the + initial state to accept such a byte. For example, + in Shift JIS the regular expression "\\" accepts + the codepoint 0x5c, but should not accept the second + byte of the codepoint 0x815c. Then the initial + state must skip the bytes that are not a single + byte character nor the first byte of a multibyte + character. */ + wchar_t wc; + while (mbp < p) + mbp += mbs_to_wchar (&wc, (char const *) mbp, + end - (char const *) mbp, d); + p = mbp; + + if ((char *) p >= end) + { + p = NULL; + goto done; + } + } if (d->states[s].mbps.nelem == 0) { @@ -3495,18 +3387,16 @@ dfaexec (struct dfa *d, char const *begin, char *end, better performance (up to 25% better on [a-z], for example) and enables support for collating symbols and equivalence classes. */ - if (backref) + if (d->states[s].has_mbcset && backref) { *backref = 1; - free (mblen_buf); - free (inputwcs); - *end = saved_end; - return (char *) p; + goto done; } /* Can match with a multibyte character (and multi character collating element). Transition table might be updated. */ - s = transit_state (d, s, &p); + s = transit_state (d, s, &p, (unsigned char *) end); + mbp = p; trans = d->trans; } } @@ -3526,27 +3416,28 @@ dfaexec (struct dfa *d, char const *begin, char *end, } } - if (s >= 0 && (char *) p <= end && d->fails[s]) + if ((char *) p > end) + { + p = NULL; + goto done; + } + + if (s >= 0 && d->fails[s]) { if (d->success[s] & sbit[*p]) { if (backref) - *backref = (d->states[s].backref != 0); - if (d->mb_cur_max > 1) - { - free (mblen_buf); - free (inputwcs); - } - *end = saved_end; - return (char *) p; + *backref = d->states[s].has_backref; + goto done; } s1 = s; - if (d->mb_cur_max > 1) + if (d->multibyte) { /* Can match with a multibyte character (and multicharacter collating element). Transition table might be updated. */ - s = transit_state (d, s, &p); + s = transit_state (d, s, &p, (unsigned char *) end); + mbp = p; trans = d->trans; } else @@ -3554,31 +3445,18 @@ dfaexec (struct dfa *d, char const *begin, char *end, continue; } - /* If the previous character was a newline, count it. */ - if ((char *) p <= end && p[-1] == eol) + /* If the previous character was a newline, count it, and skip + checking of multibyte character boundary until here. */ + if (p[-1] == eol) { - if (count) - ++*count; - - if (d->mb_cur_max > 1) - prepare_wc_buf (d, (const char *) p, end); - } - - /* Check if we've run off the end of the buffer. */ - if ((char *) p > end) - { - if (d->mb_cur_max > 1) - { - free (mblen_buf); - free (inputwcs); - } - *end = saved_end; - return NULL; + nlcount++; + mbp = p; } if (s >= 0) { - build_state (s, d); + if (!d->trans[s]) + build_state (s, d); trans = d->trans; continue; } @@ -3591,6 +3469,32 @@ dfaexec (struct dfa *d, char const *begin, char *end, s = 0; } + + done: + if (count) + *count += nlcount; + *end = saved_end; + return (char *) p; +} + +/* Search through a buffer looking for a potential match for D. + Return the offset of the byte after the first potential match. + If there is no match, return (size_t) -1. If D lacks a superset + so it's not known whether there is a match, return (size_t) -2. + BEGIN points to the beginning of the buffer, and END points to the + first byte after its end. Store a sentinel byte (usually newline) + in *END, so the actual buffer must be one byte longer. If COUNT is + non-NULL, increment *COUNT once for each newline processed. */ +size_t +dfahint (struct dfa *d, char const *begin, char *end, size_t *count) +{ + if (! d->superset) + return -2; + else + { + char const *match = dfaexec (d->superset, begin, end, 1, count, NULL); + return match ? match - begin : -1; + } } static void @@ -3599,7 +3503,6 @@ free_mbdata (struct dfa *d) size_t i; free (d->multibyte_prop); - d->multibyte_prop = NULL; for (i = 0; i < d->nmbcsets; ++i) { @@ -3607,8 +3510,7 @@ free_mbdata (struct dfa *d) struct mb_char_classes *p = &(d->mbcsets[i]); free (p->chars); free (p->ch_classes); - free (p->range_sts); - free (p->range_ends); + free (p->ranges); for (j = 0; j < p->nequivs; ++j) free (p->equivs[j]); @@ -3620,8 +3522,9 @@ free_mbdata (struct dfa *d) } free (d->mbcsets); - d->mbcsets = NULL; - d->nmbcsets = 0; + free (d->mb_follows.elems); + free (d->mb_match_lens); + d->mb_match_lens = NULL; } /* Initialize the components of a dfa that the other routines don't @@ -3630,22 +3533,7 @@ void dfainit (struct dfa *d) { memset (d, 0, sizeof *d); - - d->calloc = 1; - MALLOC (d->charclasses, d->calloc); - - d->talloc = 1; - MALLOC (d->tokens, d->talloc); - - d->mb_cur_max = MB_CUR_MAX; - - if (d->mb_cur_max > 1) - { - d->nmultibyte_prop = 1; - MALLOC (d->multibyte_prop, d->nmultibyte_prop); - d->mbcsets_alloc = 1; - MALLOC (d->mbcsets, d->mbcsets_alloc); - } + d->multibyte = MB_CUR_MAX > 1; } static void @@ -3672,7 +3560,83 @@ dfaoptimize (struct dfa *d) } free_mbdata (d); - d->mb_cur_max = 1; + d->multibyte = false; +} + +static void +dfasuperset (struct dfa *d) +{ + size_t i, j; + charclass ccl; + bool have_achar = false; + bool have_nchar = false; + struct dfa *sup = dfaalloc (); + + *sup = *d; + sup->multibyte = false; + sup->multibyte_prop = NULL; + sup->mbcsets = NULL; + sup->superset = NULL; + sup->states = NULL; + sup->sindex = 0; + sup->follows = NULL; + sup->tralloc = 0; + sup->trans = NULL; + sup->fails = NULL; + sup->success = NULL; + sup->newlines = NULL; + sup->musts = NULL; + + sup->charclasses = xnmalloc (sup->calloc, sizeof *sup->charclasses); + memcpy (sup->charclasses, d->charclasses, + d->cindex * sizeof *sup->charclasses); + + sup->tokens = xnmalloc (d->tindex, 2 * sizeof *sup->tokens); + sup->talloc = d->tindex * 2; + + for (i = j = 0; i < d->tindex; i++) + { + switch (d->tokens[i]) + { + case ANYCHAR: + case MBCSET: + case BACKREF: + zeroset (ccl); + notset (ccl); + sup->tokens[j++] = CSET + dfa_charclass_index (sup, ccl); + sup->tokens[j++] = STAR; + if (d->tokens[i + 1] == QMARK || d->tokens[i + 1] == STAR + || d->tokens[i + 1] == PLUS) + i++; + have_achar = true; + break; + case BEGWORD: + case ENDWORD: + case LIMWORD: + case NOTLIMWORD: + if (d->multibyte) + { + /* Ignore these constraints. */ + sup->tokens[j++] = EMPTY; + break; + } + default: + sup->tokens[j++] = d->tokens[i]; + if ((0 <= d->tokens[i] && d->tokens[i] < NOTCHAR) + || d->tokens[i] >= CSET) + have_nchar = true; + break; + } + } + sup->tindex = j; + + if (have_nchar && (have_achar || d->multibyte)) + d->superset = sup; + else + { + dfafree (sup); + free (sup); + } } /* Parse and analyze a single string of the given length. */ @@ -3684,7 +3648,10 @@ dfacomp (char const *s, size_t len, struct dfa *d, int searchflag) dfaparse (s, len, d); dfamust (d); dfaoptimize (d); + dfasuperset (d); dfaanalyze (d, searchflag); + if (d->superset) + dfaanalyze (d->superset, searchflag); } /* Free the storage held by the components of a dfa. */ @@ -3697,34 +3664,46 @@ dfafree (struct dfa *d) free (d->charclasses); free (d->tokens); - if (d->mb_cur_max > 1) + if (d->multibyte) free_mbdata (d); for (i = 0; i < d->sindex; ++i) { free (d->states[i].elems.elems); - if (MBS_SUPPORT) - free (d->states[i].mbps.elems); + free (d->states[i].mbps.elems); } free (d->states); - for (i = 0; i < d->tindex; ++i) - free (d->follows[i].elems); - free (d->follows); - for (i = 0; i < d->tralloc; ++i) + + if (d->follows) + { + for (i = 0; i < d->tindex; ++i) + free (d->follows[i].elems); + free (d->follows); + } + + if (d->trans) { - free (d->trans[i]); - free (d->fails[i]); + for (i = 0; i < d->tralloc; ++i) + { + free (d->trans[i]); + free (d->fails[i]); + } + + free (d->trans - 1); + free (d->fails); + free (d->newlines); + free (d->success); } - free (d->realtrans); - free (d->fails); - free (d->newlines); - free (d->success); + for (dm = d->musts; dm; dm = ndm) { ndm = dm->next; free (dm->must); free (dm); } + + if (d->superset) + dfafree (d->superset); } /* Having found the postfix representation of the regular expression, @@ -3815,21 +3794,16 @@ static char * icatalloc (char *old, char const *new) { char *result; - size_t oldsize = old == NULL ? 0 : strlen (old); - size_t newsize = new == NULL ? 0 : strlen (new); + size_t oldsize; + size_t newsize = strlen (new); if (newsize == 0) return old; + oldsize = strlen (old); result = xrealloc (old, oldsize + newsize + 1); memcpy (result + oldsize, new, newsize + 1); return result; } -static char * -icpyalloc (char const *string) -{ - return icatalloc (NULL, string); -} - static char *_GL_ATTRIBUTE_PURE istrstr (char const *lookin, char const *lookfor) { @@ -3846,29 +3820,15 @@ istrstr (char const *lookin, char const *lookfor) static void freelist (char **cpp) { - size_t i; - - if (cpp == NULL) - return; - for (i = 0; cpp[i] != NULL; ++i) - { - free (cpp[i]); - cpp[i] = NULL; - } + while (*cpp) + free (*cpp++); } static char ** enlist (char **cpp, char *new, size_t len) { size_t i, j; - - if (cpp == NULL) - return NULL; - if ((new = icpyalloc (new)) == NULL) - { - freelist (cpp); - return NULL; - } + new = memcpy (xmalloc (len + 1), new, len); new[len] = '\0'; /* Is there already something in the list that's new (or longer)? */ for (i = 0; cpp[i] != NULL; ++i) @@ -3891,53 +3851,35 @@ enlist (char **cpp, char *new, size_t len) cpp[i] = NULL; } /* Add the new string. */ - REALLOC (cpp, i + 2); + cpp = xnrealloc (cpp, i + 2, sizeof *cpp); cpp[i] = new; cpp[i + 1] = NULL; return cpp; } /* Given pointers to two strings, return a pointer to an allocated - list of their distinct common substrings. Return NULL if something - seems wild. */ + list of their distinct common substrings. */ static char ** comsubs (char *left, char const *right) { - char **cpp; + char **cpp = xzalloc (sizeof *cpp); char *lcp; - char *rcp; - size_t i, len; - - if (left == NULL || right == NULL) - return NULL; - cpp = malloc (sizeof *cpp); - if (cpp == NULL) - return NULL; - cpp[0] = NULL; + for (lcp = left; *lcp != '\0'; ++lcp) { - len = 0; - rcp = strchr (right, *lcp); + size_t len = 0; + char *rcp = strchr (right, *lcp); while (rcp != NULL) { + size_t i; for (i = 1; lcp[i] != '\0' && lcp[i] == rcp[i]; ++i) continue; if (i > len) len = i; rcp = strchr (rcp + 1, *lcp); } - if (len == 0) - continue; - { - char **p = enlist (cpp, lcp, len); - if (p == NULL) - { - freelist (cpp); - cpp = NULL; - break; - } - cpp = p; - } + if (len != 0) + cpp = enlist (cpp, lcp, len); } return cpp; } @@ -3945,16 +3887,8 @@ comsubs (char *left, char const *right) static char ** addlists (char **old, char **new) { - size_t i; - - if (old == NULL || new == NULL) - return NULL; - for (i = 0; new[i] != NULL; ++i) - { - old = enlist (old, new[i], strlen (new[i])); - if (old == NULL) - break; - } + for (; *new; new++) + old = enlist (old, *new, strlen (*new)); return old; } @@ -3963,125 +3897,127 @@ addlists (char **old, char **new) static char ** inboth (char **left, char **right) { - char **both; - char **temp; + char **both = xzalloc (sizeof *both); size_t lnum, rnum; - if (left == NULL || right == NULL) - return NULL; - both = malloc (sizeof *both); - if (both == NULL) - return NULL; - both[0] = NULL; for (lnum = 0; left[lnum] != NULL; ++lnum) { for (rnum = 0; right[rnum] != NULL; ++rnum) { - temp = comsubs (left[lnum], right[rnum]); - if (temp == NULL) - { - freelist (both); - return NULL; - } + char **temp = comsubs (left[lnum], right[rnum]); both = addlists (both, temp); freelist (temp); free (temp); - if (both == NULL) - return NULL; } } return both; } -typedef struct +typedef struct must must; + +struct must { char **in; char *left; char *right; char *is; -} must; + bool begline; + bool endline; + must *prev; +}; + +static must * +allocmust (must *mp) +{ + must *new_mp = xmalloc (sizeof *new_mp); + new_mp->in = xzalloc (sizeof *new_mp->in); + new_mp->left = xzalloc (2); + new_mp->right = xzalloc (2); + new_mp->is = xzalloc (2); + new_mp->begline = false; + new_mp->endline = false; + new_mp->prev = mp; + return new_mp; +} static void -resetmust (must * mp) +resetmust (must *mp) { + freelist (mp->in); + mp->in[0] = NULL; mp->left[0] = mp->right[0] = mp->is[0] = '\0'; + mp->begline = false; + mp->endline = false; +} + +static void +freemust (must *mp) +{ freelist (mp->in); + free (mp->in); + free (mp->left); + free (mp->right); + free (mp->is); + free (mp); } static void dfamust (struct dfa *d) { - must *musts; - must *mp; - char *result; + must *mp = NULL; + char const *result = ""; size_t ri; size_t i; - int exact; - token t; - static must must0; + bool exact = false; + bool begline = false; + bool endline = false; struct dfamust *dm; - static char empty_string[] = ""; - - result = empty_string; - exact = 0; - MALLOC (musts, d->tindex + 1); - mp = musts; - for (i = 0; i <= d->tindex; ++i) - mp[i] = must0; - for (i = 0; i <= d->tindex; ++i) - { - mp[i].in = xmalloc (sizeof *mp[i].in); - mp[i].left = xmalloc (2); - mp[i].right = xmalloc (2); - mp[i].is = xmalloc (2); - mp[i].left[0] = mp[i].right[0] = mp[i].is[0] = '\0'; - mp[i].in[0] = NULL; - } -#ifdef DEBUG - fprintf (stderr, "dfamust:\n"); - for (i = 0; i < d->tindex; ++i) - { - fprintf (stderr, " %zd:", i); - prtok (d->tokens[i]); - } - putc ('\n', stderr); -#endif + for (ri = 0; ri < d->tindex; ++ri) { - switch (t = d->tokens[ri]) + token t = d->tokens[ri]; + switch (t) { + case BEGLINE: + mp = allocmust (mp); + mp->begline = true; + break; + case ENDLINE: + mp = allocmust (mp); + mp->endline = true; + break; case LPAREN: case RPAREN: assert (!"neither LPAREN nor RPAREN may appear here"); + case EMPTY: - case BEGLINE: - case ENDLINE: case BEGWORD: case ENDWORD: case LIMWORD: case NOTLIMWORD: case BACKREF: - resetmust (mp); + case ANYCHAR: + case MBCSET: + mp = allocmust (mp); break; + case STAR: case QMARK: - assert (musts < mp); - --mp; resetmust (mp); break; + case OR: - assert (&musts[2] <= mp); { char **new; - must *lmp; - must *rmp; + must *rmp = mp; + must *lmp = mp = mp->prev; size_t j, ln, rn, n; - rmp = --mp; - lmp = --mp; /* Guaranteed to be. Unlikely, but ... */ if (!STREQ (lmp->is, rmp->is)) lmp->is[0] = '\0'; + lmp->begline &= rmp->begline; + lmp->endline &= rmp->endline; /* Left side--easy */ i = 0; while (lmp->left[i] != '\0' && lmp->left[i] == rmp->left[i]) @@ -4100,133 +4036,126 @@ dfamust (struct dfa *d) lmp->right[j] = lmp->right[(ln - i) + j]; lmp->right[j] = '\0'; new = inboth (lmp->in, rmp->in); - if (new == NULL) - goto done; freelist (lmp->in); free (lmp->in); lmp->in = new; + freemust (rmp); } break; + case PLUS: - assert (musts < mp); - --mp; mp->is[0] = '\0'; break; + case END: - assert (mp == &musts[1]); - for (i = 0; musts[0].in[i] != NULL; ++i) - if (strlen (musts[0].in[i]) > strlen (result)) - result = musts[0].in[i]; - if (STREQ (result, musts[0].is)) - exact = 1; + assert (!mp->prev); + for (i = 0; mp->in[i] != NULL; ++i) + if (strlen (mp->in[i]) > strlen (result)) + result = mp->in[i]; + if (STREQ (result, mp->is)) + { + exact = true; + begline = mp->begline; + endline = mp->endline; + } goto done; + case CAT: - assert (&musts[2] <= mp); { - must *lmp; - must *rmp; + must *rmp = mp; + must *lmp = mp = mp->prev; - rmp = --mp; - lmp = --mp; /* In. Everything in left, plus everything in right, plus concatenation of left's right and right's left. */ lmp->in = addlists (lmp->in, rmp->in); - if (lmp->in == NULL) - goto done; if (lmp->right[0] != '\0' && rmp->left[0] != '\0') { - char *tp; - - tp = icpyalloc (lmp->right); - tp = icatalloc (tp, rmp->left); - lmp->in = enlist (lmp->in, tp, strlen (tp)); + size_t lrlen = strlen (lmp->right); + size_t rllen = strlen (rmp->left); + char *tp = xmalloc (lrlen + rllen); + memcpy (tp, lmp->right, lrlen); + memcpy (tp + lrlen, rmp->left, rllen); + lmp->in = enlist (lmp->in, tp, lrlen + rllen); free (tp); - if (lmp->in == NULL) - goto done; } /* Left-hand */ if (lmp->is[0] != '\0') - { - lmp->left = icatalloc (lmp->left, rmp->left); - if (lmp->left == NULL) - goto done; - } + lmp->left = icatalloc (lmp->left, rmp->left); /* Right-hand */ if (rmp->is[0] == '\0') lmp->right[0] = '\0'; lmp->right = icatalloc (lmp->right, rmp->right); - if (lmp->right == NULL) - goto done; /* Guaranteed to be */ - if (lmp->is[0] != '\0' && rmp->is[0] != '\0') + if ((lmp->is[0] != '\0' || lmp->begline) + && (rmp->is[0] != '\0' || rmp->endline)) { lmp->is = icatalloc (lmp->is, rmp->is); - if (lmp->is == NULL) - goto done; + lmp->endline = rmp->endline; } else - lmp->is[0] = '\0'; + { + lmp->is[0] = '\0'; + lmp->begline = false; + lmp->endline = false; + } + freemust (rmp); } break; + + case '\0': + /* Not on *my* shift. */ + goto done; + default: - if (t < END) - { - assert (!"oops! t >= END"); - } - else if (t == '\0') - { - /* not on *my* shift */ - goto done; - } - else if (t >= CSET || !MBS_SUPPORT || t == ANYCHAR || t == MBCSET) - { - /* easy enough */ - resetmust (mp); - } - else + mp = allocmust (mp); + if (CSET <= t) { - /* plain character */ - resetmust (mp); - mp->is[0] = mp->left[0] = mp->right[0] = t; - mp->is[1] = mp->left[1] = mp->right[1] = '\0'; - mp->in = enlist (mp->in, mp->is, (size_t) 1); - if (mp->in == NULL) - goto done; + /* If T is a singleton, or if case-folding in a unibyte + locale and T's members all case-fold to the same char, + convert T to one of its members. Otherwise, do + nothing further with T. */ + charclass *ccl = &d->charclasses[t - CSET]; + int j; + for (j = 0; j < NOTCHAR; j++) + if (tstbit (j, *ccl)) + break; + if (! (j < NOTCHAR)) + break; + t = j; + while (++j < NOTCHAR) + if (tstbit (j, *ccl) + && ! (case_fold && !d->multibyte + && toupper (j) == toupper (t))) + break; + if (j < NOTCHAR) + break; } + mp->is[0] = mp->left[0] = mp->right[0] + = case_fold && !d->multibyte ? toupper (t) : t; + mp->is[1] = mp->left[1] = mp->right[1] = '\0'; + mp->in = enlist (mp->in, mp->is, 1); break; } -#ifdef DEBUG - fprintf (stderr, " node: %zd:", ri); - prtok (d->tokens[ri]); - fprintf (stderr, "\n in:"); - for (i = 0; mp->in[i]; ++i) - fprintf (stderr, " \"%s\"", mp->in[i]); - fprintf (stderr, "\n is: \"%s\"\n", mp->is); - fprintf (stderr, " left: \"%s\"\n", mp->left); - fprintf (stderr, " right: \"%s\"\n", mp->right); -#endif - ++mp; } done: - if (strlen (result)) + if (*result) { - MALLOC (dm, 1); + dm = xmalloc (sizeof *dm); dm->exact = exact; - dm->must = xmemdup (result, strlen (result) + 1); + dm->begline = begline; + dm->endline = endline; + dm->must = xstrdup (result); dm->next = d->musts; d->musts = dm; } - mp = musts; - for (i = 0; i <= d->tindex; ++i) + + while (mp) { - freelist (mp[i].in); - free (mp[i].in); - free (mp[i].left); - free (mp[i].right); - free (mp[i].is); + must *prev = mp->prev; + freemust (mp); + mp = prev; } - free (mp); } struct dfa * diff --git a/dfa.h b/dfa.h index 24fbcbe7..15142362 100644 --- a/dfa.h +++ b/dfa.h @@ -19,13 +19,20 @@ /* Written June, 1988 by Mike Haertel */ #include +#ifdef HAVE_STDBOOL_H +#include +#else +#include "missing_d/gawkbool.h" +#endif /* HAVE_STDBOOL_H */ #include /* Element of a list of strings, at least one of which is known to appear in any R.E. matching the DFA. */ struct dfamust { - int exact; + bool exact; + bool begline; + bool endline; char *must; struct dfamust *next; }; @@ -68,6 +75,17 @@ extern void dfacomp (char const *, size_t, struct dfa *, int); extern char *dfaexec (struct dfa *d, char const *begin, char *end, int newline, size_t *count, int *backref); +/* Search through a buffer looking for a potential match for D. + Return the offset of the byte after the first potential match. + If there is no match, return (size_t) -1. If D lacks a superset + so it's not known whether there is a match, return (size_t) -2. + BEGIN points to the beginning of the buffer, and END points to the + first byte after its end. Store a sentinel byte (usually newline) + in *END, so the actual buffer must be one byte longer. If COUNT is + non-NULL, increment *COUNT once for each newline processed. */ +extern size_t dfahint (struct dfa *d, char const *begin, char *end, + size_t *count); + /* Free the storage held by the components of a struct dfa. */ extern void dfafree (struct dfa *); @@ -101,11 +119,3 @@ extern void dfawarn (const char *); extern _Noreturn void dfaerror (const char *); extern int using_utf8 (void); - -/* Maximum number of characters that can be the case-folded - counterparts of a single character, not counting the character - itself. This is 1 for towupper, 1 for towlower, and 1 for each - entry in LONESOME_LOWER; see dfa.c. */ -enum { CASE_FOLDED_BUFSIZE = 1 + 1 + 19 }; - -extern int case_folded_counterparts (wchar_t, wchar_t[CASE_FOLDED_BUFSIZE]); -- cgit v1.2.3 From 19564e696aca506a14ceb4a08aa2b7c7988a2473 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 25 Apr 2014 13:21:43 +0300 Subject: In forked children, set SIGPIPE to SIG_DFL. --- ChangeLog | 8 ++++++++ io.c | 2 ++ 2 files changed, 10 insertions(+) diff --git a/ChangeLog b/ChangeLog index 61bec4e6..6185b1d8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2014-04-25 Andrew J. Schorr + + * io.c (two_way_open): In forked child, reset SIGPIPE to SIG_DFL. + Fixes problems with "broken pipe" errors from child processes, + restoring 4.1.0 and earlier behavior. Thanks to Daryl F + for the report. + (gawk_popen): Ditto. + 2014-04-25 Arnold D. Robbins * dfa.h, dfa.c: Merge with GNU grep; lots of forward motion. diff --git a/io.c b/io.c index a6e786f7..2bb8f28a 100644 --- a/io.c +++ b/io.c @@ -2078,6 +2078,7 @@ use_pipes: || close(ctop[0]) == -1 || close(ctop[1]) == -1) fatal(_("close of pipe failed (%s)"), strerror(errno)); /* stderr does NOT get dup'ed onto child's stdout */ + signal(SIGPIPE, SIG_DFL); execl("/bin/sh", "sh", "-c", str, NULL); _exit(errno == ENOENT ? 127 : 126); } @@ -2271,6 +2272,7 @@ gawk_popen(const char *cmd, struct redirect *rp) fatal(_("moving pipe to stdout in child failed (dup: %s)"), strerror(errno)); if (close(p[0]) == -1 || close(p[1]) == -1) fatal(_("close of pipe failed (%s)"), strerror(errno)); + signal(SIGPIPE, SIG_DFL); execl("/bin/sh", "sh", "-c", cmd, NULL); _exit(errno == ENOENT ? 127 : 126); } -- cgit v1.2.3 From 4e4446794686a101e0c64ff7242a44a646c56d7e Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 29 Apr 2014 06:13:23 +0300 Subject: Working on documentation edits. --- doc/ChangeLog | 4 + doc/gawk.info | 1630 ++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 678 ++++++++++++----------- doc/gawktexi.in | 676 ++++++++++++----------- 4 files changed, 1566 insertions(+), 1422 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 243ef843..972e19f8 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-04-29 Arnold D. Robbins + + * gawktexi.in: Editing progress. Through Chapter 3. + 2014-04-24 Arnold D. Robbins * gawktexi.in: Start on revisions. diff --git a/doc/gawk.info b/doc/gawk.info index 589ac015..1d5f496d 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -1652,6 +1652,23 @@ knowledge of shell quoting rules. The following rules apply only to POSIX-compliant, Bourne-style shells (such as Bash, the GNU Bourne-Again Shell). If you use the C shell, you're on your own. + Before diving into the rules, we introduce a concept that appears +throughout this Info file, which is that of the "null", or empty, +string. + + The null string is character data that has no value. In other +words, it is empty. It is written in `awk' programs like this: `""'. +In the shell, it can be written using single or double quotes: `""' or +`'''. While the null string has no characters in it, it does exist. +Consider this command: + + $ echo "" + +Here, the `echo' utility receives a single argument, even though that +argument has no characters in it. In the rest of this Info file, we use +the terms "null string" and "empty string" interchangeably. Now, on to +the quoting rules. + * Quoted items can be concatenated with nonquoted items as well as with other quoted items. The shell turns everything into one argument for the command. @@ -1892,7 +1909,7 @@ different ways to do the same things shown here: awk 'length($0) > 80' data The sole rule has a relational expression as its pattern and it - has no action--so the default action, printing the record, is used. + has no action--so it uses the default action, printing the record. * Print the length of the longest line in `data': @@ -1949,9 +1966,9 @@ File: gawk.info, Node: Two Rules, Next: More Complex, Prev: Very Simple, Up: The `awk' utility reads the input files one line at a time. For each line, `awk' tries the patterns of each of the rules. If several -patterns match, then several actions are run in the order in which they -appear in the `awk' program. If no patterns match, then no actions are -run. +patterns match, then several actions execture in the order in which +they appear in the `awk' program. If no patterns match, then no +actions run. After processing all the rules that match the line (and perhaps there are none), `awk' reads the next line. (However, *note Next @@ -2027,12 +2044,12 @@ contains the file name.(1) The `$6 == "Nov"' in our `awk' program is an expression that tests whether the sixth field of the output from `ls -l' matches the string -`Nov'. Each time a line has the string `Nov' for its sixth field, the -action `sum += $5' is performed. This adds the fifth field (the file's -size) to the variable `sum'. As a result, when `awk' has finished -reading all the input lines, `sum' is the total of the sizes of the -files whose lines matched the pattern. (This works because `awk' -variables are automatically initialized to zero.) +`Nov'. Each time a line has the string `Nov' for its sixth field, +`awk' performs the action `sum += $5'. This adds the fifth field (the +file's size) to the variable `sum'. As a result, when `awk' has +finished reading all the input lines, `sum' is the total of the sizes +of the files whose lines matched the pattern. (This works because +`awk' variables are automatically initialized to zero.) After the last line of output from `ls' has been processed, the `END' rule executes and prints the value of `sum'. In this example, @@ -2084,15 +2101,15 @@ We have generally not used backslash continuation in our sample programs. `gawk' places no limit on the length of a line, so backslash continuation is never strictly necessary; it just makes programs more readable. For this same reason, as well as for clarity, we have kept -most statements short in the sample programs presented throughout the -Info file. Backslash continuation is most useful when your `awk' -program is in a separate source file instead of entered from the -command line. You should also note that many `awk' implementations are -more particular about where you may use backslash continuation. For -example, they may not allow you to split a string constant using -backslash continuation. Thus, for maximum portability of your `awk' -programs, it is best not to split your lines in the middle of a regular -expression or a string. +most statements short in the programs presented throughout the Info +file. Backslash continuation is most useful when your `awk' program is +in a separate source file instead of entered from the command line. +You should also note that many `awk' implementations are more +particular about where you may use backslash continuation. For example, +they may not allow you to split a string constant using backslash +continuation. Thus, for maximum portability of your `awk' programs, it +is best not to split your lines in the middle of a regular expression +or a string. CAUTION: _Backslash continuation does not work as described with the C shell._ It works for `awk' programs in files and for @@ -2213,14 +2230,15 @@ those that it has are much larger than they used to be. If you find yourself writing `awk' scripts of more than, say, a few hundred lines, you might consider using a different programming -language. Emacs Lisp is a good choice if you need sophisticated string -or pattern matching capabilities. The shell is also good at string and -pattern matching; in addition, it allows powerful use of the system -utilities. More conventional languages, such as C, C++, and Java, offer -better facilities for system programming and for managing the complexity -of large programs. Programs in these languages may require more lines -of source code than the equivalent `awk' programs, but they are easier -to maintain and usually run more efficiently. +language. The shell is good at string and pattern matching; in +addition, it allows powerful use of the system utilities. More +conventional languages, such as C, C++, and Java, offer better +facilities for system programming and for managing the complexity of +large programs. Python offers a nice balance between high-level ease +of programming and access to system facilities. Programs in these +languages may require more lines of source code than the equivalent +`awk' programs, but they are easier to maintain and usually run more +efficiently.  File: gawk.info, Node: Invoking Gawk, Next: Regexp, Prev: Getting Started, Up: Top @@ -2350,11 +2368,11 @@ The following list describes options mandated by the POSIX standard: treated as single-byte characters. Normally, `gawk' follows the POSIX standard and attempts to process - its input data according to the current locale. 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!". + its input data according to the current locale (*note 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 `gawk': "hands off my data!". `-c' `--traditional' @@ -2368,8 +2386,8 @@ The following list describes options mandated by the POSIX standard: Print the short version of the General Public License and then exit. -`-d[FILE]' -`--dump-variables[=FILE]' +`-d'[FILE] +`--dump-variables'[`='FILE] Print a sorted list of global variables, their types, and final values to FILE. If no FILE is provided, print this list to the file named `awkvars.out' in the current directory. No space is @@ -2383,8 +2401,8 @@ The following list describes options mandated by the POSIX standard: particularly easy mistake to make with simple variable names like `i', `j', etc.) -`-D[FILE]' -`--debug=[FILE]' +`-D'[FILE] +`--debug'[`='FILE] Enable debugging of `awk' programs (*note Debugging::). By default, the debugger reads commands interactively from the keyboard. The optional FILE argument allows you to specify a file @@ -2392,16 +2410,16 @@ The following list describes options mandated by the POSIX standard: non-interactively. No space is allowed between the `-D' and FILE, if FILE is supplied. -`-e PROGRAM-TEXT' -`--source PROGRAM-TEXT' +`-e' PROGRAM-TEXT +`--source' PROGRAM-TEXT Provide program source code in the PROGRAM-TEXT. This option allows you to mix source code in files with source code that you enter on the command line. This is particularly useful when you have library functions that you want to use from your command-line programs (*note AWKPATH Variable::). -`-E FILE' -`--exec FILE' +`-E' FILE +`--exec' FILE Similar to `-f', read `awk' program text from FILE. There are two differences from `-f': @@ -2434,37 +2452,41 @@ The following list describes options mandated by the POSIX standard: Print a "usage" message summarizing the short and long style options that `gawk' accepts and then exit. -`-i SOURCE-FILE' -`--include SOURCE-FILE' +`-i' SOURCE-FILE +`--include' SOURCE-FILE Read `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 will not be loaded if it has been previously - loaded, whereas the `-f' will always load 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. Thus, after processing an `-i' argument, `gawk' still - expects to find the main source code via the `-f' option or on the + 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. + Thus, after processing an `-i' argument, `gawk' still expects to + find the main source code via the `-f' option or on the command-line. -`-l LIB' -`--load LIB' - Load a shared library LIB. This searches for the library using the - `AWKLIBPATH' environment variable. The correct library suffix for - your platform will be supplied by default, so it need not be - specified in the library name. The library initialization routine - should be named `dl_load()'. An alternative is to use the `@load' - keyword inside the program to load a shared library. - -`-L [value]' -`--lint[=value]' +`-l' EXT +`--load' EXT + Load a dynamic extension named EXT. Extensions are stored as + system shared libraries. This option searches for the library + using the `AWKLIBPATH' environment variable. The correct library + suffix for your platform will be supplied by default, so it need + not be specified in the extension name. The extension + initialization routine should be named `dl_load()'. An + alternative is to use the `@load' keyword inside the program to + load a shared library. This feature is described in detail in + *note Dynamic Extensions::. + +`-L'[VALUE] +`--lint'[`='VALUE] Warn about constructs that are dubious or nonportable to other - `awk' implementations. Some warnings are issued when `gawk' first - reads your program. Others are issued at runtime, as your program - executes. With an optional argument of `fatal', lint warnings - become fatal errors. This may be drastic, but its use will - certainly encourage the development of cleaner `awk' programs. + `awk' implementations. No space is allowed between the `-D' and + VALUE, if VALUE is supplied. Some warnings are issued when `gawk' + first reads your program. Others are issued at runtime, as your + program executes. With an optional argument of `fatal', lint + warnings become fatal errors. This may be drastic, but its use + will certainly encourage the development of cleaner `awk' programs. With an optional argument of `invalid', only warnings about things that are actually invalid are issued. (This is not fully implemented yet.) @@ -2495,23 +2517,26 @@ The following list describes options mandated by the POSIX standard: Force the use of the locale's decimal point character when parsing numeric input data (*note Locales::). -`-o[FILE]' -`--pretty-print[=FILE]' +`-o'[FILE] +`--pretty-print'[`='FILE] Enable pretty-printing of `awk' programs. By default, output - program is created in a file named `awkprof.out'. The optional - FILE argument allows you to specify a different file name for the - output. No space is allowed between the `-o' and FILE, if FILE is - supplied. + 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 + the `-o' and FILE, if FILE is supplied. + + NOTE: Due to the way `gawk' has evolved, with this option + your program is still executed. This will change in the next + major release such that `gawk' will only pretty-print the + program and not run it. `-O' `--optimize' Enable some optimizations on the internal representation of the - program. At the moment this includes just simple constant - folding. The `gawk' maintainer hopes to add more optimizations - over time. + program. At the moment this includes just simple constant folding. -`-p[FILE]' -`--profile[=FILE]' +`-p'[FILE] +`--profile'[`='FILE] Enable profiling of `awk' programs (*note Profiling::). By default, profiles are created in a file named `awkprof.out'. The optional FILE argument allows you to specify a different file name @@ -2544,15 +2569,15 @@ The following list describes options mandated by the POSIX standard: data (*note Locales::). If you supply both `--traditional' and `--posix' on the command - line, `--posix' takes precedence. `gawk' also issues a warning if - both options are supplied. + line, `--posix' takes precedence. `gawk' issues a warning if both + options are supplied. `-r' `--re-interval' Allow interval expressions (*note Regexp Operators::) in regexps. This is now `gawk''s default behavior. Nevertheless, this option remains both for backward compatibility, and for use in - combination with the `--traditional' option. + combination with `--traditional'. `-S' `--sandbox' @@ -2602,25 +2627,25 @@ input as a source of data.) source file and command-line `awk' programs, `gawk' provides the `--source' option. This does not require you to pre-empt the standard input for your source code; it allows you to easily mix command-line -and library source code (*note AWKPATH Variable::). The `--source' -option may also be used multiple times on the command line. +and library source code (*note AWKPATH Variable::). As with `-f', the +`--source' and `--include' options may also be used multiple times on +the command line. If no `-f' or `--source' option is specified, then `gawk' uses the first non-option command-line argument as the text of the program source code. If the environment variable `POSIXLY_CORRECT' exists, then `gawk' -behaves in strict POSIX mode, exactly as if you had supplied the -`--posix' command-line option. Many GNU programs look for this -environment variable to suppress extensions that conflict with POSIX, -but `gawk' behaves differently: it suppresses all extensions, even -those that do not conflict with POSIX, and behaves in strict POSIX -mode. If `--lint' is supplied on the command line and `gawk' turns on -POSIX mode because of `POSIXLY_CORRECT', then it issues a warning -message indicating that POSIX mode is in effect. You would typically -set this variable in your shell's startup file. For a -Bourne-compatible shell (such as Bash), you would add these lines to -the `.profile' file in your home directory: +behaves in strict POSIX mode, exactly as if you had supplied `--posix'. +Many GNU programs look for this environment variable to suppress +extensions that conflict with POSIX, but `gawk' behaves differently: it +suppresses all extensions, even those that do not conflict with POSIX, +and behaves in strict POSIX mode. If `--lint' is supplied on the +command line and `gawk' turns on POSIX mode because of +`POSIXLY_CORRECT', then it issues a warning message indicating that +POSIX mode is in effect. You would typically set this variable in your +shell's startup file. For a Bourne-compatible shell (such as Bash), +you would add these lines to the `.profile' file in your home directory: POSIXLY_CORRECT=true export POSIXLY_CORRECT @@ -2672,18 +2697,18 @@ begins scanning the argument list. The variable values given on the command line are processed for escape sequences (*note Escape Sequences::). (d.c.) - In some earlier implementations of `awk', when a variable assignment -occurred before any file names, the assignment would happen _before_ -the `BEGIN' rule was executed. `awk''s behavior was thus inconsistent; -some command-line assignments were available inside the `BEGIN' rule, -while others were not. Unfortunately, some applications came to depend -upon this "feature." When `awk' was changed to be more consistent, the -`-v' option was added to accommodate applications that depended upon -the old behavior. + In some very early implementations of `awk', when a variable +assignment occurred before any file names, the assignment would happen +_before_ the `BEGIN' rule was executed. `awk''s behavior was thus +inconsistent; some command-line assignments were available inside the +`BEGIN' rule, while others were not. Unfortunately, some applications +came to depend upon this "feature." When `awk' was changed to be more +consistent, the `-v' option was added to accommodate applications that +depended upon the old behavior. The variable assignment feature is most useful for assigning to variables such as `RS', `OFS', and `ORS', which control input and -output formats before scanning the data files. It is also useful for +output formats, before scanning the data files. It is also useful for controlling state if multiple passes are needed over a data file. For example: @@ -2718,7 +2743,7 @@ with `getline' (*note Getline/File::). In addition, `gawk' allows you to specify the special file name `/dev/stdin', both on the command line and with `getline'. Some other versions of `awk' also support this, but it is not standard. (Some -operating systems provide a `/dev/stdin' file in the file system, +operating systems provide a `/dev/stdin' file in the file system; however, `gawk' always processes this file name itself.)  @@ -2757,9 +2782,9 @@ colons(1). `gawk' gets its search path from the `AWKPATH' environment variable. If that variable does not exist, `gawk' uses a default path, `.:/usr/local/share/awk'.(2) - The search path feature is particularly useful for building libraries -of useful `awk' functions. The library files can be placed in a -standard directory in the default path and then specified on the + The search path feature is particularly helpful for building +libraries of useful `awk' functions. The library files can be placed +in a standard directory in the default path and then specified on the command line with a short file name. Otherwise, the full file name would have to be typed for each file. @@ -2776,7 +2801,7 @@ filename. NOTE: To include the current directory in the path, either place `.' explicitly in the path or write a null entry in the path. (A null entry is indicated by starting or ending the path with a - colon or by placing two colons next to each other (`::').) This + colon or by placing two colons next to each other [`::'].) This path search mechanism is similar to the shell's. However, `gawk' always looks in the current directory _before_ @@ -2785,8 +2810,8 @@ filename. If `AWKPATH' is not defined in the environment, `gawk' places its default search path into `ENVIRON["AWKPATH"]'. This makes it easy to -determine the actual search path that `gawk' will use from within an -`awk' program. +determine the actual search path that `gawk' used from within an `awk' +program. While you can change `ENVIRON["AWKPATH"]' within your `awk' program, this has no effect on the running program's behavior. This makes @@ -2810,13 +2835,13 @@ File: gawk.info, Node: AWKLIBPATH Variable, Next: Other Environment Variables, ------------------------------------------- The `AWKLIBPATH' environment variable is similar to the `AWKPATH' -variable, but it is used to search for shared libraries specified with -the `-l' option rather than for source files. If the library is not -found, the path is searched again after adding the appropriate shared -library suffix for the platform. For example, on GNU/Linux systems, -the suffix `.so' is used. The search path specified is also used for -libraries loaded via the `@load' keyword (*note Loading Shared -Libraries::). +variable, but it is used to search for loadable extensions (stored as +system shared libraries) specified with the `-l' option rather than for +source files. If the extension is not found, the path is searched +again after adding the appropriate shared library suffix for the +platform. For example, on GNU/Linux systems, the suffix `.so' is used. +The search path specified is also used for extensions loaded via the +`@load' keyword (*note Loading Shared Libraries::).  File: gawk.info, Node: Other Environment Variables, Prev: AWKLIBPATH Variable, Up: Environment Variables @@ -2833,7 +2858,7 @@ used by regular users. traditional and GNU extensions. *Note Options::. `GAWK_SOCK_RETRIES' - Controls the number of time `gawk' will attempt to retry a two-way + Controls the number of times `gawk' attempts to retry a two-way TCP/IP (socket) connection before giving up. *Note TCP/IP Networking::. @@ -2876,6 +2901,11 @@ change. The variables are: supposed to be differences, but occasionally theory and practice don't coordinate with each other.) +`GAWK_NO_PP_RUN' + If this variable exists, then when invoked with the + `--pretty-print' option, `gawk' skips running the program. This + variable will not survive into the next major release. + `GAWK_STACKSIZE' This specifies the amount by which `gawk' should grow its internal evaluation stack, when needed. @@ -2955,7 +2985,7 @@ enclosed in double quotes. NOTE: Keep in mind that this is a language construct and the file name cannot be a string variable, but rather just a literal string - in double quotes. + constant in double quotes. The files to be included may be nested; e.g., given a third script, namely `test3': @@ -3010,19 +3040,19 @@ and this also applies to files named with `@include'.  File: gawk.info, Node: Loading Shared Libraries, Next: Obsolete, Prev: Include Files, Up: Invoking Gawk -2.8 Loading Shared Libraries Into Your Program -============================================== +2.8 Loading Dynamic Extensions Into Your Program +================================================ This minor node describes a feature that is specific to `gawk'. - The `@load' keyword can be used to read external `awk' shared -libraries. This allows you to link in compiled code that may offer -superior performance and/or give you access to extended capabilities -not supported by the `awk' language. The `AWKLIBPATH' variable is used -to search for the shared library. Using `@load' is completely -equivalent to using the `-l' command-line option. + The `@load' keyword can be used to read external `awk' extensions +(stored as system shared libraries). This allows you to link in +compiled code that may offer superior performance and/or give you +access to extended capabilities not supported by the `awk' language. +The `AWKLIBPATH' variable is used to search for the extension. Using +`@load' is completely equivalent to using the `-l' command-line option. - If the shared library is not initially found in `AWKLIBPATH', another + If the extension is not initially found in `AWKLIBPATH', another search is conducted after appending the platform's default shared library suffix to the filename. For example, on GNU/Linux systems, the suffix `.so' is used. @@ -3037,7 +3067,7 @@ This is equivalent to the following example: For command-line usage, the `-l' option is more convenient, but `@load' is useful for embedding inside an `awk' source file that requires -access to a shared library. +access to an extension. *note Dynamic Extensions::, describes how to write extensions (in C or C++) that can be loaded with either `@load' or the `-l' option. @@ -3108,8 +3138,8 @@ A regular expression can be used as a pattern by enclosing it in slashes. Then the regular expression is tested against the entire text of each record. (Normally, it only needs to match some part of the text in order to succeed.) For example, the following prints the -second field of each record that contains the string `li' anywhere in -it: +second field of each record where the string `li' appears anywhere in +the record: $ awk '/li/ { print $2 }' mail-list -| 555-5553 @@ -3194,8 +3224,8 @@ apply to both string constants and regexp constants: A literal backslash, `\'. `\a' - The "alert" character, `Ctrl-g', ASCII code 7 (BEL). (This - usually makes some sort of audible noise.) + The "alert" character, `Ctrl-g', ASCII code 7 (BEL). (This often + makes some sort of audible noise.) `\b' Backspace, `Ctrl-h', ASCII code 8 (BS). @@ -3330,20 +3360,21 @@ sequences and that are not listed in the table stand for themselves: at the beginning of the string. It is important to realize that `^' does not match the beginning of - a line embedded in a string. The condition is not true in the - following example: + a line (the point right after a `\n' newline character) embedded + in a string. The condition is not true in the following example: if ("line1\nLINE 2" ~ /^L/) ... `$' This is similar to `^', but it matches only at the end of a string. For example, `p$' matches a record that ends with a `p'. The `$' - is an anchor and does not match the end of a line embedded in a - string. The condition in the following example is not true: + is an anchor and does not match the end of a line (the point right + before a `\n' newline character) embedded in a string. The + condition in the following example is not true: if ("line1\nLINE 2" ~ /1$/) ... -`. (period)' +`.' (period) This matches any single character, _including_ the newline character. For example, `.P' matches any single character followed by a `P' in a string. Using concatenation, we can make a @@ -3355,7 +3386,7 @@ sequences and that are not listed in the table stand for themselves: Otherwise, NUL is just another character. Other versions of `awk' may not be able to match the NUL character. -`[...]' +`['...`]' This is called a "bracket expression".(1) It matches any _one_ of the characters that are enclosed in the square brackets. For example, `[MVX]' matches any one of the characters `M', `V', or @@ -3363,7 +3394,7 @@ sequences and that are not listed in the table stand for themselves: square brackets of a bracket expression is given in *note Bracket Expressions::. -`[^ ...]' +`[^'...`]' This is a "complemented bracket expression". The first character after the `[' _must_ be a `^'. It matches any characters _except_ those in the square brackets. For example, `[^awk]' matches any @@ -3379,7 +3410,7 @@ sequences and that are not listed in the table stand for themselves: The alternation applies to the largest possible regexps on either side. -`(...)' +`('...`)' Parentheses are used for grouping in regular expressions, as in arithmetic. They can be used to concatenate regular expressions containing the alternation operator, `|'. For example, @@ -3406,8 +3437,8 @@ sequences and that are not listed in the table stand for themselves: This symbol is similar to `*', except that the preceding expression must be matched at least once. This means that `wh+y' would match `why' and `whhy', but not `wy', whereas `wh*y' would - match all three of these strings. The following is a simpler way - of writing the last `*' example: + match all three. The following is a simpler way of writing the + last `*' example: awk '/\(c[ad]+r x\)/ { print }' sample @@ -3416,9 +3447,9 @@ sequences and that are not listed in the table stand for themselves: expression can be matched either once or not at all. For example, `fe?d' matches `fed' and `fd', but nothing else. -`{N}' -`{N,}' -`{N,M}' +`{'N`}' +`{'N`,}' +`{'N`,'M`}' One or two numbers inside braces denote an "interval expression". If there is one number in the braces, the preceding regexp is repeated N times. If there are two numbers separated by a comma, @@ -3698,7 +3729,9 @@ works in any POSIX-compliant `awk'. Another method, specific to `gawk', is to set the variable `IGNORECASE' to a nonzero value (*note Built-in Variables::). When `IGNORECASE' is not zero, _all_ regexp and string operations ignore -case. Changing the value of `IGNORECASE' dynamically controls the +case. + + Changing the value of `IGNORECASE' dynamically controls the case-sensitivity of the program as it runs. Case is significant by default because `IGNORECASE' (like most variables) is initialized to zero: @@ -3721,9 +3754,6 @@ dynamically turn case-sensitivity on or off for all the rules at once. `IGNORECASE' from the command line is a way to make a program case-insensitive without having to edit it. - Both regexp and string comparison operations are affected by -`IGNORECASE'. - In multibyte locales, the equivalences between upper- and lowercase characters are tested based on the wide-character values of the locale's character set. Otherwise, the characters are tested based on @@ -3785,7 +3815,8 @@ The righthand side of a `~' or `!~' operator need not be a regexp constant (i.e., a string of characters between slashes). It may be any expression. The expression is evaluated and converted to a string if necessary; the contents of the string are then used as the regexp. A -regexp computed in this way is called a "dynamic regexp": +regexp computed in this way is called a "dynamic regexp" or a "computed +regexp": BEGIN { digits_regexp = "[[:digit:]]+" } $0 ~ digits_regexp { print } @@ -3833,8 +3864,8 @@ constants," for several reasons: Using `\n' in Bracket Expressions of Dynamic Regexps - Some commercial versions of `awk' do not allow the newline character -to be used inside a bracket expression for a dynamic regexp: + Some versions of `awk' do not allow the newline character to be used +inside a bracket expression for a dynamic regexp: $ awk '$0 ~ "[ \t\n]"' error--> awk: newline in character class [ @@ -4517,7 +4548,7 @@ letter): > { print $2 }' -| a -In this case, the first field is "null" or empty. +In this case, the first field is null, or empty. The stripping of leading and trailing whitespace also comes into play whenever `$0' is recomputed. For instance, study this pipeline: @@ -5993,11 +6024,11 @@ width. Here is a list of the format-control letters: the first byte of a string or to numeric values within the range of a single byte (0-255). -`%d, %i' +`%d', `%i' Print a decimal integer. The two control letters are equivalent. (The `%i' specification is for compatibility with ISO C.) -`%e, %E' +`%e', `%E' Print a number in scientific (exponential) notation; for example: printf "%4.3e\n", 1950 @@ -6028,7 +6059,7 @@ width. Here is a list of the format-control letters: The `%F' format is a POSIX extension to ISO C; not all systems support it. On those that don't, `gawk' uses `%f' instead. -`%g, %G' +`%g', `%G' Print a number in either scientific notation or in floating-point notation, whichever uses fewer characters; if the result is printed in scientific notation, `%G' uses `E' instead of `e'. @@ -6044,7 +6075,7 @@ width. Here is a list of the format-control letters: use, because all numbers in `awk' are floating-point; it is provided primarily for compatibility with C.) -`%x, %X' +`%x', `%X' Print an unsigned hexadecimal integer; `%X' uses the letters `A' through `F' instead of `a' through `f' (*note Nondecimal-numbers::). @@ -8264,7 +8295,7 @@ to avoid the problem the expression can be rewritten as `$($0++)--'. This table presents `awk''s operators, in order of highest to lowest precedence: -`(...)' +`('...`)' Grouping. `$' @@ -8285,7 +8316,7 @@ precedence: `+ -' Addition, subtraction. -`String Concatenation' +String Concatenation There is no special symbol for concatenation. The operands are simply written side by side (*note Concatenation::). @@ -9684,7 +9715,7 @@ automatically on certain occasions in order to provide information to your program. The variables that are specific to `gawk' are marked with a pound sign (`#'). -`ARGC, ARGV' +`ARGC', `ARGV' The command-line arguments available to `awk' programs are stored in an array called `ARGV'. `ARGC' is the number of command-line arguments present. *Note Other Arguments::. Unlike most `awk' @@ -9713,7 +9744,7 @@ with a pound sign (`#'). are any of `awk''s command-line options. *Note ARGC and ARGV::, for information about how `awk' uses these variables. (d.c.) -`ARGIND #' +`ARGIND' # The index in `ARGV' of the current file being processed. Every time `gawk' opens a new data file for processing, it sets `ARGIND' to the index in `ARGV' of the file name. When `gawk' is @@ -9746,7 +9777,7 @@ with a pound sign (`#'). `ENVIRON["AWKPATH"]', *note AWKPATH Variable:: and `ENVIRON["AWKLIBPATH"]', *note AWKLIBPATH Variable::). -`ERRNO #' +`ERRNO' # If a system error occurs during a redirection for `getline', during a read for `getline', or during a `close()' operation, then `ERRNO' contains a string describing the error. @@ -9792,7 +9823,7 @@ with a pound sign (`#'). create or remove fields from the current record. *Note Changing Fields::. -`FUNCTAB #' +`FUNCTAB' # An array whose indices and corresponding values are the names of all the user-defined or extension functions in the program. @@ -9806,7 +9837,7 @@ with a pound sign (`#'). beginning of the program's execution (*note Records::). `NR' is incremented each time a new record is read. -`PROCINFO #' +`PROCINFO' # The elements of this array provide access to information about the running `awk' program. The following elements (listed alphabetically) are guaranteed to be available: @@ -9939,7 +9970,7 @@ with a pound sign (`#'). of the string where the matched substring starts, or zero if no match was found. -`RT #' +`RT' # This is set each time a record is read. It contains the input text that matched the text denoted by `RS', the record separator. @@ -9947,7 +9978,7 @@ with a pound sign (`#'). implementations, or if `gawk' is in compatibility mode (*note Options::), it is not special. -`SYMTAB #' +`SYMTAB' # An array whose indices are the names of all currently defined global variables and arrays in the program. The array may be used for indirect access to read or write the value of a variable: @@ -11195,7 +11226,7 @@ brackets ([ ]): Return the positive square root of X. `gawk' prints a warning message if X is negative. Thus, `sqrt(4)' is 2. -`srand([X])' +`srand('[X]`)' Set the starting point, or seed, for generating random numbers to the value X. @@ -11262,8 +11293,8 @@ pound sign (`#'): `&' with `sub()', `gsub()', and `gensub()'. -`asort(SOURCE [, DEST [, HOW ] ]) #' -`asorti(SOURCE [, DEST [, HOW ] ]) #' +`asort('SOURCE [`,' DEST [`,' HOW ] ]`)' # +`asorti('SOURCE [`,' DEST [`,' HOW ] ]`)' # These two functions are similar in behavior, so they are described together. @@ -11313,7 +11344,7 @@ pound sign (`#'): `asort()' and `asorti()' are `gawk' extensions; they are not available in compatibility mode (*note Options::). -`gensub(REGEXP, REPLACEMENT, HOW [, TARGET]) #' +`gensub(REGEXP, REPLACEMENT, HOW' [`, TARGET']`)' # Search the target string TARGET for matches of the regular expression REGEXP. If HOW is a string beginning with `g' or `G' (short for "global"), then replace all matches of REGEXP with @@ -11366,7 +11397,7 @@ pound sign (`#'): `gensub()' is a `gawk' extension; it is not available in compatibility mode (*note Options::). -`gsub(REGEXP, REPLACEMENT [, TARGET])' +`gsub(REGEXP, REPLACEMENT' [`, TARGET']`)' Search TARGET for _all_ of the longest, leftmost, _nonoverlapping_ matching substrings it can find and replace them with REPLACEMENT. The `g' in `gsub()' stands for "global," which means replace @@ -11395,7 +11426,7 @@ pound sign (`#'): It is a fatal error to use a regexp constant for FIND. -`length([STRING])' +`length('[STRING]`)' Return the number of characters in STRING. If STRING is a number, the length of the digit string representing that number is returned. For example, `length("abcde")' is five. By contrast, @@ -11435,7 +11466,7 @@ pound sign (`#'): array argument is not portable. If `--posix' is supplied, using an array argument is a fatal error (*note Arrays::). -`match(STRING, REGEXP [, ARRAY])' +`match(STRING, REGEXP' [`, ARRAY']`)' Search STRING for the longest, leftmost substring matched by the regular expression, REGEXP and return the character position, or "index", at which that substring begins (one, if it starts at the @@ -11522,7 +11553,7 @@ pound sign (`#'): compatibility mode (*note Options::), using a third argument is a fatal error. -`patsplit(STRING, ARRAY [, FIELDPAT [, SEPS ] ]) #' +`patsplit(STRING, ARRAY' [`, FIELDPAT' [`, SEPS' ] ]`)' # Divide STRING into pieces defined by FIELDPAT and store the pieces in ARRAY and the separator strings in the SEPS array. The first piece is stored in `ARRAY[1]', the second piece in `ARRAY[2]', and @@ -11544,7 +11575,7 @@ pound sign (`#'): The `patsplit()' function is a `gawk' extension. In compatibility mode (*note Options::), it is not available. -`split(STRING, ARRAY [, FIELDSEP [, SEPS ] ])' +`split(STRING, ARRAY' [`, FIELDSEP' [`, SEPS' ] ]`)' Divide STRING into pieces separated by FIELDSEP and store the pieces in ARRAY and the separator strings in the SEPS array. The first piece is stored in `ARRAY[1]', the second piece in @@ -11617,7 +11648,7 @@ pound sign (`#'): assigns the string `pi = 3.14 (approx.)' to the variable `pival'. -`strtonum(STR) #' +`strtonum(STR)' # Examine STR and return its numeric value. If STR begins with a leading `0', `strtonum()' assumes that STR is an octal number. If STR begins with a leading `0x' or `0X', `strtonum()' assumes that @@ -11637,7 +11668,7 @@ pound sign (`#'): `strtonum()' is a `gawk' extension; it is not available in compatibility mode (*note Options::). -`sub(REGEXP, REPLACEMENT [, TARGET])' +`sub(REGEXP, REPLACEMENT' [`, TARGET']`)' Search TARGET, which is treated as a string, for the leftmost, longest substring matched by the regular expression REGEXP. Modify the entire string by replacing the matched text with @@ -11710,7 +11741,7 @@ pound sign (`#'): into a string, and then the value of that string is treated as the regexp to match. -`substr(STRING, START [, LENGTH])' +`substr(STRING, START' [`, LENGTH' ]`)' Return a LENGTH-character-long substring of STRING, starting at character number START. The first character of a string is character number one.(3) For example, `substr("washington", 5, 3)' @@ -11967,7 +11998,7 @@ File: gawk.info, Node: I/O Functions, Next: Time Functions, Prev: String Func The following functions relate to input/output (I/O). Optional parameters are enclosed in square brackets ([ ]): -`close(FILENAME [, HOW])' +`close('FILENAME [`,' HOW]`)' Close the file FILENAME for input or output. Alternatively, the argument may be a shell command that was used for creating a coprocess, or for redirecting to or from a pipe; then the @@ -11982,7 +12013,7 @@ parameters are enclosed in square brackets ([ ]): not matter. *Note Two-way I/O::, which discusses this feature in more detail and gives an example. -`fflush([FILENAME])' +`fflush('[FILENAME]`)' Flush any buffered output associated with FILENAME, which is either a file opened for writing or a shell command for redirecting output to a pipe or coprocess. @@ -12189,7 +12220,7 @@ enclosed in square brackets ([ ]): If DATESPEC does not contain enough elements or if the resulting time is out of range, `mktime()' returns -1. -`strftime([FORMAT [, TIMESTAMP [, UTC-FLAG]]])' +``strftime(' [FORMAT [`,' TIMESTAMP [`,' UTC-FLAG ]]]`)'' Format the time specified by TIMESTAMP based on the contents of the FORMAT string and return the result. It is similar to the function of the same name in ISO C. If UTC-FLAG is present and is @@ -12507,23 +12538,23 @@ again with `10111001' and shift it left by three bits, you end up with `11001000'. `gawk' provides built-in functions that implement the bitwise operations just described. They are: -`and(V1, V2 [, ...])' +``and(V1, V2' [`,' ...]`)'' Return the bitwise AND of the arguments. There must be at least two. -`compl(VAL)' +``compl(VAL)'' Return the bitwise complement of VAL. -`lshift(VAL, COUNT)' +``lshift(VAL, COUNT)'' Return the value of VAL, shifted left by COUNT bits. -`or(V1, V2 [, ...])' +``or(V1, V2' [`,' ...]`)'' Return the bitwise OR of the arguments. There must be at least two. -`rshift(VAL, COUNT)' +``rshift(VAL, COUNT)'' Return the value of VAL, shifted right by COUNT bits. -`xor(V1, V2 [, ...])' +``xor(V1, V2' [`,' ...]`)'' Return the bitwise XOR of the arguments. There must be at least two. @@ -12639,7 +12670,7 @@ descriptions here are purposely brief. *Note Internationalization::, for the full story. Optional parameters are enclosed in square brackets ([ ]): -`bindtextdomain(DIRECTORY [, DOMAIN])' +``bindtextdomain(DIRECTORY' [`,' DOMAIN ]`)'' Set the directory in which `gawk' will look for message translation files, in case they will not or cannot be placed in the "standard" locations (e.g., during testing). It returns the @@ -12649,13 +12680,13 @@ brackets ([ ]): the null string (`""'), then `bindtextdomain()' returns the current binding for the given DOMAIN. -`dcgettext(STRING [, DOMAIN [, CATEGORY]])' +``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 value of `TEXTDOMAIN'. The default value for CATEGORY is `"LC_MESSAGES"'. -`dcngettext(STRING1, STRING2, NUMBER [, DOMAIN [, CATEGORY]])' +``dcngettext(STRING1, STRING2, NUMBER' [`,' DOMAIN [`,' CATEGORY ]]`)'' 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, @@ -17577,10 +17608,10 @@ are several cases of interest: programming trick. Don't worry about it if you are not familiar with `sh'.) -`-v, -F' +`-v', `-F' These are saved and passed on to `gawk'. -`-f, --file, --file=, -Wfile=' +`-f', `--file', `--file=', `-Wfile=' The file name is appended to the shell variable `program' with an `@include' statement. The `expr' utility is used to remove the leading option part of the argument (e.g., `--file='). (Typical @@ -17589,10 +17620,10 @@ are several cases of interest: sequences in their arguments, possibly mangling the program text. Using `expr' avoids this problem.) -`--source, --source=, -Wsource=' +`--source', `--source=', `-Wsource=' The source text is appended to `program'. -`--version, -Wversion' +`--version', `-Wversion' `igawk' prints its version number, runs `gawk --version' to get the `gawk' version information, and then exits. @@ -19067,7 +19098,7 @@ internationalization: for translation at runtime. String constants without a leading underscore are not translated. -`dcgettext(STRING [, DOMAIN [, CATEGORY]])' +``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 value of `TEXTDOMAIN'. The default value for CATEGORY is @@ -19084,7 +19115,7 @@ internationalization: be simple and to allow for reasonable `awk'-style default arguments. -`dcngettext(STRING1, STRING2, NUMBER [, DOMAIN [, CATEGORY]])' +``dcngettext(STRING1, STRING2, NUMBER' [`,' DOMAIN [`,' CATEGORY ]]`)'' 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, @@ -19095,7 +19126,7 @@ internationalization: The same remarks about argument order as for the `dcgettext()' function apply. -`bindtextdomain(DIRECTORY [, DOMAIN])' +``bindtextdomain(DIRECTORY' [`,' DOMAIN ]`)'' Change the directory in which `gettext' looks for `.gmo' files, in case they will not or cannot be placed in the standard locations (e.g., during testing). Return the directory in which DOMAIN is @@ -20276,16 +20307,16 @@ from a file. The commands are: `prompt' The debugger prompt. The default is `gawk> '. - `save_history [on | off]' + `save_history' [`on' | `off'] Save command history to file `./.gawk_history'. The default is `on'. - `save_options [on | off]' + `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. - `trace [on | off]' + `trace' [`on' | `off'] Turn instruction tracing on or off. The default is `off'. `save' FILENAME @@ -20414,7 +20445,7 @@ categories, as follows: accidentally type `q' or `quit', to make sure you really want to quit. -`trace' `on' | `off' +`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'. @@ -24281,8 +24312,8 @@ create a GNU/Linux shared library: } The `AWKLIBPATH' environment variable tells `gawk' where to find -shared libraries (*note Finding Extensions::). We set it to the -current directory and run the program: +extensions (*note Finding Extensions::). We set it to the current +directory and run the program: $ AWKLIBPATH=$PWD gawk -f testff.awk -| /tmp @@ -24355,7 +24386,7 @@ File: gawk.info, Node: Extension Sample File Functions, Next: Extension Sample The `filefuncs' extension provides three different functions, as follows: The usage is: -`@load "filefuncs"' +@load "filefuncs" This is how you load the extension. `result = chdir("/some/directory")' @@ -24364,7 +24395,7 @@ follows: The usage is: success or less than zero upon error. In the latter case it updates `ERRNO'. -`result = stat("/some/path", statdata [, follow])' +`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'. @@ -30049,8 +30080,8 @@ Index * ! (exclamation point), !~ operator <6>: Case-sensitivity. (line 26) * ! (exclamation point), !~ operator: Regexp Usage. (line 19) * " (double quote) in shell commands: Read Terminal. (line 25) -* " (double quote), in regexp constants: Computed Regexps. (line 28) -* " (double quote), in shell commands: Quoting. (line 37) +* " (double quote), in regexp constants: Computed Regexps. (line 29) +* " (double quote), in shell commands: Quoting. (line 54) * # (number sign), #! (executable scripts): Executable Scripts. (line 6) * # (number sign), commenting: Comments. (line 6) @@ -30068,15 +30099,15 @@ Index (line 6) * ' (single quote): One-shot. (line 15) * ' (single quote) in gawk command lines: Long. (line 33) -* ' (single quote), in shell commands: Quoting. (line 31) +* ' (single quote), in shell commands: Quoting. (line 48) * ' (single quote), vs. apostrophe: Comments. (line 27) -* ' (single quote), with double quotes: Quoting. (line 53) +* ' (single quote), with double quotes: Quoting. (line 70) * () (parentheses), in a profile: Profiling. (line 146) -* () (parentheses), regexp operator: Regexp Operators. (line 79) +* () (parentheses), regexp operator: Regexp Operators. (line 80) * * (asterisk), * operator, as multiplication operator: Precedence. (line 55) * * (asterisk), * operator, as regexp operator: Regexp Operators. - (line 87) + (line 88) * * (asterisk), * operator, null strings, matching: Gory Details. (line 164) * * (asterisk), ** operator <1>: Precedence. (line 49) @@ -30090,7 +30121,7 @@ Index * + (plus sign), ++ operator: Increment Ops. (line 11) * + (plus sign), += operator <1>: Precedence. (line 95) * + (plus sign), += operator: Assignment Ops. (line 82) -* + (plus sign), regexp operator: Regexp Operators. (line 102) +* + (plus sign), regexp operator: Regexp Operators. (line 103) * , (comma), in range patterns: Ranges. (line 6) * - (hyphen), - operator: Precedence. (line 52) * - (hyphen), -- operator <1>: Precedence. (line 46) @@ -30100,7 +30131,7 @@ Index * - (hyphen), filenames beginning with: Options. (line 59) * - (hyphen), in bracket expressions: Bracket Expressions. (line 17) * --assign option: Options. (line 32) -* --bignum option: Options. (line 201) +* --bignum option: Options. (line 205) * --characters-as-bytes option: Options. (line 68) * --copyright option: Options. (line 88) * --debug option: Options. (line 108) @@ -30120,22 +30151,22 @@ Index * --gen-pot option: Options. (line 147) * --help option: Options. (line 154) * --include option: Options. (line 159) -* --lint option <1>: Options. (line 182) +* --lint option <1>: Options. (line 185) * --lint option: Command Line. (line 20) -* --lint-old option: Options. (line 288) +* --lint-old option: Options. (line 295) * --load option: Options. (line 173) * --non-decimal-data option <1>: Nondecimal Data. (line 6) -* --non-decimal-data option: Options. (line 207) +* --non-decimal-data option: Options. (line 211) * --non-decimal-data option, strtonum() function and: Nondecimal Data. (line 36) -* --optimize option: Options. (line 228) -* --posix option: Options. (line 247) -* --posix option, --traditional option and: Options. (line 266) -* --pretty-print option: Options. (line 220) +* --optimize option: Options. (line 237) +* --posix option: Options. (line 254) +* --posix option, --traditional option and: Options. (line 273) +* --pretty-print option: Options. (line 224) * --profile option <1>: Profiling. (line 12) -* --profile option: Options. (line 235) -* --re-interval option: Options. (line 272) -* --sandbox option: Options. (line 279) +* --profile option: Options. (line 242) +* --re-interval option: Options. (line 279) +* --sandbox option: Options. (line 286) * --sandbox option, disabling system() function: I/O Functions. (line 94) * --sandbox option, input redirection with getline: Getline. (line 19) @@ -30143,9 +30174,9 @@ Index (line 6) * --source option: Options. (line 117) * --traditional option: Options. (line 81) -* --traditional option, --posix option and: Options. (line 266) -* --use-lc-numeric option: Options. (line 215) -* --version option: Options. (line 293) +* --traditional option, --posix option and: Options. (line 273) +* --use-lc-numeric option: Options. (line 219) +* --version option: Options. (line 300) * --with-whiny-user-strftime configuration option: Additional Configuration Options. (line 35) * -b option: Options. (line 68) @@ -30158,29 +30189,29 @@ Index * -f option: Options. (line 25) * -F option: Options. (line 21) * -f option: Long. (line 12) -* -F option, -Ft sets FS to TAB: Options. (line 301) +* -F option, -Ft sets FS to TAB: Options. (line 308) * -F option, command line: Command Line Field Separator. (line 6) -* -f option, multiple uses: Options. (line 306) +* -f option, multiple uses: Options. (line 313) * -g option: Options. (line 147) * -h option: Options. (line 154) * -i option: Options. (line 159) -* -L option: Options. (line 288) +* -L option: Options. (line 295) * -l option: Options. (line 173) -* -M option: Options. (line 201) -* -N option: Options. (line 215) -* -n option: Options. (line 207) -* -O option: Options. (line 228) -* -o option: Options. (line 220) -* -P option: Options. (line 247) -* -p option: Options. (line 235) -* -r option: Options. (line 272) -* -S option: Options. (line 279) +* -M option: Options. (line 205) +* -N option: Options. (line 219) +* -n option: Options. (line 211) +* -O option: Options. (line 237) +* -o option: Options. (line 224) +* -P option: Options. (line 254) +* -p option: Options. (line 242) +* -r option: Options. (line 279) +* -S option: Options. (line 286) * -v option: Assignment Options. (line 12) -* -V option: Options. (line 293) +* -V option: Options. (line 300) * -v option: Options. (line 32) * -W option: Options. (line 46) -* . (period), regexp operator: Regexp Operators. (line 43) +* . (period), regexp operator: Regexp Operators. (line 44) * .gmo files: Explaining gettext. (line 41) * .gmo files, converting from .po: I18N Example. (line 62) * .gmo files, specifying directory of <1>: Programmer i18n. (line 47) @@ -30232,8 +30263,8 @@ Index * ? (question mark), ?: operator: Precedence. (line 92) * ? (question mark), regexp operator <1>: GNU Regexp Operators. (line 59) -* ? (question mark), regexp operator: Regexp Operators. (line 111) -* [] (square brackets), regexp operator: Regexp Operators. (line 55) +* ? (question mark), regexp operator: Regexp Operators. (line 112) +* [] (square brackets), regexp operator: Regexp Operators. (line 56) * \ (backslash): Comments. (line 50) * \ (backslash) in shell commands: Read Terminal. (line 25) * \ (backslash), \" escape sequence: Escape Sequences. (line 76) @@ -30281,8 +30312,8 @@ Index * \ (backslash), in escape sequences: Escape Sequences. (line 6) * \ (backslash), in escape sequences, POSIX and: Escape Sequences. (line 112) -* \ (backslash), in regexp constants: Computed Regexps. (line 28) -* \ (backslash), in shell commands: Quoting. (line 31) +* \ (backslash), in regexp constants: Computed Regexps. (line 29) +* \ (backslash), in shell commands: Quoting. (line 48) * \ (backslash), regexp operator: Regexp Operators. (line 18) * ^ (caret), ^ operator: Precedence. (line 49) * ^ (caret), ^= operator <1>: Precedence. (line 95) @@ -30436,7 +30467,7 @@ Index * asterisk (*), * operator, as multiplication operator: Precedence. (line 55) * asterisk (*), * operator, as regexp operator: Regexp Operators. - (line 87) + (line 88) * asterisk (*), * operator, null strings, matching: Gory Details. (line 164) * asterisk (*), ** operator <1>: Precedence. (line 49) @@ -30450,7 +30481,7 @@ Index * awf (amazingly workable formatter) program: Glossary. (line 25) * awk debugging, enabling: Options. (line 108) * awk language, POSIX version: Assignment Ops. (line 136) -* awk profiling, enabling: Options. (line 235) +* awk profiling, enabling: Options. (line 242) * awk programs <1>: Two Rules. (line 6) * awk programs <2>: Executable Scripts. (line 6) * awk programs: Getting Started. (line 12) @@ -30555,8 +30586,8 @@ Index * backslash (\), in escape sequences: Escape Sequences. (line 6) * backslash (\), in escape sequences, POSIX and: Escape Sequences. (line 112) -* backslash (\), in regexp constants: Computed Regexps. (line 28) -* backslash (\), in shell commands: Quoting. (line 31) +* backslash (\), in regexp constants: Computed Regexps. (line 29) +* backslash (\), in shell commands: Quoting. (line 48) * backslash (\), regexp operator: Regexp Operators. (line 18) * backtrace debugger command: Execution Stack. (line 13) * Beebe, Nelson H.F. <1>: Other Versions. (line 78) @@ -30617,14 +30648,14 @@ Index * braces ({}), actions and: Action Overview. (line 19) * braces ({}), statements, grouping: Statements. (line 10) * bracket expressions <1>: Bracket Expressions. (line 6) -* bracket expressions: Regexp Operators. (line 55) +* bracket expressions: Regexp Operators. (line 56) * bracket expressions, character classes: Bracket Expressions. (line 30) * bracket expressions, collating elements: Bracket Expressions. (line 69) * bracket expressions, collating symbols: Bracket Expressions. (line 76) -* bracket expressions, complemented: Regexp Operators. (line 63) +* bracket expressions, complemented: Regexp Operators. (line 64) * bracket expressions, equivalence classes: Bracket Expressions. (line 82) * bracket expressions, non-ASCII: Bracket Expressions. (line 69) @@ -30665,6 +30696,7 @@ Index * Brian Kernighan's awk, extensions: BTL. (line 6) * Brian Kernighan's awk, source code: Other Versions. (line 13) * Brini, Davide: Signature Program. (line 6) +* Brink, Jeroen: DOS Quoting. (line 10) * Broder, Alan J.: Contributors. (line 88) * Brown, Martin: Contributors. (line 82) * BSD-based operating systems: Glossary. (line 616) @@ -30710,14 +30742,14 @@ Index * CGI, awk scripts for: Options. (line 125) * changing precision of a number: Changing Precision. (line 6) * character classes, See bracket expressions: Regexp Operators. - (line 55) + (line 56) * character lists in regular expression: Bracket Expressions. (line 6) -* character lists, See bracket expressions: Regexp Operators. (line 55) +* character lists, See bracket expressions: Regexp Operators. (line 56) * character sets (machine character encodings) <1>: Glossary. (line 133) * character sets (machine character encodings): Ordinal Functions. (line 45) * character sets, See Also bracket expressions: Regexp Operators. - (line 55) + (line 56) * characters, counting: Wc Program. (line 6) * characters, transliterating: Translate Program. (line 6) * characters, values of as numbers: Ordinal Functions. (line 6) @@ -30861,7 +30893,7 @@ Index * cosine: Numeric Functions. (line 15) * counting: Wc Program. (line 6) * csh utility: Statements/Lines. (line 44) -* csh utility, POSIXLY_CORRECT environment variable: Options. (line 348) +* csh utility, POSIXLY_CORRECT environment variable: Options. (line 355) * csh utility, |& operator, comparison with: Two-way I/O. (line 44) * ctime() user-defined function: Function Example. (line 73) * currency symbols, localization: Explaining gettext. (line 103) @@ -31043,7 +31075,7 @@ Index * debugger, read commands from a file: Debugger Info. (line 96) * debugging awk programs: Debugger. (line 6) * debugging gawk, bug reports: Bugs. (line 9) -* decimal point character, locale specific: Options. (line 263) +* 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) @@ -31132,7 +31164,7 @@ Index * directories, command line: Command line directories. (line 6) * directories, searching: Igawk Program. (line 368) -* directories, searching for shared libraries: AWKLIBPATH Variable. +* directories, searching for loadable extensions: AWKLIBPATH Variable. (line 6) * directories, searching for source files: AWKPATH Variable. (line 6) * disable breakpoint: Breakpoint Control. (line 69) @@ -31153,8 +31185,8 @@ Index * dollar sign ($), regexp operator: Regexp Operators. (line 35) * double precision floating-point: General Arithmetic. (line 21) * double quote (") in shell commands: Read Terminal. (line 25) -* double quote ("), in regexp constants: Computed Regexps. (line 28) -* double quote ("), in shell commands: Quoting. (line 37) +* double quote ("), in regexp constants: Computed Regexps. (line 29) +* double quote ("), in shell commands: Quoting. (line 54) * down debugger command: Execution Stack. (line 21) * Drepper, Ulrich: Acknowledgments. (line 52) * dump all variables of a program: Options. (line 93) @@ -31470,7 +31502,7 @@ Index * FS variable, --field-separator option and: Options. (line 21) * FS variable, as null string: Single Character Fields. (line 20) -* FS variable, as TAB character: Options. (line 259) +* FS variable, as TAB character: Options. (line 266) * FS variable, changing value of: Field Separators. (line 35) * FS variable, running awk programs and: Cut Program. (line 68) * FS variable, setting from command line: Command Line Field Separator. @@ -31560,7 +31592,7 @@ Index (line 138) * gawk, ERRNO variable in: Getline. (line 19) * gawk, escape sequences: Escape Sequences. (line 124) -* gawk, extensions, disabling: Options. (line 247) +* gawk, extensions, disabling: Options. (line 254) * gawk, features, adding: Adding Code. (line 6) * gawk, features, advanced: Advanced Features. (line 6) * gawk, field separators and: User-modified. (line 77) @@ -31591,7 +31623,7 @@ Index (line 13) * gawk, interpreter, adding code to: Using Internal File Ops. (line 6) -* gawk, interval expressions and: Regexp Operators. (line 139) +* gawk, interval expressions and: Regexp Operators. (line 140) * gawk, line continuation in: Conditional Exp. (line 34) * gawk, LINT variable in: User-modified. (line 98) * gawk, list of contributors to: Contributors. (line 6) @@ -31609,7 +31641,7 @@ Index (line 26) * gawk, regular expressions, operators: GNU Regexp Operators. (line 6) -* gawk, regular expressions, precedence: Regexp Operators. (line 161) +* gawk, regular expressions, precedence: Regexp Operators. (line 162) * gawk, RT variable in <1>: Auto-set. (line 266) * gawk, RT variable in <2>: Multiple Line. (line 129) * gawk, RT variable in: Records. (line 132) @@ -31621,7 +31653,7 @@ Index * gawk, TEXTDOMAIN variable in: User-modified. (line 162) * gawk, timestamps: Time Functions. (line 6) * gawk, uses for: Preface. (line 36) -* gawk, versions of, information about, printing: Options. (line 293) +* gawk, versions of, information about, printing: Options. (line 300) * gawk, VMS version of: VMS Installation. (line 6) * gawk, word-boundary operator: GNU Regexp Operators. (line 63) @@ -31722,7 +31754,7 @@ Index * help debugger command: Miscellaneous Debugger Commands. (line 66) * hexadecimal numbers: Nondecimal-numbers. (line 6) -* hexadecimal values, enabling interpretation of: Options. (line 207) +* hexadecimal values, enabling interpretation of: Options. (line 211) * history expansion, in debugger: Readline Support. (line 6) * histsort.awk program: History Sorting. (line 25) * Hughes, Phil: Acknowledgments. (line 43) @@ -31832,7 +31864,7 @@ Index * internationalizing a program: Explaining gettext. (line 6) * interpreted programs <1>: Glossary. (line 357) * interpreted programs: Basic High Level. (line 15) -* interval expressions, regexp operator: Regexp Operators. (line 116) +* interval expressions, regexp operator: Regexp Operators. (line 117) * inventory-shipped file: Sample Data Files. (line 32) * invoke shell command: I/O Functions. (line 72) * isarray: Type Functions. (line 11) @@ -31935,9 +31967,9 @@ Index * lint checking, array subscripts: Uninitialized Subscripts. (line 43) * lint checking, empty programs: Command Line. (line 16) -* lint checking, issuing warnings: Options. (line 182) +* lint checking, issuing warnings: Options. (line 185) * lint checking, POSIXLY_CORRECT environment variable: Options. - (line 332) + (line 340) * lint checking, undefined functions: Pass By Value/Reference. (line 88) * LINT variable: User-modified. (line 98) @@ -31948,10 +31980,10 @@ Index * list debugger command: Miscellaneous Debugger Commands. (line 72) * list function definitions, in debugger: Debugger Info. (line 30) -* loading, library: Options. (line 173) +* loading, extensions: Options. (line 173) * local variables, in a function: Variable Scope. (line 6) * locale categories: Explaining gettext. (line 80) -* locale decimal point character: Options. (line 263) +* locale decimal point character: Options. (line 270) * locale, definition of: Locales. (line 6) * localization: I18N and L10N. (line 6) * localization, See internationalization, localization: I18N and L10N. @@ -32035,13 +32067,13 @@ Index * networks, programming: TCP/IP Networking. (line 6) * networks, support for: Special Network. (line 6) * newlines <1>: Boolean Ops. (line 67) -* newlines <2>: Options. (line 253) +* newlines <2>: Options. (line 260) * newlines: Statements/Lines. (line 6) * newlines, as field separators: Default Field Splitting. (line 6) * newlines, as record separators: Records. (line 20) -* newlines, in dynamic regexps: Computed Regexps. (line 58) -* newlines, in regexp constants: Computed Regexps. (line 68) +* newlines, in dynamic regexps: Computed Regexps. (line 59) +* newlines, in regexp constants: Computed Regexps. (line 69) * newlines, printing: Print Examples. (line 12) * newlines, separating statements in actions <1>: Statements. (line 10) * newlines, separating statements in actions: Action Overview. @@ -32081,7 +32113,7 @@ Index * null strings <3>: Regexp Field Splitting. (line 43) * null strings: Records. (line 122) -* null strings in gawk arguments, quoting and: Quoting. (line 62) +* null strings in gawk arguments, quoting and: Quoting. (line 79) * null strings, and deleting array elements: Delete. (line 27) * null strings, as array subscripts: Uninitialized Subscripts. (line 43) @@ -32112,7 +32144,7 @@ Index * oawk utility: Names. (line 10) * obsolete features: Obsolete. (line 6) * octal numbers: Nondecimal-numbers. (line 6) -* octal values, enabling interpretation of: Options. (line 207) +* octal values, enabling interpretation of: Options. (line 211) * OFMT variable <1>: User-modified. (line 115) * OFMT variable <2>: Conversion. (line 55) * OFMT variable: OFMT. (line 15) @@ -32192,7 +32224,7 @@ Index * P1003.1 POSIX standard: Glossary. (line 454) * parent process ID of gawk process: Auto-set. (line 186) * parentheses (), in a profile: Profiling. (line 146) -* parentheses (), regexp operator: Regexp Operators. (line 79) +* parentheses (), regexp operator: Regexp Operators. (line 80) * password file: Passwd Functions. (line 16) * patsplit: String Functions. (line 291) * patterns: Patterns and Actions. @@ -32213,7 +32245,7 @@ Index * percent sign (%), % operator: Precedence. (line 55) * percent sign (%), %= operator <1>: Precedence. (line 95) * percent sign (%), %= operator: Assignment Ops. (line 129) -* period (.), regexp operator: Regexp Operators. (line 43) +* period (.), regexp operator: Regexp Operators. (line 44) * Perl: Future Extensions. (line 6) * Peters, Arno: Contributors. (line 85) * Peterson, Hal: Contributors. (line 39) @@ -32230,7 +32262,7 @@ Index * plus sign (+), ++ operator: Increment Ops. (line 11) * plus sign (+), += operator <1>: Precedence. (line 95) * plus sign (+), += operator: Assignment Ops. (line 82) -* plus sign (+), regexp operator: Regexp Operators. (line 102) +* plus sign (+), regexp operator: Regexp Operators. (line 103) * pointers to functions: Indirect Calls. (line 6) * portability: Escape Sequences. (line 94) * portability, #! (executable scripts): Executable Scripts. (line 33) @@ -32256,7 +32288,7 @@ Index * portability, NF variable, decrementing: Changing Fields. (line 115) * portability, operators: Increment Ops. (line 60) * portability, operators, not in POSIX awk: Precedence. (line 98) -* portability, POSIXLY_CORRECT environment variable: Options. (line 353) +* portability, POSIXLY_CORRECT environment variable: Options. (line 360) * portability, substr() function: String Functions. (line 510) * portable object files <1>: Translator i18n. (line 6) * portable object files: Explaining gettext. (line 36) @@ -32296,26 +32328,26 @@ Index * POSIX awk, functions and, gsub()/sub(): Gory Details. (line 54) * POSIX awk, functions and, length(): String Functions. (line 173) * POSIX awk, GNU long options and: Options. (line 15) -* POSIX awk, interval expressions in: Regexp Operators. (line 135) +* POSIX awk, interval expressions in: Regexp Operators. (line 136) * POSIX awk, next/nextfile statements and: Next Statement. (line 45) * POSIX awk, numeric strings and: Variable Typing. (line 6) * POSIX awk, OFMT variable and <1>: Conversion. (line 55) * POSIX awk, OFMT variable and: OFMT. (line 27) -* POSIX awk, period (.), using: Regexp Operators. (line 50) +* POSIX awk, period (.), using: Regexp Operators. (line 51) * POSIX awk, printf format strings and: Format Modifiers. (line 159) -* POSIX awk, regular expressions and: Regexp Operators. (line 161) +* POSIX awk, regular expressions and: Regexp Operators. (line 162) * POSIX awk, timestamps and: Time Functions. (line 6) * POSIX awk, | I/O operator and: Getline/Pipe. (line 55) -* POSIX mode: Options. (line 247) +* POSIX mode: Options. (line 254) * POSIX, awk and: Preface. (line 23) * POSIX, gawk extensions not included in: POSIX/GNU. (line 6) * POSIX, programs, implementing in awk: Clones. (line 6) -* POSIXLY_CORRECT environment variable: Options. (line 332) +* POSIXLY_CORRECT environment variable: Options. (line 340) * PREC variable <1>: Setting Precision. (line 6) * PREC variable: User-modified. (line 134) * precedence <1>: Precedence. (line 6) * precedence: Increment Ops. (line 60) -* precedence, regexp operators: Regexp Operators. (line 156) +* precedence, regexp operators: Regexp Operators. (line 157) * print debugger command: Viewing And Changing Data. (line 36) * print statement: Printing. (line 16) @@ -32403,13 +32435,13 @@ Index * question mark (?), ?: operator: Precedence. (line 92) * question mark (?), regexp operator <1>: GNU Regexp Operators. (line 59) -* question mark (?), regexp operator: Regexp Operators. (line 111) +* question mark (?), regexp operator: Regexp Operators. (line 112) * QuikTrim Awk: Other Versions. (line 134) * quit debugger command: Miscellaneous Debugger Commands. (line 99) * QUIT signal (MS-Windows): Profiling. (line 214) * quoting in gawk command lines: Long. (line 26) -* quoting in gawk command lines, tricks for: Quoting. (line 71) +* quoting in gawk command lines, tricks for: Quoting. (line 88) * quoting, for small awk programs: Comments. (line 27) * r debugger command (alias for run): Debugger Execution Control. (line 62) @@ -32467,8 +32499,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 28) -* regexp constants, vs. string constants: Computed Regexps. (line 38) +* regexp constants, slashes vs. quotes: Computed Regexps. (line 29) +* regexp constants, vs. string constants: Computed Regexps. (line 39) * register extension: Registration Functions. (line 6) * regular expressions: Regexp. (line 6) @@ -32486,10 +32518,10 @@ Index (line 57) * regular expressions, dynamic: Computed Regexps. (line 6) * regular expressions, dynamic, with embedded newlines: Computed Regexps. - (line 58) + (line 59) * regular expressions, gawk, command-line options: GNU Regexp Operators. (line 70) -* regular expressions, interval expressions and: Options. (line 272) +* regular expressions, interval expressions and: Options. (line 279) * regular expressions, leftmost longest match: Leftmost Longest. (line 6) * regular expressions, operators <1>: Regexp Operators. (line 6) @@ -32501,7 +32533,7 @@ Index * regular expressions, operators, gawk: GNU Regexp Operators. (line 6) * regular expressions, operators, precedence of: Regexp Operators. - (line 156) + (line 157) * regular expressions, searching for: Egrep Program. (line 6) * relational operators, See comparison operators: Typing and Comparison. (line 9) @@ -32573,7 +32605,7 @@ Index (line 68) * sample debugging session: Sample Debugging Session. (line 6) -* sandbox mode: Options. (line 279) +* sandbox mode: Options. (line 286) * save debugger options: Debugger Info. (line 84) * scalar or array: Type Functions. (line 11) * scalar values: Basic Data Typing. (line 13) @@ -32588,7 +32620,7 @@ Index * search paths <1>: VMS Running. (line 58) * search paths <2>: PC Using. (line 10) * search paths: Igawk Program. (line 368) -* search paths, for shared libraries: AWKLIBPATH Variable. (line 6) +* search paths, for loadable extensions: AWKLIBPATH Variable. (line 6) * search paths, for source files <1>: VMS Running. (line 58) * search paths, for source files <2>: PC Using. (line 10) * search paths, for source files <3>: Igawk Program. (line 368) @@ -32687,7 +32719,7 @@ Index (line 145) * sidebar, Understanding $0: Changing Fields. (line 134) * sidebar, Using \n in Bracket Expressions of Dynamic Regexps: Computed Regexps. - (line 56) + (line 57) * sidebar, Using close()'s Return Value: Close Files And Pipes. (line 128) * SIGHUP signal, for dynamic profiling: Profiling. (line 211) @@ -32706,9 +32738,9 @@ Index * single precision floating-point: General Arithmetic. (line 21) * single quote ('): One-shot. (line 15) * single quote (') in gawk command lines: Long. (line 33) -* single quote ('), in shell commands: Quoting. (line 31) +* single quote ('), in shell commands: Quoting. (line 48) * single quote ('), vs. apostrophe: Comments. (line 27) -* single quote ('), with double quotes: Quoting. (line 53) +* single quote ('), with double quotes: Quoting. (line 70) * single-character fields: Single Character Fields. (line 6) * single-step execution, in the debugger: Debugger Execution Control. @@ -32754,7 +32786,7 @@ Index * sprintf() function, print/printf statements and: Round Function. (line 6) * sqrt: Numeric Functions. (line 78) -* square brackets ([]), regexp operator: Regexp Operators. (line 55) +* square brackets ([]), regexp operator: Regexp Operators. (line 56) * square root: Numeric Functions. (line 78) * srand: Numeric Functions. (line 82) * stack frame: Debugging Terms. (line 10) @@ -32783,7 +32815,7 @@ Index (line 46) * strftime: Time Functions. (line 48) * string constants: Scalar Constants. (line 15) -* string constants, vs. regexp constants: Computed Regexps. (line 38) +* string constants, vs. regexp constants: Computed Regexps. (line 39) * string extraction (internationalization): String Extraction. (line 6) * string length: String Functions. (line 164) @@ -32892,7 +32924,7 @@ Index * translate string: I18N Functions. (line 22) * translate.awk program: Translate Program. (line 55) * treating files, as single records: Records. (line 219) -* troubleshooting, --non-decimal-data option: Options. (line 207) +* troubleshooting, --non-decimal-data option: Options. (line 211) * troubleshooting, == operator: Comparison Operators. (line 37) * troubleshooting, awk uses FS not IFS: Field Separators. (line 30) @@ -32919,7 +32951,7 @@ Index * troubleshooting, quotes with file names: Special FD. (line 68) * troubleshooting, readable data files: File Checking. (line 6) * troubleshooting, regexp constants vs. string constants: Computed Regexps. - (line 38) + (line 39) * troubleshooting, string concatenation: Concatenation. (line 26) * troubleshooting, substr() function: String Functions. (line 497) * troubleshooting, system() function: I/O Functions. (line 94) @@ -33013,7 +33045,7 @@ Index * version of gawk extension API: Auto-set. (line 229) * version of GNU MP library: Auto-set. (line 215) * version of GNU MPFR library: Auto-set. (line 211) -* vertical bar (|): Regexp Operators. (line 69) +* vertical bar (|): Regexp Operators. (line 70) * vertical bar (|), | operator (I/O) <1>: Precedence. (line 65) * vertical bar (|), | operator (I/O): Getline/Pipe. (line 9) * vertical bar (|), |& operator (I/O) <1>: Two-way I/O. (line 44) @@ -33033,7 +33065,7 @@ Index * Wall, Larry <1>: Future Extensions. (line 6) * Wall, Larry: Array Intro. (line 6) * Wallin, Anders: Contributors. (line 103) -* warnings, issuing: Options. (line 182) +* warnings, issuing: Options. (line 185) * watch debugger command: Viewing And Changing Data. (line 67) * watchpoint: Debugging Terms. (line 42) @@ -33046,7 +33078,7 @@ Index * whitespace, as field separators: Default Field Splitting. (line 6) * whitespace, functions, calling: Calling Built-in. (line 10) -* whitespace, newlines as: Options. (line 253) +* whitespace, newlines as: Options. (line 260) * Williams, Kent: Contributors. (line 34) * Woehlke, Matthew: Contributors. (line 79) * Woods, John: Contributors. (line 27) @@ -33075,7 +33107,7 @@ Index * {} (braces): Profiling. (line 142) * {} (braces), actions and: Action Overview. (line 19) * {} (braces), statements, grouping: Statements. (line 10) -* | (vertical bar): Regexp Operators. (line 69) +* | (vertical bar): Regexp Operators. (line 70) * | (vertical bar), | operator (I/O) <1>: Precedence. (line 65) * | (vertical bar), | operator (I/O) <2>: Redirection. (line 57) * | (vertical bar), | operator (I/O): Getline/Pipe. (line 9) @@ -33127,502 +33159,502 @@ Ref: Executable Scripts-Footnote-179661 Ref: Executable Scripts-Footnote-279763 Node: Comments80310 Node: Quoting82777 -Node: DOS Quoting87400 -Node: Sample Data Files88075 -Node: Very Simple90590 -Node: Two Rules95241 -Node: More Complex97139 -Ref: More Complex-Footnote-1100069 -Node: Statements/Lines100154 -Ref: Statements/Lines-Footnote-1104617 -Node: Other Features104882 -Node: When105810 -Node: Invoking Gawk107957 -Node: Command Line109420 -Node: Options110203 -Ref: Options-Footnote-1125581 -Node: Other Arguments125606 -Node: Naming Standard Input128264 -Node: Environment Variables129358 -Node: AWKPATH Variable129916 -Ref: AWKPATH Variable-Footnote-1132697 -Ref: AWKPATH Variable-Footnote-2132742 -Node: AWKLIBPATH Variable133002 -Node: Other Environment Variables133720 -Node: Exit Status136683 -Node: Include Files137358 -Node: Loading Shared Libraries140927 -Node: Obsolete142291 -Node: Undocumented142988 -Node: Regexp143230 -Node: Regexp Usage144619 -Node: Escape Sequences146644 -Node: Regexp Operators152313 -Ref: Regexp Operators-Footnote-1159693 -Ref: Regexp Operators-Footnote-2159840 -Node: Bracket Expressions159938 -Ref: table-char-classes161828 -Node: GNU Regexp Operators164351 -Node: Case-sensitivity168074 -Ref: Case-sensitivity-Footnote-1171042 -Ref: Case-sensitivity-Footnote-2171277 -Node: Leftmost Longest171385 -Node: Computed Regexps172586 -Node: Reading Files175923 -Node: Records177925 -Ref: Records-Footnote-1187448 -Node: Fields187485 -Ref: Fields-Footnote-1190441 -Node: Nonconstant Fields190527 -Node: Changing Fields192733 -Node: Field Separators198692 -Node: Default Field Splitting201394 -Node: Regexp Field Splitting202511 -Node: Single Character Fields205853 -Node: Command Line Field Separator206912 -Node: Full Line Fields210254 -Ref: Full Line Fields-Footnote-1210762 -Node: Field Splitting Summary210808 -Ref: Field Splitting Summary-Footnote-1213907 -Node: Constant Size214008 -Node: Splitting By Content218615 -Ref: Splitting By Content-Footnote-1222364 -Node: Multiple Line222404 -Ref: Multiple Line-Footnote-1228251 -Node: Getline228430 -Node: Plain Getline230646 -Node: Getline/Variable232741 -Node: Getline/File233888 -Node: Getline/Variable/File235229 -Ref: Getline/Variable/File-Footnote-1236828 -Node: Getline/Pipe236915 -Node: Getline/Variable/Pipe239614 -Node: Getline/Coprocess240721 -Node: Getline/Variable/Coprocess241973 -Node: Getline Notes242710 -Node: Getline Summary245497 -Ref: table-getline-variants245905 -Node: Read Timeout246817 -Ref: Read Timeout-Footnote-1250556 -Node: Command line directories250614 -Node: Printing251244 -Node: Print252875 -Node: Print Examples254212 -Node: Output Separators256996 -Node: OFMT259012 -Node: Printf260370 -Node: Basic Printf261276 -Node: Control Letters262815 -Node: Format Modifiers266627 -Node: Printf Examples272636 -Node: Redirection275348 -Node: Special Files282322 -Node: Special FD282855 -Ref: Special FD-Footnote-1286480 -Node: Special Network286554 -Node: Special Caveats287404 -Node: Close Files And Pipes288200 -Ref: Close Files And Pipes-Footnote-1295183 -Ref: Close Files And Pipes-Footnote-2295331 -Node: Expressions295481 -Node: Values296613 -Node: Constants297289 -Node: Scalar Constants297969 -Ref: Scalar Constants-Footnote-1298828 -Node: Nondecimal-numbers299010 -Node: Regexp Constants302010 -Node: Using Constant Regexps302485 -Node: Variables305540 -Node: Using Variables306195 -Node: Assignment Options307919 -Node: Conversion309794 -Ref: table-locale-affects315294 -Ref: Conversion-Footnote-1315918 -Node: All Operators316027 -Node: Arithmetic Ops316657 -Node: Concatenation319162 -Ref: Concatenation-Footnote-1321950 -Node: Assignment Ops322070 -Ref: table-assign-ops327058 -Node: Increment Ops328389 -Node: Truth Values and Conditions331823 -Node: Truth Values332906 -Node: Typing and Comparison333955 -Node: Variable Typing334748 -Ref: Variable Typing-Footnote-1338645 -Node: Comparison Operators338767 -Ref: table-relational-ops339177 -Node: POSIX String Comparison342725 -Ref: POSIX String Comparison-Footnote-1343681 -Node: Boolean Ops343819 -Ref: Boolean Ops-Footnote-1347889 -Node: Conditional Exp347980 -Node: Function Calls349712 -Node: Precedence353306 -Node: Locales356975 -Node: Patterns and Actions358064 -Node: Pattern Overview359118 -Node: Regexp Patterns360787 -Node: Expression Patterns361330 -Node: Ranges365111 -Node: BEGIN/END368215 -Node: Using BEGIN/END368977 -Ref: Using BEGIN/END-Footnote-1371713 -Node: I/O And BEGIN/END371819 -Node: BEGINFILE/ENDFILE374101 -Node: Empty377015 -Node: Using Shell Variables377332 -Node: Action Overview379617 -Node: Statements381974 -Node: If Statement383828 -Node: While Statement385327 -Node: Do Statement387371 -Node: For Statement388527 -Node: Switch Statement391679 -Node: Break Statement393833 -Node: Continue Statement395823 -Node: Next Statement397616 -Node: Nextfile Statement400006 -Node: Exit Statement402661 -Node: Built-in Variables405077 -Node: User-modified406172 -Ref: User-modified-Footnote-1414530 -Node: Auto-set414592 -Ref: Auto-set-Footnote-1427657 -Ref: Auto-set-Footnote-2427862 -Node: ARGC and ARGV427918 -Node: Arrays431772 -Node: Array Basics433277 -Node: Array Intro434103 -Node: Reference to Elements438420 -Node: Assigning Elements440690 -Node: Array Example441181 -Node: Scanning an Array442913 -Node: Controlling Scanning445227 -Ref: Controlling Scanning-Footnote-1450314 -Node: Delete450630 -Ref: Delete-Footnote-1453395 -Node: Numeric Array Subscripts453452 -Node: Uninitialized Subscripts455635 -Node: Multidimensional457262 -Node: Multiscanning460355 -Node: Arrays of Arrays461944 -Node: Functions466584 -Node: Built-in467403 -Node: Calling Built-in468481 -Node: Numeric Functions470469 -Ref: Numeric Functions-Footnote-1474301 -Ref: Numeric Functions-Footnote-2474658 -Ref: Numeric Functions-Footnote-3474706 -Node: String Functions474975 -Ref: String Functions-Footnote-1497933 -Ref: String Functions-Footnote-2498062 -Ref: String Functions-Footnote-3498310 -Node: Gory Details498397 -Ref: table-sub-escapes500076 -Ref: table-sub-posix-92501430 -Ref: table-sub-proposed502781 -Ref: table-posix-sub504135 -Ref: table-gensub-escapes505680 -Ref: Gory Details-Footnote-1506856 -Ref: Gory Details-Footnote-2506907 -Node: I/O Functions507058 -Ref: I/O Functions-Footnote-1514048 -Node: Time Functions514195 -Ref: Time Functions-Footnote-1525178 -Ref: Time Functions-Footnote-2525246 -Ref: Time Functions-Footnote-3525404 -Ref: Time Functions-Footnote-4525515 -Ref: Time Functions-Footnote-5525627 -Ref: Time Functions-Footnote-6525854 -Node: Bitwise Functions526120 -Ref: table-bitwise-ops526682 -Ref: Bitwise Functions-Footnote-1530903 -Node: Type Functions531087 -Node: I18N Functions532238 -Node: User-defined533865 -Node: Definition Syntax534669 -Ref: Definition Syntax-Footnote-1539583 -Node: Function Example539652 -Ref: Function Example-Footnote-1542301 -Node: Function Caveats542323 -Node: Calling A Function542841 -Node: Variable Scope543796 -Node: Pass By Value/Reference546759 -Node: Return Statement550267 -Node: Dynamic Typing553248 -Node: Indirect Calls554179 -Node: Library Functions563866 -Ref: Library Functions-Footnote-1567379 -Ref: Library Functions-Footnote-2567522 -Node: Library Names567693 -Ref: Library Names-Footnote-1571166 -Ref: Library Names-Footnote-2571386 -Node: General Functions571472 -Node: Strtonum Function572500 -Node: Assert Function575430 -Node: Round Function578756 -Node: Cliff Random Function580297 -Node: Ordinal Functions581313 -Ref: Ordinal Functions-Footnote-1584390 -Ref: Ordinal Functions-Footnote-2584642 -Node: Join Function584853 -Ref: Join Function-Footnote-1586624 -Node: Getlocaltime Function586824 -Node: Readfile Function590565 -Node: Data File Management592404 -Node: Filetrans Function593036 -Node: Rewind Function597105 -Node: File Checking598492 -Node: Empty Files599586 -Node: Ignoring Assigns601816 -Node: Getopt Function603370 -Ref: Getopt Function-Footnote-1614673 -Node: Passwd Functions614876 -Ref: Passwd Functions-Footnote-1623854 -Node: Group Functions623942 -Node: Walking Arrays632026 -Node: Sample Programs634162 -Node: Running Examples634836 -Node: Clones635564 -Node: Cut Program636788 -Node: Egrep Program646639 -Ref: Egrep Program-Footnote-1654412 -Node: Id Program654522 -Node: Split Program658171 -Ref: Split Program-Footnote-1661690 -Node: Tee Program661818 -Node: Uniq Program664621 -Node: Wc Program672050 -Ref: Wc Program-Footnote-1676316 -Ref: Wc Program-Footnote-2676516 -Node: Miscellaneous Programs676608 -Node: Dupword Program677796 -Node: Alarm Program679827 -Node: Translate Program684634 -Ref: Translate Program-Footnote-1689021 -Ref: Translate Program-Footnote-2689269 -Node: Labels Program689403 -Ref: Labels Program-Footnote-1692774 -Node: Word Sorting692858 -Node: History Sorting696742 -Node: Extract Program698581 -Ref: Extract Program-Footnote-1706084 -Node: Simple Sed706212 -Node: Igawk Program709274 -Ref: Igawk Program-Footnote-1724431 -Ref: Igawk Program-Footnote-2724632 -Node: Anagram Program724770 -Node: Signature Program727838 -Node: Advanced Features728938 -Node: Nondecimal Data730824 -Node: Array Sorting732407 -Node: Controlling Array Traversal733104 -Node: Array Sorting Functions741388 -Ref: Array Sorting Functions-Footnote-1745257 -Node: Two-way I/O745451 -Ref: Two-way I/O-Footnote-1750883 -Node: TCP/IP Networking750965 -Node: Profiling753809 -Node: Internationalization761312 -Node: I18N and L10N762737 -Node: Explaining gettext763423 -Ref: Explaining gettext-Footnote-1768491 -Ref: Explaining gettext-Footnote-2768675 -Node: Programmer i18n768840 -Node: Translator i18n773042 -Node: String Extraction773836 -Ref: String Extraction-Footnote-1774797 -Node: Printf Ordering774883 -Ref: Printf Ordering-Footnote-1777665 -Node: I18N Portability777729 -Ref: I18N Portability-Footnote-1780178 -Node: I18N Example780241 -Ref: I18N Example-Footnote-1782879 -Node: Gawk I18N782951 -Node: Debugger783572 -Node: Debugging784543 -Node: Debugging Concepts784976 -Node: Debugging Terms786832 -Node: Awk Debugging789429 -Node: Sample Debugging Session790321 -Node: Debugger Invocation790841 -Node: Finding The Bug792174 -Node: List of Debugger Commands798661 -Node: Breakpoint Control799995 -Node: Debugger Execution Control803659 -Node: Viewing And Changing Data807019 -Node: Execution Stack810375 -Node: Debugger Info811842 -Node: Miscellaneous Debugger Commands815824 -Node: Readline Support821000 -Node: Limitations821831 -Node: Arbitrary Precision Arithmetic824083 -Ref: Arbitrary Precision Arithmetic-Footnote-1825732 -Node: General Arithmetic825880 -Node: Floating Point Issues827600 -Node: String Conversion Precision828481 -Ref: String Conversion Precision-Footnote-1830186 -Node: Unexpected Results830295 -Node: POSIX Floating Point Problems832448 -Ref: POSIX Floating Point Problems-Footnote-1836273 -Node: Integer Programming836311 -Node: Floating-point Programming838050 -Ref: Floating-point Programming-Footnote-1844381 -Ref: Floating-point Programming-Footnote-2844651 -Node: Floating-point Representation844915 -Node: Floating-point Context846080 -Ref: table-ieee-formats846919 -Node: Rounding Mode848303 -Ref: table-rounding-modes848782 -Ref: Rounding Mode-Footnote-1851797 -Node: Gawk and MPFR851976 -Node: Arbitrary Precision Floats853385 -Ref: Arbitrary Precision Floats-Footnote-1855828 -Node: Setting Precision856144 -Ref: table-predefined-precision-strings856830 -Node: Setting Rounding Mode858975 -Ref: table-gawk-rounding-modes859379 -Node: Floating-point Constants860566 -Node: Changing Precision861995 -Ref: Changing Precision-Footnote-1863392 -Node: Exact Arithmetic863566 -Node: Arbitrary Precision Integers866704 -Ref: Arbitrary Precision Integers-Footnote-1869719 -Node: Dynamic Extensions869866 -Node: Extension Intro871324 -Node: Plugin License872589 -Node: Extension Mechanism Outline873274 -Ref: load-extension873691 -Ref: load-new-function875169 -Ref: call-new-function876164 -Node: Extension API Description878179 -Node: Extension API Functions Introduction879466 -Node: General Data Types884393 -Ref: General Data Types-Footnote-1890088 -Node: Requesting Values890387 -Ref: table-value-types-returned891124 -Node: Memory Allocation Functions892078 -Ref: Memory Allocation Functions-Footnote-1894824 -Node: Constructor Functions894920 -Node: Registration Functions896678 -Node: Extension Functions897363 -Node: Exit Callback Functions899665 -Node: Extension Version String900914 -Node: Input Parsers901564 -Node: Output Wrappers911321 -Node: Two-way processors915831 -Node: Printing Messages918039 -Ref: Printing Messages-Footnote-1919116 -Node: Updating `ERRNO'919268 -Node: Accessing Parameters920007 -Node: Symbol Table Access921237 -Node: Symbol table by name921751 -Node: Symbol table by cookie923727 -Ref: Symbol table by cookie-Footnote-1927859 -Node: Cached values927922 -Ref: Cached values-Footnote-1931412 -Node: Array Manipulation931503 -Ref: Array Manipulation-Footnote-1932601 -Node: Array Data Types932640 -Ref: Array Data Types-Footnote-1935343 -Node: Array Functions935435 -Node: Flattening Arrays939271 -Node: Creating Arrays946123 -Node: Extension API Variables950848 -Node: Extension Versioning951484 -Node: Extension API Informational Variables953385 -Node: Extension API Boilerplate954471 -Node: Finding Extensions958275 -Node: Extension Example958835 -Node: Internal File Description959565 -Node: Internal File Ops963656 -Ref: Internal File Ops-Footnote-1975165 -Node: Using Internal File Ops975305 -Ref: Using Internal File Ops-Footnote-1977658 -Node: Extension Samples977924 -Node: Extension Sample File Functions979448 -Node: Extension Sample Fnmatch987933 -Node: Extension Sample Fork989702 -Node: Extension Sample Inplace990915 -Node: Extension Sample Ord992693 -Node: Extension Sample Readdir993529 -Node: Extension Sample Revout995061 -Node: Extension Sample Rev2way995654 -Node: Extension Sample Read write array996344 -Node: Extension Sample Readfile998227 -Node: Extension Sample API Tests999327 -Node: Extension Sample Time999852 -Node: gawkextlib1001216 -Node: Language History1003997 -Node: V7/SVR3.11005590 -Node: SVR41007910 -Node: POSIX1009352 -Node: BTL1010738 -Node: POSIX/GNU1011472 -Node: Feature History1017071 -Node: Common Extensions1030047 -Node: Ranges and Locales1031359 -Ref: Ranges and Locales-Footnote-11035976 -Ref: Ranges and Locales-Footnote-21036003 -Ref: Ranges and Locales-Footnote-31036237 -Node: Contributors1036458 -Node: Installation1041839 -Node: Gawk Distribution1042733 -Node: Getting1043217 -Node: Extracting1044043 -Node: Distribution contents1045735 -Node: Unix Installation1051456 -Node: Quick Installation1052073 -Node: Additional Configuration Options1054519 -Node: Configuration Philosophy1056255 -Node: Non-Unix Installation1058609 -Node: PC Installation1059067 -Node: PC Binary Installation1060366 -Node: PC Compiling1062214 -Node: PC Testing1065158 -Node: PC Using1066334 -Node: Cygwin1070502 -Node: MSYS1071311 -Node: VMS Installation1071825 -Node: VMS Compilation1072621 -Ref: VMS Compilation-Footnote-11073873 -Node: VMS Dynamic Extensions1073931 -Node: VMS Installation Details1075304 -Node: VMS Running1077555 -Node: VMS GNV1080389 -Node: VMS Old Gawk1081112 -Node: Bugs1081582 -Node: Other Versions1085500 -Node: Notes1091584 -Node: Compatibility Mode1092384 -Node: Additions1093167 -Node: Accessing The Source1094094 -Node: Adding Code1095534 -Node: New Ports1101579 -Node: Derived Files1105714 -Ref: Derived Files-Footnote-11111035 -Ref: Derived Files-Footnote-21111069 -Ref: Derived Files-Footnote-31111669 -Node: Future Extensions1111767 -Node: Implementation Limitations1112350 -Node: Extension Design1113602 -Node: Old Extension Problems1114756 -Ref: Old Extension Problems-Footnote-11116264 -Node: Extension New Mechanism Goals1116321 -Ref: Extension New Mechanism Goals-Footnote-11119686 -Node: Extension Other Design Decisions1119872 -Node: Extension Future Growth1121978 -Node: Old Extension Mechanism1122814 -Node: Basic Concepts1124554 -Node: Basic High Level1125235 -Ref: figure-general-flow1125507 -Ref: figure-process-flow1126106 -Ref: Basic High Level-Footnote-11129335 -Node: Basic Data Typing1129520 -Node: Glossary1132875 -Node: Copying1158106 -Node: GNU Free Documentation License1195662 -Node: Index1220798 +Node: DOS Quoting88093 +Node: Sample Data Files88768 +Node: Very Simple91283 +Node: Two Rules95933 +Node: More Complex97828 +Ref: More Complex-Footnote-1100760 +Node: Statements/Lines100845 +Ref: Statements/Lines-Footnote-1105300 +Node: Other Features105565 +Node: When106493 +Node: Invoking Gawk108641 +Node: Command Line110104 +Node: Options110887 +Ref: Options-Footnote-1126699 +Node: Other Arguments126724 +Node: Naming Standard Input129386 +Node: Environment Variables130480 +Node: AWKPATH Variable131038 +Ref: AWKPATH Variable-Footnote-1133816 +Ref: AWKPATH Variable-Footnote-2133861 +Node: AWKLIBPATH Variable134121 +Node: Other Environment Variables134880 +Node: Exit Status138045 +Node: Include Files138720 +Node: Loading Shared Libraries142298 +Node: Obsolete143681 +Node: Undocumented144378 +Node: Regexp144620 +Node: Regexp Usage146009 +Node: Escape Sequences148042 +Node: Regexp Operators153709 +Ref: Regexp Operators-Footnote-1161189 +Ref: Regexp Operators-Footnote-2161336 +Node: Bracket Expressions161434 +Ref: table-char-classes163324 +Node: GNU Regexp Operators165847 +Node: Case-sensitivity169570 +Ref: Case-sensitivity-Footnote-1172462 +Ref: Case-sensitivity-Footnote-2172697 +Node: Leftmost Longest172805 +Node: Computed Regexps174006 +Node: Reading Files177355 +Node: Records179357 +Ref: Records-Footnote-1188880 +Node: Fields188917 +Ref: Fields-Footnote-1191873 +Node: Nonconstant Fields191959 +Node: Changing Fields194165 +Node: Field Separators200124 +Node: Default Field Splitting202826 +Node: Regexp Field Splitting203943 +Node: Single Character Fields207284 +Node: Command Line Field Separator208343 +Node: Full Line Fields211685 +Ref: Full Line Fields-Footnote-1212193 +Node: Field Splitting Summary212239 +Ref: Field Splitting Summary-Footnote-1215338 +Node: Constant Size215439 +Node: Splitting By Content220046 +Ref: Splitting By Content-Footnote-1223795 +Node: Multiple Line223835 +Ref: Multiple Line-Footnote-1229682 +Node: Getline229861 +Node: Plain Getline232077 +Node: Getline/Variable234172 +Node: Getline/File235319 +Node: Getline/Variable/File236660 +Ref: Getline/Variable/File-Footnote-1238259 +Node: Getline/Pipe238346 +Node: Getline/Variable/Pipe241045 +Node: Getline/Coprocess242152 +Node: Getline/Variable/Coprocess243404 +Node: Getline Notes244141 +Node: Getline Summary246928 +Ref: table-getline-variants247336 +Node: Read Timeout248248 +Ref: Read Timeout-Footnote-1251987 +Node: Command line directories252045 +Node: Printing252675 +Node: Print254306 +Node: Print Examples255643 +Node: Output Separators258427 +Node: OFMT260443 +Node: Printf261801 +Node: Basic Printf262707 +Node: Control Letters264246 +Node: Format Modifiers268066 +Node: Printf Examples274075 +Node: Redirection276787 +Node: Special Files283761 +Node: Special FD284294 +Ref: Special FD-Footnote-1287919 +Node: Special Network287993 +Node: Special Caveats288843 +Node: Close Files And Pipes289639 +Ref: Close Files And Pipes-Footnote-1296622 +Ref: Close Files And Pipes-Footnote-2296770 +Node: Expressions296920 +Node: Values298052 +Node: Constants298728 +Node: Scalar Constants299408 +Ref: Scalar Constants-Footnote-1300267 +Node: Nondecimal-numbers300449 +Node: Regexp Constants303449 +Node: Using Constant Regexps303924 +Node: Variables306979 +Node: Using Variables307634 +Node: Assignment Options309358 +Node: Conversion311233 +Ref: table-locale-affects316733 +Ref: Conversion-Footnote-1317357 +Node: All Operators317466 +Node: Arithmetic Ops318096 +Node: Concatenation320601 +Ref: Concatenation-Footnote-1323389 +Node: Assignment Ops323509 +Ref: table-assign-ops328497 +Node: Increment Ops329828 +Node: Truth Values and Conditions333262 +Node: Truth Values334345 +Node: Typing and Comparison335394 +Node: Variable Typing336187 +Ref: Variable Typing-Footnote-1340084 +Node: Comparison Operators340206 +Ref: table-relational-ops340616 +Node: POSIX String Comparison344164 +Ref: POSIX String Comparison-Footnote-1345120 +Node: Boolean Ops345258 +Ref: Boolean Ops-Footnote-1349328 +Node: Conditional Exp349419 +Node: Function Calls351151 +Node: Precedence354745 +Node: Locales358414 +Node: Patterns and Actions359503 +Node: Pattern Overview360557 +Node: Regexp Patterns362226 +Node: Expression Patterns362769 +Node: Ranges366550 +Node: BEGIN/END369654 +Node: Using BEGIN/END370416 +Ref: Using BEGIN/END-Footnote-1373152 +Node: I/O And BEGIN/END373258 +Node: BEGINFILE/ENDFILE375540 +Node: Empty378454 +Node: Using Shell Variables378771 +Node: Action Overview381056 +Node: Statements383413 +Node: If Statement385267 +Node: While Statement386766 +Node: Do Statement388810 +Node: For Statement389966 +Node: Switch Statement393118 +Node: Break Statement395272 +Node: Continue Statement397262 +Node: Next Statement399055 +Node: Nextfile Statement401445 +Node: Exit Statement404100 +Node: Built-in Variables406516 +Node: User-modified407611 +Ref: User-modified-Footnote-1415969 +Node: Auto-set416031 +Ref: Auto-set-Footnote-1429098 +Ref: Auto-set-Footnote-2429303 +Node: ARGC and ARGV429359 +Node: Arrays433213 +Node: Array Basics434718 +Node: Array Intro435544 +Node: Reference to Elements439861 +Node: Assigning Elements442131 +Node: Array Example442622 +Node: Scanning an Array444354 +Node: Controlling Scanning446668 +Ref: Controlling Scanning-Footnote-1451755 +Node: Delete452071 +Ref: Delete-Footnote-1454836 +Node: Numeric Array Subscripts454893 +Node: Uninitialized Subscripts457076 +Node: Multidimensional458703 +Node: Multiscanning461796 +Node: Arrays of Arrays463385 +Node: Functions468025 +Node: Built-in468844 +Node: Calling Built-in469922 +Node: Numeric Functions471910 +Ref: Numeric Functions-Footnote-1475744 +Ref: Numeric Functions-Footnote-2476101 +Ref: Numeric Functions-Footnote-3476149 +Node: String Functions476418 +Ref: String Functions-Footnote-1499421 +Ref: String Functions-Footnote-2499550 +Ref: String Functions-Footnote-3499798 +Node: Gory Details499885 +Ref: table-sub-escapes501564 +Ref: table-sub-posix-92502918 +Ref: table-sub-proposed504269 +Ref: table-posix-sub505623 +Ref: table-gensub-escapes507168 +Ref: Gory Details-Footnote-1508344 +Ref: Gory Details-Footnote-2508395 +Node: I/O Functions508546 +Ref: I/O Functions-Footnote-1515542 +Node: Time Functions515689 +Ref: Time Functions-Footnote-1526682 +Ref: Time Functions-Footnote-2526750 +Ref: Time Functions-Footnote-3526908 +Ref: Time Functions-Footnote-4527019 +Ref: Time Functions-Footnote-5527131 +Ref: Time Functions-Footnote-6527358 +Node: Bitwise Functions527624 +Ref: table-bitwise-ops528186 +Ref: Bitwise Functions-Footnote-1532431 +Node: Type Functions532615 +Node: I18N Functions533766 +Node: User-defined535418 +Node: Definition Syntax536222 +Ref: Definition Syntax-Footnote-1541136 +Node: Function Example541205 +Ref: Function Example-Footnote-1543854 +Node: Function Caveats543876 +Node: Calling A Function544394 +Node: Variable Scope545349 +Node: Pass By Value/Reference548312 +Node: Return Statement551820 +Node: Dynamic Typing554801 +Node: Indirect Calls555732 +Node: Library Functions565419 +Ref: Library Functions-Footnote-1568932 +Ref: Library Functions-Footnote-2569075 +Node: Library Names569246 +Ref: Library Names-Footnote-1572719 +Ref: Library Names-Footnote-2572939 +Node: General Functions573025 +Node: Strtonum Function574053 +Node: Assert Function576983 +Node: Round Function580309 +Node: Cliff Random Function581850 +Node: Ordinal Functions582866 +Ref: Ordinal Functions-Footnote-1585943 +Ref: Ordinal Functions-Footnote-2586195 +Node: Join Function586406 +Ref: Join Function-Footnote-1588177 +Node: Getlocaltime Function588377 +Node: Readfile Function592118 +Node: Data File Management593957 +Node: Filetrans Function594589 +Node: Rewind Function598658 +Node: File Checking600045 +Node: Empty Files601139 +Node: Ignoring Assigns603369 +Node: Getopt Function604923 +Ref: Getopt Function-Footnote-1616226 +Node: Passwd Functions616429 +Ref: Passwd Functions-Footnote-1625407 +Node: Group Functions625495 +Node: Walking Arrays633579 +Node: Sample Programs635715 +Node: Running Examples636389 +Node: Clones637117 +Node: Cut Program638341 +Node: Egrep Program648192 +Ref: Egrep Program-Footnote-1655965 +Node: Id Program656075 +Node: Split Program659724 +Ref: Split Program-Footnote-1663243 +Node: Tee Program663371 +Node: Uniq Program666174 +Node: Wc Program673603 +Ref: Wc Program-Footnote-1677869 +Ref: Wc Program-Footnote-2678069 +Node: Miscellaneous Programs678161 +Node: Dupword Program679349 +Node: Alarm Program681380 +Node: Translate Program686187 +Ref: Translate Program-Footnote-1690574 +Ref: Translate Program-Footnote-2690822 +Node: Labels Program690956 +Ref: Labels Program-Footnote-1694327 +Node: Word Sorting694411 +Node: History Sorting698295 +Node: Extract Program700134 +Ref: Extract Program-Footnote-1707637 +Node: Simple Sed707765 +Node: Igawk Program710827 +Ref: Igawk Program-Footnote-1725998 +Ref: Igawk Program-Footnote-2726199 +Node: Anagram Program726337 +Node: Signature Program729405 +Node: Advanced Features730505 +Node: Nondecimal Data732391 +Node: Array Sorting733974 +Node: Controlling Array Traversal734671 +Node: Array Sorting Functions742955 +Ref: Array Sorting Functions-Footnote-1746824 +Node: Two-way I/O747018 +Ref: Two-way I/O-Footnote-1752450 +Node: TCP/IP Networking752532 +Node: Profiling755376 +Node: Internationalization762879 +Node: I18N and L10N764304 +Node: Explaining gettext764990 +Ref: Explaining gettext-Footnote-1770058 +Ref: Explaining gettext-Footnote-2770242 +Node: Programmer i18n770407 +Node: Translator i18n774634 +Node: String Extraction775428 +Ref: String Extraction-Footnote-1776389 +Node: Printf Ordering776475 +Ref: Printf Ordering-Footnote-1779257 +Node: I18N Portability779321 +Ref: I18N Portability-Footnote-1781770 +Node: I18N Example781833 +Ref: I18N Example-Footnote-1784471 +Node: Gawk I18N784543 +Node: Debugger785164 +Node: Debugging786135 +Node: Debugging Concepts786568 +Node: Debugging Terms788424 +Node: Awk Debugging791021 +Node: Sample Debugging Session791913 +Node: Debugger Invocation792433 +Node: Finding The Bug793766 +Node: List of Debugger Commands800253 +Node: Breakpoint Control801587 +Node: Debugger Execution Control805251 +Node: Viewing And Changing Data808611 +Node: Execution Stack811967 +Node: Debugger Info813434 +Node: Miscellaneous Debugger Commands817428 +Node: Readline Support822606 +Node: Limitations823437 +Node: Arbitrary Precision Arithmetic825689 +Ref: Arbitrary Precision Arithmetic-Footnote-1827338 +Node: General Arithmetic827486 +Node: Floating Point Issues829206 +Node: String Conversion Precision830087 +Ref: String Conversion Precision-Footnote-1831792 +Node: Unexpected Results831901 +Node: POSIX Floating Point Problems834054 +Ref: POSIX Floating Point Problems-Footnote-1837879 +Node: Integer Programming837917 +Node: Floating-point Programming839656 +Ref: Floating-point Programming-Footnote-1845987 +Ref: Floating-point Programming-Footnote-2846257 +Node: Floating-point Representation846521 +Node: Floating-point Context847686 +Ref: table-ieee-formats848525 +Node: Rounding Mode849909 +Ref: table-rounding-modes850388 +Ref: Rounding Mode-Footnote-1853403 +Node: Gawk and MPFR853582 +Node: Arbitrary Precision Floats854991 +Ref: Arbitrary Precision Floats-Footnote-1857434 +Node: Setting Precision857750 +Ref: table-predefined-precision-strings858436 +Node: Setting Rounding Mode860581 +Ref: table-gawk-rounding-modes860985 +Node: Floating-point Constants862172 +Node: Changing Precision863601 +Ref: Changing Precision-Footnote-1864998 +Node: Exact Arithmetic865172 +Node: Arbitrary Precision Integers868310 +Ref: Arbitrary Precision Integers-Footnote-1871325 +Node: Dynamic Extensions871472 +Node: Extension Intro872930 +Node: Plugin License874195 +Node: Extension Mechanism Outline874880 +Ref: load-extension875297 +Ref: load-new-function876775 +Ref: call-new-function877770 +Node: Extension API Description879785 +Node: Extension API Functions Introduction881072 +Node: General Data Types885999 +Ref: General Data Types-Footnote-1891694 +Node: Requesting Values891993 +Ref: table-value-types-returned892730 +Node: Memory Allocation Functions893684 +Ref: Memory Allocation Functions-Footnote-1896430 +Node: Constructor Functions896526 +Node: Registration Functions898284 +Node: Extension Functions898969 +Node: Exit Callback Functions901271 +Node: Extension Version String902520 +Node: Input Parsers903170 +Node: Output Wrappers912927 +Node: Two-way processors917437 +Node: Printing Messages919645 +Ref: Printing Messages-Footnote-1920722 +Node: Updating `ERRNO'920874 +Node: Accessing Parameters921613 +Node: Symbol Table Access922843 +Node: Symbol table by name923357 +Node: Symbol table by cookie925333 +Ref: Symbol table by cookie-Footnote-1929465 +Node: Cached values929528 +Ref: Cached values-Footnote-1933018 +Node: Array Manipulation933109 +Ref: Array Manipulation-Footnote-1934207 +Node: Array Data Types934246 +Ref: Array Data Types-Footnote-1936949 +Node: Array Functions937041 +Node: Flattening Arrays940877 +Node: Creating Arrays947729 +Node: Extension API Variables952454 +Node: Extension Versioning953090 +Node: Extension API Informational Variables954991 +Node: Extension API Boilerplate956077 +Node: Finding Extensions959881 +Node: Extension Example960441 +Node: Internal File Description961171 +Node: Internal File Ops965262 +Ref: Internal File Ops-Footnote-1976771 +Node: Using Internal File Ops976911 +Ref: Using Internal File Ops-Footnote-1979258 +Node: Extension Samples979524 +Node: Extension Sample File Functions981048 +Node: Extension Sample Fnmatch989535 +Node: Extension Sample Fork991304 +Node: Extension Sample Inplace992517 +Node: Extension Sample Ord994295 +Node: Extension Sample Readdir995131 +Node: Extension Sample Revout996663 +Node: Extension Sample Rev2way997256 +Node: Extension Sample Read write array997946 +Node: Extension Sample Readfile999829 +Node: Extension Sample API Tests1000929 +Node: Extension Sample Time1001454 +Node: gawkextlib1002818 +Node: Language History1005599 +Node: V7/SVR3.11007192 +Node: SVR41009512 +Node: POSIX1010954 +Node: BTL1012340 +Node: POSIX/GNU1013074 +Node: Feature History1018673 +Node: Common Extensions1031649 +Node: Ranges and Locales1032961 +Ref: Ranges and Locales-Footnote-11037578 +Ref: Ranges and Locales-Footnote-21037605 +Ref: Ranges and Locales-Footnote-31037839 +Node: Contributors1038060 +Node: Installation1043441 +Node: Gawk Distribution1044335 +Node: Getting1044819 +Node: Extracting1045645 +Node: Distribution contents1047337 +Node: Unix Installation1053058 +Node: Quick Installation1053675 +Node: Additional Configuration Options1056121 +Node: Configuration Philosophy1057857 +Node: Non-Unix Installation1060211 +Node: PC Installation1060669 +Node: PC Binary Installation1061968 +Node: PC Compiling1063816 +Node: PC Testing1066760 +Node: PC Using1067936 +Node: Cygwin1072104 +Node: MSYS1072913 +Node: VMS Installation1073427 +Node: VMS Compilation1074223 +Ref: VMS Compilation-Footnote-11075475 +Node: VMS Dynamic Extensions1075533 +Node: VMS Installation Details1076906 +Node: VMS Running1079157 +Node: VMS GNV1081991 +Node: VMS Old Gawk1082714 +Node: Bugs1083184 +Node: Other Versions1087102 +Node: Notes1093186 +Node: Compatibility Mode1093986 +Node: Additions1094769 +Node: Accessing The Source1095696 +Node: Adding Code1097136 +Node: New Ports1103181 +Node: Derived Files1107316 +Ref: Derived Files-Footnote-11112637 +Ref: Derived Files-Footnote-21112671 +Ref: Derived Files-Footnote-31113271 +Node: Future Extensions1113369 +Node: Implementation Limitations1113952 +Node: Extension Design1115204 +Node: Old Extension Problems1116358 +Ref: Old Extension Problems-Footnote-11117866 +Node: Extension New Mechanism Goals1117923 +Ref: Extension New Mechanism Goals-Footnote-11121288 +Node: Extension Other Design Decisions1121474 +Node: Extension Future Growth1123580 +Node: Old Extension Mechanism1124416 +Node: Basic Concepts1126156 +Node: Basic High Level1126837 +Ref: figure-general-flow1127109 +Ref: figure-process-flow1127708 +Ref: Basic High Level-Footnote-11130937 +Node: Basic Data Typing1131122 +Node: Glossary1134477 +Node: Copying1159708 +Node: GNU Free Documentation License1197264 +Node: Index1222400  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 353adb7c..872263d4 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -1987,8 +1987,9 @@ May, 2014 @part Part I:@* The @command{awk} Language @end iftex -@ignore @ifdocbook +@part The @command{awk} Language + Part I describes the @command{awk} language and @command{gawk} program in detail. It starts with the basics, and continues through all of the features of @command{awk}. Included also are many, but not all, @@ -2024,7 +2025,6 @@ following chapters: @ref{Functions}. @end itemize @end ifdocbook -@end ignore @node Getting Started @chapter Getting Started with @command{awk} @@ -2501,6 +2501,27 @@ knowledge of shell quoting rules. The following rules apply only to POSIX-compliant, Bourne-style shells (such as Bash, the GNU Bourne-Again Shell). If you use the C shell, you're on your own. +Before diving into the rules, we introduce a concept that appears +throughout this @value{DOCUMENT}, which is that of the @dfn{null}, +or empty, string. + +The null string is character data that has no value. +In other words, it is empty. It is written in @command{awk} programs +like this: @code{""}. In the shell, it can be written using single +or double quotes: @code{""} or @code{''}. While the null string has +no characters in it, it does exist. Consider this command: + +@example +$ @kbd{echo ""} +@end example + +@noindent +Here, the @command{echo} utility receives a single argument, even +though that argument has no characters in it. In the rest of this +@value{DOCUMENT}, we use the terms @dfn{null string} and @dfn{empty string} +interchangeably. Now, on to the quoting rules. + + @itemize @bullet @item Quoted items can be concatenated with nonquoted items as well as with other @@ -2676,6 +2697,7 @@ Although this @value{DOCUMENT} generally only worries about POSIX systems and th POSIX shell, the following issue arises often enough for many users that it is worth addressing. +@cindex Brink, Jeroen The ``shells'' on Microsoft Windows systems use the double-quote character for quoting, and make it difficult or impossible to include an escaped double-quote character in a command-line script. @@ -2689,7 +2711,6 @@ gawk "@{ print \"\042\" $0 \"\042\" @}" @var{file} @node Sample Data Files @section Data Files for the Examples -@c For gawk >= 4.0, update these data files. No-one has such slow modems! @cindex input files, examples @cindex @code{mail-list} file @@ -2846,7 +2867,7 @@ awk 'length($0) > 80' data @end example The sole rule has a relational expression as its pattern and it has no -action---so the default action, printing the record, is used. +action---so it uses the default action, printing the record. @cindex @command{expand} utility @item @@ -2929,9 +2950,9 @@ the program would print the odd-numbered lines. The @command{awk} utility reads the input files one line at a time. For each line, @command{awk} tries the patterns of each of the rules. -If several patterns match, then several actions are run in the order in +If several patterns match, then several actions execture in the order in which they appear in the @command{awk} program. If no patterns match, then -no actions are run. +no actions run. After processing all the rules that match the line (and perhaps there are none), @command{awk} reads the next line. (However, @@ -3023,8 +3044,8 @@ needed to produce this traditional-style output from @command{ls}.} The @samp{$6 == "Nov"} in our @command{awk} program is an expression that tests whether the sixth field of the output from @w{@samp{ls -l}} matches the string @samp{Nov}. Each time a line has the string -@samp{Nov} for its sixth field, the action @samp{sum += $5} is -performed. This adds the fifth field (the file's size) to the variable +@samp{Nov} for its sixth field, @command{awk} performs the action +@samp{sum += $5}. This adds the fifth field (the file's size) to the variable @code{sum}. As a result, when @command{awk} has finished reading all the input lines, @code{sum} is the total of the sizes of the files whose lines matched the pattern. (This works because @command{awk} variables @@ -3091,7 +3112,7 @@ We have generally not used backslash continuation in our sample programs. @command{gawk} places no limit on the length of a line, so backslash continuation is never strictly necessary; it just makes programs more readable. For this same reason, as well as -for clarity, we have kept most statements short in the sample programs +for clarity, we have kept most statements short in the programs presented throughout the @value{DOCUMENT}. Backslash continuation is most useful when your @command{awk} program is in a separate source file instead of entered from the command line. You should also note that @@ -3240,12 +3261,15 @@ that it has are much larger than they used to be. @cindex @command{awk} programs, complex If you find yourself writing @command{awk} scripts of more than, say, a few hundred lines, you might consider using a different programming -language. Emacs Lisp is a good choice if you need sophisticated string -or pattern matching capabilities. The shell is also good at string and +language. +The shell is good at string and pattern matching; in addition, it allows powerful use of the system utilities. More conventional languages, such as C, C++, and Java, offer better facilities for system programming and for managing the complexity -of large programs. Programs in these languages may require more lines +of large programs. +Python offers a nice balance between high-level ease of programming and +access to system facilities. +Programs in these languages may require more lines of source code than the equivalent @command{awk} programs, but they are easier to maintain and usually run more efficiently. @@ -3429,9 +3453,10 @@ program; see @ref{Getopt Function}. The following list describes @command{gawk}-specific options: -@table @code -@item -b -@itemx --characters-as-bytes +@c Have to use @asis here to get docbook to come out right. +@table @asis +@item @option{-b} +@itemx @option{--characters-as-bytes} @cindex @option{-b} option @cindex @option{--characters-as-bytes} option Cause @command{gawk} to treat all input data as single-byte characters. @@ -3439,14 +3464,14 @@ In addition, all output written with @code{print} or @code{printf} are treated as single-byte characters. Normally, @command{gawk} follows the POSIX standard and attempts to process -its input data according to the current locale. This can often involve +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!''. -@item -c -@itemx --traditional +@item @option{-c} +@itemx @option{--traditional} @cindex @option{-c} option @cindex @option{--traditional} option @cindex compatibility mode (@command{gawk}), specifying @@ -3457,15 +3482,15 @@ like Brian Kernighan's version @command{awk}. which summarizes the extensions. Also see @ref{Compatibility Mode}. -@item -C -@itemx --copyright +@item @option{-C} +@itemx @option{--copyright} @cindex @option{-C} option @cindex @option{--copyright} option @cindex GPL (General Public License), printing Print the short version of the General Public License and then exit. -@item -d@r{[}@var{file}@r{]} -@itemx --dump-variables@r{[}=@var{file}@r{]} +@item @option{-d}[@var{file}] +@itemx @option{--dump-variables}[@code{=}@var{file}] @cindex @option{-d} option @cindex @option{--dump-variables} option @cindex dump all variables of a program @@ -3487,8 +3512,8 @@ inadvertently use global variables that you meant to be local. (This is a particularly easy mistake to make with simple variable names like @code{i}, @code{j}, etc.) -@item -D@r{[}@var{file}@r{]} -@itemx --debug=@r{[}@var{file}@r{]} +@item @option{-D}[@var{file}] +@itemx @option{--debug}[@code{=}@var{file}] @cindex @option{-D} option @cindex @option{--debug} option @cindex @command{awk} debugging, enabling @@ -3500,8 +3525,8 @@ of commands for the debugger to execute non-interactively. No space is allowed between the @option{-D} and @var{file}, if @var{file} is supplied. -@item -e @var{program-text} -@itemx --source @var{program-text} +@item @option{-e} @var{program-text} +@itemx @option{--source} @var{program-text} @cindex @option{-e} option @cindex @option{--source} option @cindex source code, mixing @@ -3512,8 +3537,8 @@ This is particularly useful when you have library functions that you want to use from your command-line programs (@pxref{AWKPATH Variable}). -@item -E @var{file} -@itemx --exec @var{file} +@item @option{-E} @var{file} +@itemx @option{--exec} @var{file} @cindex @option{-E} option @cindex @option{--exec} option @cindex @command{awk} programs, location of @@ -3543,8 +3568,8 @@ with @samp{#!} scripts (@pxref{Executable Scripts}), like so: @var{awk program here @dots{}} @end example -@item -g -@itemx --gen-pot +@item @option{-g} +@itemx @option{--gen-pot} @cindex @option{-g} option @cindex @option{--gen-pot} option @cindex portable object files, generating @@ -3555,8 +3580,8 @@ output for all string constants that have been marked for translation. @xref{Internationalization}, for information about this option. -@item -h -@itemx --help +@item @option{-h} +@itemx @option{--help} @cindex @option{-h} option @cindex @option{--help} option @cindex GNU long options, printing list of @@ -3565,42 +3590,47 @@ for information about this option. Print a ``usage'' message summarizing the short and long style options that @command{gawk} accepts and then exit. -@item -i @var{source-file} -@itemx --include @var{source-file} +@item @option{-i} @var{source-file} +@itemx @option{--include} @var{source-file} @cindex @option{-i} option @cindex @option{--include} option @cindex @command{awk} programs, location of -Read @command{awk} source library from @var{source-file}. This option is -completely equivalent to using the @samp{@@include} directive inside -your program. This option is very -similar to the @option{-f} option, but there are two important differences. -First, when @option{-i} is used, the program source will not be loaded if it has -been previously loaded, whereas the @option{-f} will always load the file. +Read @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, +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. Second, because this option is intended to be used with code libraries, @command{gawk} does not recognize such files as constituting main program -input. Thus, after processing an @option{-i} argument, @command{gawk} still expects to -find the main source code via the @option{-f} option or on the command-line. +input. Thus, after processing an @option{-i} argument, @command{gawk} +still expects to find the main source code via the @option{-f} option +or on the command-line. -@item -l @var{lib} -@itemx --load @var{lib} +@item @option{-l} @var{ext} +@itemx @option{--load} @var{ext} @cindex @option{-l} option @cindex @option{--load} option -@cindex loading, library -Load a shared library @var{lib}. This searches for the library using the @env{AWKLIBPATH} +@cindex loading, extensions +Load a dynamic extension named @var{ext}. Extensions +are stored as system shared libraries. +This option searches for the library using the @env{AWKLIBPATH} environment variable. The correct library suffix for your platform will be -supplied by default, so it need not be specified in the library name. -The library initialization routine should be named @code{dl_load()}. -An alternative is to use the @samp{@@load} keyword inside the program to load -a shared library. +supplied by default, so it need not be specified in the extension name. +The extension initialization routine should be named @code{dl_load()}. +An alternative is to use the @code{@@load} keyword inside the program to load +a shared library. This feature is described in detail in @ref{Dynamic Extensions}. -@item -L @r{[}value@r{]} -@itemx --lint@r{[}=value@r{]} +@item @option{-L}[@var{value}] +@itemx @option{--lint}[@code{=}@var{value}] @cindex @option{-l} option @cindex @option{--lint} option @cindex lint checking, issuing warnings @cindex warnings, issuing Warn about constructs that are dubious or nonportable to other @command{awk} implementations. +No space is allowed between the @option{-D} and @var{value}, if +@var{value} is supplied. Some warnings are issued when @command{gawk} first reads your program. Others are issued at runtime, as your program executes. With an optional argument of @samp{fatal}, @@ -3616,16 +3646,16 @@ when eliminating problems pointed out by @option{--lint}, you should take care to search for all occurrences of each inappropriate construct. As @command{awk} programs are usually short, doing so is not burdensome. -@item -M -@itemx --bignum +@item @option{-M} +@itemx @option{--bignum} @cindex @option{-M} option @cindex @option{--bignum} option Force arbitrary precision arithmetic on numbers. This option has no effect if @command{gawk} is not compiled to use the GNU MPFR and MP libraries (@pxref{Gawk and MPFR}). -@item -n -@itemx --non-decimal-data +@item @option{-n} +@itemx @option{--non-decimal-data} @cindex @option{-n} option @cindex @option{--non-decimal-data} option @cindex hexadecimal values@comma{} enabling interpretation of @@ -3640,34 +3670,41 @@ This option can severely break old programs. Use with care. @end quotation -@item -N -@itemx --use-lc-numeric +@item @option{-N} +@itemx @option{--use-lc-numeric} @cindex @option{-N} option @cindex @option{--use-lc-numeric} option Force the use of the locale's decimal point character when parsing numeric input data (@pxref{Locales}). -@item -o@r{[}@var{file}@r{]} -@itemx --pretty-print@r{[}=@var{file}@r{]} +@item @option{-o}[@var{file}] +@itemx @option{--pretty-print}[@code{=}@var{file}] @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, output program is created in a file named @file{awkprof.out} +(@pxref{Profiling}). The optional @var{file} argument allows you to specify a different file name for the output. No space is allowed between the @option{-o} and @var{file}, if @var{file} is supplied. -@item -O -@itemx --optimize +@quotation NOTE +Due to the way @command{gawk} has evolved, with this option +your program is still executed. This will change in the +next major release such that @command{gawk} will only +pretty-print the program and not run it. +@end quotation + +@item @option{-O} +@itemx @option{--optimize} @cindex @option{--optimize} option @cindex @option{-O} option Enable some optimizations on the internal representation of the program. -At the moment this includes just simple constant folding. The @command{gawk} -maintainer hopes to add more optimizations over time. +At the moment this includes just simple constant folding. -@item -p@r{[}@var{file}@r{]} -@itemx --profile@r{[}=@var{file}@r{]} +@item @option{-p}[@var{file}] +@itemx @option{--profile}[@code{=}@var{file}] @cindex @option{-p} option @cindex @option{--profile} option @cindex @command{awk} profiling, enabling @@ -3682,8 +3719,8 @@ No space is allowed between the @option{-p} and @var{file}, if The profile contains execution counts for each statement in the program in the left margin, and function call counts for each function. -@item -P -@itemx --posix +@item @option{-P} +@itemx @option{--posix} @cindex @option{-P} option @cindex @option{--posix} option @cindex POSIX mode @@ -3730,10 +3767,10 @@ data (@pxref{Locales}). @cindex @option{--posix} option, @code{--traditional} option and If you supply both @option{--traditional} and @option{--posix} on the command line, @option{--posix} takes precedence. @command{gawk} -also issues a warning if both options are supplied. +issues a warning if both options are supplied. -@item -r -@itemx --re-interval +@item @option{-r} +@itemx @option{--re-interval} @cindex @option{-r} option @cindex @option{--re-interval} option @cindex regular expressions, interval expressions and @@ -3742,10 +3779,10 @@ Allow interval expressions in regexps. This is now @command{gawk}'s default behavior. Nevertheless, this option remains both for backward compatibility, -and for use in combination with the @option{--traditional} option. +and for use in combination with @option{--traditional}. -@item -S -@itemx --sandbox +@item @option{-S} +@itemx @option{--sandbox} @cindex @option{-S} option @cindex @option{--sandbox} option @cindex sandbox mode @@ -3757,16 +3794,16 @@ This is particularly useful when you want to run @command{awk} scripts from questionable sources and need to make sure the scripts can't access your system (other than the specified input data file). -@item -t -@itemx --lint-old +@item @option{-t} +@itemx @option{--lint-old} @cindex @option{-L} option @cindex @option{--lint-old} option Warn about constructs that are not available in the original version of @command{awk} from Version 7 Unix (@pxref{V7/SVR3.1}). -@item -V -@itemx --version +@item @option{-V} +@itemx @option{--version} @cindex @option{-V} option @cindex @option{--version} option @cindex @command{gawk}, versions of, information about@comma{} printing @@ -3808,13 +3845,13 @@ type @kbd{Ctrl-d} (the end-of-file character) to terminate it. input but then you will not be able to also use the standard input as a 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{--source} option. This does not require you to pre-empt the standard -input for your source code; it allows you to easily mix command-line -and library source code -(@pxref{AWKPATH Variable}). -The @option{--source} option may also be used multiple times on the command line. +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{--source} option. This does not require you to +pre-empt 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{--source} and @option{--include} +options may also be used multiple times on the command line. @cindex @option{--source} option If no @option{-f} or @option{--source} option is specified, then @command{gawk} @@ -3826,7 +3863,7 @@ program source code. @cindex POSIX mode If the environment variable @env{POSIXLY_CORRECT} exists, then @command{gawk} behaves in strict POSIX mode, exactly as if -you had supplied the @option{--posix} command-line option. +you had supplied @option{--posix}. Many GNU programs look for this environment variable to suppress extensions that conflict with POSIX, but @command{gawk} behaves differently: it suppresses all extensions, even those that do not @@ -3905,7 +3942,7 @@ The variable values given on the command line are processed for escape sequences (@pxref{Escape Sequences}). @value{DARKCORNER} -In some earlier implementations of @command{awk}, when a variable assignment +In some very early implementations of @command{awk}, when a variable assignment occurred before any file names, the assignment would happen @emph{before} the @code{BEGIN} rule was executed. @command{awk}'s behavior was thus inconsistent; some command-line assignments were available inside the @@ -3917,7 +3954,7 @@ upon the old behavior. The variable assignment feature is most useful for assigning to variables such as @code{RS}, @code{OFS}, and @code{ORS}, which control input and -output formats before scanning the data files. It is also useful for +output formats, before scanning the data files. It is also useful for controlling state if multiple passes are needed over a data file. For example: @@ -3959,7 +3996,7 @@ with @code{getline}. Some other versions of @command{awk} also support this, but it is not standard. (Some operating systems provide a @file{/dev/stdin} file -in the file system, however, @command{gawk} always processes +in the file system; however, @command{gawk} always processes this file name itself.) @node Environment Variables @@ -4007,7 +4044,7 @@ directory is the value of @samp{$(datadir)} generated when @command{gawk} was configured. You probably don't need to worry about this, though.} -The search path feature is particularly useful for building libraries +The search path feature is particularly helpful for building libraries of useful @command{awk} functions. The library files can be placed in a standard directory in the default path and then specified on the command line with a short file name. Otherwise, the full file name @@ -4024,11 +4061,13 @@ If the source code is not found after the initial search, the path is searched again after adding the default @samp{.awk} suffix to the filename. @quotation NOTE +@c 4/2014: +@c using @samp{.} to get quotes, since @file{} no longer supplies them. To include the current directory in the path, either place -@file{.} explicitly in the path or write a null entry in the +@samp{.} explicitly in the path or write a null entry in the path. (A null entry is indicated by starting or ending the path with a -colon or by placing two colons next to each other (@samp{::}).) +colon or by placing two colons next to each other [@samp{::}].) This path search mechanism is similar to the shell's. @c someday, @cite{The Bourne Again Shell}.... @@ -4043,7 +4082,7 @@ the current directory in the search path. If @env{AWKPATH} is not defined in the environment, @command{gawk} places its default search path into @code{ENVIRON["AWKPATH"]}. This makes it easy to determine -the actual search path that @command{gawk} will use +the actual search path that @command{gawk} used from within an @command{awk} program. While you can change @code{ENVIRON["AWKPATH"]} within your @command{awk} @@ -4055,18 +4094,18 @@ found, and @command{gawk} no longer needs to use @env{AWKPATH}. @node AWKLIBPATH Variable @subsection The @env{AWKLIBPATH} Environment Variable @cindex @env{AWKLIBPATH} environment variable -@cindex directories, searching for shared libraries -@cindex search paths, for shared libraries +@cindex directories, searching for loadable extensions +@cindex search paths, for loadable extensions @cindex differences in @command{awk} and @command{gawk}, @code{AWKLIBPATH} environment variable The @env{AWKLIBPATH} environment variable is similar to the @env{AWKPATH} -variable, but it is used to search for shared libraries specified -with the @option{-l} option rather than for source files. If the library -is not found, the path is searched again after adding the appropriate -shared library suffix for the platform. For example, on GNU/Linux systems, -the suffix @samp{.so} is used. -The search path specified is also used for libraries loaded via the -@samp{@@load} keyword (@pxref{Loading Shared Libraries}). +variable, but it is used to search for loadable extensions (stored as +system shared libraries) specified with the @option{-l} option rather +than for source files. If the extension is not found, the path is +searched again after adding the appropriate shared library suffix for +the platform. For example, on GNU/Linux systems, the suffix @samp{.so} +is used. The search path specified is also used for extensions loaded +via the @code{@@load} keyword (@pxref{Loading Shared Libraries}). @node Other Environment Variables @subsection Other Environment Variables @@ -4082,7 +4121,7 @@ mode, disabling all traditional and GNU extensions. @xref{Options}. @item GAWK_SOCK_RETRIES -Controls the number of time @command{gawk} will attempt to +Controls the number of times @command{gawk} attempts to retry a two-way TCP/IP (socket) connection before giving up. @xref{TCP/IP Networking}. @@ -4130,6 +4169,11 @@ two regexp matchers that @command{gawk} uses internally. (There aren't supposed to be differences, but occasionally theory and practice don't coordinate with each other.) +@item GAWK_NO_PP_RUN +If this variable exists, then when invoked with the @option{--pretty-print} +option, @command{gawk} skips running the program. This variable will +not survive into the next major release. + @item GAWK_STACKSIZE This specifies the amount by which @command{gawk} should grow its internal evaluation stack, when needed. @@ -4174,13 +4218,13 @@ to @code{EXIT_FAILURE}. This @value{SECTION} describes a feature that is specific to @command{gawk}. -The @samp{@@include} keyword can be used to read external @command{awk} source +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, into external files. These files can be used just like function libraries, -using the @samp{@@include} keyword in conjunction with the @env{AWKPATH} +using the @code{@@include} keyword in conjunction with the @env{AWKPATH} environment variable. Note that source files may also be included using the @option{-i} option. @@ -4214,14 +4258,14 @@ $ @kbd{gawk -f test2} @end example @code{gawk} runs the @file{test2} script which includes @file{test1} -using the @samp{@@include} +using the @code{@@include} keyword. So, to include external @command{awk} source files you just -use @samp{@@include} followed by the name of the file to be included, +use @code{@@include} followed by the name of the file to be included, enclosed in double quotes. @quotation NOTE Keep in mind that this is a language construct and the file name cannot -be a string variable, but rather just a literal string in double quotes. +be a string variable, but rather just a literal string constant in double quotes. @end quotation The files to be included may be nested; e.g., given a third @@ -4260,47 +4304,48 @@ or: @noindent are valid. The @code{AWKPATH} environment variable can be of great -value when using @samp{@@include}. The same rules for the use +value when using @code{@@include}. The same rules for the use of the @code{AWKPATH} variable in command-line file searches (@pxref{AWKPATH Variable}) apply to -@samp{@@include} also. +@code{@@include} also. 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 @code{AWKPATH} -environment variable accordingly and then using @samp{@@include} with +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 environment is, the more directories you may need to organize the files to be included. Given the ability to specify multiple @option{-f} options, the -@samp{@@include} mechanism is not strictly necessary. -However, the @samp{@@include} keyword +@code{@@include} mechanism is not strictly necessary. +However, the @code{@@include} keyword can help you in constructing self-contained @command{gawk} programs, thus reducing the need for writing complex and tedious command lines. -In particular, @samp{@@include} is very useful for writing CGI scripts +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 @samp{@@include}. +and this also applies to files named with @code{@@include}. @node Loading Shared Libraries -@section Loading Shared Libraries Into Your Program +@section Loading Dynamic Extensions Into Your Program This @value{SECTION} describes a feature that is specific to @command{gawk}. -The @samp{@@load} keyword can be used to read external @command{awk} shared -libraries. This allows you to link in compiled code that may offer superior +The @code{@@load} keyword can be used to read external @command{awk} extensions +(stored as system shared libraries). +This allows you to link in compiled code that may offer superior performance and/or give you access to extended capabilities not supported by the @command{awk} language. The @env{AWKLIBPATH} variable is used to -search for the shared library. Using @samp{@@load} is completely equivalent +search for the extension. Using @code{@@load} is completely equivalent to using the @option{-l} command-line option. -If the shared library is not initially found in @env{AWKLIBPATH}, another +If the extension is not initially found in @env{AWKLIBPATH}, another search is conducted after appending the platform's default shared library suffix to the filename. For example, on GNU/Linux systems, the suffix @samp{.so} is used. @@ -4320,11 +4365,11 @@ $ @kbd{gawk -lordchr 'BEGIN @{print chr(65)@}'} @noindent For command-line usage, the @option{-l} option is more convenient, -but @samp{@@load} is useful for embedding inside an @command{awk} source file -that requires access to a shared library. +but @code{@@load} is useful for embedding inside an @command{awk} source file +that requires access to an extension. @ref{Dynamic Extensions}, describes how to write extensions (in C or C++) -that can be loaded with either @samp{@@load} or the @option{-l} option. +that can be loaded with either @code{@@load} or the @option{-l} option. @node Obsolete @section Obsolete Options and/or Features @@ -4470,8 +4515,8 @@ A regular expression can be used as a pattern by enclosing it in slashes. Then the regular expression is tested against the entire text of each record. (Normally, it only needs to match some part of the text in order to succeed.) For example, the -following prints the second field of each record that contains the string -@samp{li} anywhere in it: +following prints the second field of each record where the string +@samp{li} appears anywhere in the record: @example $ @kbd{awk '/li/ @{ print $2 @}' mail-list} @@ -4601,7 +4646,7 @@ A literal backslash, @samp{\}. @cindex backslash (@code{\}), @code{\a} escape sequence @item \a The ``alert'' character, @kbd{Ctrl-g}, ASCII code 7 (BEL). -(This usually makes some sort of audible noise.) +(This often makes some sort of audible noise.) @cindex @code{\} (backslash), @code{\b} escape sequence @cindex backslash (@code{\}), @code{\b} escape sequence @@ -4872,10 +4917,11 @@ 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 table stand for themselves: -@table @code +@c Use @asis so the docbook comes out ok. Sigh. +@table @asis @cindex backslash (@code{\}), regexp operator @cindex @code{\} (backslash), regexp operator -@item \ +@item @code{\} This is used to suppress the special meaning of a character when matching. For example, @samp{\$} matches the character @samp{$}. @@ -4884,7 +4930,7 @@ matches the character @samp{$}. @cindex Texinfo, chapter beginnings in files @cindex @code{^} (caret), regexp operator @cindex caret (@code{^}), regexp operator -@item ^ +@item @code{^} This matches the beginning of a string. For example, @samp{^@@chapter} matches @samp{@@chapter} at the beginning of a string and can be used to identify chapter beginnings in Texinfo source files. @@ -4892,7 +4938,7 @@ The @samp{^} is known as an @dfn{anchor}, because it anchors the pattern to match only at the beginning of the string. It is important to realize that @samp{^} does not match the beginning of -a line embedded in a string. +a line (the point right after a @samp{\n} newline character) embedded in a string. The condition is not true in the following example: @example @@ -4901,11 +4947,13 @@ if ("line1\nLINE 2" ~ /^L/) @dots{} @cindex @code{$} (dollar sign), regexp operator @cindex dollar sign (@code{$}), regexp operator -@item $ +@item @code{$} This is similar to @samp{^}, but it matches only at the end of a string. For example, @samp{p$} matches a record that ends with a @samp{p}. The @samp{$} is an anchor -and does not match the end of a line embedded in a string. +and does not match the end of a line +(the point right before a @samp{\n} newline character) +embedded in a string. The condition in the following example is not true: @example @@ -4914,7 +4962,7 @@ if ("line1\nLINE 2" ~ /1$/) @dots{} @cindex @code{.} (period), regexp operator @cindex period (@code{.}), regexp operator -@item . @r{(period)} +@item @code{.} (period) This matches any single character, @emph{including} the newline character. For example, @samp{.P} matches any single character followed by a @samp{P} in a string. Using @@ -4935,7 +4983,7 @@ may not be able to match the @sc{nul} character. @cindex character sets, See Also bracket expressions @cindex character lists, See bracket expressions @cindex character classes, See bracket expressions -@item [@dots{}] +@item @code{[}@dots{}@code{]} This is called a @dfn{bracket expression}.@footnote{In other literature, you may see a bracket expression referred to as either a @dfn{character set}, a @dfn{character class}, or a @dfn{character list}.} @@ -4947,7 +4995,7 @@ is given in @ref{Bracket Expressions}. @cindex bracket expressions, complemented -@item [^ @dots{}] +@item @code{[^}@dots{}@code{]} This is a @dfn{complemented bracket expression}. The first character after the @samp{[} @emph{must} be a @samp{^}. It matches any characters @emph{except} those in the square brackets. For example, @samp{[^awk]} @@ -4956,7 +5004,7 @@ or @samp{k}. @cindex @code{|} (vertical bar) @cindex vertical bar (@code{|}) -@item | +@item @code{|} This is the @dfn{alternation operator} and it is used to specify alternatives. The @samp{|} has the lowest precedence of all the regular @@ -4969,7 +5017,7 @@ The alternation applies to the largest possible regexps on either side. @cindex @code{()} (parentheses), regexp operator @cindex parentheses @code{()}, regexp operator -@item (@dots{}) +@item @code{(}@dots{}@code{)} Parentheses are used for grouping in regular expressions, as in arithmetic. They can be used to concatenate regular expressions containing the alternation operator, @samp{|}. For example, @@ -4980,7 +5028,7 @@ explained further on in this list.) @cindex @code{*} (asterisk), @code{*} operator, as regexp operator @cindex asterisk (@code{*}), @code{*} operator, as regexp operator -@item * +@item @code{*} This symbol means that the preceding regular expression should be repeated as many times as necessary to find a match. For example, @samp{ph*} applies the @samp{*} symbol to the preceding @samp{h} and looks for matches @@ -4998,11 +5046,11 @@ with backslashes. @cindex @code{+} (plus sign), regexp operator @cindex plus sign (@code{+}), regexp operator -@item + +@item @code{+} This symbol is similar to @samp{*}, except that the preceding expression must be matched at least once. This means that @samp{wh+y} would match @samp{why} and @samp{whhy}, but not @samp{wy}, whereas -@samp{wh*y} would match all three of these strings. +@samp{wh*y} would match all three. The following is a simpler way of writing the last @samp{*} example: @@ -5012,15 +5060,15 @@ awk '/\(c[ad]+r x\)/ @{ print @}' sample @cindex @code{?} (question mark), regexp operator @cindex question mark (@code{?}), regexp operator -@item ? +@item @code{?} This symbol is similar to @samp{*}, except that the preceding expression can be matched either once or not at all. For example, @samp{fe?d} matches @samp{fed} and @samp{fd}, but nothing else. @cindex interval expressions, regexp operator -@item @{@var{n}@} -@itemx @{@var{n},@} -@itemx @{@var{n},@var{m}@} +@item @code{@{}@var{n}@code{@}} +@itemx @code{@{}@var{n}@code{,@}} +@itemx @code{@{}@var{n}@code{,}@var{m}@code{@}} One or two numbers inside braces denote an @dfn{interval expression}. If there is one number in the braces, the preceding regexp is repeated @var{n} times. @@ -5443,10 +5491,12 @@ This works in any POSIX-compliant @command{awk}. Another method, specific to @command{gawk}, is to set the variable @code{IGNORECASE} to a nonzero value (@pxref{Built-in Variables}). When @code{IGNORECASE} is not zero, @emph{all} regexp and string -operations ignore case. Changing the value of -@code{IGNORECASE} dynamically controls the case-sensitivity of the -program as it runs. Case is significant by default because -@code{IGNORECASE} (like most variables) is initialized to zero: +operations ignore case. + +Changing the value of @code{IGNORECASE} dynamically controls the +case-sensitivity of the program as it runs. Case is significant by +default because @code{IGNORECASE} (like most variables) is initialized +to zero: @example x = "aB" @@ -5476,9 +5526,6 @@ case-sensitivity on or off for all the rules at once. Setting @code{IGNORECASE} from the command line is a way to make a program case-insensitive without having to edit it. -Both regexp and string comparison -operations are affected by @code{IGNORECASE}. - @c @cindex ISO 8859-1 @c @cindex ISO Latin-1 In multibyte locales, @@ -5556,7 +5603,7 @@ regexp constant (i.e., a string of characters between slashes). It may be any expression. The expression is evaluated and converted to a string if necessary; the contents of the string are then used as the regexp. A regexp computed in this way is called a @dfn{dynamic -regexp}: +regexp} or a @dfn{computed regexp}: @example BEGIN @{ digits_regexp = "[[:digit:]]+" @} @@ -5630,7 +5677,7 @@ intend a regexp match. @cindex regular expressions, dynamic, with embedded newlines @cindex newlines, in dynamic regexps -Some commercial versions of @command{awk} do not allow the newline +Some versions of @command{awk} do not allow the newline character to be used inside a bracket expression for a dynamic regexp: @example @@ -5668,7 +5715,7 @@ occur often in practice, but it's worth noting for future reference. @cindex regular expressions, dynamic, with embedded newlines @cindex newlines, in dynamic regexps -Some commercial versions of @command{awk} do not allow the newline +Some versions of @command{awk} do not allow the newline character to be used inside a bracket expression for a dynamic regexp: @example @@ -6652,7 +6699,7 @@ $ @kbd{echo ' a b c d ' | awk 'BEGIN @{ FS = "[ \t\n]+" @}} @cindex null strings @cindex strings, null @cindex empty strings, See null strings -In this case, the first field is @dfn{null} or empty. +In this case, the first field is null, or empty. The stripping of leading and trailing whitespace also comes into play whenever @code{$0} is recomputed. For instance, study this pipeline: @@ -7738,19 +7785,19 @@ Such a record is replaced by the contents of the file Note here how the name of the extra input file is not built into the program; it is taken directly from the data, specifically from the second field on -the @samp{@@include} line. +the @code{@@include} line. The @code{close()} function is called to ensure that if two identical -@samp{@@include} lines appear in the input, the entire specified file is +@code{@@include} lines appear in the input, the entire specified file is included twice. @xref{Close Files And Pipes}. One deficiency of this program is that it does not process nested -@samp{@@include} statements -(i.e., @samp{@@include} statements in included files) +@code{@@include} statements +(i.e., @code{@@include} statements in included files) the way a true macro preprocessor would. @xref{Igawk Program}, for a program -that does handle nested @samp{@@include} statements. +that does handle nested @code{@@include} statements. @node Getline/Pipe @subsection Using @code{getline} from a Pipe @@ -8566,8 +8613,9 @@ of value to print. The rest of the format specifier is made up of optional @dfn{modifiers} that control @emph{how} to print the value, such as the field width. Here is a list of the format-control letters: -@table @code -@item %c +@c @asis for docbook to come out right +@table @asis +@item @code{%c} Print a number as an ASCII character; thus, @samp{printf "%c", 65} outputs the letter @samp{A}. The output for a string value is the first character of the string. @@ -8599,12 +8647,12 @@ a single byte (0--255). @end quotation -@item %d@r{,} %i +@item @code{%d}, @code{%i} Print a decimal integer. The two control letters are equivalent. (The @samp{%i} specification is for compatibility with ISO C.) -@item %e@r{,} %E +@item @code{%e}, @code{%E} Print a number in scientific (exponential) notation; for example: @@ -8619,7 +8667,7 @@ which follow the decimal point. discussed in the next @value{SUBSECTION}.) @samp{%E} uses @samp{E} instead of @samp{e} in the output. -@item %f +@item @code{%f} Print a number in floating-point notation. For example: @@ -8641,37 +8689,37 @@ and positive infinity as @samp{inf} and @samp{infinity}. The special ``not a number'' value formats as @samp{-nan} or @samp{nan}. -@item %F +@item @code{%F} 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 support it. On those that don't, @command{gawk} uses @samp{%f} instead. -@item %g@r{,} %G +@item @code{%g}, @code{%G} Print a number in either scientific notation or in floating-point notation, whichever uses fewer characters; if the result is printed in scientific notation, @samp{%G} uses @samp{E} instead of @samp{e}. -@item %o +@item @code{%o} Print an unsigned octal integer (@pxref{Nondecimal-numbers}). -@item %s +@item @code{%s} Print a string. -@item %u +@item @code{%u} Print an unsigned decimal integer. (This format is of marginal use, because all numbers in @command{awk} are floating-point; it is provided primarily for compatibility with C.) -@item %x@r{,} %X +@item @code{%x}, @code{%X} Print an unsigned hexadecimal integer; @samp{%X} uses the letters @samp{A} through @samp{F} instead of @samp{a} through @samp{f} (@pxref{Nondecimal-numbers}). -@item %% +@item @code{%%} Print a single @samp{%}. This does not consume an argument and it ignores any modifiers. @@ -11908,28 +11956,28 @@ expression because the first @samp{$} has higher precedence than the This table presents @command{awk}'s operators, in order of highest to lowest precedence: -@c use @code in the items, looks better in TeX w/o all the quotes -@table @code -@item (@dots{}) +@c @asis for docbook to come out right +@table @asis +@item @code{(}@dots{}@code{)} Grouping. @cindex @code{$} (dollar sign), @code{$} field operator @cindex dollar sign (@code{$}), @code{$} field operator -@item $ +@item @code{$} Field reference. @cindex @code{+} (plus sign), @code{++} operator @cindex plus sign (@code{+}), @code{++} operator @cindex @code{-} (hyphen), @code{--} operator @cindex hyphen (@code{-}), @code{--} operator -@item ++ -- +@item @code{++ --} Increment, decrement. @cindex @code{^} (caret), @code{^} operator @cindex caret (@code{^}), @code{^} operator @cindex @code{*} (asterisk), @code{**} operator @cindex asterisk (@code{*}), @code{**} operator -@item ^ ** +@item @code{^ **} Exponentiation. These operators group right-to-left. @cindex @code{+} (plus sign), @code{+} operator @@ -11938,7 +11986,7 @@ Exponentiation. These operators group right-to-left. @cindex hyphen (@code{-}), @code{-} operator @cindex @code{!} (exclamation point), @code{!} operator @cindex exclamation point (@code{!}), @code{!} operator -@item + - ! +@item @code{+ - !} Unary plus, minus, logical ``not.'' @cindex @code{*} (asterisk), @code{*} operator, as multiplication operator @@ -11947,17 +11995,17 @@ Unary plus, minus, logical ``not.'' @cindex forward slash (@code{/}), @code{/} operator @cindex @code{%} (percent sign), @code{%} operator @cindex percent sign (@code{%}), @code{%} operator -@item * / % +@item @code{* / %} Multiplication, division, remainder. @cindex @code{+} (plus sign), @code{+} operator @cindex plus sign (@code{+}), @code{+} operator @cindex @code{-} (hyphen), @code{-} operator @cindex hyphen (@code{-}), @code{-} operator -@item + - +@item @code{+ -} Addition, subtraction. -@item @r{String Concatenation} +@item String Concatenation There is no special symbol for concatenation. The operands are simply written side by side (@pxref{Concatenation}). @@ -11983,7 +12031,7 @@ The operands are simply written side by side @cindex @code{|} (vertical bar), @code{|&} operator (I/O) @cindex vertical bar (@code{|}), @code{|&} operator (I/O) @cindex operators, input/output -@item < <= == != > >= >> | |& +@item @code{< <= == != > >= >> | |&} Relational and redirection. The relational operators and the redirections have the same precedence level. Characters such as @samp{>} serve both as relationals and as @@ -12004,26 +12052,26 @@ The correct way to write this statement is @samp{print foo > (a ? b : c)}. @cindex tilde (@code{~}), @code{~} operator @cindex @code{!} (exclamation point), @code{!~} operator @cindex exclamation point (@code{!}), @code{!~} operator -@item ~ !~ +@item @code{~ !~} Matching, nonmatching. @cindex @code{in} operator -@item in +@item @code{in} Array membership. @cindex @code{&} (ampersand), @code{&&} operator @cindex ampersand (@code{&}), @code{&&} operator -@item && +@item @code{&&} Logical ``and''. @cindex @code{|} (vertical bar), @code{||} operator @cindex vertical bar (@code{|}), @code{||} operator -@item || +@item @code{||} Logical ``or''. @cindex @code{?} (question mark), @code{?:} operator @cindex question mark (@code{?}), @code{?:} operator -@item ?: +@item @code{?:} Conditional. This operator groups right-to-left. @cindex @code{+} (plus sign), @code{+=} operator @@ -12040,7 +12088,7 @@ Conditional. This operator groups right-to-left. @cindex percent sign (@code{%}), @code{%=} operator @cindex @code{^} (caret), @code{^=} operator @cindex caret (@code{^}), @code{^=} operator -@item = += -= *= /= %= ^= **= +@item @code{= += -= *= /= %= ^= **=} Assignment. These operators group right-to-left. @end table @@ -13804,11 +13852,12 @@ sets automatically on certain occasions in order to provide information to your program. The variables that are specific to @command{gawk} are marked with a pound sign@w{ (@samp{#}).} -@table @code +@c @asis for docbook +@table @asis @cindex @code{ARGC}/@code{ARGV} variables @cindex arguments, command-line @cindex command line, arguments -@item ARGC@r{,} ARGV +@item @code{ARGC}, @code{ARGV} The command-line arguments available to @command{awk} programs are stored in an array called @code{ARGV}. @code{ARGC} is the number of command-line arguments present. @xref{Other Arguments}. @@ -13848,7 +13897,7 @@ about how @command{awk} uses these variables. @cindex @code{ARGIND} variable @cindex differences in @command{awk} and @command{gawk}, @code{ARGIND} variable -@item ARGIND # +@item @code{ARGIND} # The index in @code{ARGV} of the current file being processed. Every time @command{gawk} opens a new data file for processing, it sets @code{ARGIND} to the index in @code{ARGV} of the file name. @@ -13873,7 +13922,7 @@ it is not special. @cindex @code{ENVIRON} array @cindex environment variables, in @code{ENVIRON} array -@item ENVIRON +@item @code{ENVIRON} An associative array containing the values of the environment. The array indices are the environment variable names; the elements are the values of the particular environment variables. For example, @@ -13893,7 +13942,7 @@ On such systems, the @code{ENVIRON} array is empty (except for @cindex @code{ERRNO} variable @cindex differences in @command{awk} and @command{gawk}, @code{ERRNO} variable @cindex error handling, @code{ERRNO} variable and -@item ERRNO # +@item @code{ERRNO} # If a system error occurs during a redirection for @code{getline}, during a read for @code{getline}, or during a @code{close()} operation, then @code{ERRNO} contains a string describing the error. @@ -13920,7 +13969,7 @@ it is not special. @cindex @code{FILENAME} variable @cindex dark corner, @code{FILENAME} variable -@item FILENAME +@item @code{FILENAME} The name of the file that @command{awk} is currently reading. When no data files are listed on the command line, @command{awk} reads from the standard input and @code{FILENAME} is set to @code{"-"}. @@ -13939,14 +13988,14 @@ inside a @code{BEGIN} rule can give @code{FILENAME} a value. @cindex @code{FNR} variable -@item FNR +@item @code{FNR} The current record number in the current file. @code{FNR} is incremented each time a new record is read (@pxref{Records}). It is reinitialized to zero each time a new input file is started. @cindex @code{NF} variable -@item NF +@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}). @@ -13960,7 +14009,7 @@ current record. @xref{Changing Fields}. @cindex @code{FUNCTAB} array @cindex @command{gawk}, @code{FUNCTAB} array in @cindex differences in @command{awk} and @command{gawk}, @code{FUNCTAB} variable -@item FUNCTAB # +@item @code{FUNCTAB} # An array whose indices and corresponding values are the names of all the user-defined or extension functions in the program. @@ -13971,7 +14020,7 @@ the @code{FUNCTAB} array will also cause a fatal error. @end quotation @cindex @code{NR} variable -@item NR +@item @code{NR} The number of input records @command{awk} has processed since the beginning of the program's execution (@pxref{Records}). @@ -13980,7 +14029,7 @@ the beginning of the program's execution @cindex @command{gawk}, @code{PROCINFO} array in @cindex @code{PROCINFO} array @cindex differences in @command{awk} and @command{gawk}, @code{PROCINFO} array -@item PROCINFO # +@item @code{PROCINFO} # The elements of this array provide access to information about the running @command{awk} program. The following elements (listed alphabetically) @@ -14137,7 +14186,7 @@ or if @command{gawk} is in compatibility mode it is not special. @cindex @code{RLENGTH} variable -@item RLENGTH +@item @code{RLENGTH} The length of the substring matched by the @code{match()} function (@pxref{String Functions}). @@ -14145,7 +14194,7 @@ The length of the substring matched by the is the length of the matched string, or @minus{}1 if no match is found. @cindex @code{RSTART} variable -@item RSTART +@item @code{RSTART} The start-index in characters of the substring that is matched by the @code{match()} function (@pxref{String Functions}). @@ -14156,7 +14205,7 @@ if no match was found. @cindex @command{gawk}, @code{RT} variable in @cindex @code{RT} variable @cindex differences in @command{awk} and @command{gawk}, @code{RT} variable -@item RT # +@item @code{RT} # This is set each time a record is read. It contains the input text that matched the text denoted by @code{RS}, the record separator. @@ -14169,7 +14218,7 @@ it is not special. @cindex @command{gawk}, @code{SYMTAB} array in @cindex @code{SYMTAB} array @cindex differences in @command{awk} and @command{gawk}, @code{SYMTAB} variable -@item SYMTAB # +@item @code{SYMTAB} # An array whose indices are the names of all currently defined global variables and arrays in the program. The array may be used for indirect access to read or write the value of a variable: @@ -15692,26 +15741,27 @@ The following list describes all of the built-in functions that work with numbers. Optional parameters are enclosed in square brackets@w{ ([ ]):} -@table @code -@item atan2(@var{y}, @var{x}) +@c @asis for docbook +@table @asis +@item @code{atan2(@var{y}, @var{x})} @cindexawkfunc{atan2} @cindex arctangent Return the arctangent of @code{@var{y} / @var{x}} in radians. You can use @samp{pi = atan2(0, -1)} to retrieve the value of @value{PI}. -@item cos(@var{x}) +@item @code{cos(@var{x})} @cindexawkfunc{cos} @cindex cosine Return the cosine of @var{x}, with @var{x} in radians. -@item exp(@var{x}) +@item @code{exp(@var{x})} @cindexawkfunc{exp} @cindex exponent Return the exponential of @var{x} (@code{e ^ @var{x}}) or report an error if @var{x} is out of range. The range of values @var{x} can have depends on your machine's floating-point representation. -@item int(@var{x}) +@item @code{int(@var{x})} @cindexawkfunc{int} @cindex round to nearest integer Return the nearest integer to @var{x}, located between @var{x} and zero and @@ -15720,13 +15770,13 @@ 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 log(@var{x}) +@item @code{log(@var{x})} @cindexawkfunc{log} @cindex logarithm Return the natural logarithm of @var{x}, if @var{x} is positive; otherwise, report an error. -@item rand() +@item @code{rand()} @cindexawkfunc{rand} @cindex random numbers, @code{rand()}/@code{srand()} functions Return a random number. The values of @code{rand()} are @@ -15784,19 +15834,19 @@ the seed to a value that is different in each run. To do this, use @code{srand()}. @end quotation -@item sin(@var{x}) +@item @code{sin(@var{x})} @cindexawkfunc{sin} @cindex sine Return the sine of @var{x}, with @var{x} in radians. -@item sqrt(@var{x}) +@item @code{sqrt(@var{x})} @cindexawkfunc{sqrt} @cindex square root Return the positive square root of @var{x}. @command{gawk} prints a warning message if @var{x} is negative. Thus, @code{sqrt(4)} is 2. -@item srand(@r{[}@var{x}@r{]}) +@item @code{srand(}[@var{x}]@code{)} @cindexawkfunc{srand} Set the starting point, or seed, for generating random numbers to the value @var{x}. @@ -15853,9 +15903,10 @@ pound sign@w{ (@samp{#}):} @code{gensub()}. @end menu -@table @code -@item asort(@var{source} @r{[}, @var{dest} @r{[}, @var{how} @r{]} @r{]}) # -@itemx asorti(@var{source} @r{[}, @var{dest} @r{[}, @var{how} @r{]} @r{]}) # +@c @asis for docbook +@table @asis +@item @code{asort(}@var{source} [@code{,} @var{dest} [@code{,} @var{how} ] ]@code{)} # +@itemx @code{asorti(}@var{source} [@code{,} @var{dest} [@code{,} @var{how} ] ]@code{)} # @cindexgawkfunc{asorti} @cindex sort array @cindex arrays, elements, retrieving number of @@ -15922,7 +15973,7 @@ a[3] = "middle" @code{asort()} and @code{asorti()} are @command{gawk} extensions; they are not available in compatibility mode (@pxref{Options}). -@item gensub(@var{regexp}, @var{replacement}, @var{how} @r{[}, @var{target}@r{]}) # +@item @code{gensub(@var{regexp}, @var{replacement}, @var{how}} [@code{, @var{target}}]@code{)} # @cindexgawkfunc{gensub} @cindex search and replace in strings @cindex substitute in string @@ -15987,7 +16038,7 @@ is the original unchanged value of @var{target}. @code{gensub()} is a @command{gawk} extension; it is not available in compatibility mode (@pxref{Options}). -@item gsub(@var{regexp}, @var{replacement} @r{[}, @var{target}@r{]}) +@item @code{gsub(@var{regexp}, @var{replacement}} [@code{, @var{target}}]@code{)} @cindexawkfunc{gsub} Search @var{target} for @emph{all} of the longest, leftmost, @emph{nonoverlapping} matching @@ -16009,7 +16060,7 @@ omitted, then the entire input record (@code{$0}) is used. As in @code{sub()}, the characters @samp{&} and @samp{\} are special, and the third argument must be assignable. -@item index(@var{in}, @var{find}) +@item @code{index(@var{in}, @var{find})} @cindexawkfunc{index} @cindex search in string @cindex find substring in string @@ -16028,7 +16079,7 @@ If @var{find} is not found, @code{index()} returns zero. It is a fatal error to use a regexp constant for @var{find}. -@item length(@r{[}@var{string}@r{]}) +@item @code{length(}[@var{string}]@code{)} @cindexawkfunc{length} @cindex string length @cindex length of string @@ -16093,7 +16144,7 @@ If @option{--lint} is provided on the command line If @option{--posix} is supplied, using an array argument is a fatal error (@pxref{Arrays}). -@item match(@var{string}, @var{regexp} @r{[}, @var{array}@r{]}) +@item @code{match(@var{string}, @var{regexp}} [@code{, @var{array}}]@code{)} @cindexawkfunc{match} @cindex string, regular expression match @cindex match regexp in string @@ -16210,7 +16261,7 @@ The @var{array} argument to @code{match()} is a (@pxref{Options}), using a third argument is a fatal error. -@item patsplit(@var{string}, @var{array} @r{[}, @var{fieldpat} @r{[}, @var{seps} @r{]} @r{]}) # +@item @code{patsplit(@var{string}, @var{array}} [@code{, @var{fieldpat}} [@code{, @var{seps}} ] ]@code{)} # @cindexgawkfunc{patsplit} @cindex split string into array Divide @@ -16242,7 +16293,7 @@ The @code{patsplit()} function is a (@pxref{Options}), it is not available. -@item split(@var{string}, @var{array} @r{[}, @var{fieldsep} @r{[}, @var{seps} @r{]} @r{]}) +@item @code{split(@var{string}, @var{array}} [@code{, @var{fieldsep}} [@code{, @var{seps}} ] ]@code{)} @cindexawkfunc{split} Divide @var{string} into pieces separated by @var{fieldsep} and store the pieces in @var{array} and the separator strings in the @@ -16327,7 +16378,7 @@ If @var{string} does not match @var{fieldsep} at all (but is not null), @var{array} has one element only. The value of that element is the original @var{string}. -@item sprintf(@var{format}, @var{expression1}, @dots{}) +@item @code{sprintf(@var{format}, @var{expression1}, @dots{})} @cindexawkfunc{sprintf} @cindex formatting strings Return (without printing) the string that @code{printf} would @@ -16344,7 +16395,7 @@ assigns the string @w{@samp{pi = 3.14 (approx.)}} to the variable @code{pival}. @cindexgawkfunc{strtonum} @cindex convert string to number -@item strtonum(@var{str}) # +@item @code{strtonum(@var{str})} # Examine @var{str} and return its numeric value. If @var{str} begins with a leading @samp{0}, @code{strtonum()} assumes that @var{str} is an octal number. If @var{str} begins with a leading @samp{0x} or @@ -16369,7 +16420,7 @@ for recognizing numbers (@pxref{Locales}). @code{strtonum()} is a @command{gawk} extension; it is not available in compatibility mode (@pxref{Options}). -@item sub(@var{regexp}, @var{replacement} @r{[}, @var{target}@r{]}) +@item @code{sub(@var{regexp}, @var{replacement}} [@code{, @var{target}}]@code{)} @cindexawkfunc{sub} @cindex replace in string Search @var{target}, which is treated as a string, for the @@ -16470,7 +16521,7 @@ will not run. Finally, if the @var{regexp} is not a regexp constant, it is converted into a string, and then the value of that string is treated as the regexp to match. -@item substr(@var{string}, @var{start} @r{[}, @var{length}@r{]}) +@item @code{substr(@var{string}, @var{start}} [@code{, @var{length}} ]@code{)} @cindexawkfunc{substr} @cindex substring Return a @var{length}-character-long substring of @var{string}, @@ -16530,7 +16581,7 @@ string = substr(string, 1, 2) "CDE" substr(string, 6) @cindex case sensitivity, converting case @cindex strings, converting letter case -@item tolower(@var{string}) +@item @code{tolower(@var{string})} @cindexawkfunc{tolower} @cindex convert string to lower case Return a copy of @var{string}, with each uppercase character @@ -16538,7 +16589,7 @@ in the string replaced with its corresponding lowercase character. Nonalphabetic characters are left unchanged. For example, @code{tolower("MiXeD cAsE 123")} returns @code{"mixed case 123"}. -@item toupper(@var{string}) +@item @code{toupper(@var{string})} @cindexawkfunc{toupper} @cindex convert string to upper case Return a copy of @var{string}, with each lowercase character @@ -16971,8 +17022,8 @@ Although this makes a certain amount of sense, it can be surprising. The following functions relate to input/output (I/O). Optional parameters are enclosed in square brackets ([ ]): -@table @code -@item close(@var{filename} @r{[}, @var{how}@r{]}) +@table @asis +@item @code{close(}@var{filename} [@code{,} @var{how}]@code{)} @cindexawkfunc{close} @cindex files, closing @cindex close file or coprocess @@ -16991,7 +17042,7 @@ not matter. @xref{Two-way I/O}, which discusses this feature in more detail and gives an example. -@item fflush(@r{[}@var{filename}@r{]}) +@item @code{fflush(}[@var{filename}]@code{)} @cindexawkfunc{fflush} @cindex flush buffered output Flush any buffered output associated with @var{filename}, which is either a @@ -17051,7 +17102,7 @@ a file or pipe that was opened for reading (such as with @code{getline}), or if @var{filename} is not an open file, pipe, or coprocess. In such a case, @code{fflush()} returns @minus{}1, as well. -@item system(@var{command}) +@item @code{system(@var{command})} @cindexawkfunc{system} @cindex invoke shell command @cindex interacting with other programs @@ -17407,7 +17458,7 @@ is out of range, @code{mktime()} returns @minus{}1. @cindex @command{gawk}, @code{PROCINFO} array in @cindex @code{PROCINFO} array -@item strftime(@r{[}@var{format} @r{[}, @var{timestamp} @r{[}, @var{utc-flag}@r{]]]}) +@item @code{strftime(} [@var{format} [@code{,} @var{timestamp} [@code{,} @var{utc-flag} ]]]@code{)} @c STARTOFRANGE strf @cindexgawkfunc{strftime} @cindex format time string @@ -17891,32 +17942,32 @@ bitwise operations just described. They are: @table @code @cindexgawkfunc{and} @cindex bitwise AND -@item and(@var{v1}, @var{v2} @r{[}, @r{@dots{}]}) +@item @code{and(@var{v1}, @var{v2}} [@code{,} @dots{}]@code{)} Return the bitwise AND of the arguments. There must be at least two. @cindexgawkfunc{compl} @cindex bitwise complement -@item compl(@var{val}) +@item @code{compl(@var{val})} Return the bitwise complement of @var{val}. @cindexgawkfunc{lshift} @cindex left shift -@item lshift(@var{val}, @var{count}) +@item @code{lshift(@var{val}, @var{count})} Return the value of @var{val}, shifted left by @var{count} bits. @cindexgawkfunc{or} @cindex bitwise OR -@item or(@var{v1}, @var{v2} @r{[}, @r{@dots{}]}) +@item @code{or(@var{v1}, @var{v2}} [@code{,} @dots{}]@code{)} Return the bitwise OR of the arguments. There must be at least two. @cindexgawkfunc{rshift} @cindex right shift -@item rshift(@var{val}, @var{count}) +@item @code{rshift(@var{val}, @var{count})} Return the value of @var{val}, shifted right by @var{count} bits. @cindexgawkfunc{xor} @cindex bitwise XOR -@item xor(@var{v1}, @var{v2} @r{[}, @r{@dots{}]}) +@item @code{xor(@var{v1}, @var{v2}} [@code{,} @dots{}]@code{)} Return the bitwise XOR of the arguments. There must be at least two. @end table @@ -18080,7 +18131,7 @@ Optional parameters are enclosed in square brackets ([ ]): @table @code @cindexgawkfunc{bindtextdomain} @cindex set directory of message catalogs -@item bindtextdomain(@var{directory} @r{[}, @var{domain}@r{]}) +@item @code{bindtextdomain(@var{directory}} [@code{,} @var{domain} ]@code{)} Set the directory in which @command{gawk} will look for message translation files, in case they will not or cannot be placed in the ``standard'' locations @@ -18094,14 +18145,14 @@ given @var{domain}. @cindexgawkfunc{dcgettext} @cindex translate string -@item dcgettext(@var{string} @r{[}, @var{domain} @r{[}, @var{category}@r{]]}) +@item @code{dcgettext(@var{string}} [@code{,} @var{domain} [@code{,} @var{category} ]]@code{)} Return the translation of @var{string} in text domain @var{domain} for locale category @var{category}. The default value for @var{domain} is the current value of @code{TEXTDOMAIN}. The default value for @var{category} is @code{"LC_MESSAGES"}. @cindexgawkfunc{dcngettext} -@item dcngettext(@var{string1}, @var{string2}, @var{number} @r{[}, @var{domain} @r{[}, @var{category}@r{]]}) +@item @code{dcngettext(@var{string1}, @var{string2}, @var{number}} [@code{,} @var{domain} [@code{,} @var{category} ]]@code{)} 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 @@ -19158,9 +19209,8 @@ for (i = 1; i <= n; i++) @part Part II:@* Problem Solving With @command{awk} @end iftex -@ignore @ifdocbook -@part Part II:@* Problem Solving With @command{awk} +@part Problem Solving With @command{awk} 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. @@ -19174,7 +19224,6 @@ It contains the following chapters: @ref{Sample Programs}. @end itemize @end ifdocbook -@end ignore @node Library Functions @chapter A Library of @command{awk} Functions @@ -24534,7 +24583,7 @@ BEGIN @{ The following program, @file{igawk.sh}, provides this service. It simulates @command{gawk}'s searching of the @env{AWKPATH} variable and also allows @dfn{nested} includes; i.e., a file that is included -with @samp{@@include} can contain further @samp{@@include} statements. +with @code{@@include} can contain further @code{@@include} statements. @command{igawk} makes an effort to only include files once, so that nested includes don't accidentally include a library function twice. @@ -24572,7 +24621,7 @@ of the file included into the program at the correct point. @item Run an @command{awk} program (naturally) over the shell variable's contents to expand -@samp{@@include} statements. The expanded program is placed in a second +@code{@@include} statements. The expanded program is placed in a second shell variable. @item @@ -24592,24 +24641,25 @@ argument is @samp{debug}. The next part loops through all the command-line arguments. There are several cases of interest: -@table @code -@item -- +@c @asis for docbook +@table @asis +@item @option{--} This ends the arguments to @command{igawk}. Anything else should be passed on to the user's @command{awk} program without being evaluated. -@item -W +@item @option{-W} This indicates that the next option is specific to @command{gawk}. To make argument processing easier, the @option{-W} is appended to the front of the remaining arguments and the loop continues. (This is an @command{sh} programming trick. Don't worry about it if you are not familiar with @command{sh}.) -@item -v@r{,} -F +@item @option{-v}, @option{-F} These are saved and passed on to @command{gawk}. -@item -f@r{,} --file@r{,} --file=@r{,} -Wfile= +@item @option{-f}, @option{--file}, @option{--file=}, @option{-Wfile=} The file name is appended to the shell variable @code{program} with an -@samp{@@include} statement. +@code{@@include} statement. The @command{expr} utility is used to remove the leading option part of the argument (e.g., @samp{--file=}). (Typical @command{sh} usage would be to use the @command{echo} and @command{sed} @@ -24617,10 +24667,10 @@ utilities to do this work. Unfortunately, some versions of @command{echo} evalu escape sequences in their arguments, possibly mangling the program text. Using @command{expr} avoids this problem.) -@item --source@r{,} --source=@r{,} -Wsource= +@item @option{--source}, @option{--source=}, @option{-Wsource=} The source text is appended to @code{program}. -@item --version@r{,} -Wversion +@item @option{--version}, @option{-Wversion} @command{igawk} prints its version number, runs @samp{gawk --version} to get the @command{gawk} version information, and then exits. @end table @@ -24728,14 +24778,14 @@ fi @c endfile @end example -The @command{awk} program to process @samp{@@include} directives +The @command{awk} program to process @code{@@include} directives is stored in the shell variable @code{expand_prog}. Doing this keeps the shell script readable. The @command{awk} program reads through the user's program, one line at a time, using @code{getline} (@pxref{Getline}). The input -file names and @samp{@@include} statements are managed using a stack. -As each @samp{@@include} is encountered, the current file name is -``pushed'' onto the stack and the file named in the @samp{@@include} +file names and @code{@@include} statements are managed using a stack. +As each @code{@@include} is encountered, the current file name is +``pushed'' onto the stack and the file named in the @code{@@include} directive becomes the current file name. As each file is finished, the stack is ``popped,'' and the previous input file becomes the current input file again. The process is started by making the original file @@ -24811,8 +24861,8 @@ BEGIN @{ The stack is initialized with @code{ARGV[1]}, which will be @samp{/dev/stdin}. The main loop comes next. Input lines are read in succession. Lines that -do not start with @samp{@@include} are printed verbatim. -If the line does start with @samp{@@include}, the file name is in @code{$2}. +do not start with @code{@@include} are printed verbatim. +If the line does start with @code{@@include}, the file name is in @code{$2}. @code{pathto()} is called to generate the full path. If it cannot, then the program prints an error message and continues. @@ -24880,7 +24930,7 @@ It's done in these steps: @enumerate @item -Run @command{gawk} with the @samp{@@include}-processing program (the +Run @command{gawk} with the @code{@@include}-processing program (the value of the @code{expand_prog} shell variable) on standard input. @item @@ -24924,9 +24974,9 @@ There are four key simplifications that make the program work better: @itemize @bullet @item -Using @samp{@@include} even for the files named with @option{-f} makes building +Using @code{@@include} even for the files named with @option{-f} makes building the initial collected @command{awk} program much simpler; all the -@samp{@@include} processing can be done once. +@code{@@include} processing can be done once. @item Not trying to save the line read with @code{getline} @@ -24939,7 +24989,7 @@ considerably. @item Using a @code{getline} loop in the @code{BEGIN} rule does it all in one place. It is not necessary to call out to a separate loop for processing -nested @samp{@@include} statements. +nested @code{@@include} statements. @item Instead of saving the expanded program in a temporary file, putting it in a shell variable @@ -24959,7 +25009,7 @@ Finally, @command{igawk} shows that it is not always necessary to add new features to a program; they can often be layered on top. @ignore With @command{igawk}, -there is no real reason to build @samp{@@include} processing into +there is no real reason to build @code{@@include} processing into @command{gawk} itself. @end ignore @@ -24988,8 +25038,8 @@ One user @c Karl Berry, karl@ileaf.com, 10/95 suggested that @command{gawk} be modified to automatically read these files upon startup. Instead, it would be very simple to modify @command{igawk} -to do this. Since @command{igawk} can process nested @samp{@@include} -directives, @file{default.awk} could simply contain @samp{@@include} +to do this. Since @command{igawk} can process nested @code{@@include} +directives, @file{default.awk} could simply contain @code{@@include} statements for the desired library functions. @c Exercise: make this change @@ -25244,10 +25294,8 @@ BEGIN { @part Part III:@* Moving Beyond Standard @command{awk} With @command{gawk} @end iftex -@ignore @ifdocbook - -@part Part III:@* Moving Beyond Standard @command{awk} With @command{gawk} +@part Moving Beyond Standard @command{awk} With @command{gawk} Part III focuses on features specific to @command{gawk}. It contains the following chapters: @@ -25269,7 +25317,6 @@ It contains the following chapters: @ref{Dynamic Extensions}. @end itemize @end ifdocbook -@end ignore @node Advanced Features @chapter Advanced Features of @command{gawk} @@ -26665,7 +26712,7 @@ are candidates for translation at runtime. String constants without a leading underscore are not translated. @cindexgawkfunc{dcgettext} -@item dcgettext(@var{string} @r{[}, @var{domain} @r{[}, @var{category}@r{]]}) +@item @code{dcgettext(@var{string}} [@code{,} @var{domain} [@code{,} @var{category} ]]@code{)} Return the translation of @var{string} in text domain @var{domain} for locale category @var{category}. The default value for @var{domain} is the current value of @code{TEXTDOMAIN}. @@ -26691,7 +26738,7 @@ default arguments. @end quotation @cindexgawkfunc{dcngettext} -@item dcngettext(@var{string1}, @var{string2}, @var{number} @r{[}, @var{domain} @r{[}, @var{category}@r{]]}) +@item @code{dcngettext(@var{string1}, @var{string2}, @var{number}} [@code{,} @var{domain} [@code{,} @var{category} ]]@code{)} 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 @@ -26707,7 +26754,7 @@ The same remarks about argument order as for the @code{dcgettext()} function app @cindex message object files, specifying directory of @cindex files, message object, specifying directory of @cindexgawkfunc{bindtextdomain} -@item bindtextdomain(@var{directory} @r{[}, @var{domain}@r{]}) +@item @code{bindtextdomain(@var{directory}} [@code{,} @var{domain} ]@code{)} Change the directory in which @code{gettext} looks for @file{.gmo} files, in case they will not or cannot be placed in the standard locations @@ -28211,38 +28258,39 @@ a new value to the named option. The available options are: @c nested table -@table @code -@item history_size +@c asis for docbook +@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. -@item listsize +@item @code{listsize} @cindex debugger default list amount The number of lines that @code{list} prints. The default is 15. -@item outfile +@item @code{outfile} @cindex redirect @command{gawk} output, in debugger Send @command{gawk} output to a file; debugger output still goes to standard output. An empty string (@code{""}) resets output to standard output. -@item prompt +@item @code{prompt} @cindex debugger prompt The debugger prompt. The default is @samp{@w{gawk> }}. -@item save_history @r{[}on @r{|} off@r{]} +@item @code{save_history} [@code{on} | @code{off}] @cindex debugger history file Save command history to file @file{./.gawk_history}. The default is @code{on}. -@item save_options @r{[}on @r{|} off@r{]} +@item @code{save_options} [@code{on} | @code{off}] @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. -@item trace @r{[}on @r{|} off@r{]} +@item @code{trace} [@code{on} | @code{off}] @cindex instruction tracing, in debugger Turn instruction tracing on or off. The default is @code{off}. @end table @@ -28396,7 +28444,7 @@ running a program, the debugger warns you if you accidentally type @cindex debugger commands, @code{trace} @cindex @code{trace} debugger command -@item @code{trace} @code{on} @r{|} @code{off} +@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 implement. The default is @code{off}. @@ -32198,8 +32246,9 @@ as described earlier (@pxref{Extension Functions}). It can then be looped over for multiple calls to @code{add_ext_func()}. +@c Use @var{OR} for docbook @item static awk_bool_t (*init_func)(void) = NULL; -@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @r{OR} +@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @var{OR} @itemx static awk_bool_t init_my_module(void) @{ @dots{} @} @itemx static awk_bool_t (*init_func)(void) = init_my_module; If you need to do some initialization work, you should define a @@ -32869,7 +32918,7 @@ BEGIN @{ @end example The @env{AWKLIBPATH} environment variable tells -@command{gawk} where to find shared libraries (@pxref{Finding Extensions}). +@command{gawk} where to find extensions (@pxref{Finding Extensions}). We set it to the current directory and run the program: @example @@ -32932,19 +32981,19 @@ Others mainly provide example code that shows how to use the extension API. The @code{filefuncs} extension provides three different functions, as follows: The usage is: -@table @code +@table @asis @item @@load "filefuncs" This is how you load the extension. @cindex @code{chdir()} extension function -@item result = chdir("/some/directory") +@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}. @cindex @code{stat()} extension function -@item result = stat("/some/path", statdata @r{[}, follow@r{]}) +@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. @@ -33034,8 +33083,8 @@ Not all systems support all file types. @end multitable @cindex @code{fts()} extension function -@item flags = or(FTS_PHYSICAL, ...) -@itemx result = fts(pathlist, flags, filedata) +@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 below. @code{flags} is the bitwise OR of several predefined constant values, also described below. @@ -33659,14 +33708,19 @@ See the project's web site for more information. @part Part IV:@* Appendices @end iftex -@ignore @ifdocbook -@part Part IV:@* Appendices +@part Appendices -Part IV provides the appendices, the Glossary, and two licenses that cover -the @command{gawk} source code and this @value{DOCUMENT}, respectively. -It contains the following appendices: +@ifclear FOR_PRINT +Part IV contains the appendixes (including the two licenses that cover +the @command{gawk} source code and this @value{DOCUMENT}, respectively) +and the Glossary: +@end ifclear + +@ifset FOR_PRINT +Part IV contains two appendixes: +@end ifset @itemize @bullet @item @@ -33675,6 +33729,7 @@ It contains the following appendices: @item @ref{Installation}. +@ifclear FOR_PRINT @item @ref{Notes}. @@ -33689,24 +33744,23 @@ It contains the following appendices: @item @ref{GNU Free Documentation License}. +@end ifclear @end itemize @end ifdocbook -@end ignore @node Language History @appendix The Evolution of the @command{awk} Language -This @value{DOCUMENT} describes the GNU implementation of @command{awk}, which follows -the POSIX specification. -Many long-time @command{awk} users learned @command{awk} programming -with the original @command{awk} implementation in Version 7 Unix. -(This implementation was the basis for @command{awk} in Berkeley Unix, -through 4.3-Reno. Subsequent versions of Berkeley Unix, and some systems -derived from 4.4BSD-Lite, use various versions of @command{gawk} -for their @command{awk}.) -This @value{CHAPTER} briefly describes the -evolution of the @command{awk} language, with cross-references to other parts -of the @value{DOCUMENT} where you can find more information. +This @value{DOCUMENT} describes the GNU implementation of @command{awk}, +which follows the POSIX specification. Many long-time @command{awk} +users learned @command{awk} programming with the original @command{awk} +implementation in Version 7 Unix. (This implementation was the basis for +@command{awk} in Berkeley Unix, through 4.3-Reno. Subsequent versions +of Berkeley Unix, and some systems derived from 4.4BSD-Lite, use various +versions of @command{gawk} for their @command{awk}.) This @value{CHAPTER} +briefly describes the evolution of the @command{awk} language, with +cross-references to other parts of the @value{DOCUMENT} where you can +find more information. @menu * V7/SVR3.1:: The major changes between V7 and System V @@ -40144,4 +40198,4 @@ which sorta sucks. TODO: ----- -1. Empty string vs. null string. 30 occurrences vs. 77, respectively. +2. Add back in docbook fixes for @r{}. diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 8e966ccd..440d641b 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -1954,8 +1954,9 @@ May, 2014 @part Part I:@* The @command{awk} Language @end iftex -@ignore @ifdocbook +@part The @command{awk} Language + Part I describes the @command{awk} language and @command{gawk} program in detail. It starts with the basics, and continues through all of the features of @command{awk}. Included also are many, but not all, @@ -1991,7 +1992,6 @@ following chapters: @ref{Functions}. @end itemize @end ifdocbook -@end ignore @node Getting Started @chapter Getting Started with @command{awk} @@ -2429,6 +2429,27 @@ knowledge of shell quoting rules. The following rules apply only to POSIX-compliant, Bourne-style shells (such as Bash, the GNU Bourne-Again Shell). If you use the C shell, you're on your own. +Before diving into the rules, we introduce a concept that appears +throughout this @value{DOCUMENT}, which is that of the @dfn{null}, +or empty, string. + +The null string is character data that has no value. +In other words, it is empty. It is written in @command{awk} programs +like this: @code{""}. In the shell, it can be written using single +or double quotes: @code{""} or @code{''}. While the null string has +no characters in it, it does exist. Consider this command: + +@example +$ @kbd{echo ""} +@end example + +@noindent +Here, the @command{echo} utility receives a single argument, even +though that argument has no characters in it. In the rest of this +@value{DOCUMENT}, we use the terms @dfn{null string} and @dfn{empty string} +interchangeably. Now, on to the quoting rules. + + @itemize @bullet @item Quoted items can be concatenated with nonquoted items as well as with other @@ -2604,6 +2625,7 @@ Although this @value{DOCUMENT} generally only worries about POSIX systems and th POSIX shell, the following issue arises often enough for many users that it is worth addressing. +@cindex Brink, Jeroen The ``shells'' on Microsoft Windows systems use the double-quote character for quoting, and make it difficult or impossible to include an escaped double-quote character in a command-line script. @@ -2617,7 +2639,6 @@ gawk "@{ print \"\042\" $0 \"\042\" @}" @var{file} @node Sample Data Files @section Data Files for the Examples -@c For gawk >= 4.0, update these data files. No-one has such slow modems! @cindex input files, examples @cindex @code{mail-list} file @@ -2774,7 +2795,7 @@ awk 'length($0) > 80' data @end example The sole rule has a relational expression as its pattern and it has no -action---so the default action, printing the record, is used. +action---so it uses the default action, printing the record. @cindex @command{expand} utility @item @@ -2857,9 +2878,9 @@ the program would print the odd-numbered lines. The @command{awk} utility reads the input files one line at a time. For each line, @command{awk} tries the patterns of each of the rules. -If several patterns match, then several actions are run in the order in +If several patterns match, then several actions execture in the order in which they appear in the @command{awk} program. If no patterns match, then -no actions are run. +no actions run. After processing all the rules that match the line (and perhaps there are none), @command{awk} reads the next line. (However, @@ -2951,8 +2972,8 @@ needed to produce this traditional-style output from @command{ls}.} The @samp{$6 == "Nov"} in our @command{awk} program is an expression that tests whether the sixth field of the output from @w{@samp{ls -l}} matches the string @samp{Nov}. Each time a line has the string -@samp{Nov} for its sixth field, the action @samp{sum += $5} is -performed. This adds the fifth field (the file's size) to the variable +@samp{Nov} for its sixth field, @command{awk} performs the action +@samp{sum += $5}. This adds the fifth field (the file's size) to the variable @code{sum}. As a result, when @command{awk} has finished reading all the input lines, @code{sum} is the total of the sizes of the files whose lines matched the pattern. (This works because @command{awk} variables @@ -3019,7 +3040,7 @@ We have generally not used backslash continuation in our sample programs. @command{gawk} places no limit on the length of a line, so backslash continuation is never strictly necessary; it just makes programs more readable. For this same reason, as well as -for clarity, we have kept most statements short in the sample programs +for clarity, we have kept most statements short in the programs presented throughout the @value{DOCUMENT}. Backslash continuation is most useful when your @command{awk} program is in a separate source file instead of entered from the command line. You should also note that @@ -3168,12 +3189,15 @@ that it has are much larger than they used to be. @cindex @command{awk} programs, complex If you find yourself writing @command{awk} scripts of more than, say, a few hundred lines, you might consider using a different programming -language. Emacs Lisp is a good choice if you need sophisticated string -or pattern matching capabilities. The shell is also good at string and +language. +The shell is good at string and pattern matching; in addition, it allows powerful use of the system utilities. More conventional languages, such as C, C++, and Java, offer better facilities for system programming and for managing the complexity -of large programs. Programs in these languages may require more lines +of large programs. +Python offers a nice balance between high-level ease of programming and +access to system facilities. +Programs in these languages may require more lines of source code than the equivalent @command{awk} programs, but they are easier to maintain and usually run more efficiently. @@ -3357,9 +3381,10 @@ program; see @ref{Getopt Function}. The following list describes @command{gawk}-specific options: -@table @code -@item -b -@itemx --characters-as-bytes +@c Have to use @asis here to get docbook to come out right. +@table @asis +@item @option{-b} +@itemx @option{--characters-as-bytes} @cindex @option{-b} option @cindex @option{--characters-as-bytes} option Cause @command{gawk} to treat all input data as single-byte characters. @@ -3367,14 +3392,14 @@ In addition, all output written with @code{print} or @code{printf} are treated as single-byte characters. Normally, @command{gawk} follows the POSIX standard and attempts to process -its input data according to the current locale. This can often involve +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!''. -@item -c -@itemx --traditional +@item @option{-c} +@itemx @option{--traditional} @cindex @option{-c} option @cindex @option{--traditional} option @cindex compatibility mode (@command{gawk}), specifying @@ -3385,15 +3410,15 @@ like Brian Kernighan's version @command{awk}. which summarizes the extensions. Also see @ref{Compatibility Mode}. -@item -C -@itemx --copyright +@item @option{-C} +@itemx @option{--copyright} @cindex @option{-C} option @cindex @option{--copyright} option @cindex GPL (General Public License), printing Print the short version of the General Public License and then exit. -@item -d@r{[}@var{file}@r{]} -@itemx --dump-variables@r{[}=@var{file}@r{]} +@item @option{-d}[@var{file}] +@itemx @option{--dump-variables}[@code{=}@var{file}] @cindex @option{-d} option @cindex @option{--dump-variables} option @cindex dump all variables of a program @@ -3415,8 +3440,8 @@ inadvertently use global variables that you meant to be local. (This is a particularly easy mistake to make with simple variable names like @code{i}, @code{j}, etc.) -@item -D@r{[}@var{file}@r{]} -@itemx --debug=@r{[}@var{file}@r{]} +@item @option{-D}[@var{file}] +@itemx @option{--debug}[@code{=}@var{file}] @cindex @option{-D} option @cindex @option{--debug} option @cindex @command{awk} debugging, enabling @@ -3428,8 +3453,8 @@ of commands for the debugger to execute non-interactively. No space is allowed between the @option{-D} and @var{file}, if @var{file} is supplied. -@item -e @var{program-text} -@itemx --source @var{program-text} +@item @option{-e} @var{program-text} +@itemx @option{--source} @var{program-text} @cindex @option{-e} option @cindex @option{--source} option @cindex source code, mixing @@ -3440,8 +3465,8 @@ This is particularly useful when you have library functions that you want to use from your command-line programs (@pxref{AWKPATH Variable}). -@item -E @var{file} -@itemx --exec @var{file} +@item @option{-E} @var{file} +@itemx @option{--exec} @var{file} @cindex @option{-E} option @cindex @option{--exec} option @cindex @command{awk} programs, location of @@ -3471,8 +3496,8 @@ with @samp{#!} scripts (@pxref{Executable Scripts}), like so: @var{awk program here @dots{}} @end example -@item -g -@itemx --gen-pot +@item @option{-g} +@itemx @option{--gen-pot} @cindex @option{-g} option @cindex @option{--gen-pot} option @cindex portable object files, generating @@ -3483,8 +3508,8 @@ output for all string constants that have been marked for translation. @xref{Internationalization}, for information about this option. -@item -h -@itemx --help +@item @option{-h} +@itemx @option{--help} @cindex @option{-h} option @cindex @option{--help} option @cindex GNU long options, printing list of @@ -3493,42 +3518,47 @@ for information about this option. Print a ``usage'' message summarizing the short and long style options that @command{gawk} accepts and then exit. -@item -i @var{source-file} -@itemx --include @var{source-file} +@item @option{-i} @var{source-file} +@itemx @option{--include} @var{source-file} @cindex @option{-i} option @cindex @option{--include} option @cindex @command{awk} programs, location of -Read @command{awk} source library from @var{source-file}. This option is -completely equivalent to using the @samp{@@include} directive inside -your program. This option is very -similar to the @option{-f} option, but there are two important differences. -First, when @option{-i} is used, the program source will not be loaded if it has -been previously loaded, whereas the @option{-f} will always load the file. +Read @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, +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. Second, because this option is intended to be used with code libraries, @command{gawk} does not recognize such files as constituting main program -input. Thus, after processing an @option{-i} argument, @command{gawk} still expects to -find the main source code via the @option{-f} option or on the command-line. +input. Thus, after processing an @option{-i} argument, @command{gawk} +still expects to find the main source code via the @option{-f} option +or on the command-line. -@item -l @var{lib} -@itemx --load @var{lib} +@item @option{-l} @var{ext} +@itemx @option{--load} @var{ext} @cindex @option{-l} option @cindex @option{--load} option -@cindex loading, library -Load a shared library @var{lib}. This searches for the library using the @env{AWKLIBPATH} +@cindex loading, extensions +Load a dynamic extension named @var{ext}. Extensions +are stored as system shared libraries. +This option searches for the library using the @env{AWKLIBPATH} environment variable. The correct library suffix for your platform will be -supplied by default, so it need not be specified in the library name. -The library initialization routine should be named @code{dl_load()}. -An alternative is to use the @samp{@@load} keyword inside the program to load -a shared library. +supplied by default, so it need not be specified in the extension name. +The extension initialization routine should be named @code{dl_load()}. +An alternative is to use the @code{@@load} keyword inside the program to load +a shared library. This feature is described in detail in @ref{Dynamic Extensions}. -@item -L @r{[}value@r{]} -@itemx --lint@r{[}=value@r{]} +@item @option{-L}[@var{value}] +@itemx @option{--lint}[@code{=}@var{value}] @cindex @option{-l} option @cindex @option{--lint} option @cindex lint checking, issuing warnings @cindex warnings, issuing Warn about constructs that are dubious or nonportable to other @command{awk} implementations. +No space is allowed between the @option{-D} and @var{value}, if +@var{value} is supplied. Some warnings are issued when @command{gawk} first reads your program. Others are issued at runtime, as your program executes. With an optional argument of @samp{fatal}, @@ -3544,16 +3574,16 @@ when eliminating problems pointed out by @option{--lint}, you should take care to search for all occurrences of each inappropriate construct. As @command{awk} programs are usually short, doing so is not burdensome. -@item -M -@itemx --bignum +@item @option{-M} +@itemx @option{--bignum} @cindex @option{-M} option @cindex @option{--bignum} option Force arbitrary precision arithmetic on numbers. This option has no effect if @command{gawk} is not compiled to use the GNU MPFR and MP libraries (@pxref{Gawk and MPFR}). -@item -n -@itemx --non-decimal-data +@item @option{-n} +@itemx @option{--non-decimal-data} @cindex @option{-n} option @cindex @option{--non-decimal-data} option @cindex hexadecimal values@comma{} enabling interpretation of @@ -3568,34 +3598,41 @@ This option can severely break old programs. Use with care. @end quotation -@item -N -@itemx --use-lc-numeric +@item @option{-N} +@itemx @option{--use-lc-numeric} @cindex @option{-N} option @cindex @option{--use-lc-numeric} option Force the use of the locale's decimal point character when parsing numeric input data (@pxref{Locales}). -@item -o@r{[}@var{file}@r{]} -@itemx --pretty-print@r{[}=@var{file}@r{]} +@item @option{-o}[@var{file}] +@itemx @option{--pretty-print}[@code{=}@var{file}] @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, output program is created in a file named @file{awkprof.out} +(@pxref{Profiling}). The optional @var{file} argument allows you to specify a different file name for the output. No space is allowed between the @option{-o} and @var{file}, if @var{file} is supplied. -@item -O -@itemx --optimize +@quotation NOTE +Due to the way @command{gawk} has evolved, with this option +your program is still executed. This will change in the +next major release such that @command{gawk} will only +pretty-print the program and not run it. +@end quotation + +@item @option{-O} +@itemx @option{--optimize} @cindex @option{--optimize} option @cindex @option{-O} option Enable some optimizations on the internal representation of the program. -At the moment this includes just simple constant folding. The @command{gawk} -maintainer hopes to add more optimizations over time. +At the moment this includes just simple constant folding. -@item -p@r{[}@var{file}@r{]} -@itemx --profile@r{[}=@var{file}@r{]} +@item @option{-p}[@var{file}] +@itemx @option{--profile}[@code{=}@var{file}] @cindex @option{-p} option @cindex @option{--profile} option @cindex @command{awk} profiling, enabling @@ -3610,8 +3647,8 @@ No space is allowed between the @option{-p} and @var{file}, if The profile contains execution counts for each statement in the program in the left margin, and function call counts for each function. -@item -P -@itemx --posix +@item @option{-P} +@itemx @option{--posix} @cindex @option{-P} option @cindex @option{--posix} option @cindex POSIX mode @@ -3658,10 +3695,10 @@ data (@pxref{Locales}). @cindex @option{--posix} option, @code{--traditional} option and If you supply both @option{--traditional} and @option{--posix} on the command line, @option{--posix} takes precedence. @command{gawk} -also issues a warning if both options are supplied. +issues a warning if both options are supplied. -@item -r -@itemx --re-interval +@item @option{-r} +@itemx @option{--re-interval} @cindex @option{-r} option @cindex @option{--re-interval} option @cindex regular expressions, interval expressions and @@ -3670,10 +3707,10 @@ Allow interval expressions in regexps. This is now @command{gawk}'s default behavior. Nevertheless, this option remains both for backward compatibility, -and for use in combination with the @option{--traditional} option. +and for use in combination with @option{--traditional}. -@item -S -@itemx --sandbox +@item @option{-S} +@itemx @option{--sandbox} @cindex @option{-S} option @cindex @option{--sandbox} option @cindex sandbox mode @@ -3685,16 +3722,16 @@ This is particularly useful when you want to run @command{awk} scripts from questionable sources and need to make sure the scripts can't access your system (other than the specified input data file). -@item -t -@itemx --lint-old +@item @option{-t} +@itemx @option{--lint-old} @cindex @option{-L} option @cindex @option{--lint-old} option Warn about constructs that are not available in the original version of @command{awk} from Version 7 Unix (@pxref{V7/SVR3.1}). -@item -V -@itemx --version +@item @option{-V} +@itemx @option{--version} @cindex @option{-V} option @cindex @option{--version} option @cindex @command{gawk}, versions of, information about@comma{} printing @@ -3736,13 +3773,13 @@ type @kbd{Ctrl-d} (the end-of-file character) to terminate it. input but then you will not be able to also use the standard input as a 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{--source} option. This does not require you to pre-empt the standard -input for your source code; it allows you to easily mix command-line -and library source code -(@pxref{AWKPATH Variable}). -The @option{--source} option may also be used multiple times on the command line. +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{--source} option. This does not require you to +pre-empt 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{--source} and @option{--include} +options may also be used multiple times on the command line. @cindex @option{--source} option If no @option{-f} or @option{--source} option is specified, then @command{gawk} @@ -3754,7 +3791,7 @@ program source code. @cindex POSIX mode If the environment variable @env{POSIXLY_CORRECT} exists, then @command{gawk} behaves in strict POSIX mode, exactly as if -you had supplied the @option{--posix} command-line option. +you had supplied @option{--posix}. Many GNU programs look for this environment variable to suppress extensions that conflict with POSIX, but @command{gawk} behaves differently: it suppresses all extensions, even those that do not @@ -3833,7 +3870,7 @@ The variable values given on the command line are processed for escape sequences (@pxref{Escape Sequences}). @value{DARKCORNER} -In some earlier implementations of @command{awk}, when a variable assignment +In some very early implementations of @command{awk}, when a variable assignment occurred before any file names, the assignment would happen @emph{before} the @code{BEGIN} rule was executed. @command{awk}'s behavior was thus inconsistent; some command-line assignments were available inside the @@ -3845,7 +3882,7 @@ upon the old behavior. The variable assignment feature is most useful for assigning to variables such as @code{RS}, @code{OFS}, and @code{ORS}, which control input and -output formats before scanning the data files. It is also useful for +output formats, before scanning the data files. It is also useful for controlling state if multiple passes are needed over a data file. For example: @@ -3887,7 +3924,7 @@ with @code{getline}. Some other versions of @command{awk} also support this, but it is not standard. (Some operating systems provide a @file{/dev/stdin} file -in the file system, however, @command{gawk} always processes +in the file system; however, @command{gawk} always processes this file name itself.) @node Environment Variables @@ -3935,7 +3972,7 @@ directory is the value of @samp{$(datadir)} generated when @command{gawk} was configured. You probably don't need to worry about this, though.} -The search path feature is particularly useful for building libraries +The search path feature is particularly helpful for building libraries of useful @command{awk} functions. The library files can be placed in a standard directory in the default path and then specified on the command line with a short file name. Otherwise, the full file name @@ -3952,11 +3989,13 @@ If the source code is not found after the initial search, the path is searched again after adding the default @samp{.awk} suffix to the filename. @quotation NOTE +@c 4/2014: +@c using @samp{.} to get quotes, since @file{} no longer supplies them. To include the current directory in the path, either place -@file{.} explicitly in the path or write a null entry in the +@samp{.} explicitly in the path or write a null entry in the path. (A null entry is indicated by starting or ending the path with a -colon or by placing two colons next to each other (@samp{::}).) +colon or by placing two colons next to each other [@samp{::}].) This path search mechanism is similar to the shell's. @c someday, @cite{The Bourne Again Shell}.... @@ -3971,7 +4010,7 @@ the current directory in the search path. If @env{AWKPATH} is not defined in the environment, @command{gawk} places its default search path into @code{ENVIRON["AWKPATH"]}. This makes it easy to determine -the actual search path that @command{gawk} will use +the actual search path that @command{gawk} used from within an @command{awk} program. While you can change @code{ENVIRON["AWKPATH"]} within your @command{awk} @@ -3983,18 +4022,18 @@ found, and @command{gawk} no longer needs to use @env{AWKPATH}. @node AWKLIBPATH Variable @subsection The @env{AWKLIBPATH} Environment Variable @cindex @env{AWKLIBPATH} environment variable -@cindex directories, searching for shared libraries -@cindex search paths, for shared libraries +@cindex directories, searching for loadable extensions +@cindex search paths, for loadable extensions @cindex differences in @command{awk} and @command{gawk}, @code{AWKLIBPATH} environment variable The @env{AWKLIBPATH} environment variable is similar to the @env{AWKPATH} -variable, but it is used to search for shared libraries specified -with the @option{-l} option rather than for source files. If the library -is not found, the path is searched again after adding the appropriate -shared library suffix for the platform. For example, on GNU/Linux systems, -the suffix @samp{.so} is used. -The search path specified is also used for libraries loaded via the -@samp{@@load} keyword (@pxref{Loading Shared Libraries}). +variable, but it is used to search for loadable extensions (stored as +system shared libraries) specified with the @option{-l} option rather +than for source files. If the extension is not found, the path is +searched again after adding the appropriate shared library suffix for +the platform. For example, on GNU/Linux systems, the suffix @samp{.so} +is used. The search path specified is also used for extensions loaded +via the @code{@@load} keyword (@pxref{Loading Shared Libraries}). @node Other Environment Variables @subsection Other Environment Variables @@ -4010,7 +4049,7 @@ mode, disabling all traditional and GNU extensions. @xref{Options}. @item GAWK_SOCK_RETRIES -Controls the number of time @command{gawk} will attempt to +Controls the number of times @command{gawk} attempts to retry a two-way TCP/IP (socket) connection before giving up. @xref{TCP/IP Networking}. @@ -4058,6 +4097,11 @@ two regexp matchers that @command{gawk} uses internally. (There aren't supposed to be differences, but occasionally theory and practice don't coordinate with each other.) +@item GAWK_NO_PP_RUN +If this variable exists, then when invoked with the @option{--pretty-print} +option, @command{gawk} skips running the program. This variable will +not survive into the next major release. + @item GAWK_STACKSIZE This specifies the amount by which @command{gawk} should grow its internal evaluation stack, when needed. @@ -4102,13 +4146,13 @@ to @code{EXIT_FAILURE}. This @value{SECTION} describes a feature that is specific to @command{gawk}. -The @samp{@@include} keyword can be used to read external @command{awk} source +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, into external files. These files can be used just like function libraries, -using the @samp{@@include} keyword in conjunction with the @env{AWKPATH} +using the @code{@@include} keyword in conjunction with the @env{AWKPATH} environment variable. Note that source files may also be included using the @option{-i} option. @@ -4142,14 +4186,14 @@ $ @kbd{gawk -f test2} @end example @code{gawk} runs the @file{test2} script which includes @file{test1} -using the @samp{@@include} +using the @code{@@include} keyword. So, to include external @command{awk} source files you just -use @samp{@@include} followed by the name of the file to be included, +use @code{@@include} followed by the name of the file to be included, enclosed in double quotes. @quotation NOTE Keep in mind that this is a language construct and the file name cannot -be a string variable, but rather just a literal string in double quotes. +be a string variable, but rather just a literal string constant in double quotes. @end quotation The files to be included may be nested; e.g., given a third @@ -4188,47 +4232,48 @@ or: @noindent are valid. The @code{AWKPATH} environment variable can be of great -value when using @samp{@@include}. The same rules for the use +value when using @code{@@include}. The same rules for the use of the @code{AWKPATH} variable in command-line file searches (@pxref{AWKPATH Variable}) apply to -@samp{@@include} also. +@code{@@include} also. 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 @code{AWKPATH} -environment variable accordingly and then using @samp{@@include} with +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 environment is, the more directories you may need to organize the files to be included. Given the ability to specify multiple @option{-f} options, the -@samp{@@include} mechanism is not strictly necessary. -However, the @samp{@@include} keyword +@code{@@include} mechanism is not strictly necessary. +However, the @code{@@include} keyword can help you in constructing self-contained @command{gawk} programs, thus reducing the need for writing complex and tedious command lines. -In particular, @samp{@@include} is very useful for writing CGI scripts +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 @samp{@@include}. +and this also applies to files named with @code{@@include}. @node Loading Shared Libraries -@section Loading Shared Libraries Into Your Program +@section Loading Dynamic Extensions Into Your Program This @value{SECTION} describes a feature that is specific to @command{gawk}. -The @samp{@@load} keyword can be used to read external @command{awk} shared -libraries. This allows you to link in compiled code that may offer superior +The @code{@@load} keyword can be used to read external @command{awk} extensions +(stored as system shared libraries). +This allows you to link in compiled code that may offer superior performance and/or give you access to extended capabilities not supported by the @command{awk} language. The @env{AWKLIBPATH} variable is used to -search for the shared library. Using @samp{@@load} is completely equivalent +search for the extension. Using @code{@@load} is completely equivalent to using the @option{-l} command-line option. -If the shared library is not initially found in @env{AWKLIBPATH}, another +If the extension is not initially found in @env{AWKLIBPATH}, another search is conducted after appending the platform's default shared library suffix to the filename. For example, on GNU/Linux systems, the suffix @samp{.so} is used. @@ -4248,11 +4293,11 @@ $ @kbd{gawk -lordchr 'BEGIN @{print chr(65)@}'} @noindent For command-line usage, the @option{-l} option is more convenient, -but @samp{@@load} is useful for embedding inside an @command{awk} source file -that requires access to a shared library. +but @code{@@load} is useful for embedding inside an @command{awk} source file +that requires access to an extension. @ref{Dynamic Extensions}, describes how to write extensions (in C or C++) -that can be loaded with either @samp{@@load} or the @option{-l} option. +that can be loaded with either @code{@@load} or the @option{-l} option. @node Obsolete @section Obsolete Options and/or Features @@ -4398,8 +4443,8 @@ A regular expression can be used as a pattern by enclosing it in slashes. Then the regular expression is tested against the entire text of each record. (Normally, it only needs to match some part of the text in order to succeed.) For example, the -following prints the second field of each record that contains the string -@samp{li} anywhere in it: +following prints the second field of each record where the string +@samp{li} appears anywhere in the record: @example $ @kbd{awk '/li/ @{ print $2 @}' mail-list} @@ -4529,7 +4574,7 @@ A literal backslash, @samp{\}. @cindex backslash (@code{\}), @code{\a} escape sequence @item \a The ``alert'' character, @kbd{Ctrl-g}, ASCII code 7 (BEL). -(This usually makes some sort of audible noise.) +(This often makes some sort of audible noise.) @cindex @code{\} (backslash), @code{\b} escape sequence @cindex backslash (@code{\}), @code{\b} escape sequence @@ -4717,10 +4762,11 @@ 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 table stand for themselves: -@table @code +@c Use @asis so the docbook comes out ok. Sigh. +@table @asis @cindex backslash (@code{\}), regexp operator @cindex @code{\} (backslash), regexp operator -@item \ +@item @code{\} This is used to suppress the special meaning of a character when matching. For example, @samp{\$} matches the character @samp{$}. @@ -4729,7 +4775,7 @@ matches the character @samp{$}. @cindex Texinfo, chapter beginnings in files @cindex @code{^} (caret), regexp operator @cindex caret (@code{^}), regexp operator -@item ^ +@item @code{^} This matches the beginning of a string. For example, @samp{^@@chapter} matches @samp{@@chapter} at the beginning of a string and can be used to identify chapter beginnings in Texinfo source files. @@ -4737,7 +4783,7 @@ The @samp{^} is known as an @dfn{anchor}, because it anchors the pattern to match only at the beginning of the string. It is important to realize that @samp{^} does not match the beginning of -a line embedded in a string. +a line (the point right after a @samp{\n} newline character) embedded in a string. The condition is not true in the following example: @example @@ -4746,11 +4792,13 @@ if ("line1\nLINE 2" ~ /^L/) @dots{} @cindex @code{$} (dollar sign), regexp operator @cindex dollar sign (@code{$}), regexp operator -@item $ +@item @code{$} This is similar to @samp{^}, but it matches only at the end of a string. For example, @samp{p$} matches a record that ends with a @samp{p}. The @samp{$} is an anchor -and does not match the end of a line embedded in a string. +and does not match the end of a line +(the point right before a @samp{\n} newline character) +embedded in a string. The condition in the following example is not true: @example @@ -4759,7 +4807,7 @@ if ("line1\nLINE 2" ~ /1$/) @dots{} @cindex @code{.} (period), regexp operator @cindex period (@code{.}), regexp operator -@item . @r{(period)} +@item @code{.} (period) This matches any single character, @emph{including} the newline character. For example, @samp{.P} matches any single character followed by a @samp{P} in a string. Using @@ -4780,7 +4828,7 @@ may not be able to match the @sc{nul} character. @cindex character sets, See Also bracket expressions @cindex character lists, See bracket expressions @cindex character classes, See bracket expressions -@item [@dots{}] +@item @code{[}@dots{}@code{]} This is called a @dfn{bracket expression}.@footnote{In other literature, you may see a bracket expression referred to as either a @dfn{character set}, a @dfn{character class}, or a @dfn{character list}.} @@ -4792,7 +4840,7 @@ is given in @ref{Bracket Expressions}. @cindex bracket expressions, complemented -@item [^ @dots{}] +@item @code{[^}@dots{}@code{]} This is a @dfn{complemented bracket expression}. The first character after the @samp{[} @emph{must} be a @samp{^}. It matches any characters @emph{except} those in the square brackets. For example, @samp{[^awk]} @@ -4801,7 +4849,7 @@ or @samp{k}. @cindex @code{|} (vertical bar) @cindex vertical bar (@code{|}) -@item | +@item @code{|} This is the @dfn{alternation operator} and it is used to specify alternatives. The @samp{|} has the lowest precedence of all the regular @@ -4814,7 +4862,7 @@ The alternation applies to the largest possible regexps on either side. @cindex @code{()} (parentheses), regexp operator @cindex parentheses @code{()}, regexp operator -@item (@dots{}) +@item @code{(}@dots{}@code{)} Parentheses are used for grouping in regular expressions, as in arithmetic. They can be used to concatenate regular expressions containing the alternation operator, @samp{|}. For example, @@ -4825,7 +4873,7 @@ explained further on in this list.) @cindex @code{*} (asterisk), @code{*} operator, as regexp operator @cindex asterisk (@code{*}), @code{*} operator, as regexp operator -@item * +@item @code{*} This symbol means that the preceding regular expression should be repeated as many times as necessary to find a match. For example, @samp{ph*} applies the @samp{*} symbol to the preceding @samp{h} and looks for matches @@ -4843,11 +4891,11 @@ with backslashes. @cindex @code{+} (plus sign), regexp operator @cindex plus sign (@code{+}), regexp operator -@item + +@item @code{+} This symbol is similar to @samp{*}, except that the preceding expression must be matched at least once. This means that @samp{wh+y} would match @samp{why} and @samp{whhy}, but not @samp{wy}, whereas -@samp{wh*y} would match all three of these strings. +@samp{wh*y} would match all three. The following is a simpler way of writing the last @samp{*} example: @@ -4857,15 +4905,15 @@ awk '/\(c[ad]+r x\)/ @{ print @}' sample @cindex @code{?} (question mark), regexp operator @cindex question mark (@code{?}), regexp operator -@item ? +@item @code{?} This symbol is similar to @samp{*}, except that the preceding expression can be matched either once or not at all. For example, @samp{fe?d} matches @samp{fed} and @samp{fd}, but nothing else. @cindex interval expressions, regexp operator -@item @{@var{n}@} -@itemx @{@var{n},@} -@itemx @{@var{n},@var{m}@} +@item @code{@{}@var{n}@code{@}} +@itemx @code{@{}@var{n}@code{,@}} +@itemx @code{@{}@var{n}@code{,}@var{m}@code{@}} One or two numbers inside braces denote an @dfn{interval expression}. If there is one number in the braces, the preceding regexp is repeated @var{n} times. @@ -5288,10 +5336,12 @@ This works in any POSIX-compliant @command{awk}. Another method, specific to @command{gawk}, is to set the variable @code{IGNORECASE} to a nonzero value (@pxref{Built-in Variables}). When @code{IGNORECASE} is not zero, @emph{all} regexp and string -operations ignore case. Changing the value of -@code{IGNORECASE} dynamically controls the case-sensitivity of the -program as it runs. Case is significant by default because -@code{IGNORECASE} (like most variables) is initialized to zero: +operations ignore case. + +Changing the value of @code{IGNORECASE} dynamically controls the +case-sensitivity of the program as it runs. Case is significant by +default because @code{IGNORECASE} (like most variables) is initialized +to zero: @example x = "aB" @@ -5321,9 +5371,6 @@ case-sensitivity on or off for all the rules at once. Setting @code{IGNORECASE} from the command line is a way to make a program case-insensitive without having to edit it. -Both regexp and string comparison -operations are affected by @code{IGNORECASE}. - @c @cindex ISO 8859-1 @c @cindex ISO Latin-1 In multibyte locales, @@ -5401,7 +5448,7 @@ regexp constant (i.e., a string of characters between slashes). It may be any expression. The expression is evaluated and converted to a string if necessary; the contents of the string are then used as the regexp. A regexp computed in this way is called a @dfn{dynamic -regexp}: +regexp} or a @dfn{computed regexp}: @example BEGIN @{ digits_regexp = "[[:digit:]]+" @} @@ -5470,7 +5517,7 @@ intend a regexp match. @cindex regular expressions, dynamic, with embedded newlines @cindex newlines, in dynamic regexps -Some commercial versions of @command{awk} do not allow the newline +Some versions of @command{awk} do not allow the newline character to be used inside a bracket expression for a dynamic regexp: @example @@ -6365,7 +6412,7 @@ $ @kbd{echo ' a b c d ' | awk 'BEGIN @{ FS = "[ \t\n]+" @}} @cindex null strings @cindex strings, null @cindex empty strings, See null strings -In this case, the first field is @dfn{null} or empty. +In this case, the first field is null, or empty. The stripping of leading and trailing whitespace also comes into play whenever @code{$0} is recomputed. For instance, study this pipeline: @@ -7356,19 +7403,19 @@ Such a record is replaced by the contents of the file Note here how the name of the extra input file is not built into the program; it is taken directly from the data, specifically from the second field on -the @samp{@@include} line. +the @code{@@include} line. The @code{close()} function is called to ensure that if two identical -@samp{@@include} lines appear in the input, the entire specified file is +@code{@@include} lines appear in the input, the entire specified file is included twice. @xref{Close Files And Pipes}. One deficiency of this program is that it does not process nested -@samp{@@include} statements -(i.e., @samp{@@include} statements in included files) +@code{@@include} statements +(i.e., @code{@@include} statements in included files) the way a true macro preprocessor would. @xref{Igawk Program}, for a program -that does handle nested @samp{@@include} statements. +that does handle nested @code{@@include} statements. @node Getline/Pipe @subsection Using @code{getline} from a Pipe @@ -8184,8 +8231,9 @@ of value to print. The rest of the format specifier is made up of optional @dfn{modifiers} that control @emph{how} to print the value, such as the field width. Here is a list of the format-control letters: -@table @code -@item %c +@c @asis for docbook to come out right +@table @asis +@item @code{%c} Print a number as an ASCII character; thus, @samp{printf "%c", 65} outputs the letter @samp{A}. The output for a string value is the first character of the string. @@ -8217,12 +8265,12 @@ a single byte (0--255). @end quotation -@item %d@r{,} %i +@item @code{%d}, @code{%i} Print a decimal integer. The two control letters are equivalent. (The @samp{%i} specification is for compatibility with ISO C.) -@item %e@r{,} %E +@item @code{%e}, @code{%E} Print a number in scientific (exponential) notation; for example: @@ -8237,7 +8285,7 @@ which follow the decimal point. discussed in the next @value{SUBSECTION}.) @samp{%E} uses @samp{E} instead of @samp{e} in the output. -@item %f +@item @code{%f} Print a number in floating-point notation. For example: @@ -8259,37 +8307,37 @@ and positive infinity as @samp{inf} and @samp{infinity}. The special ``not a number'' value formats as @samp{-nan} or @samp{nan}. -@item %F +@item @code{%F} 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 support it. On those that don't, @command{gawk} uses @samp{%f} instead. -@item %g@r{,} %G +@item @code{%g}, @code{%G} Print a number in either scientific notation or in floating-point notation, whichever uses fewer characters; if the result is printed in scientific notation, @samp{%G} uses @samp{E} instead of @samp{e}. -@item %o +@item @code{%o} Print an unsigned octal integer (@pxref{Nondecimal-numbers}). -@item %s +@item @code{%s} Print a string. -@item %u +@item @code{%u} Print an unsigned decimal integer. (This format is of marginal use, because all numbers in @command{awk} are floating-point; it is provided primarily for compatibility with C.) -@item %x@r{,} %X +@item @code{%x}, @code{%X} Print an unsigned hexadecimal integer; @samp{%X} uses the letters @samp{A} through @samp{F} instead of @samp{a} through @samp{f} (@pxref{Nondecimal-numbers}). -@item %% +@item @code{%%} Print a single @samp{%}. This does not consume an argument and it ignores any modifiers. @@ -11285,28 +11333,28 @@ expression because the first @samp{$} has higher precedence than the This table presents @command{awk}'s operators, in order of highest to lowest precedence: -@c use @code in the items, looks better in TeX w/o all the quotes -@table @code -@item (@dots{}) +@c @asis for docbook to come out right +@table @asis +@item @code{(}@dots{}@code{)} Grouping. @cindex @code{$} (dollar sign), @code{$} field operator @cindex dollar sign (@code{$}), @code{$} field operator -@item $ +@item @code{$} Field reference. @cindex @code{+} (plus sign), @code{++} operator @cindex plus sign (@code{+}), @code{++} operator @cindex @code{-} (hyphen), @code{--} operator @cindex hyphen (@code{-}), @code{--} operator -@item ++ -- +@item @code{++ --} Increment, decrement. @cindex @code{^} (caret), @code{^} operator @cindex caret (@code{^}), @code{^} operator @cindex @code{*} (asterisk), @code{**} operator @cindex asterisk (@code{*}), @code{**} operator -@item ^ ** +@item @code{^ **} Exponentiation. These operators group right-to-left. @cindex @code{+} (plus sign), @code{+} operator @@ -11315,7 +11363,7 @@ Exponentiation. These operators group right-to-left. @cindex hyphen (@code{-}), @code{-} operator @cindex @code{!} (exclamation point), @code{!} operator @cindex exclamation point (@code{!}), @code{!} operator -@item + - ! +@item @code{+ - !} Unary plus, minus, logical ``not.'' @cindex @code{*} (asterisk), @code{*} operator, as multiplication operator @@ -11324,17 +11372,17 @@ Unary plus, minus, logical ``not.'' @cindex forward slash (@code{/}), @code{/} operator @cindex @code{%} (percent sign), @code{%} operator @cindex percent sign (@code{%}), @code{%} operator -@item * / % +@item @code{* / %} Multiplication, division, remainder. @cindex @code{+} (plus sign), @code{+} operator @cindex plus sign (@code{+}), @code{+} operator @cindex @code{-} (hyphen), @code{-} operator @cindex hyphen (@code{-}), @code{-} operator -@item + - +@item @code{+ -} Addition, subtraction. -@item @r{String Concatenation} +@item String Concatenation There is no special symbol for concatenation. The operands are simply written side by side (@pxref{Concatenation}). @@ -11360,7 +11408,7 @@ The operands are simply written side by side @cindex @code{|} (vertical bar), @code{|&} operator (I/O) @cindex vertical bar (@code{|}), @code{|&} operator (I/O) @cindex operators, input/output -@item < <= == != > >= >> | |& +@item @code{< <= == != > >= >> | |&} Relational and redirection. The relational operators and the redirections have the same precedence level. Characters such as @samp{>} serve both as relationals and as @@ -11381,26 +11429,26 @@ The correct way to write this statement is @samp{print foo > (a ? b : c)}. @cindex tilde (@code{~}), @code{~} operator @cindex @code{!} (exclamation point), @code{!~} operator @cindex exclamation point (@code{!}), @code{!~} operator -@item ~ !~ +@item @code{~ !~} Matching, nonmatching. @cindex @code{in} operator -@item in +@item @code{in} Array membership. @cindex @code{&} (ampersand), @code{&&} operator @cindex ampersand (@code{&}), @code{&&} operator -@item && +@item @code{&&} Logical ``and''. @cindex @code{|} (vertical bar), @code{||} operator @cindex vertical bar (@code{|}), @code{||} operator -@item || +@item @code{||} Logical ``or''. @cindex @code{?} (question mark), @code{?:} operator @cindex question mark (@code{?}), @code{?:} operator -@item ?: +@item @code{?:} Conditional. This operator groups right-to-left. @cindex @code{+} (plus sign), @code{+=} operator @@ -11417,7 +11465,7 @@ Conditional. This operator groups right-to-left. @cindex percent sign (@code{%}), @code{%=} operator @cindex @code{^} (caret), @code{^=} operator @cindex caret (@code{^}), @code{^=} operator -@item = += -= *= /= %= ^= **= +@item @code{= += -= *= /= %= ^= **=} Assignment. These operators group right-to-left. @end table @@ -13181,11 +13229,12 @@ sets automatically on certain occasions in order to provide information to your program. The variables that are specific to @command{gawk} are marked with a pound sign@w{ (@samp{#}).} -@table @code +@c @asis for docbook +@table @asis @cindex @code{ARGC}/@code{ARGV} variables @cindex arguments, command-line @cindex command line, arguments -@item ARGC@r{,} ARGV +@item @code{ARGC}, @code{ARGV} The command-line arguments available to @command{awk} programs are stored in an array called @code{ARGV}. @code{ARGC} is the number of command-line arguments present. @xref{Other Arguments}. @@ -13225,7 +13274,7 @@ about how @command{awk} uses these variables. @cindex @code{ARGIND} variable @cindex differences in @command{awk} and @command{gawk}, @code{ARGIND} variable -@item ARGIND # +@item @code{ARGIND} # The index in @code{ARGV} of the current file being processed. Every time @command{gawk} opens a new data file for processing, it sets @code{ARGIND} to the index in @code{ARGV} of the file name. @@ -13250,7 +13299,7 @@ it is not special. @cindex @code{ENVIRON} array @cindex environment variables, in @code{ENVIRON} array -@item ENVIRON +@item @code{ENVIRON} An associative array containing the values of the environment. The array indices are the environment variable names; the elements are the values of the particular environment variables. For example, @@ -13270,7 +13319,7 @@ On such systems, the @code{ENVIRON} array is empty (except for @cindex @code{ERRNO} variable @cindex differences in @command{awk} and @command{gawk}, @code{ERRNO} variable @cindex error handling, @code{ERRNO} variable and -@item ERRNO # +@item @code{ERRNO} # If a system error occurs during a redirection for @code{getline}, during a read for @code{getline}, or during a @code{close()} operation, then @code{ERRNO} contains a string describing the error. @@ -13297,7 +13346,7 @@ it is not special. @cindex @code{FILENAME} variable @cindex dark corner, @code{FILENAME} variable -@item FILENAME +@item @code{FILENAME} The name of the file that @command{awk} is currently reading. When no data files are listed on the command line, @command{awk} reads from the standard input and @code{FILENAME} is set to @code{"-"}. @@ -13316,14 +13365,14 @@ inside a @code{BEGIN} rule can give @code{FILENAME} a value. @cindex @code{FNR} variable -@item FNR +@item @code{FNR} The current record number in the current file. @code{FNR} is incremented each time a new record is read (@pxref{Records}). It is reinitialized to zero each time a new input file is started. @cindex @code{NF} variable -@item NF +@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}). @@ -13337,7 +13386,7 @@ current record. @xref{Changing Fields}. @cindex @code{FUNCTAB} array @cindex @command{gawk}, @code{FUNCTAB} array in @cindex differences in @command{awk} and @command{gawk}, @code{FUNCTAB} variable -@item FUNCTAB # +@item @code{FUNCTAB} # An array whose indices and corresponding values are the names of all the user-defined or extension functions in the program. @@ -13348,7 +13397,7 @@ the @code{FUNCTAB} array will also cause a fatal error. @end quotation @cindex @code{NR} variable -@item NR +@item @code{NR} The number of input records @command{awk} has processed since the beginning of the program's execution (@pxref{Records}). @@ -13357,7 +13406,7 @@ the beginning of the program's execution @cindex @command{gawk}, @code{PROCINFO} array in @cindex @code{PROCINFO} array @cindex differences in @command{awk} and @command{gawk}, @code{PROCINFO} array -@item PROCINFO # +@item @code{PROCINFO} # The elements of this array provide access to information about the running @command{awk} program. The following elements (listed alphabetically) @@ -13514,7 +13563,7 @@ or if @command{gawk} is in compatibility mode it is not special. @cindex @code{RLENGTH} variable -@item RLENGTH +@item @code{RLENGTH} The length of the substring matched by the @code{match()} function (@pxref{String Functions}). @@ -13522,7 +13571,7 @@ The length of the substring matched by the is the length of the matched string, or @minus{}1 if no match is found. @cindex @code{RSTART} variable -@item RSTART +@item @code{RSTART} The start-index in characters of the substring that is matched by the @code{match()} function (@pxref{String Functions}). @@ -13533,7 +13582,7 @@ if no match was found. @cindex @command{gawk}, @code{RT} variable in @cindex @code{RT} variable @cindex differences in @command{awk} and @command{gawk}, @code{RT} variable -@item RT # +@item @code{RT} # This is set each time a record is read. It contains the input text that matched the text denoted by @code{RS}, the record separator. @@ -13546,7 +13595,7 @@ it is not special. @cindex @command{gawk}, @code{SYMTAB} array in @cindex @code{SYMTAB} array @cindex differences in @command{awk} and @command{gawk}, @code{SYMTAB} variable -@item SYMTAB # +@item @code{SYMTAB} # An array whose indices are the names of all currently defined global variables and arrays in the program. The array may be used for indirect access to read or write the value of a variable: @@ -15023,26 +15072,27 @@ The following list describes all of the built-in functions that work with numbers. Optional parameters are enclosed in square brackets@w{ ([ ]):} -@table @code -@item atan2(@var{y}, @var{x}) +@c @asis for docbook +@table @asis +@item @code{atan2(@var{y}, @var{x})} @cindexawkfunc{atan2} @cindex arctangent Return the arctangent of @code{@var{y} / @var{x}} in radians. You can use @samp{pi = atan2(0, -1)} to retrieve the value of @value{PI}. -@item cos(@var{x}) +@item @code{cos(@var{x})} @cindexawkfunc{cos} @cindex cosine Return the cosine of @var{x}, with @var{x} in radians. -@item exp(@var{x}) +@item @code{exp(@var{x})} @cindexawkfunc{exp} @cindex exponent Return the exponential of @var{x} (@code{e ^ @var{x}}) or report an error if @var{x} is out of range. The range of values @var{x} can have depends on your machine's floating-point representation. -@item int(@var{x}) +@item @code{int(@var{x})} @cindexawkfunc{int} @cindex round to nearest integer Return the nearest integer to @var{x}, located between @var{x} and zero and @@ -15051,13 +15101,13 @@ 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 log(@var{x}) +@item @code{log(@var{x})} @cindexawkfunc{log} @cindex logarithm Return the natural logarithm of @var{x}, if @var{x} is positive; otherwise, report an error. -@item rand() +@item @code{rand()} @cindexawkfunc{rand} @cindex random numbers, @code{rand()}/@code{srand()} functions Return a random number. The values of @code{rand()} are @@ -15115,19 +15165,19 @@ the seed to a value that is different in each run. To do this, use @code{srand()}. @end quotation -@item sin(@var{x}) +@item @code{sin(@var{x})} @cindexawkfunc{sin} @cindex sine Return the sine of @var{x}, with @var{x} in radians. -@item sqrt(@var{x}) +@item @code{sqrt(@var{x})} @cindexawkfunc{sqrt} @cindex square root Return the positive square root of @var{x}. @command{gawk} prints a warning message if @var{x} is negative. Thus, @code{sqrt(4)} is 2. -@item srand(@r{[}@var{x}@r{]}) +@item @code{srand(}[@var{x}]@code{)} @cindexawkfunc{srand} Set the starting point, or seed, for generating random numbers to the value @var{x}. @@ -15184,9 +15234,10 @@ pound sign@w{ (@samp{#}):} @code{gensub()}. @end menu -@table @code -@item asort(@var{source} @r{[}, @var{dest} @r{[}, @var{how} @r{]} @r{]}) # -@itemx asorti(@var{source} @r{[}, @var{dest} @r{[}, @var{how} @r{]} @r{]}) # +@c @asis for docbook +@table @asis +@item @code{asort(}@var{source} [@code{,} @var{dest} [@code{,} @var{how} ] ]@code{)} # +@itemx @code{asorti(}@var{source} [@code{,} @var{dest} [@code{,} @var{how} ] ]@code{)} # @cindexgawkfunc{asorti} @cindex sort array @cindex arrays, elements, retrieving number of @@ -15253,7 +15304,7 @@ a[3] = "middle" @code{asort()} and @code{asorti()} are @command{gawk} extensions; they are not available in compatibility mode (@pxref{Options}). -@item gensub(@var{regexp}, @var{replacement}, @var{how} @r{[}, @var{target}@r{]}) # +@item @code{gensub(@var{regexp}, @var{replacement}, @var{how}} [@code{, @var{target}}]@code{)} # @cindexgawkfunc{gensub} @cindex search and replace in strings @cindex substitute in string @@ -15318,7 +15369,7 @@ is the original unchanged value of @var{target}. @code{gensub()} is a @command{gawk} extension; it is not available in compatibility mode (@pxref{Options}). -@item gsub(@var{regexp}, @var{replacement} @r{[}, @var{target}@r{]}) +@item @code{gsub(@var{regexp}, @var{replacement}} [@code{, @var{target}}]@code{)} @cindexawkfunc{gsub} Search @var{target} for @emph{all} of the longest, leftmost, @emph{nonoverlapping} matching @@ -15340,7 +15391,7 @@ omitted, then the entire input record (@code{$0}) is used. As in @code{sub()}, the characters @samp{&} and @samp{\} are special, and the third argument must be assignable. -@item index(@var{in}, @var{find}) +@item @code{index(@var{in}, @var{find})} @cindexawkfunc{index} @cindex search in string @cindex find substring in string @@ -15359,7 +15410,7 @@ If @var{find} is not found, @code{index()} returns zero. It is a fatal error to use a regexp constant for @var{find}. -@item length(@r{[}@var{string}@r{]}) +@item @code{length(}[@var{string}]@code{)} @cindexawkfunc{length} @cindex string length @cindex length of string @@ -15424,7 +15475,7 @@ If @option{--lint} is provided on the command line If @option{--posix} is supplied, using an array argument is a fatal error (@pxref{Arrays}). -@item match(@var{string}, @var{regexp} @r{[}, @var{array}@r{]}) +@item @code{match(@var{string}, @var{regexp}} [@code{, @var{array}}]@code{)} @cindexawkfunc{match} @cindex string, regular expression match @cindex match regexp in string @@ -15541,7 +15592,7 @@ The @var{array} argument to @code{match()} is a (@pxref{Options}), using a third argument is a fatal error. -@item patsplit(@var{string}, @var{array} @r{[}, @var{fieldpat} @r{[}, @var{seps} @r{]} @r{]}) # +@item @code{patsplit(@var{string}, @var{array}} [@code{, @var{fieldpat}} [@code{, @var{seps}} ] ]@code{)} # @cindexgawkfunc{patsplit} @cindex split string into array Divide @@ -15573,7 +15624,7 @@ The @code{patsplit()} function is a (@pxref{Options}), it is not available. -@item split(@var{string}, @var{array} @r{[}, @var{fieldsep} @r{[}, @var{seps} @r{]} @r{]}) +@item @code{split(@var{string}, @var{array}} [@code{, @var{fieldsep}} [@code{, @var{seps}} ] ]@code{)} @cindexawkfunc{split} Divide @var{string} into pieces separated by @var{fieldsep} and store the pieces in @var{array} and the separator strings in the @@ -15658,7 +15709,7 @@ If @var{string} does not match @var{fieldsep} at all (but is not null), @var{array} has one element only. The value of that element is the original @var{string}. -@item sprintf(@var{format}, @var{expression1}, @dots{}) +@item @code{sprintf(@var{format}, @var{expression1}, @dots{})} @cindexawkfunc{sprintf} @cindex formatting strings Return (without printing) the string that @code{printf} would @@ -15675,7 +15726,7 @@ assigns the string @w{@samp{pi = 3.14 (approx.)}} to the variable @code{pival}. @cindexgawkfunc{strtonum} @cindex convert string to number -@item strtonum(@var{str}) # +@item @code{strtonum(@var{str})} # Examine @var{str} and return its numeric value. If @var{str} begins with a leading @samp{0}, @code{strtonum()} assumes that @var{str} is an octal number. If @var{str} begins with a leading @samp{0x} or @@ -15700,7 +15751,7 @@ for recognizing numbers (@pxref{Locales}). @code{strtonum()} is a @command{gawk} extension; it is not available in compatibility mode (@pxref{Options}). -@item sub(@var{regexp}, @var{replacement} @r{[}, @var{target}@r{]}) +@item @code{sub(@var{regexp}, @var{replacement}} [@code{, @var{target}}]@code{)} @cindexawkfunc{sub} @cindex replace in string Search @var{target}, which is treated as a string, for the @@ -15801,7 +15852,7 @@ will not run. Finally, if the @var{regexp} is not a regexp constant, it is converted into a string, and then the value of that string is treated as the regexp to match. -@item substr(@var{string}, @var{start} @r{[}, @var{length}@r{]}) +@item @code{substr(@var{string}, @var{start}} [@code{, @var{length}} ]@code{)} @cindexawkfunc{substr} @cindex substring Return a @var{length}-character-long substring of @var{string}, @@ -15861,7 +15912,7 @@ string = substr(string, 1, 2) "CDE" substr(string, 6) @cindex case sensitivity, converting case @cindex strings, converting letter case -@item tolower(@var{string}) +@item @code{tolower(@var{string})} @cindexawkfunc{tolower} @cindex convert string to lower case Return a copy of @var{string}, with each uppercase character @@ -15869,7 +15920,7 @@ in the string replaced with its corresponding lowercase character. Nonalphabetic characters are left unchanged. For example, @code{tolower("MiXeD cAsE 123")} returns @code{"mixed case 123"}. -@item toupper(@var{string}) +@item @code{toupper(@var{string})} @cindexawkfunc{toupper} @cindex convert string to upper case Return a copy of @var{string}, with each lowercase character @@ -16269,8 +16320,8 @@ Although this makes a certain amount of sense, it can be surprising. The following functions relate to input/output (I/O). Optional parameters are enclosed in square brackets ([ ]): -@table @code -@item close(@var{filename} @r{[}, @var{how}@r{]}) +@table @asis +@item @code{close(}@var{filename} [@code{,} @var{how}]@code{)} @cindexawkfunc{close} @cindex files, closing @cindex close file or coprocess @@ -16289,7 +16340,7 @@ not matter. @xref{Two-way I/O}, which discusses this feature in more detail and gives an example. -@item fflush(@r{[}@var{filename}@r{]}) +@item @code{fflush(}[@var{filename}]@code{)} @cindexawkfunc{fflush} @cindex flush buffered output Flush any buffered output associated with @var{filename}, which is either a @@ -16349,7 +16400,7 @@ a file or pipe that was opened for reading (such as with @code{getline}), or if @var{filename} is not an open file, pipe, or coprocess. In such a case, @code{fflush()} returns @minus{}1, as well. -@item system(@var{command}) +@item @code{system(@var{command})} @cindexawkfunc{system} @cindex invoke shell command @cindex interacting with other programs @@ -16577,7 +16628,7 @@ is out of range, @code{mktime()} returns @minus{}1. @cindex @command{gawk}, @code{PROCINFO} array in @cindex @code{PROCINFO} array -@item strftime(@r{[}@var{format} @r{[}, @var{timestamp} @r{[}, @var{utc-flag}@r{]]]}) +@item @code{strftime(} [@var{format} [@code{,} @var{timestamp} [@code{,} @var{utc-flag} ]]]@code{)} @c STARTOFRANGE strf @cindexgawkfunc{strftime} @cindex format time string @@ -17061,32 +17112,32 @@ bitwise operations just described. They are: @table @code @cindexgawkfunc{and} @cindex bitwise AND -@item and(@var{v1}, @var{v2} @r{[}, @r{@dots{}]}) +@item @code{and(@var{v1}, @var{v2}} [@code{,} @dots{}]@code{)} Return the bitwise AND of the arguments. There must be at least two. @cindexgawkfunc{compl} @cindex bitwise complement -@item compl(@var{val}) +@item @code{compl(@var{val})} Return the bitwise complement of @var{val}. @cindexgawkfunc{lshift} @cindex left shift -@item lshift(@var{val}, @var{count}) +@item @code{lshift(@var{val}, @var{count})} Return the value of @var{val}, shifted left by @var{count} bits. @cindexgawkfunc{or} @cindex bitwise OR -@item or(@var{v1}, @var{v2} @r{[}, @r{@dots{}]}) +@item @code{or(@var{v1}, @var{v2}} [@code{,} @dots{}]@code{)} Return the bitwise OR of the arguments. There must be at least two. @cindexgawkfunc{rshift} @cindex right shift -@item rshift(@var{val}, @var{count}) +@item @code{rshift(@var{val}, @var{count})} Return the value of @var{val}, shifted right by @var{count} bits. @cindexgawkfunc{xor} @cindex bitwise XOR -@item xor(@var{v1}, @var{v2} @r{[}, @r{@dots{}]}) +@item @code{xor(@var{v1}, @var{v2}} [@code{,} @dots{}]@code{)} Return the bitwise XOR of the arguments. There must be at least two. @end table @@ -17250,7 +17301,7 @@ Optional parameters are enclosed in square brackets ([ ]): @table @code @cindexgawkfunc{bindtextdomain} @cindex set directory of message catalogs -@item bindtextdomain(@var{directory} @r{[}, @var{domain}@r{]}) +@item @code{bindtextdomain(@var{directory}} [@code{,} @var{domain} ]@code{)} Set the directory in which @command{gawk} will look for message translation files, in case they will not or cannot be placed in the ``standard'' locations @@ -17264,14 +17315,14 @@ given @var{domain}. @cindexgawkfunc{dcgettext} @cindex translate string -@item dcgettext(@var{string} @r{[}, @var{domain} @r{[}, @var{category}@r{]]}) +@item @code{dcgettext(@var{string}} [@code{,} @var{domain} [@code{,} @var{category} ]]@code{)} Return the translation of @var{string} in text domain @var{domain} for locale category @var{category}. The default value for @var{domain} is the current value of @code{TEXTDOMAIN}. The default value for @var{category} is @code{"LC_MESSAGES"}. @cindexgawkfunc{dcngettext} -@item dcngettext(@var{string1}, @var{string2}, @var{number} @r{[}, @var{domain} @r{[}, @var{category}@r{]]}) +@item @code{dcngettext(@var{string1}, @var{string2}, @var{number}} [@code{,} @var{domain} [@code{,} @var{category} ]]@code{)} 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 @@ -18328,9 +18379,8 @@ for (i = 1; i <= n; i++) @part Part II:@* Problem Solving With @command{awk} @end iftex -@ignore @ifdocbook -@part Part II:@* Problem Solving With @command{awk} +@part Problem Solving With @command{awk} 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. @@ -18344,7 +18394,6 @@ It contains the following chapters: @ref{Sample Programs}. @end itemize @end ifdocbook -@end ignore @node Library Functions @chapter A Library of @command{awk} Functions @@ -23675,7 +23724,7 @@ BEGIN @{ The following program, @file{igawk.sh}, provides this service. It simulates @command{gawk}'s searching of the @env{AWKPATH} variable and also allows @dfn{nested} includes; i.e., a file that is included -with @samp{@@include} can contain further @samp{@@include} statements. +with @code{@@include} can contain further @code{@@include} statements. @command{igawk} makes an effort to only include files once, so that nested includes don't accidentally include a library function twice. @@ -23713,7 +23762,7 @@ of the file included into the program at the correct point. @item Run an @command{awk} program (naturally) over the shell variable's contents to expand -@samp{@@include} statements. The expanded program is placed in a second +@code{@@include} statements. The expanded program is placed in a second shell variable. @item @@ -23733,24 +23782,25 @@ argument is @samp{debug}. The next part loops through all the command-line arguments. There are several cases of interest: -@table @code -@item -- +@c @asis for docbook +@table @asis +@item @option{--} This ends the arguments to @command{igawk}. Anything else should be passed on to the user's @command{awk} program without being evaluated. -@item -W +@item @option{-W} This indicates that the next option is specific to @command{gawk}. To make argument processing easier, the @option{-W} is appended to the front of the remaining arguments and the loop continues. (This is an @command{sh} programming trick. Don't worry about it if you are not familiar with @command{sh}.) -@item -v@r{,} -F +@item @option{-v}, @option{-F} These are saved and passed on to @command{gawk}. -@item -f@r{,} --file@r{,} --file=@r{,} -Wfile= +@item @option{-f}, @option{--file}, @option{--file=}, @option{-Wfile=} The file name is appended to the shell variable @code{program} with an -@samp{@@include} statement. +@code{@@include} statement. The @command{expr} utility is used to remove the leading option part of the argument (e.g., @samp{--file=}). (Typical @command{sh} usage would be to use the @command{echo} and @command{sed} @@ -23758,10 +23808,10 @@ utilities to do this work. Unfortunately, some versions of @command{echo} evalu escape sequences in their arguments, possibly mangling the program text. Using @command{expr} avoids this problem.) -@item --source@r{,} --source=@r{,} -Wsource= +@item @option{--source}, @option{--source=}, @option{-Wsource=} The source text is appended to @code{program}. -@item --version@r{,} -Wversion +@item @option{--version}, @option{-Wversion} @command{igawk} prints its version number, runs @samp{gawk --version} to get the @command{gawk} version information, and then exits. @end table @@ -23869,14 +23919,14 @@ fi @c endfile @end example -The @command{awk} program to process @samp{@@include} directives +The @command{awk} program to process @code{@@include} directives is stored in the shell variable @code{expand_prog}. Doing this keeps the shell script readable. The @command{awk} program reads through the user's program, one line at a time, using @code{getline} (@pxref{Getline}). The input -file names and @samp{@@include} statements are managed using a stack. -As each @samp{@@include} is encountered, the current file name is -``pushed'' onto the stack and the file named in the @samp{@@include} +file names and @code{@@include} statements are managed using a stack. +As each @code{@@include} is encountered, the current file name is +``pushed'' onto the stack and the file named in the @code{@@include} directive becomes the current file name. As each file is finished, the stack is ``popped,'' and the previous input file becomes the current input file again. The process is started by making the original file @@ -23952,8 +24002,8 @@ BEGIN @{ The stack is initialized with @code{ARGV[1]}, which will be @samp{/dev/stdin}. The main loop comes next. Input lines are read in succession. Lines that -do not start with @samp{@@include} are printed verbatim. -If the line does start with @samp{@@include}, the file name is in @code{$2}. +do not start with @code{@@include} are printed verbatim. +If the line does start with @code{@@include}, the file name is in @code{$2}. @code{pathto()} is called to generate the full path. If it cannot, then the program prints an error message and continues. @@ -24021,7 +24071,7 @@ It's done in these steps: @enumerate @item -Run @command{gawk} with the @samp{@@include}-processing program (the +Run @command{gawk} with the @code{@@include}-processing program (the value of the @code{expand_prog} shell variable) on standard input. @item @@ -24065,9 +24115,9 @@ There are four key simplifications that make the program work better: @itemize @bullet @item -Using @samp{@@include} even for the files named with @option{-f} makes building +Using @code{@@include} even for the files named with @option{-f} makes building the initial collected @command{awk} program much simpler; all the -@samp{@@include} processing can be done once. +@code{@@include} processing can be done once. @item Not trying to save the line read with @code{getline} @@ -24080,7 +24130,7 @@ considerably. @item Using a @code{getline} loop in the @code{BEGIN} rule does it all in one place. It is not necessary to call out to a separate loop for processing -nested @samp{@@include} statements. +nested @code{@@include} statements. @item Instead of saving the expanded program in a temporary file, putting it in a shell variable @@ -24100,7 +24150,7 @@ Finally, @command{igawk} shows that it is not always necessary to add new features to a program; they can often be layered on top. @ignore With @command{igawk}, -there is no real reason to build @samp{@@include} processing into +there is no real reason to build @code{@@include} processing into @command{gawk} itself. @end ignore @@ -24129,8 +24179,8 @@ One user @c Karl Berry, karl@ileaf.com, 10/95 suggested that @command{gawk} be modified to automatically read these files upon startup. Instead, it would be very simple to modify @command{igawk} -to do this. Since @command{igawk} can process nested @samp{@@include} -directives, @file{default.awk} could simply contain @samp{@@include} +to do this. Since @command{igawk} can process nested @code{@@include} +directives, @file{default.awk} could simply contain @code{@@include} statements for the desired library functions. @c Exercise: make this change @@ -24385,10 +24435,8 @@ BEGIN { @part Part III:@* Moving Beyond Standard @command{awk} With @command{gawk} @end iftex -@ignore @ifdocbook - -@part Part III:@* Moving Beyond Standard @command{awk} With @command{gawk} +@part Moving Beyond Standard @command{awk} With @command{gawk} Part III focuses on features specific to @command{gawk}. It contains the following chapters: @@ -24410,7 +24458,6 @@ It contains the following chapters: @ref{Dynamic Extensions}. @end itemize @end ifdocbook -@end ignore @node Advanced Features @chapter Advanced Features of @command{gawk} @@ -25806,7 +25853,7 @@ are candidates for translation at runtime. String constants without a leading underscore are not translated. @cindexgawkfunc{dcgettext} -@item dcgettext(@var{string} @r{[}, @var{domain} @r{[}, @var{category}@r{]]}) +@item @code{dcgettext(@var{string}} [@code{,} @var{domain} [@code{,} @var{category} ]]@code{)} Return the translation of @var{string} in text domain @var{domain} for locale category @var{category}. The default value for @var{domain} is the current value of @code{TEXTDOMAIN}. @@ -25832,7 +25879,7 @@ default arguments. @end quotation @cindexgawkfunc{dcngettext} -@item dcngettext(@var{string1}, @var{string2}, @var{number} @r{[}, @var{domain} @r{[}, @var{category}@r{]]}) +@item @code{dcngettext(@var{string1}, @var{string2}, @var{number}} [@code{,} @var{domain} [@code{,} @var{category} ]]@code{)} 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 @@ -25848,7 +25895,7 @@ The same remarks about argument order as for the @code{dcgettext()} function app @cindex message object files, specifying directory of @cindex files, message object, specifying directory of @cindexgawkfunc{bindtextdomain} -@item bindtextdomain(@var{directory} @r{[}, @var{domain}@r{]}) +@item @code{bindtextdomain(@var{directory}} [@code{,} @var{domain} ]@code{)} Change the directory in which @code{gettext} looks for @file{.gmo} files, in case they will not or cannot be placed in the standard locations @@ -27352,38 +27399,39 @@ a new value to the named option. The available options are: @c nested table -@table @code -@item history_size +@c asis for docbook +@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. -@item listsize +@item @code{listsize} @cindex debugger default list amount The number of lines that @code{list} prints. The default is 15. -@item outfile +@item @code{outfile} @cindex redirect @command{gawk} output, in debugger Send @command{gawk} output to a file; debugger output still goes to standard output. An empty string (@code{""}) resets output to standard output. -@item prompt +@item @code{prompt} @cindex debugger prompt The debugger prompt. The default is @samp{@w{gawk> }}. -@item save_history @r{[}on @r{|} off@r{]} +@item @code{save_history} [@code{on} | @code{off}] @cindex debugger history file Save command history to file @file{./.gawk_history}. The default is @code{on}. -@item save_options @r{[}on @r{|} off@r{]} +@item @code{save_options} [@code{on} | @code{off}] @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. -@item trace @r{[}on @r{|} off@r{]} +@item @code{trace} [@code{on} | @code{off}] @cindex instruction tracing, in debugger Turn instruction tracing on or off. The default is @code{off}. @end table @@ -27537,7 +27585,7 @@ running a program, the debugger warns you if you accidentally type @cindex debugger commands, @code{trace} @cindex @code{trace} debugger command -@item @code{trace} @code{on} @r{|} @code{off} +@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 implement. The default is @code{off}. @@ -31339,8 +31387,9 @@ as described earlier (@pxref{Extension Functions}). It can then be looped over for multiple calls to @code{add_ext_func()}. +@c Use @var{OR} for docbook @item static awk_bool_t (*init_func)(void) = NULL; -@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @r{OR} +@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @var{OR} @itemx static awk_bool_t init_my_module(void) @{ @dots{} @} @itemx static awk_bool_t (*init_func)(void) = init_my_module; If you need to do some initialization work, you should define a @@ -32010,7 +32059,7 @@ BEGIN @{ @end example The @env{AWKLIBPATH} environment variable tells -@command{gawk} where to find shared libraries (@pxref{Finding Extensions}). +@command{gawk} where to find extensions (@pxref{Finding Extensions}). We set it to the current directory and run the program: @example @@ -32073,19 +32122,19 @@ Others mainly provide example code that shows how to use the extension API. The @code{filefuncs} extension provides three different functions, as follows: The usage is: -@table @code +@table @asis @item @@load "filefuncs" This is how you load the extension. @cindex @code{chdir()} extension function -@item result = chdir("/some/directory") +@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}. @cindex @code{stat()} extension function -@item result = stat("/some/path", statdata @r{[}, follow@r{]}) +@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. @@ -32175,8 +32224,8 @@ Not all systems support all file types. @end multitable @cindex @code{fts()} extension function -@item flags = or(FTS_PHYSICAL, ...) -@itemx result = fts(pathlist, flags, filedata) +@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 below. @code{flags} is the bitwise OR of several predefined constant values, also described below. @@ -32800,14 +32849,19 @@ See the project's web site for more information. @part Part IV:@* Appendices @end iftex -@ignore @ifdocbook -@part Part IV:@* Appendices +@part Appendices -Part IV provides the appendices, the Glossary, and two licenses that cover -the @command{gawk} source code and this @value{DOCUMENT}, respectively. -It contains the following appendices: +@ifclear FOR_PRINT +Part IV contains the appendixes (including the two licenses that cover +the @command{gawk} source code and this @value{DOCUMENT}, respectively) +and the Glossary: +@end ifclear + +@ifset FOR_PRINT +Part IV contains two appendixes: +@end ifset @itemize @bullet @item @@ -32816,6 +32870,7 @@ It contains the following appendices: @item @ref{Installation}. +@ifclear FOR_PRINT @item @ref{Notes}. @@ -32830,24 +32885,23 @@ It contains the following appendices: @item @ref{GNU Free Documentation License}. +@end ifclear @end itemize @end ifdocbook -@end ignore @node Language History @appendix The Evolution of the @command{awk} Language -This @value{DOCUMENT} describes the GNU implementation of @command{awk}, which follows -the POSIX specification. -Many long-time @command{awk} users learned @command{awk} programming -with the original @command{awk} implementation in Version 7 Unix. -(This implementation was the basis for @command{awk} in Berkeley Unix, -through 4.3-Reno. Subsequent versions of Berkeley Unix, and some systems -derived from 4.4BSD-Lite, use various versions of @command{gawk} -for their @command{awk}.) -This @value{CHAPTER} briefly describes the -evolution of the @command{awk} language, with cross-references to other parts -of the @value{DOCUMENT} where you can find more information. +This @value{DOCUMENT} describes the GNU implementation of @command{awk}, +which follows the POSIX specification. Many long-time @command{awk} +users learned @command{awk} programming with the original @command{awk} +implementation in Version 7 Unix. (This implementation was the basis for +@command{awk} in Berkeley Unix, through 4.3-Reno. Subsequent versions +of Berkeley Unix, and some systems derived from 4.4BSD-Lite, use various +versions of @command{gawk} for their @command{awk}.) This @value{CHAPTER} +briefly describes the evolution of the @command{awk} language, with +cross-references to other parts of the @value{DOCUMENT} where you can +find more information. @menu * V7/SVR3.1:: The major changes between V7 and System V @@ -39285,4 +39339,4 @@ which sorta sucks. TODO: ----- -1. Empty string vs. null string. 30 occurrences vs. 77, respectively. +2. Add back in docbook fixes for @r{}. -- cgit v1.2.3 From 2535d8a18e8c0d328fe6d1d8ae015320eeec6b5d Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 30 Apr 2014 06:06:06 +0300 Subject: Editing progress through chapter 5. --- doc/ChangeLog | 4 + doc/gawk.info | 1344 ++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 179 +++++--- doc/gawktexi.in | 166 ++++--- 4 files changed, 906 insertions(+), 787 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 972e19f8..59d31520 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-04-30 Arnold D. Robbins + + * gawktexi.in: Editing progress. Through Chapter 5. + 2014-04-29 Arnold D. Robbins * gawktexi.in: Editing progress. Through Chapter 3. diff --git a/doc/gawk.info b/doc/gawk.info index 1d5f496d..57fdc3d4 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -651,15 +651,15 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) * Basic High Level:: The high level view. * Basic Data Typing:: A very quick intro to data types. - To Miriam, for making me complete. + To my parents, for their love, and for the wonderful example they +set for me. - To Chana, for the joy you bring us. + To my wife Miriam, for making me complete. Thank you for building +your life together with me. - To Rivka, for the exponential increase. + To our children Chana, Rivka, Nachum and Malka, for enrichening our +lives in innumerable ways. - To Nachum, for the added dimension. - - To Malka, for the new beginning.  File: gawk.info, Node: Foreword, Next: Preface, Prev: Top, Up: Top @@ -3939,8 +3939,19 @@ started. Another built-in variable, `NR', records the total number of input records read so far from all data files. It starts at zero, but is never automatically reset to zero. - Records are separated by a character called the "record separator". -By default, the record separator is the newline character. This is why +* Menu: + +* awk split records:: How standard `awk' splits records. +* gawk split records:: How `gawk' splits records. + + +File: gawk.info, Node: awk split records, Next: gawk split records, Up: Records + +4.1.1 Record Splitting With Standard `awk' +------------------------------------------ + +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 built-in variable `RS'. @@ -4060,16 +4071,22 @@ affected. After the end of the record has been determined, `gawk' sets the variable `RT' to the text in the input that matched `RS'. - When using `gawk', the value of `RS' is not limited to a -one-character string. It can be any regular expression (*note -Regexp::). (c.e.) In general, each record ends at the next string that -matches the regular expression; the next record starts at the end of -the matching string. This general rule is actually at work in the -usual case, where `RS' contains just a newline: a record ends at the -beginning of the next matching string (the next newline in the input), -and the following record starts just after the end of this string (at -the first character of the following line). The newline, because it -matches `RS', is not part of either record. + +File: gawk.info, Node: gawk split records, Prev: awk split records, Up: Records + +4.1.2 Record Splitting With `gawk' +---------------------------------- + +When using `gawk', the value of `RS' is not limited to a one-character +string. It can be any regular expression (*note Regexp::). (c.e.) In +general, each record ends at the next string that matches the regular +expression; the next record starts at the end of the matching string. +This general rule is actually at work in the usual case, where `RS' +contains just a newline: a record ends at the beginning of the next +matching string (the next newline in the input), and the following +record starts just after the end of this string (at the first character +of the following line). The newline, because it matches `RS', is not +part of either record. When `RS' is a single character, `RT' contains the same single character. However, when `RS' is a regular expression, `RT' contains @@ -4132,8 +4149,10 @@ use for `RS' in this case: BEGIN { RS = "\0" } # whole file becomes one record? `gawk' in fact accepts this, and uses the NUL character for the -record separator. However, this usage is _not_ portable to most other -`awk' implementations. +record separator. This works for certain special files, such as +`/proc/environ' on GNU/Linux systems, where the NUL character is in +fact the record separator. However, this usage is _not_ portable to +most other `awk' implementations. Almost all other `awk' implementations(1) store strings internally as C-style strings. C strings use the NUL character as the string @@ -4144,10 +4163,9 @@ terminator. In effect, this means that `RS = "\0"' is the same as `RS as a record separator. However, this is a special case: `mawk' does not allow embedded NUL characters in strings. - The best way to treat a whole file as a single record is to simply -read the file in, one record at a time, concatenating each record onto -the end of the previous ones. - + *Note Readfile Function::, for an interesting, portable way to read +whole files. If you are using `gawk', see *note Extension Sample +Readfile::, for another option. ---------- Footnotes ---------- @@ -4172,7 +4190,7 @@ 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. - A dollar-sign (`$') is used 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 one @@ -4195,8 +4213,9 @@ 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 when you -are not interested in specific fields. Here are some more examples: +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 @@ -4228,11 +4247,11 @@ File: gawk.info, Node: Nonconstant Fields, Next: Changing Fields, Prev: Field 4.3 Nonconstant Field Numbers ============================= -The number of a field does not need to be a constant. Any expression in -the `awk' language can be used after a `$' to refer to a field. The -value of the expression specifies the field number. If the value is a -string, rather than a number, it is converted to a number. Consider -this example: +A field number need not be a constant. Any expression in the `awk' +language can be used after a `$' to refer to a field. The value of the +expression specifies the field number. If the value is a string, +rather than a number, it is converted to a number. Consider this +example: awk '{ print $NR }' @@ -4249,7 +4268,7 @@ another example of using expressions as field numbers: number of the field to print. The `*' sign 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 in the field-number +necessary whenever there is a binary operator(1) in the field-number expression. This example, then, prints the type of relationship (the fourth field) for every line of the file `mail-list'. (All of the `awk' operators are listed, in order of decreasing precedence, in *note @@ -4268,6 +4287,12 @@ Variables::). The expression `$NF' is not a special feature--it is the direct consequence of evaluating `NF' and using its value as a field number. + ---------- Footnotes ---------- + + (1) A "binary operator", such as `*' for multiplication, is one that +takes two operands. The distinction is required, since `awk' also has +unary (one-operand) and ternary (three-operand) operators. +  File: gawk.info, Node: Changing Fields, Next: Field Separators, Prev: Nonconstant Fields, Up: Reading Files @@ -4293,11 +4318,11 @@ three minus ten: `$3 - 10'. (*Note Arithmetic Ops::.) Then it prints the original and new values for field three. (Someone in the warehouse made a consistent mistake while inventorying the red boxes.) - For this to work, the text in field `$3' must make sense as a -number; the string of characters must be converted to a number for the -computer to do arithmetic on it. The number resulting from the -subtraction is converted back to a string of characters that then -becomes field three. *Note Conversion::. + For this to work, the text in `$3' must make sense as a number; the +string of characters must be converted to a number for the computer to +do arithmetic on it. The number resulting from the subtraction is +converted back to a string of characters that then becomes field three. +*Note Conversion::. When the value of a field is changed (as perceived by `awk'), the text of the input record is recalculated to contain the new field where @@ -4362,7 +4387,7 @@ even when you assign the empty string to a field. For example: -| a::c:d -| 4 -The field is still there; it just has an empty value, denoted by the +The field is still there; it just has an empty value, delimited by the two colons between `a' and `c'. This example shows what happens if you create a new field: @@ -4987,7 +5012,7 @@ affects field splitting with `FPAT'. deal with this. Since there is no formal specification for CSV data, there isn't much more to be done; the `FPAT' mechanism provides an elegant solution for the majority of cases, and the - `gawk' maintainer is satisfied with that. + `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 @@ -5037,8 +5062,8 @@ 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. - There is an important difference between `RS = ""' and `RS = -"\n\n+"'. In the first case, leading newlines in the input data file + However, there is an important difference between `RS = ""' and `RS += "\n\n+"'. In the first case, leading newlines in the input data file are ignored, and if a file ends without extra blank lines after the last record, the final newline is removed from the record. In the second case, this special processing is not done. (d.c.) @@ -5310,9 +5335,9 @@ are changed, resulting in a new value of `NF'. `RT' is also set. According to POSIX, `getline < EXPRESSION' is ambiguous if EXPRESSION contains unparenthesized operators other than `$'; for example, `getline < dir "/" file' is ambiguous because the -concatenation operator is not parenthesized. You should write it as -`getline < (dir "/" file)' if you want your program to be portable to -all `awk' implementations. +concatenation operator (not discussed yet; *note Concatenation::) is +not parenthesized. You should write it as `getline < (dir "/" file)' if +you want your program to be portable to all `awk' implementations.  File: gawk.info, Node: Getline/Variable/File, Next: Getline/Pipe, Prev: Getline/File, Up: Getline @@ -5517,10 +5542,10 @@ in mind: testing the new record against every pattern. However, the new record is tested against any subsequent rules. - * Many `awk' implementations limit the number of pipelines that an - `awk' program may have open to just one. In `gawk', there is no - such limit. You can open as many pipelines (and coprocesses) as - the underlying operating system permits. + * Some very old `awk' implementations limit the number of pipelines + that an `awk' program may have open to just one. In `gawk', there + is no such limit. You can open as many pipelines (and + coprocesses) as the underlying operating system permits. * An interesting side effect occurs if you use `getline' without a redirection inside a `BEGIN' rule. Because an unredirected @@ -5559,9 +5584,9 @@ in mind: 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'. Other - versions of `awk' only evaluate the expression once they know that - there is a string value to be assigned. Caveat Emptor. + expression `a[++c]' before attempting to read from `f'. However, + some versions of `awk' only evaluate the expression once they know + that there is a string value to be assigned. Caveat Emptor.  File: gawk.info, Node: Getline Summary, Prev: Getline Notes, Up: Getline @@ -5597,10 +5622,12 @@ File: gawk.info, Node: Read Timeout, Next: Command line directories, Prev: Ge 4.10 Reading Input With A Timeout ================================= -You may specify a timeout in milliseconds for reading input from the -keyboard, 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: +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' (*note Auto-set::) array: PROCINFO["input_name", "READ_TIMEOUT"] = TIMEOUT IN MILLISECONDS @@ -5623,10 +5650,10 @@ for more than five seconds: while ((getline < "/dev/stdin") > 0) print $0 - `gawk' will terminate the read operation if input does not arrive -after waiting for the timeout period, return failure and set the -`ERRNO' variable to an appropriate string value. A negative or zero -value for the timeout is the same as specifying no timeout at all. + `gawk' terminates the read operation if input does not arrive after +waiting for the timeout period, returns failure and sets the `ERRNO' +variable to an appropriate string value. A negative or zero value for +the timeout is the same as specifying no timeout at all. A timeout can also be set for reading from the keyboard in the implicit loop that reads input records and matches them against @@ -5690,14 +5717,21 @@ File: gawk.info, Node: Command line directories, Prev: Read Timeout, Up: Read ==================================== According to the POSIX standard, files named on the `awk' command line -must be text files. It is a fatal error if they are not. Most -versions of `awk' treat a directory on the command line as a fatal -error. +must be text files; it is a fatal error if they are not. Most versions +of `awk' treat a directory on the command line as a fatal error. By default, `gawk' produces a warning for a directory on the command -line, but otherwise ignores it. If either of the `--posix' or -`--traditional' options is given, then `gawk' reverts to treating a -directory on the command line as a fatal error. +line, but otherwise ignores it. This makes it easier to use shell +wildcards with your `awk' program: + + $ gawk -f whizprog.awk * Directories could kill this progam + + If either of the `--posix' or `--traditional' options is given, then +`gawk' reverts to treating a directory on the command line as a fatal +error. + + *Note Extension Sample Readdir::, for a way to treat directories as +usable data from an `awk' program.  File: gawk.info, Node: Printing, Next: Expressions, Prev: Reading Files, Up: Top @@ -5741,9 +5775,9 @@ File: gawk.info, Node: Print, Next: Print Examples, Up: Printing ========================= The `print' statement is used for producing output with simple, -standardized formatting. Specify only the strings or numbers to print, -in a list separated by commas. They are output, separated by single -spaces, followed by a newline. The statement looks like this: +standardized formatting. You specify only the strings or numbers to +print, in a list separated by commas. They are output, separated by +single spaces, followed by a newline. The statement looks like this: print ITEM1, ITEM2, ... @@ -5810,8 +5844,8 @@ Here is the same program, without the comma: To someone unfamiliar with the `inventory-shipped' file, neither example's output makes much sense. A heading line at the beginning would make it clearer. Let's add some headings to our table of months -(`$1') and green crates shipped (`$2'). We do this using the `BEGIN' -pattern (*note BEGIN/END::) so that the headings are only printed once: +(`$1') and green crates shipped (`$2'). We do this using a `BEGIN' +rule (*note BEGIN/END::) so that the headings are only printed once: awk 'BEGIN { print "Month Crates" print "----- ------" } @@ -6050,7 +6084,8 @@ width. Here is a list of the format-control letters: On systems supporting IEEE 754 floating point format, values representing negative infinity are formatted as `-inf' or `-infinity', and positive infinity as `inf' and `infinity'. The - special "not a number" value formats as `-nan' or `nan'. + special "not a number" value formats as `-nan' or `nan' (*note + General Arithmetic::). `%F' Like `%f' but the infinity and "not a number" values are spelled @@ -6250,11 +6285,12 @@ string, like so: This is not particularly easy to read but it does work. - C programmers may be used to supplying additional `l', `L', and `h' -modifiers in `printf' format strings. These are not valid in `awk'. -Most `awk' implementations silently ignore them. If `--lint' is -provided on the command line (*note Options::), `gawk' warns about -their use. If `--posix' is supplied, their use is a fatal error. + C programmers may be used to supplying additional modifiers (`h', +`j', `l', `L', `t', and `z') in `printf' format strings. These are not +valid in `awk'. Most `awk' implementations silently ignore them. If +`--lint' is provided on the command line (*note Options::), `gawk' +warns about their use. If `--posix' is supplied, their use is a fatal +error.  File: gawk.info, Node: Printf Examples, Prev: Format Modifiers, Up: Printf @@ -6295,7 +6331,7 @@ they are last on their lines. They don't need to have spaces after them. The table could be made to look even nicer by adding headings to the -tops of the columns. This is done using the `BEGIN' pattern (*note +tops of the columns. This is done using a `BEGIN' rule (*note BEGIN/END::) so that the headers are only printed once, at the beginning of the `awk' program: @@ -6346,7 +6382,7 @@ commands, except that they are written inside the `awk' program. There are four forms of output redirection: output to a file, output appended to a file, output through a pipe to another command, and output -to a coprocess. They are all shown for the `print' statement, but they +to a coprocess. We show them all for the `print' statement, but they work identically for `printf': `print ITEMS > OUTPUT-FILE' @@ -6427,7 +6463,7 @@ work identically for `printf': FILE or COMMAND--it is not necessary to always use a string constant. Using a variable is generally a good idea, because (if you mean to refer to that same file or command) `awk' requires - that the string value be spelled identically every time. + that the string value be written identically every time. `print ITEMS |& COMMAND' This redirection prints the items to the input of COMMAND. The @@ -6539,7 +6575,7 @@ run from a background job, it may not have a terminal at all. Then opening `/dev/tty' fails. `gawk' provides special file names for accessing the three standard -streams. (c.e.). It also provides syntax for accessing any other +streams. (c.e.) It also provides syntax for accessing any other inherited open files. If the file name matches one of these special names when `gawk' redirects input or output, then it directly uses the stream that the file name stands for. These special file names work @@ -6732,14 +6768,15 @@ end-of-file return status from `getline'), the child process is not terminated;(1) more importantly, the file descriptor for the pipe is not closed and released until `close()' is called or `awk' exits. - `close()' will silently do nothing if given an argument that does -not represent a file, pipe or coprocess that was opened with a -redirection. + `close()' silently does nothing if given an argument that does not +represent a file, pipe or coprocess that was opened with a redirection. +In such a case, it returns a negative value, indicating an error. In +addition, `gawk' sets `ERRNO' to a string indicating the error. Note also that `close(FILENAME)' has no "magic" effects on the implicit loop that reads through the files named on the command line. -It is, more likely, a close of a file that was never opened, so `awk' -silently does nothing. +It is, more likely, a close of a file that was never opened with a +redirection, so `awk' silently does nothing. When using the `|&' operator to communicate with a coprocess, it is occasionally useful to be able to close one end of the two-way pipe @@ -6753,9 +6790,9 @@ I/O::, which discusses it in more detail and gives an example. Using `close()''s Return Value - In many versions of Unix `awk', the `close()' function is actually a -statement. It is a syntax error to try and use the return value from -`close()': (d.c.) + In many older versions of Unix `awk', the `close()' function is +actually a statement. It is a syntax error to try and use the return +value from `close()': (d.c.) command = "..." command | getline info @@ -30772,7 +30809,7 @@ Index * close() function, portability: Close Files And Pipes. (line 81) * close() function, return value: Close Files And Pipes. - (line 130) + (line 131) * close() function, two-way pipes and: Two-way I/O. (line 77) * Close, Diane <1>: Contributors. (line 20) * Close, Diane: Manual History. (line 41) @@ -30817,7 +30854,7 @@ Index * common extensions, func keyword: Definition Syntax. (line 83) * common extensions, length() applied to an array: String Functions. (line 194) -* common extensions, RS as a regexp: Records. (line 135) +* common extensions, RS as a regexp: gawk split records. (line 6) * common extensions, single character fields: Single Character Fields. (line 6) * comp.lang.awk newsgroup: Bugs. (line 38) @@ -30918,7 +30955,7 @@ Index (line 43) * dark corner, break statement: Break Statement. (line 51) * dark corner, close() function: Close Files And Pipes. - (line 130) + (line 131) * dark corner, command-line arguments: Assignment Options. (line 43) * dark corner, continue statement: Continue Statement. (line 43) * dark corner, CONVFMT variable: Conversion. (line 40) @@ -30934,7 +30971,7 @@ Index * dark corner, format-control characters: Control Letters. (line 18) * dark corner, FS as null string: Single Character Fields. (line 20) -* dark corner, input files: Records. (line 118) +* dark corner, input files: awk split records. (line 110) * dark corner, invoking awk: Command Line. (line 16) * dark corner, length() function: String Functions. (line 180) * dark corner, locale's decimal point character: Conversion. (line 77) @@ -30948,7 +30985,7 @@ Index * dark corner, regexp constants, as arguments to user-defined functions: Using Constant Regexps. (line 43) * dark corner, split() function: String Functions. (line 359) -* dark corner, strings, storing: Records. (line 210) +* dark corner, strings, storing: gawk split records. (line 83) * dark corner, value of ARGV[0]: Auto-set. (line 35) * data, fixed-width: Constant Size. (line 10) * data-driven languages: Basic High Level. (line 85) @@ -31143,19 +31180,23 @@ Index * differences in awk and gawk, print/printf statements: Format Modifiers. (line 13) * differences in awk and gawk, PROCINFO array: Auto-set. (line 133) -* differences in awk and gawk, record separators: Records. (line 132) +* differences in awk and gawk, read timeouts: Read Timeout. (line 6) +* differences in awk and gawk, record separators: awk split records. + (line 124) * differences in awk and gawk, regexp constants: Using Constant Regexps. (line 43) * differences in awk and gawk, regular expressions: Case-sensitivity. (line 26) -* differences in awk and gawk, RS/RT variables: Records. (line 187) +* differences in awk and gawk, RS/RT variables: gawk split records. + (line 58) * differences in awk and gawk, RT variable: Auto-set. (line 266) * differences in awk and gawk, single-character fields: Single Character Fields. (line 6) * differences in awk and gawk, split() function: String Functions. (line 347) * differences in awk and gawk, strings: Scalar Constants. (line 20) -* differences in awk and gawk, strings, storing: Records. (line 206) +* differences in awk and gawk, strings, storing: gawk split records. + (line 77) * differences in awk and gawk, SYMTAB variable: Auto-set. (line 274) * differences in awk and gawk, TEXTDOMAIN variable: User-modified. (line 162) @@ -31214,7 +31255,7 @@ Index * empty array elements: Reference to Elements. (line 18) * empty pattern: Empty. (line 6) -* empty strings: Records. (line 122) +* empty strings: awk split records. (line 114) * empty strings, See null strings: Regexp Field Splitting. (line 43) * enable breakpoint: Breakpoint Control. (line 73) @@ -31256,7 +31297,7 @@ Index * ERRNO variable: Auto-set. (line 73) * ERRNO variable, with BEGINFILE pattern: BEGINFILE/ENDFILE. (line 26) * ERRNO variable, with close() function: Close Files And Pipes. - (line 138) + (line 139) * ERRNO variable, with getline command: Getline. (line 19) * error handling: Special FD. (line 16) * error handling, ERRNO variable and: Auto-set. (line 73) @@ -31335,7 +31376,7 @@ Index * extensions, common, func keyword: Definition Syntax. (line 83) * extensions, common, length() applied to an array: String Functions. (line 194) -* extensions, common, RS as a regexp: Records. (line 135) +* extensions, common, RS as a regexp: gawk split records. (line 6) * extensions, common, single character fields: Single Character Fields. (line 6) * extensions, in gawk, not in POSIX awk: POSIX/GNU. (line 6) @@ -31349,7 +31390,6 @@ Index * FDL (Free Documentation License): GNU Free Documentation License. (line 7) * features, adding to gawk: Adding Code. (line 6) -* features, advanced, See advanced features: Obsolete. (line 6) * features, deprecated: Obsolete. (line 6) * features, undocumented: Undocumented. (line 6) * Fenlason, Jay <1>: Contributors. (line 18) @@ -31589,7 +31629,7 @@ Index * gawk, ERRNO variable in <2>: Auto-set. (line 73) * gawk, ERRNO variable in <3>: BEGINFILE/ENDFILE. (line 26) * gawk, ERRNO variable in <4>: Close Files And Pipes. - (line 138) + (line 139) * gawk, ERRNO variable in: Getline. (line 19) * gawk, escape sequences: Escape Sequences. (line 124) * gawk, extensions, disabling: Options. (line 254) @@ -31644,7 +31684,7 @@ Index * gawk, regular expressions, precedence: Regexp Operators. (line 162) * gawk, RT variable in <1>: Auto-set. (line 266) * gawk, RT variable in <2>: Multiple Line. (line 129) -* gawk, RT variable in: Records. (line 132) +* gawk, RT variable in: awk split records. (line 124) * gawk, See Also awk: Preface. (line 36) * gawk, source code, obtaining: Getting. (line 6) * gawk, splitting fields and: Constant Size. (line 88) @@ -32047,6 +32087,7 @@ Index * mktime: Time Functions. (line 25) * modifiers, in format specifiers: Format Modifiers. (line 6) * monetary information, localization: Explaining gettext. (line 103) +* Moore, Duncan: Getline Notes. (line 40) * MPFR: Gawk and MPFR. (line 6) * msgfmt utility: I18N Example. (line 62) * multiple precision: Arbitrary Precision Arithmetic. @@ -32071,7 +32112,7 @@ Index * newlines: Statements/Lines. (line 6) * newlines, as field separators: Default Field Splitting. (line 6) -* newlines, as record separators: Records. (line 20) +* 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, printing: Print Examples. (line 12) @@ -32112,7 +32153,7 @@ Index * null strings <2>: Truth Values. (line 6) * null strings <3>: Regexp Field Splitting. (line 43) -* null strings: Records. (line 122) +* null strings: awk split records. (line 114) * null strings in gawk arguments, quoting and: Quoting. (line 79) * null strings, and deleting array elements: Delete. (line 27) * null strings, as array subscripts: Uninitialized Subscripts. @@ -32274,7 +32315,8 @@ Index (line 112) * portability, close() function and: Close Files And Pipes. (line 81) -* portability, data files as single record: Records. (line 194) +* portability, data files as single record: gawk split records. + (line 65) * portability, deleting array elements: Delete. (line 56) * portability, example programs: Library Functions. (line 42) * portability, functions, defining: Definition Syntax. (line 99) @@ -32473,17 +32515,18 @@ Index * reading input files: Reading Files. (line 6) * recipe for a programming language: History. (line 6) * record separators <1>: User-modified. (line 143) -* record separators: Records. (line 14) -* record separators, changing: Records. (line 93) -* record separators, regular expressions as: Records. (line 132) +* record separators: awk split records. (line 6) +* record separators, changing: awk split records. (line 85) +* record separators, regular expressions as: awk split records. + (line 124) * record separators, with multiline records: Multiple Line. (line 10) * records <1>: Basic High Level. (line 73) * records: Reading Files. (line 14) * records, multiline: Multiple Line. (line 6) * records, printing: Print. (line 22) * records, splitting input into: Records. (line 6) -* records, terminating: Records. (line 132) -* records, treating files as: Records. (line 219) +* records, terminating: awk split records. (line 124) +* records, treating files as: gawk split records. (line 92) * recursive functions: Definition Syntax. (line 73) * redirect gawk output, in debugger: Debugger Info. (line 72) * redirection of input: Getline/File. (line 6) @@ -32510,7 +32553,8 @@ Index (line 6) * regular expressions, as patterns <1>: Regexp Patterns. (line 6) * regular expressions, as patterns: Regexp Usage. (line 6) -* regular expressions, as record separators: Records. (line 132) +* regular expressions, as record separators: awk split records. + (line 124) * regular expressions, case sensitivity <1>: User-modified. (line 82) * regular expressions, case sensitivity: Case-sensitivity. (line 6) * regular expressions, computed: Computed Regexps. (line 6) @@ -32542,7 +32586,7 @@ Index (line 54) * return statement, user-defined functions: Return Statement. (line 6) * return value, close() function: Close Files And Pipes. - (line 130) + (line 131) * rev() user-defined function: Function Example. (line 53) * revoutput extension: Extension Sample Revout. (line 11) @@ -32587,14 +32631,14 @@ Index (line 6) * ROUNDMODE variable: User-modified. (line 138) * RS variable <1>: User-modified. (line 143) -* RS variable: Records. (line 20) +* RS variable: awk split records. (line 12) * RS variable, multiline records and: Multiple Line. (line 17) * rshift: Bitwise Functions. (line 52) * RSTART variable: Auto-set. (line 259) * RSTART variable, match() function and: String Functions. (line 221) * RT variable <1>: Auto-set. (line 266) * RT variable <2>: Multiple Line. (line 129) -* RT variable: Records. (line 132) +* RT variable: awk split records. (line 124) * Rubin, Paul <1>: Contributors. (line 15) * Rubin, Paul: History. (line 30) * rule, definition of: Getting Started. (line 21) @@ -32644,8 +32688,9 @@ Index * separators, field, FPAT variable and: User-modified. (line 45) * separators, field, POSIX and: Fields. (line 6) * separators, for records <1>: User-modified. (line 143) -* separators, for records: Records. (line 14) -* separators, for records, regular expressions as: Records. (line 132) +* separators, for records: awk split records. (line 6) +* separators, for records, regular expressions as: awk split records. + (line 124) * separators, for statements in actions: Action Overview. (line 19) * separators, subscript: User-modified. (line 156) * set breakpoint: Breakpoint Control. (line 11) @@ -32712,7 +32757,7 @@ Index * sidebar, Piping into sh: Redirection. (line 140) * sidebar, Portability Issues with #!: Executable Scripts. (line 31) * sidebar, Recipe For A Programming Language: History. (line 6) -* sidebar, RS = "\0" Is Not Portable: Records. (line 192) +* sidebar, RS = "\0" Is Not Portable: gawk split records. (line 63) * sidebar, So Why Does gawk have BEGINFILE and ENDFILE?: Filetrans Function. (line 83) * sidebar, Syntactic Ambiguities Between /= and Regular Expressions: Assignment Ops. @@ -32721,7 +32766,7 @@ Index * sidebar, Using \n in Bracket Expressions of Dynamic Regexps: Computed Regexps. (line 57) * sidebar, Using close()'s Return Value: Close Files And Pipes. - (line 128) + (line 129) * SIGHUP signal, for dynamic profiling: Profiling. (line 211) * SIGINT signal (MS-Windows): Profiling. (line 214) * signals, HUP/SIGHUP, for profiling: Profiling. (line 211) @@ -32829,7 +32874,7 @@ Index * strings, converting: Conversion. (line 6) * strings, converting letter case: String Functions. (line 520) * strings, converting, numbers to: User-modified. (line 28) -* strings, empty, See null strings: Records. (line 122) +* strings, empty, See null strings: awk split records. (line 114) * strings, extracting: String Extraction. (line 6) * strings, for localization: Programmer i18n. (line 14) * strings, length limitations: Scalar Constants. (line 20) @@ -32875,7 +32920,7 @@ Index * tee utility: Tee Program. (line 6) * tee.awk program: Tee Program. (line 26) * temporary breakpoint: Breakpoint Control. (line 90) -* terminating records: Records. (line 132) +* terminating records: awk split records. (line 124) * testbits.awk program: Bitwise Functions. (line 70) * testext extension: Extension Sample API Tests. (line 6) @@ -32923,7 +32968,7 @@ Index * traceback, display in debugger: Execution Stack. (line 13) * translate string: I18N Functions. (line 22) * translate.awk program: Translate Program. (line 55) -* treating files, as single records: Records. (line 219) +* treating files, as single records: gawk split records. (line 92) * troubleshooting, --non-decimal-data option: Options. (line 211) * troubleshooting, == operator: Comparison Operators. (line 37) @@ -32988,7 +33033,7 @@ Index * Unix awk, backslashes in escape sequences: Escape Sequences. (line 124) * Unix awk, close() function and: Close Files And Pipes. - (line 130) + (line 131) * Unix awk, password files, field separators and: Command Line Field Separator. (line 64) * Unix, awk scripts and: Executable Scripts. (line 6) @@ -33116,7 +33161,7 @@ Index * | (vertical bar), |& operator (I/O) <3>: Redirection. (line 102) * | (vertical bar), |& operator (I/O): Getline/Coprocess. (line 6) * | (vertical bar), |& operator (I/O), pipes, closing: Close Files And Pipes. - (line 118) + (line 119) * | (vertical bar), || operator <1>: Precedence. (line 89) * | (vertical bar), || operator: Boolean Ops. (line 57) * ~ (tilde), ~ operator <1>: Expression Patterns. (line 24) @@ -33132,529 +33177,532 @@ Index  Tag Table: Node: Top1292 -Node: Foreword40825 -Node: Preface45170 -Ref: Preface-Footnote-148303 -Ref: Preface-Footnote-248410 -Node: History48642 -Node: Names51016 -Ref: Names-Footnote-152480 -Node: This Manual52553 -Ref: This Manual-Footnote-158327 -Node: Conventions58427 -Node: Manual History60583 -Ref: Manual History-Footnote-164013 -Ref: Manual History-Footnote-264054 -Node: How To Contribute64128 -Node: Acknowledgments65367 -Node: Getting Started69561 -Node: Running gawk71940 -Node: One-shot73130 -Node: Read Terminal74355 -Ref: Read Terminal-Footnote-176005 -Ref: Read Terminal-Footnote-276281 -Node: Long76452 -Node: Executable Scripts77828 -Ref: Executable Scripts-Footnote-179661 -Ref: Executable Scripts-Footnote-279763 -Node: Comments80310 -Node: Quoting82777 -Node: DOS Quoting88093 -Node: Sample Data Files88768 -Node: Very Simple91283 -Node: Two Rules95933 -Node: More Complex97828 -Ref: More Complex-Footnote-1100760 -Node: Statements/Lines100845 -Ref: Statements/Lines-Footnote-1105300 -Node: Other Features105565 -Node: When106493 -Node: Invoking Gawk108641 -Node: Command Line110104 -Node: Options110887 -Ref: Options-Footnote-1126699 -Node: Other Arguments126724 -Node: Naming Standard Input129386 -Node: Environment Variables130480 -Node: AWKPATH Variable131038 -Ref: AWKPATH Variable-Footnote-1133816 -Ref: AWKPATH Variable-Footnote-2133861 -Node: AWKLIBPATH Variable134121 -Node: Other Environment Variables134880 -Node: Exit Status138045 -Node: Include Files138720 -Node: Loading Shared Libraries142298 -Node: Obsolete143681 -Node: Undocumented144378 -Node: Regexp144620 -Node: Regexp Usage146009 -Node: Escape Sequences148042 -Node: Regexp Operators153709 -Ref: Regexp Operators-Footnote-1161189 -Ref: Regexp Operators-Footnote-2161336 -Node: Bracket Expressions161434 -Ref: table-char-classes163324 -Node: GNU Regexp Operators165847 -Node: Case-sensitivity169570 -Ref: Case-sensitivity-Footnote-1172462 -Ref: Case-sensitivity-Footnote-2172697 -Node: Leftmost Longest172805 -Node: Computed Regexps174006 -Node: Reading Files177355 -Node: Records179357 -Ref: Records-Footnote-1188880 -Node: Fields188917 -Ref: Fields-Footnote-1191873 -Node: Nonconstant Fields191959 -Node: Changing Fields194165 -Node: Field Separators200124 -Node: Default Field Splitting202826 -Node: Regexp Field Splitting203943 -Node: Single Character Fields207284 -Node: Command Line Field Separator208343 -Node: Full Line Fields211685 -Ref: Full Line Fields-Footnote-1212193 -Node: Field Splitting Summary212239 -Ref: Field Splitting Summary-Footnote-1215338 -Node: Constant Size215439 -Node: Splitting By Content220046 -Ref: Splitting By Content-Footnote-1223795 -Node: Multiple Line223835 -Ref: Multiple Line-Footnote-1229682 -Node: Getline229861 -Node: Plain Getline232077 -Node: Getline/Variable234172 -Node: Getline/File235319 -Node: Getline/Variable/File236660 -Ref: Getline/Variable/File-Footnote-1238259 -Node: Getline/Pipe238346 -Node: Getline/Variable/Pipe241045 -Node: Getline/Coprocess242152 -Node: Getline/Variable/Coprocess243404 -Node: Getline Notes244141 -Node: Getline Summary246928 -Ref: table-getline-variants247336 -Node: Read Timeout248248 -Ref: Read Timeout-Footnote-1251987 -Node: Command line directories252045 -Node: Printing252675 -Node: Print254306 -Node: Print Examples255643 -Node: Output Separators258427 -Node: OFMT260443 -Node: Printf261801 -Node: Basic Printf262707 -Node: Control Letters264246 -Node: Format Modifiers268066 -Node: Printf Examples274075 -Node: Redirection276787 -Node: Special Files283761 -Node: Special FD284294 -Ref: Special FD-Footnote-1287919 -Node: Special Network287993 -Node: Special Caveats288843 -Node: Close Files And Pipes289639 -Ref: Close Files And Pipes-Footnote-1296622 -Ref: Close Files And Pipes-Footnote-2296770 -Node: Expressions296920 -Node: Values298052 -Node: Constants298728 -Node: Scalar Constants299408 -Ref: Scalar Constants-Footnote-1300267 -Node: Nondecimal-numbers300449 -Node: Regexp Constants303449 -Node: Using Constant Regexps303924 -Node: Variables306979 -Node: Using Variables307634 -Node: Assignment Options309358 -Node: Conversion311233 -Ref: table-locale-affects316733 -Ref: Conversion-Footnote-1317357 -Node: All Operators317466 -Node: Arithmetic Ops318096 -Node: Concatenation320601 -Ref: Concatenation-Footnote-1323389 -Node: Assignment Ops323509 -Ref: table-assign-ops328497 -Node: Increment Ops329828 -Node: Truth Values and Conditions333262 -Node: Truth Values334345 -Node: Typing and Comparison335394 -Node: Variable Typing336187 -Ref: Variable Typing-Footnote-1340084 -Node: Comparison Operators340206 -Ref: table-relational-ops340616 -Node: POSIX String Comparison344164 -Ref: POSIX String Comparison-Footnote-1345120 -Node: Boolean Ops345258 -Ref: Boolean Ops-Footnote-1349328 -Node: Conditional Exp349419 -Node: Function Calls351151 -Node: Precedence354745 -Node: Locales358414 -Node: Patterns and Actions359503 -Node: Pattern Overview360557 -Node: Regexp Patterns362226 -Node: Expression Patterns362769 -Node: Ranges366550 -Node: BEGIN/END369654 -Node: Using BEGIN/END370416 -Ref: Using BEGIN/END-Footnote-1373152 -Node: I/O And BEGIN/END373258 -Node: BEGINFILE/ENDFILE375540 -Node: Empty378454 -Node: Using Shell Variables378771 -Node: Action Overview381056 -Node: Statements383413 -Node: If Statement385267 -Node: While Statement386766 -Node: Do Statement388810 -Node: For Statement389966 -Node: Switch Statement393118 -Node: Break Statement395272 -Node: Continue Statement397262 -Node: Next Statement399055 -Node: Nextfile Statement401445 -Node: Exit Statement404100 -Node: Built-in Variables406516 -Node: User-modified407611 -Ref: User-modified-Footnote-1415969 -Node: Auto-set416031 -Ref: Auto-set-Footnote-1429098 -Ref: Auto-set-Footnote-2429303 -Node: ARGC and ARGV429359 -Node: Arrays433213 -Node: Array Basics434718 -Node: Array Intro435544 -Node: Reference to Elements439861 -Node: Assigning Elements442131 -Node: Array Example442622 -Node: Scanning an Array444354 -Node: Controlling Scanning446668 -Ref: Controlling Scanning-Footnote-1451755 -Node: Delete452071 -Ref: Delete-Footnote-1454836 -Node: Numeric Array Subscripts454893 -Node: Uninitialized Subscripts457076 -Node: Multidimensional458703 -Node: Multiscanning461796 -Node: Arrays of Arrays463385 -Node: Functions468025 -Node: Built-in468844 -Node: Calling Built-in469922 -Node: Numeric Functions471910 -Ref: Numeric Functions-Footnote-1475744 -Ref: Numeric Functions-Footnote-2476101 -Ref: Numeric Functions-Footnote-3476149 -Node: String Functions476418 -Ref: String Functions-Footnote-1499421 -Ref: String Functions-Footnote-2499550 -Ref: String Functions-Footnote-3499798 -Node: Gory Details499885 -Ref: table-sub-escapes501564 -Ref: table-sub-posix-92502918 -Ref: table-sub-proposed504269 -Ref: table-posix-sub505623 -Ref: table-gensub-escapes507168 -Ref: Gory Details-Footnote-1508344 -Ref: Gory Details-Footnote-2508395 -Node: I/O Functions508546 -Ref: I/O Functions-Footnote-1515542 -Node: Time Functions515689 -Ref: Time Functions-Footnote-1526682 -Ref: Time Functions-Footnote-2526750 -Ref: Time Functions-Footnote-3526908 -Ref: Time Functions-Footnote-4527019 -Ref: Time Functions-Footnote-5527131 -Ref: Time Functions-Footnote-6527358 -Node: Bitwise Functions527624 -Ref: table-bitwise-ops528186 -Ref: Bitwise Functions-Footnote-1532431 -Node: Type Functions532615 -Node: I18N Functions533766 -Node: User-defined535418 -Node: Definition Syntax536222 -Ref: Definition Syntax-Footnote-1541136 -Node: Function Example541205 -Ref: Function Example-Footnote-1543854 -Node: Function Caveats543876 -Node: Calling A Function544394 -Node: Variable Scope545349 -Node: Pass By Value/Reference548312 -Node: Return Statement551820 -Node: Dynamic Typing554801 -Node: Indirect Calls555732 -Node: Library Functions565419 -Ref: Library Functions-Footnote-1568932 -Ref: Library Functions-Footnote-2569075 -Node: Library Names569246 -Ref: Library Names-Footnote-1572719 -Ref: Library Names-Footnote-2572939 -Node: General Functions573025 -Node: Strtonum Function574053 -Node: Assert Function576983 -Node: Round Function580309 -Node: Cliff Random Function581850 -Node: Ordinal Functions582866 -Ref: Ordinal Functions-Footnote-1585943 -Ref: Ordinal Functions-Footnote-2586195 -Node: Join Function586406 -Ref: Join Function-Footnote-1588177 -Node: Getlocaltime Function588377 -Node: Readfile Function592118 -Node: Data File Management593957 -Node: Filetrans Function594589 -Node: Rewind Function598658 -Node: File Checking600045 -Node: Empty Files601139 -Node: Ignoring Assigns603369 -Node: Getopt Function604923 -Ref: Getopt Function-Footnote-1616226 -Node: Passwd Functions616429 -Ref: Passwd Functions-Footnote-1625407 -Node: Group Functions625495 -Node: Walking Arrays633579 -Node: Sample Programs635715 -Node: Running Examples636389 -Node: Clones637117 -Node: Cut Program638341 -Node: Egrep Program648192 -Ref: Egrep Program-Footnote-1655965 -Node: Id Program656075 -Node: Split Program659724 -Ref: Split Program-Footnote-1663243 -Node: Tee Program663371 -Node: Uniq Program666174 -Node: Wc Program673603 -Ref: Wc Program-Footnote-1677869 -Ref: Wc Program-Footnote-2678069 -Node: Miscellaneous Programs678161 -Node: Dupword Program679349 -Node: Alarm Program681380 -Node: Translate Program686187 -Ref: Translate Program-Footnote-1690574 -Ref: Translate Program-Footnote-2690822 -Node: Labels Program690956 -Ref: Labels Program-Footnote-1694327 -Node: Word Sorting694411 -Node: History Sorting698295 -Node: Extract Program700134 -Ref: Extract Program-Footnote-1707637 -Node: Simple Sed707765 -Node: Igawk Program710827 -Ref: Igawk Program-Footnote-1725998 -Ref: Igawk Program-Footnote-2726199 -Node: Anagram Program726337 -Node: Signature Program729405 -Node: Advanced Features730505 -Node: Nondecimal Data732391 -Node: Array Sorting733974 -Node: Controlling Array Traversal734671 -Node: Array Sorting Functions742955 -Ref: Array Sorting Functions-Footnote-1746824 -Node: Two-way I/O747018 -Ref: Two-way I/O-Footnote-1752450 -Node: TCP/IP Networking752532 -Node: Profiling755376 -Node: Internationalization762879 -Node: I18N and L10N764304 -Node: Explaining gettext764990 -Ref: Explaining gettext-Footnote-1770058 -Ref: Explaining gettext-Footnote-2770242 -Node: Programmer i18n770407 -Node: Translator i18n774634 -Node: String Extraction775428 -Ref: String Extraction-Footnote-1776389 -Node: Printf Ordering776475 -Ref: Printf Ordering-Footnote-1779257 -Node: I18N Portability779321 -Ref: I18N Portability-Footnote-1781770 -Node: I18N Example781833 -Ref: I18N Example-Footnote-1784471 -Node: Gawk I18N784543 -Node: Debugger785164 -Node: Debugging786135 -Node: Debugging Concepts786568 -Node: Debugging Terms788424 -Node: Awk Debugging791021 -Node: Sample Debugging Session791913 -Node: Debugger Invocation792433 -Node: Finding The Bug793766 -Node: List of Debugger Commands800253 -Node: Breakpoint Control801587 -Node: Debugger Execution Control805251 -Node: Viewing And Changing Data808611 -Node: Execution Stack811967 -Node: Debugger Info813434 -Node: Miscellaneous Debugger Commands817428 -Node: Readline Support822606 -Node: Limitations823437 -Node: Arbitrary Precision Arithmetic825689 -Ref: Arbitrary Precision Arithmetic-Footnote-1827338 -Node: General Arithmetic827486 -Node: Floating Point Issues829206 -Node: String Conversion Precision830087 -Ref: String Conversion Precision-Footnote-1831792 -Node: Unexpected Results831901 -Node: POSIX Floating Point Problems834054 -Ref: POSIX Floating Point Problems-Footnote-1837879 -Node: Integer Programming837917 -Node: Floating-point Programming839656 -Ref: Floating-point Programming-Footnote-1845987 -Ref: Floating-point Programming-Footnote-2846257 -Node: Floating-point Representation846521 -Node: Floating-point Context847686 -Ref: table-ieee-formats848525 -Node: Rounding Mode849909 -Ref: table-rounding-modes850388 -Ref: Rounding Mode-Footnote-1853403 -Node: Gawk and MPFR853582 -Node: Arbitrary Precision Floats854991 -Ref: Arbitrary Precision Floats-Footnote-1857434 -Node: Setting Precision857750 -Ref: table-predefined-precision-strings858436 -Node: Setting Rounding Mode860581 -Ref: table-gawk-rounding-modes860985 -Node: Floating-point Constants862172 -Node: Changing Precision863601 -Ref: Changing Precision-Footnote-1864998 -Node: Exact Arithmetic865172 -Node: Arbitrary Precision Integers868310 -Ref: Arbitrary Precision Integers-Footnote-1871325 -Node: Dynamic Extensions871472 -Node: Extension Intro872930 -Node: Plugin License874195 -Node: Extension Mechanism Outline874880 -Ref: load-extension875297 -Ref: load-new-function876775 -Ref: call-new-function877770 -Node: Extension API Description879785 -Node: Extension API Functions Introduction881072 -Node: General Data Types885999 -Ref: General Data Types-Footnote-1891694 -Node: Requesting Values891993 -Ref: table-value-types-returned892730 -Node: Memory Allocation Functions893684 -Ref: Memory Allocation Functions-Footnote-1896430 -Node: Constructor Functions896526 -Node: Registration Functions898284 -Node: Extension Functions898969 -Node: Exit Callback Functions901271 -Node: Extension Version String902520 -Node: Input Parsers903170 -Node: Output Wrappers912927 -Node: Two-way processors917437 -Node: Printing Messages919645 -Ref: Printing Messages-Footnote-1920722 -Node: Updating `ERRNO'920874 -Node: Accessing Parameters921613 -Node: Symbol Table Access922843 -Node: Symbol table by name923357 -Node: Symbol table by cookie925333 -Ref: Symbol table by cookie-Footnote-1929465 -Node: Cached values929528 -Ref: Cached values-Footnote-1933018 -Node: Array Manipulation933109 -Ref: Array Manipulation-Footnote-1934207 -Node: Array Data Types934246 -Ref: Array Data Types-Footnote-1936949 -Node: Array Functions937041 -Node: Flattening Arrays940877 -Node: Creating Arrays947729 -Node: Extension API Variables952454 -Node: Extension Versioning953090 -Node: Extension API Informational Variables954991 -Node: Extension API Boilerplate956077 -Node: Finding Extensions959881 -Node: Extension Example960441 -Node: Internal File Description961171 -Node: Internal File Ops965262 -Ref: Internal File Ops-Footnote-1976771 -Node: Using Internal File Ops976911 -Ref: Using Internal File Ops-Footnote-1979258 -Node: Extension Samples979524 -Node: Extension Sample File Functions981048 -Node: Extension Sample Fnmatch989535 -Node: Extension Sample Fork991304 -Node: Extension Sample Inplace992517 -Node: Extension Sample Ord994295 -Node: Extension Sample Readdir995131 -Node: Extension Sample Revout996663 -Node: Extension Sample Rev2way997256 -Node: Extension Sample Read write array997946 -Node: Extension Sample Readfile999829 -Node: Extension Sample API Tests1000929 -Node: Extension Sample Time1001454 -Node: gawkextlib1002818 -Node: Language History1005599 -Node: V7/SVR3.11007192 -Node: SVR41009512 -Node: POSIX1010954 -Node: BTL1012340 -Node: POSIX/GNU1013074 -Node: Feature History1018673 -Node: Common Extensions1031649 -Node: Ranges and Locales1032961 -Ref: Ranges and Locales-Footnote-11037578 -Ref: Ranges and Locales-Footnote-21037605 -Ref: Ranges and Locales-Footnote-31037839 -Node: Contributors1038060 -Node: Installation1043441 -Node: Gawk Distribution1044335 -Node: Getting1044819 -Node: Extracting1045645 -Node: Distribution contents1047337 -Node: Unix Installation1053058 -Node: Quick Installation1053675 -Node: Additional Configuration Options1056121 -Node: Configuration Philosophy1057857 -Node: Non-Unix Installation1060211 -Node: PC Installation1060669 -Node: PC Binary Installation1061968 -Node: PC Compiling1063816 -Node: PC Testing1066760 -Node: PC Using1067936 -Node: Cygwin1072104 -Node: MSYS1072913 -Node: VMS Installation1073427 -Node: VMS Compilation1074223 -Ref: VMS Compilation-Footnote-11075475 -Node: VMS Dynamic Extensions1075533 -Node: VMS Installation Details1076906 -Node: VMS Running1079157 -Node: VMS GNV1081991 -Node: VMS Old Gawk1082714 -Node: Bugs1083184 -Node: Other Versions1087102 -Node: Notes1093186 -Node: Compatibility Mode1093986 -Node: Additions1094769 -Node: Accessing The Source1095696 -Node: Adding Code1097136 -Node: New Ports1103181 -Node: Derived Files1107316 -Ref: Derived Files-Footnote-11112637 -Ref: Derived Files-Footnote-21112671 -Ref: Derived Files-Footnote-31113271 -Node: Future Extensions1113369 -Node: Implementation Limitations1113952 -Node: Extension Design1115204 -Node: Old Extension Problems1116358 -Ref: Old Extension Problems-Footnote-11117866 -Node: Extension New Mechanism Goals1117923 -Ref: Extension New Mechanism Goals-Footnote-11121288 -Node: Extension Other Design Decisions1121474 -Node: Extension Future Growth1123580 -Node: Old Extension Mechanism1124416 -Node: Basic Concepts1126156 -Node: Basic High Level1126837 -Ref: figure-general-flow1127109 -Ref: figure-process-flow1127708 -Ref: Basic High Level-Footnote-11130937 -Node: Basic Data Typing1131122 -Node: Glossary1134477 -Node: Copying1159708 -Node: GNU Free Documentation License1197264 -Node: Index1222400 +Node: Foreword40832 +Node: Preface45177 +Ref: Preface-Footnote-148310 +Ref: Preface-Footnote-248417 +Node: History48649 +Node: Names51023 +Ref: Names-Footnote-152487 +Node: This Manual52560 +Ref: This Manual-Footnote-158334 +Node: Conventions58434 +Node: Manual History60590 +Ref: Manual History-Footnote-164020 +Ref: Manual History-Footnote-264061 +Node: How To Contribute64135 +Node: Acknowledgments65374 +Node: Getting Started69568 +Node: Running gawk71947 +Node: One-shot73137 +Node: Read Terminal74362 +Ref: Read Terminal-Footnote-176012 +Ref: Read Terminal-Footnote-276288 +Node: Long76459 +Node: Executable Scripts77835 +Ref: Executable Scripts-Footnote-179668 +Ref: Executable Scripts-Footnote-279770 +Node: Comments80317 +Node: Quoting82784 +Node: DOS Quoting88100 +Node: Sample Data Files88775 +Node: Very Simple91290 +Node: Two Rules95940 +Node: More Complex97835 +Ref: More Complex-Footnote-1100767 +Node: Statements/Lines100852 +Ref: Statements/Lines-Footnote-1105307 +Node: Other Features105572 +Node: When106500 +Node: Invoking Gawk108648 +Node: Command Line110111 +Node: Options110894 +Ref: Options-Footnote-1126706 +Node: Other Arguments126731 +Node: Naming Standard Input129393 +Node: Environment Variables130487 +Node: AWKPATH Variable131045 +Ref: AWKPATH Variable-Footnote-1133823 +Ref: AWKPATH Variable-Footnote-2133868 +Node: AWKLIBPATH Variable134128 +Node: Other Environment Variables134887 +Node: Exit Status138052 +Node: Include Files138727 +Node: Loading Shared Libraries142305 +Node: Obsolete143688 +Node: Undocumented144385 +Node: Regexp144627 +Node: Regexp Usage146016 +Node: Escape Sequences148049 +Node: Regexp Operators153716 +Ref: Regexp Operators-Footnote-1161196 +Ref: Regexp Operators-Footnote-2161343 +Node: Bracket Expressions161441 +Ref: table-char-classes163331 +Node: GNU Regexp Operators165854 +Node: Case-sensitivity169577 +Ref: Case-sensitivity-Footnote-1172469 +Ref: Case-sensitivity-Footnote-2172704 +Node: Leftmost Longest172812 +Node: Computed Regexps174013 +Node: Reading Files177362 +Node: Records179364 +Node: awk split records180099 +Node: gawk split records184957 +Ref: gawk split records-Footnote-1189478 +Node: Fields189515 +Ref: Fields-Footnote-1192479 +Node: Nonconstant Fields192565 +Ref: Nonconstant Fields-Footnote-1194795 +Node: Changing Fields194997 +Node: Field Separators200951 +Node: Default Field Splitting203653 +Node: Regexp Field Splitting204770 +Node: Single Character Fields208111 +Node: Command Line Field Separator209170 +Node: Full Line Fields212512 +Ref: Full Line Fields-Footnote-1213020 +Node: Field Splitting Summary213066 +Ref: Field Splitting Summary-Footnote-1216165 +Node: Constant Size216266 +Node: Splitting By Content220873 +Ref: Splitting By Content-Footnote-1224623 +Node: Multiple Line224663 +Ref: Multiple Line-Footnote-1230519 +Node: Getline230698 +Node: Plain Getline232914 +Node: Getline/Variable235009 +Node: Getline/File236156 +Node: Getline/Variable/File237540 +Ref: Getline/Variable/File-Footnote-1239139 +Node: Getline/Pipe239226 +Node: Getline/Variable/Pipe241925 +Node: Getline/Coprocess243032 +Node: Getline/Variable/Coprocess244284 +Node: Getline Notes245021 +Node: Getline Summary247825 +Ref: table-getline-variants248233 +Node: Read Timeout249145 +Ref: Read Timeout-Footnote-1252972 +Node: Command line directories253030 +Node: Printing253912 +Node: Print255543 +Node: Print Examples256884 +Node: Output Separators259663 +Node: OFMT261679 +Node: Printf263037 +Node: Basic Printf263943 +Node: Control Letters265482 +Node: Format Modifiers269336 +Node: Printf Examples275363 +Node: Redirection278070 +Node: Special Files285042 +Node: Special FD285575 +Ref: Special FD-Footnote-1289199 +Node: Special Network289273 +Node: Special Caveats290123 +Node: Close Files And Pipes290919 +Ref: Close Files And Pipes-Footnote-1298057 +Ref: Close Files And Pipes-Footnote-2298205 +Node: Expressions298355 +Node: Values299487 +Node: Constants300163 +Node: Scalar Constants300843 +Ref: Scalar Constants-Footnote-1301702 +Node: Nondecimal-numbers301884 +Node: Regexp Constants304884 +Node: Using Constant Regexps305359 +Node: Variables308414 +Node: Using Variables309069 +Node: Assignment Options310793 +Node: Conversion312668 +Ref: table-locale-affects318168 +Ref: Conversion-Footnote-1318792 +Node: All Operators318901 +Node: Arithmetic Ops319531 +Node: Concatenation322036 +Ref: Concatenation-Footnote-1324824 +Node: Assignment Ops324944 +Ref: table-assign-ops329932 +Node: Increment Ops331263 +Node: Truth Values and Conditions334697 +Node: Truth Values335780 +Node: Typing and Comparison336829 +Node: Variable Typing337622 +Ref: Variable Typing-Footnote-1341519 +Node: Comparison Operators341641 +Ref: table-relational-ops342051 +Node: POSIX String Comparison345599 +Ref: POSIX String Comparison-Footnote-1346555 +Node: Boolean Ops346693 +Ref: Boolean Ops-Footnote-1350763 +Node: Conditional Exp350854 +Node: Function Calls352586 +Node: Precedence356180 +Node: Locales359849 +Node: Patterns and Actions360938 +Node: Pattern Overview361992 +Node: Regexp Patterns363661 +Node: Expression Patterns364204 +Node: Ranges367985 +Node: BEGIN/END371089 +Node: Using BEGIN/END371851 +Ref: Using BEGIN/END-Footnote-1374587 +Node: I/O And BEGIN/END374693 +Node: BEGINFILE/ENDFILE376975 +Node: Empty379889 +Node: Using Shell Variables380206 +Node: Action Overview382491 +Node: Statements384848 +Node: If Statement386702 +Node: While Statement388201 +Node: Do Statement390245 +Node: For Statement391401 +Node: Switch Statement394553 +Node: Break Statement396707 +Node: Continue Statement398697 +Node: Next Statement400490 +Node: Nextfile Statement402880 +Node: Exit Statement405535 +Node: Built-in Variables407951 +Node: User-modified409046 +Ref: User-modified-Footnote-1417404 +Node: Auto-set417466 +Ref: Auto-set-Footnote-1430533 +Ref: Auto-set-Footnote-2430738 +Node: ARGC and ARGV430794 +Node: Arrays434648 +Node: Array Basics436153 +Node: Array Intro436979 +Node: Reference to Elements441296 +Node: Assigning Elements443566 +Node: Array Example444057 +Node: Scanning an Array445789 +Node: Controlling Scanning448103 +Ref: Controlling Scanning-Footnote-1453190 +Node: Delete453506 +Ref: Delete-Footnote-1456271 +Node: Numeric Array Subscripts456328 +Node: Uninitialized Subscripts458511 +Node: Multidimensional460138 +Node: Multiscanning463231 +Node: Arrays of Arrays464820 +Node: Functions469460 +Node: Built-in470279 +Node: Calling Built-in471357 +Node: Numeric Functions473345 +Ref: Numeric Functions-Footnote-1477179 +Ref: Numeric Functions-Footnote-2477536 +Ref: Numeric Functions-Footnote-3477584 +Node: String Functions477853 +Ref: String Functions-Footnote-1500856 +Ref: String Functions-Footnote-2500985 +Ref: String Functions-Footnote-3501233 +Node: Gory Details501320 +Ref: table-sub-escapes502999 +Ref: table-sub-posix-92504353 +Ref: table-sub-proposed505704 +Ref: table-posix-sub507058 +Ref: table-gensub-escapes508603 +Ref: Gory Details-Footnote-1509779 +Ref: Gory Details-Footnote-2509830 +Node: I/O Functions509981 +Ref: I/O Functions-Footnote-1516977 +Node: Time Functions517124 +Ref: Time Functions-Footnote-1528117 +Ref: Time Functions-Footnote-2528185 +Ref: Time Functions-Footnote-3528343 +Ref: Time Functions-Footnote-4528454 +Ref: Time Functions-Footnote-5528566 +Ref: Time Functions-Footnote-6528793 +Node: Bitwise Functions529059 +Ref: table-bitwise-ops529621 +Ref: Bitwise Functions-Footnote-1533866 +Node: Type Functions534050 +Node: I18N Functions535201 +Node: User-defined536853 +Node: Definition Syntax537657 +Ref: Definition Syntax-Footnote-1542571 +Node: Function Example542640 +Ref: Function Example-Footnote-1545289 +Node: Function Caveats545311 +Node: Calling A Function545829 +Node: Variable Scope546784 +Node: Pass By Value/Reference549747 +Node: Return Statement553255 +Node: Dynamic Typing556236 +Node: Indirect Calls557167 +Node: Library Functions566854 +Ref: Library Functions-Footnote-1570367 +Ref: Library Functions-Footnote-2570510 +Node: Library Names570681 +Ref: Library Names-Footnote-1574154 +Ref: Library Names-Footnote-2574374 +Node: General Functions574460 +Node: Strtonum Function575488 +Node: Assert Function578418 +Node: Round Function581744 +Node: Cliff Random Function583285 +Node: Ordinal Functions584301 +Ref: Ordinal Functions-Footnote-1587378 +Ref: Ordinal Functions-Footnote-2587630 +Node: Join Function587841 +Ref: Join Function-Footnote-1589612 +Node: Getlocaltime Function589812 +Node: Readfile Function593553 +Node: Data File Management595392 +Node: Filetrans Function596024 +Node: Rewind Function600093 +Node: File Checking601480 +Node: Empty Files602574 +Node: Ignoring Assigns604804 +Node: Getopt Function606358 +Ref: Getopt Function-Footnote-1617661 +Node: Passwd Functions617864 +Ref: Passwd Functions-Footnote-1626842 +Node: Group Functions626930 +Node: Walking Arrays635014 +Node: Sample Programs637150 +Node: Running Examples637824 +Node: Clones638552 +Node: Cut Program639776 +Node: Egrep Program649627 +Ref: Egrep Program-Footnote-1657400 +Node: Id Program657510 +Node: Split Program661159 +Ref: Split Program-Footnote-1664678 +Node: Tee Program664806 +Node: Uniq Program667609 +Node: Wc Program675038 +Ref: Wc Program-Footnote-1679304 +Ref: Wc Program-Footnote-2679504 +Node: Miscellaneous Programs679596 +Node: Dupword Program680784 +Node: Alarm Program682815 +Node: Translate Program687622 +Ref: Translate Program-Footnote-1692009 +Ref: Translate Program-Footnote-2692257 +Node: Labels Program692391 +Ref: Labels Program-Footnote-1695762 +Node: Word Sorting695846 +Node: History Sorting699730 +Node: Extract Program701569 +Ref: Extract Program-Footnote-1709072 +Node: Simple Sed709200 +Node: Igawk Program712262 +Ref: Igawk Program-Footnote-1727433 +Ref: Igawk Program-Footnote-2727634 +Node: Anagram Program727772 +Node: Signature Program730840 +Node: Advanced Features731940 +Node: Nondecimal Data733826 +Node: Array Sorting735409 +Node: Controlling Array Traversal736106 +Node: Array Sorting Functions744390 +Ref: Array Sorting Functions-Footnote-1748259 +Node: Two-way I/O748453 +Ref: Two-way I/O-Footnote-1753885 +Node: TCP/IP Networking753967 +Node: Profiling756811 +Node: Internationalization764314 +Node: I18N and L10N765739 +Node: Explaining gettext766425 +Ref: Explaining gettext-Footnote-1771493 +Ref: Explaining gettext-Footnote-2771677 +Node: Programmer i18n771842 +Node: Translator i18n776069 +Node: String Extraction776863 +Ref: String Extraction-Footnote-1777824 +Node: Printf Ordering777910 +Ref: Printf Ordering-Footnote-1780692 +Node: I18N Portability780756 +Ref: I18N Portability-Footnote-1783205 +Node: I18N Example783268 +Ref: I18N Example-Footnote-1785906 +Node: Gawk I18N785978 +Node: Debugger786599 +Node: Debugging787570 +Node: Debugging Concepts788003 +Node: Debugging Terms789859 +Node: Awk Debugging792456 +Node: Sample Debugging Session793348 +Node: Debugger Invocation793868 +Node: Finding The Bug795201 +Node: List of Debugger Commands801688 +Node: Breakpoint Control803022 +Node: Debugger Execution Control806686 +Node: Viewing And Changing Data810046 +Node: Execution Stack813402 +Node: Debugger Info814869 +Node: Miscellaneous Debugger Commands818863 +Node: Readline Support824041 +Node: Limitations824872 +Node: Arbitrary Precision Arithmetic827124 +Ref: Arbitrary Precision Arithmetic-Footnote-1828773 +Node: General Arithmetic828921 +Node: Floating Point Issues830641 +Node: String Conversion Precision831522 +Ref: String Conversion Precision-Footnote-1833227 +Node: Unexpected Results833336 +Node: POSIX Floating Point Problems835489 +Ref: POSIX Floating Point Problems-Footnote-1839314 +Node: Integer Programming839352 +Node: Floating-point Programming841091 +Ref: Floating-point Programming-Footnote-1847422 +Ref: Floating-point Programming-Footnote-2847692 +Node: Floating-point Representation847956 +Node: Floating-point Context849121 +Ref: table-ieee-formats849960 +Node: Rounding Mode851344 +Ref: table-rounding-modes851823 +Ref: Rounding Mode-Footnote-1854838 +Node: Gawk and MPFR855017 +Node: Arbitrary Precision Floats856426 +Ref: Arbitrary Precision Floats-Footnote-1858869 +Node: Setting Precision859185 +Ref: table-predefined-precision-strings859871 +Node: Setting Rounding Mode862016 +Ref: table-gawk-rounding-modes862420 +Node: Floating-point Constants863607 +Node: Changing Precision865036 +Ref: Changing Precision-Footnote-1866433 +Node: Exact Arithmetic866607 +Node: Arbitrary Precision Integers869745 +Ref: Arbitrary Precision Integers-Footnote-1872760 +Node: Dynamic Extensions872907 +Node: Extension Intro874365 +Node: Plugin License875630 +Node: Extension Mechanism Outline876315 +Ref: load-extension876732 +Ref: load-new-function878210 +Ref: call-new-function879205 +Node: Extension API Description881220 +Node: Extension API Functions Introduction882507 +Node: General Data Types887434 +Ref: General Data Types-Footnote-1893129 +Node: Requesting Values893428 +Ref: table-value-types-returned894165 +Node: Memory Allocation Functions895119 +Ref: Memory Allocation Functions-Footnote-1897865 +Node: Constructor Functions897961 +Node: Registration Functions899719 +Node: Extension Functions900404 +Node: Exit Callback Functions902706 +Node: Extension Version String903955 +Node: Input Parsers904605 +Node: Output Wrappers914362 +Node: Two-way processors918872 +Node: Printing Messages921080 +Ref: Printing Messages-Footnote-1922157 +Node: Updating `ERRNO'922309 +Node: Accessing Parameters923048 +Node: Symbol Table Access924278 +Node: Symbol table by name924792 +Node: Symbol table by cookie926768 +Ref: Symbol table by cookie-Footnote-1930900 +Node: Cached values930963 +Ref: Cached values-Footnote-1934453 +Node: Array Manipulation934544 +Ref: Array Manipulation-Footnote-1935642 +Node: Array Data Types935681 +Ref: Array Data Types-Footnote-1938384 +Node: Array Functions938476 +Node: Flattening Arrays942312 +Node: Creating Arrays949164 +Node: Extension API Variables953889 +Node: Extension Versioning954525 +Node: Extension API Informational Variables956426 +Node: Extension API Boilerplate957512 +Node: Finding Extensions961316 +Node: Extension Example961876 +Node: Internal File Description962606 +Node: Internal File Ops966697 +Ref: Internal File Ops-Footnote-1978206 +Node: Using Internal File Ops978346 +Ref: Using Internal File Ops-Footnote-1980693 +Node: Extension Samples980959 +Node: Extension Sample File Functions982483 +Node: Extension Sample Fnmatch990970 +Node: Extension Sample Fork992739 +Node: Extension Sample Inplace993952 +Node: Extension Sample Ord995730 +Node: Extension Sample Readdir996566 +Node: Extension Sample Revout998098 +Node: Extension Sample Rev2way998691 +Node: Extension Sample Read write array999381 +Node: Extension Sample Readfile1001264 +Node: Extension Sample API Tests1002364 +Node: Extension Sample Time1002889 +Node: gawkextlib1004253 +Node: Language History1007034 +Node: V7/SVR3.11008627 +Node: SVR41010947 +Node: POSIX1012389 +Node: BTL1013775 +Node: POSIX/GNU1014509 +Node: Feature History1020108 +Node: Common Extensions1033084 +Node: Ranges and Locales1034396 +Ref: Ranges and Locales-Footnote-11039013 +Ref: Ranges and Locales-Footnote-21039040 +Ref: Ranges and Locales-Footnote-31039274 +Node: Contributors1039495 +Node: Installation1044876 +Node: Gawk Distribution1045770 +Node: Getting1046254 +Node: Extracting1047080 +Node: Distribution contents1048772 +Node: Unix Installation1054493 +Node: Quick Installation1055110 +Node: Additional Configuration Options1057556 +Node: Configuration Philosophy1059292 +Node: Non-Unix Installation1061646 +Node: PC Installation1062104 +Node: PC Binary Installation1063403 +Node: PC Compiling1065251 +Node: PC Testing1068195 +Node: PC Using1069371 +Node: Cygwin1073539 +Node: MSYS1074348 +Node: VMS Installation1074862 +Node: VMS Compilation1075658 +Ref: VMS Compilation-Footnote-11076910 +Node: VMS Dynamic Extensions1076968 +Node: VMS Installation Details1078341 +Node: VMS Running1080592 +Node: VMS GNV1083426 +Node: VMS Old Gawk1084149 +Node: Bugs1084619 +Node: Other Versions1088537 +Node: Notes1094621 +Node: Compatibility Mode1095421 +Node: Additions1096204 +Node: Accessing The Source1097131 +Node: Adding Code1098571 +Node: New Ports1104616 +Node: Derived Files1108751 +Ref: Derived Files-Footnote-11114072 +Ref: Derived Files-Footnote-21114106 +Ref: Derived Files-Footnote-31114706 +Node: Future Extensions1114804 +Node: Implementation Limitations1115387 +Node: Extension Design1116639 +Node: Old Extension Problems1117793 +Ref: Old Extension Problems-Footnote-11119301 +Node: Extension New Mechanism Goals1119358 +Ref: Extension New Mechanism Goals-Footnote-11122723 +Node: Extension Other Design Decisions1122909 +Node: Extension Future Growth1125015 +Node: Old Extension Mechanism1125851 +Node: Basic Concepts1127591 +Node: Basic High Level1128272 +Ref: figure-general-flow1128544 +Ref: figure-process-flow1129143 +Ref: Basic High Level-Footnote-11132372 +Node: Basic Data Typing1132557 +Node: Glossary1135912 +Node: Copying1161143 +Node: GNU Free Documentation License1198699 +Node: Index1223835  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 872263d4..24cd006b 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -947,15 +947,14 @@ particular records in a file and perform operations upon them. @c dedication for Info file @ifinfo -@center To Miriam, for making me complete. +To my parents, for their love, and for the wonderful +example they set for me. @sp 1 -@center To Chana, for the joy you bring us. +To my wife Miriam, for making me complete. +Thank you for building your life together with me. @sp 1 -@center To Rivka, for the exponential increase. -@sp 1 -@center To Nachum, for the added dimension. -@sp 1 -@center To Malka, for the new beginning. +To our children Chana, Rivka, Nachum and Malka, +for enrichening our lives in innumerable ways. @end ifinfo @summarycontents @@ -4374,7 +4373,6 @@ that can be loaded with either @code{@@load} or the @option{-l} option. @node Obsolete @section Obsolete Options and/or Features -@cindex features, advanced, See advanced features @cindex options, deprecated @cindex features, deprecated @cindex obsolete features @@ -5814,6 +5812,14 @@ file is started. Another built-in variable, @code{NR}, records the total number of input records read so far from all data files. It starts at zero, but is never automatically reset to zero. +@menu +* awk split records:: How standard @command{awk} splits records. +* gawk split records:: How @command{gawk} splits records. +@end menu + +@node awk split records +@subsection Record Splitting With Standard @command{awk} + @cindex separators, for records @cindex record separators Records are separated by a character called the @dfn{record separator}. @@ -5977,6 +5983,9 @@ After the end of the record has been determined, @command{gawk} sets the variable @code{RT} to the text in the input that matched @code{RS}. +@node gawk split records +@subsection Record Splitting With @command{gawk} + @cindex common extensions, @code{RS} as a regexp @cindex extensions, common@comma{} @code{RS} as a regexp When using @command{gawk}, @@ -6060,7 +6069,6 @@ single record. The only way to make this happen is to give @code{RS} a value that you know doesn't occur in the input file. This is hard to do in a general way, such that a program always works for arbitrary input files. -@c can you say `understatement' boys and girls? You might think that for text files, the @sc{nul} character, which consists of a character with all bits equal to zero, is a good @@ -6073,6 +6081,8 @@ BEGIN @{ RS = "\0" @} # whole file becomes one record? @cindex differences in @command{awk} and @command{gawk}, strings, storing @command{gawk} in fact accepts this, and uses the @sc{nul} character for the record separator. +This works for certain special files, such as @file{/proc/environ} on +GNU/Linux systems, where the @sc{nul} character is in fact the record separator. However, this usage is @emph{not} portable to most other @command{awk} implementations. @@ -6089,11 +6099,9 @@ character as a record separator. However, this is a special case: @cindex records, treating files as @cindex treating files, as single records -The best way to treat a whole file as a single record is to -simply read the file in, one record at a time, concatenating each -record onto the end of the previous ones. - -@c @strong{FIXME}: Using @sc{nul} is good for @file{/proc/environ} etc. +@xref{Readfile Function}, for an interesting, portable way to read +whole files. If you are using @command{gawk}, see @ref{Extension Sample +Readfile}, for another option. @docbook @@ -6111,7 +6119,6 @@ single record. The only way to make this happen is to give @code{RS} a value that you know doesn't occur in the input file. This is hard to do in a general way, such that a program always works for arbitrary input files. -@c can you say `understatement' boys and girls? You might think that for text files, the @sc{nul} character, which consists of a character with all bits equal to zero, is a good @@ -6124,6 +6131,8 @@ BEGIN @{ RS = "\0" @} # whole file becomes one record? @cindex differences in @command{awk} and @command{gawk}, strings, storing @command{gawk} in fact accepts this, and uses the @sc{nul} character for the record separator. +This works for certain special files, such as @file{/proc/environ} on +GNU/Linux systems, where the @sc{nul} character is in fact the record separator. However, this usage is @emph{not} portable to most other @command{awk} implementations. @@ -6140,11 +6149,9 @@ character as a record separator. However, this is a special case: @cindex records, treating files as @cindex treating files, as single records -The best way to treat a whole file as a single record is to -simply read the file in, one record at a time, concatenating each -record onto the end of the previous ones. - -@c @strong{FIXME}: Using @sc{nul} is good for @file{/proc/environ} etc. +@xref{Readfile Function}, for an interesting, portable way to read +whole files. If you are using @command{gawk}, see @ref{Extension Sample +Readfile}, for another option. @end cartouche @end ifnotdocbook @c ENDOFRANGE inspl @@ -6181,7 +6188,7 @@ 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 -A dollar-sign (@samp{$}) is used +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. @@ -6212,7 +6219,7 @@ 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 -a special case: it represents the whole input record +a special case: it represents the whole input record. Use it when you are not interested in specific fields. Here are some more examples: @@ -6248,7 +6255,7 @@ $ @kbd{awk '/li/ @{ print $1, $NF @}' mail-list} @cindex fields, numbers @cindex field numbers -The number of a field does not need to be a constant. Any expression in +A field number need not be a constant. Any expression in the @command{awk} language can be used after a @samp{$} to refer to a field. The value of the expression specifies the field number. If the value is a string, rather than a number, it is converted to a number. @@ -6275,7 +6282,11 @@ its value as the number of the field to print. The @samp{*} sign 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 in the field-number expression. This example, then, prints the +operator@footnote{A @dfn{binary operator}, such as @samp{*} for +multiplication, is one that takes two operands. The distinction +is required, since @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 @file{mail-list}. (All of the @command{awk} operators are listed, in order of decreasing precedence, in @@ -6325,7 +6336,7 @@ Then it prints the original and new values for field three. (Someone in the warehouse made a consistent mistake while inventorying the red boxes.) -For this to work, the text in field @code{$3} must make sense +For this to work, the text in @code{$3} must make sense as a number; the string of characters must be converted to a number for the computer to do arithmetic on it. The number resulting from the subtraction is converted back to a string of characters that @@ -6416,7 +6427,7 @@ $ @kbd{echo a b c d | awk '@{ OFS = ":"; $2 = ""} @end example @noindent -The field is still there; it just has an empty value, denoted by +The field is still there; it just has an empty value, delimited by the two colons between @samp{a} and @samp{c}. This example shows what happens if you create a new field: @@ -7234,7 +7245,7 @@ if (PROCINFO["FS"] == "FS") else if (PROCINFO["FS"] == "FIELDWIDTHS") @var{fixed-width field splitting} @dots{} else - @var{content-based field splitting} @dots{} (see next @value{SECTION}) + @var{content-based field splitting} @dots{} @ii{(see next @value{SECTION})} @end example This information is useful when writing a function @@ -7348,7 +7359,7 @@ the double quotes. @command{gawk} provides no way to deal with this. Since there is no formal specification for CSV data, there isn't much more to be done; the @code{FPAT} mechanism provides an elegant solution for the majority -of cases, and the @command{gawk} maintainer is satisfied with that. +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 @@ -7410,7 +7421,7 @@ the first nonblank line that follows---no matter how many blank lines appear in a row, they are considered one record separator. @cindex dark corner, multiline records -There is an important difference between @samp{RS = ""} and +However, there is an important difference between @samp{RS = ""} and @samp{RS = "\n\n+"}. In the first case, leading newlines in the input data file are ignored, and if a file ends without extra blank lines after the last record, the final newline is removed from the record. @@ -7563,7 +7574,19 @@ The @code{getline} command is used in several different ways and should The examples that follow the explanation of the @code{getline} command include material that has not been covered yet. Therefore, come back and study the @code{getline} command @emph{after} you have reviewed the -rest of this @value{DOCUMENT} and have a good knowledge of how @command{awk} works. +rest of +@ifinfo +this @value{DOCUMENT} +@end ifinfo +@ifhtml +this @value{DOCUMENT} +@end ifhtml +@ifnotinfo +@ifnothtml +Parts I and II +@end ifnothtml +@end ifnotinfo +and have a good knowledge of how @command{awk} works. @cindex @command{gawk}, @code{ERRNO} variable in @cindex @code{ERRNO} variable, with @command{getline} command @@ -7750,9 +7773,9 @@ changed, resulting in a new value of @code{NF}. According to POSIX, @samp{getline < @var{expression}} is ambiguous if @var{expression} contains unparenthesized operators other than @samp{$}; for example, @samp{getline < dir "/" file} is ambiguous -because the concatenation operator is not parenthesized. You should -write it as @samp{getline < (dir "/" file)} if you want your program -to be portable to all @command{awk} implementations. +because the concatenation operator (not discussed yet; @pxref{Concatenation}) +is not parenthesized. You should write it as @samp{getline < (dir "/" file)} if +you want your program to be portable to all @command{awk} implementations. @node Getline/Variable/File @subsection Using @code{getline} into a Variable from a File @@ -8015,7 +8038,7 @@ However, the new record is tested against any subsequent rules. @cindex @command{awk}, implementations, limits @cindex @command{gawk}, implementation issues, limits @item -Many @command{awk} implementations limit the number of pipelines that an @command{awk} +Some very old @command{awk} implementations limit the number of pipelines that an @command{awk} program may have open to just one. In @command{gawk}, there is no such limit. You can open as many pipelines (and coprocesses) as the underlying operating system permits. @@ -8054,6 +8077,7 @@ can cause @code{FILENAME} to be updated if they cause @command{awk} to start reading a new input file. @item +@cindex Moore, Duncan 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 @@ -8078,7 +8102,7 @@ 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}. -Other versions of @command{awk} only evaluate the expression once they +However, some versions of @command{awk} only evaluate the expression once they know that there is a string value to be assigned. Caveat Emptor. @end itemize @@ -8114,10 +8138,13 @@ Note: for each variant, @command{gawk} sets the @code{RT} built-in variable. @section Reading Input With A Timeout @cindex timeout, reading input +@cindex differences in @command{awk} and @command{gawk}, read timeouts +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, -pipe or two-way communication including, TCP/IP sockets. This can be done +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: +in the @code{PROCINFO} (@pxref{Auto-set}) array: @example PROCINFO["input_name", "READ_TIMEOUT"] = @var{timeout in milliseconds} @@ -8147,9 +8174,9 @@ while ((getline < "/dev/stdin") > 0) print $0 @end example -@command{gawk} will terminate the read operation if input does not -arrive after waiting for the timeout period, return failure -and set the @code{ERRNO} variable to an appropriate string value. +@command{gawk} terminates the read operation if input does not +arrive after waiting for the timeout period, returns failure +and sets the @code{ERRNO} variable to an appropriate string value. A negative or zero value for the timeout is the same as specifying no timeout at all. @@ -8221,15 +8248,25 @@ indefinitely until some other process opens it for writing. @cindex command line, directories on According to the POSIX standard, files named on the @command{awk} -command line must be text files. It is a fatal error if they are not. +command line must be text files; it is a fatal error if they are not. Most versions of @command{awk} treat a directory on the command line as a fatal error. By default, @command{gawk} produces a warning for a directory on the -command line, but otherwise ignores it. If either of the @option{--posix} +command line, but otherwise ignores it. This makes it easier to use +shell wildcards with your @command{awk} program: + +@example +$ @kbd{gawk -f whizprog.awk *} @ii{Directories could kill this progam} +@end example + +If either of the @option{--posix} or @option{--traditional} options is given, then @command{gawk} reverts to treating a directory on the command line as a fatal error. +@xref{Extension Sample Readdir}, for a way to treat directories +as usable data from an @command{awk} program. + @node Printing @chapter Printing Output @@ -8275,7 +8312,7 @@ and discusses the @code{close()} built-in function. @section The @code{print} Statement The @code{print} statement is used for producing output with simple, standardized -formatting. Specify only the strings or numbers to print, in a +formatting. You specify only the strings or numbers to print, in a list separated by commas. They are output, separated by single spaces, followed by a newline. The statement looks like this: @@ -8358,10 +8395,9 @@ $ @kbd{awk '@{ print $1 $2 @}' inventory-shipped} To someone unfamiliar with the @file{inventory-shipped} file, neither example's output makes much sense. A heading line at the beginning would make it clearer. Let's add some headings to our table of months -(@code{$1}) and green crates shipped (@code{$2}). We do this using the -@code{BEGIN} pattern -(@pxref{BEGIN/END}) -so that the headings are only printed once: +(@code{$1}) and green crates shipped (@code{$2}). We do this using +a @code{BEGIN} rule (@pxref{BEGIN/END}) so that the headings are only +printed once: @example awk 'BEGIN @{ print "Month Crates" @@ -8687,7 +8723,8 @@ infinity are formatted as @samp{-inf} or @samp{-infinity}, and positive infinity as @samp{inf} and @samp{infinity}. -The special ``not a number'' value formats as @samp{-nan} or @samp{nan}. +The special ``not a number'' value formats as @samp{-nan} or @samp{nan} +(@pxref{General Arithmetic}). @item @code{%F} Like @samp{%f} but the infinity and ``not a number'' values are spelled @@ -8830,7 +8867,7 @@ For example: $ @kbd{cat thousands.awk} @ii{Show source program} @print{} BEGIN @{ printf "%'d\n", 1234567 @} $ @kbd{LC_ALL=C gawk -f thousands.awk} -@print{} 1234567 @ii{Results in "C" locale} +@print{} 1234567 @ii{Results in} "C" @ii{locale} $ @kbd{LC_ALL=en_US.UTF-8 gawk -f thousands.awk} @print{} 1,234,567 @ii{Results in US English UTF locale} @end example @@ -8940,14 +8977,12 @@ This is not particularly easy to read but it does work. @c @cindex lint checks @cindex troubleshooting, fatal errors, @code{printf} format strings @cindex POSIX @command{awk}, @code{printf} format strings and -C programmers may be used to supplying additional -@samp{l}, @samp{L}, and @samp{h} -modifiers in @code{printf} 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 programmers may be used to supplying additional modifiers (@samp{h}, +@samp{j}, @samp{l}, @samp{L}, @samp{t}, and @samp{z}) in @code{printf} +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 @@ -8993,7 +9028,7 @@ they are last on their lines. They don't need to have spaces after them. The table could be made to look even nicer by adding headings to the -tops of the columns. This is done using the @code{BEGIN} pattern +tops of the columns. This is done using a @code{BEGIN} rule (@pxref{BEGIN/END}) so that the headers are only printed once, at the beginning of the @command{awk} program: @@ -9065,7 +9100,7 @@ commands, except that they are written inside the @command{awk} program. @cindex @code{printf} statement, See Also redirection@comma{} of output There are four forms of output redirection: output to a file, output appended to a file, output through a pipe to another command, and output -to a coprocess. They are all shown for the @code{print} statement, +to a coprocess. We show them all for the @code{print} statement, but they work identically for @code{printf}: @table @code @@ -9170,7 +9205,7 @@ This example also illustrates the use of a variable to represent a @var{file} or @var{command}---it is not necessary to always use a string constant. Using a variable is generally a good idea, because (if you mean to refer to that same file or command) -@command{awk} requires that the string value be spelled identically +@command{awk} requires that the string value be written identically every time. @cindex coprocesses @@ -9372,7 +9407,7 @@ terminal at all. Then opening @file{/dev/tty} fails. @command{gawk} provides special file names for accessing the three standard -streams. @value{COMMONEXT}. It also provides syntax for accessing +streams. @value{COMMONEXT} It also provides syntax for accessing any other inherited open files. If the file name matches one of these special names when @command{gawk} redirects input or output, then it directly uses the stream that the file name stands for. @@ -9628,15 +9663,16 @@ more importantly, the file descriptor for the pipe is not closed and released until @code{close()} is called or @command{awk} exits. -@code{close()} will silently do nothing if given an argument that +@code{close()} silently does nothing if given an argument that does not represent a file, pipe or coprocess that was opened with -a redirection. +a redirection. In such a case, it returns a negative value, +indicating an error. In addition, @command{gawk} sets @code{ERRNO} +to a string indicating the error. -Note also that @samp{close(FILENAME)} has no -``magic'' effects on the implicit loop that reads through the -files named on the command line. It is, more likely, a close -of a file that was never opened, so @command{awk} silently -does nothing. +Note also that @samp{close(FILENAME)} has no ``magic'' effects on the +implicit loop that reads through the files named on the command line. +It is, more likely, a close of a file that was never opened with a +redirection, so @command{awk} silently does nothing. @cindex @code{|} (vertical bar), @code{|&} operator (I/O), pipes@comma{} closing When using the @samp{|&} operator to communicate with a coprocess, @@ -9665,7 +9701,7 @@ which discusses it in more detail and gives an example. @cindex differences in @command{awk} and @command{gawk}, @code{close()} function @cindex Unix @command{awk}, @code{close()} function and -In many versions of Unix @command{awk}, the @code{close()} function +In many older versions of Unix @command{awk}, the @code{close()} function is actually a statement. It is a syntax error to try and use the return value from @code{close()}: @value{DARKCORNER} @@ -9721,7 +9757,7 @@ when closing a pipe. @cindex differences in @command{awk} and @command{gawk}, @code{close()} function @cindex Unix @command{awk}, @code{close()} function and -In many versions of Unix @command{awk}, the @code{close()} function +In many older versions of Unix @command{awk}, the @code{close()} function is actually a statement. It is a syntax error to try and use the return value from @code{close()}: @value{DARKCORNER} @@ -25320,9 +25356,6 @@ It contains the following chapters: @node Advanced Features @chapter Advanced Features of @command{gawk} -@ifset WITH_NETWORK_CHAPTER -@cindex advanced features, network connections, See Also networks@comma{} connections -@end ifset @c STARTOFRANGE gawadv @cindex @command{gawk}, features, advanced @c STARTOFRANGE advgaw diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 440d641b..48ed6bc6 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -942,15 +942,14 @@ particular records in a file and perform operations upon them. @c dedication for Info file @ifinfo -@center To Miriam, for making me complete. +To my parents, for their love, and for the wonderful +example they set for me. @sp 1 -@center To Chana, for the joy you bring us. +To my wife Miriam, for making me complete. +Thank you for building your life together with me. @sp 1 -@center To Rivka, for the exponential increase. -@sp 1 -@center To Nachum, for the added dimension. -@sp 1 -@center To Malka, for the new beginning. +To our children Chana, Rivka, Nachum and Malka, +for enrichening our lives in innumerable ways. @end ifinfo @summarycontents @@ -4302,7 +4301,6 @@ that can be loaded with either @code{@@load} or the @option{-l} option. @node Obsolete @section Obsolete Options and/or Features -@cindex features, advanced, See advanced features @cindex options, deprecated @cindex features, deprecated @cindex obsolete features @@ -5615,6 +5613,14 @@ file is started. Another built-in variable, @code{NR}, records the total number of input records read so far from all data files. It starts at zero, but is never automatically reset to zero. +@menu +* awk split records:: How standard @command{awk} splits records. +* gawk split records:: How @command{gawk} splits records. +@end menu + +@node awk split records +@subsection Record Splitting With Standard @command{awk} + @cindex separators, for records @cindex record separators Records are separated by a character called the @dfn{record separator}. @@ -5778,6 +5784,9 @@ After the end of the record has been determined, @command{gawk} sets the variable @code{RT} to the text in the input that matched @code{RS}. +@node gawk split records +@subsection Record Splitting With @command{gawk} + @cindex common extensions, @code{RS} as a regexp @cindex extensions, common@comma{} @code{RS} as a regexp When using @command{gawk}, @@ -5856,7 +5865,6 @@ single record. The only way to make this happen is to give @code{RS} a value that you know doesn't occur in the input file. This is hard to do in a general way, such that a program always works for arbitrary input files. -@c can you say `understatement' boys and girls? You might think that for text files, the @sc{nul} character, which consists of a character with all bits equal to zero, is a good @@ -5869,6 +5877,8 @@ BEGIN @{ RS = "\0" @} # whole file becomes one record? @cindex differences in @command{awk} and @command{gawk}, strings, storing @command{gawk} in fact accepts this, and uses the @sc{nul} character for the record separator. +This works for certain special files, such as @file{/proc/environ} on +GNU/Linux systems, where the @sc{nul} character is in fact the record separator. However, this usage is @emph{not} portable to most other @command{awk} implementations. @@ -5885,11 +5895,9 @@ character as a record separator. However, this is a special case: @cindex records, treating files as @cindex treating files, as single records -The best way to treat a whole file as a single record is to -simply read the file in, one record at a time, concatenating each -record onto the end of the previous ones. - -@c @strong{FIXME}: Using @sc{nul} is good for @file{/proc/environ} etc. +@xref{Readfile Function}, for an interesting, portable way to read +whole files. If you are using @command{gawk}, see @ref{Extension Sample +Readfile}, for another option. @end sidebar @c ENDOFRANGE inspl @c ENDOFRANGE recspl @@ -5925,7 +5933,7 @@ 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 -A dollar-sign (@samp{$}) is used +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. @@ -5956,7 +5964,7 @@ 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 -a special case: it represents the whole input record +a special case: it represents the whole input record. Use it when you are not interested in specific fields. Here are some more examples: @@ -5992,7 +6000,7 @@ $ @kbd{awk '/li/ @{ print $1, $NF @}' mail-list} @cindex fields, numbers @cindex field numbers -The number of a field does not need to be a constant. Any expression in +A field number need not be a constant. Any expression in the @command{awk} language can be used after a @samp{$} to refer to a field. The value of the expression specifies the field number. If the value is a string, rather than a number, it is converted to a number. @@ -6019,7 +6027,11 @@ its value as the number of the field to print. The @samp{*} sign 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 in the field-number expression. This example, then, prints the +operator@footnote{A @dfn{binary operator}, such as @samp{*} for +multiplication, is one that takes two operands. The distinction +is required, since @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 @file{mail-list}. (All of the @command{awk} operators are listed, in order of decreasing precedence, in @@ -6069,7 +6081,7 @@ Then it prints the original and new values for field three. (Someone in the warehouse made a consistent mistake while inventorying the red boxes.) -For this to work, the text in field @code{$3} must make sense +For this to work, the text in @code{$3} must make sense as a number; the string of characters must be converted to a number for the computer to do arithmetic on it. The number resulting from the subtraction is converted back to a string of characters that @@ -6160,7 +6172,7 @@ $ @kbd{echo a b c d | awk '@{ OFS = ":"; $2 = ""} @end example @noindent -The field is still there; it just has an empty value, denoted by +The field is still there; it just has an empty value, delimited by the two colons between @samp{a} and @samp{c}. This example shows what happens if you create a new field: @@ -6852,7 +6864,7 @@ if (PROCINFO["FS"] == "FS") else if (PROCINFO["FS"] == "FIELDWIDTHS") @var{fixed-width field splitting} @dots{} else - @var{content-based field splitting} @dots{} (see next @value{SECTION}) + @var{content-based field splitting} @dots{} @ii{(see next @value{SECTION})} @end example This information is useful when writing a function @@ -6966,7 +6978,7 @@ the double quotes. @command{gawk} provides no way to deal with this. Since there is no formal specification for CSV data, there isn't much more to be done; the @code{FPAT} mechanism provides an elegant solution for the majority -of cases, and the @command{gawk} maintainer is satisfied with that. +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 @@ -7028,7 +7040,7 @@ the first nonblank line that follows---no matter how many blank lines appear in a row, they are considered one record separator. @cindex dark corner, multiline records -There is an important difference between @samp{RS = ""} and +However, there is an important difference between @samp{RS = ""} and @samp{RS = "\n\n+"}. In the first case, leading newlines in the input data file are ignored, and if a file ends without extra blank lines after the last record, the final newline is removed from the record. @@ -7181,7 +7193,19 @@ The @code{getline} command is used in several different ways and should The examples that follow the explanation of the @code{getline} command include material that has not been covered yet. Therefore, come back and study the @code{getline} command @emph{after} you have reviewed the -rest of this @value{DOCUMENT} and have a good knowledge of how @command{awk} works. +rest of +@ifinfo +this @value{DOCUMENT} +@end ifinfo +@ifhtml +this @value{DOCUMENT} +@end ifhtml +@ifnotinfo +@ifnothtml +Parts I and II +@end ifnothtml +@end ifnotinfo +and have a good knowledge of how @command{awk} works. @cindex @command{gawk}, @code{ERRNO} variable in @cindex @code{ERRNO} variable, with @command{getline} command @@ -7368,9 +7392,9 @@ changed, resulting in a new value of @code{NF}. According to POSIX, @samp{getline < @var{expression}} is ambiguous if @var{expression} contains unparenthesized operators other than @samp{$}; for example, @samp{getline < dir "/" file} is ambiguous -because the concatenation operator is not parenthesized. You should -write it as @samp{getline < (dir "/" file)} if you want your program -to be portable to all @command{awk} implementations. +because the concatenation operator (not discussed yet; @pxref{Concatenation}) +is not parenthesized. You should write it as @samp{getline < (dir "/" file)} if +you want your program to be portable to all @command{awk} implementations. @node Getline/Variable/File @subsection Using @code{getline} into a Variable from a File @@ -7633,7 +7657,7 @@ However, the new record is tested against any subsequent rules. @cindex @command{awk}, implementations, limits @cindex @command{gawk}, implementation issues, limits @item -Many @command{awk} implementations limit the number of pipelines that an @command{awk} +Some very old @command{awk} implementations limit the number of pipelines that an @command{awk} program may have open to just one. In @command{gawk}, there is no such limit. You can open as many pipelines (and coprocesses) as the underlying operating system permits. @@ -7672,6 +7696,7 @@ can cause @code{FILENAME} to be updated if they cause @command{awk} to start reading a new input file. @item +@cindex Moore, Duncan 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 @@ -7696,7 +7721,7 @@ 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}. -Other versions of @command{awk} only evaluate the expression once they +However, some versions of @command{awk} only evaluate the expression once they know that there is a string value to be assigned. Caveat Emptor. @end itemize @@ -7732,10 +7757,13 @@ Note: for each variant, @command{gawk} sets the @code{RT} built-in variable. @section Reading Input With A Timeout @cindex timeout, reading input +@cindex differences in @command{awk} and @command{gawk}, read timeouts +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, -pipe or two-way communication including, TCP/IP sockets. This can be done +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: +in the @code{PROCINFO} (@pxref{Auto-set}) array: @example PROCINFO["input_name", "READ_TIMEOUT"] = @var{timeout in milliseconds} @@ -7765,9 +7793,9 @@ while ((getline < "/dev/stdin") > 0) print $0 @end example -@command{gawk} will terminate the read operation if input does not -arrive after waiting for the timeout period, return failure -and set the @code{ERRNO} variable to an appropriate string value. +@command{gawk} terminates the read operation if input does not +arrive after waiting for the timeout period, returns failure +and sets the @code{ERRNO} variable to an appropriate string value. A negative or zero value for the timeout is the same as specifying no timeout at all. @@ -7839,15 +7867,25 @@ indefinitely until some other process opens it for writing. @cindex command line, directories on According to the POSIX standard, files named on the @command{awk} -command line must be text files. It is a fatal error if they are not. +command line must be text files; it is a fatal error if they are not. Most versions of @command{awk} treat a directory on the command line as a fatal error. By default, @command{gawk} produces a warning for a directory on the -command line, but otherwise ignores it. If either of the @option{--posix} +command line, but otherwise ignores it. This makes it easier to use +shell wildcards with your @command{awk} program: + +@example +$ @kbd{gawk -f whizprog.awk *} @ii{Directories could kill this progam} +@end example + +If either of the @option{--posix} or @option{--traditional} options is given, then @command{gawk} reverts to treating a directory on the command line as a fatal error. +@xref{Extension Sample Readdir}, for a way to treat directories +as usable data from an @command{awk} program. + @node Printing @chapter Printing Output @@ -7893,7 +7931,7 @@ and discusses the @code{close()} built-in function. @section The @code{print} Statement The @code{print} statement is used for producing output with simple, standardized -formatting. Specify only the strings or numbers to print, in a +formatting. You specify only the strings or numbers to print, in a list separated by commas. They are output, separated by single spaces, followed by a newline. The statement looks like this: @@ -7976,10 +8014,9 @@ $ @kbd{awk '@{ print $1 $2 @}' inventory-shipped} To someone unfamiliar with the @file{inventory-shipped} file, neither example's output makes much sense. A heading line at the beginning would make it clearer. Let's add some headings to our table of months -(@code{$1}) and green crates shipped (@code{$2}). We do this using the -@code{BEGIN} pattern -(@pxref{BEGIN/END}) -so that the headings are only printed once: +(@code{$1}) and green crates shipped (@code{$2}). We do this using +a @code{BEGIN} rule (@pxref{BEGIN/END}) so that the headings are only +printed once: @example awk 'BEGIN @{ print "Month Crates" @@ -8305,7 +8342,8 @@ infinity are formatted as @samp{-inf} or @samp{-infinity}, and positive infinity as @samp{inf} and @samp{infinity}. -The special ``not a number'' value formats as @samp{-nan} or @samp{nan}. +The special ``not a number'' value formats as @samp{-nan} or @samp{nan} +(@pxref{General Arithmetic}). @item @code{%F} Like @samp{%f} but the infinity and ``not a number'' values are spelled @@ -8448,7 +8486,7 @@ For example: $ @kbd{cat thousands.awk} @ii{Show source program} @print{} BEGIN @{ printf "%'d\n", 1234567 @} $ @kbd{LC_ALL=C gawk -f thousands.awk} -@print{} 1234567 @ii{Results in "C" locale} +@print{} 1234567 @ii{Results in} "C" @ii{locale} $ @kbd{LC_ALL=en_US.UTF-8 gawk -f thousands.awk} @print{} 1,234,567 @ii{Results in US English UTF locale} @end example @@ -8558,14 +8596,12 @@ This is not particularly easy to read but it does work. @c @cindex lint checks @cindex troubleshooting, fatal errors, @code{printf} format strings @cindex POSIX @command{awk}, @code{printf} format strings and -C programmers may be used to supplying additional -@samp{l}, @samp{L}, and @samp{h} -modifiers in @code{printf} 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 programmers may be used to supplying additional modifiers (@samp{h}, +@samp{j}, @samp{l}, @samp{L}, @samp{t}, and @samp{z}) in @code{printf} +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 @@ -8611,7 +8647,7 @@ they are last on their lines. They don't need to have spaces after them. The table could be made to look even nicer by adding headings to the -tops of the columns. This is done using the @code{BEGIN} pattern +tops of the columns. This is done using a @code{BEGIN} rule (@pxref{BEGIN/END}) so that the headers are only printed once, at the beginning of the @command{awk} program: @@ -8683,7 +8719,7 @@ commands, except that they are written inside the @command{awk} program. @cindex @code{printf} statement, See Also redirection@comma{} of output There are four forms of output redirection: output to a file, output appended to a file, output through a pipe to another command, and output -to a coprocess. They are all shown for the @code{print} statement, +to a coprocess. We show them all for the @code{print} statement, but they work identically for @code{printf}: @table @code @@ -8788,7 +8824,7 @@ This example also illustrates the use of a variable to represent a @var{file} or @var{command}---it is not necessary to always use a string constant. Using a variable is generally a good idea, because (if you mean to refer to that same file or command) -@command{awk} requires that the string value be spelled identically +@command{awk} requires that the string value be written identically every time. @cindex coprocesses @@ -8952,7 +8988,7 @@ terminal at all. Then opening @file{/dev/tty} fails. @command{gawk} provides special file names for accessing the three standard -streams. @value{COMMONEXT}. It also provides syntax for accessing +streams. @value{COMMONEXT} It also provides syntax for accessing any other inherited open files. If the file name matches one of these special names when @command{gawk} redirects input or output, then it directly uses the stream that the file name stands for. @@ -9208,15 +9244,16 @@ more importantly, the file descriptor for the pipe is not closed and released until @code{close()} is called or @command{awk} exits. -@code{close()} will silently do nothing if given an argument that +@code{close()} silently does nothing if given an argument that does not represent a file, pipe or coprocess that was opened with -a redirection. +a redirection. In such a case, it returns a negative value, +indicating an error. In addition, @command{gawk} sets @code{ERRNO} +to a string indicating the error. -Note also that @samp{close(FILENAME)} has no -``magic'' effects on the implicit loop that reads through the -files named on the command line. It is, more likely, a close -of a file that was never opened, so @command{awk} silently -does nothing. +Note also that @samp{close(FILENAME)} has no ``magic'' effects on the +implicit loop that reads through the files named on the command line. +It is, more likely, a close of a file that was never opened with a +redirection, so @command{awk} silently does nothing. @cindex @code{|} (vertical bar), @code{|&} operator (I/O), pipes@comma{} closing When using the @samp{|&} operator to communicate with a coprocess, @@ -9240,7 +9277,7 @@ which discusses it in more detail and gives an example. @cindex differences in @command{awk} and @command{gawk}, @code{close()} function @cindex Unix @command{awk}, @code{close()} function and -In many versions of Unix @command{awk}, the @code{close()} function +In many older versions of Unix @command{awk}, the @code{close()} function is actually a statement. It is a syntax error to try and use the return value from @code{close()}: @value{DARKCORNER} @@ -24461,9 +24498,6 @@ It contains the following chapters: @node Advanced Features @chapter Advanced Features of @command{gawk} -@ifset WITH_NETWORK_CHAPTER -@cindex advanced features, network connections, See Also networks@comma{} connections -@end ifset @c STARTOFRANGE gawadv @cindex @command{gawk}, features, advanced @c STARTOFRANGE advgaw -- cgit v1.2.3 From 0ceab11e44cac45f8653fa79510726cc121719f4 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 30 Apr 2014 21:29:18 +0300 Subject: Edits, into chapter 7. --- doc/ChangeLog | 2 + doc/gawk.info | 1082 ++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 318 +++++++++------- doc/gawktexi.in | 312 +++++++++------- 4 files changed, 919 insertions(+), 795 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 59d31520..dde9c9af 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,6 +1,8 @@ 2014-04-30 Arnold D. Robbins * gawktexi.in: Editing progress. Through Chapter 5. + * gawktexi.in: Editing progress. Through Chapter 6 and into + Chapter 7. 2014-04-29 Arnold D. Robbins diff --git a/doc/gawk.info b/doc/gawk.info index 57fdc3d4..8c13d181 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -6921,7 +6921,8 @@ codes. (1) The internal representation of all numbers, including integers, uses double precision floating-point numbers. On most modern systems, -these are in IEEE 754 standard format. +these are in IEEE 754 standard format. *Note Arbitrary Precision +Arithmetic::, for much more information.  File: gawk.info, Node: Nondecimal-numbers, Next: Regexp Constants, Prev: Scalar Constants, Up: Constants @@ -7054,8 +7055,8 @@ the contents of the current input record. Constant regular expressions are also used as the first argument for the `gensub()', `sub()', and `gsub()' functions, as the second argument -of the `match()' function, and as the third argument of the -`patsplit()' function (*note String Functions::). Modern +of the `match()' function, and as the third argument of the `split()' +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.) This can lead to confusion when attempting to use regexp @@ -7248,29 +7249,28 @@ use when printing numbers with `print'. `CONVFMT' was introduced in order to separate the semantics of conversion from the semantics of printing. Both `CONVFMT' and `OFMT' have the same default value: `"%.6g"'. In the vast majority of cases, old `awk' programs do not -change their behavior. However, these semantics for `OFMT' are -something to keep in mind if you must port your new-style program to -older implementations of `awk'. We recommend that instead of changing -your programs, just port `gawk' itself. *Note Print::, for more -information on the `print' statement. - - And, once again, where you are can matter when it comes to converting -between numbers and strings. In *note Locales::, we mentioned that the -local character set and language (the locale) can affect how `gawk' -matches characters. The locale also affects numeric formats. In -particular, for `awk' programs, it affects the decimal point character. -The `"C"' locale, and most English-language locales, use the period -character (`.') as the decimal point. However, many (if not most) -European and non-English locales use the comma (`,') as the decimal -point character. +change their behavior. *Note Print::, for more information on the +`print' statement. + + Where you are can matter when it comes to converting between numbers +and strings. The local character set and language--the "locale"--can +affect numeric formats. In particular, for `awk' programs, it affects +the decimal point character and the thousands-separator character. The +`"C"' locale, and most English-language locales, use the period +character (`.') as the decimal point and don't have a thousands +separator. However, many (if not most) European and non-English +locales use the comma (`,') as the decimal point character. European +locales often use either a space or a period as the thousands +separator, if they have one. The POSIX standard says that `awk' always uses the period as the decimal point when reading the `awk' program source code, and for command-line variable assignments (*note Other Arguments::). However, when interpreting input data, for `print' and `printf' output, and for number to string conversion, the local decimal point character is used. -(d.c.) Here are some examples indicating the difference in behavior, -on a GNU/Linux system: +(d.c.) In all cases, numbers in source code and in input data cannot +have a thousands separator. Here are some examples indicating the +difference in behavior, on a GNU/Linux system: $ export POSIXLY_CORRECT=1 Force POSIX behavior $ gawk 'BEGIN { printf "%g\n", 3.1415927 }' @@ -7475,9 +7475,9 @@ example: print (a " " (a = "panic")) } -It is not defined whether the assignment to `a' happens before or after -the value of `a' is retrieved for producing the concatenated value. -The result could be either `don't panic', or `panic panic'. +It is not defined whether the second assignment to `a' happens before +or after the value of `a' is retrieved for producing the concatenated +value. The result could be either `don't panic', or `panic panic'. The precedence of concatenation, when mixed with other operators, is often counter-intuitive. Consider this example: @@ -7550,9 +7550,9 @@ that the assignment stores in the specified variable, field, or array element. (Such values are called "rvalues".) It is important to note that variables do _not_ have permanent types. -A variable's type is simply the type of whatever value it happens to -hold at the moment. In the following program fragment, the variable -`foo' has a numeric value at first, and a string value later on: +A variable's type is simply the type of whatever value was last assigned +to it. In the following program fragment, the variable `foo' has a +numeric value at first, and a string value later on: foo = 1 print foo @@ -7625,9 +7625,10 @@ The indices of `bar' are practically guaranteed to be different, because the `rand()' function haven't been covered yet. *Note Arrays::, and see *note Numeric Functions::, for more information). This example illustrates an important fact about assignment operators: the lefthand -expression is only evaluated _once_. It is up to the implementation as -to which expression is evaluated first, the lefthand or the righthand. -Consider this example: +expression is only evaluated _once_. + + It is up to the implementation as to which expression is evaluated +first, the lefthand or the righthand. Consider this example: i = 1 a[i += 2] = i + 1 @@ -7640,14 +7641,14 @@ converted to a number. Operator Effect -------------------------------------------------------------------------- -LVALUE `+=' INCREMENT Adds INCREMENT to the value of LVALUE. -LVALUE `-=' DECREMENT Subtracts DECREMENT from the value of LVALUE. -LVALUE `*=' Multiplies 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 Divides the value of LVALUE by DIVISOR. -LVALUE `%=' MODULUS Sets LVALUE to its remainder by MODULUS. +LVALUE `/=' DIVISOR Divide the value of LVALUE by DIVISOR. +LVALUE `%=' MODULUS Set LVALUE to its remainder by MODULUS. LVALUE `^=' POWER -LVALUE `**=' POWER Raises LVALUE to the power POWER. (c.e.) +LVALUE `**=' POWER Raise LVALUE to the power POWER. (c.e.) Table 6.2: Arithmetic Assignment Operators @@ -7670,8 +7671,8 @@ A workaround is: awk '/[=]=/' /dev/null - `gawk' does not have this problem, nor do the other freely available -versions described in *note Other Versions::. + `gawk' does not have this problem; Brian Kernighan's `awk' and +`mawk' also do not (*note Other Versions::).  File: gawk.info, Node: Increment Ops, Prev: Assignment Ops, Up: All Operators @@ -7686,13 +7687,13 @@ they are convenient abbreviations for very common operations. The operator used for adding one is written `++'. It can be used to increment a variable either before or after taking its value. To -pre-increment a variable `v', write `++v'. This adds one to the value -of `v'--that new value is also the value of the expression. (The +"pre-increment" a variable `v', write `++v'. This adds one to the +value of `v'--that new value is also the value of the expression. (The assignment expression `v += 1' is completely equivalent.) Writing the -`++' after the variable specifies post-increment. This increments the -variable value just the same; the difference is that the value of the -increment expression itself is the variable's _old_ value. Thus, if -`foo' has the value four, then the expression `foo++' has the value +`++' after the variable specifies "post-increment". This increments +the variable value just the same; the difference is that the value of +the increment expression itself is the variable's _old_ value. Thus, +if `foo' has the value four, then the expression `foo++' has the value four, but it changes the value of `foo' to five. In other words, the operator returns the old value of the variable, but with the side effect of incrementing it. @@ -7839,10 +7840,12 @@ The 1992 POSIX standard introduced the concept of a "numeric string", which is simply a string that looks like a number--for example, `" +2"'. This concept is used for determining the type of a variable. The type of the variable is important because the types of two variables -determine how they are compared. The various versions of the POSIX -standard did not get the rules quite right for several editions. -Fortunately, as of at least the 2008 standard (and possibly earlier), -the standard has been fixed, and variable typing follows these rules:(1) +determine how they are compared. + + The various versions of the POSIX standard did not get the rules +quite right for several editions. Fortunately, as of at least the 2008 +standard (and possibly earlier), the standard has been fixed, and +variable typing follows these rules:(1) * A numeric constant or the result of a numeric operation has the NUMERIC attribute. @@ -7899,10 +7902,9 @@ comparison is performed. 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-character literal `" +3.14"' appearing in -program text is a string constant. The following examples print `1' -when the comparison between the two different constants is true, `0' -otherwise: +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: $ echo ' +3.14' | gawk '{ print $0 == " +3.14" }' True -| 1 @@ -8045,9 +8047,10 @@ File: gawk.info, Node: POSIX String Comparison, Prev: Comparison Operators, U .......................................... The POSIX standard says that string comparison is performed based on -the locale's collating order. This is usually very different from the -results obtained when doing straight character-by-character -comparison.(1) +the locale's "collating order". This is the order in which characters +sort, as defined by the locale (for more discussion, *note Ranges and +Locales::). This order is usually very different from the results +obtained when doing straight character-by-character comparison.(1) Because this behavior differs considerably from existing practice, `gawk' only implements it when in POSIX mode (*note Options::). Here @@ -8199,7 +8202,7 @@ not. *Note Arrays::, for more information about arrays. continued simply by putting a newline after either character. However, putting a newline in front of either character does not work without using backslash continuation (*note Statements/Lines::). If `--posix' -is specified (*note Options::), then this extension is disabled. +is specified (*note Options::), this extension is disabled.  File: gawk.info, Node: Function Calls, Next: Precedence, Prev: Truth Values and Conditions, Up: Expressions @@ -8216,6 +8219,8 @@ 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 program. *Note User-defined::, for instructions on how to do this. +Finally, `gawk' lets you write functions in C or C++ that may be called +from your program: see *note Dynamic Extensions::. The way to use a function is with a "function call" expression, which consists of the function name followed immediately by a list of @@ -8255,11 +8260,12 @@ which is a way to choose the function to call at runtime, instead of when you write the source code to your program. We defer discussion of this feature until later; see *note Indirect Calls::. - Like every other expression, the function call has a value, which is -computed by the function based on the arguments you give it. In this -example, the value of `sqrt(ARGUMENT)' is the square root of ARGUMENT. -The following program reads numbers, one number per line, and prints the -square root of each one: + Like every other expression, the function call has a value, often +called the "return value", which is computed by the function based on +the arguments you give it. In this example, the return value of +`sqrt(ARGUMENT)' is the square root of ARGUMENT. The following program +reads numbers, one number per line, and prints the square root of each +one: $ awk '{ print "The square root of", $1, "is", sqrt($1) }' 1 @@ -8472,10 +8478,10 @@ summary of the types of `awk' patterns: A single expression. It matches when its value is nonzero (if a number) or non-null (if a string). (*Note Expression Patterns::.) -`PAT1, PAT2' +`BEGPAT, ENDPAT' A pair of patterns separated by a comma, specifying a range of records. The range includes both the initial record that matches - PAT1 and the final record that matches PAT2. (*Note Ranges::.) + BEGPAT and the final record that matches ENDPAT. (*Note Ranges::.) `BEGIN' `END' @@ -8485,7 +8491,7 @@ summary of the types of `awk' patterns: `BEGINFILE' `ENDFILE' Special patterns for you to supply startup or cleanup actions to be - done on a per file basis. (*Note BEGINFILE/ENDFILE::.) + done on a per-file basis. (*Note BEGINFILE/ENDFILE::.) `EMPTY' The empty pattern matches every input record. (*Note Empty::.) @@ -8605,7 +8611,7 @@ 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 +record; when this succeeds, the range pattern is "turned off" again for the following record. Then the range pattern goes back to checking BEGPAT against each record. @@ -8737,10 +8743,10 @@ File: gawk.info, Node: I/O And BEGIN/END, Prev: Using BEGIN/END, Up: BEGIN/EN 7.1.4.2 Input/Output from `BEGIN' and `END' Rules ................................................. -There are several (sometimes subtle) points to remember when doing I/O -from a `BEGIN' or `END' rule. The first has to do with the value of -`$0' in a `BEGIN' rule. Because `BEGIN' rules are executed before any -input is read, there simply is no input record, and therefore no +There are several (sometimes subtle) points to be aware of when doing +I/O from a `BEGIN' or `END' rule. The first has to do with the value +of `$0' in a `BEGIN' rule. Because `BEGIN' rules are executed before +any input is read, there simply is no input record, and therefore no fields, when executing `BEGIN' rules. References to `$0' and the fields yield a null string or zero, depending upon the context. One way to give `$0' a real value is to execute a `getline' command without a @@ -8808,10 +8814,10 @@ 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"), 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).) + 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).) The `ENDFILE' rule is called when `gawk' has finished processing the last record in an input file. For the last input file, it will be @@ -8863,15 +8869,15 @@ to get the value of the shell variable into the body of the `awk' program. The most common method is to use shell quoting to substitute the -variable's value into the program inside the script. For example, in -the following program: +variable's value into the program inside the script. For example, +consider the following program: printf "Enter search pattern: " read pattern awk "/$pattern/ "'{ nmatches++ } END { print nmatches, "found" }' /path/to/data -the `awk' program consists of two pieces of quoted text that are +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. @@ -8883,7 +8889,7 @@ quotes when reading the program. A better method is to use `awk''s variable assignment feature (*note Assignment Options::) to assign the shell variable's value to an `awk' -variable's value. Then use dynamic regexps to match the pattern (*note +variable. Then use dynamic regexps to match the pattern (*note Computed Regexps::). The following shows how to redo the previous example using this technique: @@ -8945,9 +8951,9 @@ Control statements well as a few special ones (*note Statements::). Compound statements - Consist of one or more statements enclosed in curly braces. A - compound statement is used in order to put several statements - together in the body of an `if', `while', `do', or `for' statement. + Enclose one or more statements in curly braces. A compound + statement is used in order to put several statements together in + the body of an `if', `while', `do', or `for' statement. Input statements Use the `getline' command (*note Getline::). Also supplied in @@ -9210,7 +9216,8 @@ File: gawk.info, Node: Switch Statement, Next: Break Statement, Prev: For Sta 7.4.5 The `switch' Statement ---------------------------- -This minor node describes a `gawk'-specific feature. +This minor node describes a `gawk'-specific feature. If `gawk' is in +compatibility mode (*note Options::), it is not available. The `switch' statement allows the evaluation of an expression and the execution of statements based on a `case' match. Case statements @@ -9261,9 +9268,6 @@ is executed and then falls through into the `default' section, executing its `print' statement. In turn, the -1 case will also be executed since the `default' does not halt execution. - This `switch' statement is a `gawk' extension. If `gawk' is in -compatibility mode (*note Options::), it is not available. -  File: gawk.info, Node: Break Statement, Next: Continue Statement, Prev: Switch Statement, Up: Statements @@ -9276,15 +9280,15 @@ 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) - break - } - if (num % div == 0) - printf "Smallest divisor of %d is %d\n", num, div - else - printf "%d is prime\n", num + num = $1 + for (div = 2; div * div <= num; div++) { + if (num % div == 0) + break + } + if (num % div == 0) + printf "Smallest divisor of %d is %d\n", num, div + else + printf "%d is prime\n", num } When the remainder is zero in the first `if' statement, `awk' @@ -9299,17 +9303,17 @@ 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 - break - } - if (div * div > num) { - printf "%d is prime\n", num - break + num = $1 + for (div = 2; ; div++) { + if (num % div == 0) { + printf "Smallest divisor of %d is %d\n", num, div + break + } + if (div * div > num) { + printf "%d is prime\n", num + break + } } - } } The `break' statement is also used to break out of the `switch' @@ -9420,7 +9424,7 @@ rules. *Note BEGINFILE/ENDFILE::. According to the POSIX standard, the behavior is undefined if the `next' statement is used in a `BEGIN' or `END' rule. `gawk' treats it -as a syntax error. Although POSIX permits it, some other `awk' +as a syntax error. Although POSIX permits it, most other `awk' implementations don't allow the `next' statement inside function bodies (*note User-defined::). Just as with any other `next' statement, a `next' statement inside a function body reads the next record and @@ -9524,12 +9528,12 @@ with a nonzero status. An `awk' program can do this using an `exit' statement with a nonzero argument, as shown in the following example: BEGIN { - if (("date" | getline date_now) <= 0) { - print "Can't get system date" > "/dev/stderr" - exit 1 - } - print "current date is", date_now - close("date") + if (("date" | getline date_now) <= 0) { + print "Can't get system date" > "/dev/stderr" + exit 1 + } + print "current date is", date_now + close("date") } NOTE: For full portability, exit values should be between zero and @@ -27797,7 +27801,7 @@ Item Limit -------------------------------------------------------------------------- Characters in a character 2^(number of bits per byte) class -Length of input record `MAX_INT ' +Length of input record `MAX_INT' Length of output record Unlimited Length of source line Unlimited Number of fields in a record `MAX_LONG' @@ -27810,9 +27814,9 @@ Number of pipe redirections min(number of processes per user, number of open files) Numeric values Double-precision floating point (if not using MPFR) -Size of a field `MAX_INT ' -Size of a literal string `MAX_INT ' -Size of a printf string `MAX_INT ' +Size of a field `MAX_INT' +Size of a literal string `MAX_INT' +Size of a printf string `MAX_INT'  File: gawk.info, Node: Extension Design, Next: Old Extension Mechanism, Prev: Implementation Limitations, Up: Notes @@ -30129,7 +30133,7 @@ Index * $ (dollar sign), regexp operator: Regexp Operators. (line 35) * % (percent sign), % operator: Precedence. (line 55) * % (percent sign), %= operator <1>: Precedence. (line 95) -* % (percent sign), %= operator: Assignment Ops. (line 129) +* % (percent sign), %= operator: Assignment Ops. (line 130) * & (ampersand), && operator <1>: Precedence. (line 86) * & (ampersand), && operator: Boolean Ops. (line 57) * & (ampersand), gsub()/gensub()/sub() functions and: Gory Details. @@ -30150,9 +30154,9 @@ Index * * (asterisk), ** operator <1>: Precedence. (line 49) * * (asterisk), ** operator: Arithmetic Ops. (line 81) * * (asterisk), **= operator <1>: Precedence. (line 95) -* * (asterisk), **= operator: Assignment Ops. (line 129) +* * (asterisk), **= operator: Assignment Ops. (line 130) * * (asterisk), *= operator <1>: Precedence. (line 95) -* * (asterisk), *= operator: Assignment Ops. (line 129) +* * (asterisk), *= operator: Assignment Ops. (line 130) * + (plus sign), + operator: Precedence. (line 52) * + (plus sign), ++ operator <1>: Precedence. (line 46) * + (plus sign), ++ operator: Increment Ops. (line 11) @@ -30164,7 +30168,7 @@ Index * - (hyphen), -- operator <1>: Precedence. (line 46) * - (hyphen), -- operator: Increment Ops. (line 48) * - (hyphen), -= operator <1>: Precedence. (line 95) -* - (hyphen), -= operator: Assignment Ops. (line 129) +* - (hyphen), -= operator: Assignment Ops. (line 130) * - (hyphen), filenames beginning with: Options. (line 59) * - (hyphen), in bracket expressions: Bracket Expressions. (line 17) * --assign option: Options. (line 32) @@ -30260,11 +30264,11 @@ Index * / (forward slash) to enclose regular expressions: Regexp. (line 10) * / (forward slash), / operator: Precedence. (line 55) * / (forward slash), /= operator <1>: Precedence. (line 95) -* / (forward slash), /= operator: Assignment Ops. (line 129) +* / (forward slash), /= operator: Assignment Ops. (line 130) * / (forward slash), /= operator, vs. /=.../ regexp constant: Assignment Ops. - (line 147) + (line 148) * / (forward slash), patterns and: Expression Patterns. (line 24) -* /= operator vs. /=.../ regexp constant: Assignment Ops. (line 147) +* /= operator vs. /=.../ regexp constant: Assignment Ops. (line 148) * /dev/... special files: Special FD. (line 46) * /dev/fd/N special files (gawk): Special FD. (line 46) * /inet/... special files (gawk): TCP/IP Networking. (line 6) @@ -30354,7 +30358,7 @@ Index * \ (backslash), regexp operator: Regexp Operators. (line 18) * ^ (caret), ^ operator: Precedence. (line 49) * ^ (caret), ^= operator <1>: Precedence. (line 95) -* ^ (caret), ^= operator: Assignment Ops. (line 129) +* ^ (caret), ^= operator: Assignment Ops. (line 130) * ^ (caret), in bracket expressions: Bracket Expressions. (line 17) * ^ (caret), in FS: Regexp Field Splitting. (line 59) @@ -30399,7 +30403,7 @@ Index * amazing awk assembler (aaa): Glossary. (line 12) * amazingly workable formatter (awf): Glossary. (line 25) * ambiguity, syntactic: /= operator vs. /=.../ regexp constant: Assignment Ops. - (line 147) + (line 148) * ampersand (&), && operator <1>: Precedence. (line 86) * ampersand (&), && operator: Boolean Ops. (line 57) * ampersand (&), gsub()/gensub()/sub() functions and: Gory Details. @@ -30431,7 +30435,7 @@ Index * arguments, command-line <2>: Auto-set. (line 11) * arguments, command-line: Other Arguments. (line 6) * arguments, command-line, invoking awk: Command Line. (line 6) -* arguments, in function calls: Function Calls. (line 16) +* arguments, in function calls: Function Calls. (line 18) * arguments, processing: Getopt Function. (line 6) * ARGV array, indexing into: Other Arguments. (line 12) * arithmetic operators: Arithmetic Ops. (line 6) @@ -30510,14 +30514,14 @@ Index * asterisk (*), ** operator <1>: Precedence. (line 49) * asterisk (*), ** operator: Arithmetic Ops. (line 81) * asterisk (*), **= operator <1>: Precedence. (line 95) -* asterisk (*), **= operator: Assignment Ops. (line 129) +* asterisk (*), **= operator: Assignment Ops. (line 130) * asterisk (*), *= operator <1>: Precedence. (line 95) -* asterisk (*), *= operator: Assignment Ops. (line 129) +* asterisk (*), *= operator: Assignment Ops. (line 130) * atan2: Numeric Functions. (line 11) * automatic displays, in debugger: Debugger Info. (line 24) * awf (amazingly workable formatter) program: Glossary. (line 25) * awk debugging, enabling: Options. (line 108) -* awk language, POSIX version: Assignment Ops. (line 136) +* awk language, POSIX version: Assignment Ops. (line 137) * awk profiling, enabling: Options. (line 242) * awk programs <1>: Two Rules. (line 6) * awk programs <2>: Executable Scripts. (line 6) @@ -30763,7 +30767,7 @@ Index * call stack, display in debugger: Execution Stack. (line 13) * caret (^), ^ operator: Precedence. (line 49) * caret (^), ^= operator <1>: Precedence. (line 95) -* caret (^), ^= operator: Assignment Ops. (line 129) +* caret (^), ^= operator: Assignment Ops. (line 130) * caret (^), in bracket expressions: Bracket Expressions. (line 17) * caret (^), regexp operator <1>: GNU Regexp Operators. (line 59) @@ -30844,7 +30848,7 @@ Index * commenting: Comments. (line 6) * commenting, backslash continuation and: Statements/Lines. (line 76) * common extensions, ** operator: Arithmetic Ops. (line 30) -* common extensions, **= operator: Assignment Ops. (line 136) +* common extensions, **= operator: Assignment Ops. (line 137) * common extensions, /dev/stderr special file: Special FD. (line 46) * common extensions, /dev/stdin special file: Special FD. (line 46) * common extensions, /dev/stdout special file: Special FD. (line 46) @@ -30948,7 +30952,7 @@ Index * dark corner: Conventions. (line 38) * dark corner, "0" is actually true: Truth Values. (line 24) * dark corner, /= operator vs. /=.../ regexp constant: Assignment Ops. - (line 147) + (line 148) * dark corner, ^, in FS: Regexp Field Splitting. (line 59) * dark corner, array subscripts: Uninitialized Subscripts. @@ -30974,14 +30978,14 @@ Index * dark corner, input files: awk split records. (line 110) * dark corner, invoking awk: Command Line. (line 16) * dark corner, length() function: String Functions. (line 180) -* dark corner, locale's decimal point character: Conversion. (line 77) +* dark corner, locale's decimal point character: Conversion. (line 75) * dark corner, multiline records: Multiple Line. (line 35) * dark corner, NF variable, decrementing: Changing Fields. (line 107) * dark corner, OFMT variable: OFMT. (line 27) * dark corner, regexp constants: Using Constant Regexps. (line 6) * dark corner, regexp constants, /= operator and: Assignment Ops. - (line 147) + (line 148) * dark corner, regexp constants, as arguments to user-defined functions: Using Constant Regexps. (line 43) * dark corner, split() function: String Functions. (line 359) @@ -31365,7 +31369,7 @@ Index * extensions, Brian Kernighan's awk <1>: Common Extensions. (line 6) * extensions, Brian Kernighan's awk: BTL. (line 6) * extensions, common, ** operator: Arithmetic Ops. (line 30) -* extensions, common, **= operator: Assignment Ops. (line 136) +* extensions, common, **= operator: Assignment Ops. (line 137) * extensions, common, /dev/stderr special file: Special FD. (line 46) * extensions, common, /dev/stdin special file: Special FD. (line 46) * extensions, common, /dev/stdout special file: Special FD. (line 46) @@ -31523,9 +31527,9 @@ Index * forward slash (/) to enclose regular expressions: Regexp. (line 10) * forward slash (/), / operator: Precedence. (line 55) * forward slash (/), /= operator <1>: Precedence. (line 95) -* forward slash (/), /= operator: Assignment Ops. (line 129) +* forward slash (/), /= operator: Assignment Ops. (line 130) * forward slash (/), /= operator, vs. /=.../ regexp constant: Assignment Ops. - (line 147) + (line 148) * forward slash (/), patterns and: Expression Patterns. (line 24) * FPAT variable <1>: User-modified. (line 45) * FPAT variable: Splitting By Content. @@ -31803,7 +31807,7 @@ Index * hyphen (-), -- operator <1>: Precedence. (line 46) * hyphen (-), -- operator: Increment Ops. (line 48) * hyphen (-), -= operator <1>: Precedence. (line 95) -* hyphen (-), -= operator: Assignment Ops. (line 129) +* hyphen (-), -= operator: Assignment Ops. (line 130) * hyphen (-), filenames beginning with: Options. (line 59) * hyphen (-), in bracket expressions: Bracket Expressions. (line 17) * i debugger command (alias for info): Debugger Info. (line 13) @@ -32285,7 +32289,7 @@ Index * PC operating systems, gawk on, installing: PC Installation. (line 6) * percent sign (%), % operator: Precedence. (line 55) * percent sign (%), %= operator <1>: Precedence. (line 95) -* percent sign (%), %= operator: Assignment Ops. (line 129) +* percent sign (%), %= operator: Assignment Ops. (line 130) * period (.), regexp operator: Regexp Operators. (line 44) * Perl: Future Extensions. (line 6) * Peters, Arno: Contributors. (line 85) @@ -32308,7 +32312,7 @@ Index * portability: Escape Sequences. (line 94) * portability, #! (executable scripts): Executable Scripts. (line 33) * portability, ** operator and: Arithmetic Ops. (line 81) -* portability, **= operator and: Assignment Ops. (line 142) +* portability, **= operator and: Assignment Ops. (line 143) * portability, ARGV variable: Executable Scripts. (line 42) * portability, backslash continuation and: Statements/Lines. (line 30) * portability, backslash in escape sequences: Escape Sequences. @@ -32345,10 +32349,10 @@ Index * positional specifiers, printf statement, mixing with regular formats: Printf Ordering. (line 57) * positive zero: Unexpected Results. (line 34) -* POSIX awk <1>: Assignment Ops. (line 136) +* POSIX awk <1>: Assignment Ops. (line 137) * POSIX awk: This Manual. (line 14) * POSIX awk, ** operator and: Precedence. (line 98) -* POSIX awk, **= operator and: Assignment Ops. (line 142) +* POSIX awk, **= operator and: Assignment Ops. (line 143) * POSIX awk, < operator and: Getline/File. (line 26) * POSIX awk, arithmetic operators and: Arithmetic Ops. (line 30) * POSIX awk, backslashes in string constants: Escape Sequences. @@ -32538,7 +32542,7 @@ Index (line 102) * regexp constants <2>: Regexp Constants. (line 6) * regexp constants: Regexp Usage. (line 57) -* regexp constants, /=.../, /= operator and: Assignment Ops. (line 147) +* regexp constants, /=.../, /= operator and: Assignment Ops. (line 148) * regexp constants, as patterns: Expression Patterns. (line 34) * regexp constants, in gawk: Using Constant Regexps. (line 28) @@ -32735,7 +32739,7 @@ Index * side effects, conditional expressions: Conditional Exp. (line 22) * side effects, decrement/increment operators: Increment Ops. (line 11) * side effects, FILENAME variable: Getline Notes. (line 19) -* side effects, function calls: Function Calls. (line 54) +* side effects, function calls: Function Calls. (line 56) * side effects, statements: Action Overview. (line 32) * sidebar, A Constant's Base Does Not Affect Its Value: Nondecimal-numbers. (line 64) @@ -32761,7 +32765,7 @@ Index * sidebar, So Why Does gawk have BEGINFILE and ENDFILE?: Filetrans Function. (line 83) * sidebar, Syntactic Ambiguities Between /= and Regular Expressions: Assignment Ops. - (line 145) + (line 146) * sidebar, Understanding $0: Changing Fields. (line 134) * sidebar, Using \n in Bracket Expressions of Dynamic Regexps: Computed Regexps. (line 57) @@ -32909,7 +32913,7 @@ Index * switch statement: Switch Statement. (line 6) * SYMTAB array: Auto-set. (line 274) * syntactic ambiguity: /= operator vs. /=.../ regexp constant: Assignment Ops. - (line 147) + (line 148) * system: I/O Functions. (line 72) * systime: Time Functions. (line 66) * t debugger command (alias for tbreak): Breakpoint Control. (line 90) @@ -32981,7 +32985,7 @@ Index * troubleshooting, fatal errors, printf format strings: Format Modifiers. (line 159) * troubleshooting, fflush() function: I/O Functions. (line 60) -* troubleshooting, function call syntax: Function Calls. (line 28) +* 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. @@ -33309,400 +33313,400 @@ Node: Values299487 Node: Constants300163 Node: Scalar Constants300843 Ref: Scalar Constants-Footnote-1301702 -Node: Nondecimal-numbers301884 -Node: Regexp Constants304884 -Node: Using Constant Regexps305359 -Node: Variables308414 -Node: Using Variables309069 -Node: Assignment Options310793 -Node: Conversion312668 -Ref: table-locale-affects318168 -Ref: Conversion-Footnote-1318792 -Node: All Operators318901 -Node: Arithmetic Ops319531 -Node: Concatenation322036 -Ref: Concatenation-Footnote-1324824 -Node: Assignment Ops324944 -Ref: table-assign-ops329932 -Node: Increment Ops331263 -Node: Truth Values and Conditions334697 -Node: Truth Values335780 -Node: Typing and Comparison336829 -Node: Variable Typing337622 -Ref: Variable Typing-Footnote-1341519 -Node: Comparison Operators341641 -Ref: table-relational-ops342051 -Node: POSIX String Comparison345599 -Ref: POSIX String Comparison-Footnote-1346555 -Node: Boolean Ops346693 -Ref: Boolean Ops-Footnote-1350763 -Node: Conditional Exp350854 -Node: Function Calls352586 -Node: Precedence356180 -Node: Locales359849 -Node: Patterns and Actions360938 -Node: Pattern Overview361992 -Node: Regexp Patterns363661 -Node: Expression Patterns364204 -Node: Ranges367985 -Node: BEGIN/END371089 -Node: Using BEGIN/END371851 -Ref: Using BEGIN/END-Footnote-1374587 -Node: I/O And BEGIN/END374693 -Node: BEGINFILE/ENDFILE376975 -Node: Empty379889 -Node: Using Shell Variables380206 -Node: Action Overview382491 -Node: Statements384848 -Node: If Statement386702 -Node: While Statement388201 -Node: Do Statement390245 -Node: For Statement391401 -Node: Switch Statement394553 -Node: Break Statement396707 -Node: Continue Statement398697 -Node: Next Statement400490 -Node: Nextfile Statement402880 -Node: Exit Statement405535 -Node: Built-in Variables407951 -Node: User-modified409046 -Ref: User-modified-Footnote-1417404 -Node: Auto-set417466 -Ref: Auto-set-Footnote-1430533 -Ref: Auto-set-Footnote-2430738 -Node: ARGC and ARGV430794 -Node: Arrays434648 -Node: Array Basics436153 -Node: Array Intro436979 -Node: Reference to Elements441296 -Node: Assigning Elements443566 -Node: Array Example444057 -Node: Scanning an Array445789 -Node: Controlling Scanning448103 -Ref: Controlling Scanning-Footnote-1453190 -Node: Delete453506 -Ref: Delete-Footnote-1456271 -Node: Numeric Array Subscripts456328 -Node: Uninitialized Subscripts458511 -Node: Multidimensional460138 -Node: Multiscanning463231 -Node: Arrays of Arrays464820 -Node: Functions469460 -Node: Built-in470279 -Node: Calling Built-in471357 -Node: Numeric Functions473345 -Ref: Numeric Functions-Footnote-1477179 -Ref: Numeric Functions-Footnote-2477536 -Ref: Numeric Functions-Footnote-3477584 -Node: String Functions477853 -Ref: String Functions-Footnote-1500856 -Ref: String Functions-Footnote-2500985 -Ref: String Functions-Footnote-3501233 -Node: Gory Details501320 -Ref: table-sub-escapes502999 -Ref: table-sub-posix-92504353 -Ref: table-sub-proposed505704 -Ref: table-posix-sub507058 -Ref: table-gensub-escapes508603 -Ref: Gory Details-Footnote-1509779 -Ref: Gory Details-Footnote-2509830 -Node: I/O Functions509981 -Ref: I/O Functions-Footnote-1516977 -Node: Time Functions517124 -Ref: Time Functions-Footnote-1528117 -Ref: Time Functions-Footnote-2528185 -Ref: Time Functions-Footnote-3528343 -Ref: Time Functions-Footnote-4528454 -Ref: Time Functions-Footnote-5528566 -Ref: Time Functions-Footnote-6528793 -Node: Bitwise Functions529059 -Ref: table-bitwise-ops529621 -Ref: Bitwise Functions-Footnote-1533866 -Node: Type Functions534050 -Node: I18N Functions535201 -Node: User-defined536853 -Node: Definition Syntax537657 -Ref: Definition Syntax-Footnote-1542571 -Node: Function Example542640 -Ref: Function Example-Footnote-1545289 -Node: Function Caveats545311 -Node: Calling A Function545829 -Node: Variable Scope546784 -Node: Pass By Value/Reference549747 -Node: Return Statement553255 -Node: Dynamic Typing556236 -Node: Indirect Calls557167 -Node: Library Functions566854 -Ref: Library Functions-Footnote-1570367 -Ref: Library Functions-Footnote-2570510 -Node: Library Names570681 -Ref: Library Names-Footnote-1574154 -Ref: Library Names-Footnote-2574374 -Node: General Functions574460 -Node: Strtonum Function575488 -Node: Assert Function578418 -Node: Round Function581744 -Node: Cliff Random Function583285 -Node: Ordinal Functions584301 -Ref: Ordinal Functions-Footnote-1587378 -Ref: Ordinal Functions-Footnote-2587630 -Node: Join Function587841 -Ref: Join Function-Footnote-1589612 -Node: Getlocaltime Function589812 -Node: Readfile Function593553 -Node: Data File Management595392 -Node: Filetrans Function596024 -Node: Rewind Function600093 -Node: File Checking601480 -Node: Empty Files602574 -Node: Ignoring Assigns604804 -Node: Getopt Function606358 -Ref: Getopt Function-Footnote-1617661 -Node: Passwd Functions617864 -Ref: Passwd Functions-Footnote-1626842 -Node: Group Functions626930 -Node: Walking Arrays635014 -Node: Sample Programs637150 -Node: Running Examples637824 -Node: Clones638552 -Node: Cut Program639776 -Node: Egrep Program649627 -Ref: Egrep Program-Footnote-1657400 -Node: Id Program657510 -Node: Split Program661159 -Ref: Split Program-Footnote-1664678 -Node: Tee Program664806 -Node: Uniq Program667609 -Node: Wc Program675038 -Ref: Wc Program-Footnote-1679304 -Ref: Wc Program-Footnote-2679504 -Node: Miscellaneous Programs679596 -Node: Dupword Program680784 -Node: Alarm Program682815 -Node: Translate Program687622 -Ref: Translate Program-Footnote-1692009 -Ref: Translate Program-Footnote-2692257 -Node: Labels Program692391 -Ref: Labels Program-Footnote-1695762 -Node: Word Sorting695846 -Node: History Sorting699730 -Node: Extract Program701569 -Ref: Extract Program-Footnote-1709072 -Node: Simple Sed709200 -Node: Igawk Program712262 -Ref: Igawk Program-Footnote-1727433 -Ref: Igawk Program-Footnote-2727634 -Node: Anagram Program727772 -Node: Signature Program730840 -Node: Advanced Features731940 -Node: Nondecimal Data733826 -Node: Array Sorting735409 -Node: Controlling Array Traversal736106 -Node: Array Sorting Functions744390 -Ref: Array Sorting Functions-Footnote-1748259 -Node: Two-way I/O748453 -Ref: Two-way I/O-Footnote-1753885 -Node: TCP/IP Networking753967 -Node: Profiling756811 -Node: Internationalization764314 -Node: I18N and L10N765739 -Node: Explaining gettext766425 -Ref: Explaining gettext-Footnote-1771493 -Ref: Explaining gettext-Footnote-2771677 -Node: Programmer i18n771842 -Node: Translator i18n776069 -Node: String Extraction776863 -Ref: String Extraction-Footnote-1777824 -Node: Printf Ordering777910 -Ref: Printf Ordering-Footnote-1780692 -Node: I18N Portability780756 -Ref: I18N Portability-Footnote-1783205 -Node: I18N Example783268 -Ref: I18N Example-Footnote-1785906 -Node: Gawk I18N785978 -Node: Debugger786599 -Node: Debugging787570 -Node: Debugging Concepts788003 -Node: Debugging Terms789859 -Node: Awk Debugging792456 -Node: Sample Debugging Session793348 -Node: Debugger Invocation793868 -Node: Finding The Bug795201 -Node: List of Debugger Commands801688 -Node: Breakpoint Control803022 -Node: Debugger Execution Control806686 -Node: Viewing And Changing Data810046 -Node: Execution Stack813402 -Node: Debugger Info814869 -Node: Miscellaneous Debugger Commands818863 -Node: Readline Support824041 -Node: Limitations824872 -Node: Arbitrary Precision Arithmetic827124 -Ref: Arbitrary Precision Arithmetic-Footnote-1828773 -Node: General Arithmetic828921 -Node: Floating Point Issues830641 -Node: String Conversion Precision831522 -Ref: String Conversion Precision-Footnote-1833227 -Node: Unexpected Results833336 -Node: POSIX Floating Point Problems835489 -Ref: POSIX Floating Point Problems-Footnote-1839314 -Node: Integer Programming839352 -Node: Floating-point Programming841091 -Ref: Floating-point Programming-Footnote-1847422 -Ref: Floating-point Programming-Footnote-2847692 -Node: Floating-point Representation847956 -Node: Floating-point Context849121 -Ref: table-ieee-formats849960 -Node: Rounding Mode851344 -Ref: table-rounding-modes851823 -Ref: Rounding Mode-Footnote-1854838 -Node: Gawk and MPFR855017 -Node: Arbitrary Precision Floats856426 -Ref: Arbitrary Precision Floats-Footnote-1858869 -Node: Setting Precision859185 -Ref: table-predefined-precision-strings859871 -Node: Setting Rounding Mode862016 -Ref: table-gawk-rounding-modes862420 -Node: Floating-point Constants863607 -Node: Changing Precision865036 -Ref: Changing Precision-Footnote-1866433 -Node: Exact Arithmetic866607 -Node: Arbitrary Precision Integers869745 -Ref: Arbitrary Precision Integers-Footnote-1872760 -Node: Dynamic Extensions872907 -Node: Extension Intro874365 -Node: Plugin License875630 -Node: Extension Mechanism Outline876315 -Ref: load-extension876732 -Ref: load-new-function878210 -Ref: call-new-function879205 -Node: Extension API Description881220 -Node: Extension API Functions Introduction882507 -Node: General Data Types887434 -Ref: General Data Types-Footnote-1893129 -Node: Requesting Values893428 -Ref: table-value-types-returned894165 -Node: Memory Allocation Functions895119 -Ref: Memory Allocation Functions-Footnote-1897865 -Node: Constructor Functions897961 -Node: Registration Functions899719 -Node: Extension Functions900404 -Node: Exit Callback Functions902706 -Node: Extension Version String903955 -Node: Input Parsers904605 -Node: Output Wrappers914362 -Node: Two-way processors918872 -Node: Printing Messages921080 -Ref: Printing Messages-Footnote-1922157 -Node: Updating `ERRNO'922309 -Node: Accessing Parameters923048 -Node: Symbol Table Access924278 -Node: Symbol table by name924792 -Node: Symbol table by cookie926768 -Ref: Symbol table by cookie-Footnote-1930900 -Node: Cached values930963 -Ref: Cached values-Footnote-1934453 -Node: Array Manipulation934544 -Ref: Array Manipulation-Footnote-1935642 -Node: Array Data Types935681 -Ref: Array Data Types-Footnote-1938384 -Node: Array Functions938476 -Node: Flattening Arrays942312 -Node: Creating Arrays949164 -Node: Extension API Variables953889 -Node: Extension Versioning954525 -Node: Extension API Informational Variables956426 -Node: Extension API Boilerplate957512 -Node: Finding Extensions961316 -Node: Extension Example961876 -Node: Internal File Description962606 -Node: Internal File Ops966697 -Ref: Internal File Ops-Footnote-1978206 -Node: Using Internal File Ops978346 -Ref: Using Internal File Ops-Footnote-1980693 -Node: Extension Samples980959 -Node: Extension Sample File Functions982483 -Node: Extension Sample Fnmatch990970 -Node: Extension Sample Fork992739 -Node: Extension Sample Inplace993952 -Node: Extension Sample Ord995730 -Node: Extension Sample Readdir996566 -Node: Extension Sample Revout998098 -Node: Extension Sample Rev2way998691 -Node: Extension Sample Read write array999381 -Node: Extension Sample Readfile1001264 -Node: Extension Sample API Tests1002364 -Node: Extension Sample Time1002889 -Node: gawkextlib1004253 -Node: Language History1007034 -Node: V7/SVR3.11008627 -Node: SVR41010947 -Node: POSIX1012389 -Node: BTL1013775 -Node: POSIX/GNU1014509 -Node: Feature History1020108 -Node: Common Extensions1033084 -Node: Ranges and Locales1034396 -Ref: Ranges and Locales-Footnote-11039013 -Ref: Ranges and Locales-Footnote-21039040 -Ref: Ranges and Locales-Footnote-31039274 -Node: Contributors1039495 -Node: Installation1044876 -Node: Gawk Distribution1045770 -Node: Getting1046254 -Node: Extracting1047080 -Node: Distribution contents1048772 -Node: Unix Installation1054493 -Node: Quick Installation1055110 -Node: Additional Configuration Options1057556 -Node: Configuration Philosophy1059292 -Node: Non-Unix Installation1061646 -Node: PC Installation1062104 -Node: PC Binary Installation1063403 -Node: PC Compiling1065251 -Node: PC Testing1068195 -Node: PC Using1069371 -Node: Cygwin1073539 -Node: MSYS1074348 -Node: VMS Installation1074862 -Node: VMS Compilation1075658 -Ref: VMS Compilation-Footnote-11076910 -Node: VMS Dynamic Extensions1076968 -Node: VMS Installation Details1078341 -Node: VMS Running1080592 -Node: VMS GNV1083426 -Node: VMS Old Gawk1084149 -Node: Bugs1084619 -Node: Other Versions1088537 -Node: Notes1094621 -Node: Compatibility Mode1095421 -Node: Additions1096204 -Node: Accessing The Source1097131 -Node: Adding Code1098571 -Node: New Ports1104616 -Node: Derived Files1108751 -Ref: Derived Files-Footnote-11114072 -Ref: Derived Files-Footnote-21114106 -Ref: Derived Files-Footnote-31114706 -Node: Future Extensions1114804 -Node: Implementation Limitations1115387 -Node: Extension Design1116639 -Node: Old Extension Problems1117793 -Ref: Old Extension Problems-Footnote-11119301 -Node: Extension New Mechanism Goals1119358 -Ref: Extension New Mechanism Goals-Footnote-11122723 -Node: Extension Other Design Decisions1122909 -Node: Extension Future Growth1125015 -Node: Old Extension Mechanism1125851 -Node: Basic Concepts1127591 -Node: Basic High Level1128272 -Ref: figure-general-flow1128544 -Ref: figure-process-flow1129143 -Ref: Basic High Level-Footnote-11132372 -Node: Basic Data Typing1132557 -Node: Glossary1135912 -Node: Copying1161143 -Node: GNU Free Documentation License1198699 -Node: Index1223835 +Node: Nondecimal-numbers301952 +Node: Regexp Constants304952 +Node: Using Constant Regexps305427 +Node: Variables308497 +Node: Using Variables309152 +Node: Assignment Options310876 +Node: Conversion312751 +Ref: table-locale-affects318187 +Ref: Conversion-Footnote-1318811 +Node: All Operators318920 +Node: Arithmetic Ops319550 +Node: Concatenation322055 +Ref: Concatenation-Footnote-1324851 +Node: Assignment Ops324971 +Ref: table-assign-ops329954 +Node: Increment Ops331271 +Node: Truth Values and Conditions334709 +Node: Truth Values335792 +Node: Typing and Comparison336841 +Node: Variable Typing337634 +Ref: Variable Typing-Footnote-1341534 +Node: Comparison Operators341656 +Ref: table-relational-ops342066 +Node: POSIX String Comparison345614 +Ref: POSIX String Comparison-Footnote-1346698 +Node: Boolean Ops346836 +Ref: Boolean Ops-Footnote-1350906 +Node: Conditional Exp350997 +Node: Function Calls352724 +Node: Precedence356482 +Node: Locales360151 +Node: Patterns and Actions361240 +Node: Pattern Overview362294 +Node: Regexp Patterns363971 +Node: Expression Patterns364514 +Node: Ranges368295 +Node: BEGIN/END371401 +Node: Using BEGIN/END372163 +Ref: Using BEGIN/END-Footnote-1374899 +Node: I/O And BEGIN/END375005 +Node: BEGINFILE/ENDFILE377290 +Node: Empty380226 +Node: Using Shell Variables380543 +Node: Action Overview382826 +Node: Statements385171 +Node: If Statement387025 +Node: While Statement388524 +Node: Do Statement390568 +Node: For Statement391724 +Node: Switch Statement394876 +Node: Break Statement396979 +Node: Continue Statement399034 +Node: Next Statement400827 +Node: Nextfile Statement403217 +Node: Exit Statement405872 +Node: Built-in Variables408274 +Node: User-modified409369 +Ref: User-modified-Footnote-1417727 +Node: Auto-set417789 +Ref: Auto-set-Footnote-1430856 +Ref: Auto-set-Footnote-2431061 +Node: ARGC and ARGV431117 +Node: Arrays434971 +Node: Array Basics436476 +Node: Array Intro437302 +Node: Reference to Elements441619 +Node: Assigning Elements443889 +Node: Array Example444380 +Node: Scanning an Array446112 +Node: Controlling Scanning448426 +Ref: Controlling Scanning-Footnote-1453513 +Node: Delete453829 +Ref: Delete-Footnote-1456594 +Node: Numeric Array Subscripts456651 +Node: Uninitialized Subscripts458834 +Node: Multidimensional460461 +Node: Multiscanning463554 +Node: Arrays of Arrays465143 +Node: Functions469783 +Node: Built-in470602 +Node: Calling Built-in471680 +Node: Numeric Functions473668 +Ref: Numeric Functions-Footnote-1477502 +Ref: Numeric Functions-Footnote-2477859 +Ref: Numeric Functions-Footnote-3477907 +Node: String Functions478176 +Ref: String Functions-Footnote-1501179 +Ref: String Functions-Footnote-2501308 +Ref: String Functions-Footnote-3501556 +Node: Gory Details501643 +Ref: table-sub-escapes503322 +Ref: table-sub-posix-92504676 +Ref: table-sub-proposed506027 +Ref: table-posix-sub507381 +Ref: table-gensub-escapes508926 +Ref: Gory Details-Footnote-1510102 +Ref: Gory Details-Footnote-2510153 +Node: I/O Functions510304 +Ref: I/O Functions-Footnote-1517300 +Node: Time Functions517447 +Ref: Time Functions-Footnote-1528440 +Ref: Time Functions-Footnote-2528508 +Ref: Time Functions-Footnote-3528666 +Ref: Time Functions-Footnote-4528777 +Ref: Time Functions-Footnote-5528889 +Ref: Time Functions-Footnote-6529116 +Node: Bitwise Functions529382 +Ref: table-bitwise-ops529944 +Ref: Bitwise Functions-Footnote-1534189 +Node: Type Functions534373 +Node: I18N Functions535524 +Node: User-defined537176 +Node: Definition Syntax537980 +Ref: Definition Syntax-Footnote-1542894 +Node: Function Example542963 +Ref: Function Example-Footnote-1545612 +Node: Function Caveats545634 +Node: Calling A Function546152 +Node: Variable Scope547107 +Node: Pass By Value/Reference550070 +Node: Return Statement553578 +Node: Dynamic Typing556559 +Node: Indirect Calls557490 +Node: Library Functions567177 +Ref: Library Functions-Footnote-1570690 +Ref: Library Functions-Footnote-2570833 +Node: Library Names571004 +Ref: Library Names-Footnote-1574477 +Ref: Library Names-Footnote-2574697 +Node: General Functions574783 +Node: Strtonum Function575811 +Node: Assert Function578741 +Node: Round Function582067 +Node: Cliff Random Function583608 +Node: Ordinal Functions584624 +Ref: Ordinal Functions-Footnote-1587701 +Ref: Ordinal Functions-Footnote-2587953 +Node: Join Function588164 +Ref: Join Function-Footnote-1589935 +Node: Getlocaltime Function590135 +Node: Readfile Function593876 +Node: Data File Management595715 +Node: Filetrans Function596347 +Node: Rewind Function600416 +Node: File Checking601803 +Node: Empty Files602897 +Node: Ignoring Assigns605127 +Node: Getopt Function606681 +Ref: Getopt Function-Footnote-1617984 +Node: Passwd Functions618187 +Ref: Passwd Functions-Footnote-1627165 +Node: Group Functions627253 +Node: Walking Arrays635337 +Node: Sample Programs637473 +Node: Running Examples638147 +Node: Clones638875 +Node: Cut Program640099 +Node: Egrep Program649950 +Ref: Egrep Program-Footnote-1657723 +Node: Id Program657833 +Node: Split Program661482 +Ref: Split Program-Footnote-1665001 +Node: Tee Program665129 +Node: Uniq Program667932 +Node: Wc Program675361 +Ref: Wc Program-Footnote-1679627 +Ref: Wc Program-Footnote-2679827 +Node: Miscellaneous Programs679919 +Node: Dupword Program681107 +Node: Alarm Program683138 +Node: Translate Program687945 +Ref: Translate Program-Footnote-1692332 +Ref: Translate Program-Footnote-2692580 +Node: Labels Program692714 +Ref: Labels Program-Footnote-1696085 +Node: Word Sorting696169 +Node: History Sorting700053 +Node: Extract Program701892 +Ref: Extract Program-Footnote-1709395 +Node: Simple Sed709523 +Node: Igawk Program712585 +Ref: Igawk Program-Footnote-1727756 +Ref: Igawk Program-Footnote-2727957 +Node: Anagram Program728095 +Node: Signature Program731163 +Node: Advanced Features732263 +Node: Nondecimal Data734149 +Node: Array Sorting735732 +Node: Controlling Array Traversal736429 +Node: Array Sorting Functions744713 +Ref: Array Sorting Functions-Footnote-1748582 +Node: Two-way I/O748776 +Ref: Two-way I/O-Footnote-1754208 +Node: TCP/IP Networking754290 +Node: Profiling757134 +Node: Internationalization764637 +Node: I18N and L10N766062 +Node: Explaining gettext766748 +Ref: Explaining gettext-Footnote-1771816 +Ref: Explaining gettext-Footnote-2772000 +Node: Programmer i18n772165 +Node: Translator i18n776392 +Node: String Extraction777186 +Ref: String Extraction-Footnote-1778147 +Node: Printf Ordering778233 +Ref: Printf Ordering-Footnote-1781015 +Node: I18N Portability781079 +Ref: I18N Portability-Footnote-1783528 +Node: I18N Example783591 +Ref: I18N Example-Footnote-1786229 +Node: Gawk I18N786301 +Node: Debugger786922 +Node: Debugging787893 +Node: Debugging Concepts788326 +Node: Debugging Terms790182 +Node: Awk Debugging792779 +Node: Sample Debugging Session793671 +Node: Debugger Invocation794191 +Node: Finding The Bug795524 +Node: List of Debugger Commands802011 +Node: Breakpoint Control803345 +Node: Debugger Execution Control807009 +Node: Viewing And Changing Data810369 +Node: Execution Stack813725 +Node: Debugger Info815192 +Node: Miscellaneous Debugger Commands819186 +Node: Readline Support824364 +Node: Limitations825195 +Node: Arbitrary Precision Arithmetic827447 +Ref: Arbitrary Precision Arithmetic-Footnote-1829096 +Node: General Arithmetic829244 +Node: Floating Point Issues830964 +Node: String Conversion Precision831845 +Ref: String Conversion Precision-Footnote-1833550 +Node: Unexpected Results833659 +Node: POSIX Floating Point Problems835812 +Ref: POSIX Floating Point Problems-Footnote-1839637 +Node: Integer Programming839675 +Node: Floating-point Programming841414 +Ref: Floating-point Programming-Footnote-1847745 +Ref: Floating-point Programming-Footnote-2848015 +Node: Floating-point Representation848279 +Node: Floating-point Context849444 +Ref: table-ieee-formats850283 +Node: Rounding Mode851667 +Ref: table-rounding-modes852146 +Ref: Rounding Mode-Footnote-1855161 +Node: Gawk and MPFR855340 +Node: Arbitrary Precision Floats856749 +Ref: Arbitrary Precision Floats-Footnote-1859192 +Node: Setting Precision859508 +Ref: table-predefined-precision-strings860194 +Node: Setting Rounding Mode862339 +Ref: table-gawk-rounding-modes862743 +Node: Floating-point Constants863930 +Node: Changing Precision865359 +Ref: Changing Precision-Footnote-1866756 +Node: Exact Arithmetic866930 +Node: Arbitrary Precision Integers870068 +Ref: Arbitrary Precision Integers-Footnote-1873083 +Node: Dynamic Extensions873230 +Node: Extension Intro874688 +Node: Plugin License875953 +Node: Extension Mechanism Outline876638 +Ref: load-extension877055 +Ref: load-new-function878533 +Ref: call-new-function879528 +Node: Extension API Description881543 +Node: Extension API Functions Introduction882830 +Node: General Data Types887757 +Ref: General Data Types-Footnote-1893452 +Node: Requesting Values893751 +Ref: table-value-types-returned894488 +Node: Memory Allocation Functions895442 +Ref: Memory Allocation Functions-Footnote-1898188 +Node: Constructor Functions898284 +Node: Registration Functions900042 +Node: Extension Functions900727 +Node: Exit Callback Functions903029 +Node: Extension Version String904278 +Node: Input Parsers904928 +Node: Output Wrappers914685 +Node: Two-way processors919195 +Node: Printing Messages921403 +Ref: Printing Messages-Footnote-1922480 +Node: Updating `ERRNO'922632 +Node: Accessing Parameters923371 +Node: Symbol Table Access924601 +Node: Symbol table by name925115 +Node: Symbol table by cookie927091 +Ref: Symbol table by cookie-Footnote-1931223 +Node: Cached values931286 +Ref: Cached values-Footnote-1934776 +Node: Array Manipulation934867 +Ref: Array Manipulation-Footnote-1935965 +Node: Array Data Types936004 +Ref: Array Data Types-Footnote-1938707 +Node: Array Functions938799 +Node: Flattening Arrays942635 +Node: Creating Arrays949487 +Node: Extension API Variables954212 +Node: Extension Versioning954848 +Node: Extension API Informational Variables956749 +Node: Extension API Boilerplate957835 +Node: Finding Extensions961639 +Node: Extension Example962199 +Node: Internal File Description962929 +Node: Internal File Ops967020 +Ref: Internal File Ops-Footnote-1978529 +Node: Using Internal File Ops978669 +Ref: Using Internal File Ops-Footnote-1981016 +Node: Extension Samples981282 +Node: Extension Sample File Functions982806 +Node: Extension Sample Fnmatch991293 +Node: Extension Sample Fork993062 +Node: Extension Sample Inplace994275 +Node: Extension Sample Ord996053 +Node: Extension Sample Readdir996889 +Node: Extension Sample Revout998421 +Node: Extension Sample Rev2way999014 +Node: Extension Sample Read write array999704 +Node: Extension Sample Readfile1001587 +Node: Extension Sample API Tests1002687 +Node: Extension Sample Time1003212 +Node: gawkextlib1004576 +Node: Language History1007357 +Node: V7/SVR3.11008950 +Node: SVR41011270 +Node: POSIX1012712 +Node: BTL1014098 +Node: POSIX/GNU1014832 +Node: Feature History1020431 +Node: Common Extensions1033407 +Node: Ranges and Locales1034719 +Ref: Ranges and Locales-Footnote-11039336 +Ref: Ranges and Locales-Footnote-21039363 +Ref: Ranges and Locales-Footnote-31039597 +Node: Contributors1039818 +Node: Installation1045199 +Node: Gawk Distribution1046093 +Node: Getting1046577 +Node: Extracting1047403 +Node: Distribution contents1049095 +Node: Unix Installation1054816 +Node: Quick Installation1055433 +Node: Additional Configuration Options1057879 +Node: Configuration Philosophy1059615 +Node: Non-Unix Installation1061969 +Node: PC Installation1062427 +Node: PC Binary Installation1063726 +Node: PC Compiling1065574 +Node: PC Testing1068518 +Node: PC Using1069694 +Node: Cygwin1073862 +Node: MSYS1074671 +Node: VMS Installation1075185 +Node: VMS Compilation1075981 +Ref: VMS Compilation-Footnote-11077233 +Node: VMS Dynamic Extensions1077291 +Node: VMS Installation Details1078664 +Node: VMS Running1080915 +Node: VMS GNV1083749 +Node: VMS Old Gawk1084472 +Node: Bugs1084942 +Node: Other Versions1088860 +Node: Notes1094944 +Node: Compatibility Mode1095744 +Node: Additions1096527 +Node: Accessing The Source1097454 +Node: Adding Code1098894 +Node: New Ports1104939 +Node: Derived Files1109074 +Ref: Derived Files-Footnote-11114395 +Ref: Derived Files-Footnote-21114429 +Ref: Derived Files-Footnote-31115029 +Node: Future Extensions1115127 +Node: Implementation Limitations1115710 +Node: Extension Design1116958 +Node: Old Extension Problems1118112 +Ref: Old Extension Problems-Footnote-11119620 +Node: Extension New Mechanism Goals1119677 +Ref: Extension New Mechanism Goals-Footnote-11123042 +Node: Extension Other Design Decisions1123228 +Node: Extension Future Growth1125334 +Node: Old Extension Mechanism1126170 +Node: Basic Concepts1127910 +Node: Basic High Level1128591 +Ref: figure-general-flow1128863 +Ref: figure-process-flow1129462 +Ref: Basic High Level-Footnote-11132691 +Node: Basic Data Typing1132876 +Node: Glossary1136231 +Node: Copying1161462 +Node: GNU Free Documentation License1199018 +Node: Index1224154  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 24cd006b..f721b5f4 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -9874,9 +9874,9 @@ have different forms, but are stored identically internally. A @dfn{numeric constant} stands for a number. This number can be an integer, a decimal fraction, or a number in scientific (exponential) notation.@footnote{The internal representation of all numbers, -including integers, uses double precision -floating-point numbers. -On most modern systems, these are in IEEE 754 standard format.} +including integers, uses double precision floating-point numbers. +On most modern systems, these are in IEEE 754 standard format. +@xref{Arbitrary Precision Arithmetic}, for much more information.} Here are some examples of numeric constants that all have the same value: @@ -10118,7 +10118,7 @@ upon the contents of the current input record. Constant regular expressions are also used as the first argument for the @code{gensub()}, @code{sub()}, and @code{gsub()} functions, as the second argument of the @code{match()} function, -and as the third argument of the @code{patsplit()} function +and as the third argument of the @code{split()} and @code{patsplit()} functions (@pxref{String Functions}). Modern implementations of @command{awk}, including @command{gawk}, allow the third argument of @code{split()} to be a regexp constant, but some @@ -10360,32 +10360,28 @@ specifies the output format to use when printing numbers with @code{print}. conversion from the semantics of printing. Both @code{CONVFMT} and @code{OFMT} have the same default value: @code{"%.6g"}. In the vast majority of cases, old @command{awk} programs do not change their behavior. -However, these semantics for @code{OFMT} are something to keep in mind if you must -port your new-style program to older implementations of @command{awk}. -We recommend -that instead of changing your programs, just port @command{gawk} itself. -@xref{Print}, -for more information on the @code{print} statement. - -And, once again, where you are can matter when it comes to converting -between numbers and strings. In @ref{Locales}, we mentioned that -the local character set and language (the locale) can affect how -@command{gawk} matches characters. The locale also affects numeric -formats. In particular, for @command{awk} programs, it affects the -decimal point character. The @code{"C"} locale, and most English-language -locales, use the period character (@samp{.}) as the decimal point. -However, many (if not most) European and non-English locales use the comma -(@samp{,}) as the decimal point character. +@xref{Print}, for more information on the @code{print} statement. + +Where you are can matter when it comes to converting between numbers and +strings. The local character set and language---the @dfn{locale}---can +affect numeric formats. In particular, for @command{awk} programs, +it affects the decimal point character and the thousands-separator +character. The @code{"C"} locale, and most English-language locales, +use the period character (@samp{.}) as the decimal point and don't +have a thousands separator. However, many (if not most) European and +non-English locales use the comma (@samp{,}) as the decimal point +character. European locales often use either a space or a period as +the thousands separator, if they have one. @cindex dark corner, locale's decimal point character The POSIX standard says that @command{awk} always uses the period as the decimal -point when reading the @command{awk} program source code, and for command-line -variable assignments (@pxref{Other Arguments}). -However, when interpreting input data, for @code{print} and @code{printf} output, -and for number to string conversion, the local decimal point character is used. -@value{DARKCORNER} -Here are some examples indicating the difference in behavior, -on a GNU/Linux system: +point when reading the @command{awk} program source code, and for +command-line variable assignments (@pxref{Other Arguments}). However, +when interpreting input data, for @code{print} and @code{printf} output, +and for number to string conversion, the local decimal point character +is used. @value{DARKCORNER} In all cases, numbers in source code and +in input data cannot have a thousands separator. Here are some examples +indicating the difference in behavior, on a GNU/Linux system: @example $ @kbd{export POSIXLY_CORRECT=1} @ii{Force POSIX behavior} @@ -10400,7 +10396,7 @@ $ @kbd{echo 4,321 | LC_ALL=en_DK.utf-8 gawk '@{ print $1 + 1 @}'} @end example @noindent -The @samp{en_DK.utf-8} locale is for English in Denmark, where the comma acts as +The @code{en_DK.utf-8} locale is for English in Denmark, where the comma acts as the decimal point separator. In the normal @code{"C"} locale, @command{gawk} treats @samp{4,321} as @samp{4}, while in the Danish locale, it's treated as the full number, 4.321. @@ -10547,7 +10543,7 @@ b * int(a / b) + (a % b) == a @end example One possibly undesirable effect of this definition of remainder is that -@code{@var{x} % @var{y}} is negative if @var{x} is negative. Thus: +@samp{@var{x} % @var{y}} is negative if @var{x} is negative. Thus: @example -17 % 8 = -1 @@ -10641,7 +10637,7 @@ BEGIN @{ @end example @noindent -It is not defined whether the assignment to @code{a} happens +It is not defined whether the second assignment to @code{a} happens before or after the value of @code{a} is retrieved for producing the concatenated value. The result could be either @samp{don't panic}, or @samp{panic panic}. @@ -10763,8 +10759,8 @@ element. (Such values are called @dfn{rvalues}.) @cindex variables, types of It is important to note that variables do @emph{not} have permanent types. -A variable's type is simply the type of whatever value it happens -to hold at the moment. In the following program fragment, the variable +A variable's type is simply the type of whatever value was last assigned +to it. In the following program fragment, the variable @code{foo} has a numeric value at first, and a string value later on: @example @@ -10865,6 +10861,7 @@ The indices of @code{bar} are practically guaranteed to be different, because and see @ref{Numeric Functions}, for more information). This example illustrates an important fact about assignment operators: the lefthand expression is only evaluated @emph{once}. + It is up to the implementation as to which expression is evaluated first, the lefthand or the righthand. Consider this example: @@ -10897,17 +10894,17 @@ to a number. @caption{Arithmetic Assignment Operators} @multitable @columnfractions .30 .70 @headitem Operator @tab Effect -@item @var{lvalue} @code{+=} @var{increment} @tab Adds @var{increment} to the value of @var{lvalue}. -@item @var{lvalue} @code{-=} @var{decrement} @tab Subtracts @var{decrement} from the value of @var{lvalue}. -@item @var{lvalue} @code{*=} @var{coefficient} @tab Multiplies the value of @var{lvalue} by @var{coefficient}. -@item @var{lvalue} @code{/=} @var{divisor} @tab Divides the value of @var{lvalue} by @var{divisor}. -@item @var{lvalue} @code{%=} @var{modulus} @tab Sets @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 Raises @var{lvalue} to the power @var{power}. @value{COMMONEXT} +@item @var{lvalue} @code{**=} @var{power} @tab Raise @var{lvalue} to the power @var{power}. @value{COMMONEXT} @end multitable @end float @@ -10957,10 +10954,8 @@ A workaround is: awk '/[=]=/' /dev/null @end example -@command{gawk} does not have this problem, -nor do the other -freely available versions described in -@ref{Other Versions}. +@command{gawk} does not have this problem; Brian Kernighan's @command{awk} +and @command{mawk} also do not (@pxref{Other Versions}). @docbook @@ -11005,10 +11000,8 @@ A workaround is: awk '/[=]=/' /dev/null @end example -@command{gawk} does not have this problem, -nor do the other -freely available versions described in -@ref{Other Versions}. +@command{gawk} does not have this problem; Brian Kernighan's @command{awk} +and @command{mawk} also do not (@pxref{Other Versions}). @end cartouche @end ifnotdocbook @c ENDOFRANGE exas @@ -11033,11 +11026,10 @@ are convenient abbreviations for very common operations. @cindex side effects, decrement/increment operators The operator used for adding one is written @samp{++}. It can be used to increment a variable either before or after taking its value. -To pre-increment a variable @code{v}, write @samp{++v}. This adds +To @dfn{pre-increment} a variable @code{v}, write @samp{++v}. This adds one to the value of @code{v}---that new value is also the value of the -expression. (The assignment expression @samp{v += 1} is completely -equivalent.) -Writing the @samp{++} after the variable specifies post-increment. This +expression. (The assignment expression @samp{v += 1} is completely equivalent.) +Writing the @samp{++} after the variable specifies @dfn{post-increment}. This increments the variable value just the same; the difference is that the value of the increment expression itself is the variable's @emph{old} value. Thus, if @code{foo} has the value four, then the expression @samp{foo++} @@ -11049,7 +11041,18 @@ 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 10e12). +long as you stick to numbers that are fairly small (less than +@iftex +@math{10^12}). +@end iftex +@ifnottex +@ifnotdocbook +10e12). +@end ifnotdocbook +@end ifnottex +@docbook +1012). @c +@end docbook @cindex @code{$} (dollar sign), incrementing fields and arrays @cindex dollar sign (@code{$}), incrementing fields and arrays @@ -11295,6 +11298,7 @@ like a number---for example, @code{@w{" +2"}}. This concept is used for determining the type of a variable. The type of the variable is important because the types of two variables determine how they are compared. + The various versions of the POSIX standard did not get the rules quite right for several editions. Fortunately, as of at least the 2008 standard (and possibly earlier), the standard has been fixed, @@ -11388,6 +11392,7 @@ STRNUM &&string &numeric &numeric\cr }}} @end tex @ifnottex +@ifnotdocbook @display +---------------------------------------------- | STRING NUMERIC STRNUM @@ -11400,7 +11405,51 @@ NUMERIC | string numeric numeric STRNUM | string numeric numeric --------+---------------------------------------------- @end display +@end ifnotdocbook @end ifnottex +@docbook + + + + + + + + + +STRING +NUMERIC +STRNUM + + + + + +STRING +string +string +string + + + +NUMERIC +string +numeric +numeric + + + +STRNUM +string +numeric +numeric + + + + + + +@end docbook The basic idea is that user input that looks numeric---and @emph{only} user input---should be treated as numeric, even though it is actually @@ -11419,8 +11468,8 @@ 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. Thus, the six-character input string @w{@samp{ +3.14}} receives the -@var{strnum} attribute. In contrast, the eight-character literal -@w{@code{" +3.14"}} appearing in program text is a string constant. +@var{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: @@ -11606,7 +11655,9 @@ where this is discussed in more detail. @subsubsection String Comparison With POSIX Rules The POSIX standard says that string comparison is performed based -on the locale's collating order. This is usually very different +on the locale's @dfn{collating order}. This is the order in which +characters sort, as defined by the locale (for more discussion, +@pxref{Ranges and 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 @@ -11614,7 +11665,7 @@ to behave the same way as if the strings are compared with the C Because this behavior differs considerably from existing practice, @command{gawk} only implements it when in POSIX mode (@pxref{Options}). -Here is an example to illustrate the difference, in an @samp{en_US.UTF-8} +Here is an example to illustrate the difference, in an @code{en_US.UTF-8} locale: @example @@ -11830,7 +11881,7 @@ However, putting a newline in front of either character does not work without using backslash continuation (@pxref{Statements/Lines}). If @option{--posix} is specified -(@pxref{Options}), then this extension is disabled. +(@pxref{Options}), this extension is disabled. @node Function Calls @section Function Calls @@ -11849,6 +11900,8 @@ functions and their descriptions. In addition, you can define functions for use in your program. @xref{User-defined}, for instructions on how to do this. +Finally, @command{gawk} lets you write functions in C or C++ +that may be called from your program: see @ref{Dynamic Extensions}. @cindex arguments, in function calls The way to use a function is with a @dfn{function call} expression, @@ -11899,12 +11952,12 @@ when you write the source code to your program. We defer discussion of this feature until later; see @ref{Indirect Calls}. @cindex side effects, function calls -Like every other expression, the function call has a value, which is -computed by the function based on the arguments you give it. In this -example, the value of @samp{sqrt(@var{argument})} is the square root of -@var{argument}. -The following program reads numbers, one number per line, and prints the -square root of each one: +Like every other expression, the function call has a value, often +called the @dfn{return value}, which is computed by the function +based on the arguments you give it. In this example, the return value +of @samp{sqrt(@var{argument})} is the square root of @var{argument}. +The following program reads numbers, one number per line, and prints +the square root of each one: @example $ @kbd{awk '@{ print "The square root of", $1, "is", sqrt($1) @}'} @@ -12219,10 +12272,10 @@ A single expression. It matches when its value is nonzero (if a number) or non-null (if a string). (@xref{Expression Patterns}.) -@item @var{pat1}, @var{pat2} +@item @var{begpat}, @var{endpat} A pair of patterns separated by a comma, specifying a range of records. -The range includes both the initial record that matches @var{pat1} and -the final record that matches @var{pat2}. +The range includes both the initial record that matches @var{begpat} and +the final record that matches @var{endpat}. (@xref{Ranges}.) @item BEGIN @@ -12234,7 +12287,7 @@ Special patterns for you to supply startup or cleanup actions for your @item BEGINFILE @itemx ENDFILE Special patterns for you to supply startup or cleanup actions to be -done on a per file basis. +done on a per-file basis. (@xref{BEGINFILE/ENDFILE}.) @item @var{empty} @@ -12395,7 +12448,7 @@ 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 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 turned off again +input record; when this succeeds, the range pattern is @dfn{turned off} again for the following record. Then the range pattern goes back to checking @var{begpat} against each record. @@ -12549,7 +12602,7 @@ rule checks the @code{FNR} and @code{NR} variables. @subsubsection Input/Output from @code{BEGIN} and @code{END} Rules @cindex input/output, from @code{BEGIN} and @code{END} -There are several (sometimes subtle) points to remember when doing I/O +There are several (sometimes subtle) points to be aware of when doing I/O from a @code{BEGIN} or @code{END} rule. The first has to do with the value of @code{$0} in a @code{BEGIN} rule. Because @code{BEGIN} rules are executed before any input is read, @@ -12610,8 +12663,19 @@ This @value{SECTION} describes a @command{gawk}-specific feature. Two special kinds of rule, @code{BEGINFILE} and @code{ENDFILE}, give you ``hooks'' into @command{gawk}'s command-line file processing loop. -As with the @code{BEGIN} and @code{END} rules (@pxref{BEGIN/END}), all -@code{BEGINFILE} rules in a program are merged, in the order they are +As with the @code{BEGIN} and @code{END} rules +@ifnottex +@ifnotdocbook +(@pxref{BEGIN/END}), +@end ifnotdocbook +@end ifnottex +@iftex +(see the previous section), +@end iftex +@ifdocbook +(see the previous section), +@end ifdocbook +all @code{BEGINFILE} rules in a program are merged, in the order they are read by @command{gawk}, and all @code{ENDFILE} rules are merged as well. The body of the @code{BEGINFILE} rules is executed just before @@ -12639,10 +12703,11 @@ the file entirely. Otherwise, @command{gawk} exits with the usual fatal error. @item -If you have written extensions that modify the record handling (by inserting -an ``input parser''), 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}.) +If you have written extensions that modify the record handling (by +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}.) @end itemize The @code{ENDFILE} rule is called when @command{gawk} has finished processing @@ -12725,7 +12790,7 @@ into the body of the @command{awk} program. @cindex shells, quoting The most common method is to use shell quoting to substitute the variable's value into the program inside the script. -For example, in the following program: +For example, consider the following program: @example printf "Enter search pattern: " @@ -12735,7 +12800,7 @@ awk "/$pattern/ "'@{ nmatches++ @} @end example @noindent -the @command{awk} program consists of two pieces of quoted text +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 @code{pattern} shell variable inside the quotes. @@ -12749,8 +12814,8 @@ match up the quotes when reading the program. A better method is to use @command{awk}'s variable assignment feature (@pxref{Assignment Options}) -to assign the shell variable's value to an @command{awk} variable's -value. Then use dynamic regexps to match the pattern +to assign the shell variable's value to an @command{awk} variable. +Then use dynamic regexps to match the pattern (@pxref{Computed Regexps}). The following shows how to redo the previous example using this technique: @@ -12803,7 +12868,7 @@ function @var{name}(@var{args}) @{ @dots{} @} @cindex @code{;} (semicolon), separating statements in actions @cindex semicolon (@code{;}), separating statements in actions An action consists of one or more @command{awk} @dfn{statements}, enclosed -in curly braces (@samp{@{@dots{}@}}). Each statement specifies one +in curly braces (@samp{@{@r{@dots{}}@}}). Each statement specifies one thing to do. The statements are separated by newlines or semicolons. The curly braces around an action must be used even if the action contains only one statement, or if it contains no statements at @@ -12833,10 +12898,9 @@ programs. The @command{awk} language gives you C-like constructs special ones (@pxref{Statements}). @item Compound statements -Consist of one or more statements enclosed in -curly braces. A compound statement is used in order to put several -statements together in the body of an @code{if}, @code{while}, @code{do}, -or @code{for} statement. +Enclose one or more statements in curly braces. A compound statement +is used in order to put several statements together in the body of an +@code{if}, @code{while}, @code{do}, or @code{for} statement. @item Input statements Use the @code{getline} command @@ -13170,6 +13234,8 @@ for more information on this version of the @code{for} loop. @cindex @code{default} keyword This @value{SECTION} describes a @command{gawk}-specific feature. +If @command{gawk} is in compatibility mode (@pxref{Options}), +it is not available. The @code{switch} statement allows the evaluation of an expression and the execution of statements based on a @code{case} match. Case statements @@ -13226,11 +13292,6 @@ the @code{print} statement is executed and then falls through into the the @minus{}1 case will also be executed since the @code{default} does not halt execution. -This @code{switch} statement is a @command{gawk} extension. -If @command{gawk} is in compatibility mode -(@pxref{Options}), -it is not available. - @node Break Statement @subsection The @code{break} Statement @cindex @code{break} statement @@ -13245,15 +13306,15 @@ numbers: @example # find smallest divisor of num @{ - num = $1 - for (div = 2; div * div <= num; div++) @{ - if (num % div == 0) - break - @} - if (num % div == 0) - printf "Smallest divisor of %d is %d\n", num, div - else - printf "%d is prime\n", num + num = $1 + for (div = 2; div * div <= num; div++) @{ + if (num % div == 0) + break + @} + if (num % div == 0) + printf "Smallest divisor of %d is %d\n", num, div + else + printf "%d is prime\n", num @} @end example @@ -13271,17 +13332,17 @@ an @code{if}: @example # 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 - break - @} - if (div * div > num) @{ - printf "%d is prime\n", num - break + num = $1 + for (div = 2; ; div++) @{ + if (num % div == 0) @{ + printf "Smallest divisor of %d is %d\n", num, div + break + @} + if (div * div > num) @{ + printf "%d is prime\n", num + break + @} @} - @} @} @end example @@ -13430,16 +13491,14 @@ The @code{next} statement is not allowed inside @code{BEGINFILE} and @cindex POSIX @command{awk}, @code{next}/@code{nextfile} statements and @cindex @code{next} statement, user-defined functions and @cindex functions, user-defined, @code{next}/@code{nextfile} statements and -According to the POSIX standard, the behavior is undefined if -the @code{next} statement is used in a @code{BEGIN} or @code{END} rule. -@command{gawk} treats it as a syntax error. -Although POSIX permits it, -some other @command{awk} implementations don't allow the @code{next} -statement inside function bodies -(@pxref{User-defined}). -Just as with any other @code{next} statement, a @code{next} statement inside a -function body reads the next record and starts processing it with the -first rule in the program. +According to the POSIX standard, the behavior is undefined if the +@code{next} statement is used in a @code{BEGIN} or @code{END} rule. +@command{gawk} treats it as a syntax error. Although POSIX permits it, +most other @command{awk} implementations don't allow the @code{next} +statement inside function bodies (@pxref{User-defined}). Just as with any +other @code{next} statement, a @code{next} statement inside a function +body reads the next record and starts processing it with the first rule +in the program. @node Nextfile Statement @subsection The @code{nextfile} Statement @@ -13550,8 +13609,7 @@ status code for the @command{awk} process. If no argument is supplied, In the case where an argument is supplied to a first @code{exit} statement, and then @code{exit} is called a second time from an @code{END} rule with no argument, -@command{awk} uses the previously supplied exit value. -@value{DARKCORNER} +@command{awk} uses the previously supplied exit value. @value{DARKCORNER} @xref{Exit Status}, for more information. @cindex programming conventions, @code{exit} statement @@ -13563,12 +13621,12 @@ in the following example: @example BEGIN @{ - if (("date" | getline date_now) <= 0) @{ - print "Can't get system date" > "/dev/stderr" - exit 1 - @} - print "current date is", date_now - close("date") + if (("date" | getline date_now) <= 0) @{ + print "Can't get system date" > "/dev/stderr" + exit 1 + @} + print "current date is", date_now + close("date") @} @end example @@ -35087,7 +35145,7 @@ it on your system). @cindex Unicode Similar considerations apply to other ranges. For example, @samp{["-/]} is perfectly valid in ASCII, but is not valid in many Unicode locales, -such as @samp{en_US.UTF-8}. +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. @@ -37535,7 +37593,7 @@ different limits. @multitable @columnfractions .40 .60 @headitem Item @tab Limit @item Characters in a character class @tab 2^(number of bits per byte) -@item Length of input record @tab @code{MAX_INT } +@item Length of input record @tab @code{MAX_INT} @item Length of output record @tab Unlimited @item Length of source line @tab Unlimited @item Number of fields in a record @tab @code{MAX_LONG} @@ -37544,9 +37602,9 @@ different limits. @item Number of input records total @tab @code{MAX_LONG} @item Number of pipe redirections @tab min(number of processes per user, number of open files) @item Numeric values @tab Double-precision floating point (if not using MPFR) -@item Size of a field @tab @code{MAX_INT } -@item Size of a literal string @tab @code{MAX_INT } -@item Size of a printf string @tab @code{MAX_INT } +@item Size of a field @tab @code{MAX_INT} +@item Size of a literal string @tab @code{MAX_INT} +@item Size of a printf string @tab @code{MAX_INT} @end multitable @node Extension Design diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 48ed6bc6..d73697df 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -9393,9 +9393,9 @@ have different forms, but are stored identically internally. A @dfn{numeric constant} stands for a number. This number can be an integer, a decimal fraction, or a number in scientific (exponential) notation.@footnote{The internal representation of all numbers, -including integers, uses double precision -floating-point numbers. -On most modern systems, these are in IEEE 754 standard format.} +including integers, uses double precision floating-point numbers. +On most modern systems, these are in IEEE 754 standard format. +@xref{Arbitrary Precision Arithmetic}, for much more information.} Here are some examples of numeric constants that all have the same value: @@ -9608,7 +9608,7 @@ upon the contents of the current input record. Constant regular expressions are also used as the first argument for the @code{gensub()}, @code{sub()}, and @code{gsub()} functions, as the second argument of the @code{match()} function, -and as the third argument of the @code{patsplit()} function +and as the third argument of the @code{split()} and @code{patsplit()} functions (@pxref{String Functions}). Modern implementations of @command{awk}, including @command{gawk}, allow the third argument of @code{split()} to be a regexp constant, but some @@ -9850,32 +9850,28 @@ specifies the output format to use when printing numbers with @code{print}. conversion from the semantics of printing. Both @code{CONVFMT} and @code{OFMT} have the same default value: @code{"%.6g"}. In the vast majority of cases, old @command{awk} programs do not change their behavior. -However, these semantics for @code{OFMT} are something to keep in mind if you must -port your new-style program to older implementations of @command{awk}. -We recommend -that instead of changing your programs, just port @command{gawk} itself. -@xref{Print}, -for more information on the @code{print} statement. - -And, once again, where you are can matter when it comes to converting -between numbers and strings. In @ref{Locales}, we mentioned that -the local character set and language (the locale) can affect how -@command{gawk} matches characters. The locale also affects numeric -formats. In particular, for @command{awk} programs, it affects the -decimal point character. The @code{"C"} locale, and most English-language -locales, use the period character (@samp{.}) as the decimal point. -However, many (if not most) European and non-English locales use the comma -(@samp{,}) as the decimal point character. +@xref{Print}, for more information on the @code{print} statement. + +Where you are can matter when it comes to converting between numbers and +strings. The local character set and language---the @dfn{locale}---can +affect numeric formats. In particular, for @command{awk} programs, +it affects the decimal point character and the thousands-separator +character. The @code{"C"} locale, and most English-language locales, +use the period character (@samp{.}) as the decimal point and don't +have a thousands separator. However, many (if not most) European and +non-English locales use the comma (@samp{,}) as the decimal point +character. European locales often use either a space or a period as +the thousands separator, if they have one. @cindex dark corner, locale's decimal point character The POSIX standard says that @command{awk} always uses the period as the decimal -point when reading the @command{awk} program source code, and for command-line -variable assignments (@pxref{Other Arguments}). -However, when interpreting input data, for @code{print} and @code{printf} output, -and for number to string conversion, the local decimal point character is used. -@value{DARKCORNER} -Here are some examples indicating the difference in behavior, -on a GNU/Linux system: +point when reading the @command{awk} program source code, and for +command-line variable assignments (@pxref{Other Arguments}). However, +when interpreting input data, for @code{print} and @code{printf} output, +and for number to string conversion, the local decimal point character +is used. @value{DARKCORNER} In all cases, numbers in source code and +in input data cannot have a thousands separator. Here are some examples +indicating the difference in behavior, on a GNU/Linux system: @example $ @kbd{export POSIXLY_CORRECT=1} @ii{Force POSIX behavior} @@ -9890,7 +9886,7 @@ $ @kbd{echo 4,321 | LC_ALL=en_DK.utf-8 gawk '@{ print $1 + 1 @}'} @end example @noindent -The @samp{en_DK.utf-8} locale is for English in Denmark, where the comma acts as +The @code{en_DK.utf-8} locale is for English in Denmark, where the comma acts as the decimal point separator. In the normal @code{"C"} locale, @command{gawk} treats @samp{4,321} as @samp{4}, while in the Danish locale, it's treated as the full number, 4.321. @@ -10037,7 +10033,7 @@ b * int(a / b) + (a % b) == a @end example One possibly undesirable effect of this definition of remainder is that -@code{@var{x} % @var{y}} is negative if @var{x} is negative. Thus: +@samp{@var{x} % @var{y}} is negative if @var{x} is negative. Thus: @example -17 % 8 = -1 @@ -10131,7 +10127,7 @@ BEGIN @{ @end example @noindent -It is not defined whether the assignment to @code{a} happens +It is not defined whether the second assignment to @code{a} happens before or after the value of @code{a} is retrieved for producing the concatenated value. The result could be either @samp{don't panic}, or @samp{panic panic}. @@ -10253,8 +10249,8 @@ element. (Such values are called @dfn{rvalues}.) @cindex variables, types of It is important to note that variables do @emph{not} have permanent types. -A variable's type is simply the type of whatever value it happens -to hold at the moment. In the following program fragment, the variable +A variable's type is simply the type of whatever value was last assigned +to it. In the following program fragment, the variable @code{foo} has a numeric value at first, and a string value later on: @example @@ -10355,6 +10351,7 @@ The indices of @code{bar} are practically guaranteed to be different, because and see @ref{Numeric Functions}, for more information). This example illustrates an important fact about assignment operators: the lefthand expression is only evaluated @emph{once}. + It is up to the implementation as to which expression is evaluated first, the lefthand or the righthand. Consider this example: @@ -10387,17 +10384,17 @@ to a number. @caption{Arithmetic Assignment Operators} @multitable @columnfractions .30 .70 @headitem Operator @tab Effect -@item @var{lvalue} @code{+=} @var{increment} @tab Adds @var{increment} to the value of @var{lvalue}. -@item @var{lvalue} @code{-=} @var{decrement} @tab Subtracts @var{decrement} from the value of @var{lvalue}. -@item @var{lvalue} @code{*=} @var{coefficient} @tab Multiplies the value of @var{lvalue} by @var{coefficient}. -@item @var{lvalue} @code{/=} @var{divisor} @tab Divides the value of @var{lvalue} by @var{divisor}. -@item @var{lvalue} @code{%=} @var{modulus} @tab Sets @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 Raises @var{lvalue} to the power @var{power}. @value{COMMONEXT} +@item @var{lvalue} @code{**=} @var{power} @tab Raise @var{lvalue} to the power @var{power}. @value{COMMONEXT} @end multitable @end float @@ -10442,10 +10439,8 @@ A workaround is: awk '/[=]=/' /dev/null @end example -@command{gawk} does not have this problem, -nor do the other -freely available versions described in -@ref{Other Versions}. +@command{gawk} does not have this problem; Brian Kernighan's @command{awk} +and @command{mawk} also do not (@pxref{Other Versions}). @end sidebar @c ENDOFRANGE exas @c ENDOFRANGE opas @@ -10469,11 +10464,10 @@ are convenient abbreviations for very common operations. @cindex side effects, decrement/increment operators The operator used for adding one is written @samp{++}. It can be used to increment a variable either before or after taking its value. -To pre-increment a variable @code{v}, write @samp{++v}. This adds +To @dfn{pre-increment} a variable @code{v}, write @samp{++v}. This adds one to the value of @code{v}---that new value is also the value of the -expression. (The assignment expression @samp{v += 1} is completely -equivalent.) -Writing the @samp{++} after the variable specifies post-increment. This +expression. (The assignment expression @samp{v += 1} is completely equivalent.) +Writing the @samp{++} after the variable specifies @dfn{post-increment}. This increments the variable value just the same; the difference is that the value of the increment expression itself is the variable's @emph{old} value. Thus, if @code{foo} has the value four, then the expression @samp{foo++} @@ -10485,7 +10479,18 @@ 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 10e12). +long as you stick to numbers that are fairly small (less than +@iftex +@math{10^12}). +@end iftex +@ifnottex +@ifnotdocbook +10e12). +@end ifnotdocbook +@end ifnottex +@docbook +1012). @c +@end docbook @cindex @code{$} (dollar sign), incrementing fields and arrays @cindex dollar sign (@code{$}), incrementing fields and arrays @@ -10673,6 +10678,7 @@ like a number---for example, @code{@w{" +2"}}. This concept is used for determining the type of a variable. The type of the variable is important because the types of two variables determine how they are compared. + The various versions of the POSIX standard did not get the rules quite right for several editions. Fortunately, as of at least the 2008 standard (and possibly earlier), the standard has been fixed, @@ -10766,6 +10772,7 @@ STRNUM &&string &numeric &numeric\cr }}} @end tex @ifnottex +@ifnotdocbook @display +---------------------------------------------- | STRING NUMERIC STRNUM @@ -10778,7 +10785,51 @@ NUMERIC | string numeric numeric STRNUM | string numeric numeric --------+---------------------------------------------- @end display +@end ifnotdocbook @end ifnottex +@docbook + + + + + + + + + +STRING +NUMERIC +STRNUM + + + + + +STRING +string +string +string + + + +NUMERIC +string +numeric +numeric + + + +STRNUM +string +numeric +numeric + + + + + + +@end docbook The basic idea is that user input that looks numeric---and @emph{only} user input---should be treated as numeric, even though it is actually @@ -10797,8 +10848,8 @@ 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. Thus, the six-character input string @w{@samp{ +3.14}} receives the -@var{strnum} attribute. In contrast, the eight-character literal -@w{@code{" +3.14"}} appearing in program text is a string constant. +@var{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: @@ -10984,7 +11035,9 @@ where this is discussed in more detail. @subsubsection String Comparison With POSIX Rules The POSIX standard says that string comparison is performed based -on the locale's collating order. This is usually very different +on the locale's @dfn{collating order}. This is the order in which +characters sort, as defined by the locale (for more discussion, +@pxref{Ranges and 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 @@ -10992,7 +11045,7 @@ to behave the same way as if the strings are compared with the C Because this behavior differs considerably from existing practice, @command{gawk} only implements it when in POSIX mode (@pxref{Options}). -Here is an example to illustrate the difference, in an @samp{en_US.UTF-8} +Here is an example to illustrate the difference, in an @code{en_US.UTF-8} locale: @example @@ -11208,7 +11261,7 @@ However, putting a newline in front of either character does not work without using backslash continuation (@pxref{Statements/Lines}). If @option{--posix} is specified -(@pxref{Options}), then this extension is disabled. +(@pxref{Options}), this extension is disabled. @node Function Calls @section Function Calls @@ -11227,6 +11280,8 @@ functions and their descriptions. In addition, you can define functions for use in your program. @xref{User-defined}, for instructions on how to do this. +Finally, @command{gawk} lets you write functions in C or C++ +that may be called from your program: see @ref{Dynamic Extensions}. @cindex arguments, in function calls The way to use a function is with a @dfn{function call} expression, @@ -11277,12 +11332,12 @@ when you write the source code to your program. We defer discussion of this feature until later; see @ref{Indirect Calls}. @cindex side effects, function calls -Like every other expression, the function call has a value, which is -computed by the function based on the arguments you give it. In this -example, the value of @samp{sqrt(@var{argument})} is the square root of -@var{argument}. -The following program reads numbers, one number per line, and prints the -square root of each one: +Like every other expression, the function call has a value, often +called the @dfn{return value}, which is computed by the function +based on the arguments you give it. In this example, the return value +of @samp{sqrt(@var{argument})} is the square root of @var{argument}. +The following program reads numbers, one number per line, and prints +the square root of each one: @example $ @kbd{awk '@{ print "The square root of", $1, "is", sqrt($1) @}'} @@ -11597,10 +11652,10 @@ A single expression. It matches when its value is nonzero (if a number) or non-null (if a string). (@xref{Expression Patterns}.) -@item @var{pat1}, @var{pat2} +@item @var{begpat}, @var{endpat} A pair of patterns separated by a comma, specifying a range of records. -The range includes both the initial record that matches @var{pat1} and -the final record that matches @var{pat2}. +The range includes both the initial record that matches @var{begpat} and +the final record that matches @var{endpat}. (@xref{Ranges}.) @item BEGIN @@ -11612,7 +11667,7 @@ Special patterns for you to supply startup or cleanup actions for your @item BEGINFILE @itemx ENDFILE Special patterns for you to supply startup or cleanup actions to be -done on a per file basis. +done on a per-file basis. (@xref{BEGINFILE/ENDFILE}.) @item @var{empty} @@ -11773,7 +11828,7 @@ 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 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 turned off again +input record; when this succeeds, the range pattern is @dfn{turned off} again for the following record. Then the range pattern goes back to checking @var{begpat} against each record. @@ -11927,7 +11982,7 @@ rule checks the @code{FNR} and @code{NR} variables. @subsubsection Input/Output from @code{BEGIN} and @code{END} Rules @cindex input/output, from @code{BEGIN} and @code{END} -There are several (sometimes subtle) points to remember when doing I/O +There are several (sometimes subtle) points to be aware of when doing I/O from a @code{BEGIN} or @code{END} rule. The first has to do with the value of @code{$0} in a @code{BEGIN} rule. Because @code{BEGIN} rules are executed before any input is read, @@ -11988,8 +12043,19 @@ This @value{SECTION} describes a @command{gawk}-specific feature. Two special kinds of rule, @code{BEGINFILE} and @code{ENDFILE}, give you ``hooks'' into @command{gawk}'s command-line file processing loop. -As with the @code{BEGIN} and @code{END} rules (@pxref{BEGIN/END}), all -@code{BEGINFILE} rules in a program are merged, in the order they are +As with the @code{BEGIN} and @code{END} rules +@ifnottex +@ifnotdocbook +(@pxref{BEGIN/END}), +@end ifnotdocbook +@end ifnottex +@iftex +(see the previous section), +@end iftex +@ifdocbook +(see the previous section), +@end ifdocbook +all @code{BEGINFILE} rules in a program are merged, in the order they are read by @command{gawk}, and all @code{ENDFILE} rules are merged as well. The body of the @code{BEGINFILE} rules is executed just before @@ -12017,10 +12083,11 @@ the file entirely. Otherwise, @command{gawk} exits with the usual fatal error. @item -If you have written extensions that modify the record handling (by inserting -an ``input parser''), 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}.) +If you have written extensions that modify the record handling (by +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}.) @end itemize The @code{ENDFILE} rule is called when @command{gawk} has finished processing @@ -12103,7 +12170,7 @@ into the body of the @command{awk} program. @cindex shells, quoting The most common method is to use shell quoting to substitute the variable's value into the program inside the script. -For example, in the following program: +For example, consider the following program: @example printf "Enter search pattern: " @@ -12113,7 +12180,7 @@ awk "/$pattern/ "'@{ nmatches++ @} @end example @noindent -the @command{awk} program consists of two pieces of quoted text +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 @code{pattern} shell variable inside the quotes. @@ -12127,8 +12194,8 @@ match up the quotes when reading the program. A better method is to use @command{awk}'s variable assignment feature (@pxref{Assignment Options}) -to assign the shell variable's value to an @command{awk} variable's -value. Then use dynamic regexps to match the pattern +to assign the shell variable's value to an @command{awk} variable. +Then use dynamic regexps to match the pattern (@pxref{Computed Regexps}). The following shows how to redo the previous example using this technique: @@ -12181,7 +12248,7 @@ function @var{name}(@var{args}) @{ @dots{} @} @cindex @code{;} (semicolon), separating statements in actions @cindex semicolon (@code{;}), separating statements in actions An action consists of one or more @command{awk} @dfn{statements}, enclosed -in curly braces (@samp{@{@dots{}@}}). Each statement specifies one +in curly braces (@samp{@{@r{@dots{}}@}}). Each statement specifies one thing to do. The statements are separated by newlines or semicolons. The curly braces around an action must be used even if the action contains only one statement, or if it contains no statements at @@ -12211,10 +12278,9 @@ programs. The @command{awk} language gives you C-like constructs special ones (@pxref{Statements}). @item Compound statements -Consist of one or more statements enclosed in -curly braces. A compound statement is used in order to put several -statements together in the body of an @code{if}, @code{while}, @code{do}, -or @code{for} statement. +Enclose one or more statements in curly braces. A compound statement +is used in order to put several statements together in the body of an +@code{if}, @code{while}, @code{do}, or @code{for} statement. @item Input statements Use the @code{getline} command @@ -12548,6 +12614,8 @@ for more information on this version of the @code{for} loop. @cindex @code{default} keyword This @value{SECTION} describes a @command{gawk}-specific feature. +If @command{gawk} is in compatibility mode (@pxref{Options}), +it is not available. The @code{switch} statement allows the evaluation of an expression and the execution of statements based on a @code{case} match. Case statements @@ -12604,11 +12672,6 @@ the @code{print} statement is executed and then falls through into the the @minus{}1 case will also be executed since the @code{default} does not halt execution. -This @code{switch} statement is a @command{gawk} extension. -If @command{gawk} is in compatibility mode -(@pxref{Options}), -it is not available. - @node Break Statement @subsection The @code{break} Statement @cindex @code{break} statement @@ -12623,15 +12686,15 @@ numbers: @example # find smallest divisor of num @{ - num = $1 - for (div = 2; div * div <= num; div++) @{ - if (num % div == 0) - break - @} - if (num % div == 0) - printf "Smallest divisor of %d is %d\n", num, div - else - printf "%d is prime\n", num + num = $1 + for (div = 2; div * div <= num; div++) @{ + if (num % div == 0) + break + @} + if (num % div == 0) + printf "Smallest divisor of %d is %d\n", num, div + else + printf "%d is prime\n", num @} @end example @@ -12649,17 +12712,17 @@ an @code{if}: @example # 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 - break - @} - if (div * div > num) @{ - printf "%d is prime\n", num - break + num = $1 + for (div = 2; ; div++) @{ + if (num % div == 0) @{ + printf "Smallest divisor of %d is %d\n", num, div + break + @} + if (div * div > num) @{ + printf "%d is prime\n", num + break + @} @} - @} @} @end example @@ -12808,16 +12871,14 @@ The @code{next} statement is not allowed inside @code{BEGINFILE} and @cindex POSIX @command{awk}, @code{next}/@code{nextfile} statements and @cindex @code{next} statement, user-defined functions and @cindex functions, user-defined, @code{next}/@code{nextfile} statements and -According to the POSIX standard, the behavior is undefined if -the @code{next} statement is used in a @code{BEGIN} or @code{END} rule. -@command{gawk} treats it as a syntax error. -Although POSIX permits it, -some other @command{awk} implementations don't allow the @code{next} -statement inside function bodies -(@pxref{User-defined}). -Just as with any other @code{next} statement, a @code{next} statement inside a -function body reads the next record and starts processing it with the -first rule in the program. +According to the POSIX standard, the behavior is undefined if the +@code{next} statement is used in a @code{BEGIN} or @code{END} rule. +@command{gawk} treats it as a syntax error. Although POSIX permits it, +most other @command{awk} implementations don't allow the @code{next} +statement inside function bodies (@pxref{User-defined}). Just as with any +other @code{next} statement, a @code{next} statement inside a function +body reads the next record and starts processing it with the first rule +in the program. @node Nextfile Statement @subsection The @code{nextfile} Statement @@ -12928,8 +12989,7 @@ status code for the @command{awk} process. If no argument is supplied, In the case where an argument is supplied to a first @code{exit} statement, and then @code{exit} is called a second time from an @code{END} rule with no argument, -@command{awk} uses the previously supplied exit value. -@value{DARKCORNER} +@command{awk} uses the previously supplied exit value. @value{DARKCORNER} @xref{Exit Status}, for more information. @cindex programming conventions, @code{exit} statement @@ -12941,12 +13001,12 @@ in the following example: @example BEGIN @{ - if (("date" | getline date_now) <= 0) @{ - print "Can't get system date" > "/dev/stderr" - exit 1 - @} - print "current date is", date_now - close("date") + if (("date" | getline date_now) <= 0) @{ + print "Can't get system date" > "/dev/stderr" + exit 1 + @} + print "current date is", date_now + close("date") @} @end example @@ -34229,7 +34289,7 @@ it on your system). @cindex Unicode Similar considerations apply to other ranges. For example, @samp{["-/]} is perfectly valid in ASCII, but is not valid in many Unicode locales, -such as @samp{en_US.UTF-8}. +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. @@ -36677,7 +36737,7 @@ different limits. @multitable @columnfractions .40 .60 @headitem Item @tab Limit @item Characters in a character class @tab 2^(number of bits per byte) -@item Length of input record @tab @code{MAX_INT } +@item Length of input record @tab @code{MAX_INT} @item Length of output record @tab Unlimited @item Length of source line @tab Unlimited @item Number of fields in a record @tab @code{MAX_LONG} @@ -36686,9 +36746,9 @@ different limits. @item Number of input records total @tab @code{MAX_LONG} @item Number of pipe redirections @tab min(number of processes per user, number of open files) @item Numeric values @tab Double-precision floating point (if not using MPFR) -@item Size of a field @tab @code{MAX_INT } -@item Size of a literal string @tab @code{MAX_INT } -@item Size of a printf string @tab @code{MAX_INT } +@item Size of a field @tab @code{MAX_INT} +@item Size of a literal string @tab @code{MAX_INT} +@item Size of a printf string @tab @code{MAX_INT} @end multitable @node Extension Design -- cgit v1.2.3 From f4cc4f9178ac30cdee6b2fca38b42985af42e097 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 2 May 2014 08:43:44 +0300 Subject: Edits through Chapter 8, new figure. --- doc/ChangeLog | 7 + doc/Makefile.am | 2 + doc/Makefile.in | 2 + doc/array-elements.eps | 158 +++++++ doc/array-elements.fig | 27 ++ doc/array-elements.pdf | Bin 0 -> 6822 bytes doc/array-elements.png | Bin 0 -> 6143 bytes doc/array-elements.txt | 4 + doc/gawk.info | 1183 ++++++++++++++++++++++++------------------------ doc/gawk.texi | 494 ++++++++++++-------- doc/gawktexi.in | 494 ++++++++++++-------- 11 files changed, 1401 insertions(+), 970 deletions(-) create mode 100644 doc/array-elements.eps create mode 100644 doc/array-elements.fig create mode 100644 doc/array-elements.pdf create mode 100644 doc/array-elements.png create mode 100644 doc/array-elements.txt diff --git a/doc/ChangeLog b/doc/ChangeLog index dde9c9af..10600c26 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,10 @@ +2014-05-02 Arnold D. Robbins + + * gawktexi.in: Editing progress. Through Chapter 8. + * array-elements.eps, array-elements.fig, array-elements.pdf, + array-elements.png array-elements.txt: New files. + * Makefile.am (EXTRA_DIST): Add them. + 2014-04-30 Arnold D. Robbins * gawktexi.in: Editing progress. Through Chapter 5. diff --git a/doc/Makefile.am b/doc/Makefile.am index 12692bd0..86321bbc 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -36,6 +36,8 @@ EXTRA_DIST = ChangeLog ChangeLog.0 README.card ad.block setter.outline \ api-figure2.png api-figure2.txt \ api-figure3.eps api-figure3.fig api-figure3.pdf \ api-figure3.png api-figure3.txt \ + array-elements.eps array-elements.fig array-elements.pdf \ + array-elements.png array-elements.txt \ gawktexi.in sidebar.awk \ general-program.eps general-program.fig general-program.pdf \ general-program.png general-program.txt \ diff --git a/doc/Makefile.in b/doc/Makefile.in index 52e5f873..abaf5601 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -350,6 +350,8 @@ EXTRA_DIST = ChangeLog ChangeLog.0 README.card ad.block setter.outline \ api-figure2.png api-figure2.txt \ api-figure3.eps api-figure3.fig api-figure3.pdf \ api-figure3.png api-figure3.txt \ + array-elements.eps array-elements.fig array-elements.pdf \ + array-elements.png array-elements.txt \ gawktexi.in sidebar.awk \ general-program.eps general-program.fig general-program.pdf \ general-program.png general-program.txt \ diff --git a/doc/array-elements.eps b/doc/array-elements.eps new file mode 100644 index 00000000..a0649959 --- /dev/null +++ b/doc/array-elements.eps @@ -0,0 +1,158 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Title: array-figure1.fig +%%Creator: fig2dev Version 3.2 Patchlevel 5d +%%CreationDate: Thu May 1 22:19:24 2014 +%%BoundingBox: 0 0 384 76 +%Magnification: 1.0000 +%%EndComments +%%BeginProlog +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +/pageheader { +save +newpath 0 76 moveto 0 0 lineto 384 0 lineto 384 76 lineto closepath clip newpath +-203.3 199.4 translate +1 -1 scale +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06299 0.06299 sc +} bind def +/pagefooter { +$F2psEnd +restore +} bind def +%%EndProlog +pageheader +% +% Fig objects follow +% +% +% here starts figure with depth 50 +% Polyline +0 slj +0 slc +7.500 slw +n 4455 1980 m 4455 2700 l 4455 2655 l + 4455 2700 l gs col0 s gr +% Polyline +n 6075 1980 m + 6075 2700 l gs col0 s gr +% Polyline +n 7425 1980 m + 7425 2700 l gs col0 s gr +/Courier-Bold ff 180.00 scf sf +3735 2340 m +gs 1 -1 sc (8) col0 sh gr +/Courier-Bold ff 180.00 scf sf +5175 2295 m +gs 1 -1 sc ("foo") col0 sh gr +/Courier-Bold ff 180.00 scf sf +6930 2295 m +gs 1 -1 sc ("") col0 sh gr +/Courier-Bold ff 180.00 scf sf +7875 2250 m +gs 1 -1 sc (30) col0 sh gr +/Times-Roman ff 180.00 scf sf +3735 3105 m +gs 1 -1 sc (0) col0 sh gr +/Times-Roman ff 180.00 scf sf +5175 3150 m +gs 1 -1 sc (1) col0 sh gr +/Times-Roman ff 180.00 scf sf +6795 3150 m +gs 1 -1 sc (2) col0 sh gr +/Times-Roman ff 180.00 scf sf +7875 3105 m +gs 1 -1 sc (3) col0 sh gr +/Times-Roman ff 180.00 scf sf +8730 2340 m +gs 1 -1 sc (Value) col0 sh gr +/Times-Roman ff 180.00 scf sf +8820 3060 m +gs 1 -1 sc (Index) col0 sh gr +% here ends figure; +% +% here starts figure with depth 40 +% Polyline +0 slj +0 slc +7.500 slw +n 3240 1980 m 8415 1980 l 8415 2700 l 3240 2700 l + cp gs col0 s gr +% here ends figure; +pagefooter +showpage +%%Trailer +%EOF diff --git a/doc/array-elements.fig b/doc/array-elements.fig new file mode 100644 index 00000000..c5d65ba4 --- /dev/null +++ b/doc/array-elements.fig @@ -0,0 +1,27 @@ +#FIG 3.2 Produced by xfig version 3.2.5b +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +2 2 0 1 0 7 40 -1 -1 0.000 0 0 -1 0 0 5 + 3240 1980 8415 1980 8415 2700 3240 2700 3240 1980 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 + 4455 1980 4455 2700 4455 2655 4455 2700 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6075 1980 6075 2700 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 7425 1980 7425 2700 +4 0 0 50 -1 14 12 0.0000 4 120 120 3735 2340 8\001 +4 0 0 50 -1 14 12 0.0000 4 120 600 5175 2295 "foo"\001 +4 0 0 50 -1 14 12 0.0000 4 60 240 6930 2295 ""\001 +4 0 0 50 -1 14 12 0.0000 4 120 240 7875 2250 30\001 +4 0 0 50 -1 0 12 0.0000 4 135 105 3735 3105 0\001 +4 0 0 50 -1 0 12 0.0000 4 135 105 5175 3150 1\001 +4 0 0 50 -1 0 12 0.0000 4 135 105 6795 3150 2\001 +4 0 0 50 -1 0 12 0.0000 4 135 105 7875 3105 3\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 8730 2340 Value\001 +4 0 0 50 -1 0 12 0.0000 4 135 465 8820 3060 Index\001 diff --git a/doc/array-elements.pdf b/doc/array-elements.pdf new file mode 100644 index 00000000..af0ef3b9 Binary files /dev/null and b/doc/array-elements.pdf differ diff --git a/doc/array-elements.png b/doc/array-elements.png new file mode 100644 index 00000000..c51424d1 Binary files /dev/null and b/doc/array-elements.png differ diff --git a/doc/array-elements.txt b/doc/array-elements.txt new file mode 100644 index 00000000..8906318a --- /dev/null +++ b/doc/array-elements.txt @@ -0,0 +1,4 @@ ++---------+---------+--------+---------+ +| 8 | "foo" | "" | 30 | @r{Value} ++---------+---------+--------+---------+ + 0 1 2 3 @r{Index} diff --git a/doc/gawk.info b/doc/gawk.info index 8c13d181..dfe1589e 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -9555,9 +9555,9 @@ of these automatically, so that they enable you to tell `awk' how to do certain things. Others are set automatically by `awk', so that they carry information from the internal workings of `awk' to your program. - This minor node documents all the built-in variables of `gawk', most -of which are also documented in the chapters describing their areas of -activity. + This minor node documents all of `gawk''s built-in variables, most +of which are also documented in the major nodes describing their areas +of activity. * Menu: @@ -9574,8 +9574,13 @@ File: gawk.info, Node: User-modified, Next: Auto-set, Up: Built-in Variables ------------------------------------------- The following is an alphabetical list of variables that you can change -to control how `awk' does certain things. The variables that are -specific to `gawk' are marked with a pound sign (`#'). +to control how `awk' does certain things. + + The variables that are specific to `gawk' are marked with a pound +sign (`#'). These variables are `gawk' extensions. In other `awk' +implementations or if `gawk' is in compatibility mode (*note +Options::), they are not special. (Any exceptions are noted in the +description of each variable.) `BINMODE #' On non-POSIX systems, this variable specifies use of binary mode @@ -9588,14 +9593,11 @@ specific to `gawk' are marked with a pound sign (`#'). string value of `"rw"' or `"wr"' indicates that all files should 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::. - - This variable is a `gawk' extension. In other `awk' - implementations (except `mawk', *note Other Versions::), or if - `gawk' is in compatibility mode (*note Options::), it is not - special. + `BINMODE' is described in more detail in *note PC Using::. `mawk' + *note Other Versions::), also supports this variable, but only + using numeric values. -`CONVFMT' +``CONVFMT'' This string controls 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::). @@ -9603,29 +9605,21 @@ specific to `gawk' are marked with a pound sign (`#'). POSIX standard. `FIELDWIDTHS #' - This is a space-separated list of columns that tells `gawk' how to - split input with fixed columnar boundaries. Assigning a value to + A space-separated list of columns that tells `gawk' how to split + input with fixed columnar boundaries. Assigning a value to `FIELDWIDTHS' overrides the use of `FS' and `FPAT' for field splitting. *Note Constant Size::, for more information. - If `gawk' is in compatibility mode (*note Options::), then - `FIELDWIDTHS' has no special meaning, and field-splitting - operations occur based exclusively on the value of `FS'. - `FPAT #' - This is a regular expression (as a string) that tells `gawk' to - create the fields based on text that matches the regular - expression. Assigning a value to `FPAT' overrides the use of `FS' - and `FIELDWIDTHS' for field splitting. *Note Splitting By - Content::, for more information. - - If `gawk' is in compatibility mode (*note Options::), then `FPAT' - has no special meaning, and field-splitting operations occur based - exclusively on the value of `FS'. + A regular expression (as a string) that tells `gawk' to create the + fields based on text that matches the regular expression. + Assigning a value to `FPAT' overrides the use of `FS' and + `FIELDWIDTHS' for field splitting. *Note Splitting By Content::, + for more information. `FS' - This is the input field separator (*note Field Separators::). The - value is a single-character string or a multicharacter regular + The input field separator (*note Field Separators::). The value + is a single-character string or a multicharacter regular expression that matches the separations between fields in an input record. If the value is the null string (`""'), then each character in the record becomes a separate field. (This behavior @@ -9661,13 +9655,9 @@ specific to `gawk' are marked with a pound sign (`#'). splitting when using a single-character field separator. *Note Case-sensitivity::. - If `gawk' is in compatibility mode (*note Options::), then - `IGNORECASE' has no special meaning. Thus, string and regexp - operations are always case-sensitive. - `LINT #' When this variable is true (nonzero or non-null), `gawk' behaves - as if the `--lint' command-line option is in effect. (*note + as if the `--lint' command-line option is in effect (*note Options::). With a value of `"fatal"', lint warnings become fatal errors. With a value of `"invalid"', only warnings about things that are actually invalid are issued. (This is not fully @@ -9683,13 +9673,13 @@ specific to `gawk' are marked with a pound sign (`#'). execution is independent of the flavor of `awk' being executed. `OFMT' - This string 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' also used `OFMT' to specify the format - for converting numbers to strings in general expressions; this is - now done by `CONVFMT'. + 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' also 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::). @@ -9697,8 +9687,8 @@ specific to `gawk' are marked with a pound sign (`#'). Its default value is `" "', a string consisting of a single space. `ORS' - This is the output record separator. It is output at the end of - every `print' statement. Its default value is `"\n"', the newline + The output record separator. It is output at the end of every + `print' statement. Its default value is `"\n"', the newline character. (*Note Output Separators::.) `PREC #' @@ -9708,38 +9698,34 @@ specific to `gawk' are marked with a pound sign (`#'). `ROUNDMODE #' The rounding mode to use for arbitrary precision arithmetic on numbers, by default `"N"' (`roundTiesToEven' in the IEEE-754 - standard) (*note Setting Rounding Mode::). + standard; *note Setting Rounding Mode::). -`RS' - This is `awk''s input record separator. Its default value is a - string containing a single newline character, which means that an - input record consists of a single line of text. It can also be - the null string, in which case records are separated by runs of - blank lines. If it is a regexp, records are separated by matches - of the regexp in the input text. (*Note Records::.) +``RS'' + The input record separator. Its default value is a string + containing a single newline character, which means that an input + record consists of a single line of text. It can also be the null + string, in which case records are separated by runs of blank lines. + If it is a regexp, records are separated by matches of the regexp + in the input text. (*Note Records::.) The ability for `RS' to be a regular expression is a `gawk' extension. In most other `awk' implementations, or if `gawk' is in compatibility mode (*note Options::), just the first character of `RS''s value is used. -`SUBSEP' - This is the subscript separator. It has the default value of - `"\034"' and is used to separate the parts of the indices of a - multidimensional array. Thus, the expression `foo["A", "B"]' - really accesses `foo["A\034B"]' (*note Multidimensional::). +``SUBSEP'' + The subscript separator. It has the default value of `"\034"' and + is used to separate the parts of the indices of a multidimensional + array. Thus, the expression `foo["A", "B"]' really accesses + `foo["A\034B"]' (*note Multidimensional::). `TEXTDOMAIN #' - This variable is used for internationalization of programs at the - `awk' level. It sets the default text domain for specially marked - string constants in the source text, as well as for the - `dcgettext()', `dcngettext()' and `bindtextdomain()' functions - (*note Internationalization::). The default value of `TEXTDOMAIN' - is `"messages"'. - - This variable is a `gawk' extension. In other `awk' - implementations, or if `gawk' is in compatibility mode (*note - Options::), it is not special. + Used for internationalization of programs at the `awk' level. It + sets the default text domain for specially marked string constants + in the source text, as well as for the `dcgettext()', + `dcngettext()' and `bindtextdomain()' functions (*note + Internationalization::). The default value of `TEXTDOMAIN' is + `"messages"'. ---------- Footnotes ---------- @@ -9753,8 +9739,12 @@ File: gawk.info, Node: Auto-set, Next: ARGC and ARGV, Prev: User-modified, U The following is an alphabetical list of variables that `awk' sets automatically on certain occasions in order to provide information to -your program. The variables that are specific to `gawk' are marked -with a pound sign (`#'). +your program. + + The variables that are specific to `gawk' are marked with a pound +sign (`#'). These variables are `gawk' extensions. In other `awk' +implementations or if `gawk' is in compatibility mode (*note +Options::), they are not special. `ARGC', `ARGV' The command-line arguments available to `awk' programs are stored @@ -9785,7 +9775,7 @@ with a pound sign (`#'). are any of `awk''s command-line options. *Note ARGC and ARGV::, for information about how `awk' uses these variables. (d.c.) -`ARGIND' # +`ARGIND #' The index in `ARGV' of the current file being processed. Every time `gawk' opens a new data file for processing, it sets `ARGIND' to the index in `ARGV' of the file name. When `gawk' is @@ -9801,26 +9791,23 @@ with a pound sign (`#'). program, `gawk' automatically sets it to a new value when the next file is opened. - This variable is a `gawk' extension. In other `awk' - implementations, or if `gawk' is in compatibility mode (*note - Options::), it is not special. - `ENVIRON' An associative array containing the values of the environment. The array indices are the environment variable names; the elements are the values of the particular environment variables. For - example, `ENVIRON["HOME"]' might be `/home/arnold'. Changing this - array does not affect the environment passed on to any programs - that `awk' may spawn via redirection or the `system()' function. + example, `ENVIRON["HOME"]' might be `"/home/arnold"'. Changing + this array does not affect the environment passed on to any + programs that `awk' may spawn via redirection or the `system()' + function. (In a future version of `gawk', it may do so.) Some operating systems may not have environment variables. On such systems, the `ENVIRON' array is empty (except for - `ENVIRON["AWKPATH"]', *note AWKPATH Variable:: and - `ENVIRON["AWKLIBPATH"]', *note AWKLIBPATH Variable::). + `ENVIRON["AWKPATH"]' and `ENVIRON["AWKLIBPATH"]'; *note AWKPATH + Variable::, and *note AWKLIBPATH Variable::). -`ERRNO' # - If a system error occurs during a redirection for `getline', - during a read for `getline', or during a `close()' operation, then +`ERRNO #' + If a system error occurs during a redirection for `getline', during + a read for `getline', or during a `close()' operation, then `ERRNO' contains a string describing the error. In addition, `gawk' clears `ERRNO' before opening each @@ -9834,19 +9821,14 @@ with a pound sign (`#'). `getline' returning -1. You are, of course, free to clear it yourself before doing an I/O operation. - This variable is a `gawk' extension. In other `awk' - implementations, or if `gawk' is in compatibility mode (*note - Options::), it is not special. - `FILENAME' - The name of the file that `awk' is currently reading. When no - data files are listed on the command line, `awk' reads from the - standard input and `FILENAME' is set to `"-"'. `FILENAME' is - changed each time a new file is read (*note Reading Files::). - Inside a `BEGIN' rule, the value of `FILENAME' is `""', since - there are no input files being processed yet.(1) (d.c.) Note, - though, that using `getline' (*note Getline::) inside a `BEGIN' - rule can give `FILENAME' a value. + The name of the current input file. When no data files are listed + on the command line, `awk' reads from the standard input and + `FILENAME' is set to `"-"'. `FILENAME' changes each time a new + file is read (*note Reading Files::). Inside a `BEGIN' rule, the + value of `FILENAME' is `""', since there are no input files being + processed yet.(1) (d.c.) Note, though, that using `getline' (*note + Getline::) inside a `BEGIN' rule can give `FILENAME' a value. `FNR' The current record number in the current file. `FNR' is @@ -9864,21 +9846,20 @@ with a pound sign (`#'). create or remove fields from the current record. *Note Changing Fields::. -`FUNCTAB' # +`FUNCTAB #' An array whose indices and corresponding values are the names of all the user-defined or extension functions in the program. NOTE: Attempting to use the `delete' statement with the - `FUNCTAB' array will cause a fatal error. Any attempt to - assign to an element of the `FUNCTAB' array will also cause a - fatal error. + `FUNCTAB' array causes a fatal error. Any attempt to assign + to an element of `FUNCTAB' also causes a fatal error. `NR' The number of input records `awk' has processed since the beginning of the program's execution (*note Records::). `NR' is incremented each time a new record is read. -`PROCINFO' # +`PROCINFO #' The elements of this array provide access to information about the running `awk' program. The following elements (listed alphabetically) are guaranteed to be available: @@ -9935,8 +9916,8 @@ with a pound sign (`#'). `PROCINFO["sorted_in"]' If this element exists in `PROCINFO', its value controls the - order in which array indices will be processed by `for (index - in array) ...' loops. Since this is an advanced feature, we + order in which array indices will be processed by `for (INDEX + in ARRAY)' loops. Since this is an advanced feature, we defer the full description until later; see *note Scanning an Array::. @@ -9994,10 +9975,6 @@ with a pound sign (`#'). open input file, pipe, or coprocess. *Note Read Timeout::, for more information. - This array is a `gawk' extension. In other `awk' implementations, - or if `gawk' is in compatibility mode (*note Options::), it is not - special. - `RLENGTH' The length of the substring matched by the `match()' function (*note String Functions::). `RLENGTH' is set by invoking the @@ -10011,15 +9988,11 @@ with a pound sign (`#'). of the string where the matched substring starts, or zero if no match was found. -`RT' # - This is set each time a record is read. It contains the input text - that matched the text denoted by `RS', the record separator. - - This variable is a `gawk' extension. In other `awk' - implementations, or if `gawk' is in compatibility mode (*note - Options::), it is not special. +`RT #' + The input text that matched the text denoted by `RS', the record + separator. It is set every time a record is read. -`SYMTAB' # +`SYMTAB #' An array whose indices are the names of all currently defined global variables and arrays in the program. The array may be used for indirect access to read or write the value of a variable: @@ -10053,7 +10026,7 @@ with a pound sign (`#'). return SYMTAB[variable] *= amount } - NOTE: In order to avoid severe time-travel paradoxes(2), + NOTE: In order to avoid severe time-travel paradoxes,(2) neither `FUNCTAB' nor `SYMTAB' are available as elements within the `SYMTAB' array. @@ -10203,7 +10176,7 @@ remove array elements. It also describes how `awk' simulates multidimensional arrays, as well as some of the less obvious points about array usage. The major node moves on to discuss `gawk''s facility for sorting arrays, and ends with a brief description of `gawk''s -ability to support true multidimensional arrays. +ability to support true arrays of arrays. `awk' maintains a single set of names that may be used for naming variables, arrays, and functions (*note User-defined::). Thus, you @@ -10281,12 +10254,13 @@ declared.) A contiguous array of four elements might look like the following example, conceptually, if the element values are 8, `"foo"', `""', and -30: +30 as shown in *note figure-array-elements::: - +---------+---------+--------+---------+ - | 8 | "foo" | "" | 30 | Value - +---------+---------+--------+---------+ - 0 1 2 3 Index ++---------+---------+--------+---------+ +| 8 | "foo" | "" | 30 | @r{Value} ++---------+---------+--------+---------+ + 0 1 2 3 @r{Index} +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 @@ -10329,9 +10303,9 @@ from English to French: 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 +numbers and strings as indices. (In fact, array subscripts are always strings; this is discussed in more detail in *note Numeric Array -Subscripts::. Here, the number `1' isn't double-quoted, since `awk' +Subscripts::.) Here, the number `1' isn't double-quoted, since `awk' automatically converts it to a string. The value of `IGNORECASE' has no effect upon array subscripting. @@ -10383,11 +10357,11 @@ been assigned any value as well as elements that have been deleted To determine whether an element exists in an array at a certain index, use the following expression: - IND in ARRAY + INDX in ARRAY -This expression tests whether the particular index IND exists, without +This expression tests whether the particular index INDX exists, without the side effect of creating that element if it is not present. The -expression has the value one (true) if `ARRAY[IND]' exists and zero +expression has the value one (true) if `ARRAY[INDX]' exists and zero (false) if it does not exist. For example, this statement tests whether the array `frequencies' contains the index `2': @@ -10522,19 +10496,54 @@ built-in function `length()'. The order in which elements of the array are accessed by this statement is determined by the internal arrangement of the array -elements within `awk' and normally cannot be controlled or changed. -This can lead to problems if new elements are added to ARRAY by -statements in the loop body; it is not predictable whether the `for' +elements within `awk' and in standard `awk' cannot be controlled or +changed. This can lead to problems if new elements are added to ARRAY +by statements in the loop body; it is not predictable whether the `for' loop will reach them. Similarly, changing VAR inside the loop may produce strange results. It is best to avoid such things. + As a point of information, `gawk' sets up the list of elements to be +iterated over before the loop starts, and does not change it. But not +all `awk' versions do so. Consider this program, named `loopcheck.awk': + + BEGIN { + a["here"] = "here" + a["is"] = "is" + a["a"] = "a" + a["loop"] = "loop" + for (i in a) { + j++ + a[j] = j + print i + } + } + + Here is what happens when run with `gawk': + + $ gawk -f loopcheck.awk + -| here + -| loop + -| a + -| is + + Contrast this to Brian Kernighan's `awk': + + $ nawk -f loopcheck.awk + -| loop + -| here + -| is + -| a + -| 1 +  File: gawk.info, Node: Controlling Scanning, Prev: Scanning an Array, Up: Array Basics -8.1.6 Using Predefined Array Scanning Orders --------------------------------------------- +8.1.6 Using Predefined Array Scanning Orders With `gawk' +-------------------------------------------------------- + +This node describes a feature that is specific to `gawk'. -By default, when a `for' loop traverses an array, the order is + By default, when a `for' loop traverses an array, the order is undefined, meaning that the `awk' implementation determines the order in which the array is traversed. This order is usually based on the internal implementation of arrays and will vary from one version of @@ -10820,7 +10829,7 @@ might look like this: -| line 3 -| line 2 - Unfortunately, the very first line of input data did not come out in + Unfortunately, the very first line of input data did not appear in the output! Upon first glance, we would think that this program should have @@ -30424,15 +30433,15 @@ Index (line 6) * archeologists: Bugs. (line 6) * arctangent: Numeric Functions. (line 11) -* ARGC/ARGV variables: Auto-set. (line 11) +* ARGC/ARGV variables: Auto-set. (line 15) * ARGC/ARGV variables, command-line arguments: Other Arguments. (line 12) * ARGC/ARGV variables, how to use: ARGC and ARGV. (line 6) * ARGC/ARGV variables, portability and: Executable Scripts. (line 42) -* ARGIND variable: Auto-set. (line 40) +* ARGIND variable: Auto-set. (line 44) * ARGIND variable, command-line arguments: Other Arguments. (line 12) * arguments, command-line <1>: ARGC and ARGV. (line 6) -* arguments, command-line <2>: Auto-set. (line 11) +* arguments, command-line <2>: Auto-set. (line 15) * arguments, command-line: Other Arguments. (line 6) * arguments, command-line, invoking awk: Command Line. (line 6) * arguments, in function calls: Function Calls. (line 18) @@ -30443,15 +30452,15 @@ Index * array members: Reference to Elements. (line 6) * array scanning order, controlling: Controlling Scanning. - (line 12) + (line 14) * array, number of elements: String Functions. (line 194) * 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 91) +* arrays, and IGNORECASE variable: Array Intro. (line 92) * arrays, as parameters to functions: Pass By Value/Reference. (line 47) -* arrays, associative: Array Intro. (line 49) +* arrays, associative: Array Intro. (line 50) * arrays, associative, library functions and: Library Names. (line 57) * arrays, deleting entire contents: Delete. (line 39) * arrays, elements that don't exist: Reference to Elements. @@ -30462,7 +30471,7 @@ Index (line 48) * arrays, elements, retrieving number of: String Functions. (line 32) * arrays, for statement and: Scanning an Array. (line 20) -* arrays, indexing: Array Intro. (line 49) +* arrays, indexing: Array Intro. (line 50) * arrays, merging into strings: Join Function. (line 6) * arrays, multidimensional: Multidimensional. (line 10) * arrays, multidimensional, scanning: Multiscanning. (line 11) @@ -30476,7 +30485,7 @@ Index (line 6) * arrays, sorting, and IGNORECASE variable: Array Sorting Functions. (line 83) -* arrays, sparse: Array Intro. (line 70) +* arrays, sparse: Array Intro. (line 71) * arrays, subscripts, uninitialized variables as: Uninitialized Subscripts. (line 6) * arrays, unassigned elements: Reference to Elements. @@ -30504,7 +30513,7 @@ Index * assignment operators, evaluation order: Assignment Ops. (line 111) * assignment operators, lvalues/rvalues: Assignment Ops. (line 32) * assignments as filenames: Ignoring Assigns. (line 6) -* associative arrays: Array Intro. (line 49) +* associative arrays: Array Intro. (line 50) * asterisk (*), * operator, as multiplication operator: Precedence. (line 55) * asterisk (*), * operator, as regexp operator: Regexp Operators. @@ -30662,14 +30671,14 @@ Index * Benzinger, Michael: Contributors. (line 97) * Berry, Karl <1>: Ranges and Locales. (line 74) * Berry, Karl: Acknowledgments. (line 33) -* binary input/output: User-modified. (line 10) +* binary input/output: User-modified. (line 15) * bindtextdomain <1>: Programmer i18n. (line 47) * bindtextdomain: I18N Functions. (line 12) * bindtextdomain() function (C library): Explaining gettext. (line 49) * bindtextdomain() function (gawk), portability and: I18N Portability. (line 33) * BINMODE variable <1>: PC Using. (line 33) -* BINMODE variable: User-modified. (line 10) +* BINMODE variable: User-modified. (line 15) * bit-manipulation functions: Bitwise Functions. (line 6) * bits2str() user-defined function: Bitwise Functions. (line 70) * bitwise AND: Bitwise Functions. (line 39) @@ -30773,9 +30782,9 @@ Index (line 59) * caret (^), regexp operator: Regexp Operators. (line 22) * case keyword: Switch Statement. (line 6) -* case sensitivity, and regexps: User-modified. (line 82) -* case sensitivity, and string comparisons: User-modified. (line 82) -* case sensitivity, array indices and: Array Intro. (line 91) +* 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 92) * case sensitivity, converting case: String Functions. (line 520) * case sensitivity, example programs: Library Functions. (line 53) * case sensitivity, gawk: Case-sensitivity. (line 26) @@ -30827,7 +30836,7 @@ Index * comma (,), in range patterns: Ranges. (line 6) * command completion, in debugger: Readline Support. (line 6) * command line, arguments <1>: ARGC and ARGV. (line 6) -* command line, arguments <2>: Auto-set. (line 11) +* command line, arguments <2>: Auto-set. (line 15) * command line, arguments: Other Arguments. (line 6) * command line, directories on: Command line directories. (line 6) @@ -30909,7 +30918,7 @@ Index * continue statement: Continue Statement. (line 6) * control statements: Statements. (line 6) * controlling array scanning order: Controlling Scanning. - (line 12) + (line 14) * convert string to lower case: String Functions. (line 521) * convert string to number: String Functions. (line 385) * convert string to upper case: String Functions. (line 527) @@ -30920,7 +30929,7 @@ Index * converting, numbers to strings: Conversion. (line 6) * converting, strings to numbers <1>: Bitwise Functions. (line 109) * converting, strings to numbers: Conversion. (line 6) -* CONVFMT variable <1>: User-modified. (line 28) +* CONVFMT variable <1>: User-modified. (line 30) * CONVFMT variable: Conversion. (line 29) * CONVFMT variable, and array subscripts: Numeric Array Subscripts. (line 6) @@ -30969,9 +30978,9 @@ Index * dark corner, exit statement: Exit Statement. (line 30) * dark corner, field separators: Field Splitting Summary. (line 46) -* dark corner, FILENAME variable <1>: Auto-set. (line 93) +* dark corner, FILENAME variable <1>: Auto-set. (line 90) * dark corner, FILENAME variable: Getline Notes. (line 19) -* dark corner, FNR/NR variables: Auto-set. (line 314) +* dark corner, FNR/NR variables: Auto-set. (line 301) * dark corner, format-control characters: Control Letters. (line 18) * dark corner, FS as null string: Single Character Fields. (line 20) @@ -30990,7 +30999,7 @@ Index (line 43) * dark corner, split() function: String Functions. (line 359) * dark corner, strings, storing: gawk split records. (line 83) -* dark corner, value of ARGV[0]: Auto-set. (line 35) +* dark corner, value of ARGV[0]: Auto-set. (line 39) * data, fixed-width: Constant Size. (line 10) * data-driven languages: Basic High Level. (line 85) * database, group, reading: Group Functions. (line 6) @@ -31136,7 +31145,7 @@ Index * differences between gawk and awk: String Functions. (line 194) * differences in awk and gawk, ARGC/ARGV variables: ARGC and ARGV. (line 88) -* differences in awk and gawk, ARGIND variable: Auto-set. (line 40) +* differences in awk and gawk, ARGIND variable: Auto-set. (line 44) * differences in awk and gawk, array elements, deleting: Delete. (line 39) * differences in awk and gawk, AWKLIBPATH environment variable: AWKLIBPATH Variable. @@ -31150,22 +31159,22 @@ Index * differences in awk and gawk, BINMODE variable <1>: PC Using. (line 33) * differences in awk and gawk, BINMODE variable: User-modified. - (line 23) + (line 15) * differences in awk and gawk, close() function: Close Files And Pipes. (line 81) * differences in awk and gawk, command line directories: Command line directories. (line 6) -* differences in awk and gawk, ERRNO variable: Auto-set. (line 73) +* differences in awk and gawk, ERRNO variable: Auto-set. (line 74) * differences in awk and gawk, error messages: Special FD. (line 16) * differences in awk and gawk, FIELDWIDTHS variable: User-modified. - (line 35) -* differences in awk and gawk, FPAT variable: User-modified. (line 45) -* differences in awk and gawk, FUNCTAB variable: Auto-set. (line 119) + (line 37) +* differences in awk and gawk, FPAT variable: User-modified. (line 43) +* differences in awk and gawk, FUNCTAB variable: Auto-set. (line 115) * differences in awk and gawk, function arguments (gawk): Calling Built-in. (line 16) * differences in awk and gawk, getline command: Getline. (line 19) * differences in awk and gawk, IGNORECASE variable: User-modified. - (line 82) + (line 76) * differences in awk and gawk, implementation limitations <1>: Redirection. (line 135) * differences in awk and gawk, implementation limitations: Getline Notes. @@ -31178,12 +31187,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 98) +* differences in awk and gawk, LINT variable: User-modified. (line 88) * differences in awk and gawk, match() function: String Functions. (line 257) * differences in awk and gawk, print/printf statements: Format Modifiers. (line 13) -* differences in awk and gawk, PROCINFO array: Auto-set. (line 133) +* differences in awk and gawk, PROCINFO array: Auto-set. (line 128) * differences in awk and gawk, read timeouts: Read Timeout. (line 6) * differences in awk and gawk, record separators: awk split records. (line 124) @@ -31193,7 +31202,7 @@ Index (line 26) * differences in awk and gawk, RS/RT variables: gawk split records. (line 58) -* differences in awk and gawk, RT variable: Auto-set. (line 266) +* differences in awk and gawk, RT variable: Auto-set. (line 257) * differences in awk and gawk, single-character fields: Single Character Fields. (line 6) * differences in awk and gawk, split() function: String Functions. @@ -31201,9 +31210,9 @@ 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 274) +* differences in awk and gawk, SYMTAB variable: Auto-set. (line 261) * differences in awk and gawk, TEXTDOMAIN variable: User-modified. - (line 162) + (line 152) * differences in awk and gawk, trunc-mod operation: Arithmetic Ops. (line 66) * directories, command line: Command line directories. @@ -31242,8 +31251,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 138) -* effective user ID of gawk user: Auto-set. (line 142) +* effective group ID of gawk user: Auto-set. (line 133) +* effective user ID of gawk user: Auto-set. (line 137) * egrep utility <1>: Egrep Program. (line 6) * egrep utility: Bracket Expressions. (line 24) * egrep.awk program: Egrep Program. (line 54) @@ -31298,13 +31307,13 @@ Index (line 11) * EREs (Extended Regular Expressions): Bracket Expressions. (line 24) * ERRNO variable <1>: TCP/IP Networking. (line 54) -* ERRNO variable: Auto-set. (line 73) +* ERRNO variable: Auto-set. (line 74) * ERRNO variable, with BEGINFILE pattern: BEGINFILE/ENDFILE. (line 26) * ERRNO variable, with close() function: Close Files And Pipes. (line 139) * ERRNO variable, with getline command: Getline. (line 19) * error handling: Special FD. (line 16) -* error handling, ERRNO variable and: Auto-set. (line 73) +* error handling, ERRNO variable and: Auto-set. (line 74) * error output: Special FD. (line 6) * escape processing, gsub()/gensub()/sub() functions: Gory Details. (line 6) @@ -31358,7 +31367,7 @@ Index (line 6) * extension API version: Extension Versioning. (line 6) -* extension API, version number: Auto-set. (line 229) +* extension API, version number: Auto-set. (line 224) * extension example: Extension Example. (line 6) * extension registration: Registration Functions. (line 6) @@ -31407,11 +31416,11 @@ Index (line 6) * field separator, POSIX and: Field Splitting Summary. (line 40) -* field separators <1>: User-modified. (line 56) +* field separators <1>: User-modified. (line 50) * field separators: Field Separators. (line 15) * field separators, choice of: Field Separators. (line 51) -* field separators, FIELDWIDTHS variable and: User-modified. (line 35) -* field separators, FPAT variable and: User-modified. (line 45) +* field separators, FIELDWIDTHS variable and: User-modified. (line 37) +* field separators, FPAT variable and: User-modified. (line 43) * field separators, POSIX and: Fields. (line 6) * field separators, regular expressions as <1>: Regexp Field Splitting. (line 6) @@ -31431,13 +31440,13 @@ Index * fields, separating: Field Separators. (line 15) * fields, single-character: Single Character Fields. (line 6) -* FIELDWIDTHS variable <1>: User-modified. (line 35) +* FIELDWIDTHS variable <1>: User-modified. (line 37) * FIELDWIDTHS variable: Constant Size. (line 23) * file descriptors: Special FD. (line 6) -* file names, distinguishing: Auto-set. (line 52) +* 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 46) -* FILENAME variable <1>: Auto-set. (line 93) +* FILENAME variable <1>: Auto-set. (line 90) * FILENAME variable: Reading Files. (line 6) * FILENAME variable, getline, setting with: Getline Notes. (line 19) * filenames, assignments as: Ignoring Assigns. (line 6) @@ -31483,7 +31492,7 @@ Index * files, portable object, converting to message object files: I18N Example. (line 62) * files, portable object, generating: Options. (line 147) -* files, processing, ARGIND variable and: Auto-set. (line 47) +* files, processing, ARGIND variable and: Auto-set. (line 51) * files, reading: Rewind Function. (line 6) * files, reading, multiline records: Multiple Line. (line 6) * files, searching for regular expressions: Egrep Program. (line 6) @@ -31507,9 +31516,9 @@ Index * flush buffered output: I/O Functions. (line 25) * fnmatch() extension function: Extension Sample Fnmatch. (line 12) -* FNR variable <1>: Auto-set. (line 103) +* FNR variable <1>: Auto-set. (line 99) * FNR variable: Records. (line 6) -* FNR variable, changing: Auto-set. (line 314) +* FNR variable, changing: Auto-set. (line 301) * for statement: For Statement. (line 6) * for statement, looping over arrays: Scanning an Array. (line 20) * fork() extension function: Extension Sample Fork. @@ -31531,7 +31540,7 @@ Index * forward slash (/), /= operator, vs. /=.../ regexp constant: Assignment Ops. (line 148) * forward slash (/), patterns and: Expression Patterns. (line 24) -* FPAT variable <1>: User-modified. (line 45) +* FPAT variable <1>: User-modified. (line 43) * FPAT variable: Splitting By Content. (line 27) * frame debugger command: Execution Stack. (line 25) @@ -31541,7 +31550,7 @@ Index * Free Software Foundation (FSF) <2>: Getting. (line 10) * Free Software Foundation (FSF): Manual History. (line 6) * FreeBSD: Glossary. (line 616) -* FS variable <1>: User-modified. (line 56) +* FS variable <1>: User-modified. (line 50) * FS variable: Field Separators. (line 15) * FS variable, --field-separator option and: Options. (line 21) * FS variable, as null string: Single Character Fields. @@ -31559,7 +31568,7 @@ Index * FSF (Free Software Foundation): Manual History. (line 6) * fts() extension function: Extension Sample File Functions. (line 77) -* FUNCTAB array: Auto-set. (line 119) +* FUNCTAB array: Auto-set. (line 115) * function calls: Function Calls. (line 6) * function calls, indirect: Indirect Calls. (line 6) * function definition example: Function Example. (line 6) @@ -31609,7 +31618,7 @@ Index * G-d: Acknowledgments. (line 78) * Garfinkle, Scott: Contributors. (line 34) * gawk program, dynamic profiling: Profiling. (line 179) -* gawk version: Auto-set. (line 204) +* gawk version: Auto-set. (line 199) * gawk, ARGIND variable in: Other Arguments. (line 12) * gawk, awk and <1>: This Manual. (line 14) * gawk, awk and: Preface. (line 23) @@ -31630,7 +31639,7 @@ Index * gawk, distribution: Distribution contents. (line 6) * gawk, ERRNO variable in <1>: TCP/IP Networking. (line 54) -* gawk, ERRNO variable in <2>: Auto-set. (line 73) +* gawk, ERRNO variable in <2>: Auto-set. (line 74) * gawk, ERRNO variable in <3>: BEGINFILE/ENDFILE. (line 26) * gawk, ERRNO variable in <4>: Close Files And Pipes. (line 139) @@ -31639,22 +31648,22 @@ Index * gawk, extensions, disabling: Options. (line 254) * gawk, features, adding: Adding Code. (line 6) * gawk, features, advanced: Advanced Features. (line 6) -* gawk, field separators and: User-modified. (line 77) -* gawk, FIELDWIDTHS variable in <1>: User-modified. (line 35) +* gawk, field separators and: User-modified. (line 71) +* gawk, FIELDWIDTHS variable in <1>: User-modified. (line 37) * gawk, FIELDWIDTHS variable in: Constant Size. (line 23) * gawk, file names in: Special Files. (line 6) * gawk, format-control characters: Control Letters. (line 18) -* gawk, FPAT variable in <1>: User-modified. (line 45) +* gawk, FPAT variable in <1>: User-modified. (line 43) * gawk, FPAT variable in: Splitting By Content. (line 27) -* gawk, FUNCTAB array in: Auto-set. (line 119) +* gawk, FUNCTAB array in: Auto-set. (line 115) * 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 48) -* gawk, IGNORECASE variable in <3>: Array Intro. (line 91) -* gawk, IGNORECASE variable in <4>: User-modified. (line 82) +* gawk, IGNORECASE variable in <3>: Array Intro. (line 92) +* gawk, IGNORECASE variable in <4>: User-modified. (line 76) * gawk, IGNORECASE variable in: Case-sensitivity. (line 26) * gawk, implementation issues: Notes. (line 6) * gawk, implementation issues, debugging: Compatibility Mode. (line 6) @@ -31669,7 +31678,7 @@ Index (line 6) * gawk, interval expressions and: Regexp Operators. (line 140) * gawk, line continuation in: Conditional Exp. (line 34) -* gawk, LINT variable in: User-modified. (line 98) +* gawk, LINT variable in: User-modified. (line 88) * 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) @@ -31678,7 +31687,7 @@ Index * gawk, OS/2 version of: PC Using. (line 10) * gawk, PROCINFO array in <1>: Two-way I/O. (line 116) * gawk, PROCINFO array in <2>: Time Functions. (line 47) -* gawk, PROCINFO array in: Auto-set. (line 133) +* gawk, PROCINFO array in: Auto-set. (line 128) * gawk, regexp constants and: Using Constant Regexps. (line 28) * gawk, regular expressions, case sensitivity: Case-sensitivity. @@ -31686,15 +31695,15 @@ Index * gawk, regular expressions, operators: GNU Regexp Operators. (line 6) * gawk, regular expressions, precedence: Regexp Operators. (line 162) -* gawk, RT variable in <1>: Auto-set. (line 266) +* gawk, RT variable in <1>: Auto-set. (line 257) * gawk, RT variable in <2>: Multiple Line. (line 129) * gawk, RT variable in: awk split records. (line 124) * gawk, See Also awk: Preface. (line 36) * gawk, source code, obtaining: Getting. (line 6) * gawk, splitting fields and: Constant Size. (line 88) * gawk, string-translation functions: I18N Functions. (line 6) -* gawk, SYMTAB array in: Auto-set. (line 274) -* gawk, TEXTDOMAIN variable in: User-modified. (line 162) +* gawk, SYMTAB array in: Auto-set. (line 261) +* gawk, TEXTDOMAIN variable in: User-modified. (line 152) * gawk, timestamps: Time Functions. (line 6) * gawk, uses for: Preface. (line 36) * gawk, versions of, information about, printing: Options. (line 300) @@ -31780,7 +31789,7 @@ Index * 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 177) +* group ID of gawk user: Auto-set. (line 172) * groups, information about: Group Functions. (line 6) * gsub <1>: String Functions. (line 135) * gsub: Using Constant Regexps. @@ -31821,8 +31830,8 @@ Index * igawk.sh program: Igawk Program. (line 124) * ignore breakpoint: Breakpoint Control. (line 87) * ignore debugger command: Breakpoint Control. (line 87) -* IGNORECASE variable: User-modified. (line 82) -* IGNORECASE variable, and array indices: Array Intro. (line 91) +* IGNORECASE variable: User-modified. (line 76) +* IGNORECASE variable, and array indices: Array Intro. (line 92) * IGNORECASE variable, and array sorting functions: Array Sorting Functions. (line 83) * IGNORECASE variable, in example programs: Library Functions. @@ -31847,7 +31856,7 @@ Index * in operator, use in loops: Scanning an Array. (line 17) * increment operators: Increment Ops. (line 6) * index: String Functions. (line 151) -* indexing arrays: Array Intro. (line 49) +* indexing arrays: Array Intro. (line 50) * indirect function calls: Indirect Calls. (line 6) * infinite precision: Arbitrary Precision Arithmetic. (line 6) @@ -31874,7 +31883,7 @@ Index * input, standard <1>: Special FD. (line 6) * input, standard: Read Terminal. (line 6) * input/output functions: I/O Functions. (line 6) -* input/output, binary: User-modified. (line 10) +* input/output, binary: User-modified. (line 15) * input/output, from BEGIN and END: I/O And BEGIN/END. (line 6) * input/output, two-way: Two-way I/O. (line 44) * insomnia, cure for: Alarm Program. (line 6) @@ -31894,7 +31903,7 @@ Index * internationalization: I18N Functions. (line 6) * internationalization, localization <1>: Internationalization. (line 13) -* internationalization, localization: User-modified. (line 162) +* internationalization, localization: User-modified. (line 152) * internationalization, localization, character classes: Bracket Expressions. (line 90) * internationalization, localization, gawk and: Internationalization. @@ -32006,7 +32015,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 98) +* lint checking: User-modified. (line 88) * lint checking, array elements: Delete. (line 34) * lint checking, array subscripts: Uninitialized Subscripts. (line 43) @@ -32016,7 +32025,7 @@ Index (line 340) * lint checking, undefined functions: Pass By Value/Reference. (line 88) -* LINT variable: User-modified. (line 98) +* LINT variable: User-modified. (line 88) * Linux <1>: Glossary. (line 616) * Linux <2>: I18N Example. (line 55) * Linux: Manual History. (line 28) @@ -32075,7 +32084,7 @@ Index * mawk utility <3>: Concatenation. (line 36) * mawk utility <4>: Getline/Pipe. (line 62) * mawk utility: Escape Sequences. (line 124) -* maximum precision supported by MPFR library: Auto-set. (line 218) +* maximum precision supported by MPFR library: Auto-set. (line 213) * McPhee, Patrick: Contributors. (line 100) * message object files: Explaining gettext. (line 41) * message object files, converting from portable object files: I18N Example. @@ -32087,7 +32096,7 @@ Index * messages from extensions: Printing Messages. (line 6) * metacharacters in regular expressions: Regexp Operators. (line 6) * metacharacters, escape sequences for: Escape Sequences. (line 130) -* minimum precision supported by MPFR library: Auto-set. (line 221) +* minimum precision supported by MPFR library: Auto-set. (line 216) * mktime: Time Functions. (line 25) * modifiers, in format specifiers: Format Modifiers. (line 6) * monetary information, localization: Explaining gettext. (line 103) @@ -32141,7 +32150,7 @@ Index (line 47) * nexti debugger command: Debugger Execution Control. (line 49) -* NF variable <1>: Auto-set. (line 108) +* NF variable <1>: Auto-set. (line 104) * NF variable: Fields. (line 33) * NF variable, decrementing: Changing Fields. (line 107) * ni debugger command (alias for nexti): Debugger Execution Control. @@ -32150,9 +32159,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 128) +* NR variable <1>: Auto-set. (line 123) * NR variable: Records. (line 6) -* NR variable, changing: Auto-set. (line 314) +* NR variable, changing: Auto-set. (line 301) * null strings <1>: Basic Data Typing. (line 26) * null strings <2>: Truth Values. (line 6) * null strings <3>: Regexp Field Splitting. @@ -32176,7 +32185,7 @@ Index (line 6) * numbers, converting <1>: Bitwise Functions. (line 109) * numbers, converting: Conversion. (line 6) -* numbers, converting, to strings: User-modified. (line 28) +* numbers, converting, to strings: User-modified. (line 30) * numbers, floating-point: General Arithmetic. (line 6) * numbers, hexadecimal: Nondecimal-numbers. (line 6) * numbers, octal: Nondecimal-numbers. (line 6) @@ -32190,11 +32199,11 @@ 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 115) +* OFMT variable <1>: User-modified. (line 105) * OFMT variable <2>: Conversion. (line 55) * OFMT variable: OFMT. (line 15) * OFMT variable, POSIX awk and: OFMT. (line 27) -* OFS variable <1>: User-modified. (line 124) +* OFS variable <1>: User-modified. (line 114) * OFS variable <2>: Output Separators. (line 6) * OFS variable: Changing Fields. (line 64) * OpenBSD: Glossary. (line 616) @@ -32247,7 +32256,7 @@ Index (line 12) * ord() user-defined function: Ordinal Functions. (line 16) * order of evaluation, concatenation: Concatenation. (line 41) -* ORS variable <1>: User-modified. (line 129) +* ORS variable <1>: User-modified. (line 119) * ORS variable: Output Separators. (line 20) * output field separator, See OFS variable: Changing Fields. (line 64) * output record separator, See ORS variable: Output Separators. @@ -32267,7 +32276,7 @@ Index * p debugger command (alias for print): Viewing And Changing Data. (line 36) * P1003.1 POSIX standard: Glossary. (line 454) -* parent process ID of gawk process: Auto-set. (line 186) +* parent process ID of gawk process: Auto-set. (line 181) * parentheses (), in a profile: Profiling. (line 146) * parentheses (), regexp operator: Regexp Operators. (line 80) * password file: Passwd Functions. (line 16) @@ -32364,12 +32373,12 @@ Index * POSIX awk, break statement and: Break Statement. (line 51) * POSIX awk, changes in awk versions: POSIX. (line 6) * POSIX awk, continue statement and: Continue Statement. (line 43) -* POSIX awk, CONVFMT variable and: User-modified. (line 28) +* POSIX awk, CONVFMT variable and: User-modified. (line 30) * POSIX awk, date utility and: Time Functions. (line 263) * POSIX awk, field separators and <1>: Field Splitting Summary. (line 40) * POSIX awk, field separators and: Fields. (line 6) -* POSIX awk, FS variable and: User-modified. (line 66) +* POSIX awk, FS variable and: User-modified. (line 60) * POSIX awk, function keyword in: Definition Syntax. (line 83) * POSIX awk, functions and, gsub()/sub(): Gory Details. (line 54) * POSIX awk, functions and, length(): String Functions. (line 173) @@ -32390,7 +32399,7 @@ Index * POSIX, programs, implementing in awk: Clones. (line 6) * POSIXLY_CORRECT environment variable: Options. (line 340) * PREC variable <1>: Setting Precision. (line 6) -* PREC variable: User-modified. (line 134) +* PREC variable: User-modified. (line 124) * precedence <1>: Precedence. (line 6) * precedence: Increment Ops. (line 60) * precedence, regexp operators: Regexp Operators. (line 157) @@ -32401,7 +32410,7 @@ Index * print statement, commas, omitting: Print Examples. (line 31) * print statement, I/O operators in: Precedence. (line 71) * print statement, line continuations and: Print Examples. (line 76) -* print statement, OFMT variable and: User-modified. (line 124) +* print statement, OFMT variable and: User-modified. (line 114) * print statement, See Also redirection, of output: Redirection. (line 17) * print statement, sprintf() function and: Round Function. (line 6) @@ -32432,29 +32441,29 @@ 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 180) -* process ID of gawk process: Auto-set. (line 183) +* process group idIDof gawk process: Auto-set. (line 175) +* process ID of gawk process: Auto-set. (line 178) * processes, two-way communications with: Two-way I/O. (line 23) * 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 133) +* PROCINFO array: Auto-set. (line 128) * PROCINFO array, and communications via ptys: Two-way I/O. (line 116) * 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 161) -* PROCINFO array, uses: Auto-set. (line 239) +* PROCINFO array, uses: Auto-set. (line 234) * PROCINFO, values of sorted_in: Controlling Scanning. - (line 24) + (line 26) * profiling awk programs: Profiling. (line 6) * profiling awk programs, dynamically: Profiling. (line 179) -* program identifiers: Auto-set. (line 151) +* program identifiers: Auto-set. (line 146) * program, definition of: Getting Started. (line 21) * programmers, attractiveness of: Two-way I/O. (line 6) * programming conventions, --non-decimal-data option: Nondecimal Data. (line 36) -* programming conventions, ARGC/ARGV variables: Auto-set. (line 31) +* programming conventions, ARGC/ARGV variables: Auto-set. (line 35) * programming conventions, exit statement: Exit Statement. (line 38) * programming conventions, function parameters: Return Statement. (line 45) @@ -32518,7 +32527,7 @@ Index * readfile() user-defined function: Readfile Function. (line 30) * reading input files: Reading Files. (line 6) * recipe for a programming language: History. (line 6) -* record separators <1>: User-modified. (line 143) +* record separators <1>: User-modified. (line 133) * record separators: awk split records. (line 6) * record separators, changing: awk split records. (line 85) * record separators, regular expressions as: awk split records. @@ -32559,7 +32568,7 @@ Index * regular expressions, as patterns: Regexp Usage. (line 6) * regular expressions, as record separators: awk split records. (line 124) -* regular expressions, case sensitivity <1>: User-modified. (line 82) +* regular expressions, case sensitivity <1>: User-modified. (line 76) * regular expressions, case sensitivity: Case-sensitivity. (line 6) * regular expressions, computed: Computed Regexps. (line 6) * regular expressions, constants, See regexp constants: Regexp Usage. @@ -32609,7 +32618,7 @@ Index * right shift: Bitwise Functions. (line 52) * right shift, bitwise: Bitwise Functions. (line 32) * Ritchie, Dennis: Basic Data Typing. (line 55) -* RLENGTH variable: Auto-set. (line 253) +* RLENGTH variable: Auto-set. (line 244) * RLENGTH variable, match() function and: String Functions. (line 221) * Robbins, Arnold <1>: Future Extensions. (line 6) * Robbins, Arnold <2>: Bugs. (line 32) @@ -32633,14 +32642,14 @@ Index * rounding numbers: Round Function. (line 6) * ROUNDMODE variable <1>: Setting Rounding Mode. (line 6) -* ROUNDMODE variable: User-modified. (line 138) -* RS variable <1>: User-modified. (line 143) +* ROUNDMODE variable: User-modified. (line 128) +* RS variable <1>: User-modified. (line 133) * RS variable: awk split records. (line 12) * RS variable, multiline records and: Multiple Line. (line 17) * rshift: Bitwise Functions. (line 52) -* RSTART variable: Auto-set. (line 259) +* RSTART variable: Auto-set. (line 250) * RSTART variable, match() function and: String Functions. (line 221) -* RT variable <1>: Auto-set. (line 266) +* RT variable <1>: Auto-set. (line 257) * RT variable <2>: Multiple Line. (line 129) * RT variable: awk split records. (line 124) * Rubin, Paul <1>: Contributors. (line 15) @@ -32660,6 +32669,7 @@ Index * scanning arrays: Scanning an Array. (line 6) * scanning multidimensional arrays: Multiscanning. (line 11) * Schorr, Andrew <1>: Contributors. (line 131) +* Schorr, Andrew <2>: Auto-set. (line 284) * Schorr, Andrew: Acknowledgments. (line 60) * Schreiber, Bert: Acknowledgments. (line 38) * Schreiber, Rita: Acknowledgments. (line 38) @@ -32687,16 +32697,16 @@ Index (line 19) * semicolon (;), separating statements in actions: Statements/Lines. (line 91) -* separators, field: User-modified. (line 56) -* separators, field, FIELDWIDTHS variable and: User-modified. (line 35) -* separators, field, FPAT variable and: User-modified. (line 45) +* separators, field: User-modified. (line 50) +* separators, field, FIELDWIDTHS variable and: User-modified. (line 37) +* separators, field, FPAT variable and: User-modified. (line 43) * separators, field, POSIX and: Fields. (line 6) -* separators, for records <1>: User-modified. (line 143) +* separators, for records <1>: User-modified. (line 133) * separators, for records: awk split records. (line 6) * separators, for records, regular expressions as: awk split records. (line 124) * separators, for statements in actions: Action Overview. (line 19) -* separators, subscript: User-modified. (line 156) +* separators, subscript: User-modified. (line 146) * set breakpoint: Breakpoint Control. (line 11) * set debugger command: Viewing And Changing Data. (line 59) @@ -32747,7 +32757,7 @@ Index (line 110) * sidebar, Changing FS Does Not Affect the Fields: Field Splitting Summary. (line 38) -* sidebar, Changing NR and FNR: Auto-set. (line 312) +* sidebar, Changing NR and FNR: Auto-set. (line 299) * sidebar, Controlling Output Buffering with system(): I/O Functions. (line 135) * sidebar, Escape Sequences for Metacharacters: Escape Sequences. @@ -32822,7 +32832,7 @@ Index * source code, QuikTrim Awk: Other Versions. (line 134) * source code, Solaris awk: Other Versions. (line 96) * source files, search path for: Igawk Program. (line 368) -* sparse arrays: Array Intro. (line 70) +* sparse arrays: Array Intro. (line 71) * Spencer, Henry: Glossary. (line 12) * split: String Functions. (line 313) * split string into array: String Functions. (line 291) @@ -32831,7 +32841,7 @@ Index * split.awk program: Split Program. (line 30) * sprintf <1>: String Functions. (line 378) * sprintf: OFMT. (line 15) -* sprintf() function, OFMT variable and: User-modified. (line 124) +* sprintf() function, OFMT variable and: User-modified. (line 114) * sprintf() function, print/printf statements and: Round Function. (line 6) * sqrt: Numeric Functions. (line 78) @@ -32877,7 +32887,7 @@ Index * strings, converting <1>: Bitwise Functions. (line 109) * strings, converting: Conversion. (line 6) * strings, converting letter case: String Functions. (line 520) -* strings, converting, numbers to: User-modified. (line 28) +* strings, converting, numbers to: User-modified. (line 30) * strings, empty, See null strings: awk split records. (line 114) * strings, extracting: String Extraction. (line 6) * strings, for localization: Programmer i18n. (line 14) @@ -32894,7 +32904,7 @@ Index (line 43) * sub() function, arguments of: String Functions. (line 460) * sub() function, escape processing: Gory Details. (line 6) -* subscript separators: User-modified. (line 156) +* subscript separators: User-modified. (line 146) * subscripts in arrays, multidimensional: Multidimensional. (line 10) * subscripts in arrays, multidimensional, scanning: Multiscanning. (line 11) @@ -32902,16 +32912,16 @@ Index (line 6) * subscripts in arrays, uninitialized variables as: Uninitialized Subscripts. (line 6) -* SUBSEP variable: User-modified. (line 156) +* SUBSEP variable: User-modified. (line 146) * SUBSEP variable, and multidimensional arrays: Multidimensional. (line 16) * substitute in string: String Functions. (line 82) * substr: String Functions. (line 479) * substring: String Functions. (line 479) * Sumner, Andrew: Other Versions. (line 64) -* supplementary groups of gawk process: Auto-set. (line 234) +* supplementary groups of gawk process: Auto-set. (line 229) * switch statement: Switch Statement. (line 6) -* SYMTAB array: Auto-set. (line 274) +* SYMTAB array: Auto-set. (line 261) * syntactic ambiguity: /= operator vs. /=.../ regexp constant: Assignment Ops. (line 148) * system: I/O Functions. (line 72) @@ -32941,7 +32951,7 @@ Index * text, printing: Print. (line 22) * text, printing, unduplicated lines of: Uniq Program. (line 6) * TEXTDOMAIN variable <1>: Programmer i18n. (line 9) -* TEXTDOMAIN variable: User-modified. (line 162) +* TEXTDOMAIN variable: User-modified. (line 152) * TEXTDOMAIN variable, BEGIN pattern and: Programmer i18n. (line 60) * TEXTDOMAIN variable, portability and: I18N Portability. (line 20) * textdomain() function (C library): Explaining gettext. (line 27) @@ -33090,10 +33100,10 @@ Index * variables, uninitialized, as array subscripts: Uninitialized Subscripts. (line 6) * variables, user-defined: Variables. (line 6) -* version of gawk: Auto-set. (line 204) -* version of gawk extension API: Auto-set. (line 229) -* version of GNU MP library: Auto-set. (line 215) -* version of GNU MPFR library: Auto-set. (line 211) +* version of gawk: Auto-set. (line 199) +* version of gawk extension API: Auto-set. (line 224) +* version of GNU MP library: Auto-set. (line 210) +* version of GNU MPFR library: Auto-set. (line 206) * vertical bar (|): Regexp Operators. (line 70) * vertical bar (|), | operator (I/O) <1>: Precedence. (line 65) * vertical bar (|), | operator (I/O): Getline/Pipe. (line 9) @@ -33369,344 +33379,345 @@ Node: Next Statement400827 Node: Nextfile Statement403217 Node: Exit Statement405872 Node: Built-in Variables408274 -Node: User-modified409369 -Ref: User-modified-Footnote-1417727 -Node: Auto-set417789 -Ref: Auto-set-Footnote-1430856 -Ref: Auto-set-Footnote-2431061 -Node: ARGC and ARGV431117 -Node: Arrays434971 -Node: Array Basics436476 -Node: Array Intro437302 -Node: Reference to Elements441619 -Node: Assigning Elements443889 -Node: Array Example444380 -Node: Scanning an Array446112 -Node: Controlling Scanning448426 -Ref: Controlling Scanning-Footnote-1453513 -Node: Delete453829 -Ref: Delete-Footnote-1456594 -Node: Numeric Array Subscripts456651 -Node: Uninitialized Subscripts458834 -Node: Multidimensional460461 -Node: Multiscanning463554 -Node: Arrays of Arrays465143 -Node: Functions469783 -Node: Built-in470602 -Node: Calling Built-in471680 -Node: Numeric Functions473668 -Ref: Numeric Functions-Footnote-1477502 -Ref: Numeric Functions-Footnote-2477859 -Ref: Numeric Functions-Footnote-3477907 -Node: String Functions478176 -Ref: String Functions-Footnote-1501179 -Ref: String Functions-Footnote-2501308 -Ref: String Functions-Footnote-3501556 -Node: Gory Details501643 -Ref: table-sub-escapes503322 -Ref: table-sub-posix-92504676 -Ref: table-sub-proposed506027 -Ref: table-posix-sub507381 -Ref: table-gensub-escapes508926 -Ref: Gory Details-Footnote-1510102 -Ref: Gory Details-Footnote-2510153 -Node: I/O Functions510304 -Ref: I/O Functions-Footnote-1517300 -Node: Time Functions517447 -Ref: Time Functions-Footnote-1528440 -Ref: Time Functions-Footnote-2528508 -Ref: Time Functions-Footnote-3528666 -Ref: Time Functions-Footnote-4528777 -Ref: Time Functions-Footnote-5528889 -Ref: Time Functions-Footnote-6529116 -Node: Bitwise Functions529382 -Ref: table-bitwise-ops529944 -Ref: Bitwise Functions-Footnote-1534189 -Node: Type Functions534373 -Node: I18N Functions535524 -Node: User-defined537176 -Node: Definition Syntax537980 -Ref: Definition Syntax-Footnote-1542894 -Node: Function Example542963 -Ref: Function Example-Footnote-1545612 -Node: Function Caveats545634 -Node: Calling A Function546152 -Node: Variable Scope547107 -Node: Pass By Value/Reference550070 -Node: Return Statement553578 -Node: Dynamic Typing556559 -Node: Indirect Calls557490 -Node: Library Functions567177 -Ref: Library Functions-Footnote-1570690 -Ref: Library Functions-Footnote-2570833 -Node: Library Names571004 -Ref: Library Names-Footnote-1574477 -Ref: Library Names-Footnote-2574697 -Node: General Functions574783 -Node: Strtonum Function575811 -Node: Assert Function578741 -Node: Round Function582067 -Node: Cliff Random Function583608 -Node: Ordinal Functions584624 -Ref: Ordinal Functions-Footnote-1587701 -Ref: Ordinal Functions-Footnote-2587953 -Node: Join Function588164 -Ref: Join Function-Footnote-1589935 -Node: Getlocaltime Function590135 -Node: Readfile Function593876 -Node: Data File Management595715 -Node: Filetrans Function596347 -Node: Rewind Function600416 -Node: File Checking601803 -Node: Empty Files602897 -Node: Ignoring Assigns605127 -Node: Getopt Function606681 -Ref: Getopt Function-Footnote-1617984 -Node: Passwd Functions618187 -Ref: Passwd Functions-Footnote-1627165 -Node: Group Functions627253 -Node: Walking Arrays635337 -Node: Sample Programs637473 -Node: Running Examples638147 -Node: Clones638875 -Node: Cut Program640099 -Node: Egrep Program649950 -Ref: Egrep Program-Footnote-1657723 -Node: Id Program657833 -Node: Split Program661482 -Ref: Split Program-Footnote-1665001 -Node: Tee Program665129 -Node: Uniq Program667932 -Node: Wc Program675361 -Ref: Wc Program-Footnote-1679627 -Ref: Wc Program-Footnote-2679827 -Node: Miscellaneous Programs679919 -Node: Dupword Program681107 -Node: Alarm Program683138 -Node: Translate Program687945 -Ref: Translate Program-Footnote-1692332 -Ref: Translate Program-Footnote-2692580 -Node: Labels Program692714 -Ref: Labels Program-Footnote-1696085 -Node: Word Sorting696169 -Node: History Sorting700053 -Node: Extract Program701892 -Ref: Extract Program-Footnote-1709395 -Node: Simple Sed709523 -Node: Igawk Program712585 -Ref: Igawk Program-Footnote-1727756 -Ref: Igawk Program-Footnote-2727957 -Node: Anagram Program728095 -Node: Signature Program731163 -Node: Advanced Features732263 -Node: Nondecimal Data734149 -Node: Array Sorting735732 -Node: Controlling Array Traversal736429 -Node: Array Sorting Functions744713 -Ref: Array Sorting Functions-Footnote-1748582 -Node: Two-way I/O748776 -Ref: Two-way I/O-Footnote-1754208 -Node: TCP/IP Networking754290 -Node: Profiling757134 -Node: Internationalization764637 -Node: I18N and L10N766062 -Node: Explaining gettext766748 -Ref: Explaining gettext-Footnote-1771816 -Ref: Explaining gettext-Footnote-2772000 -Node: Programmer i18n772165 -Node: Translator i18n776392 -Node: String Extraction777186 -Ref: String Extraction-Footnote-1778147 -Node: Printf Ordering778233 -Ref: Printf Ordering-Footnote-1781015 -Node: I18N Portability781079 -Ref: I18N Portability-Footnote-1783528 -Node: I18N Example783591 -Ref: I18N Example-Footnote-1786229 -Node: Gawk I18N786301 -Node: Debugger786922 -Node: Debugging787893 -Node: Debugging Concepts788326 -Node: Debugging Terms790182 -Node: Awk Debugging792779 -Node: Sample Debugging Session793671 -Node: Debugger Invocation794191 -Node: Finding The Bug795524 -Node: List of Debugger Commands802011 -Node: Breakpoint Control803345 -Node: Debugger Execution Control807009 -Node: Viewing And Changing Data810369 -Node: Execution Stack813725 -Node: Debugger Info815192 -Node: Miscellaneous Debugger Commands819186 -Node: Readline Support824364 -Node: Limitations825195 -Node: Arbitrary Precision Arithmetic827447 -Ref: Arbitrary Precision Arithmetic-Footnote-1829096 -Node: General Arithmetic829244 -Node: Floating Point Issues830964 -Node: String Conversion Precision831845 -Ref: String Conversion Precision-Footnote-1833550 -Node: Unexpected Results833659 -Node: POSIX Floating Point Problems835812 -Ref: POSIX Floating Point Problems-Footnote-1839637 -Node: Integer Programming839675 -Node: Floating-point Programming841414 -Ref: Floating-point Programming-Footnote-1847745 -Ref: Floating-point Programming-Footnote-2848015 -Node: Floating-point Representation848279 -Node: Floating-point Context849444 -Ref: table-ieee-formats850283 -Node: Rounding Mode851667 -Ref: table-rounding-modes852146 -Ref: Rounding Mode-Footnote-1855161 -Node: Gawk and MPFR855340 -Node: Arbitrary Precision Floats856749 -Ref: Arbitrary Precision Floats-Footnote-1859192 -Node: Setting Precision859508 -Ref: table-predefined-precision-strings860194 -Node: Setting Rounding Mode862339 -Ref: table-gawk-rounding-modes862743 -Node: Floating-point Constants863930 -Node: Changing Precision865359 -Ref: Changing Precision-Footnote-1866756 -Node: Exact Arithmetic866930 -Node: Arbitrary Precision Integers870068 -Ref: Arbitrary Precision Integers-Footnote-1873083 -Node: Dynamic Extensions873230 -Node: Extension Intro874688 -Node: Plugin License875953 -Node: Extension Mechanism Outline876638 -Ref: load-extension877055 -Ref: load-new-function878533 -Ref: call-new-function879528 -Node: Extension API Description881543 -Node: Extension API Functions Introduction882830 -Node: General Data Types887757 -Ref: General Data Types-Footnote-1893452 -Node: Requesting Values893751 -Ref: table-value-types-returned894488 -Node: Memory Allocation Functions895442 -Ref: Memory Allocation Functions-Footnote-1898188 -Node: Constructor Functions898284 -Node: Registration Functions900042 -Node: Extension Functions900727 -Node: Exit Callback Functions903029 -Node: Extension Version String904278 -Node: Input Parsers904928 -Node: Output Wrappers914685 -Node: Two-way processors919195 -Node: Printing Messages921403 -Ref: Printing Messages-Footnote-1922480 -Node: Updating `ERRNO'922632 -Node: Accessing Parameters923371 -Node: Symbol Table Access924601 -Node: Symbol table by name925115 -Node: Symbol table by cookie927091 -Ref: Symbol table by cookie-Footnote-1931223 -Node: Cached values931286 -Ref: Cached values-Footnote-1934776 -Node: Array Manipulation934867 -Ref: Array Manipulation-Footnote-1935965 -Node: Array Data Types936004 -Ref: Array Data Types-Footnote-1938707 -Node: Array Functions938799 -Node: Flattening Arrays942635 -Node: Creating Arrays949487 -Node: Extension API Variables954212 -Node: Extension Versioning954848 -Node: Extension API Informational Variables956749 -Node: Extension API Boilerplate957835 -Node: Finding Extensions961639 -Node: Extension Example962199 -Node: Internal File Description962929 -Node: Internal File Ops967020 -Ref: Internal File Ops-Footnote-1978529 -Node: Using Internal File Ops978669 -Ref: Using Internal File Ops-Footnote-1981016 -Node: Extension Samples981282 -Node: Extension Sample File Functions982806 -Node: Extension Sample Fnmatch991293 -Node: Extension Sample Fork993062 -Node: Extension Sample Inplace994275 -Node: Extension Sample Ord996053 -Node: Extension Sample Readdir996889 -Node: Extension Sample Revout998421 -Node: Extension Sample Rev2way999014 -Node: Extension Sample Read write array999704 -Node: Extension Sample Readfile1001587 -Node: Extension Sample API Tests1002687 -Node: Extension Sample Time1003212 -Node: gawkextlib1004576 -Node: Language History1007357 -Node: V7/SVR3.11008950 -Node: SVR41011270 -Node: POSIX1012712 -Node: BTL1014098 -Node: POSIX/GNU1014832 -Node: Feature History1020431 -Node: Common Extensions1033407 -Node: Ranges and Locales1034719 -Ref: Ranges and Locales-Footnote-11039336 -Ref: Ranges and Locales-Footnote-21039363 -Ref: Ranges and Locales-Footnote-31039597 -Node: Contributors1039818 -Node: Installation1045199 -Node: Gawk Distribution1046093 -Node: Getting1046577 -Node: Extracting1047403 -Node: Distribution contents1049095 -Node: Unix Installation1054816 -Node: Quick Installation1055433 -Node: Additional Configuration Options1057879 -Node: Configuration Philosophy1059615 -Node: Non-Unix Installation1061969 -Node: PC Installation1062427 -Node: PC Binary Installation1063726 -Node: PC Compiling1065574 -Node: PC Testing1068518 -Node: PC Using1069694 -Node: Cygwin1073862 -Node: MSYS1074671 -Node: VMS Installation1075185 -Node: VMS Compilation1075981 -Ref: VMS Compilation-Footnote-11077233 -Node: VMS Dynamic Extensions1077291 -Node: VMS Installation Details1078664 -Node: VMS Running1080915 -Node: VMS GNV1083749 -Node: VMS Old Gawk1084472 -Node: Bugs1084942 -Node: Other Versions1088860 -Node: Notes1094944 -Node: Compatibility Mode1095744 -Node: Additions1096527 -Node: Accessing The Source1097454 -Node: Adding Code1098894 -Node: New Ports1104939 -Node: Derived Files1109074 -Ref: Derived Files-Footnote-11114395 -Ref: Derived Files-Footnote-21114429 -Ref: Derived Files-Footnote-31115029 -Node: Future Extensions1115127 -Node: Implementation Limitations1115710 -Node: Extension Design1116958 -Node: Old Extension Problems1118112 -Ref: Old Extension Problems-Footnote-11119620 -Node: Extension New Mechanism Goals1119677 -Ref: Extension New Mechanism Goals-Footnote-11123042 -Node: Extension Other Design Decisions1123228 -Node: Extension Future Growth1125334 -Node: Old Extension Mechanism1126170 -Node: Basic Concepts1127910 -Node: Basic High Level1128591 -Ref: figure-general-flow1128863 -Ref: figure-process-flow1129462 -Ref: Basic High Level-Footnote-11132691 -Node: Basic Data Typing1132876 -Node: Glossary1136231 -Node: Copying1161462 -Node: GNU Free Documentation License1199018 -Node: Index1224154 +Node: User-modified409370 +Ref: User-modified-Footnote-1417055 +Node: Auto-set417117 +Ref: Auto-set-Footnote-1429682 +Ref: Auto-set-Footnote-2429887 +Node: ARGC and ARGV429943 +Node: Arrays433797 +Node: Array Basics435295 +Node: Array Intro436121 +Ref: figure-array-elements438094 +Node: Reference to Elements440501 +Node: Assigning Elements442774 +Node: Array Example443265 +Node: Scanning an Array444997 +Node: Controlling Scanning448012 +Ref: Controlling Scanning-Footnote-1453185 +Node: Delete453501 +Ref: Delete-Footnote-1456266 +Node: Numeric Array Subscripts456323 +Node: Uninitialized Subscripts458506 +Node: Multidimensional460131 +Node: Multiscanning463224 +Node: Arrays of Arrays464813 +Node: Functions469453 +Node: Built-in470272 +Node: Calling Built-in471350 +Node: Numeric Functions473338 +Ref: Numeric Functions-Footnote-1477172 +Ref: Numeric Functions-Footnote-2477529 +Ref: Numeric Functions-Footnote-3477577 +Node: String Functions477846 +Ref: String Functions-Footnote-1500849 +Ref: String Functions-Footnote-2500978 +Ref: String Functions-Footnote-3501226 +Node: Gory Details501313 +Ref: table-sub-escapes502992 +Ref: table-sub-posix-92504346 +Ref: table-sub-proposed505697 +Ref: table-posix-sub507051 +Ref: table-gensub-escapes508596 +Ref: Gory Details-Footnote-1509772 +Ref: Gory Details-Footnote-2509823 +Node: I/O Functions509974 +Ref: I/O Functions-Footnote-1516970 +Node: Time Functions517117 +Ref: Time Functions-Footnote-1528110 +Ref: Time Functions-Footnote-2528178 +Ref: Time Functions-Footnote-3528336 +Ref: Time Functions-Footnote-4528447 +Ref: Time Functions-Footnote-5528559 +Ref: Time Functions-Footnote-6528786 +Node: Bitwise Functions529052 +Ref: table-bitwise-ops529614 +Ref: Bitwise Functions-Footnote-1533859 +Node: Type Functions534043 +Node: I18N Functions535194 +Node: User-defined536846 +Node: Definition Syntax537650 +Ref: Definition Syntax-Footnote-1542564 +Node: Function Example542633 +Ref: Function Example-Footnote-1545282 +Node: Function Caveats545304 +Node: Calling A Function545822 +Node: Variable Scope546777 +Node: Pass By Value/Reference549740 +Node: Return Statement553248 +Node: Dynamic Typing556229 +Node: Indirect Calls557160 +Node: Library Functions566847 +Ref: Library Functions-Footnote-1570360 +Ref: Library Functions-Footnote-2570503 +Node: Library Names570674 +Ref: Library Names-Footnote-1574147 +Ref: Library Names-Footnote-2574367 +Node: General Functions574453 +Node: Strtonum Function575481 +Node: Assert Function578411 +Node: Round Function581737 +Node: Cliff Random Function583278 +Node: Ordinal Functions584294 +Ref: Ordinal Functions-Footnote-1587371 +Ref: Ordinal Functions-Footnote-2587623 +Node: Join Function587834 +Ref: Join Function-Footnote-1589605 +Node: Getlocaltime Function589805 +Node: Readfile Function593546 +Node: Data File Management595385 +Node: Filetrans Function596017 +Node: Rewind Function600086 +Node: File Checking601473 +Node: Empty Files602567 +Node: Ignoring Assigns604797 +Node: Getopt Function606351 +Ref: Getopt Function-Footnote-1617654 +Node: Passwd Functions617857 +Ref: Passwd Functions-Footnote-1626835 +Node: Group Functions626923 +Node: Walking Arrays635007 +Node: Sample Programs637143 +Node: Running Examples637817 +Node: Clones638545 +Node: Cut Program639769 +Node: Egrep Program649620 +Ref: Egrep Program-Footnote-1657393 +Node: Id Program657503 +Node: Split Program661152 +Ref: Split Program-Footnote-1664671 +Node: Tee Program664799 +Node: Uniq Program667602 +Node: Wc Program675031 +Ref: Wc Program-Footnote-1679297 +Ref: Wc Program-Footnote-2679497 +Node: Miscellaneous Programs679589 +Node: Dupword Program680777 +Node: Alarm Program682808 +Node: Translate Program687615 +Ref: Translate Program-Footnote-1692002 +Ref: Translate Program-Footnote-2692250 +Node: Labels Program692384 +Ref: Labels Program-Footnote-1695755 +Node: Word Sorting695839 +Node: History Sorting699723 +Node: Extract Program701562 +Ref: Extract Program-Footnote-1709065 +Node: Simple Sed709193 +Node: Igawk Program712255 +Ref: Igawk Program-Footnote-1727426 +Ref: Igawk Program-Footnote-2727627 +Node: Anagram Program727765 +Node: Signature Program730833 +Node: Advanced Features731933 +Node: Nondecimal Data733819 +Node: Array Sorting735402 +Node: Controlling Array Traversal736099 +Node: Array Sorting Functions744383 +Ref: Array Sorting Functions-Footnote-1748252 +Node: Two-way I/O748446 +Ref: Two-way I/O-Footnote-1753878 +Node: TCP/IP Networking753960 +Node: Profiling756804 +Node: Internationalization764307 +Node: I18N and L10N765732 +Node: Explaining gettext766418 +Ref: Explaining gettext-Footnote-1771486 +Ref: Explaining gettext-Footnote-2771670 +Node: Programmer i18n771835 +Node: Translator i18n776062 +Node: String Extraction776856 +Ref: String Extraction-Footnote-1777817 +Node: Printf Ordering777903 +Ref: Printf Ordering-Footnote-1780685 +Node: I18N Portability780749 +Ref: I18N Portability-Footnote-1783198 +Node: I18N Example783261 +Ref: I18N Example-Footnote-1785899 +Node: Gawk I18N785971 +Node: Debugger786592 +Node: Debugging787563 +Node: Debugging Concepts787996 +Node: Debugging Terms789852 +Node: Awk Debugging792449 +Node: Sample Debugging Session793341 +Node: Debugger Invocation793861 +Node: Finding The Bug795194 +Node: List of Debugger Commands801681 +Node: Breakpoint Control803015 +Node: Debugger Execution Control806679 +Node: Viewing And Changing Data810039 +Node: Execution Stack813395 +Node: Debugger Info814862 +Node: Miscellaneous Debugger Commands818856 +Node: Readline Support824034 +Node: Limitations824865 +Node: Arbitrary Precision Arithmetic827117 +Ref: Arbitrary Precision Arithmetic-Footnote-1828766 +Node: General Arithmetic828914 +Node: Floating Point Issues830634 +Node: String Conversion Precision831515 +Ref: String Conversion Precision-Footnote-1833220 +Node: Unexpected Results833329 +Node: POSIX Floating Point Problems835482 +Ref: POSIX Floating Point Problems-Footnote-1839307 +Node: Integer Programming839345 +Node: Floating-point Programming841084 +Ref: Floating-point Programming-Footnote-1847415 +Ref: Floating-point Programming-Footnote-2847685 +Node: Floating-point Representation847949 +Node: Floating-point Context849114 +Ref: table-ieee-formats849953 +Node: Rounding Mode851337 +Ref: table-rounding-modes851816 +Ref: Rounding Mode-Footnote-1854831 +Node: Gawk and MPFR855010 +Node: Arbitrary Precision Floats856419 +Ref: Arbitrary Precision Floats-Footnote-1858862 +Node: Setting Precision859178 +Ref: table-predefined-precision-strings859864 +Node: Setting Rounding Mode862009 +Ref: table-gawk-rounding-modes862413 +Node: Floating-point Constants863600 +Node: Changing Precision865029 +Ref: Changing Precision-Footnote-1866426 +Node: Exact Arithmetic866600 +Node: Arbitrary Precision Integers869738 +Ref: Arbitrary Precision Integers-Footnote-1872753 +Node: Dynamic Extensions872900 +Node: Extension Intro874358 +Node: Plugin License875623 +Node: Extension Mechanism Outline876308 +Ref: load-extension876725 +Ref: load-new-function878203 +Ref: call-new-function879198 +Node: Extension API Description881213 +Node: Extension API Functions Introduction882500 +Node: General Data Types887427 +Ref: General Data Types-Footnote-1893122 +Node: Requesting Values893421 +Ref: table-value-types-returned894158 +Node: Memory Allocation Functions895112 +Ref: Memory Allocation Functions-Footnote-1897858 +Node: Constructor Functions897954 +Node: Registration Functions899712 +Node: Extension Functions900397 +Node: Exit Callback Functions902699 +Node: Extension Version String903948 +Node: Input Parsers904598 +Node: Output Wrappers914355 +Node: Two-way processors918865 +Node: Printing Messages921073 +Ref: Printing Messages-Footnote-1922150 +Node: Updating `ERRNO'922302 +Node: Accessing Parameters923041 +Node: Symbol Table Access924271 +Node: Symbol table by name924785 +Node: Symbol table by cookie926761 +Ref: Symbol table by cookie-Footnote-1930893 +Node: Cached values930956 +Ref: Cached values-Footnote-1934446 +Node: Array Manipulation934537 +Ref: Array Manipulation-Footnote-1935635 +Node: Array Data Types935674 +Ref: Array Data Types-Footnote-1938377 +Node: Array Functions938469 +Node: Flattening Arrays942305 +Node: Creating Arrays949157 +Node: Extension API Variables953882 +Node: Extension Versioning954518 +Node: Extension API Informational Variables956419 +Node: Extension API Boilerplate957505 +Node: Finding Extensions961309 +Node: Extension Example961869 +Node: Internal File Description962599 +Node: Internal File Ops966690 +Ref: Internal File Ops-Footnote-1978199 +Node: Using Internal File Ops978339 +Ref: Using Internal File Ops-Footnote-1980686 +Node: Extension Samples980952 +Node: Extension Sample File Functions982476 +Node: Extension Sample Fnmatch990963 +Node: Extension Sample Fork992732 +Node: Extension Sample Inplace993945 +Node: Extension Sample Ord995723 +Node: Extension Sample Readdir996559 +Node: Extension Sample Revout998091 +Node: Extension Sample Rev2way998684 +Node: Extension Sample Read write array999374 +Node: Extension Sample Readfile1001257 +Node: Extension Sample API Tests1002357 +Node: Extension Sample Time1002882 +Node: gawkextlib1004246 +Node: Language History1007027 +Node: V7/SVR3.11008620 +Node: SVR41010940 +Node: POSIX1012382 +Node: BTL1013768 +Node: POSIX/GNU1014502 +Node: Feature History1020101 +Node: Common Extensions1033077 +Node: Ranges and Locales1034389 +Ref: Ranges and Locales-Footnote-11039006 +Ref: Ranges and Locales-Footnote-21039033 +Ref: Ranges and Locales-Footnote-31039267 +Node: Contributors1039488 +Node: Installation1044869 +Node: Gawk Distribution1045763 +Node: Getting1046247 +Node: Extracting1047073 +Node: Distribution contents1048765 +Node: Unix Installation1054486 +Node: Quick Installation1055103 +Node: Additional Configuration Options1057549 +Node: Configuration Philosophy1059285 +Node: Non-Unix Installation1061639 +Node: PC Installation1062097 +Node: PC Binary Installation1063396 +Node: PC Compiling1065244 +Node: PC Testing1068188 +Node: PC Using1069364 +Node: Cygwin1073532 +Node: MSYS1074341 +Node: VMS Installation1074855 +Node: VMS Compilation1075651 +Ref: VMS Compilation-Footnote-11076903 +Node: VMS Dynamic Extensions1076961 +Node: VMS Installation Details1078334 +Node: VMS Running1080585 +Node: VMS GNV1083419 +Node: VMS Old Gawk1084142 +Node: Bugs1084612 +Node: Other Versions1088530 +Node: Notes1094614 +Node: Compatibility Mode1095414 +Node: Additions1096197 +Node: Accessing The Source1097124 +Node: Adding Code1098564 +Node: New Ports1104609 +Node: Derived Files1108744 +Ref: Derived Files-Footnote-11114065 +Ref: Derived Files-Footnote-21114099 +Ref: Derived Files-Footnote-31114699 +Node: Future Extensions1114797 +Node: Implementation Limitations1115380 +Node: Extension Design1116628 +Node: Old Extension Problems1117782 +Ref: Old Extension Problems-Footnote-11119290 +Node: Extension New Mechanism Goals1119347 +Ref: Extension New Mechanism Goals-Footnote-11122712 +Node: Extension Other Design Decisions1122898 +Node: Extension Future Growth1125004 +Node: Old Extension Mechanism1125840 +Node: Basic Concepts1127580 +Node: Basic High Level1128261 +Ref: figure-general-flow1128533 +Ref: figure-process-flow1129132 +Ref: Basic High Level-Footnote-11132361 +Node: Basic Data Typing1132546 +Node: Glossary1135901 +Node: Copying1161132 +Node: GNU Free Documentation License1198688 +Node: Index1223824  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index f721b5f4..569c2f33 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -13657,9 +13657,9 @@ automatically by @command{awk}, so that they carry information from the internal workings of @command{awk} to your program. @cindex @command{gawk}, built-in variables and -This @value{SECTION} documents all the built-in variables of -@command{gawk}, most of which are also documented in the chapters -describing their areas of activity. +This @value{SECTION} documents all of @command{gawk}'s built-in variables, +most of which are also documented in the @value{CHAPTER}s describing +their areas of activity. @menu * User-modified:: Built-in variables that you change to control @@ -13677,44 +13677,38 @@ describing their areas of activity. @cindex user-modifiable variables The following is an alphabetical list of variables that you can change to -control how @command{awk} does certain things. The variables that are -specific to @command{gawk} are marked with a pound sign@w{ (@samp{#}).} +control how @command{awk} does certain things. + +The variables that are specific to @command{gawk} are marked with a pound +sign (@samp{#}). These variables are @command{gawk} extensions. In other +@command{awk} implementations or if @command{gawk} is in compatibility +mode (@pxref{Options}), they are not special. (Any exceptions are noted +in the description of each variable.) @table @code @cindex @code{BINMODE} variable @cindex binary input/output @cindex input/output, binary -@item BINMODE # -On non-POSIX systems, this variable specifies use of binary mode for all I/O. -Numeric values of one, two, or three specify that input files, output files, or -all files, respectively, should use binary I/O. -A numeric value less than zero is treated as zero, and a numeric value greater than -three is treated as three. -Alternatively, -string values of @code{"r"} or @code{"w"} specify that input files and -output files, 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}. - @cindex differences in @command{awk} and @command{gawk}, @code{BINMODE} variable -This variable is a @command{gawk} extension. -In other @command{awk} implementations -(except @command{mawk}, -@pxref{Other Versions}), -or if @command{gawk} is in compatibility mode -(@pxref{Options}), -it is not special. +@item BINMODE # +On non-POSIX systems, this variable specifies use of binary mode +for all I/O. Numeric values of one, two, or three specify that input +files, output files, or all files, respectively, should use binary I/O. +A numeric value less than zero is treated as zero, and a numeric value +greater than three is treated as three. Alternatively, string values +of @code{"r"} or @code{"w"} specify that input files and output files, +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}), +also supports this variable, but only using numeric values. @cindex @code{CONVFMT} variable @cindex POSIX @command{awk}, @code{CONVFMT} variable and @cindex numbers, converting, to strings @cindex strings, converting, numbers to -@item CONVFMT +@item @code{CONVFMT} This string controls conversion of numbers to strings (@pxref{Conversion}). It works by being passed, in effect, as the first argument to the @@ -13729,40 +13723,29 @@ Its default value is @code{"%.6g"}. @cindex field separators, @code{FIELDWIDTHS} variable and @cindex separators, field, @code{FIELDWIDTHS} variable and @item FIELDWIDTHS # -This is a space-separated list of columns that tells @command{gawk} +A space-separated list of columns that tells @command{gawk} how to split input with fixed columnar boundaries. Assigning a value to @code{FIELDWIDTHS} overrides the use of @code{FS} and @code{FPAT} for field splitting. @xref{Constant Size}, for more information. -If @command{gawk} is in compatibility mode -(@pxref{Options}), then @code{FIELDWIDTHS} -has no special meaning, and field-splitting operations occur based -exclusively on the value of @code{FS}. - @cindex @command{gawk}, @code{FPAT} variable in @cindex @code{FPAT} variable @cindex differences in @command{awk} and @command{gawk}, @code{FPAT} variable @cindex field separators, @code{FPAT} variable and @cindex separators, field, @code{FPAT} variable and @item FPAT # -This is a regular expression (as a string) that tells @command{gawk} +A regular expression (as a string) that tells @command{gawk} to create the fields based on text that matches the regular expression. Assigning a value to @code{FPAT} overrides the use of @code{FS} and @code{FIELDWIDTHS} for field splitting. @xref{Splitting By Content}, for more information. -If @command{gawk} is in compatibility mode -(@pxref{Options}), then @code{FPAT} -has no special meaning, and field-splitting operations occur based -exclusively on the value of @code{FS}. - @cindex @code{FS} variable @cindex separators, field @cindex field separators @item FS -This is the input field separator -(@pxref{Field Separators}). +The input field separator (@pxref{Field Separators}). The value is a single-character string or a multicharacter regular expression that matches the separations between fields in an input record. If the value is the null string (@code{""}), then each @@ -13812,18 +13795,13 @@ and it does not affect field splitting when using a single-character field separator. @xref{Case-sensitivity}. -If @command{gawk} is in compatibility mode -(@pxref{Options}), -then @code{IGNORECASE} has no special meaning. Thus, string -and regexp operations are always case-sensitive. - @cindex @command{gawk}, @code{LINT} variable in @cindex @code{LINT} variable @cindex differences in @command{awk} and @command{gawk}, @code{LINT} variable @cindex lint checking @item LINT # When this variable is true (nonzero or non-null), @command{gawk} -behaves as if the @option{--lint} command-line option is in effect. +behaves as if the @option{--lint} command-line option is in effect (@pxref{Options}). With a value of @code{"fatal"}, lint warnings become fatal errors. With a value of @code{"invalid"}, only warnings about things that are @@ -13844,7 +13822,7 @@ of @command{awk} being executed. @cindex numbers, converting, to strings @cindex strings, converting, numbers to @item OFMT -This string controls conversion of numbers to +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 @@ -13865,7 +13843,7 @@ default value is @w{@code{" "}}, a string consisting of a single space. @cindex @code{ORS} variable @item ORS -This is the output record separator. It is output at the end of every +The output record separator. It is output at the end of every @code{print} statement. Its default value is @code{"\n"}, the newline character. (@xref{Output Separators}.) @@ -13878,14 +13856,13 @@ The working precision of arbitrary precision floating-point numbers, @item ROUNDMODE # The rounding mode to use for arbitrary precision arithmetic on numbers, by default @code{"N"} (@samp{roundTiesToEven} in -the IEEE-754 standard) -(@pxref{Setting Rounding Mode}). +the IEEE-754 standard; @pxref{Setting Rounding Mode}). @cindex @code{RS} variable @cindex separators, for records @cindex record separators -@item RS -This is @command{awk}'s input record separator. Its default value is a string +@item @code{RS} +The input record separator. Its default value is a string containing a single newline character, which means that an input record consists of a single line of text. It can also be the null string, in which case records are separated by @@ -13904,8 +13881,8 @@ just the first character of @code{RS}'s value is used. @cindex @code{SUBSEP} variable @cindex separators, subscript @cindex subscript separators -@item SUBSEP -This is the subscript separator. It has the default value of +@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"]}} really accesses @code{foo["A\034B"]} @@ -13916,18 +13893,12 @@ really accesses @code{foo["A\034B"]} @cindex differences in @command{awk} and @command{gawk}, @code{TEXTDOMAIN} variable @cindex internationalization, localization @item TEXTDOMAIN # -This variable is used for internationalization of programs at the +Used for internationalization of programs at the @command{awk} level. It sets the default text domain for specially marked string constants in the source text, as well as for the @code{dcgettext()}, @code{dcngettext()} and @code{bindtextdomain()} functions (@pxref{Internationalization}). The default value of @code{TEXTDOMAIN} is @code{"messages"}. - -This variable is a @command{gawk} extension. -In other @command{awk} implementations, -or if @command{gawk} is in compatibility mode -(@pxref{Options}), -it is not special. @end table @c ENDOFRANGE bvar @c ENDOFRANGE varb @@ -13943,8 +13914,12 @@ it is not special. @cindex variables, built-in, conveying information The following is an alphabetical list of variables that @command{awk} sets automatically on certain occasions in order to provide -information to your program. The variables that are specific to -@command{gawk} are marked with a pound sign@w{ (@samp{#}).} +information to your program. + +The variables that are specific to @command{gawk} are marked with a pound +sign (@samp{#}). These variables are @command{gawk} extensions. In other +@command{awk} implementations or if @command{gawk} is in compatibility +mode (@pxref{Options}), they are not special. @c @asis for docbook @table @asis @@ -13991,7 +13966,7 @@ about how @command{awk} uses these variables. @cindex @code{ARGIND} variable @cindex differences in @command{awk} and @command{gawk}, @code{ARGIND} variable -@item @code{ARGIND} # +@item @code{ARGIND #} The index in @code{ARGV} of the current file being processed. Every time @command{gawk} opens a new data file for processing, it sets @code{ARGIND} to the index in @code{ARGV} of the file name. @@ -14008,78 +13983,58 @@ While you can change the value of @code{ARGIND} within your @command{awk} program, @command{gawk} automatically sets it to a new value when the next file is opened. -This variable is a @command{gawk} extension. -In other @command{awk} implementations, -or if @command{gawk} is in compatibility mode -(@pxref{Options}), -it is not special. - @cindex @code{ENVIRON} array @cindex environment variables, in @code{ENVIRON} array @item @code{ENVIRON} An associative array containing the values of the environment. The array indices are the environment variable names; the elements are the values of the particular environment variables. For example, -@code{ENVIRON["HOME"]} might be @file{/home/arnold}. Changing this array +@code{ENVIRON["HOME"]} might be @code{"/home/arnold"}. Changing this array does not affect the environment passed on to any programs that @command{awk} may spawn via redirection or the @code{system()} function. -@c (In a future version of @command{gawk}, it may do so.) +(In a future version of @command{gawk}, it may do so.) Some operating systems may not have environment variables. On such systems, the @code{ENVIRON} array is empty (except for -@w{@code{ENVIRON["AWKPATH"]}}, -@pxref{AWKPATH Variable} and -@w{@code{ENVIRON["AWKLIBPATH"]}}, +@w{@code{ENVIRON["AWKPATH"]}} and +@w{@code{ENVIRON["AWKLIBPATH"]}}; +@pxref{AWKPATH Variable}, and @pxref{AWKLIBPATH Variable}). @cindex @command{gawk}, @code{ERRNO} variable in @cindex @code{ERRNO} variable @cindex differences in @command{awk} and @command{gawk}, @code{ERRNO} variable @cindex error handling, @code{ERRNO} variable and -@item @code{ERRNO} # -If a system error occurs during a redirection for @code{getline}, -during a read for @code{getline}, or during a @code{close()} operation, -then @code{ERRNO} contains a string describing the error. - -In addition, @command{gawk} clears @code{ERRNO} -before opening each command-line input file. This enables checking if -the file is readable inside a @code{BEGINFILE} pattern (@pxref{BEGINFILE/ENDFILE}). - -Otherwise, -@code{ERRNO} works similarly to the C variable @code{errno}. -Except for the case just mentioned, -@command{gawk} @emph{never} clears it (sets it -to zero or @code{""}). Thus, you should only expect its 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. - -This variable is a @command{gawk} extension. -In other @command{awk} implementations, -or if @command{gawk} is in compatibility mode -(@pxref{Options}), -it is not special. +@item @code{ERRNO #} +If a system error occurs during a redirection for @code{getline}, during +a read for @code{getline}, or during a @code{close()} operation, then +@code{ERRNO} contains a string describing the error. + +In addition, @command{gawk} clears @code{ERRNO} before opening each +command-line input file. This enables checking if the file is readable +inside a @code{BEGINFILE} pattern (@pxref{BEGINFILE/ENDFILE}). + +Otherwise, @code{ERRNO} works similarly to the C variable @code{errno}. +Except for the case just mentioned, @command{gawk} @emph{never} clears +it (sets it to zero or @code{""}). Thus, you should only expect its +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. @cindex @code{FILENAME} variable @cindex dark corner, @code{FILENAME} variable @item @code{FILENAME} -The name of the file that @command{awk} is currently reading. -When no data files are listed on the command line, @command{awk} reads -from the standard input and @code{FILENAME} is set to @code{"-"}. -@code{FILENAME} is changed each time a new file is read -(@pxref{Reading Files}). -Inside a @code{BEGIN} rule, the value of @code{FILENAME} is -@code{""}, since there are no input files being processed -yet.@footnote{Some early implementations of Unix @command{awk} initialized -@code{FILENAME} to @code{"-"}, even if there were data files to be -processed. This behavior was incorrect and should not be relied -upon in your programs.} -@value{DARKCORNER} -Note, though, that using @code{getline} -(@pxref{Getline}) -inside a @code{BEGIN} rule can give -@code{FILENAME} a value. +The name of the current input file. When no data files are listed +on the command line, @command{awk} reads from the standard input and +@code{FILENAME} is set to @code{"-"}. @code{FILENAME} changes each +time a new file is read (@pxref{Reading Files}). Inside a @code{BEGIN} +rule, the value of @code{FILENAME} is @code{""}, since there are no input +files being processed yet.@footnote{Some early implementations of Unix +@command{awk} initialized @code{FILENAME} to @code{"-"}, even if there +were data files to be processed. This behavior was incorrect and should +not be relied upon in your programs.} @value{DARKCORNER} Note, though, +that using @code{getline} (@pxref{Getline}) inside a @code{BEGIN} rule +can give @code{FILENAME} a value. @cindex @code{FNR} variable @item @code{FNR} @@ -14103,14 +14058,14 @@ current record. @xref{Changing Fields}. @cindex @code{FUNCTAB} array @cindex @command{gawk}, @code{FUNCTAB} array in @cindex differences in @command{awk} and @command{gawk}, @code{FUNCTAB} variable -@item @code{FUNCTAB} # +@item @code{FUNCTAB #} An array whose indices and corresponding values are the names of all the user-defined or extension functions in the program. @quotation NOTE Attempting to use the @code{delete} statement with the @code{FUNCTAB} -array will cause a fatal error. Any attempt to assign to an element of -the @code{FUNCTAB} array will also cause a fatal error. +array causes a fatal error. Any attempt to assign to an element of +@code{FUNCTAB} also causes a fatal error. @end quotation @cindex @code{NR} variable @@ -14123,7 +14078,7 @@ the beginning of the program's execution @cindex @command{gawk}, @code{PROCINFO} array in @cindex @code{PROCINFO} array @cindex differences in @command{awk} and @command{gawk}, @code{PROCINFO} array -@item @code{PROCINFO} # +@item @code{PROCINFO #} The elements of this array provide access to information about the running @command{awk} program. The following elements (listed alphabetically) @@ -14192,7 +14147,7 @@ The parent process ID of the current process. @item PROCINFO["sorted_in"] If this element exists in @code{PROCINFO}, its value controls the order in which array indices will be processed by -@samp{for (index in array) @dots{}} loops. +@samp{for (@var{index} in @var{array})} loops. Since this is an advanced feature, we defer the full description until later; see @ref{Scanning an Array}. @@ -14262,10 +14217,9 @@ The @code{PROCINFO} array has the following additional uses: @itemize @bullet @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}. +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}. @item It may be used to provide a timeout when reading from any @@ -14273,12 +14227,6 @@ open input file, pipe, or coprocess. @xref{Read Timeout}, for more information. @end itemize -This array is a @command{gawk} extension. -In other @command{awk} implementations, -or if @command{gawk} is in compatibility mode -(@pxref{Options}), -it is not special. - @cindex @code{RLENGTH} variable @item @code{RLENGTH} The length of the substring matched by the @@ -14299,20 +14247,14 @@ if no match was found. @cindex @command{gawk}, @code{RT} variable in @cindex @code{RT} variable @cindex differences in @command{awk} and @command{gawk}, @code{RT} variable -@item @code{RT} # -This is set each time a record is read. It contains the input text -that matched the text denoted by @code{RS}, the record separator. - -This variable is a @command{gawk} extension. -In other @command{awk} implementations, -or if @command{gawk} is in compatibility mode -(@pxref{Options}), -it is not special. +@item @code{RT #} +The input text that matched the text denoted by @code{RS}, +the record separator. It is set every time a record is read. @cindex @command{gawk}, @code{SYMTAB} array in @cindex @code{SYMTAB} array @cindex differences in @command{awk} and @command{gawk}, @code{SYMTAB} variable -@item @code{SYMTAB} # +@item @code{SYMTAB #} An array whose indices are the names of all currently defined global variables and arrays in the program. The array may be used for indirect access to read or write the value of a variable: @@ -14341,6 +14283,7 @@ This works as expected: in this case @code{SYMTAB} acts just like a regular array. The only difference is that you can't then delete @code{SYMTAB["xxx"]}. +@cindex Schorr, Andrew The @code{SYMTAB} array is more interesting than it looks. Andrew Schorr points out that it effectively gives @command{awk} data pointers. Consider his example: @@ -14355,8 +14298,8 @@ function multiply(variable, amount) @end example @quotation NOTE -In order to avoid severe time-travel paradoxes@footnote{Not to mention difficult -implementation issues.}, neither @code{FUNCTAB} nor @code{SYMTAB} +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. @end quotation @end table @@ -14584,7 +14527,7 @@ It also describes how @command{awk} simulates multidimensional arrays, as well as some of the less obvious points about array usage. The @value{CHAPTER} moves on to discuss @command{gawk}'s facility for sorting arrays, and ends with a brief description of @command{gawk}'s -ability to support true multidimensional arrays. +ability to support true arrays of arrays. @cindex variables, names of @cindex functions, names of @@ -14668,35 +14611,32 @@ 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: +@code{""}, and 30 +@ifnotdocbook +as shown in @ref{figure-array-elements}: +@end ifnotdocbook +@ifdocbook +as shown in @inlineraw{docbook, }: +@end ifdocbook -@c @strong{FIXME: NEXT ED:} Use real images here, and an @float -@iftex -@c from Karl Berry, much thanks for the help. -@tex -\bigskip % space above the table (about 1 linespace) -\offinterlineskip -\newdimen\width \width = 1.5cm -\newdimen\hwidth \hwidth = 4\width \advance\hwidth by 2pt % 5 * 0.4pt -\centerline{\vbox{ -\halign{\strut\hfil\ignorespaces#&&\vrule#&\hbox to\width{\hfil#\unskip\hfil}\cr -\noalign{\hrule width\hwidth} - &&{\tt 8} &&{\tt "foo"} &&{\tt ""} &&{\tt 30} &&\quad Value\cr -\noalign{\hrule width\hwidth} -\noalign{\smallskip} - &\omit&0&\omit &1 &\omit&2 &\omit&3 &\omit&\quad Index\cr -} -}} -@end tex -@end iftex -@ifnottex -@example -+---------+---------+--------+---------+ -| 8 | "foo" | "" | 30 | @r{Value} -+---------+---------+--------+---------+ - 0 1 2 3 @r{Index} -@end example -@end ifnottex +@ifnotdocbook +@float Figure,figure-array-elements +@caption{A Contiguous Array} +@ifinfo +@center @image{array-elements, , , Basic Program Stages, txt} +@end ifinfo +@ifnotinfo +@center @image{array-elements, , , Basic Program Stages} +@end ifnotinfo +@end float +@end ifnotdocbook + +@docbook +
+A Contiguous Array + +
+@end docbook @noindent Only the values are stored; the indices are implicit from the order of @@ -14713,12 +14653,53 @@ Arrays in @command{awk} are different---they are @dfn{associative}. This means 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 +@end ifnotdocbook + +@docbook + + + + + + +Index +Value + + + + + +3 +30 + + + +1 +"foo" + + + +0 +8 + + + +2 +"" + + + + + + +@end docbook @noindent The pairs are shown in jumbled order because their order is irrelevant. @@ -14727,6 +14708,7 @@ One advantage of associative arrays is that new pairs can be added 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 @@ -14734,6 +14716,51 @@ whose value is @w{@code{"number ten"}}. The result is: @r{Index} 0 @r{Value} 8 @r{Index} 2 @r{Value} "" @end example +@end ifnotdocbook + +@docbook + + + + + + +Index +Value + + + + + +10 +"number ten" + + + +3 +30 + + + +1 +"foo" + + + +0 +8 + + + +2 +"" + + + + + + +@end docbook @noindent @cindex sparse arrays @@ -14746,20 +14773,60 @@ 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 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 +@end ifnotdocbook + +@docbook + + + + + + +Index +Value + + + + +"dog" +"chien" + + + +"cat" +"chat" + + + +"one" +"un" + + + +1 +"un" + + + + + + +@end docbook @noindent 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; this is discussed +(In fact, array subscripts are always strings; this is discussed in more detail in -@ref{Numeric Array Subscripts}. +@ref{Numeric Array Subscripts}.) Here, the number @code{1} isn't double-quoted, since @command{awk} automatically converts it to a string. @@ -14835,14 +14902,14 @@ To determine whether an element exists in an array at a certain index, use the following expression: @example -@var{ind} in @var{array} +@var{indx} in @var{array} @end example @cindex side effects, array indexing @noindent -This expression tests whether the particular index @var{ind} exists, +This expression tests whether the particular index @var{indx} exists, without the side effect of creating that element if it is not present. -The expression has the value one (true) if @code{@var{array}[@var{ind}]} +The expression has the value one (true) if @code{@var{array}[@var{indx}]} exists and zero (false) if it does not exist. For example, this statement tests whether the array @code{frequencies} contains the index @samp{2}: @@ -15016,14 +15083,56 @@ for a more detailed example of this type. @cindex @code{in} operator, order of array access The order in which elements of the array are accessed by this statement is determined by the internal arrangement of the array elements within -@command{awk} and normally cannot be controlled or changed. This can lead to -problems if new elements are added to @var{array} by statements in -the loop body; it is not predictable whether the @code{for} loop will -reach them. Similarly, changing @var{var} inside the loop may produce -strange results. It is best to avoid such things. +@command{awk} and in standard @command{awk} cannot be controlled +or changed. This can lead to problems if new elements are added to +@var{array} by statements in the loop body; it is not predictable whether +the @code{for} loop will reach them. Similarly, changing @var{var} inside +the loop may produce strange results. It is best to avoid such things. + +As a point of information, @command{gawk} sets up the list of elements +to be iterated over before the loop starts, and does not change it. +But not all @command{awk} versions do so. Consider this program, named +@file{loopcheck.awk}: + +@example +BEGIN @{ + a["here"] = "here" + a["is"] = "is" + a["a"] = "a" + a["loop"] = "loop" + for (i in a) @{ + j++ + a[j] = j + print i + @} +@} +@end example + +Here is what happens when run with @command{gawk}: + +@example +$ @kbd{gawk -f loopcheck.awk} +@print{} here +@print{} loop +@print{} a +@print{} is +@end example + +Contrast this to Brian Kernighan's @command{awk}: + +@example +$ @kbd{nawk -f loopcheck.awk} +@print{} loop +@print{} here +@print{} is +@print{} a +@print{} 1 +@end example @node Controlling Scanning -@subsection Using Predefined Array Scanning Orders +@subsection Using Predefined Array Scanning Orders With @command{gawk} + +This @value{SUBSECTION} describes a feature that is specific to @command{gawk}. By default, when a @code{for} loop traverses an array, the order is undefined, meaning that the @command{awk} implementation @@ -15377,7 +15486,7 @@ $ @kbd{echo 'line 1} @print{} line 2 @end example -Unfortunately, the very first line of input data did not come out in the +Unfortunately, the very first line of input data did not appear in the output! Upon first glance, we would think that this program should have worked. @@ -15575,7 +15684,7 @@ separate indices is recovered. array access and provides true arrays of arrays. Elements of a subarray are referred to by their own indices enclosed in square brackets, just like the elements of the main array. -For example, the following creates a two-element subarray at index @samp{1} +For example, the following creates a two-element subarray at index @code{1} of the main array @code{a}: @example @@ -15599,7 +15708,7 @@ 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. One can assign a scalar value to -the index @samp{4} of the main array @code{a}: +the index @code{4} of the main array @code{a}: @example a[4] = "An element in a jagged array" @@ -15620,7 +15729,7 @@ a[4][5][6][7] = "An element in a four-dimensional array" @end example @noindent -This removes the scalar value from index @samp{4} and then inserts a +This removes the scalar value from index @code{4} and then inserts a subarray of subarray of subarray containing a scalar. You can also delete an entire subarray or subarray of subarrays: @@ -37943,7 +38052,7 @@ of the following, very basic set of steps, as shown in @ref{figure-process-flow}: @end ifnotdocbook @ifdocbook -as shown in @inlineraw{docbook }: +as shown in @inlineraw{docbook, }: @end ifdocbook @ifnotdocbook @@ -40289,4 +40398,5 @@ which sorta sucks. TODO: ----- -2. Add back in docbook fixes for @r{}. +3. Check all docbook figures, if they should include with a +specific extension or not. diff --git a/doc/gawktexi.in b/doc/gawktexi.in index d73697df..06206642 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -13037,9 +13037,9 @@ automatically by @command{awk}, so that they carry information from the internal workings of @command{awk} to your program. @cindex @command{gawk}, built-in variables and -This @value{SECTION} documents all the built-in variables of -@command{gawk}, most of which are also documented in the chapters -describing their areas of activity. +This @value{SECTION} documents all of @command{gawk}'s built-in variables, +most of which are also documented in the @value{CHAPTER}s describing +their areas of activity. @menu * User-modified:: Built-in variables that you change to control @@ -13057,44 +13057,38 @@ describing their areas of activity. @cindex user-modifiable variables The following is an alphabetical list of variables that you can change to -control how @command{awk} does certain things. The variables that are -specific to @command{gawk} are marked with a pound sign@w{ (@samp{#}).} +control how @command{awk} does certain things. + +The variables that are specific to @command{gawk} are marked with a pound +sign (@samp{#}). These variables are @command{gawk} extensions. In other +@command{awk} implementations or if @command{gawk} is in compatibility +mode (@pxref{Options}), they are not special. (Any exceptions are noted +in the description of each variable.) @table @code @cindex @code{BINMODE} variable @cindex binary input/output @cindex input/output, binary -@item BINMODE # -On non-POSIX systems, this variable specifies use of binary mode for all I/O. -Numeric values of one, two, or three specify that input files, output files, or -all files, respectively, should use binary I/O. -A numeric value less than zero is treated as zero, and a numeric value greater than -three is treated as three. -Alternatively, -string values of @code{"r"} or @code{"w"} specify that input files and -output files, 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}. - @cindex differences in @command{awk} and @command{gawk}, @code{BINMODE} variable -This variable is a @command{gawk} extension. -In other @command{awk} implementations -(except @command{mawk}, -@pxref{Other Versions}), -or if @command{gawk} is in compatibility mode -(@pxref{Options}), -it is not special. +@item BINMODE # +On non-POSIX systems, this variable specifies use of binary mode +for all I/O. Numeric values of one, two, or three specify that input +files, output files, or all files, respectively, should use binary I/O. +A numeric value less than zero is treated as zero, and a numeric value +greater than three is treated as three. Alternatively, string values +of @code{"r"} or @code{"w"} specify that input files and output files, +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}), +also supports this variable, but only using numeric values. @cindex @code{CONVFMT} variable @cindex POSIX @command{awk}, @code{CONVFMT} variable and @cindex numbers, converting, to strings @cindex strings, converting, numbers to -@item CONVFMT +@item @code{CONVFMT} This string controls conversion of numbers to strings (@pxref{Conversion}). It works by being passed, in effect, as the first argument to the @@ -13109,40 +13103,29 @@ Its default value is @code{"%.6g"}. @cindex field separators, @code{FIELDWIDTHS} variable and @cindex separators, field, @code{FIELDWIDTHS} variable and @item FIELDWIDTHS # -This is a space-separated list of columns that tells @command{gawk} +A space-separated list of columns that tells @command{gawk} how to split input with fixed columnar boundaries. Assigning a value to @code{FIELDWIDTHS} overrides the use of @code{FS} and @code{FPAT} for field splitting. @xref{Constant Size}, for more information. -If @command{gawk} is in compatibility mode -(@pxref{Options}), then @code{FIELDWIDTHS} -has no special meaning, and field-splitting operations occur based -exclusively on the value of @code{FS}. - @cindex @command{gawk}, @code{FPAT} variable in @cindex @code{FPAT} variable @cindex differences in @command{awk} and @command{gawk}, @code{FPAT} variable @cindex field separators, @code{FPAT} variable and @cindex separators, field, @code{FPAT} variable and @item FPAT # -This is a regular expression (as a string) that tells @command{gawk} +A regular expression (as a string) that tells @command{gawk} to create the fields based on text that matches the regular expression. Assigning a value to @code{FPAT} overrides the use of @code{FS} and @code{FIELDWIDTHS} for field splitting. @xref{Splitting By Content}, for more information. -If @command{gawk} is in compatibility mode -(@pxref{Options}), then @code{FPAT} -has no special meaning, and field-splitting operations occur based -exclusively on the value of @code{FS}. - @cindex @code{FS} variable @cindex separators, field @cindex field separators @item FS -This is the input field separator -(@pxref{Field Separators}). +The input field separator (@pxref{Field Separators}). The value is a single-character string or a multicharacter regular expression that matches the separations between fields in an input record. If the value is the null string (@code{""}), then each @@ -13192,18 +13175,13 @@ and it does not affect field splitting when using a single-character field separator. @xref{Case-sensitivity}. -If @command{gawk} is in compatibility mode -(@pxref{Options}), -then @code{IGNORECASE} has no special meaning. Thus, string -and regexp operations are always case-sensitive. - @cindex @command{gawk}, @code{LINT} variable in @cindex @code{LINT} variable @cindex differences in @command{awk} and @command{gawk}, @code{LINT} variable @cindex lint checking @item LINT # When this variable is true (nonzero or non-null), @command{gawk} -behaves as if the @option{--lint} command-line option is in effect. +behaves as if the @option{--lint} command-line option is in effect (@pxref{Options}). With a value of @code{"fatal"}, lint warnings become fatal errors. With a value of @code{"invalid"}, only warnings about things that are @@ -13224,7 +13202,7 @@ of @command{awk} being executed. @cindex numbers, converting, to strings @cindex strings, converting, numbers to @item OFMT -This string controls conversion of numbers to +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 @@ -13245,7 +13223,7 @@ default value is @w{@code{" "}}, a string consisting of a single space. @cindex @code{ORS} variable @item ORS -This is the output record separator. It is output at the end of every +The output record separator. It is output at the end of every @code{print} statement. Its default value is @code{"\n"}, the newline character. (@xref{Output Separators}.) @@ -13258,14 +13236,13 @@ The working precision of arbitrary precision floating-point numbers, @item ROUNDMODE # The rounding mode to use for arbitrary precision arithmetic on numbers, by default @code{"N"} (@samp{roundTiesToEven} in -the IEEE-754 standard) -(@pxref{Setting Rounding Mode}). +the IEEE-754 standard; @pxref{Setting Rounding Mode}). @cindex @code{RS} variable @cindex separators, for records @cindex record separators -@item RS -This is @command{awk}'s input record separator. Its default value is a string +@item @code{RS} +The input record separator. Its default value is a string containing a single newline character, which means that an input record consists of a single line of text. It can also be the null string, in which case records are separated by @@ -13284,8 +13261,8 @@ just the first character of @code{RS}'s value is used. @cindex @code{SUBSEP} variable @cindex separators, subscript @cindex subscript separators -@item SUBSEP -This is the subscript separator. It has the default value of +@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"]}} really accesses @code{foo["A\034B"]} @@ -13296,18 +13273,12 @@ really accesses @code{foo["A\034B"]} @cindex differences in @command{awk} and @command{gawk}, @code{TEXTDOMAIN} variable @cindex internationalization, localization @item TEXTDOMAIN # -This variable is used for internationalization of programs at the +Used for internationalization of programs at the @command{awk} level. It sets the default text domain for specially marked string constants in the source text, as well as for the @code{dcgettext()}, @code{dcngettext()} and @code{bindtextdomain()} functions (@pxref{Internationalization}). The default value of @code{TEXTDOMAIN} is @code{"messages"}. - -This variable is a @command{gawk} extension. -In other @command{awk} implementations, -or if @command{gawk} is in compatibility mode -(@pxref{Options}), -it is not special. @end table @c ENDOFRANGE bvar @c ENDOFRANGE varb @@ -13323,8 +13294,12 @@ it is not special. @cindex variables, built-in, conveying information The following is an alphabetical list of variables that @command{awk} sets automatically on certain occasions in order to provide -information to your program. The variables that are specific to -@command{gawk} are marked with a pound sign@w{ (@samp{#}).} +information to your program. + +The variables that are specific to @command{gawk} are marked with a pound +sign (@samp{#}). These variables are @command{gawk} extensions. In other +@command{awk} implementations or if @command{gawk} is in compatibility +mode (@pxref{Options}), they are not special. @c @asis for docbook @table @asis @@ -13371,7 +13346,7 @@ about how @command{awk} uses these variables. @cindex @code{ARGIND} variable @cindex differences in @command{awk} and @command{gawk}, @code{ARGIND} variable -@item @code{ARGIND} # +@item @code{ARGIND #} The index in @code{ARGV} of the current file being processed. Every time @command{gawk} opens a new data file for processing, it sets @code{ARGIND} to the index in @code{ARGV} of the file name. @@ -13388,78 +13363,58 @@ While you can change the value of @code{ARGIND} within your @command{awk} program, @command{gawk} automatically sets it to a new value when the next file is opened. -This variable is a @command{gawk} extension. -In other @command{awk} implementations, -or if @command{gawk} is in compatibility mode -(@pxref{Options}), -it is not special. - @cindex @code{ENVIRON} array @cindex environment variables, in @code{ENVIRON} array @item @code{ENVIRON} An associative array containing the values of the environment. The array indices are the environment variable names; the elements are the values of the particular environment variables. For example, -@code{ENVIRON["HOME"]} might be @file{/home/arnold}. Changing this array +@code{ENVIRON["HOME"]} might be @code{"/home/arnold"}. Changing this array does not affect the environment passed on to any programs that @command{awk} may spawn via redirection or the @code{system()} function. -@c (In a future version of @command{gawk}, it may do so.) +(In a future version of @command{gawk}, it may do so.) Some operating systems may not have environment variables. On such systems, the @code{ENVIRON} array is empty (except for -@w{@code{ENVIRON["AWKPATH"]}}, -@pxref{AWKPATH Variable} and -@w{@code{ENVIRON["AWKLIBPATH"]}}, +@w{@code{ENVIRON["AWKPATH"]}} and +@w{@code{ENVIRON["AWKLIBPATH"]}}; +@pxref{AWKPATH Variable}, and @pxref{AWKLIBPATH Variable}). @cindex @command{gawk}, @code{ERRNO} variable in @cindex @code{ERRNO} variable @cindex differences in @command{awk} and @command{gawk}, @code{ERRNO} variable @cindex error handling, @code{ERRNO} variable and -@item @code{ERRNO} # -If a system error occurs during a redirection for @code{getline}, -during a read for @code{getline}, or during a @code{close()} operation, -then @code{ERRNO} contains a string describing the error. - -In addition, @command{gawk} clears @code{ERRNO} -before opening each command-line input file. This enables checking if -the file is readable inside a @code{BEGINFILE} pattern (@pxref{BEGINFILE/ENDFILE}). - -Otherwise, -@code{ERRNO} works similarly to the C variable @code{errno}. -Except for the case just mentioned, -@command{gawk} @emph{never} clears it (sets it -to zero or @code{""}). Thus, you should only expect its 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. - -This variable is a @command{gawk} extension. -In other @command{awk} implementations, -or if @command{gawk} is in compatibility mode -(@pxref{Options}), -it is not special. +@item @code{ERRNO #} +If a system error occurs during a redirection for @code{getline}, during +a read for @code{getline}, or during a @code{close()} operation, then +@code{ERRNO} contains a string describing the error. + +In addition, @command{gawk} clears @code{ERRNO} before opening each +command-line input file. This enables checking if the file is readable +inside a @code{BEGINFILE} pattern (@pxref{BEGINFILE/ENDFILE}). + +Otherwise, @code{ERRNO} works similarly to the C variable @code{errno}. +Except for the case just mentioned, @command{gawk} @emph{never} clears +it (sets it to zero or @code{""}). Thus, you should only expect its +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. @cindex @code{FILENAME} variable @cindex dark corner, @code{FILENAME} variable @item @code{FILENAME} -The name of the file that @command{awk} is currently reading. -When no data files are listed on the command line, @command{awk} reads -from the standard input and @code{FILENAME} is set to @code{"-"}. -@code{FILENAME} is changed each time a new file is read -(@pxref{Reading Files}). -Inside a @code{BEGIN} rule, the value of @code{FILENAME} is -@code{""}, since there are no input files being processed -yet.@footnote{Some early implementations of Unix @command{awk} initialized -@code{FILENAME} to @code{"-"}, even if there were data files to be -processed. This behavior was incorrect and should not be relied -upon in your programs.} -@value{DARKCORNER} -Note, though, that using @code{getline} -(@pxref{Getline}) -inside a @code{BEGIN} rule can give -@code{FILENAME} a value. +The name of the current input file. When no data files are listed +on the command line, @command{awk} reads from the standard input and +@code{FILENAME} is set to @code{"-"}. @code{FILENAME} changes each +time a new file is read (@pxref{Reading Files}). Inside a @code{BEGIN} +rule, the value of @code{FILENAME} is @code{""}, since there are no input +files being processed yet.@footnote{Some early implementations of Unix +@command{awk} initialized @code{FILENAME} to @code{"-"}, even if there +were data files to be processed. This behavior was incorrect and should +not be relied upon in your programs.} @value{DARKCORNER} Note, though, +that using @code{getline} (@pxref{Getline}) inside a @code{BEGIN} rule +can give @code{FILENAME} a value. @cindex @code{FNR} variable @item @code{FNR} @@ -13483,14 +13438,14 @@ current record. @xref{Changing Fields}. @cindex @code{FUNCTAB} array @cindex @command{gawk}, @code{FUNCTAB} array in @cindex differences in @command{awk} and @command{gawk}, @code{FUNCTAB} variable -@item @code{FUNCTAB} # +@item @code{FUNCTAB #} An array whose indices and corresponding values are the names of all the user-defined or extension functions in the program. @quotation NOTE Attempting to use the @code{delete} statement with the @code{FUNCTAB} -array will cause a fatal error. Any attempt to assign to an element of -the @code{FUNCTAB} array will also cause a fatal error. +array causes a fatal error. Any attempt to assign to an element of +@code{FUNCTAB} also causes a fatal error. @end quotation @cindex @code{NR} variable @@ -13503,7 +13458,7 @@ the beginning of the program's execution @cindex @command{gawk}, @code{PROCINFO} array in @cindex @code{PROCINFO} array @cindex differences in @command{awk} and @command{gawk}, @code{PROCINFO} array -@item @code{PROCINFO} # +@item @code{PROCINFO #} The elements of this array provide access to information about the running @command{awk} program. The following elements (listed alphabetically) @@ -13572,7 +13527,7 @@ The parent process ID of the current process. @item PROCINFO["sorted_in"] If this element exists in @code{PROCINFO}, its value controls the order in which array indices will be processed by -@samp{for (index in array) @dots{}} loops. +@samp{for (@var{index} in @var{array})} loops. Since this is an advanced feature, we defer the full description until later; see @ref{Scanning an Array}. @@ -13642,10 +13597,9 @@ The @code{PROCINFO} array has the following additional uses: @itemize @bullet @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}. +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}. @item It may be used to provide a timeout when reading from any @@ -13653,12 +13607,6 @@ open input file, pipe, or coprocess. @xref{Read Timeout}, for more information. @end itemize -This array is a @command{gawk} extension. -In other @command{awk} implementations, -or if @command{gawk} is in compatibility mode -(@pxref{Options}), -it is not special. - @cindex @code{RLENGTH} variable @item @code{RLENGTH} The length of the substring matched by the @@ -13679,20 +13627,14 @@ if no match was found. @cindex @command{gawk}, @code{RT} variable in @cindex @code{RT} variable @cindex differences in @command{awk} and @command{gawk}, @code{RT} variable -@item @code{RT} # -This is set each time a record is read. It contains the input text -that matched the text denoted by @code{RS}, the record separator. - -This variable is a @command{gawk} extension. -In other @command{awk} implementations, -or if @command{gawk} is in compatibility mode -(@pxref{Options}), -it is not special. +@item @code{RT #} +The input text that matched the text denoted by @code{RS}, +the record separator. It is set every time a record is read. @cindex @command{gawk}, @code{SYMTAB} array in @cindex @code{SYMTAB} array @cindex differences in @command{awk} and @command{gawk}, @code{SYMTAB} variable -@item @code{SYMTAB} # +@item @code{SYMTAB #} An array whose indices are the names of all currently defined global variables and arrays in the program. The array may be used for indirect access to read or write the value of a variable: @@ -13721,6 +13663,7 @@ This works as expected: in this case @code{SYMTAB} acts just like a regular array. The only difference is that you can't then delete @code{SYMTAB["xxx"]}. +@cindex Schorr, Andrew The @code{SYMTAB} array is more interesting than it looks. Andrew Schorr points out that it effectively gives @command{awk} data pointers. Consider his example: @@ -13735,8 +13678,8 @@ function multiply(variable, amount) @end example @quotation NOTE -In order to avoid severe time-travel paradoxes@footnote{Not to mention difficult -implementation issues.}, neither @code{FUNCTAB} nor @code{SYMTAB} +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. @end quotation @end table @@ -13918,7 +13861,7 @@ It also describes how @command{awk} simulates multidimensional arrays, as well as some of the less obvious points about array usage. The @value{CHAPTER} moves on to discuss @command{gawk}'s facility for sorting arrays, and ends with a brief description of @command{gawk}'s -ability to support true multidimensional arrays. +ability to support true arrays of arrays. @cindex variables, names of @cindex functions, names of @@ -14002,35 +13945,32 @@ 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: +@code{""}, and 30 +@ifnotdocbook +as shown in @ref{figure-array-elements}: +@end ifnotdocbook +@ifdocbook +as shown in @inlineraw{docbook, }: +@end ifdocbook -@c @strong{FIXME: NEXT ED:} Use real images here, and an @float -@iftex -@c from Karl Berry, much thanks for the help. -@tex -\bigskip % space above the table (about 1 linespace) -\offinterlineskip -\newdimen\width \width = 1.5cm -\newdimen\hwidth \hwidth = 4\width \advance\hwidth by 2pt % 5 * 0.4pt -\centerline{\vbox{ -\halign{\strut\hfil\ignorespaces#&&\vrule#&\hbox to\width{\hfil#\unskip\hfil}\cr -\noalign{\hrule width\hwidth} - &&{\tt 8} &&{\tt "foo"} &&{\tt ""} &&{\tt 30} &&\quad Value\cr -\noalign{\hrule width\hwidth} -\noalign{\smallskip} - &\omit&0&\omit &1 &\omit&2 &\omit&3 &\omit&\quad Index\cr -} -}} -@end tex -@end iftex -@ifnottex -@example -+---------+---------+--------+---------+ -| 8 | "foo" | "" | 30 | @r{Value} -+---------+---------+--------+---------+ - 0 1 2 3 @r{Index} -@end example -@end ifnottex +@ifnotdocbook +@float Figure,figure-array-elements +@caption{A Contiguous Array} +@ifinfo +@center @image{array-elements, , , Basic Program Stages, txt} +@end ifinfo +@ifnotinfo +@center @image{array-elements, , , Basic Program Stages} +@end ifnotinfo +@end float +@end ifnotdocbook + +@docbook +
+A Contiguous Array + +
+@end docbook @noindent Only the values are stored; the indices are implicit from the order of @@ -14047,12 +13987,53 @@ Arrays in @command{awk} are different---they are @dfn{associative}. This means 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 +@end ifnotdocbook + +@docbook + + + + + + +Index +Value + + + + + +3 +30 + + + +1 +"foo" + + + +0 +8 + + + +2 +"" + + + + + + +@end docbook @noindent The pairs are shown in jumbled order because their order is irrelevant. @@ -14061,6 +14042,7 @@ One advantage of associative arrays is that new pairs can be added 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 @@ -14068,6 +14050,51 @@ whose value is @w{@code{"number ten"}}. The result is: @r{Index} 0 @r{Value} 8 @r{Index} 2 @r{Value} "" @end example +@end ifnotdocbook + +@docbook + + + + + + +Index +Value + + + + + +10 +"number ten" + + + +3 +30 + + + +1 +"foo" + + + +0 +8 + + + +2 +"" + + + + + + +@end docbook @noindent @cindex sparse arrays @@ -14080,20 +14107,60 @@ 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 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 +@end ifnotdocbook + +@docbook + + + + + + +Index +Value + + + + +"dog" +"chien" + + + +"cat" +"chat" + + + +"one" +"un" + + + +1 +"un" + + + + + + +@end docbook @noindent 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; this is discussed +(In fact, array subscripts are always strings; this is discussed in more detail in -@ref{Numeric Array Subscripts}. +@ref{Numeric Array Subscripts}.) Here, the number @code{1} isn't double-quoted, since @command{awk} automatically converts it to a string. @@ -14169,14 +14236,14 @@ To determine whether an element exists in an array at a certain index, use the following expression: @example -@var{ind} in @var{array} +@var{indx} in @var{array} @end example @cindex side effects, array indexing @noindent -This expression tests whether the particular index @var{ind} exists, +This expression tests whether the particular index @var{indx} exists, without the side effect of creating that element if it is not present. -The expression has the value one (true) if @code{@var{array}[@var{ind}]} +The expression has the value one (true) if @code{@var{array}[@var{indx}]} exists and zero (false) if it does not exist. For example, this statement tests whether the array @code{frequencies} contains the index @samp{2}: @@ -14350,14 +14417,56 @@ for a more detailed example of this type. @cindex @code{in} operator, order of array access The order in which elements of the array are accessed by this statement is determined by the internal arrangement of the array elements within -@command{awk} and normally cannot be controlled or changed. This can lead to -problems if new elements are added to @var{array} by statements in -the loop body; it is not predictable whether the @code{for} loop will -reach them. Similarly, changing @var{var} inside the loop may produce -strange results. It is best to avoid such things. +@command{awk} and in standard @command{awk} cannot be controlled +or changed. This can lead to problems if new elements are added to +@var{array} by statements in the loop body; it is not predictable whether +the @code{for} loop will reach them. Similarly, changing @var{var} inside +the loop may produce strange results. It is best to avoid such things. + +As a point of information, @command{gawk} sets up the list of elements +to be iterated over before the loop starts, and does not change it. +But not all @command{awk} versions do so. Consider this program, named +@file{loopcheck.awk}: + +@example +BEGIN @{ + a["here"] = "here" + a["is"] = "is" + a["a"] = "a" + a["loop"] = "loop" + for (i in a) @{ + j++ + a[j] = j + print i + @} +@} +@end example + +Here is what happens when run with @command{gawk}: + +@example +$ @kbd{gawk -f loopcheck.awk} +@print{} here +@print{} loop +@print{} a +@print{} is +@end example + +Contrast this to Brian Kernighan's @command{awk}: + +@example +$ @kbd{nawk -f loopcheck.awk} +@print{} loop +@print{} here +@print{} is +@print{} a +@print{} 1 +@end example @node Controlling Scanning -@subsection Using Predefined Array Scanning Orders +@subsection Using Predefined Array Scanning Orders With @command{gawk} + +This @value{SUBSECTION} describes a feature that is specific to @command{gawk}. By default, when a @code{for} loop traverses an array, the order is undefined, meaning that the @command{awk} implementation @@ -14711,7 +14820,7 @@ $ @kbd{echo 'line 1} @print{} line 2 @end example -Unfortunately, the very first line of input data did not come out in the +Unfortunately, the very first line of input data did not appear in the output! Upon first glance, we would think that this program should have worked. @@ -14909,7 +15018,7 @@ separate indices is recovered. array access and provides true arrays of arrays. Elements of a subarray are referred to by their own indices enclosed in square brackets, just like the elements of the main array. -For example, the following creates a two-element subarray at index @samp{1} +For example, the following creates a two-element subarray at index @code{1} of the main array @code{a}: @example @@ -14933,7 +15042,7 @@ 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. One can assign a scalar value to -the index @samp{4} of the main array @code{a}: +the index @code{4} of the main array @code{a}: @example a[4] = "An element in a jagged array" @@ -14954,7 +15063,7 @@ a[4][5][6][7] = "An element in a four-dimensional array" @end example @noindent -This removes the scalar value from index @samp{4} and then inserts a +This removes the scalar value from index @code{4} and then inserts a subarray of subarray of subarray containing a scalar. You can also delete an entire subarray or subarray of subarrays: @@ -37087,7 +37196,7 @@ of the following, very basic set of steps, as shown in @ref{figure-process-flow}: @end ifnotdocbook @ifdocbook -as shown in @inlineraw{docbook }: +as shown in @inlineraw{docbook, }: @end ifdocbook @ifnotdocbook @@ -39433,4 +39542,5 @@ which sorta sucks. TODO: ----- -2. Add back in docbook fixes for @r{}. +3. Check all docbook figures, if they should include with a +specific extension or not. -- cgit v1.2.3 From 823aca91eec1b7525b74b9cd66ae286c37f2da75 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 5 May 2014 10:24:16 +0300 Subject: Fix debugger 'run' command to fully restart. --- ChangeLog | 6 ++++++ debug.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 6185b1d8..f3772314 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2014-05-04 Arnold D. Robbins + + * debug.c (debug_prog): Change check for GAWK_RESTART so that it + actually works. Bug fix: run command in debugger would start + over again but not actually start running the program. + 2014-04-25 Andrew J. Schorr * io.c (two_way_open): In forked child, reset SIGPIPE to SIG_DFL. diff --git a/debug.c b/debug.c index b55f3577..84e69d47 100644 --- a/debug.c +++ b/debug.c @@ -2801,7 +2801,7 @@ debug_prog(INSTRUCTION *pc) unserialize(OPTION); unsetenv("DGAWK_RESTART"); fprintf(out_fp, "Restarting ...\n"); - if (run[0] == 'T') + if (strcasecmp(run, "true") == 0) (void) do_run(NULL, 0); } else if (command_file != NULL) { -- cgit v1.2.3 From c1d7f8b0dfa6264148c3369e46fbe68dd6add2dc Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 5 May 2014 10:24:49 +0300 Subject: Fix alignment of subscripts in array element figure. --- doc/ChangeLog | 5 +++++ doc/array-elements.eps | 20 ++++++++++---------- doc/array-elements.fig | 12 ++++++------ doc/array-elements.pdf | Bin 6822 -> 6796 bytes doc/array-elements.png | Bin 6143 -> 6091 bytes 5 files changed, 21 insertions(+), 16 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 10600c26..238aefe8 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2014-05-05 Michal Jaegermann + + * array-elements.fig: Fix subscripts to be aligned + horizontally. Regenerate the other files. + 2014-05-02 Arnold D. Robbins * gawktexi.in: Editing progress. Through Chapter 8. diff --git a/doc/array-elements.eps b/doc/array-elements.eps index a0649959..041c0b39 100644 --- a/doc/array-elements.eps +++ b/doc/array-elements.eps @@ -1,8 +1,8 @@ %!PS-Adobe-3.0 EPSF-3.0 -%%Title: array-figure1.fig +%%Title: array-elements.fig %%Creator: fig2dev Version 3.2 Patchlevel 5d -%%CreationDate: Thu May 1 22:19:24 2014 -%%BoundingBox: 0 0 384 76 +%%CreationDate: Sun May 4 22:46:26 2014 +%%BoundingBox: 0 0 379 76 %Magnification: 1.0000 %%EndComments %%BeginProlog @@ -81,7 +81,7 @@ end /pageheader { save -newpath 0 76 moveto 0 0 lineto 384 0 lineto 384 76 lineto closepath clip newpath +newpath 0 76 moveto 0 0 lineto 379 0 lineto 379 76 lineto closepath clip newpath -203.3 199.4 translate 1 -1 scale $F2psBegin @@ -116,16 +116,16 @@ n 7425 1980 m 3735 2340 m gs 1 -1 sc (8) col0 sh gr /Courier-Bold ff 180.00 scf sf -5175 2295 m +5175 2340 m gs 1 -1 sc ("foo") col0 sh gr /Courier-Bold ff 180.00 scf sf -6930 2295 m +6795 2340 m gs 1 -1 sc ("") col0 sh gr /Courier-Bold ff 180.00 scf sf -7875 2250 m +7875 2340 m gs 1 -1 sc (30) col0 sh gr /Times-Roman ff 180.00 scf sf -3735 3105 m +3735 3150 m gs 1 -1 sc (0) col0 sh gr /Times-Roman ff 180.00 scf sf 5175 3150 m @@ -134,13 +134,13 @@ gs 1 -1 sc (1) col0 sh gr 6795 3150 m gs 1 -1 sc (2) col0 sh gr /Times-Roman ff 180.00 scf sf -7875 3105 m +7875 3150 m gs 1 -1 sc (3) col0 sh gr /Times-Roman ff 180.00 scf sf 8730 2340 m gs 1 -1 sc (Value) col0 sh gr /Times-Roman ff 180.00 scf sf -8820 3060 m +8730 3150 m gs 1 -1 sc (Index) col0 sh gr % here ends figure; % diff --git a/doc/array-elements.fig b/doc/array-elements.fig index c5d65ba4..63b5ffbf 100644 --- a/doc/array-elements.fig +++ b/doc/array-elements.fig @@ -16,12 +16,12 @@ Single 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 7425 1980 7425 2700 4 0 0 50 -1 14 12 0.0000 4 120 120 3735 2340 8\001 -4 0 0 50 -1 14 12 0.0000 4 120 600 5175 2295 "foo"\001 -4 0 0 50 -1 14 12 0.0000 4 60 240 6930 2295 ""\001 -4 0 0 50 -1 14 12 0.0000 4 120 240 7875 2250 30\001 -4 0 0 50 -1 0 12 0.0000 4 135 105 3735 3105 0\001 +4 0 0 50 -1 14 12 0.0000 4 120 600 5175 2340 "foo"\001 +4 0 0 50 -1 14 12 0.0000 4 60 240 6795 2340 ""\001 +4 0 0 50 -1 14 12 0.0000 4 120 240 7875 2340 30\001 +4 0 0 50 -1 0 12 0.0000 4 135 105 3735 3150 0\001 4 0 0 50 -1 0 12 0.0000 4 135 105 5175 3150 1\001 4 0 0 50 -1 0 12 0.0000 4 135 105 6795 3150 2\001 -4 0 0 50 -1 0 12 0.0000 4 135 105 7875 3105 3\001 +4 0 0 50 -1 0 12 0.0000 4 135 105 7875 3150 3\001 4 0 0 50 -1 0 12 0.0000 4 135 480 8730 2340 Value\001 -4 0 0 50 -1 0 12 0.0000 4 135 465 8820 3060 Index\001 +4 0 0 50 -1 0 12 0.0000 4 135 465 8730 3150 Index\001 diff --git a/doc/array-elements.pdf b/doc/array-elements.pdf index af0ef3b9..328cbd1a 100644 Binary files a/doc/array-elements.pdf and b/doc/array-elements.pdf differ diff --git a/doc/array-elements.png b/doc/array-elements.png index c51424d1..b57d66b7 100644 Binary files a/doc/array-elements.png and b/doc/array-elements.png differ -- cgit v1.2.3 From 628837bf58f885225532b6c2de41b60ffa7c14e9 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 5 May 2014 17:46:19 +0300 Subject: Doc edits, through Chapter 9. --- awklib/eg/lib/ctime.awk | 2 +- doc/ChangeLog | 4 + doc/gawk.info | 985 ++++++++++++++++++++++++------------------------ doc/gawk.texi | 180 +++++---- doc/gawktexi.in | 180 +++++---- 5 files changed, 697 insertions(+), 654 deletions(-) diff --git a/awklib/eg/lib/ctime.awk b/awklib/eg/lib/ctime.awk index f37856c6..ca750370 100644 --- a/awklib/eg/lib/ctime.awk +++ b/awklib/eg/lib/ctime.awk @@ -4,7 +4,7 @@ function ctime(ts, format) { - format = "%a %b %e %H:%M:%S %Z %Y" + format = PROCINFO["strftime"] if (ts == 0) ts = systime() # use current time as default return strftime(format, ts) diff --git a/doc/ChangeLog b/doc/ChangeLog index 238aefe8..194cf695 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-05-05 Arnold D. Robbins + + * gawktexi.in: Editing progress. Through Chapter 9. + 2014-05-05 Michal Jaegermann * array-elements.fig: Fix subscripts to be aligned diff --git a/doc/gawk.info b/doc/gawk.info index dfe1589e..706dace1 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -8406,7 +8406,9 @@ File: gawk.info, Node: Locales, Prev: Precedence, Up: Expressions ==================================== Modern systems support the notion of "locales": a way to tell the -system about the local character set and language. +system about the local character set and language. The ISO C standard +defines a default `"C"' locale, which is an environment that is typical +of what many C programmers are used to. Once upon a time, the locale setting used to affect regexp matching (*note Ranges and Locales::), but this is no longer true. @@ -8418,6 +8420,13 @@ much better performance when reading records. Otherwise, `gawk' has to make several function calls, _per input character_, to find the record terminator. + Locales can affect how dates and times are formatted (*note Time +Functions::). For example, a common way to abbreviate the date +September 4, 2015 in the United States is "9/4/15." In many countries +in Europe, however, it is abbreviated "4.9.15." Thus, the `%x' +specification in a `"US"' locale might produce `9/4/15', while in a +`"EUROPE"' locale, it might produce `4.9.15'. + According to POSIX, string comparison is also affected by locales (similar to regular expressions). The details are presented in *note POSIX String Comparison::. @@ -11330,12 +11339,22 @@ returns the number of characters in a string, and not the number of bytes used to represent those characters. Similarly, `index()' works with character indices, and not byte indices. + CAUTION: A number of functions deal with indices into strings. + For these functions, the first character of a string is at + position (index) one. This is different from C and the languages + descended from it, where the first character is at position zero. + You need to remember this when doing index calculations, + particularly if you are used to C. + In the following list, optional parameters are enclosed in square brackets ([ ]). Several functions perform string substitution; the full discussion is provided in the description of the `sub()' function, which comes towards the end since the list is presented in alphabetic -order. Those functions that are specific to `gawk' are marked with a -pound sign (`#'): +order. + + Those functions that are specific to `gawk' are marked with a pound +sign (`#'). They are not available in compatibility mode (*note +Options::): * Menu: @@ -11343,8 +11362,8 @@ pound sign (`#'): `&' with `sub()', `gsub()', and `gensub()'. -`asort('SOURCE [`,' DEST [`,' HOW ] ]`)' # -`asorti('SOURCE [`,' DEST [`,' HOW ] ]`)' # +`asort('SOURCE [`,' DEST [`,' HOW ] ]`) #' +`asorti('SOURCE [`,' DEST [`,' HOW ] ]`) #' These two functions are similar in behavior, so they are described together. @@ -11391,10 +11410,7 @@ pound sign (`#'): a[2] = "last" a[3] = "middle" - `asort()' and `asorti()' are `gawk' extensions; they are not - available in compatibility mode (*note Options::). - -`gensub(REGEXP, REPLACEMENT, HOW' [`, TARGET']`)' # +`gensub(REGEXP, REPLACEMENT, HOW' [`, TARGET']`) #' Search the target string TARGET for matches of the regular expression REGEXP. If HOW is a string beginning with `g' or `G' (short for "global"), then replace all matches of REGEXP with @@ -11444,9 +11460,6 @@ pound sign (`#'): If REGEXP does not match TARGET, `gensub()''s return value is the original unchanged value of TARGET. - `gensub()' is a `gawk' extension; it is not available in - compatibility mode (*note Options::). - `gsub(REGEXP, REPLACEMENT' [`, TARGET']`)' Search TARGET for _all_ of the longest, leftmost, _nonoverlapping_ matching substrings it can find and replace them with REPLACEMENT. @@ -11471,8 +11484,7 @@ pound sign (`#'): $ awk 'BEGIN { print index("peanut", "an") }' -| 3 - If FIND is not found, `index()' returns zero. (Remember that - string indices in `awk' start at one.) + If FIND is not found, `index()' returns zero. It is a fatal error to use a regexp constant for FIND. @@ -11518,12 +11530,12 @@ pound sign (`#'): `match(STRING, REGEXP' [`, ARRAY']`)' Search STRING for the longest, leftmost substring matched by the - regular expression, REGEXP and return the character position, or - "index", at which that substring begins (one, if it starts at 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. - The REGEXP argument may be either a regexp constant (`/.../') or a - string constant (`"..."'). In the latter case, the string is + The REGEXP argument may be either a regexp constant (`/'...`/') or + a string constant (`"'...`"'). In the latter case, the string is treated as a regexp to be matched. *Note Computed Regexps::, for a discussion of the difference between the two forms, and the implications for writing your program correctly. @@ -11603,7 +11615,7 @@ pound sign (`#'): compatibility mode (*note Options::), using a third argument is a fatal error. -`patsplit(STRING, ARRAY' [`, FIELDPAT' [`, SEPS' ] ]`)' # +`patsplit(STRING, ARRAY' [`, FIELDPAT' [`, SEPS' ] ]`) #' Divide STRING into pieces defined by FIELDPAT and store the pieces in ARRAY and the separator strings in the SEPS array. The first piece is stored in `ARRAY[1]', the second piece in `ARRAY[2]', and @@ -11622,9 +11634,6 @@ pound sign (`#'): Before splitting the string, `patsplit()' deletes any previously existing elements in the arrays ARRAY and SEPS. - The `patsplit()' function is a `gawk' extension. In compatibility - mode (*note Options::), it is not available. - `split(STRING, ARRAY' [`, FIELDSEP' [`, SEPS' ] ]`)' Divide STRING into pieces separated by FIELDSEP and store the pieces in ARRAY and the separator strings in the SEPS array. The @@ -11690,6 +11699,9 @@ pound sign (`#'): has one element only. The value of that element is the original STRING. + In POSIX mode (*note Options::), the fourth argument is not + allowed. + `sprintf(FORMAT, EXPRESSION1, ...)' Return (without printing) the string that `printf' would have printed out with the same arguments (*note Printf::). For example: @@ -11698,7 +11710,7 @@ pound sign (`#'): assigns the string `pi = 3.14 (approx.)' to the variable `pival'. -`strtonum(STR)' # +`strtonum(STR) #' Examine STR and return its numeric value. If STR begins with a leading `0', `strtonum()' assumes that STR is an octal number. If STR begins with a leading `0x' or `0X', `strtonum()' assumes that @@ -11715,9 +11727,6 @@ pound sign (`#'): Note also that `strtonum()' uses the current locale's decimal point for recognizing numbers (*note Locales::). - `strtonum()' is a `gawk' extension; it is not available in - compatibility mode (*note Options::). - `sub(REGEXP, REPLACEMENT' [`, TARGET']`)' Search TARGET, which is treated as a string, for the leftmost, longest substring matched by the regular expression REGEXP. @@ -11725,8 +11734,8 @@ pound sign (`#'): REPLACEMENT. The modified string becomes the new value of TARGET. Return the number of substitutions made (zero or one). - The REGEXP argument may be either a regexp constant (`/.../') or a - string constant (`"..."'). In the latter case, the string is + The REGEXP argument may be either a regexp constant (`/'...`/') or + a string constant (`"'...`"'). In the latter case, the string is treated as a regexp to be matched. *Note Computed Regexps::, for a discussion of the difference between the two forms, and the implications for writing your program correctly. @@ -11869,9 +11878,9 @@ backslashes and ampersands into the replacement text, you need to remember that there are several levels of "escape processing" going on. First, there is the "lexical" level, which is when `awk' reads your -program and builds an internal copy of it that can be executed. Then -there is the runtime level, which is when `awk' actually scans the -replacement string to determine what to generate. +program and builds an internal copy of it to execute. Then there is +the runtime level, which is when `awk' actually scans the replacement +string to determine what to generate. At both levels, `awk' looks for a defined set of characters that can come after a backslash. At the lexical level, it looks for the escape @@ -12063,6 +12072,9 @@ parameters are enclosed in square brackets ([ ]): 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::). + `fflush('[FILENAME]`)' Flush any buffered output associated with FILENAME, which is either a file opened for writing or a shell command for @@ -12079,10 +12091,10 @@ parameters are enclosed in square brackets ([ ]): function--`gawk' also buffers its output and the `fflush()' function forces `gawk' to flush its buffers. - `fflush()' was added to Brian Kernighan's version of `awk' in - April of 1992. For two decades, it was not part of the POSIX - standard. As of December, 2012, it was accepted for inclusion - into the POSIX standard. See the Austin Group website + `fflush()' was added to Brian Kernighan's `awk' in April of 1992. + For two decades, it was not part of the POSIX standard. As of + December, 2012, it was accepted for inclusion into the POSIX + standard. See the Austin Group website (http://austingroupbugs.net/view.php?id=634). POSIX standardizes `fflush()' as follows: If there is no argument, @@ -12100,7 +12112,7 @@ parameters are enclosed in square brackets ([ ]): 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 + 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. @@ -12270,7 +12282,7 @@ enclosed in square brackets ([ ]): If DATESPEC does not contain enough elements or if the resulting time is out of range, `mktime()' returns -1. -``strftime(' [FORMAT [`,' TIMESTAMP [`,' UTC-FLAG ]]]`)'' +`strftime(' [FORMAT [`,' TIMESTAMP [`,' UTC-FLAG] ] ]`)' Format the time specified by TIMESTAMP based on the contents of the FORMAT string and return the result. It is similar to the function of the same name in ISO C. If UTC-FLAG is present and is @@ -12350,11 +12362,11 @@ the following date format specifications: `%g' The year modulo 100 of the ISO 8601 week number, as a decimal - number (00-99). For example, January 1, 1993 is in week 53 of - 1992. Thus, the year of its ISO 8601 week number is 1992, even - though its year is 1993. Similarly, December 31, 1973 is in week - 1 of 1974. Thus, the year of its ISO week number is 1974, even - though its year is 1973. + number (00-99). For example, January 1, 2012 is in week 53 of + 2011. Thus, the year of its ISO 8601 week number is 2011, even + though its year is 2012. Similarly, December 31, 2012 is in week + 1 of 2013. Thus, the year of its ISO week number is 2013, even + though its year is 2012. `%G' The full year of the ISO week number, as a decimal number. @@ -12434,7 +12446,7 @@ the following date format specifications: The year modulo 100 as a decimal number (00-99). `%Y' - The full year as a decimal number (e.g., 2011). + The full year as a decimal number (e.g., 2015). `%z' The timezone offset in a +HHMM format (e.g., the format necessary @@ -12456,15 +12468,6 @@ the following date format specifications: If a conversion specifier is not one of the above, the behavior is undefined.(6) - Informally, a "locale" is the geographic place in which a program is -meant to run. For example, a common way to abbreviate the date -September 4, 2012 in the United States is "9/4/12." In many countries -in Europe, however, it is abbreviated "4.9.12." Thus, the `%x' -specification in a `"US"' locale might produce `9/4/12', while in a -`"EUROPE"' locale, it might produce `4.9.12'. The ISO C standard -defines a default `"C"' locale, which is an environment that is typical -of what many C programmers are used to. - For systems that are not yet fully standards-compliant, `gawk' supplies a copy of `strftime()' from the GNU C Library. It supports all of the just-listed format specifications. If that version is used @@ -12494,7 +12497,7 @@ to the standard output and interprets the current time according to the format specifiers in the string. For example: $ date '+Today is %A, %B %d, %Y.' - -| Today is Wednesday, March 30, 2011. + -| Today is Monday, May 05, 2014. Here is the `gawk' version of the `date' utility. It has a shell "wrapper" to handle the `-u' option, which requires that `date' run as @@ -12511,7 +12514,7 @@ if the time zone is set to UTC: esac gawk 'BEGIN { - format = "%a %b %e %H:%M:%S %Z %Y" + format = PROCINFO["strftime"] exitval = 0 if (ARGC > 2) @@ -12689,8 +12692,8 @@ File: gawk.info, Node: Type Functions, Next: I18N Functions, Prev: Bitwise Fu `gawk' provides a single function that lets you distinguish an array from a scalar variable. This is necessary for writing code that -traverses every element of a true multidimensional array (*note Arrays -of Arrays::). +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. @@ -12720,7 +12723,7 @@ descriptions here are purposely brief. *Note Internationalization::, for the full story. Optional parameters are enclosed in square brackets ([ ]): -``bindtextdomain(DIRECTORY' [`,' DOMAIN ]`)'' +`bindtextdomain(DIRECTORY' [`,' DOMAIN]`)' Set the directory in which `gawk' will look for message translation files, in case they will not or cannot be placed in the "standard" locations (e.g., during testing). It returns the @@ -12730,13 +12733,13 @@ brackets ([ ]): the null string (`""'), then `bindtextdomain()' returns the current binding for the given DOMAIN. -``dcgettext(STRING' [`,' DOMAIN [`,' CATEGORY ]]`)'' +`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 value of `TEXTDOMAIN'. The default value for CATEGORY is `"LC_MESSAGES"'. -``dcngettext(STRING1, STRING2, NUMBER' [`,' DOMAIN [`,' CATEGORY ]]`)'' +`dcngettext(STRING1, STRING2, NUMBER' [`,' DOMAIN [`,' CATEGORY] ]`)' 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, @@ -12799,7 +12802,7 @@ 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 built-in variables -(*note Built-in Variables::. Not all versions of `awk' enforce this +(*note Built-in Variables::). Not all versions of `awk' enforce this restriction.) The BODY-OF-FUNCTION consists of `awk' statements. It is the most @@ -12949,7 +12952,7 @@ an `awk' version of `ctime()': function ctime(ts, format) { - format = "%a %b %e %H:%M:%S %Z %Y" + format = PROCINFO["strftime"] if (ts == 0) ts = systime() # use current time as default return strftime(format, ts) @@ -13003,9 +13006,10 @@ File: gawk.info, Node: Variable Scope, Next: Pass By Value/Reference, Prev: C 9.2.3.2 Controlling Variable Scope .................................. -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. +Unlike 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 @@ -13228,7 +13232,7 @@ like this: The EXPRESSION part is optional. Due most likely to an oversight, POSIX does not define what the return value is if you omit the -EXPRESSION. Technically speaking, this make the returned value +EXPRESSION. Technically speaking, this makes the returned value 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. @@ -13322,8 +13326,8 @@ Here is an annotated sample program: } In this example, the first call to `foo()' generates a fatal error, -so `gawk' will not report the second error. If you comment out that -call, though, then `gawk' will report the second error. +so `awk' will not report the second error. If you comment out that +call, though, then `awk' does report the second error. Usually, such things aren't a big issue, but it's worth being aware of them. @@ -30218,7 +30222,7 @@ Index * --re-interval option: Options. (line 279) * --sandbox option: Options. (line 286) * --sandbox option, disabling system() function: I/O Functions. - (line 94) + (line 97) * --sandbox option, input redirection with getline: Getline. (line 19) * --sandbox option, output redirection with print, printf: Redirection. (line 6) @@ -30453,7 +30457,7 @@ Index (line 6) * array scanning order, controlling: Controlling Scanning. (line 14) -* array, number of elements: String Functions. (line 194) +* array, number of elements: String Functions. (line 197) * arrays: Arrays. (line 6) * arrays of arrays: Arrays of Arrays. (line 6) * arrays, an example of using: Array Example. (line 6) @@ -30469,7 +30473,7 @@ Index * arrays, elements, deleting: Delete. (line 6) * arrays, elements, order of access by in operator: Scanning an Array. (line 48) -* arrays, elements, retrieving number of: String Functions. (line 32) +* arrays, elements, retrieving number of: String Functions. (line 42) * arrays, for statement and: Scanning an Array. (line 20) * arrays, indexing: Array Intro. (line 50) * arrays, merging into strings: Join Function. (line 6) @@ -30496,12 +30500,12 @@ Index * ASCII: Ordinal Functions. (line 45) * asort <1>: Array Sorting Functions. (line 6) -* asort: String Functions. (line 32) +* asort: String Functions. (line 42) * asort() function (gawk), arrays, sorting: Array Sorting Functions. (line 6) * asorti <1>: Array Sorting Functions. (line 6) -* asorti: String Functions. (line 32) +* asorti: String Functions. (line 42) * asorti() function (gawk), arrays, sorting: Array Sorting Functions. (line 6) * assert() function (C library): Assert Function. (line 6) @@ -30726,7 +30730,7 @@ Index * Brennan, Michael <3>: Simple Sed. (line 25) * Brennan, Michael <4>: Delete. (line 56) * Brennan, Michael: Foreword. (line 83) -* Brian Kernighan's awk <1>: I/O Functions. (line 40) +* Brian Kernighan's awk <1>: I/O Functions. (line 43) * Brian Kernighan's awk <2>: Gory Details. (line 15) * Brian Kernighan's awk <3>: String Functions. (line 490) * Brian Kernighan's awk <4>: Delete. (line 48) @@ -30755,9 +30759,9 @@ Index * Buening, Andreas <2>: Contributors. (line 92) * Buening, Andreas: Acknowledgments. (line 60) * buffering, input/output <1>: Two-way I/O. (line 70) -* buffering, input/output: I/O Functions. (line 137) -* buffering, interactive vs. noninteractive: I/O Functions. (line 106) -* buffers, flushing: I/O Functions. (line 29) +* buffering, input/output: I/O Functions. (line 140) +* buffering, interactive vs. noninteractive: I/O Functions. (line 109) +* buffers, flushing: I/O Functions. (line 32) * buffers, operators for: GNU Regexp Operators. (line 48) * bug reports, email address, bug-gawk@gnu.org: Bugs. (line 30) @@ -30866,7 +30870,7 @@ Index * common extensions, delete to delete entire arrays: Delete. (line 39) * common extensions, func keyword: Definition Syntax. (line 83) * common extensions, length() applied to an array: String Functions. - (line 194) + (line 197) * common extensions, RS as a regexp: gawk split records. (line 6) * common extensions, single character fields: Single Character Fields. (line 6) @@ -30920,7 +30924,7 @@ Index * controlling array scanning order: Controlling Scanning. (line 14) * convert string to lower case: String Functions. (line 521) -* convert string to number: String Functions. (line 385) +* convert string to number: String Functions. (line 388) * convert string to upper case: String Functions. (line 527) * converting integer array subscripts: Numeric Array Subscripts. (line 31) @@ -30986,7 +30990,7 @@ Index (line 20) * dark corner, input files: awk split records. (line 110) * dark corner, invoking awk: Command Line. (line 16) -* dark corner, length() function: String Functions. (line 180) +* dark corner, length() function: String Functions. (line 183) * dark corner, locale's decimal point character: Conversion. (line 75) * dark corner, multiline records: Multiple Line. (line 35) * dark corner, NF variable, decrementing: Changing Fields. (line 107) @@ -31005,7 +31009,7 @@ Index * database, group, reading: Group Functions. (line 6) * database, users, reading: Passwd Functions. (line 6) * date utility, GNU: Time Functions. (line 17) -* date utility, POSIX: Time Functions. (line 263) +* date utility, POSIX: Time Functions. (line 254) * dates, converting to timestamps: Time Functions. (line 76) * dates, information related to, localization: Explaining gettext. (line 115) @@ -31142,7 +31146,7 @@ Index * deleting entire arrays: Delete. (line 39) * Demaille, Akim: Acknowledgments. (line 60) * describe call stack frame, in debugger: Debugger Info. (line 27) -* differences between gawk and awk: String Functions. (line 194) +* differences between gawk and awk: String Functions. (line 197) * differences in awk and gawk, ARGC/ARGV variables: ARGC and ARGV. (line 88) * differences in awk and gawk, ARGIND variable: Auto-set. (line 44) @@ -31189,7 +31193,7 @@ Index (line 34) * differences in awk and gawk, LINT variable: User-modified. (line 88) * differences in awk and gawk, match() function: String Functions. - (line 257) + (line 260) * differences in awk and gawk, print/printf statements: Format Modifiers. (line 13) * differences in awk and gawk, PROCINFO array: Auto-set. (line 128) @@ -31385,10 +31389,10 @@ Index * extensions, common, \x escape sequence: Escape Sequences. (line 61) * 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 40) +* extensions, common, fflush() function: I/O Functions. (line 43) * extensions, common, func keyword: Definition Syntax. (line 83) * extensions, common, length() applied to an array: String Functions. - (line 194) + (line 197) * extensions, common, RS as a regexp: gawk split records. (line 6) * extensions, common, single character fields: Single Character Fields. (line 6) @@ -31407,7 +31411,7 @@ Index * features, undocumented: Undocumented. (line 6) * Fenlason, Jay <1>: Contributors. (line 18) * Fenlason, Jay: History. (line 30) -* fflush: I/O Functions. (line 25) +* fflush: I/O Functions. (line 28) * field numbers: Nonconstant Fields. (line 6) * field operator $: Fields. (line 19) * field operators, dollar sign as: Fields. (line 19) @@ -31500,7 +31504,7 @@ Index * files, source, search path for: Igawk Program. (line 368) * files, splitting: Split Program. (line 6) * files, Texinfo, extracting programs from: Extract Program. (line 6) -* find substring in string: String Functions. (line 151) +* find substring in string: String Functions. (line 155) * finding extensions: Finding Extensions. (line 6) * finish debugger command: Debugger Execution Control. (line 39) @@ -31513,7 +31517,7 @@ Index * floating-point, numbers, arbitrary precision: Arbitrary Precision Arithmetic. (line 6) * floating-point, VAX/VMS: VMS Running. (line 51) -* flush buffered output: I/O Functions. (line 25) +* flush buffered output: I/O Functions. (line 28) * fnmatch() extension function: Extension Sample Fnmatch. (line 12) * FNR variable <1>: Auto-set. (line 99) @@ -31532,7 +31536,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 378) +* formatting strings: String Functions. (line 381) * forward slash (/) to enclose regular expressions: Regexp. (line 10) * forward slash (/), / operator: Precedence. (line 55) * forward slash (/), /= operator <1>: Precedence. (line 95) @@ -31661,7 +31665,7 @@ Index * 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 48) +* gawk, IGNORECASE variable in <2>: String Functions. (line 58) * gawk, IGNORECASE variable in <3>: Array Intro. (line 92) * gawk, IGNORECASE variable in <4>: User-modified. (line 76) * gawk, IGNORECASE variable in: Case-sensitivity. (line 26) @@ -31715,7 +31719,7 @@ Index * General Public License (GPL): Glossary. (line 306) * General Public License, See GPL: Manual History. (line 11) * generate time values: Time Functions. (line 25) -* gensub <1>: String Functions. (line 82) +* gensub <1>: String Functions. (line 89) * gensub: Using Constant Regexps. (line 43) * gensub() function (gawk), escape processing: Gory Details. (line 6) @@ -31791,7 +31795,7 @@ Index * group file: Group Functions. (line 6) * group ID of gawk user: Auto-set. (line 172) * groups, information about: Group Functions. (line 6) -* gsub <1>: String Functions. (line 135) +* gsub <1>: String Functions. (line 139) * gsub: Using Constant Regexps. (line 43) * gsub() function, arguments of: String Functions. (line 460) @@ -31855,7 +31859,7 @@ Index (line 37) * in operator, use in loops: Scanning an Array. (line 17) * increment operators: Increment Ops. (line 6) -* index: String Functions. (line 151) +* index: String Functions. (line 155) * indexing arrays: Array Intro. (line 50) * indirect function calls: Indirect Calls. (line 6) * infinite precision: Arbitrary Precision Arithmetic. @@ -31873,7 +31877,7 @@ Index * input files, running awk without: Read Terminal. (line 6) * input files, variable assignments and: Other Arguments. (line 19) * input pipeline: Getline/Pipe. (line 9) -* input record, length of: String Functions. (line 171) +* input record, length of: String Functions. (line 174) * input redirection: Getline/File. (line 6) * input, data, nondecimal: Nondecimal Data. (line 6) * input, explicit: Getline. (line 6) @@ -31898,7 +31902,7 @@ Index * integers, arbitrary precision: Arbitrary Precision Integers. (line 6) * integers, unsigned: General Arithmetic. (line 15) -* interacting with other programs: I/O Functions. (line 72) +* interacting with other programs: I/O Functions. (line 75) * internationalization <1>: I18N and L10N. (line 6) * internationalization: I18N Functions. (line 6) * internationalization, localization <1>: Internationalization. @@ -31919,7 +31923,7 @@ Index * interpreted programs: Basic High Level. (line 15) * interval expressions, regexp operator: Regexp Operators. (line 117) * inventory-shipped file: Sample Data Files. (line 32) -* invoke shell command: I/O Functions. (line 72) +* invoke shell command: I/O Functions. (line 75) * isarray: Type Functions. (line 11) * ISO: Glossary. (line 368) * ISO 8859-1: Glossary. (line 133) @@ -31977,9 +31981,9 @@ Index * left shift: Bitwise Functions. (line 46) * left shift, bitwise: Bitwise Functions. (line 32) * leftmost longest match: Multiple Line. (line 26) -* length: String Functions. (line 164) -* length of input record: String Functions. (line 171) -* length of string: String Functions. (line 164) +* length: String Functions. (line 167) +* length of input record: String Functions. (line 174) +* length of string: String Functions. (line 167) * Lesser General Public License (LGPL): Glossary. (line 397) * LGPL (Lesser General Public License): Glossary. (line 397) * libmawk: Other Versions. (line 120) @@ -32071,10 +32075,10 @@ Index (line 6) * marked strings, extracting: String Extraction. (line 6) * Marx, Groucho: Increment Ops. (line 60) -* match: String Functions. (line 204) -* match regexp in string: String Functions. (line 204) +* match: String Functions. (line 207) +* match regexp in string: String Functions. (line 207) * match() function, RSTART/RLENGTH variables: String Functions. - (line 221) + (line 224) * matching, expressions, See comparison expressions: Typing and Comparison. (line 9) * matching, leftmost longest: Multiple Line. (line 26) @@ -32174,7 +32178,7 @@ Index * null strings, converting numbers to strings: Conversion. (line 21) * null strings, matching: Gory Details. (line 164) * number as string of bits: Bitwise Functions. (line 109) -* number of array elements: String Functions. (line 194) +* number of array elements: String Functions. (line 197) * number sign (#), #! (executable scripts): Executable Scripts. (line 6) * number sign (#), commenting: Comments. (line 6) @@ -32263,7 +32267,7 @@ Index (line 20) * output redirection: Redirection. (line 6) * output wrapper: Output Wrappers. (line 6) -* output, buffering: I/O Functions. (line 29) +* output, buffering: I/O Functions. (line 32) * output, duplicating into files: Tee Program. (line 6) * output, files, closing: Close Files And Pipes. (line 6) @@ -32280,7 +32284,7 @@ Index * parentheses (), in a profile: Profiling. (line 146) * parentheses (), regexp operator: Regexp Operators. (line 80) * password file: Passwd Functions. (line 16) -* patsplit: String Functions. (line 291) +* patsplit: String Functions. (line 294) * patterns: Patterns and Actions. (line 6) * patterns, comparison expressions as: Expression Patterns. (line 14) @@ -32336,7 +32340,7 @@ Index * portability, gawk: New Ports. (line 6) * portability, gettext library and: Explaining gettext. (line 10) * portability, internationalization and: I18N Portability. (line 6) -* portability, length() function: String Functions. (line 173) +* portability, length() function: String Functions. (line 176) * portability, new awk vs. old awk: Conversion. (line 55) * portability, next statement in user-defined functions: Pass By Value/Reference. (line 91) @@ -32374,14 +32378,14 @@ Index * POSIX awk, changes in awk versions: POSIX. (line 6) * POSIX awk, continue statement and: Continue Statement. (line 43) * POSIX awk, CONVFMT variable and: User-modified. (line 30) -* POSIX awk, date utility and: Time Functions. (line 263) +* POSIX awk, date utility and: Time Functions. (line 254) * POSIX awk, field separators and <1>: Field Splitting Summary. (line 40) * 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 83) * POSIX awk, functions and, gsub()/sub(): Gory Details. (line 54) -* POSIX awk, functions and, length(): String Functions. (line 173) +* POSIX awk, functions and, length(): String Functions. (line 176) * POSIX awk, GNU long options and: Options. (line 15) * POSIX awk, interval expressions in: Regexp Operators. (line 136) * POSIX awk, next/nextfile statements and: Next Statement. (line 45) @@ -32619,7 +32623,7 @@ Index * right shift, bitwise: Bitwise Functions. (line 32) * Ritchie, Dennis: Basic Data Typing. (line 55) * RLENGTH variable: Auto-set. (line 244) -* RLENGTH variable, match() function and: String Functions. (line 221) +* RLENGTH variable, match() function and: String Functions. (line 224) * Robbins, Arnold <1>: Future Extensions. (line 6) * Robbins, Arnold <2>: Bugs. (line 32) * Robbins, Arnold <3>: Contributors. (line 139) @@ -32648,7 +32652,7 @@ Index * RS variable, multiline records and: Multiple Line. (line 17) * rshift: Bitwise Functions. (line 52) * RSTART variable: Auto-set. (line 250) -* RSTART variable, match() function and: String Functions. (line 221) +* RSTART variable, match() function and: String Functions. (line 224) * RT variable <1>: Auto-set. (line 257) * RT variable <2>: Multiple Line. (line 129) * RT variable: awk split records. (line 124) @@ -32673,8 +32677,8 @@ Index * Schorr, Andrew: Acknowledgments. (line 60) * Schreiber, Bert: Acknowledgments. (line 38) * Schreiber, Rita: Acknowledgments. (line 38) -* search and replace in strings: String Functions. (line 82) -* search in string: String Functions. (line 151) +* search and replace in strings: String Functions. (line 89) +* search in string: String Functions. (line 155) * search paths <1>: VMS Running. (line 58) * search paths <2>: PC Using. (line 10) * search paths: Igawk Program. (line 368) @@ -32759,13 +32763,13 @@ Index (line 38) * sidebar, Changing NR and FNR: Auto-set. (line 299) * sidebar, Controlling Output Buffering with system(): I/O Functions. - (line 135) + (line 138) * sidebar, Escape Sequences for Metacharacters: Escape Sequences. (line 128) * sidebar, FS and IGNORECASE: Field Splitting Summary. (line 64) * sidebar, Interactive Versus Noninteractive Buffering: I/O Functions. - (line 104) + (line 107) * sidebar, Matching the Null String: Gory Details. (line 162) * sidebar, Operator Evaluation Order: Increment Ops. (line 58) * sidebar, Piping into sh: Redirection. (line 140) @@ -32809,8 +32813,8 @@ Index * sleep() extension function: Extension Sample Time. (line 23) * Solaris, POSIX-compliant awk: Other Versions. (line 96) -* sort array: String Functions. (line 32) -* sort array indices: String Functions. (line 32) +* sort array: String Functions. (line 42) +* sort array indices: String Functions. (line 42) * sort function, arrays, sorting: Array Sorting Functions. (line 6) * sort utility: Word Sorting. (line 50) @@ -32835,11 +32839,11 @@ Index * sparse arrays: Array Intro. (line 71) * Spencer, Henry: Glossary. (line 12) * split: String Functions. (line 313) -* split string into array: String Functions. (line 291) +* split string into array: String Functions. (line 294) * 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 378) +* sprintf <1>: String Functions. (line 381) * sprintf: OFMT. (line 15) * sprintf() function, OFMT variable and: User-modified. (line 114) * sprintf() function, print/printf statements and: Round Function. @@ -32877,9 +32881,9 @@ Index * string constants, vs. regexp constants: Computed Regexps. (line 39) * string extraction (internationalization): String Extraction. (line 6) -* string length: String Functions. (line 164) +* string length: String Functions. (line 167) * string operators: Concatenation. (line 8) -* string, regular expression match: String Functions. (line 204) +* string, regular expression match: String Functions. (line 207) * string-manipulation functions: String Functions. (line 6) * string-matching operators: Regexp Usage. (line 19) * string-translation functions: I18N Functions. (line 6) @@ -32896,7 +32900,7 @@ Index * strings, null: Regexp Field Splitting. (line 43) * strings, numeric: Variable Typing. (line 6) -* strtonum: String Functions. (line 385) +* strtonum: String Functions. (line 388) * strtonum() function (gawk), --non-decimal-data option and: Nondecimal Data. (line 36) * sub <1>: String Functions. (line 406) @@ -32915,7 +32919,7 @@ Index * SUBSEP variable: User-modified. (line 146) * SUBSEP variable, and multidimensional arrays: Multidimensional. (line 16) -* substitute in string: String Functions. (line 82) +* substitute in string: String Functions. (line 89) * substr: String Functions. (line 479) * substring: String Functions. (line 479) * Sumner, Andrew: Other Versions. (line 64) @@ -32924,7 +32928,7 @@ Index * SYMTAB array: Auto-set. (line 261) * syntactic ambiguity: /= operator vs. /=.../ regexp constant: Assignment Ops. (line 148) -* system: I/O Functions. (line 72) +* system: I/O Functions. (line 75) * systime: Time Functions. (line 66) * t debugger command (alias for tbreak): Breakpoint Control. (line 90) * tbreak debugger command: Breakpoint Control. (line 90) @@ -32994,7 +32998,7 @@ Index (line 23) * troubleshooting, fatal errors, printf format strings: Format Modifiers. (line 159) -* troubleshooting, fflush() function: I/O Functions. (line 60) +* 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) @@ -33002,8 +33006,7 @@ Index (line 16) * troubleshooting, getline function: File Checking. (line 25) * troubleshooting, gsub()/sub() functions: String Functions. (line 470) -* troubleshooting, match() function: String Functions. (line 286) -* troubleshooting, patsplit() function: String Functions. (line 309) +* troubleshooting, match() function: String Functions. (line 289) * troubleshooting, print statement, omitting commas: Print Examples. (line 31) * troubleshooting, printing: Redirection. (line 118) @@ -33013,7 +33016,7 @@ Index (line 39) * troubleshooting, string concatenation: Concatenation. (line 26) * troubleshooting, substr() function: String Functions. (line 497) -* troubleshooting, system() function: I/O Functions. (line 94) +* troubleshooting, system() function: I/O Functions. (line 97) * troubleshooting, typographical errors, global variables: Options. (line 98) * true, logical: Truth Values. (line 6) @@ -33354,370 +33357,370 @@ Node: Conditional Exp350997 Node: Function Calls352724 Node: Precedence356482 Node: Locales360151 -Node: Patterns and Actions361240 -Node: Pattern Overview362294 -Node: Regexp Patterns363971 -Node: Expression Patterns364514 -Node: Ranges368295 -Node: BEGIN/END371401 -Node: Using BEGIN/END372163 -Ref: Using BEGIN/END-Footnote-1374899 -Node: I/O And BEGIN/END375005 -Node: BEGINFILE/ENDFILE377290 -Node: Empty380226 -Node: Using Shell Variables380543 -Node: Action Overview382826 -Node: Statements385171 -Node: If Statement387025 -Node: While Statement388524 -Node: Do Statement390568 -Node: For Statement391724 -Node: Switch Statement394876 -Node: Break Statement396979 -Node: Continue Statement399034 -Node: Next Statement400827 -Node: Nextfile Statement403217 -Node: Exit Statement405872 -Node: Built-in Variables408274 -Node: User-modified409370 -Ref: User-modified-Footnote-1417055 -Node: Auto-set417117 -Ref: Auto-set-Footnote-1429682 -Ref: Auto-set-Footnote-2429887 -Node: ARGC and ARGV429943 -Node: Arrays433797 -Node: Array Basics435295 -Node: Array Intro436121 -Ref: figure-array-elements438094 -Node: Reference to Elements440501 -Node: Assigning Elements442774 -Node: Array Example443265 -Node: Scanning an Array444997 -Node: Controlling Scanning448012 -Ref: Controlling Scanning-Footnote-1453185 -Node: Delete453501 -Ref: Delete-Footnote-1456266 -Node: Numeric Array Subscripts456323 -Node: Uninitialized Subscripts458506 -Node: Multidimensional460131 -Node: Multiscanning463224 -Node: Arrays of Arrays464813 -Node: Functions469453 -Node: Built-in470272 -Node: Calling Built-in471350 -Node: Numeric Functions473338 -Ref: Numeric Functions-Footnote-1477172 -Ref: Numeric Functions-Footnote-2477529 -Ref: Numeric Functions-Footnote-3477577 -Node: String Functions477846 -Ref: String Functions-Footnote-1500849 -Ref: String Functions-Footnote-2500978 -Ref: String Functions-Footnote-3501226 -Node: Gory Details501313 -Ref: table-sub-escapes502992 -Ref: table-sub-posix-92504346 -Ref: table-sub-proposed505697 -Ref: table-posix-sub507051 -Ref: table-gensub-escapes508596 -Ref: Gory Details-Footnote-1509772 -Ref: Gory Details-Footnote-2509823 -Node: I/O Functions509974 -Ref: I/O Functions-Footnote-1516970 -Node: Time Functions517117 -Ref: Time Functions-Footnote-1528110 -Ref: Time Functions-Footnote-2528178 -Ref: Time Functions-Footnote-3528336 -Ref: Time Functions-Footnote-4528447 -Ref: Time Functions-Footnote-5528559 -Ref: Time Functions-Footnote-6528786 -Node: Bitwise Functions529052 -Ref: table-bitwise-ops529614 -Ref: Bitwise Functions-Footnote-1533859 -Node: Type Functions534043 -Node: I18N Functions535194 -Node: User-defined536846 -Node: Definition Syntax537650 -Ref: Definition Syntax-Footnote-1542564 -Node: Function Example542633 -Ref: Function Example-Footnote-1545282 -Node: Function Caveats545304 -Node: Calling A Function545822 -Node: Variable Scope546777 -Node: Pass By Value/Reference549740 -Node: Return Statement553248 -Node: Dynamic Typing556229 -Node: Indirect Calls557160 -Node: Library Functions566847 -Ref: Library Functions-Footnote-1570360 -Ref: Library Functions-Footnote-2570503 -Node: Library Names570674 -Ref: Library Names-Footnote-1574147 -Ref: Library Names-Footnote-2574367 -Node: General Functions574453 -Node: Strtonum Function575481 -Node: Assert Function578411 -Node: Round Function581737 -Node: Cliff Random Function583278 -Node: Ordinal Functions584294 -Ref: Ordinal Functions-Footnote-1587371 -Ref: Ordinal Functions-Footnote-2587623 -Node: Join Function587834 -Ref: Join Function-Footnote-1589605 -Node: Getlocaltime Function589805 -Node: Readfile Function593546 -Node: Data File Management595385 -Node: Filetrans Function596017 -Node: Rewind Function600086 -Node: File Checking601473 -Node: Empty Files602567 -Node: Ignoring Assigns604797 -Node: Getopt Function606351 -Ref: Getopt Function-Footnote-1617654 -Node: Passwd Functions617857 -Ref: Passwd Functions-Footnote-1626835 -Node: Group Functions626923 -Node: Walking Arrays635007 -Node: Sample Programs637143 -Node: Running Examples637817 -Node: Clones638545 -Node: Cut Program639769 -Node: Egrep Program649620 -Ref: Egrep Program-Footnote-1657393 -Node: Id Program657503 -Node: Split Program661152 -Ref: Split Program-Footnote-1664671 -Node: Tee Program664799 -Node: Uniq Program667602 -Node: Wc Program675031 -Ref: Wc Program-Footnote-1679297 -Ref: Wc Program-Footnote-2679497 -Node: Miscellaneous Programs679589 -Node: Dupword Program680777 -Node: Alarm Program682808 -Node: Translate Program687615 -Ref: Translate Program-Footnote-1692002 -Ref: Translate Program-Footnote-2692250 -Node: Labels Program692384 -Ref: Labels Program-Footnote-1695755 -Node: Word Sorting695839 -Node: History Sorting699723 -Node: Extract Program701562 -Ref: Extract Program-Footnote-1709065 -Node: Simple Sed709193 -Node: Igawk Program712255 -Ref: Igawk Program-Footnote-1727426 -Ref: Igawk Program-Footnote-2727627 -Node: Anagram Program727765 -Node: Signature Program730833 -Node: Advanced Features731933 -Node: Nondecimal Data733819 -Node: Array Sorting735402 -Node: Controlling Array Traversal736099 -Node: Array Sorting Functions744383 -Ref: Array Sorting Functions-Footnote-1748252 -Node: Two-way I/O748446 -Ref: Two-way I/O-Footnote-1753878 -Node: TCP/IP Networking753960 -Node: Profiling756804 -Node: Internationalization764307 -Node: I18N and L10N765732 -Node: Explaining gettext766418 -Ref: Explaining gettext-Footnote-1771486 -Ref: Explaining gettext-Footnote-2771670 -Node: Programmer i18n771835 -Node: Translator i18n776062 -Node: String Extraction776856 -Ref: String Extraction-Footnote-1777817 -Node: Printf Ordering777903 -Ref: Printf Ordering-Footnote-1780685 -Node: I18N Portability780749 -Ref: I18N Portability-Footnote-1783198 -Node: I18N Example783261 -Ref: I18N Example-Footnote-1785899 -Node: Gawk I18N785971 -Node: Debugger786592 -Node: Debugging787563 -Node: Debugging Concepts787996 -Node: Debugging Terms789852 -Node: Awk Debugging792449 -Node: Sample Debugging Session793341 -Node: Debugger Invocation793861 -Node: Finding The Bug795194 -Node: List of Debugger Commands801681 -Node: Breakpoint Control803015 -Node: Debugger Execution Control806679 -Node: Viewing And Changing Data810039 -Node: Execution Stack813395 -Node: Debugger Info814862 -Node: Miscellaneous Debugger Commands818856 -Node: Readline Support824034 -Node: Limitations824865 -Node: Arbitrary Precision Arithmetic827117 -Ref: Arbitrary Precision Arithmetic-Footnote-1828766 -Node: General Arithmetic828914 -Node: Floating Point Issues830634 -Node: String Conversion Precision831515 -Ref: String Conversion Precision-Footnote-1833220 -Node: Unexpected Results833329 -Node: POSIX Floating Point Problems835482 -Ref: POSIX Floating Point Problems-Footnote-1839307 -Node: Integer Programming839345 -Node: Floating-point Programming841084 -Ref: Floating-point Programming-Footnote-1847415 -Ref: Floating-point Programming-Footnote-2847685 -Node: Floating-point Representation847949 -Node: Floating-point Context849114 -Ref: table-ieee-formats849953 -Node: Rounding Mode851337 -Ref: table-rounding-modes851816 -Ref: Rounding Mode-Footnote-1854831 -Node: Gawk and MPFR855010 -Node: Arbitrary Precision Floats856419 -Ref: Arbitrary Precision Floats-Footnote-1858862 -Node: Setting Precision859178 -Ref: table-predefined-precision-strings859864 -Node: Setting Rounding Mode862009 -Ref: table-gawk-rounding-modes862413 -Node: Floating-point Constants863600 -Node: Changing Precision865029 -Ref: Changing Precision-Footnote-1866426 -Node: Exact Arithmetic866600 -Node: Arbitrary Precision Integers869738 -Ref: Arbitrary Precision Integers-Footnote-1872753 -Node: Dynamic Extensions872900 -Node: Extension Intro874358 -Node: Plugin License875623 -Node: Extension Mechanism Outline876308 -Ref: load-extension876725 -Ref: load-new-function878203 -Ref: call-new-function879198 -Node: Extension API Description881213 -Node: Extension API Functions Introduction882500 -Node: General Data Types887427 -Ref: General Data Types-Footnote-1893122 -Node: Requesting Values893421 -Ref: table-value-types-returned894158 -Node: Memory Allocation Functions895112 -Ref: Memory Allocation Functions-Footnote-1897858 -Node: Constructor Functions897954 -Node: Registration Functions899712 -Node: Extension Functions900397 -Node: Exit Callback Functions902699 -Node: Extension Version String903948 -Node: Input Parsers904598 -Node: Output Wrappers914355 -Node: Two-way processors918865 -Node: Printing Messages921073 -Ref: Printing Messages-Footnote-1922150 -Node: Updating `ERRNO'922302 -Node: Accessing Parameters923041 -Node: Symbol Table Access924271 -Node: Symbol table by name924785 -Node: Symbol table by cookie926761 -Ref: Symbol table by cookie-Footnote-1930893 -Node: Cached values930956 -Ref: Cached values-Footnote-1934446 -Node: Array Manipulation934537 -Ref: Array Manipulation-Footnote-1935635 -Node: Array Data Types935674 -Ref: Array Data Types-Footnote-1938377 -Node: Array Functions938469 -Node: Flattening Arrays942305 -Node: Creating Arrays949157 -Node: Extension API Variables953882 -Node: Extension Versioning954518 -Node: Extension API Informational Variables956419 -Node: Extension API Boilerplate957505 -Node: Finding Extensions961309 -Node: Extension Example961869 -Node: Internal File Description962599 -Node: Internal File Ops966690 -Ref: Internal File Ops-Footnote-1978199 -Node: Using Internal File Ops978339 -Ref: Using Internal File Ops-Footnote-1980686 -Node: Extension Samples980952 -Node: Extension Sample File Functions982476 -Node: Extension Sample Fnmatch990963 -Node: Extension Sample Fork992732 -Node: Extension Sample Inplace993945 -Node: Extension Sample Ord995723 -Node: Extension Sample Readdir996559 -Node: Extension Sample Revout998091 -Node: Extension Sample Rev2way998684 -Node: Extension Sample Read write array999374 -Node: Extension Sample Readfile1001257 -Node: Extension Sample API Tests1002357 -Node: Extension Sample Time1002882 -Node: gawkextlib1004246 -Node: Language History1007027 -Node: V7/SVR3.11008620 -Node: SVR41010940 -Node: POSIX1012382 -Node: BTL1013768 -Node: POSIX/GNU1014502 -Node: Feature History1020101 -Node: Common Extensions1033077 -Node: Ranges and Locales1034389 -Ref: Ranges and Locales-Footnote-11039006 -Ref: Ranges and Locales-Footnote-21039033 -Ref: Ranges and Locales-Footnote-31039267 -Node: Contributors1039488 -Node: Installation1044869 -Node: Gawk Distribution1045763 -Node: Getting1046247 -Node: Extracting1047073 -Node: Distribution contents1048765 -Node: Unix Installation1054486 -Node: Quick Installation1055103 -Node: Additional Configuration Options1057549 -Node: Configuration Philosophy1059285 -Node: Non-Unix Installation1061639 -Node: PC Installation1062097 -Node: PC Binary Installation1063396 -Node: PC Compiling1065244 -Node: PC Testing1068188 -Node: PC Using1069364 -Node: Cygwin1073532 -Node: MSYS1074341 -Node: VMS Installation1074855 -Node: VMS Compilation1075651 -Ref: VMS Compilation-Footnote-11076903 -Node: VMS Dynamic Extensions1076961 -Node: VMS Installation Details1078334 -Node: VMS Running1080585 -Node: VMS GNV1083419 -Node: VMS Old Gawk1084142 -Node: Bugs1084612 -Node: Other Versions1088530 -Node: Notes1094614 -Node: Compatibility Mode1095414 -Node: Additions1096197 -Node: Accessing The Source1097124 -Node: Adding Code1098564 -Node: New Ports1104609 -Node: Derived Files1108744 -Ref: Derived Files-Footnote-11114065 -Ref: Derived Files-Footnote-21114099 -Ref: Derived Files-Footnote-31114699 -Node: Future Extensions1114797 -Node: Implementation Limitations1115380 -Node: Extension Design1116628 -Node: Old Extension Problems1117782 -Ref: Old Extension Problems-Footnote-11119290 -Node: Extension New Mechanism Goals1119347 -Ref: Extension New Mechanism Goals-Footnote-11122712 -Node: Extension Other Design Decisions1122898 -Node: Extension Future Growth1125004 -Node: Old Extension Mechanism1125840 -Node: Basic Concepts1127580 -Node: Basic High Level1128261 -Ref: figure-general-flow1128533 -Ref: figure-process-flow1129132 -Ref: Basic High Level-Footnote-11132361 -Node: Basic Data Typing1132546 -Node: Glossary1135901 -Node: Copying1161132 -Node: GNU Free Documentation License1198688 -Node: Index1223824 +Node: Patterns and Actions361754 +Node: Pattern Overview362808 +Node: Regexp Patterns364485 +Node: Expression Patterns365028 +Node: Ranges368809 +Node: BEGIN/END371915 +Node: Using BEGIN/END372677 +Ref: Using BEGIN/END-Footnote-1375413 +Node: I/O And BEGIN/END375519 +Node: BEGINFILE/ENDFILE377804 +Node: Empty380740 +Node: Using Shell Variables381057 +Node: Action Overview383340 +Node: Statements385685 +Node: If Statement387539 +Node: While Statement389038 +Node: Do Statement391082 +Node: For Statement392238 +Node: Switch Statement395390 +Node: Break Statement397493 +Node: Continue Statement399548 +Node: Next Statement401341 +Node: Nextfile Statement403731 +Node: Exit Statement406386 +Node: Built-in Variables408788 +Node: User-modified409884 +Ref: User-modified-Footnote-1417569 +Node: Auto-set417631 +Ref: Auto-set-Footnote-1430196 +Ref: Auto-set-Footnote-2430401 +Node: ARGC and ARGV430457 +Node: Arrays434311 +Node: Array Basics435809 +Node: Array Intro436635 +Ref: figure-array-elements438608 +Node: Reference to Elements441015 +Node: Assigning Elements443288 +Node: Array Example443779 +Node: Scanning an Array445511 +Node: Controlling Scanning448526 +Ref: Controlling Scanning-Footnote-1453699 +Node: Delete454015 +Ref: Delete-Footnote-1456780 +Node: Numeric Array Subscripts456837 +Node: Uninitialized Subscripts459020 +Node: Multidimensional460645 +Node: Multiscanning463738 +Node: Arrays of Arrays465327 +Node: Functions469967 +Node: Built-in470786 +Node: Calling Built-in471864 +Node: Numeric Functions473852 +Ref: Numeric Functions-Footnote-1477686 +Ref: Numeric Functions-Footnote-2478043 +Ref: Numeric Functions-Footnote-3478091 +Node: String Functions478360 +Ref: String Functions-Footnote-1501371 +Ref: String Functions-Footnote-2501500 +Ref: String Functions-Footnote-3501748 +Node: Gory Details501835 +Ref: table-sub-escapes503504 +Ref: table-sub-posix-92504858 +Ref: table-sub-proposed506209 +Ref: table-posix-sub507563 +Ref: table-gensub-escapes509108 +Ref: Gory Details-Footnote-1510284 +Ref: Gory Details-Footnote-2510335 +Node: I/O Functions510486 +Ref: I/O Functions-Footnote-1517609 +Node: Time Functions517756 +Ref: Time Functions-Footnote-1528220 +Ref: Time Functions-Footnote-2528288 +Ref: Time Functions-Footnote-3528446 +Ref: Time Functions-Footnote-4528557 +Ref: Time Functions-Footnote-5528669 +Ref: Time Functions-Footnote-6528896 +Node: Bitwise Functions529162 +Ref: table-bitwise-ops529724 +Ref: Bitwise Functions-Footnote-1533969 +Node: Type Functions534153 +Node: I18N Functions535295 +Node: User-defined536940 +Node: Definition Syntax537744 +Ref: Definition Syntax-Footnote-1542659 +Node: Function Example542728 +Ref: Function Example-Footnote-1545372 +Node: Function Caveats545394 +Node: Calling A Function545912 +Node: Variable Scope546867 +Node: Pass By Value/Reference549855 +Node: Return Statement553363 +Node: Dynamic Typing556345 +Node: Indirect Calls557274 +Node: Library Functions566961 +Ref: Library Functions-Footnote-1570474 +Ref: Library Functions-Footnote-2570617 +Node: Library Names570788 +Ref: Library Names-Footnote-1574261 +Ref: Library Names-Footnote-2574481 +Node: General Functions574567 +Node: Strtonum Function575595 +Node: Assert Function578525 +Node: Round Function581851 +Node: Cliff Random Function583392 +Node: Ordinal Functions584408 +Ref: Ordinal Functions-Footnote-1587485 +Ref: Ordinal Functions-Footnote-2587737 +Node: Join Function587948 +Ref: Join Function-Footnote-1589719 +Node: Getlocaltime Function589919 +Node: Readfile Function593660 +Node: Data File Management595499 +Node: Filetrans Function596131 +Node: Rewind Function600200 +Node: File Checking601587 +Node: Empty Files602681 +Node: Ignoring Assigns604911 +Node: Getopt Function606465 +Ref: Getopt Function-Footnote-1617768 +Node: Passwd Functions617971 +Ref: Passwd Functions-Footnote-1626949 +Node: Group Functions627037 +Node: Walking Arrays635121 +Node: Sample Programs637257 +Node: Running Examples637931 +Node: Clones638659 +Node: Cut Program639883 +Node: Egrep Program649734 +Ref: Egrep Program-Footnote-1657507 +Node: Id Program657617 +Node: Split Program661266 +Ref: Split Program-Footnote-1664785 +Node: Tee Program664913 +Node: Uniq Program667716 +Node: Wc Program675145 +Ref: Wc Program-Footnote-1679411 +Ref: Wc Program-Footnote-2679611 +Node: Miscellaneous Programs679703 +Node: Dupword Program680891 +Node: Alarm Program682922 +Node: Translate Program687729 +Ref: Translate Program-Footnote-1692116 +Ref: Translate Program-Footnote-2692364 +Node: Labels Program692498 +Ref: Labels Program-Footnote-1695869 +Node: Word Sorting695953 +Node: History Sorting699837 +Node: Extract Program701676 +Ref: Extract Program-Footnote-1709179 +Node: Simple Sed709307 +Node: Igawk Program712369 +Ref: Igawk Program-Footnote-1727540 +Ref: Igawk Program-Footnote-2727741 +Node: Anagram Program727879 +Node: Signature Program730947 +Node: Advanced Features732047 +Node: Nondecimal Data733933 +Node: Array Sorting735516 +Node: Controlling Array Traversal736213 +Node: Array Sorting Functions744497 +Ref: Array Sorting Functions-Footnote-1748366 +Node: Two-way I/O748560 +Ref: Two-way I/O-Footnote-1753992 +Node: TCP/IP Networking754074 +Node: Profiling756918 +Node: Internationalization764421 +Node: I18N and L10N765846 +Node: Explaining gettext766532 +Ref: Explaining gettext-Footnote-1771600 +Ref: Explaining gettext-Footnote-2771784 +Node: Programmer i18n771949 +Node: Translator i18n776176 +Node: String Extraction776970 +Ref: String Extraction-Footnote-1777931 +Node: Printf Ordering778017 +Ref: Printf Ordering-Footnote-1780799 +Node: I18N Portability780863 +Ref: I18N Portability-Footnote-1783312 +Node: I18N Example783375 +Ref: I18N Example-Footnote-1786013 +Node: Gawk I18N786085 +Node: Debugger786706 +Node: Debugging787677 +Node: Debugging Concepts788110 +Node: Debugging Terms789966 +Node: Awk Debugging792563 +Node: Sample Debugging Session793455 +Node: Debugger Invocation793975 +Node: Finding The Bug795308 +Node: List of Debugger Commands801795 +Node: Breakpoint Control803129 +Node: Debugger Execution Control806793 +Node: Viewing And Changing Data810153 +Node: Execution Stack813509 +Node: Debugger Info814976 +Node: Miscellaneous Debugger Commands818970 +Node: Readline Support824148 +Node: Limitations824979 +Node: Arbitrary Precision Arithmetic827231 +Ref: Arbitrary Precision Arithmetic-Footnote-1828880 +Node: General Arithmetic829028 +Node: Floating Point Issues830748 +Node: String Conversion Precision831629 +Ref: String Conversion Precision-Footnote-1833334 +Node: Unexpected Results833443 +Node: POSIX Floating Point Problems835596 +Ref: POSIX Floating Point Problems-Footnote-1839421 +Node: Integer Programming839459 +Node: Floating-point Programming841198 +Ref: Floating-point Programming-Footnote-1847529 +Ref: Floating-point Programming-Footnote-2847799 +Node: Floating-point Representation848063 +Node: Floating-point Context849228 +Ref: table-ieee-formats850067 +Node: Rounding Mode851451 +Ref: table-rounding-modes851930 +Ref: Rounding Mode-Footnote-1854945 +Node: Gawk and MPFR855124 +Node: Arbitrary Precision Floats856533 +Ref: Arbitrary Precision Floats-Footnote-1858976 +Node: Setting Precision859292 +Ref: table-predefined-precision-strings859978 +Node: Setting Rounding Mode862123 +Ref: table-gawk-rounding-modes862527 +Node: Floating-point Constants863714 +Node: Changing Precision865143 +Ref: Changing Precision-Footnote-1866540 +Node: Exact Arithmetic866714 +Node: Arbitrary Precision Integers869852 +Ref: Arbitrary Precision Integers-Footnote-1872867 +Node: Dynamic Extensions873014 +Node: Extension Intro874472 +Node: Plugin License875737 +Node: Extension Mechanism Outline876422 +Ref: load-extension876839 +Ref: load-new-function878317 +Ref: call-new-function879312 +Node: Extension API Description881327 +Node: Extension API Functions Introduction882614 +Node: General Data Types887541 +Ref: General Data Types-Footnote-1893236 +Node: Requesting Values893535 +Ref: table-value-types-returned894272 +Node: Memory Allocation Functions895226 +Ref: Memory Allocation Functions-Footnote-1897972 +Node: Constructor Functions898068 +Node: Registration Functions899826 +Node: Extension Functions900511 +Node: Exit Callback Functions902813 +Node: Extension Version String904062 +Node: Input Parsers904712 +Node: Output Wrappers914469 +Node: Two-way processors918979 +Node: Printing Messages921187 +Ref: Printing Messages-Footnote-1922264 +Node: Updating `ERRNO'922416 +Node: Accessing Parameters923155 +Node: Symbol Table Access924385 +Node: Symbol table by name924899 +Node: Symbol table by cookie926875 +Ref: Symbol table by cookie-Footnote-1931007 +Node: Cached values931070 +Ref: Cached values-Footnote-1934560 +Node: Array Manipulation934651 +Ref: Array Manipulation-Footnote-1935749 +Node: Array Data Types935788 +Ref: Array Data Types-Footnote-1938491 +Node: Array Functions938583 +Node: Flattening Arrays942419 +Node: Creating Arrays949271 +Node: Extension API Variables953996 +Node: Extension Versioning954632 +Node: Extension API Informational Variables956533 +Node: Extension API Boilerplate957619 +Node: Finding Extensions961423 +Node: Extension Example961983 +Node: Internal File Description962713 +Node: Internal File Ops966804 +Ref: Internal File Ops-Footnote-1978313 +Node: Using Internal File Ops978453 +Ref: Using Internal File Ops-Footnote-1980800 +Node: Extension Samples981066 +Node: Extension Sample File Functions982590 +Node: Extension Sample Fnmatch991077 +Node: Extension Sample Fork992846 +Node: Extension Sample Inplace994059 +Node: Extension Sample Ord995837 +Node: Extension Sample Readdir996673 +Node: Extension Sample Revout998205 +Node: Extension Sample Rev2way998798 +Node: Extension Sample Read write array999488 +Node: Extension Sample Readfile1001371 +Node: Extension Sample API Tests1002471 +Node: Extension Sample Time1002996 +Node: gawkextlib1004360 +Node: Language History1007141 +Node: V7/SVR3.11008734 +Node: SVR41011054 +Node: POSIX1012496 +Node: BTL1013882 +Node: POSIX/GNU1014616 +Node: Feature History1020215 +Node: Common Extensions1033191 +Node: Ranges and Locales1034503 +Ref: Ranges and Locales-Footnote-11039120 +Ref: Ranges and Locales-Footnote-21039147 +Ref: Ranges and Locales-Footnote-31039381 +Node: Contributors1039602 +Node: Installation1044983 +Node: Gawk Distribution1045877 +Node: Getting1046361 +Node: Extracting1047187 +Node: Distribution contents1048879 +Node: Unix Installation1054600 +Node: Quick Installation1055217 +Node: Additional Configuration Options1057663 +Node: Configuration Philosophy1059399 +Node: Non-Unix Installation1061753 +Node: PC Installation1062211 +Node: PC Binary Installation1063510 +Node: PC Compiling1065358 +Node: PC Testing1068302 +Node: PC Using1069478 +Node: Cygwin1073646 +Node: MSYS1074455 +Node: VMS Installation1074969 +Node: VMS Compilation1075765 +Ref: VMS Compilation-Footnote-11077017 +Node: VMS Dynamic Extensions1077075 +Node: VMS Installation Details1078448 +Node: VMS Running1080699 +Node: VMS GNV1083533 +Node: VMS Old Gawk1084256 +Node: Bugs1084726 +Node: Other Versions1088644 +Node: Notes1094728 +Node: Compatibility Mode1095528 +Node: Additions1096311 +Node: Accessing The Source1097238 +Node: Adding Code1098678 +Node: New Ports1104723 +Node: Derived Files1108858 +Ref: Derived Files-Footnote-11114179 +Ref: Derived Files-Footnote-21114213 +Ref: Derived Files-Footnote-31114813 +Node: Future Extensions1114911 +Node: Implementation Limitations1115494 +Node: Extension Design1116742 +Node: Old Extension Problems1117896 +Ref: Old Extension Problems-Footnote-11119404 +Node: Extension New Mechanism Goals1119461 +Ref: Extension New Mechanism Goals-Footnote-11122826 +Node: Extension Other Design Decisions1123012 +Node: Extension Future Growth1125118 +Node: Old Extension Mechanism1125954 +Node: Basic Concepts1127694 +Node: Basic High Level1128375 +Ref: figure-general-flow1128647 +Ref: figure-process-flow1129246 +Ref: Basic High Level-Footnote-11132475 +Node: Basic Data Typing1132660 +Node: Glossary1136015 +Node: Copying1161246 +Node: GNU Free Documentation License1198802 +Node: Index1223938  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 569c2f33..3a81e85b 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -12194,27 +12194,35 @@ For maximum portability, do not use them. @section Where You Are Makes A Difference @cindex locale, definition of -Modern systems support the notion of @dfn{locales}: a way to tell -the system about the local character set and language. +Modern systems support the notion of @dfn{locales}: a way to tell the +system about the local character set and language. The ISO C standard +defines a default @code{"C"} locale, which is an environment that is +typical of what many C programmers are used to. Once upon a time, the locale setting used to affect regexp matching (@pxref{Ranges and Locales}), but this is no longer true. -Locales can affect record splitting. -For the normal case of @samp{RS = "\n"}, the locale is largely irrelevant. -For other single-character record separators, setting @samp{LC_ALL=C} -in the environment -will give you much better performance when reading records. Otherwise, +Locales can affect record splitting. For the normal case of @samp{RS = +"\n"}, the locale is largely irrelevant. For other single-character +record separators, setting @samp{LC_ALL=C} in the environment will +give you much better performance when reading records. Otherwise, @command{gawk} has to make several function calls, @emph{per input character}, to find the record terminator. -According to POSIX, string comparison is also affected by locales -(similar to regular expressions). The details are presented in -@ref{POSIX String Comparison}. +Locales can affect how dates and times are formatted (@pxref{Time +Functions}). For example, a common way to abbreviate the date September +4, 2015 in the United States is ``9/4/15.'' In many countries in +Europe, however, it is abbreviated ``4.9.15.'' Thus, the @samp{%x} +specification in a @code{"US"} locale might produce @samp{9/4/15}, +while in a @code{"EUROPE"} locale, it might produce @samp{4.9.15}. + +According to POSIX, string comparison is also affected by locales (similar +to regular expressions). The details are presented in @ref{POSIX String +Comparison}. Finally, the locale affects the value of the decimal point character -used when @command{gawk} parses input data. This is discussed in -detail in @ref{Conversion}. +used when @command{gawk} parses input data. This is discussed in detail +in @ref{Conversion}. @c ENDOFRANGE exps @@ -15950,7 +15958,14 @@ Optional parameters are enclosed in square brackets@w{ ([ ]):} @cindexawkfunc{atan2} @cindex arctangent Return the arctangent of @code{@var{y} / @var{x}} in radians. -You can use @samp{pi = atan2(0, -1)} to retrieve the value of @value{PI}. +You can use @samp{pi = atan2(0, -1)} to retrieve the value of +@ifnotdocbook +@value{PI}. +@end ifnotdocbook +@docbook +&pgr;. + +@end docbook @item @code{cos(@var{x})} @cindexawkfunc{cos} @@ -16093,12 +16108,23 @@ example, @code{length()} returns the number of characters in a string, and not the number of bytes used to represent those characters. Similarly, @code{index()} works with character indices, and not byte indices. +@quotation CAUTION +A number of functions deal with indices into strings. For these +functions, the first character of a string is at position (index) one. +This is different from C and the languages descended from it, where the +first character is at position zero. You need to remember this when +doing index calculations, particularly if you are used to C. +@end quotation + In the following list, optional parameters are enclosed in square brackets@w{ ([ ]).} Several functions perform string substitution; the full discussion is provided in the description of the @code{sub()} function, which comes towards the end since the list is presented in alphabetic order. + Those functions that are specific to @command{gawk} are marked with a -pound sign@w{ (@samp{#}):} +pound sign (@samp{#}). They are not available in compatibility mode +(@pxref{Options}): + @menu * Gory Details:: More than you want to know about @samp{\} and @@ -16108,8 +16134,8 @@ pound sign@w{ (@samp{#}):} @c @asis for docbook @table @asis -@item @code{asort(}@var{source} [@code{,} @var{dest} [@code{,} @var{how} ] ]@code{)} # -@itemx @code{asorti(}@var{source} [@code{,} @var{dest} [@code{,} @var{how} ] ]@code{)} # +@item @code{asort(}@var{source} [@code{,} @var{dest} [@code{,} @var{how} ] ]@code{) #} +@itemx @code{asorti(}@var{source} [@code{,} @var{dest} [@code{,} @var{how} ] ]@code{) #} @cindexgawkfunc{asorti} @cindex sort array @cindex arrays, elements, retrieving number of @@ -16173,10 +16199,7 @@ a[2] = "last" a[3] = "middle" @end example -@code{asort()} and @code{asorti()} are @command{gawk} extensions; they -are not available in compatibility mode (@pxref{Options}). - -@item @code{gensub(@var{regexp}, @var{replacement}, @var{how}} [@code{, @var{target}}]@code{)} # +@item @code{gensub(@var{regexp}, @var{replacement}, @var{how}} [@code{, @var{target}}]@code{) #} @cindexgawkfunc{gensub} @cindex search and replace in strings @cindex substitute in string @@ -16238,9 +16261,6 @@ a warning message. If @var{regexp} does not match @var{target}, @code{gensub()}'s return value is the original unchanged value of @var{target}. -@code{gensub()} is a @command{gawk} extension; it is not available -in compatibility mode (@pxref{Options}). - @item @code{gsub(@var{regexp}, @var{replacement}} [@code{, @var{target}}]@code{)} @cindexawkfunc{gsub} Search @var{target} for @@ -16278,7 +16298,6 @@ $ @kbd{awk 'BEGIN @{ print index("peanut", "an") @}'} @noindent If @var{find} is not found, @code{index()} returns zero. -(Remember that string indices in @command{awk} start at one.) It is a fatal error to use a regexp constant for @var{find}. @@ -16289,8 +16308,19 @@ It is a fatal error to use a regexp constant for @var{find}. Return the number of characters in @var{string}. If @var{string} is a number, the length of the digit string representing that number is returned. For example, @code{length("abcde")} is five. By -contrast, @code{length(15 * 35)} works out to three. In this example, 15 * 35 = -525, and 525 is then converted to the string @code{"525"}, which has +contrast, @code{length(15 * 35)} works out to three. In this example, +@iftex +@math{15 @cdot 35 = 525}, +@end iftex +@ifnottex +@ifnotdocbook +15 * 35 = 525, +@end ifnotdocbook +@end ifnottex +@docbook +15 ⋅ 35 = 525, @c +@end docbook +and 525 is then converted to the string @code{"525"}, which has three characters. @cindex length of input record @@ -16353,12 +16383,12 @@ If @option{--posix} is supplied, using an array argument is a fatal error @cindex match regexp in string Search @var{string} for the longest, leftmost substring matched by the regular expression, -@var{regexp} and return the character position, or @dfn{index}, +@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. The @var{regexp} argument may be either a regexp constant -(@code{/@dots{}/}) or a string constant (@code{"@dots{}"}). +(@code{/}@dots{}@code{/}) or a string constant (@code{"}@dots{}@code{"}). In the latter case, the string is treated as a regexp to be matched. @xref{Computed Regexps}, for a discussion of the difference between the two forms, and the @@ -16464,7 +16494,7 @@ The @var{array} argument to @code{match()} is a (@pxref{Options}), using a third argument is a fatal error. -@item @code{patsplit(@var{string}, @var{array}} [@code{, @var{fieldpat}} [@code{, @var{seps}} ] ]@code{)} # +@item @code{patsplit(@var{string}, @var{array}} [@code{, @var{fieldpat}} [@code{, @var{seps}} ] ]@code{) #} @cindexgawkfunc{patsplit} @cindex split string into array Divide @@ -16490,12 +16520,6 @@ manner similar to the way input lines are split into fields using @code{FPAT} Before splitting the string, @code{patsplit()} deletes any previously existing elements in the arrays @var{array} and @var{seps}. -@cindex troubleshooting, @code{patsplit()} function -The @code{patsplit()} function is a -@command{gawk} extension. In compatibility mode -(@pxref{Options}), -it is not available. - @item @code{split(@var{string}, @var{array}} [@code{, @var{fieldsep}} [@code{, @var{seps}} ] ]@code{)} @cindexawkfunc{split} Divide @var{string} into pieces separated by @var{fieldsep} @@ -16581,6 +16605,8 @@ If @var{string} does not match @var{fieldsep} at all (but is not null), @var{array} has one element only. The value of that element is the original @var{string}. +In POSIX mode (@pxref{Options}), the fourth argument is not allowed. + @item @code{sprintf(@var{format}, @var{expression1}, @dots{})} @cindexawkfunc{sprintf} @cindex formatting strings @@ -16598,7 +16624,7 @@ assigns the string @w{@samp{pi = 3.14 (approx.)}} to the variable @code{pival}. @cindexgawkfunc{strtonum} @cindex convert string to number -@item @code{strtonum(@var{str})} # +@item @code{strtonum(@var{str}) #} Examine @var{str} and return its numeric value. If @var{str} begins with a leading @samp{0}, @code{strtonum()} assumes that @var{str} is an octal number. If @var{str} begins with a leading @samp{0x} or @@ -16620,9 +16646,6 @@ you use the @option{--non-decimal-data} option, which isn't recommended. Note also that @code{strtonum()} uses the current locale's decimal point for recognizing numbers (@pxref{Locales}). -@code{strtonum()} is a @command{gawk} extension; it is not available -in compatibility mode (@pxref{Options}). - @item @code{sub(@var{regexp}, @var{replacement}} [@code{, @var{target}}]@code{)} @cindexawkfunc{sub} @cindex replace in string @@ -16634,7 +16657,7 @@ The modified string becomes the new value of @var{target}. Return the number of substitutions made (zero or one). The @var{regexp} argument may be either a regexp constant -(@code{/@dots{}/}) or a string constant (@code{"@dots{}"}). +(@code{/}@dots{}@code{/}) or a string constant (@code{"}@dots{}@code{"}). In the latter case, the string is treated as a regexp to be matched. @xref{Computed Regexps}, for a discussion of the difference between the two forms, and the @@ -16818,7 +16841,7 @@ that there are several levels of @dfn{escape processing} going on. First, there is the @dfn{lexical} level, which is when @command{awk} reads your program -and builds an internal copy of it that can be executed. +and builds an internal copy of it to execute. Then there is the runtime level, which is when @command{awk} actually scans the replacement string to determine what to generate. @@ -17245,6 +17268,9 @@ not matter. @xref{Two-way I/O}, which discusses this feature in more detail and gives an example. +Note that the second argument to @code{close()} is a @command{gawk} +extension; it is not available in compatibility mode (@pxref{Options}). + @item @code{fflush(}[@var{filename}]@code{)} @cindexawkfunc{fflush} @cindex flush buffered output @@ -17267,7 +17293,7 @@ buffers its output and the @code{fflush()} function forces @cindex extensions, common@comma{} @code{fflush()} function @cindex Brian Kernighan's @command{awk} -@code{fflush()} was added to Brian Kernighan's version of @command{awk} in +@code{fflush()} was added to Brian Kernighan's @command{awk} in April of 1992. For two decades, it was not part of the POSIX standard. As of December, 2012, it was accepted for inclusion into the POSIX standard. @@ -17295,7 +17321,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 non-zero. (@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}. @@ -17630,8 +17656,9 @@ However, recent versions of @command{mawk} (@pxref{Other Versions}) also support these functions. Optional parameters are enclosed in square brackets ([ ]): -@table @code -@item mktime(@var{datespec}) +@c @asis for docbook +@table @asis +@item @code{mktime(@var{datespec})} @cindexgawkfunc{mktime} @cindex generate time values Turn @var{datespec} into a timestamp in the same form @@ -17661,7 +17688,7 @@ 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{)} +@item @code{strftime(} [@var{format} [@code{,} @var{timestamp} [@code{,} @var{utc-flag}] ] ]@code{)} @c STARTOFRANGE strf @cindexgawkfunc{strftime} @cindex format time string @@ -17683,7 +17710,7 @@ output that is equivalent to that of the @command{date} utility. You can assign a new value to @code{PROCINFO["strftime"]} to change the default format; see below for the various format directives. -@item systime() +@item @code{systime()} @cindexgawkfunc{systime} @cindex timestamps @cindex current system time @@ -17758,10 +17785,10 @@ This is the ISO 8601 date format. @item %g The year modulo 100 of the ISO 8601 week number, as a decimal number (00--99). -For example, January 1, 1993 is in week 53 of 1992. Thus, the year -of its ISO 8601 week number is 1992, even though its year is 1993. -Similarly, December 31, 1973 is in week 1 of 1974. Thus, the year -of its ISO week number is 1974, even though its year is 1973. +For example, January 1, 2012 is in week 53 of 2011. Thus, the year +of its ISO 8601 week number is 2011, even though its year is 2012. +Similarly, December 31, 2012 is in week 1 of 2013. Thus, the year +of its ISO week number is 2013, even though its year is 2012. @item %G The full year of the ISO week number, as a decimal number. @@ -17842,7 +17869,7 @@ The locale's ``appropriate'' time representation. The year modulo 100 as a decimal number (00--99). @item %Y -The full year as a decimal number (e.g., 2011). +The full year as a decimal number (e.g., 2015). @c @cindex RFC 822 @c @cindex RFC 1036 @@ -17876,17 +17903,6 @@ uses the system's version of @code{strftime()} if it's there. Typically, the conversion specifier either does not appear in the returned string or appears literally.} -@c @cindex locale, definition of -Informally, a @dfn{locale} is the geographic place in which a program -is meant to run. For example, a common way to abbreviate the date -September 4, 2012 in the United States is ``9/4/12.'' -In many countries in Europe, however, it is abbreviated ``4.9.12.'' -Thus, the @samp{%x} specification in a @code{"US"} locale might produce -@samp{9/4/12}, while in a @code{"EUROPE"} locale, it might produce -@samp{4.9.12}. The ISO C standard defines a default @code{"C"} -locale, which is an environment that is typical of what many C programmers -are used to. - For systems that are not yet fully standards-compliant, @command{gawk} supplies a copy of @code{strftime()} from the GNU C Library. @@ -17939,7 +17955,7 @@ the string. For example: @example $ date '+Today is %A, %B %d, %Y.' -@print{} Today is Wednesday, March 30, 2011. +@print{} Today is Monday, May 05, 2014. @end example Here is the @command{gawk} version of the @command{date} utility. @@ -17959,7 +17975,7 @@ case $1 in esac gawk 'BEGIN @{ - format = "%a %b %e %H:%M:%S %Z %Y" + format = PROCINFO["strftime"] exitval = 0 if (ARGC > 2) @@ -18047,7 +18063,6 @@ Operands | 0 | 1 | 0 | 1 | 0 | 1 @end tex @docbook - Bitwise Operations @@ -18293,7 +18308,7 @@ results of the @code{compl()}, @code{lshift()}, and @code{rshift()} functions. @command{gawk} provides a single function that lets you distinguish an array from a scalar variable. This is necessary for writing code -that traverses every element of a true multidimensional array +that traverses every element of an array of arrays. (@pxref{Arrays of Arrays}). @table @code @@ -18331,10 +18346,10 @@ The descriptions here are purposely brief. for the full story. Optional parameters are enclosed in square brackets ([ ]): -@table @code +@table @asis @cindexgawkfunc{bindtextdomain} @cindex set directory of message catalogs -@item @code{bindtextdomain(@var{directory}} [@code{,} @var{domain} ]@code{)} +@item @code{bindtextdomain(@var{directory}} [@code{,} @var{domain}]@code{)} Set the directory in which @command{gawk} will look for message translation files, in case they will not or cannot be placed in the ``standard'' locations @@ -18348,14 +18363,14 @@ given @var{domain}. @cindexgawkfunc{dcgettext} @cindex translate string -@item @code{dcgettext(@var{string}} [@code{,} @var{domain} [@code{,} @var{category} ]]@code{)} +@item @code{dcgettext(@var{string}} [@code{,} @var{domain} [@code{,} @var{category}] ]@code{)} Return the translation of @var{string} in text domain @var{domain} for locale category @var{category}. The default value for @var{domain} is the current value of @code{TEXTDOMAIN}. The default value for @var{category} is @code{"LC_MESSAGES"}. @cindexgawkfunc{dcngettext} -@item @code{dcngettext(@var{string1}, @var{string2}, @var{number}} [@code{,} @var{domain} [@code{,} @var{category} ]]@code{)} +@item @code{dcngettext(@var{string1}, @var{string2}, @var{number}} [@code{,} @var{domain} [@code{,} @var{category}] ]@code{)} 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 @@ -18427,10 +18442,10 @@ the call. The local variables are initialized to the empty string. 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 built-in variables -(@pxref{Built-in Variables}. Not all versions of @command{awk} -enforce this restriction.) +In addition, according to the POSIX standard, function parameters +cannot have the same name as one of the special built-in variables +(@pxref{Built-in Variables}). Not all versions of @command{awk} enforce +this restriction.) The @var{body-of-function} consists of @command{awk} statements. It is the most important part of the definition, because it says what the function @@ -18615,7 +18630,7 @@ to create an @command{awk} version of @code{ctime()}: function ctime(ts, format) @{ - format = "%a %b %e %H:%M:%S %Z %Y" + format = PROCINFO["strftime"] if (ts == 0) ts = systime() # use current time as default return strftime(format, ts) @@ -18667,7 +18682,8 @@ an error. @cindex local variables, in a function @cindex variables, local to a function -There is no way to make a variable local to a @code{@{ @dots{} @}} block in +Unlike 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 function. @@ -18936,7 +18952,7 @@ return @r{[}@var{expression}@r{]} The @var{expression} part is optional. Due most likely to an oversight, POSIX does not define what the return value is if you omit the @var{expression}. Technically speaking, this -make the returned value undefined, and therefore, unpredictable. +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. @@ -19039,9 +19055,9 @@ BEGIN @{ @end example In this example, the first call to @code{foo()} generates -a fatal error, so @command{gawk} will not report the second -error. If you comment out that call, though, then @command{gawk} -will report the second error. +a fatal error, so @command{awk} will not report the second +error. If you comment out that call, though, then @command{awk} +does report the second error. Usually, such things aren't a big issue, but it's worth being aware of them. @@ -37070,6 +37086,7 @@ Wikipedia article}, for information on additional versions. @c ENDOFRANGE ingawk @c ENDOFRANGE awkim +@ifclear FOR_PRINT @node Notes @appendix Implementation Notes @c STARTOFRANGE gawii @@ -40249,6 +40266,7 @@ to permit their use in free software. @c Local Variables: @c ispell-local-pdict: "ispell-dict" @c End: +@end ifclear @ifnotdocbook @node Index diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 06206642..ee781f12 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -11574,27 +11574,35 @@ For maximum portability, do not use them. @section Where You Are Makes A Difference @cindex locale, definition of -Modern systems support the notion of @dfn{locales}: a way to tell -the system about the local character set and language. +Modern systems support the notion of @dfn{locales}: a way to tell the +system about the local character set and language. The ISO C standard +defines a default @code{"C"} locale, which is an environment that is +typical of what many C programmers are used to. Once upon a time, the locale setting used to affect regexp matching (@pxref{Ranges and Locales}), but this is no longer true. -Locales can affect record splitting. -For the normal case of @samp{RS = "\n"}, the locale is largely irrelevant. -For other single-character record separators, setting @samp{LC_ALL=C} -in the environment -will give you much better performance when reading records. Otherwise, +Locales can affect record splitting. For the normal case of @samp{RS = +"\n"}, the locale is largely irrelevant. For other single-character +record separators, setting @samp{LC_ALL=C} in the environment will +give you much better performance when reading records. Otherwise, @command{gawk} has to make several function calls, @emph{per input character}, to find the record terminator. -According to POSIX, string comparison is also affected by locales -(similar to regular expressions). The details are presented in -@ref{POSIX String Comparison}. +Locales can affect how dates and times are formatted (@pxref{Time +Functions}). For example, a common way to abbreviate the date September +4, 2015 in the United States is ``9/4/15.'' In many countries in +Europe, however, it is abbreviated ``4.9.15.'' Thus, the @samp{%x} +specification in a @code{"US"} locale might produce @samp{9/4/15}, +while in a @code{"EUROPE"} locale, it might produce @samp{4.9.15}. + +According to POSIX, string comparison is also affected by locales (similar +to regular expressions). The details are presented in @ref{POSIX String +Comparison}. Finally, the locale affects the value of the decimal point character -used when @command{gawk} parses input data. This is discussed in -detail in @ref{Conversion}. +used when @command{gawk} parses input data. This is discussed in detail +in @ref{Conversion}. @c ENDOFRANGE exps @@ -15284,7 +15292,14 @@ Optional parameters are enclosed in square brackets@w{ ([ ]):} @cindexawkfunc{atan2} @cindex arctangent Return the arctangent of @code{@var{y} / @var{x}} in radians. -You can use @samp{pi = atan2(0, -1)} to retrieve the value of @value{PI}. +You can use @samp{pi = atan2(0, -1)} to retrieve the value of +@ifnotdocbook +@value{PI}. +@end ifnotdocbook +@docbook +&pgr;. + +@end docbook @item @code{cos(@var{x})} @cindexawkfunc{cos} @@ -15427,12 +15442,23 @@ example, @code{length()} returns the number of characters in a string, and not the number of bytes used to represent those characters. Similarly, @code{index()} works with character indices, and not byte indices. +@quotation CAUTION +A number of functions deal with indices into strings. For these +functions, the first character of a string is at position (index) one. +This is different from C and the languages descended from it, where the +first character is at position zero. You need to remember this when +doing index calculations, particularly if you are used to C. +@end quotation + In the following list, optional parameters are enclosed in square brackets@w{ ([ ]).} Several functions perform string substitution; the full discussion is provided in the description of the @code{sub()} function, which comes towards the end since the list is presented in alphabetic order. + Those functions that are specific to @command{gawk} are marked with a -pound sign@w{ (@samp{#}):} +pound sign (@samp{#}). They are not available in compatibility mode +(@pxref{Options}): + @menu * Gory Details:: More than you want to know about @samp{\} and @@ -15442,8 +15468,8 @@ pound sign@w{ (@samp{#}):} @c @asis for docbook @table @asis -@item @code{asort(}@var{source} [@code{,} @var{dest} [@code{,} @var{how} ] ]@code{)} # -@itemx @code{asorti(}@var{source} [@code{,} @var{dest} [@code{,} @var{how} ] ]@code{)} # +@item @code{asort(}@var{source} [@code{,} @var{dest} [@code{,} @var{how} ] ]@code{) #} +@itemx @code{asorti(}@var{source} [@code{,} @var{dest} [@code{,} @var{how} ] ]@code{) #} @cindexgawkfunc{asorti} @cindex sort array @cindex arrays, elements, retrieving number of @@ -15507,10 +15533,7 @@ a[2] = "last" a[3] = "middle" @end example -@code{asort()} and @code{asorti()} are @command{gawk} extensions; they -are not available in compatibility mode (@pxref{Options}). - -@item @code{gensub(@var{regexp}, @var{replacement}, @var{how}} [@code{, @var{target}}]@code{)} # +@item @code{gensub(@var{regexp}, @var{replacement}, @var{how}} [@code{, @var{target}}]@code{) #} @cindexgawkfunc{gensub} @cindex search and replace in strings @cindex substitute in string @@ -15572,9 +15595,6 @@ a warning message. If @var{regexp} does not match @var{target}, @code{gensub()}'s return value is the original unchanged value of @var{target}. -@code{gensub()} is a @command{gawk} extension; it is not available -in compatibility mode (@pxref{Options}). - @item @code{gsub(@var{regexp}, @var{replacement}} [@code{, @var{target}}]@code{)} @cindexawkfunc{gsub} Search @var{target} for @@ -15612,7 +15632,6 @@ $ @kbd{awk 'BEGIN @{ print index("peanut", "an") @}'} @noindent If @var{find} is not found, @code{index()} returns zero. -(Remember that string indices in @command{awk} start at one.) It is a fatal error to use a regexp constant for @var{find}. @@ -15623,8 +15642,19 @@ It is a fatal error to use a regexp constant for @var{find}. Return the number of characters in @var{string}. If @var{string} is a number, the length of the digit string representing that number is returned. For example, @code{length("abcde")} is five. By -contrast, @code{length(15 * 35)} works out to three. In this example, 15 * 35 = -525, and 525 is then converted to the string @code{"525"}, which has +contrast, @code{length(15 * 35)} works out to three. In this example, +@iftex +@math{15 @cdot 35 = 525}, +@end iftex +@ifnottex +@ifnotdocbook +15 * 35 = 525, +@end ifnotdocbook +@end ifnottex +@docbook +15 ⋅ 35 = 525, @c +@end docbook +and 525 is then converted to the string @code{"525"}, which has three characters. @cindex length of input record @@ -15687,12 +15717,12 @@ If @option{--posix} is supplied, using an array argument is a fatal error @cindex match regexp in string Search @var{string} for the longest, leftmost substring matched by the regular expression, -@var{regexp} and return the character position, or @dfn{index}, +@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. The @var{regexp} argument may be either a regexp constant -(@code{/@dots{}/}) or a string constant (@code{"@dots{}"}). +(@code{/}@dots{}@code{/}) or a string constant (@code{"}@dots{}@code{"}). In the latter case, the string is treated as a regexp to be matched. @xref{Computed Regexps}, for a discussion of the difference between the two forms, and the @@ -15798,7 +15828,7 @@ The @var{array} argument to @code{match()} is a (@pxref{Options}), using a third argument is a fatal error. -@item @code{patsplit(@var{string}, @var{array}} [@code{, @var{fieldpat}} [@code{, @var{seps}} ] ]@code{)} # +@item @code{patsplit(@var{string}, @var{array}} [@code{, @var{fieldpat}} [@code{, @var{seps}} ] ]@code{) #} @cindexgawkfunc{patsplit} @cindex split string into array Divide @@ -15824,12 +15854,6 @@ manner similar to the way input lines are split into fields using @code{FPAT} Before splitting the string, @code{patsplit()} deletes any previously existing elements in the arrays @var{array} and @var{seps}. -@cindex troubleshooting, @code{patsplit()} function -The @code{patsplit()} function is a -@command{gawk} extension. In compatibility mode -(@pxref{Options}), -it is not available. - @item @code{split(@var{string}, @var{array}} [@code{, @var{fieldsep}} [@code{, @var{seps}} ] ]@code{)} @cindexawkfunc{split} Divide @var{string} into pieces separated by @var{fieldsep} @@ -15915,6 +15939,8 @@ If @var{string} does not match @var{fieldsep} at all (but is not null), @var{array} has one element only. The value of that element is the original @var{string}. +In POSIX mode (@pxref{Options}), the fourth argument is not allowed. + @item @code{sprintf(@var{format}, @var{expression1}, @dots{})} @cindexawkfunc{sprintf} @cindex formatting strings @@ -15932,7 +15958,7 @@ assigns the string @w{@samp{pi = 3.14 (approx.)}} to the variable @code{pival}. @cindexgawkfunc{strtonum} @cindex convert string to number -@item @code{strtonum(@var{str})} # +@item @code{strtonum(@var{str}) #} Examine @var{str} and return its numeric value. If @var{str} begins with a leading @samp{0}, @code{strtonum()} assumes that @var{str} is an octal number. If @var{str} begins with a leading @samp{0x} or @@ -15954,9 +15980,6 @@ you use the @option{--non-decimal-data} option, which isn't recommended. Note also that @code{strtonum()} uses the current locale's decimal point for recognizing numbers (@pxref{Locales}). -@code{strtonum()} is a @command{gawk} extension; it is not available -in compatibility mode (@pxref{Options}). - @item @code{sub(@var{regexp}, @var{replacement}} [@code{, @var{target}}]@code{)} @cindexawkfunc{sub} @cindex replace in string @@ -15968,7 +15991,7 @@ The modified string becomes the new value of @var{target}. Return the number of substitutions made (zero or one). The @var{regexp} argument may be either a regexp constant -(@code{/@dots{}/}) or a string constant (@code{"@dots{}"}). +(@code{/}@dots{}@code{/}) or a string constant (@code{"}@dots{}@code{"}). In the latter case, the string is treated as a regexp to be matched. @xref{Computed Regexps}, for a discussion of the difference between the two forms, and the @@ -16152,7 +16175,7 @@ that there are several levels of @dfn{escape processing} going on. First, there is the @dfn{lexical} level, which is when @command{awk} reads your program -and builds an internal copy of it that can be executed. +and builds an internal copy of it to execute. Then there is the runtime level, which is when @command{awk} actually scans the replacement string to determine what to generate. @@ -16546,6 +16569,9 @@ not matter. @xref{Two-way I/O}, which discusses this feature in more detail and gives an example. +Note that the second argument to @code{close()} is a @command{gawk} +extension; it is not available in compatibility mode (@pxref{Options}). + @item @code{fflush(}[@var{filename}]@code{)} @cindexawkfunc{fflush} @cindex flush buffered output @@ -16568,7 +16594,7 @@ buffers its output and the @code{fflush()} function forces @cindex extensions, common@comma{} @code{fflush()} function @cindex Brian Kernighan's @command{awk} -@code{fflush()} was added to Brian Kernighan's version of @command{awk} in +@code{fflush()} was added to Brian Kernighan's @command{awk} in April of 1992. For two decades, it was not part of the POSIX standard. As of December, 2012, it was accepted for inclusion into the POSIX standard. @@ -16596,7 +16622,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 non-zero. (@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}. @@ -16803,8 +16829,9 @@ However, recent versions of @command{mawk} (@pxref{Other Versions}) also support these functions. Optional parameters are enclosed in square brackets ([ ]): -@table @code -@item mktime(@var{datespec}) +@c @asis for docbook +@table @asis +@item @code{mktime(@var{datespec})} @cindexgawkfunc{mktime} @cindex generate time values Turn @var{datespec} into a timestamp in the same form @@ -16834,7 +16861,7 @@ 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{)} +@item @code{strftime(} [@var{format} [@code{,} @var{timestamp} [@code{,} @var{utc-flag}] ] ]@code{)} @c STARTOFRANGE strf @cindexgawkfunc{strftime} @cindex format time string @@ -16856,7 +16883,7 @@ output that is equivalent to that of the @command{date} utility. You can assign a new value to @code{PROCINFO["strftime"]} to change the default format; see below for the various format directives. -@item systime() +@item @code{systime()} @cindexgawkfunc{systime} @cindex timestamps @cindex current system time @@ -16931,10 +16958,10 @@ This is the ISO 8601 date format. @item %g The year modulo 100 of the ISO 8601 week number, as a decimal number (00--99). -For example, January 1, 1993 is in week 53 of 1992. Thus, the year -of its ISO 8601 week number is 1992, even though its year is 1993. -Similarly, December 31, 1973 is in week 1 of 1974. Thus, the year -of its ISO week number is 1974, even though its year is 1973. +For example, January 1, 2012 is in week 53 of 2011. Thus, the year +of its ISO 8601 week number is 2011, even though its year is 2012. +Similarly, December 31, 2012 is in week 1 of 2013. Thus, the year +of its ISO week number is 2013, even though its year is 2012. @item %G The full year of the ISO week number, as a decimal number. @@ -17015,7 +17042,7 @@ The locale's ``appropriate'' time representation. The year modulo 100 as a decimal number (00--99). @item %Y -The full year as a decimal number (e.g., 2011). +The full year as a decimal number (e.g., 2015). @c @cindex RFC 822 @c @cindex RFC 1036 @@ -17049,17 +17076,6 @@ uses the system's version of @code{strftime()} if it's there. Typically, the conversion specifier either does not appear in the returned string or appears literally.} -@c @cindex locale, definition of -Informally, a @dfn{locale} is the geographic place in which a program -is meant to run. For example, a common way to abbreviate the date -September 4, 2012 in the United States is ``9/4/12.'' -In many countries in Europe, however, it is abbreviated ``4.9.12.'' -Thus, the @samp{%x} specification in a @code{"US"} locale might produce -@samp{9/4/12}, while in a @code{"EUROPE"} locale, it might produce -@samp{4.9.12}. The ISO C standard defines a default @code{"C"} -locale, which is an environment that is typical of what many C programmers -are used to. - For systems that are not yet fully standards-compliant, @command{gawk} supplies a copy of @code{strftime()} from the GNU C Library. @@ -17112,7 +17128,7 @@ the string. For example: @example $ date '+Today is %A, %B %d, %Y.' -@print{} Today is Wednesday, March 30, 2011. +@print{} Today is Monday, May 05, 2014. @end example Here is the @command{gawk} version of the @command{date} utility. @@ -17132,7 +17148,7 @@ case $1 in esac gawk 'BEGIN @{ - format = "%a %b %e %H:%M:%S %Z %Y" + format = PROCINFO["strftime"] exitval = 0 if (ARGC > 2) @@ -17220,7 +17236,6 @@ Operands | 0 | 1 | 0 | 1 | 0 | 1 @end tex @docbook -
Bitwise Operations @@ -17466,7 +17481,7 @@ results of the @code{compl()}, @code{lshift()}, and @code{rshift()} functions. @command{gawk} provides a single function that lets you distinguish an array from a scalar variable. This is necessary for writing code -that traverses every element of a true multidimensional array +that traverses every element of an array of arrays. (@pxref{Arrays of Arrays}). @table @code @@ -17504,10 +17519,10 @@ The descriptions here are purposely brief. for the full story. Optional parameters are enclosed in square brackets ([ ]): -@table @code +@table @asis @cindexgawkfunc{bindtextdomain} @cindex set directory of message catalogs -@item @code{bindtextdomain(@var{directory}} [@code{,} @var{domain} ]@code{)} +@item @code{bindtextdomain(@var{directory}} [@code{,} @var{domain}]@code{)} Set the directory in which @command{gawk} will look for message translation files, in case they will not or cannot be placed in the ``standard'' locations @@ -17521,14 +17536,14 @@ given @var{domain}. @cindexgawkfunc{dcgettext} @cindex translate string -@item @code{dcgettext(@var{string}} [@code{,} @var{domain} [@code{,} @var{category} ]]@code{)} +@item @code{dcgettext(@var{string}} [@code{,} @var{domain} [@code{,} @var{category}] ]@code{)} Return the translation of @var{string} in text domain @var{domain} for locale category @var{category}. The default value for @var{domain} is the current value of @code{TEXTDOMAIN}. The default value for @var{category} is @code{"LC_MESSAGES"}. @cindexgawkfunc{dcngettext} -@item @code{dcngettext(@var{string1}, @var{string2}, @var{number}} [@code{,} @var{domain} [@code{,} @var{category} ]]@code{)} +@item @code{dcngettext(@var{string1}, @var{string2}, @var{number}} [@code{,} @var{domain} [@code{,} @var{category}] ]@code{)} 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 @@ -17600,10 +17615,10 @@ the call. The local variables are initialized to the empty string. 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 built-in variables -(@pxref{Built-in Variables}. Not all versions of @command{awk} -enforce this restriction.) +In addition, according to the POSIX standard, function parameters +cannot have the same name as one of the special built-in variables +(@pxref{Built-in Variables}). Not all versions of @command{awk} enforce +this restriction.) The @var{body-of-function} consists of @command{awk} statements. It is the most important part of the definition, because it says what the function @@ -17788,7 +17803,7 @@ to create an @command{awk} version of @code{ctime()}: function ctime(ts, format) @{ - format = "%a %b %e %H:%M:%S %Z %Y" + format = PROCINFO["strftime"] if (ts == 0) ts = systime() # use current time as default return strftime(format, ts) @@ -17840,7 +17855,8 @@ an error. @cindex local variables, in a function @cindex variables, local to a function -There is no way to make a variable local to a @code{@{ @dots{} @}} block in +Unlike 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 function. @@ -18109,7 +18125,7 @@ return @r{[}@var{expression}@r{]} The @var{expression} part is optional. Due most likely to an oversight, POSIX does not define what the return value is if you omit the @var{expression}. Technically speaking, this -make the returned value undefined, and therefore, unpredictable. +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. @@ -18212,9 +18228,9 @@ BEGIN @{ @end example In this example, the first call to @code{foo()} generates -a fatal error, so @command{gawk} will not report the second -error. If you comment out that call, though, then @command{gawk} -will report the second error. +a fatal error, so @command{awk} will not report the second +error. If you comment out that call, though, then @command{awk} +does report the second error. Usually, such things aren't a big issue, but it's worth being aware of them. @@ -36214,6 +36230,7 @@ Wikipedia article}, for information on additional versions. @c ENDOFRANGE ingawk @c ENDOFRANGE awkim +@ifclear FOR_PRINT @node Notes @appendix Implementation Notes @c STARTOFRANGE gawii @@ -39393,6 +39410,7 @@ to permit their use in free software. @c Local Variables: @c ispell-local-pdict: "ispell-dict" @c End: +@end ifclear @ifnotdocbook @node Index -- cgit v1.2.3 From 03edc59397a4924b29852107198c4f345c986e80 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 7 May 2014 22:29:20 +0300 Subject: Docbook edits. Document AWKBUFSIZE. --- doc/ChangeLog | 5 + doc/gawk.info | 971 ++++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 95 ++++-- doc/gawktexi.in | 95 ++++-- 4 files changed, 649 insertions(+), 517 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 194cf695..beb0413c 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2014-05-07 Arnold D. Robbins + + * gawktexi.in: Docbook edits for preface and parts. + Document AWKBUFSIZE. + 2014-05-05 Arnold D. Robbins * gawktexi.in: Editing progress. Through Chapter 9. diff --git a/doc/gawk.info b/doc/gawk.info index 706dace1..9bcd7e0c 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -2875,9 +2875,18 @@ used by regular users. the `gawk' developers for testing and tuning. They are subject to change. The variables are: +`AWKBUFSIZE' + This variable only affects `gawk' on POSIX-compliant systems. + With a value of `exact', `gawk' uses the size of each input file + as the size of the memory buffer to allocate for I/O. Otherwise, + the value should be a number, and `gawk' uses that number as the + size of the buffer to allocate. (When this variable is not set, + `gawk' uses the smaller of the file's size and the "default" + blocksize, which is usually the file systems I/O blocksize.) + `AWK_HASH' - If this variable exists with a value of `gst', `gawk' will switch - to using the hash function from GNU Smalltalk for managing arrays. + If this variable exists with a value of `gst', `gawk' switches to + using the hash function from GNU Smalltalk for managing arrays. This function may be marginally faster than the standard function. `AWKREADFUNC' @@ -33243,484 +33252,484 @@ Ref: AWKPATH Variable-Footnote-1133823 Ref: AWKPATH Variable-Footnote-2133868 Node: AWKLIBPATH Variable134128 Node: Other Environment Variables134887 -Node: Exit Status138052 -Node: Include Files138727 -Node: Loading Shared Libraries142305 -Node: Obsolete143688 -Node: Undocumented144385 -Node: Regexp144627 -Node: Regexp Usage146016 -Node: Escape Sequences148049 -Node: Regexp Operators153716 -Ref: Regexp Operators-Footnote-1161196 -Ref: Regexp Operators-Footnote-2161343 -Node: Bracket Expressions161441 -Ref: table-char-classes163331 -Node: GNU Regexp Operators165854 -Node: Case-sensitivity169577 -Ref: Case-sensitivity-Footnote-1172469 -Ref: Case-sensitivity-Footnote-2172704 -Node: Leftmost Longest172812 -Node: Computed Regexps174013 -Node: Reading Files177362 -Node: Records179364 -Node: awk split records180099 -Node: gawk split records184957 -Ref: gawk split records-Footnote-1189478 -Node: Fields189515 -Ref: Fields-Footnote-1192479 -Node: Nonconstant Fields192565 -Ref: Nonconstant Fields-Footnote-1194795 -Node: Changing Fields194997 -Node: Field Separators200951 -Node: Default Field Splitting203653 -Node: Regexp Field Splitting204770 -Node: Single Character Fields208111 -Node: Command Line Field Separator209170 -Node: Full Line Fields212512 -Ref: Full Line Fields-Footnote-1213020 -Node: Field Splitting Summary213066 -Ref: Field Splitting Summary-Footnote-1216165 -Node: Constant Size216266 -Node: Splitting By Content220873 -Ref: Splitting By Content-Footnote-1224623 -Node: Multiple Line224663 -Ref: Multiple Line-Footnote-1230519 -Node: Getline230698 -Node: Plain Getline232914 -Node: Getline/Variable235009 -Node: Getline/File236156 -Node: Getline/Variable/File237540 -Ref: Getline/Variable/File-Footnote-1239139 -Node: Getline/Pipe239226 -Node: Getline/Variable/Pipe241925 -Node: Getline/Coprocess243032 -Node: Getline/Variable/Coprocess244284 -Node: Getline Notes245021 -Node: Getline Summary247825 -Ref: table-getline-variants248233 -Node: Read Timeout249145 -Ref: Read Timeout-Footnote-1252972 -Node: Command line directories253030 -Node: Printing253912 -Node: Print255543 -Node: Print Examples256884 -Node: Output Separators259663 -Node: OFMT261679 -Node: Printf263037 -Node: Basic Printf263943 -Node: Control Letters265482 -Node: Format Modifiers269336 -Node: Printf Examples275363 -Node: Redirection278070 -Node: Special Files285042 -Node: Special FD285575 -Ref: Special FD-Footnote-1289199 -Node: Special Network289273 -Node: Special Caveats290123 -Node: Close Files And Pipes290919 -Ref: Close Files And Pipes-Footnote-1298057 -Ref: Close Files And Pipes-Footnote-2298205 -Node: Expressions298355 -Node: Values299487 -Node: Constants300163 -Node: Scalar Constants300843 -Ref: Scalar Constants-Footnote-1301702 -Node: Nondecimal-numbers301952 -Node: Regexp Constants304952 -Node: Using Constant Regexps305427 -Node: Variables308497 -Node: Using Variables309152 -Node: Assignment Options310876 -Node: Conversion312751 -Ref: table-locale-affects318187 -Ref: Conversion-Footnote-1318811 -Node: All Operators318920 -Node: Arithmetic Ops319550 -Node: Concatenation322055 -Ref: Concatenation-Footnote-1324851 -Node: Assignment Ops324971 -Ref: table-assign-ops329954 -Node: Increment Ops331271 -Node: Truth Values and Conditions334709 -Node: Truth Values335792 -Node: Typing and Comparison336841 -Node: Variable Typing337634 -Ref: Variable Typing-Footnote-1341534 -Node: Comparison Operators341656 -Ref: table-relational-ops342066 -Node: POSIX String Comparison345614 -Ref: POSIX String Comparison-Footnote-1346698 -Node: Boolean Ops346836 -Ref: Boolean Ops-Footnote-1350906 -Node: Conditional Exp350997 -Node: Function Calls352724 -Node: Precedence356482 -Node: Locales360151 -Node: Patterns and Actions361754 -Node: Pattern Overview362808 -Node: Regexp Patterns364485 -Node: Expression Patterns365028 -Node: Ranges368809 -Node: BEGIN/END371915 -Node: Using BEGIN/END372677 -Ref: Using BEGIN/END-Footnote-1375413 -Node: I/O And BEGIN/END375519 -Node: BEGINFILE/ENDFILE377804 -Node: Empty380740 -Node: Using Shell Variables381057 -Node: Action Overview383340 -Node: Statements385685 -Node: If Statement387539 -Node: While Statement389038 -Node: Do Statement391082 -Node: For Statement392238 -Node: Switch Statement395390 -Node: Break Statement397493 -Node: Continue Statement399548 -Node: Next Statement401341 -Node: Nextfile Statement403731 -Node: Exit Statement406386 -Node: Built-in Variables408788 -Node: User-modified409884 -Ref: User-modified-Footnote-1417569 -Node: Auto-set417631 -Ref: Auto-set-Footnote-1430196 -Ref: Auto-set-Footnote-2430401 -Node: ARGC and ARGV430457 -Node: Arrays434311 -Node: Array Basics435809 -Node: Array Intro436635 -Ref: figure-array-elements438608 -Node: Reference to Elements441015 -Node: Assigning Elements443288 -Node: Array Example443779 -Node: Scanning an Array445511 -Node: Controlling Scanning448526 -Ref: Controlling Scanning-Footnote-1453699 -Node: Delete454015 -Ref: Delete-Footnote-1456780 -Node: Numeric Array Subscripts456837 -Node: Uninitialized Subscripts459020 -Node: Multidimensional460645 -Node: Multiscanning463738 -Node: Arrays of Arrays465327 -Node: Functions469967 -Node: Built-in470786 -Node: Calling Built-in471864 -Node: Numeric Functions473852 -Ref: Numeric Functions-Footnote-1477686 -Ref: Numeric Functions-Footnote-2478043 -Ref: Numeric Functions-Footnote-3478091 -Node: String Functions478360 -Ref: String Functions-Footnote-1501371 -Ref: String Functions-Footnote-2501500 -Ref: String Functions-Footnote-3501748 -Node: Gory Details501835 -Ref: table-sub-escapes503504 -Ref: table-sub-posix-92504858 -Ref: table-sub-proposed506209 -Ref: table-posix-sub507563 -Ref: table-gensub-escapes509108 -Ref: Gory Details-Footnote-1510284 -Ref: Gory Details-Footnote-2510335 -Node: I/O Functions510486 -Ref: I/O Functions-Footnote-1517609 -Node: Time Functions517756 -Ref: Time Functions-Footnote-1528220 -Ref: Time Functions-Footnote-2528288 -Ref: Time Functions-Footnote-3528446 -Ref: Time Functions-Footnote-4528557 -Ref: Time Functions-Footnote-5528669 -Ref: Time Functions-Footnote-6528896 -Node: Bitwise Functions529162 -Ref: table-bitwise-ops529724 -Ref: Bitwise Functions-Footnote-1533969 -Node: Type Functions534153 -Node: I18N Functions535295 -Node: User-defined536940 -Node: Definition Syntax537744 -Ref: Definition Syntax-Footnote-1542659 -Node: Function Example542728 -Ref: Function Example-Footnote-1545372 -Node: Function Caveats545394 -Node: Calling A Function545912 -Node: Variable Scope546867 -Node: Pass By Value/Reference549855 -Node: Return Statement553363 -Node: Dynamic Typing556345 -Node: Indirect Calls557274 -Node: Library Functions566961 -Ref: Library Functions-Footnote-1570474 -Ref: Library Functions-Footnote-2570617 -Node: Library Names570788 -Ref: Library Names-Footnote-1574261 -Ref: Library Names-Footnote-2574481 -Node: General Functions574567 -Node: Strtonum Function575595 -Node: Assert Function578525 -Node: Round Function581851 -Node: Cliff Random Function583392 -Node: Ordinal Functions584408 -Ref: Ordinal Functions-Footnote-1587485 -Ref: Ordinal Functions-Footnote-2587737 -Node: Join Function587948 -Ref: Join Function-Footnote-1589719 -Node: Getlocaltime Function589919 -Node: Readfile Function593660 -Node: Data File Management595499 -Node: Filetrans Function596131 -Node: Rewind Function600200 -Node: File Checking601587 -Node: Empty Files602681 -Node: Ignoring Assigns604911 -Node: Getopt Function606465 -Ref: Getopt Function-Footnote-1617768 -Node: Passwd Functions617971 -Ref: Passwd Functions-Footnote-1626949 -Node: Group Functions627037 -Node: Walking Arrays635121 -Node: Sample Programs637257 -Node: Running Examples637931 -Node: Clones638659 -Node: Cut Program639883 -Node: Egrep Program649734 -Ref: Egrep Program-Footnote-1657507 -Node: Id Program657617 -Node: Split Program661266 -Ref: Split Program-Footnote-1664785 -Node: Tee Program664913 -Node: Uniq Program667716 -Node: Wc Program675145 -Ref: Wc Program-Footnote-1679411 -Ref: Wc Program-Footnote-2679611 -Node: Miscellaneous Programs679703 -Node: Dupword Program680891 -Node: Alarm Program682922 -Node: Translate Program687729 -Ref: Translate Program-Footnote-1692116 -Ref: Translate Program-Footnote-2692364 -Node: Labels Program692498 -Ref: Labels Program-Footnote-1695869 -Node: Word Sorting695953 -Node: History Sorting699837 -Node: Extract Program701676 -Ref: Extract Program-Footnote-1709179 -Node: Simple Sed709307 -Node: Igawk Program712369 -Ref: Igawk Program-Footnote-1727540 -Ref: Igawk Program-Footnote-2727741 -Node: Anagram Program727879 -Node: Signature Program730947 -Node: Advanced Features732047 -Node: Nondecimal Data733933 -Node: Array Sorting735516 -Node: Controlling Array Traversal736213 -Node: Array Sorting Functions744497 -Ref: Array Sorting Functions-Footnote-1748366 -Node: Two-way I/O748560 -Ref: Two-way I/O-Footnote-1753992 -Node: TCP/IP Networking754074 -Node: Profiling756918 -Node: Internationalization764421 -Node: I18N and L10N765846 -Node: Explaining gettext766532 -Ref: Explaining gettext-Footnote-1771600 -Ref: Explaining gettext-Footnote-2771784 -Node: Programmer i18n771949 -Node: Translator i18n776176 -Node: String Extraction776970 -Ref: String Extraction-Footnote-1777931 -Node: Printf Ordering778017 -Ref: Printf Ordering-Footnote-1780799 -Node: I18N Portability780863 -Ref: I18N Portability-Footnote-1783312 -Node: I18N Example783375 -Ref: I18N Example-Footnote-1786013 -Node: Gawk I18N786085 -Node: Debugger786706 -Node: Debugging787677 -Node: Debugging Concepts788110 -Node: Debugging Terms789966 -Node: Awk Debugging792563 -Node: Sample Debugging Session793455 -Node: Debugger Invocation793975 -Node: Finding The Bug795308 -Node: List of Debugger Commands801795 -Node: Breakpoint Control803129 -Node: Debugger Execution Control806793 -Node: Viewing And Changing Data810153 -Node: Execution Stack813509 -Node: Debugger Info814976 -Node: Miscellaneous Debugger Commands818970 -Node: Readline Support824148 -Node: Limitations824979 -Node: Arbitrary Precision Arithmetic827231 -Ref: Arbitrary Precision Arithmetic-Footnote-1828880 -Node: General Arithmetic829028 -Node: Floating Point Issues830748 -Node: String Conversion Precision831629 -Ref: String Conversion Precision-Footnote-1833334 -Node: Unexpected Results833443 -Node: POSIX Floating Point Problems835596 -Ref: POSIX Floating Point Problems-Footnote-1839421 -Node: Integer Programming839459 -Node: Floating-point Programming841198 -Ref: Floating-point Programming-Footnote-1847529 -Ref: Floating-point Programming-Footnote-2847799 -Node: Floating-point Representation848063 -Node: Floating-point Context849228 -Ref: table-ieee-formats850067 -Node: Rounding Mode851451 -Ref: table-rounding-modes851930 -Ref: Rounding Mode-Footnote-1854945 -Node: Gawk and MPFR855124 -Node: Arbitrary Precision Floats856533 -Ref: Arbitrary Precision Floats-Footnote-1858976 -Node: Setting Precision859292 -Ref: table-predefined-precision-strings859978 -Node: Setting Rounding Mode862123 -Ref: table-gawk-rounding-modes862527 -Node: Floating-point Constants863714 -Node: Changing Precision865143 -Ref: Changing Precision-Footnote-1866540 -Node: Exact Arithmetic866714 -Node: Arbitrary Precision Integers869852 -Ref: Arbitrary Precision Integers-Footnote-1872867 -Node: Dynamic Extensions873014 -Node: Extension Intro874472 -Node: Plugin License875737 -Node: Extension Mechanism Outline876422 -Ref: load-extension876839 -Ref: load-new-function878317 -Ref: call-new-function879312 -Node: Extension API Description881327 -Node: Extension API Functions Introduction882614 -Node: General Data Types887541 -Ref: General Data Types-Footnote-1893236 -Node: Requesting Values893535 -Ref: table-value-types-returned894272 -Node: Memory Allocation Functions895226 -Ref: Memory Allocation Functions-Footnote-1897972 -Node: Constructor Functions898068 -Node: Registration Functions899826 -Node: Extension Functions900511 -Node: Exit Callback Functions902813 -Node: Extension Version String904062 -Node: Input Parsers904712 -Node: Output Wrappers914469 -Node: Two-way processors918979 -Node: Printing Messages921187 -Ref: Printing Messages-Footnote-1922264 -Node: Updating `ERRNO'922416 -Node: Accessing Parameters923155 -Node: Symbol Table Access924385 -Node: Symbol table by name924899 -Node: Symbol table by cookie926875 -Ref: Symbol table by cookie-Footnote-1931007 -Node: Cached values931070 -Ref: Cached values-Footnote-1934560 -Node: Array Manipulation934651 -Ref: Array Manipulation-Footnote-1935749 -Node: Array Data Types935788 -Ref: Array Data Types-Footnote-1938491 -Node: Array Functions938583 -Node: Flattening Arrays942419 -Node: Creating Arrays949271 -Node: Extension API Variables953996 -Node: Extension Versioning954632 -Node: Extension API Informational Variables956533 -Node: Extension API Boilerplate957619 -Node: Finding Extensions961423 -Node: Extension Example961983 -Node: Internal File Description962713 -Node: Internal File Ops966804 -Ref: Internal File Ops-Footnote-1978313 -Node: Using Internal File Ops978453 -Ref: Using Internal File Ops-Footnote-1980800 -Node: Extension Samples981066 -Node: Extension Sample File Functions982590 -Node: Extension Sample Fnmatch991077 -Node: Extension Sample Fork992846 -Node: Extension Sample Inplace994059 -Node: Extension Sample Ord995837 -Node: Extension Sample Readdir996673 -Node: Extension Sample Revout998205 -Node: Extension Sample Rev2way998798 -Node: Extension Sample Read write array999488 -Node: Extension Sample Readfile1001371 -Node: Extension Sample API Tests1002471 -Node: Extension Sample Time1002996 -Node: gawkextlib1004360 -Node: Language History1007141 -Node: V7/SVR3.11008734 -Node: SVR41011054 -Node: POSIX1012496 -Node: BTL1013882 -Node: POSIX/GNU1014616 -Node: Feature History1020215 -Node: Common Extensions1033191 -Node: Ranges and Locales1034503 -Ref: Ranges and Locales-Footnote-11039120 -Ref: Ranges and Locales-Footnote-21039147 -Ref: Ranges and Locales-Footnote-31039381 -Node: Contributors1039602 -Node: Installation1044983 -Node: Gawk Distribution1045877 -Node: Getting1046361 -Node: Extracting1047187 -Node: Distribution contents1048879 -Node: Unix Installation1054600 -Node: Quick Installation1055217 -Node: Additional Configuration Options1057663 -Node: Configuration Philosophy1059399 -Node: Non-Unix Installation1061753 -Node: PC Installation1062211 -Node: PC Binary Installation1063510 -Node: PC Compiling1065358 -Node: PC Testing1068302 -Node: PC Using1069478 -Node: Cygwin1073646 -Node: MSYS1074455 -Node: VMS Installation1074969 -Node: VMS Compilation1075765 -Ref: VMS Compilation-Footnote-11077017 -Node: VMS Dynamic Extensions1077075 -Node: VMS Installation Details1078448 -Node: VMS Running1080699 -Node: VMS GNV1083533 -Node: VMS Old Gawk1084256 -Node: Bugs1084726 -Node: Other Versions1088644 -Node: Notes1094728 -Node: Compatibility Mode1095528 -Node: Additions1096311 -Node: Accessing The Source1097238 -Node: Adding Code1098678 -Node: New Ports1104723 -Node: Derived Files1108858 -Ref: Derived Files-Footnote-11114179 -Ref: Derived Files-Footnote-21114213 -Ref: Derived Files-Footnote-31114813 -Node: Future Extensions1114911 -Node: Implementation Limitations1115494 -Node: Extension Design1116742 -Node: Old Extension Problems1117896 -Ref: Old Extension Problems-Footnote-11119404 -Node: Extension New Mechanism Goals1119461 -Ref: Extension New Mechanism Goals-Footnote-11122826 -Node: Extension Other Design Decisions1123012 -Node: Extension Future Growth1125118 -Node: Old Extension Mechanism1125954 -Node: Basic Concepts1127694 -Node: Basic High Level1128375 -Ref: figure-general-flow1128647 -Ref: figure-process-flow1129246 -Ref: Basic High Level-Footnote-11132475 -Node: Basic Data Typing1132660 -Node: Glossary1136015 -Node: Copying1161246 -Node: GNU Free Documentation License1198802 -Node: Index1223938 +Node: Exit Status138542 +Node: Include Files139217 +Node: Loading Shared Libraries142795 +Node: Obsolete144178 +Node: Undocumented144875 +Node: Regexp145117 +Node: Regexp Usage146506 +Node: Escape Sequences148539 +Node: Regexp Operators154206 +Ref: Regexp Operators-Footnote-1161686 +Ref: Regexp Operators-Footnote-2161833 +Node: Bracket Expressions161931 +Ref: table-char-classes163821 +Node: GNU Regexp Operators166344 +Node: Case-sensitivity170067 +Ref: Case-sensitivity-Footnote-1172959 +Ref: Case-sensitivity-Footnote-2173194 +Node: Leftmost Longest173302 +Node: Computed Regexps174503 +Node: Reading Files177852 +Node: Records179854 +Node: awk split records180589 +Node: gawk split records185447 +Ref: gawk split records-Footnote-1189968 +Node: Fields190005 +Ref: Fields-Footnote-1192969 +Node: Nonconstant Fields193055 +Ref: Nonconstant Fields-Footnote-1195285 +Node: Changing Fields195487 +Node: Field Separators201441 +Node: Default Field Splitting204143 +Node: Regexp Field Splitting205260 +Node: Single Character Fields208601 +Node: Command Line Field Separator209660 +Node: Full Line Fields213002 +Ref: Full Line Fields-Footnote-1213510 +Node: Field Splitting Summary213556 +Ref: Field Splitting Summary-Footnote-1216655 +Node: Constant Size216756 +Node: Splitting By Content221363 +Ref: Splitting By Content-Footnote-1225113 +Node: Multiple Line225153 +Ref: Multiple Line-Footnote-1231009 +Node: Getline231188 +Node: Plain Getline233404 +Node: Getline/Variable235499 +Node: Getline/File236646 +Node: Getline/Variable/File238030 +Ref: Getline/Variable/File-Footnote-1239629 +Node: Getline/Pipe239716 +Node: Getline/Variable/Pipe242415 +Node: Getline/Coprocess243522 +Node: Getline/Variable/Coprocess244774 +Node: Getline Notes245511 +Node: Getline Summary248315 +Ref: table-getline-variants248723 +Node: Read Timeout249635 +Ref: Read Timeout-Footnote-1253462 +Node: Command line directories253520 +Node: Printing254402 +Node: Print256033 +Node: Print Examples257374 +Node: Output Separators260153 +Node: OFMT262169 +Node: Printf263527 +Node: Basic Printf264433 +Node: Control Letters265972 +Node: Format Modifiers269826 +Node: Printf Examples275853 +Node: Redirection278560 +Node: Special Files285532 +Node: Special FD286065 +Ref: Special FD-Footnote-1289689 +Node: Special Network289763 +Node: Special Caveats290613 +Node: Close Files And Pipes291409 +Ref: Close Files And Pipes-Footnote-1298547 +Ref: Close Files And Pipes-Footnote-2298695 +Node: Expressions298845 +Node: Values299977 +Node: Constants300653 +Node: Scalar Constants301333 +Ref: Scalar Constants-Footnote-1302192 +Node: Nondecimal-numbers302442 +Node: Regexp Constants305442 +Node: Using Constant Regexps305917 +Node: Variables308987 +Node: Using Variables309642 +Node: Assignment Options311366 +Node: Conversion313241 +Ref: table-locale-affects318677 +Ref: Conversion-Footnote-1319301 +Node: All Operators319410 +Node: Arithmetic Ops320040 +Node: Concatenation322545 +Ref: Concatenation-Footnote-1325341 +Node: Assignment Ops325461 +Ref: table-assign-ops330444 +Node: Increment Ops331761 +Node: Truth Values and Conditions335199 +Node: Truth Values336282 +Node: Typing and Comparison337331 +Node: Variable Typing338124 +Ref: Variable Typing-Footnote-1342024 +Node: Comparison Operators342146 +Ref: table-relational-ops342556 +Node: POSIX String Comparison346104 +Ref: POSIX String Comparison-Footnote-1347188 +Node: Boolean Ops347326 +Ref: Boolean Ops-Footnote-1351396 +Node: Conditional Exp351487 +Node: Function Calls353214 +Node: Precedence356972 +Node: Locales360641 +Node: Patterns and Actions362244 +Node: Pattern Overview363298 +Node: Regexp Patterns364975 +Node: Expression Patterns365518 +Node: Ranges369299 +Node: BEGIN/END372405 +Node: Using BEGIN/END373167 +Ref: Using BEGIN/END-Footnote-1375903 +Node: I/O And BEGIN/END376009 +Node: BEGINFILE/ENDFILE378294 +Node: Empty381230 +Node: Using Shell Variables381547 +Node: Action Overview383830 +Node: Statements386175 +Node: If Statement388029 +Node: While Statement389528 +Node: Do Statement391572 +Node: For Statement392728 +Node: Switch Statement395880 +Node: Break Statement397983 +Node: Continue Statement400038 +Node: Next Statement401831 +Node: Nextfile Statement404221 +Node: Exit Statement406876 +Node: Built-in Variables409278 +Node: User-modified410374 +Ref: User-modified-Footnote-1418059 +Node: Auto-set418121 +Ref: Auto-set-Footnote-1430686 +Ref: Auto-set-Footnote-2430891 +Node: ARGC and ARGV430947 +Node: Arrays434801 +Node: Array Basics436299 +Node: Array Intro437125 +Ref: figure-array-elements439098 +Node: Reference to Elements441505 +Node: Assigning Elements443778 +Node: Array Example444269 +Node: Scanning an Array446001 +Node: Controlling Scanning449016 +Ref: Controlling Scanning-Footnote-1454189 +Node: Delete454505 +Ref: Delete-Footnote-1457270 +Node: Numeric Array Subscripts457327 +Node: Uninitialized Subscripts459510 +Node: Multidimensional461135 +Node: Multiscanning464228 +Node: Arrays of Arrays465817 +Node: Functions470457 +Node: Built-in471276 +Node: Calling Built-in472354 +Node: Numeric Functions474342 +Ref: Numeric Functions-Footnote-1478176 +Ref: Numeric Functions-Footnote-2478533 +Ref: Numeric Functions-Footnote-3478581 +Node: String Functions478850 +Ref: String Functions-Footnote-1501861 +Ref: String Functions-Footnote-2501990 +Ref: String Functions-Footnote-3502238 +Node: Gory Details502325 +Ref: table-sub-escapes503994 +Ref: table-sub-posix-92505348 +Ref: table-sub-proposed506699 +Ref: table-posix-sub508053 +Ref: table-gensub-escapes509598 +Ref: Gory Details-Footnote-1510774 +Ref: Gory Details-Footnote-2510825 +Node: I/O Functions510976 +Ref: I/O Functions-Footnote-1518099 +Node: Time Functions518246 +Ref: Time Functions-Footnote-1528710 +Ref: Time Functions-Footnote-2528778 +Ref: Time Functions-Footnote-3528936 +Ref: Time Functions-Footnote-4529047 +Ref: Time Functions-Footnote-5529159 +Ref: Time Functions-Footnote-6529386 +Node: Bitwise Functions529652 +Ref: table-bitwise-ops530214 +Ref: Bitwise Functions-Footnote-1534459 +Node: Type Functions534643 +Node: I18N Functions535785 +Node: User-defined537430 +Node: Definition Syntax538234 +Ref: Definition Syntax-Footnote-1543149 +Node: Function Example543218 +Ref: Function Example-Footnote-1545862 +Node: Function Caveats545884 +Node: Calling A Function546402 +Node: Variable Scope547357 +Node: Pass By Value/Reference550345 +Node: Return Statement553853 +Node: Dynamic Typing556835 +Node: Indirect Calls557764 +Node: Library Functions567451 +Ref: Library Functions-Footnote-1570964 +Ref: Library Functions-Footnote-2571107 +Node: Library Names571278 +Ref: Library Names-Footnote-1574751 +Ref: Library Names-Footnote-2574971 +Node: General Functions575057 +Node: Strtonum Function576085 +Node: Assert Function579015 +Node: Round Function582341 +Node: Cliff Random Function583882 +Node: Ordinal Functions584898 +Ref: Ordinal Functions-Footnote-1587975 +Ref: Ordinal Functions-Footnote-2588227 +Node: Join Function588438 +Ref: Join Function-Footnote-1590209 +Node: Getlocaltime Function590409 +Node: Readfile Function594150 +Node: Data File Management595989 +Node: Filetrans Function596621 +Node: Rewind Function600690 +Node: File Checking602077 +Node: Empty Files603171 +Node: Ignoring Assigns605401 +Node: Getopt Function606955 +Ref: Getopt Function-Footnote-1618258 +Node: Passwd Functions618461 +Ref: Passwd Functions-Footnote-1627439 +Node: Group Functions627527 +Node: Walking Arrays635611 +Node: Sample Programs637747 +Node: Running Examples638421 +Node: Clones639149 +Node: Cut Program640373 +Node: Egrep Program650224 +Ref: Egrep Program-Footnote-1657997 +Node: Id Program658107 +Node: Split Program661756 +Ref: Split Program-Footnote-1665275 +Node: Tee Program665403 +Node: Uniq Program668206 +Node: Wc Program675635 +Ref: Wc Program-Footnote-1679901 +Ref: Wc Program-Footnote-2680101 +Node: Miscellaneous Programs680193 +Node: Dupword Program681381 +Node: Alarm Program683412 +Node: Translate Program688219 +Ref: Translate Program-Footnote-1692606 +Ref: Translate Program-Footnote-2692854 +Node: Labels Program692988 +Ref: Labels Program-Footnote-1696359 +Node: Word Sorting696443 +Node: History Sorting700327 +Node: Extract Program702166 +Ref: Extract Program-Footnote-1709669 +Node: Simple Sed709797 +Node: Igawk Program712859 +Ref: Igawk Program-Footnote-1728030 +Ref: Igawk Program-Footnote-2728231 +Node: Anagram Program728369 +Node: Signature Program731437 +Node: Advanced Features732537 +Node: Nondecimal Data734423 +Node: Array Sorting736006 +Node: Controlling Array Traversal736703 +Node: Array Sorting Functions744987 +Ref: Array Sorting Functions-Footnote-1748856 +Node: Two-way I/O749050 +Ref: Two-way I/O-Footnote-1754482 +Node: TCP/IP Networking754564 +Node: Profiling757408 +Node: Internationalization764911 +Node: I18N and L10N766336 +Node: Explaining gettext767022 +Ref: Explaining gettext-Footnote-1772090 +Ref: Explaining gettext-Footnote-2772274 +Node: Programmer i18n772439 +Node: Translator i18n776666 +Node: String Extraction777460 +Ref: String Extraction-Footnote-1778421 +Node: Printf Ordering778507 +Ref: Printf Ordering-Footnote-1781289 +Node: I18N Portability781353 +Ref: I18N Portability-Footnote-1783802 +Node: I18N Example783865 +Ref: I18N Example-Footnote-1786503 +Node: Gawk I18N786575 +Node: Debugger787196 +Node: Debugging788167 +Node: Debugging Concepts788600 +Node: Debugging Terms790456 +Node: Awk Debugging793053 +Node: Sample Debugging Session793945 +Node: Debugger Invocation794465 +Node: Finding The Bug795798 +Node: List of Debugger Commands802285 +Node: Breakpoint Control803619 +Node: Debugger Execution Control807283 +Node: Viewing And Changing Data810643 +Node: Execution Stack813999 +Node: Debugger Info815466 +Node: Miscellaneous Debugger Commands819460 +Node: Readline Support824638 +Node: Limitations825469 +Node: Arbitrary Precision Arithmetic827721 +Ref: Arbitrary Precision Arithmetic-Footnote-1829370 +Node: General Arithmetic829518 +Node: Floating Point Issues831238 +Node: String Conversion Precision832119 +Ref: String Conversion Precision-Footnote-1833824 +Node: Unexpected Results833933 +Node: POSIX Floating Point Problems836086 +Ref: POSIX Floating Point Problems-Footnote-1839911 +Node: Integer Programming839949 +Node: Floating-point Programming841688 +Ref: Floating-point Programming-Footnote-1848019 +Ref: Floating-point Programming-Footnote-2848289 +Node: Floating-point Representation848553 +Node: Floating-point Context849718 +Ref: table-ieee-formats850557 +Node: Rounding Mode851941 +Ref: table-rounding-modes852420 +Ref: Rounding Mode-Footnote-1855435 +Node: Gawk and MPFR855614 +Node: Arbitrary Precision Floats857023 +Ref: Arbitrary Precision Floats-Footnote-1859466 +Node: Setting Precision859782 +Ref: table-predefined-precision-strings860468 +Node: Setting Rounding Mode862613 +Ref: table-gawk-rounding-modes863017 +Node: Floating-point Constants864204 +Node: Changing Precision865633 +Ref: Changing Precision-Footnote-1867030 +Node: Exact Arithmetic867204 +Node: Arbitrary Precision Integers870342 +Ref: Arbitrary Precision Integers-Footnote-1873357 +Node: Dynamic Extensions873504 +Node: Extension Intro874962 +Node: Plugin License876227 +Node: Extension Mechanism Outline876912 +Ref: load-extension877329 +Ref: load-new-function878807 +Ref: call-new-function879802 +Node: Extension API Description881817 +Node: Extension API Functions Introduction883104 +Node: General Data Types888031 +Ref: General Data Types-Footnote-1893726 +Node: Requesting Values894025 +Ref: table-value-types-returned894762 +Node: Memory Allocation Functions895716 +Ref: Memory Allocation Functions-Footnote-1898462 +Node: Constructor Functions898558 +Node: Registration Functions900316 +Node: Extension Functions901001 +Node: Exit Callback Functions903303 +Node: Extension Version String904552 +Node: Input Parsers905202 +Node: Output Wrappers914959 +Node: Two-way processors919469 +Node: Printing Messages921677 +Ref: Printing Messages-Footnote-1922754 +Node: Updating `ERRNO'922906 +Node: Accessing Parameters923645 +Node: Symbol Table Access924875 +Node: Symbol table by name925389 +Node: Symbol table by cookie927365 +Ref: Symbol table by cookie-Footnote-1931497 +Node: Cached values931560 +Ref: Cached values-Footnote-1935050 +Node: Array Manipulation935141 +Ref: Array Manipulation-Footnote-1936239 +Node: Array Data Types936278 +Ref: Array Data Types-Footnote-1938981 +Node: Array Functions939073 +Node: Flattening Arrays942909 +Node: Creating Arrays949761 +Node: Extension API Variables954486 +Node: Extension Versioning955122 +Node: Extension API Informational Variables957023 +Node: Extension API Boilerplate958109 +Node: Finding Extensions961913 +Node: Extension Example962473 +Node: Internal File Description963203 +Node: Internal File Ops967294 +Ref: Internal File Ops-Footnote-1978803 +Node: Using Internal File Ops978943 +Ref: Using Internal File Ops-Footnote-1981290 +Node: Extension Samples981556 +Node: Extension Sample File Functions983080 +Node: Extension Sample Fnmatch991567 +Node: Extension Sample Fork993336 +Node: Extension Sample Inplace994549 +Node: Extension Sample Ord996327 +Node: Extension Sample Readdir997163 +Node: Extension Sample Revout998695 +Node: Extension Sample Rev2way999288 +Node: Extension Sample Read write array999978 +Node: Extension Sample Readfile1001861 +Node: Extension Sample API Tests1002961 +Node: Extension Sample Time1003486 +Node: gawkextlib1004850 +Node: Language History1007631 +Node: V7/SVR3.11009224 +Node: SVR41011544 +Node: POSIX1012986 +Node: BTL1014372 +Node: POSIX/GNU1015106 +Node: Feature History1020705 +Node: Common Extensions1033681 +Node: Ranges and Locales1034993 +Ref: Ranges and Locales-Footnote-11039610 +Ref: Ranges and Locales-Footnote-21039637 +Ref: Ranges and Locales-Footnote-31039871 +Node: Contributors1040092 +Node: Installation1045473 +Node: Gawk Distribution1046367 +Node: Getting1046851 +Node: Extracting1047677 +Node: Distribution contents1049369 +Node: Unix Installation1055090 +Node: Quick Installation1055707 +Node: Additional Configuration Options1058153 +Node: Configuration Philosophy1059889 +Node: Non-Unix Installation1062243 +Node: PC Installation1062701 +Node: PC Binary Installation1064000 +Node: PC Compiling1065848 +Node: PC Testing1068792 +Node: PC Using1069968 +Node: Cygwin1074136 +Node: MSYS1074945 +Node: VMS Installation1075459 +Node: VMS Compilation1076255 +Ref: VMS Compilation-Footnote-11077507 +Node: VMS Dynamic Extensions1077565 +Node: VMS Installation Details1078938 +Node: VMS Running1081189 +Node: VMS GNV1084023 +Node: VMS Old Gawk1084746 +Node: Bugs1085216 +Node: Other Versions1089134 +Node: Notes1095218 +Node: Compatibility Mode1096018 +Node: Additions1096801 +Node: Accessing The Source1097728 +Node: Adding Code1099168 +Node: New Ports1105213 +Node: Derived Files1109348 +Ref: Derived Files-Footnote-11114669 +Ref: Derived Files-Footnote-21114703 +Ref: Derived Files-Footnote-31115303 +Node: Future Extensions1115401 +Node: Implementation Limitations1115984 +Node: Extension Design1117232 +Node: Old Extension Problems1118386 +Ref: Old Extension Problems-Footnote-11119894 +Node: Extension New Mechanism Goals1119951 +Ref: Extension New Mechanism Goals-Footnote-11123316 +Node: Extension Other Design Decisions1123502 +Node: Extension Future Growth1125608 +Node: Old Extension Mechanism1126444 +Node: Basic Concepts1128184 +Node: Basic High Level1128865 +Ref: figure-general-flow1129137 +Ref: figure-process-flow1129736 +Ref: Basic High Level-Footnote-11132965 +Node: Basic Data Typing1133150 +Node: Glossary1136505 +Node: Copying1161736 +Node: GNU Free Documentation License1199292 +Node: Index1224428  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 3a81e85b..c69be641 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -105,6 +105,21 @@ @set COMMONEXT (c.e.) @end ifplaintext +@ifdocbook +@c empty on purpose +@set PART1 +@set PART2 +@set PART3 +@set PART4 +@end ifdocbook + +@ifnotdocbook +@set PART1 Part I:@* +@set PART2 Part II:@* +@set PART3 Part III:@* +@set PART4 Part IV:@* +@end ifnotdocbook + @c some special symbols @iftex @set LEQ @math{@leq} @@ -963,6 +978,20 @@ for enrichening our lives in innumerable ways. @node Foreword @unnumbered Foreword +@c This bit is post-processed by a script which turns the chapter +@c tag into a preface tag, and moves this stuff to before the title. +@c Bleah. +@docbook + + + Michael + Brennan + Author of mawk + + March, 2001 + +@end docbook + Arnold Robbins and I are good friends. We were introduced @c 11 years ago in 1990 @@ -1087,12 +1116,14 @@ Arnold has distilled over a decade of experience writing and using AWK programs, and developing @command{gawk}, into this book. If you use AWK or want to learn how, then read this book. +@ifnotdocbook @cindex Brennan, Michael @display Michael Brennan Author of @command{mawk} March, 2001 @end display +@end ifnotdocbook @node Preface @unnumbered Preface @@ -1982,13 +2013,15 @@ Nof Ayalon @* ISRAEL @* May, 2014 -@iftex -@part Part I:@* The @command{awk} Language -@end iftex +@ifnotinfo +@part @value{PART1}The @command{awk} Language +@end ifnotinfo @ifdocbook -@part The @command{awk} Language +@docbook + +@end docbook Part I describes the @command{awk} language and @command{gawk} program in detail. It starts with the basics, and continues through all of the features of @command{awk}. Included also are many, but not all, @@ -2023,6 +2056,9 @@ following chapters: @item @ref{Functions}. @end itemize +@docbook + +@end docbook @end ifdocbook @node Getting Started @@ -4141,9 +4177,18 @@ for use by the @command{gawk} developers for testing and tuning. They are subject to change. The variables are: @table @env +@item AWKBUFSIZE +This variable only affects @command{gawk} on POSIX-compliant systems. +With a value of @samp{exact}, @command{gawk} uses the size of each input +file as the size of the memory buffer to allocate for I/O. Otherwise, +the value should be a number, and @command{gawk} uses that number as +the size of the buffer to allocate. (When this variable is not set, +@command{gawk} uses the smaller of the file's size and the ``default'' +blocksize, which is usually the file systems I/O blocksize.) + @item AWK_HASH If this variable exists with a value of @samp{gst}, @command{gawk} -will switch to using the hash function from GNU Smalltalk for +switches to using the hash function from GNU Smalltalk for managing arrays. This function may be marginally faster than the standard function. @@ -19424,13 +19469,15 @@ for (i = 1; i <= n; i++) @c ENDOFRANGE funcud -@iftex -@part Part II:@* Problem Solving With @command{awk} -@end iftex +@ifnotinfo +@part @value{PART2}Problem Solving With @command{awk} +@end ifnotinfo @ifdocbook -@part Problem Solving With @command{awk} +@docbook + +@end docbook 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: @@ -19442,6 +19489,9 @@ It contains the following chapters: @item @ref{Sample Programs}. @end itemize +@docbook + +@end docbook @end ifdocbook @node Library Functions @@ -25509,13 +25559,15 @@ BEGIN { } @end ignore -@iftex -@part Part III:@* Moving Beyond Standard @command{awk} With @command{gawk} -@end iftex +@ifnotinfo +@part @value{PART3}Moving Beyond Standard @command{awk} With @command{gawk} +@end ifnotinfo @ifdocbook -@part Moving Beyond Standard @command{awk} With @command{gawk} +@docbook + +@end docbook Part III focuses on features specific to @command{gawk}. It contains the following chapters: @@ -25535,6 +25587,9 @@ It contains the following chapters: @item @ref{Dynamic Extensions}. @end itemize +@docbook + +@end docbook @end ifdocbook @node Advanced Features @@ -33920,14 +33975,15 @@ If you write an extension that you wish to share with other @code{gawkextlib} project. See the project's web site for more information. -@iftex -@part Part IV:@* Appendices -@end iftex +@ifnotinfo +@part @value{PART4}Appendices +@end ifnotinfo @ifdocbook -@part Appendices - +@docbook + +@end docbook @ifclear FOR_PRINT Part IV contains the appendixes (including the two licenses that cover the @command{gawk} source code and this @value{DOCUMENT}, respectively) @@ -33962,6 +34018,9 @@ Part IV contains two appendixes: @ref{GNU Free Documentation License}. @end ifclear @end itemize +@docbook + +@end docbook @end ifdocbook @node Language History diff --git a/doc/gawktexi.in b/doc/gawktexi.in index ee781f12..6e1b9fba 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -100,6 +100,21 @@ @set COMMONEXT (c.e.) @end ifplaintext +@ifdocbook +@c empty on purpose +@set PART1 +@set PART2 +@set PART3 +@set PART4 +@end ifdocbook + +@ifnotdocbook +@set PART1 Part I:@* +@set PART2 Part II:@* +@set PART3 Part III:@* +@set PART4 Part IV:@* +@end ifnotdocbook + @c some special symbols @iftex @set LEQ @math{@leq} @@ -958,6 +973,20 @@ for enrichening our lives in innumerable ways. @node Foreword @unnumbered Foreword +@c This bit is post-processed by a script which turns the chapter +@c tag into a preface tag, and moves this stuff to before the title. +@c Bleah. +@docbook + + + Michael + Brennan + Author of mawk + + March, 2001 + +@end docbook + Arnold Robbins and I are good friends. We were introduced @c 11 years ago in 1990 @@ -1082,12 +1111,14 @@ Arnold has distilled over a decade of experience writing and using AWK programs, and developing @command{gawk}, into this book. If you use AWK or want to learn how, then read this book. +@ifnotdocbook @cindex Brennan, Michael @display Michael Brennan Author of @command{mawk} March, 2001 @end display +@end ifnotdocbook @node Preface @unnumbered Preface @@ -1949,13 +1980,15 @@ Nof Ayalon @* ISRAEL @* May, 2014 -@iftex -@part Part I:@* The @command{awk} Language -@end iftex +@ifnotinfo +@part @value{PART1}The @command{awk} Language +@end ifnotinfo @ifdocbook -@part The @command{awk} Language +@docbook + +@end docbook Part I describes the @command{awk} language and @command{gawk} program in detail. It starts with the basics, and continues through all of the features of @command{awk}. Included also are many, but not all, @@ -1990,6 +2023,9 @@ following chapters: @item @ref{Functions}. @end itemize +@docbook + +@end docbook @end ifdocbook @node Getting Started @@ -4069,9 +4105,18 @@ for use by the @command{gawk} developers for testing and tuning. They are subject to change. The variables are: @table @env +@item AWKBUFSIZE +This variable only affects @command{gawk} on POSIX-compliant systems. +With a value of @samp{exact}, @command{gawk} uses the size of each input +file as the size of the memory buffer to allocate for I/O. Otherwise, +the value should be a number, and @command{gawk} uses that number as +the size of the buffer to allocate. (When this variable is not set, +@command{gawk} uses the smaller of the file's size and the ``default'' +blocksize, which is usually the file systems I/O blocksize.) + @item AWK_HASH If this variable exists with a value of @samp{gst}, @command{gawk} -will switch to using the hash function from GNU Smalltalk for +switches to using the hash function from GNU Smalltalk for managing arrays. This function may be marginally faster than the standard function. @@ -18597,13 +18642,15 @@ for (i = 1; i <= n; i++) @c ENDOFRANGE funcud -@iftex -@part Part II:@* Problem Solving With @command{awk} -@end iftex +@ifnotinfo +@part @value{PART2}Problem Solving With @command{awk} +@end ifnotinfo @ifdocbook -@part Problem Solving With @command{awk} +@docbook + +@end docbook 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: @@ -18615,6 +18662,9 @@ It contains the following chapters: @item @ref{Sample Programs}. @end itemize +@docbook + +@end docbook @end ifdocbook @node Library Functions @@ -24653,13 +24703,15 @@ BEGIN { } @end ignore -@iftex -@part Part III:@* Moving Beyond Standard @command{awk} With @command{gawk} -@end iftex +@ifnotinfo +@part @value{PART3}Moving Beyond Standard @command{awk} With @command{gawk} +@end ifnotinfo @ifdocbook -@part Moving Beyond Standard @command{awk} With @command{gawk} +@docbook + +@end docbook Part III focuses on features specific to @command{gawk}. It contains the following chapters: @@ -24679,6 +24731,9 @@ It contains the following chapters: @item @ref{Dynamic Extensions}. @end itemize +@docbook + +@end docbook @end ifdocbook @node Advanced Features @@ -33064,14 +33119,15 @@ If you write an extension that you wish to share with other @code{gawkextlib} project. See the project's web site for more information. -@iftex -@part Part IV:@* Appendices -@end iftex +@ifnotinfo +@part @value{PART4}Appendices +@end ifnotinfo @ifdocbook -@part Appendices - +@docbook + +@end docbook @ifclear FOR_PRINT Part IV contains the appendixes (including the two licenses that cover the @command{gawk} source code and this @value{DOCUMENT}, respectively) @@ -33106,6 +33162,9 @@ Part IV contains two appendixes: @ref{GNU Free Documentation License}. @end ifclear @end itemize +@docbook + +@end docbook @end ifdocbook @node Language History -- cgit v1.2.3 From 123402fa15ec56d510ddd4cba16a5aea88e18023 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 9 May 2014 11:39:05 +0300 Subject: Fix double free error in do_eval. --- ChangeLog | 8 ++++++++ debug.c | 12 ++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index f3772314..68958a72 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2014-05-09 Arnold D. Robbins + + * debug.c (do_eval): Don't free `f' which points into the context + that was previously freed. Bug reported by Jan Chaloupka + . Apparently introduced with move to + SYMTAB and FUNCTAB, but only showed up on Fedora 20 and Ubuntu 14.04, + which have a newer glibc. + 2014-05-04 Arnold D. Robbins * debug.c (debug_prog): Change check for GAWK_RESTART so that it diff --git a/debug.c b/debug.c index 84e69d47..1ff43bd6 100644 --- a/debug.c +++ b/debug.c @@ -5565,8 +5565,16 @@ do_eval(CMDARG *arg, int cmd ATTRIBUTE_UNUSED) pop_context(); /* switch to prev context */ free_context(ctxt, (ret_val != NULL)); /* free all instructions and optionally symbols */ - if (ret_val != NULL) - destroy_symbol(f); /* destroy "@eval" */ + + /* + * May 2014: + * Don't do this. f points into the context we just released. + * Only showed up on Fedora 20 / Ubuntu 14.04. + * + * if (ret_val != NULL) + * destroy_symbol(f); // destroy "@eval" + */ + return false; } -- cgit v1.2.3 From 12857707435f1d4bf9adf33b6fbfd57ff91529a7 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 9 May 2014 11:42:52 +0300 Subject: Fix memory leak in do_eval. --- ChangeLog | 2 ++ awk.h | 1 + awkgram.c | 9 +++++++++ awkgram.y | 9 +++++++++ debug.c | 5 ++++- 5 files changed, 25 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 68958a72..3bcb78e7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,6 +5,8 @@ . Apparently introduced with move to SYMTAB and FUNCTAB, but only showed up on Fedora 20 and Ubuntu 14.04, which have a newer glibc. + (do_eval): Fix a memory leak seen by valgrind on Fedora 20 and + Ubuntu 14.04: the new SRCFILE that is added wasn't released. 2014-05-04 Arnold D. Robbins diff --git a/awk.h b/awk.h index 5f420936..65448400 100644 --- a/awk.h +++ b/awk.h @@ -1372,6 +1372,7 @@ extern NODE *stopme(int nargs); 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); diff --git a/awkgram.c b/awkgram.c index 80d6ea05..7d444fb8 100644 --- a/awkgram.c +++ b/awkgram.c @@ -4672,6 +4672,15 @@ parse_program(INSTRUCTION **pcode) return (ret || errcount); } +/* free_srcfile --- free a SRCFILE struct */ + +void +free_srcfile(SRCFILE *thisfile) +{ + efree(thisfile->src); + efree(thisfile); +} + /* do_add_srcfile --- add one item to srcfiles */ static SRCFILE * diff --git a/awkgram.y b/awkgram.y index 7d530b7f..07131d22 100644 --- a/awkgram.y +++ b/awkgram.y @@ -2333,6 +2333,15 @@ parse_program(INSTRUCTION **pcode) return (ret || errcount); } +/* free_srcfile --- free a SRCFILE struct */ + +void +free_srcfile(SRCFILE *thisfile) +{ + efree(thisfile->src); + efree(thisfile); +} + /* do_add_srcfile --- add one item to srcfiles */ static SRCFILE * diff --git a/debug.c b/debug.c index 1ff43bd6..32b308af 100644 --- a/debug.c +++ b/debug.c @@ -5448,6 +5448,7 @@ do_eval(CMDARG *arg, int cmd ATTRIBUTE_UNUSED) int ecount = 0, pcount = 0; int ret; int save_flags = do_flags; + SRCFILE *the_source; if (prog_running) { this_frame = find_frame(0); @@ -5458,7 +5459,7 @@ do_eval(CMDARG *arg, int cmd ATTRIBUTE_UNUSED) ctxt = new_context(); ctxt->install_func = append_symbol; /* keep track of newly installed globals */ push_context(ctxt); - (void) add_srcfile(SRC_CMDLINE, arg->a_string, srcfiles, NULL, NULL); + the_source = add_srcfile(SRC_CMDLINE, arg->a_string, srcfiles, NULL, NULL); do_flags = false; ret = parse_program(&code); do_flags = save_flags; @@ -5575,6 +5576,8 @@ do_eval(CMDARG *arg, int cmd ATTRIBUTE_UNUSED) * destroy_symbol(f); // destroy "@eval" */ + free_srcfile(the_source); + return false; } -- cgit v1.2.3 From 40694fc1c11bae6fac8e809a6a4c161c12cc37b7 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 9 May 2014 11:59:29 +0300 Subject: Fix in read_a_record for short file with RS=regex. --- ChangeLog | 6 ++++++ io.c | 3 +++ test/ChangeLog | 7 +++++++ test/Makefile.am | 10 +++++++++- test/Makefile.in | 18 +++++++++++++----- test/Maketests | 8 ++++---- test/rsgetline.awk | 23 +++++++++++++++++++++++ test/rsgetline.in | 1 + test/rsgetline.ok | 3 +++ 9 files changed, 69 insertions(+), 10 deletions(-) create mode 100644 test/rsgetline.awk create mode 100644 test/rsgetline.in create mode 100644 test/rsgetline.ok diff --git a/ChangeLog b/ChangeLog index 3bcb78e7..4a86cc05 100644 --- a/ChangeLog +++ b/ChangeLog @@ -8,6 +8,12 @@ (do_eval): Fix a memory leak seen by valgrind on Fedora 20 and Ubuntu 14.04: the new SRCFILE that is added wasn't released. + Unrelated: + + * io.c (get_a_record): Handle return of TERMNEAREND when the + entire file has been read into the buffer and we're using a + regex for RS. Bug report by Grail Dane . + 2014-05-04 Arnold D. Robbins * debug.c (debug_prog): Change check for GAWK_RESTART so that it diff --git a/io.c b/io.c index 2bb8f28a..b1c9fa18 100644 --- a/io.c +++ b/io.c @@ -206,6 +206,7 @@ typedef enum { CLOSE_ALL, CLOSE_TO, CLOSE_FROM } two_way_close_type; #define at_eof(iop) (((iop)->flag & IOP_AT_EOF) != 0) #define has_no_data(iop) ((iop)->dataend == NULL) #define no_data_left(iop) ((iop)->off >= (iop)->dataend) +#define buffer_has_all_data(iop) ((iop)->dataend - (iop)->off == (iop)->public.sbuf.st_size) /* * The key point to the design is to split out the code that searches through @@ -3474,6 +3475,8 @@ get_a_record(char **out, /* pointer to pointer to data */ iop->flag &= ~IOP_AT_START; if (ret == REC_OK) break; + if (ret == TERMNEAREND && buffer_has_all_data(iop)) + break; /* need to add more data to buffer */ /* shift data down in buffer */ diff --git a/test/ChangeLog b/test/ChangeLog index 7845e8ad..9af1c5bc 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,10 @@ +2014-05-09 Andrew J. Schorr + + * Makefile.am (rebuf): Force buffer size to 4096 via AWKBUFSIZE + environment variable. + (rsgetline): New test. + * rsgetline.awk, rsgetline.in, rsgetline.ok: New files. + 2014-04-11 Arnold D. Robbins * Makefile.am (charset-msg-start): Add a warning message that tests diff --git a/test/Makefile.am b/test/Makefile.am index 32d6bd7b..856532cd 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -757,6 +757,9 @@ EXTRA_DIST = \ rs.awk \ rs.in \ rs.ok \ + rsgetline.awk \ + rsgetline.in \ + rsgetline.ok \ rsnul1nl.awk \ rsnul1nl.in \ rsnul1nl.ok \ @@ -998,7 +1001,7 @@ GAWK_EXT_TESTS = \ nastyparm next nondec nondec2 \ patsplit posix printfbad1 printfbad2 printfbad3 procinfs \ profile1 profile2 profile3 profile4 profile5 pty1 \ - rebuf regx8bit reginttrad reint reint2 rsstart1 \ + rebuf regx8bit reginttrad reint reint2 rsgetline rsstart1 \ rsstart2 rsstart3 rstest6 shadow sortfor sortu split_after_fpat \ splitarg4 strftime \ strtonum switch2 symtab1 symtab2 symtab3 symtab4 symtab5 symtab6 \ @@ -1327,6 +1330,11 @@ fmtspcl: fmtspcl.ok $(CMP) "$(srcdir)"/$@-mpfr.ok _$@ && rm -f _$@ ; \ fi +rebuf:: + @echo $@ + @AWKBUFSIZE=4096 AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + reint:: @echo $@ @$(AWK) --re-interval -f "$(srcdir)"/reint.awk "$(srcdir)"/reint.in >_$@ diff --git a/test/Makefile.in b/test/Makefile.in index 267fea75..1dbc3359 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -1003,6 +1003,9 @@ EXTRA_DIST = \ rs.awk \ rs.in \ rs.ok \ + rsgetline.awk \ + rsgetline.in \ + rsgetline.ok \ rsnul1nl.awk \ rsnul1nl.in \ rsnul1nl.ok \ @@ -1243,7 +1246,7 @@ GAWK_EXT_TESTS = \ nastyparm next nondec nondec2 \ patsplit posix printfbad1 printfbad2 printfbad3 procinfs \ profile1 profile2 profile3 profile4 profile5 pty1 \ - rebuf regx8bit reginttrad reint reint2 rsstart1 \ + rebuf regx8bit reginttrad reint reint2 rsgetline rsstart1 \ rsstart2 rsstart3 rstest6 shadow sortfor sortu split_after_fpat \ splitarg4 strftime \ strtonum switch2 symtab1 symtab2 symtab3 symtab4 symtab5 symtab6 \ @@ -1752,6 +1755,11 @@ fmtspcl: fmtspcl.ok $(CMP) "$(srcdir)"/$@-mpfr.ok _$@ && rm -f _$@ ; \ fi +rebuf:: + @echo $@ + @AWKBUFSIZE=4096 AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + reint:: @echo $@ @$(AWK) --re-interval -f "$(srcdir)"/reint.awk "$(srcdir)"/reint.in >_$@ @@ -3491,14 +3499,14 @@ pty1: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ -rebuf: +regx8bit: @echo $@ - @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ -regx8bit: +rsgetline: @echo $@ - @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ rstest6: diff --git a/test/Maketests b/test/Maketests index b9b713c4..e847d765 100644 --- a/test/Maketests +++ b/test/Maketests @@ -1152,14 +1152,14 @@ pty1: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ -rebuf: +regx8bit: @echo $@ - @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ -regx8bit: +rsgetline: @echo $@ - @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ rstest6: diff --git a/test/rsgetline.awk b/test/rsgetline.awk new file mode 100644 index 00000000..fa327fcf --- /dev/null +++ b/test/rsgetline.awk @@ -0,0 +1,23 @@ +# Date: Sun, 4 May 2014 18:09:01 +0200 +# From: Davide Brini +# To: bug-gawk@gnu.org +# Subject: Re: [bug-gawk] Computed regex and getline bug / issue +# +# I have been able to reduce the behavior to these simple test cases, which +# (unless I'm missing something obvious) should behave identically but don't: +# +# $ printf '1,2,' | gawk 'BEGIN{RS="[,]+"}{print; a = getline; print "-"a"-"; print}' +# 1 +# -0- +# 1 + +BEGIN { + RS = "[,]+" +} + +{ + printf "[%s] [%s]\n", $0, RT + a = getline + print "-"a"-" + printf "[%s] [%s]\n", $0, RT +} diff --git a/test/rsgetline.in b/test/rsgetline.in new file mode 100644 index 00000000..f1782346 --- /dev/null +++ b/test/rsgetline.in @@ -0,0 +1 @@ +1,2, \ No newline at end of file diff --git a/test/rsgetline.ok b/test/rsgetline.ok new file mode 100644 index 00000000..1388369a --- /dev/null +++ b/test/rsgetline.ok @@ -0,0 +1,3 @@ +[1] [,] +-1- +[2] [,] -- cgit v1.2.3 From 0ebae58196378b06e083109701875f15c60a7b9a Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sat, 10 May 2014 22:53:29 +0300 Subject: Additional fix for TERMNEAREND. --- ChangeLog | 6 ++++++ io.c | 17 ++++++++++++++--- test/ChangeLog | 5 +++++ test/Makefile.am | 8 +++++++- test/Makefile.in | 8 +++++++- test/rsglstdin.ok | 3 +++ 6 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 test/rsglstdin.ok diff --git a/ChangeLog b/ChangeLog index 4a86cc05..91248939 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2014-05-10 Arnold D. Robbins + + * io.c (get_a_record): Finish TERMNEAREND handling in case + we don't have a regular file but aren't going to get more data. + Added some additional comments. + 2014-05-09 Arnold D. Robbins * debug.c (do_eval): Don't free `f' which points into the context diff --git a/io.c b/io.c index b1c9fa18..3d7b00ab 100644 --- a/io.c +++ b/io.c @@ -3473,8 +3473,15 @@ get_a_record(char **out, /* pointer to pointer to data */ ret = (*matchrec)(iop, & recm, & state); iop->flag &= ~IOP_AT_START; + /* found the record, we're done, break the loop */ if (ret == REC_OK) break; + + /* + * Likely found the record; if there's no more data + * to be had (like from a tiny regular file), break the + * loop. Otherwise, see if we can read more. + */ if (ret == TERMNEAREND && buffer_has_all_data(iop)) break; @@ -3527,10 +3534,14 @@ get_a_record(char **out, /* pointer to pointer to data */ break; } else if (iop->count == 0) { /* - * hit EOF before matching RS, so end - * the record and set RT to "" + * Hit EOF before being certain that we've matched + * the end of the record. If ret is TERMNEAREND, + * we need to pull out what we've got in the buffer. + * Eventually we'll come back here and see the EOF, + * end the record and set RT to "". */ - iop->flag |= IOP_AT_EOF; + if (ret != TERMNEAREND) + iop->flag |= IOP_AT_EOF; break; } else iop->dataend += iop->count; diff --git a/test/ChangeLog b/test/ChangeLog index 9af1c5bc..095fe155 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2014-05-10 Andrew J. Schorr + + * Makefile.am (rsglstdin): New test. + * rsglstdin.ok: New file. + 2014-05-09 Andrew J. Schorr * Makefile.am (rebuf): Force buffer size to 4096 via AWKBUFSIZE diff --git a/test/Makefile.am b/test/Makefile.am index 856532cd..260b216a 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -760,6 +760,7 @@ EXTRA_DIST = \ rsgetline.awk \ rsgetline.in \ rsgetline.ok \ + rsglstdin.ok \ rsnul1nl.awk \ rsnul1nl.in \ rsnul1nl.ok \ @@ -1001,7 +1002,7 @@ GAWK_EXT_TESTS = \ nastyparm next nondec nondec2 \ patsplit posix printfbad1 printfbad2 printfbad3 procinfs \ profile1 profile2 profile3 profile4 profile5 pty1 \ - rebuf regx8bit reginttrad reint reint2 rsgetline rsstart1 \ + rebuf 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 \ @@ -1335,6 +1336,11 @@ rebuf:: @AWKBUFSIZE=4096 AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +rsglstdin:: + @echo $@ + @cat "$(srcdir)"/rsgetline.in | AWKPATH="$(srcdir)" $(AWK) -f rsgetline.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + reint:: @echo $@ @$(AWK) --re-interval -f "$(srcdir)"/reint.awk "$(srcdir)"/reint.in >_$@ diff --git a/test/Makefile.in b/test/Makefile.in index 1dbc3359..34d5c594 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -1006,6 +1006,7 @@ EXTRA_DIST = \ rsgetline.awk \ rsgetline.in \ rsgetline.ok \ + rsglstdin.ok \ rsnul1nl.awk \ rsnul1nl.in \ rsnul1nl.ok \ @@ -1246,7 +1247,7 @@ GAWK_EXT_TESTS = \ nastyparm next nondec nondec2 \ patsplit posix printfbad1 printfbad2 printfbad3 procinfs \ profile1 profile2 profile3 profile4 profile5 pty1 \ - rebuf regx8bit reginttrad reint reint2 rsgetline rsstart1 \ + rebuf 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 \ @@ -1760,6 +1761,11 @@ rebuf:: @AWKBUFSIZE=4096 AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +rsglstdin:: + @echo $@ + @cat "$(srcdir)"/rsgetline.in | AWKPATH="$(srcdir)" $(AWK) -f rsgetline.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + reint:: @echo $@ @$(AWK) --re-interval -f "$(srcdir)"/reint.awk "$(srcdir)"/reint.in >_$@ diff --git a/test/rsglstdin.ok b/test/rsglstdin.ok new file mode 100644 index 00000000..1388369a --- /dev/null +++ b/test/rsglstdin.ok @@ -0,0 +1,3 @@ +[1] [,] +-1- +[2] [,] -- cgit v1.2.3 From 35de6ecfbbc272f25d12370785b1032447f37164 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 11 May 2014 05:22:51 +0300 Subject: Further fix to eval "" in debugger. --- ChangeLog | 6 ++++++ debug.c | 21 ++++++++++++--------- symbol.c | 2 +- test/ChangeLog | 5 +++++ test/Makefile.am | 8 +++++++- test/Makefile.in | 8 +++++++- test/dbugeval.in | 2 ++ test/dbugeval.ok | 1 + 8 files changed, 41 insertions(+), 12 deletions(-) create mode 100644 test/dbugeval.in create mode 100644 test/dbugeval.ok diff --git a/ChangeLog b/ChangeLog index 91248939..8e298dfd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2014-05-11 Arnold D. Robbins + + * debug.c (do_eval): Repair fix of 2014-05-09 and use + assoc_remove to take @eval out of the function table. + * symbol.c: Fix a comment. This file needs some work. + 2014-05-10 Arnold D. Robbins * io.c (get_a_record): Finish TERMNEAREND handling in case diff --git a/debug.c b/debug.c index 32b308af..5d7db01b 100644 --- a/debug.c +++ b/debug.c @@ -5560,21 +5560,24 @@ do_eval(CMDARG *arg, int cmd ATTRIBUTE_UNUSED) this_func->param_cnt -= ecount; } - /* always destroy symbol "@eval", however destroy all newly installed + /* + * Always destroy symbol "@eval", however destroy all newly installed * globals only if fatal error (execute_code() returing NULL). */ pop_context(); /* switch to prev context */ free_context(ctxt, (ret_val != NULL)); /* free all instructions and optionally symbols */ - /* - * May 2014: - * Don't do this. f points into the context we just released. - * Only showed up on Fedora 20 / Ubuntu 14.04. - * - * if (ret_val != NULL) - * destroy_symbol(f); // destroy "@eval" - */ + if (ret_val != NULL) { + /* + * Remove @eval from FUNCTAB, so that above code + * will work the next time around. + */ + NODE *s = make_string("@eval", 5); + + (void) assoc_remove(func_table, s); + unref(s); + } free_srcfile(the_source); diff --git a/symbol.c b/symbol.c index fe297d22..7ecdfe85 100644 --- a/symbol.c +++ b/symbol.c @@ -508,7 +508,7 @@ append_symbol(NODE *r) symbol_list->rnode = p; } -/* release_symbol --- free symbol list and optionally remove symbol from symbol table */ +/* release_symbols --- free symbol list and optionally remove symbol from symbol table */ void release_symbols(NODE *symlist, int keep_globals) diff --git a/test/ChangeLog b/test/ChangeLog index 095fe155..b5800961 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2014-05-11 Arnold D. Robbins + + * Makefile.am (dbugeval): New test. + * dbugeval.in, dbugeval.ok: New files. + 2014-05-10 Andrew J. Schorr * Makefile.am (rsglstdin): New test. diff --git a/test/Makefile.am b/test/Makefile.am index 260b216a..574ca2ea 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -167,6 +167,7 @@ EXTRA_DIST = \ datanonl.awk \ datanonl.in \ datanonl.ok \ + dbugeval.in \ defref.awk \ defref.ok \ delargv.awk \ @@ -990,7 +991,7 @@ UNIX_TESTS = \ GAWK_EXT_TESTS = \ aadelete1 aadelete2 aarray1 aasort aasorti argtest arraysort \ backw badargs beginfile1 beginfile2 binmode1 charasbytes \ - colonwarn clos1way delsub devfd devfd1 devfd2 dumpvars exit \ + colonwarn clos1way dbugeval delsub devfd devfd1 devfd2 dumpvars exit \ fieldwdth fpat1 fpat2 fpat3 fpatnull fsfwfs funlen \ functab1 functab2 functab3 fwtest fwtest2 fwtest3 \ gensub gensub2 getlndir gnuops2 gnuops3 gnureops \ @@ -1928,6 +1929,11 @@ backsmalls2: AWKPATH="$(srcdir)" $(AWK) -f $@.awk "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +dbugeval:: + @echo $@ + $(AWK) --debug -f /dev/null < "$(srcdir)"/$@.in > _$@ 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 34d5c594..595e4966 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -413,6 +413,7 @@ EXTRA_DIST = \ datanonl.awk \ datanonl.in \ datanonl.ok \ + dbugeval.in \ defref.awk \ defref.ok \ delargv.awk \ @@ -1235,7 +1236,7 @@ UNIX_TESTS = \ GAWK_EXT_TESTS = \ aadelete1 aadelete2 aarray1 aasort aasorti argtest arraysort \ backw badargs beginfile1 beginfile2 binmode1 charasbytes \ - colonwarn clos1way delsub devfd devfd1 devfd2 dumpvars exit \ + colonwarn clos1way dbugeval delsub devfd devfd1 devfd2 dumpvars exit \ fieldwdth fpat1 fpat2 fpat3 fpatnull fsfwfs funlen \ functab1 functab2 functab3 fwtest fwtest2 fwtest3 \ gensub gensub2 getlndir gnuops2 gnuops3 gnureops \ @@ -2351,6 +2352,11 @@ backsmalls2: @[ -z "$$GAWKLOCALE" ] && GAWKLOCALE=en_US.UTF-8; \ AWKPATH="$(srcdir)" $(AWK) -f $@.awk "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + +dbugeval:: + @echo $@ + $(AWK) --debug -f /dev/null < "$(srcdir)"/$@.in > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ Gt-dummy: # file Maketests, generated from Makefile.am by the Gentests program addcomma: diff --git a/test/dbugeval.in b/test/dbugeval.in new file mode 100644 index 00000000..6a3c2459 --- /dev/null +++ b/test/dbugeval.in @@ -0,0 +1,2 @@ +eval "" +eval "" diff --git a/test/dbugeval.ok b/test/dbugeval.ok new file mode 100644 index 00000000..284f2abb --- /dev/null +++ b/test/dbugeval.ok @@ -0,0 +1 @@ +EXIT CODE: 2 -- cgit v1.2.3 From 1f09ba8c86f73123383cd69d38414f8e922855e0 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 13 May 2014 05:36:04 +0300 Subject: Add dbugeval.ok to EXTRADIST in Makefile.am. --- test/ChangeLog | 4 ++++ test/Makefile.am | 1 + test/Makefile.in | 1 + 3 files changed, 6 insertions(+) diff --git a/test/ChangeLog b/test/ChangeLog index b5800961..9bd0540b 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2014-05-13 Arnold D. Robbins + + * Makefile.am (EXTRA_DIST): Forgot dbugeval.ok. Ooops. + 2014-05-11 Arnold D. Robbins * Makefile.am (dbugeval): New test. diff --git a/test/Makefile.am b/test/Makefile.am index 574ca2ea..c53e0d01 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -168,6 +168,7 @@ EXTRA_DIST = \ datanonl.in \ datanonl.ok \ dbugeval.in \ + dbugeval.ok \ defref.awk \ defref.ok \ delargv.awk \ diff --git a/test/Makefile.in b/test/Makefile.in index 595e4966..f00efc63 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -414,6 +414,7 @@ EXTRA_DIST = \ datanonl.in \ datanonl.ok \ dbugeval.in \ + dbugeval.ok \ defref.awk \ defref.ok \ delargv.awk \ -- cgit v1.2.3 From cd78eac2bc3b182ddca47b97f7f460c3358c7b09 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 13 May 2014 22:17:05 +0300 Subject: Get print version set up to pass makeinfo. --- doc/ChangeLog | 4 + doc/gawk.info | 1091 ++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 172 ++++++--- doc/gawktexi.in | 172 ++++++--- 4 files changed, 812 insertions(+), 627 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index beb0413c..41671458 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-05-13 Arnold D. Robbins + + * gawktexi.in: Complete formatting for FOR_PRINT and not FOR_PRINT. + 2014-05-07 Arnold D. Robbins * gawktexi.in: Docbook edits for preface and parts. diff --git a/doc/gawk.info b/doc/gawk.info index 9bcd7e0c..5587b9e8 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -806,9 +806,10 @@ different computing environments. This Info file, while describing the of `awk' called `gawk' (which stands for "GNU `awk'"). `gawk' runs on a broad range of Unix systems, ranging from Intel(R)-architecture PC-based computers up through large-scale systems. `gawk' has also -been ported to Mac OS X, Microsoft Windows (all versions), and OpenVMS. -(Some other, obsolete systems to which `gawk' was once ported are no -longer supported and the code for those systems has been removed.) +been ported to Mac OS X, Microsoft Windows (all versions) and OS/2 PCs, +and OpenVMS. (Some other, obsolete systems to which `gawk' was once +ported are no longer supported and the code for those systems has been +removed.) * Menu: @@ -1047,7 +1048,7 @@ material for those who are completely unfamiliar with computer programming. The *note Glossary::, defines most, if not all, the significant -terms used throughout the book. If you find terms that you aren't +terms used throughout the Info file. If you find terms that you aren't familiar with, try looking them up here. *note Copying::, and *note GNU Free Documentation License::, present @@ -1125,7 +1126,7 @@ editor. GNU Emacs is the most widely used version of Emacs today. 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 -always available to the end user. A copy of the GPL is included for +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 Project online, see the GNU Project's home page (http://www.gnu.org). @@ -26557,14 +26558,14 @@ B.3.1 Installation on PC Operating Systems This minor node covers installation and usage of `gawk' on x86 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. +Windows-95/98/ME/NT/2000/XP/Vista/7/8. - The limitations of MS-DOS (and MS-DOS shells under Windows32 or -OS/2) has 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, please refer to `README_d/README.pc' in the -distribution. + The limitations of MS-DOS (and MS-DOS shells under the other +operating systems) has 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, please refer to `README_d/README.pc' in +the distribution. * Menu: @@ -26623,13 +26624,13 @@ B.3.1.2 Compiling `gawk' for PC Operating Systems ................................................. `gawk' can be compiled for MS-DOS, Windows32, and OS/2 using the GNU -development tools from DJ Delorie (DJGPP: MS-DOS only) or Eberhard -Mattes (EMX: MS-DOS, Windows32 and OS/2). The file -`README_d/README.pc' in the `gawk' distribution contains additional -notes, and `pc/Makefile' contains important information on compilation -options. +development tools from DJ Delorie (DJGPP: MS-DOS only), MinGW +(Windows32) or Eberhard Mattes (EMX: MS-DOS, Windows32 and OS/2). The +file `README_d/README.pc' in the `gawk' distribution contains +additional notes, and `pc/Makefile' contains important information on +compilation options. - To build `gawk' for MS-DOS and Windows32, copy the files in the `pc' +To build `gawk' for MS-DOS and Windows32, copy the files in the `pc' directory (_except_ for `ChangeLog') to the directory with the rest of the `gawk' sources, then invoke `make' with the appropriate target name as an argument to build `gawk'. The `Makefile' copied from the `pc' @@ -31697,7 +31698,7 @@ Index * gawk, MS-Windows version of: PC Using. (line 10) * gawk, newlines in: Statements/Lines. (line 12) * gawk, octal numbers and: Nondecimal-numbers. (line 42) -* gawk, OS/2 version of: PC Using. (line 10) +* gawk, OS/2 version of: PC Using. (line 16) * gawk, PROCINFO array in <1>: Two-way I/O. (line 116) * gawk, PROCINFO array in <2>: Time Functions. (line 47) * gawk, PROCINFO array in: Auto-set. (line 128) @@ -33205,531 +33206,531 @@ Tag Table: Node: Top1292 Node: Foreword40832 Node: Preface45177 -Ref: Preface-Footnote-148310 -Ref: Preface-Footnote-248417 -Node: History48649 -Node: Names51023 -Ref: Names-Footnote-152487 -Node: This Manual52560 -Ref: This Manual-Footnote-158334 -Node: Conventions58434 -Node: Manual History60590 -Ref: Manual History-Footnote-164020 -Ref: Manual History-Footnote-264061 -Node: How To Contribute64135 -Node: Acknowledgments65374 -Node: Getting Started69568 -Node: Running gawk71947 -Node: One-shot73137 -Node: Read Terminal74362 -Ref: Read Terminal-Footnote-176012 -Ref: Read Terminal-Footnote-276288 -Node: Long76459 -Node: Executable Scripts77835 -Ref: Executable Scripts-Footnote-179668 -Ref: Executable Scripts-Footnote-279770 -Node: Comments80317 -Node: Quoting82784 -Node: DOS Quoting88100 -Node: Sample Data Files88775 -Node: Very Simple91290 -Node: Two Rules95940 -Node: More Complex97835 -Ref: More Complex-Footnote-1100767 -Node: Statements/Lines100852 -Ref: Statements/Lines-Footnote-1105307 -Node: Other Features105572 -Node: When106500 -Node: Invoking Gawk108648 -Node: Command Line110111 -Node: Options110894 -Ref: Options-Footnote-1126706 -Node: Other Arguments126731 -Node: Naming Standard Input129393 -Node: Environment Variables130487 -Node: AWKPATH Variable131045 -Ref: AWKPATH Variable-Footnote-1133823 -Ref: AWKPATH Variable-Footnote-2133868 -Node: AWKLIBPATH Variable134128 -Node: Other Environment Variables134887 -Node: Exit Status138542 -Node: Include Files139217 -Node: Loading Shared Libraries142795 -Node: Obsolete144178 -Node: Undocumented144875 -Node: Regexp145117 -Node: Regexp Usage146506 -Node: Escape Sequences148539 -Node: Regexp Operators154206 -Ref: Regexp Operators-Footnote-1161686 -Ref: Regexp Operators-Footnote-2161833 -Node: Bracket Expressions161931 -Ref: table-char-classes163821 -Node: GNU Regexp Operators166344 -Node: Case-sensitivity170067 -Ref: Case-sensitivity-Footnote-1172959 -Ref: Case-sensitivity-Footnote-2173194 -Node: Leftmost Longest173302 -Node: Computed Regexps174503 -Node: Reading Files177852 -Node: Records179854 -Node: awk split records180589 -Node: gawk split records185447 -Ref: gawk split records-Footnote-1189968 -Node: Fields190005 -Ref: Fields-Footnote-1192969 -Node: Nonconstant Fields193055 -Ref: Nonconstant Fields-Footnote-1195285 -Node: Changing Fields195487 -Node: Field Separators201441 -Node: Default Field Splitting204143 -Node: Regexp Field Splitting205260 -Node: Single Character Fields208601 -Node: Command Line Field Separator209660 -Node: Full Line Fields213002 -Ref: Full Line Fields-Footnote-1213510 -Node: Field Splitting Summary213556 -Ref: Field Splitting Summary-Footnote-1216655 -Node: Constant Size216756 -Node: Splitting By Content221363 -Ref: Splitting By Content-Footnote-1225113 -Node: Multiple Line225153 -Ref: Multiple Line-Footnote-1231009 -Node: Getline231188 -Node: Plain Getline233404 -Node: Getline/Variable235499 -Node: Getline/File236646 -Node: Getline/Variable/File238030 -Ref: Getline/Variable/File-Footnote-1239629 -Node: Getline/Pipe239716 -Node: Getline/Variable/Pipe242415 -Node: Getline/Coprocess243522 -Node: Getline/Variable/Coprocess244774 -Node: Getline Notes245511 -Node: Getline Summary248315 -Ref: table-getline-variants248723 -Node: Read Timeout249635 -Ref: Read Timeout-Footnote-1253462 -Node: Command line directories253520 -Node: Printing254402 -Node: Print256033 -Node: Print Examples257374 -Node: Output Separators260153 -Node: OFMT262169 -Node: Printf263527 -Node: Basic Printf264433 -Node: Control Letters265972 -Node: Format Modifiers269826 -Node: Printf Examples275853 -Node: Redirection278560 -Node: Special Files285532 -Node: Special FD286065 -Ref: Special FD-Footnote-1289689 -Node: Special Network289763 -Node: Special Caveats290613 -Node: Close Files And Pipes291409 -Ref: Close Files And Pipes-Footnote-1298547 -Ref: Close Files And Pipes-Footnote-2298695 -Node: Expressions298845 -Node: Values299977 -Node: Constants300653 -Node: Scalar Constants301333 -Ref: Scalar Constants-Footnote-1302192 -Node: Nondecimal-numbers302442 -Node: Regexp Constants305442 -Node: Using Constant Regexps305917 -Node: Variables308987 -Node: Using Variables309642 -Node: Assignment Options311366 -Node: Conversion313241 -Ref: table-locale-affects318677 -Ref: Conversion-Footnote-1319301 -Node: All Operators319410 -Node: Arithmetic Ops320040 -Node: Concatenation322545 -Ref: Concatenation-Footnote-1325341 -Node: Assignment Ops325461 -Ref: table-assign-ops330444 -Node: Increment Ops331761 -Node: Truth Values and Conditions335199 -Node: Truth Values336282 -Node: Typing and Comparison337331 -Node: Variable Typing338124 -Ref: Variable Typing-Footnote-1342024 -Node: Comparison Operators342146 -Ref: table-relational-ops342556 -Node: POSIX String Comparison346104 -Ref: POSIX String Comparison-Footnote-1347188 -Node: Boolean Ops347326 -Ref: Boolean Ops-Footnote-1351396 -Node: Conditional Exp351487 -Node: Function Calls353214 -Node: Precedence356972 -Node: Locales360641 -Node: Patterns and Actions362244 -Node: Pattern Overview363298 -Node: Regexp Patterns364975 -Node: Expression Patterns365518 -Node: Ranges369299 -Node: BEGIN/END372405 -Node: Using BEGIN/END373167 -Ref: Using BEGIN/END-Footnote-1375903 -Node: I/O And BEGIN/END376009 -Node: BEGINFILE/ENDFILE378294 -Node: Empty381230 -Node: Using Shell Variables381547 -Node: Action Overview383830 -Node: Statements386175 -Node: If Statement388029 -Node: While Statement389528 -Node: Do Statement391572 -Node: For Statement392728 -Node: Switch Statement395880 -Node: Break Statement397983 -Node: Continue Statement400038 -Node: Next Statement401831 -Node: Nextfile Statement404221 -Node: Exit Statement406876 -Node: Built-in Variables409278 -Node: User-modified410374 -Ref: User-modified-Footnote-1418059 -Node: Auto-set418121 -Ref: Auto-set-Footnote-1430686 -Ref: Auto-set-Footnote-2430891 -Node: ARGC and ARGV430947 -Node: Arrays434801 -Node: Array Basics436299 -Node: Array Intro437125 -Ref: figure-array-elements439098 -Node: Reference to Elements441505 -Node: Assigning Elements443778 -Node: Array Example444269 -Node: Scanning an Array446001 -Node: Controlling Scanning449016 -Ref: Controlling Scanning-Footnote-1454189 -Node: Delete454505 -Ref: Delete-Footnote-1457270 -Node: Numeric Array Subscripts457327 -Node: Uninitialized Subscripts459510 -Node: Multidimensional461135 -Node: Multiscanning464228 -Node: Arrays of Arrays465817 -Node: Functions470457 -Node: Built-in471276 -Node: Calling Built-in472354 -Node: Numeric Functions474342 -Ref: Numeric Functions-Footnote-1478176 -Ref: Numeric Functions-Footnote-2478533 -Ref: Numeric Functions-Footnote-3478581 -Node: String Functions478850 -Ref: String Functions-Footnote-1501861 -Ref: String Functions-Footnote-2501990 -Ref: String Functions-Footnote-3502238 -Node: Gory Details502325 -Ref: table-sub-escapes503994 -Ref: table-sub-posix-92505348 -Ref: table-sub-proposed506699 -Ref: table-posix-sub508053 -Ref: table-gensub-escapes509598 -Ref: Gory Details-Footnote-1510774 -Ref: Gory Details-Footnote-2510825 -Node: I/O Functions510976 -Ref: I/O Functions-Footnote-1518099 -Node: Time Functions518246 -Ref: Time Functions-Footnote-1528710 -Ref: Time Functions-Footnote-2528778 -Ref: Time Functions-Footnote-3528936 -Ref: Time Functions-Footnote-4529047 -Ref: Time Functions-Footnote-5529159 -Ref: Time Functions-Footnote-6529386 -Node: Bitwise Functions529652 -Ref: table-bitwise-ops530214 -Ref: Bitwise Functions-Footnote-1534459 -Node: Type Functions534643 -Node: I18N Functions535785 -Node: User-defined537430 -Node: Definition Syntax538234 -Ref: Definition Syntax-Footnote-1543149 -Node: Function Example543218 -Ref: Function Example-Footnote-1545862 -Node: Function Caveats545884 -Node: Calling A Function546402 -Node: Variable Scope547357 -Node: Pass By Value/Reference550345 -Node: Return Statement553853 -Node: Dynamic Typing556835 -Node: Indirect Calls557764 -Node: Library Functions567451 -Ref: Library Functions-Footnote-1570964 -Ref: Library Functions-Footnote-2571107 -Node: Library Names571278 -Ref: Library Names-Footnote-1574751 -Ref: Library Names-Footnote-2574971 -Node: General Functions575057 -Node: Strtonum Function576085 -Node: Assert Function579015 -Node: Round Function582341 -Node: Cliff Random Function583882 -Node: Ordinal Functions584898 -Ref: Ordinal Functions-Footnote-1587975 -Ref: Ordinal Functions-Footnote-2588227 -Node: Join Function588438 -Ref: Join Function-Footnote-1590209 -Node: Getlocaltime Function590409 -Node: Readfile Function594150 -Node: Data File Management595989 -Node: Filetrans Function596621 -Node: Rewind Function600690 -Node: File Checking602077 -Node: Empty Files603171 -Node: Ignoring Assigns605401 -Node: Getopt Function606955 -Ref: Getopt Function-Footnote-1618258 -Node: Passwd Functions618461 -Ref: Passwd Functions-Footnote-1627439 -Node: Group Functions627527 -Node: Walking Arrays635611 -Node: Sample Programs637747 -Node: Running Examples638421 -Node: Clones639149 -Node: Cut Program640373 -Node: Egrep Program650224 -Ref: Egrep Program-Footnote-1657997 -Node: Id Program658107 -Node: Split Program661756 -Ref: Split Program-Footnote-1665275 -Node: Tee Program665403 -Node: Uniq Program668206 -Node: Wc Program675635 -Ref: Wc Program-Footnote-1679901 -Ref: Wc Program-Footnote-2680101 -Node: Miscellaneous Programs680193 -Node: Dupword Program681381 -Node: Alarm Program683412 -Node: Translate Program688219 -Ref: Translate Program-Footnote-1692606 -Ref: Translate Program-Footnote-2692854 -Node: Labels Program692988 -Ref: Labels Program-Footnote-1696359 -Node: Word Sorting696443 -Node: History Sorting700327 -Node: Extract Program702166 -Ref: Extract Program-Footnote-1709669 -Node: Simple Sed709797 -Node: Igawk Program712859 -Ref: Igawk Program-Footnote-1728030 -Ref: Igawk Program-Footnote-2728231 -Node: Anagram Program728369 -Node: Signature Program731437 -Node: Advanced Features732537 -Node: Nondecimal Data734423 -Node: Array Sorting736006 -Node: Controlling Array Traversal736703 -Node: Array Sorting Functions744987 -Ref: Array Sorting Functions-Footnote-1748856 -Node: Two-way I/O749050 -Ref: Two-way I/O-Footnote-1754482 -Node: TCP/IP Networking754564 -Node: Profiling757408 -Node: Internationalization764911 -Node: I18N and L10N766336 -Node: Explaining gettext767022 -Ref: Explaining gettext-Footnote-1772090 -Ref: Explaining gettext-Footnote-2772274 -Node: Programmer i18n772439 -Node: Translator i18n776666 -Node: String Extraction777460 -Ref: String Extraction-Footnote-1778421 -Node: Printf Ordering778507 -Ref: Printf Ordering-Footnote-1781289 -Node: I18N Portability781353 -Ref: I18N Portability-Footnote-1783802 -Node: I18N Example783865 -Ref: I18N Example-Footnote-1786503 -Node: Gawk I18N786575 -Node: Debugger787196 -Node: Debugging788167 -Node: Debugging Concepts788600 -Node: Debugging Terms790456 -Node: Awk Debugging793053 -Node: Sample Debugging Session793945 -Node: Debugger Invocation794465 -Node: Finding The Bug795798 -Node: List of Debugger Commands802285 -Node: Breakpoint Control803619 -Node: Debugger Execution Control807283 -Node: Viewing And Changing Data810643 -Node: Execution Stack813999 -Node: Debugger Info815466 -Node: Miscellaneous Debugger Commands819460 -Node: Readline Support824638 -Node: Limitations825469 -Node: Arbitrary Precision Arithmetic827721 -Ref: Arbitrary Precision Arithmetic-Footnote-1829370 -Node: General Arithmetic829518 -Node: Floating Point Issues831238 -Node: String Conversion Precision832119 -Ref: String Conversion Precision-Footnote-1833824 -Node: Unexpected Results833933 -Node: POSIX Floating Point Problems836086 -Ref: POSIX Floating Point Problems-Footnote-1839911 -Node: Integer Programming839949 -Node: Floating-point Programming841688 -Ref: Floating-point Programming-Footnote-1848019 -Ref: Floating-point Programming-Footnote-2848289 -Node: Floating-point Representation848553 -Node: Floating-point Context849718 -Ref: table-ieee-formats850557 -Node: Rounding Mode851941 -Ref: table-rounding-modes852420 -Ref: Rounding Mode-Footnote-1855435 -Node: Gawk and MPFR855614 -Node: Arbitrary Precision Floats857023 -Ref: Arbitrary Precision Floats-Footnote-1859466 -Node: Setting Precision859782 -Ref: table-predefined-precision-strings860468 -Node: Setting Rounding Mode862613 -Ref: table-gawk-rounding-modes863017 -Node: Floating-point Constants864204 -Node: Changing Precision865633 -Ref: Changing Precision-Footnote-1867030 -Node: Exact Arithmetic867204 -Node: Arbitrary Precision Integers870342 -Ref: Arbitrary Precision Integers-Footnote-1873357 -Node: Dynamic Extensions873504 -Node: Extension Intro874962 -Node: Plugin License876227 -Node: Extension Mechanism Outline876912 -Ref: load-extension877329 -Ref: load-new-function878807 -Ref: call-new-function879802 -Node: Extension API Description881817 -Node: Extension API Functions Introduction883104 -Node: General Data Types888031 -Ref: General Data Types-Footnote-1893726 -Node: Requesting Values894025 -Ref: table-value-types-returned894762 -Node: Memory Allocation Functions895716 -Ref: Memory Allocation Functions-Footnote-1898462 -Node: Constructor Functions898558 -Node: Registration Functions900316 -Node: Extension Functions901001 -Node: Exit Callback Functions903303 -Node: Extension Version String904552 -Node: Input Parsers905202 -Node: Output Wrappers914959 -Node: Two-way processors919469 -Node: Printing Messages921677 -Ref: Printing Messages-Footnote-1922754 -Node: Updating `ERRNO'922906 -Node: Accessing Parameters923645 -Node: Symbol Table Access924875 -Node: Symbol table by name925389 -Node: Symbol table by cookie927365 -Ref: Symbol table by cookie-Footnote-1931497 -Node: Cached values931560 -Ref: Cached values-Footnote-1935050 -Node: Array Manipulation935141 -Ref: Array Manipulation-Footnote-1936239 -Node: Array Data Types936278 -Ref: Array Data Types-Footnote-1938981 -Node: Array Functions939073 -Node: Flattening Arrays942909 -Node: Creating Arrays949761 -Node: Extension API Variables954486 -Node: Extension Versioning955122 -Node: Extension API Informational Variables957023 -Node: Extension API Boilerplate958109 -Node: Finding Extensions961913 -Node: Extension Example962473 -Node: Internal File Description963203 -Node: Internal File Ops967294 -Ref: Internal File Ops-Footnote-1978803 -Node: Using Internal File Ops978943 -Ref: Using Internal File Ops-Footnote-1981290 -Node: Extension Samples981556 -Node: Extension Sample File Functions983080 -Node: Extension Sample Fnmatch991567 -Node: Extension Sample Fork993336 -Node: Extension Sample Inplace994549 -Node: Extension Sample Ord996327 -Node: Extension Sample Readdir997163 -Node: Extension Sample Revout998695 -Node: Extension Sample Rev2way999288 -Node: Extension Sample Read write array999978 -Node: Extension Sample Readfile1001861 -Node: Extension Sample API Tests1002961 -Node: Extension Sample Time1003486 -Node: gawkextlib1004850 -Node: Language History1007631 -Node: V7/SVR3.11009224 -Node: SVR41011544 -Node: POSIX1012986 -Node: BTL1014372 -Node: POSIX/GNU1015106 -Node: Feature History1020705 -Node: Common Extensions1033681 -Node: Ranges and Locales1034993 -Ref: Ranges and Locales-Footnote-11039610 -Ref: Ranges and Locales-Footnote-21039637 -Ref: Ranges and Locales-Footnote-31039871 -Node: Contributors1040092 -Node: Installation1045473 -Node: Gawk Distribution1046367 -Node: Getting1046851 -Node: Extracting1047677 -Node: Distribution contents1049369 -Node: Unix Installation1055090 -Node: Quick Installation1055707 -Node: Additional Configuration Options1058153 -Node: Configuration Philosophy1059889 -Node: Non-Unix Installation1062243 -Node: PC Installation1062701 -Node: PC Binary Installation1064000 -Node: PC Compiling1065848 -Node: PC Testing1068792 -Node: PC Using1069968 -Node: Cygwin1074136 -Node: MSYS1074945 -Node: VMS Installation1075459 -Node: VMS Compilation1076255 -Ref: VMS Compilation-Footnote-11077507 -Node: VMS Dynamic Extensions1077565 -Node: VMS Installation Details1078938 -Node: VMS Running1081189 -Node: VMS GNV1084023 -Node: VMS Old Gawk1084746 -Node: Bugs1085216 -Node: Other Versions1089134 -Node: Notes1095218 -Node: Compatibility Mode1096018 -Node: Additions1096801 -Node: Accessing The Source1097728 -Node: Adding Code1099168 -Node: New Ports1105213 -Node: Derived Files1109348 -Ref: Derived Files-Footnote-11114669 -Ref: Derived Files-Footnote-21114703 -Ref: Derived Files-Footnote-31115303 -Node: Future Extensions1115401 -Node: Implementation Limitations1115984 -Node: Extension Design1117232 -Node: Old Extension Problems1118386 -Ref: Old Extension Problems-Footnote-11119894 -Node: Extension New Mechanism Goals1119951 -Ref: Extension New Mechanism Goals-Footnote-11123316 -Node: Extension Other Design Decisions1123502 -Node: Extension Future Growth1125608 -Node: Old Extension Mechanism1126444 -Node: Basic Concepts1128184 -Node: Basic High Level1128865 -Ref: figure-general-flow1129137 -Ref: figure-process-flow1129736 -Ref: Basic High Level-Footnote-11132965 -Node: Basic Data Typing1133150 -Node: Glossary1136505 -Node: Copying1161736 -Node: GNU Free Documentation License1199292 -Node: Index1224428 +Ref: Preface-Footnote-148324 +Ref: Preface-Footnote-248431 +Node: History48663 +Node: Names51037 +Ref: Names-Footnote-152501 +Node: This Manual52574 +Ref: This Manual-Footnote-158353 +Node: Conventions58453 +Node: Manual History60609 +Ref: Manual History-Footnote-164040 +Ref: Manual History-Footnote-264081 +Node: How To Contribute64155 +Node: Acknowledgments65394 +Node: Getting Started69588 +Node: Running gawk71967 +Node: One-shot73157 +Node: Read Terminal74382 +Ref: Read Terminal-Footnote-176032 +Ref: Read Terminal-Footnote-276308 +Node: Long76479 +Node: Executable Scripts77855 +Ref: Executable Scripts-Footnote-179688 +Ref: Executable Scripts-Footnote-279790 +Node: Comments80337 +Node: Quoting82804 +Node: DOS Quoting88120 +Node: Sample Data Files88795 +Node: Very Simple91310 +Node: Two Rules95960 +Node: More Complex97855 +Ref: More Complex-Footnote-1100787 +Node: Statements/Lines100872 +Ref: Statements/Lines-Footnote-1105327 +Node: Other Features105592 +Node: When106520 +Node: Invoking Gawk108668 +Node: Command Line110131 +Node: Options110914 +Ref: Options-Footnote-1126726 +Node: Other Arguments126751 +Node: Naming Standard Input129413 +Node: Environment Variables130507 +Node: AWKPATH Variable131065 +Ref: AWKPATH Variable-Footnote-1133843 +Ref: AWKPATH Variable-Footnote-2133888 +Node: AWKLIBPATH Variable134148 +Node: Other Environment Variables134907 +Node: Exit Status138562 +Node: Include Files139237 +Node: Loading Shared Libraries142815 +Node: Obsolete144198 +Node: Undocumented144895 +Node: Regexp145137 +Node: Regexp Usage146526 +Node: Escape Sequences148559 +Node: Regexp Operators154226 +Ref: Regexp Operators-Footnote-1161706 +Ref: Regexp Operators-Footnote-2161853 +Node: Bracket Expressions161951 +Ref: table-char-classes163841 +Node: GNU Regexp Operators166364 +Node: Case-sensitivity170087 +Ref: Case-sensitivity-Footnote-1172979 +Ref: Case-sensitivity-Footnote-2173214 +Node: Leftmost Longest173322 +Node: Computed Regexps174523 +Node: Reading Files177872 +Node: Records179874 +Node: awk split records180609 +Node: gawk split records185467 +Ref: gawk split records-Footnote-1189988 +Node: Fields190025 +Ref: Fields-Footnote-1192989 +Node: Nonconstant Fields193075 +Ref: Nonconstant Fields-Footnote-1195305 +Node: Changing Fields195507 +Node: Field Separators201461 +Node: Default Field Splitting204163 +Node: Regexp Field Splitting205280 +Node: Single Character Fields208621 +Node: Command Line Field Separator209680 +Node: Full Line Fields213022 +Ref: Full Line Fields-Footnote-1213530 +Node: Field Splitting Summary213576 +Ref: Field Splitting Summary-Footnote-1216675 +Node: Constant Size216776 +Node: Splitting By Content221383 +Ref: Splitting By Content-Footnote-1225133 +Node: Multiple Line225173 +Ref: Multiple Line-Footnote-1231029 +Node: Getline231208 +Node: Plain Getline233424 +Node: Getline/Variable235519 +Node: Getline/File236666 +Node: Getline/Variable/File238050 +Ref: Getline/Variable/File-Footnote-1239649 +Node: Getline/Pipe239736 +Node: Getline/Variable/Pipe242435 +Node: Getline/Coprocess243542 +Node: Getline/Variable/Coprocess244794 +Node: Getline Notes245531 +Node: Getline Summary248335 +Ref: table-getline-variants248743 +Node: Read Timeout249655 +Ref: Read Timeout-Footnote-1253482 +Node: Command line directories253540 +Node: Printing254422 +Node: Print256053 +Node: Print Examples257394 +Node: Output Separators260173 +Node: OFMT262189 +Node: Printf263547 +Node: Basic Printf264453 +Node: Control Letters265992 +Node: Format Modifiers269846 +Node: Printf Examples275873 +Node: Redirection278580 +Node: Special Files285552 +Node: Special FD286085 +Ref: Special FD-Footnote-1289709 +Node: Special Network289783 +Node: Special Caveats290633 +Node: Close Files And Pipes291429 +Ref: Close Files And Pipes-Footnote-1298567 +Ref: Close Files And Pipes-Footnote-2298715 +Node: Expressions298865 +Node: Values299997 +Node: Constants300673 +Node: Scalar Constants301353 +Ref: Scalar Constants-Footnote-1302212 +Node: Nondecimal-numbers302462 +Node: Regexp Constants305462 +Node: Using Constant Regexps305937 +Node: Variables309007 +Node: Using Variables309662 +Node: Assignment Options311386 +Node: Conversion313261 +Ref: table-locale-affects318697 +Ref: Conversion-Footnote-1319321 +Node: All Operators319430 +Node: Arithmetic Ops320060 +Node: Concatenation322565 +Ref: Concatenation-Footnote-1325361 +Node: Assignment Ops325481 +Ref: table-assign-ops330464 +Node: Increment Ops331781 +Node: Truth Values and Conditions335219 +Node: Truth Values336302 +Node: Typing and Comparison337351 +Node: Variable Typing338144 +Ref: Variable Typing-Footnote-1342044 +Node: Comparison Operators342166 +Ref: table-relational-ops342576 +Node: POSIX String Comparison346124 +Ref: POSIX String Comparison-Footnote-1347208 +Node: Boolean Ops347346 +Ref: Boolean Ops-Footnote-1351416 +Node: Conditional Exp351507 +Node: Function Calls353234 +Node: Precedence356992 +Node: Locales360661 +Node: Patterns and Actions362264 +Node: Pattern Overview363318 +Node: Regexp Patterns364995 +Node: Expression Patterns365538 +Node: Ranges369319 +Node: BEGIN/END372425 +Node: Using BEGIN/END373187 +Ref: Using BEGIN/END-Footnote-1375923 +Node: I/O And BEGIN/END376029 +Node: BEGINFILE/ENDFILE378314 +Node: Empty381250 +Node: Using Shell Variables381567 +Node: Action Overview383850 +Node: Statements386195 +Node: If Statement388049 +Node: While Statement389548 +Node: Do Statement391592 +Node: For Statement392748 +Node: Switch Statement395900 +Node: Break Statement398003 +Node: Continue Statement400058 +Node: Next Statement401851 +Node: Nextfile Statement404241 +Node: Exit Statement406896 +Node: Built-in Variables409298 +Node: User-modified410394 +Ref: User-modified-Footnote-1418079 +Node: Auto-set418141 +Ref: Auto-set-Footnote-1430706 +Ref: Auto-set-Footnote-2430911 +Node: ARGC and ARGV430967 +Node: Arrays434821 +Node: Array Basics436319 +Node: Array Intro437145 +Ref: figure-array-elements439118 +Node: Reference to Elements441525 +Node: Assigning Elements443798 +Node: Array Example444289 +Node: Scanning an Array446021 +Node: Controlling Scanning449036 +Ref: Controlling Scanning-Footnote-1454209 +Node: Delete454525 +Ref: Delete-Footnote-1457290 +Node: Numeric Array Subscripts457347 +Node: Uninitialized Subscripts459530 +Node: Multidimensional461155 +Node: Multiscanning464248 +Node: Arrays of Arrays465837 +Node: Functions470477 +Node: Built-in471296 +Node: Calling Built-in472374 +Node: Numeric Functions474362 +Ref: Numeric Functions-Footnote-1478196 +Ref: Numeric Functions-Footnote-2478553 +Ref: Numeric Functions-Footnote-3478601 +Node: String Functions478870 +Ref: String Functions-Footnote-1501881 +Ref: String Functions-Footnote-2502010 +Ref: String Functions-Footnote-3502258 +Node: Gory Details502345 +Ref: table-sub-escapes504014 +Ref: table-sub-posix-92505368 +Ref: table-sub-proposed506719 +Ref: table-posix-sub508073 +Ref: table-gensub-escapes509618 +Ref: Gory Details-Footnote-1510794 +Ref: Gory Details-Footnote-2510845 +Node: I/O Functions510996 +Ref: I/O Functions-Footnote-1518119 +Node: Time Functions518266 +Ref: Time Functions-Footnote-1528730 +Ref: Time Functions-Footnote-2528798 +Ref: Time Functions-Footnote-3528956 +Ref: Time Functions-Footnote-4529067 +Ref: Time Functions-Footnote-5529179 +Ref: Time Functions-Footnote-6529406 +Node: Bitwise Functions529672 +Ref: table-bitwise-ops530234 +Ref: Bitwise Functions-Footnote-1534479 +Node: Type Functions534663 +Node: I18N Functions535805 +Node: User-defined537450 +Node: Definition Syntax538254 +Ref: Definition Syntax-Footnote-1543169 +Node: Function Example543238 +Ref: Function Example-Footnote-1545882 +Node: Function Caveats545904 +Node: Calling A Function546422 +Node: Variable Scope547377 +Node: Pass By Value/Reference550365 +Node: Return Statement553873 +Node: Dynamic Typing556855 +Node: Indirect Calls557784 +Node: Library Functions567471 +Ref: Library Functions-Footnote-1570984 +Ref: Library Functions-Footnote-2571127 +Node: Library Names571298 +Ref: Library Names-Footnote-1574771 +Ref: Library Names-Footnote-2574991 +Node: General Functions575077 +Node: Strtonum Function576105 +Node: Assert Function579035 +Node: Round Function582361 +Node: Cliff Random Function583902 +Node: Ordinal Functions584918 +Ref: Ordinal Functions-Footnote-1587995 +Ref: Ordinal Functions-Footnote-2588247 +Node: Join Function588458 +Ref: Join Function-Footnote-1590229 +Node: Getlocaltime Function590429 +Node: Readfile Function594170 +Node: Data File Management596009 +Node: Filetrans Function596641 +Node: Rewind Function600710 +Node: File Checking602097 +Node: Empty Files603191 +Node: Ignoring Assigns605421 +Node: Getopt Function606975 +Ref: Getopt Function-Footnote-1618278 +Node: Passwd Functions618481 +Ref: Passwd Functions-Footnote-1627459 +Node: Group Functions627547 +Node: Walking Arrays635631 +Node: Sample Programs637767 +Node: Running Examples638441 +Node: Clones639169 +Node: Cut Program640393 +Node: Egrep Program650244 +Ref: Egrep Program-Footnote-1658017 +Node: Id Program658127 +Node: Split Program661776 +Ref: Split Program-Footnote-1665295 +Node: Tee Program665423 +Node: Uniq Program668226 +Node: Wc Program675655 +Ref: Wc Program-Footnote-1679921 +Ref: Wc Program-Footnote-2680121 +Node: Miscellaneous Programs680213 +Node: Dupword Program681401 +Node: Alarm Program683432 +Node: Translate Program688239 +Ref: Translate Program-Footnote-1692626 +Ref: Translate Program-Footnote-2692874 +Node: Labels Program693008 +Ref: Labels Program-Footnote-1696379 +Node: Word Sorting696463 +Node: History Sorting700347 +Node: Extract Program702186 +Ref: Extract Program-Footnote-1709689 +Node: Simple Sed709817 +Node: Igawk Program712879 +Ref: Igawk Program-Footnote-1728050 +Ref: Igawk Program-Footnote-2728251 +Node: Anagram Program728389 +Node: Signature Program731457 +Node: Advanced Features732557 +Node: Nondecimal Data734443 +Node: Array Sorting736026 +Node: Controlling Array Traversal736723 +Node: Array Sorting Functions745007 +Ref: Array Sorting Functions-Footnote-1748876 +Node: Two-way I/O749070 +Ref: Two-way I/O-Footnote-1754502 +Node: TCP/IP Networking754584 +Node: Profiling757428 +Node: Internationalization764931 +Node: I18N and L10N766356 +Node: Explaining gettext767042 +Ref: Explaining gettext-Footnote-1772110 +Ref: Explaining gettext-Footnote-2772294 +Node: Programmer i18n772459 +Node: Translator i18n776686 +Node: String Extraction777480 +Ref: String Extraction-Footnote-1778441 +Node: Printf Ordering778527 +Ref: Printf Ordering-Footnote-1781309 +Node: I18N Portability781373 +Ref: I18N Portability-Footnote-1783822 +Node: I18N Example783885 +Ref: I18N Example-Footnote-1786523 +Node: Gawk I18N786595 +Node: Debugger787216 +Node: Debugging788187 +Node: Debugging Concepts788620 +Node: Debugging Terms790476 +Node: Awk Debugging793073 +Node: Sample Debugging Session793965 +Node: Debugger Invocation794485 +Node: Finding The Bug795818 +Node: List of Debugger Commands802305 +Node: Breakpoint Control803639 +Node: Debugger Execution Control807303 +Node: Viewing And Changing Data810663 +Node: Execution Stack814019 +Node: Debugger Info815486 +Node: Miscellaneous Debugger Commands819480 +Node: Readline Support824658 +Node: Limitations825489 +Node: Arbitrary Precision Arithmetic827741 +Ref: Arbitrary Precision Arithmetic-Footnote-1829390 +Node: General Arithmetic829538 +Node: Floating Point Issues831258 +Node: String Conversion Precision832139 +Ref: String Conversion Precision-Footnote-1833844 +Node: Unexpected Results833953 +Node: POSIX Floating Point Problems836106 +Ref: POSIX Floating Point Problems-Footnote-1839931 +Node: Integer Programming839969 +Node: Floating-point Programming841708 +Ref: Floating-point Programming-Footnote-1848039 +Ref: Floating-point Programming-Footnote-2848309 +Node: Floating-point Representation848573 +Node: Floating-point Context849738 +Ref: table-ieee-formats850577 +Node: Rounding Mode851961 +Ref: table-rounding-modes852440 +Ref: Rounding Mode-Footnote-1855455 +Node: Gawk and MPFR855634 +Node: Arbitrary Precision Floats857043 +Ref: Arbitrary Precision Floats-Footnote-1859486 +Node: Setting Precision859802 +Ref: table-predefined-precision-strings860488 +Node: Setting Rounding Mode862633 +Ref: table-gawk-rounding-modes863037 +Node: Floating-point Constants864224 +Node: Changing Precision865653 +Ref: Changing Precision-Footnote-1867050 +Node: Exact Arithmetic867224 +Node: Arbitrary Precision Integers870362 +Ref: Arbitrary Precision Integers-Footnote-1873377 +Node: Dynamic Extensions873524 +Node: Extension Intro874982 +Node: Plugin License876247 +Node: Extension Mechanism Outline876932 +Ref: load-extension877349 +Ref: load-new-function878827 +Ref: call-new-function879822 +Node: Extension API Description881837 +Node: Extension API Functions Introduction883124 +Node: General Data Types888051 +Ref: General Data Types-Footnote-1893746 +Node: Requesting Values894045 +Ref: table-value-types-returned894782 +Node: Memory Allocation Functions895736 +Ref: Memory Allocation Functions-Footnote-1898482 +Node: Constructor Functions898578 +Node: Registration Functions900336 +Node: Extension Functions901021 +Node: Exit Callback Functions903323 +Node: Extension Version String904572 +Node: Input Parsers905222 +Node: Output Wrappers914979 +Node: Two-way processors919489 +Node: Printing Messages921697 +Ref: Printing Messages-Footnote-1922774 +Node: Updating `ERRNO'922926 +Node: Accessing Parameters923665 +Node: Symbol Table Access924895 +Node: Symbol table by name925409 +Node: Symbol table by cookie927385 +Ref: Symbol table by cookie-Footnote-1931517 +Node: Cached values931580 +Ref: Cached values-Footnote-1935070 +Node: Array Manipulation935161 +Ref: Array Manipulation-Footnote-1936259 +Node: Array Data Types936298 +Ref: Array Data Types-Footnote-1939001 +Node: Array Functions939093 +Node: Flattening Arrays942929 +Node: Creating Arrays949781 +Node: Extension API Variables954506 +Node: Extension Versioning955142 +Node: Extension API Informational Variables957043 +Node: Extension API Boilerplate958129 +Node: Finding Extensions961933 +Node: Extension Example962493 +Node: Internal File Description963223 +Node: Internal File Ops967314 +Ref: Internal File Ops-Footnote-1978823 +Node: Using Internal File Ops978963 +Ref: Using Internal File Ops-Footnote-1981310 +Node: Extension Samples981576 +Node: Extension Sample File Functions983100 +Node: Extension Sample Fnmatch991587 +Node: Extension Sample Fork993356 +Node: Extension Sample Inplace994569 +Node: Extension Sample Ord996347 +Node: Extension Sample Readdir997183 +Node: Extension Sample Revout998715 +Node: Extension Sample Rev2way999308 +Node: Extension Sample Read write array999998 +Node: Extension Sample Readfile1001881 +Node: Extension Sample API Tests1002981 +Node: Extension Sample Time1003506 +Node: gawkextlib1004870 +Node: Language History1007651 +Node: V7/SVR3.11009244 +Node: SVR41011564 +Node: POSIX1013006 +Node: BTL1014392 +Node: POSIX/GNU1015126 +Node: Feature History1020725 +Node: Common Extensions1033701 +Node: Ranges and Locales1035013 +Ref: Ranges and Locales-Footnote-11039630 +Ref: Ranges and Locales-Footnote-21039657 +Ref: Ranges and Locales-Footnote-31039891 +Node: Contributors1040112 +Node: Installation1045493 +Node: Gawk Distribution1046387 +Node: Getting1046871 +Node: Extracting1047697 +Node: Distribution contents1049389 +Node: Unix Installation1055110 +Node: Quick Installation1055727 +Node: Additional Configuration Options1058173 +Node: Configuration Philosophy1059909 +Node: Non-Unix Installation1062263 +Node: PC Installation1062721 +Node: PC Binary Installation1064032 +Node: PC Compiling1065880 +Node: PC Testing1068840 +Node: PC Using1070016 +Node: Cygwin1074184 +Node: MSYS1074993 +Node: VMS Installation1075507 +Node: VMS Compilation1076303 +Ref: VMS Compilation-Footnote-11077555 +Node: VMS Dynamic Extensions1077613 +Node: VMS Installation Details1078986 +Node: VMS Running1081237 +Node: VMS GNV1084071 +Node: VMS Old Gawk1084794 +Node: Bugs1085264 +Node: Other Versions1089182 +Node: Notes1095266 +Node: Compatibility Mode1096066 +Node: Additions1096849 +Node: Accessing The Source1097776 +Node: Adding Code1099216 +Node: New Ports1105261 +Node: Derived Files1109396 +Ref: Derived Files-Footnote-11114717 +Ref: Derived Files-Footnote-21114751 +Ref: Derived Files-Footnote-31115351 +Node: Future Extensions1115449 +Node: Implementation Limitations1116032 +Node: Extension Design1117280 +Node: Old Extension Problems1118434 +Ref: Old Extension Problems-Footnote-11119942 +Node: Extension New Mechanism Goals1119999 +Ref: Extension New Mechanism Goals-Footnote-11123364 +Node: Extension Other Design Decisions1123550 +Node: Extension Future Growth1125656 +Node: Old Extension Mechanism1126492 +Node: Basic Concepts1128232 +Node: Basic High Level1128913 +Ref: figure-general-flow1129185 +Ref: figure-process-flow1129784 +Ref: Basic High Level-Footnote-11133013 +Node: Basic Data Typing1133198 +Node: Glossary1136553 +Node: Copying1161784 +Node: GNU Free Documentation License1199340 +Node: Index1224476  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index c69be641..10897efd 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -318,14 +318,12 @@ ISBN 1-882114-28-0 @* @page @w{ } @sp 9 -@center @i{To my parents, for their love, and for the wonderful -example they set for me.} +@center @i{To my parents, for their love, and for the wonderful example they set for me.} @sp 1 @center @i{To my wife Miriam, for making me complete. Thank you for building your life together with me.} @sp 1 -@center @i{To our children Chana, Rivka, Nachum and Malka, -for enrichening our lives in innumerable ways.} +@center @i{To our children Chana, Rivka, Nachum and Malka, for enrichening our lives in innumerable ways.} @sp 1 @w{ } @page @@ -986,7 +984,8 @@ for enrichening our lives in innumerable ways. Michael Brennan - Author of mawk + + Author of mawk March, 2001 @@ -1149,7 +1148,7 @@ invoke it with the proper options or environment variables (@pxref{Options}), it is fully compatible with the POSIX@footnote{The 2008 POSIX standard is accessable online at -@url{http://www.opengroup.org/onlinepubs/9699919799/}.} +@w{@url{http://www.opengroup.org/onlinepubs/9699919799/}.}} specification of the @command{awk} language and with the Unix version of @command{awk} maintained by Brian Kernighan. @@ -1227,10 +1226,10 @@ up through large-scale systems. @command{gawk} has also been ported to Mac OS X, Microsoft Windows @ifset FOR_PRINT -(all versions) and OS/2 PCs, +(all versions), @end ifset @ifclear FOR_PRINT -(all versions), +(all versions) and OS/2 PCs, @end ifclear and OpenVMS. (Some other, obsolete systems to which @command{gawk} was once ported @@ -1517,9 +1516,14 @@ describes advanced arithmetic facilities provided by @ref{Dynamic Extensions}, describes how to add new variables and functions to @command{gawk} by writing extensions in C or C++. +@ifclear FOR_PRINT Part IV provides the appendices, the Glossary, and two licenses that cover the @command{gawk} source code and this @value{DOCUMENT}, respectively. It contains the following appendices: +@end ifclear +@ifset FOR_PRINT +Part IV provides the following appendices: +@end ifset @ref{Language History}, describes how the @command{awk} language has evolved since @@ -1535,7 +1539,9 @@ in @command{gawk} and where to get other freely available @command{awk} implementations. @ifset FOR_PRINT -To save space, we have omitted some of the appendices from this +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 printed edition. You may find them online, as follows: @uref{http://www.gnu.org/software/gawk/manual/html_node/Notes.html} @@ -1550,12 +1556,12 @@ are completely unfamiliar with computer programming. @uref{http://www.gnu.org/software/gawk/manual/html_node/Glossary.html, The Glossary} defines most, if not all, the significant terms used -throughout the book. If you find terms that you aren't familiar with, +throughout the @value{DOCUMENT}. If you find terms that you aren't familiar with, try looking them up here. -@uref{http://www.gnu.org/software/gawk/manual/html_node/Copying.html} and -@uref{http://www.gnu.org/software/gawk/manual/html_node/GNU-Free-Documentation-License.html} -present the licenses that cover the @command{gawk} source code +@uref{http://www.gnu.org/software/gawk/manual/html_node/Copying.html, The GNU GPL} and +@uref{http://www.gnu.org/software/gawk/manual/html_node/GNU-Free-Documentation-License.html, the GNU FDL} +are the licenses that cover the @command{gawk} source code and this @value{DOCUMENT}, respectively. @end ifset @@ -1570,7 +1576,7 @@ provides some very cursory background material for those who are completely unfamiliar with computer programming. The @ref{Glossary}, defines most, if not all, the significant terms used -throughout the book. If you find terms that you aren't familiar with, +throughout the @value{DOCUMENT}. If you find terms that you aren't familiar with, try looking them up here. @ref{Copying}, and @@ -1682,13 +1688,15 @@ 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 always available to the end user. A -copy of the GPL is included +source code is always available to the end user. +@ifclear FOR_PRINT +A copy of the GPL is included @ifnotinfo in this @value{DOCUMENT} @end ifnotinfo for your reference (@pxref{Copying}). +@end ifclear The GPL applies to the C language source code for @command{gawk}. To find out more about the FSF and the GNU Project online, see @uref{http://www.gnu.org, the GNU Project's home page}. @@ -1711,8 +1719,13 @@ consider using GNU/Linux, a freely distributable, Unix-like operating system for Intel@registeredsymbol{}, Power Architecture, Sun SPARC, IBM S/390, and other +@ifclear FOR_PRINT systems.@footnote{The terminology ``GNU/Linux'' is explained in the @ref{Glossary}.} +@end ifclear +@ifset FOR_PRINT +systems. +@end ifset Many GNU/Linux distributions are available for download from the Internet. @@ -1732,8 +1745,11 @@ The @value{DOCUMENT} you are reading is actually free---at least, the information in it is free to anyone. The machine-readable source code for the @value{DOCUMENT} comes with @command{gawk}; anyone may take this @value{DOCUMENT} to a copying machine and make as many -copies as they like. (Take a moment to check the Free Documentation +copies as they like. +@ifclear FOR_PRINT +(Take a moment to check the Free Documentation License in @ref{GNU Free Documentation License}.) +@end ifclear @end ifnotinfo @ignore @@ -3285,8 +3301,14 @@ edit-compile-test-debug cycle of software development. @cindex Brian Kernighan's @command{awk} Complex programs have been written in @command{awk}, including a complete -retargetable assembler for eight-bit microprocessors (@pxref{Glossary}, for -more information), and a microcode assembler for a special-purpose Prolog +retargetable assembler for +@ifclear FOR_PRINT +eight-bit microprocessors (@pxref{Glossary}, for more information), +@end ifclear +@ifset FOR_PRINT +eight-bit microprocessors, +@end ifset +and a microcode assembler for a special-purpose Prolog computer. While the original @command{awk}'s capabilities were strained by tasks of such complexity, modern versions are more capable. Even Brian Kernighan's @@ -3514,8 +3536,11 @@ Specify @dfn{compatibility mode}, in which the GNU extensions to the @command{awk} language are disabled, so that @command{gawk} behaves just like Brian Kernighan's version @command{awk}. @xref{POSIX/GNU}, -which summarizes the extensions. Also see +which summarizes the extensions. +@ifclear FOR_PRINT +Also see @ref{Compatibility Mode}. +@end ifclear @item @option{-C} @itemx @option{--copyright} @@ -17670,8 +17695,13 @@ particular log record was written. Many programs log their timestamp 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 -1970-01-01 00:00:00 UTC, not counting leap seconds.@footnote{@xref{Glossary}, -especially the entries ``Epoch'' and ``UTC.''} +1970-01-01 00:00:00 UTC, not counting leap +@ifclear FOR_PRINT +seconds.@footnote{@xref{Glossary}, especially the entries ``Epoch'' and ``UTC.''} +@end ifclear +@ifset FOR_PRINT +seconds. +@end ifset All known POSIX-compliant systems support timestamps from 0 through @iftex @math{2^{31} - 1}, @@ -19543,9 +19573,11 @@ these example library functions and programs from the Texinfo source for this @value{DOCUMENT}. (This has already been done as part of the @command{gawk} distribution.) +@ifclear FOR_PRINT If you have written one or more useful, general-purpose @command{awk} functions and would like to contribute them to the @command{awk} user community, see @ref{How To Contribute}, for more information. +@end ifclear @cindex portability, example programs The programs in this @value{CHAPTER} and in @@ -30156,8 +30188,15 @@ the facilities that the API provides and how to use them, and presents a small sample extension. In addition, it documents 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 goals and design. +@end ifclear +@ifset FOR_PRINT +See @uref{http://www.gnu.org/software/gawk/manual/html_node/Extension-Design.html} +for a discussion of the extension mechanism +goals and design. +@end ifset @node Plugin License @section Extension Licensing @@ -30613,8 +30652,11 @@ reading and/or changing the value of one or more scalar variables, you can obtain a @dfn{scalar cookie}@footnote{See @uref{http://catb.org/jargon/html/C/cookie.html, the ``cookie'' entry in the Jargon file} for a definition of @dfn{cookie}, and @uref{http://catb.org/jargon/html/M/magic-cookie.html, -the ``magic cookie'' entry in the Jargon file} for a nice example. See -also the entry for ``Cookie'' in the @ref{Glossary}.} +the ``magic cookie'' entry in the Jargon file} for a nice example. +@ifclear FOR_PRINT +See also the entry for ``Cookie'' in the @ref{Glossary}. +@end ifclear +} object for that variable, and then use the cookie for getting the variable's value or for changing the variable's value. @@ -32492,8 +32534,14 @@ These variables and functions are as follows: @table @code @item int plugin_is_GPL_compatible; -This asserts that the extension is compatible with the GNU GPL -(@pxref{Copying}). If your extension does not have this, @command{gawk} +This asserts that the extension is compatible with +@ifclear FOR_PRINT +the GNU GPL (@pxref{Copying}). +@end ifclear +@ifset FOR_PRINT +the GNU GPL. +@end ifset +If your extension does not have this, @command{gawk} will not load it (@pxref{Plugin License}). @item static gawk_api_t *const api; @@ -35915,7 +35963,10 @@ the sample extensions included with @command{gawk}. Files needed for building @command{gawk} on POSIX-compliant systems. @item pc/* -Files needed for building @command{gawk} under MS-Windows and OS/2 +Files needed for building @command{gawk} under MS-Windows +@ifclear FOR_PRINT +and OS/2 +@end ifclear (@pxref{PC Installation}, for details). @item vms/* @@ -36146,16 +36197,21 @@ various non-Unix systems. @cindex PC operating systems@comma{} @command{gawk} on, installing @cindex operating systems, PC@comma{} @command{gawk} on, installing This @value{SECTION} covers installation and usage of @command{gawk} on x86 machines +@ifclear FOR_PRINT running MS-DOS, any version of MS-Windows, or OS/2. +@end ifclear +@ifset FOR_PRINT +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. +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 Windows32 or OS/2) has 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, please refer to @file{README_d/README.pc} in the -distribution. +The limitations of MS-DOS (and MS-DOS shells under the other operating +systems) has 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, please refer to @file{README_d/README.pc} in +the distribution. @menu * PC Binary Installation:: Installing a prepared distribution. @@ -36169,6 +36225,7 @@ distribution. * MSYS:: Using @command{gawk} In The MSYS Environment. @end menu +@ifclear FOR_PRINT @node PC Binary Installation @appendixsubsubsec Installing a Prepared Distribution for PC Systems @@ -36207,13 +36264,21 @@ install-info --info-dir=x:/usr/info x:/usr/info/gawkinet.info The binary distribution may contain a separate file containing additional or more detailed installation instructions. +@end ifclear @node PC Compiling @appendixsubsubsec Compiling @command{gawk} for PC Operating Systems +@ifclear FOR_PRINT @command{gawk} can be compiled for MS-DOS, Windows32, and OS/2 using the GNU -development tools from DJ Delorie (DJGPP: MS-DOS only) or Eberhard -Mattes (EMX: MS-DOS, Windows32 and OS/2). The file +development tools from DJ Delorie (DJGPP: MS-DOS only), MinGW (Windows32) or Eberhard +Mattes (EMX: MS-DOS, Windows32 and OS/2). +@end ifclear +@ifset FOR_PRINT +@command{gawk} can be compiled for MS-DOS and Windows32 using the GNU +development tools from DJ Delorie (DJGPP: MS-DOS only) or MinGW (Windows32). +@end ifset +The file @file{README_d/README.pc} in the @command{gawk} distribution contains additional notes, and @file{pc/Makefile} contains important information on compilation options. @@ -36235,6 +36300,7 @@ build @command{gawk} using the DJGPP tools, enter @samp{make djgpp}. @uref{ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/}.) To build a native MS-Windows binary of @command{gawk}, type @samp{make mingw32}. +@ifclear FOR_PRINT @cindex compiling @command{gawk} with EMX for OS/2 The 32 bit EMX version of @command{gawk} works ``out of the box'' under OS/2. However, it is highly recommended to use GCC 2.95.3 for the compilation. @@ -36308,6 +36374,7 @@ the Makefiles of this package. If you encounter any problems with find the latest version on @uref{ftp://hobbes.nmsu.edu/pub/os2/}. @end quotation +@end ifclear @node PC Testing @appendixsubsubsec Testing @command{gawk} on PC Operating Systems @@ -36319,6 +36386,7 @@ be converted so that they have the usual MS-DOS-style end-of-line markers. Alternatively, run @command{make check CMP="diff -a"} to use GNU @command{diff} in text mode instead of @command{cmp} to compare the resulting files. +@ifclear FOR_PRINT Most of the tests work properly with Stewartson's shell along with the companion utilities or appropriate GNU utilities. However, some editing of @@ -36331,7 +36399,7 @@ On OS/2 the @code{pid} test fails because @code{spawnl()} is used instead of @code{fork()}/@code{execl()} to start child processes. Also the @code{mbfw1} and @code{mbprintf1} tests fail because the needed multibyte functionality is not available. - +@end ifclear @node PC Using @appendixsubsubsec Using @command{gawk} on PC Operating Systems @@ -36343,11 +36411,12 @@ multibyte functionality is not available. Under MS-DOS and MS-Windows, the Cygwin and MinGW environments support both the @samp{|&} operator and TCP/IP networking (@pxref{TCP/IP Networking}). +@ifclear FOR_PRINT EMX (OS/2 only) supports at least the @samp{|&} operator. +@end ifclear @cindex search paths @cindex search paths, for source files -@cindex @command{gawk}, OS/2 version of @cindex @command{gawk}, MS-DOS version of @cindex @command{gawk}, MS-Windows version of @cindex @code{;} (semicolon), @code{AWKPATH} variable and @@ -36360,6 +36429,8 @@ variable. If @env{AWKPATH} is not set or is empty, then the default search path for MS-Windows and MS-DOS versions is @code{@w{".;c:/lib/awk;c:/gnu/lib/awk"}}. +@ifclear FOR_PRINT +@cindex @command{gawk}, OS/2 version of @cindex @code{UNIXROOT} variable, on OS/2 systems The search path for OS/2 (32 bit, EMX) is determined by the prefix directory (most likely @file{/usr} or @file{c:/usr}) that has been specified as an option of @@ -36377,12 +36448,24 @@ An @command{sh}-like shell (as opposed to @command{command.com} under MS-DOS or @command{cmd.exe} under MS-Windows or OS/2) may be useful for @command{awk} programming. The DJGPP collection of tools includes an MS-DOS port of Bash, and several shells are available for OS/2, including @command{ksh}. +@end ifclear +@ifset FOR_PRINT +An @command{sh}-like shell (as opposed to @command{command.com} under MS-DOS +or @command{cmd.exe} under MS-Windows) may be useful for @command{awk} programming. +The DJGPP collection of tools includes an MS-DOS port of Bash. +@end ifset @cindex common extensions, @code{BINMODE} variable @cindex extensions, common@comma{} @code{BINMODE} variable @cindex differences in @command{awk} and @command{gawk}, @code{BINMODE} variable @cindex @code{BINMODE} variable -Under MS-Windows, OS/2 and MS-DOS, @command{gawk} (and many other text programs) silently +@ifclear FOR_PRINT +Under MS-Windows, OS/2 and MS-DOS, +@end ifclear +@ifset FOR_PRINT +Under MS-Windows and MS-DOS, +@end ifset +@command{gawk} (and many other text programs) silently translate end-of-line @code{"\r\n"} to @code{"\n"} on input and @code{"\n"} to @code{"\r\n"} on output. A special @code{BINMODE} variable @value{COMMONEXT} allows control over these translations and is interpreted as follows: @@ -36926,6 +37009,8 @@ as follows: @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. OS/2 not mentioned anywhere else +@c in the print version though. @item OS/2 @tab Andreas Buening, @EMAIL{andreas.buening@@nexgo.de,andreas dot buening at nexgo dot de}. @item VMS @tab Pat Rankin, @EMAIL{r.pat.rankin@@gmail.com,r.pat.rankin at gmail.com}, and @@ -37008,8 +37093,13 @@ for a list of extensions in this @command{awk} that are not in POSIX @command{aw @cindex source code, @command{mawk} @item @command{mawk} Michael Brennan wrote an independent implementation of @command{awk}, -called @command{mawk}. It is available under the GPL -(@pxref{Copying}), +called @command{mawk}. It is available under the +@ifclear FOR_PRINT +GPL (@pxref{Copying}), +@end ifclear +@ifset FOR_PRINT +GPL, +@end ifset just as @command{gawk} is. The original distribution site for the @command{mawk} source code diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 6e1b9fba..f54748e6 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -313,14 +313,12 @@ ISBN 1-882114-28-0 @* @page @w{ } @sp 9 -@center @i{To my parents, for their love, and for the wonderful -example they set for me.} +@center @i{To my parents, for their love, and for the wonderful example they set for me.} @sp 1 @center @i{To my wife Miriam, for making me complete. Thank you for building your life together with me.} @sp 1 -@center @i{To our children Chana, Rivka, Nachum and Malka, -for enrichening our lives in innumerable ways.} +@center @i{To our children Chana, Rivka, Nachum and Malka, for enrichening our lives in innumerable ways.} @sp 1 @w{ } @page @@ -981,7 +979,8 @@ for enrichening our lives in innumerable ways. Michael Brennan - Author of mawk + + Author of mawk March, 2001 @@ -1144,7 +1143,7 @@ invoke it with the proper options or environment variables (@pxref{Options}), it is fully compatible with the POSIX@footnote{The 2008 POSIX standard is accessable online at -@url{http://www.opengroup.org/onlinepubs/9699919799/}.} +@w{@url{http://www.opengroup.org/onlinepubs/9699919799/}.}} specification of the @command{awk} language and with the Unix version of @command{awk} maintained by Brian Kernighan. @@ -1222,10 +1221,10 @@ up through large-scale systems. @command{gawk} has also been ported to Mac OS X, Microsoft Windows @ifset FOR_PRINT -(all versions) and OS/2 PCs, +(all versions), @end ifset @ifclear FOR_PRINT -(all versions), +(all versions) and OS/2 PCs, @end ifclear and OpenVMS. (Some other, obsolete systems to which @command{gawk} was once ported @@ -1484,9 +1483,14 @@ describes advanced arithmetic facilities provided by @ref{Dynamic Extensions}, describes how to add new variables and functions to @command{gawk} by writing extensions in C or C++. +@ifclear FOR_PRINT Part IV provides the appendices, the Glossary, and two licenses that cover the @command{gawk} source code and this @value{DOCUMENT}, respectively. It contains the following appendices: +@end ifclear +@ifset FOR_PRINT +Part IV provides the following appendices: +@end ifset @ref{Language History}, describes how the @command{awk} language has evolved since @@ -1502,7 +1506,9 @@ in @command{gawk} and where to get other freely available @command{awk} implementations. @ifset FOR_PRINT -To save space, we have omitted some of the appendices from this +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 printed edition. You may find them online, as follows: @uref{http://www.gnu.org/software/gawk/manual/html_node/Notes.html} @@ -1517,12 +1523,12 @@ are completely unfamiliar with computer programming. @uref{http://www.gnu.org/software/gawk/manual/html_node/Glossary.html, The Glossary} defines most, if not all, the significant terms used -throughout the book. If you find terms that you aren't familiar with, +throughout the @value{DOCUMENT}. If you find terms that you aren't familiar with, try looking them up here. -@uref{http://www.gnu.org/software/gawk/manual/html_node/Copying.html} and -@uref{http://www.gnu.org/software/gawk/manual/html_node/GNU-Free-Documentation-License.html} -present the licenses that cover the @command{gawk} source code +@uref{http://www.gnu.org/software/gawk/manual/html_node/Copying.html, The GNU GPL} and +@uref{http://www.gnu.org/software/gawk/manual/html_node/GNU-Free-Documentation-License.html, the GNU FDL} +are the licenses that cover the @command{gawk} source code and this @value{DOCUMENT}, respectively. @end ifset @@ -1537,7 +1543,7 @@ provides some very cursory background material for those who are completely unfamiliar with computer programming. The @ref{Glossary}, defines most, if not all, the significant terms used -throughout the book. If you find terms that you aren't familiar with, +throughout the @value{DOCUMENT}. If you find terms that you aren't familiar with, try looking them up here. @ref{Copying}, and @@ -1649,13 +1655,15 @@ 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 always available to the end user. A -copy of the GPL is included +source code is always available to the end user. +@ifclear FOR_PRINT +A copy of the GPL is included @ifnotinfo in this @value{DOCUMENT} @end ifnotinfo for your reference (@pxref{Copying}). +@end ifclear The GPL applies to the C language source code for @command{gawk}. To find out more about the FSF and the GNU Project online, see @uref{http://www.gnu.org, the GNU Project's home page}. @@ -1678,8 +1686,13 @@ consider using GNU/Linux, a freely distributable, Unix-like operating system for Intel@registeredsymbol{}, Power Architecture, Sun SPARC, IBM S/390, and other +@ifclear FOR_PRINT systems.@footnote{The terminology ``GNU/Linux'' is explained in the @ref{Glossary}.} +@end ifclear +@ifset FOR_PRINT +systems. +@end ifset Many GNU/Linux distributions are available for download from the Internet. @@ -1699,8 +1712,11 @@ The @value{DOCUMENT} you are reading is actually free---at least, the information in it is free to anyone. The machine-readable source code for the @value{DOCUMENT} comes with @command{gawk}; anyone may take this @value{DOCUMENT} to a copying machine and make as many -copies as they like. (Take a moment to check the Free Documentation +copies as they like. +@ifclear FOR_PRINT +(Take a moment to check the Free Documentation License in @ref{GNU Free Documentation License}.) +@end ifclear @end ifnotinfo @ignore @@ -3213,8 +3229,14 @@ edit-compile-test-debug cycle of software development. @cindex Brian Kernighan's @command{awk} Complex programs have been written in @command{awk}, including a complete -retargetable assembler for eight-bit microprocessors (@pxref{Glossary}, for -more information), and a microcode assembler for a special-purpose Prolog +retargetable assembler for +@ifclear FOR_PRINT +eight-bit microprocessors (@pxref{Glossary}, for more information), +@end ifclear +@ifset FOR_PRINT +eight-bit microprocessors, +@end ifset +and a microcode assembler for a special-purpose Prolog computer. While the original @command{awk}'s capabilities were strained by tasks of such complexity, modern versions are more capable. Even Brian Kernighan's @@ -3442,8 +3464,11 @@ Specify @dfn{compatibility mode}, in which the GNU extensions to the @command{awk} language are disabled, so that @command{gawk} behaves just like Brian Kernighan's version @command{awk}. @xref{POSIX/GNU}, -which summarizes the extensions. Also see +which summarizes the extensions. +@ifclear FOR_PRINT +Also see @ref{Compatibility Mode}. +@end ifclear @item @option{-C} @itemx @option{--copyright} @@ -16843,8 +16868,13 @@ particular log record was written. Many programs log their timestamp 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 -1970-01-01 00:00:00 UTC, not counting leap seconds.@footnote{@xref{Glossary}, -especially the entries ``Epoch'' and ``UTC.''} +1970-01-01 00:00:00 UTC, not counting leap +@ifclear FOR_PRINT +seconds.@footnote{@xref{Glossary}, especially the entries ``Epoch'' and ``UTC.''} +@end ifclear +@ifset FOR_PRINT +seconds. +@end ifset All known POSIX-compliant systems support timestamps from 0 through @iftex @math{2^{31} - 1}, @@ -18716,9 +18746,11 @@ these example library functions and programs from the Texinfo source for this @value{DOCUMENT}. (This has already been done as part of the @command{gawk} distribution.) +@ifclear FOR_PRINT If you have written one or more useful, general-purpose @command{awk} functions and would like to contribute them to the @command{awk} user community, see @ref{How To Contribute}, for more information. +@end ifclear @cindex portability, example programs The programs in this @value{CHAPTER} and in @@ -29300,8 +29332,15 @@ the facilities that the API provides and how to use them, and presents a small sample extension. In addition, it documents 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 goals and design. +@end ifclear +@ifset FOR_PRINT +See @uref{http://www.gnu.org/software/gawk/manual/html_node/Extension-Design.html} +for a discussion of the extension mechanism +goals and design. +@end ifset @node Plugin License @section Extension Licensing @@ -29757,8 +29796,11 @@ reading and/or changing the value of one or more scalar variables, you can obtain a @dfn{scalar cookie}@footnote{See @uref{http://catb.org/jargon/html/C/cookie.html, the ``cookie'' entry in the Jargon file} for a definition of @dfn{cookie}, and @uref{http://catb.org/jargon/html/M/magic-cookie.html, -the ``magic cookie'' entry in the Jargon file} for a nice example. See -also the entry for ``Cookie'' in the @ref{Glossary}.} +the ``magic cookie'' entry in the Jargon file} for a nice example. +@ifclear FOR_PRINT +See also the entry for ``Cookie'' in the @ref{Glossary}. +@end ifclear +} object for that variable, and then use the cookie for getting the variable's value or for changing the variable's value. @@ -31636,8 +31678,14 @@ These variables and functions are as follows: @table @code @item int plugin_is_GPL_compatible; -This asserts that the extension is compatible with the GNU GPL -(@pxref{Copying}). If your extension does not have this, @command{gawk} +This asserts that the extension is compatible with +@ifclear FOR_PRINT +the GNU GPL (@pxref{Copying}). +@end ifclear +@ifset FOR_PRINT +the GNU GPL. +@end ifset +If your extension does not have this, @command{gawk} will not load it (@pxref{Plugin License}). @item static gawk_api_t *const api; @@ -35059,7 +35107,10 @@ the sample extensions included with @command{gawk}. Files needed for building @command{gawk} on POSIX-compliant systems. @item pc/* -Files needed for building @command{gawk} under MS-Windows and OS/2 +Files needed for building @command{gawk} under MS-Windows +@ifclear FOR_PRINT +and OS/2 +@end ifclear (@pxref{PC Installation}, for details). @item vms/* @@ -35290,16 +35341,21 @@ various non-Unix systems. @cindex PC operating systems@comma{} @command{gawk} on, installing @cindex operating systems, PC@comma{} @command{gawk} on, installing This @value{SECTION} covers installation and usage of @command{gawk} on x86 machines +@ifclear FOR_PRINT running MS-DOS, any version of MS-Windows, or OS/2. +@end ifclear +@ifset FOR_PRINT +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. +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 Windows32 or OS/2) has 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, please refer to @file{README_d/README.pc} in the -distribution. +The limitations of MS-DOS (and MS-DOS shells under the other operating +systems) has 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, please refer to @file{README_d/README.pc} in +the distribution. @menu * PC Binary Installation:: Installing a prepared distribution. @@ -35313,6 +35369,7 @@ distribution. * MSYS:: Using @command{gawk} In The MSYS Environment. @end menu +@ifclear FOR_PRINT @node PC Binary Installation @appendixsubsubsec Installing a Prepared Distribution for PC Systems @@ -35351,13 +35408,21 @@ install-info --info-dir=x:/usr/info x:/usr/info/gawkinet.info The binary distribution may contain a separate file containing additional or more detailed installation instructions. +@end ifclear @node PC Compiling @appendixsubsubsec Compiling @command{gawk} for PC Operating Systems +@ifclear FOR_PRINT @command{gawk} can be compiled for MS-DOS, Windows32, and OS/2 using the GNU -development tools from DJ Delorie (DJGPP: MS-DOS only) or Eberhard -Mattes (EMX: MS-DOS, Windows32 and OS/2). The file +development tools from DJ Delorie (DJGPP: MS-DOS only), MinGW (Windows32) or Eberhard +Mattes (EMX: MS-DOS, Windows32 and OS/2). +@end ifclear +@ifset FOR_PRINT +@command{gawk} can be compiled for MS-DOS and Windows32 using the GNU +development tools from DJ Delorie (DJGPP: MS-DOS only) or MinGW (Windows32). +@end ifset +The file @file{README_d/README.pc} in the @command{gawk} distribution contains additional notes, and @file{pc/Makefile} contains important information on compilation options. @@ -35379,6 +35444,7 @@ build @command{gawk} using the DJGPP tools, enter @samp{make djgpp}. @uref{ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/}.) To build a native MS-Windows binary of @command{gawk}, type @samp{make mingw32}. +@ifclear FOR_PRINT @cindex compiling @command{gawk} with EMX for OS/2 The 32 bit EMX version of @command{gawk} works ``out of the box'' under OS/2. However, it is highly recommended to use GCC 2.95.3 for the compilation. @@ -35452,6 +35518,7 @@ the Makefiles of this package. If you encounter any problems with find the latest version on @uref{ftp://hobbes.nmsu.edu/pub/os2/}. @end quotation +@end ifclear @node PC Testing @appendixsubsubsec Testing @command{gawk} on PC Operating Systems @@ -35463,6 +35530,7 @@ be converted so that they have the usual MS-DOS-style end-of-line markers. Alternatively, run @command{make check CMP="diff -a"} to use GNU @command{diff} in text mode instead of @command{cmp} to compare the resulting files. +@ifclear FOR_PRINT Most of the tests work properly with Stewartson's shell along with the companion utilities or appropriate GNU utilities. However, some editing of @@ -35475,7 +35543,7 @@ On OS/2 the @code{pid} test fails because @code{spawnl()} is used instead of @code{fork()}/@code{execl()} to start child processes. Also the @code{mbfw1} and @code{mbprintf1} tests fail because the needed multibyte functionality is not available. - +@end ifclear @node PC Using @appendixsubsubsec Using @command{gawk} on PC Operating Systems @@ -35487,11 +35555,12 @@ multibyte functionality is not available. Under MS-DOS and MS-Windows, the Cygwin and MinGW environments support both the @samp{|&} operator and TCP/IP networking (@pxref{TCP/IP Networking}). +@ifclear FOR_PRINT EMX (OS/2 only) supports at least the @samp{|&} operator. +@end ifclear @cindex search paths @cindex search paths, for source files -@cindex @command{gawk}, OS/2 version of @cindex @command{gawk}, MS-DOS version of @cindex @command{gawk}, MS-Windows version of @cindex @code{;} (semicolon), @code{AWKPATH} variable and @@ -35504,6 +35573,8 @@ variable. If @env{AWKPATH} is not set or is empty, then the default search path for MS-Windows and MS-DOS versions is @code{@w{".;c:/lib/awk;c:/gnu/lib/awk"}}. +@ifclear FOR_PRINT +@cindex @command{gawk}, OS/2 version of @cindex @code{UNIXROOT} variable, on OS/2 systems The search path for OS/2 (32 bit, EMX) is determined by the prefix directory (most likely @file{/usr} or @file{c:/usr}) that has been specified as an option of @@ -35521,12 +35592,24 @@ An @command{sh}-like shell (as opposed to @command{command.com} under MS-DOS or @command{cmd.exe} under MS-Windows or OS/2) may be useful for @command{awk} programming. The DJGPP collection of tools includes an MS-DOS port of Bash, and several shells are available for OS/2, including @command{ksh}. +@end ifclear +@ifset FOR_PRINT +An @command{sh}-like shell (as opposed to @command{command.com} under MS-DOS +or @command{cmd.exe} under MS-Windows) may be useful for @command{awk} programming. +The DJGPP collection of tools includes an MS-DOS port of Bash. +@end ifset @cindex common extensions, @code{BINMODE} variable @cindex extensions, common@comma{} @code{BINMODE} variable @cindex differences in @command{awk} and @command{gawk}, @code{BINMODE} variable @cindex @code{BINMODE} variable -Under MS-Windows, OS/2 and MS-DOS, @command{gawk} (and many other text programs) silently +@ifclear FOR_PRINT +Under MS-Windows, OS/2 and MS-DOS, +@end ifclear +@ifset FOR_PRINT +Under MS-Windows and MS-DOS, +@end ifset +@command{gawk} (and many other text programs) silently translate end-of-line @code{"\r\n"} to @code{"\n"} on input and @code{"\n"} to @code{"\r\n"} on output. A special @code{BINMODE} variable @value{COMMONEXT} allows control over these translations and is interpreted as follows: @@ -36070,6 +36153,8 @@ as follows: @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. OS/2 not mentioned anywhere else +@c in the print version though. @item OS/2 @tab Andreas Buening, @EMAIL{andreas.buening@@nexgo.de,andreas dot buening at nexgo dot de}. @item VMS @tab Pat Rankin, @EMAIL{r.pat.rankin@@gmail.com,r.pat.rankin at gmail.com}, and @@ -36152,8 +36237,13 @@ for a list of extensions in this @command{awk} that are not in POSIX @command{aw @cindex source code, @command{mawk} @item @command{mawk} Michael Brennan wrote an independent implementation of @command{awk}, -called @command{mawk}. It is available under the GPL -(@pxref{Copying}), +called @command{mawk}. It is available under the +@ifclear FOR_PRINT +GPL (@pxref{Copying}), +@end ifclear +@ifset FOR_PRINT +GPL, +@end ifset just as @command{gawk} is. The original distribution site for the @command{mawk} source code -- cgit v1.2.3 From a2a25b2e5841a2aac5e8b78b97dec88feb1e7144 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 14 May 2014 22:11:34 +0300 Subject: Sync with GNU grep. --- ChangeLog | 5 + custom.h | 8 ++ dfa.c | 420 ++++++++++++++++++++++++++++++++++---------------------------- dfa.h | 18 ++- 4 files changed, 252 insertions(+), 199 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8e298dfd..e67e51bc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-05-14 Arnold D. Robbins + + * custom.h (_GL_PURE): Move definition to here. Sigh. + * dfa.h, dfa.c: Sync with GNU grep. Sigh. + 2014-05-11 Arnold D. Robbins * debug.c (do_eval): Repair fix of 2014-05-09 and use diff --git a/custom.h b/custom.h index 36b4aa0b..e336cd3c 100644 --- a/custom.h +++ b/custom.h @@ -76,3 +76,11 @@ extern int setenv(const char *name, const char *value, int rewrite); extern int unsetenv(const char *name); #endif + +/* Junk for dfa.[ch] */ +/* The __pure__ attribute was added in gcc 2.96. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE /* empty */ +#endif diff --git a/dfa.c b/dfa.c index d306d5c9..c959ad4f 100644 --- a/dfa.c +++ b/dfa.c @@ -55,7 +55,6 @@ host does not conform to Posix. */ #define ISASCIIDIGIT(c) ((unsigned) (c) - '0' <= 9) -/* gettext.h ensures that we don't use gettext if ENABLE_NLS is not defined */ #include "gettext.h" #define _(str) gettext (str) @@ -66,15 +65,6 @@ # include #endif -#ifdef GAWK -/* The __pure__ attribute was added in gcc 2.96. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -# define _GL_ATTRIBUTE_PURE /* empty */ -#endif -#endif /* GAWK */ - #include "xalloc.h" #include "dfa.h" @@ -103,24 +93,29 @@ extern int gawk_mb_cur_max; # undef clrbit #endif -/* Number of bits in an unsigned char. */ -#ifndef CHARBITS -# define CHARBITS 8 -#endif - /* First integer value that is greater than any character code. */ -#define NOTCHAR (1 << CHARBITS) +enum { NOTCHAR = 1 << CHAR_BIT }; -/* INTBITS need not be exact, just a lower bound. */ -#ifndef INTBITS -# define INTBITS (CHARBITS * sizeof (int)) -#endif +/* This represents part of a character class. It must be unsigned and + at least CHARCLASS_WORD_BITS wide. Any excess bits are zero. */ +typedef unsigned int charclass_word; + +/* The number of bits used in a charclass word. utf8_classes assumes + this is exactly 32. */ +enum { CHARCLASS_WORD_BITS = 32 }; -/* Number of ints required to hold a bit for every character. */ -#define CHARCLASS_INTS ((NOTCHAR + INTBITS - 1) / INTBITS) +/* The maximum useful value of a charclass_word; all used bits are 1. */ +#define CHARCLASS_WORD_MASK \ + (((charclass_word) 1 << (CHARCLASS_WORD_BITS - 1) << 1) - 1) + +/* Number of words required to hold a bit for every character. */ +enum +{ + CHARCLASS_WORDS = (NOTCHAR + CHARCLASS_WORD_BITS - 1) / CHARCLASS_WORD_BITS +}; /* Sets of unsigned characters are stored as bit vectors in arrays of ints. */ -typedef unsigned int charclass[CHARCLASS_INTS]; +typedef charclass_word charclass[CHARCLASS_WORDS]; /* Convert a possibly-signed character to an unsigned character. This is a bit safer than casting to unsigned char, since it catches some type @@ -223,27 +218,25 @@ enum a backtracking matcher. */ BEGLINE, /* BEGLINE is a terminal symbol that matches - the empty string if it is at the beginning - of a line. */ + the empty string at the beginning of a + line. */ ENDLINE, /* ENDLINE is a terminal symbol that matches - the empty string if it is at the end of - a line. */ + the empty string at the end of a line. */ BEGWORD, /* BEGWORD is a terminal symbol that matches - the empty string if it is at the beginning - of a word. */ + the empty string at the beginning of a + word. */ ENDWORD, /* ENDWORD is a terminal symbol that matches - the empty string if it is at the end of - a word. */ + the empty string at the end of a word. */ LIMWORD, /* LIMWORD is a terminal symbol that matches - the empty string if it is at the beginning - or the end of a word. */ + the empty string at the beginning or the + end of a word. */ NOTLIMWORD, /* NOTLIMWORD is a terminal symbol that - matches the empty string if it is not at + matches the empty string not at the beginning or end of a word. */ QMARK, /* QMARK is an operator of one argument that @@ -324,8 +317,8 @@ typedef struct size_t hash; /* Hash of the positions of this state. */ position_set elems; /* Positions this state could match. */ unsigned char context; /* Context from previous state. */ - bool has_backref; /* True if this state matches a \. */ - bool has_mbcset; /* True if this state matches a MBCSET. */ + bool has_backref; /* This state matches a \. */ + bool has_mbcset; /* This state matches a MBCSET. */ unsigned short constraint; /* Constraint for this state to accept. */ token first_end; /* Token value of the first END in elems. */ position_set mbps; /* Positions which can match multibyte @@ -377,7 +370,8 @@ struct dfa size_t nleaves; /* Number of leaves on the parse tree. */ size_t nregexps; /* Count of parallel regexps being built with dfaparse. */ - bool multibyte; /* True iff MB_CUR_MAX > 1. */ + bool fast; /* The DFA is fast. */ + bool multibyte; /* MB_CUR_MAX > 1. */ token utf8_anychar_classes[5]; /* To lower ANYCHAR in UTF-8 locales. */ mbstate_t mbs; /* Multibyte conversion state. */ @@ -404,9 +398,8 @@ struct dfa #if MBS_SUPPORT /* A table indexed by byte values that contains the corresponding wide - character (if any) for that byte. WEOF means the byte is the - leading byte of a multibyte character. Invalid and null bytes are - mapped to themselves. */ + character (if any) for that byte. WEOF means the byte is not a + valid single-byte character. */ wint_t mbrtowc_cache[NOTCHAR]; #endif @@ -431,7 +424,7 @@ struct dfa matching the given position in a string matching the regexp. Allocated to the maximum possible position index. */ - bool searchflag; /* True if we are supposed to build a searching + bool searchflag; /* We are supposed to build a searching as opposed to an exact matcher. A searching matcher finds the first and shortest string matching a regexp anywhere in the buffer, @@ -474,11 +467,10 @@ struct dfa /* Some macros for user access to dfa internals. */ -/* ACCEPTING returns true if s could possibly be an accepting state of r. */ +/* S could possibly be an accepting state of R. */ #define ACCEPTING(s, r) ((r).states[s].constraint) -/* ACCEPTS_IN_CONTEXT returns true if the given state accepts in the - specified context. */ +/* STATE accepts in the specified context. */ #define ACCEPTS_IN_CONTEXT(prev, curr, state, dfa) \ SUCCEEDS_IN_CONTEXT ((dfa).states[state].constraint, prev, curr) @@ -496,14 +488,7 @@ dfambcache (struct dfa *d) unsigned char uc = i; mbstate_t s = { 0 }; wchar_t wc; - wint_t wi; - switch (mbrtowc (&wc, &c, 1, &s)) - { - default: wi = wc; break; - case (size_t) -2: wi = WEOF; break; - case (size_t) -1: wi = uc; break; - } - d->mbrtowc_cache[uc] = wi; + d->mbrtowc_cache[uc] = mbrtowc (&wc, &c, 1, &s) <= 1 ? wc : WEOF; } #endif } @@ -512,11 +497,12 @@ dfambcache (struct dfa *d) /* Store into *PWC the result of converting the leading bytes of the multibyte buffer S of length N bytes, using the mbrtowc_cache in *D and updating the conversion state in *D. On conversion error, - convert just a single byte as-is. Return the number of bytes + convert just a single byte, to WEOF. Return the number of bytes converted. This differs from mbrtowc (PWC, S, N, &D->mbs) as follows: + * PWC points to wint_t, not to wchar_t. * The last arg is a dfa *D instead of merely a multibyte conversion state D->mbs. D also contains an mbrtowc_cache for speed. * N must be at least 1. @@ -526,18 +512,21 @@ dfambcache (struct dfa *d) * D->mbs is always valid afterwards. * *PWC is always set to something. */ static size_t -mbs_to_wchar (wchar_t *pwc, char const *s, size_t n, struct dfa *d) +mbs_to_wchar (wint_t *pwc, char const *s, size_t n, struct dfa *d) { unsigned char uc = s[0]; wint_t wc = d->mbrtowc_cache[uc]; if (wc == WEOF) { - size_t nbytes = mbrtowc (pwc, s, n, &d->mbs); + wchar_t wch; + size_t nbytes = mbrtowc (&wch, s, n, &d->mbs); if (0 < nbytes && nbytes < (size_t) -2) - return nbytes; + { + *pwc = wch; + return nbytes; + } memset (&d->mbs, 0, sizeof d->mbs); - wc = uc; } *pwc = wc; @@ -628,19 +617,20 @@ prtok (token t) static bool tstbit (unsigned int b, charclass const c) { - return c[b / INTBITS] >> b % INTBITS & 1; + return c[b / CHARCLASS_WORD_BITS] >> b % CHARCLASS_WORD_BITS & 1; } static void setbit (unsigned int b, charclass c) { - c[b / INTBITS] |= 1U << b % INTBITS; + c[b / CHARCLASS_WORD_BITS] |= (charclass_word) 1 << b % CHARCLASS_WORD_BITS; } static void clrbit (unsigned int b, charclass c) { - c[b / INTBITS] &= ~(1U << b % INTBITS); + c[b / CHARCLASS_WORD_BITS] &= ~((charclass_word) 1 + << b % CHARCLASS_WORD_BITS); } static void @@ -660,8 +650,8 @@ notset (charclass s) { int i; - for (i = 0; i < CHARCLASS_INTS; ++i) - s[i] = ~s[i]; + for (i = 0; i < CHARCLASS_WORDS; ++i) + s[i] = CHARCLASS_WORD_MASK & ~s[i]; } static bool @@ -675,9 +665,9 @@ equal (charclass const s1, charclass const s2) and return its new address. Although PTR may be null, the returned value is never null. - The array holds *NALLOC items; *NALLOC must be zero if PTR is null, - and is updated on reallocation. ITEMSIZE is the size of one item. - Avoid O(N**2) behavior on arrays growing linearly. */ + The array holds *NALLOC items; *NALLOC is updated on reallocation. + ITEMSIZE is the size of one item. Avoid O(N**2) behavior on arrays + growing linearly. */ static void * maybe_realloc (void *ptr, size_t nitems, size_t *nalloc, size_t itemsize) { @@ -740,7 +730,7 @@ static charclass newline; # define is_valid_unibyte_character(c) (! (MBS_SUPPORT && btowc (c) == WEOF)) #endif -/* Return non-zero if C is a "word-constituent" byte; zero otherwise. */ +/* C is a "word-constituent" byte. */ #define IS_WORD_CONSTITUENT(C) \ (is_valid_unibyte_character (C) && (isalnum (C) || (C) == '_')) @@ -844,7 +834,7 @@ using_utf8 (void) return utf8; } -/* Return true if the current locale is known to be a unibyte locale +/* The current locale is known to be a unibyte locale without multicharacter collating sequences and where range comparisons simply use the native encoding. These locales can be processed more efficiently. */ @@ -852,7 +842,7 @@ using_utf8 (void) static bool using_simple_locale (void) { - /* True if the native character set is known to be compatible with + /* The native character set is known to be compatible with the C locale. The following test isn't perfect, but it's good enough in practice, as only ASCII and EBCDIC are in common use and this test correctly accepts ASCII and rejects EBCDIC. */ @@ -868,7 +858,7 @@ using_simple_locale (void) && '}' == 125 && '~' == 126) }; - if (! native_c_charset || MB_CUR_MAX > 1) + if (! native_c_charset || dfa->multibyte) return false; else { @@ -892,20 +882,28 @@ using_simple_locale (void) static char const *lexptr; /* Pointer to next input character. */ static size_t lexleft; /* Number of characters remaining. */ static token lasttok; /* Previous token returned; initially END. */ -static bool laststart; /* True if we're separated from beginning or (, +static bool laststart; /* We're separated from beginning or (, | only by zero-width characters. */ static size_t parens; /* Count of outstanding left parens. */ static int minrep, maxrep; /* Repeat counts for {m,n}. */ static int cur_mb_len = 1; /* Length of the multibyte representation of wctok. */ -/* These variables are used only if (MB_CUR_MAX > 1). */ -static wchar_t wctok; /* Wide character representation of the current - multibyte character. */ + +static wint_t wctok; /* Wide character representation of the current + multibyte character, or WEOF if there was + an encoding error. Used only if + MB_CUR_MAX > 1. */ #if MBS_SUPPORT -/* Note that characters become unsigned here. */ +/* Fetch the next lexical input character. Set C (of type int) to the + next input byte, except set C to EOF if the input is a multibyte + character of length greater than 1. Set WC (of type wint_t) to the + value of the input if it is a valid multibyte character (possibly + of length 1); otherwise set WC to WEOF. If there is no more input, + report EOFERR if EOFERR is not null, and return lasttok = END + otherwise. */ # define FETCH_WC(c, wc, eoferr) \ do { \ if (! lexleft) \ @@ -917,7 +915,7 @@ static wchar_t wctok; /* Wide character representation of the current } \ else \ { \ - wchar_t _wc; \ + wint_t _wc; \ size_t nbytes = mbs_to_wchar (&_wc, lexptr, lexleft, dfa); \ cur_mb_len = nbytes; \ (wc) = _wc; \ @@ -1044,7 +1042,7 @@ parse_bracket_exp (void) int c, c1, c2; charclass ccl; - /* True if this is a bracket expression that dfaexec is known to + /* This is a bracket expression that dfaexec is known to process correctly. */ bool known_bracket_exp = true; @@ -1095,7 +1093,7 @@ parse_bracket_exp (void) colon_warning_state = (c == ':'); do { - c1 = EOF; /* mark c1 is not initialized". */ + c1 = NOTCHAR; /* Mark c1 as not initialized. */ colon_warning_state &= ~2; /* Note that if we're looking at some other [:...:] construct, @@ -1104,13 +1102,13 @@ parse_bracket_exp (void) dfa is ever called. */ if (c == '[') { -#define MAX_BRACKET_STRING_LEN 32 - char str[MAX_BRACKET_STRING_LEN + 1]; FETCH_WC (c1, wc1, _("unbalanced [")); if ((c1 == ':' && (syntax_bits & RE_CHAR_CLASSES)) || c1 == '.' || c1 == '=') { + enum { MAX_BRACKET_STRING_LEN = 32 }; + char str[MAX_BRACKET_STRING_LEN + 1]; size_t len = 0; for (;;) { @@ -1173,7 +1171,7 @@ parse_bracket_exp (void) if (c == '\\' && (syntax_bits & RE_BACKSLASH_ESCAPE_IN_LISTS)) FETCH_WC (c, wc, _("unbalanced [")); - if (c1 == EOF) + if (c1 == NOTCHAR) FETCH_WC (c1, wc1, _("unbalanced [")); if (c1 == '-') @@ -1201,19 +1199,22 @@ parse_bracket_exp (void) to the pair of ranges, [m-z] [M-Z]. Although this code is wrong in multiple ways, it's never used in practice. FIXME: Remove this (and related) unused code. */ - work_mbc->ranges - = maybe_realloc (work_mbc->ranges, work_mbc->nranges + 2, - &ranges_al, sizeof *work_mbc->ranges); - work_mbc->ranges[work_mbc->nranges].beg - = case_fold ? towlower (wc) : wc; - work_mbc->ranges[work_mbc->nranges++].end - = case_fold ? towlower (wc2) : wc2; - - if (case_fold && (iswalpha (wc) || iswalpha (wc2))) + if (wc != WEOF && wc2 != WEOF) { - work_mbc->ranges[work_mbc->nranges].beg = towupper (wc); + work_mbc->ranges + = maybe_realloc (work_mbc->ranges, work_mbc->nranges + 2, + &ranges_al, sizeof *work_mbc->ranges); + work_mbc->ranges[work_mbc->nranges].beg + = case_fold ? towlower (wc) : wc; work_mbc->ranges[work_mbc->nranges++].end - = towupper (wc2); + = case_fold ? towlower (wc2) : wc2; + + if (case_fold && (iswalpha (wc) || iswalpha (wc2))) + { + work_mbc->ranges[work_mbc->nranges].beg = towupper (wc); + work_mbc->ranges[work_mbc->nranges++].end + = towupper (wc2); + } } } else if (using_simple_locale ()) @@ -1257,22 +1258,23 @@ parse_bracket_exp (void) continue; } - if (case_fold) + if (wc == WEOF) + known_bracket_exp = false; + else { - wchar_t folded[CASE_FOLDED_BUFSIZE]; - int i, n = case_folded_counterparts (wc, folded); - work_mbc->chars = maybe_realloc (work_mbc->chars, - work_mbc->nchars + n, &chars_al, - sizeof *work_mbc->chars); + wchar_t folded[CASE_FOLDED_BUFSIZE + 1]; + int i; + int n = (case_fold ? case_folded_counterparts (wc, folded + 1) + 1 + : 1); + folded[0] = wc; for (i = 0; i < n; i++) if (!setbit_wc (folded[i], ccl)) - work_mbc->chars[work_mbc->nchars++] = folded[i]; - } - if (!setbit_wc (wc, ccl)) - { - work_mbc->chars = maybe_realloc (work_mbc->chars, work_mbc->nchars, - &chars_al, sizeof *work_mbc->chars); - work_mbc->chars[work_mbc->nchars++] = wc; + { + work_mbc->chars + = maybe_realloc (work_mbc->chars, work_mbc->nchars, + &chars_al, sizeof *work_mbc->chars); + work_mbc->chars[work_mbc->nchars++] = folded[i]; + } } } while ((wc = wc1, (c = c1) != ']')); @@ -1305,7 +1307,7 @@ parse_bracket_exp (void) static token lex (void) { - unsigned int c, c2; + int c, c2; bool backslash = false; charclass ccl; int i; @@ -1319,8 +1321,6 @@ lex (void) for (i = 0; i < 2; ++i) { FETCH_WC (c, wctok, NULL); - if (c == (unsigned int) EOF) - goto normal_char; switch (c) { @@ -1660,8 +1660,12 @@ addtok_mb (token t, int mbprop) --depth; break; + case BACKREF: + dfa->fast = false; + /* fallthrough */ default: ++dfa->nleaves; + /* fallthrough */ case EMPTY: ++depth; break; @@ -1772,11 +1776,21 @@ add_utf8_anychar (void) { #if MBS_SUPPORT static const charclass utf8_classes[5] = { - {0, 0, 0, 0, ~0, ~0, 0, 0}, /* 80-bf: non-leading bytes */ - {~0, ~0, ~0, ~0, 0, 0, 0, 0}, /* 00-7f: 1-byte sequence */ - {0, 0, 0, 0, 0, 0, ~3, 0}, /* c2-df: 2-byte sequence */ - {0, 0, 0, 0, 0, 0, 0, 0xffff}, /* e0-ef: 3-byte sequence */ - {0, 0, 0, 0, 0, 0, 0, 0xff0000} /* f0-f7: 4-byte sequence */ + /* 80-bf: non-leading bytes. */ + {0, 0, 0, 0, CHARCLASS_WORD_MASK, CHARCLASS_WORD_MASK, 0, 0}, + + /* 00-7f: 1-byte sequence. */ + {CHARCLASS_WORD_MASK, CHARCLASS_WORD_MASK, CHARCLASS_WORD_MASK, + CHARCLASS_WORD_MASK, 0, 0, 0, 0}, + + /* c2-df: 2-byte sequence. */ + {0, 0, 0, 0, 0, 0, ~3 & CHARCLASS_WORD_MASK, 0}, + + /* e0-ef: 3-byte sequence. */ + {0, 0, 0, 0, 0, 0, 0, 0xffff}, + + /* f0-f7: 4-byte sequence. */ + {0, 0, 0, 0, 0, 0, 0, 0xff0000} }; const unsigned int n = sizeof (utf8_classes) / sizeof (utf8_classes[0]); unsigned int i; @@ -1858,16 +1872,21 @@ atom (void) { if (MBS_SUPPORT && tok == WCHAR) { - addtok_wc (wctok); - - if (case_fold) + if (wctok == WEOF) + addtok (BACKREF); + else { - wchar_t folded[CASE_FOLDED_BUFSIZE]; - int i, n = case_folded_counterparts (wctok, folded); - for (i = 0; i < n; i++) + addtok_wc (wctok); + + if (case_fold) { - addtok_wc (folded[i]); - addtok (OR); + wchar_t folded[CASE_FOLDED_BUFSIZE]; + int i, n = case_folded_counterparts (wctok, folded); + for (i = 0; i < n; i++) + { + addtok_wc (folded[i]); + addtok (OR); + } } } @@ -2213,13 +2232,11 @@ state_index (struct dfa *d, position_set const *s, int context) constraint. Repeat exhaustively until no funny positions are left. S->elems must be large enough to hold the result. */ static void -epsclosure (position_set * s, struct dfa const *d) +epsclosure (position_set *s, struct dfa const *d, char *visited) { size_t i, j; position p, old; - - /* Array of booleans, large enough to use char, not int. */ - char *visited = xzalloc (d->tindex); + bool initialized = false; for (i = 0; i < s->nelem; ++i) if (d->tokens[s->elems[i].index] >= NOTCHAR @@ -2230,6 +2247,11 @@ epsclosure (position_set * s, struct dfa const *d) #endif && d->tokens[s->elems[i].index] < CSET) { + if (!initialized) + { + memset (visited, 0, d->tindex * sizeof (*visited)); + initialized = true; + } old = s->elems[i]; p.constraint = old.constraint; delete (s->elems[i], s); @@ -2270,8 +2292,6 @@ epsclosure (position_set * s, struct dfa const *d) /* Force rescan to start at the beginning. */ i = -1; } - - free (visited); } /* Returns the set of contexts for which there is at least one @@ -2286,7 +2306,7 @@ charclass_context (charclass c) if (tstbit (eolbyte, c)) context |= CTX_NEWLINE; - for (j = 0; j < CHARCLASS_INTS; ++j) + for (j = 0; j < CHARCLASS_WORDS; ++j) { if (c[j] & letters[j]) context |= CTX_LETTER; @@ -2398,6 +2418,7 @@ dfaanalyze (struct dfa *d, int searchflag) int separate_contexts; /* Context wanted by some position. */ size_t i, j; position *pos; + char *visited = xnmalloc (d->tindex, sizeof *visited); #ifdef DEBUG fprintf (stderr, "dfaanalyze:\n"); @@ -2438,6 +2459,7 @@ dfaanalyze (struct dfa *d, int searchflag) merge (&tmp, &d->follows[pos[j].index], &merged); copy (&merged, &d->follows[pos[j].index]); } + /* fallthrough */ case QMARK: /* A QMARK or STAR node is automatically nullable. */ @@ -2558,7 +2580,7 @@ dfaanalyze (struct dfa *d, int searchflag) putc ('\n', stderr); #endif copy (&d->follows[i], &merged); - epsclosure (&merged, d); + epsclosure (&merged, d, visited); copy (&merged, &d->follows[i]); } @@ -2567,7 +2589,7 @@ dfaanalyze (struct dfa *d, int searchflag) merged.nelem = 0; for (i = 0; i < stk[-1].nfirstpos; ++i) insert (firstpos[i], &merged); - epsclosure (&merged, d); + epsclosure (&merged, d, visited); /* Build the initial state. */ separate_contexts = state_separate_contexts (&merged); @@ -2578,6 +2600,7 @@ dfaanalyze (struct dfa *d, int searchflag) free (posalloc); free (stkalloc); free (merged.elems); + free (visited); } @@ -2619,11 +2642,11 @@ dfastate (state_num s, struct dfa *d, state_num trans[]) size_t ngrps = 0; /* Number of groups actually used. */ position pos; /* Current position being considered. */ charclass matches; /* Set of matching characters. */ - unsigned int matchesf; /* Nonzero if matches is nonempty. */ + charclass_word matchesf; /* Nonzero if matches is nonempty. */ charclass intersect; /* Intersection with some label set. */ - unsigned int intersectf; /* Nonzero if intersect is nonempty. */ + charclass_word intersectf; /* Nonzero if intersect is nonempty. */ charclass leftovers; /* Stuff in the label that didn't match. */ - unsigned int leftoversf; /* Nonzero if leftovers is nonempty. */ + charclass_word leftoversf; /* Nonzero if leftovers is nonempty. */ position_set follows; /* Union of the follows of some group. */ position_set tmp; /* Temporary space for merging sets. */ int possible_contexts; /* Contexts that this group can match. */ @@ -2631,7 +2654,7 @@ dfastate (state_num s, struct dfa *d, state_num trans[]) state_num state; /* New state. */ state_num state_newline; /* New state on a newline transition. */ state_num state_letter; /* New state on a letter transition. */ - bool next_isnt_1st_byte = false; /* Flag if we can't add state0. */ + bool next_isnt_1st_byte = false; /* We can't add state0. */ size_t i, j, k; zeroset (matches); @@ -2643,21 +2666,24 @@ dfastate (state_num s, struct dfa *d, state_num trans[]) setbit (d->tokens[pos.index], matches); else if (d->tokens[pos.index] >= CSET) copyset (d->charclasses[d->tokens[pos.index] - CSET], matches); - else if (MBS_SUPPORT - && (d->tokens[pos.index] == ANYCHAR - || d->tokens[pos.index] == MBCSET)) - /* MB_CUR_MAX > 1 */ + else { - /* ANYCHAR and MBCSET must match with a single character, so we - must put it to d->states[s].mbps, which contains the positions - which can match with a single character not a byte. */ - if (d->states[s].mbps.nelem == 0) - alloc_position_set (&d->states[s].mbps, 1); - insert (pos, &(d->states[s].mbps)); + if (MBS_SUPPORT + && (d->tokens[pos.index] == MBCSET + || d->tokens[pos.index] == ANYCHAR)) + { + /* MB_CUR_MAX > 1 */ + if (d->tokens[pos.index] == MBCSET) + d->states[s].has_mbcset = true; + /* ANYCHAR and MBCSET must match with a single character, so we + must put it to d->states[s].mbps, which contains the positions + which can match with a single character not a byte. */ + if (d->states[s].mbps.nelem == 0) + alloc_position_set (&d->states[s].mbps, 1); + insert (pos, &(d->states[s].mbps)); + } continue; } - else - continue; /* Some characters may need to be eliminated from matches because they fail in the current context. */ @@ -2665,21 +2691,21 @@ dfastate (state_num s, struct dfa *d, state_num trans[]) { if (!SUCCEEDS_IN_CONTEXT (pos.constraint, d->states[s].context, CTX_NEWLINE)) - for (j = 0; j < CHARCLASS_INTS; ++j) + for (j = 0; j < CHARCLASS_WORDS; ++j) matches[j] &= ~newline[j]; if (!SUCCEEDS_IN_CONTEXT (pos.constraint, d->states[s].context, CTX_LETTER)) - for (j = 0; j < CHARCLASS_INTS; ++j) + for (j = 0; j < CHARCLASS_WORDS; ++j) matches[j] &= ~letters[j]; if (!SUCCEEDS_IN_CONTEXT (pos.constraint, d->states[s].context, CTX_NONE)) - for (j = 0; j < CHARCLASS_INTS; ++j) + for (j = 0; j < CHARCLASS_WORDS; ++j) matches[j] &= letters[j] | newline[j]; /* If there are no characters left, there's no point in going on. */ - for (j = 0; j < CHARCLASS_INTS && !matches[j]; ++j) + for (j = 0; j < CHARCLASS_WORDS && !matches[j]; ++j) continue; - if (j == CHARCLASS_INTS) + if (j == CHARCLASS_WORDS) continue; } @@ -2695,17 +2721,17 @@ dfastate (state_num s, struct dfa *d, state_num trans[]) /* Check if this group's label has a nonempty intersection with matches. */ intersectf = 0; - for (k = 0; k < CHARCLASS_INTS; ++k) + for (k = 0; k < CHARCLASS_WORDS; ++k) intersectf |= intersect[k] = matches[k] & labels[j][k]; if (!intersectf) continue; /* It does; now find the set differences both ways. */ leftoversf = matchesf = 0; - for (k = 0; k < CHARCLASS_INTS; ++k) + for (k = 0; k < CHARCLASS_WORDS; ++k) { /* Even an optimizing compiler can't know this for sure. */ - int match = matches[k], label = labels[j][k]; + charclass_word match = matches[k], label = labels[j][k]; leftoversf |= leftovers[k] = ~match & label; matchesf |= matches[k] = match & ~label; @@ -2819,10 +2845,11 @@ dfastate (state_num s, struct dfa *d, state_num trans[]) /* If we are building a searching matcher, throw in the positions of state 0 as well. */ - if (d->searchflag - && (!MBS_SUPPORT || (!d->multibyte || !next_isnt_1st_byte))) - for (j = 0; j < d->states[0].elems.nelem; ++j) - insert (d->states[0].elems.elems[j], &follows); + if (d->searchflag && (!d->multibyte || !next_isnt_1st_byte)) + { + merge (&d->states[0].elems, &follows, &tmp); + copy (&tmp, &follows); + } /* Find out if the new state will want any context information. */ possible_contexts = charclass_context (labels[i]); @@ -2843,11 +2870,11 @@ dfastate (state_num s, struct dfa *d, state_num trans[]) state_letter = state; /* Set the transitions for each character in the current label. */ - for (j = 0; j < CHARCLASS_INTS; ++j) - for (k = 0; k < INTBITS; ++k) - if (labels[i][j] & 1U << k) + for (j = 0; j < CHARCLASS_WORDS; ++j) + for (k = 0; k < CHARCLASS_WORD_BITS; ++k) + if (labels[i][j] >> k & 1) { - int c = j * INTBITS + k; + int c = j * CHARCLASS_WORD_BITS + k; if (c == eolbyte) trans[c] = state_newline; @@ -3020,7 +3047,7 @@ transit_state_singlebyte (struct dfa *d, state_num s, unsigned char const *p, match, in bytes. POS is the position of the ".". */ static int match_anychar (struct dfa *d, state_num s, position pos, - wchar_t wc, size_t mbclen) + wint_t wc, size_t mbclen) { int context; @@ -3035,6 +3062,8 @@ match_anychar (struct dfa *d, state_num s, position pos, if (syntax_bits & RE_DOT_NOT_NULL) return 0; } + else if (wc == WEOF) + return 0; context = wchar_context (wc); if (!SUCCEEDS_IN_CONTEXT (pos.constraint, d->states[s].context, context)) @@ -3048,7 +3077,7 @@ match_anychar (struct dfa *d, state_num s, position pos, POS is the position of the bracket expression. */ static int match_mb_charset (struct dfa *d, state_num s, position pos, - char const *p, wchar_t wc, size_t match_len) + char const *p, wint_t wc, size_t match_len) { size_t i; bool match; /* Matching succeeded. */ @@ -3071,6 +3100,8 @@ match_mb_charset (struct dfa *d, state_num s, position pos, if (syntax_bits & RE_DOT_NOT_NULL) return 0; } + else if (wc == WEOF) + return 0; context = wchar_context (wc); if (!SUCCEEDS_IN_CONTEXT (pos.constraint, d->states[s].context, context)) @@ -3149,7 +3180,7 @@ charset_matched: The caller MUST free the array which this function return. */ static int * check_matching_with_multibyte_ops (struct dfa *d, state_num s, - char const *p, wchar_t wc, size_t mbclen) + char const *p, wint_t wc, size_t mbclen) { size_t i; int *rarray; @@ -3184,7 +3215,7 @@ check_matching_with_multibyte_ops (struct dfa *d, state_num s, static status_transit_state transit_state_consume_1char (struct dfa *d, state_num s, unsigned char const **pp, - wchar_t wc, size_t mbclen, + wint_t wc, size_t mbclen, int *match_lens) { size_t i, j; @@ -3235,7 +3266,7 @@ transit_state (struct dfa *d, state_num s, unsigned char const **pp, int *match_lens = NULL; size_t nelem = d->states[s].mbps.nelem; /* Just a alias. */ unsigned char const *p1 = *pp; - wchar_t wc; + wint_t wc; if (nelem > 0) /* This state has (a) multibyte operator(s). @@ -3364,13 +3395,13 @@ dfaexec (struct dfa *d, char const *begin, char *end, state must skip the bytes that are not a single byte character nor the first byte of a multibyte character. */ - wchar_t wc; + wint_t wc; while (mbp < p) mbp += mbs_to_wchar (&wc, (char const *) mbp, end - (char const *) mbp, d); p = mbp; - if ((char *) p >= end) + if ((char *) p > end) { p = NULL; goto done; @@ -3477,24 +3508,16 @@ dfaexec (struct dfa *d, char const *begin, char *end, return (char *) p; } -/* Search through a buffer looking for a potential match for D. - Return the offset of the byte after the first potential match. - If there is no match, return (size_t) -1. If D lacks a superset - so it's not known whether there is a match, return (size_t) -2. - BEGIN points to the beginning of the buffer, and END points to the - first byte after its end. Store a sentinel byte (usually newline) - in *END, so the actual buffer must be one byte longer. If COUNT is - non-NULL, increment *COUNT once for each newline processed. */ -size_t -dfahint (struct dfa *d, char const *begin, char *end, size_t *count) +struct dfa * +dfasuperset (struct dfa const *d) { - if (! d->superset) - return -2; - else - { - char const *match = dfaexec (d->superset, begin, end, 1, count, NULL); - return match ? match - begin : -1; - } + return d->superset; +} + +bool +dfaisfast (struct dfa const *d) +{ + return d->fast; } static void @@ -3534,12 +3557,14 @@ dfainit (struct dfa *d) { memset (d, 0, sizeof *d); d->multibyte = MB_CUR_MAX > 1; + d->fast = !d->multibyte; } static void dfaoptimize (struct dfa *d) { size_t i; + bool have_backref = false; if (!MBS_SUPPORT || !using_utf8 ()) return; @@ -3551,6 +3576,9 @@ dfaoptimize (struct dfa *d) case ANYCHAR: /* Lowered. */ abort (); + case BACKREF: + have_backref = true; + break; case MBCSET: /* Requires multi-byte algorithm. */ return; @@ -3559,12 +3587,20 @@ dfaoptimize (struct dfa *d) } } + if (!have_backref && d->superset) + { + /* The superset DFA is not likely to be much faster, so remove it. */ + dfafree (d->superset); + free (d->superset); + d->superset = NULL; + } + free_mbdata (d); d->multibyte = false; } static void -dfasuperset (struct dfa *d) +dfassbuild (struct dfa *d) { size_t i, j; charclass ccl; @@ -3616,8 +3652,11 @@ dfasuperset (struct dfa *d) case NOTLIMWORD: if (d->multibyte) { - /* Ignore these constraints. */ + /* These constraints aren't supported in a multibyte locale. + Ignore them in the superset DFA, and treat them as + backreferences in the main DFA. */ sup->tokens[j++] = EMPTY; + d->tokens[i] = BACKREF; break; } default: @@ -3647,11 +3686,14 @@ dfacomp (char const *s, size_t len, struct dfa *d, int searchflag) dfambcache (d); dfaparse (s, len, d); dfamust (d); + dfassbuild (d); dfaoptimize (d); - dfasuperset (d); dfaanalyze (d, searchflag); if (d->superset) - dfaanalyze (d->superset, searchflag); + { + d->fast = true; + dfaanalyze (d->superset, searchflag); + } } /* Free the storage held by the components of a dfa. */ diff --git a/dfa.h b/dfa.h index 15142362..4eb42968 100644 --- a/dfa.h +++ b/dfa.h @@ -75,16 +75,14 @@ extern void dfacomp (char const *, size_t, struct dfa *, int); extern char *dfaexec (struct dfa *d, char const *begin, char *end, int newline, size_t *count, int *backref); -/* Search through a buffer looking for a potential match for D. - Return the offset of the byte after the first potential match. - If there is no match, return (size_t) -1. If D lacks a superset - so it's not known whether there is a match, return (size_t) -2. - BEGIN points to the beginning of the buffer, and END points to the - first byte after its end. Store a sentinel byte (usually newline) - in *END, so the actual buffer must be one byte longer. If COUNT is - non-NULL, increment *COUNT once for each newline processed. */ -extern size_t dfahint (struct dfa *d, char const *begin, char *end, - size_t *count); +/* Return a superset for D. The superset matches everything that D + matches, along with some other strings (though the latter should be + rare, for efficiency reasons). Return a null pointer if no useful + superset is available. */ +extern struct dfa *dfasuperset (struct dfa const *d) _GL_ATTRIBUTE_PURE; + +/* The DFA is likely to be fast. */ +extern bool dfaisfast (struct dfa const *) _GL_ATTRIBUTE_PURE; /* Free the storage held by the components of a struct dfa. */ extern void dfafree (struct dfa *); -- cgit v1.2.3 From b3e02a657547d3ebaccdd9e6853979ee8d1e3b67 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 14 May 2014 22:14:01 +0300 Subject: Remove Ultrix 4.3 support in custom.h. --- ChangeLog | 5 +++++ custom.h | 6 ------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index e67e51bc..3423073a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,11 @@ * custom.h (_GL_PURE): Move definition to here. Sigh. * dfa.h, dfa.c: Sync with GNU grep. Sigh. + Unrelated: + + * custom.h: Remove stuff for Ultrix 4.3. No one has such + systems anymore; this just got missed earlier. + 2014-05-11 Arnold D. Robbins * debug.c (do_eval): Repair fix of 2014-05-09 and use diff --git a/custom.h b/custom.h index e336cd3c..efaa0f27 100644 --- a/custom.h +++ b/custom.h @@ -47,12 +47,6 @@ #define HAVE_MKTIME 1 #endif -/* For ULTRIX 4.3 */ -#ifdef ultrix -#define HAVE_MKTIME 1 -#define GETGROUPS_NOT_STANDARD 1 -#endif - /* For whiny users */ #ifdef USE_INCLUDED_STRFTIME #undef HAVE_STRFTIME -- cgit v1.2.3 From b34ea22faeecc99f81f4d897d5c4cc815eab2ddb Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 14 May 2014 22:15:02 +0300 Subject: Fix real preface for docbook. --- doc/ChangeLog | 4 + doc/gawk.info | 1032 +++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 17 + doc/gawktexi.in | 17 + 4 files changed, 551 insertions(+), 519 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 41671458..ba4aa094 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-05-14 Arnold D. Robbins + + * gawktexi.in: Fix real preface for docbook. + 2014-05-13 Arnold D. Robbins * gawktexi.in: Complete formatting for FOR_PRINT and not FOR_PRINT. diff --git a/doc/gawk.info b/doc/gawk.info index 5587b9e8..d725b73e 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -1300,12 +1300,6 @@ 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 -May, 2014 -  File: gawk.info, Node: Getting Started, Next: Invoking Gawk, Prev: Preface, Up: Top @@ -33219,518 +33213,518 @@ Ref: Manual History-Footnote-164040 Ref: Manual History-Footnote-264081 Node: How To Contribute64155 Node: Acknowledgments65394 -Node: Getting Started69588 -Node: Running gawk71967 -Node: One-shot73157 -Node: Read Terminal74382 -Ref: Read Terminal-Footnote-176032 -Ref: Read Terminal-Footnote-276308 -Node: Long76479 -Node: Executable Scripts77855 -Ref: Executable Scripts-Footnote-179688 -Ref: Executable Scripts-Footnote-279790 -Node: Comments80337 -Node: Quoting82804 -Node: DOS Quoting88120 -Node: Sample Data Files88795 -Node: Very Simple91310 -Node: Two Rules95960 -Node: More Complex97855 -Ref: More Complex-Footnote-1100787 -Node: Statements/Lines100872 -Ref: Statements/Lines-Footnote-1105327 -Node: Other Features105592 -Node: When106520 -Node: Invoking Gawk108668 -Node: Command Line110131 -Node: Options110914 -Ref: Options-Footnote-1126726 -Node: Other Arguments126751 -Node: Naming Standard Input129413 -Node: Environment Variables130507 -Node: AWKPATH Variable131065 -Ref: AWKPATH Variable-Footnote-1133843 -Ref: AWKPATH Variable-Footnote-2133888 -Node: AWKLIBPATH Variable134148 -Node: Other Environment Variables134907 -Node: Exit Status138562 -Node: Include Files139237 -Node: Loading Shared Libraries142815 -Node: Obsolete144198 -Node: Undocumented144895 -Node: Regexp145137 -Node: Regexp Usage146526 -Node: Escape Sequences148559 -Node: Regexp Operators154226 -Ref: Regexp Operators-Footnote-1161706 -Ref: Regexp Operators-Footnote-2161853 -Node: Bracket Expressions161951 -Ref: table-char-classes163841 -Node: GNU Regexp Operators166364 -Node: Case-sensitivity170087 -Ref: Case-sensitivity-Footnote-1172979 -Ref: Case-sensitivity-Footnote-2173214 -Node: Leftmost Longest173322 -Node: Computed Regexps174523 -Node: Reading Files177872 -Node: Records179874 -Node: awk split records180609 -Node: gawk split records185467 -Ref: gawk split records-Footnote-1189988 -Node: Fields190025 -Ref: Fields-Footnote-1192989 -Node: Nonconstant Fields193075 -Ref: Nonconstant Fields-Footnote-1195305 -Node: Changing Fields195507 -Node: Field Separators201461 -Node: Default Field Splitting204163 -Node: Regexp Field Splitting205280 -Node: Single Character Fields208621 -Node: Command Line Field Separator209680 -Node: Full Line Fields213022 -Ref: Full Line Fields-Footnote-1213530 -Node: Field Splitting Summary213576 -Ref: Field Splitting Summary-Footnote-1216675 -Node: Constant Size216776 -Node: Splitting By Content221383 -Ref: Splitting By Content-Footnote-1225133 -Node: Multiple Line225173 -Ref: Multiple Line-Footnote-1231029 -Node: Getline231208 -Node: Plain Getline233424 -Node: Getline/Variable235519 -Node: Getline/File236666 -Node: Getline/Variable/File238050 -Ref: Getline/Variable/File-Footnote-1239649 -Node: Getline/Pipe239736 -Node: Getline/Variable/Pipe242435 -Node: Getline/Coprocess243542 -Node: Getline/Variable/Coprocess244794 -Node: Getline Notes245531 -Node: Getline Summary248335 -Ref: table-getline-variants248743 -Node: Read Timeout249655 -Ref: Read Timeout-Footnote-1253482 -Node: Command line directories253540 -Node: Printing254422 -Node: Print256053 -Node: Print Examples257394 -Node: Output Separators260173 -Node: OFMT262189 -Node: Printf263547 -Node: Basic Printf264453 -Node: Control Letters265992 -Node: Format Modifiers269846 -Node: Printf Examples275873 -Node: Redirection278580 -Node: Special Files285552 -Node: Special FD286085 -Ref: Special FD-Footnote-1289709 -Node: Special Network289783 -Node: Special Caveats290633 -Node: Close Files And Pipes291429 -Ref: Close Files And Pipes-Footnote-1298567 -Ref: Close Files And Pipes-Footnote-2298715 -Node: Expressions298865 -Node: Values299997 -Node: Constants300673 -Node: Scalar Constants301353 -Ref: Scalar Constants-Footnote-1302212 -Node: Nondecimal-numbers302462 -Node: Regexp Constants305462 -Node: Using Constant Regexps305937 -Node: Variables309007 -Node: Using Variables309662 -Node: Assignment Options311386 -Node: Conversion313261 -Ref: table-locale-affects318697 -Ref: Conversion-Footnote-1319321 -Node: All Operators319430 -Node: Arithmetic Ops320060 -Node: Concatenation322565 -Ref: Concatenation-Footnote-1325361 -Node: Assignment Ops325481 -Ref: table-assign-ops330464 -Node: Increment Ops331781 -Node: Truth Values and Conditions335219 -Node: Truth Values336302 -Node: Typing and Comparison337351 -Node: Variable Typing338144 -Ref: Variable Typing-Footnote-1342044 -Node: Comparison Operators342166 -Ref: table-relational-ops342576 -Node: POSIX String Comparison346124 -Ref: POSIX String Comparison-Footnote-1347208 -Node: Boolean Ops347346 -Ref: Boolean Ops-Footnote-1351416 -Node: Conditional Exp351507 -Node: Function Calls353234 -Node: Precedence356992 -Node: Locales360661 -Node: Patterns and Actions362264 -Node: Pattern Overview363318 -Node: Regexp Patterns364995 -Node: Expression Patterns365538 -Node: Ranges369319 -Node: BEGIN/END372425 -Node: Using BEGIN/END373187 -Ref: Using BEGIN/END-Footnote-1375923 -Node: I/O And BEGIN/END376029 -Node: BEGINFILE/ENDFILE378314 -Node: Empty381250 -Node: Using Shell Variables381567 -Node: Action Overview383850 -Node: Statements386195 -Node: If Statement388049 -Node: While Statement389548 -Node: Do Statement391592 -Node: For Statement392748 -Node: Switch Statement395900 -Node: Break Statement398003 -Node: Continue Statement400058 -Node: Next Statement401851 -Node: Nextfile Statement404241 -Node: Exit Statement406896 -Node: Built-in Variables409298 -Node: User-modified410394 -Ref: User-modified-Footnote-1418079 -Node: Auto-set418141 -Ref: Auto-set-Footnote-1430706 -Ref: Auto-set-Footnote-2430911 -Node: ARGC and ARGV430967 -Node: Arrays434821 -Node: Array Basics436319 -Node: Array Intro437145 -Ref: figure-array-elements439118 -Node: Reference to Elements441525 -Node: Assigning Elements443798 -Node: Array Example444289 -Node: Scanning an Array446021 -Node: Controlling Scanning449036 -Ref: Controlling Scanning-Footnote-1454209 -Node: Delete454525 -Ref: Delete-Footnote-1457290 -Node: Numeric Array Subscripts457347 -Node: Uninitialized Subscripts459530 -Node: Multidimensional461155 -Node: Multiscanning464248 -Node: Arrays of Arrays465837 -Node: Functions470477 -Node: Built-in471296 -Node: Calling Built-in472374 -Node: Numeric Functions474362 -Ref: Numeric Functions-Footnote-1478196 -Ref: Numeric Functions-Footnote-2478553 -Ref: Numeric Functions-Footnote-3478601 -Node: String Functions478870 -Ref: String Functions-Footnote-1501881 -Ref: String Functions-Footnote-2502010 -Ref: String Functions-Footnote-3502258 -Node: Gory Details502345 -Ref: table-sub-escapes504014 -Ref: table-sub-posix-92505368 -Ref: table-sub-proposed506719 -Ref: table-posix-sub508073 -Ref: table-gensub-escapes509618 -Ref: Gory Details-Footnote-1510794 -Ref: Gory Details-Footnote-2510845 -Node: I/O Functions510996 -Ref: I/O Functions-Footnote-1518119 -Node: Time Functions518266 -Ref: Time Functions-Footnote-1528730 -Ref: Time Functions-Footnote-2528798 -Ref: Time Functions-Footnote-3528956 -Ref: Time Functions-Footnote-4529067 -Ref: Time Functions-Footnote-5529179 -Ref: Time Functions-Footnote-6529406 -Node: Bitwise Functions529672 -Ref: table-bitwise-ops530234 -Ref: Bitwise Functions-Footnote-1534479 -Node: Type Functions534663 -Node: I18N Functions535805 -Node: User-defined537450 -Node: Definition Syntax538254 -Ref: Definition Syntax-Footnote-1543169 -Node: Function Example543238 -Ref: Function Example-Footnote-1545882 -Node: Function Caveats545904 -Node: Calling A Function546422 -Node: Variable Scope547377 -Node: Pass By Value/Reference550365 -Node: Return Statement553873 -Node: Dynamic Typing556855 -Node: Indirect Calls557784 -Node: Library Functions567471 -Ref: Library Functions-Footnote-1570984 -Ref: Library Functions-Footnote-2571127 -Node: Library Names571298 -Ref: Library Names-Footnote-1574771 -Ref: Library Names-Footnote-2574991 -Node: General Functions575077 -Node: Strtonum Function576105 -Node: Assert Function579035 -Node: Round Function582361 -Node: Cliff Random Function583902 -Node: Ordinal Functions584918 -Ref: Ordinal Functions-Footnote-1587995 -Ref: Ordinal Functions-Footnote-2588247 -Node: Join Function588458 -Ref: Join Function-Footnote-1590229 -Node: Getlocaltime Function590429 -Node: Readfile Function594170 -Node: Data File Management596009 -Node: Filetrans Function596641 -Node: Rewind Function600710 -Node: File Checking602097 -Node: Empty Files603191 -Node: Ignoring Assigns605421 -Node: Getopt Function606975 -Ref: Getopt Function-Footnote-1618278 -Node: Passwd Functions618481 -Ref: Passwd Functions-Footnote-1627459 -Node: Group Functions627547 -Node: Walking Arrays635631 -Node: Sample Programs637767 -Node: Running Examples638441 -Node: Clones639169 -Node: Cut Program640393 -Node: Egrep Program650244 -Ref: Egrep Program-Footnote-1658017 -Node: Id Program658127 -Node: Split Program661776 -Ref: Split Program-Footnote-1665295 -Node: Tee Program665423 -Node: Uniq Program668226 -Node: Wc Program675655 -Ref: Wc Program-Footnote-1679921 -Ref: Wc Program-Footnote-2680121 -Node: Miscellaneous Programs680213 -Node: Dupword Program681401 -Node: Alarm Program683432 -Node: Translate Program688239 -Ref: Translate Program-Footnote-1692626 -Ref: Translate Program-Footnote-2692874 -Node: Labels Program693008 -Ref: Labels Program-Footnote-1696379 -Node: Word Sorting696463 -Node: History Sorting700347 -Node: Extract Program702186 -Ref: Extract Program-Footnote-1709689 -Node: Simple Sed709817 -Node: Igawk Program712879 -Ref: Igawk Program-Footnote-1728050 -Ref: Igawk Program-Footnote-2728251 -Node: Anagram Program728389 -Node: Signature Program731457 -Node: Advanced Features732557 -Node: Nondecimal Data734443 -Node: Array Sorting736026 -Node: Controlling Array Traversal736723 -Node: Array Sorting Functions745007 -Ref: Array Sorting Functions-Footnote-1748876 -Node: Two-way I/O749070 -Ref: Two-way I/O-Footnote-1754502 -Node: TCP/IP Networking754584 -Node: Profiling757428 -Node: Internationalization764931 -Node: I18N and L10N766356 -Node: Explaining gettext767042 -Ref: Explaining gettext-Footnote-1772110 -Ref: Explaining gettext-Footnote-2772294 -Node: Programmer i18n772459 -Node: Translator i18n776686 -Node: String Extraction777480 -Ref: String Extraction-Footnote-1778441 -Node: Printf Ordering778527 -Ref: Printf Ordering-Footnote-1781309 -Node: I18N Portability781373 -Ref: I18N Portability-Footnote-1783822 -Node: I18N Example783885 -Ref: I18N Example-Footnote-1786523 -Node: Gawk I18N786595 -Node: Debugger787216 -Node: Debugging788187 -Node: Debugging Concepts788620 -Node: Debugging Terms790476 -Node: Awk Debugging793073 -Node: Sample Debugging Session793965 -Node: Debugger Invocation794485 -Node: Finding The Bug795818 -Node: List of Debugger Commands802305 -Node: Breakpoint Control803639 -Node: Debugger Execution Control807303 -Node: Viewing And Changing Data810663 -Node: Execution Stack814019 -Node: Debugger Info815486 -Node: Miscellaneous Debugger Commands819480 -Node: Readline Support824658 -Node: Limitations825489 -Node: Arbitrary Precision Arithmetic827741 -Ref: Arbitrary Precision Arithmetic-Footnote-1829390 -Node: General Arithmetic829538 -Node: Floating Point Issues831258 -Node: String Conversion Precision832139 -Ref: String Conversion Precision-Footnote-1833844 -Node: Unexpected Results833953 -Node: POSIX Floating Point Problems836106 -Ref: POSIX Floating Point Problems-Footnote-1839931 -Node: Integer Programming839969 -Node: Floating-point Programming841708 -Ref: Floating-point Programming-Footnote-1848039 -Ref: Floating-point Programming-Footnote-2848309 -Node: Floating-point Representation848573 -Node: Floating-point Context849738 -Ref: table-ieee-formats850577 -Node: Rounding Mode851961 -Ref: table-rounding-modes852440 -Ref: Rounding Mode-Footnote-1855455 -Node: Gawk and MPFR855634 -Node: Arbitrary Precision Floats857043 -Ref: Arbitrary Precision Floats-Footnote-1859486 -Node: Setting Precision859802 -Ref: table-predefined-precision-strings860488 -Node: Setting Rounding Mode862633 -Ref: table-gawk-rounding-modes863037 -Node: Floating-point Constants864224 -Node: Changing Precision865653 -Ref: Changing Precision-Footnote-1867050 -Node: Exact Arithmetic867224 -Node: Arbitrary Precision Integers870362 -Ref: Arbitrary Precision Integers-Footnote-1873377 -Node: Dynamic Extensions873524 -Node: Extension Intro874982 -Node: Plugin License876247 -Node: Extension Mechanism Outline876932 -Ref: load-extension877349 -Ref: load-new-function878827 -Ref: call-new-function879822 -Node: Extension API Description881837 -Node: Extension API Functions Introduction883124 -Node: General Data Types888051 -Ref: General Data Types-Footnote-1893746 -Node: Requesting Values894045 -Ref: table-value-types-returned894782 -Node: Memory Allocation Functions895736 -Ref: Memory Allocation Functions-Footnote-1898482 -Node: Constructor Functions898578 -Node: Registration Functions900336 -Node: Extension Functions901021 -Node: Exit Callback Functions903323 -Node: Extension Version String904572 -Node: Input Parsers905222 -Node: Output Wrappers914979 -Node: Two-way processors919489 -Node: Printing Messages921697 -Ref: Printing Messages-Footnote-1922774 -Node: Updating `ERRNO'922926 -Node: Accessing Parameters923665 -Node: Symbol Table Access924895 -Node: Symbol table by name925409 -Node: Symbol table by cookie927385 -Ref: Symbol table by cookie-Footnote-1931517 -Node: Cached values931580 -Ref: Cached values-Footnote-1935070 -Node: Array Manipulation935161 -Ref: Array Manipulation-Footnote-1936259 -Node: Array Data Types936298 -Ref: Array Data Types-Footnote-1939001 -Node: Array Functions939093 -Node: Flattening Arrays942929 -Node: Creating Arrays949781 -Node: Extension API Variables954506 -Node: Extension Versioning955142 -Node: Extension API Informational Variables957043 -Node: Extension API Boilerplate958129 -Node: Finding Extensions961933 -Node: Extension Example962493 -Node: Internal File Description963223 -Node: Internal File Ops967314 -Ref: Internal File Ops-Footnote-1978823 -Node: Using Internal File Ops978963 -Ref: Using Internal File Ops-Footnote-1981310 -Node: Extension Samples981576 -Node: Extension Sample File Functions983100 -Node: Extension Sample Fnmatch991587 -Node: Extension Sample Fork993356 -Node: Extension Sample Inplace994569 -Node: Extension Sample Ord996347 -Node: Extension Sample Readdir997183 -Node: Extension Sample Revout998715 -Node: Extension Sample Rev2way999308 -Node: Extension Sample Read write array999998 -Node: Extension Sample Readfile1001881 -Node: Extension Sample API Tests1002981 -Node: Extension Sample Time1003506 -Node: gawkextlib1004870 -Node: Language History1007651 -Node: V7/SVR3.11009244 -Node: SVR41011564 -Node: POSIX1013006 -Node: BTL1014392 -Node: POSIX/GNU1015126 -Node: Feature History1020725 -Node: Common Extensions1033701 -Node: Ranges and Locales1035013 -Ref: Ranges and Locales-Footnote-11039630 -Ref: Ranges and Locales-Footnote-21039657 -Ref: Ranges and Locales-Footnote-31039891 -Node: Contributors1040112 -Node: Installation1045493 -Node: Gawk Distribution1046387 -Node: Getting1046871 -Node: Extracting1047697 -Node: Distribution contents1049389 -Node: Unix Installation1055110 -Node: Quick Installation1055727 -Node: Additional Configuration Options1058173 -Node: Configuration Philosophy1059909 -Node: Non-Unix Installation1062263 -Node: PC Installation1062721 -Node: PC Binary Installation1064032 -Node: PC Compiling1065880 -Node: PC Testing1068840 -Node: PC Using1070016 -Node: Cygwin1074184 -Node: MSYS1074993 -Node: VMS Installation1075507 -Node: VMS Compilation1076303 -Ref: VMS Compilation-Footnote-11077555 -Node: VMS Dynamic Extensions1077613 -Node: VMS Installation Details1078986 -Node: VMS Running1081237 -Node: VMS GNV1084071 -Node: VMS Old Gawk1084794 -Node: Bugs1085264 -Node: Other Versions1089182 -Node: Notes1095266 -Node: Compatibility Mode1096066 -Node: Additions1096849 -Node: Accessing The Source1097776 -Node: Adding Code1099216 -Node: New Ports1105261 -Node: Derived Files1109396 -Ref: Derived Files-Footnote-11114717 -Ref: Derived Files-Footnote-21114751 -Ref: Derived Files-Footnote-31115351 -Node: Future Extensions1115449 -Node: Implementation Limitations1116032 -Node: Extension Design1117280 -Node: Old Extension Problems1118434 -Ref: Old Extension Problems-Footnote-11119942 -Node: Extension New Mechanism Goals1119999 -Ref: Extension New Mechanism Goals-Footnote-11123364 -Node: Extension Other Design Decisions1123550 -Node: Extension Future Growth1125656 -Node: Old Extension Mechanism1126492 -Node: Basic Concepts1128232 -Node: Basic High Level1128913 -Ref: figure-general-flow1129185 -Ref: figure-process-flow1129784 -Ref: Basic High Level-Footnote-11133013 -Node: Basic Data Typing1133198 -Node: Glossary1136553 -Node: Copying1161784 -Node: GNU Free Documentation License1199340 -Node: Index1224476 +Node: Getting Started69543 +Node: Running gawk71922 +Node: One-shot73112 +Node: Read Terminal74337 +Ref: Read Terminal-Footnote-175987 +Ref: Read Terminal-Footnote-276263 +Node: Long76434 +Node: Executable Scripts77810 +Ref: Executable Scripts-Footnote-179643 +Ref: Executable Scripts-Footnote-279745 +Node: Comments80292 +Node: Quoting82759 +Node: DOS Quoting88075 +Node: Sample Data Files88750 +Node: Very Simple91265 +Node: Two Rules95915 +Node: More Complex97810 +Ref: More Complex-Footnote-1100742 +Node: Statements/Lines100827 +Ref: Statements/Lines-Footnote-1105282 +Node: Other Features105547 +Node: When106475 +Node: Invoking Gawk108623 +Node: Command Line110086 +Node: Options110869 +Ref: Options-Footnote-1126681 +Node: Other Arguments126706 +Node: Naming Standard Input129368 +Node: Environment Variables130462 +Node: AWKPATH Variable131020 +Ref: AWKPATH Variable-Footnote-1133798 +Ref: AWKPATH Variable-Footnote-2133843 +Node: AWKLIBPATH Variable134103 +Node: Other Environment Variables134862 +Node: Exit Status138517 +Node: Include Files139192 +Node: Loading Shared Libraries142770 +Node: Obsolete144153 +Node: Undocumented144850 +Node: Regexp145092 +Node: Regexp Usage146481 +Node: Escape Sequences148514 +Node: Regexp Operators154181 +Ref: Regexp Operators-Footnote-1161661 +Ref: Regexp Operators-Footnote-2161808 +Node: Bracket Expressions161906 +Ref: table-char-classes163796 +Node: GNU Regexp Operators166319 +Node: Case-sensitivity170042 +Ref: Case-sensitivity-Footnote-1172934 +Ref: Case-sensitivity-Footnote-2173169 +Node: Leftmost Longest173277 +Node: Computed Regexps174478 +Node: Reading Files177827 +Node: Records179829 +Node: awk split records180564 +Node: gawk split records185422 +Ref: gawk split records-Footnote-1189943 +Node: Fields189980 +Ref: Fields-Footnote-1192944 +Node: Nonconstant Fields193030 +Ref: Nonconstant Fields-Footnote-1195260 +Node: Changing Fields195462 +Node: Field Separators201416 +Node: Default Field Splitting204118 +Node: Regexp Field Splitting205235 +Node: Single Character Fields208576 +Node: Command Line Field Separator209635 +Node: Full Line Fields212977 +Ref: Full Line Fields-Footnote-1213485 +Node: Field Splitting Summary213531 +Ref: Field Splitting Summary-Footnote-1216630 +Node: Constant Size216731 +Node: Splitting By Content221338 +Ref: Splitting By Content-Footnote-1225088 +Node: Multiple Line225128 +Ref: Multiple Line-Footnote-1230984 +Node: Getline231163 +Node: Plain Getline233379 +Node: Getline/Variable235474 +Node: Getline/File236621 +Node: Getline/Variable/File238005 +Ref: Getline/Variable/File-Footnote-1239604 +Node: Getline/Pipe239691 +Node: Getline/Variable/Pipe242390 +Node: Getline/Coprocess243497 +Node: Getline/Variable/Coprocess244749 +Node: Getline Notes245486 +Node: Getline Summary248290 +Ref: table-getline-variants248698 +Node: Read Timeout249610 +Ref: Read Timeout-Footnote-1253437 +Node: Command line directories253495 +Node: Printing254377 +Node: Print256008 +Node: Print Examples257349 +Node: Output Separators260128 +Node: OFMT262144 +Node: Printf263502 +Node: Basic Printf264408 +Node: Control Letters265947 +Node: Format Modifiers269801 +Node: Printf Examples275828 +Node: Redirection278535 +Node: Special Files285507 +Node: Special FD286040 +Ref: Special FD-Footnote-1289664 +Node: Special Network289738 +Node: Special Caveats290588 +Node: Close Files And Pipes291384 +Ref: Close Files And Pipes-Footnote-1298522 +Ref: Close Files And Pipes-Footnote-2298670 +Node: Expressions298820 +Node: Values299952 +Node: Constants300628 +Node: Scalar Constants301308 +Ref: Scalar Constants-Footnote-1302167 +Node: Nondecimal-numbers302417 +Node: Regexp Constants305417 +Node: Using Constant Regexps305892 +Node: Variables308962 +Node: Using Variables309617 +Node: Assignment Options311341 +Node: Conversion313216 +Ref: table-locale-affects318652 +Ref: Conversion-Footnote-1319276 +Node: All Operators319385 +Node: Arithmetic Ops320015 +Node: Concatenation322520 +Ref: Concatenation-Footnote-1325316 +Node: Assignment Ops325436 +Ref: table-assign-ops330419 +Node: Increment Ops331736 +Node: Truth Values and Conditions335174 +Node: Truth Values336257 +Node: Typing and Comparison337306 +Node: Variable Typing338099 +Ref: Variable Typing-Footnote-1341999 +Node: Comparison Operators342121 +Ref: table-relational-ops342531 +Node: POSIX String Comparison346079 +Ref: POSIX String Comparison-Footnote-1347163 +Node: Boolean Ops347301 +Ref: Boolean Ops-Footnote-1351371 +Node: Conditional Exp351462 +Node: Function Calls353189 +Node: Precedence356947 +Node: Locales360616 +Node: Patterns and Actions362219 +Node: Pattern Overview363273 +Node: Regexp Patterns364950 +Node: Expression Patterns365493 +Node: Ranges369274 +Node: BEGIN/END372380 +Node: Using BEGIN/END373142 +Ref: Using BEGIN/END-Footnote-1375878 +Node: I/O And BEGIN/END375984 +Node: BEGINFILE/ENDFILE378269 +Node: Empty381205 +Node: Using Shell Variables381522 +Node: Action Overview383805 +Node: Statements386150 +Node: If Statement388004 +Node: While Statement389503 +Node: Do Statement391547 +Node: For Statement392703 +Node: Switch Statement395855 +Node: Break Statement397958 +Node: Continue Statement400013 +Node: Next Statement401806 +Node: Nextfile Statement404196 +Node: Exit Statement406851 +Node: Built-in Variables409253 +Node: User-modified410349 +Ref: User-modified-Footnote-1418034 +Node: Auto-set418096 +Ref: Auto-set-Footnote-1430661 +Ref: Auto-set-Footnote-2430866 +Node: ARGC and ARGV430922 +Node: Arrays434776 +Node: Array Basics436274 +Node: Array Intro437100 +Ref: figure-array-elements439073 +Node: Reference to Elements441480 +Node: Assigning Elements443753 +Node: Array Example444244 +Node: Scanning an Array445976 +Node: Controlling Scanning448991 +Ref: Controlling Scanning-Footnote-1454164 +Node: Delete454480 +Ref: Delete-Footnote-1457245 +Node: Numeric Array Subscripts457302 +Node: Uninitialized Subscripts459485 +Node: Multidimensional461110 +Node: Multiscanning464203 +Node: Arrays of Arrays465792 +Node: Functions470432 +Node: Built-in471251 +Node: Calling Built-in472329 +Node: Numeric Functions474317 +Ref: Numeric Functions-Footnote-1478151 +Ref: Numeric Functions-Footnote-2478508 +Ref: Numeric Functions-Footnote-3478556 +Node: String Functions478825 +Ref: String Functions-Footnote-1501836 +Ref: String Functions-Footnote-2501965 +Ref: String Functions-Footnote-3502213 +Node: Gory Details502300 +Ref: table-sub-escapes503969 +Ref: table-sub-posix-92505323 +Ref: table-sub-proposed506674 +Ref: table-posix-sub508028 +Ref: table-gensub-escapes509573 +Ref: Gory Details-Footnote-1510749 +Ref: Gory Details-Footnote-2510800 +Node: I/O Functions510951 +Ref: I/O Functions-Footnote-1518074 +Node: Time Functions518221 +Ref: Time Functions-Footnote-1528685 +Ref: Time Functions-Footnote-2528753 +Ref: Time Functions-Footnote-3528911 +Ref: Time Functions-Footnote-4529022 +Ref: Time Functions-Footnote-5529134 +Ref: Time Functions-Footnote-6529361 +Node: Bitwise Functions529627 +Ref: table-bitwise-ops530189 +Ref: Bitwise Functions-Footnote-1534434 +Node: Type Functions534618 +Node: I18N Functions535760 +Node: User-defined537405 +Node: Definition Syntax538209 +Ref: Definition Syntax-Footnote-1543124 +Node: Function Example543193 +Ref: Function Example-Footnote-1545837 +Node: Function Caveats545859 +Node: Calling A Function546377 +Node: Variable Scope547332 +Node: Pass By Value/Reference550320 +Node: Return Statement553828 +Node: Dynamic Typing556810 +Node: Indirect Calls557739 +Node: Library Functions567426 +Ref: Library Functions-Footnote-1570939 +Ref: Library Functions-Footnote-2571082 +Node: Library Names571253 +Ref: Library Names-Footnote-1574726 +Ref: Library Names-Footnote-2574946 +Node: General Functions575032 +Node: Strtonum Function576060 +Node: Assert Function578990 +Node: Round Function582316 +Node: Cliff Random Function583857 +Node: Ordinal Functions584873 +Ref: Ordinal Functions-Footnote-1587950 +Ref: Ordinal Functions-Footnote-2588202 +Node: Join Function588413 +Ref: Join Function-Footnote-1590184 +Node: Getlocaltime Function590384 +Node: Readfile Function594125 +Node: Data File Management595964 +Node: Filetrans Function596596 +Node: Rewind Function600665 +Node: File Checking602052 +Node: Empty Files603146 +Node: Ignoring Assigns605376 +Node: Getopt Function606930 +Ref: Getopt Function-Footnote-1618233 +Node: Passwd Functions618436 +Ref: Passwd Functions-Footnote-1627414 +Node: Group Functions627502 +Node: Walking Arrays635586 +Node: Sample Programs637722 +Node: Running Examples638396 +Node: Clones639124 +Node: Cut Program640348 +Node: Egrep Program650199 +Ref: Egrep Program-Footnote-1657972 +Node: Id Program658082 +Node: Split Program661731 +Ref: Split Program-Footnote-1665250 +Node: Tee Program665378 +Node: Uniq Program668181 +Node: Wc Program675610 +Ref: Wc Program-Footnote-1679876 +Ref: Wc Program-Footnote-2680076 +Node: Miscellaneous Programs680168 +Node: Dupword Program681356 +Node: Alarm Program683387 +Node: Translate Program688194 +Ref: Translate Program-Footnote-1692581 +Ref: Translate Program-Footnote-2692829 +Node: Labels Program692963 +Ref: Labels Program-Footnote-1696334 +Node: Word Sorting696418 +Node: History Sorting700302 +Node: Extract Program702141 +Ref: Extract Program-Footnote-1709644 +Node: Simple Sed709772 +Node: Igawk Program712834 +Ref: Igawk Program-Footnote-1728005 +Ref: Igawk Program-Footnote-2728206 +Node: Anagram Program728344 +Node: Signature Program731412 +Node: Advanced Features732512 +Node: Nondecimal Data734398 +Node: Array Sorting735981 +Node: Controlling Array Traversal736678 +Node: Array Sorting Functions744962 +Ref: Array Sorting Functions-Footnote-1748831 +Node: Two-way I/O749025 +Ref: Two-way I/O-Footnote-1754457 +Node: TCP/IP Networking754539 +Node: Profiling757383 +Node: Internationalization764886 +Node: I18N and L10N766311 +Node: Explaining gettext766997 +Ref: Explaining gettext-Footnote-1772065 +Ref: Explaining gettext-Footnote-2772249 +Node: Programmer i18n772414 +Node: Translator i18n776641 +Node: String Extraction777435 +Ref: String Extraction-Footnote-1778396 +Node: Printf Ordering778482 +Ref: Printf Ordering-Footnote-1781264 +Node: I18N Portability781328 +Ref: I18N Portability-Footnote-1783777 +Node: I18N Example783840 +Ref: I18N Example-Footnote-1786478 +Node: Gawk I18N786550 +Node: Debugger787171 +Node: Debugging788142 +Node: Debugging Concepts788575 +Node: Debugging Terms790431 +Node: Awk Debugging793028 +Node: Sample Debugging Session793920 +Node: Debugger Invocation794440 +Node: Finding The Bug795773 +Node: List of Debugger Commands802260 +Node: Breakpoint Control803594 +Node: Debugger Execution Control807258 +Node: Viewing And Changing Data810618 +Node: Execution Stack813974 +Node: Debugger Info815441 +Node: Miscellaneous Debugger Commands819435 +Node: Readline Support824613 +Node: Limitations825444 +Node: Arbitrary Precision Arithmetic827696 +Ref: Arbitrary Precision Arithmetic-Footnote-1829345 +Node: General Arithmetic829493 +Node: Floating Point Issues831213 +Node: String Conversion Precision832094 +Ref: String Conversion Precision-Footnote-1833799 +Node: Unexpected Results833908 +Node: POSIX Floating Point Problems836061 +Ref: POSIX Floating Point Problems-Footnote-1839886 +Node: Integer Programming839924 +Node: Floating-point Programming841663 +Ref: Floating-point Programming-Footnote-1847994 +Ref: Floating-point Programming-Footnote-2848264 +Node: Floating-point Representation848528 +Node: Floating-point Context849693 +Ref: table-ieee-formats850532 +Node: Rounding Mode851916 +Ref: table-rounding-modes852395 +Ref: Rounding Mode-Footnote-1855410 +Node: Gawk and MPFR855589 +Node: Arbitrary Precision Floats856998 +Ref: Arbitrary Precision Floats-Footnote-1859441 +Node: Setting Precision859757 +Ref: table-predefined-precision-strings860443 +Node: Setting Rounding Mode862588 +Ref: table-gawk-rounding-modes862992 +Node: Floating-point Constants864179 +Node: Changing Precision865608 +Ref: Changing Precision-Footnote-1867005 +Node: Exact Arithmetic867179 +Node: Arbitrary Precision Integers870317 +Ref: Arbitrary Precision Integers-Footnote-1873332 +Node: Dynamic Extensions873479 +Node: Extension Intro874937 +Node: Plugin License876202 +Node: Extension Mechanism Outline876887 +Ref: load-extension877304 +Ref: load-new-function878782 +Ref: call-new-function879777 +Node: Extension API Description881792 +Node: Extension API Functions Introduction883079 +Node: General Data Types888006 +Ref: General Data Types-Footnote-1893701 +Node: Requesting Values894000 +Ref: table-value-types-returned894737 +Node: Memory Allocation Functions895691 +Ref: Memory Allocation Functions-Footnote-1898437 +Node: Constructor Functions898533 +Node: Registration Functions900291 +Node: Extension Functions900976 +Node: Exit Callback Functions903278 +Node: Extension Version String904527 +Node: Input Parsers905177 +Node: Output Wrappers914934 +Node: Two-way processors919444 +Node: Printing Messages921652 +Ref: Printing Messages-Footnote-1922729 +Node: Updating `ERRNO'922881 +Node: Accessing Parameters923620 +Node: Symbol Table Access924850 +Node: Symbol table by name925364 +Node: Symbol table by cookie927340 +Ref: Symbol table by cookie-Footnote-1931472 +Node: Cached values931535 +Ref: Cached values-Footnote-1935025 +Node: Array Manipulation935116 +Ref: Array Manipulation-Footnote-1936214 +Node: Array Data Types936253 +Ref: Array Data Types-Footnote-1938956 +Node: Array Functions939048 +Node: Flattening Arrays942884 +Node: Creating Arrays949736 +Node: Extension API Variables954461 +Node: Extension Versioning955097 +Node: Extension API Informational Variables956998 +Node: Extension API Boilerplate958084 +Node: Finding Extensions961888 +Node: Extension Example962448 +Node: Internal File Description963178 +Node: Internal File Ops967269 +Ref: Internal File Ops-Footnote-1978778 +Node: Using Internal File Ops978918 +Ref: Using Internal File Ops-Footnote-1981265 +Node: Extension Samples981531 +Node: Extension Sample File Functions983055 +Node: Extension Sample Fnmatch991542 +Node: Extension Sample Fork993311 +Node: Extension Sample Inplace994524 +Node: Extension Sample Ord996302 +Node: Extension Sample Readdir997138 +Node: Extension Sample Revout998670 +Node: Extension Sample Rev2way999263 +Node: Extension Sample Read write array999953 +Node: Extension Sample Readfile1001836 +Node: Extension Sample API Tests1002936 +Node: Extension Sample Time1003461 +Node: gawkextlib1004825 +Node: Language History1007606 +Node: V7/SVR3.11009199 +Node: SVR41011519 +Node: POSIX1012961 +Node: BTL1014347 +Node: POSIX/GNU1015081 +Node: Feature History1020680 +Node: Common Extensions1033656 +Node: Ranges and Locales1034968 +Ref: Ranges and Locales-Footnote-11039585 +Ref: Ranges and Locales-Footnote-21039612 +Ref: Ranges and Locales-Footnote-31039846 +Node: Contributors1040067 +Node: Installation1045448 +Node: Gawk Distribution1046342 +Node: Getting1046826 +Node: Extracting1047652 +Node: Distribution contents1049344 +Node: Unix Installation1055065 +Node: Quick Installation1055682 +Node: Additional Configuration Options1058128 +Node: Configuration Philosophy1059864 +Node: Non-Unix Installation1062218 +Node: PC Installation1062676 +Node: PC Binary Installation1063987 +Node: PC Compiling1065835 +Node: PC Testing1068795 +Node: PC Using1069971 +Node: Cygwin1074139 +Node: MSYS1074948 +Node: VMS Installation1075462 +Node: VMS Compilation1076258 +Ref: VMS Compilation-Footnote-11077510 +Node: VMS Dynamic Extensions1077568 +Node: VMS Installation Details1078941 +Node: VMS Running1081192 +Node: VMS GNV1084026 +Node: VMS Old Gawk1084749 +Node: Bugs1085219 +Node: Other Versions1089137 +Node: Notes1095221 +Node: Compatibility Mode1096021 +Node: Additions1096804 +Node: Accessing The Source1097731 +Node: Adding Code1099171 +Node: New Ports1105216 +Node: Derived Files1109351 +Ref: Derived Files-Footnote-11114672 +Ref: Derived Files-Footnote-21114706 +Ref: Derived Files-Footnote-31115306 +Node: Future Extensions1115404 +Node: Implementation Limitations1115987 +Node: Extension Design1117235 +Node: Old Extension Problems1118389 +Ref: Old Extension Problems-Footnote-11119897 +Node: Extension New Mechanism Goals1119954 +Ref: Extension New Mechanism Goals-Footnote-11123319 +Node: Extension Other Design Decisions1123505 +Node: Extension Future Growth1125611 +Node: Old Extension Mechanism1126447 +Node: Basic Concepts1128187 +Node: Basic High Level1128868 +Ref: figure-general-flow1129140 +Ref: figure-process-flow1129739 +Ref: Basic High Level-Footnote-11132968 +Node: Basic Data Typing1133153 +Node: Glossary1136508 +Node: Copying1161739 +Node: GNU Free Documentation License1199295 +Node: Index1224431  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 10897efd..470b2822 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -1131,6 +1131,21 @@ March, 2001 @c @c 12/2000: Chuck wants the preface & intro combined. +@c This bit is post-processed by a script which turns the chapter +@c tag into a preface tag, and moves this stuff to before the title. +@c Bleah. +@docbook + + + Arnold + Robbins + Nof Ayalon + ISRAEL + + June, 2014 + +@end docbook + Several kinds of tasks occur repeatedly when working with text files. You might want to extract certain lines and discard the rest. @@ -2022,12 +2037,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 @sp 2 @noindent Arnold Robbins @* Nof Ayalon @* ISRAEL @* May, 2014 +@end iftex @ifnotinfo @part @value{PART1}The @command{awk} Language diff --git a/doc/gawktexi.in b/doc/gawktexi.in index f54748e6..af323c1b 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -1126,6 +1126,21 @@ March, 2001 @c @c 12/2000: Chuck wants the preface & intro combined. +@c This bit is post-processed by a script which turns the chapter +@c tag into a preface tag, and moves this stuff to before the title. +@c Bleah. +@docbook + + + Arnold + Robbins + Nof Ayalon + ISRAEL + + June, 2014 + +@end docbook + Several kinds of tasks occur repeatedly when working with text files. You might want to extract certain lines and discard the rest. @@ -1989,12 +2004,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 @sp 2 @noindent Arnold Robbins @* Nof Ayalon @* ISRAEL @* May, 2014 +@end iftex @ifnotinfo @part @value{PART1}The @command{awk} Language -- cgit v1.2.3 From 8b086817a7907d54dbe813f0dd05626b86e56cd1 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 15 May 2014 22:28:21 +0300 Subject: Edits through Chapter 11, fix displays for docbook. --- awklib/eg/lib/getopt.awk | 2 +- awklib/eg/lib/gettime.awk | 2 +- awklib/eg/lib/grcat.c | 2 +- awklib/eg/lib/pwcat.c | 2 +- awklib/eg/prog/cut.awk | 2 +- awklib/eg/prog/egrep.awk | 4 +- awklib/eg/prog/id.awk | 37 +- awklib/eg/prog/split.awk | 5 +- doc/ChangeLog | 4 + doc/gawk.info | 1210 +++++++++++++++++++++++---------------------- doc/gawk.texi | 310 ++++++------ doc/gawktexi.in | 310 ++++++------ 12 files changed, 964 insertions(+), 926 deletions(-) diff --git a/awklib/eg/lib/getopt.awk b/awklib/eg/lib/getopt.awk index 4283a7e1..db957ceb 100644 --- a/awklib/eg/lib/getopt.awk +++ b/awklib/eg/lib/getopt.awk @@ -70,7 +70,7 @@ BEGIN { # test program if (_getopt_test) { while ((_go_c = getopt(ARGC, ARGV, "ab:cd")) != -1) - printf("c = <%c>, optarg = <%s>\n", + printf("c = <%c>, Optarg = <%s>\n", _go_c, Optarg) printf("non-option arguments:\n") for (; Optind < ARGC; Optind++) diff --git a/awklib/eg/lib/gettime.awk b/awklib/eg/lib/gettime.awk index 4cb56330..3da9c8ab 100644 --- a/awklib/eg/lib/gettime.awk +++ b/awklib/eg/lib/gettime.awk @@ -31,7 +31,7 @@ function getlocaltime(time, ret, now, i) now = systime() # return date(1)-style output - ret = strftime("%a %b %e %H:%M:%S %Z %Y", now) + ret = strftime(PROCINFO["strftime"], now) # clear out target array delete time diff --git a/awklib/eg/lib/grcat.c b/awklib/eg/lib/grcat.c index ff2913a1..7d6b6a74 100644 --- a/awklib/eg/lib/grcat.c +++ b/awklib/eg/lib/grcat.c @@ -1,7 +1,7 @@ /* * grcat.c * - * Generate a printable version of the group database + * Generate a printable version of the group database. */ /* * Arnold Robbins, arnold@skeeve.com, May 1993 diff --git a/awklib/eg/lib/pwcat.c b/awklib/eg/lib/pwcat.c index 910e0329..934ef34e 100644 --- a/awklib/eg/lib/pwcat.c +++ b/awklib/eg/lib/pwcat.c @@ -1,7 +1,7 @@ /* * pwcat.c * - * Generate a printable version of the password database + * Generate a printable version of the password database. */ /* * Arnold Robbins, arnold@skeeve.com, May 1993 diff --git a/awklib/eg/prog/cut.awk b/awklib/eg/prog/cut.awk index 1399411e..09ba1f7c 100644 --- a/awklib/eg/prog/cut.awk +++ b/awklib/eg/prog/cut.awk @@ -43,7 +43,7 @@ BEGIN \ if (FS == " ") # defeat awk semantics FS = "[ ]" } else if (c == "s") - suppress++ + suppress = 1 else usage() } diff --git a/awklib/eg/prog/egrep.awk b/awklib/eg/prog/egrep.awk index 56d199c8..86b3cfda 100644 --- a/awklib/eg/prog/egrep.awk +++ b/awklib/eg/prog/egrep.awk @@ -90,9 +90,7 @@ function endfile(file) } END \ { - if (total == 0) - exit 1 - exit 0 + exit (total == 0) } function usage( e) { diff --git a/awklib/eg/prog/id.awk b/awklib/eg/prog/id.awk index 8b60a245..cf744447 100644 --- a/awklib/eg/prog/id.awk +++ b/awklib/eg/prog/id.awk @@ -5,6 +5,7 @@ # Arnold Robbins, arnold@skeeve.com, Public Domain # May 1993 # Revised February 1996 +# Revised May 2014 # output is: # uid=12(foo) euid=34(bar) gid=3(baz) \ @@ -19,34 +20,26 @@ BEGIN \ printf("uid=%d", uid) pw = getpwuid(uid) - if (pw != "") { - split(pw, a, ":") - printf("(%s)", a[1]) - } + if (pw != "") + pr_first_field(pw) if (euid != uid) { printf(" euid=%d", euid) pw = getpwuid(euid) - if (pw != "") { - split(pw, a, ":") - printf("(%s)", a[1]) - } + if (pw != "") + pr_first_field(pw) } printf(" gid=%d", gid) pw = getgrgid(gid) - if (pw != "") { - split(pw, a, ":") - printf("(%s)", a[1]) - } + if (pw != "") + pr_first_field(pw) if (egid != gid) { printf(" egid=%d", egid) pw = getgrgid(egid) - if (pw != "") { - split(pw, a, ":") - printf("(%s)", a[1]) - } + if (pw != "") + pr_first_field(pw) } for (i = 1; ("group" i) in PROCINFO; i++) { @@ -55,13 +48,17 @@ BEGIN \ group = PROCINFO["group" i] printf("%d", group) pw = getgrgid(group) - if (pw != "") { - split(pw, a, ":") - printf("(%s)", a[1]) - } + if (pw != "") + pr_first_field(pw) if (("group" (i+1)) in PROCINFO) printf(",") } print "" } + +function pr_first_field(str, a) +{ + split(str, a, ":") + printf("(%s)", a[1]) +} diff --git a/awklib/eg/prog/split.awk b/awklib/eg/prog/split.awk index c907530b..bcc73ae6 100644 --- a/awklib/eg/prog/split.awk +++ b/awklib/eg/prog/split.awk @@ -4,8 +4,9 @@ # # Arnold Robbins, arnold@skeeve.com, Public Domain # May 1993 +# Revised slightly, May 2014 -# usage: split [-num] [file] [outname] +# usage: split [-count] [file] [outname] BEGIN { outfile = "x" # default @@ -14,7 +15,7 @@ BEGIN { usage() i = 1 - if (ARGV[i] ~ /^-[[:digit:]]+$/) { + if (i in ARGV && ARGV[i] ~ /^-[[:digit:]]+$/) { count = -ARGV[i] ARGV[i] = "" i++ diff --git a/doc/ChangeLog b/doc/ChangeLog index ba4aa094..c0c382d3 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-05-15 Arnold D. Robbins + + * gawktexi.in: Fix displays for docbook, edits through Chapter 11. + 2014-05-14 Arnold D. Robbins * gawktexi.in: Fix real preface for docbook. diff --git a/doc/gawk.info b/doc/gawk.info index d725b73e..a9fcc117 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -2276,8 +2276,8 @@ There are two ways to run `awk'--with an explicit program or with one or more program files. Here are templates for both of them; items enclosed in [...] in these templates are optional: - awk [OPTIONS] -f progfile [`--'] FILE ... - awk [OPTIONS] [`--'] 'PROGRAM' FILE ... + `awk' [OPTIONS] `-f' PROGFILE [`--'] FILE ... + `awk' [OPTIONS] [`--'] `'PROGRAM'' FILE ... Besides traditional one-letter POSIX-style options, `gawk' also supports GNU long options. @@ -8933,10 +8933,10 @@ which (but not both) may be omitted. The purpose of the "action" is to tell `awk' what to do once a match for the pattern is found. Thus, in outline, an `awk' program generally looks like this: - [PATTERN] { ACTION } - PATTERN [{ ACTION }] + [PATTERN] `{ ACTION }' + PATTERN [`{ ACTION }'] ... - function NAME(ARGS) { ... } + `function NAME(ARGS) { ... }' ... An action consists of one or more `awk' "statements", enclosed in @@ -9024,7 +9024,7 @@ File: gawk.info, Node: If Statement, Next: While Statement, Up: Statements The `if'-`else' statement is `awk''s decision-making statement. It looks like this: - if (CONDITION) THEN-BODY [else ELSE-BODY] + `if (CONDITION) THEN-BODY' [`else ELSE-BODY'] The CONDITION is an expression that controls what the rest of the statement does. If the CONDITION is true, THEN-BODY is executed; @@ -9507,7 +9507,7 @@ The `exit' statement causes `awk' to immediately stop executing the current rule and to stop processing input; any remaining input is ignored. The `exit' statement is written as follows: - exit [RETURN CODE] + `exit' [RETURN CODE] When an `exit' statement is executed from a `BEGIN' rule, the program stops processing everything immediately. No input records are @@ -12786,10 +12786,10 @@ starting to execute any of it. The definition of a function named NAME looks like this: - function NAME([PARAMETER-LIST]) - { + `function' NAME`('[PARAMETER-LIST]`)' + `{' BODY-OF-FUNCTION - } + `}' Here, NAME is the name of the function to define. A valid function name is like a valid variable name: a sequence of letters, digits, and @@ -13232,7 +13232,7 @@ control to the calling part of the `awk' program. It can also be used to return a value for use in the rest of the `awk' program. It looks like this: - return [EXPRESSION] + `return' [EXPRESSION] The EXPRESSION part is optional. Due most likely to an oversight, POSIX does not define what the return value is if you omit the @@ -14250,7 +14250,7 @@ current time formatted in the same way as the `date' utility: now = systime() # return date(1)-style output - ret = strftime("%a %b %e %H:%M:%S %Z %Y", now) + ret = strftime(PROCINFO["strftime"], now) # clear out target array delete time @@ -14510,8 +14510,8 @@ File: gawk.info, Node: File Checking, Next: Empty Files, Prev: Rewind Functio Normally, if you give `awk' a data file that isn't readable, it stops with a fatal error. There are times when you might want to just ignore -such files and keep going. You can do this by prepending the following -program to your `awk' program: +such files and keep going.(1) You can do this by prepending the +following program to your `awk' program: # readable.awk --- library file to skip over unreadable files @@ -14531,10 +14531,16 @@ program to your `awk' program: element from `ARGV' with `delete' skips the file (since it's no longer in the list). See also *note ARGC and ARGV::. + ---------- Footnotes ---------- + + (1) The `BEGINFILE' special pattern (*note BEGINFILE/ENDFILE::) +provides an alternative mechanism for dealing with files that can't be +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. @@ -14879,7 +14885,7 @@ is in `ARGV[0]': # test program if (_getopt_test) { while ((_go_c = getopt(ARGC, ARGV, "ab:cd")) != -1) - printf("c = <%c>, optarg = <%s>\n", + printf("c = <%c>, Optarg = <%s>\n", _go_c, Optarg) printf("non-option arguments:\n") for (; Optind < ARGC; Optind++) @@ -14892,17 +14898,17 @@ is in `ARGV[0]': result of two sample runs of the test program: $ awk -f getopt.awk -v _getopt_test=1 -- -a -cbARG bax -x - -| c = , optarg = <> - -| c = , optarg = <> - -| c = , optarg = + -| c = , Optarg = <> + -| c = , Optarg = <> + -| c = , Optarg = -| non-option arguments: -| ARGV[3] = -| ARGV[4] = <-x> $ awk -f getopt.awk -v _getopt_test=1 -- -a -x -- xyz abc - -| c = , optarg = <> + -| c = , Optarg = <> error--> x -- invalid option - -| c = , optarg = <> + -| c = , Optarg = <> -| non-option arguments: -| ARGV[4] = -| ARGV[5] = @@ -14961,7 +14967,7 @@ that "cats" the password database: /* * pwcat.c * - * Generate a printable version of the password database + * Generate a printable version of the password database. */ #include #include @@ -15186,7 +15192,7 @@ group database, is as follows: /* * grcat.c * - * Generate a printable version of the group database + * Generate a printable version of the group database. */ #include #include @@ -15222,9 +15228,10 @@ Group Password used; it is usually empty or set to `*'. Group ID Number - The group's numeric group ID number; this 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 cases.) + 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 + cases.) Group Member List A comma-separated list of user names. These users are members of @@ -15333,10 +15340,7 @@ following: For this reason, `_gr_init()' looks to see if a group name or group ID number is already seen. If it is, then the user names are simply -concatenated onto the previous list of users. (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'.) +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 @@ -15401,6 +15405,12 @@ very simple, relying on `awk''s associative arrays to do work. The `id' program in *note Id Program::, uses these functions. + ---------- 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'. +  File: gawk.info, Node: Walking Arrays, Prev: Group Functions, Up: Library Functions @@ -15637,7 +15647,7 @@ by characters, the output field separator is set to the null string: if (FS == " ") # defeat awk semantics FS = "[ ]" } else if (c == "s") - suppress++ + suppress = 1 else usage() } @@ -15806,7 +15816,7 @@ The `egrep' utility searches files for patterns. It uses regular expressions that are almost identical to those available in `awk' (*note Regexp::). You invoke it as follows: - egrep [ OPTIONS ] 'PATTERN' FILES ... + `egrep' [OPTIONS] `'PATTERN'' FILES ... The PATTERN is a regular expression. In typical usage, the regular expression is quoted to prevent the shell from expanding any of the @@ -15950,6 +15960,11 @@ know the total number of lines that matched the pattern: total += fcount } + The `BEGINFILE' and `ENDFILE' special patterns (*note +BEGINFILE/ENDFILE::) could be used, but then the program would be +`gawk'-specific. Additionally, this example was written before `gawk' +acquired `BEGINFILE' and `ENDFILE'. + The following rule does most of the work of matching lines. The variable `matches' is true if the line matched the pattern. If the user wants lines that did not match, the sense of `matches' is inverted @@ -15997,9 +16012,7 @@ there are no matches, the exit status is one; otherwise it is zero: END \ { - if (total == 0) - exit 1 - exit 0 + exit (total == 0) } The `usage()' function prints a usage message in case of invalid @@ -16041,7 +16054,7 @@ different from the real ones. If possible, `id' also supplies the corresponding user and group names. The output might look like this: $ id - -| uid=500(arnold) gid=500(arnold) groups=6(disk),7(lp),19(floppy) + -| uid=1000(arnold) gid=1000(arnold) groups=1000(arnold),4(adm),7(lp),27(sudo) This information is part of what is provided by `gawk''s `PROCINFO' array (*note Built-in Variables::). However, the `id' utility provides @@ -16074,34 +16087,26 @@ and the group numbers: printf("uid=%d", uid) pw = getpwuid(uid) - if (pw != "") { - split(pw, a, ":") - printf("(%s)", a[1]) - } + if (pw != "") + pr_first_field(pw) if (euid != uid) { printf(" euid=%d", euid) pw = getpwuid(euid) - if (pw != "") { - split(pw, a, ":") - printf("(%s)", a[1]) - } + if (pw != "") + pr_first_field(pw) } printf(" gid=%d", gid) pw = getgrgid(gid) - if (pw != "") { - split(pw, a, ":") - printf("(%s)", a[1]) - } + if (pw != "") + pr_first_field(pw) if (egid != gid) { printf(" egid=%d", egid) pw = getgrgid(egid) - if (pw != "") { - split(pw, a, ":") - printf("(%s)", a[1]) - } + if (pw != "") + pr_first_field(pw) } for (i = 1; ("group" i) in PROCINFO; i++) { @@ -16110,10 +16115,8 @@ and the group numbers: group = PROCINFO["group" i] printf("%d", group) pw = getgrgid(group) - if (pw != "") { - split(pw, a, ":") - printf("(%s)", a[1]) - } + if (pw != "") + pr_first_field(pw) if (("group" (i+1)) in PROCINFO) printf(",") } @@ -16121,6 +16124,12 @@ and the group numbers: print "" } + function pr_first_field(str, a) + { + split(str, a, ":") + printf("(%s)", a[1]) + } + The test in the `for' loop is worth noting. Any supplementary groups in the `PROCINFO' array have the indices `"group1"' through `"groupN"' for some N, i.e., the total number of supplementary groups. @@ -16135,6 +16144,10 @@ the last group in the array and the loop exits. then the condition is false the first time it's tested, and the loop body never executes. + The `pr_first_field()' function simply isolates out some code that +is used repeatedly, making the whole program slightly shorter and +cleaner. +  File: gawk.info, Node: Split Program, Next: Tee Program, Prev: Id Program, Up: Clones @@ -16144,7 +16157,7 @@ File: gawk.info, Node: Split Program, Next: Tee Program, Prev: Id Program, U The `split' program splits large text files into smaller pieces. Usage is as follows:(1) - split [-COUNT] file [ PREFIX ] + `split' [`-COUNT'] [FILE] [PREFIX] By default, the output files are named `xaa', `xab', and so on. Each file has 1000 lines in it, with the likely exception of the last file. @@ -16168,7 +16181,7 @@ output file names: # split.awk --- do split in awk # # Requires ord() and chr() library functions - # usage: split [-num] [file] [outname] + # usage: split [-count] [file] [outname] BEGIN { outfile = "x" # default @@ -16177,7 +16190,7 @@ output file names: usage() i = 1 - if (ARGV[i] ~ /^-[[:digit:]]+$/) { + if (i in ARGV && ARGV[i] ~ /^-[[:digit:]]+$/) { count = -ARGV[i] ARGV[i] = "" i++ @@ -16253,7 +16266,7 @@ The `tee' program is known as a "pipe fitting." `tee' copies its standard input to its standard output and also duplicates it to the files named on the command line. Its usage is as follows: - tee [-a] file ... + `tee' [`-a'] FILE ... The `-a' option tells `tee' to append to the named files, instead of truncating them and starting over. @@ -16342,7 +16355,7 @@ and by default removes duplicate lines. In other words, it only prints unique lines--hence the name. `uniq' has a number of options. The usage is as follows: - uniq [-udc [-N]] [+N] [ INPUT FILE [ OUTPUT FILE ]] + `uniq' [`-udc' [`-N']] [`+N'] [INPUTFILE [OUTPUTFILE]] The options for `uniq' are: @@ -16365,11 +16378,11 @@ usage is as follows: Skip N characters before comparing lines. Any fields specified with `-N' are skipped first. -`INPUT FILE' +`INPUTFILE' Data is read from the input file named on the command line, instead of from the standard input. -`OUTPUT FILE' +`OUTPUTFILE' The generated output is sent to the named output file, instead of to the standard output. @@ -16559,7 +16572,7 @@ File: gawk.info, Node: Wc Program, Prev: Uniq Program, Up: Clones The `wc' (word count) utility counts lines, words, and characters in one or more input files. Its usage is as follows: - wc [-lwc] [ FILES ... ] + `wc' [`-lwc'] [FILES ...] If no files are specified on the command line, `wc' reads its standard input. If there are multiple files, it also prints total @@ -16925,11 +16938,11 @@ there are more characters in the "from" list than in the "to" list, the last character of the "to" list is used for the remaining characters in the "from" list. - Some time ago, a user proposed that a transliteration function should -be added 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 job. + Once upon a time, a user proposed that a transliteration function +should be added 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 job. The `translate' program demonstrates one of the few weaknesses of standard `awk': dealing with individual characters is very painful, @@ -17010,8 +17023,8 @@ record: While it is possible to do character transliteration in a user-level function, it is not necessarily efficient, and we (the `gawk' authors) started to consider adding a built-in function. However, shortly after -writing this program, we learned that the System V Release 4 `awk' had -added the `toupper()' and `tolower()' functions (*note String +writing this program, we learned that Brian Kernighan had added the +`toupper()' and `tolower()' functions to his `awk' (*note String Functions::). These functions handle the vast majority of the cases where character transliteration is necessary, and so we chose to simply add those functions to `gawk' as well and then leave well enough alone. @@ -17023,10 +17036,10 @@ program. ---------- Footnotes ---------- - (1) On some older systems, including Solaris, `tr' may require that -the lists be written as range expressions enclosed in square brackets -(`[a-z]') and quoted, to prevent the shell from attempting a file name -expansion. This is not a feature. + (1) On some older systems, including Solaris, the system version of +`tr' may require that the lists be written as range expressions +enclosed in square brackets (`[a-z]') and quoted, to prevent the shell +from attempting a file name expansion. This is not a feature. (2) This program was written before `gawk' acquired the ability to split each character in a string into separate array elements. @@ -17146,7 +17159,7 @@ File: gawk.info, Node: Word Sorting, Next: History Sorting, Prev: Labels Prog When working with large amounts of text, it can be interesting to know how often different words appear. For example, an author may overuse -certain words, in which case she might wish to find synonyms to +certain words, in which case he or she might wish to find synonyms to substitute for words that appear too often. This node develops a program for counting words and presenting the frequency information in a useful format. @@ -17209,6 +17222,10 @@ script. Here is the new version of the program: printf "%s\t%d\n", word, freq[word] } + The regexp `/[^[:alnum:]_[:blank:]]/' might have been written +`/[[:punct:]]/', but then underscores would also be removed, and we +want to keep them. + Assuming we have saved this program in a file named `wordfreq.awk', and that the data is in `file1', the following pipeline: @@ -17286,8 +17303,7 @@ information. For example, using the following `print' statement in the print data[lines[i]], lines[i] - This works because `data[$0]' is incremented each time a line is -seen. +This works because `data[$0]' is incremented each time a line is seen.  File: gawk.info, Node: Extract Program, Next: Simple Sed, Prev: History Sorting, Up: Miscellaneous Programs @@ -17418,8 +17434,9 @@ elements (`@@' in the original file), we have to add a single `@' symbol back in.(1) When the processing of the array is finished, `join()' is called -with the value of `SUBSEP', to rejoin the pieces back into a single -line. That line is then printed to the output file: +with the value of `SUBSEP' (*note Multidimensional::), to rejoin the +pieces back into a single line. That line is then printed to the +output file: /^@c(omment)?[ \t]+file/ \ { @@ -17488,7 +17505,7 @@ closing the open file: ---------- Footnotes ---------- (1) This program was written before `gawk' had the `gensub()' -function. Consider how you might use it to simplify the code. +function. Consider how you might use it to simplify the code.  File: gawk.info, Node: Simple Sed, Next: Igawk Program, Prev: Extract Program, Up: Miscellaneous Programs @@ -17827,12 +17844,12 @@ which represents the current directory: pathlist[i] = "." } - The stack is initialized with `ARGV[1]', which will be `/dev/stdin'. -The main loop comes next. Input lines are read in succession. Lines -that do not start with `@include' are printed verbatim. If the line -does start with `@include', the file name is in `$2'. `pathto()' is -called to generate the full path. If it cannot, then the program -prints an error message and continues. + The stack is initialized with `ARGV[1]', which will be +`"/dev/stdin"'. The main loop comes next. Input lines are read in +succession. Lines that do not start with `@include' are printed +verbatim. If the line does start with `@include', the file name is in +`$2'. `pathto()' is called to generate the full path. If it cannot, +then the program prints an error message and continues. The next thing to check is if the file is included already. The `processed' array is indexed by the full file name of each included @@ -17909,7 +17926,7 @@ supplied. The `eval' command is a shell construct that reruns the shell's parsing process. This keeps things properly quoted. - This version of `igawk' represents my fifth version of this program. + This version of `igawk' represents the fifth version of this program. There are four key simplifications that make the program work better: * Using `@include' even for the files named with `-f' makes building @@ -18083,7 +18100,9 @@ supplies the following copyright terms: X*(X-x)-o*o,(x+X)*o*o+o,x*(X-x)-O-O,x-O+(O+o+X+x)*(o+O),X*X-X*(x-O)-x+O, O+X*(o*(o+O)+O),+x+O+X*o,x*(x-o),(o+X+x)*o*o-(x-O-O),O+(X-x)*(X+O),x-O}' - We leave it to you to determine what the program does. + We leave it to you to determine what the program does. (If you are +truly desperate to understand it, see Chris Johansen's explanation, +which is embedded in the Texinfo source file for this Info file.)  File: gawk.info, Node: Advanced Features, Next: Internationalization, Prev: Sample Programs, Up: Top @@ -20413,7 +20432,7 @@ categories, as follows: Program::) demonstrates: gawk> dump - -| # BEGIN + -| # BEGIN -| -| [ 1:0xfcd340] Op_rule : [in_rule = BEGIN] [source_file = brini.awk] -| [ 1:0xfcc240] Op_push_i : "~" [MALLOC|STRING|STRCUR] @@ -30122,7 +30141,7 @@ Index * Menu: * ! (exclamation point), ! operator: Boolean Ops. (line 67) -* ! (exclamation point), ! operator <1>: Egrep Program. (line 170) +* ! (exclamation point), ! operator <1>: Egrep Program. (line 175) * ! (exclamation point), ! operator <2>: Ranges. (line 48) * ! (exclamation point), ! operator: Precedence. (line 52) * ! (exclamation point), != operator <1>: Precedence. (line 65) @@ -30358,7 +30377,7 @@ Index (line 38) * \ (backslash), as field separator: Command Line Field Separator. (line 27) -* \ (backslash), continuing lines and <1>: Egrep Program. (line 220) +* \ (backslash), continuing lines and <1>: Egrep Program. (line 223) * \ (backslash), continuing lines and: Statements/Lines. (line 19) * \ (backslash), continuing lines and, comments and: Statements/Lines. (line 76) @@ -30386,7 +30405,7 @@ Index * _ (underscore), in names of private variables: Library Names. (line 29) * _ (underscore), translatable string: Programmer i18n. (line 69) -* _gr_init() user-defined function: Group Functions. (line 82) +* _gr_init() user-defined function: Group Functions. (line 83) * _ord_init() user-defined function: Ordinal Functions. (line 16) * _pw_init() user-defined function: Passwd Functions. (line 105) * accessing fields: Fields. (line 6) @@ -30632,7 +30651,7 @@ Index (line 38) * backslash (\), as field separator: Command Line Field Separator. (line 27) -* backslash (\), continuing lines and <1>: Egrep Program. (line 220) +* backslash (\), continuing lines and <1>: Egrep Program. (line 223) * backslash (\), continuing lines and: Statements/Lines. (line 19) * backslash (\), continuing lines and, comments and: Statements/Lines. (line 76) @@ -31288,7 +31307,7 @@ Index * END pattern, and profiling: Profiling. (line 62) * END pattern, assert() user-defined function and: Assert Function. (line 75) -* END pattern, backslash continuation and: Egrep Program. (line 220) +* END pattern, backslash continuation and: Egrep Program. (line 223) * 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. @@ -31300,8 +31319,8 @@ Index * ENDFILE pattern: BEGINFILE/ENDFILE. (line 6) * ENDFILE pattern, Boolean patterns and: Expression Patterns. (line 70) * endfile() user-defined function: Filetrans Function. (line 62) -* endgrent() function (C library): Group Functions. (line 215) -* endgrent() user-defined function: Group Functions. (line 218) +* endgrent() function (C library): Group Functions. (line 213) +* endgrent() user-defined function: Group Functions. (line 216) * endpwent() function (C library): Passwd Functions. (line 210) * endpwent() user-defined function: Passwd Functions. (line 213) * ENVIRON array: Auto-set. (line 60) @@ -31334,7 +31353,7 @@ Index * evaluation order, concatenation: Concatenation. (line 41) * evaluation order, functions: Calling Built-in. (line 30) * examining fields: Fields. (line 6) -* exclamation point (!), ! operator <1>: Egrep Program. (line 170) +* exclamation point (!), ! operator <1>: Egrep Program. (line 175) * exclamation point (!), ! operator <2>: Precedence. (line 52) * exclamation point (!), ! operator: Boolean Ops. (line 67) * exclamation point (!), != operator <1>: Precedence. (line 65) @@ -31730,15 +31749,15 @@ 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 186) -* getgrgid() user-defined function: Group Functions. (line 189) -* getgrnam() function (C library): Group Functions. (line 175) -* getgrnam() user-defined function: Group Functions. (line 180) -* getgruser() function (C library): Group Functions. (line 195) -* getgruser() function, user-defined: Group Functions. (line 198) +* getgrgid() function (C library): Group Functions. (line 184) +* getgrgid() user-defined function: Group Functions. (line 187) +* getgrnam() function (C library): Group Functions. (line 173) +* getgrnam() user-defined function: Group Functions. (line 178) +* getgruser() function (C library): Group Functions. (line 193) +* getgruser() function, user-defined: Group Functions. (line 196) * getline command: Reading Files. (line 20) * getline command, _gr_init() user-defined function: Group Functions. - (line 82) + (line 83) * getline command, _pw_init() function: Passwd Functions. (line 154) * getline command, coprocesses, using from <1>: Close Files And Pipes. (line 6) @@ -31939,6 +31958,7 @@ Index * Java programming language: Glossary. (line 380) * jawk: Other Versions. (line 112) * Jedi knights: Undocumented. (line 6) +* Johansen, Chris: Signature Program. (line 25) * join() user-defined function: Join Function. (line 18) * Kahrs, Ju"rgen <1>: Contributors. (line 70) * Kahrs, Ju"rgen: Acknowledgments. (line 60) @@ -33237,494 +33257,496 @@ Node: Other Features105547 Node: When106475 Node: Invoking Gawk108623 Node: Command Line110086 -Node: Options110869 -Ref: Options-Footnote-1126681 -Node: Other Arguments126706 -Node: Naming Standard Input129368 -Node: Environment Variables130462 -Node: AWKPATH Variable131020 -Ref: AWKPATH Variable-Footnote-1133798 -Ref: AWKPATH Variable-Footnote-2133843 -Node: AWKLIBPATH Variable134103 -Node: Other Environment Variables134862 -Node: Exit Status138517 -Node: Include Files139192 -Node: Loading Shared Libraries142770 -Node: Obsolete144153 -Node: Undocumented144850 -Node: Regexp145092 -Node: Regexp Usage146481 -Node: Escape Sequences148514 -Node: Regexp Operators154181 -Ref: Regexp Operators-Footnote-1161661 -Ref: Regexp Operators-Footnote-2161808 -Node: Bracket Expressions161906 -Ref: table-char-classes163796 -Node: GNU Regexp Operators166319 -Node: Case-sensitivity170042 -Ref: Case-sensitivity-Footnote-1172934 -Ref: Case-sensitivity-Footnote-2173169 -Node: Leftmost Longest173277 -Node: Computed Regexps174478 -Node: Reading Files177827 -Node: Records179829 -Node: awk split records180564 -Node: gawk split records185422 -Ref: gawk split records-Footnote-1189943 -Node: Fields189980 -Ref: Fields-Footnote-1192944 -Node: Nonconstant Fields193030 -Ref: Nonconstant Fields-Footnote-1195260 -Node: Changing Fields195462 -Node: Field Separators201416 -Node: Default Field Splitting204118 -Node: Regexp Field Splitting205235 -Node: Single Character Fields208576 -Node: Command Line Field Separator209635 -Node: Full Line Fields212977 -Ref: Full Line Fields-Footnote-1213485 -Node: Field Splitting Summary213531 -Ref: Field Splitting Summary-Footnote-1216630 -Node: Constant Size216731 -Node: Splitting By Content221338 -Ref: Splitting By Content-Footnote-1225088 -Node: Multiple Line225128 -Ref: Multiple Line-Footnote-1230984 -Node: Getline231163 -Node: Plain Getline233379 -Node: Getline/Variable235474 -Node: Getline/File236621 -Node: Getline/Variable/File238005 -Ref: Getline/Variable/File-Footnote-1239604 -Node: Getline/Pipe239691 -Node: Getline/Variable/Pipe242390 -Node: Getline/Coprocess243497 -Node: Getline/Variable/Coprocess244749 -Node: Getline Notes245486 -Node: Getline Summary248290 -Ref: table-getline-variants248698 -Node: Read Timeout249610 -Ref: Read Timeout-Footnote-1253437 -Node: Command line directories253495 -Node: Printing254377 -Node: Print256008 -Node: Print Examples257349 -Node: Output Separators260128 -Node: OFMT262144 -Node: Printf263502 -Node: Basic Printf264408 -Node: Control Letters265947 -Node: Format Modifiers269801 -Node: Printf Examples275828 -Node: Redirection278535 -Node: Special Files285507 -Node: Special FD286040 -Ref: Special FD-Footnote-1289664 -Node: Special Network289738 -Node: Special Caveats290588 -Node: Close Files And Pipes291384 -Ref: Close Files And Pipes-Footnote-1298522 -Ref: Close Files And Pipes-Footnote-2298670 -Node: Expressions298820 -Node: Values299952 -Node: Constants300628 -Node: Scalar Constants301308 -Ref: Scalar Constants-Footnote-1302167 -Node: Nondecimal-numbers302417 -Node: Regexp Constants305417 -Node: Using Constant Regexps305892 -Node: Variables308962 -Node: Using Variables309617 -Node: Assignment Options311341 -Node: Conversion313216 -Ref: table-locale-affects318652 -Ref: Conversion-Footnote-1319276 -Node: All Operators319385 -Node: Arithmetic Ops320015 -Node: Concatenation322520 -Ref: Concatenation-Footnote-1325316 -Node: Assignment Ops325436 -Ref: table-assign-ops330419 -Node: Increment Ops331736 -Node: Truth Values and Conditions335174 -Node: Truth Values336257 -Node: Typing and Comparison337306 -Node: Variable Typing338099 -Ref: Variable Typing-Footnote-1341999 -Node: Comparison Operators342121 -Ref: table-relational-ops342531 -Node: POSIX String Comparison346079 -Ref: POSIX String Comparison-Footnote-1347163 -Node: Boolean Ops347301 -Ref: Boolean Ops-Footnote-1351371 -Node: Conditional Exp351462 -Node: Function Calls353189 -Node: Precedence356947 -Node: Locales360616 -Node: Patterns and Actions362219 -Node: Pattern Overview363273 -Node: Regexp Patterns364950 -Node: Expression Patterns365493 -Node: Ranges369274 -Node: BEGIN/END372380 -Node: Using BEGIN/END373142 -Ref: Using BEGIN/END-Footnote-1375878 -Node: I/O And BEGIN/END375984 -Node: BEGINFILE/ENDFILE378269 -Node: Empty381205 -Node: Using Shell Variables381522 -Node: Action Overview383805 -Node: Statements386150 -Node: If Statement388004 -Node: While Statement389503 -Node: Do Statement391547 -Node: For Statement392703 -Node: Switch Statement395855 -Node: Break Statement397958 -Node: Continue Statement400013 -Node: Next Statement401806 -Node: Nextfile Statement404196 -Node: Exit Statement406851 -Node: Built-in Variables409253 -Node: User-modified410349 -Ref: User-modified-Footnote-1418034 -Node: Auto-set418096 -Ref: Auto-set-Footnote-1430661 -Ref: Auto-set-Footnote-2430866 -Node: ARGC and ARGV430922 -Node: Arrays434776 -Node: Array Basics436274 -Node: Array Intro437100 -Ref: figure-array-elements439073 -Node: Reference to Elements441480 -Node: Assigning Elements443753 -Node: Array Example444244 -Node: Scanning an Array445976 -Node: Controlling Scanning448991 -Ref: Controlling Scanning-Footnote-1454164 -Node: Delete454480 -Ref: Delete-Footnote-1457245 -Node: Numeric Array Subscripts457302 -Node: Uninitialized Subscripts459485 -Node: Multidimensional461110 -Node: Multiscanning464203 -Node: Arrays of Arrays465792 -Node: Functions470432 -Node: Built-in471251 -Node: Calling Built-in472329 -Node: Numeric Functions474317 -Ref: Numeric Functions-Footnote-1478151 -Ref: Numeric Functions-Footnote-2478508 -Ref: Numeric Functions-Footnote-3478556 -Node: String Functions478825 -Ref: String Functions-Footnote-1501836 -Ref: String Functions-Footnote-2501965 -Ref: String Functions-Footnote-3502213 -Node: Gory Details502300 -Ref: table-sub-escapes503969 -Ref: table-sub-posix-92505323 -Ref: table-sub-proposed506674 -Ref: table-posix-sub508028 -Ref: table-gensub-escapes509573 -Ref: Gory Details-Footnote-1510749 -Ref: Gory Details-Footnote-2510800 -Node: I/O Functions510951 -Ref: I/O Functions-Footnote-1518074 -Node: Time Functions518221 -Ref: Time Functions-Footnote-1528685 -Ref: Time Functions-Footnote-2528753 -Ref: Time Functions-Footnote-3528911 -Ref: Time Functions-Footnote-4529022 -Ref: Time Functions-Footnote-5529134 -Ref: Time Functions-Footnote-6529361 -Node: Bitwise Functions529627 -Ref: table-bitwise-ops530189 -Ref: Bitwise Functions-Footnote-1534434 -Node: Type Functions534618 -Node: I18N Functions535760 -Node: User-defined537405 -Node: Definition Syntax538209 -Ref: Definition Syntax-Footnote-1543124 -Node: Function Example543193 -Ref: Function Example-Footnote-1545837 -Node: Function Caveats545859 -Node: Calling A Function546377 -Node: Variable Scope547332 -Node: Pass By Value/Reference550320 -Node: Return Statement553828 -Node: Dynamic Typing556810 -Node: Indirect Calls557739 -Node: Library Functions567426 -Ref: Library Functions-Footnote-1570939 -Ref: Library Functions-Footnote-2571082 -Node: Library Names571253 -Ref: Library Names-Footnote-1574726 -Ref: Library Names-Footnote-2574946 -Node: General Functions575032 -Node: Strtonum Function576060 -Node: Assert Function578990 -Node: Round Function582316 -Node: Cliff Random Function583857 -Node: Ordinal Functions584873 -Ref: Ordinal Functions-Footnote-1587950 -Ref: Ordinal Functions-Footnote-2588202 -Node: Join Function588413 -Ref: Join Function-Footnote-1590184 -Node: Getlocaltime Function590384 -Node: Readfile Function594125 -Node: Data File Management595964 -Node: Filetrans Function596596 -Node: Rewind Function600665 -Node: File Checking602052 -Node: Empty Files603146 -Node: Ignoring Assigns605376 -Node: Getopt Function606930 -Ref: Getopt Function-Footnote-1618233 -Node: Passwd Functions618436 -Ref: Passwd Functions-Footnote-1627414 -Node: Group Functions627502 -Node: Walking Arrays635586 -Node: Sample Programs637722 -Node: Running Examples638396 -Node: Clones639124 -Node: Cut Program640348 -Node: Egrep Program650199 -Ref: Egrep Program-Footnote-1657972 -Node: Id Program658082 -Node: Split Program661731 -Ref: Split Program-Footnote-1665250 -Node: Tee Program665378 -Node: Uniq Program668181 -Node: Wc Program675610 -Ref: Wc Program-Footnote-1679876 -Ref: Wc Program-Footnote-2680076 -Node: Miscellaneous Programs680168 -Node: Dupword Program681356 -Node: Alarm Program683387 -Node: Translate Program688194 -Ref: Translate Program-Footnote-1692581 -Ref: Translate Program-Footnote-2692829 -Node: Labels Program692963 -Ref: Labels Program-Footnote-1696334 -Node: Word Sorting696418 -Node: History Sorting700302 -Node: Extract Program702141 -Ref: Extract Program-Footnote-1709644 -Node: Simple Sed709772 -Node: Igawk Program712834 -Ref: Igawk Program-Footnote-1728005 -Ref: Igawk Program-Footnote-2728206 -Node: Anagram Program728344 -Node: Signature Program731412 -Node: Advanced Features732512 -Node: Nondecimal Data734398 -Node: Array Sorting735981 -Node: Controlling Array Traversal736678 -Node: Array Sorting Functions744962 -Ref: Array Sorting Functions-Footnote-1748831 -Node: Two-way I/O749025 -Ref: Two-way I/O-Footnote-1754457 -Node: TCP/IP Networking754539 -Node: Profiling757383 -Node: Internationalization764886 -Node: I18N and L10N766311 -Node: Explaining gettext766997 -Ref: Explaining gettext-Footnote-1772065 -Ref: Explaining gettext-Footnote-2772249 -Node: Programmer i18n772414 -Node: Translator i18n776641 -Node: String Extraction777435 -Ref: String Extraction-Footnote-1778396 -Node: Printf Ordering778482 -Ref: Printf Ordering-Footnote-1781264 -Node: I18N Portability781328 -Ref: I18N Portability-Footnote-1783777 -Node: I18N Example783840 -Ref: I18N Example-Footnote-1786478 -Node: Gawk I18N786550 -Node: Debugger787171 -Node: Debugging788142 -Node: Debugging Concepts788575 -Node: Debugging Terms790431 -Node: Awk Debugging793028 -Node: Sample Debugging Session793920 -Node: Debugger Invocation794440 -Node: Finding The Bug795773 -Node: List of Debugger Commands802260 -Node: Breakpoint Control803594 -Node: Debugger Execution Control807258 -Node: Viewing And Changing Data810618 -Node: Execution Stack813974 -Node: Debugger Info815441 -Node: Miscellaneous Debugger Commands819435 -Node: Readline Support824613 -Node: Limitations825444 -Node: Arbitrary Precision Arithmetic827696 -Ref: Arbitrary Precision Arithmetic-Footnote-1829345 -Node: General Arithmetic829493 -Node: Floating Point Issues831213 -Node: String Conversion Precision832094 -Ref: String Conversion Precision-Footnote-1833799 -Node: Unexpected Results833908 -Node: POSIX Floating Point Problems836061 -Ref: POSIX Floating Point Problems-Footnote-1839886 -Node: Integer Programming839924 -Node: Floating-point Programming841663 -Ref: Floating-point Programming-Footnote-1847994 -Ref: Floating-point Programming-Footnote-2848264 -Node: Floating-point Representation848528 -Node: Floating-point Context849693 -Ref: table-ieee-formats850532 -Node: Rounding Mode851916 -Ref: table-rounding-modes852395 -Ref: Rounding Mode-Footnote-1855410 -Node: Gawk and MPFR855589 -Node: Arbitrary Precision Floats856998 -Ref: Arbitrary Precision Floats-Footnote-1859441 -Node: Setting Precision859757 -Ref: table-predefined-precision-strings860443 -Node: Setting Rounding Mode862588 -Ref: table-gawk-rounding-modes862992 -Node: Floating-point Constants864179 -Node: Changing Precision865608 -Ref: Changing Precision-Footnote-1867005 -Node: Exact Arithmetic867179 -Node: Arbitrary Precision Integers870317 -Ref: Arbitrary Precision Integers-Footnote-1873332 -Node: Dynamic Extensions873479 -Node: Extension Intro874937 -Node: Plugin License876202 -Node: Extension Mechanism Outline876887 -Ref: load-extension877304 -Ref: load-new-function878782 -Ref: call-new-function879777 -Node: Extension API Description881792 -Node: Extension API Functions Introduction883079 -Node: General Data Types888006 -Ref: General Data Types-Footnote-1893701 -Node: Requesting Values894000 -Ref: table-value-types-returned894737 -Node: Memory Allocation Functions895691 -Ref: Memory Allocation Functions-Footnote-1898437 -Node: Constructor Functions898533 -Node: Registration Functions900291 -Node: Extension Functions900976 -Node: Exit Callback Functions903278 -Node: Extension Version String904527 -Node: Input Parsers905177 -Node: Output Wrappers914934 -Node: Two-way processors919444 -Node: Printing Messages921652 -Ref: Printing Messages-Footnote-1922729 -Node: Updating `ERRNO'922881 -Node: Accessing Parameters923620 -Node: Symbol Table Access924850 -Node: Symbol table by name925364 -Node: Symbol table by cookie927340 -Ref: Symbol table by cookie-Footnote-1931472 -Node: Cached values931535 -Ref: Cached values-Footnote-1935025 -Node: Array Manipulation935116 -Ref: Array Manipulation-Footnote-1936214 -Node: Array Data Types936253 -Ref: Array Data Types-Footnote-1938956 -Node: Array Functions939048 -Node: Flattening Arrays942884 -Node: Creating Arrays949736 -Node: Extension API Variables954461 -Node: Extension Versioning955097 -Node: Extension API Informational Variables956998 -Node: Extension API Boilerplate958084 -Node: Finding Extensions961888 -Node: Extension Example962448 -Node: Internal File Description963178 -Node: Internal File Ops967269 -Ref: Internal File Ops-Footnote-1978778 -Node: Using Internal File Ops978918 -Ref: Using Internal File Ops-Footnote-1981265 -Node: Extension Samples981531 -Node: Extension Sample File Functions983055 -Node: Extension Sample Fnmatch991542 -Node: Extension Sample Fork993311 -Node: Extension Sample Inplace994524 -Node: Extension Sample Ord996302 -Node: Extension Sample Readdir997138 -Node: Extension Sample Revout998670 -Node: Extension Sample Rev2way999263 -Node: Extension Sample Read write array999953 -Node: Extension Sample Readfile1001836 -Node: Extension Sample API Tests1002936 -Node: Extension Sample Time1003461 -Node: gawkextlib1004825 -Node: Language History1007606 -Node: V7/SVR3.11009199 -Node: SVR41011519 -Node: POSIX1012961 -Node: BTL1014347 -Node: POSIX/GNU1015081 -Node: Feature History1020680 -Node: Common Extensions1033656 -Node: Ranges and Locales1034968 -Ref: Ranges and Locales-Footnote-11039585 -Ref: Ranges and Locales-Footnote-21039612 -Ref: Ranges and Locales-Footnote-31039846 -Node: Contributors1040067 -Node: Installation1045448 -Node: Gawk Distribution1046342 -Node: Getting1046826 -Node: Extracting1047652 -Node: Distribution contents1049344 -Node: Unix Installation1055065 -Node: Quick Installation1055682 -Node: Additional Configuration Options1058128 -Node: Configuration Philosophy1059864 -Node: Non-Unix Installation1062218 -Node: PC Installation1062676 -Node: PC Binary Installation1063987 -Node: PC Compiling1065835 -Node: PC Testing1068795 -Node: PC Using1069971 -Node: Cygwin1074139 -Node: MSYS1074948 -Node: VMS Installation1075462 -Node: VMS Compilation1076258 -Ref: VMS Compilation-Footnote-11077510 -Node: VMS Dynamic Extensions1077568 -Node: VMS Installation Details1078941 -Node: VMS Running1081192 -Node: VMS GNV1084026 -Node: VMS Old Gawk1084749 -Node: Bugs1085219 -Node: Other Versions1089137 -Node: Notes1095221 -Node: Compatibility Mode1096021 -Node: Additions1096804 -Node: Accessing The Source1097731 -Node: Adding Code1099171 -Node: New Ports1105216 -Node: Derived Files1109351 -Ref: Derived Files-Footnote-11114672 -Ref: Derived Files-Footnote-21114706 -Ref: Derived Files-Footnote-31115306 -Node: Future Extensions1115404 -Node: Implementation Limitations1115987 -Node: Extension Design1117235 -Node: Old Extension Problems1118389 -Ref: Old Extension Problems-Footnote-11119897 -Node: Extension New Mechanism Goals1119954 -Ref: Extension New Mechanism Goals-Footnote-11123319 -Node: Extension Other Design Decisions1123505 -Node: Extension Future Growth1125611 -Node: Old Extension Mechanism1126447 -Node: Basic Concepts1128187 -Node: Basic High Level1128868 -Ref: figure-general-flow1129140 -Ref: figure-process-flow1129739 -Ref: Basic High Level-Footnote-11132968 -Node: Basic Data Typing1133153 -Node: Glossary1136508 -Node: Copying1161739 -Node: GNU Free Documentation License1199295 -Node: Index1224431 +Node: Options110877 +Ref: Options-Footnote-1126689 +Node: Other Arguments126714 +Node: Naming Standard Input129376 +Node: Environment Variables130470 +Node: AWKPATH Variable131028 +Ref: AWKPATH Variable-Footnote-1133806 +Ref: AWKPATH Variable-Footnote-2133851 +Node: AWKLIBPATH Variable134111 +Node: Other Environment Variables134870 +Node: Exit Status138525 +Node: Include Files139200 +Node: Loading Shared Libraries142778 +Node: Obsolete144161 +Node: Undocumented144858 +Node: Regexp145100 +Node: Regexp Usage146489 +Node: Escape Sequences148522 +Node: Regexp Operators154189 +Ref: Regexp Operators-Footnote-1161669 +Ref: Regexp Operators-Footnote-2161816 +Node: Bracket Expressions161914 +Ref: table-char-classes163804 +Node: GNU Regexp Operators166327 +Node: Case-sensitivity170050 +Ref: Case-sensitivity-Footnote-1172942 +Ref: Case-sensitivity-Footnote-2173177 +Node: Leftmost Longest173285 +Node: Computed Regexps174486 +Node: Reading Files177835 +Node: Records179837 +Node: awk split records180572 +Node: gawk split records185430 +Ref: gawk split records-Footnote-1189951 +Node: Fields189988 +Ref: Fields-Footnote-1192952 +Node: Nonconstant Fields193038 +Ref: Nonconstant Fields-Footnote-1195268 +Node: Changing Fields195470 +Node: Field Separators201424 +Node: Default Field Splitting204126 +Node: Regexp Field Splitting205243 +Node: Single Character Fields208584 +Node: Command Line Field Separator209643 +Node: Full Line Fields212985 +Ref: Full Line Fields-Footnote-1213493 +Node: Field Splitting Summary213539 +Ref: Field Splitting Summary-Footnote-1216638 +Node: Constant Size216739 +Node: Splitting By Content221346 +Ref: Splitting By Content-Footnote-1225096 +Node: Multiple Line225136 +Ref: Multiple Line-Footnote-1230992 +Node: Getline231171 +Node: Plain Getline233387 +Node: Getline/Variable235482 +Node: Getline/File236629 +Node: Getline/Variable/File238013 +Ref: Getline/Variable/File-Footnote-1239612 +Node: Getline/Pipe239699 +Node: Getline/Variable/Pipe242398 +Node: Getline/Coprocess243505 +Node: Getline/Variable/Coprocess244757 +Node: Getline Notes245494 +Node: Getline Summary248298 +Ref: table-getline-variants248706 +Node: Read Timeout249618 +Ref: Read Timeout-Footnote-1253445 +Node: Command line directories253503 +Node: Printing254385 +Node: Print256016 +Node: Print Examples257357 +Node: Output Separators260136 +Node: OFMT262152 +Node: Printf263510 +Node: Basic Printf264416 +Node: Control Letters265955 +Node: Format Modifiers269809 +Node: Printf Examples275836 +Node: Redirection278543 +Node: Special Files285515 +Node: Special FD286048 +Ref: Special FD-Footnote-1289672 +Node: Special Network289746 +Node: Special Caveats290596 +Node: Close Files And Pipes291392 +Ref: Close Files And Pipes-Footnote-1298530 +Ref: Close Files And Pipes-Footnote-2298678 +Node: Expressions298828 +Node: Values299960 +Node: Constants300636 +Node: Scalar Constants301316 +Ref: Scalar Constants-Footnote-1302175 +Node: Nondecimal-numbers302425 +Node: Regexp Constants305425 +Node: Using Constant Regexps305900 +Node: Variables308970 +Node: Using Variables309625 +Node: Assignment Options311349 +Node: Conversion313224 +Ref: table-locale-affects318660 +Ref: Conversion-Footnote-1319284 +Node: All Operators319393 +Node: Arithmetic Ops320023 +Node: Concatenation322528 +Ref: Concatenation-Footnote-1325324 +Node: Assignment Ops325444 +Ref: table-assign-ops330427 +Node: Increment Ops331744 +Node: Truth Values and Conditions335182 +Node: Truth Values336265 +Node: Typing and Comparison337314 +Node: Variable Typing338107 +Ref: Variable Typing-Footnote-1342007 +Node: Comparison Operators342129 +Ref: table-relational-ops342539 +Node: POSIX String Comparison346087 +Ref: POSIX String Comparison-Footnote-1347171 +Node: Boolean Ops347309 +Ref: Boolean Ops-Footnote-1351379 +Node: Conditional Exp351470 +Node: Function Calls353197 +Node: Precedence356955 +Node: Locales360624 +Node: Patterns and Actions362227 +Node: Pattern Overview363281 +Node: Regexp Patterns364958 +Node: Expression Patterns365501 +Node: Ranges369282 +Node: BEGIN/END372388 +Node: Using BEGIN/END373150 +Ref: Using BEGIN/END-Footnote-1375886 +Node: I/O And BEGIN/END375992 +Node: BEGINFILE/ENDFILE378277 +Node: Empty381213 +Node: Using Shell Variables381530 +Node: Action Overview383813 +Node: Statements386164 +Node: If Statement388018 +Node: While Statement389521 +Node: Do Statement391565 +Node: For Statement392721 +Node: Switch Statement395873 +Node: Break Statement397976 +Node: Continue Statement400031 +Node: Next Statement401824 +Node: Nextfile Statement404214 +Node: Exit Statement406869 +Node: Built-in Variables409273 +Node: User-modified410369 +Ref: User-modified-Footnote-1418054 +Node: Auto-set418116 +Ref: Auto-set-Footnote-1430681 +Ref: Auto-set-Footnote-2430886 +Node: ARGC and ARGV430942 +Node: Arrays434796 +Node: Array Basics436294 +Node: Array Intro437120 +Ref: figure-array-elements439093 +Node: Reference to Elements441500 +Node: Assigning Elements443773 +Node: Array Example444264 +Node: Scanning an Array445996 +Node: Controlling Scanning449011 +Ref: Controlling Scanning-Footnote-1454184 +Node: Delete454500 +Ref: Delete-Footnote-1457265 +Node: Numeric Array Subscripts457322 +Node: Uninitialized Subscripts459505 +Node: Multidimensional461130 +Node: Multiscanning464223 +Node: Arrays of Arrays465812 +Node: Functions470452 +Node: Built-in471271 +Node: Calling Built-in472349 +Node: Numeric Functions474337 +Ref: Numeric Functions-Footnote-1478171 +Ref: Numeric Functions-Footnote-2478528 +Ref: Numeric Functions-Footnote-3478576 +Node: String Functions478845 +Ref: String Functions-Footnote-1501856 +Ref: String Functions-Footnote-2501985 +Ref: String Functions-Footnote-3502233 +Node: Gory Details502320 +Ref: table-sub-escapes503989 +Ref: table-sub-posix-92505343 +Ref: table-sub-proposed506694 +Ref: table-posix-sub508048 +Ref: table-gensub-escapes509593 +Ref: Gory Details-Footnote-1510769 +Ref: Gory Details-Footnote-2510820 +Node: I/O Functions510971 +Ref: I/O Functions-Footnote-1518094 +Node: Time Functions518241 +Ref: Time Functions-Footnote-1528705 +Ref: Time Functions-Footnote-2528773 +Ref: Time Functions-Footnote-3528931 +Ref: Time Functions-Footnote-4529042 +Ref: Time Functions-Footnote-5529154 +Ref: Time Functions-Footnote-6529381 +Node: Bitwise Functions529647 +Ref: table-bitwise-ops530209 +Ref: Bitwise Functions-Footnote-1534454 +Node: Type Functions534638 +Node: I18N Functions535780 +Node: User-defined537425 +Node: Definition Syntax538229 +Ref: Definition Syntax-Footnote-1543154 +Node: Function Example543223 +Ref: Function Example-Footnote-1545867 +Node: Function Caveats545889 +Node: Calling A Function546407 +Node: Variable Scope547362 +Node: Pass By Value/Reference550350 +Node: Return Statement553858 +Node: Dynamic Typing556842 +Node: Indirect Calls557771 +Node: Library Functions567458 +Ref: Library Functions-Footnote-1570971 +Ref: Library Functions-Footnote-2571114 +Node: Library Names571285 +Ref: Library Names-Footnote-1574758 +Ref: Library Names-Footnote-2574978 +Node: General Functions575064 +Node: Strtonum Function576092 +Node: Assert Function579022 +Node: Round Function582348 +Node: Cliff Random Function583889 +Node: Ordinal Functions584905 +Ref: Ordinal Functions-Footnote-1587982 +Ref: Ordinal Functions-Footnote-2588234 +Node: Join Function588445 +Ref: Join Function-Footnote-1590216 +Node: Getlocaltime Function590416 +Node: Readfile Function594152 +Node: Data File Management595991 +Node: Filetrans Function596623 +Node: Rewind Function600692 +Node: File Checking602079 +Ref: File Checking-Footnote-1603211 +Node: Empty Files603412 +Node: Ignoring Assigns605642 +Node: Getopt Function607196 +Ref: Getopt Function-Footnote-1618499 +Node: Passwd Functions618702 +Ref: Passwd Functions-Footnote-1627681 +Node: Group Functions627769 +Ref: Group Functions-Footnote-1635711 +Node: Walking Arrays635924 +Node: Sample Programs638060 +Node: Running Examples638734 +Node: Clones639462 +Node: Cut Program640686 +Node: Egrep Program650539 +Ref: Egrep Program-Footnote-1658510 +Node: Id Program658620 +Node: Split Program662284 +Ref: Split Program-Footnote-1665822 +Node: Tee Program665950 +Node: Uniq Program668757 +Node: Wc Program676187 +Ref: Wc Program-Footnote-1680455 +Ref: Wc Program-Footnote-2680655 +Node: Miscellaneous Programs680747 +Node: Dupword Program681935 +Node: Alarm Program683966 +Node: Translate Program688773 +Ref: Translate Program-Footnote-1693164 +Ref: Translate Program-Footnote-2693434 +Node: Labels Program693568 +Ref: Labels Program-Footnote-1696939 +Node: Word Sorting697023 +Node: History Sorting701066 +Node: Extract Program702902 +Ref: Extract Program-Footnote-1710432 +Node: Simple Sed710561 +Node: Igawk Program713623 +Ref: Igawk Program-Footnote-1728798 +Ref: Igawk Program-Footnote-2728999 +Node: Anagram Program729137 +Node: Signature Program732205 +Node: Advanced Features733452 +Node: Nondecimal Data735338 +Node: Array Sorting736921 +Node: Controlling Array Traversal737618 +Node: Array Sorting Functions745902 +Ref: Array Sorting Functions-Footnote-1749771 +Node: Two-way I/O749965 +Ref: Two-way I/O-Footnote-1755397 +Node: TCP/IP Networking755479 +Node: Profiling758323 +Node: Internationalization765826 +Node: I18N and L10N767251 +Node: Explaining gettext767937 +Ref: Explaining gettext-Footnote-1773005 +Ref: Explaining gettext-Footnote-2773189 +Node: Programmer i18n773354 +Node: Translator i18n777581 +Node: String Extraction778375 +Ref: String Extraction-Footnote-1779336 +Node: Printf Ordering779422 +Ref: Printf Ordering-Footnote-1782204 +Node: I18N Portability782268 +Ref: I18N Portability-Footnote-1784717 +Node: I18N Example784780 +Ref: I18N Example-Footnote-1787418 +Node: Gawk I18N787490 +Node: Debugger788111 +Node: Debugging789082 +Node: Debugging Concepts789515 +Node: Debugging Terms791371 +Node: Awk Debugging793968 +Node: Sample Debugging Session794860 +Node: Debugger Invocation795380 +Node: Finding The Bug796713 +Node: List of Debugger Commands803200 +Node: Breakpoint Control804534 +Node: Debugger Execution Control808198 +Node: Viewing And Changing Data811558 +Node: Execution Stack814914 +Node: Debugger Info816381 +Node: Miscellaneous Debugger Commands820375 +Node: Readline Support825559 +Node: Limitations826390 +Node: Arbitrary Precision Arithmetic828642 +Ref: Arbitrary Precision Arithmetic-Footnote-1830291 +Node: General Arithmetic830439 +Node: Floating Point Issues832159 +Node: String Conversion Precision833040 +Ref: String Conversion Precision-Footnote-1834745 +Node: Unexpected Results834854 +Node: POSIX Floating Point Problems837007 +Ref: POSIX Floating Point Problems-Footnote-1840832 +Node: Integer Programming840870 +Node: Floating-point Programming842609 +Ref: Floating-point Programming-Footnote-1848940 +Ref: Floating-point Programming-Footnote-2849210 +Node: Floating-point Representation849474 +Node: Floating-point Context850639 +Ref: table-ieee-formats851478 +Node: Rounding Mode852862 +Ref: table-rounding-modes853341 +Ref: Rounding Mode-Footnote-1856356 +Node: Gawk and MPFR856535 +Node: Arbitrary Precision Floats857944 +Ref: Arbitrary Precision Floats-Footnote-1860387 +Node: Setting Precision860703 +Ref: table-predefined-precision-strings861389 +Node: Setting Rounding Mode863534 +Ref: table-gawk-rounding-modes863938 +Node: Floating-point Constants865125 +Node: Changing Precision866554 +Ref: Changing Precision-Footnote-1867951 +Node: Exact Arithmetic868125 +Node: Arbitrary Precision Integers871263 +Ref: Arbitrary Precision Integers-Footnote-1874278 +Node: Dynamic Extensions874425 +Node: Extension Intro875883 +Node: Plugin License877148 +Node: Extension Mechanism Outline877833 +Ref: load-extension878250 +Ref: load-new-function879728 +Ref: call-new-function880723 +Node: Extension API Description882738 +Node: Extension API Functions Introduction884025 +Node: General Data Types888952 +Ref: General Data Types-Footnote-1894647 +Node: Requesting Values894946 +Ref: table-value-types-returned895683 +Node: Memory Allocation Functions896637 +Ref: Memory Allocation Functions-Footnote-1899383 +Node: Constructor Functions899479 +Node: Registration Functions901237 +Node: Extension Functions901922 +Node: Exit Callback Functions904224 +Node: Extension Version String905473 +Node: Input Parsers906123 +Node: Output Wrappers915880 +Node: Two-way processors920390 +Node: Printing Messages922598 +Ref: Printing Messages-Footnote-1923675 +Node: Updating `ERRNO'923827 +Node: Accessing Parameters924566 +Node: Symbol Table Access925796 +Node: Symbol table by name926310 +Node: Symbol table by cookie928286 +Ref: Symbol table by cookie-Footnote-1932418 +Node: Cached values932481 +Ref: Cached values-Footnote-1935971 +Node: Array Manipulation936062 +Ref: Array Manipulation-Footnote-1937160 +Node: Array Data Types937199 +Ref: Array Data Types-Footnote-1939902 +Node: Array Functions939994 +Node: Flattening Arrays943830 +Node: Creating Arrays950682 +Node: Extension API Variables955407 +Node: Extension Versioning956043 +Node: Extension API Informational Variables957944 +Node: Extension API Boilerplate959030 +Node: Finding Extensions962834 +Node: Extension Example963394 +Node: Internal File Description964124 +Node: Internal File Ops968215 +Ref: Internal File Ops-Footnote-1979724 +Node: Using Internal File Ops979864 +Ref: Using Internal File Ops-Footnote-1982211 +Node: Extension Samples982477 +Node: Extension Sample File Functions984001 +Node: Extension Sample Fnmatch992488 +Node: Extension Sample Fork994257 +Node: Extension Sample Inplace995470 +Node: Extension Sample Ord997248 +Node: Extension Sample Readdir998084 +Node: Extension Sample Revout999616 +Node: Extension Sample Rev2way1000209 +Node: Extension Sample Read write array1000899 +Node: Extension Sample Readfile1002782 +Node: Extension Sample API Tests1003882 +Node: Extension Sample Time1004407 +Node: gawkextlib1005771 +Node: Language History1008552 +Node: V7/SVR3.11010145 +Node: SVR41012465 +Node: POSIX1013907 +Node: BTL1015293 +Node: POSIX/GNU1016027 +Node: Feature History1021626 +Node: Common Extensions1034602 +Node: Ranges and Locales1035914 +Ref: Ranges and Locales-Footnote-11040531 +Ref: Ranges and Locales-Footnote-21040558 +Ref: Ranges and Locales-Footnote-31040792 +Node: Contributors1041013 +Node: Installation1046394 +Node: Gawk Distribution1047288 +Node: Getting1047772 +Node: Extracting1048598 +Node: Distribution contents1050290 +Node: Unix Installation1056011 +Node: Quick Installation1056628 +Node: Additional Configuration Options1059074 +Node: Configuration Philosophy1060810 +Node: Non-Unix Installation1063164 +Node: PC Installation1063622 +Node: PC Binary Installation1064933 +Node: PC Compiling1066781 +Node: PC Testing1069741 +Node: PC Using1070917 +Node: Cygwin1075085 +Node: MSYS1075894 +Node: VMS Installation1076408 +Node: VMS Compilation1077204 +Ref: VMS Compilation-Footnote-11078456 +Node: VMS Dynamic Extensions1078514 +Node: VMS Installation Details1079887 +Node: VMS Running1082138 +Node: VMS GNV1084972 +Node: VMS Old Gawk1085695 +Node: Bugs1086165 +Node: Other Versions1090083 +Node: Notes1096167 +Node: Compatibility Mode1096967 +Node: Additions1097750 +Node: Accessing The Source1098677 +Node: Adding Code1100117 +Node: New Ports1106162 +Node: Derived Files1110297 +Ref: Derived Files-Footnote-11115618 +Ref: Derived Files-Footnote-21115652 +Ref: Derived Files-Footnote-31116252 +Node: Future Extensions1116350 +Node: Implementation Limitations1116933 +Node: Extension Design1118181 +Node: Old Extension Problems1119335 +Ref: Old Extension Problems-Footnote-11120843 +Node: Extension New Mechanism Goals1120900 +Ref: Extension New Mechanism Goals-Footnote-11124265 +Node: Extension Other Design Decisions1124451 +Node: Extension Future Growth1126557 +Node: Old Extension Mechanism1127393 +Node: Basic Concepts1129133 +Node: Basic High Level1129814 +Ref: figure-general-flow1130086 +Ref: figure-process-flow1130685 +Ref: Basic High Level-Footnote-11133914 +Node: Basic Data Typing1134099 +Node: Glossary1137454 +Node: Copying1162685 +Node: GNU Free Documentation License1200241 +Node: Index1225377  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 470b2822..88098df3 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -58,6 +58,7 @@ @set SUBSECTION subsection @set DARKCORNER @inmargin{@image{lflashlight,1cm}, @image{rflashlight,1cm}} @set COMMONEXT (c.e.) +@set PAGE page @end iftex @ifinfo @set DOCUMENT Info file @@ -67,6 +68,7 @@ @set SUBSECTION node @set DARKCORNER (d.c.) @set COMMONEXT (c.e.) +@set PAGE screen @end ifinfo @ifhtml @set DOCUMENT Web page @@ -76,6 +78,7 @@ @set SUBSECTION subsection @set DARKCORNER (d.c.) @set COMMONEXT (c.e.) +@set PAGE screen @end ifhtml @ifdocbook @set DOCUMENT book @@ -85,6 +88,7 @@ @set SUBSECTION subsection @set DARKCORNER (d.c.) @set COMMONEXT (c.e.) +@set PAGE page @end ifdocbook @ifxml @set DOCUMENT book @@ -94,6 +98,7 @@ @set SUBSECTION subsection @set DARKCORNER (d.c.) @set COMMONEXT (c.e.) +@set PAGE page @end ifxml @ifplaintext @set DOCUMENT book @@ -103,6 +108,7 @@ @set SUBSECTION subsection @set DARKCORNER (d.c.) @set COMMONEXT (c.e.) +@set PAGE page @end ifplaintext @ifdocbook @@ -3388,19 +3394,10 @@ There are two ways to run @command{awk}---with an explicit program or with one or more program files. Here are templates for both of them; items enclosed in [@dots{}] in these templates are optional: -@ifnotdocbook -@example -awk @r{[@var{options}]} -f progfile @r{[@code{--}]} @var{file} @dots{} -awk @r{[@var{options}]} @r{[@code{--}]} '@var{program}' @var{file} @dots{} -@end example -@end ifnotdocbook - -@c FIXME - find a better way to mark this up in docbook -@docbook -awk [options] -f progfile [--] file … -awk [options] [--] 'program' file … - -@end docbook +@display +@command{awk} [@var{options}] @option{-f} @var{progfile} [@option{--}] @var{file} @dots{} +@command{awk} [@var{options}] [@option{--}] @code{'@var{program}'} @var{file} @dots{} +@end display @cindex GNU long options @cindex long options @@ -12948,13 +12945,13 @@ both) may be omitted. The purpose of the @dfn{action} is to tell @command{awk} what to do once a match for the pattern is found. Thus, in outline, an @command{awk} program generally looks like this: -@example -@r{[}@var{pattern}@r{]} @{ @var{action} @} - @var{pattern} @r{[}@{ @var{action} @}@r{]} +@display +[@var{pattern}] @code{@{ @var{action} @}} + @var{pattern} [@code{@{ @var{action} @}}] @dots{} -function @var{name}(@var{args}) @{ @dots{} @} +@code{function @var{name}(@var{args}) @{ @dots{} @}} @dots{} -@end example +@end display @cindex @code{@{@}} (braces), actions and @cindex braces (@code{@{@}}), actions and @@ -13069,9 +13066,9 @@ newlines or semicolons. The @code{if}-@code{else} statement is @command{awk}'s decision-making statement. It looks like this: -@example -if (@var{condition}) @var{then-body} @r{[}else @var{else-body}@r{]} -@end example +@display +@code{if (@var{condition}) @var{then-body}} [@code{else @var{else-body}}] +@end display @noindent The @var{condition} is an expression that controls what the rest of the @@ -13669,9 +13666,9 @@ The @code{exit} statement causes @command{awk} to immediately stop executing the current rule and to stop processing input; any remaining input is ignored. The @code{exit} statement is written as follows: -@example -exit @r{[}@var{return code}@r{]} -@end example +@display +@code{exit} [@var{return code}] +@end display @cindex @code{BEGIN} pattern, @code{exit} statement and @cindex @code{END} pattern, @code{exit} statement and @@ -18510,12 +18507,12 @@ entire program before starting to execute any of it. The definition of a function named @var{name} looks like this: -@example -function @var{name}(@r{[}@var{parameter-list}@r{]}) -@{ +@display +@code{function} @var{name}@code{(}[@var{parameter-list}]@code{)} +@code{@{} @var{body-of-function} -@} -@end example +@code{@}} +@end display @cindex names, functions @cindex functions, names of @@ -19037,9 +19034,9 @@ This statement returns control to the calling part of the @command{awk} program. can also be used to return a value for use in the rest of the @command{awk} program. It looks like this: -@example -return @r{[}@var{expression}@r{]} -@end example +@display +@code{return} [@var{expression}] +@end display The @var{expression} part is optional. Due most likely to an oversight, POSIX does not define what the return @@ -20348,7 +20345,7 @@ function getlocaltime(time, ret, now, i) now = systime() # return date(1)-style output - ret = strftime("%a %b %e %H:%M:%S %Z %Y", now) + ret = strftime(PROCINFO["strftime"], now) # clear out target array delete time @@ -20704,10 +20701,12 @@ The @code{rewind()} function also relies on the @code{nextfile} keyword @cindex readable data files@comma{} checking @cindex files, skipping Normally, if you give @command{awk} a data file that isn't readable, -it stops with a fatal error. There are times when you -might want to just ignore such files and keep going. You can -do this by prepending the following program to your @command{awk} -program: +it stops with a fatal error. There are times when you might want to +just ignore such files and keep going.@footnote{The @code{BEGINFILE} +special pattern (@pxref{BEGINFILE/ENDFILE}) provides an alternative +mechanism for dealing with files that can't be opened. However, the +code here provides a portable solution.} You can do this by prepending +the following program to your @command{awk} program: @cindex @code{readable.awk} program @example @@ -20745,7 +20744,7 @@ skips the file (since it's no longer in the list). See also @ref{ARGC and ARGV}. @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 @@ -21218,7 +21217,7 @@ BEGIN @{ # test program if (_getopt_test) @{ while ((_go_c = getopt(ARGC, ARGV, "ab:cd")) != -1) - printf("c = <%c>, optarg = <%s>\n", + printf("c = <%c>, Optarg = <%s>\n", _go_c, Optarg) printf("non-option arguments:\n") for (; Optind < ARGC; Optind++) @@ -21234,32 +21233,31 @@ result of two sample runs of the test program: @example $ @kbd{awk -f getopt.awk -v _getopt_test=1 -- -a -cbARG bax -x} -@print{} c = , optarg = <> -@print{} c = , optarg = <> -@print{} c = , optarg = +@print{} c = , Optarg = <> +@print{} c = , Optarg = <> +@print{} c = , Optarg = @print{} non-option arguments: @print{} ARGV[3] = @print{} ARGV[4] = <-x> $ @kbd{awk -f getopt.awk -v _getopt_test=1 -- -a -x -- xyz abc} -@print{} c = , optarg = <> +@print{} c = , Optarg = <> @error{} x -- invalid option -@print{} c = , optarg = <> +@print{} c = , Optarg = <> @print{} non-option arguments: @print{} ARGV[4] = @print{} ARGV[5] = @end example -In both runs, -the first @option{--} terminates the arguments to @command{awk}, so that it does -not try to interpret the @option{-a}, etc., as its own options. +In both runs, the first @option{--} terminates the arguments to +@command{awk}, so that it does not try to interpret the @option{-a}, +etc., as its own options. @quotation NOTE -After @code{getopt()} is through, it is the responsibility of the user level -code to -clear out all the elements of @code{ARGV} from 1 to @code{Optind}, -so that @command{awk} does not try to process the command-line options -as file names. +After @code{getopt()} is through, it is the responsibility of the +user level code to clear out all the elements of @code{ARGV} from 1 +to @code{Optind}, so that @command{awk} does not try to process the +command-line options as file names. @end quotation Several of the sample programs presented in @@ -21328,7 +21326,7 @@ Following is @command{pwcat}, a C program that ``cats'' the password database: /* * pwcat.c * - * Generate a printable version of the password database + * Generate a printable version of the password database. */ @c endfile @ignore @@ -21674,7 +21672,7 @@ is as follows: /* * grcat.c * - * Generate a printable version of the group database + * Generate a printable version of the group database. */ @c endfile @ignore @@ -21761,7 +21759,7 @@ it is usually empty or set to @samp{*}. @item Group ID Number The group's numeric group ID number; -this number must be unique within the file. +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 we cast it to @code{long} for all cases.) @@ -21897,10 +21895,10 @@ tvpeople:*:101:david,conan,tom,joan For this reason, @code{_gr_init()} looks to see if a group name or group ID number is already seen. If it is, then the user names are -simply concatenated onto the previous list of users. (There is actually a +simply concatenated onto the previous list of users.@footnote{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 @code{$4}.) +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}, @@ -22270,13 +22268,7 @@ function usage( e1, e2) @noindent The variables @code{e1} and @code{e2} are used so that the function -fits nicely on the -@ifnotinfo -page. -@end ifnotinfo -@ifnottex -screen. -@end ifnottex +fits nicely on the @value{PAGE}. @cindex @code{BEGIN} pattern, running @command{awk} programs and @cindex @code{FS} variable, running @command{awk} programs and @@ -22315,7 +22307,7 @@ BEGIN \ if (FS == " ") # defeat awk semantics FS = "[ ]" @} else if (c == "s") - suppress++ + suppress = 1 else usage() @} @@ -22528,9 +22520,9 @@ expressions that are almost identical to those available in @command{awk} (@pxref{Regexp}). You invoke it as follows: -@example -egrep @r{[} @var{options} @r{]} '@var{pattern}' @var{files} @dots{} -@end example +@display +@command{egrep} [@var{options}] @code{'@var{pattern}'} @var{files} @dots{} +@end display The @var{pattern} is a regular expression. In typical usage, the regular expression is quoted to prevent the shell from expanding any of the @@ -22712,6 +22704,11 @@ function endfile(file) @c endfile @end example +The @code{BEGINFILE} and @code{ENDFILE} special patterns +(@pxref{BEGINFILE/ENDFILE}) could be used, but then the program would be +@command{gawk}-specific. Additionally, this example was written before +@command{gawk} acquired @code{BEGINFILE} and @code{ENDFILE}. + The following rule does most of the work of matching lines. The variable @code{matches} is true if the line matched the pattern. If the user wants lines that did not match, the sense of @code{matches} is inverted @@ -22768,9 +22765,7 @@ there are no matches, the exit status is one; otherwise it is zero: @c file eg/prog/egrep.awk END \ @{ - if (total == 0) - exit 1 - exit 0 + exit (total == 0) @} @c endfile @end example @@ -22824,7 +22819,7 @@ corresponding user and group names. The output might look like this: @example $ @kbd{id} -@print{} uid=500(arnold) gid=500(arnold) groups=6(disk),7(lp),19(floppy) +@print{} uid=1000(arnold) gid=1000(arnold) groups=1000(arnold),4(adm),7(lp),27(sudo) @end example @cindex @code{PROCINFO} array, and user and group ID numbers @@ -22860,6 +22855,7 @@ numbers: # Arnold Robbins, arnold@@skeeve.com, Public Domain # May 1993 # Revised February 1996 +# Revised May 2014 @c endfile @end ignore @@ -22879,34 +22875,26 @@ BEGIN \ printf("uid=%d", uid) pw = getpwuid(uid) - if (pw != "") @{ - split(pw, a, ":") - printf("(%s)", a[1]) - @} + if (pw != "") + pr_first_field(pw) if (euid != uid) @{ printf(" euid=%d", euid) pw = getpwuid(euid) - if (pw != "") @{ - split(pw, a, ":") - printf("(%s)", a[1]) - @} + if (pw != "") + pr_first_field(pw) @} printf(" gid=%d", gid) pw = getgrgid(gid) - if (pw != "") @{ - split(pw, a, ":") - printf("(%s)", a[1]) - @} + if (pw != "") + pr_first_field(pw) if (egid != gid) @{ printf(" egid=%d", egid) pw = getgrgid(egid) - if (pw != "") @{ - split(pw, a, ":") - printf("(%s)", a[1]) - @} + if (pw != "") + pr_first_field(pw) @} for (i = 1; ("group" i) in PROCINFO; i++) @{ @@ -22915,16 +22903,20 @@ BEGIN \ group = PROCINFO["group" i] printf("%d", group) pw = getgrgid(group) - if (pw != "") @{ - split(pw, a, ":") - printf("(%s)", a[1]) - @} + if (pw != "") + pr_first_field(pw) if (("group" (i+1)) in PROCINFO) printf(",") @} print "" @} + +function pr_first_field(str, a) +@{ + split(str, a, ":") + printf("(%s)", a[1]) +@} @c endfile @end example @@ -22944,9 +22936,13 @@ The loop is also correct if there are @emph{no} supplementary groups; then the condition is false the first time it's tested, and the loop body never executes. +The @code{pr_first_field()} function simply isolates out some +code that is used repeatedly, making the whole program +slightly shorter and cleaner. + @c exercise!!! @ignore -The POSIX version of @command{id} takes arguments that control which +The POSIX version of @command{id} takes options that control which information is printed. Modify this version to accept the same arguments and perform in the same way. @end ignore @@ -22966,9 +22962,9 @@ Usage is as follows:@footnote{This is the traditional usage. The POSIX usage is different, but not relevant for what the program aims to demonstrate.} -@example -split @r{[}-@var{count}@r{]} file @r{[} @var{prefix} @r{]} -@end example +@display +@command{split} [@code{-@var{count}}] [@var{file}] [@var{prefix}] +@end display By default, the output files are named @file{xaa}, @file{xab}, and so on. Each file has @@ -23002,11 +22998,12 @@ is used as the prefix for the output file names: # # Arnold Robbins, arnold@@skeeve.com, Public Domain # May 1993 +# Revised slightly, May 2014 @c endfile @end ignore @c file eg/prog/split.awk -# usage: split [-num] [file] [outname] +# usage: split [-count] [file] [outname] BEGIN @{ outfile = "x" # default @@ -23015,7 +23012,7 @@ BEGIN @{ usage() i = 1 - if (ARGV[i] ~ /^-[[:digit:]]+$/) @{ + if (i in ARGV && ARGV[i] ~ /^-[[:digit:]]+$/) @{ count = -ARGV[i] ARGV[i] = "" i++ @@ -23087,13 +23084,7 @@ function usage( e) @noindent The variable @code{e} is used so that the function -fits nicely on the -@ifinfo -screen. -@end ifinfo -@ifnotinfo -page. -@end ifnotinfo +fits nicely on the @value{PAGE}. This program is a bit sloppy; it relies on @command{awk} to automatically close the last file instead of doing it in an @code{END} rule. @@ -23116,9 +23107,9 @@ 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 files named on the command line. Its usage is as follows: -@example -tee @r{[}-a@r{]} file @dots{} -@end example +@display +@command{tee} [@option{-a}] @var{file} @dots{} +@end display The @option{-a} option tells @code{tee} to append to the named files, instead of truncating them and starting over. @@ -23243,9 +23234,9 @@ input, and by default removes duplicate lines. In other words, it only prints unique lines---hence the name. @command{uniq} has a number of options. The usage is as follows: -@example -uniq @r{[}-udc @r{[}-@var{n}@r{]]} @r{[}+@var{n}@r{]} @r{[} @var{input file} @r{[} @var{output file} @r{]]} -@end example +@display +@command{uniq} [@option{-udc} [@code{-@var{n}}]] [@code{+@var{n}}] [@var{inputfile} [@var{outputfile}]] +@end display The options for @command{uniq} are: @@ -23269,11 +23260,11 @@ by runs of spaces and/or TABs. Skip @var{n} characters before comparing lines. Any fields specified with @samp{-@var{n}} are skipped first. -@item @var{input file} +@item @var{inputfile} Data is read from the input file named on the command line, instead of from the standard input. -@item @var{output file} +@item @var{outputfile} The generated output is sent to the named output file, instead of to the standard output. @end table @@ -23510,9 +23501,9 @@ END @{ The @command{wc} (word count) utility counts lines, words, and characters in one or more input files. Its usage is as follows: -@example -wc @r{[}-lwc@r{]} @r{[} @var{files} @dots{} @r{]} -@end example +@display +@command{wc} [@option{-lwc}] [@var{files} @dots{}] +@end display If no files are specified on the command line, @command{wc} reads its standard input. If there are multiple files, it also prints total counts for all @@ -23993,19 +23984,18 @@ often used to map uppercase letters into lowercase for further processing: @end example @command{tr} requires two lists of characters.@footnote{On some older -systems, -including Solaris, -@command{tr} may require that the lists be written as -range expressions enclosed in square brackets (@samp{[a-z]}) and quoted, -to prevent the shell from attempting a file name expansion. This is -not a feature.} When processing the input, the first character in the -first list is replaced with the first character in the second list, -the second character in the first list is replaced with the second -character in the second list, and so on. If there are more characters -in the ``from'' list than in the ``to'' list, the last character of the -``to'' list is used for the remaining characters in the ``from'' list. - -Some time ago, +systems, including Solaris, the system version of @command{tr} may require +that the lists be written as range expressions enclosed in square brackets +(@samp{[a-z]}) and quoted, to prevent the shell from attempting a file +name expansion. This is not a feature.} When processing the input, the +first character in the first list is replaced with the first character +in the second list, the second character in the first list is replaced +with the second character in the second list, and so on. If there are +more characters in the ``from'' list than in the ``to'' list, the last +character of the ``to'' list is used for the remaining characters in the +``from'' list. + +Once upon a time, @c early or mid-1989! a user proposed that a transliteration function should be added to @command{gawk}. @@ -24119,13 +24109,12 @@ BEGIN @{ While it is possible to do character transliteration in a user-level function, it is not necessarily efficient, and we (the @command{gawk} authors) started to consider adding a built-in function. However, -shortly after writing this program, we learned that the System V Release 4 -@command{awk} had added the @code{toupper()} and @code{tolower()} functions -(@pxref{String Functions}). -These functions handle the vast majority of the -cases where character transliteration is necessary, and so we chose to -simply add those functions to @command{gawk} as well and then leave well -enough alone. +shortly after writing this program, we learned that Brian Kernighan +had added the @code{toupper()} and @code{tolower()} functions to his +@command{awk} (@pxref{String Functions}). These functions handle the +vast majority of the cases where character transliteration is necessary, +and so we chose to simply add those functions to @command{gawk} as well +and then leave well enough alone. An obvious improvement to this program would be to set up the @code{t_ar} array only once, in a @code{BEGIN} rule. However, this @@ -24158,7 +24147,18 @@ The @code{BEGIN} rule simply sets @code{RS} to the empty string, so that @command{awk} splits records at blank lines (@pxref{Records}). It sets @code{MAXLINES} to 100, since 100 is the maximum number -of lines on the page (20 * 5 = 100). +of lines on the page +@iftex +(@math{20 @cdot 5 = 100}). +@end iftex +@ifnottex +@ifnotdocbook +(20 * 5 = 100). +@end ifnotdocbook +@end ifnottex +@docbook +(20 ⋅ 5 = 100). @c +@end docbook Most of the work is done in the @code{printpage()} function. The label lines are stored sequentially in the @code{line} array. But they @@ -24270,7 +24270,7 @@ END \ When working with large amounts of text, it can be interesting to know how often different words appear. For example, an author may overuse -certain words, in which case she might wish to find synonyms to substitute +certain words, in which case he or she might wish to find synonyms to substitute for words that appear too often. This @value{SUBSECTION} develops a program for counting words and presenting the frequency information in a useful format. @@ -24348,6 +24348,10 @@ END @{ @} @end example +The regexp @samp{/[^[:alnum:]_[:blank:]]/} might have been written +@samp{/[[:punct:]]/}, but then underscores would also be removed, +and we want to keep them. + Assuming we have saved this program in a file named @file{wordfreq.awk}, and that the data is in @file{file1}, the following pipeline: @@ -24459,6 +24463,7 @@ information. For example, using the following @code{print} statement in the print data[lines[i]], lines[i] @end example +@noindent This works because @code{data[$0]} is incremented each time a line is seen. @c ENDOFRANGE lidu @@ -24614,13 +24619,7 @@ BEGIN @{ IGNORECASE = 1 @} @noindent The variable @code{e} is used so that the rule -fits nicely on the -@ifnotinfo -page. -@end ifnotinfo -@ifnottex -screen. -@end ifnottex +fits nicely on the @value{PAGE}. The second rule handles moving data into files. It verifies that a file name is given in the directive. If the file named is not the @@ -24649,10 +24648,13 @@ Each element of @code{a} that is empty indicates two successive @samp{@@} symbols in the original line. For each two empty elements (@samp{@@@@} in the original file), we have to add a single @samp{@@} symbol back in.@footnote{This program was written before @command{gawk} had the -@code{gensub()} function. Consider how you might use it to simplify the code.} +@code{gensub()} function. +@c exercise!! +Consider how you might use it to simplify the code.} When the processing of the array is finished, @code{join()} is called with the -value of @code{SUBSEP}, to rejoin the pieces back into a single +value of @code{SUBSEP} (@pxref{Multidimensional}), +to rejoin the pieces back into a single line. That line is then printed to the output file: @example @@ -25177,7 +25179,7 @@ BEGIN @{ @c endfile @end example -The stack is initialized with @code{ARGV[1]}, which will be @samp{/dev/stdin}. +The stack is initialized with @code{ARGV[1]}, which will be @code{"/dev/stdin"}. The main loop comes next. Input lines are read in succession. Lines that do not start with @code{@@include} are printed verbatim. If the line does start with @code{@@include}, the file name is in @code{$2}. @@ -25287,7 +25289,7 @@ eval gawk $opts -- '"$processed_program"' '"$@@"' The @command{eval} command is a shell construct that reruns the shell's parsing process. This keeps things properly quoted. -This version of @command{igawk} represents my fifth version of this program. +This version of @command{igawk} represents the fifth version of this program. There are four key simplifications that make the program work better: @itemize @bullet @@ -25497,6 +25499,9 @@ babels beslab babery yabber @dots{} @end example + +@c Exercise: Avoid the use of external sort command + @c ENDOFRANGE anagram @node Signature Program @@ -25528,7 +25533,10 @@ X*(X-x)-o*o,(x+X)*o*o+o,x*(X-x)-O-O,x-O+(O+o+X+x)*(o+O),X*X-X*(x-O)-x+O, O+X*(o*(o+O)+O),+x+O+X*o,x*(x-o),(o+X+x)*o*o-(x-O-O),O+(X-x)*(X+O),x-O@}' @end example -We leave it to you to determine what the program does. +@cindex Johansen, Chris +We leave it to you to determine what the program does. (If you are +truly desperate to understand it, see Chris Johansen's explanation, +which is embedded in the Texinfo source file for this @value{DOCUMENT}.) @ignore To: "Arnold Robbins" @@ -28656,7 +28664,7 @@ partial dump of Davide Brini's obfuscated code @smallexample gawk> @kbd{dump} -@print{} # BEGIN +@print{} # BEGIN @print{} @print{} [ 1:0xfcd340] Op_rule : [in_rule = BEGIN] [source_file = brini.awk] @print{} [ 1:0xfcc240] Op_push_i : "~" [MALLOC|STRING|STRCUR] diff --git a/doc/gawktexi.in b/doc/gawktexi.in index af323c1b..599bd098 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -53,6 +53,7 @@ @set SUBSECTION subsection @set DARKCORNER @inmargin{@image{lflashlight,1cm}, @image{rflashlight,1cm}} @set COMMONEXT (c.e.) +@set PAGE page @end iftex @ifinfo @set DOCUMENT Info file @@ -62,6 +63,7 @@ @set SUBSECTION node @set DARKCORNER (d.c.) @set COMMONEXT (c.e.) +@set PAGE screen @end ifinfo @ifhtml @set DOCUMENT Web page @@ -71,6 +73,7 @@ @set SUBSECTION subsection @set DARKCORNER (d.c.) @set COMMONEXT (c.e.) +@set PAGE screen @end ifhtml @ifdocbook @set DOCUMENT book @@ -80,6 +83,7 @@ @set SUBSECTION subsection @set DARKCORNER (d.c.) @set COMMONEXT (c.e.) +@set PAGE page @end ifdocbook @ifxml @set DOCUMENT book @@ -89,6 +93,7 @@ @set SUBSECTION subsection @set DARKCORNER (d.c.) @set COMMONEXT (c.e.) +@set PAGE page @end ifxml @ifplaintext @set DOCUMENT book @@ -98,6 +103,7 @@ @set SUBSECTION subsection @set DARKCORNER (d.c.) @set COMMONEXT (c.e.) +@set PAGE page @end ifplaintext @ifdocbook @@ -3316,19 +3322,10 @@ There are two ways to run @command{awk}---with an explicit program or with one or more program files. Here are templates for both of them; items enclosed in [@dots{}] in these templates are optional: -@ifnotdocbook -@example -awk @r{[@var{options}]} -f progfile @r{[@code{--}]} @var{file} @dots{} -awk @r{[@var{options}]} @r{[@code{--}]} '@var{program}' @var{file} @dots{} -@end example -@end ifnotdocbook - -@c FIXME - find a better way to mark this up in docbook -@docbook -awk [options] -f progfile [--] file … -awk [options] [--] 'program' file … - -@end docbook +@display +@command{awk} [@var{options}] @option{-f} @var{progfile} [@option{--}] @var{file} @dots{} +@command{awk} [@var{options}] [@option{--}] @code{'@var{program}'} @var{file} @dots{} +@end display @cindex GNU long options @cindex long options @@ -12328,13 +12325,13 @@ both) may be omitted. The purpose of the @dfn{action} is to tell @command{awk} what to do once a match for the pattern is found. Thus, in outline, an @command{awk} program generally looks like this: -@example -@r{[}@var{pattern}@r{]} @{ @var{action} @} - @var{pattern} @r{[}@{ @var{action} @}@r{]} +@display +[@var{pattern}] @code{@{ @var{action} @}} + @var{pattern} [@code{@{ @var{action} @}}] @dots{} -function @var{name}(@var{args}) @{ @dots{} @} +@code{function @var{name}(@var{args}) @{ @dots{} @}} @dots{} -@end example +@end display @cindex @code{@{@}} (braces), actions and @cindex braces (@code{@{@}}), actions and @@ -12449,9 +12446,9 @@ newlines or semicolons. The @code{if}-@code{else} statement is @command{awk}'s decision-making statement. It looks like this: -@example -if (@var{condition}) @var{then-body} @r{[}else @var{else-body}@r{]} -@end example +@display +@code{if (@var{condition}) @var{then-body}} [@code{else @var{else-body}}] +@end display @noindent The @var{condition} is an expression that controls what the rest of the @@ -13049,9 +13046,9 @@ The @code{exit} statement causes @command{awk} to immediately stop executing the current rule and to stop processing input; any remaining input is ignored. The @code{exit} statement is written as follows: -@example -exit @r{[}@var{return code}@r{]} -@end example +@display +@code{exit} [@var{return code}] +@end display @cindex @code{BEGIN} pattern, @code{exit} statement and @cindex @code{END} pattern, @code{exit} statement and @@ -17683,12 +17680,12 @@ entire program before starting to execute any of it. The definition of a function named @var{name} looks like this: -@example -function @var{name}(@r{[}@var{parameter-list}@r{]}) -@{ +@display +@code{function} @var{name}@code{(}[@var{parameter-list}]@code{)} +@code{@{} @var{body-of-function} -@} -@end example +@code{@}} +@end display @cindex names, functions @cindex functions, names of @@ -18210,9 +18207,9 @@ This statement returns control to the calling part of the @command{awk} program. can also be used to return a value for use in the rest of the @command{awk} program. It looks like this: -@example -return @r{[}@var{expression}@r{]} -@end example +@display +@code{return} [@var{expression}] +@end display The @var{expression} part is optional. Due most likely to an oversight, POSIX does not define what the return @@ -19521,7 +19518,7 @@ function getlocaltime(time, ret, now, i) now = systime() # return date(1)-style output - ret = strftime("%a %b %e %H:%M:%S %Z %Y", now) + ret = strftime(PROCINFO["strftime"], now) # clear out target array delete time @@ -19848,10 +19845,12 @@ The @code{rewind()} function also relies on the @code{nextfile} keyword @cindex readable data files@comma{} checking @cindex files, skipping Normally, if you give @command{awk} a data file that isn't readable, -it stops with a fatal error. There are times when you -might want to just ignore such files and keep going. You can -do this by prepending the following program to your @command{awk} -program: +it stops with a fatal error. There are times when you might want to +just ignore such files and keep going.@footnote{The @code{BEGINFILE} +special pattern (@pxref{BEGINFILE/ENDFILE}) provides an alternative +mechanism for dealing with files that can't be opened. However, the +code here provides a portable solution.} You can do this by prepending +the following program to your @command{awk} program: @cindex @code{readable.awk} program @example @@ -19889,7 +19888,7 @@ skips the file (since it's no longer in the list). See also @ref{ARGC and ARGV}. @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 @@ -20362,7 +20361,7 @@ BEGIN @{ # test program if (_getopt_test) @{ while ((_go_c = getopt(ARGC, ARGV, "ab:cd")) != -1) - printf("c = <%c>, optarg = <%s>\n", + printf("c = <%c>, Optarg = <%s>\n", _go_c, Optarg) printf("non-option arguments:\n") for (; Optind < ARGC; Optind++) @@ -20378,32 +20377,31 @@ result of two sample runs of the test program: @example $ @kbd{awk -f getopt.awk -v _getopt_test=1 -- -a -cbARG bax -x} -@print{} c = , optarg = <> -@print{} c = , optarg = <> -@print{} c = , optarg = +@print{} c = , Optarg = <> +@print{} c = , Optarg = <> +@print{} c = , Optarg = @print{} non-option arguments: @print{} ARGV[3] = @print{} ARGV[4] = <-x> $ @kbd{awk -f getopt.awk -v _getopt_test=1 -- -a -x -- xyz abc} -@print{} c = , optarg = <> +@print{} c = , Optarg = <> @error{} x -- invalid option -@print{} c = , optarg = <> +@print{} c = , Optarg = <> @print{} non-option arguments: @print{} ARGV[4] = @print{} ARGV[5] = @end example -In both runs, -the first @option{--} terminates the arguments to @command{awk}, so that it does -not try to interpret the @option{-a}, etc., as its own options. +In both runs, the first @option{--} terminates the arguments to +@command{awk}, so that it does not try to interpret the @option{-a}, +etc., as its own options. @quotation NOTE -After @code{getopt()} is through, it is the responsibility of the user level -code to -clear out all the elements of @code{ARGV} from 1 to @code{Optind}, -so that @command{awk} does not try to process the command-line options -as file names. +After @code{getopt()} is through, it is the responsibility of the +user level code to clear out all the elements of @code{ARGV} from 1 +to @code{Optind}, so that @command{awk} does not try to process the +command-line options as file names. @end quotation Several of the sample programs presented in @@ -20472,7 +20470,7 @@ Following is @command{pwcat}, a C program that ``cats'' the password database: /* * pwcat.c * - * Generate a printable version of the password database + * Generate a printable version of the password database. */ @c endfile @ignore @@ -20818,7 +20816,7 @@ is as follows: /* * grcat.c * - * Generate a printable version of the group database + * Generate a printable version of the group database. */ @c endfile @ignore @@ -20905,7 +20903,7 @@ it is usually empty or set to @samp{*}. @item Group ID Number The group's numeric group ID number; -this number must be unique within the file. +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 we cast it to @code{long} for all cases.) @@ -21041,10 +21039,10 @@ tvpeople:*:101:david,conan,tom,joan For this reason, @code{_gr_init()} looks to see if a group name or group ID number is already seen. If it is, then the user names are -simply concatenated onto the previous list of users. (There is actually a +simply concatenated onto the previous list of users.@footnote{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 @code{$4}.) +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}, @@ -21414,13 +21412,7 @@ function usage( e1, e2) @noindent The variables @code{e1} and @code{e2} are used so that the function -fits nicely on the -@ifnotinfo -page. -@end ifnotinfo -@ifnottex -screen. -@end ifnottex +fits nicely on the @value{PAGE}. @cindex @code{BEGIN} pattern, running @command{awk} programs and @cindex @code{FS} variable, running @command{awk} programs and @@ -21459,7 +21451,7 @@ BEGIN \ if (FS == " ") # defeat awk semantics FS = "[ ]" @} else if (c == "s") - suppress++ + suppress = 1 else usage() @} @@ -21672,9 +21664,9 @@ expressions that are almost identical to those available in @command{awk} (@pxref{Regexp}). You invoke it as follows: -@example -egrep @r{[} @var{options} @r{]} '@var{pattern}' @var{files} @dots{} -@end example +@display +@command{egrep} [@var{options}] @code{'@var{pattern}'} @var{files} @dots{} +@end display The @var{pattern} is a regular expression. In typical usage, the regular expression is quoted to prevent the shell from expanding any of the @@ -21856,6 +21848,11 @@ function endfile(file) @c endfile @end example +The @code{BEGINFILE} and @code{ENDFILE} special patterns +(@pxref{BEGINFILE/ENDFILE}) could be used, but then the program would be +@command{gawk}-specific. Additionally, this example was written before +@command{gawk} acquired @code{BEGINFILE} and @code{ENDFILE}. + The following rule does most of the work of matching lines. The variable @code{matches} is true if the line matched the pattern. If the user wants lines that did not match, the sense of @code{matches} is inverted @@ -21912,9 +21909,7 @@ there are no matches, the exit status is one; otherwise it is zero: @c file eg/prog/egrep.awk END \ @{ - if (total == 0) - exit 1 - exit 0 + exit (total == 0) @} @c endfile @end example @@ -21968,7 +21963,7 @@ corresponding user and group names. The output might look like this: @example $ @kbd{id} -@print{} uid=500(arnold) gid=500(arnold) groups=6(disk),7(lp),19(floppy) +@print{} uid=1000(arnold) gid=1000(arnold) groups=1000(arnold),4(adm),7(lp),27(sudo) @end example @cindex @code{PROCINFO} array, and user and group ID numbers @@ -22004,6 +21999,7 @@ numbers: # Arnold Robbins, arnold@@skeeve.com, Public Domain # May 1993 # Revised February 1996 +# Revised May 2014 @c endfile @end ignore @@ -22023,34 +22019,26 @@ BEGIN \ printf("uid=%d", uid) pw = getpwuid(uid) - if (pw != "") @{ - split(pw, a, ":") - printf("(%s)", a[1]) - @} + if (pw != "") + pr_first_field(pw) if (euid != uid) @{ printf(" euid=%d", euid) pw = getpwuid(euid) - if (pw != "") @{ - split(pw, a, ":") - printf("(%s)", a[1]) - @} + if (pw != "") + pr_first_field(pw) @} printf(" gid=%d", gid) pw = getgrgid(gid) - if (pw != "") @{ - split(pw, a, ":") - printf("(%s)", a[1]) - @} + if (pw != "") + pr_first_field(pw) if (egid != gid) @{ printf(" egid=%d", egid) pw = getgrgid(egid) - if (pw != "") @{ - split(pw, a, ":") - printf("(%s)", a[1]) - @} + if (pw != "") + pr_first_field(pw) @} for (i = 1; ("group" i) in PROCINFO; i++) @{ @@ -22059,16 +22047,20 @@ BEGIN \ group = PROCINFO["group" i] printf("%d", group) pw = getgrgid(group) - if (pw != "") @{ - split(pw, a, ":") - printf("(%s)", a[1]) - @} + if (pw != "") + pr_first_field(pw) if (("group" (i+1)) in PROCINFO) printf(",") @} print "" @} + +function pr_first_field(str, a) +@{ + split(str, a, ":") + printf("(%s)", a[1]) +@} @c endfile @end example @@ -22088,9 +22080,13 @@ The loop is also correct if there are @emph{no} supplementary groups; then the condition is false the first time it's tested, and the loop body never executes. +The @code{pr_first_field()} function simply isolates out some +code that is used repeatedly, making the whole program +slightly shorter and cleaner. + @c exercise!!! @ignore -The POSIX version of @command{id} takes arguments that control which +The POSIX version of @command{id} takes options that control which information is printed. Modify this version to accept the same arguments and perform in the same way. @end ignore @@ -22110,9 +22106,9 @@ Usage is as follows:@footnote{This is the traditional usage. The POSIX usage is different, but not relevant for what the program aims to demonstrate.} -@example -split @r{[}-@var{count}@r{]} file @r{[} @var{prefix} @r{]} -@end example +@display +@command{split} [@code{-@var{count}}] [@var{file}] [@var{prefix}] +@end display By default, the output files are named @file{xaa}, @file{xab}, and so on. Each file has @@ -22146,11 +22142,12 @@ is used as the prefix for the output file names: # # Arnold Robbins, arnold@@skeeve.com, Public Domain # May 1993 +# Revised slightly, May 2014 @c endfile @end ignore @c file eg/prog/split.awk -# usage: split [-num] [file] [outname] +# usage: split [-count] [file] [outname] BEGIN @{ outfile = "x" # default @@ -22159,7 +22156,7 @@ BEGIN @{ usage() i = 1 - if (ARGV[i] ~ /^-[[:digit:]]+$/) @{ + if (i in ARGV && ARGV[i] ~ /^-[[:digit:]]+$/) @{ count = -ARGV[i] ARGV[i] = "" i++ @@ -22231,13 +22228,7 @@ function usage( e) @noindent The variable @code{e} is used so that the function -fits nicely on the -@ifinfo -screen. -@end ifinfo -@ifnotinfo -page. -@end ifnotinfo +fits nicely on the @value{PAGE}. This program is a bit sloppy; it relies on @command{awk} to automatically close the last file instead of doing it in an @code{END} rule. @@ -22260,9 +22251,9 @@ 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 files named on the command line. Its usage is as follows: -@example -tee @r{[}-a@r{]} file @dots{} -@end example +@display +@command{tee} [@option{-a}] @var{file} @dots{} +@end display The @option{-a} option tells @code{tee} to append to the named files, instead of truncating them and starting over. @@ -22387,9 +22378,9 @@ input, and by default removes duplicate lines. In other words, it only prints unique lines---hence the name. @command{uniq} has a number of options. The usage is as follows: -@example -uniq @r{[}-udc @r{[}-@var{n}@r{]]} @r{[}+@var{n}@r{]} @r{[} @var{input file} @r{[} @var{output file} @r{]]} -@end example +@display +@command{uniq} [@option{-udc} [@code{-@var{n}}]] [@code{+@var{n}}] [@var{inputfile} [@var{outputfile}]] +@end display The options for @command{uniq} are: @@ -22413,11 +22404,11 @@ by runs of spaces and/or TABs. Skip @var{n} characters before comparing lines. Any fields specified with @samp{-@var{n}} are skipped first. -@item @var{input file} +@item @var{inputfile} Data is read from the input file named on the command line, instead of from the standard input. -@item @var{output file} +@item @var{outputfile} The generated output is sent to the named output file, instead of to the standard output. @end table @@ -22654,9 +22645,9 @@ END @{ The @command{wc} (word count) utility counts lines, words, and characters in one or more input files. Its usage is as follows: -@example -wc @r{[}-lwc@r{]} @r{[} @var{files} @dots{} @r{]} -@end example +@display +@command{wc} [@option{-lwc}] [@var{files} @dots{}] +@end display If no files are specified on the command line, @command{wc} reads its standard input. If there are multiple files, it also prints total counts for all @@ -23137,19 +23128,18 @@ often used to map uppercase letters into lowercase for further processing: @end example @command{tr} requires two lists of characters.@footnote{On some older -systems, -including Solaris, -@command{tr} may require that the lists be written as -range expressions enclosed in square brackets (@samp{[a-z]}) and quoted, -to prevent the shell from attempting a file name expansion. This is -not a feature.} When processing the input, the first character in the -first list is replaced with the first character in the second list, -the second character in the first list is replaced with the second -character in the second list, and so on. If there are more characters -in the ``from'' list than in the ``to'' list, the last character of the -``to'' list is used for the remaining characters in the ``from'' list. - -Some time ago, +systems, including Solaris, the system version of @command{tr} may require +that the lists be written as range expressions enclosed in square brackets +(@samp{[a-z]}) and quoted, to prevent the shell from attempting a file +name expansion. This is not a feature.} When processing the input, the +first character in the first list is replaced with the first character +in the second list, the second character in the first list is replaced +with the second character in the second list, and so on. If there are +more characters in the ``from'' list than in the ``to'' list, the last +character of the ``to'' list is used for the remaining characters in the +``from'' list. + +Once upon a time, @c early or mid-1989! a user proposed that a transliteration function should be added to @command{gawk}. @@ -23263,13 +23253,12 @@ BEGIN @{ While it is possible to do character transliteration in a user-level function, it is not necessarily efficient, and we (the @command{gawk} authors) started to consider adding a built-in function. However, -shortly after writing this program, we learned that the System V Release 4 -@command{awk} had added the @code{toupper()} and @code{tolower()} functions -(@pxref{String Functions}). -These functions handle the vast majority of the -cases where character transliteration is necessary, and so we chose to -simply add those functions to @command{gawk} as well and then leave well -enough alone. +shortly after writing this program, we learned that Brian Kernighan +had added the @code{toupper()} and @code{tolower()} functions to his +@command{awk} (@pxref{String Functions}). These functions handle the +vast majority of the cases where character transliteration is necessary, +and so we chose to simply add those functions to @command{gawk} as well +and then leave well enough alone. An obvious improvement to this program would be to set up the @code{t_ar} array only once, in a @code{BEGIN} rule. However, this @@ -23302,7 +23291,18 @@ The @code{BEGIN} rule simply sets @code{RS} to the empty string, so that @command{awk} splits records at blank lines (@pxref{Records}). It sets @code{MAXLINES} to 100, since 100 is the maximum number -of lines on the page (20 * 5 = 100). +of lines on the page +@iftex +(@math{20 @cdot 5 = 100}). +@end iftex +@ifnottex +@ifnotdocbook +(20 * 5 = 100). +@end ifnotdocbook +@end ifnottex +@docbook +(20 ⋅ 5 = 100). @c +@end docbook Most of the work is done in the @code{printpage()} function. The label lines are stored sequentially in the @code{line} array. But they @@ -23414,7 +23414,7 @@ END \ When working with large amounts of text, it can be interesting to know how often different words appear. For example, an author may overuse -certain words, in which case she might wish to find synonyms to substitute +certain words, in which case he or she might wish to find synonyms to substitute for words that appear too often. This @value{SUBSECTION} develops a program for counting words and presenting the frequency information in a useful format. @@ -23492,6 +23492,10 @@ END @{ @} @end example +The regexp @samp{/[^[:alnum:]_[:blank:]]/} might have been written +@samp{/[[:punct:]]/}, but then underscores would also be removed, +and we want to keep them. + Assuming we have saved this program in a file named @file{wordfreq.awk}, and that the data is in @file{file1}, the following pipeline: @@ -23603,6 +23607,7 @@ information. For example, using the following @code{print} statement in the print data[lines[i]], lines[i] @end example +@noindent This works because @code{data[$0]} is incremented each time a line is seen. @c ENDOFRANGE lidu @@ -23758,13 +23763,7 @@ BEGIN @{ IGNORECASE = 1 @} @noindent The variable @code{e} is used so that the rule -fits nicely on the -@ifnotinfo -page. -@end ifnotinfo -@ifnottex -screen. -@end ifnottex +fits nicely on the @value{PAGE}. The second rule handles moving data into files. It verifies that a file name is given in the directive. If the file named is not the @@ -23793,10 +23792,13 @@ Each element of @code{a} that is empty indicates two successive @samp{@@} symbols in the original line. For each two empty elements (@samp{@@@@} in the original file), we have to add a single @samp{@@} symbol back in.@footnote{This program was written before @command{gawk} had the -@code{gensub()} function. Consider how you might use it to simplify the code.} +@code{gensub()} function. +@c exercise!! +Consider how you might use it to simplify the code.} When the processing of the array is finished, @code{join()} is called with the -value of @code{SUBSEP}, to rejoin the pieces back into a single +value of @code{SUBSEP} (@pxref{Multidimensional}), +to rejoin the pieces back into a single line. That line is then printed to the output file: @example @@ -24321,7 +24323,7 @@ BEGIN @{ @c endfile @end example -The stack is initialized with @code{ARGV[1]}, which will be @samp{/dev/stdin}. +The stack is initialized with @code{ARGV[1]}, which will be @code{"/dev/stdin"}. The main loop comes next. Input lines are read in succession. Lines that do not start with @code{@@include} are printed verbatim. If the line does start with @code{@@include}, the file name is in @code{$2}. @@ -24431,7 +24433,7 @@ eval gawk $opts -- '"$processed_program"' '"$@@"' The @command{eval} command is a shell construct that reruns the shell's parsing process. This keeps things properly quoted. -This version of @command{igawk} represents my fifth version of this program. +This version of @command{igawk} represents the fifth version of this program. There are four key simplifications that make the program work better: @itemize @bullet @@ -24641,6 +24643,9 @@ babels beslab babery yabber @dots{} @end example + +@c Exercise: Avoid the use of external sort command + @c ENDOFRANGE anagram @node Signature Program @@ -24672,7 +24677,10 @@ X*(X-x)-o*o,(x+X)*o*o+o,x*(X-x)-O-O,x-O+(O+o+X+x)*(o+O),X*X-X*(x-O)-x+O, O+X*(o*(o+O)+O),+x+O+X*o,x*(x-o),(o+X+x)*o*o-(x-O-O),O+(X-x)*(X+O),x-O@}' @end example -We leave it to you to determine what the program does. +@cindex Johansen, Chris +We leave it to you to determine what the program does. (If you are +truly desperate to understand it, see Chris Johansen's explanation, +which is embedded in the Texinfo source file for this @value{DOCUMENT}.) @ignore To: "Arnold Robbins" @@ -27800,7 +27808,7 @@ partial dump of Davide Brini's obfuscated code @smallexample gawk> @kbd{dump} -@print{} # BEGIN +@print{} # BEGIN @print{} @print{} [ 1:0xfcd340] Op_rule : [in_rule = BEGIN] [source_file = brini.awk] @print{} [ 1:0xfcc240] Op_push_i : "~" [MALLOC|STRING|STRCUR] -- cgit v1.2.3 From 353b9af72c79e25ba2d45c62d543536aa82c02cf Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 16 May 2014 12:07:33 +0300 Subject: Edits through chapter 14. --- doc/ChangeLog | 4 + doc/gawk.info | 606 ++++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 92 +++++---- doc/gawktexi.in | 92 +++++---- 4 files changed, 403 insertions(+), 391 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index c0c382d3..012511be 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-05-16 Arnold D. Robbins + + * gawktexi.in: Edits through Chapter 14. + 2014-05-15 Arnold D. Robbins * gawktexi.in: Fix displays for docbook, edits through Chapter 11. diff --git a/doc/gawk.info b/doc/gawk.info index a9fcc117..5cf6129d 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -18171,8 +18171,8 @@ your data as numeric: The `print' statement treats its expressions as strings. Although the fields can act as numbers when necessary, they are still strings, so -`print' does not try to treat them numerically. You may need to add -zero to a field to force it to be treated as a number. For example: +`print' does not try to treat them numerically. You need to add zero +to a field to force it to be treated as a number. For example: $ echo 0123 123 0x123 | gawk --non-decimal-data ' > { print $1, $2, $3 @@ -18187,7 +18187,7 @@ request it. CAUTION: _Use of this option is not recommended._ It can break old programs very badly. Instead, use the `strtonum()' function to - convert your data (*note Nondecimal-numbers::). This makes your + convert your data (*note String Functions::). This makes your programs easier to write and easier to read, and leads to less surprising results. @@ -18226,7 +18226,7 @@ you do this. *note Controlling Scanning::, describes how you can assign special, pre-defined values to `PROCINFO["sorted_in"]' in order to control the -order in which `gawk' will traverse an array during a `for' loop. +order in which `gawk' traverses an array during a `for' loop. In addition, the value of `PROCINFO["sorted_in"]' can be a function name. This lets you traverse an array based on any custom criterion. @@ -18499,9 +18499,9 @@ become the values of the result array: So far, so good. Now it starts to get interesting. Both `asort()' and `asorti()' accept a third string argument to control comparison of -array elements. In *note String Functions::, we ignored this third -argument; however, the time has now come to describe how this argument -affects these two functions. +array elements. When we introduced `asort()' and `asorti()' in *note +String Functions::, we ignored this third argument; however, now is the +time to describe how this argument affects these two functions. Basically, the third argument specifies how the array is to be sorted. There are two possibilities. As with `PROCINFO["sorted_in"]', @@ -18649,7 +18649,8 @@ the `gawk' program. Once all of the data has been read, `gawk' terminates the coprocess and exits. As a side note, the assignment `LC_ALL=C' in the `sort' command -ensures traditional Unix (ASCII) sorting from `sort'. +ensures traditional Unix (ASCII) sorting from `sort'. This is not +strictly necessary here, but it's good to know how to do this. You may also use pseudo-ttys (ptys) for two-way communication instead of pipes, if your system supports them. This is done on a @@ -18661,10 +18662,10 @@ per-command basis, by setting a special element in the `PROCINFO' array print ... |& command # start two-way pipe ... -Using ptys avoids the buffer deadlock issues described earlier, at some -loss in performance. If your system does not have ptys, or if all the -system's ptys are in use, `gawk' automatically falls back to using -regular pipes. +Using ptys usually avoids the buffer deadlock issues described earlier, +at some loss in performance. If your system does not have ptys, or if +all the system's ptys are in use, `gawk' automatically falls back to +using regular pipes. ---------- Footnotes ---------- @@ -18945,7 +18946,7 @@ As usual, the profiled version of the program is written to `awkprof.out', or to a different file if one specified with the `--profile' option. - Along with the regular profile, as shown earlier, the profile + Along with the regular profile, as shown earlier, the profile file includes a trace of any active functions: # Function Call Stack: @@ -19029,6 +19030,7 @@ File: gawk.info, Node: Explaining gettext, Next: Programmer i18n, Prev: I18N 13.2 GNU `gettext' ================== +`gawk' uses GNU `gettext' to provide its internationalization features. The facilities in GNU `gettext' focus on messages; strings printed by a program, either directly or via formatting with `printf' or `sprintf()'.(1) @@ -19175,7 +19177,7 @@ internationalization: for translation at runtime. String constants without a leading underscore are not translated. -``dcgettext(STRING' [`,' DOMAIN [`,' CATEGORY ]]`)'' +``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 value of `TEXTDOMAIN'. The default value for CATEGORY is @@ -19192,7 +19194,7 @@ internationalization: be simple and to allow for reasonable `awk'-style default arguments. -``dcngettext(STRING1, STRING2, NUMBER' [`,' DOMAIN [`,' CATEGORY ]]`)'' +``dcngettext(STRING1, STRING2, NUMBER' [`,' DOMAIN [`,' CATEGORY]]`)'' 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, @@ -19508,19 +19510,20 @@ Following are the translations: msgstr "Like, the scoop is" The next step is to make the directory to hold the binary message -object file and then to create the `guide.gmo' file. The directory +object file and then to create the `guide.mo' file. We pretend that +our file is to be used in the `en_US.UTF-8' locale. The directory layout shown here is standard for GNU `gettext' on GNU/Linux systems. Other versions of `gettext' may use a different layout: - $ mkdir en_US en_US/LC_MESSAGES + $ mkdir en_US.UTF-8 en_US.UTF-8/LC_MESSAGES The `msgfmt' utility does the conversion from human-readable `.po' -file to machine-readable `.gmo' file. By default, `msgfmt' creates a +file to machine-readable `.mo' file. By default, `msgfmt' creates a file named `messages'. This file must be renamed and placed in the proper directory so that `gawk' can find it: $ msgfmt guide-mellow.po - $ mv messages en_US/LC_MESSAGES/guide.gmo + $ mv messages en_US.UTF-8/LC_MESSAGES/guide.mo Finally, we run the program to test it: @@ -19584,8 +19587,8 @@ program is easy.  File: gawk.info, Node: Debugging, Next: Sample Debugging Session, Up: Debugger -14.1 Introduction to `gawk' Debugger -==================================== +14.1 Introduction to The `gawk' Debugger +======================================== This minor node introduces debugging in general and begins the discussion of debugging in `gawk'. @@ -19871,11 +19874,7 @@ typing `n' (for "next"): decides whether to give the lines the special "field skipping" treatment indicated by the `-f' command-line option. (Notice that we skipped from where we were before at line 64 to here, since the condition in -line 64 - - if (fcount == 0 && charcount == 0) - -was false.) +line 64 `if (fcount == 0 && charcount == 0)' was false.) Continuing to step, we now get to the splitting of the current and last records: @@ -19981,7 +19980,7 @@ following descriptions, commands which 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 -when just hitting . This works for the commands `list', `next', +just by hitting . This works for the commands `list', `next', `nexti', `step', `stepi' and `continue' executed without any argument. * Menu: @@ -20241,7 +20240,7 @@ AWK STATEMENTS `set' VAR`='VALUE Assign a constant (number or string) value to an `awk' variable or field. String values must be enclosed between double quotes - (`"..."'). + (`"'...`"'). You can also set special `awk' variables, such as `FS', `NF', `NR', etc. @@ -20295,11 +20294,12 @@ are: `frame' [N] `f' [N] - Select and print (frame number, function and argument names, - source file, and the source line) 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 the one for the main program. + 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 + the one for the main program. The printed information consists of + the frame number, function and argument names, source file, and + the source line. `up' [COUNT] Move COUNT (default 1) frames up the stack toward the outermost @@ -20538,9 +20538,10 @@ File: gawk.info, Node: Readline Support, Next: Limitations, Prev: List of Deb 14.4 Readline Support ===================== -If `gawk' is compiled with the `readline' library, you can take -advantage of that library's command completion and history expansion -features. The following types of completion are available: +If `gawk' is compiled with the `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: Command completion Command names. @@ -20579,15 +20580,14 @@ some limitations. A few which are worth being aware of are: 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', etc., 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 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. + 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 + 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. * There is no way to look "inside" the process of compiling regular expressions to see if you got it right. As an `awk' programmer, @@ -30289,14 +30289,14 @@ Index * -v option: Options. (line 32) * -W option: Options. (line 46) * . (period), regexp operator: Regexp Operators. (line 44) -* .gmo files: Explaining gettext. (line 41) -* .gmo files, converting from .po: I18N Example. (line 62) +* .gmo files: Explaining gettext. (line 42) * .gmo files, specifying directory of <1>: Programmer i18n. (line 47) -* .gmo files, specifying directory of: Explaining gettext. (line 53) +* .gmo files, specifying directory of: Explaining gettext. (line 54) +* .mo files, converting from .po: I18N Example. (line 63) * .po files <1>: Translator i18n. (line 6) -* .po files: Explaining gettext. (line 36) -* .po files, converting to .gmo: I18N Example. (line 62) -* .pot files: Explaining gettext. (line 30) +* .po files: Explaining gettext. (line 37) +* .po files, converting to .mo: I18N Example. (line 63) +* .pot files: Explaining gettext. (line 31) * / (forward slash) to enclose regular expressions: Regexp. (line 10) * / (forward slash), / operator: Precedence. (line 55) * / (forward slash), /= operator <1>: Precedence. (line 95) @@ -30401,7 +30401,7 @@ Index * ^ (caret), regexp operator <1>: GNU Regexp Operators. (line 59) * ^ (caret), regexp operator: Regexp Operators. (line 22) -* _ (underscore), C macro: Explaining gettext. (line 70) +* _ (underscore), C macro: Explaining gettext. (line 71) * _ (underscore), in names of private variables: Library Names. (line 29) * _ (underscore), translatable string: Programmer i18n. (line 69) @@ -30701,7 +30701,7 @@ Index * binary input/output: User-modified. (line 15) * bindtextdomain <1>: Programmer i18n. (line 47) * bindtextdomain: I18N Functions. (line 12) -* bindtextdomain() function (C library): Explaining gettext. (line 49) +* bindtextdomain() function (C library): Explaining gettext. (line 50) * bindtextdomain() function (gawk), portability and: I18N Portability. (line 33) * BINMODE variable <1>: PC Using. (line 33) @@ -30973,7 +30973,7 @@ Index * csh utility, POSIXLY_CORRECT environment variable: Options. (line 355) * csh utility, |& operator, comparison with: Two-way I/O. (line 44) * ctime() user-defined function: Function Example. (line 73) -* currency symbols, localization: Explaining gettext. (line 103) +* currency symbols, localization: Explaining gettext. (line 104) * current system time: Time Functions. (line 66) * custom.h file: Configuration Philosophy. (line 30) @@ -31035,7 +31035,7 @@ Index * date utility, POSIX: Time Functions. (line 254) * dates, converting to timestamps: Time Functions. (line 76) * dates, information related to, localization: Explaining gettext. - (line 115) + (line 116) * Davies, Stephen <1>: Contributors. (line 74) * Davies, Stephen: Acknowledgments. (line 60) * dcgettext <1>: Programmer i18n. (line 19) @@ -31138,7 +31138,7 @@ Index (line 83) * debugger commands, unwatch: Viewing And Changing Data. (line 84) -* debugger commands, up: Execution Stack. (line 33) +* debugger commands, up: Execution Stack. (line 34) * debugger commands, w (watch): Viewing And Changing Data. (line 67) * debugger commands, watch: Viewing And Changing Data. @@ -31477,14 +31477,14 @@ Index * 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 41) -* files, .gmo, converting from .po: I18N Example. (line 62) +* files, .gmo: Explaining gettext. (line 42) * files, .gmo, specifying directory of <1>: Programmer i18n. (line 47) -* files, .gmo, specifying directory of: Explaining gettext. (line 53) +* files, .gmo, specifying directory of: Explaining gettext. (line 54) +* files, .mo, converting from .po: I18N Example. (line 63) * files, .po <1>: Translator i18n. (line 6) -* files, .po: Explaining gettext. (line 36) -* files, .po, converting to .gmo: I18N Example. (line 62) -* files, .pot: Explaining gettext. (line 30) +* files, .po: Explaining gettext. (line 37) +* files, .po, converting to .mo: I18N Example. (line 63) +* files, .pot: Explaining gettext. (line 31) * files, /dev/... special files: Special FD. (line 46) * files, /inet/... (gawk): TCP/IP Networking. (line 6) * files, /inet4/... (gawk): TCP/IP Networking. (line 6) @@ -31501,23 +31501,23 @@ Index * files, managing: Data File Management. (line 6) * files, managing, data file boundaries: Filetrans Function. (line 6) -* files, message object: Explaining gettext. (line 41) +* files, message object: Explaining gettext. (line 42) * files, message object, converting from portable object files: I18N Example. - (line 62) + (line 63) * files, message object, specifying directory of <1>: Programmer i18n. (line 47) * files, message object, specifying directory of: Explaining gettext. - (line 53) + (line 54) * files, multiple passes over: Other Arguments. (line 49) * files, multiple, duplicating output into: Tee Program. (line 6) * files, output, See output files: Close Files And Pipes. (line 6) * files, password: Passwd Functions. (line 16) * files, portable object <1>: Translator i18n. (line 6) -* files, portable object: Explaining gettext. (line 36) -* files, portable object template: Explaining gettext. (line 30) +* files, portable object: Explaining gettext. (line 37) +* files, portable object template: Explaining gettext. (line 31) * files, portable object, converting to message object files: I18N Example. - (line 62) + (line 63) * files, portable object, generating: Options. (line 147) * files, processing, ARGIND variable and: Auto-set. (line 51) * files, reading: Rewind Function. (line 6) @@ -31712,7 +31712,7 @@ Index * gawk, newlines in: Statements/Lines. (line 12) * gawk, octal numbers and: Nondecimal-numbers. (line 42) * gawk, OS/2 version of: PC Using. (line 16) -* gawk, PROCINFO array in <1>: Two-way I/O. (line 116) +* gawk, PROCINFO array in <1>: Two-way I/O. (line 117) * gawk, PROCINFO array in <2>: Time Functions. (line 47) * gawk, PROCINFO array in: Auto-set. (line 128) * gawk, regexp constants and: Using Constant Regexps. @@ -31783,8 +31783,8 @@ Index * getpwuid() function (C library): Passwd Functions. (line 188) * getpwuid() user-defined function: Passwd Functions. (line 192) * gettext library: Explaining gettext. (line 6) -* gettext library, locale categories: Explaining gettext. (line 80) -* gettext() function (C library): Explaining gettext. (line 62) +* gettext library, locale categories: Explaining gettext. (line 81) +* gettext() function (C library): Explaining gettext. (line 63) * gettimeofday() extension function: Extension Sample Time. (line 13) * git utility <1>: Adding Code. (line 111) @@ -31936,7 +31936,7 @@ Index * internationalization, localization, gawk and: Internationalization. (line 13) * internationalization, localization, locale categories: Explaining gettext. - (line 80) + (line 81) * internationalization, localization, marked strings: Programmer i18n. (line 14) * internationalization, localization, portability and: I18N Portability. @@ -31985,16 +31985,16 @@ Index * labels.awk program: Labels Program. (line 51) * languages, data-driven: Basic High Level. (line 85) * Laurie, Dirk: Changing Precision. (line 6) -* LC_ALL locale category: Explaining gettext. (line 120) -* LC_COLLATE locale category: Explaining gettext. (line 93) -* LC_CTYPE locale category: Explaining gettext. (line 97) -* LC_MESSAGES locale category: Explaining gettext. (line 87) +* LC_ALL locale category: Explaining gettext. (line 121) +* LC_COLLATE locale category: Explaining gettext. (line 94) +* LC_CTYPE locale category: Explaining gettext. (line 98) +* LC_MESSAGES locale category: Explaining gettext. (line 88) * LC_MESSAGES locale category, bindtextdomain() function (gawk): Programmer i18n. (line 88) -* LC_MONETARY locale category: Explaining gettext. (line 103) -* LC_NUMERIC locale category: Explaining gettext. (line 107) -* LC_RESPONSE locale category: Explaining gettext. (line 111) -* LC_TIME locale category: Explaining gettext. (line 115) +* LC_MONETARY locale category: Explaining gettext. (line 104) +* LC_NUMERIC locale category: Explaining gettext. (line 108) +* LC_RESPONSE locale category: Explaining gettext. (line 112) +* LC_TIME locale category: Explaining gettext. (line 116) * left angle bracket (<), < operator <1>: Precedence. (line 65) * left angle bracket (<), < operator: Comparison Operators. (line 11) @@ -32063,7 +32063,7 @@ Index * list function definitions, in debugger: Debugger Info. (line 30) * loading, extensions: Options. (line 173) * local variables, in a function: Variable Scope. (line 6) -* locale categories: Explaining gettext. (line 80) +* locale categories: Explaining gettext. (line 81) * locale decimal point character: Options. (line 270) * locale, definition of: Locales. (line 6) * localization: I18N and L10N. (line 6) @@ -32114,23 +32114,23 @@ Index * mawk utility: Escape Sequences. (line 124) * maximum precision supported by MPFR library: Auto-set. (line 213) * McPhee, Patrick: Contributors. (line 100) -* message object files: Explaining gettext. (line 41) +* message object files: Explaining gettext. (line 42) * message object files, converting from portable object files: I18N Example. - (line 62) + (line 63) * message object files, specifying directory of <1>: Programmer i18n. (line 47) * message object files, specifying directory of: Explaining gettext. - (line 53) + (line 54) * messages from extensions: Printing Messages. (line 6) * metacharacters in regular expressions: Regexp Operators. (line 6) * metacharacters, escape sequences for: Escape Sequences. (line 130) * minimum precision supported by MPFR library: Auto-set. (line 216) * mktime: Time Functions. (line 25) * modifiers, in format specifiers: Format Modifiers. (line 6) -* monetary information, localization: Explaining gettext. (line 103) +* monetary information, localization: Explaining gettext. (line 104) * Moore, Duncan: Getline Notes. (line 40) * MPFR: Gawk and MPFR. (line 6) -* msgfmt utility: I18N Example. (line 62) +* msgfmt utility: I18N Example. (line 63) * multiple precision: Arbitrary Precision Arithmetic. (line 6) * multiple-line records: Multiple Line. (line 6) @@ -32362,7 +32362,7 @@ Index * portability, example programs: Library Functions. (line 42) * portability, functions, defining: Definition Syntax. (line 99) * portability, gawk: New Ports. (line 6) -* portability, gettext library and: Explaining gettext. (line 10) +* portability, gettext library and: Explaining gettext. (line 11) * portability, internationalization and: I18N Portability. (line 6) * portability, length() function: String Functions. (line 176) * portability, new awk vs. old awk: Conversion. (line 55) @@ -32374,11 +32374,11 @@ Index * portability, POSIXLY_CORRECT environment variable: Options. (line 360) * portability, substr() function: String Functions. (line 510) * portable object files <1>: Translator i18n. (line 6) -* portable object files: Explaining gettext. (line 36) +* portable object files: Explaining gettext. (line 37) * portable object files, converting to message object files: I18N Example. - (line 62) + (line 63) * portable object files, generating: Options. (line 147) -* portable object template files: Explaining gettext. (line 30) +* portable object template files: Explaining gettext. (line 31) * porting gawk: New Ports. (line 6) * positional specifiers, printf statement <1>: Printf Ordering. (line 6) @@ -32476,7 +32476,7 @@ Index * PROCINFO array <1>: Passwd Functions. (line 6) * PROCINFO array <2>: Time Functions. (line 47) * PROCINFO array: Auto-set. (line 128) -* PROCINFO array, and communications via ptys: Two-way I/O. (line 116) +* PROCINFO array, and communications via ptys: Two-way I/O. (line 117) * 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. @@ -32844,7 +32844,7 @@ Index * sort utility: Word Sorting. (line 50) * sort utility, coprocesses and: Two-way I/O. (line 83) * sorting characters in different languages: Explaining gettext. - (line 93) + (line 94) * source code, awka: Other Versions. (line 64) * source code, Brian Kernighan's awk: Other Versions. (line 13) * source code, Busybox Awk: Other Versions. (line 88) @@ -32982,7 +32982,7 @@ Index * TEXTDOMAIN variable: User-modified. (line 152) * TEXTDOMAIN variable, BEGIN pattern and: Programmer i18n. (line 60) * TEXTDOMAIN variable, portability and: I18N Portability. (line 20) -* textdomain() function (C library): Explaining gettext. (line 27) +* textdomain() function (C library): Explaining gettext. (line 28) * tilde (~), ~ operator <1>: Expression Patterns. (line 24) * tilde (~), ~ operator <2>: Precedence. (line 80) * tilde (~), ~ operator <3>: Comparison Operators. @@ -32993,7 +32993,7 @@ Index * tilde (~), ~ operator: Regexp Usage. (line 19) * time functions: Time Functions. (line 6) * time, alarm clock example program: Alarm Program. (line 11) -* time, localization and: Explaining gettext. (line 115) +* time, localization and: Explaining gettext. (line 116) * time, managing: Getlocaltime Function. (line 6) * time, retrieving: Time Functions. (line 17) @@ -33056,7 +33056,7 @@ Index (line 18) * undefined functions: Pass By Value/Reference. (line 71) -* underscore (_), C macro: Explaining gettext. (line 70) +* underscore (_), C macro: Explaining gettext. (line 71) * underscore (_), in names of private variables: Library Names. (line 29) * underscore (_), translatable string: Programmer i18n. (line 69) @@ -33084,7 +33084,7 @@ Index (line 83) * unwatch debugger command: Viewing And Changing Data. (line 84) -* up debugger command: Execution Stack. (line 33) +* up debugger command: Execution Stack. (line 34) * user database, reading: Passwd Functions. (line 6) * user-defined functions: User-defined. (line 6) * user-defined, functions, counts, in a profile: Profiling. (line 137) @@ -33540,213 +33540,213 @@ Node: Anagram Program729137 Node: Signature Program732205 Node: Advanced Features733452 Node: Nondecimal Data735338 -Node: Array Sorting736921 -Node: Controlling Array Traversal737618 -Node: Array Sorting Functions745902 -Ref: Array Sorting Functions-Footnote-1749771 -Node: Two-way I/O749965 -Ref: Two-way I/O-Footnote-1755397 -Node: TCP/IP Networking755479 -Node: Profiling758323 -Node: Internationalization765826 -Node: I18N and L10N767251 -Node: Explaining gettext767937 -Ref: Explaining gettext-Footnote-1773005 -Ref: Explaining gettext-Footnote-2773189 -Node: Programmer i18n773354 -Node: Translator i18n777581 -Node: String Extraction778375 -Ref: String Extraction-Footnote-1779336 -Node: Printf Ordering779422 -Ref: Printf Ordering-Footnote-1782204 -Node: I18N Portability782268 -Ref: I18N Portability-Footnote-1784717 -Node: I18N Example784780 -Ref: I18N Example-Footnote-1787418 -Node: Gawk I18N787490 -Node: Debugger788111 -Node: Debugging789082 -Node: Debugging Concepts789515 -Node: Debugging Terms791371 -Node: Awk Debugging793968 -Node: Sample Debugging Session794860 -Node: Debugger Invocation795380 -Node: Finding The Bug796713 -Node: List of Debugger Commands803200 -Node: Breakpoint Control804534 -Node: Debugger Execution Control808198 -Node: Viewing And Changing Data811558 -Node: Execution Stack814914 -Node: Debugger Info816381 -Node: Miscellaneous Debugger Commands820375 -Node: Readline Support825559 -Node: Limitations826390 -Node: Arbitrary Precision Arithmetic828642 -Ref: Arbitrary Precision Arithmetic-Footnote-1830291 -Node: General Arithmetic830439 -Node: Floating Point Issues832159 -Node: String Conversion Precision833040 -Ref: String Conversion Precision-Footnote-1834745 -Node: Unexpected Results834854 -Node: POSIX Floating Point Problems837007 -Ref: POSIX Floating Point Problems-Footnote-1840832 -Node: Integer Programming840870 -Node: Floating-point Programming842609 -Ref: Floating-point Programming-Footnote-1848940 -Ref: Floating-point Programming-Footnote-2849210 -Node: Floating-point Representation849474 -Node: Floating-point Context850639 -Ref: table-ieee-formats851478 -Node: Rounding Mode852862 -Ref: table-rounding-modes853341 -Ref: Rounding Mode-Footnote-1856356 -Node: Gawk and MPFR856535 -Node: Arbitrary Precision Floats857944 -Ref: Arbitrary Precision Floats-Footnote-1860387 -Node: Setting Precision860703 -Ref: table-predefined-precision-strings861389 -Node: Setting Rounding Mode863534 -Ref: table-gawk-rounding-modes863938 -Node: Floating-point Constants865125 -Node: Changing Precision866554 -Ref: Changing Precision-Footnote-1867951 -Node: Exact Arithmetic868125 -Node: Arbitrary Precision Integers871263 -Ref: Arbitrary Precision Integers-Footnote-1874278 -Node: Dynamic Extensions874425 -Node: Extension Intro875883 -Node: Plugin License877148 -Node: Extension Mechanism Outline877833 -Ref: load-extension878250 -Ref: load-new-function879728 -Ref: call-new-function880723 -Node: Extension API Description882738 -Node: Extension API Functions Introduction884025 -Node: General Data Types888952 -Ref: General Data Types-Footnote-1894647 -Node: Requesting Values894946 -Ref: table-value-types-returned895683 -Node: Memory Allocation Functions896637 -Ref: Memory Allocation Functions-Footnote-1899383 -Node: Constructor Functions899479 -Node: Registration Functions901237 -Node: Extension Functions901922 -Node: Exit Callback Functions904224 -Node: Extension Version String905473 -Node: Input Parsers906123 -Node: Output Wrappers915880 -Node: Two-way processors920390 -Node: Printing Messages922598 -Ref: Printing Messages-Footnote-1923675 -Node: Updating `ERRNO'923827 -Node: Accessing Parameters924566 -Node: Symbol Table Access925796 -Node: Symbol table by name926310 -Node: Symbol table by cookie928286 -Ref: Symbol table by cookie-Footnote-1932418 -Node: Cached values932481 -Ref: Cached values-Footnote-1935971 -Node: Array Manipulation936062 -Ref: Array Manipulation-Footnote-1937160 -Node: Array Data Types937199 -Ref: Array Data Types-Footnote-1939902 -Node: Array Functions939994 -Node: Flattening Arrays943830 -Node: Creating Arrays950682 -Node: Extension API Variables955407 -Node: Extension Versioning956043 -Node: Extension API Informational Variables957944 -Node: Extension API Boilerplate959030 -Node: Finding Extensions962834 -Node: Extension Example963394 -Node: Internal File Description964124 -Node: Internal File Ops968215 -Ref: Internal File Ops-Footnote-1979724 -Node: Using Internal File Ops979864 -Ref: Using Internal File Ops-Footnote-1982211 -Node: Extension Samples982477 -Node: Extension Sample File Functions984001 -Node: Extension Sample Fnmatch992488 -Node: Extension Sample Fork994257 -Node: Extension Sample Inplace995470 -Node: Extension Sample Ord997248 -Node: Extension Sample Readdir998084 -Node: Extension Sample Revout999616 -Node: Extension Sample Rev2way1000209 -Node: Extension Sample Read write array1000899 -Node: Extension Sample Readfile1002782 -Node: Extension Sample API Tests1003882 -Node: Extension Sample Time1004407 -Node: gawkextlib1005771 -Node: Language History1008552 -Node: V7/SVR3.11010145 -Node: SVR41012465 -Node: POSIX1013907 -Node: BTL1015293 -Node: POSIX/GNU1016027 -Node: Feature History1021626 -Node: Common Extensions1034602 -Node: Ranges and Locales1035914 -Ref: Ranges and Locales-Footnote-11040531 -Ref: Ranges and Locales-Footnote-21040558 -Ref: Ranges and Locales-Footnote-31040792 -Node: Contributors1041013 -Node: Installation1046394 -Node: Gawk Distribution1047288 -Node: Getting1047772 -Node: Extracting1048598 -Node: Distribution contents1050290 -Node: Unix Installation1056011 -Node: Quick Installation1056628 -Node: Additional Configuration Options1059074 -Node: Configuration Philosophy1060810 -Node: Non-Unix Installation1063164 -Node: PC Installation1063622 -Node: PC Binary Installation1064933 -Node: PC Compiling1066781 -Node: PC Testing1069741 -Node: PC Using1070917 -Node: Cygwin1075085 -Node: MSYS1075894 -Node: VMS Installation1076408 -Node: VMS Compilation1077204 -Ref: VMS Compilation-Footnote-11078456 -Node: VMS Dynamic Extensions1078514 -Node: VMS Installation Details1079887 -Node: VMS Running1082138 -Node: VMS GNV1084972 -Node: VMS Old Gawk1085695 -Node: Bugs1086165 -Node: Other Versions1090083 -Node: Notes1096167 -Node: Compatibility Mode1096967 -Node: Additions1097750 -Node: Accessing The Source1098677 -Node: Adding Code1100117 -Node: New Ports1106162 -Node: Derived Files1110297 -Ref: Derived Files-Footnote-11115618 -Ref: Derived Files-Footnote-21115652 -Ref: Derived Files-Footnote-31116252 -Node: Future Extensions1116350 -Node: Implementation Limitations1116933 -Node: Extension Design1118181 -Node: Old Extension Problems1119335 -Ref: Old Extension Problems-Footnote-11120843 -Node: Extension New Mechanism Goals1120900 -Ref: Extension New Mechanism Goals-Footnote-11124265 -Node: Extension Other Design Decisions1124451 -Node: Extension Future Growth1126557 -Node: Old Extension Mechanism1127393 -Node: Basic Concepts1129133 -Node: Basic High Level1129814 -Ref: figure-general-flow1130086 -Ref: figure-process-flow1130685 -Ref: Basic High Level-Footnote-11133914 -Node: Basic Data Typing1134099 -Node: Glossary1137454 -Node: Copying1162685 -Node: GNU Free Documentation License1200241 -Node: Index1225377 +Node: Array Sorting736915 +Node: Controlling Array Traversal737612 +Node: Array Sorting Functions745892 +Ref: Array Sorting Functions-Footnote-1749799 +Node: Two-way I/O749993 +Ref: Two-way I/O-Footnote-1755509 +Node: TCP/IP Networking755591 +Node: Profiling758435 +Node: Internationalization765943 +Node: I18N and L10N767368 +Node: Explaining gettext768054 +Ref: Explaining gettext-Footnote-1773194 +Ref: Explaining gettext-Footnote-2773378 +Node: Programmer i18n773543 +Node: Translator i18n777768 +Node: String Extraction778562 +Ref: String Extraction-Footnote-1779523 +Node: Printf Ordering779609 +Ref: Printf Ordering-Footnote-1782391 +Node: I18N Portability782455 +Ref: I18N Portability-Footnote-1784904 +Node: I18N Example784967 +Ref: I18N Example-Footnote-1787689 +Node: Gawk I18N787761 +Node: Debugger788382 +Node: Debugging789353 +Node: Debugging Concepts789794 +Node: Debugging Terms791650 +Node: Awk Debugging794247 +Node: Sample Debugging Session795139 +Node: Debugger Invocation795659 +Node: Finding The Bug796992 +Node: List of Debugger Commands803474 +Node: Breakpoint Control804806 +Node: Debugger Execution Control808470 +Node: Viewing And Changing Data811830 +Node: Execution Stack815188 +Node: Debugger Info816701 +Node: Miscellaneous Debugger Commands820695 +Node: Readline Support825879 +Node: Limitations826771 +Node: Arbitrary Precision Arithmetic829019 +Ref: Arbitrary Precision Arithmetic-Footnote-1830668 +Node: General Arithmetic830816 +Node: Floating Point Issues832536 +Node: String Conversion Precision833417 +Ref: String Conversion Precision-Footnote-1835122 +Node: Unexpected Results835231 +Node: POSIX Floating Point Problems837384 +Ref: POSIX Floating Point Problems-Footnote-1841209 +Node: Integer Programming841247 +Node: Floating-point Programming842986 +Ref: Floating-point Programming-Footnote-1849317 +Ref: Floating-point Programming-Footnote-2849587 +Node: Floating-point Representation849851 +Node: Floating-point Context851016 +Ref: table-ieee-formats851855 +Node: Rounding Mode853239 +Ref: table-rounding-modes853718 +Ref: Rounding Mode-Footnote-1856733 +Node: Gawk and MPFR856912 +Node: Arbitrary Precision Floats858321 +Ref: Arbitrary Precision Floats-Footnote-1860764 +Node: Setting Precision861080 +Ref: table-predefined-precision-strings861766 +Node: Setting Rounding Mode863911 +Ref: table-gawk-rounding-modes864315 +Node: Floating-point Constants865502 +Node: Changing Precision866931 +Ref: Changing Precision-Footnote-1868328 +Node: Exact Arithmetic868502 +Node: Arbitrary Precision Integers871640 +Ref: Arbitrary Precision Integers-Footnote-1874655 +Node: Dynamic Extensions874802 +Node: Extension Intro876260 +Node: Plugin License877525 +Node: Extension Mechanism Outline878210 +Ref: load-extension878627 +Ref: load-new-function880105 +Ref: call-new-function881100 +Node: Extension API Description883115 +Node: Extension API Functions Introduction884402 +Node: General Data Types889329 +Ref: General Data Types-Footnote-1895024 +Node: Requesting Values895323 +Ref: table-value-types-returned896060 +Node: Memory Allocation Functions897014 +Ref: Memory Allocation Functions-Footnote-1899760 +Node: Constructor Functions899856 +Node: Registration Functions901614 +Node: Extension Functions902299 +Node: Exit Callback Functions904601 +Node: Extension Version String905850 +Node: Input Parsers906500 +Node: Output Wrappers916257 +Node: Two-way processors920767 +Node: Printing Messages922975 +Ref: Printing Messages-Footnote-1924052 +Node: Updating `ERRNO'924204 +Node: Accessing Parameters924943 +Node: Symbol Table Access926173 +Node: Symbol table by name926687 +Node: Symbol table by cookie928663 +Ref: Symbol table by cookie-Footnote-1932795 +Node: Cached values932858 +Ref: Cached values-Footnote-1936348 +Node: Array Manipulation936439 +Ref: Array Manipulation-Footnote-1937537 +Node: Array Data Types937576 +Ref: Array Data Types-Footnote-1940279 +Node: Array Functions940371 +Node: Flattening Arrays944207 +Node: Creating Arrays951059 +Node: Extension API Variables955784 +Node: Extension Versioning956420 +Node: Extension API Informational Variables958321 +Node: Extension API Boilerplate959407 +Node: Finding Extensions963211 +Node: Extension Example963771 +Node: Internal File Description964501 +Node: Internal File Ops968592 +Ref: Internal File Ops-Footnote-1980101 +Node: Using Internal File Ops980241 +Ref: Using Internal File Ops-Footnote-1982588 +Node: Extension Samples982854 +Node: Extension Sample File Functions984378 +Node: Extension Sample Fnmatch992865 +Node: Extension Sample Fork994634 +Node: Extension Sample Inplace995847 +Node: Extension Sample Ord997625 +Node: Extension Sample Readdir998461 +Node: Extension Sample Revout999993 +Node: Extension Sample Rev2way1000586 +Node: Extension Sample Read write array1001276 +Node: Extension Sample Readfile1003159 +Node: Extension Sample API Tests1004259 +Node: Extension Sample Time1004784 +Node: gawkextlib1006148 +Node: Language History1008929 +Node: V7/SVR3.11010522 +Node: SVR41012842 +Node: POSIX1014284 +Node: BTL1015670 +Node: POSIX/GNU1016404 +Node: Feature History1022003 +Node: Common Extensions1034979 +Node: Ranges and Locales1036291 +Ref: Ranges and Locales-Footnote-11040908 +Ref: Ranges and Locales-Footnote-21040935 +Ref: Ranges and Locales-Footnote-31041169 +Node: Contributors1041390 +Node: Installation1046771 +Node: Gawk Distribution1047665 +Node: Getting1048149 +Node: Extracting1048975 +Node: Distribution contents1050667 +Node: Unix Installation1056388 +Node: Quick Installation1057005 +Node: Additional Configuration Options1059451 +Node: Configuration Philosophy1061187 +Node: Non-Unix Installation1063541 +Node: PC Installation1063999 +Node: PC Binary Installation1065310 +Node: PC Compiling1067158 +Node: PC Testing1070118 +Node: PC Using1071294 +Node: Cygwin1075462 +Node: MSYS1076271 +Node: VMS Installation1076785 +Node: VMS Compilation1077581 +Ref: VMS Compilation-Footnote-11078833 +Node: VMS Dynamic Extensions1078891 +Node: VMS Installation Details1080264 +Node: VMS Running1082515 +Node: VMS GNV1085349 +Node: VMS Old Gawk1086072 +Node: Bugs1086542 +Node: Other Versions1090460 +Node: Notes1096544 +Node: Compatibility Mode1097344 +Node: Additions1098127 +Node: Accessing The Source1099054 +Node: Adding Code1100494 +Node: New Ports1106539 +Node: Derived Files1110674 +Ref: Derived Files-Footnote-11115995 +Ref: Derived Files-Footnote-21116029 +Ref: Derived Files-Footnote-31116629 +Node: Future Extensions1116727 +Node: Implementation Limitations1117310 +Node: Extension Design1118558 +Node: Old Extension Problems1119712 +Ref: Old Extension Problems-Footnote-11121220 +Node: Extension New Mechanism Goals1121277 +Ref: Extension New Mechanism Goals-Footnote-11124642 +Node: Extension Other Design Decisions1124828 +Node: Extension Future Growth1126934 +Node: Old Extension Mechanism1127770 +Node: Basic Concepts1129510 +Node: Basic High Level1130191 +Ref: figure-general-flow1130463 +Ref: figure-process-flow1131062 +Ref: Basic High Level-Footnote-11134291 +Node: Basic Data Typing1134476 +Node: Glossary1137831 +Node: Copying1163062 +Node: GNU Free Documentation License1200618 +Node: Index1225754  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 88098df3..1b8d003f 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -131,9 +131,15 @@ @set LEQ @math{@leq} @set PI @math{@pi} @end iftex +@ifdocbook +@set LEQ @inlineraw{docbook, ≤} +@set PI @inlineraw{docbook, &pgr;} +@end ifdocbook @ifnottex +@ifnotdocbook @set LEQ <= @set PI @i{pi} +@end ifnotdocbook @end ifnottex @ifnottex @@ -16043,13 +16049,7 @@ Optional parameters are enclosed in square brackets@w{ ([ ]):} @cindex arctangent Return the arctangent of @code{@var{y} / @var{x}} in radians. You can use @samp{pi = atan2(0, -1)} to retrieve the value of -@ifnotdocbook @value{PI}. -@end ifnotdocbook -@docbook -&pgr;. - -@end docbook @item @code{cos(@var{x})} @cindexawkfunc{cos} @@ -25744,7 +25744,7 @@ $ @kbd{echo 0123 123 0x123 | gawk '@{ print $1, $2, $3 @}'} The @code{print} statement treats its expressions as strings. Although the fields can act as numbers when necessary, they are still strings, so @code{print} does not try to treat them -numerically. You may need to add zero to a field to force it to +numerically. You need to add zero to a field to force it to be treated as a number. For example: @example @@ -25766,7 +25766,7 @@ disabled. If you want it, you must explicitly request it. @emph{Use of this option is not recommended.} It can break old programs very badly. Instead, use the @code{strtonum()} function to convert your data -(@pxref{Nondecimal-numbers}). +(@pxref{String Functions}). This makes your programs easier to write and easier to read, and leads to less surprising results. @end quotation @@ -25800,7 +25800,7 @@ lets you do this. @ref{Controlling Scanning}, describes how you can assign special, pre-defined values to @code{PROCINFO["sorted_in"]} in order to -control the order in which @command{gawk} will traverse an array +control the order in which @command{gawk} traverses an array during a @code{for} loop. In addition, the value of @code{PROCINFO["sorted_in"]} can be a function name. @@ -26124,9 +26124,9 @@ END @{ So far, so good. Now it starts to get interesting. Both @code{asort()} and @code{asorti()} accept a third string argument to control comparison -of array elements. In @ref{String Functions}, we ignored this third -argument; however, the time has now come to describe how this argument -affects these two functions. +of array elements. When we introduced @code{asort()} and @code{asorti()} +in @ref{String Functions}, we ignored this third argument; however, +now is the time to describe how this argument affects these two functions. Basically, the third argument specifies how the array is to be sorted. There are two possibilities. As with @code{PROCINFO["sorted_in"]}, @@ -26322,6 +26322,7 @@ has been read, @command{gawk} terminates the coprocess and exits. As a side note, the assignment @samp{LC_ALL=C} in the @command{sort} command ensures traditional Unix (ASCII) sorting from @command{sort}. +This is not strictly necessary here, but it's good to know how to do this. @cindex @command{gawk}, @code{PROCINFO} array in @cindex @code{PROCINFO} array, and communications via ptys @@ -26340,7 +26341,7 @@ print @dots{} |& command # start two-way pipe @end example @noindent -Using ptys avoids the buffer deadlock issues described earlier, at some +Using ptys usually avoids the buffer deadlock issues described earlier, at some loss in performance. If your system does not have ptys, or if all the system's ptys are in use, @command{gawk} automatically falls back to using regular pipes. @@ -26444,7 +26445,9 @@ See @inforef{Top, , General Introduction, gawkinet, TCP/IP Internetworking with @command{gawk}}, @end ifinfo @ifnotinfo -See @cite{TCP/IP Internetworking with @command{gawk}}, +See +@uref{http://www.gnu.org/software/gawk/manual/gawkinet/, +@cite{TCP/IP Internetworking with @command{gawk}}}, which comes as part of the @command{gawk} distribution, @end ifnotinfo for a much more complete introduction and discussion, as well as @@ -26723,7 +26726,7 @@ As usual, the profiled version of the program is written to @file{awkprof.out}, or to a different file if one specified with the @option{--profile} option. -Along with the regular profile, as shown earlier, the profile +Along with the regular profile, as shown earlier, the profile file includes a trace of any active functions: @example @@ -26830,6 +26833,8 @@ monetary values are printed and read. @cindex internationalizing a program @c STARTOFRANGE gettex @cindex @code{gettext} library +@command{gawk} uses GNU @code{gettext} to provide its internationalization +features. The facilities in GNU @code{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} @@ -27040,7 +27045,7 @@ are candidates for translation at runtime. String constants without a leading underscore are not translated. @cindexgawkfunc{dcgettext} -@item @code{dcgettext(@var{string}} [@code{,} @var{domain} [@code{,} @var{category} ]]@code{)} +@item @code{dcgettext(@var{string}} [@code{,} @var{domain} [@code{,} @var{category}]]@code{)} Return the translation of @var{string} in text domain @var{domain} for locale category @var{category}. The default value for @var{domain} is the current value of @code{TEXTDOMAIN}. @@ -27066,7 +27071,7 @@ default arguments. @end quotation @cindexgawkfunc{dcngettext} -@item @code{dcngettext(@var{string1}, @var{string2}, @var{number}} [@code{,} @var{domain} [@code{,} @var{category} ]]@code{)} +@item @code{dcngettext(@var{string1}, @var{string2}, @var{number}} [@code{,} @var{domain} [@code{,} @var{category}]]@code{)} 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 @@ -27494,33 +27499,34 @@ msgstr "Like, the scoop is" @cindex Linux @cindex GNU/Linux The next step is to make the directory to hold the binary message object -file and then to create the @file{guide.gmo} file. +file and then to create the @file{guide.mo} file. +We pretend that our file is to be used in the @code{en_US.UTF-8} locale. The directory layout shown here is standard for GNU @code{gettext} on GNU/Linux systems. Other versions of @code{gettext} may use a different layout: @example -$ @kbd{mkdir en_US en_US/LC_MESSAGES} +$ @kbd{mkdir en_US.UTF-8 en_US.UTF-8/LC_MESSAGES} @end example -@cindex @code{.po} files, converting to @code{.gmo} -@cindex files, @code{.po}, converting to @code{.gmo} -@cindex @code{.gmo} files, converting from @code{.po} -@cindex files, @code{.gmo}, converting from @code{.po} +@cindex @code{.po} files, converting to @code{.mo} +@cindex files, @code{.po}, converting to @code{.mo} +@cindex @code{.mo} files, converting from @code{.po} +@cindex files, @code{.mo}, converting from @code{.po} @cindex portable object files, converting to message object files @cindex files, portable object, converting to message object files @cindex message object files, converting from portable object files @cindex files, message object, converting from portable object files @cindex @command{msgfmt} utility The @command{msgfmt} utility does the conversion from human-readable -@file{.po} file to machine-readable @file{.gmo} file. +@file{.po} file to machine-readable @file{.mo} file. By default, @command{msgfmt} creates a file named @file{messages}. This file must be renamed and placed in the proper directory so that @command{gawk} can find it: @example $ @kbd{msgfmt guide-mellow.po} -$ @kbd{mv messages en_US/LC_MESSAGES/guide.gmo} +$ @kbd{mv messages en_US.UTF-8/LC_MESSAGES/guide.mo} @end example Finally, we run the program to test it: @@ -27592,7 +27598,7 @@ how to use @command{gawk} for debugging your program is easy. @end menu @node Debugging -@section Introduction to @command{gawk} Debugger +@section Introduction to The @command{gawk} Debugger This @value{SECTION} introduces debugging in general and begins the discussion of debugging in @command{gawk}. @@ -27907,13 +27913,7 @@ This tells us that @command{gawk} is now ready to execute line 67, which decides whether to give the lines the special ``field skipping'' treatment indicated by the @option{-f} command-line option. (Notice that we skipped from where we were before at line 64 to here, since the condition in line 64 - -@example -if (fcount == 0 && charcount == 0) -@end example - -@noindent -was false.) +@samp{if (fcount == 0 && charcount == 0)} was false.) Continuing to step, we now get to the splitting of the current and last records: @@ -28048,7 +28048,7 @@ In the following descriptions, commands which 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 when just hitting @key{Enter}. +automatically repeat the previous command just by hitting @key{Enter}. This works for the commands @code{list}, @code{next}, @code{nexti}, @code{step}, @code{stepi} and @code{continue} executed without any argument. @@ -28410,7 +28410,7 @@ No newline is printed unless one is specified. @item @code{set} @var{var}@code{=}@var{value} Assign a constant (number or string) value to an @command{awk} variable or field. -String values must be enclosed between double quotes (@code{"@dots{}"}). +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}, etc. @@ -28485,10 +28485,11 @@ Then select and print the frame. @cindex @code{f} debugger command (alias for @code{frame}) @item @code{frame} [@var{n}] @itemx @code{f} [@var{n}] -Select and print (frame number, function and argument names, source file, -and the source line) 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 main program. +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 +main program. The printed information consists of the frame number, +function and argument names, source file, and the source line. @cindex debugger commands, @code{up} @cindex @code{up} debugger command @@ -28788,9 +28789,11 @@ fairly self-explanatory, and using @code{stepi} and @code{nexti} while @cindex command completion, in debugger @cindex history expansion, in debugger -If @command{gawk} is compiled with the @code{readline} library, you -can take advantage of that library's command completion and history expansion -features. The following types of completion are available: +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 +command completion and history expansion features. The following types +of completion are available: @table @asis @item Command completion @@ -28840,9 +28843,10 @@ If you perused the dump of opcodes in @ref{Miscellaneous Debugger Commands}, 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}, etc., 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. +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 in the program can be printed. Of course, a workaround for diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 599bd098..c905e1d5 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -126,9 +126,15 @@ @set LEQ @math{@leq} @set PI @math{@pi} @end iftex +@ifdocbook +@set LEQ @inlineraw{docbook, ≤} +@set PI @inlineraw{docbook, &pgr;} +@end ifdocbook @ifnottex +@ifnotdocbook @set LEQ <= @set PI @i{pi} +@end ifnotdocbook @end ifnottex @ifnottex @@ -15377,13 +15383,7 @@ Optional parameters are enclosed in square brackets@w{ ([ ]):} @cindex arctangent Return the arctangent of @code{@var{y} / @var{x}} in radians. You can use @samp{pi = atan2(0, -1)} to retrieve the value of -@ifnotdocbook @value{PI}. -@end ifnotdocbook -@docbook -&pgr;. - -@end docbook @item @code{cos(@var{x})} @cindexawkfunc{cos} @@ -24888,7 +24888,7 @@ $ @kbd{echo 0123 123 0x123 | gawk '@{ print $1, $2, $3 @}'} The @code{print} statement treats its expressions as strings. Although the fields can act as numbers when necessary, they are still strings, so @code{print} does not try to treat them -numerically. You may need to add zero to a field to force it to +numerically. You need to add zero to a field to force it to be treated as a number. For example: @example @@ -24910,7 +24910,7 @@ disabled. If you want it, you must explicitly request it. @emph{Use of this option is not recommended.} It can break old programs very badly. Instead, use the @code{strtonum()} function to convert your data -(@pxref{Nondecimal-numbers}). +(@pxref{String Functions}). This makes your programs easier to write and easier to read, and leads to less surprising results. @end quotation @@ -24944,7 +24944,7 @@ lets you do this. @ref{Controlling Scanning}, describes how you can assign special, pre-defined values to @code{PROCINFO["sorted_in"]} in order to -control the order in which @command{gawk} will traverse an array +control the order in which @command{gawk} traverses an array during a @code{for} loop. In addition, the value of @code{PROCINFO["sorted_in"]} can be a function name. @@ -25268,9 +25268,9 @@ END @{ So far, so good. Now it starts to get interesting. Both @code{asort()} and @code{asorti()} accept a third string argument to control comparison -of array elements. In @ref{String Functions}, we ignored this third -argument; however, the time has now come to describe how this argument -affects these two functions. +of array elements. When we introduced @code{asort()} and @code{asorti()} +in @ref{String Functions}, we ignored this third argument; however, +now is the time to describe how this argument affects these two functions. Basically, the third argument specifies how the array is to be sorted. There are two possibilities. As with @code{PROCINFO["sorted_in"]}, @@ -25466,6 +25466,7 @@ has been read, @command{gawk} terminates the coprocess and exits. As a side note, the assignment @samp{LC_ALL=C} in the @command{sort} command ensures traditional Unix (ASCII) sorting from @command{sort}. +This is not strictly necessary here, but it's good to know how to do this. @cindex @command{gawk}, @code{PROCINFO} array in @cindex @code{PROCINFO} array, and communications via ptys @@ -25484,7 +25485,7 @@ print @dots{} |& command # start two-way pipe @end example @noindent -Using ptys avoids the buffer deadlock issues described earlier, at some +Using ptys usually avoids the buffer deadlock issues described earlier, at some loss in performance. If your system does not have ptys, or if all the system's ptys are in use, @command{gawk} automatically falls back to using regular pipes. @@ -25588,7 +25589,9 @@ See @inforef{Top, , General Introduction, gawkinet, TCP/IP Internetworking with @command{gawk}}, @end ifinfo @ifnotinfo -See @cite{TCP/IP Internetworking with @command{gawk}}, +See +@uref{http://www.gnu.org/software/gawk/manual/gawkinet/, +@cite{TCP/IP Internetworking with @command{gawk}}}, which comes as part of the @command{gawk} distribution, @end ifnotinfo for a much more complete introduction and discussion, as well as @@ -25867,7 +25870,7 @@ As usual, the profiled version of the program is written to @file{awkprof.out}, or to a different file if one specified with the @option{--profile} option. -Along with the regular profile, as shown earlier, the profile +Along with the regular profile, as shown earlier, the profile file includes a trace of any active functions: @example @@ -25974,6 +25977,8 @@ monetary values are printed and read. @cindex internationalizing a program @c STARTOFRANGE gettex @cindex @code{gettext} library +@command{gawk} uses GNU @code{gettext} to provide its internationalization +features. The facilities in GNU @code{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} @@ -26184,7 +26189,7 @@ are candidates for translation at runtime. String constants without a leading underscore are not translated. @cindexgawkfunc{dcgettext} -@item @code{dcgettext(@var{string}} [@code{,} @var{domain} [@code{,} @var{category} ]]@code{)} +@item @code{dcgettext(@var{string}} [@code{,} @var{domain} [@code{,} @var{category}]]@code{)} Return the translation of @var{string} in text domain @var{domain} for locale category @var{category}. The default value for @var{domain} is the current value of @code{TEXTDOMAIN}. @@ -26210,7 +26215,7 @@ default arguments. @end quotation @cindexgawkfunc{dcngettext} -@item @code{dcngettext(@var{string1}, @var{string2}, @var{number}} [@code{,} @var{domain} [@code{,} @var{category} ]]@code{)} +@item @code{dcngettext(@var{string1}, @var{string2}, @var{number}} [@code{,} @var{domain} [@code{,} @var{category}]]@code{)} 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 @@ -26638,33 +26643,34 @@ msgstr "Like, the scoop is" @cindex Linux @cindex GNU/Linux The next step is to make the directory to hold the binary message object -file and then to create the @file{guide.gmo} file. +file and then to create the @file{guide.mo} file. +We pretend that our file is to be used in the @code{en_US.UTF-8} locale. The directory layout shown here is standard for GNU @code{gettext} on GNU/Linux systems. Other versions of @code{gettext} may use a different layout: @example -$ @kbd{mkdir en_US en_US/LC_MESSAGES} +$ @kbd{mkdir en_US.UTF-8 en_US.UTF-8/LC_MESSAGES} @end example -@cindex @code{.po} files, converting to @code{.gmo} -@cindex files, @code{.po}, converting to @code{.gmo} -@cindex @code{.gmo} files, converting from @code{.po} -@cindex files, @code{.gmo}, converting from @code{.po} +@cindex @code{.po} files, converting to @code{.mo} +@cindex files, @code{.po}, converting to @code{.mo} +@cindex @code{.mo} files, converting from @code{.po} +@cindex files, @code{.mo}, converting from @code{.po} @cindex portable object files, converting to message object files @cindex files, portable object, converting to message object files @cindex message object files, converting from portable object files @cindex files, message object, converting from portable object files @cindex @command{msgfmt} utility The @command{msgfmt} utility does the conversion from human-readable -@file{.po} file to machine-readable @file{.gmo} file. +@file{.po} file to machine-readable @file{.mo} file. By default, @command{msgfmt} creates a file named @file{messages}. This file must be renamed and placed in the proper directory so that @command{gawk} can find it: @example $ @kbd{msgfmt guide-mellow.po} -$ @kbd{mv messages en_US/LC_MESSAGES/guide.gmo} +$ @kbd{mv messages en_US.UTF-8/LC_MESSAGES/guide.mo} @end example Finally, we run the program to test it: @@ -26736,7 +26742,7 @@ how to use @command{gawk} for debugging your program is easy. @end menu @node Debugging -@section Introduction to @command{gawk} Debugger +@section Introduction to The @command{gawk} Debugger This @value{SECTION} introduces debugging in general and begins the discussion of debugging in @command{gawk}. @@ -27051,13 +27057,7 @@ This tells us that @command{gawk} is now ready to execute line 67, which decides whether to give the lines the special ``field skipping'' treatment indicated by the @option{-f} command-line option. (Notice that we skipped from where we were before at line 64 to here, since the condition in line 64 - -@example -if (fcount == 0 && charcount == 0) -@end example - -@noindent -was false.) +@samp{if (fcount == 0 && charcount == 0)} was false.) Continuing to step, we now get to the splitting of the current and last records: @@ -27192,7 +27192,7 @@ In the following descriptions, commands which 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 when just hitting @key{Enter}. +automatically repeat the previous command just by hitting @key{Enter}. This works for the commands @code{list}, @code{next}, @code{nexti}, @code{step}, @code{stepi} and @code{continue} executed without any argument. @@ -27554,7 +27554,7 @@ No newline is printed unless one is specified. @item @code{set} @var{var}@code{=}@var{value} Assign a constant (number or string) value to an @command{awk} variable or field. -String values must be enclosed between double quotes (@code{"@dots{}"}). +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}, etc. @@ -27629,10 +27629,11 @@ Then select and print the frame. @cindex @code{f} debugger command (alias for @code{frame}) @item @code{frame} [@var{n}] @itemx @code{f} [@var{n}] -Select and print (frame number, function and argument names, source file, -and the source line) 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 main program. +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 +main program. The printed information consists of the frame number, +function and argument names, source file, and the source line. @cindex debugger commands, @code{up} @cindex @code{up} debugger command @@ -27932,9 +27933,11 @@ fairly self-explanatory, and using @code{stepi} and @code{nexti} while @cindex command completion, in debugger @cindex history expansion, in debugger -If @command{gawk} is compiled with the @code{readline} library, you -can take advantage of that library's command completion and history expansion -features. The following types of completion are available: +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 +command completion and history expansion features. The following types +of completion are available: @table @asis @item Command completion @@ -27984,9 +27987,10 @@ If you perused the dump of opcodes in @ref{Miscellaneous Debugger Commands}, 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}, etc., 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. +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 in the program can be printed. Of course, a workaround for -- cgit v1.2.3 From a29f25b08f9dce05bea6892e3d5396cf201417c8 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sat, 17 May 2014 23:01:43 +0300 Subject: Edits through Chapter 16. --- doc/ChangeLog | 4 + doc/gawk.info | 627 ++++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 271 +++++++++++------------- doc/gawktexi.in | 271 +++++++++++------------- 4 files changed, 551 insertions(+), 622 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 012511be..c71ec99e 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-05-17 Arnold D. Robbins + + * gawktexi.in: Edits through Chapter 16. + 2014-05-16 Arnold D. Robbins * gawktexi.in: Edits through Chapter 14. diff --git a/doc/gawk.info b/doc/gawk.info index 5cf6129d..e860045e 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -9710,7 +9710,7 @@ description of each variable.) `ROUNDMODE #' The rounding mode to use for arbitrary precision arithmetic on - numbers, by default `"N"' (`roundTiesToEven' in the IEEE-754 + numbers, by default `"N"' (`roundTiesToEven' in the IEEE 754 standard; *note Setting Rounding Mode::). ``RS'' @@ -20893,8 +20893,8 @@ as follows: $ echo 0xDeadBeef | gawk '{ print $1 + 0 }' -| 0 - `gawk' does ignore case in the four special values. Thus `+nan' - and `+NaN' are the same. + `gawk' ignores case in the four special values. Thus `+nan' and + `+NaN' are the same. ---------- Footnotes ---------- @@ -20908,13 +20908,14 @@ File: gawk.info, Node: Integer Programming, Prev: Floating Point Issues, Up: As has been mentioned already, `awk' uses hardware double precision with 64-bit IEEE binary floating-point representation for numbers on -most systems. A large integer like 9,007,199,254,740,997 has a binary +most systems. A large integer like 9,007,199,254,740,997 has a binary representation that, although finite, is more than 53 bits long; it -must also be rounded to 53 bits. The biggest integer that can be +must also be rounded to 53 bits. (The details are discussed in *note +Floating-point Representation::.) The biggest integer that can be stored in a C `double' is usually the same as the largest possible value of a `double'. If your system `double' is an IEEE 64-bit `double', this largest possible value is an integer and can be -represented precisely. What more should one know about integers? +represented precisely. What more should you know about integers? If you want to know what is the largest integer, such that it and all smaller integers can be stored in 64-bit doubles without losing @@ -20972,9 +20973,9 @@ matters worse, with arbitrary precision floating-point, you can set the precision before starting a computation, but then you cannot be sure of the number of significant decimal places in the final result. - Sometimes, before you start to write any code, you should think more -about what you really want and what's really happening. Consider the -two numbers in the following example: + So, before you start to write any code, you should think more about +what you really want and what's really happening. Consider the two +numbers in the following example: x = 0.875 # 1/2 + 1/4 + 1/8 y = 0.425 @@ -20999,8 +21000,8 @@ previous example, produces an output identical to the input. Because the underlying representation can be a little bit off from the exact value, comparing floating-point values to see if they are -equal is generally not a good idea. Here is an example where it does -not work like you expect: +exactly equal is generally a bad idea. Here is an example where it +does not work like you expect: $ gawk 'BEGIN { print (0.1 + 12.2 == 12.3) }' -| 0 @@ -21056,7 +21057,7 @@ operations in your calculation. The stability and the accuracy of the computation of the constant pi in the earlier example can be enhanced by using the following simple algebraic transformation: - (sqrt(x * x + 1) - 1) / x = x / (sqrt(x * x + 1) + 1) + (sqrt(x * x + 1) - 1) / x == x / (sqrt(x * x + 1) + 1) After making this, change the program does converge to pi in under 30 iterations: @@ -21110,7 +21111,7 @@ File: gawk.info, Node: Floating-point Representation, Next: Floating-point Con Although floating-point representations vary from machine to machine, the most commonly encountered representation is that defined by the -IEEE 754 Standard. An IEEE-754 format value has three components: +IEEE 754 Standard. An IEEE 754 format value has three components: * A sign bit telling whether the number is positive or negative. @@ -21120,11 +21121,11 @@ IEEE 754 Standard. An IEEE-754 format value has three components: The value of the number is then S * 2^E. The first bit of a non-zero binary significand is always one, so the significand in an -IEEE-754 format only includes the fractional part, leaving the leading +IEEE 754 format only includes the fractional part, leaving the leading one implicit. The significand is stored in "normalized" format, which means that the first bit is always a one. - Three of the standard IEEE-754 types are 32-bit single precision, + Three of the standard IEEE 754 types are 32-bit single precision, 64-bit double precision and 128-bit quadruple precision. The standard also specifies extended precision formats to allow greater precisions and larger exponent ranges. @@ -21156,7 +21157,7 @@ components: The rounding mode of the context. *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 emin emax --------------------------------------------------------------------------- @@ -21171,10 +21172,10 @@ Table 15.1: Basic IEEE Format Context Values A floating-point context can also determine which signals are treated as exceptions, and can set rules for arithmetic with special values. -Please consult the IEEE-754 standard or other resources for details. +Please consult the IEEE 754 standard or other resources for details. `gawk' ordinarily uses the hardware double precision representation -for numbers. On most systems, this is IEEE-754 floating-point format, +for numbers. On most systems, this is IEEE 754 floating-point format, corresponding to 64-bit binary with 53 bits of precision. NOTE: In case an underflow occurs, the standard allows, but does @@ -21182,8 +21183,8 @@ corresponding to 64-bit binary with 53 bits of precision. number smaller than the smallest nonzero normalized number. Such numbers do not have as many significant digits as normal numbers, and are called "denormals" or "subnormals". The alternative, - simply returning a zero, is called "flush to zero". The basic - IEEE-754 binary formats support subnormal numbers. + simply returning a zero, is called "flush to zero". The basic IEEE + 754 binary formats support subnormal numbers.  File: gawk.info, Node: Rounding Mode, Prev: Floating-point Context, Up: Floating-point Programming @@ -21194,7 +21195,7 @@ File: gawk.info, Node: Rounding Mode, Prev: Floating-point Context, Up: Float The "rounding mode" specifies the behavior for the results of numerical operations when discarding extra precision. Each rounding mode indicates how the least significant returned digit of a rounded result is to be -calculated. *note table-rounding-modes:: lists the IEEE-754 defined +calculated. *note table-rounding-modes:: lists the IEEE 754 defined rounding modes: Rounding Mode IEEE Name @@ -21244,7 +21245,7 @@ produces the following output when run on the author's system:(1) The theory behind the rounding mode `roundTiesToEven' is that it more or less evenly distributes upward and downward rounds of exact halves, which might cause any round-off error to cancel itself out. -This is the default rounding mode used in IEEE-754 computing functions +This is the default rounding mode used in IEEE 754 computing functions and operators. The other rounding modes are rarely used. Round toward positive @@ -21269,7 +21270,7 @@ significant difference in output when you change the rounding mode. ---------- Footnotes ---------- (1) It is possible for the output to be completely different if the -C library in your system does not use the IEEE-754 even-rounding rule +C library in your system does not use the IEEE 754 even-rounding rule to round halfway cases for `printf'.  @@ -21325,14 +21326,14 @@ rounding mode are set globally for every operation to follow. The default working precision for arbitrary precision floating-point values is 53 bits, and the default value for `ROUNDMODE' is `"N"', -which selects the IEEE-754 `roundTiesToEven' rounding mode (*note +which selects the IEEE 754 `roundTiesToEven' rounding mode (*note Rounding Mode::).(1) `gawk' uses the default exponent range in MPFR (EMAX = 2^30 - 1, EMIN = -EMAX) for all floating-point contexts. There is no explicit mechanism to adjust the exponent range. MPFR does not implement subnormal numbers by default, and this behavior cannot be changed in `gawk'. - NOTE: When emulating an IEEE-754 format (*note Setting + NOTE: When emulating an IEEE 754 format (*note Setting Precision::), `gawk' internally adjusts the exponent range to the value defined for the format and also performs computations needed for gradual underflow (subnormal numbers). @@ -21355,7 +21356,7 @@ changed in `gawk'. (1) The default precision is 53 bits, since according to the MPFR documentation, the library should be able to exactly reproduce all -computations with double-precision machine floating-point numbers +computations done with double-precision machine floating-point numbers (`double' type in C), except the default exponent range is much wider and subnormal numbers are not implemented. @@ -21369,12 +21370,12 @@ File: gawk.info, Node: Setting Precision, Next: Setting Rounding Mode, Up: Ar precision or accuracy of individual numbers. Performing an arithmetic operation or calling a built-in function rounds the result to the current working precision. The default working precision is 53 bits, -which can be modified using the built-in variable `PREC'. You can also -set the value to one of the pre-defined case-insensitive strings shown -in *note table-predefined-precision-strings::, to emulate an IEEE-754 +which you can modify using the built-in variable `PREC'. You can also +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. @@ -21447,9 +21448,9 @@ from zero Table 15.4: `gawk' Rounding Modes - `ROUNDMODE' has the default value `"N"', which selects the IEEE-754 + `ROUNDMODE' has the default value `"N"', which selects the IEEE 754 rounding mode `roundTiesToEven'. In *note Table 15.4: -table-gawk-rounding-modes, `"A"' is listed to select the IEEE-754 mode +table-gawk-rounding-modes, `"A"' is listed to select the IEEE 754 mode `roundTiesToAway'. This is only available if your version of the MPFR library supports it; otherwise setting `ROUNDMODE' to this value has no effect. *Note Rounding Mode::, for the meanings of the various rounding @@ -21468,16 +21469,16 @@ File: gawk.info, Node: Floating-point Constants, Next: Changing Precision, Pr -------------------------------------------- Be wary of floating-point constants! When reading a floating-point -constant from program source code, `gawk' uses the default precision, -unless overridden by an assignment to the special variable `PREC' on -the command line, to store it internally as a MPFR number. Changing -the precision using `PREC' in the program text does _not_ change the -precision of a constant. If you need to represent a floating-point -constant at a higher precision than the default and cannot use a -command line assignment to `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: +constant from program source code, `gawk' uses the default precision +(that of a C `double'), unless overridden by an assignment to the +special variable `PREC' on the command line, to store it internally as +a MPFR number. Changing the precision using `PREC' in the program text +does _not_ change the precision of a constant. If you need to represent +a floating-point constant at a higher precision than the default and +cannot use a command line assignment to `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: $ gawk -M 'BEGIN { PREC = 113; printf("%0.25f\n", 0.1) }' -| 0.1000000000000000055511151 @@ -21509,8 +21510,8 @@ File: gawk.info, Node: Changing Precision, Next: Exact Arithmetic, Prev: Floa `gawk' does not implicitly modify the precision of any previously computed results when the working precision is changed with an assignment to `PREC'. The precision of a number is always the one that -was used at the time of its creation, and there is no way for the user -to explicitly change it afterwards. However, since the result of a +was used at the time of its creation, and there is no way for you to +explicitly change it afterwards. However, since the result of a floating-point arithmetic operation is always an arbitrary precision floating-point value--with a precision set by the value of `PREC'--one of the following workarounds effectively accomplishes the desired @@ -21570,10 +21571,10 @@ straight test for equality may not work. So, don't assume that floating-point values can be compared for equality. You should also exercise caution when using other forms of -comparisons. The standard way to compare between floating-point -numbers is to determine how much error (or "tolerance") you will allow -in a comparison and check to see if one value is within this error -range of the other. +comparisons. The standard way to compare two floating-point numbers is +to determine how much error (or "tolerance") you will allow in a +comparison and check to see if one value is within this error range of +the other. In applications where 15 or fewer decimal places suffice, hardware double precision arithmetic can be adequate, and is usually much faster. @@ -21833,9 +21834,9 @@ Figure 16.3: Calling The New Function the API `struct' to do its work, such as updating variables or arrays, printing messages, setting `ERRNO', and so on. - Convenience macros in the `gawkapi.h' header file make calling -through the function pointers look like regular function calls so that -extension code is quite readable and understandable. + Convenience macros make calling through the function pointers look +like regular function calls so that extension code is quite readable +and understandable. Although all of this sounds somewhat complicated, the result is that extension code is quite straightforward to write and to read. You can @@ -21862,7 +21863,10 @@ File: gawk.info, Node: Extension API Description, Next: Finding Extensions, P 16.4 API Description ==================== -This (rather large) minor node describes the API in detail. +C or C++ code for an extension must include the header file +`gawkapi.h', which declares the functions and defines the data types +used to communicate with `gawk'. This (rather large) minor node +describes the API in detail. * Menu: @@ -21946,6 +21950,7 @@ operations: C Entity Header File ------------------------------------------- `EOF' `' + Values for `errno' `' `FILE' `' `NULL' `' `memcpy()' `' @@ -21960,9 +21965,6 @@ operations: a portability hodge-podge as can be seen in some parts of the `gawk' source code. - To pass reasonable integer values for `ERRNO', you will also need - to include `'. - * The `gawkapi.h' file may be included more than once without ill effect. Doing so, however, is poor coding practice. @@ -21982,7 +21984,7 @@ operations: * The API defines several simple `struct's that map values as seen from `awk'. A value can be a `double', a string, or an array (as in multidimensional arrays, or when creating a new array). String - values maintain both pointer and length since embedded `NUL' + values maintain both pointer and length since embedded NUL characters are allowed. NOTE: By intent, strings are maintained using the current @@ -22106,7 +22108,7 @@ that use them. indicates what is in the `union'. Representing numbers is easy--the API uses a C `double'. Strings -require more work. Since `gawk' allows embedded `NUL' bytes in string +require more work. Since `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. @@ -22476,7 +22478,8 @@ used for `RT', if any. A pointer to your `XXX_take_control_of()' function. `awk_const struct input_parser *awk_const next;' - This pointer is used by `gawk'. The extension cannot modify it. + This is for use by `gawk'; therefore it is marked `awk_const' so + that the extension cannot modify it. The steps are as follows: @@ -22515,8 +22518,8 @@ as follows: Otherwise, it will. `struct stat sbuf;' - If file descriptor is valid, then `gawk' will have filled in this - structure via a call to the `fstat()' system call. + If the file descriptor is valid, then `gawk' will have filled in + this structure via a call to the `fstat()' system call. The `XXX_can_take_file()' function should examine these fields and decide if the input parser should be used for the file. The decision @@ -22679,8 +22682,8 @@ an extension to take over the output to a file opened with the `>' or false otherwise. `awk_const struct output_wrapper *awk_const next;' - This is for use by `gawk'; therefore they are marked `awk_const' - so that the extension cannot modify them. + This is for use by `gawk'; therefore it is marked `awk_const' so + that the extension cannot modify it. The `awk_output_buf_t' structure looks like this: @@ -22737,9 +22740,9 @@ in the `awk_output_buf_t'. The data members are as follows: the `name' and `mode' fields, and any additional state (such as `awk' variable values) that is appropriate. - When `gawk' calls `XXX_take_control_of()', it should fill in the -other fields, as appropriate, except for `fp', which it should just use -normally. + When `gawk' calls `XXX_take_control_of()', that function should fill +in the other fields, as appropriate, except for `fp', which it should +just use normally. You register your output wrapper with the following function: @@ -22787,8 +22790,8 @@ structures as described earlier. respectively. These structures were described earlier. `awk_const struct two_way_processor *awk_const next;' - This is for use by `gawk'; therefore they are marked `awk_const' - so that the extension cannot modify them. + This is for use by `gawk'; therefore it is marked `awk_const' so + that the extension cannot modify it. As with the input parser and output processor, you provide "yes I can take this" and "take over for this" functions, @@ -22957,7 +22960,7 @@ was discussed earlier, in *note General Data Types::. `awk_bool_t sym_update_scalar(awk_scalar_t cookie, awk_value_t *value);' Update the value associated with a scalar cookie. Return false if - the new value is not one of `AWK_STRING' or `AWK_NUMBER'. Here + the new value is not of type `AWK_STRING' or `AWK_NUMBER'. Here too, the built-in variables may not be updated. It is not obvious at first glance how to work with scalar cookies or @@ -23072,9 +23075,10 @@ follows: `awk_bool_t create_value(awk_value_t *value, awk_value_cookie_t *result);' Create a cached string or numeric value from `value' for efficient - later assignment. Only `AWK_NUMBER' and `AWK_STRING' values are - allowed. Any other type is rejected. While `AWK_UNDEFINED' could - be allowed, doing so would result in inferior performance. + later assignment. Only values of type `AWK_NUMBER' and + `AWK_STRING' are allowed. Any other type is rejected. While + `AWK_UNDEFINED' could be allowed, doing so would result in + inferior performance. `awk_bool_t release_value(awk_value_cookie_t vc);' Release the memory associated with a value cookie obtained from @@ -23128,11 +23132,11 @@ if `awk' code assigns a new value to `VAR1', are all the others be changed too?" That's a great question. The answer is that no, it's not a problem. -Internally, `gawk' uses reference-counted strings. This means that many -variables can share the same string value, and `gawk' keeps track of -the usage. When a variable's value changes, `gawk' simply decrements -the reference count on the old value and updates the variable to use -the new value. +Internally, `gawk' uses "reference-counted strings". This means that +many variables can share the same string value, and `gawk' keeps track +of the usage. When a variable's value changes, `gawk' simply +decrements the reference count on the old value and updates the +variable to use the new value. Finally, as part of your clean up action (*note Exit Callback Functions::) you should release any cached values that you created, @@ -23275,7 +23279,7 @@ The following functions relate to individual array elements. ` const awk_value_t *const value);' In the array represented by `a_cookie', create or modify the element whose index is given by `index'. The `ARGV' and `ENVIRON' - arrays may not be changed. + arrays may not be changed, although the `PROCINFO' array can be. `awk_bool_t set_array_element_by_elem(awk_array_t a_cookie,' ` awk_element_t element);' @@ -23513,8 +23517,8 @@ code: Thus, the correct way to build an array is to work "top down." Create the array, and immediately install it in `gawk''s symbol table using `sym_update()', or install it as an element in a - previously existing array using `set_element()'. We show example - code shortly. + previously existing array using `set_array_element()'. We show + example code shortly. 2. Due to gawk internals, after using `sym_update()' to install an array into `gawk', you have to retrieve the array cookie from the @@ -23704,13 +23708,15 @@ The API provides access to several variables that describe whether the corresponding command-line options were enabled when `gawk' was invoked. The variables are: +`do_debug' + This variable is true if `gawk' was invoked with `--debug' option. + `do_lint' This variable is true if `gawk' was invoked with `--lint' option (*note Options::). -`do_traditional' - This variable is true if `gawk' was invoked with `--traditional' - option. +`do_mpfr' + This variable is true if `gawk' was invoked with `--bignum' option. `do_profile' This variable is true if `gawk' was invoked with `--profile' @@ -23720,11 +23726,9 @@ invoked. The variables are: This variable is true if `gawk' was invoked with `--sandbox' option. -`do_debug' - This variable is true if `gawk' was invoked with `--debug' option. - -`do_mpfr' - This variable is true if `gawk' was invoked with `--bignum' option. +`do_traditional' + This variable is true if `gawk' was invoked with `--traditional' + option. The value of `do_lint' can change if `awk' code modifies the `LINT' built-in variable (*note Built-in Variables::). The others should not @@ -24324,7 +24328,9 @@ for loading each function into `gawk': static awk_ext_func_t func_table[] = { { "chdir", do_chdir, 1 }, { "stat", do_stat, 2 }, + #ifndef __MINGW32__ { "fts", do_fts, 3 }, + #endif }; Each extension must have a routine named `dl_load()' to load @@ -24484,52 +24490,36 @@ follows: The usage is: successful, `stat()' fills the `statdata' array with information retrieved from the filesystem, as follows: - `statdata["name"]' The name of the file. - `statdata["dev"]' Corresponds to the `st_dev' field in - the `struct stat'. - `statdata["ino"]' Corresponds to the `st_ino' field in - the `struct stat'. - `statdata["mode"]' Corresponds to the `st_mode' field in - the `struct stat'. - `statdata["nlink"]' Corresponds to the `st_nlink' field in - the `struct stat'. - `statdata["uid"]' Corresponds to the `st_uid' field in - the `struct stat'. - `statdata["gid"]' Corresponds to the `st_gid' field in - the `struct stat'. - `statdata["size"]' Corresponds to the `st_size' field in - the `struct stat'. - `statdata["atime"]' Corresponds to the `st_atime' field in - the `struct stat'. - `statdata["mtime"]' Corresponds to the `st_mtime' field in - the `struct stat'. - `statdata["ctime"]' Corresponds to the `st_ctime' field in - the `struct stat'. - `statdata["rdev"]' Corresponds to the `st_rdev' field in - the `struct stat'. This element is - only present for device files. - `statdata["major"]' Corresponds to the `st_major' field in - the `struct stat'. This element is - only present for device files. - `statdata["minor"]' Corresponds to the `st_minor' field in - the `struct stat'. This element is - only present for device files. - `statdata["blksize"]' Corresponds to the `st_blksize' field - in the `struct stat', if this field is - present on your system. (It is present - on all modern systems that we know of.) - `statdata["pmode"]' A human-readable version of the mode - value, such as printed by `ls'. For - example, `"-rwxr-xr-x"'. - `statdata["linkval"]' If the named file is a symbolic link, - this element will exist and its value - is the value of the symbolic link - (where the symbolic link points to). - `statdata["type"]' The type of the file as a string. One - of `"file"', `"blockdev"', `"chardev"', - `"directory"', `"socket"', `"fifo"', - `"symlink"', `"door"', or `"unknown"'. - Not all systems support all file types. + Subscript Field in `struct stat' File type + ------------------------------------------------------------ + `"name"' The file name All + `"dev"' `st_dev' All + `"ino"' `st_ino' All + `"mode"' `st_mode' All + `"nlink"' `st_nlink' All + `"uid"' `st_uid' All + `"gid"' `st_gid' All + `"size"' `st_size' All + `"atime"' `st_atime' All + `"mtime"' `st_mtime' All + `"ctime"' `st_ctime' All + `"rdev"' `st_rdev' Device files + `"major"' `st_major' Device files + `"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"' + `"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. `flags = or(FTS_PHYSICAL, ...)' `result = fts(pathlist, flags, filedata)' @@ -24674,18 +24664,14 @@ constant (`FNM_NOMATCH'), and an array of flag values named `FNM'. The flags are follows: -`FNM["CASEFOLD"]' Corresponds to the `FNM_CASEFOLD' flag as defined in - `fnmatch()'. -`FNM["FILE_NAME"]' Corresponds to the `FNM_FILE_NAME' flag as defined - in `fnmatch()'. -`FNM["LEADING_DIR"]' Corresponds to the `FNM_LEADING_DIR' flag as defined - in `fnmatch()'. -`FNM["NOESCAPE"]' Corresponds to the `FNM_NOESCAPE' flag as defined in - `fnmatch()'. -`FNM["PATHNAME"]' Corresponds to the `FNM_PATHNAME' flag as defined in - `fnmatch()'. -`FNM["PERIOD"]' Corresponds to the `FNM_PERIOD' flag as defined in - `fnmatch()'. +Array element Corresponding lag defined by `fnmatch()' +-------------------------------------------------------------------------- +`FNM["CASEFOLD"]' `FNM_CASEFOLD' +`FNM["FILE_NAME"]' `FNM_FILE_NAME' +`FNM["LEADING_DIR"]'`FNM_LEADING_DIR' +`FNM["NOESCAPE"]' `FNM_NOESCAPE' +`FNM["PATHNAME"]' `FNM_PATHNAME' +`FNM["PERIOD"]' `FNM_PERIOD' Here is an example: @@ -24826,7 +24812,8 @@ returned as a record. number and the filename, 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 -indicating the type of the file: +indicating the type of the file. The letters are file types are shown +in *note table-readdir-file-types::. Letter File Type -------------------------------------------------------------------------- @@ -24839,6 +24826,8 @@ Letter File Type `s' Socket `u' Anything else (unknown) +Table 16.2: File types returned by `readdir()' + On systems without the file type information, the third field is always `u'. @@ -24870,10 +24859,10 @@ unwary. Here is an example: BEGIN { REVOUT = 1 - print "hello, world" > "/dev/stdout" + print "don't panic" > "/dev/stdout" } - The output from this program is: `dlrow ,olleh'. + 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 @@ -24891,12 +24880,14 @@ example shows how to use it: BEGIN { cmd = "/magic/mirror" - print "hello, world" |& cmd + print "don't panic" |& cmd cmd |& getline result print result close(cmd) } + The output from this program is: `cinap t'nod'. +  File: gawk.info, Node: Extension Sample Read write array, Next: Extension Sample Readfile, Prev: Extension Sample Rev2way, Up: Extension Samples @@ -24908,8 +24899,8 @@ The `rwarray' extension adds two functions, named `writea()' and `ret = writea(file, array)' This function takes a string argument, which is the name of the - file to which dump the array, and the array itself as the second - argument. `writea()' understands multidimensional arrays. It + file to which to dump the array, and the array itself as the + second argument. `writea()' understands arrays of arrays. It returns one on success, or zero upon failure. `ret = reada(file, array)' @@ -24992,9 +24983,8 @@ File: gawk.info, Node: Extension Sample Time, Prev: Extension Sample API Tests 16.7.12 Extension Time Functions -------------------------------- -These functions can be used either by invoking `gawk' with a -command-line argument of `-l time' or by inserting `@load "time"' in -your script. +The `time' extension adds two functions, named `gettimeofday()' and +`sleep()', as follows: `@load "time"' This is how you load the extension. @@ -25006,7 +24996,7 @@ your script. have sub-second precision, but the actual precision may vary based on the platform. If the standard C `gettimeofday()' system call is available on this platform, then it simply returns the value. - Otherwise, if on Windows, it tries to use + Otherwise, if on MS-Windows, it tries to use `GetSystemTimeAsFileTime()'. `result = sleep(SECONDS)' @@ -31594,7 +31584,7 @@ Index * FSF (Free Software Foundation) <2>: Getting. (line 10) * FSF (Free Software Foundation): Manual History. (line 6) * fts() extension function: Extension Sample File Functions. - (line 77) + (line 61) * FUNCTAB array: Auto-set. (line 115) * function calls: Function Calls. (line 6) * function calls, indirect: Indirect Calls. (line 6) @@ -31786,7 +31776,7 @@ Index * gettext library, locale categories: Explaining gettext. (line 81) * gettext() function (C library): Explaining gettext. (line 63) * gettimeofday() extension function: Extension Sample Time. - (line 13) + (line 12) * git utility <1>: Adding Code. (line 111) * git utility <2>: Accessing The Source. (line 10) @@ -31849,7 +31839,7 @@ Index * i debugger command (alias for info): Debugger Info. (line 13) * id utility: Id Program. (line 6) * id.awk program: Id Program. (line 30) -* IEEE-754 format: Floating-point Representation. +* IEEE 754 format: Floating-point Representation. (line 6) * if statement: If Statement. (line 6) * if statement, actions, changing: Ranges. (line 25) @@ -32835,7 +32825,7 @@ Index * Skywalker, Luke: Undocumented. (line 6) * sleep utility: Alarm Program. (line 111) * sleep() extension function: Extension Sample Time. - (line 23) + (line 22) * Solaris, POSIX-compliant awk: Other Versions. (line 96) * sort array: String Functions. (line 42) * sort array indices: String Functions. (line 42) @@ -33589,164 +33579,165 @@ Node: String Conversion Precision833417 Ref: String Conversion Precision-Footnote-1835122 Node: Unexpected Results835231 Node: POSIX Floating Point Problems837384 -Ref: POSIX Floating Point Problems-Footnote-1841209 -Node: Integer Programming841247 -Node: Floating-point Programming842986 -Ref: Floating-point Programming-Footnote-1849317 -Ref: Floating-point Programming-Footnote-2849587 -Node: Floating-point Representation849851 -Node: Floating-point Context851016 -Ref: table-ieee-formats851855 -Node: Rounding Mode853239 -Ref: table-rounding-modes853718 -Ref: Rounding Mode-Footnote-1856733 -Node: Gawk and MPFR856912 -Node: Arbitrary Precision Floats858321 -Ref: Arbitrary Precision Floats-Footnote-1860764 -Node: Setting Precision861080 -Ref: table-predefined-precision-strings861766 -Node: Setting Rounding Mode863911 -Ref: table-gawk-rounding-modes864315 -Node: Floating-point Constants865502 -Node: Changing Precision866931 -Ref: Changing Precision-Footnote-1868328 -Node: Exact Arithmetic868502 -Node: Arbitrary Precision Integers871640 -Ref: Arbitrary Precision Integers-Footnote-1874655 -Node: Dynamic Extensions874802 -Node: Extension Intro876260 -Node: Plugin License877525 -Node: Extension Mechanism Outline878210 -Ref: load-extension878627 -Ref: load-new-function880105 -Ref: call-new-function881100 -Node: Extension API Description883115 -Node: Extension API Functions Introduction884402 -Node: General Data Types889329 -Ref: General Data Types-Footnote-1895024 -Node: Requesting Values895323 -Ref: table-value-types-returned896060 -Node: Memory Allocation Functions897014 -Ref: Memory Allocation Functions-Footnote-1899760 -Node: Constructor Functions899856 -Node: Registration Functions901614 -Node: Extension Functions902299 -Node: Exit Callback Functions904601 -Node: Extension Version String905850 -Node: Input Parsers906500 -Node: Output Wrappers916257 -Node: Two-way processors920767 -Node: Printing Messages922975 -Ref: Printing Messages-Footnote-1924052 -Node: Updating `ERRNO'924204 -Node: Accessing Parameters924943 -Node: Symbol Table Access926173 -Node: Symbol table by name926687 -Node: Symbol table by cookie928663 -Ref: Symbol table by cookie-Footnote-1932795 -Node: Cached values932858 -Ref: Cached values-Footnote-1936348 -Node: Array Manipulation936439 -Ref: Array Manipulation-Footnote-1937537 -Node: Array Data Types937576 -Ref: Array Data Types-Footnote-1940279 -Node: Array Functions940371 -Node: Flattening Arrays944207 -Node: Creating Arrays951059 -Node: Extension API Variables955784 -Node: Extension Versioning956420 -Node: Extension API Informational Variables958321 -Node: Extension API Boilerplate959407 -Node: Finding Extensions963211 -Node: Extension Example963771 -Node: Internal File Description964501 -Node: Internal File Ops968592 -Ref: Internal File Ops-Footnote-1980101 -Node: Using Internal File Ops980241 -Ref: Using Internal File Ops-Footnote-1982588 -Node: Extension Samples982854 -Node: Extension Sample File Functions984378 -Node: Extension Sample Fnmatch992865 -Node: Extension Sample Fork994634 -Node: Extension Sample Inplace995847 -Node: Extension Sample Ord997625 -Node: Extension Sample Readdir998461 -Node: Extension Sample Revout999993 -Node: Extension Sample Rev2way1000586 -Node: Extension Sample Read write array1001276 -Node: Extension Sample Readfile1003159 -Node: Extension Sample API Tests1004259 -Node: Extension Sample Time1004784 -Node: gawkextlib1006148 -Node: Language History1008929 -Node: V7/SVR3.11010522 -Node: SVR41012842 -Node: POSIX1014284 -Node: BTL1015670 -Node: POSIX/GNU1016404 -Node: Feature History1022003 -Node: Common Extensions1034979 -Node: Ranges and Locales1036291 -Ref: Ranges and Locales-Footnote-11040908 -Ref: Ranges and Locales-Footnote-21040935 -Ref: Ranges and Locales-Footnote-31041169 -Node: Contributors1041390 -Node: Installation1046771 -Node: Gawk Distribution1047665 -Node: Getting1048149 -Node: Extracting1048975 -Node: Distribution contents1050667 -Node: Unix Installation1056388 -Node: Quick Installation1057005 -Node: Additional Configuration Options1059451 -Node: Configuration Philosophy1061187 -Node: Non-Unix Installation1063541 -Node: PC Installation1063999 -Node: PC Binary Installation1065310 -Node: PC Compiling1067158 -Node: PC Testing1070118 -Node: PC Using1071294 -Node: Cygwin1075462 -Node: MSYS1076271 -Node: VMS Installation1076785 -Node: VMS Compilation1077581 -Ref: VMS Compilation-Footnote-11078833 -Node: VMS Dynamic Extensions1078891 -Node: VMS Installation Details1080264 -Node: VMS Running1082515 -Node: VMS GNV1085349 -Node: VMS Old Gawk1086072 -Node: Bugs1086542 -Node: Other Versions1090460 -Node: Notes1096544 -Node: Compatibility Mode1097344 -Node: Additions1098127 -Node: Accessing The Source1099054 -Node: Adding Code1100494 -Node: New Ports1106539 -Node: Derived Files1110674 -Ref: Derived Files-Footnote-11115995 -Ref: Derived Files-Footnote-21116029 -Ref: Derived Files-Footnote-31116629 -Node: Future Extensions1116727 -Node: Implementation Limitations1117310 -Node: Extension Design1118558 -Node: Old Extension Problems1119712 -Ref: Old Extension Problems-Footnote-11121220 -Node: Extension New Mechanism Goals1121277 -Ref: Extension New Mechanism Goals-Footnote-11124642 -Node: Extension Other Design Decisions1124828 -Node: Extension Future Growth1126934 -Node: Old Extension Mechanism1127770 -Node: Basic Concepts1129510 -Node: Basic High Level1130191 -Ref: figure-general-flow1130463 -Ref: figure-process-flow1131062 -Ref: Basic High Level-Footnote-11134291 -Node: Basic Data Typing1134476 -Node: Glossary1137831 -Node: Copying1163062 -Node: GNU Free Documentation License1200618 -Node: Index1225754 +Ref: POSIX Floating Point Problems-Footnote-1841205 +Node: Integer Programming841243 +Node: Floating-point Programming843054 +Ref: Floating-point Programming-Footnote-1849382 +Ref: Floating-point Programming-Footnote-2849652 +Node: Floating-point Representation849916 +Node: Floating-point Context851081 +Ref: table-ieee-formats851920 +Node: Rounding Mode853304 +Ref: table-rounding-modes853783 +Ref: Rounding Mode-Footnote-1856798 +Node: Gawk and MPFR856977 +Node: Arbitrary Precision Floats858386 +Ref: Arbitrary Precision Floats-Footnote-1860829 +Node: Setting Precision861150 +Ref: table-predefined-precision-strings861834 +Node: Setting Rounding Mode863979 +Ref: table-gawk-rounding-modes864383 +Node: Floating-point Constants865570 +Node: Changing Precision867022 +Ref: Changing Precision-Footnote-1868414 +Node: Exact Arithmetic868588 +Node: Arbitrary Precision Integers871722 +Ref: Arbitrary Precision Integers-Footnote-1874737 +Node: Dynamic Extensions874884 +Node: Extension Intro876342 +Node: Plugin License877607 +Node: Extension Mechanism Outline878292 +Ref: load-extension878709 +Ref: load-new-function880187 +Ref: call-new-function881182 +Node: Extension API Description883166 +Node: Extension API Functions Introduction884616 +Node: General Data Types889482 +Ref: General Data Types-Footnote-1895175 +Node: Requesting Values895474 +Ref: table-value-types-returned896211 +Node: Memory Allocation Functions897165 +Ref: Memory Allocation Functions-Footnote-1899911 +Node: Constructor Functions900007 +Node: Registration Functions901765 +Node: Extension Functions902450 +Node: Exit Callback Functions904752 +Node: Extension Version String906001 +Node: Input Parsers906651 +Node: Output Wrappers916454 +Node: Two-way processors920970 +Node: Printing Messages923173 +Ref: Printing Messages-Footnote-1924250 +Node: Updating `ERRNO'924402 +Node: Accessing Parameters925141 +Node: Symbol Table Access926371 +Node: Symbol table by name926885 +Node: Symbol table by cookie928861 +Ref: Symbol table by cookie-Footnote-1932994 +Node: Cached values933057 +Ref: Cached values-Footnote-1936562 +Node: Array Manipulation936653 +Ref: Array Manipulation-Footnote-1937751 +Node: Array Data Types937790 +Ref: Array Data Types-Footnote-1940493 +Node: Array Functions940585 +Node: Flattening Arrays944459 +Node: Creating Arrays951311 +Node: Extension API Variables956042 +Node: Extension Versioning956678 +Node: Extension API Informational Variables958579 +Node: Extension API Boilerplate959665 +Node: Finding Extensions963469 +Node: Extension Example964029 +Node: Internal File Description964759 +Node: Internal File Ops968850 +Ref: Internal File Ops-Footnote-1980396 +Node: Using Internal File Ops980536 +Ref: Using Internal File Ops-Footnote-1982883 +Node: Extension Samples983149 +Node: Extension Sample File Functions984673 +Node: Extension Sample Fnmatch992240 +Node: Extension Sample Fork993719 +Node: Extension Sample Inplace994932 +Node: Extension Sample Ord996710 +Node: Extension Sample Readdir997546 +Ref: table-readdir-file-types998401 +Node: Extension Sample Revout999200 +Node: Extension Sample Rev2way999791 +Node: Extension Sample Read write array1000532 +Node: Extension Sample Readfile1002411 +Node: Extension Sample API Tests1003511 +Node: Extension Sample Time1004036 +Node: gawkextlib1005351 +Node: Language History1008132 +Node: V7/SVR3.11009725 +Node: SVR41012045 +Node: POSIX1013487 +Node: BTL1014873 +Node: POSIX/GNU1015607 +Node: Feature History1021206 +Node: Common Extensions1034182 +Node: Ranges and Locales1035494 +Ref: Ranges and Locales-Footnote-11040111 +Ref: Ranges and Locales-Footnote-21040138 +Ref: Ranges and Locales-Footnote-31040372 +Node: Contributors1040593 +Node: Installation1045974 +Node: Gawk Distribution1046868 +Node: Getting1047352 +Node: Extracting1048178 +Node: Distribution contents1049870 +Node: Unix Installation1055591 +Node: Quick Installation1056208 +Node: Additional Configuration Options1058654 +Node: Configuration Philosophy1060390 +Node: Non-Unix Installation1062744 +Node: PC Installation1063202 +Node: PC Binary Installation1064513 +Node: PC Compiling1066361 +Node: PC Testing1069321 +Node: PC Using1070497 +Node: Cygwin1074665 +Node: MSYS1075474 +Node: VMS Installation1075988 +Node: VMS Compilation1076784 +Ref: VMS Compilation-Footnote-11078036 +Node: VMS Dynamic Extensions1078094 +Node: VMS Installation Details1079467 +Node: VMS Running1081718 +Node: VMS GNV1084552 +Node: VMS Old Gawk1085275 +Node: Bugs1085745 +Node: Other Versions1089663 +Node: Notes1095747 +Node: Compatibility Mode1096547 +Node: Additions1097330 +Node: Accessing The Source1098257 +Node: Adding Code1099697 +Node: New Ports1105742 +Node: Derived Files1109877 +Ref: Derived Files-Footnote-11115198 +Ref: Derived Files-Footnote-21115232 +Ref: Derived Files-Footnote-31115832 +Node: Future Extensions1115930 +Node: Implementation Limitations1116513 +Node: Extension Design1117761 +Node: Old Extension Problems1118915 +Ref: Old Extension Problems-Footnote-11120423 +Node: Extension New Mechanism Goals1120480 +Ref: Extension New Mechanism Goals-Footnote-11123845 +Node: Extension Other Design Decisions1124031 +Node: Extension Future Growth1126137 +Node: Old Extension Mechanism1126973 +Node: Basic Concepts1128713 +Node: Basic High Level1129394 +Ref: figure-general-flow1129666 +Ref: figure-process-flow1130265 +Ref: Basic High Level-Footnote-11133494 +Node: Basic Data Typing1133679 +Node: Glossary1137034 +Node: Copying1162265 +Node: GNU Free Documentation License1199821 +Node: Index1224957  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 1b8d003f..eeacd2c6 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -13954,7 +13954,7 @@ The working precision of arbitrary precision floating-point numbers, @item ROUNDMODE # The rounding mode to use for arbitrary precision arithmetic on numbers, by default @code{"N"} (@samp{roundTiesToEven} in -the IEEE-754 standard; @pxref{Setting Rounding Mode}). +the IEEE 754 standard; @pxref{Setting Rounding Mode}). @cindex @code{RS} variable @cindex separators, for records @@ -29198,7 +29198,7 @@ $ @kbd{echo 0xDeadBeef | gawk '@{ print $1 + 0 @}'} @print{} 0 @end example -@command{gawk} does ignore case in the four special values. +@command{gawk} ignores case in the four special values. Thus @samp{+nan} and @samp{+NaN} are the same. @end itemize @@ -29207,13 +29207,15 @@ Thus @samp{+nan} and @samp{+NaN} are the same. As has been mentioned already, @command{awk} uses hardware double precision with 64-bit IEEE binary floating-point representation -for numbers on most systems. A large integer like 9,007,199,254,740,997 +for numbers on most systems. +A large integer like 9,007,199,254,740,997 has a binary representation that, although finite, is more than 53 bits long; it must also be rounded to 53 bits. +(The details are discussed in @ref{Floating-point Representation}.) The biggest integer that can be stored in a C @code{double} is usually the same as the largest possible value of a @code{double}. If your system @code{double} is an IEEE 64-bit @code{double}, this largest possible value is an integer and -can be represented precisely. What more should one know about integers? +can be represented precisely. What more should you know about integers? If you want to know what is the largest integer, such that it and all smaller integers can be stored in 64-bit doubles without losing precision, @@ -29329,7 +29331,7 @@ floating-point, you can set the precision before starting a computation, but then you cannot be sure of the number of significant decimal places in the final result. -Sometimes, before you start to write any code, you should think more +So, before you start to write any code, you should think more about what you really want and what's really happening. Consider the two numbers in the following example: @@ -29360,7 +29362,7 @@ Usually this is a format string like @code{"%.15g"}, which when used in the previous example, produces an output identical to the input. Because the underlying representation can be a little bit off from the exact value, -comparing floating-point values to see if they are equal is generally not a good idea. +comparing floating-point values to see if they are exactly equal is generally a bad idea. Here is an example where it does not work like you expect: @example @@ -29427,7 +29429,7 @@ in the earlier example can be enhanced by using the following simple algebraic transformation: @example -(sqrt(x * x + 1) - 1) / x = x / (sqrt(x * x + 1) + 1) +(sqrt(x * x + 1) - 1) / x @equiv{} x / (sqrt(x * x + 1) + 1) @end example @noindent @@ -29467,11 +29469,11 @@ implies better precision than is actually the case. @node Floating-point Representation @subsection Binary Floating-point Representation -@cindex IEEE-754 format +@cindex IEEE 754 format Although floating-point representations vary from machine to machine, the most commonly encountered representation is that defined by the -IEEE 754 Standard. An IEEE-754 format value has three components: +IEEE 754 Standard. An IEEE 754 format value has three components: @itemize @bullet @item @@ -29499,12 +29501,12 @@ number is then s ⋅ 2e. @c @end docbook The first bit of a non-zero binary significand -is always one, so the significand in an IEEE-754 format only includes the +is always one, so the significand in an IEEE 754 format only includes the fractional part, leaving the leading one implicit. The significand is stored in @dfn{normalized} format, which means that the first bit is always a one. -Three of the standard IEEE-754 types are 32-bit single precision, +Three of the standard IEEE 754 types are 32-bit single precision, 64-bit double precision and 128-bit quadruple precision. The standard also specifies extended precision formats to allow greater precisions and larger exponent ranges. @@ -29535,7 +29537,7 @@ The rounding mode of the context. @end table @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 Context Values} @@ -29554,10 +29556,10 @@ one extra bit of significand. A floating-point context can also determine which signals are treated as exceptions, and can set rules for arithmetic with special values. -Please consult the IEEE-754 standard or other resources for details. +Please consult the IEEE 754 standard or other resources for details. @command{gawk} ordinarily uses the hardware double precision -representation for numbers. On most systems, this is IEEE-754 +representation for numbers. On most systems, this is IEEE 754 floating-point format, corresponding to 64-bit binary with 53 bits of precision. @@ -29567,7 +29569,7 @@ the result from an arithmetic operation to be a number smaller than the smallest nonzero normalized number. Such numbers do not have as many significant digits as normal numbers, and are called @dfn{denormals} or @dfn{subnormals}. The alternative, simply returning a zero, -is called @dfn{flush to zero}. The basic IEEE-754 binary formats +is called @dfn{flush to zero}. The basic IEEE 754 binary formats support subnormal numbers. @end quotation @@ -29579,7 +29581,7 @@ The @dfn{rounding mode} specifies the behavior for the results of numerical operations when discarding extra precision. Each rounding mode indicates how the least significant returned digit of a rounded result is to be calculated. -@ref{table-rounding-modes} lists the IEEE-754 defined +@ref{table-rounding-modes} lists the IEEE 754 defined rounding modes: @float Table,table-rounding-modes @@ -29622,7 +29624,7 @@ BEGIN @{ @noindent produces the following output when run on the author's system:@footnote{It is possible for the output to be completely different if the -C library in your system does not use the IEEE-754 even-rounding +C library in your system does not use the IEEE 754 even-rounding rule to round halfway cases for @code{printf}.} @example @@ -29641,7 +29643,7 @@ The theory behind the rounding mode @code{roundTiesToEven} is that it more or less evenly distributes upward and downward rounds of exact halves, which might cause any round-off error to cancel itself out. This is the default rounding mode used -in IEEE-754 computing functions and operators. +in IEEE 754 computing functions and operators. The other rounding modes are rarely used. Round toward positive infinity (@code{roundTowardPositive}) @@ -29733,10 +29735,10 @@ to follow. The default working precision for arbitrary precision floating-point values is 53 bits, and the default value for @code{ROUNDMODE} is @code{"N"}, -which selects the IEEE-754 @code{roundTiesToEven} rounding mode +which selects the IEEE 754 @code{roundTiesToEven} rounding mode (@pxref{Rounding Mode}).@footnote{The default precision is 53 bits, since according to the MPFR documentation, -the library should be able to exactly reproduce all computations with +the library should be able to exactly reproduce all computations done with double-precision machine floating-point numbers (@code{double} type in C), except the default exponent range is much wider and subnormal numbers are not implemented.} @@ -29758,7 +29760,7 @@ MPFR does not implement subnormal numbers by default, and this behavior cannot be changed in @command{gawk}. @quotation NOTE -When emulating an IEEE-754 format (@pxref{Setting Precision}), +When emulating an IEEE 754 format (@pxref{Setting Precision}), @command{gawk} internally adjusts the exponent range to the value defined for the format and also performs computations needed for gradual underflow (subnormal numbers). @@ -29788,16 +29790,16 @@ your program. @command{gawk} uses a global working precision; it does not keep track of the precision or accuracy of individual numbers. Performing an arithmetic operation or calling a built-in function rounds the result to the current -working precision. The default working precision is 53 bits, which can be -modified using the built-in variable @code{PREC}. You can also set the -value to one of the pre-defined case-insensitive strings +working precision. The default working precision is 53 bits, which you can +modify using the built-in variable @code{PREC}. You can also set the +value to one of the predefined case-insensitive strings shown in @ref{table-predefined-precision-strings}, -to emulate an IEEE-754 binary format. +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. @@ -29886,8 +29888,8 @@ rounding modes is shown in @ref{table-gawk-rounding-modes}. @end float @code{ROUNDMODE} has the default value @code{"N"}, -which selects the IEEE-754 rounding mode @code{roundTiesToEven}. -In @ref{table-gawk-rounding-modes}, @code{"A"} is listed to select the IEEE-754 mode +which selects the IEEE 754 rounding mode @code{roundTiesToEven}. +In @ref{table-gawk-rounding-modes}, @code{"A"} is listed to select the IEEE 754 mode @code{roundTiesToAway}. This is only available if your version of the MPFR library supports it; otherwise setting @code{ROUNDMODE} to this value has no effect. @xref{Rounding Mode}, @@ -29906,8 +29908,8 @@ $ @kbd{gawk -M -v ROUNDMODE="Z" 'BEGIN @{ printf("%.2f\n", 1.378) @}'} @cindex constants, floating-point Be wary of floating-point constants! When reading a floating-point constant -from program source code, @command{gawk} uses the default precision, -unless overridden +from program source code, @command{gawk} uses the default precision (that +of a C @code{double}), unless overridden by an assignment to the special variable @code{PREC} on the command line, to store it internally as a MPFR number. Changing the precision using @code{PREC} in the program text does @@ -29954,7 +29956,7 @@ Electronic Transactions on Numerical Analysis. Volume 28, pp. 168-173, 2008.} @command{gawk} does not implicitly modify the precision of any previously computed results when the working precision is changed with an assignment to @code{PREC}. The precision of a number is always the one that was -used at the time of its creation, and there is no way for the user +used at the time of its creation, and there is no way for you to explicitly change it afterwards. However, since the result of a floating-point arithmetic operation is always an arbitrary precision floating-point value---with a precision set by the value of @code{PREC}---one of the @@ -30019,7 +30021,7 @@ a straight test for equality may not work. So, don't assume that floating-point values can be compared for equality. You should also exercise caution when using other forms of comparisons. -The standard way to compare between floating-point numbers is to determine +The standard way to compare two floating-point numbers is to determine how much error (or @dfn{tolerance}) you will allow in a comparison and check to see if one value is within this error range of the other. @@ -30344,9 +30346,9 @@ The @code{do_@var{xxx}()} function, in turn, then uses the function pointers in the API @code{struct} to do its work, such as updating variables or arrays, printing messages, setting @code{ERRNO}, and so on. -Convenience macros in the @file{gawkapi.h} header file make calling -through the function pointers look like regular function calls so that -extension code is quite readable and understandable. +Convenience macros make calling through the function pointers look +like regular function calls so that extension code is quite readable +and understandable. Although all of this sounds somewhat complicated, the result is that extension code is quite straightforward to write and to read. You can @@ -30377,6 +30379,9 @@ happen, but we all know how @emph{that} goes.) @section API Description @cindex extension API +C or C++ code for an extension must include the header file +@file{gawkapi.h}, which declares the functions and defines the data +types used to communicate with @command{gawk}. This (rather large) @value{SECTION} describes the API in detail. @menu @@ -30478,6 +30483,7 @@ corresponding standard header file @emph{before} including @file{gawkapi.h}: @multitable {@code{memset()}, @code{memcpy()}} {@code{}} @headitem C Entity @tab Header File @item @code{EOF} @tab @code{} +@item Values for @code{errno} @tab @code{} @item @code{FILE} @tab @code{} @item @code{NULL} @tab @code{} @item @code{memcpy()} @tab @code{} @@ -30493,9 +30499,6 @@ is necessary in order to keep @file{gawkapi.h} clean, instead of becoming a portability hodge-podge as can be seen in some parts of the @command{gawk} source code. -To pass reasonable integer values for @code{ERRNO}, you will also need to -include @code{}. - @item The @file{gawkapi.h} file may be included more than once without ill effect. Doing so, however, is poor coding practice. @@ -30519,7 +30522,7 @@ and is managed by @command{gawk} from then on. The API defines several simple @code{struct}s that map values as seen from @command{awk}. A value can be a @code{double}, a string, or an array (as in multidimensional arrays, or when creating a new array). -String values maintain both pointer and length since embedded @code{NUL} +String values maintain both pointer and length since embedded @sc{nul} characters are allowed. @quotation NOTE @@ -30651,7 +30654,7 @@ Scalar values in @command{awk} are either numbers or strings. The indicates what is in the @code{union}. Representing numbers is easy---the API uses a C @code{double}. Strings -require more work. Since @command{gawk} allows embedded @code{NUL} bytes +require more work. Since @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. @@ -31148,8 +31151,9 @@ A pointer to your @code{@var{XXX}_can_take_file()} function. A pointer to your @code{@var{XXX}_take_control_of()} function. @item awk_const struct input_parser *awk_const next; -This pointer is used by @command{gawk}. -The extension cannot modify it. +This is for use by @command{gawk}; +therefore it is marked @code{awk_const} so that the extension cannot +modify it. @end table The steps are as follows: @@ -31196,7 +31200,7 @@ open the file, then @code{fd} will @emph{not} be equal to @code{INVALID_HANDLE}. Otherwise, it will. @item struct stat sbuf; -If file descriptor is valid, then @command{gawk} will have filled +If the file descriptor is valid, then @command{gawk} will have filled in this structure via a call to the @code{fstat()} system call. @end table @@ -31377,8 +31381,8 @@ as described below, and return true if successful, false otherwise. @item awk_const struct output_wrapper *awk_const next; This is for use by @command{gawk}; -therefore they are marked @code{awk_const} so that the extension cannot -modify them. +therefore it is marked @code{awk_const} so that the extension cannot +modify it. @end table The @code{awk_output_buf_t} structure looks like this: @@ -31440,7 +31444,7 @@ The @code{@var{XXX}_can_take_file()} function should make a decision based 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()}, it should fill +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 use normally. @@ -31494,8 +31498,8 @@ This function should fill in the @code{awk_input_buf_t} and @item awk_const struct two_way_processor *awk_const next; This is for use by @command{gawk}; -therefore they are marked @code{awk_const} so that the extension cannot -modify them. +therefore it is marked @code{awk_const} so that the extension cannot +modify it. @end table As with the input parser and output processor, you provide @@ -31661,7 +31665,7 @@ Return false if the value cannot be retrieved. @item awk_bool_t sym_update_scalar(awk_scalar_t cookie, awk_value_t *value); Update the value associated with a scalar cookie. Return false if -the new value is not one of @code{AWK_STRING} or @code{AWK_NUMBER}. +the new value is not of type @code{AWK_STRING} or @code{AWK_NUMBER}. Here too, the built-in variables may not be updated. @end table @@ -31779,7 +31783,7 @@ is what the routines in this section let you do. The functions are as follows: @item awk_bool_t create_value(awk_value_t *value, awk_value_cookie_t *result); Create a cached string or numeric value from @code{value} for efficient later assignment. -Only @code{AWK_NUMBER} and @code{AWK_STRING} values are allowed. Any other type +Only values of type @code{AWK_NUMBER} and @code{AWK_STRING} are allowed. Any other type is rejected. While @code{AWK_UNDEFINED} could be allowed, doing so would result in inferior performance. @@ -31840,7 +31844,7 @@ What happens if @command{awk} code assigns a new value to @code{VAR1}, are all the others be changed too?'' That's a great question. The answer is that no, it's not a problem. -Internally, @command{gawk} uses reference-counted strings. This means +Internally, @command{gawk} uses @dfn{reference-counted strings}. This means that many variables can share the same string value, and @command{gawk} keeps track of the usage. When a variable's value changes, @command{gawk} simply decrements the reference count on the old value and updates @@ -31972,7 +31976,8 @@ the string value of @code{index} must come from the API-provided functions @code @itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ const@ awk_value_t *const value); In the array represented by @code{a_cookie}, create or modify the element whose index is given by @code{index}. -The @code{ARGV} and @code{ENVIRON} arrays may not be changed. +The @code{ARGV} and @code{ENVIRON} arrays may not be changed, +although the @code{PROCINFO} array can be. @item awk_bool_t set_array_element_by_elem(awk_array_t a_cookie, @itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_element_t element); @@ -32243,7 +32248,7 @@ you must add the new array to its parent before adding any elements to it. Thus, the correct way to build an array is to work ``top down.'' Create the array, and immediately install it in @command{gawk}'s symbol table using @code{sym_update()}, or install it as an element in a previously -existing array using @code{set_element()}. We show example code shortly. +existing array using @code{set_array_element()}. We show example code shortly. @item Due to gawk internals, after using @code{sym_update()} to install an array @@ -32269,7 +32274,7 @@ of the array cookie after the call to @code{set_element()}. @end enumerate The following C code is a simple test extension to create an array -with two regular elements and with a subarray. The leading @samp{#include} +with two regular elements and with a subarray. The leading @code{#include} directives and boilerplate variable declarations are omitted for brevity. The first step is to create a new array and then install it in the symbol table: @@ -32495,12 +32500,15 @@ whether the corresponding command-line options were enabled when @command{gawk} was invoked. The variables are: @table @code +@item do_debug +This variable is true if @command{gawk} was invoked with @option{--debug} option. + @item do_lint This variable is true if @command{gawk} was invoked with @option{--lint} option (@pxref{Options}). -@item do_traditional -This variable is true if @command{gawk} was invoked with @option{--traditional} option. +@item do_mpfr +This variable is true if @command{gawk} was invoked with @option{--bignum} option. @item do_profile This variable is true if @command{gawk} was invoked with @option{--profile} option. @@ -32508,11 +32516,8 @@ This variable is true if @command{gawk} was invoked with @option{--profile} opti @item do_sandbox This variable is true if @command{gawk} was invoked with @option{--sandbox} option. -@item do_debug -This variable is true if @command{gawk} was invoked with @option{--debug} option. - -@item do_mpfr -This variable is true if @command{gawk} was invoked with @option{--bignum} option. +@item do_traditional +This variable is true if @command{gawk} was invoked with @option{--traditional} option. @end table The value of @code{do_lint} can change if @command{awk} code @@ -33196,7 +33201,9 @@ structures for loading each function into @command{gawk}: static awk_ext_func_t func_table[] = @{ @{ "chdir", do_chdir, 1 @}, @{ "stat", do_stat, 2 @}, +#ifndef __MINGW32__ @{ "fts", do_fts, 3 @}, +#endif @}; @end example @@ -33354,69 +33361,27 @@ In all cases, it clears the @code{statdata} array. When the call is successful, @code{stat()} fills the @code{statdata} array with information retrieved from the filesystem, as follows: -@c nested table -@multitable @columnfractions .25 .60 -@item @code{statdata["name"]} @tab -The name of the file. - -@item @code{statdata["dev"]} @tab -Corresponds to the @code{st_dev} field in the @code{struct stat}. - -@item @code{statdata["ino"]} @tab -Corresponds to the @code{st_ino} field in the @code{struct stat}. - -@item @code{statdata["mode"]} @tab -Corresponds to the @code{st_mode} field in the @code{struct stat}. - -@item @code{statdata["nlink"]} @tab -Corresponds to the @code{st_nlink} field in the @code{struct stat}. - -@item @code{statdata["uid"]} @tab -Corresponds to the @code{st_uid} field in the @code{struct stat}. - -@item @code{statdata["gid"]} @tab -Corresponds to the @code{st_gid} field in the @code{struct stat}. - -@item @code{statdata["size"]} @tab -Corresponds to the @code{st_size} field in the @code{struct stat}. - -@item @code{statdata["atime"]} @tab -Corresponds to the @code{st_atime} field in the @code{struct stat}. - -@item @code{statdata["mtime"]} @tab -Corresponds to the @code{st_mtime} field in the @code{struct stat}. - -@item @code{statdata["ctime"]} @tab -Corresponds to the @code{st_ctime} field in the @code{struct stat}. - -@item @code{statdata["rdev"]} @tab -Corresponds to the @code{st_rdev} field in the @code{struct stat}. -This element is only present for device files. - -@item @code{statdata["major"]} @tab -Corresponds to the @code{st_major} field in the @code{struct stat}. -This element is only present for device files. - -@item @code{statdata["minor"]} @tab -Corresponds to the @code{st_minor} field in the @code{struct stat}. -This element is only present for device files. - -@item @code{statdata["blksize"]} @tab -Corresponds to the @code{st_blksize} field in the @code{struct stat}, -if this field is present on your system. -(It is present on all modern systems that we know of.) - -@item @code{statdata["pmode"]} @tab -A human-readable version of the mode value, such as printed by -@command{ls}. For example, @code{"-rwxr-xr-x"}. - -@item @code{statdata["linkval"]} @tab -If the named file is a symbolic link, this element will exist -and its value is the value of the symbolic link (where the -symbolic link points to). - -@item @code{statdata["type"]} @tab -The type of the file as a string. One of +@multitable @columnfractions .15 .50 .20 +@headitem Subscript @tab Field in @code{struct stat} @tab File type +@item @code{"name"} @tab The file name @tab All +@item @code{"dev"} @tab @code{st_dev} @tab All +@item @code{"ino"} @tab @code{st_ino} @tab All +@item @code{"mode"} @tab @code{st_mode} @tab All +@item @code{"nlink"} @tab @code{st_nlink} @tab All +@item @code{"uid"} @tab @code{st_uid} @tab All +@item @code{"gid"} @tab @code{st_gid} @tab All +@item @code{"size"} @tab @code{st_size} @tab All +@item @code{"atime"} @tab @code{st_atime} @tab All +@item @code{"mtime"} @tab @code{st_mtime} @tab All +@item @code{"ctime"} @tab @code{st_ctime} @tab All +@item @code{"rdev"} @tab @code{st_rdev} @tab Device files +@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{"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 @code{"file"}, @code{"blockdev"}, @code{"chardev"}, @@ -33427,7 +33392,7 @@ The type of the file as a string. One of @code{"door"}, or @code{"unknown"}. -Not all systems support all file types. +Not all systems support all file types. @tab All @end multitable @cindex @code{fts()} extension function @@ -33586,23 +33551,13 @@ flags in the @code{FNM} array. The flags are follows: @multitable @columnfractions .25 .75 -@item @code{FNM["CASEFOLD"]} @tab -Corresponds to the @code{FNM_CASEFOLD} flag as defined in @code{fnmatch()}. - -@item @code{FNM["FILE_NAME"]} @tab -Corresponds to the @code{FNM_FILE_NAME} flag as defined in @code{fnmatch()}. - -@item @code{FNM["LEADING_DIR"]} @tab -Corresponds to the @code{FNM_LEADING_DIR} flag as defined in @code{fnmatch()}. - -@item @code{FNM["NOESCAPE"]} @tab -Corresponds to the @code{FNM_NOESCAPE} flag as defined in @code{fnmatch()}. - -@item @code{FNM["PATHNAME"]} @tab -Corresponds to the @code{FNM_PATHNAME} flag as defined in @code{fnmatch()}. - -@item @code{FNM["PERIOD"]} @tab -Corresponds to the @code{FNM_PERIOD} flag as defined in @code{fnmatch()}. +@headitem Array element @tab Corresponding lag defined by @code{fnmatch()} +@item @code{FNM["CASEFOLD"]} @tab @code{FNM_CASEFOLD} +@item @code{FNM["FILE_NAME"]} @tab @code{FNM_FILE_NAME} +@item @code{FNM["LEADING_DIR"]} @tab @code{FNM_LEADING_DIR} +@item @code{FNM["NOESCAPE"]} @tab @code{FNM_NOESCAPE} +@item @code{FNM["PATHNAME"]} @tab @code{FNM_PATHNAME} +@item @code{FNM["PERIOD"]} @tab @code{FNM_PERIOD} @end multitable Here is an example: @@ -33763,8 +33718,11 @@ The record consists of three fields. The first two are the inode number and the filename, 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 -indicating the type of the file: +indicating the type of the file. The letters are file types are shown +in @ref{table-readdir-file-types}. +@float Table,table-readdir-file-types +@caption{File types returned by @code{readdir()}} @multitable @columnfractions .1 .9 @headitem Letter @tab File Type @item @code{b} @tab Block device @@ -33776,6 +33734,7 @@ indicating the type of the file: @item @code{s} @tab Socket @item @code{u} @tab Anything else (unknown) @end multitable +@end float On systems without the file type information, the third field is always @samp{u}. @@ -33810,12 +33769,12 @@ Here is an example: BEGIN @{ REVOUT = 1 - print "hello, world" > "/dev/stdout" + print "don't panic" > "/dev/stdout" @} @end example The output from this program is: -@samp{dlrow ,olleh}. +@samp{cinap t'nod}. @node Extension Sample Rev2way @subsection Two-Way I/O Example @@ -33832,13 +33791,22 @@ The following example shows how to use it: BEGIN @{ cmd = "/magic/mirror" - print "hello, world" |& cmd + print "don't panic" |& cmd cmd |& getline result print result close(cmd) @} @end example +The output from this program +@ifnotinfo +also is: +@end ifnotinfo +@ifinfo +is: +@end ifinfo +@samp{cinap t'nod}. + @node Extension Sample Read write array @subsection Dumping and Restoring An Array @@ -33849,8 +33817,8 @@ named @code{writea()} and @code{reada()}, as follows: @cindex @code{writea()} extension function @item ret = writea(file, array) This function takes a string argument, which is the name of the file -to which dump the array, and the array itself as the second argument. -@code{writea()} understands multidimensional arrays. It returns one on +to which to dump the array, and the array itself as the second argument. +@code{writea()} understands arrays of arrays. It returns one on success, or zero upon failure. @cindex @code{reada()} extension function @@ -33935,9 +33903,8 @@ for more information. @node Extension Sample Time @subsection Extension Time Functions -These functions can be used either by invoking @command{gawk} -with a command-line argument of @samp{-l time} or by -inserting @samp{@@load "time"} in your script. +The @code{time} extension adds two functions, named @code{gettimeofday()} +and @code{sleep()}, as follows: @table @code @item @@load "time" @@ -33950,7 +33917,7 @@ floating point value. If the time is unavailable on this platform, return @minus{}1 and set @code{ERRNO}. The returned time should have sub-second precision, but the actual precision may vary based on the platform. If the standard C @code{gettimeofday()} system call is available on this -platform, then it simply returns the value. Otherwise, if on Windows, +platform, then it simply returns the value. Otherwise, if on MS-Windows, it tries to use @code{GetSystemTimeAsFileTime()}. @cindex @code{sleep()} extension function diff --git a/doc/gawktexi.in b/doc/gawktexi.in index c905e1d5..17d52797 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -13334,7 +13334,7 @@ The working precision of arbitrary precision floating-point numbers, @item ROUNDMODE # The rounding mode to use for arbitrary precision arithmetic on numbers, by default @code{"N"} (@samp{roundTiesToEven} in -the IEEE-754 standard; @pxref{Setting Rounding Mode}). +the IEEE 754 standard; @pxref{Setting Rounding Mode}). @cindex @code{RS} variable @cindex separators, for records @@ -28342,7 +28342,7 @@ $ @kbd{echo 0xDeadBeef | gawk '@{ print $1 + 0 @}'} @print{} 0 @end example -@command{gawk} does ignore case in the four special values. +@command{gawk} ignores case in the four special values. Thus @samp{+nan} and @samp{+NaN} are the same. @end itemize @@ -28351,13 +28351,15 @@ Thus @samp{+nan} and @samp{+NaN} are the same. As has been mentioned already, @command{awk} uses hardware double precision with 64-bit IEEE binary floating-point representation -for numbers on most systems. A large integer like 9,007,199,254,740,997 +for numbers on most systems. +A large integer like 9,007,199,254,740,997 has a binary representation that, although finite, is more than 53 bits long; it must also be rounded to 53 bits. +(The details are discussed in @ref{Floating-point Representation}.) The biggest integer that can be stored in a C @code{double} is usually the same as the largest possible value of a @code{double}. If your system @code{double} is an IEEE 64-bit @code{double}, this largest possible value is an integer and -can be represented precisely. What more should one know about integers? +can be represented precisely. What more should you know about integers? If you want to know what is the largest integer, such that it and all smaller integers can be stored in 64-bit doubles without losing precision, @@ -28473,7 +28475,7 @@ floating-point, you can set the precision before starting a computation, but then you cannot be sure of the number of significant decimal places in the final result. -Sometimes, before you start to write any code, you should think more +So, before you start to write any code, you should think more about what you really want and what's really happening. Consider the two numbers in the following example: @@ -28504,7 +28506,7 @@ Usually this is a format string like @code{"%.15g"}, which when used in the previous example, produces an output identical to the input. Because the underlying representation can be a little bit off from the exact value, -comparing floating-point values to see if they are equal is generally not a good idea. +comparing floating-point values to see if they are exactly equal is generally a bad idea. Here is an example where it does not work like you expect: @example @@ -28571,7 +28573,7 @@ in the earlier example can be enhanced by using the following simple algebraic transformation: @example -(sqrt(x * x + 1) - 1) / x = x / (sqrt(x * x + 1) + 1) +(sqrt(x * x + 1) - 1) / x @equiv{} x / (sqrt(x * x + 1) + 1) @end example @noindent @@ -28611,11 +28613,11 @@ implies better precision than is actually the case. @node Floating-point Representation @subsection Binary Floating-point Representation -@cindex IEEE-754 format +@cindex IEEE 754 format Although floating-point representations vary from machine to machine, the most commonly encountered representation is that defined by the -IEEE 754 Standard. An IEEE-754 format value has three components: +IEEE 754 Standard. An IEEE 754 format value has three components: @itemize @bullet @item @@ -28643,12 +28645,12 @@ number is then s ⋅ 2e. @c @end docbook The first bit of a non-zero binary significand -is always one, so the significand in an IEEE-754 format only includes the +is always one, so the significand in an IEEE 754 format only includes the fractional part, leaving the leading one implicit. The significand is stored in @dfn{normalized} format, which means that the first bit is always a one. -Three of the standard IEEE-754 types are 32-bit single precision, +Three of the standard IEEE 754 types are 32-bit single precision, 64-bit double precision and 128-bit quadruple precision. The standard also specifies extended precision formats to allow greater precisions and larger exponent ranges. @@ -28679,7 +28681,7 @@ The rounding mode of the context. @end table @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 Context Values} @@ -28698,10 +28700,10 @@ one extra bit of significand. A floating-point context can also determine which signals are treated as exceptions, and can set rules for arithmetic with special values. -Please consult the IEEE-754 standard or other resources for details. +Please consult the IEEE 754 standard or other resources for details. @command{gawk} ordinarily uses the hardware double precision -representation for numbers. On most systems, this is IEEE-754 +representation for numbers. On most systems, this is IEEE 754 floating-point format, corresponding to 64-bit binary with 53 bits of precision. @@ -28711,7 +28713,7 @@ the result from an arithmetic operation to be a number smaller than the smallest nonzero normalized number. Such numbers do not have as many significant digits as normal numbers, and are called @dfn{denormals} or @dfn{subnormals}. The alternative, simply returning a zero, -is called @dfn{flush to zero}. The basic IEEE-754 binary formats +is called @dfn{flush to zero}. The basic IEEE 754 binary formats support subnormal numbers. @end quotation @@ -28723,7 +28725,7 @@ The @dfn{rounding mode} specifies the behavior for the results of numerical operations when discarding extra precision. Each rounding mode indicates how the least significant returned digit of a rounded result is to be calculated. -@ref{table-rounding-modes} lists the IEEE-754 defined +@ref{table-rounding-modes} lists the IEEE 754 defined rounding modes: @float Table,table-rounding-modes @@ -28766,7 +28768,7 @@ BEGIN @{ @noindent produces the following output when run on the author's system:@footnote{It is possible for the output to be completely different if the -C library in your system does not use the IEEE-754 even-rounding +C library in your system does not use the IEEE 754 even-rounding rule to round halfway cases for @code{printf}.} @example @@ -28785,7 +28787,7 @@ The theory behind the rounding mode @code{roundTiesToEven} is that it more or less evenly distributes upward and downward rounds of exact halves, which might cause any round-off error to cancel itself out. This is the default rounding mode used -in IEEE-754 computing functions and operators. +in IEEE 754 computing functions and operators. The other rounding modes are rarely used. Round toward positive infinity (@code{roundTowardPositive}) @@ -28877,10 +28879,10 @@ to follow. The default working precision for arbitrary precision floating-point values is 53 bits, and the default value for @code{ROUNDMODE} is @code{"N"}, -which selects the IEEE-754 @code{roundTiesToEven} rounding mode +which selects the IEEE 754 @code{roundTiesToEven} rounding mode (@pxref{Rounding Mode}).@footnote{The default precision is 53 bits, since according to the MPFR documentation, -the library should be able to exactly reproduce all computations with +the library should be able to exactly reproduce all computations done with double-precision machine floating-point numbers (@code{double} type in C), except the default exponent range is much wider and subnormal numbers are not implemented.} @@ -28902,7 +28904,7 @@ MPFR does not implement subnormal numbers by default, and this behavior cannot be changed in @command{gawk}. @quotation NOTE -When emulating an IEEE-754 format (@pxref{Setting Precision}), +When emulating an IEEE 754 format (@pxref{Setting Precision}), @command{gawk} internally adjusts the exponent range to the value defined for the format and also performs computations needed for gradual underflow (subnormal numbers). @@ -28932,16 +28934,16 @@ your program. @command{gawk} uses a global working precision; it does not keep track of the precision or accuracy of individual numbers. Performing an arithmetic operation or calling a built-in function rounds the result to the current -working precision. The default working precision is 53 bits, which can be -modified using the built-in variable @code{PREC}. You can also set the -value to one of the pre-defined case-insensitive strings +working precision. The default working precision is 53 bits, which you can +modify using the built-in variable @code{PREC}. You can also set the +value to one of the predefined case-insensitive strings shown in @ref{table-predefined-precision-strings}, -to emulate an IEEE-754 binary format. +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. @@ -29030,8 +29032,8 @@ rounding modes is shown in @ref{table-gawk-rounding-modes}. @end float @code{ROUNDMODE} has the default value @code{"N"}, -which selects the IEEE-754 rounding mode @code{roundTiesToEven}. -In @ref{table-gawk-rounding-modes}, @code{"A"} is listed to select the IEEE-754 mode +which selects the IEEE 754 rounding mode @code{roundTiesToEven}. +In @ref{table-gawk-rounding-modes}, @code{"A"} is listed to select the IEEE 754 mode @code{roundTiesToAway}. This is only available if your version of the MPFR library supports it; otherwise setting @code{ROUNDMODE} to this value has no effect. @xref{Rounding Mode}, @@ -29050,8 +29052,8 @@ $ @kbd{gawk -M -v ROUNDMODE="Z" 'BEGIN @{ printf("%.2f\n", 1.378) @}'} @cindex constants, floating-point Be wary of floating-point constants! When reading a floating-point constant -from program source code, @command{gawk} uses the default precision, -unless overridden +from program source code, @command{gawk} uses the default precision (that +of a C @code{double}), unless overridden by an assignment to the special variable @code{PREC} on the command line, to store it internally as a MPFR number. Changing the precision using @code{PREC} in the program text does @@ -29098,7 +29100,7 @@ Electronic Transactions on Numerical Analysis. Volume 28, pp. 168-173, 2008.} @command{gawk} does not implicitly modify the precision of any previously computed results when the working precision is changed with an assignment to @code{PREC}. The precision of a number is always the one that was -used at the time of its creation, and there is no way for the user +used at the time of its creation, and there is no way for you to explicitly change it afterwards. However, since the result of a floating-point arithmetic operation is always an arbitrary precision floating-point value---with a precision set by the value of @code{PREC}---one of the @@ -29163,7 +29165,7 @@ a straight test for equality may not work. So, don't assume that floating-point values can be compared for equality. You should also exercise caution when using other forms of comparisons. -The standard way to compare between floating-point numbers is to determine +The standard way to compare two floating-point numbers is to determine how much error (or @dfn{tolerance}) you will allow in a comparison and check to see if one value is within this error range of the other. @@ -29488,9 +29490,9 @@ The @code{do_@var{xxx}()} function, in turn, then uses the function pointers in the API @code{struct} to do its work, such as updating variables or arrays, printing messages, setting @code{ERRNO}, and so on. -Convenience macros in the @file{gawkapi.h} header file make calling -through the function pointers look like regular function calls so that -extension code is quite readable and understandable. +Convenience macros make calling through the function pointers look +like regular function calls so that extension code is quite readable +and understandable. Although all of this sounds somewhat complicated, the result is that extension code is quite straightforward to write and to read. You can @@ -29521,6 +29523,9 @@ happen, but we all know how @emph{that} goes.) @section API Description @cindex extension API +C or C++ code for an extension must include the header file +@file{gawkapi.h}, which declares the functions and defines the data +types used to communicate with @command{gawk}. This (rather large) @value{SECTION} describes the API in detail. @menu @@ -29622,6 +29627,7 @@ corresponding standard header file @emph{before} including @file{gawkapi.h}: @multitable {@code{memset()}, @code{memcpy()}} {@code{}} @headitem C Entity @tab Header File @item @code{EOF} @tab @code{} +@item Values for @code{errno} @tab @code{} @item @code{FILE} @tab @code{} @item @code{NULL} @tab @code{} @item @code{memcpy()} @tab @code{} @@ -29637,9 +29643,6 @@ is necessary in order to keep @file{gawkapi.h} clean, instead of becoming a portability hodge-podge as can be seen in some parts of the @command{gawk} source code. -To pass reasonable integer values for @code{ERRNO}, you will also need to -include @code{}. - @item The @file{gawkapi.h} file may be included more than once without ill effect. Doing so, however, is poor coding practice. @@ -29663,7 +29666,7 @@ and is managed by @command{gawk} from then on. The API defines several simple @code{struct}s that map values as seen from @command{awk}. A value can be a @code{double}, a string, or an array (as in multidimensional arrays, or when creating a new array). -String values maintain both pointer and length since embedded @code{NUL} +String values maintain both pointer and length since embedded @sc{nul} characters are allowed. @quotation NOTE @@ -29795,7 +29798,7 @@ Scalar values in @command{awk} are either numbers or strings. The indicates what is in the @code{union}. Representing numbers is easy---the API uses a C @code{double}. Strings -require more work. Since @command{gawk} allows embedded @code{NUL} bytes +require more work. Since @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. @@ -30292,8 +30295,9 @@ A pointer to your @code{@var{XXX}_can_take_file()} function. A pointer to your @code{@var{XXX}_take_control_of()} function. @item awk_const struct input_parser *awk_const next; -This pointer is used by @command{gawk}. -The extension cannot modify it. +This is for use by @command{gawk}; +therefore it is marked @code{awk_const} so that the extension cannot +modify it. @end table The steps are as follows: @@ -30340,7 +30344,7 @@ open the file, then @code{fd} will @emph{not} be equal to @code{INVALID_HANDLE}. Otherwise, it will. @item struct stat sbuf; -If file descriptor is valid, then @command{gawk} will have filled +If the file descriptor is valid, then @command{gawk} will have filled in this structure via a call to the @code{fstat()} system call. @end table @@ -30521,8 +30525,8 @@ as described below, and return true if successful, false otherwise. @item awk_const struct output_wrapper *awk_const next; This is for use by @command{gawk}; -therefore they are marked @code{awk_const} so that the extension cannot -modify them. +therefore it is marked @code{awk_const} so that the extension cannot +modify it. @end table The @code{awk_output_buf_t} structure looks like this: @@ -30584,7 +30588,7 @@ The @code{@var{XXX}_can_take_file()} function should make a decision based 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()}, it should fill +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 use normally. @@ -30638,8 +30642,8 @@ This function should fill in the @code{awk_input_buf_t} and @item awk_const struct two_way_processor *awk_const next; This is for use by @command{gawk}; -therefore they are marked @code{awk_const} so that the extension cannot -modify them. +therefore it is marked @code{awk_const} so that the extension cannot +modify it. @end table As with the input parser and output processor, you provide @@ -30805,7 +30809,7 @@ Return false if the value cannot be retrieved. @item awk_bool_t sym_update_scalar(awk_scalar_t cookie, awk_value_t *value); Update the value associated with a scalar cookie. Return false if -the new value is not one of @code{AWK_STRING} or @code{AWK_NUMBER}. +the new value is not of type @code{AWK_STRING} or @code{AWK_NUMBER}. Here too, the built-in variables may not be updated. @end table @@ -30923,7 +30927,7 @@ is what the routines in this section let you do. The functions are as follows: @item awk_bool_t create_value(awk_value_t *value, awk_value_cookie_t *result); Create a cached string or numeric value from @code{value} for efficient later assignment. -Only @code{AWK_NUMBER} and @code{AWK_STRING} values are allowed. Any other type +Only values of type @code{AWK_NUMBER} and @code{AWK_STRING} are allowed. Any other type is rejected. While @code{AWK_UNDEFINED} could be allowed, doing so would result in inferior performance. @@ -30984,7 +30988,7 @@ What happens if @command{awk} code assigns a new value to @code{VAR1}, are all the others be changed too?'' That's a great question. The answer is that no, it's not a problem. -Internally, @command{gawk} uses reference-counted strings. This means +Internally, @command{gawk} uses @dfn{reference-counted strings}. This means that many variables can share the same string value, and @command{gawk} keeps track of the usage. When a variable's value changes, @command{gawk} simply decrements the reference count on the old value and updates @@ -31116,7 +31120,8 @@ the string value of @code{index} must come from the API-provided functions @code @itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ const@ awk_value_t *const value); In the array represented by @code{a_cookie}, create or modify the element whose index is given by @code{index}. -The @code{ARGV} and @code{ENVIRON} arrays may not be changed. +The @code{ARGV} and @code{ENVIRON} arrays may not be changed, +although the @code{PROCINFO} array can be. @item awk_bool_t set_array_element_by_elem(awk_array_t a_cookie, @itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_element_t element); @@ -31387,7 +31392,7 @@ you must add the new array to its parent before adding any elements to it. Thus, the correct way to build an array is to work ``top down.'' Create the array, and immediately install it in @command{gawk}'s symbol table using @code{sym_update()}, or install it as an element in a previously -existing array using @code{set_element()}. We show example code shortly. +existing array using @code{set_array_element()}. We show example code shortly. @item Due to gawk internals, after using @code{sym_update()} to install an array @@ -31413,7 +31418,7 @@ of the array cookie after the call to @code{set_element()}. @end enumerate The following C code is a simple test extension to create an array -with two regular elements and with a subarray. The leading @samp{#include} +with two regular elements and with a subarray. The leading @code{#include} directives and boilerplate variable declarations are omitted for brevity. The first step is to create a new array and then install it in the symbol table: @@ -31639,12 +31644,15 @@ whether the corresponding command-line options were enabled when @command{gawk} was invoked. The variables are: @table @code +@item do_debug +This variable is true if @command{gawk} was invoked with @option{--debug} option. + @item do_lint This variable is true if @command{gawk} was invoked with @option{--lint} option (@pxref{Options}). -@item do_traditional -This variable is true if @command{gawk} was invoked with @option{--traditional} option. +@item do_mpfr +This variable is true if @command{gawk} was invoked with @option{--bignum} option. @item do_profile This variable is true if @command{gawk} was invoked with @option{--profile} option. @@ -31652,11 +31660,8 @@ This variable is true if @command{gawk} was invoked with @option{--profile} opti @item do_sandbox This variable is true if @command{gawk} was invoked with @option{--sandbox} option. -@item do_debug -This variable is true if @command{gawk} was invoked with @option{--debug} option. - -@item do_mpfr -This variable is true if @command{gawk} was invoked with @option{--bignum} option. +@item do_traditional +This variable is true if @command{gawk} was invoked with @option{--traditional} option. @end table The value of @code{do_lint} can change if @command{awk} code @@ -32340,7 +32345,9 @@ structures for loading each function into @command{gawk}: static awk_ext_func_t func_table[] = @{ @{ "chdir", do_chdir, 1 @}, @{ "stat", do_stat, 2 @}, +#ifndef __MINGW32__ @{ "fts", do_fts, 3 @}, +#endif @}; @end example @@ -32498,69 +32505,27 @@ In all cases, it clears the @code{statdata} array. When the call is successful, @code{stat()} fills the @code{statdata} array with information retrieved from the filesystem, as follows: -@c nested table -@multitable @columnfractions .25 .60 -@item @code{statdata["name"]} @tab -The name of the file. - -@item @code{statdata["dev"]} @tab -Corresponds to the @code{st_dev} field in the @code{struct stat}. - -@item @code{statdata["ino"]} @tab -Corresponds to the @code{st_ino} field in the @code{struct stat}. - -@item @code{statdata["mode"]} @tab -Corresponds to the @code{st_mode} field in the @code{struct stat}. - -@item @code{statdata["nlink"]} @tab -Corresponds to the @code{st_nlink} field in the @code{struct stat}. - -@item @code{statdata["uid"]} @tab -Corresponds to the @code{st_uid} field in the @code{struct stat}. - -@item @code{statdata["gid"]} @tab -Corresponds to the @code{st_gid} field in the @code{struct stat}. - -@item @code{statdata["size"]} @tab -Corresponds to the @code{st_size} field in the @code{struct stat}. - -@item @code{statdata["atime"]} @tab -Corresponds to the @code{st_atime} field in the @code{struct stat}. - -@item @code{statdata["mtime"]} @tab -Corresponds to the @code{st_mtime} field in the @code{struct stat}. - -@item @code{statdata["ctime"]} @tab -Corresponds to the @code{st_ctime} field in the @code{struct stat}. - -@item @code{statdata["rdev"]} @tab -Corresponds to the @code{st_rdev} field in the @code{struct stat}. -This element is only present for device files. - -@item @code{statdata["major"]} @tab -Corresponds to the @code{st_major} field in the @code{struct stat}. -This element is only present for device files. - -@item @code{statdata["minor"]} @tab -Corresponds to the @code{st_minor} field in the @code{struct stat}. -This element is only present for device files. - -@item @code{statdata["blksize"]} @tab -Corresponds to the @code{st_blksize} field in the @code{struct stat}, -if this field is present on your system. -(It is present on all modern systems that we know of.) - -@item @code{statdata["pmode"]} @tab -A human-readable version of the mode value, such as printed by -@command{ls}. For example, @code{"-rwxr-xr-x"}. - -@item @code{statdata["linkval"]} @tab -If the named file is a symbolic link, this element will exist -and its value is the value of the symbolic link (where the -symbolic link points to). - -@item @code{statdata["type"]} @tab -The type of the file as a string. One of +@multitable @columnfractions .15 .50 .20 +@headitem Subscript @tab Field in @code{struct stat} @tab File type +@item @code{"name"} @tab The file name @tab All +@item @code{"dev"} @tab @code{st_dev} @tab All +@item @code{"ino"} @tab @code{st_ino} @tab All +@item @code{"mode"} @tab @code{st_mode} @tab All +@item @code{"nlink"} @tab @code{st_nlink} @tab All +@item @code{"uid"} @tab @code{st_uid} @tab All +@item @code{"gid"} @tab @code{st_gid} @tab All +@item @code{"size"} @tab @code{st_size} @tab All +@item @code{"atime"} @tab @code{st_atime} @tab All +@item @code{"mtime"} @tab @code{st_mtime} @tab All +@item @code{"ctime"} @tab @code{st_ctime} @tab All +@item @code{"rdev"} @tab @code{st_rdev} @tab Device files +@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{"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 @code{"file"}, @code{"blockdev"}, @code{"chardev"}, @@ -32571,7 +32536,7 @@ The type of the file as a string. One of @code{"door"}, or @code{"unknown"}. -Not all systems support all file types. +Not all systems support all file types. @tab All @end multitable @cindex @code{fts()} extension function @@ -32730,23 +32695,13 @@ flags in the @code{FNM} array. The flags are follows: @multitable @columnfractions .25 .75 -@item @code{FNM["CASEFOLD"]} @tab -Corresponds to the @code{FNM_CASEFOLD} flag as defined in @code{fnmatch()}. - -@item @code{FNM["FILE_NAME"]} @tab -Corresponds to the @code{FNM_FILE_NAME} flag as defined in @code{fnmatch()}. - -@item @code{FNM["LEADING_DIR"]} @tab -Corresponds to the @code{FNM_LEADING_DIR} flag as defined in @code{fnmatch()}. - -@item @code{FNM["NOESCAPE"]} @tab -Corresponds to the @code{FNM_NOESCAPE} flag as defined in @code{fnmatch()}. - -@item @code{FNM["PATHNAME"]} @tab -Corresponds to the @code{FNM_PATHNAME} flag as defined in @code{fnmatch()}. - -@item @code{FNM["PERIOD"]} @tab -Corresponds to the @code{FNM_PERIOD} flag as defined in @code{fnmatch()}. +@headitem Array element @tab Corresponding lag defined by @code{fnmatch()} +@item @code{FNM["CASEFOLD"]} @tab @code{FNM_CASEFOLD} +@item @code{FNM["FILE_NAME"]} @tab @code{FNM_FILE_NAME} +@item @code{FNM["LEADING_DIR"]} @tab @code{FNM_LEADING_DIR} +@item @code{FNM["NOESCAPE"]} @tab @code{FNM_NOESCAPE} +@item @code{FNM["PATHNAME"]} @tab @code{FNM_PATHNAME} +@item @code{FNM["PERIOD"]} @tab @code{FNM_PERIOD} @end multitable Here is an example: @@ -32907,8 +32862,11 @@ The record consists of three fields. The first two are the inode number and the filename, 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 -indicating the type of the file: +indicating the type of the file. The letters are file types are shown +in @ref{table-readdir-file-types}. +@float Table,table-readdir-file-types +@caption{File types returned by @code{readdir()}} @multitable @columnfractions .1 .9 @headitem Letter @tab File Type @item @code{b} @tab Block device @@ -32920,6 +32878,7 @@ indicating the type of the file: @item @code{s} @tab Socket @item @code{u} @tab Anything else (unknown) @end multitable +@end float On systems without the file type information, the third field is always @samp{u}. @@ -32954,12 +32913,12 @@ Here is an example: BEGIN @{ REVOUT = 1 - print "hello, world" > "/dev/stdout" + print "don't panic" > "/dev/stdout" @} @end example The output from this program is: -@samp{dlrow ,olleh}. +@samp{cinap t'nod}. @node Extension Sample Rev2way @subsection Two-Way I/O Example @@ -32976,13 +32935,22 @@ The following example shows how to use it: BEGIN @{ cmd = "/magic/mirror" - print "hello, world" |& cmd + print "don't panic" |& cmd cmd |& getline result print result close(cmd) @} @end example +The output from this program +@ifnotinfo +also is: +@end ifnotinfo +@ifinfo +is: +@end ifinfo +@samp{cinap t'nod}. + @node Extension Sample Read write array @subsection Dumping and Restoring An Array @@ -32993,8 +32961,8 @@ named @code{writea()} and @code{reada()}, as follows: @cindex @code{writea()} extension function @item ret = writea(file, array) This function takes a string argument, which is the name of the file -to which dump the array, and the array itself as the second argument. -@code{writea()} understands multidimensional arrays. It returns one on +to which to dump the array, and the array itself as the second argument. +@code{writea()} understands arrays of arrays. It returns one on success, or zero upon failure. @cindex @code{reada()} extension function @@ -33079,9 +33047,8 @@ for more information. @node Extension Sample Time @subsection Extension Time Functions -These functions can be used either by invoking @command{gawk} -with a command-line argument of @samp{-l time} or by -inserting @samp{@@load "time"} in your script. +The @code{time} extension adds two functions, named @code{gettimeofday()} +and @code{sleep()}, as follows: @table @code @item @@load "time" @@ -33094,7 +33061,7 @@ floating point value. If the time is unavailable on this platform, return @minus{}1 and set @code{ERRNO}. The returned time should have sub-second precision, but the actual precision may vary based on the platform. If the standard C @code{gettimeofday()} system call is available on this -platform, then it simply returns the value. Otherwise, if on Windows, +platform, then it simply returns the value. Otherwise, if on MS-Windows, it tries to use @code{GetSystemTimeAsFileTime()}. @cindex @code{sleep()} extension function -- cgit v1.2.3 From 9e5b2c4106be2d9aaf98730a03e75d313cfa2e80 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 20 May 2014 21:46:59 +0300 Subject: More docbook fixes. --- doc/ChangeLog | 5 + doc/gawk.info | 277 ++++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 90 ++++++------------ doc/gawktexi.in | 90 ++++++------------ 4 files changed, 204 insertions(+), 258 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index c71ec99e..3edc0f37 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2014-05-20 Arnold D. Robbins + + * gawktexi.in: Misc improvements for docbook, consistency + in table and figure captions. + 2014-05-17 Arnold D. Robbins * gawktexi.in: Edits through Chapter 16. diff --git a/doc/gawk.info b/doc/gawk.info index e860045e..55cc9829 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -21383,7 +21383,7 @@ binary format. `"quad"' Basic 128-bit quadruple precision. `"oct"' 256-bit octuple precision. -Table 15.3: Predefined precision strings for `PREC' +Table 15.3: Predefined Precision Strings For `PREC' The following example illustrates the effects of changing precision on arithmetic operations: @@ -21761,7 +21761,8 @@ File: gawk.info, Node: Extension Mechanism Outline, Next: Extension API Descri Communication between `gawk' and an extension is two-way. First, when an extension is loaded, it is passed a pointer to a `struct' whose -fields are function pointers. This is shown in *note load-extension::. +fields are function pointers. This is shown in *note +figure-load-extension::. API Struct @@ -21793,7 +21794,7 @@ Figure 16.1: Loading The Extension function pointers, at runtime, without needing (link-time) access to `gawk''s symbols. One of these function pointers is to a function for "registering" new built-in functions. This is shown in *note -load-new-function::. +figure-load-new-function::. register_ext_func({ "chdir", do_chdir, 1 }); @@ -21813,7 +21814,7 @@ Figure 16.2: Loading The New Function with `gawk' by passing function pointers to the functions that provide the new feature (`do_chdir()', for example). `gawk' associates the function pointer with a name and can then call it, using a defined -calling convention. This is shown in *note call-new-function::. +calling convention. This is shown in *note figure-call-new-function::. BEGIN { chdir("/path") (*fnptr)(1); @@ -22188,7 +22189,7 @@ Requested: Scalar Scalar Scalar false false Value false false false false Cookie -Table 16.1: Value Types Returned +Table 16.1: API Value Types Returned  File: gawk.info, Node: Memory Allocation Functions, Next: Constructor Functions, Prev: Requesting Values, Up: Extension API Description @@ -24826,7 +24827,7 @@ Letter File Type `s' Socket `u' Anything else (unknown) -Table 16.2: File types returned by `readdir()' +Table 16.2: File Types Returned By `readdir()' On systems without the file type information, the third field is always `u'. @@ -33607,137 +33608,137 @@ Node: Dynamic Extensions874884 Node: Extension Intro876342 Node: Plugin License877607 Node: Extension Mechanism Outline878292 -Ref: load-extension878709 -Ref: load-new-function880187 -Ref: call-new-function881182 -Node: Extension API Description883166 -Node: Extension API Functions Introduction884616 -Node: General Data Types889482 -Ref: General Data Types-Footnote-1895175 -Node: Requesting Values895474 -Ref: table-value-types-returned896211 -Node: Memory Allocation Functions897165 -Ref: Memory Allocation Functions-Footnote-1899911 -Node: Constructor Functions900007 -Node: Registration Functions901765 -Node: Extension Functions902450 -Node: Exit Callback Functions904752 -Node: Extension Version String906001 -Node: Input Parsers906651 -Node: Output Wrappers916454 -Node: Two-way processors920970 -Node: Printing Messages923173 -Ref: Printing Messages-Footnote-1924250 -Node: Updating `ERRNO'924402 -Node: Accessing Parameters925141 -Node: Symbol Table Access926371 -Node: Symbol table by name926885 -Node: Symbol table by cookie928861 -Ref: Symbol table by cookie-Footnote-1932994 -Node: Cached values933057 -Ref: Cached values-Footnote-1936562 -Node: Array Manipulation936653 -Ref: Array Manipulation-Footnote-1937751 -Node: Array Data Types937790 -Ref: Array Data Types-Footnote-1940493 -Node: Array Functions940585 -Node: Flattening Arrays944459 -Node: Creating Arrays951311 -Node: Extension API Variables956042 -Node: Extension Versioning956678 -Node: Extension API Informational Variables958579 -Node: Extension API Boilerplate959665 -Node: Finding Extensions963469 -Node: Extension Example964029 -Node: Internal File Description964759 -Node: Internal File Ops968850 -Ref: Internal File Ops-Footnote-1980396 -Node: Using Internal File Ops980536 -Ref: Using Internal File Ops-Footnote-1982883 -Node: Extension Samples983149 -Node: Extension Sample File Functions984673 -Node: Extension Sample Fnmatch992240 -Node: Extension Sample Fork993719 -Node: Extension Sample Inplace994932 -Node: Extension Sample Ord996710 -Node: Extension Sample Readdir997546 -Ref: table-readdir-file-types998401 -Node: Extension Sample Revout999200 -Node: Extension Sample Rev2way999791 -Node: Extension Sample Read write array1000532 -Node: Extension Sample Readfile1002411 -Node: Extension Sample API Tests1003511 -Node: Extension Sample Time1004036 -Node: gawkextlib1005351 -Node: Language History1008132 -Node: V7/SVR3.11009725 -Node: SVR41012045 -Node: POSIX1013487 -Node: BTL1014873 -Node: POSIX/GNU1015607 -Node: Feature History1021206 -Node: Common Extensions1034182 -Node: Ranges and Locales1035494 -Ref: Ranges and Locales-Footnote-11040111 -Ref: Ranges and Locales-Footnote-21040138 -Ref: Ranges and Locales-Footnote-31040372 -Node: Contributors1040593 -Node: Installation1045974 -Node: Gawk Distribution1046868 -Node: Getting1047352 -Node: Extracting1048178 -Node: Distribution contents1049870 -Node: Unix Installation1055591 -Node: Quick Installation1056208 -Node: Additional Configuration Options1058654 -Node: Configuration Philosophy1060390 -Node: Non-Unix Installation1062744 -Node: PC Installation1063202 -Node: PC Binary Installation1064513 -Node: PC Compiling1066361 -Node: PC Testing1069321 -Node: PC Using1070497 -Node: Cygwin1074665 -Node: MSYS1075474 -Node: VMS Installation1075988 -Node: VMS Compilation1076784 -Ref: VMS Compilation-Footnote-11078036 -Node: VMS Dynamic Extensions1078094 -Node: VMS Installation Details1079467 -Node: VMS Running1081718 -Node: VMS GNV1084552 -Node: VMS Old Gawk1085275 -Node: Bugs1085745 -Node: Other Versions1089663 -Node: Notes1095747 -Node: Compatibility Mode1096547 -Node: Additions1097330 -Node: Accessing The Source1098257 -Node: Adding Code1099697 -Node: New Ports1105742 -Node: Derived Files1109877 -Ref: Derived Files-Footnote-11115198 -Ref: Derived Files-Footnote-21115232 -Ref: Derived Files-Footnote-31115832 -Node: Future Extensions1115930 -Node: Implementation Limitations1116513 -Node: Extension Design1117761 -Node: Old Extension Problems1118915 -Ref: Old Extension Problems-Footnote-11120423 -Node: Extension New Mechanism Goals1120480 -Ref: Extension New Mechanism Goals-Footnote-11123845 -Node: Extension Other Design Decisions1124031 -Node: Extension Future Growth1126137 -Node: Old Extension Mechanism1126973 -Node: Basic Concepts1128713 -Node: Basic High Level1129394 -Ref: figure-general-flow1129666 -Ref: figure-process-flow1130265 -Ref: Basic High Level-Footnote-11133494 -Node: Basic Data Typing1133679 -Node: Glossary1137034 -Node: Copying1162265 -Node: GNU Free Documentation License1199821 -Node: Index1224957 +Ref: figure-load-extension878716 +Ref: figure-load-new-function880201 +Ref: figure-call-new-function881203 +Node: Extension API Description883187 +Node: Extension API Functions Introduction884637 +Node: General Data Types889503 +Ref: General Data Types-Footnote-1895196 +Node: Requesting Values895495 +Ref: table-value-types-returned896232 +Node: Memory Allocation Functions897190 +Ref: Memory Allocation Functions-Footnote-1899936 +Node: Constructor Functions900032 +Node: Registration Functions901790 +Node: Extension Functions902475 +Node: Exit Callback Functions904777 +Node: Extension Version String906026 +Node: Input Parsers906676 +Node: Output Wrappers916479 +Node: Two-way processors920995 +Node: Printing Messages923198 +Ref: Printing Messages-Footnote-1924275 +Node: Updating `ERRNO'924427 +Node: Accessing Parameters925166 +Node: Symbol Table Access926396 +Node: Symbol table by name926910 +Node: Symbol table by cookie928886 +Ref: Symbol table by cookie-Footnote-1933019 +Node: Cached values933082 +Ref: Cached values-Footnote-1936587 +Node: Array Manipulation936678 +Ref: Array Manipulation-Footnote-1937776 +Node: Array Data Types937815 +Ref: Array Data Types-Footnote-1940518 +Node: Array Functions940610 +Node: Flattening Arrays944484 +Node: Creating Arrays951336 +Node: Extension API Variables956067 +Node: Extension Versioning956703 +Node: Extension API Informational Variables958604 +Node: Extension API Boilerplate959690 +Node: Finding Extensions963494 +Node: Extension Example964054 +Node: Internal File Description964784 +Node: Internal File Ops968875 +Ref: Internal File Ops-Footnote-1980421 +Node: Using Internal File Ops980561 +Ref: Using Internal File Ops-Footnote-1982908 +Node: Extension Samples983174 +Node: Extension Sample File Functions984698 +Node: Extension Sample Fnmatch992265 +Node: Extension Sample Fork993744 +Node: Extension Sample Inplace994957 +Node: Extension Sample Ord996735 +Node: Extension Sample Readdir997571 +Ref: table-readdir-file-types998426 +Node: Extension Sample Revout999225 +Node: Extension Sample Rev2way999816 +Node: Extension Sample Read write array1000557 +Node: Extension Sample Readfile1002436 +Node: Extension Sample API Tests1003536 +Node: Extension Sample Time1004061 +Node: gawkextlib1005376 +Node: Language History1008157 +Node: V7/SVR3.11009750 +Node: SVR41012070 +Node: POSIX1013512 +Node: BTL1014898 +Node: POSIX/GNU1015632 +Node: Feature History1021231 +Node: Common Extensions1034207 +Node: Ranges and Locales1035519 +Ref: Ranges and Locales-Footnote-11040136 +Ref: Ranges and Locales-Footnote-21040163 +Ref: Ranges and Locales-Footnote-31040397 +Node: Contributors1040618 +Node: Installation1045999 +Node: Gawk Distribution1046893 +Node: Getting1047377 +Node: Extracting1048203 +Node: Distribution contents1049895 +Node: Unix Installation1055616 +Node: Quick Installation1056233 +Node: Additional Configuration Options1058679 +Node: Configuration Philosophy1060415 +Node: Non-Unix Installation1062769 +Node: PC Installation1063227 +Node: PC Binary Installation1064538 +Node: PC Compiling1066386 +Node: PC Testing1069346 +Node: PC Using1070522 +Node: Cygwin1074690 +Node: MSYS1075499 +Node: VMS Installation1076013 +Node: VMS Compilation1076809 +Ref: VMS Compilation-Footnote-11078061 +Node: VMS Dynamic Extensions1078119 +Node: VMS Installation Details1079492 +Node: VMS Running1081743 +Node: VMS GNV1084577 +Node: VMS Old Gawk1085300 +Node: Bugs1085770 +Node: Other Versions1089688 +Node: Notes1095772 +Node: Compatibility Mode1096572 +Node: Additions1097355 +Node: Accessing The Source1098282 +Node: Adding Code1099722 +Node: New Ports1105767 +Node: Derived Files1109902 +Ref: Derived Files-Footnote-11115223 +Ref: Derived Files-Footnote-21115257 +Ref: Derived Files-Footnote-31115857 +Node: Future Extensions1115955 +Node: Implementation Limitations1116538 +Node: Extension Design1117786 +Node: Old Extension Problems1118940 +Ref: Old Extension Problems-Footnote-11120448 +Node: Extension New Mechanism Goals1120505 +Ref: Extension New Mechanism Goals-Footnote-11123870 +Node: Extension Other Design Decisions1124056 +Node: Extension Future Growth1126162 +Node: Old Extension Mechanism1126998 +Node: Basic Concepts1128738 +Node: Basic High Level1129419 +Ref: figure-general-flow1129691 +Ref: figure-process-flow1130290 +Ref: Basic High Level-Footnote-11133519 +Node: Basic Data Typing1133704 +Node: Glossary1137059 +Node: Copying1162290 +Node: GNU Free Documentation License1199846 +Node: Index1224982  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index eeacd2c6..e0222443 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -1571,12 +1571,14 @@ contains additional appendices and other end material. To save space, we have omitted them from the printed edition. You may find them online, as follows: -@uref{http://www.gnu.org/software/gawk/manual/html_node/Notes.html} +@uref{http://www.gnu.org/software/gawk/manual/html_node/Notes.html, +The appendix on implementation 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. -@uref{http://www.gnu.org/software/gawk/manual/html_node/Basic-Concepts.html} +@uref{http://www.gnu.org/software/gawk/manual/html_node/Basic-Concepts.html, +The appendix on basic concepts} provides some very cursory background material for those who are completely unfamiliar with computer programming. @@ -2064,9 +2066,6 @@ May, 2014 @ifdocbook -@docbook - -@end docbook Part I describes the @command{awk} language and @command{gawk} program in detail. It starts with the basics, and continues through all of the features of @command{awk}. Included also are many, but not all, @@ -2101,9 +2100,6 @@ following chapters: @item @ref{Functions}. @end itemize -@docbook - -@end docbook @end ifdocbook @node Getting Started @@ -18152,8 +18148,7 @@ Operands | 0 | 1 | 0 | 1 | 0 | 1 @end tex @docbook -
-Bitwise Operations + @@ -18213,7 +18208,7 @@ Operands | 0 | 1 | 0 | 1 | 0 | 1 -
+ @end docbook @end float @@ -19518,10 +19513,6 @@ for (i = 1; i <= n; i++) @end ifnotinfo @ifdocbook - -@docbook - -@end docbook 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: @@ -19533,9 +19524,6 @@ It contains the following chapters: @item @ref{Sample Programs}. @end itemize -@docbook - -@end docbook @end ifdocbook @node Library Functions @@ -25621,10 +25609,6 @@ BEGIN { @end ifnotinfo @ifdocbook - -@docbook - -@end docbook Part III focuses on features specific to @command{gawk}. It contains the following chapters: @@ -25644,9 +25628,6 @@ It contains the following chapters: @item @ref{Dynamic Extensions}. @end itemize -@docbook - -@end docbook @end ifdocbook @node Advanced Features @@ -29797,7 +29778,7 @@ shown in @ref{table-predefined-precision-strings}, to emulate an IEEE 754 binary format. @float Table,table-predefined-precision-strings -@caption{Predefined precision strings for @code{PREC}} +@caption{Predefined Precision Strings For @code{PREC}} @multitable {@code{"double"}} {12345678901234567890123456789012345} @headitem @code{PREC} @tab IEEE 754 Binary Format @item @code{"half"} @tab 16-bit half-precision. @@ -30253,30 +30234,30 @@ Communication between is loaded, it is passed a pointer to a @code{struct} whose fields are function pointers. @ifnotdocbook -This is shown in @ref{load-extension}. +This is shown in @ref{figure-load-extension}. @end ifnotdocbook @ifdocbook -This is shown in @inlineraw{docbook, }. +This is shown in @inlineraw{docbook, }. @end ifdocbook @ifnotdocbook -@float Figure,load-extension +@float Figure,figure-load-extension @caption{Loading The Extension} @c FIXME: One day, it should not be necessary to have two cases, @c but rather just the one without the "txt" final argument. @c This applies to the other figures as well. @ifinfo -@center @image{api-figure1, , , Loading the extension, txt} +@center @image{api-figure1, , , Loading The Extension, txt} @end ifinfo @ifnotinfo -@center @image{api-figure1, , , Loading the extension} +@center @image{api-figure1, , , Loading The Extension} @end ifnotinfo @end float @end ifnotdocbook @docbook -
-Loading the extension +
+Loading The Extension
@end docbook @@ -30286,27 +30267,27 @@ function pointers, at runtime, without needing (link-time) access to @command{gawk}'s symbols. One of these function pointers is to a function for ``registering'' new built-in functions. @ifnotdocbook -This is shown in @ref{load-new-function}. +This is shown in @ref{figure-load-new-function}. @end ifnotdocbook @ifdocbook -This is shown in @inlineraw{docbook, }. +This is shown in @inlineraw{docbook, }. @end ifdocbook @ifnotdocbook -@float Figure,load-new-function +@float Figure,figure-load-new-function @caption{Loading The New Function} @ifinfo -@center @image{api-figure2, , , Loading the new function, txt} +@center @image{api-figure2, , , Loading The New Function, txt} @end ifinfo @ifnotinfo -@center @image{api-figure2, , , Loading the new function} +@center @image{api-figure2, , , Loading The New Function} @end ifnotinfo @end float @end ifnotdocbook @docbook -
-Loading the new function +
+Loading The New Function
@end docbook @@ -30317,14 +30298,14 @@ provide the new feature (@code{do_chdir()}, for example). @command{gawk} associates the function pointer with a name and can then call it, using a defined calling convention. @ifnotdocbook -This is shown in @ref{call-new-function}. +This is shown in @ref{figure-call-new-function}. @end ifnotdocbook @ifdocbook -This is shown in @inlineraw{docbook, }. +This is shown in @inlineraw{docbook, }. @end ifdocbook @ifnotdocbook -@float Figure,call-new-function +@float Figure,figure-call-new-function @caption{Calling The New Function} @ifinfo @center @image{api-figure3, , , Calling the new function, txt} @@ -30336,7 +30317,7 @@ This is shown in @inlineraw{docbook, }. @end ifnotdocbook @docbook -
+
Calling The New Function
@@ -30719,9 +30700,9 @@ value type, as appropriate. This behavior is summarized in @ref{table-value-types-returned}. @c FIXME: Try to do this with spans... -@ifdocbook -@anchor{table-value-types-returned} -@end ifdocbook + +@float Table,table-value-types-returned +@caption{API Value Types Returned} @docbook @@ -30806,8 +30787,6 @@ value type, as appropriate. This behavior is summarized in @ifnotplaintext @ifnotdocbook -@float Table,table-value-types-returned -@caption{Value Types Returned} @multitable @columnfractions .50 .50 @headitem @tab Type of Actual Value: @end multitable @@ -30820,12 +30799,9 @@ value type, as appropriate. This behavior is summarized in @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 @end multitable -@end float @end ifnotdocbook @end ifnotplaintext @ifplaintext -@float Table,table-value-types-returned -@caption{Value Types Returned} @example +-------------------------------------------------+ | Type of Actual Value: | @@ -30849,8 +30825,8 @@ value type, as appropriate. This behavior is summarized in | | Cookie | | | | | +-----------+-----------+------------+------------+-----------+-----------+ @end example -@end float @end ifplaintext +@end float @node Memory Allocation Functions @subsection Memory Allocation Functions and Convenience Macros @@ -33722,7 +33698,7 @@ indicating the type of the file. The letters are file types are shown in @ref{table-readdir-file-types}. @float Table,table-readdir-file-types -@caption{File types returned by @code{readdir()}} +@caption{File Types Returned By @code{readdir()}} @multitable @columnfractions .1 .9 @headitem Letter @tab File Type @item @code{b} @tab Block device @@ -34025,9 +34001,6 @@ See the project's web site for more information. @ifdocbook -@docbook - -@end docbook @ifclear FOR_PRINT Part IV contains the appendixes (including the two licenses that cover the @command{gawk} source code and this @value{DOCUMENT}, respectively) @@ -34062,9 +34035,6 @@ Part IV contains two appendixes: @ref{GNU Free Documentation License}. @end ifclear @end itemize -@docbook - -@end docbook @end ifdocbook @node Language History diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 17d52797..3599b727 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -1538,12 +1538,14 @@ contains additional appendices and other end material. To save space, we have omitted them from the printed edition. You may find them online, as follows: -@uref{http://www.gnu.org/software/gawk/manual/html_node/Notes.html} +@uref{http://www.gnu.org/software/gawk/manual/html_node/Notes.html, +The appendix on implementation 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. -@uref{http://www.gnu.org/software/gawk/manual/html_node/Basic-Concepts.html} +@uref{http://www.gnu.org/software/gawk/manual/html_node/Basic-Concepts.html, +The appendix on basic concepts} provides some very cursory background material for those who are completely unfamiliar with computer programming. @@ -2031,9 +2033,6 @@ May, 2014 @ifdocbook -@docbook - -@end docbook Part I describes the @command{awk} language and @command{gawk} program in detail. It starts with the basics, and continues through all of the features of @command{awk}. Included also are many, but not all, @@ -2068,9 +2067,6 @@ following chapters: @item @ref{Functions}. @end itemize -@docbook - -@end docbook @end ifdocbook @node Getting Started @@ -17325,8 +17321,7 @@ Operands | 0 | 1 | 0 | 1 | 0 | 1 @end tex @docbook - -Bitwise Operations + @@ -17386,7 +17381,7 @@ Operands | 0 | 1 | 0 | 1 | 0 | 1 -
+
@end docbook @end float @@ -18691,10 +18686,6 @@ for (i = 1; i <= n; i++) @end ifnotinfo @ifdocbook - -@docbook - -@end docbook 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: @@ -18706,9 +18697,6 @@ It contains the following chapters: @item @ref{Sample Programs}. @end itemize -@docbook - -@end docbook @end ifdocbook @node Library Functions @@ -24765,10 +24753,6 @@ BEGIN { @end ifnotinfo @ifdocbook - -@docbook - -@end docbook Part III focuses on features specific to @command{gawk}. It contains the following chapters: @@ -24788,9 +24772,6 @@ It contains the following chapters: @item @ref{Dynamic Extensions}. @end itemize -@docbook - -@end docbook @end ifdocbook @node Advanced Features @@ -28941,7 +28922,7 @@ shown in @ref{table-predefined-precision-strings}, to emulate an IEEE 754 binary format. @float Table,table-predefined-precision-strings -@caption{Predefined precision strings for @code{PREC}} +@caption{Predefined Precision Strings For @code{PREC}} @multitable {@code{"double"}} {12345678901234567890123456789012345} @headitem @code{PREC} @tab IEEE 754 Binary Format @item @code{"half"} @tab 16-bit half-precision. @@ -29397,30 +29378,30 @@ Communication between is loaded, it is passed a pointer to a @code{struct} whose fields are function pointers. @ifnotdocbook -This is shown in @ref{load-extension}. +This is shown in @ref{figure-load-extension}. @end ifnotdocbook @ifdocbook -This is shown in @inlineraw{docbook, }. +This is shown in @inlineraw{docbook, }. @end ifdocbook @ifnotdocbook -@float Figure,load-extension +@float Figure,figure-load-extension @caption{Loading The Extension} @c FIXME: One day, it should not be necessary to have two cases, @c but rather just the one without the "txt" final argument. @c This applies to the other figures as well. @ifinfo -@center @image{api-figure1, , , Loading the extension, txt} +@center @image{api-figure1, , , Loading The Extension, txt} @end ifinfo @ifnotinfo -@center @image{api-figure1, , , Loading the extension} +@center @image{api-figure1, , , Loading The Extension} @end ifnotinfo @end float @end ifnotdocbook @docbook -
-Loading the extension +
+Loading The Extension
@end docbook @@ -29430,27 +29411,27 @@ function pointers, at runtime, without needing (link-time) access to @command{gawk}'s symbols. One of these function pointers is to a function for ``registering'' new built-in functions. @ifnotdocbook -This is shown in @ref{load-new-function}. +This is shown in @ref{figure-load-new-function}. @end ifnotdocbook @ifdocbook -This is shown in @inlineraw{docbook, }. +This is shown in @inlineraw{docbook, }. @end ifdocbook @ifnotdocbook -@float Figure,load-new-function +@float Figure,figure-load-new-function @caption{Loading The New Function} @ifinfo -@center @image{api-figure2, , , Loading the new function, txt} +@center @image{api-figure2, , , Loading The New Function, txt} @end ifinfo @ifnotinfo -@center @image{api-figure2, , , Loading the new function} +@center @image{api-figure2, , , Loading The New Function} @end ifnotinfo @end float @end ifnotdocbook @docbook -
-Loading the new function +
+Loading The New Function
@end docbook @@ -29461,14 +29442,14 @@ provide the new feature (@code{do_chdir()}, for example). @command{gawk} associates the function pointer with a name and can then call it, using a defined calling convention. @ifnotdocbook -This is shown in @ref{call-new-function}. +This is shown in @ref{figure-call-new-function}. @end ifnotdocbook @ifdocbook -This is shown in @inlineraw{docbook, }. +This is shown in @inlineraw{docbook, }. @end ifdocbook @ifnotdocbook -@float Figure,call-new-function +@float Figure,figure-call-new-function @caption{Calling The New Function} @ifinfo @center @image{api-figure3, , , Calling the new function, txt} @@ -29480,7 +29461,7 @@ This is shown in @inlineraw{docbook, }. @end ifnotdocbook @docbook -
+
Calling The New Function
@@ -29863,9 +29844,9 @@ value type, as appropriate. This behavior is summarized in @ref{table-value-types-returned}. @c FIXME: Try to do this with spans... -@ifdocbook -@anchor{table-value-types-returned} -@end ifdocbook + +@float Table,table-value-types-returned +@caption{API Value Types Returned} @docbook @@ -29950,8 +29931,6 @@ value type, as appropriate. This behavior is summarized in @ifnotplaintext @ifnotdocbook -@float Table,table-value-types-returned -@caption{Value Types Returned} @multitable @columnfractions .50 .50 @headitem @tab Type of Actual Value: @end multitable @@ -29964,12 +29943,9 @@ value type, as appropriate. This behavior is summarized in @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 @end multitable -@end float @end ifnotdocbook @end ifnotplaintext @ifplaintext -@float Table,table-value-types-returned -@caption{Value Types Returned} @example +-------------------------------------------------+ | Type of Actual Value: | @@ -29993,8 +29969,8 @@ value type, as appropriate. This behavior is summarized in | | Cookie | | | | | +-----------+-----------+------------+------------+-----------+-----------+ @end example -@end float @end ifplaintext +@end float @node Memory Allocation Functions @subsection Memory Allocation Functions and Convenience Macros @@ -32866,7 +32842,7 @@ indicating the type of the file. The letters are file types are shown in @ref{table-readdir-file-types}. @float Table,table-readdir-file-types -@caption{File types returned by @code{readdir()}} +@caption{File Types Returned By @code{readdir()}} @multitable @columnfractions .1 .9 @headitem Letter @tab File Type @item @code{b} @tab Block device @@ -33169,9 +33145,6 @@ See the project's web site for more information. @ifdocbook -@docbook - -@end docbook @ifclear FOR_PRINT Part IV contains the appendixes (including the two licenses that cover the @command{gawk} source code and this @value{DOCUMENT}, respectively) @@ -33206,9 +33179,6 @@ Part IV contains two appendixes: @ref{GNU Free Documentation License}. @end ifclear @end itemize -@docbook - -@end docbook @end ifdocbook @node Language History -- cgit v1.2.3 From ca8646e523f70435bccf5e582db8e54f87a07012 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 20 May 2014 21:49:48 +0300 Subject: Sync with GNU grep. --- ChangeLog | 4 ++++ dfa.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 3423073a..f93f9066 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2014-05-20 Arnold D. Robbins + + * dfa.c (dfaexec): Minor sync with GNU grep. + 2014-05-14 Arnold D. Robbins * custom.h (_GL_PURE): Move definition to here. Sigh. diff --git a/dfa.c b/dfa.c index c959ad4f..18f8faf1 100644 --- a/dfa.c +++ b/dfa.c @@ -3478,7 +3478,7 @@ dfaexec (struct dfa *d, char const *begin, char *end, /* If the previous character was a newline, count it, and skip checking of multibyte character boundary until here. */ - if (p[-1] == eol) + if (p[-1] == eol && (char *) p != begin) { nlcount++; mbp = p; -- cgit v1.2.3 From dbe9adb6394beea5a09630076e1cd94075e1578d Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 21 May 2014 22:10:30 +0300 Subject: Bump version to do a test tar ball. --- configure | 20 ++++++++++---------- configure.ac | 2 +- pc/config.h | 6 +++--- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/configure b/configure index 31f1bf35..0cd8ff22 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for GNU Awk 4.1.1. +# Generated by GNU Autoconf 2.69 for GNU Awk 4.1.1a. # # Report bugs to . # @@ -580,8 +580,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GNU Awk' PACKAGE_TARNAME='gawk' -PACKAGE_VERSION='4.1.1' -PACKAGE_STRING='GNU Awk 4.1.1' +PACKAGE_VERSION='4.1.1a' +PACKAGE_STRING='GNU Awk 4.1.1a' PACKAGE_BUGREPORT='bug-gawk@gnu.org' PACKAGE_URL='http://www.gnu.org/software/gawk/' @@ -1324,7 +1324,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures GNU Awk 4.1.1 to adapt to many kinds of systems. +\`configure' configures GNU Awk 4.1.1a to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1394,7 +1394,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GNU Awk 4.1.1:";; + short | recursive ) echo "Configuration of GNU Awk 4.1.1a:";; esac cat <<\_ACEOF @@ -1512,7 +1512,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -GNU Awk configure 4.1.1 +GNU Awk configure 4.1.1a generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2221,7 +2221,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by GNU Awk $as_me 4.1.1, which was +It was created by GNU Awk $as_me 4.1.1a, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3104,7 +3104,7 @@ fi # Define the identity of the package. PACKAGE='gawk' - VERSION='4.1.1' + VERSION='4.1.1a' cat >>confdefs.h <<_ACEOF @@ -11506,7 +11506,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by GNU Awk $as_me 4.1.1, which was +This file was extended by GNU Awk $as_me 4.1.1a, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -11574,7 +11574,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -GNU Awk config.status 4.1.1 +GNU Awk config.status 4.1.1a configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 95356171..b0817ba3 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ dnl dnl Process this file with autoconf to produce a configure script. -AC_INIT([GNU Awk], 4.1.1, bug-gawk@gnu.org, gawk) +AC_INIT([GNU Awk], 4.1.1a, bug-gawk@gnu.org, gawk) # This is a hack. Different versions of install on different systems # are just too different. Chuck it and use install-sh. diff --git a/pc/config.h b/pc/config.h index a2ed4a4f..85389eb2 100644 --- a/pc/config.h +++ b/pc/config.h @@ -423,7 +423,7 @@ #define PACKAGE_NAME "GNU Awk" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "GNU Awk 4.1.1" +#define PACKAGE_STRING "GNU Awk 4.1.1a" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "gawk" @@ -432,7 +432,7 @@ #define PACKAGE_URL "http://www.gnu.org/software/gawk/" /* Define to the version of this package. */ -#define PACKAGE_VERSION "4.1.1" +#define PACKAGE_VERSION "4.1.1a" /* Define to 1 if *printf supports %F format */ #undef PRINTF_HAS_F_FORMAT @@ -494,7 +494,7 @@ /* Version number of package */ -#define VERSION "4.1.1" +#define VERSION "4.1.1a" /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE -- cgit v1.2.3 From 931074569ea4a92ac2eddb19745a518f1f697193 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 21 May 2014 22:11:47 +0300 Subject: Small addition to make docbook post-processing easier. --- doc/ChangeLog | 5 +++++ doc/gawk.texi | 4 ++++ doc/gawktexi.in | 4 ++++ 3 files changed, 13 insertions(+) diff --git a/doc/ChangeLog b/doc/ChangeLog index 3edc0f37..23044677 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2014-05-21 Arnold D. Robbins + + * gawktexi.in: Add comments for where we need full xrefs in + docbook. + 2014-05-20 Arnold D. Robbins * gawktexi.in: Misc improvements for docbook, consistency diff --git a/doc/gawk.texi b/doc/gawk.texi index e0222443..a9c50684 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -1460,6 +1460,8 @@ should be of interest. This @value{DOCUMENT} is split into several parts, as follows: +@c FULLXREF ON + Part I describes the @command{awk} language and @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: @@ -1614,6 +1616,8 @@ present the licenses that cover the @command{gawk} source code and this @value{DOCUMENT}, respectively. @end ifclear +@c FULLXREF OFF + @node Conventions @unnumberedsec Typographical Conventions diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 3599b727..a380288a 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -1427,6 +1427,8 @@ should be of interest. This @value{DOCUMENT} is split into several parts, as follows: +@c FULLXREF ON + Part I describes the @command{awk} language and @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: @@ -1581,6 +1583,8 @@ present the licenses that cover the @command{gawk} source code and this @value{DOCUMENT}, respectively. @end ifclear +@c FULLXREF OFF + @node Conventions @unnumberedsec Typographical Conventions -- cgit v1.2.3 From cb3db09270b4caaddb0d606ec892841c149698eb Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 22 May 2014 06:11:32 +0300 Subject: Allow any redirected getline inside BEGINFILE/ENDFILE. --- ChangeLog | 8 + awkgram.c | 227 +++++++++--------- awkgram.y | 17 +- doc/ChangeLog | 5 + doc/gawk.info | 718 +++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 4 +- doc/gawktexi.in | 4 +- interpret.h | 4 - test/ChangeLog | 4 + test/lintwarn.ok | 4 +- 10 files changed, 495 insertions(+), 500 deletions(-) diff --git a/ChangeLog b/ChangeLog index f93f9066..1ceb79fa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2014-05-22 Andrew J. Schorr + + Allow any redirected getline inside BEGINFILE/ENDFILE. + + * awkgram.y (LEX_GETLINE): Only require a redirection and not also + a variable if getline is in a BEGINFILE or ENDFILE rule. + * interpret.h (Op_K_getline_redir): Remove check and fatal error. + 2014-05-20 Arnold D. Robbins * dfa.c (dfaexec): Minor sync with GNU grep. diff --git a/awkgram.c b/awkgram.c index 7d444fb8..b36816c9 100644 --- a/awkgram.c +++ b/awkgram.c @@ -666,12 +666,12 @@ static const yytype_uint16 yyrline[] = 1216, 1217, 1223, 1224, 1229, 1231, 1236, 1238, 1246, 1251, 1260, 1267, 1269, 1271, 1287, 1297, 1304, 1306, 1311, 1313, 1315, 1323, 1325, 1330, 1332, 1337, 1339, 1341, 1391, 1393, - 1395, 1397, 1399, 1401, 1403, 1405, 1428, 1433, 1438, 1463, - 1469, 1471, 1473, 1475, 1477, 1479, 1484, 1488, 1520, 1522, - 1528, 1534, 1547, 1548, 1549, 1554, 1559, 1563, 1567, 1582, - 1595, 1600, 1636, 1654, 1655, 1661, 1662, 1667, 1669, 1676, - 1693, 1710, 1712, 1719, 1724, 1732, 1742, 1754, 1763, 1767, - 1771, 1775, 1779, 1783, 1786, 1788, 1792, 1796, 1800 + 1395, 1397, 1399, 1401, 1403, 1405, 1419, 1424, 1429, 1454, + 1460, 1462, 1464, 1466, 1468, 1470, 1475, 1479, 1511, 1513, + 1519, 1525, 1538, 1539, 1540, 1545, 1550, 1554, 1558, 1573, + 1586, 1591, 1627, 1645, 1646, 1652, 1653, 1658, 1660, 1667, + 1684, 1701, 1703, 1710, 1715, 1723, 1733, 1745, 1754, 1758, + 1762, 1766, 1770, 1774, 1777, 1779, 1783, 1787, 1791 }; #endif @@ -3385,49 +3385,40 @@ regular_print: #line 1406 "awkgram.y" /* yacc.c:1646 */ { /* - * In BEGINFILE/ENDFILE, allow `getline var < file' + * In BEGINFILE/ENDFILE, allow `getline [var] < file' */ - if (rule == BEGINFILE || rule == ENDFILE) { - if ((yyvsp[-1]) != NULL && (yyvsp[0]) != NULL) - ; /* all ok */ - else { - if ((yyvsp[-1]) != NULL) - error_ln((yyvsp[-2])->source_line, - _("`getline var' invalid inside `%s' rule"), ruletab[rule]); - else - error_ln((yyvsp[-2])->source_line, - _("`getline' invalid inside `%s' rule"), ruletab[rule]); - } - } + if ((rule == BEGINFILE || rule == ENDFILE) && (yyvsp[0]) == NULL) + error_ln((yyvsp[-2])->source_line, + _("non-redirected `getline' invalid inside `%s' rule"), ruletab[rule]); if (do_lint && rule == END && (yyvsp[0]) == NULL) lintwarn_ln((yyvsp[-2])->source_line, _("non-redirected `getline' undefined inside END action")); (yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), redirect_input); } -#line 3409 "awkgram.c" /* yacc.c:1646 */ +#line 3400 "awkgram.c" /* yacc.c:1646 */ break; case 136: -#line 1429 "awkgram.y" /* yacc.c:1646 */ +#line 1420 "awkgram.y" /* yacc.c:1646 */ { (yyvsp[0])->opcode = Op_postincrement; (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0])); } -#line 3418 "awkgram.c" /* yacc.c:1646 */ +#line 3409 "awkgram.c" /* yacc.c:1646 */ break; case 137: -#line 1434 "awkgram.y" /* yacc.c:1646 */ +#line 1425 "awkgram.y" /* yacc.c:1646 */ { (yyvsp[0])->opcode = Op_postdecrement; (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0])); } -#line 3427 "awkgram.c" /* yacc.c:1646 */ +#line 3418 "awkgram.c" /* yacc.c:1646 */ break; case 138: -#line 1439 "awkgram.y" /* yacc.c:1646 */ +#line 1430 "awkgram.y" /* yacc.c:1646 */ { if (do_lint_old) { warning_ln((yyvsp[-1])->source_line, @@ -3447,64 +3438,64 @@ regular_print: (yyval) = list_append(list_merge(t, (yyvsp[0])), (yyvsp[-1])); } } -#line 3451 "awkgram.c" /* yacc.c:1646 */ +#line 3442 "awkgram.c" /* yacc.c:1646 */ break; case 139: -#line 1464 "awkgram.y" /* yacc.c:1646 */ +#line 1455 "awkgram.y" /* yacc.c:1646 */ { (yyval) = mk_getline((yyvsp[-1]), (yyvsp[0]), (yyvsp[-3]), (yyvsp[-2])->redir_type); bcfree((yyvsp[-2])); } -#line 3460 "awkgram.c" /* yacc.c:1646 */ +#line 3451 "awkgram.c" /* yacc.c:1646 */ break; case 140: -#line 1470 "awkgram.y" /* yacc.c:1646 */ +#line 1461 "awkgram.y" /* yacc.c:1646 */ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3466 "awkgram.c" /* yacc.c:1646 */ +#line 3457 "awkgram.c" /* yacc.c:1646 */ break; case 141: -#line 1472 "awkgram.y" /* yacc.c:1646 */ +#line 1463 "awkgram.y" /* yacc.c:1646 */ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3472 "awkgram.c" /* yacc.c:1646 */ +#line 3463 "awkgram.c" /* yacc.c:1646 */ break; case 142: -#line 1474 "awkgram.y" /* yacc.c:1646 */ +#line 1465 "awkgram.y" /* yacc.c:1646 */ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3478 "awkgram.c" /* yacc.c:1646 */ +#line 3469 "awkgram.c" /* yacc.c:1646 */ break; case 143: -#line 1476 "awkgram.y" /* yacc.c:1646 */ +#line 1467 "awkgram.y" /* yacc.c:1646 */ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3484 "awkgram.c" /* yacc.c:1646 */ +#line 3475 "awkgram.c" /* yacc.c:1646 */ break; case 144: -#line 1478 "awkgram.y" /* yacc.c:1646 */ +#line 1469 "awkgram.y" /* yacc.c:1646 */ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3490 "awkgram.c" /* yacc.c:1646 */ +#line 3481 "awkgram.c" /* yacc.c:1646 */ break; case 145: -#line 1480 "awkgram.y" /* yacc.c:1646 */ +#line 1471 "awkgram.y" /* yacc.c:1646 */ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3496 "awkgram.c" /* yacc.c:1646 */ +#line 3487 "awkgram.c" /* yacc.c:1646 */ break; case 146: -#line 1485 "awkgram.y" /* yacc.c:1646 */ +#line 1476 "awkgram.y" /* yacc.c:1646 */ { (yyval) = list_create((yyvsp[0])); } -#line 3504 "awkgram.c" /* yacc.c:1646 */ +#line 3495 "awkgram.c" /* yacc.c:1646 */ break; case 147: -#line 1489 "awkgram.y" /* yacc.c:1646 */ +#line 1480 "awkgram.y" /* yacc.c:1646 */ { if ((yyvsp[0])->opcode == Op_match_rec) { (yyvsp[0])->opcode = Op_nomatch; @@ -3536,37 +3527,37 @@ regular_print: } } } -#line 3540 "awkgram.c" /* yacc.c:1646 */ +#line 3531 "awkgram.c" /* yacc.c:1646 */ break; case 148: -#line 1521 "awkgram.y" /* yacc.c:1646 */ +#line 1512 "awkgram.y" /* yacc.c:1646 */ { (yyval) = (yyvsp[-1]); } -#line 3546 "awkgram.c" /* yacc.c:1646 */ +#line 3537 "awkgram.c" /* yacc.c:1646 */ break; case 149: -#line 1523 "awkgram.y" /* yacc.c:1646 */ +#line 1514 "awkgram.y" /* yacc.c:1646 */ { (yyval) = snode((yyvsp[-1]), (yyvsp[-3])); if ((yyval) == NULL) YYABORT; } -#line 3556 "awkgram.c" /* yacc.c:1646 */ +#line 3547 "awkgram.c" /* yacc.c:1646 */ break; case 150: -#line 1529 "awkgram.y" /* yacc.c:1646 */ +#line 1520 "awkgram.y" /* yacc.c:1646 */ { (yyval) = snode((yyvsp[-1]), (yyvsp[-3])); if ((yyval) == NULL) YYABORT; } -#line 3566 "awkgram.c" /* yacc.c:1646 */ +#line 3557 "awkgram.c" /* yacc.c:1646 */ break; case 151: -#line 1535 "awkgram.y" /* yacc.c:1646 */ +#line 1526 "awkgram.y" /* yacc.c:1646 */ { static bool warned = false; @@ -3579,45 +3570,45 @@ regular_print: if ((yyval) == NULL) YYABORT; } -#line 3583 "awkgram.c" /* yacc.c:1646 */ +#line 3574 "awkgram.c" /* yacc.c:1646 */ break; case 154: -#line 1550 "awkgram.y" /* yacc.c:1646 */ +#line 1541 "awkgram.y" /* yacc.c:1646 */ { (yyvsp[-1])->opcode = Op_preincrement; (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1])); } -#line 3592 "awkgram.c" /* yacc.c:1646 */ +#line 3583 "awkgram.c" /* yacc.c:1646 */ break; case 155: -#line 1555 "awkgram.y" /* yacc.c:1646 */ +#line 1546 "awkgram.y" /* yacc.c:1646 */ { (yyvsp[-1])->opcode = Op_predecrement; (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1])); } -#line 3601 "awkgram.c" /* yacc.c:1646 */ +#line 3592 "awkgram.c" /* yacc.c:1646 */ break; case 156: -#line 1560 "awkgram.y" /* yacc.c:1646 */ +#line 1551 "awkgram.y" /* yacc.c:1646 */ { (yyval) = list_create((yyvsp[0])); } -#line 3609 "awkgram.c" /* yacc.c:1646 */ +#line 3600 "awkgram.c" /* yacc.c:1646 */ break; case 157: -#line 1564 "awkgram.y" /* yacc.c:1646 */ +#line 1555 "awkgram.y" /* yacc.c:1646 */ { (yyval) = list_create((yyvsp[0])); } -#line 3617 "awkgram.c" /* yacc.c:1646 */ +#line 3608 "awkgram.c" /* yacc.c:1646 */ break; case 158: -#line 1568 "awkgram.y" /* yacc.c:1646 */ +#line 1559 "awkgram.y" /* yacc.c:1646 */ { if ((yyvsp[0])->lasti->opcode == Op_push_i && ((yyvsp[0])->lasti->memory->flags & (STRCUR|STRING)) == 0 @@ -3632,11 +3623,11 @@ regular_print: (yyval) = list_append((yyvsp[0]), (yyvsp[-1])); } } -#line 3636 "awkgram.c" /* yacc.c:1646 */ +#line 3627 "awkgram.c" /* yacc.c:1646 */ break; case 159: -#line 1583 "awkgram.y" /* yacc.c:1646 */ +#line 1574 "awkgram.y" /* yacc.c:1646 */ { /* * was: $$ = $2 @@ -3646,20 +3637,20 @@ regular_print: (yyvsp[-1])->memory = make_number(0.0); (yyval) = list_append((yyvsp[0]), (yyvsp[-1])); } -#line 3650 "awkgram.c" /* yacc.c:1646 */ +#line 3641 "awkgram.c" /* yacc.c:1646 */ break; case 160: -#line 1596 "awkgram.y" /* yacc.c:1646 */ +#line 1587 "awkgram.y" /* yacc.c:1646 */ { func_use((yyvsp[0])->lasti->func_name, FUNC_USE); (yyval) = (yyvsp[0]); } -#line 3659 "awkgram.c" /* yacc.c:1646 */ +#line 3650 "awkgram.c" /* yacc.c:1646 */ break; case 161: -#line 1601 "awkgram.y" /* yacc.c:1646 */ +#line 1592 "awkgram.y" /* yacc.c:1646 */ { /* indirect function call */ INSTRUCTION *f, *t; @@ -3692,11 +3683,11 @@ regular_print: (yyval) = list_prepend((yyvsp[0]), t); } -#line 3696 "awkgram.c" /* yacc.c:1646 */ +#line 3687 "awkgram.c" /* yacc.c:1646 */ break; case 162: -#line 1637 "awkgram.y" /* yacc.c:1646 */ +#line 1628 "awkgram.y" /* yacc.c:1646 */ { param_sanity((yyvsp[-1])); (yyvsp[-3])->opcode = Op_func_call; @@ -3710,49 +3701,49 @@ regular_print: (yyval) = list_append(t, (yyvsp[-3])); } } -#line 3714 "awkgram.c" /* yacc.c:1646 */ +#line 3705 "awkgram.c" /* yacc.c:1646 */ break; case 163: -#line 1654 "awkgram.y" /* yacc.c:1646 */ +#line 1645 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } -#line 3720 "awkgram.c" /* yacc.c:1646 */ +#line 3711 "awkgram.c" /* yacc.c:1646 */ break; case 164: -#line 1656 "awkgram.y" /* yacc.c:1646 */ +#line 1647 "awkgram.y" /* yacc.c:1646 */ { (yyval) = (yyvsp[0]); } -#line 3726 "awkgram.c" /* yacc.c:1646 */ +#line 3717 "awkgram.c" /* yacc.c:1646 */ break; case 165: -#line 1661 "awkgram.y" /* yacc.c:1646 */ +#line 1652 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } -#line 3732 "awkgram.c" /* yacc.c:1646 */ +#line 3723 "awkgram.c" /* yacc.c:1646 */ break; case 166: -#line 1663 "awkgram.y" /* yacc.c:1646 */ +#line 1654 "awkgram.y" /* yacc.c:1646 */ { (yyval) = (yyvsp[-1]); } -#line 3738 "awkgram.c" /* yacc.c:1646 */ +#line 3729 "awkgram.c" /* yacc.c:1646 */ break; case 167: -#line 1668 "awkgram.y" /* yacc.c:1646 */ +#line 1659 "awkgram.y" /* yacc.c:1646 */ { (yyval) = (yyvsp[0]); } -#line 3744 "awkgram.c" /* yacc.c:1646 */ +#line 3735 "awkgram.c" /* yacc.c:1646 */ break; case 168: -#line 1670 "awkgram.y" /* yacc.c:1646 */ +#line 1661 "awkgram.y" /* yacc.c:1646 */ { (yyval) = list_merge((yyvsp[-1]), (yyvsp[0])); } -#line 3752 "awkgram.c" /* yacc.c:1646 */ +#line 3743 "awkgram.c" /* yacc.c:1646 */ break; case 169: -#line 1677 "awkgram.y" /* yacc.c:1646 */ +#line 1668 "awkgram.y" /* yacc.c:1646 */ { INSTRUCTION *ip = (yyvsp[0])->lasti; int count = ip->sub_count; /* # of SUBSEP-seperated expressions */ @@ -3766,11 +3757,11 @@ regular_print: sub_counter++; /* count # of dimensions */ (yyval) = (yyvsp[0]); } -#line 3770 "awkgram.c" /* yacc.c:1646 */ +#line 3761 "awkgram.c" /* yacc.c:1646 */ break; case 170: -#line 1694 "awkgram.y" /* yacc.c:1646 */ +#line 1685 "awkgram.y" /* yacc.c:1646 */ { INSTRUCTION *t = (yyvsp[-1]); if ((yyvsp[-1]) == NULL) { @@ -3784,31 +3775,31 @@ regular_print: (yyvsp[0])->sub_count = count_expressions(&t, false); (yyval) = list_append(t, (yyvsp[0])); } -#line 3788 "awkgram.c" /* yacc.c:1646 */ +#line 3779 "awkgram.c" /* yacc.c:1646 */ break; case 171: -#line 1711 "awkgram.y" /* yacc.c:1646 */ +#line 1702 "awkgram.y" /* yacc.c:1646 */ { (yyval) = (yyvsp[0]); } -#line 3794 "awkgram.c" /* yacc.c:1646 */ +#line 3785 "awkgram.c" /* yacc.c:1646 */ break; case 172: -#line 1713 "awkgram.y" /* yacc.c:1646 */ +#line 1704 "awkgram.y" /* yacc.c:1646 */ { (yyval) = list_merge((yyvsp[-1]), (yyvsp[0])); } -#line 3802 "awkgram.c" /* yacc.c:1646 */ +#line 3793 "awkgram.c" /* yacc.c:1646 */ break; case 173: -#line 1720 "awkgram.y" /* yacc.c:1646 */ +#line 1711 "awkgram.y" /* yacc.c:1646 */ { (yyval) = (yyvsp[-1]); } -#line 3808 "awkgram.c" /* yacc.c:1646 */ +#line 3799 "awkgram.c" /* yacc.c:1646 */ break; case 174: -#line 1725 "awkgram.y" /* yacc.c:1646 */ +#line 1716 "awkgram.y" /* yacc.c:1646 */ { char *var_name = (yyvsp[0])->lextok; @@ -3816,22 +3807,22 @@ regular_print: (yyvsp[0])->memory = variable((yyvsp[0])->source_line, var_name, Node_var_new); (yyval) = list_create((yyvsp[0])); } -#line 3820 "awkgram.c" /* yacc.c:1646 */ +#line 3811 "awkgram.c" /* yacc.c:1646 */ break; case 175: -#line 1733 "awkgram.y" /* yacc.c:1646 */ +#line 1724 "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 3831 "awkgram.c" /* yacc.c:1646 */ +#line 3822 "awkgram.c" /* yacc.c:1646 */ break; case 176: -#line 1743 "awkgram.y" /* yacc.c:1646 */ +#line 1734 "awkgram.y" /* yacc.c:1646 */ { INSTRUCTION *ip = (yyvsp[0])->nexti; if (ip->opcode == Op_push @@ -3843,73 +3834,73 @@ regular_print: } else (yyval) = (yyvsp[0]); } -#line 3847 "awkgram.c" /* yacc.c:1646 */ +#line 3838 "awkgram.c" /* yacc.c:1646 */ break; case 177: -#line 1755 "awkgram.y" /* yacc.c:1646 */ +#line 1746 "awkgram.y" /* yacc.c:1646 */ { (yyval) = list_append((yyvsp[-1]), (yyvsp[-2])); if ((yyvsp[0]) != NULL) mk_assignment((yyvsp[-1]), NULL, (yyvsp[0])); } -#line 3857 "awkgram.c" /* yacc.c:1646 */ +#line 3848 "awkgram.c" /* yacc.c:1646 */ break; case 178: -#line 1764 "awkgram.y" /* yacc.c:1646 */ +#line 1755 "awkgram.y" /* yacc.c:1646 */ { (yyvsp[0])->opcode = Op_postincrement; } -#line 3865 "awkgram.c" /* yacc.c:1646 */ +#line 3856 "awkgram.c" /* yacc.c:1646 */ break; case 179: -#line 1768 "awkgram.y" /* yacc.c:1646 */ +#line 1759 "awkgram.y" /* yacc.c:1646 */ { (yyvsp[0])->opcode = Op_postdecrement; } -#line 3873 "awkgram.c" /* yacc.c:1646 */ +#line 3864 "awkgram.c" /* yacc.c:1646 */ break; case 180: -#line 1771 "awkgram.y" /* yacc.c:1646 */ +#line 1762 "awkgram.y" /* yacc.c:1646 */ { (yyval) = NULL; } -#line 3879 "awkgram.c" /* yacc.c:1646 */ +#line 3870 "awkgram.c" /* yacc.c:1646 */ break; case 182: -#line 1779 "awkgram.y" /* yacc.c:1646 */ +#line 1770 "awkgram.y" /* yacc.c:1646 */ { yyerrok; } -#line 3885 "awkgram.c" /* yacc.c:1646 */ +#line 3876 "awkgram.c" /* yacc.c:1646 */ break; case 183: -#line 1783 "awkgram.y" /* yacc.c:1646 */ +#line 1774 "awkgram.y" /* yacc.c:1646 */ { yyerrok; } -#line 3891 "awkgram.c" /* yacc.c:1646 */ +#line 3882 "awkgram.c" /* yacc.c:1646 */ break; case 186: -#line 1792 "awkgram.y" /* yacc.c:1646 */ +#line 1783 "awkgram.y" /* yacc.c:1646 */ { yyerrok; } -#line 3897 "awkgram.c" /* yacc.c:1646 */ +#line 3888 "awkgram.c" /* yacc.c:1646 */ break; case 187: -#line 1796 "awkgram.y" /* yacc.c:1646 */ +#line 1787 "awkgram.y" /* yacc.c:1646 */ { (yyval) = (yyvsp[0]); yyerrok; } -#line 3903 "awkgram.c" /* yacc.c:1646 */ +#line 3894 "awkgram.c" /* yacc.c:1646 */ break; case 188: -#line 1800 "awkgram.y" /* yacc.c:1646 */ +#line 1791 "awkgram.y" /* yacc.c:1646 */ { yyerrok; } -#line 3909 "awkgram.c" /* yacc.c:1646 */ +#line 3900 "awkgram.c" /* yacc.c:1646 */ break; -#line 3913 "awkgram.c" /* yacc.c:1646 */ +#line 3904 "awkgram.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -4137,7 +4128,7 @@ yyreturn: #endif return yyresult; } -#line 1802 "awkgram.y" /* yacc.c:1906 */ +#line 1793 "awkgram.y" /* yacc.c:1906 */ struct token { diff --git a/awkgram.y b/awkgram.y index 07131d22..906e6c8b 100644 --- a/awkgram.y +++ b/awkgram.y @@ -1405,21 +1405,12 @@ simp_exp | LEX_GETLINE opt_variable input_redir { /* - * In BEGINFILE/ENDFILE, allow `getline var < file' + * In BEGINFILE/ENDFILE, allow `getline [var] < file' */ - if (rule == BEGINFILE || rule == ENDFILE) { - if ($2 != NULL && $3 != NULL) - ; /* all ok */ - else { - if ($2 != NULL) - error_ln($1->source_line, - _("`getline var' invalid inside `%s' rule"), ruletab[rule]); - else - error_ln($1->source_line, - _("`getline' invalid inside `%s' rule"), ruletab[rule]); - } - } + if ((rule == BEGINFILE || rule == ENDFILE) && $3 == NULL) + error_ln($1->source_line, + _("non-redirected `getline' invalid inside `%s' rule"), ruletab[rule]); if (do_lint && rule == END && $3 == NULL) lintwarn_ln($1->source_line, _("non-redirected `getline' undefined inside END action")); diff --git a/doc/ChangeLog b/doc/ChangeLog index 23044677..a93ab771 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2014-05-22 Andrew J. Schorr + + * gawktexi.in (BEGINFILE/ENDFILE): Update doc for getline - any + redirected form is allowed inside BEGINFILE/ENDFILE. + 2014-05-21 Arnold D. Robbins * gawktexi.in: Add comments for where we need full xrefs in diff --git a/doc/gawk.info b/doc/gawk.info index 55cc9829..4852a58f 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -8849,7 +8849,7 @@ either a `BEGINFILE' or and `ENDFILE' rule. The `nextfile' statement but not inside an `ENDFILE' rule. The `getline' statement (*note Getline::) is restricted inside both -`BEGINFILE' and `ENDFILE'. Only the `getline VARIABLE < FILE' form is +`BEGINFILE' and `ENDFILE': only redirected forms of `getline' are allowed. `BEGINFILE' and `ENDFILE' are `gawk' extensions. In most other @@ -33382,363 +33382,363 @@ Node: Using BEGIN/END373150 Ref: Using BEGIN/END-Footnote-1375886 Node: I/O And BEGIN/END375992 Node: BEGINFILE/ENDFILE378277 -Node: Empty381213 -Node: Using Shell Variables381530 -Node: Action Overview383813 -Node: Statements386164 -Node: If Statement388018 -Node: While Statement389521 -Node: Do Statement391565 -Node: For Statement392721 -Node: Switch Statement395873 -Node: Break Statement397976 -Node: Continue Statement400031 -Node: Next Statement401824 -Node: Nextfile Statement404214 -Node: Exit Statement406869 -Node: Built-in Variables409273 -Node: User-modified410369 -Ref: User-modified-Footnote-1418054 -Node: Auto-set418116 -Ref: Auto-set-Footnote-1430681 -Ref: Auto-set-Footnote-2430886 -Node: ARGC and ARGV430942 -Node: Arrays434796 -Node: Array Basics436294 -Node: Array Intro437120 -Ref: figure-array-elements439093 -Node: Reference to Elements441500 -Node: Assigning Elements443773 -Node: Array Example444264 -Node: Scanning an Array445996 -Node: Controlling Scanning449011 -Ref: Controlling Scanning-Footnote-1454184 -Node: Delete454500 -Ref: Delete-Footnote-1457265 -Node: Numeric Array Subscripts457322 -Node: Uninitialized Subscripts459505 -Node: Multidimensional461130 -Node: Multiscanning464223 -Node: Arrays of Arrays465812 -Node: Functions470452 -Node: Built-in471271 -Node: Calling Built-in472349 -Node: Numeric Functions474337 -Ref: Numeric Functions-Footnote-1478171 -Ref: Numeric Functions-Footnote-2478528 -Ref: Numeric Functions-Footnote-3478576 -Node: String Functions478845 -Ref: String Functions-Footnote-1501856 -Ref: String Functions-Footnote-2501985 -Ref: String Functions-Footnote-3502233 -Node: Gory Details502320 -Ref: table-sub-escapes503989 -Ref: table-sub-posix-92505343 -Ref: table-sub-proposed506694 -Ref: table-posix-sub508048 -Ref: table-gensub-escapes509593 -Ref: Gory Details-Footnote-1510769 -Ref: Gory Details-Footnote-2510820 -Node: I/O Functions510971 -Ref: I/O Functions-Footnote-1518094 -Node: Time Functions518241 -Ref: Time Functions-Footnote-1528705 -Ref: Time Functions-Footnote-2528773 -Ref: Time Functions-Footnote-3528931 -Ref: Time Functions-Footnote-4529042 -Ref: Time Functions-Footnote-5529154 -Ref: Time Functions-Footnote-6529381 -Node: Bitwise Functions529647 -Ref: table-bitwise-ops530209 -Ref: Bitwise Functions-Footnote-1534454 -Node: Type Functions534638 -Node: I18N Functions535780 -Node: User-defined537425 -Node: Definition Syntax538229 -Ref: Definition Syntax-Footnote-1543154 -Node: Function Example543223 -Ref: Function Example-Footnote-1545867 -Node: Function Caveats545889 -Node: Calling A Function546407 -Node: Variable Scope547362 -Node: Pass By Value/Reference550350 -Node: Return Statement553858 -Node: Dynamic Typing556842 -Node: Indirect Calls557771 -Node: Library Functions567458 -Ref: Library Functions-Footnote-1570971 -Ref: Library Functions-Footnote-2571114 -Node: Library Names571285 -Ref: Library Names-Footnote-1574758 -Ref: Library Names-Footnote-2574978 -Node: General Functions575064 -Node: Strtonum Function576092 -Node: Assert Function579022 -Node: Round Function582348 -Node: Cliff Random Function583889 -Node: Ordinal Functions584905 -Ref: Ordinal Functions-Footnote-1587982 -Ref: Ordinal Functions-Footnote-2588234 -Node: Join Function588445 -Ref: Join Function-Footnote-1590216 -Node: Getlocaltime Function590416 -Node: Readfile Function594152 -Node: Data File Management595991 -Node: Filetrans Function596623 -Node: Rewind Function600692 -Node: File Checking602079 -Ref: File Checking-Footnote-1603211 -Node: Empty Files603412 -Node: Ignoring Assigns605642 -Node: Getopt Function607196 -Ref: Getopt Function-Footnote-1618499 -Node: Passwd Functions618702 -Ref: Passwd Functions-Footnote-1627681 -Node: Group Functions627769 -Ref: Group Functions-Footnote-1635711 -Node: Walking Arrays635924 -Node: Sample Programs638060 -Node: Running Examples638734 -Node: Clones639462 -Node: Cut Program640686 -Node: Egrep Program650539 -Ref: Egrep Program-Footnote-1658510 -Node: Id Program658620 -Node: Split Program662284 -Ref: Split Program-Footnote-1665822 -Node: Tee Program665950 -Node: Uniq Program668757 -Node: Wc Program676187 -Ref: Wc Program-Footnote-1680455 -Ref: Wc Program-Footnote-2680655 -Node: Miscellaneous Programs680747 -Node: Dupword Program681935 -Node: Alarm Program683966 -Node: Translate Program688773 -Ref: Translate Program-Footnote-1693164 -Ref: Translate Program-Footnote-2693434 -Node: Labels Program693568 -Ref: Labels Program-Footnote-1696939 -Node: Word Sorting697023 -Node: History Sorting701066 -Node: Extract Program702902 -Ref: Extract Program-Footnote-1710432 -Node: Simple Sed710561 -Node: Igawk Program713623 -Ref: Igawk Program-Footnote-1728798 -Ref: Igawk Program-Footnote-2728999 -Node: Anagram Program729137 -Node: Signature Program732205 -Node: Advanced Features733452 -Node: Nondecimal Data735338 -Node: Array Sorting736915 -Node: Controlling Array Traversal737612 -Node: Array Sorting Functions745892 -Ref: Array Sorting Functions-Footnote-1749799 -Node: Two-way I/O749993 -Ref: Two-way I/O-Footnote-1755509 -Node: TCP/IP Networking755591 -Node: Profiling758435 -Node: Internationalization765943 -Node: I18N and L10N767368 -Node: Explaining gettext768054 -Ref: Explaining gettext-Footnote-1773194 -Ref: Explaining gettext-Footnote-2773378 -Node: Programmer i18n773543 -Node: Translator i18n777768 -Node: String Extraction778562 -Ref: String Extraction-Footnote-1779523 -Node: Printf Ordering779609 -Ref: Printf Ordering-Footnote-1782391 -Node: I18N Portability782455 -Ref: I18N Portability-Footnote-1784904 -Node: I18N Example784967 -Ref: I18N Example-Footnote-1787689 -Node: Gawk I18N787761 -Node: Debugger788382 -Node: Debugging789353 -Node: Debugging Concepts789794 -Node: Debugging Terms791650 -Node: Awk Debugging794247 -Node: Sample Debugging Session795139 -Node: Debugger Invocation795659 -Node: Finding The Bug796992 -Node: List of Debugger Commands803474 -Node: Breakpoint Control804806 -Node: Debugger Execution Control808470 -Node: Viewing And Changing Data811830 -Node: Execution Stack815188 -Node: Debugger Info816701 -Node: Miscellaneous Debugger Commands820695 -Node: Readline Support825879 -Node: Limitations826771 -Node: Arbitrary Precision Arithmetic829019 -Ref: Arbitrary Precision Arithmetic-Footnote-1830668 -Node: General Arithmetic830816 -Node: Floating Point Issues832536 -Node: String Conversion Precision833417 -Ref: String Conversion Precision-Footnote-1835122 -Node: Unexpected Results835231 -Node: POSIX Floating Point Problems837384 -Ref: POSIX Floating Point Problems-Footnote-1841205 -Node: Integer Programming841243 -Node: Floating-point Programming843054 -Ref: Floating-point Programming-Footnote-1849382 -Ref: Floating-point Programming-Footnote-2849652 -Node: Floating-point Representation849916 -Node: Floating-point Context851081 -Ref: table-ieee-formats851920 -Node: Rounding Mode853304 -Ref: table-rounding-modes853783 -Ref: Rounding Mode-Footnote-1856798 -Node: Gawk and MPFR856977 -Node: Arbitrary Precision Floats858386 -Ref: Arbitrary Precision Floats-Footnote-1860829 -Node: Setting Precision861150 -Ref: table-predefined-precision-strings861834 -Node: Setting Rounding Mode863979 -Ref: table-gawk-rounding-modes864383 -Node: Floating-point Constants865570 -Node: Changing Precision867022 -Ref: Changing Precision-Footnote-1868414 -Node: Exact Arithmetic868588 -Node: Arbitrary Precision Integers871722 -Ref: Arbitrary Precision Integers-Footnote-1874737 -Node: Dynamic Extensions874884 -Node: Extension Intro876342 -Node: Plugin License877607 -Node: Extension Mechanism Outline878292 -Ref: figure-load-extension878716 -Ref: figure-load-new-function880201 -Ref: figure-call-new-function881203 -Node: Extension API Description883187 -Node: Extension API Functions Introduction884637 -Node: General Data Types889503 -Ref: General Data Types-Footnote-1895196 -Node: Requesting Values895495 -Ref: table-value-types-returned896232 -Node: Memory Allocation Functions897190 -Ref: Memory Allocation Functions-Footnote-1899936 -Node: Constructor Functions900032 -Node: Registration Functions901790 -Node: Extension Functions902475 -Node: Exit Callback Functions904777 -Node: Extension Version String906026 -Node: Input Parsers906676 -Node: Output Wrappers916479 -Node: Two-way processors920995 -Node: Printing Messages923198 -Ref: Printing Messages-Footnote-1924275 -Node: Updating `ERRNO'924427 -Node: Accessing Parameters925166 -Node: Symbol Table Access926396 -Node: Symbol table by name926910 -Node: Symbol table by cookie928886 -Ref: Symbol table by cookie-Footnote-1933019 -Node: Cached values933082 -Ref: Cached values-Footnote-1936587 -Node: Array Manipulation936678 -Ref: Array Manipulation-Footnote-1937776 -Node: Array Data Types937815 -Ref: Array Data Types-Footnote-1940518 -Node: Array Functions940610 -Node: Flattening Arrays944484 -Node: Creating Arrays951336 -Node: Extension API Variables956067 -Node: Extension Versioning956703 -Node: Extension API Informational Variables958604 -Node: Extension API Boilerplate959690 -Node: Finding Extensions963494 -Node: Extension Example964054 -Node: Internal File Description964784 -Node: Internal File Ops968875 -Ref: Internal File Ops-Footnote-1980421 -Node: Using Internal File Ops980561 -Ref: Using Internal File Ops-Footnote-1982908 -Node: Extension Samples983174 -Node: Extension Sample File Functions984698 -Node: Extension Sample Fnmatch992265 -Node: Extension Sample Fork993744 -Node: Extension Sample Inplace994957 -Node: Extension Sample Ord996735 -Node: Extension Sample Readdir997571 -Ref: table-readdir-file-types998426 -Node: Extension Sample Revout999225 -Node: Extension Sample Rev2way999816 -Node: Extension Sample Read write array1000557 -Node: Extension Sample Readfile1002436 -Node: Extension Sample API Tests1003536 -Node: Extension Sample Time1004061 -Node: gawkextlib1005376 -Node: Language History1008157 -Node: V7/SVR3.11009750 -Node: SVR41012070 -Node: POSIX1013512 -Node: BTL1014898 -Node: POSIX/GNU1015632 -Node: Feature History1021231 -Node: Common Extensions1034207 -Node: Ranges and Locales1035519 -Ref: Ranges and Locales-Footnote-11040136 -Ref: Ranges and Locales-Footnote-21040163 -Ref: Ranges and Locales-Footnote-31040397 -Node: Contributors1040618 -Node: Installation1045999 -Node: Gawk Distribution1046893 -Node: Getting1047377 -Node: Extracting1048203 -Node: Distribution contents1049895 -Node: Unix Installation1055616 -Node: Quick Installation1056233 -Node: Additional Configuration Options1058679 -Node: Configuration Philosophy1060415 -Node: Non-Unix Installation1062769 -Node: PC Installation1063227 -Node: PC Binary Installation1064538 -Node: PC Compiling1066386 -Node: PC Testing1069346 -Node: PC Using1070522 -Node: Cygwin1074690 -Node: MSYS1075499 -Node: VMS Installation1076013 -Node: VMS Compilation1076809 -Ref: VMS Compilation-Footnote-11078061 -Node: VMS Dynamic Extensions1078119 -Node: VMS Installation Details1079492 -Node: VMS Running1081743 -Node: VMS GNV1084577 -Node: VMS Old Gawk1085300 -Node: Bugs1085770 -Node: Other Versions1089688 -Node: Notes1095772 -Node: Compatibility Mode1096572 -Node: Additions1097355 -Node: Accessing The Source1098282 -Node: Adding Code1099722 -Node: New Ports1105767 -Node: Derived Files1109902 -Ref: Derived Files-Footnote-11115223 -Ref: Derived Files-Footnote-21115257 -Ref: Derived Files-Footnote-31115857 -Node: Future Extensions1115955 -Node: Implementation Limitations1116538 -Node: Extension Design1117786 -Node: Old Extension Problems1118940 -Ref: Old Extension Problems-Footnote-11120448 -Node: Extension New Mechanism Goals1120505 -Ref: Extension New Mechanism Goals-Footnote-11123870 -Node: Extension Other Design Decisions1124056 -Node: Extension Future Growth1126162 -Node: Old Extension Mechanism1126998 -Node: Basic Concepts1128738 -Node: Basic High Level1129419 -Ref: figure-general-flow1129691 -Ref: figure-process-flow1130290 -Ref: Basic High Level-Footnote-11133519 -Node: Basic Data Typing1133704 -Node: Glossary1137059 -Node: Copying1162290 -Node: GNU Free Documentation License1199846 -Node: Index1224982 +Node: Empty381208 +Node: Using Shell Variables381525 +Node: Action Overview383808 +Node: Statements386159 +Node: If Statement388013 +Node: While Statement389516 +Node: Do Statement391560 +Node: For Statement392716 +Node: Switch Statement395868 +Node: Break Statement397971 +Node: Continue Statement400026 +Node: Next Statement401819 +Node: Nextfile Statement404209 +Node: Exit Statement406864 +Node: Built-in Variables409268 +Node: User-modified410364 +Ref: User-modified-Footnote-1418049 +Node: Auto-set418111 +Ref: Auto-set-Footnote-1430676 +Ref: Auto-set-Footnote-2430881 +Node: ARGC and ARGV430937 +Node: Arrays434791 +Node: Array Basics436289 +Node: Array Intro437115 +Ref: figure-array-elements439088 +Node: Reference to Elements441495 +Node: Assigning Elements443768 +Node: Array Example444259 +Node: Scanning an Array445991 +Node: Controlling Scanning449006 +Ref: Controlling Scanning-Footnote-1454179 +Node: Delete454495 +Ref: Delete-Footnote-1457260 +Node: Numeric Array Subscripts457317 +Node: Uninitialized Subscripts459500 +Node: Multidimensional461125 +Node: Multiscanning464218 +Node: Arrays of Arrays465807 +Node: Functions470447 +Node: Built-in471266 +Node: Calling Built-in472344 +Node: Numeric Functions474332 +Ref: Numeric Functions-Footnote-1478166 +Ref: Numeric Functions-Footnote-2478523 +Ref: Numeric Functions-Footnote-3478571 +Node: String Functions478840 +Ref: String Functions-Footnote-1501851 +Ref: String Functions-Footnote-2501980 +Ref: String Functions-Footnote-3502228 +Node: Gory Details502315 +Ref: table-sub-escapes503984 +Ref: table-sub-posix-92505338 +Ref: table-sub-proposed506689 +Ref: table-posix-sub508043 +Ref: table-gensub-escapes509588 +Ref: Gory Details-Footnote-1510764 +Ref: Gory Details-Footnote-2510815 +Node: I/O Functions510966 +Ref: I/O Functions-Footnote-1518089 +Node: Time Functions518236 +Ref: Time Functions-Footnote-1528700 +Ref: Time Functions-Footnote-2528768 +Ref: Time Functions-Footnote-3528926 +Ref: Time Functions-Footnote-4529037 +Ref: Time Functions-Footnote-5529149 +Ref: Time Functions-Footnote-6529376 +Node: Bitwise Functions529642 +Ref: table-bitwise-ops530204 +Ref: Bitwise Functions-Footnote-1534449 +Node: Type Functions534633 +Node: I18N Functions535775 +Node: User-defined537420 +Node: Definition Syntax538224 +Ref: Definition Syntax-Footnote-1543149 +Node: Function Example543218 +Ref: Function Example-Footnote-1545862 +Node: Function Caveats545884 +Node: Calling A Function546402 +Node: Variable Scope547357 +Node: Pass By Value/Reference550345 +Node: Return Statement553853 +Node: Dynamic Typing556837 +Node: Indirect Calls557766 +Node: Library Functions567453 +Ref: Library Functions-Footnote-1570966 +Ref: Library Functions-Footnote-2571109 +Node: Library Names571280 +Ref: Library Names-Footnote-1574753 +Ref: Library Names-Footnote-2574973 +Node: General Functions575059 +Node: Strtonum Function576087 +Node: Assert Function579017 +Node: Round Function582343 +Node: Cliff Random Function583884 +Node: Ordinal Functions584900 +Ref: Ordinal Functions-Footnote-1587977 +Ref: Ordinal Functions-Footnote-2588229 +Node: Join Function588440 +Ref: Join Function-Footnote-1590211 +Node: Getlocaltime Function590411 +Node: Readfile Function594147 +Node: Data File Management595986 +Node: Filetrans Function596618 +Node: Rewind Function600687 +Node: File Checking602074 +Ref: File Checking-Footnote-1603206 +Node: Empty Files603407 +Node: Ignoring Assigns605637 +Node: Getopt Function607191 +Ref: Getopt Function-Footnote-1618494 +Node: Passwd Functions618697 +Ref: Passwd Functions-Footnote-1627676 +Node: Group Functions627764 +Ref: Group Functions-Footnote-1635706 +Node: Walking Arrays635919 +Node: Sample Programs638055 +Node: Running Examples638729 +Node: Clones639457 +Node: Cut Program640681 +Node: Egrep Program650534 +Ref: Egrep Program-Footnote-1658505 +Node: Id Program658615 +Node: Split Program662279 +Ref: Split Program-Footnote-1665817 +Node: Tee Program665945 +Node: Uniq Program668752 +Node: Wc Program676182 +Ref: Wc Program-Footnote-1680450 +Ref: Wc Program-Footnote-2680650 +Node: Miscellaneous Programs680742 +Node: Dupword Program681930 +Node: Alarm Program683961 +Node: Translate Program688768 +Ref: Translate Program-Footnote-1693159 +Ref: Translate Program-Footnote-2693429 +Node: Labels Program693563 +Ref: Labels Program-Footnote-1696934 +Node: Word Sorting697018 +Node: History Sorting701061 +Node: Extract Program702897 +Ref: Extract Program-Footnote-1710427 +Node: Simple Sed710556 +Node: Igawk Program713618 +Ref: Igawk Program-Footnote-1728793 +Ref: Igawk Program-Footnote-2728994 +Node: Anagram Program729132 +Node: Signature Program732200 +Node: Advanced Features733447 +Node: Nondecimal Data735333 +Node: Array Sorting736910 +Node: Controlling Array Traversal737607 +Node: Array Sorting Functions745887 +Ref: Array Sorting Functions-Footnote-1749794 +Node: Two-way I/O749988 +Ref: Two-way I/O-Footnote-1755504 +Node: TCP/IP Networking755586 +Node: Profiling758430 +Node: Internationalization765938 +Node: I18N and L10N767363 +Node: Explaining gettext768049 +Ref: Explaining gettext-Footnote-1773189 +Ref: Explaining gettext-Footnote-2773373 +Node: Programmer i18n773538 +Node: Translator i18n777763 +Node: String Extraction778557 +Ref: String Extraction-Footnote-1779518 +Node: Printf Ordering779604 +Ref: Printf Ordering-Footnote-1782386 +Node: I18N Portability782450 +Ref: I18N Portability-Footnote-1784899 +Node: I18N Example784962 +Ref: I18N Example-Footnote-1787684 +Node: Gawk I18N787756 +Node: Debugger788377 +Node: Debugging789348 +Node: Debugging Concepts789789 +Node: Debugging Terms791645 +Node: Awk Debugging794242 +Node: Sample Debugging Session795134 +Node: Debugger Invocation795654 +Node: Finding The Bug796987 +Node: List of Debugger Commands803469 +Node: Breakpoint Control804801 +Node: Debugger Execution Control808465 +Node: Viewing And Changing Data811825 +Node: Execution Stack815183 +Node: Debugger Info816696 +Node: Miscellaneous Debugger Commands820690 +Node: Readline Support825874 +Node: Limitations826766 +Node: Arbitrary Precision Arithmetic829014 +Ref: Arbitrary Precision Arithmetic-Footnote-1830663 +Node: General Arithmetic830811 +Node: Floating Point Issues832531 +Node: String Conversion Precision833412 +Ref: String Conversion Precision-Footnote-1835117 +Node: Unexpected Results835226 +Node: POSIX Floating Point Problems837379 +Ref: POSIX Floating Point Problems-Footnote-1841200 +Node: Integer Programming841238 +Node: Floating-point Programming843049 +Ref: Floating-point Programming-Footnote-1849377 +Ref: Floating-point Programming-Footnote-2849647 +Node: Floating-point Representation849911 +Node: Floating-point Context851076 +Ref: table-ieee-formats851915 +Node: Rounding Mode853299 +Ref: table-rounding-modes853778 +Ref: Rounding Mode-Footnote-1856793 +Node: Gawk and MPFR856972 +Node: Arbitrary Precision Floats858381 +Ref: Arbitrary Precision Floats-Footnote-1860824 +Node: Setting Precision861145 +Ref: table-predefined-precision-strings861829 +Node: Setting Rounding Mode863974 +Ref: table-gawk-rounding-modes864378 +Node: Floating-point Constants865565 +Node: Changing Precision867017 +Ref: Changing Precision-Footnote-1868409 +Node: Exact Arithmetic868583 +Node: Arbitrary Precision Integers871717 +Ref: Arbitrary Precision Integers-Footnote-1874732 +Node: Dynamic Extensions874879 +Node: Extension Intro876337 +Node: Plugin License877602 +Node: Extension Mechanism Outline878287 +Ref: figure-load-extension878711 +Ref: figure-load-new-function880196 +Ref: figure-call-new-function881198 +Node: Extension API Description883182 +Node: Extension API Functions Introduction884632 +Node: General Data Types889498 +Ref: General Data Types-Footnote-1895191 +Node: Requesting Values895490 +Ref: table-value-types-returned896227 +Node: Memory Allocation Functions897185 +Ref: Memory Allocation Functions-Footnote-1899931 +Node: Constructor Functions900027 +Node: Registration Functions901785 +Node: Extension Functions902470 +Node: Exit Callback Functions904772 +Node: Extension Version String906021 +Node: Input Parsers906671 +Node: Output Wrappers916474 +Node: Two-way processors920990 +Node: Printing Messages923193 +Ref: Printing Messages-Footnote-1924270 +Node: Updating `ERRNO'924422 +Node: Accessing Parameters925161 +Node: Symbol Table Access926391 +Node: Symbol table by name926905 +Node: Symbol table by cookie928881 +Ref: Symbol table by cookie-Footnote-1933014 +Node: Cached values933077 +Ref: Cached values-Footnote-1936582 +Node: Array Manipulation936673 +Ref: Array Manipulation-Footnote-1937771 +Node: Array Data Types937810 +Ref: Array Data Types-Footnote-1940513 +Node: Array Functions940605 +Node: Flattening Arrays944479 +Node: Creating Arrays951331 +Node: Extension API Variables956062 +Node: Extension Versioning956698 +Node: Extension API Informational Variables958599 +Node: Extension API Boilerplate959685 +Node: Finding Extensions963489 +Node: Extension Example964049 +Node: Internal File Description964779 +Node: Internal File Ops968870 +Ref: Internal File Ops-Footnote-1980416 +Node: Using Internal File Ops980556 +Ref: Using Internal File Ops-Footnote-1982903 +Node: Extension Samples983169 +Node: Extension Sample File Functions984693 +Node: Extension Sample Fnmatch992260 +Node: Extension Sample Fork993739 +Node: Extension Sample Inplace994952 +Node: Extension Sample Ord996730 +Node: Extension Sample Readdir997566 +Ref: table-readdir-file-types998421 +Node: Extension Sample Revout999220 +Node: Extension Sample Rev2way999811 +Node: Extension Sample Read write array1000552 +Node: Extension Sample Readfile1002431 +Node: Extension Sample API Tests1003531 +Node: Extension Sample Time1004056 +Node: gawkextlib1005371 +Node: Language History1008152 +Node: V7/SVR3.11009745 +Node: SVR41012065 +Node: POSIX1013507 +Node: BTL1014893 +Node: POSIX/GNU1015627 +Node: Feature History1021226 +Node: Common Extensions1034202 +Node: Ranges and Locales1035514 +Ref: Ranges and Locales-Footnote-11040131 +Ref: Ranges and Locales-Footnote-21040158 +Ref: Ranges and Locales-Footnote-31040392 +Node: Contributors1040613 +Node: Installation1045994 +Node: Gawk Distribution1046888 +Node: Getting1047372 +Node: Extracting1048198 +Node: Distribution contents1049890 +Node: Unix Installation1055611 +Node: Quick Installation1056228 +Node: Additional Configuration Options1058674 +Node: Configuration Philosophy1060410 +Node: Non-Unix Installation1062764 +Node: PC Installation1063222 +Node: PC Binary Installation1064533 +Node: PC Compiling1066381 +Node: PC Testing1069341 +Node: PC Using1070517 +Node: Cygwin1074685 +Node: MSYS1075494 +Node: VMS Installation1076008 +Node: VMS Compilation1076804 +Ref: VMS Compilation-Footnote-11078056 +Node: VMS Dynamic Extensions1078114 +Node: VMS Installation Details1079487 +Node: VMS Running1081738 +Node: VMS GNV1084572 +Node: VMS Old Gawk1085295 +Node: Bugs1085765 +Node: Other Versions1089683 +Node: Notes1095767 +Node: Compatibility Mode1096567 +Node: Additions1097350 +Node: Accessing The Source1098277 +Node: Adding Code1099717 +Node: New Ports1105762 +Node: Derived Files1109897 +Ref: Derived Files-Footnote-11115218 +Ref: Derived Files-Footnote-21115252 +Ref: Derived Files-Footnote-31115852 +Node: Future Extensions1115950 +Node: Implementation Limitations1116533 +Node: Extension Design1117781 +Node: Old Extension Problems1118935 +Ref: Old Extension Problems-Footnote-11120443 +Node: Extension New Mechanism Goals1120500 +Ref: Extension New Mechanism Goals-Footnote-11123865 +Node: Extension Other Design Decisions1124051 +Node: Extension Future Growth1126157 +Node: Old Extension Mechanism1126993 +Node: Basic Concepts1128733 +Node: Basic High Level1129414 +Ref: figure-general-flow1129686 +Ref: figure-process-flow1130285 +Ref: Basic High Level-Footnote-11133514 +Node: Basic Data Typing1133699 +Node: Glossary1137054 +Node: Copying1162285 +Node: GNU Free Documentation License1199841 +Node: Index1224977  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index a9c50684..fc12bff0 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -12827,8 +12827,8 @@ statement (@pxref{Nextfile Statement}) is allowed only inside a @cindex @code{getline} statement, @code{BEGINFILE}/@code{ENDFILE} patterns and The @code{getline} statement (@pxref{Getline}) is restricted inside -both @code{BEGINFILE} and @code{ENDFILE}. Only the @samp{getline -@var{variable} < @var{file}} form is allowed. +both @code{BEGINFILE} and @code{ENDFILE}: only redirected +forms of @code{getline} are allowed. @code{BEGINFILE} and @code{ENDFILE} are @command{gawk} extensions. In most other @command{awk} implementations, or if @command{gawk} is in diff --git a/doc/gawktexi.in b/doc/gawktexi.in index a380288a..63a9851e 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -12207,8 +12207,8 @@ statement (@pxref{Nextfile Statement}) is allowed only inside a @cindex @code{getline} statement, @code{BEGINFILE}/@code{ENDFILE} patterns and The @code{getline} statement (@pxref{Getline}) is restricted inside -both @code{BEGINFILE} and @code{ENDFILE}. Only the @samp{getline -@var{variable} < @var{file}} form is allowed. +both @code{BEGINFILE} and @code{ENDFILE}: only redirected +forms of @code{getline} are allowed. @code{BEGINFILE} and @code{ENDFILE} are @command{gawk} extensions. In most other @command{awk} implementations, or if @command{gawk} is in diff --git a/interpret.h b/interpret.h index 29feb821..27f194ae 100644 --- a/interpret.h +++ b/interpret.h @@ -1098,10 +1098,6 @@ match_re: JUMPTO(ni); case Op_K_getline_redir: - if ((currule == BEGINFILE || currule == ENDFILE) - && pc->into_var == false - && pc->redir_type == redirect_input) - fatal(_("`getline' invalid inside `%s' rule"), ruletab[currule]); r = do_getline_redir(pc->into_var, pc->redir_type); PUSH(r); break; diff --git a/test/ChangeLog b/test/ChangeLog index 9bd0540b..4af051f0 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2014-05-22 Andrew J. Schorr + + * lintwarn.ok: Updated. + 2014-05-13 Arnold D. Robbins * Makefile.am (EXTRA_DIST): Forgot dbugeval.ok. Ooops. diff --git a/test/lintwarn.ok b/test/lintwarn.ok index ec87612f..bc5226e6 100644 --- a/test/lintwarn.ok +++ b/test/lintwarn.ok @@ -1,6 +1,6 @@ gawk: lintwarn.awk:2: warning: `BEGINFILE' is a gawk extension -gawk: lintwarn.awk:3: error: `getline var' invalid inside `BEGINFILE' rule -gawk: lintwarn.awk:4: error: `getline' invalid inside `BEGINFILE' rule +gawk: lintwarn.awk:3: error: non-redirected `getline' invalid inside `BEGINFILE' rule +gawk: lintwarn.awk:4: error: non-redirected `getline' invalid inside `BEGINFILE' rule gawk: lintwarn.awk:8: warning: statement may have no effect gawk: lintwarn.awk:9: warning: plain `print' in BEGIN or END rule should probably be `print ""' gawk: lintwarn.awk:10: error: `nextfile' used in BEGIN action -- cgit v1.2.3 From a9772e81b3bdf78c2f9f26cbd03eecfaaecafa38 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 25 May 2014 06:06:14 +0300 Subject: Add a small note on staying current. --- doc/ChangeLog | 4 ++++ doc/gawk.texi | 17 +++++++++++++++++ doc/gawktexi.in | 17 +++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/doc/ChangeLog b/doc/ChangeLog index a93ab771..fe9c1122 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-05-24 Arnold D. Robbins + + * gawktexi.in (Staying current): New section. + 2014-05-22 Andrew J. Schorr * gawktexi.in (BEGINFILE/ENDFILE): Update doc for getline - any diff --git a/doc/gawk.texi b/doc/gawk.texi index fc12bff0..f8b58bd8 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -1272,6 +1272,9 @@ has been removed.) * Conventions:: Typographical Conventions. * Manual History:: Brief history of the GNU project and this @value{DOCUMENT}. +@ifset FOR_PRINT +* Staying current:: How to keep up. +@end ifset * How To Contribute:: Helping to save the world. * Acknowledgments:: Acknowledgments. @end menu @@ -1864,6 +1867,20 @@ version comes with the @command{gawk} distribution from the FSF. If you find an error in this @value{DOCUMENT}, please report it! @xref{Bugs}, for information on submitting problem reports electronically. +@ifset FOR_PRINT +@node Staying current +@unnumberedsec How to Stay Current + +It may be you have a version of @command{gawk} which is newer than the +one described in this @value{DOCUMENT}. 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 +each release. + +You can then look at the @uref{http://www.gnu.org/software/gawk/manual/, +online version} of this @value{DOCUMENT} to read about any new features. +@end ifset + @ifclear FOR_PRINT @node How To Contribute @unnumberedsec How to Contribute diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 63a9851e..c37034e3 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -1267,6 +1267,9 @@ has been removed.) * Conventions:: Typographical Conventions. * Manual History:: Brief history of the GNU project and this @value{DOCUMENT}. +@ifset FOR_PRINT +* Staying current:: How to keep up. +@end ifset * How To Contribute:: Helping to save the world. * Acknowledgments:: Acknowledgments. @end menu @@ -1831,6 +1834,20 @@ version comes with the @command{gawk} distribution from the FSF. If you find an error in this @value{DOCUMENT}, please report it! @xref{Bugs}, for information on submitting problem reports electronically. +@ifset FOR_PRINT +@node Staying current +@unnumberedsec How to Stay Current + +It may be you have a version of @command{gawk} which is newer than the +one described in this @value{DOCUMENT}. 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 +each release. + +You can then look at the @uref{http://www.gnu.org/software/gawk/manual/, +online version} of this @value{DOCUMENT} to read about any new features. +@end ifset + @ifclear FOR_PRINT @node How To Contribute @unnumberedsec How to Contribute -- cgit v1.2.3 From 4e18efb370c2e688c35b64270e1bcb625ea3abb0 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 25 May 2014 06:21:55 +0300 Subject: Edits through Appendix A. --- doc/ChangeLog | 4 ++ doc/gawk.info | 168 ++++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 38 +++++++++---- doc/gawktexi.in | 38 +++++++++---- 4 files changed, 141 insertions(+), 107 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index fe9c1122..dac82608 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-05-25 Arnold D. Robbins + + * gawktexi.in: Edits through Appendix A. + 2014-05-24 Arnold D. Robbins * gawktexi.in (Staying current): New section. diff --git a/doc/gawk.info b/doc/gawk.info index 4852a58f..48a8e9a4 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -25090,7 +25090,7 @@ the POSIX specification. Many long-time `awk' users learned `awk' programming with the original `awk' implementation in Version 7 Unix. (This implementation was the basis for `awk' in Berkeley Unix, through 4.3-Reno. Subsequent versions of Berkeley Unix, and some systems -derived from 4.4BSD-Lite, use various versions of `gawk' for their +derived from 4.4BSD-Lite, used various versions of `gawk' for their `awk'.) This major node briefly describes the evolution of the `awk' language, with cross-references to other parts of the Info file where you can find more information. @@ -25532,8 +25532,8 @@ in POSIX `awk', in the order they were added to `gawk'. * The `next file' statement became `nextfile' (*note Nextfile Statement::). - * The `fflush()' function from the Bell Laboratories research - version of `awk' (*note I/O Functions::). + * The `fflush()' function from Brian Kernighan's `awk' (then at Bell + Laboratories; *note I/O Functions::). * New command line options: @@ -25541,8 +25541,9 @@ in POSIX `awk', in the order they were added to `gawk'. available in the original Version 7 Unix version of `awk' (*note V7/SVR3.1::). - - The `-m' option from the Bell Laboratories research version - of `awk' This was later removed. + - The `-m' option from Brian Kernighan's `awk'. (He was still + at Bell Laboratories at the time.) This was later removed + from both his `awk' and from `gawk'. - The `--re-interval' option to provide interval expressions in regexps (*note Regexp Operators::). @@ -25553,7 +25554,7 @@ in POSIX `awk', in the order they were added to `gawk'. * The use of GNU Autoconf to control the configuration process (*note Quick Installation::). - * Amiga support. + * Amiga support. This has since been removed. Version 3.1 of `gawk' introduced the following features: @@ -25644,7 +25645,8 @@ in POSIX `awk', in the order they were added to `gawk'. * Tandem support. This was later removed. - * The Atari port became officially unsupported. + * The Atari port became officially unsupported and was later removed + entirely. * The source code changed to use ISO C standard-style function definitions. @@ -25706,8 +25708,8 @@ in POSIX `awk', in the order they were added to `gawk'. output redirections (*note I/O Functions::). * The `isarray()' function which distinguishes if an item is an array - or not, to make it possible to traverse multidimensional arrays - (*note Type Functions::). + or not, to make it possible to traverse arrays of arrays (*note + Type Functions::). * The `patsplit()' function which gives the same capability as `FPAT', for splitting (*note String Functions::). @@ -26008,8 +26010,8 @@ Info file, in approximate chronological order: * Michal Jaegermann provided the port to Atari systems and its documentation. (This port is no longer supported.) He continues - to provide portability checking with DEC Alpha systems, and has - done a lot of work to make sure `gawk' works on non-32-bit systems. + to provide portability checking, and has done a lot of work to + make sure `gawk' works on non-32-bit systems. * Fred Fish provided the port to Amiga systems and its documentation. (With Fred's sad passing, this is no longer supported.) @@ -26074,8 +26076,8 @@ Info file, in approximate chronological order: - The modifications to convert `gawk' into a byte-code interpreter, including the debugger. - - The addition of true multidimensional arrays. *note Arrays - of Arrays::. + - The addition of true arrays of arrays. *note Arrays of + Arrays::. - The additional modifications for support of arbitrary precision arithmetic. @@ -32153,7 +32155,7 @@ Index (line 19) * next debugger command: Debugger Execution Control. (line 43) -* next file statement: Feature History. (line 168) +* next file statement: Feature History. (line 169) * next statement <1>: Next Statement. (line 6) * next statement: Boolean Ops. (line 85) * next statement, BEGIN/END patterns and: I/O And BEGIN/END. (line 37) @@ -33671,74 +33673,74 @@ Node: Extension Sample API Tests1003531 Node: Extension Sample Time1004056 Node: gawkextlib1005371 Node: Language History1008152 -Node: V7/SVR3.11009745 -Node: SVR41012065 -Node: POSIX1013507 -Node: BTL1014893 -Node: POSIX/GNU1015627 -Node: Feature History1021226 -Node: Common Extensions1034202 -Node: Ranges and Locales1035514 -Ref: Ranges and Locales-Footnote-11040131 -Ref: Ranges and Locales-Footnote-21040158 -Ref: Ranges and Locales-Footnote-31040392 -Node: Contributors1040613 -Node: Installation1045994 -Node: Gawk Distribution1046888 -Node: Getting1047372 -Node: Extracting1048198 -Node: Distribution contents1049890 -Node: Unix Installation1055611 -Node: Quick Installation1056228 -Node: Additional Configuration Options1058674 -Node: Configuration Philosophy1060410 -Node: Non-Unix Installation1062764 -Node: PC Installation1063222 -Node: PC Binary Installation1064533 -Node: PC Compiling1066381 -Node: PC Testing1069341 -Node: PC Using1070517 -Node: Cygwin1074685 -Node: MSYS1075494 -Node: VMS Installation1076008 -Node: VMS Compilation1076804 -Ref: VMS Compilation-Footnote-11078056 -Node: VMS Dynamic Extensions1078114 -Node: VMS Installation Details1079487 -Node: VMS Running1081738 -Node: VMS GNV1084572 -Node: VMS Old Gawk1085295 -Node: Bugs1085765 -Node: Other Versions1089683 -Node: Notes1095767 -Node: Compatibility Mode1096567 -Node: Additions1097350 -Node: Accessing The Source1098277 -Node: Adding Code1099717 -Node: New Ports1105762 -Node: Derived Files1109897 -Ref: Derived Files-Footnote-11115218 -Ref: Derived Files-Footnote-21115252 -Ref: Derived Files-Footnote-31115852 -Node: Future Extensions1115950 -Node: Implementation Limitations1116533 -Node: Extension Design1117781 -Node: Old Extension Problems1118935 -Ref: Old Extension Problems-Footnote-11120443 -Node: Extension New Mechanism Goals1120500 -Ref: Extension New Mechanism Goals-Footnote-11123865 -Node: Extension Other Design Decisions1124051 -Node: Extension Future Growth1126157 -Node: Old Extension Mechanism1126993 -Node: Basic Concepts1128733 -Node: Basic High Level1129414 -Ref: figure-general-flow1129686 -Ref: figure-process-flow1130285 -Ref: Basic High Level-Footnote-11133514 -Node: Basic Data Typing1133699 -Node: Glossary1137054 -Node: Copying1162285 -Node: GNU Free Documentation License1199841 -Node: Index1224977 +Node: V7/SVR3.11009746 +Node: SVR41012066 +Node: POSIX1013508 +Node: BTL1014894 +Node: POSIX/GNU1015628 +Node: Feature History1021227 +Node: Common Extensions1034339 +Node: Ranges and Locales1035651 +Ref: Ranges and Locales-Footnote-11040268 +Ref: Ranges and Locales-Footnote-21040295 +Ref: Ranges and Locales-Footnote-31040529 +Node: Contributors1040750 +Node: Installation1046101 +Node: Gawk Distribution1046995 +Node: Getting1047479 +Node: Extracting1048305 +Node: Distribution contents1049997 +Node: Unix Installation1055718 +Node: Quick Installation1056335 +Node: Additional Configuration Options1058781 +Node: Configuration Philosophy1060517 +Node: Non-Unix Installation1062871 +Node: PC Installation1063329 +Node: PC Binary Installation1064640 +Node: PC Compiling1066488 +Node: PC Testing1069448 +Node: PC Using1070624 +Node: Cygwin1074792 +Node: MSYS1075601 +Node: VMS Installation1076115 +Node: VMS Compilation1076911 +Ref: VMS Compilation-Footnote-11078163 +Node: VMS Dynamic Extensions1078221 +Node: VMS Installation Details1079594 +Node: VMS Running1081845 +Node: VMS GNV1084679 +Node: VMS Old Gawk1085402 +Node: Bugs1085872 +Node: Other Versions1089790 +Node: Notes1095874 +Node: Compatibility Mode1096674 +Node: Additions1097457 +Node: Accessing The Source1098384 +Node: Adding Code1099824 +Node: New Ports1105869 +Node: Derived Files1110004 +Ref: Derived Files-Footnote-11115325 +Ref: Derived Files-Footnote-21115359 +Ref: Derived Files-Footnote-31115959 +Node: Future Extensions1116057 +Node: Implementation Limitations1116640 +Node: Extension Design1117888 +Node: Old Extension Problems1119042 +Ref: Old Extension Problems-Footnote-11120550 +Node: Extension New Mechanism Goals1120607 +Ref: Extension New Mechanism Goals-Footnote-11123972 +Node: Extension Other Design Decisions1124158 +Node: Extension Future Growth1126264 +Node: Old Extension Mechanism1127100 +Node: Basic Concepts1128840 +Node: Basic High Level1129521 +Ref: figure-general-flow1129793 +Ref: figure-process-flow1130392 +Ref: Basic High Level-Footnote-11133621 +Node: Basic Data Typing1133806 +Node: Glossary1137161 +Node: Copying1162392 +Node: GNU Free Documentation License1199948 +Node: Index1225084  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index f8b58bd8..4dac41dc 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -34066,12 +34066,20 @@ which follows the POSIX specification. Many long-time @command{awk} users learned @command{awk} programming with the original @command{awk} implementation in Version 7 Unix. (This implementation was the basis for @command{awk} in Berkeley Unix, through 4.3-Reno. Subsequent versions -of Berkeley Unix, and some systems derived from 4.4BSD-Lite, use various +of Berkeley Unix, and some systems derived from 4.4BSD-Lite, used various versions of @command{gawk} for their @command{awk}.) This @value{CHAPTER} briefly describes the evolution of the @command{awk} language, with cross-references to other parts of the @value{DOCUMENT} where you can find more information. +@ifset FOR_PRINT +To save space, we have omitted +information on the history of features in @command{gawk} from this +edition. You can find it in the +@uref{http://www.gnu.org/software/gawk/manual/html_node/Feature-History.html, +online documentation}. +@end ifset + @menu * V7/SVR3.1:: The major changes between V7 and System V Release 3.1. @@ -34661,6 +34669,8 @@ GCC for VAX and Alpha has not been tested for a while. @c ENDOFRANGE exgnot @c ENDOFRANGE posnot +@c This does not need to be in the formal book. +@ifclear FOR_PRINT @node Feature History @appendixsec History of @command{gawk} Features @@ -34825,9 +34835,10 @@ The @code{next file} statement became @code{nextfile} (@pxref{Nextfile Statement}). @item -The @code{fflush()} function from the -Bell Laboratories research version of @command{awk} -(@pxref{I/O Functions}). +The @code{fflush()} function from +Brian Kernighan's @command{awk} +(then at Bell Laboratories; +@pxref{I/O Functions}). @item New command line options: @@ -34840,9 +34851,9 @@ the original Version 7 Unix version of @command{awk} (@pxref{V7/SVR3.1}). @item -The @option{-m} option from the -Bell Laboratories research version of @command{awk} -This was later removed. +The @option{-m} option from Brian Kernighan's @command{awk}. (He was +still at Bell Laboratories at the time.) This was later removed from +both his @command{awk} and from @command{gawk}. @item The @option{--re-interval} option to provide interval expressions in regexps @@ -34859,6 +34870,7 @@ The use of GNU Autoconf to control the configuration process @item Amiga support. +This has since been removed. @end itemize @@ -34995,7 +35007,8 @@ BeOS support. This was later removed. Tandem support. This was later removed. @item -The Atari port became officially unsupported. +The Atari port became officially unsupported and was +later removed entirely. @item The source code changed to use ISO C standard-style function definitions. @@ -35088,7 +35101,7 @@ flush all open output redirections @item The @code{isarray()} function which distinguishes if an item is an array -or not, to make it possible to traverse multidimensional arrays +or not, to make it possible to traverse arrays of arrays (@pxref{Type Functions}). @item @@ -35266,6 +35279,7 @@ The dynamic extension interface was completely redone @end itemize @c XXX ADD MORE STUFF HERE +@end ifclear @node Common Extensions @appendixsec Common Extensions Summary @@ -35492,8 +35506,8 @@ provided the initial port to OS/2 and its documentation. Michal Jaegermann provided the port to Atari systems and its documentation. (This port is no longer supported.) -He continues to provide portability checking with DEC Alpha -systems, and has done a lot of work to make sure @command{gawk} +He continues to provide portability checking, +and has done a lot of work to make sure @command{gawk} works on non-32-bit systems. @item @@ -35612,7 +35626,7 @@ The modifications to convert @command{gawk} into a byte-code interpreter, including the debugger. @item -The addition of true multidimensional arrays. +The addition of true arrays of arrays. @ref{Arrays of Arrays}. @item diff --git a/doc/gawktexi.in b/doc/gawktexi.in index c37034e3..6a07c2db 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -33210,12 +33210,20 @@ which follows the POSIX specification. Many long-time @command{awk} users learned @command{awk} programming with the original @command{awk} implementation in Version 7 Unix. (This implementation was the basis for @command{awk} in Berkeley Unix, through 4.3-Reno. Subsequent versions -of Berkeley Unix, and some systems derived from 4.4BSD-Lite, use various +of Berkeley Unix, and some systems derived from 4.4BSD-Lite, used various versions of @command{gawk} for their @command{awk}.) This @value{CHAPTER} briefly describes the evolution of the @command{awk} language, with cross-references to other parts of the @value{DOCUMENT} where you can find more information. +@ifset FOR_PRINT +To save space, we have omitted +information on the history of features in @command{gawk} from this +edition. You can find it in the +@uref{http://www.gnu.org/software/gawk/manual/html_node/Feature-History.html, +online documentation}. +@end ifset + @menu * V7/SVR3.1:: The major changes between V7 and System V Release 3.1. @@ -33805,6 +33813,8 @@ GCC for VAX and Alpha has not been tested for a while. @c ENDOFRANGE exgnot @c ENDOFRANGE posnot +@c This does not need to be in the formal book. +@ifclear FOR_PRINT @node Feature History @appendixsec History of @command{gawk} Features @@ -33969,9 +33979,10 @@ The @code{next file} statement became @code{nextfile} (@pxref{Nextfile Statement}). @item -The @code{fflush()} function from the -Bell Laboratories research version of @command{awk} -(@pxref{I/O Functions}). +The @code{fflush()} function from +Brian Kernighan's @command{awk} +(then at Bell Laboratories; +@pxref{I/O Functions}). @item New command line options: @@ -33984,9 +33995,9 @@ the original Version 7 Unix version of @command{awk} (@pxref{V7/SVR3.1}). @item -The @option{-m} option from the -Bell Laboratories research version of @command{awk} -This was later removed. +The @option{-m} option from Brian Kernighan's @command{awk}. (He was +still at Bell Laboratories at the time.) This was later removed from +both his @command{awk} and from @command{gawk}. @item The @option{--re-interval} option to provide interval expressions in regexps @@ -34003,6 +34014,7 @@ The use of GNU Autoconf to control the configuration process @item Amiga support. +This has since been removed. @end itemize @@ -34139,7 +34151,8 @@ BeOS support. This was later removed. Tandem support. This was later removed. @item -The Atari port became officially unsupported. +The Atari port became officially unsupported and was +later removed entirely. @item The source code changed to use ISO C standard-style function definitions. @@ -34232,7 +34245,7 @@ flush all open output redirections @item The @code{isarray()} function which distinguishes if an item is an array -or not, to make it possible to traverse multidimensional arrays +or not, to make it possible to traverse arrays of arrays (@pxref{Type Functions}). @item @@ -34410,6 +34423,7 @@ The dynamic extension interface was completely redone @end itemize @c XXX ADD MORE STUFF HERE +@end ifclear @node Common Extensions @appendixsec Common Extensions Summary @@ -34636,8 +34650,8 @@ provided the initial port to OS/2 and its documentation. Michal Jaegermann provided the port to Atari systems and its documentation. (This port is no longer supported.) -He continues to provide portability checking with DEC Alpha -systems, and has done a lot of work to make sure @command{gawk} +He continues to provide portability checking, +and has done a lot of work to make sure @command{gawk} works on non-32-bit systems. @item @@ -34756,7 +34770,7 @@ The modifications to convert @command{gawk} into a byte-code interpreter, including the debugger. @item -The addition of true multidimensional arrays. +The addition of true arrays of arrays. @ref{Arrays of Arrays}. @item -- cgit v1.2.3 From c503fbaba8667315946913d865e16d3c97fbe21f Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 25 May 2014 21:06:20 +0300 Subject: Tweak nested lists for docbook. --- doc/ChangeLog | 1 + doc/gawk.texi | 185 ++++++++++++++++++++++++++++++-------------------------- doc/gawktexi.in | 185 ++++++++++++++++++++++++++++++-------------------------- 3 files changed, 197 insertions(+), 174 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index dac82608..f051a9c1 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,6 +1,7 @@ 2014-05-25 Arnold D. Robbins * gawktexi.in: Edits through Appendix A. + * gawktexi.in: Tweak nested lists for docbook. 2014-05-24 Arnold D. Robbins diff --git a/doc/gawk.texi b/doc/gawk.texi index 4dac41dc..f5e13fb0 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -24,6 +24,7 @@ \gdef\xrefprintnodename#1{``#1''} @end tex @end ifset + @ifclear FOR_PRINT @c With early 2014 texinfo.tex, restore PDF links and colors @tex @@ -33,6 +34,16 @@ @end tex @end ifclear +@ifnotdocbook +@set BULLET @bullet{} +@set MINUS @minus{} +@end ifnotdocbook + +@ifdocbook +@set BULLET +@set MINUS +@end ifdocbook + @set xref-automatic-section-title @c The following information should be updated here only! @@ -1192,7 +1203,7 @@ Thus, we usually don't distinguish between @command{gawk} and other @cindex @command{awk}, uses for Using @command{awk} allows you to: -@itemize @bullet +@itemize @value{BULLET} @item Manage small, personal databases @@ -1217,7 +1228,7 @@ In addition, @command{gawk} provides facilities that make it easy to: -@itemize @bullet +@itemize @value{BULLET} @item Extract bits and pieces of data for processing @@ -2093,7 +2104,7 @@ the features of @command{awk}. Included also are many, but not all, of the features of @command{gawk}. This part contains the following chapters: -@itemize @bullet +@itemize @value{BULLET} @item @ref{Getting Started}. @@ -2619,7 +2630,7 @@ though that argument has no characters in it. In the rest of this interchangeably. Now, on to the quoting rules. -@itemize @bullet +@itemize @value{BULLET} @item Quoted items can be concatenated with nonquoted items as well as with other quoted items. The shell turns everything into one argument for @@ -2947,7 +2958,7 @@ one way to do things in @command{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: -@itemize @bullet +@itemize @value{BULLET} @item Print the length of the longest input line: @@ -3643,7 +3654,7 @@ programs (@pxref{AWKPATH Variable}). Similar to @option{-f}, read @command{awk} program text from @var{file}. There are two differences from @option{-f}: -@itemize @bullet +@itemize @value{BULLET} @item This option terminates option processing; anything else on the command line is passed on directly to the @command{awk} program. @@ -3831,7 +3842,7 @@ Also, the following additional restrictions apply: -@itemize @bullet +@itemize @value{BULLET} @cindex newlines @cindex whitespace, newlines as @@ -4845,7 +4856,7 @@ shown in the previous list. To summarize: -@itemize @bullet +@itemize @value{BULLET} @item The escape sequences in the table above are always processed first, for both string constants and regexp constants. This happens very early, @@ -5754,7 +5765,7 @@ Given that you can use both regexp and string constants to describe regular expressions, which should you use? The answer is ``regexp constants,'' for several reasons: -@itemize @bullet +@itemize @value{BULLET} @item String constants are more complicated to write and more difficult to read. Using regexp constants makes your programs @@ -8133,7 +8144,7 @@ where coprocesses are discussed in more detail. Here are some miscellaneous points about @code{getline} that you should bear in mind: -@itemize @bullet +@itemize @value{BULLET} @item When @code{getline} changes the value of @code{$0} and @code{NF}, @command{awk} does @emph{not} automatically jump to the start of the @@ -9604,7 +9615,7 @@ Full discussion is delayed until Here is a list of things to bear in mind when using the special file names that @command{gawk} provides: -@itemize @bullet +@itemize @value{BULLET} @cindex compatibility mode (@command{gawk}), file names @cindex file names, in compatibility mode @item @@ -9701,7 +9712,7 @@ close(sortcom) This helps avoid hard-to-find typographical errors in your @command{awk} programs. Here are some of the reasons for closing an output file: -@itemize @bullet +@itemize @value{BULLET} @item To write a file and read it back later on in the same @command{awk} program. Close the file after writing it, then @@ -11413,7 +11424,7 @@ and variable typing follows these rules:@footnote{@command{gawk} has followed these rules for many years, and it is gratifying that the POSIX standard is also now correct.} -@itemize @bullet +@itemize @value{BULLET} @item A numeric constant or the result of a numeric operation has the @var{numeric} attribute. @@ -12800,7 +12811,7 @@ is set to the name of the current file, and @code{FNR} is set to zero. The @code{BEGINFILE} rule provides you the opportunity to accomplish two tasks that would otherwise be difficult or impossible to perform: -@itemize @bullet +@itemize @value{BULLET} @item You can test if the file is readable. Normally, it is a fatal error if a file named on the command line cannot be opened for reading. However, @@ -14330,7 +14341,7 @@ to test for these elements @cindex @code{PROCINFO} array, uses The @code{PROCINFO} array has the following additional uses: -@itemize @bullet +@itemize @value{BULLET} @item It may be used to cause coprocesses to communicate over pseudo-ttys instead of through two-way pipes; this is discussed further in @@ -15262,7 +15273,7 @@ Often, though, you may wish to do something simple, such as or ``traverse the array by comparing the values in descending order.'' @command{gawk} provides two mechanisms which give you this control. -@itemize @bullet +@itemize @value{BULLET} @item Set @code{PROCINFO["sorted_in"]} to one of a set of predefined values. We describe this now. @@ -15369,7 +15380,7 @@ order relative to each other is determined by their index strings. Here are some additional things to bear in mind about sorted array traversal. -@itemize @bullet +@itemize @value{BULLET} @item The value of @code{PROCINFO["sorted_in"]} is global. That is, it affects all array traversal @code{for} loops. If you need to change it within your @@ -17085,7 +17096,7 @@ says, in effect, that @samp{\} turns off the special meaning of any following character, but for anything other than @samp{\} and @samp{&}, such special meaning is undefined. This wording leads to two problems: -@itemize @bullet +@itemize @value{BULLET} @item Backslashes must now be doubled in the @var{replacement} string, breaking historical @command{awk} programs. @@ -19538,7 +19549,7 @@ 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: -@itemize @bullet +@itemize @value{BULLET} @item @ref{Library Functions}. @@ -19609,7 +19620,7 @@ freely use features that are @command{gawk}-specific. Rewriting these programs for different implementations of @command{awk} is pretty straightforward. -@itemize @bullet +@itemize @value{BULLET} @item Diagnostic error messages are sent to @file{/dev/stderr}. Use @samp{| "cat 1>&2"} instead of @samp{> "/dev/stderr"} if your system @@ -24309,7 +24320,7 @@ it prints the counts. This program has several problems that prevent it from being useful on real text files: -@itemize @bullet +@itemize @value{BULLET} @item The @command{awk} language considers upper- and lowercase characters to be distinct. Therefore, ``bartender'' and ``Bartender'' are not treated @@ -24519,7 +24530,7 @@ The Texinfo language is described fully, starting with For our purposes, it is enough to know three things about Texinfo input files: -@itemize @bullet +@itemize @value{BULLET} @item The ``at'' symbol (@samp{@@}) is special in Texinfo, much as the backslash (@samp{\}) is in C @@ -25301,7 +25312,7 @@ process. This keeps things properly quoted. This version of @command{igawk} represents the fifth version of this program. There are four key simplifications that make the program work better: -@itemize @bullet +@itemize @value{BULLET} @item Using @code{@@include} even for the files named with @option{-f} makes building the initial collected @command{awk} program much simpler; all the @@ -25633,7 +25644,7 @@ BEGIN { Part III focuses on features specific to @command{gawk}. It contains the following chapters: -@itemize @bullet +@itemize @value{BULLET} @item @ref{Advanced Features}. @@ -25687,7 +25698,7 @@ it for performance. A number of advanced features require separate @value{CHAPTER}s of their own: -@itemize @bullet +@itemize @value{BULLET} @item @ref{Internationalization}, discusses how to internationalize your @command{awk} programs, so that they can speak multiple @@ -26258,7 +26269,7 @@ the shell. There are some cautionary items to be aware of: -@itemize @bullet +@itemize @value{BULLET} @item As the code inside @command{gawk} currently stands, the coprocess's standard error goes to the same place that the parent @command{gawk}'s @@ -26586,7 +26597,7 @@ in the morning to work.) This example illustrates many of the basic features of profiling output. They are as follows: -@itemize @bullet +@itemize @value{BULLET} @item The program is printed in the order @code{BEGIN} rules, @code{BEGINFILE} rules, @@ -27361,7 +27372,7 @@ As written, it won't work on other versions of @command{awk}. However, it is actually almost portable, requiring very little change: -@itemize @bullet +@itemize @value{BULLET} @cindex @code{TEXTDOMAIN} variable, portability and @item Assignments to @code{TEXTDOMAIN} won't have any effect, @@ -27625,7 +27636,7 @@ In that case, what can you expect from such a tool? The answer to that depends on the language being debugged, but in general, you can expect at least the following: -@itemize @bullet +@itemize @value{BULLET} @item The ability to watch a program execute its instructions one by one, giving you, the programmer, the opportunity to think about what is happening @@ -28024,7 +28035,7 @@ and problem solved! The @command{gawk} debugger command set can be divided into the following categories: -@itemize @bullet{} +@itemize @value{BULLET} @item Breakpoint control @@ -28832,7 +28843,7 @@ 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: -@itemize @bullet{} +@itemize @value{BULLET} @item 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. Rather, it just @@ -29116,7 +29127,7 @@ Changes in the language of the 2001 and 2004 POSIX standards can be interpreted to imply that @command{awk} should support additional features. These features are: -@itemize @bullet +@itemize @value{BULLET} @item Interpretation of floating point data values specified in hexadecimal notation (@samp{0xDEADBEEF}). (Note: data values, @emph{not} @@ -29133,7 +29144,7 @@ characters after the @samp{nan} and allow either @samp{inf} or @samp{infinity}. The first problem is that both of these are clear changes to historical practice: -@itemize @bullet +@itemize @value{BULLET} @item The @command{gawk} maintainer feels that supporting hexadecimal floating point values, in particular, is ugly, and was never intended by the @@ -29162,7 +29173,7 @@ nevertheless, on systems that support IEEE floating point, it seems reasonable to provide @emph{some} way to support NaN and Infinity values. The solution implemented in @command{gawk} is as follows: -@itemize @bullet +@itemize @value{BULLET} @item With the @option{--posix} command-line option, @command{gawk} becomes ``hands off.'' String values are passed directly to the system library's @@ -29477,7 +29488,7 @@ Although floating-point representations vary from machine to machine, the most commonly encountered representation is that defined by the IEEE 754 Standard. An IEEE 754 format value has three components: -@itemize @bullet +@itemize @value{BULLET} @item A sign bit telling whether the number is positive or negative. @@ -30359,7 +30370,7 @@ Example}) and also the @file{testext.c} code for testing the APIs. Some other bits and pieces: -@itemize @bullet +@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} @@ -30412,10 +30423,10 @@ by calling through function pointers passed into your extension. API function pointers are provided for the following kinds of operations: -@itemize @bullet +@itemize @value{BULLET} @item Registrations functions. You may register: -@itemize @minus +@itemize @value{MINUS} @item extension functions, @item @@ -30456,7 +30467,7 @@ can be a big performance win. @item Manipulating arrays: -@itemize @minus +@itemize @value{MINUS} @item Retrieving, adding, deleting, and modifying elements @@ -30476,7 +30487,7 @@ Flattening an array for easy C style looping over all its indices and elements Some points about using the API: -@itemize @bullet +@itemize @value{BULLET} @item The following types and/or macros and/or functions are referenced in @file{gawkapi.h}. For correct use, you must therefore include the @@ -33940,7 +33951,7 @@ processing XML files. This is the evolution of the original @command{xgawk} As of this writing, there are five extensions: -@itemize @bullet +@itemize @value{BULLET} @item XML parser extension, using the @uref{http://expat.sourceforge.net, Expat} XML parsing library. @@ -34032,7 +34043,7 @@ and the Glossary: Part IV contains two appendixes: @end ifset -@itemize @bullet +@itemize @value{BULLET} @item @ref{Language History}. @@ -34108,7 +34119,7 @@ Version 7 Unix (1978) and the new version that was first made generally availabl System V Release 3.1 (1987). This @value{SECTION} summarizes the changes, with cross-references to further details: -@itemize @bullet +@itemize @value{BULLET} @item The requirement for @samp{;} to separate rules on a line (@pxref{Statements/Lines}). @@ -34199,7 +34210,7 @@ Multidimensional arrays The System V Release 4 (1989) version of Unix @command{awk} added these features (some of which originated in @command{gawk}): -@itemize @bullet +@itemize @value{BULLET} @item The @code{ENVIRON} array (@pxref{Built-in Variables}). @c gawk and MKS awk @@ -34259,7 +34270,7 @@ Processing of escape sequences inside command-line variable assignments The POSIX Command Language and Utilities standard for @command{awk} (1992) introduced the following changes into the language: -@itemize @bullet +@itemize @value{BULLET} @item The use of @option{-W} for implementation-specific options (@pxref{Options}). @@ -34284,7 +34295,7 @@ 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: -@itemize @bullet +@itemize @value{BULLET} @item The @code{fflush()} built-in function for flushing buffered output (@pxref{I/O Functions}). @@ -34321,7 +34332,7 @@ has made his version available via his home page This @value{SECTION} describes common extensions that originally appeared in his version of @command{awk}. -@itemize @bullet +@itemize @value{BULLET} @item The @samp{**} and @samp{**=} operators (@pxref{Arithmetic Ops} @@ -34366,12 +34377,12 @@ A number of features have come and gone over the years. This @value{SECTION} summarizes the additional features over POSIX @command{awk} that are in the current version of @command{gawk}. -@itemize @bullet +@itemize @value{BULLET} @item Additional built-in variables: -@itemize @minus +@itemize @value{MINUS} @item The @code{ARGIND} @@ -34392,7 +34403,7 @@ variables @item Special files in I/O redirections: -@itemize @minus{} +@itemize @value{MINUS} @item The @file{/dev/stdin}, @file{/dev/stdout}, @file{/dev/stderr} and @file{/dev/fd/@var{N}} special file names @@ -34408,7 +34419,7 @@ IP protocol to use. @item Changes and/or additions to the language: -@itemize @minus{} +@itemize @value{MINUS} @item The @samp{\x} escape sequence (@pxref{Escape Sequences}). @@ -34447,7 +34458,7 @@ Directories on the command line produce a warning and are skipped @item New keywords: -@itemize @minus{} +@itemize @value{MINUS} @item The @code{BEGINFILE} and @code{ENDFILE} special patterns. (@pxref{BEGINFILE/ENDFILE}). @@ -34468,7 +34479,7 @@ The @code{switch} statement @item Changes to standard @command{awk} functions: -@itemize @minus +@itemize @value{MINUS} @item The optional second argument to @code{close()} that allows closing one end of a two-way pipe to a coprocess @@ -34501,7 +34512,7 @@ argument which is an array to hold the text of the field separators. @item Additional functions only in @command{gawk}: -@itemize @minus +@itemize @value{MINUS} @item The @code{and()}, @@ -34544,7 +34555,7 @@ functions for working with timestamps @item Changes and/or additions in the command-line options: -@itemize @minus +@itemize @value{MINUS} @item The @env{AWKPATH} environment variable for specifying a path search for the @option{-f} command-line option @@ -34622,7 +34633,7 @@ Support for the following obsolete systems was removed from the code and the documentation for @command{gawk} version 4.0: @c nested table -@itemize @minus +@itemize @value{MINUS} @item Amiga @@ -34700,7 +34711,7 @@ in the order they were added to @command{gawk}. Version 2.10 of @command{gawk} introduced the following features: -@itemize @bullet +@itemize @value{BULLET} @item The @env{AWKPATH} environment variable for specifying a path search for the @option{-f} command-line option @@ -34718,7 +34729,7 @@ The @file{/dev/stdin}, @file{/dev/stdout}, @file{/dev/stderr} and Version 2.13 of @command{gawk} introduced the following features: -@itemize @bullet +@itemize @value{BULLET} @item The @code{FIELDWIDTHS} variable and its effects (@pxref{Constant Size}). @@ -34732,7 +34743,7 @@ and printing timestamps Additional command-line options (@pxref{Options}): -@itemize @minus +@itemize @value{MINUS} @item The @option{-W lint} option to provide error and portability checking for both the source code and at runtime. @@ -34747,7 +34758,7 @@ The @option{-W posix} option for full POSIX compliance. Version 2.14 of @command{gawk} introduced the following feature: -@itemize @bullet +@itemize @value{BULLET} @item The @code{next file} statement for skipping to the next data file (@pxref{Nextfile Statement}). @@ -34755,11 +34766,11 @@ The @code{next file} statement for skipping to the next data file Version 2.15 of @command{gawk} introduced the following features: -@itemize @bullet +@itemize @value{BULLET} @item New variables (@pxref{Built-in Variables}): -@itemize @minus +@itemize @value{MINUS} @item @code{ARGIND}, which tracks the movement of @code{FILENAME} through @code{ARGV}. @@ -34781,7 +34792,7 @@ The ability to delete all of an array at once with @samp{delete @var{array}} Command line option changes (@pxref{Options}): -@itemize @minus +@itemize @value{MINUS} @item The ability to use GNU-style long-named options that start with @option{--}. @@ -34793,11 +34804,11 @@ source code. Version 3.0 of @command{gawk} introduced the following features: -@itemize @bullet +@itemize @value{BULLET} @item New or changed variables: -@itemize @minus +@itemize @value{MINUS} @item @code{IGNORECASE} changed, now applying to string comparison as well as regexp operations @@ -34843,7 +34854,7 @@ Brian Kernighan's @command{awk} @item New command line options: -@itemize @minus +@itemize @value{MINUS} @item The @option{--lint-old} option to warn about constructs that are not available in @@ -34876,12 +34887,12 @@ This has since been removed. Version 3.1 of @command{gawk} introduced the following features: -@itemize @bullet +@itemize @value{BULLET} @item New variables (@pxref{Built-in Variables}): -@itemize @minus +@itemize @value{MINUS} @item @code{BINMODE}, for non-POSIX systems, which allows binary I/O for input and/or output files @@ -34929,7 +34940,7 @@ making translations easier @item A number of new built-in functions: -@itemize @minus +@itemize @value{MINUS} @item The @code{asort()} and @code{asorti()} functions for sorting arrays (@pxref{Array Sorting}). @@ -34963,7 +34974,7 @@ The support for @samp{next file} as two words was removed completely Additional commnd line options (@pxref{Options}): -@itemize @minus +@itemize @value{MINUS} @item The @option{--dump-variables} option to print a list of all global variables. @@ -35030,12 +35041,12 @@ enable printing times as UTC Version 4.0 of @command{gawk} introduced the following features: -@itemize @bullet +@itemize @value{BULLET} @item Variable additions: -@itemize @minus +@itemize @value{MINUS} @item @code{FPAT}, which allows you to specify a regexp that matches the fields, instead of matching the field separator @@ -35134,7 +35145,7 @@ Indirect function calls Command line option changes (@pxref{Options}): -@itemize @minus +@itemize @value{MINUS} @item The @option{-b} and @option{--characters-as-bytes} options which prevent @command{gawk} from treating input as a multibyte string. @@ -35185,7 +35196,7 @@ C locale, no matter what kind of regexp is being used, and even if @item Support was removed for the following systems: -@itemize @minus +@itemize @value{MINUS} @item Atari @@ -35223,7 +35234,7 @@ Prestandard VAX C compiler for VAX/VMS Version 4.1 of @command{gawk} introduced the following features: -@itemize @bullet +@itemize @value{BULLET} @item Three new arrays: @@ -35238,7 +35249,7 @@ one, named just @command{gawk}. As a result the command line options changed. Command line option changes (@pxref{Options}): -@itemize @minus +@itemize @value{MINUS} @item The @option{-D} option invokes the debugger. @@ -35426,7 +35437,7 @@ cases: the default regexp matching; with @option{--traditional} and with This @value{SECTION} names the major contributors to @command{gawk} and/or this @value{DOCUMENT}, in approximate chronological order: -@itemize @bullet +@itemize @value{BULLET} @item @cindex Aho, Alfred @cindex Weinberger, Peter @@ -35620,7 +35631,7 @@ Assaf Gordon contributed the code to implement the @cindex Haque, John John Haque made the following contributions: -@itemize @minus +@itemize @value{MINUS} @item The modifications to convert @command{gawk} into a byte-code interpreter, including the debugger. @@ -35717,7 +35728,7 @@ subdirectories. @cindex @command{gawk}, source code@comma{} obtaining There are three ways to get GNU software: -@itemize @bullet +@itemize @value{BULLET} @item Copy it from someone else who already has it. @@ -36471,7 +36482,7 @@ translate end-of-line @code{"\r\n"} to @code{"\n"} on input and @code{"\n"} to @code{"\r\n"} on output. A special @code{BINMODE} variable @value{COMMONEXT} allows control over these translations and is interpreted as follows: -@itemize @bullet +@itemize @value{BULLET} @item If @code{BINMODE} is @code{"r"}, or one, then @@ -37404,7 +37415,7 @@ using the traditional ``K&R'' style, particularly as regards to the placement of braces and the use of TABs. In brief, the coding rules for @command{gawk} are as follows: -@itemize @bullet +@itemize @value{BULLET} @item Use ANSI/ISO style (prototype) function headers when defining functions. @@ -37915,7 +37926,7 @@ mechanism was bolted onto the side and was not really well thought out. The old extension mechanism had several problems: -@itemize @bullet +@itemize @value{BULLET} @item It depended heavily upon @command{gawk} internals. Any time the @code{NODE} structure@footnote{A critical central data structure @@ -37951,7 +37962,7 @@ project is provided in @ref{gawkextlib}. Some goals for the new API were: -@itemize @bullet +@itemize @value{BULLET} @item The API should be independent of @command{gawk} internals. Changes in @command{gawk} internals should not be visible to the writer of an @@ -37966,7 +37977,7 @@ The API should enable extensions written in C or C++ to have roughly the same ``appearance'' to @command{awk}-level code as @command{awk} functions do. This means that extensions should have: -@itemize @minus +@itemize @value{MINUS} @item The ability to access function parameters. @@ -37988,7 +37999,7 @@ multidimensional arrays). Some additional important goals were: -@itemize @bullet +@itemize @value{BULLET} @item The API should use only features in ISO C 90, so that extensions can be written using the widest range of C and C++ compilers. The header @@ -38011,7 +38022,7 @@ During development, it became clear that there were other features that should be available to extensions, which were also subsequently provided: -@itemize @bullet +@itemize @value{BULLET} @item Extensions should have the ability to hook into @command{gawk}'s I/O redirection mechanism. In particular, the @command{xgawk} @@ -38092,7 +38103,7 @@ to provide a minimal yet powerful set of features for creating extensions. The API can later be expanded, in two ways: -@itemize @bullet +@itemize @value{BULLET} @item @command{gawk} passes an ``extension id'' into the extension when it first loads the extension. The extension then passes this id back diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 6a07c2db..3794a25b 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -19,6 +19,7 @@ \gdef\xrefprintnodename#1{``#1''} @end tex @end ifset + @ifclear FOR_PRINT @c With early 2014 texinfo.tex, restore PDF links and colors @tex @@ -28,6 +29,16 @@ @end tex @end ifclear +@ifnotdocbook +@set BULLET @bullet{} +@set MINUS @minus{} +@end ifnotdocbook + +@ifdocbook +@set BULLET +@set MINUS +@end ifdocbook + @set xref-automatic-section-title @c The following information should be updated here only! @@ -1187,7 +1198,7 @@ Thus, we usually don't distinguish between @command{gawk} and other @cindex @command{awk}, uses for Using @command{awk} allows you to: -@itemize @bullet +@itemize @value{BULLET} @item Manage small, personal databases @@ -1212,7 +1223,7 @@ In addition, @command{gawk} provides facilities that make it easy to: -@itemize @bullet +@itemize @value{BULLET} @item Extract bits and pieces of data for processing @@ -2060,7 +2071,7 @@ the features of @command{awk}. Included also are many, but not all, of the features of @command{gawk}. This part contains the following chapters: -@itemize @bullet +@itemize @value{BULLET} @item @ref{Getting Started}. @@ -2547,7 +2558,7 @@ though that argument has no characters in it. In the rest of this interchangeably. Now, on to the quoting rules. -@itemize @bullet +@itemize @value{BULLET} @item Quoted items can be concatenated with nonquoted items as well as with other quoted items. The shell turns everything into one argument for @@ -2875,7 +2886,7 @@ one way to do things in @command{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: -@itemize @bullet +@itemize @value{BULLET} @item Print the length of the longest input line: @@ -3571,7 +3582,7 @@ programs (@pxref{AWKPATH Variable}). Similar to @option{-f}, read @command{awk} program text from @var{file}. There are two differences from @option{-f}: -@itemize @bullet +@itemize @value{BULLET} @item This option terminates option processing; anything else on the command line is passed on directly to the @command{awk} program. @@ -3759,7 +3770,7 @@ Also, the following additional restrictions apply: -@itemize @bullet +@itemize @value{BULLET} @cindex newlines @cindex whitespace, newlines as @@ -4773,7 +4784,7 @@ shown in the previous list. To summarize: -@itemize @bullet +@itemize @value{BULLET} @item The escape sequences in the table above are always processed first, for both string constants and regexp constants. This happens very early, @@ -5599,7 +5610,7 @@ Given that you can use both regexp and string constants to describe regular expressions, which should you use? The answer is ``regexp constants,'' for several reasons: -@itemize @bullet +@itemize @value{BULLET} @item String constants are more complicated to write and more difficult to read. Using regexp constants makes your programs @@ -7752,7 +7763,7 @@ where coprocesses are discussed in more detail. Here are some miscellaneous points about @code{getline} that you should bear in mind: -@itemize @bullet +@itemize @value{BULLET} @item When @code{getline} changes the value of @code{$0} and @code{NF}, @command{awk} does @emph{not} automatically jump to the start of the @@ -9185,7 +9196,7 @@ Full discussion is delayed until Here is a list of things to bear in mind when using the special file names that @command{gawk} provides: -@itemize @bullet +@itemize @value{BULLET} @cindex compatibility mode (@command{gawk}), file names @cindex file names, in compatibility mode @item @@ -9282,7 +9293,7 @@ close(sortcom) This helps avoid hard-to-find typographical errors in your @command{awk} programs. Here are some of the reasons for closing an output file: -@itemize @bullet +@itemize @value{BULLET} @item To write a file and read it back later on in the same @command{awk} program. Close the file after writing it, then @@ -10793,7 +10804,7 @@ and variable typing follows these rules:@footnote{@command{gawk} has followed these rules for many years, and it is gratifying that the POSIX standard is also now correct.} -@itemize @bullet +@itemize @value{BULLET} @item A numeric constant or the result of a numeric operation has the @var{numeric} attribute. @@ -12180,7 +12191,7 @@ is set to the name of the current file, and @code{FNR} is set to zero. The @code{BEGINFILE} rule provides you the opportunity to accomplish two tasks that would otherwise be difficult or impossible to perform: -@itemize @bullet +@itemize @value{BULLET} @item You can test if the file is readable. Normally, it is a fatal error if a file named on the command line cannot be opened for reading. However, @@ -13710,7 +13721,7 @@ to test for these elements @cindex @code{PROCINFO} array, uses The @code{PROCINFO} array has the following additional uses: -@itemize @bullet +@itemize @value{BULLET} @item It may be used to cause coprocesses to communicate over pseudo-ttys instead of through two-way pipes; this is discussed further in @@ -14596,7 +14607,7 @@ Often, though, you may wish to do something simple, such as or ``traverse the array by comparing the values in descending order.'' @command{gawk} provides two mechanisms which give you this control. -@itemize @bullet +@itemize @value{BULLET} @item Set @code{PROCINFO["sorted_in"]} to one of a set of predefined values. We describe this now. @@ -14703,7 +14714,7 @@ order relative to each other is determined by their index strings. Here are some additional things to bear in mind about sorted array traversal. -@itemize @bullet +@itemize @value{BULLET} @item The value of @code{PROCINFO["sorted_in"]} is global. That is, it affects all array traversal @code{for} loops. If you need to change it within your @@ -16419,7 +16430,7 @@ says, in effect, that @samp{\} turns off the special meaning of any following character, but for anything other than @samp{\} and @samp{&}, such special meaning is undefined. This wording leads to two problems: -@itemize @bullet +@itemize @value{BULLET} @item Backslashes must now be doubled in the @var{replacement} string, breaking historical @command{awk} programs. @@ -18711,7 +18722,7 @@ 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: -@itemize @bullet +@itemize @value{BULLET} @item @ref{Library Functions}. @@ -18782,7 +18793,7 @@ freely use features that are @command{gawk}-specific. Rewriting these programs for different implementations of @command{awk} is pretty straightforward. -@itemize @bullet +@itemize @value{BULLET} @item Diagnostic error messages are sent to @file{/dev/stderr}. Use @samp{| "cat 1>&2"} instead of @samp{> "/dev/stderr"} if your system @@ -23453,7 +23464,7 @@ it prints the counts. This program has several problems that prevent it from being useful on real text files: -@itemize @bullet +@itemize @value{BULLET} @item The @command{awk} language considers upper- and lowercase characters to be distinct. Therefore, ``bartender'' and ``Bartender'' are not treated @@ -23663,7 +23674,7 @@ The Texinfo language is described fully, starting with For our purposes, it is enough to know three things about Texinfo input files: -@itemize @bullet +@itemize @value{BULLET} @item The ``at'' symbol (@samp{@@}) is special in Texinfo, much as the backslash (@samp{\}) is in C @@ -24445,7 +24456,7 @@ process. This keeps things properly quoted. This version of @command{igawk} represents the fifth version of this program. There are four key simplifications that make the program work better: -@itemize @bullet +@itemize @value{BULLET} @item Using @code{@@include} even for the files named with @option{-f} makes building the initial collected @command{awk} program much simpler; all the @@ -24777,7 +24788,7 @@ BEGIN { Part III focuses on features specific to @command{gawk}. It contains the following chapters: -@itemize @bullet +@itemize @value{BULLET} @item @ref{Advanced Features}. @@ -24831,7 +24842,7 @@ it for performance. A number of advanced features require separate @value{CHAPTER}s of their own: -@itemize @bullet +@itemize @value{BULLET} @item @ref{Internationalization}, discusses how to internationalize your @command{awk} programs, so that they can speak multiple @@ -25402,7 +25413,7 @@ the shell. There are some cautionary items to be aware of: -@itemize @bullet +@itemize @value{BULLET} @item As the code inside @command{gawk} currently stands, the coprocess's standard error goes to the same place that the parent @command{gawk}'s @@ -25730,7 +25741,7 @@ in the morning to work.) This example illustrates many of the basic features of profiling output. They are as follows: -@itemize @bullet +@itemize @value{BULLET} @item The program is printed in the order @code{BEGIN} rules, @code{BEGINFILE} rules, @@ -26505,7 +26516,7 @@ As written, it won't work on other versions of @command{awk}. However, it is actually almost portable, requiring very little change: -@itemize @bullet +@itemize @value{BULLET} @cindex @code{TEXTDOMAIN} variable, portability and @item Assignments to @code{TEXTDOMAIN} won't have any effect, @@ -26769,7 +26780,7 @@ In that case, what can you expect from such a tool? The answer to that depends on the language being debugged, but in general, you can expect at least the following: -@itemize @bullet +@itemize @value{BULLET} @item The ability to watch a program execute its instructions one by one, giving you, the programmer, the opportunity to think about what is happening @@ -27168,7 +27179,7 @@ and problem solved! The @command{gawk} debugger command set can be divided into the following categories: -@itemize @bullet{} +@itemize @value{BULLET} @item Breakpoint control @@ -27976,7 +27987,7 @@ 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: -@itemize @bullet{} +@itemize @value{BULLET} @item 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. Rather, it just @@ -28260,7 +28271,7 @@ Changes in the language of the 2001 and 2004 POSIX standards can be interpreted to imply that @command{awk} should support additional features. These features are: -@itemize @bullet +@itemize @value{BULLET} @item Interpretation of floating point data values specified in hexadecimal notation (@samp{0xDEADBEEF}). (Note: data values, @emph{not} @@ -28277,7 +28288,7 @@ characters after the @samp{nan} and allow either @samp{inf} or @samp{infinity}. The first problem is that both of these are clear changes to historical practice: -@itemize @bullet +@itemize @value{BULLET} @item The @command{gawk} maintainer feels that supporting hexadecimal floating point values, in particular, is ugly, and was never intended by the @@ -28306,7 +28317,7 @@ nevertheless, on systems that support IEEE floating point, it seems reasonable to provide @emph{some} way to support NaN and Infinity values. The solution implemented in @command{gawk} is as follows: -@itemize @bullet +@itemize @value{BULLET} @item With the @option{--posix} command-line option, @command{gawk} becomes ``hands off.'' String values are passed directly to the system library's @@ -28621,7 +28632,7 @@ Although floating-point representations vary from machine to machine, the most commonly encountered representation is that defined by the IEEE 754 Standard. An IEEE 754 format value has three components: -@itemize @bullet +@itemize @value{BULLET} @item A sign bit telling whether the number is positive or negative. @@ -29503,7 +29514,7 @@ Example}) and also the @file{testext.c} code for testing the APIs. Some other bits and pieces: -@itemize @bullet +@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} @@ -29556,10 +29567,10 @@ by calling through function pointers passed into your extension. API function pointers are provided for the following kinds of operations: -@itemize @bullet +@itemize @value{BULLET} @item Registrations functions. You may register: -@itemize @minus +@itemize @value{MINUS} @item extension functions, @item @@ -29600,7 +29611,7 @@ can be a big performance win. @item Manipulating arrays: -@itemize @minus +@itemize @value{MINUS} @item Retrieving, adding, deleting, and modifying elements @@ -29620,7 +29631,7 @@ Flattening an array for easy C style looping over all its indices and elements Some points about using the API: -@itemize @bullet +@itemize @value{BULLET} @item The following types and/or macros and/or functions are referenced in @file{gawkapi.h}. For correct use, you must therefore include the @@ -33084,7 +33095,7 @@ processing XML files. This is the evolution of the original @command{xgawk} As of this writing, there are five extensions: -@itemize @bullet +@itemize @value{BULLET} @item XML parser extension, using the @uref{http://expat.sourceforge.net, Expat} XML parsing library. @@ -33176,7 +33187,7 @@ and the Glossary: Part IV contains two appendixes: @end ifset -@itemize @bullet +@itemize @value{BULLET} @item @ref{Language History}. @@ -33252,7 +33263,7 @@ Version 7 Unix (1978) and the new version that was first made generally availabl System V Release 3.1 (1987). This @value{SECTION} summarizes the changes, with cross-references to further details: -@itemize @bullet +@itemize @value{BULLET} @item The requirement for @samp{;} to separate rules on a line (@pxref{Statements/Lines}). @@ -33343,7 +33354,7 @@ Multidimensional arrays The System V Release 4 (1989) version of Unix @command{awk} added these features (some of which originated in @command{gawk}): -@itemize @bullet +@itemize @value{BULLET} @item The @code{ENVIRON} array (@pxref{Built-in Variables}). @c gawk and MKS awk @@ -33403,7 +33414,7 @@ Processing of escape sequences inside command-line variable assignments The POSIX Command Language and Utilities standard for @command{awk} (1992) introduced the following changes into the language: -@itemize @bullet +@itemize @value{BULLET} @item The use of @option{-W} for implementation-specific options (@pxref{Options}). @@ -33428,7 +33439,7 @@ 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: -@itemize @bullet +@itemize @value{BULLET} @item The @code{fflush()} built-in function for flushing buffered output (@pxref{I/O Functions}). @@ -33465,7 +33476,7 @@ has made his version available via his home page This @value{SECTION} describes common extensions that originally appeared in his version of @command{awk}. -@itemize @bullet +@itemize @value{BULLET} @item The @samp{**} and @samp{**=} operators (@pxref{Arithmetic Ops} @@ -33510,12 +33521,12 @@ A number of features have come and gone over the years. This @value{SECTION} summarizes the additional features over POSIX @command{awk} that are in the current version of @command{gawk}. -@itemize @bullet +@itemize @value{BULLET} @item Additional built-in variables: -@itemize @minus +@itemize @value{MINUS} @item The @code{ARGIND} @@ -33536,7 +33547,7 @@ variables @item Special files in I/O redirections: -@itemize @minus{} +@itemize @value{MINUS} @item The @file{/dev/stdin}, @file{/dev/stdout}, @file{/dev/stderr} and @file{/dev/fd/@var{N}} special file names @@ -33552,7 +33563,7 @@ IP protocol to use. @item Changes and/or additions to the language: -@itemize @minus{} +@itemize @value{MINUS} @item The @samp{\x} escape sequence (@pxref{Escape Sequences}). @@ -33591,7 +33602,7 @@ Directories on the command line produce a warning and are skipped @item New keywords: -@itemize @minus{} +@itemize @value{MINUS} @item The @code{BEGINFILE} and @code{ENDFILE} special patterns. (@pxref{BEGINFILE/ENDFILE}). @@ -33612,7 +33623,7 @@ The @code{switch} statement @item Changes to standard @command{awk} functions: -@itemize @minus +@itemize @value{MINUS} @item The optional second argument to @code{close()} that allows closing one end of a two-way pipe to a coprocess @@ -33645,7 +33656,7 @@ argument which is an array to hold the text of the field separators. @item Additional functions only in @command{gawk}: -@itemize @minus +@itemize @value{MINUS} @item The @code{and()}, @@ -33688,7 +33699,7 @@ functions for working with timestamps @item Changes and/or additions in the command-line options: -@itemize @minus +@itemize @value{MINUS} @item The @env{AWKPATH} environment variable for specifying a path search for the @option{-f} command-line option @@ -33766,7 +33777,7 @@ Support for the following obsolete systems was removed from the code and the documentation for @command{gawk} version 4.0: @c nested table -@itemize @minus +@itemize @value{MINUS} @item Amiga @@ -33844,7 +33855,7 @@ in the order they were added to @command{gawk}. Version 2.10 of @command{gawk} introduced the following features: -@itemize @bullet +@itemize @value{BULLET} @item The @env{AWKPATH} environment variable for specifying a path search for the @option{-f} command-line option @@ -33862,7 +33873,7 @@ The @file{/dev/stdin}, @file{/dev/stdout}, @file{/dev/stderr} and Version 2.13 of @command{gawk} introduced the following features: -@itemize @bullet +@itemize @value{BULLET} @item The @code{FIELDWIDTHS} variable and its effects (@pxref{Constant Size}). @@ -33876,7 +33887,7 @@ and printing timestamps Additional command-line options (@pxref{Options}): -@itemize @minus +@itemize @value{MINUS} @item The @option{-W lint} option to provide error and portability checking for both the source code and at runtime. @@ -33891,7 +33902,7 @@ The @option{-W posix} option for full POSIX compliance. Version 2.14 of @command{gawk} introduced the following feature: -@itemize @bullet +@itemize @value{BULLET} @item The @code{next file} statement for skipping to the next data file (@pxref{Nextfile Statement}). @@ -33899,11 +33910,11 @@ The @code{next file} statement for skipping to the next data file Version 2.15 of @command{gawk} introduced the following features: -@itemize @bullet +@itemize @value{BULLET} @item New variables (@pxref{Built-in Variables}): -@itemize @minus +@itemize @value{MINUS} @item @code{ARGIND}, which tracks the movement of @code{FILENAME} through @code{ARGV}. @@ -33925,7 +33936,7 @@ The ability to delete all of an array at once with @samp{delete @var{array}} Command line option changes (@pxref{Options}): -@itemize @minus +@itemize @value{MINUS} @item The ability to use GNU-style long-named options that start with @option{--}. @@ -33937,11 +33948,11 @@ source code. Version 3.0 of @command{gawk} introduced the following features: -@itemize @bullet +@itemize @value{BULLET} @item New or changed variables: -@itemize @minus +@itemize @value{MINUS} @item @code{IGNORECASE} changed, now applying to string comparison as well as regexp operations @@ -33987,7 +33998,7 @@ Brian Kernighan's @command{awk} @item New command line options: -@itemize @minus +@itemize @value{MINUS} @item The @option{--lint-old} option to warn about constructs that are not available in @@ -34020,12 +34031,12 @@ This has since been removed. Version 3.1 of @command{gawk} introduced the following features: -@itemize @bullet +@itemize @value{BULLET} @item New variables (@pxref{Built-in Variables}): -@itemize @minus +@itemize @value{MINUS} @item @code{BINMODE}, for non-POSIX systems, which allows binary I/O for input and/or output files @@ -34073,7 +34084,7 @@ making translations easier @item A number of new built-in functions: -@itemize @minus +@itemize @value{MINUS} @item The @code{asort()} and @code{asorti()} functions for sorting arrays (@pxref{Array Sorting}). @@ -34107,7 +34118,7 @@ The support for @samp{next file} as two words was removed completely Additional commnd line options (@pxref{Options}): -@itemize @minus +@itemize @value{MINUS} @item The @option{--dump-variables} option to print a list of all global variables. @@ -34174,12 +34185,12 @@ enable printing times as UTC Version 4.0 of @command{gawk} introduced the following features: -@itemize @bullet +@itemize @value{BULLET} @item Variable additions: -@itemize @minus +@itemize @value{MINUS} @item @code{FPAT}, which allows you to specify a regexp that matches the fields, instead of matching the field separator @@ -34278,7 +34289,7 @@ Indirect function calls Command line option changes (@pxref{Options}): -@itemize @minus +@itemize @value{MINUS} @item The @option{-b} and @option{--characters-as-bytes} options which prevent @command{gawk} from treating input as a multibyte string. @@ -34329,7 +34340,7 @@ C locale, no matter what kind of regexp is being used, and even if @item Support was removed for the following systems: -@itemize @minus +@itemize @value{MINUS} @item Atari @@ -34367,7 +34378,7 @@ Prestandard VAX C compiler for VAX/VMS Version 4.1 of @command{gawk} introduced the following features: -@itemize @bullet +@itemize @value{BULLET} @item Three new arrays: @@ -34382,7 +34393,7 @@ one, named just @command{gawk}. As a result the command line options changed. Command line option changes (@pxref{Options}): -@itemize @minus +@itemize @value{MINUS} @item The @option{-D} option invokes the debugger. @@ -34570,7 +34581,7 @@ cases: the default regexp matching; with @option{--traditional} and with This @value{SECTION} names the major contributors to @command{gawk} and/or this @value{DOCUMENT}, in approximate chronological order: -@itemize @bullet +@itemize @value{BULLET} @item @cindex Aho, Alfred @cindex Weinberger, Peter @@ -34764,7 +34775,7 @@ Assaf Gordon contributed the code to implement the @cindex Haque, John John Haque made the following contributions: -@itemize @minus +@itemize @value{MINUS} @item The modifications to convert @command{gawk} into a byte-code interpreter, including the debugger. @@ -34861,7 +34872,7 @@ subdirectories. @cindex @command{gawk}, source code@comma{} obtaining There are three ways to get GNU software: -@itemize @bullet +@itemize @value{BULLET} @item Copy it from someone else who already has it. @@ -35615,7 +35626,7 @@ translate end-of-line @code{"\r\n"} to @code{"\n"} on input and @code{"\n"} to @code{"\r\n"} on output. A special @code{BINMODE} variable @value{COMMONEXT} allows control over these translations and is interpreted as follows: -@itemize @bullet +@itemize @value{BULLET} @item If @code{BINMODE} is @code{"r"}, or one, then @@ -36548,7 +36559,7 @@ using the traditional ``K&R'' style, particularly as regards to the placement of braces and the use of TABs. In brief, the coding rules for @command{gawk} are as follows: -@itemize @bullet +@itemize @value{BULLET} @item Use ANSI/ISO style (prototype) function headers when defining functions. @@ -37059,7 +37070,7 @@ mechanism was bolted onto the side and was not really well thought out. The old extension mechanism had several problems: -@itemize @bullet +@itemize @value{BULLET} @item It depended heavily upon @command{gawk} internals. Any time the @code{NODE} structure@footnote{A critical central data structure @@ -37095,7 +37106,7 @@ project is provided in @ref{gawkextlib}. Some goals for the new API were: -@itemize @bullet +@itemize @value{BULLET} @item The API should be independent of @command{gawk} internals. Changes in @command{gawk} internals should not be visible to the writer of an @@ -37110,7 +37121,7 @@ The API should enable extensions written in C or C++ to have roughly the same ``appearance'' to @command{awk}-level code as @command{awk} functions do. This means that extensions should have: -@itemize @minus +@itemize @value{MINUS} @item The ability to access function parameters. @@ -37132,7 +37143,7 @@ multidimensional arrays). Some additional important goals were: -@itemize @bullet +@itemize @value{BULLET} @item The API should use only features in ISO C 90, so that extensions can be written using the widest range of C and C++ compilers. The header @@ -37155,7 +37166,7 @@ During development, it became clear that there were other features that should be available to extensions, which were also subsequently provided: -@itemize @bullet +@itemize @value{BULLET} @item Extensions should have the ability to hook into @command{gawk}'s I/O redirection mechanism. In particular, the @command{xgawk} @@ -37236,7 +37247,7 @@ to provide a minimal yet powerful set of features for creating extensions. The API can later be expanded, in two ways: -@itemize @bullet +@itemize @value{BULLET} @item @command{gawk} passes an ``extension id'' into the extension when it first loads the extension. The extension then passes this id back -- cgit v1.2.3 From c87f4150028ba1a144f8fa1f5e390b7cc129d7b9 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 26 May 2014 08:11:07 +0300 Subject: Compile fix in io.c for DJGPP. --- ChangeLog | 5 +++++ io.c | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1ceb79fa..51becff7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-05-26 Arnold D. Robbins + + * io.c (inetfile): Change return type to bool. Wrap code + with ifdef HAVE_SOCKETS so that it'll compile on DJGPP. + 2014-05-22 Andrew J. Schorr Allow any redirected getline inside BEGINFILE/ENDFILE. diff --git a/io.c b/io.c index 3d7b00ab..57d4af22 100644 --- a/io.c +++ b/io.c @@ -296,7 +296,7 @@ struct inet_socket_info { } localport, remotehost, remoteport; }; -static int inetfile(const char *str, struct inet_socket_info *isn); +static bool inetfile(const char *str, struct inet_socket_info *isn); static NODE *in_PROCINFO(const char *pidx1, const char *pidx2, NODE **full_idx); static long get_read_timeout(IOBUF *iop); @@ -3723,9 +3723,12 @@ free_rp(struct redirect *rp) /* inetfile --- return true for a /inet special file, set other values */ -static int +static bool inetfile(const char *str, struct inet_socket_info *isi) { +#ifndef HAVE_SOCKETS + return false; +#else const char *cp = str; struct inet_socket_info buf; @@ -3805,6 +3808,7 @@ inetfile(const char *str, struct inet_socket_info *isi) fatal(_("IPv6 communication is not supported")); #endif return true; +#endif /* HAVE_SOCKETS */ } /* -- cgit v1.2.3 From a7eae6112b56320655433e4e3c8a67f6f7321bdd Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 27 May 2014 07:13:01 +0300 Subject: Finish edits! --- doc/ChangeLog | 4 + doc/gawk.info | 1505 ++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 327 ++++++------ doc/gawktexi.in | 327 ++++++------ 4 files changed, 1121 insertions(+), 1042 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index f051a9c1..b91b9238 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-05-27 Arnold D. Robbins + + * gawktexi.in: Edits through the end! + 2014-05-25 Arnold D. Robbins * gawktexi.in: Edits through Appendix A. diff --git a/doc/gawk.info b/doc/gawk.info index 48a8e9a4..ceeeb6f7 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -637,7 +637,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) * New Ports:: Porting `gawk' to a new operating system. * Derived Files:: Why derived files are kept in the - `git' repository. + Git repository. * Future Extensions:: New features that may be implemented one day. * Implementation Limitations:: Some limitations of the @@ -1328,7 +1328,7 @@ 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 curly braces to separate it from the pattern. +The action is enclosed in braces to separate it from the pattern. Newlines usually separate rules. Therefore, an `awk' program looks like this: @@ -1877,10 +1877,10 @@ for _every_ input line. If the action is omitted, the default action is to print all lines that match the pattern. Thus, we could leave out the action (the `print' statement and the -curly braces) in the previous example and the result would be the same: -`awk' prints all lines matching the pattern `li'. By comparison, -omitting the `print' statement but retaining the curly braces makes an -empty action that does nothing (i.e., no lines are printed). +braces) in the previous example and the result would be the same: `awk' +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 @@ -8940,12 +8940,12 @@ outline, an `awk' program generally looks like this: ... An action consists of one or more `awk' "statements", enclosed in -curly braces (`{...}'). Each statement specifies one thing to do. The -statements are separated by newlines or semicolons. The curly braces -around an action must be used even if the action contains only one -statement, or if it contains no statements at all. However, if you -omit the action entirely, omit the curly braces as well. An omitted -action is equivalent to `{ print $0 }': +braces (`{...}'). Each statement specifies one thing to do. The +statements are separated by newlines or semicolons. The braces around +an action must be used even if the action contains only one statement, +or if it contains no statements at all. However, if you omit the +action entirely, omit the braces as well. An omitted action is +equivalent to `{ print $0 }': /foo/ { } match `foo', do nothing -- empty action /foo/ match `foo', print the record -- omitted action @@ -8964,9 +8964,9 @@ Control statements well as a few special ones (*note Statements::). Compound statements - Enclose one or more statements in curly braces. A compound - statement is used in order to put several statements together in - the body of an `if', `while', `do', or `for' statement. + Enclose one or more statements in braces. A compound statement is + used in order to put several statements together in the body of an + `if', `while', `do', or `for' statement. Input statements Use the `getline' command (*note Getline::). Also supplied in @@ -8995,7 +8995,7 @@ statements contain other statements. For example, the `if' statement contains another statement that may or may not be executed. The contained statement is called the "body". To include more than one statement in the body, group them into a single "compound statement" -with curly braces, separating them with newlines or semicolons. +with braces, separating them with newlines or semicolons. * Menu: @@ -9043,8 +9043,8 @@ the value of `x' is evenly divisible by two), then the first `print' statement is executed; otherwise, the second `print' statement is executed. If the `else' keyword appears on the same line as THEN-BODY and THEN-BODY is not a compound statement (i.e., not surrounded by -curly braces), then a semicolon must separate THEN-BODY from the `else'. -To illustrate this, the previous example can be rewritten as: +braces), then a semicolon must separate THEN-BODY from the `else'. To +illustrate this, the previous example can be rewritten as: if (x % 2 == 0) print "x is even"; else print "x is odd" @@ -24427,7 +24427,7 @@ directory and run the program: ---------- Footnotes ---------- (1) In practice, you would probably want to use the GNU -Autotools--Automake, Autoconf, Libtool, and Gettext--to configure and +Autotools--Automake, Autoconf, Libtool, and `gettext'--to configure and build your libraries. Instructions for doing so are beyond the scope of this Info file. *Note gawkextlib::, for WWW links to the tools. @@ -25050,7 +25050,7 @@ parser library installed in order to build and use the XML extension. In addition, you must have the GNU Autotools installed (Autoconf (http://www.gnu.org/software/autoconf), Automake (http://www.gnu.org/software/automake), Libtool -(http://www.gnu.org/software/libtool), and Gettext +(http://www.gnu.org/software/libtool), and GNU `gettext' (http://www.gnu.org/software/gettext)). The simple recipe for building and testing `gawkextlib' is as @@ -26181,7 +26181,6 @@ the GNU Zip program, `gzip'. use `gzip' to expand the file and then use `tar' to extract it. You can use the following pipeline to produce the `gawk' distribution: - # Under System V, add 'o' to the tar options gzip -d -c gawk-4.1.1.tar.gz | tar -xvpf - On a system with GNU `tar', you can let `tar' do the decompression @@ -26317,8 +26316,8 @@ Various `.c', `.y', and `.h' files `Makefile.am' `*/Makefile.am' - Files used by the GNU `automake' software for generating the - `Makefile.in' files used by `autoconf' and `configure'. + Files used by the GNU Automake software for generating the + `Makefile.in' files used by Autoconf and `configure'. `Makefile.in' `aclocal.m4' @@ -26409,8 +26408,8 @@ environment for MS-Windows. `gawk-4.1.1'. Like most GNU software, `gawk' is configured automatically for your system by running the `configure' program. This program is a Bourne shell script that is generated automatically using -GNU `autoconf'. (The `autoconf' software is described fully starting -with *note (Autoconf)Top:: autoconf,Autoconf--Generating Automatic +GNU Autoconf. (The Autoconf software is described fully starting with +*note (Autoconf)Top:: autoconf,Autoconf--Generating Automatic Configuration Scripts.) To configure `gawk', simply run `configure': @@ -26488,8 +26487,8 @@ command line when compiling `gawk' from scratch, including: improvement. `--with-whiny-user-strftime' - Force use of the included version of the `strftime()' function for - deficient systems. + Force use of the included version of the C `strftime()' function + for deficient systems. Use the command `./configure --help' to see the full list of options that `configure' supplies. @@ -26533,9 +26532,9 @@ any constants that `configure' defined and should not have. `custom.h' is automatically included by `config.h'. It is also possible that the `configure' program generated by -`autoconf' will not work on your system in some other fashion. If you -do have a problem, the file `configure.ac' is the input for `autoconf'. -You may be able to change this file and generate a new version of +Autoconf will not work on your system in some other fashion. If you do +have a problem, the file `configure.ac' is the input for Autoconf. You +may be able to change this file and generate a new version of `configure' that works on your system (*note Bugs::, for information on how to report problems in configuring `gawk'). The same mechanism may be used to send in updates to `configure.ac' and/or `custom.h'. @@ -26696,7 +26695,12 @@ other set of (self-consistent) environment variables and compiler flags. NOTE: Ancient OS/2 ports of GNU `make' are not able to handle the Makefiles of this package. If you encounter any problems with `make', try GNU Make 3.79.1 or later versions. You should find - the latest version on `ftp://hobbes.nmsu.edu/pub/os2/'. + the latest version on `ftp://hobbes.nmsu.edu/pub/os2/'.(1) + + ---------- Footnotes ---------- + + (1) As of May, 2014, this site is still there, but the author could +not find a package for GNU Make.  File: gawk.info, Node: PC Testing, Next: PC Using, Prev: PC Compiling, Up: PC Installation @@ -26737,11 +26741,11 @@ Networking::). EMX (OS/2 only) supports at least the `|&' operator. files as described in *note AWKPATH Variable::. However, semicolons (rather than colons) separate elements in the `AWKPATH' variable. If `AWKPATH' is not set or is empty, then the default search path for -MS-Windows and MS-DOS versions is `".;c:/lib/awk;c:/gnu/lib/awk"'. +MS-Windows and MS-DOS versions is `.;c:/lib/awk;c:/gnu/lib/awk'. The search path for OS/2 (32 bit, EMX) is determined by the prefix directory (most likely `/usr' or `c:/usr') that has been specified as -an option of the `configure' script like it is the case for the Unix +an option of the `configure' script as is the case for the Unix versions. If `c:/usr' is the prefix directory then the default search path contains `.' and `c:/usr/share/awk'. Additionally, to support binary distributions of `gawk' for OS/2 systems whose drive `c:' might @@ -26749,7 +26753,7 @@ not support long file names or might not exist at all, there is a special environment variable. If `UNIXROOT' specifies a drive then this specific drive is also searched for program files. E.g., if `UNIXROOT' is set to `e:' the complete default search path is -`".;c:/usr/share/awk;e:/usr/share/awk"'. +`.;c:/usr/share/awk;e:/usr/share/awk'. An `sh'-like shell (as opposed to `command.com' under MS-DOS or `cmd.exe' under MS-Windows or OS/2) may be useful for `awk' programming. @@ -26757,10 +26761,9 @@ 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 `"\n"' to `"\r\n"' on output. A special `BINMODE' variable -(c.e.) allows control over these translations and is interpreted as -follows: +programs) silently translate 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: * If `BINMODE' is `"r"', or one, then binary mode is set on read (i.e., no translations on reads). @@ -26786,11 +26789,11 @@ and cannot be changed mid-stream. Versions::). `mawk' and `gawk' handle `BINMODE' similarly; however, `mawk' adds a `-W BINMODE=N' option and an environment variable that can set `BINMODE', `RS', and `ORS'. The files `binmode[1-3].awk' -(under `gnu/lib/awk' in some of the prepared distributions) have been -chosen to match `mawk''s `-W BINMODE=N' option. These can be changed -or discarded; in particular, the setting of `RS' giving the fewest -"surprises" is open to debate. `mawk' uses `RS = "\r\n"' if binary -mode is set on read, which is appropriate for files with the +(under `gnu/lib/awk' in some of the prepared binary distributions) have +been chosen to match `mawk''s `-W BINMODE=N' option. These can be +changed or discarded; in particular, the setting of `RS' giving the +fewest "surprises" is open to debate. `mawk' uses `RS = "\r\n"' if +binary mode is set on read, which is appropriate for files with the MS-DOS-style end-of-line. To illustrate, the following examples set binary mode on writes for @@ -26893,10 +26896,10 @@ or: $ MMK/DESCRIPTION=[.vms]descrip.mms gawk `MMK' is an open source, free, near-clone of `MMS' and can better -handle `ODS-5' volumes with upper- and lowercase filenames. `MMK' is +handle ODS-5 volumes with upper- and lowercase filenames. `MMK' is available from `https://github.com/endlesssoftware/mmk'. - With `ODS-5' volumes and extended parsing enabled, the case of the + With ODS-5 volumes and extended parsing enabled, the case of the target parameter may need to be exact. `gawk' has been tested under VAX/VMS 7.3 and Alpha/VMS 7.3-1 using @@ -26904,8 +26907,8 @@ 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) - The `[.vms]gawk_build_steps.txt' provides information on how to build -`gawk' into a PCSI kit that is compatible with the GNV product. + *Note VMS GNV::, for information on building `gawk' as a PCSI kit +that is compatible with the GNV product. ---------- Footnotes ---------- @@ -27147,11 +27150,12 @@ get this information with the command `gawk --version'. Once you have a precise problem, send email to . - Using this address automatically sends a copy of your mail to me. -If necessary, I can be reached directly at . The -bug reporting address is preferred since the email list is archived at -the GNU Project. _All email should be in English, since that is my -native language._ + The `gawk' maintainers subscribe to this address and thus they will +receive your bug report. If necessary, the primary maintainer can be +reached directly at . The bug reporting address is +preferred since the email list is archived at the GNU Project. _All +email should be in English. This is the only language understood in +common by all the maintainers._ CAUTION: Do _not_ try to report bugs in `gawk' by posting to the Usenet/Internet newsgroup `comp.lang.awk'. While the `gawk' @@ -27186,7 +27190,7 @@ considered authoritative if it conflicts with this Info file. The people maintaining the non-Unix ports of `gawk' are as follows: MS-DOS with DJGPP Scott Deifik, . -MS-Windows with MINGW Eli Zaretskii, . +MS-Windows with MinGW Eli Zaretskii, . OS/2 Andreas Buening, . VMS Pat Rankin, , and John Malmberg, . @@ -27292,12 +27296,13 @@ Busybox Awk (http://busybox.net). The OpenSolaris POSIX `awk' - The version of `awk' in `/usr/xpg4/bin' on Solaris is more-or-less - POSIX-compliant. It is based on the `awk' from Mortice Kern - Systems for PCs. This author was able to make it compile and work - under GNU/Linux with 1-2 hours of work. Making it more generally - portable (using GNU Autoconf and/or Automake) would take more - work, and this has not been done, at least to our knowledge. + 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 + `awk' from Mortice Kern Systems for PCs. This author was 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 Automake) would take more work, and this has not been done, + at least to our knowledge. The source code used to be available from the OpenSolaris web site. However, that project was ended and the web site shut down. @@ -27335,6 +27340,9 @@ QSE Awk `http://www.quiktrim.org/QTawk.html' for more information, including the manual and a download link. + The project may als be frozen; no new code changes have been made + since approximately 2008. + Other Versions See also the Wikipedia article (http://en.wikipedia.org/wiki/Awk_language#Versions_and_implementations), @@ -27377,7 +27385,7 @@ one more option available on the command line: `-Y' `--parsedebug' - Prints out the parse stack information as the program is being + Print out the parse stack information as the program is being parsed. This option is intended only for serious `gawk' developers and not @@ -27406,7 +27414,7 @@ as well as any considerations you should bear in mind. * New Ports:: Porting `gawk' to a new operating system. * Derived Files:: Why derived files are kept in the - `git' repository. + Git repository.  File: gawk.info, Node: Accessing The Source, Next: Adding Code, Up: Additions @@ -27427,9 +27435,9 @@ doesn't have it. Once you have done so, use the command: git clone git://git.savannah.gnu.org/gawk.git -This will clone the `gawk' repository. If you are behind a firewall -that will not allow you to use the Git native protocol, you can still -access the repository using: +This clones the `gawk' repository. If you are behind a firewall that +does not allow you to use the Git native protocol, you can still access +the repository using: git clone http://git.savannah.gnu.org/r/gawk.git @@ -27451,7 +27459,7 @@ C.2.2 Adding New Features You are free to add any new features you like to `gawk'. However, if you want your changes to be incorporated into the `gawk' distribution, there are several steps that you need to take in order to make it -possible to include your changes: +possible to include them: 1. Before building the new feature into `gawk' itself, consider writing it as an extension module (*note Dynamic Extensions::). @@ -27468,9 +27476,10 @@ possible to include your changes: 3. Get the latest version. It is much easier for me to integrate changes if they are relative to the most recent distributed - version of `gawk'. If your version of `gawk' is very old, I may - not be able to integrate them at all. (*Note Getting::, for - information on getting the latest version of `gawk'.) + version of `gawk', or better yet, relative to the latest code in + the Git repository. If your version of `gawk' is very old, I may + not be able to integrate your changes at all. (*Note Getting::, + for information on getting the latest version of `gawk'.) 4. See *note (Version)Top:: standards, GNU Coding Standards. This document describes how GNU software should be written. If you @@ -27567,7 +27576,8 @@ possible to include your changes: 8. Include an entry for the `ChangeLog' file with your submission. This helps further minimize the amount of work I have to do, - making it easier for me to accept patches. + making it easier for me to accept patches. It is simplest if you + just make this part of your diff. 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 @@ -27608,18 +27618,24 @@ steps: people. Thus, you should not change them unless it is for a very good reason; i.e., changes are not out of the question, but changes to these files are scrutinized extra carefully. The files - are `dfa.c', `dfa.h', `getopt1.c', `getopt.c', `getopt.h', - `install-sh', `mkinstalldirs', `regcomp.c', `regex.c', - `regexec.c', `regexex.c', `regex.h', `regex_internal.c', and - `regex_internal.h'. - - 5. Be willing to continue to maintain the port. Non-Unix operating + are `dfa.c', `dfa.h', `getopt.c', `getopt.h', `getopt1.c', + `getopt_int.h', `gettext.h', `regcomp.c', `regex.c', `regex.h', + `regex_internal.c', `regex_internal.h', and `regexec.c'. + + 5. A number of other files are provided by the GNU Autotools + (Autoconf, Automake, and GNU `gettext'). You should not change + them either, unless it is for a very good reason. The files are + `ABOUT-NLS', `config.guess', `config.rpath', `config.sub', + `depcomp', `INSTALL', `install-sh', `missing', `mkinstalldirs', + `xalloc.h', and `ylwrap'. + + 6. Be willing to continue to maintain the port. Non-Unix operating systems are supported by volunteers who maintain the code needed to compile and run `gawk' on their systems. If noone volunteers to maintain a port, it becomes unsupported and it may be necessary to remove it from the distribution. - 6. Supply an appropriate `gawkmisc.???' file. Each port has its own + 7. Supply an appropriate `gawkmisc.???' file. Each port has its own `gawkmisc.???' that implements certain operating system specific functions. This is cleaner than a plethora of `#ifdef's scattered throughout the code. The `gawkmisc.c' in the main source @@ -27635,7 +27651,7 @@ steps: (Currently, this is only an issue for the PC operating system ports.) - 7. Supply a `Makefile' as well as any other C source and header files + 8. Supply a `Makefile' as well as any other C source and header files that are necessary for your operating system. All your code should be in a separate subdirectory, with a name that is the same as, or reminiscent of, either your operating system or the @@ -27645,7 +27661,7 @@ steps: avoid using names for your files that duplicate the names of files in the main source directory. - 8. Update the documentation. Please write a section (or sections) + 9. Update the documentation. Please write a section (or sections) for this Info file describing the installation and compilation steps needed to compile and/or install `gawk' for your system. @@ -27659,13 +27675,13 @@ style and brace layout that suits your taste.  File: gawk.info, Node: Derived Files, Prev: New Ports, Up: Additions -C.2.4 Why Generated Files Are Kept In `git' -------------------------------------------- +C.2.4 Why Generated Files Are Kept In Git +----------------------------------------- -If you look at the `gawk' source in the `git' repository, you will -notice that it includes files that are automatically generated by GNU -infrastructure tools, such as `Makefile.in' from `automake' and even -`configure' from `autoconf'. +If you look at the `gawk' source in the Git repository, you will notice +that it includes files that are automatically generated by GNU +infrastructure tools, such as `Makefile.in' from Automake and even +`configure' from Autoconf. This is different from many Free Software projects that do not store the derived files, because that keeps the repository less cluttered, @@ -27692,10 +27708,10 @@ build?) If the repository has all the generated files, then it's easy to just check them out and build. (Or _easier_, depending upon how far -back we go. `:-)') +back we go.) And that brings us to the second (and stronger) reason why all the -files really need to be in `git'. It boils down to who do you cater +files really need to be in Git. It boils down to who do you cater to--the `gawk' developer(s), or the user who just wants to check out a version and try it out? @@ -27721,7 +27737,7 @@ idea how to create it, and that was not the only problem.) He felt _extremely_ frustrated. With respect to that branch, the maintainer is no different than Jane User who wants to try to build -`gawk-4.0-stable' or `master' from the repository. +`gawk-4.1-stable' or `master' from the repository. Thus, the maintainer thinks that it's not just important, but critical, that for any given branch, the above incantation _just works_. @@ -27736,32 +27752,26 @@ critical, that for any given branch, the above incantation _just works_. B. He is really good at `git diff x y > /tmp/diff1 ; gvim /tmp/diff1' to remove the diffs that aren't of interest in - order to review code. `:-)' + order to review code. 2. It would certainly help if everyone used the same versions of the GNU tools as he does, which in general are the latest released - versions of `automake', `autoconf', `bison', and `gettext'. + versions of Automake, Autoconf, `bison', and `gettext'. - A. Installing from source is quite easy. It's how the maintainer - worked for years under Fedora. He had `/usr/local/bin' at - the front of his `PATH' and just did: - - wget http://ftp.gnu.org/gnu/PACKAGE/PACKAGE-X.Y.Z.tar.gz - tar -xpzvf PACKAGE-X.Y.Z.tar.gz - cd PACKAGE-X.Y.Z - ./configure && make && make check - make install # as root - - B. These days the maintainer uses Ubuntu 12.04 which is medium - current, but he is already doing the above for `autoconf', - `automake' and `bison'. + Installing from source is quite easy. It's how the maintainer + worked for years, and still works. He had `/usr/local/bin' at the + front of his `PATH' and just did: + wget http://ftp.gnu.org/gnu/PACKAGE/PACKAGE-X.Y.Z.tar.gz + tar -xpzvf PACKAGE-X.Y.Z.tar.gz + cd PACKAGE-X.Y.Z + ./configure && make && make check + make install # as root Most of the above was originally written by the maintainer to other `gawk' developers. It raised the objection from one of the developers -"... that anybody pulling down the source from `git' is not an end -user." +"... that anybody pulling down the source from Git is not an end user." However, this is not true. There are "power `awk' users" who can build `gawk' (using the magic incantation shown previously) but who @@ -27770,12 +27780,12 @@ all the time. It was then suggested that there be a `cron' job to create nightly tarballs of "the source." Here, the problem is that there are source -trees, corresponding to the various branches! So, nightly tar balls +trees, corresponding to the various branches! So, nightly tarballs aren't the answer, especially as the repository can go for weeks without significant change being introduced. - Fortunately, the `git' server can meet this need. For any given -branch named BRANCHNAME, use: + Fortunately, the Git server can meet this need. For any given branch +named BRANCHNAME, use: wget http://git.savannah.gnu.org/cgit/gawk.git/snapshot/gawk-BRANCHNAME.tar.gz @@ -27786,9 +27796,9 @@ to retrieve a snapshot of the given branch. (1) We tried. It was painful. (2) There is one GNU program that is (in our opinion) severely -difficult to bootstrap from the `git' repository. For example, on the -author's old (but still working) PowerPC macintosh with Mac OS X 10.5, -it was necessary to bootstrap a ton of software, starting with `git' +difficult to bootstrap from the Git repository. For example, on the +author's old (but still working) PowerPC Macintosh with Mac OS X 10.5, +it was necessary to bootstrap a ton of software, starting with Git itself, in order to try to work with the latest code. It's not pleasant, and especially on older systems, it's a big waste of time. @@ -27796,8 +27806,8 @@ pleasant, and especially on older systems, it's a big waste of time. maintainers had dropped `.gz' and `.bz2' files and only distribute `.tar.xz' files. It was necessary to bootstrap `xz' first! - (3) A branch created by one of the other developers that did not -include the generated files. + (3) A branch (since removed) created by one of the other developers +that did not include the generated files.  File: gawk.info, Node: Future Extensions, Next: Implementation Limitations, Prev: Additions, Up: Notes @@ -27810,11 +27820,11 @@ C.3 Probable Future Extensions Hey! -- Larry Wall - The `TODO' file in the `gawk' Git repository lists possible future -enhancements. Some of these relate to the source code, and others to -possible new features. Please see that file for the list. *Note -Additions::, if you are interested in tackling any of the projects -listed there. + The `TODO' file in the `master' branch of the `gawk' Git repository +lists possible future enhancements. Some of these relate to the source +code, and others to possible new features. Please see that file for +the list. *Note Additions::, if you are interested in tackling any of +the projects listed there.  File: gawk.info, Node: Implementation Limitations, Next: Extension Design, Prev: Future Extensions, Up: Notes @@ -27891,9 +27901,9 @@ The old extension mechanism had several problems: * Being able to call into `gawk' from an extension required linker facilities that are common on Unix-derived systems but that did - not work on Windows systems; users wanting extensions on Windows - had to statically link them into `gawk', even though Windows - supports dynamic loading of shared objects. + not work on MS-Windows systems; users wanting extensions on + MS-Windows had to statically link them into `gawk', even though + MS-Windows supports dynamic loading of shared objects. * The API would change occasionally as `gawk' changed; no compatibility between versions was ever offered or planned for. @@ -27941,8 +27951,8 @@ Some goals for the new API were: flattening") in order to loop over all the element in an easy fashion for C code. - - The ability to create arrays (including `gawk''s true - multidimensional arrays). + - The ability to create arrays (including `gawk''s true arrays + of arrays). Some additional important goals were: @@ -27956,7 +27966,7 @@ Some goals for the new API were: * The API mechanism should not require access to `gawk''s symbols(1) by the compile-time or dynamic linker, in order to enable creation - of extensions that also work on Windows. + of extensions that also work on MS-Windows. During development, it became clear that there were other features that should be available to extensions, which were also subsequently @@ -27994,7 +28004,7 @@ Mechanism Outline::, for the details. (1) The "symbols" are the variables and functions defined inside `gawk'. Access to these symbols by code external to `gawk' loaded -dynamically at runtime is problematic on Windows. +dynamically at runtime is problematic on MS-Windows.  File: gawk.info, Node: Extension Other Design Decisions, Next: Extension Future Growth, Prev: Extension New Mechanism Goals, Up: Extension Design @@ -28250,15 +28260,14 @@ like this: `""'. Humans are used to working in decimal; i.e., base 10. In base 10, numbers go from 0 to 9, and then "roll over" into the next column. -(Remember grade school? 42 is 4 times 10 plus 2.) +(Remember grade school? 42 = 4 x 10 + 2.) There are other number bases though. Computers commonly use base 2 or "binary", base 8 or "octal", and base 16 or "hexadecimal". In binary, each column represents two times the value in the column to its right. Each column may contain either a 0 or a 1. Thus, binary 1010 -represents 1 times 8, plus 0 times 4, plus 1 times 2, plus 0 times 1, -or decimal 10. Octal and hexadecimal are discussed more in *note -Nondecimal-numbers::. +represents (1 x 8) + (0 x 4) + (1 x 2) + (0 x 1), or decimal 10. Octal +and hexadecimal are discussed more in *note Nondecimal-numbers::. At the very lowest level, computers store values as groups of binary digits, or "bits". Modern computers group bits into groups of eight, @@ -28290,8 +28299,7 @@ Glossary Action A series of `awk' statements attached to a rule. If the rule's pattern matches an input record, `awk' executes the rule's action. - Actions are always enclosed in curly braces. (*Note Action - Overview::.) + Actions are always enclosed in braces. (*Note Action Overview::.) Amazing `awk' Assembler Henry Spencer at the University of Toronto wrote a retargetable @@ -28377,9 +28385,9 @@ Boolean Expression Bourne Shell The standard shell (`/bin/sh') on Unix and Unix-like systems, - originally written by Steven R. Bourne. Many shells (Bash, `ksh', - `pdksh', `zsh') are generally upwardly compatible with the Bourne - shell. + originally written by Steven R. Bourne at Bell Laboratories. Many + shells (Bash, `ksh', `pdksh', `zsh') are generally upwardly + compatible with the Bourne shell. Built-in Function The `awk' language provides built-in functions that perform various @@ -28400,7 +28408,8 @@ Built-in Variable Variables::.) Braces - See "Curly Braces." + The characters `{' and `}'. Braces are used in `awk' for + delimiting actions, compound statements, and function bodies. C The system programming language that most GNU software is written @@ -28421,8 +28430,8 @@ Character Set ASCII (American Standard Code for Information Interchange). Many European countries use an extension of ASCII known as ISO-8859-1 (ISO Latin-1). The Unicode character set (http://www.unicode.org) - is becoming increasingly popular and standard, and is particularly - widely used on GNU/Linux systems. + is increasingly popular and standard, and is particularly widely + used on GNU/Linux systems. CHEM A preprocessor for `pic' that reads descriptions of molecules and @@ -28432,7 +28441,7 @@ CHEM Cookie A peculiar goodie, token, saying or remembrance produced by or - presented to a program. (With thanks to Doug McIlroy.) + presented to a program. (With thanks to Professor Doug McIlroy.) Coprocess A subordinate program with which two-way communications is @@ -28467,8 +28476,7 @@ Comparison Expression process. (*Note Typing and Comparison::.) Curly Braces - The characters `{' and `}'. Curly braces are used in `awk' for - delimiting actions, compound statements, and function bodies. + See "Braces." Dark Corner An area in the language where specifications often were (or still @@ -28508,8 +28516,8 @@ Dynamic Regular Expression (*Note Computed Regexps::.) Environment - A collection of strings, of the form NAME`='`val', that each - program has available to it. Users generally place values into the + 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'. @@ -28559,11 +28567,11 @@ Floating-Point Number See also "Double Precision" and "Single Precision." Format - Format strings are used to control the appearance of output in the - `strftime()' and `sprintf()' functions, and are used in the - `printf' statement as well. Also, data conversions from numbers - to strings are controlled by the format strings contained in the - built-in variables `CONVFMT' and `OFMT'. (*Note Control Letters::.) + Format strings control the appearance of output in the + `strftime()' and `sprintf()' functions, and in the `printf' + statement as well. Also, data conversions from numbers to strings + are controlled by the format strings contained in the built-in + variables `CONVFMT' and `OFMT'. (*Note Control Letters::.) Free Documentation License This document describes the terms under which this Info file is @@ -28618,8 +28626,8 @@ Hexadecimal Base 16 notation, where the digits are `0'-`9' and `A'-`F', with `A' representing 10, `B' representing 11, and so on, up to `F' for 15. Hexadecimal numbers are written in C using a leading `0x', to - indicate their base. Thus, `0x12' is 18 (1 times 16 plus 2). - *Note Nondecimal-numbers::. + indicate their base. Thus, `0x12' is 18 ((1 x 16) + 2). *Note + Nondecimal-numbers::. I/O Abbreviation for "Input/Output," the act of moving data into and/or @@ -28676,7 +28684,7 @@ Keyword `gawk''s keywords are: `BEGIN', `BEGINFILE', `END', `ENDFILE', `break', `case', `continue', `default' `delete', `do...while', `else', `exit', `for...in', `for', `function', `func', `if', - `nextfile', `next', `switch', and `while'. + `next', `nextfile', `switch', and `while'. Lesser General Public License This document describes the terms under which binary library @@ -28732,11 +28740,7 @@ Number Octal Base-eight notation, where the digits are `0'-`7'. Octal numbers are written in C using a leading `0', to indicate their base. - Thus, `013' is 11 (one times 8 plus 3). *Note - Nondecimal-numbers::. - -P1003.1 - See "POSIX." + Thus, `013' is 11 ((1 x 8) + 3). *Note Nondecimal-numbers::. Pattern Patterns tell `awk' which input records are interesting to which @@ -28777,9 +28781,9 @@ Range (of input lines) specify single lines. (*Note Pattern Overview::.) Recursion - When a function calls itself, either directly or indirectly. As - long as this is not clear, refer to the entry for "recursion." If - this is clear, stop, and proceed to the next entry. + When a function calls itself, either directly or indirectly. If + this is clear, stop, and proceed to the next entry. Otherwise, + refer to the entry for "recursion." Redirection Redirection means performing input from something other than the @@ -28860,8 +28864,8 @@ Single Precision parts. Single precision numbers keep track of fewer digits than do double precision numbers, but operations on them are sometimes less expensive in terms of CPU time. This is the type used by - some very old versions of `awk' to store numeric values. It is - the C type `float'. + some ancient versions of `awk' to store numeric values. It is the + C type `float'. Space The character generated by hitting the space bar on the keyboard. @@ -28895,7 +28899,7 @@ Text Domain Timestamp A value in the "seconds since the epoch" format used by Unix and POSIX systems. Used for the `gawk' functions `mktime()', - `strftime()', and `systime()'. See also "Epoch" and "UTC." + `strftime()', and `systime()'. See also "Epoch," "GMT," and "UTC." Unix A computer operating system originally developed in the early @@ -30410,7 +30414,7 @@ Index * actions, control statements in: Statements. (line 6) * actions, default: Very Simple. (line 34) * actions, empty: Very Simple. (line 39) -* Ada programming language: Glossary. (line 20) +* Ada programming language: Glossary. (line 19) * adding, features to gawk: Adding Code. (line 6) * adding, fields: Changing Fields. (line 53) * advanced features, fixed-width data: Constant Size. (line 10) @@ -30429,8 +30433,8 @@ Index * allocating memory for extensions: Memory Allocation Functions. (line 6) * Alpha (DEC): Manual History. (line 28) -* amazing awk assembler (aaa): Glossary. (line 12) -* amazingly workable formatter (awf): Glossary. (line 25) +* amazing awk assembler (aaa): Glossary. (line 11) +* amazingly workable formatter (awf): Glossary. (line 24) * ambiguity, syntactic: /= operator vs. /=.../ regexp constant: Assignment Ops. (line 148) * ampersand (&), && operator <1>: Precedence. (line 86) @@ -30442,7 +30446,7 @@ Index * and: Bitwise Functions. (line 39) * AND bitwise operation: Bitwise Functions. (line 6) * and Boolean-logic operator: Boolean Ops. (line 6) -* ANSI: Glossary. (line 35) +* ANSI: Glossary. (line 34) * API informational variables: Extension API Informational Variables. (line 6) * API version: Extension Versioning. @@ -30548,7 +30552,7 @@ Index * asterisk (*), *= operator: Assignment Ops. (line 130) * atan2: Numeric Functions. (line 11) * automatic displays, in debugger: Debugger Info. (line 24) -* awf (amazingly workable formatter) program: Glossary. (line 25) +* awf (amazingly workable formatter) program: Glossary. (line 24) * awk debugging, enabling: Options. (line 108) * awk language, POSIX version: Assignment Ops. (line 137) * awk profiling, enabling: Options. (line 242) @@ -30769,9 +30773,9 @@ Index * Brink, Jeroen: DOS Quoting. (line 10) * Broder, Alan J.: Contributors. (line 88) * Brown, Martin: Contributors. (line 82) -* BSD-based operating systems: Glossary. (line 616) +* BSD-based operating systems: Glossary. (line 611) * 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 70) @@ -30890,7 +30894,7 @@ Index * common extensions, RS as a regexp: gawk split records. (line 6) * common extensions, single character fields: Single Character Fields. (line 6) -* comp.lang.awk newsgroup: Bugs. (line 38) +* comp.lang.awk newsgroup: Bugs. (line 39) * comparison expressions: Typing and Comparison. (line 9) * comparison expressions, as patterns: Expression Patterns. (line 14) @@ -30977,7 +30981,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 38) -* dark corner <1>: Glossary. (line 189) +* dark corner <1>: Glossary. (line 188) * dark corner: Conventions. (line 38) * dark corner, "0" is actually true: Truth Values. (line 24) * dark corner, /= operator vs. /=.../ regexp constant: Assignment Ops. @@ -31148,7 +31152,7 @@ Index * 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) @@ -31320,7 +31324,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 235) +* epoch, definition of: Glossary. (line 234) * equals sign (=), = operator: Assignment Ops. (line 6) * equals sign (=), == operator <1>: Precedence. (line 65) * equals sign (=), == operator: Comparison Operators. @@ -31566,10 +31570,10 @@ Index * frame debugger command: Execution Stack. (line 25) * Free Documentation License (FDL): GNU Free Documentation License. (line 7) -* Free Software Foundation (FSF) <1>: Glossary. (line 297) +* Free Software Foundation (FSF) <1>: Glossary. (line 296) * Free Software Foundation (FSF) <2>: Getting. (line 10) * Free Software Foundation (FSF): Manual History. (line 6) -* FreeBSD: Glossary. (line 616) +* FreeBSD: Glossary. (line 611) * FS variable <1>: User-modified. (line 50) * FS variable: Field Separators. (line 15) * FS variable, --field-separator option and: Options. (line 21) @@ -31583,7 +31587,7 @@ Index * FS, containing ^: Regexp Field Splitting. (line 59) * FS, in multiline records: Multiple Line. (line 41) -* FSF (Free Software Foundation) <1>: Glossary. (line 297) +* FSF (Free Software Foundation) <1>: Glossary. (line 296) * FSF (Free Software Foundation) <2>: Getting. (line 10) * FSF (Free Software Foundation): Manual History. (line 6) * fts() extension function: Extension Sample File Functions. @@ -31646,7 +31650,7 @@ Index * gawk, break statement in: Break Statement. (line 51) * gawk, built-in variables and: Built-in Variables. (line 14) * gawk, character classes and: Bracket Expressions. (line 90) -* gawk, coding style in: Adding Code. (line 38) +* gawk, coding style in: Adding Code. (line 39) * gawk, command-line options, and regular expressions: GNU Regexp Operators. (line 70) * gawk, comparison operators and: Comparison Operators. @@ -31732,7 +31736,7 @@ Index (line 63) * gawkextlib: gawkextlib. (line 6) * gawkextlib project: gawkextlib. (line 6) -* General Public License (GPL): Glossary. (line 306) +* General Public License (GPL): Glossary. (line 305) * General Public License, See GPL: Manual History. (line 11) * generate time values: Time Functions. (line 25) * gensub <1>: String Functions. (line 89) @@ -31780,29 +31784,29 @@ Index * gettext() function (C library): Explaining gettext. (line 63) * gettimeofday() extension function: Extension Sample Time. (line 12) -* git utility <1>: Adding Code. (line 111) +* git utility <1>: Adding Code. (line 112) * git utility <2>: Accessing The Source. (line 10) * git utility <3>: Other Versions. (line 29) * git utility: gawkextlib. (line 29) -* git, use of for gawk source code: Derived Files. (line 6) +* Git, use of for gawk source code: Derived Files. (line 6) * GMP: Gawk and MPFR. (line 6) * GNITS mailing list: Acknowledgments. (line 52) * GNU awk, See gawk: Preface. (line 53) * GNU Free Documentation License: GNU Free Documentation License. (line 7) -* GNU General Public License: Glossary. (line 306) -* GNU Lesser General Public License: Glossary. (line 397) +* GNU General Public License: Glossary. (line 305) +* GNU Lesser General Public License: Glossary. (line 396) * 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 315) +* GNU Project <1>: Glossary. (line 314) * GNU Project: Manual History. (line 11) -* GNU/Linux <1>: Glossary. (line 616) +* GNU/Linux <1>: Glossary. (line 611) * 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 306) +* GPL (General Public License) <1>: Glossary. (line 305) * GPL (General Public License): Manual History. (line 11) * GPL (General Public License), printing: Options. (line 88) * grcat program: Group Functions. (line 16) @@ -31858,8 +31862,8 @@ Index (line 53) * IGNORECASE variable, with ~ and !~ operators: Case-sensitivity. (line 26) -* Illumos: Other Versions. (line 104) -* Illumos, POSIX-compliant awk: Other Versions. (line 104) +* Illumos: Other Versions. (line 105) +* Illumos, POSIX-compliant awk: Other Versions. (line 105) * implementation issues, gawk: Notes. (line 6) * implementation issues, gawk, debugging: Compatibility Mode. (line 6) * implementation issues, gawk, limits <1>: Redirection. (line 135) @@ -31935,21 +31939,21 @@ Index * internationalization, localization, portability and: I18N Portability. (line 6) * internationalizing a program: Explaining gettext. (line 6) -* interpreted programs <1>: Glossary. (line 357) +* interpreted programs <1>: Glossary. (line 356) * interpreted programs: Basic High Level. (line 15) * interval expressions, regexp operator: Regexp Operators. (line 117) * inventory-shipped file: Sample Data Files. (line 32) * invoke shell command: I/O Functions. (line 75) * isarray: Type Functions. (line 11) -* ISO: Glossary. (line 368) +* ISO: Glossary. (line 367) * ISO 8859-1: Glossary. (line 133) * ISO Latin-1: Glossary. (line 133) * Jacobs, Andrew: Passwd Functions. (line 90) * Jaegermann, Michal <1>: Contributors. (line 45) * Jaegermann, Michal: Acknowledgments. (line 60) -* Java implementation of awk: Other Versions. (line 112) -* Java programming language: Glossary. (line 380) -* jawk: Other Versions. (line 112) +* Java implementation of awk: Other Versions. (line 113) +* Java programming language: Glossary. (line 379) +* jawk: Other Versions. (line 113) * Jedi knights: Undocumented. (line 6) * Johansen, Chris: Signature Program. (line 25) * join() user-defined function: Join Function. (line 18) @@ -31958,7 +31962,7 @@ Index * Kasal, Stepan: Acknowledgments. (line 60) * Kenobi, Obi-Wan: Undocumented. (line 6) * Kernighan, Brian <1>: Glossary. (line 143) -* Kernighan, Brian <2>: Basic Data Typing. (line 55) +* Kernighan, Brian <2>: Basic Data Typing. (line 54) * Kernighan, Brian <3>: Other Versions. (line 13) * Kernighan, Brian <4>: Contributors. (line 11) * Kernighan, Brian <5>: BTL. (line 6) @@ -32001,9 +32005,9 @@ Index * length: String Functions. (line 167) * length of input record: String Functions. (line 174) * length of string: String Functions. (line 167) -* Lesser General Public License (LGPL): Glossary. (line 397) -* LGPL (Lesser General Public License): Glossary. (line 397) -* libmawk: Other Versions. (line 120) +* Lesser General Public License (LGPL): Glossary. (line 396) +* LGPL (Lesser General Public License): Glossary. (line 396) +* libmawk: Other Versions. (line 121) * libraries of awk functions: Library Functions. (line 6) * libraries of awk functions, assertions: Assert Function. (line 6) * libraries of awk functions, associative arrays and: Library Names. @@ -32047,7 +32051,7 @@ Index * lint checking, undefined functions: Pass By Value/Reference. (line 88) * LINT variable: User-modified. (line 88) -* Linux <1>: Glossary. (line 616) +* Linux <1>: Glossary. (line 611) * Linux <2>: I18N Example. (line 55) * Linux: Manual History. (line 28) * list all global variables, in debugger: Debugger Info. (line 48) @@ -32085,7 +32089,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) * mark parity: Ordinal Functions. (line 45) * marked string extraction (internationalization): String Extraction. @@ -32106,6 +32110,7 @@ Index * mawk utility <4>: Getline/Pipe. (line 62) * mawk utility: Escape Sequences. (line 124) * maximum precision supported by MPFR library: Auto-set. (line 213) +* McIlroy, Doug: Glossary. (line 149) * McPhee, Patrick: Contributors. (line 100) * message object files: Explaining gettext. (line 42) * message object files, converting from portable object files: I18N Example. @@ -32138,7 +32143,7 @@ Index * namespace issues, functions: Definition Syntax. (line 20) * nawk utility: Names. (line 10) * negative zero: Unexpected Results. (line 34) -* NetBSD: Glossary. (line 616) +* NetBSD: Glossary. (line 611) * networks, programming: TCP/IP Networking. (line 6) * networks, support for: Special Network. (line 6) * newlines <1>: Boolean Ops. (line 67) @@ -32227,7 +32232,7 @@ Index * OFS variable <1>: User-modified. (line 114) * OFS variable <2>: Output Separators. (line 6) * OFS variable: Changing Fields. (line 64) -* OpenBSD: Glossary. (line 616) +* OpenBSD: Glossary. (line 611) * OpenSolaris: Other Versions. (line 96) * operating systems, BSD-based: Manual History. (line 28) * operating systems, PC, gawk on: PC Using. (line 6) @@ -32296,7 +32301,6 @@ Index * output, standard: Special FD. (line 6) * p debugger command (alias for print): Viewing And Changing Data. (line 36) -* P1003.1 POSIX standard: Glossary. (line 454) * parent process ID of gawk process: Auto-set. (line 181) * parentheses (), in a profile: Profiling. (line 146) * parentheses (), regexp operator: Regexp Operators. (line 80) @@ -32314,7 +32318,7 @@ Index * patterns, types of: Pattern Overview. (line 15) * pawk (profiling version of Brian Kernighan's awk): Other Versions. (line 78) -* pawk, awk-like facilities for Python: Other Versions. (line 124) +* pawk, awk-like facilities for Python: Other Versions. (line 125) * PC operating systems, gawk on: PC Using. (line 6) * PC operating systems, gawk on, installing: PC Installation. (line 6) * percent sign (%), % operator: Precedence. (line 55) @@ -32328,7 +32332,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) @@ -32497,22 +32501,22 @@ Index * programming conventions, private variable names: Library Names. (line 23) * programming language, recipe for: History. (line 6) -* programming languages, Ada: Glossary. (line 20) +* programming languages, Ada: Glossary. (line 19) * programming languages, data-driven vs. procedural: Getting Started. (line 12) -* programming languages, Java: Glossary. (line 380) +* programming languages, Java: Glossary. (line 379) * 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 130) +* QSE Awk: Other Versions. (line 131) * Quanstrom, Erik: Alarm Program. (line 8) * question mark (?), ?: operator: Precedence. (line 92) * question mark (?), regexp operator <1>: GNU Regexp Operators. (line 59) * question mark (?), regexp operator: Regexp Operators. (line 112) -* QuikTrim Awk: Other Versions. (line 134) +* QuikTrim Awk: Other Versions. (line 135) * quit debugger command: Miscellaneous Debugger Commands. (line 99) * QUIT signal (MS-Windows): Profiling. (line 214) @@ -32533,7 +32537,7 @@ Index * range expressions (regexps): Bracket Expressions. (line 6) * range patterns: Ranges. (line 6) * range patterns, line continuation and: Ranges. (line 65) -* Rankin, Pat <1>: Bugs. (line 70) +* Rankin, Pat <1>: Bugs. (line 71) * Rankin, Pat <2>: Contributors. (line 37) * Rankin, Pat <3>: Assignment Ops. (line 100) * Rankin, Pat: Acknowledgments. (line 60) @@ -32638,7 +32642,7 @@ Index * right angle bracket (>), >> operator (I/O): Redirection. (line 50) * right shift: Bitwise Functions. (line 52) * right shift, bitwise: Bitwise Functions. (line 32) -* Ritchie, Dennis: Basic Data Typing. (line 55) +* Ritchie, Dennis: Basic Data Typing. (line 54) * RLENGTH variable: Auto-set. (line 244) * RLENGTH variable, match() function and: String Functions. (line 224) * Robbins, Arnold <1>: Future Extensions. (line 6) @@ -32706,7 +32710,7 @@ Index * search paths, for source files: AWKPATH Variable. (line 6) * searching, files for regular expressions: Egrep Program. (line 6) * searching, for words: Dupword Program. (line 6) -* sed utility <1>: Glossary. (line 12) +* sed utility <1>: Glossary. (line 11) * sed utility <2>: Simple Sed. (line 6) * sed utility: Field Splitting Summary. (line 46) @@ -32842,19 +32846,19 @@ Index * source code, Brian Kernighan's awk: Other Versions. (line 13) * source code, Busybox Awk: Other Versions. (line 88) * source code, gawk: Gawk Distribution. (line 6) -* source code, Illumos awk: Other Versions. (line 104) -* source code, jawk: Other Versions. (line 112) -* source code, libmawk: Other Versions. (line 120) +* source code, Illumos awk: Other Versions. (line 105) +* source code, jawk: Other Versions. (line 113) +* source code, libmawk: Other Versions. (line 121) * source code, mawk: Other Versions. (line 44) * source code, mixing: Options. (line 117) * source code, pawk: Other Versions. (line 78) -* source code, pawk (Python version): Other Versions. (line 124) -* source code, QSE Awk: Other Versions. (line 130) -* source code, QuikTrim Awk: Other Versions. (line 134) +* source code, pawk (Python version): Other Versions. (line 125) +* source code, QSE Awk: Other Versions. (line 131) +* source code, QuikTrim Awk: Other Versions. (line 135) * source code, Solaris awk: Other Versions. (line 96) * source files, search path for: Igawk Program. (line 368) * sparse arrays: Array Intro. (line 71) -* Spencer, Henry: Glossary. (line 12) +* Spencer, Henry: Glossary. (line 11) * split: String Functions. (line 313) * split string into array: String Functions. (line 294) * split utility: Split Program. (line 6) @@ -32870,7 +32874,7 @@ Index * square root: Numeric Functions. (line 78) * srand: Numeric Functions. (line 82) * stack frame: Debugging Terms. (line 10) -* Stallman, Richard <1>: Glossary. (line 297) +* Stallman, Richard <1>: Glossary. (line 296) * Stallman, Richard <2>: Contributors. (line 23) * Stallman, Richard <3>: Acknowledgments. (line 18) * Stallman, Richard: Manual History. (line 6) @@ -32959,7 +32963,7 @@ Index * testbits.awk program: Bitwise Functions. (line 70) * testext extension: Extension Sample API Tests. (line 6) -* Texinfo <1>: Adding Code. (line 99) +* Texinfo <1>: Adding Code. (line 100) * Texinfo <2>: Distribution contents. (line 77) * Texinfo <3>: Extract Program. (line 12) @@ -33063,7 +33067,7 @@ Index (line 6) * uniq utility: Uniq Program. (line 6) * uniq.awk program: Uniq Program. (line 65) -* Unix: Glossary. (line 616) +* Unix: Glossary. (line 611) * Unix awk, backslashes in escape sequences: Escape Sequences. (line 124) * Unix awk, close() function and: Close Files And Pipes. @@ -33177,7 +33181,7 @@ Index * xor: Bitwise Functions. (line 55) * XOR bitwise operation: Bitwise Functions. (line 6) * Yawitz, Efraim: Contributors. (line 129) -* Zaretskii, Eli <1>: Bugs. (line 70) +* Zaretskii, Eli <1>: Bugs. (line 71) * Zaretskii, Eli <2>: Contributors. (line 55) * Zaretskii, Eli: Acknowledgments. (line 60) * zero, negative vs. positive: Unexpected Results. (line 34) @@ -33211,536 +33215,537 @@ Index  Tag Table: Node: Top1292 -Node: Foreword40832 -Node: Preface45177 -Ref: Preface-Footnote-148324 -Ref: Preface-Footnote-248431 -Node: History48663 -Node: Names51037 -Ref: Names-Footnote-152501 -Node: This Manual52574 -Ref: This Manual-Footnote-158353 -Node: Conventions58453 -Node: Manual History60609 -Ref: Manual History-Footnote-164040 -Ref: Manual History-Footnote-264081 -Node: How To Contribute64155 -Node: Acknowledgments65394 -Node: Getting Started69543 -Node: Running gawk71922 -Node: One-shot73112 -Node: Read Terminal74337 -Ref: Read Terminal-Footnote-175987 -Ref: Read Terminal-Footnote-276263 -Node: Long76434 -Node: Executable Scripts77810 -Ref: Executable Scripts-Footnote-179643 -Ref: Executable Scripts-Footnote-279745 -Node: Comments80292 -Node: Quoting82759 -Node: DOS Quoting88075 -Node: Sample Data Files88750 -Node: Very Simple91265 -Node: Two Rules95915 -Node: More Complex97810 -Ref: More Complex-Footnote-1100742 -Node: Statements/Lines100827 -Ref: Statements/Lines-Footnote-1105282 -Node: Other Features105547 -Node: When106475 -Node: Invoking Gawk108623 -Node: Command Line110086 -Node: Options110877 -Ref: Options-Footnote-1126689 -Node: Other Arguments126714 -Node: Naming Standard Input129376 -Node: Environment Variables130470 -Node: AWKPATH Variable131028 -Ref: AWKPATH Variable-Footnote-1133806 -Ref: AWKPATH Variable-Footnote-2133851 -Node: AWKLIBPATH Variable134111 -Node: Other Environment Variables134870 -Node: Exit Status138525 -Node: Include Files139200 -Node: Loading Shared Libraries142778 -Node: Obsolete144161 -Node: Undocumented144858 -Node: Regexp145100 -Node: Regexp Usage146489 -Node: Escape Sequences148522 -Node: Regexp Operators154189 -Ref: Regexp Operators-Footnote-1161669 -Ref: Regexp Operators-Footnote-2161816 -Node: Bracket Expressions161914 -Ref: table-char-classes163804 -Node: GNU Regexp Operators166327 -Node: Case-sensitivity170050 -Ref: Case-sensitivity-Footnote-1172942 -Ref: Case-sensitivity-Footnote-2173177 -Node: Leftmost Longest173285 -Node: Computed Regexps174486 -Node: Reading Files177835 -Node: Records179837 -Node: awk split records180572 -Node: gawk split records185430 -Ref: gawk split records-Footnote-1189951 -Node: Fields189988 -Ref: Fields-Footnote-1192952 -Node: Nonconstant Fields193038 -Ref: Nonconstant Fields-Footnote-1195268 -Node: Changing Fields195470 -Node: Field Separators201424 -Node: Default Field Splitting204126 -Node: Regexp Field Splitting205243 -Node: Single Character Fields208584 -Node: Command Line Field Separator209643 -Node: Full Line Fields212985 -Ref: Full Line Fields-Footnote-1213493 -Node: Field Splitting Summary213539 -Ref: Field Splitting Summary-Footnote-1216638 -Node: Constant Size216739 -Node: Splitting By Content221346 -Ref: Splitting By Content-Footnote-1225096 -Node: Multiple Line225136 -Ref: Multiple Line-Footnote-1230992 -Node: Getline231171 -Node: Plain Getline233387 -Node: Getline/Variable235482 -Node: Getline/File236629 -Node: Getline/Variable/File238013 -Ref: Getline/Variable/File-Footnote-1239612 -Node: Getline/Pipe239699 -Node: Getline/Variable/Pipe242398 -Node: Getline/Coprocess243505 -Node: Getline/Variable/Coprocess244757 -Node: Getline Notes245494 -Node: Getline Summary248298 -Ref: table-getline-variants248706 -Node: Read Timeout249618 -Ref: Read Timeout-Footnote-1253445 -Node: Command line directories253503 -Node: Printing254385 -Node: Print256016 -Node: Print Examples257357 -Node: Output Separators260136 -Node: OFMT262152 -Node: Printf263510 -Node: Basic Printf264416 -Node: Control Letters265955 -Node: Format Modifiers269809 -Node: Printf Examples275836 -Node: Redirection278543 -Node: Special Files285515 -Node: Special FD286048 -Ref: Special FD-Footnote-1289672 -Node: Special Network289746 -Node: Special Caveats290596 -Node: Close Files And Pipes291392 -Ref: Close Files And Pipes-Footnote-1298530 -Ref: Close Files And Pipes-Footnote-2298678 -Node: Expressions298828 -Node: Values299960 -Node: Constants300636 -Node: Scalar Constants301316 -Ref: Scalar Constants-Footnote-1302175 -Node: Nondecimal-numbers302425 -Node: Regexp Constants305425 -Node: Using Constant Regexps305900 -Node: Variables308970 -Node: Using Variables309625 -Node: Assignment Options311349 -Node: Conversion313224 -Ref: table-locale-affects318660 -Ref: Conversion-Footnote-1319284 -Node: All Operators319393 -Node: Arithmetic Ops320023 -Node: Concatenation322528 -Ref: Concatenation-Footnote-1325324 -Node: Assignment Ops325444 -Ref: table-assign-ops330427 -Node: Increment Ops331744 -Node: Truth Values and Conditions335182 -Node: Truth Values336265 -Node: Typing and Comparison337314 -Node: Variable Typing338107 -Ref: Variable Typing-Footnote-1342007 -Node: Comparison Operators342129 -Ref: table-relational-ops342539 -Node: POSIX String Comparison346087 -Ref: POSIX String Comparison-Footnote-1347171 -Node: Boolean Ops347309 -Ref: Boolean Ops-Footnote-1351379 -Node: Conditional Exp351470 -Node: Function Calls353197 -Node: Precedence356955 -Node: Locales360624 -Node: Patterns and Actions362227 -Node: Pattern Overview363281 -Node: Regexp Patterns364958 -Node: Expression Patterns365501 -Node: Ranges369282 -Node: BEGIN/END372388 -Node: Using BEGIN/END373150 -Ref: Using BEGIN/END-Footnote-1375886 -Node: I/O And BEGIN/END375992 -Node: BEGINFILE/ENDFILE378277 -Node: Empty381208 -Node: Using Shell Variables381525 -Node: Action Overview383808 -Node: Statements386159 -Node: If Statement388013 -Node: While Statement389516 -Node: Do Statement391560 -Node: For Statement392716 -Node: Switch Statement395868 -Node: Break Statement397971 -Node: Continue Statement400026 -Node: Next Statement401819 -Node: Nextfile Statement404209 -Node: Exit Statement406864 -Node: Built-in Variables409268 -Node: User-modified410364 -Ref: User-modified-Footnote-1418049 -Node: Auto-set418111 -Ref: Auto-set-Footnote-1430676 -Ref: Auto-set-Footnote-2430881 -Node: ARGC and ARGV430937 -Node: Arrays434791 -Node: Array Basics436289 -Node: Array Intro437115 -Ref: figure-array-elements439088 -Node: Reference to Elements441495 -Node: Assigning Elements443768 -Node: Array Example444259 -Node: Scanning an Array445991 -Node: Controlling Scanning449006 -Ref: Controlling Scanning-Footnote-1454179 -Node: Delete454495 -Ref: Delete-Footnote-1457260 -Node: Numeric Array Subscripts457317 -Node: Uninitialized Subscripts459500 -Node: Multidimensional461125 -Node: Multiscanning464218 -Node: Arrays of Arrays465807 -Node: Functions470447 -Node: Built-in471266 -Node: Calling Built-in472344 -Node: Numeric Functions474332 -Ref: Numeric Functions-Footnote-1478166 -Ref: Numeric Functions-Footnote-2478523 -Ref: Numeric Functions-Footnote-3478571 -Node: String Functions478840 -Ref: String Functions-Footnote-1501851 -Ref: String Functions-Footnote-2501980 -Ref: String Functions-Footnote-3502228 -Node: Gory Details502315 -Ref: table-sub-escapes503984 -Ref: table-sub-posix-92505338 -Ref: table-sub-proposed506689 -Ref: table-posix-sub508043 -Ref: table-gensub-escapes509588 -Ref: Gory Details-Footnote-1510764 -Ref: Gory Details-Footnote-2510815 -Node: I/O Functions510966 -Ref: I/O Functions-Footnote-1518089 -Node: Time Functions518236 -Ref: Time Functions-Footnote-1528700 -Ref: Time Functions-Footnote-2528768 -Ref: Time Functions-Footnote-3528926 -Ref: Time Functions-Footnote-4529037 -Ref: Time Functions-Footnote-5529149 -Ref: Time Functions-Footnote-6529376 -Node: Bitwise Functions529642 -Ref: table-bitwise-ops530204 -Ref: Bitwise Functions-Footnote-1534449 -Node: Type Functions534633 -Node: I18N Functions535775 -Node: User-defined537420 -Node: Definition Syntax538224 -Ref: Definition Syntax-Footnote-1543149 -Node: Function Example543218 -Ref: Function Example-Footnote-1545862 -Node: Function Caveats545884 -Node: Calling A Function546402 -Node: Variable Scope547357 -Node: Pass By Value/Reference550345 -Node: Return Statement553853 -Node: Dynamic Typing556837 -Node: Indirect Calls557766 -Node: Library Functions567453 -Ref: Library Functions-Footnote-1570966 -Ref: Library Functions-Footnote-2571109 -Node: Library Names571280 -Ref: Library Names-Footnote-1574753 -Ref: Library Names-Footnote-2574973 -Node: General Functions575059 -Node: Strtonum Function576087 -Node: Assert Function579017 -Node: Round Function582343 -Node: Cliff Random Function583884 -Node: Ordinal Functions584900 -Ref: Ordinal Functions-Footnote-1587977 -Ref: Ordinal Functions-Footnote-2588229 -Node: Join Function588440 -Ref: Join Function-Footnote-1590211 -Node: Getlocaltime Function590411 -Node: Readfile Function594147 -Node: Data File Management595986 -Node: Filetrans Function596618 -Node: Rewind Function600687 -Node: File Checking602074 -Ref: File Checking-Footnote-1603206 -Node: Empty Files603407 -Node: Ignoring Assigns605637 -Node: Getopt Function607191 -Ref: Getopt Function-Footnote-1618494 -Node: Passwd Functions618697 -Ref: Passwd Functions-Footnote-1627676 -Node: Group Functions627764 -Ref: Group Functions-Footnote-1635706 -Node: Walking Arrays635919 -Node: Sample Programs638055 -Node: Running Examples638729 -Node: Clones639457 -Node: Cut Program640681 -Node: Egrep Program650534 -Ref: Egrep Program-Footnote-1658505 -Node: Id Program658615 -Node: Split Program662279 -Ref: Split Program-Footnote-1665817 -Node: Tee Program665945 -Node: Uniq Program668752 -Node: Wc Program676182 -Ref: Wc Program-Footnote-1680450 -Ref: Wc Program-Footnote-2680650 -Node: Miscellaneous Programs680742 -Node: Dupword Program681930 -Node: Alarm Program683961 -Node: Translate Program688768 -Ref: Translate Program-Footnote-1693159 -Ref: Translate Program-Footnote-2693429 -Node: Labels Program693563 -Ref: Labels Program-Footnote-1696934 -Node: Word Sorting697018 -Node: History Sorting701061 -Node: Extract Program702897 -Ref: Extract Program-Footnote-1710427 -Node: Simple Sed710556 -Node: Igawk Program713618 -Ref: Igawk Program-Footnote-1728793 -Ref: Igawk Program-Footnote-2728994 -Node: Anagram Program729132 -Node: Signature Program732200 -Node: Advanced Features733447 -Node: Nondecimal Data735333 -Node: Array Sorting736910 -Node: Controlling Array Traversal737607 -Node: Array Sorting Functions745887 -Ref: Array Sorting Functions-Footnote-1749794 -Node: Two-way I/O749988 -Ref: Two-way I/O-Footnote-1755504 -Node: TCP/IP Networking755586 -Node: Profiling758430 -Node: Internationalization765938 -Node: I18N and L10N767363 -Node: Explaining gettext768049 -Ref: Explaining gettext-Footnote-1773189 -Ref: Explaining gettext-Footnote-2773373 -Node: Programmer i18n773538 -Node: Translator i18n777763 -Node: String Extraction778557 -Ref: String Extraction-Footnote-1779518 -Node: Printf Ordering779604 -Ref: Printf Ordering-Footnote-1782386 -Node: I18N Portability782450 -Ref: I18N Portability-Footnote-1784899 -Node: I18N Example784962 -Ref: I18N Example-Footnote-1787684 -Node: Gawk I18N787756 -Node: Debugger788377 -Node: Debugging789348 -Node: Debugging Concepts789789 -Node: Debugging Terms791645 -Node: Awk Debugging794242 -Node: Sample Debugging Session795134 -Node: Debugger Invocation795654 -Node: Finding The Bug796987 -Node: List of Debugger Commands803469 -Node: Breakpoint Control804801 -Node: Debugger Execution Control808465 -Node: Viewing And Changing Data811825 -Node: Execution Stack815183 -Node: Debugger Info816696 -Node: Miscellaneous Debugger Commands820690 -Node: Readline Support825874 -Node: Limitations826766 -Node: Arbitrary Precision Arithmetic829014 -Ref: Arbitrary Precision Arithmetic-Footnote-1830663 -Node: General Arithmetic830811 -Node: Floating Point Issues832531 -Node: String Conversion Precision833412 -Ref: String Conversion Precision-Footnote-1835117 -Node: Unexpected Results835226 -Node: POSIX Floating Point Problems837379 -Ref: POSIX Floating Point Problems-Footnote-1841200 -Node: Integer Programming841238 -Node: Floating-point Programming843049 -Ref: Floating-point Programming-Footnote-1849377 -Ref: Floating-point Programming-Footnote-2849647 -Node: Floating-point Representation849911 -Node: Floating-point Context851076 -Ref: table-ieee-formats851915 -Node: Rounding Mode853299 -Ref: table-rounding-modes853778 -Ref: Rounding Mode-Footnote-1856793 -Node: Gawk and MPFR856972 -Node: Arbitrary Precision Floats858381 -Ref: Arbitrary Precision Floats-Footnote-1860824 -Node: Setting Precision861145 -Ref: table-predefined-precision-strings861829 -Node: Setting Rounding Mode863974 -Ref: table-gawk-rounding-modes864378 -Node: Floating-point Constants865565 -Node: Changing Precision867017 -Ref: Changing Precision-Footnote-1868409 -Node: Exact Arithmetic868583 -Node: Arbitrary Precision Integers871717 -Ref: Arbitrary Precision Integers-Footnote-1874732 -Node: Dynamic Extensions874879 -Node: Extension Intro876337 -Node: Plugin License877602 -Node: Extension Mechanism Outline878287 -Ref: figure-load-extension878711 -Ref: figure-load-new-function880196 -Ref: figure-call-new-function881198 -Node: Extension API Description883182 -Node: Extension API Functions Introduction884632 -Node: General Data Types889498 -Ref: General Data Types-Footnote-1895191 -Node: Requesting Values895490 -Ref: table-value-types-returned896227 -Node: Memory Allocation Functions897185 -Ref: Memory Allocation Functions-Footnote-1899931 -Node: Constructor Functions900027 -Node: Registration Functions901785 -Node: Extension Functions902470 -Node: Exit Callback Functions904772 -Node: Extension Version String906021 -Node: Input Parsers906671 -Node: Output Wrappers916474 -Node: Two-way processors920990 -Node: Printing Messages923193 -Ref: Printing Messages-Footnote-1924270 -Node: Updating `ERRNO'924422 -Node: Accessing Parameters925161 -Node: Symbol Table Access926391 -Node: Symbol table by name926905 -Node: Symbol table by cookie928881 -Ref: Symbol table by cookie-Footnote-1933014 -Node: Cached values933077 -Ref: Cached values-Footnote-1936582 -Node: Array Manipulation936673 -Ref: Array Manipulation-Footnote-1937771 -Node: Array Data Types937810 -Ref: Array Data Types-Footnote-1940513 -Node: Array Functions940605 -Node: Flattening Arrays944479 -Node: Creating Arrays951331 -Node: Extension API Variables956062 -Node: Extension Versioning956698 -Node: Extension API Informational Variables958599 -Node: Extension API Boilerplate959685 -Node: Finding Extensions963489 -Node: Extension Example964049 -Node: Internal File Description964779 -Node: Internal File Ops968870 -Ref: Internal File Ops-Footnote-1980416 -Node: Using Internal File Ops980556 -Ref: Using Internal File Ops-Footnote-1982903 -Node: Extension Samples983169 -Node: Extension Sample File Functions984693 -Node: Extension Sample Fnmatch992260 -Node: Extension Sample Fork993739 -Node: Extension Sample Inplace994952 -Node: Extension Sample Ord996730 -Node: Extension Sample Readdir997566 -Ref: table-readdir-file-types998421 -Node: Extension Sample Revout999220 -Node: Extension Sample Rev2way999811 -Node: Extension Sample Read write array1000552 -Node: Extension Sample Readfile1002431 -Node: Extension Sample API Tests1003531 -Node: Extension Sample Time1004056 -Node: gawkextlib1005371 -Node: Language History1008152 -Node: V7/SVR3.11009746 -Node: SVR41012066 -Node: POSIX1013508 -Node: BTL1014894 -Node: POSIX/GNU1015628 -Node: Feature History1021227 -Node: Common Extensions1034339 -Node: Ranges and Locales1035651 -Ref: Ranges and Locales-Footnote-11040268 -Ref: Ranges and Locales-Footnote-21040295 -Ref: Ranges and Locales-Footnote-31040529 -Node: Contributors1040750 -Node: Installation1046101 -Node: Gawk Distribution1046995 -Node: Getting1047479 -Node: Extracting1048305 -Node: Distribution contents1049997 -Node: Unix Installation1055718 -Node: Quick Installation1056335 -Node: Additional Configuration Options1058781 -Node: Configuration Philosophy1060517 -Node: Non-Unix Installation1062871 -Node: PC Installation1063329 -Node: PC Binary Installation1064640 -Node: PC Compiling1066488 -Node: PC Testing1069448 -Node: PC Using1070624 -Node: Cygwin1074792 -Node: MSYS1075601 -Node: VMS Installation1076115 -Node: VMS Compilation1076911 -Ref: VMS Compilation-Footnote-11078163 -Node: VMS Dynamic Extensions1078221 -Node: VMS Installation Details1079594 -Node: VMS Running1081845 -Node: VMS GNV1084679 -Node: VMS Old Gawk1085402 -Node: Bugs1085872 -Node: Other Versions1089790 -Node: Notes1095874 -Node: Compatibility Mode1096674 -Node: Additions1097457 -Node: Accessing The Source1098384 -Node: Adding Code1099824 -Node: New Ports1105869 -Node: Derived Files1110004 -Ref: Derived Files-Footnote-11115325 -Ref: Derived Files-Footnote-21115359 -Ref: Derived Files-Footnote-31115959 -Node: Future Extensions1116057 -Node: Implementation Limitations1116640 -Node: Extension Design1117888 -Node: Old Extension Problems1119042 -Ref: Old Extension Problems-Footnote-11120550 -Node: Extension New Mechanism Goals1120607 -Ref: Extension New Mechanism Goals-Footnote-11123972 -Node: Extension Other Design Decisions1124158 -Node: Extension Future Growth1126264 -Node: Old Extension Mechanism1127100 -Node: Basic Concepts1128840 -Node: Basic High Level1129521 -Ref: figure-general-flow1129793 -Ref: figure-process-flow1130392 -Ref: Basic High Level-Footnote-11133621 -Node: Basic Data Typing1133806 -Node: Glossary1137161 -Node: Copying1162392 -Node: GNU Free Documentation License1199948 -Node: Index1225084 +Node: Foreword40830 +Node: Preface45175 +Ref: Preface-Footnote-148322 +Ref: Preface-Footnote-248429 +Node: History48661 +Node: Names51035 +Ref: Names-Footnote-152499 +Node: This Manual52572 +Ref: This Manual-Footnote-158351 +Node: Conventions58451 +Node: Manual History60607 +Ref: Manual History-Footnote-164038 +Ref: Manual History-Footnote-264079 +Node: How To Contribute64153 +Node: Acknowledgments65392 +Node: Getting Started69541 +Node: Running gawk71914 +Node: One-shot73104 +Node: Read Terminal74329 +Ref: Read Terminal-Footnote-175979 +Ref: Read Terminal-Footnote-276255 +Node: Long76426 +Node: Executable Scripts77802 +Ref: Executable Scripts-Footnote-179635 +Ref: Executable Scripts-Footnote-279737 +Node: Comments80284 +Node: Quoting82751 +Node: DOS Quoting88067 +Node: Sample Data Files88742 +Node: Very Simple91257 +Node: Two Rules95895 +Node: More Complex97790 +Ref: More Complex-Footnote-1100722 +Node: Statements/Lines100807 +Ref: Statements/Lines-Footnote-1105262 +Node: Other Features105527 +Node: When106455 +Node: Invoking Gawk108603 +Node: Command Line110066 +Node: Options110857 +Ref: Options-Footnote-1126669 +Node: Other Arguments126694 +Node: Naming Standard Input129356 +Node: Environment Variables130450 +Node: AWKPATH Variable131008 +Ref: AWKPATH Variable-Footnote-1133786 +Ref: AWKPATH Variable-Footnote-2133831 +Node: AWKLIBPATH Variable134091 +Node: Other Environment Variables134850 +Node: Exit Status138505 +Node: Include Files139180 +Node: Loading Shared Libraries142758 +Node: Obsolete144141 +Node: Undocumented144838 +Node: Regexp145080 +Node: Regexp Usage146469 +Node: Escape Sequences148502 +Node: Regexp Operators154169 +Ref: Regexp Operators-Footnote-1161649 +Ref: Regexp Operators-Footnote-2161796 +Node: Bracket Expressions161894 +Ref: table-char-classes163784 +Node: GNU Regexp Operators166307 +Node: Case-sensitivity170030 +Ref: Case-sensitivity-Footnote-1172922 +Ref: Case-sensitivity-Footnote-2173157 +Node: Leftmost Longest173265 +Node: Computed Regexps174466 +Node: Reading Files177815 +Node: Records179817 +Node: awk split records180552 +Node: gawk split records185410 +Ref: gawk split records-Footnote-1189931 +Node: Fields189968 +Ref: Fields-Footnote-1192932 +Node: Nonconstant Fields193018 +Ref: Nonconstant Fields-Footnote-1195248 +Node: Changing Fields195450 +Node: Field Separators201404 +Node: Default Field Splitting204106 +Node: Regexp Field Splitting205223 +Node: Single Character Fields208564 +Node: Command Line Field Separator209623 +Node: Full Line Fields212965 +Ref: Full Line Fields-Footnote-1213473 +Node: Field Splitting Summary213519 +Ref: Field Splitting Summary-Footnote-1216618 +Node: Constant Size216719 +Node: Splitting By Content221326 +Ref: Splitting By Content-Footnote-1225076 +Node: Multiple Line225116 +Ref: Multiple Line-Footnote-1230972 +Node: Getline231151 +Node: Plain Getline233367 +Node: Getline/Variable235462 +Node: Getline/File236609 +Node: Getline/Variable/File237993 +Ref: Getline/Variable/File-Footnote-1239592 +Node: Getline/Pipe239679 +Node: Getline/Variable/Pipe242378 +Node: Getline/Coprocess243485 +Node: Getline/Variable/Coprocess244737 +Node: Getline Notes245474 +Node: Getline Summary248278 +Ref: table-getline-variants248686 +Node: Read Timeout249598 +Ref: Read Timeout-Footnote-1253425 +Node: Command line directories253483 +Node: Printing254365 +Node: Print255996 +Node: Print Examples257337 +Node: Output Separators260116 +Node: OFMT262132 +Node: Printf263490 +Node: Basic Printf264396 +Node: Control Letters265935 +Node: Format Modifiers269789 +Node: Printf Examples275816 +Node: Redirection278523 +Node: Special Files285495 +Node: Special FD286028 +Ref: Special FD-Footnote-1289652 +Node: Special Network289726 +Node: Special Caveats290576 +Node: Close Files And Pipes291372 +Ref: Close Files And Pipes-Footnote-1298510 +Ref: Close Files And Pipes-Footnote-2298658 +Node: Expressions298808 +Node: Values299940 +Node: Constants300616 +Node: Scalar Constants301296 +Ref: Scalar Constants-Footnote-1302155 +Node: Nondecimal-numbers302405 +Node: Regexp Constants305405 +Node: Using Constant Regexps305880 +Node: Variables308950 +Node: Using Variables309605 +Node: Assignment Options311329 +Node: Conversion313204 +Ref: table-locale-affects318640 +Ref: Conversion-Footnote-1319264 +Node: All Operators319373 +Node: Arithmetic Ops320003 +Node: Concatenation322508 +Ref: Concatenation-Footnote-1325304 +Node: Assignment Ops325424 +Ref: table-assign-ops330407 +Node: Increment Ops331724 +Node: Truth Values and Conditions335162 +Node: Truth Values336245 +Node: Typing and Comparison337294 +Node: Variable Typing338087 +Ref: Variable Typing-Footnote-1341987 +Node: Comparison Operators342109 +Ref: table-relational-ops342519 +Node: POSIX String Comparison346067 +Ref: POSIX String Comparison-Footnote-1347151 +Node: Boolean Ops347289 +Ref: Boolean Ops-Footnote-1351359 +Node: Conditional Exp351450 +Node: Function Calls353177 +Node: Precedence356935 +Node: Locales360604 +Node: Patterns and Actions362207 +Node: Pattern Overview363261 +Node: Regexp Patterns364938 +Node: Expression Patterns365481 +Node: Ranges369262 +Node: BEGIN/END372368 +Node: Using BEGIN/END373130 +Ref: Using BEGIN/END-Footnote-1375866 +Node: I/O And BEGIN/END375972 +Node: BEGINFILE/ENDFILE378257 +Node: Empty381188 +Node: Using Shell Variables381505 +Node: Action Overview383788 +Node: Statements386115 +Node: If Statement387963 +Node: While Statement389461 +Node: Do Statement391505 +Node: For Statement392661 +Node: Switch Statement395813 +Node: Break Statement397916 +Node: Continue Statement399971 +Node: Next Statement401764 +Node: Nextfile Statement404154 +Node: Exit Statement406809 +Node: Built-in Variables409213 +Node: User-modified410309 +Ref: User-modified-Footnote-1417994 +Node: Auto-set418056 +Ref: Auto-set-Footnote-1430621 +Ref: Auto-set-Footnote-2430826 +Node: ARGC and ARGV430882 +Node: Arrays434736 +Node: Array Basics436234 +Node: Array Intro437060 +Ref: figure-array-elements439033 +Node: Reference to Elements441440 +Node: Assigning Elements443713 +Node: Array Example444204 +Node: Scanning an Array445936 +Node: Controlling Scanning448951 +Ref: Controlling Scanning-Footnote-1454124 +Node: Delete454440 +Ref: Delete-Footnote-1457205 +Node: Numeric Array Subscripts457262 +Node: Uninitialized Subscripts459445 +Node: Multidimensional461070 +Node: Multiscanning464163 +Node: Arrays of Arrays465752 +Node: Functions470392 +Node: Built-in471211 +Node: Calling Built-in472289 +Node: Numeric Functions474277 +Ref: Numeric Functions-Footnote-1478111 +Ref: Numeric Functions-Footnote-2478468 +Ref: Numeric Functions-Footnote-3478516 +Node: String Functions478785 +Ref: String Functions-Footnote-1501796 +Ref: String Functions-Footnote-2501925 +Ref: String Functions-Footnote-3502173 +Node: Gory Details502260 +Ref: table-sub-escapes503929 +Ref: table-sub-posix-92505283 +Ref: table-sub-proposed506634 +Ref: table-posix-sub507988 +Ref: table-gensub-escapes509533 +Ref: Gory Details-Footnote-1510709 +Ref: Gory Details-Footnote-2510760 +Node: I/O Functions510911 +Ref: I/O Functions-Footnote-1518034 +Node: Time Functions518181 +Ref: Time Functions-Footnote-1528645 +Ref: Time Functions-Footnote-2528713 +Ref: Time Functions-Footnote-3528871 +Ref: Time Functions-Footnote-4528982 +Ref: Time Functions-Footnote-5529094 +Ref: Time Functions-Footnote-6529321 +Node: Bitwise Functions529587 +Ref: table-bitwise-ops530149 +Ref: Bitwise Functions-Footnote-1534394 +Node: Type Functions534578 +Node: I18N Functions535720 +Node: User-defined537365 +Node: Definition Syntax538169 +Ref: Definition Syntax-Footnote-1543094 +Node: Function Example543163 +Ref: Function Example-Footnote-1545807 +Node: Function Caveats545829 +Node: Calling A Function546347 +Node: Variable Scope547302 +Node: Pass By Value/Reference550290 +Node: Return Statement553798 +Node: Dynamic Typing556782 +Node: Indirect Calls557711 +Node: Library Functions567398 +Ref: Library Functions-Footnote-1570911 +Ref: Library Functions-Footnote-2571054 +Node: Library Names571225 +Ref: Library Names-Footnote-1574698 +Ref: Library Names-Footnote-2574918 +Node: General Functions575004 +Node: Strtonum Function576032 +Node: Assert Function578962 +Node: Round Function582288 +Node: Cliff Random Function583829 +Node: Ordinal Functions584845 +Ref: Ordinal Functions-Footnote-1587922 +Ref: Ordinal Functions-Footnote-2588174 +Node: Join Function588385 +Ref: Join Function-Footnote-1590156 +Node: Getlocaltime Function590356 +Node: Readfile Function594092 +Node: Data File Management595931 +Node: Filetrans Function596563 +Node: Rewind Function600632 +Node: File Checking602019 +Ref: File Checking-Footnote-1603151 +Node: Empty Files603352 +Node: Ignoring Assigns605582 +Node: Getopt Function607136 +Ref: Getopt Function-Footnote-1618439 +Node: Passwd Functions618642 +Ref: Passwd Functions-Footnote-1627621 +Node: Group Functions627709 +Ref: Group Functions-Footnote-1635651 +Node: Walking Arrays635864 +Node: Sample Programs638000 +Node: Running Examples638674 +Node: Clones639402 +Node: Cut Program640626 +Node: Egrep Program650479 +Ref: Egrep Program-Footnote-1658450 +Node: Id Program658560 +Node: Split Program662224 +Ref: Split Program-Footnote-1665762 +Node: Tee Program665890 +Node: Uniq Program668697 +Node: Wc Program676127 +Ref: Wc Program-Footnote-1680395 +Ref: Wc Program-Footnote-2680595 +Node: Miscellaneous Programs680687 +Node: Dupword Program681875 +Node: Alarm Program683906 +Node: Translate Program688713 +Ref: Translate Program-Footnote-1693104 +Ref: Translate Program-Footnote-2693374 +Node: Labels Program693508 +Ref: Labels Program-Footnote-1696879 +Node: Word Sorting696963 +Node: History Sorting701006 +Node: Extract Program702842 +Ref: Extract Program-Footnote-1710372 +Node: Simple Sed710501 +Node: Igawk Program713563 +Ref: Igawk Program-Footnote-1728738 +Ref: Igawk Program-Footnote-2728939 +Node: Anagram Program729077 +Node: Signature Program732145 +Node: Advanced Features733392 +Node: Nondecimal Data735278 +Node: Array Sorting736855 +Node: Controlling Array Traversal737552 +Node: Array Sorting Functions745832 +Ref: Array Sorting Functions-Footnote-1749739 +Node: Two-way I/O749933 +Ref: Two-way I/O-Footnote-1755449 +Node: TCP/IP Networking755531 +Node: Profiling758375 +Node: Internationalization765883 +Node: I18N and L10N767308 +Node: Explaining gettext767994 +Ref: Explaining gettext-Footnote-1773134 +Ref: Explaining gettext-Footnote-2773318 +Node: Programmer i18n773483 +Node: Translator i18n777708 +Node: String Extraction778502 +Ref: String Extraction-Footnote-1779463 +Node: Printf Ordering779549 +Ref: Printf Ordering-Footnote-1782331 +Node: I18N Portability782395 +Ref: I18N Portability-Footnote-1784844 +Node: I18N Example784907 +Ref: I18N Example-Footnote-1787629 +Node: Gawk I18N787701 +Node: Debugger788322 +Node: Debugging789293 +Node: Debugging Concepts789734 +Node: Debugging Terms791590 +Node: Awk Debugging794187 +Node: Sample Debugging Session795079 +Node: Debugger Invocation795599 +Node: Finding The Bug796932 +Node: List of Debugger Commands803414 +Node: Breakpoint Control804746 +Node: Debugger Execution Control808410 +Node: Viewing And Changing Data811770 +Node: Execution Stack815128 +Node: Debugger Info816641 +Node: Miscellaneous Debugger Commands820635 +Node: Readline Support825819 +Node: Limitations826711 +Node: Arbitrary Precision Arithmetic828959 +Ref: Arbitrary Precision Arithmetic-Footnote-1830608 +Node: General Arithmetic830756 +Node: Floating Point Issues832476 +Node: String Conversion Precision833357 +Ref: String Conversion Precision-Footnote-1835062 +Node: Unexpected Results835171 +Node: POSIX Floating Point Problems837324 +Ref: POSIX Floating Point Problems-Footnote-1841145 +Node: Integer Programming841183 +Node: Floating-point Programming842994 +Ref: Floating-point Programming-Footnote-1849322 +Ref: Floating-point Programming-Footnote-2849592 +Node: Floating-point Representation849856 +Node: Floating-point Context851021 +Ref: table-ieee-formats851860 +Node: Rounding Mode853244 +Ref: table-rounding-modes853723 +Ref: Rounding Mode-Footnote-1856738 +Node: Gawk and MPFR856917 +Node: Arbitrary Precision Floats858326 +Ref: Arbitrary Precision Floats-Footnote-1860769 +Node: Setting Precision861090 +Ref: table-predefined-precision-strings861774 +Node: Setting Rounding Mode863919 +Ref: table-gawk-rounding-modes864323 +Node: Floating-point Constants865510 +Node: Changing Precision866962 +Ref: Changing Precision-Footnote-1868354 +Node: Exact Arithmetic868528 +Node: Arbitrary Precision Integers871662 +Ref: Arbitrary Precision Integers-Footnote-1874677 +Node: Dynamic Extensions874824 +Node: Extension Intro876282 +Node: Plugin License877547 +Node: Extension Mechanism Outline878232 +Ref: figure-load-extension878656 +Ref: figure-load-new-function880141 +Ref: figure-call-new-function881143 +Node: Extension API Description883127 +Node: Extension API Functions Introduction884577 +Node: General Data Types889443 +Ref: General Data Types-Footnote-1895136 +Node: Requesting Values895435 +Ref: table-value-types-returned896172 +Node: Memory Allocation Functions897130 +Ref: Memory Allocation Functions-Footnote-1899876 +Node: Constructor Functions899972 +Node: Registration Functions901730 +Node: Extension Functions902415 +Node: Exit Callback Functions904717 +Node: Extension Version String905966 +Node: Input Parsers906616 +Node: Output Wrappers916419 +Node: Two-way processors920935 +Node: Printing Messages923138 +Ref: Printing Messages-Footnote-1924215 +Node: Updating `ERRNO'924367 +Node: Accessing Parameters925106 +Node: Symbol Table Access926336 +Node: Symbol table by name926850 +Node: Symbol table by cookie928826 +Ref: Symbol table by cookie-Footnote-1932959 +Node: Cached values933022 +Ref: Cached values-Footnote-1936527 +Node: Array Manipulation936618 +Ref: Array Manipulation-Footnote-1937716 +Node: Array Data Types937755 +Ref: Array Data Types-Footnote-1940458 +Node: Array Functions940550 +Node: Flattening Arrays944424 +Node: Creating Arrays951276 +Node: Extension API Variables956007 +Node: Extension Versioning956643 +Node: Extension API Informational Variables958544 +Node: Extension API Boilerplate959630 +Node: Finding Extensions963434 +Node: Extension Example963994 +Node: Internal File Description964724 +Node: Internal File Ops968815 +Ref: Internal File Ops-Footnote-1980361 +Node: Using Internal File Ops980501 +Ref: Using Internal File Ops-Footnote-1982848 +Node: Extension Samples983116 +Node: Extension Sample File Functions984640 +Node: Extension Sample Fnmatch992207 +Node: Extension Sample Fork993686 +Node: Extension Sample Inplace994899 +Node: Extension Sample Ord996677 +Node: Extension Sample Readdir997513 +Ref: table-readdir-file-types998368 +Node: Extension Sample Revout999167 +Node: Extension Sample Rev2way999758 +Node: Extension Sample Read write array1000499 +Node: Extension Sample Readfile1002378 +Node: Extension Sample API Tests1003478 +Node: Extension Sample Time1004003 +Node: gawkextlib1005318 +Node: Language History1008105 +Node: V7/SVR3.11009699 +Node: SVR41012019 +Node: POSIX1013461 +Node: BTL1014847 +Node: POSIX/GNU1015581 +Node: Feature History1021180 +Node: Common Extensions1034292 +Node: Ranges and Locales1035604 +Ref: Ranges and Locales-Footnote-11040221 +Ref: Ranges and Locales-Footnote-21040248 +Ref: Ranges and Locales-Footnote-31040482 +Node: Contributors1040703 +Node: Installation1046054 +Node: Gawk Distribution1046948 +Node: Getting1047432 +Node: Extracting1048258 +Node: Distribution contents1049900 +Node: Unix Installation1055617 +Node: Quick Installation1056234 +Node: Additional Configuration Options1058676 +Node: Configuration Philosophy1060414 +Node: Non-Unix Installation1062765 +Node: PC Installation1063223 +Node: PC Binary Installation1064534 +Node: PC Compiling1066382 +Ref: PC Compiling-Footnote-11069381 +Node: PC Testing1069486 +Node: PC Using1070662 +Node: Cygwin1074820 +Node: MSYS1075629 +Node: VMS Installation1076143 +Node: VMS Compilation1076939 +Ref: VMS Compilation-Footnote-11078160 +Node: VMS Dynamic Extensions1078218 +Node: VMS Installation Details1079591 +Node: VMS Running1081842 +Node: VMS GNV1084676 +Node: VMS Old Gawk1085399 +Node: Bugs1085869 +Node: Other Versions1089873 +Node: Notes1096098 +Node: Compatibility Mode1096898 +Node: Additions1097680 +Node: Accessing The Source1098605 +Node: Adding Code1100041 +Node: New Ports1106219 +Node: Derived Files1110700 +Ref: Derived Files-Footnote-11115776 +Ref: Derived Files-Footnote-21115810 +Ref: Derived Files-Footnote-31116406 +Node: Future Extensions1116520 +Node: Implementation Limitations1117126 +Node: Extension Design1118374 +Node: Old Extension Problems1119528 +Ref: Old Extension Problems-Footnote-11121045 +Node: Extension New Mechanism Goals1121102 +Ref: Extension New Mechanism Goals-Footnote-11124463 +Node: Extension Other Design Decisions1124652 +Node: Extension Future Growth1126758 +Node: Old Extension Mechanism1127594 +Node: Basic Concepts1129334 +Node: Basic High Level1130015 +Ref: figure-general-flow1130287 +Ref: figure-process-flow1130886 +Ref: Basic High Level-Footnote-11134115 +Node: Basic Data Typing1134300 +Node: Glossary1137627 +Node: Copying1162779 +Node: GNU Free Documentation License1200335 +Node: Index1225471  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index f5e13fb0..416bfd8a 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -788,7 +788,7 @@ particular records in a file and perform operations upon them. programming. * Profiling:: Profiling your @command{awk} programs. * I18N and L10N:: Internationalization and Localization. -* Explaining gettext:: How GNU @code{gettext} works. +* Explaining gettext:: How GNU @command{gettext} works. * Programmer i18n:: Features for the programmer. * Translator i18n:: Features for the translator. * String Extraction:: Extracting marked strings. @@ -965,7 +965,7 @@ particular records in a file and perform operations upon them. * New Ports:: Porting @command{gawk} to a new operating system. * Derived Files:: Why derived files are kept in the - @command{git} repository. + Git repository. * Future Extensions:: New features that may be implemented one day. * Implementation Limitations:: Some limitations of the @@ -2172,7 +2172,7 @@ 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 curly braces to separate it from the pattern. +action is enclosed in braces to separate it from the pattern. Newlines usually separate rules. Therefore, an @command{awk} program looks like this: @@ -2938,10 +2938,10 @@ for @emph{every} input line. If the action is omitted, the default action is to print all lines that match the pattern. @cindex actions, empty -Thus, we could leave out the action (the @code{print} statement and the curly +Thus, we could leave out the action (the @code{print} statement and the braces) in the previous example and the result would be the same: @command{awk} prints all lines matching the pattern @samp{li}. By comparison, -omitting the @code{print} statement but retaining the curly braces makes an +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 @@ -3683,7 +3683,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 @code{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. @@ -12994,11 +12994,11 @@ in outline, an @command{awk} program generally looks like this: @cindex @code{;} (semicolon), separating statements in actions @cindex semicolon (@code{;}), separating statements in actions An action consists of one or more @command{awk} @dfn{statements}, enclosed -in curly braces (@samp{@{@r{@dots{}}@}}). Each statement specifies one +in braces (@samp{@{@r{@dots{}}@}}). Each statement specifies one thing to do. The statements are separated by newlines or semicolons. -The curly braces around an action must be used even if the action +The braces around an action must be used even if the action contains only one statement, or if it contains no statements at -all. However, if you omit the action entirely, omit the curly braces as +all. However, if you omit the action entirely, omit the braces as well. An omitted action is equivalent to @samp{@{ print $0 @}}: @example @@ -13024,7 +13024,7 @@ programs. The @command{awk} language gives you C-like constructs special ones (@pxref{Statements}). @item Compound statements -Enclose one or more statements in curly braces. A compound statement +Enclose one or more statements in braces. A compound statement is used in order to put several statements together in the body of an @code{if}, @code{while}, @code{do}, or @code{for} statement. @@ -13072,7 +13072,7 @@ Many control statements contain other statements. For example, the @code{if} statement contains another statement that may or may not be executed. The contained statement is called the @dfn{body}. To include more than one statement in the body, group them into a -single @dfn{compound statement} with curly braces, separating them with +single @dfn{compound statement} with braces, separating them with newlines or semicolons. @menu @@ -13126,7 +13126,7 @@ if the value of @code{x} is evenly divisible by two), then the first statement is executed. If the @code{else} keyword appears on the same line as @var{then-body} and @var{then-body} is not a compound statement (i.e., not surrounded by -curly braces), then a semicolon must separate @var{then-body} from +braces), then a semicolon must separate @var{then-body} from the @code{else}. To illustrate this, the previous example can be rewritten as: @@ -26817,7 +26817,7 @@ a requirement. @menu * I18N and L10N:: Internationalization and Localization. -* Explaining gettext:: How GNU @code{gettext} works. +* Explaining gettext:: How GNU @command{gettext} works. * Programmer i18n:: Features for the programmer. * Translator i18n:: Features for the translator. * I18N Example:: A simple i18n example. @@ -26841,22 +26841,22 @@ responses, and information related to how numerical and monetary values are printed and read. @node Explaining gettext -@section GNU @code{gettext} +@section GNU @command{gettext} @cindex internationalizing a program @c STARTOFRANGE gettex -@cindex @code{gettext} library -@command{gawk} uses GNU @code{gettext} to provide its internationalization +@cindex @command{gettext} library +@command{gawk} uses GNU @command{gettext} to provide its internationalization features. -The facilities in GNU @code{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 @code{gettext}. +port doesn't support GNU @command{gettext}. Therefore, these features are not available if you are using one of those operating systems. Sorry.} -@cindex portability, @code{gettext} library and -When using GNU @code{gettext}, each application has its own +@cindex portability, @command{gettext} library and +When using GNU @command{gettext}, each application has its own @dfn{text domain}. This is a unique name, such as @samp{kpilot} or @samp{gawk}, that identifies the application. A complete application may have multiple components---programs written @@ -26880,7 +26880,7 @@ language). @cindex @code{textdomain()} function (C library) @item The programmer indicates the application's text domain -(@code{"guide"}) to the @code{gettext} library, +(@command{"guide"}) to the @command{gettext} library, by calling the @code{textdomain()} function. @cindex @code{.pot} files @@ -26924,7 +26924,7 @@ are installed in a standard place. @cindex @code{bindtextdomain()} function (C library) @item -For testing and development, it is possible to tell @code{gettext} +For testing and development, it is possible to tell @command{gettext} to use @file{.gmo} files in a different directory than the standard one by using the @code{bindtextdomain()} function. @@ -26957,7 +26957,7 @@ strings enclosed in calls to @code{gettext()}. @cindex @code{_} (underscore), C macro @cindex underscore (@code{_}), C macro -The GNU @code{gettext} developers, recognizing that typing +The GNU @command{gettext} developers, recognizing that typing @samp{gettext(@dots{})} over and over again is both painful and ugly to look at, use the macro @samp{_} (an underscore) to make things easier: @@ -26970,7 +26970,7 @@ printf("%s", _("Don't Panic!\n")); @end example @cindex internationalization, localization, locale categories -@cindex @code{gettext} library, locale categories +@cindex @command{gettext} library, locale categories @cindex locale categories @noindent This reduces the typing overhead to just three extra characters per string @@ -26978,12 +26978,12 @@ and is considerably easier to read as well. There are locale @dfn{categories} for different types of locale-related information. -The defined locale categories that @code{gettext} knows about are: +The defined locale categories that @command{gettext} knows about are: @table @code @cindex @code{LC_MESSAGES} locale category @item LC_MESSAGES -Text messages. This is the default category for @code{gettext} +Text messages. This is the default category for @command{gettext} operations, but it is possible to supply a different one explicitly, if necessary. (It is almost never necessary to supply a different category.) @@ -27031,7 +27031,7 @@ before or after the day in a date, local month abbreviations, and so on. @cindex @code{LC_ALL} locale category @item LC_ALL -All of the above. (Not too useful in the context of @code{gettext}.) +All of the above. (Not too useful in the context of @command{gettext}.) @end table @c ENDOFRANGE gettex @@ -27047,7 +27047,7 @@ internationalization: @cindex @code{TEXTDOMAIN} variable @item TEXTDOMAIN This variable indicates the application's text domain. -For compatibility with GNU @code{gettext}, the default +For compatibility with GNU @command{gettext}, the default value is @code{"messages"}. @cindex internationalization, localization, marked strings @@ -27102,7 +27102,7 @@ The same remarks about argument order as for the @code{dcgettext()} function app @cindexgawkfunc{bindtextdomain} @item @code{bindtextdomain(@var{directory}} [@code{,} @var{domain} ]@code{)} Change the directory in which -@code{gettext} looks for @file{.gmo} files, in case they +@command{gettext} looks for @file{.gmo} files, in case they will not or cannot be placed in the standard locations (e.g., during testing). Return the directory in which @var{domain} is ``bound.'' @@ -27241,12 +27241,12 @@ $ @kbd{gawk --gen-pot -f guide.awk > guide.pot} @cindex @code{xgettext} utility When run with @option{--gen-pot}, @command{gawk} does not execute your program. Instead, it parses it as usual and prints all marked strings -to standard output in the format of a GNU @code{gettext} Portable Object +to standard output in the format of a GNU @command{gettext} Portable Object file. Also included in the output are any constant strings that appear as the first argument to @code{dcgettext()} or as the first and second argument to @code{dcngettext()}.@footnote{The @command{xgettext} utility that comes with GNU -@code{gettext} can handle @file{.awk} files.} +@command{gettext} can handle @file{.awk} files.} @xref{I18N Example}, for the full list of steps to go through to create and test translations for @command{guide}. @@ -27262,7 +27262,7 @@ Format strings for @code{printf} and @code{sprintf()} (@pxref{Printf}) present a special problem for translation. Consider the following:@footnote{This example is borrowed -from the GNU @code{gettext} manual.} +from the GNU @command{gettext} manual.} @c line broken here only for smallbook format @example @@ -27514,8 +27514,8 @@ msgstr "Like, the scoop is" The next step is to make the directory to hold the binary message object file and then to create the @file{guide.mo} file. We pretend that our file is to be used in the @code{en_US.UTF-8} locale. -The directory layout shown here is standard for GNU @code{gettext} on -GNU/Linux systems. Other versions of @code{gettext} may use a different +The directory layout shown here is standard for GNU @command{gettext} on +GNU/Linux systems. Other versions of @command{gettext} may use a different layout: @example @@ -27568,16 +27568,16 @@ $ @kbd{gawk --posix -f guide.awk -f libintl.awk} @section @command{gawk} Can Speak Your Language @command{gawk} itself has been internationalized -using the GNU @code{gettext} package. -(GNU @code{gettext} is described in +using the GNU @command{gettext} package. +(GNU @command{gettext} is described in complete detail in @ifinfo -@inforef{Top, , GNU @code{gettext} utilities, gettext, GNU gettext tools}.) +@inforef{Top, , GNU @command{gettext} utilities, gettext, GNU gettext tools}.) @end ifinfo @ifnotinfo @cite{GNU gettext tools}.) @end ifnotinfo -As of this writing, the latest version of GNU @code{gettext} is +As of this writing, the latest version of GNU @command{gettext} is @uref{ftp://ftp.gnu.org/gnu/gettext/gettext-0.18.2.1.tar.gz, version 0.18.2.1}. If a translation of @command{gawk}'s messages exists, @@ -33239,7 +33239,7 @@ code must be compiled. Assuming that the functions are in a file named @file{filefuncs.c}, and @var{idir} is the location of the @file{gawkapi.h} header file, the following steps@footnote{In practice, you would probably want to -use the GNU Autotools---Automake, Autoconf, Libtool, and Gettext---to +use the GNU Autotools---Automake, Autoconf, Libtool, and @command{gettext}---to configure and build your libraries. Instructions for doing so are beyond the scope of this @value{DOCUMENT}. @xref{gawkextlib}, for WWW links to the tools.} create a GNU/Linux shared library: @@ -33993,7 +33993,7 @@ In addition, you must have the GNU Autotools installed @uref{http://www.gnu.org/software/automake, Automake}, @uref{http://www.gnu.org/software/libtool, Libtool}, and -@uref{http://www.gnu.org/software/gettext, Gettext}). +@uref{http://www.gnu.org/software/gettext, GNU @command{gettext}}). The simple recipe for building and testing @code{gawkextlib} is as follows. First, build and install @command{gawk}: @@ -35008,7 +35008,7 @@ The use of GNU Automake to help in standardizing the configuration process (@pxref{Quick Installation}). @item -The use of GNU @code{gettext} for @command{gawk}'s own message output +The use of GNU @command{gettext} for @command{gawk}'s own message output (@pxref{Gawk I18N}). @item @@ -35589,7 +35589,7 @@ provided the port to BeOS and its documentation. @cindex Peters, Arno Arno Peters did the initial work to convert @command{gawk} to use -GNU Automake and GNU @code{gettext}. +GNU Automake and GNU @command{gettext}. @item @cindex Broder, Alan J.@: @@ -35767,7 +35767,6 @@ file and then use @code{tar} to extract it. You can use the following pipeline to produce the @command{gawk} distribution: @example -# Under System V, add 'o' to the tar options gzip -d -c gawk-@value{VERSION}.@value{PATCHLEVEL}.tar.gz | tar -xvpf - @end example @@ -35922,8 +35921,8 @@ actual @file{Makefile} for creating the documentation. @item Makefile.am @itemx */Makefile.am -Files used by the GNU @command{automake} software for generating -the @file{Makefile.in} files used by @command{autoconf} and +Files used by the GNU Automake software for generating +the @file{Makefile.in} files used by Autoconf and @command{configure}. @item Makefile.in @@ -36019,9 +36018,9 @@ to @file{gawk-@value{VERSION}.@value{PATCHLEVEL}}. Like most GNU software, @command{gawk} is configured automatically for your system by running the @command{configure} program. This program is a Bourne shell script that is generated automatically using -GNU @command{autoconf}. +GNU Autoconf. @ifnotinfo -(The @command{autoconf} software is +(The Autoconf software is described fully in @cite{Autoconf---Generating Automatic Configuration Scripts}, which can be found online at @@ -36029,7 +36028,7 @@ which can be found online at the Free Software Foundation's web site}.) @end ifnotinfo @ifinfo -(The @command{autoconf} software is described fully starting with +(The Autoconf software is described fully starting with @inforef{Top, , Autoconf, autoconf,Autoconf---Generating Automatic Configuration Scripts}.) @end ifinfo @@ -36132,7 +36131,7 @@ improvement. @cindex @option{--with-whiny-user-strftime} configuration option @cindex configuration option, @code{--with-whiny-user-strftime} @item --with-whiny-user-strftime -Force use of the included version of the @code{strftime()} +Force use of the included version of the C @code{strftime()} function for deficient systems. @end table @@ -36179,9 +36178,9 @@ should not have. @file{custom.h} is automatically included by @file{config.h}. It is also possible that the @command{configure} program generated by -@command{autoconf} will not work on your system in some other fashion. +Autoconf will not work on your system in some other fashion. If you do have a problem, the file @file{configure.ac} is the input for -@command{autoconf}. You may be able to change this file and generate a +Autoconf. You may be able to change this file and generate a new version of @command{configure} that works on your system (@pxref{Bugs}, for information on how to report problems in configuring @command{gawk}). @@ -36347,7 +36346,7 @@ and @option{--libexecdir=c:/usr/lib}. @end ignore @ignore -The internal @code{gettext} library tends to be problematic. It is therefore recommended +The internal @command{gettext} library tends to be problematic. It is therefore recommended to use either an external one (@option{--without-included-gettext}) or to disable NLS entirely (@option{--disable-nls}). @end ignore @@ -36384,7 +36383,9 @@ Ancient OS/2 ports of GNU @command{make} are not able to handle the Makefiles of this package. If you encounter any problems with @command{make}, try GNU Make 3.79.1 or later versions. You should find the latest version on -@uref{ftp://hobbes.nmsu.edu/pub/os2/}. +@uref{ftp://hobbes.nmsu.edu/pub/os2/}.@footnote{As of May, 2014, +this site is still there, but the author could not find a package +for GNU Make.} @end quotation @end ifclear @@ -36439,14 +36440,14 @@ program files as described in @ref{AWKPATH Variable}. However, semicolons (rather than colons) separate elements in the @env{AWKPATH} variable. If @env{AWKPATH} is not set or is empty, then the default search path for MS-Windows and MS-DOS versions is -@code{@w{".;c:/lib/awk;c:/gnu/lib/awk"}}. +@samp{@w{.;c:/lib/awk;c:/gnu/lib/awk}}. @ifclear FOR_PRINT @cindex @command{gawk}, OS/2 version of @cindex @code{UNIXROOT} variable, on OS/2 systems The search path for OS/2 (32 bit, EMX) is determined by the prefix directory (most likely @file{/usr} or @file{c:/usr}) that has been specified as an option of -the @command{configure} script like it is the case for the Unix versions. +the @command{configure} script as is the case for the Unix versions. If @file{c:/usr} is the prefix directory then the default search path contains @file{.} and @file{c:/usr/share/awk}. Additionally, to support binary distributions of @command{gawk} for OS/2 @@ -36454,7 +36455,7 @@ systems whose drive @samp{c:} might not support long file names or might not exi at all, there is a special environment variable. If @env{UNIXROOT} specifies a drive then this specific drive is also searched for program files. E.g., if @env{UNIXROOT} is set to @file{e:} the complete default search path is -@code{@w{".;c:/usr/share/awk;e:/usr/share/awk"}}. +@samp{@w{.;c:/usr/share/awk;e:/usr/share/awk}}. An @command{sh}-like shell (as opposed to @command{command.com} under MS-DOS or @command{cmd.exe} under MS-Windows or OS/2) may be useful for @command{awk} programming. @@ -36478,8 +36479,8 @@ 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 @code{"\r\n"} to @code{"\n"} on input and @code{"\n"} -to @code{"\r\n"} on output. A special @code{BINMODE} variable @value{COMMONEXT} +translate 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: @itemize @value{BULLET} @@ -36520,7 +36521,7 @@ The name @code{BINMODE} was chosen to match @command{mawk} @command{mawk} adds a @samp{-W BINMODE=@var{N}} option and an environment variable that can set @code{BINMODE}, @code{RS}, and @code{ORS}. The files @file{binmode[1-3].awk} (under @file{gnu/lib/awk} in some of the -prepared distributions) have been chosen to match @command{mawk}'s @samp{-W +prepared binary distributions) have been chosen to match @command{mawk}'s @samp{-W BINMODE=@var{N}} option. These can be changed or discarded; in particular, the setting of @code{RS} giving the fewest ``surprises'' is open to debate. @command{mawk} uses @samp{RS = "\r\n"} if binary mode is set on read, which is @@ -36644,11 +36645,11 @@ or: $ @kbd{MMK/DESCRIPTION=[.vms]descrip.mms gawk} @end example -@code{MMK} is an open source, free, near-clone of @code{MMS} and -can better handle @code{ODS-5} volumes with upper- and lowercase filenames. -@code{MMK} is available from @uref{https://github.com/endlesssoftware/mmk}. +@command{MMK} is an open source, free, near-clone of @command{MMS} and +can better handle ODS-5 volumes with upper- and lowercase filenames. +@command{MMK} is available from @uref{https://github.com/endlesssoftware/mmk}. -With @code{ODS-5} volumes and extended parsing enabled, the case of the target +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 @@ -36657,8 +36658,8 @@ 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.''} -The @file{[.vms]gawk_build_steps.txt} provides information on how to build -@command{gawk} into a PCSI kit that is compatible with the GNV product. +@xref{VMS GNV}, for information on building +@command{gawk} as a PCSI kit that is compatible with the GNV product. @node VMS Dynamic Extensions @appendixsubsubsec Compiling @command{gawk} Dynamic Extensions on VMS @@ -36863,7 +36864,7 @@ 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 to supply individual PCSI packages for each component. -See @uref{https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/}. +See @w{@uref{https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/}.} The normal build procedure for @command{gawk} produces a program that is suitable for use with GNV. @@ -36964,12 +36965,14 @@ Once you have a precise problem, send email to @EMAIL{bug-gawk@@gnu.org,bug-gawk at gnu dot org}. @cindex Robbins, Arnold -Using this address automatically sends a copy of your -mail to me. If necessary, I can be reached directly at +The @command{gawk} maintainers subscribe to this address and +thus they will receive your bug report. +If necessary, the primary maintainer can be reached directly at @EMAIL{arnold@@skeeve.com,arnold at skeeve dot com}. The bug reporting address is preferred since the email list is archived at the GNU Project. -@emph{All email should be in English, since that is my native language.} +@emph{All email should be in English. This is the only language +understood in common by all the maintainers.} @cindex @code{comp.lang.awk} newsgroup @quotation CAUTION @@ -37016,13 +37019,13 @@ as follows: @cindex Rankin, Pat @cindex Malmberg, John @cindex Pitts, Dave -@multitable {MS-Windows with MINGW} {123456789012345678901234567890123456789001234567890} +@multitable {MS-Windows with MinGW} {123456789012345678901234567890123456789001234567890} @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. OS/2 not mentioned anywhere else -@c in the print version though. +@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 VMS @tab Pat Rankin, @EMAIL{r.pat.rankin@@gmail.com,r.pat.rankin at gmail.com}, and @@ -37180,10 +37183,10 @@ information, see the @uref{http://busybox.net, project's home page}. @cindex Solaris, POSIX-compliant @command{awk} @cindex source code, Solaris @command{awk} @item The OpenSolaris POSIX @command{awk} -The version of @command{awk} in @file{/usr/xpg4/bin} on Solaris is -more-or-less POSIX-compliant. It is based on the @command{awk} from -Mortice Kern Systems for PCs. -This author was able to make it compile and work under GNU/Linux +The versions of @command{awk} in @file{/usr/xpg4/bin} and +@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. +This author was 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 Automake) would take more work, and this has not been done, at least to our knowledge. @@ -37238,6 +37241,9 @@ under the GPL. It has a large number of extensions over standard See @uref{http://www.quiktrim.org/QTawk.html} for more information, including the manual and a download link. +The project may als be frozen; no new code changes have been made +since approximately 2008. + @item Other Versions See also the @uref{http://en.wikipedia.org/wiki/Awk_language#Versions_and_implementations, Wikipedia article}, for information on additional versions. @@ -37287,7 +37293,7 @@ is one more option available on the command line: @table @code @item -Y @itemx --parsedebug -Prints out the parse stack information as the program is being parsed. +Print out the parse stack information as the program is being parsed. @end table This option is intended only for serious @command{gawk} developers @@ -37312,7 +37318,7 @@ as well as any considerations you should bear in mind. * New Ports:: Porting @command{gawk} to a new operating system. * Derived Files:: Why derived files are kept in the - @command{git} repository. + Git repository. @end menu @node Accessing The Source @@ -37336,8 +37342,8 @@ git clone git://git.savannah.gnu.org/gawk.git @end example @noindent -This will clone the @command{gawk} repository. If you are behind a -firewall that will not allow you to use the Git native protocol, you +This clones the @command{gawk} repository. If you are behind a +firewall that does not allow you to use the Git native protocol, you can still access the repository using: @example @@ -37365,7 +37371,7 @@ that has a Git plug-in for working with Git repositories. 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} distribution, there are several steps that you need to take in order to -make it possible to include your changes: +make it possible to include them: @enumerate 1 @item @@ -37387,8 +37393,9 @@ or @EMAIL{assign@@gnu.org,assign at gnu dot org}. @item Get the latest version. It is much easier for me to integrate changes if they are relative to -the most recent distributed version of @command{gawk}. If your version of -@command{gawk} is very old, I may not be able to integrate them at all. +the most recent distributed version of @command{gawk}, or better yet, +relative to the latest code in the Git repository. If your version of +@command{gawk} is very old, I may not be able to integrate your changes at all. (@xref{Getting}, for information on getting the latest version of @command{gawk}.) @@ -37519,6 +37526,7 @@ not do so, particularly if there are lots of changes. Include an entry for the @file{ChangeLog} file with your submission. This helps further minimize the amount of work I have to do, making it easier for me to accept patches. +It is simplest if you just make this part of your diff. @end enumerate Although this sounds like a lot of work, please remember that while you @@ -37576,10 +37584,39 @@ A number of the files that come with @command{gawk} are maintained by other people. Thus, you should not change them unless it is for a very good reason; i.e., changes are not out of the question, but changes to these files are scrutinized extra carefully. -The files are @file{dfa.c}, @file{dfa.h}, @file{getopt1.c}, @file{getopt.c}, -@file{getopt.h}, @file{install-sh}, @file{mkinstalldirs}, @file{regcomp.c}, -@file{regex.c}, @file{regexec.c}, @file{regexex.c}, @file{regex.h}, -@file{regex_internal.c}, and @file{regex_internal.h}. +The files are +@file{dfa.c}, +@file{dfa.h}, +@file{getopt.c}, +@file{getopt.h}, +@file{getopt1.c}, +@file{getopt_int.h}, +@file{gettext.h}, +@file{regcomp.c}, +@file{regex.c}, +@file{regex.h}, +@file{regex_internal.c}, +@file{regex_internal.h}, +and +@file{regexec.c}. + +@item +A number of other files are provided by the GNU +Autotools (Autoconf, Automake, and GNU @command{gettext}). +You should not change them either, unless it is for a very +good reason. The files are +@file{ABOUT-NLS}, +@file{config.guess}, +@file{config.rpath}, +@file{config.sub}, +@file{depcomp}, +@file{INSTALL}, +@file{install-sh}, +@file{missing}, +@file{mkinstalldirs}, +@file{xalloc.h}, +and +@file{ylwrap}. @item Be willing to continue to maintain the port. @@ -37630,16 +37667,16 @@ In the code that you supply and maintain, feel free to use a coding style and brace layout that suits your taste. @node Derived Files -@appendixsubsec Why Generated Files Are Kept In @command{git} +@appendixsubsec Why Generated Files Are Kept In Git @c STARTOFRANGE gawkgit -@cindex @command{git}, use of for @command{gawk} source code +@cindex Git, use of for @command{gawk} source code @c From emails written March 22, 2012, to the gawk developers list. -If you look at the @command{gawk} source in the @command{git} +If you look at the @command{gawk} source in the Git repository, you will notice that it includes files that are automatically generated by GNU infrastructure tools, such as @file{Makefile.in} from -@command{automake} and even @file{configure} from @command{autoconf}. +Automake and even @file{configure} from Autoconf. This is different from many Free Software projects that do not store the derived files, because that keeps the repository less cluttered, @@ -37665,11 +37702,10 @@ there a guarantee that we could find that @command{bison} version? Or that @emph{it} would build?) If the repository has all the generated files, then it's easy to just check -them out and build. (Or @emph{easier}, depending upon how far back we go. -@code{:-)}) +them out and build. (Or @emph{easier}, depending upon how far back we go.) And that brings us to the second (and stronger) reason why all the files -really need to be in @command{git}. It boils down to who do you cater +really need to be in Git. It boils down to who do you cater to---the @command{gawk} developer(s), or the user who just wants to check out a version and try it out? @@ -37678,10 +37714,10 @@ wants it to be possible for any interested @command{awk} user in the world to just clone the repository, check out the branch of interest and build it. Without their having to have the correct version(s) of the autotools.@footnote{There is one GNU program that is (in our opinion) -severely difficult to bootstrap from the @command{git} repository. For -example, on the author's old (but still working) PowerPC macintosh with +severely difficult to bootstrap from the Git repository. For +example, on the author's old (but still working) PowerPC Macintosh with Mac OS X 10.5, it was necessary to bootstrap a ton of software, starting -with @command{git} itself, in order to try to work with the latest code. +with Git itself, in order to try to work with the latest code. It's not pleasant, and especially on older systems, it's a big waste of time. @@ -37704,14 +37740,14 @@ This is extremely important for the @code{master} and Further, the @command{gawk} maintainer would argue that it's also important for the @command{gawk} developers. When he tried to check out -the @code{xgawk} branch@footnote{A branch created by one of the other +the @code{xgawk} branch@footnote{A branch (since removed) created by one of the other developers that did not include the generated files.} to build it, he couldn't. (No @file{ltmain.sh} file, and he had no idea how to create it, and that was not the only problem.) He felt @emph{extremely} frustrated. With respect to that branch, the maintainer is no different than Jane User who wants to try to build -@code{gawk-4.0-stable} or @code{master} from the repository. +@code{gawk-4.1-stable} or @code{master} from the repository. Thus, the maintainer thinks that it's not just important, but critical, that for any given branch, the above incantation @emph{just works}. @@ -37731,14 +37767,14 @@ It's the maintainer's job to merge them and he will deal with it. @item He is really good at @samp{git diff x y > /tmp/diff1 ; gvim /tmp/diff1} to -remove the diffs that aren't of interest in order to review code. @code{:-)} +remove the diffs that aren't of interest in order to review code. @end enumerate @item It would certainly help if everyone used the same versions of the GNU tools as he does, which in general are the latest released versions of -@command{automake}, -@command{autoconf}, +Automake, +Autoconf, @command{bison}, and @command{gettext}. @@ -37750,10 +37786,10 @@ now it hasn't been a real issue since I'm the only one who's been dorking with the configuration machinery. @end ignore -@enumerate A -@item -Installing from source is quite easy. It's how the maintainer worked for years -under Fedora. +@c @enumerate A +@c @item +Installing from source is quite easy. It's how the maintainer worked for years, +and still works. He had @file{/usr/local/bin} at the front of his @env{PATH} and just did: @example @@ -37764,10 +37800,11 @@ cd @var{package}-@var{x}.@var{y}.@var{z} make install # as root @end example -@item +@c @item +@ignore These days the maintainer uses Ubuntu 12.04 which is medium current, but -he is already doing the above for @command{autoconf}, @command{automake} -and @command{bison}. +he is already doing the above for Automake, Autoconf, and @command{bison}. +@end ignore @ignore (C. Rant: Recent Linux versions with GNOME 3 really suck. What @@ -37775,7 +37812,7 @@ and @command{bison}. me to Ubuntu, but Ubuntu 11.04 and 11.10 are totally unusable from a UI perspective. Bleah.) @end ignore -@end enumerate +@c @end enumerate @ignore @item @@ -37791,7 +37828,7 @@ the "real" changes and the second with "everything else needed for Most of the above was originally written by the maintainer to other @command{gawk} developers. It raised the objection from one of the developers ``@dots{} that anybody pulling down the source from -@command{git} is not an end user.'' +Git is not an end user.'' However, this is not true. There are ``power @command{awk} users'' who can build @command{gawk} (using the magic incantation shown previously) @@ -37801,10 +37838,10 @@ kept buildable all the time. It was then suggested that there be a @command{cron} job to create nightly tarballs of ``the source.'' Here, the problem is that there are source trees, corresponding to the various branches! So, -nightly tar balls aren't the answer, especially as the repository can go +nightly tarballs aren't the answer, especially as the repository can go for weeks without significant change being introduced. -Fortunately, the @command{git} server can meet this need. For any given +Fortunately, the Git server can meet this need. For any given branch named @var{branchname}, use: @example @@ -37864,9 +37901,10 @@ Larry @author Larry Wall @end quotation -The @file{TODO} file in the @command{gawk} Git repository lists possible -future enhancements. Some of these relate to the source code, and others -to possible new features. Please see that file for the list. +The @file{TODO} file in the @code{master} branch of the @command{gawk} +Git repository lists possible future enhancements. Some of these relate +to the source code, and others to possible new features. Please see +that file for the list. @xref{Additions}, if you are interested in tackling any of the projects listed there. @@ -37938,8 +37976,8 @@ documentation in this @value{DOCUMENT}, but it was quite minimal. @item Being able to call into @command{gawk} from an extension required linker facilities that are common on Unix-derived systems but that did -not work on Windows systems; users wanting extensions on Windows -had to statically link them into @command{gawk}, even though Windows supports +not work on MS-Windows systems; users wanting extensions on MS-Windows +had to statically link them into @command{gawk}, even though MS-Windows supports dynamic loading of shared objects. @item @@ -37993,7 +38031,7 @@ in order to loop over all the element in an easy fashion for C code. @item The ability to create arrays (including @command{gawk}'s true -multidimensional arrays). +arrays of arrays). @end itemize @end itemize @@ -38014,8 +38052,8 @@ The API mechanism should not require access to @command{gawk}'s symbols@footnote{The @dfn{symbols} are the variables and functions defined inside @command{gawk}. Access to these symbols by code external to @command{gawk} loaded dynamically at runtime is -problematic on Windows.} by the compile-time or dynamic linker, -in order to enable creation of extensions that also work on Windows. +problematic on MS-Windows.} by the compile-time or dynamic linker, +in order to enable creation of extensions that also work on MS-Windows. @end itemize During development, it became clear that there were other features @@ -38362,14 +38400,14 @@ like this: @code{""}. Humans are used to working in decimal; i.e., base 10. In base 10, numbers go from 0 to 9, and then ``roll over'' into the next -column. (Remember grade school? 42 is 4 times 10 plus 2.) +column. (Remember grade school? 42 = 4 x 10 + 2.) There are other number bases though. Computers commonly use base 2 or @dfn{binary}, base 8 or @dfn{octal}, and base 16 or @dfn{hexadecimal}. In binary, each column represents two times the value in the column to its right. Each column may contain either a 0 or a 1. -Thus, binary 1010 represents 1 times 8, plus 0 times 4, plus 1 times 2, -plus 0 times 1, or decimal 10. +Thus, binary 1010 represents (1 x 8) + (0 x 4) + (1 x 2) ++ (0 x 1), or decimal 10. Octal and hexadecimal are discussed more in @ref{Nondecimal-numbers}. @@ -38406,7 +38444,7 @@ Where it makes sense, POSIX @command{awk} is compatible with 1999 ISO C. @item Action A series of @command{awk} statements attached to a rule. If the rule's pattern matches an input record, @command{awk} executes the -rule's action. Actions are always enclosed in curly braces. +rule's action. Actions are always enclosed in braces. (@xref{Action Overview}.) @cindex Spencer, Henry @@ -38511,7 +38549,7 @@ Named after the English mathematician Boole. See also ``Logical Expression.'' @item Bourne Shell The standard shell (@file{/bin/sh}) on Unix and Unix-like systems, -originally written by Steven R.@: Bourne. +originally written by Steven R.@: Bourne at Bell Laboratories. Many shells (Bash, @command{ksh}, @command{pdksh}, @command{zsh}) are generally upwardly compatible with the Bourne shell. @@ -38561,7 +38599,9 @@ Changing some of them affects @command{awk}'s running environment. (@xref{Built-in Variables}.) @item Braces -See ``Curly Braces.'' +The characters @samp{@{} and @samp{@}}. Braces are used in +@command{awk} for delimiting actions, compound statements, and function +bodies. @item C The system programming language that most GNU software is written in. The @@ -38586,7 +38626,7 @@ or place. The most common character set in use today is ASCII (American Standard Code for Information Interchange). Many European countries use an extension of ASCII known as ISO-8859-1 (ISO Latin-1). The @uref{http://www.unicode.org, Unicode character set} is -becoming increasingly popular and standard, and is particularly +increasingly popular and standard, and is particularly widely used on GNU/Linux systems. @cindex Kernighan, Brian @@ -38599,10 +38639,11 @@ 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}. +@cindex McIlroy, Doug @cindex cookie @item Cookie A peculiar goodie, token, saying or remembrance -produced by or presented to a program. (With thanks to Doug McIlroy.) +produced by or presented to a program. (With thanks to Professor Doug McIlroy.) @ignore From: Doug McIlroy Date: Sat, 13 Oct 2012 19:55:25 -0400 @@ -38680,9 +38721,7 @@ statements, and in patterns to select which input records to process. (@xref{Typing and Comparison}.) @item Curly Braces -The characters @samp{@{} and @samp{@}}. Curly braces are used in -@command{awk} for delimiting actions, compound statements, and function -bodies. +See ``Braces.'' @cindex dark corner @item Dark Corner @@ -38727,7 +38766,7 @@ ordinary expression. It could be a string constant, such as (@xref{Computed Regexps}.) @item Environment -A collection of strings, of the form @var{name}@code{=}@code{val}, that each +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}. @@ -38781,8 +38820,8 @@ this is just a number that can have a fractional part. See also ``Double Precision'' and ``Single Precision.'' @item Format -Format strings are used to control the appearance of output in the -@code{strftime()} and @code{sprintf()} functions, and are used in the +Format strings control the appearance of output in the +@code{strftime()} and @code{sprintf()} functions, and in the @code{printf} statement as well. Also, data conversions from numbers to strings are controlled by the format strings contained in the built-in variables @code{CONVFMT} and @code{OFMT}. (@xref{Control Letters}.) @@ -38851,7 +38890,7 @@ Base 16 notation, where the digits are @code{0}--@code{9} and @code{A}--@code{F}, with @samp{A} representing 10, @samp{B} representing 11, and so on, up to @samp{F} for 15. Hexadecimal numbers are written in C using a leading @samp{0x}, -to indicate their base. Thus, @code{0x12} is 18 (1 times 16 plus 2). +to indicate their base. Thus, @code{0x12} is 18 ((1 x 16) + 2). @xref{Nondecimal-numbers}. @item I/O @@ -38925,8 +38964,8 @@ meaning. Keywords are reserved and may not be used as variable names. @code{function}, @code{func}, @code{if}, -@code{nextfile}, @code{next}, +@code{nextfile}, @code{switch}, and @code{while}. @@ -38987,13 +39026,9 @@ Ancient @command{awk} implementations used single precision floating-point. @item Octal Base-eight notation, where the digits are @code{0}--@code{7}. Octal numbers are written in C using a leading @samp{0}, -to indicate their base. Thus, @code{013} is 11 (one times 8 plus 3). +to indicate their base. Thus, @code{013} is 11 ((1 x 8) + 3). @xref{Nondecimal-numbers}. -@cindex P1003.1 POSIX standard -@item P1003.1 -See ``POSIX.'' - @item Pattern Patterns tell @command{awk} which input records are interesting to which rules. @@ -39034,8 +39069,8 @@ specify single lines. (@xref{Pattern Overview}.) @item Recursion When a function calls itself, either directly or indirectly. -As long as this is not clear, refer to the entry for ``recursion.'' If this is clear, stop, and proceed to the next entry. +Otherwise, refer to the entry for ``recursion.'' @item Redirection Redirection means performing input from something other than the standard input @@ -39114,7 +39149,7 @@ expressions, and function calls have side effects. An internal representation of numbers that can have fractional parts. Single precision numbers keep track of fewer digits than do double precision numbers, but operations on them are sometimes less expensive in terms of CPU time. -This is the type used by some very old versions of @command{awk} to store +This is the type used by some ancient versions of @command{awk} to store numeric values. It is the C type @code{float}. @item Space @@ -39151,7 +39186,7 @@ into the local language. A value in the ``seconds since the epoch'' format used by Unix and POSIX systems. Used for the @command{gawk} functions @code{mktime()}, @code{strftime()}, and @code{systime()}. -See also ``Epoch'' and ``UTC.'' +See also ``Epoch,'' ``GMT,'' and ``UTC.'' @cindex Linux @cindex GNU/Linux diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 3794a25b..45e807a2 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -783,7 +783,7 @@ particular records in a file and perform operations upon them. programming. * Profiling:: Profiling your @command{awk} programs. * I18N and L10N:: Internationalization and Localization. -* Explaining gettext:: How GNU @code{gettext} works. +* Explaining gettext:: How GNU @command{gettext} works. * Programmer i18n:: Features for the programmer. * Translator i18n:: Features for the translator. * String Extraction:: Extracting marked strings. @@ -960,7 +960,7 @@ particular records in a file and perform operations upon them. * New Ports:: Porting @command{gawk} to a new operating system. * Derived Files:: Why derived files are kept in the - @command{git} repository. + Git repository. * Future Extensions:: New features that may be implemented one day. * Implementation Limitations:: Some limitations of the @@ -2139,7 +2139,7 @@ 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 curly braces to separate it from the pattern. +action is enclosed in braces to separate it from the pattern. Newlines usually separate rules. Therefore, an @command{awk} program looks like this: @@ -2866,10 +2866,10 @@ for @emph{every} input line. If the action is omitted, the default action is to print all lines that match the pattern. @cindex actions, empty -Thus, we could leave out the action (the @code{print} statement and the curly +Thus, we could leave out the action (the @code{print} statement and the braces) in the previous example and the result would be the same: @command{awk} prints all lines matching the pattern @samp{li}. By comparison, -omitting the @code{print} statement but retaining the curly braces makes an +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 @@ -3611,7 +3611,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 @code{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. @@ -12374,11 +12374,11 @@ in outline, an @command{awk} program generally looks like this: @cindex @code{;} (semicolon), separating statements in actions @cindex semicolon (@code{;}), separating statements in actions An action consists of one or more @command{awk} @dfn{statements}, enclosed -in curly braces (@samp{@{@r{@dots{}}@}}). Each statement specifies one +in braces (@samp{@{@r{@dots{}}@}}). Each statement specifies one thing to do. The statements are separated by newlines or semicolons. -The curly braces around an action must be used even if the action +The braces around an action must be used even if the action contains only one statement, or if it contains no statements at -all. However, if you omit the action entirely, omit the curly braces as +all. However, if you omit the action entirely, omit the braces as well. An omitted action is equivalent to @samp{@{ print $0 @}}: @example @@ -12404,7 +12404,7 @@ programs. The @command{awk} language gives you C-like constructs special ones (@pxref{Statements}). @item Compound statements -Enclose one or more statements in curly braces. A compound statement +Enclose one or more statements in braces. A compound statement is used in order to put several statements together in the body of an @code{if}, @code{while}, @code{do}, or @code{for} statement. @@ -12452,7 +12452,7 @@ Many control statements contain other statements. For example, the @code{if} statement contains another statement that may or may not be executed. The contained statement is called the @dfn{body}. To include more than one statement in the body, group them into a -single @dfn{compound statement} with curly braces, separating them with +single @dfn{compound statement} with braces, separating them with newlines or semicolons. @menu @@ -12506,7 +12506,7 @@ if the value of @code{x} is evenly divisible by two), then the first statement is executed. If the @code{else} keyword appears on the same line as @var{then-body} and @var{then-body} is not a compound statement (i.e., not surrounded by -curly braces), then a semicolon must separate @var{then-body} from +braces), then a semicolon must separate @var{then-body} from the @code{else}. To illustrate this, the previous example can be rewritten as: @@ -25961,7 +25961,7 @@ a requirement. @menu * I18N and L10N:: Internationalization and Localization. -* Explaining gettext:: How GNU @code{gettext} works. +* Explaining gettext:: How GNU @command{gettext} works. * Programmer i18n:: Features for the programmer. * Translator i18n:: Features for the translator. * I18N Example:: A simple i18n example. @@ -25985,22 +25985,22 @@ responses, and information related to how numerical and monetary values are printed and read. @node Explaining gettext -@section GNU @code{gettext} +@section GNU @command{gettext} @cindex internationalizing a program @c STARTOFRANGE gettex -@cindex @code{gettext} library -@command{gawk} uses GNU @code{gettext} to provide its internationalization +@cindex @command{gettext} library +@command{gawk} uses GNU @command{gettext} to provide its internationalization features. -The facilities in GNU @code{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 @code{gettext}. +port doesn't support GNU @command{gettext}. Therefore, these features are not available if you are using one of those operating systems. Sorry.} -@cindex portability, @code{gettext} library and -When using GNU @code{gettext}, each application has its own +@cindex portability, @command{gettext} library and +When using GNU @command{gettext}, each application has its own @dfn{text domain}. This is a unique name, such as @samp{kpilot} or @samp{gawk}, that identifies the application. A complete application may have multiple components---programs written @@ -26024,7 +26024,7 @@ language). @cindex @code{textdomain()} function (C library) @item The programmer indicates the application's text domain -(@code{"guide"}) to the @code{gettext} library, +(@command{"guide"}) to the @command{gettext} library, by calling the @code{textdomain()} function. @cindex @code{.pot} files @@ -26068,7 +26068,7 @@ are installed in a standard place. @cindex @code{bindtextdomain()} function (C library) @item -For testing and development, it is possible to tell @code{gettext} +For testing and development, it is possible to tell @command{gettext} to use @file{.gmo} files in a different directory than the standard one by using the @code{bindtextdomain()} function. @@ -26101,7 +26101,7 @@ strings enclosed in calls to @code{gettext()}. @cindex @code{_} (underscore), C macro @cindex underscore (@code{_}), C macro -The GNU @code{gettext} developers, recognizing that typing +The GNU @command{gettext} developers, recognizing that typing @samp{gettext(@dots{})} over and over again is both painful and ugly to look at, use the macro @samp{_} (an underscore) to make things easier: @@ -26114,7 +26114,7 @@ printf("%s", _("Don't Panic!\n")); @end example @cindex internationalization, localization, locale categories -@cindex @code{gettext} library, locale categories +@cindex @command{gettext} library, locale categories @cindex locale categories @noindent This reduces the typing overhead to just three extra characters per string @@ -26122,12 +26122,12 @@ and is considerably easier to read as well. There are locale @dfn{categories} for different types of locale-related information. -The defined locale categories that @code{gettext} knows about are: +The defined locale categories that @command{gettext} knows about are: @table @code @cindex @code{LC_MESSAGES} locale category @item LC_MESSAGES -Text messages. This is the default category for @code{gettext} +Text messages. This is the default category for @command{gettext} operations, but it is possible to supply a different one explicitly, if necessary. (It is almost never necessary to supply a different category.) @@ -26175,7 +26175,7 @@ before or after the day in a date, local month abbreviations, and so on. @cindex @code{LC_ALL} locale category @item LC_ALL -All of the above. (Not too useful in the context of @code{gettext}.) +All of the above. (Not too useful in the context of @command{gettext}.) @end table @c ENDOFRANGE gettex @@ -26191,7 +26191,7 @@ internationalization: @cindex @code{TEXTDOMAIN} variable @item TEXTDOMAIN This variable indicates the application's text domain. -For compatibility with GNU @code{gettext}, the default +For compatibility with GNU @command{gettext}, the default value is @code{"messages"}. @cindex internationalization, localization, marked strings @@ -26246,7 +26246,7 @@ The same remarks about argument order as for the @code{dcgettext()} function app @cindexgawkfunc{bindtextdomain} @item @code{bindtextdomain(@var{directory}} [@code{,} @var{domain} ]@code{)} Change the directory in which -@code{gettext} looks for @file{.gmo} files, in case they +@command{gettext} looks for @file{.gmo} files, in case they will not or cannot be placed in the standard locations (e.g., during testing). Return the directory in which @var{domain} is ``bound.'' @@ -26385,12 +26385,12 @@ $ @kbd{gawk --gen-pot -f guide.awk > guide.pot} @cindex @code{xgettext} utility When run with @option{--gen-pot}, @command{gawk} does not execute your program. Instead, it parses it as usual and prints all marked strings -to standard output in the format of a GNU @code{gettext} Portable Object +to standard output in the format of a GNU @command{gettext} Portable Object file. Also included in the output are any constant strings that appear as the first argument to @code{dcgettext()} or as the first and second argument to @code{dcngettext()}.@footnote{The @command{xgettext} utility that comes with GNU -@code{gettext} can handle @file{.awk} files.} +@command{gettext} can handle @file{.awk} files.} @xref{I18N Example}, for the full list of steps to go through to create and test translations for @command{guide}. @@ -26406,7 +26406,7 @@ Format strings for @code{printf} and @code{sprintf()} (@pxref{Printf}) present a special problem for translation. Consider the following:@footnote{This example is borrowed -from the GNU @code{gettext} manual.} +from the GNU @command{gettext} manual.} @c line broken here only for smallbook format @example @@ -26658,8 +26658,8 @@ msgstr "Like, the scoop is" The next step is to make the directory to hold the binary message object file and then to create the @file{guide.mo} file. We pretend that our file is to be used in the @code{en_US.UTF-8} locale. -The directory layout shown here is standard for GNU @code{gettext} on -GNU/Linux systems. Other versions of @code{gettext} may use a different +The directory layout shown here is standard for GNU @command{gettext} on +GNU/Linux systems. Other versions of @command{gettext} may use a different layout: @example @@ -26712,16 +26712,16 @@ $ @kbd{gawk --posix -f guide.awk -f libintl.awk} @section @command{gawk} Can Speak Your Language @command{gawk} itself has been internationalized -using the GNU @code{gettext} package. -(GNU @code{gettext} is described in +using the GNU @command{gettext} package. +(GNU @command{gettext} is described in complete detail in @ifinfo -@inforef{Top, , GNU @code{gettext} utilities, gettext, GNU gettext tools}.) +@inforef{Top, , GNU @command{gettext} utilities, gettext, GNU gettext tools}.) @end ifinfo @ifnotinfo @cite{GNU gettext tools}.) @end ifnotinfo -As of this writing, the latest version of GNU @code{gettext} is +As of this writing, the latest version of GNU @command{gettext} is @uref{ftp://ftp.gnu.org/gnu/gettext/gettext-0.18.2.1.tar.gz, version 0.18.2.1}. If a translation of @command{gawk}'s messages exists, @@ -32383,7 +32383,7 @@ code must be compiled. Assuming that the functions are in a file named @file{filefuncs.c}, and @var{idir} is the location of the @file{gawkapi.h} header file, the following steps@footnote{In practice, you would probably want to -use the GNU Autotools---Automake, Autoconf, Libtool, and Gettext---to +use the GNU Autotools---Automake, Autoconf, Libtool, and @command{gettext}---to configure and build your libraries. Instructions for doing so are beyond the scope of this @value{DOCUMENT}. @xref{gawkextlib}, for WWW links to the tools.} create a GNU/Linux shared library: @@ -33137,7 +33137,7 @@ In addition, you must have the GNU Autotools installed @uref{http://www.gnu.org/software/automake, Automake}, @uref{http://www.gnu.org/software/libtool, Libtool}, and -@uref{http://www.gnu.org/software/gettext, Gettext}). +@uref{http://www.gnu.org/software/gettext, GNU @command{gettext}}). The simple recipe for building and testing @code{gawkextlib} is as follows. First, build and install @command{gawk}: @@ -34152,7 +34152,7 @@ The use of GNU Automake to help in standardizing the configuration process (@pxref{Quick Installation}). @item -The use of GNU @code{gettext} for @command{gawk}'s own message output +The use of GNU @command{gettext} for @command{gawk}'s own message output (@pxref{Gawk I18N}). @item @@ -34733,7 +34733,7 @@ provided the port to BeOS and its documentation. @cindex Peters, Arno Arno Peters did the initial work to convert @command{gawk} to use -GNU Automake and GNU @code{gettext}. +GNU Automake and GNU @command{gettext}. @item @cindex Broder, Alan J.@: @@ -34911,7 +34911,6 @@ file and then use @code{tar} to extract it. You can use the following pipeline to produce the @command{gawk} distribution: @example -# Under System V, add 'o' to the tar options gzip -d -c gawk-@value{VERSION}.@value{PATCHLEVEL}.tar.gz | tar -xvpf - @end example @@ -35066,8 +35065,8 @@ actual @file{Makefile} for creating the documentation. @item Makefile.am @itemx */Makefile.am -Files used by the GNU @command{automake} software for generating -the @file{Makefile.in} files used by @command{autoconf} and +Files used by the GNU Automake software for generating +the @file{Makefile.in} files used by Autoconf and @command{configure}. @item Makefile.in @@ -35163,9 +35162,9 @@ to @file{gawk-@value{VERSION}.@value{PATCHLEVEL}}. Like most GNU software, @command{gawk} is configured automatically for your system by running the @command{configure} program. This program is a Bourne shell script that is generated automatically using -GNU @command{autoconf}. +GNU Autoconf. @ifnotinfo -(The @command{autoconf} software is +(The Autoconf software is described fully in @cite{Autoconf---Generating Automatic Configuration Scripts}, which can be found online at @@ -35173,7 +35172,7 @@ which can be found online at the Free Software Foundation's web site}.) @end ifnotinfo @ifinfo -(The @command{autoconf} software is described fully starting with +(The Autoconf software is described fully starting with @inforef{Top, , Autoconf, autoconf,Autoconf---Generating Automatic Configuration Scripts}.) @end ifinfo @@ -35276,7 +35275,7 @@ improvement. @cindex @option{--with-whiny-user-strftime} configuration option @cindex configuration option, @code{--with-whiny-user-strftime} @item --with-whiny-user-strftime -Force use of the included version of the @code{strftime()} +Force use of the included version of the C @code{strftime()} function for deficient systems. @end table @@ -35323,9 +35322,9 @@ should not have. @file{custom.h} is automatically included by @file{config.h}. It is also possible that the @command{configure} program generated by -@command{autoconf} will not work on your system in some other fashion. +Autoconf will not work on your system in some other fashion. If you do have a problem, the file @file{configure.ac} is the input for -@command{autoconf}. You may be able to change this file and generate a +Autoconf. You may be able to change this file and generate a new version of @command{configure} that works on your system (@pxref{Bugs}, for information on how to report problems in configuring @command{gawk}). @@ -35491,7 +35490,7 @@ and @option{--libexecdir=c:/usr/lib}. @end ignore @ignore -The internal @code{gettext} library tends to be problematic. It is therefore recommended +The internal @command{gettext} library tends to be problematic. It is therefore recommended to use either an external one (@option{--without-included-gettext}) or to disable NLS entirely (@option{--disable-nls}). @end ignore @@ -35528,7 +35527,9 @@ Ancient OS/2 ports of GNU @command{make} are not able to handle the Makefiles of this package. If you encounter any problems with @command{make}, try GNU Make 3.79.1 or later versions. You should find the latest version on -@uref{ftp://hobbes.nmsu.edu/pub/os2/}. +@uref{ftp://hobbes.nmsu.edu/pub/os2/}.@footnote{As of May, 2014, +this site is still there, but the author could not find a package +for GNU Make.} @end quotation @end ifclear @@ -35583,14 +35584,14 @@ program files as described in @ref{AWKPATH Variable}. However, semicolons (rather than colons) separate elements in the @env{AWKPATH} variable. If @env{AWKPATH} is not set or is empty, then the default search path for MS-Windows and MS-DOS versions is -@code{@w{".;c:/lib/awk;c:/gnu/lib/awk"}}. +@samp{@w{.;c:/lib/awk;c:/gnu/lib/awk}}. @ifclear FOR_PRINT @cindex @command{gawk}, OS/2 version of @cindex @code{UNIXROOT} variable, on OS/2 systems The search path for OS/2 (32 bit, EMX) is determined by the prefix directory (most likely @file{/usr} or @file{c:/usr}) that has been specified as an option of -the @command{configure} script like it is the case for the Unix versions. +the @command{configure} script as is the case for the Unix versions. If @file{c:/usr} is the prefix directory then the default search path contains @file{.} and @file{c:/usr/share/awk}. Additionally, to support binary distributions of @command{gawk} for OS/2 @@ -35598,7 +35599,7 @@ systems whose drive @samp{c:} might not support long file names or might not exi at all, there is a special environment variable. If @env{UNIXROOT} specifies a drive then this specific drive is also searched for program files. E.g., if @env{UNIXROOT} is set to @file{e:} the complete default search path is -@code{@w{".;c:/usr/share/awk;e:/usr/share/awk"}}. +@samp{@w{.;c:/usr/share/awk;e:/usr/share/awk}}. An @command{sh}-like shell (as opposed to @command{command.com} under MS-DOS or @command{cmd.exe} under MS-Windows or OS/2) may be useful for @command{awk} programming. @@ -35622,8 +35623,8 @@ 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 @code{"\r\n"} to @code{"\n"} on input and @code{"\n"} -to @code{"\r\n"} on output. A special @code{BINMODE} variable @value{COMMONEXT} +translate 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: @itemize @value{BULLET} @@ -35664,7 +35665,7 @@ The name @code{BINMODE} was chosen to match @command{mawk} @command{mawk} adds a @samp{-W BINMODE=@var{N}} option and an environment variable that can set @code{BINMODE}, @code{RS}, and @code{ORS}. The files @file{binmode[1-3].awk} (under @file{gnu/lib/awk} in some of the -prepared distributions) have been chosen to match @command{mawk}'s @samp{-W +prepared binary distributions) have been chosen to match @command{mawk}'s @samp{-W BINMODE=@var{N}} option. These can be changed or discarded; in particular, the setting of @code{RS} giving the fewest ``surprises'' is open to debate. @command{mawk} uses @samp{RS = "\r\n"} if binary mode is set on read, which is @@ -35788,11 +35789,11 @@ or: $ @kbd{MMK/DESCRIPTION=[.vms]descrip.mms gawk} @end example -@code{MMK} is an open source, free, near-clone of @code{MMS} and -can better handle @code{ODS-5} volumes with upper- and lowercase filenames. -@code{MMK} is available from @uref{https://github.com/endlesssoftware/mmk}. +@command{MMK} is an open source, free, near-clone of @command{MMS} and +can better handle ODS-5 volumes with upper- and lowercase filenames. +@command{MMK} is available from @uref{https://github.com/endlesssoftware/mmk}. -With @code{ODS-5} volumes and extended parsing enabled, the case of the target +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 @@ -35801,8 +35802,8 @@ 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.''} -The @file{[.vms]gawk_build_steps.txt} provides information on how to build -@command{gawk} into a PCSI kit that is compatible with the GNV product. +@xref{VMS GNV}, for information on building +@command{gawk} as a PCSI kit that is compatible with the GNV product. @node VMS Dynamic Extensions @appendixsubsubsec Compiling @command{gawk} Dynamic Extensions on VMS @@ -36007,7 +36008,7 @@ 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 to supply individual PCSI packages for each component. -See @uref{https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/}. +See @w{@uref{https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/}.} The normal build procedure for @command{gawk} produces a program that is suitable for use with GNV. @@ -36108,12 +36109,14 @@ Once you have a precise problem, send email to @EMAIL{bug-gawk@@gnu.org,bug-gawk at gnu dot org}. @cindex Robbins, Arnold -Using this address automatically sends a copy of your -mail to me. If necessary, I can be reached directly at +The @command{gawk} maintainers subscribe to this address and +thus they will receive your bug report. +If necessary, the primary maintainer can be reached directly at @EMAIL{arnold@@skeeve.com,arnold at skeeve dot com}. The bug reporting address is preferred since the email list is archived at the GNU Project. -@emph{All email should be in English, since that is my native language.} +@emph{All email should be in English. This is the only language +understood in common by all the maintainers.} @cindex @code{comp.lang.awk} newsgroup @quotation CAUTION @@ -36160,13 +36163,13 @@ as follows: @cindex Rankin, Pat @cindex Malmberg, John @cindex Pitts, Dave -@multitable {MS-Windows with MINGW} {123456789012345678901234567890123456789001234567890} +@multitable {MS-Windows with MinGW} {123456789012345678901234567890123456789001234567890} @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. OS/2 not mentioned anywhere else -@c in the print version though. +@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 VMS @tab Pat Rankin, @EMAIL{r.pat.rankin@@gmail.com,r.pat.rankin at gmail.com}, and @@ -36324,10 +36327,10 @@ information, see the @uref{http://busybox.net, project's home page}. @cindex Solaris, POSIX-compliant @command{awk} @cindex source code, Solaris @command{awk} @item The OpenSolaris POSIX @command{awk} -The version of @command{awk} in @file{/usr/xpg4/bin} on Solaris is -more-or-less POSIX-compliant. It is based on the @command{awk} from -Mortice Kern Systems for PCs. -This author was able to make it compile and work under GNU/Linux +The versions of @command{awk} in @file{/usr/xpg4/bin} and +@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. +This author was 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 Automake) would take more work, and this has not been done, at least to our knowledge. @@ -36382,6 +36385,9 @@ under the GPL. It has a large number of extensions over standard See @uref{http://www.quiktrim.org/QTawk.html} for more information, including the manual and a download link. +The project may als be frozen; no new code changes have been made +since approximately 2008. + @item Other Versions See also the @uref{http://en.wikipedia.org/wiki/Awk_language#Versions_and_implementations, Wikipedia article}, for information on additional versions. @@ -36431,7 +36437,7 @@ is one more option available on the command line: @table @code @item -Y @itemx --parsedebug -Prints out the parse stack information as the program is being parsed. +Print out the parse stack information as the program is being parsed. @end table This option is intended only for serious @command{gawk} developers @@ -36456,7 +36462,7 @@ as well as any considerations you should bear in mind. * New Ports:: Porting @command{gawk} to a new operating system. * Derived Files:: Why derived files are kept in the - @command{git} repository. + Git repository. @end menu @node Accessing The Source @@ -36480,8 +36486,8 @@ git clone git://git.savannah.gnu.org/gawk.git @end example @noindent -This will clone the @command{gawk} repository. If you are behind a -firewall that will not allow you to use the Git native protocol, you +This clones the @command{gawk} repository. If you are behind a +firewall that does not allow you to use the Git native protocol, you can still access the repository using: @example @@ -36509,7 +36515,7 @@ that has a Git plug-in for working with Git repositories. 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} distribution, there are several steps that you need to take in order to -make it possible to include your changes: +make it possible to include them: @enumerate 1 @item @@ -36531,8 +36537,9 @@ or @EMAIL{assign@@gnu.org,assign at gnu dot org}. @item Get the latest version. It is much easier for me to integrate changes if they are relative to -the most recent distributed version of @command{gawk}. If your version of -@command{gawk} is very old, I may not be able to integrate them at all. +the most recent distributed version of @command{gawk}, or better yet, +relative to the latest code in the Git repository. If your version of +@command{gawk} is very old, I may not be able to integrate your changes at all. (@xref{Getting}, for information on getting the latest version of @command{gawk}.) @@ -36663,6 +36670,7 @@ not do so, particularly if there are lots of changes. Include an entry for the @file{ChangeLog} file with your submission. This helps further minimize the amount of work I have to do, making it easier for me to accept patches. +It is simplest if you just make this part of your diff. @end enumerate Although this sounds like a lot of work, please remember that while you @@ -36720,10 +36728,39 @@ A number of the files that come with @command{gawk} are maintained by other people. Thus, you should not change them unless it is for a very good reason; i.e., changes are not out of the question, but changes to these files are scrutinized extra carefully. -The files are @file{dfa.c}, @file{dfa.h}, @file{getopt1.c}, @file{getopt.c}, -@file{getopt.h}, @file{install-sh}, @file{mkinstalldirs}, @file{regcomp.c}, -@file{regex.c}, @file{regexec.c}, @file{regexex.c}, @file{regex.h}, -@file{regex_internal.c}, and @file{regex_internal.h}. +The files are +@file{dfa.c}, +@file{dfa.h}, +@file{getopt.c}, +@file{getopt.h}, +@file{getopt1.c}, +@file{getopt_int.h}, +@file{gettext.h}, +@file{regcomp.c}, +@file{regex.c}, +@file{regex.h}, +@file{regex_internal.c}, +@file{regex_internal.h}, +and +@file{regexec.c}. + +@item +A number of other files are provided by the GNU +Autotools (Autoconf, Automake, and GNU @command{gettext}). +You should not change them either, unless it is for a very +good reason. The files are +@file{ABOUT-NLS}, +@file{config.guess}, +@file{config.rpath}, +@file{config.sub}, +@file{depcomp}, +@file{INSTALL}, +@file{install-sh}, +@file{missing}, +@file{mkinstalldirs}, +@file{xalloc.h}, +and +@file{ylwrap}. @item Be willing to continue to maintain the port. @@ -36774,16 +36811,16 @@ In the code that you supply and maintain, feel free to use a coding style and brace layout that suits your taste. @node Derived Files -@appendixsubsec Why Generated Files Are Kept In @command{git} +@appendixsubsec Why Generated Files Are Kept In Git @c STARTOFRANGE gawkgit -@cindex @command{git}, use of for @command{gawk} source code +@cindex Git, use of for @command{gawk} source code @c From emails written March 22, 2012, to the gawk developers list. -If you look at the @command{gawk} source in the @command{git} +If you look at the @command{gawk} source in the Git repository, you will notice that it includes files that are automatically generated by GNU infrastructure tools, such as @file{Makefile.in} from -@command{automake} and even @file{configure} from @command{autoconf}. +Automake and even @file{configure} from Autoconf. This is different from many Free Software projects that do not store the derived files, because that keeps the repository less cluttered, @@ -36809,11 +36846,10 @@ there a guarantee that we could find that @command{bison} version? Or that @emph{it} would build?) If the repository has all the generated files, then it's easy to just check -them out and build. (Or @emph{easier}, depending upon how far back we go. -@code{:-)}) +them out and build. (Or @emph{easier}, depending upon how far back we go.) And that brings us to the second (and stronger) reason why all the files -really need to be in @command{git}. It boils down to who do you cater +really need to be in Git. It boils down to who do you cater to---the @command{gawk} developer(s), or the user who just wants to check out a version and try it out? @@ -36822,10 +36858,10 @@ wants it to be possible for any interested @command{awk} user in the world to just clone the repository, check out the branch of interest and build it. Without their having to have the correct version(s) of the autotools.@footnote{There is one GNU program that is (in our opinion) -severely difficult to bootstrap from the @command{git} repository. For -example, on the author's old (but still working) PowerPC macintosh with +severely difficult to bootstrap from the Git repository. For +example, on the author's old (but still working) PowerPC Macintosh with Mac OS X 10.5, it was necessary to bootstrap a ton of software, starting -with @command{git} itself, in order to try to work with the latest code. +with Git itself, in order to try to work with the latest code. It's not pleasant, and especially on older systems, it's a big waste of time. @@ -36848,14 +36884,14 @@ This is extremely important for the @code{master} and Further, the @command{gawk} maintainer would argue that it's also important for the @command{gawk} developers. When he tried to check out -the @code{xgawk} branch@footnote{A branch created by one of the other +the @code{xgawk} branch@footnote{A branch (since removed) created by one of the other developers that did not include the generated files.} to build it, he couldn't. (No @file{ltmain.sh} file, and he had no idea how to create it, and that was not the only problem.) He felt @emph{extremely} frustrated. With respect to that branch, the maintainer is no different than Jane User who wants to try to build -@code{gawk-4.0-stable} or @code{master} from the repository. +@code{gawk-4.1-stable} or @code{master} from the repository. Thus, the maintainer thinks that it's not just important, but critical, that for any given branch, the above incantation @emph{just works}. @@ -36875,14 +36911,14 @@ It's the maintainer's job to merge them and he will deal with it. @item He is really good at @samp{git diff x y > /tmp/diff1 ; gvim /tmp/diff1} to -remove the diffs that aren't of interest in order to review code. @code{:-)} +remove the diffs that aren't of interest in order to review code. @end enumerate @item It would certainly help if everyone used the same versions of the GNU tools as he does, which in general are the latest released versions of -@command{automake}, -@command{autoconf}, +Automake, +Autoconf, @command{bison}, and @command{gettext}. @@ -36894,10 +36930,10 @@ now it hasn't been a real issue since I'm the only one who's been dorking with the configuration machinery. @end ignore -@enumerate A -@item -Installing from source is quite easy. It's how the maintainer worked for years -under Fedora. +@c @enumerate A +@c @item +Installing from source is quite easy. It's how the maintainer worked for years, +and still works. He had @file{/usr/local/bin} at the front of his @env{PATH} and just did: @example @@ -36908,10 +36944,11 @@ cd @var{package}-@var{x}.@var{y}.@var{z} make install # as root @end example -@item +@c @item +@ignore These days the maintainer uses Ubuntu 12.04 which is medium current, but -he is already doing the above for @command{autoconf}, @command{automake} -and @command{bison}. +he is already doing the above for Automake, Autoconf, and @command{bison}. +@end ignore @ignore (C. Rant: Recent Linux versions with GNOME 3 really suck. What @@ -36919,7 +36956,7 @@ and @command{bison}. me to Ubuntu, but Ubuntu 11.04 and 11.10 are totally unusable from a UI perspective. Bleah.) @end ignore -@end enumerate +@c @end enumerate @ignore @item @@ -36935,7 +36972,7 @@ the "real" changes and the second with "everything else needed for Most of the above was originally written by the maintainer to other @command{gawk} developers. It raised the objection from one of the developers ``@dots{} that anybody pulling down the source from -@command{git} is not an end user.'' +Git is not an end user.'' However, this is not true. There are ``power @command{awk} users'' who can build @command{gawk} (using the magic incantation shown previously) @@ -36945,10 +36982,10 @@ kept buildable all the time. It was then suggested that there be a @command{cron} job to create nightly tarballs of ``the source.'' Here, the problem is that there are source trees, corresponding to the various branches! So, -nightly tar balls aren't the answer, especially as the repository can go +nightly tarballs aren't the answer, especially as the repository can go for weeks without significant change being introduced. -Fortunately, the @command{git} server can meet this need. For any given +Fortunately, the Git server can meet this need. For any given branch named @var{branchname}, use: @example @@ -37008,9 +37045,10 @@ Larry @author Larry Wall @end quotation -The @file{TODO} file in the @command{gawk} Git repository lists possible -future enhancements. Some of these relate to the source code, and others -to possible new features. Please see that file for the list. +The @file{TODO} file in the @code{master} branch of the @command{gawk} +Git repository lists possible future enhancements. Some of these relate +to the source code, and others to possible new features. Please see +that file for the list. @xref{Additions}, if you are interested in tackling any of the projects listed there. @@ -37082,8 +37120,8 @@ documentation in this @value{DOCUMENT}, but it was quite minimal. @item Being able to call into @command{gawk} from an extension required linker facilities that are common on Unix-derived systems but that did -not work on Windows systems; users wanting extensions on Windows -had to statically link them into @command{gawk}, even though Windows supports +not work on MS-Windows systems; users wanting extensions on MS-Windows +had to statically link them into @command{gawk}, even though MS-Windows supports dynamic loading of shared objects. @item @@ -37137,7 +37175,7 @@ in order to loop over all the element in an easy fashion for C code. @item The ability to create arrays (including @command{gawk}'s true -multidimensional arrays). +arrays of arrays). @end itemize @end itemize @@ -37158,8 +37196,8 @@ The API mechanism should not require access to @command{gawk}'s symbols@footnote{The @dfn{symbols} are the variables and functions defined inside @command{gawk}. Access to these symbols by code external to @command{gawk} loaded dynamically at runtime is -problematic on Windows.} by the compile-time or dynamic linker, -in order to enable creation of extensions that also work on Windows. +problematic on MS-Windows.} by the compile-time or dynamic linker, +in order to enable creation of extensions that also work on MS-Windows. @end itemize During development, it became clear that there were other features @@ -37506,14 +37544,14 @@ like this: @code{""}. Humans are used to working in decimal; i.e., base 10. In base 10, numbers go from 0 to 9, and then ``roll over'' into the next -column. (Remember grade school? 42 is 4 times 10 plus 2.) +column. (Remember grade school? 42 = 4 x 10 + 2.) There are other number bases though. Computers commonly use base 2 or @dfn{binary}, base 8 or @dfn{octal}, and base 16 or @dfn{hexadecimal}. In binary, each column represents two times the value in the column to its right. Each column may contain either a 0 or a 1. -Thus, binary 1010 represents 1 times 8, plus 0 times 4, plus 1 times 2, -plus 0 times 1, or decimal 10. +Thus, binary 1010 represents (1 x 8) + (0 x 4) + (1 x 2) ++ (0 x 1), or decimal 10. Octal and hexadecimal are discussed more in @ref{Nondecimal-numbers}. @@ -37550,7 +37588,7 @@ Where it makes sense, POSIX @command{awk} is compatible with 1999 ISO C. @item Action A series of @command{awk} statements attached to a rule. If the rule's pattern matches an input record, @command{awk} executes the -rule's action. Actions are always enclosed in curly braces. +rule's action. Actions are always enclosed in braces. (@xref{Action Overview}.) @cindex Spencer, Henry @@ -37655,7 +37693,7 @@ Named after the English mathematician Boole. See also ``Logical Expression.'' @item Bourne Shell The standard shell (@file{/bin/sh}) on Unix and Unix-like systems, -originally written by Steven R.@: Bourne. +originally written by Steven R.@: Bourne at Bell Laboratories. Many shells (Bash, @command{ksh}, @command{pdksh}, @command{zsh}) are generally upwardly compatible with the Bourne shell. @@ -37705,7 +37743,9 @@ Changing some of them affects @command{awk}'s running environment. (@xref{Built-in Variables}.) @item Braces -See ``Curly Braces.'' +The characters @samp{@{} and @samp{@}}. Braces are used in +@command{awk} for delimiting actions, compound statements, and function +bodies. @item C The system programming language that most GNU software is written in. The @@ -37730,7 +37770,7 @@ or place. The most common character set in use today is ASCII (American Standard Code for Information Interchange). Many European countries use an extension of ASCII known as ISO-8859-1 (ISO Latin-1). The @uref{http://www.unicode.org, Unicode character set} is -becoming increasingly popular and standard, and is particularly +increasingly popular and standard, and is particularly widely used on GNU/Linux systems. @cindex Kernighan, Brian @@ -37743,10 +37783,11 @@ 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}. +@cindex McIlroy, Doug @cindex cookie @item Cookie A peculiar goodie, token, saying or remembrance -produced by or presented to a program. (With thanks to Doug McIlroy.) +produced by or presented to a program. (With thanks to Professor Doug McIlroy.) @ignore From: Doug McIlroy Date: Sat, 13 Oct 2012 19:55:25 -0400 @@ -37824,9 +37865,7 @@ statements, and in patterns to select which input records to process. (@xref{Typing and Comparison}.) @item Curly Braces -The characters @samp{@{} and @samp{@}}. Curly braces are used in -@command{awk} for delimiting actions, compound statements, and function -bodies. +See ``Braces.'' @cindex dark corner @item Dark Corner @@ -37871,7 +37910,7 @@ ordinary expression. It could be a string constant, such as (@xref{Computed Regexps}.) @item Environment -A collection of strings, of the form @var{name}@code{=}@code{val}, that each +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}. @@ -37925,8 +37964,8 @@ this is just a number that can have a fractional part. See also ``Double Precision'' and ``Single Precision.'' @item Format -Format strings are used to control the appearance of output in the -@code{strftime()} and @code{sprintf()} functions, and are used in the +Format strings control the appearance of output in the +@code{strftime()} and @code{sprintf()} functions, and in the @code{printf} statement as well. Also, data conversions from numbers to strings are controlled by the format strings contained in the built-in variables @code{CONVFMT} and @code{OFMT}. (@xref{Control Letters}.) @@ -37995,7 +38034,7 @@ Base 16 notation, where the digits are @code{0}--@code{9} and @code{A}--@code{F}, with @samp{A} representing 10, @samp{B} representing 11, and so on, up to @samp{F} for 15. Hexadecimal numbers are written in C using a leading @samp{0x}, -to indicate their base. Thus, @code{0x12} is 18 (1 times 16 plus 2). +to indicate their base. Thus, @code{0x12} is 18 ((1 x 16) + 2). @xref{Nondecimal-numbers}. @item I/O @@ -38069,8 +38108,8 @@ meaning. Keywords are reserved and may not be used as variable names. @code{function}, @code{func}, @code{if}, -@code{nextfile}, @code{next}, +@code{nextfile}, @code{switch}, and @code{while}. @@ -38131,13 +38170,9 @@ Ancient @command{awk} implementations used single precision floating-point. @item Octal Base-eight notation, where the digits are @code{0}--@code{7}. Octal numbers are written in C using a leading @samp{0}, -to indicate their base. Thus, @code{013} is 11 (one times 8 plus 3). +to indicate their base. Thus, @code{013} is 11 ((1 x 8) + 3). @xref{Nondecimal-numbers}. -@cindex P1003.1 POSIX standard -@item P1003.1 -See ``POSIX.'' - @item Pattern Patterns tell @command{awk} which input records are interesting to which rules. @@ -38178,8 +38213,8 @@ specify single lines. (@xref{Pattern Overview}.) @item Recursion When a function calls itself, either directly or indirectly. -As long as this is not clear, refer to the entry for ``recursion.'' If this is clear, stop, and proceed to the next entry. +Otherwise, refer to the entry for ``recursion.'' @item Redirection Redirection means performing input from something other than the standard input @@ -38258,7 +38293,7 @@ expressions, and function calls have side effects. An internal representation of numbers that can have fractional parts. Single precision numbers keep track of fewer digits than do double precision numbers, but operations on them are sometimes less expensive in terms of CPU time. -This is the type used by some very old versions of @command{awk} to store +This is the type used by some ancient versions of @command{awk} to store numeric values. It is the C type @code{float}. @item Space @@ -38295,7 +38330,7 @@ into the local language. A value in the ``seconds since the epoch'' format used by Unix and POSIX systems. Used for the @command{gawk} functions @code{mktime()}, @code{strftime()}, and @code{systime()}. -See also ``Epoch'' and ``UTC.'' +See also ``Epoch,'' ``GMT,'' and ``UTC.'' @cindex Linux @cindex GNU/Linux -- cgit v1.2.3 From 4392e20625836b88b47272c935c990fd72ca4f4c Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 29 May 2014 21:29:16 +0300 Subject: Sync dfa.c with grep. --- ChangeLog | 4 ++++ dfa.c | 49 ++++++++++++++++++++++--------------------------- 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/ChangeLog b/ChangeLog index 51becff7..0b5df5e1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2014-05-29 Arnold D. Robbins + + * dfa.c: Sync with GNU grep. + 2014-05-26 Arnold D. Robbins * io.c (inetfile): Change return type to bool. Wrap code diff --git a/dfa.c b/dfa.c index 18f8faf1..d1046b31 100644 --- a/dfa.c +++ b/dfa.c @@ -1475,10 +1475,10 @@ lex (void) { if (syntax_bits & RE_INVALID_INTERVAL_ORD) goto normal_char; - dfaerror (_("Invalid content of \\{\\}")); + dfaerror (_("invalid content of \\{\\}")); } if (RE_DUP_MAX < maxrep) - dfaerror (_("Regular expression too big")); + dfaerror (_("regular expression too big")); lexptr = p; lexleft = lim - p; } @@ -2932,16 +2932,17 @@ build_state (state_num s, struct dfa *d) /* Set an upper limit on the number of transition tables that will ever exist at once. 1024 is arbitrary. The idea is that the frequently used transition tables will be quickly rebuilt, whereas the ones that - were only needed once or twice will be cleared away. */ + were only needed once or twice will be cleared away. However, do + not clear the initial state, as it's always used. */ if (d->trcount >= 1024) { - for (i = 0; i < d->tralloc; ++i) + for (i = 1; i < d->tralloc; ++i) { free (d->trans[i]); free (d->fails[i]); d->trans[i] = d->fails[i] = NULL; } - d->trcount = 0; + d->trcount = 1; } ++d->trcount; @@ -2978,22 +2979,6 @@ build_state (state_num s, struct dfa *d) d->trans[s] = trans; } -static void -build_state_zero (struct dfa *d) -{ - /* Initial size of the transition tables; must be positive. */ - int initial_tab_size = 1; - - d->tralloc = 0; - d->trcount = 0; - d->trans = NULL; - d->fails = NULL; - d->success = NULL; - d->newlines = NULL; - realloc_trans_if_necessary (d, initial_tab_size); - build_state (0, d); -} - /* Multibyte character handling sub-routines for dfaexec. */ /* Return values of transit_state_singlebyte, and @@ -3357,7 +3342,10 @@ dfaexec (struct dfa *d, char const *begin, char *end, size_t nlcount = 0; if (!d->tralloc) - build_state_zero (d); + { + realloc_trans_if_necessary (d, 1); + build_state (0, d); + } s = s1 = 0; p = mbp = (unsigned char const *) begin; @@ -3478,7 +3466,7 @@ dfaexec (struct dfa *d, char const *begin, char *end, /* If the previous character was a newline, count it, and skip checking of multibyte character boundary until here. */ - if (p[-1] == eol && (char *) p != begin) + if (p[-1] == eol) { nlcount++; mbp = p; @@ -4056,10 +4044,17 @@ dfamust (struct dfa *d) size_t j, ln, rn, n; /* Guaranteed to be. Unlikely, but ... */ - if (!STREQ (lmp->is, rmp->is)) - lmp->is[0] = '\0'; - lmp->begline &= rmp->begline; - lmp->endline &= rmp->endline; + if (STREQ (lmp->is, rmp->is)) + { + lmp->begline &= rmp->begline; + lmp->endline &= rmp->endline; + } + else + { + lmp->is[0] = '\0'; + lmp->begline = false; + lmp->endline = false; + } /* Left side--easy */ i = 0; while (lmp->left[i] != '\0' && lmp->left[i] == rmp->left[i]) -- cgit v1.2.3 From d029488bda4b1cdddc5a7c397375da080d476efa Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 29 May 2014 21:29:29 +0300 Subject: More cleanup edits in gawk doc. --- doc/ChangeLog | 5 + doc/gawk.info | 1078 ++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 118 ++---- doc/gawktexi.in | 118 ++---- 4 files changed, 612 insertions(+), 707 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index b91b9238..9d4809ae 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2014-05-29 Arnold D. Robbins + + * gawktexi.in: Remove some obsolete bits, fix up some other + minor stuff. + 2014-05-27 Arnold D. Robbins * gawktexi.in: Edits through the end! diff --git a/doc/gawk.info b/doc/gawk.info index ceeeb6f7..cb22b934 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -1165,13 +1165,13 @@ 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 Edition 4.0, the content has been thoroughly reviewed and updated. -All references to `gawk' versions prior to 4.0 have been removed. Of -significant note for this edition was *note Debugger::. +For FSF edition 4.0, the content has been thoroughly reviewed and +updated. All references to `gawk' versions prior to 4.0 have been +removed. Of significant note for this edition was *note Debugger::. - For edition 4.1, the content has been reorganized into parts, and -the major new additions are *note Arbitrary Precision Arithmetic::, and -*note Dynamic Extensions::. + 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. An electronic version comes with the `gawk' distribution from the FSF. If you find @@ -2797,7 +2797,9 @@ filename. `.' explicitly in the path or write a null entry in the path. (A null entry is indicated by starting or ending the path with a colon or by placing two colons next to each other [`::'].) This - path search mechanism is similar to the shell's. + path search mechanism is similar to the shell's. (See `The + Bourne-Again SHell manual'. + (http://www.gnu.org/software/bash/manual/)) However, `gawk' always looks in the current directory _before_ searching `AWKPATH', so there is no real reason to include the @@ -22232,6 +22234,7 @@ not return a value. `#define emalloc(pointer, type, size, message) ...' The arguments to this macro are as follows: + `pointer' The pointer variable to point at the allocated storage. @@ -22391,6 +22394,7 @@ function with `gawk' using the following function. `void awk_atexit(void (*funcp)(void *data, int exit_status),' ` void *arg0);' The parameters are: + `funcp' A pointer to the function to be called before `gawk' exits. The `data' parameter will be the original value of `arg0'. @@ -26092,6 +26096,9 @@ Info file, in approximate chronological order: - The improved array sorting features were driven by John together with Pat Rankin. + Panos Papadopoulos contributed the original text for *note Include + Files::. + * Efraim Yawitz contributed the original text for *note Debugger::. * The development of the extension API first released with `gawk' @@ -27756,11 +27763,11 @@ critical, that for any given branch, the above incantation _just works_. 2. It would certainly help if everyone used the same versions of the GNU tools as he does, which in general are the latest released - versions of Automake, Autoconf, `bison', and `gettext'. + versions of Automake, Autoconf, `bison', and GNU `gettext'. Installing from source is quite easy. It's how the maintainer - worked for years, and still works. He had `/usr/local/bin' at the - front of his `PATH' and just did: + worked for years (and still works). He had `/usr/local/bin' at + the front of his `PATH' and just did: wget http://ftp.gnu.org/gnu/PACKAGE/PACKAGE-X.Y.Z.tar.gz tar -xpzvf PACKAGE-X.Y.Z.tar.gz @@ -30853,7 +30860,7 @@ Index * Collado, Manuel: Acknowledgments. (line 60) * collating elements: Bracket Expressions. (line 69) * collating symbols: Bracket Expressions. (line 76) -* Colombo, Antonio <1>: Contributors. (line 135) +* Colombo, Antonio <1>: Contributors. (line 138) * Colombo, Antonio: Acknowledgments. (line 60) * columns, aligning: Print Examples. (line 70) * columns, cutting: Cut Program. (line 6) @@ -32301,6 +32308,7 @@ Index * output, standard: Special FD. (line 6) * p debugger command (alias for print): Viewing And Changing Data. (line 36) +* Papadopoulos, Panos: Contributors. (line 129) * parent process ID of gawk process: Auto-set. (line 181) * parentheses (), in a profile: Profiling. (line 146) * parentheses (), regexp operator: Regexp Operators. (line 80) @@ -32647,7 +32655,7 @@ Index * RLENGTH variable, match() function and: String Functions. (line 224) * Robbins, Arnold <1>: Future Extensions. (line 6) * Robbins, Arnold <2>: Bugs. (line 32) -* Robbins, Arnold <3>: Contributors. (line 139) +* Robbins, Arnold <3>: Contributors. (line 142) * Robbins, Arnold <4>: General Data Types. (line 6) * Robbins, Arnold <5>: Alarm Program. (line 6) * Robbins, Arnold <6>: Passwd Functions. (line 90) @@ -32693,7 +32701,7 @@ Index * 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 131) +* Schorr, Andrew <1>: Contributors. (line 134) * Schorr, Andrew <2>: Auto-set. (line 284) * Schorr, Andrew: Acknowledgments. (line 60) * Schreiber, Bert: Acknowledgments. (line 38) @@ -33180,7 +33188,7 @@ Index * xgettext utility: String Extraction. (line 13) * xor: Bitwise Functions. (line 55) * XOR bitwise operation: Bitwise Functions. (line 6) -* Yawitz, Efraim: Contributors. (line 129) +* Yawitz, Efraim: Contributors. (line 132) * Zaretskii, Eli <1>: Bugs. (line 71) * Zaretskii, Eli <2>: Contributors. (line 55) * Zaretskii, Eli: Acknowledgments. (line 60) @@ -33226,526 +33234,526 @@ Node: This Manual52572 Ref: This Manual-Footnote-158351 Node: Conventions58451 Node: Manual History60607 -Ref: Manual History-Footnote-164038 -Ref: Manual History-Footnote-264079 -Node: How To Contribute64153 -Node: Acknowledgments65392 -Node: Getting Started69541 -Node: Running gawk71914 -Node: One-shot73104 -Node: Read Terminal74329 -Ref: Read Terminal-Footnote-175979 -Ref: Read Terminal-Footnote-276255 -Node: Long76426 -Node: Executable Scripts77802 -Ref: Executable Scripts-Footnote-179635 -Ref: Executable Scripts-Footnote-279737 -Node: Comments80284 -Node: Quoting82751 -Node: DOS Quoting88067 -Node: Sample Data Files88742 -Node: Very Simple91257 -Node: Two Rules95895 -Node: More Complex97790 -Ref: More Complex-Footnote-1100722 -Node: Statements/Lines100807 -Ref: Statements/Lines-Footnote-1105262 -Node: Other Features105527 -Node: When106455 -Node: Invoking Gawk108603 -Node: Command Line110066 -Node: Options110857 -Ref: Options-Footnote-1126669 -Node: Other Arguments126694 -Node: Naming Standard Input129356 -Node: Environment Variables130450 -Node: AWKPATH Variable131008 -Ref: AWKPATH Variable-Footnote-1133786 -Ref: AWKPATH Variable-Footnote-2133831 -Node: AWKLIBPATH Variable134091 -Node: Other Environment Variables134850 -Node: Exit Status138505 -Node: Include Files139180 -Node: Loading Shared Libraries142758 -Node: Obsolete144141 -Node: Undocumented144838 -Node: Regexp145080 -Node: Regexp Usage146469 -Node: Escape Sequences148502 -Node: Regexp Operators154169 -Ref: Regexp Operators-Footnote-1161649 -Ref: Regexp Operators-Footnote-2161796 -Node: Bracket Expressions161894 -Ref: table-char-classes163784 -Node: GNU Regexp Operators166307 -Node: Case-sensitivity170030 -Ref: Case-sensitivity-Footnote-1172922 -Ref: Case-sensitivity-Footnote-2173157 -Node: Leftmost Longest173265 -Node: Computed Regexps174466 -Node: Reading Files177815 -Node: Records179817 -Node: awk split records180552 -Node: gawk split records185410 -Ref: gawk split records-Footnote-1189931 -Node: Fields189968 -Ref: Fields-Footnote-1192932 -Node: Nonconstant Fields193018 -Ref: Nonconstant Fields-Footnote-1195248 -Node: Changing Fields195450 -Node: Field Separators201404 -Node: Default Field Splitting204106 -Node: Regexp Field Splitting205223 -Node: Single Character Fields208564 -Node: Command Line Field Separator209623 -Node: Full Line Fields212965 -Ref: Full Line Fields-Footnote-1213473 -Node: Field Splitting Summary213519 -Ref: Field Splitting Summary-Footnote-1216618 -Node: Constant Size216719 -Node: Splitting By Content221326 -Ref: Splitting By Content-Footnote-1225076 -Node: Multiple Line225116 -Ref: Multiple Line-Footnote-1230972 -Node: Getline231151 -Node: Plain Getline233367 -Node: Getline/Variable235462 -Node: Getline/File236609 -Node: Getline/Variable/File237993 -Ref: Getline/Variable/File-Footnote-1239592 -Node: Getline/Pipe239679 -Node: Getline/Variable/Pipe242378 -Node: Getline/Coprocess243485 -Node: Getline/Variable/Coprocess244737 -Node: Getline Notes245474 -Node: Getline Summary248278 -Ref: table-getline-variants248686 -Node: Read Timeout249598 -Ref: Read Timeout-Footnote-1253425 -Node: Command line directories253483 -Node: Printing254365 -Node: Print255996 -Node: Print Examples257337 -Node: Output Separators260116 -Node: OFMT262132 -Node: Printf263490 -Node: Basic Printf264396 -Node: Control Letters265935 -Node: Format Modifiers269789 -Node: Printf Examples275816 -Node: Redirection278523 -Node: Special Files285495 -Node: Special FD286028 -Ref: Special FD-Footnote-1289652 -Node: Special Network289726 -Node: Special Caveats290576 -Node: Close Files And Pipes291372 -Ref: Close Files And Pipes-Footnote-1298510 -Ref: Close Files And Pipes-Footnote-2298658 -Node: Expressions298808 -Node: Values299940 -Node: Constants300616 -Node: Scalar Constants301296 -Ref: Scalar Constants-Footnote-1302155 -Node: Nondecimal-numbers302405 -Node: Regexp Constants305405 -Node: Using Constant Regexps305880 -Node: Variables308950 -Node: Using Variables309605 -Node: Assignment Options311329 -Node: Conversion313204 -Ref: table-locale-affects318640 -Ref: Conversion-Footnote-1319264 -Node: All Operators319373 -Node: Arithmetic Ops320003 -Node: Concatenation322508 -Ref: Concatenation-Footnote-1325304 -Node: Assignment Ops325424 -Ref: table-assign-ops330407 -Node: Increment Ops331724 -Node: Truth Values and Conditions335162 -Node: Truth Values336245 -Node: Typing and Comparison337294 -Node: Variable Typing338087 -Ref: Variable Typing-Footnote-1341987 -Node: Comparison Operators342109 -Ref: table-relational-ops342519 -Node: POSIX String Comparison346067 -Ref: POSIX String Comparison-Footnote-1347151 -Node: Boolean Ops347289 -Ref: Boolean Ops-Footnote-1351359 -Node: Conditional Exp351450 -Node: Function Calls353177 -Node: Precedence356935 -Node: Locales360604 -Node: Patterns and Actions362207 -Node: Pattern Overview363261 -Node: Regexp Patterns364938 -Node: Expression Patterns365481 -Node: Ranges369262 -Node: BEGIN/END372368 -Node: Using BEGIN/END373130 -Ref: Using BEGIN/END-Footnote-1375866 -Node: I/O And BEGIN/END375972 -Node: BEGINFILE/ENDFILE378257 -Node: Empty381188 -Node: Using Shell Variables381505 -Node: Action Overview383788 -Node: Statements386115 -Node: If Statement387963 -Node: While Statement389461 -Node: Do Statement391505 -Node: For Statement392661 -Node: Switch Statement395813 -Node: Break Statement397916 -Node: Continue Statement399971 -Node: Next Statement401764 -Node: Nextfile Statement404154 -Node: Exit Statement406809 -Node: Built-in Variables409213 -Node: User-modified410309 -Ref: User-modified-Footnote-1417994 -Node: Auto-set418056 -Ref: Auto-set-Footnote-1430621 -Ref: Auto-set-Footnote-2430826 -Node: ARGC and ARGV430882 -Node: Arrays434736 -Node: Array Basics436234 -Node: Array Intro437060 -Ref: figure-array-elements439033 -Node: Reference to Elements441440 -Node: Assigning Elements443713 -Node: Array Example444204 -Node: Scanning an Array445936 -Node: Controlling Scanning448951 -Ref: Controlling Scanning-Footnote-1454124 -Node: Delete454440 -Ref: Delete-Footnote-1457205 -Node: Numeric Array Subscripts457262 -Node: Uninitialized Subscripts459445 -Node: Multidimensional461070 -Node: Multiscanning464163 -Node: Arrays of Arrays465752 -Node: Functions470392 -Node: Built-in471211 -Node: Calling Built-in472289 -Node: Numeric Functions474277 -Ref: Numeric Functions-Footnote-1478111 -Ref: Numeric Functions-Footnote-2478468 -Ref: Numeric Functions-Footnote-3478516 -Node: String Functions478785 -Ref: String Functions-Footnote-1501796 -Ref: String Functions-Footnote-2501925 -Ref: String Functions-Footnote-3502173 -Node: Gory Details502260 -Ref: table-sub-escapes503929 -Ref: table-sub-posix-92505283 -Ref: table-sub-proposed506634 -Ref: table-posix-sub507988 -Ref: table-gensub-escapes509533 -Ref: Gory Details-Footnote-1510709 -Ref: Gory Details-Footnote-2510760 -Node: I/O Functions510911 -Ref: I/O Functions-Footnote-1518034 -Node: Time Functions518181 -Ref: Time Functions-Footnote-1528645 -Ref: Time Functions-Footnote-2528713 -Ref: Time Functions-Footnote-3528871 -Ref: Time Functions-Footnote-4528982 -Ref: Time Functions-Footnote-5529094 -Ref: Time Functions-Footnote-6529321 -Node: Bitwise Functions529587 -Ref: table-bitwise-ops530149 -Ref: Bitwise Functions-Footnote-1534394 -Node: Type Functions534578 -Node: I18N Functions535720 -Node: User-defined537365 -Node: Definition Syntax538169 -Ref: Definition Syntax-Footnote-1543094 -Node: Function Example543163 -Ref: Function Example-Footnote-1545807 -Node: Function Caveats545829 -Node: Calling A Function546347 -Node: Variable Scope547302 -Node: Pass By Value/Reference550290 -Node: Return Statement553798 -Node: Dynamic Typing556782 -Node: Indirect Calls557711 -Node: Library Functions567398 -Ref: Library Functions-Footnote-1570911 -Ref: Library Functions-Footnote-2571054 -Node: Library Names571225 -Ref: Library Names-Footnote-1574698 -Ref: Library Names-Footnote-2574918 -Node: General Functions575004 -Node: Strtonum Function576032 -Node: Assert Function578962 -Node: Round Function582288 -Node: Cliff Random Function583829 -Node: Ordinal Functions584845 -Ref: Ordinal Functions-Footnote-1587922 -Ref: Ordinal Functions-Footnote-2588174 -Node: Join Function588385 -Ref: Join Function-Footnote-1590156 -Node: Getlocaltime Function590356 -Node: Readfile Function594092 -Node: Data File Management595931 -Node: Filetrans Function596563 -Node: Rewind Function600632 -Node: File Checking602019 -Ref: File Checking-Footnote-1603151 -Node: Empty Files603352 -Node: Ignoring Assigns605582 -Node: Getopt Function607136 -Ref: Getopt Function-Footnote-1618439 -Node: Passwd Functions618642 -Ref: Passwd Functions-Footnote-1627621 -Node: Group Functions627709 -Ref: Group Functions-Footnote-1635651 -Node: Walking Arrays635864 -Node: Sample Programs638000 -Node: Running Examples638674 -Node: Clones639402 -Node: Cut Program640626 -Node: Egrep Program650479 -Ref: Egrep Program-Footnote-1658450 -Node: Id Program658560 -Node: Split Program662224 -Ref: Split Program-Footnote-1665762 -Node: Tee Program665890 -Node: Uniq Program668697 -Node: Wc Program676127 -Ref: Wc Program-Footnote-1680395 -Ref: Wc Program-Footnote-2680595 -Node: Miscellaneous Programs680687 -Node: Dupword Program681875 -Node: Alarm Program683906 -Node: Translate Program688713 -Ref: Translate Program-Footnote-1693104 -Ref: Translate Program-Footnote-2693374 -Node: Labels Program693508 -Ref: Labels Program-Footnote-1696879 -Node: Word Sorting696963 -Node: History Sorting701006 -Node: Extract Program702842 -Ref: Extract Program-Footnote-1710372 -Node: Simple Sed710501 -Node: Igawk Program713563 -Ref: Igawk Program-Footnote-1728738 -Ref: Igawk Program-Footnote-2728939 -Node: Anagram Program729077 -Node: Signature Program732145 -Node: Advanced Features733392 -Node: Nondecimal Data735278 -Node: Array Sorting736855 -Node: Controlling Array Traversal737552 -Node: Array Sorting Functions745832 -Ref: Array Sorting Functions-Footnote-1749739 -Node: Two-way I/O749933 -Ref: Two-way I/O-Footnote-1755449 -Node: TCP/IP Networking755531 -Node: Profiling758375 -Node: Internationalization765883 -Node: I18N and L10N767308 -Node: Explaining gettext767994 -Ref: Explaining gettext-Footnote-1773134 -Ref: Explaining gettext-Footnote-2773318 -Node: Programmer i18n773483 -Node: Translator i18n777708 -Node: String Extraction778502 -Ref: String Extraction-Footnote-1779463 -Node: Printf Ordering779549 -Ref: Printf Ordering-Footnote-1782331 -Node: I18N Portability782395 -Ref: I18N Portability-Footnote-1784844 -Node: I18N Example784907 -Ref: I18N Example-Footnote-1787629 -Node: Gawk I18N787701 -Node: Debugger788322 -Node: Debugging789293 -Node: Debugging Concepts789734 -Node: Debugging Terms791590 -Node: Awk Debugging794187 -Node: Sample Debugging Session795079 -Node: Debugger Invocation795599 -Node: Finding The Bug796932 -Node: List of Debugger Commands803414 -Node: Breakpoint Control804746 -Node: Debugger Execution Control808410 -Node: Viewing And Changing Data811770 -Node: Execution Stack815128 -Node: Debugger Info816641 -Node: Miscellaneous Debugger Commands820635 -Node: Readline Support825819 -Node: Limitations826711 -Node: Arbitrary Precision Arithmetic828959 -Ref: Arbitrary Precision Arithmetic-Footnote-1830608 -Node: General Arithmetic830756 -Node: Floating Point Issues832476 -Node: String Conversion Precision833357 -Ref: String Conversion Precision-Footnote-1835062 -Node: Unexpected Results835171 -Node: POSIX Floating Point Problems837324 -Ref: POSIX Floating Point Problems-Footnote-1841145 -Node: Integer Programming841183 -Node: Floating-point Programming842994 -Ref: Floating-point Programming-Footnote-1849322 -Ref: Floating-point Programming-Footnote-2849592 -Node: Floating-point Representation849856 -Node: Floating-point Context851021 -Ref: table-ieee-formats851860 -Node: Rounding Mode853244 -Ref: table-rounding-modes853723 -Ref: Rounding Mode-Footnote-1856738 -Node: Gawk and MPFR856917 -Node: Arbitrary Precision Floats858326 -Ref: Arbitrary Precision Floats-Footnote-1860769 -Node: Setting Precision861090 -Ref: table-predefined-precision-strings861774 -Node: Setting Rounding Mode863919 -Ref: table-gawk-rounding-modes864323 -Node: Floating-point Constants865510 -Node: Changing Precision866962 -Ref: Changing Precision-Footnote-1868354 -Node: Exact Arithmetic868528 -Node: Arbitrary Precision Integers871662 -Ref: Arbitrary Precision Integers-Footnote-1874677 -Node: Dynamic Extensions874824 -Node: Extension Intro876282 -Node: Plugin License877547 -Node: Extension Mechanism Outline878232 -Ref: figure-load-extension878656 -Ref: figure-load-new-function880141 -Ref: figure-call-new-function881143 -Node: Extension API Description883127 -Node: Extension API Functions Introduction884577 -Node: General Data Types889443 -Ref: General Data Types-Footnote-1895136 -Node: Requesting Values895435 -Ref: table-value-types-returned896172 -Node: Memory Allocation Functions897130 -Ref: Memory Allocation Functions-Footnote-1899876 -Node: Constructor Functions899972 -Node: Registration Functions901730 -Node: Extension Functions902415 -Node: Exit Callback Functions904717 -Node: Extension Version String905966 -Node: Input Parsers906616 -Node: Output Wrappers916419 -Node: Two-way processors920935 -Node: Printing Messages923138 -Ref: Printing Messages-Footnote-1924215 -Node: Updating `ERRNO'924367 -Node: Accessing Parameters925106 -Node: Symbol Table Access926336 -Node: Symbol table by name926850 -Node: Symbol table by cookie928826 -Ref: Symbol table by cookie-Footnote-1932959 -Node: Cached values933022 -Ref: Cached values-Footnote-1936527 -Node: Array Manipulation936618 -Ref: Array Manipulation-Footnote-1937716 -Node: Array Data Types937755 -Ref: Array Data Types-Footnote-1940458 -Node: Array Functions940550 -Node: Flattening Arrays944424 -Node: Creating Arrays951276 -Node: Extension API Variables956007 -Node: Extension Versioning956643 -Node: Extension API Informational Variables958544 -Node: Extension API Boilerplate959630 -Node: Finding Extensions963434 -Node: Extension Example963994 -Node: Internal File Description964724 -Node: Internal File Ops968815 -Ref: Internal File Ops-Footnote-1980361 -Node: Using Internal File Ops980501 -Ref: Using Internal File Ops-Footnote-1982848 -Node: Extension Samples983116 -Node: Extension Sample File Functions984640 -Node: Extension Sample Fnmatch992207 -Node: Extension Sample Fork993686 -Node: Extension Sample Inplace994899 -Node: Extension Sample Ord996677 -Node: Extension Sample Readdir997513 -Ref: table-readdir-file-types998368 -Node: Extension Sample Revout999167 -Node: Extension Sample Rev2way999758 -Node: Extension Sample Read write array1000499 -Node: Extension Sample Readfile1002378 -Node: Extension Sample API Tests1003478 -Node: Extension Sample Time1004003 -Node: gawkextlib1005318 -Node: Language History1008105 -Node: V7/SVR3.11009699 -Node: SVR41012019 -Node: POSIX1013461 -Node: BTL1014847 -Node: POSIX/GNU1015581 -Node: Feature History1021180 -Node: Common Extensions1034292 -Node: Ranges and Locales1035604 -Ref: Ranges and Locales-Footnote-11040221 -Ref: Ranges and Locales-Footnote-21040248 -Ref: Ranges and Locales-Footnote-31040482 -Node: Contributors1040703 -Node: Installation1046054 -Node: Gawk Distribution1046948 -Node: Getting1047432 -Node: Extracting1048258 -Node: Distribution contents1049900 -Node: Unix Installation1055617 -Node: Quick Installation1056234 -Node: Additional Configuration Options1058676 -Node: Configuration Philosophy1060414 -Node: Non-Unix Installation1062765 -Node: PC Installation1063223 -Node: PC Binary Installation1064534 -Node: PC Compiling1066382 -Ref: PC Compiling-Footnote-11069381 -Node: PC Testing1069486 -Node: PC Using1070662 -Node: Cygwin1074820 -Node: MSYS1075629 -Node: VMS Installation1076143 -Node: VMS Compilation1076939 -Ref: VMS Compilation-Footnote-11078160 -Node: VMS Dynamic Extensions1078218 -Node: VMS Installation Details1079591 -Node: VMS Running1081842 -Node: VMS GNV1084676 -Node: VMS Old Gawk1085399 -Node: Bugs1085869 -Node: Other Versions1089873 -Node: Notes1096098 -Node: Compatibility Mode1096898 -Node: Additions1097680 -Node: Accessing The Source1098605 -Node: Adding Code1100041 -Node: New Ports1106219 -Node: Derived Files1110700 -Ref: Derived Files-Footnote-11115776 -Ref: Derived Files-Footnote-21115810 -Ref: Derived Files-Footnote-31116406 -Node: Future Extensions1116520 -Node: Implementation Limitations1117126 -Node: Extension Design1118374 -Node: Old Extension Problems1119528 -Ref: Old Extension Problems-Footnote-11121045 -Node: Extension New Mechanism Goals1121102 -Ref: Extension New Mechanism Goals-Footnote-11124463 -Node: Extension Other Design Decisions1124652 -Node: Extension Future Growth1126758 -Node: Old Extension Mechanism1127594 -Node: Basic Concepts1129334 -Node: Basic High Level1130015 -Ref: figure-general-flow1130287 -Ref: figure-process-flow1130886 -Ref: Basic High Level-Footnote-11134115 -Node: Basic Data Typing1134300 -Node: Glossary1137627 -Node: Copying1162779 -Node: GNU Free Documentation License1200335 -Node: Index1225471 +Ref: Manual History-Footnote-164046 +Ref: Manual History-Footnote-264087 +Node: How To Contribute64161 +Node: Acknowledgments65400 +Node: Getting Started69549 +Node: Running gawk71922 +Node: One-shot73112 +Node: Read Terminal74337 +Ref: Read Terminal-Footnote-175987 +Ref: Read Terminal-Footnote-276263 +Node: Long76434 +Node: Executable Scripts77810 +Ref: Executable Scripts-Footnote-179643 +Ref: Executable Scripts-Footnote-279745 +Node: Comments80292 +Node: Quoting82759 +Node: DOS Quoting88075 +Node: Sample Data Files88750 +Node: Very Simple91265 +Node: Two Rules95903 +Node: More Complex97798 +Ref: More Complex-Footnote-1100730 +Node: Statements/Lines100815 +Ref: Statements/Lines-Footnote-1105270 +Node: Other Features105535 +Node: When106463 +Node: Invoking Gawk108611 +Node: Command Line110074 +Node: Options110865 +Ref: Options-Footnote-1126677 +Node: Other Arguments126702 +Node: Naming Standard Input129364 +Node: Environment Variables130458 +Node: AWKPATH Variable131016 +Ref: AWKPATH Variable-Footnote-1133887 +Ref: AWKPATH Variable-Footnote-2133932 +Node: AWKLIBPATH Variable134192 +Node: Other Environment Variables134951 +Node: Exit Status138606 +Node: Include Files139281 +Node: Loading Shared Libraries142859 +Node: Obsolete144242 +Node: Undocumented144939 +Node: Regexp145181 +Node: Regexp Usage146570 +Node: Escape Sequences148603 +Node: Regexp Operators154270 +Ref: Regexp Operators-Footnote-1161750 +Ref: Regexp Operators-Footnote-2161897 +Node: Bracket Expressions161995 +Ref: table-char-classes163885 +Node: GNU Regexp Operators166408 +Node: Case-sensitivity170131 +Ref: Case-sensitivity-Footnote-1173023 +Ref: Case-sensitivity-Footnote-2173258 +Node: Leftmost Longest173366 +Node: Computed Regexps174567 +Node: Reading Files177916 +Node: Records179918 +Node: awk split records180653 +Node: gawk split records185511 +Ref: gawk split records-Footnote-1190032 +Node: Fields190069 +Ref: Fields-Footnote-1193033 +Node: Nonconstant Fields193119 +Ref: Nonconstant Fields-Footnote-1195349 +Node: Changing Fields195551 +Node: Field Separators201505 +Node: Default Field Splitting204207 +Node: Regexp Field Splitting205324 +Node: Single Character Fields208665 +Node: Command Line Field Separator209724 +Node: Full Line Fields213066 +Ref: Full Line Fields-Footnote-1213574 +Node: Field Splitting Summary213620 +Ref: Field Splitting Summary-Footnote-1216719 +Node: Constant Size216820 +Node: Splitting By Content221427 +Ref: Splitting By Content-Footnote-1225177 +Node: Multiple Line225217 +Ref: Multiple Line-Footnote-1231073 +Node: Getline231252 +Node: Plain Getline233468 +Node: Getline/Variable235563 +Node: Getline/File236710 +Node: Getline/Variable/File238094 +Ref: Getline/Variable/File-Footnote-1239693 +Node: Getline/Pipe239780 +Node: Getline/Variable/Pipe242479 +Node: Getline/Coprocess243586 +Node: Getline/Variable/Coprocess244838 +Node: Getline Notes245575 +Node: Getline Summary248379 +Ref: table-getline-variants248787 +Node: Read Timeout249699 +Ref: Read Timeout-Footnote-1253526 +Node: Command line directories253584 +Node: Printing254466 +Node: Print256097 +Node: Print Examples257438 +Node: Output Separators260217 +Node: OFMT262233 +Node: Printf263591 +Node: Basic Printf264497 +Node: Control Letters266036 +Node: Format Modifiers269890 +Node: Printf Examples275917 +Node: Redirection278624 +Node: Special Files285596 +Node: Special FD286129 +Ref: Special FD-Footnote-1289753 +Node: Special Network289827 +Node: Special Caveats290677 +Node: Close Files And Pipes291473 +Ref: Close Files And Pipes-Footnote-1298611 +Ref: Close Files And Pipes-Footnote-2298759 +Node: Expressions298909 +Node: Values300041 +Node: Constants300717 +Node: Scalar Constants301397 +Ref: Scalar Constants-Footnote-1302256 +Node: Nondecimal-numbers302506 +Node: Regexp Constants305506 +Node: Using Constant Regexps305981 +Node: Variables309051 +Node: Using Variables309706 +Node: Assignment Options311430 +Node: Conversion313305 +Ref: table-locale-affects318741 +Ref: Conversion-Footnote-1319365 +Node: All Operators319474 +Node: Arithmetic Ops320104 +Node: Concatenation322609 +Ref: Concatenation-Footnote-1325405 +Node: Assignment Ops325525 +Ref: table-assign-ops330508 +Node: Increment Ops331825 +Node: Truth Values and Conditions335263 +Node: Truth Values336346 +Node: Typing and Comparison337395 +Node: Variable Typing338188 +Ref: Variable Typing-Footnote-1342088 +Node: Comparison Operators342210 +Ref: table-relational-ops342620 +Node: POSIX String Comparison346168 +Ref: POSIX String Comparison-Footnote-1347252 +Node: Boolean Ops347390 +Ref: Boolean Ops-Footnote-1351460 +Node: Conditional Exp351551 +Node: Function Calls353278 +Node: Precedence357036 +Node: Locales360705 +Node: Patterns and Actions362308 +Node: Pattern Overview363362 +Node: Regexp Patterns365039 +Node: Expression Patterns365582 +Node: Ranges369363 +Node: BEGIN/END372469 +Node: Using BEGIN/END373231 +Ref: Using BEGIN/END-Footnote-1375967 +Node: I/O And BEGIN/END376073 +Node: BEGINFILE/ENDFILE378358 +Node: Empty381289 +Node: Using Shell Variables381606 +Node: Action Overview383889 +Node: Statements386216 +Node: If Statement388064 +Node: While Statement389562 +Node: Do Statement391606 +Node: For Statement392762 +Node: Switch Statement395914 +Node: Break Statement398017 +Node: Continue Statement400072 +Node: Next Statement401865 +Node: Nextfile Statement404255 +Node: Exit Statement406910 +Node: Built-in Variables409314 +Node: User-modified410410 +Ref: User-modified-Footnote-1418095 +Node: Auto-set418157 +Ref: Auto-set-Footnote-1430722 +Ref: Auto-set-Footnote-2430927 +Node: ARGC and ARGV430983 +Node: Arrays434837 +Node: Array Basics436335 +Node: Array Intro437161 +Ref: figure-array-elements439134 +Node: Reference to Elements441541 +Node: Assigning Elements443814 +Node: Array Example444305 +Node: Scanning an Array446037 +Node: Controlling Scanning449052 +Ref: Controlling Scanning-Footnote-1454225 +Node: Delete454541 +Ref: Delete-Footnote-1457306 +Node: Numeric Array Subscripts457363 +Node: Uninitialized Subscripts459546 +Node: Multidimensional461171 +Node: Multiscanning464264 +Node: Arrays of Arrays465853 +Node: Functions470493 +Node: Built-in471312 +Node: Calling Built-in472390 +Node: Numeric Functions474378 +Ref: Numeric Functions-Footnote-1478212 +Ref: Numeric Functions-Footnote-2478569 +Ref: Numeric Functions-Footnote-3478617 +Node: String Functions478886 +Ref: String Functions-Footnote-1501897 +Ref: String Functions-Footnote-2502026 +Ref: String Functions-Footnote-3502274 +Node: Gory Details502361 +Ref: table-sub-escapes504030 +Ref: table-sub-posix-92505384 +Ref: table-sub-proposed506735 +Ref: table-posix-sub508089 +Ref: table-gensub-escapes509634 +Ref: Gory Details-Footnote-1510810 +Ref: Gory Details-Footnote-2510861 +Node: I/O Functions511012 +Ref: I/O Functions-Footnote-1518135 +Node: Time Functions518282 +Ref: Time Functions-Footnote-1528746 +Ref: Time Functions-Footnote-2528814 +Ref: Time Functions-Footnote-3528972 +Ref: Time Functions-Footnote-4529083 +Ref: Time Functions-Footnote-5529195 +Ref: Time Functions-Footnote-6529422 +Node: Bitwise Functions529688 +Ref: table-bitwise-ops530250 +Ref: Bitwise Functions-Footnote-1534495 +Node: Type Functions534679 +Node: I18N Functions535821 +Node: User-defined537466 +Node: Definition Syntax538270 +Ref: Definition Syntax-Footnote-1543195 +Node: Function Example543264 +Ref: Function Example-Footnote-1545908 +Node: Function Caveats545930 +Node: Calling A Function546448 +Node: Variable Scope547403 +Node: Pass By Value/Reference550391 +Node: Return Statement553899 +Node: Dynamic Typing556883 +Node: Indirect Calls557812 +Node: Library Functions567499 +Ref: Library Functions-Footnote-1571012 +Ref: Library Functions-Footnote-2571155 +Node: Library Names571326 +Ref: Library Names-Footnote-1574799 +Ref: Library Names-Footnote-2575019 +Node: General Functions575105 +Node: Strtonum Function576133 +Node: Assert Function579063 +Node: Round Function582389 +Node: Cliff Random Function583930 +Node: Ordinal Functions584946 +Ref: Ordinal Functions-Footnote-1588023 +Ref: Ordinal Functions-Footnote-2588275 +Node: Join Function588486 +Ref: Join Function-Footnote-1590257 +Node: Getlocaltime Function590457 +Node: Readfile Function594193 +Node: Data File Management596032 +Node: Filetrans Function596664 +Node: Rewind Function600733 +Node: File Checking602120 +Ref: File Checking-Footnote-1603252 +Node: Empty Files603453 +Node: Ignoring Assigns605683 +Node: Getopt Function607237 +Ref: Getopt Function-Footnote-1618540 +Node: Passwd Functions618743 +Ref: Passwd Functions-Footnote-1627722 +Node: Group Functions627810 +Ref: Group Functions-Footnote-1635752 +Node: Walking Arrays635965 +Node: Sample Programs638101 +Node: Running Examples638775 +Node: Clones639503 +Node: Cut Program640727 +Node: Egrep Program650580 +Ref: Egrep Program-Footnote-1658551 +Node: Id Program658661 +Node: Split Program662325 +Ref: Split Program-Footnote-1665863 +Node: Tee Program665991 +Node: Uniq Program668798 +Node: Wc Program676228 +Ref: Wc Program-Footnote-1680496 +Ref: Wc Program-Footnote-2680696 +Node: Miscellaneous Programs680788 +Node: Dupword Program681976 +Node: Alarm Program684007 +Node: Translate Program688814 +Ref: Translate Program-Footnote-1693205 +Ref: Translate Program-Footnote-2693475 +Node: Labels Program693609 +Ref: Labels Program-Footnote-1696980 +Node: Word Sorting697064 +Node: History Sorting701107 +Node: Extract Program702943 +Ref: Extract Program-Footnote-1710473 +Node: Simple Sed710602 +Node: Igawk Program713664 +Ref: Igawk Program-Footnote-1728839 +Ref: Igawk Program-Footnote-2729040 +Node: Anagram Program729178 +Node: Signature Program732246 +Node: Advanced Features733493 +Node: Nondecimal Data735379 +Node: Array Sorting736956 +Node: Controlling Array Traversal737653 +Node: Array Sorting Functions745933 +Ref: Array Sorting Functions-Footnote-1749840 +Node: Two-way I/O750034 +Ref: Two-way I/O-Footnote-1755550 +Node: TCP/IP Networking755632 +Node: Profiling758476 +Node: Internationalization765984 +Node: I18N and L10N767409 +Node: Explaining gettext768095 +Ref: Explaining gettext-Footnote-1773235 +Ref: Explaining gettext-Footnote-2773419 +Node: Programmer i18n773584 +Node: Translator i18n777809 +Node: String Extraction778603 +Ref: String Extraction-Footnote-1779564 +Node: Printf Ordering779650 +Ref: Printf Ordering-Footnote-1782432 +Node: I18N Portability782496 +Ref: I18N Portability-Footnote-1784945 +Node: I18N Example785008 +Ref: I18N Example-Footnote-1787730 +Node: Gawk I18N787802 +Node: Debugger788423 +Node: Debugging789394 +Node: Debugging Concepts789835 +Node: Debugging Terms791691 +Node: Awk Debugging794288 +Node: Sample Debugging Session795180 +Node: Debugger Invocation795700 +Node: Finding The Bug797033 +Node: List of Debugger Commands803515 +Node: Breakpoint Control804847 +Node: Debugger Execution Control808511 +Node: Viewing And Changing Data811871 +Node: Execution Stack815229 +Node: Debugger Info816742 +Node: Miscellaneous Debugger Commands820736 +Node: Readline Support825920 +Node: Limitations826812 +Node: Arbitrary Precision Arithmetic829060 +Ref: Arbitrary Precision Arithmetic-Footnote-1830709 +Node: General Arithmetic830857 +Node: Floating Point Issues832577 +Node: String Conversion Precision833458 +Ref: String Conversion Precision-Footnote-1835163 +Node: Unexpected Results835272 +Node: POSIX Floating Point Problems837425 +Ref: POSIX Floating Point Problems-Footnote-1841246 +Node: Integer Programming841284 +Node: Floating-point Programming843095 +Ref: Floating-point Programming-Footnote-1849423 +Ref: Floating-point Programming-Footnote-2849693 +Node: Floating-point Representation849957 +Node: Floating-point Context851122 +Ref: table-ieee-formats851961 +Node: Rounding Mode853345 +Ref: table-rounding-modes853824 +Ref: Rounding Mode-Footnote-1856839 +Node: Gawk and MPFR857018 +Node: Arbitrary Precision Floats858427 +Ref: Arbitrary Precision Floats-Footnote-1860870 +Node: Setting Precision861191 +Ref: table-predefined-precision-strings861875 +Node: Setting Rounding Mode864020 +Ref: table-gawk-rounding-modes864424 +Node: Floating-point Constants865611 +Node: Changing Precision867063 +Ref: Changing Precision-Footnote-1868455 +Node: Exact Arithmetic868629 +Node: Arbitrary Precision Integers871763 +Ref: Arbitrary Precision Integers-Footnote-1874778 +Node: Dynamic Extensions874925 +Node: Extension Intro876383 +Node: Plugin License877648 +Node: Extension Mechanism Outline878333 +Ref: figure-load-extension878757 +Ref: figure-load-new-function880242 +Ref: figure-call-new-function881244 +Node: Extension API Description883228 +Node: Extension API Functions Introduction884678 +Node: General Data Types889544 +Ref: General Data Types-Footnote-1895237 +Node: Requesting Values895536 +Ref: table-value-types-returned896273 +Node: Memory Allocation Functions897231 +Ref: Memory Allocation Functions-Footnote-1899978 +Node: Constructor Functions900074 +Node: Registration Functions901832 +Node: Extension Functions902517 +Node: Exit Callback Functions904819 +Node: Extension Version String906069 +Node: Input Parsers906719 +Node: Output Wrappers916522 +Node: Two-way processors921038 +Node: Printing Messages923241 +Ref: Printing Messages-Footnote-1924318 +Node: Updating `ERRNO'924470 +Node: Accessing Parameters925209 +Node: Symbol Table Access926439 +Node: Symbol table by name926953 +Node: Symbol table by cookie928929 +Ref: Symbol table by cookie-Footnote-1933062 +Node: Cached values933125 +Ref: Cached values-Footnote-1936630 +Node: Array Manipulation936721 +Ref: Array Manipulation-Footnote-1937819 +Node: Array Data Types937858 +Ref: Array Data Types-Footnote-1940561 +Node: Array Functions940653 +Node: Flattening Arrays944527 +Node: Creating Arrays951379 +Node: Extension API Variables956110 +Node: Extension Versioning956746 +Node: Extension API Informational Variables958647 +Node: Extension API Boilerplate959733 +Node: Finding Extensions963537 +Node: Extension Example964097 +Node: Internal File Description964827 +Node: Internal File Ops968918 +Ref: Internal File Ops-Footnote-1980464 +Node: Using Internal File Ops980604 +Ref: Using Internal File Ops-Footnote-1982951 +Node: Extension Samples983219 +Node: Extension Sample File Functions984743 +Node: Extension Sample Fnmatch992310 +Node: Extension Sample Fork993789 +Node: Extension Sample Inplace995002 +Node: Extension Sample Ord996780 +Node: Extension Sample Readdir997616 +Ref: table-readdir-file-types998471 +Node: Extension Sample Revout999270 +Node: Extension Sample Rev2way999861 +Node: Extension Sample Read write array1000602 +Node: Extension Sample Readfile1002481 +Node: Extension Sample API Tests1003581 +Node: Extension Sample Time1004106 +Node: gawkextlib1005421 +Node: Language History1008208 +Node: V7/SVR3.11009802 +Node: SVR41012122 +Node: POSIX1013564 +Node: BTL1014950 +Node: POSIX/GNU1015684 +Node: Feature History1021283 +Node: Common Extensions1034395 +Node: Ranges and Locales1035707 +Ref: Ranges and Locales-Footnote-11040324 +Ref: Ranges and Locales-Footnote-21040351 +Ref: Ranges and Locales-Footnote-31040585 +Node: Contributors1040806 +Node: Installation1046244 +Node: Gawk Distribution1047138 +Node: Getting1047622 +Node: Extracting1048448 +Node: Distribution contents1050090 +Node: Unix Installation1055807 +Node: Quick Installation1056424 +Node: Additional Configuration Options1058866 +Node: Configuration Philosophy1060604 +Node: Non-Unix Installation1062955 +Node: PC Installation1063413 +Node: PC Binary Installation1064724 +Node: PC Compiling1066572 +Ref: PC Compiling-Footnote-11069571 +Node: PC Testing1069676 +Node: PC Using1070852 +Node: Cygwin1075010 +Node: MSYS1075819 +Node: VMS Installation1076333 +Node: VMS Compilation1077129 +Ref: VMS Compilation-Footnote-11078350 +Node: VMS Dynamic Extensions1078408 +Node: VMS Installation Details1079781 +Node: VMS Running1082032 +Node: VMS GNV1084866 +Node: VMS Old Gawk1085589 +Node: Bugs1086059 +Node: Other Versions1090063 +Node: Notes1096288 +Node: Compatibility Mode1097088 +Node: Additions1097870 +Node: Accessing The Source1098795 +Node: Adding Code1100231 +Node: New Ports1106409 +Node: Derived Files1110890 +Ref: Derived Files-Footnote-11115971 +Ref: Derived Files-Footnote-21116005 +Ref: Derived Files-Footnote-31116601 +Node: Future Extensions1116715 +Node: Implementation Limitations1117321 +Node: Extension Design1118569 +Node: Old Extension Problems1119723 +Ref: Old Extension Problems-Footnote-11121240 +Node: Extension New Mechanism Goals1121297 +Ref: Extension New Mechanism Goals-Footnote-11124658 +Node: Extension Other Design Decisions1124847 +Node: Extension Future Growth1126953 +Node: Old Extension Mechanism1127789 +Node: Basic Concepts1129529 +Node: Basic High Level1130210 +Ref: figure-general-flow1130482 +Ref: figure-process-flow1131081 +Ref: Basic High Level-Footnote-11134310 +Node: Basic Data Typing1134495 +Node: Glossary1137822 +Node: Copying1162974 +Node: GNU Free Documentation License1200530 +Node: Index1225666  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 416bfd8a..4d63bae9 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -241,6 +241,10 @@ quirk of the language / makeinfo, and isn't going to change. @copying @docbook + +“To boldly go where no man has gone before” is a +Registered Trademark of Paramount Pictures Corporation. + Published by: Free Software Foundation @@ -1799,49 +1803,6 @@ License in @ref{GNU Free Documentation License}.) @end ifclear @end ifnotinfo -@ignore -@cindex Close, Diane -The @value{DOCUMENT} itself has gone through several previous, -preliminary editions. -Paul Rubin wrote the very first draft of @cite{The GAWK Manual}; -it was around 40 pages in size. -Diane Close and Richard Stallman improved it, yielding the -version which I started working with in the fall of 1988. -It was around 90 pages long and barely described the original, ``old'' -version of @command{awk}. After substantial revision, the first version of -the @cite{The GAWK Manual} to be released was Edition 0.11 Beta in -October of 1989. The manual then underwent more substantial revision -for Edition 0.13 of December 1991. -David Trueman, Pat Rankin and Michal Jaegermann contributed sections -of the manual for Edition 0.13. -That edition was published by the -FSF as a bound book early in 1992. Since then there were several -minor revisions, notably Edition 0.14 of November 1992 that was published -by the FSF in January of 1993 and Edition 0.16 of August 1993. - -Edition 1.0 of @cite{GAWK: The GNU Awk User's Guide} represented a significant re-working -of @cite{The GAWK Manual}, with much additional material. -The FSF and I agreed that I was now the primary author. -@c I also felt that the manual needed a more descriptive title. - -In January 1996, SSC published Edition 1.0 under the title @cite{Effective AWK Programming}. -In February 1997, they published Edition 1.0.3 which had minor changes -as a ``second edition.'' -In 1999, the FSF published this same version as Edition 2 -of @cite{GAWK: The GNU Awk User's Guide}. - -Edition @value{EDITION} maintains the basic structure of Edition 1.0, -but with significant additional material, reflecting the host of new features -in @command{gawk} version @value{VERSION}. -Of particular note is -@ref{Array Sorting}, -@ref{Bitwise Functions}, -@ref{Internationalization}, -@ref{Advanced Features}, -and -@ref{Dynamic Extensions}. -@end ignore - @cindex Close, Diane The @value{DOCUMENT} itself has gone through a number of previous editions. Paul Rubin wrote the very first draft of @cite{The GAWK Manual}; @@ -1860,16 +1821,24 @@ the title @cite{The GNU Awk User's Guide}. @ifset FOR_PRINT SSC published two editions of the @value{DOCUMENT} under the title @cite{Effective awk Programming}, and in O'Reilly published -the edition in 2001. +the third edition in 2001. @end ifset This edition maintains the basic structure of the previous editions. -For Edition 4.0, the content has been thoroughly reviewed +For FSF edition 4.0, the content has been thoroughly reviewed and updated. All references to @command{gawk} versions prior to 4.0 have been removed. Of significant note for this edition was @ref{Debugger}. -For edition @value{EDITION}, the content has been reorganized into parts, +For FSF edition +@ifclear FOR_PRINT +@value{EDITION}, +@end ifclear +@ifset FOR_PRINT +@value{EDITION} +(the fourth edition as published by O'Reilly), +@end ifset +the content has been reorganized into parts, and the major new additions are @ref{Arbitrary Precision Arithmetic}, and @ref{Dynamic Extensions}. @@ -4178,7 +4147,8 @@ path. (A null entry is indicated by starting or ending the path with a colon or by placing two colons next to each other [@samp{::}].) This path search mechanism is similar to the shell's. -@c someday, @cite{The Bourne Again Shell}.... +(See @uref{http://www.gnu.org/software/bash/manual/, +@cite{The Bourne-Again SHell manual}.}) However, @command{gawk} always looks in the current directory @emph{before} searching @env{AWKPATH}, so there is no real reason to include @@ -4491,6 +4461,8 @@ that can be loaded with either @code{@@load} or the @option{-l} option. @node Obsolete @section Obsolete Options and/or Features +@c update this section for each release! + @cindex options, deprecated @cindex features, deprecated @cindex obsolete features @@ -4499,8 +4471,6 @@ previous releases of @command{gawk} that are either not available in the current version or that are still supported but deprecated (meaning that they will @emph{not} be in the next release). -@c update this section for each release! - The process-related special files @file{/dev/pid}, @file{/dev/ppid}, @file{/dev/pgrpid}, and @file{/dev/user} were deprecated in @command{gawk} 3.1, but still worked. As of version 4.0, they are no longer @@ -5518,9 +5488,6 @@ GNU operators, but this was deemed too confusing. The current method of using @samp{\y} for the GNU @samp{\b} appears to be the lesser of two evils. -@c NOTE!!! Keep this in sync with the same table in the summary appendix! -@c -@c Should really do this with file inclusion. @cindex regular expressions, @command{gawk}, command-line options @cindex @command{gawk}, command-line options, and regular expressions The various command-line options @@ -6978,7 +6945,6 @@ program on the file @file{mail-list}. The following command prints a list of the names of the people that work at or attend a university, and the first three digits of their phone numbers: -@c tweaked to make the tex output look better in @smallbook @example $ @kbd{awk -F- -f edu.awk mail-list} @print{} Fabius 555 @@ -8777,16 +8743,6 @@ the first character of the string. @cindex dark corner, format-control characters @cindex @command{gawk}, format-control characters @quotation NOTE -@ignore -The @samp{%c} format does @emph{not} handle values outside the range -0--255. On most systems, values from 0--127 are within the range of -ASCII and will yield an ASCII character. Values in the range 128--255 -may format as characters in some extended character set, or they may not. -System 390 (IBM architecture mainframe) systems use 8-bit characters, -and thus values from 0--255 yield the corresponding EBCDIC character. -Any value above 255 is treated as modulo 255; i.e., the lowest eight bits -of the value are used. The locale and character set are always ignored. -@end ignore The POSIX standard says the first character of a string is printed. In locales with multibyte characters, @command{gawk} attempts to convert the leading bytes of the string into a valid wide character @@ -8909,7 +8865,7 @@ which they may appear: @table @code @cindex differences in @command{awk} and @command{gawk}, @code{print}/@code{printf} statements @cindex @code{printf} statement, positional specifiers -@c the command does NOT start a secondary +@c the code{} does NOT start a secondary @cindex positional specifiers, @code{printf} statement @item @var{N}$ An integer constant followed by a @samp{$} is a @dfn{positional specifier}. @@ -10669,7 +10625,7 @@ One possibly undesirable effect of this definition of remainder is that In other @command{awk} implementations, the signedness of the remainder may be machine-dependent. -@c !!! what does posix say? +@c FIXME !!! what does posix say? @cindex portability, @code{**} operator and @cindex @code{*} (asterisk), @code{**} operator @@ -19594,7 +19550,6 @@ that their statement is correct, this @value{CHAPTER} and @ref{Sample Programs}, provide a good-sized body of code for you to read, and we hope, to learn from. -@c 2e: USE TEXINFO-2 FUNCTION DEFINITION STUFF!!!!!!!!!!!!! This @value{CHAPTER} presents a library of useful @command{awk} functions. Many of the sample programs presented later in this @value{DOCUMENT} use these functions. @@ -21003,7 +20958,6 @@ application might want to print its own error message.) @item optopt The letter representing the command-line option. -@c While not usually documented, most versions supply this variable. @end table The following C fragment shows how @code{getopt()} might process command-line @@ -21054,7 +21008,6 @@ necessary for accessing individual characters function was written before @command{gawk} acquired the ability to split strings into single characters using @code{""} as the separator. We have left it alone, since using @code{substr()} is more portable.} -@c FIXME: could use split(str, a, "") to do it more easily. The discussion that follows walks through the code a bit at a time: @@ -21339,8 +21292,6 @@ no more entries, it returns @code{NULL}, the null pointer. When this happens, the C program should call @code{endpwent()} to close the database. Following is @command{pwcat}, a C program that ``cats'' the password database: -@c Use old style function header for portability to old systems (SunOS, HP/UX). - @example @c file eg/lib/pwcat.c /* @@ -24734,7 +24685,6 @@ Finally, the function @code{@w{unexpected_eof()}} prints an appropriate error message and then exits. The @code{END} rule handles the final cleanup, closing the open file: -@c function lb put on same line for page breaking. sigh @example @c file eg/prog/extract.awk @group @@ -26656,7 +26606,6 @@ the body of an @code{if}, @code{else}, or loop is only a single statement. @item Parentheses are used only where needed, as indicated by the structure of the program and the precedence rules. -@c extra verbiage here satisfies the copyeditor. ugh. For example, @samp{(3 + 5) * 4} means add three plus five, then multiply the total by four. However, @samp{3 + 5 * 4} has no parentheses, and means @samp{3 + (5 * 4)}. @@ -27264,7 +27213,6 @@ present a special problem for translation. Consider the following:@footnote{This example is borrowed from the GNU @command{gettext} manual.} -@c line broken here only for smallbook format @example printf(_"String `%s' has %d characters\n", string, length(string))) @@ -28964,8 +28912,6 @@ exactly. @command{awk} uses @dfn{double precision} floating-point numbers, which can hold more digits than @dfn{single precision} floating-point numbers. -@c Floating-point issues are discussed more fully in -@c @ref{Floating Point Issues}. There a several important issues to be aware of, described next. @@ -30905,6 +30851,7 @@ procedure calls that do not return a value. @table @code @item #define emalloc(pointer, type, size, message) @dots{} The arguments to this macro are as follows: + @c nested table @table @code @item pointer @@ -31066,6 +31013,7 @@ a function with @command{gawk} using the following function. @item void awk_atexit(void (*funcp)(void *data, int exit_status), @itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ void *arg0); The parameters are: + @c nested table @table @code @item funcp @@ -32848,7 +32796,6 @@ Those are followed by the necessary variable declarations to make use of the API macros and boilerplate code (@pxref{Extension API Boilerplate}). -@c break line for page breaking @example #ifdef HAVE_CONFIG_H #include @@ -32935,7 +32882,6 @@ 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: -@c break line for page breaking @example /* format_mode --- turn a stat mode field into something readable */ @@ -34350,7 +34296,7 @@ The @code{fflush()} built-in function for flushing buffered output @ignore @item The @code{SYMTAB} array, that allows access to @command{awk}'s internal symbol -table. This feature is not documented, largely because +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. @end ignore @@ -35659,6 +35605,9 @@ The improved array sorting features were driven by John together with Pat Rankin. @end itemize +@cindex Papadopoulos, Panos +Panos Papadopoulos contributed the original text for @ref{Include Files}. + @item @cindex Yawitz, Efraim Efraim Yawitz contributed the original text for @ref{Debugger}. @@ -37777,19 +37726,19 @@ Automake, Autoconf, @command{bison}, and -@command{gettext}. +GNU @command{gettext}. @ignore -If it would help if I sent out an "I just upgraded to version x.y -of tool Z" kind of message to this list, I can do that. Up until +If it would help if I sent out an ``I just upgraded to version x.y +of tool Z'' kind of message to this list, I can do that. Up until now it hasn't been a real issue since I'm the only one who's been dorking with the configuration machinery. @end ignore @c @enumerate A @c @item -Installing from source is quite easy. It's how the maintainer worked for years, -and still works. +Installing from source is quite easy. It's how the maintainer worked for years +(and still works). He had @file{/usr/local/bin} at the front of his @env{PATH} and just did: @example @@ -40459,9 +40408,6 @@ recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. -@c Local Variables: -@c ispell-local-pdict: "ispell-dict" -@c End: @end ifclear @ifnotdocbook diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 45e807a2..69abf674 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -236,6 +236,10 @@ quirk of the language / makeinfo, and isn't going to change. @copying @docbook + +“To boldly go where no man has gone before” is a +Registered Trademark of Paramount Pictures Corporation. + Published by: Free Software Foundation @@ -1766,49 +1770,6 @@ License in @ref{GNU Free Documentation License}.) @end ifclear @end ifnotinfo -@ignore -@cindex Close, Diane -The @value{DOCUMENT} itself has gone through several previous, -preliminary editions. -Paul Rubin wrote the very first draft of @cite{The GAWK Manual}; -it was around 40 pages in size. -Diane Close and Richard Stallman improved it, yielding the -version which I started working with in the fall of 1988. -It was around 90 pages long and barely described the original, ``old'' -version of @command{awk}. After substantial revision, the first version of -the @cite{The GAWK Manual} to be released was Edition 0.11 Beta in -October of 1989. The manual then underwent more substantial revision -for Edition 0.13 of December 1991. -David Trueman, Pat Rankin and Michal Jaegermann contributed sections -of the manual for Edition 0.13. -That edition was published by the -FSF as a bound book early in 1992. Since then there were several -minor revisions, notably Edition 0.14 of November 1992 that was published -by the FSF in January of 1993 and Edition 0.16 of August 1993. - -Edition 1.0 of @cite{GAWK: The GNU Awk User's Guide} represented a significant re-working -of @cite{The GAWK Manual}, with much additional material. -The FSF and I agreed that I was now the primary author. -@c I also felt that the manual needed a more descriptive title. - -In January 1996, SSC published Edition 1.0 under the title @cite{Effective AWK Programming}. -In February 1997, they published Edition 1.0.3 which had minor changes -as a ``second edition.'' -In 1999, the FSF published this same version as Edition 2 -of @cite{GAWK: The GNU Awk User's Guide}. - -Edition @value{EDITION} maintains the basic structure of Edition 1.0, -but with significant additional material, reflecting the host of new features -in @command{gawk} version @value{VERSION}. -Of particular note is -@ref{Array Sorting}, -@ref{Bitwise Functions}, -@ref{Internationalization}, -@ref{Advanced Features}, -and -@ref{Dynamic Extensions}. -@end ignore - @cindex Close, Diane The @value{DOCUMENT} itself has gone through a number of previous editions. Paul Rubin wrote the very first draft of @cite{The GAWK Manual}; @@ -1827,16 +1788,24 @@ the title @cite{The GNU Awk User's Guide}. @ifset FOR_PRINT SSC published two editions of the @value{DOCUMENT} under the title @cite{Effective awk Programming}, and in O'Reilly published -the edition in 2001. +the third edition in 2001. @end ifset This edition maintains the basic structure of the previous editions. -For Edition 4.0, the content has been thoroughly reviewed +For FSF edition 4.0, the content has been thoroughly reviewed and updated. All references to @command{gawk} versions prior to 4.0 have been removed. Of significant note for this edition was @ref{Debugger}. -For edition @value{EDITION}, the content has been reorganized into parts, +For FSF edition +@ifclear FOR_PRINT +@value{EDITION}, +@end ifclear +@ifset FOR_PRINT +@value{EDITION} +(the fourth edition as published by O'Reilly), +@end ifset +the content has been reorganized into parts, and the major new additions are @ref{Arbitrary Precision Arithmetic}, and @ref{Dynamic Extensions}. @@ -4106,7 +4075,8 @@ path. (A null entry is indicated by starting or ending the path with a colon or by placing two colons next to each other [@samp{::}].) This path search mechanism is similar to the shell's. -@c someday, @cite{The Bourne Again Shell}.... +(See @uref{http://www.gnu.org/software/bash/manual/, +@cite{The Bourne-Again SHell manual}.}) However, @command{gawk} always looks in the current directory @emph{before} searching @env{AWKPATH}, so there is no real reason to include @@ -4419,6 +4389,8 @@ that can be loaded with either @code{@@load} or the @option{-l} option. @node Obsolete @section Obsolete Options and/or Features +@c update this section for each release! + @cindex options, deprecated @cindex features, deprecated @cindex obsolete features @@ -4427,8 +4399,6 @@ previous releases of @command{gawk} that are either not available in the current version or that are still supported but deprecated (meaning that they will @emph{not} be in the next release). -@c update this section for each release! - The process-related special files @file{/dev/pid}, @file{/dev/ppid}, @file{/dev/pgrpid}, and @file{/dev/user} were deprecated in @command{gawk} 3.1, but still worked. As of version 4.0, they are no longer @@ -5363,9 +5333,6 @@ GNU operators, but this was deemed too confusing. The current method of using @samp{\y} for the GNU @samp{\b} appears to be the lesser of two evils. -@c NOTE!!! Keep this in sync with the same table in the summary appendix! -@c -@c Should really do this with file inclusion. @cindex regular expressions, @command{gawk}, command-line options @cindex @command{gawk}, command-line options, and regular expressions The various command-line options @@ -6692,7 +6659,6 @@ program on the file @file{mail-list}. The following command prints a list of the names of the people that work at or attend a university, and the first three digits of their phone numbers: -@c tweaked to make the tex output look better in @smallbook @example $ @kbd{awk -F- -f edu.awk mail-list} @print{} Fabius 555 @@ -8396,16 +8362,6 @@ the first character of the string. @cindex dark corner, format-control characters @cindex @command{gawk}, format-control characters @quotation NOTE -@ignore -The @samp{%c} format does @emph{not} handle values outside the range -0--255. On most systems, values from 0--127 are within the range of -ASCII and will yield an ASCII character. Values in the range 128--255 -may format as characters in some extended character set, or they may not. -System 390 (IBM architecture mainframe) systems use 8-bit characters, -and thus values from 0--255 yield the corresponding EBCDIC character. -Any value above 255 is treated as modulo 255; i.e., the lowest eight bits -of the value are used. The locale and character set are always ignored. -@end ignore The POSIX standard says the first character of a string is printed. In locales with multibyte characters, @command{gawk} attempts to convert the leading bytes of the string into a valid wide character @@ -8528,7 +8484,7 @@ which they may appear: @table @code @cindex differences in @command{awk} and @command{gawk}, @code{print}/@code{printf} statements @cindex @code{printf} statement, positional specifiers -@c the command does NOT start a secondary +@c the code{} does NOT start a secondary @cindex positional specifiers, @code{printf} statement @item @var{N}$ An integer constant followed by a @samp{$} is a @dfn{positional specifier}. @@ -10159,7 +10115,7 @@ One possibly undesirable effect of this definition of remainder is that In other @command{awk} implementations, the signedness of the remainder may be machine-dependent. -@c !!! what does posix say? +@c FIXME !!! what does posix say? @cindex portability, @code{**} operator and @cindex @code{*} (asterisk), @code{**} operator @@ -18767,7 +18723,6 @@ that their statement is correct, this @value{CHAPTER} and @ref{Sample Programs}, provide a good-sized body of code for you to read, and we hope, to learn from. -@c 2e: USE TEXINFO-2 FUNCTION DEFINITION STUFF!!!!!!!!!!!!! This @value{CHAPTER} presents a library of useful @command{awk} functions. Many of the sample programs presented later in this @value{DOCUMENT} use these functions. @@ -20147,7 +20102,6 @@ application might want to print its own error message.) @item optopt The letter representing the command-line option. -@c While not usually documented, most versions supply this variable. @end table The following C fragment shows how @code{getopt()} might process command-line @@ -20198,7 +20152,6 @@ necessary for accessing individual characters function was written before @command{gawk} acquired the ability to split strings into single characters using @code{""} as the separator. We have left it alone, since using @code{substr()} is more portable.} -@c FIXME: could use split(str, a, "") to do it more easily. The discussion that follows walks through the code a bit at a time: @@ -20483,8 +20436,6 @@ no more entries, it returns @code{NULL}, the null pointer. When this happens, the C program should call @code{endpwent()} to close the database. Following is @command{pwcat}, a C program that ``cats'' the password database: -@c Use old style function header for portability to old systems (SunOS, HP/UX). - @example @c file eg/lib/pwcat.c /* @@ -23878,7 +23829,6 @@ Finally, the function @code{@w{unexpected_eof()}} prints an appropriate error message and then exits. The @code{END} rule handles the final cleanup, closing the open file: -@c function lb put on same line for page breaking. sigh @example @c file eg/prog/extract.awk @group @@ -25800,7 +25750,6 @@ the body of an @code{if}, @code{else}, or loop is only a single statement. @item Parentheses are used only where needed, as indicated by the structure of the program and the precedence rules. -@c extra verbiage here satisfies the copyeditor. ugh. For example, @samp{(3 + 5) * 4} means add three plus five, then multiply the total by four. However, @samp{3 + 5 * 4} has no parentheses, and means @samp{3 + (5 * 4)}. @@ -26408,7 +26357,6 @@ present a special problem for translation. Consider the following:@footnote{This example is borrowed from the GNU @command{gettext} manual.} -@c line broken here only for smallbook format @example printf(_"String `%s' has %d characters\n", string, length(string))) @@ -28108,8 +28056,6 @@ exactly. @command{awk} uses @dfn{double precision} floating-point numbers, which can hold more digits than @dfn{single precision} floating-point numbers. -@c Floating-point issues are discussed more fully in -@c @ref{Floating Point Issues}. There a several important issues to be aware of, described next. @@ -30049,6 +29995,7 @@ procedure calls that do not return a value. @table @code @item #define emalloc(pointer, type, size, message) @dots{} The arguments to this macro are as follows: + @c nested table @table @code @item pointer @@ -30210,6 +30157,7 @@ a function with @command{gawk} using the following function. @item void awk_atexit(void (*funcp)(void *data, int exit_status), @itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ void *arg0); The parameters are: + @c nested table @table @code @item funcp @@ -31992,7 +31940,6 @@ Those are followed by the necessary variable declarations to make use of the API macros and boilerplate code (@pxref{Extension API Boilerplate}). -@c break line for page breaking @example #ifdef HAVE_CONFIG_H #include @@ -32079,7 +32026,6 @@ 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: -@c break line for page breaking @example /* format_mode --- turn a stat mode field into something readable */ @@ -33494,7 +33440,7 @@ The @code{fflush()} built-in function for flushing buffered output @ignore @item The @code{SYMTAB} array, that allows access to @command{awk}'s internal symbol -table. This feature is not documented, largely because +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. @end ignore @@ -34803,6 +34749,9 @@ The improved array sorting features were driven by John together with Pat Rankin. @end itemize +@cindex Papadopoulos, Panos +Panos Papadopoulos contributed the original text for @ref{Include Files}. + @item @cindex Yawitz, Efraim Efraim Yawitz contributed the original text for @ref{Debugger}. @@ -36921,19 +36870,19 @@ Automake, Autoconf, @command{bison}, and -@command{gettext}. +GNU @command{gettext}. @ignore -If it would help if I sent out an "I just upgraded to version x.y -of tool Z" kind of message to this list, I can do that. Up until +If it would help if I sent out an ``I just upgraded to version x.y +of tool Z'' kind of message to this list, I can do that. Up until now it hasn't been a real issue since I'm the only one who's been dorking with the configuration machinery. @end ignore @c @enumerate A @c @item -Installing from source is quite easy. It's how the maintainer worked for years, -and still works. +Installing from source is quite easy. It's how the maintainer worked for years +(and still works). He had @file{/usr/local/bin} at the front of his @env{PATH} and just did: @example @@ -39603,9 +39552,6 @@ recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. -@c Local Variables: -@c ispell-local-pdict: "ispell-dict" -@c End: @end ifclear @ifnotdocbook -- cgit v1.2.3 From d1093f2c3c24ccabfc2c093a6a7c8205a30cb3c7 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 30 May 2014 09:55:13 +0300 Subject: New tests for regex match against NUL byte. --- test/ChangeLog | 5 +++ test/Makefile.am | 6 ++- test/Makefile.in | 16 +++++++- test/Maketests | 10 +++++ test/regnul1.awk | 84 +++++++++++++++++++++++++++++++++++++++++ test/regnul1.ok | 8 ++++ test/regnul2.awk | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ test/regnul2.ok | 27 ++++++++++++++ 8 files changed, 266 insertions(+), 2 deletions(-) create mode 100644 test/regnul1.awk create mode 100644 test/regnul1.ok create mode 100644 test/regnul2.awk create mode 100644 test/regnul2.ok diff --git a/test/ChangeLog b/test/ChangeLog index 4af051f0..ae144a27 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2014-05-30 Arnold D. Robbins + + * Makefile.am (regnul1, regnul2): New tests. + * regnul1.awk, regnul1.ok, regnul1.awk, regnul2.ok: New files. + 2014-05-22 Andrew J. Schorr * lintwarn.ok: Updated. diff --git a/test/Makefile.am b/test/Makefile.am index c53e0d01..5675c1d6 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -729,6 +729,10 @@ EXTRA_DIST = \ regexprange.ok \ reginttrad.awk \ reginttrad.ok \ + regnul1.awk \ + regnul1.ok \ + regnul2.awk \ + regnul2.ok \ regrange.awk \ regrange.ok \ regtest.sh \ @@ -1004,7 +1008,7 @@ GAWK_EXT_TESTS = \ nastyparm next nondec nondec2 \ patsplit posix printfbad1 printfbad2 printfbad3 procinfs \ profile1 profile2 profile3 profile4 profile5 pty1 \ - rebuf regx8bit reginttrad reint reint2 rsgetline rsglstdin rsstart1 \ + 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 \ diff --git a/test/Makefile.in b/test/Makefile.in index f00efc63..a7e1f193 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -975,6 +975,10 @@ EXTRA_DIST = \ regexprange.ok \ reginttrad.awk \ reginttrad.ok \ + regnul1.awk \ + regnul1.ok \ + regnul2.awk \ + regnul2.ok \ regrange.awk \ regrange.ok \ regtest.sh \ @@ -1249,7 +1253,7 @@ GAWK_EXT_TESTS = \ nastyparm next nondec nondec2 \ patsplit posix printfbad1 printfbad2 printfbad3 procinfs \ profile1 profile2 profile3 profile4 profile5 pty1 \ - rebuf regx8bit reginttrad reint reint2 rsgetline rsglstdin rsstart1 \ + 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 \ @@ -3512,6 +3516,16 @@ pty1: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +regnul1: + @echo $@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + +regnul2: + @echo $@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + regx8bit: @echo $@ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/Maketests b/test/Maketests index e847d765..0841ae77 100644 --- a/test/Maketests +++ b/test/Maketests @@ -1152,6 +1152,16 @@ pty1: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +regnul1: + @echo $@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + +regnul2: + @echo $@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + regx8bit: @echo $@ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/regnul1.awk b/test/regnul1.awk new file mode 100644 index 00000000..2a35d176 --- /dev/null +++ b/test/regnul1.awk @@ -0,0 +1,84 @@ +# From denis@gissoft.eu Thu May 29 09:07:56 IDT 2014 +# Article: 8400 of comp.lang.awk +# X-Received: by 10.236.81.99 with SMTP id l63mr3912466yhe.3.1401224812642; +# Tue, 27 May 2014 14:06:52 -0700 (PDT) +# X-Received: by 10.140.37.148 with SMTP id r20mr578874qgr.0.1401224812310; Tue, +# 27 May 2014 14:06:52 -0700 (PDT) +# Path: eternal-september.org!news.eternal-september.org!feeder.eternal-september.org!v102.xanadu-bbs.net!xanadu-bbs.net!news.glorb.com!hl10no6493021igb.0!news-out.google.com!gi6ni15574igc.0!nntp.google.com!hl10no6493018igb.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail +# Newsgroups: comp.lang.awk +# Date: Tue, 27 May 2014 14:06:52 -0700 (PDT) +# Complaints-To: groups-abuse@google.com +# Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=85.253.50.165; +# posting-account=zNhVLgoAAACsg-WfVe_or2VV7loUhx8H +# NNTP-Posting-Host: 85.253.50.165 +# User-Agent: G2/1.0 +# MIME-Version: 1.0 +# Message-ID: <3112e356-d2e1-45cd-ba55-2f939ee50105@googlegroups.com> +# Subject: \0 character can't be implement inside regexp in some cases? +# From: denis@gissoft.eu +# Injection-Date: Tue, 27 May 2014 21:06:52 +0000 +# Content-Type: text/plain; charset=ISO-8859-1 +# Xref: news.eternal-september.org comp.lang.awk:8400 +# +# Hello, +# +# while doing some experiments with the gawk(4.1.1) i was found problem in implementing character \x00 inside regexp for two cases: +# +# str~/\0/ +# +# and +# +# switch ( str ) { case /\0/: ... } +# +# the following code try to match given string(=="\x00") with the regexp /^\0$/ using different ways provided by gawk: +# +func _chm(t) { + _ch("match()",match(t,/^\0$/)) + _ch("split()",split(t,A,/^\0$/)>1) + _ch("patsplit()",patsplit(t,A,/^\0$/)) + _ch("gsub()",gsub(/^\0$/,"&",t)) + _ch("sub()",sub(/^\0$/,"&",t)) + _ch("gensub()",!gensub(/^\0$/,"","G",t)) + _ch("str~/rexp/",t~/^\0$/) + a=0; switch ( t ) { case /^\0$/: a=1 }; _ch("switch-case //",a) } + +func _ch(fn,bool) { + print substr(fn ": ",1,16) (bool ? "+" : "-") } + +BEGIN{ _chm("\000") } +# +# output: +# +# > gawk -f _null.gwk +# match(): + +# split(): + +# patsplit(): + +# gsub(): + +# sub(): + +# gensub(): + +# str~/rexp/: - +# switch-case //: - +# +# can someone explain me: +# +# why in case using match(), split(), patsplit(), gsub(), sub() and gensub() the given string "\x00" matches with the /^\0$/ +# +# but in cases: +# +# "\x00"~/^\0$/ +# +# and +# +# switch ( "\x00" ) { case /^\0$/: doesn't match? } +# +# +# thank You +# +# +# GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.0-p8, GNU MP 5.0.2) +# Copyright (C) 1989, 1991-2014 Free Software Foundation. +# downloaded from ezwinports +# +# windows 7x64; cmd +# +# diff --git a/test/regnul1.ok b/test/regnul1.ok new file mode 100644 index 00000000..2ba0e1da --- /dev/null +++ b/test/regnul1.ok @@ -0,0 +1,8 @@ +match(): + +split(): + +patsplit(): + +gsub(): + +sub(): + +gensub(): + +str~/rexp/: + +switch-case //: + diff --git a/test/regnul2.awk b/test/regnul2.awk new file mode 100644 index 00000000..3d93df41 --- /dev/null +++ b/test/regnul2.awk @@ -0,0 +1,112 @@ +# From denis@gissoft.eu Thu May 29 09:10:18 IDT 2014 +# Article: 8408 of comp.lang.awk +# X-Received: by 10.182.128.166 with SMTP id np6mr93689obb.16.1401289466734; +# Wed, 28 May 2014 08:04:26 -0700 (PDT) +# X-Received: by 10.140.36.6 with SMTP id o6mr4939qgo.26.1401289466607; Wed, 28 +# May 2014 08:04:26 -0700 (PDT) +# Path: eternal-september.org!news.eternal-september.org!feeder.eternal-september.org!news.glorb.com!c1no19185457igq.0!news-out.google.com!qf4ni13600igc.0!nntp.google.com!c1no19185454igq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail +# Newsgroups: comp.lang.awk +# Date: Wed, 28 May 2014 08:04:26 -0700 (PDT) +# In-Reply-To: +# Complaints-To: groups-abuse@google.com +# Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=82.131.35.51; posting-account=zNhVLgoAAACsg-WfVe_or2VV7loUhx8H +# NNTP-Posting-Host: 82.131.35.51 +# References: <3112e356-d2e1-45cd-ba55-2f939ee50105@googlegroups.com> +# +# +# User-Agent: G2/1.0 +# MIME-Version: 1.0 +# Message-ID: <79828a24-d265-4e88-8de1-e61ecbaa6701@googlegroups.com> +# Subject: Re: \0 character can't be implement inside regexp in some cases? +# From: Denis Shirokov +# Injection-Date: Wed, 28 May 2014 15:04:26 +0000 +# Content-Type: text/plain; charset=ISO-8859-1 +# Xref: news.eternal-september.org comp.lang.awk:8408 +# +# +# All of the other use-cases just cluttered up your posting. +# +# oh, really? +# +# 1. where in the Janis code the case with the `switch-case'? +# 2. how do you know about that there is only two cases? may be you know it because my code contains the other test cases? +# 3. fine. do you know what situation with the dynamic regexps? no? +# 4. do you know what situation with RS,FS and /.../ in the middle-area? how you can say that there is only two cases if you absolutely do not know it? +# +# i'm asking: WHO will perform testing other cases? You? gawk-team? the God? +# what is that point of view: that it will be enough to say: +# Oh! my match(t,/^\0$/) is matching "\x00" but t~/^\0$/ is not. why oh why? +# +# where is the test cover? or you think that other peoples will doing its instead of You? instead of Me? +# +# and the second point: guys you are screaming about two levels of stack. really, you kidding? =) +# +# however, i'm attaching some additional information about dynrexp: +# +func _chmd(t,r) { + _ch("match()",match(t,r)) + _ch("split()",split(t,A,r)>1) + _ch("patsplit()",patsplit(t,A,r)) + _ch("gsub()",gsub(r,"&",t)) + t2=t; _ch("sub()",sub(r,"&",t2)) + _ch("gensub()",!gensub(r,"","G",t)) + _ch("str~/rexp/",t~r) + # switch-case is not applicable with dynrxp + _conline() } + +func _ch(fn,bool) { + print substr(fn ": ",1,16) (bool ? "+" : "-") } + +func _conline() { + print "__________________________"; print } + +BEGIN{ _chmd("\x01","^\1$") #testing that all doings right; all match + _chmd("\x00","^\1$") #testing that all doings right; all not match + _chmd("\x00","^\0$") #tesing dynrexp +} +# +# output: +# +# match(): + +# split(): + +# patsplit(): + +# gsub(): + +# sub(): + +# gensub(): + +# str~/rexp/: + +# __________________________ +# +# match(): - +# split(): - +# patsplit(): - +# gsub(): - +# sub(): - +# gensub(): - +# str~/rexp/: - +# __________________________ +# +# match(): + +# split(): + +# patsplit(): + +# gsub(): + +# sub(): + +# gensub(): + +# str~/rexp/: - +# +# it's looks like with the dynamic regexp the same story. +# +# i found another one moment that is possible near with the reason of this issue: +# +# i was testing what characters can be present in doublestring and regexp "directly" (just as the character) and what characters must be present as escape sequence (\qqq) +# +# so, i found the following: +# +# t="abc" +# if ( match(t,/^abc[NUL]def/) ) ... - where [NUL] is the character \x00 +# +# it's seems that in that case the regular expression is processed until [NUL]character and the other part is ignored because the example above gives TRUE +# +# friendship +# Denis Shirokov +# +# diff --git a/test/regnul2.ok b/test/regnul2.ok new file mode 100644 index 00000000..6b3cecab --- /dev/null +++ b/test/regnul2.ok @@ -0,0 +1,27 @@ +match(): + +split(): + +patsplit(): + +gsub(): + +sub(): + +gensub(): + +str~/rexp/: + +__________________________ + +match(): - +split(): - +patsplit(): - +gsub(): - +sub(): - +gensub(): - +str~/rexp/: - +__________________________ + +match(): + +split(): + +patsplit(): + +gsub(): + +sub(): + +gensub(): + +str~/rexp/: + +__________________________ + -- cgit v1.2.3 From e1995be638c789f513eaf682f2790b3dadf40cd7 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 3 Jun 2014 16:41:05 +0300 Subject: Improve dfa.c if not MBS. --- ChangeLog | 4 ++++ dfa.c | 2 ++ 2 files changed, 6 insertions(+) diff --git a/ChangeLog b/ChangeLog index 0b5df5e1..edbb2c22 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2014-06-03 Arnold D. Robbins + + * dfa.c (mbs_to_wchar): Define a macro if not MBS. + 2014-05-29 Arnold D. Robbins * dfa.c: Sync with GNU grep. diff --git a/dfa.c b/dfa.c index d1046b31..29c854f2 100644 --- a/dfa.c +++ b/dfa.c @@ -532,6 +532,8 @@ mbs_to_wchar (wint_t *pwc, char const *s, size_t n, struct dfa *d) *pwc = wc; return 1; } +#else +#define mbs_to_wchar(pwc, s, n, d) (WEOF) #endif #ifdef DEBUG -- cgit v1.2.3 From daf5b0c87115b6793c5ac6568009916d4be3152b Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 3 Jun 2014 16:41:42 +0300 Subject: More doc improvements. --- awklib/eg/prog/alarm.awk | 2 +- awklib/eg/prog/cut.awk | 6 +- awklib/eg/prog/extract.awk | 8 +- awklib/eg/prog/igawk.sh | 2 +- doc/ChangeLog | 6 + doc/gawk.info | 1509 ++++++++++++++++++++++---------------------- doc/gawk.texi | 429 +++++++------ doc/gawktexi.in | 425 +++++++------ 8 files changed, 1211 insertions(+), 1176 deletions(-) diff --git a/awklib/eg/prog/alarm.awk b/awklib/eg/prog/alarm.awk index 9bb1633c..63cf64a4 100644 --- a/awklib/eg/prog/alarm.awk +++ b/awklib/eg/prog/alarm.awk @@ -71,7 +71,7 @@ BEGIN \ # how long to sleep for naptime = target - current if (naptime <= 0) { - print "time is in the past!" > "/dev/stderr" + print "alarm: time is in the past!" > "/dev/stderr" exit 1 } # zzzzzz..... go away if interrupted diff --git a/awklib/eg/prog/cut.awk b/awklib/eg/prog/cut.awk index 09ba1f7c..04d9bc11 100644 --- a/awklib/eg/prog/cut.awk +++ b/awklib/eg/prog/cut.awk @@ -34,7 +34,7 @@ BEGIN \ OFS = "" } else if (c == "d") { if (length(Optarg) > 1) { - printf("Using first character of %s" \ + printf("cut: using first character of %s" \ " for delimiter\n", Optarg) > "/dev/stderr" Optarg = substr(Optarg, 1, 1) } @@ -75,7 +75,7 @@ function set_fieldlist( n, m, i, j, k, f, g) if (index(f[i], "-") != 0) { # a range m = split(f[i], g, "-") if (m != 2 || g[1] >= g[2]) { - printf("bad field list: %s\n", + printf("cut: bad field list: %s\n", f[i]) > "/dev/stderr" exit 1 } @@ -96,7 +96,7 @@ function set_charlist( field, i, j, f, g, n, m, t, if (index(f[i], "-") != 0) { # range m = split(f[i], g, "-") if (m != 2 || g[1] >= g[2]) { - printf("bad character list: %s\n", + printf("cut: bad character list: %s\n", f[i]) > "/dev/stderr" exit 1 } diff --git a/awklib/eg/prog/extract.awk b/awklib/eg/prog/extract.awk index dc105728..12e30b54 100644 --- a/awklib/eg/prog/extract.awk +++ b/awklib/eg/prog/extract.awk @@ -10,7 +10,7 @@ BEGIN { IGNORECASE = 1 } /^@c(omment)?[ \t]+system/ \ { if (NF < 3) { - e = (FILENAME ":" FNR) + e = ("extract: " FILENAME ":" FNR) e = (e ": badly formed `system' line") print e > "/dev/stderr" next @@ -19,7 +19,7 @@ BEGIN { IGNORECASE = 1 } $2 = "" stat = system($0) if (stat != 0) { - e = (FILENAME ":" FNR) + e = ("extract: " FILENAME ":" FNR) e = (e ": warning: system returned " stat) print e > "/dev/stderr" } @@ -27,7 +27,7 @@ BEGIN { IGNORECASE = 1 } /^@c(omment)?[ \t]+file/ \ { if (NF != 3) { - e = (FILENAME ":" FNR ": badly formed `file' line") + e = ("extract: " FILENAME ":" FNR ": badly formed `file' line") print e > "/dev/stderr" next } @@ -65,7 +65,7 @@ BEGIN { IGNORECASE = 1 } } function unexpected_eof() { - printf("%s:%d: unexpected EOF or error\n", + printf("extract: %s:%d: unexpected EOF or error\n", FILENAME, FNR) > "/dev/stderr" exit 1 } diff --git a/awklib/eg/prog/igawk.sh b/awklib/eg/prog/igawk.sh index 03d1c996..70edf606 100644 --- a/awklib/eg/prog/igawk.sh +++ b/awklib/eg/prog/igawk.sh @@ -115,7 +115,7 @@ BEGIN { } fpath = pathto($2) if (fpath == "") { - printf("igawk:%s:%d: cannot find %s\n", + printf("igawk: %s:%d: cannot find %s\n", input[stackptr], FNR, $2) > "/dev/stderr" continue } diff --git a/doc/ChangeLog b/doc/ChangeLog index 9d4809ae..b004023b 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,9 @@ +2014-06-03 Arnold D. Robbins + + * gawktexi.in: Restore macros for file name vs. filename etc. + Go through @if... and @ifnot... and fix them up too. Other misc. + cleanup. + 2014-05-29 Arnold D. Robbins * gawktexi.in: Remove some obsolete bits, fix up some other diff --git a/doc/gawk.info b/doc/gawk.info index cb22b934..c5038115 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -1483,7 +1483,7 @@ tell `awk' to use that file for its program, you type: awk -f SOURCE-FILE INPUT-FILE1 INPUT-FILE2 ... The `-f' instructs the `awk' utility to get the `awk' program from -the file SOURCE-FILE. Any file name can be used for SOURCE-FILE. For +the file SOURCE-FILE. Any FN can be used for SOURCE-FILE. For example, you could put the program: BEGIN { print "Don't Panic!" } @@ -1497,16 +1497,15 @@ does the same thing as this one: awk "BEGIN { print \"Don't Panic!\" }" This was explained earlier (*note Read Terminal::). Note that you -don't usually need single quotes around the file name that you specify -with `-f', because most file names don't contain any of the shell's -special characters. Notice that in `advice', the `awk' program did not -have single quotes around it. The quotes are only needed for programs -that are provided on the `awk' command line. +don't usually need single quotes around the FN that you specify with +`-f', because most FNs don't contain any of the shell's special +characters. Notice that in `advice', the `awk' program did not have +single quotes around it. The quotes are only needed for programs that +are provided on the `awk' command line. 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. +you can add the extension `.awk' to the FN. 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 @@ -1561,14 +1560,14 @@ the name of your script (`advice'). (d.c.) Don't rely on the value of (1) The `#!' mechanism works on GNU/Linux systems, BSD-based systems and commercial Unix systems. - (2) The line beginning with `#!' lists the full file name of an -interpreter to run and an optional initial command-line argument to -pass to that interpreter. The operating system then runs the -interpreter with the given argument and the full argument list of the -executed program. The first argument in the list is the full file name -of the `awk' program. The rest of the argument list contains either -options to `awk', or data files, or both. Note that on many systems -`awk' may be found in `/usr/bin' instead of in `/bin'. Caveat Emptor. + (2) The line beginning with `#!' lists the full FN of an interpreter +to run and an optional initial command-line argument to pass to that +interpreter. The operating system then runs the interpreter with the +given argument and the full argument list of the executed program. The +first argument in the list is the full FN of the `awk' program. The +rest of the argument list contains either options to `awk', or data +files, or both. Note that on many systems `awk' may be found in +`/usr/bin' instead of in `/bin'. Caveat Emptor.  File: gawk.info, Node: Comments, Next: Quoting, Prev: Executable Scripts, Up: Running gawk @@ -1708,9 +1707,9 @@ the quoting rules. awk -F"" 'PROGRAM' FILES # wrong! In the second case, `awk' will attempt to use the text of the - program as the value of `FS', and the first file name as the text - of the program! This results in syntax errors at best, and - confusing behavior at worst. + program as the value of `FS', and the first FN as the text of the + program! This results in syntax errors at best, and confusing + behavior at worst. Mixing single and double quotes is difficult. You have to resort to shell quoting tricks, like this: @@ -1889,9 +1888,9 @@ description of the program will give you a good idea of what is going on, but please 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 +own FNs 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 the length of the longest input line: @@ -2035,7 +2034,7 @@ identifies the owner of the file. The fourth field identifies the group of the file. The fifth field contains the size of the file in bytes. The sixth, seventh, and eighth fields contain the month, day, and time, respectively, that the file was last modified. Finally, the ninth field -contains the file name.(1) +contains the FN.(1) The `$6 == "Nov"' in our `awk' program is an expression that tests whether the sixth field of the output from `ls -l' matches the string @@ -2349,10 +2348,10 @@ The following list describes options mandated by the POSIX standard: This interpretation of `--' follows the POSIX argument parsing conventions. - This is useful if you have file names that start with `-', or in - shell scripts, if you have file names that will be specified by - the user that could start with `-'. It is also useful for passing - options on to the `awk' program; see *note Getopt Function::. + This is useful if you have FNs that start with `-', or in shell + scripts, if you have FNs that will be specified by the user that + could start with `-'. It is also useful for passing options on to + the `awk' program; see *note Getopt Function::. The following list describes `gawk'-specific options: @@ -2517,8 +2516,8 @@ The following list describes options mandated by the POSIX standard: Enable pretty-printing of `awk' programs. By default, 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 - the `-o' and FILE, if FILE is supplied. + different FN for the output. No space is allowed between the `-o' + and FILE, if FILE is supplied. NOTE: Due to the way `gawk' has evolved, with this option your program is still executed. This will change in the next @@ -2534,9 +2533,9 @@ The following list describes options mandated by the POSIX standard: `--profile'[`='FILE] Enable profiling of `awk' programs (*note Profiling::). By default, profiles are created in a file named `awkprof.out'. The - optional FILE argument allows you to specify a different file name - for the profile file. No space is allowed between the `-p' and - FILE, if FILE is supplied. + optional FILE argument allows you to specify a different FN for + the profile file. No space is allowed between the `-p' and FILE, + if FILE is supplied. The profile contains execution counts for each statement in the program in the left margin, and function call counts for each @@ -2677,11 +2676,11 @@ arguments, including variable assignments, are included. As each element of `ARGV' is processed, `gawk' sets the variable `ARGIND' to the index in `ARGV' of the current element. - The distinction between file name arguments and variable-assignment + The distinction between FN arguments and variable-assignment arguments is made when `awk' is about to open the next input file. At -that point in execution, it checks the file name to see whether it is -really a variable assignment; if so, `awk' sets the variable instead of -reading a file. +that point in execution, it checks the FN to see whether it is really a +variable assignment; if so, `awk' sets the variable instead of reading +a file. Therefore, the variables actually receive the given values after all previously specified files have been read. In particular, the values of @@ -2693,13 +2692,13 @@ begins scanning the argument list. escape sequences (*note Escape Sequences::). (d.c.) In some very early implementations of `awk', when a variable -assignment occurred before any file names, the assignment would happen -_before_ the `BEGIN' rule was executed. `awk''s behavior was thus -inconsistent; some command-line assignments were available inside the -`BEGIN' rule, while others were not. Unfortunately, some applications -came to depend upon this "feature." When `awk' was changed to be more -consistent, the `-v' option was added to accommodate applications that -depended upon the old behavior. +assignment occurred before any FNs, the assignment would happen _before_ +the `BEGIN' rule was executed. `awk''s behavior was thus inconsistent; +some command-line assignments were available inside the `BEGIN' rule, +while others were not. Unfortunately, some applications came to depend +upon this "feature." When `awk' was changed to be more consistent, the +`-v' option was added to accommodate applications that depended upon +the old behavior. The variable assignment feature is most useful for assigning to variables such as `RS', `OFS', and `ORS', which control input and @@ -2735,11 +2734,11 @@ SOME_COMMAND, and finally it reads `file2'. You may also use `"-"' to name standard input when reading files with `getline' (*note Getline/File::). - In addition, `gawk' allows you to specify the special file name + In addition, `gawk' allows you to specify the special FN `/dev/stdin', both on the command line and with `getline'. Some other versions of `awk' also support this, but it is not standard. (Some operating systems provide a `/dev/stdin' file in the file system; -however, `gawk' always processes this file name itself.) +however, `gawk' always processes this FN itself.)  File: gawk.info, Node: Environment Variables, Next: Exit Status, Prev: Naming Standard Input, Up: Invoking Gawk @@ -2767,7 +2766,7 @@ The previous minor node described how `awk' program files can be named on the command-line with the `-f' option. In most `awk' implementations, you must supply a precise path name for each program file, unless the file is in the current directory. But in `gawk', if -the file name supplied to the `-f' or `-i' options does not contain a +the FN 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 specified name. @@ -2780,8 +2779,8 @@ variable. If that variable does not exist, `gawk' uses a default path, The search path feature is particularly helpful for building libraries of useful `awk' functions. The library files can be placed in a standard directory in the default path and then specified on the -command line with a short file name. Otherwise, the full file name -would have to be typed for each file. +command line with a short FN. Otherwise, the full FN would have to be +typed for each file. By using the `-i' option, or the `--source' and `-f' options, your command-line `awk' programs can use facilities in `awk' library files @@ -2790,8 +2789,8 @@ in compatibility mode. This is true for both `--traditional' and `--posix'. *Note Options::. If the source code is not found after the initial search, the path -is searched again after adding the default `.awk' suffix to the -filename. +is searched again after adding the default `.awk' suffix to the file +name. NOTE: To include the current directory in the path, either place `.' explicitly in the path or write a null entry in the path. (A @@ -2989,8 +2988,8 @@ and here is `test2': use `@include' followed by the name of the file to be included, enclosed in double quotes. - NOTE: Keep in mind that this is a language construct and the file - name cannot be a string variable, but rather just a literal string + NOTE: Keep in mind that this is a language construct and the FN + cannot be a string variable, but rather just a literal string constant in double quotes. The files to be included may be nested; e.g., given a third script, @@ -3008,7 +3007,7 @@ Running `gawk' with the `test3' script produces the following results: -| This is file test2. -| This is file test3. - The file name can, of course, be a pathname. For example: + The FN can, of course, be a pathname. For example: @include "../io_funcs" @@ -3060,8 +3059,8 @@ The `AWKLIBPATH' variable is used to search for the extension. Using If the extension is not initially found in `AWKLIBPATH', another search is conducted after appending the platform's default shared -library suffix to the filename. For example, on GNU/Linux systems, the -suffix `.so' is used. +library suffix to the file name. For example, on GNU/Linux systems, +the suffix `.so' is used. $ gawk '@load "ordchr"; BEGIN {print chr(65)}' -| A @@ -5319,11 +5318,11 @@ File: gawk.info, Node: Getline/File, Next: Getline/Variable/File, Prev: Getli --------------------------------- 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 -with a value equal to 10 in the current input file: +string-valued expression that specifies the FN. `< 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 with a value equal +to 10 in the current input file: { if ($1 == 10) { @@ -5756,8 +5755,8 @@ OFMT::.) For printing with specifications, you need the `printf' statement (*note Printf::). Besides basic and formatted printing, this major node also covers -I/O redirections to files and pipes, introduces the special file names -that `gawk' processes internally, and discusses the `close()' built-in +I/O redirections to files and pipes, introduces the special FNs that +`gawk' processes internally, and discusses the `close()' built-in function. * Menu: @@ -6393,9 +6392,8 @@ work identically for `printf': `print ITEMS > OUTPUT-FILE' This redirection prints the items into the output file named - OUTPUT-FILE. The file name OUTPUT-FILE can be any expression. - Its value is changed to a string and then used as a file name - (*note Expressions::). + OUTPUT-FILE. The FN OUTPUT-FILE can be any expression. Its value + is changed to a string and then used as a FN (*note Expressions::). When this type of redirection is used, the OUTPUT-FILE is erased before the first output is written to it. Subsequent writes to @@ -6513,9 +6511,9 @@ underlying operating system permits. A particularly powerful way to use redirection is to build command lines and pipe them into the shell, `sh'. For example, suppose you -have a list of files brought over from a system where all the file names -are stored in uppercase, and you wish to rename them to have names in -all lowercase. The following program is both simple and efficient: +have a list of files brought over from a system where all the FNs are +stored in uppercase, and you wish to rename them to have names in all +lowercase. The following program is both simple and efficient: { printf("mv %s %s\n", $0, tolower($0)) | "sh" } @@ -6529,12 +6527,12 @@ to rename the files. It then sends the list to the shell for execution.  File: gawk.info, Node: Special Files, Next: Close Files And Pipes, Prev: Redirection, Up: Printing -5.7 Special File Names in `gawk' -================================ +5.7 Special File Name in `gawk' +=============================== -`gawk' provides a number of special file names that it interprets -internally. These file names provide access to standard file -descriptors and TCP/IP networking. +`gawk' provides a number of special FNs that it interprets internally. +These FNs provide access to standard file descriptors and TCP/IP +networking. * Menu: @@ -6580,13 +6578,13 @@ 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 opening `/dev/tty' fails. - `gawk' provides special file names for accessing the three standard + `gawk' provides special FNs for accessing the three standard streams. (c.e.) It also provides syntax for accessing any other -inherited open files. If the file name matches one of these special -names when `gawk' redirects input or output, then it directly uses the -stream that the file name stands for. These special file names work -for all operating systems that `gawk' has been ported to, not just -those that are POSIX-compliant: +inherited open files. If the FN matches one of these special names +when `gawk' redirects input or output, then it directly uses the stream +that the FN stands for. These special FNs work for all operating +systems that `gawk' has been ported to, not just those that are +POSIX-compliant: `/dev/stdin' The standard input (file descriptor 0). @@ -6603,18 +6601,18 @@ those that are POSIX-compliant: the shell). Unless special pains are taken in the shell from which `gawk' is invoked, only descriptors 0, 1, and 2 are available. - The file names `/dev/stdin', `/dev/stdout', and `/dev/stderr' are -aliases for `/dev/fd/0', `/dev/fd/1', and `/dev/fd/2', respectively. -However, they are more self-explanatory. The proper way to write an -error message in a `gawk' program is to use `/dev/stderr', like this: + The FNs `/dev/stdin', `/dev/stdout', and `/dev/stderr' are aliases +for `/dev/fd/0', `/dev/fd/1', and `/dev/fd/2', respectively. However, +they are more self-explanatory. The proper way to write an error +message in a `gawk' program is to use `/dev/stderr', like this: print "Serious error detected!" > "/dev/stderr" - Note the use of quotes around the file name. Like any other -redirection, the value must be a string. It is a common error to omit -the quotes, which leads to confusing results. + Note the use of quotes around the FN. Like any other redirection, +the value must be a string. It is a common error to omit the quotes, +which leads to confusing results. - Finally, using the `close()' function on a file name of the form + Finally, using the `close()' function on a FN of the form `"/dev/fd/N"', for file descriptor numbers above two, does actually close the given file descriptor. @@ -6632,16 +6630,15 @@ File: gawk.info, Node: Special Network, Next: Special Caveats, Prev: Special ---------------------------------------------- `gawk' programs can open a two-way TCP/IP connection, acting as either -a client or a server. This is done using a special file name of the -form: +a client or a server. This is done using a special FN of the form: `/NET-TYPE/PROTOCOL/LOCAL-PORT/REMOTE-HOST/REMOTE-PORT' The NET-TYPE is one of `inet', `inet4' or `inet6'. The PROTOCOL is one of `tcp' or `udp', and the other fields represent the other essential pieces of information for making a networking connection. -These file names are used with the `|&' operator for communicating with -a coprocess (*note Two-way I/O::). This is an advanced feature, +These FNs are used with the `|&' operator for communicating with a +coprocess (*note Two-way I/O::). This is an advanced feature, mentioned here only for completeness. Full discussion is delayed until *note TCP/IP Networking::. @@ -6651,15 +6648,15 @@ File: gawk.info, Node: Special Caveats, Prev: Special Network, Up: Special Fi 5.7.3 Special File Name Caveats ------------------------------- -Here is a list of things to bear in mind when using the special file -names that `gawk' provides: +Here is a list of things to bear in mind when using the special FNs +that `gawk' provides: - * Recognition of these special file names is disabled if `gawk' is in + * Recognition of these special FNs is disabled if `gawk' is in compatibility mode (*note Options::). - * `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 + * `gawk' _always_ interprets these special FNs. 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 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 @@ -6671,17 +6668,17 @@ File: gawk.info, Node: Close Files And Pipes, Prev: Special Files, Up: Printi 5.8 Closing Input and Output Redirections ========================================= -If the same file name or the same shell command is used with `getline' -more than once during the execution of an `awk' program (*note -Getline::), the file is opened (or the command is executed) the first -time only. At that time, the first record of input is read from that -file or command. The next time the same file or command is used with -`getline', another record is read from it, and so on. +If the same FN or the same shell command is used with `getline' more +than once during the execution of an `awk' program (*note Getline::), +the file is opened (or the command is executed) the first time only. +At that time, the first record of input is read from that file or +command. The next time the same file or command is used with `getline', +another record is read from it, and so on. Similarly, when a file or pipe is opened for output, `awk' remembers -the file name or command associated with it, and subsequent writes to -the same file or command are appended to the previous writes. The file -or pipe stays open until `awk' exits. +the FN or command associated with it, and subsequent writes to the same +file or command are appended to the previous writes. The file or pipe +stays open until `awk' exits. This implies that special steps are necessary in order to read the same file again from the beginning, or to rerun a shell command (rather @@ -6710,8 +6707,8 @@ file or command, or the next `print' or `printf' to that file or command, reopens the file or reruns the command. Because the expression that you use to close a file or pipeline must exactly match the expression used to open the file or run the command, it is good -practice to use a variable to store the file name or command. The -previous example becomes the following: +practice to use a variable to store the FN or command. The previous +example becomes the following: sortcom = "sort -r names" sortcom | getline foo @@ -7166,11 +7163,11 @@ option, as in the following: the variable is set at the very beginning, even before the `BEGIN' rules execute. The `-v' option and its assignment must precede all the -file name arguments, as well as the program text. (*Note Options::, -for more information about the `-v' option.) Otherwise, the variable -assignment is performed at a time determined by its position among the -input file arguments--after the processing of the preceding input file -argument. For example: +FN arguments, as well as the program text. (*Note Options::, for more +information about the `-v' option.) Otherwise, the variable assignment +is performed at a time determined by its position among the input file +arguments--after the processing of the preceding input file argument. +For example: awk '{ print $n }' n=4 inventory-shipped n=2 mail-list @@ -9793,14 +9790,13 @@ Options::), they are not special. `ARGIND #' The index in `ARGV' of the current file being processed. Every time `gawk' opens a new data file for processing, it sets `ARGIND' - to the index in `ARGV' of the file name. When `gawk' is - processing the input files, `FILENAME == ARGV[ARGIND]' is always - true. + to the index in `ARGV' of the FN. When `gawk' is processing the + input files, `FILENAME == ARGV[ARGIND]' is always true. This variable is useful in file processing; it allows you to tell how far along you are in the list of data files as well as to - distinguish between successive instances of the same file name on - the command line. + distinguish between successive instances of the same FN on the + command line. While you can change the value of `ARGIND' within your `awk' program, `gawk' automatically sets it to a new value when the next @@ -10127,13 +10123,13 @@ incrementing `ARGC' causes additional files to be read. If the value of `ARGC' is decreased, that eliminates input files from the end of the list. By recording the old value of `ARGC' elsewhere, a program can treat the eliminated arguments as something -other than file names. +other than FNs. To eliminate a file from the middle of the list, store the null string (`""') into `ARGV' in place of the file's name. As a special -feature, `awk' ignores file names that have been replaced with the null -string. Another option is to use the `delete' statement to remove -elements from `ARGV' (*note Delete::). +feature, `awk' ignores FNs that have been replaced with the null string. +Another option is to use the `delete' statement to remove elements from +`ARGV' (*note Delete::). All of these actions are typically done in the `BEGIN' rule, before actual processing of the input begins. *Note Split Program::, and see @@ -14411,16 +14407,16 @@ does so _portably_; this works with any implementation of `awk': the rule it supplies is executed first. This rule relies on `awk''s `FILENAME' variable that 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 -necessary to call `endfile()' for the old file. Because `endfile()' -should only be called if a file has been processed, the program first -checks to make sure that `_oldfilename' is not the null string. The -program then assigns the current file name to `_oldfilename' and calls -`beginfile()' for the file. Because, like all `awk' variables, -`_oldfilename' is initialized to the null string, this rule executes -correctly even for the first data file. +changes for each new data file. The current FN is saved in a private +variable, `_oldfilename'. If `FILENAME' does not equal `_oldfilename', +then a new data file is being processed and it is necessary to call +`endfile()' for the old file. Because `endfile()' should only be +called if a file has been processed, the program first checks to make +sure that `_oldfilename' is not the null string. The program then +assigns the current FN to `_oldfilename' and calls `beginfile()' for +the file. Because, like all `awk' variables, `_oldfilename' is +initialized to the null string, this rule executes 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 @@ -14557,8 +14553,8 @@ program code. possible to detect when an empty data file has been skipped. Similar to the library file presented in *note Filetrans Function::, the following library file calls a function named `zerofile()' that the -user must provide. The arguments passed are the file name and the -position in `ARGV' where it was found: +user must provide. The arguments passed are the FN and the position in +`ARGV' where it was found: # zerofile.awk --- library file to process empty input files @@ -14599,13 +14595,13 @@ intervening value in `ARGV' is a variable assignment.  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 Name +---------------------------------------- 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. +FN that contains an `=' character, `awk' treats the FN as 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 @@ -14632,7 +14628,7 @@ programming with a library file does the trick: The function works by looping through the arguments. It prepends `./' to any argument that matches the form of a variable assignment, -turning that argument into a file name. +turning that argument into a FN. The use of `No_command_assign' allows you to disable command-line assignments at invocation time, by giving the variable a true value. @@ -14921,7 +14917,7 @@ that it does not try to interpret the `-a', etc., as its own options. NOTE: After `getopt()' is through, it is the responsibility of the user level code to clear out all the elements of `ARGV' from 1 to `Optind', so that `awk' does not try to process the command-line - options as file names. + options as FNs. Several of the sample programs presented in *note Sample Programs::, use `getopt()' to process their arguments. @@ -15640,7 +15636,7 @@ by characters, the output field separator is set to the null string: OFS = "" } else if (c == "d") { if (length(Optarg) > 1) { - printf("Using first character of %s" \ + printf("cut: using first character of %s" \ " for delimiter\n", Optarg) > "/dev/stderr" Optarg = substr(Optarg, 1, 1) } @@ -15665,7 +15661,7 @@ we want them to be separated with individual spaces. Also remember that after `getopt()' is through (as described in *note Getopt Function::), we have to clear out all the elements of `ARGV' from 1 to `Optind', so that `awk' does not try to process the command-line options -as file names. +as FNs. After dealing with the command-line options, the program verifies that the options make sense. Only one or the other of `-c' and `-f' @@ -15707,7 +15703,7 @@ splitting: if (index(f[i], "-") != 0) { # a range m = split(f[i], g, "-") if (m != 2 || g[1] >= g[2]) { - printf("bad field list: %s\n", + printf("cut: bad field list: %s\n", f[i]) > "/dev/stderr" exit 1 } @@ -15745,7 +15741,7 @@ filler fields: if (index(f[i], "-") != 0) { # range m = split(f[i], g, "-") if (m != 2 || g[1] >= g[2]) { - printf("bad character list: %s\n", + printf("cut: bad character list: %s\n", f[i]) > "/dev/stderr" exit 1 } @@ -15822,10 +15818,9 @@ expressions that are almost identical to those available in `awk' The PATTERN is a regular expression. In typical usage, the regular expression is quoted to prevent the shell from expanding any of the -special characters as file name wildcards. Normally, `egrep' prints -the lines that matched. If multiple file names are provided on the -command line, each output line is preceded by the name of the file and -a colon. +special characters as FN wildcards. Normally, `egrep' prints the lines +that matched. If multiple FNs are provided on the command line, each +output line is preceded by the name of the file and a colon. The options to `egrep' are as follows: @@ -15897,8 +15892,8 @@ pattern is supplied with `-e', the first nonoption on the command line is used. The `awk' command-line arguments up to `ARGV[Optind]' are cleared, so that `awk' won't try to process them as files. If no files are specified, the standard input is used, and if multiple files are -specified, we make sure to note this so that the file names can precede -the matched lines in the output: +specified, we make sure to note this so that the FNs can precede the +matched lines in the output: if (pattern == "") pattern = ARGV[Optind++] @@ -15979,9 +15974,9 @@ just moves on to the next record. are not counting lines. First, if the user only wants 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 -name, and then skip to the next file with `nextfile'. Finally, each -line is printed, with a leading file name and colon if necessary: +Similarly, if we are only printing FNs, we can print the FN, and then +skip to the next file with `nextfile'. Finally, each line is printed, +with a leading FN and colon if necessary: { matches = ($0 ~ pattern) @@ -16167,7 +16162,7 @@ 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 1000. To change the name of the output files to something like `myfileaa', `myfileab', and so on, supply an -additional argument that specifies the file name prefix. +additional argument that specifies the FN prefix. Here is a version of `split' in `awk'. It uses the `ord()' and `chr()' functions presented in *note Ordinal Functions::. @@ -16892,7 +16887,7 @@ alarm: # how long to sleep for naptime = target - current if (naptime <= 0) { - print "time is in the past!" > "/dev/stderr" + print "alarm: time is in the past!" > "/dev/stderr" exit 1 } @@ -17394,7 +17389,7 @@ with a zero exit status, signifying OK: /^@c(omment)?[ \t]+system/ \ { if (NF < 3) { - e = (FILENAME ":" FNR) + e = ("extract: " FILENAME ":" FNR) e = (e ": badly formed `system' line") print e > "/dev/stderr" next @@ -17403,7 +17398,7 @@ with a zero exit status, signifying OK: $2 = "" stat = system($0) if (stat != 0) { - e = (FILENAME ":" FNR) + e = ("extract: " FILENAME ":" FNR) e = (e ": warning: system returned " stat) print e > "/dev/stderr" } @@ -17443,7 +17438,7 @@ output file: /^@c(omment)?[ \t]+file/ \ { if (NF != 3) { - e = (FILENAME ":" FNR ": badly formed `file' line") + e = ("extract: " FILENAME ":" FNR ": badly formed `file' line") print e > "/dev/stderr" next } @@ -17494,7 +17489,7 @@ closing the open file: function unexpected_eof() { - printf("%s:%d: unexpected EOF or error\n", + printf("extract: %s:%d: unexpected EOF or error\n", FILENAME, FNR) > "/dev/stderr" exit 1 } @@ -17874,7 +17869,7 @@ zero, the program is done: } fpath = pathto($2) if (fpath == "") { - printf("igawk:%s:%d: cannot find %s\n", + printf("igawk: %s:%d: cannot find %s\n", input[stackptr], FNR, $2) > "/dev/stderr" continue } @@ -19556,8 +19551,8 @@ File: gawk.info, Node: Gawk I18N, Prev: I18N Example, Up: Internationalizatio `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.18.2.1 -(ftp://ftp.gnu.org/gnu/gettext/gettext-0.18.2.1.tar.gz). +writing, the latest version of GNU `gettext' is version 0.19 +(ftp://ftp.gnu.org/gnu/gettext/gettext-0.19.tar.gz). If a translation of `gawk''s messages exists, then `gawk' produces usage messages, warnings, and fatal errors in the local language. @@ -22784,7 +22779,7 @@ structures as described earlier. `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 filename. It should not change any state (variable + for this file name. It should not change any state (variable values, etc.) within `gawk'. `awk_bool_t (*take_control_of)(const char *name,' @@ -24542,7 +24537,7 @@ requested hierarchies. The arguments are as follows: `pathlist' - An array of filenames. The element values are used; the index + An array of file names. The element values are used; the index values are ignored. `flags' @@ -24658,10 +24653,10 @@ constant (`FNM_NOMATCH'), and an array of flag values named `FNM'. The arguments to `fnmatch()' are: `pattern' - The filename wildcard to match. + The FN wildcard to match. `string' - The filename string. + The FN string. `flag' Either zero, or the bitwise OR of one or more of the flags in the @@ -24753,8 +24748,8 @@ standard output to a temporary file configured to have the same owner and permissions as the original. After the file has been processed, the extension restores standard output to its original destination. If `INPLACE_SUFFIX' is not an empty string, the original file is linked to -a backup filename created by appending that suffix. Finally, the -temporary file is renamed to the original filename. +a backup FN created by appending that suffix. Finally, the temporary +file is renamed to the original FN. If any error occurs, the extension issues a fatal error to terminate processing immediately without damaging the original file. @@ -24814,9 +24809,9 @@ on the command line (or with `getline'), 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 filename, 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 +number and the 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 indicating the type of the file. The letters are file types are shown in *note table-readdir-file-types::. @@ -26903,8 +26898,8 @@ or: $ MMK/DESCRIPTION=[.vms]descrip.mms gawk `MMK' is an open source, free, near-clone of `MMS' and can better -handle ODS-5 volumes with upper- and lowercase filenames. `MMK' is -available from `https://github.com/endlesssoftware/mmk'. +handle ODS-5 volumes with upper- and lowercase FNs. `MMK' is available +from `https://github.com/endlesssoftware/mmk'. With ODS-5 volumes and extended parsing enabled, the case of the target parameter may need to be exact. @@ -27024,9 +27019,9 @@ has no device or directory path information in it, `gawk' looks in the current directory first, then in the directory specified by the translation of `AWK_LIBRARY' if the file is not found. If, after searching in both directories, the file still is not found, `gawk' -appends the suffix `.awk' to the filename and retries the file search. -If `AWK_LIBRARY' has no definition, a default value of `SYS$LIBRARY:' -is used for it. +appends the suffix `.awk' to the FN and retries the file search. If +`AWK_LIBRARY' has no definition, a default value of `SYS$LIBRARY:' is +used for it.  File: gawk.info, Node: VMS Running, Next: VMS GNV, Prev: VMS Installation Details, Up: VMS Installation @@ -30145,7 +30140,7 @@ Index * Menu: * ! (exclamation point), ! operator: Boolean Ops. (line 67) -* ! (exclamation point), ! operator <1>: Egrep Program. (line 175) +* ! (exclamation point), ! operator <1>: Egrep Program. (line 174) * ! (exclamation point), ! operator <2>: Ranges. (line 48) * ! (exclamation point), ! operator: Precedence. (line 52) * ! (exclamation point), != operator <1>: Precedence. (line 65) @@ -30340,7 +30335,7 @@ Index * > (right angle bracket), >= operator: Comparison Operators. (line 11) * > (right angle bracket), >> operator (I/O) <1>: Precedence. (line 65) -* > (right angle bracket), >> operator (I/O): Redirection. (line 50) +* > (right angle bracket), >> operator (I/O): Redirection. (line 49) * ? (question mark), ?: operator: Precedence. (line 92) * ? (question mark), regexp operator <1>: GNU Regexp Operators. (line 59) @@ -30381,7 +30376,7 @@ Index (line 38) * \ (backslash), as field separator: Command Line Field Separator. (line 27) -* \ (backslash), continuing lines and <1>: Egrep Program. (line 223) +* \ (backslash), continuing lines and <1>: Egrep Program. (line 222) * \ (backslash), continuing lines and: Statements/Lines. (line 19) * \ (backslash), continuing lines and, comments and: Statements/Lines. (line 76) @@ -30588,7 +30583,7 @@ Index * awk, gawk and <1>: This Manual. (line 14) * awk, gawk and: Preface. (line 23) * awk, history of: History. (line 17) -* awk, implementation issues, pipes: Redirection. (line 135) +* awk, implementation issues, pipes: Redirection. (line 134) * awk, implementations: Other Versions. (line 6) * awk, implementations, limits: Getline Notes. (line 14) * awk, invoking: Command Line. (line 6) @@ -30655,7 +30650,7 @@ Index (line 38) * backslash (\), as field separator: Command Line Field Separator. (line 27) -* backslash (\), continuing lines and <1>: Egrep Program. (line 223) +* backslash (\), continuing lines and <1>: Egrep Program. (line 222) * backslash (\), continuing lines and: Statements/Lines. (line 19) * backslash (\), continuing lines and, comments and: Statements/Lines. (line 76) @@ -30966,7 +30961,7 @@ Index (line 6) * cookie: Glossary. (line 149) * coprocesses <1>: Two-way I/O. (line 44) -* coprocesses: Redirection. (line 102) +* coprocesses: Redirection. (line 101) * coprocesses, closing: Close Files And Pipes. (line 6) * coprocesses, getline from: Getline/Coprocess. (line 6) @@ -31009,9 +31004,9 @@ Index * dark corner, exit statement: Exit Statement. (line 30) * dark corner, field separators: Field Splitting Summary. (line 46) -* dark corner, FILENAME variable <1>: Auto-set. (line 90) +* dark corner, FILENAME variable <1>: Auto-set. (line 89) * dark corner, FILENAME variable: Getline Notes. (line 19) -* dark corner, FNR/NR variables: Auto-set. (line 301) +* dark corner, FNR/NR variables: Auto-set. (line 300) * dark corner, format-control characters: Control Letters. (line 18) * dark corner, FS as null string: Single Character Fields. (line 20) @@ -31195,25 +31190,25 @@ Index (line 81) * differences in awk and gawk, command line directories: Command line directories. (line 6) -* differences in awk and gawk, ERRNO variable: Auto-set. (line 74) +* differences in awk and gawk, ERRNO variable: Auto-set. (line 73) * differences in awk and gawk, error messages: Special FD. (line 16) * 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 115) +* differences in awk and gawk, FUNCTAB variable: Auto-set. (line 114) * differences in awk and gawk, function arguments (gawk): Calling Built-in. (line 16) * differences in awk and gawk, getline command: Getline. (line 19) * differences in awk and gawk, IGNORECASE variable: User-modified. (line 76) * differences in awk and gawk, implementation limitations <1>: Redirection. - (line 135) + (line 134) * differences in awk and gawk, implementation limitations: Getline Notes. (line 14) * differences in awk and gawk, indirect function calls: Indirect Calls. (line 6) * differences in awk and gawk, input/output operators <1>: Redirection. - (line 102) + (line 101) * differences in awk and gawk, input/output operators: Getline/Coprocess. (line 6) * differences in awk and gawk, line continuations: Conditional Exp. @@ -31223,7 +31218,7 @@ Index (line 260) * differences in awk and gawk, print/printf statements: Format Modifiers. (line 13) -* differences in awk and gawk, PROCINFO array: Auto-set. (line 128) +* differences in awk and gawk, PROCINFO array: Auto-set. (line 127) * differences in awk and gawk, read timeouts: Read Timeout. (line 6) * differences in awk and gawk, record separators: awk split records. (line 124) @@ -31233,7 +31228,7 @@ Index (line 26) * differences in awk and gawk, RS/RT variables: gawk split records. (line 58) -* differences in awk and gawk, RT variable: Auto-set. (line 257) +* differences in awk and gawk, RT variable: Auto-set. (line 256) * differences in awk and gawk, single-character fields: Single Character Fields. (line 6) * differences in awk and gawk, split() function: String Functions. @@ -31241,7 +31236,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 261) +* differences in awk and gawk, SYMTAB variable: Auto-set. (line 260) * differences in awk and gawk, TEXTDOMAIN variable: User-modified. (line 152) * differences in awk and gawk, trunc-mod operation: Arithmetic Ops. @@ -31282,11 +31277,11 @@ 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 133) -* effective user ID of gawk user: Auto-set. (line 137) +* effective group ID of gawk user: Auto-set. (line 132) +* effective user ID of gawk user: Auto-set. (line 136) * egrep utility <1>: Egrep Program. (line 6) * egrep utility: Bracket Expressions. (line 24) -* egrep.awk program: Egrep Program. (line 54) +* egrep.awk program: Egrep Program. (line 53) * elements in arrays, assigning values: Assigning Elements. (line 6) * elements in arrays, deleting: Delete. (line 6) * elements in arrays, order of access by in operator: Scanning an Array. @@ -31311,7 +31306,7 @@ Index * END pattern, and profiling: Profiling. (line 62) * END pattern, assert() user-defined function and: Assert Function. (line 75) -* END pattern, backslash continuation and: Egrep Program. (line 223) +* END pattern, backslash continuation and: Egrep Program. (line 222) * 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. @@ -31327,10 +31322,10 @@ Index * endgrent() user-defined function: Group Functions. (line 216) * endpwent() function (C library): Passwd Functions. (line 210) * endpwent() user-defined function: Passwd Functions. (line 213) -* ENVIRON array: Auto-set. (line 60) +* ENVIRON array: Auto-set. (line 59) * environment variables used by gawk: Environment Variables. (line 6) -* environment variables, in ENVIRON array: Auto-set. (line 60) +* environment variables, in ENVIRON array: Auto-set. (line 59) * epoch, definition of: Glossary. (line 234) * equals sign (=), = operator: Assignment Ops. (line 6) * equals sign (=), == operator <1>: Precedence. (line 65) @@ -31338,13 +31333,13 @@ Index (line 11) * EREs (Extended Regular Expressions): Bracket Expressions. (line 24) * ERRNO variable <1>: TCP/IP Networking. (line 54) -* ERRNO variable: Auto-set. (line 74) +* ERRNO variable: Auto-set. (line 73) * ERRNO variable, with BEGINFILE pattern: BEGINFILE/ENDFILE. (line 26) * ERRNO variable, with close() function: Close Files And Pipes. (line 139) * ERRNO variable, with getline command: Getline. (line 19) * error handling: Special FD. (line 16) -* error handling, ERRNO variable and: Auto-set. (line 74) +* error handling, ERRNO variable and: Auto-set. (line 73) * error output: Special FD. (line 6) * escape processing, gsub()/gensub()/sub() functions: Gory Details. (line 6) @@ -31357,7 +31352,7 @@ Index * evaluation order, concatenation: Concatenation. (line 41) * evaluation order, functions: Calling Built-in. (line 30) * examining fields: Fields. (line 6) -* exclamation point (!), ! operator <1>: Egrep Program. (line 175) +* exclamation point (!), ! operator <1>: Egrep Program. (line 174) * exclamation point (!), ! operator <2>: Precedence. (line 52) * exclamation point (!), ! operator: Boolean Ops. (line 67) * exclamation point (!), != operator <1>: Precedence. (line 65) @@ -31398,7 +31393,7 @@ Index (line 6) * extension API version: Extension Versioning. (line 6) -* extension API, version number: Auto-set. (line 224) +* extension API, version number: Auto-set. (line 223) * extension example: Extension Example. (line 6) * extension registration: Registration Functions. (line 6) @@ -31474,10 +31469,10 @@ Index * FIELDWIDTHS variable <1>: User-modified. (line 37) * FIELDWIDTHS variable: Constant Size. (line 23) * file descriptors: Special FD. (line 6) -* file names, distinguishing: Auto-set. (line 56) +* file names, distinguishing: Auto-set. (line 55) * file names, in compatibility mode: Special Caveats. (line 9) * file names, standard streams in gawk: Special FD. (line 46) -* FILENAME variable <1>: Auto-set. (line 90) +* FILENAME variable <1>: Auto-set. (line 89) * FILENAME variable: Reading Files. (line 6) * FILENAME variable, getline, setting with: Getline Notes. (line 19) * filenames, assignments as: Ignoring Assigns. (line 6) @@ -31523,7 +31518,7 @@ Index * files, portable object, converting to message object files: I18N Example. (line 63) * files, portable object, generating: Options. (line 147) -* files, processing, ARGIND variable and: Auto-set. (line 51) +* files, processing, ARGIND variable and: Auto-set. (line 50) * files, reading: Rewind Function. (line 6) * files, reading, multiline records: Multiple Line. (line 6) * files, searching for regular expressions: Egrep Program. (line 6) @@ -31547,9 +31542,9 @@ Index * flush buffered output: I/O Functions. (line 28) * fnmatch() extension function: Extension Sample Fnmatch. (line 12) -* FNR variable <1>: Auto-set. (line 99) +* FNR variable <1>: Auto-set. (line 98) * FNR variable: Records. (line 6) -* FNR variable, changing: Auto-set. (line 301) +* FNR variable, changing: Auto-set. (line 300) * for statement: For Statement. (line 6) * for statement, looping over arrays: Scanning an Array. (line 20) * fork() extension function: Extension Sample Fork. @@ -31599,7 +31594,7 @@ Index * FSF (Free Software Foundation): Manual History. (line 6) * fts() extension function: Extension Sample File Functions. (line 61) -* FUNCTAB array: Auto-set. (line 115) +* FUNCTAB array: Auto-set. (line 114) * function calls: Function Calls. (line 6) * function calls, indirect: Indirect Calls. (line 6) * function definition example: Function Example. (line 6) @@ -31649,7 +31644,7 @@ Index * G-d: Acknowledgments. (line 78) * Garfinkle, Scott: Contributors. (line 34) * gawk program, dynamic profiling: Profiling. (line 179) -* gawk version: Auto-set. (line 199) +* gawk version: Auto-set. (line 198) * gawk, ARGIND variable in: Other Arguments. (line 12) * gawk, awk and <1>: This Manual. (line 14) * gawk, awk and: Preface. (line 23) @@ -31670,7 +31665,7 @@ Index * gawk, distribution: Distribution contents. (line 6) * gawk, ERRNO variable in <1>: TCP/IP Networking. (line 54) -* gawk, ERRNO variable in <2>: Auto-set. (line 74) +* gawk, ERRNO variable in <2>: Auto-set. (line 73) * gawk, ERRNO variable in <3>: BEGINFILE/ENDFILE. (line 26) * gawk, ERRNO variable in <4>: Close Files And Pipes. (line 139) @@ -31687,7 +31682,7 @@ Index * gawk, FPAT variable in <1>: User-modified. (line 43) * gawk, FPAT variable in: Splitting By Content. (line 27) -* gawk, FUNCTAB array in: Auto-set. (line 115) +* gawk, FUNCTAB array in: Auto-set. (line 114) * 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. @@ -31701,7 +31696,7 @@ Index * gawk, implementation issues, downward compatibility: Compatibility Mode. (line 6) * gawk, implementation issues, limits: Getline Notes. (line 14) -* gawk, implementation issues, pipes: Redirection. (line 135) +* gawk, implementation issues, pipes: Redirection. (line 134) * gawk, installing: Installation. (line 6) * gawk, internationalization and, See internationalization: Internationalization. (line 13) @@ -31718,7 +31713,7 @@ Index * gawk, OS/2 version of: PC Using. (line 16) * gawk, PROCINFO array in <1>: Two-way I/O. (line 117) * gawk, PROCINFO array in <2>: Time Functions. (line 47) -* gawk, PROCINFO array in: Auto-set. (line 128) +* gawk, PROCINFO array in: Auto-set. (line 127) * gawk, regexp constants and: Using Constant Regexps. (line 28) * gawk, regular expressions, case sensitivity: Case-sensitivity. @@ -31726,14 +31721,14 @@ Index * gawk, regular expressions, operators: GNU Regexp Operators. (line 6) * gawk, regular expressions, precedence: Regexp Operators. (line 162) -* gawk, RT variable in <1>: Auto-set. (line 257) +* gawk, RT variable in <1>: Auto-set. (line 256) * gawk, RT variable in <2>: Multiple Line. (line 129) * gawk, RT variable in: awk split records. (line 124) * gawk, See Also awk: Preface. (line 36) * gawk, source code, obtaining: Getting. (line 6) * gawk, splitting fields and: Constant Size. (line 88) * gawk, string-translation functions: I18N Functions. (line 6) -* gawk, SYMTAB array in: Auto-set. (line 261) +* gawk, SYMTAB array in: Auto-set. (line 260) * gawk, TEXTDOMAIN variable in: User-modified. (line 152) * gawk, timestamps: Time Functions. (line 6) * gawk, uses for: Preface. (line 36) @@ -31820,7 +31815,7 @@ Index * 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 172) +* group ID of gawk user: Auto-set. (line 171) * groups, information about: Group Functions. (line 6) * gsub <1>: String Functions. (line 139) * gsub: Using Constant Regexps. @@ -31873,7 +31868,7 @@ Index * Illumos, POSIX-compliant awk: Other Versions. (line 105) * implementation issues, gawk: Notes. (line 6) * implementation issues, gawk, debugging: Compatibility Mode. (line 6) -* implementation issues, gawk, limits <1>: Redirection. (line 135) +* implementation issues, gawk, limits <1>: Redirection. (line 134) * implementation issues, gawk, limits: Getline Notes. (line 14) * in operator <1>: For Statement. (line 75) * in operator <2>: Precedence. (line 83) @@ -32116,7 +32111,7 @@ Index * mawk utility <3>: Concatenation. (line 36) * mawk utility <4>: Getline/Pipe. (line 62) * mawk utility: Escape Sequences. (line 124) -* maximum precision supported by MPFR library: Auto-set. (line 213) +* maximum precision supported by MPFR library: Auto-set. (line 212) * McIlroy, Doug: Glossary. (line 149) * McPhee, Patrick: Contributors. (line 100) * message object files: Explaining gettext. (line 42) @@ -32129,7 +32124,7 @@ Index * messages from extensions: Printing Messages. (line 6) * metacharacters in regular expressions: Regexp Operators. (line 6) * metacharacters, escape sequences for: Escape Sequences. (line 130) -* minimum precision supported by MPFR library: Auto-set. (line 216) +* minimum precision supported by MPFR library: Auto-set. (line 215) * mktime: Time Functions. (line 25) * modifiers, in format specifiers: Format Modifiers. (line 6) * monetary information, localization: Explaining gettext. (line 104) @@ -32183,7 +32178,7 @@ Index (line 47) * nexti debugger command: Debugger Execution Control. (line 49) -* NF variable <1>: Auto-set. (line 104) +* NF variable <1>: Auto-set. (line 103) * NF variable: Fields. (line 33) * NF variable, decrementing: Changing Fields. (line 107) * ni debugger command (alias for nexti): Debugger Execution Control. @@ -32192,9 +32187,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 123) +* NR variable <1>: Auto-set. (line 122) * NR variable: Records. (line 6) -* NR variable, changing: Auto-set. (line 301) +* NR variable, changing: Auto-set. (line 300) * null strings <1>: Basic Data Typing. (line 26) * null strings <2>: Truth Values. (line 6) * null strings <3>: Regexp Field Splitting. @@ -32302,14 +32297,14 @@ Index (line 6) * output, format specifier, OFMT: OFMT. (line 15) * output, formatted: Printf. (line 6) -* output, pipes: Redirection. (line 57) +* output, pipes: Redirection. (line 56) * output, printing, See printing: Printing. (line 6) * output, records: Output Separators. (line 20) * output, standard: Special FD. (line 6) * p debugger command (alias for print): Viewing And Changing Data. (line 36) * Papadopoulos, Panos: Contributors. (line 129) -* parent process ID of gawk process: Auto-set. (line 181) +* parent process ID of gawk process: Auto-set. (line 180) * parentheses (), in a profile: Profiling. (line 146) * parentheses (), regexp operator: Regexp Operators. (line 80) * password file: Passwd Functions. (line 16) @@ -32339,7 +32334,7 @@ Index * pipe, closing: Close Files And Pipes. (line 6) * pipe, input: Getline/Pipe. (line 9) -* pipe, output: Redirection. (line 57) +* pipe, output: Redirection. (line 56) * Pitts, Dave <1>: Bugs. (line 71) * Pitts, Dave: Acknowledgments. (line 60) * Plauger, P.J.: Library Functions. (line 12) @@ -32474,24 +32469,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 175) -* process ID of gawk process: Auto-set. (line 178) +* process group idIDof gawk process: Auto-set. (line 174) +* process ID of gawk process: Auto-set. (line 177) * processes, two-way communications with: Two-way I/O. (line 23) * 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 128) +* PROCINFO array: Auto-set. (line 127) * PROCINFO array, and communications via ptys: Two-way I/O. (line 117) * 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 161) -* PROCINFO array, uses: Auto-set. (line 234) +* PROCINFO array, uses: Auto-set. (line 233) * PROCINFO, values of sorted_in: Controlling Scanning. (line 26) * profiling awk programs: Profiling. (line 6) * profiling awk programs, dynamically: Profiling. (line 179) -* program identifiers: Auto-set. (line 146) +* program identifiers: Auto-set. (line 145) * program, definition of: Getting Started. (line 21) * programmers, attractiveness of: Two-way I/O. (line 6) * programming conventions, --non-decimal-data option: Nondecimal Data. @@ -32647,11 +32642,11 @@ Index * right angle bracket (>), >= operator: Comparison Operators. (line 11) * right angle bracket (>), >> operator (I/O) <1>: Precedence. (line 65) -* right angle bracket (>), >> operator (I/O): Redirection. (line 50) +* right angle bracket (>), >> operator (I/O): Redirection. (line 49) * right shift: Bitwise Functions. (line 52) * right shift, bitwise: Bitwise Functions. (line 32) * Ritchie, Dennis: Basic Data Typing. (line 54) -* RLENGTH variable: Auto-set. (line 244) +* RLENGTH variable: Auto-set. (line 243) * RLENGTH variable, match() function and: String Functions. (line 224) * Robbins, Arnold <1>: Future Extensions. (line 6) * Robbins, Arnold <2>: Bugs. (line 32) @@ -32680,9 +32675,9 @@ Index * RS variable: awk split records. (line 12) * RS variable, multiline records and: Multiple Line. (line 17) * rshift: Bitwise Functions. (line 52) -* RSTART variable: Auto-set. (line 250) +* RSTART variable: Auto-set. (line 249) * RSTART variable, match() function and: String Functions. (line 224) -* RT variable <1>: Auto-set. (line 257) +* RT variable <1>: Auto-set. (line 256) * RT variable <2>: Multiple Line. (line 129) * RT variable: awk split records. (line 124) * Rubin, Paul <1>: Contributors. (line 15) @@ -32702,7 +32697,7 @@ Index * scanning arrays: Scanning an Array. (line 6) * scanning multidimensional arrays: Multiscanning. (line 11) * Schorr, Andrew <1>: Contributors. (line 134) -* Schorr, Andrew <2>: Auto-set. (line 284) +* Schorr, Andrew <2>: Auto-set. (line 283) * Schorr, Andrew: Acknowledgments. (line 60) * Schreiber, Bert: Acknowledgments. (line 38) * Schreiber, Rita: Acknowledgments. (line 38) @@ -32752,7 +32747,7 @@ Index * shadowing of variable values: Definition Syntax. (line 61) * shell quoting, double quote: Read Terminal. (line 25) * shell quoting, rules for: Quoting. (line 6) -* shells, piping commands into: Redirection. (line 142) +* shells, piping commands into: Redirection. (line 141) * shells, quoting: Using Shell Variables. (line 12) * shells, quoting, rules for: Quoting. (line 18) @@ -32790,7 +32785,7 @@ Index (line 110) * sidebar, Changing FS Does Not Affect the Fields: Field Splitting Summary. (line 38) -* sidebar, Changing NR and FNR: Auto-set. (line 299) +* sidebar, Changing NR and FNR: Auto-set. (line 298) * sidebar, Controlling Output Buffering with system(): I/O Functions. (line 138) * sidebar, Escape Sequences for Metacharacters: Escape Sequences. @@ -32801,7 +32796,7 @@ Index (line 107) * sidebar, Matching the Null String: Gory Details. (line 162) * sidebar, Operator Evaluation Order: Increment Ops. (line 58) -* sidebar, Piping into sh: Redirection. (line 140) +* sidebar, Piping into sh: Redirection. (line 139) * sidebar, Portability Issues with #!: Executable Scripts. (line 31) * sidebar, Recipe For A Programming Language: History. (line 6) * sidebar, RS = "\0" Is Not Portable: gawk split records. (line 63) @@ -32952,9 +32947,9 @@ Index * substr: String Functions. (line 479) * substring: String Functions. (line 479) * Sumner, Andrew: Other Versions. (line 64) -* supplementary groups of gawk process: Auto-set. (line 229) +* supplementary groups of gawk process: Auto-set. (line 228) * switch statement: Switch Statement. (line 6) -* SYMTAB array: Auto-set. (line 261) +* SYMTAB array: Auto-set. (line 260) * syntactic ambiguity: /= operator vs. /=.../ regexp constant: Assignment Ops. (line 148) * system: I/O Functions. (line 75) @@ -33038,7 +33033,7 @@ Index * troubleshooting, match() function: String Functions. (line 289) * troubleshooting, print statement, omitting commas: Print Examples. (line 31) -* troubleshooting, printing: Redirection. (line 118) +* troubleshooting, printing: Redirection. (line 117) * troubleshooting, quotes with file names: Special FD. (line 68) * troubleshooting, readable data files: File Checking. (line 6) * troubleshooting, regexp constants vs. string constants: Computed Regexps. @@ -33132,10 +33127,10 @@ Index * variables, uninitialized, as array subscripts: Uninitialized Subscripts. (line 6) * variables, user-defined: Variables. (line 6) -* version of gawk: Auto-set. (line 199) -* version of gawk extension API: Auto-set. (line 224) -* version of GNU MP library: Auto-set. (line 210) -* version of GNU MPFR library: Auto-set. (line 206) +* version of gawk: Auto-set. (line 198) +* version of gawk extension API: Auto-set. (line 223) +* version of GNU MP library: Auto-set. (line 209) +* version of GNU MPFR library: Auto-set. (line 205) * vertical bar (|): Regexp Operators. (line 70) * vertical bar (|), | operator (I/O) <1>: Precedence. (line 65) * vertical bar (|), | operator (I/O): Getline/Pipe. (line 9) @@ -33200,11 +33195,11 @@ Index * {} (braces), statements, grouping: Statements. (line 10) * | (vertical bar): Regexp Operators. (line 70) * | (vertical bar), | operator (I/O) <1>: Precedence. (line 65) -* | (vertical bar), | operator (I/O) <2>: Redirection. (line 57) +* | (vertical bar), | operator (I/O) <2>: Redirection. (line 56) * | (vertical bar), | operator (I/O): Getline/Pipe. (line 9) * | (vertical bar), |& operator (I/O) <1>: Two-way I/O. (line 44) * | (vertical bar), |& operator (I/O) <2>: Precedence. (line 65) -* | (vertical bar), |& operator (I/O) <3>: Redirection. (line 102) +* | (vertical bar), |& operator (I/O) <3>: Redirection. (line 101) * | (vertical bar), |& operator (I/O): Getline/Coprocess. (line 6) * | (vertical bar), |& operator (I/O), pipes, closing: Close Files And Pipes. (line 119) @@ -33245,515 +33240,515 @@ Node: Read Terminal74337 Ref: Read Terminal-Footnote-175987 Ref: Read Terminal-Footnote-276263 Node: Long76434 -Node: Executable Scripts77810 -Ref: Executable Scripts-Footnote-179643 -Ref: Executable Scripts-Footnote-279745 -Node: Comments80292 -Node: Quoting82759 -Node: DOS Quoting88075 -Node: Sample Data Files88750 -Node: Very Simple91265 -Node: Two Rules95903 -Node: More Complex97798 -Ref: More Complex-Footnote-1100730 -Node: Statements/Lines100815 -Ref: Statements/Lines-Footnote-1105270 -Node: Other Features105535 -Node: When106463 -Node: Invoking Gawk108611 -Node: Command Line110074 -Node: Options110865 -Ref: Options-Footnote-1126677 -Node: Other Arguments126702 -Node: Naming Standard Input129364 -Node: Environment Variables130458 -Node: AWKPATH Variable131016 -Ref: AWKPATH Variable-Footnote-1133887 -Ref: AWKPATH Variable-Footnote-2133932 -Node: AWKLIBPATH Variable134192 -Node: Other Environment Variables134951 -Node: Exit Status138606 -Node: Include Files139281 -Node: Loading Shared Libraries142859 -Node: Obsolete144242 -Node: Undocumented144939 -Node: Regexp145181 -Node: Regexp Usage146570 -Node: Escape Sequences148603 -Node: Regexp Operators154270 -Ref: Regexp Operators-Footnote-1161750 -Ref: Regexp Operators-Footnote-2161897 -Node: Bracket Expressions161995 -Ref: table-char-classes163885 -Node: GNU Regexp Operators166408 -Node: Case-sensitivity170131 -Ref: Case-sensitivity-Footnote-1173023 -Ref: Case-sensitivity-Footnote-2173258 -Node: Leftmost Longest173366 -Node: Computed Regexps174567 -Node: Reading Files177916 -Node: Records179918 -Node: awk split records180653 -Node: gawk split records185511 -Ref: gawk split records-Footnote-1190032 -Node: Fields190069 -Ref: Fields-Footnote-1193033 -Node: Nonconstant Fields193119 -Ref: Nonconstant Fields-Footnote-1195349 -Node: Changing Fields195551 -Node: Field Separators201505 -Node: Default Field Splitting204207 -Node: Regexp Field Splitting205324 -Node: Single Character Fields208665 -Node: Command Line Field Separator209724 -Node: Full Line Fields213066 -Ref: Full Line Fields-Footnote-1213574 -Node: Field Splitting Summary213620 -Ref: Field Splitting Summary-Footnote-1216719 -Node: Constant Size216820 -Node: Splitting By Content221427 -Ref: Splitting By Content-Footnote-1225177 -Node: Multiple Line225217 -Ref: Multiple Line-Footnote-1231073 -Node: Getline231252 -Node: Plain Getline233468 -Node: Getline/Variable235563 -Node: Getline/File236710 -Node: Getline/Variable/File238094 -Ref: Getline/Variable/File-Footnote-1239693 -Node: Getline/Pipe239780 -Node: Getline/Variable/Pipe242479 -Node: Getline/Coprocess243586 -Node: Getline/Variable/Coprocess244838 -Node: Getline Notes245575 -Node: Getline Summary248379 -Ref: table-getline-variants248787 -Node: Read Timeout249699 -Ref: Read Timeout-Footnote-1253526 -Node: Command line directories253584 -Node: Printing254466 -Node: Print256097 -Node: Print Examples257438 -Node: Output Separators260217 -Node: OFMT262233 -Node: Printf263591 -Node: Basic Printf264497 -Node: Control Letters266036 -Node: Format Modifiers269890 -Node: Printf Examples275917 -Node: Redirection278624 -Node: Special Files285596 -Node: Special FD286129 -Ref: Special FD-Footnote-1289753 -Node: Special Network289827 -Node: Special Caveats290677 -Node: Close Files And Pipes291473 -Ref: Close Files And Pipes-Footnote-1298611 -Ref: Close Files And Pipes-Footnote-2298759 -Node: Expressions298909 -Node: Values300041 -Node: Constants300717 -Node: Scalar Constants301397 -Ref: Scalar Constants-Footnote-1302256 -Node: Nondecimal-numbers302506 -Node: Regexp Constants305506 -Node: Using Constant Regexps305981 -Node: Variables309051 -Node: Using Variables309706 -Node: Assignment Options311430 -Node: Conversion313305 -Ref: table-locale-affects318741 -Ref: Conversion-Footnote-1319365 -Node: All Operators319474 -Node: Arithmetic Ops320104 -Node: Concatenation322609 -Ref: Concatenation-Footnote-1325405 -Node: Assignment Ops325525 -Ref: table-assign-ops330508 -Node: Increment Ops331825 -Node: Truth Values and Conditions335263 -Node: Truth Values336346 -Node: Typing and Comparison337395 -Node: Variable Typing338188 -Ref: Variable Typing-Footnote-1342088 -Node: Comparison Operators342210 -Ref: table-relational-ops342620 -Node: POSIX String Comparison346168 -Ref: POSIX String Comparison-Footnote-1347252 -Node: Boolean Ops347390 -Ref: Boolean Ops-Footnote-1351460 -Node: Conditional Exp351551 -Node: Function Calls353278 -Node: Precedence357036 -Node: Locales360705 -Node: Patterns and Actions362308 -Node: Pattern Overview363362 -Node: Regexp Patterns365039 -Node: Expression Patterns365582 -Node: Ranges369363 -Node: BEGIN/END372469 -Node: Using BEGIN/END373231 -Ref: Using BEGIN/END-Footnote-1375967 -Node: I/O And BEGIN/END376073 -Node: BEGINFILE/ENDFILE378358 -Node: Empty381289 -Node: Using Shell Variables381606 -Node: Action Overview383889 -Node: Statements386216 -Node: If Statement388064 -Node: While Statement389562 -Node: Do Statement391606 -Node: For Statement392762 -Node: Switch Statement395914 -Node: Break Statement398017 -Node: Continue Statement400072 -Node: Next Statement401865 -Node: Nextfile Statement404255 -Node: Exit Statement406910 -Node: Built-in Variables409314 -Node: User-modified410410 -Ref: User-modified-Footnote-1418095 -Node: Auto-set418157 -Ref: Auto-set-Footnote-1430722 -Ref: Auto-set-Footnote-2430927 -Node: ARGC and ARGV430983 -Node: Arrays434837 -Node: Array Basics436335 -Node: Array Intro437161 -Ref: figure-array-elements439134 -Node: Reference to Elements441541 -Node: Assigning Elements443814 -Node: Array Example444305 -Node: Scanning an Array446037 -Node: Controlling Scanning449052 -Ref: Controlling Scanning-Footnote-1454225 -Node: Delete454541 -Ref: Delete-Footnote-1457306 -Node: Numeric Array Subscripts457363 -Node: Uninitialized Subscripts459546 -Node: Multidimensional461171 -Node: Multiscanning464264 -Node: Arrays of Arrays465853 -Node: Functions470493 -Node: Built-in471312 -Node: Calling Built-in472390 -Node: Numeric Functions474378 -Ref: Numeric Functions-Footnote-1478212 -Ref: Numeric Functions-Footnote-2478569 -Ref: Numeric Functions-Footnote-3478617 -Node: String Functions478886 -Ref: String Functions-Footnote-1501897 -Ref: String Functions-Footnote-2502026 -Ref: String Functions-Footnote-3502274 -Node: Gory Details502361 -Ref: table-sub-escapes504030 -Ref: table-sub-posix-92505384 -Ref: table-sub-proposed506735 -Ref: table-posix-sub508089 -Ref: table-gensub-escapes509634 -Ref: Gory Details-Footnote-1510810 -Ref: Gory Details-Footnote-2510861 -Node: I/O Functions511012 -Ref: I/O Functions-Footnote-1518135 -Node: Time Functions518282 -Ref: Time Functions-Footnote-1528746 -Ref: Time Functions-Footnote-2528814 -Ref: Time Functions-Footnote-3528972 -Ref: Time Functions-Footnote-4529083 -Ref: Time Functions-Footnote-5529195 -Ref: Time Functions-Footnote-6529422 -Node: Bitwise Functions529688 -Ref: table-bitwise-ops530250 -Ref: Bitwise Functions-Footnote-1534495 -Node: Type Functions534679 -Node: I18N Functions535821 -Node: User-defined537466 -Node: Definition Syntax538270 -Ref: Definition Syntax-Footnote-1543195 -Node: Function Example543264 -Ref: Function Example-Footnote-1545908 -Node: Function Caveats545930 -Node: Calling A Function546448 -Node: Variable Scope547403 -Node: Pass By Value/Reference550391 -Node: Return Statement553899 -Node: Dynamic Typing556883 -Node: Indirect Calls557812 -Node: Library Functions567499 -Ref: Library Functions-Footnote-1571012 -Ref: Library Functions-Footnote-2571155 -Node: Library Names571326 -Ref: Library Names-Footnote-1574799 -Ref: Library Names-Footnote-2575019 -Node: General Functions575105 -Node: Strtonum Function576133 -Node: Assert Function579063 -Node: Round Function582389 -Node: Cliff Random Function583930 -Node: Ordinal Functions584946 -Ref: Ordinal Functions-Footnote-1588023 -Ref: Ordinal Functions-Footnote-2588275 -Node: Join Function588486 -Ref: Join Function-Footnote-1590257 -Node: Getlocaltime Function590457 -Node: Readfile Function594193 -Node: Data File Management596032 -Node: Filetrans Function596664 -Node: Rewind Function600733 -Node: File Checking602120 -Ref: File Checking-Footnote-1603252 -Node: Empty Files603453 -Node: Ignoring Assigns605683 -Node: Getopt Function607237 -Ref: Getopt Function-Footnote-1618540 -Node: Passwd Functions618743 -Ref: Passwd Functions-Footnote-1627722 -Node: Group Functions627810 -Ref: Group Functions-Footnote-1635752 -Node: Walking Arrays635965 -Node: Sample Programs638101 -Node: Running Examples638775 -Node: Clones639503 -Node: Cut Program640727 -Node: Egrep Program650580 -Ref: Egrep Program-Footnote-1658551 -Node: Id Program658661 -Node: Split Program662325 -Ref: Split Program-Footnote-1665863 -Node: Tee Program665991 -Node: Uniq Program668798 -Node: Wc Program676228 -Ref: Wc Program-Footnote-1680496 -Ref: Wc Program-Footnote-2680696 -Node: Miscellaneous Programs680788 -Node: Dupword Program681976 -Node: Alarm Program684007 -Node: Translate Program688814 -Ref: Translate Program-Footnote-1693205 -Ref: Translate Program-Footnote-2693475 -Node: Labels Program693609 -Ref: Labels Program-Footnote-1696980 -Node: Word Sorting697064 -Node: History Sorting701107 -Node: Extract Program702943 -Ref: Extract Program-Footnote-1710473 -Node: Simple Sed710602 -Node: Igawk Program713664 -Ref: Igawk Program-Footnote-1728839 -Ref: Igawk Program-Footnote-2729040 -Node: Anagram Program729178 -Node: Signature Program732246 -Node: Advanced Features733493 -Node: Nondecimal Data735379 -Node: Array Sorting736956 -Node: Controlling Array Traversal737653 -Node: Array Sorting Functions745933 -Ref: Array Sorting Functions-Footnote-1749840 -Node: Two-way I/O750034 -Ref: Two-way I/O-Footnote-1755550 -Node: TCP/IP Networking755632 -Node: Profiling758476 -Node: Internationalization765984 -Node: I18N and L10N767409 -Node: Explaining gettext768095 -Ref: Explaining gettext-Footnote-1773235 -Ref: Explaining gettext-Footnote-2773419 -Node: Programmer i18n773584 -Node: Translator i18n777809 -Node: String Extraction778603 -Ref: String Extraction-Footnote-1779564 -Node: Printf Ordering779650 -Ref: Printf Ordering-Footnote-1782432 -Node: I18N Portability782496 -Ref: I18N Portability-Footnote-1784945 -Node: I18N Example785008 -Ref: I18N Example-Footnote-1787730 -Node: Gawk I18N787802 -Node: Debugger788423 -Node: Debugging789394 -Node: Debugging Concepts789835 -Node: Debugging Terms791691 -Node: Awk Debugging794288 -Node: Sample Debugging Session795180 -Node: Debugger Invocation795700 -Node: Finding The Bug797033 -Node: List of Debugger Commands803515 -Node: Breakpoint Control804847 -Node: Debugger Execution Control808511 -Node: Viewing And Changing Data811871 -Node: Execution Stack815229 -Node: Debugger Info816742 -Node: Miscellaneous Debugger Commands820736 -Node: Readline Support825920 -Node: Limitations826812 -Node: Arbitrary Precision Arithmetic829060 -Ref: Arbitrary Precision Arithmetic-Footnote-1830709 -Node: General Arithmetic830857 -Node: Floating Point Issues832577 -Node: String Conversion Precision833458 -Ref: String Conversion Precision-Footnote-1835163 -Node: Unexpected Results835272 -Node: POSIX Floating Point Problems837425 -Ref: POSIX Floating Point Problems-Footnote-1841246 -Node: Integer Programming841284 -Node: Floating-point Programming843095 -Ref: Floating-point Programming-Footnote-1849423 -Ref: Floating-point Programming-Footnote-2849693 -Node: Floating-point Representation849957 -Node: Floating-point Context851122 -Ref: table-ieee-formats851961 -Node: Rounding Mode853345 -Ref: table-rounding-modes853824 -Ref: Rounding Mode-Footnote-1856839 -Node: Gawk and MPFR857018 -Node: Arbitrary Precision Floats858427 -Ref: Arbitrary Precision Floats-Footnote-1860870 -Node: Setting Precision861191 -Ref: table-predefined-precision-strings861875 -Node: Setting Rounding Mode864020 -Ref: table-gawk-rounding-modes864424 -Node: Floating-point Constants865611 -Node: Changing Precision867063 -Ref: Changing Precision-Footnote-1868455 -Node: Exact Arithmetic868629 -Node: Arbitrary Precision Integers871763 -Ref: Arbitrary Precision Integers-Footnote-1874778 -Node: Dynamic Extensions874925 -Node: Extension Intro876383 -Node: Plugin License877648 -Node: Extension Mechanism Outline878333 -Ref: figure-load-extension878757 -Ref: figure-load-new-function880242 -Ref: figure-call-new-function881244 -Node: Extension API Description883228 -Node: Extension API Functions Introduction884678 -Node: General Data Types889544 -Ref: General Data Types-Footnote-1895237 -Node: Requesting Values895536 -Ref: table-value-types-returned896273 -Node: Memory Allocation Functions897231 -Ref: Memory Allocation Functions-Footnote-1899978 -Node: Constructor Functions900074 -Node: Registration Functions901832 -Node: Extension Functions902517 -Node: Exit Callback Functions904819 -Node: Extension Version String906069 -Node: Input Parsers906719 -Node: Output Wrappers916522 -Node: Two-way processors921038 -Node: Printing Messages923241 -Ref: Printing Messages-Footnote-1924318 -Node: Updating `ERRNO'924470 -Node: Accessing Parameters925209 -Node: Symbol Table Access926439 -Node: Symbol table by name926953 -Node: Symbol table by cookie928929 -Ref: Symbol table by cookie-Footnote-1933062 -Node: Cached values933125 -Ref: Cached values-Footnote-1936630 -Node: Array Manipulation936721 -Ref: Array Manipulation-Footnote-1937819 -Node: Array Data Types937858 -Ref: Array Data Types-Footnote-1940561 -Node: Array Functions940653 -Node: Flattening Arrays944527 -Node: Creating Arrays951379 -Node: Extension API Variables956110 -Node: Extension Versioning956746 -Node: Extension API Informational Variables958647 -Node: Extension API Boilerplate959733 -Node: Finding Extensions963537 -Node: Extension Example964097 -Node: Internal File Description964827 -Node: Internal File Ops968918 -Ref: Internal File Ops-Footnote-1980464 -Node: Using Internal File Ops980604 -Ref: Using Internal File Ops-Footnote-1982951 -Node: Extension Samples983219 -Node: Extension Sample File Functions984743 -Node: Extension Sample Fnmatch992310 -Node: Extension Sample Fork993789 -Node: Extension Sample Inplace995002 -Node: Extension Sample Ord996780 -Node: Extension Sample Readdir997616 -Ref: table-readdir-file-types998471 -Node: Extension Sample Revout999270 -Node: Extension Sample Rev2way999861 -Node: Extension Sample Read write array1000602 -Node: Extension Sample Readfile1002481 -Node: Extension Sample API Tests1003581 -Node: Extension Sample Time1004106 -Node: gawkextlib1005421 -Node: Language History1008208 -Node: V7/SVR3.11009802 -Node: SVR41012122 -Node: POSIX1013564 -Node: BTL1014950 -Node: POSIX/GNU1015684 -Node: Feature History1021283 -Node: Common Extensions1034395 -Node: Ranges and Locales1035707 -Ref: Ranges and Locales-Footnote-11040324 -Ref: Ranges and Locales-Footnote-21040351 -Ref: Ranges and Locales-Footnote-31040585 -Node: Contributors1040806 -Node: Installation1046244 -Node: Gawk Distribution1047138 -Node: Getting1047622 -Node: Extracting1048448 -Node: Distribution contents1050090 -Node: Unix Installation1055807 -Node: Quick Installation1056424 -Node: Additional Configuration Options1058866 -Node: Configuration Philosophy1060604 -Node: Non-Unix Installation1062955 -Node: PC Installation1063413 -Node: PC Binary Installation1064724 -Node: PC Compiling1066572 -Ref: PC Compiling-Footnote-11069571 -Node: PC Testing1069676 -Node: PC Using1070852 -Node: Cygwin1075010 -Node: MSYS1075819 -Node: VMS Installation1076333 -Node: VMS Compilation1077129 -Ref: VMS Compilation-Footnote-11078350 -Node: VMS Dynamic Extensions1078408 -Node: VMS Installation Details1079781 -Node: VMS Running1082032 -Node: VMS GNV1084866 -Node: VMS Old Gawk1085589 -Node: Bugs1086059 -Node: Other Versions1090063 -Node: Notes1096288 -Node: Compatibility Mode1097088 -Node: Additions1097870 -Node: Accessing The Source1098795 -Node: Adding Code1100231 -Node: New Ports1106409 -Node: Derived Files1110890 -Ref: Derived Files-Footnote-11115971 -Ref: Derived Files-Footnote-21116005 -Ref: Derived Files-Footnote-31116601 -Node: Future Extensions1116715 -Node: Implementation Limitations1117321 -Node: Extension Design1118569 -Node: Old Extension Problems1119723 -Ref: Old Extension Problems-Footnote-11121240 -Node: Extension New Mechanism Goals1121297 -Ref: Extension New Mechanism Goals-Footnote-11124658 -Node: Extension Other Design Decisions1124847 -Node: Extension Future Growth1126953 -Node: Old Extension Mechanism1127789 -Node: Basic Concepts1129529 -Node: Basic High Level1130210 -Ref: figure-general-flow1130482 -Ref: figure-process-flow1131081 -Ref: Basic High Level-Footnote-11134310 -Node: Basic Data Typing1134495 -Node: Glossary1137822 -Node: Copying1162974 -Node: GNU Free Documentation License1200530 -Node: Index1225666 +Node: Executable Scripts77782 +Ref: Executable Scripts-Footnote-179615 +Ref: Executable Scripts-Footnote-279717 +Node: Comments80250 +Node: Quoting82717 +Node: DOS Quoting88026 +Node: Sample Data Files88701 +Node: Very Simple91216 +Node: Two Rules95847 +Node: More Complex97742 +Ref: More Complex-Footnote-1100667 +Node: Statements/Lines100752 +Ref: Statements/Lines-Footnote-1105207 +Node: Other Features105472 +Node: When106400 +Node: Invoking Gawk108548 +Node: Command Line110011 +Node: Options110802 +Ref: Options-Footnote-1126586 +Node: Other Arguments126611 +Node: Naming Standard Input129252 +Node: Environment Variables130332 +Node: AWKPATH Variable130890 +Ref: AWKPATH Variable-Footnote-1133741 +Ref: AWKPATH Variable-Footnote-2133786 +Node: AWKLIBPATH Variable134046 +Node: Other Environment Variables134805 +Node: Exit Status138460 +Node: Include Files139135 +Node: Loading Shared Libraries142699 +Node: Obsolete144083 +Node: Undocumented144780 +Node: Regexp145022 +Node: Regexp Usage146411 +Node: Escape Sequences148444 +Node: Regexp Operators154111 +Ref: Regexp Operators-Footnote-1161591 +Ref: Regexp Operators-Footnote-2161738 +Node: Bracket Expressions161836 +Ref: table-char-classes163726 +Node: GNU Regexp Operators166249 +Node: Case-sensitivity169972 +Ref: Case-sensitivity-Footnote-1172864 +Ref: Case-sensitivity-Footnote-2173099 +Node: Leftmost Longest173207 +Node: Computed Regexps174408 +Node: Reading Files177757 +Node: Records179759 +Node: awk split records180494 +Node: gawk split records185352 +Ref: gawk split records-Footnote-1189873 +Node: Fields189910 +Ref: Fields-Footnote-1192874 +Node: Nonconstant Fields192960 +Ref: Nonconstant Fields-Footnote-1195190 +Node: Changing Fields195392 +Node: Field Separators201346 +Node: Default Field Splitting204048 +Node: Regexp Field Splitting205165 +Node: Single Character Fields208506 +Node: Command Line Field Separator209565 +Node: Full Line Fields212907 +Ref: Full Line Fields-Footnote-1213415 +Node: Field Splitting Summary213461 +Ref: Field Splitting Summary-Footnote-1216560 +Node: Constant Size216661 +Node: Splitting By Content221268 +Ref: Splitting By Content-Footnote-1225018 +Node: Multiple Line225058 +Ref: Multiple Line-Footnote-1230914 +Node: Getline231093 +Node: Plain Getline233309 +Node: Getline/Variable235404 +Node: Getline/File236551 +Node: Getline/Variable/File237927 +Ref: Getline/Variable/File-Footnote-1239526 +Node: Getline/Pipe239613 +Node: Getline/Variable/Pipe242312 +Node: Getline/Coprocess243419 +Node: Getline/Variable/Coprocess244671 +Node: Getline Notes245408 +Node: Getline Summary248212 +Ref: table-getline-variants248620 +Node: Read Timeout249532 +Ref: Read Timeout-Footnote-1253359 +Node: Command line directories253417 +Node: Printing254299 +Node: Print255923 +Node: Print Examples257264 +Node: Output Separators260043 +Node: OFMT262059 +Node: Printf263417 +Node: Basic Printf264323 +Node: Control Letters265862 +Node: Format Modifiers269716 +Node: Printf Examples275743 +Node: Redirection278450 +Node: Special Files285397 +Node: Special FD285913 +Ref: Special FD-Footnote-1289488 +Node: Special Network289562 +Node: Special Caveats290398 +Node: Close Files And Pipes291173 +Ref: Close Files And Pipes-Footnote-1298289 +Ref: Close Files And Pipes-Footnote-2298437 +Node: Expressions298587 +Node: Values299719 +Node: Constants300395 +Node: Scalar Constants301075 +Ref: Scalar Constants-Footnote-1301934 +Node: Nondecimal-numbers302184 +Node: Regexp Constants305184 +Node: Using Constant Regexps305659 +Node: Variables308729 +Node: Using Variables309384 +Node: Assignment Options311108 +Node: Conversion312975 +Ref: table-locale-affects318411 +Ref: Conversion-Footnote-1319035 +Node: All Operators319144 +Node: Arithmetic Ops319774 +Node: Concatenation322279 +Ref: Concatenation-Footnote-1325075 +Node: Assignment Ops325195 +Ref: table-assign-ops330178 +Node: Increment Ops331495 +Node: Truth Values and Conditions334933 +Node: Truth Values336016 +Node: Typing and Comparison337065 +Node: Variable Typing337858 +Ref: Variable Typing-Footnote-1341758 +Node: Comparison Operators341880 +Ref: table-relational-ops342290 +Node: POSIX String Comparison345838 +Ref: POSIX String Comparison-Footnote-1346922 +Node: Boolean Ops347060 +Ref: Boolean Ops-Footnote-1351130 +Node: Conditional Exp351221 +Node: Function Calls352948 +Node: Precedence356706 +Node: Locales360375 +Node: Patterns and Actions361978 +Node: Pattern Overview363032 +Node: Regexp Patterns364709 +Node: Expression Patterns365252 +Node: Ranges369033 +Node: BEGIN/END372139 +Node: Using BEGIN/END372901 +Ref: Using BEGIN/END-Footnote-1375637 +Node: I/O And BEGIN/END375743 +Node: BEGINFILE/ENDFILE378028 +Node: Empty380959 +Node: Using Shell Variables381276 +Node: Action Overview383559 +Node: Statements385886 +Node: If Statement387734 +Node: While Statement389232 +Node: Do Statement391276 +Node: For Statement392432 +Node: Switch Statement395584 +Node: Break Statement397687 +Node: Continue Statement399742 +Node: Next Statement401535 +Node: Nextfile Statement403925 +Node: Exit Statement406580 +Node: Built-in Variables408984 +Node: User-modified410080 +Ref: User-modified-Footnote-1417765 +Node: Auto-set417827 +Ref: Auto-set-Footnote-1430373 +Ref: Auto-set-Footnote-2430578 +Node: ARGC and ARGV430634 +Node: Arrays434473 +Node: Array Basics435971 +Node: Array Intro436797 +Ref: figure-array-elements438770 +Node: Reference to Elements441177 +Node: Assigning Elements443450 +Node: Array Example443941 +Node: Scanning an Array445673 +Node: Controlling Scanning448688 +Ref: Controlling Scanning-Footnote-1453861 +Node: Delete454177 +Ref: Delete-Footnote-1456942 +Node: Numeric Array Subscripts456999 +Node: Uninitialized Subscripts459182 +Node: Multidimensional460807 +Node: Multiscanning463900 +Node: Arrays of Arrays465489 +Node: Functions470129 +Node: Built-in470948 +Node: Calling Built-in472026 +Node: Numeric Functions474014 +Ref: Numeric Functions-Footnote-1477848 +Ref: Numeric Functions-Footnote-2478205 +Ref: Numeric Functions-Footnote-3478253 +Node: String Functions478522 +Ref: String Functions-Footnote-1501533 +Ref: String Functions-Footnote-2501662 +Ref: String Functions-Footnote-3501910 +Node: Gory Details501997 +Ref: table-sub-escapes503666 +Ref: table-sub-posix-92505020 +Ref: table-sub-proposed506371 +Ref: table-posix-sub507725 +Ref: table-gensub-escapes509270 +Ref: Gory Details-Footnote-1510446 +Ref: Gory Details-Footnote-2510497 +Node: I/O Functions510648 +Ref: I/O Functions-Footnote-1517771 +Node: Time Functions517918 +Ref: Time Functions-Footnote-1528382 +Ref: Time Functions-Footnote-2528450 +Ref: Time Functions-Footnote-3528608 +Ref: Time Functions-Footnote-4528719 +Ref: Time Functions-Footnote-5528831 +Ref: Time Functions-Footnote-6529058 +Node: Bitwise Functions529324 +Ref: table-bitwise-ops529886 +Ref: Bitwise Functions-Footnote-1534131 +Node: Type Functions534315 +Node: I18N Functions535457 +Node: User-defined537102 +Node: Definition Syntax537906 +Ref: Definition Syntax-Footnote-1542831 +Node: Function Example542900 +Ref: Function Example-Footnote-1545544 +Node: Function Caveats545566 +Node: Calling A Function546084 +Node: Variable Scope547039 +Node: Pass By Value/Reference550027 +Node: Return Statement553535 +Node: Dynamic Typing556519 +Node: Indirect Calls557448 +Node: Library Functions567135 +Ref: Library Functions-Footnote-1570648 +Ref: Library Functions-Footnote-2570791 +Node: Library Names570962 +Ref: Library Names-Footnote-1574435 +Ref: Library Names-Footnote-2574655 +Node: General Functions574741 +Node: Strtonum Function575769 +Node: Assert Function578699 +Node: Round Function582025 +Node: Cliff Random Function583566 +Node: Ordinal Functions584582 +Ref: Ordinal Functions-Footnote-1587659 +Ref: Ordinal Functions-Footnote-2587911 +Node: Join Function588122 +Ref: Join Function-Footnote-1589893 +Node: Getlocaltime Function590093 +Node: Readfile Function593829 +Node: Data File Management595668 +Node: Filetrans Function596300 +Node: Rewind Function600355 +Node: File Checking601742 +Ref: File Checking-Footnote-1602874 +Node: Empty Files603075 +Node: Ignoring Assigns605298 +Node: Getopt Function606829 +Ref: Getopt Function-Footnote-1618125 +Node: Passwd Functions618328 +Ref: Passwd Functions-Footnote-1627307 +Node: Group Functions627395 +Ref: Group Functions-Footnote-1635337 +Node: Walking Arrays635550 +Node: Sample Programs637686 +Node: Running Examples638360 +Node: Clones639088 +Node: Cut Program640312 +Node: Egrep Program650173 +Ref: Egrep Program-Footnote-1658102 +Node: Id Program658212 +Node: Split Program661876 +Ref: Split Program-Footnote-1665407 +Node: Tee Program665535 +Node: Uniq Program668342 +Node: Wc Program675772 +Ref: Wc Program-Footnote-1680040 +Ref: Wc Program-Footnote-2680240 +Node: Miscellaneous Programs680332 +Node: Dupword Program681520 +Node: Alarm Program683551 +Node: Translate Program688365 +Ref: Translate Program-Footnote-1692756 +Ref: Translate Program-Footnote-2693026 +Node: Labels Program693160 +Ref: Labels Program-Footnote-1696531 +Node: Word Sorting696615 +Node: History Sorting700658 +Node: Extract Program702494 +Ref: Extract Program-Footnote-1710069 +Node: Simple Sed710198 +Node: Igawk Program713260 +Ref: Igawk Program-Footnote-1728436 +Ref: Igawk Program-Footnote-2728637 +Node: Anagram Program728775 +Node: Signature Program731843 +Node: Advanced Features733090 +Node: Nondecimal Data734976 +Node: Array Sorting736553 +Node: Controlling Array Traversal737250 +Node: Array Sorting Functions745530 +Ref: Array Sorting Functions-Footnote-1749437 +Node: Two-way I/O749631 +Ref: Two-way I/O-Footnote-1755147 +Node: TCP/IP Networking755229 +Node: Profiling758073 +Node: Internationalization765581 +Node: I18N and L10N767006 +Node: Explaining gettext767692 +Ref: Explaining gettext-Footnote-1772832 +Ref: Explaining gettext-Footnote-2773016 +Node: Programmer i18n773181 +Node: Translator i18n777406 +Node: String Extraction778200 +Ref: String Extraction-Footnote-1779161 +Node: Printf Ordering779247 +Ref: Printf Ordering-Footnote-1782029 +Node: I18N Portability782093 +Ref: I18N Portability-Footnote-1784542 +Node: I18N Example784605 +Ref: I18N Example-Footnote-1787327 +Node: Gawk I18N787399 +Node: Debugger788012 +Node: Debugging788983 +Node: Debugging Concepts789424 +Node: Debugging Terms791280 +Node: Awk Debugging793877 +Node: Sample Debugging Session794769 +Node: Debugger Invocation795289 +Node: Finding The Bug796622 +Node: List of Debugger Commands803104 +Node: Breakpoint Control804436 +Node: Debugger Execution Control808100 +Node: Viewing And Changing Data811460 +Node: Execution Stack814818 +Node: Debugger Info816331 +Node: Miscellaneous Debugger Commands820325 +Node: Readline Support825509 +Node: Limitations826401 +Node: Arbitrary Precision Arithmetic828649 +Ref: Arbitrary Precision Arithmetic-Footnote-1830298 +Node: General Arithmetic830446 +Node: Floating Point Issues832166 +Node: String Conversion Precision833047 +Ref: String Conversion Precision-Footnote-1834752 +Node: Unexpected Results834861 +Node: POSIX Floating Point Problems837014 +Ref: POSIX Floating Point Problems-Footnote-1840835 +Node: Integer Programming840873 +Node: Floating-point Programming842684 +Ref: Floating-point Programming-Footnote-1849012 +Ref: Floating-point Programming-Footnote-2849282 +Node: Floating-point Representation849546 +Node: Floating-point Context850711 +Ref: table-ieee-formats851550 +Node: Rounding Mode852934 +Ref: table-rounding-modes853413 +Ref: Rounding Mode-Footnote-1856428 +Node: Gawk and MPFR856607 +Node: Arbitrary Precision Floats858016 +Ref: Arbitrary Precision Floats-Footnote-1860459 +Node: Setting Precision860780 +Ref: table-predefined-precision-strings861464 +Node: Setting Rounding Mode863609 +Ref: table-gawk-rounding-modes864013 +Node: Floating-point Constants865200 +Node: Changing Precision866652 +Ref: Changing Precision-Footnote-1868044 +Node: Exact Arithmetic868218 +Node: Arbitrary Precision Integers871352 +Ref: Arbitrary Precision Integers-Footnote-1874367 +Node: Dynamic Extensions874514 +Node: Extension Intro875972 +Node: Plugin License877237 +Node: Extension Mechanism Outline877922 +Ref: figure-load-extension878346 +Ref: figure-load-new-function879831 +Ref: figure-call-new-function880833 +Node: Extension API Description882817 +Node: Extension API Functions Introduction884267 +Node: General Data Types889133 +Ref: General Data Types-Footnote-1894826 +Node: Requesting Values895125 +Ref: table-value-types-returned895862 +Node: Memory Allocation Functions896820 +Ref: Memory Allocation Functions-Footnote-1899567 +Node: Constructor Functions899663 +Node: Registration Functions901421 +Node: Extension Functions902106 +Node: Exit Callback Functions904408 +Node: Extension Version String905658 +Node: Input Parsers906308 +Node: Output Wrappers916111 +Node: Two-way processors920627 +Node: Printing Messages922831 +Ref: Printing Messages-Footnote-1923908 +Node: Updating `ERRNO'924060 +Node: Accessing Parameters924799 +Node: Symbol Table Access926029 +Node: Symbol table by name926543 +Node: Symbol table by cookie928519 +Ref: Symbol table by cookie-Footnote-1932652 +Node: Cached values932715 +Ref: Cached values-Footnote-1936220 +Node: Array Manipulation936311 +Ref: Array Manipulation-Footnote-1937409 +Node: Array Data Types937448 +Ref: Array Data Types-Footnote-1940151 +Node: Array Functions940243 +Node: Flattening Arrays944117 +Node: Creating Arrays950969 +Node: Extension API Variables955700 +Node: Extension Versioning956336 +Node: Extension API Informational Variables958237 +Node: Extension API Boilerplate959323 +Node: Finding Extensions963127 +Node: Extension Example963687 +Node: Internal File Description964417 +Node: Internal File Ops968508 +Ref: Internal File Ops-Footnote-1980054 +Node: Using Internal File Ops980194 +Ref: Using Internal File Ops-Footnote-1982541 +Node: Extension Samples982809 +Node: Extension Sample File Functions984333 +Node: Extension Sample Fnmatch991901 +Node: Extension Sample Fork993368 +Node: Extension Sample Inplace994581 +Node: Extension Sample Ord996347 +Node: Extension Sample Readdir997183 +Ref: table-readdir-file-types998032 +Node: Extension Sample Revout998831 +Node: Extension Sample Rev2way999422 +Node: Extension Sample Read write array1000163 +Node: Extension Sample Readfile1002042 +Node: Extension Sample API Tests1003142 +Node: Extension Sample Time1003667 +Node: gawkextlib1004982 +Node: Language History1007769 +Node: V7/SVR3.11009363 +Node: SVR41011683 +Node: POSIX1013125 +Node: BTL1014511 +Node: POSIX/GNU1015245 +Node: Feature History1020844 +Node: Common Extensions1033956 +Node: Ranges and Locales1035268 +Ref: Ranges and Locales-Footnote-11039885 +Ref: Ranges and Locales-Footnote-21039912 +Ref: Ranges and Locales-Footnote-31040146 +Node: Contributors1040367 +Node: Installation1045805 +Node: Gawk Distribution1046699 +Node: Getting1047183 +Node: Extracting1048009 +Node: Distribution contents1049651 +Node: Unix Installation1055368 +Node: Quick Installation1055985 +Node: Additional Configuration Options1058427 +Node: Configuration Philosophy1060165 +Node: Non-Unix Installation1062516 +Node: PC Installation1062974 +Node: PC Binary Installation1064285 +Node: PC Compiling1066133 +Ref: PC Compiling-Footnote-11069132 +Node: PC Testing1069237 +Node: PC Using1070413 +Node: Cygwin1074571 +Node: MSYS1075380 +Node: VMS Installation1075894 +Node: VMS Compilation1076690 +Ref: VMS Compilation-Footnote-11077905 +Node: VMS Dynamic Extensions1077963 +Node: VMS Installation Details1079336 +Node: VMS Running1081582 +Node: VMS GNV1084416 +Node: VMS Old Gawk1085139 +Node: Bugs1085609 +Node: Other Versions1089613 +Node: Notes1095838 +Node: Compatibility Mode1096638 +Node: Additions1097420 +Node: Accessing The Source1098345 +Node: Adding Code1099781 +Node: New Ports1105959 +Node: Derived Files1110440 +Ref: Derived Files-Footnote-11115521 +Ref: Derived Files-Footnote-21115555 +Ref: Derived Files-Footnote-31116151 +Node: Future Extensions1116265 +Node: Implementation Limitations1116871 +Node: Extension Design1118119 +Node: Old Extension Problems1119273 +Ref: Old Extension Problems-Footnote-11120790 +Node: Extension New Mechanism Goals1120847 +Ref: Extension New Mechanism Goals-Footnote-11124208 +Node: Extension Other Design Decisions1124397 +Node: Extension Future Growth1126503 +Node: Old Extension Mechanism1127339 +Node: Basic Concepts1129079 +Node: Basic High Level1129760 +Ref: figure-general-flow1130032 +Ref: figure-process-flow1130631 +Ref: Basic High Level-Footnote-11133860 +Node: Basic Data Typing1134045 +Node: Glossary1137372 +Node: Copying1162524 +Node: GNU Free Documentation License1200080 +Node: Index1225216  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 4d63bae9..093c776b 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -51,12 +51,10 @@ @c applies to and all the info about who's publishing this edition @c These apply across the board. -@set UPDATE-MONTH April, 2014 +@set UPDATE-MONTH June, 2014 @set VERSION 4.1 @set PATCHLEVEL 1 -@set FSF - @set TITLE GAWK: Effective AWK Programming @set SUBTITLE A User's Guide for GNU Awk @set EDITION 4.1 @@ -167,6 +165,21 @@ @end macro @end ifdocbook +@ifclear FOR_PRINT +@set FN file name +@set FFN File Name +@set DF data file +@set DDF Data File +@set PVERSION version +@end ifclear +@ifset FOR_PRINT +@set FN filename +@set FFN Filename +@set DF datafile +@set DDF Datafile +@set PVERSION Version +@end ifset + @c For HTML, spell out email addresses, to avoid problems with @c address harvesters for spammers. @ifhtml @@ -1378,11 +1391,11 @@ wrote the bulk of @cite{TCP/IP Internetworking with @command{gawk}} (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} version 3.1. +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} version 4.0, in 2011. +@command{gawk} @value{PVERSION} 4.0, in 2011. @xref{Contributors}, for a complete list of those who made important contributions to @command{gawk}. @@ -1454,7 +1467,7 @@ the POSIX standard for @command{awk} are noted. 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 document. +expert user and for the online Info and HTML versions of the @value{DOCUMENT}. @end ifnotinfo There are sidebars @@ -1676,7 +1689,7 @@ emphasized @emph{like this}, and if a point needs to be made strongly, it is done @strong{like this}. 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, file names are indicated like this: @file{/path/to/ourfile}. +Finally, @var{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, @@ -2331,7 +2344,7 @@ awk -f @var{source-file} @var{input-file1} @var{input-file2} @dots{} @cindex @option{-f} option @cindex command line, option @option{-f} The @option{-f} instructs the @command{awk} utility to get the @command{awk} program -from the file @var{source-file}. Any file name can be used for +from the file @var{source-file}. Any @var{FN} can be used for @var{source-file}. For example, you could put the program: @example @@ -2356,8 +2369,8 @@ awk "BEGIN @{ print \"Don't Panic!\" @}" @noindent This was explained earlier (@pxref{Read Terminal}). -Note that you don't usually need single quotes around the file name that you -specify with @option{-f}, because most file names don't contain any of the shell's +Note that you don't usually need single quotes around the @var{FN} that you +specify with @option{-f}, because most @var{FN}s don't contain any of the shell's special characters. Notice that in @file{advice}, the @command{awk} program did not have single quotes around it. The quotes are only needed for programs that are provided on the @command{awk} command line. @@ -2367,7 +2380,7 @@ for programs that are provided on the @command{awk} command line. @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, -you can add the extension @file{.awk} to the file name. This doesn't +you can add the extension @file{.awk} to the @var{FN}. This doesn't affect the execution of the @command{awk} program but it does make ``housekeeping'' easier. @@ -2394,13 +2407,13 @@ BEGIN @{ print "Don't Panic!" @} After making this file executable (with the @command{chmod} utility), simply type @samp{advice} at the shell and the system arranges to run @command{awk}@footnote{The -line beginning with @samp{#!} lists the full file name of an interpreter +line beginning with @samp{#!} lists the full @var{FN} of an interpreter to run and an optional initial command-line argument to pass to that interpreter. The operating system then runs the interpreter with the given argument and the full argument list of the executed program. The first argument -in the list is the full file name of the @command{awk} program. +in the list is the full @var{FN} of the @command{awk} program. The rest of the -argument list contains either options to @command{awk}, or data files, +argument list contains either options to @command{awk}, or @value{DF}s, or both. Note that on many systems @command{awk} may be found in @file{/usr/bin} instead of in @file{/bin}. Caveat Emptor.} as if you had typed @samp{awk -f advice}: @@ -2671,7 +2684,7 @@ awk -F"" '@var{program}' @var{files} # wrong! @noindent In the second case, @command{awk} will attempt to use the text of the program -as the value of @code{FS}, and the first file name as the text of the program! +as the value of @code{FS}, and the first @var{FN} as the text of the program! This results in syntax errors at best, and confusing behavior at worst. @end itemize @@ -2787,18 +2800,18 @@ gawk "@{ print \"\042\" $0 \"\042\" @}" @var{file} @node Sample Data Files -@section Data Files for the Examples +@section @value{DDF}s for the Examples @cindex input files, examples @cindex @code{mail-list} file Many of the examples in this @value{DOCUMENT} take their input from two sample -data files. The first, @file{mail-list}, represents a list of peoples' names +@value{DF}s. The first, @file{mail-list}, represents a list of peoples' names together with their email addresses and information about those people. -The second data file, called @file{inventory-shipped}, contains +The second @value{DF}, called @file{inventory-shipped}, contains information about monthly shipments. In both files, each line is considered to be one @dfn{record}. -In the data file @file{mail-list}, each record contains the name of a person, +In the @value{DF} @file{mail-list}, each record contains the name of a person, his/her phone number, his/her email-address, and a code for their relationship with the author of the list. An @samp{A} in the last column means that the person is an acquaintance. An @samp{F} in the last @@ -2827,7 +2840,7 @@ Jean-Paul 555-2127 jeanpaul.campanorum@@nyu.edu R @end example @cindex @code{inventory-shipped} file -The data file @file{inventory-shipped} represents +The @value{DF} @file{inventory-shipped} represents information about shipments during the year. Each record contains the month, the number of green crates shipped, the number of red boxes shipped, the number of @@ -2919,9 +2932,9 @@ 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 please read the rest of the @value{DOCUMENT} to become an @command{awk} expert!) -Most of the examples use a data file named @file{data}. This is just a +Most of the examples use a @value{DF} named @file{data}. This is just a placeholder; if you use these programs yourself, substitute -your own file names for @file{data}. +your own @var{FN}s for @file{data}. For future reference, note that there is often more than one way to do things in @command{awk}. At some point, you may want to look back at these examples and see if @@ -3011,7 +3024,7 @@ awk 'END @{ print NR @}' data @end example @item -Print the even-numbered lines in the data file: +Print the even-numbered lines in the @value{DF}: @example awk 'NR % 2 == 0' data @@ -3053,7 +3066,7 @@ This program prints every line that contains the string @samp{12} @emph{or} the string @samp{21}. If a line contains both strings, it is printed twice, once by each rule. -This is what happens if we run this program on our two sample data files, +This is what happens if we run this program on our two sample @value{DF}s, @file{mail-list} and @file{inventory-shipped}: @example @@ -3113,7 +3126,7 @@ the file. The fourth field identifies the group of the file. The fifth field contains the size of the file in bytes. The sixth, seventh, and eighth fields contain the month, day, and time, respectively, that the file was last modified. Finally, the ninth field -contains the file name.@footnote{The @samp{LC_ALL=C} is +contains the @var{FN}.@footnote{The @samp{LC_ALL=C} is needed to produce this traditional-style output from @command{ls}.} @c @cindex automatic initialization @@ -3516,8 +3529,8 @@ conventions. @cindex @code{-} (hyphen), filenames beginning with @cindex hyphen (@code{-}), filenames beginning with -This is useful if you have file names that start with @samp{-}, -or in shell scripts, if you have file names that will be specified +This is useful if you have @var{FN}s that start with @samp{-}, +or in shell scripts, if you have @var{FN}s that will be specified 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}. @@ -3762,7 +3775,7 @@ Enable pretty-printing of @command{awk} programs. By default, output program is created in a file named @file{awkprof.out} (@pxref{Profiling}). The optional @var{file} argument allows you to specify a different -file name for the output. +@var{FN} for the output. No space is allowed between the @option{-o} and @var{file}, if @var{file} is supplied. @@ -3789,7 +3802,7 @@ Enable profiling of @command{awk} programs (@pxref{Profiling}). By default, profiles are created in a file named @file{awkprof.out}. The optional @var{file} argument allows you to specify a different -file name for the profile file. +@var{FN} for the profile file. No space is allowed between the @option{-p} and @var{file}, if @var{file} is supplied. @@ -3869,7 +3882,7 @@ output redirections with @code{print} and @code{printf}, and dynamic extensions. This is particularly useful when you want to run @command{awk} scripts from questionable sources and need to make sure the scripts -can't access your system (other than the specified input data file). +can't access your system (other than the specified input @value{DF}). @item @option{-t} @itemx @option{--lint-old} @@ -4001,9 +4014,9 @@ current element. @cindex input files, variable assignments and @cindex variable assignments and input files -The distinction between file name arguments and variable-assignment +The distinction between @var{FN} arguments and variable-assignment arguments is made when @command{awk} is about to open the next input file. -At that point in execution, it checks the file name to see whether +At that point in execution, it checks the @var{FN} to see whether it is really a variable assignment; if so, @command{awk} sets the variable instead of reading a file. @@ -4020,7 +4033,7 @@ sequences (@pxref{Escape Sequences}). @value{DARKCORNER} In some very early implementations of @command{awk}, when a variable assignment -occurred before any file names, the assignment would happen @emph{before} +occurred before any @var{FN}s, the assignment would happen @emph{before} the @code{BEGIN} rule was executed. @command{awk}'s behavior was thus inconsistent; some command-line assignments were available inside the @code{BEGIN} rule, while others were not. Unfortunately, @@ -4031,8 +4044,8 @@ upon the old behavior. The variable assignment feature is most useful for assigning to variables such as @code{RS}, @code{OFS}, and @code{ORS}, which control input and -output formats, before scanning the data files. It is also useful for -controlling state if multiple passes are needed over a data file. For +output formats, before scanning the @value{DF}s. It is also useful for +controlling state if multiple passes are needed over a @value{DF}. For example: @cindex files, multiple passes over @@ -4068,13 +4081,13 @@ You may also use @code{"-"} to name standard input when reading files with @code{getline} (@pxref{Getline/File}). In addition, @command{gawk} allows you to specify the special -file name @file{/dev/stdin}, both on the command line and +@var{FN} @file{/dev/stdin}, both on the command line and with @code{getline}. Some other versions of @command{awk} also support this, but it is not standard. (Some operating systems provide a @file{/dev/stdin} file in the file system; however, @command{gawk} always processes -this file name itself.) +this @var{FN} itself.) @node Environment Variables @section The Environment Variables @command{gawk} Uses @@ -4104,7 +4117,7 @@ on the command-line with the @option{-f} option. In most @command{awk} implementations, you must supply a precise path name for each program file, unless the file is in the current directory. -But in @command{gawk}, if the file name supplied to the @option{-f} +But in @command{gawk}, if the @var{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 @@ -4124,7 +4137,7 @@ though.} The search path feature is particularly helpful for building libraries of useful @command{awk} functions. The library files can be placed in a standard directory in the default path and then specified on -the command line with a short file name. Otherwise, the full file name +the command line with a short @var{FN}. Otherwise, the full @var{FN} would have to be typed for each file. By using the @option{-i} option, or the @option{--source} and @option{-f} options, your command-line @@ -4135,7 +4148,7 @@ This is true for both @option{--traditional} and @option{--posix}. @xref{Options}. If the source code is not found after the initial search, the path is searched -again after adding the default @samp{.awk} suffix to the filename. +again after adding the default @samp{.awk} suffix to the @value{FN}. @quotation NOTE @c 4/2014: @@ -4351,7 +4364,7 @@ use @code{@@include} followed by the name of the file to be included, enclosed in double quotes. @quotation NOTE -Keep in mind that this is a language construct and the file name cannot +Keep in mind that this is a language construct and the @var{FN} cannot be a string variable, but rather just a literal string constant in double quotes. @end quotation @@ -4376,7 +4389,7 @@ $ @kbd{gawk -f test3} @print{} This is file test3. @end example -The file name can, of course, be a pathname. For example: +The @var{FN} can, of course, be a pathname. For example: @example @@include "../io_funcs" @@ -4434,7 +4447,7 @@ to using the @option{-l} command-line option. If the extension is not initially found in @env{AWKLIBPATH}, another search is conducted after appending the platform's default shared library -suffix to the filename. For example, on GNU/Linux systems, the suffix +suffix to the @value{FN}. For example, on GNU/Linux systems, the suffix @samp{.so} is used. @example @@ -4473,7 +4486,7 @@ they will @emph{not} be in the next release). The process-related special files @file{/dev/pid}, @file{/dev/ppid}, @file{/dev/pgrpid}, and @file{/dev/user} were deprecated in @command{gawk} -3.1, but still worked. As of version 4.0, they are no longer +3.1, but still worked. As of @value{PVERSION} 4.0, they are no longer interpreted specially by @command{gawk}. (Use @code{PROCINFO} instead; see @ref{Auto-set}.) @@ -5185,7 +5198,7 @@ constants, @command{gawk} did @emph{not} match interval expressions in regexps. -However, beginning with version 4.0, +However, beginning with @value{PVERSION} 4.0, @command{gawk} does match interval expressions by default. This is because compatibility with POSIX has become more important to most @command{gawk} users than compatibility with @@ -5503,8 +5516,10 @@ previously described GNU regexp operators. @end ifnotinfo @ifnottex +@ifnotdocbook GNU regexp operators described in @ref{Regexp Operators}. +@end ifnotdocbook @end ifnottex @item @code{--posix} @@ -5894,7 +5909,7 @@ so far from the current input file. This value is stored in a built-in variable called @code{FNR}. It is reset to zero when a new file is started. Another built-in variable, @code{NR}, records the total -number of input records read so far from all data files. It starts at zero, +number of input records read so far from all @value{DF}s. It starts at zero, but is never automatically reset to zero. @menu @@ -5987,7 +6002,7 @@ $ @kbd{awk 'BEGIN @{ RS = "u" @}} @noindent Note that the entry for the name @samp{Bill} is not split. -In the original data file +In the original @value{DF} (@pxref{Sample Data Files}), the line looks like this: @@ -6000,7 +6015,7 @@ 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}. 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 +is the original newline in the @value{DF}, not the one added by @command{awk} when it printed the record! @cindex record separators, changing @@ -6149,7 +6164,7 @@ In compatibility mode, only the first character of the value of @end docbook @cindex portability, data files as single record -There are times when you might want to treat an entire data file as a +There are times when you might want to treat an entire @value{DF} as a single record. The only way to make this happen is to give @code{RS} a value that you know doesn't occur in the input file. This is hard to do in a general way, such that a program always works for arbitrary @@ -6199,7 +6214,7 @@ Readfile}, for another option. @cindex portability, data files as single record -There are times when you might want to treat an entire data file as a +There are times when you might want to treat an entire @value{DF} as a single record. The only way to make this happen is to give @code{RS} a value that you know doesn't occur in the input file. This is hard to do in a general way, such that a program always works for arbitrary @@ -7507,7 +7522,7 @@ appear in a row, they are considered one record separator. @cindex dark corner, multiline records However, there is an important difference between @samp{RS = ""} and @samp{RS = "\n\n+"}. In the first case, leading newlines in the input -data file are ignored, and if a file ends without extra blank lines +@value{DF} are ignored, and if a file ends without extra blank lines after the last record, the final newline is removed from the record. In the second case, this special processing is not done. @value{DARKCORNER} @@ -7543,7 +7558,7 @@ 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.) -A practical example of a data file organized this way might be a mailing +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 in a file named @file{addresses}, which looks like this: @@ -7608,7 +7623,7 @@ value of @table @code @item RS == "\n" Records are separated by the newline character (@samp{\n}). In effect, -every line in the data file is a separate record, including blank lines. +every line in the @value{DF} is a separate record, including blank lines. This is the default. @item RS == @var{any single character} @@ -7829,7 +7844,7 @@ the value of @code{NF} do not change. @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 -specifies the file name. @samp{< @var{file}} is called a @dfn{redirection} +specifies the @var{FN}. @samp{< @var{file}} is called a @dfn{redirection} because it directs input to come from a different place. For example, the following program reads its input record from the file @file{secondary.input} when it @@ -7948,7 +7963,9 @@ The @code{close()} function is called to ensure that if two identical @samp{@@execute} lines appear in the input, the command is run for each one. @ifnottex +@ifnotdocbook @xref{Close Files And Pipes}. +@end ifnotdocbook @end ifnottex @c Exercise!! @c This example is unrealistic, since you could just use system @@ -8135,10 +8152,10 @@ system permits. @item An interesting side effect occurs if you use @code{getline} without a redirection inside a @code{BEGIN} rule. Because an unredirected @code{getline} -reads from the command-line data files, the first @code{getline} command +reads from the command-line @value{DF}s, the first @code{getline} command causes @command{awk} to set the value of @code{FILENAME}. Normally, @code{FILENAME} does not have a value inside @code{BEGIN} rules, because you -have not yet started to process the command-line data files. +have not yet started to process the command-line @value{DF}s. @value{DARKCORNER} (@xref{BEGIN/END}, also @pxref{Auto-set}.) @@ -8375,7 +8392,7 @@ For printing with specifications, you need the @code{printf} statement @cindex @code{printf} statement Besides basic and formatted printing, this @value{CHAPTER} also covers I/O redirections to files and pipes, introduces -the special file names that @command{gawk} processes internally, +the special @var{FN}s that @command{gawk} processes internally, and discusses the @code{close()} built-in function. @menu @@ -9183,9 +9200,9 @@ but they work identically for @code{printf}: @cindex operators, input/output @item print @var{items} > @var{output-file} This redirection prints the items into the output file named -@var{output-file}. The file name @var{output-file} can be any +@var{output-file}. The @var{FN} @var{output-file} can be any expression. Its value is changed to a string and then used as a -file name (@pxref{Expressions}). +@var{FN} (@pxref{Expressions}). When this type of redirection is used, the @var{output-file} is erased before the first output is written to it. Subsequent writes to the same @@ -9338,7 +9355,9 @@ As mentioned earlier many @end ifnotinfo @ifnottex +@ifnotdocbook Many +@end ifnotdocbook @end ifnottex older @command{awk} implementations limit the number of pipelines that an @command{awk} @@ -9356,7 +9375,7 @@ open as many pipelines as the underlying operating system permits. A particularly powerful way to use redirection is to build command lines and pipe them into the shell, @command{sh}. For example, suppose you -have a list of files brought over from a system where all the file names +have a list of files brought over from a system where all the @var{FN}s are stored in uppercase, and you wish to rename them to have names in all lowercase. The following program is both simple and efficient: @@ -9388,7 +9407,7 @@ It then sends the list to the shell for execution. A particularly powerful way to use redirection is to build command lines and pipe them into the shell, @command{sh}. For example, suppose you -have a list of files brought over from a system where all the file names +have a list of files brought over from a system where all the @var{FN}s are stored in uppercase, and you wish to rename them to have names in all lowercase. The following program is both simple and efficient: @@ -9411,12 +9430,12 @@ It then sends the list to the shell for execution. @c ENDOFRANGE reout @node Special Files -@section Special File Names in @command{gawk} +@section Special @value{FFN} in @command{gawk} @c STARTOFRANGE gfn @cindex @command{gawk}, file names in -@command{gawk} provides a number of special file names that it interprets -internally. These file names provide access to standard file descriptors +@command{gawk} provides a number of special @var{FN}s that it interprets +internally. These @var{FN}s provide access to standard file descriptors and TCP/IP networking. @menu @@ -9480,12 +9499,12 @@ that happens, writing to the screen is not correct. In fact, if terminal at all. Then opening @file{/dev/tty} fails. -@command{gawk} provides special file names for accessing the three standard +@command{gawk} provides special @var{FN}s for accessing the three standard streams. @value{COMMONEXT} It also provides syntax for accessing -any other inherited open files. If the file name matches +any other inherited open files. If the @var{FN} matches one of these special names when @command{gawk} redirects input or output, -then it directly uses the stream that the file name stands for. -These special file names work for all operating systems that @command{gawk} +then it directly uses the stream that the @var{FN} stands for. +These special @var{FN}s work for all operating systems that @command{gawk} has been ported to, not just those that are POSIX-compliant: @cindex common extensions, @code{/dev/stdin} special file @@ -9515,7 +9534,7 @@ the shell). Unless special pains are taken in the shell from which @command{gawk} is invoked, only descriptors 0, 1, and 2 are available. @end table -The file names @file{/dev/stdin}, @file{/dev/stdout}, and @file{/dev/stderr} +The @var{FN}s @file{/dev/stdin}, @file{/dev/stdout}, and @file{/dev/stderr} are aliases for @file{/dev/fd/0}, @file{/dev/fd/1}, and @file{/dev/fd/2}, respectively. However, they are more self-explanatory. The proper way to write an error message in a @command{gawk} program @@ -9526,13 +9545,13 @@ print "Serious error detected!" > "/dev/stderr" @end example @cindex troubleshooting, quotes with file names -Note the use of quotes around the file name. +Note the use of quotes around the @var{FN}. Like any other redirection, the value must be a string. It is a common error to omit the quotes, which leads to confusing results. @c Exercise: What does it do? :-) -Finally, using the @code{close()} function on a file name of the +Finally, using the @code{close()} function on a @var{FN} of the form @code{"/dev/fd/@var{N}"}, for file descriptor numbers above two, does actually close the given file descriptor. @@ -9548,7 +9567,7 @@ versions of @command{awk}. @command{gawk} programs can open a two-way TCP/IP connection, acting as either a client or a server. -This is done using a special file name of the form: +This is done using a special @var{FN} of the form: @example @file{/@var{net-type}/@var{protocol}/@var{local-port}/@var{remote-host}/@var{remote-port}} @@ -9558,7 +9577,7 @@ The @var{net-type} is one of @samp{inet}, @samp{inet4} or @samp{inet6}. The @var{protocol} is one of @samp{tcp} or @samp{udp}, and the other fields represent the other essential pieces of information for making a networking connection. -These file names are used with the @samp{|&} operator for communicating +These @var{FN}s are used with the @samp{|&} operator for communicating with a coprocess (@pxref{Two-way I/O}). This is an advanced feature, mentioned here only for completeness. @@ -9566,21 +9585,21 @@ Full discussion is delayed until @ref{TCP/IP Networking}. @node Special Caveats -@subsection Special File Name Caveats +@subsection Special @value{FFN} Caveats Here is a list of things to bear in mind when using the -special file names that @command{gawk} provides: +special @var{FN}s that @command{gawk} provides: @itemize @value{BULLET} @cindex compatibility mode (@command{gawk}), file names @cindex file names, in compatibility mode @item -Recognition of these special file names is disabled if @command{gawk} is in +Recognition of these special @var{FN}s is disabled if @command{gawk} is in compatibility mode (@pxref{Options}). @item @command{gawk} @emph{always} -interprets these special file names. +interprets these special @var{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 @@ -9603,7 +9622,7 @@ Doing so results in unpredictable behavior. @cindex coprocesses, closing @cindex @code{getline} command, coprocesses@comma{} using from -If the same file name or the same shell command is used with @code{getline} +If the same @var{FN} or the same shell command is used with @code{getline} more than once during the execution of an @command{awk} program (@pxref{Getline}), the file is opened (or the command is executed) the first time only. @@ -9612,7 +9631,7 @@ The next time the same file or command is used with @code{getline}, another record is read from it, and so on. Similarly, when a file or pipe is opened for output, @command{awk} remembers -the file name or command associated with it, and subsequent +the @var{FN} or command associated with it, and subsequent writes to the same file or command are appended to the previous writes. The file or pipe stays open until @command{awk} exits. @@ -9654,7 +9673,7 @@ file or command, or the next @code{print} or @code{printf} to that file or command, reopens the file or reruns the command. Because the expression that you use to close a file or pipeline must exactly match the expression used to open the file or run the command, -it is good practice to use a variable to store the file name or command. +it is good practice to use a variable to store the @var{FN} or command. The previous example becomes the following: @example @@ -9704,7 +9723,7 @@ a separate message. @cindex @code{close()} function, portability If you use more files than the system allows you to have open, @command{gawk} attempts to multiplex the available open files among -your data files. @command{gawk}'s ability to do this depends upon the +your @value{DF}s. @command{gawk}'s ability to do this depends upon the facilities of your operating system, so it may not always work. It is therefore both good practice and good portability advice to always use @code{close()} on your files when you are done with them. @@ -10313,7 +10332,7 @@ as in the following: @noindent the variable is set at the very beginning, even before the @code{BEGIN} rules execute. The @option{-v} option and its assignment -must precede all the file name arguments, as well as the program text. +must precede all the @var{FN} arguments, as well as the program text. (@xref{Options}, for more information about the @option{-v} option.) Otherwise, the variable assignment is performed at a time determined by @@ -13590,11 +13609,11 @@ The @code{nextfile} statement is similar to the @code{next} statement. However, instead of abandoning processing of the current record, the @code{nextfile} statement instructs @command{awk} to stop processing the -current data file. +current @value{DF}. Upon execution of the @code{nextfile} statement, @code{FILENAME} is -updated to the name of the next data file listed on the command line, +updated to the name of the next @value{DF} listed on the command line, @code{FNR} is reset to one, and processing starts over with the first rule in the program. @@ -13603,10 +13622,10 @@ then the code in any @code{END} rules is executed. An exception to this is when @code{nextfile} is invoked during execution of any statement in an @code{END} rule; In this case, it causes the program to stop immediately. @xref{BEGIN/END}. -The @code{nextfile} statement is useful when there are many data files +The @code{nextfile} statement is useful when there are many @value{DF}s to process but it isn't necessary to process every record in every file. Without @code{nextfile}, -in order to move on to the next data file, a program +in order to move on to the next @value{DF}, a program would have to continue scanning the unwanted records. The @code{nextfile} statement accomplishes this much more efficiently. @@ -14050,15 +14069,15 @@ about how @command{awk} uses these variables. @cindex differences in @command{awk} and @command{gawk}, @code{ARGIND} variable @item @code{ARGIND #} The index in @code{ARGV} of the current file being processed. -Every time @command{gawk} opens a new data file for processing, it sets -@code{ARGIND} to the index in @code{ARGV} of the file name. +Every time @command{gawk} opens a new @value{DF} for processing, it sets +@code{ARGIND} to the index in @code{ARGV} of the @var{FN}. When @command{gawk} is processing the input files, @samp{FILENAME == ARGV[ARGIND]} is always true. @cindex files, processing@comma{} @code{ARGIND} variable and This variable is useful in file processing; it allows you to tell how far -along you are in the list of data files as well as to distinguish between -successive instances of the same file name on the command line. +along you are in the list of @value{DF}s as well as to distinguish between +successive instances of the same @var{FN} on the command line. @cindex file names, distinguishing While you can change the value of @code{ARGIND} within your @command{awk} @@ -14106,14 +14125,14 @@ to clear it yourself before doing an I/O operation. @cindex @code{FILENAME} variable @cindex dark corner, @code{FILENAME} variable @item @code{FILENAME} -The name of the current input file. When no data files are listed +The name of the current input file. When no @value{DF}s are listed on the command line, @command{awk} reads from the standard input and @code{FILENAME} is set to @code{"-"}. @code{FILENAME} changes each time a new file is read (@pxref{Reading Files}). Inside a @code{BEGIN} rule, the value of @code{FILENAME} is @code{""}, since there are no input files being processed yet.@footnote{Some early implementations of Unix @command{awk} initialized @code{FILENAME} to @code{"-"}, even if there -were data files to be processed. This behavior was incorrect and should +were @value{DF}s to be processed. This behavior was incorrect and should not be relied upon in your programs.} @value{DARKCORNER} Note, though, that using @code{getline} (@pxref{Getline}) inside a @code{BEGIN} rule can give @code{FILENAME} a value. @@ -14530,11 +14549,11 @@ additional files to be read. If the value of @code{ARGC} is decreased, that eliminates input files from the end of the list. By recording the old value of @code{ARGC} elsewhere, a program can treat the eliminated arguments as -something other than file names. +something other than @var{FN}s. To eliminate a file from the middle of the list, store the null string (@code{""}) into @code{ARGV} in place of the file's name. As a -special feature, @command{awk} ignores file names that have been +special feature, @command{awk} ignores @var{FN}s that have been replaced with the null string. Another option is to use the @code{delete} statement to remove elements from @@ -17183,17 +17202,17 @@ _bigskip} 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 version 3.1.4, @command{gawk} followed the POSIX rules +Starting with @value{PVERSION} 3.1.4, @command{gawk} followed the POSIX rules when @option{--posix} is specified (@pxref{Options}). Otherwise, it continued to follow the 1996 proposed rules, since that had been its behavior for many years. -When version 4.0.0 was released, the @command{gawk} maintainer +When @value{PVERSION} 4.0.0 was released, the @command{gawk} maintainer made the POSIX rules the default, breaking well over a decade's worth of backwards compatibility.@footnote{This was rather naive of him, despite there being a note in this section indicating that the next major version would move to the POSIX rules.} Needless to say, this was a bad idea, -and as of version 4.0.1, @command{gawk} resumed its historical +and as of @value{PVERSION} 4.0.1, @command{gawk} resumed its historical behavior, and only follows the POSIX rules when @option{--posix} is given. The rules for @code{gensub()} are considerably simpler. At the runtime @@ -17373,7 +17392,7 @@ then @command{awk} flushes the buffers for @emph{all} open output files and pipes. @quotation NOTE -Prior to version 4.0.2, @command{gawk} +Prior to @value{PVERSION} 4.0.2, @command{gawk} 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 @@ -19443,7 +19462,7 @@ function rsort(first, last) @c endfile @end example -Here is an extended version of the data file: +Here is an extended version of the @value{DF}: @example @c file eg/data/class_data2 @@ -19949,7 +19968,7 @@ An @code{END} rule is automatically added to the program calling @code{assert()}. Normally, if a program consists of just a @code{BEGIN} rule, the input files and/or standard input are not read. However, now that the program has an @code{END} rule, @command{awk} -attempts to read the input data files or standard input +attempts to read the input @value{DF}s or standard input (@pxref{Using BEGIN/END}), most likely causing the program to hang as it waits for input. @@ -20436,7 +20455,7 @@ This tests the result to see if it is empty or not. An equivalent test would be @samp{contents == ""}. @node Data File Management -@section Data File Management +@section @value{DDF} Management @c STARTOFRANGE dataf @cindex files, managing @@ -20445,7 +20464,7 @@ test would be @samp{contents == ""}. @c STARTOFRANGE flibdataf @cindex functions, library, managing data files This @value{SECTION} presents functions that are useful for managing -command-line data files. +command-line @value{DF}s. @menu * Filetrans Function:: A function for handling data file transitions. @@ -20456,7 +20475,7 @@ command-line data files. @end menu @node Filetrans Function -@subsection Noting Data File Boundaries +@subsection Noting @value{DDF} Boundaries @cindex files, managing, data file boundaries @cindex files, initialization and cleanup @@ -20464,8 +20483,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 data file and the -@code{END} rule is executed at the end of each data file. +@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}. When informed that this was not the case, the user requested that we add new special @@ -20476,7 +20495,7 @@ Adding these special patterns to @command{gawk} wasn't necessary; the job can be done cleanly in @command{awk} itself, as illustrated by the following library program. It arranges to call two user-supplied functions, @code{beginfile()} and -@code{endfile()}, at the beginning and end of each data file. +@code{endfile()}, at the beginning and end of each @value{DF}. Besides solving the problem in only nine(!) lines of code, it does so @emph{portably}; this works with any implementation of @command{awk}: @@ -20507,17 +20526,17 @@ 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 -automatically changes for each new data file. The current file name is +automatically changes for each new @value{DF}. The current @var{FN} is saved in a private variable, @code{_oldfilename}. If @code{FILENAME} does -not equal @code{_oldfilename}, then a new data file is being processed and +not equal @code{_oldfilename}, then a new @value{DF} is being processed and it is necessary to call @code{endfile()} for the old file. Because @code{endfile()} should only be called if a file has been processed, the program first checks to make sure that @code{_oldfilename} is not the null -string. The program then assigns the current file name to +string. The program then assigns the current @var{FN} to @code{_oldfilename} and calls @code{beginfile()} for the file. Because, like all @command{awk} variables, @code{_oldfilename} is initialized to the null string, this rule executes correctly even for the -first data file. +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 @@ -20526,7 +20545,7 @@ 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 -If the same data file occurs twice in a row on the command line, then +If the same @value{DF} occurs twice in a row on the command line, then @code{endfile()} and @code{beginfile()} are not executed at the end of the first pass and at the beginning of the second pass. The following version solves the problem: @@ -20670,12 +20689,12 @@ The @code{rewind()} function also relies on the @code{nextfile} keyword (@pxref{Nextfile Statement}). @node File Checking -@subsection Checking for Readable Data Files +@subsection Checking for Readable @value{DDF}s @cindex troubleshooting, readable data files @cindex readable data files@comma{} checking @cindex files, skipping -Normally, if you give @command{awk} a data file that isn't readable, +Normally, if you give @command{awk} a @value{DF} that isn't readable, it stops with a fatal error. There are times when you might want to just ignore such files and keep going.@footnote{The @code{BEGINFILE} special pattern (@pxref{BEGINFILE/ENDFILE}) provides an alternative @@ -20726,15 +20745,15 @@ 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 -command-line data file, @emph{without} executing any user-level +command-line @value{DF}, @emph{without} executing any user-level @command{awk} program code. Using @command{gawk}'s @code{ARGIND} variable (@pxref{Built-in Variables}), it is possible to detect when an empty -data file has been skipped. Similar to the library file presented +@value{DF} has been skipped. Similar to the library file presented in @ref{Filetrans Function}, the following library file calls a function named @code{zerofile()} that the user must provide. The arguments passed are -the file name and the position in @code{ARGV} where it was found: +the @var{FN} and the position in @code{ARGV} where it was found: @cindex @code{zerofile.awk} program @example @@ -20822,15 +20841,15 @@ END @{ @end ignore @node Ignoring Assigns -@subsection Treating Assignments as File Names +@subsection Treating Assignments as @value{FFN} @cindex assignments as filenames @cindex filenames, assignments as Occasionally, you might not want @command{awk} to process command-line variable assignments (@pxref{Assignment Options}). -In particular, if you have a file name that contains an @samp{=} character, -@command{awk} treats the file name as an assignment, and does not process it. +In particular, if you have a @var{FN} that contains an @samp{=} character, +@command{awk} treats the @var{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 @@ -20874,7 +20893,7 @@ awk -v No_command_assign=1 -f noassign.awk -f yourprog.awk * The function works by looping through the arguments. It prepends @samp{./} to any argument that matches the form -of a variable assignment, turning that argument into a file name. +of a variable assignment, turning that argument into a @var{FN}. The use of @code{No_command_assign} allows you to disable command-line assignments at invocation time, by giving the variable a true value. @@ -21230,7 +21249,7 @@ etc., as its own options. After @code{getopt()} is through, it is the responsibility of the user level code to clear out all the elements of @code{ARGV} from 1 to @code{Optind}, so that @command{awk} does not try to process the -command-line options as file names. +command-line options as @var{FN}s. @end quotation Several of the sample programs presented in @@ -22101,7 +22120,7 @@ awk -f @var{program} -- @var{options} @var{files} @noindent Here, @var{program} is the name of the @command{awk} program (such as @file{cut.awk}), @var{options} are any command-line options for the -program that start with a @samp{-}, and @var{files} are the actual data files. +program that start with a @samp{-}, and @var{files} are the actual @value{DF}s. If your system supports the @samp{#!} executable interpreter mechanism (@pxref{Executable Scripts}), @@ -22269,7 +22288,7 @@ BEGIN \ OFS = "" @} else if (c == "d") @{ if (length(Optarg) > 1) @{ - printf("Using first character of %s" \ + printf("cut: using first character of %s" \ " for delimiter\n", Optarg) > "/dev/stderr" Optarg = substr(Optarg, 1, 1) @} @@ -22300,7 +22319,7 @@ spaces. Also remember that after @code{getopt()} is through we have to clear out all the elements of @code{ARGV} from 1 to @code{Optind}, so that @command{awk} does not try to process the command-line options -as file names. +as @var{FN}s. After dealing with the command-line options, the program verifies that the options make sense. Only one or the other of @option{-c} and @option{-f} @@ -22350,7 +22369,7 @@ function set_fieldlist( n, m, i, j, k, f, g) m = split(f[i], g, "-") @group if (m != 2 || g[1] >= g[2]) @{ - printf("bad field list: %s\n", + printf("cut: bad field list: %s\n", f[i]) > "/dev/stderr" exit 1 @} @@ -22397,7 +22416,7 @@ function set_charlist( field, i, j, f, g, n, m, t, if (index(f[i], "-") != 0) @{ # range m = split(f[i], g, "-") if (m != 2 || g[1] >= g[2]) @{ - printf("bad character list: %s\n", + printf("cut: bad character list: %s\n", f[i]) > "/dev/stderr" exit 1 @} @@ -22497,8 +22516,8 @@ You invoke it as follows: The @var{pattern} is a regular expression. In typical usage, the regular expression is quoted to prevent the shell from expanding any of the -special characters as file name wildcards. Normally, @command{egrep} -prints the lines that matched. If multiple file names are provided on +special characters as @var{FN} wildcards. Normally, @command{egrep} +prints the lines that matched. If multiple @var{FN}s are provided on the command line, each output line is preceded by the name of the file and a colon. @@ -22589,7 +22608,7 @@ pattern is supplied with @option{-e}, the first nonoption on the command line is used. The @command{awk} command-line arguments up to @code{ARGV[Optind]} are cleared, so that @command{awk} won't try to process them as files. If no files are specified, the standard input is used, and if multiple files are -specified, we make sure to note this so that the file names can precede the +specified, we make sure to note this so that the @var{FN}s can precede the matched lines in the output: @example @@ -22692,9 +22711,9 @@ 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 (@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 file names, we can -print the file name, and then skip to the next file with @code{nextfile}. -Finally, each line is printed, with a leading file name and colon +@code{nextfile}. Similarly, if we are only printing @var{FN}s, we can +print the @var{FN}, and then skip to the next file with @code{nextfile}. +Finally, each line is printed, with a leading @var{FN} and colon if necessary: @cindex @code{!} (exclamation point), @code{!} operator @@ -22944,7 +22963,7 @@ 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 1000. To change the name of the output files to something like @file{myfileaa}, @file{myfileab}, and so on, supply an additional -argument that specifies the file name prefix. +argument that specifies the @var{FN} prefix. Here is a version of @command{split} in @command{awk}. It uses the @code{ord()} and @code{chr()} functions presented in @@ -22954,8 +22973,8 @@ The program first sets its defaults, and then tests to make sure there are not too many arguments. It then looks at each argument in turn. The first argument could be a minus sign followed by a number. If it is, this happens to look like a negative number, so it is made positive, and that is the -count of lines. The data file name is skipped over and the final argument -is used as the prefix for the output file names: +count of lines. The @value{DF} name is skipped over and the final argument +is used as the prefix for the output @value{FN}s: @cindex @code{split.awk} program @example @@ -23005,7 +23024,7 @@ BEGIN @{ The next rule does most of the work. @code{tcount} (temporary count) tracks how many lines have been printed to the output file so far. If it is greater than @code{count}, it is time to close the current file and start a new one. -@code{s1} and @code{s2} track the current suffixes for the file name. If +@code{s1} and @code{s2} track the current suffixes for the @value{FN}. If they are both @samp{z}, the file is just too big. Otherwise, @code{s1} moves to the next letter in the alphabet and @code{s2} starts over again at @samp{a}: @@ -23089,13 +23108,13 @@ The @code{BEGIN} rule first makes a copy of all the command-line arguments into an array named @code{copy}. @code{ARGV[0]} is not copied, since it is not needed. @code{tee} cannot use @code{ARGV} directly, since @command{awk} attempts to -process each file name in @code{ARGV} as input data. +process each @value{FN} in @code{ARGV} as input data. @cindex flag variables If the first argument is @option{-a}, then the flag variable @code{append} is set to true, and both @code{ARGV[1]} and @code{copy[1]} are deleted. If @code{ARGC} is less than two, then no -file names were supplied and @code{tee} prints a usage message and exits. +@value{FN}s were supplied and @code{tee} prints a usage message and exits. Finally, @command{awk} is forced to read the standard input by setting @code{ARGV[1]} to @code{"-"} and @code{ARGC} to two: @@ -23561,7 +23580,7 @@ BEGIN @{ @end example The @code{beginfile()} function is simple; it just resets the counts of lines, -words, and characters to zero, and saves the current file name in +words, and characters to zero, and saves the current @value{FN} in @code{fname}: @example @@ -23583,7 +23602,7 @@ you will see that @code{FNR} has already been reset by the time @code{endfile()} is called.} It then prints out those numbers for the file that was just read. It relies on @code{beginfile()} to reset the -numbers for the following data file: +numbers for the following @value{DF}: @c FIXME: ONE DAY: make the above footnote an exercise, @c instead of giving away the answer. @@ -23902,7 +23921,7 @@ is how long to wait before setting off the alarm: # how long to sleep for naptime = target - current if (naptime <= 0) @{ - print "time is in the past!" > "/dev/stderr" + print "alarm: time is in the past!" > "/dev/stderr" exit 1 @} @c endfile @@ -24375,7 +24394,7 @@ The @command{uniq} program (@pxref{Uniq Program}), removes duplicate lines from @emph{sorted} data. -Suppose, however, you need to remove duplicate lines from a data file but +Suppose, however, you need to remove duplicate lines from a @value{DF} but that you want to preserve the order the lines are in. A good example of this might be a shell history file. The history file keeps a copy of all the commands you have entered, and it is not unusual to repeat a command @@ -24571,7 +24590,7 @@ BEGIN @{ IGNORECASE = 1 @} /^@@c(omment)?[ \t]+system/ \ @{ if (NF < 3) @{ - e = (FILENAME ":" FNR) + e = ("extract: " FILENAME ":" FNR) e = (e ": badly formed `system' line") print e > "/dev/stderr" next @@ -24580,7 +24599,7 @@ BEGIN @{ IGNORECASE = 1 @} $2 = "" stat = system($0) if (stat != 0) @{ - e = (FILENAME ":" FNR) + e = ("extract: " FILENAME ":" FNR) e = (e ": warning: system returned " stat) print e > "/dev/stderr" @} @@ -24593,7 +24612,7 @@ The variable @code{e} is used so that the rule fits nicely on the @value{PAGE}. The second rule handles moving data into files. It verifies that a -file name is given in the directive. If the file named is not the +@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 @@ -24633,7 +24652,7 @@ line. That line is then printed to the output file: /^@@c(omment)?[ \t]+file/ \ @{ if (NF != 3) @{ - e = (FILENAME ":" FNR ": badly formed `file' line") + e = ("extract: " FILENAME ":" FNR ": badly formed `file' line") print e > "/dev/stderr" next @} @@ -24678,7 +24697,7 @@ subsequent output is appended to the file (@pxref{Redirection}). This makes it easy to mix program text and explanatory prose for the same sample source file (as has been done here!) without any hassle. The file is -only closed when a new data file name is encountered or at the end of the +only closed when a new @value{DF} name is encountered or at the end of the input file. Finally, the function @code{@w{unexpected_eof()}} prints an appropriate @@ -24690,7 +24709,7 @@ The @code{END} rule handles the final cleanup, closing the open file: @group function unexpected_eof() @{ - printf("%s:%d: unexpected EOF or error\n", + printf("extract: %s:%d: unexpected EOF or error\n", FILENAME, FNR) > "/dev/stderr" exit 1 @} @@ -24730,7 +24749,7 @@ Here, @samp{s/old/new/g} tells @command{sed} to look for the regexp The following program, @file{awksed.awk}, accepts at least two command-line arguments: the pattern to look for and the text to replace it with. Any -additional arguments are treated as data file names to process. If none +additional arguments are treated as @value{DF} names to process. If none are provided, the standard input is used: @cindex Brennan, Michael @@ -24804,7 +24823,7 @@ The @code{BEGIN} rule handles the setup, checking for the right number of arguments and calling @code{usage()} if there is a problem. Then it sets @code{RS} and @code{ORS} from the command-line arguments and sets @code{ARGV[1]} and @code{ARGV[2]} to the null string, so that they are -not treated as file names +not treated as @value{FN}s (@pxref{ARGC and ARGV}). The @code{usage()} function prints an error message and exits. @@ -24903,7 +24922,7 @@ Literal text, provided with @option{--source} or @option{--source=}. This text is just appended directly. @item -Source file names, provided with @option{-f}. We use a neat trick and append +Source @value{FN}s, provided with @option{-f}. We use a neat trick and append @samp{@@include @var{filename}} to the shell variable's contents. Since the file-inclusion program works the way @command{gawk} does, this gets the text of the file included into the program at the correct point. @@ -24916,7 +24935,7 @@ shell variable. @item Run the expanded program with @command{gawk} and any other original command-line -arguments that the user supplied (such as the data file names). +arguments that the user supplied (such as the @value{DF} names). @end enumerate This program uses shell variables extensively: for storing command-line arguments, @@ -24948,7 +24967,7 @@ programming trick. Don't worry about it if you are not familiar with These are saved and passed on to @command{gawk}. @item @option{-f}, @option{--file}, @option{--file=}, @option{-Wfile=} -The file name is appended to the shell variable @code{program} with an +The @value{FN} is appended to the shell variable @code{program} with an @code{@@include} statement. The @command{expr} utility is used to remove the leading option part of the argument (e.g., @samp{--file=}). @@ -25073,10 +25092,10 @@ is stored in the shell variable @code{expand_prog}. Doing this keeps the shell script readable. The @command{awk} program reads through the user's program, one line at a time, using @code{getline} (@pxref{Getline}). The input -file names and @code{@@include} statements are managed using a stack. -As each @code{@@include} is encountered, the current file name is +@value{FN}s and @code{@@include} statements are managed using a stack. +As each @code{@@include} is encountered, the current @value{FN} is ``pushed'' onto the stack and the file named in the @code{@@include} -directive becomes the current file name. As each file is finished, +directive becomes the current @value{FN}. As each file is finished, the stack is ``popped,'' and the previous input file becomes the current input file again. The process is started by making the original file the first one on the stack. @@ -25085,16 +25104,16 @@ The @code{pathto()} function does the work of finding the full path to a file. It simulates @command{gawk}'s behavior when searching the @env{AWKPATH} environment variable (@pxref{AWKPATH Variable}). -If a file name has a @samp{/} in it, no path search is done. -Similarly, if the file name is @code{"-"}, then that string is +If a @value{FN} has a @samp{/} in it, no path search is done. +Similarly, if the @value{FN} is @code{"-"}, then that string is used as-is. Otherwise, -the file name is concatenated with the name of each directory in -the path, and an attempt is made to open the generated file name. +the @value{FN} is concatenated with the name of each directory in +the path, and an attempt is made to open the generated @value{FN}. The only way to test if a file can be read in @command{awk} is to go ahead and try to read it with @code{getline}; this is what @code{pathto()} does.@footnote{On some very old versions of @command{awk}, the test @samp{getline junk < t} can loop forever if the file exists but is empty. -Caveat emptor.} If the file can be read, it is closed and the file name +Caveat emptor.} If the file can be read, it is closed and the @value{FN} is returned: @ignore @@ -25152,14 +25171,14 @@ BEGIN @{ The stack is initialized with @code{ARGV[1]}, which will be @code{"/dev/stdin"}. The main loop comes next. Input lines are read in succession. Lines that do not start with @code{@@include} are printed verbatim. -If the line does start with @code{@@include}, the file name is in @code{$2}. +If the line does start with @code{@@include}, the @value{FN} is in @code{$2}. @code{pathto()} is called to generate the full path. If it cannot, then the program prints an error message and continues. The next thing to check is if the file is included already. The -@code{processed} array is indexed by the full file name of each included +@code{processed} array is indexed by the full @value{FN} of each included file and it tracks this information for us. If the file is -seen again, a warning message is printed. Otherwise, the new file name is +seen again, a warning message is printed. Otherwise, the new @value{FN} is pushed onto the stack and processing continues. Finally, when @code{getline} encounters the end of the input file, the file @@ -25180,7 +25199,7 @@ the program is done: fpath = pathto($2) @group if (fpath == "") @{ - printf("igawk:%s:%d: cannot find %s\n", + printf("igawk: %s:%d: cannot find %s\n", input[stackptr], FNR, $2) > "/dev/stderr" continue @} @@ -25237,10 +25256,10 @@ 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 data file to @command{gawk} +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 data files to read. -The program should exit without reading any data files. +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 @@ -26339,10 +26358,10 @@ another process on another system across an IP network connection. You can think of this as just a @emph{very long} two-way pipeline to a coprocess. The way @command{gawk} decides that you want to use TCP/IP networking is -by recognizing special file names that begin with one of @samp{/inet/}, +by recognizing special @value{FN}s that begin with one of @samp{/inet/}, @samp{/inet4/} or @samp{/inet6}. -The full syntax of the special file name is +The full syntax of the special @value{FN} is @file{/@var{net-type}/@var{protocol}/@var{local-port}/@var{remote-host}/@var{remote-port}}. The components are: @@ -27523,10 +27542,11 @@ complete detail in @inforef{Top, , GNU @command{gettext} utilities, gettext, GNU gettext tools}.) @end ifinfo @ifnotinfo -@cite{GNU gettext tools}.) +@uref{http://www.gnu.org/software/gettext/manual/, +@cite{GNU gettext tools}}.) @end ifnotinfo As of this writing, the latest version of GNU @command{gettext} is -@uref{ftp://ftp.gnu.org/gnu/gettext/gettext-0.18.2.1.tar.gz, version 0.18.2.1}. +@uref{ftp://ftp.gnu.org/gnu/gettext/gettext-0.19.tar.gz, @value{PVERSION} 0.19}. If a translation of @command{gawk}'s messages exists, then @command{gawk} produces usage messages, warnings, @@ -28432,7 +28452,7 @@ functions which called the one you are in. The commands for doing this are: Print a backtrace of all function calls (stack frames), or innermost @var{count} frames if @var{count} > 0. Print the outermost @var{count} frames if @var{count} < 0. The backtrace displays the name and arguments to each -function, the source file name, and the line number. +function, the source @value{FN}, and the line number. @cindex debugger commands, @code{down} @cindex @code{down} debugger command @@ -28498,7 +28518,7 @@ Description of the selected stack frame. @item functions @cindex list function definitions, in debugger -List all function definitions including source file names and +List all function definitions including source @value{FN}s and line numbers. @item locals @@ -28586,7 +28606,7 @@ Turn instruction tracing on or off. The default is @code{off}. @end table @item @code{save} @var{filename} -Save the commands from the current session to the given file name, +Save the commands from the current session to the given @value{FN}, so that they can be replayed using the @command{source} command. @item @code{source} @var{filename} @@ -28760,8 +28780,8 @@ of completion are available: @item Command completion Command names. -@item Source file name completion -Source file names. Relevant commands are +@item Source @value{FN} completion +Source @value{FN}s. Relevant commands are @code{break}, @code{clear}, @code{list}, @@ -30019,7 +30039,7 @@ the problem at hand is often the correct approach in such situations. If one of the options @option{--bignum} or @option{-M} is specified, @command{gawk} performs all integer arithmetic using GMP arbitrary precision integers. -Any number that looks like an integer in a program source or data file +Any number that looks like an integer in a program source or @value{DF} is stored as an arbitrary precision integer. The size of the integer is limited only by your computer's memory. The current floating-point context has no effect on operations involving integers. @@ -31441,7 +31461,7 @@ 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 filename. +This function returns 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}. @@ -33317,7 +33337,7 @@ array with information retrieved from the filesystem, as follows: @multitable @columnfractions .15 .50 .20 @headitem Subscript @tab Field in @code{struct stat} @tab File type -@item @code{"name"} @tab The file name @tab All +@item @code{"name"} @tab The @value{FN} @tab All @item @code{"dev"} @tab @code{st_dev} @tab All @item @code{"ino"} @tab @code{st_ino} @tab All @item @code{"mode"} @tab @code{st_mode} @tab All @@ -33368,7 +33388,7 @@ The arguments are as follows: @table @code @item pathlist -An array of filenames. The element values are used; the index values are ignored. +An array of @value{FN}s. The element values are used; the index values are ignored. @item flags This should be the bitwise OR of one or more of the following @@ -33492,10 +33512,10 @@ The arguments to @code{fnmatch()} are: @table @code @item pattern -The filename wildcard to match. +The @var{FN} wildcard to match. @item string -The filename string. +The @var{FN} string. @item flag Either zero, or the bitwise OR of one or more of the @@ -33602,8 +33622,8 @@ standard output to a temporary file configured to have the same owner and permissions as the original. After the file has been processed, the extension restores standard output to its original destination. If @code{INPLACE_SUFFIX} is not an empty string, the original file is -linked to a backup filename created by appending that suffix. Finally, -the temporary file is renamed to the original filename. +linked to a backup @var{FN} created by appending that suffix. Finally, +the temporary file is renamed to the original @var{FN}. If any error occurs, the extension issues a fatal error to terminate processing immediately without damaging the original file. @@ -33669,7 +33689,7 @@ on the command line (or with @code{getline}), 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 -filename, separated by a forward slash character. +@var{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 indicating the type of the file. The letters are file types are shown @@ -34352,7 +34372,7 @@ Special files in I/O redirections: @itemize @value{MINUS} @item The @file{/dev/stdin}, @file{/dev/stdout}, @file{/dev/stderr} and -@file{/dev/fd/@var{N}} special file names +@file{/dev/fd/@var{N}} special @value{FN}s (@pxref{Special Files}). @item @@ -34576,7 +34596,7 @@ long options @item Support for the following obsolete systems was removed from the code -and the documentation for @command{gawk} version 4.0: +and the documentation for @command{gawk} @value{PVERSION} 4.0: @c nested table @itemize @value{MINUS} @@ -34669,7 +34689,7 @@ The @code{IGNORECASE} variable and its effects @item The @file{/dev/stdin}, @file{/dev/stdout}, @file{/dev/stderr} and -@file{/dev/fd/@var{N}} special file names +@file{/dev/fd/@var{N}} special @value{FN}s (@pxref{Special Files}). @end itemize @@ -34706,7 +34726,7 @@ Version 2.14 of @command{gawk} introduced the following feature: @itemize @value{BULLET} @item -The @code{next file} statement for skipping to the next data file +The @code{next file} statement for skipping to the next @value{DF} (@pxref{Nextfile Statement}). @end itemize @@ -34728,7 +34748,7 @@ through @code{ARGV}. @item The @file{/dev/pid}, @file{/dev/ppid}, @file{/dev/pgrpid}, and -@file{/dev/user} special file names. These have since been removed. +@file{/dev/user} special @value{FN}s. These have since been removed. @item The ability to delete all of an array at once with @samp{delete @var{array}} @@ -35350,7 +35370,7 @@ like ``why does @samp{[A-Z]} match lowercase letters?!?'' 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 -was in the user's locale. During the development of version 4.0, +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 @@ -35731,7 +35751,7 @@ Extracting the archive creates a directory named @file{gawk-@value{VERSION}.@value{PATCHLEVEL}} in the current directory. -The distribution file name is of the form +The distribution @value{FN} is of the form @file{gawk-@var{V}.@var{R}.@var{P}.tar.gz}. The @var{V} represents the major version of @command{gawk}, the @var{R} represents the current release of version @var{V}, and @@ -36400,7 +36420,7 @@ the @command{configure} script as is the case for the Unix versions. If @file{c:/usr} is the prefix directory then the default search path contains @file{.} and @file{c:/usr/share/awk}. Additionally, to support binary distributions of @command{gawk} for OS/2 -systems whose drive @samp{c:} might not support long file names or might not exist +systems whose drive @samp{c:} might not support long @value{FN}s or might not exist at all, there is a special environment variable. If @env{UNIXROOT} specifies a drive then this specific drive is also searched for program files. E.g., if @env{UNIXROOT} is set to @file{e:} the complete default search path is @@ -36595,7 +36615,7 @@ $ @kbd{MMK/DESCRIPTION=[.vms]descrip.mms gawk} @end example @command{MMK} is an open source, free, near-clone of @command{MMS} and -can better handle ODS-5 volumes with upper- and lowercase filenames. +can better handle ODS-5 volumes with upper- and lowercase @var{FN}s. @command{MMK} is available from @uref{https://github.com/endlesssoftware/mmk}. With ODS-5 volumes and extended parsing enabled, the case of the target @@ -36726,11 +36746,11 @@ provides information about both the @command{gawk} implementation and the The logical name @samp{AWK_LIBRARY} can designate a default location for @command{awk} program files. For the @option{-f} option, if the specified -file name has no device or directory path information in it, @command{gawk} +@value{FN} has no device or directory path information in it, @command{gawk} looks in the current directory first, then in the directory specified by the translation of @samp{AWK_LIBRARY} if the file is not found. If, after searching in both directories, the file still is not found, -@command{gawk} appends the suffix @samp{.awk} to the filename and retries +@command{gawk} appends the suffix @samp{.awk} to the @var{FN} and retries the file search. If @samp{AWK_LIBRARY} has no definition, a default value of @samp{SYS$LIBRARY:} is used for it. @@ -36759,7 +36779,7 @@ One side effect of dual command-line parsing is that if there is only a single parameter (as in the quoted string program above), the command becomes ambiguous. To work around this, the normally optional @option{--} flag is required to force Unix-style parsing rather than @code{DCL} parsing. If any -other dash-type options (or multiple parameters such as data files to +other dash-type options (or multiple parameters such as @value{DF}s to process) are present, there is no ambiguity and @option{--} can be omitted. @cindex exit status, of VMS @@ -36868,7 +36888,7 @@ define a symbol, as follows: $ @kbd{gawk :== $sys$common:[syshlp.examples.tcpip.snmp]gawk.exe} @end example -This is apparently version 2.15.6, which is extremely old. We +This is apparently @value{PVERSION} 2.15.6, which is extremely old. We recommend compiling and using the current version. @c ENDOFRANGE opgawx @@ -36897,8 +36917,8 @@ what you're trying to do. If it's not clear whether you should be able 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 data file that -reproduces the problem. Then send us the program and data file, +to the smallest possible @command{awk} program and input @value{DF} that +reproduces 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 @@ -38113,7 +38133,7 @@ to any of the above. @ref{Dynamic Extensions}, describes the supported API and mechanisms for writing extensions for @command{gawk}. This API was introduced -in version 4.1. However, for many years @command{gawk} +in @value{PVERSION} 4.1. However, for many years @command{gawk} provided an extension mechanism that required knowledge of @command{gawk} internals and that was not as well designed. @@ -39105,7 +39125,7 @@ numeric values. It is the C type @code{float}. The character generated by hitting the space bar on the keyboard. @item Special File -A file name interpreted internally by @command{gawk}, instead of being handed +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}.) @@ -40521,9 +40541,6 @@ ORA uses filename, thus the macro. Suggestions: ------------ -% Next edition: -% 1. Standardize the error messages from the functions and programs -% in the two sample code chapters. Better sidebars can almost sort of be done with: diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 69abf674..b80a6849 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -46,12 +46,10 @@ @c applies to and all the info about who's publishing this edition @c These apply across the board. -@set UPDATE-MONTH April, 2014 +@set UPDATE-MONTH June, 2014 @set VERSION 4.1 @set PATCHLEVEL 1 -@set FSF - @set TITLE GAWK: Effective AWK Programming @set SUBTITLE A User's Guide for GNU Awk @set EDITION 4.1 @@ -162,6 +160,21 @@ @end macro @end ifdocbook +@ifclear FOR_PRINT +@set FN file name +@set FFN File Name +@set DF data file +@set DDF Data File +@set PVERSION version +@end ifclear +@ifset FOR_PRINT +@set FN filename +@set FFN Filename +@set DF datafile +@set DDF Datafile +@set PVERSION Version +@end ifset + @c For HTML, spell out email addresses, to avoid problems with @c address harvesters for spammers. @ifhtml @@ -1345,11 +1358,11 @@ wrote the bulk of @cite{TCP/IP Internetworking with @command{gawk}} (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} version 3.1. +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} version 4.0, in 2011. +@command{gawk} @value{PVERSION} 4.0, in 2011. @xref{Contributors}, for a complete list of those who made important contributions to @command{gawk}. @@ -1421,7 +1434,7 @@ the POSIX standard for @command{awk} are noted. 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 document. +expert user and for the online Info and HTML versions of the @value{DOCUMENT}. @end ifnotinfo There are sidebars @@ -1643,7 +1656,7 @@ emphasized @emph{like this}, and if a point needs to be made strongly, it is done @strong{like this}. 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, file names are indicated like this: @file{/path/to/ourfile}. +Finally, @var{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, @@ -2298,7 +2311,7 @@ awk -f @var{source-file} @var{input-file1} @var{input-file2} @dots{} @cindex @option{-f} option @cindex command line, option @option{-f} The @option{-f} instructs the @command{awk} utility to get the @command{awk} program -from the file @var{source-file}. Any file name can be used for +from the file @var{source-file}. Any @var{FN} can be used for @var{source-file}. For example, you could put the program: @example @@ -2323,8 +2336,8 @@ awk "BEGIN @{ print \"Don't Panic!\" @}" @noindent This was explained earlier (@pxref{Read Terminal}). -Note that you don't usually need single quotes around the file name that you -specify with @option{-f}, because most file names don't contain any of the shell's +Note that you don't usually need single quotes around the @var{FN} that you +specify with @option{-f}, because most @var{FN}s don't contain any of the shell's special characters. Notice that in @file{advice}, the @command{awk} program did not have single quotes around it. The quotes are only needed for programs that are provided on the @command{awk} command line. @@ -2334,7 +2347,7 @@ for programs that are provided on the @command{awk} command line. @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, -you can add the extension @file{.awk} to the file name. This doesn't +you can add the extension @file{.awk} to the @var{FN}. This doesn't affect the execution of the @command{awk} program but it does make ``housekeeping'' easier. @@ -2361,13 +2374,13 @@ BEGIN @{ print "Don't Panic!" @} After making this file executable (with the @command{chmod} utility), simply type @samp{advice} at the shell and the system arranges to run @command{awk}@footnote{The -line beginning with @samp{#!} lists the full file name of an interpreter +line beginning with @samp{#!} lists the full @var{FN} of an interpreter to run and an optional initial command-line argument to pass to that interpreter. The operating system then runs the interpreter with the given argument and the full argument list of the executed program. The first argument -in the list is the full file name of the @command{awk} program. +in the list is the full @var{FN} of the @command{awk} program. The rest of the -argument list contains either options to @command{awk}, or data files, +argument list contains either options to @command{awk}, or @value{DF}s, or both. Note that on many systems @command{awk} may be found in @file{/usr/bin} instead of in @file{/bin}. Caveat Emptor.} as if you had typed @samp{awk -f advice}: @@ -2599,7 +2612,7 @@ awk -F"" '@var{program}' @var{files} # wrong! @noindent In the second case, @command{awk} will attempt to use the text of the program -as the value of @code{FS}, and the first file name as the text of the program! +as the value of @code{FS}, and the first @var{FN} as the text of the program! This results in syntax errors at best, and confusing behavior at worst. @end itemize @@ -2715,18 +2728,18 @@ gawk "@{ print \"\042\" $0 \"\042\" @}" @var{file} @node Sample Data Files -@section Data Files for the Examples +@section @value{DDF}s for the Examples @cindex input files, examples @cindex @code{mail-list} file Many of the examples in this @value{DOCUMENT} take their input from two sample -data files. The first, @file{mail-list}, represents a list of peoples' names +@value{DF}s. The first, @file{mail-list}, represents a list of peoples' names together with their email addresses and information about those people. -The second data file, called @file{inventory-shipped}, contains +The second @value{DF}, called @file{inventory-shipped}, contains information about monthly shipments. In both files, each line is considered to be one @dfn{record}. -In the data file @file{mail-list}, each record contains the name of a person, +In the @value{DF} @file{mail-list}, each record contains the name of a person, his/her phone number, his/her email-address, and a code for their relationship with the author of the list. An @samp{A} in the last column means that the person is an acquaintance. An @samp{F} in the last @@ -2755,7 +2768,7 @@ Jean-Paul 555-2127 jeanpaul.campanorum@@nyu.edu R @end example @cindex @code{inventory-shipped} file -The data file @file{inventory-shipped} represents +The @value{DF} @file{inventory-shipped} represents information about shipments during the year. Each record contains the month, the number of green crates shipped, the number of red boxes shipped, the number of @@ -2847,9 +2860,9 @@ 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 please read the rest of the @value{DOCUMENT} to become an @command{awk} expert!) -Most of the examples use a data file named @file{data}. This is just a +Most of the examples use a @value{DF} named @file{data}. This is just a placeholder; if you use these programs yourself, substitute -your own file names for @file{data}. +your own @var{FN}s for @file{data}. For future reference, note that there is often more than one way to do things in @command{awk}. At some point, you may want to look back at these examples and see if @@ -2939,7 +2952,7 @@ awk 'END @{ print NR @}' data @end example @item -Print the even-numbered lines in the data file: +Print the even-numbered lines in the @value{DF}: @example awk 'NR % 2 == 0' data @@ -2981,7 +2994,7 @@ This program prints every line that contains the string @samp{12} @emph{or} the string @samp{21}. If a line contains both strings, it is printed twice, once by each rule. -This is what happens if we run this program on our two sample data files, +This is what happens if we run this program on our two sample @value{DF}s, @file{mail-list} and @file{inventory-shipped}: @example @@ -3041,7 +3054,7 @@ the file. The fourth field identifies the group of the file. The fifth field contains the size of the file in bytes. The sixth, seventh, and eighth fields contain the month, day, and time, respectively, that the file was last modified. Finally, the ninth field -contains the file name.@footnote{The @samp{LC_ALL=C} is +contains the @var{FN}.@footnote{The @samp{LC_ALL=C} is needed to produce this traditional-style output from @command{ls}.} @c @cindex automatic initialization @@ -3444,8 +3457,8 @@ conventions. @cindex @code{-} (hyphen), filenames beginning with @cindex hyphen (@code{-}), filenames beginning with -This is useful if you have file names that start with @samp{-}, -or in shell scripts, if you have file names that will be specified +This is useful if you have @var{FN}s that start with @samp{-}, +or in shell scripts, if you have @var{FN}s that will be specified 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}. @@ -3690,7 +3703,7 @@ Enable pretty-printing of @command{awk} programs. By default, output program is created in a file named @file{awkprof.out} (@pxref{Profiling}). The optional @var{file} argument allows you to specify a different -file name for the output. +@var{FN} for the output. No space is allowed between the @option{-o} and @var{file}, if @var{file} is supplied. @@ -3717,7 +3730,7 @@ Enable profiling of @command{awk} programs (@pxref{Profiling}). By default, profiles are created in a file named @file{awkprof.out}. The optional @var{file} argument allows you to specify a different -file name for the profile file. +@var{FN} for the profile file. No space is allowed between the @option{-p} and @var{file}, if @var{file} is supplied. @@ -3797,7 +3810,7 @@ output redirections with @code{print} and @code{printf}, and dynamic extensions. This is particularly useful when you want to run @command{awk} scripts from questionable sources and need to make sure the scripts -can't access your system (other than the specified input data file). +can't access your system (other than the specified input @value{DF}). @item @option{-t} @itemx @option{--lint-old} @@ -3929,9 +3942,9 @@ current element. @cindex input files, variable assignments and @cindex variable assignments and input files -The distinction between file name arguments and variable-assignment +The distinction between @var{FN} arguments and variable-assignment arguments is made when @command{awk} is about to open the next input file. -At that point in execution, it checks the file name to see whether +At that point in execution, it checks the @var{FN} to see whether it is really a variable assignment; if so, @command{awk} sets the variable instead of reading a file. @@ -3948,7 +3961,7 @@ sequences (@pxref{Escape Sequences}). @value{DARKCORNER} In some very early implementations of @command{awk}, when a variable assignment -occurred before any file names, the assignment would happen @emph{before} +occurred before any @var{FN}s, the assignment would happen @emph{before} the @code{BEGIN} rule was executed. @command{awk}'s behavior was thus inconsistent; some command-line assignments were available inside the @code{BEGIN} rule, while others were not. Unfortunately, @@ -3959,8 +3972,8 @@ upon the old behavior. The variable assignment feature is most useful for assigning to variables such as @code{RS}, @code{OFS}, and @code{ORS}, which control input and -output formats, before scanning the data files. It is also useful for -controlling state if multiple passes are needed over a data file. For +output formats, before scanning the @value{DF}s. It is also useful for +controlling state if multiple passes are needed over a @value{DF}. For example: @cindex files, multiple passes over @@ -3996,13 +4009,13 @@ You may also use @code{"-"} to name standard input when reading files with @code{getline} (@pxref{Getline/File}). In addition, @command{gawk} allows you to specify the special -file name @file{/dev/stdin}, both on the command line and +@var{FN} @file{/dev/stdin}, both on the command line and with @code{getline}. Some other versions of @command{awk} also support this, but it is not standard. (Some operating systems provide a @file{/dev/stdin} file in the file system; however, @command{gawk} always processes -this file name itself.) +this @var{FN} itself.) @node Environment Variables @section The Environment Variables @command{gawk} Uses @@ -4032,7 +4045,7 @@ on the command-line with the @option{-f} option. In most @command{awk} implementations, you must supply a precise path name for each program file, unless the file is in the current directory. -But in @command{gawk}, if the file name supplied to the @option{-f} +But in @command{gawk}, if the @var{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 @@ -4052,7 +4065,7 @@ though.} The search path feature is particularly helpful for building libraries of useful @command{awk} functions. The library files can be placed in a standard directory in the default path and then specified on -the command line with a short file name. Otherwise, the full file name +the command line with a short @var{FN}. Otherwise, the full @var{FN} would have to be typed for each file. By using the @option{-i} option, or the @option{--source} and @option{-f} options, your command-line @@ -4063,7 +4076,7 @@ This is true for both @option{--traditional} and @option{--posix}. @xref{Options}. If the source code is not found after the initial search, the path is searched -again after adding the default @samp{.awk} suffix to the filename. +again after adding the default @samp{.awk} suffix to the @value{FN}. @quotation NOTE @c 4/2014: @@ -4279,7 +4292,7 @@ use @code{@@include} followed by the name of the file to be included, enclosed in double quotes. @quotation NOTE -Keep in mind that this is a language construct and the file name cannot +Keep in mind that this is a language construct and the @var{FN} cannot be a string variable, but rather just a literal string constant in double quotes. @end quotation @@ -4304,7 +4317,7 @@ $ @kbd{gawk -f test3} @print{} This is file test3. @end example -The file name can, of course, be a pathname. For example: +The @var{FN} can, of course, be a pathname. For example: @example @@include "../io_funcs" @@ -4362,7 +4375,7 @@ to using the @option{-l} command-line option. If the extension is not initially found in @env{AWKLIBPATH}, another search is conducted after appending the platform's default shared library -suffix to the filename. For example, on GNU/Linux systems, the suffix +suffix to the @value{FN}. For example, on GNU/Linux systems, the suffix @samp{.so} is used. @example @@ -4401,7 +4414,7 @@ they will @emph{not} be in the next release). The process-related special files @file{/dev/pid}, @file{/dev/ppid}, @file{/dev/pgrpid}, and @file{/dev/user} were deprecated in @command{gawk} -3.1, but still worked. As of version 4.0, they are no longer +3.1, but still worked. As of @value{PVERSION} 4.0, they are no longer interpreted specially by @command{gawk}. (Use @code{PROCINFO} instead; see @ref{Auto-set}.) @@ -5030,7 +5043,7 @@ constants, @command{gawk} did @emph{not} match interval expressions in regexps. -However, beginning with version 4.0, +However, beginning with @value{PVERSION} 4.0, @command{gawk} does match interval expressions by default. This is because compatibility with POSIX has become more important to most @command{gawk} users than compatibility with @@ -5348,8 +5361,10 @@ previously described GNU regexp operators. @end ifnotinfo @ifnottex +@ifnotdocbook GNU regexp operators described in @ref{Regexp Operators}. +@end ifnotdocbook @end ifnottex @item @code{--posix} @@ -5695,7 +5710,7 @@ so far from the current input file. This value is stored in a built-in variable called @code{FNR}. It is reset to zero when a new file is started. Another built-in variable, @code{NR}, records the total -number of input records read so far from all data files. It starts at zero, +number of input records read so far from all @value{DF}s. It starts at zero, but is never automatically reset to zero. @menu @@ -5788,7 +5803,7 @@ $ @kbd{awk 'BEGIN @{ RS = "u" @}} @noindent Note that the entry for the name @samp{Bill} is not split. -In the original data file +In the original @value{DF} (@pxref{Sample Data Files}), the line looks like this: @@ -5801,7 +5816,7 @@ 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}. 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 +is the original newline in the @value{DF}, not the one added by @command{awk} when it printed the record! @cindex record separators, changing @@ -5945,7 +5960,7 @@ In compatibility mode, only the first character of the value of @sidebar @code{RS = "\0"} Is Not Portable @cindex portability, data files as single record -There are times when you might want to treat an entire data file as a +There are times when you might want to treat an entire @value{DF} as a single record. The only way to make this happen is to give @code{RS} a value that you know doesn't occur in the input file. This is hard to do in a general way, such that a program always works for arbitrary @@ -7126,7 +7141,7 @@ appear in a row, they are considered one record separator. @cindex dark corner, multiline records However, there is an important difference between @samp{RS = ""} and @samp{RS = "\n\n+"}. In the first case, leading newlines in the input -data file are ignored, and if a file ends without extra blank lines +@value{DF} are ignored, and if a file ends without extra blank lines after the last record, the final newline is removed from the record. In the second case, this special processing is not done. @value{DARKCORNER} @@ -7162,7 +7177,7 @@ 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.) -A practical example of a data file organized this way might be a mailing +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 in a file named @file{addresses}, which looks like this: @@ -7227,7 +7242,7 @@ value of @table @code @item RS == "\n" Records are separated by the newline character (@samp{\n}). In effect, -every line in the data file is a separate record, including blank lines. +every line in the @value{DF} is a separate record, including blank lines. This is the default. @item RS == @var{any single character} @@ -7448,7 +7463,7 @@ the value of @code{NF} do not change. @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 -specifies the file name. @samp{< @var{file}} is called a @dfn{redirection} +specifies the @var{FN}. @samp{< @var{file}} is called a @dfn{redirection} because it directs input to come from a different place. For example, the following program reads its input record from the file @file{secondary.input} when it @@ -7567,7 +7582,9 @@ The @code{close()} function is called to ensure that if two identical @samp{@@execute} lines appear in the input, the command is run for each one. @ifnottex +@ifnotdocbook @xref{Close Files And Pipes}. +@end ifnotdocbook @end ifnottex @c Exercise!! @c This example is unrealistic, since you could just use system @@ -7754,10 +7771,10 @@ system permits. @item An interesting side effect occurs if you use @code{getline} without a redirection inside a @code{BEGIN} rule. Because an unredirected @code{getline} -reads from the command-line data files, the first @code{getline} command +reads from the command-line @value{DF}s, the first @code{getline} command causes @command{awk} to set the value of @code{FILENAME}. Normally, @code{FILENAME} does not have a value inside @code{BEGIN} rules, because you -have not yet started to process the command-line data files. +have not yet started to process the command-line @value{DF}s. @value{DARKCORNER} (@xref{BEGIN/END}, also @pxref{Auto-set}.) @@ -7994,7 +8011,7 @@ For printing with specifications, you need the @code{printf} statement @cindex @code{printf} statement Besides basic and formatted printing, this @value{CHAPTER} also covers I/O redirections to files and pipes, introduces -the special file names that @command{gawk} processes internally, +the special @var{FN}s that @command{gawk} processes internally, and discusses the @code{close()} built-in function. @menu @@ -8802,9 +8819,9 @@ but they work identically for @code{printf}: @cindex operators, input/output @item print @var{items} > @var{output-file} This redirection prints the items into the output file named -@var{output-file}. The file name @var{output-file} can be any +@var{output-file}. The @var{FN} @var{output-file} can be any expression. Its value is changed to a string and then used as a -file name (@pxref{Expressions}). +@var{FN} (@pxref{Expressions}). When this type of redirection is used, the @var{output-file} is erased before the first output is written to it. Subsequent writes to the same @@ -8957,7 +8974,9 @@ As mentioned earlier many @end ifnotinfo @ifnottex +@ifnotdocbook Many +@end ifnotdocbook @end ifnottex older @command{awk} implementations limit the number of pipelines that an @command{awk} @@ -8970,7 +8989,7 @@ open as many pipelines as the underlying operating system permits. A particularly powerful way to use redirection is to build command lines and pipe them into the shell, @command{sh}. For example, suppose you -have a list of files brought over from a system where all the file names +have a list of files brought over from a system where all the @var{FN}s are stored in uppercase, and you wish to rename them to have names in all lowercase. The following program is both simple and efficient: @@ -8992,12 +9011,12 @@ It then sends the list to the shell for execution. @c ENDOFRANGE reout @node Special Files -@section Special File Names in @command{gawk} +@section Special @value{FFN} in @command{gawk} @c STARTOFRANGE gfn @cindex @command{gawk}, file names in -@command{gawk} provides a number of special file names that it interprets -internally. These file names provide access to standard file descriptors +@command{gawk} provides a number of special @var{FN}s that it interprets +internally. These @var{FN}s provide access to standard file descriptors and TCP/IP networking. @menu @@ -9061,12 +9080,12 @@ that happens, writing to the screen is not correct. In fact, if terminal at all. Then opening @file{/dev/tty} fails. -@command{gawk} provides special file names for accessing the three standard +@command{gawk} provides special @var{FN}s for accessing the three standard streams. @value{COMMONEXT} It also provides syntax for accessing -any other inherited open files. If the file name matches +any other inherited open files. If the @var{FN} matches one of these special names when @command{gawk} redirects input or output, -then it directly uses the stream that the file name stands for. -These special file names work for all operating systems that @command{gawk} +then it directly uses the stream that the @var{FN} stands for. +These special @var{FN}s work for all operating systems that @command{gawk} has been ported to, not just those that are POSIX-compliant: @cindex common extensions, @code{/dev/stdin} special file @@ -9096,7 +9115,7 @@ the shell). Unless special pains are taken in the shell from which @command{gawk} is invoked, only descriptors 0, 1, and 2 are available. @end table -The file names @file{/dev/stdin}, @file{/dev/stdout}, and @file{/dev/stderr} +The @var{FN}s @file{/dev/stdin}, @file{/dev/stdout}, and @file{/dev/stderr} are aliases for @file{/dev/fd/0}, @file{/dev/fd/1}, and @file{/dev/fd/2}, respectively. However, they are more self-explanatory. The proper way to write an error message in a @command{gawk} program @@ -9107,13 +9126,13 @@ print "Serious error detected!" > "/dev/stderr" @end example @cindex troubleshooting, quotes with file names -Note the use of quotes around the file name. +Note the use of quotes around the @var{FN}. Like any other redirection, the value must be a string. It is a common error to omit the quotes, which leads to confusing results. @c Exercise: What does it do? :-) -Finally, using the @code{close()} function on a file name of the +Finally, using the @code{close()} function on a @var{FN} of the form @code{"/dev/fd/@var{N}"}, for file descriptor numbers above two, does actually close the given file descriptor. @@ -9129,7 +9148,7 @@ versions of @command{awk}. @command{gawk} programs can open a two-way TCP/IP connection, acting as either a client or a server. -This is done using a special file name of the form: +This is done using a special @var{FN} of the form: @example @file{/@var{net-type}/@var{protocol}/@var{local-port}/@var{remote-host}/@var{remote-port}} @@ -9139,7 +9158,7 @@ The @var{net-type} is one of @samp{inet}, @samp{inet4} or @samp{inet6}. The @var{protocol} is one of @samp{tcp} or @samp{udp}, and the other fields represent the other essential pieces of information for making a networking connection. -These file names are used with the @samp{|&} operator for communicating +These @var{FN}s are used with the @samp{|&} operator for communicating with a coprocess (@pxref{Two-way I/O}). This is an advanced feature, mentioned here only for completeness. @@ -9147,21 +9166,21 @@ Full discussion is delayed until @ref{TCP/IP Networking}. @node Special Caveats -@subsection Special File Name Caveats +@subsection Special @value{FFN} Caveats Here is a list of things to bear in mind when using the -special file names that @command{gawk} provides: +special @var{FN}s that @command{gawk} provides: @itemize @value{BULLET} @cindex compatibility mode (@command{gawk}), file names @cindex file names, in compatibility mode @item -Recognition of these special file names is disabled if @command{gawk} is in +Recognition of these special @var{FN}s is disabled if @command{gawk} is in compatibility mode (@pxref{Options}). @item @command{gawk} @emph{always} -interprets these special file names. +interprets these special @var{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 @@ -9184,7 +9203,7 @@ Doing so results in unpredictable behavior. @cindex coprocesses, closing @cindex @code{getline} command, coprocesses@comma{} using from -If the same file name or the same shell command is used with @code{getline} +If the same @var{FN} or the same shell command is used with @code{getline} more than once during the execution of an @command{awk} program (@pxref{Getline}), the file is opened (or the command is executed) the first time only. @@ -9193,7 +9212,7 @@ The next time the same file or command is used with @code{getline}, another record is read from it, and so on. Similarly, when a file or pipe is opened for output, @command{awk} remembers -the file name or command associated with it, and subsequent +the @var{FN} or command associated with it, and subsequent writes to the same file or command are appended to the previous writes. The file or pipe stays open until @command{awk} exits. @@ -9235,7 +9254,7 @@ file or command, or the next @code{print} or @code{printf} to that file or command, reopens the file or reruns the command. Because the expression that you use to close a file or pipeline must exactly match the expression used to open the file or run the command, -it is good practice to use a variable to store the file name or command. +it is good practice to use a variable to store the @var{FN} or command. The previous example becomes the following: @example @@ -9285,7 +9304,7 @@ a separate message. @cindex @code{close()} function, portability If you use more files than the system allows you to have open, @command{gawk} attempts to multiplex the available open files among -your data files. @command{gawk}'s ability to do this depends upon the +your @value{DF}s. @command{gawk}'s ability to do this depends upon the facilities of your operating system, so it may not always work. It is therefore both good practice and good portability advice to always use @code{close()} on your files when you are done with them. @@ -9803,7 +9822,7 @@ as in the following: @noindent the variable is set at the very beginning, even before the @code{BEGIN} rules execute. The @option{-v} option and its assignment -must precede all the file name arguments, as well as the program text. +must precede all the @var{FN} arguments, as well as the program text. (@xref{Options}, for more information about the @option{-v} option.) Otherwise, the variable assignment is performed at a time determined by @@ -12970,11 +12989,11 @@ The @code{nextfile} statement is similar to the @code{next} statement. However, instead of abandoning processing of the current record, the @code{nextfile} statement instructs @command{awk} to stop processing the -current data file. +current @value{DF}. Upon execution of the @code{nextfile} statement, @code{FILENAME} is -updated to the name of the next data file listed on the command line, +updated to the name of the next @value{DF} listed on the command line, @code{FNR} is reset to one, and processing starts over with the first rule in the program. @@ -12983,10 +13002,10 @@ then the code in any @code{END} rules is executed. An exception to this is when @code{nextfile} is invoked during execution of any statement in an @code{END} rule; In this case, it causes the program to stop immediately. @xref{BEGIN/END}. -The @code{nextfile} statement is useful when there are many data files +The @code{nextfile} statement is useful when there are many @value{DF}s to process but it isn't necessary to process every record in every file. Without @code{nextfile}, -in order to move on to the next data file, a program +in order to move on to the next @value{DF}, a program would have to continue scanning the unwanted records. The @code{nextfile} statement accomplishes this much more efficiently. @@ -13430,15 +13449,15 @@ about how @command{awk} uses these variables. @cindex differences in @command{awk} and @command{gawk}, @code{ARGIND} variable @item @code{ARGIND #} The index in @code{ARGV} of the current file being processed. -Every time @command{gawk} opens a new data file for processing, it sets -@code{ARGIND} to the index in @code{ARGV} of the file name. +Every time @command{gawk} opens a new @value{DF} for processing, it sets +@code{ARGIND} to the index in @code{ARGV} of the @var{FN}. When @command{gawk} is processing the input files, @samp{FILENAME == ARGV[ARGIND]} is always true. @cindex files, processing@comma{} @code{ARGIND} variable and This variable is useful in file processing; it allows you to tell how far -along you are in the list of data files as well as to distinguish between -successive instances of the same file name on the command line. +along you are in the list of @value{DF}s as well as to distinguish between +successive instances of the same @var{FN} on the command line. @cindex file names, distinguishing While you can change the value of @code{ARGIND} within your @command{awk} @@ -13486,14 +13505,14 @@ to clear it yourself before doing an I/O operation. @cindex @code{FILENAME} variable @cindex dark corner, @code{FILENAME} variable @item @code{FILENAME} -The name of the current input file. When no data files are listed +The name of the current input file. When no @value{DF}s are listed on the command line, @command{awk} reads from the standard input and @code{FILENAME} is set to @code{"-"}. @code{FILENAME} changes each time a new file is read (@pxref{Reading Files}). Inside a @code{BEGIN} rule, the value of @code{FILENAME} is @code{""}, since there are no input files being processed yet.@footnote{Some early implementations of Unix @command{awk} initialized @code{FILENAME} to @code{"-"}, even if there -were data files to be processed. This behavior was incorrect and should +were @value{DF}s to be processed. This behavior was incorrect and should not be relied upon in your programs.} @value{DARKCORNER} Note, though, that using @code{getline} (@pxref{Getline}) inside a @code{BEGIN} rule can give @code{FILENAME} a value. @@ -13864,11 +13883,11 @@ additional files to be read. If the value of @code{ARGC} is decreased, that eliminates input files from the end of the list. By recording the old value of @code{ARGC} elsewhere, a program can treat the eliminated arguments as -something other than file names. +something other than @var{FN}s. To eliminate a file from the middle of the list, store the null string (@code{""}) into @code{ARGV} in place of the file's name. As a -special feature, @command{awk} ignores file names that have been +special feature, @command{awk} ignores @var{FN}s that have been replaced with the null string. Another option is to use the @code{delete} statement to remove elements from @@ -16517,17 +16536,17 @@ _bigskip} 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 version 3.1.4, @command{gawk} followed the POSIX rules +Starting with @value{PVERSION} 3.1.4, @command{gawk} followed the POSIX rules when @option{--posix} is specified (@pxref{Options}). Otherwise, it continued to follow the 1996 proposed rules, since that had been its behavior for many years. -When version 4.0.0 was released, the @command{gawk} maintainer +When @value{PVERSION} 4.0.0 was released, the @command{gawk} maintainer made the POSIX rules the default, breaking well over a decade's worth of backwards compatibility.@footnote{This was rather naive of him, despite there being a note in this section indicating that the next major version would move to the POSIX rules.} Needless to say, this was a bad idea, -and as of version 4.0.1, @command{gawk} resumed its historical +and as of @value{PVERSION} 4.0.1, @command{gawk} resumed its historical behavior, and only follows the POSIX rules when @option{--posix} is given. The rules for @code{gensub()} are considerably simpler. At the runtime @@ -16674,7 +16693,7 @@ then @command{awk} flushes the buffers for @emph{all} open output files and pipes. @quotation NOTE -Prior to version 4.0.2, @command{gawk} +Prior to @value{PVERSION} 4.0.2, @command{gawk} 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 @@ -18616,7 +18635,7 @@ function rsort(first, last) @c endfile @end example -Here is an extended version of the data file: +Here is an extended version of the @value{DF}: @example @c file eg/data/class_data2 @@ -19122,7 +19141,7 @@ An @code{END} rule is automatically added to the program calling @code{assert()}. Normally, if a program consists of just a @code{BEGIN} rule, the input files and/or standard input are not read. However, now that the program has an @code{END} rule, @command{awk} -attempts to read the input data files or standard input +attempts to read the input @value{DF}s or standard input (@pxref{Using BEGIN/END}), most likely causing the program to hang as it waits for input. @@ -19609,7 +19628,7 @@ This tests the result to see if it is empty or not. An equivalent test would be @samp{contents == ""}. @node Data File Management -@section Data File Management +@section @value{DDF} Management @c STARTOFRANGE dataf @cindex files, managing @@ -19618,7 +19637,7 @@ test would be @samp{contents == ""}. @c STARTOFRANGE flibdataf @cindex functions, library, managing data files This @value{SECTION} presents functions that are useful for managing -command-line data files. +command-line @value{DF}s. @menu * Filetrans Function:: A function for handling data file transitions. @@ -19629,7 +19648,7 @@ command-line data files. @end menu @node Filetrans Function -@subsection Noting Data File Boundaries +@subsection Noting @value{DDF} Boundaries @cindex files, managing, data file boundaries @cindex files, initialization and cleanup @@ -19637,8 +19656,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 data file and the -@code{END} rule is executed at the end of each data file. +@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}. When informed that this was not the case, the user requested that we add new special @@ -19649,7 +19668,7 @@ Adding these special patterns to @command{gawk} wasn't necessary; the job can be done cleanly in @command{awk} itself, as illustrated by the following library program. It arranges to call two user-supplied functions, @code{beginfile()} and -@code{endfile()}, at the beginning and end of each data file. +@code{endfile()}, at the beginning and end of each @value{DF}. Besides solving the problem in only nine(!) lines of code, it does so @emph{portably}; this works with any implementation of @command{awk}: @@ -19680,17 +19699,17 @@ 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 -automatically changes for each new data file. The current file name is +automatically changes for each new @value{DF}. The current @var{FN} is saved in a private variable, @code{_oldfilename}. If @code{FILENAME} does -not equal @code{_oldfilename}, then a new data file is being processed and +not equal @code{_oldfilename}, then a new @value{DF} is being processed and it is necessary to call @code{endfile()} for the old file. Because @code{endfile()} should only be called if a file has been processed, the program first checks to make sure that @code{_oldfilename} is not the null -string. The program then assigns the current file name to +string. The program then assigns the current @var{FN} to @code{_oldfilename} and calls @code{beginfile()} for the file. Because, like all @command{awk} variables, @code{_oldfilename} is initialized to the null string, this rule executes correctly even for the -first data file. +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 @@ -19699,7 +19718,7 @@ 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 -If the same data file occurs twice in a row on the command line, then +If the same @value{DF} occurs twice in a row on the command line, then @code{endfile()} and @code{beginfile()} are not executed at the end of the first pass and at the beginning of the second pass. The following version solves the problem: @@ -19814,12 +19833,12 @@ The @code{rewind()} function also relies on the @code{nextfile} keyword (@pxref{Nextfile Statement}). @node File Checking -@subsection Checking for Readable Data Files +@subsection Checking for Readable @value{DDF}s @cindex troubleshooting, readable data files @cindex readable data files@comma{} checking @cindex files, skipping -Normally, if you give @command{awk} a data file that isn't readable, +Normally, if you give @command{awk} a @value{DF} that isn't readable, it stops with a fatal error. There are times when you might want to just ignore such files and keep going.@footnote{The @code{BEGINFILE} special pattern (@pxref{BEGINFILE/ENDFILE}) provides an alternative @@ -19870,15 +19889,15 @@ 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 -command-line data file, @emph{without} executing any user-level +command-line @value{DF}, @emph{without} executing any user-level @command{awk} program code. Using @command{gawk}'s @code{ARGIND} variable (@pxref{Built-in Variables}), it is possible to detect when an empty -data file has been skipped. Similar to the library file presented +@value{DF} has been skipped. Similar to the library file presented in @ref{Filetrans Function}, the following library file calls a function named @code{zerofile()} that the user must provide. The arguments passed are -the file name and the position in @code{ARGV} where it was found: +the @var{FN} and the position in @code{ARGV} where it was found: @cindex @code{zerofile.awk} program @example @@ -19966,15 +19985,15 @@ END @{ @end ignore @node Ignoring Assigns -@subsection Treating Assignments as File Names +@subsection Treating Assignments as @value{FFN} @cindex assignments as filenames @cindex filenames, assignments as Occasionally, you might not want @command{awk} to process command-line variable assignments (@pxref{Assignment Options}). -In particular, if you have a file name that contains an @samp{=} character, -@command{awk} treats the file name as an assignment, and does not process it. +In particular, if you have a @var{FN} that contains an @samp{=} character, +@command{awk} treats the @var{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 @@ -20018,7 +20037,7 @@ awk -v No_command_assign=1 -f noassign.awk -f yourprog.awk * The function works by looping through the arguments. It prepends @samp{./} to any argument that matches the form -of a variable assignment, turning that argument into a file name. +of a variable assignment, turning that argument into a @var{FN}. The use of @code{No_command_assign} allows you to disable command-line assignments at invocation time, by giving the variable a true value. @@ -20374,7 +20393,7 @@ etc., as its own options. After @code{getopt()} is through, it is the responsibility of the user level code to clear out all the elements of @code{ARGV} from 1 to @code{Optind}, so that @command{awk} does not try to process the -command-line options as file names. +command-line options as @var{FN}s. @end quotation Several of the sample programs presented in @@ -21245,7 +21264,7 @@ awk -f @var{program} -- @var{options} @var{files} @noindent Here, @var{program} is the name of the @command{awk} program (such as @file{cut.awk}), @var{options} are any command-line options for the -program that start with a @samp{-}, and @var{files} are the actual data files. +program that start with a @samp{-}, and @var{files} are the actual @value{DF}s. If your system supports the @samp{#!} executable interpreter mechanism (@pxref{Executable Scripts}), @@ -21413,7 +21432,7 @@ BEGIN \ OFS = "" @} else if (c == "d") @{ if (length(Optarg) > 1) @{ - printf("Using first character of %s" \ + printf("cut: using first character of %s" \ " for delimiter\n", Optarg) > "/dev/stderr" Optarg = substr(Optarg, 1, 1) @} @@ -21444,7 +21463,7 @@ spaces. Also remember that after @code{getopt()} is through we have to clear out all the elements of @code{ARGV} from 1 to @code{Optind}, so that @command{awk} does not try to process the command-line options -as file names. +as @var{FN}s. After dealing with the command-line options, the program verifies that the options make sense. Only one or the other of @option{-c} and @option{-f} @@ -21494,7 +21513,7 @@ function set_fieldlist( n, m, i, j, k, f, g) m = split(f[i], g, "-") @group if (m != 2 || g[1] >= g[2]) @{ - printf("bad field list: %s\n", + printf("cut: bad field list: %s\n", f[i]) > "/dev/stderr" exit 1 @} @@ -21541,7 +21560,7 @@ function set_charlist( field, i, j, f, g, n, m, t, if (index(f[i], "-") != 0) @{ # range m = split(f[i], g, "-") if (m != 2 || g[1] >= g[2]) @{ - printf("bad character list: %s\n", + printf("cut: bad character list: %s\n", f[i]) > "/dev/stderr" exit 1 @} @@ -21641,8 +21660,8 @@ You invoke it as follows: The @var{pattern} is a regular expression. In typical usage, the regular expression is quoted to prevent the shell from expanding any of the -special characters as file name wildcards. Normally, @command{egrep} -prints the lines that matched. If multiple file names are provided on +special characters as @var{FN} wildcards. Normally, @command{egrep} +prints the lines that matched. If multiple @var{FN}s are provided on the command line, each output line is preceded by the name of the file and a colon. @@ -21733,7 +21752,7 @@ pattern is supplied with @option{-e}, the first nonoption on the command line is used. The @command{awk} command-line arguments up to @code{ARGV[Optind]} are cleared, so that @command{awk} won't try to process them as files. If no files are specified, the standard input is used, and if multiple files are -specified, we make sure to note this so that the file names can precede the +specified, we make sure to note this so that the @var{FN}s can precede the matched lines in the output: @example @@ -21836,9 +21855,9 @@ 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 (@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 file names, we can -print the file name, and then skip to the next file with @code{nextfile}. -Finally, each line is printed, with a leading file name and colon +@code{nextfile}. Similarly, if we are only printing @var{FN}s, we can +print the @var{FN}, and then skip to the next file with @code{nextfile}. +Finally, each line is printed, with a leading @var{FN} and colon if necessary: @cindex @code{!} (exclamation point), @code{!} operator @@ -22088,7 +22107,7 @@ 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 1000. To change the name of the output files to something like @file{myfileaa}, @file{myfileab}, and so on, supply an additional -argument that specifies the file name prefix. +argument that specifies the @var{FN} prefix. Here is a version of @command{split} in @command{awk}. It uses the @code{ord()} and @code{chr()} functions presented in @@ -22098,8 +22117,8 @@ The program first sets its defaults, and then tests to make sure there are not too many arguments. It then looks at each argument in turn. The first argument could be a minus sign followed by a number. If it is, this happens to look like a negative number, so it is made positive, and that is the -count of lines. The data file name is skipped over and the final argument -is used as the prefix for the output file names: +count of lines. The @value{DF} name is skipped over and the final argument +is used as the prefix for the output @value{FN}s: @cindex @code{split.awk} program @example @@ -22149,7 +22168,7 @@ BEGIN @{ The next rule does most of the work. @code{tcount} (temporary count) tracks how many lines have been printed to the output file so far. If it is greater than @code{count}, it is time to close the current file and start a new one. -@code{s1} and @code{s2} track the current suffixes for the file name. If +@code{s1} and @code{s2} track the current suffixes for the @value{FN}. If they are both @samp{z}, the file is just too big. Otherwise, @code{s1} moves to the next letter in the alphabet and @code{s2} starts over again at @samp{a}: @@ -22233,13 +22252,13 @@ The @code{BEGIN} rule first makes a copy of all the command-line arguments into an array named @code{copy}. @code{ARGV[0]} is not copied, since it is not needed. @code{tee} cannot use @code{ARGV} directly, since @command{awk} attempts to -process each file name in @code{ARGV} as input data. +process each @value{FN} in @code{ARGV} as input data. @cindex flag variables If the first argument is @option{-a}, then the flag variable @code{append} is set to true, and both @code{ARGV[1]} and @code{copy[1]} are deleted. If @code{ARGC} is less than two, then no -file names were supplied and @code{tee} prints a usage message and exits. +@value{FN}s were supplied and @code{tee} prints a usage message and exits. Finally, @command{awk} is forced to read the standard input by setting @code{ARGV[1]} to @code{"-"} and @code{ARGC} to two: @@ -22705,7 +22724,7 @@ BEGIN @{ @end example The @code{beginfile()} function is simple; it just resets the counts of lines, -words, and characters to zero, and saves the current file name in +words, and characters to zero, and saves the current @value{FN} in @code{fname}: @example @@ -22727,7 +22746,7 @@ you will see that @code{FNR} has already been reset by the time @code{endfile()} is called.} It then prints out those numbers for the file that was just read. It relies on @code{beginfile()} to reset the -numbers for the following data file: +numbers for the following @value{DF}: @c FIXME: ONE DAY: make the above footnote an exercise, @c instead of giving away the answer. @@ -23046,7 +23065,7 @@ is how long to wait before setting off the alarm: # how long to sleep for naptime = target - current if (naptime <= 0) @{ - print "time is in the past!" > "/dev/stderr" + print "alarm: time is in the past!" > "/dev/stderr" exit 1 @} @c endfile @@ -23519,7 +23538,7 @@ The @command{uniq} program (@pxref{Uniq Program}), removes duplicate lines from @emph{sorted} data. -Suppose, however, you need to remove duplicate lines from a data file but +Suppose, however, you need to remove duplicate lines from a @value{DF} but that you want to preserve the order the lines are in. A good example of this might be a shell history file. The history file keeps a copy of all the commands you have entered, and it is not unusual to repeat a command @@ -23715,7 +23734,7 @@ BEGIN @{ IGNORECASE = 1 @} /^@@c(omment)?[ \t]+system/ \ @{ if (NF < 3) @{ - e = (FILENAME ":" FNR) + e = ("extract: " FILENAME ":" FNR) e = (e ": badly formed `system' line") print e > "/dev/stderr" next @@ -23724,7 +23743,7 @@ BEGIN @{ IGNORECASE = 1 @} $2 = "" stat = system($0) if (stat != 0) @{ - e = (FILENAME ":" FNR) + e = ("extract: " FILENAME ":" FNR) e = (e ": warning: system returned " stat) print e > "/dev/stderr" @} @@ -23737,7 +23756,7 @@ The variable @code{e} is used so that the rule fits nicely on the @value{PAGE}. The second rule handles moving data into files. It verifies that a -file name is given in the directive. If the file named is not the +@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 @@ -23777,7 +23796,7 @@ line. That line is then printed to the output file: /^@@c(omment)?[ \t]+file/ \ @{ if (NF != 3) @{ - e = (FILENAME ":" FNR ": badly formed `file' line") + e = ("extract: " FILENAME ":" FNR ": badly formed `file' line") print e > "/dev/stderr" next @} @@ -23822,7 +23841,7 @@ subsequent output is appended to the file (@pxref{Redirection}). This makes it easy to mix program text and explanatory prose for the same sample source file (as has been done here!) without any hassle. The file is -only closed when a new data file name is encountered or at the end of the +only closed when a new @value{DF} name is encountered or at the end of the input file. Finally, the function @code{@w{unexpected_eof()}} prints an appropriate @@ -23834,7 +23853,7 @@ The @code{END} rule handles the final cleanup, closing the open file: @group function unexpected_eof() @{ - printf("%s:%d: unexpected EOF or error\n", + printf("extract: %s:%d: unexpected EOF or error\n", FILENAME, FNR) > "/dev/stderr" exit 1 @} @@ -23874,7 +23893,7 @@ Here, @samp{s/old/new/g} tells @command{sed} to look for the regexp The following program, @file{awksed.awk}, accepts at least two command-line arguments: the pattern to look for and the text to replace it with. Any -additional arguments are treated as data file names to process. If none +additional arguments are treated as @value{DF} names to process. If none are provided, the standard input is used: @cindex Brennan, Michael @@ -23948,7 +23967,7 @@ The @code{BEGIN} rule handles the setup, checking for the right number of arguments and calling @code{usage()} if there is a problem. Then it sets @code{RS} and @code{ORS} from the command-line arguments and sets @code{ARGV[1]} and @code{ARGV[2]} to the null string, so that they are -not treated as file names +not treated as @value{FN}s (@pxref{ARGC and ARGV}). The @code{usage()} function prints an error message and exits. @@ -24047,7 +24066,7 @@ Literal text, provided with @option{--source} or @option{--source=}. This text is just appended directly. @item -Source file names, provided with @option{-f}. We use a neat trick and append +Source @value{FN}s, provided with @option{-f}. We use a neat trick and append @samp{@@include @var{filename}} to the shell variable's contents. Since the file-inclusion program works the way @command{gawk} does, this gets the text of the file included into the program at the correct point. @@ -24060,7 +24079,7 @@ shell variable. @item Run the expanded program with @command{gawk} and any other original command-line -arguments that the user supplied (such as the data file names). +arguments that the user supplied (such as the @value{DF} names). @end enumerate This program uses shell variables extensively: for storing command-line arguments, @@ -24092,7 +24111,7 @@ programming trick. Don't worry about it if you are not familiar with These are saved and passed on to @command{gawk}. @item @option{-f}, @option{--file}, @option{--file=}, @option{-Wfile=} -The file name is appended to the shell variable @code{program} with an +The @value{FN} is appended to the shell variable @code{program} with an @code{@@include} statement. The @command{expr} utility is used to remove the leading option part of the argument (e.g., @samp{--file=}). @@ -24217,10 +24236,10 @@ is stored in the shell variable @code{expand_prog}. Doing this keeps the shell script readable. The @command{awk} program reads through the user's program, one line at a time, using @code{getline} (@pxref{Getline}). The input -file names and @code{@@include} statements are managed using a stack. -As each @code{@@include} is encountered, the current file name is +@value{FN}s and @code{@@include} statements are managed using a stack. +As each @code{@@include} is encountered, the current @value{FN} is ``pushed'' onto the stack and the file named in the @code{@@include} -directive becomes the current file name. As each file is finished, +directive becomes the current @value{FN}. As each file is finished, the stack is ``popped,'' and the previous input file becomes the current input file again. The process is started by making the original file the first one on the stack. @@ -24229,16 +24248,16 @@ The @code{pathto()} function does the work of finding the full path to a file. It simulates @command{gawk}'s behavior when searching the @env{AWKPATH} environment variable (@pxref{AWKPATH Variable}). -If a file name has a @samp{/} in it, no path search is done. -Similarly, if the file name is @code{"-"}, then that string is +If a @value{FN} has a @samp{/} in it, no path search is done. +Similarly, if the @value{FN} is @code{"-"}, then that string is used as-is. Otherwise, -the file name is concatenated with the name of each directory in -the path, and an attempt is made to open the generated file name. +the @value{FN} is concatenated with the name of each directory in +the path, and an attempt is made to open the generated @value{FN}. The only way to test if a file can be read in @command{awk} is to go ahead and try to read it with @code{getline}; this is what @code{pathto()} does.@footnote{On some very old versions of @command{awk}, the test @samp{getline junk < t} can loop forever if the file exists but is empty. -Caveat emptor.} If the file can be read, it is closed and the file name +Caveat emptor.} If the file can be read, it is closed and the @value{FN} is returned: @ignore @@ -24296,14 +24315,14 @@ BEGIN @{ The stack is initialized with @code{ARGV[1]}, which will be @code{"/dev/stdin"}. The main loop comes next. Input lines are read in succession. Lines that do not start with @code{@@include} are printed verbatim. -If the line does start with @code{@@include}, the file name is in @code{$2}. +If the line does start with @code{@@include}, the @value{FN} is in @code{$2}. @code{pathto()} is called to generate the full path. If it cannot, then the program prints an error message and continues. The next thing to check is if the file is included already. The -@code{processed} array is indexed by the full file name of each included +@code{processed} array is indexed by the full @value{FN} of each included file and it tracks this information for us. If the file is -seen again, a warning message is printed. Otherwise, the new file name is +seen again, a warning message is printed. Otherwise, the new @value{FN} is pushed onto the stack and processing continues. Finally, when @code{getline} encounters the end of the input file, the file @@ -24324,7 +24343,7 @@ the program is done: fpath = pathto($2) @group if (fpath == "") @{ - printf("igawk:%s:%d: cannot find %s\n", + printf("igawk: %s:%d: cannot find %s\n", input[stackptr], FNR, $2) > "/dev/stderr" continue @} @@ -24381,10 +24400,10 @@ 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 data file to @command{gawk} +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 data files to read. -The program should exit without reading any data files. +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 @@ -25483,10 +25502,10 @@ another process on another system across an IP network connection. You can think of this as just a @emph{very long} two-way pipeline to a coprocess. The way @command{gawk} decides that you want to use TCP/IP networking is -by recognizing special file names that begin with one of @samp{/inet/}, +by recognizing special @value{FN}s that begin with one of @samp{/inet/}, @samp{/inet4/} or @samp{/inet6}. -The full syntax of the special file name is +The full syntax of the special @value{FN} is @file{/@var{net-type}/@var{protocol}/@var{local-port}/@var{remote-host}/@var{remote-port}}. The components are: @@ -26667,10 +26686,11 @@ complete detail in @inforef{Top, , GNU @command{gettext} utilities, gettext, GNU gettext tools}.) @end ifinfo @ifnotinfo -@cite{GNU gettext tools}.) +@uref{http://www.gnu.org/software/gettext/manual/, +@cite{GNU gettext tools}}.) @end ifnotinfo As of this writing, the latest version of GNU @command{gettext} is -@uref{ftp://ftp.gnu.org/gnu/gettext/gettext-0.18.2.1.tar.gz, version 0.18.2.1}. +@uref{ftp://ftp.gnu.org/gnu/gettext/gettext-0.19.tar.gz, @value{PVERSION} 0.19}. If a translation of @command{gawk}'s messages exists, then @command{gawk} produces usage messages, warnings, @@ -27576,7 +27596,7 @@ functions which called the one you are in. The commands for doing this are: Print a backtrace of all function calls (stack frames), or innermost @var{count} frames if @var{count} > 0. Print the outermost @var{count} frames if @var{count} < 0. The backtrace displays the name and arguments to each -function, the source file name, and the line number. +function, the source @value{FN}, and the line number. @cindex debugger commands, @code{down} @cindex @code{down} debugger command @@ -27642,7 +27662,7 @@ Description of the selected stack frame. @item functions @cindex list function definitions, in debugger -List all function definitions including source file names and +List all function definitions including source @value{FN}s and line numbers. @item locals @@ -27730,7 +27750,7 @@ Turn instruction tracing on or off. The default is @code{off}. @end table @item @code{save} @var{filename} -Save the commands from the current session to the given file name, +Save the commands from the current session to the given @value{FN}, so that they can be replayed using the @command{source} command. @item @code{source} @var{filename} @@ -27904,8 +27924,8 @@ of completion are available: @item Command completion Command names. -@item Source file name completion -Source file names. Relevant commands are +@item Source @value{FN} completion +Source @value{FN}s. Relevant commands are @code{break}, @code{clear}, @code{list}, @@ -29163,7 +29183,7 @@ the problem at hand is often the correct approach in such situations. If one of the options @option{--bignum} or @option{-M} is specified, @command{gawk} performs all integer arithmetic using GMP arbitrary precision integers. -Any number that looks like an integer in a program source or data file +Any number that looks like an integer in a program source or @value{DF} is stored as an arbitrary precision integer. The size of the integer is limited only by your computer's memory. The current floating-point context has no effect on operations involving integers. @@ -30585,7 +30605,7 @@ 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 filename. +This function returns 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}. @@ -32461,7 +32481,7 @@ array with information retrieved from the filesystem, as follows: @multitable @columnfractions .15 .50 .20 @headitem Subscript @tab Field in @code{struct stat} @tab File type -@item @code{"name"} @tab The file name @tab All +@item @code{"name"} @tab The @value{FN} @tab All @item @code{"dev"} @tab @code{st_dev} @tab All @item @code{"ino"} @tab @code{st_ino} @tab All @item @code{"mode"} @tab @code{st_mode} @tab All @@ -32512,7 +32532,7 @@ The arguments are as follows: @table @code @item pathlist -An array of filenames. The element values are used; the index values are ignored. +An array of @value{FN}s. The element values are used; the index values are ignored. @item flags This should be the bitwise OR of one or more of the following @@ -32636,10 +32656,10 @@ The arguments to @code{fnmatch()} are: @table @code @item pattern -The filename wildcard to match. +The @var{FN} wildcard to match. @item string -The filename string. +The @var{FN} string. @item flag Either zero, or the bitwise OR of one or more of the @@ -32746,8 +32766,8 @@ standard output to a temporary file configured to have the same owner and permissions as the original. After the file has been processed, the extension restores standard output to its original destination. If @code{INPLACE_SUFFIX} is not an empty string, the original file is -linked to a backup filename created by appending that suffix. Finally, -the temporary file is renamed to the original filename. +linked to a backup @var{FN} created by appending that suffix. Finally, +the temporary file is renamed to the original @var{FN}. If any error occurs, the extension issues a fatal error to terminate processing immediately without damaging the original file. @@ -32813,7 +32833,7 @@ on the command line (or with @code{getline}), 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 -filename, separated by a forward slash character. +@var{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 indicating the type of the file. The letters are file types are shown @@ -33496,7 +33516,7 @@ Special files in I/O redirections: @itemize @value{MINUS} @item The @file{/dev/stdin}, @file{/dev/stdout}, @file{/dev/stderr} and -@file{/dev/fd/@var{N}} special file names +@file{/dev/fd/@var{N}} special @value{FN}s (@pxref{Special Files}). @item @@ -33720,7 +33740,7 @@ long options @item Support for the following obsolete systems was removed from the code -and the documentation for @command{gawk} version 4.0: +and the documentation for @command{gawk} @value{PVERSION} 4.0: @c nested table @itemize @value{MINUS} @@ -33813,7 +33833,7 @@ The @code{IGNORECASE} variable and its effects @item The @file{/dev/stdin}, @file{/dev/stdout}, @file{/dev/stderr} and -@file{/dev/fd/@var{N}} special file names +@file{/dev/fd/@var{N}} special @value{FN}s (@pxref{Special Files}). @end itemize @@ -33850,7 +33870,7 @@ Version 2.14 of @command{gawk} introduced the following feature: @itemize @value{BULLET} @item -The @code{next file} statement for skipping to the next data file +The @code{next file} statement for skipping to the next @value{DF} (@pxref{Nextfile Statement}). @end itemize @@ -33872,7 +33892,7 @@ through @code{ARGV}. @item The @file{/dev/pid}, @file{/dev/ppid}, @file{/dev/pgrpid}, and -@file{/dev/user} special file names. These have since been removed. +@file{/dev/user} special @value{FN}s. These have since been removed. @item The ability to delete all of an array at once with @samp{delete @var{array}} @@ -34494,7 +34514,7 @@ like ``why does @samp{[A-Z]} match lowercase letters?!?'' 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 -was in the user's locale. During the development of version 4.0, +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 @@ -34875,7 +34895,7 @@ Extracting the archive creates a directory named @file{gawk-@value{VERSION}.@value{PATCHLEVEL}} in the current directory. -The distribution file name is of the form +The distribution @value{FN} is of the form @file{gawk-@var{V}.@var{R}.@var{P}.tar.gz}. The @var{V} represents the major version of @command{gawk}, the @var{R} represents the current release of version @var{V}, and @@ -35544,7 +35564,7 @@ the @command{configure} script as is the case for the Unix versions. If @file{c:/usr} is the prefix directory then the default search path contains @file{.} and @file{c:/usr/share/awk}. Additionally, to support binary distributions of @command{gawk} for OS/2 -systems whose drive @samp{c:} might not support long file names or might not exist +systems whose drive @samp{c:} might not support long @value{FN}s or might not exist at all, there is a special environment variable. If @env{UNIXROOT} specifies a drive then this specific drive is also searched for program files. E.g., if @env{UNIXROOT} is set to @file{e:} the complete default search path is @@ -35739,7 +35759,7 @@ $ @kbd{MMK/DESCRIPTION=[.vms]descrip.mms gawk} @end example @command{MMK} is an open source, free, near-clone of @command{MMS} and -can better handle ODS-5 volumes with upper- and lowercase filenames. +can better handle ODS-5 volumes with upper- and lowercase @var{FN}s. @command{MMK} is available from @uref{https://github.com/endlesssoftware/mmk}. With ODS-5 volumes and extended parsing enabled, the case of the target @@ -35870,11 +35890,11 @@ provides information about both the @command{gawk} implementation and the The logical name @samp{AWK_LIBRARY} can designate a default location for @command{awk} program files. For the @option{-f} option, if the specified -file name has no device or directory path information in it, @command{gawk} +@value{FN} has no device or directory path information in it, @command{gawk} looks in the current directory first, then in the directory specified by the translation of @samp{AWK_LIBRARY} if the file is not found. If, after searching in both directories, the file still is not found, -@command{gawk} appends the suffix @samp{.awk} to the filename and retries +@command{gawk} appends the suffix @samp{.awk} to the @var{FN} and retries the file search. If @samp{AWK_LIBRARY} has no definition, a default value of @samp{SYS$LIBRARY:} is used for it. @@ -35903,7 +35923,7 @@ One side effect of dual command-line parsing is that if there is only a single parameter (as in the quoted string program above), the command becomes ambiguous. To work around this, the normally optional @option{--} flag is required to force Unix-style parsing rather than @code{DCL} parsing. If any -other dash-type options (or multiple parameters such as data files to +other dash-type options (or multiple parameters such as @value{DF}s to process) are present, there is no ambiguity and @option{--} can be omitted. @cindex exit status, of VMS @@ -36012,7 +36032,7 @@ define a symbol, as follows: $ @kbd{gawk :== $sys$common:[syshlp.examples.tcpip.snmp]gawk.exe} @end example -This is apparently version 2.15.6, which is extremely old. We +This is apparently @value{PVERSION} 2.15.6, which is extremely old. We recommend compiling and using the current version. @c ENDOFRANGE opgawx @@ -36041,8 +36061,8 @@ what you're trying to do. If it's not clear whether you should be able 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 data file that -reproduces the problem. Then send us the program and data file, +to the smallest possible @command{awk} program and input @value{DF} that +reproduces 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 @@ -37257,7 +37277,7 @@ to any of the above. @ref{Dynamic Extensions}, describes the supported API and mechanisms for writing extensions for @command{gawk}. This API was introduced -in version 4.1. However, for many years @command{gawk} +in @value{PVERSION} 4.1. However, for many years @command{gawk} provided an extension mechanism that required knowledge of @command{gawk} internals and that was not as well designed. @@ -38249,7 +38269,7 @@ numeric values. It is the C type @code{float}. The character generated by hitting the space bar on the keyboard. @item Special File -A file name interpreted internally by @command{gawk}, instead of being handed +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}.) @@ -39665,9 +39685,6 @@ ORA uses filename, thus the macro. Suggestions: ------------ -% Next edition: -% 1. Standardize the error messages from the functions and programs -% in the two sample code chapters. Better sidebars can almost sort of be done with: -- cgit v1.2.3 From 3b01804f1b62c091f56a996c7f00657934dc9a0f Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 8 Jun 2014 22:56:28 +0300 Subject: Improvements in testdfa.c. --- helpers/ChangeLog | 4 ++++ helpers/testdfa.c | 31 ++++++++++++++++++------------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/helpers/ChangeLog b/helpers/ChangeLog index 17624c3f..c9121403 100644 --- a/helpers/ChangeLog +++ b/helpers/ChangeLog @@ -1,3 +1,7 @@ +2014-06-08 Arnold D. Robbins + + * testdfa.c: Minor improvements. + 2014-04-08 Arnold D. Robbins * 4.1.1: Release tar ball made. diff --git a/helpers/testdfa.c b/helpers/testdfa.c index 813acaab..25a229a2 100644 --- a/helpers/testdfa.c +++ b/helpers/testdfa.c @@ -40,14 +40,16 @@ #include +#undef _Noreturn #define _Noreturn +#define _GL_ATTRIBUTE_PURE #include "dfa.h" const char *regexflags2str(int flags); char *databuf(int fd); const char * reflags2str(int flagval); int parse_escape(const char **string_ptr); -char *setup_pattern(const char *pattern, size_t len); +char *setup_pattern(const char *pattern, size_t *len); char casetable[]; reg_syntax_t syn; @@ -126,10 +128,10 @@ int main(int argc, char **argv) printf("Ignorecase: %s\nSyntax: %s\n", (ignorecase ? "true" : "false"), reflags2str(syn)); - printf("Pattern: /%s/\n", pattern); + printf("Pattern: /%s/, len = %d\n", pattern, len); - pattern = setup_pattern(pattern, len); - len = strlen(pattern); + pattern = setup_pattern(pattern, & len); + printf("After setup_pattern(), len = %d\n", len); pat.fastmap = (char *) malloc(256); if (pat.fastmap == NULL) { @@ -191,7 +193,10 @@ int main(int argc, char **argv) &count, &try_backref); data[len] = save; - printf("dfaexec returned %p (%.3s)\n", place, place); + if (place == NULL) + printf("dfaexec returned NULL\n"); + else + printf("dfaexec returned %d (%.3s)\n", place - data, place); /* release storage */ regfree(& pat); @@ -363,7 +368,7 @@ r_fatal(const char *mesg, ...) /* setup_pattern --- do what gawk does with the pattern string */ char * -setup_pattern(const char *pattern, size_t len) +setup_pattern(const char *pattern, size_t *len) { size_t is_multibyte = 0; int c, c2; @@ -377,7 +382,7 @@ setup_pattern(const char *pattern, size_t len) memset(& mbs, 0, sizeof(mbs)); src = pattern; - end = pattern + len; + end = pattern + *len; /* Handle escaped characters first. */ @@ -387,19 +392,19 @@ setup_pattern(const char *pattern, size_t len) * from that. */ if (buf == NULL) { - buf = (char *) malloc(len + 2); + buf = (char *) malloc(*len + 2); if (buf == NULL) { fprintf(stderr, "%s: malloc failed\n", __func__); exit(EXIT_FAILURE); } - buflen = len; - } else if (len > buflen) { - buf = (char *) realloc(buf, len + 2); + buflen = *len; + } else if (*len > buflen) { + buf = (char *) realloc(buf, *len + 2); if (buf == NULL) { fprintf(stderr, "%s: realloc failed\n", __func__); exit(EXIT_FAILURE); } - buflen = len; + buflen = *len; } dest = buf; @@ -487,7 +492,7 @@ setup_pattern(const char *pattern, size_t len) } /* while */ *dest = '\0'; - len = dest - buf; + *len = dest - buf; return buf; } -- cgit v1.2.3 From e96948cae7fb67f9fa0f8cb4fb8784f227905dee Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 8 Jun 2014 22:56:46 +0300 Subject: Sync dfa with GNU grep. --- ChangeLog | 4 ++++ dfa.c | 17 ++--------------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index edbb2c22..36ac6f2d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2014-06-08 Arnold D. Robbins + + * dfa.c: Sync with GNU grep. + 2014-06-03 Arnold D. Robbins * dfa.c (mbs_to_wchar): Define a macro if not MBS. diff --git a/dfa.c b/dfa.c index 29c854f2..e2a83d43 100644 --- a/dfa.c +++ b/dfa.c @@ -3836,19 +3836,6 @@ icatalloc (char *old, char const *new) return result; } -static char *_GL_ATTRIBUTE_PURE -istrstr (char const *lookin, char const *lookfor) -{ - char const *cp; - size_t len; - - len = strlen (lookfor); - for (cp = lookin; *cp != '\0'; ++cp) - if (strncmp (cp, lookfor, len) == 0) - return (char *) cp; - return NULL; -} - static void freelist (char **cpp) { @@ -3864,7 +3851,7 @@ enlist (char **cpp, char *new, size_t len) new[len] = '\0'; /* Is there already something in the list that's new (or longer)? */ for (i = 0; cpp[i] != NULL; ++i) - if (istrstr (cpp[i], new) != NULL) + if (strstr (cpp[i], new) != NULL) { free (new); return cpp; @@ -3872,7 +3859,7 @@ enlist (char **cpp, char *new, size_t len) /* Eliminate any obsoleted strings. */ j = 0; while (cpp[j] != NULL) - if (istrstr (new, cpp[j]) == NULL) + if (strstr (new, cpp[j]) == NULL) ++j; else { -- cgit v1.2.3 From 55390bf583f7a3629a4c63de436702fa1b8b613b Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 8 Jun 2014 22:57:08 +0300 Subject: Minor fix in dbugeval test. --- test/ChangeLog | 4 ++++ test/Makefile.am | 2 +- test/Makefile.in | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/test/ChangeLog b/test/ChangeLog index ae144a27..4315bbb9 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2014-06-08 Arnold D. Robbins + + * Makefile.am (dbugeval): Add leading @ to recipe. Ooops. + 2014-05-30 Arnold D. Robbins * Makefile.am (regnul1, regnul2): New tests. diff --git a/test/Makefile.am b/test/Makefile.am index 5675c1d6..e5c3c1eb 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1936,7 +1936,7 @@ backsmalls2: dbugeval:: @echo $@ - $(AWK) --debug -f /dev/null < "$(srcdir)"/$@.in > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @$(AWK) --debug -f /dev/null < "$(srcdir)"/$@.in > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ # Targets generated for other tests: diff --git a/test/Makefile.in b/test/Makefile.in index a7e1f193..5326e0b1 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -2360,7 +2360,7 @@ backsmalls2: dbugeval:: @echo $@ - $(AWK) --debug -f /dev/null < "$(srcdir)"/$@.in > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @$(AWK) --debug -f /dev/null < "$(srcdir)"/$@.in > _$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ Gt-dummy: # file Maketests, generated from Makefile.am by the Gentests program -- cgit v1.2.3 From 4bf0a8ccb72ea56ae4e7f576dd1902603b521e8d Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 8 Jun 2014 22:57:54 +0300 Subject: Start adding summary sections. --- doc/ChangeLog | 4 + doc/gawk.info | 1204 ++++++++++++++++++++++++++++++------------------------- doc/gawk.texi | 163 +++++++- doc/gawktexi.in | 163 +++++++- 4 files changed, 964 insertions(+), 570 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index b004023b..0ad1a947 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-06-08 Arnold D. Robbins + + * gawktexi.in: Start adding "Summary" sections. + 2014-06-03 Arnold D. Robbins * gawktexi.in: Restore macros for file name vs. filename etc. diff --git a/doc/gawk.info b/doc/gawk.info index c5038115..50ccda25 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -126,8 +126,8 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) includes command-line syntax. * One-shot:: Running a short throwaway `awk' program. -* Read Terminal:: Using no input files (input from - the keyboard instead). +* Read Terminal:: Using no input files (input from the + keyboard instead). * Long:: Putting permanent `awk' programs in files. * Executable Scripts:: Making self-contained `awk' @@ -149,6 +149,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) * Other Features:: Other Features of `awk'. * When:: When to use `gawk' and when to use other things. +* Intro Summary:: Summary of the introduction. * Command Line:: How to run `awk'. * Options:: Command-line options and their meanings. @@ -170,6 +171,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) program. * Obsolete:: Obsolete Options and/or features. * Undocumented:: Undocumented Options and Features. +* Invoking Summary:: Invocation summary. * Regexp Usage:: How to Use Regular Expressions. * Escape Sequences:: How to write nonprinting characters. * Regexp Operators:: Regular Expression Operators. @@ -178,8 +180,12 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) * Case-sensitivity:: How to do case-insensitive matching. * Leftmost Longest:: How much text matches. * Computed Regexps:: Using Dynamic Regexps. +* Regexp Summary:: Regular expressions summary. * Records:: Controlling how data is split into records. +* awk split records:: How standard `awk' splits + records. +* gawk split records:: How `gawk' splits records. * Fields:: An introduction to fields. * Nonconstant Fields:: Nonconstant Field Numbers. * Changing Fields:: Changing the Contents of a Field. @@ -636,8 +642,8 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) `gawk'. * New Ports:: Porting `gawk' to a new operating system. -* Derived Files:: Why derived files are kept in the - Git repository. +* Derived Files:: Why derived files are kept in the Git + repository. * Future Extensions:: New features that may be implemented one day. * Implementation Limitations:: Some limitations of the @@ -1351,6 +1357,7 @@ like this: * Other Features:: Other Features of `awk'. * When:: When to use `gawk' and when to use other things. +* Intro Summary:: Summary of the introduction.  File: gawk.info, Node: Running gawk, Next: Sample Data Files, Up: Getting Started @@ -2194,7 +2201,7 @@ most of the variables and many of the functions. They are described systematically in *note Built-in Variables::, and *note Built-in::.  -File: gawk.info, Node: When, Prev: Other Features, Up: Getting Started +File: gawk.info, Node: When, Next: Intro Summary, Prev: Other Features, Up: Getting Started 1.8 When to Use `awk' ===================== @@ -2234,6 +2241,30 @@ languages may require more lines of source code than the equivalent `awk' programs, but they are easier to maintain and usually run more efficiently. + +File: gawk.info, Node: Intro Summary, Prev: When, Up: Getting Started + +1.9 Summary +=========== + + * Programs in `awk' consist of PATTERN-ACTION pairs. + + * Use either `awk 'PROGRAM' FILES' or `awk -f PROGRAM-FILE FILES' to + run `awk'. + + * You may use the special `#!' header line to create `awk' programs + that are directly executable. + + * Comments in `awk' programs start with `#' and continue to the end + of the same line. + + * Be aware of quoting issues when writing `awk' programs as 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, `||', `&&', `do' and `else'. +  File: gawk.info, Node: Invoking Gawk, Next: Regexp, Prev: Getting Started, Up: Top @@ -2264,6 +2295,7 @@ this major node that don't interest you right now. * Loading Shared Libraries:: Loading shared libraries into your program. * Obsolete:: Obsolete Options and/or features. * Undocumented:: Undocumented Options and Features. +* Invoking Summary:: Invocation summary.  File: gawk.info, Node: Command Line, Next: Options, Up: Invoking Gawk @@ -3094,7 +3126,7 @@ worked. As of version 4.0, they are no longer interpreted specially by `gawk'. (Use `PROCINFO' instead; see *note Auto-set::.)  -File: gawk.info, Node: Undocumented, Prev: Obsolete, Up: Invoking Gawk +File: gawk.info, Node: Undocumented, Next: Invoking Summary, Prev: Obsolete, Up: Invoking Gawk 2.10 Undocumented Options and Features ====================================== @@ -3103,6 +3135,48 @@ File: gawk.info, Node: Undocumented, Prev: Obsolete, Up: Invoking Gawk This minor node intentionally left blank. + +File: gawk.info, Node: Invoking Summary, Prev: Undocumented, Up: Invoking Gawk + +2.11 Summary +============ + + * Use either `awk 'PROGRAM' FILES' or `awk -f PROGRAM-FILE FILES' to + run `awk'. + + * The three standard `awk' options are `-f', `-F' and `-v'. `gawk' + supplies these and many others, as well as corresponding GNU-style + long options. + + * Non-option command-line arguments are usually treated as file + names, unless they have the form `VAR=VALUE', in which case they + are taken as variable assignments to be performed at that point in + processing the input. + + * All non-option command-line arguments, excluding the program text, + are placed in the `ARGV' array. Adjusting `ARGC' and `ARGV' + affects how `awk' processes input. + + * You can use a single minus sign (`-') to refer to standard input + on the command line. + + * `gawk' pays attention to a number of environment variables. + `AWKPATH', `AWKLIBPATH', and `POSIXLY_CORRECT' are the most + important ones. + + * `gawk''s exit status conveys information to the program that + invoked it. Use the `exit' statement from within an `awk' program + to set the exit status. + + * `gawk' allows you to include other `awk' source files into your + program using the `@include' statement and/or the `-i' and `-f' + command-line options. + + * `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 + Extensions::.) +  File: gawk.info, Node: Regexp, Next: Reading Files, Prev: Invoking Gawk, Up: Top @@ -3132,6 +3206,7 @@ you specify more complicated classes of strings. * Case-sensitivity:: How to do case-insensitive matching. * Leftmost Longest:: How much text matches. * Computed Regexps:: Using Dynamic Regexps. +* Regexp Summary:: Regular expressions summary.  File: gawk.info, Node: Regexp Usage, Next: Escape Sequences, Up: Regexp @@ -3811,7 +3886,7 @@ this principle is also important for regexp-based record and field splitting (*note Records::, and also *note Field Separators::).  -File: gawk.info, Node: Computed Regexps, Prev: Leftmost Longest, Up: Regexp +File: gawk.info, Node: Computed Regexps, Next: Regexp Summary, Prev: Leftmost Longest, Up: Regexp 3.8 Using Dynamic Regexps ========================= @@ -3889,6 +3964,44 @@ inside a bracket expression for a dynamic regexp: `gawk' does not have this problem, and it isn't likely to occur often in practice, but it's worth noting for future reference. + +File: gawk.info, Node: Regexp Summary, Prev: Computed Regexps, Up: Regexp + +3.9 Summary +=========== + + * Regular expressions describe sets of strings to be matched. In + `awk', regular expression constants are written enclosed between + slashes: `/'...`/'. + + * Regexp constants may be used by standalone in patterns and in + conditional expressions, or as part of matching expressions using + the `~' and `!~' operators. + + * Escape sequences let you represent non-printable characters and + also let you represent regexp metacharacters as literal characters + to be matched. + + * Regexp operators provide grouping, alternation and repetition. + + * Bracket expressions give you a shorthand for specifyings sets of + characters that can match at a particular point in a regexp. + Within bracket expressions, POSIX character classes let you specify + certain groups of characters in a locale-independent fashion. + + * `gawk''s `IGNORECASE' variable lets you control the case + sensitivity of regexp matching. In other `awk' versions, use + `tolower()' or `toupper()'. + + * Regular expressions match the leftmost longest text in the string + being matched. This matters for cases where you need to know the + extent of the match, such as for text substitution and when the + record separator is a regexp. + + * Matching expressions may use dynamic regexps; that is string values + treated as regular expressions. + +  File: gawk.info, Node: Reading Files, Next: Printing, Prev: Regexp, Up: Top @@ -3946,8 +4059,8 @@ is never automatically reset to zero. * Menu: -* awk split records:: How standard `awk' splits records. -* gawk split records:: How `gawk' splits records. +* awk split records:: How standard `awk' splits records. +* gawk split records:: How `gawk' splits records.  File: gawk.info, Node: awk split records, Next: gawk split records, Up: Records @@ -8029,7 +8142,7 @@ has the value one if `x' contains `foo', such as `"Oh, what a fool am I!"'. The righthand operand of the `~' and `!~' operators may be either a -regexp constant (`/.../') or an ordinary expression. In the latter +regexp constant (`/'...`/') or an ordinary expression. In the latter case, the value of the expression as a string is used as a dynamic regexp (*note Regexp Usage::; also *note Computed Regexps::). @@ -27415,8 +27528,8 @@ as well as any considerations you should bear in mind. `gawk'. * New Ports:: Porting `gawk' to a new operating system. -* Derived Files:: Why derived files are kept in the - Git repository. +* Derived Files:: Why derived files are kept in the Git + repository.  File: gawk.info, Node: Accessing The Source, Next: Adding Code, Up: Additions @@ -33218,537 +33331,540 @@ Index  Tag Table: Node: Top1292 -Node: Foreword40830 -Node: Preface45175 -Ref: Preface-Footnote-148322 -Ref: Preface-Footnote-248429 -Node: History48661 -Node: Names51035 -Ref: Names-Footnote-152499 -Node: This Manual52572 -Ref: This Manual-Footnote-158351 -Node: Conventions58451 -Node: Manual History60607 -Ref: Manual History-Footnote-164046 -Ref: Manual History-Footnote-264087 -Node: How To Contribute64161 -Node: Acknowledgments65400 -Node: Getting Started69549 -Node: Running gawk71922 -Node: One-shot73112 -Node: Read Terminal74337 -Ref: Read Terminal-Footnote-175987 -Ref: Read Terminal-Footnote-276263 -Node: Long76434 -Node: Executable Scripts77782 -Ref: Executable Scripts-Footnote-179615 -Ref: Executable Scripts-Footnote-279717 -Node: Comments80250 -Node: Quoting82717 -Node: DOS Quoting88026 -Node: Sample Data Files88701 -Node: Very Simple91216 -Node: Two Rules95847 -Node: More Complex97742 -Ref: More Complex-Footnote-1100667 -Node: Statements/Lines100752 -Ref: Statements/Lines-Footnote-1105207 -Node: Other Features105472 -Node: When106400 -Node: Invoking Gawk108548 -Node: Command Line110011 -Node: Options110802 -Ref: Options-Footnote-1126586 -Node: Other Arguments126611 -Node: Naming Standard Input129252 -Node: Environment Variables130332 -Node: AWKPATH Variable130890 -Ref: AWKPATH Variable-Footnote-1133741 -Ref: AWKPATH Variable-Footnote-2133786 -Node: AWKLIBPATH Variable134046 -Node: Other Environment Variables134805 -Node: Exit Status138460 -Node: Include Files139135 -Node: Loading Shared Libraries142699 -Node: Obsolete144083 -Node: Undocumented144780 -Node: Regexp145022 -Node: Regexp Usage146411 -Node: Escape Sequences148444 -Node: Regexp Operators154111 -Ref: Regexp Operators-Footnote-1161591 -Ref: Regexp Operators-Footnote-2161738 -Node: Bracket Expressions161836 -Ref: table-char-classes163726 -Node: GNU Regexp Operators166249 -Node: Case-sensitivity169972 -Ref: Case-sensitivity-Footnote-1172864 -Ref: Case-sensitivity-Footnote-2173099 -Node: Leftmost Longest173207 -Node: Computed Regexps174408 -Node: Reading Files177757 -Node: Records179759 -Node: awk split records180494 -Node: gawk split records185352 -Ref: gawk split records-Footnote-1189873 -Node: Fields189910 -Ref: Fields-Footnote-1192874 -Node: Nonconstant Fields192960 -Ref: Nonconstant Fields-Footnote-1195190 -Node: Changing Fields195392 -Node: Field Separators201346 -Node: Default Field Splitting204048 -Node: Regexp Field Splitting205165 -Node: Single Character Fields208506 -Node: Command Line Field Separator209565 -Node: Full Line Fields212907 -Ref: Full Line Fields-Footnote-1213415 -Node: Field Splitting Summary213461 -Ref: Field Splitting Summary-Footnote-1216560 -Node: Constant Size216661 -Node: Splitting By Content221268 -Ref: Splitting By Content-Footnote-1225018 -Node: Multiple Line225058 -Ref: Multiple Line-Footnote-1230914 -Node: Getline231093 -Node: Plain Getline233309 -Node: Getline/Variable235404 -Node: Getline/File236551 -Node: Getline/Variable/File237927 -Ref: Getline/Variable/File-Footnote-1239526 -Node: Getline/Pipe239613 -Node: Getline/Variable/Pipe242312 -Node: Getline/Coprocess243419 -Node: Getline/Variable/Coprocess244671 -Node: Getline Notes245408 -Node: Getline Summary248212 -Ref: table-getline-variants248620 -Node: Read Timeout249532 -Ref: Read Timeout-Footnote-1253359 -Node: Command line directories253417 -Node: Printing254299 -Node: Print255923 -Node: Print Examples257264 -Node: Output Separators260043 -Node: OFMT262059 -Node: Printf263417 -Node: Basic Printf264323 -Node: Control Letters265862 -Node: Format Modifiers269716 -Node: Printf Examples275743 -Node: Redirection278450 -Node: Special Files285397 -Node: Special FD285913 -Ref: Special FD-Footnote-1289488 -Node: Special Network289562 -Node: Special Caveats290398 -Node: Close Files And Pipes291173 -Ref: Close Files And Pipes-Footnote-1298289 -Ref: Close Files And Pipes-Footnote-2298437 -Node: Expressions298587 -Node: Values299719 -Node: Constants300395 -Node: Scalar Constants301075 -Ref: Scalar Constants-Footnote-1301934 -Node: Nondecimal-numbers302184 -Node: Regexp Constants305184 -Node: Using Constant Regexps305659 -Node: Variables308729 -Node: Using Variables309384 -Node: Assignment Options311108 -Node: Conversion312975 -Ref: table-locale-affects318411 -Ref: Conversion-Footnote-1319035 -Node: All Operators319144 -Node: Arithmetic Ops319774 -Node: Concatenation322279 -Ref: Concatenation-Footnote-1325075 -Node: Assignment Ops325195 -Ref: table-assign-ops330178 -Node: Increment Ops331495 -Node: Truth Values and Conditions334933 -Node: Truth Values336016 -Node: Typing and Comparison337065 -Node: Variable Typing337858 -Ref: Variable Typing-Footnote-1341758 -Node: Comparison Operators341880 -Ref: table-relational-ops342290 -Node: POSIX String Comparison345838 -Ref: POSIX String Comparison-Footnote-1346922 -Node: Boolean Ops347060 -Ref: Boolean Ops-Footnote-1351130 -Node: Conditional Exp351221 -Node: Function Calls352948 -Node: Precedence356706 -Node: Locales360375 -Node: Patterns and Actions361978 -Node: Pattern Overview363032 -Node: Regexp Patterns364709 -Node: Expression Patterns365252 -Node: Ranges369033 -Node: BEGIN/END372139 -Node: Using BEGIN/END372901 -Ref: Using BEGIN/END-Footnote-1375637 -Node: I/O And BEGIN/END375743 -Node: BEGINFILE/ENDFILE378028 -Node: Empty380959 -Node: Using Shell Variables381276 -Node: Action Overview383559 -Node: Statements385886 -Node: If Statement387734 -Node: While Statement389232 -Node: Do Statement391276 -Node: For Statement392432 -Node: Switch Statement395584 -Node: Break Statement397687 -Node: Continue Statement399742 -Node: Next Statement401535 -Node: Nextfile Statement403925 -Node: Exit Statement406580 -Node: Built-in Variables408984 -Node: User-modified410080 -Ref: User-modified-Footnote-1417765 -Node: Auto-set417827 -Ref: Auto-set-Footnote-1430373 -Ref: Auto-set-Footnote-2430578 -Node: ARGC and ARGV430634 -Node: Arrays434473 -Node: Array Basics435971 -Node: Array Intro436797 -Ref: figure-array-elements438770 -Node: Reference to Elements441177 -Node: Assigning Elements443450 -Node: Array Example443941 -Node: Scanning an Array445673 -Node: Controlling Scanning448688 -Ref: Controlling Scanning-Footnote-1453861 -Node: Delete454177 -Ref: Delete-Footnote-1456942 -Node: Numeric Array Subscripts456999 -Node: Uninitialized Subscripts459182 -Node: Multidimensional460807 -Node: Multiscanning463900 -Node: Arrays of Arrays465489 -Node: Functions470129 -Node: Built-in470948 -Node: Calling Built-in472026 -Node: Numeric Functions474014 -Ref: Numeric Functions-Footnote-1477848 -Ref: Numeric Functions-Footnote-2478205 -Ref: Numeric Functions-Footnote-3478253 -Node: String Functions478522 -Ref: String Functions-Footnote-1501533 -Ref: String Functions-Footnote-2501662 -Ref: String Functions-Footnote-3501910 -Node: Gory Details501997 -Ref: table-sub-escapes503666 -Ref: table-sub-posix-92505020 -Ref: table-sub-proposed506371 -Ref: table-posix-sub507725 -Ref: table-gensub-escapes509270 -Ref: Gory Details-Footnote-1510446 -Ref: Gory Details-Footnote-2510497 -Node: I/O Functions510648 -Ref: I/O Functions-Footnote-1517771 -Node: Time Functions517918 -Ref: Time Functions-Footnote-1528382 -Ref: Time Functions-Footnote-2528450 -Ref: Time Functions-Footnote-3528608 -Ref: Time Functions-Footnote-4528719 -Ref: Time Functions-Footnote-5528831 -Ref: Time Functions-Footnote-6529058 -Node: Bitwise Functions529324 -Ref: table-bitwise-ops529886 -Ref: Bitwise Functions-Footnote-1534131 -Node: Type Functions534315 -Node: I18N Functions535457 -Node: User-defined537102 -Node: Definition Syntax537906 -Ref: Definition Syntax-Footnote-1542831 -Node: Function Example542900 -Ref: Function Example-Footnote-1545544 -Node: Function Caveats545566 -Node: Calling A Function546084 -Node: Variable Scope547039 -Node: Pass By Value/Reference550027 -Node: Return Statement553535 -Node: Dynamic Typing556519 -Node: Indirect Calls557448 -Node: Library Functions567135 -Ref: Library Functions-Footnote-1570648 -Ref: Library Functions-Footnote-2570791 -Node: Library Names570962 -Ref: Library Names-Footnote-1574435 -Ref: Library Names-Footnote-2574655 -Node: General Functions574741 -Node: Strtonum Function575769 -Node: Assert Function578699 -Node: Round Function582025 -Node: Cliff Random Function583566 -Node: Ordinal Functions584582 -Ref: Ordinal Functions-Footnote-1587659 -Ref: Ordinal Functions-Footnote-2587911 -Node: Join Function588122 -Ref: Join Function-Footnote-1589893 -Node: Getlocaltime Function590093 -Node: Readfile Function593829 -Node: Data File Management595668 -Node: Filetrans Function596300 -Node: Rewind Function600355 -Node: File Checking601742 -Ref: File Checking-Footnote-1602874 -Node: Empty Files603075 -Node: Ignoring Assigns605298 -Node: Getopt Function606829 -Ref: Getopt Function-Footnote-1618125 -Node: Passwd Functions618328 -Ref: Passwd Functions-Footnote-1627307 -Node: Group Functions627395 -Ref: Group Functions-Footnote-1635337 -Node: Walking Arrays635550 -Node: Sample Programs637686 -Node: Running Examples638360 -Node: Clones639088 -Node: Cut Program640312 -Node: Egrep Program650173 -Ref: Egrep Program-Footnote-1658102 -Node: Id Program658212 -Node: Split Program661876 -Ref: Split Program-Footnote-1665407 -Node: Tee Program665535 -Node: Uniq Program668342 -Node: Wc Program675772 -Ref: Wc Program-Footnote-1680040 -Ref: Wc Program-Footnote-2680240 -Node: Miscellaneous Programs680332 -Node: Dupword Program681520 -Node: Alarm Program683551 -Node: Translate Program688365 -Ref: Translate Program-Footnote-1692756 -Ref: Translate Program-Footnote-2693026 -Node: Labels Program693160 -Ref: Labels Program-Footnote-1696531 -Node: Word Sorting696615 -Node: History Sorting700658 -Node: Extract Program702494 -Ref: Extract Program-Footnote-1710069 -Node: Simple Sed710198 -Node: Igawk Program713260 -Ref: Igawk Program-Footnote-1728436 -Ref: Igawk Program-Footnote-2728637 -Node: Anagram Program728775 -Node: Signature Program731843 -Node: Advanced Features733090 -Node: Nondecimal Data734976 -Node: Array Sorting736553 -Node: Controlling Array Traversal737250 -Node: Array Sorting Functions745530 -Ref: Array Sorting Functions-Footnote-1749437 -Node: Two-way I/O749631 -Ref: Two-way I/O-Footnote-1755147 -Node: TCP/IP Networking755229 -Node: Profiling758073 -Node: Internationalization765581 -Node: I18N and L10N767006 -Node: Explaining gettext767692 -Ref: Explaining gettext-Footnote-1772832 -Ref: Explaining gettext-Footnote-2773016 -Node: Programmer i18n773181 -Node: Translator i18n777406 -Node: String Extraction778200 -Ref: String Extraction-Footnote-1779161 -Node: Printf Ordering779247 -Ref: Printf Ordering-Footnote-1782029 -Node: I18N Portability782093 -Ref: I18N Portability-Footnote-1784542 -Node: I18N Example784605 -Ref: I18N Example-Footnote-1787327 -Node: Gawk I18N787399 -Node: Debugger788012 -Node: Debugging788983 -Node: Debugging Concepts789424 -Node: Debugging Terms791280 -Node: Awk Debugging793877 -Node: Sample Debugging Session794769 -Node: Debugger Invocation795289 -Node: Finding The Bug796622 -Node: List of Debugger Commands803104 -Node: Breakpoint Control804436 -Node: Debugger Execution Control808100 -Node: Viewing And Changing Data811460 -Node: Execution Stack814818 -Node: Debugger Info816331 -Node: Miscellaneous Debugger Commands820325 -Node: Readline Support825509 -Node: Limitations826401 -Node: Arbitrary Precision Arithmetic828649 -Ref: Arbitrary Precision Arithmetic-Footnote-1830298 -Node: General Arithmetic830446 -Node: Floating Point Issues832166 -Node: String Conversion Precision833047 -Ref: String Conversion Precision-Footnote-1834752 -Node: Unexpected Results834861 -Node: POSIX Floating Point Problems837014 -Ref: POSIX Floating Point Problems-Footnote-1840835 -Node: Integer Programming840873 -Node: Floating-point Programming842684 -Ref: Floating-point Programming-Footnote-1849012 -Ref: Floating-point Programming-Footnote-2849282 -Node: Floating-point Representation849546 -Node: Floating-point Context850711 -Ref: table-ieee-formats851550 -Node: Rounding Mode852934 -Ref: table-rounding-modes853413 -Ref: Rounding Mode-Footnote-1856428 -Node: Gawk and MPFR856607 -Node: Arbitrary Precision Floats858016 -Ref: Arbitrary Precision Floats-Footnote-1860459 -Node: Setting Precision860780 -Ref: table-predefined-precision-strings861464 -Node: Setting Rounding Mode863609 -Ref: table-gawk-rounding-modes864013 -Node: Floating-point Constants865200 -Node: Changing Precision866652 -Ref: Changing Precision-Footnote-1868044 -Node: Exact Arithmetic868218 -Node: Arbitrary Precision Integers871352 -Ref: Arbitrary Precision Integers-Footnote-1874367 -Node: Dynamic Extensions874514 -Node: Extension Intro875972 -Node: Plugin License877237 -Node: Extension Mechanism Outline877922 -Ref: figure-load-extension878346 -Ref: figure-load-new-function879831 -Ref: figure-call-new-function880833 -Node: Extension API Description882817 -Node: Extension API Functions Introduction884267 -Node: General Data Types889133 -Ref: General Data Types-Footnote-1894826 -Node: Requesting Values895125 -Ref: table-value-types-returned895862 -Node: Memory Allocation Functions896820 -Ref: Memory Allocation Functions-Footnote-1899567 -Node: Constructor Functions899663 -Node: Registration Functions901421 -Node: Extension Functions902106 -Node: Exit Callback Functions904408 -Node: Extension Version String905658 -Node: Input Parsers906308 -Node: Output Wrappers916111 -Node: Two-way processors920627 -Node: Printing Messages922831 -Ref: Printing Messages-Footnote-1923908 -Node: Updating `ERRNO'924060 -Node: Accessing Parameters924799 -Node: Symbol Table Access926029 -Node: Symbol table by name926543 -Node: Symbol table by cookie928519 -Ref: Symbol table by cookie-Footnote-1932652 -Node: Cached values932715 -Ref: Cached values-Footnote-1936220 -Node: Array Manipulation936311 -Ref: Array Manipulation-Footnote-1937409 -Node: Array Data Types937448 -Ref: Array Data Types-Footnote-1940151 -Node: Array Functions940243 -Node: Flattening Arrays944117 -Node: Creating Arrays950969 -Node: Extension API Variables955700 -Node: Extension Versioning956336 -Node: Extension API Informational Variables958237 -Node: Extension API Boilerplate959323 -Node: Finding Extensions963127 -Node: Extension Example963687 -Node: Internal File Description964417 -Node: Internal File Ops968508 -Ref: Internal File Ops-Footnote-1980054 -Node: Using Internal File Ops980194 -Ref: Using Internal File Ops-Footnote-1982541 -Node: Extension Samples982809 -Node: Extension Sample File Functions984333 -Node: Extension Sample Fnmatch991901 -Node: Extension Sample Fork993368 -Node: Extension Sample Inplace994581 -Node: Extension Sample Ord996347 -Node: Extension Sample Readdir997183 -Ref: table-readdir-file-types998032 -Node: Extension Sample Revout998831 -Node: Extension Sample Rev2way999422 -Node: Extension Sample Read write array1000163 -Node: Extension Sample Readfile1002042 -Node: Extension Sample API Tests1003142 -Node: Extension Sample Time1003667 -Node: gawkextlib1004982 -Node: Language History1007769 -Node: V7/SVR3.11009363 -Node: SVR41011683 -Node: POSIX1013125 -Node: BTL1014511 -Node: POSIX/GNU1015245 -Node: Feature History1020844 -Node: Common Extensions1033956 -Node: Ranges and Locales1035268 -Ref: Ranges and Locales-Footnote-11039885 -Ref: Ranges and Locales-Footnote-21039912 -Ref: Ranges and Locales-Footnote-31040146 -Node: Contributors1040367 -Node: Installation1045805 -Node: Gawk Distribution1046699 -Node: Getting1047183 -Node: Extracting1048009 -Node: Distribution contents1049651 -Node: Unix Installation1055368 -Node: Quick Installation1055985 -Node: Additional Configuration Options1058427 -Node: Configuration Philosophy1060165 -Node: Non-Unix Installation1062516 -Node: PC Installation1062974 -Node: PC Binary Installation1064285 -Node: PC Compiling1066133 -Ref: PC Compiling-Footnote-11069132 -Node: PC Testing1069237 -Node: PC Using1070413 -Node: Cygwin1074571 -Node: MSYS1075380 -Node: VMS Installation1075894 -Node: VMS Compilation1076690 -Ref: VMS Compilation-Footnote-11077905 -Node: VMS Dynamic Extensions1077963 -Node: VMS Installation Details1079336 -Node: VMS Running1081582 -Node: VMS GNV1084416 -Node: VMS Old Gawk1085139 -Node: Bugs1085609 -Node: Other Versions1089613 -Node: Notes1095838 -Node: Compatibility Mode1096638 -Node: Additions1097420 -Node: Accessing The Source1098345 -Node: Adding Code1099781 -Node: New Ports1105959 -Node: Derived Files1110440 -Ref: Derived Files-Footnote-11115521 -Ref: Derived Files-Footnote-21115555 -Ref: Derived Files-Footnote-31116151 -Node: Future Extensions1116265 -Node: Implementation Limitations1116871 -Node: Extension Design1118119 -Node: Old Extension Problems1119273 -Ref: Old Extension Problems-Footnote-11120790 -Node: Extension New Mechanism Goals1120847 -Ref: Extension New Mechanism Goals-Footnote-11124208 -Node: Extension Other Design Decisions1124397 -Node: Extension Future Growth1126503 -Node: Old Extension Mechanism1127339 -Node: Basic Concepts1129079 -Node: Basic High Level1129760 -Ref: figure-general-flow1130032 -Ref: figure-process-flow1130631 -Ref: Basic High Level-Footnote-11133860 -Node: Basic Data Typing1134045 -Node: Glossary1137372 -Node: Copying1162524 -Node: GNU Free Documentation License1200080 -Node: Index1225216 +Node: Foreword41210 +Node: Preface45555 +Ref: Preface-Footnote-148702 +Ref: Preface-Footnote-248809 +Node: History49041 +Node: Names51415 +Ref: Names-Footnote-152879 +Node: This Manual52952 +Ref: This Manual-Footnote-158731 +Node: Conventions58831 +Node: Manual History60987 +Ref: Manual History-Footnote-164426 +Ref: Manual History-Footnote-264467 +Node: How To Contribute64541 +Node: Acknowledgments65780 +Node: Getting Started69929 +Node: Running gawk72363 +Node: One-shot73553 +Node: Read Terminal74778 +Ref: Read Terminal-Footnote-176428 +Ref: Read Terminal-Footnote-276704 +Node: Long76875 +Node: Executable Scripts78223 +Ref: Executable Scripts-Footnote-180056 +Ref: Executable Scripts-Footnote-280158 +Node: Comments80691 +Node: Quoting83158 +Node: DOS Quoting88467 +Node: Sample Data Files89142 +Node: Very Simple91657 +Node: Two Rules96288 +Node: More Complex98183 +Ref: More Complex-Footnote-1101108 +Node: Statements/Lines101193 +Ref: Statements/Lines-Footnote-1105648 +Node: Other Features105913 +Node: When106841 +Node: Intro Summary109011 +Node: Invoking Gawk109777 +Node: Command Line111292 +Node: Options112083 +Ref: Options-Footnote-1127867 +Node: Other Arguments127892 +Node: Naming Standard Input130533 +Node: Environment Variables131613 +Node: AWKPATH Variable132171 +Ref: AWKPATH Variable-Footnote-1135022 +Ref: AWKPATH Variable-Footnote-2135067 +Node: AWKLIBPATH Variable135327 +Node: Other Environment Variables136086 +Node: Exit Status139741 +Node: Include Files140416 +Node: Loading Shared Libraries143980 +Node: Obsolete145364 +Node: Undocumented146061 +Node: Invoking Summary146328 +Node: Regexp147908 +Node: Regexp Usage149358 +Node: Escape Sequences151391 +Node: Regexp Operators157058 +Ref: Regexp Operators-Footnote-1164538 +Ref: Regexp Operators-Footnote-2164685 +Node: Bracket Expressions164783 +Ref: table-char-classes166673 +Node: GNU Regexp Operators169196 +Node: Case-sensitivity172919 +Ref: Case-sensitivity-Footnote-1175811 +Ref: Case-sensitivity-Footnote-2176046 +Node: Leftmost Longest176154 +Node: Computed Regexps177355 +Node: Regexp Summary180727 +Node: Reading Files182199 +Node: Records184201 +Node: awk split records184944 +Node: gawk split records189802 +Ref: gawk split records-Footnote-1194323 +Node: Fields194360 +Ref: Fields-Footnote-1197324 +Node: Nonconstant Fields197410 +Ref: Nonconstant Fields-Footnote-1199640 +Node: Changing Fields199842 +Node: Field Separators205796 +Node: Default Field Splitting208498 +Node: Regexp Field Splitting209615 +Node: Single Character Fields212956 +Node: Command Line Field Separator214015 +Node: Full Line Fields217357 +Ref: Full Line Fields-Footnote-1217865 +Node: Field Splitting Summary217911 +Ref: Field Splitting Summary-Footnote-1221010 +Node: Constant Size221111 +Node: Splitting By Content225718 +Ref: Splitting By Content-Footnote-1229468 +Node: Multiple Line229508 +Ref: Multiple Line-Footnote-1235364 +Node: Getline235543 +Node: Plain Getline237759 +Node: Getline/Variable239854 +Node: Getline/File241001 +Node: Getline/Variable/File242377 +Ref: Getline/Variable/File-Footnote-1243976 +Node: Getline/Pipe244063 +Node: Getline/Variable/Pipe246762 +Node: Getline/Coprocess247869 +Node: Getline/Variable/Coprocess249121 +Node: Getline Notes249858 +Node: Getline Summary252662 +Ref: table-getline-variants253070 +Node: Read Timeout253982 +Ref: Read Timeout-Footnote-1257809 +Node: Command line directories257867 +Node: Printing258749 +Node: Print260373 +Node: Print Examples261714 +Node: Output Separators264493 +Node: OFMT266509 +Node: Printf267867 +Node: Basic Printf268773 +Node: Control Letters270312 +Node: Format Modifiers274166 +Node: Printf Examples280193 +Node: Redirection282900 +Node: Special Files289847 +Node: Special FD290363 +Ref: Special FD-Footnote-1293938 +Node: Special Network294012 +Node: Special Caveats294848 +Node: Close Files And Pipes295623 +Ref: Close Files And Pipes-Footnote-1302739 +Ref: Close Files And Pipes-Footnote-2302887 +Node: Expressions303037 +Node: Values304169 +Node: Constants304845 +Node: Scalar Constants305525 +Ref: Scalar Constants-Footnote-1306384 +Node: Nondecimal-numbers306634 +Node: Regexp Constants309634 +Node: Using Constant Regexps310109 +Node: Variables313179 +Node: Using Variables313834 +Node: Assignment Options315558 +Node: Conversion317425 +Ref: table-locale-affects322861 +Ref: Conversion-Footnote-1323485 +Node: All Operators323594 +Node: Arithmetic Ops324224 +Node: Concatenation326729 +Ref: Concatenation-Footnote-1329525 +Node: Assignment Ops329645 +Ref: table-assign-ops334628 +Node: Increment Ops335945 +Node: Truth Values and Conditions339383 +Node: Truth Values340466 +Node: Typing and Comparison341515 +Node: Variable Typing342308 +Ref: Variable Typing-Footnote-1346208 +Node: Comparison Operators346330 +Ref: table-relational-ops346740 +Node: POSIX String Comparison350290 +Ref: POSIX String Comparison-Footnote-1351374 +Node: Boolean Ops351512 +Ref: Boolean Ops-Footnote-1355582 +Node: Conditional Exp355673 +Node: Function Calls357400 +Node: Precedence361158 +Node: Locales364827 +Node: Patterns and Actions366430 +Node: Pattern Overview367484 +Node: Regexp Patterns369161 +Node: Expression Patterns369704 +Node: Ranges373485 +Node: BEGIN/END376591 +Node: Using BEGIN/END377353 +Ref: Using BEGIN/END-Footnote-1380089 +Node: I/O And BEGIN/END380195 +Node: BEGINFILE/ENDFILE382480 +Node: Empty385411 +Node: Using Shell Variables385728 +Node: Action Overview388011 +Node: Statements390338 +Node: If Statement392186 +Node: While Statement393684 +Node: Do Statement395728 +Node: For Statement396884 +Node: Switch Statement400036 +Node: Break Statement402139 +Node: Continue Statement404194 +Node: Next Statement405987 +Node: Nextfile Statement408377 +Node: Exit Statement411032 +Node: Built-in Variables413436 +Node: User-modified414532 +Ref: User-modified-Footnote-1422217 +Node: Auto-set422279 +Ref: Auto-set-Footnote-1434825 +Ref: Auto-set-Footnote-2435030 +Node: ARGC and ARGV435086 +Node: Arrays438925 +Node: Array Basics440423 +Node: Array Intro441249 +Ref: figure-array-elements443222 +Node: Reference to Elements445629 +Node: Assigning Elements447902 +Node: Array Example448393 +Node: Scanning an Array450125 +Node: Controlling Scanning453140 +Ref: Controlling Scanning-Footnote-1458313 +Node: Delete458629 +Ref: Delete-Footnote-1461394 +Node: Numeric Array Subscripts461451 +Node: Uninitialized Subscripts463634 +Node: Multidimensional465259 +Node: Multiscanning468352 +Node: Arrays of Arrays469941 +Node: Functions474581 +Node: Built-in475400 +Node: Calling Built-in476478 +Node: Numeric Functions478466 +Ref: Numeric Functions-Footnote-1482300 +Ref: Numeric Functions-Footnote-2482657 +Ref: Numeric Functions-Footnote-3482705 +Node: String Functions482974 +Ref: String Functions-Footnote-1505985 +Ref: String Functions-Footnote-2506114 +Ref: String Functions-Footnote-3506362 +Node: Gory Details506449 +Ref: table-sub-escapes508118 +Ref: table-sub-posix-92509472 +Ref: table-sub-proposed510823 +Ref: table-posix-sub512177 +Ref: table-gensub-escapes513722 +Ref: Gory Details-Footnote-1514898 +Ref: Gory Details-Footnote-2514949 +Node: I/O Functions515100 +Ref: I/O Functions-Footnote-1522223 +Node: Time Functions522370 +Ref: Time Functions-Footnote-1532834 +Ref: Time Functions-Footnote-2532902 +Ref: Time Functions-Footnote-3533060 +Ref: Time Functions-Footnote-4533171 +Ref: Time Functions-Footnote-5533283 +Ref: Time Functions-Footnote-6533510 +Node: Bitwise Functions533776 +Ref: table-bitwise-ops534338 +Ref: Bitwise Functions-Footnote-1538583 +Node: Type Functions538767 +Node: I18N Functions539909 +Node: User-defined541554 +Node: Definition Syntax542358 +Ref: Definition Syntax-Footnote-1547283 +Node: Function Example547352 +Ref: Function Example-Footnote-1549996 +Node: Function Caveats550018 +Node: Calling A Function550536 +Node: Variable Scope551491 +Node: Pass By Value/Reference554479 +Node: Return Statement557987 +Node: Dynamic Typing560971 +Node: Indirect Calls561900 +Node: Library Functions571587 +Ref: Library Functions-Footnote-1575100 +Ref: Library Functions-Footnote-2575243 +Node: Library Names575414 +Ref: Library Names-Footnote-1578887 +Ref: Library Names-Footnote-2579107 +Node: General Functions579193 +Node: Strtonum Function580221 +Node: Assert Function583151 +Node: Round Function586477 +Node: Cliff Random Function588018 +Node: Ordinal Functions589034 +Ref: Ordinal Functions-Footnote-1592111 +Ref: Ordinal Functions-Footnote-2592363 +Node: Join Function592574 +Ref: Join Function-Footnote-1594345 +Node: Getlocaltime Function594545 +Node: Readfile Function598281 +Node: Data File Management600120 +Node: Filetrans Function600752 +Node: Rewind Function604807 +Node: File Checking606194 +Ref: File Checking-Footnote-1607326 +Node: Empty Files607527 +Node: Ignoring Assigns609750 +Node: Getopt Function611281 +Ref: Getopt Function-Footnote-1622577 +Node: Passwd Functions622780 +Ref: Passwd Functions-Footnote-1631759 +Node: Group Functions631847 +Ref: Group Functions-Footnote-1639789 +Node: Walking Arrays640002 +Node: Sample Programs642138 +Node: Running Examples642812 +Node: Clones643540 +Node: Cut Program644764 +Node: Egrep Program654625 +Ref: Egrep Program-Footnote-1662554 +Node: Id Program662664 +Node: Split Program666328 +Ref: Split Program-Footnote-1669859 +Node: Tee Program669987 +Node: Uniq Program672794 +Node: Wc Program680224 +Ref: Wc Program-Footnote-1684492 +Ref: Wc Program-Footnote-2684692 +Node: Miscellaneous Programs684784 +Node: Dupword Program685972 +Node: Alarm Program688003 +Node: Translate Program692817 +Ref: Translate Program-Footnote-1697208 +Ref: Translate Program-Footnote-2697478 +Node: Labels Program697612 +Ref: Labels Program-Footnote-1700983 +Node: Word Sorting701067 +Node: History Sorting705110 +Node: Extract Program706946 +Ref: Extract Program-Footnote-1714521 +Node: Simple Sed714650 +Node: Igawk Program717712 +Ref: Igawk Program-Footnote-1732888 +Ref: Igawk Program-Footnote-2733089 +Node: Anagram Program733227 +Node: Signature Program736295 +Node: Advanced Features737542 +Node: Nondecimal Data739428 +Node: Array Sorting741005 +Node: Controlling Array Traversal741702 +Node: Array Sorting Functions749982 +Ref: Array Sorting Functions-Footnote-1753889 +Node: Two-way I/O754083 +Ref: Two-way I/O-Footnote-1759599 +Node: TCP/IP Networking759681 +Node: Profiling762525 +Node: Internationalization770033 +Node: I18N and L10N771458 +Node: Explaining gettext772144 +Ref: Explaining gettext-Footnote-1777284 +Ref: Explaining gettext-Footnote-2777468 +Node: Programmer i18n777633 +Node: Translator i18n781858 +Node: String Extraction782652 +Ref: String Extraction-Footnote-1783613 +Node: Printf Ordering783699 +Ref: Printf Ordering-Footnote-1786481 +Node: I18N Portability786545 +Ref: I18N Portability-Footnote-1788994 +Node: I18N Example789057 +Ref: I18N Example-Footnote-1791779 +Node: Gawk I18N791851 +Node: Debugger792464 +Node: Debugging793435 +Node: Debugging Concepts793876 +Node: Debugging Terms795732 +Node: Awk Debugging798329 +Node: Sample Debugging Session799221 +Node: Debugger Invocation799741 +Node: Finding The Bug801074 +Node: List of Debugger Commands807556 +Node: Breakpoint Control808888 +Node: Debugger Execution Control812552 +Node: Viewing And Changing Data815912 +Node: Execution Stack819270 +Node: Debugger Info820783 +Node: Miscellaneous Debugger Commands824777 +Node: Readline Support829961 +Node: Limitations830853 +Node: Arbitrary Precision Arithmetic833101 +Ref: Arbitrary Precision Arithmetic-Footnote-1834750 +Node: General Arithmetic834898 +Node: Floating Point Issues836618 +Node: String Conversion Precision837499 +Ref: String Conversion Precision-Footnote-1839204 +Node: Unexpected Results839313 +Node: POSIX Floating Point Problems841466 +Ref: POSIX Floating Point Problems-Footnote-1845287 +Node: Integer Programming845325 +Node: Floating-point Programming847136 +Ref: Floating-point Programming-Footnote-1853464 +Ref: Floating-point Programming-Footnote-2853734 +Node: Floating-point Representation853998 +Node: Floating-point Context855163 +Ref: table-ieee-formats856002 +Node: Rounding Mode857386 +Ref: table-rounding-modes857865 +Ref: Rounding Mode-Footnote-1860880 +Node: Gawk and MPFR861059 +Node: Arbitrary Precision Floats862468 +Ref: Arbitrary Precision Floats-Footnote-1864911 +Node: Setting Precision865232 +Ref: table-predefined-precision-strings865916 +Node: Setting Rounding Mode868061 +Ref: table-gawk-rounding-modes868465 +Node: Floating-point Constants869652 +Node: Changing Precision871104 +Ref: Changing Precision-Footnote-1872496 +Node: Exact Arithmetic872670 +Node: Arbitrary Precision Integers875804 +Ref: Arbitrary Precision Integers-Footnote-1878819 +Node: Dynamic Extensions878966 +Node: Extension Intro880424 +Node: Plugin License881689 +Node: Extension Mechanism Outline882374 +Ref: figure-load-extension882798 +Ref: figure-load-new-function884283 +Ref: figure-call-new-function885285 +Node: Extension API Description887269 +Node: Extension API Functions Introduction888719 +Node: General Data Types893585 +Ref: General Data Types-Footnote-1899278 +Node: Requesting Values899577 +Ref: table-value-types-returned900314 +Node: Memory Allocation Functions901272 +Ref: Memory Allocation Functions-Footnote-1904019 +Node: Constructor Functions904115 +Node: Registration Functions905873 +Node: Extension Functions906558 +Node: Exit Callback Functions908860 +Node: Extension Version String910110 +Node: Input Parsers910760 +Node: Output Wrappers920563 +Node: Two-way processors925079 +Node: Printing Messages927283 +Ref: Printing Messages-Footnote-1928360 +Node: Updating `ERRNO'928512 +Node: Accessing Parameters929251 +Node: Symbol Table Access930481 +Node: Symbol table by name930995 +Node: Symbol table by cookie932971 +Ref: Symbol table by cookie-Footnote-1937104 +Node: Cached values937167 +Ref: Cached values-Footnote-1940672 +Node: Array Manipulation940763 +Ref: Array Manipulation-Footnote-1941861 +Node: Array Data Types941900 +Ref: Array Data Types-Footnote-1944603 +Node: Array Functions944695 +Node: Flattening Arrays948569 +Node: Creating Arrays955421 +Node: Extension API Variables960152 +Node: Extension Versioning960788 +Node: Extension API Informational Variables962689 +Node: Extension API Boilerplate963775 +Node: Finding Extensions967579 +Node: Extension Example968139 +Node: Internal File Description968869 +Node: Internal File Ops972960 +Ref: Internal File Ops-Footnote-1984506 +Node: Using Internal File Ops984646 +Ref: Using Internal File Ops-Footnote-1986993 +Node: Extension Samples987261 +Node: Extension Sample File Functions988785 +Node: Extension Sample Fnmatch996353 +Node: Extension Sample Fork997820 +Node: Extension Sample Inplace999033 +Node: Extension Sample Ord1000799 +Node: Extension Sample Readdir1001635 +Ref: table-readdir-file-types1002484 +Node: Extension Sample Revout1003283 +Node: Extension Sample Rev2way1003874 +Node: Extension Sample Read write array1004615 +Node: Extension Sample Readfile1006494 +Node: Extension Sample API Tests1007594 +Node: Extension Sample Time1008119 +Node: gawkextlib1009434 +Node: Language History1012221 +Node: V7/SVR3.11013815 +Node: SVR41016135 +Node: POSIX1017577 +Node: BTL1018963 +Node: POSIX/GNU1019697 +Node: Feature History1025296 +Node: Common Extensions1038408 +Node: Ranges and Locales1039720 +Ref: Ranges and Locales-Footnote-11044337 +Ref: Ranges and Locales-Footnote-21044364 +Ref: Ranges and Locales-Footnote-31044598 +Node: Contributors1044819 +Node: Installation1050257 +Node: Gawk Distribution1051151 +Node: Getting1051635 +Node: Extracting1052461 +Node: Distribution contents1054103 +Node: Unix Installation1059820 +Node: Quick Installation1060437 +Node: Additional Configuration Options1062879 +Node: Configuration Philosophy1064617 +Node: Non-Unix Installation1066968 +Node: PC Installation1067426 +Node: PC Binary Installation1068737 +Node: PC Compiling1070585 +Ref: PC Compiling-Footnote-11073584 +Node: PC Testing1073689 +Node: PC Using1074865 +Node: Cygwin1079023 +Node: MSYS1079832 +Node: VMS Installation1080346 +Node: VMS Compilation1081142 +Ref: VMS Compilation-Footnote-11082357 +Node: VMS Dynamic Extensions1082415 +Node: VMS Installation Details1083788 +Node: VMS Running1086034 +Node: VMS GNV1088868 +Node: VMS Old Gawk1089591 +Node: Bugs1090061 +Node: Other Versions1094065 +Node: Notes1100290 +Node: Compatibility Mode1101090 +Node: Additions1101872 +Node: Accessing The Source1102797 +Node: Adding Code1104233 +Node: New Ports1110411 +Node: Derived Files1114892 +Ref: Derived Files-Footnote-11119973 +Ref: Derived Files-Footnote-21120007 +Ref: Derived Files-Footnote-31120603 +Node: Future Extensions1120717 +Node: Implementation Limitations1121323 +Node: Extension Design1122571 +Node: Old Extension Problems1123725 +Ref: Old Extension Problems-Footnote-11125242 +Node: Extension New Mechanism Goals1125299 +Ref: Extension New Mechanism Goals-Footnote-11128660 +Node: Extension Other Design Decisions1128849 +Node: Extension Future Growth1130955 +Node: Old Extension Mechanism1131791 +Node: Basic Concepts1133531 +Node: Basic High Level1134212 +Ref: figure-general-flow1134484 +Ref: figure-process-flow1135083 +Ref: Basic High Level-Footnote-11138312 +Node: Basic Data Typing1138497 +Node: Glossary1141824 +Node: Copying1166976 +Node: GNU Free Documentation License1204532 +Node: Index1229668  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 093c776b..7f85c13c 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -471,8 +471,8 @@ particular records in a file and perform operations upon them. includes command-line syntax. * One-shot:: Running a short throwaway @command{awk} program. -* Read Terminal:: Using no input files (input from - the keyboard instead). +* Read Terminal:: Using no input files (input from the + keyboard instead). * Long:: Putting permanent @command{awk} programs in files. * Executable Scripts:: Making self-contained @command{awk} @@ -494,6 +494,7 @@ particular records in a file and perform operations upon them. * Other Features:: Other Features of @command{awk}. * When:: When to use @command{gawk} and when to use other things. +* Intro Summary:: Summary of the introduction. * Command Line:: How to run @command{awk}. * Options:: Command-line options and their meanings. @@ -515,6 +516,7 @@ particular records in a file and perform operations upon them. program. * Obsolete:: Obsolete Options and/or features. * Undocumented:: Undocumented Options and Features. +* Invoking Summary:: Invocation summary. * Regexp Usage:: How to Use Regular Expressions. * Escape Sequences:: How to write nonprinting characters. * Regexp Operators:: Regular Expression Operators. @@ -523,8 +525,12 @@ particular records in a file and perform operations upon them. * Case-sensitivity:: How to do case-insensitive matching. * Leftmost Longest:: How much text matches. * Computed Regexps:: Using Dynamic Regexps. +* Regexp Summary:: Regular expressions summary. * Records:: Controlling how data is split into records. +* awk split records:: How standard @command{awk} splits + records. +* gawk split records:: How @command{gawk} splits records. * Fields:: An introduction to fields. * Nonconstant Fields:: Nonconstant Field Numbers. * Changing Fields:: Changing the Contents of a Field. @@ -981,8 +987,8 @@ particular records in a file and perform operations upon them. @command{gawk}. * New Ports:: Porting @command{gawk} to a new operating system. -* Derived Files:: Why derived files are kept in the - Git repository. +* Derived Files:: Why derived files are kept in the Git + repository. * Future Extensions:: New features that may be implemented one day. * Implementation Limitations:: Some limitations of the @@ -1300,9 +1306,6 @@ has been removed.) * Conventions:: Typographical Conventions. * Manual History:: Brief history of the GNU project and this @value{DOCUMENT}. -@ifset FOR_PRINT -* Staying current:: How to keep up. -@end ifset * How To Contribute:: Helping to save the world. * Acknowledgments:: Acknowledgments. @end menu @@ -1861,7 +1864,7 @@ find an error in this @value{DOCUMENT}, please report it! @xref{Bugs}, for information on submitting problem reports electronically. @ifset FOR_PRINT -@node Staying current +@c fakenode --- for prepinfo @unnumberedsec How to Stay Current It may be you have a version of @command{gawk} which is newer than the @@ -2178,6 +2181,7 @@ program looks like this: * Other Features:: Other Features of @command{awk}. * When:: When to use @command{gawk} and when to use other things. +* Intro Summary:: Summary of the introduction. @end menu @node Running gawk @@ -3369,6 +3373,39 @@ Programs in these languages may require more lines of source code than the equivalent @command{awk} programs, but they are easier to maintain and usually run more efficiently. +@node Intro Summary +@section Summary + +@itemize @value{BULLET} +@item +Programs in @command{awk} consist of @var{pattern}-@var{action} pairs. + +@item +Use either +@samp{awk '@var{program}' @var{files}} +or +@samp{awk -f @var{program-file} @var{files}} +to run @command{awk}. + +@item +You may use the special @samp{#!} header line to create @command{awk} +programs that are directly executable. + +@item +Comments in @command{awk} programs start with @samp{#} and continue to +the end of the same line. + +@item +Be aware of quoting issues when writing @command{awk} programs as +part of a larger shell script (or MS-Windows batch file). + +@item +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}. +@end itemize + @node Invoking Gawk @chapter Running @command{awk} and @command{gawk} @@ -3397,6 +3434,7 @@ things in this @value{CHAPTER} that don't interest you right now. * Loading Shared Libraries:: Loading shared libraries into your program. * Obsolete:: Obsolete Options and/or features. * Undocumented:: Undocumented Options and Features. +* Invoking Summary:: Invocation summary. @end menu @node Command Line @@ -4566,6 +4604,58 @@ long-undocumented ``feature'' of Unix @code{awk}. @end ignore +@node Invoking Summary +@section Summary + +@itemize @value{BULLET} +@item +Use either +@samp{awk '@var{program}' @var{files}} +or +@samp{awk -f @var{program-file} @var{files}} +to run @command{awk}. + +@item +The three standard @command{awk} options are @option{-f}, @option{-F} +and @option{-v}. @command{gawk} supplies these and many others, as well +as corresponding GNU-style long options. + +@item +Non-option command-line arguments are usually treated as @value{FN}s, +unless they have the form @samp{@var{var}=@var{value}}, in which case +they are taken as variable assignments to be performed at that point +in processing the input. + +@item +All non-option command-line arguments, excluding the program text, +are placed in the @code{ARGV} array. Adjusting @code{ARGC} and @code{ARGV} +affects how @command{awk} processes input. + +@item +You can use a single minus sign (@samp{-}) to refer to standard input +on the command line. + +@item +@command{gawk} pays attention to a number of environment variables. +@env{AWKPATH}, @env{AWKLIBPATH}, and @env{POSIXLY_CORRECT} are the +most important ones. + +@item +@command{gawk}'s exit status conveys information to the program +that invoked it. Use the @code{exit} statement from within +an @command{awk} program to set the exit status. + +@item +@command{gawk} allows you to include other @command{awk} source files into +your program using the @code{@@include} statement and/or the @option{-i} +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}.) +@end itemize + @node Regexp @chapter Regular Expressions @cindex regexp @@ -4604,6 +4694,7 @@ regular expressions work, we present more complicated instances. * Case-sensitivity:: How to do case-insensitive matching. * Leftmost Longest:: How much text matches. * Computed Regexps:: Using Dynamic Regexps. +* Regexp Summary:: Regular expressions summary. @end menu @node Regexp Usage @@ -5841,6 +5932,52 @@ occur often in practice, but it's worth noting for future reference. @end ifnotdocbook @c ENDOFRANGE dregexp @c ENDOFRANGE regexpd + +@node Regexp Summary +@section Summary + +@itemize @value{BULLET} +@item +Regular expressions describe sets of strings to be matched. +In @command{awk}, regular expression constants are written enclosed +between slashes: @code{/}@dots{}@code{/}. + +@item +Regexp constants may be used by standalone in patterns and +in conditional expressions, or as part of matching expressions +using the @samp{~} and @samp{!~} operators. + +@item +Escape sequences let you represent non-printable characters and +also let you represent regexp metacharacters as literal characters +to be matched. + +@item +Regexp operators provide grouping, alternation and repetition. + +@item +Bracket expressions give you a shorthand for specifyings sets +of characters that can match at a particular point in a regexp. +Within bracket expressions, POSIX character classes let you specify +certain groups of characters in a locale-independent fashion. + +@item +@command{gawk}'s @code{IGNORECASE} variable lets you control the +case sensitivity of regexp matching. In other @command{awk} +versions, use @code{tolower()} or @code{toupper()}. + +@item +Regular expressions match the leftmost longest text in the string being +matched. This matters for cases where you need to know the extent of +the match, such as for text substitution and when the record separator +is a regexp. + +@item +Matching expressions may use dynamic regexps; that is string values +treated as regular expressions. + +@end itemize + @c ENDOFRANGE regexp @node Reading Files @@ -5913,8 +6050,8 @@ number of input records read so far from all @value{DF}s. It starts at zero, but is never automatically reset to zero. @menu -* awk split records:: How standard @command{awk} splits records. -* gawk split records:: How @command{gawk} splits records. +* awk split records:: How standard @command{awk} splits records. +* gawk split records:: How @command{gawk} splits records. @end menu @node awk split records @@ -11723,7 +11860,7 @@ has the value one if @code{x} contains @samp{foo}, such as @cindex @code{!} (exclamation point), @code{!~} operator @cindex exclamation point (@code{!}), @code{!~} operator The righthand operand of the @samp{~} and @samp{!~} operators may be -either a regexp constant (@code{/@dots{}/}) or an ordinary +either a regexp constant (@code{/}@dots{}@code{/}) or an ordinary expression. In the latter case, the value of the expression as a string is used as a dynamic regexp (@pxref{Regexp Usage}; also @pxref{Computed Regexps}). @@ -37286,8 +37423,8 @@ as well as any considerations you should bear in mind. @command{gawk}. * New Ports:: Porting @command{gawk} to a new operating system. -* Derived Files:: Why derived files are kept in the - Git repository. +* Derived Files:: Why derived files are kept in the Git + repository. @end menu @node Accessing The Source diff --git a/doc/gawktexi.in b/doc/gawktexi.in index b80a6849..e64382e6 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -466,8 +466,8 @@ particular records in a file and perform operations upon them. includes command-line syntax. * One-shot:: Running a short throwaway @command{awk} program. -* Read Terminal:: Using no input files (input from - the keyboard instead). +* Read Terminal:: Using no input files (input from the + keyboard instead). * Long:: Putting permanent @command{awk} programs in files. * Executable Scripts:: Making self-contained @command{awk} @@ -489,6 +489,7 @@ particular records in a file and perform operations upon them. * Other Features:: Other Features of @command{awk}. * When:: When to use @command{gawk} and when to use other things. +* Intro Summary:: Summary of the introduction. * Command Line:: How to run @command{awk}. * Options:: Command-line options and their meanings. @@ -510,6 +511,7 @@ particular records in a file and perform operations upon them. program. * Obsolete:: Obsolete Options and/or features. * Undocumented:: Undocumented Options and Features. +* Invoking Summary:: Invocation summary. * Regexp Usage:: How to Use Regular Expressions. * Escape Sequences:: How to write nonprinting characters. * Regexp Operators:: Regular Expression Operators. @@ -518,8 +520,12 @@ particular records in a file and perform operations upon them. * Case-sensitivity:: How to do case-insensitive matching. * Leftmost Longest:: How much text matches. * Computed Regexps:: Using Dynamic Regexps. +* Regexp Summary:: Regular expressions summary. * Records:: Controlling how data is split into records. +* awk split records:: How standard @command{awk} splits + records. +* gawk split records:: How @command{gawk} splits records. * Fields:: An introduction to fields. * Nonconstant Fields:: Nonconstant Field Numbers. * Changing Fields:: Changing the Contents of a Field. @@ -976,8 +982,8 @@ particular records in a file and perform operations upon them. @command{gawk}. * New Ports:: Porting @command{gawk} to a new operating system. -* Derived Files:: Why derived files are kept in the - Git repository. +* Derived Files:: Why derived files are kept in the Git + repository. * Future Extensions:: New features that may be implemented one day. * Implementation Limitations:: Some limitations of the @@ -1295,9 +1301,6 @@ has been removed.) * Conventions:: Typographical Conventions. * Manual History:: Brief history of the GNU project and this @value{DOCUMENT}. -@ifset FOR_PRINT -* Staying current:: How to keep up. -@end ifset * How To Contribute:: Helping to save the world. * Acknowledgments:: Acknowledgments. @end menu @@ -1828,7 +1831,7 @@ find an error in this @value{DOCUMENT}, please report it! @xref{Bugs}, for information on submitting problem reports electronically. @ifset FOR_PRINT -@node Staying current +@c fakenode --- for prepinfo @unnumberedsec How to Stay Current It may be you have a version of @command{gawk} which is newer than the @@ -2145,6 +2148,7 @@ program looks like this: * Other Features:: Other Features of @command{awk}. * When:: When to use @command{gawk} and when to use other things. +* Intro Summary:: Summary of the introduction. @end menu @node Running gawk @@ -3297,6 +3301,39 @@ Programs in these languages may require more lines of source code than the equivalent @command{awk} programs, but they are easier to maintain and usually run more efficiently. +@node Intro Summary +@section Summary + +@itemize @value{BULLET} +@item +Programs in @command{awk} consist of @var{pattern}-@var{action} pairs. + +@item +Use either +@samp{awk '@var{program}' @var{files}} +or +@samp{awk -f @var{program-file} @var{files}} +to run @command{awk}. + +@item +You may use the special @samp{#!} header line to create @command{awk} +programs that are directly executable. + +@item +Comments in @command{awk} programs start with @samp{#} and continue to +the end of the same line. + +@item +Be aware of quoting issues when writing @command{awk} programs as +part of a larger shell script (or MS-Windows batch file). + +@item +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}. +@end itemize + @node Invoking Gawk @chapter Running @command{awk} and @command{gawk} @@ -3325,6 +3362,7 @@ things in this @value{CHAPTER} that don't interest you right now. * Loading Shared Libraries:: Loading shared libraries into your program. * Obsolete:: Obsolete Options and/or features. * Undocumented:: Undocumented Options and Features. +* Invoking Summary:: Invocation summary. @end menu @node Command Line @@ -4494,6 +4532,58 @@ long-undocumented ``feature'' of Unix @code{awk}. @end ignore +@node Invoking Summary +@section Summary + +@itemize @value{BULLET} +@item +Use either +@samp{awk '@var{program}' @var{files}} +or +@samp{awk -f @var{program-file} @var{files}} +to run @command{awk}. + +@item +The three standard @command{awk} options are @option{-f}, @option{-F} +and @option{-v}. @command{gawk} supplies these and many others, as well +as corresponding GNU-style long options. + +@item +Non-option command-line arguments are usually treated as @value{FN}s, +unless they have the form @samp{@var{var}=@var{value}}, in which case +they are taken as variable assignments to be performed at that point +in processing the input. + +@item +All non-option command-line arguments, excluding the program text, +are placed in the @code{ARGV} array. Adjusting @code{ARGC} and @code{ARGV} +affects how @command{awk} processes input. + +@item +You can use a single minus sign (@samp{-}) to refer to standard input +on the command line. + +@item +@command{gawk} pays attention to a number of environment variables. +@env{AWKPATH}, @env{AWKLIBPATH}, and @env{POSIXLY_CORRECT} are the +most important ones. + +@item +@command{gawk}'s exit status conveys information to the program +that invoked it. Use the @code{exit} statement from within +an @command{awk} program to set the exit status. + +@item +@command{gawk} allows you to include other @command{awk} source files into +your program using the @code{@@include} statement and/or the @option{-i} +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}.) +@end itemize + @node Regexp @chapter Regular Expressions @cindex regexp @@ -4532,6 +4622,7 @@ regular expressions work, we present more complicated instances. * Case-sensitivity:: How to do case-insensitive matching. * Leftmost Longest:: How much text matches. * Computed Regexps:: Using Dynamic Regexps. +* Regexp Summary:: Regular expressions summary. @end menu @node Regexp Usage @@ -5642,6 +5733,52 @@ occur often in practice, but it's worth noting for future reference. @end sidebar @c ENDOFRANGE dregexp @c ENDOFRANGE regexpd + +@node Regexp Summary +@section Summary + +@itemize @value{BULLET} +@item +Regular expressions describe sets of strings to be matched. +In @command{awk}, regular expression constants are written enclosed +between slashes: @code{/}@dots{}@code{/}. + +@item +Regexp constants may be used by standalone in patterns and +in conditional expressions, or as part of matching expressions +using the @samp{~} and @samp{!~} operators. + +@item +Escape sequences let you represent non-printable characters and +also let you represent regexp metacharacters as literal characters +to be matched. + +@item +Regexp operators provide grouping, alternation and repetition. + +@item +Bracket expressions give you a shorthand for specifyings sets +of characters that can match at a particular point in a regexp. +Within bracket expressions, POSIX character classes let you specify +certain groups of characters in a locale-independent fashion. + +@item +@command{gawk}'s @code{IGNORECASE} variable lets you control the +case sensitivity of regexp matching. In other @command{awk} +versions, use @code{tolower()} or @code{toupper()}. + +@item +Regular expressions match the leftmost longest text in the string being +matched. This matters for cases where you need to know the extent of +the match, such as for text substitution and when the record separator +is a regexp. + +@item +Matching expressions may use dynamic regexps; that is string values +treated as regular expressions. + +@end itemize + @c ENDOFRANGE regexp @node Reading Files @@ -5714,8 +5851,8 @@ number of input records read so far from all @value{DF}s. It starts at zero, but is never automatically reset to zero. @menu -* awk split records:: How standard @command{awk} splits records. -* gawk split records:: How @command{gawk} splits records. +* awk split records:: How standard @command{awk} splits records. +* gawk split records:: How @command{gawk} splits records. @end menu @node awk split records @@ -11103,7 +11240,7 @@ has the value one if @code{x} contains @samp{foo}, such as @cindex @code{!} (exclamation point), @code{!~} operator @cindex exclamation point (@code{!}), @code{!~} operator The righthand operand of the @samp{~} and @samp{!~} operators may be -either a regexp constant (@code{/@dots{}/}) or an ordinary +either a regexp constant (@code{/}@dots{}@code{/}) or an ordinary expression. In the latter case, the value of the expression as a string is used as a dynamic regexp (@pxref{Regexp Usage}; also @pxref{Computed Regexps}). @@ -36430,8 +36567,8 @@ as well as any considerations you should bear in mind. @command{gawk}. * New Ports:: Porting @command{gawk} to a new operating system. -* Derived Files:: Why derived files are kept in the - Git repository. +* Derived Files:: Why derived files are kept in the Git + repository. @end menu @node Accessing The Source -- cgit v1.2.3 From e0cb2b1f1b87cfc493db276c85bbec8246cd4b3b Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 9 Jun 2014 20:13:44 +0300 Subject: More summary sections. --- doc/ChangeLog | 4 + doc/gawk.info | 1142 ++++++++++++++++++++++++++++++++----------------------- doc/gawk.texi | 237 +++++++++++- doc/gawktexi.in | 237 +++++++++++- 4 files changed, 1151 insertions(+), 469 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 0ad1a947..c0a5f853 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-06-09 Arnold D. Robbins + + * gawktexi.in: More "Summary" sections. + 2014-06-08 Arnold D. Robbins * gawktexi.in: Start adding "Summary" sections. diff --git a/doc/gawk.info b/doc/gawk.info index 50ccda25..9d472b67 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -4042,6 +4042,7 @@ have to be named on the `awk' command line (*note Getline::). * Read Timeout:: Reading input with a timeout. * Command line directories:: What happens if you put a directory on the command line. +* Input Summary:: Input summary.  File: gawk.info, Node: Records, Next: Fields, Up: Reading Files @@ -5829,7 +5830,7 @@ writing. (1) This assumes that standard input is the keyboard.  -File: gawk.info, Node: Command line directories, Prev: Read Timeout, Up: Reading Files +File: gawk.info, Node: Command line directories, Next: Input Summary, Prev: Read Timeout, Up: Reading Files 4.11 Directories On The Command Line ==================================== @@ -5851,6 +5852,75 @@ error. *Note Extension Sample Readdir::, for a way to treat directories as usable data from an `awk' program. + +File: gawk.info, Node: Input Summary, Prev: Command line directories, Up: Reading Files + +4.12 Summary +============ + + * Input is split into records based on the value of `RS'. The + possibilities are as follows: + + Value of `RS' Records are split on `awk' / `gawk' + ---------------------------------------------------------------------- + Any single That character `awk' + character + The empty string Runs of two or more `awk' + (`""') newlines + A regexp Text that matches the `gawk' + regexp + + * `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' is + the whole record, and `NF' indicates how many fields there are. + The default way to split fields is between whitespace characters. + + * Fields may be referenced using a variable, as in `$NF'. Fields + may also be assigned values, which causes the value of `$0' to be + recomputed when it is later referenced. Assigning to a field with + a number greater than `NF' creates the field and rebuilds the + record, using `OFS' to separate the fields. Incrementing `NF' + does the same thing. Decrementing `NF' throws away fields and + rebuilds the record. + + * Field splitting is more complicated than record splitting. + + 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 `awk' + regexp + `FS == ""' Each individual character `gawk' + is a separate field + `FIELDWIDTHS == LIST OF Based on character `gawk' + COLUMNS' position + `FPAT == REGEXP' On text around text `gawk' + matching the regexp + + Using `FS = "\n"' causes the entire record to be a single field + (assuming that newlines separate records). + + * `FS' may be set from the command line using the `-F' option. This + can also be done using command-line variable assignment. + + * `PROCINFO["FS"]' can be used to see how fields are being split. + + * Use `getline' in its varioius forms to read additional records, + from the default input stream, from a file, or from a pipe or + co-process. + + * Use `PROCINFO[FILE, "READ_TIMEOUT"]' to cause reads to timeout for + FILE. + + * Directories on the command line are fatal for standard `awk'; + `gawk' ignores them if not in POSIX mode. + +  File: gawk.info, Node: Printing, Next: Expressions, Prev: Reading Files, Up: Top @@ -5885,6 +5955,7 @@ function. `gawk' allows access to inherited file descriptors. * Close Files And Pipes:: Closing Input and Output Files and Pipes. +* Output Summary:: Output summary.  File: gawk.info, Node: Print, Next: Print Examples, Up: Printing @@ -6776,7 +6847,7 @@ that `gawk' provides: behavior.  -File: gawk.info, Node: Close Files And Pipes, Prev: Special Files, Up: Printing +File: gawk.info, Node: Close Files And Pipes, Next: Output Summary, Prev: Special Files, Up: Printing 5.8 Closing Input and Output Redirections ========================================= @@ -6942,6 +7013,32 @@ is called a "zombie," and cleaning up after it is referred to as call. See the system manual pages for information on how to decode this value. + +File: gawk.info, Node: Output Summary, Prev: Close Files And Pipes, Up: Printing + +5.9 Summary +=========== + + * The `print' statement prints comma-separated expressions. Each + expression is separated by the value of `OFS' and terminated by + the value of `ORS'. `OFMT' provides the conversion format for + 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. + + * Output from both `print' and `printf' may be redirected to files, + pipes, and co-processes. + + * `gawk' provides special file names for access to standard input, + output and error, and for network communications. + + * Use `close()' to close open file, pipe and co-process redirections. + For co-processes, it is possible to close only one direction of the + communications. + +  File: gawk.info, Node: Expressions, Next: Patterns and Actions, Prev: Printing, Up: Top @@ -6968,6 +7065,7 @@ operators. * Function Calls:: A function call is an expression. * Precedence:: How various operators nest. * Locales:: How the locale affects things. +* Expressions Summary:: Expressions summary.  File: gawk.info, Node: Values, Next: All Operators, Up: Expressions @@ -8516,7 +8614,7 @@ String Concatenation POSIX. For maximum portability, do not use them.  -File: gawk.info, Node: Locales, Prev: Precedence, Up: Expressions +File: gawk.info, Node: Locales, Next: Expressions Summary, Prev: Precedence, Up: Expressions 6.6 Where You Are Makes A Difference ==================================== @@ -8551,6 +8649,62 @@ POSIX String Comparison::. used when `gawk' parses input data. This is discussed in detail in *note Conversion::. + +File: gawk.info, Node: Expressions Summary, Prev: Locales, Up: Expressions + +6.7 Summary +=========== + + * Expressions are the basic elements of computation in programs. + They are built from constants, variables, function calls and + combinations of the various kinds of values with operators. + + * `awk' supplies three kinds of constants: numeric, string, and + regexp. `gawk' lets you specify numeric constants in octal and + hexadecimal (bases 8 and 16) in addition to decimal (base 10). In + certain contexts, a standalone regexp constant such as `/foo/' has + the same meaning as `$0 ~ /foo/'. + + * Variables hold values between uses in computations. A number of + built-in variables provide information to your `awk' program, and + a number of others let you control how `awk' behaves. + + * Numbers are automatically converted to strings, and strings to + numbers, as needed by `awk'. Numeric values are converted as if + they were formatted with `sprintf()' using the format in `CONVFMT'. + + * `awk' provides the usual arithmetic operators (addition, + subtraction, multiplication, division, modulus), and unary plus + and minus. It also provides comparison operators, boolean + operators, 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_ + non-null. Otherwise, the value is false. + + * A value'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 + 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 later on in this + Info file. + + * Operator precedence specifies the order in which operations are + performed, unless explicitly overridden by parentheses. `awk''s + operator precedence is compatible with that of C. + + * Locales can affect the format of data as output by an `awk' + program, and occasionally the format for data read as input. + +  File: gawk.info, Node: Patterns and Actions, Next: Arrays, Prev: Expressions, Up: Top @@ -8575,6 +8729,7 @@ top of. Now it's time to start building something useful. * Statements:: Describes the various control statements in detail. * Built-in Variables:: Summarizes the built-in variables. +* Pattern Action Summary:: Patterns and Actions summary.  File: gawk.info, Node: Pattern Overview, Next: Using Shell Variables, Up: Patterns and Actions @@ -9667,7 +9822,7 @@ statement with a nonzero argument, as shown in the following example: systems.  -File: gawk.info, Node: Built-in Variables, Prev: Statements, Up: Patterns and Actions +File: gawk.info, Node: Built-in Variables, Next: Pattern Action Summary, Prev: Statements, Up: Patterns and Actions 7.5 Built-in Variables ====================== @@ -10284,6 +10439,55 @@ Because `-q' is not a valid `gawk' option, it and the following `-v' are passed on to the `awk' program. (*Note Getopt Function::, for an `awk' library function that parses command-line options.) + +File: gawk.info, Node: Pattern Action Summary, Prev: Built-in Variables, Up: Patterns and Actions + +7.6 Summary +=========== + + * 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 + 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, + allowing you to recover from a file that otherwise would cause a + fatal error (such as a file that cannot be opened). + + * Shell variables can be used in `awk' programs by careful use of + shell quoting. It is easier to pass a shell variable into `awk' + by using the `-v' option and an `awk' variable. + + * Actions consist of statements enclosed in curly braces. Statements + are built up from expressions, control statements, compound + statements, input and output statements, and deletion statements. + + * The control statements in `awk' are `if'-`else', `while', `for', + and `do'-`while'. `gawk' adds the `switch' statement. There are + two flavors of `for' statement: one for for performing general + looping, and the other iterating through an array. + + * `break' and `continue' let you exit early or start the next + 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 + start over, respectively. + + * The `exit' statement terminates your program. When executed from + 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 at `awk''s exit + status. + + * Some built-in variables provide control over `awk', mainly for I/O. + Other variables convey information from `awk' to your program. + +  File: gawk.info, Node: Arrays, Next: Functions, Prev: Patterns and Actions, Up: Top @@ -33403,468 +33607,472 @@ Node: Leftmost Longest176154 Node: Computed Regexps177355 Node: Regexp Summary180727 Node: Reading Files182199 -Node: Records184201 -Node: awk split records184944 -Node: gawk split records189802 -Ref: gawk split records-Footnote-1194323 -Node: Fields194360 -Ref: Fields-Footnote-1197324 -Node: Nonconstant Fields197410 -Ref: Nonconstant Fields-Footnote-1199640 -Node: Changing Fields199842 -Node: Field Separators205796 -Node: Default Field Splitting208498 -Node: Regexp Field Splitting209615 -Node: Single Character Fields212956 -Node: Command Line Field Separator214015 -Node: Full Line Fields217357 -Ref: Full Line Fields-Footnote-1217865 -Node: Field Splitting Summary217911 -Ref: Field Splitting Summary-Footnote-1221010 -Node: Constant Size221111 -Node: Splitting By Content225718 -Ref: Splitting By Content-Footnote-1229468 -Node: Multiple Line229508 -Ref: Multiple Line-Footnote-1235364 -Node: Getline235543 -Node: Plain Getline237759 -Node: Getline/Variable239854 -Node: Getline/File241001 -Node: Getline/Variable/File242377 -Ref: Getline/Variable/File-Footnote-1243976 -Node: Getline/Pipe244063 -Node: Getline/Variable/Pipe246762 -Node: Getline/Coprocess247869 -Node: Getline/Variable/Coprocess249121 -Node: Getline Notes249858 -Node: Getline Summary252662 -Ref: table-getline-variants253070 -Node: Read Timeout253982 -Ref: Read Timeout-Footnote-1257809 -Node: Command line directories257867 -Node: Printing258749 -Node: Print260373 -Node: Print Examples261714 -Node: Output Separators264493 -Node: OFMT266509 -Node: Printf267867 -Node: Basic Printf268773 -Node: Control Letters270312 -Node: Format Modifiers274166 -Node: Printf Examples280193 -Node: Redirection282900 -Node: Special Files289847 -Node: Special FD290363 -Ref: Special FD-Footnote-1293938 -Node: Special Network294012 -Node: Special Caveats294848 -Node: Close Files And Pipes295623 -Ref: Close Files And Pipes-Footnote-1302739 -Ref: Close Files And Pipes-Footnote-2302887 -Node: Expressions303037 -Node: Values304169 -Node: Constants304845 -Node: Scalar Constants305525 -Ref: Scalar Constants-Footnote-1306384 -Node: Nondecimal-numbers306634 -Node: Regexp Constants309634 -Node: Using Constant Regexps310109 -Node: Variables313179 -Node: Using Variables313834 -Node: Assignment Options315558 -Node: Conversion317425 -Ref: table-locale-affects322861 -Ref: Conversion-Footnote-1323485 -Node: All Operators323594 -Node: Arithmetic Ops324224 -Node: Concatenation326729 -Ref: Concatenation-Footnote-1329525 -Node: Assignment Ops329645 -Ref: table-assign-ops334628 -Node: Increment Ops335945 -Node: Truth Values and Conditions339383 -Node: Truth Values340466 -Node: Typing and Comparison341515 -Node: Variable Typing342308 -Ref: Variable Typing-Footnote-1346208 -Node: Comparison Operators346330 -Ref: table-relational-ops346740 -Node: POSIX String Comparison350290 -Ref: POSIX String Comparison-Footnote-1351374 -Node: Boolean Ops351512 -Ref: Boolean Ops-Footnote-1355582 -Node: Conditional Exp355673 -Node: Function Calls357400 -Node: Precedence361158 -Node: Locales364827 -Node: Patterns and Actions366430 -Node: Pattern Overview367484 -Node: Regexp Patterns369161 -Node: Expression Patterns369704 -Node: Ranges373485 -Node: BEGIN/END376591 -Node: Using BEGIN/END377353 -Ref: Using BEGIN/END-Footnote-1380089 -Node: I/O And BEGIN/END380195 -Node: BEGINFILE/ENDFILE382480 -Node: Empty385411 -Node: Using Shell Variables385728 -Node: Action Overview388011 -Node: Statements390338 -Node: If Statement392186 -Node: While Statement393684 -Node: Do Statement395728 -Node: For Statement396884 -Node: Switch Statement400036 -Node: Break Statement402139 -Node: Continue Statement404194 -Node: Next Statement405987 -Node: Nextfile Statement408377 -Node: Exit Statement411032 -Node: Built-in Variables413436 -Node: User-modified414532 -Ref: User-modified-Footnote-1422217 -Node: Auto-set422279 -Ref: Auto-set-Footnote-1434825 -Ref: Auto-set-Footnote-2435030 -Node: ARGC and ARGV435086 -Node: Arrays438925 -Node: Array Basics440423 -Node: Array Intro441249 -Ref: figure-array-elements443222 -Node: Reference to Elements445629 -Node: Assigning Elements447902 -Node: Array Example448393 -Node: Scanning an Array450125 -Node: Controlling Scanning453140 -Ref: Controlling Scanning-Footnote-1458313 -Node: Delete458629 -Ref: Delete-Footnote-1461394 -Node: Numeric Array Subscripts461451 -Node: Uninitialized Subscripts463634 -Node: Multidimensional465259 -Node: Multiscanning468352 -Node: Arrays of Arrays469941 -Node: Functions474581 -Node: Built-in475400 -Node: Calling Built-in476478 -Node: Numeric Functions478466 -Ref: Numeric Functions-Footnote-1482300 -Ref: Numeric Functions-Footnote-2482657 -Ref: Numeric Functions-Footnote-3482705 -Node: String Functions482974 -Ref: String Functions-Footnote-1505985 -Ref: String Functions-Footnote-2506114 -Ref: String Functions-Footnote-3506362 -Node: Gory Details506449 -Ref: table-sub-escapes508118 -Ref: table-sub-posix-92509472 -Ref: table-sub-proposed510823 -Ref: table-posix-sub512177 -Ref: table-gensub-escapes513722 -Ref: Gory Details-Footnote-1514898 -Ref: Gory Details-Footnote-2514949 -Node: I/O Functions515100 -Ref: I/O Functions-Footnote-1522223 -Node: Time Functions522370 -Ref: Time Functions-Footnote-1532834 -Ref: Time Functions-Footnote-2532902 -Ref: Time Functions-Footnote-3533060 -Ref: Time Functions-Footnote-4533171 -Ref: Time Functions-Footnote-5533283 -Ref: Time Functions-Footnote-6533510 -Node: Bitwise Functions533776 -Ref: table-bitwise-ops534338 -Ref: Bitwise Functions-Footnote-1538583 -Node: Type Functions538767 -Node: I18N Functions539909 -Node: User-defined541554 -Node: Definition Syntax542358 -Ref: Definition Syntax-Footnote-1547283 -Node: Function Example547352 -Ref: Function Example-Footnote-1549996 -Node: Function Caveats550018 -Node: Calling A Function550536 -Node: Variable Scope551491 -Node: Pass By Value/Reference554479 -Node: Return Statement557987 -Node: Dynamic Typing560971 -Node: Indirect Calls561900 -Node: Library Functions571587 -Ref: Library Functions-Footnote-1575100 -Ref: Library Functions-Footnote-2575243 -Node: Library Names575414 -Ref: Library Names-Footnote-1578887 -Ref: Library Names-Footnote-2579107 -Node: General Functions579193 -Node: Strtonum Function580221 -Node: Assert Function583151 -Node: Round Function586477 -Node: Cliff Random Function588018 -Node: Ordinal Functions589034 -Ref: Ordinal Functions-Footnote-1592111 -Ref: Ordinal Functions-Footnote-2592363 -Node: Join Function592574 -Ref: Join Function-Footnote-1594345 -Node: Getlocaltime Function594545 -Node: Readfile Function598281 -Node: Data File Management600120 -Node: Filetrans Function600752 -Node: Rewind Function604807 -Node: File Checking606194 -Ref: File Checking-Footnote-1607326 -Node: Empty Files607527 -Node: Ignoring Assigns609750 -Node: Getopt Function611281 -Ref: Getopt Function-Footnote-1622577 -Node: Passwd Functions622780 -Ref: Passwd Functions-Footnote-1631759 -Node: Group Functions631847 -Ref: Group Functions-Footnote-1639789 -Node: Walking Arrays640002 -Node: Sample Programs642138 -Node: Running Examples642812 -Node: Clones643540 -Node: Cut Program644764 -Node: Egrep Program654625 -Ref: Egrep Program-Footnote-1662554 -Node: Id Program662664 -Node: Split Program666328 -Ref: Split Program-Footnote-1669859 -Node: Tee Program669987 -Node: Uniq Program672794 -Node: Wc Program680224 -Ref: Wc Program-Footnote-1684492 -Ref: Wc Program-Footnote-2684692 -Node: Miscellaneous Programs684784 -Node: Dupword Program685972 -Node: Alarm Program688003 -Node: Translate Program692817 -Ref: Translate Program-Footnote-1697208 -Ref: Translate Program-Footnote-2697478 -Node: Labels Program697612 -Ref: Labels Program-Footnote-1700983 -Node: Word Sorting701067 -Node: History Sorting705110 -Node: Extract Program706946 -Ref: Extract Program-Footnote-1714521 -Node: Simple Sed714650 -Node: Igawk Program717712 -Ref: Igawk Program-Footnote-1732888 -Ref: Igawk Program-Footnote-2733089 -Node: Anagram Program733227 -Node: Signature Program736295 -Node: Advanced Features737542 -Node: Nondecimal Data739428 -Node: Array Sorting741005 -Node: Controlling Array Traversal741702 -Node: Array Sorting Functions749982 -Ref: Array Sorting Functions-Footnote-1753889 -Node: Two-way I/O754083 -Ref: Two-way I/O-Footnote-1759599 -Node: TCP/IP Networking759681 -Node: Profiling762525 -Node: Internationalization770033 -Node: I18N and L10N771458 -Node: Explaining gettext772144 -Ref: Explaining gettext-Footnote-1777284 -Ref: Explaining gettext-Footnote-2777468 -Node: Programmer i18n777633 -Node: Translator i18n781858 -Node: String Extraction782652 -Ref: String Extraction-Footnote-1783613 -Node: Printf Ordering783699 -Ref: Printf Ordering-Footnote-1786481 -Node: I18N Portability786545 -Ref: I18N Portability-Footnote-1788994 -Node: I18N Example789057 -Ref: I18N Example-Footnote-1791779 -Node: Gawk I18N791851 -Node: Debugger792464 -Node: Debugging793435 -Node: Debugging Concepts793876 -Node: Debugging Terms795732 -Node: Awk Debugging798329 -Node: Sample Debugging Session799221 -Node: Debugger Invocation799741 -Node: Finding The Bug801074 -Node: List of Debugger Commands807556 -Node: Breakpoint Control808888 -Node: Debugger Execution Control812552 -Node: Viewing And Changing Data815912 -Node: Execution Stack819270 -Node: Debugger Info820783 -Node: Miscellaneous Debugger Commands824777 -Node: Readline Support829961 -Node: Limitations830853 -Node: Arbitrary Precision Arithmetic833101 -Ref: Arbitrary Precision Arithmetic-Footnote-1834750 -Node: General Arithmetic834898 -Node: Floating Point Issues836618 -Node: String Conversion Precision837499 -Ref: String Conversion Precision-Footnote-1839204 -Node: Unexpected Results839313 -Node: POSIX Floating Point Problems841466 -Ref: POSIX Floating Point Problems-Footnote-1845287 -Node: Integer Programming845325 -Node: Floating-point Programming847136 -Ref: Floating-point Programming-Footnote-1853464 -Ref: Floating-point Programming-Footnote-2853734 -Node: Floating-point Representation853998 -Node: Floating-point Context855163 -Ref: table-ieee-formats856002 -Node: Rounding Mode857386 -Ref: table-rounding-modes857865 -Ref: Rounding Mode-Footnote-1860880 -Node: Gawk and MPFR861059 -Node: Arbitrary Precision Floats862468 -Ref: Arbitrary Precision Floats-Footnote-1864911 -Node: Setting Precision865232 -Ref: table-predefined-precision-strings865916 -Node: Setting Rounding Mode868061 -Ref: table-gawk-rounding-modes868465 -Node: Floating-point Constants869652 -Node: Changing Precision871104 -Ref: Changing Precision-Footnote-1872496 -Node: Exact Arithmetic872670 -Node: Arbitrary Precision Integers875804 -Ref: Arbitrary Precision Integers-Footnote-1878819 -Node: Dynamic Extensions878966 -Node: Extension Intro880424 -Node: Plugin License881689 -Node: Extension Mechanism Outline882374 -Ref: figure-load-extension882798 -Ref: figure-load-new-function884283 -Ref: figure-call-new-function885285 -Node: Extension API Description887269 -Node: Extension API Functions Introduction888719 -Node: General Data Types893585 -Ref: General Data Types-Footnote-1899278 -Node: Requesting Values899577 -Ref: table-value-types-returned900314 -Node: Memory Allocation Functions901272 -Ref: Memory Allocation Functions-Footnote-1904019 -Node: Constructor Functions904115 -Node: Registration Functions905873 -Node: Extension Functions906558 -Node: Exit Callback Functions908860 -Node: Extension Version String910110 -Node: Input Parsers910760 -Node: Output Wrappers920563 -Node: Two-way processors925079 -Node: Printing Messages927283 -Ref: Printing Messages-Footnote-1928360 -Node: Updating `ERRNO'928512 -Node: Accessing Parameters929251 -Node: Symbol Table Access930481 -Node: Symbol table by name930995 -Node: Symbol table by cookie932971 -Ref: Symbol table by cookie-Footnote-1937104 -Node: Cached values937167 -Ref: Cached values-Footnote-1940672 -Node: Array Manipulation940763 -Ref: Array Manipulation-Footnote-1941861 -Node: Array Data Types941900 -Ref: Array Data Types-Footnote-1944603 -Node: Array Functions944695 -Node: Flattening Arrays948569 -Node: Creating Arrays955421 -Node: Extension API Variables960152 -Node: Extension Versioning960788 -Node: Extension API Informational Variables962689 -Node: Extension API Boilerplate963775 -Node: Finding Extensions967579 -Node: Extension Example968139 -Node: Internal File Description968869 -Node: Internal File Ops972960 -Ref: Internal File Ops-Footnote-1984506 -Node: Using Internal File Ops984646 -Ref: Using Internal File Ops-Footnote-1986993 -Node: Extension Samples987261 -Node: Extension Sample File Functions988785 -Node: Extension Sample Fnmatch996353 -Node: Extension Sample Fork997820 -Node: Extension Sample Inplace999033 -Node: Extension Sample Ord1000799 -Node: Extension Sample Readdir1001635 -Ref: table-readdir-file-types1002484 -Node: Extension Sample Revout1003283 -Node: Extension Sample Rev2way1003874 -Node: Extension Sample Read write array1004615 -Node: Extension Sample Readfile1006494 -Node: Extension Sample API Tests1007594 -Node: Extension Sample Time1008119 -Node: gawkextlib1009434 -Node: Language History1012221 -Node: V7/SVR3.11013815 -Node: SVR41016135 -Node: POSIX1017577 -Node: BTL1018963 -Node: POSIX/GNU1019697 -Node: Feature History1025296 -Node: Common Extensions1038408 -Node: Ranges and Locales1039720 -Ref: Ranges and Locales-Footnote-11044337 -Ref: Ranges and Locales-Footnote-21044364 -Ref: Ranges and Locales-Footnote-31044598 -Node: Contributors1044819 -Node: Installation1050257 -Node: Gawk Distribution1051151 -Node: Getting1051635 -Node: Extracting1052461 -Node: Distribution contents1054103 -Node: Unix Installation1059820 -Node: Quick Installation1060437 -Node: Additional Configuration Options1062879 -Node: Configuration Philosophy1064617 -Node: Non-Unix Installation1066968 -Node: PC Installation1067426 -Node: PC Binary Installation1068737 -Node: PC Compiling1070585 -Ref: PC Compiling-Footnote-11073584 -Node: PC Testing1073689 -Node: PC Using1074865 -Node: Cygwin1079023 -Node: MSYS1079832 -Node: VMS Installation1080346 -Node: VMS Compilation1081142 -Ref: VMS Compilation-Footnote-11082357 -Node: VMS Dynamic Extensions1082415 -Node: VMS Installation Details1083788 -Node: VMS Running1086034 -Node: VMS GNV1088868 -Node: VMS Old Gawk1089591 -Node: Bugs1090061 -Node: Other Versions1094065 -Node: Notes1100290 -Node: Compatibility Mode1101090 -Node: Additions1101872 -Node: Accessing The Source1102797 -Node: Adding Code1104233 -Node: New Ports1110411 -Node: Derived Files1114892 -Ref: Derived Files-Footnote-11119973 -Ref: Derived Files-Footnote-21120007 -Ref: Derived Files-Footnote-31120603 -Node: Future Extensions1120717 -Node: Implementation Limitations1121323 -Node: Extension Design1122571 -Node: Old Extension Problems1123725 -Ref: Old Extension Problems-Footnote-11125242 -Node: Extension New Mechanism Goals1125299 -Ref: Extension New Mechanism Goals-Footnote-11128660 -Node: Extension Other Design Decisions1128849 -Node: Extension Future Growth1130955 -Node: Old Extension Mechanism1131791 -Node: Basic Concepts1133531 -Node: Basic High Level1134212 -Ref: figure-general-flow1134484 -Ref: figure-process-flow1135083 -Ref: Basic High Level-Footnote-11138312 -Node: Basic Data Typing1138497 -Node: Glossary1141824 -Node: Copying1166976 -Node: GNU Free Documentation License1204532 -Node: Index1229668 +Node: Records184248 +Node: awk split records184991 +Node: gawk split records189849 +Ref: gawk split records-Footnote-1194370 +Node: Fields194407 +Ref: Fields-Footnote-1197371 +Node: Nonconstant Fields197457 +Ref: Nonconstant Fields-Footnote-1199687 +Node: Changing Fields199889 +Node: Field Separators205843 +Node: Default Field Splitting208545 +Node: Regexp Field Splitting209662 +Node: Single Character Fields213003 +Node: Command Line Field Separator214062 +Node: Full Line Fields217404 +Ref: Full Line Fields-Footnote-1217912 +Node: Field Splitting Summary217958 +Ref: Field Splitting Summary-Footnote-1221057 +Node: Constant Size221158 +Node: Splitting By Content225765 +Ref: Splitting By Content-Footnote-1229515 +Node: Multiple Line229555 +Ref: Multiple Line-Footnote-1235411 +Node: Getline235590 +Node: Plain Getline237806 +Node: Getline/Variable239901 +Node: Getline/File241048 +Node: Getline/Variable/File242424 +Ref: Getline/Variable/File-Footnote-1244023 +Node: Getline/Pipe244110 +Node: Getline/Variable/Pipe246809 +Node: Getline/Coprocess247916 +Node: Getline/Variable/Coprocess249168 +Node: Getline Notes249905 +Node: Getline Summary252709 +Ref: table-getline-variants253117 +Node: Read Timeout254029 +Ref: Read Timeout-Footnote-1257856 +Node: Command line directories257914 +Node: Input Summary258818 +Node: Printing261932 +Node: Print263604 +Node: Print Examples264945 +Node: Output Separators267724 +Node: OFMT269740 +Node: Printf271098 +Node: Basic Printf272004 +Node: Control Letters273543 +Node: Format Modifiers277397 +Node: Printf Examples283424 +Node: Redirection286131 +Node: Special Files293078 +Node: Special FD293594 +Ref: Special FD-Footnote-1297169 +Node: Special Network297243 +Node: Special Caveats298079 +Node: Close Files And Pipes298854 +Ref: Close Files And Pipes-Footnote-1305993 +Ref: Close Files And Pipes-Footnote-2306141 +Node: Output Summary306291 +Node: Expressions307263 +Node: Values308448 +Node: Constants309124 +Node: Scalar Constants309804 +Ref: Scalar Constants-Footnote-1310663 +Node: Nondecimal-numbers310913 +Node: Regexp Constants313913 +Node: Using Constant Regexps314388 +Node: Variables317458 +Node: Using Variables318113 +Node: Assignment Options319837 +Node: Conversion321704 +Ref: table-locale-affects327140 +Ref: Conversion-Footnote-1327764 +Node: All Operators327873 +Node: Arithmetic Ops328503 +Node: Concatenation331008 +Ref: Concatenation-Footnote-1333804 +Node: Assignment Ops333924 +Ref: table-assign-ops338907 +Node: Increment Ops340224 +Node: Truth Values and Conditions343662 +Node: Truth Values344745 +Node: Typing and Comparison345794 +Node: Variable Typing346587 +Ref: Variable Typing-Footnote-1350487 +Node: Comparison Operators350609 +Ref: table-relational-ops351019 +Node: POSIX String Comparison354569 +Ref: POSIX String Comparison-Footnote-1355653 +Node: Boolean Ops355791 +Ref: Boolean Ops-Footnote-1359861 +Node: Conditional Exp359952 +Node: Function Calls361679 +Node: Precedence365437 +Node: Locales369106 +Node: Expressions Summary370737 +Node: Patterns and Actions373234 +Node: Pattern Overview374350 +Node: Regexp Patterns376027 +Node: Expression Patterns376570 +Node: Ranges380351 +Node: BEGIN/END383457 +Node: Using BEGIN/END384219 +Ref: Using BEGIN/END-Footnote-1386955 +Node: I/O And BEGIN/END387061 +Node: BEGINFILE/ENDFILE389346 +Node: Empty392277 +Node: Using Shell Variables392594 +Node: Action Overview394877 +Node: Statements397204 +Node: If Statement399052 +Node: While Statement400550 +Node: Do Statement402594 +Node: For Statement403750 +Node: Switch Statement406902 +Node: Break Statement409005 +Node: Continue Statement411060 +Node: Next Statement412853 +Node: Nextfile Statement415243 +Node: Exit Statement417898 +Node: Built-in Variables420302 +Node: User-modified421429 +Ref: User-modified-Footnote-1429114 +Node: Auto-set429176 +Ref: Auto-set-Footnote-1441722 +Ref: Auto-set-Footnote-2441927 +Node: ARGC and ARGV441983 +Node: Pattern Action Summary445822 +Node: Arrays448045 +Node: Array Basics449543 +Node: Array Intro450369 +Ref: figure-array-elements452342 +Node: Reference to Elements454749 +Node: Assigning Elements457022 +Node: Array Example457513 +Node: Scanning an Array459245 +Node: Controlling Scanning462260 +Ref: Controlling Scanning-Footnote-1467433 +Node: Delete467749 +Ref: Delete-Footnote-1470514 +Node: Numeric Array Subscripts470571 +Node: Uninitialized Subscripts472754 +Node: Multidimensional474379 +Node: Multiscanning477472 +Node: Arrays of Arrays479061 +Node: Functions483701 +Node: Built-in484520 +Node: Calling Built-in485598 +Node: Numeric Functions487586 +Ref: Numeric Functions-Footnote-1491420 +Ref: Numeric Functions-Footnote-2491777 +Ref: Numeric Functions-Footnote-3491825 +Node: String Functions492094 +Ref: String Functions-Footnote-1515105 +Ref: String Functions-Footnote-2515234 +Ref: String Functions-Footnote-3515482 +Node: Gory Details515569 +Ref: table-sub-escapes517238 +Ref: table-sub-posix-92518592 +Ref: table-sub-proposed519943 +Ref: table-posix-sub521297 +Ref: table-gensub-escapes522842 +Ref: Gory Details-Footnote-1524018 +Ref: Gory Details-Footnote-2524069 +Node: I/O Functions524220 +Ref: I/O Functions-Footnote-1531343 +Node: Time Functions531490 +Ref: Time Functions-Footnote-1541954 +Ref: Time Functions-Footnote-2542022 +Ref: Time Functions-Footnote-3542180 +Ref: Time Functions-Footnote-4542291 +Ref: Time Functions-Footnote-5542403 +Ref: Time Functions-Footnote-6542630 +Node: Bitwise Functions542896 +Ref: table-bitwise-ops543458 +Ref: Bitwise Functions-Footnote-1547703 +Node: Type Functions547887 +Node: I18N Functions549029 +Node: User-defined550674 +Node: Definition Syntax551478 +Ref: Definition Syntax-Footnote-1556403 +Node: Function Example556472 +Ref: Function Example-Footnote-1559116 +Node: Function Caveats559138 +Node: Calling A Function559656 +Node: Variable Scope560611 +Node: Pass By Value/Reference563599 +Node: Return Statement567107 +Node: Dynamic Typing570091 +Node: Indirect Calls571020 +Node: Library Functions580707 +Ref: Library Functions-Footnote-1584220 +Ref: Library Functions-Footnote-2584363 +Node: Library Names584534 +Ref: Library Names-Footnote-1588007 +Ref: Library Names-Footnote-2588227 +Node: General Functions588313 +Node: Strtonum Function589341 +Node: Assert Function592271 +Node: Round Function595597 +Node: Cliff Random Function597138 +Node: Ordinal Functions598154 +Ref: Ordinal Functions-Footnote-1601231 +Ref: Ordinal Functions-Footnote-2601483 +Node: Join Function601694 +Ref: Join Function-Footnote-1603465 +Node: Getlocaltime Function603665 +Node: Readfile Function607401 +Node: Data File Management609240 +Node: Filetrans Function609872 +Node: Rewind Function613927 +Node: File Checking615314 +Ref: File Checking-Footnote-1616446 +Node: Empty Files616647 +Node: Ignoring Assigns618870 +Node: Getopt Function620401 +Ref: Getopt Function-Footnote-1631697 +Node: Passwd Functions631900 +Ref: Passwd Functions-Footnote-1640879 +Node: Group Functions640967 +Ref: Group Functions-Footnote-1648909 +Node: Walking Arrays649122 +Node: Sample Programs651258 +Node: Running Examples651932 +Node: Clones652660 +Node: Cut Program653884 +Node: Egrep Program663745 +Ref: Egrep Program-Footnote-1671674 +Node: Id Program671784 +Node: Split Program675448 +Ref: Split Program-Footnote-1678979 +Node: Tee Program679107 +Node: Uniq Program681914 +Node: Wc Program689344 +Ref: Wc Program-Footnote-1693612 +Ref: Wc Program-Footnote-2693812 +Node: Miscellaneous Programs693904 +Node: Dupword Program695092 +Node: Alarm Program697123 +Node: Translate Program701937 +Ref: Translate Program-Footnote-1706328 +Ref: Translate Program-Footnote-2706598 +Node: Labels Program706732 +Ref: Labels Program-Footnote-1710103 +Node: Word Sorting710187 +Node: History Sorting714230 +Node: Extract Program716066 +Ref: Extract Program-Footnote-1723641 +Node: Simple Sed723770 +Node: Igawk Program726832 +Ref: Igawk Program-Footnote-1742008 +Ref: Igawk Program-Footnote-2742209 +Node: Anagram Program742347 +Node: Signature Program745415 +Node: Advanced Features746662 +Node: Nondecimal Data748548 +Node: Array Sorting750125 +Node: Controlling Array Traversal750822 +Node: Array Sorting Functions759102 +Ref: Array Sorting Functions-Footnote-1763009 +Node: Two-way I/O763203 +Ref: Two-way I/O-Footnote-1768719 +Node: TCP/IP Networking768801 +Node: Profiling771645 +Node: Internationalization779153 +Node: I18N and L10N780578 +Node: Explaining gettext781264 +Ref: Explaining gettext-Footnote-1786404 +Ref: Explaining gettext-Footnote-2786588 +Node: Programmer i18n786753 +Node: Translator i18n790978 +Node: String Extraction791772 +Ref: String Extraction-Footnote-1792733 +Node: Printf Ordering792819 +Ref: Printf Ordering-Footnote-1795601 +Node: I18N Portability795665 +Ref: I18N Portability-Footnote-1798114 +Node: I18N Example798177 +Ref: I18N Example-Footnote-1800899 +Node: Gawk I18N800971 +Node: Debugger801584 +Node: Debugging802555 +Node: Debugging Concepts802996 +Node: Debugging Terms804852 +Node: Awk Debugging807449 +Node: Sample Debugging Session808341 +Node: Debugger Invocation808861 +Node: Finding The Bug810194 +Node: List of Debugger Commands816676 +Node: Breakpoint Control818008 +Node: Debugger Execution Control821672 +Node: Viewing And Changing Data825032 +Node: Execution Stack828390 +Node: Debugger Info829903 +Node: Miscellaneous Debugger Commands833897 +Node: Readline Support839081 +Node: Limitations839973 +Node: Arbitrary Precision Arithmetic842221 +Ref: Arbitrary Precision Arithmetic-Footnote-1843870 +Node: General Arithmetic844018 +Node: Floating Point Issues845738 +Node: String Conversion Precision846619 +Ref: String Conversion Precision-Footnote-1848324 +Node: Unexpected Results848433 +Node: POSIX Floating Point Problems850586 +Ref: POSIX Floating Point Problems-Footnote-1854407 +Node: Integer Programming854445 +Node: Floating-point Programming856256 +Ref: Floating-point Programming-Footnote-1862584 +Ref: Floating-point Programming-Footnote-2862854 +Node: Floating-point Representation863118 +Node: Floating-point Context864283 +Ref: table-ieee-formats865122 +Node: Rounding Mode866506 +Ref: table-rounding-modes866985 +Ref: Rounding Mode-Footnote-1870000 +Node: Gawk and MPFR870179 +Node: Arbitrary Precision Floats871588 +Ref: Arbitrary Precision Floats-Footnote-1874031 +Node: Setting Precision874352 +Ref: table-predefined-precision-strings875036 +Node: Setting Rounding Mode877181 +Ref: table-gawk-rounding-modes877585 +Node: Floating-point Constants878772 +Node: Changing Precision880224 +Ref: Changing Precision-Footnote-1881616 +Node: Exact Arithmetic881790 +Node: Arbitrary Precision Integers884924 +Ref: Arbitrary Precision Integers-Footnote-1887939 +Node: Dynamic Extensions888086 +Node: Extension Intro889544 +Node: Plugin License890809 +Node: Extension Mechanism Outline891494 +Ref: figure-load-extension891918 +Ref: figure-load-new-function893403 +Ref: figure-call-new-function894405 +Node: Extension API Description896389 +Node: Extension API Functions Introduction897839 +Node: General Data Types902705 +Ref: General Data Types-Footnote-1908398 +Node: Requesting Values908697 +Ref: table-value-types-returned909434 +Node: Memory Allocation Functions910392 +Ref: Memory Allocation Functions-Footnote-1913139 +Node: Constructor Functions913235 +Node: Registration Functions914993 +Node: Extension Functions915678 +Node: Exit Callback Functions917980 +Node: Extension Version String919230 +Node: Input Parsers919880 +Node: Output Wrappers929683 +Node: Two-way processors934199 +Node: Printing Messages936403 +Ref: Printing Messages-Footnote-1937480 +Node: Updating `ERRNO'937632 +Node: Accessing Parameters938371 +Node: Symbol Table Access939601 +Node: Symbol table by name940115 +Node: Symbol table by cookie942091 +Ref: Symbol table by cookie-Footnote-1946224 +Node: Cached values946287 +Ref: Cached values-Footnote-1949792 +Node: Array Manipulation949883 +Ref: Array Manipulation-Footnote-1950981 +Node: Array Data Types951020 +Ref: Array Data Types-Footnote-1953723 +Node: Array Functions953815 +Node: Flattening Arrays957689 +Node: Creating Arrays964541 +Node: Extension API Variables969272 +Node: Extension Versioning969908 +Node: Extension API Informational Variables971809 +Node: Extension API Boilerplate972895 +Node: Finding Extensions976699 +Node: Extension Example977259 +Node: Internal File Description977989 +Node: Internal File Ops982080 +Ref: Internal File Ops-Footnote-1993626 +Node: Using Internal File Ops993766 +Ref: Using Internal File Ops-Footnote-1996113 +Node: Extension Samples996381 +Node: Extension Sample File Functions997905 +Node: Extension Sample Fnmatch1005473 +Node: Extension Sample Fork1006940 +Node: Extension Sample Inplace1008153 +Node: Extension Sample Ord1009919 +Node: Extension Sample Readdir1010755 +Ref: table-readdir-file-types1011604 +Node: Extension Sample Revout1012403 +Node: Extension Sample Rev2way1012994 +Node: Extension Sample Read write array1013735 +Node: Extension Sample Readfile1015614 +Node: Extension Sample API Tests1016714 +Node: Extension Sample Time1017239 +Node: gawkextlib1018554 +Node: Language History1021341 +Node: V7/SVR3.11022935 +Node: SVR41025255 +Node: POSIX1026697 +Node: BTL1028083 +Node: POSIX/GNU1028817 +Node: Feature History1034416 +Node: Common Extensions1047528 +Node: Ranges and Locales1048840 +Ref: Ranges and Locales-Footnote-11053457 +Ref: Ranges and Locales-Footnote-21053484 +Ref: Ranges and Locales-Footnote-31053718 +Node: Contributors1053939 +Node: Installation1059377 +Node: Gawk Distribution1060271 +Node: Getting1060755 +Node: Extracting1061581 +Node: Distribution contents1063223 +Node: Unix Installation1068940 +Node: Quick Installation1069557 +Node: Additional Configuration Options1071999 +Node: Configuration Philosophy1073737 +Node: Non-Unix Installation1076088 +Node: PC Installation1076546 +Node: PC Binary Installation1077857 +Node: PC Compiling1079705 +Ref: PC Compiling-Footnote-11082704 +Node: PC Testing1082809 +Node: PC Using1083985 +Node: Cygwin1088143 +Node: MSYS1088952 +Node: VMS Installation1089466 +Node: VMS Compilation1090262 +Ref: VMS Compilation-Footnote-11091477 +Node: VMS Dynamic Extensions1091535 +Node: VMS Installation Details1092908 +Node: VMS Running1095154 +Node: VMS GNV1097988 +Node: VMS Old Gawk1098711 +Node: Bugs1099181 +Node: Other Versions1103185 +Node: Notes1109410 +Node: Compatibility Mode1110210 +Node: Additions1110992 +Node: Accessing The Source1111917 +Node: Adding Code1113353 +Node: New Ports1119531 +Node: Derived Files1124012 +Ref: Derived Files-Footnote-11129093 +Ref: Derived Files-Footnote-21129127 +Ref: Derived Files-Footnote-31129723 +Node: Future Extensions1129837 +Node: Implementation Limitations1130443 +Node: Extension Design1131691 +Node: Old Extension Problems1132845 +Ref: Old Extension Problems-Footnote-11134362 +Node: Extension New Mechanism Goals1134419 +Ref: Extension New Mechanism Goals-Footnote-11137780 +Node: Extension Other Design Decisions1137969 +Node: Extension Future Growth1140075 +Node: Old Extension Mechanism1140911 +Node: Basic Concepts1142651 +Node: Basic High Level1143332 +Ref: figure-general-flow1143604 +Ref: figure-process-flow1144203 +Ref: Basic High Level-Footnote-11147432 +Node: Basic Data Typing1147617 +Node: Glossary1150944 +Node: Copying1176096 +Node: GNU Free Documentation License1213652 +Node: Index1238788  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 7f85c13c..97d4ced9 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -1460,9 +1460,15 @@ Primarily, this @value{DOCUMENT} explains the features of @command{awk} as defined in the POSIX standard. It does so in the context of the @command{gawk} implementation. While doing so, it also attempts to describe important differences between @command{gawk} -and other @command{awk} implementations.@footnote{All such differences +and other @command{awk} +@ifclear FOR_PRINT +implementations.@footnote{All such differences appear in the index under the entry ``differences in @command{awk} and @command{gawk}.''} +@end ifclear +@ifset FOR_PRINT +implementations. +@end ifset Finally, any @command{gawk} features that are not in the POSIX standard for @command{awk} are noted. @@ -6027,6 +6033,7 @@ used with it do not have to be named on the @command{awk} command line * Read Timeout:: Reading input with a timeout. * Command line directories:: What happens if you put a directory on the command line. +* Input Summary:: Input summary. @end menu @node Records @@ -8505,6 +8512,75 @@ to treating a directory on the command line as a fatal error. @xref{Extension Sample Readdir}, for a way to treat directories as usable data from an @command{awk} program. +@node Input Summary +@section Summary + +@itemize @value{BULLET} +@item +Input is split into records based on the value of @code{RS}. +The possibilities are as follows: + +@multitable @columnfractions .25 .35 .40 +@headitem Value of @code{RS} @tab Records are split on @tab @command{awk} / @command{gawk} +@item Any single character @tab That character @tab @command{awk} +@item The empty string (@code{""}) @tab Runs of two or more newlines @tab @command{awk} +@item A regexp @tab Text that matches the regexp @tab @command{gawk} +@end multitable + +@item +@command{gawk} sets @code{RT} to the text matched by @code{RS}. + +@item +After splitting the input into records, @command{awk} further splits the record +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. + +@item +Fields may be referenced using a variable, as in @samp{$NF}. Fields may also be +assigned values, which causes the value of @code{$0} to be recomputed when it is +later referenced. Assigning to a field with a number greater than @code{NF} +creates the field and rebuilds the record, using @code{OFS} to separate the fields. +Incrementing @code{NF} does the same thing. Decrementing @code{NF} throws away fields +and rebuilds the record. + +@item +Field splitting is more complicated than record splitting. + +@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{FIELDWIDTHS == @var{list of columns}} @tab Based on character position @tab @command{gawk} +@item @code{FPAT == @var{regexp}} @tab On text around text matching the regexp @tab @command{gawk} +@end multitable + +Using @samp{FS = "\n"} causes the entire record to be a single field (assuming +that newlines separate records). + +@item +@code{FS} may be set from the command line using the @option{-F} option. +This can also be done using command-line variable assignment. + +@item +@code{PROCINFO["FS"]} can be used to see how fields are being split. + +@item +Use @code{getline} in its varioius forms to read additional records, +from the default input stream, from a file, or from a pipe or co-process. + +@item +Use @code{PROCINFO[@var{file}, "READ_TIMEOUT"]} to cause reads to timeout +for @var{file}. + +@item +Directories on the command line are fatal for standard @command{awk}; +@command{gawk} ignores them if not in POSIX mode. + +@end itemize + @node Printing @chapter Printing Output @@ -8544,6 +8620,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. +* Output Summary:: Output summary. @end menu @node Print @@ -10033,6 +10110,38 @@ when closing a pipe. @c ENDOFRANGE ofc @c ENDOFRANGE pc @c ENDOFRANGE cc + +@node Output Summary +@section Summary + +@itemize @value{BULLET} +@item +The @code{print} statement prints comma-separated expressions. Each expression +is separated by the value of @code{OFS} and terminated by the value of @code{ORS}. +@code{OFMT} provides the conversion format 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. + +@item +Output from both @code{print} and @code{printf} may be redirected to files, +pipes, and co-processes. + +@item +@command{gawk} provides special file names for access to standard input, output +and error, and for network communications. + +@item +Use @code{close()} to close open file, pipe and co-process redirections. +For co-processes, it is possible to close only one direction of the +communications. + +@end itemize + + @c ENDOFRANGE prnt @node Expressions @@ -10059,6 +10168,7 @@ combinations of these with various operators. * Function Calls:: A function call is an expression. * Precedence:: How various operators nest. * Locales:: How the locale affects things. +* Expressions Summary:: Expressions summary. @end menu @node Values @@ -12454,6 +12564,71 @@ Finally, the locale affects the value of the decimal point character used when @command{gawk} parses input data. This is discussed in detail in @ref{Conversion}. +@node Expressions Summary +@section Summary + +@itemize @value{BULLET} +@item +Expressions are the basic elements of computation in programs. +They are built from constants, variables, function calls and combinations +of the various kinds of values with operators. + +@item +@command{awk} supplies three kinds of constants: numeric, string, and +regexp. @command{gawk} lets you specify numeric constants in octal +and hexadecimal (bases 8 and 16) in addition to decimal (base 10). +In certain contexts, a standalone regexp constant such as @code{/foo/} +has the same meaning as @samp{$0 ~ /foo/}. + +@item +Variables hold values between uses in computations. A number of built-in +variables provide information to your @command{awk} program, and a number +of others let you control how @command{awk} behaves. + +@item +Numbers are automatically converted to strings, and strings to numbers, +as needed by @command{awk}. Numeric values are converted as if they were +formatted with @code{sprintf()} using the format in @code{CONVFMT}. + +@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, 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 expressions. + +@item +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 +@emph{or} non-null. Otherwise, the value is false. + +@item +A value's type is set upon each assignment and may change over its 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 +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 later on in +this @value{DOCUMENT}. + +@item +Operator precedence specifies the order in which operations are +performed, unless explicitly overridden by parentheses. @command{awk}'s +operator precedence is compatible with that of C. + +@item +Locales can affect the format of data as output by an @command{awk} +program, and occasionally the format for data read as input. + +@end itemize + @c ENDOFRANGE exps @node Patterns and Actions @@ -12480,6 +12655,7 @@ building something useful. * Statements:: Describes the various control statements in detail. * Built-in Variables:: Summarizes the built-in variables. +* Pattern Action Summary:: Patterns and Actions summary. @end menu @node Pattern Overview @@ -14749,6 +14925,65 @@ are passed on to the @command{awk} program. (@xref{Getopt Function}, for an @command{awk} library function that parses command-line options.) +@node Pattern Action Summary +@section Summary + +@itemize @value{BULLET} +@item +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 +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. +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 +cause a fatal error (such as a file that cannot be opened). + +@item +Shell variables can be used in @command{awk} programs by careful +use of shell quoting. It is easier to pass a shell variable into +@command{awk} by using the @option{-v} option and an @command{awk} +variable. + +@item +Actions consist of statements enclosed in curly braces. Statements +are built up from expressions, control statements, compound statements, +input and output statements, and deletion statements. + +@item +The control statements in @command{awk} are @code{if}-@code{else}, +@code{while}, @code{for}, and @code{do}-@code{while}. @command{gawk} +adds the @code{switch} statement. There are two flavors of @code{for} +statement: one for for performing general looping, and the other iterating +through an array. + +@item +@code{break} and @code{continue} let you exit early or start the next +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 +start over, respectively. + +@item +The @code{exit} statement terminates your program. When executed +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 +at @command{awk}'s exit status. + +@item +Some built-in variables provide control over @command{awk}, mainly for I/O. +Other variables convey information from @command{awk} to your program. + +@end itemize + @node Arrays @chapter Arrays in @command{awk} @c STARTOFRANGE arrs diff --git a/doc/gawktexi.in b/doc/gawktexi.in index e64382e6..899f1e03 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -1427,9 +1427,15 @@ Primarily, this @value{DOCUMENT} explains the features of @command{awk} as defined in the POSIX standard. It does so in the context of the @command{gawk} implementation. While doing so, it also attempts to describe important differences between @command{gawk} -and other @command{awk} implementations.@footnote{All such differences +and other @command{awk} +@ifclear FOR_PRINT +implementations.@footnote{All such differences appear in the index under the entry ``differences in @command{awk} and @command{gawk}.''} +@end ifclear +@ifset FOR_PRINT +implementations. +@end ifset Finally, any @command{gawk} features that are not in the POSIX standard for @command{awk} are noted. @@ -5828,6 +5834,7 @@ used with it do not have to be named on the @command{awk} command line * Read Timeout:: Reading input with a timeout. * Command line directories:: What happens if you put a directory on the command line. +* Input Summary:: Input summary. @end menu @node Records @@ -8124,6 +8131,75 @@ to treating a directory on the command line as a fatal error. @xref{Extension Sample Readdir}, for a way to treat directories as usable data from an @command{awk} program. +@node Input Summary +@section Summary + +@itemize @value{BULLET} +@item +Input is split into records based on the value of @code{RS}. +The possibilities are as follows: + +@multitable @columnfractions .25 .35 .40 +@headitem Value of @code{RS} @tab Records are split on @tab @command{awk} / @command{gawk} +@item Any single character @tab That character @tab @command{awk} +@item The empty string (@code{""}) @tab Runs of two or more newlines @tab @command{awk} +@item A regexp @tab Text that matches the regexp @tab @command{gawk} +@end multitable + +@item +@command{gawk} sets @code{RT} to the text matched by @code{RS}. + +@item +After splitting the input into records, @command{awk} further splits the record +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. + +@item +Fields may be referenced using a variable, as in @samp{$NF}. Fields may also be +assigned values, which causes the value of @code{$0} to be recomputed when it is +later referenced. Assigning to a field with a number greater than @code{NF} +creates the field and rebuilds the record, using @code{OFS} to separate the fields. +Incrementing @code{NF} does the same thing. Decrementing @code{NF} throws away fields +and rebuilds the record. + +@item +Field splitting is more complicated than record splitting. + +@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{FIELDWIDTHS == @var{list of columns}} @tab Based on character position @tab @command{gawk} +@item @code{FPAT == @var{regexp}} @tab On text around text matching the regexp @tab @command{gawk} +@end multitable + +Using @samp{FS = "\n"} causes the entire record to be a single field (assuming +that newlines separate records). + +@item +@code{FS} may be set from the command line using the @option{-F} option. +This can also be done using command-line variable assignment. + +@item +@code{PROCINFO["FS"]} can be used to see how fields are being split. + +@item +Use @code{getline} in its varioius forms to read additional records, +from the default input stream, from a file, or from a pipe or co-process. + +@item +Use @code{PROCINFO[@var{file}, "READ_TIMEOUT"]} to cause reads to timeout +for @var{file}. + +@item +Directories on the command line are fatal for standard @command{awk}; +@command{gawk} ignores them if not in POSIX mode. + +@end itemize + @node Printing @chapter Printing Output @@ -8163,6 +8239,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. +* Output Summary:: Output summary. @end menu @node Print @@ -9552,6 +9629,38 @@ when closing a pipe. @c ENDOFRANGE ofc @c ENDOFRANGE pc @c ENDOFRANGE cc + +@node Output Summary +@section Summary + +@itemize @value{BULLET} +@item +The @code{print} statement prints comma-separated expressions. Each expression +is separated by the value of @code{OFS} and terminated by the value of @code{ORS}. +@code{OFMT} provides the conversion format 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. + +@item +Output from both @code{print} and @code{printf} may be redirected to files, +pipes, and co-processes. + +@item +@command{gawk} provides special file names for access to standard input, output +and error, and for network communications. + +@item +Use @code{close()} to close open file, pipe and co-process redirections. +For co-processes, it is possible to close only one direction of the +communications. + +@end itemize + + @c ENDOFRANGE prnt @node Expressions @@ -9578,6 +9687,7 @@ combinations of these with various operators. * Function Calls:: A function call is an expression. * Precedence:: How various operators nest. * Locales:: How the locale affects things. +* Expressions Summary:: Expressions summary. @end menu @node Values @@ -11834,6 +11944,71 @@ Finally, the locale affects the value of the decimal point character used when @command{gawk} parses input data. This is discussed in detail in @ref{Conversion}. +@node Expressions Summary +@section Summary + +@itemize @value{BULLET} +@item +Expressions are the basic elements of computation in programs. +They are built from constants, variables, function calls and combinations +of the various kinds of values with operators. + +@item +@command{awk} supplies three kinds of constants: numeric, string, and +regexp. @command{gawk} lets you specify numeric constants in octal +and hexadecimal (bases 8 and 16) in addition to decimal (base 10). +In certain contexts, a standalone regexp constant such as @code{/foo/} +has the same meaning as @samp{$0 ~ /foo/}. + +@item +Variables hold values between uses in computations. A number of built-in +variables provide information to your @command{awk} program, and a number +of others let you control how @command{awk} behaves. + +@item +Numbers are automatically converted to strings, and strings to numbers, +as needed by @command{awk}. Numeric values are converted as if they were +formatted with @code{sprintf()} using the format in @code{CONVFMT}. + +@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, 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 expressions. + +@item +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 +@emph{or} non-null. Otherwise, the value is false. + +@item +A value's type is set upon each assignment and may change over its 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 +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 later on in +this @value{DOCUMENT}. + +@item +Operator precedence specifies the order in which operations are +performed, unless explicitly overridden by parentheses. @command{awk}'s +operator precedence is compatible with that of C. + +@item +Locales can affect the format of data as output by an @command{awk} +program, and occasionally the format for data read as input. + +@end itemize + @c ENDOFRANGE exps @node Patterns and Actions @@ -11860,6 +12035,7 @@ building something useful. * Statements:: Describes the various control statements in detail. * Built-in Variables:: Summarizes the built-in variables. +* Pattern Action Summary:: Patterns and Actions summary. @end menu @node Pattern Overview @@ -14083,6 +14259,65 @@ are passed on to the @command{awk} program. (@xref{Getopt Function}, for an @command{awk} library function that parses command-line options.) +@node Pattern Action Summary +@section Summary + +@itemize @value{BULLET} +@item +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 +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. +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 +cause a fatal error (such as a file that cannot be opened). + +@item +Shell variables can be used in @command{awk} programs by careful +use of shell quoting. It is easier to pass a shell variable into +@command{awk} by using the @option{-v} option and an @command{awk} +variable. + +@item +Actions consist of statements enclosed in curly braces. Statements +are built up from expressions, control statements, compound statements, +input and output statements, and deletion statements. + +@item +The control statements in @command{awk} are @code{if}-@code{else}, +@code{while}, @code{for}, and @code{do}-@code{while}. @command{gawk} +adds the @code{switch} statement. There are two flavors of @code{for} +statement: one for for performing general looping, and the other iterating +through an array. + +@item +@code{break} and @code{continue} let you exit early or start the next +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 +start over, respectively. + +@item +The @code{exit} statement terminates your program. When executed +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 +at @command{awk}'s exit status. + +@item +Some built-in variables provide control over @command{awk}, mainly for I/O. +Other variables convey information from @command{awk} to your program. + +@end itemize + @node Arrays @chapter Arrays in @command{awk} @c STARTOFRANGE arrs -- cgit v1.2.3 From 969b704c66bac2508e7fa320a408448a819dda12 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 9 Jun 2014 22:09:35 +0300 Subject: Some docbook tweaks. --- doc/ChangeLog | 1 + doc/gawk.texi | 4 ++++ doc/gawktexi.in | 4 ++++ 3 files changed, 9 insertions(+) diff --git a/doc/ChangeLog b/doc/ChangeLog index c0a5f853..b5d12a57 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,6 +1,7 @@ 2014-06-09 Arnold D. Robbins * gawktexi.in: More "Summary" sections. + Judiciously arrange for full xrefs in docbook in a few spots. 2014-06-08 Arnold D. Robbins diff --git a/doc/gawk.texi b/doc/gawk.texi index 97d4ced9..8d6fbb12 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -22447,6 +22447,7 @@ the element. @c STARTOFRANGE awkpex @cindex @command{awk} programs, examples of +@c FULLXREF ON @ref{Library Functions}, presents the idea that reading programs in a language contributes to learning that language. This @value{CHAPTER} continues that theme, @@ -22456,6 +22457,7 @@ enjoyment. There are three sections. The first describes how to run the programs presented in this @value{CHAPTER}. +@c FULLXREF OFF The second presents @command{awk} versions of several common POSIX utilities. @@ -26036,6 +26038,7 @@ of TCP/IP networking. Finally, @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 own: @@ -26058,6 +26061,7 @@ debugger for debugging @command{awk} programs. discusses the ability to dynamically add new built-in functions to @command{gawk}. @end itemize +@c FULLXREF OFF @menu * Nondecimal Data:: Allowing nondecimal input data. diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 899f1e03..5f05b18a 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -21591,6 +21591,7 @@ the element. @c STARTOFRANGE awkpex @cindex @command{awk} programs, examples of +@c FULLXREF ON @ref{Library Functions}, presents the idea that reading programs in a language contributes to learning that language. This @value{CHAPTER} continues that theme, @@ -21600,6 +21601,7 @@ enjoyment. There are three sections. The first describes how to run the programs presented in this @value{CHAPTER}. +@c FULLXREF OFF The second presents @command{awk} versions of several common POSIX utilities. @@ -25180,6 +25182,7 @@ of TCP/IP networking. Finally, @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 own: @@ -25202,6 +25205,7 @@ debugger for debugging @command{awk} programs. discusses the ability to dynamically add new built-in functions to @command{gawk}. @end itemize +@c FULLXREF OFF @menu * Nondecimal Data:: Allowing nondecimal input data. -- cgit v1.2.3 From e52651945d6a0c66063aefa10438ba6aedf558c0 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 10 Jun 2014 23:27:58 +0300 Subject: Update docbook figure markup. --- doc/ChangeLog | 4 ++++ doc/gawk.texi | 36 ++++++++++++++++++++++++------------ doc/gawktexi.in | 36 ++++++++++++++++++++++++------------ 3 files changed, 52 insertions(+), 24 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index b5d12a57..026be8aa 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-06-10 Arnold D. Robbins + + * gawktexi.in: Update docbook figure markup. + 2014-06-09 Arnold D. Robbins * gawktexi.in: More "Summary" sections. diff --git a/doc/gawk.texi b/doc/gawk.texi index 8d6fbb12..badfe5ac 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -15105,9 +15105,11 @@ as shown in @inlineraw{docbook, }: @end ifnotdocbook @docbook -
+
A Contiguous Array - + + +
@end docbook @@ -30630,9 +30632,11 @@ This is shown in @inlineraw{docbook, }. @end ifnotdocbook @docbook -
+
Loading The Extension - + + +
@end docbook @@ -30660,9 +30664,11 @@ This is shown in @inlineraw{docbook, } @end ifnotdocbook @docbook -
+
Loading The New Function - + + +
@end docbook @@ -30691,9 +30697,11 @@ This is shown in @inlineraw{docbook, } @end ifnotdocbook @docbook -
+
Calling The New Function - + + +
@end docbook @@ -38588,9 +38596,11 @@ See @inlineraw{docbook, }. @end ifnotdocbook @docbook -
+
General Program Flow - + + +
@end docbook @@ -38629,9 +38639,11 @@ as shown in @inlineraw{docbook, }: @end ifnotdocbook @docbook -
+
Basic Program Stages - + + +
@end docbook diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 5f05b18a..b6c3c3b7 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -14439,9 +14439,11 @@ as shown in @inlineraw{docbook, }: @end ifnotdocbook @docbook -
+
A Contiguous Array - + + +
@end docbook @@ -29774,9 +29776,11 @@ This is shown in @inlineraw{docbook, }. @end ifnotdocbook @docbook -
+
Loading The Extension - + + +
@end docbook @@ -29804,9 +29808,11 @@ This is shown in @inlineraw{docbook, } @end ifnotdocbook @docbook -
+
Loading The New Function - + + +
@end docbook @@ -29835,9 +29841,11 @@ This is shown in @inlineraw{docbook, } @end ifnotdocbook @docbook -
+
Calling The New Function - + + +
@end docbook @@ -37732,9 +37740,11 @@ See @inlineraw{docbook, }. @end ifnotdocbook @docbook -
+
General Program Flow - + + +
@end docbook @@ -37773,9 +37783,11 @@ as shown in @inlineraw{docbook, }: @end ifnotdocbook @docbook -
+
Basic Program Stages - + + +
@end docbook -- cgit v1.2.3 From b6c937359a778e40a5d532c2a3aed8b21b89b3be Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 11 Jun 2014 20:28:49 +0300 Subject: More summaries. Through chapter 10. --- doc/ChangeLog | 4 + doc/gawk.info | 836 +++++++++++++++++++++++++++++++++----------------------- doc/gawk.texi | 173 +++++++++++- doc/gawktexi.in | 173 +++++++++++- 4 files changed, 838 insertions(+), 348 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 026be8aa..bb9d4f29 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-06-11 Arnold D. Robbins + + * gawktexi.in: More "Summary" sections. Through chapter 10. + 2014-06-10 Arnold D. Robbins * gawktexi.in: Update docbook figure markup. diff --git a/doc/gawk.info b/doc/gawk.info index 9d472b67..ff50955b 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -10522,6 +10522,7 @@ cannot have a variable and an array with the same name in the same * Multidimensional:: Emulating multidimensional arrays in `awk'. * Arrays of Arrays:: True multidimensional arrays. +* Arrays Summary:: Summary of arrays.  File: gawk.info, Node: Array Basics, Next: Delete, Up: Arrays @@ -11312,7 +11313,7 @@ The result is to set `separate[1]' to `"1"' and `separate[2]' to recovered.  -File: gawk.info, Node: Arrays of Arrays, Prev: Multidimensional, Up: Arrays +File: gawk.info, Node: Arrays of Arrays, Next: Arrays Summary, Prev: Multidimensional, Up: Arrays 8.6 Arrays of Arrays ==================== @@ -11433,6 +11434,54 @@ by creating an arbitrary index: $ gawk 'BEGIN { b[1][1] = ""; split("a b c d", b[1]); print b[1][1] }' -| a + +File: gawk.info, Node: Arrays Summary, Prev: Arrays of Arrays, Up: Arrays + +8.7 Summary +=========== + + * Standard `awk' provides one-dimensional associative arrays (arrays + indexed by string values). All arrays are associative; numeric + indices are converted automatically to strings. + + * Array elements are referenced as `ARRAY[INDX]'. Referencing an + element creates it if it did not exist previously. + + * The proper way to see if an array has an element with a given index + is to use the `in' operator: `INDX in ARRAY'. + + * Use `for (INDX in ARRAY) ...' to scan through all the individual + elements of an array. In the body of the loop, INDX takes on the + value of each element's index in turn. + + * The order in which a `for (INDX in ARRAY)' loop traverses an array + is undefined in POSIX `awk' and varies among implementations. + `gawk' lets you control the order by assigning special predefined + values to `PROCINFO["sorted_in"]'. + + * Use `delete ARRAY[INDX]' to delete an individual element. You may + also use `delete ARRAY' to delete all of the elements in the + array. This latter feature has been a common extension for many + years and is now standard, but may not be supported by all + commercial versions of `awk'. + + * Standard `awk' simulates multidimensional arrays by separating + subscript values with a comma. 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 + changing `SUBSEP' may have unexpected consequences. You can use + `(SUB1, SUB2, ...) in ARRAY' to see if such a multidimensional + subscript exists in ARRAY. + + * `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. + + * Use the `isarray()' built-in function to determine if an array + element is itself a subarray. + +  File: gawk.info, Node: Functions, Next: Library Functions, Prev: Arrays, Up: Top @@ -11453,6 +11502,7 @@ major node describes these "user-defined" functions. * Built-in:: Summarizes the built-in functions. * User-defined:: Describes User-defined functions in detail. * Indirect Calls:: Choosing the function to call at runtime. +* Functions Summary:: Summary of functions.  File: gawk.info, Node: Built-in, Next: User-defined, Up: Functions @@ -13652,7 +13702,7 @@ call, though, then `awk' does report the second error. of them.  -File: gawk.info, Node: Indirect Calls, Prev: User-defined, Up: Functions +File: gawk.info, Node: Indirect Calls, Next: Functions Summary, Prev: User-defined, Up: Functions 9.3 Indirect Function Calls =========================== @@ -13939,6 +13989,63 @@ example, in the following case: `gawk' will look up the actual function to call only once. + +File: gawk.info, Node: Functions Summary, Prev: Indirect Calls, Up: Functions + +9.4 Summary +=========== + + * `awk' provides built-in functions and lets you define your own + functions. + + * POSIX `awk' provides three kinds of built-in functions: numeric, + string, and I/O. `gawk' provides functions that work with values + representing time, do bit manipulation, sort arrays, and + internationalize and localize programs. `gawk' also provides + several extensions to some of standard functions, typically in the + form of additional arguments. + + * Functions accept zero or more arguments and return a value. The + expressions that provide the argument values are comnpletely + evaluated before the function is called. Order of evaluation is + not defined. The return value can be ignored. + + * The handling of backslash in `sub()' and `gsub()' is not simple. + It is more straightforward in `gawk''s `gensub()' function, but + that function still requires care in its use. + + * User-defined functions provide important capabilities but come + with some syntactic inelegancies. In a function call, there cannot + be any space between the function name and the opening left + parethesis of the argument list. Also, there is no provision for + local variables, so the convention is to add extra parameters, and + to separate them visually from the real parameters by extra + whitespace. + + * User-defined functions may call other user-defined (and built-in) + functions and may call themselves recursively. Function parameters + "hide" any global variables of the same names. + + * Scalar values are passed to user-defined functions by value. Array + parameters are passed by reference; any changes made by the + function to array parameters are thus visible after the function + has returned. + + * Use the `return' statement to return from a user-defined function. + An optional expression becomes the function's return value. Only + scalar values may be returned by a function. + + * If a variable that has never been used is passed to a user-defined + function, how that function treats the variable can set its + nature: either scalar or array. + + * `gawk' provides indirect function calls using a special syntax. + By setting a variable to the name of a user-defined function, you + can determine at runtime what function will be called at that + point in the program. This is equivalent to function pointers in C + and C++. + +  File: gawk.info, Node: Library Functions, Next: Sample Programs, Prev: Functions, Up: Top @@ -14015,6 +14122,7 @@ for different implementations of `awk' is pretty straightforward. * Passwd Functions:: Functions for getting user information. * Group Functions:: Functions for getting group information. * Walking Arrays:: A function to walk arrays of arrays. +* Library Functions Summary:: Summary of library functions. ---------- Footnotes ---------- @@ -14912,8 +15020,8 @@ intervening value in `ARGV' is a variable assignment.  File: gawk.info, Node: Ignoring Assigns, Prev: Empty Files, Up: Data File Management -10.3.5 Treating Assignments as File Name ----------------------------------------- +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 @@ -15727,7 +15835,7 @@ 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, Prev: Group Functions, Up: Library Functions +File: gawk.info, Node: Walking Arrays, Next: Library Functions Summary, Prev: Group Functions, Up: Library Functions 10.7 Traversing Arrays of Arrays ================================ @@ -15789,6 +15897,43 @@ Calls::) on `process', passing it the index and the value. user-defined function that expects to receive an index and a value, and then processes the element. + +File: gawk.info, Node: Library Functions Summary, Prev: Walking Arrays, Up: Library Functions + +10.8 Summary +============ + + * Reading programs is an excellent way to learn Good Programming. + The functions provided in this major node and the next are intended + to serve that purpose. + + * When writing general-purpose library functions, put some thought + into how to name any global variables so that they won't conflict + with variables from a user's program. + + * 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. + + 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. + + Processing command-line options + 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. + + Traversing arrays of arrays + A simple function to traverse an array of arrays to any depth. + +  File: gawk.info, Node: Sample Programs, Next: Advanced Features, Prev: Library Functions, Up: Top @@ -19868,8 +20013,8 @@ File: gawk.info, Node: Gawk I18N, Prev: I18N Example, Up: Internationalizatio `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 -(ftp://ftp.gnu.org/gnu/gettext/gettext-0.19.tar.gz). +writing, the latest version of GNU `gettext' is version 0.19.1 +(ftp://ftp.gnu.org/gnu/gettext/gettext-0.19.1.tar.gz). If a translation of `gawk''s messages exists, then `gawk' produces usage messages, warnings, and fatal errors in the local language. @@ -33737,342 +33882,345 @@ Ref: Auto-set-Footnote-2441927 Node: ARGC and ARGV441983 Node: Pattern Action Summary445822 Node: Arrays448045 -Node: Array Basics449543 -Node: Array Intro450369 -Ref: figure-array-elements452342 -Node: Reference to Elements454749 -Node: Assigning Elements457022 -Node: Array Example457513 -Node: Scanning an Array459245 -Node: Controlling Scanning462260 -Ref: Controlling Scanning-Footnote-1467433 -Node: Delete467749 -Ref: Delete-Footnote-1470514 -Node: Numeric Array Subscripts470571 -Node: Uninitialized Subscripts472754 -Node: Multidimensional474379 -Node: Multiscanning477472 -Node: Arrays of Arrays479061 -Node: Functions483701 -Node: Built-in484520 -Node: Calling Built-in485598 -Node: Numeric Functions487586 -Ref: Numeric Functions-Footnote-1491420 -Ref: Numeric Functions-Footnote-2491777 -Ref: Numeric Functions-Footnote-3491825 -Node: String Functions492094 -Ref: String Functions-Footnote-1515105 -Ref: String Functions-Footnote-2515234 -Ref: String Functions-Footnote-3515482 -Node: Gory Details515569 -Ref: table-sub-escapes517238 -Ref: table-sub-posix-92518592 -Ref: table-sub-proposed519943 -Ref: table-posix-sub521297 -Ref: table-gensub-escapes522842 -Ref: Gory Details-Footnote-1524018 -Ref: Gory Details-Footnote-2524069 -Node: I/O Functions524220 -Ref: I/O Functions-Footnote-1531343 -Node: Time Functions531490 -Ref: Time Functions-Footnote-1541954 -Ref: Time Functions-Footnote-2542022 -Ref: Time Functions-Footnote-3542180 -Ref: Time Functions-Footnote-4542291 -Ref: Time Functions-Footnote-5542403 -Ref: Time Functions-Footnote-6542630 -Node: Bitwise Functions542896 -Ref: table-bitwise-ops543458 -Ref: Bitwise Functions-Footnote-1547703 -Node: Type Functions547887 -Node: I18N Functions549029 -Node: User-defined550674 -Node: Definition Syntax551478 -Ref: Definition Syntax-Footnote-1556403 -Node: Function Example556472 -Ref: Function Example-Footnote-1559116 -Node: Function Caveats559138 -Node: Calling A Function559656 -Node: Variable Scope560611 -Node: Pass By Value/Reference563599 -Node: Return Statement567107 -Node: Dynamic Typing570091 -Node: Indirect Calls571020 -Node: Library Functions580707 -Ref: Library Functions-Footnote-1584220 -Ref: Library Functions-Footnote-2584363 -Node: Library Names584534 -Ref: Library Names-Footnote-1588007 -Ref: Library Names-Footnote-2588227 -Node: General Functions588313 -Node: Strtonum Function589341 -Node: Assert Function592271 -Node: Round Function595597 -Node: Cliff Random Function597138 -Node: Ordinal Functions598154 -Ref: Ordinal Functions-Footnote-1601231 -Ref: Ordinal Functions-Footnote-2601483 -Node: Join Function601694 -Ref: Join Function-Footnote-1603465 -Node: Getlocaltime Function603665 -Node: Readfile Function607401 -Node: Data File Management609240 -Node: Filetrans Function609872 -Node: Rewind Function613927 -Node: File Checking615314 -Ref: File Checking-Footnote-1616446 -Node: Empty Files616647 -Node: Ignoring Assigns618870 -Node: Getopt Function620401 -Ref: Getopt Function-Footnote-1631697 -Node: Passwd Functions631900 -Ref: Passwd Functions-Footnote-1640879 -Node: Group Functions640967 -Ref: Group Functions-Footnote-1648909 -Node: Walking Arrays649122 -Node: Sample Programs651258 -Node: Running Examples651932 -Node: Clones652660 -Node: Cut Program653884 -Node: Egrep Program663745 -Ref: Egrep Program-Footnote-1671674 -Node: Id Program671784 -Node: Split Program675448 -Ref: Split Program-Footnote-1678979 -Node: Tee Program679107 -Node: Uniq Program681914 -Node: Wc Program689344 -Ref: Wc Program-Footnote-1693612 -Ref: Wc Program-Footnote-2693812 -Node: Miscellaneous Programs693904 -Node: Dupword Program695092 -Node: Alarm Program697123 -Node: Translate Program701937 -Ref: Translate Program-Footnote-1706328 -Ref: Translate Program-Footnote-2706598 -Node: Labels Program706732 -Ref: Labels Program-Footnote-1710103 -Node: Word Sorting710187 -Node: History Sorting714230 -Node: Extract Program716066 -Ref: Extract Program-Footnote-1723641 -Node: Simple Sed723770 -Node: Igawk Program726832 -Ref: Igawk Program-Footnote-1742008 -Ref: Igawk Program-Footnote-2742209 -Node: Anagram Program742347 -Node: Signature Program745415 -Node: Advanced Features746662 -Node: Nondecimal Data748548 -Node: Array Sorting750125 -Node: Controlling Array Traversal750822 -Node: Array Sorting Functions759102 -Ref: Array Sorting Functions-Footnote-1763009 -Node: Two-way I/O763203 -Ref: Two-way I/O-Footnote-1768719 -Node: TCP/IP Networking768801 -Node: Profiling771645 -Node: Internationalization779153 -Node: I18N and L10N780578 -Node: Explaining gettext781264 -Ref: Explaining gettext-Footnote-1786404 -Ref: Explaining gettext-Footnote-2786588 -Node: Programmer i18n786753 -Node: Translator i18n790978 -Node: String Extraction791772 -Ref: String Extraction-Footnote-1792733 -Node: Printf Ordering792819 -Ref: Printf Ordering-Footnote-1795601 -Node: I18N Portability795665 -Ref: I18N Portability-Footnote-1798114 -Node: I18N Example798177 -Ref: I18N Example-Footnote-1800899 -Node: Gawk I18N800971 -Node: Debugger801584 -Node: Debugging802555 -Node: Debugging Concepts802996 -Node: Debugging Terms804852 -Node: Awk Debugging807449 -Node: Sample Debugging Session808341 -Node: Debugger Invocation808861 -Node: Finding The Bug810194 -Node: List of Debugger Commands816676 -Node: Breakpoint Control818008 -Node: Debugger Execution Control821672 -Node: Viewing And Changing Data825032 -Node: Execution Stack828390 -Node: Debugger Info829903 -Node: Miscellaneous Debugger Commands833897 -Node: Readline Support839081 -Node: Limitations839973 -Node: Arbitrary Precision Arithmetic842221 -Ref: Arbitrary Precision Arithmetic-Footnote-1843870 -Node: General Arithmetic844018 -Node: Floating Point Issues845738 -Node: String Conversion Precision846619 -Ref: String Conversion Precision-Footnote-1848324 -Node: Unexpected Results848433 -Node: POSIX Floating Point Problems850586 -Ref: POSIX Floating Point Problems-Footnote-1854407 -Node: Integer Programming854445 -Node: Floating-point Programming856256 -Ref: Floating-point Programming-Footnote-1862584 -Ref: Floating-point Programming-Footnote-2862854 -Node: Floating-point Representation863118 -Node: Floating-point Context864283 -Ref: table-ieee-formats865122 -Node: Rounding Mode866506 -Ref: table-rounding-modes866985 -Ref: Rounding Mode-Footnote-1870000 -Node: Gawk and MPFR870179 -Node: Arbitrary Precision Floats871588 -Ref: Arbitrary Precision Floats-Footnote-1874031 -Node: Setting Precision874352 -Ref: table-predefined-precision-strings875036 -Node: Setting Rounding Mode877181 -Ref: table-gawk-rounding-modes877585 -Node: Floating-point Constants878772 -Node: Changing Precision880224 -Ref: Changing Precision-Footnote-1881616 -Node: Exact Arithmetic881790 -Node: Arbitrary Precision Integers884924 -Ref: Arbitrary Precision Integers-Footnote-1887939 -Node: Dynamic Extensions888086 -Node: Extension Intro889544 -Node: Plugin License890809 -Node: Extension Mechanism Outline891494 -Ref: figure-load-extension891918 -Ref: figure-load-new-function893403 -Ref: figure-call-new-function894405 -Node: Extension API Description896389 -Node: Extension API Functions Introduction897839 -Node: General Data Types902705 -Ref: General Data Types-Footnote-1908398 -Node: Requesting Values908697 -Ref: table-value-types-returned909434 -Node: Memory Allocation Functions910392 -Ref: Memory Allocation Functions-Footnote-1913139 -Node: Constructor Functions913235 -Node: Registration Functions914993 -Node: Extension Functions915678 -Node: Exit Callback Functions917980 -Node: Extension Version String919230 -Node: Input Parsers919880 -Node: Output Wrappers929683 -Node: Two-way processors934199 -Node: Printing Messages936403 -Ref: Printing Messages-Footnote-1937480 -Node: Updating `ERRNO'937632 -Node: Accessing Parameters938371 -Node: Symbol Table Access939601 -Node: Symbol table by name940115 -Node: Symbol table by cookie942091 -Ref: Symbol table by cookie-Footnote-1946224 -Node: Cached values946287 -Ref: Cached values-Footnote-1949792 -Node: Array Manipulation949883 -Ref: Array Manipulation-Footnote-1950981 -Node: Array Data Types951020 -Ref: Array Data Types-Footnote-1953723 -Node: Array Functions953815 -Node: Flattening Arrays957689 -Node: Creating Arrays964541 -Node: Extension API Variables969272 -Node: Extension Versioning969908 -Node: Extension API Informational Variables971809 -Node: Extension API Boilerplate972895 -Node: Finding Extensions976699 -Node: Extension Example977259 -Node: Internal File Description977989 -Node: Internal File Ops982080 -Ref: Internal File Ops-Footnote-1993626 -Node: Using Internal File Ops993766 -Ref: Using Internal File Ops-Footnote-1996113 -Node: Extension Samples996381 -Node: Extension Sample File Functions997905 -Node: Extension Sample Fnmatch1005473 -Node: Extension Sample Fork1006940 -Node: Extension Sample Inplace1008153 -Node: Extension Sample Ord1009919 -Node: Extension Sample Readdir1010755 -Ref: table-readdir-file-types1011604 -Node: Extension Sample Revout1012403 -Node: Extension Sample Rev2way1012994 -Node: Extension Sample Read write array1013735 -Node: Extension Sample Readfile1015614 -Node: Extension Sample API Tests1016714 -Node: Extension Sample Time1017239 -Node: gawkextlib1018554 -Node: Language History1021341 -Node: V7/SVR3.11022935 -Node: SVR41025255 -Node: POSIX1026697 -Node: BTL1028083 -Node: POSIX/GNU1028817 -Node: Feature History1034416 -Node: Common Extensions1047528 -Node: Ranges and Locales1048840 -Ref: Ranges and Locales-Footnote-11053457 -Ref: Ranges and Locales-Footnote-21053484 -Ref: Ranges and Locales-Footnote-31053718 -Node: Contributors1053939 -Node: Installation1059377 -Node: Gawk Distribution1060271 -Node: Getting1060755 -Node: Extracting1061581 -Node: Distribution contents1063223 -Node: Unix Installation1068940 -Node: Quick Installation1069557 -Node: Additional Configuration Options1071999 -Node: Configuration Philosophy1073737 -Node: Non-Unix Installation1076088 -Node: PC Installation1076546 -Node: PC Binary Installation1077857 -Node: PC Compiling1079705 -Ref: PC Compiling-Footnote-11082704 -Node: PC Testing1082809 -Node: PC Using1083985 -Node: Cygwin1088143 -Node: MSYS1088952 -Node: VMS Installation1089466 -Node: VMS Compilation1090262 -Ref: VMS Compilation-Footnote-11091477 -Node: VMS Dynamic Extensions1091535 -Node: VMS Installation Details1092908 -Node: VMS Running1095154 -Node: VMS GNV1097988 -Node: VMS Old Gawk1098711 -Node: Bugs1099181 -Node: Other Versions1103185 -Node: Notes1109410 -Node: Compatibility Mode1110210 -Node: Additions1110992 -Node: Accessing The Source1111917 -Node: Adding Code1113353 -Node: New Ports1119531 -Node: Derived Files1124012 -Ref: Derived Files-Footnote-11129093 -Ref: Derived Files-Footnote-21129127 -Ref: Derived Files-Footnote-31129723 -Node: Future Extensions1129837 -Node: Implementation Limitations1130443 -Node: Extension Design1131691 -Node: Old Extension Problems1132845 -Ref: Old Extension Problems-Footnote-11134362 -Node: Extension New Mechanism Goals1134419 -Ref: Extension New Mechanism Goals-Footnote-11137780 -Node: Extension Other Design Decisions1137969 -Node: Extension Future Growth1140075 -Node: Old Extension Mechanism1140911 -Node: Basic Concepts1142651 -Node: Basic High Level1143332 -Ref: figure-general-flow1143604 -Ref: figure-process-flow1144203 -Ref: Basic High Level-Footnote-11147432 -Node: Basic Data Typing1147617 -Node: Glossary1150944 -Node: Copying1176096 -Node: GNU Free Documentation License1213652 -Node: Index1238788 +Node: Array Basics449594 +Node: Array Intro450420 +Ref: figure-array-elements452393 +Node: Reference to Elements454800 +Node: Assigning Elements457073 +Node: Array Example457564 +Node: Scanning an Array459296 +Node: Controlling Scanning462311 +Ref: Controlling Scanning-Footnote-1467484 +Node: Delete467800 +Ref: Delete-Footnote-1470565 +Node: Numeric Array Subscripts470622 +Node: Uninitialized Subscripts472805 +Node: Multidimensional474430 +Node: Multiscanning477523 +Node: Arrays of Arrays479112 +Node: Arrays Summary483775 +Node: Functions485880 +Node: Built-in486753 +Node: Calling Built-in487831 +Node: Numeric Functions489819 +Ref: Numeric Functions-Footnote-1493653 +Ref: Numeric Functions-Footnote-2494010 +Ref: Numeric Functions-Footnote-3494058 +Node: String Functions494327 +Ref: String Functions-Footnote-1517338 +Ref: String Functions-Footnote-2517467 +Ref: String Functions-Footnote-3517715 +Node: Gory Details517802 +Ref: table-sub-escapes519471 +Ref: table-sub-posix-92520825 +Ref: table-sub-proposed522176 +Ref: table-posix-sub523530 +Ref: table-gensub-escapes525075 +Ref: Gory Details-Footnote-1526251 +Ref: Gory Details-Footnote-2526302 +Node: I/O Functions526453 +Ref: I/O Functions-Footnote-1533576 +Node: Time Functions533723 +Ref: Time Functions-Footnote-1544187 +Ref: Time Functions-Footnote-2544255 +Ref: Time Functions-Footnote-3544413 +Ref: Time Functions-Footnote-4544524 +Ref: Time Functions-Footnote-5544636 +Ref: Time Functions-Footnote-6544863 +Node: Bitwise Functions545129 +Ref: table-bitwise-ops545691 +Ref: Bitwise Functions-Footnote-1549936 +Node: Type Functions550120 +Node: I18N Functions551262 +Node: User-defined552907 +Node: Definition Syntax553711 +Ref: Definition Syntax-Footnote-1558636 +Node: Function Example558705 +Ref: Function Example-Footnote-1561349 +Node: Function Caveats561371 +Node: Calling A Function561889 +Node: Variable Scope562844 +Node: Pass By Value/Reference565832 +Node: Return Statement569340 +Node: Dynamic Typing572324 +Node: Indirect Calls573253 +Node: Functions Summary582966 +Node: Library Functions585505 +Ref: Library Functions-Footnote-1589080 +Ref: Library Functions-Footnote-2589223 +Node: Library Names589394 +Ref: Library Names-Footnote-1592867 +Ref: Library Names-Footnote-2593087 +Node: General Functions593173 +Node: Strtonum Function594201 +Node: Assert Function597131 +Node: Round Function600457 +Node: Cliff Random Function601998 +Node: Ordinal Functions603014 +Ref: Ordinal Functions-Footnote-1606091 +Ref: Ordinal Functions-Footnote-2606343 +Node: Join Function606554 +Ref: Join Function-Footnote-1608325 +Node: Getlocaltime Function608525 +Node: Readfile Function612261 +Node: Data File Management614100 +Node: Filetrans Function614732 +Node: Rewind Function618787 +Node: File Checking620174 +Ref: File Checking-Footnote-1621306 +Node: Empty Files621507 +Node: Ignoring Assigns623730 +Node: Getopt Function625263 +Ref: Getopt Function-Footnote-1636559 +Node: Passwd Functions636762 +Ref: Passwd Functions-Footnote-1645741 +Node: Group Functions645829 +Ref: Group Functions-Footnote-1653771 +Node: Walking Arrays653984 +Node: Library Functions Summary656154 +Node: Sample Programs657516 +Node: Running Examples658190 +Node: Clones658918 +Node: Cut Program660142 +Node: Egrep Program670003 +Ref: Egrep Program-Footnote-1677932 +Node: Id Program678042 +Node: Split Program681706 +Ref: Split Program-Footnote-1685237 +Node: Tee Program685365 +Node: Uniq Program688172 +Node: Wc Program695602 +Ref: Wc Program-Footnote-1699870 +Ref: Wc Program-Footnote-2700070 +Node: Miscellaneous Programs700162 +Node: Dupword Program701350 +Node: Alarm Program703381 +Node: Translate Program708195 +Ref: Translate Program-Footnote-1712586 +Ref: Translate Program-Footnote-2712856 +Node: Labels Program712990 +Ref: Labels Program-Footnote-1716361 +Node: Word Sorting716445 +Node: History Sorting720488 +Node: Extract Program722324 +Ref: Extract Program-Footnote-1729899 +Node: Simple Sed730028 +Node: Igawk Program733090 +Ref: Igawk Program-Footnote-1748266 +Ref: Igawk Program-Footnote-2748467 +Node: Anagram Program748605 +Node: Signature Program751673 +Node: Advanced Features752920 +Node: Nondecimal Data754806 +Node: Array Sorting756383 +Node: Controlling Array Traversal757080 +Node: Array Sorting Functions765360 +Ref: Array Sorting Functions-Footnote-1769267 +Node: Two-way I/O769461 +Ref: Two-way I/O-Footnote-1774977 +Node: TCP/IP Networking775059 +Node: Profiling777903 +Node: Internationalization785411 +Node: I18N and L10N786836 +Node: Explaining gettext787522 +Ref: Explaining gettext-Footnote-1792662 +Ref: Explaining gettext-Footnote-2792846 +Node: Programmer i18n793011 +Node: Translator i18n797236 +Node: String Extraction798030 +Ref: String Extraction-Footnote-1798991 +Node: Printf Ordering799077 +Ref: Printf Ordering-Footnote-1801859 +Node: I18N Portability801923 +Ref: I18N Portability-Footnote-1804372 +Node: I18N Example804435 +Ref: I18N Example-Footnote-1807157 +Node: Gawk I18N807229 +Node: Debugger807846 +Node: Debugging808817 +Node: Debugging Concepts809258 +Node: Debugging Terms811114 +Node: Awk Debugging813711 +Node: Sample Debugging Session814603 +Node: Debugger Invocation815123 +Node: Finding The Bug816456 +Node: List of Debugger Commands822938 +Node: Breakpoint Control824270 +Node: Debugger Execution Control827934 +Node: Viewing And Changing Data831294 +Node: Execution Stack834652 +Node: Debugger Info836165 +Node: Miscellaneous Debugger Commands840159 +Node: Readline Support845343 +Node: Limitations846235 +Node: Arbitrary Precision Arithmetic848483 +Ref: Arbitrary Precision Arithmetic-Footnote-1850132 +Node: General Arithmetic850280 +Node: Floating Point Issues852000 +Node: String Conversion Precision852881 +Ref: String Conversion Precision-Footnote-1854586 +Node: Unexpected Results854695 +Node: POSIX Floating Point Problems856848 +Ref: POSIX Floating Point Problems-Footnote-1860669 +Node: Integer Programming860707 +Node: Floating-point Programming862518 +Ref: Floating-point Programming-Footnote-1868846 +Ref: Floating-point Programming-Footnote-2869116 +Node: Floating-point Representation869380 +Node: Floating-point Context870545 +Ref: table-ieee-formats871384 +Node: Rounding Mode872768 +Ref: table-rounding-modes873247 +Ref: Rounding Mode-Footnote-1876262 +Node: Gawk and MPFR876441 +Node: Arbitrary Precision Floats877850 +Ref: Arbitrary Precision Floats-Footnote-1880293 +Node: Setting Precision880614 +Ref: table-predefined-precision-strings881298 +Node: Setting Rounding Mode883443 +Ref: table-gawk-rounding-modes883847 +Node: Floating-point Constants885034 +Node: Changing Precision886486 +Ref: Changing Precision-Footnote-1887878 +Node: Exact Arithmetic888052 +Node: Arbitrary Precision Integers891186 +Ref: Arbitrary Precision Integers-Footnote-1894201 +Node: Dynamic Extensions894348 +Node: Extension Intro895806 +Node: Plugin License897071 +Node: Extension Mechanism Outline897756 +Ref: figure-load-extension898180 +Ref: figure-load-new-function899665 +Ref: figure-call-new-function900667 +Node: Extension API Description902651 +Node: Extension API Functions Introduction904101 +Node: General Data Types908967 +Ref: General Data Types-Footnote-1914660 +Node: Requesting Values914959 +Ref: table-value-types-returned915696 +Node: Memory Allocation Functions916654 +Ref: Memory Allocation Functions-Footnote-1919401 +Node: Constructor Functions919497 +Node: Registration Functions921255 +Node: Extension Functions921940 +Node: Exit Callback Functions924242 +Node: Extension Version String925492 +Node: Input Parsers926142 +Node: Output Wrappers935945 +Node: Two-way processors940461 +Node: Printing Messages942665 +Ref: Printing Messages-Footnote-1943742 +Node: Updating `ERRNO'943894 +Node: Accessing Parameters944633 +Node: Symbol Table Access945863 +Node: Symbol table by name946377 +Node: Symbol table by cookie948353 +Ref: Symbol table by cookie-Footnote-1952486 +Node: Cached values952549 +Ref: Cached values-Footnote-1956054 +Node: Array Manipulation956145 +Ref: Array Manipulation-Footnote-1957243 +Node: Array Data Types957282 +Ref: Array Data Types-Footnote-1959985 +Node: Array Functions960077 +Node: Flattening Arrays963951 +Node: Creating Arrays970803 +Node: Extension API Variables975534 +Node: Extension Versioning976170 +Node: Extension API Informational Variables978071 +Node: Extension API Boilerplate979157 +Node: Finding Extensions982961 +Node: Extension Example983521 +Node: Internal File Description984251 +Node: Internal File Ops988342 +Ref: Internal File Ops-Footnote-1999888 +Node: Using Internal File Ops1000028 +Ref: Using Internal File Ops-Footnote-11002375 +Node: Extension Samples1002643 +Node: Extension Sample File Functions1004167 +Node: Extension Sample Fnmatch1011735 +Node: Extension Sample Fork1013202 +Node: Extension Sample Inplace1014415 +Node: Extension Sample Ord1016181 +Node: Extension Sample Readdir1017017 +Ref: table-readdir-file-types1017866 +Node: Extension Sample Revout1018665 +Node: Extension Sample Rev2way1019256 +Node: Extension Sample Read write array1019997 +Node: Extension Sample Readfile1021876 +Node: Extension Sample API Tests1022976 +Node: Extension Sample Time1023501 +Node: gawkextlib1024816 +Node: Language History1027603 +Node: V7/SVR3.11029197 +Node: SVR41031517 +Node: POSIX1032959 +Node: BTL1034345 +Node: POSIX/GNU1035079 +Node: Feature History1040678 +Node: Common Extensions1053790 +Node: Ranges and Locales1055102 +Ref: Ranges and Locales-Footnote-11059719 +Ref: Ranges and Locales-Footnote-21059746 +Ref: Ranges and Locales-Footnote-31059980 +Node: Contributors1060201 +Node: Installation1065639 +Node: Gawk Distribution1066533 +Node: Getting1067017 +Node: Extracting1067843 +Node: Distribution contents1069485 +Node: Unix Installation1075202 +Node: Quick Installation1075819 +Node: Additional Configuration Options1078261 +Node: Configuration Philosophy1079999 +Node: Non-Unix Installation1082350 +Node: PC Installation1082808 +Node: PC Binary Installation1084119 +Node: PC Compiling1085967 +Ref: PC Compiling-Footnote-11088966 +Node: PC Testing1089071 +Node: PC Using1090247 +Node: Cygwin1094405 +Node: MSYS1095214 +Node: VMS Installation1095728 +Node: VMS Compilation1096524 +Ref: VMS Compilation-Footnote-11097739 +Node: VMS Dynamic Extensions1097797 +Node: VMS Installation Details1099170 +Node: VMS Running1101416 +Node: VMS GNV1104250 +Node: VMS Old Gawk1104973 +Node: Bugs1105443 +Node: Other Versions1109447 +Node: Notes1115672 +Node: Compatibility Mode1116472 +Node: Additions1117254 +Node: Accessing The Source1118179 +Node: Adding Code1119615 +Node: New Ports1125793 +Node: Derived Files1130274 +Ref: Derived Files-Footnote-11135355 +Ref: Derived Files-Footnote-21135389 +Ref: Derived Files-Footnote-31135985 +Node: Future Extensions1136099 +Node: Implementation Limitations1136705 +Node: Extension Design1137953 +Node: Old Extension Problems1139107 +Ref: Old Extension Problems-Footnote-11140624 +Node: Extension New Mechanism Goals1140681 +Ref: Extension New Mechanism Goals-Footnote-11144042 +Node: Extension Other Design Decisions1144231 +Node: Extension Future Growth1146337 +Node: Old Extension Mechanism1147173 +Node: Basic Concepts1148913 +Node: Basic High Level1149594 +Ref: figure-general-flow1149866 +Ref: figure-process-flow1150465 +Ref: Basic High Level-Footnote-11153694 +Node: Basic Data Typing1153879 +Node: Glossary1157206 +Node: Copying1182358 +Node: GNU Free Documentation License1219914 +Node: Index1245050  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index badfe5ac..c4e17b2b 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -15023,6 +15023,7 @@ same @command{awk} program. * Multidimensional:: Emulating multidimensional arrays in @command{awk}. * Arrays of Arrays:: True multidimensional arrays. +* Arrays Summary:: Summary of arrays. @end menu @node Array Basics @@ -16305,6 +16306,64 @@ creating an arbitrary index: $ @kbd{gawk 'BEGIN @{ b[1][1] = ""; split("a b c d", b[1]); print b[1][1] @}'} @print{} a @end example + +@node Arrays Summary +@section Summary + +@itemize @value{BULLET} +@item +Standard @command{awk} provides one-dimensional associative arrays (arrays +indexed by string values). All arrays are associative; numeric indices +are converted automatically to strings. + +@item +Array elements are referenced as @code{@var{array}[@var{indx}]}. +Referencing an element creates it if it did not exist previously. + +@item +The proper way to see if an array has an element with a given index +is to use the @code{in} operator: @samp{@var{indx} in @var{array}}. + +@item +Use @samp{for (@var{indx} in @var{array}) @dots{}} to scan through all the +individual elements of an array. In the body of the loop, @var{indx} takes +on the value of each element's index in turn. + +@item +The order in which a +@samp{for (@var{indx} in @var{array})} loop traverses an array is +undefined in POSIX @command{awk} and varies among implementations. +@command{gawk} lets you control the order by assigning special predefined +values to @code{PROCINFO["sorted_in"]}. + +@item +Use @samp{delete @var{array}[@var{indx}]} to delete an +individual element. You may also use @samp{delete @var{array}} +to delete all of the elements in the array. This latter feature +has been a common extension for many years and is now standard, but +may not be supported by all commercial versions of @command{awk}. + +@item +Standard @command{awk} simulates multidimensional arrays by separating +subscript values with a comma. 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 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}. + +@item +@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. + +@item +Use the @code{isarray()} built-in function to determine if an +array element is itself a subarray. + +@end itemize + @c ENDOFRANGE arrs @node Functions @@ -16329,6 +16388,7 @@ The second half of this @value{CHAPTER} describes these * Built-in:: Summarizes the built-in functions. * User-defined:: Describes User-defined functions in detail. * Indirect Calls:: Choosing the function to call at runtime. +* Functions Summary:: Summary of functions. @end menu @node Built-in @@ -19887,6 +19947,68 @@ for (i = 1; i <= n; i++) @noindent @code{gawk} will look up the actual function to call only once. +@node Functions Summary +@section Summary + +@itemize @value{BULLET} +@item +@command{awk} provides built-in functions and lets you define your own +functions. + +@item +POSIX @command{awk} provides three kinds of built-in functions: numeric, string, +and I/O. @command{gawk} provides functions that work with values +representing time, do bit manipulation, sort arrays, and internationalize +and localize programs. +@command{gawk} also provides several extensions to some of standard functions, +typically in the form of additional arguments. + +@item +Functions accept zero or more arguments and return a value. +The expressions that provide the argument values are comnpletely evaluated +before the function is called. Order of evaluation is not defined. +The return value can be ignored. + +@item +The handling of backslash in @code{sub()} and @code{gsub()} is +not simple. It is more straightforward in @command{gawk}'s @code{gensub()} +function, but that function still requires care in its use. + +@item +User-defined functions provide important capabilities but come with some +syntactic inelegancies. In a function call, there cannot be any space +between the function name and the opening left parethesis of the argument +list. Also, there is no provision for local variables, so the convention +is to add extra parameters, and to separate them visually from the real +parameters by extra whitespace. + +@item +User-defined functions may call other user-defined (and built-in) functions +and may call themselves recursively. Function parameters ``hide'' any global +variables of the same names. + +@item +Scalar values are passed to user-defined functions by value. Array parameters +are passed by reference; any changes made by the function to array parameters +are thus visible after the function has returned. + +@item +Use the @code{return} statement to return from a user-defined function. +An optional expression becomes the function's return value. +Only scalar values may be returned by a function. + +@item +If a variable that has never been used is passed to a user-defined function, +how that function treats the variable can set its nature: either scalar or array. + +@item +@command{gawk} provides indirect function calls using a special syntax. +By setting a variable to the name of a user-defined function, you can +determine at runtime what function will be called at that point in the +program. This is equivalent to function pointers in C and C++. + +@end itemize + @c ENDOFRANGE funcud @ifnotinfo @@ -20012,6 +20134,7 @@ comparisons use only lowercase letters. * Passwd Functions:: Functions for getting user information. * Group Functions:: Functions for getting group information. * Walking Arrays:: A function to walk arrays of arrays. +* Library Functions Summary:: Summary of library functions. @end menu @node Library Names @@ -21215,7 +21338,7 @@ END @{ @end ignore @node Ignoring Assigns -@subsection Treating Assignments as @value{FFN} +@subsection Treating Assignments as @value{FFN}s @cindex assignments as filenames @cindex filenames, assignments as @@ -22422,6 +22545,7 @@ $ @kbd{gawk -f walk_array.awk} @print{} a[3] = 3 @end example +@c exercise! Walking an array and processing each element is a general-purpose operation. You might want to consider generalizing the @code{walk_array()} function by adding an additional parameter named @code{process}. @@ -22440,6 +22564,50 @@ the element. @c ENDOFRANGE flibgdata @c ENDOFRANGE gdatar @c ENDOFRANGE libf + +@node Library Functions Summary +@section Summary + +@itemize @value{BULLET} +@item +Reading programs is an excellent way to learn Good Programming. +The functions provided in this @value{CHAPTER} and the next are intended +to serve that purpose. + +@item +When writing general-purpose library functions, put some thought into +how to name any global variables so that they won't conflict with +variables from a user's program. + +@item +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 generation, +converting characters to numbers, joining strings, getting easily usable +time-of-day information, and reading a whole file in 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. + +@item Processing command-line options +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. + +@item Traversing arrays of arrays +A simple function to traverse an array of arrays to any depth. +@end table +@c end nested list + +@end itemize + + @c ENDOFRANGE flib @c ENDOFRANGE fudlib @c ENDOFRANGE datagr @@ -27924,7 +28092,8 @@ complete detail in @cite{GNU gettext tools}}.) @end ifnotinfo As of this writing, the latest version of GNU @command{gettext} is -@uref{ftp://ftp.gnu.org/gnu/gettext/gettext-0.19.tar.gz, @value{PVERSION} 0.19}. +@uref{ftp://ftp.gnu.org/gnu/gettext/gettext-0.19.1.tar.gz, +@value{PVERSION} 0.19.1}. If a translation of @command{gawk}'s messages exists, then @command{gawk} produces usage messages, warnings, diff --git a/doc/gawktexi.in b/doc/gawktexi.in index b6c3c3b7..e2d10da9 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -14357,6 +14357,7 @@ same @command{awk} program. * Multidimensional:: Emulating multidimensional arrays in @command{awk}. * Arrays of Arrays:: True multidimensional arrays. +* Arrays Summary:: Summary of arrays. @end menu @node Array Basics @@ -15639,6 +15640,64 @@ creating an arbitrary index: $ @kbd{gawk 'BEGIN @{ b[1][1] = ""; split("a b c d", b[1]); print b[1][1] @}'} @print{} a @end example + +@node Arrays Summary +@section Summary + +@itemize @value{BULLET} +@item +Standard @command{awk} provides one-dimensional associative arrays (arrays +indexed by string values). All arrays are associative; numeric indices +are converted automatically to strings. + +@item +Array elements are referenced as @code{@var{array}[@var{indx}]}. +Referencing an element creates it if it did not exist previously. + +@item +The proper way to see if an array has an element with a given index +is to use the @code{in} operator: @samp{@var{indx} in @var{array}}. + +@item +Use @samp{for (@var{indx} in @var{array}) @dots{}} to scan through all the +individual elements of an array. In the body of the loop, @var{indx} takes +on the value of each element's index in turn. + +@item +The order in which a +@samp{for (@var{indx} in @var{array})} loop traverses an array is +undefined in POSIX @command{awk} and varies among implementations. +@command{gawk} lets you control the order by assigning special predefined +values to @code{PROCINFO["sorted_in"]}. + +@item +Use @samp{delete @var{array}[@var{indx}]} to delete an +individual element. You may also use @samp{delete @var{array}} +to delete all of the elements in the array. This latter feature +has been a common extension for many years and is now standard, but +may not be supported by all commercial versions of @command{awk}. + +@item +Standard @command{awk} simulates multidimensional arrays by separating +subscript values with a comma. 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 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}. + +@item +@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. + +@item +Use the @code{isarray()} built-in function to determine if an +array element is itself a subarray. + +@end itemize + @c ENDOFRANGE arrs @node Functions @@ -15663,6 +15722,7 @@ The second half of this @value{CHAPTER} describes these * Built-in:: Summarizes the built-in functions. * User-defined:: Describes User-defined functions in detail. * Indirect Calls:: Choosing the function to call at runtime. +* Functions Summary:: Summary of functions. @end menu @node Built-in @@ -19060,6 +19120,68 @@ for (i = 1; i <= n; i++) @noindent @code{gawk} will look up the actual function to call only once. +@node Functions Summary +@section Summary + +@itemize @value{BULLET} +@item +@command{awk} provides built-in functions and lets you define your own +functions. + +@item +POSIX @command{awk} provides three kinds of built-in functions: numeric, string, +and I/O. @command{gawk} provides functions that work with values +representing time, do bit manipulation, sort arrays, and internationalize +and localize programs. +@command{gawk} also provides several extensions to some of standard functions, +typically in the form of additional arguments. + +@item +Functions accept zero or more arguments and return a value. +The expressions that provide the argument values are comnpletely evaluated +before the function is called. Order of evaluation is not defined. +The return value can be ignored. + +@item +The handling of backslash in @code{sub()} and @code{gsub()} is +not simple. It is more straightforward in @command{gawk}'s @code{gensub()} +function, but that function still requires care in its use. + +@item +User-defined functions provide important capabilities but come with some +syntactic inelegancies. In a function call, there cannot be any space +between the function name and the opening left parethesis of the argument +list. Also, there is no provision for local variables, so the convention +is to add extra parameters, and to separate them visually from the real +parameters by extra whitespace. + +@item +User-defined functions may call other user-defined (and built-in) functions +and may call themselves recursively. Function parameters ``hide'' any global +variables of the same names. + +@item +Scalar values are passed to user-defined functions by value. Array parameters +are passed by reference; any changes made by the function to array parameters +are thus visible after the function has returned. + +@item +Use the @code{return} statement to return from a user-defined function. +An optional expression becomes the function's return value. +Only scalar values may be returned by a function. + +@item +If a variable that has never been used is passed to a user-defined function, +how that function treats the variable can set its nature: either scalar or array. + +@item +@command{gawk} provides indirect function calls using a special syntax. +By setting a variable to the name of a user-defined function, you can +determine at runtime what function will be called at that point in the +program. This is equivalent to function pointers in C and C++. + +@end itemize + @c ENDOFRANGE funcud @ifnotinfo @@ -19185,6 +19307,7 @@ comparisons use only lowercase letters. * Passwd Functions:: Functions for getting user information. * Group Functions:: Functions for getting group information. * Walking Arrays:: A function to walk arrays of arrays. +* Library Functions Summary:: Summary of library functions. @end menu @node Library Names @@ -20359,7 +20482,7 @@ END @{ @end ignore @node Ignoring Assigns -@subsection Treating Assignments as @value{FFN} +@subsection Treating Assignments as @value{FFN}s @cindex assignments as filenames @cindex filenames, assignments as @@ -21566,6 +21689,7 @@ $ @kbd{gawk -f walk_array.awk} @print{} a[3] = 3 @end example +@c exercise! Walking an array and processing each element is a general-purpose operation. You might want to consider generalizing the @code{walk_array()} function by adding an additional parameter named @code{process}. @@ -21584,6 +21708,50 @@ the element. @c ENDOFRANGE flibgdata @c ENDOFRANGE gdatar @c ENDOFRANGE libf + +@node Library Functions Summary +@section Summary + +@itemize @value{BULLET} +@item +Reading programs is an excellent way to learn Good Programming. +The functions provided in this @value{CHAPTER} and the next are intended +to serve that purpose. + +@item +When writing general-purpose library functions, put some thought into +how to name any global variables so that they won't conflict with +variables from a user's program. + +@item +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 generation, +converting characters to numbers, joining strings, getting easily usable +time-of-day information, and reading a whole file in 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. + +@item Processing command-line options +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. + +@item Traversing arrays of arrays +A simple function to traverse an array of arrays to any depth. +@end table +@c end nested list + +@end itemize + + @c ENDOFRANGE flib @c ENDOFRANGE fudlib @c ENDOFRANGE datagr @@ -27068,7 +27236,8 @@ complete detail in @cite{GNU gettext tools}}.) @end ifnotinfo As of this writing, the latest version of GNU @command{gettext} is -@uref{ftp://ftp.gnu.org/gnu/gettext/gettext-0.19.tar.gz, @value{PVERSION} 0.19}. +@uref{ftp://ftp.gnu.org/gnu/gettext/gettext-0.19.1.tar.gz, +@value{PVERSION} 0.19.1}. If a translation of @command{gawk}'s messages exists, then @command{gawk} produces usage messages, warnings, -- cgit v1.2.3 From 4a42ca2e31b40f0d46634f9ab77d82e4fe727c22 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 12 Jun 2014 22:01:31 +0300 Subject: And more summaries in the doc. --- doc/ChangeLog | 4 + doc/gawk.info | 648 ++++++++++++++++++++++++++++++++++---------------------- doc/gawk.texi | 347 ++++++++++++++++++++++-------- doc/gawktexi.in | 347 ++++++++++++++++++++++-------- 4 files changed, 908 insertions(+), 438 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index bb9d4f29..f81579ac 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-06-12 Arnold D. Robbins + + * gawktexi.in: More "Summary" sections. Through chapter 14. + 2014-06-11 Arnold D. Robbins * gawktexi.in: More "Summary" sections. Through chapter 10. diff --git a/doc/gawk.info b/doc/gawk.info index ff50955b..9033128e 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -14014,9 +14014,9 @@ File: gawk.info, Node: Functions Summary, Prev: Indirect Calls, Up: Functions It is more straightforward in `gawk''s `gensub()' function, but that function still requires care in its use. - * User-defined functions provide important capabilities but come - with some syntactic inelegancies. In a function call, there cannot - be any space between the function name and the opening left + * User-defined functions provide important capabilities but come with + some syntactic inelegancies. In a function call, there cannot be + any space between the function name and the opening left parethesis of the argument list. Also, there is no provision for local variables, so the convention is to add extra parameters, and to separate them visually from the real parameters by extra @@ -14036,8 +14036,8 @@ File: gawk.info, Node: Functions Summary, Prev: Indirect Calls, Up: Functions scalar values may be returned by a function. * If a variable that has never been used is passed to a user-defined - function, how that function treats the variable can set its - nature: either scalar or array. + function, how that function treats the variable can set its nature: + either scalar or array. * `gawk' provides indirect function calls using a special syntax. By setting a variable to the name of a user-defined function, you @@ -15953,6 +15953,7 @@ Library Functions::. * Running Examples:: How to run these examples. * Clones:: Clones of common utilities. * Miscellaneous Programs:: Some interesting `awk' programs. +* Programs Summary:: Summary of programs.  File: gawk.info, Node: Running Examples, Next: Clones, Up: Sample Programs @@ -17168,7 +17169,7 @@ has already been reset by the time `endfile()' is called. characters, not bytes.  -File: gawk.info, Node: Miscellaneous Programs, Prev: Clones, Up: Sample Programs +File: gawk.info, Node: Miscellaneous Programs, Next: Programs Summary, Prev: Clones, Up: Sample Programs 11.3 A Grab Bag of `awk' Programs ================================= @@ -18563,6 +18564,36 @@ supplies the following copyright terms: truly desperate to understand it, see Chris Johansen's explanation, which is embedded in the Texinfo source file for this Info file.) + +File: gawk.info, Node: Programs Summary, Prev: Miscellaneous Programs, Up: Sample Programs + +11.4 Summary +============ + + * The functions provided in this major node and the previous one + continue on the theme that reading programs is an excellent way to + learn Good Programming. + + * Using `#!' to make `awk' programs directly runnable makes them + easier to use. Otherwise, invoke the program using `awk -f ...'. + + * Reimplementing standard POSIX programs in `awk' is a pleasant + exercise; `awk''s expressive power lets you write such programs in + relatively few lines of code, yet they are functionally complete + and usable. + + * One of standard `awk''s weaknesses is working with individual + 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. + + * 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. + +  File: gawk.info, Node: Advanced Features, Next: Internationalization, Prev: Sample Programs, Up: Top @@ -18607,6 +18638,7 @@ own: * Two-way I/O:: Two-way communications with another process. * TCP/IP Networking:: Using `gawk' for network programming. * Profiling:: Profiling your `awk' programs. +* Advanced Features Summary:: Summary of advanced features.  File: gawk.info, Node: Nondecimal Data, Next: Array Sorting, Up: Advanced Features @@ -19209,7 +19241,7 @@ much more complete introduction and discussion, as well as extensive examples.  -File: gawk.info, Node: Profiling, Prev: TCP/IP Networking, Up: Advanced Features +File: gawk.info, Node: Profiling, Next: Advanced Features Summary, Prev: TCP/IP Networking, Up: Advanced Features 12.5 Profiling Your `awk' Programs ================================== @@ -19437,6 +19469,48 @@ without any execution counts. NOTE: The `--pretty-print' option still runs your program. This will change in the next major release. + +File: gawk.info, Node: Advanced Features Summary, Prev: Profiling, Up: Advanced Features + +12.6 Summary +============ + + * The `--non-decimal-data' option causes `gawk' to treat octal- and + hexadecimal-looking input data as octal and hexadecimal. This + option should be used with caution or not at all; use of + `strtonum()' is preferable. + + * You can take over complete control of sorting in `for (INDX in + ARRAY)' array traversal by setting `PROCINFO["sorted_in"]' to the + name of a user-defined function that does the comparison of array + elements based on index and value. + + * Similarly, you can supply the name of a user-defined comparison + function as the third argument to either `asort()' or `asorti()' + to control how those functions sort arrays. Or you may provide one + of the predefined control strings that work for + `PROCINFO["sorted_in"]'. + + * You can use the `|&' operator to create a two-way pipe to a + co-process. You read from the co-process with `getline' and write + to it with `print' or `printf'. Use `close()' to close off the + co-process completely, or optionally, close off one side of the + 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. + `gawk' supports both IPv4 an IPv6. + + * You can generate statement count profiles of your program. This + can help you determine which parts of your program may be taking + the most time and let you tune them more easily. Sending the + `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 + runs the program, but that will change in the next major release. + +  File: gawk.info, Node: Internationalization, Next: Debugger, Prev: Advanced Features, Up: Top @@ -19467,6 +19541,7 @@ requirement. * Translator i18n:: Features for the translator. * I18N Example:: A simple i18n example. * Gawk I18N:: `gawk' is also internationalized. +* I18N Summary:: Summary of I18N stuff.  File: gawk.info, Node: I18N and L10N, Next: Explaining gettext, Up: Internationalization @@ -20005,7 +20080,7 @@ and `bindtextdomain()' (*note I18N Portability::) are in a file named (1) Perhaps it would be better if it were called "Hippy." Ah, well.  -File: gawk.info, Node: Gawk I18N, Prev: I18N Example, Up: Internationalization +File: gawk.info, Node: Gawk I18N, Next: I18N Summary, Prev: I18N Example, Up: Internationalization 13.6 `gawk' Can Speak Your Language =================================== @@ -20019,6 +20094,39 @@ writing, the latest version of GNU `gettext' is version 0.19.1 If a translation of `gawk''s messages exists, then `gawk' produces usage messages, warnings, and fatal errors in the local language. + +File: gawk.info, Node: I18N Summary, Prev: Gawk I18N, Up: Internationalization + +13.7 Summary +============ + + * Internationalization means writing a program such that it can use + multiple languages without requiring source-code changes. + Localization means providing the data necessary for an + internationalized program to work in a particular language. + + * `gawk' uses GNU `gettext' to let you internationalize and localize + `awk' programs. A program's text domain identifies the program + for grouping all messages and other data together. + + * You mark a program's strings for translation by preceding them with + an underscore. Once that is done, the strings are extracted into a + `.pot' file. This file is copied for each langauge into a `.po' + 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. + + * The internationalization features have been designed so that they + can be easily worked around in a standard `awk'. + + * `gawk' itself has been internationalized and ships with a number + of translations for its messages. + +  File: gawk.info, Node: Debugger, Next: Arbitrary Precision Arithmetic, Prev: Internationalization, Up: Top @@ -20042,6 +20150,7 @@ program is easy. * List of Debugger Commands:: Main debugger commands. * Readline Support:: Readline support. * Limitations:: Limitations and future plans. +* Debugging Summary:: Debugging summary.  File: gawk.info, Node: Debugging, Next: Sample Debugging Session, Up: Debugger @@ -21020,7 +21129,7 @@ Variable name completion  -File: gawk.info, Node: Limitations, Prev: Readline Support, Up: Debugger +File: gawk.info, Node: Limitations, Next: Debugging Summary, Prev: Readline Support, Up: Debugger 14.5 Limitations and Future Plans ================================= @@ -21066,6 +21175,35 @@ some limitations. A few which are worth being aware of are: features may be added, and of course feel free to try to add them yourself! + +File: gawk.info, Node: Debugging Summary, Prev: Limitations, Up: Debugger + +14.6 Summary +============ + + * 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 + similarly to the GNU Debugger, GDB. + + * Debuggers let you step through your program one statement at a + time, examine and change variable and array values, and do a + number of other things that let understand what your program is + actually doing (as opposed to what it is supposed to do). + + * Like most debuggers, the `gawk' debugger works in terms of stack + frames, and lets you set both breakpoints (stop at a point in the + code) and watchpoints (stop when a data value changes). + + * The debugger command set is fairly complete, providing control over + 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 + editing. + +  File: gawk.info, Node: Arbitrary Precision Arithmetic, Next: Dynamic Extensions, Prev: Debugger, Up: Top @@ -31784,6 +31922,7 @@ Index * endgrent() user-defined function: Group Functions. (line 216) * endpwent() function (C library): Passwd Functions. (line 210) * endpwent() user-defined function: Passwd Functions. (line 213) +* English, Steve: Advanced Features. (line 6) * ENVIRON array: Auto-set. (line 59) * environment variables used by gawk: Environment Variables. (line 6) @@ -32444,6 +32583,7 @@ Index * l debugger command (alias for list): Miscellaneous Debugger Commands. (line 72) * labels.awk program: Labels Program. (line 51) +* Langston, Peter: Advanced Features. (line 6) * languages, data-driven: Basic High Level. (line 85) * Laurie, Dirk: Changing Precision. (line 6) * LC_ALL locale category: Explaining gettext. (line 121) @@ -33979,248 +34119,252 @@ Ref: Group Functions-Footnote-1653771 Node: Walking Arrays653984 Node: Library Functions Summary656154 Node: Sample Programs657516 -Node: Running Examples658190 -Node: Clones658918 -Node: Cut Program660142 -Node: Egrep Program670003 -Ref: Egrep Program-Footnote-1677932 -Node: Id Program678042 -Node: Split Program681706 -Ref: Split Program-Footnote-1685237 -Node: Tee Program685365 -Node: Uniq Program688172 -Node: Wc Program695602 -Ref: Wc Program-Footnote-1699870 -Ref: Wc Program-Footnote-2700070 -Node: Miscellaneous Programs700162 -Node: Dupword Program701350 -Node: Alarm Program703381 -Node: Translate Program708195 -Ref: Translate Program-Footnote-1712586 -Ref: Translate Program-Footnote-2712856 -Node: Labels Program712990 -Ref: Labels Program-Footnote-1716361 -Node: Word Sorting716445 -Node: History Sorting720488 -Node: Extract Program722324 -Ref: Extract Program-Footnote-1729899 -Node: Simple Sed730028 -Node: Igawk Program733090 -Ref: Igawk Program-Footnote-1748266 -Ref: Igawk Program-Footnote-2748467 -Node: Anagram Program748605 -Node: Signature Program751673 -Node: Advanced Features752920 -Node: Nondecimal Data754806 -Node: Array Sorting756383 -Node: Controlling Array Traversal757080 -Node: Array Sorting Functions765360 -Ref: Array Sorting Functions-Footnote-1769267 -Node: Two-way I/O769461 -Ref: Two-way I/O-Footnote-1774977 -Node: TCP/IP Networking775059 -Node: Profiling777903 -Node: Internationalization785411 -Node: I18N and L10N786836 -Node: Explaining gettext787522 -Ref: Explaining gettext-Footnote-1792662 -Ref: Explaining gettext-Footnote-2792846 -Node: Programmer i18n793011 -Node: Translator i18n797236 -Node: String Extraction798030 -Ref: String Extraction-Footnote-1798991 -Node: Printf Ordering799077 -Ref: Printf Ordering-Footnote-1801859 -Node: I18N Portability801923 -Ref: I18N Portability-Footnote-1804372 -Node: I18N Example804435 -Ref: I18N Example-Footnote-1807157 -Node: Gawk I18N807229 -Node: Debugger807846 -Node: Debugging808817 -Node: Debugging Concepts809258 -Node: Debugging Terms811114 -Node: Awk Debugging813711 -Node: Sample Debugging Session814603 -Node: Debugger Invocation815123 -Node: Finding The Bug816456 -Node: List of Debugger Commands822938 -Node: Breakpoint Control824270 -Node: Debugger Execution Control827934 -Node: Viewing And Changing Data831294 -Node: Execution Stack834652 -Node: Debugger Info836165 -Node: Miscellaneous Debugger Commands840159 -Node: Readline Support845343 -Node: Limitations846235 -Node: Arbitrary Precision Arithmetic848483 -Ref: Arbitrary Precision Arithmetic-Footnote-1850132 -Node: General Arithmetic850280 -Node: Floating Point Issues852000 -Node: String Conversion Precision852881 -Ref: String Conversion Precision-Footnote-1854586 -Node: Unexpected Results854695 -Node: POSIX Floating Point Problems856848 -Ref: POSIX Floating Point Problems-Footnote-1860669 -Node: Integer Programming860707 -Node: Floating-point Programming862518 -Ref: Floating-point Programming-Footnote-1868846 -Ref: Floating-point Programming-Footnote-2869116 -Node: Floating-point Representation869380 -Node: Floating-point Context870545 -Ref: table-ieee-formats871384 -Node: Rounding Mode872768 -Ref: table-rounding-modes873247 -Ref: Rounding Mode-Footnote-1876262 -Node: Gawk and MPFR876441 -Node: Arbitrary Precision Floats877850 -Ref: Arbitrary Precision Floats-Footnote-1880293 -Node: Setting Precision880614 -Ref: table-predefined-precision-strings881298 -Node: Setting Rounding Mode883443 -Ref: table-gawk-rounding-modes883847 -Node: Floating-point Constants885034 -Node: Changing Precision886486 -Ref: Changing Precision-Footnote-1887878 -Node: Exact Arithmetic888052 -Node: Arbitrary Precision Integers891186 -Ref: Arbitrary Precision Integers-Footnote-1894201 -Node: Dynamic Extensions894348 -Node: Extension Intro895806 -Node: Plugin License897071 -Node: Extension Mechanism Outline897756 -Ref: figure-load-extension898180 -Ref: figure-load-new-function899665 -Ref: figure-call-new-function900667 -Node: Extension API Description902651 -Node: Extension API Functions Introduction904101 -Node: General Data Types908967 -Ref: General Data Types-Footnote-1914660 -Node: Requesting Values914959 -Ref: table-value-types-returned915696 -Node: Memory Allocation Functions916654 -Ref: Memory Allocation Functions-Footnote-1919401 -Node: Constructor Functions919497 -Node: Registration Functions921255 -Node: Extension Functions921940 -Node: Exit Callback Functions924242 -Node: Extension Version String925492 -Node: Input Parsers926142 -Node: Output Wrappers935945 -Node: Two-way processors940461 -Node: Printing Messages942665 -Ref: Printing Messages-Footnote-1943742 -Node: Updating `ERRNO'943894 -Node: Accessing Parameters944633 -Node: Symbol Table Access945863 -Node: Symbol table by name946377 -Node: Symbol table by cookie948353 -Ref: Symbol table by cookie-Footnote-1952486 -Node: Cached values952549 -Ref: Cached values-Footnote-1956054 -Node: Array Manipulation956145 -Ref: Array Manipulation-Footnote-1957243 -Node: Array Data Types957282 -Ref: Array Data Types-Footnote-1959985 -Node: Array Functions960077 -Node: Flattening Arrays963951 -Node: Creating Arrays970803 -Node: Extension API Variables975534 -Node: Extension Versioning976170 -Node: Extension API Informational Variables978071 -Node: Extension API Boilerplate979157 -Node: Finding Extensions982961 -Node: Extension Example983521 -Node: Internal File Description984251 -Node: Internal File Ops988342 -Ref: Internal File Ops-Footnote-1999888 -Node: Using Internal File Ops1000028 -Ref: Using Internal File Ops-Footnote-11002375 -Node: Extension Samples1002643 -Node: Extension Sample File Functions1004167 -Node: Extension Sample Fnmatch1011735 -Node: Extension Sample Fork1013202 -Node: Extension Sample Inplace1014415 -Node: Extension Sample Ord1016181 -Node: Extension Sample Readdir1017017 -Ref: table-readdir-file-types1017866 -Node: Extension Sample Revout1018665 -Node: Extension Sample Rev2way1019256 -Node: Extension Sample Read write array1019997 -Node: Extension Sample Readfile1021876 -Node: Extension Sample API Tests1022976 -Node: Extension Sample Time1023501 -Node: gawkextlib1024816 -Node: Language History1027603 -Node: V7/SVR3.11029197 -Node: SVR41031517 -Node: POSIX1032959 -Node: BTL1034345 -Node: POSIX/GNU1035079 -Node: Feature History1040678 -Node: Common Extensions1053790 -Node: Ranges and Locales1055102 -Ref: Ranges and Locales-Footnote-11059719 -Ref: Ranges and Locales-Footnote-21059746 -Ref: Ranges and Locales-Footnote-31059980 -Node: Contributors1060201 -Node: Installation1065639 -Node: Gawk Distribution1066533 -Node: Getting1067017 -Node: Extracting1067843 -Node: Distribution contents1069485 -Node: Unix Installation1075202 -Node: Quick Installation1075819 -Node: Additional Configuration Options1078261 -Node: Configuration Philosophy1079999 -Node: Non-Unix Installation1082350 -Node: PC Installation1082808 -Node: PC Binary Installation1084119 -Node: PC Compiling1085967 -Ref: PC Compiling-Footnote-11088966 -Node: PC Testing1089071 -Node: PC Using1090247 -Node: Cygwin1094405 -Node: MSYS1095214 -Node: VMS Installation1095728 -Node: VMS Compilation1096524 -Ref: VMS Compilation-Footnote-11097739 -Node: VMS Dynamic Extensions1097797 -Node: VMS Installation Details1099170 -Node: VMS Running1101416 -Node: VMS GNV1104250 -Node: VMS Old Gawk1104973 -Node: Bugs1105443 -Node: Other Versions1109447 -Node: Notes1115672 -Node: Compatibility Mode1116472 -Node: Additions1117254 -Node: Accessing The Source1118179 -Node: Adding Code1119615 -Node: New Ports1125793 -Node: Derived Files1130274 -Ref: Derived Files-Footnote-11135355 -Ref: Derived Files-Footnote-21135389 -Ref: Derived Files-Footnote-31135985 -Node: Future Extensions1136099 -Node: Implementation Limitations1136705 -Node: Extension Design1137953 -Node: Old Extension Problems1139107 -Ref: Old Extension Problems-Footnote-11140624 -Node: Extension New Mechanism Goals1140681 -Ref: Extension New Mechanism Goals-Footnote-11144042 -Node: Extension Other Design Decisions1144231 -Node: Extension Future Growth1146337 -Node: Old Extension Mechanism1147173 -Node: Basic Concepts1148913 -Node: Basic High Level1149594 -Ref: figure-general-flow1149866 -Ref: figure-process-flow1150465 -Ref: Basic High Level-Footnote-11153694 -Node: Basic Data Typing1153879 -Node: Glossary1157206 -Node: Copying1182358 -Node: GNU Free Documentation License1219914 -Node: Index1245050 +Node: Running Examples658243 +Node: Clones658971 +Node: Cut Program660195 +Node: Egrep Program670056 +Ref: Egrep Program-Footnote-1677985 +Node: Id Program678095 +Node: Split Program681759 +Ref: Split Program-Footnote-1685290 +Node: Tee Program685418 +Node: Uniq Program688225 +Node: Wc Program695655 +Ref: Wc Program-Footnote-1699923 +Ref: Wc Program-Footnote-2700123 +Node: Miscellaneous Programs700215 +Node: Dupword Program701428 +Node: Alarm Program703459 +Node: Translate Program708273 +Ref: Translate Program-Footnote-1712664 +Ref: Translate Program-Footnote-2712934 +Node: Labels Program713068 +Ref: Labels Program-Footnote-1716439 +Node: Word Sorting716523 +Node: History Sorting720566 +Node: Extract Program722402 +Ref: Extract Program-Footnote-1729977 +Node: Simple Sed730106 +Node: Igawk Program733168 +Ref: Igawk Program-Footnote-1748344 +Ref: Igawk Program-Footnote-2748545 +Node: Anagram Program748683 +Node: Signature Program751751 +Node: Programs Summary752998 +Node: Advanced Features754186 +Node: Nondecimal Data756134 +Node: Array Sorting757711 +Node: Controlling Array Traversal758408 +Node: Array Sorting Functions766688 +Ref: Array Sorting Functions-Footnote-1770595 +Node: Two-way I/O770789 +Ref: Two-way I/O-Footnote-1776305 +Node: TCP/IP Networking776387 +Node: Profiling779231 +Node: Advanced Features Summary786773 +Node: Internationalization788637 +Node: I18N and L10N790117 +Node: Explaining gettext790803 +Ref: Explaining gettext-Footnote-1795943 +Ref: Explaining gettext-Footnote-2796127 +Node: Programmer i18n796292 +Node: Translator i18n800517 +Node: String Extraction801311 +Ref: String Extraction-Footnote-1802272 +Node: Printf Ordering802358 +Ref: Printf Ordering-Footnote-1805140 +Node: I18N Portability805204 +Ref: I18N Portability-Footnote-1807653 +Node: I18N Example807716 +Ref: I18N Example-Footnote-1810438 +Node: Gawk I18N810510 +Node: I18N Summary811148 +Node: Debugger812487 +Node: Debugging813509 +Node: Debugging Concepts813950 +Node: Debugging Terms815806 +Node: Awk Debugging818403 +Node: Sample Debugging Session819295 +Node: Debugger Invocation819815 +Node: Finding The Bug821148 +Node: List of Debugger Commands827630 +Node: Breakpoint Control828962 +Node: Debugger Execution Control832626 +Node: Viewing And Changing Data835986 +Node: Execution Stack839344 +Node: Debugger Info840857 +Node: Miscellaneous Debugger Commands844851 +Node: Readline Support850035 +Node: Limitations850927 +Node: Debugging Summary853201 +Node: Arbitrary Precision Arithmetic854365 +Ref: Arbitrary Precision Arithmetic-Footnote-1856014 +Node: General Arithmetic856162 +Node: Floating Point Issues857882 +Node: String Conversion Precision858763 +Ref: String Conversion Precision-Footnote-1860468 +Node: Unexpected Results860577 +Node: POSIX Floating Point Problems862730 +Ref: POSIX Floating Point Problems-Footnote-1866551 +Node: Integer Programming866589 +Node: Floating-point Programming868400 +Ref: Floating-point Programming-Footnote-1874728 +Ref: Floating-point Programming-Footnote-2874998 +Node: Floating-point Representation875262 +Node: Floating-point Context876427 +Ref: table-ieee-formats877266 +Node: Rounding Mode878650 +Ref: table-rounding-modes879129 +Ref: Rounding Mode-Footnote-1882144 +Node: Gawk and MPFR882323 +Node: Arbitrary Precision Floats883732 +Ref: Arbitrary Precision Floats-Footnote-1886175 +Node: Setting Precision886496 +Ref: table-predefined-precision-strings887180 +Node: Setting Rounding Mode889325 +Ref: table-gawk-rounding-modes889729 +Node: Floating-point Constants890916 +Node: Changing Precision892368 +Ref: Changing Precision-Footnote-1893760 +Node: Exact Arithmetic893934 +Node: Arbitrary Precision Integers897068 +Ref: Arbitrary Precision Integers-Footnote-1900083 +Node: Dynamic Extensions900230 +Node: Extension Intro901688 +Node: Plugin License902953 +Node: Extension Mechanism Outline903638 +Ref: figure-load-extension904062 +Ref: figure-load-new-function905547 +Ref: figure-call-new-function906549 +Node: Extension API Description908533 +Node: Extension API Functions Introduction909983 +Node: General Data Types914849 +Ref: General Data Types-Footnote-1920542 +Node: Requesting Values920841 +Ref: table-value-types-returned921578 +Node: Memory Allocation Functions922536 +Ref: Memory Allocation Functions-Footnote-1925283 +Node: Constructor Functions925379 +Node: Registration Functions927137 +Node: Extension Functions927822 +Node: Exit Callback Functions930124 +Node: Extension Version String931374 +Node: Input Parsers932024 +Node: Output Wrappers941827 +Node: Two-way processors946343 +Node: Printing Messages948547 +Ref: Printing Messages-Footnote-1949624 +Node: Updating `ERRNO'949776 +Node: Accessing Parameters950515 +Node: Symbol Table Access951745 +Node: Symbol table by name952259 +Node: Symbol table by cookie954235 +Ref: Symbol table by cookie-Footnote-1958368 +Node: Cached values958431 +Ref: Cached values-Footnote-1961936 +Node: Array Manipulation962027 +Ref: Array Manipulation-Footnote-1963125 +Node: Array Data Types963164 +Ref: Array Data Types-Footnote-1965867 +Node: Array Functions965959 +Node: Flattening Arrays969833 +Node: Creating Arrays976685 +Node: Extension API Variables981416 +Node: Extension Versioning982052 +Node: Extension API Informational Variables983953 +Node: Extension API Boilerplate985039 +Node: Finding Extensions988843 +Node: Extension Example989403 +Node: Internal File Description990133 +Node: Internal File Ops994224 +Ref: Internal File Ops-Footnote-11005770 +Node: Using Internal File Ops1005910 +Ref: Using Internal File Ops-Footnote-11008257 +Node: Extension Samples1008525 +Node: Extension Sample File Functions1010049 +Node: Extension Sample Fnmatch1017617 +Node: Extension Sample Fork1019084 +Node: Extension Sample Inplace1020297 +Node: Extension Sample Ord1022063 +Node: Extension Sample Readdir1022899 +Ref: table-readdir-file-types1023748 +Node: Extension Sample Revout1024547 +Node: Extension Sample Rev2way1025138 +Node: Extension Sample Read write array1025879 +Node: Extension Sample Readfile1027758 +Node: Extension Sample API Tests1028858 +Node: Extension Sample Time1029383 +Node: gawkextlib1030698 +Node: Language History1033485 +Node: V7/SVR3.11035079 +Node: SVR41037399 +Node: POSIX1038841 +Node: BTL1040227 +Node: POSIX/GNU1040961 +Node: Feature History1046560 +Node: Common Extensions1059672 +Node: Ranges and Locales1060984 +Ref: Ranges and Locales-Footnote-11065601 +Ref: Ranges and Locales-Footnote-21065628 +Ref: Ranges and Locales-Footnote-31065862 +Node: Contributors1066083 +Node: Installation1071521 +Node: Gawk Distribution1072415 +Node: Getting1072899 +Node: Extracting1073725 +Node: Distribution contents1075367 +Node: Unix Installation1081084 +Node: Quick Installation1081701 +Node: Additional Configuration Options1084143 +Node: Configuration Philosophy1085881 +Node: Non-Unix Installation1088232 +Node: PC Installation1088690 +Node: PC Binary Installation1090001 +Node: PC Compiling1091849 +Ref: PC Compiling-Footnote-11094848 +Node: PC Testing1094953 +Node: PC Using1096129 +Node: Cygwin1100287 +Node: MSYS1101096 +Node: VMS Installation1101610 +Node: VMS Compilation1102406 +Ref: VMS Compilation-Footnote-11103621 +Node: VMS Dynamic Extensions1103679 +Node: VMS Installation Details1105052 +Node: VMS Running1107298 +Node: VMS GNV1110132 +Node: VMS Old Gawk1110855 +Node: Bugs1111325 +Node: Other Versions1115329 +Node: Notes1121554 +Node: Compatibility Mode1122354 +Node: Additions1123136 +Node: Accessing The Source1124061 +Node: Adding Code1125497 +Node: New Ports1131675 +Node: Derived Files1136156 +Ref: Derived Files-Footnote-11141237 +Ref: Derived Files-Footnote-21141271 +Ref: Derived Files-Footnote-31141867 +Node: Future Extensions1141981 +Node: Implementation Limitations1142587 +Node: Extension Design1143835 +Node: Old Extension Problems1144989 +Ref: Old Extension Problems-Footnote-11146506 +Node: Extension New Mechanism Goals1146563 +Ref: Extension New Mechanism Goals-Footnote-11149924 +Node: Extension Other Design Decisions1150113 +Node: Extension Future Growth1152219 +Node: Old Extension Mechanism1153055 +Node: Basic Concepts1154795 +Node: Basic High Level1155476 +Ref: figure-general-flow1155748 +Ref: figure-process-flow1156347 +Ref: Basic High Level-Footnote-11159576 +Node: Basic Data Typing1159761 +Node: Glossary1163088 +Node: Copying1188240 +Node: GNU Free Documentation License1225796 +Node: Index1250932  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index c4e17b2b..d6453c8b 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -8531,18 +8531,19 @@ The possibilities are as follows: @command{gawk} sets @code{RT} to the text matched by @code{RS}. @item -After splitting the input into records, @command{awk} further splits the record -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. +After splitting the input into records, @command{awk} further splits +the record 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. @item -Fields may be referenced using a variable, as in @samp{$NF}. Fields may also be -assigned values, which causes the value of @code{$0} to be recomputed when it is -later referenced. Assigning to a field with a number greater than @code{NF} -creates the field and rebuilds the record, using @code{OFS} to separate the fields. -Incrementing @code{NF} does the same thing. Decrementing @code{NF} throws away fields -and rebuilds the record. +Fields may be referenced using a variable, as in @samp{$NF}. Fields +may also be assigned values, which causes the value of @code{$0} to be +recomputed when it is later referenced. Assigning to a field with a number +greater than @code{NF} creates the field and rebuilds the record, using +@code{OFS} to separate the fields. Incrementing @code{NF} does the same +thing. Decrementing @code{NF} throws away fields and rebuilds the record. @item Field splitting is more complicated than record splitting. @@ -8557,8 +8558,8 @@ Field splitting is more complicated than record splitting. @item @code{FPAT == @var{regexp}} @tab On text around text matching the regexp @tab @command{gawk} @end multitable -Using @samp{FS = "\n"} causes the entire record to be a single field (assuming -that newlines separate records). +Using @samp{FS = "\n"} causes the entire record to be a single field +(assuming that newlines separate records). @item @code{FS} may be set from the command line using the @option{-F} option. @@ -10116,23 +10117,23 @@ when closing a pipe. @itemize @value{BULLET} @item -The @code{print} statement prints comma-separated expressions. Each expression -is separated by the value of @code{OFS} and terminated by the value of @code{ORS}. -@code{OFMT} provides the conversion format for numeric values for the @code{print} -statement. +The @code{print} statement prints comma-separated expressions. Each +expression is separated by the value of @code{OFS} and terminated by +the value of @code{ORS}. @code{OFMT} provides the conversion format +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. +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. @item -Output from both @code{print} and @code{printf} may be redirected to files, -pipes, and co-processes. +Output from both @code{print} and @code{printf} may be redirected to +files, pipes, and co-processes. @item -@command{gawk} provides special file names for access to standard input, output -and error, and for network communications. +@command{gawk} provides special file names for access to standard input, +output and error, and for network communications. @item Use @code{close()} to close open file, pipe and co-process redirections. @@ -12569,9 +12570,9 @@ in @ref{Conversion}. @itemize @value{BULLET} @item -Expressions are the basic elements of computation in programs. -They are built from constants, variables, function calls and combinations -of the various kinds of values with operators. +Expressions are the basic elements of computation in programs. They are +built from constants, variables, function calls and combinations of the +various kinds of values with operators. @item @command{awk} supplies three kinds of constants: numeric, string, and @@ -12596,8 +12597,8 @@ subtraction, multiplication, division, modulus), and unary plus and minus. It also provides comparison operators, boolean operators, 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 expressions. +The three-operand @samp{?:} operator provides an ``if-else'' test within +expressions. @item Assignment operators provide convenient shorthands for common arithmetic @@ -12608,20 +12609,21 @@ In @command{awk}, a value is considered to be true if it is non-zero @emph{or} non-null. Otherwise, the value is false. @item -A value's type is set upon each assignment and may change over its lifetime. -The type determines how it behaves in comparisons (string or numeric). +A value's type is set upon each assignment and may change over its +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 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 later on in -this @value{DOCUMENT}. +built-in and user-defined functions; this is described later on in this +@value{DOCUMENT}. @item -Operator precedence specifies the order in which operations are -performed, unless explicitly overridden by parentheses. @command{awk}'s -operator precedence is compatible with that of C. +Operator precedence specifies the order in which operations are performed, +unless explicitly overridden by parentheses. @command{awk}'s operator +precedence is compatible with that of C. @item Locales can affect the format of data as output by an @command{awk} @@ -16312,9 +16314,9 @@ $ @kbd{gawk 'BEGIN @{ b[1][1] = ""; split("a b c d", b[1]); print b[1][1] @}'} @itemize @value{BULLET} @item -Standard @command{awk} provides one-dimensional associative arrays (arrays -indexed by string values). All arrays are associative; numeric indices -are converted automatically to strings. +Standard @command{awk} provides one-dimensional associative arrays +(arrays indexed by string values). All arrays are associative; numeric +indices are converted automatically to strings. @item Array elements are referenced as @code{@var{array}[@var{indx}]}. @@ -16330,27 +16332,26 @@ individual elements of an array. In the body of the loop, @var{indx} takes on the value of each element's index in turn. @item -The order in which a -@samp{for (@var{indx} in @var{array})} loop traverses an array is -undefined in POSIX @command{awk} and varies among implementations. -@command{gawk} lets you control the order by assigning special predefined -values to @code{PROCINFO["sorted_in"]}. +The order in which a @samp{for (@var{indx} in @var{array})} loop +traverses an array is undefined in POSIX @command{awk} and varies among +implementations. @command{gawk} lets you control the order by assigning +special predefined values to @code{PROCINFO["sorted_in"]}. @item -Use @samp{delete @var{array}[@var{indx}]} to delete an -individual element. You may also use @samp{delete @var{array}} -to delete all of the elements in the array. This latter feature -has been a common extension for many years and is now standard, but -may not be supported by all commercial versions of @command{awk}. +Use @samp{delete @var{array}[@var{indx}]} to delete an individual element. +You may also use @samp{delete @var{array}} to delete all of the elements +in the array. This latter feature has been a common extension for many +years and is now standard, but may not be supported by all commercial +versions of @command{awk}. @item Standard @command{awk} simulates multidimensional arrays by separating subscript values with a comma. 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 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}. +single string, separated by the value of @code{SUBSEP}. The fact +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}. @item @command{gawk} provides true arrays of arrays. You use a separate @@ -16359,8 +16360,8 @@ set of square brackets for each dimension in such an array: scalar values (number or string) or another array. @item -Use the @code{isarray()} built-in function to determine if an -array element is itself a subarray. +Use the @code{isarray()} built-in function to determine if an array +element is itself a subarray. @end itemize @@ -19956,50 +19957,50 @@ for (i = 1; i <= n; i++) functions. @item -POSIX @command{awk} provides three kinds of built-in functions: numeric, string, -and I/O. @command{gawk} provides functions that work with values +POSIX @command{awk} provides three kinds of built-in functions: numeric, +string, and I/O. @command{gawk} provides functions that work with values representing time, do bit manipulation, sort arrays, and internationalize -and localize programs. -@command{gawk} also provides several extensions to some of standard functions, -typically in the form of additional arguments. +and localize programs. @command{gawk} also provides several extensions to +some of standard functions, typically in the form of additional arguments. @item -Functions accept zero or more arguments and return a value. -The expressions that provide the argument values are comnpletely evaluated +Functions accept zero or more arguments and return a value. The +expressions that provide the argument values are comnpletely evaluated before the function is called. Order of evaluation is not defined. The return value can be ignored. @item -The handling of backslash in @code{sub()} and @code{gsub()} is -not simple. It is more straightforward in @command{gawk}'s @code{gensub()} -function, but that function still requires care in its use. +The handling of backslash in @code{sub()} and @code{gsub()} is not simple. +It is more straightforward in @command{gawk}'s @code{gensub()} function, +but that function still requires care in its use. @item -User-defined functions provide important capabilities but come with some -syntactic inelegancies. In a function call, there cannot be any space -between the function name and the opening left parethesis of the argument -list. Also, there is no provision for local variables, so the convention -is to add extra parameters, and to separate them visually from the real -parameters by extra whitespace. +User-defined functions provide important capabilities but come with +some syntactic inelegancies. In a function call, there cannot be any +space between the function name and the opening left parethesis of the +argument list. Also, there is no provision for local variables, so the +convention is to add extra parameters, and to separate them visually +from the real parameters by extra whitespace. @item -User-defined functions may call other user-defined (and built-in) functions -and may call themselves recursively. Function parameters ``hide'' any global -variables of the same names. +User-defined functions may call other user-defined (and built-in) +functions and may call themselves recursively. Function parameters +``hide'' any global variables of the same names. @item -Scalar values are passed to user-defined functions by value. Array parameters -are passed by reference; any changes made by the function to array parameters -are thus visible after the function has returned. +Scalar values are passed to user-defined functions by value. Array +parameters are passed by reference; any changes made by the function to +array parameters are thus visible after the function has returned. @item Use the @code{return} statement to return from a user-defined function. -An optional expression becomes the function's return value. -Only scalar values may be returned by a function. +An optional expression becomes the function's return value. Only scalar +values may be returned by a function. @item -If a variable that has never been used is passed to a user-defined function, -how that function treats the variable can set its nature: either scalar or array. +If a variable that has never been used is passed to a user-defined +function, how that function treats the variable can set its nature: +either scalar or array. @item @command{gawk} provides indirect function calls using a special syntax. @@ -22575,9 +22576,9 @@ The functions provided in this @value{CHAPTER} and the next are intended to serve that purpose. @item -When writing general-purpose library functions, put some thought into -how to name any global variables so that they won't conflict with -variables from a user's program. +When writing general-purpose library functions, put some thought into how +to name any global variables so that they won't conflict with variables +from a user's program. @item The functions presented here fit into the following categories: @@ -22585,9 +22586,10 @@ 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 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, 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. @item Managing @value{DF}s Noting @value{DF} boundaries, rereading the current file, checking for @@ -22623,11 +22625,11 @@ presents the idea that reading programs in a language contributes to learning that language. This @value{CHAPTER} continues that theme, presenting a potpourri of @command{awk} programs for your reading enjoyment. +@c FULLXREF OFF @ifnotinfo There are three sections. The first describes how to run the programs presented in this @value{CHAPTER}. -@c FULLXREF OFF The second presents @command{awk} versions of several common POSIX utilities. @@ -22650,6 +22652,7 @@ Many of these programs use library functions presented in * Running Examples:: How to run these examples. * Clones:: Clones of common utilities. * Miscellaneous Programs:: Some interesting @command{awk} programs. +* Programs Summary:: Summary of programs. @end menu @node Running Examples @@ -26149,6 +26152,42 @@ BEGIN { } @end ignore +@node Programs Summary +@section Summary + +@itemize @value{BULLET} +@item +The functions provided in this @value{CHAPTER} and the previous one +continue on the theme that reading programs is an excellent way to learn +Good Programming. + +@item +Using @samp{#!} to make @command{awk} programs directly runnable makes +them easier to use. Otherwise, invoke the program using @samp{awk +-f @dots{}}. + +@item +Reimplementing standard POSIX programs in @command{awk} is a pleasant +exercise; @command{awk}'s expressive power lets you write such programs +in relatively few lines of code, yet they are functionally complete +and usable. + +@item +One of standard @command{awk}'s weaknesses is working with individual +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. + +@item +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. + +@end itemize + @ifnotinfo @part @value{PART3}Moving Beyond Standard @command{awk} With @command{gawk} @end ifnotinfo @@ -26189,6 +26228,8 @@ Contributed by: Peter Langston "Write documentation as if whoever reads it is a violent psychopath who knows where you live." @end ignore +@cindex Langston, Peter +@cindex English, Steve @quotation @i{Write documentation as if whoever reads it is a violent psychopath who knows where you live.} @@ -26240,6 +26281,7 @@ discusses the ability to dynamically add new built-in functions to * Two-way I/O:: Two-way communications with another process. * TCP/IP Networking:: Using @command{gawk} for network programming. * Profiling:: Profiling your @command{awk} programs. +* Advanced Features Summary:: Summary of advanced features. @end menu @node Nondecimal Data @@ -27298,11 +27340,56 @@ When called this way, @command{gawk} ``pretty prints'' the program into The @option{--pretty-print} option still runs your program. This will change in the next major release. @end quotation -@c ENDOFRANGE advgaw -@c ENDOFRANGE gawadv @c ENDOFRANGE awkp @c ENDOFRANGE proawk +@node Advanced Features Summary +@section Summary + +@itemize @value{BULLET} +@item +The @option{--non-decimal-data} option causes @command{gawk} to treat +octal- and hexadecimal-looking input data as octal and hexadecimal. +This option should be used with caution or not at all; use of @code{strtonum()} +is preferable. + +@item +You can take over complete control of sorting in @samp{for (@var{indx} in @var{array})} +array traversal by setting @code{PROCINFO["sorted_in"]} to the name of a user-defined +function that does the comparison of array elements based on index and value. + +@item +Similarly, you can supply the name of a user-defined comparison function as the +third argument to either @code{asort()} or @command{asorti()} to control how +those functions sort arrays. Or you may provide one of the predefined control +strings that work for @code{PROCINFO["sorted_in"]}. + +@item +You can use the @samp{|&} operator to create a two-way pipe to a co-process. +You read from the co-process with @code{getline} and write to it with @code{print} +or @code{printf}. Use @code{close()} to close off the co-process completely, or +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} +supports both IPv4 an IPv6. + +@item +You can generate statement count profiles of your program. This can help you +determine which parts of your program may be taking the most time and let +you tune them more easily. Sending the @code{USR1} signal while profiling causes +@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 +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} @@ -27336,6 +27423,7 @@ a requirement. * Translator i18n:: Features for the translator. * I18N Example:: A simple i18n example. * Gawk I18N:: @command{gawk} is also internationalized. +* I18N Summary:: Summary of I18N stuff. @end menu @node I18N and L10N @@ -28098,15 +28186,54 @@ As of this writing, the latest version of GNU @command{gettext} is If a translation of @command{gawk}'s messages exists, then @command{gawk} produces usage messages, warnings, and fatal errors in the local language. -@c ENDOFRANGE inloc -@c The original text for this chapter was contributed by Efraim Yawitz. -@c FIXME: Add more indexing. +@node I18N Summary +@section Summary + +@itemize @value{BULLET} +@item +Internationalization means writing a program such that it can use multiple +languages without requiring source-code changes. Localization means +providing the data necessary for an internationalized program to work +in a particular language. + +@item +@command{gawk} uses GNU @command{gettext} to let you internationalize +and localize @command{awk} programs. A program's text domain identifies +the program for grouping all messages and other data together. + +@item +You mark a program's strings for translation by preceding them with +an underscore. Once that is done, the strings are extracted into a +@file{.pot} file. This file is copied for each langauge into a @file{.po} +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 +@code{printf} to rearrange the placement of argument values in formatted +strings and output. This is useful for the translations of format +control strings. + +@item +The internationalization features have been designed so that they +can be easily worked around in a standard @command{awk}. + +@item +@command{gawk} itself has been internationalized and ships with +a number of translations for its messages. + +@end itemize + +@c ENDOFRANGE inloc @node Debugger @chapter Debugging @command{awk} Programs @cindex debugging @command{awk} programs +@c The original text for this chapter was contributed by Efraim Yawitz. +@c FIXME: Add more indexing. + It would be nice if computer programs worked perfectly the first time they were run, but in real life, this rarely happens for programs of any complexity. Thus, most programming languages have facilities available @@ -28123,6 +28250,7 @@ how to use @command{gawk} for debugging your program is easy. * List of Debugger Commands:: Main debugger commands. * Readline Support:: Readline support. * Limitations:: Limitations and future plans. +* Debugging Summary:: Debugging summary. @end menu @node Debugging @@ -29401,6 +29529,39 @@ The @command{gawk} debugger only accepts source supplied with the @option{-f} op Look forward to a future release when these and other missing features may be added, and of course feel free to try to add them yourself! +@node Debugging Summary +@section Summary + +@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 +similarly to the GNU Debugger, GDB. + +@item +Debuggers let you step through your program one statement at a time, +examine and change variable and array values, and do a number of other +things that let understand what your program is actually doing (as +opposed to what it is supposed to do). + +@item +Like most debuggers, the @command{gawk} debugger works in terms of stack +frames, and lets you set both breakpoints (stop at a point in the code) +and watchpoints (stop when a data value changes). + +@item +The debugger command set is fairly complete, providing control over +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 +compiled, it is used by the debugger to provide command-line history +and editing. + +@end itemize + @node Arbitrary Precision Arithmetic @chapter Arithmetic and Arbitrary Precision Arithmetic with @command{gawk} @cindex arbitrary precision diff --git a/doc/gawktexi.in b/doc/gawktexi.in index e2d10da9..c91820af 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -8150,18 +8150,19 @@ The possibilities are as follows: @command{gawk} sets @code{RT} to the text matched by @code{RS}. @item -After splitting the input into records, @command{awk} further splits the record -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. +After splitting the input into records, @command{awk} further splits +the record 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. @item -Fields may be referenced using a variable, as in @samp{$NF}. Fields may also be -assigned values, which causes the value of @code{$0} to be recomputed when it is -later referenced. Assigning to a field with a number greater than @code{NF} -creates the field and rebuilds the record, using @code{OFS} to separate the fields. -Incrementing @code{NF} does the same thing. Decrementing @code{NF} throws away fields -and rebuilds the record. +Fields may be referenced using a variable, as in @samp{$NF}. Fields +may also be assigned values, which causes the value of @code{$0} to be +recomputed when it is later referenced. Assigning to a field with a number +greater than @code{NF} creates the field and rebuilds the record, using +@code{OFS} to separate the fields. Incrementing @code{NF} does the same +thing. Decrementing @code{NF} throws away fields and rebuilds the record. @item Field splitting is more complicated than record splitting. @@ -8176,8 +8177,8 @@ Field splitting is more complicated than record splitting. @item @code{FPAT == @var{regexp}} @tab On text around text matching the regexp @tab @command{gawk} @end multitable -Using @samp{FS = "\n"} causes the entire record to be a single field (assuming -that newlines separate records). +Using @samp{FS = "\n"} causes the entire record to be a single field +(assuming that newlines separate records). @item @code{FS} may be set from the command line using the @option{-F} option. @@ -9635,23 +9636,23 @@ when closing a pipe. @itemize @value{BULLET} @item -The @code{print} statement prints comma-separated expressions. Each expression -is separated by the value of @code{OFS} and terminated by the value of @code{ORS}. -@code{OFMT} provides the conversion format for numeric values for the @code{print} -statement. +The @code{print} statement prints comma-separated expressions. Each +expression is separated by the value of @code{OFS} and terminated by +the value of @code{ORS}. @code{OFMT} provides the conversion format +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. +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. @item -Output from both @code{print} and @code{printf} may be redirected to files, -pipes, and co-processes. +Output from both @code{print} and @code{printf} may be redirected to +files, pipes, and co-processes. @item -@command{gawk} provides special file names for access to standard input, output -and error, and for network communications. +@command{gawk} provides special file names for access to standard input, +output and error, and for network communications. @item Use @code{close()} to close open file, pipe and co-process redirections. @@ -11949,9 +11950,9 @@ in @ref{Conversion}. @itemize @value{BULLET} @item -Expressions are the basic elements of computation in programs. -They are built from constants, variables, function calls and combinations -of the various kinds of values with operators. +Expressions are the basic elements of computation in programs. They are +built from constants, variables, function calls and combinations of the +various kinds of values with operators. @item @command{awk} supplies three kinds of constants: numeric, string, and @@ -11976,8 +11977,8 @@ subtraction, multiplication, division, modulus), and unary plus and minus. It also provides comparison operators, boolean operators, 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 expressions. +The three-operand @samp{?:} operator provides an ``if-else'' test within +expressions. @item Assignment operators provide convenient shorthands for common arithmetic @@ -11988,20 +11989,21 @@ In @command{awk}, a value is considered to be true if it is non-zero @emph{or} non-null. Otherwise, the value is false. @item -A value's type is set upon each assignment and may change over its lifetime. -The type determines how it behaves in comparisons (string or numeric). +A value's type is set upon each assignment and may change over its +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 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 later on in -this @value{DOCUMENT}. +built-in and user-defined functions; this is described later on in this +@value{DOCUMENT}. @item -Operator precedence specifies the order in which operations are -performed, unless explicitly overridden by parentheses. @command{awk}'s -operator precedence is compatible with that of C. +Operator precedence specifies the order in which operations are performed, +unless explicitly overridden by parentheses. @command{awk}'s operator +precedence is compatible with that of C. @item Locales can affect the format of data as output by an @command{awk} @@ -15646,9 +15648,9 @@ $ @kbd{gawk 'BEGIN @{ b[1][1] = ""; split("a b c d", b[1]); print b[1][1] @}'} @itemize @value{BULLET} @item -Standard @command{awk} provides one-dimensional associative arrays (arrays -indexed by string values). All arrays are associative; numeric indices -are converted automatically to strings. +Standard @command{awk} provides one-dimensional associative arrays +(arrays indexed by string values). All arrays are associative; numeric +indices are converted automatically to strings. @item Array elements are referenced as @code{@var{array}[@var{indx}]}. @@ -15664,27 +15666,26 @@ individual elements of an array. In the body of the loop, @var{indx} takes on the value of each element's index in turn. @item -The order in which a -@samp{for (@var{indx} in @var{array})} loop traverses an array is -undefined in POSIX @command{awk} and varies among implementations. -@command{gawk} lets you control the order by assigning special predefined -values to @code{PROCINFO["sorted_in"]}. +The order in which a @samp{for (@var{indx} in @var{array})} loop +traverses an array is undefined in POSIX @command{awk} and varies among +implementations. @command{gawk} lets you control the order by assigning +special predefined values to @code{PROCINFO["sorted_in"]}. @item -Use @samp{delete @var{array}[@var{indx}]} to delete an -individual element. You may also use @samp{delete @var{array}} -to delete all of the elements in the array. This latter feature -has been a common extension for many years and is now standard, but -may not be supported by all commercial versions of @command{awk}. +Use @samp{delete @var{array}[@var{indx}]} to delete an individual element. +You may also use @samp{delete @var{array}} to delete all of the elements +in the array. This latter feature has been a common extension for many +years and is now standard, but may not be supported by all commercial +versions of @command{awk}. @item Standard @command{awk} simulates multidimensional arrays by separating subscript values with a comma. 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 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}. +single string, separated by the value of @code{SUBSEP}. The fact +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}. @item @command{gawk} provides true arrays of arrays. You use a separate @@ -15693,8 +15694,8 @@ set of square brackets for each dimension in such an array: scalar values (number or string) or another array. @item -Use the @code{isarray()} built-in function to determine if an -array element is itself a subarray. +Use the @code{isarray()} built-in function to determine if an array +element is itself a subarray. @end itemize @@ -19129,50 +19130,50 @@ for (i = 1; i <= n; i++) functions. @item -POSIX @command{awk} provides three kinds of built-in functions: numeric, string, -and I/O. @command{gawk} provides functions that work with values +POSIX @command{awk} provides three kinds of built-in functions: numeric, +string, and I/O. @command{gawk} provides functions that work with values representing time, do bit manipulation, sort arrays, and internationalize -and localize programs. -@command{gawk} also provides several extensions to some of standard functions, -typically in the form of additional arguments. +and localize programs. @command{gawk} also provides several extensions to +some of standard functions, typically in the form of additional arguments. @item -Functions accept zero or more arguments and return a value. -The expressions that provide the argument values are comnpletely evaluated +Functions accept zero or more arguments and return a value. The +expressions that provide the argument values are comnpletely evaluated before the function is called. Order of evaluation is not defined. The return value can be ignored. @item -The handling of backslash in @code{sub()} and @code{gsub()} is -not simple. It is more straightforward in @command{gawk}'s @code{gensub()} -function, but that function still requires care in its use. +The handling of backslash in @code{sub()} and @code{gsub()} is not simple. +It is more straightforward in @command{gawk}'s @code{gensub()} function, +but that function still requires care in its use. @item -User-defined functions provide important capabilities but come with some -syntactic inelegancies. In a function call, there cannot be any space -between the function name and the opening left parethesis of the argument -list. Also, there is no provision for local variables, so the convention -is to add extra parameters, and to separate them visually from the real -parameters by extra whitespace. +User-defined functions provide important capabilities but come with +some syntactic inelegancies. In a function call, there cannot be any +space between the function name and the opening left parethesis of the +argument list. Also, there is no provision for local variables, so the +convention is to add extra parameters, and to separate them visually +from the real parameters by extra whitespace. @item -User-defined functions may call other user-defined (and built-in) functions -and may call themselves recursively. Function parameters ``hide'' any global -variables of the same names. +User-defined functions may call other user-defined (and built-in) +functions and may call themselves recursively. Function parameters +``hide'' any global variables of the same names. @item -Scalar values are passed to user-defined functions by value. Array parameters -are passed by reference; any changes made by the function to array parameters -are thus visible after the function has returned. +Scalar values are passed to user-defined functions by value. Array +parameters are passed by reference; any changes made by the function to +array parameters are thus visible after the function has returned. @item Use the @code{return} statement to return from a user-defined function. -An optional expression becomes the function's return value. -Only scalar values may be returned by a function. +An optional expression becomes the function's return value. Only scalar +values may be returned by a function. @item -If a variable that has never been used is passed to a user-defined function, -how that function treats the variable can set its nature: either scalar or array. +If a variable that has never been used is passed to a user-defined +function, how that function treats the variable can set its nature: +either scalar or array. @item @command{gawk} provides indirect function calls using a special syntax. @@ -21719,9 +21720,9 @@ The functions provided in this @value{CHAPTER} and the next are intended to serve that purpose. @item -When writing general-purpose library functions, put some thought into -how to name any global variables so that they won't conflict with -variables from a user's program. +When writing general-purpose library functions, put some thought into how +to name any global variables so that they won't conflict with variables +from a user's program. @item The functions presented here fit into the following categories: @@ -21729,9 +21730,10 @@ 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 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, 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. @item Managing @value{DF}s Noting @value{DF} boundaries, rereading the current file, checking for @@ -21767,11 +21769,11 @@ presents the idea that reading programs in a language contributes to learning that language. This @value{CHAPTER} continues that theme, presenting a potpourri of @command{awk} programs for your reading enjoyment. +@c FULLXREF OFF @ifnotinfo There are three sections. The first describes how to run the programs presented in this @value{CHAPTER}. -@c FULLXREF OFF The second presents @command{awk} versions of several common POSIX utilities. @@ -21794,6 +21796,7 @@ Many of these programs use library functions presented in * Running Examples:: How to run these examples. * Clones:: Clones of common utilities. * Miscellaneous Programs:: Some interesting @command{awk} programs. +* Programs Summary:: Summary of programs. @end menu @node Running Examples @@ -25293,6 +25296,42 @@ BEGIN { } @end ignore +@node Programs Summary +@section Summary + +@itemize @value{BULLET} +@item +The functions provided in this @value{CHAPTER} and the previous one +continue on the theme that reading programs is an excellent way to learn +Good Programming. + +@item +Using @samp{#!} to make @command{awk} programs directly runnable makes +them easier to use. Otherwise, invoke the program using @samp{awk +-f @dots{}}. + +@item +Reimplementing standard POSIX programs in @command{awk} is a pleasant +exercise; @command{awk}'s expressive power lets you write such programs +in relatively few lines of code, yet they are functionally complete +and usable. + +@item +One of standard @command{awk}'s weaknesses is working with individual +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. + +@item +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. + +@end itemize + @ifnotinfo @part @value{PART3}Moving Beyond Standard @command{awk} With @command{gawk} @end ifnotinfo @@ -25333,6 +25372,8 @@ Contributed by: Peter Langston "Write documentation as if whoever reads it is a violent psychopath who knows where you live." @end ignore +@cindex Langston, Peter +@cindex English, Steve @quotation @i{Write documentation as if whoever reads it is a violent psychopath who knows where you live.} @@ -25384,6 +25425,7 @@ discusses the ability to dynamically add new built-in functions to * Two-way I/O:: Two-way communications with another process. * TCP/IP Networking:: Using @command{gawk} for network programming. * Profiling:: Profiling your @command{awk} programs. +* Advanced Features Summary:: Summary of advanced features. @end menu @node Nondecimal Data @@ -26442,11 +26484,56 @@ When called this way, @command{gawk} ``pretty prints'' the program into The @option{--pretty-print} option still runs your program. This will change in the next major release. @end quotation -@c ENDOFRANGE advgaw -@c ENDOFRANGE gawadv @c ENDOFRANGE awkp @c ENDOFRANGE proawk +@node Advanced Features Summary +@section Summary + +@itemize @value{BULLET} +@item +The @option{--non-decimal-data} option causes @command{gawk} to treat +octal- and hexadecimal-looking input data as octal and hexadecimal. +This option should be used with caution or not at all; use of @code{strtonum()} +is preferable. + +@item +You can take over complete control of sorting in @samp{for (@var{indx} in @var{array})} +array traversal by setting @code{PROCINFO["sorted_in"]} to the name of a user-defined +function that does the comparison of array elements based on index and value. + +@item +Similarly, you can supply the name of a user-defined comparison function as the +third argument to either @code{asort()} or @command{asorti()} to control how +those functions sort arrays. Or you may provide one of the predefined control +strings that work for @code{PROCINFO["sorted_in"]}. + +@item +You can use the @samp{|&} operator to create a two-way pipe to a co-process. +You read from the co-process with @code{getline} and write to it with @code{print} +or @code{printf}. Use @code{close()} to close off the co-process completely, or +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} +supports both IPv4 an IPv6. + +@item +You can generate statement count profiles of your program. This can help you +determine which parts of your program may be taking the most time and let +you tune them more easily. Sending the @code{USR1} signal while profiling causes +@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 +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} @@ -26480,6 +26567,7 @@ a requirement. * Translator i18n:: Features for the translator. * I18N Example:: A simple i18n example. * Gawk I18N:: @command{gawk} is also internationalized. +* I18N Summary:: Summary of I18N stuff. @end menu @node I18N and L10N @@ -27242,15 +27330,54 @@ As of this writing, the latest version of GNU @command{gettext} is If a translation of @command{gawk}'s messages exists, then @command{gawk} produces usage messages, warnings, and fatal errors in the local language. -@c ENDOFRANGE inloc -@c The original text for this chapter was contributed by Efraim Yawitz. -@c FIXME: Add more indexing. +@node I18N Summary +@section Summary + +@itemize @value{BULLET} +@item +Internationalization means writing a program such that it can use multiple +languages without requiring source-code changes. Localization means +providing the data necessary for an internationalized program to work +in a particular language. + +@item +@command{gawk} uses GNU @command{gettext} to let you internationalize +and localize @command{awk} programs. A program's text domain identifies +the program for grouping all messages and other data together. + +@item +You mark a program's strings for translation by preceding them with +an underscore. Once that is done, the strings are extracted into a +@file{.pot} file. This file is copied for each langauge into a @file{.po} +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 +@code{printf} to rearrange the placement of argument values in formatted +strings and output. This is useful for the translations of format +control strings. + +@item +The internationalization features have been designed so that they +can be easily worked around in a standard @command{awk}. + +@item +@command{gawk} itself has been internationalized and ships with +a number of translations for its messages. + +@end itemize + +@c ENDOFRANGE inloc @node Debugger @chapter Debugging @command{awk} Programs @cindex debugging @command{awk} programs +@c The original text for this chapter was contributed by Efraim Yawitz. +@c FIXME: Add more indexing. + It would be nice if computer programs worked perfectly the first time they were run, but in real life, this rarely happens for programs of any complexity. Thus, most programming languages have facilities available @@ -27267,6 +27394,7 @@ how to use @command{gawk} for debugging your program is easy. * List of Debugger Commands:: Main debugger commands. * Readline Support:: Readline support. * Limitations:: Limitations and future plans. +* Debugging Summary:: Debugging summary. @end menu @node Debugging @@ -28545,6 +28673,39 @@ The @command{gawk} debugger only accepts source supplied with the @option{-f} op Look forward to a future release when these and other missing features may be added, and of course feel free to try to add them yourself! +@node Debugging Summary +@section Summary + +@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 +similarly to the GNU Debugger, GDB. + +@item +Debuggers let you step through your program one statement at a time, +examine and change variable and array values, and do a number of other +things that let understand what your program is actually doing (as +opposed to what it is supposed to do). + +@item +Like most debuggers, the @command{gawk} debugger works in terms of stack +frames, and lets you set both breakpoints (stop at a point in the code) +and watchpoints (stop when a data value changes). + +@item +The debugger command set is fairly complete, providing control over +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 +compiled, it is used by the debugger to provide command-line history +and editing. + +@end itemize + @node Arbitrary Precision Arithmetic @chapter Arithmetic and Arbitrary Precision Arithmetic with @command{gawk} @cindex arbitrary precision -- cgit v1.2.3 From f20d398e580607d3d986e94dcbd0ae189f528478 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 13 Jun 2014 08:03:58 +0300 Subject: Fix typos for filename macro in doc. --- doc/ChangeLog | 5 + doc/gawk.info | 1501 ++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 156 +++--- doc/gawktexi.in | 154 +++--- 4 files changed, 913 insertions(+), 903 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index f81579ac..d047e041 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2014-06-13 Arnold D. Robbins + + * gawktexi.in: Fix typos from changes of 3 June when macros were + added for filename, data file, etc. Ooops. + 2014-06-12 Arnold D. Robbins * gawktexi.in: More "Summary" sections. Through chapter 14. diff --git a/doc/gawk.info b/doc/gawk.info index 9033128e..39aa56b1 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -1490,7 +1490,7 @@ tell `awk' to use that file for its program, you type: awk -f SOURCE-FILE INPUT-FILE1 INPUT-FILE2 ... The `-f' instructs the `awk' utility to get the `awk' program from -the file SOURCE-FILE. Any FN can be used for SOURCE-FILE. For +the file SOURCE-FILE. Any file name can be used for SOURCE-FILE. For example, you could put the program: BEGIN { print "Don't Panic!" } @@ -1504,15 +1504,16 @@ does the same thing as this one: awk "BEGIN { print \"Don't Panic!\" }" This was explained earlier (*note Read Terminal::). Note that you -don't usually need single quotes around the FN that you specify with -`-f', because most FNs don't contain any of the shell's special -characters. Notice that in `advice', the `awk' program did not have -single quotes around it. The quotes are only needed for programs that -are provided on the `awk' command line. +don't usually need single quotes around the file name that you specify +with `-f', because most file names don't contain any of the shell's +special characters. Notice that in `advice', the `awk' program did not +have single quotes around it. The quotes are only needed for programs +that are provided on the `awk' command line. If you want to clearly identify your `awk' program files as such, -you can add the extension `.awk' to the FN. This doesn't affect the -execution of the `awk' program but it does make "housekeeping" easier. +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 @@ -1567,14 +1568,14 @@ the name of your script (`advice'). (d.c.) Don't rely on the value of (1) The `#!' mechanism works on GNU/Linux systems, BSD-based systems and commercial Unix systems. - (2) The line beginning with `#!' lists the full FN of an interpreter -to run and an optional initial command-line argument to pass to that -interpreter. The operating system then runs the interpreter with the -given argument and the full argument list of the executed program. The -first argument in the list is the full FN of the `awk' program. The -rest of the argument list contains either options to `awk', or data -files, or both. Note that on many systems `awk' may be found in -`/usr/bin' instead of in `/bin'. Caveat Emptor. + (2) The line beginning with `#!' lists the full file name of an +interpreter to run and an optional initial command-line argument to +pass to that interpreter. The operating system then runs the +interpreter with the given argument and the full argument list of the +executed program. The first argument in the list is the full file name +of the `awk' program. The rest of the argument list contains either +options to `awk', or data files, or both. Note that on many systems +`awk' may be found in `/usr/bin' instead of in `/bin'. Caveat Emptor.  File: gawk.info, Node: Comments, Next: Quoting, Prev: Executable Scripts, Up: Running gawk @@ -1714,9 +1715,9 @@ the quoting rules. awk -F"" 'PROGRAM' FILES # wrong! In the second case, `awk' will attempt to use the text of the - program as the value of `FS', and the first FN as the text of the - program! This results in syntax errors at best, and confusing - behavior at worst. + program as the value of `FS', and the first file name as the text + of the program! This results in syntax errors at best, and + confusing behavior at worst. Mixing single and double quotes is difficult. You have to resort to shell quoting tricks, like this: @@ -1895,9 +1896,9 @@ description of the program will give you a good idea of what is going on, but please 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 FNs 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 +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 the length of the longest input line: @@ -2041,7 +2042,7 @@ identifies the owner of the file. The fourth field identifies the group of the file. The fifth field contains the size of the file in bytes. The sixth, seventh, and eighth fields contain the month, day, and time, respectively, that the file was last modified. Finally, the ninth field -contains the FN.(1) +contains the file name.(1) The `$6 == "Nov"' in our `awk' program is an expression that tests whether the sixth field of the output from `ls -l' matches the string @@ -2380,10 +2381,10 @@ The following list describes options mandated by the POSIX standard: This interpretation of `--' follows the POSIX argument parsing conventions. - This is useful if you have FNs that start with `-', or in shell - scripts, if you have FNs that will be specified by the user that - could start with `-'. It is also useful for passing options on to - the `awk' program; see *note Getopt Function::. + This is useful if you have file names that start with `-', or in + shell scripts, if you have file names that will be specified by + the user that could start with `-'. It is also useful for passing + options on to the `awk' program; see *note Getopt Function::. The following list describes `gawk'-specific options: @@ -2548,8 +2549,8 @@ The following list describes options mandated by the POSIX standard: Enable pretty-printing of `awk' programs. By default, output program is created in a file named `awkprof.out' (*note Profiling::). The optional FILE argument allows you to specify a - different FN for the output. No space is allowed between the `-o' - and FILE, if FILE is supplied. + different file name for the output. No space is allowed between + the `-o' and FILE, if FILE is supplied. NOTE: Due to the way `gawk' has evolved, with this option your program is still executed. This will change in the next @@ -2565,9 +2566,9 @@ The following list describes options mandated by the POSIX standard: `--profile'[`='FILE] Enable profiling of `awk' programs (*note Profiling::). By default, profiles are created in a file named `awkprof.out'. The - optional FILE argument allows you to specify a different FN for - the profile file. No space is allowed between the `-p' and FILE, - if FILE is supplied. + optional FILE argument allows you to specify a different file name + for the profile file. No space is allowed between the `-p' and + FILE, if FILE is supplied. The profile contains execution counts for each statement in the program in the left margin, and function call counts for each @@ -2708,11 +2709,11 @@ arguments, including variable assignments, are included. As each element of `ARGV' is processed, `gawk' sets the variable `ARGIND' to the index in `ARGV' of the current element. - The distinction between FN arguments and variable-assignment + The distinction between file name arguments and variable-assignment arguments is made when `awk' is about to open the next input file. At -that point in execution, it checks the FN to see whether it is really a -variable assignment; if so, `awk' sets the variable instead of reading -a file. +that point in execution, it checks the file name to see whether it is +really a variable assignment; if so, `awk' sets the variable instead of +reading a file. Therefore, the variables actually receive the given values after all previously specified files have been read. In particular, the values of @@ -2724,13 +2725,13 @@ begins scanning the argument list. escape sequences (*note Escape Sequences::). (d.c.) In some very early implementations of `awk', when a variable -assignment occurred before any FNs, the assignment would happen _before_ -the `BEGIN' rule was executed. `awk''s behavior was thus inconsistent; -some command-line assignments were available inside the `BEGIN' rule, -while others were not. Unfortunately, some applications came to depend -upon this "feature." When `awk' was changed to be more consistent, the -`-v' option was added to accommodate applications that depended upon -the old behavior. +assignment occurred before any file names, the assignment would happen +_before_ the `BEGIN' rule was executed. `awk''s behavior was thus +inconsistent; some command-line assignments were available inside the +`BEGIN' rule, while others were not. Unfortunately, some applications +came to depend upon this "feature." When `awk' was changed to be more +consistent, the `-v' option was added to accommodate applications that +depended upon the old behavior. The variable assignment feature is most useful for assigning to variables such as `RS', `OFS', and `ORS', which control input and @@ -2766,11 +2767,11 @@ SOME_COMMAND, and finally it reads `file2'. You may also use `"-"' to name standard input when reading files with `getline' (*note Getline/File::). - In addition, `gawk' allows you to specify the special FN + In addition, `gawk' allows you to specify the special file name `/dev/stdin', both on the command line and with `getline'. Some other versions of `awk' also support this, but it is not standard. (Some operating systems provide a `/dev/stdin' file in the file system; -however, `gawk' always processes this FN itself.) +however, `gawk' always processes this file name itself.)  File: gawk.info, Node: Environment Variables, Next: Exit Status, Prev: Naming Standard Input, Up: Invoking Gawk @@ -2798,7 +2799,7 @@ The previous minor node described how `awk' program files can be named on the command-line with the `-f' option. In most `awk' implementations, you must supply a precise path name for each program file, unless the file is in the current directory. But in `gawk', if -the FN supplied to the `-f' or `-i' options does not contain a +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 specified name. @@ -2811,8 +2812,8 @@ variable. If that variable does not exist, `gawk' uses a default path, The search path feature is particularly helpful for building libraries of useful `awk' functions. The library files can be placed in a standard directory in the default path and then specified on the -command line with a short FN. Otherwise, the full FN would have to be -typed for each file. +command line with a short file name. Otherwise, the full file name +would have to be typed for each file. By using the `-i' option, or the `--source' and `-f' options, your command-line `awk' programs can use facilities in `awk' library files @@ -3020,8 +3021,8 @@ and here is `test2': use `@include' followed by the name of the file to be included, enclosed in double quotes. - NOTE: Keep in mind that this is a language construct and the FN - cannot be a string variable, but rather just a literal string + NOTE: Keep in mind that this is a language construct and the file + name cannot be a string variable, but rather just a literal string constant in double quotes. The files to be included may be nested; e.g., given a third script, @@ -3039,7 +3040,7 @@ Running `gawk' with the `test3' script produces the following results: -| This is file test2. -| This is file test3. - The FN can, of course, be a pathname. For example: + The file name can, of course, be a pathname. For example: @include "../io_funcs" @@ -5432,11 +5433,11 @@ File: gawk.info, Node: Getline/File, Next: Getline/Variable/File, Prev: Getli --------------------------------- Use `getline < FILE' to read the next record from FILE. Here FILE is a -string-valued expression that specifies the FN. `< 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 with a value equal -to 10 in the current input file: +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 +with a value equal to 10 in the current input file: { if ($1 == 10) { @@ -5938,8 +5939,8 @@ OFMT::.) For printing with specifications, you need the `printf' statement (*note Printf::). Besides basic and formatted printing, this major node also covers -I/O redirections to files and pipes, introduces the special FNs that -`gawk' processes internally, and discusses the `close()' built-in +I/O redirections to files and pipes, introduces the special file names +that `gawk' processes internally, and discusses the `close()' built-in function. * Menu: @@ -6576,8 +6577,9 @@ work identically for `printf': `print ITEMS > OUTPUT-FILE' This redirection prints the items into the output file named - OUTPUT-FILE. The FN OUTPUT-FILE can be any expression. Its value - is changed to a string and then used as a FN (*note Expressions::). + {No value for `output-file'}. The file name OUTPUT-FILE can be any + expression. Its value is changed to a string and then used as a + file name (*note Expressions::). When this type of redirection is used, the OUTPUT-FILE is erased before the first output is written to it. Subsequent writes to @@ -6695,9 +6697,9 @@ underlying operating system permits. A particularly powerful way to use redirection is to build command lines and pipe them into the shell, `sh'. For example, suppose you -have a list of files brought over from a system where all the FNs are -stored in uppercase, and you wish to rename them to have names in all -lowercase. The following program is both simple and efficient: +have a list of files brought over from a system where all the file names +are stored in uppercase, and you wish to rename them to have names in +all lowercase. The following program is both simple and efficient: { printf("mv %s %s\n", $0, tolower($0)) | "sh" } @@ -6714,9 +6716,9 @@ File: gawk.info, Node: Special Files, Next: Close Files And Pipes, Prev: Redi 5.7 Special File Name in `gawk' =============================== -`gawk' provides a number of special FNs that it interprets internally. -These FNs provide access to standard file descriptors and TCP/IP -networking. +`gawk' provides a number of special file names that it interprets +internally. These file names provide access to standard file +descriptors and TCP/IP networking. * Menu: @@ -6762,13 +6764,13 @@ 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 opening `/dev/tty' fails. - `gawk' provides special FNs for accessing the three standard + `gawk' provides special file names for accessing the three standard streams. (c.e.) It also provides syntax for accessing any other -inherited open files. If the FN matches one of these special names -when `gawk' redirects input or output, then it directly uses the stream -that the FN stands for. These special FNs work for all operating -systems that `gawk' has been ported to, not just those that are -POSIX-compliant: +inherited open files. If the file name matches one of these special +names when `gawk' redirects input or output, then it directly uses the +stream that the file name stands for. These special file names work +for all operating systems that `gawk' has been ported to, not just +those that are POSIX-compliant: `/dev/stdin' The standard input (file descriptor 0). @@ -6785,18 +6787,18 @@ POSIX-compliant: the shell). Unless special pains are taken in the shell from which `gawk' is invoked, only descriptors 0, 1, and 2 are available. - The FNs `/dev/stdin', `/dev/stdout', and `/dev/stderr' are aliases -for `/dev/fd/0', `/dev/fd/1', and `/dev/fd/2', respectively. However, -they are more self-explanatory. The proper way to write an error -message in a `gawk' program is to use `/dev/stderr', like this: + The file names `/dev/stdin', `/dev/stdout', and `/dev/stderr' are +aliases for `/dev/fd/0', `/dev/fd/1', and `/dev/fd/2', respectively. +However, they are more self-explanatory. The proper way to write an +error message in a `gawk' program is to use `/dev/stderr', like this: print "Serious error detected!" > "/dev/stderr" - Note the use of quotes around the FN. Like any other redirection, -the value must be a string. It is a common error to omit the quotes, -which leads to confusing results. + Note the use of quotes around the file name. Like any other +redirection, the value must be a string. It is a common error to omit +the quotes, which leads to confusing results. - Finally, using the `close()' function on a FN of the form + Finally, using the `close()' function on a file name of the form `"/dev/fd/N"', for file descriptor numbers above two, does actually close the given file descriptor. @@ -6814,15 +6816,16 @@ File: gawk.info, Node: Special Network, Next: Special Caveats, Prev: Special ---------------------------------------------- `gawk' programs can open a two-way TCP/IP connection, acting as either -a client or a server. This is done using a special FN of the form: +a client or a server. This is done using a special file name of the +form: `/NET-TYPE/PROTOCOL/LOCAL-PORT/REMOTE-HOST/REMOTE-PORT' The NET-TYPE is one of `inet', `inet4' or `inet6'. The PROTOCOL is one of `tcp' or `udp', and the other fields represent the other essential pieces of information for making a networking connection. -These FNs are used with the `|&' operator for communicating with a -coprocess (*note Two-way I/O::). This is an advanced feature, +These file names are used with the `|&' operator for communicating with +a coprocess (*note Two-way I/O::). This is an advanced feature, mentioned here only for completeness. Full discussion is delayed until *note TCP/IP Networking::. @@ -6832,15 +6835,15 @@ File: gawk.info, Node: Special Caveats, Prev: Special Network, Up: Special Fi 5.7.3 Special File Name Caveats ------------------------------- -Here is a list of things to bear in mind when using the special FNs -that `gawk' provides: +Here is a list of things to bear in mind when using the special file +names that `gawk' provides: - * Recognition of these special FNs is disabled if `gawk' is in + * Recognition of these special file names is disabled if `gawk' is in compatibility mode (*note Options::). - * `gawk' _always_ interprets these special FNs. 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 + * `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 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 @@ -6852,17 +6855,17 @@ File: gawk.info, Node: Close Files And Pipes, Next: Output Summary, Prev: Spe 5.8 Closing Input and Output Redirections ========================================= -If the same FN or the same shell command is used with `getline' more -than once during the execution of an `awk' program (*note Getline::), -the file is opened (or the command is executed) the first time only. -At that time, the first record of input is read from that file or -command. The next time the same file or command is used with `getline', -another record is read from it, and so on. +If the same file name or the same shell command is used with `getline' +more than once during the execution of an `awk' program (*note +Getline::), the file is opened (or the command is executed) the first +time only. At that time, the first record of input is read from that +file or command. The next time the same file or command is used with +`getline', another record is read from it, and so on. Similarly, when a file or pipe is opened for output, `awk' remembers -the FN or command associated with it, and subsequent writes to the same -file or command are appended to the previous writes. The file or pipe -stays open until `awk' exits. +the file name or command associated with it, and subsequent writes to +the same file or command are appended to the previous writes. The file +or pipe stays open until `awk' exits. This implies that special steps are necessary in order to read the same file again from the beginning, or to rerun a shell command (rather @@ -6891,8 +6894,8 @@ file or command, or the next `print' or `printf' to that file or command, reopens the file or reruns the command. Because the expression that you use to close a file or pipeline must exactly match the expression used to open the file or run the command, it is good -practice to use a variable to store the FN or command. The previous -example becomes the following: +practice to use a valueiable to store the file name or command. The +previous example becomes the following: sortcom = "sort -r names" sortcom | getline foo @@ -7374,11 +7377,11 @@ option, as in the following: the variable is set at the very beginning, even before the `BEGIN' rules execute. The `-v' option and its assignment must precede all the -FN arguments, as well as the program text. (*Note Options::, for more -information about the `-v' option.) Otherwise, the variable assignment -is performed at a time determined by its position among the input file -arguments--after the processing of the preceding input file argument. -For example: +file name arguments, as well as the program text. (*Note Options::, +for more information about the `-v' option.) Otherwise, the variable +assignment is performed at a time determined by its position among the +input file arguments--after the processing of the preceding input file +argument. For example: awk '{ print $n }' n=4 inventory-shipped n=2 mail-list @@ -10058,13 +10061,14 @@ Options::), they are not special. `ARGIND #' The index in `ARGV' of the current file being processed. Every time `gawk' opens a new data file for processing, it sets `ARGIND' - to the index in `ARGV' of the FN. When `gawk' is processing the - input files, `FILENAME == ARGV[ARGIND]' is always true. + to the index in `ARGV' of the file name. When `gawk' is + processing the input files, `FILENAME == ARGV[ARGIND]' is always + true. This variable is useful in file processing; it allows you to tell how far along you are in the list of data files as well as to - distinguish between successive instances of the same FN on the - command line. + distinguish between successive instances of the same file name on + the command line. While you can change the value of `ARGIND' within your `awk' program, `gawk' automatically sets it to a new value when the next @@ -10391,13 +10395,13 @@ incrementing `ARGC' causes additional files to be read. If the value of `ARGC' is decreased, that eliminates input files from the end of the list. By recording the old value of `ARGC' elsewhere, a program can treat the eliminated arguments as something -other than FNs. +other than file names. To eliminate a file from the middle of the list, store the null string (`""') into `ARGV' in place of the file's name. As a special -feature, `awk' ignores FNs that have been replaced with the null string. -Another option is to use the `delete' statement to remove elements from -`ARGV' (*note Delete::). +feature, `awk' ignores file names that have been replaced with the null +string. Another option is to use the `delete' statement to remove +elements from `ARGV' (*note Delete::). All of these actions are typically done in the `BEGIN' rule, before actual processing of the input begins. *Note Split Program::, and see @@ -14832,16 +14836,16 @@ does so _portably_; this works with any implementation of `awk': the rule it supplies is executed first. This rule relies on `awk''s `FILENAME' variable that automatically -changes for each new data file. The current FN is saved in a private -variable, `_oldfilename'. If `FILENAME' does not equal `_oldfilename', -then a new data file is being processed and it is necessary to call -`endfile()' for the old file. Because `endfile()' should only be -called if a file has been processed, the program first checks to make -sure that `_oldfilename' is not the null string. The program then -assigns the current FN to `_oldfilename' and calls `beginfile()' for -the file. Because, like all `awk' variables, `_oldfilename' is -initialized to the null string, this rule executes correctly even for -the first data file. +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 +necessary to call `endfile()' for the old file. Because `endfile()' +should only be called if a file has been processed, the program first +checks to make sure that `_oldfilename' is not the null string. The +program then assigns the current file name to `_oldfilename' and calls +`beginfile()' for the file. Because, like all `awk' variables, +`_oldfilename' is initialized to the null string, this rule executes +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 @@ -14978,8 +14982,8 @@ program code. possible to detect when an empty data file has been skipped. Similar to the library file presented in *note Filetrans Function::, the following library file calls a function named `zerofile()' that the -user must provide. The arguments passed are the FN and the position in -`ARGV' where it was found: +user must provide. The arguments passed are the file name and the +position in `ARGV' where it was found: # zerofile.awk --- library file to process empty input files @@ -15025,8 +15029,8 @@ File: gawk.info, Node: Ignoring Assigns, Prev: Empty Files, Up: Data File Man Occasionally, you might not want `awk' to process command-line variable assignments (*note Assignment Options::). In particular, if you have a -FN that contains an `=' character, `awk' treats the FN as an -assignment, and does not process it. +file name that contains an `=' character, `awk' treats the file name as +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 @@ -15053,7 +15057,7 @@ programming with a library file does the trick: The function works by looping through the arguments. It prepends `./' to any argument that matches the form of a variable assignment, -turning that argument into a FN. +turning that argument into a file name. The use of `No_command_assign' allows you to disable command-line assignments at invocation time, by giving the variable a true value. @@ -15342,7 +15346,7 @@ that it does not try to interpret the `-a', etc., as its own options. NOTE: After `getopt()' is through, it is the responsibility of the user level code to clear out all the elements of `ARGV' from 1 to `Optind', so that `awk' does not try to process the command-line - options as FNs. + options as file names. Several of the sample programs presented in *note Sample Programs::, use `getopt()' to process their arguments. @@ -16124,7 +16128,7 @@ we want them to be separated with individual spaces. Also remember that after `getopt()' is through (as described in *note Getopt Function::), we have to clear out all the elements of `ARGV' from 1 to `Optind', so that `awk' does not try to process the command-line options -as FNs. +as file names. After dealing with the command-line options, the program verifies that the options make sense. Only one or the other of `-c' and `-f' @@ -16281,9 +16285,10 @@ expressions that are almost identical to those available in `awk' The PATTERN is a regular expression. In typical usage, the regular expression is quoted to prevent the shell from expanding any of the -special characters as FN wildcards. Normally, `egrep' prints the lines -that matched. If multiple FNs are provided on the command line, each -output line is preceded by the name of the file and a colon. +special characters as file name wildcards. Normally, `egrep' prints +the lines that matched. If multiple file names are provided on the +command line, each output line is preceded by the name of the file and +a colon. The options to `egrep' are as follows: @@ -16355,8 +16360,8 @@ pattern is supplied with `-e', the first nonoption on the command line is used. The `awk' command-line arguments up to `ARGV[Optind]' are cleared, so that `awk' won't try to process them as files. If no files are specified, the standard input is used, and if multiple files are -specified, we make sure to note this so that the FNs can precede the -matched lines in the output: +specified, we make sure to note this so that the file names can precede +the matched lines in the output: if (pattern == "") pattern = ARGV[Optind++] @@ -16437,9 +16442,9 @@ just moves on to the next record. are not counting lines. First, if the user only wants 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 FNs, we can print the FN, and then -skip to the next file with `nextfile'. Finally, each line is printed, -with a leading FN and colon if necessary: +Similarly, if we are only printing file names, we can print the file +name, and then skip to the next file with `nextfile'. Finally, each +line is printed, with a leading file name and colon if necessary: { matches = ($0 ~ pattern) @@ -16625,7 +16630,7 @@ 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 1000. To change the name of the output files to something like `myfileaa', `myfileab', and so on, supply an -additional argument that specifies the FN prefix. +additional argument that specifies the file name prefix. Here is a version of `split' in `awk'. It uses the `ord()' and `chr()' functions presented in *note Ordinal Functions::. @@ -22981,7 +22986,7 @@ File: gawk.info, Node: Exit Callback Functions, Next: Extension Version String .............................................. An "exit callback" function is a function that `gawk' calls before it -exits. Such functions are useful if you have general "clean up" tasks +exits. Such functions are useful if you have general "cleanup" tasks that should be performed in your extension (such as closing data base connections or other resource deallocations). You can register such a function with `gawk' using the following function. @@ -23738,7 +23743,7 @@ of the usage. When a variable's value changes, `gawk' simply decrements the reference count on the old value and updates the variable to use the new value. - Finally, as part of your clean up action (*note Exit Callback + Finally, as part of your cleanup action (*note Exit Callback Functions::) you should release any cached values that you created, using `release_value()'. @@ -25253,10 +25258,10 @@ constant (`FNM_NOMATCH'), and an array of flag values named `FNM'. The arguments to `fnmatch()' are: `pattern' - The FN wildcard to match. + The file name wildcard to match. `string' - The FN string. + The file name string. `flag' Either zero, or the bitwise OR of one or more of the flags in the @@ -25348,8 +25353,8 @@ standard output to a temporary file configured to have the same owner and permissions as the original. After the file has been processed, the extension restores standard output to its original destination. If `INPLACE_SUFFIX' is not an empty string, the original file is linked to -a backup FN created by appending that suffix. Finally, the temporary -file is renamed to the original FN. +a backup file name created by appending that suffix. Finally, the +temporary file is renamed to the original file name. If any error occurs, the extension issues a fatal error to terminate processing immediately without damaging the original file. @@ -25409,9 +25414,9 @@ on the command line (or with `getline'), 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 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 +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 indicating the type of the file. The letters are file types are shown in *note table-readdir-file-types::. @@ -27498,8 +27503,8 @@ or: $ MMK/DESCRIPTION=[.vms]descrip.mms gawk `MMK' is an open source, free, near-clone of `MMS' and can better -handle ODS-5 volumes with upper- and lowercase FNs. `MMK' is available -from `https://github.com/endlesssoftware/mmk'. +handle ODS-5 volumes with upper- and lowercase file names. `MMK' is +available from `https://github.com/endlesssoftware/mmk'. With ODS-5 volumes and extended parsing enabled, the case of the target parameter may need to be exact. @@ -27619,9 +27624,9 @@ has no device or directory path information in it, `gawk' looks in the current directory first, then in the directory specified by the translation of `AWK_LIBRARY' if the file is not found. If, after searching in both directories, the file still is not found, `gawk' -appends the suffix `.awk' to the FN and retries the file search. If -`AWK_LIBRARY' has no definition, a default value of `SYS$LIBRARY:' is -used for it. +appends the suffix `.awk' to the file name and retries the file search. +If `AWK_LIBRARY' has no definition, a default value of `SYS$LIBRARY:' +is used for it.  File: gawk.info, Node: VMS Running, Next: VMS GNV, Prev: VMS Installation Details, Up: VMS Installation @@ -28581,7 +28586,7 @@ provided: hook into input processing, output processing, and two-way I/O. * An extension should be able to provide a "call back" function to - perform clean up actions when `gawk' exits. + perform cleanup actions when `gawk' exits. * An extension should be able to provide a version string so that `gawk''s `--version' option can provide information about @@ -30740,7 +30745,7 @@ Index * Menu: * ! (exclamation point), ! operator: Boolean Ops. (line 67) -* ! (exclamation point), ! operator <1>: Egrep Program. (line 174) +* ! (exclamation point), ! operator <1>: Egrep Program. (line 175) * ! (exclamation point), ! operator <2>: Ranges. (line 48) * ! (exclamation point), ! operator: Precedence. (line 52) * ! (exclamation point), != operator <1>: Precedence. (line 65) @@ -30935,7 +30940,7 @@ Index * > (right angle bracket), >= operator: Comparison Operators. (line 11) * > (right angle bracket), >> operator (I/O) <1>: Precedence. (line 65) -* > (right angle bracket), >> operator (I/O): Redirection. (line 49) +* > (right angle bracket), >> operator (I/O): Redirection. (line 50) * ? (question mark), ?: operator: Precedence. (line 92) * ? (question mark), regexp operator <1>: GNU Regexp Operators. (line 59) @@ -30976,7 +30981,7 @@ Index (line 38) * \ (backslash), as field separator: Command Line Field Separator. (line 27) -* \ (backslash), continuing lines and <1>: Egrep Program. (line 222) +* \ (backslash), continuing lines and <1>: Egrep Program. (line 223) * \ (backslash), continuing lines and: Statements/Lines. (line 19) * \ (backslash), continuing lines and, comments and: Statements/Lines. (line 76) @@ -31183,7 +31188,7 @@ Index * awk, gawk and <1>: This Manual. (line 14) * awk, gawk and: Preface. (line 23) * awk, history of: History. (line 17) -* awk, implementation issues, pipes: Redirection. (line 134) +* awk, implementation issues, pipes: Redirection. (line 135) * awk, implementations: Other Versions. (line 6) * awk, implementations, limits: Getline Notes. (line 14) * awk, invoking: Command Line. (line 6) @@ -31250,7 +31255,7 @@ Index (line 38) * backslash (\), as field separator: Command Line Field Separator. (line 27) -* backslash (\), continuing lines and <1>: Egrep Program. (line 222) +* backslash (\), continuing lines and <1>: Egrep Program. (line 223) * backslash (\), continuing lines and: Statements/Lines. (line 19) * backslash (\), continuing lines and, comments and: Statements/Lines. (line 76) @@ -31561,7 +31566,7 @@ Index (line 6) * cookie: Glossary. (line 149) * coprocesses <1>: Two-way I/O. (line 44) -* coprocesses: Redirection. (line 101) +* coprocesses: Redirection. (line 102) * coprocesses, closing: Close Files And Pipes. (line 6) * coprocesses, getline from: Getline/Coprocess. (line 6) @@ -31604,9 +31609,9 @@ Index * dark corner, exit statement: Exit Statement. (line 30) * dark corner, field separators: Field Splitting Summary. (line 46) -* dark corner, FILENAME variable <1>: Auto-set. (line 89) +* dark corner, FILENAME variable <1>: Auto-set. (line 90) * dark corner, FILENAME variable: Getline Notes. (line 19) -* dark corner, FNR/NR variables: Auto-set. (line 300) +* dark corner, FNR/NR variables: Auto-set. (line 301) * dark corner, format-control characters: Control Letters. (line 18) * dark corner, FS as null string: Single Character Fields. (line 20) @@ -31790,25 +31795,25 @@ Index (line 81) * differences in awk and gawk, command line directories: Command line directories. (line 6) -* differences in awk and gawk, ERRNO variable: Auto-set. (line 73) +* differences in awk and gawk, ERRNO variable: Auto-set. (line 74) * differences in awk and gawk, error messages: Special FD. (line 16) * 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 114) +* differences in awk and gawk, FUNCTAB variable: Auto-set. (line 115) * differences in awk and gawk, function arguments (gawk): Calling Built-in. (line 16) * differences in awk and gawk, getline command: Getline. (line 19) * differences in awk and gawk, IGNORECASE variable: User-modified. (line 76) * differences in awk and gawk, implementation limitations <1>: Redirection. - (line 134) + (line 135) * differences in awk and gawk, implementation limitations: Getline Notes. (line 14) * differences in awk and gawk, indirect function calls: Indirect Calls. (line 6) * differences in awk and gawk, input/output operators <1>: Redirection. - (line 101) + (line 102) * differences in awk and gawk, input/output operators: Getline/Coprocess. (line 6) * differences in awk and gawk, line continuations: Conditional Exp. @@ -31818,7 +31823,7 @@ Index (line 260) * differences in awk and gawk, print/printf statements: Format Modifiers. (line 13) -* differences in awk and gawk, PROCINFO array: Auto-set. (line 127) +* differences in awk and gawk, PROCINFO array: Auto-set. (line 128) * differences in awk and gawk, read timeouts: Read Timeout. (line 6) * differences in awk and gawk, record separators: awk split records. (line 124) @@ -31828,7 +31833,7 @@ Index (line 26) * differences in awk and gawk, RS/RT variables: gawk split records. (line 58) -* differences in awk and gawk, RT variable: Auto-set. (line 256) +* differences in awk and gawk, RT variable: Auto-set. (line 257) * differences in awk and gawk, single-character fields: Single Character Fields. (line 6) * differences in awk and gawk, split() function: String Functions. @@ -31836,7 +31841,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 260) +* differences in awk and gawk, SYMTAB variable: Auto-set. (line 261) * differences in awk and gawk, TEXTDOMAIN variable: User-modified. (line 152) * differences in awk and gawk, trunc-mod operation: Arithmetic Ops. @@ -31877,11 +31882,11 @@ 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 132) -* effective user ID of gawk user: Auto-set. (line 136) +* effective group ID of gawk user: Auto-set. (line 133) +* effective user ID of gawk user: Auto-set. (line 137) * egrep utility <1>: Egrep Program. (line 6) * egrep utility: Bracket Expressions. (line 24) -* egrep.awk program: Egrep Program. (line 53) +* egrep.awk program: Egrep Program. (line 54) * elements in arrays, assigning values: Assigning Elements. (line 6) * elements in arrays, deleting: Delete. (line 6) * elements in arrays, order of access by in operator: Scanning an Array. @@ -31906,7 +31911,7 @@ Index * END pattern, and profiling: Profiling. (line 62) * END pattern, assert() user-defined function and: Assert Function. (line 75) -* END pattern, backslash continuation and: Egrep Program. (line 222) +* END pattern, backslash continuation and: Egrep Program. (line 223) * 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. @@ -31923,10 +31928,10 @@ Index * endpwent() function (C library): Passwd Functions. (line 210) * endpwent() user-defined function: Passwd Functions. (line 213) * English, Steve: Advanced Features. (line 6) -* ENVIRON array: Auto-set. (line 59) +* ENVIRON array: Auto-set. (line 60) * environment variables used by gawk: Environment Variables. (line 6) -* environment variables, in ENVIRON array: Auto-set. (line 59) +* environment variables, in ENVIRON array: Auto-set. (line 60) * epoch, definition of: Glossary. (line 234) * equals sign (=), = operator: Assignment Ops. (line 6) * equals sign (=), == operator <1>: Precedence. (line 65) @@ -31934,13 +31939,13 @@ Index (line 11) * EREs (Extended Regular Expressions): Bracket Expressions. (line 24) * ERRNO variable <1>: TCP/IP Networking. (line 54) -* ERRNO variable: Auto-set. (line 73) +* ERRNO variable: Auto-set. (line 74) * ERRNO variable, with BEGINFILE pattern: BEGINFILE/ENDFILE. (line 26) * ERRNO variable, with close() function: Close Files And Pipes. (line 139) * ERRNO variable, with getline command: Getline. (line 19) * error handling: Special FD. (line 16) -* error handling, ERRNO variable and: Auto-set. (line 73) +* error handling, ERRNO variable and: Auto-set. (line 74) * error output: Special FD. (line 6) * escape processing, gsub()/gensub()/sub() functions: Gory Details. (line 6) @@ -31953,7 +31958,7 @@ Index * evaluation order, concatenation: Concatenation. (line 41) * evaluation order, functions: Calling Built-in. (line 30) * examining fields: Fields. (line 6) -* exclamation point (!), ! operator <1>: Egrep Program. (line 174) +* exclamation point (!), ! operator <1>: Egrep Program. (line 175) * exclamation point (!), ! operator <2>: Precedence. (line 52) * exclamation point (!), ! operator: Boolean Ops. (line 67) * exclamation point (!), != operator <1>: Precedence. (line 65) @@ -31994,7 +31999,7 @@ Index (line 6) * extension API version: Extension Versioning. (line 6) -* extension API, version number: Auto-set. (line 223) +* extension API, version number: Auto-set. (line 224) * extension example: Extension Example. (line 6) * extension registration: Registration Functions. (line 6) @@ -32070,10 +32075,10 @@ Index * FIELDWIDTHS variable <1>: User-modified. (line 37) * FIELDWIDTHS variable: Constant Size. (line 23) * file descriptors: Special FD. (line 6) -* file names, distinguishing: Auto-set. (line 55) +* 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 46) -* FILENAME variable <1>: Auto-set. (line 89) +* FILENAME variable <1>: Auto-set. (line 90) * FILENAME variable: Reading Files. (line 6) * FILENAME variable, getline, setting with: Getline Notes. (line 19) * filenames, assignments as: Ignoring Assigns. (line 6) @@ -32119,7 +32124,7 @@ Index * files, portable object, converting to message object files: I18N Example. (line 63) * files, portable object, generating: Options. (line 147) -* files, processing, ARGIND variable and: Auto-set. (line 50) +* files, processing, ARGIND variable and: Auto-set. (line 51) * files, reading: Rewind Function. (line 6) * files, reading, multiline records: Multiple Line. (line 6) * files, searching for regular expressions: Egrep Program. (line 6) @@ -32143,9 +32148,9 @@ Index * flush buffered output: I/O Functions. (line 28) * fnmatch() extension function: Extension Sample Fnmatch. (line 12) -* FNR variable <1>: Auto-set. (line 98) +* FNR variable <1>: Auto-set. (line 99) * FNR variable: Records. (line 6) -* FNR variable, changing: Auto-set. (line 300) +* FNR variable, changing: Auto-set. (line 301) * for statement: For Statement. (line 6) * for statement, looping over arrays: Scanning an Array. (line 20) * fork() extension function: Extension Sample Fork. @@ -32195,7 +32200,7 @@ Index * FSF (Free Software Foundation): Manual History. (line 6) * fts() extension function: Extension Sample File Functions. (line 61) -* FUNCTAB array: Auto-set. (line 114) +* FUNCTAB array: Auto-set. (line 115) * function calls: Function Calls. (line 6) * function calls, indirect: Indirect Calls. (line 6) * function definition example: Function Example. (line 6) @@ -32245,7 +32250,7 @@ Index * G-d: Acknowledgments. (line 78) * Garfinkle, Scott: Contributors. (line 34) * gawk program, dynamic profiling: Profiling. (line 179) -* gawk version: Auto-set. (line 198) +* gawk version: Auto-set. (line 199) * gawk, ARGIND variable in: Other Arguments. (line 12) * gawk, awk and <1>: This Manual. (line 14) * gawk, awk and: Preface. (line 23) @@ -32266,7 +32271,7 @@ Index * gawk, distribution: Distribution contents. (line 6) * gawk, ERRNO variable in <1>: TCP/IP Networking. (line 54) -* gawk, ERRNO variable in <2>: Auto-set. (line 73) +* gawk, ERRNO variable in <2>: Auto-set. (line 74) * gawk, ERRNO variable in <3>: BEGINFILE/ENDFILE. (line 26) * gawk, ERRNO variable in <4>: Close Files And Pipes. (line 139) @@ -32283,7 +32288,7 @@ Index * gawk, FPAT variable in <1>: User-modified. (line 43) * gawk, FPAT variable in: Splitting By Content. (line 27) -* gawk, FUNCTAB array in: Auto-set. (line 114) +* gawk, FUNCTAB array in: Auto-set. (line 115) * 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. @@ -32297,7 +32302,7 @@ Index * gawk, implementation issues, downward compatibility: Compatibility Mode. (line 6) * gawk, implementation issues, limits: Getline Notes. (line 14) -* gawk, implementation issues, pipes: Redirection. (line 134) +* gawk, implementation issues, pipes: Redirection. (line 135) * gawk, installing: Installation. (line 6) * gawk, internationalization and, See internationalization: Internationalization. (line 13) @@ -32314,7 +32319,7 @@ Index * gawk, OS/2 version of: PC Using. (line 16) * gawk, PROCINFO array in <1>: Two-way I/O. (line 117) * gawk, PROCINFO array in <2>: Time Functions. (line 47) -* gawk, PROCINFO array in: Auto-set. (line 127) +* gawk, PROCINFO array in: Auto-set. (line 128) * gawk, regexp constants and: Using Constant Regexps. (line 28) * gawk, regular expressions, case sensitivity: Case-sensitivity. @@ -32322,14 +32327,14 @@ Index * gawk, regular expressions, operators: GNU Regexp Operators. (line 6) * gawk, regular expressions, precedence: Regexp Operators. (line 162) -* gawk, RT variable in <1>: Auto-set. (line 256) +* gawk, RT variable in <1>: Auto-set. (line 257) * gawk, RT variable in <2>: Multiple Line. (line 129) * gawk, RT variable in: awk split records. (line 124) * gawk, See Also awk: Preface. (line 36) * gawk, source code, obtaining: Getting. (line 6) * gawk, splitting fields and: Constant Size. (line 88) * gawk, string-translation functions: I18N Functions. (line 6) -* gawk, SYMTAB array in: Auto-set. (line 260) +* gawk, SYMTAB array in: Auto-set. (line 261) * gawk, TEXTDOMAIN variable in: User-modified. (line 152) * gawk, timestamps: Time Functions. (line 6) * gawk, uses for: Preface. (line 36) @@ -32416,7 +32421,7 @@ Index * 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 171) +* group ID of gawk user: Auto-set. (line 172) * groups, information about: Group Functions. (line 6) * gsub <1>: String Functions. (line 139) * gsub: Using Constant Regexps. @@ -32469,7 +32474,7 @@ Index * Illumos, POSIX-compliant awk: Other Versions. (line 105) * implementation issues, gawk: Notes. (line 6) * implementation issues, gawk, debugging: Compatibility Mode. (line 6) -* implementation issues, gawk, limits <1>: Redirection. (line 134) +* implementation issues, gawk, limits <1>: Redirection. (line 135) * implementation issues, gawk, limits: Getline Notes. (line 14) * in operator <1>: For Statement. (line 75) * in operator <2>: Precedence. (line 83) @@ -32713,7 +32718,7 @@ Index * mawk utility <3>: Concatenation. (line 36) * mawk utility <4>: Getline/Pipe. (line 62) * mawk utility: Escape Sequences. (line 124) -* maximum precision supported by MPFR library: Auto-set. (line 212) +* maximum precision supported by MPFR library: Auto-set. (line 213) * McIlroy, Doug: Glossary. (line 149) * McPhee, Patrick: Contributors. (line 100) * message object files: Explaining gettext. (line 42) @@ -32726,7 +32731,7 @@ Index * messages from extensions: Printing Messages. (line 6) * metacharacters in regular expressions: Regexp Operators. (line 6) * metacharacters, escape sequences for: Escape Sequences. (line 130) -* minimum precision supported by MPFR library: Auto-set. (line 215) +* minimum precision supported by MPFR library: Auto-set. (line 216) * mktime: Time Functions. (line 25) * modifiers, in format specifiers: Format Modifiers. (line 6) * monetary information, localization: Explaining gettext. (line 104) @@ -32780,7 +32785,7 @@ Index (line 47) * nexti debugger command: Debugger Execution Control. (line 49) -* NF variable <1>: Auto-set. (line 103) +* NF variable <1>: Auto-set. (line 104) * NF variable: Fields. (line 33) * NF variable, decrementing: Changing Fields. (line 107) * ni debugger command (alias for nexti): Debugger Execution Control. @@ -32789,9 +32794,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 122) +* NR variable <1>: Auto-set. (line 123) * NR variable: Records. (line 6) -* NR variable, changing: Auto-set. (line 300) +* NR variable, changing: Auto-set. (line 301) * null strings <1>: Basic Data Typing. (line 26) * null strings <2>: Truth Values. (line 6) * null strings <3>: Regexp Field Splitting. @@ -32899,14 +32904,14 @@ Index (line 6) * output, format specifier, OFMT: OFMT. (line 15) * output, formatted: Printf. (line 6) -* output, pipes: Redirection. (line 56) +* output, pipes: Redirection. (line 57) * output, printing, See printing: Printing. (line 6) * output, records: Output Separators. (line 20) * output, standard: Special FD. (line 6) * p debugger command (alias for print): Viewing And Changing Data. (line 36) * Papadopoulos, Panos: Contributors. (line 129) -* parent process ID of gawk process: Auto-set. (line 180) +* parent process ID of gawk process: Auto-set. (line 181) * parentheses (), in a profile: Profiling. (line 146) * parentheses (), regexp operator: Regexp Operators. (line 80) * password file: Passwd Functions. (line 16) @@ -32936,7 +32941,7 @@ Index * pipe, closing: Close Files And Pipes. (line 6) * pipe, input: Getline/Pipe. (line 9) -* pipe, output: Redirection. (line 56) +* pipe, output: Redirection. (line 57) * Pitts, Dave <1>: Bugs. (line 71) * Pitts, Dave: Acknowledgments. (line 60) * Plauger, P.J.: Library Functions. (line 12) @@ -33071,24 +33076,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 174) -* process ID of gawk process: Auto-set. (line 177) +* process group idIDof gawk process: Auto-set. (line 175) +* process ID of gawk process: Auto-set. (line 178) * processes, two-way communications with: Two-way I/O. (line 23) * 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 127) +* PROCINFO array: Auto-set. (line 128) * PROCINFO array, and communications via ptys: Two-way I/O. (line 117) * 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 161) -* PROCINFO array, uses: Auto-set. (line 233) +* PROCINFO array, uses: Auto-set. (line 234) * PROCINFO, values of sorted_in: Controlling Scanning. (line 26) * profiling awk programs: Profiling. (line 6) * profiling awk programs, dynamically: Profiling. (line 179) -* program identifiers: Auto-set. (line 145) +* program identifiers: Auto-set. (line 146) * program, definition of: Getting Started. (line 21) * programmers, attractiveness of: Two-way I/O. (line 6) * programming conventions, --non-decimal-data option: Nondecimal Data. @@ -33244,11 +33249,11 @@ Index * right angle bracket (>), >= operator: Comparison Operators. (line 11) * right angle bracket (>), >> operator (I/O) <1>: Precedence. (line 65) -* right angle bracket (>), >> operator (I/O): Redirection. (line 49) +* right angle bracket (>), >> operator (I/O): Redirection. (line 50) * right shift: Bitwise Functions. (line 52) * right shift, bitwise: Bitwise Functions. (line 32) * Ritchie, Dennis: Basic Data Typing. (line 54) -* RLENGTH variable: Auto-set. (line 243) +* RLENGTH variable: Auto-set. (line 244) * RLENGTH variable, match() function and: String Functions. (line 224) * Robbins, Arnold <1>: Future Extensions. (line 6) * Robbins, Arnold <2>: Bugs. (line 32) @@ -33277,9 +33282,9 @@ Index * RS variable: awk split records. (line 12) * RS variable, multiline records and: Multiple Line. (line 17) * rshift: Bitwise Functions. (line 52) -* RSTART variable: Auto-set. (line 249) +* RSTART variable: Auto-set. (line 250) * RSTART variable, match() function and: String Functions. (line 224) -* RT variable <1>: Auto-set. (line 256) +* RT variable <1>: Auto-set. (line 257) * RT variable <2>: Multiple Line. (line 129) * RT variable: awk split records. (line 124) * Rubin, Paul <1>: Contributors. (line 15) @@ -33299,7 +33304,7 @@ Index * scanning arrays: Scanning an Array. (line 6) * scanning multidimensional arrays: Multiscanning. (line 11) * Schorr, Andrew <1>: Contributors. (line 134) -* Schorr, Andrew <2>: Auto-set. (line 283) +* Schorr, Andrew <2>: Auto-set. (line 284) * Schorr, Andrew: Acknowledgments. (line 60) * Schreiber, Bert: Acknowledgments. (line 38) * Schreiber, Rita: Acknowledgments. (line 38) @@ -33349,7 +33354,7 @@ Index * shadowing of variable values: Definition Syntax. (line 61) * shell quoting, double quote: Read Terminal. (line 25) * shell quoting, rules for: Quoting. (line 6) -* shells, piping commands into: Redirection. (line 141) +* shells, piping commands into: Redirection. (line 142) * shells, quoting: Using Shell Variables. (line 12) * shells, quoting, rules for: Quoting. (line 18) @@ -33387,7 +33392,7 @@ Index (line 110) * sidebar, Changing FS Does Not Affect the Fields: Field Splitting Summary. (line 38) -* sidebar, Changing NR and FNR: Auto-set. (line 298) +* sidebar, Changing NR and FNR: Auto-set. (line 299) * sidebar, Controlling Output Buffering with system(): I/O Functions. (line 138) * sidebar, Escape Sequences for Metacharacters: Escape Sequences. @@ -33398,7 +33403,7 @@ Index (line 107) * sidebar, Matching the Null String: Gory Details. (line 162) * sidebar, Operator Evaluation Order: Increment Ops. (line 58) -* sidebar, Piping into sh: Redirection. (line 139) +* sidebar, Piping into sh: Redirection. (line 140) * sidebar, Portability Issues with #!: Executable Scripts. (line 31) * sidebar, Recipe For A Programming Language: History. (line 6) * sidebar, RS = "\0" Is Not Portable: gawk split records. (line 63) @@ -33549,9 +33554,9 @@ Index * substr: String Functions. (line 479) * substring: String Functions. (line 479) * Sumner, Andrew: Other Versions. (line 64) -* supplementary groups of gawk process: Auto-set. (line 228) +* supplementary groups of gawk process: Auto-set. (line 229) * switch statement: Switch Statement. (line 6) -* SYMTAB array: Auto-set. (line 260) +* SYMTAB array: Auto-set. (line 261) * syntactic ambiguity: /= operator vs. /=.../ regexp constant: Assignment Ops. (line 148) * system: I/O Functions. (line 75) @@ -33635,7 +33640,7 @@ Index * troubleshooting, match() function: String Functions. (line 289) * troubleshooting, print statement, omitting commas: Print Examples. (line 31) -* troubleshooting, printing: Redirection. (line 117) +* troubleshooting, printing: Redirection. (line 118) * troubleshooting, quotes with file names: Special FD. (line 68) * troubleshooting, readable data files: File Checking. (line 6) * troubleshooting, regexp constants vs. string constants: Computed Regexps. @@ -33729,10 +33734,10 @@ Index * variables, uninitialized, as array subscripts: Uninitialized Subscripts. (line 6) * variables, user-defined: Variables. (line 6) -* version of gawk: Auto-set. (line 198) -* version of gawk extension API: Auto-set. (line 223) -* version of GNU MP library: Auto-set. (line 209) -* version of GNU MPFR library: Auto-set. (line 205) +* version of gawk: Auto-set. (line 199) +* version of gawk extension API: Auto-set. (line 224) +* version of GNU MP library: Auto-set. (line 210) +* version of GNU MPFR library: Auto-set. (line 206) * vertical bar (|): Regexp Operators. (line 70) * vertical bar (|), | operator (I/O) <1>: Precedence. (line 65) * vertical bar (|), | operator (I/O): Getline/Pipe. (line 9) @@ -33797,11 +33802,11 @@ Index * {} (braces), statements, grouping: Statements. (line 10) * | (vertical bar): Regexp Operators. (line 70) * | (vertical bar), | operator (I/O) <1>: Precedence. (line 65) -* | (vertical bar), | operator (I/O) <2>: Redirection. (line 56) +* | (vertical bar), | operator (I/O) <2>: Redirection. (line 57) * | (vertical bar), | operator (I/O): Getline/Pipe. (line 9) * | (vertical bar), |& operator (I/O) <1>: Two-way I/O. (line 44) * | (vertical bar), |& operator (I/O) <2>: Precedence. (line 65) -* | (vertical bar), |& operator (I/O) <3>: Redirection. (line 101) +* | (vertical bar), |& operator (I/O) <3>: Redirection. (line 102) * | (vertical bar), |& operator (I/O): Getline/Coprocess. (line 6) * | (vertical bar), |& operator (I/O), pipes, closing: Close Files And Pipes. (line 119) @@ -33842,529 +33847,529 @@ Node: Read Terminal74778 Ref: Read Terminal-Footnote-176428 Ref: Read Terminal-Footnote-276704 Node: Long76875 -Node: Executable Scripts78223 -Ref: Executable Scripts-Footnote-180056 -Ref: Executable Scripts-Footnote-280158 -Node: Comments80691 -Node: Quoting83158 -Node: DOS Quoting88467 -Node: Sample Data Files89142 -Node: Very Simple91657 -Node: Two Rules96288 -Node: More Complex98183 -Ref: More Complex-Footnote-1101108 -Node: Statements/Lines101193 -Ref: Statements/Lines-Footnote-1105648 -Node: Other Features105913 -Node: When106841 -Node: Intro Summary109011 -Node: Invoking Gawk109777 -Node: Command Line111292 -Node: Options112083 -Ref: Options-Footnote-1127867 -Node: Other Arguments127892 -Node: Naming Standard Input130533 -Node: Environment Variables131613 -Node: AWKPATH Variable132171 -Ref: AWKPATH Variable-Footnote-1135022 -Ref: AWKPATH Variable-Footnote-2135067 -Node: AWKLIBPATH Variable135327 -Node: Other Environment Variables136086 -Node: Exit Status139741 -Node: Include Files140416 -Node: Loading Shared Libraries143980 -Node: Obsolete145364 -Node: Undocumented146061 -Node: Invoking Summary146328 -Node: Regexp147908 -Node: Regexp Usage149358 -Node: Escape Sequences151391 -Node: Regexp Operators157058 -Ref: Regexp Operators-Footnote-1164538 -Ref: Regexp Operators-Footnote-2164685 -Node: Bracket Expressions164783 -Ref: table-char-classes166673 -Node: GNU Regexp Operators169196 -Node: Case-sensitivity172919 -Ref: Case-sensitivity-Footnote-1175811 -Ref: Case-sensitivity-Footnote-2176046 -Node: Leftmost Longest176154 -Node: Computed Regexps177355 -Node: Regexp Summary180727 -Node: Reading Files182199 -Node: Records184248 -Node: awk split records184991 -Node: gawk split records189849 -Ref: gawk split records-Footnote-1194370 -Node: Fields194407 -Ref: Fields-Footnote-1197371 -Node: Nonconstant Fields197457 -Ref: Nonconstant Fields-Footnote-1199687 -Node: Changing Fields199889 -Node: Field Separators205843 -Node: Default Field Splitting208545 -Node: Regexp Field Splitting209662 -Node: Single Character Fields213003 -Node: Command Line Field Separator214062 -Node: Full Line Fields217404 -Ref: Full Line Fields-Footnote-1217912 -Node: Field Splitting Summary217958 -Ref: Field Splitting Summary-Footnote-1221057 -Node: Constant Size221158 -Node: Splitting By Content225765 -Ref: Splitting By Content-Footnote-1229515 -Node: Multiple Line229555 -Ref: Multiple Line-Footnote-1235411 -Node: Getline235590 -Node: Plain Getline237806 -Node: Getline/Variable239901 -Node: Getline/File241048 -Node: Getline/Variable/File242424 -Ref: Getline/Variable/File-Footnote-1244023 -Node: Getline/Pipe244110 -Node: Getline/Variable/Pipe246809 -Node: Getline/Coprocess247916 -Node: Getline/Variable/Coprocess249168 -Node: Getline Notes249905 -Node: Getline Summary252709 -Ref: table-getline-variants253117 -Node: Read Timeout254029 -Ref: Read Timeout-Footnote-1257856 -Node: Command line directories257914 -Node: Input Summary258818 -Node: Printing261932 -Node: Print263604 -Node: Print Examples264945 -Node: Output Separators267724 -Node: OFMT269740 -Node: Printf271098 -Node: Basic Printf272004 -Node: Control Letters273543 -Node: Format Modifiers277397 -Node: Printf Examples283424 -Node: Redirection286131 -Node: Special Files293078 -Node: Special FD293594 -Ref: Special FD-Footnote-1297169 -Node: Special Network297243 -Node: Special Caveats298079 -Node: Close Files And Pipes298854 -Ref: Close Files And Pipes-Footnote-1305993 -Ref: Close Files And Pipes-Footnote-2306141 -Node: Output Summary306291 -Node: Expressions307263 -Node: Values308448 -Node: Constants309124 -Node: Scalar Constants309804 -Ref: Scalar Constants-Footnote-1310663 -Node: Nondecimal-numbers310913 -Node: Regexp Constants313913 -Node: Using Constant Regexps314388 -Node: Variables317458 -Node: Using Variables318113 -Node: Assignment Options319837 -Node: Conversion321704 -Ref: table-locale-affects327140 -Ref: Conversion-Footnote-1327764 -Node: All Operators327873 -Node: Arithmetic Ops328503 -Node: Concatenation331008 -Ref: Concatenation-Footnote-1333804 -Node: Assignment Ops333924 -Ref: table-assign-ops338907 -Node: Increment Ops340224 -Node: Truth Values and Conditions343662 -Node: Truth Values344745 -Node: Typing and Comparison345794 -Node: Variable Typing346587 -Ref: Variable Typing-Footnote-1350487 -Node: Comparison Operators350609 -Ref: table-relational-ops351019 -Node: POSIX String Comparison354569 -Ref: POSIX String Comparison-Footnote-1355653 -Node: Boolean Ops355791 -Ref: Boolean Ops-Footnote-1359861 -Node: Conditional Exp359952 -Node: Function Calls361679 -Node: Precedence365437 -Node: Locales369106 -Node: Expressions Summary370737 -Node: Patterns and Actions373234 -Node: Pattern Overview374350 -Node: Regexp Patterns376027 -Node: Expression Patterns376570 -Node: Ranges380351 -Node: BEGIN/END383457 -Node: Using BEGIN/END384219 -Ref: Using BEGIN/END-Footnote-1386955 -Node: I/O And BEGIN/END387061 -Node: BEGINFILE/ENDFILE389346 -Node: Empty392277 -Node: Using Shell Variables392594 -Node: Action Overview394877 -Node: Statements397204 -Node: If Statement399052 -Node: While Statement400550 -Node: Do Statement402594 -Node: For Statement403750 -Node: Switch Statement406902 -Node: Break Statement409005 -Node: Continue Statement411060 -Node: Next Statement412853 -Node: Nextfile Statement415243 -Node: Exit Statement417898 -Node: Built-in Variables420302 -Node: User-modified421429 -Ref: User-modified-Footnote-1429114 -Node: Auto-set429176 -Ref: Auto-set-Footnote-1441722 -Ref: Auto-set-Footnote-2441927 -Node: ARGC and ARGV441983 -Node: Pattern Action Summary445822 -Node: Arrays448045 -Node: Array Basics449594 -Node: Array Intro450420 -Ref: figure-array-elements452393 -Node: Reference to Elements454800 -Node: Assigning Elements457073 -Node: Array Example457564 -Node: Scanning an Array459296 -Node: Controlling Scanning462311 -Ref: Controlling Scanning-Footnote-1467484 -Node: Delete467800 -Ref: Delete-Footnote-1470565 -Node: Numeric Array Subscripts470622 -Node: Uninitialized Subscripts472805 -Node: Multidimensional474430 -Node: Multiscanning477523 -Node: Arrays of Arrays479112 -Node: Arrays Summary483775 -Node: Functions485880 -Node: Built-in486753 -Node: Calling Built-in487831 -Node: Numeric Functions489819 -Ref: Numeric Functions-Footnote-1493653 -Ref: Numeric Functions-Footnote-2494010 -Ref: Numeric Functions-Footnote-3494058 -Node: String Functions494327 -Ref: String Functions-Footnote-1517338 -Ref: String Functions-Footnote-2517467 -Ref: String Functions-Footnote-3517715 -Node: Gory Details517802 -Ref: table-sub-escapes519471 -Ref: table-sub-posix-92520825 -Ref: table-sub-proposed522176 -Ref: table-posix-sub523530 -Ref: table-gensub-escapes525075 -Ref: Gory Details-Footnote-1526251 -Ref: Gory Details-Footnote-2526302 -Node: I/O Functions526453 -Ref: I/O Functions-Footnote-1533576 -Node: Time Functions533723 -Ref: Time Functions-Footnote-1544187 -Ref: Time Functions-Footnote-2544255 -Ref: Time Functions-Footnote-3544413 -Ref: Time Functions-Footnote-4544524 -Ref: Time Functions-Footnote-5544636 -Ref: Time Functions-Footnote-6544863 -Node: Bitwise Functions545129 -Ref: table-bitwise-ops545691 -Ref: Bitwise Functions-Footnote-1549936 -Node: Type Functions550120 -Node: I18N Functions551262 -Node: User-defined552907 -Node: Definition Syntax553711 -Ref: Definition Syntax-Footnote-1558636 -Node: Function Example558705 -Ref: Function Example-Footnote-1561349 -Node: Function Caveats561371 -Node: Calling A Function561889 -Node: Variable Scope562844 -Node: Pass By Value/Reference565832 -Node: Return Statement569340 -Node: Dynamic Typing572324 -Node: Indirect Calls573253 -Node: Functions Summary582966 -Node: Library Functions585505 -Ref: Library Functions-Footnote-1589080 -Ref: Library Functions-Footnote-2589223 -Node: Library Names589394 -Ref: Library Names-Footnote-1592867 -Ref: Library Names-Footnote-2593087 -Node: General Functions593173 -Node: Strtonum Function594201 -Node: Assert Function597131 -Node: Round Function600457 -Node: Cliff Random Function601998 -Node: Ordinal Functions603014 -Ref: Ordinal Functions-Footnote-1606091 -Ref: Ordinal Functions-Footnote-2606343 -Node: Join Function606554 -Ref: Join Function-Footnote-1608325 -Node: Getlocaltime Function608525 -Node: Readfile Function612261 -Node: Data File Management614100 -Node: Filetrans Function614732 -Node: Rewind Function618787 -Node: File Checking620174 -Ref: File Checking-Footnote-1621306 -Node: Empty Files621507 -Node: Ignoring Assigns623730 -Node: Getopt Function625263 -Ref: Getopt Function-Footnote-1636559 -Node: Passwd Functions636762 -Ref: Passwd Functions-Footnote-1645741 -Node: Group Functions645829 -Ref: Group Functions-Footnote-1653771 -Node: Walking Arrays653984 -Node: Library Functions Summary656154 -Node: Sample Programs657516 -Node: Running Examples658243 -Node: Clones658971 -Node: Cut Program660195 -Node: Egrep Program670056 -Ref: Egrep Program-Footnote-1677985 -Node: Id Program678095 -Node: Split Program681759 -Ref: Split Program-Footnote-1685290 -Node: Tee Program685418 -Node: Uniq Program688225 -Node: Wc Program695655 -Ref: Wc Program-Footnote-1699923 -Ref: Wc Program-Footnote-2700123 -Node: Miscellaneous Programs700215 -Node: Dupword Program701428 -Node: Alarm Program703459 -Node: Translate Program708273 -Ref: Translate Program-Footnote-1712664 -Ref: Translate Program-Footnote-2712934 -Node: Labels Program713068 -Ref: Labels Program-Footnote-1716439 -Node: Word Sorting716523 -Node: History Sorting720566 -Node: Extract Program722402 -Ref: Extract Program-Footnote-1729977 -Node: Simple Sed730106 -Node: Igawk Program733168 -Ref: Igawk Program-Footnote-1748344 -Ref: Igawk Program-Footnote-2748545 -Node: Anagram Program748683 -Node: Signature Program751751 -Node: Programs Summary752998 -Node: Advanced Features754186 -Node: Nondecimal Data756134 -Node: Array Sorting757711 -Node: Controlling Array Traversal758408 -Node: Array Sorting Functions766688 -Ref: Array Sorting Functions-Footnote-1770595 -Node: Two-way I/O770789 -Ref: Two-way I/O-Footnote-1776305 -Node: TCP/IP Networking776387 -Node: Profiling779231 -Node: Advanced Features Summary786773 -Node: Internationalization788637 -Node: I18N and L10N790117 -Node: Explaining gettext790803 -Ref: Explaining gettext-Footnote-1795943 -Ref: Explaining gettext-Footnote-2796127 -Node: Programmer i18n796292 -Node: Translator i18n800517 -Node: String Extraction801311 -Ref: String Extraction-Footnote-1802272 -Node: Printf Ordering802358 -Ref: Printf Ordering-Footnote-1805140 -Node: I18N Portability805204 -Ref: I18N Portability-Footnote-1807653 -Node: I18N Example807716 -Ref: I18N Example-Footnote-1810438 -Node: Gawk I18N810510 -Node: I18N Summary811148 -Node: Debugger812487 -Node: Debugging813509 -Node: Debugging Concepts813950 -Node: Debugging Terms815806 -Node: Awk Debugging818403 -Node: Sample Debugging Session819295 -Node: Debugger Invocation819815 -Node: Finding The Bug821148 -Node: List of Debugger Commands827630 -Node: Breakpoint Control828962 -Node: Debugger Execution Control832626 -Node: Viewing And Changing Data835986 -Node: Execution Stack839344 -Node: Debugger Info840857 -Node: Miscellaneous Debugger Commands844851 -Node: Readline Support850035 -Node: Limitations850927 -Node: Debugging Summary853201 -Node: Arbitrary Precision Arithmetic854365 -Ref: Arbitrary Precision Arithmetic-Footnote-1856014 -Node: General Arithmetic856162 -Node: Floating Point Issues857882 -Node: String Conversion Precision858763 -Ref: String Conversion Precision-Footnote-1860468 -Node: Unexpected Results860577 -Node: POSIX Floating Point Problems862730 -Ref: POSIX Floating Point Problems-Footnote-1866551 -Node: Integer Programming866589 -Node: Floating-point Programming868400 -Ref: Floating-point Programming-Footnote-1874728 -Ref: Floating-point Programming-Footnote-2874998 -Node: Floating-point Representation875262 -Node: Floating-point Context876427 -Ref: table-ieee-formats877266 -Node: Rounding Mode878650 -Ref: table-rounding-modes879129 -Ref: Rounding Mode-Footnote-1882144 -Node: Gawk and MPFR882323 -Node: Arbitrary Precision Floats883732 -Ref: Arbitrary Precision Floats-Footnote-1886175 -Node: Setting Precision886496 -Ref: table-predefined-precision-strings887180 -Node: Setting Rounding Mode889325 -Ref: table-gawk-rounding-modes889729 -Node: Floating-point Constants890916 -Node: Changing Precision892368 -Ref: Changing Precision-Footnote-1893760 -Node: Exact Arithmetic893934 -Node: Arbitrary Precision Integers897068 -Ref: Arbitrary Precision Integers-Footnote-1900083 -Node: Dynamic Extensions900230 -Node: Extension Intro901688 -Node: Plugin License902953 -Node: Extension Mechanism Outline903638 -Ref: figure-load-extension904062 -Ref: figure-load-new-function905547 -Ref: figure-call-new-function906549 -Node: Extension API Description908533 -Node: Extension API Functions Introduction909983 -Node: General Data Types914849 -Ref: General Data Types-Footnote-1920542 -Node: Requesting Values920841 -Ref: table-value-types-returned921578 -Node: Memory Allocation Functions922536 -Ref: Memory Allocation Functions-Footnote-1925283 -Node: Constructor Functions925379 -Node: Registration Functions927137 -Node: Extension Functions927822 -Node: Exit Callback Functions930124 -Node: Extension Version String931374 -Node: Input Parsers932024 -Node: Output Wrappers941827 -Node: Two-way processors946343 -Node: Printing Messages948547 -Ref: Printing Messages-Footnote-1949624 -Node: Updating `ERRNO'949776 -Node: Accessing Parameters950515 -Node: Symbol Table Access951745 -Node: Symbol table by name952259 -Node: Symbol table by cookie954235 -Ref: Symbol table by cookie-Footnote-1958368 -Node: Cached values958431 -Ref: Cached values-Footnote-1961936 -Node: Array Manipulation962027 -Ref: Array Manipulation-Footnote-1963125 -Node: Array Data Types963164 -Ref: Array Data Types-Footnote-1965867 -Node: Array Functions965959 -Node: Flattening Arrays969833 -Node: Creating Arrays976685 -Node: Extension API Variables981416 -Node: Extension Versioning982052 -Node: Extension API Informational Variables983953 -Node: Extension API Boilerplate985039 -Node: Finding Extensions988843 -Node: Extension Example989403 -Node: Internal File Description990133 -Node: Internal File Ops994224 -Ref: Internal File Ops-Footnote-11005770 -Node: Using Internal File Ops1005910 -Ref: Using Internal File Ops-Footnote-11008257 -Node: Extension Samples1008525 -Node: Extension Sample File Functions1010049 -Node: Extension Sample Fnmatch1017617 -Node: Extension Sample Fork1019084 -Node: Extension Sample Inplace1020297 -Node: Extension Sample Ord1022063 -Node: Extension Sample Readdir1022899 -Ref: table-readdir-file-types1023748 -Node: Extension Sample Revout1024547 -Node: Extension Sample Rev2way1025138 -Node: Extension Sample Read write array1025879 -Node: Extension Sample Readfile1027758 -Node: Extension Sample API Tests1028858 -Node: Extension Sample Time1029383 -Node: gawkextlib1030698 -Node: Language History1033485 -Node: V7/SVR3.11035079 -Node: SVR41037399 -Node: POSIX1038841 -Node: BTL1040227 -Node: POSIX/GNU1040961 -Node: Feature History1046560 -Node: Common Extensions1059672 -Node: Ranges and Locales1060984 -Ref: Ranges and Locales-Footnote-11065601 -Ref: Ranges and Locales-Footnote-21065628 -Ref: Ranges and Locales-Footnote-31065862 -Node: Contributors1066083 -Node: Installation1071521 -Node: Gawk Distribution1072415 -Node: Getting1072899 -Node: Extracting1073725 -Node: Distribution contents1075367 -Node: Unix Installation1081084 -Node: Quick Installation1081701 -Node: Additional Configuration Options1084143 -Node: Configuration Philosophy1085881 -Node: Non-Unix Installation1088232 -Node: PC Installation1088690 -Node: PC Binary Installation1090001 -Node: PC Compiling1091849 -Ref: PC Compiling-Footnote-11094848 -Node: PC Testing1094953 -Node: PC Using1096129 -Node: Cygwin1100287 -Node: MSYS1101096 -Node: VMS Installation1101610 -Node: VMS Compilation1102406 -Ref: VMS Compilation-Footnote-11103621 -Node: VMS Dynamic Extensions1103679 -Node: VMS Installation Details1105052 -Node: VMS Running1107298 -Node: VMS GNV1110132 -Node: VMS Old Gawk1110855 -Node: Bugs1111325 -Node: Other Versions1115329 -Node: Notes1121554 -Node: Compatibility Mode1122354 -Node: Additions1123136 -Node: Accessing The Source1124061 -Node: Adding Code1125497 -Node: New Ports1131675 -Node: Derived Files1136156 -Ref: Derived Files-Footnote-11141237 -Ref: Derived Files-Footnote-21141271 -Ref: Derived Files-Footnote-31141867 -Node: Future Extensions1141981 -Node: Implementation Limitations1142587 -Node: Extension Design1143835 -Node: Old Extension Problems1144989 -Ref: Old Extension Problems-Footnote-11146506 -Node: Extension New Mechanism Goals1146563 -Ref: Extension New Mechanism Goals-Footnote-11149924 -Node: Extension Other Design Decisions1150113 -Node: Extension Future Growth1152219 -Node: Old Extension Mechanism1153055 -Node: Basic Concepts1154795 -Node: Basic High Level1155476 -Ref: figure-general-flow1155748 -Ref: figure-process-flow1156347 -Ref: Basic High Level-Footnote-11159576 -Node: Basic Data Typing1159761 -Node: Glossary1163088 -Node: Copying1188240 -Node: GNU Free Documentation License1225796 -Node: Index1250932 +Node: Executable Scripts78251 +Ref: Executable Scripts-Footnote-180084 +Ref: Executable Scripts-Footnote-280186 +Node: Comments80733 +Node: Quoting83200 +Node: DOS Quoting88516 +Node: Sample Data Files89191 +Node: Very Simple91706 +Node: Two Rules96344 +Node: More Complex98239 +Ref: More Complex-Footnote-1101171 +Node: Statements/Lines101256 +Ref: Statements/Lines-Footnote-1105711 +Node: Other Features105976 +Node: When106904 +Node: Intro Summary109074 +Node: Invoking Gawk109840 +Node: Command Line111355 +Node: Options112146 +Ref: Options-Footnote-1127958 +Node: Other Arguments127983 +Node: Naming Standard Input130645 +Node: Environment Variables131739 +Node: AWKPATH Variable132297 +Ref: AWKPATH Variable-Footnote-1135169 +Ref: AWKPATH Variable-Footnote-2135214 +Node: AWKLIBPATH Variable135474 +Node: Other Environment Variables136233 +Node: Exit Status139888 +Node: Include Files140563 +Node: Loading Shared Libraries144141 +Node: Obsolete145525 +Node: Undocumented146222 +Node: Invoking Summary146489 +Node: Regexp148069 +Node: Regexp Usage149519 +Node: Escape Sequences151552 +Node: Regexp Operators157219 +Ref: Regexp Operators-Footnote-1164699 +Ref: Regexp Operators-Footnote-2164846 +Node: Bracket Expressions164944 +Ref: table-char-classes166834 +Node: GNU Regexp Operators169357 +Node: Case-sensitivity173080 +Ref: Case-sensitivity-Footnote-1175972 +Ref: Case-sensitivity-Footnote-2176207 +Node: Leftmost Longest176315 +Node: Computed Regexps177516 +Node: Regexp Summary180888 +Node: Reading Files182360 +Node: Records184409 +Node: awk split records185152 +Node: gawk split records190010 +Ref: gawk split records-Footnote-1194531 +Node: Fields194568 +Ref: Fields-Footnote-1197532 +Node: Nonconstant Fields197618 +Ref: Nonconstant Fields-Footnote-1199848 +Node: Changing Fields200050 +Node: Field Separators206004 +Node: Default Field Splitting208706 +Node: Regexp Field Splitting209823 +Node: Single Character Fields213164 +Node: Command Line Field Separator214223 +Node: Full Line Fields217565 +Ref: Full Line Fields-Footnote-1218073 +Node: Field Splitting Summary218119 +Ref: Field Splitting Summary-Footnote-1221218 +Node: Constant Size221319 +Node: Splitting By Content225926 +Ref: Splitting By Content-Footnote-1229676 +Node: Multiple Line229716 +Ref: Multiple Line-Footnote-1235572 +Node: Getline235751 +Node: Plain Getline237967 +Node: Getline/Variable240062 +Node: Getline/File241209 +Node: Getline/Variable/File242593 +Ref: Getline/Variable/File-Footnote-1244192 +Node: Getline/Pipe244279 +Node: Getline/Variable/Pipe246978 +Node: Getline/Coprocess248085 +Node: Getline/Variable/Coprocess249337 +Node: Getline Notes250074 +Node: Getline Summary252878 +Ref: table-getline-variants253286 +Node: Read Timeout254198 +Ref: Read Timeout-Footnote-1258025 +Node: Command line directories258083 +Node: Input Summary258987 +Node: Printing262101 +Node: Print263780 +Node: Print Examples265121 +Node: Output Separators267900 +Node: OFMT269916 +Node: Printf271274 +Node: Basic Printf272180 +Node: Control Letters273719 +Node: Format Modifiers277573 +Node: Printf Examples283600 +Node: Redirection286307 +Node: Special Files293297 +Node: Special FD293828 +Ref: Special FD-Footnote-1297452 +Node: Special Network297526 +Node: Special Caveats298376 +Node: Close Files And Pipes299172 +Ref: Close Files And Pipes-Footnote-1306335 +Ref: Close Files And Pipes-Footnote-2306483 +Node: Output Summary306633 +Node: Expressions307605 +Node: Values308790 +Node: Constants309466 +Node: Scalar Constants310146 +Ref: Scalar Constants-Footnote-1311005 +Node: Nondecimal-numbers311255 +Node: Regexp Constants314255 +Node: Using Constant Regexps314730 +Node: Variables317800 +Node: Using Variables318455 +Node: Assignment Options320179 +Node: Conversion322054 +Ref: table-locale-affects327490 +Ref: Conversion-Footnote-1328114 +Node: All Operators328223 +Node: Arithmetic Ops328853 +Node: Concatenation331358 +Ref: Concatenation-Footnote-1334154 +Node: Assignment Ops334274 +Ref: table-assign-ops339257 +Node: Increment Ops340574 +Node: Truth Values and Conditions344012 +Node: Truth Values345095 +Node: Typing and Comparison346144 +Node: Variable Typing346937 +Ref: Variable Typing-Footnote-1350837 +Node: Comparison Operators350959 +Ref: table-relational-ops351369 +Node: POSIX String Comparison354919 +Ref: POSIX String Comparison-Footnote-1356003 +Node: Boolean Ops356141 +Ref: Boolean Ops-Footnote-1360211 +Node: Conditional Exp360302 +Node: Function Calls362029 +Node: Precedence365787 +Node: Locales369456 +Node: Expressions Summary371087 +Node: Patterns and Actions373584 +Node: Pattern Overview374700 +Node: Regexp Patterns376377 +Node: Expression Patterns376920 +Node: Ranges380701 +Node: BEGIN/END383807 +Node: Using BEGIN/END384569 +Ref: Using BEGIN/END-Footnote-1387305 +Node: I/O And BEGIN/END387411 +Node: BEGINFILE/ENDFILE389696 +Node: Empty392627 +Node: Using Shell Variables392944 +Node: Action Overview395227 +Node: Statements397554 +Node: If Statement399402 +Node: While Statement400900 +Node: Do Statement402944 +Node: For Statement404100 +Node: Switch Statement407252 +Node: Break Statement409355 +Node: Continue Statement411410 +Node: Next Statement413203 +Node: Nextfile Statement415593 +Node: Exit Statement418248 +Node: Built-in Variables420652 +Node: User-modified421779 +Ref: User-modified-Footnote-1429464 +Node: Auto-set429526 +Ref: Auto-set-Footnote-1442091 +Ref: Auto-set-Footnote-2442296 +Node: ARGC and ARGV442352 +Node: Pattern Action Summary446206 +Node: Arrays448429 +Node: Array Basics449978 +Node: Array Intro450804 +Ref: figure-array-elements452777 +Node: Reference to Elements455184 +Node: Assigning Elements457457 +Node: Array Example457948 +Node: Scanning an Array459680 +Node: Controlling Scanning462695 +Ref: Controlling Scanning-Footnote-1467868 +Node: Delete468184 +Ref: Delete-Footnote-1470949 +Node: Numeric Array Subscripts471006 +Node: Uninitialized Subscripts473189 +Node: Multidimensional474814 +Node: Multiscanning477907 +Node: Arrays of Arrays479496 +Node: Arrays Summary484159 +Node: Functions486264 +Node: Built-in487137 +Node: Calling Built-in488215 +Node: Numeric Functions490203 +Ref: Numeric Functions-Footnote-1494037 +Ref: Numeric Functions-Footnote-2494394 +Ref: Numeric Functions-Footnote-3494442 +Node: String Functions494711 +Ref: String Functions-Footnote-1517722 +Ref: String Functions-Footnote-2517851 +Ref: String Functions-Footnote-3518099 +Node: Gory Details518186 +Ref: table-sub-escapes519855 +Ref: table-sub-posix-92521209 +Ref: table-sub-proposed522560 +Ref: table-posix-sub523914 +Ref: table-gensub-escapes525459 +Ref: Gory Details-Footnote-1526635 +Ref: Gory Details-Footnote-2526686 +Node: I/O Functions526837 +Ref: I/O Functions-Footnote-1533960 +Node: Time Functions534107 +Ref: Time Functions-Footnote-1544571 +Ref: Time Functions-Footnote-2544639 +Ref: Time Functions-Footnote-3544797 +Ref: Time Functions-Footnote-4544908 +Ref: Time Functions-Footnote-5545020 +Ref: Time Functions-Footnote-6545247 +Node: Bitwise Functions545513 +Ref: table-bitwise-ops546075 +Ref: Bitwise Functions-Footnote-1550320 +Node: Type Functions550504 +Node: I18N Functions551646 +Node: User-defined553291 +Node: Definition Syntax554095 +Ref: Definition Syntax-Footnote-1559020 +Node: Function Example559089 +Ref: Function Example-Footnote-1561733 +Node: Function Caveats561755 +Node: Calling A Function562273 +Node: Variable Scope563228 +Node: Pass By Value/Reference566216 +Node: Return Statement569724 +Node: Dynamic Typing572708 +Node: Indirect Calls573637 +Node: Functions Summary583350 +Node: Library Functions585889 +Ref: Library Functions-Footnote-1589464 +Ref: Library Functions-Footnote-2589607 +Node: Library Names589778 +Ref: Library Names-Footnote-1593251 +Ref: Library Names-Footnote-2593471 +Node: General Functions593557 +Node: Strtonum Function594585 +Node: Assert Function597515 +Node: Round Function600841 +Node: Cliff Random Function602382 +Node: Ordinal Functions603398 +Ref: Ordinal Functions-Footnote-1606475 +Ref: Ordinal Functions-Footnote-2606727 +Node: Join Function606938 +Ref: Join Function-Footnote-1608709 +Node: Getlocaltime Function608909 +Node: Readfile Function612645 +Node: Data File Management614484 +Node: Filetrans Function615116 +Node: Rewind Function619185 +Node: File Checking620572 +Ref: File Checking-Footnote-1621704 +Node: Empty Files621905 +Node: Ignoring Assigns624135 +Node: Getopt Function625689 +Ref: Getopt Function-Footnote-1636992 +Node: Passwd Functions637195 +Ref: Passwd Functions-Footnote-1646174 +Node: Group Functions646262 +Ref: Group Functions-Footnote-1654204 +Node: Walking Arrays654417 +Node: Library Functions Summary656587 +Node: Sample Programs657949 +Node: Running Examples658676 +Node: Clones659404 +Node: Cut Program660628 +Node: Egrep Program670496 +Ref: Egrep Program-Footnote-1678467 +Node: Id Program678577 +Node: Split Program682241 +Ref: Split Program-Footnote-1685779 +Node: Tee Program685907 +Node: Uniq Program688714 +Node: Wc Program696144 +Ref: Wc Program-Footnote-1700412 +Ref: Wc Program-Footnote-2700612 +Node: Miscellaneous Programs700704 +Node: Dupword Program701917 +Node: Alarm Program703948 +Node: Translate Program708762 +Ref: Translate Program-Footnote-1713153 +Ref: Translate Program-Footnote-2713423 +Node: Labels Program713557 +Ref: Labels Program-Footnote-1716928 +Node: Word Sorting717012 +Node: History Sorting721055 +Node: Extract Program722891 +Ref: Extract Program-Footnote-1730466 +Node: Simple Sed730595 +Node: Igawk Program733657 +Ref: Igawk Program-Footnote-1748833 +Ref: Igawk Program-Footnote-2749034 +Node: Anagram Program749172 +Node: Signature Program752240 +Node: Programs Summary753487 +Node: Advanced Features754675 +Node: Nondecimal Data756623 +Node: Array Sorting758200 +Node: Controlling Array Traversal758897 +Node: Array Sorting Functions767177 +Ref: Array Sorting Functions-Footnote-1771084 +Node: Two-way I/O771278 +Ref: Two-way I/O-Footnote-1776794 +Node: TCP/IP Networking776876 +Node: Profiling779720 +Node: Advanced Features Summary787262 +Node: Internationalization789126 +Node: I18N and L10N790606 +Node: Explaining gettext791292 +Ref: Explaining gettext-Footnote-1796432 +Ref: Explaining gettext-Footnote-2796616 +Node: Programmer i18n796781 +Node: Translator i18n801006 +Node: String Extraction801800 +Ref: String Extraction-Footnote-1802761 +Node: Printf Ordering802847 +Ref: Printf Ordering-Footnote-1805629 +Node: I18N Portability805693 +Ref: I18N Portability-Footnote-1808142 +Node: I18N Example808205 +Ref: I18N Example-Footnote-1810927 +Node: Gawk I18N810999 +Node: I18N Summary811637 +Node: Debugger812976 +Node: Debugging813998 +Node: Debugging Concepts814439 +Node: Debugging Terms816295 +Node: Awk Debugging818892 +Node: Sample Debugging Session819784 +Node: Debugger Invocation820304 +Node: Finding The Bug821637 +Node: List of Debugger Commands828119 +Node: Breakpoint Control829451 +Node: Debugger Execution Control833115 +Node: Viewing And Changing Data836475 +Node: Execution Stack839833 +Node: Debugger Info841346 +Node: Miscellaneous Debugger Commands845340 +Node: Readline Support850524 +Node: Limitations851416 +Node: Debugging Summary853690 +Node: Arbitrary Precision Arithmetic854854 +Ref: Arbitrary Precision Arithmetic-Footnote-1856503 +Node: General Arithmetic856651 +Node: Floating Point Issues858371 +Node: String Conversion Precision859252 +Ref: String Conversion Precision-Footnote-1860957 +Node: Unexpected Results861066 +Node: POSIX Floating Point Problems863219 +Ref: POSIX Floating Point Problems-Footnote-1867040 +Node: Integer Programming867078 +Node: Floating-point Programming868889 +Ref: Floating-point Programming-Footnote-1875217 +Ref: Floating-point Programming-Footnote-2875487 +Node: Floating-point Representation875751 +Node: Floating-point Context876916 +Ref: table-ieee-formats877755 +Node: Rounding Mode879139 +Ref: table-rounding-modes879618 +Ref: Rounding Mode-Footnote-1882633 +Node: Gawk and MPFR882812 +Node: Arbitrary Precision Floats884221 +Ref: Arbitrary Precision Floats-Footnote-1886664 +Node: Setting Precision886985 +Ref: table-predefined-precision-strings887669 +Node: Setting Rounding Mode889814 +Ref: table-gawk-rounding-modes890218 +Node: Floating-point Constants891405 +Node: Changing Precision892857 +Ref: Changing Precision-Footnote-1894249 +Node: Exact Arithmetic894423 +Node: Arbitrary Precision Integers897557 +Ref: Arbitrary Precision Integers-Footnote-1900572 +Node: Dynamic Extensions900719 +Node: Extension Intro902177 +Node: Plugin License903442 +Node: Extension Mechanism Outline904127 +Ref: figure-load-extension904551 +Ref: figure-load-new-function906036 +Ref: figure-call-new-function907038 +Node: Extension API Description909022 +Node: Extension API Functions Introduction910472 +Node: General Data Types915338 +Ref: General Data Types-Footnote-1921031 +Node: Requesting Values921330 +Ref: table-value-types-returned922067 +Node: Memory Allocation Functions923025 +Ref: Memory Allocation Functions-Footnote-1925772 +Node: Constructor Functions925868 +Node: Registration Functions927626 +Node: Extension Functions928311 +Node: Exit Callback Functions930613 +Node: Extension Version String931862 +Node: Input Parsers932512 +Node: Output Wrappers942315 +Node: Two-way processors946831 +Node: Printing Messages949035 +Ref: Printing Messages-Footnote-1950112 +Node: Updating `ERRNO'950264 +Node: Accessing Parameters951003 +Node: Symbol Table Access952233 +Node: Symbol table by name952747 +Node: Symbol table by cookie954723 +Ref: Symbol table by cookie-Footnote-1958856 +Node: Cached values958919 +Ref: Cached values-Footnote-1962423 +Node: Array Manipulation962514 +Ref: Array Manipulation-Footnote-1963612 +Node: Array Data Types963651 +Ref: Array Data Types-Footnote-1966354 +Node: Array Functions966446 +Node: Flattening Arrays970320 +Node: Creating Arrays977172 +Node: Extension API Variables981903 +Node: Extension Versioning982539 +Node: Extension API Informational Variables984440 +Node: Extension API Boilerplate985526 +Node: Finding Extensions989330 +Node: Extension Example989890 +Node: Internal File Description990620 +Node: Internal File Ops994711 +Ref: Internal File Ops-Footnote-11006257 +Node: Using Internal File Ops1006397 +Ref: Using Internal File Ops-Footnote-11008744 +Node: Extension Samples1009012 +Node: Extension Sample File Functions1010536 +Node: Extension Sample Fnmatch1018104 +Node: Extension Sample Fork1019585 +Node: Extension Sample Inplace1020798 +Node: Extension Sample Ord1022578 +Node: Extension Sample Readdir1023414 +Ref: table-readdir-file-types1024270 +Node: Extension Sample Revout1025069 +Node: Extension Sample Rev2way1025660 +Node: Extension Sample Read write array1026401 +Node: Extension Sample Readfile1028280 +Node: Extension Sample API Tests1029380 +Node: Extension Sample Time1029905 +Node: gawkextlib1031220 +Node: Language History1034007 +Node: V7/SVR3.11035601 +Node: SVR41037921 +Node: POSIX1039363 +Node: BTL1040749 +Node: POSIX/GNU1041483 +Node: Feature History1047082 +Node: Common Extensions1060194 +Node: Ranges and Locales1061506 +Ref: Ranges and Locales-Footnote-11066123 +Ref: Ranges and Locales-Footnote-21066150 +Ref: Ranges and Locales-Footnote-31066384 +Node: Contributors1066605 +Node: Installation1072043 +Node: Gawk Distribution1072937 +Node: Getting1073421 +Node: Extracting1074247 +Node: Distribution contents1075889 +Node: Unix Installation1081606 +Node: Quick Installation1082223 +Node: Additional Configuration Options1084665 +Node: Configuration Philosophy1086403 +Node: Non-Unix Installation1088754 +Node: PC Installation1089212 +Node: PC Binary Installation1090523 +Node: PC Compiling1092371 +Ref: PC Compiling-Footnote-11095370 +Node: PC Testing1095475 +Node: PC Using1096651 +Node: Cygwin1100809 +Node: MSYS1101618 +Node: VMS Installation1102132 +Node: VMS Compilation1102928 +Ref: VMS Compilation-Footnote-11104150 +Node: VMS Dynamic Extensions1104208 +Node: VMS Installation Details1105581 +Node: VMS Running1107833 +Node: VMS GNV1110667 +Node: VMS Old Gawk1111390 +Node: Bugs1111860 +Node: Other Versions1115864 +Node: Notes1122089 +Node: Compatibility Mode1122889 +Node: Additions1123671 +Node: Accessing The Source1124596 +Node: Adding Code1126032 +Node: New Ports1132210 +Node: Derived Files1136691 +Ref: Derived Files-Footnote-11141772 +Ref: Derived Files-Footnote-21141806 +Ref: Derived Files-Footnote-31142402 +Node: Future Extensions1142516 +Node: Implementation Limitations1143122 +Node: Extension Design1144370 +Node: Old Extension Problems1145524 +Ref: Old Extension Problems-Footnote-11147041 +Node: Extension New Mechanism Goals1147098 +Ref: Extension New Mechanism Goals-Footnote-11150458 +Node: Extension Other Design Decisions1150647 +Node: Extension Future Growth1152753 +Node: Old Extension Mechanism1153589 +Node: Basic Concepts1155329 +Node: Basic High Level1156010 +Ref: figure-general-flow1156282 +Ref: figure-process-flow1156881 +Ref: Basic High Level-Footnote-11160110 +Node: Basic Data Typing1160295 +Node: Glossary1163622 +Node: Copying1188774 +Node: GNU Free Documentation License1226330 +Node: Index1251466  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index d6453c8b..03537176 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -1698,7 +1698,7 @@ emphasized @emph{like this}, and if a point needs to be made strongly, it is done @strong{like this}. 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, @var{FN}s are indicated like this: @file{/path/to/ourfile}. +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, @@ -2354,7 +2354,7 @@ awk -f @var{source-file} @var{input-file1} @var{input-file2} @dots{} @cindex @option{-f} option @cindex command line, option @option{-f} The @option{-f} instructs the @command{awk} utility to get the @command{awk} program -from the file @var{source-file}. Any @var{FN} can be used for +from the file @var{source-file}. Any @value{FN} can be used for @var{source-file}. For example, you could put the program: @example @@ -2379,8 +2379,8 @@ awk "BEGIN @{ print \"Don't Panic!\" @}" @noindent This was explained earlier (@pxref{Read Terminal}). -Note that you don't usually need single quotes around the @var{FN} that you -specify with @option{-f}, because most @var{FN}s don't contain any of the shell's +Note that you don't usually need single quotes around the @value{FN} that you +specify with @option{-f}, because most @value{FN}s don't contain any of the shell's special characters. Notice that in @file{advice}, the @command{awk} program did not have single quotes around it. The quotes are only needed for programs that are provided on the @command{awk} command line. @@ -2390,7 +2390,7 @@ for programs that are provided on the @command{awk} command line. @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, -you can add the extension @file{.awk} to the @var{FN}. This doesn't +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. @@ -2417,11 +2417,11 @@ BEGIN @{ print "Don't Panic!" @} After making this file executable (with the @command{chmod} utility), simply type @samp{advice} at the shell and the system arranges to run @command{awk}@footnote{The -line beginning with @samp{#!} lists the full @var{FN} of an interpreter +line beginning with @samp{#!} lists the full @value{FN} of an interpreter to run and an optional initial command-line argument to pass to that interpreter. The operating system then runs the interpreter with the given argument and the full argument list of the executed program. The first argument -in the list is the full @var{FN} of the @command{awk} program. +in the list is the full @value{FN} of the @command{awk} program. The rest of the argument list contains either options to @command{awk}, or @value{DF}s, or both. Note that on many systems @command{awk} may be found in @@ -2694,7 +2694,7 @@ awk -F"" '@var{program}' @var{files} # wrong! @noindent In the second case, @command{awk} will attempt to use the text of the program -as the value of @code{FS}, and the first @var{FN} as the text of the program! +as the value of @code{FS}, and the first @value{FN} as the text of the program! This results in syntax errors at best, and confusing behavior at worst. @end itemize @@ -2944,7 +2944,7 @@ of the program will give you a good idea of what is going on, but please read the rest of the @value{DOCUMENT} to become an @command{awk} expert!) Most of the examples use a @value{DF} named @file{data}. This is just a placeholder; if you use these programs yourself, substitute -your own @var{FN}s for @file{data}. +your own @value{FN}s for @file{data}. For future reference, note that there is often more than one way to do things in @command{awk}. At some point, you may want to look back at these examples and see if @@ -3136,7 +3136,7 @@ the file. The fourth field identifies the group of the file. The fifth field contains the size of the file in bytes. The sixth, seventh, and eighth fields contain the month, day, and time, respectively, that the file was last modified. Finally, the ninth field -contains the @var{FN}.@footnote{The @samp{LC_ALL=C} is +contains the @value{FN}.@footnote{The @samp{LC_ALL=C} is needed to produce this traditional-style output from @command{ls}.} @c @cindex automatic initialization @@ -3573,8 +3573,8 @@ conventions. @cindex @code{-} (hyphen), filenames beginning with @cindex hyphen (@code{-}), filenames beginning with -This is useful if you have @var{FN}s that start with @samp{-}, -or in shell scripts, if you have @var{FN}s that will be specified +This is useful if you have @value{FN}s that start with @samp{-}, +or in shell scripts, if you have @value{FN}s that will be specified 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}. @@ -3819,7 +3819,7 @@ Enable pretty-printing of @command{awk} programs. By default, output program is created in a file named @file{awkprof.out} (@pxref{Profiling}). The optional @var{file} argument allows you to specify a different -@var{FN} for the output. +@value{FN} for the output. No space is allowed between the @option{-o} and @var{file}, if @var{file} is supplied. @@ -3846,7 +3846,7 @@ Enable profiling of @command{awk} programs (@pxref{Profiling}). By default, profiles are created in a file named @file{awkprof.out}. The optional @var{file} argument allows you to specify a different -@var{FN} for the profile file. +@value{FN} for the profile file. No space is allowed between the @option{-p} and @var{file}, if @var{file} is supplied. @@ -4058,9 +4058,9 @@ current element. @cindex input files, variable assignments and @cindex variable assignments and input files -The distinction between @var{FN} arguments and variable-assignment +The distinction between @value{FN} arguments and variable-assignment arguments is made when @command{awk} is about to open the next input file. -At that point in execution, it checks the @var{FN} to see whether +At that point in execution, it checks the @value{FN} to see whether it is really a variable assignment; if so, @command{awk} sets the variable instead of reading a file. @@ -4077,7 +4077,7 @@ sequences (@pxref{Escape Sequences}). @value{DARKCORNER} In some very early implementations of @command{awk}, when a variable assignment -occurred before any @var{FN}s, the assignment would happen @emph{before} +occurred before any @value{FN}s, the assignment would happen @emph{before} the @code{BEGIN} rule was executed. @command{awk}'s behavior was thus inconsistent; some command-line assignments were available inside the @code{BEGIN} rule, while others were not. Unfortunately, @@ -4125,13 +4125,13 @@ You may also use @code{"-"} to name standard input when reading files with @code{getline} (@pxref{Getline/File}). In addition, @command{gawk} allows you to specify the special -@var{FN} @file{/dev/stdin}, both on the command line and +@value{FN} @file{/dev/stdin}, both on the command line and with @code{getline}. Some other versions of @command{awk} also support this, but it is not standard. (Some operating systems provide a @file{/dev/stdin} file in the file system; however, @command{gawk} always processes -this @var{FN} itself.) +this @value{FN} itself.) @node Environment Variables @section The Environment Variables @command{gawk} Uses @@ -4161,7 +4161,7 @@ on the command-line with the @option{-f} option. In most @command{awk} implementations, you must supply a precise path name for each program file, unless the file is in the current directory. -But in @command{gawk}, if the @var{FN} supplied to the @option{-f} +But in @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 @@ -4181,7 +4181,7 @@ though.} The search path feature is particularly helpful for building libraries of useful @command{awk} functions. The library files can be placed in a standard directory in the default path and then specified on -the command line with a short @var{FN}. Otherwise, the full @var{FN} +the command line with a short @value{FN}. Otherwise, the full @value{FN} would have to be typed for each file. By using the @option{-i} option, or the @option{--source} and @option{-f} options, your command-line @@ -4408,7 +4408,7 @@ use @code{@@include} followed by the name of the file to be included, enclosed in double quotes. @quotation NOTE -Keep in mind that this is a language construct and the @var{FN} cannot +Keep in mind that this is a language construct and the @value{FN} cannot be a string variable, but rather just a literal string constant in double quotes. @end quotation @@ -4433,7 +4433,7 @@ $ @kbd{gawk -f test3} @print{} This is file test3. @end example -The @var{FN} can, of course, be a pathname. For example: +The @value{FN} can, of course, be a pathname. For example: @example @@include "../io_funcs" @@ -7988,7 +7988,7 @@ the value of @code{NF} do not change. @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 -specifies the @var{FN}. @samp{< @var{file}} is called a @dfn{redirection} +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 program reads its input record from the file @file{secondary.input} when it @@ -8606,7 +8606,7 @@ For printing with specifications, you need the @code{printf} statement @cindex @code{printf} statement Besides basic and formatted printing, this @value{CHAPTER} also covers I/O redirections to files and pipes, introduces -the special @var{FN}s that @command{gawk} processes internally, +the special @value{FN}s that @command{gawk} processes internally, and discusses the @code{close()} built-in function. @menu @@ -9415,9 +9415,9 @@ but they work identically for @code{printf}: @cindex operators, input/output @item print @var{items} > @var{output-file} This redirection prints the items into the output file named -@var{output-file}. The @var{FN} @var{output-file} can be any +@value{output-file}. The @value{FN} @var{output-file} can be any expression. Its value is changed to a string and then used as a -@var{FN} (@pxref{Expressions}). +@value{FN} (@pxref{Expressions}). When this type of redirection is used, the @var{output-file} is erased before the first output is written to it. Subsequent writes to the same @@ -9590,7 +9590,7 @@ open as many pipelines as the underlying operating system permits. A particularly powerful way to use redirection is to build command lines and pipe them into the shell, @command{sh}. For example, suppose you -have a list of files brought over from a system where all the @var{FN}s +have a list of files brought over from a system where all the @value{FN}s are stored in uppercase, and you wish to rename them to have names in all lowercase. The following program is both simple and efficient: @@ -9622,7 +9622,7 @@ It then sends the list to the shell for execution. A particularly powerful way to use redirection is to build command lines and pipe them into the shell, @command{sh}. For example, suppose you -have a list of files brought over from a system where all the @var{FN}s +have a list of files brought over from a system where all the @value{FN}s are stored in uppercase, and you wish to rename them to have names in all lowercase. The following program is both simple and efficient: @@ -9649,8 +9649,8 @@ It then sends the list to the shell for execution. @c STARTOFRANGE gfn @cindex @command{gawk}, file names in -@command{gawk} provides a number of special @var{FN}s that it interprets -internally. These @var{FN}s provide access to standard file descriptors +@command{gawk} provides a number of special @value{FN}s that it interprets +internally. These @value{FN}s provide access to standard file descriptors and TCP/IP networking. @menu @@ -9714,12 +9714,12 @@ that happens, writing to the screen is not correct. In fact, if terminal at all. Then opening @file{/dev/tty} fails. -@command{gawk} provides special @var{FN}s for accessing the three standard +@command{gawk} provides special @value{FN}s for accessing the three standard streams. @value{COMMONEXT} It also provides syntax for accessing -any other inherited open files. If the @var{FN} matches +any other inherited open files. If the @value{FN} matches one of these special names when @command{gawk} redirects input or output, -then it directly uses the stream that the @var{FN} stands for. -These special @var{FN}s work for all operating systems that @command{gawk} +then it directly uses the stream that the @value{FN} stands for. +These special @value{FN}s work for all operating systems that @command{gawk} has been ported to, not just those that are POSIX-compliant: @cindex common extensions, @code{/dev/stdin} special file @@ -9749,7 +9749,7 @@ the shell). Unless special pains are taken in the shell from which @command{gawk} is invoked, only descriptors 0, 1, and 2 are available. @end table -The @var{FN}s @file{/dev/stdin}, @file{/dev/stdout}, and @file{/dev/stderr} +The @value{FN}s @file{/dev/stdin}, @file{/dev/stdout}, and @file{/dev/stderr} are aliases for @file{/dev/fd/0}, @file{/dev/fd/1}, and @file{/dev/fd/2}, respectively. However, they are more self-explanatory. The proper way to write an error message in a @command{gawk} program @@ -9760,13 +9760,13 @@ print "Serious error detected!" > "/dev/stderr" @end example @cindex troubleshooting, quotes with file names -Note the use of quotes around the @var{FN}. +Note the use of quotes around the @value{FN}. Like any other redirection, the value must be a string. It is a common error to omit the quotes, which leads to confusing results. @c Exercise: What does it do? :-) -Finally, using the @code{close()} function on a @var{FN} of the +Finally, using the @code{close()} function on a @value{FN} of the form @code{"/dev/fd/@var{N}"}, for file descriptor numbers above two, does actually close the given file descriptor. @@ -9782,7 +9782,7 @@ versions of @command{awk}. @command{gawk} programs can open a two-way TCP/IP connection, acting as either a client or a server. -This is done using a special @var{FN} of the form: +This is done using a special @value{FN} of the form: @example @file{/@var{net-type}/@var{protocol}/@var{local-port}/@var{remote-host}/@var{remote-port}} @@ -9792,7 +9792,7 @@ The @var{net-type} is one of @samp{inet}, @samp{inet4} or @samp{inet6}. The @var{protocol} is one of @samp{tcp} or @samp{udp}, and the other fields represent the other essential pieces of information for making a networking connection. -These @var{FN}s are used with the @samp{|&} operator for communicating +These @value{FN}s are used with the @samp{|&} operator for communicating with a coprocess (@pxref{Two-way I/O}). This is an advanced feature, mentioned here only for completeness. @@ -9803,18 +9803,18 @@ Full discussion is delayed until @subsection Special @value{FFN} Caveats Here is a list of things to bear in mind when using the -special @var{FN}s that @command{gawk} provides: +special @value{FN}s that @command{gawk} provides: @itemize @value{BULLET} @cindex compatibility mode (@command{gawk}), file names @cindex file names, in compatibility mode @item -Recognition of these special @var{FN}s is disabled if @command{gawk} is in +Recognition of these special @value{FN}s is disabled if @command{gawk} is in compatibility mode (@pxref{Options}). @item @command{gawk} @emph{always} -interprets these special @var{FN}s. +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 @@ -9837,7 +9837,7 @@ Doing so results in unpredictable behavior. @cindex coprocesses, closing @cindex @code{getline} command, coprocesses@comma{} using from -If the same @var{FN} or the same shell command is used with @code{getline} +If the same @value{FN} or the same shell command is used with @code{getline} more than once during the execution of an @command{awk} program (@pxref{Getline}), the file is opened (or the command is executed) the first time only. @@ -9846,7 +9846,7 @@ The next time the same file or command is used with @code{getline}, another record is read from it, and so on. Similarly, when a file or pipe is opened for output, @command{awk} remembers -the @var{FN} or command associated with it, and subsequent +the @value{FN} or command associated with it, and subsequent writes to the same file or command are appended to the previous writes. The file or pipe stays open until @command{awk} exits. @@ -9888,7 +9888,7 @@ file or command, or the next @code{print} or @code{printf} to that file or command, reopens the file or reruns the command. Because the expression that you use to close a file or pipeline must exactly match the expression used to open the file or run the command, -it is good practice to use a variable to store the @var{FN} or command. +it is good practice to use a valueiable to store the @value{FN} or command. The previous example becomes the following: @example @@ -10580,7 +10580,7 @@ as in the following: @noindent the variable is set at the very beginning, even before the @code{BEGIN} rules execute. The @option{-v} option and its assignment -must precede all the @var{FN} arguments, as well as the program text. +must precede all the @value{FN} arguments, as well as the program text. (@xref{Options}, for more information about the @option{-v} option.) Otherwise, the variable assignment is performed at a time determined by @@ -14385,14 +14385,14 @@ about how @command{awk} uses these variables. @item @code{ARGIND #} The index in @code{ARGV} of the current file being processed. Every time @command{gawk} opens a new @value{DF} for processing, it sets -@code{ARGIND} to the index in @code{ARGV} of the @var{FN}. +@code{ARGIND} to the index in @code{ARGV} of the @value{FN}. When @command{gawk} is processing the input files, @samp{FILENAME == ARGV[ARGIND]} is always true. @cindex files, processing@comma{} @code{ARGIND} variable and This variable is useful in file processing; it allows you to tell how far along you are in the list of @value{DF}s as well as to distinguish between -successive instances of the same @var{FN} on the command line. +successive instances of the same @value{FN} on the command line. @cindex file names, distinguishing While you can change the value of @code{ARGIND} within your @command{awk} @@ -14864,11 +14864,11 @@ additional files to be read. If the value of @code{ARGC} is decreased, that eliminates input files from the end of the list. By recording the old value of @code{ARGC} elsewhere, a program can treat the eliminated arguments as -something other than @var{FN}s. +something other than @value{FN}s. To eliminate a file from the middle of the list, store the null string (@code{""}) into @code{ARGV} in place of the file's name. As a -special feature, @command{awk} ignores @var{FN}s that have been +special feature, @command{awk} ignores @value{FN}s that have been replaced with the null string. Another option is to use the @code{delete} statement to remove elements from @@ -21024,13 +21024,13 @@ 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 -automatically changes for each new @value{DF}. The current @var{FN} is +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 it is necessary to call @code{endfile()} for the old file. Because @code{endfile()} should only be called if a file has been processed, the program first checks to make sure that @code{_oldfilename} is not the null -string. The program then assigns the current @var{FN} to +string. The program then assigns the current @value{FN} to @code{_oldfilename} and calls @code{beginfile()} for the file. Because, like all @command{awk} variables, @code{_oldfilename} is initialized to the null string, this rule executes correctly even for the @@ -21251,7 +21251,7 @@ Using @command{gawk}'s @code{ARGIND} variable @value{DF} has been skipped. Similar to the library file presented in @ref{Filetrans Function}, the following library file calls a function named @code{zerofile()} that the user must provide. The arguments passed are -the @var{FN} and the position in @code{ARGV} where it was found: +the @value{FN} and the position in @code{ARGV} where it was found: @cindex @code{zerofile.awk} program @example @@ -21346,8 +21346,8 @@ END @{ Occasionally, you might not want @command{awk} to process command-line variable assignments (@pxref{Assignment Options}). -In particular, if you have a @var{FN} that contains an @samp{=} character, -@command{awk} treats the @var{FN} as an assignment, and does not process it. +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. Some users have suggested an additional command-line option for @command{gawk} to disable command-line assignments. However, some simple programming with @@ -21391,7 +21391,7 @@ awk -v No_command_assign=1 -f noassign.awk -f yourprog.awk * The function works by looping through the arguments. It prepends @samp{./} to any argument that matches the form -of a variable assignment, turning that argument into a @var{FN}. +of a variable assignment, turning that argument into a @value{FN}. The use of @code{No_command_assign} allows you to disable command-line assignments at invocation time, by giving the variable a true value. @@ -21747,7 +21747,7 @@ etc., as its own options. After @code{getopt()} is through, it is the responsibility of the user level code to clear out all the elements of @code{ARGV} from 1 to @code{Optind}, so that @command{awk} does not try to process the -command-line options as @var{FN}s. +command-line options as @value{FN}s. @end quotation Several of the sample programs presented in @@ -22866,7 +22866,7 @@ spaces. Also remember that after @code{getopt()} is through we have to clear out all the elements of @code{ARGV} from 1 to @code{Optind}, so that @command{awk} does not try to process the command-line options -as @var{FN}s. +as @value{FN}s. After dealing with the command-line options, the program verifies that the options make sense. Only one or the other of @option{-c} and @option{-f} @@ -23063,8 +23063,8 @@ You invoke it as follows: The @var{pattern} is a regular expression. In typical usage, the regular expression is quoted to prevent the shell from expanding any of the -special characters as @var{FN} wildcards. Normally, @command{egrep} -prints the lines that matched. If multiple @var{FN}s are provided on +special characters as @value{FN} wildcards. Normally, @command{egrep} +prints the lines that matched. If multiple @value{FN}s are provided on the command line, each output line is preceded by the name of the file and a colon. @@ -23155,7 +23155,7 @@ pattern is supplied with @option{-e}, the first nonoption on the command line is used. The @command{awk} command-line arguments up to @code{ARGV[Optind]} are cleared, so that @command{awk} won't try to process them as files. If no files are specified, the standard input is used, and if multiple files are -specified, we make sure to note this so that the @var{FN}s can precede the +specified, we make sure to note this so that the @value{FN}s can precede the matched lines in the output: @example @@ -23258,9 +23258,9 @@ 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 (@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 @var{FN}s, we can -print the @var{FN}, and then skip to the next file with @code{nextfile}. -Finally, each line is printed, with a leading @var{FN} and colon +@code{nextfile}. Similarly, if we are only printing @value{FN}s, we can +print the @value{FN}, and then skip to the next file with @code{nextfile}. +Finally, each line is printed, with a leading @value{FN} and colon if necessary: @cindex @code{!} (exclamation point), @code{!} operator @@ -23510,7 +23510,7 @@ 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 1000. To change the name of the output files to something like @file{myfileaa}, @file{myfileab}, and so on, supply an additional -argument that specifies the @var{FN} prefix. +argument that specifies the @value{FN} prefix. Here is a version of @command{split} in @command{awk}. It uses the @code{ord()} and @code{chr()} functions presented in @@ -31737,7 +31737,7 @@ empty string (@code{""}). The @code{func} pointer is the address of a An @dfn{exit callback} function is a function that @command{gawk} calls before it exits. -Such functions are useful if you have general ``clean up'' tasks +Such functions are useful if you have general ``cleanup'' tasks that should be performed in your extension (such as closing data base connections or other resource deallocations). You can register such @@ -32540,7 +32540,7 @@ keeps track of the usage. When a variable's value changes, @command{gawk} simply decrements the reference count on the old value and updates the variable to use the new value. -Finally, as part of your clean up action (@pxref{Exit Callback Functions}) +Finally, as part of your cleanup action (@pxref{Exit Callback Functions}) you should release any cached values that you created, using @code{release_value()}. @@ -34226,10 +34226,10 @@ The arguments to @code{fnmatch()} are: @table @code @item pattern -The @var{FN} wildcard to match. +The @value{FN} wildcard to match. @item string -The @var{FN} string. +The @value{FN} string. @item flag Either zero, or the bitwise OR of one or more of the @@ -34336,8 +34336,8 @@ standard output to a temporary file configured to have the same owner and permissions as the original. After the file has been processed, the extension restores standard output to its original destination. If @code{INPLACE_SUFFIX} is not an empty string, the original file is -linked to a backup @var{FN} created by appending that suffix. Finally, -the temporary file is renamed to the original @var{FN}. +linked to a backup @value{FN} created by appending that suffix. Finally, +the temporary file is renamed to the original @value{FN}. If any error occurs, the extension issues a fatal error to terminate processing immediately without damaging the original file. @@ -34403,7 +34403,7 @@ on the command line (or with @code{getline}), 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 -@var{FN}, separated by a forward slash character. +@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 indicating the type of the file. The letters are file types are shown @@ -37329,7 +37329,7 @@ $ @kbd{MMK/DESCRIPTION=[.vms]descrip.mms gawk} @end example @command{MMK} is an open source, free, near-clone of @command{MMS} and -can better handle ODS-5 volumes with upper- and lowercase @var{FN}s. +can better handle ODS-5 volumes with upper- and lowercase @value{FN}s. @command{MMK} is available from @uref{https://github.com/endlesssoftware/mmk}. With ODS-5 volumes and extended parsing enabled, the case of the target @@ -37464,7 +37464,7 @@ for @command{awk} program files. For the @option{-f} option, if the specified looks in the current directory first, then in the directory specified by the translation of @samp{AWK_LIBRARY} if the file is not found. If, after searching in both directories, the file still is not found, -@command{gawk} appends the suffix @samp{.awk} to the @var{FN} and retries +@command{gawk} appends the suffix @samp{.awk} to the @value{FN} and retries the file search. If @samp{AWK_LIBRARY} has no definition, a default value of @samp{SYS$LIBRARY:} is used for it. @@ -38754,7 +38754,7 @@ two-way I/O. @item An extension should be able to provide a ``call back'' function -to perform clean up actions when @command{gawk} exits. +to perform cleanup actions when @command{gawk} exits. @item An extension should be able to provide a version string so that @@ -38851,8 +38851,8 @@ in @value{PVERSION} 4.1. However, for many years @command{gawk} provided an extension mechanism that required knowledge of @command{gawk} internals and that was not as well designed. -In order to provide a transition period, @command{gawk} version -4.1 continues to support the original extension mechanism. +In order to provide a transition period, @command{gawk} @value{PVERSION} 4.1 +continues to support the original extension mechanism. This will be true for the life of exactly one major release. This support will be withdrawn, and removed from the source code, at the next major release. diff --git a/doc/gawktexi.in b/doc/gawktexi.in index c91820af..4bcb843d 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -1665,7 +1665,7 @@ emphasized @emph{like this}, and if a point needs to be made strongly, it is done @strong{like this}. 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, @var{FN}s are indicated like this: @file{/path/to/ourfile}. +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, @@ -2321,7 +2321,7 @@ awk -f @var{source-file} @var{input-file1} @var{input-file2} @dots{} @cindex @option{-f} option @cindex command line, option @option{-f} The @option{-f} instructs the @command{awk} utility to get the @command{awk} program -from the file @var{source-file}. Any @var{FN} can be used for +from the file @var{source-file}. Any @value{FN} can be used for @var{source-file}. For example, you could put the program: @example @@ -2346,8 +2346,8 @@ awk "BEGIN @{ print \"Don't Panic!\" @}" @noindent This was explained earlier (@pxref{Read Terminal}). -Note that you don't usually need single quotes around the @var{FN} that you -specify with @option{-f}, because most @var{FN}s don't contain any of the shell's +Note that you don't usually need single quotes around the @value{FN} that you +specify with @option{-f}, because most @value{FN}s don't contain any of the shell's special characters. Notice that in @file{advice}, the @command{awk} program did not have single quotes around it. The quotes are only needed for programs that are provided on the @command{awk} command line. @@ -2357,7 +2357,7 @@ for programs that are provided on the @command{awk} command line. @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, -you can add the extension @file{.awk} to the @var{FN}. This doesn't +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. @@ -2384,11 +2384,11 @@ BEGIN @{ print "Don't Panic!" @} After making this file executable (with the @command{chmod} utility), simply type @samp{advice} at the shell and the system arranges to run @command{awk}@footnote{The -line beginning with @samp{#!} lists the full @var{FN} of an interpreter +line beginning with @samp{#!} lists the full @value{FN} of an interpreter to run and an optional initial command-line argument to pass to that interpreter. The operating system then runs the interpreter with the given argument and the full argument list of the executed program. The first argument -in the list is the full @var{FN} of the @command{awk} program. +in the list is the full @value{FN} of the @command{awk} program. The rest of the argument list contains either options to @command{awk}, or @value{DF}s, or both. Note that on many systems @command{awk} may be found in @@ -2622,7 +2622,7 @@ awk -F"" '@var{program}' @var{files} # wrong! @noindent In the second case, @command{awk} will attempt to use the text of the program -as the value of @code{FS}, and the first @var{FN} as the text of the program! +as the value of @code{FS}, and the first @value{FN} as the text of the program! This results in syntax errors at best, and confusing behavior at worst. @end itemize @@ -2872,7 +2872,7 @@ of the program will give you a good idea of what is going on, but please read the rest of the @value{DOCUMENT} to become an @command{awk} expert!) Most of the examples use a @value{DF} named @file{data}. This is just a placeholder; if you use these programs yourself, substitute -your own @var{FN}s for @file{data}. +your own @value{FN}s for @file{data}. For future reference, note that there is often more than one way to do things in @command{awk}. At some point, you may want to look back at these examples and see if @@ -3064,7 +3064,7 @@ the file. The fourth field identifies the group of the file. The fifth field contains the size of the file in bytes. The sixth, seventh, and eighth fields contain the month, day, and time, respectively, that the file was last modified. Finally, the ninth field -contains the @var{FN}.@footnote{The @samp{LC_ALL=C} is +contains the @value{FN}.@footnote{The @samp{LC_ALL=C} is needed to produce this traditional-style output from @command{ls}.} @c @cindex automatic initialization @@ -3501,8 +3501,8 @@ conventions. @cindex @code{-} (hyphen), filenames beginning with @cindex hyphen (@code{-}), filenames beginning with -This is useful if you have @var{FN}s that start with @samp{-}, -or in shell scripts, if you have @var{FN}s that will be specified +This is useful if you have @value{FN}s that start with @samp{-}, +or in shell scripts, if you have @value{FN}s that will be specified 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}. @@ -3747,7 +3747,7 @@ Enable pretty-printing of @command{awk} programs. By default, output program is created in a file named @file{awkprof.out} (@pxref{Profiling}). The optional @var{file} argument allows you to specify a different -@var{FN} for the output. +@value{FN} for the output. No space is allowed between the @option{-o} and @var{file}, if @var{file} is supplied. @@ -3774,7 +3774,7 @@ Enable profiling of @command{awk} programs (@pxref{Profiling}). By default, profiles are created in a file named @file{awkprof.out}. The optional @var{file} argument allows you to specify a different -@var{FN} for the profile file. +@value{FN} for the profile file. No space is allowed between the @option{-p} and @var{file}, if @var{file} is supplied. @@ -3986,9 +3986,9 @@ current element. @cindex input files, variable assignments and @cindex variable assignments and input files -The distinction between @var{FN} arguments and variable-assignment +The distinction between @value{FN} arguments and variable-assignment arguments is made when @command{awk} is about to open the next input file. -At that point in execution, it checks the @var{FN} to see whether +At that point in execution, it checks the @value{FN} to see whether it is really a variable assignment; if so, @command{awk} sets the variable instead of reading a file. @@ -4005,7 +4005,7 @@ sequences (@pxref{Escape Sequences}). @value{DARKCORNER} In some very early implementations of @command{awk}, when a variable assignment -occurred before any @var{FN}s, the assignment would happen @emph{before} +occurred before any @value{FN}s, the assignment would happen @emph{before} the @code{BEGIN} rule was executed. @command{awk}'s behavior was thus inconsistent; some command-line assignments were available inside the @code{BEGIN} rule, while others were not. Unfortunately, @@ -4053,13 +4053,13 @@ You may also use @code{"-"} to name standard input when reading files with @code{getline} (@pxref{Getline/File}). In addition, @command{gawk} allows you to specify the special -@var{FN} @file{/dev/stdin}, both on the command line and +@value{FN} @file{/dev/stdin}, both on the command line and with @code{getline}. Some other versions of @command{awk} also support this, but it is not standard. (Some operating systems provide a @file{/dev/stdin} file in the file system; however, @command{gawk} always processes -this @var{FN} itself.) +this @value{FN} itself.) @node Environment Variables @section The Environment Variables @command{gawk} Uses @@ -4089,7 +4089,7 @@ on the command-line with the @option{-f} option. In most @command{awk} implementations, you must supply a precise path name for each program file, unless the file is in the current directory. -But in @command{gawk}, if the @var{FN} supplied to the @option{-f} +But in @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 @@ -4109,7 +4109,7 @@ though.} The search path feature is particularly helpful for building libraries of useful @command{awk} functions. The library files can be placed in a standard directory in the default path and then specified on -the command line with a short @var{FN}. Otherwise, the full @var{FN} +the command line with a short @value{FN}. Otherwise, the full @value{FN} would have to be typed for each file. By using the @option{-i} option, or the @option{--source} and @option{-f} options, your command-line @@ -4336,7 +4336,7 @@ use @code{@@include} followed by the name of the file to be included, enclosed in double quotes. @quotation NOTE -Keep in mind that this is a language construct and the @var{FN} cannot +Keep in mind that this is a language construct and the @value{FN} cannot be a string variable, but rather just a literal string constant in double quotes. @end quotation @@ -4361,7 +4361,7 @@ $ @kbd{gawk -f test3} @print{} This is file test3. @end example -The @var{FN} can, of course, be a pathname. For example: +The @value{FN} can, of course, be a pathname. For example: @example @@include "../io_funcs" @@ -7607,7 +7607,7 @@ the value of @code{NF} do not change. @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 -specifies the @var{FN}. @samp{< @var{file}} is called a @dfn{redirection} +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 program reads its input record from the file @file{secondary.input} when it @@ -8225,7 +8225,7 @@ For printing with specifications, you need the @code{printf} statement @cindex @code{printf} statement Besides basic and formatted printing, this @value{CHAPTER} also covers I/O redirections to files and pipes, introduces -the special @var{FN}s that @command{gawk} processes internally, +the special @value{FN}s that @command{gawk} processes internally, and discusses the @code{close()} built-in function. @menu @@ -9034,9 +9034,9 @@ but they work identically for @code{printf}: @cindex operators, input/output @item print @var{items} > @var{output-file} This redirection prints the items into the output file named -@var{output-file}. The @var{FN} @var{output-file} can be any +@value{output-file}. The @value{FN} @var{output-file} can be any expression. Its value is changed to a string and then used as a -@var{FN} (@pxref{Expressions}). +@value{FN} (@pxref{Expressions}). When this type of redirection is used, the @var{output-file} is erased before the first output is written to it. Subsequent writes to the same @@ -9204,7 +9204,7 @@ open as many pipelines as the underlying operating system permits. A particularly powerful way to use redirection is to build command lines and pipe them into the shell, @command{sh}. For example, suppose you -have a list of files brought over from a system where all the @var{FN}s +have a list of files brought over from a system where all the @value{FN}s are stored in uppercase, and you wish to rename them to have names in all lowercase. The following program is both simple and efficient: @@ -9230,8 +9230,8 @@ It then sends the list to the shell for execution. @c STARTOFRANGE gfn @cindex @command{gawk}, file names in -@command{gawk} provides a number of special @var{FN}s that it interprets -internally. These @var{FN}s provide access to standard file descriptors +@command{gawk} provides a number of special @value{FN}s that it interprets +internally. These @value{FN}s provide access to standard file descriptors and TCP/IP networking. @menu @@ -9295,12 +9295,12 @@ that happens, writing to the screen is not correct. In fact, if terminal at all. Then opening @file{/dev/tty} fails. -@command{gawk} provides special @var{FN}s for accessing the three standard +@command{gawk} provides special @value{FN}s for accessing the three standard streams. @value{COMMONEXT} It also provides syntax for accessing -any other inherited open files. If the @var{FN} matches +any other inherited open files. If the @value{FN} matches one of these special names when @command{gawk} redirects input or output, -then it directly uses the stream that the @var{FN} stands for. -These special @var{FN}s work for all operating systems that @command{gawk} +then it directly uses the stream that the @value{FN} stands for. +These special @value{FN}s work for all operating systems that @command{gawk} has been ported to, not just those that are POSIX-compliant: @cindex common extensions, @code{/dev/stdin} special file @@ -9330,7 +9330,7 @@ the shell). Unless special pains are taken in the shell from which @command{gawk} is invoked, only descriptors 0, 1, and 2 are available. @end table -The @var{FN}s @file{/dev/stdin}, @file{/dev/stdout}, and @file{/dev/stderr} +The @value{FN}s @file{/dev/stdin}, @file{/dev/stdout}, and @file{/dev/stderr} are aliases for @file{/dev/fd/0}, @file{/dev/fd/1}, and @file{/dev/fd/2}, respectively. However, they are more self-explanatory. The proper way to write an error message in a @command{gawk} program @@ -9341,13 +9341,13 @@ print "Serious error detected!" > "/dev/stderr" @end example @cindex troubleshooting, quotes with file names -Note the use of quotes around the @var{FN}. +Note the use of quotes around the @value{FN}. Like any other redirection, the value must be a string. It is a common error to omit the quotes, which leads to confusing results. @c Exercise: What does it do? :-) -Finally, using the @code{close()} function on a @var{FN} of the +Finally, using the @code{close()} function on a @value{FN} of the form @code{"/dev/fd/@var{N}"}, for file descriptor numbers above two, does actually close the given file descriptor. @@ -9363,7 +9363,7 @@ versions of @command{awk}. @command{gawk} programs can open a two-way TCP/IP connection, acting as either a client or a server. -This is done using a special @var{FN} of the form: +This is done using a special @value{FN} of the form: @example @file{/@var{net-type}/@var{protocol}/@var{local-port}/@var{remote-host}/@var{remote-port}} @@ -9373,7 +9373,7 @@ The @var{net-type} is one of @samp{inet}, @samp{inet4} or @samp{inet6}. The @var{protocol} is one of @samp{tcp} or @samp{udp}, and the other fields represent the other essential pieces of information for making a networking connection. -These @var{FN}s are used with the @samp{|&} operator for communicating +These @value{FN}s are used with the @samp{|&} operator for communicating with a coprocess (@pxref{Two-way I/O}). This is an advanced feature, mentioned here only for completeness. @@ -9384,18 +9384,18 @@ Full discussion is delayed until @subsection Special @value{FFN} Caveats Here is a list of things to bear in mind when using the -special @var{FN}s that @command{gawk} provides: +special @value{FN}s that @command{gawk} provides: @itemize @value{BULLET} @cindex compatibility mode (@command{gawk}), file names @cindex file names, in compatibility mode @item -Recognition of these special @var{FN}s is disabled if @command{gawk} is in +Recognition of these special @value{FN}s is disabled if @command{gawk} is in compatibility mode (@pxref{Options}). @item @command{gawk} @emph{always} -interprets these special @var{FN}s. +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 @@ -9418,7 +9418,7 @@ Doing so results in unpredictable behavior. @cindex coprocesses, closing @cindex @code{getline} command, coprocesses@comma{} using from -If the same @var{FN} or the same shell command is used with @code{getline} +If the same @value{FN} or the same shell command is used with @code{getline} more than once during the execution of an @command{awk} program (@pxref{Getline}), the file is opened (or the command is executed) the first time only. @@ -9427,7 +9427,7 @@ The next time the same file or command is used with @code{getline}, another record is read from it, and so on. Similarly, when a file or pipe is opened for output, @command{awk} remembers -the @var{FN} or command associated with it, and subsequent +the @value{FN} or command associated with it, and subsequent writes to the same file or command are appended to the previous writes. The file or pipe stays open until @command{awk} exits. @@ -9469,7 +9469,7 @@ file or command, or the next @code{print} or @code{printf} to that file or command, reopens the file or reruns the command. Because the expression that you use to close a file or pipeline must exactly match the expression used to open the file or run the command, -it is good practice to use a variable to store the @var{FN} or command. +it is good practice to use a valueiable to store the @value{FN} or command. The previous example becomes the following: @example @@ -10070,7 +10070,7 @@ as in the following: @noindent the variable is set at the very beginning, even before the @code{BEGIN} rules execute. The @option{-v} option and its assignment -must precede all the @var{FN} arguments, as well as the program text. +must precede all the @value{FN} arguments, as well as the program text. (@xref{Options}, for more information about the @option{-v} option.) Otherwise, the variable assignment is performed at a time determined by @@ -13765,14 +13765,14 @@ about how @command{awk} uses these variables. @item @code{ARGIND #} The index in @code{ARGV} of the current file being processed. Every time @command{gawk} opens a new @value{DF} for processing, it sets -@code{ARGIND} to the index in @code{ARGV} of the @var{FN}. +@code{ARGIND} to the index in @code{ARGV} of the @value{FN}. When @command{gawk} is processing the input files, @samp{FILENAME == ARGV[ARGIND]} is always true. @cindex files, processing@comma{} @code{ARGIND} variable and This variable is useful in file processing; it allows you to tell how far along you are in the list of @value{DF}s as well as to distinguish between -successive instances of the same @var{FN} on the command line. +successive instances of the same @value{FN} on the command line. @cindex file names, distinguishing While you can change the value of @code{ARGIND} within your @command{awk} @@ -14198,11 +14198,11 @@ additional files to be read. If the value of @code{ARGC} is decreased, that eliminates input files from the end of the list. By recording the old value of @code{ARGC} elsewhere, a program can treat the eliminated arguments as -something other than @var{FN}s. +something other than @value{FN}s. To eliminate a file from the middle of the list, store the null string (@code{""}) into @code{ARGV} in place of the file's name. As a -special feature, @command{awk} ignores @var{FN}s that have been +special feature, @command{awk} ignores @value{FN}s that have been replaced with the null string. Another option is to use the @code{delete} statement to remove elements from @@ -20197,13 +20197,13 @@ 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 -automatically changes for each new @value{DF}. The current @var{FN} is +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 it is necessary to call @code{endfile()} for the old file. Because @code{endfile()} should only be called if a file has been processed, the program first checks to make sure that @code{_oldfilename} is not the null -string. The program then assigns the current @var{FN} to +string. The program then assigns the current @value{FN} to @code{_oldfilename} and calls @code{beginfile()} for the file. Because, like all @command{awk} variables, @code{_oldfilename} is initialized to the null string, this rule executes correctly even for the @@ -20395,7 +20395,7 @@ Using @command{gawk}'s @code{ARGIND} variable @value{DF} has been skipped. Similar to the library file presented in @ref{Filetrans Function}, the following library file calls a function named @code{zerofile()} that the user must provide. The arguments passed are -the @var{FN} and the position in @code{ARGV} where it was found: +the @value{FN} and the position in @code{ARGV} where it was found: @cindex @code{zerofile.awk} program @example @@ -20490,8 +20490,8 @@ END @{ Occasionally, you might not want @command{awk} to process command-line variable assignments (@pxref{Assignment Options}). -In particular, if you have a @var{FN} that contains an @samp{=} character, -@command{awk} treats the @var{FN} as an assignment, and does not process it. +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. Some users have suggested an additional command-line option for @command{gawk} to disable command-line assignments. However, some simple programming with @@ -20535,7 +20535,7 @@ awk -v No_command_assign=1 -f noassign.awk -f yourprog.awk * The function works by looping through the arguments. It prepends @samp{./} to any argument that matches the form -of a variable assignment, turning that argument into a @var{FN}. +of a variable assignment, turning that argument into a @value{FN}. The use of @code{No_command_assign} allows you to disable command-line assignments at invocation time, by giving the variable a true value. @@ -20891,7 +20891,7 @@ etc., as its own options. After @code{getopt()} is through, it is the responsibility of the user level code to clear out all the elements of @code{ARGV} from 1 to @code{Optind}, so that @command{awk} does not try to process the -command-line options as @var{FN}s. +command-line options as @value{FN}s. @end quotation Several of the sample programs presented in @@ -22010,7 +22010,7 @@ spaces. Also remember that after @code{getopt()} is through we have to clear out all the elements of @code{ARGV} from 1 to @code{Optind}, so that @command{awk} does not try to process the command-line options -as @var{FN}s. +as @value{FN}s. After dealing with the command-line options, the program verifies that the options make sense. Only one or the other of @option{-c} and @option{-f} @@ -22207,8 +22207,8 @@ You invoke it as follows: The @var{pattern} is a regular expression. In typical usage, the regular expression is quoted to prevent the shell from expanding any of the -special characters as @var{FN} wildcards. Normally, @command{egrep} -prints the lines that matched. If multiple @var{FN}s are provided on +special characters as @value{FN} wildcards. Normally, @command{egrep} +prints the lines that matched. If multiple @value{FN}s are provided on the command line, each output line is preceded by the name of the file and a colon. @@ -22299,7 +22299,7 @@ pattern is supplied with @option{-e}, the first nonoption on the command line is used. The @command{awk} command-line arguments up to @code{ARGV[Optind]} are cleared, so that @command{awk} won't try to process them as files. If no files are specified, the standard input is used, and if multiple files are -specified, we make sure to note this so that the @var{FN}s can precede the +specified, we make sure to note this so that the @value{FN}s can precede the matched lines in the output: @example @@ -22402,9 +22402,9 @@ 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 (@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 @var{FN}s, we can -print the @var{FN}, and then skip to the next file with @code{nextfile}. -Finally, each line is printed, with a leading @var{FN} and colon +@code{nextfile}. Similarly, if we are only printing @value{FN}s, we can +print the @value{FN}, and then skip to the next file with @code{nextfile}. +Finally, each line is printed, with a leading @value{FN} and colon if necessary: @cindex @code{!} (exclamation point), @code{!} operator @@ -22654,7 +22654,7 @@ 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 1000. To change the name of the output files to something like @file{myfileaa}, @file{myfileab}, and so on, supply an additional -argument that specifies the @var{FN} prefix. +argument that specifies the @value{FN} prefix. Here is a version of @command{split} in @command{awk}. It uses the @code{ord()} and @code{chr()} functions presented in @@ -30881,7 +30881,7 @@ empty string (@code{""}). The @code{func} pointer is the address of a An @dfn{exit callback} function is a function that @command{gawk} calls before it exits. -Such functions are useful if you have general ``clean up'' tasks +Such functions are useful if you have general ``cleanup'' tasks that should be performed in your extension (such as closing data base connections or other resource deallocations). You can register such @@ -31684,7 +31684,7 @@ keeps track of the usage. When a variable's value changes, @command{gawk} simply decrements the reference count on the old value and updates the variable to use the new value. -Finally, as part of your clean up action (@pxref{Exit Callback Functions}) +Finally, as part of your cleanup action (@pxref{Exit Callback Functions}) you should release any cached values that you created, using @code{release_value()}. @@ -33370,10 +33370,10 @@ The arguments to @code{fnmatch()} are: @table @code @item pattern -The @var{FN} wildcard to match. +The @value{FN} wildcard to match. @item string -The @var{FN} string. +The @value{FN} string. @item flag Either zero, or the bitwise OR of one or more of the @@ -33480,8 +33480,8 @@ standard output to a temporary file configured to have the same owner and permissions as the original. After the file has been processed, the extension restores standard output to its original destination. If @code{INPLACE_SUFFIX} is not an empty string, the original file is -linked to a backup @var{FN} created by appending that suffix. Finally, -the temporary file is renamed to the original @var{FN}. +linked to a backup @value{FN} created by appending that suffix. Finally, +the temporary file is renamed to the original @value{FN}. If any error occurs, the extension issues a fatal error to terminate processing immediately without damaging the original file. @@ -33547,7 +33547,7 @@ on the command line (or with @code{getline}), 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 -@var{FN}, separated by a forward slash character. +@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 indicating the type of the file. The letters are file types are shown @@ -36473,7 +36473,7 @@ $ @kbd{MMK/DESCRIPTION=[.vms]descrip.mms gawk} @end example @command{MMK} is an open source, free, near-clone of @command{MMS} and -can better handle ODS-5 volumes with upper- and lowercase @var{FN}s. +can better handle ODS-5 volumes with upper- and lowercase @value{FN}s. @command{MMK} is available from @uref{https://github.com/endlesssoftware/mmk}. With ODS-5 volumes and extended parsing enabled, the case of the target @@ -36608,7 +36608,7 @@ for @command{awk} program files. For the @option{-f} option, if the specified looks in the current directory first, then in the directory specified by the translation of @samp{AWK_LIBRARY} if the file is not found. If, after searching in both directories, the file still is not found, -@command{gawk} appends the suffix @samp{.awk} to the @var{FN} and retries +@command{gawk} appends the suffix @samp{.awk} to the @value{FN} and retries the file search. If @samp{AWK_LIBRARY} has no definition, a default value of @samp{SYS$LIBRARY:} is used for it. @@ -37898,7 +37898,7 @@ two-way I/O. @item An extension should be able to provide a ``call back'' function -to perform clean up actions when @command{gawk} exits. +to perform cleanup actions when @command{gawk} exits. @item An extension should be able to provide a version string so that @@ -37995,8 +37995,8 @@ in @value{PVERSION} 4.1. However, for many years @command{gawk} provided an extension mechanism that required knowledge of @command{gawk} internals and that was not as well designed. -In order to provide a transition period, @command{gawk} version -4.1 continues to support the original extension mechanism. +In order to provide a transition period, @command{gawk} @value{PVERSION} 4.1 +continues to support the original extension mechanism. This will be true for the life of exactly one major release. This support will be withdrawn, and removed from the source code, at the next major release. -- cgit v1.2.3 From 4f04830cdcef50ac2449b6dbc97c67acc4ec238d Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 13 Jun 2014 08:06:51 +0300 Subject: Another typo fix. --- doc/gawk.info | 852 ++++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 2 +- doc/gawktexi.in | 2 +- 3 files changed, 428 insertions(+), 428 deletions(-) diff --git a/doc/gawk.info b/doc/gawk.info index 39aa56b1..2e30ad95 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -6577,9 +6577,9 @@ work identically for `printf': `print ITEMS > OUTPUT-FILE' This redirection prints the items into the output file named - {No value for `output-file'}. The file name OUTPUT-FILE can be any - expression. Its value is changed to a string and then used as a - file name (*note Expressions::). + OUTPUT-FILE. The file name OUTPUT-FILE can be any expression. + Its value is changed to a string and then used as a file name + (*note Expressions::). When this type of redirection is used, the OUTPUT-FILE is erased before the first output is written to it. Subsequent writes to @@ -33948,428 +33948,428 @@ Node: Control Letters273719 Node: Format Modifiers277573 Node: Printf Examples283600 Node: Redirection286307 -Node: Special Files293297 -Node: Special FD293828 -Ref: Special FD-Footnote-1297452 -Node: Special Network297526 -Node: Special Caveats298376 -Node: Close Files And Pipes299172 -Ref: Close Files And Pipes-Footnote-1306335 -Ref: Close Files And Pipes-Footnote-2306483 -Node: Output Summary306633 -Node: Expressions307605 -Node: Values308790 -Node: Constants309466 -Node: Scalar Constants310146 -Ref: Scalar Constants-Footnote-1311005 -Node: Nondecimal-numbers311255 -Node: Regexp Constants314255 -Node: Using Constant Regexps314730 -Node: Variables317800 -Node: Using Variables318455 -Node: Assignment Options320179 -Node: Conversion322054 -Ref: table-locale-affects327490 -Ref: Conversion-Footnote-1328114 -Node: All Operators328223 -Node: Arithmetic Ops328853 -Node: Concatenation331358 -Ref: Concatenation-Footnote-1334154 -Node: Assignment Ops334274 -Ref: table-assign-ops339257 -Node: Increment Ops340574 -Node: Truth Values and Conditions344012 -Node: Truth Values345095 -Node: Typing and Comparison346144 -Node: Variable Typing346937 -Ref: Variable Typing-Footnote-1350837 -Node: Comparison Operators350959 -Ref: table-relational-ops351369 -Node: POSIX String Comparison354919 -Ref: POSIX String Comparison-Footnote-1356003 -Node: Boolean Ops356141 -Ref: Boolean Ops-Footnote-1360211 -Node: Conditional Exp360302 -Node: Function Calls362029 -Node: Precedence365787 -Node: Locales369456 -Node: Expressions Summary371087 -Node: Patterns and Actions373584 -Node: Pattern Overview374700 -Node: Regexp Patterns376377 -Node: Expression Patterns376920 -Node: Ranges380701 -Node: BEGIN/END383807 -Node: Using BEGIN/END384569 -Ref: Using BEGIN/END-Footnote-1387305 -Node: I/O And BEGIN/END387411 -Node: BEGINFILE/ENDFILE389696 -Node: Empty392627 -Node: Using Shell Variables392944 -Node: Action Overview395227 -Node: Statements397554 -Node: If Statement399402 -Node: While Statement400900 -Node: Do Statement402944 -Node: For Statement404100 -Node: Switch Statement407252 -Node: Break Statement409355 -Node: Continue Statement411410 -Node: Next Statement413203 -Node: Nextfile Statement415593 -Node: Exit Statement418248 -Node: Built-in Variables420652 -Node: User-modified421779 -Ref: User-modified-Footnote-1429464 -Node: Auto-set429526 -Ref: Auto-set-Footnote-1442091 -Ref: Auto-set-Footnote-2442296 -Node: ARGC and ARGV442352 -Node: Pattern Action Summary446206 -Node: Arrays448429 -Node: Array Basics449978 -Node: Array Intro450804 -Ref: figure-array-elements452777 -Node: Reference to Elements455184 -Node: Assigning Elements457457 -Node: Array Example457948 -Node: Scanning an Array459680 -Node: Controlling Scanning462695 -Ref: Controlling Scanning-Footnote-1467868 -Node: Delete468184 -Ref: Delete-Footnote-1470949 -Node: Numeric Array Subscripts471006 -Node: Uninitialized Subscripts473189 -Node: Multidimensional474814 -Node: Multiscanning477907 -Node: Arrays of Arrays479496 -Node: Arrays Summary484159 -Node: Functions486264 -Node: Built-in487137 -Node: Calling Built-in488215 -Node: Numeric Functions490203 -Ref: Numeric Functions-Footnote-1494037 -Ref: Numeric Functions-Footnote-2494394 -Ref: Numeric Functions-Footnote-3494442 -Node: String Functions494711 -Ref: String Functions-Footnote-1517722 -Ref: String Functions-Footnote-2517851 -Ref: String Functions-Footnote-3518099 -Node: Gory Details518186 -Ref: table-sub-escapes519855 -Ref: table-sub-posix-92521209 -Ref: table-sub-proposed522560 -Ref: table-posix-sub523914 -Ref: table-gensub-escapes525459 -Ref: Gory Details-Footnote-1526635 -Ref: Gory Details-Footnote-2526686 -Node: I/O Functions526837 -Ref: I/O Functions-Footnote-1533960 -Node: Time Functions534107 -Ref: Time Functions-Footnote-1544571 -Ref: Time Functions-Footnote-2544639 -Ref: Time Functions-Footnote-3544797 -Ref: Time Functions-Footnote-4544908 -Ref: Time Functions-Footnote-5545020 -Ref: Time Functions-Footnote-6545247 -Node: Bitwise Functions545513 -Ref: table-bitwise-ops546075 -Ref: Bitwise Functions-Footnote-1550320 -Node: Type Functions550504 -Node: I18N Functions551646 -Node: User-defined553291 -Node: Definition Syntax554095 -Ref: Definition Syntax-Footnote-1559020 -Node: Function Example559089 -Ref: Function Example-Footnote-1561733 -Node: Function Caveats561755 -Node: Calling A Function562273 -Node: Variable Scope563228 -Node: Pass By Value/Reference566216 -Node: Return Statement569724 -Node: Dynamic Typing572708 -Node: Indirect Calls573637 -Node: Functions Summary583350 -Node: Library Functions585889 -Ref: Library Functions-Footnote-1589464 -Ref: Library Functions-Footnote-2589607 -Node: Library Names589778 -Ref: Library Names-Footnote-1593251 -Ref: Library Names-Footnote-2593471 -Node: General Functions593557 -Node: Strtonum Function594585 -Node: Assert Function597515 -Node: Round Function600841 -Node: Cliff Random Function602382 -Node: Ordinal Functions603398 -Ref: Ordinal Functions-Footnote-1606475 -Ref: Ordinal Functions-Footnote-2606727 -Node: Join Function606938 -Ref: Join Function-Footnote-1608709 -Node: Getlocaltime Function608909 -Node: Readfile Function612645 -Node: Data File Management614484 -Node: Filetrans Function615116 -Node: Rewind Function619185 -Node: File Checking620572 -Ref: File Checking-Footnote-1621704 -Node: Empty Files621905 -Node: Ignoring Assigns624135 -Node: Getopt Function625689 -Ref: Getopt Function-Footnote-1636992 -Node: Passwd Functions637195 -Ref: Passwd Functions-Footnote-1646174 -Node: Group Functions646262 -Ref: Group Functions-Footnote-1654204 -Node: Walking Arrays654417 -Node: Library Functions Summary656587 -Node: Sample Programs657949 -Node: Running Examples658676 -Node: Clones659404 -Node: Cut Program660628 -Node: Egrep Program670496 -Ref: Egrep Program-Footnote-1678467 -Node: Id Program678577 -Node: Split Program682241 -Ref: Split Program-Footnote-1685779 -Node: Tee Program685907 -Node: Uniq Program688714 -Node: Wc Program696144 -Ref: Wc Program-Footnote-1700412 -Ref: Wc Program-Footnote-2700612 -Node: Miscellaneous Programs700704 -Node: Dupword Program701917 -Node: Alarm Program703948 -Node: Translate Program708762 -Ref: Translate Program-Footnote-1713153 -Ref: Translate Program-Footnote-2713423 -Node: Labels Program713557 -Ref: Labels Program-Footnote-1716928 -Node: Word Sorting717012 -Node: History Sorting721055 -Node: Extract Program722891 -Ref: Extract Program-Footnote-1730466 -Node: Simple Sed730595 -Node: Igawk Program733657 -Ref: Igawk Program-Footnote-1748833 -Ref: Igawk Program-Footnote-2749034 -Node: Anagram Program749172 -Node: Signature Program752240 -Node: Programs Summary753487 -Node: Advanced Features754675 -Node: Nondecimal Data756623 -Node: Array Sorting758200 -Node: Controlling Array Traversal758897 -Node: Array Sorting Functions767177 -Ref: Array Sorting Functions-Footnote-1771084 -Node: Two-way I/O771278 -Ref: Two-way I/O-Footnote-1776794 -Node: TCP/IP Networking776876 -Node: Profiling779720 -Node: Advanced Features Summary787262 -Node: Internationalization789126 -Node: I18N and L10N790606 -Node: Explaining gettext791292 -Ref: Explaining gettext-Footnote-1796432 -Ref: Explaining gettext-Footnote-2796616 -Node: Programmer i18n796781 -Node: Translator i18n801006 -Node: String Extraction801800 -Ref: String Extraction-Footnote-1802761 -Node: Printf Ordering802847 -Ref: Printf Ordering-Footnote-1805629 -Node: I18N Portability805693 -Ref: I18N Portability-Footnote-1808142 -Node: I18N Example808205 -Ref: I18N Example-Footnote-1810927 -Node: Gawk I18N810999 -Node: I18N Summary811637 -Node: Debugger812976 -Node: Debugging813998 -Node: Debugging Concepts814439 -Node: Debugging Terms816295 -Node: Awk Debugging818892 -Node: Sample Debugging Session819784 -Node: Debugger Invocation820304 -Node: Finding The Bug821637 -Node: List of Debugger Commands828119 -Node: Breakpoint Control829451 -Node: Debugger Execution Control833115 -Node: Viewing And Changing Data836475 -Node: Execution Stack839833 -Node: Debugger Info841346 -Node: Miscellaneous Debugger Commands845340 -Node: Readline Support850524 -Node: Limitations851416 -Node: Debugging Summary853690 -Node: Arbitrary Precision Arithmetic854854 -Ref: Arbitrary Precision Arithmetic-Footnote-1856503 -Node: General Arithmetic856651 -Node: Floating Point Issues858371 -Node: String Conversion Precision859252 -Ref: String Conversion Precision-Footnote-1860957 -Node: Unexpected Results861066 -Node: POSIX Floating Point Problems863219 -Ref: POSIX Floating Point Problems-Footnote-1867040 -Node: Integer Programming867078 -Node: Floating-point Programming868889 -Ref: Floating-point Programming-Footnote-1875217 -Ref: Floating-point Programming-Footnote-2875487 -Node: Floating-point Representation875751 -Node: Floating-point Context876916 -Ref: table-ieee-formats877755 -Node: Rounding Mode879139 -Ref: table-rounding-modes879618 -Ref: Rounding Mode-Footnote-1882633 -Node: Gawk and MPFR882812 -Node: Arbitrary Precision Floats884221 -Ref: Arbitrary Precision Floats-Footnote-1886664 -Node: Setting Precision886985 -Ref: table-predefined-precision-strings887669 -Node: Setting Rounding Mode889814 -Ref: table-gawk-rounding-modes890218 -Node: Floating-point Constants891405 -Node: Changing Precision892857 -Ref: Changing Precision-Footnote-1894249 -Node: Exact Arithmetic894423 -Node: Arbitrary Precision Integers897557 -Ref: Arbitrary Precision Integers-Footnote-1900572 -Node: Dynamic Extensions900719 -Node: Extension Intro902177 -Node: Plugin License903442 -Node: Extension Mechanism Outline904127 -Ref: figure-load-extension904551 -Ref: figure-load-new-function906036 -Ref: figure-call-new-function907038 -Node: Extension API Description909022 -Node: Extension API Functions Introduction910472 -Node: General Data Types915338 -Ref: General Data Types-Footnote-1921031 -Node: Requesting Values921330 -Ref: table-value-types-returned922067 -Node: Memory Allocation Functions923025 -Ref: Memory Allocation Functions-Footnote-1925772 -Node: Constructor Functions925868 -Node: Registration Functions927626 -Node: Extension Functions928311 -Node: Exit Callback Functions930613 -Node: Extension Version String931862 -Node: Input Parsers932512 -Node: Output Wrappers942315 -Node: Two-way processors946831 -Node: Printing Messages949035 -Ref: Printing Messages-Footnote-1950112 -Node: Updating `ERRNO'950264 -Node: Accessing Parameters951003 -Node: Symbol Table Access952233 -Node: Symbol table by name952747 -Node: Symbol table by cookie954723 -Ref: Symbol table by cookie-Footnote-1958856 -Node: Cached values958919 -Ref: Cached values-Footnote-1962423 -Node: Array Manipulation962514 -Ref: Array Manipulation-Footnote-1963612 -Node: Array Data Types963651 -Ref: Array Data Types-Footnote-1966354 -Node: Array Functions966446 -Node: Flattening Arrays970320 -Node: Creating Arrays977172 -Node: Extension API Variables981903 -Node: Extension Versioning982539 -Node: Extension API Informational Variables984440 -Node: Extension API Boilerplate985526 -Node: Finding Extensions989330 -Node: Extension Example989890 -Node: Internal File Description990620 -Node: Internal File Ops994711 -Ref: Internal File Ops-Footnote-11006257 -Node: Using Internal File Ops1006397 -Ref: Using Internal File Ops-Footnote-11008744 -Node: Extension Samples1009012 -Node: Extension Sample File Functions1010536 -Node: Extension Sample Fnmatch1018104 -Node: Extension Sample Fork1019585 -Node: Extension Sample Inplace1020798 -Node: Extension Sample Ord1022578 -Node: Extension Sample Readdir1023414 -Ref: table-readdir-file-types1024270 -Node: Extension Sample Revout1025069 -Node: Extension Sample Rev2way1025660 -Node: Extension Sample Read write array1026401 -Node: Extension Sample Readfile1028280 -Node: Extension Sample API Tests1029380 -Node: Extension Sample Time1029905 -Node: gawkextlib1031220 -Node: Language History1034007 -Node: V7/SVR3.11035601 -Node: SVR41037921 -Node: POSIX1039363 -Node: BTL1040749 -Node: POSIX/GNU1041483 -Node: Feature History1047082 -Node: Common Extensions1060194 -Node: Ranges and Locales1061506 -Ref: Ranges and Locales-Footnote-11066123 -Ref: Ranges and Locales-Footnote-21066150 -Ref: Ranges and Locales-Footnote-31066384 -Node: Contributors1066605 -Node: Installation1072043 -Node: Gawk Distribution1072937 -Node: Getting1073421 -Node: Extracting1074247 -Node: Distribution contents1075889 -Node: Unix Installation1081606 -Node: Quick Installation1082223 -Node: Additional Configuration Options1084665 -Node: Configuration Philosophy1086403 -Node: Non-Unix Installation1088754 -Node: PC Installation1089212 -Node: PC Binary Installation1090523 -Node: PC Compiling1092371 -Ref: PC Compiling-Footnote-11095370 -Node: PC Testing1095475 -Node: PC Using1096651 -Node: Cygwin1100809 -Node: MSYS1101618 -Node: VMS Installation1102132 -Node: VMS Compilation1102928 -Ref: VMS Compilation-Footnote-11104150 -Node: VMS Dynamic Extensions1104208 -Node: VMS Installation Details1105581 -Node: VMS Running1107833 -Node: VMS GNV1110667 -Node: VMS Old Gawk1111390 -Node: Bugs1111860 -Node: Other Versions1115864 -Node: Notes1122089 -Node: Compatibility Mode1122889 -Node: Additions1123671 -Node: Accessing The Source1124596 -Node: Adding Code1126032 -Node: New Ports1132210 -Node: Derived Files1136691 -Ref: Derived Files-Footnote-11141772 -Ref: Derived Files-Footnote-21141806 -Ref: Derived Files-Footnote-31142402 -Node: Future Extensions1142516 -Node: Implementation Limitations1143122 -Node: Extension Design1144370 -Node: Old Extension Problems1145524 -Ref: Old Extension Problems-Footnote-11147041 -Node: Extension New Mechanism Goals1147098 -Ref: Extension New Mechanism Goals-Footnote-11150458 -Node: Extension Other Design Decisions1150647 -Node: Extension Future Growth1152753 -Node: Old Extension Mechanism1153589 -Node: Basic Concepts1155329 -Node: Basic High Level1156010 -Ref: figure-general-flow1156282 -Ref: figure-process-flow1156881 -Ref: Basic High Level-Footnote-11160110 -Node: Basic Data Typing1160295 -Node: Glossary1163622 -Node: Copying1188774 -Node: GNU Free Documentation License1226330 -Node: Index1251466 +Node: Special Files293279 +Node: Special FD293810 +Ref: Special FD-Footnote-1297434 +Node: Special Network297508 +Node: Special Caveats298358 +Node: Close Files And Pipes299154 +Ref: Close Files And Pipes-Footnote-1306317 +Ref: Close Files And Pipes-Footnote-2306465 +Node: Output Summary306615 +Node: Expressions307587 +Node: Values308772 +Node: Constants309448 +Node: Scalar Constants310128 +Ref: Scalar Constants-Footnote-1310987 +Node: Nondecimal-numbers311237 +Node: Regexp Constants314237 +Node: Using Constant Regexps314712 +Node: Variables317782 +Node: Using Variables318437 +Node: Assignment Options320161 +Node: Conversion322036 +Ref: table-locale-affects327472 +Ref: Conversion-Footnote-1328096 +Node: All Operators328205 +Node: Arithmetic Ops328835 +Node: Concatenation331340 +Ref: Concatenation-Footnote-1334136 +Node: Assignment Ops334256 +Ref: table-assign-ops339239 +Node: Increment Ops340556 +Node: Truth Values and Conditions343994 +Node: Truth Values345077 +Node: Typing and Comparison346126 +Node: Variable Typing346919 +Ref: Variable Typing-Footnote-1350819 +Node: Comparison Operators350941 +Ref: table-relational-ops351351 +Node: POSIX String Comparison354901 +Ref: POSIX String Comparison-Footnote-1355985 +Node: Boolean Ops356123 +Ref: Boolean Ops-Footnote-1360193 +Node: Conditional Exp360284 +Node: Function Calls362011 +Node: Precedence365769 +Node: Locales369438 +Node: Expressions Summary371069 +Node: Patterns and Actions373566 +Node: Pattern Overview374682 +Node: Regexp Patterns376359 +Node: Expression Patterns376902 +Node: Ranges380683 +Node: BEGIN/END383789 +Node: Using BEGIN/END384551 +Ref: Using BEGIN/END-Footnote-1387287 +Node: I/O And BEGIN/END387393 +Node: BEGINFILE/ENDFILE389678 +Node: Empty392609 +Node: Using Shell Variables392926 +Node: Action Overview395209 +Node: Statements397536 +Node: If Statement399384 +Node: While Statement400882 +Node: Do Statement402926 +Node: For Statement404082 +Node: Switch Statement407234 +Node: Break Statement409337 +Node: Continue Statement411392 +Node: Next Statement413185 +Node: Nextfile Statement415575 +Node: Exit Statement418230 +Node: Built-in Variables420634 +Node: User-modified421761 +Ref: User-modified-Footnote-1429446 +Node: Auto-set429508 +Ref: Auto-set-Footnote-1442073 +Ref: Auto-set-Footnote-2442278 +Node: ARGC and ARGV442334 +Node: Pattern Action Summary446188 +Node: Arrays448411 +Node: Array Basics449960 +Node: Array Intro450786 +Ref: figure-array-elements452759 +Node: Reference to Elements455166 +Node: Assigning Elements457439 +Node: Array Example457930 +Node: Scanning an Array459662 +Node: Controlling Scanning462677 +Ref: Controlling Scanning-Footnote-1467850 +Node: Delete468166 +Ref: Delete-Footnote-1470931 +Node: Numeric Array Subscripts470988 +Node: Uninitialized Subscripts473171 +Node: Multidimensional474796 +Node: Multiscanning477889 +Node: Arrays of Arrays479478 +Node: Arrays Summary484141 +Node: Functions486246 +Node: Built-in487119 +Node: Calling Built-in488197 +Node: Numeric Functions490185 +Ref: Numeric Functions-Footnote-1494019 +Ref: Numeric Functions-Footnote-2494376 +Ref: Numeric Functions-Footnote-3494424 +Node: String Functions494693 +Ref: String Functions-Footnote-1517704 +Ref: String Functions-Footnote-2517833 +Ref: String Functions-Footnote-3518081 +Node: Gory Details518168 +Ref: table-sub-escapes519837 +Ref: table-sub-posix-92521191 +Ref: table-sub-proposed522542 +Ref: table-posix-sub523896 +Ref: table-gensub-escapes525441 +Ref: Gory Details-Footnote-1526617 +Ref: Gory Details-Footnote-2526668 +Node: I/O Functions526819 +Ref: I/O Functions-Footnote-1533942 +Node: Time Functions534089 +Ref: Time Functions-Footnote-1544553 +Ref: Time Functions-Footnote-2544621 +Ref: Time Functions-Footnote-3544779 +Ref: Time Functions-Footnote-4544890 +Ref: Time Functions-Footnote-5545002 +Ref: Time Functions-Footnote-6545229 +Node: Bitwise Functions545495 +Ref: table-bitwise-ops546057 +Ref: Bitwise Functions-Footnote-1550302 +Node: Type Functions550486 +Node: I18N Functions551628 +Node: User-defined553273 +Node: Definition Syntax554077 +Ref: Definition Syntax-Footnote-1559002 +Node: Function Example559071 +Ref: Function Example-Footnote-1561715 +Node: Function Caveats561737 +Node: Calling A Function562255 +Node: Variable Scope563210 +Node: Pass By Value/Reference566198 +Node: Return Statement569706 +Node: Dynamic Typing572690 +Node: Indirect Calls573619 +Node: Functions Summary583332 +Node: Library Functions585871 +Ref: Library Functions-Footnote-1589446 +Ref: Library Functions-Footnote-2589589 +Node: Library Names589760 +Ref: Library Names-Footnote-1593233 +Ref: Library Names-Footnote-2593453 +Node: General Functions593539 +Node: Strtonum Function594567 +Node: Assert Function597497 +Node: Round Function600823 +Node: Cliff Random Function602364 +Node: Ordinal Functions603380 +Ref: Ordinal Functions-Footnote-1606457 +Ref: Ordinal Functions-Footnote-2606709 +Node: Join Function606920 +Ref: Join Function-Footnote-1608691 +Node: Getlocaltime Function608891 +Node: Readfile Function612627 +Node: Data File Management614466 +Node: Filetrans Function615098 +Node: Rewind Function619167 +Node: File Checking620554 +Ref: File Checking-Footnote-1621686 +Node: Empty Files621887 +Node: Ignoring Assigns624117 +Node: Getopt Function625671 +Ref: Getopt Function-Footnote-1636974 +Node: Passwd Functions637177 +Ref: Passwd Functions-Footnote-1646156 +Node: Group Functions646244 +Ref: Group Functions-Footnote-1654186 +Node: Walking Arrays654399 +Node: Library Functions Summary656569 +Node: Sample Programs657931 +Node: Running Examples658658 +Node: Clones659386 +Node: Cut Program660610 +Node: Egrep Program670478 +Ref: Egrep Program-Footnote-1678449 +Node: Id Program678559 +Node: Split Program682223 +Ref: Split Program-Footnote-1685761 +Node: Tee Program685889 +Node: Uniq Program688696 +Node: Wc Program696126 +Ref: Wc Program-Footnote-1700394 +Ref: Wc Program-Footnote-2700594 +Node: Miscellaneous Programs700686 +Node: Dupword Program701899 +Node: Alarm Program703930 +Node: Translate Program708744 +Ref: Translate Program-Footnote-1713135 +Ref: Translate Program-Footnote-2713405 +Node: Labels Program713539 +Ref: Labels Program-Footnote-1716910 +Node: Word Sorting716994 +Node: History Sorting721037 +Node: Extract Program722873 +Ref: Extract Program-Footnote-1730448 +Node: Simple Sed730577 +Node: Igawk Program733639 +Ref: Igawk Program-Footnote-1748815 +Ref: Igawk Program-Footnote-2749016 +Node: Anagram Program749154 +Node: Signature Program752222 +Node: Programs Summary753469 +Node: Advanced Features754657 +Node: Nondecimal Data756605 +Node: Array Sorting758182 +Node: Controlling Array Traversal758879 +Node: Array Sorting Functions767159 +Ref: Array Sorting Functions-Footnote-1771066 +Node: Two-way I/O771260 +Ref: Two-way I/O-Footnote-1776776 +Node: TCP/IP Networking776858 +Node: Profiling779702 +Node: Advanced Features Summary787244 +Node: Internationalization789108 +Node: I18N and L10N790588 +Node: Explaining gettext791274 +Ref: Explaining gettext-Footnote-1796414 +Ref: Explaining gettext-Footnote-2796598 +Node: Programmer i18n796763 +Node: Translator i18n800988 +Node: String Extraction801782 +Ref: String Extraction-Footnote-1802743 +Node: Printf Ordering802829 +Ref: Printf Ordering-Footnote-1805611 +Node: I18N Portability805675 +Ref: I18N Portability-Footnote-1808124 +Node: I18N Example808187 +Ref: I18N Example-Footnote-1810909 +Node: Gawk I18N810981 +Node: I18N Summary811619 +Node: Debugger812958 +Node: Debugging813980 +Node: Debugging Concepts814421 +Node: Debugging Terms816277 +Node: Awk Debugging818874 +Node: Sample Debugging Session819766 +Node: Debugger Invocation820286 +Node: Finding The Bug821619 +Node: List of Debugger Commands828101 +Node: Breakpoint Control829433 +Node: Debugger Execution Control833097 +Node: Viewing And Changing Data836457 +Node: Execution Stack839815 +Node: Debugger Info841328 +Node: Miscellaneous Debugger Commands845322 +Node: Readline Support850506 +Node: Limitations851398 +Node: Debugging Summary853672 +Node: Arbitrary Precision Arithmetic854836 +Ref: Arbitrary Precision Arithmetic-Footnote-1856485 +Node: General Arithmetic856633 +Node: Floating Point Issues858353 +Node: String Conversion Precision859234 +Ref: String Conversion Precision-Footnote-1860939 +Node: Unexpected Results861048 +Node: POSIX Floating Point Problems863201 +Ref: POSIX Floating Point Problems-Footnote-1867022 +Node: Integer Programming867060 +Node: Floating-point Programming868871 +Ref: Floating-point Programming-Footnote-1875199 +Ref: Floating-point Programming-Footnote-2875469 +Node: Floating-point Representation875733 +Node: Floating-point Context876898 +Ref: table-ieee-formats877737 +Node: Rounding Mode879121 +Ref: table-rounding-modes879600 +Ref: Rounding Mode-Footnote-1882615 +Node: Gawk and MPFR882794 +Node: Arbitrary Precision Floats884203 +Ref: Arbitrary Precision Floats-Footnote-1886646 +Node: Setting Precision886967 +Ref: table-predefined-precision-strings887651 +Node: Setting Rounding Mode889796 +Ref: table-gawk-rounding-modes890200 +Node: Floating-point Constants891387 +Node: Changing Precision892839 +Ref: Changing Precision-Footnote-1894231 +Node: Exact Arithmetic894405 +Node: Arbitrary Precision Integers897539 +Ref: Arbitrary Precision Integers-Footnote-1900554 +Node: Dynamic Extensions900701 +Node: Extension Intro902159 +Node: Plugin License903424 +Node: Extension Mechanism Outline904109 +Ref: figure-load-extension904533 +Ref: figure-load-new-function906018 +Ref: figure-call-new-function907020 +Node: Extension API Description909004 +Node: Extension API Functions Introduction910454 +Node: General Data Types915320 +Ref: General Data Types-Footnote-1921013 +Node: Requesting Values921312 +Ref: table-value-types-returned922049 +Node: Memory Allocation Functions923007 +Ref: Memory Allocation Functions-Footnote-1925754 +Node: Constructor Functions925850 +Node: Registration Functions927608 +Node: Extension Functions928293 +Node: Exit Callback Functions930595 +Node: Extension Version String931844 +Node: Input Parsers932494 +Node: Output Wrappers942297 +Node: Two-way processors946813 +Node: Printing Messages949017 +Ref: Printing Messages-Footnote-1950094 +Node: Updating `ERRNO'950246 +Node: Accessing Parameters950985 +Node: Symbol Table Access952215 +Node: Symbol table by name952729 +Node: Symbol table by cookie954705 +Ref: Symbol table by cookie-Footnote-1958838 +Node: Cached values958901 +Ref: Cached values-Footnote-1962405 +Node: Array Manipulation962496 +Ref: Array Manipulation-Footnote-1963594 +Node: Array Data Types963633 +Ref: Array Data Types-Footnote-1966336 +Node: Array Functions966428 +Node: Flattening Arrays970302 +Node: Creating Arrays977154 +Node: Extension API Variables981885 +Node: Extension Versioning982521 +Node: Extension API Informational Variables984422 +Node: Extension API Boilerplate985508 +Node: Finding Extensions989312 +Node: Extension Example989872 +Node: Internal File Description990602 +Node: Internal File Ops994693 +Ref: Internal File Ops-Footnote-11006239 +Node: Using Internal File Ops1006379 +Ref: Using Internal File Ops-Footnote-11008726 +Node: Extension Samples1008994 +Node: Extension Sample File Functions1010518 +Node: Extension Sample Fnmatch1018086 +Node: Extension Sample Fork1019567 +Node: Extension Sample Inplace1020780 +Node: Extension Sample Ord1022560 +Node: Extension Sample Readdir1023396 +Ref: table-readdir-file-types1024252 +Node: Extension Sample Revout1025051 +Node: Extension Sample Rev2way1025642 +Node: Extension Sample Read write array1026383 +Node: Extension Sample Readfile1028262 +Node: Extension Sample API Tests1029362 +Node: Extension Sample Time1029887 +Node: gawkextlib1031202 +Node: Language History1033989 +Node: V7/SVR3.11035583 +Node: SVR41037903 +Node: POSIX1039345 +Node: BTL1040731 +Node: POSIX/GNU1041465 +Node: Feature History1047064 +Node: Common Extensions1060176 +Node: Ranges and Locales1061488 +Ref: Ranges and Locales-Footnote-11066105 +Ref: Ranges and Locales-Footnote-21066132 +Ref: Ranges and Locales-Footnote-31066366 +Node: Contributors1066587 +Node: Installation1072025 +Node: Gawk Distribution1072919 +Node: Getting1073403 +Node: Extracting1074229 +Node: Distribution contents1075871 +Node: Unix Installation1081588 +Node: Quick Installation1082205 +Node: Additional Configuration Options1084647 +Node: Configuration Philosophy1086385 +Node: Non-Unix Installation1088736 +Node: PC Installation1089194 +Node: PC Binary Installation1090505 +Node: PC Compiling1092353 +Ref: PC Compiling-Footnote-11095352 +Node: PC Testing1095457 +Node: PC Using1096633 +Node: Cygwin1100791 +Node: MSYS1101600 +Node: VMS Installation1102114 +Node: VMS Compilation1102910 +Ref: VMS Compilation-Footnote-11104132 +Node: VMS Dynamic Extensions1104190 +Node: VMS Installation Details1105563 +Node: VMS Running1107815 +Node: VMS GNV1110649 +Node: VMS Old Gawk1111372 +Node: Bugs1111842 +Node: Other Versions1115846 +Node: Notes1122071 +Node: Compatibility Mode1122871 +Node: Additions1123653 +Node: Accessing The Source1124578 +Node: Adding Code1126014 +Node: New Ports1132192 +Node: Derived Files1136673 +Ref: Derived Files-Footnote-11141754 +Ref: Derived Files-Footnote-21141788 +Ref: Derived Files-Footnote-31142384 +Node: Future Extensions1142498 +Node: Implementation Limitations1143104 +Node: Extension Design1144352 +Node: Old Extension Problems1145506 +Ref: Old Extension Problems-Footnote-11147023 +Node: Extension New Mechanism Goals1147080 +Ref: Extension New Mechanism Goals-Footnote-11150440 +Node: Extension Other Design Decisions1150629 +Node: Extension Future Growth1152735 +Node: Old Extension Mechanism1153571 +Node: Basic Concepts1155311 +Node: Basic High Level1155992 +Ref: figure-general-flow1156264 +Ref: figure-process-flow1156863 +Ref: Basic High Level-Footnote-11160092 +Node: Basic Data Typing1160277 +Node: Glossary1163604 +Node: Copying1188756 +Node: GNU Free Documentation License1226312 +Node: Index1251448  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 03537176..5aaacef8 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -9415,7 +9415,7 @@ but they work identically for @code{printf}: @cindex operators, input/output @item print @var{items} > @var{output-file} This redirection prints the items into the output file named -@value{output-file}. The @value{FN} @var{output-file} can be any +@var{output-file}. The @value{FN} @var{output-file} can be any expression. Its value is changed to a string and then used as a @value{FN} (@pxref{Expressions}). diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 4bcb843d..ef793fbd 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -9034,7 +9034,7 @@ but they work identically for @code{printf}: @cindex operators, input/output @item print @var{items} > @var{output-file} This redirection prints the items into the output file named -@value{output-file}. The @value{FN} @var{output-file} can be any +@var{output-file}. The @value{FN} @var{output-file} can be any expression. Its value is changed to a string and then used as a @value{FN} (@pxref{Expressions}). -- cgit v1.2.3 From ec27289f558e73b40c3d90f599cf392a9d03e864 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 15 Jun 2014 20:36:33 +0300 Subject: Finish up summaries. Improvements in mystrtonum(). --- awklib/eg/lib/strtonum.awk | 10 +- doc/ChangeLog | 4 + doc/gawk.info | 1249 +++++++++++++++++++++++++------------------- doc/gawk.texi | 250 ++++++++- doc/gawktexi.in | 250 ++++++++- 5 files changed, 1207 insertions(+), 556 deletions(-) diff --git a/awklib/eg/lib/strtonum.awk b/awklib/eg/lib/strtonum.awk index a56ab50c..9342e789 100644 --- a/awklib/eg/lib/strtonum.awk +++ b/awklib/eg/lib/strtonum.awk @@ -3,8 +3,9 @@ # # Arnold Robbins, arnold@skeeve.com, Public Domain # February, 2004 +# Revised June, 2014 -function mystrtonum(str, ret, chars, n, i, k, c) +function mystrtonum(str, ret, n, i, k, c) { if (str ~ /^0[0-7]*$/) { # octal @@ -17,7 +18,7 @@ function mystrtonum(str, ret, chars, n, i, k, c) ret = ret * 8 + k } - } else if (str ~ /^0[xX][[:xdigit:]]+/) { + } else if (str ~ /^0[xX][[:xdigit:]]+$/) { # hexadecimal str = substr(str, 3) # lop off leading 0x n = length(str) @@ -25,10 +26,7 @@ function mystrtonum(str, ret, chars, n, i, k, c) for (i = 1; i <= n; i++) { c = substr(str, i, 1) c = tolower(c) - if ((k = index("0123456789", c)) > 0) - k-- # adjust for 1-basing in awk - else if ((k = index("abcdef", c)) > 0) - k += 9 + k = index("123456789abcdef", c) ret = ret * 16 + k } diff --git a/doc/ChangeLog b/doc/ChangeLog index d047e041..bd71b017 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-06-15 Arnold D. Robbins + + * gawktexi.in: Finish up summaries. Improvements in mystrtonum(). + 2014-06-13 Arnold D. Robbins * gawktexi.in: Fix typos from changes of 3 June when macros were diff --git a/doc/gawk.info b/doc/gawk.info index 2e30ad95..d7442017 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -1614,7 +1614,7 @@ at a later time. will probably print strange messages about syntax errors. For example, look at the following: - $ awk '{ print "hello" } # let's be cute' + $ awk 'BEGIN { print "hello" } # let's be cute' > The shell sees that the first two quotes match, and that a new @@ -14253,7 +14253,7 @@ versions of `awk': # mystrtonum --- convert string to number - function mystrtonum(str, ret, chars, n, i, k, c) + function mystrtonum(str, ret, n, i, k, c) { if (str ~ /^0[0-7]*$/) { # octal @@ -14266,7 +14266,7 @@ versions of `awk': ret = ret * 8 + k } - } else if (str ~ /^0[xX][[:xdigit:]]+/) { + } else if (str ~ /^0[xX][[:xdigit:]]+$/) { # hexadecimal str = substr(str, 3) # lop off leading 0x n = length(str) @@ -14274,10 +14274,7 @@ versions of `awk': for (i = 1; i <= n; i++) { c = substr(str, i, 1) c = tolower(c) - if ((k = index("0123456789", c)) > 0) - k-- # adjust for 1-basing in awk - else if ((k = index("abcdef", c)) > 0) - k += 9 + k = index("123456789abcdef", c) ret = ret * 16 + k } @@ -22310,6 +22307,7 @@ sample extensions are automatically built and installed when `gawk' is. * Extension Samples:: The sample extensions that ship with `gawk'. * gawkextlib:: The `gawkextlib' project. +* Extension summary:: Extension summary.  File: gawk.info, Node: Extension Intro, Next: Plugin License, Up: Dynamic Extensions @@ -22501,7 +22499,7 @@ through function pointers passed into your extension. API function pointers are provided for the following kinds of operations: - * Registrations functions. You may register: + * Registration functions. You may register: - extension functions, - exit callbacks, @@ -25614,7 +25612,7 @@ The `time' extension adds two functions, named `gettimeofday()' and delay.  -File: gawk.info, Node: gawkextlib, Prev: Extension Samples, Up: Dynamic Extensions +File: gawk.info, Node: gawkextlib, Next: Extension summary, Prev: Extension Samples, Up: Dynamic Extensions 16.8 The `gawkextlib' Project ============================= @@ -25683,6 +25681,95 @@ You may also need to use the `sudo' utility to install both `gawk' and users, please consider doing so through the `gawkextlib' project. See the project's web site for more information. + +File: gawk.info, Node: Extension summary, Prev: gawkextlib, Up: Dynamic Extensions + +16.9 Summary +============ + + * You can write extensions (sometimes called plug-ins) for `gawk' in + C or C++ using the Application Programming Interface (API) defined + by the `gawk' developers. + + * Extensions must have a license compatible with the GNU General + Public License (GPL), and they must assert that fact by declaring + 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 + fields and function pointers. The extension can then call into + `gawk' via the supplied function pointers to accomplish certain + tasks. + + * One of these tasks is to "register" the name and implementation of + a new `awk'-level function with `gawk'. The implementation takes + the form of a C function pointer with a defined signature. By + 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 + include a number of standard header files _before_ including it in + your source file. + + * API function pointers are provided for the following kinds of + operations: + + * Registration functions. You may register extension functions, + exit callbacks, a version string, input parsers, output + wrappers, and two-way processors. + + * Printing fatal, warning, and "lint" warning messages. + + * Updating `ERRNO', or unsetting it. + + * Accessing parameters, including converting an undefined + parameter into an array. + + * Symbol table access: retrieving a global variable, creating + one, or changing one. + + * Allocating, reallocating, and releasing memory. + + * Creating and releasing cached values; this provides an + efficient way to use values for multiple variables and can be + a big performance win. + + * 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 + 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. + + * _All_ memory passed from `gawk' to an extension must be treated as + read-only by the extension. + + * _All_ memory passed from an extension to `gawk' must come from the + API's memory allocation functions. `gawk' takes responsibility for + the memory and will release it when appropriate. + + * The API provides information about the running version of `gawk' so + that an extension can make sure it is compatible with the `gawk' + that loaded it. + + * It is easiest to start a new extension by copying the boilerplate + code described in this major node. Macros in the `gawkapi.h' 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 + contribute it to the community of `gawk' users, the `gawkextlib' + project should be the place to do so. + +  File: gawk.info, Node: Language History, Next: Installation, Prev: Dynamic Extensions, Up: Top @@ -25714,6 +25801,7 @@ you can find more information. * Common Extensions:: Common Extensions Summary. * Ranges and Locales:: How locales used to affect regexp ranges. * Contributors:: The major contributors to `gawk'. +* History summary:: History summary.  File: gawk.info, Node: V7/SVR3.1, Next: SVR4, Up: Language History @@ -26568,7 +26656,7 @@ and its rationale (http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap09.html#tag_21_09_03_05).  -File: gawk.info, Node: Contributors, Prev: Ranges and Locales, Up: Language History +File: gawk.info, Node: Contributors, Next: History summary, Prev: Ranges and Locales, Up: Language History A.9 Major Contributors to `gawk' ================================ @@ -26713,6 +26801,38 @@ Info file, in approximate chronological order: helping David Trueman, and as the primary maintainer since around 1994. + +File: gawk.info, Node: History summary, Prev: Contributors, Up: Language History + +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. + + * Brian Kernighan's `awk' provides a small number of extensions that + are implemented in common with other versions of `awk'. + + * `gawk' provides a large number of extensions over POSIX `awk'. + They can be disabled with either the `--traditional' or `--posix' + options. + + * The interaction of POSIX locales and regexp matching in `gawk' has + 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 + be EBCDIC on IBM S/390 systems. + + * Many people have contributed to `gawk' development over the years. + We hope that the list provided in this major node is complete and + gives the appropriate credit where credit is due. + +  File: gawk.info, Node: Installation, Next: Notes, Prev: Language History, Up: Top @@ -26734,6 +26854,7 @@ people who did the respective ports. * Bugs:: Reporting Problems and Bugs. * Other Versions:: Other freely available `awk' implementations. +* Installation summary:: Summary of installation.  File: gawk.info, Node: Gawk Distribution, Next: Unix Installation, Up: Installation @@ -27807,7 +27928,7 @@ z/OS (OS/390) Dave Pitts, . your report to the email list as well.  -File: gawk.info, Node: Other Versions, Prev: Bugs, Up: Installation +File: gawk.info, Node: Other Versions, Next: Installation summary, Prev: Bugs, Up: Installation B.5 Other Freely Available `awk' Implementations ================================================ @@ -27956,6 +28077,34 @@ Other Versions for information on additional versions. + +File: gawk.info, Node: Installation summary, Prev: Other Versions, Up: Installation + +B.6 Summary +=========== + + * The `gawk' distribution is availble from GNU project's main + distribution site, `ftp.gnu.org'. The canonical build recipe is: + + wget http://ftp.gnu.org/gnu/gawk/gawk-4.1.1.tar.gz + tar -xvpzf gawk-4.1.1.tar.gz + cd gawk-4.1.1 + ./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 + 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 + 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. + + * There are a number of other freely available `awk' + implementations. Many are POSIX compliant; others are less so. + +  File: gawk.info, Node: Notes, Next: Basic Concepts, Prev: Installation, Up: Top @@ -27975,6 +28124,7 @@ and maintainers of `gawk'. Everything in it applies specifically to * Implementation Limitations:: Some limitations of the implementation. * Extension Design:: Design notes about the extension API. * Old Extension Mechanism:: Some compatibility for old extensions. +* Notes summary:: Summary of implementation notes.  File: gawk.info, Node: Compatibility Mode, Next: Additions, Up: Notes @@ -28679,7 +28829,7 @@ The API can later be expanded, in two ways: respect to any of the above.  -File: gawk.info, Node: Old Extension Mechanism, Prev: Extension Design, Up: Notes +File: gawk.info, Node: Old Extension Mechanism, Next: Notes summary, Prev: Extension Design, Up: Notes C.6 Compatibility For Old Extensions ==================================== @@ -28716,6 +28866,37 @@ without conflict. old extensions that you may have to use the new API described in *note Dynamic Extensions::. + +File: gawk.info, Node: Notes summary, Prev: Old Extension Mechanism, Up: Notes + +C.7 Summary +=========== + + * `gawk''s extensions can be disabled with either the + `--traditional' option or with the `--posix' option. The + `--parsedebug' option is availble if `gawk' is compiled with + `-DDEBUG'. + + * The source code for `gawk' is maintained in a publicly accessable + Git repository. Anyone may check it out and view the source. + + * Contributions to `gawk' are welcome. Following the steps outlined + in this major node will make it easier to integrate your + contributions into the code base. This applies both to new + feature contributions and to ports to additional operating systems. + + * `gawk' has some limits--generally those that are imposed by the + machine architecture. + + * The extension API design was intended to solve a number of problems + with the previous extension mechanism, enable features needed by + the `xgawk' project, and provide binary compatibility going + forward. + + * The previous extension mechanism is still supported in version 4.1 + of `gawk', but it _will_ be removed in the next major release. + +  File: gawk.info, Node: Basic Concepts, Next: Glossary, Prev: Notes, Up: Top @@ -33851,525 +34032,529 @@ Node: Executable Scripts78251 Ref: Executable Scripts-Footnote-180084 Ref: Executable Scripts-Footnote-280186 Node: Comments80733 -Node: Quoting83200 -Node: DOS Quoting88516 -Node: Sample Data Files89191 -Node: Very Simple91706 -Node: Two Rules96344 -Node: More Complex98239 -Ref: More Complex-Footnote-1101171 -Node: Statements/Lines101256 -Ref: Statements/Lines-Footnote-1105711 -Node: Other Features105976 -Node: When106904 -Node: Intro Summary109074 -Node: Invoking Gawk109840 -Node: Command Line111355 -Node: Options112146 -Ref: Options-Footnote-1127958 -Node: Other Arguments127983 -Node: Naming Standard Input130645 -Node: Environment Variables131739 -Node: AWKPATH Variable132297 -Ref: AWKPATH Variable-Footnote-1135169 -Ref: AWKPATH Variable-Footnote-2135214 -Node: AWKLIBPATH Variable135474 -Node: Other Environment Variables136233 -Node: Exit Status139888 -Node: Include Files140563 -Node: Loading Shared Libraries144141 -Node: Obsolete145525 -Node: Undocumented146222 -Node: Invoking Summary146489 -Node: Regexp148069 -Node: Regexp Usage149519 -Node: Escape Sequences151552 -Node: Regexp Operators157219 -Ref: Regexp Operators-Footnote-1164699 -Ref: Regexp Operators-Footnote-2164846 -Node: Bracket Expressions164944 -Ref: table-char-classes166834 -Node: GNU Regexp Operators169357 -Node: Case-sensitivity173080 -Ref: Case-sensitivity-Footnote-1175972 -Ref: Case-sensitivity-Footnote-2176207 -Node: Leftmost Longest176315 -Node: Computed Regexps177516 -Node: Regexp Summary180888 -Node: Reading Files182360 -Node: Records184409 -Node: awk split records185152 -Node: gawk split records190010 -Ref: gawk split records-Footnote-1194531 -Node: Fields194568 -Ref: Fields-Footnote-1197532 -Node: Nonconstant Fields197618 -Ref: Nonconstant Fields-Footnote-1199848 -Node: Changing Fields200050 -Node: Field Separators206004 -Node: Default Field Splitting208706 -Node: Regexp Field Splitting209823 -Node: Single Character Fields213164 -Node: Command Line Field Separator214223 -Node: Full Line Fields217565 -Ref: Full Line Fields-Footnote-1218073 -Node: Field Splitting Summary218119 -Ref: Field Splitting Summary-Footnote-1221218 -Node: Constant Size221319 -Node: Splitting By Content225926 -Ref: Splitting By Content-Footnote-1229676 -Node: Multiple Line229716 -Ref: Multiple Line-Footnote-1235572 -Node: Getline235751 -Node: Plain Getline237967 -Node: Getline/Variable240062 -Node: Getline/File241209 -Node: Getline/Variable/File242593 -Ref: Getline/Variable/File-Footnote-1244192 -Node: Getline/Pipe244279 -Node: Getline/Variable/Pipe246978 -Node: Getline/Coprocess248085 -Node: Getline/Variable/Coprocess249337 -Node: Getline Notes250074 -Node: Getline Summary252878 -Ref: table-getline-variants253286 -Node: Read Timeout254198 -Ref: Read Timeout-Footnote-1258025 -Node: Command line directories258083 -Node: Input Summary258987 -Node: Printing262101 -Node: Print263780 -Node: Print Examples265121 -Node: Output Separators267900 -Node: OFMT269916 -Node: Printf271274 -Node: Basic Printf272180 -Node: Control Letters273719 -Node: Format Modifiers277573 -Node: Printf Examples283600 -Node: Redirection286307 -Node: Special Files293279 -Node: Special FD293810 -Ref: Special FD-Footnote-1297434 -Node: Special Network297508 -Node: Special Caveats298358 -Node: Close Files And Pipes299154 -Ref: Close Files And Pipes-Footnote-1306317 -Ref: Close Files And Pipes-Footnote-2306465 -Node: Output Summary306615 -Node: Expressions307587 -Node: Values308772 -Node: Constants309448 -Node: Scalar Constants310128 -Ref: Scalar Constants-Footnote-1310987 -Node: Nondecimal-numbers311237 -Node: Regexp Constants314237 -Node: Using Constant Regexps314712 -Node: Variables317782 -Node: Using Variables318437 -Node: Assignment Options320161 -Node: Conversion322036 -Ref: table-locale-affects327472 -Ref: Conversion-Footnote-1328096 -Node: All Operators328205 -Node: Arithmetic Ops328835 -Node: Concatenation331340 -Ref: Concatenation-Footnote-1334136 -Node: Assignment Ops334256 -Ref: table-assign-ops339239 -Node: Increment Ops340556 -Node: Truth Values and Conditions343994 -Node: Truth Values345077 -Node: Typing and Comparison346126 -Node: Variable Typing346919 -Ref: Variable Typing-Footnote-1350819 -Node: Comparison Operators350941 -Ref: table-relational-ops351351 -Node: POSIX String Comparison354901 -Ref: POSIX String Comparison-Footnote-1355985 -Node: Boolean Ops356123 -Ref: Boolean Ops-Footnote-1360193 -Node: Conditional Exp360284 -Node: Function Calls362011 -Node: Precedence365769 -Node: Locales369438 -Node: Expressions Summary371069 -Node: Patterns and Actions373566 -Node: Pattern Overview374682 -Node: Regexp Patterns376359 -Node: Expression Patterns376902 -Node: Ranges380683 -Node: BEGIN/END383789 -Node: Using BEGIN/END384551 -Ref: Using BEGIN/END-Footnote-1387287 -Node: I/O And BEGIN/END387393 -Node: BEGINFILE/ENDFILE389678 -Node: Empty392609 -Node: Using Shell Variables392926 -Node: Action Overview395209 -Node: Statements397536 -Node: If Statement399384 -Node: While Statement400882 -Node: Do Statement402926 -Node: For Statement404082 -Node: Switch Statement407234 -Node: Break Statement409337 -Node: Continue Statement411392 -Node: Next Statement413185 -Node: Nextfile Statement415575 -Node: Exit Statement418230 -Node: Built-in Variables420634 -Node: User-modified421761 -Ref: User-modified-Footnote-1429446 -Node: Auto-set429508 -Ref: Auto-set-Footnote-1442073 -Ref: Auto-set-Footnote-2442278 -Node: ARGC and ARGV442334 -Node: Pattern Action Summary446188 -Node: Arrays448411 -Node: Array Basics449960 -Node: Array Intro450786 -Ref: figure-array-elements452759 -Node: Reference to Elements455166 -Node: Assigning Elements457439 -Node: Array Example457930 -Node: Scanning an Array459662 -Node: Controlling Scanning462677 -Ref: Controlling Scanning-Footnote-1467850 -Node: Delete468166 -Ref: Delete-Footnote-1470931 -Node: Numeric Array Subscripts470988 -Node: Uninitialized Subscripts473171 -Node: Multidimensional474796 -Node: Multiscanning477889 -Node: Arrays of Arrays479478 -Node: Arrays Summary484141 -Node: Functions486246 -Node: Built-in487119 -Node: Calling Built-in488197 -Node: Numeric Functions490185 -Ref: Numeric Functions-Footnote-1494019 -Ref: Numeric Functions-Footnote-2494376 -Ref: Numeric Functions-Footnote-3494424 -Node: String Functions494693 -Ref: String Functions-Footnote-1517704 -Ref: String Functions-Footnote-2517833 -Ref: String Functions-Footnote-3518081 -Node: Gory Details518168 -Ref: table-sub-escapes519837 -Ref: table-sub-posix-92521191 -Ref: table-sub-proposed522542 -Ref: table-posix-sub523896 -Ref: table-gensub-escapes525441 -Ref: Gory Details-Footnote-1526617 -Ref: Gory Details-Footnote-2526668 -Node: I/O Functions526819 -Ref: I/O Functions-Footnote-1533942 -Node: Time Functions534089 -Ref: Time Functions-Footnote-1544553 -Ref: Time Functions-Footnote-2544621 -Ref: Time Functions-Footnote-3544779 -Ref: Time Functions-Footnote-4544890 -Ref: Time Functions-Footnote-5545002 -Ref: Time Functions-Footnote-6545229 -Node: Bitwise Functions545495 -Ref: table-bitwise-ops546057 -Ref: Bitwise Functions-Footnote-1550302 -Node: Type Functions550486 -Node: I18N Functions551628 -Node: User-defined553273 -Node: Definition Syntax554077 -Ref: Definition Syntax-Footnote-1559002 -Node: Function Example559071 -Ref: Function Example-Footnote-1561715 -Node: Function Caveats561737 -Node: Calling A Function562255 -Node: Variable Scope563210 -Node: Pass By Value/Reference566198 -Node: Return Statement569706 -Node: Dynamic Typing572690 -Node: Indirect Calls573619 -Node: Functions Summary583332 -Node: Library Functions585871 -Ref: Library Functions-Footnote-1589446 -Ref: Library Functions-Footnote-2589589 -Node: Library Names589760 -Ref: Library Names-Footnote-1593233 -Ref: Library Names-Footnote-2593453 -Node: General Functions593539 -Node: Strtonum Function594567 -Node: Assert Function597497 -Node: Round Function600823 -Node: Cliff Random Function602364 -Node: Ordinal Functions603380 -Ref: Ordinal Functions-Footnote-1606457 -Ref: Ordinal Functions-Footnote-2606709 -Node: Join Function606920 -Ref: Join Function-Footnote-1608691 -Node: Getlocaltime Function608891 -Node: Readfile Function612627 -Node: Data File Management614466 -Node: Filetrans Function615098 -Node: Rewind Function619167 -Node: File Checking620554 -Ref: File Checking-Footnote-1621686 -Node: Empty Files621887 -Node: Ignoring Assigns624117 -Node: Getopt Function625671 -Ref: Getopt Function-Footnote-1636974 -Node: Passwd Functions637177 -Ref: Passwd Functions-Footnote-1646156 -Node: Group Functions646244 -Ref: Group Functions-Footnote-1654186 -Node: Walking Arrays654399 -Node: Library Functions Summary656569 -Node: Sample Programs657931 -Node: Running Examples658658 -Node: Clones659386 -Node: Cut Program660610 -Node: Egrep Program670478 -Ref: Egrep Program-Footnote-1678449 -Node: Id Program678559 -Node: Split Program682223 -Ref: Split Program-Footnote-1685761 -Node: Tee Program685889 -Node: Uniq Program688696 -Node: Wc Program696126 -Ref: Wc Program-Footnote-1700394 -Ref: Wc Program-Footnote-2700594 -Node: Miscellaneous Programs700686 -Node: Dupword Program701899 -Node: Alarm Program703930 -Node: Translate Program708744 -Ref: Translate Program-Footnote-1713135 -Ref: Translate Program-Footnote-2713405 -Node: Labels Program713539 -Ref: Labels Program-Footnote-1716910 -Node: Word Sorting716994 -Node: History Sorting721037 -Node: Extract Program722873 -Ref: Extract Program-Footnote-1730448 -Node: Simple Sed730577 -Node: Igawk Program733639 -Ref: Igawk Program-Footnote-1748815 -Ref: Igawk Program-Footnote-2749016 -Node: Anagram Program749154 -Node: Signature Program752222 -Node: Programs Summary753469 -Node: Advanced Features754657 -Node: Nondecimal Data756605 -Node: Array Sorting758182 -Node: Controlling Array Traversal758879 -Node: Array Sorting Functions767159 -Ref: Array Sorting Functions-Footnote-1771066 -Node: Two-way I/O771260 -Ref: Two-way I/O-Footnote-1776776 -Node: TCP/IP Networking776858 -Node: Profiling779702 -Node: Advanced Features Summary787244 -Node: Internationalization789108 -Node: I18N and L10N790588 -Node: Explaining gettext791274 -Ref: Explaining gettext-Footnote-1796414 -Ref: Explaining gettext-Footnote-2796598 -Node: Programmer i18n796763 -Node: Translator i18n800988 -Node: String Extraction801782 -Ref: String Extraction-Footnote-1802743 -Node: Printf Ordering802829 -Ref: Printf Ordering-Footnote-1805611 -Node: I18N Portability805675 -Ref: I18N Portability-Footnote-1808124 -Node: I18N Example808187 -Ref: I18N Example-Footnote-1810909 -Node: Gawk I18N810981 -Node: I18N Summary811619 -Node: Debugger812958 -Node: Debugging813980 -Node: Debugging Concepts814421 -Node: Debugging Terms816277 -Node: Awk Debugging818874 -Node: Sample Debugging Session819766 -Node: Debugger Invocation820286 -Node: Finding The Bug821619 -Node: List of Debugger Commands828101 -Node: Breakpoint Control829433 -Node: Debugger Execution Control833097 -Node: Viewing And Changing Data836457 -Node: Execution Stack839815 -Node: Debugger Info841328 -Node: Miscellaneous Debugger Commands845322 -Node: Readline Support850506 -Node: Limitations851398 -Node: Debugging Summary853672 -Node: Arbitrary Precision Arithmetic854836 -Ref: Arbitrary Precision Arithmetic-Footnote-1856485 -Node: General Arithmetic856633 -Node: Floating Point Issues858353 -Node: String Conversion Precision859234 -Ref: String Conversion Precision-Footnote-1860939 -Node: Unexpected Results861048 -Node: POSIX Floating Point Problems863201 -Ref: POSIX Floating Point Problems-Footnote-1867022 -Node: Integer Programming867060 -Node: Floating-point Programming868871 -Ref: Floating-point Programming-Footnote-1875199 -Ref: Floating-point Programming-Footnote-2875469 -Node: Floating-point Representation875733 -Node: Floating-point Context876898 -Ref: table-ieee-formats877737 -Node: Rounding Mode879121 -Ref: table-rounding-modes879600 -Ref: Rounding Mode-Footnote-1882615 -Node: Gawk and MPFR882794 -Node: Arbitrary Precision Floats884203 -Ref: Arbitrary Precision Floats-Footnote-1886646 -Node: Setting Precision886967 -Ref: table-predefined-precision-strings887651 -Node: Setting Rounding Mode889796 -Ref: table-gawk-rounding-modes890200 -Node: Floating-point Constants891387 -Node: Changing Precision892839 -Ref: Changing Precision-Footnote-1894231 -Node: Exact Arithmetic894405 -Node: Arbitrary Precision Integers897539 -Ref: Arbitrary Precision Integers-Footnote-1900554 -Node: Dynamic Extensions900701 -Node: Extension Intro902159 -Node: Plugin License903424 -Node: Extension Mechanism Outline904109 -Ref: figure-load-extension904533 -Ref: figure-load-new-function906018 -Ref: figure-call-new-function907020 -Node: Extension API Description909004 -Node: Extension API Functions Introduction910454 -Node: General Data Types915320 -Ref: General Data Types-Footnote-1921013 -Node: Requesting Values921312 -Ref: table-value-types-returned922049 -Node: Memory Allocation Functions923007 -Ref: Memory Allocation Functions-Footnote-1925754 -Node: Constructor Functions925850 -Node: Registration Functions927608 -Node: Extension Functions928293 -Node: Exit Callback Functions930595 -Node: Extension Version String931844 -Node: Input Parsers932494 -Node: Output Wrappers942297 -Node: Two-way processors946813 -Node: Printing Messages949017 -Ref: Printing Messages-Footnote-1950094 -Node: Updating `ERRNO'950246 -Node: Accessing Parameters950985 -Node: Symbol Table Access952215 -Node: Symbol table by name952729 -Node: Symbol table by cookie954705 -Ref: Symbol table by cookie-Footnote-1958838 -Node: Cached values958901 -Ref: Cached values-Footnote-1962405 -Node: Array Manipulation962496 -Ref: Array Manipulation-Footnote-1963594 -Node: Array Data Types963633 -Ref: Array Data Types-Footnote-1966336 -Node: Array Functions966428 -Node: Flattening Arrays970302 -Node: Creating Arrays977154 -Node: Extension API Variables981885 -Node: Extension Versioning982521 -Node: Extension API Informational Variables984422 -Node: Extension API Boilerplate985508 -Node: Finding Extensions989312 -Node: Extension Example989872 -Node: Internal File Description990602 -Node: Internal File Ops994693 -Ref: Internal File Ops-Footnote-11006239 -Node: Using Internal File Ops1006379 -Ref: Using Internal File Ops-Footnote-11008726 -Node: Extension Samples1008994 -Node: Extension Sample File Functions1010518 -Node: Extension Sample Fnmatch1018086 -Node: Extension Sample Fork1019567 -Node: Extension Sample Inplace1020780 -Node: Extension Sample Ord1022560 -Node: Extension Sample Readdir1023396 -Ref: table-readdir-file-types1024252 -Node: Extension Sample Revout1025051 -Node: Extension Sample Rev2way1025642 -Node: Extension Sample Read write array1026383 -Node: Extension Sample Readfile1028262 -Node: Extension Sample API Tests1029362 -Node: Extension Sample Time1029887 -Node: gawkextlib1031202 -Node: Language History1033989 -Node: V7/SVR3.11035583 -Node: SVR41037903 -Node: POSIX1039345 -Node: BTL1040731 -Node: POSIX/GNU1041465 -Node: Feature History1047064 -Node: Common Extensions1060176 -Node: Ranges and Locales1061488 -Ref: Ranges and Locales-Footnote-11066105 -Ref: Ranges and Locales-Footnote-21066132 -Ref: Ranges and Locales-Footnote-31066366 -Node: Contributors1066587 -Node: Installation1072025 -Node: Gawk Distribution1072919 -Node: Getting1073403 -Node: Extracting1074229 -Node: Distribution contents1075871 -Node: Unix Installation1081588 -Node: Quick Installation1082205 -Node: Additional Configuration Options1084647 -Node: Configuration Philosophy1086385 -Node: Non-Unix Installation1088736 -Node: PC Installation1089194 -Node: PC Binary Installation1090505 -Node: PC Compiling1092353 -Ref: PC Compiling-Footnote-11095352 -Node: PC Testing1095457 -Node: PC Using1096633 -Node: Cygwin1100791 -Node: MSYS1101600 -Node: VMS Installation1102114 -Node: VMS Compilation1102910 -Ref: VMS Compilation-Footnote-11104132 -Node: VMS Dynamic Extensions1104190 -Node: VMS Installation Details1105563 -Node: VMS Running1107815 -Node: VMS GNV1110649 -Node: VMS Old Gawk1111372 -Node: Bugs1111842 -Node: Other Versions1115846 -Node: Notes1122071 -Node: Compatibility Mode1122871 -Node: Additions1123653 -Node: Accessing The Source1124578 -Node: Adding Code1126014 -Node: New Ports1132192 -Node: Derived Files1136673 -Ref: Derived Files-Footnote-11141754 -Ref: Derived Files-Footnote-21141788 -Ref: Derived Files-Footnote-31142384 -Node: Future Extensions1142498 -Node: Implementation Limitations1143104 -Node: Extension Design1144352 -Node: Old Extension Problems1145506 -Ref: Old Extension Problems-Footnote-11147023 -Node: Extension New Mechanism Goals1147080 -Ref: Extension New Mechanism Goals-Footnote-11150440 -Node: Extension Other Design Decisions1150629 -Node: Extension Future Growth1152735 -Node: Old Extension Mechanism1153571 -Node: Basic Concepts1155311 -Node: Basic High Level1155992 -Ref: figure-general-flow1156264 -Ref: figure-process-flow1156863 -Ref: Basic High Level-Footnote-11160092 -Node: Basic Data Typing1160277 -Node: Glossary1163604 -Node: Copying1188756 -Node: GNU Free Documentation License1226312 -Node: Index1251448 +Node: Quoting83206 +Node: DOS Quoting88522 +Node: Sample Data Files89197 +Node: Very Simple91712 +Node: Two Rules96350 +Node: More Complex98245 +Ref: More Complex-Footnote-1101177 +Node: Statements/Lines101262 +Ref: Statements/Lines-Footnote-1105717 +Node: Other Features105982 +Node: When106910 +Node: Intro Summary109080 +Node: Invoking Gawk109846 +Node: Command Line111361 +Node: Options112152 +Ref: Options-Footnote-1127964 +Node: Other Arguments127989 +Node: Naming Standard Input130651 +Node: Environment Variables131745 +Node: AWKPATH Variable132303 +Ref: AWKPATH Variable-Footnote-1135175 +Ref: AWKPATH Variable-Footnote-2135220 +Node: AWKLIBPATH Variable135480 +Node: Other Environment Variables136239 +Node: Exit Status139894 +Node: Include Files140569 +Node: Loading Shared Libraries144147 +Node: Obsolete145531 +Node: Undocumented146228 +Node: Invoking Summary146495 +Node: Regexp148075 +Node: Regexp Usage149525 +Node: Escape Sequences151558 +Node: Regexp Operators157225 +Ref: Regexp Operators-Footnote-1164705 +Ref: Regexp Operators-Footnote-2164852 +Node: Bracket Expressions164950 +Ref: table-char-classes166840 +Node: GNU Regexp Operators169363 +Node: Case-sensitivity173086 +Ref: Case-sensitivity-Footnote-1175978 +Ref: Case-sensitivity-Footnote-2176213 +Node: Leftmost Longest176321 +Node: Computed Regexps177522 +Node: Regexp Summary180894 +Node: Reading Files182366 +Node: Records184415 +Node: awk split records185158 +Node: gawk split records190016 +Ref: gawk split records-Footnote-1194537 +Node: Fields194574 +Ref: Fields-Footnote-1197538 +Node: Nonconstant Fields197624 +Ref: Nonconstant Fields-Footnote-1199854 +Node: Changing Fields200056 +Node: Field Separators206010 +Node: Default Field Splitting208712 +Node: Regexp Field Splitting209829 +Node: Single Character Fields213170 +Node: Command Line Field Separator214229 +Node: Full Line Fields217571 +Ref: Full Line Fields-Footnote-1218079 +Node: Field Splitting Summary218125 +Ref: Field Splitting Summary-Footnote-1221224 +Node: Constant Size221325 +Node: Splitting By Content225932 +Ref: Splitting By Content-Footnote-1229682 +Node: Multiple Line229722 +Ref: Multiple Line-Footnote-1235578 +Node: Getline235757 +Node: Plain Getline237973 +Node: Getline/Variable240068 +Node: Getline/File241215 +Node: Getline/Variable/File242599 +Ref: Getline/Variable/File-Footnote-1244198 +Node: Getline/Pipe244285 +Node: Getline/Variable/Pipe246984 +Node: Getline/Coprocess248091 +Node: Getline/Variable/Coprocess249343 +Node: Getline Notes250080 +Node: Getline Summary252884 +Ref: table-getline-variants253292 +Node: Read Timeout254204 +Ref: Read Timeout-Footnote-1258031 +Node: Command line directories258089 +Node: Input Summary258993 +Node: Printing262107 +Node: Print263786 +Node: Print Examples265127 +Node: Output Separators267906 +Node: OFMT269922 +Node: Printf271280 +Node: Basic Printf272186 +Node: Control Letters273725 +Node: Format Modifiers277579 +Node: Printf Examples283606 +Node: Redirection286313 +Node: Special Files293285 +Node: Special FD293816 +Ref: Special FD-Footnote-1297440 +Node: Special Network297514 +Node: Special Caveats298364 +Node: Close Files And Pipes299160 +Ref: Close Files And Pipes-Footnote-1306323 +Ref: Close Files And Pipes-Footnote-2306471 +Node: Output Summary306621 +Node: Expressions307593 +Node: Values308778 +Node: Constants309454 +Node: Scalar Constants310134 +Ref: Scalar Constants-Footnote-1310993 +Node: Nondecimal-numbers311243 +Node: Regexp Constants314243 +Node: Using Constant Regexps314718 +Node: Variables317788 +Node: Using Variables318443 +Node: Assignment Options320167 +Node: Conversion322042 +Ref: table-locale-affects327478 +Ref: Conversion-Footnote-1328102 +Node: All Operators328211 +Node: Arithmetic Ops328841 +Node: Concatenation331346 +Ref: Concatenation-Footnote-1334142 +Node: Assignment Ops334262 +Ref: table-assign-ops339245 +Node: Increment Ops340562 +Node: Truth Values and Conditions344000 +Node: Truth Values345083 +Node: Typing and Comparison346132 +Node: Variable Typing346925 +Ref: Variable Typing-Footnote-1350825 +Node: Comparison Operators350947 +Ref: table-relational-ops351357 +Node: POSIX String Comparison354907 +Ref: POSIX String Comparison-Footnote-1355991 +Node: Boolean Ops356129 +Ref: Boolean Ops-Footnote-1360199 +Node: Conditional Exp360290 +Node: Function Calls362017 +Node: Precedence365775 +Node: Locales369444 +Node: Expressions Summary371075 +Node: Patterns and Actions373572 +Node: Pattern Overview374688 +Node: Regexp Patterns376365 +Node: Expression Patterns376908 +Node: Ranges380689 +Node: BEGIN/END383795 +Node: Using BEGIN/END384557 +Ref: Using BEGIN/END-Footnote-1387293 +Node: I/O And BEGIN/END387399 +Node: BEGINFILE/ENDFILE389684 +Node: Empty392615 +Node: Using Shell Variables392932 +Node: Action Overview395215 +Node: Statements397542 +Node: If Statement399390 +Node: While Statement400888 +Node: Do Statement402932 +Node: For Statement404088 +Node: Switch Statement407240 +Node: Break Statement409343 +Node: Continue Statement411398 +Node: Next Statement413191 +Node: Nextfile Statement415581 +Node: Exit Statement418236 +Node: Built-in Variables420640 +Node: User-modified421767 +Ref: User-modified-Footnote-1429452 +Node: Auto-set429514 +Ref: Auto-set-Footnote-1442079 +Ref: Auto-set-Footnote-2442284 +Node: ARGC and ARGV442340 +Node: Pattern Action Summary446194 +Node: Arrays448417 +Node: Array Basics449966 +Node: Array Intro450792 +Ref: figure-array-elements452765 +Node: Reference to Elements455172 +Node: Assigning Elements457445 +Node: Array Example457936 +Node: Scanning an Array459668 +Node: Controlling Scanning462683 +Ref: Controlling Scanning-Footnote-1467856 +Node: Delete468172 +Ref: Delete-Footnote-1470937 +Node: Numeric Array Subscripts470994 +Node: Uninitialized Subscripts473177 +Node: Multidimensional474802 +Node: Multiscanning477895 +Node: Arrays of Arrays479484 +Node: Arrays Summary484147 +Node: Functions486252 +Node: Built-in487125 +Node: Calling Built-in488203 +Node: Numeric Functions490191 +Ref: Numeric Functions-Footnote-1494025 +Ref: Numeric Functions-Footnote-2494382 +Ref: Numeric Functions-Footnote-3494430 +Node: String Functions494699 +Ref: String Functions-Footnote-1517710 +Ref: String Functions-Footnote-2517839 +Ref: String Functions-Footnote-3518087 +Node: Gory Details518174 +Ref: table-sub-escapes519843 +Ref: table-sub-posix-92521197 +Ref: table-sub-proposed522548 +Ref: table-posix-sub523902 +Ref: table-gensub-escapes525447 +Ref: Gory Details-Footnote-1526623 +Ref: Gory Details-Footnote-2526674 +Node: I/O Functions526825 +Ref: I/O Functions-Footnote-1533948 +Node: Time Functions534095 +Ref: Time Functions-Footnote-1544559 +Ref: Time Functions-Footnote-2544627 +Ref: Time Functions-Footnote-3544785 +Ref: Time Functions-Footnote-4544896 +Ref: Time Functions-Footnote-5545008 +Ref: Time Functions-Footnote-6545235 +Node: Bitwise Functions545501 +Ref: table-bitwise-ops546063 +Ref: Bitwise Functions-Footnote-1550308 +Node: Type Functions550492 +Node: I18N Functions551634 +Node: User-defined553279 +Node: Definition Syntax554083 +Ref: Definition Syntax-Footnote-1559008 +Node: Function Example559077 +Ref: Function Example-Footnote-1561721 +Node: Function Caveats561743 +Node: Calling A Function562261 +Node: Variable Scope563216 +Node: Pass By Value/Reference566204 +Node: Return Statement569712 +Node: Dynamic Typing572696 +Node: Indirect Calls573625 +Node: Functions Summary583338 +Node: Library Functions585877 +Ref: Library Functions-Footnote-1589452 +Ref: Library Functions-Footnote-2589595 +Node: Library Names589766 +Ref: Library Names-Footnote-1593239 +Ref: Library Names-Footnote-2593459 +Node: General Functions593545 +Node: Strtonum Function594573 +Node: Assert Function597353 +Node: Round Function600679 +Node: Cliff Random Function602220 +Node: Ordinal Functions603236 +Ref: Ordinal Functions-Footnote-1606313 +Ref: Ordinal Functions-Footnote-2606565 +Node: Join Function606776 +Ref: Join Function-Footnote-1608547 +Node: Getlocaltime Function608747 +Node: Readfile Function612483 +Node: Data File Management614322 +Node: Filetrans Function614954 +Node: Rewind Function619023 +Node: File Checking620410 +Ref: File Checking-Footnote-1621542 +Node: Empty Files621743 +Node: Ignoring Assigns623973 +Node: Getopt Function625527 +Ref: Getopt Function-Footnote-1636830 +Node: Passwd Functions637033 +Ref: Passwd Functions-Footnote-1646012 +Node: Group Functions646100 +Ref: Group Functions-Footnote-1654042 +Node: Walking Arrays654255 +Node: Library Functions Summary656425 +Node: Sample Programs657787 +Node: Running Examples658514 +Node: Clones659242 +Node: Cut Program660466 +Node: Egrep Program670334 +Ref: Egrep Program-Footnote-1678305 +Node: Id Program678415 +Node: Split Program682079 +Ref: Split Program-Footnote-1685617 +Node: Tee Program685745 +Node: Uniq Program688552 +Node: Wc Program695982 +Ref: Wc Program-Footnote-1700250 +Ref: Wc Program-Footnote-2700450 +Node: Miscellaneous Programs700542 +Node: Dupword Program701755 +Node: Alarm Program703786 +Node: Translate Program708600 +Ref: Translate Program-Footnote-1712991 +Ref: Translate Program-Footnote-2713261 +Node: Labels Program713395 +Ref: Labels Program-Footnote-1716766 +Node: Word Sorting716850 +Node: History Sorting720893 +Node: Extract Program722729 +Ref: Extract Program-Footnote-1730304 +Node: Simple Sed730433 +Node: Igawk Program733495 +Ref: Igawk Program-Footnote-1748671 +Ref: Igawk Program-Footnote-2748872 +Node: Anagram Program749010 +Node: Signature Program752078 +Node: Programs Summary753325 +Node: Advanced Features754513 +Node: Nondecimal Data756461 +Node: Array Sorting758038 +Node: Controlling Array Traversal758735 +Node: Array Sorting Functions767015 +Ref: Array Sorting Functions-Footnote-1770922 +Node: Two-way I/O771116 +Ref: Two-way I/O-Footnote-1776632 +Node: TCP/IP Networking776714 +Node: Profiling779558 +Node: Advanced Features Summary787100 +Node: Internationalization788964 +Node: I18N and L10N790444 +Node: Explaining gettext791130 +Ref: Explaining gettext-Footnote-1796270 +Ref: Explaining gettext-Footnote-2796454 +Node: Programmer i18n796619 +Node: Translator i18n800844 +Node: String Extraction801638 +Ref: String Extraction-Footnote-1802599 +Node: Printf Ordering802685 +Ref: Printf Ordering-Footnote-1805467 +Node: I18N Portability805531 +Ref: I18N Portability-Footnote-1807980 +Node: I18N Example808043 +Ref: I18N Example-Footnote-1810765 +Node: Gawk I18N810837 +Node: I18N Summary811475 +Node: Debugger812814 +Node: Debugging813836 +Node: Debugging Concepts814277 +Node: Debugging Terms816133 +Node: Awk Debugging818730 +Node: Sample Debugging Session819622 +Node: Debugger Invocation820142 +Node: Finding The Bug821475 +Node: List of Debugger Commands827957 +Node: Breakpoint Control829289 +Node: Debugger Execution Control832953 +Node: Viewing And Changing Data836313 +Node: Execution Stack839671 +Node: Debugger Info841184 +Node: Miscellaneous Debugger Commands845178 +Node: Readline Support850362 +Node: Limitations851254 +Node: Debugging Summary853528 +Node: Arbitrary Precision Arithmetic854692 +Ref: Arbitrary Precision Arithmetic-Footnote-1856341 +Node: General Arithmetic856489 +Node: Floating Point Issues858209 +Node: String Conversion Precision859090 +Ref: String Conversion Precision-Footnote-1860795 +Node: Unexpected Results860904 +Node: POSIX Floating Point Problems863057 +Ref: POSIX Floating Point Problems-Footnote-1866878 +Node: Integer Programming866916 +Node: Floating-point Programming868727 +Ref: Floating-point Programming-Footnote-1875055 +Ref: Floating-point Programming-Footnote-2875325 +Node: Floating-point Representation875589 +Node: Floating-point Context876754 +Ref: table-ieee-formats877593 +Node: Rounding Mode878977 +Ref: table-rounding-modes879456 +Ref: Rounding Mode-Footnote-1882471 +Node: Gawk and MPFR882650 +Node: Arbitrary Precision Floats884059 +Ref: Arbitrary Precision Floats-Footnote-1886502 +Node: Setting Precision886823 +Ref: table-predefined-precision-strings887507 +Node: Setting Rounding Mode889652 +Ref: table-gawk-rounding-modes890056 +Node: Floating-point Constants891243 +Node: Changing Precision892695 +Ref: Changing Precision-Footnote-1894087 +Node: Exact Arithmetic894261 +Node: Arbitrary Precision Integers897395 +Ref: Arbitrary Precision Integers-Footnote-1900410 +Node: Dynamic Extensions900557 +Node: Extension Intro902066 +Node: Plugin License903331 +Node: Extension Mechanism Outline904016 +Ref: figure-load-extension904440 +Ref: figure-load-new-function905925 +Ref: figure-call-new-function906927 +Node: Extension API Description908911 +Node: Extension API Functions Introduction910361 +Node: General Data Types915226 +Ref: General Data Types-Footnote-1920919 +Node: Requesting Values921218 +Ref: table-value-types-returned921955 +Node: Memory Allocation Functions922913 +Ref: Memory Allocation Functions-Footnote-1925660 +Node: Constructor Functions925756 +Node: Registration Functions927514 +Node: Extension Functions928199 +Node: Exit Callback Functions930501 +Node: Extension Version String931750 +Node: Input Parsers932400 +Node: Output Wrappers942203 +Node: Two-way processors946719 +Node: Printing Messages948923 +Ref: Printing Messages-Footnote-1950000 +Node: Updating `ERRNO'950152 +Node: Accessing Parameters950891 +Node: Symbol Table Access952121 +Node: Symbol table by name952635 +Node: Symbol table by cookie954611 +Ref: Symbol table by cookie-Footnote-1958744 +Node: Cached values958807 +Ref: Cached values-Footnote-1962311 +Node: Array Manipulation962402 +Ref: Array Manipulation-Footnote-1963500 +Node: Array Data Types963539 +Ref: Array Data Types-Footnote-1966242 +Node: Array Functions966334 +Node: Flattening Arrays970208 +Node: Creating Arrays977060 +Node: Extension API Variables981791 +Node: Extension Versioning982427 +Node: Extension API Informational Variables984328 +Node: Extension API Boilerplate985414 +Node: Finding Extensions989218 +Node: Extension Example989778 +Node: Internal File Description990508 +Node: Internal File Ops994599 +Ref: Internal File Ops-Footnote-11006145 +Node: Using Internal File Ops1006285 +Ref: Using Internal File Ops-Footnote-11008632 +Node: Extension Samples1008900 +Node: Extension Sample File Functions1010424 +Node: Extension Sample Fnmatch1017992 +Node: Extension Sample Fork1019473 +Node: Extension Sample Inplace1020686 +Node: Extension Sample Ord1022466 +Node: Extension Sample Readdir1023302 +Ref: table-readdir-file-types1024158 +Node: Extension Sample Revout1024957 +Node: Extension Sample Rev2way1025548 +Node: Extension Sample Read write array1026289 +Node: Extension Sample Readfile1028168 +Node: Extension Sample API Tests1029268 +Node: Extension Sample Time1029793 +Node: gawkextlib1031108 +Node: Extension summary1033921 +Node: Language History1037586 +Node: V7/SVR3.11039229 +Node: SVR41041549 +Node: POSIX1042991 +Node: BTL1044377 +Node: POSIX/GNU1045111 +Node: Feature History1050710 +Node: Common Extensions1063822 +Node: Ranges and Locales1065134 +Ref: Ranges and Locales-Footnote-11069751 +Ref: Ranges and Locales-Footnote-21069778 +Ref: Ranges and Locales-Footnote-31070012 +Node: Contributors1070233 +Node: History summary1075695 +Node: Installation1077064 +Node: Gawk Distribution1078015 +Node: Getting1078499 +Node: Extracting1079325 +Node: Distribution contents1080967 +Node: Unix Installation1086684 +Node: Quick Installation1087301 +Node: Additional Configuration Options1089743 +Node: Configuration Philosophy1091481 +Node: Non-Unix Installation1093832 +Node: PC Installation1094290 +Node: PC Binary Installation1095601 +Node: PC Compiling1097449 +Ref: PC Compiling-Footnote-11100448 +Node: PC Testing1100553 +Node: PC Using1101729 +Node: Cygwin1105887 +Node: MSYS1106696 +Node: VMS Installation1107210 +Node: VMS Compilation1108006 +Ref: VMS Compilation-Footnote-11109228 +Node: VMS Dynamic Extensions1109286 +Node: VMS Installation Details1110659 +Node: VMS Running1112911 +Node: VMS GNV1115745 +Node: VMS Old Gawk1116468 +Node: Bugs1116938 +Node: Other Versions1120942 +Node: Installation summary1127196 +Node: Notes1128251 +Node: Compatibility Mode1129116 +Node: Additions1129898 +Node: Accessing The Source1130823 +Node: Adding Code1132259 +Node: New Ports1138437 +Node: Derived Files1142918 +Ref: Derived Files-Footnote-11147999 +Ref: Derived Files-Footnote-21148033 +Ref: Derived Files-Footnote-31148629 +Node: Future Extensions1148743 +Node: Implementation Limitations1149349 +Node: Extension Design1150597 +Node: Old Extension Problems1151751 +Ref: Old Extension Problems-Footnote-11153268 +Node: Extension New Mechanism Goals1153325 +Ref: Extension New Mechanism Goals-Footnote-11156685 +Node: Extension Other Design Decisions1156874 +Node: Extension Future Growth1158980 +Node: Old Extension Mechanism1159816 +Node: Notes summary1161578 +Node: Basic Concepts1162763 +Node: Basic High Level1163444 +Ref: figure-general-flow1163716 +Ref: figure-process-flow1164315 +Ref: Basic High Level-Footnote-11167544 +Node: Basic Data Typing1167729 +Node: Glossary1171056 +Node: Copying1196208 +Node: GNU Free Documentation License1233764 +Node: Index1258900  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 5aaacef8..a8c9245d 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -1730,15 +1730,22 @@ the picture of a flashlight in the margin, as shown here. @ifnottex ``(d.c.)''. @end ifnottex +@ifclear FOR_PRINT They also appear in the index under the heading ``dark corner.'' +@end ifclear As noted by the opening quote, though, any coverage of dark corners is, by definition, incomplete. Extensions to the standard @command{awk} language that are supported by more than one @command{awk} implementation are marked +@ifclear FOR_PRINT ``@value{COMMONEXT},'' and listed in the index under ``common extensions'' and ``extensions, common.'' +@end ifclear +@ifset FOR_PRINT +``@value{COMMONEXT}.'' +@end ifset @node Manual History @unnumberedsec The GNU Project and This Book @@ -2553,7 +2560,7 @@ runs, it will probably print strange messages about syntax errors. For example, look at the following: @example -$ @kbd{awk '@{ print "hello" @} # let's be cute'} +$ @kbd{awk 'BEGIN @{ print "hello" @} # let's be cute'} > @end example @@ -20270,11 +20277,12 @@ provides an implementation for other versions of @command{awk}: # # Arnold Robbins, arnold@@skeeve.com, Public Domain # February, 2004 +# Revised June, 2014 @c endfile @end ignore @c file eg/lib/strtonum.awk -function mystrtonum(str, ret, chars, n, i, k, c) +function mystrtonum(str, ret, n, i, k, c) @{ if (str ~ /^0[0-7]*$/) @{ # octal @@ -20287,7 +20295,7 @@ function mystrtonum(str, ret, chars, n, i, k, c) ret = ret * 8 + k @} - @} else if (str ~ /^0[xX][[:xdigit:]]+/) @{ + @} else if (str ~ /^0[xX][[:xdigit:]]+$/) @{ # hexadecimal str = substr(str, 3) # lop off leading 0x n = length(str) @@ -20295,10 +20303,7 @@ function mystrtonum(str, ret, chars, n, i, k, c) for (i = 1; i <= n; i++) @{ c = substr(str, i, 1) c = tolower(c) - if ((k = index("0123456789", c)) > 0) - k-- # adjust for 1-basing in awk - else if ((k = index("abcdef", c)) > 0) - k += 9 + k = index("123456789abcdef", c) ret = ret * 16 + k @} @@ -30881,6 +30886,7 @@ When @option{--sandbox} is specified, extensions are disabled * Extension Samples:: The sample extensions that ship with @code{gawk}. * gawkextlib:: The @code{gawkextlib} project. +* Extension summary:: Extension summary. @end menu @node Extension Intro @@ -31105,7 +31111,7 @@ API function pointers are provided for the following kinds of operations: @itemize @value{BULLET} @item -Registrations functions. You may register: +Registration functions. You may register: @itemize @value{MINUS} @item extension functions, @@ -34707,6 +34713,121 @@ If you write an extension that you wish to share with other @code{gawkextlib} project. See the project's web site for more information. +@node Extension summary +@section Summary + +@itemize @value{BULLET} +@item +You can write extensions (sometimes called plug-ins) for @command{gawk} +in C or C++ using the Application Programming Interface (API) defined +by the @command{gawk} developers. + +@item +Extensions must have a license compatible with the GNU General Public +License (GPL), and they must assert that fact by declaring a variable +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 +various data fields and function pointers. The extension can then call +into @command{gawk} via the supplied function pointers to accomplish +certain tasks. + +@item +One of these tasks is to ``register'' the name and implementation of +a new @command{awk}-level function with @command{gawk}. The implementation +takes the form of a C function pointer with a defined signature. +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 +a number of standard header files @emph{before} including it in your source file. + +@item +API function pointers are provided for the following kinds of operations: + +@itemize @value{BULLET} +@item +Registration functions. You may register +extension functions, +exit callbacks, +a version string, +input parsers, +output wrappers, +and two-way processors. + +@item +Printing fatal, warning, and ``lint'' warning messages. + +@item +Updating @code{ERRNO}, or unsetting it. + +@item +Accessing parameters, including converting an undefined parameter into +an array. + +@item +Symbol table access: retrieving a global variable, creating one, +or changing one. + +@item +Allocating, reallocating, and releasing memory. + +@item +Creating and releasing cached values; this provides an +efficient way to use values for multiple variables and +can be a big performance win. + +@item +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 elements +@end itemize + +@item +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. +It also provides memory management functions to ensure compatibility +between memory allocated by @command{gawk} and memory allocated by an +extension. + +@item +@emph{All} memory passed from @command{gawk} to an extension must be +treated as read-only by the extension. + +@item +@emph{All} memory passed from an extension to @command{gawk} must come from +the API's memory allocation functions. @command{gawk} takes responsibility for +the memory and will release it when appropriate. + +@item +The API provides information about the running version of @command{gawk} so +that an extension can make sure it is compatible with the @command{gawk} +that loaded it. + +@item +It is easiest to start a new extension by copying the boilerplate code +described in this @value{CHAPTER}. Macros in the @file{gawkapi.h} 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 +to the community of @command{gawk} users, the @code{gawkextlib} project +should be the place to do so. + +@end itemize + @ifnotinfo @part @value{PART4}Appendices @end ifnotinfo @@ -34785,6 +34906,7 @@ online documentation}. * Common Extensions:: Common Extensions Summary. * Ranges and Locales:: How locales used to affect regexp ranges. * Contributors:: The major contributors to @command{gawk}. +* History summary:: History summary. @end menu @node V7/SVR3.1 @@ -36365,6 +36487,41 @@ has been working on @command{gawk} since 1988, at first helping David Trueman, and as the primary maintainer since around 1994. @end itemize +@node History summary +@appendixsec Summary + +@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, +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. + +@item +Brian Kernighan's @command{awk} provides a small number of extensions +that are implemented in common with other versions of @command{awk}. + +@item +@command{gawk} provides a large number of extensions over POSIX @command{awk}. +They can be disabled with either the @option{--traditional} or @option{--posix} +options. + +@item +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 +but it can be EBCDIC on IBM S/390 systems. + +@item +Many people have contributed to @command{gawk} development over the years. +We hope that the list provided in this @value{CHAPTER} is complete and gives +the appropriate credit where credit is due. + +@end itemize + @node Installation @appendix Installing @command{gawk} @@ -36390,6 +36547,7 @@ the respective ports. * Bugs:: Reporting Problems and Bugs. * Other Versions:: Other freely available @command{awk} implementations. +* Installation summary:: Summary of installation. @end menu @node Gawk Distribution @@ -37932,9 +38090,46 @@ See also the @uref{http://en.wikipedia.org/wiki/Awk_language#Versions_and_implem Wikipedia article}, for information on additional versions. @end table +@c ENDOFRANGE awkim + +@node Installation summary +@appendixsec Summary + +@itemize @value{BULLET} +@item +The @command{gawk} distribution is availble from GNU project's main +distribution site, @code{ftp.gnu.org}. The canonical build recipe is: + +@example +wget http://ftp.gnu.org/gnu/gawk/gawk-@value{VERSION}.@value{PATCHLEVEL}.tar.gz +tar -xvpzf gawk-@value{VERSION}.@value{PATCHLEVEL}.tar.gz +cd gawk-@value{VERSION}.@value{PATCHLEVEL} +./configure && make && make check +@end example + +@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, +@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}. + +@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 +the problem. + +@item +There are a number of other freely available @command{awk} +implementations. Many are POSIX compliant; others are less so. + +@end itemize + @c ENDOFRANGE gligawk @c ENDOFRANGE ingawk -@c ENDOFRANGE awkim @ifclear FOR_PRINT @node Notes @@ -37956,6 +38151,7 @@ maintainers of @command{gawk}. Everything in it applies specifically to * Implementation Limitations:: Some limitations of the implementation. * Extension Design:: Design notes about the extension API. * Old Extension Mechanism:: Some compatibility for old extensions. +* Notes summary:: Summary of implementation notes. @end menu @node Compatibility Mode @@ -38878,6 +39074,42 @@ The @command{gawk} development team strongly recommends that you convert any old extensions that you may have to use the new API described in @ref{Dynamic Extensions}. +@node Notes summary +@appendixsec Summary + +@itemize @value{BULLET} +@item +@command{gawk}'s extensions can be disabled with either the +@option{--traditional} option or with the @option{--posix} option. +The @option{--parsedebug} option is availble if @command{gawk} is +compiled with @samp{-DDEBUG}. + +@item +The source code for @command{gawk} is maintained in a publicly +accessable Git repository. Anyone may check it out and view the source. + +@item +Contributions to @command{gawk} are welcome. Following the steps +outlined in this @value{CHAPTER} will make it easier to integrate +your contributions into the code base. +This applies both to new feature contributions and to ports to +additional operating systems. + +@item +@command{gawk} has some limits---generally those that are imposed by +the machine architecture. + +@item +The extension API design was intended to solve a number of problems +with the previous extension mechanism, enable features needed by +the @code{xgawk} project, and provide binary compatibility going forward. + +@item +The previous extension mechanism is still supported in @value{PVERSION} 4.1 +of @command{gawk}, but it @emph{will} be removed in the next major release. + +@end itemize + @c ENDOFRANGE impis @c ENDOFRANGE gawii diff --git a/doc/gawktexi.in b/doc/gawktexi.in index ef793fbd..905d3dd5 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -1697,15 +1697,22 @@ the picture of a flashlight in the margin, as shown here. @ifnottex ``(d.c.)''. @end ifnottex +@ifclear FOR_PRINT They also appear in the index under the heading ``dark corner.'' +@end ifclear As noted by the opening quote, though, any coverage of dark corners is, by definition, incomplete. Extensions to the standard @command{awk} language that are supported by more than one @command{awk} implementation are marked +@ifclear FOR_PRINT ``@value{COMMONEXT},'' and listed in the index under ``common extensions'' and ``extensions, common.'' +@end ifclear +@ifset FOR_PRINT +``@value{COMMONEXT}.'' +@end ifset @node Manual History @unnumberedsec The GNU Project and This Book @@ -2481,7 +2488,7 @@ runs, it will probably print strange messages about syntax errors. For example, look at the following: @example -$ @kbd{awk '@{ print "hello" @} # let's be cute'} +$ @kbd{awk 'BEGIN @{ print "hello" @} # let's be cute'} > @end example @@ -19443,11 +19450,12 @@ provides an implementation for other versions of @command{awk}: # # Arnold Robbins, arnold@@skeeve.com, Public Domain # February, 2004 +# Revised June, 2014 @c endfile @end ignore @c file eg/lib/strtonum.awk -function mystrtonum(str, ret, chars, n, i, k, c) +function mystrtonum(str, ret, n, i, k, c) @{ if (str ~ /^0[0-7]*$/) @{ # octal @@ -19460,7 +19468,7 @@ function mystrtonum(str, ret, chars, n, i, k, c) ret = ret * 8 + k @} - @} else if (str ~ /^0[xX][[:xdigit:]]+/) @{ + @} else if (str ~ /^0[xX][[:xdigit:]]+$/) @{ # hexadecimal str = substr(str, 3) # lop off leading 0x n = length(str) @@ -19468,10 +19476,7 @@ function mystrtonum(str, ret, chars, n, i, k, c) for (i = 1; i <= n; i++) @{ c = substr(str, i, 1) c = tolower(c) - if ((k = index("0123456789", c)) > 0) - k-- # adjust for 1-basing in awk - else if ((k = index("abcdef", c)) > 0) - k += 9 + k = index("123456789abcdef", c) ret = ret * 16 + k @} @@ -30025,6 +30030,7 @@ When @option{--sandbox} is specified, extensions are disabled * Extension Samples:: The sample extensions that ship with @code{gawk}. * gawkextlib:: The @code{gawkextlib} project. +* Extension summary:: Extension summary. @end menu @node Extension Intro @@ -30249,7 +30255,7 @@ API function pointers are provided for the following kinds of operations: @itemize @value{BULLET} @item -Registrations functions. You may register: +Registration functions. You may register: @itemize @value{MINUS} @item extension functions, @@ -33851,6 +33857,121 @@ If you write an extension that you wish to share with other @code{gawkextlib} project. See the project's web site for more information. +@node Extension summary +@section Summary + +@itemize @value{BULLET} +@item +You can write extensions (sometimes called plug-ins) for @command{gawk} +in C or C++ using the Application Programming Interface (API) defined +by the @command{gawk} developers. + +@item +Extensions must have a license compatible with the GNU General Public +License (GPL), and they must assert that fact by declaring a variable +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 +various data fields and function pointers. The extension can then call +into @command{gawk} via the supplied function pointers to accomplish +certain tasks. + +@item +One of these tasks is to ``register'' the name and implementation of +a new @command{awk}-level function with @command{gawk}. The implementation +takes the form of a C function pointer with a defined signature. +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 +a number of standard header files @emph{before} including it in your source file. + +@item +API function pointers are provided for the following kinds of operations: + +@itemize @value{BULLET} +@item +Registration functions. You may register +extension functions, +exit callbacks, +a version string, +input parsers, +output wrappers, +and two-way processors. + +@item +Printing fatal, warning, and ``lint'' warning messages. + +@item +Updating @code{ERRNO}, or unsetting it. + +@item +Accessing parameters, including converting an undefined parameter into +an array. + +@item +Symbol table access: retrieving a global variable, creating one, +or changing one. + +@item +Allocating, reallocating, and releasing memory. + +@item +Creating and releasing cached values; this provides an +efficient way to use values for multiple variables and +can be a big performance win. + +@item +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 elements +@end itemize + +@item +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. +It also provides memory management functions to ensure compatibility +between memory allocated by @command{gawk} and memory allocated by an +extension. + +@item +@emph{All} memory passed from @command{gawk} to an extension must be +treated as read-only by the extension. + +@item +@emph{All} memory passed from an extension to @command{gawk} must come from +the API's memory allocation functions. @command{gawk} takes responsibility for +the memory and will release it when appropriate. + +@item +The API provides information about the running version of @command{gawk} so +that an extension can make sure it is compatible with the @command{gawk} +that loaded it. + +@item +It is easiest to start a new extension by copying the boilerplate code +described in this @value{CHAPTER}. Macros in the @file{gawkapi.h} 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 +to the community of @command{gawk} users, the @code{gawkextlib} project +should be the place to do so. + +@end itemize + @ifnotinfo @part @value{PART4}Appendices @end ifnotinfo @@ -33929,6 +34050,7 @@ online documentation}. * Common Extensions:: Common Extensions Summary. * Ranges and Locales:: How locales used to affect regexp ranges. * Contributors:: The major contributors to @command{gawk}. +* History summary:: History summary. @end menu @node V7/SVR3.1 @@ -35509,6 +35631,41 @@ has been working on @command{gawk} since 1988, at first helping David Trueman, and as the primary maintainer since around 1994. @end itemize +@node History summary +@appendixsec Summary + +@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, +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. + +@item +Brian Kernighan's @command{awk} provides a small number of extensions +that are implemented in common with other versions of @command{awk}. + +@item +@command{gawk} provides a large number of extensions over POSIX @command{awk}. +They can be disabled with either the @option{--traditional} or @option{--posix} +options. + +@item +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 +but it can be EBCDIC on IBM S/390 systems. + +@item +Many people have contributed to @command{gawk} development over the years. +We hope that the list provided in this @value{CHAPTER} is complete and gives +the appropriate credit where credit is due. + +@end itemize + @node Installation @appendix Installing @command{gawk} @@ -35534,6 +35691,7 @@ the respective ports. * Bugs:: Reporting Problems and Bugs. * Other Versions:: Other freely available @command{awk} implementations. +* Installation summary:: Summary of installation. @end menu @node Gawk Distribution @@ -37076,9 +37234,46 @@ See also the @uref{http://en.wikipedia.org/wiki/Awk_language#Versions_and_implem Wikipedia article}, for information on additional versions. @end table +@c ENDOFRANGE awkim + +@node Installation summary +@appendixsec Summary + +@itemize @value{BULLET} +@item +The @command{gawk} distribution is availble from GNU project's main +distribution site, @code{ftp.gnu.org}. The canonical build recipe is: + +@example +wget http://ftp.gnu.org/gnu/gawk/gawk-@value{VERSION}.@value{PATCHLEVEL}.tar.gz +tar -xvpzf gawk-@value{VERSION}.@value{PATCHLEVEL}.tar.gz +cd gawk-@value{VERSION}.@value{PATCHLEVEL} +./configure && make && make check +@end example + +@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, +@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}. + +@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 +the problem. + +@item +There are a number of other freely available @command{awk} +implementations. Many are POSIX compliant; others are less so. + +@end itemize + @c ENDOFRANGE gligawk @c ENDOFRANGE ingawk -@c ENDOFRANGE awkim @ifclear FOR_PRINT @node Notes @@ -37100,6 +37295,7 @@ maintainers of @command{gawk}. Everything in it applies specifically to * Implementation Limitations:: Some limitations of the implementation. * Extension Design:: Design notes about the extension API. * Old Extension Mechanism:: Some compatibility for old extensions. +* Notes summary:: Summary of implementation notes. @end menu @node Compatibility Mode @@ -38022,6 +38218,42 @@ The @command{gawk} development team strongly recommends that you convert any old extensions that you may have to use the new API described in @ref{Dynamic Extensions}. +@node Notes summary +@appendixsec Summary + +@itemize @value{BULLET} +@item +@command{gawk}'s extensions can be disabled with either the +@option{--traditional} option or with the @option{--posix} option. +The @option{--parsedebug} option is availble if @command{gawk} is +compiled with @samp{-DDEBUG}. + +@item +The source code for @command{gawk} is maintained in a publicly +accessable Git repository. Anyone may check it out and view the source. + +@item +Contributions to @command{gawk} are welcome. Following the steps +outlined in this @value{CHAPTER} will make it easier to integrate +your contributions into the code base. +This applies both to new feature contributions and to ports to +additional operating systems. + +@item +@command{gawk} has some limits---generally those that are imposed by +the machine architecture. + +@item +The extension API design was intended to solve a number of problems +with the previous extension mechanism, enable features needed by +the @code{xgawk} project, and provide binary compatibility going forward. + +@item +The previous extension mechanism is still supported in @value{PVERSION} 4.1 +of @command{gawk}, but it @emph{will} be removed in the next major release. + +@end itemize + @c ENDOFRANGE impis @c ENDOFRANGE gawii -- cgit v1.2.3 From 3a73ec7f27db0fec9ca68e97800f30f9ad33e293 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 16 Jun 2014 22:51:53 +0300 Subject: Start adding exercises. --- doc/ChangeLog | 4 + doc/gawk.info | 1065 +++++++++++++++++++++++++++++-------------------------- doc/gawk.texi | 200 ++++++----- doc/gawktexi.in | 200 ++++++----- 4 files changed, 801 insertions(+), 668 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index bd71b017..74431336 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-06-16 Arnold D. Robbins + + * gawktexi.in: Start adding exercises. + 2014-06-15 Arnold D. Robbins * gawktexi.in: Finish up summaries. Improvements in mystrtonum(). diff --git a/doc/gawk.info b/doc/gawk.info index d7442017..6f84e273 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -4044,6 +4044,7 @@ have to be named on the `awk' command line (*note Getline::). * Command line directories:: What happens if you put a directory on the command line. * Input Summary:: Input summary. +* Input Exercises:: Exercises.  File: gawk.info, Node: Records, Next: Fields, Up: Reading Files @@ -5854,7 +5855,7 @@ error. usable data from an `awk' program.  -File: gawk.info, Node: Input Summary, Prev: Command line directories, Up: Reading Files +File: gawk.info, Node: Input Summary, Next: Input Exercises, Prev: Command line directories, Up: Reading Files 4.12 Summary ============ @@ -5922,6 +5923,25 @@ File: gawk.info, Node: Input Summary, Prev: Command line directories, Up: Rea `gawk' ignores them if not in POSIX mode. + +File: gawk.info, Node: Input Exercises, Prev: Input Summary, Up: Reading Files + +4.13 Exercises +============== + + 1. Using the `FIELDWIDTHS' variable (*note Constant Size::), write a + program to read election data, where each record represents one + voter's votes. Come up with a way to define which columns are + associated with each ballot item, and print the total votes, + including abstentions, for each item. + + 2. *note Plain Getline::, presented a program to remove C-style + comments (`/* ... */') from the input. That program does not work + if one comment ends on one line and another one starts later on + the same line. Write a program that does handle multiple comments + on the line. + +  File: gawk.info, Node: Printing, Next: Expressions, Prev: Reading Files, Up: Top @@ -5957,6 +5977,7 @@ function. descriptors. * Close Files And Pipes:: Closing Input and Output Files and Pipes. * Output Summary:: Output summary. +* Output exercises:: Exercises.  File: gawk.info, Node: Print, Next: Print Examples, Up: Printing @@ -6548,11 +6569,6 @@ be emphasized by storing it in a variable, like this: printf format, "----", "------" } { printf format, $1, $2 }' mail-list - At this point, it would be a worthwhile exercise to use the `printf' -statement to line up the headings and table data for the -`inventory-shipped' example that was covered earlier in the minor node -on the `print' statement (*note Print::). -  File: gawk.info, Node: Redirection, Next: Special Files, Prev: Printf, Up: Printing @@ -7017,7 +7033,7 @@ call. See the system manual pages for information on how to decode this value.  -File: gawk.info, Node: Output Summary, Prev: Close Files And Pipes, Up: Printing +File: gawk.info, Node: Output Summary, Next: Output exercises, Prev: Close Files And Pipes, Up: Printing 5.9 Summary =========== @@ -7042,6 +7058,30 @@ File: gawk.info, Node: Output Summary, Prev: Close Files And Pipes, Up: Print communications. + +File: gawk.info, Node: Output exercises, Prev: Output Summary, Up: Printing + +5.10 Exercises +============== + + 1. Rewrite the program: + + awk 'BEGIN { print "Month Crates" + print "----- ------" } + { print $1, " ", $2 }' inventory-shipped + + from *note Output Separators::, by using a new value of `OFS'. + + 2. Use the `printf' statement to line up the headings and table data + for the `inventory-shipped' example that was covered in *note + Print::. + + 3. What happens if you forget the double quotes when redirecting + output, as follows: + + BEGIN { print "Serious error detected!" > /dev/stderr } + +  File: gawk.info, Node: Expressions, Next: Patterns and Actions, Prev: Printing, Up: Top @@ -14127,6 +14167,7 @@ for different implementations of `awk' is pretty straightforward. * Group Functions:: Functions for getting group information. * Walking Arrays:: A function to walk arrays of arrays. * Library Functions Summary:: Summary of library functions. +* Library exercises:: Exercises. ---------- Footnotes ---------- @@ -15012,12 +15053,6 @@ normal case. end of the command-line arguments. Note that the test in the condition of the `for' loop uses the `<=' operator, not `<'. - As an exercise, you might consider whether this same problem can be -solved without relying on `gawk''s `ARGIND' variable. - - As a second exercise, revise this code to handle the case where an -intervening value in `ARGV' is a variable assignment. -  File: gawk.info, Node: Ignoring Assigns, Prev: Empty Files, Up: Data File Management @@ -15886,20 +15921,8 @@ value. Here is a main program to demonstrate: -| a[2][2] = 22 -| a[3] = 3 - Walking an array and processing each element is a general-purpose -operation. You might want to consider generalizing the `walk_array()' -function by adding an additional parameter named `process'. - - Then, inside the loop, instead of simply printing the array element's -index and value, use the indirect function call syntax (*note Indirect -Calls::) on `process', passing it the index and the value. - - When calling `walk_array()', you would pass the name of a -user-defined function that expects to receive an index and a value, and -then processes the element. -  -File: gawk.info, Node: Library Functions Summary, Prev: Walking Arrays, Up: Library Functions +File: gawk.info, Node: Library Functions Summary, Next: Library exercises, Prev: Walking Arrays, Up: Library Functions 10.8 Summary ============ @@ -15935,6 +15958,37 @@ File: gawk.info, Node: Library Functions Summary, Prev: Walking Arrays, Up: L A simple function to traverse an array of arrays to any depth. + +File: gawk.info, Node: Library exercises, Prev: Library Functions Summary, Up: Library Functions + +10.9 Exercises +============== + + 1. In *note Empty Files::, we presented the `zerofile.awk' program, + which made use of `gawk''s `ARGIND' variable. Can this problem be + solved without relying on `ARGIND'? If so, how? + + 2. As a related challenge, revise that code to handle the case where + an intervening value in `ARGV' is a variable assignment. + + 3. *note Walking Arrays::, presented a function that walked a + multidimensional array to print it out. However, walking an array + and processing each element is a general-purpose operation. + Generalize the `walk_array()' function by adding an additional + parameter named `process'. + + Then, inside the loop, instead of printing the array element's + index and value, use the indirect function call syntax (*note + Indirect Calls::) on `process', passing it the index and the value. + + When calling `walk_array()', you would pass the name of a + user-defined function that expects to receive an index and a value, + and then processes the element. + + Test your new version by printing the array; you should end up with + output identical to that of the original version. + +  File: gawk.info, Node: Sample Programs, Next: Advanced Features, Prev: Library Functions, Up: Top @@ -34078,483 +34132,486 @@ Node: Leftmost Longest176321 Node: Computed Regexps177522 Node: Regexp Summary180894 Node: Reading Files182366 -Node: Records184415 -Node: awk split records185158 -Node: gawk split records190016 -Ref: gawk split records-Footnote-1194537 -Node: Fields194574 -Ref: Fields-Footnote-1197538 -Node: Nonconstant Fields197624 -Ref: Nonconstant Fields-Footnote-1199854 -Node: Changing Fields200056 -Node: Field Separators206010 -Node: Default Field Splitting208712 -Node: Regexp Field Splitting209829 -Node: Single Character Fields213170 -Node: Command Line Field Separator214229 -Node: Full Line Fields217571 -Ref: Full Line Fields-Footnote-1218079 -Node: Field Splitting Summary218125 -Ref: Field Splitting Summary-Footnote-1221224 -Node: Constant Size221325 -Node: Splitting By Content225932 -Ref: Splitting By Content-Footnote-1229682 -Node: Multiple Line229722 -Ref: Multiple Line-Footnote-1235578 -Node: Getline235757 -Node: Plain Getline237973 -Node: Getline/Variable240068 -Node: Getline/File241215 -Node: Getline/Variable/File242599 -Ref: Getline/Variable/File-Footnote-1244198 -Node: Getline/Pipe244285 -Node: Getline/Variable/Pipe246984 -Node: Getline/Coprocess248091 -Node: Getline/Variable/Coprocess249343 -Node: Getline Notes250080 -Node: Getline Summary252884 -Ref: table-getline-variants253292 -Node: Read Timeout254204 -Ref: Read Timeout-Footnote-1258031 -Node: Command line directories258089 -Node: Input Summary258993 -Node: Printing262107 -Node: Print263786 -Node: Print Examples265127 -Node: Output Separators267906 -Node: OFMT269922 -Node: Printf271280 -Node: Basic Printf272186 -Node: Control Letters273725 -Node: Format Modifiers277579 -Node: Printf Examples283606 -Node: Redirection286313 -Node: Special Files293285 -Node: Special FD293816 -Ref: Special FD-Footnote-1297440 -Node: Special Network297514 -Node: Special Caveats298364 -Node: Close Files And Pipes299160 -Ref: Close Files And Pipes-Footnote-1306323 -Ref: Close Files And Pipes-Footnote-2306471 -Node: Output Summary306621 -Node: Expressions307593 -Node: Values308778 -Node: Constants309454 -Node: Scalar Constants310134 -Ref: Scalar Constants-Footnote-1310993 -Node: Nondecimal-numbers311243 -Node: Regexp Constants314243 -Node: Using Constant Regexps314718 -Node: Variables317788 -Node: Using Variables318443 -Node: Assignment Options320167 -Node: Conversion322042 -Ref: table-locale-affects327478 -Ref: Conversion-Footnote-1328102 -Node: All Operators328211 -Node: Arithmetic Ops328841 -Node: Concatenation331346 -Ref: Concatenation-Footnote-1334142 -Node: Assignment Ops334262 -Ref: table-assign-ops339245 -Node: Increment Ops340562 -Node: Truth Values and Conditions344000 -Node: Truth Values345083 -Node: Typing and Comparison346132 -Node: Variable Typing346925 -Ref: Variable Typing-Footnote-1350825 -Node: Comparison Operators350947 -Ref: table-relational-ops351357 -Node: POSIX String Comparison354907 -Ref: POSIX String Comparison-Footnote-1355991 -Node: Boolean Ops356129 -Ref: Boolean Ops-Footnote-1360199 -Node: Conditional Exp360290 -Node: Function Calls362017 -Node: Precedence365775 -Node: Locales369444 -Node: Expressions Summary371075 -Node: Patterns and Actions373572 -Node: Pattern Overview374688 -Node: Regexp Patterns376365 -Node: Expression Patterns376908 -Node: Ranges380689 -Node: BEGIN/END383795 -Node: Using BEGIN/END384557 -Ref: Using BEGIN/END-Footnote-1387293 -Node: I/O And BEGIN/END387399 -Node: BEGINFILE/ENDFILE389684 -Node: Empty392615 -Node: Using Shell Variables392932 -Node: Action Overview395215 -Node: Statements397542 -Node: If Statement399390 -Node: While Statement400888 -Node: Do Statement402932 -Node: For Statement404088 -Node: Switch Statement407240 -Node: Break Statement409343 -Node: Continue Statement411398 -Node: Next Statement413191 -Node: Nextfile Statement415581 -Node: Exit Statement418236 -Node: Built-in Variables420640 -Node: User-modified421767 -Ref: User-modified-Footnote-1429452 -Node: Auto-set429514 -Ref: Auto-set-Footnote-1442079 -Ref: Auto-set-Footnote-2442284 -Node: ARGC and ARGV442340 -Node: Pattern Action Summary446194 -Node: Arrays448417 -Node: Array Basics449966 -Node: Array Intro450792 -Ref: figure-array-elements452765 -Node: Reference to Elements455172 -Node: Assigning Elements457445 -Node: Array Example457936 -Node: Scanning an Array459668 -Node: Controlling Scanning462683 -Ref: Controlling Scanning-Footnote-1467856 -Node: Delete468172 -Ref: Delete-Footnote-1470937 -Node: Numeric Array Subscripts470994 -Node: Uninitialized Subscripts473177 -Node: Multidimensional474802 -Node: Multiscanning477895 -Node: Arrays of Arrays479484 -Node: Arrays Summary484147 -Node: Functions486252 -Node: Built-in487125 -Node: Calling Built-in488203 -Node: Numeric Functions490191 -Ref: Numeric Functions-Footnote-1494025 -Ref: Numeric Functions-Footnote-2494382 -Ref: Numeric Functions-Footnote-3494430 -Node: String Functions494699 -Ref: String Functions-Footnote-1517710 -Ref: String Functions-Footnote-2517839 -Ref: String Functions-Footnote-3518087 -Node: Gory Details518174 -Ref: table-sub-escapes519843 -Ref: table-sub-posix-92521197 -Ref: table-sub-proposed522548 -Ref: table-posix-sub523902 -Ref: table-gensub-escapes525447 -Ref: Gory Details-Footnote-1526623 -Ref: Gory Details-Footnote-2526674 -Node: I/O Functions526825 -Ref: I/O Functions-Footnote-1533948 -Node: Time Functions534095 -Ref: Time Functions-Footnote-1544559 -Ref: Time Functions-Footnote-2544627 -Ref: Time Functions-Footnote-3544785 -Ref: Time Functions-Footnote-4544896 -Ref: Time Functions-Footnote-5545008 -Ref: Time Functions-Footnote-6545235 -Node: Bitwise Functions545501 -Ref: table-bitwise-ops546063 -Ref: Bitwise Functions-Footnote-1550308 -Node: Type Functions550492 -Node: I18N Functions551634 -Node: User-defined553279 -Node: Definition Syntax554083 -Ref: Definition Syntax-Footnote-1559008 -Node: Function Example559077 -Ref: Function Example-Footnote-1561721 -Node: Function Caveats561743 -Node: Calling A Function562261 -Node: Variable Scope563216 -Node: Pass By Value/Reference566204 -Node: Return Statement569712 -Node: Dynamic Typing572696 -Node: Indirect Calls573625 -Node: Functions Summary583338 -Node: Library Functions585877 -Ref: Library Functions-Footnote-1589452 -Ref: Library Functions-Footnote-2589595 -Node: Library Names589766 -Ref: Library Names-Footnote-1593239 -Ref: Library Names-Footnote-2593459 -Node: General Functions593545 -Node: Strtonum Function594573 -Node: Assert Function597353 -Node: Round Function600679 -Node: Cliff Random Function602220 -Node: Ordinal Functions603236 -Ref: Ordinal Functions-Footnote-1606313 -Ref: Ordinal Functions-Footnote-2606565 -Node: Join Function606776 -Ref: Join Function-Footnote-1608547 -Node: Getlocaltime Function608747 -Node: Readfile Function612483 -Node: Data File Management614322 -Node: Filetrans Function614954 -Node: Rewind Function619023 -Node: File Checking620410 -Ref: File Checking-Footnote-1621542 -Node: Empty Files621743 -Node: Ignoring Assigns623973 -Node: Getopt Function625527 -Ref: Getopt Function-Footnote-1636830 -Node: Passwd Functions637033 -Ref: Passwd Functions-Footnote-1646012 -Node: Group Functions646100 -Ref: Group Functions-Footnote-1654042 -Node: Walking Arrays654255 -Node: Library Functions Summary656425 -Node: Sample Programs657787 -Node: Running Examples658514 -Node: Clones659242 -Node: Cut Program660466 -Node: Egrep Program670334 -Ref: Egrep Program-Footnote-1678305 -Node: Id Program678415 -Node: Split Program682079 -Ref: Split Program-Footnote-1685617 -Node: Tee Program685745 -Node: Uniq Program688552 -Node: Wc Program695982 -Ref: Wc Program-Footnote-1700250 -Ref: Wc Program-Footnote-2700450 -Node: Miscellaneous Programs700542 -Node: Dupword Program701755 -Node: Alarm Program703786 -Node: Translate Program708600 -Ref: Translate Program-Footnote-1712991 -Ref: Translate Program-Footnote-2713261 -Node: Labels Program713395 -Ref: Labels Program-Footnote-1716766 -Node: Word Sorting716850 -Node: History Sorting720893 -Node: Extract Program722729 -Ref: Extract Program-Footnote-1730304 -Node: Simple Sed730433 -Node: Igawk Program733495 -Ref: Igawk Program-Footnote-1748671 -Ref: Igawk Program-Footnote-2748872 -Node: Anagram Program749010 -Node: Signature Program752078 -Node: Programs Summary753325 -Node: Advanced Features754513 -Node: Nondecimal Data756461 -Node: Array Sorting758038 -Node: Controlling Array Traversal758735 -Node: Array Sorting Functions767015 -Ref: Array Sorting Functions-Footnote-1770922 -Node: Two-way I/O771116 -Ref: Two-way I/O-Footnote-1776632 -Node: TCP/IP Networking776714 -Node: Profiling779558 -Node: Advanced Features Summary787100 -Node: Internationalization788964 -Node: I18N and L10N790444 -Node: Explaining gettext791130 -Ref: Explaining gettext-Footnote-1796270 -Ref: Explaining gettext-Footnote-2796454 -Node: Programmer i18n796619 -Node: Translator i18n800844 -Node: String Extraction801638 -Ref: String Extraction-Footnote-1802599 -Node: Printf Ordering802685 -Ref: Printf Ordering-Footnote-1805467 -Node: I18N Portability805531 -Ref: I18N Portability-Footnote-1807980 -Node: I18N Example808043 -Ref: I18N Example-Footnote-1810765 -Node: Gawk I18N810837 -Node: I18N Summary811475 -Node: Debugger812814 -Node: Debugging813836 -Node: Debugging Concepts814277 -Node: Debugging Terms816133 -Node: Awk Debugging818730 -Node: Sample Debugging Session819622 -Node: Debugger Invocation820142 -Node: Finding The Bug821475 -Node: List of Debugger Commands827957 -Node: Breakpoint Control829289 -Node: Debugger Execution Control832953 -Node: Viewing And Changing Data836313 -Node: Execution Stack839671 -Node: Debugger Info841184 -Node: Miscellaneous Debugger Commands845178 -Node: Readline Support850362 -Node: Limitations851254 -Node: Debugging Summary853528 -Node: Arbitrary Precision Arithmetic854692 -Ref: Arbitrary Precision Arithmetic-Footnote-1856341 -Node: General Arithmetic856489 -Node: Floating Point Issues858209 -Node: String Conversion Precision859090 -Ref: String Conversion Precision-Footnote-1860795 -Node: Unexpected Results860904 -Node: POSIX Floating Point Problems863057 -Ref: POSIX Floating Point Problems-Footnote-1866878 -Node: Integer Programming866916 -Node: Floating-point Programming868727 -Ref: Floating-point Programming-Footnote-1875055 -Ref: Floating-point Programming-Footnote-2875325 -Node: Floating-point Representation875589 -Node: Floating-point Context876754 -Ref: table-ieee-formats877593 -Node: Rounding Mode878977 -Ref: table-rounding-modes879456 -Ref: Rounding Mode-Footnote-1882471 -Node: Gawk and MPFR882650 -Node: Arbitrary Precision Floats884059 -Ref: Arbitrary Precision Floats-Footnote-1886502 -Node: Setting Precision886823 -Ref: table-predefined-precision-strings887507 -Node: Setting Rounding Mode889652 -Ref: table-gawk-rounding-modes890056 -Node: Floating-point Constants891243 -Node: Changing Precision892695 -Ref: Changing Precision-Footnote-1894087 -Node: Exact Arithmetic894261 -Node: Arbitrary Precision Integers897395 -Ref: Arbitrary Precision Integers-Footnote-1900410 -Node: Dynamic Extensions900557 -Node: Extension Intro902066 -Node: Plugin License903331 -Node: Extension Mechanism Outline904016 -Ref: figure-load-extension904440 -Ref: figure-load-new-function905925 -Ref: figure-call-new-function906927 -Node: Extension API Description908911 -Node: Extension API Functions Introduction910361 -Node: General Data Types915226 -Ref: General Data Types-Footnote-1920919 -Node: Requesting Values921218 -Ref: table-value-types-returned921955 -Node: Memory Allocation Functions922913 -Ref: Memory Allocation Functions-Footnote-1925660 -Node: Constructor Functions925756 -Node: Registration Functions927514 -Node: Extension Functions928199 -Node: Exit Callback Functions930501 -Node: Extension Version String931750 -Node: Input Parsers932400 -Node: Output Wrappers942203 -Node: Two-way processors946719 -Node: Printing Messages948923 -Ref: Printing Messages-Footnote-1950000 -Node: Updating `ERRNO'950152 -Node: Accessing Parameters950891 -Node: Symbol Table Access952121 -Node: Symbol table by name952635 -Node: Symbol table by cookie954611 -Ref: Symbol table by cookie-Footnote-1958744 -Node: Cached values958807 -Ref: Cached values-Footnote-1962311 -Node: Array Manipulation962402 -Ref: Array Manipulation-Footnote-1963500 -Node: Array Data Types963539 -Ref: Array Data Types-Footnote-1966242 -Node: Array Functions966334 -Node: Flattening Arrays970208 -Node: Creating Arrays977060 -Node: Extension API Variables981791 -Node: Extension Versioning982427 -Node: Extension API Informational Variables984328 -Node: Extension API Boilerplate985414 -Node: Finding Extensions989218 -Node: Extension Example989778 -Node: Internal File Description990508 -Node: Internal File Ops994599 -Ref: Internal File Ops-Footnote-11006145 -Node: Using Internal File Ops1006285 -Ref: Using Internal File Ops-Footnote-11008632 -Node: Extension Samples1008900 -Node: Extension Sample File Functions1010424 -Node: Extension Sample Fnmatch1017992 -Node: Extension Sample Fork1019473 -Node: Extension Sample Inplace1020686 -Node: Extension Sample Ord1022466 -Node: Extension Sample Readdir1023302 -Ref: table-readdir-file-types1024158 -Node: Extension Sample Revout1024957 -Node: Extension Sample Rev2way1025548 -Node: Extension Sample Read write array1026289 -Node: Extension Sample Readfile1028168 -Node: Extension Sample API Tests1029268 -Node: Extension Sample Time1029793 -Node: gawkextlib1031108 -Node: Extension summary1033921 -Node: Language History1037586 -Node: V7/SVR3.11039229 -Node: SVR41041549 -Node: POSIX1042991 -Node: BTL1044377 -Node: POSIX/GNU1045111 -Node: Feature History1050710 -Node: Common Extensions1063822 -Node: Ranges and Locales1065134 -Ref: Ranges and Locales-Footnote-11069751 -Ref: Ranges and Locales-Footnote-21069778 -Ref: Ranges and Locales-Footnote-31070012 -Node: Contributors1070233 -Node: History summary1075695 -Node: Installation1077064 -Node: Gawk Distribution1078015 -Node: Getting1078499 -Node: Extracting1079325 -Node: Distribution contents1080967 -Node: Unix Installation1086684 -Node: Quick Installation1087301 -Node: Additional Configuration Options1089743 -Node: Configuration Philosophy1091481 -Node: Non-Unix Installation1093832 -Node: PC Installation1094290 -Node: PC Binary Installation1095601 -Node: PC Compiling1097449 -Ref: PC Compiling-Footnote-11100448 -Node: PC Testing1100553 -Node: PC Using1101729 -Node: Cygwin1105887 -Node: MSYS1106696 -Node: VMS Installation1107210 -Node: VMS Compilation1108006 -Ref: VMS Compilation-Footnote-11109228 -Node: VMS Dynamic Extensions1109286 -Node: VMS Installation Details1110659 -Node: VMS Running1112911 -Node: VMS GNV1115745 -Node: VMS Old Gawk1116468 -Node: Bugs1116938 -Node: Other Versions1120942 -Node: Installation summary1127196 -Node: Notes1128251 -Node: Compatibility Mode1129116 -Node: Additions1129898 -Node: Accessing The Source1130823 -Node: Adding Code1132259 -Node: New Ports1138437 -Node: Derived Files1142918 -Ref: Derived Files-Footnote-11147999 -Ref: Derived Files-Footnote-21148033 -Ref: Derived Files-Footnote-31148629 -Node: Future Extensions1148743 -Node: Implementation Limitations1149349 -Node: Extension Design1150597 -Node: Old Extension Problems1151751 -Ref: Old Extension Problems-Footnote-11153268 -Node: Extension New Mechanism Goals1153325 -Ref: Extension New Mechanism Goals-Footnote-11156685 -Node: Extension Other Design Decisions1156874 -Node: Extension Future Growth1158980 -Node: Old Extension Mechanism1159816 -Node: Notes summary1161578 -Node: Basic Concepts1162763 -Node: Basic High Level1163444 -Ref: figure-general-flow1163716 -Ref: figure-process-flow1164315 -Ref: Basic High Level-Footnote-11167544 -Node: Basic Data Typing1167729 -Node: Glossary1171056 -Node: Copying1196208 -Node: GNU Free Documentation License1233764 -Node: Index1258900 +Node: Records184458 +Node: awk split records185201 +Node: gawk split records190059 +Ref: gawk split records-Footnote-1194580 +Node: Fields194617 +Ref: Fields-Footnote-1197581 +Node: Nonconstant Fields197667 +Ref: Nonconstant Fields-Footnote-1199897 +Node: Changing Fields200099 +Node: Field Separators206053 +Node: Default Field Splitting208755 +Node: Regexp Field Splitting209872 +Node: Single Character Fields213213 +Node: Command Line Field Separator214272 +Node: Full Line Fields217614 +Ref: Full Line Fields-Footnote-1218122 +Node: Field Splitting Summary218168 +Ref: Field Splitting Summary-Footnote-1221267 +Node: Constant Size221368 +Node: Splitting By Content225975 +Ref: Splitting By Content-Footnote-1229725 +Node: Multiple Line229765 +Ref: Multiple Line-Footnote-1235621 +Node: Getline235800 +Node: Plain Getline238016 +Node: Getline/Variable240111 +Node: Getline/File241258 +Node: Getline/Variable/File242642 +Ref: Getline/Variable/File-Footnote-1244241 +Node: Getline/Pipe244328 +Node: Getline/Variable/Pipe247027 +Node: Getline/Coprocess248134 +Node: Getline/Variable/Coprocess249386 +Node: Getline Notes250123 +Node: Getline Summary252927 +Ref: table-getline-variants253335 +Node: Read Timeout254247 +Ref: Read Timeout-Footnote-1258074 +Node: Command line directories258132 +Node: Input Summary259036 +Node: Input Exercises262174 +Node: Printing262907 +Node: Print264630 +Node: Print Examples265971 +Node: Output Separators268750 +Node: OFMT270766 +Node: Printf272124 +Node: Basic Printf273030 +Node: Control Letters274569 +Node: Format Modifiers278423 +Node: Printf Examples284450 +Node: Redirection286914 +Node: Special Files293886 +Node: Special FD294417 +Ref: Special FD-Footnote-1298041 +Node: Special Network298115 +Node: Special Caveats298965 +Node: Close Files And Pipes299761 +Ref: Close Files And Pipes-Footnote-1306924 +Ref: Close Files And Pipes-Footnote-2307072 +Node: Output Summary307222 +Node: Output exercises308219 +Node: Expressions308899 +Node: Values310084 +Node: Constants310760 +Node: Scalar Constants311440 +Ref: Scalar Constants-Footnote-1312299 +Node: Nondecimal-numbers312549 +Node: Regexp Constants315549 +Node: Using Constant Regexps316024 +Node: Variables319094 +Node: Using Variables319749 +Node: Assignment Options321473 +Node: Conversion323348 +Ref: table-locale-affects328784 +Ref: Conversion-Footnote-1329408 +Node: All Operators329517 +Node: Arithmetic Ops330147 +Node: Concatenation332652 +Ref: Concatenation-Footnote-1335448 +Node: Assignment Ops335568 +Ref: table-assign-ops340551 +Node: Increment Ops341868 +Node: Truth Values and Conditions345306 +Node: Truth Values346389 +Node: Typing and Comparison347438 +Node: Variable Typing348231 +Ref: Variable Typing-Footnote-1352131 +Node: Comparison Operators352253 +Ref: table-relational-ops352663 +Node: POSIX String Comparison356213 +Ref: POSIX String Comparison-Footnote-1357297 +Node: Boolean Ops357435 +Ref: Boolean Ops-Footnote-1361505 +Node: Conditional Exp361596 +Node: Function Calls363323 +Node: Precedence367081 +Node: Locales370750 +Node: Expressions Summary372381 +Node: Patterns and Actions374878 +Node: Pattern Overview375994 +Node: Regexp Patterns377671 +Node: Expression Patterns378214 +Node: Ranges381995 +Node: BEGIN/END385101 +Node: Using BEGIN/END385863 +Ref: Using BEGIN/END-Footnote-1388599 +Node: I/O And BEGIN/END388705 +Node: BEGINFILE/ENDFILE390990 +Node: Empty393921 +Node: Using Shell Variables394238 +Node: Action Overview396521 +Node: Statements398848 +Node: If Statement400696 +Node: While Statement402194 +Node: Do Statement404238 +Node: For Statement405394 +Node: Switch Statement408546 +Node: Break Statement410649 +Node: Continue Statement412704 +Node: Next Statement414497 +Node: Nextfile Statement416887 +Node: Exit Statement419542 +Node: Built-in Variables421946 +Node: User-modified423073 +Ref: User-modified-Footnote-1430758 +Node: Auto-set430820 +Ref: Auto-set-Footnote-1443385 +Ref: Auto-set-Footnote-2443590 +Node: ARGC and ARGV443646 +Node: Pattern Action Summary447500 +Node: Arrays449723 +Node: Array Basics451272 +Node: Array Intro452098 +Ref: figure-array-elements454071 +Node: Reference to Elements456478 +Node: Assigning Elements458751 +Node: Array Example459242 +Node: Scanning an Array460974 +Node: Controlling Scanning463989 +Ref: Controlling Scanning-Footnote-1469162 +Node: Delete469478 +Ref: Delete-Footnote-1472243 +Node: Numeric Array Subscripts472300 +Node: Uninitialized Subscripts474483 +Node: Multidimensional476108 +Node: Multiscanning479201 +Node: Arrays of Arrays480790 +Node: Arrays Summary485453 +Node: Functions487558 +Node: Built-in488431 +Node: Calling Built-in489509 +Node: Numeric Functions491497 +Ref: Numeric Functions-Footnote-1495331 +Ref: Numeric Functions-Footnote-2495688 +Ref: Numeric Functions-Footnote-3495736 +Node: String Functions496005 +Ref: String Functions-Footnote-1519016 +Ref: String Functions-Footnote-2519145 +Ref: String Functions-Footnote-3519393 +Node: Gory Details519480 +Ref: table-sub-escapes521149 +Ref: table-sub-posix-92522503 +Ref: table-sub-proposed523854 +Ref: table-posix-sub525208 +Ref: table-gensub-escapes526753 +Ref: Gory Details-Footnote-1527929 +Ref: Gory Details-Footnote-2527980 +Node: I/O Functions528131 +Ref: I/O Functions-Footnote-1535254 +Node: Time Functions535401 +Ref: Time Functions-Footnote-1545865 +Ref: Time Functions-Footnote-2545933 +Ref: Time Functions-Footnote-3546091 +Ref: Time Functions-Footnote-4546202 +Ref: Time Functions-Footnote-5546314 +Ref: Time Functions-Footnote-6546541 +Node: Bitwise Functions546807 +Ref: table-bitwise-ops547369 +Ref: Bitwise Functions-Footnote-1551614 +Node: Type Functions551798 +Node: I18N Functions552940 +Node: User-defined554585 +Node: Definition Syntax555389 +Ref: Definition Syntax-Footnote-1560314 +Node: Function Example560383 +Ref: Function Example-Footnote-1563027 +Node: Function Caveats563049 +Node: Calling A Function563567 +Node: Variable Scope564522 +Node: Pass By Value/Reference567510 +Node: Return Statement571018 +Node: Dynamic Typing574002 +Node: Indirect Calls574931 +Node: Functions Summary584644 +Node: Library Functions587183 +Ref: Library Functions-Footnote-1590801 +Ref: Library Functions-Footnote-2590944 +Node: Library Names591115 +Ref: Library Names-Footnote-1594588 +Ref: Library Names-Footnote-2594808 +Node: General Functions594894 +Node: Strtonum Function595922 +Node: Assert Function598702 +Node: Round Function602028 +Node: Cliff Random Function603569 +Node: Ordinal Functions604585 +Ref: Ordinal Functions-Footnote-1607662 +Ref: Ordinal Functions-Footnote-2607914 +Node: Join Function608125 +Ref: Join Function-Footnote-1609896 +Node: Getlocaltime Function610096 +Node: Readfile Function613832 +Node: Data File Management615671 +Node: Filetrans Function616303 +Node: Rewind Function620372 +Node: File Checking621759 +Ref: File Checking-Footnote-1622891 +Node: Empty Files623092 +Node: Ignoring Assigns625071 +Node: Getopt Function626625 +Ref: Getopt Function-Footnote-1637928 +Node: Passwd Functions638131 +Ref: Passwd Functions-Footnote-1647110 +Node: Group Functions647198 +Ref: Group Functions-Footnote-1655140 +Node: Walking Arrays655353 +Node: Library Functions Summary656956 +Node: Library exercises658344 +Node: Sample Programs659624 +Node: Running Examples660351 +Node: Clones661079 +Node: Cut Program662303 +Node: Egrep Program672171 +Ref: Egrep Program-Footnote-1680142 +Node: Id Program680252 +Node: Split Program683916 +Ref: Split Program-Footnote-1687454 +Node: Tee Program687582 +Node: Uniq Program690389 +Node: Wc Program697819 +Ref: Wc Program-Footnote-1702087 +Ref: Wc Program-Footnote-2702287 +Node: Miscellaneous Programs702379 +Node: Dupword Program703592 +Node: Alarm Program705623 +Node: Translate Program710437 +Ref: Translate Program-Footnote-1714828 +Ref: Translate Program-Footnote-2715098 +Node: Labels Program715232 +Ref: Labels Program-Footnote-1718603 +Node: Word Sorting718687 +Node: History Sorting722730 +Node: Extract Program724566 +Ref: Extract Program-Footnote-1732141 +Node: Simple Sed732270 +Node: Igawk Program735332 +Ref: Igawk Program-Footnote-1750508 +Ref: Igawk Program-Footnote-2750709 +Node: Anagram Program750847 +Node: Signature Program753915 +Node: Programs Summary755162 +Node: Advanced Features756350 +Node: Nondecimal Data758298 +Node: Array Sorting759875 +Node: Controlling Array Traversal760572 +Node: Array Sorting Functions768852 +Ref: Array Sorting Functions-Footnote-1772759 +Node: Two-way I/O772953 +Ref: Two-way I/O-Footnote-1778469 +Node: TCP/IP Networking778551 +Node: Profiling781395 +Node: Advanced Features Summary788937 +Node: Internationalization790801 +Node: I18N and L10N792281 +Node: Explaining gettext792967 +Ref: Explaining gettext-Footnote-1798107 +Ref: Explaining gettext-Footnote-2798291 +Node: Programmer i18n798456 +Node: Translator i18n802681 +Node: String Extraction803475 +Ref: String Extraction-Footnote-1804436 +Node: Printf Ordering804522 +Ref: Printf Ordering-Footnote-1807304 +Node: I18N Portability807368 +Ref: I18N Portability-Footnote-1809817 +Node: I18N Example809880 +Ref: I18N Example-Footnote-1812602 +Node: Gawk I18N812674 +Node: I18N Summary813312 +Node: Debugger814651 +Node: Debugging815673 +Node: Debugging Concepts816114 +Node: Debugging Terms817970 +Node: Awk Debugging820567 +Node: Sample Debugging Session821459 +Node: Debugger Invocation821979 +Node: Finding The Bug823312 +Node: List of Debugger Commands829794 +Node: Breakpoint Control831126 +Node: Debugger Execution Control834790 +Node: Viewing And Changing Data838150 +Node: Execution Stack841508 +Node: Debugger Info843021 +Node: Miscellaneous Debugger Commands847015 +Node: Readline Support852199 +Node: Limitations853091 +Node: Debugging Summary855365 +Node: Arbitrary Precision Arithmetic856529 +Ref: Arbitrary Precision Arithmetic-Footnote-1858178 +Node: General Arithmetic858326 +Node: Floating Point Issues860046 +Node: String Conversion Precision860927 +Ref: String Conversion Precision-Footnote-1862632 +Node: Unexpected Results862741 +Node: POSIX Floating Point Problems864894 +Ref: POSIX Floating Point Problems-Footnote-1868715 +Node: Integer Programming868753 +Node: Floating-point Programming870564 +Ref: Floating-point Programming-Footnote-1876892 +Ref: Floating-point Programming-Footnote-2877162 +Node: Floating-point Representation877426 +Node: Floating-point Context878591 +Ref: table-ieee-formats879430 +Node: Rounding Mode880814 +Ref: table-rounding-modes881293 +Ref: Rounding Mode-Footnote-1884308 +Node: Gawk and MPFR884487 +Node: Arbitrary Precision Floats885896 +Ref: Arbitrary Precision Floats-Footnote-1888339 +Node: Setting Precision888660 +Ref: table-predefined-precision-strings889344 +Node: Setting Rounding Mode891489 +Ref: table-gawk-rounding-modes891893 +Node: Floating-point Constants893080 +Node: Changing Precision894532 +Ref: Changing Precision-Footnote-1895924 +Node: Exact Arithmetic896098 +Node: Arbitrary Precision Integers899232 +Ref: Arbitrary Precision Integers-Footnote-1902247 +Node: Dynamic Extensions902394 +Node: Extension Intro903903 +Node: Plugin License905168 +Node: Extension Mechanism Outline905853 +Ref: figure-load-extension906277 +Ref: figure-load-new-function907762 +Ref: figure-call-new-function908764 +Node: Extension API Description910748 +Node: Extension API Functions Introduction912198 +Node: General Data Types917063 +Ref: General Data Types-Footnote-1922756 +Node: Requesting Values923055 +Ref: table-value-types-returned923792 +Node: Memory Allocation Functions924750 +Ref: Memory Allocation Functions-Footnote-1927497 +Node: Constructor Functions927593 +Node: Registration Functions929351 +Node: Extension Functions930036 +Node: Exit Callback Functions932338 +Node: Extension Version String933587 +Node: Input Parsers934237 +Node: Output Wrappers944040 +Node: Two-way processors948556 +Node: Printing Messages950760 +Ref: Printing Messages-Footnote-1951837 +Node: Updating `ERRNO'951989 +Node: Accessing Parameters952728 +Node: Symbol Table Access953958 +Node: Symbol table by name954472 +Node: Symbol table by cookie956448 +Ref: Symbol table by cookie-Footnote-1960581 +Node: Cached values960644 +Ref: Cached values-Footnote-1964148 +Node: Array Manipulation964239 +Ref: Array Manipulation-Footnote-1965337 +Node: Array Data Types965376 +Ref: Array Data Types-Footnote-1968079 +Node: Array Functions968171 +Node: Flattening Arrays972045 +Node: Creating Arrays978897 +Node: Extension API Variables983628 +Node: Extension Versioning984264 +Node: Extension API Informational Variables986165 +Node: Extension API Boilerplate987251 +Node: Finding Extensions991055 +Node: Extension Example991615 +Node: Internal File Description992345 +Node: Internal File Ops996436 +Ref: Internal File Ops-Footnote-11007982 +Node: Using Internal File Ops1008122 +Ref: Using Internal File Ops-Footnote-11010469 +Node: Extension Samples1010737 +Node: Extension Sample File Functions1012261 +Node: Extension Sample Fnmatch1019829 +Node: Extension Sample Fork1021310 +Node: Extension Sample Inplace1022523 +Node: Extension Sample Ord1024303 +Node: Extension Sample Readdir1025139 +Ref: table-readdir-file-types1025995 +Node: Extension Sample Revout1026794 +Node: Extension Sample Rev2way1027385 +Node: Extension Sample Read write array1028126 +Node: Extension Sample Readfile1030005 +Node: Extension Sample API Tests1031105 +Node: Extension Sample Time1031630 +Node: gawkextlib1032945 +Node: Extension summary1035758 +Node: Language History1039423 +Node: V7/SVR3.11041066 +Node: SVR41043386 +Node: POSIX1044828 +Node: BTL1046214 +Node: POSIX/GNU1046948 +Node: Feature History1052547 +Node: Common Extensions1065659 +Node: Ranges and Locales1066971 +Ref: Ranges and Locales-Footnote-11071588 +Ref: Ranges and Locales-Footnote-21071615 +Ref: Ranges and Locales-Footnote-31071849 +Node: Contributors1072070 +Node: History summary1077532 +Node: Installation1078901 +Node: Gawk Distribution1079852 +Node: Getting1080336 +Node: Extracting1081162 +Node: Distribution contents1082804 +Node: Unix Installation1088521 +Node: Quick Installation1089138 +Node: Additional Configuration Options1091580 +Node: Configuration Philosophy1093318 +Node: Non-Unix Installation1095669 +Node: PC Installation1096127 +Node: PC Binary Installation1097438 +Node: PC Compiling1099286 +Ref: PC Compiling-Footnote-11102285 +Node: PC Testing1102390 +Node: PC Using1103566 +Node: Cygwin1107724 +Node: MSYS1108533 +Node: VMS Installation1109047 +Node: VMS Compilation1109843 +Ref: VMS Compilation-Footnote-11111065 +Node: VMS Dynamic Extensions1111123 +Node: VMS Installation Details1112496 +Node: VMS Running1114748 +Node: VMS GNV1117582 +Node: VMS Old Gawk1118305 +Node: Bugs1118775 +Node: Other Versions1122779 +Node: Installation summary1129033 +Node: Notes1130088 +Node: Compatibility Mode1130953 +Node: Additions1131735 +Node: Accessing The Source1132660 +Node: Adding Code1134096 +Node: New Ports1140274 +Node: Derived Files1144755 +Ref: Derived Files-Footnote-11149836 +Ref: Derived Files-Footnote-21149870 +Ref: Derived Files-Footnote-31150466 +Node: Future Extensions1150580 +Node: Implementation Limitations1151186 +Node: Extension Design1152434 +Node: Old Extension Problems1153588 +Ref: Old Extension Problems-Footnote-11155105 +Node: Extension New Mechanism Goals1155162 +Ref: Extension New Mechanism Goals-Footnote-11158522 +Node: Extension Other Design Decisions1158711 +Node: Extension Future Growth1160817 +Node: Old Extension Mechanism1161653 +Node: Notes summary1163415 +Node: Basic Concepts1164600 +Node: Basic High Level1165281 +Ref: figure-general-flow1165553 +Ref: figure-process-flow1166152 +Ref: Basic High Level-Footnote-11169381 +Node: Basic Data Typing1169566 +Node: Glossary1172893 +Node: Copying1198045 +Node: GNU Free Documentation License1235601 +Node: Index1260737  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index a8c9245d..65e5cd91 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -6041,6 +6041,7 @@ used with it do not have to be named on the @command{awk} command line * Command line directories:: What happens if you put a directory on the command line. * Input Summary:: Input summary. +* Input Exercises:: Exercises. @end menu @node Records @@ -7475,10 +7476,6 @@ program for processing such data could use the @code{FIELDWIDTHS} feature to simplify reading the data. (Of course, getting @command{gawk} to run on a system with card readers is another story!) -@ignore -Exercise: Write a ballot card reading program -@end ignore - @cindex @command{gawk}, splitting fields and Assigning a value to @code{FS} causes @command{gawk} to use @code{FS} for field splitting again. Use @samp{FS = FS} to make this happen, @@ -7915,11 +7912,6 @@ decommented input, such as searching for matches of a regular expression. (This program has a subtle problem---it does not work if one comment ends and another begins on the same line.) -@ignore -Exercise, -write a program that does handle multiple comments on the line. -@end ignore - This form of the @code{getline} command sets @code{NF}, @code{NR}, @code{FNR}, @code{RT}, and the value of @code{$0}. @@ -8118,7 +8110,6 @@ each one. @xref{Close Files And Pipes}. @end ifnotdocbook @end ifnottex -@c Exercise!! @c This example is unrealistic, since you could just use system Given the input: @@ -8589,6 +8580,26 @@ Directories on the command line are fatal for standard @command{awk}; @end itemize +@node Input Exercises +@section Exercises + +@enumerate +@item +Using the @code{FIELDWIDTHS} variable (@pxref{Constant Size}), +write a program to read election data, where each record represents +one voter's votes. Come up with a way to define which columns are +associated with each ballot item, and print the total votes, +including abstentions, for each item. + +@item +@ref{Plain Getline}, presented a program to remove C-style +comments (@samp{/* @dots{} */}) from the input. That program +does not work if one comment ends on one line and another one +starts later on the same line. +Write a program that does handle multiple comments on the line. + +@end enumerate + @node Printing @chapter Printing Output @@ -8629,6 +8640,7 @@ and discusses the @code{close()} built-in function. descriptors. * Close Files And Pipes:: Closing Input and Output Files and Pipes. * Output Summary:: Output summary. +* Output exercises:: Exercises. @end menu @node Print @@ -8806,16 +8818,6 @@ The following example prints the first and second fields of each input record, separated by a semicolon, with a blank line added after each newline: -@ignore -Exercise, -Rewrite the -@example -awk 'BEGIN @{ print "Month Crates" - print "----- ------" @} - @{ print $1, " ", $2 @}' inventory-shipped -@end example -program by using a new value of @code{OFS}. -@end ignore @example $ @kbd{awk 'BEGIN @{ OFS = ";"; ORS = "\n\n" @}} @@ -9377,12 +9379,6 @@ awk 'BEGIN @{ format = "%-10s %s\n" @{ printf format, $1, $2 @}' mail-list @end example -@c !!! exercise -At this point, it would be a worthwhile exercise to use the -@code{printf} statement to line up the headings and table data for the -@file{inventory-shipped} example that was covered earlier in the @value{SECTION} -on the @code{print} statement -(@pxref{Print}). @c ENDOFRANGE printfs @node Redirection @@ -9771,7 +9767,6 @@ Note the use of quotes around the @value{FN}. Like any other redirection, the value must be a string. It is a common error to omit the quotes, which leads to confusing results. -@c Exercise: What does it do? :-) Finally, using the @code{close()} function on a @value{FN} of the form @code{"/dev/fd/@var{N}"}, for file descriptor numbers @@ -10149,6 +10144,35 @@ communications. @end itemize +@node Output exercises +@section Exercises + +@enumerate +@item +Rewrite the program: + +@example +awk 'BEGIN @{ print "Month Crates" + print "----- ------" @} + @{ print $1, " ", $2 @}' inventory-shipped +@end example + +@noindent +from @ref{Output Separators}, by using a new value of @code{OFS}. + +@item +Use the @code{printf} statement to line up the headings and table data +for the @file{inventory-shipped} example that was covered in @ref{Print}. + +@item +What happens if you forget the double quotes when redirecting +output, as follows: + +@example +BEGIN @{ print "Serious error detected!" > /dev/stderr @} +@end example + +@end enumerate @c ENDOFRANGE prnt @@ -20143,6 +20167,7 @@ comparisons use only lowercase letters. * Group Functions:: Functions for getting group information. * Walking Arrays:: A function to walk arrays of arrays. * Library Functions Summary:: Summary of library functions. +* Library exercises:: Exercises. @end menu @node Library Names @@ -21303,46 +21328,6 @@ the end of the command-line arguments. Note that the test in the condition of the @code{for} loop uses the @samp{<=} operator, not @samp{<}. -As an exercise, you might consider whether this same problem can -be solved without relying on @command{gawk}'s @code{ARGIND} variable. - -As a second exercise, revise this code to handle the case where -an intervening value in @code{ARGV} is a variable assignment. - -@ignore -# zerofile2.awk --- same thing, portably - -BEGIN @{ - ARGIND = Argind = 0 - for (i = 1; i < ARGC; i++) - Fnames[ARGV[i]]++ - -@} -FNR == 1 @{ - while (ARGV[ARGIND] != FILENAME) - ARGIND++ - Seen[FILENAME]++ - if (Seen[FILENAME] == Fnames[FILENAME]) - do - ARGIND++ - while (ARGV[ARGIND] != FILENAME) -@} -ARGIND > Argind + 1 @{ - for (Argind++; Argind < ARGIND; Argind++) - zerofile(ARGV[Argind], Argind) -@} -ARGIND != Argind @{ - Argind = ARGIND -@} -END @{ - if (ARGIND < ARGC - 1) - ARGIND = ARGC - 1 - if (ARGIND > Argind) - for (Argind++; Argind <= ARGIND; Argind++) - zerofile(ARGV[Argind], Argind) -@} -@end ignore - @node Ignoring Assigns @subsection Treating Assignments as @value{FFN}s @@ -22551,21 +22536,6 @@ $ @kbd{gawk -f walk_array.awk} @print{} a[3] = 3 @end example -@c exercise! -Walking an array and processing each element is a general-purpose -operation. You might want to consider generalizing the @code{walk_array()} -function by adding an additional parameter named @code{process}. - -Then, inside the loop, instead of simply printing the array element's -index and value, use the indirect function call syntax -(@pxref{Indirect Calls}) on @code{process}, passing it the index -and the value. - -When calling @code{walk_array()}, you would pass the name of a user-defined -function that expects to receive an index and a value, and then processes -the element. - - @c ENDOFRANGE libfgdata @c ENDOFRANGE flibgdata @c ENDOFRANGE gdatar @@ -22614,6 +22584,72 @@ A simple function to traverse an array of arrays to any depth. @end itemize +@node Library exercises +@section Exercises + +@enumerate +@item +In @ref{Empty Files}, we presented the @file{zerofile.awk} program, +which made use of @command{gawk}'s @code{ARGIND} variable. Can this +problem be solved without relying on @code{ARGIND}? If so, how? + +@ignore +# zerofile2.awk --- same thing, portably + +BEGIN @{ + ARGIND = Argind = 0 + for (i = 1; i < ARGC; i++) + Fnames[ARGV[i]]++ + +@} +FNR == 1 @{ + while (ARGV[ARGIND] != FILENAME) + ARGIND++ + Seen[FILENAME]++ + if (Seen[FILENAME] == Fnames[FILENAME]) + do + ARGIND++ + while (ARGV[ARGIND] != FILENAME) +@} +ARGIND > Argind + 1 @{ + for (Argind++; Argind < ARGIND; Argind++) + zerofile(ARGV[Argind], Argind) +@} +ARGIND != Argind @{ + Argind = ARGIND +@} +END @{ + if (ARGIND < ARGC - 1) + ARGIND = ARGC - 1 + if (ARGIND > Argind) + for (Argind++; Argind <= ARGIND; Argind++) + zerofile(ARGV[Argind], Argind) +@} +@end ignore + +@item +As a related challenge, revise that code to handle the case where +an intervening value in @code{ARGV} is a variable assignment. + +@item +@ref{Walking Arrays}, presented a function that walked a multidimensional +array to print it out. However, walking an array and processing +each element is a general-purpose operation. Generalize the +@code{walk_array()} function by adding an additional parameter named +@code{process}. + +Then, inside the loop, instead of printing the array element's index and +value, use the indirect function call syntax (@pxref{Indirect Calls}) +on @code{process}, passing it the index and the value. + +When calling @code{walk_array()}, you would pass the name of a +user-defined function that expects to receive an index and a value, +and then processes the element. + +Test your new version by printing the array; you should end up with +output identical to that of the original version. + +@end enumerate @c ENDOFRANGE flib @c ENDOFRANGE fudlib diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 905d3dd5..fcaa01a6 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -5842,6 +5842,7 @@ used with it do not have to be named on the @command{awk} command line * Command line directories:: What happens if you put a directory on the command line. * Input Summary:: Input summary. +* Input Exercises:: Exercises. @end menu @node Records @@ -7094,10 +7095,6 @@ program for processing such data could use the @code{FIELDWIDTHS} feature to simplify reading the data. (Of course, getting @command{gawk} to run on a system with card readers is another story!) -@ignore -Exercise: Write a ballot card reading program -@end ignore - @cindex @command{gawk}, splitting fields and Assigning a value to @code{FS} causes @command{gawk} to use @code{FS} for field splitting again. Use @samp{FS = FS} to make this happen, @@ -7534,11 +7531,6 @@ decommented input, such as searching for matches of a regular expression. (This program has a subtle problem---it does not work if one comment ends and another begins on the same line.) -@ignore -Exercise, -write a program that does handle multiple comments on the line. -@end ignore - This form of the @code{getline} command sets @code{NF}, @code{NR}, @code{FNR}, @code{RT}, and the value of @code{$0}. @@ -7737,7 +7729,6 @@ each one. @xref{Close Files And Pipes}. @end ifnotdocbook @end ifnottex -@c Exercise!! @c This example is unrealistic, since you could just use system Given the input: @@ -8208,6 +8199,26 @@ Directories on the command line are fatal for standard @command{awk}; @end itemize +@node Input Exercises +@section Exercises + +@enumerate +@item +Using the @code{FIELDWIDTHS} variable (@pxref{Constant Size}), +write a program to read election data, where each record represents +one voter's votes. Come up with a way to define which columns are +associated with each ballot item, and print the total votes, +including abstentions, for each item. + +@item +@ref{Plain Getline}, presented a program to remove C-style +comments (@samp{/* @dots{} */}) from the input. That program +does not work if one comment ends on one line and another one +starts later on the same line. +Write a program that does handle multiple comments on the line. + +@end enumerate + @node Printing @chapter Printing Output @@ -8248,6 +8259,7 @@ and discusses the @code{close()} built-in function. descriptors. * Close Files And Pipes:: Closing Input and Output Files and Pipes. * Output Summary:: Output summary. +* Output exercises:: Exercises. @end menu @node Print @@ -8425,16 +8437,6 @@ The following example prints the first and second fields of each input record, separated by a semicolon, with a blank line added after each newline: -@ignore -Exercise, -Rewrite the -@example -awk 'BEGIN @{ print "Month Crates" - print "----- ------" @} - @{ print $1, " ", $2 @}' inventory-shipped -@end example -program by using a new value of @code{OFS}. -@end ignore @example $ @kbd{awk 'BEGIN @{ OFS = ";"; ORS = "\n\n" @}} @@ -8996,12 +8998,6 @@ awk 'BEGIN @{ format = "%-10s %s\n" @{ printf format, $1, $2 @}' mail-list @end example -@c !!! exercise -At this point, it would be a worthwhile exercise to use the -@code{printf} statement to line up the headings and table data for the -@file{inventory-shipped} example that was covered earlier in the @value{SECTION} -on the @code{print} statement -(@pxref{Print}). @c ENDOFRANGE printfs @node Redirection @@ -9352,7 +9348,6 @@ Note the use of quotes around the @value{FN}. Like any other redirection, the value must be a string. It is a common error to omit the quotes, which leads to confusing results. -@c Exercise: What does it do? :-) Finally, using the @code{close()} function on a @value{FN} of the form @code{"/dev/fd/@var{N}"}, for file descriptor numbers @@ -9668,6 +9663,35 @@ communications. @end itemize +@node Output exercises +@section Exercises + +@enumerate +@item +Rewrite the program: + +@example +awk 'BEGIN @{ print "Month Crates" + print "----- ------" @} + @{ print $1, " ", $2 @}' inventory-shipped +@end example + +@noindent +from @ref{Output Separators}, by using a new value of @code{OFS}. + +@item +Use the @code{printf} statement to line up the headings and table data +for the @file{inventory-shipped} example that was covered in @ref{Print}. + +@item +What happens if you forget the double quotes when redirecting +output, as follows: + +@example +BEGIN @{ print "Serious error detected!" > /dev/stderr @} +@end example + +@end enumerate @c ENDOFRANGE prnt @@ -19316,6 +19340,7 @@ comparisons use only lowercase letters. * Group Functions:: Functions for getting group information. * Walking Arrays:: A function to walk arrays of arrays. * Library Functions Summary:: Summary of library functions. +* Library exercises:: Exercises. @end menu @node Library Names @@ -20447,46 +20472,6 @@ the end of the command-line arguments. Note that the test in the condition of the @code{for} loop uses the @samp{<=} operator, not @samp{<}. -As an exercise, you might consider whether this same problem can -be solved without relying on @command{gawk}'s @code{ARGIND} variable. - -As a second exercise, revise this code to handle the case where -an intervening value in @code{ARGV} is a variable assignment. - -@ignore -# zerofile2.awk --- same thing, portably - -BEGIN @{ - ARGIND = Argind = 0 - for (i = 1; i < ARGC; i++) - Fnames[ARGV[i]]++ - -@} -FNR == 1 @{ - while (ARGV[ARGIND] != FILENAME) - ARGIND++ - Seen[FILENAME]++ - if (Seen[FILENAME] == Fnames[FILENAME]) - do - ARGIND++ - while (ARGV[ARGIND] != FILENAME) -@} -ARGIND > Argind + 1 @{ - for (Argind++; Argind < ARGIND; Argind++) - zerofile(ARGV[Argind], Argind) -@} -ARGIND != Argind @{ - Argind = ARGIND -@} -END @{ - if (ARGIND < ARGC - 1) - ARGIND = ARGC - 1 - if (ARGIND > Argind) - for (Argind++; Argind <= ARGIND; Argind++) - zerofile(ARGV[Argind], Argind) -@} -@end ignore - @node Ignoring Assigns @subsection Treating Assignments as @value{FFN}s @@ -21695,21 +21680,6 @@ $ @kbd{gawk -f walk_array.awk} @print{} a[3] = 3 @end example -@c exercise! -Walking an array and processing each element is a general-purpose -operation. You might want to consider generalizing the @code{walk_array()} -function by adding an additional parameter named @code{process}. - -Then, inside the loop, instead of simply printing the array element's -index and value, use the indirect function call syntax -(@pxref{Indirect Calls}) on @code{process}, passing it the index -and the value. - -When calling @code{walk_array()}, you would pass the name of a user-defined -function that expects to receive an index and a value, and then processes -the element. - - @c ENDOFRANGE libfgdata @c ENDOFRANGE flibgdata @c ENDOFRANGE gdatar @@ -21758,6 +21728,72 @@ A simple function to traverse an array of arrays to any depth. @end itemize +@node Library exercises +@section Exercises + +@enumerate +@item +In @ref{Empty Files}, we presented the @file{zerofile.awk} program, +which made use of @command{gawk}'s @code{ARGIND} variable. Can this +problem be solved without relying on @code{ARGIND}? If so, how? + +@ignore +# zerofile2.awk --- same thing, portably + +BEGIN @{ + ARGIND = Argind = 0 + for (i = 1; i < ARGC; i++) + Fnames[ARGV[i]]++ + +@} +FNR == 1 @{ + while (ARGV[ARGIND] != FILENAME) + ARGIND++ + Seen[FILENAME]++ + if (Seen[FILENAME] == Fnames[FILENAME]) + do + ARGIND++ + while (ARGV[ARGIND] != FILENAME) +@} +ARGIND > Argind + 1 @{ + for (Argind++; Argind < ARGIND; Argind++) + zerofile(ARGV[Argind], Argind) +@} +ARGIND != Argind @{ + Argind = ARGIND +@} +END @{ + if (ARGIND < ARGC - 1) + ARGIND = ARGC - 1 + if (ARGIND > Argind) + for (Argind++; Argind <= ARGIND; Argind++) + zerofile(ARGV[Argind], Argind) +@} +@end ignore + +@item +As a related challenge, revise that code to handle the case where +an intervening value in @code{ARGV} is a variable assignment. + +@item +@ref{Walking Arrays}, presented a function that walked a multidimensional +array to print it out. However, walking an array and processing +each element is a general-purpose operation. Generalize the +@code{walk_array()} function by adding an additional parameter named +@code{process}. + +Then, inside the loop, instead of printing the array element's index and +value, use the indirect function call syntax (@pxref{Indirect Calls}) +on @code{process}, passing it the index and the value. + +When calling @code{walk_array()}, you would pass the name of a +user-defined function that expects to receive an index and a value, +and then processes the element. + +Test your new version by printing the array; you should end up with +output identical to that of the original version. + +@end enumerate @c ENDOFRANGE flib @c ENDOFRANGE fudlib -- cgit v1.2.3 From 7e29c49a236619b84c20ba8c9f5361feba063e21 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 17 Jun 2014 20:30:12 +0300 Subject: Finish exercises, update chapter 15, menus. Update NEWS. --- NEWS | 9 + doc/ChangeLog | 6 + doc/gawk.info | 2780 ++++++++++++++++++++++++++----------------------------- doc/gawk.texi | 2022 ++++++++++++++++++---------------------- doc/gawktexi.in | 2022 ++++++++++++++++++---------------------- 5 files changed, 3084 insertions(+), 3755 deletions(-) diff --git a/NEWS b/NEWS index 423a46f0..21cda157 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,15 @@ are permitted in any medium without royalty provided the copyright notice and this notice are preserved. +Changes from 4.1.1 to 4.1.2 +--------------------------- + +1. The manual has been considerably improved. + - Thoroughly reviewed and updated. + - Chapter 15 on MPFR reworked. + - Summary sections added to all chapters. + - Exercises added in several chapters. + Changes from 4.1.0 to 4.1.1 --------------------------- diff --git a/doc/ChangeLog b/doc/ChangeLog index 74431336..8da64d31 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,9 @@ +2014-06-17 Arnold D. Robbins + + * gawktexi.in: Finish adding exerices. + Rework chapter 15 on floating point and MPFR. + Spell check. Fix menues. + 2014-06-16 Arnold D. Robbins * gawktexi.in: Start adding exercises. diff --git a/doc/gawk.info b/doc/gawk.info index 6f84e273..0fb3d400 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -224,6 +224,8 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) * Read Timeout:: Reading input with a timeout. * Command line directories:: What happens if you put a directory on the command line. +* Input Summary:: Input summary. +* Input Exercises:: Exercises. * Print:: The `print' statement. * Print Examples:: Simple examples of `print' statements. @@ -247,6 +249,8 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) * Special Caveats:: Things to watch out for. * Close Files And Pipes:: Closing Input and Output Files and Pipes. +* Output Summary:: Output summary. +* Output exercises:: Exercises. * Values:: Constants, Variables, and Regular Expressions. * Constants:: String, numeric and regexp constants. @@ -289,6 +293,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) * Function Calls:: A function call is an expression. * Precedence:: How various operators nest. * Locales:: How the locale affects things. +* Expressions Summary:: Expressions summary. * Pattern Overview:: What goes into a pattern. * Regexp Patterns:: Using regexps as patterns. * Expression Patterns:: Any expression can be used as a @@ -335,6 +340,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) gives you information. * ARGC and ARGV:: Ways to use `ARGC' and `ARGV'. +* Pattern Action Summary:: Patterns and Actions summary. * Array Basics:: The basics of arrays. * Array Intro:: Introduction to Arrays * Reference to Elements:: How to examine one element of an @@ -357,6 +363,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) `awk'. * Multiscanning:: Scanning multidimensional arrays. * Arrays of Arrays:: True multidimensional arrays. +* Arrays Summary:: Summary of arrays. * Built-in:: Summarizes the built-in functions. * Calling Built-in:: How to call built-in functions. * Numeric Functions:: Functions that work with numbers, @@ -391,6 +398,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) runtime. * Indirect Calls:: Choosing the function to call at runtime. +* Functions Summary:: Summary of functions. * Library Names:: How to best name private global variables in library functions. * General Functions:: Functions that are of general use. @@ -425,6 +433,8 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) * Group Functions:: Functions for getting group information. * Walking Arrays:: A function to walk arrays of arrays. +* Library Functions Summary:: Summary of library functions. +* Library exercises:: Exercises. * Running Examples:: How to run these examples. * Clones:: Clones of common utilities. * Cut Program:: The `cut' utility. @@ -454,6 +464,8 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) * Anagram Program:: Finding anagrams from a dictionary. * Signature Program:: People do amazing things with too much time on their hands. +* Programs Summary:: Summary of programs. +* Programs Exercises:: Exercises. * Nondecimal Data:: Allowing nondecimal input data. * Array Sorting:: Facilities for controlling array traversal and sorting arrays. @@ -465,6 +477,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) * TCP/IP Networking:: Using `gawk' for network programming. * Profiling:: Profiling your `awk' programs. +* Advanced Features Summary:: Summary of advanced features. * I18N and L10N:: Internationalization and Localization. * Explaining gettext:: How GNU `gettext' works. * Programmer i18n:: Features for the programmer. @@ -476,6 +489,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) * I18N Example:: A simple i18n example. * Gawk I18N:: `gawk' is also internationalized. +* I18N Summary:: Summary of I18N stuff. * Debugging:: Introduction to `gawk' debugger. * Debugging Concepts:: Debugging in General. @@ -494,31 +508,23 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) * Miscellaneous Debugger Commands:: Miscellaneous Commands. * Readline Support:: Readline support. * Limitations:: Limitations and future plans. -* General Arithmetic:: An introduction to computer - arithmetic. -* Floating Point Issues:: Stuff to know about floating-point - numbers. -* String Conversion Precision:: The String Value Can Lie. -* Unexpected Results:: Floating Point Numbers Are Not - Abstract Numbers. -* POSIX Floating Point Problems:: Standards Versus Existing Practice. -* Integer Programming:: Effective integer programming. -* Floating-point Programming:: Effective Floating-point Programming. -* Floating-point Representation:: Binary floating-point representation. -* Floating-point Context:: Floating-point context. -* Rounding Mode:: Floating-point rounding mode. -* Gawk and MPFR:: How `gawk' provides - arbitrary-precision arithmetic. -* Arbitrary Precision Floats:: Arbitrary Precision Floating-point - Arithmetic with `gawk'. -* Setting Precision:: Setting the working precision. -* Setting Rounding Mode:: Setting the rounding mode. -* Floating-point Constants:: Representing floating-point constants. -* Changing Precision:: Changing the precision of a number. -* Exact Arithmetic:: Exact arithmetic with floating-point - numbers. +* Debugging Summary:: Debugging summary. +* Computer Arithmetic:: A quick intro to computer math. +* Math Definitions:: Defining terms used. +* MPFR features:: The MPFR features in `gawk'. +* FP Math Caution:: Things to know. +* Inexactness of computations:: Floating point math is not exact. +* Inexact representation:: Numbers are not exactly represented. +* Comparing FP Values:: How to compare floating point values. +* Errors accumulate:: Errors get bigger as they go. +* Getting Accuracy:: Getting more accuracy takes some work. +* Try To Round:: Add digits and round. +* Setting precision:: How to set the precision. +* Setting the rounding mode:: How to set the rounding mode. * Arbitrary Precision Integers:: Arbitrary Precision Integer Arithmetic with `gawk'. +* POSIX Floating Point Problems:: Standards Versus Existing Practice. +* Floating point summary:: Summary of floating point discussion. * Extension Intro:: What is an extension. * Plugin License:: A note about licensing. * Extension Mechanism Outline:: An outline of how it works. @@ -580,6 +586,8 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) * Extension Sample Time:: An interface to `gettimeofday()' and `sleep()'. * gawkextlib:: The `gawkextlib' project. +* Extension summary:: Extension summary. +* Extension Exercises:: Exercises. * V7/SVR3.1:: The major changes between V7 and System V Release 3.1. * SVR4:: Minor changes between System V @@ -596,6 +604,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) ranges. * Contributors:: The major contributors to `gawk'. +* History summary:: History summary. * Gawk Distribution:: What is in the `gawk' distribution. * Getting:: How to get the distribution. @@ -634,6 +643,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) * Bugs:: Reporting Problems and Bugs. * Other Versions:: Other freely available `awk' implementations. +* Installation summary:: Summary of installation. * Compatibility Mode:: How to disable certain `gawk' extensions. * Additions:: Making Additions To `gawk'. @@ -654,6 +664,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) * Extension Other Design Decisions:: Some other design decisions. * Extension Future Growth:: Some room for future growth. * Old Extension Mechanism:: Some compatibility for old extensions. +* Notes summary:: Summary of implementation notes. * Basic High Level:: The high level view. * Basic Data Typing:: A very quick intro to data types. @@ -1968,9 +1979,8 @@ File: gawk.info, Node: Two Rules, Next: More Complex, Prev: Very Simple, Up: The `awk' utility reads the input files one line at a time. For each line, `awk' tries the patterns of each of the rules. If several -patterns match, then several actions execture in the order in which -they appear in the `awk' program. If no patterns match, then no -actions run. +patterns match, then several actions execute in the order in which they +appear in the `awk' program. If no patterns match, then no actions run. After processing all the rules that match the line (and perhaps there are none), `awk' reads the next line. (However, *note Next @@ -2529,7 +2539,7 @@ The following list describes options mandated by the POSIX standard: `--bignum' Force arbitrary precision arithmetic on numbers. This option has no effect if `gawk' is not compiled to use the GNU MPFR and MP - libraries (*note Gawk and MPFR::). + libraries (*note Arbitrary Precision Arithmetic::). `-n' `--non-decimal-data' @@ -3985,7 +3995,7 @@ File: gawk.info, Node: Regexp Summary, Prev: Computed Regexps, Up: Regexp * Regexp operators provide grouping, alternation and repetition. - * Bracket expressions give you a shorthand for specifyings sets of + * Bracket expressions give you a shorthand for specifying sets of characters that can match at a particular point in a regexp. Within bracket expressions, POSIX character classes let you specify certain groups of characters in a locale-independent fashion. @@ -5912,7 +5922,7 @@ File: gawk.info, Node: Input Summary, Next: Input Exercises, Prev: Command li * `PROCINFO["FS"]' can be used to see how fields are being split. - * Use `getline' in its varioius forms to read additional records, + * Use `getline' in its various forms to read additional records, from the default input stream, from a file, or from a pipe or co-process. @@ -5977,7 +5987,7 @@ function. descriptors. * Close Files And Pipes:: Closing Input and Output Files and Pipes. * Output Summary:: Output summary. -* Output exercises:: Exercises. +* Output exercises:: Exercises.  File: gawk.info, Node: Print, Next: Print Examples, Up: Printing @@ -6296,7 +6306,7 @@ width. Here is a list of the format-control letters: representing negative infinity are formatted as `-inf' or `-infinity', and positive infinity as `inf' and `infinity'. The special "not a number" value formats as `-nan' or `nan' (*note - General Arithmetic::). + Math Definitions::). `%F' Like `%f' but the infinity and "not a number" values are spelled @@ -6910,7 +6920,7 @@ file or command, or the next `print' or `printf' to that file or command, reopens the file or reruns the command. Because the expression that you use to close a file or pipeline must exactly match the expression used to open the file or run the command, it is good -practice to use a valueiable to store the file name or command. The +practice to use a variable to store the file name or command. The previous example becomes the following: sortcom = "sort -r names" @@ -10016,12 +10026,12 @@ description of each variable.) `PREC #' The working precision of arbitrary precision floating-point - numbers, 53 bits by default (*note Setting Precision::). + numbers, 53 bits by default (*note Setting precision::). `ROUNDMODE #' The rounding mode to use for arbitrary precision arithmetic on numbers, by default `"N"' (`roundTiesToEven' in the IEEE 754 - standard; *note Setting Rounding Mode::). + standard; *note Setting the rounding mode::). ``RS'' The input record separator. Its default value is a string @@ -10257,8 +10267,8 @@ Options::), they are not special. The following additional elements in the array are available to provide information about the MPFR and GMP libraries if your - version of `gawk' supports arbitrary precision numbers (*note Gawk - and MPFR::): + version of `gawk' supports arbitrary precision numbers (*note + Arbitrary Precision Arithmetic::): `PROCINFO["mpfr_version"]' The version of the GNU MPFR library. @@ -14050,7 +14060,7 @@ File: gawk.info, Node: Functions Summary, Prev: Indirect Calls, Up: Functions form of additional arguments. * Functions accept zero or more arguments and return a value. The - expressions that provide the argument values are comnpletely + expressions that provide the argument values are completely evaluated before the function is called. Order of evaluation is not defined. The return value can be ignored. @@ -14061,7 +14071,7 @@ File: gawk.info, Node: Functions Summary, Prev: Indirect Calls, Up: Functions * User-defined functions provide important capabilities but come with some syntactic inelegancies. In a function call, there cannot be any space between the function name and the opening left - parethesis of the argument list. Also, there is no provision for + parenthesis of the argument list. Also, there is no provision for local variables, so the convention is to add extra parameters, and to separate them visually from the real parameters by extra whitespace. @@ -15794,7 +15804,7 @@ 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:johnny,jay,arsenio + tvpeople:*:101:johny,jay,arsenio tvpeople:*:101:david,conan,tom,joan For this reason, `_gr_init()' looks to see if a group name or group @@ -16009,6 +16019,7 @@ Library Functions::. * Clones:: Clones of common utilities. * Miscellaneous Programs:: Some interesting `awk' programs. * Programs Summary:: Summary of programs. +* Programs Exercises:: Exercises.  File: gawk.info, Node: Running Examples, Next: Clones, Up: Sample Programs @@ -17168,7 +17179,7 @@ lines, words, and characters to zero, and saves the current file name in } The `endfile()' function adds the current file's numbers to the -running totals of lines, words, and characters.(1) It then prints out +running totals of lines, words, and characters. It then prints out those numbers for the file that was just read. It relies on `beginfile()' to reset the numbers for the following data file: @@ -17187,7 +17198,7 @@ those numbers for the file that was just read. It relies on } There is one rule that is executed for each line. It adds the length -of the record, plus one, to `chars'.(2) Adding one plus the record +of the record, plus one, to `chars'.(1) Adding one plus the record length is needed because the newline character separating records (the value of `RS') is not part of the record itself, and thus not included in its length. Next, `lines' is incremented for each line read, and @@ -17217,11 +17228,7 @@ in its length. Next, `lines' is incremented for each line read, and ---------- Footnotes ---------- - (1) `wc' can't just use the value of `FNR' in `endfile()'. If you -examine the code in *note Filetrans Function::, you will see that `FNR' -has already been reset by the time `endfile()' is called. - - (2) Since `gawk' understands multibyte locales, this code counts + (1) Since `gawk' understands multibyte locales, this code counts characters, not bytes.  @@ -17947,7 +17954,7 @@ function (*note String Functions::). The `@' symbol is used as the separator character. Each element of `a' that is empty indicates two successive `@' symbols in the original line. For each two empty elements (`@@' in the original file), we have to add a single `@' -symbol back in.(1) +symbol back in. When the processing of the array is finished, `join()' is called with the value of `SUBSEP' (*note Multidimensional::), to rejoin the @@ -18018,11 +18025,6 @@ closing the open file: close(curfile) } - ---------- Footnotes ---------- - - (1) This program was written before `gawk' had the `gensub()' -function. Consider how you might use it to simplify the code. -  File: gawk.info, Node: Simple Sed, Next: Igawk Program, Prev: Extract Program, Up: Miscellaneous Programs @@ -18472,26 +18474,6 @@ manipulation using the shell than it is in `awk'. Finally, `igawk' shows that it is not always necessary to add new features to a program; they can often be layered on top. - As an additional example of this, consider the idea of having two -files in a directory in the search path: - -`default.awk' - This file contains a set of default library functions, such as - `getopt()' and `assert()'. - -`site.awk' - This file contains library functions that are specific to a site or - installation; i.e., locally developed functions. Having a - separate file allows `default.awk' to change with new `gawk' - releases, without requiring the system administrator to update it - each time by adding the local functions. - - One user suggested that `gawk' be modified to automatically read -these files upon startup. Instead, it would be very simple to modify -`igawk' to do this. Since `igawk' can process nested `@include' -directives, `default.awk' could simply contain `@include' statements -for the desired library functions. - ---------- Footnotes ---------- (1) Fully explaining the `sh' language is beyond the scope of this @@ -18621,7 +18603,7 @@ truly desperate to understand it, see Chris Johansen's explanation, which is embedded in the Texinfo source file for this Info file.)  -File: gawk.info, Node: Programs Summary, Prev: Miscellaneous Programs, Up: Sample Programs +File: gawk.info, Node: Programs Summary, Next: Programs Exercises, Prev: Miscellaneous Programs, Up: Sample Programs 11.4 Summary ============ @@ -18650,6 +18632,96 @@ File: gawk.info, Node: Programs Summary, Prev: Miscellaneous Programs, Up: Sa words in text, printing mailing labels, and finding anagrams. + +File: gawk.info, Node: Programs Exercises, Prev: Programs Summary, Up: Sample Programs + +11.5 Exercises +============== + + 1. Rewrite `cut.awk' (*note Cut Program::) using `split()' with `""' + as the seperator. + + 2. In *note Egrep Program::, we mentioned that `egrep -i' could be + simulated in versions of `awk' without `IGNORECASE' by using + `tolower()' on the line and the pattern. In a footnote there, we + also mentioned that this solution has a bug: the translated line is + output, and not the original one. Fix this problem. + + 3. The POSIX version of `id' takes options that control which + information is printed. Modify the `awk' version (*note Id + Program::) to accept the same arguments and perform in the same + way. + + 4. The `split.awk' program (*note Split Program::) uses the `chr()' + and `ord()' functions to move through the letters of the alphabet. + Modify the program to instead use only the `awk' built-in + functions, such as `index()' and `substr()'. + + 5. The `split.awk' program (*note Split Program::) assumes that + letters are contiguous in the character set, which isn't true for + EBCDIC systems. Fix this problem. + + 6. Why can't the `wc.awk' program (*note Wc Program::) just use the + value of `FNR' in `endfile()'? Hint: examine the code in *note + Filetrans Function::. + + 7. Manipulation of individual characters in the `translate' program + (*note Translate Program::) is painful using standard `awk' + functions. Given that `gawk' can split strings into individual + characters using `""' as the separator, how might you use this + feature to simplify the program? + + 8. The `extract.awk' program (*note Extract Program::) was written + before `gawk' had the `gensub()' function. Use it to simplify the + code. + + 9. Compare the performance of the `awksed.awk' program (*note Simple + Sed::) with the more straightforward: + + BEGIN { + pat = ARGV[1] + repl = ARGV[2] + ARGV[1] = ARGV[2] = "" + } + + { gsub(pat, repl); print } + + 10. What are the advantages and disadvantages of `awksed.awk' versus + the real `sed' utility? + + 11. In *note Igawk Program::, we mentioned that not trying to save the + line read with `getline' in the `pathto()' function when testing + for the file's accessibility for use with the main program + simplifies things considerably. What problem does this engender + though? + + 12. As an additional example of the idea that it is not always + necessary to add new features to a program, consider the idea of + having two files in a directory in the search path: + + `default.awk' + This file contains a set of default library functions, such + as `getopt()' and `assert()'. + + `site.awk' + This file contains library functions that are specific to a + site or installation; i.e., locally developed functions. + Having a separate file allows `default.awk' to change with + new `gawk' releases, without requiring the system + administrator to update it each time by adding the local + functions. + + One user suggested that `gawk' be modified to automatically read + these files upon startup. Instead, it would be very simple to + modify `igawk' to do this. Since `igawk' can process nested + `@include' directives, `default.awk' could simply contain + `@include' statements for the desired library functions. Make + this change. + + 13. Modify `anagram.awk' (*note Anagram Program::), to avoid the use + of the external `sort' utility. + +  File: gawk.info, Node: Advanced Features, Next: Internationalization, Prev: Sample Programs, Up: Top @@ -20167,7 +20239,7 @@ File: gawk.info, Node: I18N Summary, Prev: Gawk I18N, Up: Internationalizatio * You mark a program's strings for translation by preceding them with an underscore. Once that is done, the strings are extracted into a - `.pot' file. This file is copied for each langauge into a `.po' + `.pot' file. This file is copied for each language into a `.po' file, and the `.po' files are compiled into `.gmo' files for use at runtime. @@ -21266,358 +21338,285 @@ File: gawk.info, Node: Arbitrary Precision Arithmetic, Next: Dynamic Extension 15 Arithmetic and Arbitrary Precision Arithmetic with `gawk' ************************************************************ - There's a credibility gap: We don't know how much of the - computer's answers to believe. Novice computer users solve this - problem by implicitly trusting in the computer as an infallible - authority; they tend to believe that all digits of a printed - answer are significant. Disillusioned computer users have just the - opposite approach; they are constantly afraid that their answers - are almost meaningless.(1) -- Donald Knuth - - This major node discusses issues that you may encounter when -performing arithmetic. It begins by discussing some of the general -attributes of computer arithmetic, along with how this can influence -what you see when running `awk' programs. This discussion applies to -all versions of `awk'. - - The major node then moves on to describe "arbitrary precision -arithmetic", a feature which is specific to `gawk'. +This major node introduces some basic concepts relating to how +computers do arithmetic and briefly lists the features in `gawk' for +performing arbitrary precision floating point computations. It then +proceeds to describe floating-point arithmetic, which is what `awk' +uses for all its computations, including a discussion of arbitrary +precision floating point arithmetic, which is a feature available only +in `gawk'. It continues on to present arbitrary precision integers, and +concludes with a description of some points where `gawk' and the POSIX +standard are not quite in agreement. * Menu: -* General Arithmetic:: An introduction to computer arithmetic. -* Floating-point Programming:: Effective Floating-point Programming. -* Gawk and MPFR:: How `gawk' provides - arbitrary-precision arithmetic. -* Arbitrary Precision Floats:: Arbitrary Precision Floating-point Arithmetic - with `gawk'. -* Arbitrary Precision Integers:: Arbitrary Precision Integer Arithmetic with - `gawk'. - - ---------- Footnotes ---------- - - (1) Donald E. Knuth. `The Art of Computer Programming'. Volume 2, -`Seminumerical Algorithms', third edition, 1998, ISBN 0-201-89683-4, p. -229. +* Computer Arithmetic:: A quick intro to computer math. +* Math Definitions:: Defining terms used. +* MPFR features:: The MPFR features in `gawk'. +* FP Math Caution:: Things to know. +* Arbitrary Precision Integers:: Arbitrary Precision Integer Arithmetic with + `gawk'. +* POSIX Floating Point Problems:: Standards Versus Existing Practice. +* Floating point summary:: Summary of floating point discussion.  -File: gawk.info, Node: General Arithmetic, Next: Floating-point Programming, Up: Arbitrary Precision Arithmetic +File: gawk.info, Node: Computer Arithmetic, Next: Math Definitions, Up: Arbitrary Precision Arithmetic 15.1 A General Description of Computer Arithmetic ================================================= -Within computers, there are two kinds of numeric values: "integers" and -"floating-point". In school, integer values were referred to as -"whole" numbers--that is, numbers without any fractional part, such as -1, 42, or -17. The advantage to integer numbers is that they represent -values exactly. The disadvantage is that their range is limited. On -most systems, this range is -2,147,483,648 to 2,147,483,647. However, -many systems now support a range from -9,223,372,036,854,775,808 to -9,223,372,036,854,775,807. - - Integer values come in two flavors: "signed" and "unsigned". Signed -values may be negative or positive, with the range of values just -described. Unsigned values are always positive. On most systems, the -range is from 0 to 4,294,967,295. However, many systems now support a -range from 0 to 18,446,744,073,709,551,615. - - Floating-point numbers represent what are called "real" numbers; -i.e., those that do have a fractional part, such as 3.1415927. The -advantage to floating-point numbers is that they can represent a much -larger range of values. The disadvantage is that there are numbers -that they cannot represent exactly. `awk' uses "double precision" -floating-point numbers, which can hold more digits than "single -precision" floating-point numbers. - - There a several important issues to be aware of, described next. - -* Menu: - -* Floating Point Issues:: Stuff to know about floating-point numbers. -* Integer Programming:: Effective integer programming. - - -File: gawk.info, Node: Floating Point Issues, Next: Integer Programming, Up: General Arithmetic - -15.1.1 Floating-Point Number Caveats ------------------------------------- - -This minor node describes some of the issues involved in using -floating-point numbers. - - 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 -if you are interested in the details, but it does require a background -in computer science. +Until now, we have worked with data as either numbers or strings. +Ultimately, however, computers represent everything in terms of "binary +digits", or "bits". A decimal digit can take on any of 10 values: zero +through nine. A binary digit can take on any of two values, zero or +one. Using binary, computers (and computer software) can represent and +manipulate numerical and character data. In general, the more bits you +can use to represent a particular thing, the greater the range of +possible values it can take on. + + Modern computers support at least two, and often more, ways to do +arithmetic. Each kind of arithmetic uses a different representation +(organization of the bits) for the numbers. The kinds of arithmetic +that interest us are: + +Decimal arithmetic + This is the kind of arithmetic you learned in elementary school, + using 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 need a special software library to provide access to + these instructions. There are also libraries that do decimal + arithmetic entirely in software. + + Despite the fact that some users expect `gawk' to be performing + decimal arithmetic,(1) it does not do so. + +Integer arithmetic + In school, integer values were referred to as "whole" numbers--that + is, numbers without any fractional part, such as 1, 42, or -17. + The advantage to integer numbers is that they represent values + exactly. The disadvantage is that their range is limited. + + In computers, integer values come in two flavors: "signed" and + "unsigned". Signed values may be negative or positive, whereas + unsigned values are always positive (that is, 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 floating point arithmetic. + +Floating point arithmetic + Floating-point numbers represent what were called in school "real" + numbers; i.e., those that have a fractional part, such as + 3.1415927. The advantage to floating-point numbers is that they + can represent a much larger range of values than can integers. + The disadvantage is that there are numbers that they cannot + represent exactly. + + Modern systems support floating point arithmetic in hardware, with + a limited range of values. There are software libraries that allow + the use of arbitrary precision floating point calculations. + + POSIX `awk' uses "double precision" floating-point numbers, which + can hold more digits than "single precision" floating-point + numbers. `gawk' has facilities for performing arbitrary precision + floating point arithmetic, which we describe in more detail + shortly. + + Computers work with integer and floating point values of different +ranges. Integer values are usually either 32 or 64 bits in size. Single +precision floating point values occupy 32 bits, whereas double precision +floating point values occupy 64 bits. Floating point values are always +signed. The possible ranges of values are shown in the following table. + +Numeric representation Miniumum value Maximum value +--------------------------------------------------------------------------- +32-bit signed integer -2,147,483,648 2,147,483,647 +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) -* Menu: + ---------- Footnotes ---------- -* String Conversion Precision:: The String Value Can Lie. -* Unexpected Results:: Floating Point Numbers Are Not Abstract - Numbers. -* POSIX Floating Point Problems:: Standards Versus Existing Practice. + (1) We don't know why they expect this, but they do.  -File: gawk.info, Node: String Conversion Precision, Next: Unexpected Results, Up: Floating Point Issues +File: gawk.info, Node: Math Definitions, Next: MPFR features, Prev: Computer Arithmetic, Up: Arbitrary Precision Arithmetic -15.1.1.1 The String Value Can Lie -................................. - -Internally, `awk' keeps both the numeric value (double precision -floating-point) and the string value for a variable. Separately, `awk' -keeps track of what type the variable has (*note Typing and -Comparison::), which plays a role in how variables are used in -comparisons. +15.2 Other Stuff To Know +======================== - It is important to note that the string value for a number may not -reflect the full value (all the digits) that the numeric value actually -contains. The following program, `values.awk', illustrates this: +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. - { - sum = $1 + $2 - # see it for what it is - printf("sum = %.12g\n", sum) - # use CONVFMT - a = "<" sum ">" - print "a =", a - # use OFMT - print "sum =", sum - } +"Accuracy" + A floating-point calculation's accuracy is how close it comes to + the real (paper and pencil) value. -This program shows the full value of the sum of `$1' and `$2' using -`printf', and then prints the string values obtained from both -automatic conversion (via `CONVFMT') and from printing (via `OFMT'). +"Error" + The difference between what the result of a computation "should be" + and what it actually is. It is best to minimize error as much as + possible. - Here is what happens when the program is run: +"Exponent" + The order of magnitude of a value; some number of bits in a + floating-point value store the exponent. - $ echo 3.654321 1.2345678 | awk -f values.awk - -| sum = 4.8888888 - -| a = <4.88889> - -| sum = 4.88889 +"Inf" + A special value representing infinity. Operations involving another + number and infinity produce infinity. - This makes it clear that the full numeric value is different from -what the default string representations show. +"NaN" + "Not A Number." A special value indicating a result that can't + happen in real math, but that can happen in floating-point + computations. - `CONVFMT''s default value is `"%.6g"', which yields a value with at -most six significant digits. For some applications, you might want to -change it to specify more precision. On most modern machines, most of -the time, 17 digits is enough to capture a floating-point number's -value exactly.(1) +"Normalized" + How the significand (see later in this list) is usually stored. The + value is adjusted so that the first bit is one, and then that + leading one is assumed instead of physically stored. This + provides one extra bit of precision. - ---------- Footnotes ---------- +"Precision" + The number of bits used to represent a floating-point number. The + more bits, the more digits you can represent. Binary and decimal + precisions are related approximately, according to the formula: - (1) Pathological cases can require up to 752 digits (!), but we -doubt that you need to worry about this. + PREC = 3.322 * DPS - -File: gawk.info, Node: Unexpected Results, Next: POSIX Floating Point Problems, Prev: String Conversion Precision, Up: Floating Point Issues + Here, PREC denotes the binary precision (measured in bits) and DPS + (short for decimal places) is the decimal digits. -15.1.1.2 Floating Point Numbers Are Not Abstract Numbers -........................................................ +"Rounding mode" + How numbers are rounded up or down when necessary. More details + are provided later. -Unlike numbers in the abstract sense (such as what you studied in high -school or college arithmetic), numbers stored in computers are limited -in certain ways. They cannot represent an infinite number of digits, -nor can they always represent things exactly. In particular, -floating-point numbers cannot always represent values exactly. Here is -an example: +"Significand" + A floating point value consists the significand multiplied by 10 + to the power of the exponent. For example, in `1.2345e67', the + significand is `1.2345'. - $ awk '{ printf("%010d\n", $1 * 100) }' - 515.79 - -| 0000051579 - 515.80 - -| 0000051579 - 515.81 - -| 0000051580 - 515.82 - -| 0000051582 - Ctrl-d +"Stability" + From the Wikipedia article on numerical stability + (http://en.wikipedia.org/wiki/Numerical_stability): "Calculations + that can be proven not to magnify approximation errors are called + "numerically stable"." -This shows that some values can be represented exactly, whereas others -are only approximated. This is not a "bug" in `awk', but simply an -artifact of how computers represent numbers. + See the Wikipedia article on accuracy and precision +(http://en.wikipedia.org/wiki/Accuracy_and_precision) for more +information on some of those terms. - NOTE: It cannot be emphasized enough that the behavior just - described is fundamental to modern computers. You will see this - kind of thing happen in _any_ programming language using hardware - floating-point numbers. It is _not_ a bug in `gawk', nor is it - something that can be "just fixed." + On modern systems, floating-point hardware uses the representation +and operations defined by the IEEE 754 standard. Three of the standard +IEEE 754 types are 32-bit single precision, 64-bit double precision and +128-bit quadruple precision. The standard also specifies extended +precision formats to allow greater precisions and larger exponent +ranges. (`awk' uses only the 64-bit double precision format.) - Another peculiarity of floating-point numbers on modern systems is -that they often have more than one representation for the number zero! -In particular, it is possible to represent "minus zero" as well as -regular, or "positive" zero. + *note table-ieee-formats:: lists the precision and exponent field +values for the basic IEEE 754 binary formats: - This example shows that negative and positive zero are distinct -values when stored internally, but that they are in fact equal to each -other, as well as to "regular" zero: +Name Total bits Precision emin emax +--------------------------------------------------------------------------- +Single 32 24 -126 +127 +Double 64 53 -1022 +1023 +Quadruple 128 113 -16382 +16383 - $ gawk 'BEGIN { mz = -0 ; pz = 0 - > printf "-0 = %g, +0 = %g, (-0 == +0) -> %d\n", mz, pz, mz == pz - > printf "mz == 0 -> %d, pz == 0 -> %d\n", mz == 0, pz == 0 - > }' - -| -0 = -0, +0 = 0, (-0 == +0) -> 1 - -| mz == 0 -> 1, pz == 0 -> 1 +Table 15.1: Basic IEEE Format Context Values - It helps to keep this in mind should you process numeric data that -contains negative zero values; the fact that the zero is negative is -noted and can affect comparisons. + NOTE: The precision numbers include the implied leading one that + gives them one extra bit of significand.  -File: gawk.info, Node: POSIX Floating Point Problems, Prev: Unexpected Results, Up: Floating Point Issues - -15.1.1.3 Standards Versus Existing Practice -........................................... - -Historically, `awk' has converted any non-numeric 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 -(base 8) or hexadecimal numbers (base 16). +File: gawk.info, Node: MPFR features, Next: FP Math Caution, Prev: Math Definitions, Up: Arbitrary Precision Arithmetic - Changes in the language of the 2001 and 2004 POSIX standards can be -interpreted to imply that `awk' should support additional features. -These features are: +15.3 Arbitrary Precison Arithmetic Features In `gawk' +===================================================== - * Interpretation of floating point data values specified in - hexadecimal notation (`0xDEADBEEF'). (Note: data values, _not_ - source code constants.) +By default, `gawk' uses the double precision floating point values +supplied by the hardware of the system it runs on. However, if it was +compiled to do, `gawk' uses the GNU MPFR (http://www.mpfr.org) and GNU +MP (http://gmplib.org) (GMP) libraries for arbitrary precision +arithmetic on numbers. You can see if MPFR support is available like +so: - * 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 machine-dependent additional characters after the `nan' and - allow either `inf' or `infinity'. + $ gawk --version + -| GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2) + -| Copyright (C) 1989, 1991-2014 Free Software Foundation. + ... - The first problem is that both of these are clear changes to -historical practice: +(You may see different version numbers than what's shown here. That's +OK; what's important is to see that GNU MPFR and GNU MP are listed in +the output.) - * The `gawk' maintainer feels that supporting hexadecimal floating - point values, in particular, is ugly, and was never intended by the - original designers to be part of the language. + Additionally, there are a few elements available in the `PROCINFO' +array to provide information about the MPFR and GMP libraries (*note +Auto-set::). - * Allowing completely alphabetic strings to have valid numeric - values is also a very severe departure from historical practice. + The MPFR library provides precise control over precisions and +rounding modes, and gives correctly rounded, reproducible, +platform-independent results. With either of the command-line options +`--bignum' or `-M', all floating-point arithmetic operators and numeric +functions can yield results to any desired precision level supported by +MPFR. - The second problem is that the `gawk' maintainer feels that this -interpretation of the standard, which requires 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 -got where you are, but we don't think that that's where you want to be." + Two built-in variables, `PREC' and `ROUNDMODE', provide control over +the working precision and the rounding mode. The precision and the +rounding mode are set globally for every operation to follow. *Note +Auto-set::, for more information. - Recognizing the above 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" -and infinity. + +File: gawk.info, Node: FP Math Caution, Next: Arbitrary Precision Integers, Prev: MPFR features, Up: Arbitrary Precision Arithmetic - 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 -as follows: +15.4 Floating Point Arithmetic: Caveat Emptor! +============================================== - * With the `--posix' command-line option, `gawk' becomes "hands - off." String values are passed directly to the system library's - `strtod()' function, and if it successfully returns a numeric - value, that is what's used.(1) By definition, the results are not - portable across different systems. They are also a little - surprising: + Math class is tough! -- Late 1980's Barbie - $ echo nanny | gawk --posix '{ print $1 + 0 }' - -| nan - $ echo 0xDeadBeef | gawk --posix '{ print $1 + 0 }' - -| 3735928559 + 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. - * Without `--posix', `gawk' interprets the four strings `+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 - floating point is not supported (unless you also use - `--non-decimal-data', which is _not_ recommended). For example: + CAUTION: The material here is purposely general. If you need to do + serious computer arithmetic, you should do some research first, + and not rely just on what we tell you. - $ echo nanny | gawk '{ print $1 + 0 }' - -| 0 - $ echo +nan | gawk '{ print $1 + 0 }' - -| nan - $ echo 0xDeadBeef | gawk '{ print $1 + 0 }' - -| 0 +* Menu: - `gawk' ignores case in the four special values. Thus `+nan' and - `+NaN' are the same. +* Inexactness of computations:: Floating point math is not exact. +* Getting Accuracy:: Getting more accuracy takes some work. +* Try To Round:: Add digits and round. +* Setting precision:: How to set the precision. +* Setting the rounding mode:: How to set the rounding mode. ---------- Footnotes ---------- - (1) You asked for it, you got it. + (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 +if you are interested in the details, but it does require a background +in computer science.  -File: gawk.info, Node: Integer Programming, Prev: Floating Point Issues, Up: General Arithmetic - -15.1.2 Mixing Integers And Floating-point ------------------------------------------ +File: gawk.info, Node: Inexactness of computations, Next: Getting Accuracy, Up: FP Math Caution -As has been mentioned already, `awk' uses hardware double precision -with 64-bit IEEE binary floating-point representation for numbers on -most systems. A large integer like 9,007,199,254,740,997 has a binary -representation that, although finite, is more than 53 bits long; it -must also be rounded to 53 bits. (The details are discussed in *note -Floating-point Representation::.) The biggest integer that can be -stored in a C `double' is usually the same as the largest possible -value of a `double'. If your system `double' is an IEEE 64-bit -`double', this largest possible value is an integer and can be -represented precisely. What more should you know about integers? - - If you want to know what is the largest integer, such that it and -all smaller integers can be stored in 64-bit doubles without losing -precision, then the answer is 2^53. The next representable number is -the even number 2^53 + 2, meaning it is unlikely that you will be able -to make `gawk' print 2^53 + 1 in integer format. The range of integers -exactly representable by a 64-bit double is [-2^53, 2^53]. If you ever -see an integer outside this range in `awk' using 64-bit doubles, you -have reason to be very suspicious about the accuracy of the output. -Here is a simple program with erroneous output: - - $ gawk 'BEGIN { i = 2^53 - 1; for (j = 0; j < 4; j++) print i + j }' - -| 9007199254740991 - -| 9007199254740992 - -| 9007199254740992 - -| 9007199254740994 - - The lesson is to not assume that any large integer printed by `awk' -represents an exact result from your computation, especially if it wraps -around on your screen. - - -File: gawk.info, Node: Floating-point Programming, Next: Gawk and MPFR, Prev: General Arithmetic, Up: Arbitrary Precision Arithmetic - -15.2 Understanding Floating-point Programming -============================================= +15.4.1 Floating Point Arithmetic Is Not Exact +--------------------------------------------- -Numerical programming is an extensive area; if you need to develop -sophisticated numerical algorithms then `gawk' may not be the ideal -tool, and this documentation may not be sufficient. It might require -digesting a book or two(1) to really internalize how to compute with -ideal accuracy and precision, and the result often depends on the -particular application. - - NOTE: A floating-point calculation's "accuracy" is how close it - comes to the real value. This is as opposed to the "precision", - which usually refers to the number of bits used to represent the - number (see the Wikipedia article - (http://en.wikipedia.org/wiki/Accuracy_and_precision) for more - information). - - There are two options for doing floating-point calculations: -hardware floating-point (as used by standard `awk' and the default for -`gawk'), and "arbitrary-precision" floating-point, which is software -based. From this point forward, this major node aims to provide enough -information to understand both, and then will focus on `gawk''s -facilities for the latter.(2) - - Binary floating-point representations and arithmetic are inexact. +Binary floating-point representations and arithmetic are inexact. Simple values like 0.1 cannot be precisely represented using binary floating-point numbers, and the limited precision of floating-point numbers means that slight changes in the order of operations or the @@ -21626,9 +21625,21 @@ matters worse, with arbitrary precision floating-point, you can set the precision before starting a computation, but then you cannot be sure of the number of significant decimal places in the final result. - So, before you start to write any code, you should think more about -what you really want and what's really happening. Consider the two -numbers in the following example: +* Menu: + +* Inexact representation:: Numbers are not exactly represented. +* Comparing FP Values:: How to compare floating point values. +* Errors accumulate:: Errors get bigger as they go. + + +File: gawk.info, Node: Inexact representation, Next: Comparing FP Values, Up: Inexactness of computations + +15.4.1.1 Many Numbers Cannot Be Represented Exactly +................................................... + +So, before you start to write any code, you should think about what you +really want and what's really happening. Consider the two numbers in +the following example: x = 0.875 # 1/2 + 1/4 + 1/8 y = 0.425 @@ -21651,20 +21662,44 @@ 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 previous example, produces an output identical to the input. - Because the underlying representation can be a little bit off from -the exact value, comparing floating-point values to see if they are -exactly equal is generally a bad idea. Here is an example where it -does not work like you expect: + +File: gawk.info, Node: Comparing FP Values, Next: Errors accumulate, Prev: Inexact representation, Up: Inexactness of computations + +15.4.1.2 Be Careful Comparing Values +.................................... + +Because the underlying representation can be a little bit off from the +exact value, comparing floating-point values to see if they are exactly +equal is generally a bad idea. Here is an example where it does not +work like you would expect: $ gawk 'BEGIN { print (0.1 + 12.2 == 12.3) }' -| 0 - The loss of accuracy during a single computation with floating-point + The general wisdom when comparing floating-point values is to see if +they are within some small range of each other (called a "delta", or +"tolerance"). You have to decide how small a delta is important to +you. Code to do this looks something like this: + + delta = 0.00001 # for example + difference = abs(a) - abs(b) # subtract the two values + if (difference < delta) + # all ok + else + # not ok + + +File: gawk.info, Node: Errors accumulate, Prev: Comparing FP Values, Up: Inexactness of computations + +15.4.1.3 Errors Accumulate +.......................... + +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, the error can accumulate and greatly affect the computation itself. -Here is an attempt to compute the value of the constant pi using one of -its many series representations: +Here is an attempt to compute the value of pi using one of its many +series representations: BEGIN { x = 1.0 / sqrt(3.0) @@ -21676,9 +21711,9 @@ its many series representations: } } - When run, the early errors propagating through later computations -cause the loop to terminate prematurely after an attempt to divide by -zero. + When run, the early errors propagate through later computations, +causing the loop to terminate prematurely after attempting to divide by +zero: $ gawk -f pi.awk -| 3.215390309173475 @@ -21701,166 +21736,176 @@ representations yield an unexpected result: > }' -| 4 - Can computation using arbitrary precision help with the previous -examples? If you are impatient to know, see *note Exact Arithmetic::. + +File: gawk.info, Node: Getting Accuracy, Next: Try To Round, Prev: Inexactness of computations, Up: FP Math Caution - Instead of arbitrary precision floating-point arithmetic, often all -you need is an adjustment of your logic or a different order for the -operations in your calculation. The stability and the accuracy of the -computation of the constant pi in the earlier example can be enhanced -by using the following simple algebraic transformation: +15.4.2 Getting The Accuracy You Need +------------------------------------ - (sqrt(x * x + 1) - 1) / x == x / (sqrt(x * x + 1) + 1) +Can arbitrary precision arithmetic give exact results? There are 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 and underflow are often troublesome. -After making this, change the program does converge to pi in under 30 -iterations: + When `gawk' tests the expressions `0.1 + 12.2' and `12.3' for +equality using the machine double precision arithmetic, it decides that +they are not equal! (*Note Comparing FP Values::.) You can get the +result you want by increasing the precision; 56 bits in this case does +the job: - $ gawk -f pi2.awk - -| 3.215390309173473 - -| 3.159659942097501 - -| 3.146086215131436 - -| 3.142714599645370 - -| 3.141873049979825 - ... - -| 3.141592653589797 - -| 3.141592653589797 + $ gawk -M -v PREC=56 'BEGIN { print (0.1 + 12.2 == 12.3) }' + -| 1 - 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 limitations and work within them. -For most casual use of floating-point arithmetic, you will often get -the expected result in the end if you simply round the display of your -final results to the correct number of significant decimal digits. + If adding more bits is good, perhaps adding even more bits of +precision is better? Here is what happens if we use an even larger +value of `PREC': - As general advice, avoid presenting numerical data in a manner that -implies better precision than is actually the case. + $ gawk -M -v PREC=201 'BEGIN { print (0.1 + 12.2 == 12.3) }' + -| 0 -* Menu: + This is not a bug in `gawk' or in the MPFR library. It is easy to +forget that the finite number of bits used to store the value is often +just an approximation after proper rounding. The test for equality +succeeds if and only if _all_ bits in the two operands are exactly the +same. Since this is not necessarily true after floating-point +computations with a particular precision and effective rounding rule, a +straight test for equality may not work. Instead, compare the two +numbers to see if they are within the desirable delta of each other. -* Floating-point Representation:: Binary floating-point representation. -* Floating-point Context:: Floating-point context. -* Rounding Mode:: Floating-point rounding mode. + In applications where 15 or fewer decimal places suffice, hardware +double precision arithmetic can be adequate, and is usually much faster. +But you need to keep in mind that every floating-point operation can +suffer a new rounding error with catastrophic consequences as +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. - ---------- Footnotes ---------- + Repeated addition is not necessarily equivalent to multiplication in +floating-point arithmetic. In the example in *note Errors accumulate::: - (1) One recommended title is `Numerical Computing with IEEE Floating -Point Arithmetic', Michael L. Overton, Society for Industrial and -Applied Mathematics, 2004. ISBN: 0-89871-482-6, ISBN-13: -978-0-89871-482-1. See `http://www.cs.nyu.edu/cs/faculty/overton/book'. + $ gawk 'BEGIN { + > for (d = 1.1; d <= 1.5; d += 0.1) # loop five times (?) + > i++ + > print i + > }' + -| 4 - (2) If you are interested in other tools that perform arbitrary -precision arithmetic, you may want to investigate the POSIX `bc' tool. -See the POSIX specification for it -(http://pubs.opengroup.org/onlinepubs/009695399/utilities/bc.html), for -more information. +you may or may not succeed in getting the correct result by choosing an +arbitrarily large value for `PREC'. Reformulation of the problem at +hand is often the correct approach in such situations.  -File: gawk.info, Node: Floating-point Representation, Next: Floating-point Context, Up: Floating-point Programming - -15.2.1 Binary Floating-point Representation -------------------------------------------- +File: gawk.info, Node: Try To Round, Next: Setting precision, Prev: Getting Accuracy, Up: FP Math Caution -Although floating-point representations vary from machine to machine, -the most commonly encountered representation is that defined by the -IEEE 754 Standard. An IEEE 754 format value has three components: +15.4.3 Try A Few Extra Bits of Precision and Rounding +----------------------------------------------------- - * A sign bit telling whether the number is positive or negative. - - * An "exponent", E, giving its order of magnitude. +Instead of arbitrary precision floating-point arithmetic, often all you +need is an adjustment of your logic or a different order for the +operations in your calculation. The stability and the accuracy of the +computation of pi in the earlier example can be enhanced by using the +following simple algebraic transformation: - * A "significand", S, specifying the actual digits of the number. + (sqrt(x * x + 1) - 1) / x == x / (sqrt(x * x + 1) + 1) - The value of the number is then S * 2^E. The first bit of a -non-zero binary significand is always one, so the significand in an -IEEE 754 format only includes the fractional part, leaving the leading -one implicit. The significand is stored in "normalized" format, which -means that the first bit is always a one. +After making this, change the program converges to pi in under 30 +iterations: - Three of the standard IEEE 754 types are 32-bit single precision, -64-bit double precision and 128-bit quadruple precision. The standard -also specifies extended precision formats to allow greater precisions -and larger exponent ranges. + $ gawk -f pi2.awk + -| 3.215390309173473 + -| 3.159659942097501 + -| 3.146086215131436 + -| 3.142714599645370 + -| 3.141873049979825 + ... + -| 3.141592653589797 + -| 3.141592653589797  -File: gawk.info, Node: Floating-point Context, Next: Rounding Mode, Prev: Floating-point Representation, Up: Floating-point Programming - -15.2.2 Floating-point Context ------------------------------ - -A floating-point "context" defines the environment for arithmetic -operations. It governs precision, sets rules for rounding, and limits -the range for exponents. The context has the following primary -components: - -"Precision" - Precision of the floating-point format in bits. - -"emax" - Maximum exponent allowed for the format. - -"emin" - Minimum exponent allowed for the format. +File: gawk.info, Node: Setting precision, Next: Setting the rounding mode, Prev: Try To Round, Up: FP Math Caution -"Underflow behavior" - The format may or may not support gradual underflow. - -"Rounding" - The rounding mode of the context. +15.4.4 Setting The Precision +---------------------------- - *note table-ieee-formats:: lists the precision and exponent field -values for the basic IEEE 754 binary formats: +`gawk' uses a global working precision; it does not keep track of the +precision or accuracy of individual numbers. Performing an arithmetic +operation or calling a built-in function rounds the result to the +current working precision. The default working precision is 53 bits, +which you can modify using the built-in variable `PREC'. You can also +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. -Name Total bits Precision emin emax ---------------------------------------------------------------------------- -Single 32 24 -126 +127 -Double 64 53 -1022 +1023 -Quadruple 128 113 -16382 +16383 +`PREC' IEEE 754 Binary Format +--------------------------------------------------- +`"half"' 16-bit half-precision. +`"single"' Basic 32-bit single precision. +`"double"' Basic 64-bit double precision. +`"quad"' Basic 128-bit quadruple precision. +`"oct"' 256-bit octuple precision. -Table 15.1: Basic IEEE Format Context Values +Table 15.2: Predefined Precision Strings For `PREC' - NOTE: The precision numbers include the implied leading one that - gives them one extra bit of significand. + The following example illustrates the effects of changing precision +on arithmetic operations: - A floating-point context can also determine which signals are treated -as exceptions, and can set rules for arithmetic with special values. -Please consult the IEEE 754 standard or other resources for details. + $ gawk -M -v PREC=100 'BEGIN { x = 1.0e-400; print x + 0 + > PREC = "double"; print x + 0 }' + -| 1e-400 + -| 0 - `gawk' ordinarily uses the hardware double precision representation -for numbers. On most systems, this is IEEE 754 floating-point format, -corresponding to 64-bit binary with 53 bits of precision. + CAUTION: Be wary of floating-point constants! When reading a + floating-point constant from program source code, `gawk' uses the + default precision (that of a C `double'), unless overridden by an + assignment to the special variable `PREC' on the command line, to + store it internally as a MPFR number. Changing the precision + using `PREC' in the program text does _not_ change the precision + of a constant. + + If you need to represent a floating-point constant at a higher + precision than the default and cannot use a command line + assignment to `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: - NOTE: In case an underflow occurs, the standard allows, but does - not require, the result from an arithmetic operation to be a - number smaller than the smallest nonzero normalized number. Such - numbers do not have as many significant digits as normal numbers, - and are called "denormals" or "subnormals". The alternative, - simply returning a zero, is called "flush to zero". The basic IEEE - 754 binary formats support subnormal numbers. + $ 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: Rounding Mode, Prev: Floating-point Context, Up: Floating-point Programming +File: gawk.info, Node: Setting the rounding mode, Prev: Setting precision, Up: FP Math Caution -15.2.3 Floating-point Rounding Mode ------------------------------------ +15.4.5 Setting The Rounding Mode +-------------------------------- -The "rounding mode" specifies the behavior for the results of numerical -operations when discarding extra precision. Each rounding mode indicates -how the least significant returned digit of a rounded result is to be -calculated. *note table-rounding-modes:: lists the IEEE 754 defined -rounding modes: +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 --------------------------------------------------------------------------- -Round to nearest, ties to even `roundTiesToEven' -Round toward plus Infinity `roundTowardPositive' -Round toward negative Infinity `roundTowardNegative' -Round toward zero `roundTowardZero' -Round to nearest, ties away `roundTiesToAway' -from zero +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 zero `roundTowardZero' `"Z"' or `"z"' +Round to nearest, ties away `roundTiesToAway' `"A"' or `"a"' +from zero -Table 15.2: IEEE 754 Rounding Modes +Table 15.3: `gawk' Rounding Modes + + `ROUNDMODE' has the default value `"N"', which selects the IEEE 754 +rounding mode `roundTiesToEven'. In *note Table 15.3: +table-gawk-rounding-modes, the value `"A"' selects `roundTiesToAway'. +This is only available if your version of the MPFR library supports it; +otherwise setting `ROUNDMODE' to `"A"' has no effect. The default mode `roundTiesToEven' is the most preferred, but the least intuitive. This method does the obvious thing for most values, by @@ -21895,20 +21940,19 @@ produces the following output when run on the author's system:(1) 3.5 => 4 4.5 => 4 - The theory behind the rounding mode `roundTiesToEven' is that it -more or less evenly distributes upward and downward rounds of exact -halves, which might cause any round-off error to cancel itself out. -This is the default rounding mode used in IEEE 754 computing functions -and operators. + The theory behind `roundTiesToEven' is that it more or less evenly +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 -(`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 used for -converting floating-point numbers to integers. The rounding mode -`roundTiesToAway' rounds the result to the nearest number and selects -the number with the larger magnitude if a tie occurs. +(`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 +used for converting floating-point numbers to integers. The rounding +mode `roundTiesToAway' rounds the result to the nearest number and +selects the number with the larger magnitude if a tie occurs. Some numerical analysts will tell you that your choice of rounding style has tremendous impact on the final outcome, and advise you to @@ -21917,8 +21961,8 @@ round-off error problems by setting the precision initially to some value sufficiently larger than the final desired precision, so that the accumulation of round-off error does not influence the outcome. If you suspect that results from your computation are sensitive to -accumulation of round-off error, one way to be sure is to look for a -significant difference in output when you change the rounding mode. +accumulation of round-off error, look for a significant difference in +output when you change the rounding mode to be sure. ---------- Footnotes ---------- @@ -21927,408 +21971,221 @@ C library in your system does not use the IEEE 754 even-rounding rule to round halfway cases for `printf'.  -File: gawk.info, Node: Gawk and MPFR, Next: Arbitrary Precision Floats, Prev: Floating-point Programming, Up: Arbitrary Precision Arithmetic +File: gawk.info, Node: Arbitrary Precision Integers, Next: POSIX Floating Point Problems, Prev: FP Math Caution, Up: Arbitrary Precision Arithmetic -15.3 `gawk' + MPFR = Powerful Arithmetic -======================================== - -The rest of this major node describes how to use the arbitrary precision -(also known as "multiple precision" or "infinite precision") numeric -capabilities in `gawk' to produce maximally accurate results when you -need it. - - But first you should check if your version of `gawk' supports -arbitrary precision arithmetic. The easiest way to find out is to look -at the output of the following command: - - $ gawk --version - -| GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2) - -| Copyright (C) 1989, 1991-2014 Free Software Foundation. - ... - -(You may see different version numbers than what's shown here. That's -OK; what's important is to see that GNU MPFR and GNU MP are listed in -the output.) - - `gawk' uses the GNU MPFR (http://www.mpfr.org) and GNU MP -(http://gmplib.org) (GMP) libraries for arbitrary precision arithmetic -on numbers. So if you do not see the names of these libraries in the -output, then your version of `gawk' does not support arbitrary -precision arithmetic. - - Additionally, there are a few elements available in the `PROCINFO' -array to provide information about the MPFR and GMP libraries. *Note -Auto-set::, for more information. - - -File: gawk.info, Node: Arbitrary Precision Floats, Next: Arbitrary Precision Integers, Prev: Gawk and MPFR, Up: Arbitrary Precision Arithmetic - -15.4 Arbitrary Precision Floating-point Arithmetic with `gawk' -============================================================== - -`gawk' uses the GNU MPFR library for arbitrary precision floating-point -arithmetic. The MPFR library provides precise control over precisions -and rounding modes, and gives correctly rounded, reproducible, -platform-independent results. With one of the command-line options -`--bignum' or `-M', all floating-point arithmetic operators and numeric -functions can yield results to any desired precision level supported by -MPFR. Two built-in variables, `PREC' and `ROUNDMODE', provide control -over the working precision and the rounding mode (*note Setting -Precision::, and *note Setting Rounding Mode::). The precision and the -rounding mode are set globally for every operation to follow. - - The default working precision for arbitrary precision floating-point -values is 53 bits, and the default value for `ROUNDMODE' is `"N"', -which selects the IEEE 754 `roundTiesToEven' rounding mode (*note -Rounding Mode::).(1) `gawk' uses the default exponent range in MPFR -(EMAX = 2^30 - 1, EMIN = -EMAX) for all floating-point contexts. There -is no explicit mechanism to adjust the exponent range. MPFR does not -implement subnormal numbers by default, and this behavior cannot be -changed in `gawk'. - - NOTE: When emulating an IEEE 754 format (*note Setting - Precision::), `gawk' internally adjusts the exponent range to the - value defined for the format and also performs computations needed - for gradual underflow (subnormal numbers). - - NOTE: MPFR numbers are variable-size entities, consuming only as - much space as needed to store the significant digits. Since the - performance using MPFR numbers pales in comparison to doing - arithmetic using the underlying machine types, you should consider - using only as much precision as needed by your program. +15.5 Arbitrary Precision Integer Arithmetic with `gawk' +======================================================= -* Menu: +When given one of the options `--bignum' or `-M', `gawk' performs all +integer arithmetic using GMP arbitrary precision integers. Any number +that looks like an integer in a source or data file is stored as an +arbitrary precision integer. The size of the integer is limited only +by the available memory. For example, the following computes 5^4^3^2, +the result of which is beyond the limits of ordinary `gawk' numbers: -* Setting Precision:: Setting the working precision. -* Setting Rounding Mode:: Setting the rounding mode. -* Floating-point Constants:: Representing floating-point constants. -* Changing Precision:: Changing the precision of a number. -* Exact Arithmetic:: Exact arithmetic with floating-point numbers. + $ gawk -M 'BEGIN { + > x = 5^4^3^2 + > print "# of digits =", length(x) + > print substr(x, 1, 20), "...", substr(x, length(x) - 19, 20) + > }' + -| # of digits = 183231 + -| 62060698786608744707 ... 92256259918212890625 - ---------- Footnotes ---------- + 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 x +183231, or 608693. - (1) The default precision is 53 bits, since according to the MPFR -documentation, the library should be able to exactly reproduce all -computations done with double-precision machine floating-point numbers -(`double' type in C), except the default exponent range is much wider -and subnormal numbers are not implemented. + The result from an arithmetic operation with an integer and a +floating-point value is a floating-point value with a precision equal +to the working precision. The following program calculates the eighth +term in Sylvester's sequence(1) using a recurrence: - -File: gawk.info, Node: Setting Precision, Next: Setting Rounding Mode, Up: Arbitrary Precision Floats + $ gawk -M 'BEGIN { + > s = 2.0 + > for (i = 1; i <= 7; i++) + > s = s * (s - 1) + 1 + > print s + > }' + -| 113423713055421845118910464 -15.4.1 Setting the Working Precision ------------------------------------- + The output differs from the actual number, +113,423,713,055,421,844,361,000,443, because the default precision of +53 bits is not enough to represent the floating-point results exactly. +You can either increase the precision (100 bits is enough in this +case), or replace the floating-point constant `2.0' with an integer, to +perform all computations using integer arithmetic to get the correct +output. -`gawk' uses a global working precision; it does not keep track of the -precision or accuracy of individual numbers. Performing an arithmetic -operation or calling a built-in function rounds the result to the -current working precision. The default working precision is 53 bits, -which you can modify using the built-in variable `PREC'. You can also -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. + Sometimes `gawk' must implicitly convert an arbitrary precision +integer into an arbitrary precision floating-point value. This is +primarily because the MPFR library does not always provide the relevant +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 +point first, like this: -`PREC' IEEE 754 Binary Format ---------------------------------------------------- -`"half"' 16-bit half-precision. -`"single"' Basic 32-bit single precision. -`"double"' Basic 64-bit double precision. -`"quad"' Basic 128-bit quadruple precision. -`"oct"' 256-bit octuple precision. + gawk -M 'BEGIN { n = 13; print (n + 0.0) % 2.0 }' -Table 15.3: Predefined Precision Strings For `PREC' + You can avoid this issue altogether by specifying the number as a +floating-point value to begin with: - The following example illustrates the effects of changing precision -on arithmetic operations: + gawk -M 'BEGIN { n = 13.0; print n % 2.0 }' - $ gawk -M -v PREC=100 'BEGIN { x = 1.0e-400; print x + 0 - > PREC = "double"; print x + 0 }' - -| 1e-400 - -| 0 + Note that for the particular example above, it is likely best to +just use the following: - Binary and decimal precisions are related approximately, according -to the formula: - - PREC = 3.322 * DPS - -Here, PREC denotes the binary precision (measured in bits) and DPS -(short for decimal places) is the decimal digits. We can easily -calculate how many decimal digits the 53-bit significand of an IEEE -double is equivalent to: 53 / 3.322 which is equal to about 15.95. But -what does 15.95 digits actually mean? It depends whether you are -concerned about how many digits you can rely on, or how many digits you -need. - - It is important to know how many bits it takes to uniquely identify -a double-precision value (the C type `double'). If you want to convert -from `double' to decimal and back to `double' (e.g., saving a `double' -representing an intermediate result to a file, and later reading it -back to restart the computation), then a few more decimal digits are -required. 17 digits is generally enough for a `double'. - - It can also be important to know what decimal numbers can be uniquely -represented with a `double'. If you want to convert from decimal to -`double' and back again, 15 digits is the most that you can get. Stated -differently, you should not present the numbers from your -floating-point computations with more than 15 significant digits in -them. + gawk -M 'BEGIN { n = 13; print n % 2 }' - Conversely, it takes a precision of 332 bits to hold an approximation -of the constant pi that is accurate to 100 decimal places. + ---------- Footnotes ---------- - You should always add some extra bits in order to avoid the -confusing round-off issues that occur because numbers are stored -internally in binary. + (1) Weisstein, Eric W. `Sylvester's Sequence'. From MathWorld--A +Wolfram Web Resource +(`http://mathworld.wolfram.com/SylvestersSequence.html').  -File: gawk.info, Node: Setting Rounding Mode, Next: Floating-point Constants, Prev: Setting Precision, Up: Arbitrary Precision Floats +File: gawk.info, Node: POSIX Floating Point Problems, Next: Floating point summary, Prev: Arbitrary Precision Integers, Up: Arbitrary Precision Arithmetic -15.4.2 Setting the Rounding Mode --------------------------------- - -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::. +15.6 Standards Versus Existing Practice +======================================= -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 zero `roundTowardZero' `"Z"' or `"z"' -Round to nearest, ties away `roundTiesToAway' `"A"' or `"a"' -from zero +Historically, `awk' has converted any non-numeric 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 +(base 8) or hexadecimal numbers (base 16). -Table 15.4: `gawk' Rounding Modes + Changes in the language of the 2001 and 2004 POSIX standards can be +interpreted to imply that `awk' should support additional features. +These features are: - `ROUNDMODE' has the default value `"N"', which selects the IEEE 754 -rounding mode `roundTiesToEven'. In *note Table 15.4: -table-gawk-rounding-modes, `"A"' is listed to select the IEEE 754 mode -`roundTiesToAway'. This is only available if your version of the MPFR -library supports it; otherwise setting `ROUNDMODE' to this value has no -effect. *Note Rounding Mode::, for the meanings of the various rounding -modes. + * Interpretation of floating point data values specified in + hexadecimal notation (e.g., `0xDEADBEEF'). (Note: data values, + _not_ source code constants.) - Here is an example of how to change the default rounding behavior of -`printf''s output: + * 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 machine-dependent additional characters after the `nan' and + allow either `inf' or `infinity'. - $ gawk -M -v ROUNDMODE="Z" 'BEGIN { printf("%.2f\n", 1.378) }' - -| 1.37 + The first problem is that both of these are clear changes to +historical practice: - -File: gawk.info, Node: Floating-point Constants, Next: Changing Precision, Prev: Setting Rounding Mode, Up: Arbitrary Precision Floats + * The `gawk' maintainer feels that supporting hexadecimal floating + point values, in particular, is ugly, and was never intended by the + original designers to be part of the language. -15.4.3 Representing Floating-point Constants --------------------------------------------- + * Allowing completely alphabetic strings to have valid numeric + values is also a very severe departure from historical practice. -Be wary of floating-point constants! When reading a floating-point -constant from program source code, `gawk' uses the default precision -(that of a C `double'), unless overridden by an assignment to the -special variable `PREC' on the command line, to store it internally as -a MPFR number. Changing the precision using `PREC' in the program text -does _not_ change the precision of a constant. If you need to represent -a floating-point constant at a higher precision than the default and -cannot use a command line assignment to `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: + The second problem is that the `gawk' maintainer feels that this +interpretation of the standard, which requires 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 +got where you are, but we don't think that that's where you want to be." - $ 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 + Recognizing the above 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" +and infinity. - In the first case, the number is stored with the default precision -of 53 bits. + 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 +as follows: - -File: gawk.info, Node: Changing Precision, Next: Exact Arithmetic, Prev: Floating-point Constants, Up: Arbitrary Precision Floats + * With the `--posix' command-line option, `gawk' becomes "hands + off." String values are passed directly to the system library's + `strtod()' function, and if it successfully returns a numeric + value, that is what's used.(1) By definition, the results are not + portable across different systems. They are also a little + surprising: -15.4.4 Changing the Precision of a Number ------------------------------------------ + $ echo nanny | gawk --posix '{ print $1 + 0 }' + -| nan + $ echo 0xDeadBeef | gawk --posix '{ print $1 + 0 }' + -| 3735928559 - The point is that in any variable-precision package, a decision is - made on how to treat numbers given as data, or arising in - intermediate results, which are represented in floating-point - format to a precision lower than working precision. Do we promote - them to full membership of the high-precision club, or do we treat - them and all their associates as second-class citizens? Sometimes - the first course is proper, sometimes the second, and it takes - careful analysis to tell which.(1) -- Dirk Laurie - - `gawk' does not implicitly modify the precision of any previously -computed results when the working precision is changed with an -assignment to `PREC'. The precision of a number is always the one that -was used at the time of its creation, and there is no way for you to -explicitly change it afterwards. However, since the result of a -floating-point arithmetic operation is always an arbitrary precision -floating-point value--with a precision set by the value of `PREC'--one -of the following workarounds effectively accomplishes the desired -behavior: - - x = x + 0.0 + * Without `--posix', `gawk' interprets the four strings `+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 + floating point is not supported (unless you also use + `--non-decimal-data', which is _not_ recommended). For example: -or: + $ echo nanny | gawk '{ print $1 + 0 }' + -| 0 + $ echo +nan | gawk '{ print $1 + 0 }' + -| nan + $ echo 0xDeadBeef | gawk '{ print $1 + 0 }' + -| 0 - x += 0.0 + `gawk' ignores case in the four special values. Thus `+nan' and + `+NaN' are the same. ---------- Footnotes ---------- - (1) Dirk Laurie. `Variable-precision Arithmetic Considered Perilous --- A Detective Story'. Electronic Transactions on Numerical Analysis. -Volume 28, pp. 168-173, 2008. - - -File: gawk.info, Node: Exact Arithmetic, Prev: Changing Precision, Up: Arbitrary Precision Floats - -15.4.5 Exact Arithmetic with Floating-point Numbers ---------------------------------------------------- - - CAUTION: Never depend on the exactness of floating-point - arithmetic, even for apparently simple expressions! - - Can arbitrary precision arithmetic give exact results? There are 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 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 -they are not equal! (*Note Floating-point Programming::.) You can get -the result you want by increasing the precision; 56 bits in this case -will get the job done: - - $ gawk -M -v PREC=56 'BEGIN { print (0.1 + 12.2 == 12.3) }' - -| 1 - - If adding more bits is good, perhaps adding even more bits of -precision is better? Here is what happens if we use an even larger -value of `PREC': - - $ gawk -M -v PREC=201 'BEGIN { print (0.1 + 12.2 == 12.3) }' - -| 0 - - This is not a bug in `gawk' or in the MPFR library. It is easy to -forget that the finite number of bits used to store the value is often -just an approximation after proper rounding. The test for equality -succeeds if and only if _all_ bits in the two operands are exactly the -same. Since this is not necessarily true after floating-point -computations with a particular precision and effective rounding rule, a -straight test for equality may not work. - - So, don't assume that floating-point values can be compared for -equality. You should also exercise caution when using other forms of -comparisons. The standard way to compare two floating-point numbers is -to determine how much error (or "tolerance") you will allow in a -comparison and check to see if one value is within this error range of -the other. - - In applications where 15 or fewer decimal places suffice, hardware -double precision arithmetic can be adequate, and is usually much faster. -But you do need to keep in mind that every floating-point operation can -suffer a new rounding error with catastrophic consequences as -illustrated by our earlier attempt to compute the value of the constant -pi (*note Floating-point Programming::). 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 Floating-point -Programming::: - - $ gawk 'BEGIN { - > for (d = 1.1; d <= 1.5; d += 0.1) # loop five times (?) - > i++ - > print i - > }' - -| 4 - -you may or may not succeed in getting the correct result by choosing an -arbitrarily large value for `PREC'. Reformulation of the problem at -hand is often the correct approach in such situations. + (1) You asked for it, you got it.  -File: gawk.info, Node: Arbitrary Precision Integers, Prev: Arbitrary Precision Floats, Up: Arbitrary Precision Arithmetic +File: gawk.info, Node: Floating point summary, Prev: POSIX Floating Point Problems, Up: Arbitrary Precision Arithmetic -15.5 Arbitrary Precision Integer Arithmetic with `gawk' -======================================================= +15.7 Summary +============ -If one of the options `--bignum' or `-M' is specified, `gawk' performs -all integer arithmetic using GMP arbitrary precision integers. Any -number that looks like an integer in a program source or data file is -stored as an arbitrary precision integer. The size of the integer is -limited only by your computer's memory. The current floating-point -context has no effect on operations involving integers. For example, -the following computes 5^4^3^2, the result of which is beyond the -limits of ordinary `gawk' numbers: + * Most computer arithmetic is done using either integers or + floating-point values. The default for `awk' is to use + double-precision floating-point values. - $ gawk -M 'BEGIN { - > x = 5^4^3^2 - > print "# of digits =", length(x) - > print substr(x, 1, 20), "...", substr(x, length(x) - 19, 20) - > }' - -| # of digits = 183231 - -| 62060698786608744707 ... 92256259918212890625 + * In the 1980's, Barbie mistakenly said "Math class is tough!" + While math isn't tough, floating-point arithmetic isn't the same + as pencil and paper math, and care must be taken: - If you were to compute the same value using arbitrary precision -floating-point values instead, the precision needed for correct output -(using the formula `prec = 3.322 * dps'), would be 3.322 x 183231, or -608693. + - Not all numbers can be represented exactly. - The result from an arithmetic operation with an integer and a -floating-point value is a floating-point value with a precision equal -to the working precision. The following program calculates the eighth -term in Sylvester's sequence(1) using a recurrence: + - Comparing values should use a delta, instead of being done + directly with `==' and `!='. - $ gawk -M 'BEGIN { - > s = 2.0 - > for (i = 1; i <= 7; i++) - > s = s * (s - 1) + 1 - > print s - > }' - -| 113423713055421845118910464 + - Errors accumulate. - The output differs from the actual number, -113,423,713,055,421,844,361,000,443, because the default precision of -53 bits is not enough to represent the floating-point results exactly. -You can either increase the precision (100 bits is enough in this -case), or replace the floating-point constant `2.0' with an integer, to -perform all computations using integer arithmetic to get the correct -output. + - Operations are not always truly associative or distributive. - It will sometimes be necessary for `gawk' to implicitly convert an -arbitrary precision integer into an arbitrary precision floating-point -value. This is primarily because the MPFR library does not always -provide the relevant 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 like -this: + * Increasing the accuracy can help, but it is not a panacea. - gawk -M 'BEGIN { n = 13; print (n + 0.0) % 2.0 }' + * Often, increasing the accuracy and then rounding to the desired + number of digits produces reasonable results. - You can avoid this issue altogether by specifying the number as a -floating-point value to begin with: + * Use either `-M' or `--bignum' to enable MPFR arithmetic. Use + `PREC' to set the precision in bits, and `ROUNDMODE' to set the + IEEE 754 rounding mode. - gawk -M 'BEGIN { n = 13.0; print n % 2.0 }' + * With `-M' or `--bignum', `gawk' performs arbitrary precision + integer arithmetic using the GMP library. This is faster and more + space efficient than using MPFR for the same calculations. - Note that for the particular example above, it is likely best to -just use the following: + * 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. - gawk -M 'BEGIN { n = 13; print n % 2 }' + * 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 + 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 of significant decimal digits. - ---------- Footnotes ---------- + * As general advice, avoid presenting numerical data in a manner that + implies better precision than is actually the case. - (1) Weisstein, Eric W. `Sylvester's Sequence'. From MathWorld--A -Wolfram Web Resource. -`http://mathworld.wolfram.com/SylvestersSequence.html'  File: gawk.info, Node: Dynamic Extensions, Next: Language History, Prev: Arbitrary Precision Arithmetic, Up: Top @@ -22362,6 +22219,7 @@ sample extensions are automatically built and installed when `gawk' is. `gawk'. * gawkextlib:: The `gawkextlib' project. * Extension summary:: Extension summary. +* Extension Exercises:: Exercises.  File: gawk.info, Node: Extension Intro, Next: Plugin License, Up: Dynamic Extensions @@ -24998,8 +24856,7 @@ everything that needs to be loaded. It is simplest to use the dl_load_func(func_table, filefuncs, "") - And that's it! As an exercise, consider adding functions to -implement system calls such as `chown()', `chmod()', and `umask()'. + And that's it! ---------- Footnotes ---------- @@ -25420,9 +25277,6 @@ processing immediately without damaging the original file. $ gawk -i inplace -v INPLACE_SUFFIX=.bak '{ gsub(/foo/, "bar") } > { print }' file1 file2 file3 - We leave it as an exercise to write a wrapper script that presents an -interface similar to `sed -i'. -  File: gawk.info, Node: Extension Sample Ord, Next: Extension Sample Readdir, Prev: Extension Sample Inplace, Up: Extension Samples @@ -25736,7 +25590,7 @@ users, please consider doing so through the `gawkextlib' project. See the project's web site for more information.  -File: gawk.info, Node: Extension summary, Prev: gawkextlib, Up: Dynamic Extensions +File: gawk.info, Node: Extension summary, Next: Extension Exercises, Prev: gawkextlib, Up: Dynamic Extensions 16.9 Summary ============ @@ -25824,6 +25678,26 @@ File: gawk.info, Node: Extension summary, Prev: gawkextlib, Up: Dynamic Exten project should be the place to do so. + +File: gawk.info, Node: Extension Exercises, Prev: Extension summary, Up: Dynamic Extensions + +16.10 Exercises +=============== + + 1. Add functions to implement system calls such as `chown()', + `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 + 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 + -i' for the "inplace" extension presented in *note Extension + Sample Inplace::. + +  File: gawk.info, Node: Language History, Next: Installation, Prev: Dynamic Extensions, Up: Top @@ -26359,7 +26233,7 @@ in POSIX `awk', in the order they were added to `gawk'. * The support for `next file' as two words was removed completely (*note Nextfile Statement::). - * Additional commnd line options (*note Options::): + * Additional command-line options (*note Options::): - The `--dump-variables' option to print a list of all global variables. @@ -26561,8 +26435,8 @@ in POSIX `awk', in the order they were added to `gawk'. - The `-R' option was removed. - * Support for high precision arithmetic with MPFR. (*note Gawk and - MPFR::). + * Support for high precision arithmetic with MPFR. (*note Arbitrary + Precision Arithmetic::). * The `and()', `or()' and `xor()' functions changed to allow any number of arguments, with a minimum of two (*note Bitwise @@ -28137,7 +28011,7 @@ File: gawk.info, Node: Installation summary, Prev: Other Versions, Up: Instal B.6 Summary =========== - * The `gawk' distribution is availble from GNU project's main + * The `gawk' distribution is available from GNU project's main distribution site, `ftp.gnu.org'. The canonical build recipe is: wget http://ftp.gnu.org/gnu/gawk/gawk-4.1.1.tar.gz @@ -28928,7 +28802,7 @@ C.7 Summary * `gawk''s extensions can be disabled with either the `--traditional' option or with the `--posix' option. The - `--parsedebug' option is availble if `gawk' is compiled with + `--parsedebug' option is available if `gawk' is compiled with `-DDEBUG'. * The source code for `gawk' is maintained in a publicly accessable @@ -29088,7 +28962,7 @@ characters that comprise them. Individual variables, as well as numeric and string variables, are referred to as "scalar" values. Groups of values, such as arrays, are not scalars. - *note General Arithmetic::, provided a basic introduction to numeric + *note Computer Arithmetic::, provided a basic introduction to numeric types (integer and floating-point) and how they are used in a computer. Please review that information, including a number of caveats that were presented. @@ -31656,7 +31530,6 @@ Index * case sensitivity, gawk: Case-sensitivity. (line 26) * case sensitivity, regexps and: Case-sensitivity. (line 6) * CGI, awk scripts for: Options. (line 125) -* changing precision of a number: Changing Precision. (line 6) * character classes, See bracket expressions: Regexp Operators. (line 56) * character lists in regular expression: Bracket Expressions. (line 6) @@ -31772,13 +31645,9 @@ Index * configuration options, gawk: Additional Configuration Options. (line 6) * constant regexps: Regexp Usage. (line 57) -* constants, floating-point: Floating-point Constants. - (line 6) * constants, nondecimal: Nondecimal Data. (line 6) * constants, numeric: Scalar Constants. (line 6) * constants, types of: Constants. (line 6) -* context, floating-point: Floating-point Context. - (line 6) * continue program, in debugger: Debugger Execution Control. (line 33) * continue statement: Continue Statement. (line 6) @@ -32083,7 +31952,7 @@ Index (line 66) * directories, command line: Command line directories. (line 6) -* directories, searching: Igawk Program. (line 368) +* directories, searching: Programs Exercises. (line 63) * directories, searching for loadable extensions: AWKLIBPATH Variable. (line 6) * directories, searching for source files: AWKPATH Variable. (line 6) @@ -32103,7 +31972,6 @@ Index * dollar sign ($), incrementing fields and arrays: Increment Ops. (line 30) * dollar sign ($), regexp operator: Regexp Operators. (line 35) -* double precision floating-point: General Arithmetic. (line 21) * double quote (") in shell commands: Read Terminal. (line 25) * double quote ("), in regexp constants: Computed Regexps. (line 29) * double quote ("), in shell commands: Quoting. (line 54) @@ -32364,7 +32232,7 @@ Index * files, reading, multiline records: Multiple Line. (line 6) * files, searching for regular expressions: Egrep Program. (line 6) * files, skipping: File Checking. (line 6) -* files, source, search path for: Igawk Program. (line 368) +* files, source, search path for: Programs Exercises. (line 63) * files, splitting: Split Program. (line 6) * files, Texinfo, extracting programs from: Extract Program. (line 6) * find substring in string: String Functions. (line 155) @@ -32375,8 +32243,6 @@ Index * fixed-width data: Constant Size. (line 10) * flag variables <1>: Tee Program. (line 20) * flag variables: Boolean Ops. (line 67) -* floating-point, numbers <1>: Unexpected Results. (line 6) -* floating-point, numbers: General Arithmetic. (line 6) * floating-point, numbers, arbitrary precision: Arbitrary Precision Arithmetic. (line 6) * floating-point, VAX/VMS: VMS Running. (line 51) @@ -32633,7 +32499,6 @@ Index * git utility <3>: Other Versions. (line 29) * git utility: gawkextlib. (line 29) * Git, use of for gawk source code: Derived Files. (line 6) -* GMP: Gawk and MPFR. (line 6) * GNITS mailing list: Acknowledgments. (line 52) * GNU awk, See gawk: Preface. (line 53) * GNU Free Documentation License: GNU Free Documentation License. @@ -32689,8 +32554,6 @@ Index * i debugger command (alias for info): Debugger Info. (line 13) * id utility: Id Program. (line 6) * id.awk program: Id Program. (line 30) -* IEEE 754 format: Floating-point Representation. - (line 6) * if statement: If Statement. (line 6) * if statement, actions, changing: Ranges. (line 25) * if statement, use of regexps in: Regexp Usage. (line 19) @@ -32761,10 +32624,9 @@ Index * INT signal (MS-Windows): Profiling. (line 214) * integer array indices: Numeric Array Subscripts. (line 31) -* integers: General Arithmetic. (line 6) * integers, arbitrary precision: Arbitrary Precision Integers. (line 6) -* integers, unsigned: General Arithmetic. (line 15) +* integers, unsigned: Computer Arithmetic. (line 41) * interacting with other programs: I/O Functions. (line 75) * internationalization <1>: I18N and L10N. (line 6) * internationalization: I18N Functions. (line 6) @@ -32817,15 +32679,12 @@ Index * Kernighan, Brian: History. (line 17) * kill command, dynamic profiling: Profiling. (line 188) * Knights, jedi: Undocumented. (line 6) -* Knuth, Donald: Arbitrary Precision Arithmetic. - (line 6) * Kwok, Conrad: Contributors. (line 34) * l debugger command (alias for list): Miscellaneous Debugger Commands. (line 72) * labels.awk program: Labels Program. (line 51) * Langston, Peter: Advanced Features. (line 6) * languages, data-driven: Basic High Level. (line 85) -* Laurie, Dirk: Changing Precision. (line 6) * LC_ALL locale category: Explaining gettext. (line 121) * LC_COLLATE locale category: Explaining gettext. (line 94) * LC_CTYPE locale category: Explaining gettext. (line 98) @@ -32971,7 +32830,6 @@ Index * modifiers, in format specifiers: Format Modifiers. (line 6) * monetary information, localization: Explaining gettext. (line 104) * Moore, Duncan: Getline Notes. (line 40) -* MPFR: Gawk and MPFR. (line 6) * msgfmt utility: I18N Example. (line 63) * multiple precision: Arbitrary Precision Arithmetic. (line 6) @@ -32986,7 +32844,6 @@ Index * namespace issues: Arrays. (line 18) * namespace issues, functions: Definition Syntax. (line 20) * nawk utility: Names. (line 10) -* negative zero: Unexpected Results. (line 34) * NetBSD: Glossary. (line 611) * networks, programming: TCP/IP Networking. (line 6) * networks, support for: Special Network. (line 6) @@ -33056,7 +32913,6 @@ Index * numbers, converting <1>: Bitwise Functions. (line 109) * numbers, converting: Conversion. (line 6) * numbers, converting, to strings: User-modified. (line 30) -* numbers, floating-point: General Arithmetic. (line 6) * numbers, hexadecimal: Nondecimal-numbers. (line 6) * numbers, octal: Nondecimal-numbers. (line 6) * numbers, rounding: Round Function. (line 6) @@ -33227,7 +33083,6 @@ Index * positional specifiers, printf statement: Format Modifiers. (line 13) * positional specifiers, printf statement, mixing with regular formats: Printf Ordering. (line 57) -* positive zero: Unexpected Results. (line 34) * POSIX awk <1>: Assignment Ops. (line 137) * POSIX awk: This Manual. (line 14) * POSIX awk, ** operator and: Precedence. (line 98) @@ -33268,7 +33123,6 @@ Index * POSIX, gawk extensions not included in: POSIX/GNU. (line 6) * POSIX, programs, implementing in awk: Clones. (line 6) * POSIXLY_CORRECT environment variable: Options. (line 340) -* PREC variable <1>: Setting Precision. (line 6) * PREC variable: User-modified. (line 124) * precedence <1>: Precedence. (line 6) * precedence: Increment Ops. (line 60) @@ -33508,10 +33362,7 @@ Index * Rommel, Kai Uwe: Contributors. (line 42) * round to nearest integer: Numeric Functions. (line 23) * round() user-defined function: Round Function. (line 16) -* rounding mode, floating-point: Rounding Mode. (line 6) * rounding numbers: Round Function. (line 6) -* ROUNDMODE variable <1>: Setting Rounding Mode. - (line 6) * ROUNDMODE variable: User-modified. (line 128) * RS variable <1>: User-modified. (line 133) * RS variable: awk split records. (line 12) @@ -33547,11 +33398,11 @@ Index * search in string: String Functions. (line 155) * search paths <1>: VMS Running. (line 58) * search paths <2>: PC Using. (line 10) -* search paths: Igawk Program. (line 368) +* search paths: Programs Exercises. (line 63) * search paths, for loadable extensions: AWKLIBPATH Variable. (line 6) * search paths, for source files <1>: VMS Running. (line 58) * search paths, for source files <2>: PC Using. (line 10) -* search paths, for source files <3>: Igawk Program. (line 368) +* search paths, for source files <3>: Programs Exercises. (line 63) * search paths, for source files: AWKPATH Variable. (line 6) * searching, files for regular expressions: Egrep Program. (line 6) * searching, for words: Dupword Program. (line 6) @@ -33583,9 +33434,6 @@ Index * set directory of message catalogs: I18N Functions. (line 12) * set watchpoint: Viewing And Changing Data. (line 67) -* setting rounding mode: Setting Rounding Mode. - (line 6) -* setting working precision: Setting Precision. (line 6) * shadowing of variable values: Definition Syntax. (line 61) * shell quoting, double quote: Read Terminal. (line 25) * shell quoting, rules for: Quoting. (line 6) @@ -33664,7 +33512,6 @@ Index (line 10) * sin: Numeric Functions. (line 75) * sine: Numeric Functions. (line 75) -* single precision floating-point: General Arithmetic. (line 21) * single quote ('): One-shot. (line 15) * single quote (') in gawk command lines: Long. (line 33) * single quote ('), in shell commands: Quoting. (line 48) @@ -33701,7 +33548,7 @@ Index * source code, QSE Awk: Other Versions. (line 131) * source code, QuikTrim Awk: Other Versions. (line 135) * source code, Solaris awk: Other Versions. (line 96) -* source files, search path for: Igawk Program. (line 368) +* source files, search path for: Programs Exercises. (line 63) * sparse arrays: Array Intro. (line 71) * Spencer, Henry: Glossary. (line 11) * split: String Functions. (line 313) @@ -33921,7 +33768,7 @@ Index (line 64) * Unix, awk scripts and: Executable Scripts. (line 6) * UNIXROOT variable, on OS/2 systems: PC Using. (line 16) -* unsigned integers: General Arithmetic. (line 15) +* unsigned integers: Computer Arithmetic. (line 41) * until debugger command: Debugger Execution Control. (line 83) * unwatch debugger command: Viewing And Changing Data. @@ -34029,7 +33876,6 @@ Index * Zaretskii, Eli <1>: Bugs. (line 71) * Zaretskii, Eli <2>: Contributors. (line 55) * Zaretskii, Eli: Acknowledgments. (line 60) -* zero, negative vs. positive: Unexpected Results. (line 34) * zerofile.awk program: Empty Files. (line 21) * Zoulas, Christos: Contributors. (line 66) * {} (braces): Profiling. (line 142) @@ -34060,558 +33906,550 @@ Index  Tag Table: Node: Top1292 -Node: Foreword41210 -Node: Preface45555 -Ref: Preface-Footnote-148702 -Ref: Preface-Footnote-248809 -Node: History49041 -Node: Names51415 -Ref: Names-Footnote-152879 -Node: This Manual52952 -Ref: This Manual-Footnote-158731 -Node: Conventions58831 -Node: Manual History60987 -Ref: Manual History-Footnote-164426 -Ref: Manual History-Footnote-264467 -Node: How To Contribute64541 -Node: Acknowledgments65780 -Node: Getting Started69929 -Node: Running gawk72363 -Node: One-shot73553 -Node: Read Terminal74778 -Ref: Read Terminal-Footnote-176428 -Ref: Read Terminal-Footnote-276704 -Node: Long76875 -Node: Executable Scripts78251 -Ref: Executable Scripts-Footnote-180084 -Ref: Executable Scripts-Footnote-280186 -Node: Comments80733 -Node: Quoting83206 -Node: DOS Quoting88522 -Node: Sample Data Files89197 -Node: Very Simple91712 -Node: Two Rules96350 -Node: More Complex98245 -Ref: More Complex-Footnote-1101177 -Node: Statements/Lines101262 -Ref: Statements/Lines-Footnote-1105717 -Node: Other Features105982 -Node: When106910 -Node: Intro Summary109080 -Node: Invoking Gawk109846 -Node: Command Line111361 -Node: Options112152 -Ref: Options-Footnote-1127964 -Node: Other Arguments127989 -Node: Naming Standard Input130651 -Node: Environment Variables131745 -Node: AWKPATH Variable132303 -Ref: AWKPATH Variable-Footnote-1135175 -Ref: AWKPATH Variable-Footnote-2135220 -Node: AWKLIBPATH Variable135480 -Node: Other Environment Variables136239 -Node: Exit Status139894 -Node: Include Files140569 -Node: Loading Shared Libraries144147 -Node: Obsolete145531 -Node: Undocumented146228 -Node: Invoking Summary146495 -Node: Regexp148075 -Node: Regexp Usage149525 -Node: Escape Sequences151558 -Node: Regexp Operators157225 -Ref: Regexp Operators-Footnote-1164705 -Ref: Regexp Operators-Footnote-2164852 -Node: Bracket Expressions164950 -Ref: table-char-classes166840 -Node: GNU Regexp Operators169363 -Node: Case-sensitivity173086 -Ref: Case-sensitivity-Footnote-1175978 -Ref: Case-sensitivity-Footnote-2176213 -Node: Leftmost Longest176321 -Node: Computed Regexps177522 -Node: Regexp Summary180894 -Node: Reading Files182366 -Node: Records184458 -Node: awk split records185201 -Node: gawk split records190059 -Ref: gawk split records-Footnote-1194580 -Node: Fields194617 -Ref: Fields-Footnote-1197581 -Node: Nonconstant Fields197667 -Ref: Nonconstant Fields-Footnote-1199897 -Node: Changing Fields200099 -Node: Field Separators206053 -Node: Default Field Splitting208755 -Node: Regexp Field Splitting209872 -Node: Single Character Fields213213 -Node: Command Line Field Separator214272 -Node: Full Line Fields217614 -Ref: Full Line Fields-Footnote-1218122 -Node: Field Splitting Summary218168 -Ref: Field Splitting Summary-Footnote-1221267 -Node: Constant Size221368 -Node: Splitting By Content225975 -Ref: Splitting By Content-Footnote-1229725 -Node: Multiple Line229765 -Ref: Multiple Line-Footnote-1235621 -Node: Getline235800 -Node: Plain Getline238016 -Node: Getline/Variable240111 -Node: Getline/File241258 -Node: Getline/Variable/File242642 -Ref: Getline/Variable/File-Footnote-1244241 -Node: Getline/Pipe244328 -Node: Getline/Variable/Pipe247027 -Node: Getline/Coprocess248134 -Node: Getline/Variable/Coprocess249386 -Node: Getline Notes250123 -Node: Getline Summary252927 -Ref: table-getline-variants253335 -Node: Read Timeout254247 -Ref: Read Timeout-Footnote-1258074 -Node: Command line directories258132 -Node: Input Summary259036 -Node: Input Exercises262174 -Node: Printing262907 -Node: Print264630 -Node: Print Examples265971 -Node: Output Separators268750 -Node: OFMT270766 -Node: Printf272124 -Node: Basic Printf273030 -Node: Control Letters274569 -Node: Format Modifiers278423 -Node: Printf Examples284450 -Node: Redirection286914 -Node: Special Files293886 -Node: Special FD294417 -Ref: Special FD-Footnote-1298041 -Node: Special Network298115 -Node: Special Caveats298965 -Node: Close Files And Pipes299761 -Ref: Close Files And Pipes-Footnote-1306924 -Ref: Close Files And Pipes-Footnote-2307072 -Node: Output Summary307222 -Node: Output exercises308219 -Node: Expressions308899 -Node: Values310084 -Node: Constants310760 -Node: Scalar Constants311440 -Ref: Scalar Constants-Footnote-1312299 -Node: Nondecimal-numbers312549 -Node: Regexp Constants315549 -Node: Using Constant Regexps316024 -Node: Variables319094 -Node: Using Variables319749 -Node: Assignment Options321473 -Node: Conversion323348 -Ref: table-locale-affects328784 -Ref: Conversion-Footnote-1329408 -Node: All Operators329517 -Node: Arithmetic Ops330147 -Node: Concatenation332652 -Ref: Concatenation-Footnote-1335448 -Node: Assignment Ops335568 -Ref: table-assign-ops340551 -Node: Increment Ops341868 -Node: Truth Values and Conditions345306 -Node: Truth Values346389 -Node: Typing and Comparison347438 -Node: Variable Typing348231 -Ref: Variable Typing-Footnote-1352131 -Node: Comparison Operators352253 -Ref: table-relational-ops352663 -Node: POSIX String Comparison356213 -Ref: POSIX String Comparison-Footnote-1357297 -Node: Boolean Ops357435 -Ref: Boolean Ops-Footnote-1361505 -Node: Conditional Exp361596 -Node: Function Calls363323 -Node: Precedence367081 -Node: Locales370750 -Node: Expressions Summary372381 -Node: Patterns and Actions374878 -Node: Pattern Overview375994 -Node: Regexp Patterns377671 -Node: Expression Patterns378214 -Node: Ranges381995 -Node: BEGIN/END385101 -Node: Using BEGIN/END385863 -Ref: Using BEGIN/END-Footnote-1388599 -Node: I/O And BEGIN/END388705 -Node: BEGINFILE/ENDFILE390990 -Node: Empty393921 -Node: Using Shell Variables394238 -Node: Action Overview396521 -Node: Statements398848 -Node: If Statement400696 -Node: While Statement402194 -Node: Do Statement404238 -Node: For Statement405394 -Node: Switch Statement408546 -Node: Break Statement410649 -Node: Continue Statement412704 -Node: Next Statement414497 -Node: Nextfile Statement416887 -Node: Exit Statement419542 -Node: Built-in Variables421946 -Node: User-modified423073 -Ref: User-modified-Footnote-1430758 -Node: Auto-set430820 -Ref: Auto-set-Footnote-1443385 -Ref: Auto-set-Footnote-2443590 -Node: ARGC and ARGV443646 -Node: Pattern Action Summary447500 -Node: Arrays449723 -Node: Array Basics451272 -Node: Array Intro452098 -Ref: figure-array-elements454071 -Node: Reference to Elements456478 -Node: Assigning Elements458751 -Node: Array Example459242 -Node: Scanning an Array460974 -Node: Controlling Scanning463989 -Ref: Controlling Scanning-Footnote-1469162 -Node: Delete469478 -Ref: Delete-Footnote-1472243 -Node: Numeric Array Subscripts472300 -Node: Uninitialized Subscripts474483 -Node: Multidimensional476108 -Node: Multiscanning479201 -Node: Arrays of Arrays480790 -Node: Arrays Summary485453 -Node: Functions487558 -Node: Built-in488431 -Node: Calling Built-in489509 -Node: Numeric Functions491497 -Ref: Numeric Functions-Footnote-1495331 -Ref: Numeric Functions-Footnote-2495688 -Ref: Numeric Functions-Footnote-3495736 -Node: String Functions496005 -Ref: String Functions-Footnote-1519016 -Ref: String Functions-Footnote-2519145 -Ref: String Functions-Footnote-3519393 -Node: Gory Details519480 -Ref: table-sub-escapes521149 -Ref: table-sub-posix-92522503 -Ref: table-sub-proposed523854 -Ref: table-posix-sub525208 -Ref: table-gensub-escapes526753 -Ref: Gory Details-Footnote-1527929 -Ref: Gory Details-Footnote-2527980 -Node: I/O Functions528131 -Ref: I/O Functions-Footnote-1535254 -Node: Time Functions535401 -Ref: Time Functions-Footnote-1545865 -Ref: Time Functions-Footnote-2545933 -Ref: Time Functions-Footnote-3546091 -Ref: Time Functions-Footnote-4546202 -Ref: Time Functions-Footnote-5546314 -Ref: Time Functions-Footnote-6546541 -Node: Bitwise Functions546807 -Ref: table-bitwise-ops547369 -Ref: Bitwise Functions-Footnote-1551614 -Node: Type Functions551798 -Node: I18N Functions552940 -Node: User-defined554585 -Node: Definition Syntax555389 -Ref: Definition Syntax-Footnote-1560314 -Node: Function Example560383 -Ref: Function Example-Footnote-1563027 -Node: Function Caveats563049 -Node: Calling A Function563567 -Node: Variable Scope564522 -Node: Pass By Value/Reference567510 -Node: Return Statement571018 -Node: Dynamic Typing574002 -Node: Indirect Calls574931 -Node: Functions Summary584644 -Node: Library Functions587183 -Ref: Library Functions-Footnote-1590801 -Ref: Library Functions-Footnote-2590944 -Node: Library Names591115 -Ref: Library Names-Footnote-1594588 -Ref: Library Names-Footnote-2594808 -Node: General Functions594894 -Node: Strtonum Function595922 -Node: Assert Function598702 -Node: Round Function602028 -Node: Cliff Random Function603569 -Node: Ordinal Functions604585 -Ref: Ordinal Functions-Footnote-1607662 -Ref: Ordinal Functions-Footnote-2607914 -Node: Join Function608125 -Ref: Join Function-Footnote-1609896 -Node: Getlocaltime Function610096 -Node: Readfile Function613832 -Node: Data File Management615671 -Node: Filetrans Function616303 -Node: Rewind Function620372 -Node: File Checking621759 -Ref: File Checking-Footnote-1622891 -Node: Empty Files623092 -Node: Ignoring Assigns625071 -Node: Getopt Function626625 -Ref: Getopt Function-Footnote-1637928 -Node: Passwd Functions638131 -Ref: Passwd Functions-Footnote-1647110 -Node: Group Functions647198 -Ref: Group Functions-Footnote-1655140 -Node: Walking Arrays655353 -Node: Library Functions Summary656956 -Node: Library exercises658344 -Node: Sample Programs659624 -Node: Running Examples660351 -Node: Clones661079 -Node: Cut Program662303 -Node: Egrep Program672171 -Ref: Egrep Program-Footnote-1680142 -Node: Id Program680252 -Node: Split Program683916 -Ref: Split Program-Footnote-1687454 -Node: Tee Program687582 -Node: Uniq Program690389 -Node: Wc Program697819 -Ref: Wc Program-Footnote-1702087 -Ref: Wc Program-Footnote-2702287 -Node: Miscellaneous Programs702379 -Node: Dupword Program703592 -Node: Alarm Program705623 -Node: Translate Program710437 -Ref: Translate Program-Footnote-1714828 -Ref: Translate Program-Footnote-2715098 -Node: Labels Program715232 -Ref: Labels Program-Footnote-1718603 -Node: Word Sorting718687 -Node: History Sorting722730 -Node: Extract Program724566 -Ref: Extract Program-Footnote-1732141 -Node: Simple Sed732270 -Node: Igawk Program735332 -Ref: Igawk Program-Footnote-1750508 -Ref: Igawk Program-Footnote-2750709 -Node: Anagram Program750847 -Node: Signature Program753915 -Node: Programs Summary755162 -Node: Advanced Features756350 -Node: Nondecimal Data758298 -Node: Array Sorting759875 -Node: Controlling Array Traversal760572 -Node: Array Sorting Functions768852 -Ref: Array Sorting Functions-Footnote-1772759 -Node: Two-way I/O772953 -Ref: Two-way I/O-Footnote-1778469 -Node: TCP/IP Networking778551 -Node: Profiling781395 -Node: Advanced Features Summary788937 -Node: Internationalization790801 -Node: I18N and L10N792281 -Node: Explaining gettext792967 -Ref: Explaining gettext-Footnote-1798107 -Ref: Explaining gettext-Footnote-2798291 -Node: Programmer i18n798456 -Node: Translator i18n802681 -Node: String Extraction803475 -Ref: String Extraction-Footnote-1804436 -Node: Printf Ordering804522 -Ref: Printf Ordering-Footnote-1807304 -Node: I18N Portability807368 -Ref: I18N Portability-Footnote-1809817 -Node: I18N Example809880 -Ref: I18N Example-Footnote-1812602 -Node: Gawk I18N812674 -Node: I18N Summary813312 -Node: Debugger814651 -Node: Debugging815673 -Node: Debugging Concepts816114 -Node: Debugging Terms817970 -Node: Awk Debugging820567 -Node: Sample Debugging Session821459 -Node: Debugger Invocation821979 -Node: Finding The Bug823312 -Node: List of Debugger Commands829794 -Node: Breakpoint Control831126 -Node: Debugger Execution Control834790 -Node: Viewing And Changing Data838150 -Node: Execution Stack841508 -Node: Debugger Info843021 -Node: Miscellaneous Debugger Commands847015 -Node: Readline Support852199 -Node: Limitations853091 -Node: Debugging Summary855365 -Node: Arbitrary Precision Arithmetic856529 -Ref: Arbitrary Precision Arithmetic-Footnote-1858178 -Node: General Arithmetic858326 -Node: Floating Point Issues860046 -Node: String Conversion Precision860927 -Ref: String Conversion Precision-Footnote-1862632 -Node: Unexpected Results862741 -Node: POSIX Floating Point Problems864894 -Ref: POSIX Floating Point Problems-Footnote-1868715 -Node: Integer Programming868753 -Node: Floating-point Programming870564 -Ref: Floating-point Programming-Footnote-1876892 -Ref: Floating-point Programming-Footnote-2877162 -Node: Floating-point Representation877426 -Node: Floating-point Context878591 -Ref: table-ieee-formats879430 -Node: Rounding Mode880814 -Ref: table-rounding-modes881293 -Ref: Rounding Mode-Footnote-1884308 -Node: Gawk and MPFR884487 -Node: Arbitrary Precision Floats885896 -Ref: Arbitrary Precision Floats-Footnote-1888339 -Node: Setting Precision888660 -Ref: table-predefined-precision-strings889344 -Node: Setting Rounding Mode891489 -Ref: table-gawk-rounding-modes891893 -Node: Floating-point Constants893080 -Node: Changing Precision894532 -Ref: Changing Precision-Footnote-1895924 -Node: Exact Arithmetic896098 -Node: Arbitrary Precision Integers899232 -Ref: Arbitrary Precision Integers-Footnote-1902247 -Node: Dynamic Extensions902394 -Node: Extension Intro903903 -Node: Plugin License905168 -Node: Extension Mechanism Outline905853 -Ref: figure-load-extension906277 -Ref: figure-load-new-function907762 -Ref: figure-call-new-function908764 -Node: Extension API Description910748 -Node: Extension API Functions Introduction912198 -Node: General Data Types917063 -Ref: General Data Types-Footnote-1922756 -Node: Requesting Values923055 -Ref: table-value-types-returned923792 -Node: Memory Allocation Functions924750 -Ref: Memory Allocation Functions-Footnote-1927497 -Node: Constructor Functions927593 -Node: Registration Functions929351 -Node: Extension Functions930036 -Node: Exit Callback Functions932338 -Node: Extension Version String933587 -Node: Input Parsers934237 -Node: Output Wrappers944040 -Node: Two-way processors948556 -Node: Printing Messages950760 -Ref: Printing Messages-Footnote-1951837 -Node: Updating `ERRNO'951989 -Node: Accessing Parameters952728 -Node: Symbol Table Access953958 -Node: Symbol table by name954472 -Node: Symbol table by cookie956448 -Ref: Symbol table by cookie-Footnote-1960581 -Node: Cached values960644 -Ref: Cached values-Footnote-1964148 -Node: Array Manipulation964239 -Ref: Array Manipulation-Footnote-1965337 -Node: Array Data Types965376 -Ref: Array Data Types-Footnote-1968079 -Node: Array Functions968171 -Node: Flattening Arrays972045 -Node: Creating Arrays978897 -Node: Extension API Variables983628 -Node: Extension Versioning984264 -Node: Extension API Informational Variables986165 -Node: Extension API Boilerplate987251 -Node: Finding Extensions991055 -Node: Extension Example991615 -Node: Internal File Description992345 -Node: Internal File Ops996436 -Ref: Internal File Ops-Footnote-11007982 -Node: Using Internal File Ops1008122 -Ref: Using Internal File Ops-Footnote-11010469 -Node: Extension Samples1010737 -Node: Extension Sample File Functions1012261 -Node: Extension Sample Fnmatch1019829 -Node: Extension Sample Fork1021310 -Node: Extension Sample Inplace1022523 -Node: Extension Sample Ord1024303 -Node: Extension Sample Readdir1025139 -Ref: table-readdir-file-types1025995 -Node: Extension Sample Revout1026794 -Node: Extension Sample Rev2way1027385 -Node: Extension Sample Read write array1028126 -Node: Extension Sample Readfile1030005 -Node: Extension Sample API Tests1031105 -Node: Extension Sample Time1031630 -Node: gawkextlib1032945 -Node: Extension summary1035758 -Node: Language History1039423 -Node: V7/SVR3.11041066 -Node: SVR41043386 -Node: POSIX1044828 -Node: BTL1046214 -Node: POSIX/GNU1046948 -Node: Feature History1052547 -Node: Common Extensions1065659 -Node: Ranges and Locales1066971 -Ref: Ranges and Locales-Footnote-11071588 -Ref: Ranges and Locales-Footnote-21071615 -Ref: Ranges and Locales-Footnote-31071849 -Node: Contributors1072070 -Node: History summary1077532 -Node: Installation1078901 -Node: Gawk Distribution1079852 -Node: Getting1080336 -Node: Extracting1081162 -Node: Distribution contents1082804 -Node: Unix Installation1088521 -Node: Quick Installation1089138 -Node: Additional Configuration Options1091580 -Node: Configuration Philosophy1093318 -Node: Non-Unix Installation1095669 -Node: PC Installation1096127 -Node: PC Binary Installation1097438 -Node: PC Compiling1099286 -Ref: PC Compiling-Footnote-11102285 -Node: PC Testing1102390 -Node: PC Using1103566 -Node: Cygwin1107724 -Node: MSYS1108533 -Node: VMS Installation1109047 -Node: VMS Compilation1109843 -Ref: VMS Compilation-Footnote-11111065 -Node: VMS Dynamic Extensions1111123 -Node: VMS Installation Details1112496 -Node: VMS Running1114748 -Node: VMS GNV1117582 -Node: VMS Old Gawk1118305 -Node: Bugs1118775 -Node: Other Versions1122779 -Node: Installation summary1129033 -Node: Notes1130088 -Node: Compatibility Mode1130953 -Node: Additions1131735 -Node: Accessing The Source1132660 -Node: Adding Code1134096 -Node: New Ports1140274 -Node: Derived Files1144755 -Ref: Derived Files-Footnote-11149836 -Ref: Derived Files-Footnote-21149870 -Ref: Derived Files-Footnote-31150466 -Node: Future Extensions1150580 -Node: Implementation Limitations1151186 -Node: Extension Design1152434 -Node: Old Extension Problems1153588 -Ref: Old Extension Problems-Footnote-11155105 -Node: Extension New Mechanism Goals1155162 -Ref: Extension New Mechanism Goals-Footnote-11158522 -Node: Extension Other Design Decisions1158711 -Node: Extension Future Growth1160817 -Node: Old Extension Mechanism1161653 -Node: Notes summary1163415 -Node: Basic Concepts1164600 -Node: Basic High Level1165281 -Ref: figure-general-flow1165553 -Ref: figure-process-flow1166152 -Ref: Basic High Level-Footnote-11169381 -Node: Basic Data Typing1169566 -Node: Glossary1172893 -Node: Copying1198045 -Node: GNU Free Documentation License1235601 -Node: Index1260737 +Node: Foreword41827 +Node: Preface46172 +Ref: Preface-Footnote-149319 +Ref: Preface-Footnote-249426 +Node: History49658 +Node: Names52032 +Ref: Names-Footnote-153496 +Node: This Manual53569 +Ref: This Manual-Footnote-159348 +Node: Conventions59448 +Node: Manual History61604 +Ref: Manual History-Footnote-165043 +Ref: Manual History-Footnote-265084 +Node: How To Contribute65158 +Node: Acknowledgments66397 +Node: Getting Started70546 +Node: Running gawk72980 +Node: One-shot74170 +Node: Read Terminal75395 +Ref: Read Terminal-Footnote-177045 +Ref: Read Terminal-Footnote-277321 +Node: Long77492 +Node: Executable Scripts78868 +Ref: Executable Scripts-Footnote-180701 +Ref: Executable Scripts-Footnote-280803 +Node: Comments81350 +Node: Quoting83823 +Node: DOS Quoting89139 +Node: Sample Data Files89814 +Node: Very Simple92329 +Node: Two Rules96967 +Node: More Complex98861 +Ref: More Complex-Footnote-1101793 +Node: Statements/Lines101878 +Ref: Statements/Lines-Footnote-1106333 +Node: Other Features106598 +Node: When107526 +Node: Intro Summary109696 +Node: Invoking Gawk110462 +Node: Command Line111977 +Node: Options112768 +Ref: Options-Footnote-1128597 +Node: Other Arguments128622 +Node: Naming Standard Input131284 +Node: Environment Variables132378 +Node: AWKPATH Variable132936 +Ref: AWKPATH Variable-Footnote-1135808 +Ref: AWKPATH Variable-Footnote-2135853 +Node: AWKLIBPATH Variable136113 +Node: Other Environment Variables136872 +Node: Exit Status140527 +Node: Include Files141202 +Node: Loading Shared Libraries144780 +Node: Obsolete146164 +Node: Undocumented146861 +Node: Invoking Summary147128 +Node: Regexp148708 +Node: Regexp Usage150158 +Node: Escape Sequences152191 +Node: Regexp Operators157858 +Ref: Regexp Operators-Footnote-1165338 +Ref: Regexp Operators-Footnote-2165485 +Node: Bracket Expressions165583 +Ref: table-char-classes167473 +Node: GNU Regexp Operators169996 +Node: Case-sensitivity173719 +Ref: Case-sensitivity-Footnote-1176611 +Ref: Case-sensitivity-Footnote-2176846 +Node: Leftmost Longest176954 +Node: Computed Regexps178155 +Node: Regexp Summary181527 +Node: Reading Files182998 +Node: Records185090 +Node: awk split records185833 +Node: gawk split records190691 +Ref: gawk split records-Footnote-1195212 +Node: Fields195249 +Ref: Fields-Footnote-1198213 +Node: Nonconstant Fields198299 +Ref: Nonconstant Fields-Footnote-1200529 +Node: Changing Fields200731 +Node: Field Separators206685 +Node: Default Field Splitting209387 +Node: Regexp Field Splitting210504 +Node: Single Character Fields213845 +Node: Command Line Field Separator214904 +Node: Full Line Fields218246 +Ref: Full Line Fields-Footnote-1218754 +Node: Field Splitting Summary218800 +Ref: Field Splitting Summary-Footnote-1221899 +Node: Constant Size222000 +Node: Splitting By Content226607 +Ref: Splitting By Content-Footnote-1230357 +Node: Multiple Line230397 +Ref: Multiple Line-Footnote-1236253 +Node: Getline236432 +Node: Plain Getline238648 +Node: Getline/Variable240743 +Node: Getline/File241890 +Node: Getline/Variable/File243274 +Ref: Getline/Variable/File-Footnote-1244873 +Node: Getline/Pipe244960 +Node: Getline/Variable/Pipe247659 +Node: Getline/Coprocess248766 +Node: Getline/Variable/Coprocess250018 +Node: Getline Notes250755 +Node: Getline Summary253559 +Ref: table-getline-variants253967 +Node: Read Timeout254879 +Ref: Read Timeout-Footnote-1258706 +Node: Command line directories258764 +Node: Input Summary259668 +Node: Input Exercises262805 +Node: Printing263538 +Node: Print265260 +Node: Print Examples266601 +Node: Output Separators269380 +Node: OFMT271396 +Node: Printf272754 +Node: Basic Printf273660 +Node: Control Letters275199 +Node: Format Modifiers279051 +Node: Printf Examples285078 +Node: Redirection287542 +Node: Special Files294514 +Node: Special FD295045 +Ref: Special FD-Footnote-1298669 +Node: Special Network298743 +Node: Special Caveats299593 +Node: Close Files And Pipes300389 +Ref: Close Files And Pipes-Footnote-1307550 +Ref: Close Files And Pipes-Footnote-2307698 +Node: Output Summary307848 +Node: Output exercises308845 +Node: Expressions309525 +Node: Values310710 +Node: Constants311386 +Node: Scalar Constants312066 +Ref: Scalar Constants-Footnote-1312925 +Node: Nondecimal-numbers313175 +Node: Regexp Constants316175 +Node: Using Constant Regexps316650 +Node: Variables319720 +Node: Using Variables320375 +Node: Assignment Options322099 +Node: Conversion323974 +Ref: table-locale-affects329410 +Ref: Conversion-Footnote-1330034 +Node: All Operators330143 +Node: Arithmetic Ops330773 +Node: Concatenation333278 +Ref: Concatenation-Footnote-1336074 +Node: Assignment Ops336194 +Ref: table-assign-ops341177 +Node: Increment Ops342494 +Node: Truth Values and Conditions345932 +Node: Truth Values347015 +Node: Typing and Comparison348064 +Node: Variable Typing348857 +Ref: Variable Typing-Footnote-1352757 +Node: Comparison Operators352879 +Ref: table-relational-ops353289 +Node: POSIX String Comparison356839 +Ref: POSIX String Comparison-Footnote-1357923 +Node: Boolean Ops358061 +Ref: Boolean Ops-Footnote-1362131 +Node: Conditional Exp362222 +Node: Function Calls363949 +Node: Precedence367707 +Node: Locales371376 +Node: Expressions Summary373007 +Node: Patterns and Actions375504 +Node: Pattern Overview376620 +Node: Regexp Patterns378297 +Node: Expression Patterns378840 +Node: Ranges382621 +Node: BEGIN/END385727 +Node: Using BEGIN/END386489 +Ref: Using BEGIN/END-Footnote-1389225 +Node: I/O And BEGIN/END389331 +Node: BEGINFILE/ENDFILE391616 +Node: Empty394547 +Node: Using Shell Variables394864 +Node: Action Overview397147 +Node: Statements399474 +Node: If Statement401322 +Node: While Statement402820 +Node: Do Statement404864 +Node: For Statement406020 +Node: Switch Statement409172 +Node: Break Statement411275 +Node: Continue Statement413330 +Node: Next Statement415123 +Node: Nextfile Statement417513 +Node: Exit Statement420168 +Node: Built-in Variables422572 +Node: User-modified423699 +Ref: User-modified-Footnote-1431388 +Node: Auto-set431450 +Ref: Auto-set-Footnote-1444032 +Ref: Auto-set-Footnote-2444237 +Node: ARGC and ARGV444293 +Node: Pattern Action Summary448147 +Node: Arrays450370 +Node: Array Basics451919 +Node: Array Intro452745 +Ref: figure-array-elements454718 +Node: Reference to Elements457125 +Node: Assigning Elements459398 +Node: Array Example459889 +Node: Scanning an Array461621 +Node: Controlling Scanning464636 +Ref: Controlling Scanning-Footnote-1469809 +Node: Delete470125 +Ref: Delete-Footnote-1472890 +Node: Numeric Array Subscripts472947 +Node: Uninitialized Subscripts475130 +Node: Multidimensional476755 +Node: Multiscanning479848 +Node: Arrays of Arrays481437 +Node: Arrays Summary486100 +Node: Functions488205 +Node: Built-in489078 +Node: Calling Built-in490156 +Node: Numeric Functions492144 +Ref: Numeric Functions-Footnote-1495978 +Ref: Numeric Functions-Footnote-2496335 +Ref: Numeric Functions-Footnote-3496383 +Node: String Functions496652 +Ref: String Functions-Footnote-1519663 +Ref: String Functions-Footnote-2519792 +Ref: String Functions-Footnote-3520040 +Node: Gory Details520127 +Ref: table-sub-escapes521796 +Ref: table-sub-posix-92523150 +Ref: table-sub-proposed524501 +Ref: table-posix-sub525855 +Ref: table-gensub-escapes527400 +Ref: Gory Details-Footnote-1528576 +Ref: Gory Details-Footnote-2528627 +Node: I/O Functions528778 +Ref: I/O Functions-Footnote-1535901 +Node: Time Functions536048 +Ref: Time Functions-Footnote-1546512 +Ref: Time Functions-Footnote-2546580 +Ref: Time Functions-Footnote-3546738 +Ref: Time Functions-Footnote-4546849 +Ref: Time Functions-Footnote-5546961 +Ref: Time Functions-Footnote-6547188 +Node: Bitwise Functions547454 +Ref: table-bitwise-ops548016 +Ref: Bitwise Functions-Footnote-1552261 +Node: Type Functions552445 +Node: I18N Functions553587 +Node: User-defined555232 +Node: Definition Syntax556036 +Ref: Definition Syntax-Footnote-1560961 +Node: Function Example561030 +Ref: Function Example-Footnote-1563674 +Node: Function Caveats563696 +Node: Calling A Function564214 +Node: Variable Scope565169 +Node: Pass By Value/Reference568157 +Node: Return Statement571665 +Node: Dynamic Typing574649 +Node: Indirect Calls575578 +Node: Functions Summary585291 +Node: Library Functions587830 +Ref: Library Functions-Footnote-1591448 +Ref: Library Functions-Footnote-2591591 +Node: Library Names591762 +Ref: Library Names-Footnote-1595235 +Ref: Library Names-Footnote-2595455 +Node: General Functions595541 +Node: Strtonum Function596569 +Node: Assert Function599349 +Node: Round Function602675 +Node: Cliff Random Function604216 +Node: Ordinal Functions605232 +Ref: Ordinal Functions-Footnote-1608309 +Ref: Ordinal Functions-Footnote-2608561 +Node: Join Function608772 +Ref: Join Function-Footnote-1610543 +Node: Getlocaltime Function610743 +Node: Readfile Function614479 +Node: Data File Management616318 +Node: Filetrans Function616950 +Node: Rewind Function621019 +Node: File Checking622406 +Ref: File Checking-Footnote-1623538 +Node: Empty Files623739 +Node: Ignoring Assigns625718 +Node: Getopt Function627272 +Ref: Getopt Function-Footnote-1638575 +Node: Passwd Functions638778 +Ref: Passwd Functions-Footnote-1647757 +Node: Group Functions647845 +Ref: Group Functions-Footnote-1655786 +Node: Walking Arrays655999 +Node: Library Functions Summary657602 +Node: Library exercises658990 +Node: Sample Programs660270 +Node: Running Examples661040 +Node: Clones661768 +Node: Cut Program662992 +Node: Egrep Program672860 +Ref: Egrep Program-Footnote-1680831 +Node: Id Program680941 +Node: Split Program684605 +Ref: Split Program-Footnote-1688143 +Node: Tee Program688271 +Node: Uniq Program691078 +Node: Wc Program698508 +Ref: Wc Program-Footnote-1702773 +Node: Miscellaneous Programs702865 +Node: Dupword Program704078 +Node: Alarm Program706109 +Node: Translate Program710923 +Ref: Translate Program-Footnote-1715314 +Ref: Translate Program-Footnote-2715584 +Node: Labels Program715718 +Ref: Labels Program-Footnote-1719089 +Node: Word Sorting719173 +Node: History Sorting723216 +Node: Extract Program725052 +Node: Simple Sed732588 +Node: Igawk Program735650 +Ref: Igawk Program-Footnote-1749961 +Ref: Igawk Program-Footnote-2750162 +Node: Anagram Program750300 +Node: Signature Program753368 +Node: Programs Summary754615 +Node: Programs Exercises755830 +Node: Advanced Features759481 +Node: Nondecimal Data761429 +Node: Array Sorting763006 +Node: Controlling Array Traversal763703 +Node: Array Sorting Functions771983 +Ref: Array Sorting Functions-Footnote-1775890 +Node: Two-way I/O776084 +Ref: Two-way I/O-Footnote-1781600 +Node: TCP/IP Networking781682 +Node: Profiling784526 +Node: Advanced Features Summary792068 +Node: Internationalization793932 +Node: I18N and L10N795412 +Node: Explaining gettext796098 +Ref: Explaining gettext-Footnote-1801238 +Ref: Explaining gettext-Footnote-2801422 +Node: Programmer i18n801587 +Node: Translator i18n805812 +Node: String Extraction806606 +Ref: String Extraction-Footnote-1807567 +Node: Printf Ordering807653 +Ref: Printf Ordering-Footnote-1810435 +Node: I18N Portability810499 +Ref: I18N Portability-Footnote-1812948 +Node: I18N Example813011 +Ref: I18N Example-Footnote-1815733 +Node: Gawk I18N815805 +Node: I18N Summary816443 +Node: Debugger817782 +Node: Debugging818804 +Node: Debugging Concepts819245 +Node: Debugging Terms821101 +Node: Awk Debugging823698 +Node: Sample Debugging Session824590 +Node: Debugger Invocation825110 +Node: Finding The Bug826443 +Node: List of Debugger Commands832925 +Node: Breakpoint Control834257 +Node: Debugger Execution Control837921 +Node: Viewing And Changing Data841281 +Node: Execution Stack844639 +Node: Debugger Info846152 +Node: Miscellaneous Debugger Commands850146 +Node: Readline Support855330 +Node: Limitations856222 +Node: Debugging Summary858496 +Node: Arbitrary Precision Arithmetic859660 +Node: Computer Arithmetic860989 +Ref: Computer Arithmetic-Footnote-1865376 +Node: Math Definitions865433 +Ref: table-ieee-formats868317 +Node: MPFR features868821 +Node: FP Math Caution870463 +Ref: FP Math Caution-Footnote-1871504 +Node: Inexactness of computations871873 +Node: Inexact representation872821 +Node: Comparing FP Values874176 +Node: Errors accumulate875140 +Node: Getting Accuracy876573 +Node: Try To Round879232 +Node: Setting precision880131 +Ref: table-predefined-precision-strings880813 +Node: Setting the rounding mode882606 +Ref: table-gawk-rounding-modes882970 +Ref: Setting the rounding mode-Footnote-1886424 +Node: Arbitrary Precision Integers886603 +Ref: Arbitrary Precision Integers-Footnote-1889573 +Node: POSIX Floating Point Problems889722 +Ref: POSIX Floating Point Problems-Footnote-1893591 +Node: Floating point summary893629 +Node: Dynamic Extensions895846 +Node: Extension Intro897398 +Node: Plugin License898663 +Node: Extension Mechanism Outline899348 +Ref: figure-load-extension899772 +Ref: figure-load-new-function901257 +Ref: figure-call-new-function902259 +Node: Extension API Description904243 +Node: Extension API Functions Introduction905693 +Node: General Data Types910558 +Ref: General Data Types-Footnote-1916251 +Node: Requesting Values916550 +Ref: table-value-types-returned917287 +Node: Memory Allocation Functions918245 +Ref: Memory Allocation Functions-Footnote-1920992 +Node: Constructor Functions921088 +Node: Registration Functions922846 +Node: Extension Functions923531 +Node: Exit Callback Functions925833 +Node: Extension Version String927082 +Node: Input Parsers927732 +Node: Output Wrappers937535 +Node: Two-way processors942051 +Node: Printing Messages944255 +Ref: Printing Messages-Footnote-1945332 +Node: Updating `ERRNO'945484 +Node: Accessing Parameters946223 +Node: Symbol Table Access947453 +Node: Symbol table by name947967 +Node: Symbol table by cookie949943 +Ref: Symbol table by cookie-Footnote-1954076 +Node: Cached values954139 +Ref: Cached values-Footnote-1957643 +Node: Array Manipulation957734 +Ref: Array Manipulation-Footnote-1958832 +Node: Array Data Types958871 +Ref: Array Data Types-Footnote-1961574 +Node: Array Functions961666 +Node: Flattening Arrays965540 +Node: Creating Arrays972392 +Node: Extension API Variables977123 +Node: Extension Versioning977759 +Node: Extension API Informational Variables979660 +Node: Extension API Boilerplate980746 +Node: Finding Extensions984550 +Node: Extension Example985110 +Node: Internal File Description985840 +Node: Internal File Ops989931 +Ref: Internal File Ops-Footnote-11001363 +Node: Using Internal File Ops1001503 +Ref: Using Internal File Ops-Footnote-11003850 +Node: Extension Samples1004118 +Node: Extension Sample File Functions1005642 +Node: Extension Sample Fnmatch1013210 +Node: Extension Sample Fork1014691 +Node: Extension Sample Inplace1015904 +Node: Extension Sample Ord1017579 +Node: Extension Sample Readdir1018415 +Ref: table-readdir-file-types1019271 +Node: Extension Sample Revout1020070 +Node: Extension Sample Rev2way1020661 +Node: Extension Sample Read write array1021402 +Node: Extension Sample Readfile1023281 +Node: Extension Sample API Tests1024381 +Node: Extension Sample Time1024906 +Node: gawkextlib1026221 +Node: Extension summary1029034 +Node: Extension Exercises1032727 +Node: Language History1033449 +Node: V7/SVR3.11035092 +Node: SVR41037412 +Node: POSIX1038854 +Node: BTL1040240 +Node: POSIX/GNU1040974 +Node: Feature History1046573 +Node: Common Extensions1059703 +Node: Ranges and Locales1061015 +Ref: Ranges and Locales-Footnote-11065632 +Ref: Ranges and Locales-Footnote-21065659 +Ref: Ranges and Locales-Footnote-31065893 +Node: Contributors1066114 +Node: History summary1071576 +Node: Installation1072945 +Node: Gawk Distribution1073896 +Node: Getting1074380 +Node: Extracting1075206 +Node: Distribution contents1076848 +Node: Unix Installation1082565 +Node: Quick Installation1083182 +Node: Additional Configuration Options1085624 +Node: Configuration Philosophy1087362 +Node: Non-Unix Installation1089713 +Node: PC Installation1090171 +Node: PC Binary Installation1091482 +Node: PC Compiling1093330 +Ref: PC Compiling-Footnote-11096329 +Node: PC Testing1096434 +Node: PC Using1097610 +Node: Cygwin1101768 +Node: MSYS1102577 +Node: VMS Installation1103091 +Node: VMS Compilation1103887 +Ref: VMS Compilation-Footnote-11105109 +Node: VMS Dynamic Extensions1105167 +Node: VMS Installation Details1106540 +Node: VMS Running1108792 +Node: VMS GNV1111626 +Node: VMS Old Gawk1112349 +Node: Bugs1112819 +Node: Other Versions1116823 +Node: Installation summary1123077 +Node: Notes1124133 +Node: Compatibility Mode1124998 +Node: Additions1125780 +Node: Accessing The Source1126705 +Node: Adding Code1128141 +Node: New Ports1134319 +Node: Derived Files1138800 +Ref: Derived Files-Footnote-11143881 +Ref: Derived Files-Footnote-21143915 +Ref: Derived Files-Footnote-31144511 +Node: Future Extensions1144625 +Node: Implementation Limitations1145231 +Node: Extension Design1146479 +Node: Old Extension Problems1147633 +Ref: Old Extension Problems-Footnote-11149150 +Node: Extension New Mechanism Goals1149207 +Ref: Extension New Mechanism Goals-Footnote-11152567 +Node: Extension Other Design Decisions1152756 +Node: Extension Future Growth1154862 +Node: Old Extension Mechanism1155698 +Node: Notes summary1157460 +Node: Basic Concepts1158646 +Node: Basic High Level1159327 +Ref: figure-general-flow1159599 +Ref: figure-process-flow1160198 +Ref: Basic High Level-Footnote-11163427 +Node: Basic Data Typing1163612 +Node: Glossary1166940 +Node: Copying1192092 +Node: GNU Free Documentation License1229648 +Node: Index1254784  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 65e5cd91..8705b9e0 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -569,6 +569,8 @@ particular records in a file and perform operations upon them. * Read Timeout:: Reading input with a timeout. * Command line directories:: What happens if you put a directory on the command line. +* Input Summary:: Input summary. +* Input Exercises:: Exercises. * Print:: The @code{print} statement. * Print Examples:: Simple examples of @code{print} statements. @@ -592,6 +594,8 @@ 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. +* Output Summary:: Output summary. +* Output exercises:: Exercises. * Values:: Constants, Variables, and Regular Expressions. * Constants:: String, numeric and regexp constants. @@ -634,6 +638,7 @@ particular records in a file and perform operations upon them. * Function Calls:: A function call is an expression. * Precedence:: How various operators nest. * Locales:: How the locale affects things. +* Expressions Summary:: Expressions summary. * Pattern Overview:: What goes into a pattern. * Regexp Patterns:: Using regexps as patterns. * Expression Patterns:: Any expression can be used as a @@ -680,6 +685,7 @@ particular records in a file and perform operations upon them. gives you information. * ARGC and ARGV:: Ways to use @code{ARGC} and @code{ARGV}. +* Pattern Action Summary:: Patterns and Actions summary. * Array Basics:: The basics of arrays. * Array Intro:: Introduction to Arrays * Reference to Elements:: How to examine one element of an @@ -702,6 +708,7 @@ particular records in a file and perform operations upon them. @command{awk}. * Multiscanning:: Scanning multidimensional arrays. * Arrays of Arrays:: True multidimensional arrays. +* Arrays Summary:: Summary of arrays. * Built-in:: Summarizes the built-in functions. * Calling Built-in:: How to call built-in functions. * Numeric Functions:: Functions that work with numbers, @@ -736,6 +743,7 @@ particular records in a file and perform operations upon them. runtime. * Indirect Calls:: Choosing the function to call at runtime. +* Functions Summary:: Summary of functions. * Library Names:: How to best name private global variables in library functions. * General Functions:: Functions that are of general use. @@ -770,6 +778,8 @@ particular records in a file and perform operations upon them. * Group Functions:: Functions for getting group information. * Walking Arrays:: A function to walk arrays of arrays. +* Library Functions Summary:: Summary of library functions. +* Library exercises:: Exercises. * Running Examples:: How to run these examples. * Clones:: Clones of common utilities. * Cut Program:: The @command{cut} utility. @@ -799,6 +809,8 @@ particular records in a file and perform operations upon them. * Anagram Program:: Finding anagrams from a dictionary. * Signature Program:: People do amazing things with too much time on their hands. +* Programs Summary:: Summary of programs. +* Programs Exercises:: Exercises. * Nondecimal Data:: Allowing nondecimal input data. * Array Sorting:: Facilities for controlling array traversal and sorting arrays. @@ -810,6 +822,7 @@ particular records in a file and perform operations upon them. * TCP/IP Networking:: Using @command{gawk} for network programming. * Profiling:: Profiling your @command{awk} programs. +* Advanced Features Summary:: Summary of advanced features. * I18N and L10N:: Internationalization and Localization. * Explaining gettext:: How GNU @command{gettext} works. * Programmer i18n:: Features for the programmer. @@ -821,6 +834,7 @@ particular records in a file and perform operations upon them. * I18N Example:: A simple i18n example. * Gawk I18N:: @command{gawk} is also internationalized. +* I18N Summary:: Summary of I18N stuff. * Debugging:: Introduction to @command{gawk} debugger. * Debugging Concepts:: Debugging in General. @@ -839,31 +853,23 @@ particular records in a file and perform operations upon them. * Miscellaneous Debugger Commands:: Miscellaneous Commands. * Readline Support:: Readline support. * Limitations:: Limitations and future plans. -* General Arithmetic:: An introduction to computer - arithmetic. -* Floating Point Issues:: Stuff to know about floating-point - numbers. -* String Conversion Precision:: The String Value Can Lie. -* Unexpected Results:: Floating Point Numbers Are Not - Abstract Numbers. -* POSIX Floating Point Problems:: Standards Versus Existing Practice. -* Integer Programming:: Effective integer programming. -* Floating-point Programming:: Effective Floating-point Programming. -* Floating-point Representation:: Binary floating-point representation. -* Floating-point Context:: Floating-point context. -* Rounding Mode:: Floating-point rounding mode. -* Gawk and MPFR:: How @command{gawk} provides - arbitrary-precision arithmetic. -* Arbitrary Precision Floats:: Arbitrary Precision Floating-point - Arithmetic with @command{gawk}. -* Setting Precision:: Setting the working precision. -* Setting Rounding Mode:: Setting the rounding mode. -* Floating-point Constants:: Representing floating-point constants. -* Changing Precision:: Changing the precision of a number. -* Exact Arithmetic:: Exact arithmetic with floating-point - numbers. +* Debugging Summary:: Debugging summary. +* Computer Arithmetic:: A quick intro to computer math. +* Math Definitions:: Defining terms used. +* MPFR features:: The MPFR features in @command{gawk}. +* FP Math Caution:: Things to know. +* Inexactness of computations:: Floating point math is not exact. +* Inexact representation:: Numbers are not exactly represented. +* Comparing FP Values:: How to compare floating point values. +* Errors accumulate:: Errors get bigger as they go. +* Getting Accuracy:: Getting more accuracy takes some work. +* Try To Round:: Add digits and round. +* Setting precision:: How to set the precision. +* Setting the rounding mode:: How to set the rounding mode. * Arbitrary Precision Integers:: Arbitrary Precision Integer Arithmetic with @command{gawk}. +* POSIX Floating Point Problems:: Standards Versus Existing Practice. +* Floating point summary:: Summary of floating point discussion. * Extension Intro:: What is an extension. * Plugin License:: A note about licensing. * Extension Mechanism Outline:: An outline of how it works. @@ -925,6 +931,8 @@ particular records in a file and perform operations upon them. * Extension Sample Time:: An interface to @code{gettimeofday()} and @code{sleep()}. * gawkextlib:: The @code{gawkextlib} project. +* Extension summary:: Extension summary. +* Extension Exercises:: Exercises. * V7/SVR3.1:: The major changes between V7 and System V Release 3.1. * SVR4:: Minor changes between System V @@ -941,6 +949,7 @@ particular records in a file and perform operations upon them. ranges. * Contributors:: The major contributors to @command{gawk}. +* History summary:: History summary. * Gawk Distribution:: What is in the @command{gawk} distribution. * Getting:: How to get the distribution. @@ -979,6 +988,7 @@ particular records in a file and perform operations upon them. * Bugs:: Reporting Problems and Bugs. * Other Versions:: Other freely available @command{awk} implementations. +* Installation summary:: Summary of installation. * Compatibility Mode:: How to disable certain @command{gawk} extensions. * Additions:: Making Additions To @command{gawk}. @@ -999,6 +1009,7 @@ particular records in a file and perform operations upon them. * Extension Other Design Decisions:: Some other design decisions. * Extension Future Growth:: Some room for future growth. * Old Extension Mechanism:: Some compatibility for old extensions. +* Notes summary:: Summary of implementation notes. * Basic High Level:: The high level view. * Basic Data Typing:: A very quick intro to data types. @end detailmenu @@ -3057,7 +3068,7 @@ the program would print the odd-numbered lines. The @command{awk} utility reads the input files one line at a time. For each line, @command{awk} tries the patterns of each of the rules. -If several patterns match, then several actions execture in the order in +If several patterns match, then several actions execute in the order in which they appear in the @command{awk} program. If no patterns match, then no actions run. @@ -3793,7 +3804,7 @@ care to search for all occurrences of each inappropriate construct. As @cindex @option{--bignum} option Force arbitrary precision arithmetic on numbers. This option has no effect if @command{gawk} is not compiled to use the GNU MPFR and MP libraries -(@pxref{Gawk and MPFR}). +(@pxref{Arbitrary Precision Arithmetic}). @item @option{-n} @itemx @option{--non-decimal-data} @@ -5969,7 +5980,7 @@ to be matched. Regexp operators provide grouping, alternation and repetition. @item -Bracket expressions give you a shorthand for specifyings sets +Bracket expressions give you a shorthand for specifying sets of characters that can match at a particular point in a regexp. Within bracket expressions, POSIX character classes let you specify certain groups of characters in a locale-independent fashion. @@ -8567,7 +8578,7 @@ This can also be done using command-line variable assignment. @code{PROCINFO["FS"]} can be used to see how fields are being split. @item -Use @code{getline} in its varioius 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 co-process. @item @@ -8640,7 +8651,7 @@ and discusses the @code{close()} built-in function. descriptors. * Close Files And Pipes:: Closing Input and Output Files and Pipes. * Output Summary:: Output summary. -* Output exercises:: Exercises. +* Output exercises:: Exercises. @end menu @node Print @@ -9039,7 +9050,7 @@ infinity are formatted as and positive infinity as @samp{inf} and @samp{infinity}. The special ``not a number'' value formats as @samp{-nan} or @samp{nan} -(@pxref{General Arithmetic}). +(@pxref{Math Definitions}). @item @code{%F} Like @samp{%f} but the infinity and ``not a number'' values are spelled @@ -9890,7 +9901,7 @@ file or command, or the next @code{print} or @code{printf} to that file or command, reopens the file or reruns the command. Because the expression that you use to close a file or pipeline must exactly match the expression used to open the file or run the command, -it is good practice to use a valueiable to store the @value{FN} or command. +it is good practice to use a variable to store the @value{FN} or command. The previous example becomes the following: @example @@ -14297,13 +14308,13 @@ character. (@xref{Output Separators}.) @cindex @code{PREC} variable @item PREC # The working precision of arbitrary precision floating-point numbers, -53 bits by default (@pxref{Setting Precision}). +53 bits by default (@pxref{Setting precision}). @cindex @code{ROUNDMODE} variable @item ROUNDMODE # The rounding mode to use for arbitrary precision arithmetic on numbers, by default @code{"N"} (@samp{roundTiesToEven} in -the IEEE 754 standard; @pxref{Setting Rounding Mode}). +the IEEE 754 standard; @pxref{Setting the rounding mode}). @cindex @code{RS} variable @cindex separators, for records @@ -14616,7 +14627,7 @@ The version of @command{gawk}. The following additional elements in the array are available to provide information about the MPFR and GMP libraries if your version of @command{gawk} supports arbitrary precision numbers -(@pxref{Gawk and MPFR}): +(@pxref{Arbitrary Precision Arithmetic}): @table @code @cindex version of GNU MPFR library @@ -19996,7 +20007,7 @@ some of standard functions, typically in the form of additional arguments. @item Functions accept zero or more arguments and return a value. The -expressions that provide the argument values are comnpletely evaluated +expressions that provide the argument values are completely evaluated before the function is called. Order of evaluation is not defined. The return value can be ignored. @@ -20008,7 +20019,7 @@ but that function still requires care in its use. @item User-defined functions provide important capabilities but come with some syntactic inelegancies. In a function call, there cannot be any -space between the function name and the opening left parethesis of the +space between the function name and the opening left parenthesis of the argument list. Also, there is no provision for local variables, so the convention is to add extra parameters, and to separate them visually from the real parameters by extra whitespace. @@ -22367,7 +22378,7 @@ 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:johnny,jay,arsenio +tvpeople:*:101:johny,jay,arsenio tvpeople:*:101:david,conan,tom,joan @end example @@ -22694,6 +22705,7 @@ Many of these programs use library functions presented in * Clones:: Clones of common utilities. * Miscellaneous Programs:: Some interesting @command{awk} programs. * Programs Summary:: Summary of programs. +* Programs Exercises:: Exercises. @end menu @node Running Examples @@ -23080,7 +23092,6 @@ of picking the input line apart by characters. @c ENDOFRANGE ficut @c ENDOFRANGE colcut -@c Exercise: Rewrite using split with "". @node Egrep Program @subsection Searching for Regular Expressions in Files @@ -23230,8 +23241,6 @@ if a match happens, we output the translated line, not the original.} The rule is commented out since it is not necessary with @command{gawk}: -@c Exercise: Fix this, w/array and new line as key to original line - @example @c file eg/prog/egrep.awk #@{ @@ -23518,12 +23527,6 @@ The @code{pr_first_field()} function simply isolates out some code that is used repeatedly, making the whole program slightly shorter and cleaner. -@c exercise!!! -@ignore -The POSIX version of @command{id} takes options that control which -information is printed. Modify this version to accept the same -arguments and perform in the same way. -@end ignore @c ENDOFRANGE id @node Split Program @@ -23644,8 +23647,6 @@ moves to the next letter in the alphabet and @code{s2} starts over again at @c endfile @end example -@c Exercise: do this with just awk builtin functions, index("abc..."), substr, etc. - @noindent The @code{usage()} function simply prints an error message and exits: @@ -23669,8 +23670,6 @@ instead of doing it in an @code{END} rule. It also assumes that letters are contiguous in the character set, which isn't true for EBCDIC systems. -@c Exercise: Fix these problems. -@c BFD... @c ENDOFRANGE filspl @c ENDOFRANGE split @@ -24181,18 +24180,10 @@ function beginfile(file) @c endfile @end example -The @code{endfile()} function adds the current file's numbers to the running -totals of lines, words, and characters.@footnote{@command{wc} can't just use the value of -@code{FNR} in @code{endfile()}. If you examine -the code in -@ref{Filetrans Function}, -you will see that -@code{FNR} has already been reset by the time -@code{endfile()} is called.} It then prints out those numbers -for the file that was just read. It relies on @code{beginfile()} to reset the -numbers for the following @value{DF}: -@c FIXME: ONE DAY: make the above footnote an exercise, -@c instead of giving away the answer. +The @code{endfile()} function adds the current file's numbers to the +running totals of lines, words, and characters. It then prints out those +numbers for the file that was just read. It relies on @code{beginfile()} +to reset the numbers for the following @value{DF}: @example @c file eg/prog/wc.awk @@ -24591,7 +24582,6 @@ and @code{gsub()} built-in functions (@pxref{String Functions}).@footnote{This program was written before @command{gawk} acquired the ability to split each character in a string into separate array elements.} -@c Exercise: How might you use this new feature to simplify the program? There are two functions. The first, @code{stranslate()}, takes three arguments: @@ -25224,11 +25214,7 @@ the array @code{a}, using the @code{split()} function The @samp{@@} symbol is used as the separator character. Each element of @code{a} that is empty indicates two successive @samp{@@} symbols in the original line. For each two empty elements (@samp{@@@@} in -the original file), we have to add a single @samp{@@} symbol back -in.@footnote{This program was written before @command{gawk} had the -@code{gensub()} function. -@c exercise!! -Consider how you might use it to simplify the code.} +the original file), we have to add a single @samp{@@} symbol back in. When the processing of the array is finished, @code{join()} is called with the value of @code{SUBSEP} (@pxref{Multidimensional}), @@ -25418,26 +25404,6 @@ The @code{usage()} function prints an error message and exits. Finally, the single rule handles the printing scheme outlined above, using @code{print} or @code{printf} as appropriate, depending upon the value of @code{RT}. - -@ignore -Exercise, compare the performance of this version with the more -straightforward: - -BEGIN { - pat = ARGV[1] - repl = ARGV[2] - ARGV[1] = ARGV[2] = "" -} - -{ gsub(pat, repl); print } - -Exercise: what are the advantages and disadvantages of this version versus sed? - Advantage: egrep regexps - speed (?) - Disadvantage: no & in replacement text - -Others? -@end ignore @c ENDOFRANGE awksed @node Igawk Program @@ -25880,8 +25846,6 @@ Not trying to save the line read with @code{getline} in the @code{pathto()} function when testing for the file's accessibility for use with the main program simplifies things considerably. -@c what problem does this engender though - exercise -@c answer, reading from "-" or /dev/stdin @item Using a @code{getline} loop in the @code{BEGIN} rule does it all in one @@ -25909,37 +25873,6 @@ With @command{igawk}, there is no real reason to build @code{@@include} processing into @command{gawk} itself. @end ignore - -@cindex search paths -@cindex search paths, for source files -@cindex source files@comma{} search path for -@cindex files, source@comma{} search path for -@cindex directories, searching -As an additional example of this, consider the idea of having two -files in a directory in the search path: - -@table @file -@item default.awk -This file contains a set of default library functions, such -as @code{getopt()} and @code{assert()}. - -@item site.awk -This file contains library functions that are specific to a site or -installation; i.e., locally developed functions. -Having a separate file allows @file{default.awk} to change with -new @command{gawk} releases, without requiring the system administrator to -update it each time by adding the local functions. -@end table - -One user -@c Karl Berry, karl@ileaf.com, 10/95 -suggested that @command{gawk} be modified to automatically read these files -upon startup. Instead, it would be very simple to modify @command{igawk} -to do this. Since @command{igawk} can process nested @code{@@include} -directives, @file{default.awk} could simply contain @code{@@include} -statements for the desired library functions. - -@c Exercise: make this change @c ENDOFRANGE libfex @c ENDOFRANGE flibex @c ENDOFRANGE awkpex @@ -26077,8 +26010,6 @@ babery yabber @dots{} @end example -@c Exercise: Avoid the use of external sort command - @c ENDOFRANGE anagram @node Signature Program @@ -26229,6 +26160,136 @@ mailing labels, and finding anagrams. @end itemize +@node Programs Exercises +@section Exercises + +@enumerate +@item +Rewrite @file{cut.awk} (@pxref{Cut Program}) +using @code{split()} with @code{""} as the seperator. + +@item +In @ref{Egrep Program}, we mentioned that @samp{egrep -i} could be +simulated in versions of @command{awk} without @code{IGNORECASE} by +using @code{tolower()} on the line and the pattern. In a footnote there, +we also mentioned that this solution has a bug: the translated line is +output, and not the original one. Fix this problem. +@c Exercise: Fix this, w/array and new line as key to original line + +@item +The POSIX version of @command{id} takes options that control which +information is printed. Modify the @command{awk} version +(@pxref{Id Program}) to accept the same arguments and perform in the +same way. + +@item +The @code{split.awk} program (@pxref{Split Program}) uses +the @code{chr()} and @code{ord()} functions to move through the +letters of the alphabet. +Modify the program to instead use only the @command{awk} +built-in functions, such as @code{index()} and @code{substr()}. + +@item +The @code{split.awk} program (@pxref{Split Program}) assumes +that letters are contiguous in the character set, +which isn't true for EBCDIC systems. +Fix this problem. + +@item +Why can't the @file{wc.awk} program (@pxref{Wc Program}) just +use the value of @code{FNR} in @code{endfile()}? +Hint: examine the code in @ref{Filetrans Function}. + +@ignore +@command{wc} can't just use the value of @code{FNR} in +@code{endfile()}. If you examine the code in @ref{Filetrans Function}, +you will see that @code{FNR} has already been reset by the time +@code{endfile()} is called. +@end ignore + +@item +Manipulation of individual characters in the @command{translate} program +(@pxref{Translate Program}) is painful using standard @command{awk} +functions. Given that @command{gawk} can split strings into individual +characters using @code{""} as the separator, how might you use this +feature to simplify the program? + +@item +The @file{extract.awk} program (@pxref{Extract Program}) was written +before @command{gawk} had the @code{gensub()} function. Use it +to simplify the code. + +@item +Compare the performance of the @file{awksed.awk} program +(@pxref{Simple Sed}) with the more straightforward: + +@example +BEGIN @{ + pat = ARGV[1] + repl = ARGV[2] + ARGV[1] = ARGV[2] = "" +@} + +@{ gsub(pat, repl); print @} +@end example + +@item +What are the advantages and disadvantages of @file{awksed.awk} versus +the real @command{sed} utility? + +@ignore + Advantage: egrep regexps + speed (?) + Disadvantage: no & in replacement text + +Others? +@end ignore + +@item +In @ref{Igawk Program}, we mentioned that not trying to save the line +read with @code{getline} in the @code{pathto()} function when testing +for the file's accessibility for use with the main program simplifies +things considerably. What problem does this engender though? +@c answer, reading from "-" or /dev/stdin + +@cindex search paths +@cindex search paths, for source files +@cindex source files@comma{} search path for +@cindex files, source@comma{} search path for +@cindex directories, searching +@item +As an additional example of the idea that it is not always necessary to +add new features to a program, consider the idea of having two files in +a directory in the search path: + +@table @file +@item default.awk +This file contains a set of default library functions, such +as @code{getopt()} and @code{assert()}. + +@item site.awk +This file contains library functions that are specific to a site or +installation; i.e., locally developed functions. +Having a separate file allows @file{default.awk} to change with +new @command{gawk} releases, without requiring the system administrator to +update it each time by adding the local functions. +@end table + +One user +@c Karl Berry, karl@ileaf.com, 10/95 +suggested that @command{gawk} be modified to automatically read these files +upon startup. Instead, it would be very simple to modify @command{igawk} +to do this. Since @command{igawk} can process nested @code{@@include} +directives, @file{default.awk} could simply contain @code{@@include} +statements for the desired library functions. +Make this change. + +@item +Modify @file{anagram.awk} (@pxref{Anagram Program}), to avoid +the use of the external @command{sort} utility. + +@end enumerate + @ifnotinfo @part @value{PART3}Moving Beyond Standard @command{awk} With @command{gawk} @end ifnotinfo @@ -28246,7 +28307,7 @@ the program for grouping all messages and other data together. @item You mark a program's strings for translation by preceding them with an underscore. Once that is done, the strings are extracted into a -@file{.pot} file. This file is copied for each langauge into a @file{.po} +@file{.pot} file. This file is copied for each language into a @file{.po} file, and the @file{.po} files are compiled into @file{.gmo} files for use at runtime. @@ -29610,444 +29671,291 @@ and editing. @cindex infinite precision @cindex floating-point, numbers@comma{} arbitrary precision -@cindex Knuth, Donald -@quotation -@i{There's a credibility gap: We don't know how much of the computer's answers -to believe. Novice computer users solve this problem by implicitly trusting -in the computer as an infallible authority; they tend to believe that all -digits of a printed answer are significant. Disillusioned computer users have -just the opposite approach; they are constantly afraid that their answers -are almost meaningless.}@footnote{Donald E.@: Knuth. -@cite{The Art of Computer Programming}. Volume 2, -@cite{Seminumerical Algorithms}, third edition, -1998, ISBN 0-201-89683-4, p.@: 229.} -@author Donald Knuth -@end quotation - -This @value{CHAPTER} discusses issues that you may encounter -when performing arithmetic. It begins by discussing some of -the general attributes of computer arithmetic, along with how -this can influence what you see when running @command{awk} programs. -This discussion applies to all versions of @command{awk}. - -The @value{CHAPTER} then moves on to describe @dfn{arbitrary precision -arithmetic}, a feature which is specific to @command{gawk}. +This @value{CHAPTER} introduces some basic concepts relating to +how computers do arithmetic and briefly lists the features in +@command{gawk} for performing arbitrary precision floating point +computations. It then proceeds to describe floating-point arithmetic, +which is what @command{awk} uses for all its computations, including a +discussion of arbitrary precision floating point arithmetic, which is +a feature available only in @command{gawk}. It continues on to present +arbitrary precision integers, and concludes with a description of some +points where @command{gawk} and the POSIX standard are not quite in +agreement. @menu -* General Arithmetic:: An introduction to computer arithmetic. -* Floating-point Programming:: Effective Floating-point Programming. -* Gawk and MPFR:: How @command{gawk} provides - arbitrary-precision arithmetic. -* Arbitrary Precision Floats:: Arbitrary Precision Floating-point Arithmetic - with @command{gawk}. -* Arbitrary Precision Integers:: Arbitrary Precision Integer Arithmetic with - @command{gawk}. +* Computer Arithmetic:: A quick intro to computer math. +* Math Definitions:: Defining terms used. +* MPFR features:: The MPFR features in @command{gawk}. +* FP Math Caution:: Things to know. +* Arbitrary Precision Integers:: Arbitrary Precision Integer Arithmetic with + @command{gawk}. +* POSIX Floating Point Problems:: Standards Versus Existing Practice. +* Floating point summary:: Summary of floating point discussion. @end menu -@node General Arithmetic +@node Computer Arithmetic @section A General Description of Computer Arithmetic -@cindex integers -@cindex floating-point, numbers -@cindex numbers, floating-point -Within computers, there are two kinds of numeric values: @dfn{integers} -and @dfn{floating-point}. -In school, integer values were referred to as ``whole'' numbers---that is, -numbers without any fractional part, such as 1, 42, or @minus{}17. +Until now, we have worked with data as either numbers or +strings. Ultimately, however, computers represent everything in terms +of @dfn{binary digits}, or @dfn{bits}. A decimal digit can take on any +of 10 values: zero through nine. A binary digit can take on any of two +values, zero or one. Using binary, computers (and computer software) +can represent and manipulate numerical and character data. In general, +the more bits you can use to represent a particular thing, the greater +the range of possible values it can take on. + +Modern computers support at least two, and often more, ways to do +arithmetic. Each kind of arithmetic uses a different representation +(organization of the bits) for the numbers. The kinds of arithmetic +that interest us are: + +@table @asis +@item Decimal arithmetic +This is the kind of arithmetic you learned in elementary school, using +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 +need a special software library to provide access to these instructions. +There are also libraries that do decimal arithmetic entirely in software. + +Despite the fact that some users expect @command{gawk} to be performing +decimal arithmetic,@footnote{We don't know why they expect this, but +they do.} it does not do so. + +@item Integer arithmetic +In school, integer values were referred to as ``whole'' numbers---that +is, numbers without any fractional part, such as 1, 42, or @minus{}17. The advantage to integer numbers is that they represent values exactly. -The disadvantage is that their range is limited. On most systems, -this range is @minus{}2,147,483,648 to 2,147,483,647. -However, many systems now support a range from -@minus{}9,223,372,036,854,775,808 to 9,223,372,036,854,775,807. +The disadvantage is that their range is limited. @cindex unsigned integers @cindex integers, unsigned -Integer values come in two flavors: @dfn{signed} and @dfn{unsigned}. -Signed values may be negative or positive, with the range of values just -described. -Unsigned values are always positive. On most systems, -the range is from 0 to 4,294,967,295. -However, many systems now support a range from -0 to 18,446,744,073,709,551,615. - -@cindex double precision floating-point -@cindex single precision floating-point -Floating-point numbers represent what are called ``real'' numbers; i.e., -those that do have a fractional part, such as 3.1415927. -The advantage to floating-point numbers is that they -can represent a much larger range of values. -The disadvantage is that there are numbers that they cannot represent -exactly. -@command{awk} uses @dfn{double precision} floating-point numbers, which -can hold more digits than @dfn{single precision} -floating-point numbers. - -There a several important issues to be aware of, described next. +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 (that is, 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 +floating point arithmetic. + +@item Floating point arithmetic +Floating-point numbers represent what were called in school ``real'' +numbers; i.e., those that have a fractional part, such as 3.1415927. +The advantage to floating-point numbers is that they can represent a +much larger range of values than can integers. The disadvantage is that +there are numbers that they cannot represent exactly. + +Modern systems support floating point arithmetic in hardware, with a +limited range of values. There are software libraries that allow +the use of arbitrary precision floating point calculations. + +POSIX @command{awk} uses @dfn{double precision} floating-point numbers, which +can hold more digits than @dfn{single precision} floating-point numbers. +@command{gawk} has facilities for performing arbitrary precision floating +point arithmetic, which we describe in more detail shortly. +@end table -@menu -* Floating Point Issues:: Stuff to know about floating-point numbers. -* Integer Programming:: Effective integer programming. -@end menu +Computers work with integer and floating point values of different +ranges. Integer values are usually either 32 or 64 bits in size. Single +precision floating point values occupy 32 bits, whereas double precision +floating point values occupy 64 bits. Floating point values are always +signed. The possible ranges of values are shown in the following table. + +@multitable @columnfractions .34 .33 .33 +@headitem Numeric representation @tab Miniumum value @tab Maximum value +@item 32-bit signed integer @tab @minus{}2,147,483,648 @tab 2,147,483,647 +@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} +@end multitable -@node Floating Point Issues -@subsection Floating-Point Number Caveats +@node Math Definitions +@section Other Stuff To Know -This @value{SECTION} describes some of the issues -involved in using floating-point numbers. +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. -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 worth reading if you are interested in the details, -but it does require a background in computer science. +@table @dfn +@item Accuracy +A floating-point calculation's accuracy is how close it comes +to the real (paper and pencil) value. -@menu -* String Conversion Precision:: The String Value Can Lie. -* Unexpected Results:: Floating Point Numbers Are Not Abstract - Numbers. -* POSIX Floating Point Problems:: Standards Versus Existing Practice. -@end menu +@item Error +The difference between what the result of a computation ``should be'' +and what it actually is. It is best to minimize error as much +as possible. -@node String Conversion Precision -@subsubsection The String Value Can Lie +@item Exponent +The order of magnitude of a value; +some number of bits in a floating-point value store the exponent. -Internally, @command{awk} keeps both the numeric value -(double precision floating-point) and the string value for a variable. -Separately, @command{awk} keeps -track of what type the variable has -(@pxref{Typing and Comparison}), -which plays a role in how variables are used in comparisons. +@item Inf +A special value representing infinity. Operations involving another +number and infinity produce infinity. -It is important to note that the string value for a number may not -reflect the full value (all the digits) that the numeric value -actually contains. -The following program, @file{values.awk}, illustrates this: +@item NaN +``Not A Number.'' A special value indicating a result that can't +happen in real math, but that can happen in floating-point computations. -@example -@{ - sum = $1 + $2 - # see it for what it is - printf("sum = %.12g\n", sum) - # use CONVFMT - a = "<" sum ">" - print "a =", a - # use OFMT - print "sum =", sum -@} -@end example +@item Normalized +How the significand (see later in this list) is usually stored. The +value is adjusted so that the first bit is one, and then that leading +one is assumed instead of physically stored. This provides one +extra bit of precision. -@noindent -This program shows the full value of the sum of @code{$1} and @code{$2} -using @code{printf}, and then prints the string values obtained -from both automatic conversion (via @code{CONVFMT}) and -from printing (via @code{OFMT}). +@item Precision +The number of bits used to represent a floating-point number. +The more bits, the more digits you can represent. +Binary and decimal precisions are related approximately, according to the +formula: -Here is what happens when the program is run: +@display +@iftex +@math{prec = 3.322 @cdot dps} +@end iftex +@ifnottex +@ifnotdocbook +@var{prec} = 3.322 * @var{dps} +@end ifnotdocbook +@end ifnottex +@docbook + +prec = 3.322 ⋅ dps @c + +@end docbook +@end display -@example -$ @kbd{echo 3.654321 1.2345678 | awk -f values.awk} -@print{} sum = 4.8888888 -@print{} a = <4.88889> -@print{} sum = 4.88889 -@end example +@noindent +Here, @var{prec} denotes the binary precision +(measured in bits) and @var{dps} (short for decimal places) +is the decimal digits. + +@item Rounding mode +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 +to the power of the exponent. For example, in @code{1.2345e67}, +the significand is @code{1.2345}. + +@item Stability +From @uref{http://en.wikipedia.org/wiki/Numerical_stability, +the Wikipedia article on numerical stability}: +``Calculations that can be proven not to magnify approximation errors +are called @dfn{numerically stable}.'' +@end table -This makes it clear that the full numeric value is different from -what the default string representations show. +See @uref{http://en.wikipedia.org/wiki/Accuracy_and_precision, +the Wikipedia article on accuracy and precision} for more information +on some of those terms. -@code{CONVFMT}'s default value is @code{"%.6g"}, which yields a value with -at most six significant digits. For some applications, you might want to -change it to specify more precision. -On most modern machines, most of the time, -17 digits is enough to capture a floating-point number's -value exactly.@footnote{Pathological cases can require up to -752 digits (!), but we doubt that you need to worry about this.} +On modern systems, floating-point hardware uses the representation and +operations defined by the IEEE 754 standard. +Three of the standard IEEE 754 types are 32-bit single precision, +64-bit double precision and 128-bit quadruple precision. +The standard also specifies extended precision formats +to allow greater precisions and larger exponent ranges. +(@command{awk} uses only the 64-bit double precision format.) -@node Unexpected Results -@subsubsection Floating Point Numbers Are Not Abstract Numbers - -@cindex floating-point, numbers -Unlike numbers in the abstract sense (such as what you studied in high school -or college arithmetic), numbers stored in computers are limited in certain ways. -They cannot represent an infinite number of digits, nor can they always -represent things exactly. -In particular, -floating-point numbers cannot -always represent values exactly. Here is an example: - -@example -$ @kbd{awk '@{ printf("%010d\n", $1 * 100) @}'} -515.79 -@print{} 0000051579 -515.80 -@print{} 0000051579 -515.81 -@print{} 0000051580 -515.82 -@print{} 0000051582 -@kbd{Ctrl-d} -@end example +@ref{table-ieee-formats} lists the precision and exponent +field values for the basic IEEE 754 binary formats: -@noindent -This shows that some values can be represented exactly, -whereas others are only approximated. This is not a ``bug'' -in @command{awk}, but simply an artifact of how computers -represent numbers. +@float Table,table-ieee-formats +@caption{Basic IEEE Format Context Values} +@multitable @columnfractions .20 .20 .20 .20 .20 +@headitem Name @tab Total bits @tab Precision @tab emin @tab emax +@item Single @tab 32 @tab 24 @tab @minus{}126 @tab +127 +@item Double @tab 64 @tab 53 @tab @minus{}1022 @tab +1023 +@item Quadruple @tab 128 @tab 113 @tab @minus{}16382 @tab +16383 +@end multitable +@end float @quotation NOTE -It cannot be emphasized enough that the behavior just -described is fundamental to modern computers. You will -see this kind of thing happen in @emph{any} programming -language using hardware floating-point numbers. It is @emph{not} -a bug in @command{gawk}, nor is it something that can be ``just -fixed.'' +The precision numbers include the implied leading one that gives them +one extra bit of significand. @end quotation -@cindex negative zero -@cindex positive zero -@cindex zero@comma{} negative vs.@: positive -Another peculiarity of floating-point numbers on modern systems -is that they often have more than one representation for the number zero! -In particular, it is possible to represent ``minus zero'' as well as -regular, or ``positive'' zero. - -This example shows that negative and positive zero are distinct values -when stored internally, but that they are in fact equal to each other, -as well as to ``regular'' zero: +@node MPFR features +@section Arbitrary Precison Arithmetic Features In @command{gawk} -@example -$ @kbd{gawk 'BEGIN @{ mz = -0 ; pz = 0} -> @kbd{printf "-0 = %g, +0 = %g, (-0 == +0) -> %d\n", mz, pz, mz == pz} -> @kbd{printf "mz == 0 -> %d, pz == 0 -> %d\n", mz == 0, pz == 0} -> @kbd{@}'} -@print{} -0 = -0, +0 = 0, (-0 == +0) -> 1 -@print{} mz == 0 -> 1, pz == 0 -> 1 -@end example - -It helps to keep this in mind should you process numeric data -that contains negative zero values; the fact that the zero is negative -is noted and can affect comparisons. - -@node POSIX Floating Point Problems -@subsubsection Standards Versus Existing Practice - -Historically, @command{awk} has converted any non-numeric 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 -(base 8) or hexadecimal numbers (base 16). - -Changes in the language of the -2001 and 2004 POSIX standards can be interpreted to imply that @command{awk} -should support additional features. These features are: - -@itemize @value{BULLET} -@item -Interpretation of floating point data values specified in hexadecimal -notation (@samp{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''). -In particular, the format for these values is as specified by the ISO 1999 -C standard, which ignores case and can allow machine-dependent additional -characters after the @samp{nan} and allow either @samp{inf} or @samp{infinity}. -@end itemize - -The first problem is that both of these are clear changes to historical -practice: - -@itemize @value{BULLET} -@item -The @command{gawk} maintainer feels that supporting hexadecimal floating -point values, in particular, is ugly, and was never intended by the -original designers to be part of the language. - -@item -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 -``language lawyering'' to arrive at in the first place, was not even -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 the above 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. - -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. -The solution implemented in @command{gawk} is as follows: - -@itemize @value{BULLET} -@item -With the @option{--posix} command-line option, @command{gawk} becomes -``hands off.'' String values are passed directly to the system library's -@code{strtod()} function, and if it successfully returns a numeric value, -that is what's used.@footnote{You asked for it, you got it.} -By definition, the results are not portable across -different systems. They are also a little surprising: +By default, @command{gawk} uses the double precision floating point values +supplied by the hardware of the system it runs on. However, if it was +compiled to do, @command{gawk} uses the @uref{http://www.mpfr.org, GNU +MPFR} and @uref{http://gmplib.org, GNU MP} (GMP) libraries for arbitrary +precision arithmetic on numbers. You can see if MPFR support is available +like so: @example -$ @kbd{echo nanny | gawk --posix '@{ print $1 + 0 @}'} -@print{} nan -$ @kbd{echo 0xDeadBeef | gawk --posix '@{ print $1 + 0 @}'} -@print{} 3735928559 +$ @kbd{gawk --version} +@print{} GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2) +@print{} Copyright (C) 1989, 1991-2014 Free Software Foundation. +@dots{} @end example -@item -Without @option{--posix}, @command{gawk} interprets the four strings -@samp{+inf}, -@samp{-inf}, -@samp{+nan}, -and -@samp{-nan} -specially, producing the corresponding special numeric values. -The leading sign acts a signal to @command{gawk} (and the user) -that the value is really numeric. Hexadecimal floating point is -not supported (unless you also use @option{--non-decimal-data}, -which is @emph{not} recommended). For example: +@noindent +(You may see different version numbers than what's shown here. That's OK; +what's important is to see that GNU MPFR and GNU MP are listed in +the output.) -@example -$ @kbd{echo nanny | gawk '@{ print $1 + 0 @}'} -@print{} 0 -$ @kbd{echo +nan | gawk '@{ print $1 + 0 @}'} -@print{} nan -$ @kbd{echo 0xDeadBeef | gawk '@{ print $1 + 0 @}'} -@print{} 0 -@end example +Additionally, there are a few elements available in the @code{PROCINFO} +array to provide information about the MPFR and GMP libraries +(@pxref{Auto-set}). -@command{gawk} ignores case in the four special values. -Thus @samp{+nan} and @samp{+NaN} are the same. -@end itemize +The MPFR library provides precise control over precisions and rounding +modes, and gives correctly rounded, reproducible, platform-independent +results. With either of the command-line options @option{--bignum} or +@option{-M}, all floating-point arithmetic operators and numeric functions +can yield results to any desired precision level supported by MPFR. -@node Integer Programming -@subsection Mixing Integers And Floating-point - -As has been mentioned already, @command{awk} uses hardware double -precision with 64-bit IEEE binary floating-point representation -for numbers on most systems. -A large integer like 9,007,199,254,740,997 -has a binary representation that, although finite, is more than 53 bits long; -it must also be rounded to 53 bits. -(The details are discussed in @ref{Floating-point Representation}.) -The biggest integer that can be stored in a C @code{double} is usually the same -as the largest possible value of a @code{double}. If your system @code{double} -is an IEEE 64-bit @code{double}, this largest possible value is an integer and -can be represented precisely. What more should you know about integers? - -If you want to know what is the largest integer, such that it and -all smaller integers can be stored in 64-bit doubles without losing precision, -then the answer is -@iftex -@math{2^{53}}. -@end iftex -@ifnottex -@ifnotdocbook -2^53. -@end ifnotdocbook -@end ifnottex -@docbook -253. @c -@end docbook -The next representable number is the even number -@iftex -@math{2^{53} + 2}, -@end iftex -@ifnottex -@ifnotdocbook -2^53 + 2, -@end ifnotdocbook -@end ifnottex -@docbook -253 + 2, @c -@end docbook -meaning it is unlikely that you will be able to make -@command{gawk} print -@iftex -@math{2^{53} + 1} -@end iftex -@ifnottex -@ifnotdocbook -2^53 + 1 -@end ifnotdocbook -@end ifnottex -@docbook -253 + 1 @c -@end docbook -in integer format. -The range of integers exactly representable by a 64-bit double -is -@iftex -@math{[-2^{53}, 2^{53}]}. -@end iftex -@ifnottex -@ifnotdocbook -[@minus{}2^53, 2^53]. -@end ifnotdocbook -@end ifnottex -@docbook -[−253, 253]. @c -@end docbook -If you ever see an integer outside this range in @command{awk} -using 64-bit doubles, you have reason to be very suspicious about -the accuracy of the output. Here is a simple program with erroneous output: - -@example -$ @kbd{gawk 'BEGIN @{ i = 2^53 - 1; for (j = 0; j < 4; j++) print i + j @}'} -@print{} 9007199254740991 -@print{} 9007199254740992 -@print{} 9007199254740992 -@print{} 9007199254740994 -@end example +Two built-in variables, @code{PREC} and @code{ROUNDMODE}, +provide control over the working precision and the rounding mode. +The precision and the rounding mode are set globally for every operation +to follow. +@xref{Auto-set}, for more information. -The lesson is to not assume that any large integer printed by @command{awk} -represents an exact result from your computation, especially if it wraps -around on your screen. +@node FP Math Caution +@section Floating Point Arithmetic: Caveat Emptor! -@node Floating-point Programming -@section Understanding Floating-point Programming +@quotation +Math class is tough! +@author Late 1980's Barbie +@end quotation -Numerical programming is an extensive area; if you need to develop -sophisticated numerical algorithms then @command{gawk} may not be -the ideal tool, and this documentation may not be sufficient. -It might require digesting a book or two@footnote{One recommended title is -@cite{Numerical Computing with IEEE Floating Point Arithmetic}, Michael L.@: -Overton, Society for Industrial and Applied Mathematics, 2004. -ISBN: 0-89871-482-6, ISBN-13: 978-0-89871-482-1. See -@uref{http://www.cs.nyu.edu/cs/faculty/overton/book}.} -to really internalize how to compute -with ideal accuracy and precision, -and the result often depends on the particular application. +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 +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 +floating-point arithmetic. -@quotation NOTE -A floating-point calculation's @dfn{accuracy} is how close it comes -to the real value. This is as opposed to the @dfn{precision}, which -usually refers to the number of bits used to represent the number -(see @uref{http://en.wikipedia.org/wiki/Accuracy_and_precision, -the Wikipedia article} for more information). +@quotation CAUTION +The material here is purposely general. If you need to do serious +computer arithmetic, you should do some research first, and not +rely just on what we tell you. @end quotation -There are two options for doing floating-point calculations: -hardware floating-point (as used by standard @command{awk} and -the default for @command{gawk}), and @dfn{arbitrary-precision} -floating-point, which is software based. -From this point forward, this @value{CHAPTER} -aims to provide enough information to understand both, and then -will focus on @command{gawk}'s facilities for the latter.@footnote{If you -are interested in other tools that perform arbitrary precision arithmetic, -you may want to investigate the POSIX @command{bc} tool. See -@uref{http://pubs.opengroup.org/onlinepubs/009695399/utilities/bc.html, -the POSIX specification for it}, for more information.} +@menu +* Inexactness of computations:: Floating point math is not exact. +* Getting Accuracy:: Getting more accuracy takes some work. +* Try To Round:: Add digits and round. +* Setting precision:: How to set the precision. +* Setting the rounding mode:: How to set the rounding mode. +@end menu + +@node Inexactness of computations +@subsection Floating Point Arithmetic Is Not Exact Binary floating-point representations and arithmetic are inexact. Simple values like 0.1 cannot be precisely represented using @@ -30059,7 +29967,16 @@ floating-point, you can set the precision before starting a computation, but then you cannot be sure of the number of significant decimal places in the final result. -So, before you start to write any code, you should think more +@menu +* Inexact representation:: Numbers are not exactly represented. +* Comparing FP Values:: How to compare floating point values. +* Errors accumulate:: Errors get bigger as they go. +@end menu + +@node Inexact representation +@subsubsection Many Numbers Cannot Be Represented Exactly + +So, before you start to write any code, you should think about what you really want and what's really happening. Consider the two numbers in the following example: @@ -30089,21 +30006,42 @@ you can always specify how much precision you would like in your output. 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 +@subsubsection Be Careful Comparing Values + Because the underlying representation can be a little bit off from the exact value, comparing floating-point values to see if they are exactly equal is generally a bad idea. -Here is an example where it does not work like you expect: +Here is an example where it does not work like you would expect: @example $ @kbd{gawk 'BEGIN @{ print (0.1 + 12.2 == 12.3) @}'} @print{} 0 @end example -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, +The general wisdom when comparing floating-point values is to see if +they are within some small range of each other (called a @dfn{delta}, +or @dfn{tolerance}). +You have to decide how small a delta is important to you. Code to do +this looks something like this: + +@example +delta = 0.00001 # for example +difference = abs(a) - abs(b) # subtract the two values +if (difference < delta) + # all ok +else + # not ok +@end example + +@node Errors accumulate +@subsubsection Errors Accumulate + +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, the error can accumulate and greatly affect the computation itself. -Here is an attempt to compute the value of the constant -@value{PI} using one of its many series representations: +Here is an attempt to compute the value of @value{PI} using one of its +many series representations: @example BEGIN @{ @@ -30117,8 +30055,8 @@ BEGIN @{ @} @end example -When run, the early errors propagating through later computations -cause the loop to terminate prematurely after an attempt to divide by zero. +When run, the early errors propagate through later computations, +causing the loop to terminate prematurely after attempting to divide by zero: @example $ @kbd{gawk -f pi.awk} @@ -30145,569 +30083,8 @@ $ @kbd{gawk 'BEGIN @{} @print{} 4 @end example -Can computation using arbitrary precision help with the previous examples? -If you are impatient to know, see -@ref{Exact Arithmetic}. - -Instead of arbitrary precision floating-point arithmetic, -often all you need is an adjustment of your logic -or a different order for the operations in your calculation. -The stability and the accuracy of the computation of the constant @value{PI} -in the earlier example can be enhanced by using the following -simple algebraic transformation: - -@example -(sqrt(x * x + 1) - 1) / x @equiv{} x / (sqrt(x * x + 1) + 1) -@end example - -@noindent -After making this, change the program does converge to -@value{PI} in under 30 iterations: - -@example -$ @kbd{gawk -f pi2.awk} -@print{} 3.215390309173473 -@print{} 3.159659942097501 -@print{} 3.146086215131436 -@print{} 3.142714599645370 -@print{} 3.141873049979825 -@dots{} -@print{} 3.141592653589797 -@print{} 3.141592653589797 -@end example - -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 limitations -and work within them. For most casual use of floating-point arithmetic, -you will often get the expected result in the end if you simply round -the display of your final results to the correct number of significant -decimal digits. - -As general advice, avoid presenting numerical data in a manner that -implies better precision than is actually the case. - -@menu -* Floating-point Representation:: Binary floating-point representation. -* Floating-point Context:: Floating-point context. -* Rounding Mode:: Floating-point rounding mode. -@end menu - -@node Floating-point Representation -@subsection Binary Floating-point Representation -@cindex IEEE 754 format - -Although floating-point representations vary from machine to machine, -the most commonly encountered representation is that defined by the -IEEE 754 Standard. An IEEE 754 format value has three components: - -@itemize @value{BULLET} -@item -A sign bit telling whether the number is positive or negative. - -@item -An @dfn{exponent}, @var{e}, giving its order of magnitude. - -@item -A @dfn{significand}, @var{s}, -specifying the actual digits of the number. -@end itemize - -The value of the -number is then -@iftex -@math{s @cdot 2^e}. -@end iftex -@ifnottex -@ifnotdocbook -@var{s * 2^e}. -@end ifnotdocbook -@end ifnottex -@docbook -s ⋅ 2e. @c -@end docbook -The first bit of a non-zero binary significand -is always one, so the significand in an IEEE 754 format only includes the -fractional part, leaving the leading one implicit. -The significand is stored in @dfn{normalized} format, -which means that the first bit is always a one. - -Three of the standard IEEE 754 types are 32-bit single precision, -64-bit double precision and 128-bit quadruple precision. -The standard also specifies extended precision formats -to allow greater precisions and larger exponent ranges. - -@node Floating-point Context -@subsection Floating-point Context -@cindex context, floating-point - -A floating-point @dfn{context} defines the environment for arithmetic operations. -It governs precision, sets rules for rounding, and limits the range for exponents. -The context has the following primary components: - -@table @dfn -@item Precision -Precision of the floating-point format in bits. - -@item emax -Maximum exponent allowed for the format. - -@item emin -Minimum exponent allowed for the format. - -@item Underflow behavior -The format may or may not support gradual underflow. - -@item Rounding -The rounding mode of the context. -@end table - -@ref{table-ieee-formats} lists the precision and exponent -field values for the basic IEEE 754 binary formats: - -@float Table,table-ieee-formats -@caption{Basic IEEE Format Context Values} -@multitable @columnfractions .20 .20 .20 .20 .20 -@headitem Name @tab Total bits @tab Precision @tab emin @tab emax -@item Single @tab 32 @tab 24 @tab @minus{}126 @tab +127 -@item Double @tab 64 @tab 53 @tab @minus{}1022 @tab +1023 -@item Quadruple @tab 128 @tab 113 @tab @minus{}16382 @tab +16383 -@end multitable -@end float - -@quotation NOTE -The precision numbers include the implied leading one that gives them -one extra bit of significand. -@end quotation - -A floating-point context can also determine which signals are treated -as exceptions, and can set rules for arithmetic with special values. -Please consult the IEEE 754 standard or other resources for details. - -@command{gawk} ordinarily uses the hardware double precision -representation for numbers. On most systems, this is IEEE 754 -floating-point format, corresponding to 64-bit binary with 53 bits -of precision. - -@quotation NOTE -In case an underflow occurs, the standard allows, but does not require, -the result from an arithmetic operation to be a number smaller than -the smallest nonzero normalized number. Such numbers do -not have as many significant digits as normal numbers, and are called -@dfn{denormals} or @dfn{subnormals}. The alternative, simply returning a zero, -is called @dfn{flush to zero}. The basic IEEE 754 binary formats -support subnormal numbers. -@end quotation - -@node Rounding Mode -@subsection Floating-point Rounding Mode -@cindex rounding mode, floating-point - -The @dfn{rounding mode} specifies the behavior for the results of numerical -operations when discarding extra precision. Each rounding mode indicates -how the least significant returned digit of a rounded result is to -be calculated. -@ref{table-rounding-modes} lists the IEEE 754 defined -rounding modes: - -@float Table,table-rounding-modes -@caption{IEEE 754 Rounding Modes} -@multitable @columnfractions .45 .55 -@headitem Rounding Mode @tab IEEE Name -@item Round to nearest, ties to even @tab @code{roundTiesToEven} -@item Round toward plus Infinity @tab @code{roundTowardPositive} -@item Round toward negative Infinity @tab @code{roundTowardNegative} -@item Round toward zero @tab @code{roundTowardZero} -@item Round to nearest, ties away from zero @tab @code{roundTiesToAway} -@end multitable -@end float - -The default mode @code{roundTiesToEven} is the most preferred, -but the least intuitive. This method does the obvious thing for most values, -by rounding them up or down to the nearest digit. -For example, rounding 1.132 to two digits yields 1.13, -and rounding 1.157 yields 1.16. - -However, when it comes to rounding a value that is exactly halfway between, -things do not work the way you probably learned in school. -In this case, the number is rounded to the nearest even digit. -So rounding 0.125 to two digits rounds down to 0.12, -but rounding 0.6875 to three digits rounds up to 0.688. -You probably have already encountered this rounding mode when -using @code{printf} to format floating-point numbers. -For example: - -@example -BEGIN @{ - x = -4.5 - for (i = 1; i < 10; i++) @{ - x += 1.0 - printf("%4.1f => %2.0f\n", x, x) - @} -@} -@end example - -@noindent -produces the following output when run on the author's system:@footnote{It -is possible for the output to be completely different if the -C library in your system does not use the IEEE 754 even-rounding -rule to round halfway cases for @code{printf}.} - -@example --3.5 => -4 --2.5 => -2 --1.5 => -2 --0.5 => 0 - 0.5 => 0 - 1.5 => 2 - 2.5 => 2 - 3.5 => 4 - 4.5 => 4 -@end example - -The theory behind the rounding mode @code{roundTiesToEven} is that -it more or less evenly distributes upward and downward rounds -of exact halves, which might cause any round-off error -to cancel itself out. This is the default rounding mode used -in IEEE 754 computing functions and operators. - -The other rounding modes are rarely used. -Round toward positive infinity (@code{roundTowardPositive}) -and round 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 be used for converting floating-point numbers to integers. -The rounding mode @code{roundTiesToAway} rounds the result to the -nearest number and selects the number with the larger magnitude -if a tie occurs. - -Some numerical analysts will tell you that your choice of rounding style -has tremendous impact on the final outcome, and advise you to wait until -final output for any rounding. Instead, you can often avoid round-off error problems by -setting the precision initially to some value sufficiently larger than -the final desired precision, so that the accumulation of round-off error -does not influence the outcome. -If you suspect that results from your computation are -sensitive to accumulation of round-off error, -one way to be sure is to look for a significant difference in output -when you change the rounding mode. - -@node Gawk and MPFR -@section @command{gawk} + MPFR = Powerful Arithmetic -@cindex MPFR -@cindex GMP - -The rest of this @value{CHAPTER} describes how to use the arbitrary precision -(also known as @dfn{multiple precision} or @dfn{infinite precision}) numeric -capabilities in @command{gawk} to produce maximally accurate results -when you need it. - -But first you should check if your version of -@command{gawk} supports arbitrary precision arithmetic. -The easiest way to find out is to look at the output of -the following command: - -@example -$ @kbd{gawk --version} -@print{} GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2) -@print{} Copyright (C) 1989, 1991-2014 Free Software Foundation. -@dots{} -@end example - -@noindent -(You may see different version numbers than what's shown here. That's OK; -what's important is to see that GNU MPFR and GNU MP are listed in -the output.) - -@command{gawk} uses the -@uref{http://www.mpfr.org, GNU MPFR} -and -@uref{http://gmplib.org, GNU MP} (GMP) -libraries for arbitrary precision -arithmetic on numbers. So if you do not see the names of these libraries -in the output, then your version of @command{gawk} does not support -arbitrary precision arithmetic. - -Additionally, -there are a few elements available in the @code{PROCINFO} array -to provide information about the MPFR and GMP libraries. -@xref{Auto-set}, for more information. - -@ignore -Even if you aren't interested in arbitrary precision arithmetic, you -may still benefit from knowing about how @command{gawk} handles numbers -in general, and the limitations of doing arithmetic with ordinary -@command{gawk} numbers. -@end ignore - - -@node Arbitrary Precision Floats -@section Arbitrary Precision Floating-point Arithmetic with @command{gawk} - -@command{gawk} uses the GNU MPFR library -for arbitrary precision floating-point arithmetic. The MPFR library -provides precise control over precisions and rounding modes, and gives -correctly rounded, reproducible, platform-independent results. With one -of the command-line options @option{--bignum} or @option{-M}, -all floating-point arithmetic operators and numeric functions can yield -results to any desired precision level supported by MPFR. -Two built-in variables, @code{PREC} and @code{ROUNDMODE}, -provide control over the working precision and the rounding mode -(@pxref{Setting Precision}, and -@pxref{Setting Rounding Mode}). -The precision and the rounding mode are set globally for every operation -to follow. - -The default working precision for arbitrary precision floating-point values is -53 bits, and the default value for @code{ROUNDMODE} is @code{"N"}, -which selects the IEEE 754 @code{roundTiesToEven} rounding mode -(@pxref{Rounding Mode}).@footnote{The -default precision is 53 bits, since according to the MPFR documentation, -the library should be able to exactly reproduce all computations done with -double-precision machine floating-point numbers (@code{double} type -in C), except the default exponent range is much wider and subnormal -numbers are not implemented.} -@command{gawk} uses the default exponent range in MPFR -@iftex -(@math{emax = 2^{30} - 1, emin = -emax}) -@end iftex -@ifnottex -@ifnotdocbook -(@var{emax} = 2^30 @minus{} 1, @var{emin} = @minus{}@var{emax}) -@end ifnotdocbook -@end ifnottex -@docbook -(emax = 230 − 1, emin = −emax) @c -@end docbook -for all floating-point contexts. -There is no explicit mechanism to adjust the exponent range. -MPFR does not implement subnormal numbers by default, -and this behavior cannot be changed in @command{gawk}. - -@quotation NOTE -When emulating an IEEE 754 format (@pxref{Setting Precision}), -@command{gawk} internally adjusts the exponent range -to the value defined for the format and also performs computations needed for -gradual underflow (subnormal numbers). -@end quotation - -@quotation NOTE -MPFR numbers are variable-size entities, consuming only as much space as -needed to store the significant digits. Since the performance using MPFR -numbers pales in comparison to doing arithmetic using the underlying machine -types, you should consider using only as much precision as needed by -your program. -@end quotation - -@menu -* Setting Precision:: Setting the working precision. -* Setting Rounding Mode:: Setting the rounding mode. -* Floating-point Constants:: Representing floating-point constants. -* Changing Precision:: Changing the precision of a number. -* Exact Arithmetic:: Exact arithmetic with floating-point numbers. -@end menu - -@node Setting Precision -@subsection Setting the Working Precision -@cindex @code{PREC} variable -@cindex setting working precision - -@command{gawk} uses a global working precision; it does not keep track of -the precision or accuracy of individual numbers. Performing an arithmetic -operation or calling a built-in function rounds the result to the current -working precision. The default working precision is 53 bits, which you can -modify using the built-in variable @code{PREC}. You can also set the -value to one of the predefined case-insensitive strings -shown in @ref{table-predefined-precision-strings}, -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 -@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. -@item @code{"quad"} @tab Basic 128-bit quadruple precision. -@item @code{"oct"} @tab 256-bit octuple precision. -@end multitable -@end float - -The following example illustrates the effects of changing precision -on arithmetic operations: - -@example -$ @kbd{gawk -M -v PREC=100 'BEGIN @{ x = 1.0e-400; print x + 0} -> @kbd{PREC = "double"; print x + 0 @}'} -@print{} 1e-400 -@print{} 0 -@end example - -Binary and decimal precisions are related approximately, according to the -formula: - -@iftex -@math{prec = 3.322 @cdot dps} -@end iftex -@ifnottex -@ifnotdocbook -@var{prec} = 3.322 * @var{dps} -@end ifnotdocbook -@end ifnottex -@docbook - -prec = 3.322 ⋅ dps @c - -@end docbook - -@noindent -Here, @var{prec} denotes the binary precision -(measured in bits) and @var{dps} (short for decimal places) -is the decimal digits. We can easily calculate how many decimal -digits the 53-bit significand of an IEEE double is equivalent to: -53 / 3.322 which is equal to about 15.95. -But what does 15.95 digits actually mean? It depends whether you are -concerned about how many digits you can rely on, or how many digits -you need. - -It is important to know how many bits it takes to uniquely identify -a double-precision value (the C type @code{double}). If you want to -convert from @code{double} to decimal and back to @code{double} (e.g., -saving a @code{double} representing an intermediate result to a file, and -later reading it back to restart the computation), then a few more decimal -digits are required. 17 digits is generally enough for a @code{double}. - -It can also be important to know what decimal numbers can be uniquely -represented with a @code{double}. If you want to convert -from decimal to @code{double} and back again, 15 digits is the most that -you can get. Stated differently, you should not present -the numbers from your floating-point computations with more than 15 -significant digits in them. - -Conversely, it takes a precision of 332 bits to hold an approximation -of the constant @value{PI} that is accurate to 100 decimal places. - -You should always add some extra bits in order to avoid the confusing round-off -issues that occur because numbers are stored internally in binary. - -@node Setting Rounding Mode -@subsection Setting the Rounding Mode -@cindex @code{ROUNDMODE} variable -@cindex setting rounding mode - -The @code{ROUNDMODE} variable provides -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} -@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 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 -@end float - -@code{ROUNDMODE} has the default value @code{"N"}, -which selects the IEEE 754 rounding mode @code{roundTiesToEven}. -In @ref{table-gawk-rounding-modes}, @code{"A"} is listed to select the IEEE 754 mode -@code{roundTiesToAway}. This is only available -if your version of the MPFR library supports it; otherwise setting -@code{ROUNDMODE} to this value has no effect. @xref{Rounding Mode}, -for the meanings of the various rounding modes. - -Here is an example of how to change the default rounding behavior of -@code{printf}'s output: - -@example -$ @kbd{gawk -M -v ROUNDMODE="Z" 'BEGIN @{ printf("%.2f\n", 1.378) @}'} -@print{} 1.37 -@end example - -@node Floating-point Constants -@subsection Representing Floating-point Constants -@cindex constants, floating-point - -Be wary of floating-point constants! When reading a floating-point constant -from program source code, @command{gawk} uses the default precision (that -of a C @code{double}), unless overridden -by an assignment to the special variable @code{PREC} on the command -line, to store it internally as a MPFR number. -Changing the precision using @code{PREC} in the program text does -@emph{not} change the precision of a constant. If you need to -represent a floating-point constant at a higher precision 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: - -@example -$ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", 0.1) @}'} -@print{} 0.1000000000000000055511151 -$ @kbd{gawk -M -v PREC=113 'BEGIN @{ printf("%0.25f\n", 0.1) @}'} -@print{} 0.1000000000000000000000000 -$ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", "0.1") @}'} -@print{} 0.1000000000000000000000000 -$ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", 1/10) @}'} -@print{} 0.1000000000000000000000000 -@end example - -In the first case, the number is stored with the default precision of 53 bits. - -@node Changing Precision -@subsection Changing the Precision of a Number -@cindex changing precision of a number - -@cindex Laurie, Dirk -@quotation -@i{The point is that in any variable-precision package, -a decision is made on how to treat numbers given as data, -or arising in intermediate results, which are represented in -floating-point format to a precision lower than working precision. -Do we promote them to full membership of the high-precision club, -or do we treat them and all their associates as second-class citizens? -Sometimes the first course is proper, sometimes the second, and it takes -careful analysis to tell which.}@footnote{Dirk Laurie. -@cite{Variable-precision Arithmetic Considered Perilous --- A Detective Story}. -Electronic Transactions on Numerical Analysis. Volume 28, pp. 168-173, 2008.} -@author Dirk Laurie -@end quotation - -@command{gawk} does not implicitly modify the precision of any previously -computed results when the working precision is changed with an assignment -to @code{PREC}. The precision of a number is always the one that was -used at the time of its creation, and there is no way for you -to explicitly change it afterwards. However, since the result of a -floating-point arithmetic operation is always an arbitrary precision -floating-point value---with a precision set by the value of @code{PREC}---one of the -following workarounds effectively accomplishes the desired behavior: - -@example -x = x + 0.0 -@end example - -@noindent -or: - -@example -x += 0.0 -@end example - -@node Exact Arithmetic -@subsection Exact Arithmetic with Floating-point Numbers - -@quotation CAUTION -Never depend on the exactness of floating-point arithmetic, -even for apparently simple expressions! -@end quotation +@node Getting Accuracy +@subsection Getting The Accuracy You Need Can arbitrary precision arithmetic give exact results? There are no easy answers. The standard rules of algebra often do not apply @@ -30717,13 +30094,11 @@ do not hold completely, and order of operation may be important 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 @samp{12.3} -for equality -using the machine double precision arithmetic, it decides that they -are not equal! -(@xref{Floating-point Programming}.) -You can get the result you want by increasing the precision; -56 bits in this case will get the job done: +When @command{gawk} tests the expressions @samp{0.1 + 12.2} and +@samp{12.3} for equality using the machine double precision arithmetic, +it decides that they are not equal! (@xref{Comparing FP Values}.) +You can get the result you want by increasing the precision; 56 bits in +this case does the job: @example $ @kbd{gawk -M -v PREC=56 'BEGIN @{ print (0.1 + 12.2 == 12.3) @}'} @@ -30745,26 +30120,20 @@ is often just an approximation after proper rounding. The test for equality succeeds if and only if @emph{all} bits in the two operands are exactly the same. Since this is not necessarily true after floating-point computations with a particular precision and effective rounding rule, -a straight test for equality may not work. - -So, don't assume that floating-point values can be compared for equality. -You should also exercise caution when using other forms of comparisons. -The standard way to compare two floating-point numbers is to determine -how much error (or @dfn{tolerance}) you will allow in a comparison and -check to see if one value is within this error range of the other. +a straight test for equality may not work. Instead, compare the +two numbers to see if they are within the desirable delta of each other. In applications where 15 or fewer decimal places suffice, hardware double precision arithmetic can be adequate, and is usually much faster. -But you do need to keep in mind that every floating-point operation +But you need to keep in mind that every floating-point operation can suffer a new rounding error with catastrophic consequences as illustrated -by our earlier attempt to compute the value of the constant @value{PI} -(@pxref{Floating-point Programming}). +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 in floating-point arithmetic. In the example in -@ref{Floating-point Programming}: +@ref{Errors accumulate}: @example $ @kbd{gawk 'BEGIN @{} @@ -30780,19 +30149,201 @@ you may or may not succeed in getting the correct result by choosing an arbitrarily large value for @code{PREC}. Reformulation of the problem at hand is often the correct approach in such situations. +@node Try To Round +@subsection Try A Few Extra Bits of Precision and Rounding + +Instead of arbitrary precision floating-point arithmetic, +often all you need is an adjustment of your logic +or a different order for the operations in your calculation. +The stability and the accuracy of the computation of @value{PI} +in the earlier example can be enhanced by using the following +simple algebraic transformation: + +@example +(sqrt(x * x + 1) - 1) / x @equiv{} x / (sqrt(x * x + 1) + 1) +@end example + +@noindent +After making this, change the program converges to +@value{PI} in under 30 iterations: + +@example +$ @kbd{gawk -f pi2.awk} +@print{} 3.215390309173473 +@print{} 3.159659942097501 +@print{} 3.146086215131436 +@print{} 3.142714599645370 +@print{} 3.141873049979825 +@dots{} +@print{} 3.141592653589797 +@print{} 3.141592653589797 +@end example + +@node Setting precision +@subsection Setting The Precision + +@command{gawk} uses a global working precision; it does not keep track of +the precision or accuracy of individual numbers. Performing an arithmetic +operation or calling a built-in function rounds the result to the current +working precision. The default working precision is 53 bits, which you can +modify using the built-in variable @code{PREC}. You can also set the +value to one of the predefined case-insensitive strings +shown in @ref{table-predefined-precision-strings}, +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 +@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. +@item @code{"quad"} @tab Basic 128-bit quadruple precision. +@item @code{"oct"} @tab 256-bit octuple precision. +@end multitable +@end float + +The following example illustrates the effects of changing precision +on arithmetic operations: + +@example +$ @kbd{gawk -M -v PREC=100 'BEGIN @{ x = 1.0e-400; print x + 0} +> @kbd{PREC = "double"; print x + 0 @}'} +@print{} 1e-400 +@print{} 0 +@end example + +@quotation CAUTION +Be wary of floating-point constants! When reading a floating-point +constant from program source code, @command{gawk} uses the default +precision (that of a C @code{double}), unless overridden by an assignment +to the special variable @code{PREC} on the command line, to store it +internally as a MPFR number. Changing the precision using @code{PREC} +in the program text does @emph{not} change the precision of a constant. + +If you need to represent a floating-point constant at a higher precision +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) @}'} +@print{} 0.1000000000000000055511151 +$ @kbd{gawk -M -v PREC=113 'BEGIN @{ printf("%0.25f\n", 0.1) @}'} +@print{} 0.1000000000000000000000000 +$ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", "0.1") @}'} +@print{} 0.1000000000000000000000000 +$ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", 1/10) @}'} +@print{} 0.1000000000000000000000000 +@end example + +@node Setting the rounding mode +@subsection Setting The Rounding Mode + +The @code{ROUNDMODE} variable provides +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} +@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 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 +@end float + +@code{ROUNDMODE} has the default value @code{"N"}, which +selects the IEEE 754 rounding mode @code{roundTiesToEven}. +In @ref{table-gawk-rounding-modes}, the value @code{"A"} selects +@code{roundTiesToAway}. This is only available if your version of the +MPFR library supports it; otherwise setting @code{ROUNDMODE} to @code{"A"} +has no effect. + +The default mode @code{roundTiesToEven} is the most preferred, +but the least intuitive. This method does the obvious thing for most values, +by rounding them up or down to the nearest digit. +For example, rounding 1.132 to two digits yields 1.13, +and rounding 1.157 yields 1.16. + +However, when it comes to rounding a value that is exactly halfway between, +things do not work the way you probably learned in school. +In this case, the number is rounded to the nearest even digit. +So rounding 0.125 to two digits rounds down to 0.12, +but rounding 0.6875 to three digits rounds up to 0.688. +You probably have already encountered this rounding mode when +using @code{printf} to format floating-point numbers. +For example: + +@example +BEGIN @{ + x = -4.5 + for (i = 1; i < 10; i++) @{ + x += 1.0 + printf("%4.1f => %2.0f\n", x, x) + @} +@} +@end example + +@noindent +produces the following output when run on the author's system:@footnote{It +is possible for the output to be completely different if the +C library in your system does not use the IEEE 754 even-rounding +rule to round halfway cases for @code{printf}.} + +@example +-3.5 => -4 +-2.5 => -2 +-1.5 => -2 +-0.5 => 0 + 0.5 => 0 + 1.5 => 2 + 2.5 => 2 + 3.5 => 4 + 4.5 => 4 +@end example + +The theory behind @code{roundTiesToEven} is that it more or less evenly +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 +(@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 +be used for converting floating-point numbers to integers. The rounding +mode @code{roundTiesToAway} rounds the result to the nearest number and +selects the number with the larger magnitude if a tie occurs. + +Some numerical analysts will tell you that your choice of rounding +style has tremendous impact on the final outcome, and advise you to +wait until final output for any rounding. Instead, you can often avoid +round-off error problems by setting the precision initially to some +value sufficiently larger than the final desired precision, so that +the accumulation of round-off error does not influence the outcome. +If you suspect that results from your computation are sensitive to +accumulation of round-off error, look for a significant difference in +output when you change the rounding mode to be sure. + @node Arbitrary Precision Integers @section Arbitrary Precision Integer Arithmetic with @command{gawk} @cindex integers, arbitrary precision @cindex arbitrary precision integers -If one of the options @option{--bignum} or @option{-M} is specified, -@command{gawk} performs all -integer arithmetic using GMP arbitrary precision integers. -Any number that looks like an integer in a program source or @value{DF} -is stored as an arbitrary precision integer. -The size of the integer is limited only by your computer's memory. -The current floating-point context has no effect on operations involving integers. -For example, the following computes +When given one of the options @option{--bignum} or @option{-M}, +@command{gawk} performs all integer arithmetic using GMP arbitrary +precision integers. Any number that looks like an integer in a source +or @value{DF} is stored as an arbitrary precision integer. The size +of the integer is limited only by the available memory. For example, +the following computes @iftex @math{5^{4^{3^{2}}}}, @end iftex @@ -30817,9 +30368,9 @@ $ @kbd{gawk -M 'BEGIN @{} @print{} 62060698786608744707 ... 92256259918212890625 @end example -If you were to compute the same value using arbitrary precision -floating-point values instead, the precision needed for correct output -(using the formula +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}), would be @math{3.322 @cdot 183231}, @@ -30841,8 +30392,8 @@ The result from an arithmetic operation with an integer and a floating-point val is a floating-point value with a precision equal to the working precision. The following program calculates the eighth term in Sylvester's sequence@footnote{Weisstein, Eric W. -@cite{Sylvester's Sequence}. From MathWorld---A Wolfram Web Resource. -@url{http://mathworld.wolfram.com/SylvestersSequence.html}} +@cite{Sylvester's Sequence}. From MathWorld---A Wolfram Web Resource +@w{(@url{http://mathworld.wolfram.com/SylvestersSequence.html}).}} using a recurrence: @example @@ -30862,15 +30413,15 @@ floating-point results exactly. You can either increase the precision @samp{2.0} with an integer, to perform all computations using integer arithmetic to get the correct output. -It will sometimes be necessary for @command{gawk} to implicitly convert an -arbitrary precision integer into an arbitrary precision floating-point value. -This is primarily because the MPFR library does not always provide the -relevant 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 -like this: +Sometimes @command{gawk} must implicitly convert an arbitrary precision +integer into an arbitrary precision floating-point value. This is +primarily because the MPFR library does not always provide the relevant +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 +point first, like this: @example gawk -M 'BEGIN @{ n = 13; print (n + 0.0) % 2.0 @}' @@ -30890,6 +30441,176 @@ to just use the following: gawk -M 'BEGIN @{ n = 13; print n % 2 @}' @end example +@node POSIX Floating Point Problems +@section Standards Versus Existing Practice + +Historically, @command{awk} has converted any non-numeric 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 +(base 8) or hexadecimal numbers (base 16). + +Changes in the language of the +2001 and 2004 POSIX standards can be interpreted to imply that @command{awk} +should support additional features. These features are: + +@itemize @value{BULLET} +@item +Interpretation of floating point data values specified in hexadecimal +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''). +In particular, the format for these values is as specified by the ISO 1999 +C standard, which ignores case and can allow machine-dependent additional +characters after the @samp{nan} and allow either @samp{inf} or @samp{infinity}. +@end itemize + +The first problem is that both of these are clear changes to historical +practice: + +@itemize @value{BULLET} +@item +The @command{gawk} maintainer feels that supporting hexadecimal floating +point values, in particular, is ugly, and was never intended by the +original designers to be part of the language. + +@item +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 +``language lawyering'' to arrive at in the first place, was not even +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 the above 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. + +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. +The solution implemented in @command{gawk} is as follows: + +@itemize @value{BULLET} +@item +With the @option{--posix} command-line option, @command{gawk} becomes +``hands off.'' String values are passed directly to the system library's +@code{strtod()} function, and if it successfully returns a numeric value, +that is what's used.@footnote{You asked for it, you got it.} +By definition, the results are not portable across +different systems. They are also a little surprising: + +@example +$ @kbd{echo nanny | gawk --posix '@{ print $1 + 0 @}'} +@print{} nan +$ @kbd{echo 0xDeadBeef | gawk --posix '@{ print $1 + 0 @}'} +@print{} 3735928559 +@end example + +@item +Without @option{--posix}, @command{gawk} interprets the four strings +@samp{+inf}, +@samp{-inf}, +@samp{+nan}, +and +@samp{-nan} +specially, producing the corresponding special numeric values. +The leading sign acts a signal to @command{gawk} (and the user) +that the value is really numeric. Hexadecimal floating point is +not supported (unless you also use @option{--non-decimal-data}, +which is @emph{not} recommended). For example: + +@example +$ @kbd{echo nanny | gawk '@{ print $1 + 0 @}'} +@print{} 0 +$ @kbd{echo +nan | gawk '@{ print $1 + 0 @}'} +@print{} nan +$ @kbd{echo 0xDeadBeef | gawk '@{ print $1 + 0 @}'} +@print{} 0 +@end example + +@command{gawk} ignores case in the four special values. +Thus @samp{+nan} and @samp{+NaN} are the same. +@end itemize + +@node Floating point summary +@section Summary + +@itemize @value{BULLET} +@item +Most computer arithmetic is done using either integers or floating-point +values. The default for @command{awk} is to use double-precision +floating-point values. + +@item +In the 1980's, Barbie mistakenly said ``Math class is tough!'' +While math isn't tough, floating-point arithmetic isn't the same +as pencil and paper math, and care must be taken: + +@c nested list +@itemize @value{MINUS} +@item +Not all numbers can be represented exactly. + +@item +Comparing values should use a delta, instead of being done directly +with @samp{==} and @samp{!=}. + +@item +Errors accumulate. + +@item +Operations are not always truly associative or distributive. +@end itemize + +@item +Increasing the accuracy can help, but it is not a panacea. + +@item +Often, increasing the accuracy and then rounding to the desired +number of digits produces reasonable results. + +@item +Use either @option{-M} or @option{--bignum} to enable MPFR +arithmetic. Use @code{PREC} to set the precision in bits, and +@code{ROUNDMODE} to set the IEEE 754 rounding mode. + +@item +With @option{-M} or @option{--bignum}, @command{gawk} performs +arbitrary precision integer arithmetic using the GMP library. +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 +numbers where @command{gawk} disagrees with the POSIX standard. +It pays to be aware of them. + +@item +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 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 +of significant decimal digits. + +@item +As general advice, avoid presenting numerical data in a manner that +implies better precision than is actually the case. + +@end itemize + @node Dynamic Extensions @chapter Writing Extensions for @command{gawk} @cindex dynamically loaded extensions @@ -30923,6 +30644,7 @@ When @option{--sandbox} is specified, extensions are disabled @code{gawk}. * gawkextlib:: The @code{gawkextlib} project. * Extension summary:: Extension summary. +* Extension Exercises:: Exercises. @end menu @node Extension Intro @@ -33947,9 +33669,7 @@ everything that needs to be loaded. It is simplest to use the dl_load_func(func_table, filefuncs, "") @end example -And that's it! As an exercise, consider adding functions to -implement system calls such as @code{chown()}, @code{chmod()}, -and @code{umask()}. +And that's it! @node Using Internal File Ops @subsection Integrating The Extensions @@ -34397,9 +34117,6 @@ $ @kbd{gawk -i inplace -v INPLACE_SUFFIX=.bak '@{ gsub(/foo/, "bar") @}} > @kbd{@{ print @}' file1 file2 file3} @end example -We leave it as an exercise to write a wrapper script that presents an -interface similar to @samp{sed -i}. - @node Extension Sample Ord @subsection Character and Numeric values: @code{ord()} and @code{chr()} @@ -34864,6 +34581,29 @@ should be the place to do so. @end itemize +@node Extension Exercises +@section Exercises + +@enumerate +@item +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}. + +@item +(Hard.) +How would you provide namespaces in @command{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 @command{gawk} +maintainer to tell him about it. + +@item +Write a wrapper script that provides an interface similar to +@samp{sed -i} for the ``inplace'' extension presented in +@ref{Extension Sample Inplace}. + +@end enumerate + @ifnotinfo @part @value{PART4}Appendices @end ifnotinfo @@ -35809,7 +35549,7 @@ The support for @samp{next file} as two words was removed completely (@pxref{Nextfile Statement}). @item -Additional commnd line options +Additional command-line options (@pxref{Options}): @itemize @value{MINUS} @@ -36113,7 +35853,7 @@ The @option{-R} option was removed. @item Support for high precision arithmetic with MPFR. -(@pxref{Gawk and MPFR}). +(@pxref{Arbitrary Precision Arithmetic}). @item The @code{and()}, @code{or()} and @code{xor()} functions @@ -38133,7 +37873,7 @@ Wikipedia article}, for information on additional versions. @itemize @value{BULLET} @item -The @command{gawk} distribution is availble from GNU project's main +The @command{gawk} distribution is available from GNU project's main distribution site, @code{ftp.gnu.org}. The canonical build recipe is: @example @@ -39117,7 +38857,7 @@ described in @ref{Dynamic Extensions}. @item @command{gawk}'s extensions can be disabled with either the @option{--traditional} option or with the @option{--posix} option. -The @option{--parsedebug} option is availble if @command{gawk} is +The @option{--parsedebug} option is available if @command{gawk} is compiled with @samp{-DDEBUG}. @item @@ -39339,7 +39079,7 @@ Individual variables, as well as numeric and string variables, are referred to as @dfn{scalar} values. Groups of values, such as arrays, are not scalars. -@ref{General Arithmetic}, provided a basic introduction to numeric +@ref{Computer Arithmetic}, provided a basic introduction to numeric types (integer and floating-point) and how they are used in a computer. Please review that information, including a number of caveats that were presented. @@ -41561,5 +41301,3 @@ which sorta sucks. TODO: ----- -3. Check all docbook figures, if they should include with a -specific extension or not. diff --git a/doc/gawktexi.in b/doc/gawktexi.in index fcaa01a6..8678988a 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -564,6 +564,8 @@ particular records in a file and perform operations upon them. * Read Timeout:: Reading input with a timeout. * Command line directories:: What happens if you put a directory on the command line. +* Input Summary:: Input summary. +* Input Exercises:: Exercises. * Print:: The @code{print} statement. * Print Examples:: Simple examples of @code{print} statements. @@ -587,6 +589,8 @@ 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. +* Output Summary:: Output summary. +* Output exercises:: Exercises. * Values:: Constants, Variables, and Regular Expressions. * Constants:: String, numeric and regexp constants. @@ -629,6 +633,7 @@ particular records in a file and perform operations upon them. * Function Calls:: A function call is an expression. * Precedence:: How various operators nest. * Locales:: How the locale affects things. +* Expressions Summary:: Expressions summary. * Pattern Overview:: What goes into a pattern. * Regexp Patterns:: Using regexps as patterns. * Expression Patterns:: Any expression can be used as a @@ -675,6 +680,7 @@ particular records in a file and perform operations upon them. gives you information. * ARGC and ARGV:: Ways to use @code{ARGC} and @code{ARGV}. +* Pattern Action Summary:: Patterns and Actions summary. * Array Basics:: The basics of arrays. * Array Intro:: Introduction to Arrays * Reference to Elements:: How to examine one element of an @@ -697,6 +703,7 @@ particular records in a file and perform operations upon them. @command{awk}. * Multiscanning:: Scanning multidimensional arrays. * Arrays of Arrays:: True multidimensional arrays. +* Arrays Summary:: Summary of arrays. * Built-in:: Summarizes the built-in functions. * Calling Built-in:: How to call built-in functions. * Numeric Functions:: Functions that work with numbers, @@ -731,6 +738,7 @@ particular records in a file and perform operations upon them. runtime. * Indirect Calls:: Choosing the function to call at runtime. +* Functions Summary:: Summary of functions. * Library Names:: How to best name private global variables in library functions. * General Functions:: Functions that are of general use. @@ -765,6 +773,8 @@ particular records in a file and perform operations upon them. * Group Functions:: Functions for getting group information. * Walking Arrays:: A function to walk arrays of arrays. +* Library Functions Summary:: Summary of library functions. +* Library exercises:: Exercises. * Running Examples:: How to run these examples. * Clones:: Clones of common utilities. * Cut Program:: The @command{cut} utility. @@ -794,6 +804,8 @@ particular records in a file and perform operations upon them. * Anagram Program:: Finding anagrams from a dictionary. * Signature Program:: People do amazing things with too much time on their hands. +* Programs Summary:: Summary of programs. +* Programs Exercises:: Exercises. * Nondecimal Data:: Allowing nondecimal input data. * Array Sorting:: Facilities for controlling array traversal and sorting arrays. @@ -805,6 +817,7 @@ particular records in a file and perform operations upon them. * TCP/IP Networking:: Using @command{gawk} for network programming. * Profiling:: Profiling your @command{awk} programs. +* Advanced Features Summary:: Summary of advanced features. * I18N and L10N:: Internationalization and Localization. * Explaining gettext:: How GNU @command{gettext} works. * Programmer i18n:: Features for the programmer. @@ -816,6 +829,7 @@ particular records in a file and perform operations upon them. * I18N Example:: A simple i18n example. * Gawk I18N:: @command{gawk} is also internationalized. +* I18N Summary:: Summary of I18N stuff. * Debugging:: Introduction to @command{gawk} debugger. * Debugging Concepts:: Debugging in General. @@ -834,31 +848,23 @@ particular records in a file and perform operations upon them. * Miscellaneous Debugger Commands:: Miscellaneous Commands. * Readline Support:: Readline support. * Limitations:: Limitations and future plans. -* General Arithmetic:: An introduction to computer - arithmetic. -* Floating Point Issues:: Stuff to know about floating-point - numbers. -* String Conversion Precision:: The String Value Can Lie. -* Unexpected Results:: Floating Point Numbers Are Not - Abstract Numbers. -* POSIX Floating Point Problems:: Standards Versus Existing Practice. -* Integer Programming:: Effective integer programming. -* Floating-point Programming:: Effective Floating-point Programming. -* Floating-point Representation:: Binary floating-point representation. -* Floating-point Context:: Floating-point context. -* Rounding Mode:: Floating-point rounding mode. -* Gawk and MPFR:: How @command{gawk} provides - arbitrary-precision arithmetic. -* Arbitrary Precision Floats:: Arbitrary Precision Floating-point - Arithmetic with @command{gawk}. -* Setting Precision:: Setting the working precision. -* Setting Rounding Mode:: Setting the rounding mode. -* Floating-point Constants:: Representing floating-point constants. -* Changing Precision:: Changing the precision of a number. -* Exact Arithmetic:: Exact arithmetic with floating-point - numbers. +* Debugging Summary:: Debugging summary. +* Computer Arithmetic:: A quick intro to computer math. +* Math Definitions:: Defining terms used. +* MPFR features:: The MPFR features in @command{gawk}. +* FP Math Caution:: Things to know. +* Inexactness of computations:: Floating point math is not exact. +* Inexact representation:: Numbers are not exactly represented. +* Comparing FP Values:: How to compare floating point values. +* Errors accumulate:: Errors get bigger as they go. +* Getting Accuracy:: Getting more accuracy takes some work. +* Try To Round:: Add digits and round. +* Setting precision:: How to set the precision. +* Setting the rounding mode:: How to set the rounding mode. * Arbitrary Precision Integers:: Arbitrary Precision Integer Arithmetic with @command{gawk}. +* POSIX Floating Point Problems:: Standards Versus Existing Practice. +* Floating point summary:: Summary of floating point discussion. * Extension Intro:: What is an extension. * Plugin License:: A note about licensing. * Extension Mechanism Outline:: An outline of how it works. @@ -920,6 +926,8 @@ particular records in a file and perform operations upon them. * Extension Sample Time:: An interface to @code{gettimeofday()} and @code{sleep()}. * gawkextlib:: The @code{gawkextlib} project. +* Extension summary:: Extension summary. +* Extension Exercises:: Exercises. * V7/SVR3.1:: The major changes between V7 and System V Release 3.1. * SVR4:: Minor changes between System V @@ -936,6 +944,7 @@ particular records in a file and perform operations upon them. ranges. * Contributors:: The major contributors to @command{gawk}. +* History summary:: History summary. * Gawk Distribution:: What is in the @command{gawk} distribution. * Getting:: How to get the distribution. @@ -974,6 +983,7 @@ particular records in a file and perform operations upon them. * Bugs:: Reporting Problems and Bugs. * Other Versions:: Other freely available @command{awk} implementations. +* Installation summary:: Summary of installation. * Compatibility Mode:: How to disable certain @command{gawk} extensions. * Additions:: Making Additions To @command{gawk}. @@ -994,6 +1004,7 @@ particular records in a file and perform operations upon them. * Extension Other Design Decisions:: Some other design decisions. * Extension Future Growth:: Some room for future growth. * Old Extension Mechanism:: Some compatibility for old extensions. +* Notes summary:: Summary of implementation notes. * Basic High Level:: The high level view. * Basic Data Typing:: A very quick intro to data types. @end detailmenu @@ -2985,7 +2996,7 @@ the program would print the odd-numbered lines. The @command{awk} utility reads the input files one line at a time. For each line, @command{awk} tries the patterns of each of the rules. -If several patterns match, then several actions execture in the order in +If several patterns match, then several actions execute in the order in which they appear in the @command{awk} program. If no patterns match, then no actions run. @@ -3721,7 +3732,7 @@ care to search for all occurrences of each inappropriate construct. As @cindex @option{--bignum} option Force arbitrary precision arithmetic on numbers. This option has no effect if @command{gawk} is not compiled to use the GNU MPFR and MP libraries -(@pxref{Gawk and MPFR}). +(@pxref{Arbitrary Precision Arithmetic}). @item @option{-n} @itemx @option{--non-decimal-data} @@ -5770,7 +5781,7 @@ to be matched. Regexp operators provide grouping, alternation and repetition. @item -Bracket expressions give you a shorthand for specifyings sets +Bracket expressions give you a shorthand for specifying sets of characters that can match at a particular point in a regexp. Within bracket expressions, POSIX character classes let you specify certain groups of characters in a locale-independent fashion. @@ -8186,7 +8197,7 @@ This can also be done using command-line variable assignment. @code{PROCINFO["FS"]} can be used to see how fields are being split. @item -Use @code{getline} in its varioius 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 co-process. @item @@ -8259,7 +8270,7 @@ and discusses the @code{close()} built-in function. descriptors. * Close Files And Pipes:: Closing Input and Output Files and Pipes. * Output Summary:: Output summary. -* Output exercises:: Exercises. +* Output exercises:: Exercises. @end menu @node Print @@ -8658,7 +8669,7 @@ infinity are formatted as and positive infinity as @samp{inf} and @samp{infinity}. The special ``not a number'' value formats as @samp{-nan} or @samp{nan} -(@pxref{General Arithmetic}). +(@pxref{Math Definitions}). @item @code{%F} Like @samp{%f} but the infinity and ``not a number'' values are spelled @@ -9471,7 +9482,7 @@ file or command, or the next @code{print} or @code{printf} to that file or command, reopens the file or reruns the command. Because the expression that you use to close a file or pipeline must exactly match the expression used to open the file or run the command, -it is good practice to use a valueiable to store the @value{FN} or command. +it is good practice to use a variable to store the @value{FN} or command. The previous example becomes the following: @example @@ -13677,13 +13688,13 @@ character. (@xref{Output Separators}.) @cindex @code{PREC} variable @item PREC # The working precision of arbitrary precision floating-point numbers, -53 bits by default (@pxref{Setting Precision}). +53 bits by default (@pxref{Setting precision}). @cindex @code{ROUNDMODE} variable @item ROUNDMODE # The rounding mode to use for arbitrary precision arithmetic on numbers, by default @code{"N"} (@samp{roundTiesToEven} in -the IEEE 754 standard; @pxref{Setting Rounding Mode}). +the IEEE 754 standard; @pxref{Setting the rounding mode}). @cindex @code{RS} variable @cindex separators, for records @@ -13996,7 +14007,7 @@ The version of @command{gawk}. The following additional elements in the array are available to provide information about the MPFR and GMP libraries if your version of @command{gawk} supports arbitrary precision numbers -(@pxref{Gawk and MPFR}): +(@pxref{Arbitrary Precision Arithmetic}): @table @code @cindex version of GNU MPFR library @@ -19169,7 +19180,7 @@ some of standard functions, typically in the form of additional arguments. @item Functions accept zero or more arguments and return a value. The -expressions that provide the argument values are comnpletely evaluated +expressions that provide the argument values are completely evaluated before the function is called. Order of evaluation is not defined. The return value can be ignored. @@ -19181,7 +19192,7 @@ but that function still requires care in its use. @item User-defined functions provide important capabilities but come with some syntactic inelegancies. In a function call, there cannot be any -space between the function name and the opening left parethesis of the +space between the function name and the opening left parenthesis of the argument list. Also, there is no provision for local variables, so the convention is to add extra parameters, and to separate them visually from the real parameters by extra whitespace. @@ -21511,7 +21522,7 @@ 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:johnny,jay,arsenio +tvpeople:*:101:johny,jay,arsenio tvpeople:*:101:david,conan,tom,joan @end example @@ -21838,6 +21849,7 @@ Many of these programs use library functions presented in * Clones:: Clones of common utilities. * Miscellaneous Programs:: Some interesting @command{awk} programs. * Programs Summary:: Summary of programs. +* Programs Exercises:: Exercises. @end menu @node Running Examples @@ -22224,7 +22236,6 @@ of picking the input line apart by characters. @c ENDOFRANGE ficut @c ENDOFRANGE colcut -@c Exercise: Rewrite using split with "". @node Egrep Program @subsection Searching for Regular Expressions in Files @@ -22374,8 +22385,6 @@ if a match happens, we output the translated line, not the original.} The rule is commented out since it is not necessary with @command{gawk}: -@c Exercise: Fix this, w/array and new line as key to original line - @example @c file eg/prog/egrep.awk #@{ @@ -22662,12 +22671,6 @@ The @code{pr_first_field()} function simply isolates out some code that is used repeatedly, making the whole program slightly shorter and cleaner. -@c exercise!!! -@ignore -The POSIX version of @command{id} takes options that control which -information is printed. Modify this version to accept the same -arguments and perform in the same way. -@end ignore @c ENDOFRANGE id @node Split Program @@ -22788,8 +22791,6 @@ moves to the next letter in the alphabet and @code{s2} starts over again at @c endfile @end example -@c Exercise: do this with just awk builtin functions, index("abc..."), substr, etc. - @noindent The @code{usage()} function simply prints an error message and exits: @@ -22813,8 +22814,6 @@ instead of doing it in an @code{END} rule. It also assumes that letters are contiguous in the character set, which isn't true for EBCDIC systems. -@c Exercise: Fix these problems. -@c BFD... @c ENDOFRANGE filspl @c ENDOFRANGE split @@ -23325,18 +23324,10 @@ function beginfile(file) @c endfile @end example -The @code{endfile()} function adds the current file's numbers to the running -totals of lines, words, and characters.@footnote{@command{wc} can't just use the value of -@code{FNR} in @code{endfile()}. If you examine -the code in -@ref{Filetrans Function}, -you will see that -@code{FNR} has already been reset by the time -@code{endfile()} is called.} It then prints out those numbers -for the file that was just read. It relies on @code{beginfile()} to reset the -numbers for the following @value{DF}: -@c FIXME: ONE DAY: make the above footnote an exercise, -@c instead of giving away the answer. +The @code{endfile()} function adds the current file's numbers to the +running totals of lines, words, and characters. It then prints out those +numbers for the file that was just read. It relies on @code{beginfile()} +to reset the numbers for the following @value{DF}: @example @c file eg/prog/wc.awk @@ -23735,7 +23726,6 @@ and @code{gsub()} built-in functions (@pxref{String Functions}).@footnote{This program was written before @command{gawk} acquired the ability to split each character in a string into separate array elements.} -@c Exercise: How might you use this new feature to simplify the program? There are two functions. The first, @code{stranslate()}, takes three arguments: @@ -24368,11 +24358,7 @@ the array @code{a}, using the @code{split()} function The @samp{@@} symbol is used as the separator character. Each element of @code{a} that is empty indicates two successive @samp{@@} symbols in the original line. For each two empty elements (@samp{@@@@} in -the original file), we have to add a single @samp{@@} symbol back -in.@footnote{This program was written before @command{gawk} had the -@code{gensub()} function. -@c exercise!! -Consider how you might use it to simplify the code.} +the original file), we have to add a single @samp{@@} symbol back in. When the processing of the array is finished, @code{join()} is called with the value of @code{SUBSEP} (@pxref{Multidimensional}), @@ -24562,26 +24548,6 @@ The @code{usage()} function prints an error message and exits. Finally, the single rule handles the printing scheme outlined above, using @code{print} or @code{printf} as appropriate, depending upon the value of @code{RT}. - -@ignore -Exercise, compare the performance of this version with the more -straightforward: - -BEGIN { - pat = ARGV[1] - repl = ARGV[2] - ARGV[1] = ARGV[2] = "" -} - -{ gsub(pat, repl); print } - -Exercise: what are the advantages and disadvantages of this version versus sed? - Advantage: egrep regexps - speed (?) - Disadvantage: no & in replacement text - -Others? -@end ignore @c ENDOFRANGE awksed @node Igawk Program @@ -25024,8 +24990,6 @@ Not trying to save the line read with @code{getline} in the @code{pathto()} function when testing for the file's accessibility for use with the main program simplifies things considerably. -@c what problem does this engender though - exercise -@c answer, reading from "-" or /dev/stdin @item Using a @code{getline} loop in the @code{BEGIN} rule does it all in one @@ -25053,37 +25017,6 @@ With @command{igawk}, there is no real reason to build @code{@@include} processing into @command{gawk} itself. @end ignore - -@cindex search paths -@cindex search paths, for source files -@cindex source files@comma{} search path for -@cindex files, source@comma{} search path for -@cindex directories, searching -As an additional example of this, consider the idea of having two -files in a directory in the search path: - -@table @file -@item default.awk -This file contains a set of default library functions, such -as @code{getopt()} and @code{assert()}. - -@item site.awk -This file contains library functions that are specific to a site or -installation; i.e., locally developed functions. -Having a separate file allows @file{default.awk} to change with -new @command{gawk} releases, without requiring the system administrator to -update it each time by adding the local functions. -@end table - -One user -@c Karl Berry, karl@ileaf.com, 10/95 -suggested that @command{gawk} be modified to automatically read these files -upon startup. Instead, it would be very simple to modify @command{igawk} -to do this. Since @command{igawk} can process nested @code{@@include} -directives, @file{default.awk} could simply contain @code{@@include} -statements for the desired library functions. - -@c Exercise: make this change @c ENDOFRANGE libfex @c ENDOFRANGE flibex @c ENDOFRANGE awkpex @@ -25221,8 +25154,6 @@ babery yabber @dots{} @end example -@c Exercise: Avoid the use of external sort command - @c ENDOFRANGE anagram @node Signature Program @@ -25373,6 +25304,136 @@ mailing labels, and finding anagrams. @end itemize +@node Programs Exercises +@section Exercises + +@enumerate +@item +Rewrite @file{cut.awk} (@pxref{Cut Program}) +using @code{split()} with @code{""} as the seperator. + +@item +In @ref{Egrep Program}, we mentioned that @samp{egrep -i} could be +simulated in versions of @command{awk} without @code{IGNORECASE} by +using @code{tolower()} on the line and the pattern. In a footnote there, +we also mentioned that this solution has a bug: the translated line is +output, and not the original one. Fix this problem. +@c Exercise: Fix this, w/array and new line as key to original line + +@item +The POSIX version of @command{id} takes options that control which +information is printed. Modify the @command{awk} version +(@pxref{Id Program}) to accept the same arguments and perform in the +same way. + +@item +The @code{split.awk} program (@pxref{Split Program}) uses +the @code{chr()} and @code{ord()} functions to move through the +letters of the alphabet. +Modify the program to instead use only the @command{awk} +built-in functions, such as @code{index()} and @code{substr()}. + +@item +The @code{split.awk} program (@pxref{Split Program}) assumes +that letters are contiguous in the character set, +which isn't true for EBCDIC systems. +Fix this problem. + +@item +Why can't the @file{wc.awk} program (@pxref{Wc Program}) just +use the value of @code{FNR} in @code{endfile()}? +Hint: examine the code in @ref{Filetrans Function}. + +@ignore +@command{wc} can't just use the value of @code{FNR} in +@code{endfile()}. If you examine the code in @ref{Filetrans Function}, +you will see that @code{FNR} has already been reset by the time +@code{endfile()} is called. +@end ignore + +@item +Manipulation of individual characters in the @command{translate} program +(@pxref{Translate Program}) is painful using standard @command{awk} +functions. Given that @command{gawk} can split strings into individual +characters using @code{""} as the separator, how might you use this +feature to simplify the program? + +@item +The @file{extract.awk} program (@pxref{Extract Program}) was written +before @command{gawk} had the @code{gensub()} function. Use it +to simplify the code. + +@item +Compare the performance of the @file{awksed.awk} program +(@pxref{Simple Sed}) with the more straightforward: + +@example +BEGIN @{ + pat = ARGV[1] + repl = ARGV[2] + ARGV[1] = ARGV[2] = "" +@} + +@{ gsub(pat, repl); print @} +@end example + +@item +What are the advantages and disadvantages of @file{awksed.awk} versus +the real @command{sed} utility? + +@ignore + Advantage: egrep regexps + speed (?) + Disadvantage: no & in replacement text + +Others? +@end ignore + +@item +In @ref{Igawk Program}, we mentioned that not trying to save the line +read with @code{getline} in the @code{pathto()} function when testing +for the file's accessibility for use with the main program simplifies +things considerably. What problem does this engender though? +@c answer, reading from "-" or /dev/stdin + +@cindex search paths +@cindex search paths, for source files +@cindex source files@comma{} search path for +@cindex files, source@comma{} search path for +@cindex directories, searching +@item +As an additional example of the idea that it is not always necessary to +add new features to a program, consider the idea of having two files in +a directory in the search path: + +@table @file +@item default.awk +This file contains a set of default library functions, such +as @code{getopt()} and @code{assert()}. + +@item site.awk +This file contains library functions that are specific to a site or +installation; i.e., locally developed functions. +Having a separate file allows @file{default.awk} to change with +new @command{gawk} releases, without requiring the system administrator to +update it each time by adding the local functions. +@end table + +One user +@c Karl Berry, karl@ileaf.com, 10/95 +suggested that @command{gawk} be modified to automatically read these files +upon startup. Instead, it would be very simple to modify @command{igawk} +to do this. Since @command{igawk} can process nested @code{@@include} +directives, @file{default.awk} could simply contain @code{@@include} +statements for the desired library functions. +Make this change. + +@item +Modify @file{anagram.awk} (@pxref{Anagram Program}), to avoid +the use of the external @command{sort} utility. + +@end enumerate + @ifnotinfo @part @value{PART3}Moving Beyond Standard @command{awk} With @command{gawk} @end ifnotinfo @@ -27390,7 +27451,7 @@ the program for grouping all messages and other data together. @item You mark a program's strings for translation by preceding them with an underscore. Once that is done, the strings are extracted into a -@file{.pot} file. This file is copied for each langauge into a @file{.po} +@file{.pot} file. This file is copied for each language into a @file{.po} file, and the @file{.po} files are compiled into @file{.gmo} files for use at runtime. @@ -28754,444 +28815,291 @@ and editing. @cindex infinite precision @cindex floating-point, numbers@comma{} arbitrary precision -@cindex Knuth, Donald -@quotation -@i{There's a credibility gap: We don't know how much of the computer's answers -to believe. Novice computer users solve this problem by implicitly trusting -in the computer as an infallible authority; they tend to believe that all -digits of a printed answer are significant. Disillusioned computer users have -just the opposite approach; they are constantly afraid that their answers -are almost meaningless.}@footnote{Donald E.@: Knuth. -@cite{The Art of Computer Programming}. Volume 2, -@cite{Seminumerical Algorithms}, third edition, -1998, ISBN 0-201-89683-4, p.@: 229.} -@author Donald Knuth -@end quotation - -This @value{CHAPTER} discusses issues that you may encounter -when performing arithmetic. It begins by discussing some of -the general attributes of computer arithmetic, along with how -this can influence what you see when running @command{awk} programs. -This discussion applies to all versions of @command{awk}. - -The @value{CHAPTER} then moves on to describe @dfn{arbitrary precision -arithmetic}, a feature which is specific to @command{gawk}. +This @value{CHAPTER} introduces some basic concepts relating to +how computers do arithmetic and briefly lists the features in +@command{gawk} for performing arbitrary precision floating point +computations. It then proceeds to describe floating-point arithmetic, +which is what @command{awk} uses for all its computations, including a +discussion of arbitrary precision floating point arithmetic, which is +a feature available only in @command{gawk}. It continues on to present +arbitrary precision integers, and concludes with a description of some +points where @command{gawk} and the POSIX standard are not quite in +agreement. @menu -* General Arithmetic:: An introduction to computer arithmetic. -* Floating-point Programming:: Effective Floating-point Programming. -* Gawk and MPFR:: How @command{gawk} provides - arbitrary-precision arithmetic. -* Arbitrary Precision Floats:: Arbitrary Precision Floating-point Arithmetic - with @command{gawk}. -* Arbitrary Precision Integers:: Arbitrary Precision Integer Arithmetic with - @command{gawk}. +* Computer Arithmetic:: A quick intro to computer math. +* Math Definitions:: Defining terms used. +* MPFR features:: The MPFR features in @command{gawk}. +* FP Math Caution:: Things to know. +* Arbitrary Precision Integers:: Arbitrary Precision Integer Arithmetic with + @command{gawk}. +* POSIX Floating Point Problems:: Standards Versus Existing Practice. +* Floating point summary:: Summary of floating point discussion. @end menu -@node General Arithmetic +@node Computer Arithmetic @section A General Description of Computer Arithmetic -@cindex integers -@cindex floating-point, numbers -@cindex numbers, floating-point -Within computers, there are two kinds of numeric values: @dfn{integers} -and @dfn{floating-point}. -In school, integer values were referred to as ``whole'' numbers---that is, -numbers without any fractional part, such as 1, 42, or @minus{}17. +Until now, we have worked with data as either numbers or +strings. Ultimately, however, computers represent everything in terms +of @dfn{binary digits}, or @dfn{bits}. A decimal digit can take on any +of 10 values: zero through nine. A binary digit can take on any of two +values, zero or one. Using binary, computers (and computer software) +can represent and manipulate numerical and character data. In general, +the more bits you can use to represent a particular thing, the greater +the range of possible values it can take on. + +Modern computers support at least two, and often more, ways to do +arithmetic. Each kind of arithmetic uses a different representation +(organization of the bits) for the numbers. The kinds of arithmetic +that interest us are: + +@table @asis +@item Decimal arithmetic +This is the kind of arithmetic you learned in elementary school, using +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 +need a special software library to provide access to these instructions. +There are also libraries that do decimal arithmetic entirely in software. + +Despite the fact that some users expect @command{gawk} to be performing +decimal arithmetic,@footnote{We don't know why they expect this, but +they do.} it does not do so. + +@item Integer arithmetic +In school, integer values were referred to as ``whole'' numbers---that +is, numbers without any fractional part, such as 1, 42, or @minus{}17. The advantage to integer numbers is that they represent values exactly. -The disadvantage is that their range is limited. On most systems, -this range is @minus{}2,147,483,648 to 2,147,483,647. -However, many systems now support a range from -@minus{}9,223,372,036,854,775,808 to 9,223,372,036,854,775,807. +The disadvantage is that their range is limited. @cindex unsigned integers @cindex integers, unsigned -Integer values come in two flavors: @dfn{signed} and @dfn{unsigned}. -Signed values may be negative or positive, with the range of values just -described. -Unsigned values are always positive. On most systems, -the range is from 0 to 4,294,967,295. -However, many systems now support a range from -0 to 18,446,744,073,709,551,615. - -@cindex double precision floating-point -@cindex single precision floating-point -Floating-point numbers represent what are called ``real'' numbers; i.e., -those that do have a fractional part, such as 3.1415927. -The advantage to floating-point numbers is that they -can represent a much larger range of values. -The disadvantage is that there are numbers that they cannot represent -exactly. -@command{awk} uses @dfn{double precision} floating-point numbers, which -can hold more digits than @dfn{single precision} -floating-point numbers. - -There a several important issues to be aware of, described next. +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 (that is, 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 +floating point arithmetic. + +@item Floating point arithmetic +Floating-point numbers represent what were called in school ``real'' +numbers; i.e., those that have a fractional part, such as 3.1415927. +The advantage to floating-point numbers is that they can represent a +much larger range of values than can integers. The disadvantage is that +there are numbers that they cannot represent exactly. + +Modern systems support floating point arithmetic in hardware, with a +limited range of values. There are software libraries that allow +the use of arbitrary precision floating point calculations. + +POSIX @command{awk} uses @dfn{double precision} floating-point numbers, which +can hold more digits than @dfn{single precision} floating-point numbers. +@command{gawk} has facilities for performing arbitrary precision floating +point arithmetic, which we describe in more detail shortly. +@end table -@menu -* Floating Point Issues:: Stuff to know about floating-point numbers. -* Integer Programming:: Effective integer programming. -@end menu +Computers work with integer and floating point values of different +ranges. Integer values are usually either 32 or 64 bits in size. Single +precision floating point values occupy 32 bits, whereas double precision +floating point values occupy 64 bits. Floating point values are always +signed. The possible ranges of values are shown in the following table. + +@multitable @columnfractions .34 .33 .33 +@headitem Numeric representation @tab Miniumum value @tab Maximum value +@item 32-bit signed integer @tab @minus{}2,147,483,648 @tab 2,147,483,647 +@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} +@end multitable -@node Floating Point Issues -@subsection Floating-Point Number Caveats +@node Math Definitions +@section Other Stuff To Know -This @value{SECTION} describes some of the issues -involved in using floating-point numbers. +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. -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 worth reading if you are interested in the details, -but it does require a background in computer science. +@table @dfn +@item Accuracy +A floating-point calculation's accuracy is how close it comes +to the real (paper and pencil) value. -@menu -* String Conversion Precision:: The String Value Can Lie. -* Unexpected Results:: Floating Point Numbers Are Not Abstract - Numbers. -* POSIX Floating Point Problems:: Standards Versus Existing Practice. -@end menu +@item Error +The difference between what the result of a computation ``should be'' +and what it actually is. It is best to minimize error as much +as possible. -@node String Conversion Precision -@subsubsection The String Value Can Lie +@item Exponent +The order of magnitude of a value; +some number of bits in a floating-point value store the exponent. -Internally, @command{awk} keeps both the numeric value -(double precision floating-point) and the string value for a variable. -Separately, @command{awk} keeps -track of what type the variable has -(@pxref{Typing and Comparison}), -which plays a role in how variables are used in comparisons. +@item Inf +A special value representing infinity. Operations involving another +number and infinity produce infinity. -It is important to note that the string value for a number may not -reflect the full value (all the digits) that the numeric value -actually contains. -The following program, @file{values.awk}, illustrates this: +@item NaN +``Not A Number.'' A special value indicating a result that can't +happen in real math, but that can happen in floating-point computations. -@example -@{ - sum = $1 + $2 - # see it for what it is - printf("sum = %.12g\n", sum) - # use CONVFMT - a = "<" sum ">" - print "a =", a - # use OFMT - print "sum =", sum -@} -@end example +@item Normalized +How the significand (see later in this list) is usually stored. The +value is adjusted so that the first bit is one, and then that leading +one is assumed instead of physically stored. This provides one +extra bit of precision. -@noindent -This program shows the full value of the sum of @code{$1} and @code{$2} -using @code{printf}, and then prints the string values obtained -from both automatic conversion (via @code{CONVFMT}) and -from printing (via @code{OFMT}). +@item Precision +The number of bits used to represent a floating-point number. +The more bits, the more digits you can represent. +Binary and decimal precisions are related approximately, according to the +formula: -Here is what happens when the program is run: +@display +@iftex +@math{prec = 3.322 @cdot dps} +@end iftex +@ifnottex +@ifnotdocbook +@var{prec} = 3.322 * @var{dps} +@end ifnotdocbook +@end ifnottex +@docbook + +prec = 3.322 ⋅ dps @c + +@end docbook +@end display -@example -$ @kbd{echo 3.654321 1.2345678 | awk -f values.awk} -@print{} sum = 4.8888888 -@print{} a = <4.88889> -@print{} sum = 4.88889 -@end example +@noindent +Here, @var{prec} denotes the binary precision +(measured in bits) and @var{dps} (short for decimal places) +is the decimal digits. + +@item Rounding mode +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 +to the power of the exponent. For example, in @code{1.2345e67}, +the significand is @code{1.2345}. + +@item Stability +From @uref{http://en.wikipedia.org/wiki/Numerical_stability, +the Wikipedia article on numerical stability}: +``Calculations that can be proven not to magnify approximation errors +are called @dfn{numerically stable}.'' +@end table -This makes it clear that the full numeric value is different from -what the default string representations show. +See @uref{http://en.wikipedia.org/wiki/Accuracy_and_precision, +the Wikipedia article on accuracy and precision} for more information +on some of those terms. -@code{CONVFMT}'s default value is @code{"%.6g"}, which yields a value with -at most six significant digits. For some applications, you might want to -change it to specify more precision. -On most modern machines, most of the time, -17 digits is enough to capture a floating-point number's -value exactly.@footnote{Pathological cases can require up to -752 digits (!), but we doubt that you need to worry about this.} +On modern systems, floating-point hardware uses the representation and +operations defined by the IEEE 754 standard. +Three of the standard IEEE 754 types are 32-bit single precision, +64-bit double precision and 128-bit quadruple precision. +The standard also specifies extended precision formats +to allow greater precisions and larger exponent ranges. +(@command{awk} uses only the 64-bit double precision format.) -@node Unexpected Results -@subsubsection Floating Point Numbers Are Not Abstract Numbers - -@cindex floating-point, numbers -Unlike numbers in the abstract sense (such as what you studied in high school -or college arithmetic), numbers stored in computers are limited in certain ways. -They cannot represent an infinite number of digits, nor can they always -represent things exactly. -In particular, -floating-point numbers cannot -always represent values exactly. Here is an example: - -@example -$ @kbd{awk '@{ printf("%010d\n", $1 * 100) @}'} -515.79 -@print{} 0000051579 -515.80 -@print{} 0000051579 -515.81 -@print{} 0000051580 -515.82 -@print{} 0000051582 -@kbd{Ctrl-d} -@end example +@ref{table-ieee-formats} lists the precision and exponent +field values for the basic IEEE 754 binary formats: -@noindent -This shows that some values can be represented exactly, -whereas others are only approximated. This is not a ``bug'' -in @command{awk}, but simply an artifact of how computers -represent numbers. +@float Table,table-ieee-formats +@caption{Basic IEEE Format Context Values} +@multitable @columnfractions .20 .20 .20 .20 .20 +@headitem Name @tab Total bits @tab Precision @tab emin @tab emax +@item Single @tab 32 @tab 24 @tab @minus{}126 @tab +127 +@item Double @tab 64 @tab 53 @tab @minus{}1022 @tab +1023 +@item Quadruple @tab 128 @tab 113 @tab @minus{}16382 @tab +16383 +@end multitable +@end float @quotation NOTE -It cannot be emphasized enough that the behavior just -described is fundamental to modern computers. You will -see this kind of thing happen in @emph{any} programming -language using hardware floating-point numbers. It is @emph{not} -a bug in @command{gawk}, nor is it something that can be ``just -fixed.'' +The precision numbers include the implied leading one that gives them +one extra bit of significand. @end quotation -@cindex negative zero -@cindex positive zero -@cindex zero@comma{} negative vs.@: positive -Another peculiarity of floating-point numbers on modern systems -is that they often have more than one representation for the number zero! -In particular, it is possible to represent ``minus zero'' as well as -regular, or ``positive'' zero. - -This example shows that negative and positive zero are distinct values -when stored internally, but that they are in fact equal to each other, -as well as to ``regular'' zero: +@node MPFR features +@section Arbitrary Precison Arithmetic Features In @command{gawk} -@example -$ @kbd{gawk 'BEGIN @{ mz = -0 ; pz = 0} -> @kbd{printf "-0 = %g, +0 = %g, (-0 == +0) -> %d\n", mz, pz, mz == pz} -> @kbd{printf "mz == 0 -> %d, pz == 0 -> %d\n", mz == 0, pz == 0} -> @kbd{@}'} -@print{} -0 = -0, +0 = 0, (-0 == +0) -> 1 -@print{} mz == 0 -> 1, pz == 0 -> 1 -@end example - -It helps to keep this in mind should you process numeric data -that contains negative zero values; the fact that the zero is negative -is noted and can affect comparisons. - -@node POSIX Floating Point Problems -@subsubsection Standards Versus Existing Practice - -Historically, @command{awk} has converted any non-numeric 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 -(base 8) or hexadecimal numbers (base 16). - -Changes in the language of the -2001 and 2004 POSIX standards can be interpreted to imply that @command{awk} -should support additional features. These features are: - -@itemize @value{BULLET} -@item -Interpretation of floating point data values specified in hexadecimal -notation (@samp{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''). -In particular, the format for these values is as specified by the ISO 1999 -C standard, which ignores case and can allow machine-dependent additional -characters after the @samp{nan} and allow either @samp{inf} or @samp{infinity}. -@end itemize - -The first problem is that both of these are clear changes to historical -practice: - -@itemize @value{BULLET} -@item -The @command{gawk} maintainer feels that supporting hexadecimal floating -point values, in particular, is ugly, and was never intended by the -original designers to be part of the language. - -@item -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 -``language lawyering'' to arrive at in the first place, was not even -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 the above 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. - -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. -The solution implemented in @command{gawk} is as follows: - -@itemize @value{BULLET} -@item -With the @option{--posix} command-line option, @command{gawk} becomes -``hands off.'' String values are passed directly to the system library's -@code{strtod()} function, and if it successfully returns a numeric value, -that is what's used.@footnote{You asked for it, you got it.} -By definition, the results are not portable across -different systems. They are also a little surprising: +By default, @command{gawk} uses the double precision floating point values +supplied by the hardware of the system it runs on. However, if it was +compiled to do, @command{gawk} uses the @uref{http://www.mpfr.org, GNU +MPFR} and @uref{http://gmplib.org, GNU MP} (GMP) libraries for arbitrary +precision arithmetic on numbers. You can see if MPFR support is available +like so: @example -$ @kbd{echo nanny | gawk --posix '@{ print $1 + 0 @}'} -@print{} nan -$ @kbd{echo 0xDeadBeef | gawk --posix '@{ print $1 + 0 @}'} -@print{} 3735928559 +$ @kbd{gawk --version} +@print{} GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2) +@print{} Copyright (C) 1989, 1991-2014 Free Software Foundation. +@dots{} @end example -@item -Without @option{--posix}, @command{gawk} interprets the four strings -@samp{+inf}, -@samp{-inf}, -@samp{+nan}, -and -@samp{-nan} -specially, producing the corresponding special numeric values. -The leading sign acts a signal to @command{gawk} (and the user) -that the value is really numeric. Hexadecimal floating point is -not supported (unless you also use @option{--non-decimal-data}, -which is @emph{not} recommended). For example: +@noindent +(You may see different version numbers than what's shown here. That's OK; +what's important is to see that GNU MPFR and GNU MP are listed in +the output.) -@example -$ @kbd{echo nanny | gawk '@{ print $1 + 0 @}'} -@print{} 0 -$ @kbd{echo +nan | gawk '@{ print $1 + 0 @}'} -@print{} nan -$ @kbd{echo 0xDeadBeef | gawk '@{ print $1 + 0 @}'} -@print{} 0 -@end example +Additionally, there are a few elements available in the @code{PROCINFO} +array to provide information about the MPFR and GMP libraries +(@pxref{Auto-set}). -@command{gawk} ignores case in the four special values. -Thus @samp{+nan} and @samp{+NaN} are the same. -@end itemize +The MPFR library provides precise control over precisions and rounding +modes, and gives correctly rounded, reproducible, platform-independent +results. With either of the command-line options @option{--bignum} or +@option{-M}, all floating-point arithmetic operators and numeric functions +can yield results to any desired precision level supported by MPFR. -@node Integer Programming -@subsection Mixing Integers And Floating-point - -As has been mentioned already, @command{awk} uses hardware double -precision with 64-bit IEEE binary floating-point representation -for numbers on most systems. -A large integer like 9,007,199,254,740,997 -has a binary representation that, although finite, is more than 53 bits long; -it must also be rounded to 53 bits. -(The details are discussed in @ref{Floating-point Representation}.) -The biggest integer that can be stored in a C @code{double} is usually the same -as the largest possible value of a @code{double}. If your system @code{double} -is an IEEE 64-bit @code{double}, this largest possible value is an integer and -can be represented precisely. What more should you know about integers? - -If you want to know what is the largest integer, such that it and -all smaller integers can be stored in 64-bit doubles without losing precision, -then the answer is -@iftex -@math{2^{53}}. -@end iftex -@ifnottex -@ifnotdocbook -2^53. -@end ifnotdocbook -@end ifnottex -@docbook -253. @c -@end docbook -The next representable number is the even number -@iftex -@math{2^{53} + 2}, -@end iftex -@ifnottex -@ifnotdocbook -2^53 + 2, -@end ifnotdocbook -@end ifnottex -@docbook -253 + 2, @c -@end docbook -meaning it is unlikely that you will be able to make -@command{gawk} print -@iftex -@math{2^{53} + 1} -@end iftex -@ifnottex -@ifnotdocbook -2^53 + 1 -@end ifnotdocbook -@end ifnottex -@docbook -253 + 1 @c -@end docbook -in integer format. -The range of integers exactly representable by a 64-bit double -is -@iftex -@math{[-2^{53}, 2^{53}]}. -@end iftex -@ifnottex -@ifnotdocbook -[@minus{}2^53, 2^53]. -@end ifnotdocbook -@end ifnottex -@docbook -[−253, 253]. @c -@end docbook -If you ever see an integer outside this range in @command{awk} -using 64-bit doubles, you have reason to be very suspicious about -the accuracy of the output. Here is a simple program with erroneous output: - -@example -$ @kbd{gawk 'BEGIN @{ i = 2^53 - 1; for (j = 0; j < 4; j++) print i + j @}'} -@print{} 9007199254740991 -@print{} 9007199254740992 -@print{} 9007199254740992 -@print{} 9007199254740994 -@end example +Two built-in variables, @code{PREC} and @code{ROUNDMODE}, +provide control over the working precision and the rounding mode. +The precision and the rounding mode are set globally for every operation +to follow. +@xref{Auto-set}, for more information. -The lesson is to not assume that any large integer printed by @command{awk} -represents an exact result from your computation, especially if it wraps -around on your screen. +@node FP Math Caution +@section Floating Point Arithmetic: Caveat Emptor! -@node Floating-point Programming -@section Understanding Floating-point Programming +@quotation +Math class is tough! +@author Late 1980's Barbie +@end quotation -Numerical programming is an extensive area; if you need to develop -sophisticated numerical algorithms then @command{gawk} may not be -the ideal tool, and this documentation may not be sufficient. -It might require digesting a book or two@footnote{One recommended title is -@cite{Numerical Computing with IEEE Floating Point Arithmetic}, Michael L.@: -Overton, Society for Industrial and Applied Mathematics, 2004. -ISBN: 0-89871-482-6, ISBN-13: 978-0-89871-482-1. See -@uref{http://www.cs.nyu.edu/cs/faculty/overton/book}.} -to really internalize how to compute -with ideal accuracy and precision, -and the result often depends on the particular application. +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 +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 +floating-point arithmetic. -@quotation NOTE -A floating-point calculation's @dfn{accuracy} is how close it comes -to the real value. This is as opposed to the @dfn{precision}, which -usually refers to the number of bits used to represent the number -(see @uref{http://en.wikipedia.org/wiki/Accuracy_and_precision, -the Wikipedia article} for more information). +@quotation CAUTION +The material here is purposely general. If you need to do serious +computer arithmetic, you should do some research first, and not +rely just on what we tell you. @end quotation -There are two options for doing floating-point calculations: -hardware floating-point (as used by standard @command{awk} and -the default for @command{gawk}), and @dfn{arbitrary-precision} -floating-point, which is software based. -From this point forward, this @value{CHAPTER} -aims to provide enough information to understand both, and then -will focus on @command{gawk}'s facilities for the latter.@footnote{If you -are interested in other tools that perform arbitrary precision arithmetic, -you may want to investigate the POSIX @command{bc} tool. See -@uref{http://pubs.opengroup.org/onlinepubs/009695399/utilities/bc.html, -the POSIX specification for it}, for more information.} +@menu +* Inexactness of computations:: Floating point math is not exact. +* Getting Accuracy:: Getting more accuracy takes some work. +* Try To Round:: Add digits and round. +* Setting precision:: How to set the precision. +* Setting the rounding mode:: How to set the rounding mode. +@end menu + +@node Inexactness of computations +@subsection Floating Point Arithmetic Is Not Exact Binary floating-point representations and arithmetic are inexact. Simple values like 0.1 cannot be precisely represented using @@ -29203,7 +29111,16 @@ floating-point, you can set the precision before starting a computation, but then you cannot be sure of the number of significant decimal places in the final result. -So, before you start to write any code, you should think more +@menu +* Inexact representation:: Numbers are not exactly represented. +* Comparing FP Values:: How to compare floating point values. +* Errors accumulate:: Errors get bigger as they go. +@end menu + +@node Inexact representation +@subsubsection Many Numbers Cannot Be Represented Exactly + +So, before you start to write any code, you should think about what you really want and what's really happening. Consider the two numbers in the following example: @@ -29233,21 +29150,42 @@ you can always specify how much precision you would like in your output. 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 +@subsubsection Be Careful Comparing Values + Because the underlying representation can be a little bit off from the exact value, comparing floating-point values to see if they are exactly equal is generally a bad idea. -Here is an example where it does not work like you expect: +Here is an example where it does not work like you would expect: @example $ @kbd{gawk 'BEGIN @{ print (0.1 + 12.2 == 12.3) @}'} @print{} 0 @end example -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, +The general wisdom when comparing floating-point values is to see if +they are within some small range of each other (called a @dfn{delta}, +or @dfn{tolerance}). +You have to decide how small a delta is important to you. Code to do +this looks something like this: + +@example +delta = 0.00001 # for example +difference = abs(a) - abs(b) # subtract the two values +if (difference < delta) + # all ok +else + # not ok +@end example + +@node Errors accumulate +@subsubsection Errors Accumulate + +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, the error can accumulate and greatly affect the computation itself. -Here is an attempt to compute the value of the constant -@value{PI} using one of its many series representations: +Here is an attempt to compute the value of @value{PI} using one of its +many series representations: @example BEGIN @{ @@ -29261,8 +29199,8 @@ BEGIN @{ @} @end example -When run, the early errors propagating through later computations -cause the loop to terminate prematurely after an attempt to divide by zero. +When run, the early errors propagate through later computations, +causing the loop to terminate prematurely after attempting to divide by zero: @example $ @kbd{gawk -f pi.awk} @@ -29289,569 +29227,8 @@ $ @kbd{gawk 'BEGIN @{} @print{} 4 @end example -Can computation using arbitrary precision help with the previous examples? -If you are impatient to know, see -@ref{Exact Arithmetic}. - -Instead of arbitrary precision floating-point arithmetic, -often all you need is an adjustment of your logic -or a different order for the operations in your calculation. -The stability and the accuracy of the computation of the constant @value{PI} -in the earlier example can be enhanced by using the following -simple algebraic transformation: - -@example -(sqrt(x * x + 1) - 1) / x @equiv{} x / (sqrt(x * x + 1) + 1) -@end example - -@noindent -After making this, change the program does converge to -@value{PI} in under 30 iterations: - -@example -$ @kbd{gawk -f pi2.awk} -@print{} 3.215390309173473 -@print{} 3.159659942097501 -@print{} 3.146086215131436 -@print{} 3.142714599645370 -@print{} 3.141873049979825 -@dots{} -@print{} 3.141592653589797 -@print{} 3.141592653589797 -@end example - -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 limitations -and work within them. For most casual use of floating-point arithmetic, -you will often get the expected result in the end if you simply round -the display of your final results to the correct number of significant -decimal digits. - -As general advice, avoid presenting numerical data in a manner that -implies better precision than is actually the case. - -@menu -* Floating-point Representation:: Binary floating-point representation. -* Floating-point Context:: Floating-point context. -* Rounding Mode:: Floating-point rounding mode. -@end menu - -@node Floating-point Representation -@subsection Binary Floating-point Representation -@cindex IEEE 754 format - -Although floating-point representations vary from machine to machine, -the most commonly encountered representation is that defined by the -IEEE 754 Standard. An IEEE 754 format value has three components: - -@itemize @value{BULLET} -@item -A sign bit telling whether the number is positive or negative. - -@item -An @dfn{exponent}, @var{e}, giving its order of magnitude. - -@item -A @dfn{significand}, @var{s}, -specifying the actual digits of the number. -@end itemize - -The value of the -number is then -@iftex -@math{s @cdot 2^e}. -@end iftex -@ifnottex -@ifnotdocbook -@var{s * 2^e}. -@end ifnotdocbook -@end ifnottex -@docbook -s ⋅ 2e. @c -@end docbook -The first bit of a non-zero binary significand -is always one, so the significand in an IEEE 754 format only includes the -fractional part, leaving the leading one implicit. -The significand is stored in @dfn{normalized} format, -which means that the first bit is always a one. - -Three of the standard IEEE 754 types are 32-bit single precision, -64-bit double precision and 128-bit quadruple precision. -The standard also specifies extended precision formats -to allow greater precisions and larger exponent ranges. - -@node Floating-point Context -@subsection Floating-point Context -@cindex context, floating-point - -A floating-point @dfn{context} defines the environment for arithmetic operations. -It governs precision, sets rules for rounding, and limits the range for exponents. -The context has the following primary components: - -@table @dfn -@item Precision -Precision of the floating-point format in bits. - -@item emax -Maximum exponent allowed for the format. - -@item emin -Minimum exponent allowed for the format. - -@item Underflow behavior -The format may or may not support gradual underflow. - -@item Rounding -The rounding mode of the context. -@end table - -@ref{table-ieee-formats} lists the precision and exponent -field values for the basic IEEE 754 binary formats: - -@float Table,table-ieee-formats -@caption{Basic IEEE Format Context Values} -@multitable @columnfractions .20 .20 .20 .20 .20 -@headitem Name @tab Total bits @tab Precision @tab emin @tab emax -@item Single @tab 32 @tab 24 @tab @minus{}126 @tab +127 -@item Double @tab 64 @tab 53 @tab @minus{}1022 @tab +1023 -@item Quadruple @tab 128 @tab 113 @tab @minus{}16382 @tab +16383 -@end multitable -@end float - -@quotation NOTE -The precision numbers include the implied leading one that gives them -one extra bit of significand. -@end quotation - -A floating-point context can also determine which signals are treated -as exceptions, and can set rules for arithmetic with special values. -Please consult the IEEE 754 standard or other resources for details. - -@command{gawk} ordinarily uses the hardware double precision -representation for numbers. On most systems, this is IEEE 754 -floating-point format, corresponding to 64-bit binary with 53 bits -of precision. - -@quotation NOTE -In case an underflow occurs, the standard allows, but does not require, -the result from an arithmetic operation to be a number smaller than -the smallest nonzero normalized number. Such numbers do -not have as many significant digits as normal numbers, and are called -@dfn{denormals} or @dfn{subnormals}. The alternative, simply returning a zero, -is called @dfn{flush to zero}. The basic IEEE 754 binary formats -support subnormal numbers. -@end quotation - -@node Rounding Mode -@subsection Floating-point Rounding Mode -@cindex rounding mode, floating-point - -The @dfn{rounding mode} specifies the behavior for the results of numerical -operations when discarding extra precision. Each rounding mode indicates -how the least significant returned digit of a rounded result is to -be calculated. -@ref{table-rounding-modes} lists the IEEE 754 defined -rounding modes: - -@float Table,table-rounding-modes -@caption{IEEE 754 Rounding Modes} -@multitable @columnfractions .45 .55 -@headitem Rounding Mode @tab IEEE Name -@item Round to nearest, ties to even @tab @code{roundTiesToEven} -@item Round toward plus Infinity @tab @code{roundTowardPositive} -@item Round toward negative Infinity @tab @code{roundTowardNegative} -@item Round toward zero @tab @code{roundTowardZero} -@item Round to nearest, ties away from zero @tab @code{roundTiesToAway} -@end multitable -@end float - -The default mode @code{roundTiesToEven} is the most preferred, -but the least intuitive. This method does the obvious thing for most values, -by rounding them up or down to the nearest digit. -For example, rounding 1.132 to two digits yields 1.13, -and rounding 1.157 yields 1.16. - -However, when it comes to rounding a value that is exactly halfway between, -things do not work the way you probably learned in school. -In this case, the number is rounded to the nearest even digit. -So rounding 0.125 to two digits rounds down to 0.12, -but rounding 0.6875 to three digits rounds up to 0.688. -You probably have already encountered this rounding mode when -using @code{printf} to format floating-point numbers. -For example: - -@example -BEGIN @{ - x = -4.5 - for (i = 1; i < 10; i++) @{ - x += 1.0 - printf("%4.1f => %2.0f\n", x, x) - @} -@} -@end example - -@noindent -produces the following output when run on the author's system:@footnote{It -is possible for the output to be completely different if the -C library in your system does not use the IEEE 754 even-rounding -rule to round halfway cases for @code{printf}.} - -@example --3.5 => -4 --2.5 => -2 --1.5 => -2 --0.5 => 0 - 0.5 => 0 - 1.5 => 2 - 2.5 => 2 - 3.5 => 4 - 4.5 => 4 -@end example - -The theory behind the rounding mode @code{roundTiesToEven} is that -it more or less evenly distributes upward and downward rounds -of exact halves, which might cause any round-off error -to cancel itself out. This is the default rounding mode used -in IEEE 754 computing functions and operators. - -The other rounding modes are rarely used. -Round toward positive infinity (@code{roundTowardPositive}) -and round 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 be used for converting floating-point numbers to integers. -The rounding mode @code{roundTiesToAway} rounds the result to the -nearest number and selects the number with the larger magnitude -if a tie occurs. - -Some numerical analysts will tell you that your choice of rounding style -has tremendous impact on the final outcome, and advise you to wait until -final output for any rounding. Instead, you can often avoid round-off error problems by -setting the precision initially to some value sufficiently larger than -the final desired precision, so that the accumulation of round-off error -does not influence the outcome. -If you suspect that results from your computation are -sensitive to accumulation of round-off error, -one way to be sure is to look for a significant difference in output -when you change the rounding mode. - -@node Gawk and MPFR -@section @command{gawk} + MPFR = Powerful Arithmetic -@cindex MPFR -@cindex GMP - -The rest of this @value{CHAPTER} describes how to use the arbitrary precision -(also known as @dfn{multiple precision} or @dfn{infinite precision}) numeric -capabilities in @command{gawk} to produce maximally accurate results -when you need it. - -But first you should check if your version of -@command{gawk} supports arbitrary precision arithmetic. -The easiest way to find out is to look at the output of -the following command: - -@example -$ @kbd{gawk --version} -@print{} GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2) -@print{} Copyright (C) 1989, 1991-2014 Free Software Foundation. -@dots{} -@end example - -@noindent -(You may see different version numbers than what's shown here. That's OK; -what's important is to see that GNU MPFR and GNU MP are listed in -the output.) - -@command{gawk} uses the -@uref{http://www.mpfr.org, GNU MPFR} -and -@uref{http://gmplib.org, GNU MP} (GMP) -libraries for arbitrary precision -arithmetic on numbers. So if you do not see the names of these libraries -in the output, then your version of @command{gawk} does not support -arbitrary precision arithmetic. - -Additionally, -there are a few elements available in the @code{PROCINFO} array -to provide information about the MPFR and GMP libraries. -@xref{Auto-set}, for more information. - -@ignore -Even if you aren't interested in arbitrary precision arithmetic, you -may still benefit from knowing about how @command{gawk} handles numbers -in general, and the limitations of doing arithmetic with ordinary -@command{gawk} numbers. -@end ignore - - -@node Arbitrary Precision Floats -@section Arbitrary Precision Floating-point Arithmetic with @command{gawk} - -@command{gawk} uses the GNU MPFR library -for arbitrary precision floating-point arithmetic. The MPFR library -provides precise control over precisions and rounding modes, and gives -correctly rounded, reproducible, platform-independent results. With one -of the command-line options @option{--bignum} or @option{-M}, -all floating-point arithmetic operators and numeric functions can yield -results to any desired precision level supported by MPFR. -Two built-in variables, @code{PREC} and @code{ROUNDMODE}, -provide control over the working precision and the rounding mode -(@pxref{Setting Precision}, and -@pxref{Setting Rounding Mode}). -The precision and the rounding mode are set globally for every operation -to follow. - -The default working precision for arbitrary precision floating-point values is -53 bits, and the default value for @code{ROUNDMODE} is @code{"N"}, -which selects the IEEE 754 @code{roundTiesToEven} rounding mode -(@pxref{Rounding Mode}).@footnote{The -default precision is 53 bits, since according to the MPFR documentation, -the library should be able to exactly reproduce all computations done with -double-precision machine floating-point numbers (@code{double} type -in C), except the default exponent range is much wider and subnormal -numbers are not implemented.} -@command{gawk} uses the default exponent range in MPFR -@iftex -(@math{emax = 2^{30} - 1, emin = -emax}) -@end iftex -@ifnottex -@ifnotdocbook -(@var{emax} = 2^30 @minus{} 1, @var{emin} = @minus{}@var{emax}) -@end ifnotdocbook -@end ifnottex -@docbook -(emax = 230 − 1, emin = −emax) @c -@end docbook -for all floating-point contexts. -There is no explicit mechanism to adjust the exponent range. -MPFR does not implement subnormal numbers by default, -and this behavior cannot be changed in @command{gawk}. - -@quotation NOTE -When emulating an IEEE 754 format (@pxref{Setting Precision}), -@command{gawk} internally adjusts the exponent range -to the value defined for the format and also performs computations needed for -gradual underflow (subnormal numbers). -@end quotation - -@quotation NOTE -MPFR numbers are variable-size entities, consuming only as much space as -needed to store the significant digits. Since the performance using MPFR -numbers pales in comparison to doing arithmetic using the underlying machine -types, you should consider using only as much precision as needed by -your program. -@end quotation - -@menu -* Setting Precision:: Setting the working precision. -* Setting Rounding Mode:: Setting the rounding mode. -* Floating-point Constants:: Representing floating-point constants. -* Changing Precision:: Changing the precision of a number. -* Exact Arithmetic:: Exact arithmetic with floating-point numbers. -@end menu - -@node Setting Precision -@subsection Setting the Working Precision -@cindex @code{PREC} variable -@cindex setting working precision - -@command{gawk} uses a global working precision; it does not keep track of -the precision or accuracy of individual numbers. Performing an arithmetic -operation or calling a built-in function rounds the result to the current -working precision. The default working precision is 53 bits, which you can -modify using the built-in variable @code{PREC}. You can also set the -value to one of the predefined case-insensitive strings -shown in @ref{table-predefined-precision-strings}, -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 -@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. -@item @code{"quad"} @tab Basic 128-bit quadruple precision. -@item @code{"oct"} @tab 256-bit octuple precision. -@end multitable -@end float - -The following example illustrates the effects of changing precision -on arithmetic operations: - -@example -$ @kbd{gawk -M -v PREC=100 'BEGIN @{ x = 1.0e-400; print x + 0} -> @kbd{PREC = "double"; print x + 0 @}'} -@print{} 1e-400 -@print{} 0 -@end example - -Binary and decimal precisions are related approximately, according to the -formula: - -@iftex -@math{prec = 3.322 @cdot dps} -@end iftex -@ifnottex -@ifnotdocbook -@var{prec} = 3.322 * @var{dps} -@end ifnotdocbook -@end ifnottex -@docbook - -prec = 3.322 ⋅ dps @c - -@end docbook - -@noindent -Here, @var{prec} denotes the binary precision -(measured in bits) and @var{dps} (short for decimal places) -is the decimal digits. We can easily calculate how many decimal -digits the 53-bit significand of an IEEE double is equivalent to: -53 / 3.322 which is equal to about 15.95. -But what does 15.95 digits actually mean? It depends whether you are -concerned about how many digits you can rely on, or how many digits -you need. - -It is important to know how many bits it takes to uniquely identify -a double-precision value (the C type @code{double}). If you want to -convert from @code{double} to decimal and back to @code{double} (e.g., -saving a @code{double} representing an intermediate result to a file, and -later reading it back to restart the computation), then a few more decimal -digits are required. 17 digits is generally enough for a @code{double}. - -It can also be important to know what decimal numbers can be uniquely -represented with a @code{double}. If you want to convert -from decimal to @code{double} and back again, 15 digits is the most that -you can get. Stated differently, you should not present -the numbers from your floating-point computations with more than 15 -significant digits in them. - -Conversely, it takes a precision of 332 bits to hold an approximation -of the constant @value{PI} that is accurate to 100 decimal places. - -You should always add some extra bits in order to avoid the confusing round-off -issues that occur because numbers are stored internally in binary. - -@node Setting Rounding Mode -@subsection Setting the Rounding Mode -@cindex @code{ROUNDMODE} variable -@cindex setting rounding mode - -The @code{ROUNDMODE} variable provides -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} -@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 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 -@end float - -@code{ROUNDMODE} has the default value @code{"N"}, -which selects the IEEE 754 rounding mode @code{roundTiesToEven}. -In @ref{table-gawk-rounding-modes}, @code{"A"} is listed to select the IEEE 754 mode -@code{roundTiesToAway}. This is only available -if your version of the MPFR library supports it; otherwise setting -@code{ROUNDMODE} to this value has no effect. @xref{Rounding Mode}, -for the meanings of the various rounding modes. - -Here is an example of how to change the default rounding behavior of -@code{printf}'s output: - -@example -$ @kbd{gawk -M -v ROUNDMODE="Z" 'BEGIN @{ printf("%.2f\n", 1.378) @}'} -@print{} 1.37 -@end example - -@node Floating-point Constants -@subsection Representing Floating-point Constants -@cindex constants, floating-point - -Be wary of floating-point constants! When reading a floating-point constant -from program source code, @command{gawk} uses the default precision (that -of a C @code{double}), unless overridden -by an assignment to the special variable @code{PREC} on the command -line, to store it internally as a MPFR number. -Changing the precision using @code{PREC} in the program text does -@emph{not} change the precision of a constant. If you need to -represent a floating-point constant at a higher precision 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: - -@example -$ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", 0.1) @}'} -@print{} 0.1000000000000000055511151 -$ @kbd{gawk -M -v PREC=113 'BEGIN @{ printf("%0.25f\n", 0.1) @}'} -@print{} 0.1000000000000000000000000 -$ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", "0.1") @}'} -@print{} 0.1000000000000000000000000 -$ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", 1/10) @}'} -@print{} 0.1000000000000000000000000 -@end example - -In the first case, the number is stored with the default precision of 53 bits. - -@node Changing Precision -@subsection Changing the Precision of a Number -@cindex changing precision of a number - -@cindex Laurie, Dirk -@quotation -@i{The point is that in any variable-precision package, -a decision is made on how to treat numbers given as data, -or arising in intermediate results, which are represented in -floating-point format to a precision lower than working precision. -Do we promote them to full membership of the high-precision club, -or do we treat them and all their associates as second-class citizens? -Sometimes the first course is proper, sometimes the second, and it takes -careful analysis to tell which.}@footnote{Dirk Laurie. -@cite{Variable-precision Arithmetic Considered Perilous --- A Detective Story}. -Electronic Transactions on Numerical Analysis. Volume 28, pp. 168-173, 2008.} -@author Dirk Laurie -@end quotation - -@command{gawk} does not implicitly modify the precision of any previously -computed results when the working precision is changed with an assignment -to @code{PREC}. The precision of a number is always the one that was -used at the time of its creation, and there is no way for you -to explicitly change it afterwards. However, since the result of a -floating-point arithmetic operation is always an arbitrary precision -floating-point value---with a precision set by the value of @code{PREC}---one of the -following workarounds effectively accomplishes the desired behavior: - -@example -x = x + 0.0 -@end example - -@noindent -or: - -@example -x += 0.0 -@end example - -@node Exact Arithmetic -@subsection Exact Arithmetic with Floating-point Numbers - -@quotation CAUTION -Never depend on the exactness of floating-point arithmetic, -even for apparently simple expressions! -@end quotation +@node Getting Accuracy +@subsection Getting The Accuracy You Need Can arbitrary precision arithmetic give exact results? There are no easy answers. The standard rules of algebra often do not apply @@ -29861,13 +29238,11 @@ do not hold completely, and order of operation may be important 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 @samp{12.3} -for equality -using the machine double precision arithmetic, it decides that they -are not equal! -(@xref{Floating-point Programming}.) -You can get the result you want by increasing the precision; -56 bits in this case will get the job done: +When @command{gawk} tests the expressions @samp{0.1 + 12.2} and +@samp{12.3} for equality using the machine double precision arithmetic, +it decides that they are not equal! (@xref{Comparing FP Values}.) +You can get the result you want by increasing the precision; 56 bits in +this case does the job: @example $ @kbd{gawk -M -v PREC=56 'BEGIN @{ print (0.1 + 12.2 == 12.3) @}'} @@ -29889,26 +29264,20 @@ is often just an approximation after proper rounding. The test for equality succeeds if and only if @emph{all} bits in the two operands are exactly the same. Since this is not necessarily true after floating-point computations with a particular precision and effective rounding rule, -a straight test for equality may not work. - -So, don't assume that floating-point values can be compared for equality. -You should also exercise caution when using other forms of comparisons. -The standard way to compare two floating-point numbers is to determine -how much error (or @dfn{tolerance}) you will allow in a comparison and -check to see if one value is within this error range of the other. +a straight test for equality may not work. Instead, compare the +two numbers to see if they are within the desirable delta of each other. In applications where 15 or fewer decimal places suffice, hardware double precision arithmetic can be adequate, and is usually much faster. -But you do need to keep in mind that every floating-point operation +But you need to keep in mind that every floating-point operation can suffer a new rounding error with catastrophic consequences as illustrated -by our earlier attempt to compute the value of the constant @value{PI} -(@pxref{Floating-point Programming}). +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 in floating-point arithmetic. In the example in -@ref{Floating-point Programming}: +@ref{Errors accumulate}: @example $ @kbd{gawk 'BEGIN @{} @@ -29924,19 +29293,201 @@ you may or may not succeed in getting the correct result by choosing an arbitrarily large value for @code{PREC}. Reformulation of the problem at hand is often the correct approach in such situations. +@node Try To Round +@subsection Try A Few Extra Bits of Precision and Rounding + +Instead of arbitrary precision floating-point arithmetic, +often all you need is an adjustment of your logic +or a different order for the operations in your calculation. +The stability and the accuracy of the computation of @value{PI} +in the earlier example can be enhanced by using the following +simple algebraic transformation: + +@example +(sqrt(x * x + 1) - 1) / x @equiv{} x / (sqrt(x * x + 1) + 1) +@end example + +@noindent +After making this, change the program converges to +@value{PI} in under 30 iterations: + +@example +$ @kbd{gawk -f pi2.awk} +@print{} 3.215390309173473 +@print{} 3.159659942097501 +@print{} 3.146086215131436 +@print{} 3.142714599645370 +@print{} 3.141873049979825 +@dots{} +@print{} 3.141592653589797 +@print{} 3.141592653589797 +@end example + +@node Setting precision +@subsection Setting The Precision + +@command{gawk} uses a global working precision; it does not keep track of +the precision or accuracy of individual numbers. Performing an arithmetic +operation or calling a built-in function rounds the result to the current +working precision. The default working precision is 53 bits, which you can +modify using the built-in variable @code{PREC}. You can also set the +value to one of the predefined case-insensitive strings +shown in @ref{table-predefined-precision-strings}, +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 +@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. +@item @code{"quad"} @tab Basic 128-bit quadruple precision. +@item @code{"oct"} @tab 256-bit octuple precision. +@end multitable +@end float + +The following example illustrates the effects of changing precision +on arithmetic operations: + +@example +$ @kbd{gawk -M -v PREC=100 'BEGIN @{ x = 1.0e-400; print x + 0} +> @kbd{PREC = "double"; print x + 0 @}'} +@print{} 1e-400 +@print{} 0 +@end example + +@quotation CAUTION +Be wary of floating-point constants! When reading a floating-point +constant from program source code, @command{gawk} uses the default +precision (that of a C @code{double}), unless overridden by an assignment +to the special variable @code{PREC} on the command line, to store it +internally as a MPFR number. Changing the precision using @code{PREC} +in the program text does @emph{not} change the precision of a constant. + +If you need to represent a floating-point constant at a higher precision +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) @}'} +@print{} 0.1000000000000000055511151 +$ @kbd{gawk -M -v PREC=113 'BEGIN @{ printf("%0.25f\n", 0.1) @}'} +@print{} 0.1000000000000000000000000 +$ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", "0.1") @}'} +@print{} 0.1000000000000000000000000 +$ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", 1/10) @}'} +@print{} 0.1000000000000000000000000 +@end example + +@node Setting the rounding mode +@subsection Setting The Rounding Mode + +The @code{ROUNDMODE} variable provides +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} +@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 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 +@end float + +@code{ROUNDMODE} has the default value @code{"N"}, which +selects the IEEE 754 rounding mode @code{roundTiesToEven}. +In @ref{table-gawk-rounding-modes}, the value @code{"A"} selects +@code{roundTiesToAway}. This is only available if your version of the +MPFR library supports it; otherwise setting @code{ROUNDMODE} to @code{"A"} +has no effect. + +The default mode @code{roundTiesToEven} is the most preferred, +but the least intuitive. This method does the obvious thing for most values, +by rounding them up or down to the nearest digit. +For example, rounding 1.132 to two digits yields 1.13, +and rounding 1.157 yields 1.16. + +However, when it comes to rounding a value that is exactly halfway between, +things do not work the way you probably learned in school. +In this case, the number is rounded to the nearest even digit. +So rounding 0.125 to two digits rounds down to 0.12, +but rounding 0.6875 to three digits rounds up to 0.688. +You probably have already encountered this rounding mode when +using @code{printf} to format floating-point numbers. +For example: + +@example +BEGIN @{ + x = -4.5 + for (i = 1; i < 10; i++) @{ + x += 1.0 + printf("%4.1f => %2.0f\n", x, x) + @} +@} +@end example + +@noindent +produces the following output when run on the author's system:@footnote{It +is possible for the output to be completely different if the +C library in your system does not use the IEEE 754 even-rounding +rule to round halfway cases for @code{printf}.} + +@example +-3.5 => -4 +-2.5 => -2 +-1.5 => -2 +-0.5 => 0 + 0.5 => 0 + 1.5 => 2 + 2.5 => 2 + 3.5 => 4 + 4.5 => 4 +@end example + +The theory behind @code{roundTiesToEven} is that it more or less evenly +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 +(@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 +be used for converting floating-point numbers to integers. The rounding +mode @code{roundTiesToAway} rounds the result to the nearest number and +selects the number with the larger magnitude if a tie occurs. + +Some numerical analysts will tell you that your choice of rounding +style has tremendous impact on the final outcome, and advise you to +wait until final output for any rounding. Instead, you can often avoid +round-off error problems by setting the precision initially to some +value sufficiently larger than the final desired precision, so that +the accumulation of round-off error does not influence the outcome. +If you suspect that results from your computation are sensitive to +accumulation of round-off error, look for a significant difference in +output when you change the rounding mode to be sure. + @node Arbitrary Precision Integers @section Arbitrary Precision Integer Arithmetic with @command{gawk} @cindex integers, arbitrary precision @cindex arbitrary precision integers -If one of the options @option{--bignum} or @option{-M} is specified, -@command{gawk} performs all -integer arithmetic using GMP arbitrary precision integers. -Any number that looks like an integer in a program source or @value{DF} -is stored as an arbitrary precision integer. -The size of the integer is limited only by your computer's memory. -The current floating-point context has no effect on operations involving integers. -For example, the following computes +When given one of the options @option{--bignum} or @option{-M}, +@command{gawk} performs all integer arithmetic using GMP arbitrary +precision integers. Any number that looks like an integer in a source +or @value{DF} is stored as an arbitrary precision integer. The size +of the integer is limited only by the available memory. For example, +the following computes @iftex @math{5^{4^{3^{2}}}}, @end iftex @@ -29961,9 +29512,9 @@ $ @kbd{gawk -M 'BEGIN @{} @print{} 62060698786608744707 ... 92256259918212890625 @end example -If you were to compute the same value using arbitrary precision -floating-point values instead, the precision needed for correct output -(using the formula +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}), would be @math{3.322 @cdot 183231}, @@ -29985,8 +29536,8 @@ The result from an arithmetic operation with an integer and a floating-point val is a floating-point value with a precision equal to the working precision. The following program calculates the eighth term in Sylvester's sequence@footnote{Weisstein, Eric W. -@cite{Sylvester's Sequence}. From MathWorld---A Wolfram Web Resource. -@url{http://mathworld.wolfram.com/SylvestersSequence.html}} +@cite{Sylvester's Sequence}. From MathWorld---A Wolfram Web Resource +@w{(@url{http://mathworld.wolfram.com/SylvestersSequence.html}).}} using a recurrence: @example @@ -30006,15 +29557,15 @@ floating-point results exactly. You can either increase the precision @samp{2.0} with an integer, to perform all computations using integer arithmetic to get the correct output. -It will sometimes be necessary for @command{gawk} to implicitly convert an -arbitrary precision integer into an arbitrary precision floating-point value. -This is primarily because the MPFR library does not always provide the -relevant 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 -like this: +Sometimes @command{gawk} must implicitly convert an arbitrary precision +integer into an arbitrary precision floating-point value. This is +primarily because the MPFR library does not always provide the relevant +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 +point first, like this: @example gawk -M 'BEGIN @{ n = 13; print (n + 0.0) % 2.0 @}' @@ -30034,6 +29585,176 @@ to just use the following: gawk -M 'BEGIN @{ n = 13; print n % 2 @}' @end example +@node POSIX Floating Point Problems +@section Standards Versus Existing Practice + +Historically, @command{awk} has converted any non-numeric 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 +(base 8) or hexadecimal numbers (base 16). + +Changes in the language of the +2001 and 2004 POSIX standards can be interpreted to imply that @command{awk} +should support additional features. These features are: + +@itemize @value{BULLET} +@item +Interpretation of floating point data values specified in hexadecimal +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''). +In particular, the format for these values is as specified by the ISO 1999 +C standard, which ignores case and can allow machine-dependent additional +characters after the @samp{nan} and allow either @samp{inf} or @samp{infinity}. +@end itemize + +The first problem is that both of these are clear changes to historical +practice: + +@itemize @value{BULLET} +@item +The @command{gawk} maintainer feels that supporting hexadecimal floating +point values, in particular, is ugly, and was never intended by the +original designers to be part of the language. + +@item +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 +``language lawyering'' to arrive at in the first place, was not even +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 the above 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. + +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. +The solution implemented in @command{gawk} is as follows: + +@itemize @value{BULLET} +@item +With the @option{--posix} command-line option, @command{gawk} becomes +``hands off.'' String values are passed directly to the system library's +@code{strtod()} function, and if it successfully returns a numeric value, +that is what's used.@footnote{You asked for it, you got it.} +By definition, the results are not portable across +different systems. They are also a little surprising: + +@example +$ @kbd{echo nanny | gawk --posix '@{ print $1 + 0 @}'} +@print{} nan +$ @kbd{echo 0xDeadBeef | gawk --posix '@{ print $1 + 0 @}'} +@print{} 3735928559 +@end example + +@item +Without @option{--posix}, @command{gawk} interprets the four strings +@samp{+inf}, +@samp{-inf}, +@samp{+nan}, +and +@samp{-nan} +specially, producing the corresponding special numeric values. +The leading sign acts a signal to @command{gawk} (and the user) +that the value is really numeric. Hexadecimal floating point is +not supported (unless you also use @option{--non-decimal-data}, +which is @emph{not} recommended). For example: + +@example +$ @kbd{echo nanny | gawk '@{ print $1 + 0 @}'} +@print{} 0 +$ @kbd{echo +nan | gawk '@{ print $1 + 0 @}'} +@print{} nan +$ @kbd{echo 0xDeadBeef | gawk '@{ print $1 + 0 @}'} +@print{} 0 +@end example + +@command{gawk} ignores case in the four special values. +Thus @samp{+nan} and @samp{+NaN} are the same. +@end itemize + +@node Floating point summary +@section Summary + +@itemize @value{BULLET} +@item +Most computer arithmetic is done using either integers or floating-point +values. The default for @command{awk} is to use double-precision +floating-point values. + +@item +In the 1980's, Barbie mistakenly said ``Math class is tough!'' +While math isn't tough, floating-point arithmetic isn't the same +as pencil and paper math, and care must be taken: + +@c nested list +@itemize @value{MINUS} +@item +Not all numbers can be represented exactly. + +@item +Comparing values should use a delta, instead of being done directly +with @samp{==} and @samp{!=}. + +@item +Errors accumulate. + +@item +Operations are not always truly associative or distributive. +@end itemize + +@item +Increasing the accuracy can help, but it is not a panacea. + +@item +Often, increasing the accuracy and then rounding to the desired +number of digits produces reasonable results. + +@item +Use either @option{-M} or @option{--bignum} to enable MPFR +arithmetic. Use @code{PREC} to set the precision in bits, and +@code{ROUNDMODE} to set the IEEE 754 rounding mode. + +@item +With @option{-M} or @option{--bignum}, @command{gawk} performs +arbitrary precision integer arithmetic using the GMP library. +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 +numbers where @command{gawk} disagrees with the POSIX standard. +It pays to be aware of them. + +@item +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 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 +of significant decimal digits. + +@item +As general advice, avoid presenting numerical data in a manner that +implies better precision than is actually the case. + +@end itemize + @node Dynamic Extensions @chapter Writing Extensions for @command{gawk} @cindex dynamically loaded extensions @@ -30067,6 +29788,7 @@ When @option{--sandbox} is specified, extensions are disabled @code{gawk}. * gawkextlib:: The @code{gawkextlib} project. * Extension summary:: Extension summary. +* Extension Exercises:: Exercises. @end menu @node Extension Intro @@ -33091,9 +32813,7 @@ everything that needs to be loaded. It is simplest to use the dl_load_func(func_table, filefuncs, "") @end example -And that's it! As an exercise, consider adding functions to -implement system calls such as @code{chown()}, @code{chmod()}, -and @code{umask()}. +And that's it! @node Using Internal File Ops @subsection Integrating The Extensions @@ -33541,9 +33261,6 @@ $ @kbd{gawk -i inplace -v INPLACE_SUFFIX=.bak '@{ gsub(/foo/, "bar") @}} > @kbd{@{ print @}' file1 file2 file3} @end example -We leave it as an exercise to write a wrapper script that presents an -interface similar to @samp{sed -i}. - @node Extension Sample Ord @subsection Character and Numeric values: @code{ord()} and @code{chr()} @@ -34008,6 +33725,29 @@ should be the place to do so. @end itemize +@node Extension Exercises +@section Exercises + +@enumerate +@item +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}. + +@item +(Hard.) +How would you provide namespaces in @command{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 @command{gawk} +maintainer to tell him about it. + +@item +Write a wrapper script that provides an interface similar to +@samp{sed -i} for the ``inplace'' extension presented in +@ref{Extension Sample Inplace}. + +@end enumerate + @ifnotinfo @part @value{PART4}Appendices @end ifnotinfo @@ -34953,7 +34693,7 @@ The support for @samp{next file} as two words was removed completely (@pxref{Nextfile Statement}). @item -Additional commnd line options +Additional command-line options (@pxref{Options}): @itemize @value{MINUS} @@ -35257,7 +34997,7 @@ The @option{-R} option was removed. @item Support for high precision arithmetic with MPFR. -(@pxref{Gawk and MPFR}). +(@pxref{Arbitrary Precision Arithmetic}). @item The @code{and()}, @code{or()} and @code{xor()} functions @@ -37277,7 +37017,7 @@ Wikipedia article}, for information on additional versions. @itemize @value{BULLET} @item -The @command{gawk} distribution is availble from GNU project's main +The @command{gawk} distribution is available from GNU project's main distribution site, @code{ftp.gnu.org}. The canonical build recipe is: @example @@ -38261,7 +38001,7 @@ described in @ref{Dynamic Extensions}. @item @command{gawk}'s extensions can be disabled with either the @option{--traditional} option or with the @option{--posix} option. -The @option{--parsedebug} option is availble if @command{gawk} is +The @option{--parsedebug} option is available if @command{gawk} is compiled with @samp{-DDEBUG}. @item @@ -38483,7 +38223,7 @@ Individual variables, as well as numeric and string variables, are referred to as @dfn{scalar} values. Groups of values, such as arrays, are not scalars. -@ref{General Arithmetic}, provided a basic introduction to numeric +@ref{Computer Arithmetic}, provided a basic introduction to numeric types (integer and floating-point) and how they are used in a computer. Please review that information, including a number of caveats that were presented. @@ -40705,5 +40445,3 @@ which sorta sucks. TODO: ----- -3. Check all docbook figures, if they should include with a -specific extension or not. -- cgit v1.2.3 From e0027b635872545e584975cf89909b3d0d553163 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 17 Jun 2014 22:38:21 +0300 Subject: Minor fixes, esp for docbook. --- NEWS | 1 + doc/gawk.info | 120 ++++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 8 ++-- doc/gawktexi.in | 8 ++-- 4 files changed, 67 insertions(+), 70 deletions(-) diff --git a/NEWS b/NEWS index 21cda157..ac921ab0 100644 --- a/NEWS +++ b/NEWS @@ -9,6 +9,7 @@ Changes from 4.1.1 to 4.1.2 1. The manual has been considerably improved. - Thoroughly reviewed and updated. + - Out-of-date examples replaced. - Chapter 15 on MPFR reworked. - Summary sections added to all chapters. - Exercises added in several chapters. diff --git a/doc/gawk.info b/doc/gawk.info index 0fb3d400..a7d489bd 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -18662,7 +18662,7 @@ File: gawk.info, Node: Programs Exercises, Prev: Programs Summary, Up: Sample EBCDIC systems. Fix this problem. 6. Why can't the `wc.awk' program (*note Wc Program::) just use the - value of `FNR' in `endfile()'? Hint: examine the code in *note + value of `FNR' in `endfile()'? Hint: Examine the code in *note Filetrans Function::. 7. Manipulation of individual characters in the `translate' program @@ -26805,7 +26805,7 @@ File: gawk.info, Node: Getting, Next: Extracting, Up: Gawk Distribution B.1.1 Getting the `gawk' Distribution ------------------------------------- -There are three ways to get GNU software: +There are two ways to get GNU software: * Copy it from someone else who already has it. @@ -27996,7 +27996,7 @@ QSE Awk `http://www.quiktrim.org/QTawk.html' for more information, including the manual and a download link. - The project may als be frozen; no new code changes have been made + The project may also be frozen; no new code changes have been made since approximately 2008. Other Versions @@ -34394,62 +34394,62 @@ Node: History summary1071576 Node: Installation1072945 Node: Gawk Distribution1073896 Node: Getting1074380 -Node: Extracting1075206 -Node: Distribution contents1076848 -Node: Unix Installation1082565 -Node: Quick Installation1083182 -Node: Additional Configuration Options1085624 -Node: Configuration Philosophy1087362 -Node: Non-Unix Installation1089713 -Node: PC Installation1090171 -Node: PC Binary Installation1091482 -Node: PC Compiling1093330 -Ref: PC Compiling-Footnote-11096329 -Node: PC Testing1096434 -Node: PC Using1097610 -Node: Cygwin1101768 -Node: MSYS1102577 -Node: VMS Installation1103091 -Node: VMS Compilation1103887 -Ref: VMS Compilation-Footnote-11105109 -Node: VMS Dynamic Extensions1105167 -Node: VMS Installation Details1106540 -Node: VMS Running1108792 -Node: VMS GNV1111626 -Node: VMS Old Gawk1112349 -Node: Bugs1112819 -Node: Other Versions1116823 -Node: Installation summary1123077 -Node: Notes1124133 -Node: Compatibility Mode1124998 -Node: Additions1125780 -Node: Accessing The Source1126705 -Node: Adding Code1128141 -Node: New Ports1134319 -Node: Derived Files1138800 -Ref: Derived Files-Footnote-11143881 -Ref: Derived Files-Footnote-21143915 -Ref: Derived Files-Footnote-31144511 -Node: Future Extensions1144625 -Node: Implementation Limitations1145231 -Node: Extension Design1146479 -Node: Old Extension Problems1147633 -Ref: Old Extension Problems-Footnote-11149150 -Node: Extension New Mechanism Goals1149207 -Ref: Extension New Mechanism Goals-Footnote-11152567 -Node: Extension Other Design Decisions1152756 -Node: Extension Future Growth1154862 -Node: Old Extension Mechanism1155698 -Node: Notes summary1157460 -Node: Basic Concepts1158646 -Node: Basic High Level1159327 -Ref: figure-general-flow1159599 -Ref: figure-process-flow1160198 -Ref: Basic High Level-Footnote-11163427 -Node: Basic Data Typing1163612 -Node: Glossary1166940 -Node: Copying1192092 -Node: GNU Free Documentation License1229648 -Node: Index1254784 +Node: Extracting1075204 +Node: Distribution contents1076846 +Node: Unix Installation1082563 +Node: Quick Installation1083180 +Node: Additional Configuration Options1085622 +Node: Configuration Philosophy1087360 +Node: Non-Unix Installation1089711 +Node: PC Installation1090169 +Node: PC Binary Installation1091480 +Node: PC Compiling1093328 +Ref: PC Compiling-Footnote-11096327 +Node: PC Testing1096432 +Node: PC Using1097608 +Node: Cygwin1101766 +Node: MSYS1102575 +Node: VMS Installation1103089 +Node: VMS Compilation1103885 +Ref: VMS Compilation-Footnote-11105107 +Node: VMS Dynamic Extensions1105165 +Node: VMS Installation Details1106538 +Node: VMS Running1108790 +Node: VMS GNV1111624 +Node: VMS Old Gawk1112347 +Node: Bugs1112817 +Node: Other Versions1116821 +Node: Installation summary1123076 +Node: Notes1124132 +Node: Compatibility Mode1124997 +Node: Additions1125779 +Node: Accessing The Source1126704 +Node: Adding Code1128140 +Node: New Ports1134318 +Node: Derived Files1138799 +Ref: Derived Files-Footnote-11143880 +Ref: Derived Files-Footnote-21143914 +Ref: Derived Files-Footnote-31144510 +Node: Future Extensions1144624 +Node: Implementation Limitations1145230 +Node: Extension Design1146478 +Node: Old Extension Problems1147632 +Ref: Old Extension Problems-Footnote-11149149 +Node: Extension New Mechanism Goals1149206 +Ref: Extension New Mechanism Goals-Footnote-11152566 +Node: Extension Other Design Decisions1152755 +Node: Extension Future Growth1154861 +Node: Old Extension Mechanism1155697 +Node: Notes summary1157459 +Node: Basic Concepts1158645 +Node: Basic High Level1159326 +Ref: figure-general-flow1159598 +Ref: figure-process-flow1160197 +Ref: Basic High Level-Footnote-11163426 +Node: Basic Data Typing1163611 +Node: Glossary1166939 +Node: Copying1192091 +Node: GNU Free Documentation License1229647 +Node: Index1254783  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 8705b9e0..3d910ee0 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -26198,7 +26198,7 @@ Fix this problem. @item Why can't the @file{wc.awk} program (@pxref{Wc Program}) just use the value of @code{FNR} in @code{endfile()}? -Hint: examine the code in @ref{Filetrans Function}. +Hint: Examine the code in @ref{Filetrans Function}. @ignore @command{wc} can't just use the value of @code{FNR} in @@ -29826,9 +29826,7 @@ formula: @end ifnotdocbook @end ifnottex @docbook - prec = 3.322 ⋅ dps @c - @end docbook @end display @@ -36343,7 +36341,7 @@ subdirectories. @node Getting @appendixsubsec Getting the @command{gawk} Distribution @cindex @command{gawk}, source code@comma{} obtaining -There are three ways to get GNU software: +There are two ways to get GNU software: @itemize @value{BULLET} @item @@ -37858,7 +37856,7 @@ under the GPL. It has a large number of extensions over standard See @uref{http://www.quiktrim.org/QTawk.html} for more information, including the manual and a download link. -The project may als be frozen; no new code changes have been made +The project may also be frozen; no new code changes have been made since approximately 2008. @item Other Versions diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 8678988a..eac398a9 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -25342,7 +25342,7 @@ Fix this problem. @item Why can't the @file{wc.awk} program (@pxref{Wc Program}) just use the value of @code{FNR} in @code{endfile()}? -Hint: examine the code in @ref{Filetrans Function}. +Hint: Examine the code in @ref{Filetrans Function}. @ignore @command{wc} can't just use the value of @code{FNR} in @@ -28970,9 +28970,7 @@ formula: @end ifnotdocbook @end ifnottex @docbook - prec = 3.322 ⋅ dps @c - @end docbook @end display @@ -35487,7 +35485,7 @@ subdirectories. @node Getting @appendixsubsec Getting the @command{gawk} Distribution @cindex @command{gawk}, source code@comma{} obtaining -There are three ways to get GNU software: +There are two ways to get GNU software: @itemize @value{BULLET} @item @@ -37002,7 +37000,7 @@ under the GPL. It has a large number of extensions over standard See @uref{http://www.quiktrim.org/QTawk.html} for more information, including the manual and a download link. -The project may als be frozen; no new code changes have been made +The project may also be frozen; no new code changes have been made since approximately 2008. @item Other Versions -- cgit v1.2.3 From fe3173cd6266b73b5400bcf7dd6862979e64e4df Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 18 Jun 2014 17:26:56 +0300 Subject: Subsections in 6.1.4. --- doc/ChangeLog | 4 + doc/gawk.info | 1171 ++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 55 ++- doc/gawktexi.in | 26 +- 4 files changed, 684 insertions(+), 572 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 8da64d31..be3dead2 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-06-18 Arnold D. Robbins + + * gawktexi.in: Split 6.1.4 into subsections. Other minor fixes. + 2014-06-17 Arnold D. Robbins * gawktexi.in: Finish adding exerices. diff --git a/doc/gawk.info b/doc/gawk.info index a7d489bd..cf5c6036 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -266,6 +266,9 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) This is an advanced method of input. * Conversion:: The conversion of strings to numbers and vice versa. +* Strings And Numbers:: How `awk' Converts Between + Strings And Numbers. +* Locale influences conversions:: How the locale may affect conversions. * All Operators:: `gawk''s operators. * Arithmetic Ops:: Arithmetic operations (`+', `-', etc.) @@ -7461,6 +7464,22 @@ File: gawk.info, Node: Conversion, Prev: Variables, Up: Values 6.1.4 Conversion of Strings and Numbers --------------------------------------- +Number to string and string to number conversion are generally +straightforward. There can be subtleties to be aware of; this minor +node discusses this important facet of `awk'. + +* Menu: + +* Strings And Numbers:: How `awk' Converts Between Strings And + Numbers. +* Locale influences conversions:: How the locale may affect conversions. + + +File: gawk.info, Node: Strings And Numbers, Next: Locale influences conversions, Up: Conversion + +6.1.4.1 How `awk' Converts Between Strings And Numbers +...................................................... + Strings are converted to numbers and numbers are converted to strings, if the context of the `awk' program demands it. For example, if the value of either `foo' or `bar' in the expression `foo + bar' happens to @@ -7510,6 +7529,8 @@ value of `CONVFMT' may be. Given the following code fragment: `b' has the value `"12"', not `"12.00"'. (d.c.) + Pre-POSIX `awk' Used `OFMT' For String Conversion + Prior to the POSIX standard, `awk' used the value of `OFMT' for converting numbers to strings. `OFMT' specifies the output format to use when printing numbers with `print'. `CONVFMT' was introduced in @@ -7519,8 +7540,19 @@ printing. Both `CONVFMT' and `OFMT' have the same default value: change their behavior. *Note Print::, for more information on the `print' statement. - Where you are can matter when it comes to converting between numbers -and strings. The local character set and language--the "locale"--can + ---------- Footnotes ---------- + + (1) Pathological cases can require up to 752 digits (!), but we +doubt that you need to worry about this. + + +File: gawk.info, Node: Locale influences conversions, Prev: Strings And Numbers, Up: Conversion + +6.1.4.2 Locales Can Influence Conversion +........................................ + +Where you are can matter when it comes to converting between numbers and +strings. The local character set and language--the "locale"--can affect numeric formats. In particular, for `awk' programs, it affects the decimal point character and the thousands-separator character. The `"C"' locale, and most English-language locales, use the period @@ -7582,11 +7614,6 @@ 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::. - ---------- Footnotes ---------- - - (1) Pathological cases can require up to 752 digits (!), but we -doubt that you need to worry about this. -  File: gawk.info, Node: All Operators, Next: Truth Values and Conditions, Prev: Values, Up: Expressions @@ -8725,6 +8752,7 @@ File: gawk.info, Node: Expressions Summary, Prev: Locales, Up: Expressions * Numbers are automatically converted to strings, and strings to numbers, as needed by `awk'. Numeric values are converted as if they were formatted with `sprintf()' using the format in `CONVFMT'. + Locales can influence the conversions. * `awk' provides the usual arithmetic operators (addition, subtraction, multiplication, division, modulus), and unary plus @@ -21981,7 +22009,8 @@ integer arithmetic using GMP arbitrary precision integers. Any number that looks like an integer in a source or data file is stored as an arbitrary precision integer. The size of the integer is limited only by the available memory. For example, the following computes 5^4^3^2, -the result of which is beyond the limits of ordinary `gawk' numbers: +the result of which is beyond the limits of ordinary hardware +double-precision floating point values: $ gawk -M 'BEGIN { > x = 5^4^3^2 @@ -22069,8 +22098,8 @@ These features are: 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 machine-dependent additional characters after the `nan' and - allow either `inf' or `infinity'. + allow implementation-dependent additional characters after the + `nan' and allow either `inf' or `infinity'. The first problem is that both of these are clear changes to historical practice: @@ -31302,7 +31331,7 @@ Index * awk, implementations, limits: Getline Notes. (line 14) * awk, invoking: Command Line. (line 6) * awk, new vs. old: Names. (line 6) -* awk, new vs. old, OFMT variable: Conversion. (line 55) +* awk, new vs. old, OFMT variable: Strings And Numbers. (line 57) * awk, POSIX and: Preface. (line 23) * awk, POSIX and, See Also POSIX awk: Preface. (line 23) * awk, regexp constants and: Comparison Operators. @@ -31661,11 +31690,11 @@ Index (line 31) * converting, dates to timestamps: Time Functions. (line 76) * converting, numbers to strings <1>: Bitwise Functions. (line 109) -* converting, numbers to strings: Conversion. (line 6) +* converting, numbers to strings: Strings And Numbers. (line 6) * converting, strings to numbers <1>: Bitwise Functions. (line 109) -* converting, strings to numbers: Conversion. (line 6) +* converting, strings to numbers: Strings And Numbers. (line 6) * CONVFMT variable <1>: User-modified. (line 30) -* CONVFMT variable: Conversion. (line 29) +* CONVFMT variable: Strings And Numbers. (line 29) * CONVFMT variable, and array subscripts: Numeric Array Subscripts. (line 6) * cookie: Glossary. (line 149) @@ -31706,7 +31735,7 @@ Index (line 131) * dark corner, command-line arguments: Assignment Options. (line 43) * dark corner, continue statement: Continue Statement. (line 43) -* dark corner, CONVFMT variable: Conversion. (line 40) +* dark corner, CONVFMT variable: Strings And Numbers. (line 40) * dark corner, escape sequences: Other Arguments. (line 31) * dark corner, escape sequences, for metacharacters: Escape Sequences. (line 134) @@ -31722,7 +31751,8 @@ Index * dark corner, input files: awk split records. (line 110) * dark corner, invoking awk: Command Line. (line 16) * dark corner, length() function: String Functions. (line 183) -* dark corner, locale's decimal point character: Conversion. (line 75) +* dark corner, locale's decimal point character: Locale influences conversions. + (line 17) * dark corner, multiline records: Multiple Line. (line 35) * dark corner, NF variable, decrementing: Changing Fields. (line 107) * dark corner, OFMT variable: OFMT. (line 27) @@ -32898,7 +32928,8 @@ Index * null strings, and deleting array elements: Delete. (line 27) * null strings, as array subscripts: Uninitialized Subscripts. (line 43) -* null strings, converting numbers to strings: Conversion. (line 21) +* null strings, converting numbers to strings: Strings And Numbers. + (line 21) * null strings, matching: Gory Details. (line 164) * number as string of bits: Bitwise Functions. (line 109) * number of array elements: String Functions. (line 197) @@ -32911,7 +32942,7 @@ Index * numbers, Cliff random: Cliff Random Function. (line 6) * numbers, converting <1>: Bitwise Functions. (line 109) -* numbers, converting: Conversion. (line 6) +* numbers, converting: Strings And Numbers. (line 6) * numbers, converting, to strings: User-modified. (line 30) * numbers, hexadecimal: Nondecimal-numbers. (line 6) * numbers, octal: Nondecimal-numbers. (line 6) @@ -32926,7 +32957,7 @@ Index * octal numbers: Nondecimal-numbers. (line 6) * octal values, enabling interpretation of: Options. (line 211) * OFMT variable <1>: User-modified. (line 105) -* OFMT variable <2>: Conversion. (line 55) +* 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 114) @@ -33063,7 +33094,7 @@ Index * portability, gettext library and: Explaining gettext. (line 11) * portability, internationalization and: I18N Portability. (line 6) * portability, length() function: String Functions. (line 176) -* portability, new awk vs. old awk: Conversion. (line 55) +* portability, new awk vs. old awk: Strings And Numbers. (line 57) * portability, next statement in user-defined functions: Pass By Value/Reference. (line 91) * portability, NF variable, decrementing: Changing Fields. (line 115) @@ -33111,7 +33142,7 @@ Index * POSIX awk, interval expressions in: Regexp Operators. (line 136) * POSIX awk, next/nextfile statements and: Next Statement. (line 45) * POSIX awk, numeric strings and: Variable Typing. (line 6) -* POSIX awk, OFMT variable and <1>: Conversion. (line 55) +* POSIX awk, OFMT variable and <1>: Strings And Numbers. (line 57) * POSIX awk, OFMT variable and: OFMT. (line 27) * POSIX awk, period (.), using: Regexp Operators. (line 51) * POSIX awk, printf format strings and: Format Modifiers. (line 159) @@ -33488,6 +33519,8 @@ Index * sidebar, Operator Evaluation Order: Increment Ops. (line 58) * sidebar, Piping into sh: Redirection. (line 140) * sidebar, Portability Issues with #!: Executable Scripts. (line 31) +* sidebar, Pre-POSIX awk Used OFMT For String Conversion: Strings And Numbers. + (line 55) * 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. @@ -33602,7 +33635,7 @@ Index * string-translation functions: I18N Functions. (line 6) * strings splitting, example: String Functions. (line 333) * strings, converting <1>: Bitwise Functions. (line 109) -* strings, converting: Conversion. (line 6) +* strings, converting: Strings And Numbers. (line 6) * strings, converting letter case: String Functions. (line 520) * strings, converting, numbers to: User-modified. (line 30) * strings, empty, See null strings: awk split records. (line 114) @@ -33738,7 +33771,7 @@ Index * Trueman, David: History. (line 30) * trunc-mod operation: Arithmetic Ops. (line 66) * truth values: Truth Values. (line 6) -* type conversion: Conversion. (line 21) +* type conversion: Strings And Numbers. (line 21) * u debugger command (alias for until): Debugger Execution Control. (line 83) * unassigned array elements: Reference to Elements. @@ -33906,550 +33939,552 @@ Index  Tag Table: Node: Top1292 -Node: Foreword41827 -Node: Preface46172 -Ref: Preface-Footnote-149319 -Ref: Preface-Footnote-249426 -Node: History49658 -Node: Names52032 -Ref: Names-Footnote-153496 -Node: This Manual53569 -Ref: This Manual-Footnote-159348 -Node: Conventions59448 -Node: Manual History61604 -Ref: Manual History-Footnote-165043 -Ref: Manual History-Footnote-265084 -Node: How To Contribute65158 -Node: Acknowledgments66397 -Node: Getting Started70546 -Node: Running gawk72980 -Node: One-shot74170 -Node: Read Terminal75395 -Ref: Read Terminal-Footnote-177045 -Ref: Read Terminal-Footnote-277321 -Node: Long77492 -Node: Executable Scripts78868 -Ref: Executable Scripts-Footnote-180701 -Ref: Executable Scripts-Footnote-280803 -Node: Comments81350 -Node: Quoting83823 -Node: DOS Quoting89139 -Node: Sample Data Files89814 -Node: Very Simple92329 -Node: Two Rules96967 -Node: More Complex98861 -Ref: More Complex-Footnote-1101793 -Node: Statements/Lines101878 -Ref: Statements/Lines-Footnote-1106333 -Node: Other Features106598 -Node: When107526 -Node: Intro Summary109696 -Node: Invoking Gawk110462 -Node: Command Line111977 -Node: Options112768 -Ref: Options-Footnote-1128597 -Node: Other Arguments128622 -Node: Naming Standard Input131284 -Node: Environment Variables132378 -Node: AWKPATH Variable132936 -Ref: AWKPATH Variable-Footnote-1135808 -Ref: AWKPATH Variable-Footnote-2135853 -Node: AWKLIBPATH Variable136113 -Node: Other Environment Variables136872 -Node: Exit Status140527 -Node: Include Files141202 -Node: Loading Shared Libraries144780 -Node: Obsolete146164 -Node: Undocumented146861 -Node: Invoking Summary147128 -Node: Regexp148708 -Node: Regexp Usage150158 -Node: Escape Sequences152191 -Node: Regexp Operators157858 -Ref: Regexp Operators-Footnote-1165338 -Ref: Regexp Operators-Footnote-2165485 -Node: Bracket Expressions165583 -Ref: table-char-classes167473 -Node: GNU Regexp Operators169996 -Node: Case-sensitivity173719 -Ref: Case-sensitivity-Footnote-1176611 -Ref: Case-sensitivity-Footnote-2176846 -Node: Leftmost Longest176954 -Node: Computed Regexps178155 -Node: Regexp Summary181527 -Node: Reading Files182998 -Node: Records185090 -Node: awk split records185833 -Node: gawk split records190691 -Ref: gawk split records-Footnote-1195212 -Node: Fields195249 -Ref: Fields-Footnote-1198213 -Node: Nonconstant Fields198299 -Ref: Nonconstant Fields-Footnote-1200529 -Node: Changing Fields200731 -Node: Field Separators206685 -Node: Default Field Splitting209387 -Node: Regexp Field Splitting210504 -Node: Single Character Fields213845 -Node: Command Line Field Separator214904 -Node: Full Line Fields218246 -Ref: Full Line Fields-Footnote-1218754 -Node: Field Splitting Summary218800 -Ref: Field Splitting Summary-Footnote-1221899 -Node: Constant Size222000 -Node: Splitting By Content226607 -Ref: Splitting By Content-Footnote-1230357 -Node: Multiple Line230397 -Ref: Multiple Line-Footnote-1236253 -Node: Getline236432 -Node: Plain Getline238648 -Node: Getline/Variable240743 -Node: Getline/File241890 -Node: Getline/Variable/File243274 -Ref: Getline/Variable/File-Footnote-1244873 -Node: Getline/Pipe244960 -Node: Getline/Variable/Pipe247659 -Node: Getline/Coprocess248766 -Node: Getline/Variable/Coprocess250018 -Node: Getline Notes250755 -Node: Getline Summary253559 -Ref: table-getline-variants253967 -Node: Read Timeout254879 -Ref: Read Timeout-Footnote-1258706 -Node: Command line directories258764 -Node: Input Summary259668 -Node: Input Exercises262805 -Node: Printing263538 -Node: Print265260 -Node: Print Examples266601 -Node: Output Separators269380 -Node: OFMT271396 -Node: Printf272754 -Node: Basic Printf273660 -Node: Control Letters275199 -Node: Format Modifiers279051 -Node: Printf Examples285078 -Node: Redirection287542 -Node: Special Files294514 -Node: Special FD295045 -Ref: Special FD-Footnote-1298669 -Node: Special Network298743 -Node: Special Caveats299593 -Node: Close Files And Pipes300389 -Ref: Close Files And Pipes-Footnote-1307550 -Ref: Close Files And Pipes-Footnote-2307698 -Node: Output Summary307848 -Node: Output exercises308845 -Node: Expressions309525 -Node: Values310710 -Node: Constants311386 -Node: Scalar Constants312066 -Ref: Scalar Constants-Footnote-1312925 -Node: Nondecimal-numbers313175 -Node: Regexp Constants316175 -Node: Using Constant Regexps316650 -Node: Variables319720 -Node: Using Variables320375 -Node: Assignment Options322099 -Node: Conversion323974 -Ref: table-locale-affects329410 -Ref: Conversion-Footnote-1330034 -Node: All Operators330143 -Node: Arithmetic Ops330773 -Node: Concatenation333278 -Ref: Concatenation-Footnote-1336074 -Node: Assignment Ops336194 -Ref: table-assign-ops341177 -Node: Increment Ops342494 -Node: Truth Values and Conditions345932 -Node: Truth Values347015 -Node: Typing and Comparison348064 -Node: Variable Typing348857 -Ref: Variable Typing-Footnote-1352757 -Node: Comparison Operators352879 -Ref: table-relational-ops353289 -Node: POSIX String Comparison356839 -Ref: POSIX String Comparison-Footnote-1357923 -Node: Boolean Ops358061 -Ref: Boolean Ops-Footnote-1362131 -Node: Conditional Exp362222 -Node: Function Calls363949 -Node: Precedence367707 -Node: Locales371376 -Node: Expressions Summary373007 -Node: Patterns and Actions375504 -Node: Pattern Overview376620 -Node: Regexp Patterns378297 -Node: Expression Patterns378840 -Node: Ranges382621 -Node: BEGIN/END385727 -Node: Using BEGIN/END386489 -Ref: Using BEGIN/END-Footnote-1389225 -Node: I/O And BEGIN/END389331 -Node: BEGINFILE/ENDFILE391616 -Node: Empty394547 -Node: Using Shell Variables394864 -Node: Action Overview397147 -Node: Statements399474 -Node: If Statement401322 -Node: While Statement402820 -Node: Do Statement404864 -Node: For Statement406020 -Node: Switch Statement409172 -Node: Break Statement411275 -Node: Continue Statement413330 -Node: Next Statement415123 -Node: Nextfile Statement417513 -Node: Exit Statement420168 -Node: Built-in Variables422572 -Node: User-modified423699 -Ref: User-modified-Footnote-1431388 -Node: Auto-set431450 -Ref: Auto-set-Footnote-1444032 -Ref: Auto-set-Footnote-2444237 -Node: ARGC and ARGV444293 -Node: Pattern Action Summary448147 -Node: Arrays450370 -Node: Array Basics451919 -Node: Array Intro452745 -Ref: figure-array-elements454718 -Node: Reference to Elements457125 -Node: Assigning Elements459398 -Node: Array Example459889 -Node: Scanning an Array461621 -Node: Controlling Scanning464636 -Ref: Controlling Scanning-Footnote-1469809 -Node: Delete470125 -Ref: Delete-Footnote-1472890 -Node: Numeric Array Subscripts472947 -Node: Uninitialized Subscripts475130 -Node: Multidimensional476755 -Node: Multiscanning479848 -Node: Arrays of Arrays481437 -Node: Arrays Summary486100 -Node: Functions488205 -Node: Built-in489078 -Node: Calling Built-in490156 -Node: Numeric Functions492144 -Ref: Numeric Functions-Footnote-1495978 -Ref: Numeric Functions-Footnote-2496335 -Ref: Numeric Functions-Footnote-3496383 -Node: String Functions496652 -Ref: String Functions-Footnote-1519663 -Ref: String Functions-Footnote-2519792 -Ref: String Functions-Footnote-3520040 -Node: Gory Details520127 -Ref: table-sub-escapes521796 -Ref: table-sub-posix-92523150 -Ref: table-sub-proposed524501 -Ref: table-posix-sub525855 -Ref: table-gensub-escapes527400 -Ref: Gory Details-Footnote-1528576 -Ref: Gory Details-Footnote-2528627 -Node: I/O Functions528778 -Ref: I/O Functions-Footnote-1535901 -Node: Time Functions536048 -Ref: Time Functions-Footnote-1546512 -Ref: Time Functions-Footnote-2546580 -Ref: Time Functions-Footnote-3546738 -Ref: Time Functions-Footnote-4546849 -Ref: Time Functions-Footnote-5546961 -Ref: Time Functions-Footnote-6547188 -Node: Bitwise Functions547454 -Ref: table-bitwise-ops548016 -Ref: Bitwise Functions-Footnote-1552261 -Node: Type Functions552445 -Node: I18N Functions553587 -Node: User-defined555232 -Node: Definition Syntax556036 -Ref: Definition Syntax-Footnote-1560961 -Node: Function Example561030 -Ref: Function Example-Footnote-1563674 -Node: Function Caveats563696 -Node: Calling A Function564214 -Node: Variable Scope565169 -Node: Pass By Value/Reference568157 -Node: Return Statement571665 -Node: Dynamic Typing574649 -Node: Indirect Calls575578 -Node: Functions Summary585291 -Node: Library Functions587830 -Ref: Library Functions-Footnote-1591448 -Ref: Library Functions-Footnote-2591591 -Node: Library Names591762 -Ref: Library Names-Footnote-1595235 -Ref: Library Names-Footnote-2595455 -Node: General Functions595541 -Node: Strtonum Function596569 -Node: Assert Function599349 -Node: Round Function602675 -Node: Cliff Random Function604216 -Node: Ordinal Functions605232 -Ref: Ordinal Functions-Footnote-1608309 -Ref: Ordinal Functions-Footnote-2608561 -Node: Join Function608772 -Ref: Join Function-Footnote-1610543 -Node: Getlocaltime Function610743 -Node: Readfile Function614479 -Node: Data File Management616318 -Node: Filetrans Function616950 -Node: Rewind Function621019 -Node: File Checking622406 -Ref: File Checking-Footnote-1623538 -Node: Empty Files623739 -Node: Ignoring Assigns625718 -Node: Getopt Function627272 -Ref: Getopt Function-Footnote-1638575 -Node: Passwd Functions638778 -Ref: Passwd Functions-Footnote-1647757 -Node: Group Functions647845 -Ref: Group Functions-Footnote-1655786 -Node: Walking Arrays655999 -Node: Library Functions Summary657602 -Node: Library exercises658990 -Node: Sample Programs660270 -Node: Running Examples661040 -Node: Clones661768 -Node: Cut Program662992 -Node: Egrep Program672860 -Ref: Egrep Program-Footnote-1680831 -Node: Id Program680941 -Node: Split Program684605 -Ref: Split Program-Footnote-1688143 -Node: Tee Program688271 -Node: Uniq Program691078 -Node: Wc Program698508 -Ref: Wc Program-Footnote-1702773 -Node: Miscellaneous Programs702865 -Node: Dupword Program704078 -Node: Alarm Program706109 -Node: Translate Program710923 -Ref: Translate Program-Footnote-1715314 -Ref: Translate Program-Footnote-2715584 -Node: Labels Program715718 -Ref: Labels Program-Footnote-1719089 -Node: Word Sorting719173 -Node: History Sorting723216 -Node: Extract Program725052 -Node: Simple Sed732588 -Node: Igawk Program735650 -Ref: Igawk Program-Footnote-1749961 -Ref: Igawk Program-Footnote-2750162 -Node: Anagram Program750300 -Node: Signature Program753368 -Node: Programs Summary754615 -Node: Programs Exercises755830 -Node: Advanced Features759481 -Node: Nondecimal Data761429 -Node: Array Sorting763006 -Node: Controlling Array Traversal763703 -Node: Array Sorting Functions771983 -Ref: Array Sorting Functions-Footnote-1775890 -Node: Two-way I/O776084 -Ref: Two-way I/O-Footnote-1781600 -Node: TCP/IP Networking781682 -Node: Profiling784526 -Node: Advanced Features Summary792068 -Node: Internationalization793932 -Node: I18N and L10N795412 -Node: Explaining gettext796098 -Ref: Explaining gettext-Footnote-1801238 -Ref: Explaining gettext-Footnote-2801422 -Node: Programmer i18n801587 -Node: Translator i18n805812 -Node: String Extraction806606 -Ref: String Extraction-Footnote-1807567 -Node: Printf Ordering807653 -Ref: Printf Ordering-Footnote-1810435 -Node: I18N Portability810499 -Ref: I18N Portability-Footnote-1812948 -Node: I18N Example813011 -Ref: I18N Example-Footnote-1815733 -Node: Gawk I18N815805 -Node: I18N Summary816443 -Node: Debugger817782 -Node: Debugging818804 -Node: Debugging Concepts819245 -Node: Debugging Terms821101 -Node: Awk Debugging823698 -Node: Sample Debugging Session824590 -Node: Debugger Invocation825110 -Node: Finding The Bug826443 -Node: List of Debugger Commands832925 -Node: Breakpoint Control834257 -Node: Debugger Execution Control837921 -Node: Viewing And Changing Data841281 -Node: Execution Stack844639 -Node: Debugger Info846152 -Node: Miscellaneous Debugger Commands850146 -Node: Readline Support855330 -Node: Limitations856222 -Node: Debugging Summary858496 -Node: Arbitrary Precision Arithmetic859660 -Node: Computer Arithmetic860989 -Ref: Computer Arithmetic-Footnote-1865376 -Node: Math Definitions865433 -Ref: table-ieee-formats868317 -Node: MPFR features868821 -Node: FP Math Caution870463 -Ref: FP Math Caution-Footnote-1871504 -Node: Inexactness of computations871873 -Node: Inexact representation872821 -Node: Comparing FP Values874176 -Node: Errors accumulate875140 -Node: Getting Accuracy876573 -Node: Try To Round879232 -Node: Setting precision880131 -Ref: table-predefined-precision-strings880813 -Node: Setting the rounding mode882606 -Ref: table-gawk-rounding-modes882970 -Ref: Setting the rounding mode-Footnote-1886424 -Node: Arbitrary Precision Integers886603 -Ref: Arbitrary Precision Integers-Footnote-1889573 -Node: POSIX Floating Point Problems889722 -Ref: POSIX Floating Point Problems-Footnote-1893591 -Node: Floating point summary893629 -Node: Dynamic Extensions895846 -Node: Extension Intro897398 -Node: Plugin License898663 -Node: Extension Mechanism Outline899348 -Ref: figure-load-extension899772 -Ref: figure-load-new-function901257 -Ref: figure-call-new-function902259 -Node: Extension API Description904243 -Node: Extension API Functions Introduction905693 -Node: General Data Types910558 -Ref: General Data Types-Footnote-1916251 -Node: Requesting Values916550 -Ref: table-value-types-returned917287 -Node: Memory Allocation Functions918245 -Ref: Memory Allocation Functions-Footnote-1920992 -Node: Constructor Functions921088 -Node: Registration Functions922846 -Node: Extension Functions923531 -Node: Exit Callback Functions925833 -Node: Extension Version String927082 -Node: Input Parsers927732 -Node: Output Wrappers937535 -Node: Two-way processors942051 -Node: Printing Messages944255 -Ref: Printing Messages-Footnote-1945332 -Node: Updating `ERRNO'945484 -Node: Accessing Parameters946223 -Node: Symbol Table Access947453 -Node: Symbol table by name947967 -Node: Symbol table by cookie949943 -Ref: Symbol table by cookie-Footnote-1954076 -Node: Cached values954139 -Ref: Cached values-Footnote-1957643 -Node: Array Manipulation957734 -Ref: Array Manipulation-Footnote-1958832 -Node: Array Data Types958871 -Ref: Array Data Types-Footnote-1961574 -Node: Array Functions961666 -Node: Flattening Arrays965540 -Node: Creating Arrays972392 -Node: Extension API Variables977123 -Node: Extension Versioning977759 -Node: Extension API Informational Variables979660 -Node: Extension API Boilerplate980746 -Node: Finding Extensions984550 -Node: Extension Example985110 -Node: Internal File Description985840 -Node: Internal File Ops989931 -Ref: Internal File Ops-Footnote-11001363 -Node: Using Internal File Ops1001503 -Ref: Using Internal File Ops-Footnote-11003850 -Node: Extension Samples1004118 -Node: Extension Sample File Functions1005642 -Node: Extension Sample Fnmatch1013210 -Node: Extension Sample Fork1014691 -Node: Extension Sample Inplace1015904 -Node: Extension Sample Ord1017579 -Node: Extension Sample Readdir1018415 -Ref: table-readdir-file-types1019271 -Node: Extension Sample Revout1020070 -Node: Extension Sample Rev2way1020661 -Node: Extension Sample Read write array1021402 -Node: Extension Sample Readfile1023281 -Node: Extension Sample API Tests1024381 -Node: Extension Sample Time1024906 -Node: gawkextlib1026221 -Node: Extension summary1029034 -Node: Extension Exercises1032727 -Node: Language History1033449 -Node: V7/SVR3.11035092 -Node: SVR41037412 -Node: POSIX1038854 -Node: BTL1040240 -Node: POSIX/GNU1040974 -Node: Feature History1046573 -Node: Common Extensions1059703 -Node: Ranges and Locales1061015 -Ref: Ranges and Locales-Footnote-11065632 -Ref: Ranges and Locales-Footnote-21065659 -Ref: Ranges and Locales-Footnote-31065893 -Node: Contributors1066114 -Node: History summary1071576 -Node: Installation1072945 -Node: Gawk Distribution1073896 -Node: Getting1074380 -Node: Extracting1075204 -Node: Distribution contents1076846 -Node: Unix Installation1082563 -Node: Quick Installation1083180 -Node: Additional Configuration Options1085622 -Node: Configuration Philosophy1087360 -Node: Non-Unix Installation1089711 -Node: PC Installation1090169 -Node: PC Binary Installation1091480 -Node: PC Compiling1093328 -Ref: PC Compiling-Footnote-11096327 -Node: PC Testing1096432 -Node: PC Using1097608 -Node: Cygwin1101766 -Node: MSYS1102575 -Node: VMS Installation1103089 -Node: VMS Compilation1103885 -Ref: VMS Compilation-Footnote-11105107 -Node: VMS Dynamic Extensions1105165 -Node: VMS Installation Details1106538 -Node: VMS Running1108790 -Node: VMS GNV1111624 -Node: VMS Old Gawk1112347 -Node: Bugs1112817 -Node: Other Versions1116821 -Node: Installation summary1123076 -Node: Notes1124132 -Node: Compatibility Mode1124997 -Node: Additions1125779 -Node: Accessing The Source1126704 -Node: Adding Code1128140 -Node: New Ports1134318 -Node: Derived Files1138799 -Ref: Derived Files-Footnote-11143880 -Ref: Derived Files-Footnote-21143914 -Ref: Derived Files-Footnote-31144510 -Node: Future Extensions1144624 -Node: Implementation Limitations1145230 -Node: Extension Design1146478 -Node: Old Extension Problems1147632 -Ref: Old Extension Problems-Footnote-11149149 -Node: Extension New Mechanism Goals1149206 -Ref: Extension New Mechanism Goals-Footnote-11152566 -Node: Extension Other Design Decisions1152755 -Node: Extension Future Growth1154861 -Node: Old Extension Mechanism1155697 -Node: Notes summary1157459 -Node: Basic Concepts1158645 -Node: Basic High Level1159326 -Ref: figure-general-flow1159598 -Ref: figure-process-flow1160197 -Ref: Basic High Level-Footnote-11163426 -Node: Basic Data Typing1163611 -Node: Glossary1166939 -Node: Copying1192091 -Node: GNU Free Documentation License1229647 -Node: Index1254783 +Node: Foreword42034 +Node: Preface46379 +Ref: Preface-Footnote-149526 +Ref: Preface-Footnote-249633 +Node: History49865 +Node: Names52239 +Ref: Names-Footnote-153703 +Node: This Manual53776 +Ref: This Manual-Footnote-159555 +Node: Conventions59655 +Node: Manual History61811 +Ref: Manual History-Footnote-165250 +Ref: Manual History-Footnote-265291 +Node: How To Contribute65365 +Node: Acknowledgments66604 +Node: Getting Started70753 +Node: Running gawk73187 +Node: One-shot74377 +Node: Read Terminal75602 +Ref: Read Terminal-Footnote-177252 +Ref: Read Terminal-Footnote-277528 +Node: Long77699 +Node: Executable Scripts79075 +Ref: Executable Scripts-Footnote-180908 +Ref: Executable Scripts-Footnote-281010 +Node: Comments81557 +Node: Quoting84030 +Node: DOS Quoting89346 +Node: Sample Data Files90021 +Node: Very Simple92536 +Node: Two Rules97174 +Node: More Complex99068 +Ref: More Complex-Footnote-1102000 +Node: Statements/Lines102085 +Ref: Statements/Lines-Footnote-1106540 +Node: Other Features106805 +Node: When107733 +Node: Intro Summary109903 +Node: Invoking Gawk110669 +Node: Command Line112184 +Node: Options112975 +Ref: Options-Footnote-1128804 +Node: Other Arguments128829 +Node: Naming Standard Input131491 +Node: Environment Variables132585 +Node: AWKPATH Variable133143 +Ref: AWKPATH Variable-Footnote-1136015 +Ref: AWKPATH Variable-Footnote-2136060 +Node: AWKLIBPATH Variable136320 +Node: Other Environment Variables137079 +Node: Exit Status140734 +Node: Include Files141409 +Node: Loading Shared Libraries144987 +Node: Obsolete146371 +Node: Undocumented147068 +Node: Invoking Summary147335 +Node: Regexp148915 +Node: Regexp Usage150365 +Node: Escape Sequences152398 +Node: Regexp Operators158065 +Ref: Regexp Operators-Footnote-1165545 +Ref: Regexp Operators-Footnote-2165692 +Node: Bracket Expressions165790 +Ref: table-char-classes167680 +Node: GNU Regexp Operators170203 +Node: Case-sensitivity173926 +Ref: Case-sensitivity-Footnote-1176818 +Ref: Case-sensitivity-Footnote-2177053 +Node: Leftmost Longest177161 +Node: Computed Regexps178362 +Node: Regexp Summary181734 +Node: Reading Files183205 +Node: Records185297 +Node: awk split records186040 +Node: gawk split records190898 +Ref: gawk split records-Footnote-1195419 +Node: Fields195456 +Ref: Fields-Footnote-1198420 +Node: Nonconstant Fields198506 +Ref: Nonconstant Fields-Footnote-1200736 +Node: Changing Fields200938 +Node: Field Separators206892 +Node: Default Field Splitting209594 +Node: Regexp Field Splitting210711 +Node: Single Character Fields214052 +Node: Command Line Field Separator215111 +Node: Full Line Fields218453 +Ref: Full Line Fields-Footnote-1218961 +Node: Field Splitting Summary219007 +Ref: Field Splitting Summary-Footnote-1222106 +Node: Constant Size222207 +Node: Splitting By Content226814 +Ref: Splitting By Content-Footnote-1230564 +Node: Multiple Line230604 +Ref: Multiple Line-Footnote-1236460 +Node: Getline236639 +Node: Plain Getline238855 +Node: Getline/Variable240950 +Node: Getline/File242097 +Node: Getline/Variable/File243481 +Ref: Getline/Variable/File-Footnote-1245080 +Node: Getline/Pipe245167 +Node: Getline/Variable/Pipe247866 +Node: Getline/Coprocess248973 +Node: Getline/Variable/Coprocess250225 +Node: Getline Notes250962 +Node: Getline Summary253766 +Ref: table-getline-variants254174 +Node: Read Timeout255086 +Ref: Read Timeout-Footnote-1258913 +Node: Command line directories258971 +Node: Input Summary259875 +Node: Input Exercises263012 +Node: Printing263745 +Node: Print265467 +Node: Print Examples266808 +Node: Output Separators269587 +Node: OFMT271603 +Node: Printf272961 +Node: Basic Printf273867 +Node: Control Letters275406 +Node: Format Modifiers279258 +Node: Printf Examples285285 +Node: Redirection287749 +Node: Special Files294721 +Node: Special FD295252 +Ref: Special FD-Footnote-1298876 +Node: Special Network298950 +Node: Special Caveats299800 +Node: Close Files And Pipes300596 +Ref: Close Files And Pipes-Footnote-1307757 +Ref: Close Files And Pipes-Footnote-2307905 +Node: Output Summary308055 +Node: Output exercises309052 +Node: Expressions309732 +Node: Values310917 +Node: Constants311593 +Node: Scalar Constants312273 +Ref: Scalar Constants-Footnote-1313132 +Node: Nondecimal-numbers313382 +Node: Regexp Constants316382 +Node: Using Constant Regexps316857 +Node: Variables319927 +Node: Using Variables320582 +Node: Assignment Options322306 +Node: Conversion324181 +Node: Strings And Numbers324705 +Ref: Strings And Numbers-Footnote-1327767 +Node: Locale influences conversions327876 +Ref: table-locale-affects330593 +Node: All Operators331181 +Node: Arithmetic Ops331811 +Node: Concatenation334316 +Ref: Concatenation-Footnote-1337112 +Node: Assignment Ops337232 +Ref: table-assign-ops342215 +Node: Increment Ops343532 +Node: Truth Values and Conditions346970 +Node: Truth Values348053 +Node: Typing and Comparison349102 +Node: Variable Typing349895 +Ref: Variable Typing-Footnote-1353795 +Node: Comparison Operators353917 +Ref: table-relational-ops354327 +Node: POSIX String Comparison357877 +Ref: POSIX String Comparison-Footnote-1358961 +Node: Boolean Ops359099 +Ref: Boolean Ops-Footnote-1363169 +Node: Conditional Exp363260 +Node: Function Calls364987 +Node: Precedence368745 +Node: Locales372414 +Node: Expressions Summary374045 +Node: Patterns and Actions376586 +Node: Pattern Overview377702 +Node: Regexp Patterns379379 +Node: Expression Patterns379922 +Node: Ranges383703 +Node: BEGIN/END386809 +Node: Using BEGIN/END387571 +Ref: Using BEGIN/END-Footnote-1390307 +Node: I/O And BEGIN/END390413 +Node: BEGINFILE/ENDFILE392698 +Node: Empty395629 +Node: Using Shell Variables395946 +Node: Action Overview398229 +Node: Statements400556 +Node: If Statement402404 +Node: While Statement403902 +Node: Do Statement405946 +Node: For Statement407102 +Node: Switch Statement410254 +Node: Break Statement412357 +Node: Continue Statement414412 +Node: Next Statement416205 +Node: Nextfile Statement418595 +Node: Exit Statement421250 +Node: Built-in Variables423654 +Node: User-modified424781 +Ref: User-modified-Footnote-1432470 +Node: Auto-set432532 +Ref: Auto-set-Footnote-1445114 +Ref: Auto-set-Footnote-2445319 +Node: ARGC and ARGV445375 +Node: Pattern Action Summary449229 +Node: Arrays451452 +Node: Array Basics453001 +Node: Array Intro453827 +Ref: figure-array-elements455800 +Node: Reference to Elements458207 +Node: Assigning Elements460480 +Node: Array Example460971 +Node: Scanning an Array462703 +Node: Controlling Scanning465718 +Ref: Controlling Scanning-Footnote-1470891 +Node: Delete471207 +Ref: Delete-Footnote-1473972 +Node: Numeric Array Subscripts474029 +Node: Uninitialized Subscripts476212 +Node: Multidimensional477837 +Node: Multiscanning480930 +Node: Arrays of Arrays482519 +Node: Arrays Summary487182 +Node: Functions489287 +Node: Built-in490160 +Node: Calling Built-in491238 +Node: Numeric Functions493226 +Ref: Numeric Functions-Footnote-1497060 +Ref: Numeric Functions-Footnote-2497417 +Ref: Numeric Functions-Footnote-3497465 +Node: String Functions497734 +Ref: String Functions-Footnote-1520745 +Ref: String Functions-Footnote-2520874 +Ref: String Functions-Footnote-3521122 +Node: Gory Details521209 +Ref: table-sub-escapes522878 +Ref: table-sub-posix-92524232 +Ref: table-sub-proposed525583 +Ref: table-posix-sub526937 +Ref: table-gensub-escapes528482 +Ref: Gory Details-Footnote-1529658 +Ref: Gory Details-Footnote-2529709 +Node: I/O Functions529860 +Ref: I/O Functions-Footnote-1536983 +Node: Time Functions537130 +Ref: Time Functions-Footnote-1547594 +Ref: Time Functions-Footnote-2547662 +Ref: Time Functions-Footnote-3547820 +Ref: Time Functions-Footnote-4547931 +Ref: Time Functions-Footnote-5548043 +Ref: Time Functions-Footnote-6548270 +Node: Bitwise Functions548536 +Ref: table-bitwise-ops549098 +Ref: Bitwise Functions-Footnote-1553343 +Node: Type Functions553527 +Node: I18N Functions554669 +Node: User-defined556314 +Node: Definition Syntax557118 +Ref: Definition Syntax-Footnote-1562043 +Node: Function Example562112 +Ref: Function Example-Footnote-1564756 +Node: Function Caveats564778 +Node: Calling A Function565296 +Node: Variable Scope566251 +Node: Pass By Value/Reference569239 +Node: Return Statement572747 +Node: Dynamic Typing575731 +Node: Indirect Calls576660 +Node: Functions Summary586373 +Node: Library Functions588912 +Ref: Library Functions-Footnote-1592530 +Ref: Library Functions-Footnote-2592673 +Node: Library Names592844 +Ref: Library Names-Footnote-1596317 +Ref: Library Names-Footnote-2596537 +Node: General Functions596623 +Node: Strtonum Function597651 +Node: Assert Function600431 +Node: Round Function603757 +Node: Cliff Random Function605298 +Node: Ordinal Functions606314 +Ref: Ordinal Functions-Footnote-1609391 +Ref: Ordinal Functions-Footnote-2609643 +Node: Join Function609854 +Ref: Join Function-Footnote-1611625 +Node: Getlocaltime Function611825 +Node: Readfile Function615561 +Node: Data File Management617400 +Node: Filetrans Function618032 +Node: Rewind Function622101 +Node: File Checking623488 +Ref: File Checking-Footnote-1624620 +Node: Empty Files624821 +Node: Ignoring Assigns626800 +Node: Getopt Function628354 +Ref: Getopt Function-Footnote-1639657 +Node: Passwd Functions639860 +Ref: Passwd Functions-Footnote-1648839 +Node: Group Functions648927 +Ref: Group Functions-Footnote-1656868 +Node: Walking Arrays657081 +Node: Library Functions Summary658684 +Node: Library exercises660072 +Node: Sample Programs661352 +Node: Running Examples662122 +Node: Clones662850 +Node: Cut Program664074 +Node: Egrep Program673942 +Ref: Egrep Program-Footnote-1681913 +Node: Id Program682023 +Node: Split Program685687 +Ref: Split Program-Footnote-1689225 +Node: Tee Program689353 +Node: Uniq Program692160 +Node: Wc Program699590 +Ref: Wc Program-Footnote-1703855 +Node: Miscellaneous Programs703947 +Node: Dupword Program705160 +Node: Alarm Program707191 +Node: Translate Program712005 +Ref: Translate Program-Footnote-1716396 +Ref: Translate Program-Footnote-2716666 +Node: Labels Program716800 +Ref: Labels Program-Footnote-1720171 +Node: Word Sorting720255 +Node: History Sorting724298 +Node: Extract Program726134 +Node: Simple Sed733670 +Node: Igawk Program736732 +Ref: Igawk Program-Footnote-1751043 +Ref: Igawk Program-Footnote-2751244 +Node: Anagram Program751382 +Node: Signature Program754450 +Node: Programs Summary755697 +Node: Programs Exercises756912 +Node: Advanced Features760563 +Node: Nondecimal Data762511 +Node: Array Sorting764088 +Node: Controlling Array Traversal764785 +Node: Array Sorting Functions773065 +Ref: Array Sorting Functions-Footnote-1776972 +Node: Two-way I/O777166 +Ref: Two-way I/O-Footnote-1782682 +Node: TCP/IP Networking782764 +Node: Profiling785608 +Node: Advanced Features Summary793150 +Node: Internationalization795014 +Node: I18N and L10N796494 +Node: Explaining gettext797180 +Ref: Explaining gettext-Footnote-1802320 +Ref: Explaining gettext-Footnote-2802504 +Node: Programmer i18n802669 +Node: Translator i18n806894 +Node: String Extraction807688 +Ref: String Extraction-Footnote-1808649 +Node: Printf Ordering808735 +Ref: Printf Ordering-Footnote-1811517 +Node: I18N Portability811581 +Ref: I18N Portability-Footnote-1814030 +Node: I18N Example814093 +Ref: I18N Example-Footnote-1816815 +Node: Gawk I18N816887 +Node: I18N Summary817525 +Node: Debugger818864 +Node: Debugging819886 +Node: Debugging Concepts820327 +Node: Debugging Terms822183 +Node: Awk Debugging824780 +Node: Sample Debugging Session825672 +Node: Debugger Invocation826192 +Node: Finding The Bug827525 +Node: List of Debugger Commands834007 +Node: Breakpoint Control835339 +Node: Debugger Execution Control839003 +Node: Viewing And Changing Data842363 +Node: Execution Stack845721 +Node: Debugger Info847234 +Node: Miscellaneous Debugger Commands851228 +Node: Readline Support856412 +Node: Limitations857304 +Node: Debugging Summary859578 +Node: Arbitrary Precision Arithmetic860742 +Node: Computer Arithmetic862071 +Ref: Computer Arithmetic-Footnote-1866458 +Node: Math Definitions866515 +Ref: table-ieee-formats869399 +Node: MPFR features869903 +Node: FP Math Caution871545 +Ref: FP Math Caution-Footnote-1872586 +Node: Inexactness of computations872955 +Node: Inexact representation873903 +Node: Comparing FP Values875258 +Node: Errors accumulate876222 +Node: Getting Accuracy877655 +Node: Try To Round880314 +Node: Setting precision881213 +Ref: table-predefined-precision-strings881895 +Node: Setting the rounding mode883688 +Ref: table-gawk-rounding-modes884052 +Ref: Setting the rounding mode-Footnote-1887506 +Node: Arbitrary Precision Integers887685 +Ref: Arbitrary Precision Integers-Footnote-1890688 +Node: POSIX Floating Point Problems890837 +Ref: POSIX Floating Point Problems-Footnote-1894713 +Node: Floating point summary894751 +Node: Dynamic Extensions896968 +Node: Extension Intro898520 +Node: Plugin License899785 +Node: Extension Mechanism Outline900470 +Ref: figure-load-extension900894 +Ref: figure-load-new-function902379 +Ref: figure-call-new-function903381 +Node: Extension API Description905365 +Node: Extension API Functions Introduction906815 +Node: General Data Types911680 +Ref: General Data Types-Footnote-1917373 +Node: Requesting Values917672 +Ref: table-value-types-returned918409 +Node: Memory Allocation Functions919367 +Ref: Memory Allocation Functions-Footnote-1922114 +Node: Constructor Functions922210 +Node: Registration Functions923968 +Node: Extension Functions924653 +Node: Exit Callback Functions926955 +Node: Extension Version String928204 +Node: Input Parsers928854 +Node: Output Wrappers938657 +Node: Two-way processors943173 +Node: Printing Messages945377 +Ref: Printing Messages-Footnote-1946454 +Node: Updating `ERRNO'946606 +Node: Accessing Parameters947345 +Node: Symbol Table Access948575 +Node: Symbol table by name949089 +Node: Symbol table by cookie951065 +Ref: Symbol table by cookie-Footnote-1955198 +Node: Cached values955261 +Ref: Cached values-Footnote-1958765 +Node: Array Manipulation958856 +Ref: Array Manipulation-Footnote-1959954 +Node: Array Data Types959993 +Ref: Array Data Types-Footnote-1962696 +Node: Array Functions962788 +Node: Flattening Arrays966662 +Node: Creating Arrays973514 +Node: Extension API Variables978245 +Node: Extension Versioning978881 +Node: Extension API Informational Variables980782 +Node: Extension API Boilerplate981868 +Node: Finding Extensions985672 +Node: Extension Example986232 +Node: Internal File Description986962 +Node: Internal File Ops991053 +Ref: Internal File Ops-Footnote-11002485 +Node: Using Internal File Ops1002625 +Ref: Using Internal File Ops-Footnote-11004972 +Node: Extension Samples1005240 +Node: Extension Sample File Functions1006764 +Node: Extension Sample Fnmatch1014332 +Node: Extension Sample Fork1015813 +Node: Extension Sample Inplace1017026 +Node: Extension Sample Ord1018701 +Node: Extension Sample Readdir1019537 +Ref: table-readdir-file-types1020393 +Node: Extension Sample Revout1021192 +Node: Extension Sample Rev2way1021783 +Node: Extension Sample Read write array1022524 +Node: Extension Sample Readfile1024403 +Node: Extension Sample API Tests1025503 +Node: Extension Sample Time1026028 +Node: gawkextlib1027343 +Node: Extension summary1030156 +Node: Extension Exercises1033849 +Node: Language History1034571 +Node: V7/SVR3.11036214 +Node: SVR41038534 +Node: POSIX1039976 +Node: BTL1041362 +Node: POSIX/GNU1042096 +Node: Feature History1047695 +Node: Common Extensions1060825 +Node: Ranges and Locales1062137 +Ref: Ranges and Locales-Footnote-11066754 +Ref: Ranges and Locales-Footnote-21066781 +Ref: Ranges and Locales-Footnote-31067015 +Node: Contributors1067236 +Node: History summary1072698 +Node: Installation1074067 +Node: Gawk Distribution1075018 +Node: Getting1075502 +Node: Extracting1076326 +Node: Distribution contents1077968 +Node: Unix Installation1083685 +Node: Quick Installation1084302 +Node: Additional Configuration Options1086744 +Node: Configuration Philosophy1088482 +Node: Non-Unix Installation1090833 +Node: PC Installation1091291 +Node: PC Binary Installation1092602 +Node: PC Compiling1094450 +Ref: PC Compiling-Footnote-11097449 +Node: PC Testing1097554 +Node: PC Using1098730 +Node: Cygwin1102888 +Node: MSYS1103697 +Node: VMS Installation1104211 +Node: VMS Compilation1105007 +Ref: VMS Compilation-Footnote-11106229 +Node: VMS Dynamic Extensions1106287 +Node: VMS Installation Details1107660 +Node: VMS Running1109912 +Node: VMS GNV1112746 +Node: VMS Old Gawk1113469 +Node: Bugs1113939 +Node: Other Versions1117943 +Node: Installation summary1124198 +Node: Notes1125254 +Node: Compatibility Mode1126119 +Node: Additions1126901 +Node: Accessing The Source1127826 +Node: Adding Code1129262 +Node: New Ports1135440 +Node: Derived Files1139921 +Ref: Derived Files-Footnote-11145002 +Ref: Derived Files-Footnote-21145036 +Ref: Derived Files-Footnote-31145632 +Node: Future Extensions1145746 +Node: Implementation Limitations1146352 +Node: Extension Design1147600 +Node: Old Extension Problems1148754 +Ref: Old Extension Problems-Footnote-11150271 +Node: Extension New Mechanism Goals1150328 +Ref: Extension New Mechanism Goals-Footnote-11153688 +Node: Extension Other Design Decisions1153877 +Node: Extension Future Growth1155983 +Node: Old Extension Mechanism1156819 +Node: Notes summary1158581 +Node: Basic Concepts1159767 +Node: Basic High Level1160448 +Ref: figure-general-flow1160720 +Ref: figure-process-flow1161319 +Ref: Basic High Level-Footnote-11164548 +Node: Basic Data Typing1164733 +Node: Glossary1168061 +Node: Copying1193213 +Node: GNU Free Documentation License1230769 +Node: Index1255905  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 3d910ee0..b210da10 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -611,6 +611,9 @@ particular records in a file and perform operations upon them. This is an advanced method of input. * Conversion:: The conversion of strings to numbers and vice versa. +* Strings And Numbers:: How @command{awk} Converts Between + Strings And Numbers. +* Locale influences conversions:: How the locale may affect conversions. * All Operators:: @command{gawk}'s operators. * Arithmetic Ops:: Arithmetic operations (@samp{+}, @samp{-}, etc.) @@ -10663,6 +10666,19 @@ sequences @node Conversion @subsection Conversion of Strings and Numbers +Number to string and string to number conversion are generally +straightforward. There can be subtleties to be aware of; +this @value{SECTION} discusses this important facet of @command{awk}. + +@menu +* Strings And Numbers:: How @command{awk} Converts Between Strings And + Numbers. +* Locale influences conversions:: How the locale may affect conversions. +@end menu + +@node Strings And Numbers +@subsubsection How @command{awk} Converts Between Strings And Numbers + @cindex converting, strings to numbers @cindex strings, converting @cindex numbers, converting @@ -10732,6 +10748,35 @@ b = a "" @code{b} has the value @code{"12"}, not @code{"12.00"}. @value{DARKCORNER} +@cindex sidebar, Pre-POSIX @command{awk} Used @code{OFMT} For String Conversion +@ifdocbook +@docbook +Pre-POSIX @command{awk} Used @code{OFMT} For String Conversion +@end docbook + +@cindex POSIX @command{awk}, @code{OFMT} variable and +@cindex @code{OFMT} variable +@cindex portability, new @command{awk} vs.@: old @command{awk} +@cindex @command{awk}, new vs.@: old, @code{OFMT} variable +Prior to the POSIX standard, @command{awk} used the value +of @code{OFMT} for converting numbers to strings. @code{OFMT} +specifies the output format to use when printing numbers with @code{print}. +@code{CONVFMT} was introduced in order to separate the semantics of +conversion from the semantics of printing. Both @code{CONVFMT} and +@code{OFMT} have the same default value: @code{"%.6g"}. In the vast majority +of cases, old @command{awk} programs do not change their behavior. +@xref{Print}, for more information on the @code{print} statement. + +@docbook + +@end docbook +@end ifdocbook + +@ifnotdocbook +@cartouche +@center @b{Pre-POSIX @command{awk} Used @code{OFMT} For String Conversion} + + @cindex POSIX @command{awk}, @code{OFMT} variable and @cindex @code{OFMT} variable @cindex portability, new @command{awk} vs.@: old @command{awk} @@ -10744,6 +10789,11 @@ conversion from the semantics of printing. Both @code{CONVFMT} and @code{OFMT} have the same default value: @code{"%.6g"}. In the vast majority of cases, old @command{awk} programs do not change their behavior. @xref{Print}, for more information on the @code{print} statement. +@end cartouche +@end ifnotdocbook + +@node Locale influences conversions +@subsubsection Locales Can Influence Conversion Where you are can matter when it comes to converting between numbers and strings. The local character set and language---the @dfn{locale}---can @@ -12632,6 +12682,7 @@ of others let you control how @command{awk} behaves. Numbers are automatically converted to strings, and strings to numbers, as needed by @command{awk}. Numeric values are converted as if they were formatted with @code{sprintf()} using the format in @code{CONVFMT}. +Locales can influence the conversions. @item @command{awk} provides the usual arithmetic operators (addition, @@ -30354,7 +30405,7 @@ the following computes 5432, @c @end docbook the result of which is beyond the -limits of ordinary @command{gawk} numbers: +limits of ordinary hardware double-precision floating point values: @example $ @kbd{gawk -M 'BEGIN @{} @@ -30462,7 +30513,7 @@ source code constants.) 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 machine-dependent additional +C standard, which ignores case and can allow implementation-dependent additional characters after the @samp{nan} and allow either @samp{inf} or @samp{infinity}. @end itemize diff --git a/doc/gawktexi.in b/doc/gawktexi.in index eac398a9..fb7fa188 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -606,6 +606,9 @@ particular records in a file and perform operations upon them. This is an advanced method of input. * Conversion:: The conversion of strings to numbers and vice versa. +* Strings And Numbers:: How @command{awk} Converts Between + Strings And Numbers. +* Locale influences conversions:: How the locale may affect conversions. * All Operators:: @command{gawk}'s operators. * Arithmetic Ops:: Arithmetic operations (@samp{+}, @samp{-}, etc.) @@ -10153,6 +10156,19 @@ sequences @node Conversion @subsection Conversion of Strings and Numbers +Number to string and string to number conversion are generally +straightforward. There can be subtleties to be aware of; +this @value{SECTION} discusses this important facet of @command{awk}. + +@menu +* Strings And Numbers:: How @command{awk} Converts Between Strings And + Numbers. +* Locale influences conversions:: How the locale may affect conversions. +@end menu + +@node Strings And Numbers +@subsubsection How @command{awk} Converts Between Strings And Numbers + @cindex converting, strings to numbers @cindex strings, converting @cindex numbers, converting @@ -10222,6 +10238,7 @@ b = a "" @code{b} has the value @code{"12"}, not @code{"12.00"}. @value{DARKCORNER} +@sidebar Pre-POSIX @command{awk} Used @code{OFMT} For String Conversion @cindex POSIX @command{awk}, @code{OFMT} variable and @cindex @code{OFMT} variable @cindex portability, new @command{awk} vs.@: old @command{awk} @@ -10234,6 +10251,10 @@ conversion from the semantics of printing. Both @code{CONVFMT} and @code{OFMT} have the same default value: @code{"%.6g"}. In the vast majority of cases, old @command{awk} programs do not change their behavior. @xref{Print}, for more information on the @code{print} statement. +@end sidebar + +@node Locale influences conversions +@subsubsection Locales Can Influence Conversion Where you are can matter when it comes to converting between numbers and strings. The local character set and language---the @dfn{locale}---can @@ -12012,6 +12033,7 @@ of others let you control how @command{awk} behaves. Numbers are automatically converted to strings, and strings to numbers, as needed by @command{awk}. Numeric values are converted as if they were formatted with @code{sprintf()} using the format in @code{CONVFMT}. +Locales can influence the conversions. @item @command{awk} provides the usual arithmetic operators (addition, @@ -29498,7 +29520,7 @@ the following computes 5432, @c @end docbook the result of which is beyond the -limits of ordinary @command{gawk} numbers: +limits of ordinary hardware double-precision floating point values: @example $ @kbd{gawk -M 'BEGIN @{} @@ -29606,7 +29628,7 @@ source code constants.) 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 machine-dependent additional +C standard, which ignores case and can allow implementation-dependent additional characters after the @samp{nan} and allow either @samp{inf} or @samp{infinity}. @end itemize -- cgit v1.2.3 From 5cb84303090ceeaae218692e849d76bb5f0dce69 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 19 Jun 2014 20:24:04 +0300 Subject: Add more comments and whitespace for do_sub(). --- ChangeLog | 5 +++++ builtin.c | 39 +++++++++++++++++++++++---------------- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 36ac6f2d..3d7dd673 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-06-19 Arnold D. Robbins + + * builtin.c (do_sub): Add more info to leading comment. + Add some whitespace in the code. + 2014-06-08 Arnold D. Robbins * dfa.c: Sync with GNU grep. diff --git a/builtin.c b/builtin.c index b5d38d8d..fa03222b 100644 --- a/builtin.c +++ b/builtin.c @@ -2647,23 +2647,28 @@ do_match(int nargs) * 2001 standard: * * sub(ere, repl[, in ]) - * Substitute the string repl in place of the first instance of the extended regular - * expression ERE in string in and return the number of substitutions. An ampersand - * ('&') appearing in the string repl shall be replaced by the string from in that - * matches the ERE. An ampersand preceded with a backslash ('\') shall be - * interpreted as the literal ampersand character. An occurrence of two consecutive - * backslashes shall be interpreted as just a single literal backslash character. Any - * other occurrence of a backslash (for example, preceding any other character) shall - * be treated as a literal backslash character. Note that if repl is a string literal (the - * lexical token STRING; see Grammar (on page 170)), the handling of the - * ampersand character occurs after any lexical processing, including any lexical - * backslash escape sequence processing. If in is specified and it is not an lvalue (see - * Expressions in awk (on page 156)), the behavior is undefined. If in is omitted, awk - * shall use the current record ($0) in its place. + * Substitute the string repl in place of the first instance of the + * extended regular expression ERE in string in and return the number of + * substitutions. An ampersand ('&') appearing in the string repl shall + * be replaced by the string from in that matches the ERE. An ampersand + * preceded with a backslash ('\') shall be interpreted as the literal + * ampersand character. An occurrence of two consecutive backslashes shall + * be interpreted as just a single literal backslash character. Any other + * occurrence of a backslash (for example, preceding any other character) + * shall be treated as a literal backslash character. Note that if repl is a + * string literal (the lexical token STRING; see Grammar (on page 170)), the + * handling of the ampersand character occurs after any lexical processing, + * including any lexical backslash escape sequence processing. If in is + * specified and it is not an lvalue (see Expressions in awk (on page 156)), + * the behavior is undefined. If in is omitted, awk shall use the current + * record ($0) in its place. * - * 11/2010: The text in the 2008 standard is the same as just quoted. However, POSIX behavior - * is now the default. This can change the behavior of awk programs. The old behavior - * is not available. + * 11/2010: The text in the 2008 standard is the same as just quoted. + * However, POSIX behavior is now the default. This can change the behavior + * of awk programs. The old behavior is not available. + * + * 7/2011: Reverted backslash handling to what it used to be. It was in + * gawk for too long. Should have known better. */ /* @@ -2774,9 +2779,11 @@ set_how_many: repl = s->stptr; replend = repl + s->stlen; repllen = replend - repl; + emalloc(buf, char *, buflen + 2, "do_sub"); buf[buflen] = '\0'; buf[buflen + 1] = '\0'; + ampersands = 0; /* -- cgit v1.2.3 From a83444c3f520da5983965baa1ea04dc4476ef1d9 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 19 Jun 2014 20:24:33 +0300 Subject: Bug fix for poundbang test. --- test/ChangeLog | 4 ++++ test/Makefile.am | 2 +- test/Makefile.in | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/test/ChangeLog b/test/ChangeLog index 4315bbb9..5674ec67 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2014-06-19 Michael Forney + + * Makefile.am (poundbang): Fix relative path of AWKPROG. + 2014-06-08 Arnold D. Robbins * Makefile.am (dbugeval): Add leading @ to recipe. Ooops. diff --git a/test/Makefile.am b/test/Makefile.am index e5c3c1eb..904553b8 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1193,7 +1193,7 @@ poundbang:: @if ./_pbd.awk "$(srcdir)"/poundbang.awk > _`basename $@` ; \ then : ; \ else \ - sed "s;/tmp/gawk;../$(AWKPROG);" < "$(srcdir)"/poundbang.awk > ./_pbd.awk ; \ + sed "s;/tmp/gawk;$(AWKPROG);" < "$(srcdir)"/poundbang.awk > ./_pbd.awk ; \ chmod +x ./_pbd.awk ; \ LC_ALL=$${GAWKLOCALE:-C} LANG=$${GAWKLOCALE:-C} ./_pbd.awk "$(srcdir)"/poundbang.awk > _`basename $@`; \ fi diff --git a/test/Makefile.in b/test/Makefile.in index 5326e0b1..15c95345 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -1618,7 +1618,7 @@ poundbang:: @if ./_pbd.awk "$(srcdir)"/poundbang.awk > _`basename $@` ; \ then : ; \ else \ - sed "s;/tmp/gawk;../$(AWKPROG);" < "$(srcdir)"/poundbang.awk > ./_pbd.awk ; \ + sed "s;/tmp/gawk;$(AWKPROG);" < "$(srcdir)"/poundbang.awk > ./_pbd.awk ; \ chmod +x ./_pbd.awk ; \ LC_ALL=$${GAWKLOCALE:-C} LANG=$${GAWKLOCALE:-C} ./_pbd.awk "$(srcdir)"/poundbang.awk > _`basename $@`; \ fi -- cgit v1.2.3 From 46b2d10640dc4404680fc7ffc670dd06feb5ecf3 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 19 Jun 2014 20:24:58 +0300 Subject: Add more thanks, minor revision in doc. --- doc/ChangeLog | 6 + doc/gawk.info | 1121 ++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 18 +- doc/gawktexi.in | 18 +- 4 files changed, 602 insertions(+), 561 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index be3dead2..298ebbcf 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,9 @@ +2014-06-19 Arnold D. Robbins + + * gawktexi.in: Add thanks to Patrice Dumas and to Karl Berry. + Per request from Hermann Peifer, try to clarify how local variables + in functions are initialized. + 2014-06-18 Arnold D. Robbins * gawktexi.in: Split 6.1.4 into subsections. Other minor fixes. diff --git a/doc/gawk.info b/doc/gawk.info index cf5c6036..95d81e89 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -1306,6 +1306,10 @@ be a pleasure working with this team of fine people. Notable code and documentation contributions were made by a number of people. *Note Contributors::, for the full list. + Thanks to Patrice Dumas for the new `makeinfo' program. Thanks to +Karl Berry who continues to work to keep the Texinfo markup language +sane. + 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 @@ -8546,8 +8550,9 @@ the number of which to take the square root: If those arguments are not supplied, the functions use a reasonable default value. *Note Built-in::, for full details. If arguments are omitted in calls to user-defined functions, then those arguments are -treated as local variables and initialized to the empty string (*note -User-defined::). +treated as local variables. Such 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 (*note User-defined::). As an advanced feature, `gawk' provides indirect function calls, which is a way to choose the function to call at runtime, instead of @@ -13247,15 +13252,21 @@ function. PARAMETER-LIST is an optional list of the function's arguments and local variable names, separated by commas. When the function is called, the argument names are used to hold the argument values given in the -call. The local variables are initialized to the empty string. A -function cannot have two parameters with the same name, nor may it have -a parameter with the same name as the function itself. +call. - In addition, according to the POSIX standard, function parameters -cannot have the same name as one of the special built-in variables -(*note Built-in Variables::). Not all versions of `awk' enforce this + 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 built-in variables (*note +Built-in Variables::). Not all versions of `awk' enforce this 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::.) + The BODY-OF-FUNCTION consists of `awk' statements. It is the most important part of the definition, because it says what the function should actually _do_. The argument names exist to give the body a way @@ -31632,7 +31643,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 83) +* common extensions, func keyword: Definition Syntax. (line 89) * common extensions, length() applied to an array: String Functions. (line 197) * common extensions, RS as a regexp: gawk split records. (line 6) @@ -32151,7 +32162,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 83) +* extensions, common, func keyword: Definition Syntax. (line 89) * extensions, common, length() applied to an array: String Functions. (line 197) * extensions, common, RS as a regexp: gawk split records. (line 6) @@ -32366,7 +32377,7 @@ Index (line 6) * functions, names of <1>: Definition Syntax. (line 20) * functions, names of: Arrays. (line 18) -* functions, recursive: Definition Syntax. (line 73) +* functions, recursive: Definition Syntax. (line 79) * functions, string-translation: I18N Functions. (line 6) * functions, undefined: Pass By Value/Reference. (line 71) @@ -32378,7 +32389,7 @@ Index (line 47) * functions, user-defined, next/nextfile statements and: Next Statement. (line 45) -* G-d: Acknowledgments. (line 78) +* G-d: Acknowledgments. (line 82) * Garfinkle, Scott: Contributors. (line 34) * gawk program, dynamic profiling: Profiling. (line 179) * gawk version: Auto-set. (line 199) @@ -32704,7 +32715,7 @@ Index * Kernighan, Brian <6>: Library Functions. (line 12) * Kernighan, Brian <7>: Concatenation. (line 6) * Kernighan, Brian <8>: Getline/Pipe. (line 6) -* Kernighan, Brian <9>: Acknowledgments. (line 72) +* Kernighan, Brian <9>: Acknowledgments. (line 76) * Kernighan, Brian <10>: Conventions. (line 34) * Kernighan, Brian: History. (line 17) * kill command, dynamic profiling: Profiling. (line 188) @@ -33089,7 +33100,7 @@ Index (line 65) * portability, deleting array elements: Delete. (line 56) * portability, example programs: Library Functions. (line 42) -* portability, functions, defining: Definition Syntax. (line 99) +* portability, functions, defining: Definition Syntax. (line 105) * portability, gawk: New Ports. (line 6) * portability, gettext library and: Explaining gettext. (line 11) * portability, internationalization and: I18N Portability. (line 6) @@ -33135,7 +33146,7 @@ Index (line 40) * 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 83) +* POSIX awk, function keyword in: Definition Syntax. (line 89) * POSIX awk, functions and, gsub()/sub(): Gory Details. (line 54) * POSIX awk, functions and, length(): String Functions. (line 176) * POSIX awk, GNU long options and: Options. (line 15) @@ -33225,7 +33236,7 @@ Index * programming conventions, functions, calling: Calling Built-in. (line 10) * programming conventions, functions, writing: Definition Syntax. - (line 55) + (line 61) * programming conventions, gawk extensions: Internal File Ops. (line 45) * programming conventions, private variable names: Library Names. @@ -33295,7 +33306,7 @@ Index * records, splitting input into: Records. (line 6) * records, terminating: awk split records. (line 124) * records, treating files as: gawk split records. (line 92) -* recursive functions: Definition Syntax. (line 73) +* recursive functions: Definition Syntax. (line 79) * redirect gawk output, in debugger: Debugger Info. (line 72) * redirection of input: Getline/File. (line 6) * redirection of output: Redirection. (line 6) @@ -33385,11 +33396,11 @@ Index * Robbins, Arnold: Command Line Field Separator. (line 73) * Robbins, Bill: Getline/Pipe. (line 39) -* Robbins, Harry: Acknowledgments. (line 78) -* Robbins, Jean: Acknowledgments. (line 78) +* Robbins, Harry: Acknowledgments. (line 82) +* Robbins, Jean: Acknowledgments. (line 82) * Robbins, Miriam <1>: Passwd Functions. (line 90) * Robbins, Miriam <2>: Getline/Pipe. (line 39) -* Robbins, Miriam: Acknowledgments. (line 78) +* Robbins, Miriam: Acknowledgments. (line 82) * Rommel, Kai Uwe: Contributors. (line 42) * round to nearest integer: Numeric Functions. (line 23) * round() user-defined function: Round Function. (line 16) @@ -33465,7 +33476,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 61) +* shadowing of variable values: Definition Syntax. (line 67) * shell quoting, double quote: Read Terminal. (line 25) * shell quoting, rules for: Quoting. (line 6) * shells, piping commands into: Redirection. (line 142) @@ -33498,7 +33509,7 @@ Index * side effects, conditional expressions: Conditional Exp. (line 22) * side effects, decrement/increment operators: Increment Ops. (line 11) * side effects, FILENAME variable: Getline Notes. (line 19) -* side effects, function calls: Function Calls. (line 56) +* side effects, function calls: Function Calls. (line 57) * side effects, statements: Action Overview. (line 32) * sidebar, A Constant's Base Does Not Affect Its Value: Nondecimal-numbers. (line 64) @@ -33842,7 +33853,7 @@ Index * variables, names of: Arrays. (line 18) * variables, private: Library Names. (line 11) * variables, setting: Options. (line 32) -* variables, shadowing: Definition Syntax. (line 61) +* variables, shadowing: Definition Syntax. (line 67) * variables, types of: Assignment Ops. (line 40) * variables, types of, comparison expressions and: Typing and Comparison. (line 9) @@ -33954,537 +33965,537 @@ Ref: Manual History-Footnote-165250 Ref: Manual History-Footnote-265291 Node: How To Contribute65365 Node: Acknowledgments66604 -Node: Getting Started70753 -Node: Running gawk73187 -Node: One-shot74377 -Node: Read Terminal75602 -Ref: Read Terminal-Footnote-177252 -Ref: Read Terminal-Footnote-277528 -Node: Long77699 -Node: Executable Scripts79075 -Ref: Executable Scripts-Footnote-180908 -Ref: Executable Scripts-Footnote-281010 -Node: Comments81557 -Node: Quoting84030 -Node: DOS Quoting89346 -Node: Sample Data Files90021 -Node: Very Simple92536 -Node: Two Rules97174 -Node: More Complex99068 -Ref: More Complex-Footnote-1102000 -Node: Statements/Lines102085 -Ref: Statements/Lines-Footnote-1106540 -Node: Other Features106805 -Node: When107733 -Node: Intro Summary109903 -Node: Invoking Gawk110669 -Node: Command Line112184 -Node: Options112975 -Ref: Options-Footnote-1128804 -Node: Other Arguments128829 -Node: Naming Standard Input131491 -Node: Environment Variables132585 -Node: AWKPATH Variable133143 -Ref: AWKPATH Variable-Footnote-1136015 -Ref: AWKPATH Variable-Footnote-2136060 -Node: AWKLIBPATH Variable136320 -Node: Other Environment Variables137079 -Node: Exit Status140734 -Node: Include Files141409 -Node: Loading Shared Libraries144987 -Node: Obsolete146371 -Node: Undocumented147068 -Node: Invoking Summary147335 -Node: Regexp148915 -Node: Regexp Usage150365 -Node: Escape Sequences152398 -Node: Regexp Operators158065 -Ref: Regexp Operators-Footnote-1165545 -Ref: Regexp Operators-Footnote-2165692 -Node: Bracket Expressions165790 -Ref: table-char-classes167680 -Node: GNU Regexp Operators170203 -Node: Case-sensitivity173926 -Ref: Case-sensitivity-Footnote-1176818 -Ref: Case-sensitivity-Footnote-2177053 -Node: Leftmost Longest177161 -Node: Computed Regexps178362 -Node: Regexp Summary181734 -Node: Reading Files183205 -Node: Records185297 -Node: awk split records186040 -Node: gawk split records190898 -Ref: gawk split records-Footnote-1195419 -Node: Fields195456 -Ref: Fields-Footnote-1198420 -Node: Nonconstant Fields198506 -Ref: Nonconstant Fields-Footnote-1200736 -Node: Changing Fields200938 -Node: Field Separators206892 -Node: Default Field Splitting209594 -Node: Regexp Field Splitting210711 -Node: Single Character Fields214052 -Node: Command Line Field Separator215111 -Node: Full Line Fields218453 -Ref: Full Line Fields-Footnote-1218961 -Node: Field Splitting Summary219007 -Ref: Field Splitting Summary-Footnote-1222106 -Node: Constant Size222207 -Node: Splitting By Content226814 -Ref: Splitting By Content-Footnote-1230564 -Node: Multiple Line230604 -Ref: Multiple Line-Footnote-1236460 -Node: Getline236639 -Node: Plain Getline238855 -Node: Getline/Variable240950 -Node: Getline/File242097 -Node: Getline/Variable/File243481 -Ref: Getline/Variable/File-Footnote-1245080 -Node: Getline/Pipe245167 -Node: Getline/Variable/Pipe247866 -Node: Getline/Coprocess248973 -Node: Getline/Variable/Coprocess250225 -Node: Getline Notes250962 -Node: Getline Summary253766 -Ref: table-getline-variants254174 -Node: Read Timeout255086 -Ref: Read Timeout-Footnote-1258913 -Node: Command line directories258971 -Node: Input Summary259875 -Node: Input Exercises263012 -Node: Printing263745 -Node: Print265467 -Node: Print Examples266808 -Node: Output Separators269587 -Node: OFMT271603 -Node: Printf272961 -Node: Basic Printf273867 -Node: Control Letters275406 -Node: Format Modifiers279258 -Node: Printf Examples285285 -Node: Redirection287749 -Node: Special Files294721 -Node: Special FD295252 -Ref: Special FD-Footnote-1298876 -Node: Special Network298950 -Node: Special Caveats299800 -Node: Close Files And Pipes300596 -Ref: Close Files And Pipes-Footnote-1307757 -Ref: Close Files And Pipes-Footnote-2307905 -Node: Output Summary308055 -Node: Output exercises309052 -Node: Expressions309732 -Node: Values310917 -Node: Constants311593 -Node: Scalar Constants312273 -Ref: Scalar Constants-Footnote-1313132 -Node: Nondecimal-numbers313382 -Node: Regexp Constants316382 -Node: Using Constant Regexps316857 -Node: Variables319927 -Node: Using Variables320582 -Node: Assignment Options322306 -Node: Conversion324181 -Node: Strings And Numbers324705 -Ref: Strings And Numbers-Footnote-1327767 -Node: Locale influences conversions327876 -Ref: table-locale-affects330593 -Node: All Operators331181 -Node: Arithmetic Ops331811 -Node: Concatenation334316 -Ref: Concatenation-Footnote-1337112 -Node: Assignment Ops337232 -Ref: table-assign-ops342215 -Node: Increment Ops343532 -Node: Truth Values and Conditions346970 -Node: Truth Values348053 -Node: Typing and Comparison349102 -Node: Variable Typing349895 -Ref: Variable Typing-Footnote-1353795 -Node: Comparison Operators353917 -Ref: table-relational-ops354327 -Node: POSIX String Comparison357877 -Ref: POSIX String Comparison-Footnote-1358961 -Node: Boolean Ops359099 -Ref: Boolean Ops-Footnote-1363169 -Node: Conditional Exp363260 -Node: Function Calls364987 -Node: Precedence368745 -Node: Locales372414 -Node: Expressions Summary374045 -Node: Patterns and Actions376586 -Node: Pattern Overview377702 -Node: Regexp Patterns379379 -Node: Expression Patterns379922 -Node: Ranges383703 -Node: BEGIN/END386809 -Node: Using BEGIN/END387571 -Ref: Using BEGIN/END-Footnote-1390307 -Node: I/O And BEGIN/END390413 -Node: BEGINFILE/ENDFILE392698 -Node: Empty395629 -Node: Using Shell Variables395946 -Node: Action Overview398229 -Node: Statements400556 -Node: If Statement402404 -Node: While Statement403902 -Node: Do Statement405946 -Node: For Statement407102 -Node: Switch Statement410254 -Node: Break Statement412357 -Node: Continue Statement414412 -Node: Next Statement416205 -Node: Nextfile Statement418595 -Node: Exit Statement421250 -Node: Built-in Variables423654 -Node: User-modified424781 -Ref: User-modified-Footnote-1432470 -Node: Auto-set432532 -Ref: Auto-set-Footnote-1445114 -Ref: Auto-set-Footnote-2445319 -Node: ARGC and ARGV445375 -Node: Pattern Action Summary449229 -Node: Arrays451452 -Node: Array Basics453001 -Node: Array Intro453827 -Ref: figure-array-elements455800 -Node: Reference to Elements458207 -Node: Assigning Elements460480 -Node: Array Example460971 -Node: Scanning an Array462703 -Node: Controlling Scanning465718 -Ref: Controlling Scanning-Footnote-1470891 -Node: Delete471207 -Ref: Delete-Footnote-1473972 -Node: Numeric Array Subscripts474029 -Node: Uninitialized Subscripts476212 -Node: Multidimensional477837 -Node: Multiscanning480930 -Node: Arrays of Arrays482519 -Node: Arrays Summary487182 -Node: Functions489287 -Node: Built-in490160 -Node: Calling Built-in491238 -Node: Numeric Functions493226 -Ref: Numeric Functions-Footnote-1497060 -Ref: Numeric Functions-Footnote-2497417 -Ref: Numeric Functions-Footnote-3497465 -Node: String Functions497734 -Ref: String Functions-Footnote-1520745 -Ref: String Functions-Footnote-2520874 -Ref: String Functions-Footnote-3521122 -Node: Gory Details521209 -Ref: table-sub-escapes522878 -Ref: table-sub-posix-92524232 -Ref: table-sub-proposed525583 -Ref: table-posix-sub526937 -Ref: table-gensub-escapes528482 -Ref: Gory Details-Footnote-1529658 -Ref: Gory Details-Footnote-2529709 -Node: I/O Functions529860 -Ref: I/O Functions-Footnote-1536983 -Node: Time Functions537130 -Ref: Time Functions-Footnote-1547594 -Ref: Time Functions-Footnote-2547662 -Ref: Time Functions-Footnote-3547820 -Ref: Time Functions-Footnote-4547931 -Ref: Time Functions-Footnote-5548043 -Ref: Time Functions-Footnote-6548270 -Node: Bitwise Functions548536 -Ref: table-bitwise-ops549098 -Ref: Bitwise Functions-Footnote-1553343 -Node: Type Functions553527 -Node: I18N Functions554669 -Node: User-defined556314 -Node: Definition Syntax557118 -Ref: Definition Syntax-Footnote-1562043 -Node: Function Example562112 -Ref: Function Example-Footnote-1564756 -Node: Function Caveats564778 -Node: Calling A Function565296 -Node: Variable Scope566251 -Node: Pass By Value/Reference569239 -Node: Return Statement572747 -Node: Dynamic Typing575731 -Node: Indirect Calls576660 -Node: Functions Summary586373 -Node: Library Functions588912 -Ref: Library Functions-Footnote-1592530 -Ref: Library Functions-Footnote-2592673 -Node: Library Names592844 -Ref: Library Names-Footnote-1596317 -Ref: Library Names-Footnote-2596537 -Node: General Functions596623 -Node: Strtonum Function597651 -Node: Assert Function600431 -Node: Round Function603757 -Node: Cliff Random Function605298 -Node: Ordinal Functions606314 -Ref: Ordinal Functions-Footnote-1609391 -Ref: Ordinal Functions-Footnote-2609643 -Node: Join Function609854 -Ref: Join Function-Footnote-1611625 -Node: Getlocaltime Function611825 -Node: Readfile Function615561 -Node: Data File Management617400 -Node: Filetrans Function618032 -Node: Rewind Function622101 -Node: File Checking623488 -Ref: File Checking-Footnote-1624620 -Node: Empty Files624821 -Node: Ignoring Assigns626800 -Node: Getopt Function628354 -Ref: Getopt Function-Footnote-1639657 -Node: Passwd Functions639860 -Ref: Passwd Functions-Footnote-1648839 -Node: Group Functions648927 -Ref: Group Functions-Footnote-1656868 -Node: Walking Arrays657081 -Node: Library Functions Summary658684 -Node: Library exercises660072 -Node: Sample Programs661352 -Node: Running Examples662122 -Node: Clones662850 -Node: Cut Program664074 -Node: Egrep Program673942 -Ref: Egrep Program-Footnote-1681913 -Node: Id Program682023 -Node: Split Program685687 -Ref: Split Program-Footnote-1689225 -Node: Tee Program689353 -Node: Uniq Program692160 -Node: Wc Program699590 -Ref: Wc Program-Footnote-1703855 -Node: Miscellaneous Programs703947 -Node: Dupword Program705160 -Node: Alarm Program707191 -Node: Translate Program712005 -Ref: Translate Program-Footnote-1716396 -Ref: Translate Program-Footnote-2716666 -Node: Labels Program716800 -Ref: Labels Program-Footnote-1720171 -Node: Word Sorting720255 -Node: History Sorting724298 -Node: Extract Program726134 -Node: Simple Sed733670 -Node: Igawk Program736732 -Ref: Igawk Program-Footnote-1751043 -Ref: Igawk Program-Footnote-2751244 -Node: Anagram Program751382 -Node: Signature Program754450 -Node: Programs Summary755697 -Node: Programs Exercises756912 -Node: Advanced Features760563 -Node: Nondecimal Data762511 -Node: Array Sorting764088 -Node: Controlling Array Traversal764785 -Node: Array Sorting Functions773065 -Ref: Array Sorting Functions-Footnote-1776972 -Node: Two-way I/O777166 -Ref: Two-way I/O-Footnote-1782682 -Node: TCP/IP Networking782764 -Node: Profiling785608 -Node: Advanced Features Summary793150 -Node: Internationalization795014 -Node: I18N and L10N796494 -Node: Explaining gettext797180 -Ref: Explaining gettext-Footnote-1802320 -Ref: Explaining gettext-Footnote-2802504 -Node: Programmer i18n802669 -Node: Translator i18n806894 -Node: String Extraction807688 -Ref: String Extraction-Footnote-1808649 -Node: Printf Ordering808735 -Ref: Printf Ordering-Footnote-1811517 -Node: I18N Portability811581 -Ref: I18N Portability-Footnote-1814030 -Node: I18N Example814093 -Ref: I18N Example-Footnote-1816815 -Node: Gawk I18N816887 -Node: I18N Summary817525 -Node: Debugger818864 -Node: Debugging819886 -Node: Debugging Concepts820327 -Node: Debugging Terms822183 -Node: Awk Debugging824780 -Node: Sample Debugging Session825672 -Node: Debugger Invocation826192 -Node: Finding The Bug827525 -Node: List of Debugger Commands834007 -Node: Breakpoint Control835339 -Node: Debugger Execution Control839003 -Node: Viewing And Changing Data842363 -Node: Execution Stack845721 -Node: Debugger Info847234 -Node: Miscellaneous Debugger Commands851228 -Node: Readline Support856412 -Node: Limitations857304 -Node: Debugging Summary859578 -Node: Arbitrary Precision Arithmetic860742 -Node: Computer Arithmetic862071 -Ref: Computer Arithmetic-Footnote-1866458 -Node: Math Definitions866515 -Ref: table-ieee-formats869399 -Node: MPFR features869903 -Node: FP Math Caution871545 -Ref: FP Math Caution-Footnote-1872586 -Node: Inexactness of computations872955 -Node: Inexact representation873903 -Node: Comparing FP Values875258 -Node: Errors accumulate876222 -Node: Getting Accuracy877655 -Node: Try To Round880314 -Node: Setting precision881213 -Ref: table-predefined-precision-strings881895 -Node: Setting the rounding mode883688 -Ref: table-gawk-rounding-modes884052 -Ref: Setting the rounding mode-Footnote-1887506 -Node: Arbitrary Precision Integers887685 -Ref: Arbitrary Precision Integers-Footnote-1890688 -Node: POSIX Floating Point Problems890837 -Ref: POSIX Floating Point Problems-Footnote-1894713 -Node: Floating point summary894751 -Node: Dynamic Extensions896968 -Node: Extension Intro898520 -Node: Plugin License899785 -Node: Extension Mechanism Outline900470 -Ref: figure-load-extension900894 -Ref: figure-load-new-function902379 -Ref: figure-call-new-function903381 -Node: Extension API Description905365 -Node: Extension API Functions Introduction906815 -Node: General Data Types911680 -Ref: General Data Types-Footnote-1917373 -Node: Requesting Values917672 -Ref: table-value-types-returned918409 -Node: Memory Allocation Functions919367 -Ref: Memory Allocation Functions-Footnote-1922114 -Node: Constructor Functions922210 -Node: Registration Functions923968 -Node: Extension Functions924653 -Node: Exit Callback Functions926955 -Node: Extension Version String928204 -Node: Input Parsers928854 -Node: Output Wrappers938657 -Node: Two-way processors943173 -Node: Printing Messages945377 -Ref: Printing Messages-Footnote-1946454 -Node: Updating `ERRNO'946606 -Node: Accessing Parameters947345 -Node: Symbol Table Access948575 -Node: Symbol table by name949089 -Node: Symbol table by cookie951065 -Ref: Symbol table by cookie-Footnote-1955198 -Node: Cached values955261 -Ref: Cached values-Footnote-1958765 -Node: Array Manipulation958856 -Ref: Array Manipulation-Footnote-1959954 -Node: Array Data Types959993 -Ref: Array Data Types-Footnote-1962696 -Node: Array Functions962788 -Node: Flattening Arrays966662 -Node: Creating Arrays973514 -Node: Extension API Variables978245 -Node: Extension Versioning978881 -Node: Extension API Informational Variables980782 -Node: Extension API Boilerplate981868 -Node: Finding Extensions985672 -Node: Extension Example986232 -Node: Internal File Description986962 -Node: Internal File Ops991053 -Ref: Internal File Ops-Footnote-11002485 -Node: Using Internal File Ops1002625 -Ref: Using Internal File Ops-Footnote-11004972 -Node: Extension Samples1005240 -Node: Extension Sample File Functions1006764 -Node: Extension Sample Fnmatch1014332 -Node: Extension Sample Fork1015813 -Node: Extension Sample Inplace1017026 -Node: Extension Sample Ord1018701 -Node: Extension Sample Readdir1019537 -Ref: table-readdir-file-types1020393 -Node: Extension Sample Revout1021192 -Node: Extension Sample Rev2way1021783 -Node: Extension Sample Read write array1022524 -Node: Extension Sample Readfile1024403 -Node: Extension Sample API Tests1025503 -Node: Extension Sample Time1026028 -Node: gawkextlib1027343 -Node: Extension summary1030156 -Node: Extension Exercises1033849 -Node: Language History1034571 -Node: V7/SVR3.11036214 -Node: SVR41038534 -Node: POSIX1039976 -Node: BTL1041362 -Node: POSIX/GNU1042096 -Node: Feature History1047695 -Node: Common Extensions1060825 -Node: Ranges and Locales1062137 -Ref: Ranges and Locales-Footnote-11066754 -Ref: Ranges and Locales-Footnote-21066781 -Ref: Ranges and Locales-Footnote-31067015 -Node: Contributors1067236 -Node: History summary1072698 -Node: Installation1074067 -Node: Gawk Distribution1075018 -Node: Getting1075502 -Node: Extracting1076326 -Node: Distribution contents1077968 -Node: Unix Installation1083685 -Node: Quick Installation1084302 -Node: Additional Configuration Options1086744 -Node: Configuration Philosophy1088482 -Node: Non-Unix Installation1090833 -Node: PC Installation1091291 -Node: PC Binary Installation1092602 -Node: PC Compiling1094450 -Ref: PC Compiling-Footnote-11097449 -Node: PC Testing1097554 -Node: PC Using1098730 -Node: Cygwin1102888 -Node: MSYS1103697 -Node: VMS Installation1104211 -Node: VMS Compilation1105007 -Ref: VMS Compilation-Footnote-11106229 -Node: VMS Dynamic Extensions1106287 -Node: VMS Installation Details1107660 -Node: VMS Running1109912 -Node: VMS GNV1112746 -Node: VMS Old Gawk1113469 -Node: Bugs1113939 -Node: Other Versions1117943 -Node: Installation summary1124198 -Node: Notes1125254 -Node: Compatibility Mode1126119 -Node: Additions1126901 -Node: Accessing The Source1127826 -Node: Adding Code1129262 -Node: New Ports1135440 -Node: Derived Files1139921 -Ref: Derived Files-Footnote-11145002 -Ref: Derived Files-Footnote-21145036 -Ref: Derived Files-Footnote-31145632 -Node: Future Extensions1145746 -Node: Implementation Limitations1146352 -Node: Extension Design1147600 -Node: Old Extension Problems1148754 -Ref: Old Extension Problems-Footnote-11150271 -Node: Extension New Mechanism Goals1150328 -Ref: Extension New Mechanism Goals-Footnote-11153688 -Node: Extension Other Design Decisions1153877 -Node: Extension Future Growth1155983 -Node: Old Extension Mechanism1156819 -Node: Notes summary1158581 -Node: Basic Concepts1159767 -Node: Basic High Level1160448 -Ref: figure-general-flow1160720 -Ref: figure-process-flow1161319 -Ref: Basic High Level-Footnote-11164548 -Node: Basic Data Typing1164733 -Node: Glossary1168061 -Node: Copying1193213 -Node: GNU Free Documentation License1230769 -Node: Index1255905 +Node: Getting Started70900 +Node: Running gawk73334 +Node: One-shot74524 +Node: Read Terminal75749 +Ref: Read Terminal-Footnote-177399 +Ref: Read Terminal-Footnote-277675 +Node: Long77846 +Node: Executable Scripts79222 +Ref: Executable Scripts-Footnote-181055 +Ref: Executable Scripts-Footnote-281157 +Node: Comments81704 +Node: Quoting84177 +Node: DOS Quoting89493 +Node: Sample Data Files90168 +Node: Very Simple92683 +Node: Two Rules97321 +Node: More Complex99215 +Ref: More Complex-Footnote-1102147 +Node: Statements/Lines102232 +Ref: Statements/Lines-Footnote-1106687 +Node: Other Features106952 +Node: When107880 +Node: Intro Summary110050 +Node: Invoking Gawk110816 +Node: Command Line112331 +Node: Options113122 +Ref: Options-Footnote-1128951 +Node: Other Arguments128976 +Node: Naming Standard Input131638 +Node: Environment Variables132732 +Node: AWKPATH Variable133290 +Ref: AWKPATH Variable-Footnote-1136162 +Ref: AWKPATH Variable-Footnote-2136207 +Node: AWKLIBPATH Variable136467 +Node: Other Environment Variables137226 +Node: Exit Status140881 +Node: Include Files141556 +Node: Loading Shared Libraries145134 +Node: Obsolete146518 +Node: Undocumented147215 +Node: Invoking Summary147482 +Node: Regexp149062 +Node: Regexp Usage150512 +Node: Escape Sequences152545 +Node: Regexp Operators158212 +Ref: Regexp Operators-Footnote-1165692 +Ref: Regexp Operators-Footnote-2165839 +Node: Bracket Expressions165937 +Ref: table-char-classes167827 +Node: GNU Regexp Operators170350 +Node: Case-sensitivity174073 +Ref: Case-sensitivity-Footnote-1176965 +Ref: Case-sensitivity-Footnote-2177200 +Node: Leftmost Longest177308 +Node: Computed Regexps178509 +Node: Regexp Summary181881 +Node: Reading Files183352 +Node: Records185444 +Node: awk split records186187 +Node: gawk split records191045 +Ref: gawk split records-Footnote-1195566 +Node: Fields195603 +Ref: Fields-Footnote-1198567 +Node: Nonconstant Fields198653 +Ref: Nonconstant Fields-Footnote-1200883 +Node: Changing Fields201085 +Node: Field Separators207039 +Node: Default Field Splitting209741 +Node: Regexp Field Splitting210858 +Node: Single Character Fields214199 +Node: Command Line Field Separator215258 +Node: Full Line Fields218600 +Ref: Full Line Fields-Footnote-1219108 +Node: Field Splitting Summary219154 +Ref: Field Splitting Summary-Footnote-1222253 +Node: Constant Size222354 +Node: Splitting By Content226961 +Ref: Splitting By Content-Footnote-1230711 +Node: Multiple Line230751 +Ref: Multiple Line-Footnote-1236607 +Node: Getline236786 +Node: Plain Getline239002 +Node: Getline/Variable241097 +Node: Getline/File242244 +Node: Getline/Variable/File243628 +Ref: Getline/Variable/File-Footnote-1245227 +Node: Getline/Pipe245314 +Node: Getline/Variable/Pipe248013 +Node: Getline/Coprocess249120 +Node: Getline/Variable/Coprocess250372 +Node: Getline Notes251109 +Node: Getline Summary253913 +Ref: table-getline-variants254321 +Node: Read Timeout255233 +Ref: Read Timeout-Footnote-1259060 +Node: Command line directories259118 +Node: Input Summary260022 +Node: Input Exercises263159 +Node: Printing263892 +Node: Print265614 +Node: Print Examples266955 +Node: Output Separators269734 +Node: OFMT271750 +Node: Printf273108 +Node: Basic Printf274014 +Node: Control Letters275553 +Node: Format Modifiers279405 +Node: Printf Examples285432 +Node: Redirection287896 +Node: Special Files294868 +Node: Special FD295399 +Ref: Special FD-Footnote-1299023 +Node: Special Network299097 +Node: Special Caveats299947 +Node: Close Files And Pipes300743 +Ref: Close Files And Pipes-Footnote-1307904 +Ref: Close Files And Pipes-Footnote-2308052 +Node: Output Summary308202 +Node: Output exercises309199 +Node: Expressions309879 +Node: Values311064 +Node: Constants311740 +Node: Scalar Constants312420 +Ref: Scalar Constants-Footnote-1313279 +Node: Nondecimal-numbers313529 +Node: Regexp Constants316529 +Node: Using Constant Regexps317004 +Node: Variables320074 +Node: Using Variables320729 +Node: Assignment Options322453 +Node: Conversion324328 +Node: Strings And Numbers324852 +Ref: Strings And Numbers-Footnote-1327914 +Node: Locale influences conversions328023 +Ref: table-locale-affects330740 +Node: All Operators331328 +Node: Arithmetic Ops331958 +Node: Concatenation334463 +Ref: Concatenation-Footnote-1337259 +Node: Assignment Ops337379 +Ref: table-assign-ops342362 +Node: Increment Ops343679 +Node: Truth Values and Conditions347117 +Node: Truth Values348200 +Node: Typing and Comparison349249 +Node: Variable Typing350042 +Ref: Variable Typing-Footnote-1353942 +Node: Comparison Operators354064 +Ref: table-relational-ops354474 +Node: POSIX String Comparison358024 +Ref: POSIX String Comparison-Footnote-1359108 +Node: Boolean Ops359246 +Ref: Boolean Ops-Footnote-1363316 +Node: Conditional Exp363407 +Node: Function Calls365134 +Node: Precedence369014 +Node: Locales372683 +Node: Expressions Summary374314 +Node: Patterns and Actions376855 +Node: Pattern Overview377971 +Node: Regexp Patterns379648 +Node: Expression Patterns380191 +Node: Ranges383972 +Node: BEGIN/END387078 +Node: Using BEGIN/END387840 +Ref: Using BEGIN/END-Footnote-1390576 +Node: I/O And BEGIN/END390682 +Node: BEGINFILE/ENDFILE392967 +Node: Empty395898 +Node: Using Shell Variables396215 +Node: Action Overview398498 +Node: Statements400825 +Node: If Statement402673 +Node: While Statement404171 +Node: Do Statement406215 +Node: For Statement407371 +Node: Switch Statement410523 +Node: Break Statement412626 +Node: Continue Statement414681 +Node: Next Statement416474 +Node: Nextfile Statement418864 +Node: Exit Statement421519 +Node: Built-in Variables423923 +Node: User-modified425050 +Ref: User-modified-Footnote-1432739 +Node: Auto-set432801 +Ref: Auto-set-Footnote-1445383 +Ref: Auto-set-Footnote-2445588 +Node: ARGC and ARGV445644 +Node: Pattern Action Summary449498 +Node: Arrays451721 +Node: Array Basics453270 +Node: Array Intro454096 +Ref: figure-array-elements456069 +Node: Reference to Elements458476 +Node: Assigning Elements460749 +Node: Array Example461240 +Node: Scanning an Array462972 +Node: Controlling Scanning465987 +Ref: Controlling Scanning-Footnote-1471160 +Node: Delete471476 +Ref: Delete-Footnote-1474241 +Node: Numeric Array Subscripts474298 +Node: Uninitialized Subscripts476481 +Node: Multidimensional478106 +Node: Multiscanning481199 +Node: Arrays of Arrays482788 +Node: Arrays Summary487451 +Node: Functions489556 +Node: Built-in490429 +Node: Calling Built-in491507 +Node: Numeric Functions493495 +Ref: Numeric Functions-Footnote-1497329 +Ref: Numeric Functions-Footnote-2497686 +Ref: Numeric Functions-Footnote-3497734 +Node: String Functions498003 +Ref: String Functions-Footnote-1521014 +Ref: String Functions-Footnote-2521143 +Ref: String Functions-Footnote-3521391 +Node: Gory Details521478 +Ref: table-sub-escapes523147 +Ref: table-sub-posix-92524501 +Ref: table-sub-proposed525852 +Ref: table-posix-sub527206 +Ref: table-gensub-escapes528751 +Ref: Gory Details-Footnote-1529927 +Ref: Gory Details-Footnote-2529978 +Node: I/O Functions530129 +Ref: I/O Functions-Footnote-1537252 +Node: Time Functions537399 +Ref: Time Functions-Footnote-1547863 +Ref: Time Functions-Footnote-2547931 +Ref: Time Functions-Footnote-3548089 +Ref: Time Functions-Footnote-4548200 +Ref: Time Functions-Footnote-5548312 +Ref: Time Functions-Footnote-6548539 +Node: Bitwise Functions548805 +Ref: table-bitwise-ops549367 +Ref: Bitwise Functions-Footnote-1553612 +Node: Type Functions553796 +Node: I18N Functions554938 +Node: User-defined556583 +Node: Definition Syntax557387 +Ref: Definition Syntax-Footnote-1562566 +Node: Function Example562635 +Ref: Function Example-Footnote-1565279 +Node: Function Caveats565301 +Node: Calling A Function565819 +Node: Variable Scope566774 +Node: Pass By Value/Reference569762 +Node: Return Statement573270 +Node: Dynamic Typing576254 +Node: Indirect Calls577183 +Node: Functions Summary586896 +Node: Library Functions589435 +Ref: Library Functions-Footnote-1593053 +Ref: Library Functions-Footnote-2593196 +Node: Library Names593367 +Ref: Library Names-Footnote-1596840 +Ref: Library Names-Footnote-2597060 +Node: General Functions597146 +Node: Strtonum Function598174 +Node: Assert Function600954 +Node: Round Function604280 +Node: Cliff Random Function605821 +Node: Ordinal Functions606837 +Ref: Ordinal Functions-Footnote-1609914 +Ref: Ordinal Functions-Footnote-2610166 +Node: Join Function610377 +Ref: Join Function-Footnote-1612148 +Node: Getlocaltime Function612348 +Node: Readfile Function616084 +Node: Data File Management617923 +Node: Filetrans Function618555 +Node: Rewind Function622624 +Node: File Checking624011 +Ref: File Checking-Footnote-1625143 +Node: Empty Files625344 +Node: Ignoring Assigns627323 +Node: Getopt Function628877 +Ref: Getopt Function-Footnote-1640180 +Node: Passwd Functions640383 +Ref: Passwd Functions-Footnote-1649362 +Node: Group Functions649450 +Ref: Group Functions-Footnote-1657391 +Node: Walking Arrays657604 +Node: Library Functions Summary659207 +Node: Library exercises660595 +Node: Sample Programs661875 +Node: Running Examples662645 +Node: Clones663373 +Node: Cut Program664597 +Node: Egrep Program674465 +Ref: Egrep Program-Footnote-1682436 +Node: Id Program682546 +Node: Split Program686210 +Ref: Split Program-Footnote-1689748 +Node: Tee Program689876 +Node: Uniq Program692683 +Node: Wc Program700113 +Ref: Wc Program-Footnote-1704378 +Node: Miscellaneous Programs704470 +Node: Dupword Program705683 +Node: Alarm Program707714 +Node: Translate Program712528 +Ref: Translate Program-Footnote-1716919 +Ref: Translate Program-Footnote-2717189 +Node: Labels Program717323 +Ref: Labels Program-Footnote-1720694 +Node: Word Sorting720778 +Node: History Sorting724821 +Node: Extract Program726657 +Node: Simple Sed734193 +Node: Igawk Program737255 +Ref: Igawk Program-Footnote-1751566 +Ref: Igawk Program-Footnote-2751767 +Node: Anagram Program751905 +Node: Signature Program754973 +Node: Programs Summary756220 +Node: Programs Exercises757435 +Node: Advanced Features761086 +Node: Nondecimal Data763034 +Node: Array Sorting764611 +Node: Controlling Array Traversal765308 +Node: Array Sorting Functions773588 +Ref: Array Sorting Functions-Footnote-1777495 +Node: Two-way I/O777689 +Ref: Two-way I/O-Footnote-1783205 +Node: TCP/IP Networking783287 +Node: Profiling786131 +Node: Advanced Features Summary793673 +Node: Internationalization795537 +Node: I18N and L10N797017 +Node: Explaining gettext797703 +Ref: Explaining gettext-Footnote-1802843 +Ref: Explaining gettext-Footnote-2803027 +Node: Programmer i18n803192 +Node: Translator i18n807417 +Node: String Extraction808211 +Ref: String Extraction-Footnote-1809172 +Node: Printf Ordering809258 +Ref: Printf Ordering-Footnote-1812040 +Node: I18N Portability812104 +Ref: I18N Portability-Footnote-1814553 +Node: I18N Example814616 +Ref: I18N Example-Footnote-1817338 +Node: Gawk I18N817410 +Node: I18N Summary818048 +Node: Debugger819387 +Node: Debugging820409 +Node: Debugging Concepts820850 +Node: Debugging Terms822706 +Node: Awk Debugging825303 +Node: Sample Debugging Session826195 +Node: Debugger Invocation826715 +Node: Finding The Bug828048 +Node: List of Debugger Commands834530 +Node: Breakpoint Control835862 +Node: Debugger Execution Control839526 +Node: Viewing And Changing Data842886 +Node: Execution Stack846244 +Node: Debugger Info847757 +Node: Miscellaneous Debugger Commands851751 +Node: Readline Support856935 +Node: Limitations857827 +Node: Debugging Summary860101 +Node: Arbitrary Precision Arithmetic861265 +Node: Computer Arithmetic862594 +Ref: Computer Arithmetic-Footnote-1866981 +Node: Math Definitions867038 +Ref: table-ieee-formats869922 +Node: MPFR features870426 +Node: FP Math Caution872068 +Ref: FP Math Caution-Footnote-1873109 +Node: Inexactness of computations873478 +Node: Inexact representation874426 +Node: Comparing FP Values875781 +Node: Errors accumulate876745 +Node: Getting Accuracy878178 +Node: Try To Round880837 +Node: Setting precision881736 +Ref: table-predefined-precision-strings882418 +Node: Setting the rounding mode884211 +Ref: table-gawk-rounding-modes884575 +Ref: Setting the rounding mode-Footnote-1888029 +Node: Arbitrary Precision Integers888208 +Ref: Arbitrary Precision Integers-Footnote-1891211 +Node: POSIX Floating Point Problems891360 +Ref: POSIX Floating Point Problems-Footnote-1895236 +Node: Floating point summary895274 +Node: Dynamic Extensions897491 +Node: Extension Intro899043 +Node: Plugin License900308 +Node: Extension Mechanism Outline900993 +Ref: figure-load-extension901417 +Ref: figure-load-new-function902902 +Ref: figure-call-new-function903904 +Node: Extension API Description905888 +Node: Extension API Functions Introduction907338 +Node: General Data Types912203 +Ref: General Data Types-Footnote-1917896 +Node: Requesting Values918195 +Ref: table-value-types-returned918932 +Node: Memory Allocation Functions919890 +Ref: Memory Allocation Functions-Footnote-1922637 +Node: Constructor Functions922733 +Node: Registration Functions924491 +Node: Extension Functions925176 +Node: Exit Callback Functions927478 +Node: Extension Version String928727 +Node: Input Parsers929377 +Node: Output Wrappers939180 +Node: Two-way processors943696 +Node: Printing Messages945900 +Ref: Printing Messages-Footnote-1946977 +Node: Updating `ERRNO'947129 +Node: Accessing Parameters947868 +Node: Symbol Table Access949098 +Node: Symbol table by name949612 +Node: Symbol table by cookie951588 +Ref: Symbol table by cookie-Footnote-1955721 +Node: Cached values955784 +Ref: Cached values-Footnote-1959288 +Node: Array Manipulation959379 +Ref: Array Manipulation-Footnote-1960477 +Node: Array Data Types960516 +Ref: Array Data Types-Footnote-1963219 +Node: Array Functions963311 +Node: Flattening Arrays967185 +Node: Creating Arrays974037 +Node: Extension API Variables978768 +Node: Extension Versioning979404 +Node: Extension API Informational Variables981305 +Node: Extension API Boilerplate982391 +Node: Finding Extensions986195 +Node: Extension Example986755 +Node: Internal File Description987485 +Node: Internal File Ops991576 +Ref: Internal File Ops-Footnote-11003008 +Node: Using Internal File Ops1003148 +Ref: Using Internal File Ops-Footnote-11005495 +Node: Extension Samples1005763 +Node: Extension Sample File Functions1007287 +Node: Extension Sample Fnmatch1014855 +Node: Extension Sample Fork1016336 +Node: Extension Sample Inplace1017549 +Node: Extension Sample Ord1019224 +Node: Extension Sample Readdir1020060 +Ref: table-readdir-file-types1020916 +Node: Extension Sample Revout1021715 +Node: Extension Sample Rev2way1022306 +Node: Extension Sample Read write array1023047 +Node: Extension Sample Readfile1024926 +Node: Extension Sample API Tests1026026 +Node: Extension Sample Time1026551 +Node: gawkextlib1027866 +Node: Extension summary1030679 +Node: Extension Exercises1034372 +Node: Language History1035094 +Node: V7/SVR3.11036737 +Node: SVR41039057 +Node: POSIX1040499 +Node: BTL1041885 +Node: POSIX/GNU1042619 +Node: Feature History1048218 +Node: Common Extensions1061348 +Node: Ranges and Locales1062660 +Ref: Ranges and Locales-Footnote-11067277 +Ref: Ranges and Locales-Footnote-21067304 +Ref: Ranges and Locales-Footnote-31067538 +Node: Contributors1067759 +Node: History summary1073221 +Node: Installation1074590 +Node: Gawk Distribution1075541 +Node: Getting1076025 +Node: Extracting1076849 +Node: Distribution contents1078491 +Node: Unix Installation1084208 +Node: Quick Installation1084825 +Node: Additional Configuration Options1087267 +Node: Configuration Philosophy1089005 +Node: Non-Unix Installation1091356 +Node: PC Installation1091814 +Node: PC Binary Installation1093125 +Node: PC Compiling1094973 +Ref: PC Compiling-Footnote-11097972 +Node: PC Testing1098077 +Node: PC Using1099253 +Node: Cygwin1103411 +Node: MSYS1104220 +Node: VMS Installation1104734 +Node: VMS Compilation1105530 +Ref: VMS Compilation-Footnote-11106752 +Node: VMS Dynamic Extensions1106810 +Node: VMS Installation Details1108183 +Node: VMS Running1110435 +Node: VMS GNV1113269 +Node: VMS Old Gawk1113992 +Node: Bugs1114462 +Node: Other Versions1118466 +Node: Installation summary1124721 +Node: Notes1125777 +Node: Compatibility Mode1126642 +Node: Additions1127424 +Node: Accessing The Source1128349 +Node: Adding Code1129785 +Node: New Ports1135963 +Node: Derived Files1140444 +Ref: Derived Files-Footnote-11145525 +Ref: Derived Files-Footnote-21145559 +Ref: Derived Files-Footnote-31146155 +Node: Future Extensions1146269 +Node: Implementation Limitations1146875 +Node: Extension Design1148123 +Node: Old Extension Problems1149277 +Ref: Old Extension Problems-Footnote-11150794 +Node: Extension New Mechanism Goals1150851 +Ref: Extension New Mechanism Goals-Footnote-11154211 +Node: Extension Other Design Decisions1154400 +Node: Extension Future Growth1156506 +Node: Old Extension Mechanism1157342 +Node: Notes summary1159104 +Node: Basic Concepts1160290 +Node: Basic High Level1160971 +Ref: figure-general-flow1161243 +Ref: figure-process-flow1161842 +Ref: Basic High Level-Footnote-11165071 +Node: Basic Data Typing1165256 +Node: Glossary1168584 +Node: Copying1193736 +Node: GNU Free Documentation License1231292 +Node: Index1256428  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index b210da10..e12de779 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -2076,6 +2076,10 @@ people. Notable code and documentation contributions were made by a number of people. @xref{Contributors}, for the full list. +Thanks to Patrice Dumas for the new @command{makeinfo} program. +Thanks to Karl Berry who continues to work to keep +the Texinfo markup language sane. + @cindex Kernighan, Brian I would like to thank Brian Kernighan for invaluable assistance during the testing and debugging of @command{gawk}, and for ongoing @@ -12376,7 +12380,9 @@ If those arguments are not supplied, the functions use a reasonable default value. @xref{Built-in}, for full details. If arguments are omitted in calls to user-defined functions, then those arguments are -treated as local variables and initialized to the empty string +treated as local variables. Such 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 (@pxref{User-defined}). As an advanced feature, @command{gawk} provides indirect function calls, @@ -19057,15 +19063,21 @@ used as a variable, array, or function. @var{parameter-list} is an optional list of the function's arguments and local variable names, separated by commas. When the function is called, the argument names are used to hold the argument values given in -the call. The local variables are initialized to the empty string. +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 built-in variables (@pxref{Built-in Variables}). Not all versions of @command{awk} enforce this 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; +@pxref{Dynamic Typing}.) + The @var{body-of-function} consists of @command{awk} statements. It is the most important part of the definition, because it says what the function should actually @emph{do}. The argument names exist to give the body a diff --git a/doc/gawktexi.in b/doc/gawktexi.in index fb7fa188..8167da72 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -2043,6 +2043,10 @@ people. Notable code and documentation contributions were made by a number of people. @xref{Contributors}, for the full list. +Thanks to Patrice Dumas for the new @command{makeinfo} program. +Thanks to Karl Berry who continues to work to keep +the Texinfo markup language sane. + @cindex Kernighan, Brian I would like to thank Brian Kernighan for invaluable assistance during the testing and debugging of @command{gawk}, and for ongoing @@ -11727,7 +11731,9 @@ If those arguments are not supplied, the functions use a reasonable default value. @xref{Built-in}, for full details. If arguments are omitted in calls to user-defined functions, then those arguments are -treated as local variables and initialized to the empty string +treated as local variables. Such 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 (@pxref{User-defined}). As an advanced feature, @command{gawk} provides indirect function calls, @@ -18201,15 +18207,21 @@ used as a variable, array, or function. @var{parameter-list} is an optional list of the function's arguments and local variable names, separated by commas. When the function is called, the argument names are used to hold the argument values given in -the call. The local variables are initialized to the empty string. +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 built-in variables (@pxref{Built-in Variables}). Not all versions of @command{awk} enforce this 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; +@pxref{Dynamic Typing}.) + The @var{body-of-function} consists of @command{awk} statements. It is the most important part of the definition, because it says what the function should actually @emph{do}. The argument names exist to give the body a -- cgit v1.2.3 From 7cdd5a510d45228574c34b066b2ddac833fef118 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 22 Jun 2014 22:06:12 +0300 Subject: Fix memory leak in regcomp.c. --- ChangeLog | 10 ++++++++++ regcomp.c | 14 +++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3d7dd673..b385cffb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2014-06-22 Paul Eggert + + Bring in from GNULIB: + + regex: fix memory leak in compiler + Fix by Andreas Schwab in: + https://sourceware.org/ml/libc-alpha/2014-06/msg00462.html + * lib/regcomp.c (parse_expression): Deallocate partially + constructed tree before returning error. + 2014-06-19 Arnold D. Robbins * builtin.c (do_sub): Add more info to leading comment. diff --git a/regcomp.c b/regcomp.c index 776b7134..a62364c9 100644 --- a/regcomp.c +++ b/regcomp.c @@ -2476,14 +2476,22 @@ parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token, while (token->type == OP_DUP_ASTERISK || token->type == OP_DUP_PLUS || token->type == OP_DUP_QUESTION || token->type == OP_OPEN_DUP_NUM) { - tree = parse_dup_op (tree, regexp, dfa, token, syntax, err); - if (BE (*err != REG_NOERROR && tree == NULL, 0)) - return NULL; + bin_tree_t *dup_tree = parse_dup_op (tree, regexp, dfa, token, + syntax, err); + if (BE (*err != REG_NOERROR && dup_tree == NULL, 0)) + { + if (tree != NULL) + postorder (tree, free_tree, NULL); + return NULL; + } + tree = dup_tree; /* In BRE consecutive duplications are not allowed. */ if ((syntax & RE_CONTEXT_INVALID_DUP) && (token->type == OP_DUP_ASTERISK || token->type == OP_OPEN_DUP_NUM)) { + if (tree != NULL) + postorder (tree, free_tree, NULL); *err = REG_BADRPT; return NULL; } -- cgit v1.2.3 From 57454ce9249bdfea6451c231858e6a8b5d26c775 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 22 Jun 2014 22:06:32 +0300 Subject: Typos and other minor fixes. --- doc/ChangeLog | 4 + doc/gawk.info | 1047 +++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 8 +- doc/gawktexi.in | 8 +- 4 files changed, 535 insertions(+), 532 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 298ebbcf..9f98c888 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2014-06-22 Arnold D. Robbins + + * gawktexi.in: Typo fixes and minor corrections. + 2014-06-19 Arnold D. Robbins * gawktexi.in: Add thanks to Patrice Dumas and to Karl Berry. diff --git a/doc/gawk.info b/doc/gawk.info index 95d81e89..e1ee6b3a 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -2170,7 +2170,7 @@ comment, it ignores _everything_ on the rest of the line. For example: > BEGIN rule > }' error--> gawk: cmd. line:2: BEGIN rule - error--> gawk: cmd. line:2: ^ parse error + error--> gawk: cmd. line:2: ^ syntax error In this case, it looks like the backslash would continue the comment onto the next line. However, the backslash-newline combination is never @@ -25218,7 +25218,7 @@ constant (`FNM_NOMATCH'), and an array of flag values named `FNM'. The flags are follows: -Array element Corresponding lag defined by `fnmatch()' +Array element Corresponding flag defined by `fnmatch()' -------------------------------------------------------------------------- `FNM["CASEFOLD"]' `FNM_CASEFOLD' `FNM["FILE_NAME"]' `FNM_FILE_NAME' @@ -25589,7 +25589,7 @@ Time::) was originally from this project but has been moved in to the main `gawk' distribution. You can check out the code for the `gawkextlib' project using the -GIT (http://git-scm.com) distributed source code control system. The +Git (http://git-scm.com) distributed source code control system. The command is as follows: git clone git://git.code.sf.net/p/gawkextlib/code gawkextlib-code @@ -26736,8 +26736,7 @@ Info file, in approximate chronological order: - The modifications to convert `gawk' into a byte-code interpreter, including the debugger. - - The addition of true arrays of arrays. *note Arrays of - Arrays::. + - The addition of true arrays of arrays. - The additional modifications for support of arbitrary precision arithmetic. @@ -26752,7 +26751,7 @@ Info file, in approximate chronological order: - The improved array sorting features were driven by John together with Pat Rankin. - Panos Papadopoulos contributed the original text for *note Include + * Panos Papadopoulos contributed the original text for *note Include Files::. * Efraim Yawitz contributed the original text for *note Debugger::. @@ -31608,7 +31607,7 @@ Index * Collado, Manuel: Acknowledgments. (line 60) * collating elements: Bracket Expressions. (line 69) * collating symbols: Bracket Expressions. (line 76) -* Colombo, Antonio <1>: Contributors. (line 138) +* Colombo, Antonio <1>: Contributors. (line 137) * Colombo, Antonio: Acknowledgments. (line 60) * columns, aligning: Print Examples. (line 70) * columns, cutting: Cut Program. (line 6) @@ -33043,7 +33042,7 @@ Index * output, standard: Special FD. (line 6) * p debugger command (alias for print): Viewing And Changing Data. (line 36) -* Papadopoulos, Panos: Contributors. (line 129) +* Papadopoulos, Panos: Contributors. (line 128) * parent process ID of gawk process: Auto-set. (line 181) * parentheses (), in a profile: Profiling. (line 146) * parentheses (), regexp operator: Regexp Operators. (line 80) @@ -33388,7 +33387,7 @@ Index * RLENGTH variable, match() function and: String Functions. (line 224) * Robbins, Arnold <1>: Future Extensions. (line 6) * Robbins, Arnold <2>: Bugs. (line 32) -* Robbins, Arnold <3>: Contributors. (line 142) +* Robbins, Arnold <3>: Contributors. (line 141) * Robbins, Arnold <4>: General Data Types. (line 6) * Robbins, Arnold <5>: Alarm Program. (line 6) * Robbins, Arnold <6>: Passwd Functions. (line 90) @@ -33431,7 +33430,7 @@ Index * 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 134) +* Schorr, Andrew <1>: Contributors. (line 133) * Schorr, Andrew <2>: Auto-set. (line 284) * Schorr, Andrew: Acknowledgments. (line 60) * Schreiber, Bert: Acknowledgments. (line 38) @@ -33916,7 +33915,7 @@ Index * xgettext utility: String Extraction. (line 13) * xor: Bitwise Functions. (line 55) * XOR bitwise operation: Bitwise Functions. (line 6) -* Yawitz, Efraim: Contributors. (line 132) +* Yawitz, Efraim: Contributors. (line 131) * Zaretskii, Eli <1>: Bugs. (line 71) * Zaretskii, Eli <2>: Contributors. (line 55) * Zaretskii, Eli: Acknowledgments. (line 60) @@ -33984,518 +33983,518 @@ Node: Two Rules97321 Node: More Complex99215 Ref: More Complex-Footnote-1102147 Node: Statements/Lines102232 -Ref: Statements/Lines-Footnote-1106687 -Node: Other Features106952 -Node: When107880 -Node: Intro Summary110050 -Node: Invoking Gawk110816 -Node: Command Line112331 -Node: Options113122 -Ref: Options-Footnote-1128951 -Node: Other Arguments128976 -Node: Naming Standard Input131638 -Node: Environment Variables132732 -Node: AWKPATH Variable133290 -Ref: AWKPATH Variable-Footnote-1136162 -Ref: AWKPATH Variable-Footnote-2136207 -Node: AWKLIBPATH Variable136467 -Node: Other Environment Variables137226 -Node: Exit Status140881 -Node: Include Files141556 -Node: Loading Shared Libraries145134 -Node: Obsolete146518 -Node: Undocumented147215 -Node: Invoking Summary147482 -Node: Regexp149062 -Node: Regexp Usage150512 -Node: Escape Sequences152545 -Node: Regexp Operators158212 -Ref: Regexp Operators-Footnote-1165692 -Ref: Regexp Operators-Footnote-2165839 -Node: Bracket Expressions165937 -Ref: table-char-classes167827 -Node: GNU Regexp Operators170350 -Node: Case-sensitivity174073 -Ref: Case-sensitivity-Footnote-1176965 -Ref: Case-sensitivity-Footnote-2177200 -Node: Leftmost Longest177308 -Node: Computed Regexps178509 -Node: Regexp Summary181881 -Node: Reading Files183352 -Node: Records185444 -Node: awk split records186187 -Node: gawk split records191045 -Ref: gawk split records-Footnote-1195566 -Node: Fields195603 -Ref: Fields-Footnote-1198567 -Node: Nonconstant Fields198653 -Ref: Nonconstant Fields-Footnote-1200883 -Node: Changing Fields201085 -Node: Field Separators207039 -Node: Default Field Splitting209741 -Node: Regexp Field Splitting210858 -Node: Single Character Fields214199 -Node: Command Line Field Separator215258 -Node: Full Line Fields218600 -Ref: Full Line Fields-Footnote-1219108 -Node: Field Splitting Summary219154 -Ref: Field Splitting Summary-Footnote-1222253 -Node: Constant Size222354 -Node: Splitting By Content226961 -Ref: Splitting By Content-Footnote-1230711 -Node: Multiple Line230751 -Ref: Multiple Line-Footnote-1236607 -Node: Getline236786 -Node: Plain Getline239002 -Node: Getline/Variable241097 -Node: Getline/File242244 -Node: Getline/Variable/File243628 -Ref: Getline/Variable/File-Footnote-1245227 -Node: Getline/Pipe245314 -Node: Getline/Variable/Pipe248013 -Node: Getline/Coprocess249120 -Node: Getline/Variable/Coprocess250372 -Node: Getline Notes251109 -Node: Getline Summary253913 -Ref: table-getline-variants254321 -Node: Read Timeout255233 -Ref: Read Timeout-Footnote-1259060 -Node: Command line directories259118 -Node: Input Summary260022 -Node: Input Exercises263159 -Node: Printing263892 -Node: Print265614 -Node: Print Examples266955 -Node: Output Separators269734 -Node: OFMT271750 -Node: Printf273108 -Node: Basic Printf274014 -Node: Control Letters275553 -Node: Format Modifiers279405 -Node: Printf Examples285432 -Node: Redirection287896 -Node: Special Files294868 -Node: Special FD295399 -Ref: Special FD-Footnote-1299023 -Node: Special Network299097 -Node: Special Caveats299947 -Node: Close Files And Pipes300743 -Ref: Close Files And Pipes-Footnote-1307904 -Ref: Close Files And Pipes-Footnote-2308052 -Node: Output Summary308202 -Node: Output exercises309199 -Node: Expressions309879 -Node: Values311064 -Node: Constants311740 -Node: Scalar Constants312420 -Ref: Scalar Constants-Footnote-1313279 -Node: Nondecimal-numbers313529 -Node: Regexp Constants316529 -Node: Using Constant Regexps317004 -Node: Variables320074 -Node: Using Variables320729 -Node: Assignment Options322453 -Node: Conversion324328 -Node: Strings And Numbers324852 -Ref: Strings And Numbers-Footnote-1327914 -Node: Locale influences conversions328023 -Ref: table-locale-affects330740 -Node: All Operators331328 -Node: Arithmetic Ops331958 -Node: Concatenation334463 -Ref: Concatenation-Footnote-1337259 -Node: Assignment Ops337379 -Ref: table-assign-ops342362 -Node: Increment Ops343679 -Node: Truth Values and Conditions347117 -Node: Truth Values348200 -Node: Typing and Comparison349249 -Node: Variable Typing350042 -Ref: Variable Typing-Footnote-1353942 -Node: Comparison Operators354064 -Ref: table-relational-ops354474 -Node: POSIX String Comparison358024 -Ref: POSIX String Comparison-Footnote-1359108 -Node: Boolean Ops359246 -Ref: Boolean Ops-Footnote-1363316 -Node: Conditional Exp363407 -Node: Function Calls365134 -Node: Precedence369014 -Node: Locales372683 -Node: Expressions Summary374314 -Node: Patterns and Actions376855 -Node: Pattern Overview377971 -Node: Regexp Patterns379648 -Node: Expression Patterns380191 -Node: Ranges383972 -Node: BEGIN/END387078 -Node: Using BEGIN/END387840 -Ref: Using BEGIN/END-Footnote-1390576 -Node: I/O And BEGIN/END390682 -Node: BEGINFILE/ENDFILE392967 -Node: Empty395898 -Node: Using Shell Variables396215 -Node: Action Overview398498 -Node: Statements400825 -Node: If Statement402673 -Node: While Statement404171 -Node: Do Statement406215 -Node: For Statement407371 -Node: Switch Statement410523 -Node: Break Statement412626 -Node: Continue Statement414681 -Node: Next Statement416474 -Node: Nextfile Statement418864 -Node: Exit Statement421519 -Node: Built-in Variables423923 -Node: User-modified425050 -Ref: User-modified-Footnote-1432739 -Node: Auto-set432801 -Ref: Auto-set-Footnote-1445383 -Ref: Auto-set-Footnote-2445588 -Node: ARGC and ARGV445644 -Node: Pattern Action Summary449498 -Node: Arrays451721 -Node: Array Basics453270 -Node: Array Intro454096 -Ref: figure-array-elements456069 -Node: Reference to Elements458476 -Node: Assigning Elements460749 -Node: Array Example461240 -Node: Scanning an Array462972 -Node: Controlling Scanning465987 -Ref: Controlling Scanning-Footnote-1471160 -Node: Delete471476 -Ref: Delete-Footnote-1474241 -Node: Numeric Array Subscripts474298 -Node: Uninitialized Subscripts476481 -Node: Multidimensional478106 -Node: Multiscanning481199 -Node: Arrays of Arrays482788 -Node: Arrays Summary487451 -Node: Functions489556 -Node: Built-in490429 -Node: Calling Built-in491507 -Node: Numeric Functions493495 -Ref: Numeric Functions-Footnote-1497329 -Ref: Numeric Functions-Footnote-2497686 -Ref: Numeric Functions-Footnote-3497734 -Node: String Functions498003 -Ref: String Functions-Footnote-1521014 -Ref: String Functions-Footnote-2521143 -Ref: String Functions-Footnote-3521391 -Node: Gory Details521478 -Ref: table-sub-escapes523147 -Ref: table-sub-posix-92524501 -Ref: table-sub-proposed525852 -Ref: table-posix-sub527206 -Ref: table-gensub-escapes528751 -Ref: Gory Details-Footnote-1529927 -Ref: Gory Details-Footnote-2529978 -Node: I/O Functions530129 -Ref: I/O Functions-Footnote-1537252 -Node: Time Functions537399 -Ref: Time Functions-Footnote-1547863 -Ref: Time Functions-Footnote-2547931 -Ref: Time Functions-Footnote-3548089 -Ref: Time Functions-Footnote-4548200 -Ref: Time Functions-Footnote-5548312 -Ref: Time Functions-Footnote-6548539 -Node: Bitwise Functions548805 -Ref: table-bitwise-ops549367 -Ref: Bitwise Functions-Footnote-1553612 -Node: Type Functions553796 -Node: I18N Functions554938 -Node: User-defined556583 -Node: Definition Syntax557387 -Ref: Definition Syntax-Footnote-1562566 -Node: Function Example562635 -Ref: Function Example-Footnote-1565279 -Node: Function Caveats565301 -Node: Calling A Function565819 -Node: Variable Scope566774 -Node: Pass By Value/Reference569762 -Node: Return Statement573270 -Node: Dynamic Typing576254 -Node: Indirect Calls577183 -Node: Functions Summary586896 -Node: Library Functions589435 -Ref: Library Functions-Footnote-1593053 -Ref: Library Functions-Footnote-2593196 -Node: Library Names593367 -Ref: Library Names-Footnote-1596840 -Ref: Library Names-Footnote-2597060 -Node: General Functions597146 -Node: Strtonum Function598174 -Node: Assert Function600954 -Node: Round Function604280 -Node: Cliff Random Function605821 -Node: Ordinal Functions606837 -Ref: Ordinal Functions-Footnote-1609914 -Ref: Ordinal Functions-Footnote-2610166 -Node: Join Function610377 -Ref: Join Function-Footnote-1612148 -Node: Getlocaltime Function612348 -Node: Readfile Function616084 -Node: Data File Management617923 -Node: Filetrans Function618555 -Node: Rewind Function622624 -Node: File Checking624011 -Ref: File Checking-Footnote-1625143 -Node: Empty Files625344 -Node: Ignoring Assigns627323 -Node: Getopt Function628877 -Ref: Getopt Function-Footnote-1640180 -Node: Passwd Functions640383 -Ref: Passwd Functions-Footnote-1649362 -Node: Group Functions649450 -Ref: Group Functions-Footnote-1657391 -Node: Walking Arrays657604 -Node: Library Functions Summary659207 -Node: Library exercises660595 -Node: Sample Programs661875 -Node: Running Examples662645 -Node: Clones663373 -Node: Cut Program664597 -Node: Egrep Program674465 -Ref: Egrep Program-Footnote-1682436 -Node: Id Program682546 -Node: Split Program686210 -Ref: Split Program-Footnote-1689748 -Node: Tee Program689876 -Node: Uniq Program692683 -Node: Wc Program700113 -Ref: Wc Program-Footnote-1704378 -Node: Miscellaneous Programs704470 -Node: Dupword Program705683 -Node: Alarm Program707714 -Node: Translate Program712528 -Ref: Translate Program-Footnote-1716919 -Ref: Translate Program-Footnote-2717189 -Node: Labels Program717323 -Ref: Labels Program-Footnote-1720694 -Node: Word Sorting720778 -Node: History Sorting724821 -Node: Extract Program726657 -Node: Simple Sed734193 -Node: Igawk Program737255 -Ref: Igawk Program-Footnote-1751566 -Ref: Igawk Program-Footnote-2751767 -Node: Anagram Program751905 -Node: Signature Program754973 -Node: Programs Summary756220 -Node: Programs Exercises757435 -Node: Advanced Features761086 -Node: Nondecimal Data763034 -Node: Array Sorting764611 -Node: Controlling Array Traversal765308 -Node: Array Sorting Functions773588 -Ref: Array Sorting Functions-Footnote-1777495 -Node: Two-way I/O777689 -Ref: Two-way I/O-Footnote-1783205 -Node: TCP/IP Networking783287 -Node: Profiling786131 -Node: Advanced Features Summary793673 -Node: Internationalization795537 -Node: I18N and L10N797017 -Node: Explaining gettext797703 -Ref: Explaining gettext-Footnote-1802843 -Ref: Explaining gettext-Footnote-2803027 -Node: Programmer i18n803192 -Node: Translator i18n807417 -Node: String Extraction808211 -Ref: String Extraction-Footnote-1809172 -Node: Printf Ordering809258 -Ref: Printf Ordering-Footnote-1812040 -Node: I18N Portability812104 -Ref: I18N Portability-Footnote-1814553 -Node: I18N Example814616 -Ref: I18N Example-Footnote-1817338 -Node: Gawk I18N817410 -Node: I18N Summary818048 -Node: Debugger819387 -Node: Debugging820409 -Node: Debugging Concepts820850 -Node: Debugging Terms822706 -Node: Awk Debugging825303 -Node: Sample Debugging Session826195 -Node: Debugger Invocation826715 -Node: Finding The Bug828048 -Node: List of Debugger Commands834530 -Node: Breakpoint Control835862 -Node: Debugger Execution Control839526 -Node: Viewing And Changing Data842886 -Node: Execution Stack846244 -Node: Debugger Info847757 -Node: Miscellaneous Debugger Commands851751 -Node: Readline Support856935 -Node: Limitations857827 -Node: Debugging Summary860101 -Node: Arbitrary Precision Arithmetic861265 -Node: Computer Arithmetic862594 -Ref: Computer Arithmetic-Footnote-1866981 -Node: Math Definitions867038 -Ref: table-ieee-formats869922 -Node: MPFR features870426 -Node: FP Math Caution872068 -Ref: FP Math Caution-Footnote-1873109 -Node: Inexactness of computations873478 -Node: Inexact representation874426 -Node: Comparing FP Values875781 -Node: Errors accumulate876745 -Node: Getting Accuracy878178 -Node: Try To Round880837 -Node: Setting precision881736 -Ref: table-predefined-precision-strings882418 -Node: Setting the rounding mode884211 -Ref: table-gawk-rounding-modes884575 -Ref: Setting the rounding mode-Footnote-1888029 -Node: Arbitrary Precision Integers888208 -Ref: Arbitrary Precision Integers-Footnote-1891211 -Node: POSIX Floating Point Problems891360 -Ref: POSIX Floating Point Problems-Footnote-1895236 -Node: Floating point summary895274 -Node: Dynamic Extensions897491 -Node: Extension Intro899043 -Node: Plugin License900308 -Node: Extension Mechanism Outline900993 -Ref: figure-load-extension901417 -Ref: figure-load-new-function902902 -Ref: figure-call-new-function903904 -Node: Extension API Description905888 -Node: Extension API Functions Introduction907338 -Node: General Data Types912203 -Ref: General Data Types-Footnote-1917896 -Node: Requesting Values918195 -Ref: table-value-types-returned918932 -Node: Memory Allocation Functions919890 -Ref: Memory Allocation Functions-Footnote-1922637 -Node: Constructor Functions922733 -Node: Registration Functions924491 -Node: Extension Functions925176 -Node: Exit Callback Functions927478 -Node: Extension Version String928727 -Node: Input Parsers929377 -Node: Output Wrappers939180 -Node: Two-way processors943696 -Node: Printing Messages945900 -Ref: Printing Messages-Footnote-1946977 -Node: Updating `ERRNO'947129 -Node: Accessing Parameters947868 -Node: Symbol Table Access949098 -Node: Symbol table by name949612 -Node: Symbol table by cookie951588 -Ref: Symbol table by cookie-Footnote-1955721 -Node: Cached values955784 -Ref: Cached values-Footnote-1959288 -Node: Array Manipulation959379 -Ref: Array Manipulation-Footnote-1960477 -Node: Array Data Types960516 -Ref: Array Data Types-Footnote-1963219 -Node: Array Functions963311 -Node: Flattening Arrays967185 -Node: Creating Arrays974037 -Node: Extension API Variables978768 -Node: Extension Versioning979404 -Node: Extension API Informational Variables981305 -Node: Extension API Boilerplate982391 -Node: Finding Extensions986195 -Node: Extension Example986755 -Node: Internal File Description987485 -Node: Internal File Ops991576 -Ref: Internal File Ops-Footnote-11003008 -Node: Using Internal File Ops1003148 -Ref: Using Internal File Ops-Footnote-11005495 -Node: Extension Samples1005763 -Node: Extension Sample File Functions1007287 -Node: Extension Sample Fnmatch1014855 -Node: Extension Sample Fork1016336 -Node: Extension Sample Inplace1017549 -Node: Extension Sample Ord1019224 -Node: Extension Sample Readdir1020060 -Ref: table-readdir-file-types1020916 -Node: Extension Sample Revout1021715 -Node: Extension Sample Rev2way1022306 -Node: Extension Sample Read write array1023047 -Node: Extension Sample Readfile1024926 -Node: Extension Sample API Tests1026026 -Node: Extension Sample Time1026551 -Node: gawkextlib1027866 -Node: Extension summary1030679 -Node: Extension Exercises1034372 -Node: Language History1035094 -Node: V7/SVR3.11036737 -Node: SVR41039057 -Node: POSIX1040499 -Node: BTL1041885 -Node: POSIX/GNU1042619 -Node: Feature History1048218 -Node: Common Extensions1061348 -Node: Ranges and Locales1062660 -Ref: Ranges and Locales-Footnote-11067277 -Ref: Ranges and Locales-Footnote-21067304 -Ref: Ranges and Locales-Footnote-31067538 -Node: Contributors1067759 -Node: History summary1073221 -Node: Installation1074590 -Node: Gawk Distribution1075541 -Node: Getting1076025 -Node: Extracting1076849 -Node: Distribution contents1078491 -Node: Unix Installation1084208 -Node: Quick Installation1084825 -Node: Additional Configuration Options1087267 -Node: Configuration Philosophy1089005 -Node: Non-Unix Installation1091356 -Node: PC Installation1091814 -Node: PC Binary Installation1093125 -Node: PC Compiling1094973 -Ref: PC Compiling-Footnote-11097972 -Node: PC Testing1098077 -Node: PC Using1099253 -Node: Cygwin1103411 -Node: MSYS1104220 -Node: VMS Installation1104734 -Node: VMS Compilation1105530 -Ref: VMS Compilation-Footnote-11106752 -Node: VMS Dynamic Extensions1106810 -Node: VMS Installation Details1108183 -Node: VMS Running1110435 -Node: VMS GNV1113269 -Node: VMS Old Gawk1113992 -Node: Bugs1114462 -Node: Other Versions1118466 -Node: Installation summary1124721 -Node: Notes1125777 -Node: Compatibility Mode1126642 -Node: Additions1127424 -Node: Accessing The Source1128349 -Node: Adding Code1129785 -Node: New Ports1135963 -Node: Derived Files1140444 -Ref: Derived Files-Footnote-11145525 -Ref: Derived Files-Footnote-21145559 -Ref: Derived Files-Footnote-31146155 -Node: Future Extensions1146269 -Node: Implementation Limitations1146875 -Node: Extension Design1148123 -Node: Old Extension Problems1149277 -Ref: Old Extension Problems-Footnote-11150794 -Node: Extension New Mechanism Goals1150851 -Ref: Extension New Mechanism Goals-Footnote-11154211 -Node: Extension Other Design Decisions1154400 -Node: Extension Future Growth1156506 -Node: Old Extension Mechanism1157342 -Node: Notes summary1159104 -Node: Basic Concepts1160290 -Node: Basic High Level1160971 -Ref: figure-general-flow1161243 -Ref: figure-process-flow1161842 -Ref: Basic High Level-Footnote-11165071 -Node: Basic Data Typing1165256 -Node: Glossary1168584 -Node: Copying1193736 -Node: GNU Free Documentation License1231292 -Node: Index1256428 +Ref: Statements/Lines-Footnote-1106688 +Node: Other Features106953 +Node: When107881 +Node: Intro Summary110051 +Node: Invoking Gawk110817 +Node: Command Line112332 +Node: Options113123 +Ref: Options-Footnote-1128952 +Node: Other Arguments128977 +Node: Naming Standard Input131639 +Node: Environment Variables132733 +Node: AWKPATH Variable133291 +Ref: AWKPATH Variable-Footnote-1136163 +Ref: AWKPATH Variable-Footnote-2136208 +Node: AWKLIBPATH Variable136468 +Node: Other Environment Variables137227 +Node: Exit Status140882 +Node: Include Files141557 +Node: Loading Shared Libraries145135 +Node: Obsolete146519 +Node: Undocumented147216 +Node: Invoking Summary147483 +Node: Regexp149063 +Node: Regexp Usage150513 +Node: Escape Sequences152546 +Node: Regexp Operators158213 +Ref: Regexp Operators-Footnote-1165693 +Ref: Regexp Operators-Footnote-2165840 +Node: Bracket Expressions165938 +Ref: table-char-classes167828 +Node: GNU Regexp Operators170351 +Node: Case-sensitivity174074 +Ref: Case-sensitivity-Footnote-1176966 +Ref: Case-sensitivity-Footnote-2177201 +Node: Leftmost Longest177309 +Node: Computed Regexps178510 +Node: Regexp Summary181882 +Node: Reading Files183353 +Node: Records185445 +Node: awk split records186188 +Node: gawk split records191046 +Ref: gawk split records-Footnote-1195567 +Node: Fields195604 +Ref: Fields-Footnote-1198568 +Node: Nonconstant Fields198654 +Ref: Nonconstant Fields-Footnote-1200884 +Node: Changing Fields201086 +Node: Field Separators207040 +Node: Default Field Splitting209742 +Node: Regexp Field Splitting210859 +Node: Single Character Fields214200 +Node: Command Line Field Separator215259 +Node: Full Line Fields218601 +Ref: Full Line Fields-Footnote-1219109 +Node: Field Splitting Summary219155 +Ref: Field Splitting Summary-Footnote-1222254 +Node: Constant Size222355 +Node: Splitting By Content226962 +Ref: Splitting By Content-Footnote-1230712 +Node: Multiple Line230752 +Ref: Multiple Line-Footnote-1236608 +Node: Getline236787 +Node: Plain Getline239003 +Node: Getline/Variable241098 +Node: Getline/File242245 +Node: Getline/Variable/File243629 +Ref: Getline/Variable/File-Footnote-1245228 +Node: Getline/Pipe245315 +Node: Getline/Variable/Pipe248014 +Node: Getline/Coprocess249121 +Node: Getline/Variable/Coprocess250373 +Node: Getline Notes251110 +Node: Getline Summary253914 +Ref: table-getline-variants254322 +Node: Read Timeout255234 +Ref: Read Timeout-Footnote-1259061 +Node: Command line directories259119 +Node: Input Summary260023 +Node: Input Exercises263160 +Node: Printing263893 +Node: Print265615 +Node: Print Examples266956 +Node: Output Separators269735 +Node: OFMT271751 +Node: Printf273109 +Node: Basic Printf274015 +Node: Control Letters275554 +Node: Format Modifiers279406 +Node: Printf Examples285433 +Node: Redirection287897 +Node: Special Files294869 +Node: Special FD295400 +Ref: Special FD-Footnote-1299024 +Node: Special Network299098 +Node: Special Caveats299948 +Node: Close Files And Pipes300744 +Ref: Close Files And Pipes-Footnote-1307905 +Ref: Close Files And Pipes-Footnote-2308053 +Node: Output Summary308203 +Node: Output exercises309200 +Node: Expressions309880 +Node: Values311065 +Node: Constants311741 +Node: Scalar Constants312421 +Ref: Scalar Constants-Footnote-1313280 +Node: Nondecimal-numbers313530 +Node: Regexp Constants316530 +Node: Using Constant Regexps317005 +Node: Variables320075 +Node: Using Variables320730 +Node: Assignment Options322454 +Node: Conversion324329 +Node: Strings And Numbers324853 +Ref: Strings And Numbers-Footnote-1327915 +Node: Locale influences conversions328024 +Ref: table-locale-affects330741 +Node: All Operators331329 +Node: Arithmetic Ops331959 +Node: Concatenation334464 +Ref: Concatenation-Footnote-1337260 +Node: Assignment Ops337380 +Ref: table-assign-ops342363 +Node: Increment Ops343680 +Node: Truth Values and Conditions347118 +Node: Truth Values348201 +Node: Typing and Comparison349250 +Node: Variable Typing350043 +Ref: Variable Typing-Footnote-1353943 +Node: Comparison Operators354065 +Ref: table-relational-ops354475 +Node: POSIX String Comparison358025 +Ref: POSIX String Comparison-Footnote-1359109 +Node: Boolean Ops359247 +Ref: Boolean Ops-Footnote-1363317 +Node: Conditional Exp363408 +Node: Function Calls365135 +Node: Precedence369015 +Node: Locales372684 +Node: Expressions Summary374315 +Node: Patterns and Actions376856 +Node: Pattern Overview377972 +Node: Regexp Patterns379649 +Node: Expression Patterns380192 +Node: Ranges383973 +Node: BEGIN/END387079 +Node: Using BEGIN/END387841 +Ref: Using BEGIN/END-Footnote-1390577 +Node: I/O And BEGIN/END390683 +Node: BEGINFILE/ENDFILE392968 +Node: Empty395899 +Node: Using Shell Variables396216 +Node: Action Overview398499 +Node: Statements400826 +Node: If Statement402674 +Node: While Statement404172 +Node: Do Statement406216 +Node: For Statement407372 +Node: Switch Statement410524 +Node: Break Statement412627 +Node: Continue Statement414682 +Node: Next Statement416475 +Node: Nextfile Statement418865 +Node: Exit Statement421520 +Node: Built-in Variables423924 +Node: User-modified425051 +Ref: User-modified-Footnote-1432740 +Node: Auto-set432802 +Ref: Auto-set-Footnote-1445384 +Ref: Auto-set-Footnote-2445589 +Node: ARGC and ARGV445645 +Node: Pattern Action Summary449499 +Node: Arrays451722 +Node: Array Basics453271 +Node: Array Intro454097 +Ref: figure-array-elements456070 +Node: Reference to Elements458477 +Node: Assigning Elements460750 +Node: Array Example461241 +Node: Scanning an Array462973 +Node: Controlling Scanning465988 +Ref: Controlling Scanning-Footnote-1471161 +Node: Delete471477 +Ref: Delete-Footnote-1474242 +Node: Numeric Array Subscripts474299 +Node: Uninitialized Subscripts476482 +Node: Multidimensional478107 +Node: Multiscanning481200 +Node: Arrays of Arrays482789 +Node: Arrays Summary487452 +Node: Functions489557 +Node: Built-in490430 +Node: Calling Built-in491508 +Node: Numeric Functions493496 +Ref: Numeric Functions-Footnote-1497330 +Ref: Numeric Functions-Footnote-2497687 +Ref: Numeric Functions-Footnote-3497735 +Node: String Functions498004 +Ref: String Functions-Footnote-1521015 +Ref: String Functions-Footnote-2521144 +Ref: String Functions-Footnote-3521392 +Node: Gory Details521479 +Ref: table-sub-escapes523148 +Ref: table-sub-posix-92524502 +Ref: table-sub-proposed525853 +Ref: table-posix-sub527207 +Ref: table-gensub-escapes528752 +Ref: Gory Details-Footnote-1529928 +Ref: Gory Details-Footnote-2529979 +Node: I/O Functions530130 +Ref: I/O Functions-Footnote-1537253 +Node: Time Functions537400 +Ref: Time Functions-Footnote-1547864 +Ref: Time Functions-Footnote-2547932 +Ref: Time Functions-Footnote-3548090 +Ref: Time Functions-Footnote-4548201 +Ref: Time Functions-Footnote-5548313 +Ref: Time Functions-Footnote-6548540 +Node: Bitwise Functions548806 +Ref: table-bitwise-ops549368 +Ref: Bitwise Functions-Footnote-1553613 +Node: Type Functions553797 +Node: I18N Functions554939 +Node: User-defined556584 +Node: Definition Syntax557388 +Ref: Definition Syntax-Footnote-1562567 +Node: Function Example562636 +Ref: Function Example-Footnote-1565280 +Node: Function Caveats565302 +Node: Calling A Function565820 +Node: Variable Scope566775 +Node: Pass By Value/Reference569763 +Node: Return Statement573271 +Node: Dynamic Typing576255 +Node: Indirect Calls577184 +Node: Functions Summary586897 +Node: Library Functions589436 +Ref: Library Functions-Footnote-1593054 +Ref: Library Functions-Footnote-2593197 +Node: Library Names593368 +Ref: Library Names-Footnote-1596841 +Ref: Library Names-Footnote-2597061 +Node: General Functions597147 +Node: Strtonum Function598175 +Node: Assert Function600955 +Node: Round Function604281 +Node: Cliff Random Function605822 +Node: Ordinal Functions606838 +Ref: Ordinal Functions-Footnote-1609915 +Ref: Ordinal Functions-Footnote-2610167 +Node: Join Function610378 +Ref: Join Function-Footnote-1612149 +Node: Getlocaltime Function612349 +Node: Readfile Function616085 +Node: Data File Management617924 +Node: Filetrans Function618556 +Node: Rewind Function622625 +Node: File Checking624012 +Ref: File Checking-Footnote-1625144 +Node: Empty Files625345 +Node: Ignoring Assigns627324 +Node: Getopt Function628878 +Ref: Getopt Function-Footnote-1640181 +Node: Passwd Functions640384 +Ref: Passwd Functions-Footnote-1649363 +Node: Group Functions649451 +Ref: Group Functions-Footnote-1657392 +Node: Walking Arrays657605 +Node: Library Functions Summary659208 +Node: Library exercises660596 +Node: Sample Programs661876 +Node: Running Examples662646 +Node: Clones663374 +Node: Cut Program664598 +Node: Egrep Program674466 +Ref: Egrep Program-Footnote-1682437 +Node: Id Program682547 +Node: Split Program686211 +Ref: Split Program-Footnote-1689749 +Node: Tee Program689877 +Node: Uniq Program692684 +Node: Wc Program700114 +Ref: Wc Program-Footnote-1704379 +Node: Miscellaneous Programs704471 +Node: Dupword Program705684 +Node: Alarm Program707715 +Node: Translate Program712529 +Ref: Translate Program-Footnote-1716920 +Ref: Translate Program-Footnote-2717190 +Node: Labels Program717324 +Ref: Labels Program-Footnote-1720695 +Node: Word Sorting720779 +Node: History Sorting724822 +Node: Extract Program726658 +Node: Simple Sed734194 +Node: Igawk Program737256 +Ref: Igawk Program-Footnote-1751567 +Ref: Igawk Program-Footnote-2751768 +Node: Anagram Program751906 +Node: Signature Program754974 +Node: Programs Summary756221 +Node: Programs Exercises757436 +Node: Advanced Features761087 +Node: Nondecimal Data763035 +Node: Array Sorting764612 +Node: Controlling Array Traversal765309 +Node: Array Sorting Functions773589 +Ref: Array Sorting Functions-Footnote-1777496 +Node: Two-way I/O777690 +Ref: Two-way I/O-Footnote-1783206 +Node: TCP/IP Networking783288 +Node: Profiling786132 +Node: Advanced Features Summary793674 +Node: Internationalization795538 +Node: I18N and L10N797018 +Node: Explaining gettext797704 +Ref: Explaining gettext-Footnote-1802844 +Ref: Explaining gettext-Footnote-2803028 +Node: Programmer i18n803193 +Node: Translator i18n807418 +Node: String Extraction808212 +Ref: String Extraction-Footnote-1809173 +Node: Printf Ordering809259 +Ref: Printf Ordering-Footnote-1812041 +Node: I18N Portability812105 +Ref: I18N Portability-Footnote-1814554 +Node: I18N Example814617 +Ref: I18N Example-Footnote-1817339 +Node: Gawk I18N817411 +Node: I18N Summary818049 +Node: Debugger819388 +Node: Debugging820410 +Node: Debugging Concepts820851 +Node: Debugging Terms822707 +Node: Awk Debugging825304 +Node: Sample Debugging Session826196 +Node: Debugger Invocation826716 +Node: Finding The Bug828049 +Node: List of Debugger Commands834531 +Node: Breakpoint Control835863 +Node: Debugger Execution Control839527 +Node: Viewing And Changing Data842887 +Node: Execution Stack846245 +Node: Debugger Info847758 +Node: Miscellaneous Debugger Commands851752 +Node: Readline Support856936 +Node: Limitations857828 +Node: Debugging Summary860102 +Node: Arbitrary Precision Arithmetic861266 +Node: Computer Arithmetic862595 +Ref: Computer Arithmetic-Footnote-1866982 +Node: Math Definitions867039 +Ref: table-ieee-formats869923 +Node: MPFR features870427 +Node: FP Math Caution872069 +Ref: FP Math Caution-Footnote-1873110 +Node: Inexactness of computations873479 +Node: Inexact representation874427 +Node: Comparing FP Values875782 +Node: Errors accumulate876746 +Node: Getting Accuracy878179 +Node: Try To Round880838 +Node: Setting precision881737 +Ref: table-predefined-precision-strings882419 +Node: Setting the rounding mode884212 +Ref: table-gawk-rounding-modes884576 +Ref: Setting the rounding mode-Footnote-1888030 +Node: Arbitrary Precision Integers888209 +Ref: Arbitrary Precision Integers-Footnote-1891212 +Node: POSIX Floating Point Problems891361 +Ref: POSIX Floating Point Problems-Footnote-1895237 +Node: Floating point summary895275 +Node: Dynamic Extensions897492 +Node: Extension Intro899044 +Node: Plugin License900309 +Node: Extension Mechanism Outline900994 +Ref: figure-load-extension901418 +Ref: figure-load-new-function902903 +Ref: figure-call-new-function903905 +Node: Extension API Description905889 +Node: Extension API Functions Introduction907339 +Node: General Data Types912204 +Ref: General Data Types-Footnote-1917897 +Node: Requesting Values918196 +Ref: table-value-types-returned918933 +Node: Memory Allocation Functions919891 +Ref: Memory Allocation Functions-Footnote-1922638 +Node: Constructor Functions922734 +Node: Registration Functions924492 +Node: Extension Functions925177 +Node: Exit Callback Functions927479 +Node: Extension Version String928728 +Node: Input Parsers929378 +Node: Output Wrappers939181 +Node: Two-way processors943697 +Node: Printing Messages945901 +Ref: Printing Messages-Footnote-1946978 +Node: Updating `ERRNO'947130 +Node: Accessing Parameters947869 +Node: Symbol Table Access949099 +Node: Symbol table by name949613 +Node: Symbol table by cookie951589 +Ref: Symbol table by cookie-Footnote-1955722 +Node: Cached values955785 +Ref: Cached values-Footnote-1959289 +Node: Array Manipulation959380 +Ref: Array Manipulation-Footnote-1960478 +Node: Array Data Types960517 +Ref: Array Data Types-Footnote-1963220 +Node: Array Functions963312 +Node: Flattening Arrays967186 +Node: Creating Arrays974038 +Node: Extension API Variables978769 +Node: Extension Versioning979405 +Node: Extension API Informational Variables981306 +Node: Extension API Boilerplate982392 +Node: Finding Extensions986196 +Node: Extension Example986756 +Node: Internal File Description987486 +Node: Internal File Ops991577 +Ref: Internal File Ops-Footnote-11003009 +Node: Using Internal File Ops1003149 +Ref: Using Internal File Ops-Footnote-11005496 +Node: Extension Samples1005764 +Node: Extension Sample File Functions1007288 +Node: Extension Sample Fnmatch1014856 +Node: Extension Sample Fork1016338 +Node: Extension Sample Inplace1017551 +Node: Extension Sample Ord1019226 +Node: Extension Sample Readdir1020062 +Ref: table-readdir-file-types1020918 +Node: Extension Sample Revout1021717 +Node: Extension Sample Rev2way1022308 +Node: Extension Sample Read write array1023049 +Node: Extension Sample Readfile1024928 +Node: Extension Sample API Tests1026028 +Node: Extension Sample Time1026553 +Node: gawkextlib1027868 +Node: Extension summary1030681 +Node: Extension Exercises1034374 +Node: Language History1035096 +Node: V7/SVR3.11036739 +Node: SVR41039059 +Node: POSIX1040501 +Node: BTL1041887 +Node: POSIX/GNU1042621 +Node: Feature History1048220 +Node: Common Extensions1061350 +Node: Ranges and Locales1062662 +Ref: Ranges and Locales-Footnote-11067279 +Ref: Ranges and Locales-Footnote-21067306 +Ref: Ranges and Locales-Footnote-31067540 +Node: Contributors1067761 +Node: History summary1073186 +Node: Installation1074555 +Node: Gawk Distribution1075506 +Node: Getting1075990 +Node: Extracting1076814 +Node: Distribution contents1078456 +Node: Unix Installation1084173 +Node: Quick Installation1084790 +Node: Additional Configuration Options1087232 +Node: Configuration Philosophy1088970 +Node: Non-Unix Installation1091321 +Node: PC Installation1091779 +Node: PC Binary Installation1093090 +Node: PC Compiling1094938 +Ref: PC Compiling-Footnote-11097937 +Node: PC Testing1098042 +Node: PC Using1099218 +Node: Cygwin1103376 +Node: MSYS1104185 +Node: VMS Installation1104699 +Node: VMS Compilation1105495 +Ref: VMS Compilation-Footnote-11106717 +Node: VMS Dynamic Extensions1106775 +Node: VMS Installation Details1108148 +Node: VMS Running1110400 +Node: VMS GNV1113234 +Node: VMS Old Gawk1113957 +Node: Bugs1114427 +Node: Other Versions1118431 +Node: Installation summary1124686 +Node: Notes1125742 +Node: Compatibility Mode1126607 +Node: Additions1127389 +Node: Accessing The Source1128314 +Node: Adding Code1129750 +Node: New Ports1135928 +Node: Derived Files1140409 +Ref: Derived Files-Footnote-11145490 +Ref: Derived Files-Footnote-21145524 +Ref: Derived Files-Footnote-31146120 +Node: Future Extensions1146234 +Node: Implementation Limitations1146840 +Node: Extension Design1148088 +Node: Old Extension Problems1149242 +Ref: Old Extension Problems-Footnote-11150759 +Node: Extension New Mechanism Goals1150816 +Ref: Extension New Mechanism Goals-Footnote-11154176 +Node: Extension Other Design Decisions1154365 +Node: Extension Future Growth1156471 +Node: Old Extension Mechanism1157307 +Node: Notes summary1159069 +Node: Basic Concepts1160255 +Node: Basic High Level1160936 +Ref: figure-general-flow1161208 +Ref: figure-process-flow1161807 +Ref: Basic High Level-Footnote-11165036 +Node: Basic Data Typing1165221 +Node: Glossary1168549 +Node: Copying1193701 +Node: GNU Free Documentation License1231257 +Node: Index1256393  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index e12de779..68c5245c 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -3302,7 +3302,7 @@ $ gawk 'BEGIN @{ print "dont panic" # a friendly \ > BEGIN rule > @}' @error{} gawk: cmd. line:2: BEGIN rule -@error{} gawk: cmd. line:2: ^ parse error +@error{} gawk: cmd. line:2: ^ syntax error @end example @noindent @@ -34062,7 +34062,7 @@ flags in the @code{FNM} array. The flags are follows: @multitable @columnfractions .25 .75 -@headitem Array element @tab Corresponding lag defined by @code{fnmatch()} +@headitem Array element @tab Corresponding flag defined by @code{fnmatch()} @item @code{FNM["CASEFOLD"]} @tab @code{FNM_CASEFOLD} @item @code{FNM["FILE_NAME"]} @tab @code{FNM_FILE_NAME} @item @code{FNM["LEADING_DIR"]} @tab @code{FNM_LEADING_DIR} @@ -34477,7 +34477,7 @@ main @command{gawk} distribution. @cindex @command{git} utility You can check out the code for the @code{gawkextlib} project -using the @uref{http://git-scm.com, GIT} distributed source +using the @uref{http://git-scm.com, Git} distributed source code control system. The command is as follows: @example @@ -36277,7 +36277,6 @@ into a byte-code interpreter, including the debugger. @item The addition of true arrays of arrays. -@ref{Arrays of Arrays}. @item The additional modifications for support of arbitrary precision arithmetic. @@ -36299,6 +36298,7 @@ with Pat Rankin. @end itemize @cindex Papadopoulos, Panos +@item Panos Papadopoulos contributed the original text for @ref{Include Files}. @item diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 8167da72..57621990 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -3230,7 +3230,7 @@ $ gawk 'BEGIN @{ print "dont panic" # a friendly \ > BEGIN rule > @}' @error{} gawk: cmd. line:2: BEGIN rule -@error{} gawk: cmd. line:2: ^ parse error +@error{} gawk: cmd. line:2: ^ syntax error @end example @noindent @@ -33177,7 +33177,7 @@ flags in the @code{FNM} array. The flags are follows: @multitable @columnfractions .25 .75 -@headitem Array element @tab Corresponding lag defined by @code{fnmatch()} +@headitem Array element @tab Corresponding flag defined by @code{fnmatch()} @item @code{FNM["CASEFOLD"]} @tab @code{FNM_CASEFOLD} @item @code{FNM["FILE_NAME"]} @tab @code{FNM_FILE_NAME} @item @code{FNM["LEADING_DIR"]} @tab @code{FNM_LEADING_DIR} @@ -33592,7 +33592,7 @@ main @command{gawk} distribution. @cindex @command{git} utility You can check out the code for the @code{gawkextlib} project -using the @uref{http://git-scm.com, GIT} distributed source +using the @uref{http://git-scm.com, Git} distributed source code control system. The command is as follows: @example @@ -35392,7 +35392,6 @@ into a byte-code interpreter, including the debugger. @item The addition of true arrays of arrays. -@ref{Arrays of Arrays}. @item The additional modifications for support of arbitrary precision arithmetic. @@ -35414,6 +35413,7 @@ with Pat Rankin. @end itemize @cindex Papadopoulos, Panos +@item Panos Papadopoulos contributed the original text for @ref{Include Files}. @item -- cgit v1.2.3