diff options
-rw-r--r-- | awklib/eg/lib/intdiv.awk | 23 | ||||
-rw-r--r-- | awklib/eg/prog/anagram.awk | 2 | ||||
-rw-r--r-- | awklib/eg/prog/pi.awk | 2 | ||||
-rw-r--r-- | doc/ChangeLog | 14 | ||||
-rw-r--r-- | doc/awkcard.in | 4 | ||||
-rw-r--r-- | doc/gawk.1 | 191 | ||||
-rw-r--r-- | doc/gawk.info | 1148 | ||||
-rw-r--r-- | doc/gawk.texi | 101 | ||||
-rw-r--r-- | doc/gawktexi.in | 101 | ||||
-rw-r--r-- | doc/it/ChangeLog | 4 | ||||
-rwxr-xr-x[-rw-r--r--] | doc/it/gawktexi.in | 1109 |
11 files changed, 1776 insertions, 923 deletions
diff --git a/awklib/eg/lib/intdiv.awk b/awklib/eg/lib/intdiv.awk deleted file mode 100644 index 9de5978e..00000000 --- a/awklib/eg/lib/intdiv.awk +++ /dev/null @@ -1,23 +0,0 @@ -# intdiv0 --- do integer division - -# -# Arnold Robbins, arnold@skeeve.com, Public Domain -# July, 2014 -# -# Name changed from div() to intdiv() -# April, 2015 -# -# Changed to intdiv0() -# April, 2016 - -function intdiv0(numerator, denominator, result) -{ - split("", result) - - numerator = int(numerator) - denominator = int(denominator) - result["quotient"] = int(numerator / denominator) - result["remainder"] = int(numerator % denominator) - - return 0.0 -} diff --git a/awklib/eg/prog/anagram.awk b/awklib/eg/prog/anagram.awk index df2768d9..4c2ce1fd 100644 --- a/awklib/eg/prog/anagram.awk +++ b/awklib/eg/prog/anagram.awk @@ -9,7 +9,7 @@ # - split() with "" as separator splits out individual characters # - asort() and asorti() functions # -# See http://savannah.gnu.org/projects/gawk. +# See https://savannah.gnu.org/projects/gawk. # # Arnold Robbins # arnold@skeeve.com diff --git a/awklib/eg/prog/pi.awk b/awklib/eg/prog/pi.awk index e1b5bc4f..91060db9 100644 --- a/awklib/eg/prog/pi.awk +++ b/awklib/eg/prog/pi.awk @@ -10,7 +10,7 @@ BEGIN { for (m = digits * 4; m > 0; --m) { d = m * 2 + 1 x = pi * m - intdiv(x, d, result) + intdiv0(x, d, result) pi = result["quotient"] pi = pi + two } diff --git a/doc/ChangeLog b/doc/ChangeLog index 30eac63c..2da1fabe 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,17 @@ +2017-10-01 Arnold D. Robbins <arnold@skeeve.com> + + * gawktexi.in: Add pointer to mawk 2.0 GitHub page. + +2017-10-01 Antonio Giovanni Colombo <azc100@gmail.com> + + * gawktexi.in: Update many URLs to https. Some other small fixes. + +2017-10-01 Arnold D. Robbins <arnold@skeeve.com> + + * awkcard.in: One more small change. + * gawk.1: Brought up to date and polished a bit. + * gawktexi.in: Some small additional fixes. + 2017-09-29 Arnold D. Robbins <arnold@skeeve.com> * awkcard.in: Finish changes (we hope) for next release. diff --git a/doc/awkcard.in b/doc/awkcard.in index da1081b2..31e37a83 100644 --- a/doc/awkcard.in +++ b/doc/awkcard.in @@ -1327,8 +1327,8 @@ The next input record comes from the next input file. Update \*(FCFILENAME\fP \*(CBand \*(FCARGIND\fP\*(CD, reset \*(FCFNR\fP to 1, and start over with the first -pattern. Upon end -of input data, execute any \*(FCEND\fP rule(s). +pattern. At end +of file, execute any \*(CB\*(FCENDFILE\fP and\*(CD \*(FCEND\fP rule(s). .in -.2i .sp .5 .fi @@ -13,7 +13,7 @@ . if \w'\(rq' .ds rq "\(rq . \} .\} -.TH GAWK 1 "Aug 13 2017" "Free Software Foundation" "Utility Commands" +.TH GAWK 1 "Oct 01 2017" "Free Software Foundation" "Utility Commands" .SH NAME gawk \- pattern scanning and processing language .SH SYNOPSIS @@ -36,7 +36,7 @@ file .\|.\|. .I Gawk is the \*(GN Project's implementation of the \*(AK programming language. It conforms to the definition of the language in -the \*(PX 1003.1 Standard. +the \*(PX 1003.1 standard. This version in turn is based on the description in .IR "The AWK Programming Language" , by Aho, Kernighan, and Weinberger. @@ -44,14 +44,14 @@ by Aho, Kernighan, and Weinberger. provides the additional features found in the current version of Brian Kernighan's .I awk -and a number of \*(GN-specific extensions. +and numerous \*(GN-specific extensions. .PP The command line consists of options to .I gawk itself, the \*(AK program text (if not supplied via the .B \-f or -.B \-\^\-file +.B \-i options), and values to be made available in the .B ARGC @@ -249,7 +249,7 @@ as \*(AK program source code. This option allows the easy intermixing of library functions (used via the .B \-f and -.B \-\^\-file +.B \-i options) with source code entered on the command line. It is intended primarily for medium to large \*(AK programs used in shell scripts. @@ -316,7 +316,9 @@ the main program source. .TP .PD .BI \-\^\-load " lib" -Load a shared library +Load a +.I gawk +extension from the shared library .IR lib . This searches for the library using the .B AWKLIBPATH @@ -351,6 +353,9 @@ Force arbitrary precision arithmetic on numbers. This option has no effect if .I gawk is not compiled to use the GNU MPFR and MP libraries. +(In such a case, +.I gawk +issues a warning.) .TP .PD 0 .B \-n @@ -365,7 +370,7 @@ Recognize octal and hexadecimal values in input data. .TP .PD .B \-\^\-use\-lc\-numeric -This forces +Force .I gawk to use the locale's decimal point character when parsing input data. Although the POSIX standard requires this behavior, and @@ -506,7 +511,7 @@ default optimizations upon the internal representation of the program. .TP .PD .BI \-\^\-sandbox -Runs +Run .I gawk in sandbox mode, disabling the .B system() @@ -516,8 +521,8 @@ output redirection with .BR print " and " printf , and loading dynamic extensions. Command execution (through pipelines) is also disabled. -This effectively blocks a script from accessing local resources -(except for the files specified on the command line). +This effectively blocks a script from accessing local resources, +except for the files specified on the command line. .TP .PD 0 .B \-t @@ -558,14 +563,18 @@ In normal operation, as long as program text has been supplied, unknown options are passed on to the \*(AK program in the .B ARGV array for processing. This is particularly useful for running \*(AK -programs via the \*(lq#!\*(rq executable interpreter mechanism. +programs via the +.B #! +executable interpreter mechanism. .PP For \*(PX compatibility, the .B \-W option may be used, followed by the name of a long option. .SH AWK PROGRAM EXECUTION .PP -An \*(AK program consists of a sequence of pattern-action statements +An \*(AK program consists of a sequence of +optional directives, +pattern-action statements, and optional function definitions. .RS .PP @@ -609,7 +618,7 @@ option. .PP Lines beginning with .B @load -may be used to load shared libraries into your program. This is equivalent +may be used to load extension functions into your program. This is equivalent to using the .B \-l option. @@ -659,7 +668,7 @@ and then proceeds to read each file named in the .B ARGV array (up to -.BR ARGV[ARGC] ). +.BR ARGV[ARGC\-1] ). If there are no files named on the command line, .I gawk reads the standard input. @@ -739,7 +748,11 @@ treating directories on the command line as a fatal error. \*(AK variables are dynamic; they come into existence when they are first used. Their values are either floating-point numbers or strings, or both, -depending upon how they are used. \*(AK also has one dimensional +depending upon how they are used. +Additionally, +.I gawk +allows variables to have regular-expression type. +\*(AK also has one dimensional arrays; arrays with multiple dimensions may be simulated. .I Gawk provides true arrays of arrays; see @@ -764,7 +777,7 @@ value is used for separating records. If .B RS is set to the null string, then records are separated by -blank lines. +empty lines. When .B RS is set to the null string, the newline character always acts as @@ -948,7 +961,7 @@ or during a .BR close() , then .B ERRNO -will contain +is set to a string describing the error. The value is subject to translation in non-English locales. If the string in @@ -1114,6 +1127,12 @@ operator to test for these elements. The following elements are guaranteed to be available: .RS .TP \w'\fBPROCINFO["strftime"]\fR'u+1n +\fBPROCINFO["argv"]\fP +The command line arguments as received by +.I gawk +at the C-language level. +The subscripts start from zero. +.TP \fBPROCINFO["egid"]\fP The value of the .IR getegid (2) @@ -1268,7 +1287,7 @@ If an I/O error that may be retried occurs when reading data from .IR input , and this array entry exists, then .B getline -will return \-2 instead of following the default behavior of returning \-1 +returns \-2 instead of following the default behavior of returning \-1 and configuring .IR input to return no further data. @@ -1377,7 +1396,7 @@ print foo # prints 4 .in -5m .sp The -.B isarray() +.B typeof() function may be used to test if an element in .B SYMTAB is an array. @@ -1412,7 +1431,7 @@ x[i, j, k] = "hello, world\en" .ft R .RE .PP -assigns the string \fB"hello, world\en"\fR to the element of the array +assigns the string \fB"hello,\ world\en"\fR to the element of the array .B x which is indexed by the string \fB"A\e034B\e034C"\fR. All arrays in \*(AK are associative, i.e., indexed by string values. @@ -1482,15 +1501,16 @@ statement. .SS Variable Typing And Conversion .PP Variables and fields -may be (floating point) numbers, or strings, or both. How the +may be (floating point) numbers, or strings, or both. +They may also be regular expressions. How the value of a variable is interpreted depends upon its context. If used in a numeric expression, it will be treated as a number; if used as a string it will be treated as a string. .PP -To force a variable to be treated as a number, add 0 to it; to force it +To force a variable to be treated as a number, add zero to it; to force it to be treated as a string, concatenate it with the null string. .PP -Uninitialized variables have the numeric value 0 and the string value "" +Uninitialized variables have the numeric value zero and the string value "" (the null, or empty, string). .PP When a string must be converted to a number, the conversion is accomplished @@ -1620,17 +1640,35 @@ E.g., \fB"\e033"\fR is the \s-1ASCII\s+1 \s-1ESC\s+1 (escape) character. The literal character .IR c\^ . .PP -The escape sequences may also be used inside constant regular expressions -(e.g., -.B "/[\ \et\ef\en\er\ev]/" -matches whitespace characters). -.PP In compatibility mode, the characters represented by octal and hexadecimal escape sequences are treated literally when used in regular expression constants. Thus, .B /a\e52b/ is equivalent to .BR /a\e*b/ . +.SS "Regexp Constants" +A regular expression constant is a sequence of characters enclosed +between forward slashes (like +.BR /value/ ). +Regular expression matching is described more fully below; see +.BR "Regular Expressions" . +.PP +The escape sequences described earlier may also be used inside +constant regular expressions +(e.g., +.B "/[\ \et\ef\en\er\ev]/" +matches whitespace characters). +.TP +.I Gawk +provides +.I "strongly typed" +regular expression constants. These are written with a leading +.B @ +symbol (like so: +.BR @/value/ ). +Such constants may be assigned to scalars (variables, array elements) +and passed to user-defined functions. Variables that have been so +assigned have regular expression type. .SH PATTERNS AND ACTIONS \*(AK is a line-oriented language. The pattern comes first, and then the action. Action statements are enclosed in @@ -1638,8 +1676,8 @@ action. Action statements are enclosed in and .BR } . Either the pattern may be missing, or the action may be missing, but, -of course, not both. If the pattern is missing, the action is -executed for every single record of input. +of course, not both. If the pattern is missing, the action +executes for every single record of input. A missing action is equivalent to .RS .PP @@ -1652,7 +1690,7 @@ Comments begin with the .B # character, and continue until the end of the line. -Blank lines may be used to separate statements. +Empty lines may be used to separate statements. Normally, a statement ends with a newline, however, this is not the case for lines ending in a comma, @@ -1731,7 +1769,7 @@ Inside the .B BEGINFILE rule, the value of .B ERRNO -will be the empty string if the file was opened successfully. +is the empty string if the file was opened successfully. Otherwise, there is some problem with the file and the code should use .B nextfile @@ -2114,7 +2152,7 @@ Piped I/O for and .BR printf . .TP -.B "< > <= >= != ==" +.B "< > <= >= == !=" The regular relational operators. .TP .B "~ !~" @@ -2193,11 +2231,11 @@ The input/output statements are as follows: .PP .TP "\w'\fBprintf \fIfmt, expr-list\fR'u+1n" \fBclose(\fIfile \fR[\fB, \fIhow\fR]\fB)\fR -Close file, pipe or co-process. +Close file, pipe or coprocess. The optional .I how should only be used when closing one end of a -two-way pipe to a co-process. +two-way pipe to a coprocess. It must be a string value, either \fB"to"\fR or \fB"from"\fR. .TP @@ -2247,14 +2285,14 @@ as above, and \fIcommand\fB |& getline \fR[\fIvar\fR] Run .I command -as a co-process +as a coprocess piping the output either into .B $0 or .IR var , as above, and .BR RT . -Co-processes are a +Coprocesses are a .I gawk extension. .RI ( command @@ -2285,6 +2323,8 @@ is reset to 1, and processing starts over with the first pattern in the Upon reaching the end of the input data, .I gawk executes any +.B ENDFILE +and .B END rule(s). .TP @@ -2321,7 +2361,7 @@ Execute the command .IR cmd-line , and return the exit status. (This may not be available on non-\*(PX systems.) -See the manual for the full details on the exit status. +See \*(EP for the full details on the exit status. .TP \&\fBfflush(\fR[\fIfile\^\fR]\fB)\fR Flush any buffers associated with the open output file or pipe @@ -2345,19 +2385,19 @@ Appends output to the Writes on a pipe. .TP .BI "print .\|.\|. |&" " command" -Sends data to a co-process or socket. +Sends data to a coprocess or socket. (See also the subsection .BR "Special File Names" , below.) .PP The .B getline -command returns 1 on success, 0 on end of file, and \-1 on an error. +command returns 1 on success, zero on end of file, and \-1 on an error. If the .IR errno (3) value indicates that the I/O operation may be retried, and \fBPROCINFO["\fIinput\^\fP", "RETRY"]\fR -is set, then \-2 will be returned instead of \-1, and further calls to +is set, then \-2 is returned instead of \-1, and further calls to .B getline may be attempted. Upon an error, @@ -2366,7 +2406,7 @@ is set to a string describing the problem. .PP .BR NOTE : Failure in opening a two-way socket results in a non-fatal error being -returned to the calling function. If using a pipe, co-process, or socket to +returned to the calling function. If using a pipe, coprocess, or socket to .BR getline , or from .B print @@ -2377,7 +2417,7 @@ within a loop, you use .B close() to create new instances of the command or socket. -\*(AK does not automatically close pipes, sockets, or co-processes when +\*(AK does not automatically close pipes, sockets, or coprocesses when they return EOF. .SS The \fIprintf\fP\^ Statement .PP @@ -2525,7 +2565,7 @@ trailing zeros are not removed from the result. .B 0 A leading .B 0 -(zero) acts as a flag, that indicates output should be +(zero) acts as a flag, indicating that output should be padded with zeroes instead of spaces. This applies only to the numeric output formats. This flag only has an effect when the field width is wider than the @@ -2652,7 +2692,7 @@ print "You blew it!" | "cat 1>&2" .PP The following special filenames may be used with the .B |& -co-process operator for creating TCP/IP network connections: +coprocess operator for creating TCP/IP network connections: .TP .PD 0 .BI /inet/tcp/ lport / rhost / rport @@ -2737,7 +2777,7 @@ The natural logarithm function. .B rand() Return a random number .IR N , -between 0 and 1, +between zero and one, such that 0 \(<= \fIN\fP < 1. .TP .BI sin( expr ) @@ -2817,9 +2857,9 @@ The original values are lost; thus provide a second array if you wish to preserve the original. The purpose of the optional string .I how -is the same as described in -.B asort() -above. +is the same as described +previously for +.BR asort() . .TP \fBgensub(\fIr\fB, \fIs\fB, \fIh \fR[\fB, \fIt\fR]\fB)\fR Search the target string @@ -2889,8 +2929,7 @@ to get a literal .BR & . (This must be typed as \fB"\e\e&"\fP; see \*(EP -for a fuller discussion of the rules for -.BR & 's +for a fuller discussion of the rules for ampersands and backslashes in the replacement text of .BR sub() , .BR gsub() , @@ -2902,7 +2941,7 @@ Return the index of the string .I t in the string .IR s , -or 0 if +or zero if .I t is not present. (This implies that character indices start at one.) @@ -2926,7 +2965,7 @@ Return the position in .I s where the regular expression .I r -occurs, or 0 if +occurs, or zero if .I r is not present, and set the values of .B RSTART @@ -2949,7 +2988,7 @@ are filled with the portions of that match the corresponding parenthesized subexpression in .IR r . -The 0'th element of +The zero'th element of .I a contains the portion of @@ -3071,6 +3110,7 @@ Otherwise, assume it is a decimal number. Just like .BR gsub() , but replace only the first matching substring. +Return either zero or one. .TP \fBsubstr(\fIs\fB, \fIi \fR[\fB, \fIn\fR]\fB)\fR Return the at most @@ -3143,7 +3183,9 @@ If is present and is non-zero or non-null, the time is assumed to be in the UTC time zone; otherwise, the time is assumed to be in the local time zone. -If the daylight saving flag is positive, +If the +.I DST +daylight saving flag is positive, the time is assumed to be daylight saving time; if zero, the time is assumed to be standard time; and if negative (the default), @@ -3240,6 +3282,7 @@ The following function is for use with multidimensional arrays. Return true if .I x is an array, false otherwise. +This function is deprecated. .PP You can tell the type of any variable or array element with the following function: @@ -3343,7 +3386,7 @@ Functions in \*(AK are defined as follows: \fBfunction \fIname\fB(\fIparameter list\fB) { \fIstatements \fB}\fR .RE .PP -Functions are executed when they are called from within expressions +Functions execute when they are called from within expressions in either patterns or actions. Actual parameters supplied in the function call are used to instantiate the formal parameters declared in the function. Arrays are passed by reference, other variables are passed by value. @@ -3576,7 +3619,7 @@ in .I gawk also returns its current seed. .PP -Other new features are: +Other features are: The use of multiple .B \-f options (from MKS @@ -3672,16 +3715,12 @@ mechanism). The .B \ex escape sequence. -(Disabled with -.BR \-\^\-posix .) .TP \(bu The ability to continue lines after .B ? and .BR : . -(Disabled with -.BR \-\^\-posix .) .TP \(bu Octal and hexadecimal constants in AWK programs. @@ -3693,6 +3732,8 @@ The .BR BINMODE , .BR ERRNO , .BR LINT , +.BR PREC , +.BR ROUNDMODE , .B RT and .B TEXTDOMAIN @@ -3715,8 +3756,11 @@ variable and field splitting based on field values. .TP \(bu The +.BR FUNCTAB , +.BR SYMTAB , +and .B PROCINFO -array is not available. +arrays are not available. .\" I/O stuff .TP \(bu @@ -3730,7 +3774,7 @@ The special file names available for I/O redirection are not recognized. \(bu The .B |& -operator for creating co-processes. +operator for creating coprocesses. .TP \(bu The @@ -3810,6 +3854,12 @@ functions. .TP \(bu Localizable strings. +.TP +\(bu +Non-fatal I/O. +.TP +\(bu +Retryable I/O. .PP The \*(AK book does not define the return value of the .B close() @@ -3823,7 +3873,7 @@ or when closing an output file or pipe, respectively. It returns the process's exit status when closing an input pipe. The return value is \-1 if the named file, pipe -or co-process was not opened with a redirection. +or coprocess was not opened with a redirection. .PP When .I gawk @@ -3883,7 +3933,9 @@ searches when looking for files named via the .B \-i and .B \-\^\-include -options. If the initial search fails, the path is searched again after +options, and the +.B @include +directive. If the initial search fails, the path is searched again after appending .B \&.awk to the filename. @@ -4047,6 +4099,8 @@ it remains only for backwards compatibility. .IR getgid (2), .IR getegid (2), .IR getgroups (2), +.IR printf (3), +.IR strftime (3), .IR usleep (3) .PP .IR "The AWK Programming Language" , @@ -4058,7 +4112,12 @@ Edition 4.2, shipped with the .I gawk source. The current version of this document is available online at -.BR http://www.gnu.org/software/gawk/manual . +.BR https://www.gnu.org/software/gawk/manual . +.PP +The GNU +.B gettext +documentation, available online at +.BR https://www.gnu.org/software/gettext . .SH EXAMPLES .nf Print and sort the login names of all users: diff --git a/doc/gawk.info b/doc/gawk.info index 5b757a51..94b88699 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -5441,7 +5441,7 @@ being used: else if (PROCINFO["FS"] == "FIELDWIDTHS") FIXED-WIDTH FIELD SPLITTING ... else if (PROCINFO["FS"] == "FPAT") - CONTENT-BASED FIELD SPLITTING + CONTENT-BASED FIELD SPLITTING ... else API INPUT PARSER FIELD SPLITTING ... (advanced feature) @@ -9786,7 +9786,8 @@ tasks that would otherwise be difficult or impossible to perform: 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://sourceforge.net/projects/gawkextlib).) + 'gawkextlib' project + (https://sourceforge.net/projects/gawkextlib).) 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 @@ -10997,6 +10998,19 @@ they are not special: Set a timeout for reading from input redirection INPUT_NAME. *Note Read Timeout:: for more information. + 'PROCINFO["IINPUT_NAME", "RETRY"]' + If an I/O error that may be retried occurs when reading data + from INPUT_NAME, and this array entry exists, then 'getline' + returns -2 instead of following the default behavior of + returning -1 and configuring INPUT_NAME to return no further + data. An I/O error that may be retried is one where 'errno' + has the value 'EAGAIN', 'EWOULDBLOCK', 'EINTR', or + 'ETIMEDOUT'. This may be useful in conjunction with + '\fBPROCINFO["INPUT_NAME", "READ_TIMEOUT"]' or situations + where a file descriptor has been configured to behave in a + non-blocking fashion. *Note Retrying Input:: for more + information. + 'PROCINFO["sorted_in"]' If this element exists in 'PROCINFO', its value controls the order in which array indices will be processed by 'for (INDX @@ -13455,9 +13469,9 @@ enclosed in square brackets ([ ]): preceding year 1 and year -1 preceding year 0. If UTC-FLAG is present and is either nonzero or non-null, the time is assumed to be in the UTC time zone; otherwise, the time is assumed to be in - the local time zone. If the daylight-savings flag is positive, the - time is assumed to be daylight savings time; if zero, the time is - assumed to be standard time; and if negative (the default), + the local time zone. If the DST daylight-savings flag is positive, + the time is assumed to be daylight savings time; if zero, the time + is assumed to be standard time; and if negative (the default), 'mktime()' attempts to determine whether daylight savings time is in effect for the specified time. @@ -14776,7 +14790,7 @@ pointers," which are a mechanism for calling a function chosen at runtime. One of the most well-known uses of this ability is the C 'qsort()' function, which sorts an array using the famous "quicksort" algorithm (see the Wikipedia article -(http://en.wikipedia.org/wiki/Quicksort) for more information). To use +(https://en.wikipedia.org/wiki/Quicksort) for more information). To use this function, you supply a pointer to a comparison function. This mechanism allows you to sort arbitrary data in an arbitrary fashion. @@ -22665,12 +22679,12 @@ material here: "Stability" From the Wikipedia article on numerical stability - (http://en.wikipedia.org/wiki/Numerical_stability): "Calculations + (https://en.wikipedia.org/wiki/Numerical_stability): "Calculations that can be proven not to magnify approximation errors are called "numerically stable"." See the Wikipedia article on accuracy and precision -(http://en.wikipedia.org/wiki/Accuracy_and_precision) for more +(https://en.wikipedia.org/wiki/Accuracy_and_precision) for more information on some of those terms. On modern systems, floating-point hardware uses the representation @@ -22709,7 +22723,7 @@ File: gawk.info, Node: MPFR features, Next: FP Math Caution, Prev: Math Defin 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 so, and the '-M' command-line option is supplied, 'gawk' -uses the GNU MPFR (http://www.mpfr.org) and GNU MP (http://gmplib.org) +uses the GNU MPFR (http://www.mpfr.org) and GNU MP (https://gmplib.org) (GMP) libraries for arbitrary-precision arithmetic on numbers. You can see if MPFR support is available like so: @@ -24088,13 +24102,13 @@ code would use them: 'static inline awk_value_t *' 'make_number_mpz(void *mpz, awk_value_t *result);' This function creates a GMP number value in 'result'. The 'mpz' - must be from a call to 'get_mpz_ptr()' (and thus be or real + must be from a call to 'get_mpz_ptr()' (and thus be of real underlying type 'mpz_ptr'). 'gawk' takes ownership of this memory. 'static inline awk_value_t *' 'make_number_mpfr(void *mpfr, awk_value_t *result);' This function creates an MPFR number value in 'result'. The 'mpfr' - must be from a call to 'get_mpfr_ptr()'. (and thus be or real + must be from a call to 'get_mpfr_ptr()'. (and thus be of real underlying type 'mpfr_ptr') 'gawk' takes ownership of this memory. 'static inline awk_value_t *' @@ -27153,7 +27167,7 @@ File: gawk.info, Node: gawkextlib, Next: Extension summary, Prev: Extension S 16.8 The 'gawkextlib' Project ============================= -The 'gawkextlib' (http://sourceforge.net/projects/gawkextlib/) project +The 'gawkextlib' (https://sourceforge.net/projects/gawkextlib/) project provides a number of 'gawk' extensions, including one for processing XML files. This is the evolution of the original 'xgawk' (XML 'gawk') project. @@ -27176,15 +27190,15 @@ project. * Select extension * XML parser extension, using the Expat - (http://expat.sourceforge.net) XML parsing library + (https://expat.sourceforge.net) XML parsing library You can check out the code for the 'gawkextlib' project using the Git -(http://git-scm.com) distributed source code control system. The +(https://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 - You will need to have the Expat (http://expat.sourceforge.net) XML + You will need to have the Expat (https://expat.sourceforge.net) XML parser library installed in order to build and use the XML extension. In addition, you must have the GNU Autotools installed (Autoconf @@ -27201,7 +27215,7 @@ follows. First, build and install 'gawk': make && make check Build and check that all is OK make install Install gawk - Next, go to <http://sourceforge.net/projects/gawkextlib/files> to + Next, go to <https://sourceforge.net/projects/gawkextlib/files> to download 'gawkextlib' and any extensions that you would like to build. The 'README' file at that site explains how to build the code. If you installed 'gawk' in a non-standard location, you will need to specify @@ -27510,7 +27524,7 @@ many years were finally added to POSIX. They are: permitted by the POSIX standard. The 2008 POSIX standard can be found online at -<http://www.opengroup.org/onlinepubs/9699919799/>. +<http://pubs.opengroup.org/onlinepubs/9699919799/>. File: gawk.info, Node: BTL, Next: POSIX/GNU, Prev: POSIX, Up: Language History @@ -29486,16 +29500,25 @@ B.4.1 Submitting Bug Reports ---------------------------- Before reporting a bug, make sure you have really found a genuine bug. -Carefully reread the documentation and see if it says you can do 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 'awk' program and input data file that -reproduce the problem. Then send us the program and data file, some -idea of what kind of Unix system you're using, the compiler you used to -compile 'gawk', and the exact results 'gawk' gave you. Also say what -you expected to occur; this helps us decide whether the problem is +First, verify that you have the latest version of 'gawk'. Many bugs +(usually subtle ones) are fixed at each release, and if yours is out of +date, the problem may already have been solved. + + Second, please see if setting the environment variable 'LC_ALL' to +'LC_ALL=C' causes things to behave as you expect. If so, it's a locale +issue, and may or may not really be a bug. + + Third, carefully reread the documentation and see if it says you can +do 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! + + Finally, before reporting a bug or trying to fix it yourself, try to +isolate it to the smallest possible 'awk' program and input data file +that reproduce the problem. Then send us the program and data file, +some idea of what kind of Unix system you're using, the compiler you +used to compile 'gawk', and the exact results 'gawk' gave you. Also say +what you expected to occur; this helps us decide whether the problem is really in the documentation. Make sure to include the version number of 'gawk' you are using. You @@ -29610,7 +29633,7 @@ Unix 'awk' git clone git://github.com/onetrueawk/awk bwkawk - This command creates a copy of the Git (http://git-scm.com) + This command creates a copy of the Git (https://git-scm.com) repository in a directory named 'bwkawk'. If you leave that argument off the 'git' command line, the repository copy is created in a directory named 'awk'. @@ -29645,6 +29668,11 @@ Unix 'awk' *Note Common Extensions:: for a list of extensions in 'mawk' that are not in POSIX 'awk'. +'mawk' 2.0 + In 2016, Michael Brennan resumed 'mawk' development. His + development snapshots are available via Git from the project's + GitHub page (https://github.com/mikebrennan000/mawk-2). + 'awka' Written by Andrew Sumner, 'awka' translates 'awk' programs into C, compiles them, and links them with a library of functions that @@ -29654,7 +29682,7 @@ Unix 'awk' The 'awk' translator is released under the GPL, and the library is under the LGPL. - To get 'awka', go to <http://sourceforge.net/projects/awka>. + To get 'awka', go to <https://sourceforge.net/projects/awka>. The project seems to be frozen; no new code changes have been made since approximately 2001. @@ -29675,7 +29703,7 @@ BusyBox 'awk' building it, be careful not to do 'make install' as it will overwrite copies of other applications in your '/usr/local/bin'. For more information, see the project's home page - (http://busybox.net). + (https://busybox.net). The OpenSolaris POSIX 'awk' The versions of 'awk' in '/usr/xpg4/bin' and '/usr/xpg6/bin' on @@ -29689,7 +29717,7 @@ The OpenSolaris POSIX 'awk' The source code used to be available from the OpenSolaris website. However, that project was ended and the website shut down. Fortunately, the Illumos project - (http://wiki.illumos.org/display/illumos/illumos+Home) makes this + (https://wiki.illumos.org/display/illumos/illumos+Home) makes this implementation available. You can view the files one at a time from <https://github.com/joyent/illumos-joyent/blob/master/usr/src/cmd/awk_xpg4>. @@ -29699,7 +29727,7 @@ The OpenSolaris POSIX 'awk' a full interpreter, although because it uses Java facilities for I/O and for regexp matching, the language it supports is different from POSIX 'awk'. More information is available on the project's - home page (http://jawk.sourceforge.net). + home page (https://jawk.sourceforge.net). Libmawk This is an embeddable 'awk' interpreter derived from 'mawk'. For @@ -29713,7 +29741,7 @@ Libmawk QSE 'awk' This is an embeddable 'awk' interpreter. For more information, see - <http://code.google.com/p/qse/> and <http://awk.info/?tools/qse>. + <https://code.google.com/p/qse/> and <http://awk.info/?tools/qse>. 'QTawk' This is an independent implementation of 'awk' distributed under @@ -29730,7 +29758,7 @@ QSE 'awk' Other versions See also the "Versions and implementations" section of the Wikipedia article - (http://en.wikipedia.org/wiki/Awk_language#Versions_and_implementations) + (https://en.wikipedia.org/wiki/Awk_language#Versions_and_implementations) on 'awk' for information on additional versions. @@ -29846,7 +29874,7 @@ versions of 'gawk'. changes, you will probably wish to work with the development version. To do so, you will need to access the 'gawk' source code repository. The code is maintained using the Git distributed version control system -(http://git-scm.com). You will need to install it if your system +(https://git-scm.com). You will need to install it if your system doesn't have it. Once you have done so, use the command: git clone git://git.savannah.gnu.org/gawk.git @@ -31213,7 +31241,7 @@ ISO POSIX become both American national and ISO international standards simultaneously. This Info file refers to Standard C as "ISO C" throughout. See the ISO website - (http://www.iso.org/iso/home/about.htm) for more information about + (https://www.iso.org/iso/home/about.htm) for more information about the name of the organization and its language-independent three-letter acronym. @@ -31332,7 +31360,7 @@ POSIX these standards. The main standard of interest for 'awk' users is 'IEEE Standard for Information Technology, Standard 1003.1-2008'. The 2008 POSIX standard can be found online at - <http://www.opengroup.org/onlinepubs/9699919799/>. + <http://pubs.opengroup.org/onlinepubs/9699919799/>. Precedence The order in which operations are performed when operators are used @@ -31505,7 +31533,7 @@ Unix system. There are many commercial versions of Unix, as well as several work-alike systems whose source code is freely available (such as GNU/Linux, NetBSD (http://www.netbsd.org), FreeBSD - (http://www.freebsd.org), and OpenBSD (http://www.openbsd.org)). + (https://www.freebsd.org), and OpenBSD (http://www.openbsd.org)). UTC The accepted abbreviation for "Universal Coordinated Time." This @@ -33234,7 +33262,7 @@ Index * awk, versions of, See Also Brian Kernighan's awk: BTL. (line 6) * awk, versions of, See Also Brian Kernighan's awk <1>: Other Versions. (line 13) -* awka compiler for awk: Other Versions. (line 68) +* awka compiler for awk: Other Versions. (line 73) * AWKLIBPATH environment variable: AWKLIBPATH Variable. (line 6) * AWKPATH environment variable: AWKPATH Variable. (line 6) * AWKPATH environment variable <1>: PC Using. (line 9) @@ -33293,7 +33321,7 @@ Index (line 57) * backtrace debugger command: Execution Stack. (line 13) * Beebe, Nelson H.F.: Acknowledgments. (line 60) -* Beebe, Nelson H.F. <1>: Other Versions. (line 82) +* Beebe, Nelson H.F. <1>: Other Versions. (line 87) * BEGIN pattern: Field Separators. (line 44) * BEGIN pattern <1>: BEGIN/END. (line 6) * BEGIN pattern <2>: Using BEGIN/END. (line 6) @@ -33415,11 +33443,11 @@ Index * buffers, flushing <1>: I/O Functions. (line 166) * buffers, operators for: GNU Regexp Operators. (line 51) -* bug reports, email address, bug-gawk@gnu.org: Bug address. (line 22) -* bug-gawk@gnu.org bug reporting address: Bug address. (line 22) +* bug reports, email address, bug-gawk@gnu.org: Bug address. (line 31) +* bug-gawk@gnu.org bug reporting address: Bug address. (line 31) * built-in functions: Functions. (line 6) * built-in functions, evaluation order: Calling Built-in. (line 30) -* BusyBox Awk: Other Versions. (line 92) +* BusyBox Awk: Other Versions. (line 97) * c.e., See common extensions: Conventions. (line 51) * call by reference: Pass By Value/Reference. (line 44) @@ -33629,7 +33657,7 @@ Index * dark corner, field separators: Full Line Fields. (line 22) * dark corner, FILENAME variable: Getline Notes. (line 19) * dark corner, FILENAME variable <1>: Auto-set. (line 108) -* dark corner, FNR/NR variables: Auto-set. (line 377) +* dark corner, FNR/NR variables: Auto-set. (line 390) * dark corner, format-control characters: Control Letters. (line 18) * dark corner, format-control characters <1>: Control Letters. (line 93) @@ -33863,7 +33891,7 @@ Index (line 6) * differences in awk and gawk, RS/RT variables: gawk split records. (line 58) -* differences in awk and gawk, RT variable: Auto-set. (line 315) +* differences in awk and gawk, RT variable: Auto-set. (line 328) * differences in awk and gawk, single-character fields: Single Character Fields. (line 6) * differences in awk and gawk, split() function: String Functions. @@ -33871,7 +33899,7 @@ Index * differences in awk and gawk, strings: Scalar Constants. (line 20) * differences in awk and gawk, strings, storing: gawk split records. (line 76) -* differences in awk and gawk, SYMTAB variable: Auto-set. (line 319) +* differences in awk and gawk, SYMTAB variable: Auto-set. (line 332) * differences in awk and gawk, TEXTDOMAIN variable: User-modified. (line 155) * differences in awk and gawk, trunc-mod operation: Arithmetic Ops. @@ -33924,7 +33952,7 @@ Index * elements of arrays: Reference to Elements. (line 6) * email address for bug reports, bug-gawk@gnu.org: Bug address. - (line 22) + (line 31) * empty array elements: Reference to Elements. (line 18) * empty pattern: Empty. (line 6) @@ -34186,7 +34214,7 @@ Index (line 12) * FNR variable: Records. (line 6) * FNR variable <1>: Auto-set. (line 118) -* FNR variable, changing: Auto-set. (line 377) +* FNR variable, changing: Auto-set. (line 390) * for statement: For Statement. (line 6) * for statement, looping over arrays: Scanning an Array. (line 20) * fork() extension function: Extension Sample Fork. @@ -34366,13 +34394,13 @@ Index * gawk, regular expressions, precedence: Regexp Operators. (line 161) * gawk, RT variable in: awk split records. (line 124) * gawk, RT variable in <1>: Multiple Line. (line 130) -* gawk, RT variable in <2>: Auto-set. (line 315) +* gawk, RT variable in <2>: Auto-set. (line 328) * gawk, See Also awk: Preface. (line 34) * gawk, source code, obtaining: Getting. (line 6) * gawk, splitting fields and: Testing field creation. (line 6) * gawk, string-translation functions: I18N Functions. (line 6) -* gawk, SYMTAB array in: Auto-set. (line 319) +* gawk, SYMTAB array in: Auto-set. (line 332) * gawk, TEXTDOMAIN variable in: User-modified. (line 155) * gawk, timestamps: Time Functions. (line 6) * gawk, uses for: Preface. (line 34) @@ -34422,7 +34450,7 @@ Index * getline from a file: Getline/File. (line 6) * getline into a variable: Getline/Variable. (line 6) * getline statement, BEGINFILE/ENDFILE patterns and: BEGINFILE/ENDFILE. - (line 53) + (line 54) * getlocaltime() user-defined function: Getlocaltime Function. (line 16) * getopt() function (C library): Getopt Function. (line 15) @@ -34520,8 +34548,8 @@ Index (line 53) * IGNORECASE variable, with ~ and !~ operators: Case-sensitivity. (line 26) -* Illumos: Other Versions. (line 109) -* Illumos, POSIX-compliant awk: Other Versions. (line 109) +* Illumos: Other Versions. (line 114) +* Illumos, POSIX-compliant awk: Other Versions. (line 114) * implementation issues, gawk: Notes. (line 6) * implementation issues, gawk, debugging: Compatibility Mode. (line 6) * implementation issues, gawk, limits: Getline Notes. (line 14) @@ -34611,9 +34639,9 @@ Index * Jacobs, Andrew: Passwd Functions. (line 90) * Jaegermann, Michal: Acknowledgments. (line 60) * Jaegermann, Michal <1>: Contributors. (line 46) -* Java implementation of awk: Other Versions. (line 117) +* Java implementation of awk: Other Versions. (line 122) * Java programming language: Glossary. (line 468) -* jawk: Other Versions. (line 117) +* jawk: Other Versions. (line 122) * Jedi knights: Undocumented. (line 6) * Johansen, Chris: Signature Program. (line 25) * join() user-defined function: Join Function. (line 18) @@ -34665,7 +34693,7 @@ Index * length of string: String Functions. (line 170) * Lesser General Public License (LGPL): Glossary. (line 491) * LGPL (Lesser General Public License): Glossary. (line 491) -* libmawk: Other Versions. (line 125) +* libmawk: Other Versions. (line 130) * 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. @@ -34820,7 +34848,7 @@ Index * next statement <1>: Next Statement. (line 6) * next statement, BEGIN/END patterns and: I/O And BEGIN/END. (line 36) * next statement, BEGINFILE/ENDFILE patterns and: BEGINFILE/ENDFILE. - (line 49) + (line 50) * next statement, user-defined functions and: Next Statement. (line 44) * nextfile statement: Nextfile Statement. (line 6) * nextfile statement, BEGIN/END patterns and: I/O And BEGIN/END. @@ -34842,7 +34870,7 @@ Index * not Boolean-logic operator: Boolean Ops. (line 6) * NR variable: Records. (line 6) * NR variable <1>: Auto-set. (line 143) -* NR variable, changing: Auto-set. (line 377) +* NR variable, changing: Auto-set. (line 390) * null strings: awk split records. (line 114) * null strings <1>: Regexp Field Splitting. (line 43) @@ -34888,7 +34916,7 @@ Index * OFS variable <1>: Output Separators. (line 6) * OFS variable <2>: User-modified. (line 116) * OpenBSD: Glossary. (line 748) -* OpenSolaris: Other Versions. (line 100) +* OpenSolaris: Other Versions. (line 105) * operating systems, BSD-based: Manual History. (line 28) * operating systems, PC, gawk on: PC Using. (line 6) * operating systems, PC, gawk on, installing: PC Installation. @@ -34978,8 +35006,8 @@ Index * 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 82) -* pawk, awk-like facilities for Python: Other Versions. (line 129) + (line 87) +* pawk, awk-like facilities for Python: Other Versions. (line 134) * PC operating systems, gawk on: PC Using. (line 6) * PC operating systems, gawk on, installing: PC Installation. (line 6) * percent sign (%), % operator: Precedence. (line 54) @@ -35174,13 +35202,13 @@ Index * pwcat program: Passwd Functions. (line 23) * q debugger command (alias for quit): Miscellaneous Debugger Commands. (line 102) -* QSE awk: Other Versions. (line 135) +* QSE awk: Other Versions. (line 140) * Quanstrom, Erik: Alarm Program. (line 8) * question mark (?), ?: operator: Precedence. (line 91) * question mark (?), regexp operator: Regexp Operators. (line 111) * question mark (?), regexp operator <1>: GNU Regexp Operators. (line 62) -* QuikTrim Awk: Other Versions. (line 139) +* QuikTrim Awk: Other Versions. (line 144) * quit debugger command: Miscellaneous Debugger Commands. (line 102) * QUIT signal (MS-Windows): Profiling. (line 212) @@ -35308,7 +35336,7 @@ Index * right shift: Bitwise Functions. (line 54) * right shift, bitwise: Bitwise Functions. (line 32) * Ritchie, Dennis: Basic Data Typing. (line 54) -* RLENGTH variable: Auto-set. (line 302) +* RLENGTH variable: Auto-set. (line 315) * RLENGTH variable, match() function and: String Functions. (line 227) * Robbins, Arnold: Command Line Field Separator. (line 71) @@ -35334,11 +35362,11 @@ Index * RS variable <1>: User-modified. (line 136) * RS variable, multiline records and: Multiple Line. (line 17) * rshift: Bitwise Functions. (line 54) -* RSTART variable: Auto-set. (line 308) +* RSTART variable: Auto-set. (line 321) * RSTART variable, match() function and: String Functions. (line 227) * RT variable: awk split records. (line 124) * RT variable <1>: Multiple Line. (line 130) -* RT variable <2>: Auto-set. (line 315) +* RT variable <2>: Auto-set. (line 328) * Rubin, Paul: History. (line 30) * Rubin, Paul <1>: Contributors. (line 16) * rule, definition of: Getting Started. (line 21) @@ -35356,7 +35384,7 @@ Index * scanning arrays: Scanning an Array. (line 6) * scanning multidimensional arrays: Multiscanning. (line 11) * Schorr, Andrew: Acknowledgments. (line 60) -* Schorr, Andrew <1>: Auto-set. (line 347) +* Schorr, Andrew <1>: Auto-set. (line 360) * Schorr, Andrew <2>: Contributors. (line 136) * Schreiber, Bert: Acknowledgments. (line 38) * Schreiber, Rita: Acknowledgments. (line 38) @@ -35442,7 +35470,7 @@ Index * sidebar, Beware The Smoke and Mirrors!: Bitwise Functions. (line 126) * sidebar, Changing FS Does Not Affect the Fields: Full Line Fields. (line 14) -* sidebar, Changing NR and FNR: Auto-set. (line 375) +* sidebar, Changing NR and FNR: Auto-set. (line 388) * sidebar, Controlling Output Buffering with system(): I/O Functions. (line 164) * sidebar, Escape Sequences for Metacharacters: Escape Sequences. @@ -35494,7 +35522,7 @@ Index * sleep utility: Alarm Program. (line 109) * sleep() extension function: Extension Sample Time. (line 22) -* Solaris, POSIX-compliant awk: Other Versions. (line 100) +* Solaris, POSIX-compliant awk: Other Versions. (line 105) * sort array: String Functions. (line 42) * sort array indices: String Functions. (line 42) * sort function, arrays, sorting: Array Sorting Functions. @@ -35503,20 +35531,20 @@ Index * sort utility, coprocesses and: Two-way I/O. (line 66) * sorting characters in different languages: Explaining gettext. (line 94) -* source code, awka: Other Versions. (line 68) +* source code, awka: Other Versions. (line 73) * source code, Brian Kernighan's awk: Other Versions. (line 13) -* source code, BusyBox Awk: Other Versions. (line 92) +* source code, BusyBox Awk: Other Versions. (line 97) * source code, gawk: Gawk Distribution. (line 6) -* source code, Illumos awk: Other Versions. (line 109) -* source code, jawk: Other Versions. (line 117) -* source code, libmawk: Other Versions. (line 125) +* source code, Illumos awk: Other Versions. (line 114) +* source code, jawk: Other Versions. (line 122) +* source code, libmawk: Other Versions. (line 130) * source code, mawk: Other Versions. (line 48) * source code, mixing: Options. (line 117) -* source code, pawk: Other Versions. (line 82) -* source code, pawk (Python version): Other Versions. (line 129) -* source code, QSE awk: Other Versions. (line 135) -* source code, QuikTrim Awk: Other Versions. (line 139) -* source code, Solaris awk: Other Versions. (line 100) +* source code, pawk: Other Versions. (line 87) +* source code, pawk (Python version): Other Versions. (line 134) +* source code, QSE awk: Other Versions. (line 140) +* source code, QuikTrim Awk: Other Versions. (line 144) +* source code, Solaris awk: Other Versions. (line 105) * source files, search path for: Programs Exercises. (line 70) * sparse arrays: Array Intro. (line 76) * Spencer, Henry: Glossary. (line 16) @@ -35604,10 +35632,10 @@ Index * substitute in string: String Functions. (line 89) * substr: String Functions. (line 484) * substring: String Functions. (line 484) -* Sumner, Andrew: Other Versions. (line 68) +* Sumner, Andrew: Other Versions. (line 73) * supplementary groups of gawk process: Auto-set. (line 271) * switch statement: Switch Statement. (line 6) -* SYMTAB array: Auto-set. (line 319) +* SYMTAB array: Auto-set. (line 332) * syntactic ambiguity: /= operator vs. /=.../ regexp constant: Assignment Ops. (line 149) * system: I/O Functions. (line 107) @@ -35956,484 +35984,484 @@ Node: Fields with fixed data237747 Node: Splitting By Content239265 Ref: Splitting By Content-Footnote-1242915 Node: Testing field creation243078 -Node: Multiple Line244699 -Ref: Multiple Line-Footnote-1250583 -Node: Getline250762 -Node: Plain Getline253231 -Node: Getline/Variable255872 -Node: Getline/File257023 -Node: Getline/Variable/File258411 -Ref: Getline/Variable/File-Footnote-1260016 -Node: Getline/Pipe260104 -Node: Getline/Variable/Pipe262811 -Node: Getline/Coprocess263946 -Node: Getline/Variable/Coprocess265213 -Node: Getline Notes265955 -Node: Getline Summary268752 -Ref: table-getline-variants269176 -Node: Read Timeout269924 -Ref: Read Timeout-Footnote-1273830 -Node: Retrying Input273888 -Node: Command-line directories275087 -Node: Input Summary275993 -Node: Input Exercises279165 -Node: Printing279893 -Node: Print281727 -Node: Print Examples283184 -Node: Output Separators285964 -Node: OFMT287981 -Node: Printf289337 -Node: Basic Printf290122 -Node: Control Letters291696 -Node: Format Modifiers295684 -Node: Printf Examples301699 -Node: Redirection304185 -Node: Special FD311026 -Ref: Special FD-Footnote-1314194 -Node: Special Files314268 -Node: Other Inherited Files314885 -Node: Special Network315886 -Node: Special Caveats316746 -Node: Close Files And Pipes317695 -Ref: table-close-pipe-return-values324602 -Ref: Close Files And Pipes-Footnote-1325385 -Ref: Close Files And Pipes-Footnote-2325533 -Node: Nonfatal325685 -Node: Output Summary328010 -Node: Output Exercises329232 -Node: Expressions329911 -Node: Values331099 -Node: Constants331777 -Node: Scalar Constants332468 -Ref: Scalar Constants-Footnote-1333332 -Node: Nondecimal-numbers333582 -Node: Regexp Constants336583 -Node: Using Constant Regexps337109 -Node: Standard Regexp Constants337731 -Node: Strong Regexp Constants340919 -Node: Variables343877 -Node: Using Variables344534 -Node: Assignment Options346444 -Node: Conversion348317 -Node: Strings And Numbers348841 -Ref: Strings And Numbers-Footnote-1351904 -Node: Locale influences conversions352013 -Ref: table-locale-affects354771 -Node: All Operators355389 -Node: Arithmetic Ops356018 -Node: Concatenation358524 -Ref: Concatenation-Footnote-1361371 -Node: Assignment Ops361478 -Ref: table-assign-ops366469 -Node: Increment Ops367782 -Node: Truth Values and Conditions371242 -Node: Truth Values372316 -Node: Typing and Comparison373364 -Node: Variable Typing374184 -Ref: Variable Typing-Footnote-1380647 -Ref: Variable Typing-Footnote-2380719 -Node: Comparison Operators380796 -Ref: table-relational-ops381215 -Node: POSIX String Comparison384710 -Ref: POSIX String Comparison-Footnote-1386405 -Ref: POSIX String Comparison-Footnote-2386544 -Node: Boolean Ops386628 -Ref: Boolean Ops-Footnote-1391110 -Node: Conditional Exp391202 -Node: Function Calls392938 -Node: Precedence396815 -Node: Locales400474 -Node: Expressions Summary402106 -Node: Patterns and Actions404679 -Node: Pattern Overview405799 -Node: Regexp Patterns407476 -Node: Expression Patterns408018 -Node: Ranges411799 -Node: BEGIN/END414907 -Node: Using BEGIN/END415668 -Ref: Using BEGIN/END-Footnote-1418404 -Node: I/O And BEGIN/END418510 -Node: BEGINFILE/ENDFILE420824 -Node: Empty423731 -Node: Using Shell Variables424048 -Node: Action Overview426322 -Node: Statements428647 -Node: If Statement430495 -Node: While Statement431990 -Node: Do Statement434018 -Node: For Statement435166 -Node: Switch Statement438324 -Node: Break Statement440710 -Node: Continue Statement442802 -Node: Next Statement444629 -Node: Nextfile Statement447012 -Node: Exit Statement449664 -Node: Built-in Variables452067 -Node: User-modified453200 -Node: Auto-set460967 -Ref: Auto-set-Footnote-1476564 -Ref: Auto-set-Footnote-2476770 -Node: ARGC and ARGV476826 -Node: Pattern Action Summary481039 -Node: Arrays483469 -Node: Array Basics484798 -Node: Array Intro485642 -Ref: figure-array-elements487617 -Ref: Array Intro-Footnote-1490321 -Node: Reference to Elements490449 -Node: Assigning Elements492913 -Node: Array Example493404 -Node: Scanning an Array495163 -Node: Controlling Scanning498185 -Ref: Controlling Scanning-Footnote-1503584 -Node: Numeric Array Subscripts503900 -Node: Uninitialized Subscripts506084 -Node: Delete507703 -Ref: Delete-Footnote-1510455 -Node: Multidimensional510512 -Node: Multiscanning513607 -Node: Arrays of Arrays515198 -Node: Arrays Summary519965 -Node: Functions522058 -Node: Built-in523096 -Node: Calling Built-in524177 -Node: Numeric Functions526173 -Ref: Numeric Functions-Footnote-1530201 -Ref: Numeric Functions-Footnote-2530558 -Ref: Numeric Functions-Footnote-3530606 -Node: String Functions530878 -Ref: String Functions-Footnote-1554536 -Ref: String Functions-Footnote-2554664 -Ref: String Functions-Footnote-3554912 -Node: Gory Details554999 -Ref: table-sub-escapes556790 -Ref: table-sub-proposed558309 -Ref: table-posix-sub559672 -Ref: table-gensub-escapes561213 -Ref: Gory Details-Footnote-1562036 -Node: I/O Functions562190 -Ref: table-system-return-values568772 -Ref: I/O Functions-Footnote-1570752 -Ref: I/O Functions-Footnote-2570900 -Node: Time Functions571020 -Ref: Time Functions-Footnote-1581687 -Ref: Time Functions-Footnote-2581755 -Ref: Time Functions-Footnote-3581913 -Ref: Time Functions-Footnote-4582024 -Ref: Time Functions-Footnote-5582136 -Ref: Time Functions-Footnote-6582363 -Node: Bitwise Functions582629 -Ref: table-bitwise-ops583223 -Ref: Bitwise Functions-Footnote-1589256 -Ref: Bitwise Functions-Footnote-2589429 -Node: Type Functions589620 -Node: I18N Functions592537 -Node: User-defined594188 -Node: Definition Syntax594993 -Ref: Definition Syntax-Footnote-1600680 -Node: Function Example600751 -Ref: Function Example-Footnote-1603673 -Node: Function Caveats603695 -Node: Calling A Function604213 -Node: Variable Scope605171 -Node: Pass By Value/Reference608165 -Node: Return Statement611664 -Node: Dynamic Typing614643 -Node: Indirect Calls615573 -Ref: Indirect Calls-Footnote-1625824 -Node: Functions Summary625952 -Node: Library Functions628657 -Ref: Library Functions-Footnote-1632264 -Ref: Library Functions-Footnote-2632407 -Node: Library Names632578 -Ref: Library Names-Footnote-1636038 -Ref: Library Names-Footnote-2636261 -Node: General Functions636347 -Node: Strtonum Function637450 -Node: Assert Function640472 -Node: Round Function643798 -Node: Cliff Random Function645339 -Node: Ordinal Functions646355 -Ref: Ordinal Functions-Footnote-1649418 -Ref: Ordinal Functions-Footnote-2649670 -Node: Join Function649880 -Ref: Join Function-Footnote-1651650 -Node: Getlocaltime Function651850 -Node: Readfile Function655592 -Node: Shell Quoting657564 -Node: Data File Management658965 -Node: Filetrans Function659597 -Node: Rewind Function663693 -Node: File Checking665603 -Ref: File Checking-Footnote-1666937 -Node: Empty Files667138 -Node: Ignoring Assigns669117 -Node: Getopt Function670667 -Ref: Getopt Function-Footnote-1682136 -Node: Passwd Functions682336 -Ref: Passwd Functions-Footnote-1691175 -Node: Group Functions691263 -Ref: Group Functions-Footnote-1699161 -Node: Walking Arrays699368 -Node: Library Functions Summary702376 -Node: Library Exercises703782 -Node: Sample Programs704247 -Node: Running Examples705017 -Node: Clones705745 -Node: Cut Program706969 -Node: Egrep Program716898 -Ref: Egrep Program-Footnote-1724410 -Node: Id Program724520 -Node: Split Program728200 -Ref: Split Program-Footnote-1731659 -Node: Tee Program731788 -Node: Uniq Program734578 -Node: Wc Program742004 -Ref: Wc Program-Footnote-1746259 -Node: Miscellaneous Programs746353 -Node: Dupword Program747566 -Node: Alarm Program749596 -Node: Translate Program754451 -Ref: Translate Program-Footnote-1759016 -Node: Labels Program759286 -Ref: Labels Program-Footnote-1762637 -Node: Word Sorting762721 -Node: History Sorting766793 -Node: Extract Program768628 -Node: Simple Sed776158 -Node: Igawk Program779232 -Ref: Igawk Program-Footnote-1793563 -Ref: Igawk Program-Footnote-2793765 -Ref: Igawk Program-Footnote-3793887 -Node: Anagram Program794002 -Node: Signature Program797064 -Node: Programs Summary798311 -Node: Programs Exercises799525 -Ref: Programs Exercises-Footnote-1803654 -Node: Advanced Features803745 -Node: Nondecimal Data805735 -Node: Array Sorting807326 -Node: Controlling Array Traversal808026 -Ref: Controlling Array Traversal-Footnote-1816393 -Node: Array Sorting Functions816511 -Ref: Array Sorting Functions-Footnote-1821602 -Node: Two-way I/O821798 -Ref: Two-way I/O-Footnote-1828350 -Ref: Two-way I/O-Footnote-2828537 -Node: TCP/IP Networking828619 -Node: Profiling831737 -Ref: Profiling-Footnote-1840409 -Node: Advanced Features Summary840732 -Node: Internationalization842576 -Node: I18N and L10N844056 -Node: Explaining gettext844743 -Ref: Explaining gettext-Footnote-1850635 -Ref: Explaining gettext-Footnote-2850820 -Node: Programmer i18n850985 -Ref: Programmer i18n-Footnote-1855934 -Node: Translator i18n855983 -Node: String Extraction856777 -Ref: String Extraction-Footnote-1857909 -Node: Printf Ordering857995 -Ref: Printf Ordering-Footnote-1860781 -Node: I18N Portability860845 -Ref: I18N Portability-Footnote-1863301 -Node: I18N Example863364 -Ref: I18N Example-Footnote-1866170 -Node: Gawk I18N866243 -Node: I18N Summary866888 -Node: Debugger868229 -Node: Debugging869252 -Node: Debugging Concepts869693 -Node: Debugging Terms871502 -Node: Awk Debugging874077 -Node: Sample Debugging Session874983 -Node: Debugger Invocation875517 -Node: Finding The Bug876903 -Node: List of Debugger Commands883381 -Node: Breakpoint Control884714 -Node: Debugger Execution Control888408 -Node: Viewing And Changing Data891770 -Node: Execution Stack895144 -Node: Debugger Info896781 -Node: Miscellaneous Debugger Commands900852 -Node: Readline Support905940 -Node: Limitations906836 -Node: Debugging Summary908945 -Node: Arbitrary Precision Arithmetic910224 -Node: Computer Arithmetic911709 -Ref: table-numeric-ranges915300 -Ref: Computer Arithmetic-Footnote-1916022 -Node: Math Definitions916079 -Ref: table-ieee-formats919393 -Ref: Math Definitions-Footnote-1919996 -Node: MPFR features920101 -Node: FP Math Caution921818 -Ref: FP Math Caution-Footnote-1922890 -Node: Inexactness of computations923259 -Node: Inexact representation924219 -Node: Comparing FP Values925579 -Node: Errors accumulate926661 -Node: Getting Accuracy928094 -Node: Try To Round930804 -Node: Setting precision931703 -Ref: table-predefined-precision-strings932400 -Node: Setting the rounding mode934230 -Ref: table-gawk-rounding-modes934604 -Ref: Setting the rounding mode-Footnote-1938012 -Node: Arbitrary Precision Integers938191 -Ref: Arbitrary Precision Integers-Footnote-1941366 -Node: Checking for MPFR941515 -Node: POSIX Floating Point Problems942812 -Ref: POSIX Floating Point Problems-Footnote-1946683 -Node: Floating point summary946721 -Node: Dynamic Extensions948911 -Node: Extension Intro950464 -Node: Plugin License951730 -Node: Extension Mechanism Outline952527 -Ref: figure-load-extension952966 -Ref: figure-register-new-function954531 -Ref: figure-call-new-function955623 -Node: Extension API Description957685 -Node: Extension API Functions Introduction959327 -Node: General Data Types964867 -Ref: General Data Types-Footnote-1972988 -Node: Memory Allocation Functions973287 -Ref: Memory Allocation Functions-Footnote-1977495 -Node: Constructor Functions977594 -Node: Registration Functions981180 -Node: Extension Functions981865 -Node: Exit Callback Functions987080 -Node: Extension Version String988330 -Node: Input Parsers988993 -Node: Output Wrappers1001714 -Node: Two-way processors1006226 -Node: Printing Messages1008491 -Ref: Printing Messages-Footnote-11009662 -Node: Updating ERRNO1009815 -Node: Requesting Values1010554 -Ref: table-value-types-returned1011291 -Node: Accessing Parameters1012227 -Node: Symbol Table Access1013462 -Node: Symbol table by name1013974 -Node: Symbol table by cookie1015763 -Ref: Symbol table by cookie-Footnote-11019948 -Node: Cached values1020012 -Ref: Cached values-Footnote-11023548 -Node: Array Manipulation1023701 -Ref: Array Manipulation-Footnote-11024792 -Node: Array Data Types1024829 -Ref: Array Data Types-Footnote-11027487 -Node: Array Functions1027579 -Node: Flattening Arrays1032077 -Node: Creating Arrays1039053 -Node: Redirection API1043822 -Node: Extension API Variables1046655 -Node: Extension Versioning1047366 -Ref: gawk-api-version1047795 -Node: Extension GMP/MPFR Versioning1049523 -Node: Extension API Informational Variables1051151 -Node: Extension API Boilerplate1052224 -Node: Changes from API V11056198 -Node: Finding Extensions1056858 -Node: Extension Example1057417 -Node: Internal File Description1058215 -Node: Internal File Ops1062295 -Ref: Internal File Ops-Footnote-11073695 -Node: Using Internal File Ops1073835 -Ref: Using Internal File Ops-Footnote-11076218 -Node: Extension Samples1076492 -Node: Extension Sample File Functions1078021 -Node: Extension Sample Fnmatch1085670 -Node: Extension Sample Fork1087157 -Node: Extension Sample Inplace1088375 -Node: Extension Sample Ord1091592 -Node: Extension Sample Readdir1092428 -Ref: table-readdir-file-types1093317 -Node: Extension Sample Revout1094122 -Node: Extension Sample Rev2way1094711 -Node: Extension Sample Read write array1095451 -Node: Extension Sample Readfile1097393 -Node: Extension Sample Time1098488 -Node: Extension Sample API Tests1099836 -Node: gawkextlib1100328 -Node: Extension summary1102779 -Node: Extension Exercises1106481 -Node: Language History1107979 -Node: V7/SVR3.11109635 -Node: SVR41111787 -Node: POSIX1113221 -Node: BTL1114600 -Node: POSIX/GNU1115329 -Node: Feature History1121107 -Node: Common Extensions1136966 -Node: Ranges and Locales1138249 -Ref: Ranges and Locales-Footnote-11142865 -Ref: Ranges and Locales-Footnote-21142892 -Ref: Ranges and Locales-Footnote-31143127 -Node: Contributors1143348 -Node: History summary1149293 -Node: Installation1150673 -Node: Gawk Distribution1151617 -Node: Getting1152101 -Node: Extracting1153064 -Node: Distribution contents1154702 -Node: Unix Installation1161182 -Node: Quick Installation1161864 -Node: Shell Startup Files1164278 -Node: Additional Configuration Options1165367 -Node: Configuration Philosophy1167356 -Node: Non-Unix Installation1169725 -Node: PC Installation1170185 -Node: PC Binary Installation1171023 -Node: PC Compiling1171458 -Node: PC Using1172575 -Node: Cygwin1175620 -Node: MSYS1176390 -Node: VMS Installation1176891 -Node: VMS Compilation1177682 -Ref: VMS Compilation-Footnote-11178911 -Node: VMS Dynamic Extensions1178969 -Node: VMS Installation Details1180654 -Node: VMS Running1182907 -Node: VMS GNV1187186 -Node: VMS Old Gawk1187921 -Node: Bugs1188392 -Node: Bug address1189055 -Node: Usenet1191452 -Node: Maintainers1192229 -Node: Other Versions1193490 -Node: Installation summary1200074 -Node: Notes1201276 -Node: Compatibility Mode1202141 -Node: Additions1202923 -Node: Accessing The Source1203848 -Node: Adding Code1205284 -Node: New Ports1211503 -Node: Derived Files1215991 -Ref: Derived Files-Footnote-11221637 -Ref: Derived Files-Footnote-21221672 -Ref: Derived Files-Footnote-31222270 -Node: Future Extensions1222384 -Node: Implementation Limitations1223042 -Node: Extension Design1224225 -Node: Old Extension Problems1225379 -Ref: Old Extension Problems-Footnote-11226897 -Node: Extension New Mechanism Goals1226954 -Ref: Extension New Mechanism Goals-Footnote-11230318 -Node: Extension Other Design Decisions1230507 -Node: Extension Future Growth1232620 -Node: Old Extension Mechanism1233456 -Node: Notes summary1235219 -Node: Basic Concepts1236401 -Node: Basic High Level1237082 -Ref: figure-general-flow1237364 -Ref: figure-process-flow1238049 -Ref: Basic High Level-Footnote-11241350 -Node: Basic Data Typing1241535 -Node: Glossary1244863 -Node: Copying1276810 -Node: GNU Free Documentation License1314349 -Node: Index1339467 +Node: Multiple Line244703 +Ref: Multiple Line-Footnote-1250587 +Node: Getline250766 +Node: Plain Getline253235 +Node: Getline/Variable255876 +Node: Getline/File257027 +Node: Getline/Variable/File258415 +Ref: Getline/Variable/File-Footnote-1260020 +Node: Getline/Pipe260108 +Node: Getline/Variable/Pipe262815 +Node: Getline/Coprocess263950 +Node: Getline/Variable/Coprocess265217 +Node: Getline Notes265959 +Node: Getline Summary268756 +Ref: table-getline-variants269180 +Node: Read Timeout269928 +Ref: Read Timeout-Footnote-1273834 +Node: Retrying Input273892 +Node: Command-line directories275091 +Node: Input Summary275997 +Node: Input Exercises279169 +Node: Printing279897 +Node: Print281731 +Node: Print Examples283188 +Node: Output Separators285968 +Node: OFMT287985 +Node: Printf289341 +Node: Basic Printf290126 +Node: Control Letters291700 +Node: Format Modifiers295688 +Node: Printf Examples301703 +Node: Redirection304189 +Node: Special FD311030 +Ref: Special FD-Footnote-1314198 +Node: Special Files314272 +Node: Other Inherited Files314889 +Node: Special Network315890 +Node: Special Caveats316750 +Node: Close Files And Pipes317699 +Ref: table-close-pipe-return-values324606 +Ref: Close Files And Pipes-Footnote-1325389 +Ref: Close Files And Pipes-Footnote-2325537 +Node: Nonfatal325689 +Node: Output Summary328014 +Node: Output Exercises329236 +Node: Expressions329915 +Node: Values331103 +Node: Constants331781 +Node: Scalar Constants332472 +Ref: Scalar Constants-Footnote-1333336 +Node: Nondecimal-numbers333586 +Node: Regexp Constants336587 +Node: Using Constant Regexps337113 +Node: Standard Regexp Constants337735 +Node: Strong Regexp Constants340923 +Node: Variables343881 +Node: Using Variables344538 +Node: Assignment Options346448 +Node: Conversion348321 +Node: Strings And Numbers348845 +Ref: Strings And Numbers-Footnote-1351908 +Node: Locale influences conversions352017 +Ref: table-locale-affects354775 +Node: All Operators355393 +Node: Arithmetic Ops356022 +Node: Concatenation358528 +Ref: Concatenation-Footnote-1361375 +Node: Assignment Ops361482 +Ref: table-assign-ops366473 +Node: Increment Ops367786 +Node: Truth Values and Conditions371246 +Node: Truth Values372320 +Node: Typing and Comparison373368 +Node: Variable Typing374188 +Ref: Variable Typing-Footnote-1380651 +Ref: Variable Typing-Footnote-2380723 +Node: Comparison Operators380800 +Ref: table-relational-ops381219 +Node: POSIX String Comparison384714 +Ref: POSIX String Comparison-Footnote-1386409 +Ref: POSIX String Comparison-Footnote-2386548 +Node: Boolean Ops386632 +Ref: Boolean Ops-Footnote-1391114 +Node: Conditional Exp391206 +Node: Function Calls392942 +Node: Precedence396819 +Node: Locales400478 +Node: Expressions Summary402110 +Node: Patterns and Actions404683 +Node: Pattern Overview405803 +Node: Regexp Patterns407480 +Node: Expression Patterns408022 +Node: Ranges411803 +Node: BEGIN/END414911 +Node: Using BEGIN/END415672 +Ref: Using BEGIN/END-Footnote-1418408 +Node: I/O And BEGIN/END418514 +Node: BEGINFILE/ENDFILE420828 +Node: Empty423741 +Node: Using Shell Variables424058 +Node: Action Overview426332 +Node: Statements428657 +Node: If Statement430505 +Node: While Statement432000 +Node: Do Statement434028 +Node: For Statement435176 +Node: Switch Statement438334 +Node: Break Statement440720 +Node: Continue Statement442812 +Node: Next Statement444639 +Node: Nextfile Statement447022 +Node: Exit Statement449674 +Node: Built-in Variables452077 +Node: User-modified453210 +Node: Auto-set460977 +Ref: Auto-set-Footnote-1477314 +Ref: Auto-set-Footnote-2477520 +Node: ARGC and ARGV477576 +Node: Pattern Action Summary481789 +Node: Arrays484219 +Node: Array Basics485548 +Node: Array Intro486392 +Ref: figure-array-elements488367 +Ref: Array Intro-Footnote-1491071 +Node: Reference to Elements491199 +Node: Assigning Elements493663 +Node: Array Example494154 +Node: Scanning an Array495913 +Node: Controlling Scanning498935 +Ref: Controlling Scanning-Footnote-1504334 +Node: Numeric Array Subscripts504650 +Node: Uninitialized Subscripts506834 +Node: Delete508453 +Ref: Delete-Footnote-1511205 +Node: Multidimensional511262 +Node: Multiscanning514357 +Node: Arrays of Arrays515948 +Node: Arrays Summary520715 +Node: Functions522808 +Node: Built-in523846 +Node: Calling Built-in524927 +Node: Numeric Functions526923 +Ref: Numeric Functions-Footnote-1530951 +Ref: Numeric Functions-Footnote-2531308 +Ref: Numeric Functions-Footnote-3531356 +Node: String Functions531628 +Ref: String Functions-Footnote-1555286 +Ref: String Functions-Footnote-2555414 +Ref: String Functions-Footnote-3555662 +Node: Gory Details555749 +Ref: table-sub-escapes557540 +Ref: table-sub-proposed559059 +Ref: table-posix-sub560422 +Ref: table-gensub-escapes561963 +Ref: Gory Details-Footnote-1562786 +Node: I/O Functions562940 +Ref: table-system-return-values569522 +Ref: I/O Functions-Footnote-1571502 +Ref: I/O Functions-Footnote-2571650 +Node: Time Functions571770 +Ref: Time Functions-Footnote-1582441 +Ref: Time Functions-Footnote-2582509 +Ref: Time Functions-Footnote-3582667 +Ref: Time Functions-Footnote-4582778 +Ref: Time Functions-Footnote-5582890 +Ref: Time Functions-Footnote-6583117 +Node: Bitwise Functions583383 +Ref: table-bitwise-ops583977 +Ref: Bitwise Functions-Footnote-1590010 +Ref: Bitwise Functions-Footnote-2590183 +Node: Type Functions590374 +Node: I18N Functions593291 +Node: User-defined594942 +Node: Definition Syntax595747 +Ref: Definition Syntax-Footnote-1601434 +Node: Function Example601505 +Ref: Function Example-Footnote-1604427 +Node: Function Caveats604449 +Node: Calling A Function604967 +Node: Variable Scope605925 +Node: Pass By Value/Reference608919 +Node: Return Statement612418 +Node: Dynamic Typing615397 +Node: Indirect Calls616327 +Ref: Indirect Calls-Footnote-1626579 +Node: Functions Summary626707 +Node: Library Functions629412 +Ref: Library Functions-Footnote-1633019 +Ref: Library Functions-Footnote-2633162 +Node: Library Names633333 +Ref: Library Names-Footnote-1636793 +Ref: Library Names-Footnote-2637016 +Node: General Functions637102 +Node: Strtonum Function638205 +Node: Assert Function641227 +Node: Round Function644553 +Node: Cliff Random Function646094 +Node: Ordinal Functions647110 +Ref: Ordinal Functions-Footnote-1650173 +Ref: Ordinal Functions-Footnote-2650425 +Node: Join Function650635 +Ref: Join Function-Footnote-1652405 +Node: Getlocaltime Function652605 +Node: Readfile Function656347 +Node: Shell Quoting658319 +Node: Data File Management659720 +Node: Filetrans Function660352 +Node: Rewind Function664448 +Node: File Checking666358 +Ref: File Checking-Footnote-1667692 +Node: Empty Files667893 +Node: Ignoring Assigns669872 +Node: Getopt Function671422 +Ref: Getopt Function-Footnote-1682891 +Node: Passwd Functions683091 +Ref: Passwd Functions-Footnote-1691930 +Node: Group Functions692018 +Ref: Group Functions-Footnote-1699916 +Node: Walking Arrays700123 +Node: Library Functions Summary703131 +Node: Library Exercises704537 +Node: Sample Programs705002 +Node: Running Examples705772 +Node: Clones706500 +Node: Cut Program707724 +Node: Egrep Program717653 +Ref: Egrep Program-Footnote-1725165 +Node: Id Program725275 +Node: Split Program728955 +Ref: Split Program-Footnote-1732414 +Node: Tee Program732543 +Node: Uniq Program735333 +Node: Wc Program742759 +Ref: Wc Program-Footnote-1747014 +Node: Miscellaneous Programs747108 +Node: Dupword Program748321 +Node: Alarm Program750351 +Node: Translate Program755206 +Ref: Translate Program-Footnote-1759771 +Node: Labels Program760041 +Ref: Labels Program-Footnote-1763392 +Node: Word Sorting763476 +Node: History Sorting767548 +Node: Extract Program769383 +Node: Simple Sed776913 +Node: Igawk Program779987 +Ref: Igawk Program-Footnote-1794318 +Ref: Igawk Program-Footnote-2794520 +Ref: Igawk Program-Footnote-3794642 +Node: Anagram Program794757 +Node: Signature Program797819 +Node: Programs Summary799066 +Node: Programs Exercises800280 +Ref: Programs Exercises-Footnote-1804409 +Node: Advanced Features804500 +Node: Nondecimal Data806490 +Node: Array Sorting808081 +Node: Controlling Array Traversal808781 +Ref: Controlling Array Traversal-Footnote-1817148 +Node: Array Sorting Functions817266 +Ref: Array Sorting Functions-Footnote-1822357 +Node: Two-way I/O822553 +Ref: Two-way I/O-Footnote-1829105 +Ref: Two-way I/O-Footnote-2829292 +Node: TCP/IP Networking829374 +Node: Profiling832492 +Ref: Profiling-Footnote-1841164 +Node: Advanced Features Summary841487 +Node: Internationalization843331 +Node: I18N and L10N844811 +Node: Explaining gettext845498 +Ref: Explaining gettext-Footnote-1851390 +Ref: Explaining gettext-Footnote-2851575 +Node: Programmer i18n851740 +Ref: Programmer i18n-Footnote-1856689 +Node: Translator i18n856738 +Node: String Extraction857532 +Ref: String Extraction-Footnote-1858664 +Node: Printf Ordering858750 +Ref: Printf Ordering-Footnote-1861536 +Node: I18N Portability861600 +Ref: I18N Portability-Footnote-1864056 +Node: I18N Example864119 +Ref: I18N Example-Footnote-1866925 +Node: Gawk I18N866998 +Node: I18N Summary867643 +Node: Debugger868984 +Node: Debugging870007 +Node: Debugging Concepts870448 +Node: Debugging Terms872257 +Node: Awk Debugging874832 +Node: Sample Debugging Session875738 +Node: Debugger Invocation876272 +Node: Finding The Bug877658 +Node: List of Debugger Commands884136 +Node: Breakpoint Control885469 +Node: Debugger Execution Control889163 +Node: Viewing And Changing Data892525 +Node: Execution Stack895899 +Node: Debugger Info897536 +Node: Miscellaneous Debugger Commands901607 +Node: Readline Support906695 +Node: Limitations907591 +Node: Debugging Summary909700 +Node: Arbitrary Precision Arithmetic910979 +Node: Computer Arithmetic912464 +Ref: table-numeric-ranges916055 +Ref: Computer Arithmetic-Footnote-1916777 +Node: Math Definitions916834 +Ref: table-ieee-formats920150 +Ref: Math Definitions-Footnote-1920753 +Node: MPFR features920858 +Node: FP Math Caution922576 +Ref: FP Math Caution-Footnote-1923648 +Node: Inexactness of computations924017 +Node: Inexact representation924977 +Node: Comparing FP Values926337 +Node: Errors accumulate927419 +Node: Getting Accuracy928852 +Node: Try To Round931562 +Node: Setting precision932461 +Ref: table-predefined-precision-strings933158 +Node: Setting the rounding mode934988 +Ref: table-gawk-rounding-modes935362 +Ref: Setting the rounding mode-Footnote-1938770 +Node: Arbitrary Precision Integers938949 +Ref: Arbitrary Precision Integers-Footnote-1942124 +Node: Checking for MPFR942273 +Node: POSIX Floating Point Problems943570 +Ref: POSIX Floating Point Problems-Footnote-1947441 +Node: Floating point summary947479 +Node: Dynamic Extensions949669 +Node: Extension Intro951222 +Node: Plugin License952488 +Node: Extension Mechanism Outline953285 +Ref: figure-load-extension953724 +Ref: figure-register-new-function955289 +Ref: figure-call-new-function956381 +Node: Extension API Description958443 +Node: Extension API Functions Introduction960085 +Node: General Data Types965625 +Ref: General Data Types-Footnote-1973746 +Node: Memory Allocation Functions974045 +Ref: Memory Allocation Functions-Footnote-1978253 +Node: Constructor Functions978352 +Node: Registration Functions981938 +Node: Extension Functions982623 +Node: Exit Callback Functions987838 +Node: Extension Version String989088 +Node: Input Parsers989751 +Node: Output Wrappers1002472 +Node: Two-way processors1006984 +Node: Printing Messages1009249 +Ref: Printing Messages-Footnote-11010420 +Node: Updating ERRNO1010573 +Node: Requesting Values1011312 +Ref: table-value-types-returned1012049 +Node: Accessing Parameters1012985 +Node: Symbol Table Access1014220 +Node: Symbol table by name1014732 +Node: Symbol table by cookie1016521 +Ref: Symbol table by cookie-Footnote-11020706 +Node: Cached values1020770 +Ref: Cached values-Footnote-11024306 +Node: Array Manipulation1024459 +Ref: Array Manipulation-Footnote-11025550 +Node: Array Data Types1025587 +Ref: Array Data Types-Footnote-11028245 +Node: Array Functions1028337 +Node: Flattening Arrays1032835 +Node: Creating Arrays1039811 +Node: Redirection API1044580 +Node: Extension API Variables1047413 +Node: Extension Versioning1048124 +Ref: gawk-api-version1048553 +Node: Extension GMP/MPFR Versioning1050281 +Node: Extension API Informational Variables1051909 +Node: Extension API Boilerplate1052982 +Node: Changes from API V11056956 +Node: Finding Extensions1057616 +Node: Extension Example1058175 +Node: Internal File Description1058973 +Node: Internal File Ops1063053 +Ref: Internal File Ops-Footnote-11074453 +Node: Using Internal File Ops1074593 +Ref: Using Internal File Ops-Footnote-11076976 +Node: Extension Samples1077250 +Node: Extension Sample File Functions1078779 +Node: Extension Sample Fnmatch1086428 +Node: Extension Sample Fork1087915 +Node: Extension Sample Inplace1089133 +Node: Extension Sample Ord1092350 +Node: Extension Sample Readdir1093186 +Ref: table-readdir-file-types1094075 +Node: Extension Sample Revout1094880 +Node: Extension Sample Rev2way1095469 +Node: Extension Sample Read write array1096209 +Node: Extension Sample Readfile1098151 +Node: Extension Sample Time1099246 +Node: Extension Sample API Tests1100594 +Node: gawkextlib1101086 +Node: Extension summary1103542 +Node: Extension Exercises1107244 +Node: Language History1108742 +Node: V7/SVR3.11110398 +Node: SVR41112550 +Node: POSIX1113984 +Node: BTL1115364 +Node: POSIX/GNU1116093 +Node: Feature History1121871 +Node: Common Extensions1137730 +Node: Ranges and Locales1139013 +Ref: Ranges and Locales-Footnote-11143629 +Ref: Ranges and Locales-Footnote-21143656 +Ref: Ranges and Locales-Footnote-31143891 +Node: Contributors1144112 +Node: History summary1150057 +Node: Installation1151437 +Node: Gawk Distribution1152381 +Node: Getting1152865 +Node: Extracting1153828 +Node: Distribution contents1155466 +Node: Unix Installation1161946 +Node: Quick Installation1162628 +Node: Shell Startup Files1165042 +Node: Additional Configuration Options1166131 +Node: Configuration Philosophy1168120 +Node: Non-Unix Installation1170489 +Node: PC Installation1170949 +Node: PC Binary Installation1171787 +Node: PC Compiling1172222 +Node: PC Using1173339 +Node: Cygwin1176384 +Node: MSYS1177154 +Node: VMS Installation1177655 +Node: VMS Compilation1178446 +Ref: VMS Compilation-Footnote-11179675 +Node: VMS Dynamic Extensions1179733 +Node: VMS Installation Details1181418 +Node: VMS Running1183671 +Node: VMS GNV1187950 +Node: VMS Old Gawk1188685 +Node: Bugs1189156 +Node: Bug address1189819 +Node: Usenet1192611 +Node: Maintainers1193388 +Node: Other Versions1194649 +Node: Installation summary1201444 +Node: Notes1202646 +Node: Compatibility Mode1203511 +Node: Additions1204293 +Node: Accessing The Source1205218 +Node: Adding Code1206655 +Node: New Ports1212874 +Node: Derived Files1217362 +Ref: Derived Files-Footnote-11223008 +Ref: Derived Files-Footnote-21223043 +Ref: Derived Files-Footnote-31223641 +Node: Future Extensions1223755 +Node: Implementation Limitations1224413 +Node: Extension Design1225596 +Node: Old Extension Problems1226750 +Ref: Old Extension Problems-Footnote-11228268 +Node: Extension New Mechanism Goals1228325 +Ref: Extension New Mechanism Goals-Footnote-11231689 +Node: Extension Other Design Decisions1231878 +Node: Extension Future Growth1233991 +Node: Old Extension Mechanism1234827 +Node: Notes summary1236590 +Node: Basic Concepts1237772 +Node: Basic High Level1238453 +Ref: figure-general-flow1238735 +Ref: figure-process-flow1239420 +Ref: Basic High Level-Footnote-11242721 +Node: Basic Data Typing1242906 +Node: Glossary1246234 +Node: Copying1278184 +Node: GNU Free Documentation License1315723 +Node: Index1340841 End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index d2a4945d..c9b2cdf0 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -2104,7 +2104,7 @@ contact me if you are interested. @ignore Other links: -http://www.reddit.com/r/linux/comments/dtect/composing_music_in_awk/ +https://www.reddit.com/r/linux/comments/dtect/composing_music_in_awk/ @end ignore @end ifclear @@ -7887,7 +7887,7 @@ There are times when fixed-width data may be followed by additional data that has no fixed length. Such data may or may not be present, but if it is, it should be possible to get at it from an @command{awk} program. -Starting with version 4.2, in order to provide a way to say ``anything +Starting with @value{PVERSION} 4.2, in order to provide a way to say ``anything else in the record after the defined fields,'' @command{gawk} allows you to add a final @samp{*} character to the value of @code{FIELDWIDTHS}. There can only be one such character, and it must @@ -7912,7 +7912,7 @@ should be based on the contents of @code{FIELDWIDTHS}? Or, what happens if there is more data than expected? For many years, what happens in these cases was not well defined. Starting -with version 4.2, the rules are as follows: +with @value{PVERSION} 4.2, the rules are as follows: @table @asis @item Enough data for some fields @@ -8094,7 +8094,7 @@ if (PROCINFO["FS"] == "FS") else if (PROCINFO["FS"] == "FIELDWIDTHS") @var{fixed-width field splitting} @dots{} else if (PROCINFO["FS"] == "FPAT") - @var{content-based field splitting} + @var{content-based field splitting} @dots{} else @var{API input parser field splitting} @dots{} @ii{(advanced feature)} @end example @@ -14069,7 +14069,7 @@ 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://sourceforge.net/projects/gawkextlib, @code{gawkextlib} project}.) +@uref{https://sourceforge.net/projects/gawkextlib, @code{gawkextlib} project}.) @end itemize The @code{ENDFILE} rule is called when @command{gawk} has finished processing @@ -15639,6 +15639,18 @@ of setting up a two-way pipe. Set a timeout for reading from input redirection @var{input_name}. @xref{Read Timeout} for more information. +@item PROCINFO["@var{Iinput_name}", "RETRY"] +If an I/O error that may be retried occurs when reading data from +@var{input_name}, and this array entry exists, then @code{getline} returns +@minus{}2 instead of following the default behavior of returning @minus{}1 +and configuring @var{input_name} to return no further data. An I/O error +that may be retried is one where @code{errno} has the value @code{EAGAIN}, +@code{EWOULDBLOCK}, @code{EINTR}, or @code{ETIMEDOUT}. This may be useful +in conjunction with @code{\fBPROCINFO["@var{input_name}", "READ_TIMEOUT"]} +or situations where a file descriptor has been configured to behave in +a non-blocking fashion. +@xref{Retrying Input} for more information. + @item PROCINFO["sorted_in"] If this element exists in @code{PROCINFO}, its value controls the order in which array indices will be processed by @@ -19263,7 +19275,7 @@ year 1 and year @minus{}1 preceding year 0. If @var{utc-flag} is present and is either nonzero or non-null, the time is assumed to be in the UTC time zone; otherwise, the time is assumed to be in the local time zone. -If the daylight-savings flag is positive, the time is assumed to be +If the @var{DST} daylight-savings flag is positive, the time is assumed to be daylight savings time; if zero, the time is assumed to be standard time; and if negative (the default), @code{mktime()} attempts to determine whether daylight savings time is in effect for the specified time. @@ -21023,7 +21035,7 @@ think at first. The C and C++ languages provide ``function pointers,'' which are a mechanism for calling a function chosen at runtime. One of the most well-known uses of this ability is the C @code{qsort()} function, which sorts an array using the famous ``quicksort'' algorithm -(see @uref{http://en.wikipedia.org/wiki/Quicksort, the Wikipedia article} +(see @uref{https://en.wikipedia.org/wiki/Quicksort, the Wikipedia article} for more information). To use this function, you supply a pointer to a comparison function. This mechanism allows you to sort arbitrary data in an arbitrary fashion. @@ -27200,7 +27212,7 @@ in sorted order: # - split() with "" as separator splits out individual characters # - asort() and asorti() functions # -# See http://savannah.gnu.org/projects/gawk. +# See https://savannah.gnu.org/projects/gawk. # # Arnold Robbins # arnold@@skeeve.com @@ -27363,7 +27375,7 @@ certainty through the space-time continuum. # From "13.3.11 And Now For Something Completely Different" # https://www.gnu.org/software/gawk/manual/html_node/Signature-Program.html#Signature-Program -# Copyright © 2008 Davide Brini +# Copyright @copyright{} 2008 Davide Brini # Copying and distribution of the code published in this page, with # or without modification, are permitted in any medium without @@ -31425,13 +31437,13 @@ 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, +From @uref{https://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 -See @uref{http://en.wikipedia.org/wiki/Accuracy_and_precision, +See @uref{https://en.wikipedia.org/wiki/Accuracy_and_precision, the Wikipedia article on accuracy and precision} for more information on some of those terms. @@ -31468,7 +31480,7 @@ 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 so, and the @option{-M} command-line option is supplied, @command{gawk} uses the @uref{http://www.mpfr.org, -GNU MPFR} and @uref{http://gmplib.org, GNU MP} (GMP) libraries for +GNU MPFR} and @uref{https://gmplib.org, GNU MP} (GMP) libraries for arbitrary-precision arithmetic on numbers. You can see if MPFR support is available like so: @@ -32039,12 +32051,12 @@ You can simulate the @code{intdiv0()} function in standard @command{awk} using this user-defined function: @example -@c file eg/lib/intdiv.awk +@c file eg/lib/intdiv0.awk # intdiv0 --- do integer division @c endfile @ignore -@c file eg/lib/intdiv.awk +@c file eg/lib/intdiv0.awk # # Arnold Robbins, arnold@@skeeve.com, Public Domain # July, 2014 @@ -32058,7 +32070,7 @@ using this user-defined function: @c endfile @end ignore -@c file eg/lib/intdiv.awk +@c file eg/lib/intdiv0.awk function intdiv0(numerator, denominator, result) @{ split("", result) @@ -32074,7 +32086,7 @@ function intdiv0(numerator, denominator, result) @end example The following example program, contributed by Katie Wasserman, -uses @code{intdiv()} to +uses @code{intdiv0()} to compute the digits of @value{PI} to as many places as you choose to set: @@ -32099,7 +32111,7 @@ BEGIN @{ for (m = digits * 4; m > 0; --m) @{ d = m * 2 + 1 x = pi * m - intdiv(x, d, result) + intdiv0(x, d, result) pi = result["quotient"] pi = pi + two @} @@ -33142,14 +33154,14 @@ pointed to by @code{result}. @itemx make_number_mpz(void *mpz, awk_value_t *result); This function creates a GMP number value in @code{result}. The @code{mpz} must be from a call to @code{get_mpz_ptr()} -(and thus be or real underlying type @code{mpz_ptr}). +(and thus be of real underlying type @code{mpz_ptr}). @command{gawk} takes ownership of this memory. @item static inline awk_value_t * @itemx make_number_mpfr(void *mpfr, awk_value_t *result); This function creates an MPFR number value in @code{result}. The @code{mpfr} must be from a call to @code{get_mpfr_ptr()}. -(and thus be or real underlying type @code{mpfr_ptr}) +(and thus be of real underlying type @code{mpfr_ptr}) @command{gawk} takes ownership of this memory. @item static inline awk_value_t * @@ -36659,7 +36671,7 @@ for more information. @cindex extensions, where to find @cindex @code{gawkextlib} project -The @uref{http://sourceforge.net/projects/gawkextlib/, @code{gawkextlib}} +The @uref{https://sourceforge.net/projects/gawkextlib/, @code{gawkextlib}} 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. @@ -36691,13 +36703,13 @@ Redis extension Select extension @item -XML parser extension, using the @uref{http://expat.sourceforge.net, Expat} +XML parser extension, using the @uref{https://expat.sourceforge.net, Expat} XML parsing library @end itemize @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{https://git-scm.com, Git} distributed source code control system. The command is as follows: @example @@ -36705,7 +36717,7 @@ git clone git://git.code.sf.net/p/gawkextlib/code gawkextlib-code @end example @cindex Expat XML parser library -You will need to have the @uref{http://expat.sourceforge.net, Expat} +You will need to have the @uref{https://expat.sourceforge.net, Expat} XML parser library installed in order to build and use the XML extension. In addition, you must have the GNU Autotools installed @@ -36725,7 +36737,7 @@ make && make check @ii{Build and check that all is OK} make install @ii{Install gawk} @end example -Next, go to @url{http://sourceforge.net/projects/gawkextlib/files} to +Next, go to @url{https://sourceforge.net/projects/gawkextlib/files} to download @code{gawkextlib} and any extensions that you would like to build. The @file{README} file at that site explains how to build the code. If you installed @command{gawk} in a non-standard location, you will need to @@ -37182,7 +37194,7 @@ The ability to delete all of an array at once with @samp{delete @var{array}} not permitted by the POSIX standard. The 2008 POSIX standard can be found online at -@url{http://www.opengroup.org/onlinepubs/9699919799/}. +@url{http://pubs.opengroup.org/onlinepubs/9699919799/}. @node BTL @@ -39931,11 +39943,19 @@ but we might well want to fix it. @appendixsubsec Submitting Bug Reports Before reporting a bug, make sure you have really found a genuine bug. -Carefully reread the documentation and see if it says you can do +First, verify that you have the latest version of @command{gawk}. +Many bugs (usually subtle ones) are fixed at each release, and if yours +is out of date, the problem may already have been solved. + +Second, please see if setting the environment variable @env{LC_ALL} +to @code{LC_ALL=C} causes things to behave as you expect. If so, it's +a locale issue, and may or may not really be a bug. + +Third, carefully reread the documentation and see if it says you can do 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 +Finally, before reporting a bug or trying to fix it yourself, try to isolate it to the smallest possible @command{awk} program and input @value{DF} that reproduce the problem. Then send us the program and @value{DF}, some idea of what kind of Unix system you're using, @@ -40123,7 +40143,7 @@ git clone git://github.com/onetrueawk/awk bwkawk @end example @noindent -This command creates a copy of the @uref{http://git-scm.com, Git} +This command creates a copy of the @uref{https://git-scm.com, Git} repository in a directory named @file{bwkawk}. If you leave that argument off the @command{git} command line, the repository copy is created in a directory named @file{awk}. @@ -40170,6 +40190,11 @@ is similar to @command{gawk}'s @xref{Common Extensions} for a list of extensions in @command{mawk} that are not in POSIX @command{awk}. +@item @command{mawk} 2.0 +In 2016, Michael Brennan resumed @command{mawk} development. +His development snapshots are available via Git from the project's +@uref{https://github.com/mikebrennan000/mawk-2, GitHub page}. + @cindex Sumner, Andrew @cindex @command{awka} compiler for @command{awk} @cindex source code, @command{awka} @@ -40183,7 +40208,7 @@ It also has a number of extensions. The @command{awk} translator is released under the GPL, and the library is under the LGPL. -To get @command{awka}, go to @url{http://sourceforge.net/projects/awka}. +To get @command{awka}, go to @url{https://sourceforge.net/projects/awka}. @c You can reach Andrew Sumner at @email{andrew@@zbcom.net}. @c andrewsumner@@yahoo.net @@ -40212,7 +40237,7 @@ applications within a single executable. It is aimed at embedded systems. It includes a full implementation of POSIX @command{awk}. When building it, be careful not to do @samp{make install} as it will overwrite copies of other applications in your @file{/usr/local/bin}. For more -information, see the @uref{http://busybox.net, project's home page}. +information, see the @uref{https://busybox.net, project's home page}. @cindex OpenSolaris @cindex Solaris, POSIX-compliant @command{awk} @@ -40231,7 +40256,7 @@ has not been done, at least to our knowledge. @cindex source code, Illumos @command{awk} The source code used to be available from the OpenSolaris website. However, that project was ended and the website shut down. Fortunately, the -@uref{http://wiki.illumos.org/display/illumos/illumos+Home, Illumos project} +@uref{https://wiki.illumos.org/display/illumos/illumos+Home, Illumos project} makes this implementation available. You can view the files one at a time from @uref{https://github.com/joyent/illumos-joyent/blob/master/usr/src/cmd/awk_xpg4}. @@ -40243,7 +40268,7 @@ This is an interpreter for @command{awk} written in Java. It claims to be a full interpreter, although because it uses Java facilities for I/O and for regexp matching, the language it supports is different from POSIX @command{awk}. More information is available on the -@uref{http://jawk.sourceforge.net, project's home page}. +@uref{https://jawk.sourceforge.net, project's home page}. @item Libmawk @cindex libmawk @@ -40264,7 +40289,7 @@ modified version of BWK @command{awk}, described earlier.) @cindex QSE @command{awk} @cindex source code, QSE @command{awk} This is an embeddable @command{awk} interpreter. For more information, -see @uref{http://code.google.com/p/qse/} and @uref{http://awk.info/?tools/qse}. +see @uref{https://code.google.com/p/qse/} and @uref{http://awk.info/?tools/qse}. @item @command{QTawk} @cindex QuikTrim Awk @@ -40282,7 +40307,7 @@ since approximately 2014. @item Other versions See also the ``Versions and implementations'' section of the -@uref{http://en.wikipedia.org/wiki/Awk_language#Versions_and_implementations, +@uref{https://en.wikipedia.org/wiki/Awk_language#Versions_and_implementations, Wikipedia article} on @command{awk} for information on additional versions. @end table @@ -40408,7 +40433,7 @@ However, if you want to modify @command{gawk} and contribute back your changes, you will probably wish to work with the development version. To do so, you will need to access the @command{gawk} source code repository. The code is maintained using the -@uref{http://git-scm.com, Git distributed version control system}. +@uref{https://git-scm.com, Git distributed version control system}. You will need to install it if your system doesn't have it. Once you have done so, use the command: @@ -42138,7 +42163,7 @@ programming languages, such as C and C++. In the computer arena, important standards like those for C, C++, and POSIX become both American national and ISO international standards simultaneously. This @value{DOCUMENT} refers to Standard C as ``ISO C'' throughout. -See @uref{http://www.iso.org/iso/home/about.htm, the ISO website} for more +See @uref{https://www.iso.org/iso/home/about.htm, the ISO website} for more information about the name of the organization and its language-independent three-letter acronym. @@ -42280,7 +42305,7 @@ the Unix heritage of these standards. The main standard of interest for @command{awk} users is @cite{IEEE Standard for Information Technology, Standard 1003.1-2008}. The 2008 POSIX standard can be found online at -@url{http://www.opengroup.org/onlinepubs/9699919799/}. +@url{http://pubs.opengroup.org/onlinepubs/9699919799/}. @item Precedence The order in which operations are performed when operators are used @@ -42459,7 +42484,7 @@ the world and later moved into commercial environments as a software development system and network server system. There are many commercial versions of Unix, as well as several work-alike systems whose source code is freely available (such as GNU/Linux, @uref{http://www.netbsd.org, NetBSD}, -@uref{http://www.freebsd.org, FreeBSD}, and @uref{http://www.openbsd.org, OpenBSD}). +@uref{https://www.freebsd.org, FreeBSD}, and @uref{http://www.openbsd.org, OpenBSD}). @item UTC The accepted abbreviation for ``Universal Coordinated Time.'' diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 2a30a876..c82a4e8d 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -2071,7 +2071,7 @@ contact me if you are interested. @ignore Other links: -http://www.reddit.com/r/linux/comments/dtect/composing_music_in_awk/ +https://www.reddit.com/r/linux/comments/dtect/composing_music_in_awk/ @end ignore @end ifclear @@ -7487,7 +7487,7 @@ There are times when fixed-width data may be followed by additional data that has no fixed length. Such data may or may not be present, but if it is, it should be possible to get at it from an @command{awk} program. -Starting with version 4.2, in order to provide a way to say ``anything +Starting with @value{PVERSION} 4.2, in order to provide a way to say ``anything else in the record after the defined fields,'' @command{gawk} allows you to add a final @samp{*} character to the value of @code{FIELDWIDTHS}. There can only be one such character, and it must @@ -7512,7 +7512,7 @@ should be based on the contents of @code{FIELDWIDTHS}? Or, what happens if there is more data than expected? For many years, what happens in these cases was not well defined. Starting -with version 4.2, the rules are as follows: +with @value{PVERSION} 4.2, the rules are as follows: @table @asis @item Enough data for some fields @@ -7694,7 +7694,7 @@ if (PROCINFO["FS"] == "FS") else if (PROCINFO["FS"] == "FIELDWIDTHS") @var{fixed-width field splitting} @dots{} else if (PROCINFO["FS"] == "FPAT") - @var{content-based field splitting} + @var{content-based field splitting} @dots{} else @var{API input parser field splitting} @dots{} @ii{(advanced feature)} @end example @@ -13388,7 +13388,7 @@ 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://sourceforge.net/projects/gawkextlib, @code{gawkextlib} project}.) +@uref{https://sourceforge.net/projects/gawkextlib, @code{gawkextlib} project}.) @end itemize The @code{ENDFILE} rule is called when @command{gawk} has finished processing @@ -14958,6 +14958,18 @@ of setting up a two-way pipe. Set a timeout for reading from input redirection @var{input_name}. @xref{Read Timeout} for more information. +@item PROCINFO["@var{Iinput_name}", "RETRY"] +If an I/O error that may be retried occurs when reading data from +@var{input_name}, and this array entry exists, then @code{getline} returns +@minus{}2 instead of following the default behavior of returning @minus{}1 +and configuring @var{input_name} to return no further data. An I/O error +that may be retried is one where @code{errno} has the value @code{EAGAIN}, +@code{EWOULDBLOCK}, @code{EINTR}, or @code{ETIMEDOUT}. This may be useful +in conjunction with @code{\fBPROCINFO["@var{input_name}", "READ_TIMEOUT"]} +or situations where a file descriptor has been configured to behave in +a non-blocking fashion. +@xref{Retrying Input} for more information. + @item PROCINFO["sorted_in"] If this element exists in @code{PROCINFO}, its value controls the order in which array indices will be processed by @@ -18375,7 +18387,7 @@ year 1 and year @minus{}1 preceding year 0. If @var{utc-flag} is present and is either nonzero or non-null, the time is assumed to be in the UTC time zone; otherwise, the time is assumed to be in the local time zone. -If the daylight-savings flag is positive, the time is assumed to be +If the @var{DST} daylight-savings flag is positive, the time is assumed to be daylight savings time; if zero, the time is assumed to be standard time; and if negative (the default), @code{mktime()} attempts to determine whether daylight savings time is in effect for the specified time. @@ -20067,7 +20079,7 @@ think at first. The C and C++ languages provide ``function pointers,'' which are a mechanism for calling a function chosen at runtime. One of the most well-known uses of this ability is the C @code{qsort()} function, which sorts an array using the famous ``quicksort'' algorithm -(see @uref{http://en.wikipedia.org/wiki/Quicksort, the Wikipedia article} +(see @uref{https://en.wikipedia.org/wiki/Quicksort, the Wikipedia article} for more information). To use this function, you supply a pointer to a comparison function. This mechanism allows you to sort arbitrary data in an arbitrary fashion. @@ -26214,7 +26226,7 @@ in sorted order: # - split() with "" as separator splits out individual characters # - asort() and asorti() functions # -# See http://savannah.gnu.org/projects/gawk. +# See https://savannah.gnu.org/projects/gawk. # # Arnold Robbins # arnold@@skeeve.com @@ -26377,7 +26389,7 @@ certainty through the space-time continuum. # From "13.3.11 And Now For Something Completely Different" # https://www.gnu.org/software/gawk/manual/html_node/Signature-Program.html#Signature-Program -# Copyright © 2008 Davide Brini +# Copyright @copyright{} 2008 Davide Brini # Copying and distribution of the code published in this page, with # or without modification, are permitted in any medium without @@ -30439,13 +30451,13 @@ 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, +From @uref{https://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 -See @uref{http://en.wikipedia.org/wiki/Accuracy_and_precision, +See @uref{https://en.wikipedia.org/wiki/Accuracy_and_precision, the Wikipedia article on accuracy and precision} for more information on some of those terms. @@ -30482,7 +30494,7 @@ 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 so, and the @option{-M} command-line option is supplied, @command{gawk} uses the @uref{http://www.mpfr.org, -GNU MPFR} and @uref{http://gmplib.org, GNU MP} (GMP) libraries for +GNU MPFR} and @uref{https://gmplib.org, GNU MP} (GMP) libraries for arbitrary-precision arithmetic on numbers. You can see if MPFR support is available like so: @@ -31053,12 +31065,12 @@ You can simulate the @code{intdiv0()} function in standard @command{awk} using this user-defined function: @example -@c file eg/lib/intdiv.awk +@c file eg/lib/intdiv0.awk # intdiv0 --- do integer division @c endfile @ignore -@c file eg/lib/intdiv.awk +@c file eg/lib/intdiv0.awk # # Arnold Robbins, arnold@@skeeve.com, Public Domain # July, 2014 @@ -31072,7 +31084,7 @@ using this user-defined function: @c endfile @end ignore -@c file eg/lib/intdiv.awk +@c file eg/lib/intdiv0.awk function intdiv0(numerator, denominator, result) @{ split("", result) @@ -31088,7 +31100,7 @@ function intdiv0(numerator, denominator, result) @end example The following example program, contributed by Katie Wasserman, -uses @code{intdiv()} to +uses @code{intdiv0()} to compute the digits of @value{PI} to as many places as you choose to set: @@ -31113,7 +31125,7 @@ BEGIN @{ for (m = digits * 4; m > 0; --m) @{ d = m * 2 + 1 x = pi * m - intdiv(x, d, result) + intdiv0(x, d, result) pi = result["quotient"] pi = pi + two @} @@ -32156,14 +32168,14 @@ pointed to by @code{result}. @itemx make_number_mpz(void *mpz, awk_value_t *result); This function creates a GMP number value in @code{result}. The @code{mpz} must be from a call to @code{get_mpz_ptr()} -(and thus be or real underlying type @code{mpz_ptr}). +(and thus be of real underlying type @code{mpz_ptr}). @command{gawk} takes ownership of this memory. @item static inline awk_value_t * @itemx make_number_mpfr(void *mpfr, awk_value_t *result); This function creates an MPFR number value in @code{result}. The @code{mpfr} must be from a call to @code{get_mpfr_ptr()}. -(and thus be or real underlying type @code{mpfr_ptr}) +(and thus be of real underlying type @code{mpfr_ptr}) @command{gawk} takes ownership of this memory. @item static inline awk_value_t * @@ -35673,7 +35685,7 @@ for more information. @cindex extensions, where to find @cindex @code{gawkextlib} project -The @uref{http://sourceforge.net/projects/gawkextlib/, @code{gawkextlib}} +The @uref{https://sourceforge.net/projects/gawkextlib/, @code{gawkextlib}} 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. @@ -35705,13 +35717,13 @@ Redis extension Select extension @item -XML parser extension, using the @uref{http://expat.sourceforge.net, Expat} +XML parser extension, using the @uref{https://expat.sourceforge.net, Expat} XML parsing library @end itemize @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{https://git-scm.com, Git} distributed source code control system. The command is as follows: @example @@ -35719,7 +35731,7 @@ git clone git://git.code.sf.net/p/gawkextlib/code gawkextlib-code @end example @cindex Expat XML parser library -You will need to have the @uref{http://expat.sourceforge.net, Expat} +You will need to have the @uref{https://expat.sourceforge.net, Expat} XML parser library installed in order to build and use the XML extension. In addition, you must have the GNU Autotools installed @@ -35739,7 +35751,7 @@ make && make check @ii{Build and check that all is OK} make install @ii{Install gawk} @end example -Next, go to @url{http://sourceforge.net/projects/gawkextlib/files} to +Next, go to @url{https://sourceforge.net/projects/gawkextlib/files} to download @code{gawkextlib} and any extensions that you would like to build. The @file{README} file at that site explains how to build the code. If you installed @command{gawk} in a non-standard location, you will need to @@ -36196,7 +36208,7 @@ The ability to delete all of an array at once with @samp{delete @var{array}} not permitted by the POSIX standard. The 2008 POSIX standard can be found online at -@url{http://www.opengroup.org/onlinepubs/9699919799/}. +@url{http://pubs.opengroup.org/onlinepubs/9699919799/}. @node BTL @@ -38945,11 +38957,19 @@ but we might well want to fix it. @appendixsubsec Submitting Bug Reports Before reporting a bug, make sure you have really found a genuine bug. -Carefully reread the documentation and see if it says you can do +First, verify that you have the latest version of @command{gawk}. +Many bugs (usually subtle ones) are fixed at each release, and if yours +is out of date, the problem may already have been solved. + +Second, please see if setting the environment variable @env{LC_ALL} +to @code{LC_ALL=C} causes things to behave as you expect. If so, it's +a locale issue, and may or may not really be a bug. + +Third, carefully reread the documentation and see if it says you can do 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 +Finally, before reporting a bug or trying to fix it yourself, try to isolate it to the smallest possible @command{awk} program and input @value{DF} that reproduce the problem. Then send us the program and @value{DF}, some idea of what kind of Unix system you're using, @@ -39137,7 +39157,7 @@ git clone git://github.com/onetrueawk/awk bwkawk @end example @noindent -This command creates a copy of the @uref{http://git-scm.com, Git} +This command creates a copy of the @uref{https://git-scm.com, Git} repository in a directory named @file{bwkawk}. If you leave that argument off the @command{git} command line, the repository copy is created in a directory named @file{awk}. @@ -39184,6 +39204,11 @@ is similar to @command{gawk}'s @xref{Common Extensions} for a list of extensions in @command{mawk} that are not in POSIX @command{awk}. +@item @command{mawk} 2.0 +In 2016, Michael Brennan resumed @command{mawk} development. +His development snapshots are available via Git from the project's +@uref{https://github.com/mikebrennan000/mawk-2, GitHub page}. + @cindex Sumner, Andrew @cindex @command{awka} compiler for @command{awk} @cindex source code, @command{awka} @@ -39197,7 +39222,7 @@ It also has a number of extensions. The @command{awk} translator is released under the GPL, and the library is under the LGPL. -To get @command{awka}, go to @url{http://sourceforge.net/projects/awka}. +To get @command{awka}, go to @url{https://sourceforge.net/projects/awka}. @c You can reach Andrew Sumner at @email{andrew@@zbcom.net}. @c andrewsumner@@yahoo.net @@ -39226,7 +39251,7 @@ applications within a single executable. It is aimed at embedded systems. It includes a full implementation of POSIX @command{awk}. When building it, be careful not to do @samp{make install} as it will overwrite copies of other applications in your @file{/usr/local/bin}. For more -information, see the @uref{http://busybox.net, project's home page}. +information, see the @uref{https://busybox.net, project's home page}. @cindex OpenSolaris @cindex Solaris, POSIX-compliant @command{awk} @@ -39245,7 +39270,7 @@ has not been done, at least to our knowledge. @cindex source code, Illumos @command{awk} The source code used to be available from the OpenSolaris website. However, that project was ended and the website shut down. Fortunately, the -@uref{http://wiki.illumos.org/display/illumos/illumos+Home, Illumos project} +@uref{https://wiki.illumos.org/display/illumos/illumos+Home, Illumos project} makes this implementation available. You can view the files one at a time from @uref{https://github.com/joyent/illumos-joyent/blob/master/usr/src/cmd/awk_xpg4}. @@ -39257,7 +39282,7 @@ This is an interpreter for @command{awk} written in Java. It claims to be a full interpreter, although because it uses Java facilities for I/O and for regexp matching, the language it supports is different from POSIX @command{awk}. More information is available on the -@uref{http://jawk.sourceforge.net, project's home page}. +@uref{https://jawk.sourceforge.net, project's home page}. @item Libmawk @cindex libmawk @@ -39278,7 +39303,7 @@ modified version of BWK @command{awk}, described earlier.) @cindex QSE @command{awk} @cindex source code, QSE @command{awk} This is an embeddable @command{awk} interpreter. For more information, -see @uref{http://code.google.com/p/qse/} and @uref{http://awk.info/?tools/qse}. +see @uref{https://code.google.com/p/qse/} and @uref{http://awk.info/?tools/qse}. @item @command{QTawk} @cindex QuikTrim Awk @@ -39296,7 +39321,7 @@ since approximately 2014. @item Other versions See also the ``Versions and implementations'' section of the -@uref{http://en.wikipedia.org/wiki/Awk_language#Versions_and_implementations, +@uref{https://en.wikipedia.org/wiki/Awk_language#Versions_and_implementations, Wikipedia article} on @command{awk} for information on additional versions. @end table @@ -39422,7 +39447,7 @@ However, if you want to modify @command{gawk} and contribute back your changes, you will probably wish to work with the development version. To do so, you will need to access the @command{gawk} source code repository. The code is maintained using the -@uref{http://git-scm.com, Git distributed version control system}. +@uref{https://git-scm.com, Git distributed version control system}. You will need to install it if your system doesn't have it. Once you have done so, use the command: @@ -41152,7 +41177,7 @@ programming languages, such as C and C++. In the computer arena, important standards like those for C, C++, and POSIX become both American national and ISO international standards simultaneously. This @value{DOCUMENT} refers to Standard C as ``ISO C'' throughout. -See @uref{http://www.iso.org/iso/home/about.htm, the ISO website} for more +See @uref{https://www.iso.org/iso/home/about.htm, the ISO website} for more information about the name of the organization and its language-independent three-letter acronym. @@ -41294,7 +41319,7 @@ the Unix heritage of these standards. The main standard of interest for @command{awk} users is @cite{IEEE Standard for Information Technology, Standard 1003.1-2008}. The 2008 POSIX standard can be found online at -@url{http://www.opengroup.org/onlinepubs/9699919799/}. +@url{http://pubs.opengroup.org/onlinepubs/9699919799/}. @item Precedence The order in which operations are performed when operators are used @@ -41473,7 +41498,7 @@ the world and later moved into commercial environments as a software development system and network server system. There are many commercial versions of Unix, as well as several work-alike systems whose source code is freely available (such as GNU/Linux, @uref{http://www.netbsd.org, NetBSD}, -@uref{http://www.freebsd.org, FreeBSD}, and @uref{http://www.openbsd.org, OpenBSD}). +@uref{https://www.freebsd.org, FreeBSD}, and @uref{http://www.openbsd.org, OpenBSD}). @item UTC The accepted abbreviation for ``Universal Coordinated Time.'' diff --git a/doc/it/ChangeLog b/doc/it/ChangeLog index 112686c5..91e21101 100644 --- a/doc/it/ChangeLog +++ b/doc/it/ChangeLog @@ -1,3 +1,7 @@ +2017-10-01 Antonio Giovanni Colombo <azc100@gmail.com> + + * gawktexi.in: Italian translation updated. + 2017-04-12 Arnold D. Robbins <arnold@skeeve.com> * ChangeLog: created. diff --git a/doc/it/gawktexi.in b/doc/it/gawktexi.in index 678125e7..d238dba7 100644..100755 --- a/doc/it/gawktexi.in +++ b/doc/it/gawktexi.in @@ -13,7 +13,7 @@ @end direntry @dircategory Programmi di utilit@`a individuale @direntry -* awk: (gawk)Avviare gawk. Scansione e processo di testi. +* awk: (gawk)Avviare Gawk. Scansione e processo di testi. @end direntry @c Enable better indexing, requires texindex from Texinfo 6 or later. @@ -46,6 +46,14 @@ @set MINUS @end ifdocbook +@iftex +@set TIMES @times +@end iftex +@ifnottex +@set TIMES * +@end ifnottex + + @set xref-automatic-section-title @c The following information should be updated here only! @@ -54,9 +62,9 @@ @c These apply across the board. @c Aggiornata alla versione del 3 marzo 2017 -@set UPDATE-MONTH gennaio 2017 -@set VERSION 4.1 -@set PATCHLEVEL 4 +@set UPDATE-MONTH Settembre 2017 +@set VERSION 4.2 +@set PATCHLEVEL 0 @c added Italian hyphenation stuff @hyphenation{ven-go-no o-met-te-re o-met-ten-do} @@ -78,6 +86,7 @@ @set SECTION sezione @set SECTIONS sezioni @set SUBSECTION sottosezione +@set SUBSECTIONS sottosezioni @ifclear SMALLPRINT @set DARKCORNER @inmargin{@image{lflashlight,1cm}, @image{rflashlight,1cm}} @end ifclear @@ -94,6 +103,7 @@ @set SECTION nodo secondario @set SECTIONS nodi secondari @set SUBSECTION nodo +@set SUBSECTIONS nodi @set DARKCORNER (a.b.) @set COMMONEXT (e.c.) @set PAGE videata @@ -105,6 +115,7 @@ @set SECTION sezione @set SECTIONS sezioni @set SUBSECTION sottosezione +@set SUBSECTIONS sottosezioni @set DARKCORNER (a.b.) @set COMMONEXT (e.c.) @set PAGE videata @@ -116,6 +127,7 @@ @set SECTION sezione @set SECTIONS sezioni @set SUBSECTION sottosezione +@set SUBSECTIONS sottosezioni @set DARKCORNER (a.b.) @set COMMONEXT (e.c.) @set PAGE pagina @@ -127,6 +139,7 @@ @set SECTION sezione @set SECTIONS sezioni @set SUBSECTION sottosezione +@set SUBSECTIONS sottosezioni @set DARKCORNER (a.b.) @set COMMONEXT (e.c.) @set PAGE pagina @@ -138,6 +151,7 @@ @set SECTION sezione @set SECTIONS sezioni @set SUBSECTION sottosezione +@set SUBSECTIONS sottosezioni @set DARKCORNER (a.b.) @set COMMONEXT (e.c.) @set PAGE pagina @@ -293,7 +307,7 @@ Some comments on the layout for TeX. <literallayout class="normal">Free Software Foundation 51 Franklin Street, Fifth Floor -- Boston, MA 02110-1301 USA Tel.: +1-617-542-5942 Fax: +1-617-542-2652 Email: <email>gnu@@gnu.org</email> -URL: <ulink url="http://www.gnu.org">http://www.gnu.org/</ulink></literallayout> +URL: <ulink url="https://www.gnu.org">https://www.gnu.org/</ulink></literallayout> <literallayout class="normal">Copyright © 1989, 1991, 1992, 1993, 1996–2005, 2007, 2009–2017 Free Software Foundation, Inc. @@ -310,7 +324,7 @@ Marco Curreli -- <email>marcocurreli(chiocciola)tiscali(punto)it</email> <para>Pubblicato da:</para> <literallayout class="normal">Free Software Foundation Email: <email>gnu@@gnu.org</email> -URL: <ulink url="http://www.gnu.org">http://www.gnu.org/</ulink> +URL: <ulink url="https://www.gnu.org">https://www.gnu.org/</ulink> e da: Italian Linux Documentation Project (ILDP) @@ -353,7 +367,7 @@ Una copia della licenza @`e acclusa nella sezione intitolata @ifset FOR_PRINT Una copia della licenza si pu@`o trovare in internet all'indirizzo -@uref{http://www.gnu.org/software/gawk/manual/html_node/GNU-Free-Documentation-License.html, +@uref{https://www.gnu.org/software/gawk/manual/html_node/GNU-Free-Documentation-License.html, il sito web del Progetto GNU}. @end ifset @@ -404,7 +418,7 @@ Titolo originale:@* Published by @strong{Free Software Foundation}@* 51 Franklin Street, Fifth Floor -- Boston, MA 02110-1301 USA @* Tel.: +1-617-542-5942 -- Fax: +1-617-542-2652 -- Email: @email{gnu@@gnu.org} @* -URL: @uref{http://www.gnu.org/} +URL: @uref{https://www.gnu.org/} @sp 0 @c This one is correct for gawk 3.1.0 from the FSF ISBN 1-882114-28-0 @@ -419,7 +433,7 @@ Marco Curreli -- @email{marcocurreli(chiocciola)tiscali(punto)it}@* @sp 1 Pubblicato da: Free Software Foundation@* -Email: @email{gnu@@gnu.org}; URL: @uref{http://www.gnu.org/} +Email: @email{gnu@@gnu.org}; URL: @uref{https://www.gnu.org/} e da: Italian Linux Documentation Project (ILDP)@* @@ -660,7 +674,14 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation, * Sommario sulla separazione campi:: Alcuni punti finali e una tavola di sommario. * Dimensione costante:: Leggere campi di larghezza costante. -* Separazione in base al contenuto:: Definire campi dal loro Contenuto. +* Dati di larghezza fissa:: Elaborare dati di lunghezza fissa. +* Saltare campi intermedi:: Saltare campi intermedi. +* Consentire dati a fine record:: Trattare dati opzionali a fine record. +* Campi con dati a larghezza fissa:: Valore di campi con dati a larghezza + fissa. +* Separazione in base al contenuto:: Definire campi dal loro contenuto. +* Controllare la creazione di campi:: Controllare come @command{gawk} sta + dividendo i record. * Righe multiple:: Record su righe multiple * Getline:: Richiedere input usando @code{getline}. * Getline semplice:: Usare @code{getline} senza argomenti. @@ -1028,8 +1049,9 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation, * Tentare di arrotondare:: Tentare di aggiungere bit di precisione e arrotondare. * Impostare la precisione:: Impostare la precisione. -* Impostare modi di arrotondare:: Impostare la modalit@`a di +* Impostare modo di arrotondare:: Impostare la modalit@`a di arrotondamento. +* Controllare disponibilit@`a MPFR:: Come controllare se MPFR @`e disponibile. * Interi a precisione arbitraria:: Aritmetica dei numeri interi a precisione arbitraria con @command{gawk}. * Problemi virgola mobile POSIX:: Confronto tra standard e uso corrente. @@ -1070,6 +1092,8 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation, modificarle. * Variabili dell'estensione API:: Variabili fornite dall'API. * Versione dell'estensione:: Informazioni sulla versione API. +* Versione estensione GMP/MPFR:: Informazioni sulla versione disponibile + di GMP ed MPFR. * Variabili informative di estens. API:: Variabili che forniscono informazioni sull'invocazione di @command{gawk}. * Codice predefinito di un'estensione API:: Codice predefinito di interfaccia API. @@ -1714,12 +1738,12 @@ Infine, vien fatta rilevare ogni funzionalit@`a di @command{gawk} non inclusa nello standard POSIX per @command{awk}. @ifnotinfo -Questo @value{DOCUMENT} ha il difficile compito di essere tanto una guida +Questo @value{DOCUMENT} ha il difficile compito di essere sia una guida introduttiva che un manuale di riferimento. I neofiti possono tranquillamente saltare i dettagli che sembrano loro troppo complessi. Possono anche ignorare i molti riferimenti incrociati, preparati avendo in mente gli utenti esperti e per le versioni Info e -@uref{http://www.gnu.org/software/gawk/manual/, HTML} +@uref{https://www.gnu.org/software/gawk/manual/, HTML} del @value{DOCUMENT}. @end ifnotinfo @@ -1946,7 +1970,7 @@ delle appendici. Si possono trovare in rete ai seguenti indirizzi: @itemize @value{BULLET} @item -@uref{http://www.gnu.org/software/gawk/manual/html_node/Notes.html, +@uref{https://www.gnu.org/software/gawk/manual/html_node/Notes.html, L'appendice sulle note di implementazione} descrive come disabilitare le estensioni @command{gawk}, come contribuire scrivendo del nuovo codice per @command{gawk}, dove reperire informazioni @@ -1954,20 +1978,20 @@ su alcune possibili future direzioni dello sviluppo di @command{gawk}, e sulle decisioni di progetto che hanno influito sulle estensioni API. @item -@uref{http://www.gnu.org/software/gawk/manual/html_node/Basic-Concepts.html, +@uref{https://www.gnu.org/software/gawk/manual/html_node/Basic-Concepts.html, L'appendice sui concetti fondamentali} fornisce del materiale di riferimento a livello elementare per chi sia completamente a digiuno di programmazione informatica. @item -@uref{http://www.gnu.org/software/gawk/manual/html_node/Glossary.html, +@uref{https://www.gnu.org/software/gawk/manual/html_node/Glossary.html, Il Glossario} -definisce la maggior parte, se non tutti, i termini significativi usati +definisce la maggior parte, o quasi, dei termini significativi usati nel corso del libro. Se si incontrano termini con cui non si ha familiarit@`a, questo @`e il posto dove cercarli. @item -@uref{http://www.gnu.org/software/gawk/manual/html_node/GNU-Free-Documentation-License.html, la licenza GNU FDL} +@uref{https://www.gnu.org/software/gawk/manual/html_node/GNU-Free-Documentation-License.html, la licenza GNU FDL} @`e la licenza che vale per questo @value{DOCUMENT}. @end itemize @@ -1982,7 +2006,7 @@ state omesse dall'edizione a stampa ma sono disponibili online. @unnumberedsec Convenzioni tipografiche @cindex Texinfo -Questo @value{DOCUMENT} @`e scritto in @uref{http://www.gnu.org/software/texinfo/, Texinfo}, +Questo @value{DOCUMENT} @`e scritto in @uref{https://www.gnu.org/software/texinfo/, Texinfo}, il linguaggio di formattazione della documentazione GNU. Viene usato un unico file sorgente Texinfo per produrre sia la versione a stampa della documentazione sia quella online. @@ -2130,9 +2154,9 @@ per la consultazione @end ifclear La GPL si applica al codice sorgente in linguaggio C per @command{gawk}. Per saperne di pi@`u sulla FSF e sul Progetto GNU, -si veda @uref{http://www.gnu.org, la pagina principale del Progetto GNU}. +si veda @uref{https://www.gnu.org, la pagina principale del Progetto GNU}. Questo @value{DOCUMENT} si pu@`o leggere anche dal -@uref{http://www.gnu.org/software/gawk/manual/, sito di GNU}. +@uref{https://www.gnu.org/software/gawk/manual/, sito di GNU}. @ifclear FOR_PRINT Una shell, un editor (Emacs), compilatori ottimizzanti C, C++ e @@ -2223,8 +2247,9 @@ dovreste prima guardare il file @file{NEWS} nella distribuzione di @command{gawk}, che fornisce un sommario ad alto livello dei cambiamenti in ciascuna versione. -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. +@`E poi possibile consultare la @uref{https://www.gnu.org/software/gawk/manual/, +versione online} di questo @value{DOCUMENT} per informazioni su eventuali +nuove funzionalit@`a. @end ifset @ifclear FOR_PRINT @@ -2379,6 +2404,7 @@ versione 3.1 di @command{gawk}. @cindex Deifik, Scott @cindex Demaille, Akim @cindex G., Daniel Richard +@cindex Guerrero, Juan Manuel @cindex Hankerson, Darrel @cindex Jaegermann, Michal @cindex Kahrs, J@"urgen @@ -2399,6 +2425,7 @@ Stephen Davies, Scott Deifik, Akim Demaille, Daniel Richard G., +Juan Manuel Guerrero, Darrel Hankerson, Michal Jaegermann, J@"urgen Kahrs, @@ -2784,7 +2811,7 @@ awk -f consiglio @end example @noindent -@`e equivalente al comando: +equivale al comando: @example awk 'BEGIN @{ print \"Non v\47allarmate!\" @}' @@ -3215,16 +3242,65 @@ e della shell POSIX, il problema che stiamo per vedere emerge abbastanza spesso presso parecchi utenti, e per questo ne parliamo. @cindex Brink, Jeroen -Le ``shell'' nei sistemi Microsoft Windows usaso il carattere doppio apice +Le ``shell'' nei sistemi Microsoft Windows usano il carattere doppio apice per protezione, e rendono difficile o impossibile inserire un carattere -doppio apice in uno @dfn{script} scritto su una riga di comando. -l'esempio che segue, per il quale ringraziamo Jeroen Brink, mostra come -stampare tutte le righe di un file, racchiudendole tra doppi apici: +doppio apice letterale in uno @dfn{script} scritto su una riga di comando. +L'esempio che segue, per il quale ringraziamo Jeroen Brink, mostra come +proteggere i doppi apici, con questo script di una sola riga, che stampa +tutte le righe di un file, racchiudendole tra doppi apici: + +@example +@{ print "\"" $0 "\"" @} @var{file} +@end example + +@noindent +In una riga di comando in ambiente MS-Windows lo script di una riga +mostrato sopra pu@`o essere eseguito immettendo: @example gawk "@{ print \"\042\" $0 \"\042\" @}" @var{file} @end example +In questo esempio, lo @samp{\042} @`e il codice ottale che rappresenta un +doppio apice; @command{gawk} lo trasforma in un carattere doppio apice +per poi scriverlo in output con l'istruzione @code{print}. + +In ambiente MS-Windows proteggere i doppi apici richiede questo +espediente perch@'e occorre usare delle barre inverse per proteggere +i doppi apici, ma le barre inverse non sono protette nella solita maniera; +in effetti le barre inverse vanno raddoppiate (oppure no), a seconda che +siano seguite (oppure no) da un doppio apice. +La regola in ambiente MS-Windows per racchiudere tra doppi apici una +stringa @`e la seguente: + +@enumerate +@item +Per ogni doppio apice presente nella stringa originale, sia @var{N} il +numero di barre inverse presenti nella stringa prima di esso (@var{N} +potrebbe anche valere zero). Si rimpiazzino queste @var{N} barre inverse +con @math{2@value{VOLTE}@var{N}+1} barre inverse. + +@item +Sia poi @var{N} il numero di barre inverse alla fine della stringa originale, +(@var{N} potrebbe anche valere zero). Si rimpiazzino queste @var{N} +barre inverse con @math{2@value{VOLTE}@var{N}} barre inverse + +@item +La stringa cos@`{@dotless{i}} prodotta va racchiusa fra doppi apici. +@end enumerate + +Quindi, per racchiudere fra doppi apici lo script di +una linea @samp{@{ print "\"" $0 "\"" @}} del precedente esempio, si +dovrebbe fare cos@`{@dotless{i}}: + +@example +gawk "@{ print \"\\\"\" $0 \"\\\"\" @}" @var{file} +@end example + +@noindent +Comunque, usare la notazione @samp{\042} invece che @samp{\\\"} rimane +possibile, e di pi@`u facile lettura, perch@'e le barre inverse che non sono +seguite da un doppio apice non hanno bisogno di essere duplicate. @node File dati di esempio @section @value{DDF} per gli esempi @@ -4151,6 +4227,25 @@ Questo @`e particolarmente utile quando si hanno funzioni di libreria che si vogliono usare dai programmi da riga di comando (@pxref{AWKPATH (Variabile)}). +Si noti che @command{gawk} elabora ogni stringa come se fosse terminata +da un carattere di ritorno a capo (anche se non @`e questo il caso). +Ci@`o facilita la costruzione del programma completo. + +@quotation ATTENZIONE +Non c'@`e ancora alcuna specifica che imponga che ogni @var{testo-di-programma} +costituisca un'unit@`a sintattica completa. P.es., il codice che segue +funziona a tutt'oggi: + +@example +$ @kbd{gawk -e 'BEGIN @{ a = 5 ;' -e 'print a @}'} +@print{} 5 +@end example + +@noindent +Comunque ci@`o potrebbe cambiare in futuro, e per questo motivo non @`e una +buona idea utilizzare questa funzionalit@`a. +@end quotation + @item @option{-E} @var{file} @itemx @option{--exec} @var{file} @cindex @option{-E}, opzione @@ -4178,7 +4273,7 @@ codice sorgente @command{awk} (con @option{-e}) all'applicazione CGI.@footnote{per maggiori dettagli, si veda la Sezione 4.4 di @uref{http://www.ietf.org/rfc/rfc3875, RFC 3875}. Si veda anche -@uref{http://lists.gnu.org/archive/html/bug-gawk/2014-11/msg00022.html, +@uref{https://lists.gnu.org/archive/html/bug-gawk/2014-11/msg00022.html, note esplicative spedite alla mailing list @command{gawk} bug}.} Quest'opzione dovrebbe essere usata con @dfn{script} @samp{#!} @@ -4725,7 +4820,7 @@ il percorso viene cercato di nuovo dopo aver aggiunto il suffisso Il meccanismo di ricerca del percorso di @command{gawk} @`e simile a quello della shell. -(Si veda @uref{http://www.gnu.org/software/bash/manual/, +(Si veda @uref{https://www.gnu.org/software/bash/manual/, @cite{The Bourne-Again SHell manual}}.) Un elemento nullo nel percorso indica la directory corrente. (Un elemento nullo @`e indicato iniziando o terminando il percorso con un segno @@ -5091,7 +5186,7 @@ $ @kbd{gawk '@@load "ordchr"; BEGIN @{print chr(65)@}'} @end example @noindent -Questo @`e equivalente all'esempio seguente: +Questo equivale all'esempio seguente: @example $ @kbd{gawk -lordchr 'BEGIN @{print chr(65)@}'} @@ -5224,27 +5319,6 @@ programmi erano stati scritti. Le funzioni predefinite standard di command{awk}, per esempio @code{sin()} o @code{substr()} @emph{non} ammettono questa possibilit@`a. -Il vettore @code{PROCINFO["argv"]} contiene tutti gli argomenti della -riga di comando (una volta espansi i metacaratteri ed elaborata la -ridirezione, nelle piattaforme in cui ci@`o dev'essere fatto manualmente -dal programma), con indici che vanno da 0 as @code{argc} @minus{} 1. -Per esempio, @code{PROCINFO["argv"][0]} conterr@`a il nome con cui @`e -stato invocato @command{gawk}. L'esempio seguente mostra come @`e -possibile usare questa funzionalit@`a: - -@example -awk ' -BEGIN @{ - for (i = 0; i < length(PROCINFO["argv"]); i++) - print i, PROCINFO["argv"][i] -@}' -@end example - -@`E da tener presente che questo vettore @`e diverso dal vettore -standard @code{ARGV} che non comprende quegli argomenti della riga di -comando che sono gi@`a stati elaborati da -@command{gawk} (@pxref{ARGC e ARGV}). - @end ignore @node Sommario invocazione @@ -5671,7 +5745,7 @@ come metacaratteri veri e propri, e questo @`e ci@`o che @command{gawk} fa. In modalit@`a compatibile (@pxref{Opzioni}), @command{gawk} tratta i caratteri scritti come sequenze ottali ed esadecimali letteramente, quando sono usati in costanti @dfn{regexp}. Quindi, -@code{/a\52b/} @`e equivalente a @code{/a\*b/}. +@code{/a\52b/} equivale a @code{/a\*b/}. @end sidebar @node Operatori di espressioni regolari @@ -5933,7 +6007,7 @@ All'interno di un'espressione tra parentesi quadre, una @dfn{espressione di intervallo} @`e formata da due caratteri separati da un trattino. Individua ogni singolo carattere compreso tra i due caratteri, ordinati secondo l'insieme di caratteri in uso nel sistema. Per esempio, -@samp{[0-9]} @`e equivalente a @samp{[0123456789]}. +@samp{[0-9]} equivale a @samp{[0123456789]}. (Si veda @ref{Intervalli e localizzazione} per una spiegazione di come lo standard POSIX e @command{gawk} sono cambiati nel corso degli anni. La cosa ha un interesse principalmente storico.) @@ -6631,6 +6705,8 @@ getline (@pxref{Getline}). * Dimensione costante:: Leggere campi di larghezza costante. * Separazione in base al contenuto:: Definire campi dal loro contenuto. * Righe multiple:: Leggere record che sono su pi@`u righe. +* Controllare la creazione di campi:: Controllare come @command{gawk} sta + dividendo i record. * Getline:: Leggere file sotto il controllo del programma, usando la funzione @code{getline}. @@ -7230,7 +7306,7 @@ $ @kbd{echo a b c d | awk '@{ OFS = ":"; $2 = ""; $6 = "nuovo"} @noindent Il campo intermedio, @code{$5}, @`e creato con un valore vuoto -(indicato dalla seconda coppia di due punti adiacenti), +(indicato dalla seconda coppia di due punti @code{:} adiacenti), e @code{NF} @`e aggiornato col valore sei. @cindex angolo buio, variabile @code{NF}, decremento @@ -7812,18 +7888,38 @@ di @command{gawk}. Se si @`e un utente alle prime armi di @command{awk}, la si pu@`o saltare in prima lettura. @command{gawk} fornisce una funzionalit@`a per il trattamento di campi -a larghezza fissa senza un separatore di campo distintivo. Per esempio, -dati di questo tipo si trovano nell'input per vecchi programmi Fortran dove -dei numeri sono elencati uno dopo l'altro, o nell'output di programmi che -non prevedono che il loro output sia dato in input ad altri programmi. +a larghezza fissa senza un separatore di campo distintivo. Questa +funzionalit@`a @`e trattata +@ifnotinfo +nelle seguenti +@end ifnotinfo +@ifinfo +nei seguenti +@end ifinfo +@value{SUBSECTIONS}. + +@menu +* Dati di larghezza fissa:: Elaborare dati di lunghezza fissa. +* Saltare campi intermedi:: Saltare campi intermedi. +* Consentire dati a fine record:: Trattare dati opzionali a fine record. +* Campi con dati a larghezza fissa:: Valore di campi con dati a larghezza + fissa. +@end menu + +@node Dati di lunghezza fissa +@subsection Elaborare dati di lunghezza fissa + +Un esempio di dati a lunghezza fissa pu@`o essere l'input per vecchi programmi +Fortran dove dei numeri sono elencati uno dopo l'altro, o l'output di +programmi che non prevedono che questo loro output sia dato in input ad +altri programmi. Un esempio di quest'ultimo caso @`e una tabella dove tutte le colonne sono allineate usando un numero variabile di spazi e dove @emph{i campi vuoti sono solo spazi}. Chiaramente, la normale divisione in campi di @command{awk} basata su @code{FS} non funziona bene in questa situazione. -Sebbene un programma @command{awk} -portabile possa usare una serie di chiamate @code{substr()} su @code{$0} -(@pxref{Funzioni per stringhe}), +Sebbene un programma @command{awk} portabile possa usare una serie di +chiamate @code{substr()} su @code{$0} (@pxref{Funzioni per stringhe}), questo @`e scomodo e inefficiente se il numero dei campi @`e elevato. @cindex risoluzione di problemi, errori fatali, specificare larghezza dei campi @@ -7839,7 +7935,9 @@ del campo, @emph{comprese} le colonne tra i campi. Se si vogliono ignorare le colonne tra i campi si pu@`o specificare la loro larghezza come un campo separato che verr@`a poi ignorato. @`E un errore fatale definire una larghezza di campo che abbia un valore -negativo. I dati seguenti costituiscono l'output del programma di utilit@`a +negativo. + +I dati seguenti costituiscono un output del programma di utilit@`a Unix @command{w}. @`E utile per spiegare l'uso di @code{FIELDWIDTHS}: @example @@ -7869,7 +7967,7 @@ NR > 2 @{ sub(/^ +/, "", inat) # togli spazi prima del valore if (inat == "") inat = 0 - if (inat ~ /:/) @{ + if (inat ~ /:/) @{ # hh:mm split(inat, t, ":") inat = t[1] * 60 + t[2] @} @@ -7910,7 +8008,96 @@ usare la funzionalit@`a @code{FIELDWIDTHS} per semplificare la lettura dei dati. (Naturalmente, riuscire a eseguire @command{gawk} su un sistema con lettori di schede @`e un'altra storia!) -@cindex @command{gawk}, separazione in campi e +@node Saltare campi intermedi +@subsection Saltare campi intermedi + +A partire dalla @value{PVERSION} 4.2, ogni specifica di una larghezza di campo +pu@`o essere facoltativamente preceduta da un valore, delimitato dai due punti +@code{:}, che indica il numero di caratteri da saltare prima dell'inizio del campo +successivo. Quindi, il programma precedente potrebbe essere riscritto per +specificare @code{FIELDWIDTHS} in questo modo: + +@example +BEGIN @{ FIELDWIDTHS = "8 1:5 4:7 6 1:6 1:6 2:33" @} +@end example + +In questo modo si eliminano alcuni degli spazi bianchi che separano fra +loro i campo. Dopo esser stato cos@`{@dotless{i}} modificato, il programma produce +i risultati seguenti: + +@example +hzang ttyV3 50 +eklye ttyV5 0 +dportein ttyV6 107 +gierd ttyD3 1 +dave ttyD4 0 +brent ttyp0 286 +dave ttyq4 1296000 +@end example + +@node Consentire dati a fine record +@subsection Trattare dati opzionali a fine record + +A volte dati di larghezza fissa possono essere seguiti da ulteriori dati +la cui lunghezza non @`e nota @dfn{a priori}. Tali dati possono essere +presenti o meno, ma, nel caso siano presenti, dovrebbe essere possibile +elaborarli all'interno di un programma @command{awk}. + +A partire dalla @value{PVERSION} 4.2, per consentire di poter designare +``tutto il resto del record dopo i campi a lunghezza fissa'' +@command{gawk} prevede la possibilit@`a di aggiungere un carattere @samp{*} +in fondo alla descrizione contenuta in @code{FIELDWIDTHS}. +Ci pu@`o essere un solo carattere @samp{*}, e dev'essere l'ultimo carattere +diverso da uno spazio in @code{FIELDWIDTHS}. +Per esempio: + +@example +$ @kbd{cat fw.awk} @ii{Visualizza il programma} +@print{} BEGIN @{ FIELDWIDTHS = "2 2 *" @} +@print{} @{ print NF, $1, $2, $3 @} +$ @kbd{cat fw.in} @ii{Visualizza l'input dell'esempio} +@print{} 1234abcdefghi +$ @kbd{gawk -f fw.awk fw.in} @ii{Esegui il programma} +@print{} 3 12 34 abcdefghi +@end example + +@node Campi con dati a larghezza fissa +@subsection Valore di campi con dati a larghezza fissa + +Fin qui, tutto bene. Ma cosa succede se non ci sono abbastanza dati +rispetto a quelli che dovrebbero essere presenti in base alla descrizione +contenuta in @code{FIELDWIDTHS}? E invece cosa succede se i dati sono +pi@`u di quelli previsti? + +Per molti anni, quel che succede in questi casi non era definito con +esattezza. A partire dalla @value{PVERSION} 4.2 le regole sono le seguenti: + +@table @asis +@item Dati sufficienti per uno o pi@`u campi +Per esempio, se @code{FIELDWIDTHS} @`e impostato a @code{"2 3 4"} e il record +in input @`e @samp{aabbb}. In questo caso, @code{NF} @`e impostato a due. + +@item Dati insufficienti per la specifica di un campo +Per esempio, se @code{FIELDWIDTHS} @`e impostato a @code{"2 3 4"} e il record +in input @`e @samp{aab}. In questo caso, @code{NF} @`e impostato a due e +il campo numero @code{$2} ha come valore @code{"b"}. L'idea @`e che, anche se +ci sono meno caratteri di quelli previsti, qualcosa @`e presente, e quindi il +dato dovrebbe essere reso disponibile al programma. + +@item Troppi dati +Per esempio, se @code{FIELDWIDTHS} @`e impostato a @code{"2 3 4"} e il record +in input @`e @samp{aabbbccccddd}. In questo caso, @code{NF} @`e impostato a +tre e i caratteri in eccesso (@samp{ddd}) sono ignorati. Se si vuole che +@command{gawk} elabori i caratteri in pi@`u, si deve aggiungere un @samp{*} +in fondo, nel valore di @code{FIELDWIDTHS}. + +@item Troppi dati, ma @`e stato specificato @samp{*} +Per esempio, se @code{FIELDWIDTHS} @`e impostato a @code{"2 3 4 *"} e il record +in input @`e @samp{aabbbccccddd}. In questo caso, @code{NF} @`e impostato a +quattro, e @code{$4} ha come valore @code{"ddd"}. + +@end table + L'assegnazione di un valore a @code{FS} fa s@`{@dotless{i}} che @command{gawk} usi @code{FS} per separare nuovamente i campi. Si pu@`o usare @samp{FS = FS} per ottenere questo effetto, senza dover conoscere il valore corrente di @code{FS}. @@ -7956,6 +8143,7 @@ di @command{gawk}. Se si @`e un utente alle prime armi di @command{awk}, la si pu@`o saltare in prima lettura. @cindex funzionalit@`a avanzate, specificare il contenuto dei campi + Normalmente, quando si usa @code{FS}, @command{gawk} definisce i campi come le parti del record che si trovano tra due separatori di campo. In altre parole, @code{FS} definisce cosa un campo @emph{non @`e}, invece di cosa @@ -8057,8 +8245,6 @@ campi con @code{FPAT}. Se si assegna un valore a @code{FPAT} la divisione in campi non viene effettuata utilizzando @code{FS} o @code{FIELDWIDTHS}. -Analogamente a @code{FIELDWIDTHS}, il valore di @code{PROCINFO["FS"]} -sar@`a @code{"FPAT"} se @`e in uso la suddivisione in campi in base al contenuto. @quotation NOTA Alcuni programmi esportano dei dati CSV che contengono dei ritorni a capo al @@ -8092,6 +8278,48 @@ Il meccanismo usato @`e determinato da quella tra le tre variabili---@code{FS}, @code{FIELDWIDTHS}, o @code{FPAT}---a cui sia stato assegnato un valore pi@`u recentemente. +@node Controllare la creazione di campi +@section Controllare come @command{gawk} sta dividendo i record + +@cindex @command{gawk}, separazione in campi e +Come visto sopra, @command{gawk} fornisce tre metodi indipendenti per +dividere i record in input in campi. Il meccanismo utilizzato dipende da +quale delle tre variabili---@code{FS}, @code{FIELDWIDTHS}, o +@code{FPAT}---@`e stato definito per ultimo. +Inoltre, un analizzatore di input che utilizzi l'API (Application +Programming Interface) pu@`o scegliere di modificare il meccanismo di +analisi dei record; si veda @ref{Analizzatori di input} per ulteriori informazioni +riguardo a questa funzionalit@`a. + +Per ripristinare la normale divisione in campi dopo aver fatto uso +di @code{FIELDWIDTHS} e/o @code{FPAT}, @`e sufficiente assegnare un valore +alla variabile @code{FS}. +Si pu@`o usare @samp{FS = FS} per farlo, senza bisogno di conoscere il +valore corrente di @code{FS}. + +Per determinare quale sia il tipo di divisione dei campi attiva al momento, +si usi @code{PROCINFO["FS"]} (@pxref{Variabili auto-assegnate}). +Il valore @`e @code{"FS"} se si usa la maniera normale di divisione dei campi, +@code{"FIELDWIDTHS"} se si usa la divisione in campi di lunghezza fissa +oppure @code{"FPAT"} se si una la divisione in campi in base al contenuto: + +@example +if (PROCINFO["FS"] == "FS") + @var{divisione normale in campi} @dots{} +else if (PROCINFO["FS"] == "FIELDWIDTHS") + @var{divisione in campi a lunghezza fissa} @dots{} +else if (PROCINFO["FS"] == "FPAT") + @var{divisione in campi in base al contenuto} @dots{} +else + @var{divisione in campi da analizzatore di input API} @dots{} + @ii{(funzionalit@`a avanzata)} +@end example + +Quest'informazione @`e utile se si sta scrivendo una funzione che +deve cambiare provvisoriamente @code{FS} o @code{FIELDWIDTHS}, leggere alcuni +record e poi ripristinare le inpostazioni originali. Si veda +(@pxref{Funzioni Passwd} per un esempio si una funzione di questo tipo. + @node Righe multiple @section Record su righe multiple @@ -11779,7 +12007,7 @@ in ordine di precedenza, da quella pi@`u alta a quella pi@`u bassa: @item @var{x} ^ @var{y} @itemx @var{x} ** @var{y} Elevamento a potenza; @var{x} elevato alla potenza @var{y}. @samp{2 ^ 3} -ha il valore otto; la sequenza di caratteri @samp{**} @`e equivalente a +ha il valore otto; la sequenza di caratteri @samp{**} equivale a @samp{^}. @value{COMMONEXT} @item - @var{x} @@ -12121,7 +12349,7 @@ pippo += 5 @end example @noindent -Questo @`e equivalente a: +Questo equivale a: @example pippo = pippo + 5 @@ -14194,7 +14422,7 @@ Se sono state scritte estensioni che modificano la gestione del record @pxref{Analizzatori di input}), @`e possibile richiamarle a questo punto, prima che @command{gawk} inizi a elaborare il file. (Questa @`e una funzionalit@`a @emph{molto} avanzata, usata al momento solo dal -@uref{http://sourceforge.net/projects/gawkextlib, progetto @code{gawkextlib}}.) +@uref{https://sourceforge.net/projects/gawkextlib, progetto @code{gawkextlib}}.) @end itemize La regola @code{ENDFILE} @`e chiamata quando @command{gawk} ha finito di @@ -14368,7 +14596,7 @@ da dei punti e virgola. Le parentesi graffe attorno a un'azione vanno usate anche se l'azione contiene una sola istruzione o se non contiene alcuna istruzione. Comunque, se si omette completamente l'azione, si possono omettere anche le -parentesi graffe. Un'azione omessa @`e equivalente a specificare +parentesi graffe. Un'azione omessa equivale a specificare @samp{@{ print $0 @}}: @example @@ -14715,7 +14943,7 @@ for (i = 1; i <= 100; i *= 2) Se non @`e necessaria, ognuna delle tre espressioni fra parentesi che segue la parola chiave @code{for} pu@`o essere omessa. Quindi, -@w{@samp{for (; x > 0;)}} @`e equivalente a @w{@samp{while (x > 0)}}. Se la +@w{@samp{for (; x > 0;)}} equivale a @w{@samp{while (x > 0)}}. Se la @var{condizione} @`e omessa del tutto, @`e ritenuta sempre vera, producendo un @dfn{ciclo infinito} (cio@`e, un ciclo che non finisce mai). @@ -15314,6 +15542,9 @@ Il suo valore di default @`e @code{"%.6g"}. Una lista di posizioni di colonna, separate da spazi, per dire a @command{gawk} come dividere campi in input posti su colonne fisse. +A partire dalla @value{PVERSION} 4.2, ogni lunghezza di campo pu@`o essere +facoltativamente preceduta da un valore, separato da due punti @code{:} +che specifica il numero di caratteri da ignorare prima dell'inizio del campo. Assegnando un valore a @code{FIELDWIDTHS}, le variabili @code{FS} e @code{FPAT} @emph{non} vengono usate per effettuare la divisione in campi. @@ -15478,7 +15709,7 @@ per default 53 bit (@pxref{Impostare la precisione}). La modalit@`a di arrotondamento da usare per operazioni aritmetiche a precisione arbitraria svolte sui numeri, per default @code{"N"} (@code{roundTiesToEven} nello standard -IEEE 754; @pxref{Impostare modi di arrotondare}). +IEEE 754; @pxref{Impostare modo di arrotondare}). @cindex @code{RS}, variabile @cindex variabile @code{RS} @@ -15766,6 +15997,27 @@ I seguenti elementi (elencati in ordine alfabetico) sono sicuramente sempre disponibili: @table @code +@item PROCINFO["argv"] +@cindex argomenti, riga di comando, @code{PROCINFO["argv"} +Il vettore @code{PROCINFO["argv"]} contiene tutti gli argomenti della riga di +comando (dopo che l'eventuale elaborazione di valutazione e ridirezione, +nelle piattaforme in cui ci@`o debba essere fatto a cura del programma), con +indici che vanno da 0 a @code{argc} @minus{} 1. Per esempio, +@code{PROCINFO["argv"][0]} conterr@`a il nome con cui @command{gawk} @`e stato +richiamato. Ecco un esempio di come si pu@`o usare questa funzionalit@`a: + +@example +gawk ' +BEGIN @{ + for (i = 0; i < length(PROCINFO["argv"]); i++) + print i, PROCINFO["argv"][i] +@}' +@end example + +Si prega di notare che questo vettore @`e diverso dal vettore standard +@code{ARGV} il quale non include quegli argomenti della riga di comando +che sono gi@`a stati elaborati da @command{gawk} (@pxref{ARGC e ARGV}). + @cindex effettivo, @dfn{ID di gruppo} dell'utente di @command{gawk} @item PROCINFO["egid"] Il valore restituito dalla chiamata di sistema @code{getegid()}. @@ -15782,7 +16034,9 @@ Il valore restituito dalla chiamata di sistema @code{geteuid()}. Questo elemento vale @code{"FS"} se @`e in uso la separazione in campi con @code{FS}, @code{"FIELDWIDTHS"} se @`e in uso quella con @code{FIELDWIDTHS}, -oppure @code{"FPAT"} se @`e in uso l'individuazione di campo con @code{FPAT}. +@code{"FPAT"} se @`e in uso l'individuazione di campo con @code{FPAT}, o +@code{"API"} se la divisione in campi @`e controllata da un analizzatore +di input tramite API. @item PROCINFO["gid"] @cindex @dfn{ID di gruppo} dell'utente @command{gawk} @@ -17923,11 +18177,12 @@ troncato togliendo i decimali. Per esempio, @code{int(3)} @`e 3, @code{int(3.9)} @`e 3, @code{int(-3.9)} @`e @minus{}3, e @code{int(-3)} @`e ancora @minus{}3. -@item @code{intdiv(@var{numeratore}, @var{denominatore}, @var{risultato})} -@cindexawkfunc{intdiv} -@cindex funzione @code{intdiv} +@ifset INTDIV +@item @code{intdiv0(@var{numeratore}, @var{denominatore}, @var{risultato})} +@cindexawkfunc{intdiv0} +@cindex funzione @code{intdiv0} Esegue una divisione tra numeri interi, simile alla funzione standard C -che ha lo stesso nome. Dapprima, il @code{numeratore} e il +@code{div}. Dapprima, il @code{numeratore} e il @code{denominatore} vengono troncati, eliminando la parte decimale, per trasformarli in numeri interi. Il vettore @code{risultato} viene dapprima svuotato, e poi viene impostato @@ -17936,7 +18191,9 @@ l'elemento @code{risultato["quotient"]} al risultato della divisione mediante l'eliminazione dei decimali, e viene impostato l'elemento @code{risultato["remainder"]} al risultato dell'operazione @samp{numeratore % denominatore}, troncato a -numero intero allo stesso modo del risultato. Questa funzione @`e +numero intero allo stesso modo del risultato. +Il tentativo di effettuare una divisione per zero provoca la fine del +programma. Questa funzione @`e rivolta principalmente a chi usa numeri interi di lunghezza arbitraria; consente di evitare la creazione di numeri in virgola mobile di precisione arbitaria usando la funzionalit@`a MPFR @@ -17944,6 +18201,7 @@ di precisione arbitaria usando la funzionalit@`a MPFR Questa funzione @`e un'estensione @code{gawk}. Non @`e disponibile in modalit@`a compatibile (@pxref{Opzioni}). +@end ifset @item @code{log(@var{x})} @cindexawkfunc{log} @@ -18518,7 +18776,7 @@ l'impiego di un terzo argomento causa un errore fatale. @cindex dividere in un vettore una stringa @cindex creare un vettore da una stringa Divide -@var{stringa} in parti definite da @var{regexpdelim} +@var{stringa} in pezzi (o ``campi'') definiti da @var{fieldpat} e memorizza i pezzi in @var{vettore} e le stringhe di separazione nel vettore @var{separatori}. Il primo pezzo @`e memorizzato in @code{@var{vettore}[1]}, il secondo pezzo in @code{@var{vettore}[2]}, e @@ -18530,9 +18788,12 @@ Pu@`o essere una costante @dfn{regexp} o una stringa. Se @var{regexpdelim} @`e omesso, viene usato il valore di @code{FPAT}. @code{patsplit()} restituisce il numero di elementi creati. @code{@var{separatori}[@var{i}]} @`e -la stringa che separa -l'elemento @code{@var{vettore}[@var{i}]} e @code{@var{vettore}[@var{i}+1]}. -Ogni separatore iniziale sar@`a in @code{@var{separatori}[0]}. +la stringa (che potrebbe anche essere la stringa nulla) dopo +l'elemento @code{@var{vettore}[@var{i}]}. +Il separatore iniziale (che potrebbe anche essere la stringa nulla) +sar@`a in @code{@var{separatori}[0]}. +Quindi, una @var{stringa} non nulla, con @var{n} campi avr@`a @var{n+1} +separatori. Una stringa nulla non avr@`a n@'e campi n@'e separatori. La funzione @code{patsplit()} divide delle stringhe in pezzi in modo simile a quello con cui le righe in input vengono divise in campi @@ -20368,23 +20629,31 @@ Per esempio: BEGIN @{ # crea a[1] ma non gli attribuisce alcun valore a[1] - print typeof(a[1]) # unassigned + print typeof(a[1]) # non assegnato @} @end example @item "untyped" @var{x} non @`e stata usata per nulla; pu@`o diventare uno scalare o un -vettore. +vettore. @`E anche possibile che il tipo sia differente, in differenti +esecuzioni del medesimo programma! Per esempio: @example BEGIN @{ - print typeof(x) # x non @`e mai stato usato --> untyped - mk_arr(x) - print typeof(x) # x ora @`e un vettore --> array + print "all'inizio, typeof(v) = ", typeof(v) + + if ("FOO" in ENVIRON) + make_scalar(v) + else + make_array(v) + + print "typeof(v) =", typeof(v) @} -function mk_arr(a) @{ a[1] = 1 @} +function make_scalar(p, l) @{ l = p @} + +function make_array(p) @{ p[1] = 1 @} @end example @end table @@ -21421,7 +21690,7 @@ sono un metodo per chiamare una funzione scelta al momento dell'esecuzione. Uno dei pi@`u noti usi di questa funzionalit@`a @`e la funzione C @code{qsort()}, che ordina un vettore usando il famoso algoritmo noto come ``quicksort'' -(si veda @uref{http://en.wikipedia.org/wiki/Quicksort, l'articolo di Wikipedia} +(si veda @uref{https://en.wikipedia.org/wiki/Quicksort, l'articolo di Wikipedia} per ulteriori informazioni). Per usare questa funzione, si specifica un puntatore a una funzione di confronto. Questo meccanismo consente di ordinare dei dati arbitrari in una maniera arbitraria. @@ -23065,8 +23334,8 @@ $ @kbd{cat dati} $ cat @kbd{test.awk} @print{} FNR == 3 && ! riavvolto @{ -@print{} riavvolto = 1 -@print{} rewind() +@print{} riavvolto = 1 +@print{} rewind() @print{} @} @print{} @print{} @{ print FILENAME, FNR, $0 @} @@ -23303,7 +23572,7 @@ elaborare gli argomenti presenti sulla riga di comando. Il programmatore fornisce una stringa che descrive le opzioni, ognuna delle quali consiste di una sola lettera. Se un'opzione richiede un -argomento, nella stringa l'opzione @`e seguita da due punti. +argomento, nella stringa l'opzione @`e seguita da due punti @code{:}. A @code{getopt()} vengono anche passati il numero e i valori degli argomenti presenti sulla riga di comando e viene chiamata in un ciclo. @@ -23491,7 +23760,7 @@ mantiene il suo valore attraverso chiamate successive a @code{getopt()}, perch@' L'espressione regolare che viene usata, @code{@w{/^-[^:[:space:]/}}, chiede di cercare un @samp{-} seguito da qualsiasi cosa che non sia uno spazio vuoto o un carattere -di due punti. Se l'argomento corrente sulla riga di comando non corrisponde a +di due punti @code{:}. Se l'argomento corrente sulla riga di comando non corrisponde a quest'espressione regolare, vuol dire che non si tratta di un'opzione, e quindi viene terminata l'elaborazione delle opzioni. Continuando: @@ -23560,7 +23829,8 @@ conoscere quale lettera di opzione @`e quella non valida. Proseguendo: @c endfile @end example -Se l'opzione richiede un argomento, la lettera di opzione @`e seguita da due punti +Se l'opzione richiede un argomento, la lettera di opzione @`e seguita da +due punti @code{:} nella stringa @code{opzioni}. Se rimangono altri caratteri nell'argomento corrente sulla riga di comando (@code{argv[Optind]}), il resto di quella stringa viene assegnato a @code{Optarg}. Altrimenti, viene usato il successivo @@ -23797,7 +24067,7 @@ main(int argc, char **argv) Se non si conosce il linguaggio C, non @`e il caso di preoccuparsi. L'output di @command{pwcat} @`e la lista degli utenti, nel formato -tradizionale del file @file{/etc/passwd} con campi separati da due punti. +tradizionale del file @file{/etc/passwd} con campi separati da due punti @code{:}. I campi sono: @table @asis @@ -24190,7 +24460,7 @@ main(int argc, char **argv) @end example Ciascuna riga nella lista dei gruppi rappresenta un gruppo. I campi sono -separati da due punti e rappresentano le seguenti informazioni: +separati da due punti @code{:} e rappresentano le seguenti informazioni: @table @asis @item Nome del gruppo @@ -25190,7 +25460,7 @@ carattere speciale come @value{FN}. Normalmente, @command{egrep} stampa le righe per cui @`e stata trovata una corrispondenza. Se nella riga di comando si richiede di operare su pi@`u di un @value{FN}, ogni riga in output @`e preceduta dal nome del file, e dal segno -due punti. +due punti @code{:}. Le opzioni di @command{egrep} sono le seguenti: @@ -25406,7 +25676,7 @@ usando @code{nextfile}. Analogamente, se stiamo solo stampando @value{FNS}, possiamo stampare il @value{FN}, e quindi saltare al file successivo con @code{nextfile}. Infine, ogni riga viene stampata, preceduta, se necessario, dal @value{FN} e -dai due punti: +dai due punti @code{:}: @cindex @code{!} (punto esclamativo), operatore @code{!} @cindex punto esclamativo (@code{!}), operatore @code{!} @@ -27199,7 +27469,7 @@ in grado di estrarre parti di un file in input Texinfo e metterli in file separati. @cindex Texinfo -Questo @value{DOCUMENT} @`e scritto in @uref{http://www.gnu.org/software/texinfo/, Texinfo}, +Questo @value{DOCUMENT} @`e scritto in @uref{https://www.gnu.org/software/texinfo/, Texinfo}, il programma di formattazione di documenti del progetto GNU. Un solo file sorgente Texinfo pu@`o essere usato per produrre sia la documentazione stampata, usando @TeX{}, sia quella online. @@ -27207,7 +27477,7 @@ documentazione stampata, usando @TeX{}, sia quella online. (Texinfo @`e esaurientemente documentato nel libro @cite{Texinfo---The GNU Documentation Format}, disponibile alla Free Software Foundation, -e anche @uref{http://www.gnu.org/software/texinfo/manual/texinfo/, online}.) +e anche @uref{https://www.gnu.org/software/texinfo/manual/texinfo/, online}.) @end ifnotinfo @ifinfo (Il linguaggio Texinfo @`e descritto esaurientemente, a partire da @@ -28258,9 +28528,9 @@ certainty through the space-time continuum. #! /usr/bin/gawk -f # Da "13.3.11 E ora per qualcosa di completamente differente" -# http://www.gnu.org/software/gawk/manual/html_node/Signature-Program.html#Signature-Program +# https://www.gnu.org/software/gawk/manual/html_node/Signature-Program.html#Signature-Program -# Copyright © 2008 Davide Brini +# Copyright @copyright{} 2008 Davide Brini # Copying and distribution of the code published in this page, with # or without modification, are permitted in any medium without @@ -28882,7 +29152,7 @@ END @{ @end example Il primo campo di ogni elemento del file delle password @`e il nome d'accesso -dell'utente, e i campi sono separati tra loro da due punti. +dell'utente, e i campi sono separati tra loro da due punti @code{:}. Ogni record definisce un sottovettore, con ogni campo come elemento nel sottovettore. L'esecuzione del programma produce @@ -29372,7 +29642,7 @@ Usare le @dfn{pty} in genere evita i problemi di stallo del buffer descritti precedentemente, in cambio di un piccolo calo di prestazioni. Ci@`o dipende dal fatto che la gestione delle @dfn{tty} @`e fatta una riga per volta. Su sistemi che hanno il comando @command{stdbuf} (parte del pacchetto -@uref{http://www.gnu.org/software/coreutils/coreutils.html, +@uref{https://www.gnu.org/software/coreutils/coreutils.html, GNU Coreutils}), si pu@`o usare tale programma, invece delle @dfn{pty}. Si noti anche che le @dfn{pty} non sono completamente trasparenti. @@ -29515,7 +29785,7 @@ Si veda @end ifinfo @ifnotinfo Si veda -@uref{http://www.gnu.org/software/gawk/manual/gawkinet/, +@uref{https://www.gnu.org/software/gawk/manual/gawkinet/, @cite{@value{GAWKINETTITLE}}}, che fa parte della distribuzione @command{gawk}, @end ifnotinfo @@ -30838,7 +31108,7 @@ maniera esauriente in @inforef{Top, , GNU @command{gettext} utilities, gettext, GNU @command{gettext} utilities}.) @end ifinfo @ifnotinfo -@uref{http://www.gnu.org/software/gettext/manual/, +@uref{https://www.gnu.org/software/gettext/manual/, @cite{GNU @command{gettext} utilities}}.) @end ifnotinfo Al momento in cui questo libro @`e stato scritto, la versione pi@`u recente di @@ -30909,7 +31179,7 @@ eccezione. Il @dfn{debugger} di @command{gawk} @`e di proposito costruito sul modello del debugger da riga di comando -@uref{http://www.gnu.org/software/gdb/, GNU Debugger (GDB)}. +@uref{https://www.gnu.org/software/gdb/, GNU Debugger (GDB)}. Se si ha familiarit@`a con GDB, sar@`a facile imparare come usare @command{gawk} per eseguire il debug dei propri programmi. @@ -31391,7 +31661,14 @@ Ottenere informazioni Comandi vari @end itemize -Ciascuna di esse @`e trattata nelle sottosezioni che seguono. +Ciascuna di esse @`e trattata +@ifnotinfo +nelle seguenti +@end ifnotinfo +@ifinfo +nei seguenti +@end ifinfo +@value{SUBSECTIONS}. Nelle descrizioni seguenti, i comandi che possono essere abbreviati mostrano l'abbreviazione su una seconda riga di descrizione. Un nome di comando del debugger pu@`o essere anche troncato se la parte gi@`a scritta @@ -32455,6 +32732,7 @@ questo capitolo. Tuttavia, se si vogliono eseguire calcoli scientifici con * Cautela col calcolo in VM:: Cose da sapere. * Interi a precisione arbitraria:: Calcolo con numeri interi a precisione arbitraria con @command{gawk}. +* Controllare disponibilit@`a MPFR:: Come controllare se MPFR @`e disponibile. * Problemi virgola mobile POSIX:: Confronto tra standard e uso corrente. * Sommario virgola mobile:: Sommario della trattazione della virgola mobile. @@ -32652,13 +32930,13 @@ Qui, @emph{prec} indica la precisione binaria indica le cifre decimali. @item Stabilit@`a -Dal@uref{http://en.wikipedia.org/wiki/Numerical_stability, +Dal@uref{https://en.wikipedia.org/wiki/Numerical_stability, l'articolo di Wikipedia sulla stabilit@`a numerica}: ``I calcoli per i quali si pu@`o dimostrare che non amplificano gli errori di approssimazione sono chiamati @dfn{numericamente stabili}.'' @end table -Si veda @uref{http://en.wikipedia.org/wiki/Accuracy_and_precision, +Si veda @uref{https://en.wikipedia.org/wiki/Accuracy_and_precision, l'articolo di Wikipedia su accuratezza e precisione} per maggiori informazioni su questi due termini. @@ -32732,7 +33010,7 @@ a livello globale per ogni operazione da eseguire. @iftex la @end iftex -@ref{Impostare modi di arrotondare} +@ref{Impostare modo di arrotondare} per maggiori informazioni. @node Cautela col calcolo in VM @@ -32769,7 +33047,7 @@ ottenere ulteriori informazioni, e non basarsi solo su quanto qui detto. sforzo. * Tentare di arrotondare:: Aggiungere cifre di precisione e arrotondare. * Impostare la precisione:: Come impostare la precisione. -* Impostare modi di arrotondare:: Impostare le modalit@`a di arrotondamento. +* Impostare modo di arrotondare:: Impostare le modalit@`a di arrotondamento. @end menu @node Inesattezza nei calcoli @@ -33075,7 +33353,7 @@ $ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", 1/10) @}'} @end example @end quotation -@node Impostare modi di arrotondare +@node Impostare modo di arrotondare @subsection Impostare la modalit@`a di arrotondamento La variabile @code{ROUNDMODE} permette di controllare a livello di programma @@ -33293,16 +33571,17 @@ gawk -M 'BEGIN @{ n = 13; print n % 2 @}' Dividendo due interi a precisione arbitraria con @samp{/} o con @samp{%}, il risultato @`e tipicamente un valore a virgola mobile con precisione arbitraria (a meno che il risultato non sia un numero intero esatto). +@ifset INTDIV Per eseguire divisioni intere o calcolare moduli con interi a precisione arbitraria, usare la funzione predefinita -@code{intdiv()} (@pxref{Funzioni numeriche}). +@code{intdiv0()} (@pxref{Funzioni numeriche}). -Si pu@`o simulare la funzione @code{intdiv()} in @command{awk} standard +Si pu@`o simulare la funzione @code{intdiv0()} in @command{awk} standard usando questa funzione definita dall'utente: @example @c file eg/lib/intdiv.awk -# intdiv --- fa una divisione intera +# intdiv0 --- fa una divisione intera @c endfile @ignore @@ -33313,12 +33592,15 @@ usando questa funzione definita dall'utente: # # Name changed from div() to intdiv() # April, 2015 +# +# Changed to intdiv0() +# April, 2016 @c endfile @end ignore @c file eg/lib/intdiv.awk -function intdiv(numerator, denominator, result) +function intdiv0(numerator, denominator, result) @{ split("", result) @@ -33333,7 +33615,7 @@ function intdiv(numerator, denominator, result) @end example Il seguente programma d'esempio, proposto da Katie Wasserman, -usa @code{intdiv()} per +usa @code{intdiv0()} per calcolare le cifre di @value{PI} al numero di cifre significative che si @`e scelto di impostare: @@ -33358,7 +33640,7 @@ BEGIN @{ for (m = cifre * 4; m > 0; --m) @{ d = m * 2 + 1 x = pi * m - intdiv(x, d, risultato) + intdiv0(x, d, risultato) pi = risultato["quotient"] pi = pi + due @} @@ -33385,12 +33667,15 @@ It's Euler's modification to Newton's method for calculating pi. Take a look at lines (23) - (25) here: http://mathworld.wolfram.com/PiFormulas.htm -The algorithm I wrote simply expands the multiply by 2 and works from the innermost expression outwards. I used this to program HP calculators because it's quite easy to modify for tiny memory devices with smallish word sizes. +The algorithm I wrote simply expands the multiply by 2 and works from +the innermost expression outwards. I used this to program HP calculators +because it's quite easy to modify for tiny memory devices with smallish +word sizes. http://www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/articles.cgi?read=899 +@end quotation -Katie -@end ignore Quando gli fu chiesto dell'algoritmo usato, Katie rispose: @@ -33407,6 +33692,63 @@ dispositivi di scarsa memoria con dimensioni di parola piuttosto piccole. Si veda @uref{http://www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/articles.cgi?read=899}. @end quotation +@end ifset + +@node Controllare disponibilit@`a MPFR +@section Come controllare se MPFR @`e disponibile + +@cindex MPFR, controllare se disponibile +@cindex controllare disponibilit@`a MPFR +In qualche occasione, potreste voler controllare se @command{gawk} sia stato +chiamato specificando l'opzione @option{-M}, che consente di effettuare +calcoli aritmetici di precisione arbitraria. +Lo si pu@`o fare con la funzione seguente, messa a disposizione da +Andrew Schorr: + +@example +@c file eg/lib/have_mpfr.awk +# precisione_matematica_sufficiente +# --- restituisce "true" [vero] +# se il numero di bit "n" di precisione richiesto +# @`e disponibile per il programma +@c endfile +@ignore +@c file eg/lib/have_mpfr.awk +# +# Andrew Schorr, aschorr@@telemetry-investments.com, Public Domain +# May 2017 +@c endfile +@end ignore +@c file eg/lib/have_mpfr.awk + +function adequate_math_precision(n) +@{ + return (1 != (1+(1/(2^(n-1))))) +@} +@c endfile +@end example + +Ecco un frammento di codice che invoca la funzione per controllare +se l'aritmetica a precisione arbitraria @`e disponibile: + +@example +BEGIN @{ + # Quanti bit di precisione nella mantissa sono necessari + # perch@'e questo programma funzioni correttamente? + fpbits = 123 + + # Si spera che il programma sia stato invocato con MPFR abilitata. + # Se @`e questo il caso, le istruzioni seguenti dovrebbero configurare + # i calcoli al livello di precisione desiderato. + PREC = fpbits + + if (! adequate_math_precision(fpbits)) @{ + print("Errore: la precisione di calcolo disponibile non basta.\n" \ + "Provare ancora specificando l'argomento -M?") > "/dev/stderr" + exit 1 + @} +@} +@end example @node Problemi virgola mobile POSIX @section Confronto tra standard e uso corrente @@ -33659,7 +34001,7 @@ e viene descritto il progetto @code{gawkextlib}. progetto del meccanismo delle estensioni. @end ifclear @ifset FOR_PRINT -Si veda @uref{http://www.gnu.org/software/gawk/manual/html_node/estensione-Design.html} +Si veda @uref{https://www.gnu.org/software/gawk/manual/html_node/Extension-Design.html} per una disamina degli obiettivi e del progetto del meccanismo delle estensioni. @end ifset @@ -33974,6 +34316,12 @@ un'accozzaglia di problemi di portabilit@`a, quale si pu@`o vedere in alcune parti del codice sorgente di @command{gawk}. @item +Se l'estensione usa le funzionalit@`a MPFR, e si desidera ricevere valori +numerici di precisione arbitraria da @command{gawk} e/o passare ad esso +tali valori, si deve includere l'intestazione +@code{<mpfr.h>} prima di includere @code{<gawkapi.h>}. + +@item Il file @file{gawkapi.h} pu@`o essere incluso pi@`u volte, senza conseguenze negative. Tuttavia sarebbe meglio evitare di farlo, per uno stile di programmazione migliore. @@ -34137,7 +34485,7 @@ L'elenco @code{enum} indica di che tipo @`e un certo valore. @itemx @ @ @ @ awk_valtype_t val_type; @itemx @ @ @ @ union @{ @itemx @ @ @ @ @ @ @ @ awk_string_t@ @ @ @ @ @ @ s; -@itemx @ @ @ @ @ @ @ @ double@ @ @ @ @ @ @ @ @ @ @ @ @ d; +@itemx @ @ @ @ @ @ @ @ awknum_t@ @ @ @ @ @ @ @ @ @ @ n; @itemx @ @ @ @ @ @ @ @ awk_array_t@ @ @ @ @ @ @ @ a; @itemx @ @ @ @ @ @ @ @ awk_scalar_t@ @ @ @ @ @ @ scl; @itemx @ @ @ @ @ @ @ @ awk_value_cookie_t@ vc; @@ -34150,13 +34498,39 @@ e ogni campo @`e del tipo appropriato. @item #define str_value@ @ @ @ @ @ u.s @itemx #define strnum_value@ @ @ str_value @itemx #define regex_value@ @ @ @ str_value -@itemx #define num_value@ @ @ @ @ @ u.d +@itemx #define num_value@ @ @ @ @ @ u.n.d +@itemx #define num_type@ @ @ @ @ @ @ u.n.type +@itemx #define num_ptr@ @ @ @ @ @ @ @ u.n.ptr @itemx #define array_cookie@ @ @ u.a @itemx #define scalar_cookie@ @ u.scl @itemx #define value_cookie@ @ @ u.vc L'uso di queste macro rende pi@`u facile da seguire l'accesso ai campi di @code{awk_value_t}. +@item typedef struct awk_number @{ +@itemx @ @ @ @ double d; +@itemx @ @ @ @ enum AWK_NUMBER_TYPE @{ +@itemx @ @ @ @ @ @ @ @ AWK_NUMBER_TYPE_DOUBLE, +@itemx @ @ @ @ @ @ @ @ AWK_NUMBER_TYPE_MPFR, +@itemx @ @ @ @ @ @ @ @ AWK_NUMBER_TYPE_MPZ +@itemx @ @ @ @ @} type; +@itemx @ @ @ @ void *ptr; +@itemx @} awk_number_t; +Questo rappresenta un valore numerico. Internamente, @command{gawk} +memorizza ogni numero o come una variabile C di tipo @code{double}, +o come un numero intero GMP, o come un numero MPFR a virgola mobile +di precisione arbitraria. Per consentire alle estensioni di +supportare valori numerici GMP ed MPFR, i valori numerici sono +comunicati utilizzando questa struttura. + +L'elemento in doppia-precisione @code{d} @`e sempre valorizzato nei dati +ricevuti da @command{gawk}. Inoltre, esaminando il membro +@code{type}, un'estensione @`e in grado di determinare se il membro puntato +da @code{ptr} sia un numero intero GMP (tipo @code{mpz_ptr}), o un numero +MPFR a virgola mobile (tipo @code{mpfr_ptr_t}), e trasformarlo a seconda +delle necessit@`a. + + @item typedef void *awk_scalar_t; La variabili scalari possono essere rappresentate da un tipo opaco. Questi valori sono ottenuti da @command{gawk} e in seguito gli vengono restituiti. @@ -34333,8 +34707,8 @@ Se @command{gawk} usasse la propria versione di @code{free()} per liberare della memoria acquisita tramite una differente versione di @code{malloc()}, il risultato sarebbe molto probabilmente differente da quello atteso. -Due macro di utilit@`a possono essere usate per allocare memoria -tramite @code{gawk_malloc()} e +Tre macro di utilit@`a possono essere usate per allocare memoria +tramite @code{gawk_malloc()}, @code{gawk_calloc}, e @code{gawk_realloc()}. Se l'allocazione non riesce, @command{gawk} termina l'esecuzione con un messaggio di errore fatale. Queste macro dovrebbero essere usate come se fossero dei richiami a @@ -34374,12 +34748,45 @@ strcpy(message, greet); make_malloced_string(message, strlen(message), & risultato); @end example +@item #define ezalloc(pointer, type, size, message) @dots{} +Questo @`e simile a @code{emalloc()}, ma chiama @code{gawk_calloc()} +invece che @code{gawk_malloc()}. +Gli argomenti sono gli stessi della macro @code{emalloc()}, ma +questa macro garantisce che la memoria allocata sia inizializzata +a zeri binari. + @item #define erealloc(pointer, type, size, message) @dots{} Questo @`e simile a @code{emalloc()}, ma chiama @code{gawk_realloc()} invece che @code{gawk_malloc()}. Gli argomenti sono gli stessi della macro @code{emalloc()}. @end table +Due ulteriori funzioni allocano oggetti MPFR e GMP per l'utilizzo +da parte di funzioni di estensione che necessitino di creare e di +restituire valori di questo tipo: + +@table @code +@item void *get_mpfr_ptr(); +Alloca e inizializza un oggetto MPFR e restituisce un puntatore allo stesso. +Se l'allocazione non riesce, @command{gawk} termina con un errore fatale +``out of memory'' (memoria esaurita). Se @command{gawk} era stato compilato +senza il supporto MPFR, chiamare questa funzione genera un errore fatale. + +@item void *get_mpz_ptr(); +Alloca e inizializza un oggetto GMP e restituisce un puntatore allo stesso. +Se l'allocazione non riesce, @command{gawk} termina con un errore fatale +``out of memory'' (memoria esaurita). Se @command{gawk} era stato compilato +senza il supporto MPFR, chiamare questa funzione genera un errore fatale. +@end table + +Entrambe queste funzioni restituiscono un codice di ritorno @samp{void *}, +poich@'e il file di intestazione @file{gawkapi.h} non dovrebbe avere dipendenze +da @code{<mpfr.h>} (e @code{<gmp.h>}, +che @`e incluso da @code{<mpfr.h>}). I valori di ritorno effettivamente +restituiti sono di tipo @code{mpfr_ptr} e @code{mpz_ptr} rispettivamente, +e si dovrebbero assegnare in maniera appropriata questi valori di ritorno +prima di assegnare i risultati a variabili del tipo corretto. + @node Funzioni di costruzione @subsection Funzioni per creare valori @@ -34428,6 +34835,20 @@ Questa funzione crea semplicemente un valore numerico nella variabile @code{awk_value_t}, puntata da @code{risultato}. @item static inline awk_value_t * +@itemx make_number_mpz(void *mpz, awk_value_t *result); +Questa funzione crea un valore di numero GMP number in @code{result}. +@code{mpz} deve provenire da una chiamata a @code{get_mpz_ptr()} +(e quindi essere veramente del corrispondente tipo @code{mpz_ptr}). +@command{gawk} assume la propriet@`a di questa memoria. + +@item static inline awk_value_t * +@itemx make_number_mpfr(void *mpfr, awk_value_t *result); +Questa funzione crea un valore di numero MPFR number in @code{result}. +@code{mpz} deve provenire da una chiamata a @code{get_mpfr_ptr()} +(e quindi essere veramente del corrispondente tipo @code{mpfr_ptr}). +@command{gawk} assume la propriet@`a di questa memoria. + +@item static inline awk_value_t * @itemx make_const_user_input(const char *stringa, size_t lunghezza, awk_value_t *risultato); Questa funzione @`e identica a @code{make_const_string()}, ma la stringa @`e marcata come input dell'utente, che dovr@`a essere trattata come @dfn{strnum} @@ -34562,10 +34983,10 @@ Una volta preparato un record che descrive l'estensione, la funzione di estensione va registrata con @command{gawk} usando questa funzione dell'API: @table @code -@item awk_bool_t add_ext_func(const char *namespace, awk_ext_func_t *func); +@item awk_bool_t add_ext_func(const char *name_space, awk_ext_func_t *func); Questa funzione restituisce il valore @dfn{true} se ha successo, oppure @dfn{false} in caso contrario. -Il parametro @code{namespace} non @`e usato per ora; dovrebbe puntare a una +Il parametro @code{name_space} non @`e usato per ora; dovrebbe puntare a una stringa vuota (@code{""}). Il puntatore @code{func} @`e l'indirizzo di una @code{struct} che rappresenta la funzione stessa, come descritto sopra. @@ -34760,7 +35181,8 @@ typedef struct awk_input @{ void *opaque; /* area dati privata per l'analizzatore di input */ int (*get_record)(char **out, struct awk_input *iobuf, - int *errcode, char **rt_start, size_t *rt_len); + int *errcode, char **rt_start, size_t *rt_len, + const awk_fieldwidth_info_t **field_width); ssize_t (*read_func)(); void (*close_func)(struct awk_input *iobuf); struct stat sbuf; /* buffer per stat */ @@ -34816,7 +35238,8 @@ L'analizzatore di input non @`e obbligato a usare questo puntatore. @itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ struct@ awk_input *iobuf, @itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ int *errcode, @itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ char **rt_start, -@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ size_t *rt_len); +@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ size_t *rt_len, +@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ const awk_fieldwidth_info_t **field_width); Questo puntatore a funzione dovrebbe puntare a una funzione che crea i record in input. Tale funzione @`e il nucleo centrale dell'analizzatore di input. Il suo modo di operare @`e descritto nel testo che segue questo elenco. @@ -34869,6 +35292,22 @@ Se il concetto ``fine record'' @`e applicabile, campo. In caso contrario, @code{*rt_len} dovrebbe essere impostata a zero. @command{gawk} usa una sua copia di questi dati, quindi l'estensione deve gestire tale memoria. + +@item const awk_fieldwidth_info_t **field_width +Se @code{field_width} non @`e @code{NULL}, allora @code{*field_width} sar@`a +inizializzato a @code{NULL}, e la funzione pu@`o impostarlo per puntare a una +struttura che fornisca l'informazione sulla lunghezza del campo, che +sar@`a utilizzata al posto di quella determinata dall'analizzatore di default +del campo. Si noti che qeusta struttura non sar@`a copiata da @command{gawk}; +inoltre essa deve rimanere disponibile almeno fino alla prossima chiamata a +@code{get_record} o a @code{close_func}. Si noti inoltre che +@code{field_width} vale @code{NULL} quando @code{getline} sta assegnando +i risultati a una variabile, e quindi un'analisi del campo non @`e necessaria. +Se l'analizzatore imposta @code{*field_width}, +allora @command{gawk} usa questa descrizione per analizzare il record in +input, e il valore di @code{PROCINFO["FS"]} sar@`a @code{"API"} finch@'e questo +record rimane corrente come @code{$0}. +La struttura dati @code{awk_fieldwidth_info_t} @`e descritta sotto. @end table Il codice di ritorno @`e la lunghezza del buffer puntato da @@ -34932,6 +35371,51 @@ Registra l'analizzatore di input puntato da @code{input_parser} con @command{gawk}. @end table +Se si vuole sostituire il meccanismo di default per determinare i campi +[con uno scritto dall'utente], si deve riempire una struttura +@code{awk_fieldwidth_info_t} che ha questo aspetto: + +@example +typedef struct @{ + awk_bool_t use_chars; /* falso ==> usare byte */ + size_t nf; /* numero di campi nel record (NF) */ + struct awk_field_info @{ + size_t skip; /* da ignorare prima dell'inizio di un campo */ + size_t len; /* lunghezza del campo */ + @} fields[1]; /* la dimensione effettiva dovrebbe essere nf */ +@} awk_fieldwidth_info_t; +@end example + +I campi sono: + +@table @code +@item awk_bool_t use_chars; +Impostare ad @code{awk_true} se le lunghezze di campo sono specificate in +unit@`a di caratteri---potenzialmente multi-byte, oppure impostarlo a +@code{awk_false} se le lunghezze sono espresse in numero di byte. +L'efficienza del programma sar@`a maggiore utilizzando la dimensione in byte. + +@item size_t nf; +Impostare al numero di campi nel record in input, cio@`e a @code{NF}. + +@item struct awk_field_info fields[nf]; +Questo @`e un vettore di lunghezza variabile la cui dimensione effettiva +dovrebbe essere @code{nf}. +Per ogni campo, l'elemento @code{skip} dovrebbe essere impostato al numero +di caratteri o byte, come richiesto dal flag @code{use_chars}, +da saltare prima dell'inizio di questo campo. L'elemento @code{len} fornisce +la lunghezza del campo. I valori in @code{fields[0]} fornisce l'informazione +per @code{$1}, e cos@`{@dotless{i}} via, fino all'elemento @code{fields[nf-1]} che contiene +l'informazione per @code{$NF}. +@end table + +Una macro di utilit@`a @code{awk_fieldwidth_info_size(numfields)} @`e disponibile +per calcolare la dimensione appropriata della struttura a lunghezza variabile +@code{awk_fieldwidth_info_t} che contiene @code{numfields} campi. Questa +dimensione pu@`o essere usata come argomento per @code{malloc()} o in una +struttura @dfn{union} per allocare spazio staticamente. +Per un esempio si pu@`o vedere l'estensione di esempio @code{readdir_test}. + @node Processori di output @subsubsection Registrare un processore di output @cindex personalizzato, processore di output @@ -35623,7 +36107,8 @@ se si pone mente al fatto che la memoria di @emph{ogni} valore di stringa Se ci sono 20 variabili, e tutte hanno per valore la stessa stringa, si devono creare 20 copie identiche della stringa.@footnote{I valori numerici creano molti meno problemi, in quanto richiedono solo una variabile -C @code{double} (8 byte) per contenerli.} +C @code{double} (8 byte) per contenerli. Naturalmente, valori di tipo +GMP ed MPFR usano @emph{molta} pi@`u memoria.} Chiaramente @`e pi@`u efficiente, se possibile, creare il valore una sola volta, e fare in modo che @command{gawk} utilizzi quell'unico valore per molte @@ -35886,10 +36371,13 @@ creare un nuovo vettore e aggiungervi elementi. Svuota il vettore rappresentato da @code{a_cookie}. Restituisce @dfn{false} in presenza di qualche tipo di problema, @dfn{true} in caso contrario. Il vettore non viene eliminato ma, dopo aver chiamato -questa funzione, resta privo di elementi. Questo @`e equivalente a usare +questa funzione, resta privo di elementi. Questo equivale a usare l'istruzione @code{delete} (@pxref{Cancellazione}). -@item awk_bool_t flatten_array_typed(awk_array_t a_cookie, awk_flat_array_t **data, awk_valtype_t index_type, awk_valtype_t value_type); +@item awk_bool_t flatten_array_typed(awk_array_t a_cookie, +@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_flat_array_t **data, +@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_valtype_t index_type, +@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_valtype_t value_type); Per il vettore rappresentato da @code{a_cookie}, crea una struttura @code{awk_flat_array_t} e la riempie con indici e valori del tipo richiesto. Imposta il puntatore il cui indirizzo @`e passato in @code{data} per puntare a @@ -36379,16 +36867,21 @@ Una @dfn{pipe} aperta in input. Un coprocesso bidirezionale. @end table -In caso di errore, restituisce il valore @code{@dfn{awk_false}}. +In caso di errore, restituisce il valore @code{awk_false}. Altrimenti, restituisce -@code{@dfn{awk_true}}, insieme a ulteriori informazioni sulla ridirezione +@code{awk_true}, insieme a ulteriori informazioni sulla ridirezione nei puntatori @code{ibufp} e @code{obufp}. Per ridirezioni di input il valore @code{*ibufp} non dovrebbe essere @code{NULL}, mentre @code{*obufp} dovrebbe essere @code{NULL}. + +Per ridirezioni di input, +il valore di @code{*ibufp} dovrebbe essere non-@code{NULL}, e @code{*obufp} +dovrebbe essere @code{NULL}. Per ridirezioni di output, -il valore di @code{*obufp} non dovrebbe essere @code{NULL}, e @code{*ibufp} -dovrebbe essere @code{NULL}. Per coprocessi bidirezionali, nessuno dei due -valori dovrebbe essere @code{NULL}. +il valore di @code{*obufp} dovrebbe essere non-@code{NULL}, e @code{*ibufp} +dovrebbe essere @code{NULL}. +Per coprocessi bidirezionali, ognuno dei due +valori dovrebbe essere non-@code{NULL}. Normalmente, l'estensione @`e interessata a @code{(*ibufp)->fd} e/o @code{fileno((*obufp)->fp)}. Se il file non @`e gi@`a @@ -36425,8 +36918,10 @@ insieme contiene informazioni su come @command{gawk} @`e stato invocato. @menu * Versione dell'estensione:: Informazioni sulla versione API. +* Versione estensione GMP/MPFR:: Informazioni sulla versione disponibile + di GMP ed MPFR. * Variabili informative di estens. API:: Variabili che forniscono informationi - sull'invocazione di @command{gawk}. + sull'invocazione di @command{gawk}. @end menu @node Versione dell'estensione @@ -36496,6 +36991,58 @@ in @end ifnottex @ref{Codice predefinito di un'estensione API}). +@node Versione estensione GMP/MPFR +@subsubsection Informazioni sulla versione disponibile di GMP ed MPFR + +L'API include anche informazioni sulle versioni di GMP ed MPFR con cui +il comando @command{gawk} in esecuzione @`e stato compilato (se disponibile). +Queste sono incluse nella @code{struct} dell'API come costanti intere +in sola lettura: + +@table @code +@item api->gmp_major_version +La versione principale della libreria GMP usata per compilare @command{gawk}. + +@item api->gmp_minor_version +La versione secondaria della libreria GMP usata per compilare @command{gawk}. + +@item api->mpfr_major_version +La versione principale della libreria MPFR usata per compilare @command{gawk}. + +@item api->mpfr_minor_version +La versione secondaria della libreria MPFR usata per compilare @command{gawk}. +@end table + +Questi campi hanno un valore di zero se @command{gawk} @`e stato compilato +senza supporto MPFR. + +Si pu@`o controllare se le versioni di MPFR e GMP dell'utente corrispondono +a quelle contenute in @command{gawk} con le seguenti macro: + +@table @code +@item check_mpfr_version(extension) +La @code{extension} @`e l'ID dell'estensione, passato a tutte le altre macro +e funzioni definite in @file{gawkapi.h}. Se il file di intestazione +@code{<mpfr.h>} non @`e stato incluso, questa macro verr@`a definita in +modo da non fare nulla. + +Se invece il predetto file @`e stato incluso, questa macro confronta +le versioni principale e secondaria di MPFR e GMP con quelle delle +librerie in uso da parte dell'utente. Se queste ultime sono pi@`u +recenti di quelle di @command{gawk}, stampa un messaggio di +errore fatale ed esce. + +La macro @code{dl_load_func()} (trattata +@iftex +nella +@end iftex +@ifnottex +in +@end ifnottex +@ref{Codice predefinito di un'estensione API}) +chiama @code{check_mpfr_version()}. +@end table + @node Variabili informative di estens. API @subsubsection Variabili informative @cindex API, variabili informative dell'estensione @@ -36640,6 +37187,11 @@ dell'estensione @`e maggiore di quella di @command{gawk}, stampa un messaggio di errore fatale ed esce. @item +Controlla le versioni di MPFR e GMP. Se non sono allo stesso livello con +quelle in uso localmente, stampa un messaggio +di errore fatale ed esce. + +@item Carica le funzioni definite in @code{func_table}. Se qualche caricamento non riesce, stampa un messaggio di avvertimento ma continua l'esecuzione. @@ -37727,6 +38279,34 @@ l'estensione in maniera corretta: @c file eg/lib/inplace.awk @group # inplace --- carica e richiama l'estensione inplace. +@c endfile +@ignore +@c file eg/lib/inplace.awk +# +# Copyright (C) 2013, 2017 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 +# +# Andrew J. Schorr, aschorr@@telemetry-investments.com +# January 2013 +@c endfile +@end ignore +@c file eg/lib/inplace.awk @@load "inplace" @@ -37739,6 +38319,7 @@ l'estensione in maniera corretta: # verr@`a modificato sovrascrivendo il file originale. # Ma @`e possibile evitarlo specificando l'argomento inplace=0 # davanti al nome del file che non si desidera elaborare in questo modo. + # Si pu@`o poi abilitare di nuovo l'aggiornamento diretto del file # sulla riga di comando, specificando inplace=1 prima del file # che si vuole modificare direttamente. @@ -37746,11 +38327,15 @@ l'estensione in maniera corretta: # N.B. La funzione inplace_end() @`e invocata nelle regole # BEGINFILE ed END, in modo che ogni eventuale azione # in una regola ENDFILE sar@`a ridiretta come previsto. +@end group +@group BEGIN @{ - inplace = 1 # abilitato per default + inplace = 1 # abilitato per default @} +@end group +@group BEGINFILE @{ if (_inplace_filename != "") inplace_end(_inplace_filename, INPLACE_SUFFIX) @@ -37759,6 +38344,9 @@ BEGINFILE @{ else _inplace_filename = "" @} +@end group + +@group END @{ if (_inplace_filename != "") @@ -38120,7 +38708,7 @@ sorgente per maggiori informazioni. @cindex @code{gawkextlib}, progetto @cindex progetto @code{gawkextlib} -Il progetto @uref{http://sourceforge.net/projects/gawkextlib/, @code{gawkextlib}} +Il progetto @uref{https://sourceforge.net/projects/gawkextlib/, @code{gawkextlib}} fornisce varie estensioni per @command{gawk}, compresa una per l'elaborazione dei file XML. Questa @`e un'evoluzione del progetto noto come @command{xgawk} (XML @command{gawk}). @@ -38153,14 +38741,14 @@ Estensione Select @item Estensione analizzatore XML, usando la libreria di analisi XML -@uref{http://expat.sourceforge.net, Expat} +@uref{https://expat.sourceforge.net, Expat} @end itemize @cindex @command{git}, programma di utilit@`a @cindex programma di utilit@`a @command{git} Si pu@`o scaricare il codice del progetto @code{gawkextlib} usando il codice sorgente mantenuto tramite -@uref{http://git-scm.com, Git}. +@uref{https://git-scm.com, Git}. Il comando per farlo @`e il seguente: @example @@ -38170,14 +38758,14 @@ git clone git://git.code.sf.net/p/gawkextlib/code gawkextlib-code @cindex Expat, libreria per analizzare XML @cindex XML, Expat, libreria per analizzare Per poter compilare e usare l'estensione XML, @`e necessario installare -la libreria di analisi XML @uref{http://expat.sourceforge.net, Expat}. +la libreria di analisi XML @uref{https://expat.sourceforge.net, Expat}. Inoltre, @`e necessario installare gli strumenti GNU Autotools -(@uref{http://www.gnu.org/software/autoconf, Autoconf}, -@uref{http://www.gnu.org/software/automake, Automake}, -@uref{http://www.gnu.org/software/libtool, Libtool} +(@uref{https://www.gnu.org/software/autoconf, Autoconf}, +@uref{https://www.gnu.org/software/automake, Automake}, +@uref{https://www.gnu.org/software/libtool, Libtool} e -@uref{http://www.gnu.org/software/gettext, GNU @command{gettext}}). +@uref{https://www.gnu.org/software/gettext, GNU @command{gettext}}). La semplice procedura per compilare e testare @code{gawkextlib} @`e la seguente. Dapprima, occorre compilare e installare @command{gawk}: @@ -38189,7 +38777,7 @@ make && make check @ii{Compila e controlla che tutto sia a post make install @ii{Installa gawk} @end example -Poi, dal sito @url{http://sourceforge.net/projects/gawkextlib/files} si deve +Poi, dal sito @url{https://sourceforge.net/projects/gawkextlib/files} si deve scaricare @code{gawkextlib} e le estensioni che si vogliono installare. Il file @file{README} del sito spiega come compilare il codice. Se si @`e installato @command{gawk} in una posizione non-standard, occorre @@ -38454,7 +39042,7 @@ del linguaggio @command{awk}, facendo riferimento ad altre parti del @ifset FOR_PRINT Per amor di brevit@`a, sono state omesse in questa edizione informazioni sulla storia delle funzionalit@`a di @command{gawk}. Si possono trovare nella -@uref{http://www.gnu.org/software/gawk/manual/html_node/Feature-History.html, +@uref{https://www.gnu.org/software/gawk/manual/html_node/Feature-History.html, documentazione online}. @end ifset @@ -38942,10 +39530,12 @@ Le funzioni @code{bindtextdomain()}, @code{dcgettext()} e @code{dcngettext()} per l'internazionalizzazione (@pxref{I18N per programmatore}) +@ifset INTDIV @item -La funzione @code{intdiv()} per effettuare divisioni a numeri interi e +La funzione @code{intdiv0()} per effettuare divisioni a numeri interi e ottenere il resto della divisione (@pxref{Funzioni numeriche}) +@end ifset @end itemize @item @@ -39120,7 +39710,9 @@ I've tried to follow this general order, esp.@: for the 3.0 and 3.1 sections: new keywords new command-line options behavioral changes - new ports + extension API changes + new / deprecated / removed ports + installation time stuff Within each category, be alphabetical. @end ignore @@ -39683,10 +40275,10 @@ Cray MIPS RiscOS @item -MS-DOS con Compilatore Microsoft +MS-DOS col Compilatore Microsoft @item -MS-Windows con Compilatore Microsoft +MS-Windows col Compilatore Microsoft @item NeXT @@ -39781,37 +40373,54 @@ Il supporto per Ultrix @`e stato rimosso. @end itemize -La versione 4.2 ha introdotto le seguenti funzionalit@`a: +La versione 4.2 di @command{gawk} ha introdotto le seguenti modifiche: @itemize @bullet @item -Differenze apportate alle variabili di ambiente (@code{ENVIRON}) sono riflesse in quelle -rese disponibili a @command{gawk} e in quelle di programmi che siano da esso richiamati. +Differenze apportate alle variabili di ambiente (@code{ENVIRON}) sono +riflesse in quelle rese disponibili a @command{gawk} e in quelle di +programmi che siano da esso richiamati. @xref{Variabili auto-assegnate}. @item -L'opzione @option{--pretty-print} non esegue pi@`u, dopo averlo stampato, -il programma @command{awk}. -@xref{Opzioni}. +@code{FIELDWIDTHS} @`e stato migliorato per consentire di saltare dei +caratteri prima di assegnare il valore di un campo +(@pxref{Separazione in base al contenuto}). @item -Il programma @command{igawk} e le relative pagine di manuale non sono -pi@`u installati come parte dell'installazione di @command{gawk}. -@xref{Programma igawk}. +Il vettore @code{PROCINFO["argv"]}. +@xref{Variabili auto-assegnate}. + +@item +Il numero massimo di cifre esadecimali consentito nelle sequenze di +protezione @samp{\x} @`e ora limitato a due. +@xref{Sequenze di protezione}. + +@item +Costanti @dfn{regexp} forti nella forma @samp{@@/@dots{}/} +(@pxref{Costanti @dfn{regexp} forti}). @item -La funzione @code{intdiv()}. +Le funzioni a livello di bit sono state modificate. Se si +forniscono argomenti negativi, viene generato un errore fatale. +(@pxref{Funzioni a livello di bit}). + +@ifset INTDIV +@item +La funzione @code{intdiv0()}. @xref{Funzioni numeriche}. +@end ifset @item -Il massimo numero di cifre esadecimali permesse nelle sequenze di -protezione @samp{\x} @`e ora limitato a due. -@xref{Sequenze di protezione}. +La funzione @code{mktime()} ora acctte un secondo argomento facoltativo +(@pxref{Funzioni di tempo}). @item -@code{print} e @code{printf} non terminano il programma dopo alcuni -errori di output. -@xref{Continuazione dopo errori}. +La funzione @code{typeof()} (@pxref{Funzioni per i tipi}). + +@item +Le ottimizzazioni sono abilitate per default. Si usi @option{-s} / +@option{--no-optimize} per non effettuare ottimizzazioni. @item Per molti anni, lo standard POSIX richiedeva che la separazione dei campi @@ -39823,10 +40432,72 @@ il default per separare i campi con l'opzione @option{--posix} ammette anche il ritorno a capo come separatore di campi. @item +Continuazione dopo errori [non fatali] con @code{print} e @code{printf}. +@xref{Continuazione dopo errori}. + +@item +Possibilit@`a di tentare di nuovo l'I/O in input +attraverso @code{PROCINFO[@var{input-file}, "RETRY"]}; +(@pxref{Proseguire dopo errore in input}). + +@item +Modifiche all'opzione @option{--pretty-print} +(@pxref{Profilare}): + +@c nested table +@itemize @value{MINUS} +@item +L'opzione @option{--pretty-print} non esegue pi@`u il programma @command{awk} +come in precedenza. + +@item +I commenti nel programma sorgente sono conservati e inseriti nel file +in output. + +@item +Parentesi esplicite [anche se non strettamente necessarie] nelle espressioni +in input sono mantenute nell'output generato. +@end itemize + +@item +Miglioramenti all'API per l'estensione +(@pxref{Estensioni dinamiche}): + +@c nested +@itemize @value{MINUS} +@item +La funzione @code{get_file()} @`e in grado di accedere +a ridirezioni in fase di @dfn{open}. + +@item +La funzione @code{nonfatal()} per generare messaggi di errore non fatali +(che non provocano la fine del programma). + +@item +Supporto per i numeri scritti per essere usati tramite GMP ed MPFR. + +@item +Gli analizzatori di input possono ora prevalere sul meccanismo di +analisi dei campi, specificando delle posizioni precise. +@end itemize + +@item +Dei file per iniziare una sessione sono inclusi nella distribuzione +e installati da @samp{make install} +(@pxref{File da usare a inizio sessione}). + +@item +Il programma @command{igawk} e la relativa pagina di manuale non +sono pi@`u installati quando si compila @command{gawk} [il programma +non @`e pi@`u necessario]. +@xref{Programma igawk}. + +@item Il supporto per MirBSD @`e stato rimosso. @item Il supporto per GNU/Linux sull'architettura Alpha @`e stato rimosso. + @end itemize @c XXX ADD MORE STUFF HERE @@ -40102,7 +40773,8 @@ documentazione. @item @cindex Deifik, Scott Scott Deifik -si @`e occupato della manutenzione per MS-DOS usando il compilatore DJGPP. +si @`e occupato in passato della manutenzione per MS-DOS usando +il compilatore DJGPP. @item @cindex Zaretskii, Eli @@ -40116,6 +40788,7 @@ Juan Grigera @`e autore di una versione di @command{gawk} per sistemi Windows32. (Questa versione non @`e pi@`u supportata.) + @item @cindex Hankerson, Darrel Per molti anni, il @@ -40149,6 +40822,9 @@ anche la relativa documentazione. Stephen @`e anche stato determinante nel lavoro iniziale per integrare il codice interno di gestione dei byte nel complesso del codice di @command{gawk}. +Inoltre, ha svolto molto del lavoro necessario per far s@`{@dotless{i}} che usando +l'opzione @option{--pretty-print} i commenti venissero conservati e +stampati nell'output. @item @cindex Woehlke, Matthew @@ -40265,6 +40941,19 @@ OpenVMS e alla relativa documentazione. @cindex Colombo, Antonio Antonio Giovanni Colombo ha riscritto diversi esempi, che non erano pi@`u attuali, contenuti nei primi capitoli, e gliene sono estremamente grato. +Ha inoltre preparato con Marco Curreli e mantiene la traduzione in +italiano di questo libro. + +@item +@cindex Curreli, Marco +Marco Curreli, insieme con Antonio Colombo, ha tradotto questo +@value{DOCUMENT} in italiano. @`E ora incluso nella distribuzione +di @command{gawk}. + +@item +@cindex Guerrero, Juan Manuel +Juan Manuel Guerrero ha preso in carico la manutenzione dellla +versione DJGPP di @command{gawk}. @item @cindex Robbins, Arnold @@ -40378,14 +41067,14 @@ Se si dispone del programma @command{wget}, si pu@`o utilizzarlo digitando un comando simile a questo: @example -wget http://ftp.gnu.org/gnu/gawk/gawk-@value{VERSION}.@value{PATCHLEVEL}.tar.gz +wget https://ftp.gnu.org/gnu/gawk/gawk-@value{VERSION}.@value{PATCHLEVEL}.tar.gz @end example @end itemize L'archivio che contiene il software GNU @`e disponibile in vari cloni (@dfn{mirror}) in tutto il mondo. La lista aggiornata dei siti clone @`e disponibile nel -@uref{http://www.gnu.org/order/ftp.html, sito web principale della FSF}. +@uref{https://www.gnu.org/order/ftp.html, sito web principale della FSF}. Si tenti di usare uno dei siti-clone; dovrebbero essere meno trafficati, ed @`e possibile che ce ne sia uno pi@`u vicino. @@ -40586,6 +41275,10 @@ nella @code{@@include}, n@'e @command{igawk} n@'e @file{igawk.1} sono effettivamente installati.) +@item doc/it/* +File per la traduzione italiana di questo @value{DOCUMENT}, preparata e +contribuita da Antonio Colombo e Marco Curreli. + @item doc/Makefile.in Il file in input usato durante la procedura di configurazione per generare l'effettivo @file{Makefile} da usare per creare la documentazione. @@ -40719,7 +41412,7 @@ usando il comando GNU Autoconf. descritto in dettaglio in @cite{Autoconf---Generating Automatic Configuration Scripts}, che pu@`o essere trovato in rete sul sito -@uref{http://www.gnu.org/software/autoconf/manual/index.html, +@uref{https://www.gnu.org/software/autoconf/manual/index.html, della Free Software Foundation}.) @end ifnotinfo @ifinfo @@ -40879,6 +41572,14 @@ Se si usa quest'opzione alcuni dei test di funzionalit@`a non avranno successo. Quest'opzione potr@`a essere rimossa in futuro. @end quotation +@cindex @option{--disable-mpfr}, opzione di configurazione +@cindex opzione di configurazione @code{--disable-mpfr} +@item --disable-mpfr +Non viene effettuato il controllo delle librerie MPFR e GMP. +Ci@`o pu@`o essere utile principalmente per gli sviluppatori, +per essere sicuro che tutto funzioni regolarmente nel caso in cui +il supporto MPFR non sia disponibile. + @cindex @option{--disable-nls}, opzione di configurazione @cindex opzione di configurazione @code{--disable-nls} @item --disable-nls @@ -41711,12 +42412,12 @@ Le persone che si occupano delle varie versioni di @command{gawk} sono: @c put the index entries outside the table, for docbook @cindex Buening, Andreas -@cindex Deifik, Scott @cindex Malmberg, John E. @cindex Pitts, Dave @cindex G., Daniel Richard @cindex Robbins, Arnold @cindex Zaretskii, Eli +@cindex Guerrero, Juan Manuel @ifset SMALLPRINT @multitable {MS-Windows} {123456789012345678901234567890123456789001234567890} @end ifset @@ -41725,7 +42426,7 @@ Le persone che si occupano delle varie versioni di @command{gawk} sono: @end ifclear @item Unix e sistemi POSIX @tab Arnold Robbins, @EMAIL{arnold@@skeeve.com,arnold at skeeve dot com} -@c @item MS-DOS con DJGPP @tab Scott Deifik, @EMAIL{scottd.mail@@sbcglobal.net,scottd dot mail at sbcglobal dot net} +@item MS-DOS with DJGPP @tab Juan Manuel Guerrero, @EMAIL{juan.guerrero@@gmx.de, juan dot guerrero at gmx dot de} @item MS-Windows con MinGW @tab Eli Zaretskii, @EMAIL{eliz@@gnu.org,eliz at gnu dot org} @@ -41749,6 +42450,13 @@ nel caso che qualche volontario desideri prenderla in carico. Se questo non dovesse succedere, la parte di codice relativa questa versione sar@`a rimossa dalla distribuzione. +@c 7/2017, Juan Guerrero has taken over the DJGPP port. +@ignore +The DJGPP port is no longer supported; it will remain in the code base +for a while in case a volunteer wishes to take it over. If this does +not happen, then eventually code for this port will be removed. +@end ignore + @node Altre versioni @appendixsec Altre implementazioni di @command{awk} liberamente disponibili @cindex @command{awk}, implementazioni di @@ -41817,7 +42525,7 @@ git clone git://github.com/onetrueawk/awk bwkawk @end example @noindent -Questo comando crea una copia del deposito @uref{http://git-scm.com, Git} +Questo comando crea una copia del deposito @uref{https://git-scm.com, Git} in una directory chiamata @file{bwkawk}. Se si omette questo argomento della riga di comando @command{git}, la copia del deposito @`e creata nella directory di nome @file{awk}. @@ -41882,7 +42590,7 @@ Il traduttore di @command{awk} @`e rilasciato sotto la licenza GPL, e la relativa libreria sotto la licenza LGPL. Per ottenere @command{awka}, si visiti -il sito @url{http://sourceforge.net/projects/awka}. +il sito @url{https://sourceforge.net/projects/awka}. @c You can reach Andrew Sumner at @email{andrew@@zbcom.net}. @c andrewsumner@@yahoo.net @@ -41954,7 +42662,7 @@ essere un interprete completo, anche se, poich@'e usa funzionalit@`a di Java per l'I/O e per la ricerca di @dfn{regexp}, il linguaggio che supporta @`e differente da @command{awk} POSIX. Ulteriori informazioni sono disponibili sulla -@uref{http://jawk.sourceforge.net, pagina principale del progetto}. +@uref{https://jawk.sourceforge.net, pagina principale del progetto}. @item Libmawk @cindex @command{libmawk} @@ -41979,7 +42687,7 @@ modificata da Nelson Beebe di BWK @command{awk}, descritta prima.) @cindex sorgente, codice, QSE @command{awk} Questo @`e un interprete di @command{awk} incorporabile. Per ulteriori informazioni, si veda -@uref{http://code.google.com/p/qse/} e @uref{http://awk.info/?tools/qse}. +@uref{https://code.google.com/p/qse/} e @uref{http://awk.info/?tools/qse}. @item @command{QTawk} @cindex QuikTrim Awk @@ -41999,7 +42707,7 @@ a partire dal 2014 circa. @item Altre versioni Si veda anche [in inglese] la sezione ``Versions and implementations'' della voce di -@uref{http://en.wikipedia.org/wiki/Awk_language#Versions_and_implementations, +@uref{https://en.wikipedia.org/wiki/Awk_language#Versions_and_implementations, Wikipedia} su @command{awk} per informazioni su ulteriori versioni. @end table @@ -42014,16 +42722,23 @@ di distribuzione del Progetto GNU @code{ftp.gnu.org}. La maniera canonica per scaricarlo e installarlo @`e: @example -wget http://ftp.gnu.org/gnu/gawk/gawk-@value{VERSION}.@value{PATCHLEVEL}.tar.gz +wget https://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 +@quotation NOTA +A causa degli URL di tipo @samp{https://}, pu@`o essere necessario +specificare l'opzione @option{--no-check-certificate} a @command{wget} +per poter scaricare il file. +@end quotation + @item @command{gawk} pu@`o essere installato anche su sistemi non-POSIX. I sistemi correntemente supportati sono MS-Windows, usando -MSYS, MinGW, e Cygwin, +MSYS, DJGPP, MinGW, e Cygwin, +@c OS/2, e sia Vax/VMS che OpenVMS. Le istruzioni per ognuno di questi sistemi sono incluse in questa @value{APPENDIX}. @@ -42137,12 +42852,12 @@ le versioni ufficiali rilasciate di @command{gawk}. Peraltro, se si intende modificare @command{gawk} e mettere a disposizione le modifiche, @`e preferibile lavorare sulla versione in via di sviluppo. Per far ci@`o @`e necessario accedere al deposito del codice sorgente di @command{gawk}. -Il codice @`e mantenuto usando il @uref{http://git-scm.com, sistema distribuito +Il codice @`e mantenuto usando il @uref{https://git-scm.com, sistema distribuito di controllo delle versioni Git}. Sar@`a necessario installarlo se non @`e gi@`a presente nel sistema. Quando @command{git} @`e disponibile, va usato il comando: @example -git clone git://git.savannah.gnu.org/gawk.git +git clone https://git.savannah.gnu.org/gawk.git @end example @noindent @@ -42214,7 +42929,7 @@ Questo documento descrive come dovrebbe essere scritto il software GNU. Se non lo si @`e letto, @`e bene farlo, preferibilmente @emph{prima} di iniziare a modificare @command{gawk}. (Gli @cite{Standard di codifica GNU} sono disponibili nel sito web del -@uref{http://www.gnu.org/prep/standards/, Progetto GNU}. +@uref{https://www.gnu.org/prep/standards/, Progetto GNU}. Sono disponibili anche versioni in formato Texinfo, Info, e DVI.) @cindex @command{gawk}, stile di codifica in @@ -42632,13 +43347,19 @@ Egli aveva @file{/usr/local/bin} all'inizio del suo @env{PATH} e dava i seguenti comandi: @example -wget http://ftp.gnu.org/gnu/@var{package}/@var{package}-@var{x}.@var{y}.@var{z}.tar.gz +wget https://ftp.gnu.org/gnu/@var{package}/@var{package}-@var{x}.@var{y}.@var{z}.tar.gz tar -xpzvf @var{package}-@var{x}.@var{y}.@var{z}.tar.gz cd @var{package}-@var{x}.@var{y}.@var{z} ./configure && make && make check make install # come utente root @end example +@quotation NOTA +A causa degli URL di tipo @samp{https://}, pu@`o essere necessario +specificare l'opzione @option{--no-check-certificate} a @command{wget} +per poter scaricare il file. +@end quotation + @c @item @ignore These days the maintainer uses Ubuntu 12.04 which is medium current, but @@ -42687,7 +43408,7 @@ Fortunatamente, il server Git pu@`o rispondere a questa esigenza. Per ogni dato ramo chiamato @var{nome-ramo}, basta usare: @example -wget http://git.savannah.gnu.org/cgit/gawk.git/snapshot/gawk-@var{nome-ramo}.tar.gz +wget https://git.savannah.gnu.org/cgit/gawk.git/snapshot/gawk-@var{nome-ramo}.tar.gz @end example @noindent @@ -43428,7 +44149,7 @@ Si veda ``Passaggio per valore/riferimento''. Arrotondare il risultato di un'operazione aritmetica pu@`o essere difficile. C'@`e pi@`u di un modo di arrotondare, e in @command{gawk} @`e possibile scegliere quale metodo dovrebbe essere usato all'interno di un programma. -@xref{Impostare modi di arrotondare}. +@xref{Impostare modo di arrotondare}. @item Assegnamento Un'espressione @command{awk} che cambia il valore di qualche variabile o @@ -44410,7 +45131,7 @@ Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/} This is an unofficial translation of the GNU General Public License into Italian. It was not published by the Free Software Foundation, and does not -legally state the distribution terms for software that uses the GNU GPL—only +legally state the distribution terms for software that uses the GNU GPL---only the original English text of the GNU GPL does that. However, we hope that this translation will help Italian speakers understand the GNU GPL better. @@ -45205,7 +45926,7 @@ Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, In This is an unofficial translation of the GNU Free Documentation License into Italian. It was not published by the Free Software Foundation, and does not -legally state the distribution terms for software that uses the GNU FDL—only +legally state the distribution terms for software that uses the GNU FDL---only the original English text of the GNU FDL does that. However, we hope that this translation will help Italian speakers understand the GNU FDL better. @@ -45679,10 +46400,10 @@ Una MMC @`e ``qualificata a cambiare questa licenza'' se ha adottato questa licenza e se tutte le opere precedentemente pubblicate con questa licenza altrove rispetto alla MMC e successivamente incorporate del tutto o in parte nella MMC (1) non hanno testo di copertina o sezioni invarianti e -(2) sono state incorporate prima del 1° Novembre 2008. +(2) sono state incorporate prima del 1^ Novembre 2008. L'operatore di un sito MMC pu@`o ripubblicare un MMC contenuto nel sito con -una CC-BY-SA nello stesso sito in qualsiasi momento prima del 1° Agosto +una CC-BY-SA nello stesso sito in qualsiasi momento prima del 1^ Agosto 2009, da parte di una MMC qualificata a cambiare questa licenza. @end enumerate |