aboutsummaryrefslogtreecommitdiffstats
path: root/doc/it/gawktexi.in
diff options
context:
space:
mode:
Diffstat (limited to 'doc/it/gawktexi.in')
-rwxr-xr-x[-rw-r--r--]doc/it/gawktexi.in2001
1 files changed, 1599 insertions, 402 deletions
diff --git a/doc/it/gawktexi.in b/doc/it/gawktexi.in
index fe7c6b29..ed28d6b6 100644..100755
--- a/doc/it/gawktexi.in
+++ b/doc/it/gawktexi.in
@@ -56,7 +56,7 @@
@c applies to and all the info about who's publishing this edition
@c These apply across the board.
-@set UPDATE-MONTH Settembre 2020
+@set UPDATE-MONTH Luglio 2021
@set VERSION 5.1
@set PATCHLEVEL 0
@@ -76,6 +76,7 @@
@iftex
@set DOCUMENT libro
@set CHAPTER capitolo
+@set CHAPTERS capitoli
@set APPENDIX appendice
@set SECTION sezione
@set SECTIONS sezioni
@@ -93,11 +94,12 @@
@ifinfo
@set DOCUMENT File Info
@set CHAPTER nodo principale
+@set CHAPTERS nodi principali
@set APPENDIX nodo principale
-@set SECTION nodo secondario
-@set SECTIONS nodi secondari
-@set SUBSECTION nodo
-@set SUBSECTIONS nodi
+@set SECTION nodo
+@set SECTIONS nodi
+@set SUBSECTION sottonodo
+@set SUBSECTIONS sottonodi
@set DARKCORNER (a.b.)
@set COMMONEXT (e.c.)
@set PAGE videata
@@ -105,6 +107,7 @@
@ifhtml
@set DOCUMENT Documento
@set CHAPTER capitolo
+@set CHAPTERS capitoli
@set APPENDIX appendice
@set SECTION sezione
@set SECTIONS sezioni
@@ -117,6 +120,7 @@
@ifdocbook
@set DOCUMENT libro
@set CHAPTER capitolo
+@set CHAPTERS capitoli
@set APPENDIX appendice
@set SECTION sezione
@set SECTIONS sezioni
@@ -129,6 +133,7 @@
@ifxml
@set DOCUMENT libro
@set CHAPTER capitolo
+@set CHAPTERS capitoli
@set APPENDIX appendice
@set SECTION sezione
@set SECTIONS sezioni
@@ -141,6 +146,7 @@
@ifplaintext
@set DOCUMENT libro
@set CHAPTER capitolo
+@set CHAPTERS capitoli
@set APPENDIX appendice
@set SECTION sezione
@set SECTIONS sezioni
@@ -309,7 +315,7 @@ Some comments on the layout for TeX.
Tel.: +1-617-542-5942 Fax: +1-617-542-2652 Email: <email>gnu@@gnu.org</email>
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;2020
+<literallayout class="normal">Copyright &copy; 1989, 1991, 1992, 1993, 1996&ndash;2005, 2007, 2009&ndash;2021
Free Software Foundation, Inc.
All Rights Reserved.
</literallayout>
@@ -331,7 +337,7 @@ Italian Linux Documentation Project (ILDP)
Email: <emailildp@@pluto.it
URL: <ulink url="http://www.pluto.it/ildp">http://www.pluto.it/ildp/</ulink></literallayout>
-<literallayout class="normal">Copyright &copy; 2016&ndash;2020
+<literallayout class="normal">Copyright &copy; 2016&ndash;2021
Free Software Foundation, Inc.
All Rights Reserved.
</literallayout>
@@ -339,7 +345,7 @@ All Rights Reserved.
@ifnotdocbook
@iftex
-Copyright @copyright{} 1989, 1991, 1992, 1993, 1996--2005, 2007, 2009--2020 @*
+Copyright @copyright{} 1989, 1991, 1992, 1993, 1996--2005, 2007, 2009--2021 @*
Free Software Foundation, Inc.
@end iftex
@end ifnotdocbook
@@ -687,7 +693,7 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation,
* Separazione in base al contenuto:: Definire campi dal loro contenuto.
* File CSV:: Ancora sui file CSV.
* Controllare la creazione di campi:: Controllare come @command{gawk} sta
- dividendo i record.
+ suddividendo i record.
* Righe multiple:: Record su righe multiple
* Getline:: Richiedere input usando @code{getline}.
* Getline semplice:: Usare @code{getline} senza argomenti.
@@ -877,6 +883,8 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation,
* Vettori di vettori:: Vettori multidimensionali veri.
* Sommario dei vettori:: Sommario dei vettori.
* Funzioni predefinite:: Riepilogo delle funzioni predefinite.
+* Funzioni booleane:: Una funzione che restituisce valori
+ booleani.
* Chiamare funzioni predefinite:: Come chiamare funzioni predefinite.
* Funzioni numeriche:: Funzioni che trattano numeri, comprese
@code{int()}, @code{sin()}
@@ -933,6 +941,8 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation,
vettore in una stringa.
* Funzione getlocaltime:: Una funzione per ottenere data e
ora nel formato desiderato.
+* Funzione isnumeric:: Una funzione per controllare se un
+ valore @`e numerico.
* Funzione readfile:: Una funzione per leggere un file
intero in un colpo solo.
* Apici alla shell:: Una funzione per passare stringhe
@@ -968,6 +978,9 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation,
* Programma tee:: Il programma di utilit@`a @command{tee}.
* Programma uniq:: Il programma di utilit@`a @command{uniq}.
* Programma wc:: Il programma di utilit@`a @command{wc}.
+* Byte vs. Caratteri:: Moderni insiemi di caratteri.
+* Usare le estensioni:: Una breve introduzione alle estensioni.
+* Programmma @command{wc}:: Codice per @file{wc.awk}.
* Programmi vari:: Alcuni interessanti programmi in
@command{awk}
* Programma dupword:: Trovare parole duplicate in un
@@ -994,6 +1007,7 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation,
* Esercizi sui programmi:: Esercizi.
* Dati non decimali:: Consentire dati di input in base
diversa da 10.
+* Valori di tipo booleano:: Valori di tipo @code{number|bool}.
* Ordinamento di vettori:: Modi per controllare la visita di un
vettore e il suo ordinamento.
* Controllare visita vettori:: Come usare PROCINFO["sorted_in"].
@@ -1005,6 +1019,7 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation,
programmazione di rete.
* Profilare:: Profilare i propri programmi
@command{awk}.
+* Filosofia delle estensioni:: Cosa dovrebbe essere incluso e cosa no.
* Sommario funzionalit@`a avanzate:: Sommario funzionalit@`a avanzate.
* I18N e L10N:: Internazionalizzazione e localiz.
* Utilizzare @command{gettext}:: Come funziona GNU @code{gettext}.
@@ -1033,7 +1048,7 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation,
* Controllo dei breakpoint:: Controllo dei punti d'interruzione.
* Controllo esecuzione debugger:: Controllo di esecuzione.
* Vedere e modificare dati:: Vedere e modificare dati.
-* Stack di esecuzione:: Lavorare con lo @dfn{stack}.
+* Stack di esecuzione:: Lavorare con lo @dfn{Stack}.
* Informazioni sul debugger:: Ottenere informazioni sullo stato
del programma e del debugger.
* Comandi vari del debugger:: Comandi vari del debugger.
@@ -1065,13 +1080,14 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation,
esattamente.
* Confronti tra valori in VM:: Come confrontare valori in virgola mobile.
* Gli errori si sommano:: Gli errori diventano sempre maggiori.
+* Valori strani:: Un cenno riguardo ai valori infiniti e a NaN [Non un Numero].
* Ottenere la precisione:: Ottenere la precisione voluta.
* Tentare di arrotondare:: Tentare di aggiungere bit di precisione e
arrotondare.
* Impostare la precisione:: Impostare la precisione.
* Impostare modo di arrotondare:: Impostare la modalit@`a di
arrotondamento.
-* Controllare disponibilit@`a MPFR:: Come controllare se MPFR @`e disponibile.
+* 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.
@@ -1084,8 +1100,8 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation,
* Intro funzioni estensione API:: Introduzione alle funzioni dell'API.
* Tipi di dati generali:: I tipi di dati.
* Funzioni di allocazione memoria:: Funzioni per allocare memoria.
-* API e gestione valori MPFR e GMP:: Gestione valori MPFR e GMP.
* Funzioni di costruzione:: Funzioni per creare valori.
+* API e gestione valori MPFR e GMP:: Gestione valori MPFR e GMP.
* Funzioni di registrazione:: Funzioni per registrare cose con
@command{gawk}.
* Funzioni di estensione:: Registrare funzioni di estensione.
@@ -1177,7 +1193,7 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation,
* Ulteriori opzioni di configurazione:: Altre opzioni utilizzabili in fase
di compilazione.
* Filosofia della configurazione:: Come si suppone che funzioni.
-* Installazione non-Unix:: Installazioni su altri Sistemi
+* Installazione non-Unix:: Installazioni su altri Sistemi Operativi.
Operativi.
* Installazione su PC:: Installare e compilare
@command{gawk} su Microsoft Windows.
@@ -1199,12 +1215,13 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation,
VMS.
* Esecuzione su VMS:: Come eseguire @command{gawk} su VMS.
* GNV su VMS:: Il progetto GNV di VMS.
-* Vecchio Gawk su VMS:: Una versione non aggiornata arriva
- con alcune versioni di VMS.
* Bug:: Notificare problemi e bug.
-* Indirizzo Bug:: Dove notificare problemi.
+* Definizione di bug:: Definire cos'@`e e cosa non @`e un bug.
+* Indirizzo bug:: Dove notificare problemi.
* Usenet:: Dove non notificare problemi.
-* Manutentori:: Manutentori di version non-*nix.
+* Bug di prestazione:: Che fare in caso di problemi di prestazione.
+* Richieste di aiuto:: Gestire domande non relative ai bug.
+* Manutentori:: Manutentori di versioni non-Unix.
* Altre versioni:: Altre implementazioni di
@command{awk} liberamente
disponibili.
@@ -1363,7 +1380,7 @@ scoprire prima i problemi che possono presentarsi. Spesso, l'efficienza di
questa versione iniziale interpretata @`e sufficiente e il prototipo
AWK diventa il prodotto finale.
-Il nuovo comando @command{pgawk} (profiling @command{gawk}) produce
+Il nuovo comando @command{pgawk} (@dfn{profiling} @command{gawk}) produce
conteggi sull'esecuzione delle istruzioni del programma.
Recentemente ho fatto un tentativo con un algoritmo che, a fronte di
@ifnotdocbook
@@ -1779,7 +1796,21 @@ Si trovano tutti nell'indice analitico, alla voce ``riquadro.''
@end ifclear
La maggior parte delle volte, gli esempi usano programmi @command{awk} completi.
-Alcune delle @value{SECTIONS} pi@`u avanzate mostrano solo la parte del programma
+@ifnotinfo
+Alcune delle
+@end ifnotinfo
+@ifinfo
+Alcuni dei
+@end ifinfo
+@value{SECTIONS}
+pi@`u
+@ifnotinfo
+avanzate
+@end ifnotinfo
+@ifinfo
+avanzati
+@end ifinfo
+mostrano solo la parte del programma
@command{awk} che illustra il concetto che si sta descrivendo.
Sebbene questo @value{DOCUMENT} sia destinato soprattutto alle persone che non
@@ -2490,7 +2521,7 @@ sulla sua documentazione senza il suo aiuto.
Brian @`e un fuoriclasse sia come programmatore che come autore di manuali
tecnici. @`E mio dovere ringraziarlo (una volta di pi@`u) per la sua costante
amicizia e per essere stato per me un modello da seguire ormai per oltre
-30 anni! Averlo come revisiore @`e per me un privilegio eccitante, ma @`e
+30 anni! Averlo come revisore @`e per me un privilegio eccitante, ma @`e
stata anche un'esperienza che mi ha fatto sentire molto piccolo@enddots{}
@cindex Robbins @subentry Miriam
@@ -2710,7 +2741,7 @@ un file separato che contenga il programma @command{awk}. Uno @dfn{script}
di shell @`e pi@`u affidabile, perch@'e non ci sono altri file che possono
venirsi a trovare fuori posto.
-Pi@`u avanti in questo capitolo,
+Pi@`u avanti in questo @value{CHAPTER},
@iftex
nella
@end iftex
@@ -3007,7 +3038,13 @@ $ @kbd{awk '@{ print "Ciao" @} # un'idea brillante'}
Mettere una barra inversa prima dell'apice singolo in @samp{un'idea} non
risolverebbe, poich@'e le barre inverse non sono speciali all'interno di apici
singoli.
-La prossima @value{SUBSECTION} descrive le regole di protezione della shell.
+@ifnotinfo
+La prossima
+@end ifnotinfo
+@ifinfo
+Il prossimo
+@end ifinfo
+@value{SUBSECTION} descrive le regole di protezione della shell.
@end quotation
@node Protezione
@@ -3259,7 +3296,7 @@ Le ``shell'' nei sistemi Microsoft Windows usano il carattere doppio apice
per protezione, e rendono difficile o impossibile inserire un carattere
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
+proteggere i doppi apici, con questo @dfn{script} di una sola riga, che stampa
tutte le righe di un file, racchiudendole tra doppi apici:
@example
@@ -3338,11 +3375,12 @@ persona @`e un amico [Friend]. Una @samp{R} vuol dire che quella persona @`e
un parente [Relative]:
@example
-@c system if test ! -d eg ; then mkdir eg ; fi
-@c system if test ! -d eg/lib ; then mkdir eg/lib ; fi
-@c system if test ! -d eg/data ; then mkdir eg/data ; fi
-@c system if test ! -d eg/prog ; then mkdir eg/prog ; fi
-@c system if test ! -d eg/misc ; then mkdir eg/misc ; fi
+@c system if test ! -d eg ; then mkdir eg ; fi
+@c system if test ! -d eg/lib ; then mkdir eg/lib ; fi
+@c system if test ! -d eg/data ; then mkdir eg/data ; fi
+@c system if test ! -d eg/prog ; then mkdir eg/prog ; fi
+@c system if test ! -d eg/misc ; then mkdir eg/misc ; fi
+@c system if test ! -d eg/test-programs ; then mkdir eg/test-programs ; fi
@c file eg/data/mail-list
Amelia 555-5553 amelia.zodiacusque@@gmail.com F
Anthony 555-3412 anthony.asserturo@@hotmail.com A
@@ -3689,7 +3727,7 @@ anno).
Come gi@`a visto sopra, l'output di @w{@samp{ls -l}} elenca la lista
dei file contenuti in una directory, compresa la lunghezza di ogni
-file la data in cui il file @`e stato modificato per l'ultima volta.
+file e la data in cui il file @`e stato modificato per l'ultima volta.
Il primo campo contiene le autorizzazioni di lettura-scrittura,
il secondo campo contiene il numero di @dfn{link} di quel file
e il terzo campo identifica il proprietario del file.
@@ -3698,7 +3736,7 @@ Il quinto campo contiene la dimensione del file, in byte.
Il sesto, settimo e ottavo campo contengono il mese, il giorno e
l'ora, rispettivamente, in cui il file @`e stato modificato l'ultima
volta.
-Finalmente il nono campo contiene il valore @value{FN}.
+Infine, il nono campo contiene il valore @value{FN}.
@c @cindex automatic initialization
@cindex inizializzazione @subentry automatica
@@ -3718,8 +3756,14 @@ regola @code{END} viene eseguita e viene stampato il valore di @code{somma}.
In questo esempio, il valore di @code{somma} @`e 80600.
Queste tecniche pi@`u avanzate di @command{awk} sono trattate in
+@ifnotinfo
+successive
+@end ifnotinfo
+@ifinfo
+successivi
+@end ifinfo
@value{SECTIONS}
-successive (@pxref{Panoramica sulle azioni}). Prima di poter passare a una
+(@pxref{Panoramica sulle azioni}). Prima di poter passare a una
programmazione pi@`u avanzata con @command{awk}, @`e necessario sapere come
@command{awk} interpreta i file in input e visualizza quelli in output.
Modificando campi e usando l'istruzione @code{print} @`e possibile produrre
@@ -3937,7 +3981,7 @@ e buttati via. Poich@'e i programmi @command{awk} sono interpretati, si pu@`o
evitare la (normalmente laboriosa) parte di compilazione nel ciclo tipico
dello sviluppo software, ossia edita-compila-prova-correggi.
-@cindex BWK @command{awk} @seeentry{Brian Kernighan @subentry @command{awk} di}
+@cindex BWK @command{awk} @seeentry{Brian Kernighan, @command{awk} di}
@cindex Brian Kernighan @subentry @command{awk} di
In @command{awk} sono stati scritti programmi complessi, compreso un assembler
completo, pluri-piattaforma per
@@ -4429,7 +4473,7 @@ informazioni.
@cindex codice-byte interno @subentry tracciatura del
Stampa i nomi del codice-byte generato internamente, nell'ordine
in cui sono incontrati durante l'esecuzione del programma.
-Questa trace @`e stampata sullo standard error.
+Questa tracciatura @`e stampata sullo standard error.
Ogni ``codice operativo'' @`e preceduto da un segno @code{+}
nell'output.
@@ -4534,7 +4578,7 @@ Forza l'uso del carattere di separazione decimale della localizzazione
quando analizza i dati in input
(@pxref{Localizzazioni}).
-@cindex stampa elegante
+@cindex stampa-elegante
@item @option{-o}[@var{file}]
@itemx @option{--pretty-print}[@code{=}@var{file}]
@cindex @option{-o} (opzione)
@@ -5018,7 +5062,7 @@ variabile non esiste, o se ha un come valore la stringa nulla,
@command{gawk} usa un percorso di default (descritto tra poco).
La funzionalit@`a del percorso di ricerca @`e particolarmente utile per costruire
-librerie di funzioni di @command{awk}. I file di libreria possono essere messi
+librerie di funzioni di @command{awk}. Le librerie di file possono essere messe
in una directory standard inclusa nel percorso di ricerca
e richiamati sulla riga di comando con un
@value{FN} breve. Altrimenti, si dovrebbe scrivere l'intero @value{FN} per
@@ -5026,7 +5070,7 @@ ciascun file.
Usando l'opzione @option{-i}, o l'opzione @option{-f}, i programmi di
@command{awk} scritti sulla riga di comando possono usare le funzionalit@`a
-contenute nei file di libreria di @command{awk}
+contenute nelle librerie di file di @command{awk}
@iftex
(@pxrefil{Funzioni di libreria}).
@end iftex
@@ -5192,7 +5236,11 @@ del filesystem).
@item AWK_HASH
Se questa variabile @`e impostata con un valore di @samp{gst}, @command{gawk}
usa la funzione hash di GNU Smalltalk per gestire i vettori.
-Questa funzione pu@`o essere leggermente pi@`u veloce della funzione standard.
+Se invece ha per valore @samp{fnv1a}, @command{gawk} usa la funzione hash
+@uref{http://www.isthe.com/chongo/tech/comp/fnv/index.html,
+FNV1-A}.
+Queste funzioni possono essere leggermente pi@`u veloci della funzione standard.
+
@item AWKREADFUNC
Se questa variabile esiste, @command{gawk} legge i file sorgenti una riga per
volta, anzich@'e a blocchi. Questa variabile @`e presente
@@ -5386,7 +5434,7 @@ possono includere queste ``librerie'' usando il percorso completo dei
file, o impostando opportunamente la variabile d'ambiente @env{AWKPATH} e
quindi usando @code{@@include} con la sola parte del percorso completo che
designa il file. Naturalmente,
-si possono tenere i file di libreria in pi@`u di una directory;
+si possono tenere le librerie di file in pi@`u di una directory;
pi@`u @`e complesso l'ambiente di lavoro, pi@`u
directory possono essere necessarie per organizzare i file da includere.
@@ -6119,7 +6167,7 @@ confronti. Per esempio, @samp{\$}
individua il carattere @samp{$}.
@cindex espressioni regolari @subentry @`ancore nelle
-@cindex Texinfo @subentry inizi di capitolo nei file
+@cindex Texinfo @subentry inizi di @value{CHAPTER} nei file
@cindex @code{^} (circonflesso) @subentry operatore @dfn{regexp}
@cindex circonflesso (@code{^}) @subentry operatore @dfn{regexp}
@item @code{^}
@@ -6314,6 +6362,47 @@ nella @dfn{regexp}. Per esempio, @code{/+/} individua un semplice segno
pi@`u. Tuttavia, molte altre versioni di @command{awk} trattano una
tale notazione come un errore di sintassi.
+@sidebar E se la @dfn{regexp} @`e vuota?
+@cindex vuote @subentry @dfn{regexps}
+@cindex @dfn{regexp} @subentry vuote
+Viene qui descritto un uso avanzato delle @dfn{regexp}.
+Pu@`o essere saltato in una prima lettura.
+
+Si pu@`o specificare una costante @dfn{regexp} vuota (@samp{//}) in ogni
+posto in cui ci si aspetta di trova una @dfn{regexp}.
+Pu@`o servire a qualcosa farlo? A cosa corrisponde?
+
+Ha senso farlo. Corrisponde alla stringa vuota (invisibile),
+all'inizio e alla fine di una stringa di caratteri, come pure
+alla stringa vuota tra un carattere e l'altro. Lo si vede bene
+con la funzione @code{gsub()}, che si usa per fare delle sostituzioni
+globali (@pxref{Funzioni per stringhe}). L'uso normale di @code{gsub()}
+@`e del tipo:
+
+@example
+$ @kbd{awk '}
+> @kbd{BEGIN @{}
+> @kbd{ x = "ABC_CBA"}
+> @kbd{ gsub(/B/, "bb", x)}
+> @kbd{ print x}
+> @kbd{@}'}
+@print{} AbbC_CbbA
+@end example
+
+Possiamo usare @code{gsub()} per verificare dove sono situate le stringhe
+vuote che corrispondono alla @dfn{regexp} vuote:
+
+@example
+$ @kbd{awk '}
+> @kbd{BEGIN @{}
+> @kbd{ x = "ABC"}
+> @kbd{ gsub(//, "x", x)}
+> @kbd{ print x}
+> @kbd{@}'}
+@print{} xAxBxCx
+@end example
+@end sidebar
+
@node Espressioni di intervallo
@subsection Alcune note sulle espressioni di intervallo
@@ -6384,7 +6473,7 @@ che occupano un unico byte (caratteri il cui valore stia
nell'intervallo 0--256). Per individuare un intervallo di
caratteri in cui i punti di inizio e fine dell'intervello
abbiano valori maggiori di 256, occorre immettere direttamente
-le codifiche multi-byte dei caratteri in questione.
+le codifiche multibyte dei caratteri in questione.
@cindex @code{\} (barra inversa) @subentry in espressioni tra parentesi quadre
@cindex barra inversa (@code{\}) @subentry in espressioni tra parentesi quadre
@@ -6523,7 +6612,7 @@ sono equivalenti). Queste sequenze sono:
@cindex espressioni @subentry tra parentesi quadre @subentry elementi di collazione
@cindex elementi @subentry di collazione
@item elementi di collazione
-Elementi di collazione multi-byte racchiusi fra
+Elementi di collazione multibyte racchiusi fra
@samp{[.} e @samp{.]}. Per esempio, se @samp{ch} @`e un elemento di collazione,
@samp{[[.ch.]]} @`e una @dfn{regexp} che individua questo elemento di
collazione, mentre @samp{[ch]} @`e una @dfn{regexp} che individua le lettere
@@ -7096,7 +7185,7 @@ getline (@pxref{Getline}).
* Dimensione costante:: Leggere campi di larghezza costante.
* Separazione in base al contenuto:: Definire campi dal loro contenuto.
* Controllare la creazione di campi:: Controllare come @command{gawk} sta
- dividendo i record.
+ suddividendo i record.
* Righe multiple:: Leggere record che sono su pi@`u righe.
* Getline:: Leggere file sotto il controllo del
programma, usando la funzione
@@ -7274,23 +7363,6 @@ in questione non viene trattato come tale, ma viene usato letteralmente.
Ci@`o viene fatto per compatibilit@`a all'indietro sia con il comando
Unix @command{awk} che con lo standard POSIX.
-Quando si usano caratteri normali come separatore di record,
-c'@`e un caso insolito che capita quando @command{gawk}
-@`e reso completamente conforme a POSIX (@pxref{Opzioni}).
-In quel caso, la seguente (estrema) @dfn{pipeline} stampa un sorprendente
-@samp{1}:
-
-@example
-$ echo | gawk --posix 'BEGIN @{ RS = "a" @} ; @{ print NF @}'
-@print{} 1
-@end example
-
-C'@`e un solo campo, consistente in un ritorno a capo. Il valore della
-variabile predefinita @code{NF} @`e il numero di campi nel record corrente.
-(Normalmente @command{gawk} tratta il ritorno a capo come uno spazio
-vuoto, stampando @samp{0} come risultato. Anche molte altre versioni di
-@command{awk} agiscono in questo modo.)
-
@cindex angolo buio @subentry file in input
Il raggiungimento della fine di un file in input fa terminare il record di
input corrente, anche se l'ultimo carattere nel file non @`e il carattere in
@@ -7387,7 +7459,7 @@ particolare se il testo di input che potrebbe avere una corrispondenza con la
parte finale @`e piuttosto lungo. @command{gawk} cerca di evitare questo
problema, ma al momento non ci sono garanzie che questo funzioni sempre.
-@quotation NOTA
+@sidebar Avvertenze per quando si usano espressioni regolari come @code{RS}
Si ricordi che in @command{awk}, i metacaratteri di ancoraggio @samp{^} e
@samp{$} trovano l'inizio e la fine di una @emph{stringa}, e non l'inizio e la
fine di una @emph{riga}. Come risultato, qualcosa come
@@ -7395,7 +7467,15 @@ fine di una @emph{riga}. Come risultato, qualcosa come
Questo perch@'e @command{gawk} vede il file in input come un'unica lunga stringa
in cui possono essere presenti dei caratteri di ritorno a capo.
@`E meglio perci@`o evitare metacaratteri di ancoraggio nel valore di @code{RS}.
-@end quotation
+
+La suddivisione in campi usando espressioni regolari funziona in maniera
+differente rispetto a quando la si usa con le funzioni @code{sub()}, @code{gsub()}, e
+@code{gensub()} (@pxref{Funzioni per stringhe}). Tali funzioni consentono
+che un'espressione regolare sia soddisfatta da una stringa nulla;
+la suddivisione in campi non lo consente. Quindi, per esempio,
+@samp{RS = "()"} @emph{non} divide un record in campi di un carattere
+ciascuno.
+@end sidebar
@cindex @command{gawk} @subentry variabile @subentry @code{RT} in
@cindex @code{RT} (variabile)
@@ -7927,7 +8007,13 @@ regole.
@cindex espressioni regolari @subentry come separatore di campo
@cindex separatore di campo @subentry espressioni regolari come
-La precedente @value{SUBSECTION}
+@ifnotinfo
+La precedente
+@end ifnotinfo
+@ifinfo
+Il precedente
+@end ifinfo
+@value{SUBSECTION}
ha illustrato l'uso di caratteri singoli o di stringhe semplici come
valore di @code{FS}.
Pi@`u in generale, il valore di @code{FS} pu@`o essere una stringa contenente
@@ -8034,6 +8120,15 @@ $ @kbd{echo 'xxAA xxBxx C' |}
@print{} -->C<--
@end example
+Inoltre,
+la suddivisione in campi usando espressioni regolari funziona in maniera
+differente rispetto a quando la si usa con le funzioni @code{sub()}, @code{gsub()}, e
+@code{gensub()} (@pxref{Funzioni per stringhe}). Tali funzioni consentono
+che un'espressione regolare sia soddisfatta da una stringa nulla;
+La suddivisione in campi non lo consente. Quindi, per esempio,
+@samp{RS = "()"} @emph{non} divide un record in campi di un carattere
+ciascuno.
+
@node Campi di un solo carattere
@subsection Fare di ogni carattere un campo separato
@@ -8592,6 +8687,10 @@ parole, @code{FS} definisce cosa un campo @emph{non @`e}, invece di cosa
Tuttavia, ci sono casi in cui effettivamente si ha bisogno di definire i campi
in base a cosa essi sono, e non in base a cosa non sono.
+@cindex dati CSV (valori separati da virgole) @subentry analizzare con @code{FPAT}
+@cindex CSV (valori separati da virgole) come dati @subentry analizzare con @code{FPAT}
+@cindex Comma Separated Values (CSV) come dati @subentry analizzare con @code{FPAT}
+@cindex valori separati da virgole (CSV) come dati @subentry analizzare con @code{FPAT}
Il caso pi@`u emblematico @`e quello dei dati cosiddetti @dfn{comma-separated
value} (CSV). Molti fogli elettronici, per esempio, possono esportare i dati
in file di testo, dove ogni record termina con un ritorno a capo e i campi
@@ -8710,7 +8809,7 @@ FPAT = "([^,]*)|(\"[^\"]+\")"
@c Per email from Ed Morton <mortoneccc@comcast.net>
@c
@c WONTFIX: 10/2020
-@c This is too much work. FPAT and CSV files are very flakey and
+@c This is too much work. FPAT and CSV files are very flaky and
@c fragile. Doing something like this is merely inviting trouble.
Come per @code{FS}, la variabile @code{IGNORECASE}
@@ -8789,8 +8888,20 @@ $ @kbd{gawk -v fpat=2 -f test-csv.awk sample.csv}
@print{} NF = 3 <p><><s>
@end example
+@cindex Collado, Manuel
+@cindex @code{CSVMODE}, libreria per @command{gawk}
+@cindex libreria @subentry @code{CSVMODE} per @command{gawk}
+@cindex dati CSV (valori separati da virgole) @subentry analizzare con libreria @code{CSVMODE}
+@cindex CSV (valori separati da virgole) come dati @subentry analizzare con libreria @code{CSVMODE}
+@cindex valori separati da virgole (CSV) come dati @subentry analizzare con libreria @code{CSVMODE}
+In generale, usare @code{FPAT} per effettuare l'analisi di dati in formato CSV
+@`e come utilizzare un lenzuolo troppo corto. Rimane sempre un angolo che non
+@`e coperto. Si raccomanda, in alternativa, di usare la libreria @code{CSVMODE}
+messa a disposizione da Manuel Collado. Vedere:
+@uref{http://mcollado.z15.es/xgawk/, @code{CSVMODE} libreria per @command{gawk}}.
+
@node Controllare la creazione di campi
-@section Controllare come @command{gawk} sta dividendo i record
+@section Controllare come @command{gawk} sta suddividendo i record
@cindex @command{gawk} @subentry separazione in campi e
Come visto sopra, @command{gawk} fornisce tre metodi indipendenti per
@@ -10449,9 +10560,16 @@ printf "%4.3e\n", 1950
stampa @samp{1.950e+03}, con un totale di quattro cifre significative, tre
delle quali
seguono il punto che separa la parte intera da quella decimale
-[in Italia si usa la virgola al posto del punto]
+[in Italia si usa la virgola al posto del punto e viceversa]
(L'espressione @samp{4.3} rappresenta due modificatori,
-introdotti nella prossima @value{SUBSECTION}).
+introdotti
+@ifnotinfo
+nella prossima
+@end ifnotinfo
+@ifinfo
+nel prossimo
+@end ifinfo
+@value{SUBSECTION}).
@samp{%E} usa @samp{E} invece di @samp{e} nell'output.
@item @code{%f}
@@ -10466,16 +10584,23 @@ printf "%4.3f", 1950
stampa @samp{1950.000}, con un minimo di quattro cifre significative, tre
delle quali vengono dopo il punto decimale.
(L'espressione @samp{4.3} rappresenta due modificatori,
-introdotti nella prossima @value{SUBSECTION}).
+introdotti
+@ifnotinfo
+nella prossima
+@end ifnotinfo
+@ifinfo
+nel prossimo
+@end ifinfo
+@value{SUBSECTION}).
In sistemi che implementano il formato in virgola mobile, come specificato
dallo standard IEEE 754, il valore infinito negativo @`e rappresentato come
@samp{-inf} o @samp{-infinity},
e l'infinito positivo come
@samp{inf} o @samp{infinity}.
-Il valore speciale ``not a number'' [non @`e un numero] viene scritto come
+Il valore speciale ``not a number'' ["non @`e un numero"] viene scritto come
@samp{-nan} o @samp{nan}
-(@pxref{Definizioni matematiche}).
+(@pxref{Valori strani}).
@item @code{%F}
Come @samp{%f}, ma i valori di infinito e di ``not a number'' sono scritti
@@ -10532,7 +10657,7 @@ stampare valori non validi, o comportarsi in modo completamente differente.
@quotation NOTA
Lo standard IEEE 754 per l'aritmetica in virgola mobile consente di
avere valori speciali per rappresentare ``infinito'' (sia positivo che
-negativo) e valori che sono ``non numerici'' (NaN - [Not a Number]).
+negativo) e valori che sono ``non numerici'' (NaN - [Non un Numero]).
L'input e l'output di tali valori avviene sotto forma di stringhe di
testo. Ci@`o pone dei problemi nel linguaggio @command{awk}, che
@@ -11767,7 +11892,14 @@ combinazioni tra questi usando diversi operatori.
@section Costanti, variabili e conversioni
Le espressioni sono costruite a partire da valori e dalle operazioni eseguite
-su di essi. Questa @value{SECTION} descrive gli oggetti elementari
+su di essi.
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION} descrive gli oggetti elementari
che forniscono i valori usati nelle espressioni.
@menu
@@ -12452,7 +12584,14 @@ Sono ricordate qui solo per completezza.
Le conversioni di numeri in stringhe e di stringhe in numeri sono generalmente
semplici. Ci possono essere delle sottigliezze che bisogna tenere presenti;
-questa @value{SECTION} tratta di quest'importante sfaccettatura di @command{awk}.
+@value{SECTION}
+@ifnotinfo
+questa
+@end ifnotinfo
+@ifinfo
+questo
+@end ifinfo
+tratta di quest'importante sfaccettatura di @command{awk}.
@menu
* Stringhe e numeri:: Come @command{awk} converte tra
@@ -13160,16 +13299,18 @@ Per avere la massima portabilit@`a, non usare l'operatore @samp{**=}.
@sidebar Ambiguit@`a sintattiche tra @samp{/=} e le espressioni regolari
@cindex angolo buio @subentry costanti @dfn{regexp} @subentry operatore @code{/=} e
-@cindex @code{/} (barra) @subentry operatore @code{/=} @subentry vs. costante @dfn{regexp} @code{/=@dots{}/}
-@cindex barra (@code{/}) @subentry operatore @code{/=} @subentry vs. costante @dfn{regexp} @code{/=@dots{}/}
+@cindex @code{/} (barra) @subentry operatore @code{/=} @subentry vs.@: costante @dfn{regexp} @code{/=@dots{}/}
+@cindex barra (@code{/}) @subentry operatore @code{/=} @subentry vs.@: costante @dfn{regexp} @code{/=@dots{}/}
@cindex @dfn{regexp} @subentry costanti @subentry @code{/=@dots{}/}, operatore @code{/=} e
@c derived from email from "Nelson H. F. Beebe" <beebe@math.utah.edu>
@c Date: Mon, 1 Sep 1997 13:38:35 -0600 (MDT)
-@cindex angolo buio @subentry operatore @code{/=} vs. costante @dfn{regexp} @code{/=@dots{}/}
-@cindex ambiguit@`a sintattica: operatore @code{/=} vs. costante @dfn{regexp} @code{/=@dots{}/}
-@cindex sintattica @subentry ambiguit@`a: operatore @code{/=} vs. costante @dfn{regexp} @code{/=@dots{}/}
+@cindex angolo buio @subentry operatore @code{/=} vs.@: costante @dfn{regexp} @code{/=@dots{}/}
+@cindex ambiguit@`a sintattica: operatore @code{/=} vs.@: costante @dfn{regexp} @code{/=@dots{}/}
+@cindex sintattica @subentry ambiguit@`a: operatore @code{/=} vs.@: costante @dfn{regexp} @code{/=@dots{}/}
+@cindex @code{/=} (uguale) @subentry operatore vs.@: @code{/=@dots{}/} costante @dfn{regexp}
+@cindex uguale (@code{/=}) @subentry operatore vs.@: @code{/=@dots{}/} costante @dfn{regexp}
C'@`e un'ambiguit@`a sintattica tra l'operatore di assegnamento @code{/=}
e le costanti @dfn{regexp} il cui primo carattere sia @samp{=}.
@value{DARKCORNER}
@@ -13331,8 +13472,15 @@ Si dovrebbero evitare cose come queste nei programmi.
In certi contesti, i valori delle espressioni servono anche come
``valori di verit@`a''; cio@`e, determinano quale sar@`a la direzione che il
-programma prender@`a durante la sua esecuzione. Questa
-@value{SECTION} descrive come @command{awk} definisce ``vero'' e ``falso''
+programma prender@`a durante la sua esecuzione.
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+descrive come @command{awk} definisce ``vero'' e ``falso''
e come questi valori sono confrontati.
@menu
@@ -14996,12 +15144,13 @@ Ci@`o non @`e pi@`u obbligatorio, ma @`e una buona idea continuare a seguire que
modello per migliorare l'organizzazione e la leggibilit@`a del programma.
Regole multiple @code{BEGIN} ed @code{END} sono utili per scrivere funzioni
-di libreria, poich@'e ogni file di libreria pu@`o avere la sua propria regola
-@code{BEGIN} e/o @code{END} per fare la propria inizializzazione e/o pulizia.
+di libreria, poich@'e ogni file di una libreria pu@`o avere la sua propria
+regola @code{BEGIN} e/o @code{END} per fare la propria inizializzazione e/o
+pulizia.
L'ordine in cui le funzioni di libreria sono menzionate nella riga dei comandi
determina l'ordine in cui le rispettive regole @code{BEGIN} ed @code{END} sono
eseguite. Per questo motivi, occorre prestare attenzione nello scrivere tali
-regole nei file di libreria, in modo che non sia importante
+regole nelle librerie di file, in modo che non sia importante
l'ordine in cui tali regole vengono eseguite.
@xref{Opzioni} per maggiori informazioni sull'uso di funzioni di libreria.
@iftex
@@ -15127,11 +15276,11 @@ I codici delle regole @code{BEGINFILE} sono eseguiti subito prima che
@`e impostata al nome del file corrente e @code{FNR} @`e impostata a zero.
Prima della @value{PVERSION} 5.1.1 di @command{gawk}, per un difetto di
-implementazione, @code{$0} e i campi del record mantenevano, nelle regole
+implementazione, @code{$0} e i campi del record mantenevano nelle regole
@code{BEGINFILE} il valore che avevano in precedenza.
A partire dalla @value{PVERSION} 5.1.1, sia @code{$0} che i campi del
record sono impostati alla stringa nulla, poich@'e nessun record @`e
-ancora stato letto dal file in procinto di essere elaborato.
+ancora stato letto dal file che sta per essere di essere elaborato.
La regola @code{BEGINFILE} d@`a la possibilit@`a di eseguire due compiti
che sarebbe difficile o impossibile effettuare altrimenti:
@@ -15194,7 +15343,7 @@ modalit@`a compatibile (@pxref{Opzioni}), non sono regole speciali.
@node Vuoto
@subsection Il criterio di ricerca vuoto
-@cindex vuoto @subentry criterio di ricerca
+@cindex vuoti @subentry criteri di ricerca
@cindex criteri di ricerca @subentry vuoti
Un criterio di ricerca vuoto (cio@`e omesso) corrisponde a
@emph{ogni} record in input. Per esempio, il programma:
@@ -16060,16 +16209,17 @@ risultato.
In @command{gawk}, l'esecuzione di @code{nextfile} produce ulteriori effetti:
le eventuali regole @code{ENDFILE}
sono eseguite se @command{gawk} non
-si trova correntemente all'interno di una regola @code{END} o
-@code{BEGINFILE}; @code{ARGIND} @`e
+si trova correntemente all'interno di una regola @code{END},
+@code{ARGIND} @`e
incrementato e le eventuali regole @code{BEGINFILE} sono eseguite.
(@code{ARGIND} non @`e stato ancora trattato.
@xref{Variabili predefinite}.)
-In @command{gawk}, @code{nextfile} @`e utile all'interno di una regola
+C'@`e un ulteriore caso speciale di utilizzo in @command{gawk}.
+@code{nextfile} @`e utile all'interno di una regola
@code{BEGINFILE} per evitare di elaborare un file che altrimenti causerebbe
un errore fatale in @command{gawk}.
-In questo caso, le regole @code{ENDFILE} non vengono eseguite.
+In questo caso speciale, le regole @code{ENDFILE} non vengono eseguite.
@xref{BEGINFILE/ENDFILE}.
Sebbene possa sembrare che @samp{close(FILENAME)} ottenga lo stesso
@@ -16203,7 +16353,14 @@ maniera desiderata. Altre variabili sono impostate automaticamente da
informazioni sul modo di procedere interno di @command{awk}.
@cindex @command{gawk} @subentry variabili predefinite e
-Questa @value{SECTION} documenta tutte le variabili predefinite di
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+documenta tutte le variabili predefinite di
@command{gawk}; molte di queste variabili sono anche documentate nei
@value{CHAPTER} che descrivono le loro aree di influenza.
@@ -16694,7 +16851,14 @@ Il numero di campi nel corrente record in input.
quando un nuovo campo viene creato,
o quando si modifica @code{$0} (@pxref{Campi}).
-A differenza di molte altre variabili descritte in questa @value{SUBSECTION},
+A differenza di molte altre variabili descritte in
+@ifnotinfo
+questa
+@end ifnotinfo
+@ifinfo
+questo
+@end ifinfo
+@value{SUBSECTION},
l'assegnamento di un valore a @code{NF} pu@`o potenzialmente influenzare
il funzionamento interno di @command{awk}. In particolare, assegnamenti
a @code{NF} si possono usare per aggiungere o togliere campi dal
@@ -17384,7 +17548,14 @@ di @command{gawk} di consentire veri vettori di vettori.
@node Fondamenti sui vettori
@section Informazioni di base sui vettori
-Questa @value{SECTION} espone le nozioni fondamentali: elaborare gli elementi
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+espone le nozioni fondamentali: elaborare gli elementi
di un vettore uno alla volta, e visitare sequenzialmente tutti gli elementi
di un vettore.
@@ -18895,13 +19066,29 @@ programma quale funzione chiamare.
@section Funzioni predefinite
Le funzioni @dfn{predefinite} sono sempre disponibili per essere chiamate
-da un programma @command{awk}. Questa @value{SECTION} definisce tutte le
+da un programma @command{awk}.
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+definisce tutte le
funzioni predefinite di @command{awk}; di alcune di queste si fa menzione
-in altre @value{SECTIONS},
+@ifnotinfo
+in altre
+@end ifnotinfo
+@ifinfo
+in altri
+@end ifinfo
+@value{SECTIONS},
ma sono comunque riassunte anche qui per comodit@`a.
@menu
* Chiamare funzioni predefinite:: Come chiamare funzioni predefinite.
+* Funzioni booleane:: Una funzione che restituisce valori
+ booleani.
* Funzioni numeriche:: Funzioni che trattano numeri, comprese
@code{int()}, @code{sin()} e @code{rand()}.
* Funzioni per stringhe:: Funzioni di manipolazione di stringhe,
@@ -18981,6 +19168,26 @@ con i due argomenti 6 e 12. Ma se l'ordine di valutazione @`e da destra a
sinistra, @code{i} assume dapprima il valore 10, e poi il valore 11, e la
funzione @code{atan2()} @`e chiamata con i due argomenti 11 e 10.
+@node Funzioni booleane
+@subsection Generare valori booleani
+@cindex booleane @subentry funzioni
+@cindex funzioni @subentry booleane
+
+Questa funzione @`e specifica di @command{gawk}. Non @`e disponibile
+modalit@`a compatibile (@pxref{Opzioni}):
+
+@c @asis for docbook
+@table @asis
+@item @code{mkbool(@var{espressione})}
+@cindexgawkfunc{mkbool}
+Restituisce un valore di tipo booleano, a partire dal valore booleano
+calcolato di @var{espressione}.
+Il valore booleano ``true'' [vero] ha il valore numerico uno.
+Il valore booleano ``false'' [false] ha il valore numerico zero.
+Questo @`e trattato in maggior dettaglio in
+@ref{Valori di tipo booleano}.
+@end table
+
@node Funzioni numeriche
@subsection Funzioni numeriche
@cindex funzioni @subentry numeriche
@@ -19051,8 +19258,8 @@ modalit@`a compatibile (@pxref{Opzioni}).
@cindexawkfunc{log}
@cindex logaritmo
Restituisce il logaritmo naturale di @var{x}, se @var{x} @`e positivo;
-altrimenti, restituisce @code{NaN} (``not a number'') sui sistemi che
-implementano lo standard IEEE 754.
+altrimenti, restituisce NaN (``not a number'',[Non un Numero])
+sui sistemi che implementano lo standard IEEE 754.
Inoltre, @command{gawk} stampa un messaggio di avvertimento qualora @code{x}
sia negativo.
@@ -19176,7 +19383,15 @@ a seconda delle implementazioni @command{awk}.
@subsection Funzioni di manipolazione di stringhe
@cindex funzioni @subentry di manipolazione di stringhe
-Le funzioni in questa @value{SECTION} leggono o modificano il testo di
+Le funzioni in
+@ifnotinfo
+questa
+@end ifnotinfo
+@ifinfo
+questo
+@end ifinfo
+@value{SECTION}
+leggono o modificano il testo di
una o pi@`u stringhe.
@command{gawk} implementa la localizzazione
@@ -19304,6 +19519,10 @@ se si specifica un secondo vettore da usare per contenere il risultato
dell'ordinamento.
@end quotation
+@`E consentito specificare come argomento lo stesso vettore sia come
+@var{sorgente} che come @var{destinazione}, ma ha senso farlo solo
+se si specifica anche il terzo argomento.
+
@item @code{gensub(@var{regexp}, @var{rimpiazzo}, @var{come}} [@code{, @var{obiettivo}}]@code{) #}
@cindexgawkfunc{gensub}
@cindex cercare e rimpiazzare in stringhe
@@ -21497,6 +21716,9 @@ Restituisce una delle stringhe seguenti, a seconda del tipo di @var{x}:
@item "number"
@var{x} @`e un numero.
+@item "number|bool"
+@var{x} @`e un valore di tipo booleano (@pxref{Valori di tipo booleano}).
+
@item "string"
@var{x} @`e una stringa.
@@ -21778,8 +22000,15 @@ Tutte le funzioni predefinite restituiscono un valore al loro chiamante.
Anche le funzioni definite dall'utente possono farlo, usando
l'istruzione @code{return},
che @`e descritta in dettaglio nella @ref{Istruzione return}.
-Molti dei successivi esempi in questa @value{SECTION} usano
-l'istruzione @code{return}.
+Molti dei successivi esempi in
+@ifnotinfo
+questa
+@end ifnotinfo
+@ifinfo
+questo
+@end ifinfo
+@value{SECTION}
+usano l'istruzione @code{return}.
@cindex estensioni comuni @subentry parola chiave @code{func}
@c @cindex @command{awk} language, POSIX version
@@ -22454,7 +22683,13 @@ esserne a conoscenza.
@cindex puntatori a funzioni
@cindex differenze tra @command{awk} e @command{gawk} @subentry chiamata indiretta di funzione
-Questa sezione descrive un'estensione avanzata, specifica di @command{gawk}.
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION} descrive un'estensione avanzata, specifica di @command{gawk}.
Spesso pu@`o essere utile ritardare la scelta della funzione da chiamare
fino al momento in cui il programma viene eseguito.
@@ -22525,7 +22760,7 @@ usando la chiamata indiretta di funzioni:
@example
@c file eg/prog/indirectcall.awk
-# chiamataindiretta.awk --- esempio di chiamata indiretta di funzioni
+# indirectcall.awk --- esempio di chiamata indiretta di funzioni
@c endfile
@ignore
@c file eg/prog/indirectcall.awk
@@ -23187,7 +23422,15 @@ potrebbero aver usato gli elementi di vettore
@code{@w{_pw_awklib}} e
@code{@w{_pw_contatore}}.
-Le convenzioni illustrate in questa @value{SECTION} sono esattamente
+Le convenzioni illustrate in
+@ifnotinfo
+questa
+@end ifnotinfo
+@ifinfo
+questo
+@end ifinfo
+@value{SECTION}
+sono esattamente
quello che indica il termine: convenzioni. Non si @`e obbligati a scrivere
i propri programmi in questo modo: @`e solo auspicabile che lo si faccia.
@@ -23200,7 +23443,14 @@ in @ref{Spazi-dei-nomi}.
@node Funzioni di tipo generale
@section Programmazione di tipo generale
-Questa @value{SECTION} illustra diverse funzioni che sono di uso generale nella
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+illustra diverse funzioni che sono di uso generale nella
programmazione.
@menu
@@ -23221,6 +23471,8 @@ programmazione.
un colpo solo.
* Apici alla shell:: Una funzione per passare stringhe
con apici alla shell.
+* Funzione isnumeric:: Una funzione per controllare se un valore
+ @`e numerico.
@end menu
@node Funzione strtonum
@@ -24060,6 +24312,50 @@ function shell_quote(s, # parametro
@c endfile
@end example
+@node Funzione isnumeric
+@subsection Controllare se un valore @`e numerico
+
+Una domanda spesso posta in programmazioni @`e come accertarsi se un dato
+valore @`e di tipo numerico. Il problema pu@`o essere risolto usando la
+funzione di esempio @code{isnumeric()}, che utilizza l'artificio di
+trasformare l'input ricevuto dell'utente nel valore di una stringa,
+utilizzando la funzione @code{split()}:
+
+@cindex @code{isnumeric()} @subentry funzione definita dall'utente
+@cindex funzione definita dall'utente @subentry @subentry @code{isnumeric()}
+@example
+@c file eg/lib/isnumeric.awk
+# isnumeric --- controlla se un valore @`e numerico
+
+function isnumeric(x, f)
+@{
+ switch (typeof(x)) @{
+ case "strnum":
+ case "number":
+ return 1
+ case "string":
+ return (split(x, f, " ") == 1) && (typeof(f[1]) == "strnum")
+ default:
+ return 0
+ @}
+@}
+@c endfile
+@end example
+
+Si noti che gli eventuali spazi bianchi prima o dopo la stringa sono
+ignorati nel decidere se un valore sia numerico oppure no; se la cosa
+@`e importante in una data situazione, occorre aggiungere un apposito
+controllo ulteriore.
+
+Tradizionalmente, per controllare se un valore @`e numerico, si raccomandava
+di usare il test @samp{x+0 == x}. La funzione @code{isnumeric} @`e migliore
+sotto due aspetti: non attribuisce un valore numerico a variabili a cui
+non sia stato ancora assegnato un valore; e riconosce valori di stringa
+con contenuto numerico quando @code{CONVFMT} non genera una stringa
+uguale a quella originale.
+Tuttavia, per farlo, utilizza la funzione @code{typeof()}
+(@pxref{Funzioni per i tipi}), che @`e disponibile solo in @command{gawk}.
+
@node Gestione File Dati
@section Gestione di @value{DF}
@@ -24067,8 +24363,14 @@ function shell_quote(s, # parametro
@cindex gestione di file
@cindex libreria di funzioni @command{awk} @subentry gestire file di dati
@cindex funzioni @subentry libreria di @subentry gestire file di dati
-Questa @value{SECTION} presenta funzioni utili per gestire
-@value{DF} da riga di comando.
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+presenta funzioni utili per gestire @value{DF} da riga di comando.
@menu
* Funzione filetrans:: Una funzione per gestire il passaggio da un
@@ -24975,8 +25277,8 @@ $ @kbd{awk -f getopt.awk -v _getopt_test=1 -- -a \}
@print{} c = <otherd>, Optarg = <>
@print{} c = <otherc>, Optarg = <>
@print{} argomenti che non sono opzioni:
-@print{} ARGV[8] = <arg1>
-@print{} ARGV[9] = <arg2>
+@print{} ARGV[8] = <arg1>
+@print{} ARGV[9] = <arg2>
@end example
In tutte le esecuzioni, il primo @option{--} fa terminare gli argomenti dati
@@ -25109,11 +25411,7 @@ main(int argc, char **argv)
@c endfile
@ignore
@c file eg/lib/pwcat.c
-#ifdef ZOS_USS
- printf("%s:%ld:%ld:%s:%s\n",
- p->pw_name, (long) p->pw_uid,
- (long) p->pw_gid, p->pw_dir, p->pw_shell);
-#else
+#ifdef HAVE_STRUCT_PASSWD_PW_PASSWD
@c endfile
@end ignore
@c file eg/lib/pwcat.c
@@ -25123,6 +25421,10 @@ main(int argc, char **argv)
@c endfile
@ignore
@c file eg/lib/pwcat.c
+#else
+ printf("%s:*:%ld:%ld:%s:%s\n",
+ p->pw_name, (long) p->pw_uid,
+ (long) p->pw_gid, p->pw_dir, p->pw_shell);
#endif
@c endfile
@end ignore
@@ -26138,7 +26440,14 @@ cut.awk -- -c1-8 i_miei_file > risultati
@cindex programmi POSIX @subentry implementazione in @command{awk}
@cindex POSIX @subentry programmi @subentry implementazione in @command{awk}
-Questa @value{SECTION} presenta un certo numero di programmi di utilit@`a
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+presenta un certo numero di programmi di utilit@`a
POSIX implementati in @command{awk}. Riscrivere questi programmi in
@command{awk} @`e spesso divertente,
perch@'e gli algoritmi possono essere espressi molto chiaramente, e il codice
@@ -26199,13 +26508,13 @@ possono essere separati da virgole, e intervalli di caratteri possono essere
separated da trattini. La lista
@samp{1-8,15,22-35} specifica i caratteri da 1 a 8, 15, e da 22 a 35.
-@item -f @var{lista}
-Usare @var{lista} come lista di campi da ritagliare.
-
@item -d @var{delimitatore}
Usare @var{delimitatore} come carattere che separa i campi invece del
carattere TAB.
+@item -f @var{lista}
+Usare @var{lista} come lista di campi da ritagliare.
+
@item -s
Evita la stampa di righe che non contengono il delimitatore di campo.
@end table
@@ -26216,6 +26525,12 @@ di libreria @code{getopt()}
e la funzione di libreria @code{join()}
(@pxref{Funzione join}).
+La versione POSIX corrente del comando @command{cut} prevede opzioni
+per ritagliare dei campi che possono essere sia byte che caratteri
+[possibilmente multibyte]. Questa versione non tenta di implementare
+tali opzioni, poich@'e @command{awk} lavora esclusivamente in termini
+di caratteri.
+
Il programma inizia con un commento che descrive le opzioni, le funzioni
di libreria necessarie, e una funzione @code{sintassi()} che stampa un
messaggio ed esce. @code{sintassi()} @`e chiamato se si specificano degli
@@ -26237,9 +26552,9 @@ argomenti non validi:
@c file eg/prog/cut.awk
# Opzioni:
+# -c lista Ritagliare caratteri
# -f lista Ritagliare campi
# -d c Carattere di delimitazione di campo
-# -c lista Ritagliare caratteri
#
# -s Sopprimere righe che non contengono il delimitatore
#
@@ -26315,7 +26630,7 @@ un semplice spazio (@code{@w{" "}}) come valore per @code{FS} @`e
sbagliato: @command{awk} separerebbe i campi con serie di spazi,
TAB, e/o ritorni a capo, mentre devono essere separati solo da uno spazio.
Per far questo, salviamo il carattere di spazio originale nella variabile
-@code{fs} per un uso futuro; dopo aver impostato @code{FS} a @code{"[ ]"} non
+@code{fs} per un uso futuro; dopo aver impostato @code{FS} a @code{@w{"[ ]"}} non
@`e possibile usarlo direttamente per vedere se il carattere delimitatore di
campo @`e nella stringa.
@@ -26595,11 +26910,11 @@ da implementare con @command{gawk}; basta usare la variabile predefinita
# -e l'argomento @`e un'espressione regolare
# -i ignora maiuscolo/minuscolo
# -l stampa solo nomi file
-# -n aggiungi numeri linea in output
+# -n aggiungi numeri riga in output
# -q quieto - usa solo il codice di ritorno
# -s silenzioso - non stampa messaggi di errore
-# -v inverte test, successo se espression non trovata
-# -x l'intera linea deve corrispondere
+# -v inverte test, successo se espressione non viene trovata
+# -x l'intera riga deve corrispondere
#
# Richiede la funzione getopt()
# Usa IGNORECASE, BEGINFILE ed ENDFILE
@@ -26633,14 +26948,17 @@ BEGIN @{
@noindent
Si noti il commento relativo alla chiamata del programma:
-Poich@'e parecchie opzioni possono essere sepcificate anche per
-@command{gawk}, occorre immettere @option{--} per far s@`@{dotless{i}} che
+Poich@'e parecchie opzioni possono essere specificate anche per
+@command{gawk}, occorre immettere @option{--} per far s@`{@dotless{i}} che
@command{gawk} non prosegua nell'analisi delle opzioni.
Nel seguito c'@`e il codice che gestisce il comportamento specifico di
-@command{egrep}. Se non @`e fornito esplicitamente alcun criterio di ricerca
-tramite l'opzione @option{-e}, si usa il primo argomento sulla riga di
-comando che non sia un'opzione.
+@command{egrep}. @command{egrep} utilizza il primo argomento sulla
+riga di comando che non sia un'opzione se non @`e fornito esplicitamente
+alcun criterio di ricerca tramite l'opzione @option{-e}.
+Se il criterio di ricerca @`e la stringa nulla, ci@`o significa che non
+@`e stato fornito alcun criterio, quindi @`e necessario stampare un
+messaggio di errore e terminare il programma.
Gli argomenti della riga di comando di @command{awk} fino ad
@code{ARGV[Optind]} vengono cancellati,
in modo che @command{awk} non tenti di elaborarli come file. Se
@@ -26694,12 +27012,12 @@ BEGINFILE @{
La regola @code{ENDFILE} viene eseguita alla fine dell'elaborazione
di ogni file. Genera dell'output solo quando l'utente richiede un
-contatore del numero di righe che sono state trovate corrispondere.
+contatore del numero di righe corrispondenti che sono state trovate.
La variabile @code{non_stampare} @`e vera qualora si chieda di
impostare solo il codice di ritorno.
La variabile @code{conta_e_basta} @`e vera qualora si chieda solo
-il numero delle righe che sono state trovare corrispondere.
+il numero delle righe corrispondenti che sono state trovate.
@command{egrep} quindi stampa il contatore delle corrispondenze
trovate solo se sia la stampa che il conteggio righe sono richieste.
Il formato dell'output dev'essere adattato, a seconda del numero di
@@ -26734,9 +27052,9 @@ verificando i valori delle variabili @code{RSTART} e @code{RLENGTH}.
Se questi indicano che la corrispondenza non coincide con l'intera
riga, la variabile @code{corrisponde} @`e impostata a zero (falsa).
-Se l'utente chiede invece le righe che @emph{non} corrispondono,
-il senso di @code{corrisponde} @`e invertito, usando l'operatore @samp{!}.
-@code{contatore_file} @`e incrementato con il valore di
+Se l'utente chiede invece le righe che non corrispondono, si inverte
+il senso di @code{corrisponde}, usando l'operatore @samp{!}.
+Poi, @code{contatore_file} @`e incrementato con il valore di
@code{corrisponde}, che vale uno o zero, a seconda che la corrispondenza sia
stata trovata oppure no. Se la riga non corrisponde, l'istruzione
@code{next} passa ad esaminare il record successivo.
@@ -26855,14 +27173,14 @@ Usa la funzione di libreria @code{getopt()}
(@pxref{Funzione getopt}),
le funzioni di libreria del database che descrive gli utenti
(@pxref{Funzioni Passwd}),
-Usa le funzioni di libreria che riguardano il database degli utenti
+le funzioni di libreria che riguardano il database degli utenti
(@pxref{Funzioni Passwd})
e le funzioni di libreria che riguardano il database dei gruppi
(@pxref{Funzioni Group}).
Il programma @`e abbastanza semplice. Tutto il lavoro @`e svolto nella regola
@code{BEGIN}.
-Inizia com dei commenti di spiegazioni, una lista di opzioni e infine
+Inizia con dei commenti di spiegazione, una lista di opzioni e infine
una funzione @code{sintassi()} function:
@cindex @code{id.awk} (programma)
@@ -26939,7 +27257,7 @@ BEGIN @{
@end example
Il passo successivo @`e quello di controllare che non siano state
-specificate opzioni mutualmente esclusive.
+specificate opzioni mutuamente esclusive.
Le opzioni @option{-G} e @option{-r} sono di questo tipo.
Inoltre, non @`e possibile specificare pi@`u di un nome utente
sulla riga di comando:
@@ -26958,7 +27276,7 @@ dal vettore @code{PROCINFO} dell'utente corrente, oppure
dal database degli utenti e delle password, per un
utente il cui nome sia stato specificato nella riga di
comando.
-In quest'ultimo caos, viene impostato il flag @code{real_ids_only},
+In quest'ultimo caso, viene impostato il flag @code{real_ids_only},
poich@'e non @`e possibile stampare informazioni riguardo agli
ID di utente e di gruppo effettivi:
@@ -27075,9 +27393,9 @@ Una logica simile viene seguita per l'opzione @option{-u}
@end example
A questo punto non abbiamo ancora finito, e quindi stampiamo
-l'output normale, di default, a riguardo dell'utente corrente
-o dell'utente che era stato specificato sulla riga di comando.
-Iniziamo a stmpare l'user ID reale:
+l'output normale, di default, relative all'utente corrente
+o all'utente che era stato specificato sulla riga di comando.
+Iniziamo a stampare l'user ID reale:
@example
@c file eg/prog/id.awk
@@ -27256,7 +27574,7 @@ ogni file dovrebbe essere lungo (al massimo) @var{N} byte.
Se si specifica la lettera @samp{k}, il numero @var{N} viene
moltiplicato per 1.024, ossia diviene il numero di kilobyte.
Se si specifica la lettera @samp{m}, il numero @var{N} viene
-moltiplicato per 1.048.576 (@math{1.024 @value{PER} 1.024})
+moltiplicato per 1.048.576 (@math{1.024 @value{VOLTE} 1.024})
ossia diviene il numero di megabyte.
(Quest'opzione @`e mutuamente esclusiva con l'opzione @option{-l}).
@@ -27285,7 +27603,9 @@ Ecco un'implementazione di @command{split} in @command{awk}. Viene utilizzata
la funzione @code{getopt()} presentata in @ref{Funzione getopt}.
Il programma inizia con un commento descrittivo e poi con la
-funzione @code{sintassi()} che ne descrive le opzioni:
+funzione @code{sintassi()} che ne descrive le opzioni. La variabile
+@code{comune} permettere di avere delle righe brevi nella funzione,
+in modo che sia stampata in maniera elegante nella pagina:
@cindex @code{split.awk} (programma)
@cindex programma @subentry @code{split.awk}
@@ -27306,10 +27626,12 @@ funzione @code{sintassi()} che ne descrive le opzioni:
@c endfile
@end ignore
@c file eg/prog/split.awk
-function sintassi()
+
+function sintassi( comune)
@{
- print("Uso: split [-l contatore] [-a lunghezza-suffisso] [file [nome-output-file]]") > "/dev/stderr"
- print(" split [-b N[k|m]] [-a lunghezza-suffisso] [file [nome-output-file]]") > "/dev/stderr"
+ comune = "[-a lunghezza-suffisso] [file [nome-output-file]]"
+ printf("Uso: split [-l contatore] %s\n", comune) > "/dev/stderr"
+ printf(" split [-b N[k|m]] %s\n", comune) > "/dev/stderr"
exit 1
@}
@c endfile
@@ -27402,7 +27724,7 @@ passare da @samp{abz} ad @samp{aca}.
@item
Si deve poter determinare se abbiamo utilizzato tutti i prefissi,
-in modo che, nel caso ci siano ulteriori dati (da suddividere) si
+in modo che, nel caso ci siano ulteriori dati (da suddividere), si
possa stampare un messaggio di errore e terminare il programma.
Il trucco @`e di gestire una tale situazione @emph{dopo} aver usato
l'ultimo suffisso disponibile, e non quando viene generato l'ultimo
@@ -27801,7 +28123,8 @@ spiegazione delle opzioni e del loro significato, sotto forma di commenti:
function sintassi()
@{
- print("Uso: uniq [-udc [-f campi]] [-s caratteri] [ in [ out ]]") > "/dev/stderr"
+ print("Uso: uniq [-udc [-f campi] [-s caratteri]] " \
+ "[ in [ out ]]") > "/dev/stderr"
exit 1
@}
@@ -28063,14 +28386,14 @@ Klingon e il linguaggio degli elfi di J.R.R.@: Tolkien).
Per risparmiare spazio nei file, i @dfn{code points} Unicode sono
@dfn{codificati}, e la rappresentazione di ogni carattere pu@`o richiedere
da uno a quattro byte nel file. UTF-8 @`e verosimilmente la pi@`u diffusa
-fra queste codifiche multi-byte (@dfn{multibyte encodings}).
+fra queste codifiche multibyte (@dfn{multibyte encodings}).
Lo standard POSIX richiede che @command{awk} gestisca dei caratteri,
non dei byte. Per questo motivo, in @command{gawk}, le funzioni
@code{length()}, @code{substr()}, @code{split()}, @code{match()} e
le altre funzioni di manipolazione di stringhe
(@pxref{Funzioni per stringhe}) funzionano tutte elaborando dei caratteri,
-come definiti dall'insieme di caratteri locale [a una determinata lingua]
+come definiti dall'insieme di caratteri localizzati [a una determinata lingua]
e non elaborando dei byte. (Incidentalmente, non tutte le implementazioni
di @command{awk} si comportano cos@`{@dotless{i}}).
@@ -28090,8 +28413,8 @@ possono anche essere dei codici scritti nei linguaggi C o C++.
Per quanto riguarda
@file{wc.awk}, @`e sufficiente sapere che l'estensione viene caricata
con la direttiva @code{@@load}, e la funzione ulteriore che dovr@`a essere
-usata si chiama @code{mbs_length()}. Questa funzione restiuisce il numero
-di byte in una stringa, e non il numero di caratteri.
+usata si chiama @code{mbs_length()}. Questa funzione restituisce il numero
+di byte in una stringa, non il numero di caratteri.
L'estensione @code{"mbs"} fa parte del progetto @code{gawkextlib}.
@xref{gawkextlib} for ulteriori informazioni.
@@ -28110,23 +28433,23 @@ standard input. Se ci sono pi@`u file, stampa anche il contatore totale di
tutti i file. Le opzioni e il loro significato sono i seguenti:
@table @code
-@item -l
-Conta solo le righe.
-
-@item -w
-Conta solo le parole.
-Una ``parola'' @`e una sequenza contigua di caratteri non bianchi, separata da
-spazi e/o TAB. Fortunatamente, questo @`e il modo normale in cui @command{awk}
-separa i campi nei suoi record in input.
-
@item -c
Conta solo i byte.
Un tempo, la lettera @samp{c} di questa opzione stava per ``caratteri.''
Ma, come spiegato pi@`u sopra, byte e carattere non sono pi@`u sinonimi
tra loro.
+@item -l
+Conta solo le righe.
+
@item -m
Conta solo caratteri.
+
+@item -w
+Conta solo le parole.
+Una ``parola'' @`e una sequenza contigua di caratteri non bianchi, separata da
+spazi e/o TAB. Fortunatamente, questo @`e il modo normale in cui @command{awk}
+separa i campi nei suoi record in input.
@end table
L'implementazione di @command{wc} in @command{awk} @`e particolarmente
@@ -28295,7 +28618,14 @@ END @{
@node Programmi vari
@section Un paniere di programmi @command{awk}
-Questa @value{SECTION} @`e un ``paniere'' che contiene vari programmi.
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+@`e un ``paniere'' che contiene vari programmi.
Si spera che siano interessanti e divertenti.
@menu
@@ -28518,7 +28848,14 @@ BEGIN @{
@c endfile
@end example
-La successiva @value{SECTION} di codice scompone l'ora specificata in ore e
+@ifnotinfo
+La successiva
+@end ifnotinfo
+@ifinfo
+Il successivo
+@end ifinfo
+@value{SECTION}
+di codice scompone l'ora specificata in ore e
minuti, la converte (se @`e il caso) al formato 24-ore, e poi calcola il
relativo numero di secondi dalla mezzanotte. Poi trasforma l'ora corrente in
un contatore dei secondi dalla
@@ -29138,7 +29475,7 @@ la riga), quando la regola @`e verificata [ossia se il record non
@cindex estrarre programma da file sorgente Texinfo
@cindex file @subentry Texinfo @subentry estrarre programma da
@ifnotinfo
-Sia questo capitolo che il precedente
+Sia questo @value{CHAPTER} che il precedente
(@ref{Funzioni di libreria})
presentano un numero elevato di programmi @command{awk}.
@end ifnotinfo
@@ -29258,6 +29595,7 @@ a significare che tutto @`e andato bene:
# Arnold Robbins, arnold@@skeeve.com, Public Domain
# May 1993
# Revised September 2000
+# Antonio Colombo, October 2020, test for Italian accented letters
@c endfile
@end ignore
@c file eg/prog/extract.awk
@@ -29365,7 +29703,7 @@ La riga @`e poi stampata nel file di output:
gsub("@@`o","ò",riga)
gsub("@@`u","ù",riga)
# riga contiene ancora caratteri @@?
- if (index(riga, "@@") == 0) {
+ if (index(riga, "@@") == 0) @{
print riga > file_corrente
continue
@}
@@ -29565,7 +29903,14 @@ In
@end ifnottex
@ref{Includere file}, abbiamo visto come @command{gawk} preveda la
possibilit@`a di includere file. Tuttavia, questa @`e un'estensione @command{gawk}.
-Questa @value{SECTION} evidenzia l'utilit@`a di rendere l'inclusione di
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+evidenzia l'utilit@`a di rendere l'inclusione di
file disponibile per @command{awk} standard, e mostra come farlo utilizzando
una combinazione di programmazione di shell e di @command{awk}.
@@ -29732,7 +30077,6 @@ Il programma @`e il seguente:
# Arnold Robbins, arnold@@skeeve.com, Public Domain
# July 1993
# December 2010, minor edits
-# Antonio Colombo, October 2020, test for Italian accented letters
@c endfile
@end ignore
@c file eg/prog/igawk.sh
@@ -30612,12 +30956,14 @@ tratta della capacit@`a di aggiungere dinamicamente nuove funzioni predefinite a
@menu
* Dati non decimali:: Consentire dati di input non decimali.
+* Valori di tipo booleano:: Valori di tipo @code{number|bool} type.
* Ordinamento di vettori:: Modi per controllare la visita di un vettore
e il suo ordinamento.
* I/O bidirezionale:: Comunicazione bidirezionale con un altro
processo.
* Reti TCP/IP:: Usare @command{gawk} per programmazione di rete.
* Profilare:: Profilare i propri programmi @command{awk}.
+* Filosofia delle estensioni:: Cosa dovrebbe essere incluso e cosa no.
* Sommario funzionalit@`a avanzate:: Sommario delle funzionalit@`a avanzate.
@end menu
@@ -30681,6 +31027,55 @@ porta a risultati meno inattesi.
Quest'opzione potrebbe sparire dalle versioni future di @command{gawk}.
@end quotation
+@node Valori di tipo booleano
+@section Valori di tipo booleano
+
+I valori scalari in @command{awk} sono numeri o stringhe di caratteri.
+@command{gawk} supporta anche valori di tipo @dfn{regexp}
+(@pxref{Costanti @dfn{regexp} forti}).
+
+Come descritto in @ref{Valori di verit@`a}, ai valori booleani in
+@command{awk} non viene assegnato un tipo loro proprio:
+un valore @`e ``true'' [vero] se @`e diverso da zero e dalla stringa nulla
+e ``false'' [falso] in tutti gli altri casi.
+
+Se se devono scambiare dati con linguaggi che possiedono un tipo di
+variabile booleana vera e propria, usando un formato standard come
+JSON o XML, la mancanza di un vero tipo di variabile booleana
+in @command{awk} pu@`o essere un problema.
+(Vedere, p.es., l'estensione @code{json} fornita da
+@uref{https://sourceforge.net/projects/gawkextlib, il progetto @code{gawkextlib}}.)
+
+@`E facile importare dati di tipo booleano in @command{awk}, ma una volta
+importati l'informazione che si trattava di dati di tipo booleano viene
+persa. Esportare dati di questo tipo @`e ancora pi@`u difficile;
+non c'@`e modo per indicare che un valore @`e veramente booleano.
+
+Per risolvere questo problema, @command{gawk} mette a disposizione una
+funzione di nome @code{mkbool()}.
+La funzione ha un argomento, che pu@`o essere una qualsiasi espressione
+@command{awk} e restituisce un valore di tipo booleano.
+
+I valori cos@`{@dotless{i}} restituiti sono normali valori numerici di @command{awk},
+che possono assumere i valori uno o zero, a seconda del valore di
+verit@`a dell'espressione originale fornita nella chiamata a
+@code{mkbool()}.
+
+La funzione @code{typeof()} (@pxref{Funzioni per i tipi}) restituisce
+la stringa @code{"number|bool"} per queste variabili.
+
+Tuttavia i valori di tipo booleano @emph{sono} numeri, per @command{gawk}
+tranne che per il fatto che il codice delle estensioni a @command{gawk}
+li pu@`o trattare, volendo, come valori di tipo booleano.
+
+Anche se sarebbe stato possibile aggiungere due nuove variabili
+predefinite di tipo booleano, chiamandole @code{TRUE} [vero] e
+@code{FALSE} [falso], il farlo avrebbe certamente generato errori
+in molti programmi @command{awk} esistenti.
+Invece, l'introduzione di una funzione ``generatrice'' che crea valori
+di tipo booleano, fornisce flessibilit@`a, senza generare troppi
+errori nel codice esistente.
+
@node Ordinamento di vettori
@section Controllare la visita di un vettore e il suo ordinamento
@@ -31098,6 +31493,12 @@ del vettore originale, ed entrambi i vettori accedono all'unica copia di
valori che esiste in memoria.
@end quotation
+@`E consentito usare lo stesso vettore sia come primo che come secondo
+argomento di @code{asort()} e @code{asorti()}. Il farlo ha senso solo
+se si specifica anche il terzo argomento, poich@'e @command{awk} non
+consente di specificare un terzo argomento senza aver specificato sia
+il primo che il secondo.
+
@c Document It And Call It A Feature. Sigh.
@cindex @command{gawk} @subentry variabile @subentry @code{IGNORECASE} in
@cindex vettori @subentry ordinamento @subentry variabile @code{IGNORECASE} e
@@ -31435,7 +31836,7 @@ main(void)
printf("%d\n", x + y);
return 0;
@}
-$ @kbd{cc -O add.c -o add} @ii{Compilazione del programma}
+$ @kbd{cc -O add.c -o add} @ii{Compilazione del programma}
@end example
Si potrebbe poi scrivere un programma @command{gawk} fin troppo semplice,
@@ -31828,7 +32229,7 @@ alfabetico.
La versione profilata del proprio programma potrebbe non apparire esattamente
come quella scritta durante la stesura del programma. Questo perch@'e
-@command{gawk} crea la versione profilata facendo una ``stampa elegante'' della
+@command{gawk} crea la versione profilata facendo una ``stampa-elegante'' della
sua rappresentazione interna del programma. Un vantaggio di ci@`o @`e che
@command{gawk} pu@`o produrre una rappresentazione standard.
Inoltre, cose come:
@@ -31923,9 +32324,9 @@ tastiera. Il segnale @code{INT} @`e generato dalle combinazioni di tasti
@kbd{Ctrl-c} o @kbd{Ctrl-BREAK}, mentre il segnale
@code{QUIT} @`e generato dalla combinazione di tasti @kbd{Ctrl-\}.
-@cindex stampa elegante
+@cindex stampa-elegante
Infine, @command{gawk} accetta anche un'altra opzione, @option{--pretty-print}.
-Quando viene chiamato in questo modo, @command{gawk} fa una ``stampa elegante''
+Quando viene chiamato in questo modo, @command{gawk} fa una ``stampa-elegante''
del programma nel file @file{awkprof.out}, senza conteggi sull'esecuzione.
@quotation NOTA
@@ -31933,10 +32334,10 @@ Una volta, l'opzione @option{--pretty-print} eseguiva anche il programma.
Ora non pi@`u.
@end quotation
-@cindex profilazione @subentry differenza rispetto alla stampa elegante
-@cindex stampa elegante @subentry differenza rispetto alla profilazione
+@cindex profilazione @subentry differenza rispetto alla ``stampa-elegante''
+@cindex stampa-elegante @subentry differenza rispetto alla profilazione
C'@`e una differenza significativa tra l'output creato durante la profilazione,
-e quello creato durante la stampa elegante. L'output della stampa elegante
+e quello creato durante la ``stampa-elegante''. L'output della ``stampa-elegante''
preserva i commenti originali che erano nel programma, anche se la loro
posizione pu@`o non corrispondere esattamente alle posizioni originali che
avevano nel codice sorgente. Tuttavia, nessun commento dovrebbe andare
@@ -31948,23 +32349,83 @@ in maniera perfetta.
Comunque, per una precisa scelta progettuale, l'output della profilazione
@emph{omette} i commenti del programma originale. Questo permette di
concentrarsi sui dati del conteggio di esecuzione ed evita la tentazione di
-usare il profilatore per creare una stampa elegante.
+usare il profilatore per creare una ``stampa-elegante''.
Oltre a ci@`o, l'output stampato in modo elegante non ha l'indentazione iniziale
-che ha l'output della profilazione. Questo rende agevole la stampa elegante
+che ha l'output della profilazione. Questo rende agevole la ``stampa-elegante''
del proprio codice una volta completato lo sviluppo, usando poi il risultato
come versione finale del programma.
Poich@'e la rappresentazione interna del programma @`e formattata per
essere aderente al programma @command{awk} in questione, la profilazione
-e la stampa elegante (opzione @option{--pretty-print}) disabilitano
+e la ``stampa-elegante'' (opzione @option{--pretty-print}) disabilitano
automaticamente le optimizzazioni di default di @command{gawk}.
-La profilazione e la stampa elegante mantengono anche il formato originale
+La profilazione e la ``stampa-elegante'' mantengono anche il formato originale
delle costanti numeriche; se sono stati usati dei valori ottali o esadecimali
nel codice sorgente, questi compariranno nell'output nello stesso
formato con cui sono stati inseriti.
+@node Filosofia delle estensioni
+@section Funzionalit@`a incluse @dfn{versus} estensioni
+
+Come descritto sin qui e nei successivi @value{CHAPTERS},
+@command{gawk} ha numerose estensioni ulteriori,
+rispetto a quelle presenti nel comando @command{awk} standard.
+Queste sono state sviluppate col passare del tempo.
+Pi@`u recentemente, l'attenzione si @`e spostata sull'uso
+del meccanismo delle estensioni (@pxref{Estensioni dinamiche})
+per aggiungere ulteriori funzionalit@`a.
+@ifnotinfo
+Questa @value{SECTION}
+@end ifnotinfo
+@ifinfo
+Questo @value{SECTION}
+@end ifinfo
+tratta della ``filosofia ispiratrice'' riguardo a ci@`o che dovrebbe
+essere aggiunto all'interprete come funzionalit@`a interna,
+rispetto a quello che dovrebbe essere reso disponibile tramite
+estensioni.
+
+Ci sono parecchi obiettivi:
+
+@enumerate 1
+@item
+Conservare il comando @command{awk}; non dovrebbe divenire irriconoscibile
+anche se i programmi scritti per esso verranno eseguito usando solo
+@command{gawk}.
+
+@item
+Non aumentare le dimensioni del nucleo del programma, a meno che ci@`o
+sia assolutamente indispensabile.
+
+@item
+Aggiungere nuove funzionalit@`a o tramite @dfn{script}
+(opzione @option{-f}, direttiva @code{@@include})
+o in un'estensione caricabile scritta in C o C++
+(opzione @option{-l}, direttiva @code{@@load}).
+
+@item
+Estendere il nucleo dell'interpretatore solo se qualche funzionalit@`a:
+
+@c sublist
+@enumerate A
+@item
+@`E veramente desiderabile.
+@item
+Non si pu@`o ottenere tramite dei file di libreria o estensioni caricabili.
+@item
+Pu@`o essere aggiunta al nucleo senza troppe difficolt@`a.
+@end enumerate
+@end enumerate
+
+Combinare dei moduli con dei file @command{awk} @`e una tecnica efficace.
+Lo si pu@`o vedere in alcuni degli esempi di estensione.
+
+Il caricamento di estensioni e librerie di file non dovrebbe essere
+fatto automaticamente, perch@'e questo richiede un consumo di risorse
+che molti utenti non desiderano, o di cui non hanno bisogno.
+
@node Sommario funzionalit@`a avanzate
@section Sommario
@@ -32012,12 +32473,30 @@ profilazione @command{gawk} scrive il profilo, includendo lo
@dfn{stack} della chiamata alla funzione e prosegue nell'elaborazione.
@item
-Si pu@`o anche fare solo una ``stampa elegante'' del programma.
+Si pu@`o anche fare solo una ``stampa-elegante'' del programma.
+@item
+Nuove funzionalit@`a dovrebbero essere sviluppate usando, se possibile,
+il meccanismo delle estensioni; si dovrebbero aggiungere al nucleo
+dell'interpretatore solo come ultima risorsa.
@end itemize
+
@node Internazionalizzazione
@chapter Internazionalizzazione con @command{gawk}
+@cindex Robbins @subentry Malka
+@cindex Moon, Sailor
+@cindex Sailor Moon @seeentry{Moon, Sailor}
+@quotation
+@i{Moon@dots{} Meraviglioso@dots{} MEDITAZIONE!}
+@author Pretty Guardian Sailor Moon Eternal, Il Film
+@end quotation
+
+@quotation
+@i{Probabilmente suonava meglio in Giapponese.}
+@author Malka Robbins
+@end quotation
+
Tanto tempo fa i produttori di computer
scrivevano software che comunicava solo in inglese.
Col passare del tempo, i venditori di hardware e di software si sono
@@ -32076,7 +32555,7 @@ relative al modo di leggere e di stampare dati di tipo numerico o valutario.
@cindex internazionalizzazione @subentry di programmi @command{awk}
@cindex @command{gettext} @subentry libreria
-@cindex libreria @command{gettext}
+@cindex libreria @subentry @command{gettext}
@command{gawk} usa il comando GNU @command{gettext} per rendere disponibili
le proprie funzionalit@`a di internazionalizzazione.
L'attenzione del comando GNU @command{gettext} @`e rivolta principalmente
@@ -32219,7 +32698,7 @@ printf("%s", _("Don't Panic!\n"));
@cindex internazionalizzazione @subentry localizzazione @subentry categorie di localizzazione
@cindex @command{gettext} @subentry libreria @subentry categorie di localizzazione
-@cindex libreria @command{gettext} @subentry categorie di localizzazione
+@cindex libreria @subentry @command{gettext} @subentry categorie di localizzazione
@cindex categoria di localizzazione
@cindex localizzazione @subentry categorie di
@noindent
@@ -33045,7 +33524,14 @@ per eseguire il debug dei propri programmi.
@node Debugging
@section Introduzione al debugger di @command{gawk}
-Questa @value{SECTION}, dopo un'introduzione sul debug in generale, inizia
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION},
+dopo un'introduzione sul debug in generale, inizia
la trattazione del debug in @command{gawk}.
@menu
@@ -33579,7 +34065,7 @@ argomenti.
* Controllo dei breakpoint:: Controllo dei punti d'interruzione.
* Controllo esecuzione debugger:: Controllo di esecuzione.
* Vedere e modificare dati:: Vedere e modificare dati.
-* Stack di esecuzione:: Lavorare con lo @dfn{stack}.
+* Stack di esecuzione:: Lavorare con lo @dfn{Stack}.
* Informazioni sul debugger:: Ottenere informazioni sullo stato del
programma e del debugger.
* Comandi vari del debugger:: Comandi vari del debugger.
@@ -34016,8 +34502,8 @@ argomenti) dalla lista dei punti d'osservazione.
@end table
-@node @dfn{Stack} di esecuzione
-@subsection Lavorare con lo @dfn{stack}
+@node Stack di esecuzione
+@subsection Lavorare con lo @dfn{Stack}
Ogni volta che si esegue un programma che contiene chiamate di funzione,
@command{gawk} mantiene una pila contenente la lista delle chiamate di funzione
@@ -34638,7 +35124,7 @@ Questo @value{CHAPTER} descrive una funzionalit@`a disponibile solo in
@command{gawk}.
@quotation ATTENZIONE
-La funzionalit@`a descritta in questo capitolo @`e nuova. @`E certamente
+La funzionalit@`a descritta in questo @value{CHAPTER} @`e nuova. @`E certamente
possibile, e perfino probabile, che ci siano degli angoli bui
(se non dei bug), ancora presenti nell'implementazione.
Chi ne trovasse, @`e pregato di notificarlo (@xref{Bug}).
@@ -35079,10 +35565,10 @@ Questo
interagisce con altre importanti funzionalit@`a di @command{gawk}.
@cindex spazio-dei-nomi @subentry interazione con la profilazione
-@cindex spazio-dei-nomi @subentry interazione con la stampa elegante
+@cindex spazio-dei-nomi @subentry interazione con la ``stampa-elegante''
@cindex profilazione @subentry interazione con spazio-dei-nomi
-@cindex stampa elegante @subentry interazione con spazio-dei-nomi
-La profilazione e la stampa elegante (@pxref{Profilare}) sono state
+@cindex stampa-elegante @subentry interazione con spazio-dei-nomi
+La profilazione e la ``stampa-elegante'' (@pxref{Profilare}) sono state
migliorate per trattare gli spazi-dei-nomi e le regole per assegnare nomi in
uno spazio-dei-nomi @ref{Regole per i nomi}.
In particolare, l'output tiene insieme le funzioni che appartengono
@@ -35143,7 +35629,7 @@ disponibile la potenza e la flessibilit@`a necessarie.
@item
Altre parti di @command{gawk} sono state estese come necessario per
integrare gli spazi-dei-nomi nel loro funzionamento.
-Questo vale soprattutto per la profilazione / stampa elegante
+Questo vale soprattutto per la profilazione / ``stampa-elegante''
(@pxref{Profilare}) e per le funzionalit@`a relative alle
estensioni (@pxref{Estensioni dinamiche}).
@@ -35178,7 +35664,7 @@ sono esattamente in accordo.
@quotation NOTA
La maggior parte degli utenti di @command{gawk} pu@`o saltare senza patemi
d'animo
-questo capitolo. Tuttavia, se si vogliono eseguire calcoli scientifici con
+questo @value{CHAPTER}. Tuttavia, se si vogliono eseguire calcoli scientifici con
@command{gawk}, questo @`e il luogo adatto per imparare a farlo.
@end quotation
@@ -35366,23 +35852,10 @@ Come i numeri vanno arrotondati, per eccesso o per difetto, quando necessario.
Maggiori dettagli verranno forniti in seguito.
@item NaN
-``Not a number'' (Non un Numero).@footnote{Grazie a Michael
-Brennan per questa descrizione, che abbiamo parafrasato, e per gli esempi.} Un
-valore speciale che risulta da un calcolo che non ha risposta come numero
-reale. In tal caso, i programmi possono o ricevere un'eccezione di virgola
-mobile, o restituire @code{NaN} come risultato. Lo standard IEEE 754
-consiglia che i sistemi restituiscano @code{NaN}. Alcuni esempi:
-
-@table @code
-@item sqrt(-1)
-La radice quadrata di @minus{}1 ha senso nell'insieme dei numeri complessi,
-ma non nell'insieme dei numeri reali,
-per cui il risultato @`e @code{NaN}.
-
-@item log(-8)
-Il logaritmo di @minus{}8 @`e fuori dal dominio di @code{log()},
-per cui il risultato @`e @code{NaN}.
-@end table
+``Not a number'' (``non @`e un numero''). Un valore speciale
+che risulta da un calcolo che non ha come risposta un numero
+reale. @xref{Valori strani}, per maggiori informazioni riguardo
+ai valori infiniti e ai valori ``non-un-numero''.
@item Normalizzato (formato)
Come la mantissa (vedi oltre in questa lista) @`e usualmente memorizzata. Il
@@ -35509,7 +35982,14 @@ per maggiori informazioni.
@author Teen Talk Barbie, luglio 1992
@end quotation
-Questa @value{SECTION} fornisce un quadro dettagliato dei problemi che
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+fornisce un quadro dettagliato dei problemi che
si presentano quando si eseguono molti calcoli in virgola
mobile.@footnote{C'@`e un saggio molto bello
@uref{http://www.validlab.com/goldberg/paper.pdf, sul calcolo in
@@ -35534,8 +36014,8 @@ ottenere ulteriori informazioni, e non basarsi solo su quanto qui detto.
* Ottenere la precisione:: Ottenere pi@`u precisione richiede qualche
sforzo.
* Tentare di arrotondare:: Aggiungere cifre di precisione e arrotondare.
-* Impostare la precisione:: Come impostare la precisione.
-* Impostare modo di arrotondare:: Impostare le modalit@`a di arrotondamento.
+* Impostare la precisione:: Impostare la precisione.
+* Impostare modo di arrotondare:: Impostare la modalit@`a di arrotondamento.
@end menu
@node Inesattezza nei calcoli
@@ -35556,6 +36036,7 @@ il numero di cifre decimali esatte nel risultato finale.
* Rappresentazioni inesatte:: I numeri non sono rappresentati esattamente.
* Confronti tra valori in VM:: Come confrontare valori in virgola mobile.
* Gli errori si sommano:: Gli errori diventano sempre maggiori.
+* Valori strani:: Valori in virgola mobile non spiegati a scuola.
@end menu
@node Rappresentazioni inesatte
@@ -35682,6 +36163,257 @@ $ @kbd{gawk 'BEGIN @{}
@print{} 4
@end example
+@node Valori strani
+@subsubsection Valori in virgola mobile non spiegati a scuola
+
+Sia l'hardware che implementa lo standard per i numeri in virgola
+mobili IEEE 754, che la libreria matematica MPFR, prevedono due
+tipi di valori di cui probabilmente non vi hanno parlato a scuola.
+Il primo @`e il valore @dfn{infinity} [infinito], un valore speciale
+che pu@`o avere un segno sia negativo che positivo, e che @`e pi@`u
+piccolo di ogni altro valore (infinito negativo), o maggiore di ogni
+altro valore (infinito positivo). Quando vengono generati tali valori
+@command{gawk} li stampa come @samp{-inf} o @samp{+inf}, rispettivamente.
+@command{gawk} accetta queste stringhe come dati in input, e li converte
+internamente all'appropriato valore in virgola mobile.
+
+Valori di infinito che abbiano lo stesso segno risultano uguali
+quando sono confrontati fra loro.
+Per il resto, altre operazioni (addizione, sottrazione, etc.)
+che hanno come operando un infinito e un altro numero producono
+risultati matematicamente ragionevoli.
+
+Il secondo tipo di valore @`e ``not a number'' [Non un Numero]
+scritto in forma abbreviata come NaN.@footnote{Grazie a Michael Brennan
+per questa descrizione, che abbiamo parafrasato, e per gli esempi.}
+
+Questo @`e un valore speciale che risulta da un calcolo che non ha come
+risposta un numero reale. In tal caso, i programmi possono o ricevere
+un’eccezione di virgola mobile, o restituire NaN [Non un Numero] come risultato.
+Lo standard IEEE 754 consiglia che i sistemi restituiscano NaN [Non un Numero].
+Alcuni esempi:
+
+@table @code
+@item sqrt(-1)
+@iftex
+La funzione @math{\sqrt{-1}}
+@end iftex
+@ifnottex
+Questa funzione
+@end ifnottex
+ha senso nell'insieme dei numeri complessi,
+ma non nell'insieme dei numeri reali,
+per cui il risultato @`e @code{NaN}.
+
+@item log(-8)
+Il logaritmo di @minus{}8 @`e fuori dal dominio di @code{log()},
+per cui il risultato @`e @code{NaN}.
+@end table
+
+I valori Nan sono strani. In particolare, non possono essere confrontati
+con altri numeri in virgola mobile; ogni confronto di questo tipo, eccetto
+quello ``non uguale a'', restituisce il valore ``falso''.
+I valori NaN [Non un Numero] sono talmente differenti da altri valori che perfino il
+confronto di due valori NaN identici fra loro con @code{!=} restituisce
+il valore ``vero''!
+
+I valori NaN [Non un Numero] possono anche avere un segno (positivo o negativo),
+anche se dipende dall'implementazione quale segno viene restituito
+da qualsiasi operazione il cui risultato sia un valore NaN.
+Per esempio, su alcuni sistemi la funzione @code{sqrt(-1)}
+restituisce un NaN negativo. Su altri sistemi il NaN restituito
+@`e invece positivo.
+
+Quando tali valori vengono generati, @command{gawk} li stampa
+come @samp{-nan} o @samp{+nan}, rispettivamente. Anche per
+questi valori, @command{gawk} accetta queste stringhe come
+dati in input e le converte internamente ai valori loro
+assegnati come numeri in virgola mobile.
+
+Se si desidera approfondire ulteriormente questo argomento, si possono
+trovare programmi di test scritti in C, @command{awk} e Python
+nella directory @file{awklib/eg/test-programs} disponibile
+nella distribuzione di @command{gawk}.
+Tali programmi permettono un confronto tra i linguaggi di
+programmazione, riguardo al modo con cui vengono trattati
+i valori di Infinity [Infinito] e quelli NaN [Non un Numero].
+
+@ignore
+@c file eg/test-programs/gen-float-table.awk
+function eq(left, right)
+@{
+ return left == right
+@}
+
+function ne(left, right)
+@{
+ return left != right
+@}
+
+function lt(left, right)
+@{
+ return left < right
+@}
+
+function le(left, right)
+@{
+ return left <= right
+@}
+
+function gt(left, right)
+@{
+ return left > right
+@}
+
+function ge(left, right)
+@{
+ return left >= right
+@}
+
+BEGIN @{
+ nan = sqrt(-1)
+ inf = -log(0)
+ split("== != < <= > >=", names)
+ names[3] = names[3] " "
+ names[5] = names[5] " "
+ split("eq ne lt le gt ge", funcs)
+
+ compare[1] = 2.0
+ compare[2] = values[1] = -sqrt(-1.0) # nan
+ compare[3] = values[2] = sqrt(-1.0) # -nan
+ compare[4] = values[3] = -log(0.0) # inf
+ compare[5] = values[4] = log(0.0) # -inf
+
+ for (i = 1; i in values; i++) @{
+ for (j = 1; j in compare; j++) @{
+ for (k = 1; k in names; k++) @{
+ the_func = funcs[k]
+ printf("%g %s %g -> %s\n",
+ values[i],
+ names[k],
+ compare[j],
+ @@the_func(values[i], compare[j]) ?
+ "True" : "False");
+ @}
+ printf("\n");
+ @}
+ @}
+@}
+@c endfile
+@end ignore
+
+@ignore
+@c file eg/test-programs/gen-float-table.c
+#include <stdio.h>
+#include <math.h>
+#include <stdbool.h>
+
+#define def_func(name, op) \
+ bool name(double left, double right) @{ \
+ return left op right; \
+ @}
+
+def_func(eq, ==)
+def_func(ne, !=)
+def_func(lt, <)
+def_func(le, <=)
+def_func(gt, >)
+def_func(ge, >=)
+
+struct @{
+ const char *name;
+ bool (*func)(double left, double right);
+@} functions[] = @{
+ @{ "==", eq @},
+ @{ "!=", ne @},
+ @{ "< ", lt @},
+ @{ "<=", le @},
+ @{ "> ", gt @},
+ @{ ">=", ge @},
+ @{ 0, 0 @}
+@};
+
+int main()
+@{
+ double values[] = @{
+ -sqrt(-1), // nan
+ sqrt(-1), // -nan
+ -log(0.0), // inf
+ log(0.0) // -inf
+ @};
+ double compare[] = @{ 2.0,
+ -sqrt(-1), // nan
+ sqrt(-1), // -nan
+ -log(0.0), // inf
+ log(0.0) // -inf
+ @};
+
+ int i, j, k;
+
+ for (i = 0; i < 4; i++) @{
+ for (j = 0; j < 5; j++) @{
+ for (k = 0; functions[k].name != NULL; k++) @{
+ printf("%g %s %g -> %s\n", values[i],
+ functions[k].name,
+ compare[j],
+ functions[k].func(values[i], compare[j]) ? "True" : "False");
+ @}
+ printf("\n");
+ @}
+ @}
+
+ return 0;
+@}
+@c endfile
+@end ignore
+
+@ignore
+@c file eg/test-programs/gen-float-table.py
+from math import *
+
+nan = float('NaN')
+inf = float('Inf')
+
+def eq(left, right):
+ return left == right
+
+def ne(left, right):
+ return left != right
+
+def lt(left, right):
+ return left < right
+
+def le(left, right):
+ return left <= right
+
+def gt(left, right):
+ return left > right
+
+def ge(left, right):
+ return left >= right
+
+func_map = {
+ "==": eq,
+ "!=": ne,
+ "< ": lt,
+ "<=": le,
+ "> ": gt,
+ ">=": ge,
+}
+
+compare = [2.0, nan, -nan, inf, -inf]
+values = [nan, -nan, inf, -inf]
+
+for i in range(len(values)):
+ for j in range(len(compare)):
+ for op in func_map:
+ print("%g %s %g -> %s" %
+ (values[i], op, compare[j], func_map[op](values[i], compare[j])))
+
+ print("")
+@c endfile
+@end ignore
+
@node Ottenere la precisione
@subsection Ottenere la precisione voluta
@@ -36299,7 +37031,7 @@ esadecimale (p.es., @code{0xDEADBEEF}). (Da notare: valore dei dati letti,
@item
Supporto per i valori in virgola mobile speciali IEEE 754 ``not a number''
-(NaN), pi@`u infinito (``inf'') e meno infinito (``@minus{}inf'').
+(NaN) [Non un Numero], pi@`u infinito (``inf'') e meno infinito (``@minus{}inf'').
In particolare, il formato per questi valori @`e quello specificato dallo
standard C ISO 1999, che non distingue maiuscole/minuscole e pu@`o consentire
caratteri aggiuntivi dipendenti dall'implementazione dopo il @samp{nan}, e
@@ -36337,7 +37069,8 @@ Sebbene il manutentore di @command{gawk} continui a credere che introdurre
queste funzionalit@`a sia sconsigliabile, ci@`o nonostante, sui sistemi che
supportano i valori in virgola mobile IEEE, sembra giusto fornire
@emph{qualche}
-possibilit@`a di usare i valori NaN e infinito. La soluzione implementata
+possibilit@`a di usare i valori NaN [Non un Numero] e Infinity [Infinito].
+La soluzione implementata
in @command{gawk} @`e questa:
@itemize @value{BULLET}
@@ -36386,7 +37119,8 @@ speciali. Cos@`{@dotless{i}}, @samp{+nan} e @samp{+NaN} sono la stessa cosa.
@cindex POSIX @subentry modalit@`a
Oltre a gestire l'input, @command{gawk} deve anche stampare valori
-``corretti'' in output, quando un valore sia NaN o infinito.
+``corretti'' in output, quando un valore sia NaN [Non un Numero]
+o Infinity [Infinito].
A partire dalla @value{PVERSION} 4.2.2, per tali valori
@command{gawk} stampa una delle quattro stringhe sopra descritte:
@samp{+inf}, @samp{-inf}, @samp{+nan}, or @samp{-nan}.
@@ -37029,8 +37763,8 @@ multibyte corrente.
@itemx @ @ @ @ AWK_STRNUM,
@itemx @ @ @ @ AWK_ARRAY,
@itemx @ @ @ @ AWK_SCALAR,@ @ @ @ @ @ @ @ @ /* accesso opaco a una variabile */
-@itemx @ @ @ @ AWK_VALUE_COOKIE@ @ @ @ /* per aggiornare un valore
-@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ gi@`a creato */
+@itemx @ @ @ @ AWK_VALUE_COOKIE@ @ @ @ /* per aggiornare valore gi@`a creato */
+@itemx @ @ @ @ AWK_BOOL
@itemx @} awk_valtype_t;
L'elenco @code{enum} indica di che tipo @`e un certo valore.
@`E usato nella seguente struttura @code{struct}.
@@ -37043,6 +37777,7 @@ L'elenco @code{enum} indica di che tipo @`e un certo valore.
@itemx @ @ @ @ @ @ @ @ awk_array_t@ @ @ @ @ @ @ @ a;
@itemx @ @ @ @ @ @ @ @ awk_scalar_t@ @ @ @ @ @ @ scl;
@itemx @ @ @ @ @ @ @ @ awk_value_cookie_t@ vc;
+@itemx @ @ @ @ @ @ @ @ awk_bool_t@ @ @ @ @ @ @ @ @ b;
@itemx @ @ @ @ @} u;
@itemx @} awk_value_t;
Un ``valore di @command{awk}''.
@@ -37058,7 +37793,8 @@ e ogni campo @`e del tipo appropriato.
@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
+@itemx #define bool_value@ @ @ @ @ u.b
+L'uso di queste macro rende pi@`u agevole eseguire l'accesso ai campi di
@code{awk_value_t}.
@item enum AWK_NUMBER_TYPE @{
@@ -37369,8 +38105,8 @@ restituiti sono di tipo @code{mpfr_ptr} e @code{mpz_ptr} rispettivamente,
e si dovrebbero assegnare in maniera appropriata questi codici di ritorno
prima di assegnare i risultati a variabili del tipo corretto.
-La memoria allocata da queste funzioni dovrebbe essere liberata a fine
-utilizzo, richiamando @code{gawk_free()}.
+La memoria allocata da queste funzioni dovrebbe essere liberata dopo il
+loro uso, richiamando @code{gawk_free()}.
@node Funzioni di costruzione
@subsection Funzioni per creare valori
@@ -37420,14 +38156,14 @@ 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 in @code{result}.
+@itemx make_number_mpz(void *mpz, awk_value_t *risultato);
+Questa funzione crea un valore di numero GMP in @code{risultato}.
@code{mpz} deve provenire da una chiamata a @code{get_mpz_ptr()}
(e quindi essere veramente del corrispondente tipo @code{mpz_ptr}).
@item static inline awk_value_t *
-@itemx make_number_mpfr(void *mpfr, awk_value_t *result);
-Questa funzione crea un valore di numero MPFR in @code{result}.
+@itemx make_number_mpfr(void *mpfr, awk_value_t *risultato);
+Questa funzione crea un valore di numero MPFR in @code{risultato}.
@code{mpz} deve provenire da una chiamata a @code{get_mpfr_ptr()}.
@item static inline awk_value_t *
@@ -37456,6 +38192,11 @@ Si aspetta che @code{stringa} sia un valore di tipo @samp{char *} che punta a
dati ottenuti in precedenza tramite una chiamata a
@code{gawk_malloc()}, @code{gawk_calloc()} o @code{gawk_realloc()}.
+@item static inline awk_value_t *
+@itemx make_bool(awk_bool_t boolval, awk_value_t *risultato);
+Questa funzione crea un valore booleano nella variabile @code{awk_value_t}
+puntata da @code{risultato}.
+
@end table
@node API e gestione valori MPFR e GMP
@@ -37506,7 +38247,14 @@ return result;
@cindex registrazione di estensione
@cindex estensioni @subentry registrazione di
-Questa @value{SECTION} descrive le funzioni dell'API per
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+descrive le funzioni dell'API per
registrare parti di un'estensione con @command{gawk}.
@menu
@@ -38023,7 +38771,7 @@ 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
+unit@`a di caratteri potenzialmente multibyte, 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.
@@ -38327,7 +39075,8 @@ comportamento @`e riassunto nella
<colspec colname="c6"/>
<colspec colname="c7"/>
<colspec colname="c8"/>
- <spanspec spanname="hspan" namest="c3" nameend="c8" align="center"/>
+ <colspec colname="c9"/>
+ <spanspec spanname="hspan" namest="c3" nameend="c9" align="center"/>
<thead>
<row><entry></entry><entry spanname="hspan"><para>Tipo di valore reale</para></entry></row>
<row>
@@ -38337,6 +39086,7 @@ comportamento @`e riassunto nella
<entry><para>Strnum</para></entry>
<entry><para>Numero</para></entry>
<entry><para>Regexp</para></entry>
+ <entry><para>Bool</para></entry>
<entry><para>Vettore</para></entry>
<entry><para>Indefinito</para></entry>
</row>
@@ -38349,6 +39099,7 @@ comportamento @`e riassunto nella
<entry><para>Stringa</para></entry>
<entry><para>Stringa</para></entry>
<entry><para>Stringa</para></entry>
+ <entry><para>Stringa</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
</row>
@@ -38361,6 +39112,7 @@ comportamento @`e riassunto nella
<entry><para>false</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
+ <entry><para>false</para></entry>
</row>
<row>
<entry></entry>
@@ -38369,6 +39121,7 @@ comportamento @`e riassunto nella
<entry><para>Numero</para></entry>
<entry><para>Numero</para></entry>
<entry><para>false</para></entry>
+ <entry><para>Numero</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
</row>
@@ -38377,6 +39130,7 @@ comportamento @`e riassunto nella
<entry><para><emphasis role="bold">Regexp</emphasis></para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
+ <entry><para>false</para></entry>
<entry><para>Regexp</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
@@ -38384,11 +39138,23 @@ comportamento @`e riassunto nella
</row>
<row>
<entry><para><emphasis role="bold">Richiesto</emphasis></para></entry>
+ <entry><para><emphasis role="bold">Booleano</emphasis></para></entry>
+ <entry><para>false</para></entry>
+ <entry><para>false</para></entry>
+ <entry><para>false</para></entry>
+ <entry><para>false</para></entry>
+ <entry><para>Booleano</para></entry>
+ <entry><para>false</para></entry>
+ <entry><para>false</para></entry>
+ </row>
+ <row>
+ <entry><para></para></entry>
<entry><para><emphasis role="bold">Vettore</emphasis></para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
+ <entry><para>false</para></entry>
<entry><para>Vettore</para></entry>
<entry><para>false</para></entry>
</row>
@@ -38399,6 +39165,7 @@ comportamento @`e riassunto nella
<entry><para>Scalare</para></entry>
<entry><para>Scalare</para></entry>
<entry><para>Scalare</para></entry>
+ <entry><para>Scalare</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
</row>
@@ -38409,6 +39176,7 @@ comportamento @`e riassunto nella
<entry><para>Strnum</para></entry>
<entry><para>Numero</para></entry>
<entry><para>Regexp</para></entry>
+ <entry><para>Booleano</para></entry>
<entry><para>Vettore</para></entry>
<entry><para>Indefinito</para></entry>
</row>
@@ -38421,6 +39189,7 @@ comportamento @`e riassunto nella
<entry><para>false</para></entry>
<entry><para>false</para></entry>
<entry><para>false</para></entry>
+ <entry><para>false</para></entry>
</row>
</tbody>
</tgroup>
@@ -38438,31 +39207,33 @@ comportamento @`e riassunto nella
@end tex
@c @multitable @columnfractions .166 .166 .198 .15 .15 .166
@ifclear SMALLPRINT
-@multitable {Richiesto} {Indefinito} {Numero} {Numero} {Scalar} {Regexp} {Vettore} {Indefinito}
-@headitem @tab @tab Stringa @tab Strnum @tab Numero @tab Regexp @tab Vettore @tab Indefinito
-@item @tab @b{Stringa} @tab Stringa @tab Stringa @tab Stringa @tab Stringa @tab false @tab false
-@item @tab @b{Strnum} @tab false @tab Strnum @tab Strnum @tab false @tab false @tab false
-@item @tab @b{Numero} @tab Numero @tab Numero @tab Numero @tab false @tab false @tab false
-@item @b{Tipo} @tab @b{Regexp} @tab false @tab false @tab false @tab Regexp @tab false @tab false
-@item @b{Richiesto} @tab @b{Vettore} @tab false @tab false @tab false @tab false @tab Vettore @tab false
-@item @tab @b{Scalar} @tab Scalar @tab Scalar @tab Scalar @tab Scalar @tab false @tab false
-@item @tab @b{Indefinito} @tab Stringa @tab Strnum @tab Numero @tab Regexp @tab Vettore @tab Indefinito
-@item @tab @b{Value cookie} @tab false @tab false @tab false @tab false @tab false @tab false
+@multitable {Richiesto} {Indefinito} {Numero} {Numero} {Scalare} {Regexp} {Numero} {Vettore} {Indefinito}
+@headitem @tab @tab Stringa @tab Strnum @tab Numero @tab Regexp @tab Booleano @tab Vettore @tab Indefinito
+@item @tab @b{Stringa} @tab Stringa @tab Stringa @tab Stringa @tab Stringa @tab Stringa @tab false @tab false
+@item @tab @b{Strnum} @tab false @tab Strnum @tab Strnum @tab false @tab false @tab false @tab false
+@item @tab @b{Numero} @tab Numero @tab Numero @tab Numero @tab false @tab Numero @tab false @tab false
+@item @b{Tipo} @tab @b{Regexp} @tab false @tab false @tab false @tab Regexp @tab Booleano @tab false @tab false
+@item @b{Richiesto} @tab @b{Booleano} @tab false @tab false @tab false @tab false @tab Booleano @tab false @tab false
+@item @tab @b{Vettore} @tab false @tab false @tab false @tab false @tab false @tab Vettore @tab false
+@item @tab @b{Scalare} @tab Scalare @tab Scalare @tab Scalare @tab Scalare @tab Scalare @tab false @tab false
+@item @tab @b{Indefinito} @tab Stringa @tab Strnum @tab Numero @tab Regexp @tab Booleano @tab Vettore @tab Indefinito
+@item @tab @b{@dfn{Value cookie}} @tab false @tab false @tab false @tab false @tab false @tab false
@end multitable
@end ifclear
@ifset SMALLPRINT
@smallformat
-@multitable {Richiesto} {Value cookie} {Num.} {Num.} {Scal.} {Regexp} {Vett.} {Indef.}
-@headitem @tab @tab String @tab Strn. @tab Num. @tab Regexp @tab Vett. @tab Indef.
-@item @tab @b{Stringa} @tab String @tab String @tab String @tab String @tab false @tab false
-@item @tab @b{Strnum} @tab false @tab Strn. @tab Strn. @tab false @tab false @tab false
-@item @tab @b{Numero} @tab Num. @tab Num. @tab Num. @tab false @tab false @tab false
-@item @b{Tipo} @tab @b{Regexp} @tab false @tab false @tab false @tab Regexp @tab false @tab false
-@item @b{Richiesto} @tab @b{Vettore} @tab false @tab false @tab false @tab false @tab Vett. @tab false
-@item @tab @b{Scalar} @tab Scal. @tab Scal. @tab Scal. @tab Scal. @tab false @tab false
-@item @tab @b{Indefinito} @tab String @tab Strn. @tab Num. @tab Regexp @tab Vett. @tab Indef.
-@item @tab @b{Value cookie} @tab false @tab false @tab false @tab false @tab false @tab false
+@multitable {Rich.} {Indef.} {Num.} {Num.} {Scal.} {Regex.} {Num.} {Vett.} {Indef.}
+@headitem @tab @tab Str. @tab Strn. @tab Num. @tab Regex. @tab Bool. @tab Vett. @tab Indef.
+@item @tab @b{Str.} @tab Str. @tab Str. @tab Str. @tab Str. @tab Str. @tab false @tab false
+@item @tab @b{Strn.} @tab false @tab Strn. @tab Strn. @tab false @tab false @tab false @tab false
+@item @tab @b{Num.} @tab Num. @tab Num. @tab Num. @tab false @tab Num. @tab false @tab false
+@item @b{Tipo} @tab @b{Regex.} @tab false @tab false @tab false @tab Regex. @tab Bool. @tab false @tab false
+@item @b{Rich.} @tab @b{Bool.} @tab false @tab false @tab false @tab false @tab Bool. @tab false @tab false
+@item @tab @b{Vett.} @tab false @tab false @tab false @tab false @tab false @tab Vett. @tab false
+@item @tab @b{Scal.} @tab Scal. @tab Scal. @tab Scal. @tab Scal. @tab Scal. @tab false @tab false
+@item @tab @b{Indef.} @tab Str. @tab Strn. @tab Num. @tab Regex. @tab Bool. @tab Vett. @tab Indef.
+@item @tab @b{@dfn{Val. coo.}} @tab false @tab false @tab false @tab false @tab false @tab false
@end multitable
@end smallformat
@end ifset
@@ -38470,28 +39241,30 @@ comportamento @`e riassunto nella
@end ifnotplaintext
@ifplaintext
@verbatim
- +-------------------------------------------------------+
- | Tipo di valore reale: |
- +--------+--------+--------+--------+-------+-----------+
- | Stringa| Strnum | Numero | Regexp |Vettore| Indefinito|
-+-----------+-----------+--------+--------+--------+--------+-------+-----------+
-| | Stringa | Stringa| Stringa| Stringa| Stringa| false | false |
-| +-----------+--------+--------+--------+--------+-------+-----------+
-| | Strnum | false | Strnum | Strnum | false | false | false |
-| +-----------+--------+--------+--------+--------+-------+-----------+
-| | Numero | Numero | Numero | Numero | false | false | false |
-| +-----------+--------+--------+--------+--------+-------+-----------+
-| | Regexp | false | false | false | Regexp | false | false |
-| Tipo +-----------+--------+--------+--------+--------+-------+-----------+
-|Richiesto: | Vettore | false | false | false | false |Vettore| false |
-| +-----------+--------+--------+--------+--------+-------+-----------+
-| | Scalare | Scalare| Scalare| Scalare| Scalare| false | false |
-| +-----------+--------+--------+--------+--------+-------+-----------+
-| | Indefinito| Stringa| Strnum | Numero | Regexp |Vettore| Indefinito|
-| +-----------+--------+--------+--------+--------+-------+-----------+
-| | Value- | false | false | false | false | false | false |
-| | Cookie | | | | | | |
-+-----------+-----------+--------+--------+--------+--------+-------+-----------+
+ +----------------------------------------------------------------+
+ | Tipo di valore reale: |
+ +--------+--------+--------+--------+--------+-------+-----------+
+ | Stringa| Strnum | Numero | Regexp |Booleano|Vettore| Indefinito|
++-----------+-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Stringa | Stringa| Stringa| Stringa| Stringa| false | false | false |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Strnum | false | Strnum | Strnum | false | false | false | false |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Numero | Numero | Numero | Numero | false | false | false | false |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Regexp | false | false | false | Regexp | false | false | false |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| Tipo | Booleano | false | false | false | false |Booleano| false | false |
+| Richiesto +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Vettore | false | false | false | false |Vettore |Vettore| false |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Scalare | Scalare| Scalare| Scalare| Scalare| false | false | false |
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Indefinito| Stringa| Strnum | Numero | Regexp |Vettore |Vettore| Indefinito|
+| +-----------+--------+--------+--------+--------+--------+-------+-----------+
+| | Value- | false | false | false | false | false | false | false |
+| | Cookie | | | | | | | |
++-----------+-----------+--------+--------+--------+--------+--------+-------+-----------+
@end verbatim
@end ifplaintext
@end float
@@ -38504,7 +39277,7 @@ passati all'estensione. Esse sono:
@table @code
@item awk_bool_t get_argument(size_t count,
-@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_valtype_t wanted,
+@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_valtype_t desiderato,
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_value_t *risultato);
Riempie la struttura @code{awk_value_t} puntata da @code{risultato}
con l'argomento numero @code{count}. Restituisce @dfn{true} se il tipo
@@ -38553,7 +39326,7 @@ Le funzioni sono le seguenti:
@table @code
@item awk_bool_t sym_lookup(const char *nome,
-@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_valtype_t wanted,
+@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_valtype_t desiderato,
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_value_t *risultato);
Riempie la struttura @code{awk_value_t} puntata da @code{risultato}
con il valore della variabile il cui nome @`e nella stringa @code{nome},
@@ -38567,7 +39340,7 @@ della variabile
@item awk_bool_t sym_lookup_ns(const char *nome,
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ const char *name_space,
-@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_valtype_t wanted,
+@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_valtype_t desiderato,
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_value_t *risultato);
Simile a @code{sym_lookup()}, ma il parametro @code{name_space} consente di
specificare a quale spazio-di-nomi appartiene @code{nome}.
@@ -38614,7 +39387,7 @@ Le funzioni seguenti servono per gestire gli @dfn{scalar cookie}:
@table @code
@item awk_bool_t sym_lookup_scalar(awk_scalar_t cookie,
-@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_valtype_t wanted,
+@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_valtype_t desiderato,
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_value_t *risultato);
Ottiene il valore corrente di uno @dfn{scalar cookie}.
Una volta ottenuto lo @dfn{scalar cookie} usando @code{sym_lookup()}, si
@@ -38701,7 +39474,14 @@ inizializza_estensione()
@}
@end example
-Dopo aver fatto questo, si usino le routine descritte in questa @value{SECTION}
+Dopo aver fatto questo, si usino le routine descritte in
+@ifnotinfo
+questa
+@end ifnotinfo
+@ifinfo
+questo
+@end ifinfo
+@value{SECTION}
per ottenere e modificare
il valore usando il @dfn{value cookie}. Quindi, @code{do_magic()} diviene ora
qualcosa del tipo:
@@ -38735,7 +39515,15 @@ restituiti dalle funzioni dell'API.
@node Valori nascosti
@subsubsection Creare e usare valori nascosti
-Le routine in questa @value{SECTION} permettono di creare e rilasciare
+Le routine in
+@ifnotinfo
+questa
+@end ifnotinfo
+@ifinfo
+questo
+@end ifinfo
+@value{SECTION}
+permettono di creare e rilasciare
valori nascosti. Come gli @dfn{scalar cookie}, in teoria i valori nascosti
non sono necessari. Si possono creare numeri e stringhe usando
le funzioni descritte
@@ -38968,7 +39756,7 @@ Restituisce @dfn{false} se si verifica un errore.
@item awk_bool_t get_array_element(awk_array_t a_cookie,
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ const awk_value_t *const index,
-@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_valtype_t wanted,
+@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_valtype_t desiderato,
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_value_t *risultato);
Per il vettore rappresentato da @code{a_cookie}, restituisce in @code{*risultato}
il valore dell'elemento il cui indice @`e @code{index}.
@@ -40621,11 +41409,18 @@ $ @kbd{AWKLIBPATH=$PWD gawk -f testff.awk}
@section Le estensioni di esempio incluse nella distribuzione @command{gawk}
@cindex estensioni @subentry distribuite con @command{gawk}
-Questa @value{SECTION} fornisce una breve panoramica degli esempi di
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+fornisce una breve panoramica degli esempi di
estensione inclusi nella distribuzione di @command{gawk}. Alcune di esse
sono destinate per l'uso in produzione (p.es., le estensioni
-@code{filefuncs}, @code{readdir}, e
-@code{inplace}). Altre sono state scritte principalmente per mostrare come
+@code{filefuncs}, @code{readdir}, e @code{inplace}).
+Altre sono state scritte principalmente per mostrare come
si usa l'estensione API.
@menu
@@ -41809,7 +42604,15 @@ documentazione online}.
Il liguaggio @command{awk} si @`e evoluto considerevolmente tra Unix versione
7 (1978) e la nuova implementazione disponibile a partire da Unix System V
-Release 3.1 (1987). Questa @value{SECTION} riassume le differenze e indica
+Release 3.1 (1987).
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+riassume le differenze e indica
dove @`e possibile trovare ulteriori dettagli:
@itemize @value{BULLET}
@@ -42555,7 +43358,7 @@ con @option{--}.
@item
L'opzione @option{--source} per combinare codice sorgente immesso nella riga
-di comando e codice sorgente proveniente da file di libreria.
+di comando e codice sorgente proveniente da librerie di file.
@end itemize
@end itemize
@@ -42719,7 +43522,8 @@ per l'internationalizzazione
@item
La funzione @code{extension()} e la possibilit@`a di aggiungere
-nuove funzioni predefinite dinamicamente
+nuove funzioni predefinite dinamicamente. Questa funzione @`e stata rimossa.
+@`E rimpiazzata dal nuovo meccanismo delle estensioni dinamiche
@iftex
(@pxrefil{Estensioni dinamiche}).
@end iftex
@@ -42831,7 +43635,7 @@ i campi, invece che individuare il separatore tra i campi
@item
Se esiste l'elemento di vettore @code{PROCINFO["sorted_in"]}, il ciclo
-@samp{for(indice in pippo)} ordina
+@samp{for (indice in pippo)} ordina
gli indici, prima di iniziare il ciclo. Il valore di questo elemento
permette di controllare l'ordinamento degli indici prima di iniziare il
ciclo che li visita tutti
@@ -43057,7 +43861,7 @@ L'opzione @option{-D} attiva il debugger.
@item
Le opzioni @option{-i} e @option{--include}
-caricano dei file di libreria @command{awk}.
+caricano delle librerie di file @command{awk}.
@item
Le opzioni @option{-l} e @option{--load} caricano estensioni dinamiche
@@ -43105,7 +43909,7 @@ La funzione @code{getline} ridiretta @`e stata resa possibile all'interno di
@item
Il comando @code{where} @`e stato aggiunto al debugger
-(@pxref{@dfn{Stack} di esecuzione}).
+(@pxref{Stack di esecuzione}).
@item
Il supporto per Ultrix @`e stato rimosso.
@@ -43258,6 +44062,37 @@ L'indice analitico di questo manuale @`e stato completamente rimaneggiato.
@item
@`E stato aggiunto il supporto per MSYS2.
+
+@item
+@code{asort()} ed @code{asorti()} sono stati modificati
+per consentire come primo argomento @code{FUNCTAB} e @code{SYMTAB},
+quando venga specificato un vettore di destinazione come secondo parametro
+(@pxref{Funzioni per stringhe}).
+
+@item
+Le opzioni @option{-I}/@option{--trace} sono state aggiunte per
+stampare una traccia dei @dfn{byte code} mentre vengono eseguiti
+(@pxref{Opzioni}).
+
+@item
+@code{$0} e i campi sono ora azzerati prima di eseguire una
+regola @code{BEGINFILE} rule (@pxref{BEGINFILE/ENDFILE}).
+
+@item
+Parecchi fra i programmi di esempio sono stati aggiornati per
+riflettere i loro equivalenti POSIX pi@`u recenti.
+
+@item
+Gli avvisi ``no effect'' da lint, emessi se si specifica
+l'opzione @option{--lint}, sono stati modificati
+e ora sono pi@`u ragionevoli.
+(@pxref{Opzioni}).
+
+@item
+La gestione dei valori Infinity [Infinito] e NaN [Non un Numero]
+@`e stata migliorata.
+@xref{Definizioni matematiche} e vedere anche
+@ref{Problemi virgola mobile POSIX}.
@end itemize
@c XXX ADD MORE STUFF HERE
@@ -43434,7 +44269,14 @@ In ogni caso @command{gawk} aderisce allo standard POSIX.
@author Anonimo
@end quotation
-Questa @value{SECTION} elenca le persone che hanno maggiormente contribuito
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+elenca le persone che hanno maggiormente contribuito
allo sviluppo di @command{gawk} e/o alla stesura di questo @value{DOCUMENT},
in ordine approssimativamente cronologico:
@@ -43807,7 +44649,14 @@ della versione specifica di una particolare piattaforma.
@cindex codice sorgente @subentry @command{gawk}
@cindex sorgente @subentry codice @subentry @command{gawk}
-Questa @value{SECTION} spiega come ottenere la distribuzione
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+spiega come ottenere la distribuzione
di @command{gawk}, come scompattarla, e cosa @`e contenuto nei vari file
e nelle sottodirectory risultanti.
@@ -43974,7 +44823,7 @@ programmazione nel campo dell'intelligenza artificiale (AI).
@item doc/bc_notes
Una breve descrizione della struttura interna a livello di byte di
-@command{gawk} [``byte code''].
+@command{gawk} [``@dfn{byte code}''].
@item doc/README.card
@itemx doc/ad.block
@@ -44167,6 +45016,10 @@ dover configurare @command{gawk} per quel dato sistema.
@node Installazione veloce
@appendixsubsec Compilare @command{gawk} per sistemi di tipo Unix
+@menu
+* Compilare con MPFR:: Compilare con MPFR.
+@end menu
+
Questi normali passi di installazione dovrebbero essere sufficienti in
tutti i moderni sistemi in commercio derivati da Unix, ossia
GNU/Linux, sistemi basati su BSD, e l'ambiente Cygwin sotto MS-Windows.
@@ -44249,6 +45102,31 @@ diventa in questo caso @samp{sudo make install}. @`E probabile che sia
necessario fornire una password, ed essere stati messi nella lista degli
utenti che possono utilizzare il comando @command{sudo}.
+@node Compilare con MPFR
+@appendixsubsubsec Compilare con MPFR
+
+@cindex MPFR @subentry compilare @command{gawk} con libreria
+@cindex compilare @command{gawk} @subentry con libreria MPFR
+@cindex libreria @subentry MPFR @subentry compilare con
+L'uso della libreria MPFR
+[@dfn{Multiple Precision Floating-Point Reliable library}]
+in @command{gawk} @`e una funzionalit@`a opzionale:
+se le librerie MPFR e GMP sono gi@`a installate nel sistema
+quando si configura e compila @command{gawk},
+@command{gawk} sar@`a in grado di usarle in maniera automatica.
+
+Tali librerie si possono installare, a partire dal codice
+sorgente, scaricandole dal sito GNU di distribuzione, che @`e
+@code{ftp.gnu.org}.
+
+La maggioranza dei sistemi operativi recenti mette a disposizione
+dei pacchetti di installazione che consentono di evitare di installare
+le librerie a partire dal codice sorgente.
+Tali pacchetti scaricano e installano i file binari e quelli di
+intestazione di MPFR e GMP. Resta a carico di chi compila l'ottenere
+questi pacchetti con modalit@`a che dipendono dai metodi di aggiornamento
+di ogni particolare sistema.
+
@node File da usare a inizio sessione
@appendixsubsec File di inizializzazione della shell
@@ -44383,14 +45261,21 @@ delle opzioni disponibili in @command{configure}.
@cindex @command{gawk} @subentry configurazione di
@cindex configurazione di @command{gawk}
-Questa @value{SECTION} interessa solo a chi abbia un minimo di familiarit@`a con
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+interessa solo a chi abbia un minimo di familiarit@`a con
il linguaggio C e con i sistemi operativi di tipo Unix.
Il codice sorgente di @command{gawk}, in generale, cerca di aderire, nei limiti
del possibile, a degli standard formali. Ci@`o significa che @command{gawk} usa
routine di libreria che sono specificate nello standard ISO C e nello standard
POSIX per le interfacce dei sistemi operativi. Il codice sorgente di
-@command{gawk} richiede l'uso di un compilatore ISO C (standard 1990).
+@command{gawk} richiede l'uso di un compilatore ISO C (standard 1999).
Molti sistemi Unix non aderiscono completamente n@'e allo standard ISO n@'e a
quello POSIX. La sottodirectory @file{missing_d} nella distribuzione di
@@ -44430,7 +45315,14 @@ al file @file{configure.ac} e/o a @file{custom.h}.
@node Installazione non-Unix
@appendixsec Installazione su altri Sistemi Operativi
-Questa @value{SECTION} descrive come installare @command{gawk} su
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+descrive come installare @command{gawk} su
vari sistemi non-Unix.
@menu
@@ -44445,10 +45337,25 @@ vari sistemi non-Unix.
@cindex PC @subentry @command{gawk} su sistemi operativi
@cindex sistemi operativi @subentry per PC @subentry @command{gawk} su
@cindex installare @command{gawk} @subentry su sistemi operativi per PC
-Questa @value{SECTION} tratta dell'installazione e uso di @command{gawk}
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+tratta dell'installazione e uso di @command{gawk}
su macchine con architettura Intel che eseguono qualsiasi versione di
MS-Windows.
-In questa @value{SECTION}, il termine ``Windows32''
+In
+@ifnotinfo
+questa
+@end ifnotinfo
+@ifinfo
+questo
+@end ifinfo
+@value{SECTION},
+il termine ``Windows32''
si riferisce a una qualsiasi versione di Microsoft Windows
95/98/ME/NT/2000/XP/Vista/7/8/10.
@@ -44631,7 +45538,8 @@ esempio l'impostazione di @code{RS} pu@`o essere spostata in una regola
@cindex compilare @command{gawk} @subentry per Cygwin
@cindex Cygwin @subentry compilare @command{gawk} per
-@command{gawk} pu@`o essere compilato e usato ``cos@`{@dotless{i}} com'@`e'' sotto MS-Windows se
+@command{gawk} pu@`o essere compilato e usato
+``cos@`{@dotless{i}} com'@`e'' sotto MS-Windows se
si opera all'interno dell'ambiente @uref{http://www.cygwin.com, Cygwin}.
Questo ambiente consente un'eccellente simulazione di GNU/Linux, con l'uso di
Bash, GCC, GNU Make, e altri programmi GNU. La compilazione e l'installazione
@@ -44686,9 +45594,16 @@ In ambiente MSYS2, la compilazione usando i comandi classici
@cindex @command{gawk} @subentry versione VMS di
@cindex installare @command{gawk} @subentry su VMS
@cindex VMS @subentry installare @command{gawk} su
-Questa @value{SUBSECTION} descrive come compilare e installare @command{gawk}
-sotto VMS. Il termine classico ``VMS'' @`e usato qui anche per designare
-OpenVMS.
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SUBSECTION}
+descrive come compilare e installare @command{gawk}
+sotto OpenVMS.
+Il termine classico ``VMS'' @`e usato qui per designare OpenVMS.
@menu
* Compilazione su VMS:: Come compilare @command{gawk} su VMS.
@@ -44697,8 +45612,6 @@ OpenVMS.
* Dettagli installazione su VMS:: Come installare @command{gawk} su VMS.
* Esecuzione su VMS:: Come eseguire @command{gawk} su VMS.
* GNV su VMS:: Il progetto VMS GNV.
-* Vecchio Gawk su VMS:: Una versione non aggiornata arriva
- con alcune versioni di VMS.
@end menu
@node Compilazione su VMS
@@ -44847,8 +45760,8 @@ $ @kbd{set command gnv$gnu:[vms_bin]gawk_verb.cld}
@end example
Oppure il sistemista VMS pu@`o usare @file{GNV$GNU:[vms_bin]gawk_verb.cld} per
-aggiungere @command{gawk} e @command{awk} alla tabella @samp{DCLTABLES}
-valida per tutto il sistema.
+aggiungere i comandi @command{gawk} e @command{awk} alla tabella
+@samp{DCLTABLES} valida per tutto il sistema.
La sintassi DCL @`e documentata nel file @file{gawk.hlp}.
@@ -44954,8 +45867,6 @@ VMS restituisce data e ora in formato GMT, a meno che non siano stati impostati
i nomi logici @code{SYS$TIMEZONE_RULE} o @code{TZ}. Precedenti versioni di
VMS, come VAX/VMS 7.3, non impostano questi nomi logici.
-@c @cindex directory search
-@c @cindex path, search
@cindex percorso di ricerca @subentry per file sorgente
Il percorso di ricerca di default, nella ricerca dei file di programma per
@command{awk} specificati dall'opzione @option{-f}, @`e
@@ -45011,7 +45922,6 @@ $ define/user sys$input sys$command:
$ sort sys$input: sys$output:
@end example
-
@node GNV su VMS
@appendixsubsubsec Il progetto VMS GNV
@@ -45028,61 +45938,6 @@ adatto a essere usato con GNV.
Il file @file{vms/gawk_build_steps.txt} nella distribuzione documenta
la procedura per compilare un pacchetto PCSI compatible con GNV.
-@ignore
-@c The VMS POSIX product, also known as POSIX for OpenVMS, is long defunct
-@c and building gawk for it has not been tested in many years, but these
-@c old instructions might still work if anyone is still using it.
-
-@node VMS POSIX
-@appendixsubsubsec Compilare e usare @command{gawk} su VMS POSIX
-
-Le istruzioni appena viste vanno ignorate, sebbene @file{vms/gawk.hlp}
-dovrebbe ancora essere reso disponibile in una libreria di aiuto.
-L'albero del codice sorgente dovrebbe essere scompattato in un sottosistema
-contenitore di file, e non nel normale @dfn{filesystem} VMS.
-Occorre accertarsi che i due @dfn{script}, @file{configure} e
-@file{vms/posix-cc.sh}, siano eseguibile; si usi @samp{chmod +x} per farlo,
-se necessario. Poi vanno eseguiti i seguenti due comandi:
-
-@example
-psx> @kbd{CC=vms/posix-cc.sh configure}
-psx> @kbd{make CC=c89 gawk}
-@end example
-
-@noindent
-Il primo comando costruisce i file @file{config.h} e @file{Makefile},
-a partire da dei modelli, usando uno @dfn{script} per fare s@`{@dotless{i}} che il
-compilatore C soddisfi le aspettative di @command{configure}. Il secondo
-comando compila e collega @command{gawk} chiamando direttamente il
-compilatore C; gli eventuali messaggi di @command{make} che dicono di non
-riuscire a ridefinire @code{CC} vanno ignorati. @command{configure}
-impiega molto tempo a completarsi, ma in compenso continua a fornire
-messaggi che permettono di seguirne l'avanzamento.
-
-Questo @`e stato testato con VAX/VMS V6.2, VMS POSIX V2.0, e DEC C V5.2.
-
-Una volta installato, @command{gawk} funziona come ogni altro programma
-di utilit@`a della shell. A differenza della normale versione VMS di
-@command{gawk}, neesuna manipolazione speciale della riga di comando @`e
-necessaria nell'ambiente VMS POSIX.
-@end ignore
-
-@node Vecchio Gawk su VMS
-@appendixsubsubsec Vecchia versione di @command{gawk} su sistemi VMS
-
-
-@c Thanks to "gerard labadie" <gerard.labadie@gmail.com>
-
-Alcune versioni di VMS includono una vecchia versione di @command{gawk}.
-Per utilizzarla, occorre definire un simbolo, come segue:
-
-@example
-$ @kbd{gawk :== $sys$common:[syshlp.examples.tcpip.snmp]gawk.exe}
-@end example
-
-La versione appare essere la @value{PVERSION} 2.15.6, che @`e molto vecchia.
-Si raccomanda di compilare e usare la versione corrente.
-
@node Bug
@appendixsec Segnalazione di problemi e bug
@cindex archeologi
@@ -45100,44 +45955,170 @@ non c'@`e un impegno preciso a intervenire, ma c'@`e una buona possibilit@`a che
si sforzi di risolverlo.
@menu
-* Indirizzo Bug:: Dove inviare le segnalazioni.
+* Definizione di bug:: Definire cos'@`e e cosa non @`e un bug.
+* Indirizzo bug:: Dove notificare problemi.
* Usenet:: Dove non inviare le segnalazioni.
-* Manutentori:: Manutentori di version non-*nix.
+* Bug di prestazione:: Che fare in caso di problemi di prestazione.
+* Richieste di aiuto:: Gestire domande non relative ai bug.
+* Manutentori:: Manutentori di versioni non-Unix.
@end menu
-@node Indirizzo Bug
-@appendixsubsec Segnalare Bug
+@node Definizione di bug
+@appendixsubsec Definire cos'@`e e cosa non @`e un bug.
+
+Prima di spiegare come segnalare bug, definiamo cosa @`e un bug e
+cosa non lo @`e.
+
+Un bug @`e:
+
+@itemize @bullet
+@item
+Quando @command{gawk} si comporta diversamente da come previsto dallo
+standard POSIX standard, e la differenza non @`e descritta in questo
+@value{DOCUMENT} con il motivo per cui lo fa.
+
+@item
+Quando @command{gawk} si comporta diversamente da come descritto
+in questo @value{DOCUMENT}.
+
+@item
+Quando @command{gawk} si comporta diversamente da altre implementazioni di
+@command{awk} in qualche caso particolare, e tale comportamento non dipende
+da qualche ulteriore funzionalit@`a disponibile solo in @command{gawk}.
+
+@item
+Qualcosa di evidentemente sbagliato, come un @dfn{dump}, [ossia una
+fine programma inattesa con segnalazione di errore].
+
+@item
+Quando questo @value{DOCUMENT} @`e poco chiaro o ambiguo riguardo
+al modo di operare di una particolare funzionalit@`a.
+@end itemize
+
+La lista che segue elenca casi che @emph{non sono} bug e che non dovrebbero
+essere segnalati ala mailing list dei bug. Domande al riguardo possono
+essere rivolte alla mailing list di ``help''
+(@pxref{Richieste di aiuto}), ma non dovreste meravigliarvi di ricevere
+una risposta del tipo ``@command{gawk} funziona cos@`{@dotless{i}}, e continuer@`a
+a funzionare cos@`{@dotless{i}}.''
+
+@itemize @bullet
+@item
+Funzionalit@`a mancanti, quale che sia la definizione di @dfn{feature}.
+Per esempio, ulteriori funzioni aritmetiche predefinite, o modi
+ulteriori di dividere campi o record, o qualsiasi altra cosa.
+
+Il numero di funzioni che @command{gawk} @emph{non ha} @`e, per definizione,
+infinito. Non @`e possibile accontentare tutti.
+
+@item
+Comportamenti definiti dallo standard POSIX e/o dettati da compatibilit@`a
+storiche con il comando Unix @command{awk}. Anche se tali comportamenti
+possono risultare sgraditi, non saranno cambiati: se li si cambiasse
+milioni di programmi @command{awk} esistenti smetterebbero di funzionare.
+
+@item
+Comportamenti differenti da quel che succede usando altri linguaggi.
+@command{awk} e @command{gawk} hanno un modo di operare loro proprio,
+e non sono obbligati a seguire quello altrui.
+Ci@`o @`e particolarmente vero quando la modifica di comportamento
+richiesta farebbe perdere la compatibilit@`a all'indietro.
+
+@item
+Problemi di documentazioni nella forma ``il manuale non spiega come
+fare XYZ.'' Il manuale non @`e un libro con tutte le ricette per risolvere
+ogni piccolo problema che ci si trovi ad affrontare.
+
+@item
+Domande di tipo generale riguardo alla programmazione @command{awk}
+o sul motivo per cui @command{gawk} si comporta in un certo modo.
+Per tali domande si usi la mailing list ``help'':
+vedere @ref{Richieste di aiuto}.
+@end itemize
+
+Per ulteriori informazioni, vedere (in inglese)
+@uref{http://www.skeeve.com/fork-my-code.html,
+@cite{Fork My Code, Please!---An Open Letter To Those of You Who Are Unhappy}},
+di Arnold Robbins e Chet Ramey.
+
+@node Indirizzo bug
+@appendixsubsec Segnalare bug
Prima di segnalare un bug, occorre assicurarsi che sia davvero un bug.
-Per prima cosa, si deve verificare se si sta usando l'ultima versione di
-@command{gawk}.
+
+Questi @`e la procedura da seguire per sottomettere una segnalazione
+di bug. Rispettandola si semplificher@`a la vostra vita e quella dei
+manutentori di @command{gawk}.
+
+@enumerate 1
+@item
+Assicuratevi che quel che volete segnalare sia appropriato.
+@xref{Definizione di bug}. Se non lo @`e, state perdendo tempo e lo
+fate perdere a noi.
+
+@item
+Verificate di stare usando l'ultima versione di @command{gawk}.
Molti bug (di solito difficili da scoprire) sono corretti in ogni nuova
versione, e se la versione in uso @`e piuttosto datata, il problema pu@`o
essere stato risolto nel frattempo.
-In secondo luogo, si dovrebbe controllare se, con l'impostare la variabile
+@item
+Per piacere, controllate se, l'impostazione della variabile
@env{LC_ALL} come @code{LC_ALL=C} produce il funzionamento atteso da parte
del programma. Se @`e questo il caso, il problema dipende dalla
localizzazione, e pu@`o non essere veramente un bug.
-In terzo luogo, va riletta attentamente la documentazione,
+@item
+Rileggete attentamente la documentazione,
per controllare se dice che @`e possibile
fare quel che si sta tentando di fare. Se non @`e chiaro se sia possibile
fare quella particolare cosa o no, occorre segnalarlo; in questo caso si tratta
di un bug nella documentazione!
-Infine, prima
-di segnalare un bug o di tentare di risolverlo personalmente, si tenti
-di isolarlo preparando un programma @command{awk} il pi@`u piccolo possibile, con
-un @value{DF} in input che possa riprodurre il problema. Dopo averlo fatto, si
-spedisca il programma e il @value{DF}, insieme a informazioni sul tipo di
-sistema Unix in uso, il compilatore usato per compilare @command{gawk}, e i
-risultati esatti che @command{gawk} ha prodotto. Inoltre andrebbe specificato
-cosa ci si aspettava che il programma facesse; questo @`e di aiuto per decidere
-se il problema @`e un problema di documentazione.
-
-@`E importante includere il numero di versione di @command{gawk} in uso.
+@item
+Prima di segnalare un bug o di tentare di risolverlo personalmente, si tenti
+di isolarlo preparando un programma @command{awk} il pi@`u piccolo possibile,
+con un @value{DF} in input che possa riprodurre il problema.
+
+Dopo averlo fatto, si spedisca:
+
+@itemize @bullet
+@item
+il programma e il @value{DF}.
+
+@item
+Qualche informazioni sul tipo di sistema Unix in uso.
+
+@item
+Il compilatore usato per compilare @command{gawk},
+
+@item
+I risultati esatti che @command{gawk} ha prodotto. Inoltre andrebbe
+specificato cosa ci si aspettava che il programma facesse; questo @`e
+di aiuto per decidere se il problema @`e un problema di documentazione.
+
+@item
+Il numero di versione di @command{gawk} in uso.
Questa informazione si pu@`o ottenere con il comando @samp{gawk --version}.
+@end itemize
+
+@item
+@emph{Non} inviare immagini di videate. In alternativa, usate COPIA/INCOLLA
+per inviare testo, o per spedire file.
+
+@item
+Spedite file come allegati, invece che nel corpo del messaggio.
+Ci@`o evita la possibile corruzione del file da programmi di gestione
+della posta attraverso cui il messaggio transita in Internet.
+
+@item
+Accertatevi di spedire tutta la posta in formato @emph{testo},
+e non (o non soltanto) in formato HTML.
+
+@item
+@emph{Tutto il messaggio dev'essere in inglese. Questa @`e la sola
+lingua che tutti i manutentori comprendono.}
+@end enumerate
@cindex @code{bug-gawk@@gnu.org} indirizzo per la segnalazione dei bug
@cindex email @subentry indirizzo per segnalare bug @subentry @code{bug-gawk@@gnu.org}
@@ -45145,7 +46126,8 @@ Questa informazione si pu@`o ottenere con il comando @samp{gawk --version}.
@cindex bug @subentry segnalare @subentry indirizzo email, @code{bug-gawk@@gnu.org}
@cindex segnalare bug @subentry indirizzo email @subentry @code{bug-gawk@@gnu.org}
Una volta pronta la descrizione precisa del problema, si spedisca un messaggio
-di posta elettronica a @EMAIL{bug-gawk@@gnu.org,bug-gawk at gnu dot org}.
+di posta elettronica a
+@EMAIL{bug-gawk@@gnu.org,bug (trattino) gawk (chiocciola) gnu (punto) org}.
I manutentori di @command{gawk} sono i destinatari, e riceveranno la
segnalazione di errore. Sebbene sia possibile spedire messaggi direttamente ai
@@ -45159,7 +46141,8 @@ conoscono.} Inoltre, occorre accertarsi di spedire tutti i messaggi in formato
Molte distribuzioni di GNU/Linux e i vari sistemi operativi basati su
BSD hanno un loro proprio canale per segnalare i bug. Se si segnala un
bug usando il canale della distribuzione, una copia del messaggio andrebbe
-inviata anche a @EMAIL{bug-gawk@@gnu.org,bug-gawk at gnu dot org}.
+inviata anche a
+@EMAIL{bug-gawk@@gnu.org,bug (trattino) gawk (chiocciola) gnu (punto) org}.
Questo per due ragioni. La prima @`e che, sebbene alcune distribuzioni inoltrino
i messaggi sui problemi ``verso l'alto'' alla mailing list GNU, molte non lo
@@ -45170,11 +46153,6 @@ cosa all'interno del progetto GNU consente di avere a disposizione tutte le
informazioni rilevanti senza dover dipendere da altre organizzazioni.
@end quotation
-Suggerimenti non correlati a bug sono pure sempre benvenuti. Se si hanno
-domande riguardo a qualcosa di non chiaro nella documentazione o a proposito
-di funzionalit@`a oscure, si scriva alla mailing list dei bug; si prover@`a
-a essere di aiuto nei limiti del possibile.
-
Si tenga presente: Si chiede di seguire le
@uref{https://gnu.org/philosophy/kind-communication.html,
@dfn{GNU Kind Communication Guidelines}
@@ -45228,8 +46206,175 @@ and run to another section of the playground. Then, if you like mixing
metaphors, you can throw rocks from there."
@end ignore
+@node Bug di prestazione
+@appendixsubsec Che fare in caso di problemi di prestazione
+
+@cindex prestazione @subentry controllare problemi di
+@cindex segnalare bug @subentry solo dopo controlli
+@cindex compilare @command{gawk} per la profilazione
+@cindex profilare programmi @command{awk}
+@cindex profilazione @subentry in @command{gawk}
+Se si ritiene che @command{gawk} sia troppo lento nell'eseguire un
+particolare compito, si dovrebbe effettuare qualche indagine prima
+di segnalare un bug. Questi sono i passi da seguire:
+
+@enumerate 1
+@item
+Eseguire @command{gawk} specificando l'opzione @option{--profile}
+(@pxref{Opzioni}) per vedere cosa fa il programma in questione.
+Pu@`o darsi che sia stato scritto in maniera inefficiente.
+Per esempio, il programma potrebbe fare, per ogni record di un file,
+ci@`o che potrebbe essere fatto una volta sola per ogni file.
+(Per questo, si pu@`o usare una regola @code{BEGINFILE};
+@pxref{BEGINFILE/ENDFILE}.)
+Oppure si pu@`o fare qualcosa per ogni file che pu@`o essere
+fatto una volta solo per ogni esecuzione del programma.
+(Per questo si pu@`o usare una regola @code{BEGIN}; @pxref{BEGIN/END}.)
+
+@item
+Se la profilazione a livello di @command{awk} non @`e sufficiente
+a risolvere il problema, sar@`a necessario compilare lo stesso
+@command{gawk} per effettuare una profilazione a livello del
+linguaggio C.
+
+Per fare ci@`o, occorre partire dall'ultima versione rilasciata
+di @command{gawk}. Dopo aver scompattato il codice sorgente
+in una nuova directory, lo si configuri per fare questo:
+
+@example
+$ @kbd{tar -xpzvf gawk-X.Y.Z.tar.gz}
+@print{} @dots{} @ii{Output omesso}
+$ @kbd{cd gawk-X.Y.Z}
+$ @kbd{./configure}
+@print{} @dots{} @ii{Output omesso}
+@end example
+
+@item
+Dopo questo, vanno modificati i file @file{Makefile} e
+@file{support/Makefile}.
+Ogni ricorrenza di @option{-O2} o @option{-O} va cambiata
+in @option{-pg}.
+Ci@`o fa s@`{@dotless{i}} che @command{gawk} sar@`a poi compilato per la
+profilazione.
+
+@item
+Compilare il programma eseguendo il comando @command{make}:
+
+@example
+@group
+$ @kbd{make}
+@print{} @dots{} @ii{Output omesso}
+@end group
+@end example
+
+@item
+Eseguire, usando @command{gawk} cos@`{@dotless{i}} compilato un @emph{vero}
+programma, usando @emph{veri} dati. Usare un programma scritto solo per
+verificare il funzionamento di una particolare funzionalit@`a di
+@command{gawk} non serve a nulla; i veri programmi @command{awk} generalmente
+usano la maggior parte del tempo di esecuzione per fare I/O, non per fare
+calcoli. Per dimostrare che qualcosa @`e lento, si @emph{deve} farlo usando
+dati reali e un programma reale.
+
+Il file di dati da usare dev'essere abbastanza grosso da permettere alla
+profilazione statistica di misurare dove @command{gawk} impiega il
+tempo di esecuzione. La sua dimensione dovrebbe essere almeno 100 megabyte.
+
+@example
+$ @kbd{./gawk -f programma-reale.awk dati-reali > /dev/null}
+@end example
+
+@item
+Alla fine del test, dovreste trovare nella directory corrente un file
+di nome @file{gmon.out}. A quel punto va eseguito il comando
+@samp{gprof gawk gmon.out > gprof.out}.
+
+@item
+Inviare una segnalazione di bug spiegando cosa si pensa funzioni
+lentamente. Includere nella stessa il file @file{gprof.out}.
+
+Sarebbe preferibile poter disporre anche del programma e dei
+dati, oppure dell'indicazione di come reperire i dati se il
+relativo file @`e molto grande.
+
+@item
+Se non sono stati resi disponibile il programma e i dati, occorre essere
+preparati ad applicare delle @dfn{patch}, e a rifare la profilazione,
+per verificare se le @dfn{patch} hanno risolto il problema.
+
+@end enumerate
+
+Se non si @`e in grado di, o non si vuole, eseguire i passi sopra elencati,
+ci si deve rassegnare a vivere con il @command{gawk} disponibile.
+
+@node Richieste di aiuto
+@appendixsubsec Dove spedire richieste non relative a bug
+
+Se avete domande relative alla programmazione @command{awk}, o sul perch@'e
+@command{gawk} si comporta in un certo modo, o per qualsiasi altra domanda
+relativa ad @command{awk} o a @command{gawk},
+siete pregati di @emph{non} inviarle all'indirizzo che si usa per
+segnalare bug.
+
+A far data dal 21 luglio 2021, esiste una mailing list a parte
+creata proprio per tali casi:
+@EMAIL{help-gawk@@gnu.org, help (trattino) gawk (chiocciola) gnu (punto) org}.
+Tutto ci@`o che non @`e una segnalazione di bug andrebbe spedito
+a tale lista.
+
+@quotation NOTA
+Se non si rispettano queste regole, e si spediscono domande non realtive
+a bug alla mailing list dei bug, si verr@`a soltanto invitati a usare la
+mailing list dedicata alle richieste di aiuto.
+Dopo la seconda richiesta di queto tipo, sarete esclusi senza preavviso
+(@emph{blacklisted}) dalla lista di segnalazione dei bug.
+@end quotation
+
+Per piacere, tenete presente: Come per la mailing list dedicata
+alla segnalazione di bug, siete invitati a seguire le
+@uref{https://gnu.org/philosophy/kind-communication.html,
+-- Linee guida GNU per una comunicazione gentile}
+nella vostra corrispondenza (e anche in generale).
+
+@cindex Proulx, Bob
+Se volete far parte della lista di help, per essere di
+aiuto ad altri, o per imparare da altri, ecco le
+istruzioni per registrarsi, fornite da Bob Proulx:
+
+@table @emph
+@item Sottoscrizione via email
+
+Spedire un messaggio email a
+@EMAIL{help-gawk-request@@gnu.org, help (trattino) gawk (trattino) request (chiocciola) gnu (punto) org}
+con ``subscribe'' nel corpo del messaggio.
+L'argomento del messaggio non importa e non @`e usato.
+
+@item Sottoscrizione tramite formulario web
+
+Per usare l'interfacci web, visitare
+@uref{https://lists.gnu.org/mailman/listinfo/help-gawk,
+la pagina con le informazioni sulla lista}.
+Usare il formulario per la sottoscrizione, inserire il vostro
+indirizzo email e spedite usando il pulsante @code{Subscribe}.
+
+@item Rispondere al messaggio di conferma
+
+In entrambi i casi occorre rispondere al messaggio di conferma
+che viene spedito al vostro indirizzo email.
+@end table
+
+Bob fa anche presente che @`e possibile usare l'email sia
+per la sottoscrizione alla lista che per uscire dalla lista.
+Per esempio:
+
+@example
+$ @kbd{echo help | mailx -s request help-gawk-request@@gnu.org}
+$ @kbd{echo subscribe | mailx -s request help-gawk-request@@gnu.org}
+$ @kbd{echo unsubscribe | mailx -s request help-gawk-request@@gnu.org}
+@end example
+
@node Manutentori
-@appendixsubsec Notificare problemi per versioni non-Unix
+@appendixsubsec Manutentori di versioni non-Unix
Se si riscontrano bug in una delle versioni non-Unix di @command{gawk}, una
copia del messaggio inviato alla mailing list dei bug andrebbe spedita alla
@@ -45254,24 +46399,24 @@ Le persone che si occupano delle varie versioni di @command{gawk} sono:
@ifclear SMALLPRINT
@multitable {MS-Windows con MinGW} {123456789012345678901234567890123456789001234567890}
@end ifclear
-@item Unix e sistemi POSIX @tab Arnold Robbins, @EMAIL{arnold@@skeeve.com,arnold at skeeve dot com}
+@item Unix e sistemi POSIX @tab Arnold Robbins, @EMAIL{arnold@@skeeve.com,arnold (chiocciola) skeeve (punto) com}
-@item MS-DOS with DJGPP @tab Juan Manuel Guerrero, @EMAIL{juan.guerrero@@gmx.de, juan dot guerrero at gmx dot de}
+@item MS-DOS with DJGPP @tab Juan Manuel Guerrero, @EMAIL{juan.guerrero@@gmx.de, juan (punto) guerrero (chiocciola) gmx (punto) de}
-@item MS-Windows con MinGW @tab Eli Zaretskii, @EMAIL{eliz@@gnu.org,eliz at gnu dot org}
+@item MS-Windows con MinGW @tab Eli Zaretskii, @EMAIL{eliz@@gnu.org,eliz (chiocciola) gnu (punto) org}
@c Leave this in the document on purpose.
@c OS/2 is not mentioned anywhere else though.
-@item OS/2 @tab Andreas Buening, @EMAIL{andreas.buening@@nexgo.de,andreas dot buening at nexgo dot de}
+@item OS/2 @tab Andreas Buening, @EMAIL{andreas.buening@@nexgo.de,andreas (punto) buening (chiocciola) nexgo (punto) de}
-@item VMS @tab John Malmberg, @EMAIL{wb8tyw@@qsl.net,wb8tyw at qsl.net}
+@item VMS @tab John Malmberg, @EMAIL{wb8tyw@@qsl.net,wb8tyw (chiocciola) qsl (punto) net}
-@item z/OS (OS/390) @tab Daniel Richard G.@: @EMAIL{skunk@@iSKUNK.ORG,skunk at iSKUNK.ORG}
+@item z/OS (OS/390) @tab Daniel Richard G.@: @EMAIL{skunk@@iSKUNK.ORG,skunk (chiocciola) iSKUNK (punto) ORG}
@end multitable
Se il problema riscontrato @`e riproducibile anche sotto Unix,
si dovrebbe spedire una copia del messaggio anche alla mailing list
-@EMAIL{bug-gawk@@gnu.org,bug-gawk at gnu dot org}.
+@EMAIL{bug-gawk@@gnu.org,bug (trattino) gawk (chiocciola) gnu (punto) org}.
La versione generata usando gli strumenti DJGPP non @`e pi@`u supportata;
il codice relativo rester@`a nella distribuzione ancora per qualche tempo,
@@ -45312,7 +46457,14 @@ Date: Wed, 4 Sep 1996 08:11:48 -0700 (PDT)
Ci sono alcune altre implementazioni di @command{awk} disponibili
gratuitamente.
-Questa @value{SECTION} descrive in breve dove @`e possibile trovarle:
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+descrive in breve dove @`e possibile trovarle:
@table @asis
@cindex Kernighan, Brian
@@ -45400,8 +46552,8 @@ e prepara il codice eseguibile usando una libreria di funzioni che
implementano le funzionalit@`a di base di @command{awk}.
Comprende anche un certo numero di estensioni.
-Il traduttore di @command{awk} @`e rilasciato sotto la licenza GPL, e la
-relativa libreria sotto la licenza LGPL.
+Sia il traduttore di @command{awk} che la relativa libreria sono
+rilasciate sotto la licenza GPL.
Per ottenere @command{awka}, si visiti
il sito @url{https://sourceforge.net/projects/awka}.
@@ -45411,6 +46563,10 @@ il sito @url{https://sourceforge.net/projects/awka}.
Il progetto sembra essere stato congelato; non ci sono state modifiche nel
codice sorgente dal 2001 circa.
+@item Resuscitare Awka
+Questo progetto, disponibile nel sito @uref{https://github.com/noyesno/awka},
+si propone di fissare bug in @command{awka} e di aggiungere nuove funzionalit@`a.
+
@cindex Beebe, Nelson H.F.@:
@cindex @command{pawk} (versione con profilazione di Brian Kernighan @command{awk})
@cindex codice sorgente @subentry @command{pawk}
@@ -45464,6 +46620,17 @@ il progetto
mette a disposizione questa implementazione. Si possono vedere i singoli file in
@uref{https://github.com/joyent/illumos-joyent/blob/master/usr/src/cmd/awk_xpg4}.
+@cindex @command{frawk}
+@cindex sorgente @subentry codice @subentry @command{frawk}
+@cindex codice sorgente @subentry @command{frawk}
+@item @command{frawk}
+Questo @`e un linguaggio per scrivere programmi corti.
+``In prima approssimazione, @`e un'implementazione del linguaggio AWK;
+molti comuni programmi @command{awk} producono un output equivalente
+quando passati a @command{frawk}.'' Comunque, ha anche numerose e
+importanti funzionalit@`a ulteriori. Il codice sorgente @`e disponibile
+sul sito @uref{https://github.com/ezrosent/frawk}.
+
@cindex @command{goawk}
@cindex Go @subentry implementazione di @command{awk}
@cindex sorgente @subentry @command{goawk}
@@ -45490,7 +46657,13 @@ 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{https://jawk.sourceforge.net, pagina principale del progetto}.
+@uref{http://jawk.sourceforge.net, pagina principale del progetto}.
+
+@item Hoijui's @command{jawk}
+Questo progetto, disponibili sul sito
+@uref{https://github.com/hoijui/Jawk},
+@`e un altro interpretatore di @command{awk} scritto in Java.
+Usa i moderni strumenti di sviluppo software di Java.
@item Libmawk
@cindex @command{libmawk} (interpretatore)
@@ -45504,7 +46677,6 @@ Questo @`e un interprete @command{awk} incorporabile, derivato da
@cindex interpretatore @command{awk} incorporabile @subentry codice sorgente
@cindex Neacsu, Mircea
@item @command{awk} incorporabile di Mircea Neacsu
-@item incorporabile, @command{awk}, di Mircea Neacsu
Mircea Neacsu ha creato un interpretatore @command{awk}
incorporabile, basato su BWK @command{awk}. @`E disponibile
nel sito @uref{https://github.com/neacsum/awk}.
@@ -45549,6 +46721,9 @@ Wikipedia} su @command{awk} per informazioni su ulteriori versioni.
@end table
+Un'interessante raccolta di funzioni di libreria @`e disponibile sul sito
+@uref{https://github.com/e36freak/awk-libs}.
+
@node Sommario dell'installazione
@appendixsec Sommario
@@ -45577,16 +46752,30 @@ correntemente supportati sono MS-Windows, usando
MSYS, MSYS2, 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}.
+incluse in
+@ifnotinfo
+questa
+@end ifnotinfo
+@ifinfo
+questo
+@end ifinfo
+@value{APPENDIX}.
@item
Le segnalazioni di errori (bug) dovrebbero essere spedite tramite email a
-@email{bug-gawk@@gnu.org}. Le segnalazioni di errore dovrebbero essere scritte
+@EMAIL{bug-gawk@@gnu.org, bug (trattino) gawk (chiocciola) gnu (punto) org}.
+Le segnalazioni di errore dovrebbero essere scritte
in inglese e dovrebbero specificare la versione di @command{gawk} in uso, come
@`e stata compilata, un breve programma e un @value{DF} che permettono di
riprodurre il problema.
@item
+Messaggi che non riguardano bug vanno spediti a
+@EMAIL{help-gawk@@gnu.org, help (trattino) gawk (chiocciola) gnu (punto) org}.
+Chi spedisce pi@`u messaggi che non riguardano bug alla mailing list
+dei bug verr@`a escluso dalla stessa (@dfn{blacklisted}).
+
+@item
Ci sono alcune altre implementazioni di @command{awk} disponibili
gratuitamente. Molte rispettano lo standard POSIX; altre un po' meno.
@@ -45742,7 +46931,7 @@ attribuendo il copyright delle modifiche all'FSF.
Entrambe queste azioni sono semplici da fare, e @emph{molte} persone gi@`a
l'hanno fatto. Se ci sono domande da fare, mettersi in contatto con me
(@pxref{Bug}),
-oppure @EMAIL{assign@@gnu.org,assign chiocciola gnu punto org}.
+oppure @EMAIL{assign@@gnu.org,assign (chiocciola) gnu (punto) org}.
@item
Utilizzare l'ultima versione.
@@ -45928,7 +47117,8 @@ di pubblico dominio, tramite la firma di un documento apposito, oppure
attribuendo il copyright delle modifiche all'FSF.
Entrambe queste azioni sono semplici da fare, e @emph{molte} persone gi@`a
l'hanno fatto. Se ci sono domande da fare, scrivere a me
-oppure all'indirizzo @email{gnu@@gnu.org}.
+oppure all'indirizzo
+@EMAIL{gnu@@gnu.org, gnu (chiocciola) gnu (punto) org}.
@item
Nel realizzare un @dfn{port}, tener presente che il codice
@@ -46319,7 +47509,14 @@ sistemi operativi possono avere limiti differenti.
@node Progetto delle estensioni
@appendixsec Note di progetto dell'estensione API
-Questa @value{SECTION} documenta l'architettura dell'estensione API,
+@ifnotinfo
+Questa
+@end ifnotinfo
+@ifinfo
+Questo
+@end ifinfo
+@value{SECTION}
+documenta l'architettura dell'estensione API,
inclusa una trattazione sommaria della progettazione e dei problemi che
andavano risolti.
@@ -47291,9 +48488,9 @@ il record in input con un'espressione regolare.
@item Espressione logica
Un'espressione che usa gli operatori logici AND, OR e NOT,
-scritti come @samp{&&}, @samp{||}, e @samp{!} in @command{awk}.
-Spesso chiamate espressioni booleane, dal nome del matematico che per primo
-ha sistematizzato questo tipo di logica matematica.
+scritti come @samp{&&}, @samp{||} e @samp{!} in @command{awk}.
+Spesso chiamate @dfn{espressioni booleane}, dal nome del matematico che
+per primo ha sistematizzato questo tipo di logica matematica.
@item Espressione regolare
un'espressione regolare (abbreviabile come ``@dfn{regexp}'') @`e un modello che