aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/it/ChangeLog4
-rwxr-xr-x[-rw-r--r--]doc/it/gawktexi.in1109
2 files changed, 919 insertions, 194 deletions
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 &copy; 1989, 1991, 1992, 1993, 1996&ndash;2005, 2007, 2009&ndash;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