From 628b917e92372b23c3a5db0a3f16dfa2128ffd65 Mon Sep 17 00:00:00 2001 From: Antonio Giovanni Colombo Date: Fri, 10 Feb 2023 08:54:16 +0100 Subject: dropped references to version 5.3 --- doc/it/ChangeLog | 4 ++++ doc/it/gawktexi.in | 21 --------------------- 2 files changed, 4 insertions(+), 21 deletions(-) (limited to 'doc') diff --git a/doc/it/ChangeLog b/doc/it/ChangeLog index 1dce5629..e0aed651 100755 --- a/doc/it/ChangeLog +++ b/doc/it/ChangeLog @@ -1,3 +1,7 @@ +2023-02-10 Antonio Giovanni Colombo + + * gawktexi.in: Updated. + 2023-02-07 Antonio Giovanni Colombo * gawktexi.in: Updated. diff --git a/doc/it/gawktexi.in b/doc/it/gawktexi.in index 2b172f7d..bfb9c4e3 100755 --- a/doc/it/gawktexi.in +++ b/doc/it/gawktexi.in @@ -45653,27 +45653,6 @@ persistente (PMA) @`e disponibile. @end itemize -La Versione 5.3 ha aggiunto le seguenti funzionalit@`a: - -@itemize -@item -Divisione di campi per i file CSV -[Campi Separati da Virgola] -(@pxref{Campi separati da virgola}). - -@item -La necessit@`a di utilizzare la libreria GNU @code{libsigsegv} -@`e stata rimossa da @command{gawk}. -Il valore aggiunto non @`e mai stato grande, e il suo utilizzo -creava problemi in alcuni sistemi operativi. - -@item -L'elemento @code{"pma"} nel vettore -@code{PROCINFO} -(@pxref{Variabili predefinite}). - -@end itemize - @c XXX ADD MORE STUFF HERE @end ifclear -- cgit v1.2.1 From 9a90db38b60a16259b5052231c189e78a00db364 Mon Sep 17 00:00:00 2001 From: Antonio Giovanni Colombo Date: Mon, 13 Feb 2023 11:54:41 +0100 Subject: noflush stuff update --- doc/it/ChangeLog | 4 +++ doc/it/gawktexi.in | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 91 insertions(+), 3 deletions(-) (limited to 'doc') diff --git a/doc/it/ChangeLog b/doc/it/ChangeLog index e0aed651..551f9d34 100755 --- a/doc/it/ChangeLog +++ b/doc/it/ChangeLog @@ -1,3 +1,7 @@ +2023-02-13 Antonio Giovanni Colombo + + * gawktexi.in: Updated. + 2023-02-10 Antonio Giovanni Colombo * gawktexi.in: Updated. diff --git a/doc/it/gawktexi.in b/doc/it/gawktexi.in index bfb9c4e3..f9b8ab21 100755 --- a/doc/it/gawktexi.in +++ b/doc/it/gawktexi.in @@ -56,9 +56,9 @@ @c applies to and all the info about who's publishing this edition @c These apply across the board. -@set UPDATE-MONTH Dicembre 2022 -@set VERSION 5.2 -@set PATCHLEVEL 2 +@set UPDATE-MONTH Febbraio 2023 +@set VERSION 5.3 +@set PATCHLEVEL 0 @c added Italian hyphenation stuff @hyphenation{ven-go-no o-met-te-re o-met-ten-do} @@ -772,6 +772,7 @@ Copyright dell'edizione italiana @copyright{} 2016 -- Free Software Foundation, @code{close()}. * Continuazione dopo errori:: Abilitare continuazione dopo errori in output. +* Noflush:: Velocizzare output da @dfn{pipe}. * Sommario di Output:: Sommario di Output. * Esercizi su Output:: Esercizi. * Valori:: Costanti, variabili ed espressioni @@ -10521,6 +10522,7 @@ e parla della funzione predefinita @code{close()}. file gi@`a aperti a inizio esecuzione * Chiusura file e @dfn{pipe}:: Chiudere file in input e di output e @dfn{pipe}. +* Noflush:: Velocizzare output da @dfn{pipe}. * Continuazione dopo errori:: Abilitare continuazione dopo errori in output. * Sommario di Output:: Sommario di Output. @@ -12138,8 +12140,63 @@ portabile. In modalit@`a POSIX (@pxref{Opzioni}), @command{gawk} restituisce solo zero quando chiude una @dfn{pipe}. +@node Noflush +@section Velocizzare output da @dfn{pipe} +@c FIXME: Add indexing + +Questa +@end ifnotinfo +@ifinfo +Questo +@end ifinfo +@value{SECTION} descrive una funzionalit@`a propria di @command{gawk}. + +Normalmente, quando si spediscono data tramite una @dfn{pipe} a +un comando, usando le istruzioni @code{print} o @code{printf}, +@command{gawk} scarica l'output verso la @dfn{pipe}. +Ovvero, l'output non @`e bufferizzato, ma scritto direttamente. +Ci@`o garantisce che l'output della @dfn{pipe}, insieme a quello +generato da @command{gawk} viene scritto enll'ordine che ci si +aspetta: + +@example +print "qualcosa" # va allo standard output +print "qualcos'altro" | "un-comando" # anche allo standard output +print "ulteriori cose" # come pure questo +@end example + +Fare ci@`o ha un prezzo; scaricare dati nella @dfn{pipe} usa +pi@`u tempo CPU, e in alcuni ambienti tale consumo pu@`o +essere eccessivo. + +Si pu@`o chiedere a @command{gawk} di non scaricare direttamente dati +ma di bufferizzarli, in uno dei seguenti due modi: + +@itemize @bullet +@item +Impostare @code{PROCINFO["BUFFERPIPE"]} a un valore qualsiasi. +Dopo aver fatto questo, @command{gawk} bufferizzer@`a i dati per tutte +le @dfn{pipe}. + +@item +Impostare @code{PROCINFO["@var{un-comando}", "BUFFERPIPE"]} a un +valore qualsiasi. In tal caso, solo i dati relativi al comando +@var{un-comando} saranno bufferizzati. +@end itemize + +Uno degli elementi visti sopra @emph{deve} essere impostato nel +vettore @code{PROCINFO} @emph{prima} di eseguire la prima istruzione +@code{print} o @code{printf} diretta alla @dfn{pipe}. +Se lo si fa dopo che dell'output @`e gi@`a stato inviato alla @dfn{pipe}, +@`e troppo tardi. + +Utilizzare questa funzionalit@`a pu@`o modificare il comportamento +dell'output [cambiando l'ordine di quel che viene stampato], +quindi occorre stare attenti a quello che si fa. + @node Continuazione dopo errori @section Abilitare continuazione dopo errori in output +@c FIXME: Add indexing @ifnotinfo Questa @@ -17675,6 +17732,14 @@ I seguenti elementi consentono di modificare il comportamento di @command{gawk}: @table @code +@item PROCINFO["BUFFERPIPE"] +Se questo elemento esiste, tutto l'output alla @dfn{pipe} viene +bufferizzato. + +@item PROCINFO["@var{un-comando}", "BUFFERPIPE"] +Rende bufferizzato l'output del comnado @var{un-comando}. +@xref{Noflush}. + @item PROCINFO["NONFATAL"] Se questo elemento esiste, gli errori di I/O per tutte le ridirezioni consentono la prosecuzione del programma. @@ -45653,6 +45718,25 @@ persistente (PMA) @`e disponibile. @end itemize +La versione 5.3 ha aggiunto le seguenti funzionalit@`a: + +@itemize +@item +Divisione in campi per file di tipo CSV (Campi separati da virgola) +(@pxref{Campi separati da virgola}). + +@item +La possibilit@`a che @command{gawk} bufferizzi l'output a @dfn{pipe} +(@pxref{Noflush}). + +@item +La necessit@`a di utilizzare la libreria GNU @code{libsigsegv} +@`e stata rimossa da @command{gawk}. +Il valore aggiunto relativo non @`e mai stato grande e la funzionalit@`a +causava problemi in alcuni sistemi. + +@end itemize + @c XXX ADD MORE STUFF HERE @end ifclear -- cgit v1.2.1 From 0a6ab36fe60438a4c98eb6f216efc3a6a9cf52d2 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 15 Feb 2023 08:43:31 +0200 Subject: Increment manual EDITION to 5.3. --- doc/ChangeLog | 5 +++++ doc/gawk.info | 4 ++-- doc/gawk.texi | 2 +- doc/gawktexi.in | 2 +- doc/it/ChangeLog | 5 +++++ doc/it/gawktexi.in | 2 +- 6 files changed, 15 insertions(+), 5 deletions(-) (limited to 'doc') diff --git a/doc/ChangeLog b/doc/ChangeLog index 00c0d93a..50fceabf 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2023-02-15 Arnold D. Robbins + + * gawktexi.in (EDITION): Bump to 5.3. Thanks to Antonio + Columbo for the suggestion. + 2023-02-10 Arnold D. Robbins * gawktexi.in (Noflush): New section. diff --git a/doc/gawk.info b/doc/gawk.info index 218f333c..cf431ede 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -4,7 +4,7 @@ Copyright © 1989, 1991, 1992, 1993, 1996–2005, 2007, 2009–2023 Free Software Foundation, Inc. - This is Edition 5.2 of ‘GAWK: Effective AWK Programming: A User’s + This is Edition 5.3 of ‘GAWK: Effective AWK Programming: A User’s Guide for GNU Awk’, for the 5.3.0 (or later) version of the GNU implementation of AWK. @@ -41,7 +41,7 @@ particular records in a file and perform operations upon them. Free Software Foundation, Inc. - This is Edition 5.2 of ‘GAWK: Effective AWK Programming: A User’s + This is Edition 5.3 of ‘GAWK: Effective AWK Programming: A User’s Guide for GNU Awk’, for the 5.3.0 (or later) version of the GNU implementation of AWK. diff --git a/doc/gawk.texi b/doc/gawk.texi index 85ccc261..89eba149 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -73,7 +73,7 @@ @set TITLE GAWK: Effective AWK Programming @end ifclear @set SUBTITLE A User's Guide for GNU Awk -@set EDITION 5.2 +@set EDITION 5.3 @iftex @set DOCUMENT book diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 951c118f..b1f961b3 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -68,7 +68,7 @@ @set TITLE GAWK: Effective AWK Programming @end ifclear @set SUBTITLE A User's Guide for GNU Awk -@set EDITION 5.2 +@set EDITION 5.3 @iftex @set DOCUMENT book diff --git a/doc/it/ChangeLog b/doc/it/ChangeLog index 551f9d34..09ec4a8a 100755 --- a/doc/it/ChangeLog +++ b/doc/it/ChangeLog @@ -1,3 +1,8 @@ +2023-02-15 Arnold D. Robbins + + * gawktexi.in (EDITION): Bump to 5.3. Thanks to Antonio + Columbo for the suggestion. + 2023-02-13 Antonio Giovanni Colombo * gawktexi.in: Updated. diff --git a/doc/it/gawktexi.in b/doc/it/gawktexi.in index f9b8ab21..47e7d98a 100755 --- a/doc/it/gawktexi.in +++ b/doc/it/gawktexi.in @@ -73,7 +73,7 @@ @set TITLE GAWK: Programmare efficacemente in AWK @end ifclear @set SUBTITLE Una Guida Utente per GNU Awk -@set EDITION 5.2 +@set EDITION 5.3 @iftex @set DOCUMENT libro -- cgit v1.2.1 From a908e81a6b4a41116e3268a915449881c9982209 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 24 Feb 2023 10:30:56 +0200 Subject: Small doc fix. --- doc/ChangeLog | 4 ++ doc/gawk.info | 150 ++++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 4 ++ doc/gawktexi.in | 4 ++ 4 files changed, 88 insertions(+), 74 deletions(-) (limited to 'doc') diff --git a/doc/ChangeLog b/doc/ChangeLog index 4e4c1b14..076f60f6 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2023-02-24 Arnold D. Robbins + + * gawktexi.in (Feature History): Add note about nonfatal I/O. + 2023-02-05 Arnold D. Robbins * texinfo.tex: Update from GNULIB. Only change is to remove diff --git a/doc/gawk.info b/doc/gawk.info index 3bd67bea..2355ded3 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -30552,6 +30552,8 @@ POSIX ‘awk’, in the order they were added to ‘gawk’. • Redirected ‘getline’ became allowed inside ‘BEGINFILE’ and ‘ENDFILE’ (*note BEGINFILE/ENDFILE::). + • Support for nonfatal I/O (*note Nonfatal::). + • The ‘where’ command was added to the debugger (*note Execution Stack::). @@ -37865,7 +37867,7 @@ Index * Kasal, Stepan: Acknowledgments. (line 60) * Kelly, Terence: Persistent Memory. (line 76) * Kelly, Terence <1>: Persistent Memory. (line 127) -* Kelly, Terence <2>: Feature History. (line 508) +* Kelly, Terence <2>: Feature History. (line 510) * Kenobi, Obi-Wan: Undocumented. (line 6) * Kernighan, Brian: History. (line 17) * Kernighan, Brian, quotes: Conventions. (line 38) @@ -39827,79 +39829,79 @@ Node: POSIX1255480 Node: BTL1256905 Node: POSIX/GNU1257674 Node: Feature History1264205 -Node: Common Extensions1283270 -Node: Ranges and Locales1284639 -Ref: Ranges and Locales-Footnote-11289440 -Ref: Ranges and Locales-Footnote-21289467 -Ref: Ranges and Locales-Footnote-31289706 -Node: Contributors1289929 -Node: History summary1296134 -Node: Installation1297580 -Node: Gawk Distribution1298544 -Node: Getting1299036 -Node: Extracting1300035 -Node: Distribution contents1301747 -Node: Unix Installation1309827 -Node: Quick Installation1310649 -Node: Compiling with MPFR1313195 -Node: Shell Startup Files1313901 -Node: Additional Configuration Options1315058 -Node: Configuration Philosophy1317445 -Node: Compiling from Git1319947 -Node: Building the Documentation1320506 -Node: Non-Unix Installation1321918 -Node: PC Installation1322394 -Node: PC Binary Installation1323267 -Node: PC Compiling1324172 -Node: PC Using1325350 -Node: Cygwin1329078 -Node: MSYS1330334 -Node: OpenVMS Installation1330966 -Node: OpenVMS Compilation1331647 -Ref: OpenVMS Compilation-Footnote-11333130 -Node: OpenVMS Dynamic Extensions1333192 -Node: OpenVMS Installation Details1334828 -Node: OpenVMS Running1337263 -Node: OpenVMS GNV1341400 -Node: Bugs1342155 -Node: Bug definition1343079 -Node: Bug address1346730 -Node: Usenet1350321 -Node: Performance bugs1351552 -Node: Asking for help1354570 -Node: Maintainers1356561 -Node: Other Versions1357588 -Node: Installation summary1366520 -Node: Notes1367904 -Node: Compatibility Mode1368714 -Node: Additions1369536 -Node: Accessing The Source1370481 -Node: Adding Code1372016 -Node: New Ports1379152 -Node: Derived Files1383662 -Ref: Derived Files-Footnote-11389509 -Ref: Derived Files-Footnote-21389544 -Ref: Derived Files-Footnote-31390161 -Node: Future Extensions1390275 -Node: Implementation Limitations1390947 -Node: Extension Design1392189 -Node: Old Extension Problems1393353 -Ref: Old Extension Problems-Footnote-11394929 -Node: Extension New Mechanism Goals1394990 -Ref: Extension New Mechanism Goals-Footnote-11398486 -Node: Extension Other Design Decisions1398687 -Node: Extension Future Growth1400886 -Node: Notes summary1401510 -Node: Basic Concepts1402723 -Node: Basic High Level1403408 -Ref: figure-general-flow1403690 -Ref: figure-process-flow1404392 -Ref: Basic High Level-Footnote-11407788 -Node: Basic Data Typing1407977 -Node: Glossary1411395 -Node: Copying1444517 -Node: GNU Free Documentation License1482278 -Node: Index1507601 +Node: Common Extensions1283323 +Node: Ranges and Locales1284692 +Ref: Ranges and Locales-Footnote-11289493 +Ref: Ranges and Locales-Footnote-21289520 +Ref: Ranges and Locales-Footnote-31289759 +Node: Contributors1289982 +Node: History summary1296187 +Node: Installation1297633 +Node: Gawk Distribution1298597 +Node: Getting1299089 +Node: Extracting1300088 +Node: Distribution contents1301800 +Node: Unix Installation1309880 +Node: Quick Installation1310702 +Node: Compiling with MPFR1313248 +Node: Shell Startup Files1313954 +Node: Additional Configuration Options1315111 +Node: Configuration Philosophy1317498 +Node: Compiling from Git1320000 +Node: Building the Documentation1320559 +Node: Non-Unix Installation1321971 +Node: PC Installation1322447 +Node: PC Binary Installation1323320 +Node: PC Compiling1324225 +Node: PC Using1325403 +Node: Cygwin1329131 +Node: MSYS1330387 +Node: OpenVMS Installation1331019 +Node: OpenVMS Compilation1331700 +Ref: OpenVMS Compilation-Footnote-11333183 +Node: OpenVMS Dynamic Extensions1333245 +Node: OpenVMS Installation Details1334881 +Node: OpenVMS Running1337316 +Node: OpenVMS GNV1341453 +Node: Bugs1342208 +Node: Bug definition1343132 +Node: Bug address1346783 +Node: Usenet1350374 +Node: Performance bugs1351605 +Node: Asking for help1354623 +Node: Maintainers1356614 +Node: Other Versions1357641 +Node: Installation summary1366573 +Node: Notes1367957 +Node: Compatibility Mode1368767 +Node: Additions1369589 +Node: Accessing The Source1370534 +Node: Adding Code1372069 +Node: New Ports1379205 +Node: Derived Files1383715 +Ref: Derived Files-Footnote-11389562 +Ref: Derived Files-Footnote-21389597 +Ref: Derived Files-Footnote-31390214 +Node: Future Extensions1390328 +Node: Implementation Limitations1391000 +Node: Extension Design1392242 +Node: Old Extension Problems1393406 +Ref: Old Extension Problems-Footnote-11394982 +Node: Extension New Mechanism Goals1395043 +Ref: Extension New Mechanism Goals-Footnote-11398539 +Node: Extension Other Design Decisions1398740 +Node: Extension Future Growth1400939 +Node: Notes summary1401563 +Node: Basic Concepts1402776 +Node: Basic High Level1403461 +Ref: figure-general-flow1403743 +Ref: figure-process-flow1404445 +Ref: Basic High Level-Footnote-11407841 +Node: Basic Data Typing1408030 +Node: Glossary1411448 +Node: Copying1444570 +Node: GNU Free Documentation License1482331 +Node: Index1507654  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 07afa6b4..c4337378 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -41871,6 +41871,10 @@ Redirected @code{getline} became allowed inside @code{BEGINFILE} and @code{ENDFILE} (@pxref{BEGINFILE/ENDFILE}). +@item +Support for nonfatal I/O +(@pxref{Nonfatal}). + @item The @code{where} command was added to the debugger (@pxref{Execution Stack}). diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 158395b4..47657013 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -40787,6 +40787,10 @@ Redirected @code{getline} became allowed inside @code{BEGINFILE} and @code{ENDFILE} (@pxref{BEGINFILE/ENDFILE}). +@item +Support for nonfatal I/O +(@pxref{Nonfatal}). + @item The @code{where} command was added to the debugger (@pxref{Execution Stack}). -- cgit v1.2.1 From 8133998472020a37adf420710fc2d5358de92840 Mon Sep 17 00:00:00 2001 From: Antonio Giovanni Colombo Date: Fri, 24 Feb 2023 18:59:55 +0100 Subject: update for non fatal I/O --- doc/it/ChangeLog | 4 ++++ doc/it/gawktexi.in | 4 ++++ 2 files changed, 8 insertions(+) (limited to 'doc') diff --git a/doc/it/ChangeLog b/doc/it/ChangeLog index 09ec4a8a..42990002 100755 --- a/doc/it/ChangeLog +++ b/doc/it/ChangeLog @@ -1,3 +1,7 @@ +2023-02-24 Antonio Giovanni Colombo + + * gawktexi.in: Updated. + 2023-02-15 Arnold D. Robbins * gawktexi.in (EDITION): Bump to 5.3. Thanks to Antonio diff --git a/doc/it/gawktexi.in b/doc/it/gawktexi.in index 47e7d98a..9d9ba4ec 100755 --- a/doc/it/gawktexi.in +++ b/doc/it/gawktexi.in @@ -45489,6 +45489,10 @@ La funzione @code{getline} ridiretta @`e stata resa possibile all'interno di @code{BEGINFILE} ed @code{ENDFILE} (@pxref{BEGINFILE/ENDFILE}). +@item +Supporto per continuare dopo errori di I/O non fatali +@xref{Continuazione dopo errori}. + @item Il comando @code{where} @`e stato aggiunto al debugger (@pxref{Stack di esecuzione}). -- cgit v1.2.1 From c419ea07ec452effc347c089350202a3d9151bcc Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sat, 25 Feb 2023 20:41:56 +0200 Subject: Improve the doc on input parsers. --- doc/ChangeLog | 4 + doc/gawk.info | 305 ++++++++++++++++++++++++++++---------------------------- doc/gawk.texi | 23 +++-- doc/gawktexi.in | 23 +++-- 4 files changed, 184 insertions(+), 171 deletions(-) (limited to 'doc') diff --git a/doc/ChangeLog b/doc/ChangeLog index 076f60f6..cc2b35da 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2023-02-25 Arnold D. Robbins + + * gawktexi.in (Input Parsers): Clarify and improve some of the prose. + 2023-02-24 Arnold D. Robbins * gawktexi.in (Feature History): Add note about nonfatal I/O. diff --git a/doc/gawk.info b/doc/gawk.info index 2355ded3..a1e6043a 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -26647,9 +26647,10 @@ File: gawk.info, Node: Input Parsers, Next: Output Wrappers, Prev: Extension ................................. By default, ‘gawk’ reads text files as its input. It uses the value of -‘RS’ to find the end of the record, and then uses ‘FS’ (or ‘FIELDWIDTHS’ -or ‘FPAT’) to split it into fields (*note Reading Files::). -Additionally, it sets the value of ‘RT’ (*note Built-in Variables::). +‘RS’ to find the end of an input record, and then uses ‘FS’ (or +‘FIELDWIDTHS’ or ‘FPAT’) to split it into fields (*note Reading +Files::). Additionally, it sets the value of ‘RT’ (*note Built-in +Variables::). If you want, you can provide your own custom input parser. An input parser’s job is to return a record to the ‘gawk’ record-processing code, @@ -26733,8 +26734,9 @@ as follows: The name of the file. ‘int fd;’ - A file descriptor for the file. If ‘gawk’ was able to open the - file, then ‘fd’ will _not_ be equal to ‘INVALID_HANDLE’. + A file descriptor for the file. ‘gawk’ attempts to open the file + for reading using the ‘open()’ system call. If it was able to open + the file, then ‘fd’ will _not_ be equal to ‘INVALID_HANDLE’. Otherwise, it will. ‘struct stat sbuf;’ @@ -26795,13 +26797,13 @@ records. The parameters are as follows: ‘char **out’ This is a pointer to a ‘char *’ variable that is set to point to - the record. ‘gawk’ makes its own copy of the data, so the + the record. ‘gawk’ makes its own copy of the data, so your extension must manage this storage. ‘struct awk_input *iobuf’ - This is the ‘awk_input_buf_t’ for the file. The fields should be - used for reading data (‘fd’) and for managing private state - (‘opaque’), if any. + This is the ‘awk_input_buf_t’ for the file. Two of its fields + should be used by your extension: ‘fd’ for reading data, and + ‘opaque’ for managing any private state. ‘int *errcode’ If an error occurs, ‘*errcode’ should be set to an appropriate code @@ -26812,8 +26814,8 @@ records. The parameters are as follows: If the concept of a “record terminator” makes sense, then ‘*rt_start’ should be set to point to the data to be used for ‘RT’, and ‘*rt_len’ should be set to the length of the data. Otherwise, - ‘*rt_len’ should be set to zero. ‘gawk’ makes its own copy of this - data, so the extension must manage this storage. + ‘*rt_len’ should be set to zero. Here too, ‘gawk’ makes its own + copy of this data, so your extension must manage this storage. ‘const awk_fieldwidth_info_t **field_width’ If ‘field_width’ is not ‘NULL’, then ‘*field_width’ will be @@ -26823,11 +26825,12 @@ records. The parameters are as follows: copied by ‘gawk’; it must persist at least until the next call to ‘get_record’ or ‘close_func’. Note also that ‘field_width’ is ‘NULL’ when ‘getline’ is assigning the results to a variable, thus - field parsing is not needed. If the parser does set - ‘*field_width’, then ‘gawk’ uses this layout to parse the input - record, and the ‘PROCINFO["FS"]’ value will be ‘"API"’ while this - record is active in ‘$0’. The ‘awk_fieldwidth_info_t’ data - structure is described below. + field parsing is not needed. + + If the parser sets ‘*field_width’, then ‘gawk’ uses this layout to + parse the input record, and the ‘PROCINFO["FS"]’ value will be + ‘"API"’ while this record is active in ‘$0’. The + ‘awk_fieldwidth_info_t’ data structure is described below. The return value is the length of the buffer pointed to by ‘*out’, or ‘EOF’ if end-of-file was reached or an error occurred. @@ -26871,7 +26874,7 @@ extension does). Or you may want it to take effect based upon the value of an ‘awk’ variable, as the XML extension from the ‘gawkextlib’ project does (*note gawkextlib::). In the latter case, code in a ‘BEGINFILE’ rule can look at ‘FILENAME’ and ‘ERRNO’ to decide whether or not to -activate an input parser (*note BEGINFILE/ENDFILE::). +activate your input parser (*note BEGINFILE/ENDFILE::). You register your input parser with the following function: @@ -39768,140 +39771,140 @@ Node: Extension Functions1112908 Node: Exit Callback Functions1118484 Node: Extension Version String1119803 Node: Input Parsers1120498 -Node: Output Wrappers1133872 -Node: Two-way processors1138580 -Node: Printing Messages1140941 -Ref: Printing Messages-Footnote-11142155 -Node: Updating ERRNO1142310 -Node: Requesting Values1143109 -Ref: table-value-types-returned1143862 -Node: Accessing Parameters1144971 -Node: Symbol Table Access1146255 -Node: Symbol table by name1146771 -Ref: Symbol table by name-Footnote-11149982 -Node: Symbol table by cookie1150114 -Ref: Symbol table by cookie-Footnote-11154395 -Node: Cached values1154459 -Ref: Cached values-Footnote-11158103 -Node: Array Manipulation1158260 -Ref: Array Manipulation-Footnote-11159363 -Node: Array Data Types1159400 -Ref: Array Data Types-Footnote-11162222 -Node: Array Functions1162322 -Node: Flattening Arrays1167351 -Node: Creating Arrays1174403 -Node: Redirection API1179253 -Node: Extension API Variables1182274 -Node: Extension Versioning1182999 -Ref: gawk-api-version1183436 -Node: Extension GMP/MPFR Versioning1185224 -Node: Extension API Informational Variables1186930 -Node: Extension API Boilerplate1188091 -Node: Changes from API V11192227 -Node: Finding Extensions1193861 -Node: Extension Example1194436 -Node: Internal File Description1195260 -Node: Internal File Ops1199584 -Ref: Internal File Ops-Footnote-11211142 -Node: Using Internal File Ops1211290 -Ref: Using Internal File Ops-Footnote-11213721 -Node: Extension Samples1213999 -Node: Extension Sample File Functions1215568 -Node: Extension Sample Fnmatch1223706 -Node: Extension Sample Fork1225301 -Node: Extension Sample Inplace1226577 -Node: Extension Sample Ord1230249 -Node: Extension Sample Readdir1231125 -Ref: table-readdir-file-types1232022 -Node: Extension Sample Revout1233160 -Node: Extension Sample Rev2way1233757 -Node: Extension Sample Read write array1234509 -Node: Extension Sample Readfile1237783 -Node: Extension Sample Time1238914 -Node: Extension Sample API Tests1241204 -Node: gawkextlib1241712 -Node: Extension summary1244748 -Node: Extension Exercises1248606 -Node: Language History1249884 -Node: V7/SVR3.11251598 -Node: SVR41253948 -Node: POSIX1255480 -Node: BTL1256905 -Node: POSIX/GNU1257674 -Node: Feature History1264205 -Node: Common Extensions1283323 -Node: Ranges and Locales1284692 -Ref: Ranges and Locales-Footnote-11289493 -Ref: Ranges and Locales-Footnote-21289520 -Ref: Ranges and Locales-Footnote-31289759 -Node: Contributors1289982 -Node: History summary1296187 -Node: Installation1297633 -Node: Gawk Distribution1298597 -Node: Getting1299089 -Node: Extracting1300088 -Node: Distribution contents1301800 -Node: Unix Installation1309880 -Node: Quick Installation1310702 -Node: Compiling with MPFR1313248 -Node: Shell Startup Files1313954 -Node: Additional Configuration Options1315111 -Node: Configuration Philosophy1317498 -Node: Compiling from Git1320000 -Node: Building the Documentation1320559 -Node: Non-Unix Installation1321971 -Node: PC Installation1322447 -Node: PC Binary Installation1323320 -Node: PC Compiling1324225 -Node: PC Using1325403 -Node: Cygwin1329131 -Node: MSYS1330387 -Node: OpenVMS Installation1331019 -Node: OpenVMS Compilation1331700 -Ref: OpenVMS Compilation-Footnote-11333183 -Node: OpenVMS Dynamic Extensions1333245 -Node: OpenVMS Installation Details1334881 -Node: OpenVMS Running1337316 -Node: OpenVMS GNV1341453 -Node: Bugs1342208 -Node: Bug definition1343132 -Node: Bug address1346783 -Node: Usenet1350374 -Node: Performance bugs1351605 -Node: Asking for help1354623 -Node: Maintainers1356614 -Node: Other Versions1357641 -Node: Installation summary1366573 -Node: Notes1367957 -Node: Compatibility Mode1368767 -Node: Additions1369589 -Node: Accessing The Source1370534 -Node: Adding Code1372069 -Node: New Ports1379205 -Node: Derived Files1383715 -Ref: Derived Files-Footnote-11389562 -Ref: Derived Files-Footnote-21389597 -Ref: Derived Files-Footnote-31390214 -Node: Future Extensions1390328 -Node: Implementation Limitations1391000 -Node: Extension Design1392242 -Node: Old Extension Problems1393406 -Ref: Old Extension Problems-Footnote-11394982 -Node: Extension New Mechanism Goals1395043 -Ref: Extension New Mechanism Goals-Footnote-11398539 -Node: Extension Other Design Decisions1398740 -Node: Extension Future Growth1400939 -Node: Notes summary1401563 -Node: Basic Concepts1402776 -Node: Basic High Level1403461 -Ref: figure-general-flow1403743 -Ref: figure-process-flow1404445 -Ref: Basic High Level-Footnote-11407841 -Node: Basic Data Typing1408030 -Node: Glossary1411448 -Node: Copying1444570 -Node: GNU Free Documentation License1482331 -Node: Index1507654 +Node: Output Wrappers1133990 +Node: Two-way processors1138698 +Node: Printing Messages1141059 +Ref: Printing Messages-Footnote-11142273 +Node: Updating ERRNO1142428 +Node: Requesting Values1143227 +Ref: table-value-types-returned1143980 +Node: Accessing Parameters1145089 +Node: Symbol Table Access1146373 +Node: Symbol table by name1146889 +Ref: Symbol table by name-Footnote-11150100 +Node: Symbol table by cookie1150232 +Ref: Symbol table by cookie-Footnote-11154513 +Node: Cached values1154577 +Ref: Cached values-Footnote-11158221 +Node: Array Manipulation1158378 +Ref: Array Manipulation-Footnote-11159481 +Node: Array Data Types1159518 +Ref: Array Data Types-Footnote-11162340 +Node: Array Functions1162440 +Node: Flattening Arrays1167469 +Node: Creating Arrays1174521 +Node: Redirection API1179371 +Node: Extension API Variables1182392 +Node: Extension Versioning1183117 +Ref: gawk-api-version1183554 +Node: Extension GMP/MPFR Versioning1185342 +Node: Extension API Informational Variables1187048 +Node: Extension API Boilerplate1188209 +Node: Changes from API V11192345 +Node: Finding Extensions1193979 +Node: Extension Example1194554 +Node: Internal File Description1195378 +Node: Internal File Ops1199702 +Ref: Internal File Ops-Footnote-11211260 +Node: Using Internal File Ops1211408 +Ref: Using Internal File Ops-Footnote-11213839 +Node: Extension Samples1214117 +Node: Extension Sample File Functions1215686 +Node: Extension Sample Fnmatch1223824 +Node: Extension Sample Fork1225419 +Node: Extension Sample Inplace1226695 +Node: Extension Sample Ord1230367 +Node: Extension Sample Readdir1231243 +Ref: table-readdir-file-types1232140 +Node: Extension Sample Revout1233278 +Node: Extension Sample Rev2way1233875 +Node: Extension Sample Read write array1234627 +Node: Extension Sample Readfile1237901 +Node: Extension Sample Time1239032 +Node: Extension Sample API Tests1241322 +Node: gawkextlib1241830 +Node: Extension summary1244866 +Node: Extension Exercises1248724 +Node: Language History1250002 +Node: V7/SVR3.11251716 +Node: SVR41254066 +Node: POSIX1255598 +Node: BTL1257023 +Node: POSIX/GNU1257792 +Node: Feature History1264323 +Node: Common Extensions1283441 +Node: Ranges and Locales1284810 +Ref: Ranges and Locales-Footnote-11289611 +Ref: Ranges and Locales-Footnote-21289638 +Ref: Ranges and Locales-Footnote-31289877 +Node: Contributors1290100 +Node: History summary1296305 +Node: Installation1297751 +Node: Gawk Distribution1298715 +Node: Getting1299207 +Node: Extracting1300206 +Node: Distribution contents1301918 +Node: Unix Installation1309998 +Node: Quick Installation1310820 +Node: Compiling with MPFR1313366 +Node: Shell Startup Files1314072 +Node: Additional Configuration Options1315229 +Node: Configuration Philosophy1317616 +Node: Compiling from Git1320118 +Node: Building the Documentation1320677 +Node: Non-Unix Installation1322089 +Node: PC Installation1322565 +Node: PC Binary Installation1323438 +Node: PC Compiling1324343 +Node: PC Using1325521 +Node: Cygwin1329249 +Node: MSYS1330505 +Node: OpenVMS Installation1331137 +Node: OpenVMS Compilation1331818 +Ref: OpenVMS Compilation-Footnote-11333301 +Node: OpenVMS Dynamic Extensions1333363 +Node: OpenVMS Installation Details1334999 +Node: OpenVMS Running1337434 +Node: OpenVMS GNV1341571 +Node: Bugs1342326 +Node: Bug definition1343250 +Node: Bug address1346901 +Node: Usenet1350492 +Node: Performance bugs1351723 +Node: Asking for help1354741 +Node: Maintainers1356732 +Node: Other Versions1357759 +Node: Installation summary1366691 +Node: Notes1368075 +Node: Compatibility Mode1368885 +Node: Additions1369707 +Node: Accessing The Source1370652 +Node: Adding Code1372187 +Node: New Ports1379323 +Node: Derived Files1383833 +Ref: Derived Files-Footnote-11389680 +Ref: Derived Files-Footnote-21389715 +Ref: Derived Files-Footnote-31390332 +Node: Future Extensions1390446 +Node: Implementation Limitations1391118 +Node: Extension Design1392360 +Node: Old Extension Problems1393524 +Ref: Old Extension Problems-Footnote-11395100 +Node: Extension New Mechanism Goals1395161 +Ref: Extension New Mechanism Goals-Footnote-11398657 +Node: Extension Other Design Decisions1398858 +Node: Extension Future Growth1401057 +Node: Notes summary1401681 +Node: Basic Concepts1402894 +Node: Basic High Level1403579 +Ref: figure-general-flow1403861 +Ref: figure-process-flow1404563 +Ref: Basic High Level-Footnote-11407959 +Node: Basic Data Typing1408148 +Node: Glossary1411566 +Node: Copying1444688 +Node: GNU Free Documentation License1482449 +Node: Index1507772  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index c4337378..15c343f0 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -36855,7 +36855,7 @@ is invoked with the @option{--version} option. @cindex customized input parser By default, @command{gawk} reads text files as its input. It uses the value -of @code{RS} to find the end of the record, and then uses @code{FS} +of @code{RS} to find the end of an input record, and then uses @code{FS} (or @code{FIELDWIDTHS} or @code{FPAT}) to split it into fields (@pxref{Reading Files}). Additionally, it sets the value of @code{RT} (@pxref{Built-in Variables}). @@ -36957,8 +36957,9 @@ are as follows: The name of the file. @item int fd; -A file descriptor for the file. If @command{gawk} was able to -open the file, then @code{fd} will @emph{not} be equal to +A file descriptor for the file. @command{gawk} attempts to open +the file for reading using the @code{open()} system call. If it was +able to open the file, then @code{fd} will @emph{not} be equal to @code{INVALID_HANDLE}. Otherwise, it will. @item struct stat sbuf; @@ -37026,12 +37027,12 @@ input records. The parameters are as follows: @item char **out This is a pointer to a @code{char *} variable that is set to point to the record. @command{gawk} makes its own copy of the data, so -the extension must manage this storage. +your extension must manage this storage. @item struct awk_input *iobuf -This is the @code{awk_input_buf_t} for the file. The fields should be -used for reading data (@code{fd}) and for managing private state -(@code{opaque}), if any. +This is the @code{awk_input_buf_t} for the file. Two of its fields should +be used by your extension: @code{fd} for reading data, and @code{opaque} +for managing any private state. @item int *errcode If an error occurs, @code{*errcode} should be set to an appropriate @@ -37043,7 +37044,7 @@ If the concept of a ``record terminator'' makes sense, then @code{*rt_start} should be set to point to the data to be used for @code{RT}, and @code{*rt_len} should be set to the length of the data. Otherwise, @code{*rt_len} should be set to zero. -@command{gawk} makes its own copy of this data, so the +Here too, @command{gawk} makes its own copy of this data, so your extension must manage this storage. @item const awk_fieldwidth_info_t **field_width @@ -37054,7 +37055,9 @@ field parsing mechanism. Note that this structure will not be copied by @command{gawk}; it must persist at least until the next call to @code{get_record} or @code{close_func}. Note also that @code{field_width} is @code{NULL} when @code{getline} is assigning the results to a variable, thus -field parsing is not needed. If the parser does set @code{*field_width}, +field parsing is not needed. + +If the parser sets @code{*field_width}, then @command{gawk} uses this layout to parse the input record, and the @code{PROCINFO["FS"]} value will be @code{"API"} while this record is active in @code{$0}. @@ -37108,7 +37111,7 @@ based upon the value of an @command{awk} variable, as the XML extension from the @code{gawkextlib} project does (@pxref{gawkextlib}). In the latter case, code in a @code{BEGINFILE} rule can look at @code{FILENAME} and @code{ERRNO} to decide whether or -not to activate an input parser (@pxref{BEGINFILE/ENDFILE}). +not to activate your input parser (@pxref{BEGINFILE/ENDFILE}). You register your input parser with the following function: diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 47657013..5e1affc9 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -35771,7 +35771,7 @@ is invoked with the @option{--version} option. @cindex customized input parser By default, @command{gawk} reads text files as its input. It uses the value -of @code{RS} to find the end of the record, and then uses @code{FS} +of @code{RS} to find the end of an input record, and then uses @code{FS} (or @code{FIELDWIDTHS} or @code{FPAT}) to split it into fields (@pxref{Reading Files}). Additionally, it sets the value of @code{RT} (@pxref{Built-in Variables}). @@ -35873,8 +35873,9 @@ are as follows: The name of the file. @item int fd; -A file descriptor for the file. If @command{gawk} was able to -open the file, then @code{fd} will @emph{not} be equal to +A file descriptor for the file. @command{gawk} attempts to open +the file for reading using the @code{open()} system call. If it was +able to open the file, then @code{fd} will @emph{not} be equal to @code{INVALID_HANDLE}. Otherwise, it will. @item struct stat sbuf; @@ -35942,12 +35943,12 @@ input records. The parameters are as follows: @item char **out This is a pointer to a @code{char *} variable that is set to point to the record. @command{gawk} makes its own copy of the data, so -the extension must manage this storage. +your extension must manage this storage. @item struct awk_input *iobuf -This is the @code{awk_input_buf_t} for the file. The fields should be -used for reading data (@code{fd}) and for managing private state -(@code{opaque}), if any. +This is the @code{awk_input_buf_t} for the file. Two of its fields should +be used by your extension: @code{fd} for reading data, and @code{opaque} +for managing any private state. @item int *errcode If an error occurs, @code{*errcode} should be set to an appropriate @@ -35959,7 +35960,7 @@ If the concept of a ``record terminator'' makes sense, then @code{*rt_start} should be set to point to the data to be used for @code{RT}, and @code{*rt_len} should be set to the length of the data. Otherwise, @code{*rt_len} should be set to zero. -@command{gawk} makes its own copy of this data, so the +Here too, @command{gawk} makes its own copy of this data, so your extension must manage this storage. @item const awk_fieldwidth_info_t **field_width @@ -35970,7 +35971,9 @@ field parsing mechanism. Note that this structure will not be copied by @command{gawk}; it must persist at least until the next call to @code{get_record} or @code{close_func}. Note also that @code{field_width} is @code{NULL} when @code{getline} is assigning the results to a variable, thus -field parsing is not needed. If the parser does set @code{*field_width}, +field parsing is not needed. + +If the parser sets @code{*field_width}, then @command{gawk} uses this layout to parse the input record, and the @code{PROCINFO["FS"]} value will be @code{"API"} while this record is active in @code{$0}. @@ -36024,7 +36027,7 @@ based upon the value of an @command{awk} variable, as the XML extension from the @code{gawkextlib} project does (@pxref{gawkextlib}). In the latter case, code in a @code{BEGINFILE} rule can look at @code{FILENAME} and @code{ERRNO} to decide whether or -not to activate an input parser (@pxref{BEGINFILE/ENDFILE}). +not to activate your input parser (@pxref{BEGINFILE/ENDFILE}). You register your input parser with the following function: -- cgit v1.2.1 From 70737fac5709a4766d34b87fe598f2c30ac4c051 Mon Sep 17 00:00:00 2001 From: Antonio Giovanni Colombo Date: Sun, 26 Feb 2023 09:50:39 +0100 Subject: clarification on user parsers --- doc/it/ChangeLog | 4 ++++ doc/it/gawktexi.in | 38 ++++++++++++++++++++++---------------- 2 files changed, 26 insertions(+), 16 deletions(-) (limited to 'doc') diff --git a/doc/it/ChangeLog b/doc/it/ChangeLog index 42990002..c70b4daa 100755 --- a/doc/it/ChangeLog +++ b/doc/it/ChangeLog @@ -1,3 +1,7 @@ +2023-02-26 Antonio Giovanni Colombo + + * gawktexi.in: Updated. + 2023-02-24 Antonio Giovanni Colombo * gawktexi.in: Updated. diff --git a/doc/it/gawktexi.in b/doc/it/gawktexi.in index 9d9ba4ec..e4f25cf8 100755 --- a/doc/it/gawktexi.in +++ b/doc/it/gawktexi.in @@ -39912,9 +39912,9 @@ registrate, quando viene invocato specificando l'opzione @option{--version}. @cindex input @subentry analizzatore di @subentry personalizzato Per default, @command{gawk} legge file di testo come input. Il valore della -variabile @code{RS} @`e usato per determinare la fine di un record, e subito -dopo la variabile @code{FS} (o @code{FIELDWIDTHS} o @code{FPAT}) viene usata -per suddividerlo in campi +variabile @code{RS} @`e usato per determinare la fine di un record in input, +e subito dopo la variabile @code{FS} (o @code{FIELDWIDTHS} o @code{FPAT}) +viene usata per suddividerlo in campi @iftex (@pxrefil{Leggere file}). @end iftex @@ -40030,10 +40030,12 @@ inizialmente) da @code{@var{XXX}_can_take_file()}, e quelli che sono usati da Il nome del file. @item int fd; -Un descrittore di file per il file. Se @command{gawk} riesce ad aprire -il file, il valore di @code{fd} @emph{non} sar@`a uguale a -@code{INVALID_HANDLE} [descrittore non valido]. In caso contrario, -quello sar@`a il valore. +Un descrittore di file per il file. @command{gawk} tenta di aprire +il file in lettura usando la chiamata di sistema @code{open()}. +Se il file viene effettivamente aperto, il valore di @code{fd} +@emph{non} sar@`a uguale a @code{INVALID_HANDLE} +[descrittore non valido]. +In caso contrario, il valore sar@`a quello. @item struct stat sbuf; Se il descrittore di file @`e valido, @command{gawk} avr@`a riempito i campi di @@ -40102,14 +40104,16 @@ record in input. I parametri sono i seguenti: @table @code @item char **out -Questo @`e un puntatore a una variabile @code{char *} che @`e impostatata in modo -da puntare al record. @command{gawk} usa una sua copia locale dei dati, -quindi l'estensione deve gestire la relativa area di memoria. +Questo @`e un puntatore a una variabile @code{char *} che @`e impostatata +in modo da puntare al record. @command{gawk} usa una sua copia locale dei +dati, quindi l'estensione dell'utente deve gestire la relativa area di +memoria. @item struct awk_input *iobuf -Questa @`e la struttura @code{awk_input_buf_t} per il file. I campi dovrebbero -essere usati per leggere i dati (@code{fd}) e per gestire lo stato privato -(@code{opaque}), se necessario. +Questa @`e la struttura @code{awk_input_buf_t} per il file. +Due dei suoi campi dovrebbero essere usati dall'estensione utente: +@code{fd} per leggere i dati, e @code{opaque} per gestire lo stato privato +se necessario. @item int *errcode Se si verifica un errore, @code{*errcode} dovrebbe essere impostato a un @@ -40121,8 +40125,8 @@ Se il concetto ``fine record'' @`e applicabile, @code{*rt_start} dovrebbe essere impostato per puntare ai dati da usare come @code{RT}, e @code{*rt_len} dovrebbe essere impostata alla lunghezza di quel campo. In caso contrario, @code{*rt_len} dovrebbe essere impostata a zero. -@command{gawk} usa una sua copia di questi dati, quindi l'estensione deve -gestire tale memoria. +Anche qui @command{gawk} usa una sua copia di questi dati, quindi +l'estensione utente deve gestire tale memoria. @item const awk_fieldwidth_info_t **field_width Se @code{field_width} non @`e @code{NULL}, @code{*field_width} sar@`a @@ -40134,6 +40138,7 @@ inoltre essa deve rimanere disponibile almeno fino alla successiva chiamata a @code{get_record} o a @code{close_func}. Si noti inoltre che @code{field_width} vale @code{NULL} quando @code{getline} sta assegnando i risultati a una variabile, e quindi un'analisi del campo non @`e necessaria. + Se l'analizzatore imposta @code{*field_width}, allora @command{gawk} usa questa descrizione per analizzare il record in input, e il valore di @code{PROCINFO["FS"]} sar@`a @code{"API"} finch@'e questo @@ -40192,7 +40197,8 @@ valore preso da una variabile @command{awk}, come fa l'estensione XML inclusa nel progetto @code{gawkextlib} (@pxref{gawkextlib}). In quest'ultimo caso, il codice in una regola @code{BEGINFILE} pu@`o controllare @code{FILENAME} ed @code{ERRNO} per decidere se -attivare un analizzatore di input (@pxref{BEGINFILE/ENDFILE}) oppure no. +attivare un analizzatore di input utente oppure no +(@pxref{BEGINFILE/ENDFILE}). Un analizzatore di input va registrato usando la seguente funzione: -- cgit v1.2.1 From bd3a8ae05c40b6e44a7be92bcaddd2dfbd9cdbaf Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 26 Feb 2023 21:23:53 +0200 Subject: Remove trailing whitespace from a bunch of files. --- doc/ChangeLog | 4 + doc/gawk.texi | 78 +-- doc/gawkinet.info | 1254 ++++++++++++++++++++++++------------------------- doc/gawkinet.texi | 6 +- doc/gawktexi.in | 78 +-- doc/gawkworkflow.info | 993 +++++++++++++++++++-------------------- doc/gawkworkflow.texi | 10 +- doc/pm-gawk.info | 645 +++++++++++++------------ 8 files changed, 1535 insertions(+), 1533 deletions(-) (limited to 'doc') diff --git a/doc/ChangeLog b/doc/ChangeLog index cc2b35da..ed573c16 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2023-02-26 Arnold D. Robbins + + * Multiple files: Remove trailing whitespace. + 2023-02-25 Arnold D. Robbins * gawktexi.in (Input Parsers): Clarify and improve some of the prose. diff --git a/doc/gawk.texi b/doc/gawk.texi index 15c343f0..98afef70 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -50,7 +50,7 @@ @ifnottex @set TIMES * @end ifnottex - + @c Let texinfo.tex give us full section titles @xrefautomaticsectiontitle on @@ -5370,7 +5370,7 @@ non-option argument, even if it begins with @samp{-}. @itemize @value{MINUS} @item However, when an option itself requires an argument, and the option is separated -from that argument on the command line by at least one space, the space +from that argument on the command line by at least one space, the space is ignored, and the argument is considered to be related to the option. Thus, in the invocation, @samp{gawk -F x}, the @samp{x} is treated as belonging to the @option{-F} option, not as a separate non-option argument. @@ -6371,10 +6371,10 @@ Subject: Re: [bug-gawk] Does gawk character classes follow this? > From: arnold@skeeve.com > Date: Fri, 15 Feb 2019 03:01:34 -0700 > Cc: pengyu.ut@gmail.com, bug-gawk@gnu.org -> +> > I get the feeling that there's something really bothering you, but > I don't understand what. -> +> > Can you clarify, please? I thought I already did: we cannot be expected to provide a definitive @@ -9119,7 +9119,7 @@ processing on the next record @emph{right now}. For example: @{ while ((start = index($0, "/*")) != 0) @{ out = substr($0, 1, start - 1) # leading part of the string - rest = substr($0, start + 2) # ... */ ... + rest = substr($0, start + 2) # ... */ ... while ((end = index(rest, "*/")) == 0) @{ # is */ in trailing part? # get more text if (getline <= 0) @{ @@ -9745,7 +9745,7 @@ on a per-command or per-connection basis. the attempt to read from the underlying device may succeed in a later attempt. This is a limitation, and it also means that you cannot use this to multiplex input from -two or more sources. @xref{Retrying Input} for a way to enable +two or more sources. @xref{Retrying Input} for a way to enable later I/O attempts to succeed. Assigning a timeout value prevents read operations from being @@ -11737,7 +11737,7 @@ intact, as part of the string: @example $ @kbd{nawk 'BEGIN @{ print "hello, \} > @kbd{world" @}'} -@print{} hello, +@print{} hello, @print{} world @end example @@ -23765,7 +23765,7 @@ $ cat @kbd{test.awk} @print{} rewound = 1 @print{} rewind() @print{} @} -@print{} +@print{} @print{} @{ print FILENAME, FNR, $0 @} $ @kbd{gawk -f rewind.awk -f test.awk data } @@ -26480,7 +26480,7 @@ exist: @example @c file eg/prog/id.awk -function fill_info_for_user(user, +function fill_info_for_user(user, pwent, fields, groupnames, grent, groups, i) @{ pwent = getpwnam(user) @@ -30490,20 +30490,20 @@ using ptys can help deal with buffering deadlocks. Suppose @command{gawk} were unable to add numbers. You could use a coprocess to do it. Here's an exceedingly -simple program written for that purpose: +simple program written for that purpose: @example $ @kbd{cat add.c} -#include - -int -main(void) -@{ - int x, y; - while (scanf("%d %d", & x, & y) == 2) - printf("%d\n", x + y); - return 0; -@} +#include + +int +main(void) +@{ + int x, y; + while (scanf("%d %d", & x, & y) == 2) + printf("%d\n", x + y); + return 0; +@} $ @kbd{cc -O add.c -o add} @ii{Compile the program} @end example @@ -30516,15 +30516,15 @@ $ @kbd{echo 1 2 |} @end example And it would deadlock, because @file{add.c} fails to call -@samp{setlinebuf(stdout)}. The @command{add} program freezes. +@samp{setlinebuf(stdout)}. The @command{add} program freezes. -Now try instead: +Now try instead: @example $ @kbd{echo 1 2 |} > @kbd{gawk -v cmd=add 'BEGIN @{ PROCINFO[cmd, "pty"] = 1 @}} > @kbd{ @{ print |& cmd; cmd |& getline x; print x @}'} -@print{} 3 +@print{} 3 @end example By using a pty, @command{gawk} fools the standard I/O library into @@ -31115,7 +31115,7 @@ Terence Kelly, the author of the persistent memory allocator @command{gawk} uses, provides the following advice about the backing file: @quotation -Regarding backing file size, I recommend making it far larger +Regarding backing file size, I recommend making it far larger than all of the data that will ever reside in it, assuming that the file system supports sparse files. The ``pay only for what you use'' aspect of sparse files ensures that the @@ -31203,8 +31203,8 @@ ACM @cite{Queue} magazine, Vol. 20 No. 2 (March/April 2022), @uref{https://dl.acm.org/doi/pdf/10.1145/3534855, PDF}, @uref{https://queue.acm.org/detail.cfm?id=3534855, HTML}. This paper explains the design of the PMA -allocator used in persistent @command{gawk}. - +allocator used in persistent @command{gawk}. + @item @cite{Persistent Scripting} Zi Fan Tan, Jianan Li, Haris Volos, and Terence Kelly, Non-Volatile Memory Workshop (NVMW) 2022, @@ -31216,7 +31216,7 @@ non-volatile memory; note that the interface differs slightly. @item @cite{Persistent Memory Programming on Conventional Hardware} Terence Kelly, ACM @cite{Queue} magazine Vol. 17 No. 4 (July/Aug 2019), -@uref{https://dl.acm.org/doi/pdf/10.1145/3358955.3358957, PDF}, +@uref{https://dl.acm.org/doi/pdf/10.1145/3358955.3358957, PDF}, @uref{https://queue.acm.org/detail.cfm?id=3358957, HTML}. This paper describes simple techniques for persistent memory for C/C++ code on conventional computers that lack non-volatile memory hardware. @@ -31226,8 +31226,8 @@ Terence Kelly, ACM @cite{Queue} magazine Vol. 18 No. 2 (March/April 2020), @uref{https://dl.acm.org/doi/pdf/10.1145/3400899.3400902, PDF}, @uref{https://queue.acm.org/detail.cfm?id=3400902, HTML}. -This paper describes a simple and robust testbed for testing software -against real power failures. +This paper describes a simple and robust testbed for testing software +against real power failures. @item @cite{Crashproofing the Original NoSQL Key/Value Store} Terence Kelly, @@ -35497,7 +35497,7 @@ It's Euler's modification to Newton's method for calculating pi. Take a look at lines (23) - (25) here: http://mathworld.wolfram.com/PiFormulas.htm -The algorithm I wrote simply expands the multiply by 2 and works from the innermost expression outwards. I used this to program HP calculators because it's quite easy to modify for tiny memory devices with smallish word sizes. +The algorithm I wrote simply expands the multiply by 2 and works from the innermost expression outwards. I used this to program HP calculators because it's quite easy to modify for tiny memory devices with smallish word sizes. http://www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/articles.cgi?read=899 @@ -37144,7 +37144,7 @@ Set this to @code{awk_true} if the field lengths are specified in terms of potentially multi-byte characters, and set it to @code{awk_false} if the lengths are in terms of bytes. Performance will be better if the values are supplied in -terms of bytes. +terms of bytes. @item size_t nf; Set this to the number of fields in the input record, i.e. @code{NF}. @@ -37159,7 +37159,7 @@ for @code{$1}, and so on through the @code{fields[nf-1]} element containing the @end table A convenience macro @code{awk_fieldwidth_info_size(numfields)} is provided to -calculate the appropriate size of a variable-length +calculate the appropriate size of a variable-length @code{awk_fieldwidth_info_t} structure containing @code{numfields} fields. This can be used as an argument to @code{malloc()} or in a union to allocate space statically. Please refer to the @code{readdir_test} sample extension for an @@ -38526,7 +38526,7 @@ The following function allows extensions to access and manipulate redirections. Look up file @code{name} in @command{gawk}'s internal redirection table. If @code{name} is @code{NULL} or @code{name_len} is zero, return data for the currently open input file corresponding to @code{FILENAME}. -(This does not access the @code{filetype} argument, so that may be undefined). +(This does not access the @code{filetype} argument, so that may be undefined). If the file is not already open, attempt to open it. The @code{filetype} argument must be zero-terminated and should be one of: @@ -39893,22 +39893,22 @@ all the variables and functions in the @code{inplace} namespace @c endfile @ignore @c file eg/lib/inplace.awk -# +# # Copyright (C) 2013, 2017, 2019 the Free Software Foundation, Inc. -# +# # This file is part of GAWK, the GNU implementation of the # AWK Programming Language. -# +# # GAWK is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. -# +# # GAWK is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA @@ -44480,7 +44480,7 @@ This is an @command{awk} interpreter written in the @uref{https://golang.org/, Go programming language}. It implements POSIX @command{awk}, with a few minor extensions. Source code is available from @uref{https://github.com/benhoyt/goawk}. -The author wrote a nice +The author wrote a nice @uref{https://benhoyt.com/writings/goawk/, article} describing the implementation. diff --git a/doc/gawkinet.info b/doc/gawkinet.info index 1f22414e..7877e084 100644 --- a/doc/gawkinet.info +++ b/doc/gawkinet.info @@ -1,7 +1,7 @@ -This is gawkinet.info, produced by makeinfo version 6.8 from +This is gawkinet.info, produced by makeinfo version 7.0.1 from gawkinet.texi. -This is Edition 1.6 of 'TCP/IP Internetworking with 'gawk'', for the +This is Edition 1.6 of ‘TCP/IP Internetworking with ‘gawk’’, for the 5.2.0 (or later) version of the GNU implementation of AWK. @@ -12,19 +12,19 @@ This is Edition 1.6 of 'TCP/IP Internetworking with 'gawk'', for the Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the -Invariant Sections being "GNU General Public License", the Front-Cover +Invariant Sections being “GNU General Public License”, the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the section entitled -"GNU Free Documentation License". +“GNU Free Documentation License”. - a. "A GNU Manual" + a. “A GNU Manual” - b. "You have the freedom to copy and modify this GNU manual. Buying + b. “You have the freedom to copy and modify this GNU manual. Buying copies from the FSF supports it in developing GNU and promoting - software freedom." + software freedom.” INFO-DIR-SECTION Network applications START-INFO-DIR-ENTRY -* awkinet: (gawkinet). TCP/IP Internetworking With 'gawk'. +* awkinet: (gawkinet). TCP/IP Internetworking With ‘gawk’. END-INFO-DIR-ENTRY  @@ -33,10 +33,10 @@ File: gawkinet.info, Node: Top, Next: Preface, Prev: (dir), Up: (dir) General Introduction ******************** -This file documents the networking features in GNU Awk ('gawk') version +This file documents the networking features in GNU Awk (‘gawk’) version 4.0 and later. - This is Edition 1.6 of 'TCP/IP Internetworking with 'gawk'', for the + This is Edition 1.6 of ‘TCP/IP Internetworking with ‘gawk’’, for the 5.2.0 (or later) version of the GNU implementation of AWK. @@ -47,16 +47,16 @@ This file documents the networking features in GNU Awk ('gawk') version Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the -Invariant Sections being "GNU General Public License", the Front-Cover +Invariant Sections being “GNU General Public License”, the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the section entitled -"GNU Free Documentation License". +“GNU Free Documentation License”. - a. "A GNU Manual" + a. “A GNU Manual” - b. "You have the freedom to copy and modify this GNU manual. Buying + b. “You have the freedom to copy and modify this GNU manual. Buying copies from the FSF supports it in developing GNU and promoting - software freedom." + software freedom.” * Menu: @@ -75,7 +75,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b) * Basic Protocols:: The basic protocols. * Ports:: The idea behind ports. * Making Connections:: Making TCP/IP connections. -* Gawk Special Files:: How to do 'gawk' networking. +* Gawk Special Files:: How to do ‘gawk’ networking. * Special File Fields:: The fields in the special file name. * Comparing Protocols:: Differences between the protocols. * File /inet/tcp:: The TCP special file. @@ -110,28 +110,28 @@ Preface ******* In May of 1997, Jürgen Kahrs felt the need for network access from -'awk', and, with a little help from me, set about adding features to do -this for 'gawk'. At that time, he wrote the bulk of this Info file. +‘awk’, and, with a little help from me, set about adding features to do +this for ‘gawk’. At that time, he wrote the bulk of this Info file. - The code and documentation were added to the 'gawk' 3.1 development + The code and documentation were added to the ‘gawk’ 3.1 development tree, and languished somewhat until I could finally get down to some -serious work on that version of 'gawk'. This finally happened in the +serious work on that version of ‘gawk’. This finally happened in the middle of 2000. Meantime, Jürgen wrote an article about the Internet special files -and '|&' operator for 'Linux Journal', and made a networking patch for -the production versions of 'gawk' available from his home page. In -August of 2000 (for 'gawk' 3.0.6), this patch also made it to the main -GNU 'ftp' distribution site. +and ‘|&’ operator for ‘Linux Journal’, and made a networking patch for +the production versions of ‘gawk’ available from his home page. In +August of 2000 (for ‘gawk’ 3.0.6), this patch also made it to the main +GNU ‘ftp’ distribution site. - For release with 'gawk', I edited Jürgen's prose for English grammar + For release with ‘gawk’, I edited Jürgen’s prose for English grammar and style, as he is not a native English speaker. I also rearranged the material somewhat for what I felt was a better order of presentation, and (re)wrote some of the introductory material. The majority of this document and the code are his work, and the high quality and interesting ideas speak for themselves. It is my hope that -these features will be of significant value to the 'awk' community. +these features will be of significant value to the ‘awk’ community. Arnold Robbins @@ -145,7 +145,7 @@ File: gawkinet.info, Node: Introduction, Next: Using Networking, Prev: Prefac ********************* This major node provides a (necessarily) brief introduction to computer -networking concepts. For many applications of 'gawk' to TCP/IP +networking concepts. For many applications of ‘gawk’ to TCP/IP networking, we hope that this is enough. For more advanced tasks, you will need deeper background, and it may be necessary to switch to lower-level programming in C or C++. @@ -180,7 +180,7 @@ When you make a phone call, the following steps occur: network, refuses to answer the call. 4. Assuming the other party answers, the connection between you is now - a "duplex" (two-way), "reliable" (no data lost), sequenced (data + a “duplex” (two-way), “reliable” (no data lost), sequenced (data comes out in the order sent) data stream. 5. You and your friend may now talk freely, with the phone system @@ -190,7 +190,7 @@ When you make a phone call, the following steps occur: The same steps occur in a duplex reliable computer networking connection. There is considerably more overhead in setting up the -communications, but once it's done, data moves in both directions, +communications, but once it’s done, data moves in both directions, reliably, in sequence.  @@ -215,21 +215,21 @@ following. 5. One or more may get lost in the mail. (Although, fortunately, this does not occur very often.) - 6. In a computer network, one or more "packets" may also arrive - multiple times. (This doesn't happen with the postal system!) + 6. In a computer network, one or more “packets” may also arrive + multiple times. (This doesn’t happen with the postal system!) The important characteristics of datagram communications, like those of the postal system are thus: - * Delivery is "best effort;" the data may never get there. + • Delivery is “best effort;” the data may never get there. - * Each message is self-contained, including the source and + • Each message is self-contained, including the source and destination addresses. - * Delivery is _not_ sequenced; packets may arrive out of order, + • Delivery is _not_ sequenced; packets may arrive out of order, and/or multiple times. - * Unlike the phone system, overhead is considerably lower. It is not + • Unlike the phone system, overhead is considerably lower. It is not necessary to set up the call first. The price the user pays for the lower overhead of datagram @@ -245,7 +245,7 @@ File: gawkinet.info, Node: The TCP/IP Protocols, Next: Making Connections, Pr The Internet Protocol Suite (usually referred to as just TCP/IP)(1) consists of a number of different protocols at different levels or -"layers." For our purposes, three protocols provide the fundamental +“layers.” For our purposes, three protocols provide the fundamental communications mechanisms. All other defined protocols are referred to as user-level protocols (e.g., HTTP, used later in this Info file). @@ -269,8 +269,8 @@ File: gawkinet.info, Node: Basic Protocols, Next: Ports, Prev: The TCP/IP Pro IP The Internet Protocol. This protocol is almost never used directly by applications. It provides the basic packet delivery and routing - infrastructure of the Internet. Much like the phone company's - switching centers or the Post Office's trucks, it is not of much + infrastructure of the Internet. Much like the phone company’s + switching centers or the Post Office’s trucks, it is not of much day-to-day interest to the regular user (or programmer). It happens to be a best effort datagram protocol. In the early twenty-first century, there are two versions of this protocol in @@ -281,11 +281,11 @@ IP addresses, on which most of the current Internet is based. IPv6 - The "next generation" of the Internet Protocol, with 128-bit + The “next generation” of the Internet Protocol, with 128-bit addresses. This protocol is in wide use in certain parts of the world, but has not yet replaced IPv4.(1) - Versions of the other protocols that sit "atop" IP exist for both + Versions of the other protocols that sit “atop” IP exist for both IPv4 and IPv6. However, as the IPv6 versions are fundamentally the same as the original IPv4 versions, we will not distinguish further between them. @@ -293,14 +293,14 @@ IP UDP The User Datagram Protocol. This is a best effort datagram protocol. It provides a small amount of extra reliability over IP, - and adds the notion of "ports", described in *note TCP and UDP + and adds the notion of “ports”, described in *note TCP and UDP Ports: Ports. TCP The Transmission Control Protocol. This is a duplex, reliable, sequenced byte-stream protocol, again layered on top of IP, and also providing the notion of ports. This is the protocol that you - will most likely use when using 'gawk' for network programming. + will most likely use when using ‘gawk’ for network programming. All other user-level protocols use either TCP or UDP to do their basic communications. Examples are SMTP (Simple Mail Transfer @@ -309,7 +309,7 @@ Protocol). ---------- Footnotes ---------- - (1) There isn't an IPv5. + (1) There isn’t an IPv5.  File: gawkinet.info, Node: Ports, Prev: Basic Protocols, Up: The TCP/IP Protocols @@ -323,20 +323,20 @@ than one person at the location; thus you have to further quantify the recipient by putting a person or company name on the envelope. In the phone system, one phone number may represent an entire -company, in which case you need a person's extension number in order to +company, in which case you need a person’s extension number in order to reach that individual directly. Or, when you call a home, you have to -say, "May I please speak to ..." before talking to the person directly. +say, “May I please speak to ...” before talking to the person directly. IP networking provides the concept of addressing. An IP address represents a particular computer, but no more. In order to reach the mail service on a system, or the FTP or WWW service on a system, you must have some way to further specify which service you want. In the -Internet Protocol suite, this is done with "port numbers", which +Internet Protocol suite, this is done with “port numbers”, which represent the services, much like an extension number used with a phone number. Port numbers are 16-bit integers. Unix and Unix-like systems reserve -ports below 1024 for "well known" services, such as SMTP, FTP, and HTTP. +ports below 1024 for “well known” services, such as SMTP, FTP, and HTTP. Numbers 1024 and above may be used by any application, although there is no promise made that a particular port number is always available. @@ -346,22 +346,22 @@ File: gawkinet.info, Node: Making Connections, Prev: The TCP/IP Protocols, Up 1.4 Making TCP/IP Connections (And Some Terminology) ==================================================== -Two terms come up repeatedly when discussing networking: "client" and -"server". For now, we'll discuss these terms at the "connection level", +Two terms come up repeatedly when discussing networking: “client” and +“server”. For now, we’ll discuss these terms at the “connection level”, when first establishing connections between two processes on different systems over a network. (Once the connection is established, the higher -level, or "application level" protocols, such as HTTP or FTP, determine +level, or “application level” protocols, such as HTTP or FTP, determine who is the client and who is the server. Often, it turns out that the client and server are the same in both roles.) - The "server" is the system providing the service, such as the web -server or email server. It is the "host" (system) which is _connected + The “server” is the system providing the service, such as the web +server or email server. It is the “host” (system) which is _connected to_ in a transaction. For this to work though, the server must be expecting connections. Much as there has to be someone at the office building to answer the phone,(1) the server process (usually) has to be started first and be waiting for a connection. - The "client" is the system requesting the service. It is the system + The “client” is the system requesting the service. It is the system _initiating the connection_ in a transaction. (Just as when you pick up the phone to call an office or store.) @@ -373,19 +373,19 @@ can a new one be built up on the same port. This is contrary to the usual behavior of fully developed web servers which have to avoid situations in which they are not reachable. We have to pay this price in order to enjoy the benefits of a simple communication paradigm in -'gawk'.) +‘gawk’.) Furthermore, once the connection is established, communications are -"synchronous".(2) I.e., each end waits on the other to finish +“synchronous”.(2) I.e., each end waits on the other to finish transmitting, before replying. This is much like two people in a phone conversation. While both could talk simultaneously, doing so usually -doesn't work too well. +doesn’t work too well. In the case of TCP, the synchronicity is enforced by the protocol -when sending data. Data writes "block" until the data have been +when sending data. Data writes “block” until the data have been received on the other end. For both TCP and UDP, data reads block until there is incoming data waiting to be read. This is summarized in the -following table, where an "x" indicates that the given action blocks. +following table, where an “x” indicates that the given action blocks. TCP x x UDP x @@ -394,33 +394,33 @@ UDP x (1) In the days before voice mail systems! - (2) For the technically savvy, data reads block--if there's no + (2) For the technically savvy, data reads block—if there’s no incoming data, the program is made to wait until there is, instead of -receiving a "there's no data" error return. +receiving a “there’s no data” error return.  File: gawkinet.info, Node: Using Networking, Next: Some Applications and Techniques, Prev: Introduction, Up: Top -2 Networking With 'gawk' +2 Networking With ‘gawk’ ************************ -The 'awk' programming language was originally developed as a +The ‘awk’ programming language was originally developed as a pattern-matching language for writing short programs to perform data -manipulation tasks. 'awk''s strength is the manipulation of textual +manipulation tasks. ‘awk’’s strength is the manipulation of textual data that is stored in files. It was never meant to be used for networking purposes. To exploit its features in a networking context, -it's necessary to use an access mode for network connections that +it’s necessary to use an access mode for network connections that resembles the access of files as closely as possible. - 'awk' is also meant to be a prototyping language. It is used to + ‘awk’ is also meant to be a prototyping language. It is used to demonstrate feasibility and to play with features and user interfaces. -This can be done with file-like handling of network connections. 'gawk' +This can be done with file-like handling of network connections. ‘gawk’ trades the lack of many of the advanced features of the TCP/IP family of protocols for the convenience of simple connection handling. The advanced features are available when programming in C or Perl. In fact, the network programming in this major node is very similar to what is -described in books such as 'Internet Programming with Python', 'Advanced -Perl Programming', or 'Web Client Programming with Perl'. +described in books such as ‘Internet Programming with Python’, ‘Advanced +Perl Programming’, or ‘Web Client Programming with Perl’. However, you can do the programming here without first having to learn object-oriented ideology; underlying languages such as Tcl/Tk, @@ -432,7 +432,7 @@ protocol is much less important for most users. * Menu: -* Gawk Special Files:: How to do 'gawk' networking. +* Gawk Special Files:: How to do ‘gawk’ networking. * TCP Connecting:: Making a TCP connection. * Troubleshooting:: Troubleshooting TCP/IP connections. * Interacting:: Interacting with a service. @@ -448,30 +448,30 @@ protocol is much less important for most users.  File: gawkinet.info, Node: Gawk Special Files, Next: TCP Connecting, Prev: Using Networking, Up: Using Networking -2.1 'gawk''s Networking Mechanisms +2.1 ‘gawk’’s Networking Mechanisms ================================== -The '|&' operator for use in communicating with a "coprocess" is +The ‘|&’ operator for use in communicating with a “coprocess” is described in *note Two-way Communications With Another Process: (gawk)Two-way I/O. It shows how to do two-way I/O to a separate process, -sending it data with 'print' or 'printf' and reading data with -'getline'. If you haven't read it already, you should detour there to +sending it data with ‘print’ or ‘printf’ and reading data with +‘getline’. If you haven’t read it already, you should detour there to do so. - 'gawk' transparently extends the two-way I/O mechanism to simple -networking through the use of special file names. When a "coprocess" + ‘gawk’ transparently extends the two-way I/O mechanism to simple +networking through the use of special file names. When a “coprocess” that matches the special files we are about to describe is started, -'gawk' creates the appropriate network connection, and then two-way I/O +‘gawk’ creates the appropriate network connection, and then two-way I/O proceeds as usual. At the C, C++, and Perl level, networking is accomplished via -"sockets", an Application Programming Interface (API) originally +“sockets”, an Application Programming Interface (API) originally developed at the University of California at Berkeley that is now used almost universally for TCP/IP networking. Socket level programming, while fairly straightforward, requires paying attention to a number of details, as well as using binary data. It is not well-suited for use -from a high-level language like 'awk'. The special files provided in -'gawk' hide the details from the programmer, making things much simpler +from a high-level language like ‘awk’. The special files provided in +‘gawk’ hide the details from the programmer, making things much simpler and easier to use. The special file name for network access is made up of several @@ -495,39 +495,39 @@ File: gawkinet.info, Node: Special File Fields, Next: Comparing Protocols, Pr This node explains the meaning of all of the fields, as well as the range of values and the defaults. All of the fields are mandatory. To -let the system pick a value, or if the field doesn't apply to the -protocol, specify it as '0' (zero): +let the system pick a value, or if the field doesn’t apply to the +protocol, specify it as ‘0’ (zero): NET-TYPE - This is one of 'inet4' for IPv4, 'inet6' for IPv6, or 'inet' to use + This is one of ‘inet4’ for IPv4, ‘inet6’ for IPv6, or ‘inet’ to use the system default (which is likely to be IPv4). For the rest of - this document, we will use the generic '/inet' in our descriptions - of how 'gawk''s networking works. + this document, we will use the generic ‘/inet’ in our descriptions + of how ‘gawk’’s networking works. PROTOCOL Determines which member of the TCP/IP family of protocols is selected to transport the data across the network. There are two - possible values (always written in lowercase): 'tcp' and 'udp'. + possible values (always written in lowercase): ‘tcp’ and ‘udp’. The exact meaning of each is explained later in this node. LOCALPORT Determines which port on the local machine is used to communicate - across the network. Application-level clients usually use '0' to - indicate they do not care which local port is used--instead they + across the network. Application-level clients usually use ‘0’ to + indicate they do not care which local port is used—instead they specify a remote port to connect to. It is vital for application-level servers to use a number different - from '0' here because their service has to be available at a + from ‘0’ here because their service has to be available at a specific publicly known port number. It is possible to use a name - from '/etc/services' here. + from ‘/etc/services’ here. HOSTNAME Determines which remote host is to be at the other end of the connection. Application-level clients must enter a name different - from '0'. The name can be either symbolic (e.g., - 'jpl-devvax.jpl.nasa.gov') or numeric (e.g., '128.149.1.143'). + from ‘0’. The name can be either symbolic (e.g., + ‘jpl-devvax.jpl.nasa.gov’) or numeric (e.g., ‘128.149.1.143’). - Application-level servers must fill this field with a '0' to + Application-level servers must fill this field with a ‘0’ to indicate their being open for all other hosts to connect to them and enforce connection level server behavior this way. It is not possible for an application-level server to restrict its @@ -535,19 +535,19 @@ HOSTNAME REMOTEPORT Determines which port on the remote machine is used to communicate - across the network. For '/inet/tcp' and '/inet/udp', - application-level clients _must_ use a number other than '0' to + across the network. For ‘/inet/tcp’ and ‘/inet/udp’, + application-level clients _must_ use a number other than ‘0’ to indicate to which port on the remote machine they want to connect. - Application-level servers must not fill this field with a '0'. + Application-level servers must not fill this field with a ‘0’. Instead they specify a local port to which clients connect. It is - possible to use a name from '/etc/services' here. + possible to use a name from ‘/etc/services’ here. Experts in network programming will notice that the usual client/server asymmetry found at the level of the socket API is not visible here. This is for the sake of simplicity of the high-level concept. If this asymmetry is necessary for your application, use -another language. For 'gawk', it is more important to enable users to +another language. For ‘gawk’, it is more important to enable users to write a client program with a minimum of code. What happens when first accessing a network connection is seen in the following pseudocode: @@ -567,7 +567,7 @@ accessing a network connection is seen in the following pseudocode: fields of the special file name. When in doubt, *note Table 2.1: table-inet-components. gives you the combinations of values and their meaning. If this table is too complicated, focus on the three lines -printed in *bold*. All the examples in *note Networking With 'gawk': +printed in *bold*. All the examples in *note Networking With ‘gawk’: Using Networking, use only the patterns printed in bold letters. @@ -590,7 +590,7 @@ tcp, udp x 0 x Invalid tcp, udp 0 0 0 Invalid tcp, udp 0 x 0 Invalid -Table 2.1: '/inet' Special File Components +Table 2.1: ‘/inet’ Special File Components In general, TCP is the preferred mechanism to use. It is the simplest protocol to understand and to use. Use UDP only if @@ -615,7 +615,7 @@ available and demonstrate the differences between them.  File: gawkinet.info, Node: File /inet/tcp, Next: File /inet/udp, Prev: Comparing Protocols, Up: Comparing Protocols -2.1.2.1 '/inet/tcp' +2.1.2.1 ‘/inet/tcp’ ................... Once again, always use TCP. (Use UDP when low overhead is a necessity.) @@ -646,7 +646,7 @@ started first, and it waits for the receiver to read a line.  File: gawkinet.info, Node: File /inet/udp, Prev: File /inet/tcp, Up: Comparing Protocols -2.1.2.2 '/inet/udp' +2.1.2.2 ‘/inet/udp’ ................... The server and client programs that use UDP are almost identical to @@ -671,13 +671,13 @@ started first: close("/inet/udp/0/localhost/8888") } - In the case of UDP, the initial 'print' command is the one that -actually sends data so that there is a connection. UDP and "connection" + In the case of UDP, the initial ‘print’ command is the one that +actually sends data so that there is a connection. UDP and “connection” sounds strange to anyone who has learned that UDP is a connectionless -protocol. Here, "connection" means that the 'connect()' system call has -completed its work and completed the "association" between a certain +protocol. Here, “connection” means that the ‘connect()’ system call has +completed its work and completed the “association” between a certain socket and an IP address. Thus there are subtle differences between -'connect()' for TCP and UDP; see the man page for details.(1) +‘connect()’ for TCP and UDP; see the man page for details.(1) UDP cannot guarantee that the datagrams at the receiving end will arrive in exactly the same order they were sent. Some datagrams could @@ -689,7 +689,7 @@ stateless services like the original versions of NFS. ---------- Footnotes ---------- (1) This subtlety is just one of many details that are hidden in the -socket API, invisible and intractable for the 'gawk' user. The +socket API, invisible and intractable for the ‘gawk’ user. The developers are currently considering how to rework the network facilities to make them easier to understand and use. @@ -699,9 +699,9 @@ File: gawkinet.info, Node: TCP Connecting, Next: Troubleshooting, Prev: Gawk 2.2 Establishing a TCP Connection ================================= -Let's observe a network connection at work. Type in the following +Let’s observe a network connection at work. Type in the following program and watch the output. Within a second, it connects via TCP -('/inet/tcp') to a remote server and asks the service 'daytime' on the +(‘/inet/tcp’) to a remote server and asks the service ‘daytime’ on the machine what time it is: BEGIN { @@ -714,43 +714,43 @@ machine what time it is: close(daytime_connection) } - Even experienced 'awk' users will find the fourth and sixth line + Even experienced ‘awk’ users will find the fourth and sixth line strange in two respects: - * A string containing the name of a special file is used as a shell - command that pipes its output into 'getline'. One would rather + • A string containing the name of a special file is used as a shell + command that pipes its output into ‘getline’. One would rather expect to see the special file being read like any other file - ('getline < "/inet/tcp/0/time-a-g.nist.gov/daytime"'). + (‘getline < "/inet/tcp/0/time-a-g.nist.gov/daytime"’). - * The operator '|&' has not been part of any 'awk' implementation - (until now). It is actually the only extension of the 'awk' + • The operator ‘|&’ has not been part of any ‘awk’ implementation + (until now). It is actually the only extension of the ‘awk’ language needed (apart from the special files) to introduce network access. - The '|&' operator was introduced in 'gawk' 3.1 in order to overcome -the crucial restriction that access to files and pipes in 'awk' is + The ‘|&’ operator was introduced in ‘gawk’ 3.1 in order to overcome +the crucial restriction that access to files and pipes in ‘awk’ is always unidirectional. It was formerly impossible to use both access modes on the same file or pipe. Instead of changing the whole concept -of file access, the '|&' operator behaves exactly like the usual pipe +of file access, the ‘|&’ operator behaves exactly like the usual pipe operator except for two additions: - * Normal shell commands connected to their 'gawk' program with a '|&' - pipe can be accessed bidirectionally. The '|&' turns out to be a - quite general, useful, and natural extension of 'awk'. + • Normal shell commands connected to their ‘gawk’ program with a ‘|&’ + pipe can be accessed bidirectionally. The ‘|&’ turns out to be a + quite general, useful, and natural extension of ‘awk’. - * Pipes that consist of a special file name for network connections + • Pipes that consist of a special file name for network connections are not executed as shell commands. Instead, they can be read and written to, just like a full-duplex network connection. - In the earlier example, the '|&' operator tells 'getline' to read a -line from the special file '/inet/tcp/0/time-a-g.nist.gov/daytime'. We + In the earlier example, the ‘|&’ operator tells ‘getline’ to read a +line from the special file ‘/inet/tcp/0/time-a-g.nist.gov/daytime’. We could also have printed a line into the special file. But instead we just consumed an empty leading line, printed it, then read a line with the time, printed that, and closed the connection. (While we could just -let 'gawk' close the connection by finishing the program, in this Info +let ‘gawk’ close the connection by finishing the program, in this Info file we are pedantic and always explicitly close the connections.) - Network services like 'daytime' are not really useful because there + Network services like ‘daytime’ are not really useful because there are so many better ways to print the current time. In the early days of TCP networking, such a service may have looked like a good idea for testing purposes. Later, simple TCP services like these have been used @@ -760,7 +760,7 @@ services. The list of servers (https://tf.nist.gov/tf-cgi/servers.cgi) that still support the legacy service daytime (https://en.wikipedia.org/wiki/Daytime_Protocol) can be found at Wikipedia. We hesitated to use this service in this manual because it -is hard to find servers that still support services like 'daytime' +is hard to find servers that still support services like ‘daytime’ openly to the Internet. Later on we will see that some of these nostalgic protocols have turned into security risks. @@ -778,14 +778,14 @@ network programming. For the rest of this major node, we will assume you work on a POSIX-style system that supports TCP/IP. If the previous example program does not run on your machine, it may help to replace the value assigned -to the variable 'daytime_server' with the name (or the IP address) of +to the variable ‘daytime_server’ with the name (or the IP address) of another server from the list mentioned above. Now you should see the date and time being printed by the program, otherwise you may have run -out of servers that support the 'daytime' service. +out of servers that support the ‘daytime’ service. - Try changing the service to 'chargen' or 'ftp'. This way, the + Try changing the service to ‘chargen’ or ‘ftp’. This way, the program connects to other services that should give you some response. -If you are curious, you should have a look at your '/etc/services' file. +If you are curious, you should have a look at your ‘/etc/services’ file. It could look like this: # /etc/services: @@ -821,27 +821,27 @@ It could look like this: usually support. If your GNU/Linux machine does not do so, it may be that these services are switched off in some startup script. Systems running some flavor of Microsoft Windows usually do _not_ support these -services. Nevertheless, it _is_ possible to do networking with 'gawk' +services. Nevertheless, it _is_ possible to do networking with ‘gawk’ on Microsoft Windows.(1) The first column of the file gives the name of the service, and the second column gives a unique number and the protocol that one can use to connect to this service. The rest of the -line is treated as a comment. You see that some services ('echo') +line is treated as a comment. You see that some services (‘echo’) support TCP as well as UDP. ---------- Footnotes ---------- (1) Microsoft preferred to ignore the TCP/IP family of protocols until 1995. Then came the rise of the Netscape browser as a landmark -"killer application." Microsoft added TCP/IP support and their own +“killer application.” Microsoft added TCP/IP support and their own browser to Microsoft Windows 95 at the last minute. They even back-ported their TCP/IP implementation to Microsoft Windows for Workgroups 3.11, but it was a rather rudimentary and half-hearted -implementation. Nevertheless, the equivalent of '/etc/services' resides -under 'C:\WINNT\system32\drivers\etc\services' on Microsoft Windows 2000 +implementation. Nevertheless, the equivalent of ‘/etc/services’ resides +under ‘C:\WINNT\system32\drivers\etc\services’ on Microsoft Windows 2000 and Microsoft Windows XP. On Microsoft Windows 7, 8 and 10 there is a -directory '%WinDir%\System32\Drivers\Etc' that holds the 'hosts' file +directory ‘%WinDir%\System32\Drivers\Etc’ that holds the ‘hosts’ file (https://support.microsoft.com/en-us/help/972034/how-to-reset-the-hosts-file-back-to-the-default) -and probably also a 'services' file +and probably also a ‘services’ file (https://www.ibm.com/support/knowledgecenter/SSRNYG_7.2.1/com.ibm.rational.synergy.install.win.doc/topics/sg_r_igw_services_file.html).  @@ -852,8 +852,8 @@ File: gawkinet.info, Node: Interacting, Next: Setting Up, Prev: Troubleshooti The next program begins really interacting with a network service by printing something into the special file. It asks the so-called -'finger' service if a user of the machine is logged in. When testing -this program, try to change the variable 'finger_server' to some other +‘finger’ service if a user of the machine is logged in. When testing +this program, try to change the variable ‘finger_server’ to some other machine name in your local network: BEGIN { @@ -869,15 +869,15 @@ machine name in your local network: program repeatedly reads lines that come as a reply. When no more lines are available (because the service has closed the connection), the program also closes the connection. If you tried to replace -'finger_server' with some other server name, the script probably +‘finger_server’ with some other server name, the script probably reported being unable to open the connection, because most servers today no longer support this service. Try replacing the login name of -Professor Nace ('wnace') with another login name (like 'help'). You +Professor Nace (‘wnace’) with another login name (like ‘help’). You will receive a list of login names similar to the one you asked for. In the 1980s you could get a list of all users currently logged in by -asking for an empty string ('""'). +asking for an empty string (‘""’). - The final 'close()' call could be safely deleted from the above + The final ‘close()’ call could be safely deleted from the above script, because the operating system closes any open connection by default when a script reaches the end of execution. But, in order to avoid portability problems, it is best to always close connections @@ -885,9 +885,9 @@ explicitly. With the Linux kernel, for example, proper closing results in flushing of buffers. Letting the close happen by default may result in discarding buffers. - When looking at '/etc/services' you may have noticed that the -'daytime' service is also available with 'udp'. In the earlier -examples, change 'tcp' to 'udp' and try if the 'finger' and 'daytime' + When looking at ‘/etc/services’ you may have noticed that the +‘daytime’ service is also available with ‘udp’. In the earlier +examples, change ‘tcp’ to ‘udp’ and try if the ‘finger’ and ‘daytime’ clients still work as expected. They probably will not respond because a wise administrator switched off these services. But if they do, you may see the expected day and time message. The program then hangs, @@ -897,8 +897,8 @@ and UDP. When using UDP, neither party is automatically informed about the other closing the connection. Continuing to experiment this way reveals many other subtle differences between TCP and UDP. To avoid such trouble, you should always remember the advice Douglas E. Comer and -David Stevens give in Volume III of their series 'Internetworking With -TCP' (page 14): +David Stevens give in Volume III of their series ‘Internetworking With +TCP’ (page 14): When designing client-server applications, beginners are strongly advised to use TCP because it provides reliable, @@ -910,19 +910,19 @@ TCP' (page 14): This advice is actually quite dated and we hesitated to repeat it here. But we left it in because we are still observing beginners running into this pitfall. While this advice has aged quite well, some -other ideas from the 1980s have not. The 'finger' service may still be +other ideas from the 1980s have not. The ‘finger’ service may still be available in Microsoft Windows Server 2019 (https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/finger), but it turned out to be a never-ending cause of trouble. First of all, it is now obvious that a server should never reveal personal data about its users to anonymous client software that connects over the wild wild -Internet. So every server on the Internet should reject 'finger' +Internet. So every server on the Internet should reject ‘finger’ requests (by disabling the port and by disabling the software serving this port). But things got even worse in 2020 when it turned out that -even the client software (the 'finger' command documented in the link +even the client software (the ‘finger’ command documented in the link above) is a security problem. A tool called DarkFinger (https://seclists.org/fulldisclosure/2020/Sep/30) allows to leverage the -Microsoft Windows 'finger.exe' as a file downloader and help evade +Microsoft Windows ‘finger.exe’ as a file downloader and help evade network security devices.  @@ -933,16 +933,16 @@ File: gawkinet.info, Node: Setting Up, Next: Email, Prev: Interacting, Up: U The preceding programs behaved as clients that connect to a server somewhere on the Internet and request a particular service. Now we set -up such a service to mimic the behavior of the 'daytime' service. Such +up such a service to mimic the behavior of the ‘daytime’ service. Such a server does not know in advance who is going to connect to it over the network. Therefore, we cannot insert a name for the host to connect to in our special file name. Start the following program in one window. Notice that the service -does not have the name 'daytime', but the number '8888'. From looking -at '/etc/services', you know that names like 'daytime' are just +does not have the name ‘daytime’, but the number ‘8888’. From looking +at ‘/etc/services’, you know that names like ‘daytime’ are just mnemonics for predetermined 16-bit integers. Only the system -administrator ('root') could enter our new service into '/etc/services' +administrator (‘root’) could enter our new service into ‘/etc/services’ with an appropriate name. Also notice that the service name has to be entered into a different field of the special file name because we are setting up a server, not a client: @@ -955,34 +955,34 @@ setting up a server, not a client: Now open another window on the same machine. Copy the client program given as the first example (*note Establishing a TCP Connection: TCP Connecting.) to a new file and edit it, changing the variable -'daytime_server' to 'localhost' and the port name 'daytime' to '8888'. +‘daytime_server’ to ‘localhost’ and the port name ‘daytime’ to ‘8888’. Then start the modified client. You should get a reply like this: $ gawk -f awklib/eg/network/daytimeclient.awk - -| Sun Dec 27 17:33:57 CET 2020 - -| Sun Dec 27 17:33:57 CET 2020 + ⊣ Sun Dec 27 17:33:57 CET 2020 + ⊣ Sun Dec 27 17:33:57 CET 2020 Both programs explicitly close the connection. Now we will intentionally make a mistake to see what happens when the -name '8888' (the port) is already used by another service. Start the +name ‘8888’ (the port) is already used by another service. Start the server program in both windows. The first one works, but the second one complains that it could not open the connection. Each port on a single machine can only be used by one server program at a time. Now terminate -the server program and change the name '8888' to 'echo'. After +the server program and change the name ‘8888’ to ‘echo’. After restarting it, the server program does not run any more, and you know -why: there is already an 'echo' service running on your machine. But -even if this isn't true, you would not get your own 'echo' server +why: there is already an ‘echo’ service running on your machine. But +even if this isn’t true, you would not get your own ‘echo’ server running on a Unix machine, because the ports with numbers smaller than -1024 ('echo' is at port 7) are reserved for 'root'. On machines running +1024 (‘echo’ is at port 7) are reserved for ‘root’. On machines running some flavor of Microsoft Windows, there is no restriction that reserves -ports 1 to 1024 for a privileged user; hence, you can start an 'echo' +ports 1 to 1024 for a privileged user; hence, you can start an ‘echo’ server there. Even in later version of Microsoft Windows, this -restriction of the Unix world seems to have never been adopted 'Does -windows(10/server-2016) have privileged ports?' +restriction of the Unix world seems to have never been adopted ‘Does +windows(10/server-2016) have privileged ports?’ (https://social.technet.microsoft.com/Forums/windowsserver/en-US/334f0770-eda9-475a-a27f-46b80ab7e872/does-windows10server2016-have-privileged-ports-?forum=ws2016). In Microsoft Windows it is the level of the firewall that handles port -access restrictions, not the level of the operating system's kernel. +access restrictions, not the level of the operating system’s kernel. Turning this short server program into something really useful is simple. Imagine a server that first reads a file name from the client @@ -1004,8 +1004,8 @@ contents of the named file across the net. The server-side processing could also be the execution of a command that is transmitted across the network. From this example, you can see how simple it is to open up a security hole on your machine. If you allow clients to connect to your -machine and execute arbitrary commands, anyone would be free to do 'rm --rf *'. +machine and execute arbitrary commands, anyone would be free to do ‘rm +-rf *’. The client side connects to port number 8888 on the server side and sends the name of the desired file to be sent across the same TCP @@ -1058,16 +1058,16 @@ the first email the server has in store: close(POPService) } - We redefine the record separators 'RS' and 'ORS' because the protocol + We redefine the record separators ‘RS’ and ‘ORS’ because the protocol (POP) requires CR-LF to separate lines. After identifying yourself to -the email service, the command 'retr 1' instructs the service to send +the email service, the command ‘retr 1’ instructs the service to send the first of all your email messages in line. If the service replies -with something other than '+OK', the program exits; maybe there is no +with something other than ‘+OK’, the program exits; maybe there is no email. Otherwise, the program first announces that it intends to finish -reading email, and then redefines 'RS' in order to read the entire email +reading email, and then redefines ‘RS’ in order to read the entire email as multiline input in one record. From the POP RFC, we know that the body of the email always ends with a single line containing a single -dot. The program looks for this using 'RS = "\r\n\\.\r\n"'. When it +dot. The program looks for this using ‘RS = "\r\n\\.\r\n"’. When it finds this sequence in the mail message, it quits. You can invoke this program as often as you like; it does not delete the message it reads, but instead leaves it on the server. @@ -1078,14 +1078,14 @@ but instead leaves it on the server. simple when email was young in the 20th century. These days, unencrypted plaintext authentication is usually disallowed on non-secure connections. Since encryption of network connections is not supported -in 'gawk', you should not use 'gawk' to write such scripts. We left +in ‘gawk’, you should not use ‘gawk’ to write such scripts. We left this node as it is because it demonstrates how application level protocols work in principle (a command being issued by the client followed by a reply coming back). Unfortunately, modern application level protocols are much more flexible in the sequence of actions. For example, modern POP3 servers may introduce themselves with an unprompted initial line that arrives before the initial command. Dealing with such -variance is not worth the effort in 'gawk'. +variance is not worth the effort in ‘gawk’.  File: gawkinet.info, Node: Web page, Next: Primitive Service, Prev: Email, Up: Using Networking @@ -1105,7 +1105,7 @@ retrieving a web page. It uses the prehistoric syntax of HTTP 0.9, which almost all web servers still support. The most noticeable thing about it is that the program directs the request to the local proxy server whose name you insert in the special file name (which in turn -calls 'www.yahoo.com'): +calls ‘www.yahoo.com’): BEGIN { RS = ORS = "\r\n" @@ -1116,14 +1116,14 @@ calls 'www.yahoo.com'): close(HttpService) } - Again, lines are separated by a redefined 'RS' and 'ORS'. The 'GET' + Again, lines are separated by a redefined ‘RS’ and ‘ORS’. The ‘GET’ request that we send to the server is the only kind of HTTP request that existed when the web was created in the early 1990s. HTTP calls this -'GET' request a "method," which tells the service to transmit a web page +‘GET’ request a “method,” which tells the service to transmit a web page (here the home page of the Yahoo! search engine). Version 1.0 added -the request methods 'HEAD' and 'POST'. The current version of HTTP is -1.1,(1)(2) and knows the additional request methods 'OPTIONS', 'PUT', -'DELETE', and 'TRACE'. You can fill in any valid web address, and the +the request methods ‘HEAD’ and ‘POST’. The current version of HTTP is +1.1,(1)(2) and knows the additional request methods ‘OPTIONS’, ‘PUT’, +‘DELETE’, and ‘TRACE’. You can fill in any valid web address, and the program prints the HTML code of that page to your screen. Notice the similarity between the responses of the POP and HTTP @@ -1132,7 +1132,7 @@ and then you get the body of the page in HTML. The lines of the headers also have the same form as in POP. There is the name of a parameter, then a colon, and finally the value of that parameter. - Images ('.png' or '.gif' files) can also be retrieved this way, but + Images (‘.png’ or ‘.gif’ files) can also be retrieved this way, but then you get binary data that should be redirected into a file. Another application is calling a CGI (Common Gateway Interface) script on some server. CGI scripts are used when the contents of a web page are not @@ -1154,11 +1154,11 @@ obsolete by RFC 2616, an update without any substantial changes. (2) Version 2.0 of HTTP (https://en.wikipedia.org/wiki/HTTP/2) was defined in RFC7540 (https://tools.ietf.org/html/rfc7540) and was derived -from Google's SPDY (https://en.wikipedia.org/wiki/SPDY) protocol. It is +from Google’s SPDY (https://en.wikipedia.org/wiki/SPDY) protocol. It is said to be widely supported. As of 2020 the most popular web sites still identify themselves as supporting HTTP/1.1. Version 3.0 of HTTP (https://en.wikipedia.org/wiki/HTTP/3) is still a draft and was derived -from Google's QUIC (https://en.wikipedia.org/wiki/QUIC) protocol. +from Google’s QUIC (https://en.wikipedia.org/wiki/QUIC) protocol.  File: gawkinet.info, Node: Primitive Service, Next: Interacting Service, Prev: Web page, Up: Using Networking @@ -1167,12 +1167,12 @@ File: gawkinet.info, Node: Primitive Service, Next: Interacting Service, Prev =========================== Now we know enough about HTTP to set up a primitive web service that -just says '"Hello, world"' when someone connects to it with a browser. +just says ‘"Hello, world"’ when someone connects to it with a browser. Compared to the situation in the preceding node, our program changes the role. It tries to behave just like the server we have observed. Since we are setting up a server here, we have to insert the port number in -the 'localport' field of the special file name. The other two fields -(HOSTNAME and REMOTEPORT) have to contain a '0' because we do not know +the ‘localport’ field of the special file name. The other two fields +(HOSTNAME and REMOTEPORT) have to contain a ‘0’ because we do not know in advance which host will connect to our service. In the early 1990s, all a server had to do was send an HTML document @@ -1191,7 +1191,7 @@ The steps are as follows: bytes will be sent. The header is terminated as usual with an empty line. - 3. Send the '"Hello, world"' body in HTML. The useless 'while' loop + 3. Send the ‘"Hello, world"’ body in HTML. The useless ‘while’ loop swallows the request of the browser. We could actually omit the loop, and on most machines the program would still work. First, start the following program: @@ -1215,7 +1215,7 @@ The steps are as follows: point to (the browser needs to know on which port our server is listening for requests). If this does not work, the browser probably tries to connect to a proxy server that does not know -your machine. If so, change the browser's configuration so that the +your machine. If so, change the browser’s configuration so that the browser does not try to use a proxy to connect to your machine.  @@ -1233,13 +1233,13 @@ Applications and Techniques::. * CGI Lib:: A simple CGI library. Setting up a web service that allows user interaction is more -difficult and shows us the limits of network access in 'gawk'. In this -node, we develop a main program (a 'BEGIN' pattern and its action) that +difficult and shows us the limits of network access in ‘gawk’. In this +node, we develop a main program (a ‘BEGIN’ pattern and its action) that will become the core of event-driven execution controlled by a graphical user interface (GUI). Each HTTP event that the user triggers by some action within the browser is received in this central procedure. Parameters and menu choices are extracted from this request, and an -appropriate measure is taken according to the user's choice: +appropriate measure is taken according to the user’s choice: BEGIN { if (MyHost == "") { @@ -1289,7 +1289,7 @@ appropriate measure is taken according to the user's choice: This web server presents menu choices in the form of HTML links. Therefore, it has to tell the browser the name of the host it is residing on. When starting the server, the user may supply the name of -the host from the command line with 'gawk -v MyHost="Rumpelstilzchen"'. +the host from the command line with ‘gawk -v MyHost="Rumpelstilzchen"’. If the user does not do this, the server looks up the name of the host it is running on for later use as a web address in HTML documents. The same applies to the port number. These values are inserted later into @@ -1297,7 +1297,7 @@ the HTML content of the web pages to refer to the home system. Each server that is built around this core has to initialize some application-dependent variables (such as the default home page) in a -function 'SetUpServer()', which is called immediately before entering +function ‘SetUpServer()’, which is called immediately before entering the infinite loop of the server. For now, we will write an instance that initiates a trivial interaction. With this home page, the client user can click on two possible choices, and receive the current date @@ -1316,13 +1316,13 @@ either in human-readable format or in seconds since 1970: On the first run through the main loop, the default line terminators are set and the default home page is copied to the actual home page. -Since this is the first run, 'GETARG["Method"]' is not initialized yet, +Since this is the first run, ‘GETARG["Method"]’ is not initialized yet, hence the case selection over the method does nothing. Now that the home page is initialized, the server can start communicating to a client browser. It does so by printing the HTTP header into the network connection -('print ... |& HttpService'). This command blocks execution of the +(‘print ... |& HttpService’). This command blocks execution of the server script until a client connects. If you compare this server script with the primitive one we wrote @@ -1336,15 +1336,15 @@ always displaying the same time of day although time advances each second. Having supplied the initial home page to the browser with a valid -document stored in the parameter 'Prompt', it closes the connection and +document stored in the parameter ‘Prompt’, it closes the connection and waits for the next request. When the request comes, a log line is printed that allows us to see which request the server receives. The -final step in the loop is to call the function 'CGI_setup()', which +final step in the loop is to call the function ‘CGI_setup()’, which reads all the lines of the request (coming from the browser), processes -them, and stores the transmitted parameters in the array 'PARAM'. The +them, and stores the transmitted parameters in the array ‘PARAM’. The complete text of these application-independent functions can be found in *note A Simple CGI Library: CGI Lib. For now, we use a simplified -version of 'CGI_setup()': +version of ‘CGI_setup()’: function CGI_setup( method, uri, version, i) { delete GETARG; delete MENU; delete PARAM @@ -1370,26 +1370,26 @@ version of 'CGI_setup()': of request parameters. The rest of the function serves the purpose of filling the global parameters with the extracted new values. To accomplish this, the name of the requested resource is split into parts -and stored for later evaluation. If the request contains a '?', then +and stored for later evaluation. If the request contains a ‘?’, then the request has CGI variables seamlessly appended to the web address. -Everything in front of the '?' is split up into menu items, and -everything behind the '?' is a list of 'VARIABLE=VALUE' pairs (separated -by '&') that also need splitting. This way, CGI variables are isolated +Everything in front of the ‘?’ is split up into menu items, and +everything behind the ‘?’ is a list of ‘VARIABLE=VALUE’ pairs (separated +by ‘&’) that also need splitting. This way, CGI variables are isolated and stored. This procedure lacks recognition of special characters that are transmitted in coded form(1). Here, any optional request header and body parts are ignored. We do not need header parameters and the request body. However, when refining our approach or working with the -'POST' and 'PUT' methods, reading the header and body becomes +‘POST’ and ‘PUT’ methods, reading the header and body becomes inevitable. Header parameters should then be stored in a global array as well as the body. On each subsequent run through the main loop, one request from a -browser is received, evaluated, and answered according to the user's +browser is received, evaluated, and answered according to the user’s choice. This can be done by letting the value of the HTTP method guide -the main loop into execution of the procedure 'HandleGET()', which -evaluates the user's choice. In this case, we have only one +the main loop into execution of the procedure ‘HandleGET()’, which +evaluates the user’s choice. In this case, we have only one hierarchical level of menus, but in the general case, menus are nested. -The menu choices at each level are separated by '/', just as in file +The menu choices at each level are separated by ‘/’, just as in file names. Notice how simple it is to construct menus of arbitrary depth: function HandleGET() { @@ -1402,18 +1402,18 @@ names. Notice how simple it is to construct menus of arbitrary depth: The disadvantage of this approach is that our server is slow and can handle only one request at a time. Its main advantage, however, is that -the server consists of just one 'gawk' program. No need for installing -an 'httpd', and no need for static separate HTML files, CGI scripts, or -'root' privileges. This is rapid prototyping. This program can be +the server consists of just one ‘gawk’ program. No need for installing +an ‘httpd’, and no need for static separate HTML files, CGI scripts, or +‘root’ privileges. This is rapid prototyping. This program can be started on the same host that runs your browser. Then let your browser point to . It is also possible to include images into the HTML pages. Most -browsers support the not very well-known '.xbm' format, which may +browsers support the not very well-known ‘.xbm’ format, which may contain only monochrome pictures but is an ASCII format. Binary images are possible but not so easy to handle. Another way of including images is to generate them with a tool such as GNUPlot, by calling the tool -with the 'system()' function or through a pipe. +with the ‘system()’ function or through a pipe. ---------- Footnotes ---------- @@ -1426,27 +1426,27 @@ File: gawkinet.info, Node: CGI Lib, Prev: Interacting Service, Up: Interactin -------------------------- HTTP is like being married: you have to be able to handle whatever - you're given, while being very careful what you send back. - -- _Phil Smith III, + you’re given, while being very careful what you send back. + — _Phil Smith III, _ In *note A Web Service with Interaction: Interacting Service, we saw -the function 'CGI_setup()' as part of the web server "core logic" +the function ‘CGI_setup()’ as part of the web server “core logic” framework. The code presented there handles almost everything necessary -for CGI requests. One thing it doesn't do is handle encoded characters -in the requests. For example, an '&' is encoded as a percent sign -followed by the hexadecimal value: '%26'. These encoded values should +for CGI requests. One thing it doesn’t do is handle encoded characters +in the requests. For example, an ‘&’ is encoded as a percent sign +followed by the hexadecimal value: ‘%26’. These encoded values should be decoded. Following is a simple library to perform these tasks. This code is used for all web server examples throughout the rest of this Info file. If you want to use it for your own web server, store the -source code into a file named 'inetlib.awk'. Then you can include these +source code into a file named ‘inetlib.awk’. Then you can include these functions into your code by placing the following statement into your program (on the first line of your script): @include inetlib.awk But beware, this mechanism is only possible if you invoke your web -server script with 'igawk' instead of the usual 'awk' or 'gawk'. Here +server script with ‘igawk’ instead of the usual ‘awk’ or ‘gawk’. Here is the code: # CGI Library and core of a web server @@ -1531,10 +1531,10 @@ is the code: MENU[i] = _CGI_decode(MENU[i]) } - This isolates details in a single function, 'CGI_setup()'. Decoding + This isolates details in a single function, ‘CGI_setup()’. Decoding of encoded characters is pushed off to a helper function, -'_CGI_decode()'. The use of the leading underscore ('_') in the -function name is intended to indicate that it is an "internal" function, +‘_CGI_decode()’. The use of the leading underscore (‘_’) in the +function name is intended to indicate that it is an “internal” function, although there is nothing to enforce this: function _CGI_decode(str, hexdigs, i, pre, code1, code2, @@ -1567,10 +1567,10 @@ although there is nothing to enforce this: This works by splitting the string apart around an encoded character. The two digits are converted to lowercase characters and looked up in a -string of hex digits. Note that '0' is not in the string on purpose; -'index()' returns zero when it's not found, automatically giving the +string of hex digits. Note that ‘0’ is not in the string on purpose; +‘index()’ returns zero when it’s not found, automatically giving the correct value! Once the hexadecimal value is converted from characters -in a string into a numerical value, 'sprintf()' converts the value back +in a string into a numerical value, ‘sprintf()’ converts the value back into a real character. The following is a simple test harness for the above functions: @@ -1590,21 +1590,21 @@ above functions: And this is the result when we run it: $ gawk -f testserv.awk - -| MENU["4"] = www.gnu.org - -| MENU["5"] = cgi-bin - -| MENU["6"] = foo - -| MENU["1"] = http - -| MENU["2"] = - -| MENU["3"] = - -| PARAM["1"] = p1=stuff - -| PARAM["2"] = p2=stuff&junk - -| PARAM["3"] = percent=a % sign - -| GETARG["p1"] = stuff - -| GETARG["percent"] = a % sign - -| GETARG["p2"] = stuff&junk - -| GETARG["Method"] = GET - -| GETARG["Version"] = 1.0 - -| GETARG["URI"] = http://www.gnu.org/cgi-bin/foo?p1=stuff& + ⊣ MENU["4"] = www.gnu.org + ⊣ MENU["5"] = cgi-bin + ⊣ MENU["6"] = foo + ⊣ MENU["1"] = http + ⊣ MENU["2"] = + ⊣ MENU["3"] = + ⊣ PARAM["1"] = p1=stuff + ⊣ PARAM["2"] = p2=stuff&junk + ⊣ PARAM["3"] = percent=a % sign + ⊣ GETARG["p1"] = stuff + ⊣ GETARG["percent"] = a % sign + ⊣ GETARG["p2"] = stuff&junk + ⊣ GETARG["Method"] = GET + ⊣ GETARG["Version"] = 1.0 + ⊣ GETARG["URI"] = http://www.gnu.org/cgi-bin/foo?p1=stuff& p2=stuff%26junk&percent=a %25 sign  @@ -1615,7 +1615,7 @@ File: gawkinet.info, Node: Simple Server, Next: Caveats, Prev: Interacting Se In the preceding node, we built the core logic for event-driven GUIs. In this node, we finally extend the core to a real application. No one -would actually write a commercial web server in 'gawk', but it is +would actually write a commercial web server in ‘gawk’, but it is instructive to see that it is feasible in principle. The application is ELIZA, the famous program by Joseph Weizenbaum @@ -1646,19 +1646,19 @@ and append the following code: TopFooter = "" } - 'SetUpServer()' is similar to the previous example, except for -calling another function, 'SetUpEliza()'. This approach can be used to + ‘SetUpServer()’ is similar to the previous example, except for +calling another function, ‘SetUpEliza()’. This approach can be used to implement other kinds of servers. The only changes needed to do so are -hidden in the functions 'SetUpServer()' and 'HandleGET()'. Perhaps it -might be necessary to implement other HTTP methods. The 'igawk' program -that comes with 'gawk' may be useful for this process. +hidden in the functions ‘SetUpServer()’ and ‘HandleGET()’. Perhaps it +might be necessary to implement other HTTP methods. The ‘igawk’ program +that comes with ‘gawk’ may be useful for this process. When extending this example to a complete application, the first -thing to do is to implement the function 'SetUpServer()' to initialize +thing to do is to implement the function ‘SetUpServer()’ to initialize the HTML pages and some variables. These initializations determine the way your HTML pages look (colors, titles, menu items, etc.). - The function 'HandleGET()' is a nested case selection that decides + The function ‘HandleGET()’ is a nested case selection that decides which page the user wants to see next. Each nesting level refers to a menu level of the GUI. Each case implements a certain action of the menu. At the deepest level of case selection, the handler essentially @@ -1699,7 +1699,7 @@ Initially the user does not say anything; then ELIZA resets its money counter and asks the user to tell what comes to mind open-heartedly. The subsequent answers are converted to uppercase characters and stored for later comparison. ELIZA presents the bill when being confronted -with a sentence that contains the phrase "shut up." Otherwise, it looks +with a sentence that contains the phrase “shut up.” Otherwise, it looks for keywords in the sentence, conjugates the rest of the sentence, remembers the keyword for later use, and finally selects an answer from the set of possible answers: @@ -1747,9 +1747,9 @@ the set of possible answers: return answer } - In the long but simple function 'SetUpEliza()', you can see tables -for conjugation, keywords, and answers.(1) The associative array 'k' -contains indices into the array of answers 'r'. To choose an answer, + In the long but simple function ‘SetUpEliza()’, you can see tables +for conjugation, keywords, and answers.(1) The associative array ‘k’ +contains indices into the array of answers ‘r’. To choose an answer, ELIZA just picks an index randomly: function SetUpEliza() { @@ -1786,8 +1786,8 @@ ELIZA just picks an index randomly: } Some interesting remarks and details (including the original source -code of ELIZA) are found on Mark Humphrys's home page 'How my program -passed the Turing Test' (https://computing.dcu.ie/~humphrys/eliza.html). +code of ELIZA) are found on Mark Humphrys’s home page ‘How my program +passed the Turing Test’ (https://computing.dcu.ie/~humphrys/eliza.html). Wikipedia provides much background information about ELIZA (https://en.wikipedia.org/wiki/ELIZA), including the original design of the software and its early implementations. @@ -1795,7 +1795,7 @@ the software and its early implementations. ---------- Footnotes ---------- (1) The version shown here is abbreviated. The full version comes -with the 'gawk' distribution. +with the ‘gawk’ distribution.  File: gawkinet.info, Node: Caveats, Next: Challenges, Prev: Simple Server, Up: Using Networking @@ -1809,19 +1809,19 @@ The behavior of a networked application sometimes looks noncausal because it is not reproducible in a strong sense. Whether a network application works or not sometimes depends on the following: - * How crowded the underlying network is + • How crowded the underlying network is - * If the party at the other end is running or not + • If the party at the other end is running or not - * The state of the party at the other end + • The state of the party at the other end The most difficult problems for a beginner arise from the hidden -states of the underlying network. After closing a TCP connection, it's +states of the underlying network. After closing a TCP connection, it’s often necessary to wait a short while before reopening the connection. Even more difficult is the establishment of a connection that previously -ended with a "broken pipe." Those connections have to "time out" for a +ended with a “broken pipe.” Those connections have to “time out” for a minute or so before they can reopen. Check this with the command -'netstat -a', which provides a list of still-active connections. +‘netstat -a’, which provides a list of still-active connections.  File: gawkinet.info, Node: Challenges, Prev: Caveats, Up: Using Networking @@ -1835,7 +1835,7 @@ Loebner Prize is the first formal instantiation of a Turing Test. Hugh Loebner agreed with The Cambridge Center for Behavioral Studies to underwrite a contest designed to implement the Turing Test. Dr. Loebner pledged a Grand Prize of $100,000 for the first computer whose responses -were indistinguishable from a human's. Each year an annual prize of +were indistinguishable from a human’s. Each year an annual prize of $2000 and a bronze medal is awarded to the _most_ human computer. The winner of the annual contest is the best entry relative to other entries that year, irrespective of how good it is in an absolute sense. Here is @@ -1887,20 +1887,20 @@ behave so much like a human being that it can win this prize. It is quite common to let these programs talk to each other via network connections. But during the competition itself, the program and its computer have to be present at the place the competition is held. We -all would love to see a 'gawk' program win in such an event. Maybe it +all would love to see a ‘gawk’ program win in such an event. Maybe it is up to you to accomplish this? Some other ideas for useful networked applications: - * Read the file 'doc/awkforai.txt' in earlier 'gawk' + • Read the file ‘doc/awkforai.txt’ in earlier ‘gawk’ distributions.(1) It was written by Ronald P. Loui (at the time, Associate Professor of Computer Science, at Washington University in St. Louis, ) and summarizes why he taught - 'gawk' to students of Artificial Intelligence. Here are some + ‘gawk’ to students of Artificial Intelligence. Here are some passages from the text: The GAWK manual can be consumed in a single lab session and the language can be mastered by the next morning by the - average student. GAWK's automatic initialization, implicit + average student. GAWK’s automatic initialization, implicit coercion, I/O support and lack of pointers forgive many of the mistakes that young programmers are likely to make. Those who have seen C but not mastered it are happy to see that GAWK @@ -1910,17 +1910,17 @@ is up to you to accomplish this? There are further simple answers. Probably the best is the fact that increasingly, undergraduate AI programming is involving the Web. Oren Etzioni (University of Washington, - Seattle) has for a while been arguing that the "softbot" is - replacing the mechanical engineers' robot as the most + Seattle) has for a while been arguing that the “softbot” is + replacing the mechanical engineers’ robot as the most glamorous AI testbed. If the artifact whose behavior needs to be controlled in an intelligent way is the software agent, then a language that is well-suited to controlling the software environment is the appropriate language. That would imply a scripting language. If the robot is KAREL, then the - right language is "turn left; turn right." If the robot is + right language is “turn left; turn right.” If the robot is Netscape, then the right language is something that can - generate 'netscape -remote - 'openURL(http://cs.wustl.edu/~loui)'' with elan. + generate ‘netscape -remote + 'openURL(http://cs.wustl.edu/~loui)'’ with elan. ... AI programming requires high-level thinking. There have always been a few gifted programmers who can write high-level @@ -1934,17 +1934,17 @@ is up to you to accomplish this? strings. A language that provides the best support for string processing in the end provides the best support for logic, for the exploration of various logics, and for most forms of - symbolic processing that AI might choose to call "reasoning" - instead of "logic." The implication is that PROLOG, which + symbolic processing that AI might choose to call “reasoning” + instead of “logic.” The implication is that PROLOG, which saves the AI programmer from having to write a unifier, saves perhaps two dozen lines of GAWK code at the expense of strongly biasing the logic and representational expressiveness of any approach. - Now that 'gawk' itself can connect to the Internet, it should be + Now that ‘gawk’ itself can connect to the Internet, it should be obvious that it is suitable for writing intelligent web agents. - * 'awk' is strong at pattern recognition and string processing. So, + • ‘awk’ is strong at pattern recognition and string processing. So, it is well suited to the classic problem of language translation. A first try could be a program that knows the 100 most frequent English words and their counterparts in German or French. The @@ -1955,9 +1955,9 @@ is up to you to accomplish this? in return. As soon as this works, more effort can be spent on a real translation program. - * Another dialogue-oriented application (on the verge of ridicule) is - the email "support service." Troubled customers write an email to - an automatic 'gawk' service that reads the email. It looks for + • Another dialogue-oriented application (on the verge of ridicule) is + the email “support service.” Troubled customers write an email to + an automatic ‘gawk’ service that reads the email. It looks for keywords in the mail and assembles a reply email accordingly. By carefully investigating the email header, and repeating these keywords through the reply email, it is rather simple to give the @@ -1968,7 +1968,7 @@ is up to you to accomplish this? ---------- Footnotes ---------- - (1) The file is no longer distributed with 'gawk', since the + (1) The file is no longer distributed with ‘gawk’, since the copyright on the file is not clear.  @@ -1981,24 +1981,24 @@ In this major node, we look at a number of self-contained scripts, with an emphasis on concise networking. Along the way, we work towards creating building blocks that encapsulate often-needed functions of the networking world, show new techniques that broaden the scope of problems -that can be solved with 'gawk', and explore leading edge technology that +that can be solved with ‘gawk’, and explore leading edge technology that may shape the future of networking. We often refer to the site-independent core of the server that we built in *note A Simple Web Server: Simple Server. When building new and nontrivial servers, we always copy this building block and append -new instances of the two functions 'SetUpServer()' and 'HandleGET()'. +new instances of the two functions ‘SetUpServer()’ and ‘HandleGET()’. This makes a lot of sense, since this scheme of event-driven -execution provides 'gawk' with an interface to the most widely accepted -standard for GUIs: the web browser. Now, 'gawk' can rival even Tcl/Tk. +execution provides ‘gawk’ with an interface to the most widely accepted +standard for GUIs: the web browser. Now, ‘gawk’ can rival even Tcl/Tk. - Tcl and 'gawk' have much in common. Both are simple scripting + Tcl and ‘gawk’ have much in common. Both are simple scripting languages that allow us to quickly solve problems with short programs. -But Tcl has Tk on top of it, and 'gawk' had nothing comparable up to +But Tcl has Tk on top of it, and ‘gawk’ had nothing comparable up to now. While Tcl needs a large and ever-changing library (Tk, which was -originally bound to the X Window System), 'gawk' needs just the -networking interface and some kind of browser on the client's side. +originally bound to the X Window System), ‘gawk’ needs just the +networking interface and some kind of browser on the client’s side. Besides better portability, the most important advantage of this approach (embracing well-established standards such HTTP and HTML) is that _we do not need to change the language_. We let others do the work @@ -2024,20 +2024,20 @@ File: gawkinet.info, Node: PANIC, Next: GETURL, Prev: Some Applications and T 3.1 PANIC: An Emergency Web Server ================================== -At first glance, the '"Hello, world"' example in *note A Primitive Web +At first glance, the ‘"Hello, world"’ example in *note A Primitive Web Service: Primitive Service, seems useless. By adding just a few lines, we can turn it into something useful. The PANIC program tells everyone who connects that the local site is not working. When a web server breaks down, it makes a difference if -customers get a strange "network unreachable" message, or a short +customers get a strange “network unreachable” message, or a short message telling them that the server has a problem. In such an emergency, the hard disk and everything on it (including the regular web service) may be unavailable. Rebooting the web server off a USB drive makes sense in this setting. To use the PANIC program as an emergency web server, all you need are -the 'gawk' executable and the program below on a USB drive. By default, +the ‘gawk’ executable and the program below on a USB drive. By default, it connects to port 8080. A different value may be supplied on the command line: @@ -2070,7 +2070,7 @@ GETURL is a versatile building block for shell scripts that need to retrieve files from the Internet. It takes a web address as a command-line parameter and tries to retrieve the contents of this address. The contents are printed to standard output, while the header -is printed to '/dev/stderr'. A surrounding shell script could analyze +is printed to ‘/dev/stderr’. A surrounding shell script could analyze the contents and extract the text or the links. An ASCII browser could be written around GETURL. But more interestingly, web robots are straightforward to write on top of GETURL. On the Internet, you can find @@ -2080,10 +2080,10 @@ usually much more complex internally and at least 10 times as big. At first, GETURL checks if it was called with exactly one web address. Then, it checks if the user chose to use a special proxy server whose name is handed over in a variable. By default, it is -assumed that the local machine serves as proxy. GETURL uses the 'GET' +assumed that the local machine serves as proxy. GETURL uses the ‘GET’ method by default to access the web page. By handing over the name of a -different method (such as 'HEAD'), it is possible to choose a different -behavior. With the 'HEAD' method, the user does not receive the body of +different method (such as ‘HEAD’), it is possible to choose a different +behavior. With the ‘HEAD’ method, the user does not receive the body of the page content, but does receive the header: BEGIN { @@ -2114,7 +2114,7 @@ the page content, but does receive the header: This program can be changed as needed, but be careful with the last lines. Make sure transmission of binary data is not corrupted by additional line breaks. Even as it is now, the byte sequence -'"\r\n\r\n"' would disappear if it were contained in binary data. Don't +‘"\r\n\r\n"’ would disappear if it were contained in binary data. Don’t get caught in a trap when trying a quick fix on this one.  @@ -2131,27 +2131,27 @@ GNU/Linux in embedded PCs. These systems are small and usually do not have a keyboard or a display. Therefore it is difficult to set up their configuration. There are several widespread ways to set them up: - * DIP switches + • DIP switches - * Read Only Memories such as EPROMs + • Read Only Memories such as EPROMs - * Serial lines or some kind of keyboard + • Serial lines or some kind of keyboard - * Network connections via 'telnet' or SNMP + • Network connections via ‘telnet’ or SNMP - * HTTP connections with HTML GUIs + • HTTP connections with HTML GUIs In this node, we look at a solution that uses HTTP connections to control variables of an embedded system that are stored in a file. Since embedded systems have tight limits on resources like memory, it is difficult to employ advanced techniques such as SNMP and HTTP servers. -'gawk' fits in quite nicely with its single executable which needs just +‘gawk’ fits in quite nicely with its single executable which needs just a short script to start working. The following program stores the variables in a file, and a concurrent process in the embedded system may read the file. The program uses the site-independent part of the simple web server that we developed in *note A Web Service with Interaction: Interacting Service. As mentioned there, all we have to do is to write -two new procedures 'SetUpServer()' and 'HandleGET()': +two new procedures ‘SetUpServer()’ and ‘HandleGET()’: function SetUpServer() { TopHeader = "Remote Configuration" @@ -2168,18 +2168,18 @@ two new procedures 'SetUpServer()' and 'HandleGET()': if (ConfigFile == "") ConfigFile = "config.asc" } - The function 'SetUpServer()' initializes the top level HTML texts as + The function ‘SetUpServer()’ initializes the top level HTML texts as usual. It also initializes the name of the file that contains the configuration parameters and their values. In case the user supplies a name from the command line, that name is used. The file is expected to contain one parameter per line, with the name of the parameter in column one and the value in column two. - The function 'HandleGET()' reflects the structure of the menu tree as + The function ‘HandleGET()’ reflects the structure of the menu tree as usual. The first menu choice tells the user what this is all about. The second choice reads the configuration file line by line and stores the parameters and their values. Notice that the record separator for -this file is '"\n"', in contrast to the record separator for HTTP. The +this file is ‘"\n"’, in contrast to the record separator for HTTP. The third menu choice builds an HTML table to show the contents of the configuration file just read. The fourth choice does the real work of changing parameters, and the last one just saves the configuration into @@ -2244,15 +2244,15 @@ bookmark file with pointers to interesting web sites. It is impossible to regularly check by hand if any of these sites have changed. A program is needed to automatically look at the headers of web pages and tell which ones have changed. URLCHK does the comparison after using -GETURL with the 'HEAD' method to retrieve the header. +GETURL with the ‘HEAD’ method to retrieve the header. Like GETURL, this program first checks that it is called with exactly one command-line parameter. URLCHK also takes the same command-line -variables 'Proxy' and 'ProxyPort' as GETURL, because these variables are +variables ‘Proxy’ and ‘ProxyPort’ as GETURL, because these variables are handed over to GETURL for each URL that gets checked. The one and only parameter is the name of a file that contains one line for each URL. In the first column, we find the URL, and the second and third columns hold -the length of the URL's body when checked for the two last times. Now, +the length of the URL’s body when checked for the two last times. Now, we follow this plan: 1. Read the URLs from the file and remember their most recent lengths @@ -2301,11 +2301,11 @@ those lines that differ in their second and third columns: Another thing that may look strange is the way GETURL is called. Before calling GETURL, we have to check if the proxy variables need to be passed on. If so, we prepare strings that will become part of the -command line later. In 'GetHeader', we store these strings together +command line later. In ‘GetHeader’, we store these strings together with the longest part of the command line. Later, in the loop over the -URLs, 'GetHeader' is appended with the URL and a redirection operator to -form the command that reads the URL's header over the Internet. GETURL -always sends the headers to '/dev/stderr'. That is the reason why we +URLs, ‘GetHeader’ is appended with the URL and a redirection operator to +form the command that reads the URL’s header over the Internet. GETURL +always sends the headers to ‘/dev/stderr’. That is the reason why we need the redirection operator to have the header piped in. This program is not perfect because it assumes that changing URLs @@ -2335,20 +2335,20 @@ the Bourne shell: Notice that the regular expression for URLs is rather crude. A precise regular expression is much more complex. But this one works rather well. One problem is that it is unable to find internal links of -an HTML document. Another problem is that 'ftp', 'telnet', 'news', -'mailto', and other kinds of links are missing in the regular +an HTML document. Another problem is that ‘ftp’, ‘telnet’, ‘news’, +‘mailto’, and other kinds of links are missing in the regular expression. However, it is straightforward to add them, if doing so is necessary for other tasks. This program reads an HTML file and prints all the HTTP links that it -finds. It relies on 'gawk''s ability to use regular expressions as the -record separator. With 'RS' set to a regular expression that matches +finds. It relies on ‘gawk’’s ability to use regular expressions as the +record separator. With ‘RS’ set to a regular expression that matches links, the second action is executed each time a non-empty link is -found. We can find the matching link itself in 'RT'. +found. We can find the matching link itself in ‘RT’. - The action could use the 'system()' function to let another GETURL + The action could use the ‘system()’ function to let another GETURL retrieve the page, but here we use a different approach. This simple -program prints shell commands that can be piped into 'sh' for execution. +program prints shell commands that can be piped into ‘sh’ for execution. This way it is possible to first extract the links, wrap shell commands around them, and pipe all the shell commands into a file. After editing the file, execution of the file retrieves only those files that we @@ -2358,10 +2358,10 @@ pages like this: gawk -f geturl.awk http://www.suse.de | gawk -f webgrab.awk | sh After this, you will find the contents of all referenced documents in -files named 'doc*.html' even if they do not contain HTML code. The most +files named ‘doc*.html’ even if they do not contain HTML code. The most annoying thing is that we always have to pass the proxy to GETURL. If you do not like to see the headers of the web pages appear on the -screen, you can redirect them to '/dev/null'. Watching the headers +screen, you can redirect them to ‘/dev/null’. Watching the headers appear can be quite interesting, because it reveals interesting details such as which web server the companies use. Now, it is clear how the clever marketing people use web robots to determine the market shares of @@ -2371,11 +2371,11 @@ Microsoft and Netscape in the web server market. firewall. After attaching a browser to port 80, we usually catch a glimpse of the bright side of the server (its home page). With a tool like GETURL at hand, we are able to discover some of the more concealed -or even "indecent" services (i.e., lacking conformity to standards of +or even “indecent” services (i.e., lacking conformity to standards of quality). It can be exciting to see the fancy CGI scripts that lie there, revealing the inner workings of the server, ready to be called: - * With a command such as: + • With a command such as: gawk -f geturl.awk http://any.host.on.the.net/cgi-bin/ @@ -2386,18 +2386,18 @@ there, revealing the inner workings of the server, ready to be called: If there are subdirectories with configuration data of the web server, this can also be quite interesting to read. - * The well-known Apache web server usually has its CGI files in the - directory '/cgi-bin'. There you can often find the scripts - 'test-cgi' and 'printenv'. Both tell you some things about the + • The well-known Apache web server usually has its CGI files in the + directory ‘/cgi-bin’. There you can often find the scripts + ‘test-cgi’ and ‘printenv’. Both tell you some things about the current connection and the installation of the web server. Just call: gawk -f geturl.awk http://any.host.on.the.net/cgi-bin/test-cgi gawk -f geturl.awk http://any.host.on.the.net/cgi-bin/printenv - * Sometimes it is even possible to retrieve system files like the web - server's log file--possibly containing customer data--or even the - file '/etc/passwd'. (We don't recommend this!) + • Sometimes it is even possible to retrieve system files like the web + server’s log file—possibly containing customer data—or even the + file ‘/etc/passwd’. (We don’t recommend this!) *Caution:* Although this may sound funny or simply irrelevant, we are talking about severe security holes. Try to explore your own system @@ -2435,28 +2435,28 @@ File: gawkinet.info, Node: STATIST, Next: MAZE, Prev: WEBGRAB, Up: Some Appl -10 5 0 5 10"] -In the HTTP server examples we've shown thus far, we never present an +In the HTTP server examples we’ve shown thus far, we never present an image to the browser and its user. Presenting images is one task. Generating images that reflect some user input and presenting these dynamically generated images is another. In this node, we use GNUPlot -for generating '.png', '.ps', or '.gif' files.(1) +for generating ‘.png’, ‘.ps’, or ‘.gif’ files.(1) The program we develop takes the statistical parameters of two samples and computes the t-test statistics. As a result, we get the probabilities that the means and the variances of both samples are the same. In order to let the user check plausibility, the program presents an image of the distributions. The statistical computation follows -'Numerical Recipes in C: The Art of Scientific Computing' by William H. +‘Numerical Recipes in C: The Art of Scientific Computing’ by William H. Press, Saul A. Teukolsky, William T. Vetterling, and Brian P. Flannery. -Since 'gawk' does not have a built-in function for the computation of -the beta function, we use the 'ibeta()' function of GNUPlot. As a side +Since ‘gawk’ does not have a built-in function for the computation of +the beta function, we use the ‘ibeta()’ function of GNUPlot. As a side effect, we learn how to use GNUPlot as a sophisticated calculator. The -comparison of means is done as in 'tutest', paragraph 14.2, page 613, -and the comparison of variances is done as in 'ftest', page 611 in -'Numerical Recipes'. +comparison of means is done as in ‘tutest’, paragraph 14.2, page 613, +and the comparison of variances is done as in ‘ftest’, page 611 in +‘Numerical Recipes’. As usual, we take the site-independent code for servers and append -our own functions 'SetUpServer()' and 'HandleGET()': +our own functions ‘SetUpServer()’ and ‘HandleGET()’: function SetUpServer() { TopHeader = "Statistics with GAWK" @@ -2472,20 +2472,20 @@ our own functions 'SetUpServer()' and 'HandleGET()': } Here, you see the menu structure that the user sees. Later, we will -see how the program structure of the 'HandleGET()' function reflects the +see how the program structure of the ‘HandleGET()’ function reflects the menu structure. What is missing here is the link for the image we generate. In an event-driven environment, request, generation, and delivery of images are separated. - Notice the way we initialize the 'GnuPlot' command string for the + Notice the way we initialize the ‘GnuPlot’ command string for the pipe. By default, GNUPlot outputs the generated image via standard -output, as well as the results of 'print'(ed) calculations via standard +output, as well as the results of ‘print’(ed) calculations via standard error. The redirection causes standard error to be mixed into standard -output, enabling us to read results of calculations with 'getline'. By +output, enabling us to read results of calculations with ‘getline’. By initializing the statistical parameters with some meaningful defaults, we make sure the user gets an image the first time he uses the program. - Following is the rather long function 'HandleGET()', which implements + Following is the rather long function ‘HandleGET()’, which implements the contents of this service by reacting to the different kinds of requests from the browser. Before you start playing with this script, make sure that your browser supports JavaScript and that it also has @@ -2572,16 +2572,16 @@ menu choice. The third menu choice shows us that generation and presentation of an image are two separate actions. While the latter takes place quite instantly in the third menu choice, the former takes place in the much longer second choice. Image data passes from the -generating action to the presenting action via the variable 'Image' that -contains a complete '.png' image, which is otherwise stored in a file. -If you prefer '.ps' or '.gif' images over the default '.png' images, you +generating action to the presenting action via the variable ‘Image’ that +contains a complete ‘.png’ image, which is otherwise stored in a file. +If you prefer ‘.ps’ or ‘.gif’ images over the default ‘.png’ images, you may select these options by uncommenting the appropriate lines. But remember to do so in two places: when telling GNUPlot which kind of images to generate, and when transmitting the image at the end of the program. - Looking at the end of the program, the way we pass the 'Content-type' -to the browser is a bit unusual. It is appended to the 'OK' of the + Looking at the end of the program, the way we pass the ‘Content-type’ +to the browser is a bit unusual. It is appended to the ‘OK’ of the first header line to make sure the type information becomes part of the header. The other variables that get transmitted across the network are made empty, because in this case we do not have an HTML document to @@ -2589,22 +2589,22 @@ transmit, but rather raw image data to contain in the body. Most of the work is done in the second menu choice. It starts with a strange JavaScript code snippet. When first implementing this server, -we used a short '""' here. But then +we used a short ‘""’ here. But then browsers got smarter and tried to improve on speed by requesting the image and the HTML code at the same time. When doing this, the browser tries to build up a connection for the image request while the request for the HTML text is not yet completed. The browser tries to connect to -the 'gawk' server on port 8080 while port 8080 is still in use for +the ‘gawk’ server on port 8080 while port 8080 is still in use for transmission of the HTML text. The connection for the image cannot be -built up, so the image appears as "broken" in the browser window. We +built up, so the image appears as “broken” in the browser window. We solved this problem by telling the browser to open a separate window for the image, but only after a delay of 1000 milliseconds. By this time, the server should be ready for serving the next request. But there is one more subtlety in the JavaScript code. Each time the JavaScript code opens a window for the image, the name of the image is -appended with a timestamp ('systime()'). Why this constant change of -name for the image? Initially, we always named the image 'Image', but +appended with a timestamp (‘systime()’). Why this constant change of +name for the image? Initially, we always named the image ‘Image’, but then the Netscape browser noticed the name had _not_ changed since the previous request and displayed the previous image (caching behavior). The server core is implemented so that browsers are told _not_ to cache @@ -2626,24 +2626,24 @@ available. Therefore we insert the JavaScript code here to initiate the opening of the image in a separate window. Then, we prepare some variables that will be passed to GNUPlot for calculation of the probabilities. Prior to reading the results, we must temporarily change -'RS' because GNUPlot separates lines with newlines. After instructing -GNUPlot to generate a '.png' (or '.ps' or '.gif') image, we initiate the +‘RS’ because GNUPlot separates lines with newlines. After instructing +GNUPlot to generate a ‘.png’ (or ‘.ps’ or ‘.gif’) image, we initiate the insertion of some text, explaining the resulting probabilities. The -final 'plot' command actually generates the image data. This raw binary +final ‘plot’ command actually generates the image data. This raw binary has to be read in carefully without adding, changing, or deleting a -single byte. Hence the unusual initialization of 'Image' and completion -with a 'while' loop. +single byte. Hence the unusual initialization of ‘Image’ and completion +with a ‘while’ loop. When using this server, it soon becomes clear that it is far from being perfect. It mixes source code of six scripting languages or protocols: - * GNU 'awk' implements a server for the protocol: - * HTTP which transmits: - * HTML text which contains a short piece of: - * JavaScript code opening a separate window. - * A Bourne shell script is used for piping commands into: - * GNUPlot to generate the image to be opened. + • GNU ‘awk’ implements a server for the protocol: + • HTTP which transmits: + • HTML text which contains a short piece of: + • JavaScript code opening a separate window. + • A Bourne shell script is used for piping commands into: + • GNUPlot to generate the image to be opened. After all this work, the GNUPlot image opens in the JavaScript window where it can be viewed by the user. @@ -2656,11 +2656,11 @@ negative variances causes invalid results. ---------- Footnotes ---------- (1) Due to licensing problems, the default installation of GNUPlot -disables the generation of '.gif' files. If your installed version does -not accept 'set term gif', just download and install the most recent +disables the generation of ‘.gif’ files. If your installed version does +not accept ‘set term gif’, just download and install the most recent version of GNUPlot and the GD library (https://libgd.github.io/) by Thomas Boutell. Otherwise you still have the chance to generate some -ASCII-art style images with GNUPlot by using 'set term dumb'. (We tried +ASCII-art style images with GNUPlot by using ‘set term dumb’. (We tried it and it worked.)  @@ -2670,19 +2670,19 @@ File: gawkinet.info, Node: MAZE, Next: MOBAGWHO, Prev: STATIST, Up: Some App =================================================== In the long run, every program becomes rococo, and then rubble. - -- _Alan Perlis_ + — _Alan Perlis_ - By now, we know how to present arbitrary 'Content-type's to a + By now, we know how to present arbitrary ‘Content-type’s to a browser. In this node, our server presents a 3D world to our browser. The 3D world is described in a scene description language (VRML, Virtual Reality Modeling Language) that allows us to travel through a perspective view of a 2D maze with our browser. Browsers with a VRML plugin enable exploration of this technology. We could do one of those -boring 'Hello world' examples here, that are usually presented when +boring ‘Hello world’ examples here, that are usually presented when introducing novices to VRML. If you have never written any VRML code, have a look at the VRML FAQ. Presenting a static VRML scene is a bit -trivial; in order to expose 'gawk''s capabilities, we will present a -dynamically generated VRML scene. The function 'SetUpServer()' is very +trivial; in order to expose ‘gawk’’s capabilities, we will present a +dynamically generated VRML scene. The function ‘SetUpServer()’ is very simple because it only sets the default HTML page and initializes the random number generator. As usual, the surrounding server lets you browse the maze. @@ -2699,14 +2699,14 @@ browse the maze. srand() } - The function 'HandleGET()' is a bit longer because it first computes + The function ‘HandleGET()’ is a bit longer because it first computes the maze and afterwards generates the VRML code that is sent across the network. As shown in the STATIST example (*note STATIST::), we set the type of the content to VRML and then store the VRML representation of the maze as the page content. We assume that the maze is stored in a 2D array. Initially, the maze consists of walls only. Then, we add an entry and an exit to the maze and let the rest of the work be done by -the function 'MakeMaze()'. Now, only the wall fields are left in the +the function ‘MakeMaze()’. Now, only the wall fields are left in the maze. By iterating over the these fields, we generate one line of VRML code for each wall field. @@ -2756,8 +2756,8 @@ code for each wall field. } } - Finally, we have a look at 'MakeMaze()', the function that generates -the 'Maze' array. When entered, this function assumes that the array + Finally, we have a look at ‘MakeMaze()’, the function that generates +the ‘Maze’ array. When entered, this function assumes that the array has been initialized so that each element represents a wall element and the maze is initially full of wall elements. Only the entrance and the exit of the maze should have been left free. The parameters of the @@ -2774,7 +2774,7 @@ but it is done much simpler recursively. Notice that elements with coordinates that are both odd are assumed to be on our way through the maze and the generating process cannot -terminate as long as there is such an element not being 'delete'd. All +terminate as long as there is such an element not being ‘delete’d. All other elements are potentially part of the wall. function MakeMaze(x, y) { @@ -2805,52 +2805,52 @@ File: gawkinet.info, Node: MOBAGWHO, Next: STOXPRED, Prev: MAZE, Up: Some Ap make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. - -- _C.A.R. Hoare_ + — _C.A.R. Hoare_ - A "mobile agent" is a program that can be dispatched from a computer + A “mobile agent” is a program that can be dispatched from a computer and transported to a remote server for execution. This is called -"migration", which means that a process on another system is started +“migration”, which means that a process on another system is started that is independent from its originator. Ideally, it wanders through a network while working for its creator or owner. In places like the UMBC Agent Web, people are quite confident that (mobile) agents are a software engineering paradigm that enables us to significantly increase the efficiency of our work. Mobile agents could become the mediators between users and the networking world. For an unbiased view at this -technology, see the remarkable paper 'Mobile Agents: Are they a good -idea?'.(1) +technology, see the remarkable paper ‘Mobile Agents: Are they a good +idea?’.(1) When trying to migrate a process from one system to another, a server process is needed on the receiving side. Depending on the kind of server process, several ways of implementation come to mind. How the process is implemented depends upon the kind of server process: - * HTTP can be used as the protocol for delivery of the migrating + • HTTP can be used as the protocol for delivery of the migrating process. In this case, we use a common web server as the receiving server process. A universal CGI script mediates between migrating process and web server. Each server willing to accept migrating agents makes this universal service available. HTTP supplies the - 'POST' method to transfer some data to a file on the web server. - When a CGI script is called remotely with the 'POST' method instead - of the usual 'GET' method, data is transmitted from the client - process to the standard input of the server's CGI script. So, to + ‘POST’ method to transfer some data to a file on the web server. + When a CGI script is called remotely with the ‘POST’ method instead + of the usual ‘GET’ method, data is transmitted from the client + process to the standard input of the server’s CGI script. So, to implement a mobile agent, we must not only write the agent program to start on the client side, but also the CGI script to receive the agent on the server side. - * The 'PUT' method can also be used for migration. HTTP does not - require a CGI script for migration via 'PUT'. However, with common + • The ‘PUT’ method can also be used for migration. HTTP does not + require a CGI script for migration via ‘PUT’. However, with common web servers there is no advantage to this solution, because web servers such as Apache require explicit activation of a special - 'PUT' script. + ‘PUT’ script. - * 'Agent Tcl' pursues a different course; it relies on a dedicated + • ‘Agent Tcl’ pursues a different course; it relies on a dedicated server process with a dedicated protocol specialized for receiving mobile agents. Our agent example abuses a common web server as a migration tool. So, it needs a universal CGI script on the receiving side (the web -server). The receiving script is activated with a 'POST' request when -placed into a location like '/httpd/cgi-bin/PostAgent.sh'. +server). The receiving script is activated with a ‘POST’ request when +placed into a location like ‘/httpd/cgi-bin/PostAgent.sh’. #!/bin/sh MobAg=/tmp/MobileAgent.$$ @@ -2862,9 +2862,9 @@ placed into a location like '/httpd/cgi-bin/PostAgent.sh'. gawk 'BEGIN { print "\r\nAgent started" }' rm $MobAg # delete script file of agent - By making its process id ('$$') part of the unique file name, the + By making its process id (‘$$’) part of the unique file name, the script avoids conflicts between concurrent instances of the script. -First, all lines from standard input (the mobile agent's source code) +First, all lines from standard input (the mobile agent’s source code) are copied into this unique file. Then, the agent is started as a concurrent process and a short message reporting this fact is sent to the submitting client. Finally, the script file of the mobile agent is @@ -2881,14 +2881,14 @@ Self-Reference Each migrating instance of an agent is started in a way that enables it to read its own source code from standard input and use the code for subsequent migrations. This is necessary because it - needs to treat the agent's code as data to transmit. 'gawk' is not + needs to treat the agent’s code as data to transmit. ‘gawk’ is not the ideal language for such a job. Lisp and Tcl are more suitable because they do not make a distinction between program code and data. Independence After migration, the agent is not linked to its former home in any - way. By reporting 'Agent started', it waves "Goodbye" to its + way. By reporting ‘Agent started’, it waves “Goodbye” to its origin. The originator may choose to terminate or not. The originating agent itself is started just like any other @@ -2897,10 +2897,10 @@ letting the name of the original host migrate with the agent, the agent that migrates to a host far away from its origin can report the result back home. Having arrived at the end of the journey, the agent establishes a connection and reports the results. This is the reason -for determining the name of the host with 'uname -n' and storing it in -'MyOrigin' for later use. We may also set variables with the '-v' +for determining the name of the host with ‘uname -n’ and storing it in +‘MyOrigin’ for later use. We may also set variables with the ‘-v’ option from the command line. This interactivity is only of importance -in the context of starting a mobile agent; therefore this 'BEGIN' +in the context of starting a mobile agent; therefore this ‘BEGIN’ pattern and its action do not take part in migration: BEGIN { @@ -2919,7 +2919,7 @@ pattern and its action do not take part in migration: } } - Since 'gawk' cannot manipulate and transmit parts of the program + Since ‘gawk’ cannot manipulate and transmit parts of the program directly, the source code is read and stored in strings. Therefore, the program scans itself for the beginning and the ending of functions. Each line in between is appended to the code string until the end of the @@ -2939,7 +2939,7 @@ that the order of the functions is preserved during migration: The web server code in *note A Web Service with Interaction: Interacting Service, was first developed as a site-independent core. -Likewise, the 'gawk'-based mobile agent starts with an agent-independent +Likewise, the ‘gawk’-based mobile agent starts with an agent-independent core, to which can be appended application-dependent functions. What follows is the only application-independent function needed for the mobile agent: @@ -2963,54 +2963,54 @@ mobile agent: close(HttpService) } - The 'migrate()' function prepares the aforementioned strings + The ‘migrate()’ function prepares the aforementioned strings containing the program code and transmits them to a server. A -consequence of this modular approach is that the 'migrate()' function -takes some parameters that aren't needed in this application, but that -will be in future ones. Its mandatory parameter 'Destination' holds the +consequence of this modular approach is that the ‘migrate()’ function +takes some parameters that aren’t needed in this application, but that +will be in future ones. Its mandatory parameter ‘Destination’ holds the name (or IP address) of the server that the agent wants as a host for -its code. The optional parameter 'MobCode' may contain some 'gawk' code +its code. The optional parameter ‘MobCode’ may contain some ‘gawk’ code that is inserted during migration in front of all other code. The -optional parameter 'Label' may contain a string that tells the agent +optional parameter ‘Label’ may contain a string that tells the agent what to do in program execution after arrival at its new home site. One of the serious obstacles in implementing a framework for mobile agents is that it does not suffice to migrate the code. It is also necessary -to migrate the state of execution of the agent. In contrast to 'Agent -Tcl', this program does not try to migrate the complete set of +to migrate the state of execution of the agent. In contrast to ‘Agent +Tcl’, this program does not try to migrate the complete set of variables. The following conventions apply: - * Each variable in an agent program is local to the current host and + • Each variable in an agent program is local to the current host and does _not_ migrate. - * The array 'MOBFUN' shown above is an exception. It is handled by - the function 'migrate()' and does migrate with the application. + • The array ‘MOBFUN’ shown above is an exception. It is handled by + the function ‘migrate()’ and does migrate with the application. - * The other exception is the array 'MOBVAR'. Each variable that + • The other exception is the array ‘MOBVAR’. Each variable that takes part in migration has to be an element of this array. - 'migrate()' also takes care of this. + ‘migrate()’ also takes care of this. - Now it's clear what happens to the 'Label' parameter of the function -'migrate()'. It is copied into 'MOBVAR["Label"]' and travels alongside + Now it’s clear what happens to the ‘Label’ parameter of the function +‘migrate()’. It is copied into ‘MOBVAR["Label"]’ and travels alongside the other data. Since traveling takes place via HTTP, records must be -separated with '"\r\n"' in 'RS' and 'ORS' as usual. The code assembly +separated with ‘"\r\n"’ in ‘RS’ and ‘ORS’ as usual. The code assembly for migration takes place in three steps: - * Iterate over 'MOBFUN' to collect all functions verbatim. + • Iterate over ‘MOBFUN’ to collect all functions verbatim. - * Prepare a 'BEGIN' pattern and put assignments to mobile variables + • Prepare a ‘BEGIN’ pattern and put assignments to mobile variables into the action part. - * Transmission itself resembles GETURL: the header with the request - and the 'Content-length' is followed by the body. In case there is + • Transmission itself resembles GETURL: the header with the request + and the ‘Content-length’ is followed by the body. In case there is any reply over the network, it is read completely and echoed to standard output to avoid irritating the server. The application-independent framework is now almost complete. What -follows is the 'END' pattern which executes when the mobile agent has +follows is the ‘END’ pattern which executes when the mobile agent has finished reading its own code. First, it checks whether it is already running on a remote host or not. In case initialization has not yet -taken place, it starts 'MyInit()'. Otherwise (later, on a remote host), -it starts 'MyJob()': +taken place, it starts ‘MyInit()’. Otherwise (later, on a remote host), +it starts ‘MyJob()’: END { if (ARGC != 2) exit # stop when called with wrong parameters @@ -3020,9 +3020,9 @@ it starts 'MyJob()': MyJob() # so we do our job } - All that's left to extend the framework into a complete application -is to write two application-specific functions: 'MyInit()' and -'MyJob()'. Keep in mind that the former is executed once on the + All that’s left to extend the framework into a complete application +is to write two application-specific functions: ‘MyInit()’ and +‘MyJob()’. Keep in mind that the former is executed once on the originating host, while the latter is executed after each migration: function MyInit() { @@ -3036,11 +3036,11 @@ originating host, while the latter is executed after each migration: } As mentioned earlier, this agent takes the name of its origin -('MyOrigin') with it. Then, it takes the name of its first destination +(‘MyOrigin’) with it. Then, it takes the name of its first destination and goes there for further work. Notice that this name has the port number of the web server appended to the name of the server, because the -function 'migrate()' needs it this way to create the 'HttpService' -variable. Finally, it waits for the result to arrive. The 'MyJob()' +function ‘migrate()’ needs it this way to create the ‘HttpService’ +variable. Finally, it waits for the result to arrive. The ‘MyJob()’ function runs on the remote host: function MyJob() { @@ -3060,20 +3060,20 @@ function runs on the remote host: } } - After migrating, the first thing to do in 'MyJob()' is to delete the + After migrating, the first thing to do in ‘MyJob()’ is to delete the name of the current host from the list of hosts to visit. Now, it is -time to start the real work by appending the host's name to the result +time to start the real work by appending the host’s name to the result string, and reading line by line who is logged in on this host. A very -annoying circumstance is the fact that the elements of 'MOBVAR' cannot -hold the newline character ('"\n"'). If they did, migration of this -string would not work because the string wouldn't obey the syntax rule -for a string in 'gawk'. 'SUBSEP' is used as a temporary replacement. +annoying circumstance is the fact that the elements of ‘MOBVAR’ cannot +hold the newline character (‘"\n"’). If they did, migration of this +string would not work because the string wouldn’t obey the syntax rule +for a string in ‘gawk’. ‘SUBSEP’ is used as a temporary replacement. If the list of hosts to visit holds at least one more entry, the agent migrates to that place to go on working there. Otherwise, we -replace the 'SUBSEP's with a newline character in the resulting string, +replace the ‘SUBSEP’s with a newline character in the resulting string, and report it to the originating host, whose name is stored in -'MOBVAR["MyOrigin"]'. +‘MOBVAR["MyOrigin"]’. ---------- Footnotes ---------- @@ -3094,21 +3094,21 @@ File: gawkinet.info, Node: STOXPRED, Next: PROTBASE, Prev: MOBAGWHO, Up: Som ape-descendent life forms are so amazingly primitive that they still think digital watches are a pretty neat idea. - This planet has -- or rather had -- a problem, which was this: most + This planet has — or rather had — a problem, which was this: most of the people living on it were unhappy for pretty much of the time. Many solutions were suggested for this problem, but most of these were largely concerned with the movements of small green - pieces of paper, which is odd because it wasn't the small green + pieces of paper, which is odd because it wasn’t the small green pieces of paper that were unhappy. - -- _Douglas Adams, 'The Hitch Hiker's Guide to the Galaxy'_ + — _Douglas Adams, ‘The Hitch Hiker’s Guide to the Galaxy’_ Valuable services on the Internet are usually _not_ implemented as mobile agents. There are much simpler ways of implementing services. -All Unix systems provide, for example, the 'cron' service. Unix system +All Unix systems provide, for example, the ‘cron’ service. Unix system users can write a list of tasks to be done each day, each week, twice a -day, or just once. The list is entered into a file named 'crontab'. +day, or just once. The list is entered into a file named ‘crontab’. For example, to distribute a newsletter on a daily basis this way, use -'cron' for calling a script each day early in the morning: +‘cron’ for calling a script each day early in the morning: # run at 8 am on weekdays, distribute the newsletter 0 8 * * 1-5 $HOME/bin/daily.job >> $HOME/log/newsletter 2>&1 @@ -3159,7 +3159,7 @@ anybody. ... The script as a whole is rather long. In order to ease the pain of -studying other people's source code, we have broken the script up into +studying other people’s source code, we have broken the script up into meaningful parts which are invoked one after the other. The basic structure of the script is as follows: @@ -3173,16 +3173,16 @@ structure of the script is as follows: } The earlier parts store data into variables and arrays which are -subsequently used by later parts of the script. The 'Init()' function +subsequently used by later parts of the script. The ‘Init()’ function first checks if the script is invoked correctly (without any parameters). If not, it informs the user of the correct usage. What follows are preparations for the retrieval of the historical quote data. -The names of the 30 stock shares are stored in an array 'name' along -with the current date in 'day', 'month', and 'year'. +The names of the 30 stock shares are stored in an array ‘name’ along +with the current date in ‘day’, ‘month’, and ‘year’. All users who are separated from the Internet by a firewall and have to direct their Internet accesses to a proxy must supply the name of the -proxy to this script with the '-v Proxy=NAME' option. For most users, +proxy to this script with the ‘-v Proxy=NAME’ option. For most users, the default proxy and port number should suffice. function Init() { @@ -3221,22 +3221,22 @@ values): Lines contain values of the same time instant, whereas columns are separated by commas and contain the kind of data that is described in -the header (first) line. At first, 'gawk' is instructed to separate -columns by commas ('FS = ","'). In the loop that follows, a connection +the header (first) line. At first, ‘gawk’ is instructed to separate +columns by commas (‘FS = ","’). In the loop that follows, a connection to the Yahoo server is first opened, then a download takes place, and finally the connection is closed. All this happens once for each ticker symbol. In the body of this loop, an Internet address is built up as a string according to the rules of the Yahoo server. The starting and ending date are chosen to be exactly the same, but one year apart in the -past. All the action is initiated within the 'printf' command which +past. All the action is initiated within the ‘printf’ command which transmits the request for data to the Yahoo server. - In the inner loop, the server's data is first read and then scanned + In the inner loop, the server’s data is first read and then scanned line by line. Only lines which have six columns and the name of a month in the first column contain relevant data. This data is stored in the -two-dimensional array 'quote'; one dimension being time, the other being -the ticker symbol. During retrieval of the first stock's data, the -calendar names of the time instances are stored in the array 'day' +two-dimensional array ‘quote’; one dimension being time, the other being +the ticker symbol. During retrieval of the first stock’s data, the +calendar names of the time instances are stored in the array ‘day’ because we need them later. function ReadQuotes() { @@ -3289,8 +3289,8 @@ algorithm: _If a stock fell yesterday, assume it will also fall today; if it rose yesterday, assume it will rise today_. (Feel free to replace this algorithm with a smarter one.) If a stock changed in the same direction on two consecutive days, this is an indication which should be -highlighted. Two-day advances are stored in 'hot' and two-day declines -in 'avoid'. +highlighted. Two-day advances are stored in ‘hot’ and two-day declines +in ‘avoid’. The rest of the function is a sanity check. It counts the number of correct predictions in relation to the total number of predictions one @@ -3329,9 +3329,9 @@ could have made in the year before. } } - At this point the hard work has been done: the array 'predict' + At this point the hard work has been done: the array ‘predict’ contains the predictions for all the ticker symbols. It is up to the -function 'Report()' to find some nice words to present the desired +function ‘Report()’ to find some nice words to present the desired information. function Report() { @@ -3368,8 +3368,8 @@ information. report = report "you should visit a doctor who can treat your ailment." } - The function 'SendMail()' goes through the list of customers and -opens a pipe to the 'mail' command for each of them. Each one receives + The function ‘SendMail()’ goes through the list of customers and +opens a pipe to the ‘mail’ command for each of them. Each one receives an email message with a proper subject heading and is addressed with his full name. @@ -3396,7 +3396,7 @@ to complete, depending upon network traffic and the speed of the available Internet link. The quality of the prediction algorithm is likely to be disappointing. Try to find a better one. Should you find one with a success rate of more than 50%, please tell us about it! It -is only for the sake of curiosity, of course. ':-)' +is only for the sake of curiosity, of course. ‘:-)’  File: gawkinet.info, Node: PROTBASE, Prev: STOXPRED, Up: Some Applications and Techniques @@ -3406,15 +3406,15 @@ File: gawkinet.info, Node: PROTBASE, Prev: STOXPRED, Up: Some Applications an Inside every large problem is a small problem struggling to get out.(1) - -- _With apologies to C.A.R. Hoare_ + — _With apologies to C.A.R. Hoare_ - Yahoo's database of stock market data is just one among the many + Yahoo’s database of stock market data is just one among the many large databases on the Internet. Another one is located at NCBI (National Center for Biotechnology Information). Established in 1988 as a national resource for molecular biology information, NCBI creates public databases, conducts research in computational biology, develops software tools for analyzing genome data, and disseminates biomedical -information. In this section, we look at one of NCBI's public services, +information. In this section, we look at one of NCBI’s public services, which is called BLAST (Basic Local Alignment Search Tool). You probably know that the information necessary for reproducing @@ -3436,35 +3436,35 @@ chose to offer their database service through popular Internet protocols. There are four basic ways to use the so-called BLAST services: - * The easiest way to use BLAST is through the web. Users may simply + • The easiest way to use BLAST is through the web. Users may simply point their browsers at the NCBI home page and link to the BLAST pages. NCBI provides a stable URL that may be used to perform BLAST searches without interactive use of a web browser. This is what we will do later in this section. A demonstration client and - a 'README' file demonstrate how to access this URL. + a ‘README’ file demonstrate how to access this URL. - * Currently, 'blastcl3' is the standard network BLAST client. You - can download 'blastcl3' from the anonymous FTP location. + • Currently, ‘blastcl3’ is the standard network BLAST client. You + can download ‘blastcl3’ from the anonymous FTP location. - * BLAST 2.0 can be run locally as a full executable and can be used + • BLAST 2.0 can be run locally as a full executable and can be used to run BLAST searches against private local databases, or downloaded copies of the NCBI databases. BLAST 2.0 executables may be found on the NCBI anonymous FTP server. - * The NCBI BLAST Email server is the best option for people without + • The NCBI BLAST Email server is the best option for people without convenient access to the web. A similarity search can be performed by sending a properly formatted mail message containing the nucleotide or protein query sequence to . The query sequence is compared against the specified database using the BLAST algorithm and the results are returned in an email message. For more information on formulating email BLAST searches, - you can send a message consisting of the word "HELP" to the same + you can send a message consisting of the word “HELP” to the same address, . Our starting point is the demonstration client mentioned in the first -option. The 'README' file that comes along with the client explains the +option. The ‘README’ file that comes along with the client explains the whole process in a nutshell. In the rest of this section, we first show -what such requests look like. Then we show how to use 'gawk' to +what such requests look like. Then we show how to use ‘gawk’ to implement a client in about 10 lines of code. Finally, we show how to interpret the result returned from the service. @@ -3472,10 +3472,10 @@ interpret the result returned from the service. amino acid and nucleic acid codes, with these exceptions: lower-case letters are accepted and are mapped into upper-case; a single hyphen or dash can be used to represent a gap of indeterminate length; and in -amino acid sequences, 'U' and '*' are acceptable letters (see below). +amino acid sequences, ‘U’ and ‘*’ are acceptable letters (see below). Before submitting a request, any numerical digits in the query sequence should either be removed or replaced by appropriate letter codes (e.g., -'N' for unknown nucleic acid residue or 'X' for unknown amino acid +‘N’ for unknown nucleic acid residue or ‘X’ for unknown amino acid residue). The nucleic acid codes supported are: A --> adenosine M --> A C (amino) @@ -3491,7 +3491,7 @@ residue). The nucleic acid codes supported are: Now you know the alphabet of nucleotide sequences. The last two lines of the following example query show such a sequence, which is obviously made up only of elements of the alphabet just described. -Store this example query into a file named 'protbase.request'. You are +Store this example query into a file named ‘protbase.request’. You are now ready to send it to the server with the demonstration client. PROGRAM blastn @@ -3503,38 +3503,38 @@ now ready to send it to the server with the demonstration client. caccaccatggacagcaaa The actual search request begins with the mandatory parameter -'PROGRAM' in the first column followed by the value 'blastn' (the name +‘PROGRAM’ in the first column followed by the value ‘blastn’ (the name of the program) for searching nucleic acids. The next line contains the -mandatory search parameter 'DATALIB' with the value 'month' for the +mandatory search parameter ‘DATALIB’ with the value ‘month’ for the newest nucleic acid sequences. The third line contains an optional -'EXPECT' parameter and the value desired for it. The fourth line -contains the mandatory 'BEGIN' directive, followed by the query sequence +‘EXPECT’ parameter and the value desired for it. The fourth line +contains the mandatory ‘BEGIN’ directive, followed by the query sequence in FASTA/Pearson format. Each line of information must be less than 80 characters in length. - The "month" database contains all new or revised sequences released + The “month” database contains all new or revised sequences released in the last 30 days and is useful for searching against new sequences. -There are five different blast programs, 'blastn' being the one that +There are five different blast programs, ‘blastn’ being the one that compares a nucleotide query sequence against a nucleotide sequence database. The last server directive that must appear in every request is the -'BEGIN' directive. The query sequence should immediately follow the -'BEGIN' directive and must appear in FASTA/Pearson format. A sequence +‘BEGIN’ directive. The query sequence should immediately follow the +‘BEGIN’ directive and must appear in FASTA/Pearson format. A sequence in FASTA/Pearson format begins with a single-line description. The description line, which is required, is distinguished from the lines of -sequence data that follow it by having a greater-than ('>') symbol in +sequence data that follow it by having a greater-than (‘>’) symbol in the first column. For the purposes of the BLAST server, the text of the description is arbitrary. - If you prefer to use a client written in 'gawk', just store the -following 10 lines of code into a file named 'protbase.awk' and use this -client instead. Invoke it with 'gawk -f protbase.awk protbase.request'. + If you prefer to use a client written in ‘gawk’, just store the +following 10 lines of code into a file named ‘protbase.awk’ and use this +client instead. Invoke it with ‘gawk -f protbase.awk protbase.request’. Then wait a minute and watch the result coming in. In order to -replicate the demonstration client's behavior as closely as possible, +replicate the demonstration client’s behavior as closely as possible, this client does not use a proxy server. We could also have extended the client program in *note Retrieving Web Pages: GETURL, to implement -the client request from 'protbase.awk' as a special case. +the client request from ‘protbase.awk’ as a special case. { request = request "\n" $0 } @@ -3560,7 +3560,7 @@ prints the complete result coming from the server. you can ignore. Then there are some comments about the query having been filtered to avoid spuriously high scores. After this, there is a reference to the paper that describes the software being used for -searching the data base. After a repetition of the original query's +searching the data base. After a repetition of the original query’s description we find the list of significant alignments: Sequences producing significant alignments: (bits) Value @@ -3597,9 +3597,9 @@ for the databases from which the sequences were derived. Patents pat|country|number GenInfo Backbone Id bbs|number - For example, an identifier might be 'gb|AC021182.14|AC021182', where -the 'gb' tag indicates that the identifier refers to a GenBank sequence, -'AC021182.14' is its GenBank ACCESSION, and 'AC021182' is the GenBank + For example, an identifier might be ‘gb|AC021182.14|AC021182’, where +the ‘gb’ tag indicates that the identifier refers to a GenBank sequence, +‘AC021182.14’ is its GenBank ACCESSION, and ‘AC021182’ is the GenBank LOCUS. The identifier contains no spaces, so that a space indicates the end of the identifier. @@ -3627,29 +3627,29 @@ fragment on chromosome 7. If you are still reading at this point, you are probably interested in finding out more about Computational Biology and you might appreciate the following hints. - 1. There is a book called 'Introduction to Computational Biology' by + 1. There is a book called ‘Introduction to Computational Biology’ by Michael S. Waterman, which is worth reading if you are seriously interested. You can find a good book review on the Internet. - 2. While Waterman's book explains the algorithms employed internally + 2. While Waterman’s book explains the algorithms employed internally in the database search engines, most practitioners prefer to approach the subject differently. The applied side of Computational Biology is called Bioinformatics, and emphasizes the tools available for day-to-day work as well as how to actually _use_ them. One of the very few affordable books on Bioinformatics - is 'Developing Bioinformatics Computer Skills'. + is ‘Developing Bioinformatics Computer Skills’. 3. The sequences _gawk_ and _gnuawk_ are in widespread use in the genetic material of virtually every earthly living being. Let us take this as a clear indication that the divine creator has - intended 'gawk' to prevail over other scripting languages such as - 'perl', 'tcl', or 'python' which are not even proper sequences. + intended ‘gawk’ to prevail over other scripting languages such as + ‘perl’, ‘tcl’, or ‘python’ which are not even proper sequences. (:-) ---------- Footnotes ---------- - (1) What C.A.R. Hoare actually said was "Inside every large program -is a small program struggling to get out." + (1) What C.A.R. Hoare actually said was “Inside every large program +is a small program struggling to get out.”  File: gawkinet.info, Node: Links, Next: GNU Free Documentation License, Prev: Some Applications and Techniques, Up: Top @@ -3660,19 +3660,19 @@ File: gawkinet.info, Node: Links, Next: GNU Free Documentation License, Prev: This section lists the URLs for various items discussed in this Info file. They are presented in the order in which they appear. -'Internet Programming with Python' +‘Internet Programming with Python’ -'Advanced Perl Programming' +‘Advanced Perl Programming’ -'Web Client Programming with Perl' +‘Web Client Programming with Perl’ -Richard Stevens's home page and book +Richard Stevens’s home page and book -Volume III of 'Internetworking with TCP/IP', by Comer and Stevens +Volume III of ‘Internetworking with TCP/IP’, by Comer and Stevens XBM Graphics File Format @@ -3681,7 +3681,7 @@ XBM Graphics File Format GNUPlot -Mark Humphrys' Eliza page +Mark Humphrys’ Eliza page Eliza on Wikipedia @@ -3715,7 +3715,7 @@ MiniSQL Market Share Surveys -'Numerical Recipes in C: The Art of Scientific Computing' +‘Numerical Recipes in C: The Art of Scientific Computing’ VRML @@ -3754,10 +3754,10 @@ FASTA/Pearson Format Fasta/Pearson Sequence in Java -Book Review of 'Introduction to Computational Biology' +Book Review of ‘Introduction to Computational Biology’ -'Developing Bioinformatics Computer Skills' +‘Developing Bioinformatics Computer Skills’  @@ -3768,7 +3768,7 @@ GNU Free Documentation License Version 1.3, 3 November 2008 - Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies @@ -3777,14 +3777,14 @@ GNU Free Documentation License 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other - functional and useful document "free" in the sense of freedom: to + functional and useful document “free” in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. - This License is a kind of "copyleft", which means that derivative + This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. @@ -3805,18 +3805,18 @@ GNU Free Documentation License be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The - "Document", below, refers to any such manual or work. Any member - of the public is a licensee, and is addressed as "you". You accept + “Document”, below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. - A "Modified Version" of the Document means any work containing the + A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. - A "Secondary Section" is a named appendix or a front-matter section + A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the - publishers or authors of the Document to the Document's overall + publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not @@ -3825,7 +3825,7 @@ GNU Free Documentation License of legal, commercial, philosophical, ethical or political position regarding them. - The "Invariant Sections" are certain Secondary Sections whose + The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it @@ -3833,13 +3833,13 @@ GNU Free Documentation License contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. - The "Cover Texts" are certain short passages of text that are + The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. - A "Transparent" copy of the Document means a machine-readable copy, + A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed @@ -3851,7 +3851,7 @@ GNU Free Documentation License been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not - "Transparent" is called "Opaque". + “Transparent” is called “Opaque”. Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, @@ -3864,23 +3864,23 @@ GNU Free Documentation License the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. - The "Title Page" means, for a printed book, the title page itself, + The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For - works in formats which do not have any title page as such, "Title - Page" means the text near the most prominent appearance of the - work's title, preceding the beginning of the body of the text. + works in formats which do not have any title page as such, “Title + Page” means the text near the most prominent appearance of the + work’s title, preceding the beginning of the body of the text. - The "publisher" means any person or entity that distributes copies + The “publisher” means any person or entity that distributes copies of the Document to the public. - A section "Entitled XYZ" means a named subunit of the Document + A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as - "Acknowledgements", "Dedications", "Endorsements", or "History".) - To "Preserve the Title" of such a section when you modify the - Document means that it remains a section "Entitled XYZ" according + “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) + To “Preserve the Title” of such a section when you modify the + Document means that it remains a section “Entitled XYZ” according to this definition. The Document may include Warranty Disclaimers next to the notice @@ -3910,7 +3910,7 @@ GNU Free Documentation License If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and - the Document's license notice requires Cover Texts, you must + the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly @@ -3982,15 +3982,15 @@ GNU Free Documentation License the Addendum below. G. Preserve in that license notice the full lists of Invariant - Sections and required Cover Texts given in the Document's + Sections and required Cover Texts given in the Document’s license notice. H. Include an unaltered copy of this License. - I. Preserve the section Entitled "History", Preserve its Title, + I. Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the - Title Page. If there is no section Entitled "History" in the + Title Page. If there is no section Entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the @@ -4000,12 +4000,12 @@ GNU Free Documentation License for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the - "History" section. You may omit a network location for a work + “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. - K. For any section Entitled "Acknowledgements" or "Dedications", + K. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. @@ -4014,11 +4014,11 @@ GNU Free Documentation License in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. - M. Delete any section Entitled "Endorsements". Such a section + M. Delete any section Entitled “Endorsements”. Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled - "Endorsements" or to conflict in title with any Invariant + “Endorsements” or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. @@ -4027,15 +4027,15 @@ GNU Free Documentation License appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their - titles to the list of Invariant Sections in the Modified Version's + titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles. - You may add a section Entitled "Endorsements", provided it contains + You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various - parties--for example, statements of peer review or that the text - has been approved by an organization as the authoritative - definition of a standard. + parties—for example, statements of peer review or that the text has + been approved by an organization as the authoritative definition of + a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of @@ -4073,10 +4073,10 @@ GNU Free Documentation License combined work. In the combination, you must combine any sections Entitled - "History" in the various original documents, forming one section - Entitled "History"; likewise combine any sections Entitled - "Acknowledgements", and any sections Entitled "Dedications". You - must delete all sections Entitled "Endorsements." + “History” in the various original documents, forming one section + Entitled “History”; likewise combine any sections Entitled + “Acknowledgements”, and any sections Entitled “Dedications”. You + must delete all sections Entitled “Endorsements.” 6. COLLECTIONS OF DOCUMENTS @@ -4097,16 +4097,16 @@ GNU Free Documentation License A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a - storage or distribution medium, is called an "aggregate" if the + storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the - legal rights of the compilation's users beyond what the individual + legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half - of the entire aggregate, the Document's Cover Texts may be placed + of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket @@ -4128,8 +4128,8 @@ GNU Free Documentation License this License or a notice or disclaimer, the original version will prevail. - If a section in the Document is Entitled "Acknowledgements", - "Dedications", or "History", the requirement (section 4) to + If a section in the Document is Entitled “Acknowledgements”, + “Dedications”, or “History”, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. @@ -4170,7 +4170,7 @@ GNU Free Documentation License Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered - version of this License "or any later version" applies to it, you + version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the @@ -4178,29 +4178,29 @@ GNU Free Documentation License choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that - proxy's public statement of acceptance of a version permanently + proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING - "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. - A "Massive Multiauthor Collaboration" (or "MMC") contained in the + A “Massive Multiauthor Collaboration” (or “MMC”) contained in the site means any set of copyrightable works thus published on the MMC site. - "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. - "Incorporate" means to publish or republish a Document, in whole or + “Incorporate” means to publish or republish a Document, in whole or in part, as part of another Document. - An MMC is "eligible for relicensing" if it is licensed under this + An MMC is “eligible for relicensing” if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover @@ -4227,7 +4227,7 @@ notices just after the title page: Free Documentation License''. If you have Invariant Sections, Front-Cover Texts and Back-Cover -Texts, replace the "with...Texts." line with this: +Texts, replace the “with...Texts.” line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts @@ -4433,63 +4433,63 @@ Index  Tag Table: -Node: Top1108 -Node: Preface4769 -Node: Introduction6144 -Node: Stream Communications7170 -Node: Datagram Communications8344 -Node: The TCP/IP Protocols9974 -Ref: The TCP/IP Protocols-Footnote-110658 -Node: Basic Protocols10815 -Ref: Basic Protocols-Footnote-112860 -Node: Ports12889 -Node: Making Connections14296 -Ref: Making Connections-Footnote-116854 -Ref: Making Connections-Footnote-216901 -Node: Using Networking17082 -Node: Gawk Special Files19405 -Node: Special File Fields21214 -Ref: table-inet-components25114 -Node: Comparing Protocols26426 -Node: File /inet/tcp26960 -Node: File /inet/udp27946 -Ref: File /inet/udp-Footnote-129658 -Node: TCP Connecting29912 -Node: Troubleshooting33347 -Ref: Troubleshooting-Footnote-136111 -Node: Interacting37068 -Node: Setting Up41426 -Node: Email45975 -Ref: Email-Footnote-148397 -Node: Web page49205 -Ref: Web page-Footnote-152025 -Ref: Web page-Footnote-252223 -Node: Primitive Service52717 -Node: Interacting Service55451 -Ref: Interacting Service-Footnote-164606 -Node: CGI Lib64638 -Node: Simple Server71638 -Ref: Simple Server-Footnote-179440 -Node: Caveats79541 -Node: Challenges80684 -Ref: Challenges-Footnote-189426 -Node: Some Applications and Techniques89527 -Node: PANIC91988 -Node: GETURL93714 -Node: REMCONF96347 -Node: URLCHK101843 -Node: WEBGRAB105687 -Node: STATIST110151 -Ref: STATIST-Footnote-1123300 -Node: MAZE123743 -Node: MOBAGWHO129968 -Ref: MOBAGWHO-Footnote-1143870 -Node: STOXPRED143938 -Node: PROTBASE158230 -Ref: PROTBASE-Footnote-1171397 -Node: Links171512 -Node: GNU Free Documentation License174403 -Node: Index199523 +Node: Top1138 +Node: Preface4831 +Node: Introduction6252 +Node: Stream Communications7282 +Node: Datagram Communications8466 +Node: The TCP/IP Protocols10114 +Ref: The TCP/IP Protocols-Footnote-110801 +Node: Basic Protocols10958 +Ref: Basic Protocols-Footnote-113023 +Node: Ports13054 +Node: Making Connections14474 +Ref: Making Connections-Footnote-117080 +Ref: Making Connections-Footnote-217127 +Node: Using Networking17317 +Node: Gawk Special Files19680 +Node: Special File Fields21541 +Ref: table-inet-components25534 +Node: Comparing Protocols26850 +Node: File /inet/tcp27384 +Node: File /inet/udp28374 +Ref: File /inet/udp-Footnote-130114 +Node: TCP Connecting30372 +Node: Troubleshooting33905 +Ref: Troubleshooting-Footnote-136697 +Node: Interacting37677 +Node: Setting Up42111 +Node: Email46750 +Ref: Email-Footnote-149196 +Node: Web page50016 +Ref: Web page-Footnote-152892 +Ref: Web page-Footnote-253090 +Node: Primitive Service53588 +Node: Interacting Service56344 +Ref: Interacting Service-Footnote-165601 +Node: CGI Lib65633 +Node: Simple Server72715 +Ref: Simple Server-Footnote-180574 +Node: Caveats80679 +Node: Challenges81841 +Ref: Challenges-Footnote-190644 +Node: Some Applications and Techniques90749 +Node: PANIC93244 +Node: GETURL94982 +Node: REMCONF97637 +Node: URLCHK103171 +Node: WEBGRAB107043 +Node: STATIST111585 +Ref: STATIST-Footnote-1124892 +Node: MAZE125347 +Node: MOBAGWHO131612 +Ref: MOBAGWHO-Footnote-1145781 +Node: STOXPRED145849 +Node: PROTBASE160242 +Ref: PROTBASE-Footnote-1173572 +Node: Links173691 +Node: GNU Free Documentation License176614 +Node: Index201937  End Tag Table diff --git a/doc/gawkinet.texi b/doc/gawkinet.texi index 324926fd..df22d4dd 100644 --- a/doc/gawkinet.texi +++ b/doc/gawkinet.texi @@ -943,7 +943,7 @@ like these have been used to teach TCP/IP networking and therefore you can still find much educational material of good quality on the Internet about such outdated services. The @uref{https://tf.nist.gov/tf-cgi/servers.cgi, list of servers} -that still support the legacy service +that still support the legacy service @uref{https://en.wikipedia.org/wiki/Daytime_Protocol, daytime} can be found at Wikipedia. We hesitated to use this service in this manual because it is hard to find servers that still support @@ -1241,7 +1241,7 @@ example, you can see how simple it is to open up a security hole on your machine. If you allow clients to connect to your machine and execute arbitrary commands, anyone would be free to do @samp{rm -rf *}. -The client side connects to port number 8888 on the server side and +The client side connects to port number 8888 on the server side and sends the name of the desired file to be sent across the same TCP connection. The main loop reads all content coming in from the TCP connection line-wise and prints it. @@ -4431,7 +4431,7 @@ They are presented in the order in which they appear. @item Mark Humphrys' Eliza page @uref{https://computing.dcu.ie/~humphrys/eliza.html} -@item Eliza on Wikipedia +@item Eliza on Wikipedia @uref{https://en.wikipedia.org/wiki/ELIZA} @item Java versions of Eliza with source code diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 5e1affc9..54187483 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -45,7 +45,7 @@ @ifnottex @set TIMES * @end ifnottex - + @c Let texinfo.tex give us full section titles @xrefautomaticsectiontitle on @@ -5236,7 +5236,7 @@ non-option argument, even if it begins with @samp{-}. @itemize @value{MINUS} @item However, when an option itself requires an argument, and the option is separated -from that argument on the command line by at least one space, the space +from that argument on the command line by at least one space, the space is ignored, and the argument is considered to be related to the option. Thus, in the invocation, @samp{gawk -F x}, the @samp{x} is treated as belonging to the @option{-F} option, not as a separate non-option argument. @@ -6099,10 +6099,10 @@ Subject: Re: [bug-gawk] Does gawk character classes follow this? > From: arnold@skeeve.com > Date: Fri, 15 Feb 2019 03:01:34 -0700 > Cc: pengyu.ut@gmail.com, bug-gawk@gnu.org -> +> > I get the feeling that there's something really bothering you, but > I don't understand what. -> +> > Can you clarify, please? I thought I already did: we cannot be expected to provide a definitive @@ -8588,7 +8588,7 @@ processing on the next record @emph{right now}. For example: @{ while ((start = index($0, "/*")) != 0) @{ out = substr($0, 1, start - 1) # leading part of the string - rest = substr($0, start + 2) # ... */ ... + rest = substr($0, start + 2) # ... */ ... while ((end = index(rest, "*/")) == 0) @{ # is */ in trailing part? # get more text if (getline <= 0) @{ @@ -9214,7 +9214,7 @@ on a per-command or per-connection basis. the attempt to read from the underlying device may succeed in a later attempt. This is a limitation, and it also means that you cannot use this to multiplex input from -two or more sources. @xref{Retrying Input} for a way to enable +two or more sources. @xref{Retrying Input} for a way to enable later I/O attempts to succeed. Assigning a timeout value prevents read operations from being @@ -11165,7 +11165,7 @@ intact, as part of the string: @example $ @kbd{nawk 'BEGIN @{ print "hello, \} > @kbd{world" @}'} -@print{} hello, +@print{} hello, @print{} world @end example @@ -22720,7 +22720,7 @@ $ cat @kbd{test.awk} @print{} rewound = 1 @print{} rewind() @print{} @} -@print{} +@print{} @print{} @{ print FILENAME, FNR, $0 @} $ @kbd{gawk -f rewind.awk -f test.awk data } @@ -25435,7 +25435,7 @@ exist: @example @c file eg/prog/id.awk -function fill_info_for_user(user, +function fill_info_for_user(user, pwent, fields, groupnames, grent, groups, i) @{ pwent = getpwnam(user) @@ -29445,20 +29445,20 @@ using ptys can help deal with buffering deadlocks. Suppose @command{gawk} were unable to add numbers. You could use a coprocess to do it. Here's an exceedingly -simple program written for that purpose: +simple program written for that purpose: @example $ @kbd{cat add.c} -#include - -int -main(void) -@{ - int x, y; - while (scanf("%d %d", & x, & y) == 2) - printf("%d\n", x + y); - return 0; -@} +#include + +int +main(void) +@{ + int x, y; + while (scanf("%d %d", & x, & y) == 2) + printf("%d\n", x + y); + return 0; +@} $ @kbd{cc -O add.c -o add} @ii{Compile the program} @end example @@ -29471,15 +29471,15 @@ $ @kbd{echo 1 2 |} @end example And it would deadlock, because @file{add.c} fails to call -@samp{setlinebuf(stdout)}. The @command{add} program freezes. +@samp{setlinebuf(stdout)}. The @command{add} program freezes. -Now try instead: +Now try instead: @example $ @kbd{echo 1 2 |} > @kbd{gawk -v cmd=add 'BEGIN @{ PROCINFO[cmd, "pty"] = 1 @}} > @kbd{ @{ print |& cmd; cmd |& getline x; print x @}'} -@print{} 3 +@print{} 3 @end example By using a pty, @command{gawk} fools the standard I/O library into @@ -30070,7 +30070,7 @@ Terence Kelly, the author of the persistent memory allocator @command{gawk} uses, provides the following advice about the backing file: @quotation -Regarding backing file size, I recommend making it far larger +Regarding backing file size, I recommend making it far larger than all of the data that will ever reside in it, assuming that the file system supports sparse files. The ``pay only for what you use'' aspect of sparse files ensures that the @@ -30158,8 +30158,8 @@ ACM @cite{Queue} magazine, Vol. 20 No. 2 (March/April 2022), @uref{https://dl.acm.org/doi/pdf/10.1145/3534855, PDF}, @uref{https://queue.acm.org/detail.cfm?id=3534855, HTML}. This paper explains the design of the PMA -allocator used in persistent @command{gawk}. - +allocator used in persistent @command{gawk}. + @item @cite{Persistent Scripting} Zi Fan Tan, Jianan Li, Haris Volos, and Terence Kelly, Non-Volatile Memory Workshop (NVMW) 2022, @@ -30171,7 +30171,7 @@ non-volatile memory; note that the interface differs slightly. @item @cite{Persistent Memory Programming on Conventional Hardware} Terence Kelly, ACM @cite{Queue} magazine Vol. 17 No. 4 (July/Aug 2019), -@uref{https://dl.acm.org/doi/pdf/10.1145/3358955.3358957, PDF}, +@uref{https://dl.acm.org/doi/pdf/10.1145/3358955.3358957, PDF}, @uref{https://queue.acm.org/detail.cfm?id=3358957, HTML}. This paper describes simple techniques for persistent memory for C/C++ code on conventional computers that lack non-volatile memory hardware. @@ -30181,8 +30181,8 @@ Terence Kelly, ACM @cite{Queue} magazine Vol. 18 No. 2 (March/April 2020), @uref{https://dl.acm.org/doi/pdf/10.1145/3400899.3400902, PDF}, @uref{https://queue.acm.org/detail.cfm?id=3400902, HTML}. -This paper describes a simple and robust testbed for testing software -against real power failures. +This paper describes a simple and robust testbed for testing software +against real power failures. @item @cite{Crashproofing the Original NoSQL Key/Value Store} Terence Kelly, @@ -34413,7 +34413,7 @@ It's Euler's modification to Newton's method for calculating pi. Take a look at lines (23) - (25) here: http://mathworld.wolfram.com/PiFormulas.htm -The algorithm I wrote simply expands the multiply by 2 and works from the innermost expression outwards. I used this to program HP calculators because it's quite easy to modify for tiny memory devices with smallish word sizes. +The algorithm I wrote simply expands the multiply by 2 and works from the innermost expression outwards. I used this to program HP calculators because it's quite easy to modify for tiny memory devices with smallish word sizes. http://www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/articles.cgi?read=899 @@ -36060,7 +36060,7 @@ Set this to @code{awk_true} if the field lengths are specified in terms of potentially multi-byte characters, and set it to @code{awk_false} if the lengths are in terms of bytes. Performance will be better if the values are supplied in -terms of bytes. +terms of bytes. @item size_t nf; Set this to the number of fields in the input record, i.e. @code{NF}. @@ -36075,7 +36075,7 @@ for @code{$1}, and so on through the @code{fields[nf-1]} element containing the @end table A convenience macro @code{awk_fieldwidth_info_size(numfields)} is provided to -calculate the appropriate size of a variable-length +calculate the appropriate size of a variable-length @code{awk_fieldwidth_info_t} structure containing @code{numfields} fields. This can be used as an argument to @code{malloc()} or in a union to allocate space statically. Please refer to the @code{readdir_test} sample extension for an @@ -37442,7 +37442,7 @@ The following function allows extensions to access and manipulate redirections. Look up file @code{name} in @command{gawk}'s internal redirection table. If @code{name} is @code{NULL} or @code{name_len} is zero, return data for the currently open input file corresponding to @code{FILENAME}. -(This does not access the @code{filetype} argument, so that may be undefined). +(This does not access the @code{filetype} argument, so that may be undefined). If the file is not already open, attempt to open it. The @code{filetype} argument must be zero-terminated and should be one of: @@ -38809,22 +38809,22 @@ all the variables and functions in the @code{inplace} namespace @c endfile @ignore @c file eg/lib/inplace.awk -# +# # Copyright (C) 2013, 2017, 2019 the Free Software Foundation, Inc. -# +# # This file is part of GAWK, the GNU implementation of the # AWK Programming Language. -# +# # GAWK is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. -# +# # GAWK is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA @@ -43368,7 +43368,7 @@ This is an @command{awk} interpreter written in the @uref{https://golang.org/, Go programming language}. It implements POSIX @command{awk}, with a few minor extensions. Source code is available from @uref{https://github.com/benhoyt/goawk}. -The author wrote a nice +The author wrote a nice @uref{https://benhoyt.com/writings/goawk/, article} describing the implementation. diff --git a/doc/gawkworkflow.info b/doc/gawkworkflow.info index 8057651b..2596ec61 100644 --- a/doc/gawkworkflow.info +++ b/doc/gawkworkflow.info @@ -1,30 +1,29 @@ -This is gawkworkflow.info, produced by makeinfo version 6.8 from +This is gawkworkflow.info, produced by makeinfo version 7.0.1 from gawkworkflow.texi. -Copyright (C) 2017, 2018, 2019, 2020, 2022 Free Software Foundation, -Inc. +Copyright © 2017, 2018, 2019, 2020, 2022 Free Software Foundation, Inc. - This is Edition 0.74 of 'Participating in 'gawk' Development'. + This is Edition 0.74 of ‘Participating in ‘gawk’ Development’. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the -Invariant Sections being "GNU General Public License", with the -Front-Cover Texts being "A GNU Manual", and with the Back-Cover Texts as +Invariant Sections being “GNU General Public License”, with the +Front-Cover Texts being “A GNU Manual”, and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled -"GNU Free Documentation License". +“GNU Free Documentation License”. - a. The FSF's Back-Cover Text is: "You have the freedom to copy and - modify this GNU manual." + a. The FSF’s Back-Cover Text is: “You have the freedom to copy and + modify this GNU manual.” INFO-DIR-SECTION Text creation and manipulation START-INFO-DIR-ENTRY -* Gawk Work Flow: (gawkworkflow). Participating in 'gawk' development. +* Gawk Work Flow: (gawkworkflow). Participating in ‘gawk’ development. END-INFO-DIR-ENTRY INFO-DIR-SECTION Individual utilities START-INFO-DIR-ENTRY -* Gawk Work Flow: (gawkworkflow)Overview. Participating in 'gawk' development. +* Gawk Work Flow: (gawkworkflow)Overview. Participating in ‘gawk’ development. END-INFO-DIR-ENTRY  @@ -34,29 +33,29 @@ General Introduction ******************** This file describes how to participate in software development for GNU -Awk ('gawk') (http://www.gnu.org/software/gawk). +Awk (‘gawk’) (http://www.gnu.org/software/gawk). - Copyright (C) 2017, 2018, 2019, 2020, 2022 Free Software Foundation, + Copyright © 2017, 2018, 2019, 2020, 2022 Free Software Foundation, Inc. - This is Edition 0.74 of 'Participating in 'gawk' Development'. + This is Edition 0.74 of ‘Participating in ‘gawk’ Development’. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the -Invariant Sections being "GNU General Public License", with the -Front-Cover Texts being "A GNU Manual", and with the Back-Cover Texts as +Invariant Sections being “GNU General Public License”, with the +Front-Cover Texts being “A GNU Manual”, and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled -"GNU Free Documentation License". +“GNU Free Documentation License”. - a. The FSF's Back-Cover Text is: "You have the freedom to copy and - modify this GNU manual." + a. The FSF’s Back-Cover Text is: “You have the freedom to copy and + modify this GNU manual.” * Menu: * Preface:: Some introductory remarks. -* Contributing:: How to contribute to 'gawk' +* Contributing:: How to contribute to ‘gawk’ development. * Using Git:: Getting started with Git. * Configuring git:: Configuring Git. @@ -65,7 +64,7 @@ in (a) below. A copy of the license is included in the section entitled * General practices:: How things should usually be done. * Repo Maintenance:: Tips for keeping your repo clean. * Development Stuff:: Things you need to know to be a - 'gawk' developer. + ‘gawk’ developer. * Cheat Sheet:: Git command summary. * Resources:: Some further resources. * TODO:: Stuff still to do. @@ -81,7 +80,7 @@ in (a) below. A copy of the license is included in the section entitled * Branches are state:: Branches represent development state. * Repo State:: The different branch types in the repo. * Local State:: Managing local branches. -* Remotes:: What a "remote" is. +* Remotes:: What a “remote” is. * Cloning:: Cloning the repo the first time. * Switching Branches:: Moving from one branch to another. * Starting A New Branch:: Starting a new branch for development. @@ -93,7 +92,7 @@ in (a) below. A copy of the license is included in the section entitled * Removing Branches:: Getting rid of unneeded branches. * Points to remember:: Things you need to keep in mind. * Initial setup:: Getting started with commit access. -* ssh clone:: Cloning using an 'ssh://' URL. +* ssh clone:: Cloning using an ‘ssh://’ URL. * Developing patches:: Developing patches. * Developing new features:: Developing new features. * Developing fixes:: Developing fixes. @@ -113,8 +112,8 @@ Preface ******* This Info file describes how to participate in development of GNU Awk -('gawk'). GNU Awk is a Free Software project belonging to the Free -Software Foundation's GNU project. +(‘gawk’). GNU Awk is a Free Software project belonging to the Free +Software Foundation’s GNU project. * Menu: @@ -131,7 +130,7 @@ Intended Audience ================= This Info file is aimed at software developers who wish to participate -in 'gawk' development. +in ‘gawk’ development. You should be comfortable working with traditional Unix-style command-line tools, and with the C language and standard library @@ -145,7 +144,7 @@ or Git will be even more helpful. The Info file focuses on participation in the project (that is, how to work most effectively if you wish to contribute to it) and also describes how to make use of the Git (http://git-scm.org) distributed -source code management system for 'gawk' development. +source code management system for ‘gawk’ development.  File: gawkworkflow.info, Node: This Manual, Next: Conventions, Prev: Intended Audience, Up: Preface @@ -155,37 +154,37 @@ Using This Book This Info file has the following chapters and appendices: - * *note Contributing:: describes how to start contributing to the - 'gawk' project. + • *note Contributing:: describes how to start contributing to the + ‘gawk’ project. - * *note Using Git:: introduces the Git distributed source code + • *note Using Git:: introduces the Git distributed source code management system. - * *note Configuring git:: describes some initial set-up you need to + • *note Configuring git:: describes some initial set-up you need to do before using Git seriously. - * *note Development without commit access:: gets into the meat of the - development workflow, describing how to work if you don't have + • *note Development without commit access:: gets into the meat of the + development workflow, describing how to work if you don’t have commit access to the Savannah repository. - * *note Development with commit access:: continues the discussion, - covering what's different when you can commit directly to the + • *note Development with commit access:: continues the discussion, + covering what’s different when you can commit directly to the Savannah repository. - * *note General practices:: describes general development practices - used by the 'gawk' development team. + • *note General practices:: describes general development practices + used by the ‘gawk’ development team. - * *note Repo Maintenance:: presents several different things you need + • *note Repo Maintenance:: presents several different things you need to know about to keep your repository in good shape. - * *note Development Stuff:: describes some important points you - should be familiar with in order to participate in 'gawk' + • *note Development Stuff:: describes some important points you + should be familiar with in order to participate in ‘gawk’ development and presents some tools that may make your work easier. - * *note Cheat Sheet:: provides a short "cheat sheet" summarizing all + • *note Cheat Sheet:: provides a short “cheat sheet” summarizing all the Git commands referenced in this Info file. - * *note Resources:: provides a few pointers to Internet resources for + • *note Resources:: provides a few pointers to Internet resources for learning more about Git.  @@ -201,22 +200,22 @@ printed and online versions of the documentation. This minor node briefly documents the typographical conventions used in Texinfo. Examples you would type at the command line are preceded by the -common shell primary and secondary prompts, '$' and '>'. Input that you -type is shown 'like this'. Output from the command is preceded by the -glyph "-|". This typically represents the command's standard output. -Error messages and other output on the command's standard error are -preceded by the glyph "error->". For example: +common shell primary and secondary prompts, ‘$’ and ‘>’. Input that you +type is shown ‘like this’. Output from the command is preceded by the +glyph “⊣”. This typically represents the command’s standard output. +Error messages and other output on the command’s standard error are +preceded by the glyph “error→”. For example: $ echo hi on stdout - -| hi on stdout + ⊣ hi on stdout $ echo hello on stderr 1>&2 - error-> hello on stderr + error→ hello on stderr - Characters that you type at the keyboard look 'like this'. In -particular, there are special characters called "control characters." -These are characters that you type by holding down both the 'CONTROL' -key and another key, at the same time. For example, a 'Ctrl-d' is typed -by first pressing and holding the 'CONTROL' key, next pressing the 'd' + Characters that you type at the keyboard look ‘like this’. In +particular, there are special characters called “control characters.” +These are characters that you type by holding down both the ‘CONTROL’ +key and another key, at the same time. For example, a ‘Ctrl-d’ is typed +by first pressing and holding the ‘CONTROL’ key, next pressing the ‘d’ key, and finally releasing both keys. NOTE: Notes of interest look like this. @@ -255,30 +254,30 @@ File: gawkworkflow.info, Node: Contributing, Next: Using Git, Prev: Preface, 1 How to Start Contributing *************************** -'gawk' development is distributed. It's done using electronic mail -("email") and via branches in the Git repository (or "repo") on Savannah -(http://savannah.gnu.org), the GNU project's source code management +‘gawk’ development is distributed. It’s done using electronic mail +(“email”) and via branches in the Git repository (or “repo”) on Savannah +(http://savannah.gnu.org), the GNU project’s source code management site. - In this major node we use some Git terminology. If you're not at all + In this major node we use some Git terminology. If you’re not at all familiar with Git, then skim this major node and come back after reading the rest of the Info file. - 'gawk' is similar to many other Free Software projects. To begin -contributing, simply start! Take a look at the 'TODO' file in the + ‘gawk’ is similar to many other Free Software projects. To begin +contributing, simply start! Take a look at the ‘TODO’ file in the distribution, see if there is something of interest to you, and ask on the mailing list if anyone else is working on it. If not, then go for it! (*Note Development Stuff:: for a discussion of -some of the technical things you'll need to do. Here we describe the +some of the technical things you’ll need to do. Here we describe the process in general.) - Your contribution can be almost anything that is relevant for 'gawk', + Your contribution can be almost anything that is relevant for ‘gawk’, such as code fixes, documentation fixes, and/or new features. - NOTE: If possible, new features should be done using 'gawk''s + NOTE: If possible, new features should be done using ‘gawk’’s extension mechanism. If you want to add a user-visible language - change to the 'gawk' core, you're going to have to convince the - maintainer and the other developers that it's really worthwhile to + change to the ‘gawk’ core, you’re going to have to convince the + maintainer and the other developers that it’s really worthwhile to do so. Changes that improve performance or portability, or that fix bugs, @@ -286,28 +285,28 @@ such as code fixes, documentation fixes, and/or new features. convincing, of course. As you complete a task, submit patches for review to the - mailing list, where you'll be given feedback about + mailing list, where you’ll be given feedback about your work. Once your changes are acceptable, the maintainer will commit them to the Git repository. Over time, as the maintainer and development team gain confidence in -your ability to contribute, you may be asked to join the private 'gawk' -developers' mailing list, and/or be granted commit access to the Git +your ability to contribute, you may be asked to join the private ‘gawk’ +developers’ mailing list, and/or be granted commit access to the Git repository on Savannah. This has happened to more than one person who -just "came out of the woodwork." +just “came out of the woodwork.” - Until that happens, or if you don't want to join the list, you should + Until that happens, or if you don’t want to join the list, you should continue to work with private branches and submission of patches to the mailing list. Once you have commit access, if you want to make a major change or add a major feature, where the patch(es) would be very large, it has -become the practice to create a separate branch, based off of 'master', +become the practice to create a separate branch, based off of ‘master’, to host the feature. This way the maintainer can review it, and you can -continue to improve it, until it's ready for integration into 'master'. +continue to improve it, until it’s ready for integration into ‘master’. - NOTE: Because of the GNU project's requirements for signed - paperwork for contributions, the 'gawk' project will *not* work + NOTE: Because of the GNU project’s requirements for signed + paperwork for contributions, the ‘gawk’ project will *not* work with pull requests from GitHub (http://github.com) or any other Git-based software hosting service. You must submit patches to the mailing list, and be willing to sign paperwork for large patches @@ -315,9 +314,9 @@ continue to improve it, until it's ready for integration into 'master'. The mailing list is not private. Anyone may send mail to it, and anyone may subscribe to it. To subscribe, go to the -list's web page (https://lists.gnu.org/mailman/listinfo/bug-gawk) and +list’s web page (https://lists.gnu.org/mailman/listinfo/bug-gawk) and follow the instructions there. If you plan to be involved long-term -with 'gawk' development, then you probably should subscribe to the list. +with ‘gawk’ development, then you probably should subscribe to the list.  File: gawkworkflow.info, Node: Using Git, Next: Configuring git, Prev: Contributing, Up: Top @@ -329,7 +328,7 @@ This chapter provides an introduction to using Git. Our point is _not_ to rave about how wonderful Git is, nor to go into painful detail about how it works. Rather we want to give you enough background to understand how to use Git effectively for bug fix and feature -development and to interact ("play nicely") with the development team. +development and to interact (“play nicely”) with the development team. * Menu: @@ -341,11 +340,11 @@ development and to interact ("play nicely") with the development team.  File: gawkworkflow.info, Node: Push Pull, Next: Repo Copies, Up: Using Git -2.1 The "Push/Pull" Model of Software Development +2.1 The “Push/Pull” Model of Software Development ================================================= Git is a powerful, distributed source code management system. However, -the way it's used for 'gawk' development purposely does not take +the way it’s used for ‘gawk’ development purposely does not take advantage of all its features. Instead, the model is rather simple, and in many ways much like more @@ -353,7 +352,7 @@ traditional distributed systems such as the Concurrent Versions System (http://www.nongnu.org/cvs) (CVS) or Subversion (http://subversion.apache.org) (SVN). - The central idea can be termed "push/pull." You _pull_ updates down + The central idea can be termed “push/pull.” You _pull_ updates down from the central repository to your local copy, and if you have commit rights, you _push_ your changes or updates up to the central repository. @@ -367,8 +366,8 @@ branch up to date with respect to the main development branch(es), and eventually merge the changes from your branch into the main branch. Almost always Git does these merges for you without problem. When -there is a problem (a "merge conflict"), usually it is very easy for you -to "resolve" them and then complete the merge. We talk about this in +there is a problem (a “merge conflict”), usually it is very easy for you +to “resolve” them and then complete the merge. We talk about this in more detail later (*note Merge Conflicts::).  @@ -379,18 +378,18 @@ File: gawkworkflow.info, Node: Repo Copies, Next: Local Branches, Prev: Push So how does Git work?(1) - A repository consists of a collection of "branches". Each branch + A repository consists of a collection of “branches”. Each branch represents the history of a collection of files and directories (a file -"tree"). Each combined set of changes to this collection (files and +“tree”). Each combined set of changes to this collection (files and directories added or deleted, and/or file contents changed) is termed a -"commit". +“commit”. - When you first create a local copy of a remote repository ("clone the -repo"), Git copies all of the original repository's branches to your + When you first create a local copy of a remote repository (“clone the +repo”), Git copies all of the original repository’s branches to your local system. The original remote repository is referred to as being -"upstream", and your local repo is "downstream" from it. Git +“upstream”, and your local repo is “downstream” from it. Git distinguishes branches from the upstream repo by prefixing their names -with 'origin/'. Let's draw some pictures. *note Figure 2.1: +with ‘origin/’. Let’s draw some pictures. *note Figure 2.1: savannah-repo. represents the state of the repo on Savannah: @@ -408,21 +407,21 @@ savannah-repo. represents the state of the repo on Savannah: | ... | +----------------------+ -Figure 2.1: The Savannah 'gawk' Repository +Figure 2.1: The Savannah ‘gawk’ Repository After you clone the repo, on your local system you will have a single -branch named 'master' that's visible when you use 'git branch' to see +branch named ‘master’ that’s visible when you use ‘git branch’ to see your branches. $ git clone http://git.savannah.gnu.org/r/gawk.git Clone the repo $ cd gawk Change to local copy $ git branch See branch information - -| * master + ⊣ * master -The current branch is always indicated with a leading asterisk ('*'). +The current branch is always indicated with a leading asterisk (‘*’). Pictorially, the local repo looks like *note Figure 2.2: your-repo. -(you can ignore the 'T' column for the moment): +(you can ignore the ‘T’ column for the moment): +===+======================++=============================+ @@ -439,18 +438,18 @@ The current branch is always indicated with a leading asterisk ('*'). | | || ... | +---+----------------------++-----------------------------+ -Figure 2.2: Your Local 'gawk' Repository +Figure 2.2: Your Local ‘gawk’ Repository -Note that what is simply 'gawk-4.1-stable' in the upstream repo is now -referred to as 'origin/gawk-4.1-stable'. The 'origin/' branches are a +Note that what is simply ‘gawk-4.1-stable’ in the upstream repo is now +referred to as ‘origin/gawk-4.1-stable’. The ‘origin/’ branches are a snapshot of the state of the upstream repo. This is how Git allows you -to see what changes you've made with respect to the upstream repo, +to see what changes you’ve made with respect to the upstream repo, without having to actually communicate with the upstream repo over the Internet. (When files are identical, Git is smart enough to not have two separate physical copies on your local disk.) - If you're working on a simple bug fix or change, you can do so -directly in your local 'master' branch. You can then commit your + If you’re working on a simple bug fix or change, you can do so +directly in your local ‘master’ branch. You can then commit your changes, and if you have access rights, push them upstream to the Savannah repo. (However, there is a process to follow. Please read the rest of this Info file.) @@ -465,40 +464,40 @@ File: gawkworkflow.info, Node: Local Branches, Next: Branches are state, Prev 2.3 Local Branches ================== -Let's talk about local branches in more detail. (The terminology used +Let’s talk about local branches in more detail. (The terminology used here is my own, not official Git jargon.) There are two kinds of local branches: -"Tracking Branches" +“Tracking Branches” Tracking branches track branches from the upstream repository. You first create a tracking branch simply by checking out a branch from the upstream. You use the branch name without the leading - 'origin/' prefix. For example, 'git checkout gawk-4.1-stable'. + ‘origin/’ prefix. For example, ‘git checkout gawk-4.1-stable’. You can then work on this branch, making commits to it as you wish. - Once things are ready to move upstream, you simply use 'git push', + Once things are ready to move upstream, you simply use ‘git push’, and your changes will be pushed up to the main repo.(1) - You should *never* checkout a branch using the 'origin/' prefix. + You should *never* checkout a branch using the ‘origin/’ prefix. Things will get very confused. Always work on local tracking branches. -"Purely Local Branches" - A "purely local branch" exists only on your system. You may be +“Purely Local Branches” + A “purely local branch” exists only on your system. You may be developing some large new feature, or fixing a very difficult bug, or have a change for which paperwork has not yet been completed. In such a case, you would keep your changes on a local branch, and - periodically synchronize it with 'master' (or whichever upstream + periodically synchronize it with ‘master’ (or whichever upstream branch you started from). This may seem somewhat abstract so far. We demonstrate with commands and branches in *note Development without commit access::, later in this Info file. - Let's say you have checked out a copy of 'gawk-4.1-stable' and have -created a purely local branch named 'better-random'. Then our picture -now looks like *note Figure 2.3: your-repo-2, where the 'T' column + Let’s say you have checked out a copy of ‘gawk-4.1-stable’ and have +created a purely local branch named ‘better-random’. Then our picture +now looks like *note Figure 2.3: your-repo-2, where the ‘T’ column indicates a tracking branch. @@ -518,7 +517,7 @@ indicates a tracking branch. | | better-random || | +---+----------------------++-----------------------------+ -Figure 2.3: Your Local 'gawk' Repository With a Purely Local Branch +Figure 2.3: Your Local ‘gawk’ Repository With a Purely Local Branch ---------- Footnotes ---------- @@ -532,17 +531,17 @@ File: gawkworkflow.info, Node: Branches are state, Prev: Local Branches, Up: Branches represent development state. At any given time, when you checkout a particular branch (or create a new one), you have a copy of -the 'gawk' source tree that you should be able to build and test. +the ‘gawk’ source tree that you should be able to build and test. The following minor nodes describe the different branches in the -'gawk' repository and what they are for, as well as how to use your own +‘gawk’ repository and what they are for, as well as how to use your own branches. * Menu: * Repo State:: The different branch types in the repo. * Local State:: Managing local branches. -* Remotes:: What a "remote" is. +* Remotes:: What a “remote” is.  File: gawkworkflow.info, Node: Repo State, Next: Local State, Up: Branches are state @@ -552,46 +551,46 @@ File: gawkworkflow.info, Node: Repo State, Next: Local State, Up: Branches ar There are several kinds of branches in the Savannah repository. -"Dead Branches" - Branches with the prefix 'dead-branches/' (such as - 'dead-branches/const') hold code that was never merged into the +“Dead Branches” + Branches with the prefix ‘dead-branches/’ (such as + ‘dead-branches/const’) hold code that was never merged into the main code base. For example, a feature which was started, but later deemed to be unwise to add. These branches keep the code available, but they are not updated. -"Stable Branches" +“Stable Branches” These branches are used for bug fixes to released versions of - 'gawk'. Sometimes new development (i.e., user-visible changes) + ‘gawk’. Sometimes new development (i.e., user-visible changes) also occurs on these branches, although in a perfect world they would be used only for bug fixes. - These branches have names like 'gawk-4.1-stable', - 'gawk-4.0-stable', and so on. Once a release has been made from - 'master', the previous stable branch is not updated. For example, - once 'gawk' 4.1.0 was released, no more work was done on - 'gawk-4.0-stable'. + These branches have names like ‘gawk-4.1-stable’, + ‘gawk-4.0-stable’, and so on. Once a release has been made from + ‘master’, the previous stable branch is not updated. For example, + once ‘gawk’ 4.1.0 was released, no more work was done on + ‘gawk-4.0-stable’. -"The Main Branch" - This is the 'master' branch. Here is where most new feature +“The Main Branch” + This is the ‘master’ branch. Here is where most new feature development takes place, and releases of new major versions are based off of this branch. Feature branches are typically based off this branch as well, and when the feature is deemed complete, merged back into it. -"Feature Branches" +“Feature Branches” Often, a proposed new feature or code improvement is quite - involved. It may take some time to perfect, or the 'gawk' + involved. It may take some time to perfect, or the ‘gawk’ development team may not be convinced that the feature should be kept. - For this purpose, the team uses branches prefixed with 'feature/'. + For this purpose, the team uses branches prefixed with ‘feature/’. This prefix is used even for code that simply improves the internals and does not make a user-visible change. Having large changes on separate branches makes it easier for members of the team to review the code, and also makes it easier to - keep the changes up-to-date with respect to 'master', since Git + keep the changes up-to-date with respect to ‘master’, since Git excels at merging commits from one branch to another.  @@ -601,9 +600,9 @@ File: gawkworkflow.info, Node: Local State, Next: Remotes, Prev: Repo State, --------------------------------------- Purely local branches are where you do your own development. You may -use purely local branches because you don't have commit rights to the +use purely local branches because you don’t have commit rights to the Savannah repo. You may also use them if you are doing some work that -isn't ready for sharing with the rest of the team, or cannot be +isn’t ready for sharing with the rest of the team, or cannot be committed for some other reason. For example, for around a nine-month period, the maintainer kept a @@ -618,30 +617,30 @@ File: gawkworkflow.info, Node: Remotes, Prev: Local State, Up: Branches are s Earlier, we said that Git maintains copies of the branches in the upstream repo, as well as manages your local branches. You can see all -these branches with 'git branch -a': +these branches with ‘git branch -a’: $ git branch -a - -| gawk-4.1-stable - -| * master - -| remotes/origin/HEAD -> origin/master - -| remotes/origin/dead-branches/async-events - -| ... - -| remotes/origin/feature/api-mpfr - -| remotes/origin/feature/array-iface - -| remotes/origin/feature/fix-comments - -| ... - - You'll note that what we've referred to as 'origin/' branches appear -in the output with an additional prefix: 'remotes/'. Up to this point, -we've treated Git as if it allowed only a single upstream repository. + ⊣ gawk-4.1-stable + ⊣ * master + ⊣ remotes/origin/HEAD -> origin/master + ⊣ remotes/origin/dead-branches/async-events + ⊣ ... + ⊣ remotes/origin/feature/api-mpfr + ⊣ remotes/origin/feature/array-iface + ⊣ remotes/origin/feature/fix-comments + ⊣ ... + + You’ll note that what we’ve referred to as ‘origin/’ branches appear +in the output with an additional prefix: ‘remotes/’. Up to this point, +we’ve treated Git as if it allowed only a single upstream repository. But in fact, you can configure it to use more than one. All the known -upstream repositories are grouped under the 'remotes/' prefix, with -'remotes/origin' being the one from which you initially cloned your +upstream repositories are grouped under the ‘remotes/’ prefix, with +‘remotes/origin’ being the one from which you initially cloned your local repository. The ability to work with multiple upstream repositories is an -advanced one; 'gawk' development does not make use of it. The intent of -this node is to explain the output from 'git branch -a', nothing more. +advanced one; ‘gawk’ development does not make use of it. The intent of +this node is to explain the output from ‘git branch -a’, nothing more.  File: gawkworkflow.info, Node: Configuring git, Next: Development without commit access, Prev: Using Git, Up: Top @@ -650,11 +649,11 @@ File: gawkworkflow.info, Node: Configuring git, Next: Development without comm ************************************* Before starting to use Git, you should configure it with some important -settings that won't change as you use Git. You may configure options +settings that won’t change as you use Git. You may configure options both globally, and on a per-repository basis. Here, we discuss only global configuration settings. - You can configure Git using either 'git config', or by editing the + You can configure Git using either ‘git config’, or by editing the relevant files with your favorite text editor.(1) The first things to set are your email address and your real name: @@ -663,14 +662,14 @@ relevant files with your favorite text editor.(1) $ git config --global user.email jpdev@example.com Set email address Setting these two items are an absolute requirement. *Note*: No -aliases are allowed. If you can't supply your real name, you cannot -contribute to the project. Other options that the 'gawk' maintainer +aliases are allowed. If you can’t supply your real name, you cannot +contribute to the project. Other options that the ‘gawk’ maintainer recommends that you use are: $ git config --global push.default simple Only push the current branch $ git config --global pager.status true Use pager for output of git status - The global settings are stored in the '.gitconfig' file in your home + The global settings are stored in the ‘.gitconfig’ file in your home directory. The file looks like this: [user] @@ -681,37 +680,37 @@ directory. The file looks like this: [pager] status = true - The 'push.default=simple' setting ensures that older versions of Git + The ‘push.default=simple’ setting ensures that older versions of Git only push the current branch up to the Savannah repo. This is the safest way to operate, and is the default in current Git versions. There may be other settings in your configuration file as well. Use -'git config' to see your settings: +‘git config’ to see your settings: $ git config --list - -| user.name=J. P. Developer - -| user.email=jpdev@example.com - -| push.default=simple + ⊣ user.name=J. P. Developer + ⊣ user.email=jpdev@example.com + ⊣ push.default=simple - Here are the 'gawk' maintainer's settings: + Here are the ‘gawk’ maintainer’s settings: $ git config --global --list - -| user.name=Arnold D. Robbins - -| user.email=arnold@... - -| credential.helper=cache --timeout=3600 - -| push.default=simple - -| color.ui=false - -| core.autocrlf=input - -| pager.status=true - -| log.decorate=auto - - Additional, per-project ("local") settings are stored in each repo's -'.git/config' file. + ⊣ user.name=Arnold D. Robbins + ⊣ user.email=arnold@... + ⊣ credential.helper=cache --timeout=3600 + ⊣ push.default=simple + ⊣ color.ui=false + ⊣ core.autocrlf=input + ⊣ pager.status=true + ⊣ log.decorate=auto + + Additional, per-project (“local”) settings are stored in each repo’s +‘.git/config’ file. ---------- Footnotes ---------- (1) You are required to use either Vim or Emacs, other text editors -are not allowed. Of course, reasonable developers wouldn't want to use +are not allowed. Of course, reasonable developers wouldn’t want to use any other editor anyway.  @@ -721,7 +720,7 @@ File: gawkworkflow.info, Node: Development without commit access, Next: Develo *********************************** In this chapter we present step-by-step recipes for checking out and -working with a local copy of the Savannah Git repo for 'gawk'. The +working with a local copy of the Savannah Git repo for ‘gawk’. The presentation is for when you do not have commit access to the Git repo, and so you cannot push your changes directly. @@ -743,15 +742,15 @@ File: gawkworkflow.info, Node: Cloning, Next: Switching Branches, Up: Develop 4.1 Cloning The Repo ==================== -Clone the Savannah repo using 'git clone'. You should do so using using +Clone the Savannah repo using ‘git clone’. You should do so using using the HTTPS protocol; HTTPS is considered to be more secure than the native Git protocol and is preferred.(1) - To choose which method, you supply a "URL" for the repo when you + To choose which method, you supply a “URL” for the repo when you clone it, as follows. $ git clone https://git.savannah.gnu.org/r/gawk.git Clone the repo - -| ... + ⊣ ... $ cd gawk Start working _You only need to clone the repo once._ From then on, you update its @@ -760,7 +759,7 @@ your vacation in the Bahamas: $ cd gawk Move to the repo $ make distclean A good idea before updating - -| ... + ⊣ ... $ git pull Update it To build, you should generally follow this recipe: @@ -768,11 +767,11 @@ your vacation in the Bahamas: $ ./bootstrap.sh && ./configure && make -j && make check NOTE: Unless you have installed all the tools described in *note - GNU Tools::, you _must_ run './bootstrap.sh' every time you clone a - repo, do a 'git pull' or checkout a different branch. (In the - latter case, do 'make distclean' first.) Otherwise things will get - messy very quickly. The 'bootstrap.sh' script ensures that all of - the file time stamps are up to date so that it's not necessary to + GNU Tools::, you _must_ run ‘./bootstrap.sh’ every time you clone a + repo, do a ‘git pull’ or checkout a different branch. (In the + latter case, do ‘make distclean’ first.) Otherwise things will get + messy very quickly. The ‘bootstrap.sh’ script ensures that all of + the file time stamps are up to date so that it’s not necessary to run the various configuration tools. ---------- Footnotes ---------- @@ -785,14 +784,14 @@ File: gawkworkflow.info, Node: Switching Branches, Next: Starting A New Branch 4.2 Switching Branches ====================== -So far, we've been working in the default 'master' branch. Let's check -what's happening in the 'gawk-4.1-stable' branch: +So far, we’ve been working in the default ‘master’ branch. Let’s check +what’s happening in the ‘gawk-4.1-stable’ branch: $ make distclean Clean up $ git checkout gawk-4.1-stable Checkout a different branch - -| ... + ⊣ ... $ git pull Get up to date - -| ... + ⊣ ... $ ./bootstrap.sh && ./configure && Start working > make -j && make check @@ -802,61 +801,61 @@ File: gawkworkflow.info, Node: Starting A New Branch, Next: Undoing a change, 4.3 Starting A New Branch ========================= -Let's say you want to work on a new feature. For example, you might +Let’s say you want to work on a new feature. For example, you might decide to add Python syntax support.(1) You should create a new branch -on which to work. First, switch back to 'master': +on which to work. First, switch back to ‘master’: $ make distclean $ git checkout master Now, create a new branch. The easiest way to do that is with the -'-b' option to 'git checkout': +‘-b’ option to ‘git checkout’: $ git checkout -b feature/python - -| ... + ⊣ ... You now do massive amounts of work in order to add Python syntax support. As you do each defined chunk of work, you update the -'ChangeLog' file with your changes before "committing" them to the repo. +‘ChangeLog’ file with your changes before “committing” them to the repo. - Let's say you've added a new file 'python.c' and updated several -others. Use 'git status' to see what's changed: + Let’s say you’ve added a new file ‘python.c’ and updated several +others. Use ‘git status’ to see what’s changed: $ git status - -| ... + ⊣ ... - Before committing the current set of changes, you can use 'git diff' -to view the changes. You may also use 'git difftool'(2) to run an -external 'diff' command, such as 'meld' on GNU/Linux: + Before committing the current set of changes, you can use ‘git diff’ +to view the changes. You may also use ‘git difftool’(2) to run an +external ‘diff’ command, such as ‘meld’ on GNU/Linux: $ git diff Regular built-in tool for standard diffs $ git difftool --tool=meld GUI diff tool - When you're happy with the changes, use 'git add' to tell Git which + When you’re happy with the changes, use ‘git add’ to tell Git which of the changed and/or new files you wish to have ready to be committed: $ git add ... - Use 'git status' to see that your changes are scheduled for + Use ‘git status’ to see that your changes are scheduled for committing: $ git status - -| + ⊣ Now you can commit your changes to your branch: $ git commit -Running 'git commit' causes Git to invoke an editor (typically from the -'$EDITOR' environment variable) in which you can compose a commit +Running ‘git commit’ causes Git to invoke an editor (typically from the +‘$EDITOR’ environment variable) in which you can compose a commit message. Please supply a short message summarizing the commit. This -message will be visible via 'git log'. +message will be visible via ‘git log’. ---------- Footnotes ---------- - (1) Just joking. Please don't attempt this for real. + (1) Just joking. Please don’t attempt this for real. - (2) Don't run 'git difftool' in the background; it works + (2) Don’t run ‘git difftool’ in the background; it works interactively.  @@ -871,7 +870,7 @@ checking out the file again: $ git checkout awkgram.y Undo changes to awkgram.y. There is no output - To start over completely, use 'git reset --hard'. Note that this + To start over completely, use ‘git reset --hard’. Note that this will _throw away_ all your changes, with no chance for recovery, so be sure you really want to do it. @@ -882,14 +881,14 @@ File: gawkworkflow.info, Node: Saving Without Committing, Next: Updating, Pre ======================== Sometimes, you may be in the middle of a set of changes that are not yet -completed, when you need to stop what you're doing and work on something +completed, when you need to stop what you’re doing and work on something else. For example, you might be updating the documentation when a bug -report comes in and you want to work on the bug. But you can't just -switch branches, since you haven't finished your current changes. +report comes in and you want to work on the bug. But you can’t just +switch branches, since you haven’t finished your current changes. - The way to work around this problem is with 'git stash'. This + The way to work around this problem is with ‘git stash’. This command saves your changes in a special place within Git from which they -may be restored later. After executing 'git stash', your current branch +may be restored later. After executing ‘git stash’, your current branch is restored to its original, pristine state. The workflow might go something like this: @@ -903,8 +902,8 @@ is restored to its original, pristine state. $ git stash pop Restore the earlier changes The stash is maintained as a stack. Sets of changes are pushed onto -the stack by 'git stash' and popped off of it with 'git stash pop'. You -may use 'git stash list' to see the list of saved changes. +the stack by ‘git stash’ and popped off of it with ‘git stash pop’. You +may use ‘git stash list’ to see the list of saved changes.  File: gawkworkflow.info, Node: Updating, Next: Submitting Changes, Prev: Saving Without Committing, Up: Development without commit access @@ -913,7 +912,7 @@ File: gawkworkflow.info, Node: Updating, Next: Submitting Changes, Prev: Savi ======================== As you work on your branch, you will occasionally want to bring it up to -date with respect to 'master'. This minor node discusses updating local +date with respect to ‘master’. This minor node discusses updating local branches and handling merge conflicts. * Menu: @@ -928,13 +927,13 @@ File: gawkworkflow.info, Node: Rebasing, Next: Merge Conflicts, Up: Updating ----------------------------- For purely local branches, bringing your branch up to date is called -"rebasing", which causes the branch to look _as if_ you had started from -the latest version of 'master'. The steps are as follows: +“rebasing”, which causes the branch to look _as if_ you had started from +the latest version of ‘master’. The steps are as follows: $ git checkout master Checkout master $ git pull Update it $ git checkout feature/python Move back to new, purely local branch - $ git rebase master "Start over" from current master + $ git rebase master ``Start over'' from current master  File: gawkworkflow.info, Node: Merge Conflicts, Prev: Rebasing, Up: Updating @@ -942,45 +941,45 @@ File: gawkworkflow.info, Node: Merge Conflicts, Prev: Rebasing, Up: Updating 4.6.2 Dealing With Merge Conflicts ---------------------------------- -Sometimes, when merging from 'master' into your branch, or from a branch -into 'master', there will be "merge conflicts". These are one or more +Sometimes, when merging from ‘master’ into your branch, or from a branch +into ‘master’, there will be “merge conflicts”. These are one or more areas within a file where there are conflicting sets of changes, and Git could not do the merge for you. In this case, the conflicted area will -be delimited by the traditional conflict markers, '<<<', '===' and -'>>>'. +be delimited by the traditional conflict markers, ‘<<<’, ‘===’ and +‘>>>’. - Your mission then is to edit the file and "resolve" the conflict by -fixing the order of additions (such as in a 'ChangeLog' file), or fixing + Your mission then is to edit the file and “resolve” the conflict by +fixing the order of additions (such as in a ‘ChangeLog’ file), or fixing the code to take new changes into account. - Once you have done so, you tell Git that everything is OK using 'git -add' and 'git commit': + Once you have done so, you tell Git that everything is OK using ‘git +add’ and ‘git commit’: $ git checkout feature/python Move back to new, purely local branch - $ git rebase master "Start over" from current master - -| First, rewinding head to replay your work on top of it... - -| Applying: Demo change. - -| Using index info to reconstruct a base tree... - -| M main.c - -| Falling back to patching base and 3-way merge... - -| Auto-merging main.c - -| CONFLICT (content): Merge conflict in main.c - -| error: Failed to merge in the changes. - -| Patch failed at 0001 Demo change. - -| Use 'git am --show-current-patch' to see the failed patch - -| - -| Resolve all conflicts manually, mark them as resolved with - -| "git add/rm ", then run "git rebase --continue". - -| You can instead skip this commit: run "git rebase --skip". - -| To abort and get back to the state before "git rebase", run "git rebase --abort". + $ git rebase master ``Start over'' from current master + ⊣ First, rewinding head to replay your work on top of it... + ⊣ Applying: Demo change. + ⊣ Using index info to reconstruct a base tree... + ⊣ M main.c + ⊣ Falling back to patching base and 3-way merge... + ⊣ Auto-merging main.c + ⊣ CONFLICT (content): Merge conflict in main.c + ⊣ error: Failed to merge in the changes. + ⊣ Patch failed at 0001 Demo change. + ⊣ Use 'git am --show-current-patch' to see the failed patch + ⊣ + ⊣ Resolve all conflicts manually, mark them as resolved with + ⊣ "git add/rm ", then run "git rebase --continue". + ⊣ You can instead skip this commit: run "git rebase --skip". + ⊣ To abort and get back to the state before "git rebase", run "git rebase --abort". $ gvim main.c Edit the file and fix the problem $ git add main.c Tell Git everything is OK now ... $ git commit ... and it's settled $ git rebase --continue Continue the rebase - The 'git rebase --continue' then continues the process of rebasing -the current branch that we started in *note Rebasing::. It's not -necessary if you are using 'git merge' (*note Points to remember::). + The ‘git rebase --continue’ then continues the process of rebasing +the current branch that we started in *note Rebasing::. It’s not +necessary if you are using ‘git merge’ (*note Points to remember::).  File: gawkworkflow.info, Node: Submitting Changes, Next: Removing Branches, Prev: Updating, Up: Development without commit access @@ -988,11 +987,11 @@ File: gawkworkflow.info, Node: Submitting Changes, Next: Removing Branches, P 4.7 Submitting Your Changes =========================== -So now your feature is complete. You've added test cases for it to the -test suite(1), you have 'ChangeLog' entries that describe all the +So now your feature is complete. You’ve added test cases for it to the +test suite(1), you have ‘ChangeLog’ entries that describe all the changes(2), you have documented the new feature(3), and everything works -great. You're ready to submit the changes for review, and with any -luck, inclusion into 'gawk'. +great. You’re ready to submit the changes for review, and with any +luck, inclusion into ‘gawk’. There are two ways to submit your changes for review. @@ -1003,29 +1002,29 @@ _Generate a single large patch_ $ git checkout feature/python $ git diff master > /tmp/python.diff - Mail the 'python.diff' file to the appropriate mailing list along - with a description of what you've changed and why. + Mail the ‘python.diff’ file to the appropriate mailing list along + with a description of what you’ve changed and why. _Generate a set of patches that in toto comprise your changes_ - To do this, use 'git format-patch': + To do this, use ‘git format-patch’: $ git checkout feature/python $ git format-patch - This creates a set of patch files, one per commit that isn't on the + This creates a set of patch files, one per commit that isn’t on the original branch. Mail these patches, either separately, or as a set of attachments, to the appropriate mailing list along with a - description of what you've changed and why. + description of what you’ve changed and why. - Either way you choose to submit your changes, the 'gawk' maintainer + Either way you choose to submit your changes, the ‘gawk’ maintainer and development team will review your changes and provide feedback. If -you have signed paperwork with the FSF for 'gawk' and the maintainer +you have signed paperwork with the FSF for ‘gawk’ and the maintainer approves your changes, he will apply the patch(es) and commit the changes. Which list should you send mail to? If you are just starting to contribute, use . After making enough contributions, -you may be invited to join the private 'gawk' developers' mailing list. +you may be invited to join the private ‘gawk’ developers’ mailing list. If you do so, then submit your changes to that list. If you make any substantial changes, you will need to assign @@ -1035,11 +1034,11 @@ information. ---------- Footnotes ---------- - (1) You did do this, didn't you? + (1) You did do this, didn’t you? (2) You remembered this, right? - (3) You wouldn't neglect this, would you? + (3) You wouldn’t neglect this, would you?  File: gawkworkflow.info, Node: Removing Branches, Next: Points to remember, Prev: Submitting Changes, Up: Development without commit access @@ -1063,14 +1062,14 @@ File: gawkworkflow.info, Node: Points to remember, Prev: Removing Branches, U There are some important points to remember: - * Always do a 'make distclean' before switching between branches. - Things will get really confused if you don't. + • Always do a ‘make distclean’ before switching between branches. + Things will get really confused if you don’t. - * For upstream branches, _always_ work with tracking branches. - _Never_ use 'git checkout origin/WHATEVER'. Git will happily let - you do something like that, but it's just plain asking for trouble. + • For upstream branches, _always_ work with tracking branches. + _Never_ use ‘git checkout origin/WHATEVER’. Git will happily let + you do something like that, but it’s just plain asking for trouble. - * Make sure your tracking branches are up-to-date before doing + • Make sure your tracking branches are up-to-date before doing anything with them, particularly using them as the basis for a rebase or merge. This typically means a three-step process: @@ -1082,10 +1081,10 @@ There are some important points to remember: $ git rebase master Now rebase your feature off of master - * Git always treats the currently checked-out branch as the object of + • Git always treats the currently checked-out branch as the object of operations. For example, when comparing files with the regular - 'diff' command, the usage is 'diff OLDFILE NEWFILE'. For 'git - diff', the current branch takes the place of NEWFILE, thus: + ‘diff’ command, the usage is ‘diff OLDFILE NEWFILE’. For ‘git + diff’, the current branch takes the place of NEWFILE, thus: $ git checkout feature/python $ git diff master Compare master to current branch @@ -1103,12 +1102,12 @@ File: gawkworkflow.info, Node: Development with commit access, Next: General p ******************************** This major node describes how to do development when you _do_ have -commit access to the 'gawk' repo on Savannah. +commit access to the ‘gawk’ repo on Savannah. * Menu: * Initial setup:: Getting started with commit access. -* ssh clone:: Cloning using an 'ssh://' URL. +* ssh clone:: Cloning using an ‘ssh://’ URL. * Developing patches:: Developing patches. * Developing new features:: Developing new features. * Developing fixes:: Developing fixes. @@ -1119,34 +1118,34 @@ File: gawkworkflow.info, Node: Initial setup, Next: ssh clone, Up: Developmen 5.1 Initial Setup ================= -Congratulations! After becoming a quality contributor to 'gawk' -development, you've been invited to join the private development list +Congratulations! After becoming a quality contributor to ‘gawk’ +development, you’ve been invited to join the private development list and to accept having commit access to the repo. The first thing to do is to create an account on Savannah, choosing a unique user name. To do so, go to the Savannah home page -(http://savannah.gnu.org) and click on the "New User" link. The setup -will include uploading of your 'ssh' key, as per the instructions on the +(http://savannah.gnu.org) and click on the “New User” link. The setup +will include uploading of your ‘ssh’ key, as per the instructions on the Savannah web page. - After you've done all this, send email to the maintainer with your + After you’ve done all this, send email to the maintainer with your Savannah user name, and he will add you to the list of users who have commit access to the repo.  File: gawkworkflow.info, Node: ssh clone, Next: Developing patches, Prev: Initial setup, Up: Development with commit access -5.2 Cloning The Repo With An 'ssh' URL +5.2 Cloning The Repo With An ‘ssh’ URL ====================================== In order to be able to commit changes to the repo, you must clone it -using an 'ssh://' URL. Cloning the repo with 'ssh' is similar to cloning +using an ‘ssh://’ URL. Cloning the repo with ‘ssh’ is similar to cloning with HTTPS, but the URL is different: $ git clone ssh://yourname@git.sv.gnu.org/srv/git/gawk.git - -| ... + ⊣ ... - Here, you should replace 'yourname' in the command with the user name + Here, you should replace ‘yourname’ in the command with the user name you chose for use on Savannah.  @@ -1160,20 +1159,20 @@ without commit access: 1. Develop the code and test it. - 2. Update the 'ChangeLog'. + 2. Update the ‘ChangeLog’. - 3. If necessary, update the documentation: 'doc/gawktexi.in' and/or - 'doc/gawk.1'. + 3. If necessary, update the documentation: ‘doc/gawktexi.in’ and/or + ‘doc/gawk.1’. - 4. Use 'git diff > mychange.diff' to create a patch file. + 4. Use ‘git diff > mychange.diff’ to create a patch file. 5. Send it to the mailing list for discussion. 6. Iterate until the patch is ready to be committed. However, now that you have commit access, you can commit the fix and -push it up to the repo yourself! Let's assume you've made a bug fix -directly on 'master'. Here's how to commit your changes: +push it up to the repo yourself! Let’s assume you’ve made a bug fix +directly on ‘master’. Here’s how to commit your changes: $ git diff Review the patch one more time $ git add ... Add any files for committing @@ -1181,7 +1180,7 @@ directly on 'master'. Here's how to commit your changes: $ git push Push the files up to the repo. Ta da! The first three steps are the same described earlier (*note Starting -A New Branch::). The 'git push' is what's new, and it updates the repo +A New Branch::). The ‘git push’ is what’s new, and it updates the repo on Savannah. Congratulations! As a courtesy, you should send a note to the mailing list indicating @@ -1201,7 +1200,7 @@ the repo. First, create a new branch to hold your feature: $ git checkout -b feature/python Create and switch to a new branch Now, you can develop as normal, adding new files if necessary (such -as new tests), modifying code, updating the 'ChangeLog' and +as new tests), modifying code, updating the ‘ChangeLog’ and documentation, and so on. You can share changes with the mailing list as diffs, as usual. @@ -1216,11 +1215,11 @@ their local systems and review your changes at their leisure. $ git commit Commit the files with a commit message $ git push -u origin feature/python Push the branch up to the repo - When you use 'push -u origin', Git helpfully converts your purely + When you use ‘push -u origin’, Git helpfully converts your purely local branch into a tracking branch. It becomes as if the branch had originated from the upstream repo and you checked it out locally. - _You only need to do 'git push -u origin' once._ As you continue to + _You only need to do ‘git push -u origin’ once._ As you continue to work on your branch, the workflow simplifies into this: $ git diff Review your changes @@ -1234,9 +1233,9 @@ File: gawkworkflow.info, Node: Developing fixes, Prev: Developing new features 5.5 Developing Fixes ==================== -If you want to make a fix on 'master' or on the current stable branch, +If you want to make a fix on ‘master’ or on the current stable branch, you work the same way, by producing and discussing a diff on the mailing -list. Once it's approved, you can commit it yourself: +list. Once it’s approved, you can commit it yourself: $ git checkout master Move to master $ git pull Make sure we're up to date with the maintainer @@ -1245,7 +1244,7 @@ list. Once it's approved, you can commit it yourself: $ git add ... Add any files for committing $ git commit Commit the files with a commit message. - When you're ready to push your changes: + When you’re ready to push your changes: $ git pull Download latest version; Git will merge $ gvim ... Resolve any merge conflicts with git add and git commit @@ -1260,41 +1259,41 @@ File: gawkworkflow.info, Node: General practices, Next: Repo Maintenance, Pre 6 General Development Practices ******************************* -This major node discusses general practices for 'gawk' development. The +This major node discusses general practices for ‘gawk’ development. The discussion here is mainly for developers with commit access to the Savannah repo. -"Propagating Fixes" - Usually, bug fixes should be made on the current "stable" branch. +“Propagating Fixes” + Usually, bug fixes should be made on the current “stable” branch. Once a fix has been reviewed and approved, you can commit it and push it yourself. Typically, the maintainer then takes care to - merge the fix to 'master' and from there to any other branches. + merge the fix to ‘master’ and from there to any other branches. However, you are welcome to save him the time and do this yourself. -"Directory ownership" - Some developers "own" certain parts of the tree, such as the 'pc' - and 'vms' directories. They are allowed to commit changes to those +“Directory ownership” + Some developers “own” certain parts of the tree, such as the ‘pc’ + and ‘vms’ directories. They are allowed to commit changes to those directories without review by the mailing list, but changes that also touch the mainline code should be submitted for review. -"New feature development" +“New feature development” Unless you can convince the maintainer (and the other developers!) otherwise, you should _always_ start branches for new features from - 'master', and not from the current "stable" branch. + ‘master’, and not from the current “stable” branch. - Use 'checkout -b feature/FEATURE_NAME' to create the initial + Use ‘checkout -b feature/FEATURE_NAME’ to create the initial branch. You may then elect to keep it purely local, or to push it up to Savannah for review, even if the feature is not yet totally - "ready for prime time." + “ready for prime time.” During development of a new feature, you will most likely wish to keep your feature branch up to date with respect to ongoing improvements -in 'master'. This is generally easy to do. There are two different +in ‘master’. This is generally easy to do. There are two different mechanisms, and which one you use depends upon the nature of your new feature branch. -"As long as your branch is purely local" - You should use 'git rebase' to the keep the branch synchronized +“As long as your branch is purely local” + You should use ‘git rebase’ to the keep the branch synchronized with the original branch from which it was forked: $ git checkout master Move to master @@ -1304,14 +1303,14 @@ feature branch. The rebasing operation may require that you resolve conflicts (*note Merge Conflicts::). Edit any conflicted files and resolve - the problem(s). Compile and test your changes, then use 'git add' - and 'git commit' to indicate resolution, and then use 'git rebase - --continue' to continue the rebasing. Git is very good about + the problem(s). Compile and test your changes, then use ‘git add’ + and ‘git commit’ to indicate resolution, and then use ‘git rebase + --continue’ to continue the rebasing. Git is very good about providing short instructions on how to continue when such conflicts occur. -"Once the branch has been pushed up to Savannah" - You _must_ use 'git merge' to bring your feature branch up to date. +“Once the branch has been pushed up to Savannah” + You _must_ use ‘git merge’ to bring your feature branch up to date. That flow looks like this: $ git checkout master Move to master @@ -1320,11 +1319,11 @@ feature branch. $ git merge master Merge from master Here too, you may have to resolve any merge conflicts (*note Merge - Conflicts::). Once that's done, you can push the changes up to + Conflicts::). Once that’s done, you can push the changes up to Savannah. When the changes on your branch are complete, usually the maintainer -merges the branch to 'master'. But there's really no magic involved, +merges the branch to ‘master’. But there’s really no magic involved, the merge is simply done in the other direction: $ git checkout feature/python Checkout feature branch @@ -1333,13 +1332,13 @@ the merge is simply done in the other direction: $ git pull Bring it up to date $ git merge feature/python Merge from feature/python into master - If you've been keeping 'feature/python' in sync with 'master', then + If you’ve been keeping ‘feature/python’ in sync with ‘master’, then there should be no merge conflicts to resolve, and you can push the result to Savannah: $ git push Push up to Savannah - Since 'feature/python' is no longer needed, it can be gotten rid of: + Since ‘feature/python’ is no longer needed, it can be gotten rid of: $ git branch Still on master ... @@ -1347,15 +1346,15 @@ result to Savannah: $ git branch -d feature/python Delete feature branch $ git push -u origin --delete feature/python Delete on Savannah - The 'git push' command deletes the 'feature/python' branch from the + The ‘git push’ command deletes the ‘feature/python’ branch from the Savannah repo. -Finally, you should send an email to developer's list describing what -you've done so that everyone else can delete their copies of the branch -and do a 'git fetch --prune' (*note Repo Maintenance::). +Finally, you should send an email to developer’s list describing what +you’ve done so that everyone else can delete their copies of the branch +and do a ‘git fetch --prune’ (*note Repo Maintenance::). To update the other remaining development branches with the latest -changes on 'master', use the 'helpers/update-branches.sh' script in the +changes on ‘master’, use the ‘helpers/update-branches.sh’ script in the repo.  @@ -1369,11 +1368,11 @@ repo clean. _Removing old branches_ Developers add branches to the Savannah repo and when development - on them is done, they get merged into 'master'. Then the branches + on them is done, they get merged into ‘master’. Then the branches on Savannah are deleted (as shown in *note General practices::). However, your local copies of those branches (labelled with the - 'origin/' prefix) remain in your local repo. If you don't need + ‘origin/’ prefix) remain in your local repo. If you don’t need them, then you can clean up your repo as follows. First, remove any related tracking branch you may have: @@ -1386,21 +1385,21 @@ _Removing old branches_ $ git fetch --prune Remove unneeded branches _Removing cruft_ - As Git works, occasional "cruft" collects in the repository. Git - does occasionally clean this out on its own, but if you're - concerned about disk usage, you can do so yourself using 'git gc' - (short for "garbage collect"). For example: + As Git works, occasional “cruft” collects in the repository. Git + does occasionally clean this out on its own, but if you’re + concerned about disk usage, you can do so yourself using ‘git gc’ + (short for “garbage collect”). For example: $ du -s . Check disk usage - -| 99188 . Almost 10 megabytes + ⊣ 99188 . Almost 10 megabytes $ git gc Collect garbage - -| Counting objects: 32114, done. - -| Delta compression using up to 4 threads. - -| Compressing objects: 100% (6370/6370), done. - -| Writing objects: 100% (32114/32114), done. - -| Total 32114 (delta 25655), reused 31525 (delta 25231) + ⊣ Counting objects: 32114, done. + ⊣ Delta compression using up to 4 threads. + ⊣ Compressing objects: 100% (6370/6370), done. + ⊣ Writing objects: 100% (32114/32114), done. + ⊣ Total 32114 (delta 25655), reused 31525 (delta 25231) $ du -s . Check disk usage again - -| 75168 . Down to 7 megabytes + ⊣ 75168 . Down to 7 megabytes _Renaming branches_ Occasionally you may want to rename a branch.(1) If your branch is @@ -1418,8 +1417,8 @@ _Renaming branches_ $ git push origin :feature/OLD-NAME feature/NEW-NAME - NOTE: It is the leading ':' in the first branch name that - causes Git to delete the old name in the upstream repo. Don't + NOTE: It is the leading ‘:’ in the first branch name that + causes Git to delete the old name in the upstream repo. Don’t omit it! Finally, reset the upstream branch for the local branch with the @@ -1428,7 +1427,7 @@ _Renaming branches_ $ git push -u origin feature/NEW-NAME You should also update the mailing list to let the other developers - know what's happening. + know what’s happening. ---------- Footnotes ---------- @@ -1442,7 +1441,7 @@ File: gawkworkflow.info, Node: Development Stuff, Next: Cheat Sheet, Prev: Re ******************* This major node discusses other things you need to know and/or do if -you're going to participate seriously in 'gawk' development. +you’re going to participate seriously in ‘gawk’ development. * Menu: @@ -1457,7 +1456,7 @@ File: gawkworkflow.info, Node: Coding style, Next: Doing paperwork, Up: Devel 8.1 Coding Style ================ -You should read the discussion about adding code in the 'gawk' +You should read the discussion about adding code in the ‘gawk’ documentation. *Note Additions: (gawk)Additions, for a discussion of the general procedure. In particular, pay attention to the coding style guidelines in *note Adding Code: (gawk)Adding Code.(1) These two @@ -1469,7 +1468,7 @@ respectively. ---------- Footnotes ---------- - (1) Changes that don't follow the coding style guidelines won't be + (1) Changes that don’t follow the coding style guidelines won’t be accepted. Period.  @@ -1484,7 +1483,7 @@ Foundation. This is generally an easy thing to do. In particular, you can choose to use a version of the copyright assignment which assigns all your -current _and future_ changes to 'gawk' to the FSF. This means that you +current _and future_ changes to ‘gawk’ to the FSF. This means that you only need to do the paperwork once, and from then on all your changes will automatically belong to the FSF. The maintainer recommends doing this. @@ -1499,9 +1498,9 @@ File: gawkworkflow.info, Node: Tools, Next: Debugging, Prev: Doing paperwork, ================================ This minor node discusses additional tools that you may need to install -on your system in order to be in sync with what the 'gawk' maintainer +on your system in order to be in sync with what the ‘gawk’ maintainer uses. It also discusses different C compiler options for use during -code development, and how to compile 'gawk' for debugging. +code development, and how to compile ‘gawk’ for debugging. * Menu: @@ -1514,7 +1513,7 @@ File: gawkworkflow.info, Node: GNU Tools, Next: Compilers, Up: Tools 8.3.1 GNU Tools --------------- -If you expect to work with the configuration files and/or the 'Makefile' +If you expect to work with the configuration files and/or the ‘Makefile’ files, you will need to install a number of other GNU tools. In general, you should be using the latest versions of the tools, or least the same ones that the maintainer himself uses. This helps minimize the @@ -1523,38 +1522,38 @@ in general avoids confusion and hassle. Similarly, you should install the latest GNU documentation tools as well. The tools are described in the following list: -'autoconf' - GNU Autoconf processes the 'configure.ac' files in order to - generate the 'configure' shell script and 'config.h.in' input file. +‘autoconf’ + GNU Autoconf processes the ‘configure.ac’ files in order to + generate the ‘configure’ shell script and ‘config.h.in’ input file. See the Autoconf home page (https://www.gnu.org/software/autoconf/autoconf.html) for more information. -'automake' - GNU Automake processes the 'configure.ac' and 'Makefile.am' files - to produce 'Makefile.in' files. See the Automake home page +‘automake’ + GNU Automake processes the ‘configure.ac’ and ‘Makefile.am’ files + to produce ‘Makefile.in’ files. See the Automake home page (https://www.gnu.org/software/automake) for more information. -'gettext' - GNU Gettext processes the 'gawk' source code to produce the - original 'po/gawk.pot' message template file. Normally you should +‘gettext’ + GNU Gettext processes the ‘gawk’ source code to produce the + original ‘po/gawk.pot’ message template file. Normally you should not need need to do this; the maintainer usually manages this task. See the Gettext home page (https://www.gnu.org/software/gettext) for more information. -'libtool' +‘libtool’ GNU Libtool works with Autoconf and Automake to produce portable shared libraries. It is used for the extensions that ship with - 'gawk', whose code is in the 'extensions' directory. See the + ‘gawk’, whose code is in the ‘extensions’ directory. See the Libtool home page (https://www.gnu.org/software/libtool) for more information. -'makeinfo' - The 'makeinfo' command is used to build the Info versions of the +‘makeinfo’ + The ‘makeinfo’ command is used to build the Info versions of the documentation. You need to have the same version as the maintainer uses, so that when you make a change to the documentation, the corresponding change to the generated Info file will be minimal. - 'makeinfo' is part of GNU Texinfo. See the Texinfo home page + ‘makeinfo’ is part of GNU Texinfo. See the Texinfo home page (https://www.gnu.org/software/texinfo) for more information.  @@ -1563,54 +1562,54 @@ File: gawkworkflow.info, Node: Compilers, Prev: GNU Tools, Up: Tools 8.3.2 Compilers --------------- -The default compiler for 'gawk' development is GCC, the GNU Compiler +The default compiler for ‘gawk’ development is GCC, the GNU Compiler Collection (https://gcc.gnu.org). The default version of GCC is -whatever is on the maintainer's personal GNU/Linux system, although he +whatever is on the maintainer’s personal GNU/Linux system, although he does try to build the latest released version if that is newer than -what's on his system, and then occasionally test 'gawk' with it. +what’s on his system, and then occasionally test ‘gawk’ with it. - He also attempts to test occasionally with 'clang' + He also attempts to test occasionally with ‘clang’ (https://clang.llvm.org/). However, he uses whatever is the default for his GNU/Linux system, and does _not_ make an effort to build the current version for testing. - Both GCC and 'clang' are highly optimizing compilers that produce + Both GCC and ‘clang’ are highly optimizing compilers that produce good code, but are very slow. There are two other compilers that are faster, but that may not produce quite as good code. However, they are both reasonable for doing development. -_The Tiny C Compiler, 'tcc'_ +_The Tiny C Compiler, ‘tcc’_ This compiler is _very_ fast, but it produces only mediocre code. - It is capable of compiling 'gawk', and it does so well enough that - 'make check' runs without errors. + It is capable of compiling ‘gawk’, and it does so well enough that + ‘make check’ runs without errors. However, in the past the quality has varied, and the maintainer has had problems with it. He recommends using it for regular development, where fast compiles are important, but rebuilding with - GCC before doing any commits, in case 'tcc' has missed + GCC before doing any commits, in case ‘tcc’ has missed something.(1) - See the project's home page (http://www.tinycc.org) for some - information. More information can be found in the project's Git + See the project’s home page (http://www.tinycc.org) for some + information. More information can be found in the project’s Git repository (http://repo.or.cz/tinycc.git). The maintainer builds - from the 'mob' branch for his work, but after updating it you - should check that this branch still works to compile 'gawk' before + from the ‘mob’ branch for his work, but after updating it you + should check that this branch still works to compile ‘gawk’ before installing it. _The (Revived) Portable C Compiler_ This is an updated version of the venerable Unix Portable C Compiler, PCC. It accepts ANSI C syntax and supports both older and - modern architectures. It produces better code than 'tcc' but is - slower, although still much faster than GCC and 'clang'. + modern architectures. It produces better code than ‘tcc’ but is + slower, although still much faster than GCC and ‘clang’. - See the project's home page (http://pcc.ludd.ltu.se) for more + See the project’s home page (http://pcc.ludd.ltu.se) for more information. See for instructions about obtaining the code using CVS and building it. - An alternative location for the source is the 'gawk' maintainer's + An alternative location for the source is the ‘gawk’ maintainer’s Git mirror (https://github.com/arnoldrobbins/pcc-revived) of the - code. If you're using Ubuntu GNU/Linux 18.04 or later, you need to - use the 'ubuntu-18' branch from this Git mirror. + code. If you’re using Ubuntu GNU/Linux 18.04 or later, you need to + use the ‘ubuntu-18’ branch from this Git mirror. ---------- Footnotes ---------- @@ -1623,14 +1622,14 @@ File: gawkworkflow.info, Node: Debugging, Prev: Tools, Up: Development Stuff =========================== If you wish to compile for debugging, you should use GCC. After running -'configure' but before running 'make', edit the 'Makefile' and remove -the '-O2' flag from the definition of 'CFLAGS'. Optionally, do the same -for 'support/Makefile' and/or 'extensions/Makefile'. Then run 'make'. +‘configure’ but before running ‘make’, edit the ‘Makefile’ and remove +the ‘-O2’ flag from the definition of ‘CFLAGS’. Optionally, do the same +for ‘support/Makefile’ and/or ‘extensions/Makefile’. Then run ‘make’. You can enable additional debugging code by creating a file named -'.developing' in the 'gawk' source code directory _before_ running -'configure'. Doing so enables additional conditionally-compiled -debugging code within 'gawk', and adds additional warning and debugging +‘.developing’ in the ‘gawk’ source code directory _before_ running +‘configure’. Doing so enables additional conditionally-compiled +debugging code within ‘gawk’, and adds additional warning and debugging options if compiling with GCC. It also disables optimization.  @@ -1643,101 +1642,101 @@ This major node provides an alphabetical list of the Git commands cited in this Info file, along with brief descriptions of what the commands do. - Note that you may always use either 'git help COMMAND' or 'git -COMMAND --help' to get short, man-page style help on how to use any + Note that you may always use either ‘git help COMMAND’ or ‘git +COMMAND --help’ to get short, man-page style help on how to use any given Git command. -'git add' +‘git add’ Add a file to the list of files to be committed. -'git branch' +‘git branch’ View existing branches, or delete a branch. The most useful - options are '-a' and '-d'. + options are ‘-a’ and ‘-d’. -'git checkout' +‘git checkout’ Checkout an existing branch, create a new branch, or checkout a - file to reset it. Use the '-b' option to create and checkout a new + file to reset it. Use the ‘-b’ option to create and checkout a new branch in one operation. -'git clone' +‘git clone’ Clone (make a new copy of) an existing repository. You generally only need to do this once. -'git commit' +‘git commit’ Commit changes to files which have been staged for committing with - 'git add'. This makes your changes permanent, _in your local + ‘git add’. This makes your changes permanent, _in your local repository only_. To publish your changes to an upstream repo, you - must use 'git push'. + must use ‘git push’. -'git config' +‘git config’ Display and/or change global and/or local configuration settings. -'git diff' - Show a unified-format diff of what's changed in the current +‘git diff’ + Show a unified-format diff of what’s changed in the current directory as of the last commit. It helps to have Git configured to use its builtin pager for reviewing diffs (*note Configuring git::). -'git difftool' - Use a "tool" (usually a GUI-based program) to view differences, - instead of the standard textual diff as you'd get from 'git diff'. +‘git difftool’ + Use a “tool” (usually a GUI-based program) to view differences, + instead of the standard textual diff as you’d get from ‘git diff’. -'git fetch' - Update your local copy of the upstream's branches. That is, update - the various 'origin/' branches. This leaves your local tracking - branches unchanged. With the '--prune' option, this removes any - copies of stale 'origin/' branches. +‘git fetch’ + Update your local copy of the upstream’s branches. That is, update + the various ‘origin/’ branches. This leaves your local tracking + branches unchanged. With the ‘--prune’ option, this removes any + copies of stale ‘origin/’ branches. -'git format-patch' +‘git format-patch’ Create a series of patch files, one per commit not on the original branch from which you started. -'git gc' - Run a "garbage collection" pass in the current repository. This - can often reduce the space used in a large repo. For 'gawk' it +‘git gc’ + Run a “garbage collection” pass in the current repository. This + can often reduce the space used in a large repo. For ‘gawk’ it does not make that much difference. -'git help' - Print a man-page-style usage summary for a command. +‘git help’ + Print a man-page–style usage summary for a command. -'git log' - Show the current branch's commit log. This includes who made the +‘git log’ + Show the current branch’s commit log. This includes who made the commit, the date, and the commit message. Commits are shown from newest to oldest. -'git merge' +‘git merge’ Merge changes from the named branch into the current one. -'git pull' - When in your local tracking branch 'XXX', run 'git fetch', and then - merge from 'origin/XXX' into 'XXX'. +‘git pull’ + When in your local tracking branch ‘XXX’, run ‘git fetch’, and then + merge from ‘origin/XXX’ into ‘XXX’. -'git push' - Push commits from your local tracking branch 'XXX' through - 'origin/XXX' and on to branch 'XXX' in the upstream repo. Use 'git - push -u origin --delete XXX' to delete an upstream branch. (Do so +‘git push’ + Push commits from your local tracking branch ‘XXX’ through + ‘origin/XXX’ and on to branch ‘XXX’ in the upstream repo. Use ‘git + push -u origin --delete XXX’ to delete an upstream branch. (Do so carefully!) -'git rebase' +‘git rebase’ Rebase the changes in the current purely local branch to look as if they had been made relative to the latest commit in the current - upstream branch (typically 'master'). This is how you keep your + upstream branch (typically ‘master’). This is how you keep your local, in-progress changes up-to-date with respect to the original branch from which they were started. -'git reset' +‘git reset’ Restore the original state of the repo, especially with the - '--hard' option. Read up on this command, and use it carefully. + ‘--hard’ option. Read up on this command, and use it carefully. -'git stash' +‘git stash’ Save your current changes in a special place within Git. They can - be restored with 'git stash pop', even on a different branch. Use - 'git stash list' to see the list of stashed changes. + be restored with ‘git stash pop’, even on a different branch. Use + ‘git stash list’ to see the list of stashed changes. -'git status' +‘git status’ Show the status of files that are scheduled to be committed, and those that have been modified but not yet scheduled for committing. - Use 'git add' to schedule a file for committing. This command also + Use ‘git add’ to schedule a file for committing. This command also lists untracked files.  @@ -1747,13 +1746,13 @@ Appendix B Git Resources ************************ There are many Git resources available on the Internet. Start at the -Git Project home page (http://git-scm.org). In particular, the 'Pro -Git' book (https://git-scm.com/book/en/v2) is available online. +Git Project home page (http://git-scm.org). In particular, the ‘Pro +Git’ book (https://git-scm.com/book/en/v2) is available online. See also the Savannah quick introduction to Git (http://savannah.gnu.org/maintenance/UsingGit). - A nice article on how Git works is 'Git From The Bottom Up' + A nice article on how Git works is ‘Git From The Bottom Up’ (http://jwiegley.github.io/git-from-the-bottom-up/), by John Wiegley.  @@ -1762,7 +1761,7 @@ File: gawkworkflow.info, Node: TODO, Next: Index, Prev: Resources, Up: Top Appendix C Stuff Still To Do In This Document ********************************************* - * Fill out all examples with full output + • Fill out all examples with full output  File: gawkworkflow.info, Node: Index, Prev: TODO, Up: Top @@ -1995,69 +1994,69 @@ Index  Tag Table: -Node: Top1127 -Node: Preface5223 -Node: Intended Audience5788 -Node: This Manual6662 -Node: Conventions8183 -Node: Acknowledgments9652 -Node: Reviewers10089 -Node: Contributing10410 -Node: Using Git13782 -Node: Push Pull14538 -Node: Repo Copies16083 -Ref: savannah-repo17066 -Ref: your-repo18100 -Ref: Repo Copies-Footnote-119795 -Node: Local Branches19852 -Ref: your-repo-221625 -Ref: Local Branches-Footnote-122707 -Node: Branches are state22765 -Node: Repo State23488 -Node: Local State25608 -Node: Remotes26272 -Node: Configuring git27586 -Ref: Configuring git-Footnote-129945 -Node: Development without commit access30114 -Node: Cloning31170 -Ref: Cloning-Footnote-132707 -Node: Switching Branches32774 -Node: Starting A New Branch33392 -Ref: Starting A New Branch-Footnote-135299 -Ref: Starting A New Branch-Footnote-235357 -Node: Undoing a change35433 -Node: Saving Without Committing36053 -Node: Updating37611 -Node: Rebasing38122 -Node: Merge Conflicts38734 -Node: Submitting Changes40944 -Ref: Submitting Changes-Footnote-143088 -Ref: Submitting Changes-Footnote-243125 -Ref: Submitting Changes-Footnote-343161 -Node: Removing Branches43207 -Node: Points to remember43743 -Node: Development with commit access45420 -Node: Initial setup46065 -Node: ssh clone46853 -Node: Developing patches47426 -Node: Developing new features48759 -Node: Developing fixes50659 -Node: General practices51742 -Node: Repo Maintenance56441 -Ref: Repo Maintenance-Footnote-159313 -Node: Development Stuff59449 -Node: Coding style60012 -Ref: Coding style-Footnote-160670 -Node: Doing paperwork60760 -Node: Tools61555 -Node: GNU Tools62137 -Node: Compilers64298 -Ref: Compilers-Footnote-166908 -Node: Debugging66946 -Node: Cheat Sheet67709 -Node: Resources71618 -Node: TODO72195 -Node: Index72415 +Node: Top1162 +Node: Preface5303 +Node: Intended Audience5874 +Node: This Manual6756 +Node: Conventions8317 +Node: Acknowledgments9838 +Node: Reviewers10275 +Node: Contributing10596 +Node: Using Git14050 +Node: Push Pull14810 +Node: Repo Copies16376 +Ref: savannah-repo17391 +Ref: your-repo18448 +Ref: Repo Copies-Footnote-120167 +Node: Local Branches20224 +Ref: your-repo-222045 +Ref: Local Branches-Footnote-123131 +Node: Branches are state23189 +Node: Repo State23924 +Node: Local State26108 +Node: Remotes26776 +Node: Configuring git28133 +Ref: Configuring git-Footnote-130543 +Node: Development without commit access30714 +Node: Cloning31774 +Ref: Cloning-Footnote-133339 +Node: Switching Branches33406 +Node: Starting A New Branch34040 +Ref: Starting A New Branch-Footnote-136024 +Ref: Starting A New Branch-Footnote-236084 +Node: Undoing a change36166 +Node: Saving Without Committing36790 +Node: Updating38374 +Node: Rebasing38889 +Node: Merge Conflicts39511 +Node: Submitting Changes41788 +Ref: Submitting Changes-Footnote-143972 +Ref: Submitting Changes-Footnote-244011 +Ref: Submitting Changes-Footnote-344047 +Node: Removing Branches44095 +Node: Points to remember44631 +Node: Development with commit access46340 +Node: Initial setup46993 +Node: ssh clone47797 +Node: Developing patches48387 +Node: Developing new features49752 +Node: Developing fixes51664 +Node: General practices52755 +Node: Repo Maintenance57584 +Ref: Repo Maintenance-Footnote-160495 +Node: Development Stuff60631 +Node: Coding style61200 +Ref: Coding style-Footnote-161862 +Node: Doing paperwork61956 +Node: Tools62755 +Node: GNU Tools63345 +Node: Compilers65578 +Ref: Compilers-Footnote-168258 +Node: Debugging68296 +Node: Cheat Sheet69107 +Node: Resources73214 +Node: TODO73799 +Node: Index74021  End Tag Table diff --git a/doc/gawkworkflow.texi b/doc/gawkworkflow.texi index 71f022ab..d455c6d5 100644 --- a/doc/gawkworkflow.texi +++ b/doc/gawkworkflow.texi @@ -695,7 +695,7 @@ branches: @table @dfn @item Tracking Branches @cindex tracking branches -@cindex branches @subentry tracking +@cindex branches @subentry tracking @cindex @command{git} command @subentry @code{git checkout} Tracking branches track branches from the upstream repository. You first create a tracking branch simply by checking out a branch from the @@ -1253,7 +1253,7 @@ $ @kbd{git rebase master} @ii{``Start over'' from current} mast @print{} error: Failed to merge in the changes. @print{} Patch failed at 0001 Demo change. @print{} Use 'git am --show-current-patch' to see the failed patch -@print{} +@print{} @print{} Resolve all conflicts manually, mark them as resolved with @print{} "git add/rm ", then run "git rebase --continue". @print{} You can instead skip this commit: run "git rebase --skip". @@ -1877,7 +1877,7 @@ documentation. @ifnothtml @xref{Additions, Additions, Making Additions to @command{gawk}, gawk, GAWK: Effective awk Programming}, for a discussion of the general procedure. In particular, pay attention to the -coding style guidelines in +coding style guidelines in @ref{Adding Code, Adding Code, Adding New Features, gawk, GAWK: Effective awk Programming}.@footnote{Changes that don't follow the coding style guidelines won't be accepted. Period.} These two sections may also be found online, at @@ -1889,7 +1889,7 @@ respectively. See @uref{https://www.gnu.org/software/gawk/manual/html_node/Additions.html#Additions, the section @cite{Making Additions to @command{gawk}}}, in the online documentation for a discussion of the general procedure. In particular, pay attention to the -coding style guidelines in +coding style guidelines in @uref{https://www.gnu.org/software/gawk/manual/html_node/Adding-Code.html#Adding-Code, the section @cite{Adding New Features}}, also in the online documentation. @end ifhtml @@ -2052,7 +2052,7 @@ for instructions about obtaining the code using CVS and building it. @cindex @command{pcc} compiler @subentry Git mirror An alternative location for the source is the @command{gawk} maintainer's @uref{https://github.com/arnoldrobbins/pcc-revived, -Git mirror} of the code. If you're using Ubuntu GNU/Linux 18.04 +Git mirror} of the code. If you're using Ubuntu GNU/Linux 18.04 or later, you need to use the @code{ubuntu-18} branch from this Git mirror. @end table diff --git a/doc/pm-gawk.info b/doc/pm-gawk.info index 5503b317..fa186620 100644 --- a/doc/pm-gawk.info +++ b/doc/pm-gawk.info @@ -1,7 +1,7 @@ -This is pm-gawk.info, produced by makeinfo version 6.8 from +This is pm-gawk.info, produced by makeinfo version 7.0.1 from pm-gawk.texi. -Copyright (C) 2022 Terence Kelly +Copyright © 2022 Terence Kelly @@ -11,7 +11,7 @@ Copyright (C) 2022 Terence Kelly Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the -Invariant Sections being "Introduction" and "History", no Front-Cover +Invariant Sections being “Introduction” and “History”, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at INFO-DIR-SECTION Text creation and manipulation @@ -25,14 +25,14 @@ File: pm-gawk.info, Node: Top, Next: Introduction, Up: (dir) General Introduction ******************** -'gawk' 5.2 introduces a _persistent memory_ feature that can "remember" +‘gawk’ 5.2 introduces a _persistent memory_ feature that can “remember” script-defined variables and functions across executions; pass variables between unrelated scripts without serializing/parsing text files; and handle data sets larger than available memory plus swap. This supplementary manual provides an in-depth look at persistent-memory -'gawk'. +‘gawk’. -Copyright (C) 2022 Terence Kelly +Copyright © 2022 Terence Kelly @@ -42,7 +42,7 @@ Copyright (C) 2022 Terence Kelly Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the -Invariant Sections being "Introduction" and "History", no Front-Cover +Invariant Sections being “Introduction” and “History”, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at @@ -65,46 +65,46 @@ File: pm-gawk.info, Node: Introduction, Next: Quick Start, Prev: Top, Up: To ************** -GNU AWK ('gawk') 5.2, expected in September 2022, introduces a new +GNU AWK (‘gawk’) 5.2, expected in September 2022, introduces a new _persistent memory_ feature that makes AWK scripting easier and -sometimes improves performance. The new feature, called "pm-'gawk'," -can "remember" script-defined variables and functions across executions +sometimes improves performance. The new feature, called “pm-‘gawk’,” +can “remember” script-defined variables and functions across executions and can pass variables and functions between unrelated scripts without -serializing/parsing text files--all with near-zero fuss. pm-'gawk' does +serializing/parsing text files—all with near-zero fuss. pm-‘gawk’ does _not_ require non-volatile memory hardware nor any other exotic infrastructure; it runs on the ordinary conventional computers and operating systems that most of us have been using for decades. -The main 'gawk' documentation(1) covers the basics of the new +The main ‘gawk’ documentation(1) covers the basics of the new persistence feature. This supplementary manual provides additional -detail, tutorial examples, and a peek under the hood of pm-'gawk'. If -you're familiar with 'gawk' and Unix-like environments, dive straight +detail, tutorial examples, and a peek under the hood of pm-‘gawk’. If +you’re familiar with ‘gawk’ and Unix-like environments, dive straight in: - * *note Quick Start:: hits the ground running with a few keystrokes. - * *note Examples:: shows how pm-'gawk' streamlines typical AWK + • *note Quick Start:: hits the ground running with a few keystrokes. + • *note Examples:: shows how pm-‘gawk’ streamlines typical AWK scripting. - * *note Performance:: covers asymptotic efficiency, OS tuning, and + • *note Performance:: covers asymptotic efficiency, OS tuning, and more. - * *note Data Integrity:: explains how to protect data from mishaps. - * *note Acknowledgments:: thanks those who made pm-'gawk' happen. - * *note Installation:: shows where obtain pm-'gawk'. - * *note Debugging:: explains how to handle suspected bugs. - * *note History:: traces pm-'gawk''s persistence technology. + • *note Data Integrity:: explains how to protect data from mishaps. + • *note Acknowledgments:: thanks those who made pm-‘gawk’ happen. + • *note Installation:: shows where obtain pm-‘gawk’. + • *note Debugging:: explains how to handle suspected bugs. + • *note History:: traces pm-‘gawk’’s persistence technology. -You can find the latest version of this manual, and also the "director's -cut," at the web site for the persistent memory allocator used in -pm-'gawk': +You can find the latest version of this manual, and also the “director’s +cut,” at the web site for the persistent memory allocator used in +pm-‘gawk’: Two publications describe the persistent memory allocator and early -experiences with a pm-'gawk' prototype based on a fork of the official -'gawk' sources: - * - * +experiences with a pm-‘gawk’ prototype based on a fork of the official +‘gawk’ sources: + • + • @@ -116,8 +116,8 @@ Feel free to send me questions, suggestions, and experiences: ---------- Footnotes ---------- - (1) See and 'man -gawk' and 'info gawk'. + (1) See and ‘man +gawk’ and ‘info gawk’.  File: pm-gawk.info, Node: Quick Start, Next: Examples, Prev: Introduction, Up: Top @@ -125,34 +125,34 @@ File: pm-gawk.info, Node: Quick Start, Next: Examples, Prev: Introduction, U 2 Quick Start ************* -Here's pm-'gawk' in action at the 'bash' shell prompt ('$'): +Here’s pm-‘gawk’ in action at the ‘bash’ shell prompt (‘$’): $ truncate -s 4096000 heap.pma $ export GAWK_PERSIST_FILE=heap.pma $ gawk 'BEGIN{myvar = 47}' $ gawk 'BEGIN{myvar += 7; print myvar}' 54 -First, 'truncate' creates an empty (all-zero-bytes) "heap file" where -pm-'gawk' will store script variables; its size is a multiple of the -system page size (4 KiB). Next, 'export' sets an environment variable -that enables pm-'gawk' to find the heap file; if 'gawk' does _not_ see +First, ‘truncate’ creates an empty (all-zero-bytes) “heap file” where +pm-‘gawk’ will store script variables; its size is a multiple of the +system page size (4 KiB). Next, ‘export’ sets an environment variable +that enables pm-‘gawk’ to find the heap file; if ‘gawk’ does _not_ see this envar, persistence is not activated. The third command runs a -one-line AWK script that initializes variable 'myvar', which will reside +one-line AWK script that initializes variable ‘myvar’, which will reside in the heap file and thereby outlive the interpreter process that -initialized it. Finally, the fourth command invokes pm-'gawk' on a -_different_ one-line script that increments and prints 'myvar'. The -output shows that pm-'gawk' has indeed "remembered" 'myvar' across -executions of unrelated scripts. (If the 'gawk' executable in your -search '$PATH' lacks the persistence feature, the output in the above -example will be '7' instead of '54'. *Note Installation::.) To disable -persistence until you want it again, prevent 'gawk' from finding the -heap file via 'unset GAWK_PERSIST_FILE'. To permanently "forget" script +initialized it. Finally, the fourth command invokes pm-‘gawk’ on a +_different_ one-line script that increments and prints ‘myvar’. The +output shows that pm-‘gawk’ has indeed “remembered” ‘myvar’ across +executions of unrelated scripts. (If the ‘gawk’ executable in your +search ‘$PATH’ lacks the persistence feature, the output in the above +example will be ‘7’ instead of ‘54’. *Note Installation::.) To disable +persistence until you want it again, prevent ‘gawk’ from finding the +heap file via ‘unset GAWK_PERSIST_FILE’. To permanently “forget” script variables, delete the heap file. - Toggling persistence by 'export'-ing and 'unset'-ing "ambient" envars -requires care: Forgetting to 'unset' when you no longer want persistence -can cause confusing bugs. Fortunately, 'bash' allows you to pass envars + Toggling persistence by ‘export’-ing and ‘unset’-ing “ambient” envars +requires care: Forgetting to ‘unset’ when you no longer want persistence +can cause confusing bugs. Fortunately, ‘bash’ allows you to pass envars more deliberately, on a per-command basis: $ rm heap.pma # start fresh $ unset GAWK_PERSIST_FILE # eliminate ambient envar @@ -163,10 +163,10 @@ more deliberately, on a per-command basis: 7 $ GAWK_PERSIST_FILE=heap.pma gawk 'BEGIN{myvar += 7; print myvar}' 54 -The first 'gawk' invocation sees the special envar prepended on the -command line, so it activates pm-'gawk'. The second 'gawk' invocation, +The first ‘gawk’ invocation sees the special envar prepended on the +command line, so it activates pm-‘gawk’. The second ‘gawk’ invocation, however, does _not_ see the envar and therefore does not access the -script variable stored in the heap file. The third 'gawk' invocation +script variable stored in the heap file. The third ‘gawk’ invocation does see the special envar and therefore uses the script variable from the heap file. @@ -185,8 +185,8 @@ File: pm-gawk.info, Node: Examples, Next: Performance, Prev: Quick Start, Up 3 Examples ********** -Our first example uses pm-'gawk' to streamline analysis of a prose -corpus, Mark Twain's 'Tom Sawyer' and 'Huckleberry Finn' from +Our first example uses pm-‘gawk’ to streamline analysis of a prose +corpus, Mark Twain’s ‘Tom Sawyer’ and ‘Huckleberry Finn’ from and . We first convert non-alphabetic characters to newlines (so each line has at most one @@ -194,10 +194,10 @@ word) and convert to lowercase: $ tr -c a-zA-Z '\n' < 74-0.txt | tr A-Z a-z > sawyer.txt $ tr -c a-zA-Z '\n' < 76-0.txt | tr A-Z a-z > finn.txt - It's easy to count word frequencies with AWK's associative arrays. -pm-'gawk' makes these arrays persistent, so we need not re-ingest the -entire corpus every time we ask a new question ("read once, analyze -happily ever after"): + It’s easy to count word frequencies with AWK’s associative arrays. +pm-‘gawk’ makes these arrays persistent, so we need not re-ingest the +entire corpus every time we ask a new question (“read once, analyze +happily ever after”): $ truncate -s 100M twain.pma $ export GAWK_PERSIST_FILE=twain.pma $ gawk '{ts[$1]++}' sawyer.txt # ingest @@ -205,48 +205,48 @@ happily ever after"): 92 11 $ gawk 'BEGIN{print ts["necktie"], ts["knife"]}' # query 2 27 -The 'truncate' command above creates a heap file large enough to store +The ‘truncate’ command above creates a heap file large enough to store all of the data it must eventually contain, with plenty of room to -spare. (As we'll see in *note Sparse Heap Files::, this isn't -wasteful.) The 'export' command ensures that subsequent 'gawk' -invocations activate pm-'gawk'. The first pm-'gawk' command stores 'Tom -Sawyer''s word frequencies in associative array 'ts[]'. Because this -array is persistent, subsequent pm-'gawk' commands can access it without +spare. (As we’ll see in *note Sparse Heap Files::, this isn’t +wasteful.) The ‘export’ command ensures that subsequent ‘gawk’ +invocations activate pm-‘gawk’. The first pm-‘gawk’ command stores ‘Tom +Sawyer’’s word frequencies in associative array ‘ts[]’. Because this +array is persistent, subsequent pm-‘gawk’ commands can access it without having to parse the input file again. - Expanding our analysis to encompass a second book is easy. Let's -populate a new associative array 'hf[]' with the word frequencies in -'Huckleberry Finn': + Expanding our analysis to encompass a second book is easy. Let’s +populate a new associative array ‘hf[]’ with the word frequencies in +‘Huckleberry Finn’: $ gawk '{hf[$1]++}' finn.txt -Now we can freely intermix accesses to both books' data conveniently and +Now we can freely intermix accesses to both books’ data conveniently and efficiently, without the overhead and coding fuss of repeated input parsing: $ gawk 'BEGIN{print ts["river"], hf["river"]}' 26 142 - By making AWK more interactive, pm-'gawk' invites casual -conversations with data. If we're curious what words in 'Finn' are -absent from 'Sawyer', answers (including "flapdoodle," "yellocution," -and "sockdolager") are easy to find: + By making AWK more interactive, pm-‘gawk’ invites casual +conversations with data. If we’re curious what words in ‘Finn’ are +absent from ‘Sawyer’, answers (including “flapdoodle,” “yellocution,” +and “sockdolager”) are easy to find: $ gawk 'BEGIN{for(w in hf) if (!(w in ts)) print w}' - Rumors of Twain's death may be exaggerated. If he publishes new + Rumors of Twain’s death may be exaggerated. If he publishes new books in the future, it will be easy to incorporate them into our analysis incrementally. The performance benefits of incremental processing for common AWK chores such as log file analysis are discussed in and the companion paper cited therein, and below in *note Performance::. - Exercise: The "Markov" AWK script on page 79 of Kernighan & Pike's -'The Practice of Programming' generates random text reminiscent of a + Exercise: The “Markov” AWK script on page 79 of Kernighan & Pike’s +‘The Practice of Programming’ generates random text reminiscent of a given corpus using a simple statistical modeling technique. This script -consists of a "learning" or "training" phase followed by an -output-generation phase. Use pm-'gawk' to de-couple the two phases and +consists of a “learning” or “training” phase followed by an +output-generation phase. Use pm-‘gawk’ to de-couple the two phases and to allow the statistical model to incrementally ingest additions to the input corpus. - Our second example considers another domain that plays to AWK's -strengths, data analysis. For simplicity we'll create two small input + Our second example considers another domain that plays to AWK’s +strengths, data analysis. For simplicity we’ll create two small input files of numeric data. $ printf '1\n2\n3\n4\n5\n' > A.dat $ printf '5\n6\n7\n8\n9\n' > B.dat @@ -262,26 +262,26 @@ statistics: $ gawk -f summary_conventional.awk A.dat B.dat min: 1 max: 9 mean: 5 - To use pm-'gawk' for the same purpose, we first create a heap file -for our AWK script variables and tell pm-'gawk' where to find it via the + To use pm-‘gawk’ for the same purpose, we first create a heap file +for our AWK script variables and tell pm-‘gawk’ where to find it via the usual environment variable: $ truncate -s 10M stats.pma $ export GAWK_PERSIST_FILE=stats.pma -pm-'gawk' requires changing the above script to ensure that 'min' and -'max' are initialized exactly once, when the heap file is first used, +pm-‘gawk’ requires changing the above script to ensure that ‘min’ and +‘max’ are initialized exactly once, when the heap file is first used, and _not_ every time the script runs. Furthermore, whereas -script-defined variables such as 'min' retain their values across -pm-'gawk' executions, built-in AWK variables such as 'NR' are reset to -zero every time pm-'gawk' runs, so we can't use them in the same way. -Here's a modified script for pm-'gawk': +script-defined variables such as ‘min’ retain their values across +pm-‘gawk’ executions, built-in AWK variables such as ‘NR’ are reset to +zero every time pm-‘gawk’ runs, so we can’t use them in the same way. +Here’s a modified script for pm-‘gawk’: $ cat summary_persistent.awk ! init { min = max = $1; init = 1 } min > $1 { min = $1 } max < $1 { max = $1 } { sum += $1; ++n } END { print "min: " min " max: " max " mean: " sum/n } -Note the different pattern on the first line and the introduction of 'n' -to supplant 'NR'. When used with pm-'gawk', this new initialization +Note the different pattern on the first line and the introduction of ‘n’ +to supplant ‘NR’. When used with pm-‘gawk’, this new initialization logic supports the same kind of cumulative processing that we saw in the text-analysis scenario. For example, we can ingest our input files separately: @@ -290,21 +290,21 @@ separately: $ gawk -f summary_persistent.awk B.dat min: 1 max: 9 mean: 5 -As expected, after the second pm-'gawk' invocation consumes the second +As expected, after the second pm-‘gawk’ invocation consumes the second input file, the output matches that of the non-persistent script that read both files at once. Exercise: Amend the AWK scripts above to compute the median and -mode(s) using both conventional 'gawk' and pm-'gawk'. (The median is +mode(s) using both conventional ‘gawk’ and pm-‘gawk’. (The median is the number in the middle of a sorted list; if the length of the list is even, average the two numbers at the middle. The modes are the values that occur most frequently.) - Our third and final set of examples shows that pm-'gawk' allows us to + Our third and final set of examples shows that pm-‘gawk’ allows us to bundle both script-defined data and also user-defined _functions_ in a persistent heap that may be passed freely between unrelated AWK scripts. - The following shell transcript repeatedly invokes pm-'gawk' to create + The following shell transcript repeatedly invokes pm-‘gawk’ to create and then employ a user-defined function. These separate invocations involve several different AWK scripts that communicate via the heap file. Each invocation can add user-defined functions and add or remove @@ -324,18 +324,18 @@ data from the heap that subsequent invocations will access. $ gawk 'BEGIN { for (i=0; i<47; i++) a[i]=i }' $ gawk 'BEGIN { print count(a) }' 47 -The first pm-'gawk' command creates user-defined function 'count()', +The first pm-‘gawk’ command creates user-defined function ‘count()’, which returns the number of entries in a given associative array; note -that variable 't' is local to 'count()', not global. The next pm-'gawk' +that variable ‘t’ is local to ‘count()’, not global. The next pm-‘gawk’ command populates a persistent associative array with three entries; not -surprisingly, the 'count()' call in the following pm-'gawk' command -finds these three entries. The next two pm-'gawk' commands respectively +surprisingly, the ‘count()’ call in the following pm-‘gawk’ command +finds these three entries. The next two pm-‘gawk’ commands respectively delete an array entry and print the reduced count, 2. The two commands after that delete the entire array and print a count of zero. Finally, -the last two pm-'gawk' commands populate the array with 47 entries and +the last two pm-‘gawk’ commands populate the array with 47 entries and count them. - The following shell script invokes pm-'gawk' repeatedly to create a + The following shell script invokes pm-‘gawk’ repeatedly to create a collection of user-defined functions that perform basic operations on quadratic polynomials: evaluation at a given point, computing the discriminant, and using the quadratic formula to find the roots. It @@ -368,12 +368,11 @@ File: pm-gawk.info, Node: Performance, Next: Data Integrity, Prev: Examples, ************* This chapter explains several performance advantages that result from -the implementation of persistent memory in pm-'gawk', shows how tuning +the implementation of persistent memory in pm-‘gawk’, shows how tuning the underlying operating system sometimes improves performance, and presents experimental performance measurements. To make the discussion -concrete, we use examples from a GNU/Linux system--GNU utilities atop -the Linux OS--but the principles apply to other modern operating -systems. +concrete, we use examples from a GNU/Linux system—GNU utilities atop the +Linux OS—but the principles apply to other modern operating systems. * Menu: @@ -390,52 +389,52 @@ File: pm-gawk.info, Node: Constant-Time Array Access, Next: Virtual Memory and 4.1 Constant-Time Array Access ============================== -pm-'gawk' preserves the efficiency of data access when data structures +pm-‘gawk’ preserves the efficiency of data access when data structures are created by one process and later re-used by a different process. - Consider the associative arrays used to analyze Mark Twain's books in -*note Examples::. We created arrays 'ts[]' and 'hf[]' by reading files -'sawyer.txt' and 'finn.txt'. If N denotes the total volume of data in + Consider the associative arrays used to analyze Mark Twain’s books in +*note Examples::. We created arrays ‘ts[]’ and ‘hf[]’ by reading files +‘sawyer.txt’ and ‘finn.txt’. If N denotes the total volume of data in these files, building the associative arrays typically requires time -proportional to N, or "O(N) expected time" in the lingo of asymptotic +proportional to N, or “O(N) expected time” in the lingo of asymptotic analysis. If W is the number of unique words in the input files, the size of the associative arrays will be proportional to W, or O(W). Accessing individual array elements requires only _constant_ or O(1) -expected time, not O(N) or O(W) time, because 'gawk' implements arrays +expected time, not O(N) or O(W) time, because ‘gawk’ implements arrays as hash tables. - The performance advantage of pm-'gawk' arises when different + The performance advantage of pm-‘gawk’ arises when different processes create and access associative arrays. Accessing an element of -a persistent array created by a previous pm-'gawk' process, as we did +a persistent array created by a previous pm-‘gawk’ process, as we did earlier in BEGIN{print ts["river"], hf["river"]}, still requires only O(1) time, which is asymptotically far superior to the alternatives. Naïvely reconstructing arrays by re-ingesting all raw inputs in every -'gawk' process that accesses the arrays would of course require O(N) -time--a profligate cost if the text corpus is large. Dumping arrays to +‘gawk’ process that accesses the arrays would of course require O(N) +time—a profligate cost if the text corpus is large. Dumping arrays to files and re-loading them as needed would reduce the preparation time for access to O(W). That can be a substantial improvement in practice; N is roughly 19 times larger than W in our Twain corpus. Nonetheless O(W) -remains far slower than pm-'gawk''s O(1). As we'll see in *note +remains far slower than pm-‘gawk’’s O(1). As we’ll see in *note Results::, the difference is not merely theoretical. - The persistent memory implementation beneath pm-'gawk' enables it to + The persistent memory implementation beneath pm-‘gawk’ enables it to avoid work proportional to N or W when accessing an element of a -persistent associative array. Under the hood, pm-'gawk' stores +persistent associative array. Under the hood, pm-‘gawk’ stores script-defined AWK variables such as associative arrays in a persistent heap laid out in a memory-mapped file (the heap file). When an AWK -script accesses an element of an associative array, pm-'gawk' performs a +script accesses an element of an associative array, pm-‘gawk’ performs a lookup on the corresponding hash table, which in turn accesses memory on the persistent heap. Modern operating systems implement memory-mapped files in such a way that these memory accesses trigger the bare minimum of data movement required: Only those parts of the heap file containing -needed data are "paged in" to the memory of the pm-'gawk' process. In -the worst case, the heap file is not in the file system's in-memory +needed data are “paged in” to the memory of the pm-‘gawk’ process. In +the worst case, the heap file is not in the file system’s in-memory cache, so the required pages must be faulted into memory from storage. Our asymptotic analysis of efficiency applies regardless of whether the heap file is cached or not. The entire heap file is _not_ accessed merely to access an element of a persistent associative array. - Persistent memory thus enables pm-'gawk' to offer the flexibility of + Persistent memory thus enables pm-‘gawk’ to offer the flexibility of de-coupling data ingestion from analytic queries without the fuss and overhead of serializing and loading data structures and without sacrificing constant-time access to the associative arrays that make AWK @@ -448,49 +447,49 @@ File: pm-gawk.info, Node: Virtual Memory and Big Data, Next: Sparse Heap Files =============================== Small data sets seldom spoil the delights of AWK by causing performance -troubles, with or without persistence. As the size of the 'gawk' -interpreter's internal data structures approaches the capacity of +troubles, with or without persistence. As the size of the ‘gawk’ +interpreter’s internal data structures approaches the capacity of physical memory, however, acceptable performance requires understanding modern operating systems and sometimes tuning them. Fortunately -pm-'gawk' offers new degrees of control for performance-conscious users +pm-‘gawk’ offers new degrees of control for performance-conscious users tackling large data sets. A terse mnemonic captures the basic principle: Precluding paging promotes peak performance and prevents perplexity. - Modern operating systems feature "virtual memory" that strives to + Modern operating systems feature “virtual memory” that strives to appear both larger than installed DRAM (which is small) and faster than -installed storage devices (which are slow). As a program's memory +installed storage devices (which are slow). As a program’s memory footprint approaches the capacity of DRAM, the virtual memory system -transparently "pages" (moves) the program's data between DRAM and a -"swap area" on a storage device. Paging can degrade performance mildly -or severely, depending on the program's memory access patterns. Random +transparently “pages” (moves) the program’s data between DRAM and a +“swap area” on a storage device. Paging can degrade performance mildly +or severely, depending on the program’s memory access patterns. Random accesses to large data structures can trigger excessive paging and -dramatic slowdown. Unfortunately, the hash tables beneath AWK's +dramatic slowdown. Unfortunately, the hash tables beneath AWK’s signature associative arrays inherently require random memory accesses, so large associative arrays can be problematic. Persistence changes the rules in our favor: The OS pages data to -pm-'gawk''s _heap file_ instead of the swap area. This won't help +pm-‘gawk’’s _heap file_ instead of the swap area. This won’t help performance much if the heap file resides in a conventional storage-backed file system. On Unix-like systems, however, we may place -the heap file in a DRAM-backed file system such as '/dev/shm/', which +the heap file in a DRAM-backed file system such as ‘/dev/shm/’, which entirely prevents paging to slow storage devices. Temporarily placing the heap file in such a file system is a reasonable expedient, with two caveats: First, keep in mind that DRAM-backed file systems perish when the machine reboots or crashes, so you must copy the heap file to a conventional storage-backed file system when your computation is done. -Second, pm-'gawk''s memory footprint can't exceed available DRAM if you +Second, pm-‘gawk’’s memory footprint can’t exceed available DRAM if you place the heap file in a DRAM-backed file system. Tuning OS paging parameters may improve performance if you decide to -run pm-'gawk' with a heap file in a conventional storage-backed file +run pm-‘gawk’ with a heap file in a conventional storage-backed file system. Some OSes have unhelpful default habits regarding modified -("dirty") memory backed by files. For example, the OS may write dirty +(“dirty”) memory backed by files. For example, the OS may write dirty memory pages to the heap file periodically and/or when the OS believes -that "too much" memory is dirty. Such "eager" writeback can degrade -performance noticeably and brings no benefit to pm-'gawk'. Fortunately +that “too much” memory is dirty. Such “eager” writeback can degrade +performance noticeably and brings no benefit to pm-‘gawk’. Fortunately some OSes allow paging defaults to be over-ridden so that writeback is -"lazy" rather than eager. For Linux see the discussion of the 'dirty_*' +“lazy” rather than eager. For Linux see the discussion of the ‘dirty_*’ parameters at . Changing these parameters can prevent wasteful eager paging:(1) @@ -498,13 +497,13 @@ Changing these parameters can prevent wasteful eager paging:(1) $ echo 100 | sudo tee /proc/sys/vm/dirty_ratio $ echo 300000 | sudo tee /proc/sys/vm/dirty_expire_centisecs $ echo 50000 | sudo tee /proc/sys/vm/dirty_writeback_centisecs -Tuning paging parameters can help non-persistent 'gawk' as well as -pm-'gawk'. [Disclaimer: OS tuning is an occult art, and your mileage +Tuning paging parameters can help non-persistent ‘gawk’ as well as +pm-‘gawk’. [Disclaimer: OS tuning is an occult art, and your mileage may vary.] ---------- Footnotes ---------- - (1) The 'tee' rigmarole is explained at + (1) The ‘tee’ rigmarole is explained at .  @@ -513,55 +512,55 @@ File: pm-gawk.info, Node: Sparse Heap Files, Next: Persistence versus Durabili 4.3 Sparse Heap Files ===================== -To be frugal with storage resources, pm-'gawk''s heap file should be -created as a "sparse file": a file whose logical size is larger than its +To be frugal with storage resources, pm-‘gawk’’s heap file should be +created as a “sparse file”: a file whose logical size is larger than its storage resource footprint. Modern file systems support sparse files, -which are easy to create using the 'truncate' tool shown in our +which are easy to create using the ‘truncate’ tool shown in our examples. - Let's first create a conventional _non_-sparse file using 'echo': + Let’s first create a conventional _non_-sparse file using ‘echo’: $ echo hi > dense $ ls -l dense -rw-rw-r--. 1 me me 3 Aug 5 23:08 dense $ du -h dense 4.0K dense -The 'ls' utility reports that file 'dense' is three bytes long (two for -the letters in "hi" plus one for the newline). The 'du' utility reports -that this file consumes 4 KiB of storage--one block of disk, as small as -a non-sparse file's storage footprint can be. Now let's use 'truncate' +The ‘ls’ utility reports that file ‘dense’ is three bytes long (two for +the letters in “hi” plus one for the newline). The ‘du’ utility reports +that this file consumes 4 KiB of storage—one block of disk, as small as +a non-sparse file’s storage footprint can be. Now let’s use ‘truncate’ to create a logically enormous sparse file and check its physical size: $ truncate -s 1T sparse $ ls -l sparse -rw-rw-r--. 1 me me 1099511627776 Aug 5 22:33 sparse $ du -h sparse 0 sparse -Whereas 'ls' reports the logical file size that we expect (one TiB or 2 -raised to the power 40 bytes), 'du' reveals that the file occupies no +Whereas ‘ls’ reports the logical file size that we expect (one TiB or 2 +raised to the power 40 bytes), ‘du’ reveals that the file occupies no storage whatsoever. The file system will allocate physical storage resources beneath this file as data is written to it; reading unwritten regions of the file yields zeros. - The "pay as you go" storage cost of sparse files offers both -convenience and control for pm-'gawk' users. If your file system + The “pay as you go” storage cost of sparse files offers both +convenience and control for pm-‘gawk’ users. If your file system supports sparse files, go ahead and create lavishly capacious heap files -for pm-'gawk'. Their logical size costs nothing and persistent memory -allocation within pm-'gawk' won't fail until physical storage resources +for pm-‘gawk’. Their logical size costs nothing and persistent memory +allocation within pm-‘gawk’ won’t fail until physical storage resources beneath the file system are exhausted. But if instead you want to _prevent_ a heap file from consuming too much storage, simply set its -initial size to whatever bound you wish to enforce; it won't eat more -disk than that. Copying sparse files with GNU 'cp' creates sparse +initial size to whatever bound you wish to enforce; it won’t eat more +disk than that. Copying sparse files with GNU ‘cp’ creates sparse copies by default. File-system encryption can preclude sparse files: If the cleartext of a byte offset range within a file is all zero bytes, the corresponding -ciphertext probably shouldn't be all zeros! Encrypting at the storage +ciphertext probably shouldn’t be all zeros! Encrypting at the storage layer instead of the file system layer may offer acceptable security while still permitting file systems to implement sparse files. Sometimes you might prefer a dense heap file backed by pre-allocated storage resources, for example to increase the likelihood that -pm-'gawk''s internal memory allocation will succeed until the persistent -heap occupies the entire heap file. The 'fallocate' utility will do the +pm-‘gawk’’s internal memory allocation will succeed until the persistent +heap occupies the entire heap file. The ‘fallocate’ utility will do the trick: $ fallocate -l 1M mibi $ ls -l mibi @@ -577,37 +576,37 @@ File: pm-gawk.info, Node: Persistence versus Durability, Next: Experiments, P ================================= Arguably the most important general guideline for good performance in -computer systems is, "pay only for what you need."(1) To apply this -maxim to pm-'gawk' we must distinguish two concepts that are frequently +computer systems is, “pay only for what you need.”(1) To apply this +maxim to pm-‘gawk’ we must distinguish two concepts that are frequently conflated: persistence and durability.(2) (A third logically distinct concept is the subject of *note Data Integrity::.) - "Persistent" data outlive the processes that access them, but don't -necessarily last forever. For example, as explained in 'man -mq_overview', message queues are persistent because they exist until the -system shuts down. "Durable" data reside on a physical medium that + “Persistent” data outlive the processes that access them, but don’t +necessarily last forever. For example, as explained in ‘man +mq_overview’, message queues are persistent because they exist until the +system shuts down. “Durable” data reside on a physical medium that retains its contents even without continuously supplied power. For example, hard disk drives and solid state drives store durable data. Confusion arises because persistence and durability are often correlated: Data in ordinary file systems backed by HDDs or SSDs are -typically both persistent and durable. Familiarity with 'fsync()' and -'msync()' might lead us to believe that durability is a subset of +typically both persistent and durable. Familiarity with ‘fsync()’ and +‘msync()’ might lead us to believe that durability is a subset of persistence, but in fact the two characteristics are orthogonal: Data in the swap area are durable but not persistent; data in DRAM-backed file -systems such as '/dev/shm/' are persistent but not durable. +systems such as ‘/dev/shm/’ are persistent but not durable. Durability often costs more than persistence, so -performance-conscious pm-'gawk' users pay the added premium for +performance-conscious pm-‘gawk’ users pay the added premium for durability only when persistence alone is not sufficient. Two ways to avoid unwanted durability overheads were discussed in *note Virtual -Memory and Big Data::: Place pm-'gawk''s heap file in a DRAM-backed file +Memory and Big Data::: Place pm-‘gawk’’s heap file in a DRAM-backed file system, or disable eager writeback to the heap file. Expedients such as these enable you to remove durability overheads from the critical path of multi-stage data analyses even when you want heap files to eventually -be durable: Allow pm-'gawk' to run at full speed with persistence alone; -force the heap file to durability (using the 'cp' and 'sync' utilities +be durable: Allow pm-‘gawk’ to run at full speed with persistence alone; +force the heap file to durability (using the ‘cp’ and ‘sync’ utilities as necessary) after output has been emitted to the next stage of the -analysis and the pm-'gawk' process using the heap has terminated. +analysis and the pm-‘gawk’ process using the heap has terminated. Experimenting with synthetic data builds intuition for how persistence and durability affect performance. You can write a little @@ -615,17 +614,17 @@ AWK or C program to generate a stream of random text, or just cobble together a quick and dirty generator on the command line: $ openssl rand --base64 1000000 | tr -c a-zA-Z '\n' > random.dat Varying the size of random inputs can, for example, find where -performance "falls off the cliff" as pm-'gawk''s memory footprint +performance “falls off the cliff” as pm-‘gawk’’s memory footprint exceeds the capacity of DRAM and paging begins. Experiments require careful methodology, especially when the heap -file is in a storage-backed file system. Overlooking the file system's +file is in a storage-backed file system. Overlooking the file system’s DRAM cache can easily misguide interpretation of results and foil repeatability. Fortunately Linux allows us to invalidate the file -system cache and thus mimic a "cold start" condition resembling the +system cache and thus mimic a “cold start” condition resembling the immediate aftermath of a machine reboot. Accesses to ordinary files on durable storage will then be served from the storage devices, not from -cache. Read about 'sync' and '/proc/sys/vm/drop_caches' at +cache. Read about ‘sync’ and ‘/proc/sys/vm/drop_caches’ at . ---------- Footnotes ---------- @@ -635,11 +634,11 @@ Certain well-known textbook algorithms continue to grind away fruitlessly long after having computed all of their output. See . - (2) In recent years the term "persistent memory" has sometimes been -used to denote novel byte-addressable non-volatile memory hardware--an + (2) In recent years the term “persistent memory” has sometimes been +used to denote novel byte-addressable non-volatile memory hardware—an unfortunate practice that contradicts sensible long-standing convention and causes needless confusion. NVM provides durability. Persistent -memory is a software abstraction that doesn't require NVM. See +memory is a software abstraction that doesn’t require NVM. See .  @@ -648,7 +647,7 @@ File: pm-gawk.info, Node: Experiments, Next: Results, Prev: Persistence versu 4.5 Experiments =============== -The C-shell ('csh') script listed below illustrates concepts and +The C-shell (‘csh’) script listed below illustrates concepts and implements tips presented in this chapter. It produced the results discussed in *note Results:: in roughly 20 minutes on an aging laptop. You can cut and paste the code listing below into a file, or download it @@ -658,31 +657,31 @@ from . word frequency queries over a text corpus: The naïve approach of reading the corpus into an associative array for every query; manually dumping a text representation of the word-frequency table and manually loading it -prior to a query; using 'gawk''s 'rwarray' extension to dump and load an -associative array; and using pm-'gawk' to maintain a persistent +prior to a query; using ‘gawk’’s ‘rwarray’ extension to dump and load an +associative array; and using pm-‘gawk’ to maintain a persistent associative array. - Comments at the top explain prerequisites. Lines 8-10 set input + Comments at the top explain prerequisites. Lines 8–10 set input parameters: the directory where tests are run and where files including the heap file are held, the off-the-shelf timer used to measure run times and other performance characteristics such as peak memory usage, -and the size of the input. The default input size results in pm-'gawk' +and the size of the input. The default input size results in pm-‘gawk’ memory footprints under 3 GiB, which is large enough for interesting -results and small enough to fit in DRAM and avoid paging on today's -computers. Lines 13-14 define a homebrew timer. +results and small enough to fit in DRAM and avoid paging on today’s +computers. Lines 13–14 define a homebrew timer. Two sections of the script are relevant if the default run directory -is changed from '/dev/shm/' to a directory in a conventional -storage-backed file system: Lines 15-17 define the mechanism for -clearing file data cached in DRAM; lines 23-30 set Linux kernel +is changed from ‘/dev/shm/’ to a directory in a conventional +storage-backed file system: Lines 15–17 define the mechanism for +clearing file data cached in DRAM; lines 23–30 set Linux kernel parameters to discourage eager paging. - Lines 37-70 spit out, compile, and run a little C program to generate + Lines 37–70 spit out, compile, and run a little C program to generate a random text corpus. This program is fast, flexible, and deterministic, generating the same random output given the same parameters. - Lines 71-100 run the four different AWK approaches on the same random + Lines 71–100 run the four different AWK approaches on the same random input, reporting separately the time to build and to query the associative array containing word frequencies. @@ -808,7 +807,7 @@ results. Keep in mind that performance measurements are often sensitive to seemingly irrelevant factors. For example, the program that runs first may have the advantage of a cooler CPU; later contestants may start with a hot CPU and consequent clock throttling by a modern -processor's thermal regulation apparatus. Very generally, performance +processor’s thermal regulation apparatus. Very generally, performance measurement is a notoriously tricky business. For scripting, whose main motive is convenience rather than speed, the proper role for performance measurements is to qualitatively test hypotheses such as those that @@ -833,32 +832,32 @@ Constant-Time Array Access::. All four approaches require roughly four minutes to read the synthetic input data. The naïve approach must do this every time it performs a query, but the other three build an associative array to support queries and separately serve such queries. -The 'freqtbl' and 'rwarray' approaches build an associative array of +The ‘freqtbl’ and ‘rwarray’ approaches build an associative array of word frequencies, serialize it to an intermediate file, and then read the entire intermediate file prior to serving queries; the former does -this manually and the latter uses a 'gawk' extension. Both can serve -queries in roughly ten seconds, not four minutes. As we'd expect from +this manually and the latter uses a ‘gawk’ extension. Both can serve +queries in roughly ten seconds, not four minutes. As we’d expect from the asymptotic analysis, performing work proportional to the number of words is preferable to work proportional to the size of the raw input -corpus: O(W) time is faster than O(N). And as we'd expect, pm-'gawk''s +corpus: O(W) time is faster than O(N). And as we’d expect, pm-‘gawk’’s constant-time queries are faster still, by roughly two orders of -magnitude. For the computations considered here, pm-'gawk' makes the +magnitude. For the computations considered here, pm-‘gawk’ makes the difference between blink-of-an-eye interactive queries and response -times long enough for the user's mind to wander. +times long enough for the user’s mind to wander. - Whereas 'freqtbl' and 'rwarray' reconstruct an associative array -prior to accessing an individual element, pm-'gawk' stores a ready-made -associative array in persistent memory. That's why its intermediate + Whereas ‘freqtbl’ and ‘rwarray’ reconstruct an associative array +prior to accessing an individual element, pm-‘gawk’ stores a ready-made +associative array in persistent memory. That’s why its intermediate file (the heap file) is much larger than the other two intermediate -files, why the heap file is nearly as large as pm-'gawk''s peak memory +files, why the heap file is nearly as large as pm-‘gawk’’s peak memory footprint while building the persistent array, and why its memory footprint is very small while serving a query that accesses a single array element. The upside of the large heap file is O(1) access instead -of O(W)--a classic time-space tradeoff. If storage is a scarce -resource, all three intermediate files can be compressed, 'freqtbl' by a -factor of roughly 2.7, 'rwarray' by roughly 5.6x, and pm-'gawk' by -roughly 11x using 'xz'. Compression is CPU-intensive and slow, another -time-space tradeoff. +of O(W)—a classic time-space tradeoff. If storage is a scarce resource, +all three intermediate files can be compressed, ‘freqtbl’ by a factor of +roughly 2.7, ‘rwarray’ by roughly 5.6x, and pm-‘gawk’ by roughly 11x +using ‘xz’. Compression is CPU-intensive and slow, another time-space +tradeoff.  File: pm-gawk.info, Node: Data Integrity, Next: Acknowledgments, Prev: Performance, Up: Top @@ -871,7 +870,7 @@ command-line typos can harm your data, but precautions can mitigate these risks. In scripting scenarios it usually suffices to create safe backups of important files at appropriate times. As simple as this sounds, care is needed to achieve genuine protection and to reduce the -costs of backups. Here's a prudent yet frugal way to back up a heap +costs of backups. Here’s a prudent yet frugal way to back up a heap file between uses: $ backup_base=heap_bk_`date +%s` $ cp --reflink=always heap.pma $backup_base.pma @@ -888,49 +887,49 @@ Timestamps in backup filenames make it easy to find the most recent copy if the heap file is damaged, even if last-mod metadata are inadvertently altered. - The 'cp' command's '--reflink' option reduces both the storage + The ‘cp’ command’s ‘--reflink’ option reduces both the storage footprint of the copy and the time required to make it. Just as sparse -files provide "pay as you go" storage footprints, reflink copying offers -"pay as you _change_" storage costs.(1) A reflink copy shares storage +files provide “pay as you go” storage footprints, reflink copying offers +“pay as you _change_” storage costs.(1) A reflink copy shares storage with the original file. The file system ensures that subsequent changes -to either file don't affect the other. Reflink copying is not available +to either file don’t affect the other. Reflink copying is not available on all file systems; XFS, BtrFS, and OCFS2 currently support it.(2) Fortunately you can install, say, an XFS file system _inside an ordinary -file_ on some other file system, such as 'ext4'.(3) +file_ on some other file system, such as ‘ext4’.(3) - After creating a backup copy of the heap file we use 'sync' to force + After creating a backup copy of the heap file we use ‘sync’ to force it down to durable media. Otherwise the copy may reside only in -volatile DRAM memory--the file system's cache--where an OS crash or -power failure could corrupt it.(4) After 'sync'-ing the backup we -create and 'sync' a "success indicator" file with extension '.done' to -address a nasty corner case: Power may fail _while_ a backup is being -copied from the primary heap file, leaving either file, or both, corrupt -on storage--a particularly worrisome possibility for jobs that run -unattended. Upon reboot, each '.done' file attests that the +volatile DRAM memory—the file system’s cache—where an OS crash or power +failure could corrupt it.(4) After ‘sync’-ing the backup we create and +‘sync’ a “success indicator” file with extension ‘.done’ to address a +nasty corner case: Power may fail _while_ a backup is being copied from +the primary heap file, leaving either file, or both, corrupt on +storage—a particularly worrisome possibility for jobs that run +unattended. Upon reboot, each ‘.done’ file attests that the corresponding backup succeeded, making it easy to identify the most recent successful backup. - Finally, if you're serious about tolerating failures you must "train -as you would fight" by testing your hardware/software stack against + Finally, if you’re serious about tolerating failures you must “train +as you would fight” by testing your hardware/software stack against realistic failures. For realistic power-failure testing, see . ---------- Footnotes ---------- (1) The system call that implements reflink copying is described in -'man ioctl_ficlone'. +‘man ioctl_ficlone’. - (2) The '--reflink' option creates copies as sparse as the original. -If reflink copying is not available, '--sparse=always' should be used. + (2) The ‘--reflink’ option creates copies as sparse as the original. +If reflink copying is not available, ‘--sparse=always’ should be used. (3) See . - (4) On some OSes 'sync' provides very weak guarantees, but on Linux -'sync' returns only after all file system data are flushed down to -durable storage. If your 'sync' is unreliable, write a little C program -that calls 'fsync()' to flush a file. To be safe, also call 'fsync()' -on every enclosing directory on the file's 'realpath()' up to the root. + (4) On some OSes ‘sync’ provides very weak guarantees, but on Linux +‘sync’ returns only after all file system data are flushed down to +durable storage. If your ‘sync’ is unreliable, write a little C program +that calls ‘fsync()’ to flush a file. To be safe, also call ‘fsync()’ +on every enclosing directory on the file’s ‘realpath()’ up to the root.  File: pm-gawk.info, Node: Acknowledgments, Next: Installation, Prev: Data Integrity, Up: Top @@ -938,18 +937,18 @@ File: pm-gawk.info, Node: Acknowledgments, Next: Installation, Prev: Data Int 6 Acknowledgments ***************** -Haris Volos, Zi Fan Tan, and Jianan Li developed a persistent 'gawk' -prototype based on a fork of the 'gawk' source. Advice from 'gawk' +Haris Volos, Zi Fan Tan, and Jianan Li developed a persistent ‘gawk’ +prototype based on a fork of the ‘gawk’ source. Advice from ‘gawk’ maintainer Arnold Robbins to me, which I forwarded to them, proved very -helpful. Robbins moreover implemented, documented, and tested pm-'gawk' -for the official version of 'gawk'; along the way he suggested numerous -improvements for the 'pma' memory allocator beneath pm-'gawk'. Corinna -Vinschen suggested other improvements to 'pma' and tested pm-'gawk' on +helpful. Robbins moreover implemented, documented, and tested pm-‘gawk’ +for the official version of ‘gawk’; along the way he suggested numerous +improvements for the ‘pma’ memory allocator beneath pm-‘gawk’. Corinna +Vinschen suggested other improvements to ‘pma’ and tested pm-‘gawk’ on Cygwin. Nelson H. F. Beebe provided access to Solaris machines for testing. Robbins, Volos, Li, Tan, Jon Bentley, and Hans Boehm reviewed drafts of this user manual and provided useful feedback. Bentley suggested the min/max/mean example in *note Examples::, and also the -exercise of making Kernighan & Pike's "Markov" script persistent. Volos +exercise of making Kernighan & Pike’s “Markov” script persistent. Volos provided and tested the advice on tuning OS parameters in *note Virtual Memory and Big Data::. Stan Park provided insights about virtual memory, file systems, and utilities. @@ -960,16 +959,16 @@ File: pm-gawk.info, Node: Installation, Next: Debugging, Prev: Acknowledgment Appendix A Installation *********************** -'gawk' 5.2 featuring persistent memory is expected to be released in +‘gawk’ 5.2 featuring persistent memory is expected to be released in September 2022; look for it at . If 5.2 is not released yet, the master git branch is available at . -Unpack the tarball, run './bootstrap.sh', './configure', 'make', and -'make check', then try some of the examples presented earlier. In the -normal course of events, 5.2 and later 'gawk' releases featuring -pm-'gawk' will appear in the software package management systems of -major GNU/Linux distros. Eventually pm-'gawk' will be available in the -default 'gawk' on such systems. +Unpack the tarball, run ‘./bootstrap.sh’, ‘./configure’, ‘make’, and +‘make check’, then try some of the examples presented earlier. In the +normal course of events, 5.2 and later ‘gawk’ releases featuring +pm-‘gawk’ will appear in the software package management systems of +major GNU/Linux distros. Eventually pm-‘gawk’ will be available in the +default ‘gawk’ on such systems.  File: pm-gawk.info, Node: Debugging, Next: History, Prev: Installation, Up: Top @@ -977,32 +976,32 @@ File: pm-gawk.info, Node: Debugging, Next: History, Prev: Installation, Up: Appendix B Debugging ******************** -For bugs unrelated to persistence, see the 'gawk' documentation, e.g., -'GAWK: Effective AWK Programming', available at +For bugs unrelated to persistence, see the ‘gawk’ documentation, e.g., +‘GAWK: Effective AWK Programming’, available at . - If pm-'gawk' doesn't behave as you expect, first consider whether -you're using the heap file that you intend; using the wrong heap file is + If pm-‘gawk’ doesn’t behave as you expect, first consider whether +you’re using the heap file that you intend; using the wrong heap file is a common mistake. Other fertile sources of bugs for newcomers are the -fact that a 'BEGIN' block is executed every time pm-'gawk' runs, which -isn't always what you really want, and the fact that built-in AWK -variables such as 'NR' are always reset to zero every time the +fact that a ‘BEGIN’ block is executed every time pm-‘gawk’ runs, which +isn’t always what you really want, and the fact that built-in AWK +variables such as ‘NR’ are always reset to zero every time the interpreter runs. See the discussion of initialization surrounding the min/max/mean script in *note Examples::. - If you suspect a persistence-related bug in pm-'gawk', you can set an -environment variable that will cause its persistent heap module, 'pma', -to emit more verbose error messages; for details see the main 'gawk' + If you suspect a persistence-related bug in pm-‘gawk’, you can set an +environment variable that will cause its persistent heap module, ‘pma’, +to emit more verbose error messages; for details see the main ‘gawk’ documentation. - Programmers: You can re-compile 'gawk' with assertions enabled, which -will trigger extensive integrity checks within 'pma'. Ensure that -'pma.c' is compiled _without_ the '-DNDEBUG' flag when 'make' builds -'gawk'. Run the resulting executable on small inputs, because the + Programmers: You can re-compile ‘gawk’ with assertions enabled, which +will trigger extensive integrity checks within ‘pma’. Ensure that +‘pma.c’ is compiled _without_ the ‘-DNDEBUG’ flag when ‘make’ builds +‘gawk’. Run the resulting executable on small inputs, because the integrity checks can be very slow. If assertions fail, that likely -indicates bugs somewhere in pm-'gawk'. Report such bugs to me (Terence -Kelly) and also following the procedures in the main 'gawk' -documentation. Specify what version of 'gawk' you're using, and try to +indicates bugs somewhere in pm-‘gawk’. Report such bugs to me (Terence +Kelly) and also following the procedures in the main ‘gawk’ +documentation. Specify what version of ‘gawk’ you’re using, and try to provide a small and simple script that reliably reproduces the bug.  @@ -1011,43 +1010,43 @@ File: pm-gawk.info, Node: History, Prev: Debugging, Up: Top Appendix C History ****************** -The pm-'gawk' persistence feature is based on a new persistent memory -allocator, 'pma', whose design is described in +The pm-‘gawk’ persistence feature is based on a new persistent memory +allocator, ‘pma’, whose design is described in . It is instructive to -trace the evolutionary paths that led to 'pma' and pm-'gawk'. +trace the evolutionary paths that led to ‘pma’ and pm-‘gawk’. I wrote many AWK scripts during my dissertation research on Web caching twenty years ago, most of which processed log files from Web -servers and Web caches. Persistent 'gawk' would have made these scripts +servers and Web caches. Persistent ‘gawk’ would have made these scripts smaller, faster, and easier to write, but at the time I was unable even -to imagine that pm-'gawk' is possible. So I wrote a lot of bothersome, +to imagine that pm-‘gawk’ is possible. So I wrote a lot of bothersome, inefficient code that manually dumped and re-loaded AWK script variables to and from text files. A decade would pass before my colleagues and I began to connect the dots that make persistent scripting possible, and a -further decade would pass before pm-'gawk' came together. +further decade would pass before pm-‘gawk’ came together. Circa 2011 while working at HP Labs I developed a fault-tolerant -distributed computing platform called "Ken," which contained a -persistent memory allocator that resembles a simplified 'pma': It -presented a 'malloc()'-like C interface and it allocated memory from a +distributed computing platform called “Ken,” which contained a +persistent memory allocator that resembles a simplified ‘pma’: It +presented a ‘malloc()’-like C interface and it allocated memory from a file-backed memory mapping. Experience with Ken convinced me that the software abstraction of persistent memory offers important attractions compared with the alternatives for managing persistent data (e.g., -relational databases and key-value stores). Unfortunately, Ken's -allocator is so deeply intertwined with the rest of Ken that it's -essentially inseparable; to enjoy the benefits of Ken's persistent -memory, one must "buy in" to a larger and more complicated value -proposition. Whatever its other virtues might be, Ken isn't ideal for +relational databases and key-value stores). Unfortunately, Ken’s +allocator is so deeply intertwined with the rest of Ken that it’s +essentially inseparable; to enjoy the benefits of Ken’s persistent +memory, one must “buy in” to a larger and more complicated value +proposition. Whatever its other virtues might be, Ken isn’t ideal for showcasing the benefits of persistent memory in isolation. Another entangled aspect of Ken was a crash-tolerance mechanism that, in retrospect, can be viewed as a user-space implementation of -failure-atomic 'msync()'. The first post-Ken disentanglement effort +failure-atomic ‘msync()’. The first post-Ken disentanglement effort isolated the crash-tolerance mechanism and implemented it in the Linux -kernel, calling the result "failure-atomic 'msync()'" (FAMS). FAMS -strengthens the semantics of ordinary standard 'msync()' by guaranteeing +kernel, calling the result “failure-atomic ‘msync()’” (FAMS). FAMS +strengthens the semantics of ordinary standard ‘msync()’ by guaranteeing that the durable state of a memory-mapped file always reflects the most -recent successful 'msync()' call, even in the presence of failures such +recent successful ‘msync()’ call, even in the presence of failures such as power outages and OS or application crashes. The original Linux kernel FAMS prototype is described in a paper by Park et al. in EuroSys 2013. My colleagues and I subsequently implemented FAMS in several @@ -1055,39 +1054,39 @@ different ways including in file systems (FAST 2015) and user-space libraries. My most recent FAMS implementation, which leverages the reflink copying feature described elsewhere in this manual, is now the foundation of a new crash-tolerance feature in the venerable and -ubiquitous GNU 'dbm' ('gdbm') database +ubiquitous GNU ‘dbm’ (‘gdbm’) database (). In recent years my attention has returned to the advantages of persistent memory programming, lately a hot topic thanks to the commercial availability of byte-addressable non-volatile memory hardware -(which, confusingly, is nowadays marketed as "persistent memory"). The +(which, confusingly, is nowadays marketed as “persistent memory”). The software abstraction of persistent memory and the corresponding programming style, however, are perfectly compatible with _conventional_ -computers--machines with neither non-volatile memory nor any other +computers—machines with neither non-volatile memory nor any other special hardware or software. I wrote a few papers making this point, for example . In early 2022 I wrote a new stand-alone persistent memory allocator, -'pma', to make persistent memory programming easy on conventional -hardware. The 'pma' interface is compatible with 'malloc()' and, unlike -Ken's allocator, 'pma' is not coupled to a particular crash-tolerance -mechanism. Using 'pma' is easy and, at least to some, enjoyable. +‘pma’, to make persistent memory programming easy on conventional +hardware. The ‘pma’ interface is compatible with ‘malloc()’ and, unlike +Ken’s allocator, ‘pma’ is not coupled to a particular crash-tolerance +mechanism. Using ‘pma’ is easy and, at least to some, enjoyable. Ken had been integrated into prototype forks of both the V8 JavaScript interpreter and a Scheme interpreter, so it was natural to -consider whether 'pma' might similarly enhance an interpreted scripting +consider whether ‘pma’ might similarly enhance an interpreted scripting language. GNU AWK was a natural choice because the source code is -orderly and because 'gawk' has a single primary maintainer with an open +orderly and because ‘gawk’ has a single primary maintainer with an open mind regarding new features. Jianan Li, Zi Fan Tan, Haris Volos, and I began considering -persistence for 'gawk' in late 2021. While I was writing 'pma', they -prototyped pm-'gawk' in a fork of the 'gawk' source. Experience with +persistence for ‘gawk’ in late 2021. While I was writing ‘pma’, they +prototyped pm-‘gawk’ in a fork of the ‘gawk’ source. Experience with the prototype confirmed the expected convenience and efficiency benefits -of pm-'gawk', and by spring 2022 Arnold Robbins was implementing -persistence in the official version of 'gawk'. The persistence feature -in official 'gawk' differs slightly from the prototype: The former uses +of pm-‘gawk’, and by spring 2022 Arnold Robbins was implementing +persistence in the official version of ‘gawk’. The persistence feature +in official ‘gawk’ differs slightly from the prototype: The former uses an environment variable to pass the heap file name to the interpreter whereas the latter uses a mandatory command-line option. In many respects, however, the two implementations are similar. A description @@ -1096,43 +1095,43 @@ of the prototype, including performance measurements, is available at - I enjoy several aspects of pm-'gawk'. It's unobtrusive; as you gain + I enjoy several aspects of pm-‘gawk’. It’s unobtrusive; as you gain familiarity and experience, it fades into the background of your -scripting. It's simple in both concept and implementation, and more +scripting. It’s simple in both concept and implementation, and more importantly it simplifies your scripts; much of its value is measured not in the code it enables you to write but rather in the code it lets -you discard. It's all that I needed for my dissertation research twenty +you discard. It’s all that I needed for my dissertation research twenty years ago, and more. Anecdotally, it appears to inspire creativity in -early adopters, who have devised uses that pm-'gawk''s designers never -anticipated. I'm curious to see what new purposes you find for it. +early adopters, who have devised uses that pm-‘gawk’’s designers never +anticipated. I’m curious to see what new purposes you find for it.  Tag Table: -Node: Top806 -Node: Introduction2008 -Ref: Introduction-Footnote-14345 -Node: Quick Start4441 -Node: Examples7232 -Node: Performance16128 -Node: Constant-Time Array Access16832 -Node: Virtual Memory and Big Data20122 -Ref: Virtual Memory and Big Data-Footnote-123673 -Node: Sparse Heap Files23809 -Node: Persistence versus Durability26819 -Ref: Persistence versus Durability-Footnote-130216 -Ref: Persistence versus Durability-Footnote-230462 -Node: Experiments30856 -Node: Results42567 -Node: Data Integrity46139 -Ref: Data Integrity-Footnote-148945 -Ref: Data Integrity-Footnote-249038 -Ref: Data Integrity-Footnote-349182 -Ref: Data Integrity-Footnote-449276 -Node: Acknowledgments49631 -Node: Installation50789 -Node: Debugging51583 -Node: History53252 +Node: Top815 +Node: Introduction2036 +Ref: Introduction-Footnote-14464 +Node: Quick Start4568 +Node: Examples7485 +Node: Performance16627 +Node: Constant-Time Array Access17337 +Node: Virtual Memory and Big Data20704 +Ref: Virtual Memory and Big Data-Footnote-124341 +Node: Sparse Heap Files24481 +Node: Persistence versus Durability27580 +Ref: Persistence versus Durability-Footnote-131060 +Ref: Persistence versus Durability-Footnote-231306 +Node: Experiments31707 +Node: Results43458 +Node: Data Integrity47097 +Ref: Data Integrity-Footnote-149964 +Ref: Data Integrity-Footnote-250061 +Ref: Data Integrity-Footnote-350213 +Ref: Data Integrity-Footnote-450307 +Node: Acknowledgments50688 +Node: Installation51888 +Node: Debugging52718 +Node: History54467  End Tag Table -- cgit v1.2.1 From 1b4506029a421f09df3a41377f0f6260aa7aa100 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 27 Feb 2023 21:08:31 +0200 Subject: Small doc improvement. --- doc/ChangeLog | 6 + doc/gawk.info | 1122 ++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 4 + doc/gawktexi.in | 4 + 4 files changed, 577 insertions(+), 559 deletions(-) (limited to 'doc') diff --git a/doc/ChangeLog b/doc/ChangeLog index ed573c16..315b1195 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,9 @@ +2023-02-27 Arnold D. Robbins + + * gawktexi.in (Include Files): Mention that -i and @include are + the same and that files are only included once, even if nested + in multiple include files. + 2023-02-26 Arnold D. Robbins * Multiple files: Remove trailing whitespace. diff --git a/doc/gawk.info b/doc/gawk.info index a1e6043a..0a55097b 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -3413,6 +3413,10 @@ reducing the need for writing complex and tedious command lines. In particular, ‘@include’ is very useful for writing CGI scripts to be run from web pages. + The ‘@include’ directive and the ‘-i’/‘--include’ command line option +are completely equivalent. An included program source is not loaded if +it has been previously loaded. + The rules for finding a source file described in *note AWKPATH Variable:: also apply to files loaded with ‘@include’. @@ -39346,565 +39350,565 @@ Ref: AWKLIBPATH Variable-Footnote-1156510 Node: Other Environment Variables156907 Node: Exit Status161403 Node: Include Files162118 -Node: Loading Shared Libraries165989 -Node: Obsolete167481 -Node: Undocumented168117 -Node: Invoking Summary168416 -Node: Regexp171443 -Node: Regexp Usage172937 -Node: Escape Sequences175038 -Node: Regexp Operators181569 -Node: Regexp Operator Details182062 -Ref: Regexp Operator Details-Footnote-1189928 -Node: Interval Expressions190087 -Ref: Interval Expressions-Footnote-1192356 -Node: Bracket Expressions192456 -Ref: table-char-classes195016 -Node: Leftmost Longest198538 -Node: Computed Regexps199898 -Node: GNU Regexp Operators203421 -Node: Case-sensitivity207444 -Ref: Case-sensitivity-Footnote-1210401 -Ref: Case-sensitivity-Footnote-2210646 -Node: Regexp Summary210762 -Node: Reading Files212286 -Node: Records214603 -Node: awk split records215714 -Node: gawk split records220604 -Ref: gawk split records-Footnote-1225898 -Node: Fields225935 -Node: Nonconstant Fields228822 -Ref: Nonconstant Fields-Footnote-1231133 -Node: Changing Fields231349 -Node: Field Separators237657 -Node: Default Field Splitting240473 -Node: Regexp Field Splitting241616 -Node: Single Character Fields245445 -Node: Command Line Field Separator246540 -Node: Full Line Fields249927 -Ref: Full Line Fields-Footnote-1251507 -Ref: Full Line Fields-Footnote-2251553 -Node: Field Splitting Summary251661 -Node: Constant Size253830 -Node: Fixed width data254574 -Node: Skipping intervening258093 -Node: Allowing trailing data258895 -Node: Fields with fixed data259960 -Node: Splitting By Content261586 -Ref: Splitting By Content-Footnote-1265525 -Node: More CSV265688 -Node: FS versus FPAT267341 -Node: Testing field creation268550 -Node: Multiple Line270243 -Node: Getline276725 -Node: Plain Getline279311 -Node: Getline/Variable281961 -Node: Getline/File283158 -Node: Getline/Variable/File284606 -Ref: Getline/Variable/File-Footnote-1286251 -Node: Getline/Pipe286347 -Node: Getline/Variable/Pipe289160 -Node: Getline/Coprocess290343 -Node: Getline/Variable/Coprocess291666 -Node: Getline Notes292432 -Node: Getline Summary295393 -Ref: table-getline-variants295837 -Node: Read Timeout296742 -Ref: Read Timeout-Footnote-1300706 -Node: Retrying Input300764 -Node: Command-line directories302031 -Node: Input Summary302969 -Node: Input Exercises306349 -Node: Printing306789 -Node: Print308675 -Node: Print Examples310181 -Node: Output Separators313034 -Node: OFMT315145 -Node: Printf316568 -Node: Basic Printf317373 -Node: Control Letters319009 -Node: Format Modifiers324478 -Node: Printf Examples330764 -Node: Redirection333309 -Node: Special FD340383 -Ref: Special FD-Footnote-1343673 -Node: Special Files343759 -Node: Other Inherited Files344388 -Node: Special Network345453 -Node: Special Caveats346341 -Node: Close Files And Pipes347324 -Ref: Close Files And Pipes-Footnote-1353461 -Node: Close Return Value353617 -Ref: table-close-pipe-return-values354892 -Ref: Close Return Value-Footnote-1355726 -Node: Nonfatal355882 -Node: Output Summary358313 -Node: Output Exercises359599 -Node: Expressions360290 -Node: Values361492 -Node: Constants362170 -Node: Scalar Constants362867 -Ref: Scalar Constants-Footnote-1365442 -Node: Nondecimal-numbers365692 -Node: Regexp Constants368813 -Node: Using Constant Regexps369359 -Node: Standard Regexp Constants370005 -Node: Strong Regexp Constants373305 -Node: Variables377156 -Node: Using Variables377821 -Node: Assignment Options379801 -Node: Conversion382363 -Node: Strings And Numbers382895 -Ref: Strings And Numbers-Footnote-1386114 -Node: Locale influences conversions386223 -Ref: table-locale-affects389073 -Node: All Operators389716 -Node: Arithmetic Ops390357 -Node: Concatenation393187 -Ref: Concatenation-Footnote-1396137 -Node: Assignment Ops396260 -Ref: table-assign-ops401399 -Node: Increment Ops402781 -Node: Truth Values and Conditions406380 -Node: Truth Values407506 -Node: Typing and Comparison408597 -Node: Variable Typing409433 -Ref: Variable Typing-Footnote-1416095 -Ref: Variable Typing-Footnote-2416175 -Node: Comparison Operators416258 -Ref: table-relational-ops416685 -Node: POSIX String Comparison420371 -Ref: POSIX String Comparison-Footnote-1422130 -Ref: POSIX String Comparison-Footnote-2422273 -Node: Boolean Ops422357 -Ref: Boolean Ops-Footnote-1427050 -Node: Conditional Exp427146 -Node: Function Calls428932 -Node: Precedence432882 -Node: Locales436759 -Node: Expressions Summary438441 -Node: Patterns and Actions441104 -Node: Pattern Overview442246 -Node: Regexp Patterns443972 -Node: Expression Patterns444518 -Node: Ranges448427 -Node: BEGIN/END451605 -Node: Using BEGIN/END452418 -Ref: Using BEGIN/END-Footnote-1455328 -Node: I/O And BEGIN/END455438 -Node: BEGINFILE/ENDFILE457919 -Node: Empty461360 -Node: Using Shell Variables461677 -Node: Action Overview464015 -Node: Statements466450 -Node: If Statement468348 -Node: While Statement469917 -Node: Do Statement472005 -Node: For Statement473191 -Node: Switch Statement476548 -Node: Break Statement479099 -Node: Continue Statement481291 -Node: Next Statement483223 -Node: Nextfile Statement485720 -Node: Exit Statement488581 -Node: Built-in Variables491114 -Node: User-modified492293 -Node: Auto-set500504 -Ref: Auto-set-Footnote-1518357 -Ref: Auto-set-Footnote-2518575 -Node: ARGC and ARGV518631 -Node: Pattern Action Summary523070 -Node: Arrays525686 -Node: Array Basics527063 -Node: Array Intro527913 -Ref: figure-array-elements529929 -Ref: Array Intro-Footnote-1532793 -Node: Reference to Elements532925 -Node: Assigning Elements535447 -Node: Array Example535942 -Node: Scanning an Array537911 -Node: Controlling Scanning541008 -Ref: Controlling Scanning-Footnote-1547671 -Node: Numeric Array Subscripts547995 -Node: Uninitialized Subscripts550269 -Node: Delete551948 -Ref: Delete-Footnote-1554762 -Node: Multidimensional554819 -Node: Multiscanning558024 -Node: Arrays of Arrays559696 -Node: Arrays Summary564596 -Node: Functions566785 -Node: Built-in567845 -Node: Calling Built-in569034 -Node: Boolean Functions571081 -Node: Numeric Functions571651 -Ref: Numeric Functions-Footnote-1575844 -Ref: Numeric Functions-Footnote-2576528 -Ref: Numeric Functions-Footnote-3576580 -Node: String Functions576856 -Ref: String Functions-Footnote-1602686 -Ref: String Functions-Footnote-2602820 -Ref: String Functions-Footnote-3603080 -Node: Gory Details603167 -Ref: table-sub-escapes605074 -Ref: table-sub-proposed606720 -Ref: table-posix-sub608230 -Ref: table-gensub-escapes609918 -Ref: Gory Details-Footnote-1610852 -Node: I/O Functions611006 -Ref: table-system-return-values617693 -Ref: I/O Functions-Footnote-1619864 -Ref: I/O Functions-Footnote-2620012 -Node: Time Functions620132 -Ref: Time Functions-Footnote-1631288 -Ref: Time Functions-Footnote-2631364 -Ref: Time Functions-Footnote-3631526 -Ref: Time Functions-Footnote-4631637 -Ref: Time Functions-Footnote-5631755 -Ref: Time Functions-Footnote-6631990 -Node: Bitwise Functions632272 -Ref: table-bitwise-ops632874 -Ref: Bitwise Functions-Footnote-1639128 -Ref: Bitwise Functions-Footnote-2639307 -Node: Type Functions639504 -Node: I18N Functions643097 -Node: User-defined644840 -Node: Definition Syntax645660 -Ref: Definition Syntax-Footnote-1651488 -Node: Function Example651565 -Ref: Function Example-Footnote-1654544 -Node: Function Calling654566 -Node: Calling A Function655160 -Node: Variable Scope656130 -Node: Pass By Value/Reference659184 -Node: Function Caveats661916 -Ref: Function Caveats-Footnote-1664011 -Node: Return Statement664135 -Node: Dynamic Typing667190 -Node: Indirect Calls668146 -Node: Functions Summary679305 -Node: Library Functions682082 -Ref: Library Functions-Footnote-1685630 -Ref: Library Functions-Footnote-2685773 -Node: Library Names685948 -Ref: Library Names-Footnote-1689742 -Ref: Library Names-Footnote-2689969 -Node: General Functions690065 -Node: Strtonum Function691259 -Node: Assert Function694341 -Node: Round Function697793 -Node: Cliff Random Function699371 -Node: Ordinal Functions700404 -Ref: Ordinal Functions-Footnote-1703513 -Ref: Ordinal Functions-Footnote-2703765 -Node: Join Function703979 -Ref: Join Function-Footnote-1705782 -Node: Getlocaltime Function705986 -Node: Readfile Function709760 -Node: Shell Quoting711789 -Node: Isnumeric Function713245 -Node: Data File Management714657 -Node: Filetrans Function715289 -Node: Rewind Function719583 -Node: File Checking721562 -Ref: File Checking-Footnote-1722934 -Node: Empty Files723141 -Node: Ignoring Assigns725208 -Node: Getopt Function726782 -Ref: Getopt Function-Footnote-1742616 -Node: Passwd Functions742828 -Ref: Passwd Functions-Footnote-1752010 -Node: Group Functions752098 -Ref: Group Functions-Footnote-1760236 -Node: Walking Arrays760449 -Node: Library Functions Summary763497 -Node: Library Exercises764921 -Node: Sample Programs765408 -Node: Running Examples766190 -Node: Clones766942 -Node: Cut Program768214 -Node: Egrep Program778655 -Node: Id Program787972 -Node: Split Program798086 -Ref: Split Program-Footnote-1808321 -Node: Tee Program808508 -Node: Uniq Program811417 -Node: Wc Program819282 -Node: Bytes vs. Characters819677 -Node: Using extensions821279 -Node: wc program822059 -Node: Miscellaneous Programs827065 -Node: Dupword Program828294 -Node: Alarm Program830357 -Node: Translate Program835270 -Ref: Translate Program-Footnote-1840011 -Node: Labels Program840289 -Ref: Labels Program-Footnote-1843730 -Node: Word Sorting843822 -Node: History Sorting848016 -Node: Extract Program850291 -Node: Simple Sed858560 -Node: Igawk Program861776 -Ref: Igawk Program-Footnote-1877023 -Ref: Igawk Program-Footnote-2877229 -Ref: Igawk Program-Footnote-3877359 -Node: Anagram Program877486 -Node: Signature Program880582 -Node: Programs Summary881834 -Node: Programs Exercises883092 -Ref: Programs Exercises-Footnote-1887408 -Node: Advanced Features887494 -Node: Nondecimal Data889988 -Node: Boolean Typed Values891618 -Node: Array Sorting893593 -Node: Controlling Array Traversal894322 -Ref: Controlling Array Traversal-Footnote-1902829 -Node: Array Sorting Functions902951 -Ref: Array Sorting Functions-Footnote-1909070 -Node: Two-way I/O909278 -Ref: Two-way I/O-Footnote-1917273 -Ref: Two-way I/O-Footnote-2917464 -Node: TCP/IP Networking917546 -Node: Profiling920726 -Node: Persistent Memory930436 -Ref: Persistent Memory-Footnote-1939394 -Node: Extension Philosophy939525 -Node: Advanced Features Summary941060 -Node: Internationalization943330 -Node: I18N and L10N945036 -Node: Explaining gettext945731 -Ref: Explaining gettext-Footnote-1951884 -Ref: Explaining gettext-Footnote-2952079 -Node: Programmer i18n952244 -Ref: Programmer i18n-Footnote-1957357 -Node: Translator i18n957406 -Node: String Extraction958242 -Ref: String Extraction-Footnote-1959420 -Node: Printf Ordering959518 -Ref: Printf Ordering-Footnote-1962380 -Node: I18N Portability962448 -Ref: I18N Portability-Footnote-1965022 -Node: I18N Example965093 -Ref: I18N Example-Footnote-1968493 -Ref: I18N Example-Footnote-2968569 -Node: Gawk I18N968686 -Node: I18N Summary969342 -Node: Debugger970743 -Node: Debugging971767 -Node: Debugging Concepts972216 -Node: Debugging Terms974042 -Node: Awk Debugging976655 -Ref: Awk Debugging-Footnote-1977632 -Node: Sample Debugging Session977772 -Node: Debugger Invocation978324 -Node: Finding The Bug979953 -Node: List of Debugger Commands986639 -Node: Breakpoint Control988016 -Node: Debugger Execution Control991848 -Node: Viewing And Changing Data995328 -Node: Execution Stack999066 -Node: Debugger Info1000747 -Node: Miscellaneous Debugger Commands1005046 -Node: Readline Support1010299 -Node: Limitations1011245 -Node: Debugging Summary1013889 -Node: Namespaces1015192 -Node: Global Namespace1016319 -Node: Qualified Names1017764 -Node: Default Namespace1018799 -Node: Changing The Namespace1019574 -Node: Naming Rules1021268 -Node: Internal Name Management1023183 -Node: Namespace Example1024253 -Node: Namespace And Features1026836 -Node: Namespace Summary1028293 -Node: Arbitrary Precision Arithmetic1029806 -Node: Computer Arithmetic1031325 -Ref: table-numeric-ranges1035142 -Ref: table-floating-point-ranges1035640 -Ref: Computer Arithmetic-Footnote-11036299 -Node: Math Definitions1036358 -Ref: table-ieee-formats1039403 -Node: MPFR features1039977 -Node: MPFR On Parole1040430 -Ref: MPFR On Parole-Footnote-11041274 -Node: MPFR Intro1041433 -Node: FP Math Caution1043123 -Ref: FP Math Caution-Footnote-11044197 -Node: Inexactness of computations1044574 -Node: Inexact representation1045605 -Node: Comparing FP Values1046988 -Node: Errors accumulate1048246 -Node: Strange values1049713 -Ref: Strange values-Footnote-11052379 -Node: Getting Accuracy1052484 -Node: Try To Round1055221 -Node: Setting precision1056128 -Ref: table-predefined-precision-strings1056833 -Node: Setting the rounding mode1058718 -Ref: table-gawk-rounding-modes1059100 -Ref: Setting the rounding mode-Footnote-11063158 -Node: Arbitrary Precision Integers1063341 -Ref: Arbitrary Precision Integers-Footnote-11066553 -Node: Checking for MPFR1066709 -Node: POSIX Floating Point Problems1068199 -Ref: POSIX Floating Point Problems-Footnote-11073063 -Node: Floating point summary1073101 -Node: Dynamic Extensions1075365 -Node: Extension Intro1076964 -Node: Plugin License1078272 -Node: Extension Mechanism Outline1079085 -Ref: figure-load-extension1079536 -Ref: figure-register-new-function1081116 -Ref: figure-call-new-function1082221 -Node: Extension API Description1084340 -Node: Extension API Functions Introduction1086069 -Ref: table-api-std-headers1087967 -Node: General Data Types1092431 -Ref: General Data Types-Footnote-11101599 -Node: Memory Allocation Functions1101914 -Ref: Memory Allocation Functions-Footnote-11106639 -Node: Constructor Functions1106738 -Node: API Ownership of MPFR and GMP Values1110643 -Node: Registration Functions1112204 -Node: Extension Functions1112908 -Node: Exit Callback Functions1118484 -Node: Extension Version String1119803 -Node: Input Parsers1120498 -Node: Output Wrappers1133990 -Node: Two-way processors1138698 -Node: Printing Messages1141059 -Ref: Printing Messages-Footnote-11142273 -Node: Updating ERRNO1142428 -Node: Requesting Values1143227 -Ref: table-value-types-returned1143980 -Node: Accessing Parameters1145089 -Node: Symbol Table Access1146373 -Node: Symbol table by name1146889 -Ref: Symbol table by name-Footnote-11150100 -Node: Symbol table by cookie1150232 -Ref: Symbol table by cookie-Footnote-11154513 -Node: Cached values1154577 -Ref: Cached values-Footnote-11158221 -Node: Array Manipulation1158378 -Ref: Array Manipulation-Footnote-11159481 -Node: Array Data Types1159518 -Ref: Array Data Types-Footnote-11162340 -Node: Array Functions1162440 -Node: Flattening Arrays1167469 -Node: Creating Arrays1174521 -Node: Redirection API1179371 -Node: Extension API Variables1182392 -Node: Extension Versioning1183117 -Ref: gawk-api-version1183554 -Node: Extension GMP/MPFR Versioning1185342 -Node: Extension API Informational Variables1187048 -Node: Extension API Boilerplate1188209 -Node: Changes from API V11192345 -Node: Finding Extensions1193979 -Node: Extension Example1194554 -Node: Internal File Description1195378 -Node: Internal File Ops1199702 -Ref: Internal File Ops-Footnote-11211260 -Node: Using Internal File Ops1211408 -Ref: Using Internal File Ops-Footnote-11213839 -Node: Extension Samples1214117 -Node: Extension Sample File Functions1215686 -Node: Extension Sample Fnmatch1223824 -Node: Extension Sample Fork1225419 -Node: Extension Sample Inplace1226695 -Node: Extension Sample Ord1230367 -Node: Extension Sample Readdir1231243 -Ref: table-readdir-file-types1232140 -Node: Extension Sample Revout1233278 -Node: Extension Sample Rev2way1233875 -Node: Extension Sample Read write array1234627 -Node: Extension Sample Readfile1237901 -Node: Extension Sample Time1239032 -Node: Extension Sample API Tests1241322 -Node: gawkextlib1241830 -Node: Extension summary1244866 -Node: Extension Exercises1248724 -Node: Language History1250002 -Node: V7/SVR3.11251716 -Node: SVR41254066 -Node: POSIX1255598 -Node: BTL1257023 -Node: POSIX/GNU1257792 -Node: Feature History1264323 -Node: Common Extensions1283441 -Node: Ranges and Locales1284810 -Ref: Ranges and Locales-Footnote-11289611 -Ref: Ranges and Locales-Footnote-21289638 -Ref: Ranges and Locales-Footnote-31289877 -Node: Contributors1290100 -Node: History summary1296305 -Node: Installation1297751 -Node: Gawk Distribution1298715 -Node: Getting1299207 -Node: Extracting1300206 -Node: Distribution contents1301918 -Node: Unix Installation1309998 -Node: Quick Installation1310820 -Node: Compiling with MPFR1313366 -Node: Shell Startup Files1314072 -Node: Additional Configuration Options1315229 -Node: Configuration Philosophy1317616 -Node: Compiling from Git1320118 -Node: Building the Documentation1320677 -Node: Non-Unix Installation1322089 -Node: PC Installation1322565 -Node: PC Binary Installation1323438 -Node: PC Compiling1324343 -Node: PC Using1325521 -Node: Cygwin1329249 -Node: MSYS1330505 -Node: OpenVMS Installation1331137 -Node: OpenVMS Compilation1331818 -Ref: OpenVMS Compilation-Footnote-11333301 -Node: OpenVMS Dynamic Extensions1333363 -Node: OpenVMS Installation Details1334999 -Node: OpenVMS Running1337434 -Node: OpenVMS GNV1341571 -Node: Bugs1342326 -Node: Bug definition1343250 -Node: Bug address1346901 -Node: Usenet1350492 -Node: Performance bugs1351723 -Node: Asking for help1354741 -Node: Maintainers1356732 -Node: Other Versions1357759 -Node: Installation summary1366691 -Node: Notes1368075 -Node: Compatibility Mode1368885 -Node: Additions1369707 -Node: Accessing The Source1370652 -Node: Adding Code1372187 -Node: New Ports1379323 -Node: Derived Files1383833 -Ref: Derived Files-Footnote-11389680 -Ref: Derived Files-Footnote-21389715 -Ref: Derived Files-Footnote-31390332 -Node: Future Extensions1390446 -Node: Implementation Limitations1391118 -Node: Extension Design1392360 -Node: Old Extension Problems1393524 -Ref: Old Extension Problems-Footnote-11395100 -Node: Extension New Mechanism Goals1395161 -Ref: Extension New Mechanism Goals-Footnote-11398657 -Node: Extension Other Design Decisions1398858 -Node: Extension Future Growth1401057 -Node: Notes summary1401681 -Node: Basic Concepts1402894 -Node: Basic High Level1403579 -Ref: figure-general-flow1403861 -Ref: figure-process-flow1404563 -Ref: Basic High Level-Footnote-11407959 -Node: Basic Data Typing1408148 -Node: Glossary1411566 -Node: Copying1444688 -Node: GNU Free Documentation License1482449 -Node: Index1507772 +Node: Loading Shared Libraries166178 +Node: Obsolete167670 +Node: Undocumented168306 +Node: Invoking Summary168605 +Node: Regexp171632 +Node: Regexp Usage173126 +Node: Escape Sequences175227 +Node: Regexp Operators181758 +Node: Regexp Operator Details182251 +Ref: Regexp Operator Details-Footnote-1190117 +Node: Interval Expressions190276 +Ref: Interval Expressions-Footnote-1192545 +Node: Bracket Expressions192645 +Ref: table-char-classes195205 +Node: Leftmost Longest198727 +Node: Computed Regexps200087 +Node: GNU Regexp Operators203610 +Node: Case-sensitivity207633 +Ref: Case-sensitivity-Footnote-1210590 +Ref: Case-sensitivity-Footnote-2210835 +Node: Regexp Summary210951 +Node: Reading Files212475 +Node: Records214792 +Node: awk split records215903 +Node: gawk split records220793 +Ref: gawk split records-Footnote-1226087 +Node: Fields226124 +Node: Nonconstant Fields229011 +Ref: Nonconstant Fields-Footnote-1231322 +Node: Changing Fields231538 +Node: Field Separators237846 +Node: Default Field Splitting240662 +Node: Regexp Field Splitting241805 +Node: Single Character Fields245634 +Node: Command Line Field Separator246729 +Node: Full Line Fields250116 +Ref: Full Line Fields-Footnote-1251696 +Ref: Full Line Fields-Footnote-2251742 +Node: Field Splitting Summary251850 +Node: Constant Size254019 +Node: Fixed width data254763 +Node: Skipping intervening258282 +Node: Allowing trailing data259084 +Node: Fields with fixed data260149 +Node: Splitting By Content261775 +Ref: Splitting By Content-Footnote-1265714 +Node: More CSV265877 +Node: FS versus FPAT267530 +Node: Testing field creation268739 +Node: Multiple Line270432 +Node: Getline276914 +Node: Plain Getline279500 +Node: Getline/Variable282150 +Node: Getline/File283347 +Node: Getline/Variable/File284795 +Ref: Getline/Variable/File-Footnote-1286440 +Node: Getline/Pipe286536 +Node: Getline/Variable/Pipe289349 +Node: Getline/Coprocess290532 +Node: Getline/Variable/Coprocess291855 +Node: Getline Notes292621 +Node: Getline Summary295582 +Ref: table-getline-variants296026 +Node: Read Timeout296931 +Ref: Read Timeout-Footnote-1300895 +Node: Retrying Input300953 +Node: Command-line directories302220 +Node: Input Summary303158 +Node: Input Exercises306538 +Node: Printing306978 +Node: Print308864 +Node: Print Examples310370 +Node: Output Separators313223 +Node: OFMT315334 +Node: Printf316757 +Node: Basic Printf317562 +Node: Control Letters319198 +Node: Format Modifiers324667 +Node: Printf Examples330953 +Node: Redirection333498 +Node: Special FD340572 +Ref: Special FD-Footnote-1343862 +Node: Special Files343948 +Node: Other Inherited Files344577 +Node: Special Network345642 +Node: Special Caveats346530 +Node: Close Files And Pipes347513 +Ref: Close Files And Pipes-Footnote-1353650 +Node: Close Return Value353806 +Ref: table-close-pipe-return-values355081 +Ref: Close Return Value-Footnote-1355915 +Node: Nonfatal356071 +Node: Output Summary358502 +Node: Output Exercises359788 +Node: Expressions360479 +Node: Values361681 +Node: Constants362359 +Node: Scalar Constants363056 +Ref: Scalar Constants-Footnote-1365631 +Node: Nondecimal-numbers365881 +Node: Regexp Constants369002 +Node: Using Constant Regexps369548 +Node: Standard Regexp Constants370194 +Node: Strong Regexp Constants373494 +Node: Variables377345 +Node: Using Variables378010 +Node: Assignment Options379990 +Node: Conversion382552 +Node: Strings And Numbers383084 +Ref: Strings And Numbers-Footnote-1386303 +Node: Locale influences conversions386412 +Ref: table-locale-affects389262 +Node: All Operators389905 +Node: Arithmetic Ops390546 +Node: Concatenation393376 +Ref: Concatenation-Footnote-1396326 +Node: Assignment Ops396449 +Ref: table-assign-ops401588 +Node: Increment Ops402970 +Node: Truth Values and Conditions406569 +Node: Truth Values407695 +Node: Typing and Comparison408786 +Node: Variable Typing409622 +Ref: Variable Typing-Footnote-1416284 +Ref: Variable Typing-Footnote-2416364 +Node: Comparison Operators416447 +Ref: table-relational-ops416874 +Node: POSIX String Comparison420560 +Ref: POSIX String Comparison-Footnote-1422319 +Ref: POSIX String Comparison-Footnote-2422462 +Node: Boolean Ops422546 +Ref: Boolean Ops-Footnote-1427239 +Node: Conditional Exp427335 +Node: Function Calls429121 +Node: Precedence433071 +Node: Locales436948 +Node: Expressions Summary438630 +Node: Patterns and Actions441293 +Node: Pattern Overview442435 +Node: Regexp Patterns444161 +Node: Expression Patterns444707 +Node: Ranges448616 +Node: BEGIN/END451794 +Node: Using BEGIN/END452607 +Ref: Using BEGIN/END-Footnote-1455517 +Node: I/O And BEGIN/END455627 +Node: BEGINFILE/ENDFILE458108 +Node: Empty461549 +Node: Using Shell Variables461866 +Node: Action Overview464204 +Node: Statements466639 +Node: If Statement468537 +Node: While Statement470106 +Node: Do Statement472194 +Node: For Statement473380 +Node: Switch Statement476737 +Node: Break Statement479288 +Node: Continue Statement481480 +Node: Next Statement483412 +Node: Nextfile Statement485909 +Node: Exit Statement488770 +Node: Built-in Variables491303 +Node: User-modified492482 +Node: Auto-set500693 +Ref: Auto-set-Footnote-1518546 +Ref: Auto-set-Footnote-2518764 +Node: ARGC and ARGV518820 +Node: Pattern Action Summary523259 +Node: Arrays525875 +Node: Array Basics527252 +Node: Array Intro528102 +Ref: figure-array-elements530118 +Ref: Array Intro-Footnote-1532982 +Node: Reference to Elements533114 +Node: Assigning Elements535636 +Node: Array Example536131 +Node: Scanning an Array538100 +Node: Controlling Scanning541197 +Ref: Controlling Scanning-Footnote-1547860 +Node: Numeric Array Subscripts548184 +Node: Uninitialized Subscripts550458 +Node: Delete552137 +Ref: Delete-Footnote-1554951 +Node: Multidimensional555008 +Node: Multiscanning558213 +Node: Arrays of Arrays559885 +Node: Arrays Summary564785 +Node: Functions566974 +Node: Built-in568034 +Node: Calling Built-in569223 +Node: Boolean Functions571270 +Node: Numeric Functions571840 +Ref: Numeric Functions-Footnote-1576033 +Ref: Numeric Functions-Footnote-2576717 +Ref: Numeric Functions-Footnote-3576769 +Node: String Functions577045 +Ref: String Functions-Footnote-1602875 +Ref: String Functions-Footnote-2603009 +Ref: String Functions-Footnote-3603269 +Node: Gory Details603356 +Ref: table-sub-escapes605263 +Ref: table-sub-proposed606909 +Ref: table-posix-sub608419 +Ref: table-gensub-escapes610107 +Ref: Gory Details-Footnote-1611041 +Node: I/O Functions611195 +Ref: table-system-return-values617882 +Ref: I/O Functions-Footnote-1620053 +Ref: I/O Functions-Footnote-2620201 +Node: Time Functions620321 +Ref: Time Functions-Footnote-1631477 +Ref: Time Functions-Footnote-2631553 +Ref: Time Functions-Footnote-3631715 +Ref: Time Functions-Footnote-4631826 +Ref: Time Functions-Footnote-5631944 +Ref: Time Functions-Footnote-6632179 +Node: Bitwise Functions632461 +Ref: table-bitwise-ops633063 +Ref: Bitwise Functions-Footnote-1639317 +Ref: Bitwise Functions-Footnote-2639496 +Node: Type Functions639693 +Node: I18N Functions643286 +Node: User-defined645029 +Node: Definition Syntax645849 +Ref: Definition Syntax-Footnote-1651677 +Node: Function Example651754 +Ref: Function Example-Footnote-1654733 +Node: Function Calling654755 +Node: Calling A Function655349 +Node: Variable Scope656319 +Node: Pass By Value/Reference659373 +Node: Function Caveats662105 +Ref: Function Caveats-Footnote-1664200 +Node: Return Statement664324 +Node: Dynamic Typing667379 +Node: Indirect Calls668335 +Node: Functions Summary679494 +Node: Library Functions682271 +Ref: Library Functions-Footnote-1685819 +Ref: Library Functions-Footnote-2685962 +Node: Library Names686137 +Ref: Library Names-Footnote-1689931 +Ref: Library Names-Footnote-2690158 +Node: General Functions690254 +Node: Strtonum Function691448 +Node: Assert Function694530 +Node: Round Function697982 +Node: Cliff Random Function699560 +Node: Ordinal Functions700593 +Ref: Ordinal Functions-Footnote-1703702 +Ref: Ordinal Functions-Footnote-2703954 +Node: Join Function704168 +Ref: Join Function-Footnote-1705971 +Node: Getlocaltime Function706175 +Node: Readfile Function709949 +Node: Shell Quoting711978 +Node: Isnumeric Function713434 +Node: Data File Management714846 +Node: Filetrans Function715478 +Node: Rewind Function719772 +Node: File Checking721751 +Ref: File Checking-Footnote-1723123 +Node: Empty Files723330 +Node: Ignoring Assigns725397 +Node: Getopt Function726971 +Ref: Getopt Function-Footnote-1742805 +Node: Passwd Functions743017 +Ref: Passwd Functions-Footnote-1752199 +Node: Group Functions752287 +Ref: Group Functions-Footnote-1760425 +Node: Walking Arrays760638 +Node: Library Functions Summary763686 +Node: Library Exercises765110 +Node: Sample Programs765597 +Node: Running Examples766379 +Node: Clones767131 +Node: Cut Program768403 +Node: Egrep Program778844 +Node: Id Program788161 +Node: Split Program798275 +Ref: Split Program-Footnote-1808510 +Node: Tee Program808697 +Node: Uniq Program811606 +Node: Wc Program819471 +Node: Bytes vs. Characters819866 +Node: Using extensions821468 +Node: wc program822248 +Node: Miscellaneous Programs827254 +Node: Dupword Program828483 +Node: Alarm Program830546 +Node: Translate Program835459 +Ref: Translate Program-Footnote-1840200 +Node: Labels Program840478 +Ref: Labels Program-Footnote-1843919 +Node: Word Sorting844011 +Node: History Sorting848205 +Node: Extract Program850480 +Node: Simple Sed858749 +Node: Igawk Program861965 +Ref: Igawk Program-Footnote-1877212 +Ref: Igawk Program-Footnote-2877418 +Ref: Igawk Program-Footnote-3877548 +Node: Anagram Program877675 +Node: Signature Program880771 +Node: Programs Summary882023 +Node: Programs Exercises883281 +Ref: Programs Exercises-Footnote-1887597 +Node: Advanced Features887683 +Node: Nondecimal Data890177 +Node: Boolean Typed Values891807 +Node: Array Sorting893782 +Node: Controlling Array Traversal894511 +Ref: Controlling Array Traversal-Footnote-1903018 +Node: Array Sorting Functions903140 +Ref: Array Sorting Functions-Footnote-1909259 +Node: Two-way I/O909467 +Ref: Two-way I/O-Footnote-1917462 +Ref: Two-way I/O-Footnote-2917653 +Node: TCP/IP Networking917735 +Node: Profiling920915 +Node: Persistent Memory930625 +Ref: Persistent Memory-Footnote-1939583 +Node: Extension Philosophy939714 +Node: Advanced Features Summary941249 +Node: Internationalization943519 +Node: I18N and L10N945225 +Node: Explaining gettext945920 +Ref: Explaining gettext-Footnote-1952073 +Ref: Explaining gettext-Footnote-2952268 +Node: Programmer i18n952433 +Ref: Programmer i18n-Footnote-1957546 +Node: Translator i18n957595 +Node: String Extraction958431 +Ref: String Extraction-Footnote-1959609 +Node: Printf Ordering959707 +Ref: Printf Ordering-Footnote-1962569 +Node: I18N Portability962637 +Ref: I18N Portability-Footnote-1965211 +Node: I18N Example965282 +Ref: I18N Example-Footnote-1968682 +Ref: I18N Example-Footnote-2968758 +Node: Gawk I18N968875 +Node: I18N Summary969531 +Node: Debugger970932 +Node: Debugging971956 +Node: Debugging Concepts972405 +Node: Debugging Terms974231 +Node: Awk Debugging976844 +Ref: Awk Debugging-Footnote-1977821 +Node: Sample Debugging Session977961 +Node: Debugger Invocation978513 +Node: Finding The Bug980142 +Node: List of Debugger Commands986828 +Node: Breakpoint Control988205 +Node: Debugger Execution Control992037 +Node: Viewing And Changing Data995517 +Node: Execution Stack999255 +Node: Debugger Info1000936 +Node: Miscellaneous Debugger Commands1005235 +Node: Readline Support1010488 +Node: Limitations1011434 +Node: Debugging Summary1014078 +Node: Namespaces1015381 +Node: Global Namespace1016508 +Node: Qualified Names1017953 +Node: Default Namespace1018988 +Node: Changing The Namespace1019763 +Node: Naming Rules1021457 +Node: Internal Name Management1023372 +Node: Namespace Example1024442 +Node: Namespace And Features1027025 +Node: Namespace Summary1028482 +Node: Arbitrary Precision Arithmetic1029995 +Node: Computer Arithmetic1031514 +Ref: table-numeric-ranges1035331 +Ref: table-floating-point-ranges1035829 +Ref: Computer Arithmetic-Footnote-11036488 +Node: Math Definitions1036547 +Ref: table-ieee-formats1039592 +Node: MPFR features1040166 +Node: MPFR On Parole1040619 +Ref: MPFR On Parole-Footnote-11041463 +Node: MPFR Intro1041622 +Node: FP Math Caution1043312 +Ref: FP Math Caution-Footnote-11044386 +Node: Inexactness of computations1044763 +Node: Inexact representation1045794 +Node: Comparing FP Values1047177 +Node: Errors accumulate1048435 +Node: Strange values1049902 +Ref: Strange values-Footnote-11052568 +Node: Getting Accuracy1052673 +Node: Try To Round1055410 +Node: Setting precision1056317 +Ref: table-predefined-precision-strings1057022 +Node: Setting the rounding mode1058907 +Ref: table-gawk-rounding-modes1059289 +Ref: Setting the rounding mode-Footnote-11063347 +Node: Arbitrary Precision Integers1063530 +Ref: Arbitrary Precision Integers-Footnote-11066742 +Node: Checking for MPFR1066898 +Node: POSIX Floating Point Problems1068388 +Ref: POSIX Floating Point Problems-Footnote-11073252 +Node: Floating point summary1073290 +Node: Dynamic Extensions1075554 +Node: Extension Intro1077153 +Node: Plugin License1078461 +Node: Extension Mechanism Outline1079274 +Ref: figure-load-extension1079725 +Ref: figure-register-new-function1081305 +Ref: figure-call-new-function1082410 +Node: Extension API Description1084529 +Node: Extension API Functions Introduction1086258 +Ref: table-api-std-headers1088156 +Node: General Data Types1092620 +Ref: General Data Types-Footnote-11101788 +Node: Memory Allocation Functions1102103 +Ref: Memory Allocation Functions-Footnote-11106828 +Node: Constructor Functions1106927 +Node: API Ownership of MPFR and GMP Values1110832 +Node: Registration Functions1112393 +Node: Extension Functions1113097 +Node: Exit Callback Functions1118673 +Node: Extension Version String1119992 +Node: Input Parsers1120687 +Node: Output Wrappers1134179 +Node: Two-way processors1138887 +Node: Printing Messages1141248 +Ref: Printing Messages-Footnote-11142462 +Node: Updating ERRNO1142617 +Node: Requesting Values1143416 +Ref: table-value-types-returned1144169 +Node: Accessing Parameters1145278 +Node: Symbol Table Access1146562 +Node: Symbol table by name1147078 +Ref: Symbol table by name-Footnote-11150289 +Node: Symbol table by cookie1150421 +Ref: Symbol table by cookie-Footnote-11154702 +Node: Cached values1154766 +Ref: Cached values-Footnote-11158410 +Node: Array Manipulation1158567 +Ref: Array Manipulation-Footnote-11159670 +Node: Array Data Types1159707 +Ref: Array Data Types-Footnote-11162529 +Node: Array Functions1162629 +Node: Flattening Arrays1167658 +Node: Creating Arrays1174710 +Node: Redirection API1179560 +Node: Extension API Variables1182581 +Node: Extension Versioning1183306 +Ref: gawk-api-version1183743 +Node: Extension GMP/MPFR Versioning1185531 +Node: Extension API Informational Variables1187237 +Node: Extension API Boilerplate1188398 +Node: Changes from API V11192534 +Node: Finding Extensions1194168 +Node: Extension Example1194743 +Node: Internal File Description1195567 +Node: Internal File Ops1199891 +Ref: Internal File Ops-Footnote-11211449 +Node: Using Internal File Ops1211597 +Ref: Using Internal File Ops-Footnote-11214028 +Node: Extension Samples1214306 +Node: Extension Sample File Functions1215875 +Node: Extension Sample Fnmatch1224013 +Node: Extension Sample Fork1225608 +Node: Extension Sample Inplace1226884 +Node: Extension Sample Ord1230556 +Node: Extension Sample Readdir1231432 +Ref: table-readdir-file-types1232329 +Node: Extension Sample Revout1233467 +Node: Extension Sample Rev2way1234064 +Node: Extension Sample Read write array1234816 +Node: Extension Sample Readfile1238090 +Node: Extension Sample Time1239221 +Node: Extension Sample API Tests1241511 +Node: gawkextlib1242019 +Node: Extension summary1245055 +Node: Extension Exercises1248913 +Node: Language History1250191 +Node: V7/SVR3.11251905 +Node: SVR41254255 +Node: POSIX1255787 +Node: BTL1257212 +Node: POSIX/GNU1257981 +Node: Feature History1264512 +Node: Common Extensions1283630 +Node: Ranges and Locales1284999 +Ref: Ranges and Locales-Footnote-11289800 +Ref: Ranges and Locales-Footnote-21289827 +Ref: Ranges and Locales-Footnote-31290066 +Node: Contributors1290289 +Node: History summary1296494 +Node: Installation1297940 +Node: Gawk Distribution1298904 +Node: Getting1299396 +Node: Extracting1300395 +Node: Distribution contents1302107 +Node: Unix Installation1310187 +Node: Quick Installation1311009 +Node: Compiling with MPFR1313555 +Node: Shell Startup Files1314261 +Node: Additional Configuration Options1315418 +Node: Configuration Philosophy1317805 +Node: Compiling from Git1320307 +Node: Building the Documentation1320866 +Node: Non-Unix Installation1322278 +Node: PC Installation1322754 +Node: PC Binary Installation1323627 +Node: PC Compiling1324532 +Node: PC Using1325710 +Node: Cygwin1329438 +Node: MSYS1330694 +Node: OpenVMS Installation1331326 +Node: OpenVMS Compilation1332007 +Ref: OpenVMS Compilation-Footnote-11333490 +Node: OpenVMS Dynamic Extensions1333552 +Node: OpenVMS Installation Details1335188 +Node: OpenVMS Running1337623 +Node: OpenVMS GNV1341760 +Node: Bugs1342515 +Node: Bug definition1343439 +Node: Bug address1347090 +Node: Usenet1350681 +Node: Performance bugs1351912 +Node: Asking for help1354930 +Node: Maintainers1356921 +Node: Other Versions1357948 +Node: Installation summary1366880 +Node: Notes1368264 +Node: Compatibility Mode1369074 +Node: Additions1369896 +Node: Accessing The Source1370841 +Node: Adding Code1372376 +Node: New Ports1379512 +Node: Derived Files1384022 +Ref: Derived Files-Footnote-11389869 +Ref: Derived Files-Footnote-21389904 +Ref: Derived Files-Footnote-31390521 +Node: Future Extensions1390635 +Node: Implementation Limitations1391307 +Node: Extension Design1392549 +Node: Old Extension Problems1393713 +Ref: Old Extension Problems-Footnote-11395289 +Node: Extension New Mechanism Goals1395350 +Ref: Extension New Mechanism Goals-Footnote-11398846 +Node: Extension Other Design Decisions1399047 +Node: Extension Future Growth1401246 +Node: Notes summary1401870 +Node: Basic Concepts1403083 +Node: Basic High Level1403768 +Ref: figure-general-flow1404050 +Ref: figure-process-flow1404752 +Ref: Basic High Level-Footnote-11408148 +Node: Basic Data Typing1408337 +Node: Glossary1411755 +Node: Copying1444877 +Node: GNU Free Documentation License1482638 +Node: Index1507961  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 98afef70..b49670a6 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -5156,6 +5156,10 @@ thus reducing the need for writing complex and tedious command lines. In particular, @code{@@include} is very useful for writing CGI scripts to be run from web pages. +The @code{@@include} directive and the @option{-i}/@option{--include} +command line option are completely equivalent. An included program +source is not loaded if it has been previously loaded. + The rules for finding a source file described in @ref{AWKPATH Variable} also apply to files loaded with @code{@@include}. diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 54187483..3e448340 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -5022,6 +5022,10 @@ thus reducing the need for writing complex and tedious command lines. In particular, @code{@@include} is very useful for writing CGI scripts to be run from web pages. +The @code{@@include} directive and the @option{-i}/@option{--include} +command line option are completely equivalent. An included program +source is not loaded if it has been previously loaded. + The rules for finding a source file described in @ref{AWKPATH Variable} also apply to files loaded with @code{@@include}. -- cgit v1.2.1 From d5c88fbbbc92b80f424d35e5fd8cf3ede854dd87 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 27 Feb 2023 22:19:19 +0200 Subject: Squashed commit of the following: commit 4a145797803d4e16b3461d844464e753bf2ed5cf Author: Arnold D. Robbins Date: Mon Feb 27 21:58:06 2023 +0200 Update ChangeLogs and doc. commit a0262e53529c2f75dc4930dbeb95f47d526fd5d5 Merge: 6dd3e482 6e98a818 Author: Arnold D. Robbins Date: Mon Feb 27 21:35:08 2023 +0200 Merge branch 'gawk-5.2-stable' into private/fixes-for-readdir commit 6dd3e48226e365f8c2f1398037064c73f4f67ddb Author: Arnold D. Robbins Date: Sun Feb 26 21:45:18 2023 +0200 Improvements for setting up input parser. --- doc/ChangeLog | 1 + doc/gawk.info | 280 +++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 10 ++ doc/gawktexi.in | 10 ++ 4 files changed, 166 insertions(+), 135 deletions(-) (limited to 'doc') diff --git a/doc/ChangeLog b/doc/ChangeLog index 315b1195..c2ffca29 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -3,6 +3,7 @@ * gawktexi.in (Include Files): Mention that -i and @include are the same and that files are only included once, even if nested in multiple include files. + (Input Parsers): Improve discussion of struct stat buf. 2023-02-26 Arnold D. Robbins diff --git a/doc/gawk.info b/doc/gawk.info index 0a55097b..cf15cde5 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -26745,7 +26745,17 @@ as follows: ‘struct stat sbuf;’ If the file descriptor is valid, then ‘gawk’ will have filled in - this structure via a call to the ‘fstat()’ system call. + this structure via a call to the ‘fstat()’ system call. Otherwise, + if the ‘lstat()’ system call is available, it will use that. If + ‘lstat()’ is not available, then it uses ‘stat()’. Getting the + file’s information allows extensions to check the type of the file + even if it could not be opened. This occurs, for example, on + Windows systems when trying to use ‘open()’ on a directory. + + If ‘gawk’ was not able to get the file information, then ‘sbuf’ + will be zeroed out. In particular, extension code can check if + ‘sbuf.st_mode == 0’. If that’s true, then there is no information + in ‘sbuf’. The ‘XXX_can_take_file()’ function should examine these fields and decide if the input parser should be used for the file. The decision @@ -39775,140 +39785,140 @@ Node: Extension Functions1113097 Node: Exit Callback Functions1118673 Node: Extension Version String1119992 Node: Input Parsers1120687 -Node: Output Wrappers1134179 -Node: Two-way processors1138887 -Node: Printing Messages1141248 -Ref: Printing Messages-Footnote-11142462 -Node: Updating ERRNO1142617 -Node: Requesting Values1143416 -Ref: table-value-types-returned1144169 -Node: Accessing Parameters1145278 -Node: Symbol Table Access1146562 -Node: Symbol table by name1147078 -Ref: Symbol table by name-Footnote-11150289 -Node: Symbol table by cookie1150421 -Ref: Symbol table by cookie-Footnote-11154702 -Node: Cached values1154766 -Ref: Cached values-Footnote-11158410 -Node: Array Manipulation1158567 -Ref: Array Manipulation-Footnote-11159670 -Node: Array Data Types1159707 -Ref: Array Data Types-Footnote-11162529 -Node: Array Functions1162629 -Node: Flattening Arrays1167658 -Node: Creating Arrays1174710 -Node: Redirection API1179560 -Node: Extension API Variables1182581 -Node: Extension Versioning1183306 -Ref: gawk-api-version1183743 -Node: Extension GMP/MPFR Versioning1185531 -Node: Extension API Informational Variables1187237 -Node: Extension API Boilerplate1188398 -Node: Changes from API V11192534 -Node: Finding Extensions1194168 -Node: Extension Example1194743 -Node: Internal File Description1195567 -Node: Internal File Ops1199891 -Ref: Internal File Ops-Footnote-11211449 -Node: Using Internal File Ops1211597 -Ref: Using Internal File Ops-Footnote-11214028 -Node: Extension Samples1214306 -Node: Extension Sample File Functions1215875 -Node: Extension Sample Fnmatch1224013 -Node: Extension Sample Fork1225608 -Node: Extension Sample Inplace1226884 -Node: Extension Sample Ord1230556 -Node: Extension Sample Readdir1231432 -Ref: table-readdir-file-types1232329 -Node: Extension Sample Revout1233467 -Node: Extension Sample Rev2way1234064 -Node: Extension Sample Read write array1234816 -Node: Extension Sample Readfile1238090 -Node: Extension Sample Time1239221 -Node: Extension Sample API Tests1241511 -Node: gawkextlib1242019 -Node: Extension summary1245055 -Node: Extension Exercises1248913 -Node: Language History1250191 -Node: V7/SVR3.11251905 -Node: SVR41254255 -Node: POSIX1255787 -Node: BTL1257212 -Node: POSIX/GNU1257981 -Node: Feature History1264512 -Node: Common Extensions1283630 -Node: Ranges and Locales1284999 -Ref: Ranges and Locales-Footnote-11289800 -Ref: Ranges and Locales-Footnote-21289827 -Ref: Ranges and Locales-Footnote-31290066 -Node: Contributors1290289 -Node: History summary1296494 -Node: Installation1297940 -Node: Gawk Distribution1298904 -Node: Getting1299396 -Node: Extracting1300395 -Node: Distribution contents1302107 -Node: Unix Installation1310187 -Node: Quick Installation1311009 -Node: Compiling with MPFR1313555 -Node: Shell Startup Files1314261 -Node: Additional Configuration Options1315418 -Node: Configuration Philosophy1317805 -Node: Compiling from Git1320307 -Node: Building the Documentation1320866 -Node: Non-Unix Installation1322278 -Node: PC Installation1322754 -Node: PC Binary Installation1323627 -Node: PC Compiling1324532 -Node: PC Using1325710 -Node: Cygwin1329438 -Node: MSYS1330694 -Node: OpenVMS Installation1331326 -Node: OpenVMS Compilation1332007 -Ref: OpenVMS Compilation-Footnote-11333490 -Node: OpenVMS Dynamic Extensions1333552 -Node: OpenVMS Installation Details1335188 -Node: OpenVMS Running1337623 -Node: OpenVMS GNV1341760 -Node: Bugs1342515 -Node: Bug definition1343439 -Node: Bug address1347090 -Node: Usenet1350681 -Node: Performance bugs1351912 -Node: Asking for help1354930 -Node: Maintainers1356921 -Node: Other Versions1357948 -Node: Installation summary1366880 -Node: Notes1368264 -Node: Compatibility Mode1369074 -Node: Additions1369896 -Node: Accessing The Source1370841 -Node: Adding Code1372376 -Node: New Ports1379512 -Node: Derived Files1384022 -Ref: Derived Files-Footnote-11389869 -Ref: Derived Files-Footnote-21389904 -Ref: Derived Files-Footnote-31390521 -Node: Future Extensions1390635 -Node: Implementation Limitations1391307 -Node: Extension Design1392549 -Node: Old Extension Problems1393713 -Ref: Old Extension Problems-Footnote-11395289 -Node: Extension New Mechanism Goals1395350 -Ref: Extension New Mechanism Goals-Footnote-11398846 -Node: Extension Other Design Decisions1399047 -Node: Extension Future Growth1401246 -Node: Notes summary1401870 -Node: Basic Concepts1403083 -Node: Basic High Level1403768 -Ref: figure-general-flow1404050 -Ref: figure-process-flow1404752 -Ref: Basic High Level-Footnote-11408148 -Node: Basic Data Typing1408337 -Node: Glossary1411755 -Node: Copying1444877 -Node: GNU Free Documentation License1482638 -Node: Index1507961 +Node: Output Wrappers1134797 +Node: Two-way processors1139505 +Node: Printing Messages1141866 +Ref: Printing Messages-Footnote-11143080 +Node: Updating ERRNO1143235 +Node: Requesting Values1144034 +Ref: table-value-types-returned1144787 +Node: Accessing Parameters1145896 +Node: Symbol Table Access1147180 +Node: Symbol table by name1147696 +Ref: Symbol table by name-Footnote-11150907 +Node: Symbol table by cookie1151039 +Ref: Symbol table by cookie-Footnote-11155320 +Node: Cached values1155384 +Ref: Cached values-Footnote-11159028 +Node: Array Manipulation1159185 +Ref: Array Manipulation-Footnote-11160288 +Node: Array Data Types1160325 +Ref: Array Data Types-Footnote-11163147 +Node: Array Functions1163247 +Node: Flattening Arrays1168276 +Node: Creating Arrays1175328 +Node: Redirection API1180178 +Node: Extension API Variables1183199 +Node: Extension Versioning1183924 +Ref: gawk-api-version1184361 +Node: Extension GMP/MPFR Versioning1186149 +Node: Extension API Informational Variables1187855 +Node: Extension API Boilerplate1189016 +Node: Changes from API V11193152 +Node: Finding Extensions1194786 +Node: Extension Example1195361 +Node: Internal File Description1196185 +Node: Internal File Ops1200509 +Ref: Internal File Ops-Footnote-11212067 +Node: Using Internal File Ops1212215 +Ref: Using Internal File Ops-Footnote-11214646 +Node: Extension Samples1214924 +Node: Extension Sample File Functions1216493 +Node: Extension Sample Fnmatch1224631 +Node: Extension Sample Fork1226226 +Node: Extension Sample Inplace1227502 +Node: Extension Sample Ord1231174 +Node: Extension Sample Readdir1232050 +Ref: table-readdir-file-types1232947 +Node: Extension Sample Revout1234085 +Node: Extension Sample Rev2way1234682 +Node: Extension Sample Read write array1235434 +Node: Extension Sample Readfile1238708 +Node: Extension Sample Time1239839 +Node: Extension Sample API Tests1242129 +Node: gawkextlib1242637 +Node: Extension summary1245673 +Node: Extension Exercises1249531 +Node: Language History1250809 +Node: V7/SVR3.11252523 +Node: SVR41254873 +Node: POSIX1256405 +Node: BTL1257830 +Node: POSIX/GNU1258599 +Node: Feature History1265130 +Node: Common Extensions1284248 +Node: Ranges and Locales1285617 +Ref: Ranges and Locales-Footnote-11290418 +Ref: Ranges and Locales-Footnote-21290445 +Ref: Ranges and Locales-Footnote-31290684 +Node: Contributors1290907 +Node: History summary1297112 +Node: Installation1298558 +Node: Gawk Distribution1299522 +Node: Getting1300014 +Node: Extracting1301013 +Node: Distribution contents1302725 +Node: Unix Installation1310805 +Node: Quick Installation1311627 +Node: Compiling with MPFR1314173 +Node: Shell Startup Files1314879 +Node: Additional Configuration Options1316036 +Node: Configuration Philosophy1318423 +Node: Compiling from Git1320925 +Node: Building the Documentation1321484 +Node: Non-Unix Installation1322896 +Node: PC Installation1323372 +Node: PC Binary Installation1324245 +Node: PC Compiling1325150 +Node: PC Using1326328 +Node: Cygwin1330056 +Node: MSYS1331312 +Node: OpenVMS Installation1331944 +Node: OpenVMS Compilation1332625 +Ref: OpenVMS Compilation-Footnote-11334108 +Node: OpenVMS Dynamic Extensions1334170 +Node: OpenVMS Installation Details1335806 +Node: OpenVMS Running1338241 +Node: OpenVMS GNV1342378 +Node: Bugs1343133 +Node: Bug definition1344057 +Node: Bug address1347708 +Node: Usenet1351299 +Node: Performance bugs1352530 +Node: Asking for help1355548 +Node: Maintainers1357539 +Node: Other Versions1358566 +Node: Installation summary1367498 +Node: Notes1368882 +Node: Compatibility Mode1369692 +Node: Additions1370514 +Node: Accessing The Source1371459 +Node: Adding Code1372994 +Node: New Ports1380130 +Node: Derived Files1384640 +Ref: Derived Files-Footnote-11390487 +Ref: Derived Files-Footnote-21390522 +Ref: Derived Files-Footnote-31391139 +Node: Future Extensions1391253 +Node: Implementation Limitations1391925 +Node: Extension Design1393167 +Node: Old Extension Problems1394331 +Ref: Old Extension Problems-Footnote-11395907 +Node: Extension New Mechanism Goals1395968 +Ref: Extension New Mechanism Goals-Footnote-11399464 +Node: Extension Other Design Decisions1399665 +Node: Extension Future Growth1401864 +Node: Notes summary1402488 +Node: Basic Concepts1403701 +Node: Basic High Level1404386 +Ref: figure-general-flow1404668 +Ref: figure-process-flow1405370 +Ref: Basic High Level-Footnote-11408766 +Node: Basic Data Typing1408955 +Node: Glossary1412373 +Node: Copying1445495 +Node: GNU Free Documentation License1483256 +Node: Index1508579  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index b49670a6..cd75aae0 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -36969,6 +36969,16 @@ able to open the file, then @code{fd} will @emph{not} be equal to @item struct stat sbuf; If the file descriptor is valid, then @command{gawk} will have filled in this structure via a call to the @code{fstat()} system call. +Otherwise, if the @code{lstat()} system call is available, it will +use that. If @code{lstat()} is not available, then it uses @code{stat()}. +Getting the file's information allows extensions to check the type of +the file even if it could not be opened. This occurs, for example, +on Windows systems when trying to use @code{open()} on a directory. + +If @command{gawk} was not able to get the file information, then +@code{sbuf} will be zeroed out. In particular, extension code +can check if @samp{sbuf.st_mode == 0}. If that's true, then there +is no information in @code{sbuf}. @end table The @code{@var{XXX}_can_take_file()} function should examine these diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 3e448340..219a8929 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -35885,6 +35885,16 @@ able to open the file, then @code{fd} will @emph{not} be equal to @item struct stat sbuf; If the file descriptor is valid, then @command{gawk} will have filled in this structure via a call to the @code{fstat()} system call. +Otherwise, if the @code{lstat()} system call is available, it will +use that. If @code{lstat()} is not available, then it uses @code{stat()}. +Getting the file's information allows extensions to check the type of +the file even if it could not be opened. This occurs, for example, +on Windows systems when trying to use @code{open()} on a directory. + +If @command{gawk} was not able to get the file information, then +@code{sbuf} will be zeroed out. In particular, extension code +can check if @samp{sbuf.st_mode == 0}. If that's true, then there +is no information in @code{sbuf}. @end table The @code{@var{XXX}_can_take_file()} function should examine these -- cgit v1.2.1 From 4d58c1551c6fae952142de6427dbbbe94c1df7e2 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 2 Mar 2023 21:37:06 +0200 Subject: Improve doc on input parsers and output wrappers. --- doc/ChangeLog | 6 ++ doc/gawk.info | 303 +++++++++++++++++++++++++++++--------------------------- doc/gawk.texi | 31 ++++-- doc/gawktexi.in | 31 ++++-- doc/wordlist | 4 + 5 files changed, 209 insertions(+), 166 deletions(-) (limited to 'doc') diff --git a/doc/ChangeLog b/doc/ChangeLog index c2ffca29..699d1f37 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,9 @@ +2023-03-02 Arnold D. Robbins + + * gawktexi.in (Input Parsers): Clarify and improve some of the + prose, some more. + (Output Wrappers): Ditto. + 2023-02-27 Arnold D. Robbins * gawktexi.in (Include Files): Mention that -i and @include are diff --git a/doc/gawk.info b/doc/gawk.info index cf15cde5..c7e72bb8 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -26743,14 +26743,24 @@ as follows: the file, then ‘fd’ will _not_ be equal to ‘INVALID_HANDLE’. Otherwise, it will. + An extension can decide that it doesn’t want to use the open file + descriptor provided by ‘gawk’. In such a case it can close the + file and set ‘fd’ to ‘INVALID_HANDLE’, or it can leave it alone and + keep it’s own file descriptor in private data pointed to by the + ‘opaque’ pointer (see further in this list). In any case, if the + file descriptor is valid, it should _not_ just overwrite the value + with something else; doing so would cause a resource leak. + ‘struct stat sbuf;’ If the file descriptor is valid, then ‘gawk’ will have filled in this structure via a call to the ‘fstat()’ system call. Otherwise, if the ‘lstat()’ system call is available, it will use that. If - ‘lstat()’ is not available, then it uses ‘stat()’. Getting the - file’s information allows extensions to check the type of the file - even if it could not be opened. This occurs, for example, on - Windows systems when trying to use ‘open()’ on a directory. + ‘lstat()’ is not available, then it uses ‘stat()’. + + Getting the file’s information allows extensions to check the type + of the file even if it could not be opened. This occurs, for + example, on Windows systems when trying to use ‘open()’ on a + directory. If ‘gawk’ was not able to get the file information, then ‘sbuf’ will be zeroed out. In particular, extension code can check if @@ -26786,7 +26796,7 @@ may be filled by ‘XXX_take_control_of()’: input records. Said function is the core of the input parser. Its behavior is described in the text following this list. -‘ssize_t (*read_func)();’ +‘ssize_t (*read_func)(int, void *, size_t);’ This function pointer should point to a function that has the same behavior as the standard POSIX ‘read()’ system call. It is an alternative to the ‘get_record’ pointer. Its behavior is also @@ -26890,11 +26900,6 @@ does (*note gawkextlib::). In the latter case, code in a ‘BEGINFILE’ rule can look at ‘FILENAME’ and ‘ERRNO’ to decide whether or not to activate your input parser (*note BEGINFILE/ENDFILE::). - You register your input parser with the following function: - -‘void register_input_parser(awk_input_parser_t *input_parser);’ - Register the input parser pointed to by ‘input_parser’ with ‘gawk’. - If you would like to override the default field parsing mechanism for a given record, then you must populate an ‘awk_fieldwidth_info_t’ structure, which looks like this: @@ -26935,6 +26940,11 @@ can be used as an argument to ‘malloc()’ or in a union to allocate space statically. Please refer to the ‘readdir_test’ sample extension for an example. + You register your input parser with the following function: + +‘void register_input_parser(awk_input_parser_t *input_parser);’ + Register the input parser pointed to by ‘input_parser’ with ‘gawk’. +  File: gawk.info, Node: Output Wrappers, Next: Two-way processors, Prev: Input Parsers, Up: Registration Functions @@ -27029,11 +27039,12 @@ in the ‘awk_output_buf_t’. The data members are as follows: The ‘XXX_can_take_file()’ function should make a decision based upon the ‘name’ and ‘mode’ fields, and any additional state (such as ‘awk’ -variable values) that is appropriate. +variable values) that is appropriate. ‘gawk’ attempts to open the named +file for writing. The ‘fp’ member will be ‘NULL’ only if it fails. When ‘gawk’ calls ‘XXX_take_control_of()’, that function should fill in the other fields as appropriate, except for ‘fp’, which it should -just use normally. +just use normally if it’s not ‘NULL’. You register your output wrapper with the following function: @@ -39785,140 +39796,140 @@ Node: Extension Functions1113097 Node: Exit Callback Functions1118673 Node: Extension Version String1119992 Node: Input Parsers1120687 -Node: Output Wrappers1134797 -Node: Two-way processors1139505 -Node: Printing Messages1141866 -Ref: Printing Messages-Footnote-11143080 -Node: Updating ERRNO1143235 -Node: Requesting Values1144034 -Ref: table-value-types-returned1144787 -Node: Accessing Parameters1145896 -Node: Symbol Table Access1147180 -Node: Symbol table by name1147696 -Ref: Symbol table by name-Footnote-11150907 -Node: Symbol table by cookie1151039 -Ref: Symbol table by cookie-Footnote-11155320 -Node: Cached values1155384 -Ref: Cached values-Footnote-11159028 -Node: Array Manipulation1159185 -Ref: Array Manipulation-Footnote-11160288 -Node: Array Data Types1160325 -Ref: Array Data Types-Footnote-11163147 -Node: Array Functions1163247 -Node: Flattening Arrays1168276 -Node: Creating Arrays1175328 -Node: Redirection API1180178 -Node: Extension API Variables1183199 -Node: Extension Versioning1183924 -Ref: gawk-api-version1184361 -Node: Extension GMP/MPFR Versioning1186149 -Node: Extension API Informational Variables1187855 -Node: Extension API Boilerplate1189016 -Node: Changes from API V11193152 -Node: Finding Extensions1194786 -Node: Extension Example1195361 -Node: Internal File Description1196185 -Node: Internal File Ops1200509 -Ref: Internal File Ops-Footnote-11212067 -Node: Using Internal File Ops1212215 -Ref: Using Internal File Ops-Footnote-11214646 -Node: Extension Samples1214924 -Node: Extension Sample File Functions1216493 -Node: Extension Sample Fnmatch1224631 -Node: Extension Sample Fork1226226 -Node: Extension Sample Inplace1227502 -Node: Extension Sample Ord1231174 -Node: Extension Sample Readdir1232050 -Ref: table-readdir-file-types1232947 -Node: Extension Sample Revout1234085 -Node: Extension Sample Rev2way1234682 -Node: Extension Sample Read write array1235434 -Node: Extension Sample Readfile1238708 -Node: Extension Sample Time1239839 -Node: Extension Sample API Tests1242129 -Node: gawkextlib1242637 -Node: Extension summary1245673 -Node: Extension Exercises1249531 -Node: Language History1250809 -Node: V7/SVR3.11252523 -Node: SVR41254873 -Node: POSIX1256405 -Node: BTL1257830 -Node: POSIX/GNU1258599 -Node: Feature History1265130 -Node: Common Extensions1284248 -Node: Ranges and Locales1285617 -Ref: Ranges and Locales-Footnote-11290418 -Ref: Ranges and Locales-Footnote-21290445 -Ref: Ranges and Locales-Footnote-31290684 -Node: Contributors1290907 -Node: History summary1297112 -Node: Installation1298558 -Node: Gawk Distribution1299522 -Node: Getting1300014 -Node: Extracting1301013 -Node: Distribution contents1302725 -Node: Unix Installation1310805 -Node: Quick Installation1311627 -Node: Compiling with MPFR1314173 -Node: Shell Startup Files1314879 -Node: Additional Configuration Options1316036 -Node: Configuration Philosophy1318423 -Node: Compiling from Git1320925 -Node: Building the Documentation1321484 -Node: Non-Unix Installation1322896 -Node: PC Installation1323372 -Node: PC Binary Installation1324245 -Node: PC Compiling1325150 -Node: PC Using1326328 -Node: Cygwin1330056 -Node: MSYS1331312 -Node: OpenVMS Installation1331944 -Node: OpenVMS Compilation1332625 -Ref: OpenVMS Compilation-Footnote-11334108 -Node: OpenVMS Dynamic Extensions1334170 -Node: OpenVMS Installation Details1335806 -Node: OpenVMS Running1338241 -Node: OpenVMS GNV1342378 -Node: Bugs1343133 -Node: Bug definition1344057 -Node: Bug address1347708 -Node: Usenet1351299 -Node: Performance bugs1352530 -Node: Asking for help1355548 -Node: Maintainers1357539 -Node: Other Versions1358566 -Node: Installation summary1367498 -Node: Notes1368882 -Node: Compatibility Mode1369692 -Node: Additions1370514 -Node: Accessing The Source1371459 -Node: Adding Code1372994 -Node: New Ports1380130 -Node: Derived Files1384640 -Ref: Derived Files-Footnote-11390487 -Ref: Derived Files-Footnote-21390522 -Ref: Derived Files-Footnote-31391139 -Node: Future Extensions1391253 -Node: Implementation Limitations1391925 -Node: Extension Design1393167 -Node: Old Extension Problems1394331 -Ref: Old Extension Problems-Footnote-11395907 -Node: Extension New Mechanism Goals1395968 -Ref: Extension New Mechanism Goals-Footnote-11399464 -Node: Extension Other Design Decisions1399665 -Node: Extension Future Growth1401864 -Node: Notes summary1402488 -Node: Basic Concepts1403701 -Node: Basic High Level1404386 -Ref: figure-general-flow1404668 -Ref: figure-process-flow1405370 -Ref: Basic High Level-Footnote-11408766 -Node: Basic Data Typing1408955 -Node: Glossary1412373 -Node: Copying1445495 -Node: GNU Free Documentation License1483256 -Node: Index1508579 +Node: Output Wrappers1135331 +Node: Two-way processors1140179 +Node: Printing Messages1142540 +Ref: Printing Messages-Footnote-11143754 +Node: Updating ERRNO1143909 +Node: Requesting Values1144708 +Ref: table-value-types-returned1145461 +Node: Accessing Parameters1146570 +Node: Symbol Table Access1147854 +Node: Symbol table by name1148370 +Ref: Symbol table by name-Footnote-11151581 +Node: Symbol table by cookie1151713 +Ref: Symbol table by cookie-Footnote-11155994 +Node: Cached values1156058 +Ref: Cached values-Footnote-11159702 +Node: Array Manipulation1159859 +Ref: Array Manipulation-Footnote-11160962 +Node: Array Data Types1160999 +Ref: Array Data Types-Footnote-11163821 +Node: Array Functions1163921 +Node: Flattening Arrays1168950 +Node: Creating Arrays1176002 +Node: Redirection API1180852 +Node: Extension API Variables1183873 +Node: Extension Versioning1184598 +Ref: gawk-api-version1185035 +Node: Extension GMP/MPFR Versioning1186823 +Node: Extension API Informational Variables1188529 +Node: Extension API Boilerplate1189690 +Node: Changes from API V11193826 +Node: Finding Extensions1195460 +Node: Extension Example1196035 +Node: Internal File Description1196859 +Node: Internal File Ops1201183 +Ref: Internal File Ops-Footnote-11212741 +Node: Using Internal File Ops1212889 +Ref: Using Internal File Ops-Footnote-11215320 +Node: Extension Samples1215598 +Node: Extension Sample File Functions1217167 +Node: Extension Sample Fnmatch1225305 +Node: Extension Sample Fork1226900 +Node: Extension Sample Inplace1228176 +Node: Extension Sample Ord1231848 +Node: Extension Sample Readdir1232724 +Ref: table-readdir-file-types1233621 +Node: Extension Sample Revout1234759 +Node: Extension Sample Rev2way1235356 +Node: Extension Sample Read write array1236108 +Node: Extension Sample Readfile1239382 +Node: Extension Sample Time1240513 +Node: Extension Sample API Tests1242803 +Node: gawkextlib1243311 +Node: Extension summary1246347 +Node: Extension Exercises1250205 +Node: Language History1251483 +Node: V7/SVR3.11253197 +Node: SVR41255547 +Node: POSIX1257079 +Node: BTL1258504 +Node: POSIX/GNU1259273 +Node: Feature History1265804 +Node: Common Extensions1284922 +Node: Ranges and Locales1286291 +Ref: Ranges and Locales-Footnote-11291092 +Ref: Ranges and Locales-Footnote-21291119 +Ref: Ranges and Locales-Footnote-31291358 +Node: Contributors1291581 +Node: History summary1297786 +Node: Installation1299232 +Node: Gawk Distribution1300196 +Node: Getting1300688 +Node: Extracting1301687 +Node: Distribution contents1303399 +Node: Unix Installation1311479 +Node: Quick Installation1312301 +Node: Compiling with MPFR1314847 +Node: Shell Startup Files1315553 +Node: Additional Configuration Options1316710 +Node: Configuration Philosophy1319097 +Node: Compiling from Git1321599 +Node: Building the Documentation1322158 +Node: Non-Unix Installation1323570 +Node: PC Installation1324046 +Node: PC Binary Installation1324919 +Node: PC Compiling1325824 +Node: PC Using1327002 +Node: Cygwin1330730 +Node: MSYS1331986 +Node: OpenVMS Installation1332618 +Node: OpenVMS Compilation1333299 +Ref: OpenVMS Compilation-Footnote-11334782 +Node: OpenVMS Dynamic Extensions1334844 +Node: OpenVMS Installation Details1336480 +Node: OpenVMS Running1338915 +Node: OpenVMS GNV1343052 +Node: Bugs1343807 +Node: Bug definition1344731 +Node: Bug address1348382 +Node: Usenet1351973 +Node: Performance bugs1353204 +Node: Asking for help1356222 +Node: Maintainers1358213 +Node: Other Versions1359240 +Node: Installation summary1368172 +Node: Notes1369556 +Node: Compatibility Mode1370366 +Node: Additions1371188 +Node: Accessing The Source1372133 +Node: Adding Code1373668 +Node: New Ports1380804 +Node: Derived Files1385314 +Ref: Derived Files-Footnote-11391161 +Ref: Derived Files-Footnote-21391196 +Ref: Derived Files-Footnote-31391813 +Node: Future Extensions1391927 +Node: Implementation Limitations1392599 +Node: Extension Design1393841 +Node: Old Extension Problems1395005 +Ref: Old Extension Problems-Footnote-11396581 +Node: Extension New Mechanism Goals1396642 +Ref: Extension New Mechanism Goals-Footnote-11400138 +Node: Extension Other Design Decisions1400339 +Node: Extension Future Growth1402538 +Node: Notes summary1403162 +Node: Basic Concepts1404375 +Node: Basic High Level1405060 +Ref: figure-general-flow1405342 +Ref: figure-process-flow1406044 +Ref: Basic High Level-Footnote-11409440 +Node: Basic Data Typing1409629 +Node: Glossary1413047 +Node: Copying1446169 +Node: GNU Free Documentation License1483930 +Node: Index1509253  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index cd75aae0..f37d86e5 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -36966,11 +36966,20 @@ the file for reading using the @code{open()} system call. If it was able to open the file, then @code{fd} will @emph{not} be equal to @code{INVALID_HANDLE}. Otherwise, it will. +An extension can decide that it doesn't want to use the open file descriptor +provided by @command{gawk}. In such a case it can close the file and +set @code{fd} to @code{INVALID_HANDLE}, or it can leave it alone and +keep it's own file descriptor in private data pointed to by the +@code{opaque} pointer (see further in this list). In any case, if +the file descriptor is valid, it should @emph{not} just overwrite the +value with something else; doing so would cause a resource leak. + @item struct stat sbuf; If the file descriptor is valid, then @command{gawk} will have filled in this structure via a call to the @code{fstat()} system call. Otherwise, if the @code{lstat()} system call is available, it will use that. If @code{lstat()} is not available, then it uses @code{stat()}. + Getting the file's information allows extensions to check the type of the file even if it could not be opened. This occurs, for example, on Windows systems when trying to use @code{open()} on a directory. @@ -37013,7 +37022,7 @@ This function pointer should point to a function that creates the input records. Said function is the core of the input parser. Its behavior is described in the text following this list. -@item ssize_t (*read_func)(); +@item ssize_t (*read_func)(int, void *, size_t); This function pointer should point to a function that has the same behavior as the standard POSIX @code{read()} system call. It is an alternative to the @code{get_record} pointer. Its behavior @@ -37127,14 +37136,6 @@ In the latter case, code in a @code{BEGINFILE} rule can look at @code{FILENAME} and @code{ERRNO} to decide whether or not to activate your input parser (@pxref{BEGINFILE/ENDFILE}). -You register your input parser with the following function: - -@table @code -@item void register_input_parser(awk_input_parser_t *input_parser); -Register the input parser pointed to by @code{input_parser} with -@command{gawk}. -@end table - If you would like to override the default field parsing mechanism for a given record, then you must populate an @code{awk_fieldwidth_info_t} structure, which looks like this: @@ -37179,6 +37180,14 @@ be used as an argument to @code{malloc()} or in a union to allocate space statically. Please refer to the @code{readdir_test} sample extension for an example. +You register your input parser with the following function: + +@table @code +@item void register_input_parser(awk_input_parser_t *input_parser); +Register the input parser pointed to by @code{input_parser} with +@command{gawk}. +@end table + @node Output Wrappers @subsubsection Customized Output Wrappers @cindex customized output wrapper @@ -37282,10 +37291,12 @@ what it does. The @code{@var{XXX}_can_take_file()} function should make a decision based upon the @code{name} and @code{mode} fields, and any additional state (such as @command{awk} variable values) that is appropriate. +@command{gawk} attempts to open the named file for writing. The @code{fp} +member will be @code{NULL} only if it fails. When @command{gawk} calls @code{@var{XXX}_take_control_of()}, that function should fill in the other fields as appropriate, except for @code{fp}, which it should just -use normally. +use normally if it's not @code{NULL}. You register your output wrapper with the following function: diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 219a8929..26344f72 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -35882,11 +35882,20 @@ the file for reading using the @code{open()} system call. If it was able to open the file, then @code{fd} will @emph{not} be equal to @code{INVALID_HANDLE}. Otherwise, it will. +An extension can decide that it doesn't want to use the open file descriptor +provided by @command{gawk}. In such a case it can close the file and +set @code{fd} to @code{INVALID_HANDLE}, or it can leave it alone and +keep it's own file descriptor in private data pointed to by the +@code{opaque} pointer (see further in this list). In any case, if +the file descriptor is valid, it should @emph{not} just overwrite the +value with something else; doing so would cause a resource leak. + @item struct stat sbuf; If the file descriptor is valid, then @command{gawk} will have filled in this structure via a call to the @code{fstat()} system call. Otherwise, if the @code{lstat()} system call is available, it will use that. If @code{lstat()} is not available, then it uses @code{stat()}. + Getting the file's information allows extensions to check the type of the file even if it could not be opened. This occurs, for example, on Windows systems when trying to use @code{open()} on a directory. @@ -35929,7 +35938,7 @@ This function pointer should point to a function that creates the input records. Said function is the core of the input parser. Its behavior is described in the text following this list. -@item ssize_t (*read_func)(); +@item ssize_t (*read_func)(int, void *, size_t); This function pointer should point to a function that has the same behavior as the standard POSIX @code{read()} system call. It is an alternative to the @code{get_record} pointer. Its behavior @@ -36043,14 +36052,6 @@ In the latter case, code in a @code{BEGINFILE} rule can look at @code{FILENAME} and @code{ERRNO} to decide whether or not to activate your input parser (@pxref{BEGINFILE/ENDFILE}). -You register your input parser with the following function: - -@table @code -@item void register_input_parser(awk_input_parser_t *input_parser); -Register the input parser pointed to by @code{input_parser} with -@command{gawk}. -@end table - If you would like to override the default field parsing mechanism for a given record, then you must populate an @code{awk_fieldwidth_info_t} structure, which looks like this: @@ -36095,6 +36096,14 @@ be used as an argument to @code{malloc()} or in a union to allocate space statically. Please refer to the @code{readdir_test} sample extension for an example. +You register your input parser with the following function: + +@table @code +@item void register_input_parser(awk_input_parser_t *input_parser); +Register the input parser pointed to by @code{input_parser} with +@command{gawk}. +@end table + @node Output Wrappers @subsubsection Customized Output Wrappers @cindex customized output wrapper @@ -36198,10 +36207,12 @@ what it does. The @code{@var{XXX}_can_take_file()} function should make a decision based upon the @code{name} and @code{mode} fields, and any additional state (such as @command{awk} variable values) that is appropriate. +@command{gawk} attempts to open the named file for writing. The @code{fp} +member will be @code{NULL} only if it fails. When @command{gawk} calls @code{@var{XXX}_take_control_of()}, that function should fill in the other fields as appropriate, except for @code{fp}, which it should just -use normally. +use normally if it's not @code{NULL}. You register your output wrapper with the following function: diff --git a/doc/wordlist b/doc/wordlist index e4563fef..5342b675 100644 --- a/doc/wordlist +++ b/doc/wordlist @@ -1128,10 +1128,12 @@ ifdef ifdocbook ifhtml ifinfo +iflatex ifndef ifnotdocbook ifnothtml ifnotinfo +ifnotlatex ifnotplaintext ifnottex ifnotxml @@ -1691,6 +1693,7 @@ strftime strlen strnum strnums +strptime strtod strtonum struct @@ -1749,6 +1752,7 @@ thisopt thispage thrudvang tid +timeval timex titlepage tlines -- cgit v1.2.1 From f70b2f30551f5282e0dac96c45d21d89616ace4d Mon Sep 17 00:00:00 2001 From: Antonio Giovanni Colombo Date: Tue, 7 Mar 2023 19:42:50 +0100 Subject: clarifications on extension's file management --- doc/it/ChangeLog | 4 ++++ doc/it/gawktexi.in | 57 ++++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 49 insertions(+), 12 deletions(-) (limited to 'doc') diff --git a/doc/it/ChangeLog b/doc/it/ChangeLog index c70b4daa..e679b899 100755 --- a/doc/it/ChangeLog +++ b/doc/it/ChangeLog @@ -1,3 +1,7 @@ +2023-03-07 Antonio Giovanni Colombo + + * gawktexi.in: Updated. + 2023-02-26 Antonio Giovanni Colombo * gawktexi.in: Updated. diff --git a/doc/it/gawktexi.in b/doc/it/gawktexi.in index e4f25cf8..dce710cb 100755 --- a/doc/it/gawktexi.in +++ b/doc/it/gawktexi.in @@ -5626,11 +5626,16 @@ directory possono essere necessarie per organizzare i file da includere. Vista la possibilit@`a di specificare opzioni @option{-f} multiple, il meccanismo @code{@@include} non @`e strettamente necessario. Comunque, la direttiva @code{@@include} pu@`o essere d'aiuto nel costruire -programmi @command{gawk} autosufficienti, riducendo cos@`{@dotless{i}} la necessit@`a -di scrivere righe di comando complesse e tediose. +programmi @command{gawk} autosufficienti, riducendo cos@`{@dotless{i}} la +necessit@`a di scrivere righe di comando complesse e tediose. In particolare, @code{@@include} @`e molto utile per scrivere @dfn{script} CGI eseguibili da pagine web. +La direttiva @code{@@include} e l'opzione @option{-i}/@option{--include} +sulla riga di comando sono completamente equivalenti. Un programma sorgente +incluso non viene caricato di nuovo se @`e stato gi@`a caricato +in precedenza. + Le regole usate per trovare un file sorgente, descritte @iftex nella @@ -40037,9 +40042,34 @@ Se il file viene effettivamente aperto, il valore di @code{fd} [descrittore non valido]. In caso contrario, il valore sar@`a quello. +Un'estensione pu@`o decidere che non desidera usare il descrittore +di file aperto che le viene passato da @command{gawk}. +In tal caso pu@`o chiudere il file e impostare il relativo +descrittore di file @code{fd} al valore @code{INVALID_HANDLE}, +oppure ignorarlo e mantenere un suo proprio descrittore di file +nei suoi dati privati, raggiungibili usando il puntatore +@code{opaque} (vedere pi@`u sotto in questa lista). +In ogni caso, se il descrittore di file @`e valido, @emph{non} +dovrebbe essere sovrascritto con un altro valore; se lo si fa, +si causa una perdita di dati. + @item struct stat sbuf; Se il descrittore di file @`e valido, @command{gawk} avr@`a riempito i campi di questa struttura invocando la chiamata di sistema @code{fstat()}. +Altrimenti, se la chiamata di sistema @code{lstat()} @`e disponibile, +essa verr@`a usata. Se neppure @code{lstat()} @`e disponibile, allora +verr@`a usata la chiamata di sistema @code{stat()}. + +L'ottenere informazioni relative al file consente alle estensioni di +controllare il tipo di file, anche se non sar@`a poi possibile aprirlo. +Ci@`o capita, per esempio, nei sistemi Windows, quando si tenta di +usare @code{open()} su una directory. + +Se @command{gawk} non sar@`a riuscito a ottenere le informazioni +relative al file, allora @code{sbuf} conterr@`a zeri binari. +In particolare, il codice dell'estensione pu@`o testare se il campo +@samp{sbuf.st_mode == 0}. Se @`e questo il caso, allora in +@code{sbuf} non @`e contenuta alcuna informazione. @end table La funzione @code{@var{XXX}_can_take_file()} dovrebbe esaminare i campi di @@ -40077,7 +40107,7 @@ Questo puntatore a funzione dovrebbe puntare a una funzione che crea i record in input. Tale funzione @`e il nucleo centrale dell'analizzatore di input. Il suo modo di operare @`e descritto nel testo che segue questo elenco. -@item ssize_t (*read_func)(); +@item ssize_t (*read_func)(int, void *, size_t); Questo puntatore a funzione dovrebbe puntare a una funzione che ha lo stesso comportamento della chiamata di sistema standard POSIX @code{read()}. @`E in alternativa al puntatore a @code{get_record}. Il relativo comportamento @@ -40200,14 +40230,6 @@ pu@`o controllare @code{FILENAME} ed @code{ERRNO} per decidere se attivare un analizzatore di input utente oppure no (@pxref{BEGINFILE/ENDFILE}). -Un analizzatore di input va registrato usando la seguente funzione: - -@table @code -@item void register_input_parser(awk_input_parser_t *input_parser); -Registra l'analizzatore di input puntato da @code{input_parser} con -@command{gawk}. -@end table - Se si vuole ignorare il meccanismo di default per l'analisi dei campi per un determinato record, si deve riempire una struttura @code{awk_fieldwidth_info_t} che ha questo aspetto: @@ -40253,6 +40275,14 @@ dimensione pu@`o essere usata come argomento per @code{malloc()} o in una struttura @dfn{union} per allocare spazio staticamente. Per un esempio si pu@`o vedere l'estensione di esempio @code{readdir_test}. +Un analizzatore di input va registrato usando la seguente funzione: + +@table @code +@item void register_input_parser(awk_input_parser_t *input_parser); +Registra l'analizzatore di input puntato da @code{input_parser} con +@command{gawk}. +@end table + @node Processori di output @subsubsection Registrare un processore di output @cindex personalizzato @subentry processore di output @@ -40368,11 +40398,14 @@ appropriate per fare il lavoro richiesto. La funzione @code{@var{XXX}_can_take_file()} dovrebbe decidere in base ai campi @code{nome} e @code{modo}, e a ogni altro ulteriore indicatore di stato (p.es., valori di variabili @command{awk}) adatto allo scopo. +@command{gawk} tenta di aprire in scrittura il file indicato. +L'elemento @code{fp} varr@`a @code{NULL} solo se non si riesci ad aprire +il file. Quando @command{gawk} chiama @code{@var{XXX}_take_control_of()}, la funzione dovrebbe riempire i rimanenti campi in modo opportuno, tranne che per @code{fp}, che dovrebbe essere usato -normalmente. +normalmente se il suo valore non @`e @code{NULL}. Il processore di output va registrato usando la seguente funzione: -- cgit v1.2.1 From 0aa59175c6c80128f6b6ee85cced91eda158f97f Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 9 Mar 2023 19:44:07 +0200 Subject: Install png file for Info and HTML. Give image files gawk_* names. --- doc/ChangeLog | 7 + doc/Makefile.am | 50 ++- doc/Makefile.in | 99 ++++-- doc/api-figure1.eps | 536 ----------------------------- doc/api-figure1.fig | 40 --- doc/api-figure1.pdf | Bin 10707 -> 0 bytes doc/api-figure1.png | Bin 9183 -> 0 bytes doc/api-figure1.txt | 24 -- doc/api-figure2.eps | 517 ---------------------------- doc/api-figure2.fig | 26 -- doc/api-figure2.pdf | Bin 12031 -> 0 bytes doc/api-figure2.png | Bin 8983 -> 0 bytes doc/api-figure2.txt | 12 - doc/api-figure3.eps | 526 ----------------------------- doc/api-figure3.fig | 29 -- doc/api-figure3.pdf | Bin 12345 -> 0 bytes doc/api-figure3.png | Bin 8860 -> 0 bytes doc/api-figure3.txt | 13 - doc/array-elements.eps | 158 --------- doc/array-elements.fig | 27 -- doc/array-elements.pdf | Bin 6796 -> 0 bytes doc/array-elements.png | Bin 6091 -> 0 bytes doc/array-elements.txt | 4 - doc/gawk.info | 786 +++++++++++++++++++++---------------------- doc/gawk.texi | 12 +- doc/gawk_api-figure1.eps | 536 +++++++++++++++++++++++++++++ doc/gawk_api-figure1.fig | 40 +++ doc/gawk_api-figure1.pdf | Bin 0 -> 10707 bytes doc/gawk_api-figure1.png | Bin 0 -> 9183 bytes doc/gawk_api-figure1.txt | 24 ++ doc/gawk_api-figure2.eps | 517 ++++++++++++++++++++++++++++ doc/gawk_api-figure2.fig | 26 ++ doc/gawk_api-figure2.pdf | Bin 0 -> 12031 bytes doc/gawk_api-figure2.png | Bin 0 -> 8983 bytes doc/gawk_api-figure2.txt | 12 + doc/gawk_api-figure3.eps | 526 +++++++++++++++++++++++++++++ doc/gawk_api-figure3.fig | 29 ++ doc/gawk_api-figure3.pdf | Bin 0 -> 12345 bytes doc/gawk_api-figure3.png | Bin 0 -> 8860 bytes doc/gawk_api-figure3.txt | 13 + doc/gawk_array-elements.eps | 158 +++++++++ doc/gawk_array-elements.fig | 27 ++ doc/gawk_array-elements.pdf | Bin 0 -> 6796 bytes doc/gawk_array-elements.png | Bin 0 -> 6091 bytes doc/gawk_array-elements.txt | 4 + doc/gawk_general-program.eps | 153 +++++++++ doc/gawk_general-program.fig | 25 ++ doc/gawk_general-program.pdf | Bin 0 -> 5613 bytes doc/gawk_general-program.png | Bin 0 -> 6078 bytes doc/gawk_general-program.txt | 4 + doc/gawk_process-flow.eps | 191 +++++++++++ doc/gawk_process-flow.fig | 37 ++ doc/gawk_process-flow.pdf | Bin 0 -> 6583 bytes doc/gawk_process-flow.png | Bin 0 -> 7856 bytes doc/gawk_process-flow.txt | 11 + doc/gawk_statist.eps | 557 ++++++++++++++++++++++++++++++ doc/gawk_statist.jpg | Bin 0 -> 20400 bytes doc/gawk_statist.pdf | Bin 0 -> 5313 bytes doc/gawk_statist.txt | 23 ++ doc/gawkinet.info | 22 +- doc/gawkinet.texi | 2 +- doc/gawktexi.in | 12 +- doc/general-program.eps | 153 --------- doc/general-program.fig | 25 -- doc/general-program.pdf | Bin 5613 -> 0 bytes doc/general-program.png | Bin 6078 -> 0 bytes doc/general-program.txt | 4 - doc/process-flow.eps | 191 ----------- doc/process-flow.fig | 37 -- doc/process-flow.pdf | Bin 6583 -> 0 bytes doc/process-flow.png | Bin 7856 -> 0 bytes doc/process-flow.txt | 11 - doc/statist.eps | 557 ------------------------------ doc/statist.jpg | Bin 20400 -> 0 bytes doc/statist.pdf | Bin 5313 -> 0 bytes doc/statist.txt | 23 -- 76 files changed, 3447 insertions(+), 3369 deletions(-) delete mode 100644 doc/api-figure1.eps delete mode 100644 doc/api-figure1.fig delete mode 100644 doc/api-figure1.pdf delete mode 100644 doc/api-figure1.png delete mode 100644 doc/api-figure1.txt delete mode 100644 doc/api-figure2.eps delete mode 100644 doc/api-figure2.fig delete mode 100644 doc/api-figure2.pdf delete mode 100644 doc/api-figure2.png delete mode 100644 doc/api-figure2.txt delete mode 100644 doc/api-figure3.eps delete mode 100644 doc/api-figure3.fig delete mode 100644 doc/api-figure3.pdf delete mode 100644 doc/api-figure3.png delete mode 100644 doc/api-figure3.txt delete mode 100644 doc/array-elements.eps delete mode 100644 doc/array-elements.fig delete mode 100644 doc/array-elements.pdf delete mode 100644 doc/array-elements.png delete mode 100644 doc/array-elements.txt create mode 100644 doc/gawk_api-figure1.eps create mode 100644 doc/gawk_api-figure1.fig create mode 100644 doc/gawk_api-figure1.pdf create mode 100644 doc/gawk_api-figure1.png create mode 100644 doc/gawk_api-figure1.txt create mode 100644 doc/gawk_api-figure2.eps create mode 100644 doc/gawk_api-figure2.fig create mode 100644 doc/gawk_api-figure2.pdf create mode 100644 doc/gawk_api-figure2.png create mode 100644 doc/gawk_api-figure2.txt create mode 100644 doc/gawk_api-figure3.eps create mode 100644 doc/gawk_api-figure3.fig create mode 100644 doc/gawk_api-figure3.pdf create mode 100644 doc/gawk_api-figure3.png create mode 100644 doc/gawk_api-figure3.txt create mode 100644 doc/gawk_array-elements.eps create mode 100644 doc/gawk_array-elements.fig create mode 100644 doc/gawk_array-elements.pdf create mode 100644 doc/gawk_array-elements.png create mode 100644 doc/gawk_array-elements.txt create mode 100644 doc/gawk_general-program.eps create mode 100644 doc/gawk_general-program.fig create mode 100644 doc/gawk_general-program.pdf create mode 100644 doc/gawk_general-program.png create mode 100644 doc/gawk_general-program.txt create mode 100644 doc/gawk_process-flow.eps create mode 100644 doc/gawk_process-flow.fig create mode 100644 doc/gawk_process-flow.pdf create mode 100644 doc/gawk_process-flow.png create mode 100644 doc/gawk_process-flow.txt create mode 100644 doc/gawk_statist.eps create mode 100644 doc/gawk_statist.jpg create mode 100644 doc/gawk_statist.pdf create mode 100644 doc/gawk_statist.txt delete mode 100644 doc/general-program.eps delete mode 100644 doc/general-program.fig delete mode 100644 doc/general-program.pdf delete mode 100644 doc/general-program.png delete mode 100644 doc/general-program.txt delete mode 100644 doc/process-flow.eps delete mode 100644 doc/process-flow.fig delete mode 100644 doc/process-flow.pdf delete mode 100644 doc/process-flow.png delete mode 100644 doc/process-flow.txt delete mode 100644 doc/statist.eps delete mode 100644 doc/statist.jpg delete mode 100644 doc/statist.pdf delete mode 100644 doc/statist.txt (limited to 'doc') diff --git a/doc/ChangeLog b/doc/ChangeLog index 699d1f37..7316a0cf 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,10 @@ +2023-03-09 Manuel Collado + + * gawktexi.in, gawkinet.texi, *.{png,jpg,eps,pdf,txt,fig}: rename + image file names to ensure a gawk_ prefix (except *flashlight*). + * Makefile.am: Ditto. And install image files for .info and .html + docs. + 2023-03-02 Arnold D. Robbins * gawktexi.in (Input Parsers): Clarify and improve some of the diff --git a/doc/Makefile.am b/doc/Makefile.am index 8cb061f7..ba04c8c8 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -29,27 +29,24 @@ info_TEXINFOS = gawk.texi gawkinet.texi gawkworkflow.texi pm-gawk.texi man_MANS = gawk.1 gawkbug.1 pm-gawk.1 +png_images = gawk_api-figure1.png gawk_api-figure2.png gawk_api-figure3.png \ + gawk_array-elements.png gawk_general-program.png gawk_process-flow.png +html_images = $(png_images) gawk_statist.jpg + +fig_images = $(png_images:%.png=%.fig) +txt_images = $(png_images:%.png=%.txt) statist.txt +eps_images = $(txt_images:%.txt=%.eps) +pdf_images = $(txt_images:%.txt=%.pdf) + EXTRA_DIST = ChangeLog ChangeLog.0 ChangeLog.1 \ README.card ad.block setter.outline \ awkcard.in awkforai.txt texinfo.tex cardfonts \ - api-figure1.eps api-figure1.fig api-figure1.pdf \ - api-figure1.png api-figure1.txt \ - api-figure2.eps api-figure2.fig api-figure2.pdf \ - api-figure2.png api-figure2.txt \ - api-figure3.eps api-figure3.fig api-figure3.pdf \ - api-figure3.png api-figure3.txt \ - array-elements.eps array-elements.fig array-elements.pdf \ - array-elements.png array-elements.txt \ + $(fig_images) $(txt_images) $(eps_images) $(pdf_images) \ gawktexi.in sidebar.awk \ - general-program.eps general-program.fig general-program.pdf \ - general-program.png general-program.txt \ it \ - process-flow.eps process-flow.fig process-flow.pdf \ - process-flow.png process-flow.txt \ macros colors no.colors $(man_MANS) \ lflashlight-small.xpic lflashlight.eps lflashlight.pdf \ rflashlight-small.xpic rflashlight.eps rflashlight.pdf \ - statist.jpg statist.eps statist.pdf statist.txt \ wordlist wordlist2 wordlist3 wordlist4 wordlist5 wordlist6 \ bc_notes @@ -159,3 +156,30 @@ spellinet: @echo ==== gawkinet.texi ==== export LC_ALL=C ; spell "$(srcdir)"/gawkinet.texi | \ sort -u | comm -23 - "$(srcdir)"/wordlist4 + +# Install/unistall graphic image files in the info/ dir + +imagedir = $(infodir) +image_DATA = $(html_images) + +# Install/unistall graphic image files in the html doc dir + +install-html-local: + @$(NORMAL_INSTALL) + @list='$(html_images)'; test -n "$(htmldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + $(INSTALL_DATA) $$p "$(DESTDIR)$(htmldir)" || exit $$?; \ + done; + +uninstall-local: + @$(NORMAL_UNINSTALL) + @list='$(html_images)'; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + echo " rm -rf '$(DESTDIR)$(htmldir)/$$p'"; \ + rm -rf "$(DESTDIR)$(htmldir)/$$p"; \ + done + diff --git a/doc/Makefile.in b/doc/Makefile.in index 29a9abb2..c0b51a08 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -38,6 +38,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA # + VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ @@ -196,7 +197,8 @@ am__can_run_installinfo = \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac -am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" +am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \ + "$(DESTDIR)$(imagedir)" am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -227,6 +229,7 @@ am__uninstall_files_from_dir = { \ man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) +DATA = $(image_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/texinfo.tex ChangeLog texinfo.tex @@ -368,27 +371,23 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ info_TEXINFOS = gawk.texi gawkinet.texi gawkworkflow.texi pm-gawk.texi man_MANS = gawk.1 gawkbug.1 pm-gawk.1 +png_images = gawk_api-figure1.png gawk_api-figure2.png gawk_api-figure3.png \ + gawk_array-elements.png gawk_general-program.png gawk_process-flow.png + +html_images = $(png_images) gawk_statist.jpg +fig_images = $(png_images:%.png=%.fig) +txt_images = $(png_images:%.png=%.txt) statist.txt +eps_images = $(txt_images:%.txt=%.eps) +pdf_images = $(txt_images:%.txt=%.pdf) EXTRA_DIST = ChangeLog ChangeLog.0 ChangeLog.1 \ README.card ad.block setter.outline \ awkcard.in awkforai.txt texinfo.tex cardfonts \ - api-figure1.eps api-figure1.fig api-figure1.pdf \ - api-figure1.png api-figure1.txt \ - api-figure2.eps api-figure2.fig api-figure2.pdf \ - api-figure2.png api-figure2.txt \ - api-figure3.eps api-figure3.fig api-figure3.pdf \ - api-figure3.png api-figure3.txt \ - array-elements.eps array-elements.fig array-elements.pdf \ - array-elements.png array-elements.txt \ + $(fig_images) $(txt_images) $(eps_images) $(pdf_images) \ gawktexi.in sidebar.awk \ - general-program.eps general-program.fig general-program.pdf \ - general-program.png general-program.txt \ it \ - process-flow.eps process-flow.fig process-flow.pdf \ - process-flow.png process-flow.txt \ macros colors no.colors $(man_MANS) \ lflashlight-small.xpic lflashlight.eps lflashlight.pdf \ rflashlight-small.xpic rflashlight.eps rflashlight.pdf \ - statist.jpg statist.eps statist.pdf statist.txt \ wordlist wordlist2 wordlist3 wordlist4 wordlist5 wordlist6 \ bc_notes @@ -407,6 +406,10 @@ PAPEROPTS = -dpaper=letter -P-pletter # Use this if your troff can correctly handle macros from 'colors' file AWKCARD = awkcard.ps + +# Install/unistall graphic image files in the info/ dir +imagedir = $(infodir) +image_DATA = $(html_images) all: all-am .SUFFIXES: @@ -643,6 +646,27 @@ uninstall-man1: } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) +install-imageDATA: $(image_DATA) + @$(NORMAL_INSTALL) + @list='$(image_DATA)'; test -n "$(imagedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(imagedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(imagedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(imagedir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(imagedir)" || exit $$?; \ + done + +uninstall-imageDATA: + @$(NORMAL_UNINSTALL) + @list='$(image_DATA)'; test -n "$(imagedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(imagedir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: @@ -687,9 +711,9 @@ distdir-am: $(DISTFILES) dist-info check-am: all-am check: check-am -all-am: Makefile $(INFO_DEPS) $(MANS) +all-am: Makefile $(INFO_DEPS) $(MANS) $(DATA) installdirs: - for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)"; do \ + for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(imagedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am @@ -743,7 +767,7 @@ info: info-am info-am: $(INFO_DEPS) -install-data-am: install-info-am install-man +install-data-am: install-imageDATA install-info-am install-man install-dvi: install-dvi-am @@ -766,7 +790,7 @@ install-exec-am: install-html: install-html-am -install-html-am: $(HTMLS) +install-html-am: $(HTMLS) install-html-local @$(NORMAL_INSTALL) @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ if test -n "$$list"; then \ @@ -879,8 +903,9 @@ ps: ps-am ps-am: $(PSS) -uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ - uninstall-man uninstall-pdf-am uninstall-ps-am +uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-imageDATA \ + uninstall-info-am uninstall-local uninstall-man \ + uninstall-pdf-am uninstall-ps-am uninstall-man: uninstall-man1 @@ -891,15 +916,16 @@ uninstall-man: uninstall-man1 distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-man1 install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-aminfo \ + install-html-am install-html-local install-imageDATA \ + install-info install-info-am install-man install-man1 \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-aminfo \ maintainer-clean-generic mostlyclean mostlyclean-aminfo \ mostlyclean-generic pdf pdf-am pdf-local ps ps-am tags-am \ uninstall uninstall-am uninstall-dvi-am uninstall-html-am \ - uninstall-info-am uninstall-man uninstall-man1 \ - uninstall-pdf-am uninstall-ps-am + uninstall-imageDATA uninstall-info-am uninstall-local \ + uninstall-man uninstall-man1 uninstall-pdf-am uninstall-ps-am .PRECIOUS: Makefile @@ -993,6 +1019,27 @@ spellinet: export LC_ALL=C ; spell "$(srcdir)"/gawkinet.texi | \ sort -u | comm -23 - "$(srcdir)"/wordlist4 +# Install/unistall graphic image files in the html doc dir + +install-html-local: + @$(NORMAL_INSTALL) + @list='$(html_images)'; test -n "$(htmldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + $(INSTALL_DATA) $$p "$(DESTDIR)$(htmldir)" || exit $$?; \ + done; + +uninstall-local: + @$(NORMAL_UNINSTALL) + @list='$(html_images)'; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + echo " rm -rf '$(DESTDIR)$(htmldir)/$$p'"; \ + rm -rf "$(DESTDIR)$(htmldir)/$$p"; \ + done + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/doc/api-figure1.eps b/doc/api-figure1.eps deleted file mode 100644 index 7af094c9..00000000 --- a/doc/api-figure1.eps +++ /dev/null @@ -1,536 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Title: api-figure1.fig -%%Creator: fig2dev Version 3.2 Patchlevel 5d -%%CreationDate: Wed Oct 31 20:16:08 2012 -%%BoundingBox: 0 0 399 227 -%Magnification: 1.0000 -%%EndComments -%%BeginProlog -/MyAppDict 100 dict dup begin def -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end - -% This junk string is used by the show operators -/PATsstr 1 string def -/PATawidthshow { % cx cy cchar rx ry string - % Loop over each character in the string - { % cx cy cchar rx ry char - % Show the character - dup % cx cy cchar rx ry char char - PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char) - false charpath % cx cy cchar rx ry char - /clip load PATdraw - % Move past the character (charpath modified the - % current point) - currentpoint % cx cy cchar rx ry char x y - newpath - moveto % cx cy cchar rx ry char - % Reposition by cx,cy if the character in the string is cchar - 3 index eq { % cx cy cchar rx ry - 4 index 4 index rmoveto - } if - % Reposition all characters by rx ry - 2 copy rmoveto % cx cy cchar rx ry - } forall - pop pop pop pop pop % - - currentpoint - newpath - moveto -} bind def -/PATcg { - 7 dict dup begin - /lw currentlinewidth def - /lc currentlinecap def - /lj currentlinejoin def - /ml currentmiterlimit def - /ds [ currentdash ] def - /cc [ currentrgbcolor ] def - /cm matrix currentmatrix def - end -} bind def -% PATdraw - calculates the boundaries of the object and -% fills it with the current pattern -/PATdraw { % proc - save exch - PATpcalc % proc nw nh px py - 5 -1 roll exec % nw nh px py - newpath - PATfill % - - restore -} bind def -% PATfill - performs the tiling for the shape -/PATfill { % nw nh px py PATfill - - PATDict /CurrentPattern get dup begin - setfont - % Set the coordinate system to Pattern Space - PatternGState PATsg - % Set the color for uncolored pattezns - PaintType 2 eq { PATDict /PColor get PATsc } if - % Create the string for showing - 3 index string % nw nh px py str - % Loop for each of the pattern sources - 0 1 Multi 1 sub { % nw nh px py str source - % Move to the starting location - 3 index 3 index % nw nh px py str source px py - moveto % nw nh px py str source - % For multiple sources, set the appropriate color - Multi 1 ne { dup PC exch get PATsc } if - % Set the appropriate string for the source - 0 1 7 index 1 sub { 2 index exch 2 index put } for pop - % Loop over the number of vertical cells - 3 index % nw nh px py str nh - { % nw nh px py str - currentpoint % nw nh px py str cx cy - 2 index oldshow % nw nh px py str cx cy - YStep add moveto % nw nh px py str - } repeat % nw nh px py str - } for - 5 { pop } repeat - end -} bind def - -% PATkshow - kshow with the current pattezn -/PATkshow { % proc string - exch bind % string proc - 1 index 0 get % string proc char - % Loop over all but the last character in the string - 0 1 4 index length 2 sub { - % string proc char idx - % Find the n+1th character in the string - 3 index exch 1 add get % string proc char char+1 - exch 2 copy % strinq proc char+1 char char+1 char - % Now show the nth character - PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr) - false charpath % string proc char+1 char char+1 - /clip load PATdraw - % Move past the character (charpath modified the current point) - currentpoint newpath moveto - % Execute the user proc (should consume char and char+1) - mark 3 1 roll % string proc char+1 mark char char+1 - 4 index exec % string proc char+1 mark... - cleartomark % string proc char+1 - } for - % Now display the last character - PATsstr dup 0 4 -1 roll put % string proc (char+1) - false charpath % string proc - /clip load PATdraw - neewath - pop pop % - -} bind def -% PATmp - the makepattern equivalent -/PATmp { % patdict patmtx PATmp patinstance - exch dup length 7 add % We will add 6 new entries plus 1 FID - dict copy % Create a new dictionary - begin - % Matrix to install when painting the pattern - TilingType PATtcalc - /PatternGState PATcg def - PatternGState /cm 3 -1 roll put - % Check for multi pattern sources (Level 1 fast color patterns) - currentdict /Multi known not { /Multi 1 def } if - % Font dictionary definitions - /FontType 3 def - % Create a dummy encoding vector - /Encoding 256 array def - 3 string 0 1 255 { - Encoding exch dup 3 index cvs cvn put } for pop - /FontMatrix matrix def - /FontBBox BBox def - /BuildChar { - mark 3 1 roll % mark dict char - exch begin - Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata] - PaintType 2 eq Multi 1 ne or - { XStep 0 FontBBox aload pop setcachedevice } - { XStep 0 setcharwidth } ifelse - currentdict % mark [paintdata] dict - /PaintProc load % mark [paintdata] dict paintproc - end - gsave - false PATredef exec true PATredef - grestore - cleartomark % - - } bind def - currentdict - end % newdict - /foo exch % /foo newlict - definefont % newfont -} bind def -% PATpcalc - calculates the starting point and width/height -% of the tile fill for the shape -/PATpcalc { % - PATpcalc nw nh px py - PATDict /CurrentPattern get begin - gsave - % Set up the coordinate system to Pattern Space - % and lock down pattern - PatternGState /cm get setmatrix - BBox aload pop pop pop translate - % Determine the bounding box of the shape - pathbbox % llx lly urx ury - grestore - % Determine (nw, nh) the # of cells to paint width and height - PatHeight div ceiling % llx lly urx qh - 4 1 roll % qh llx lly urx - PatWidth div ceiling % qh llx lly qw - 4 1 roll % qw qh llx lly - PatHeight div floor % qw qh llx ph - 4 1 roll % ph qw qh llx - PatWidth div floor % ph qw qh pw - 4 1 roll % pw ph qw qh - 2 index sub cvi abs % pw ph qs qh-ph - exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph - % Determine the starting point of the pattern fill - %(px, py) - 4 2 roll % nw nh pw ph - PatHeight mul % nw nh pw py - exch % nw nh py pw - PatWidth mul exch % nw nh px py - end -} bind def - -% Save the original routines so that we can use them later on -/oldfill /fill load def -/oldeofill /eofill load def -/oldstroke /stroke load def -/oldshow /show load def -/oldashow /ashow load def -/oldwidthshow /widthshow load def -/oldawidthshow /awidthshow load def -/oldkshow /kshow load def - -% These defs are necessary so that subsequent procs don't bind in -% the originals -/fill { oldfill } bind def -/eofill { oldeofill } bind def -/stroke { oldstroke } bind def -/show { oldshow } bind def -/ashow { oldashow } bind def -/widthshow { oldwidthshow } bind def -/awidthshow { oldawidthshow } bind def -/kshow { oldkshow } bind def -/PATredef { - MyAppDict begin - { - /fill { /clip load PATdraw newpath } bind def - /eofill { /eoclip load PATdraw newpath } bind def - /stroke { PATstroke } bind def - /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def - /ashow { 0 0 null 6 3 roll PATawidthshow } - bind def - /widthshow { 0 0 3 -1 roll PATawidthshow } - bind def - /awidthshow { PATawidthshow } bind def - /kshow { PATkshow } bind def - } { - /fill { oldfill } bind def - /eofill { oldeofill } bind def - /stroke { oldstroke } bind def - /show { oldshow } bind def - /ashow { oldashow } bind def - /widthshow { oldwidthshow } bind def - /awidthshow { oldawidthshow } bind def - /kshow { oldkshow } bind def - } ifelse - end -} bind def -false PATredef -% Conditionally define setcmykcolor if not available -/setcmykcolor where { pop } { - /setcmykcolor { - 1 sub 4 1 roll - 3 { - 3 index add neg dup 0 lt { pop 0 } if 3 1 roll - } repeat - setrgbcolor - pop - } bind def -} ifelse -/PATsc { % colorarray - aload length % c1 ... cn length - dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor - } ifelse } ifelse -} bind def -/PATsg { % dict - begin - lw setlinewidth - lc setlinecap - lj setlinejoin - ml setmiterlimit - ds aload pop setdash - cc aload pop setrgbcolor - cm setmatrix - end -} bind def - -/PATDict 3 dict def -/PATsp { - true PATredef - PATDict begin - /CurrentPattern exch def - % If it's an uncolored pattern, save the color - CurrentPattern /PaintType get 2 eq { - /PColor exch def - } if - /CColor [ currentrgbcolor ] def - end -} bind def -% PATstroke - stroke with the current pattern -/PATstroke { - countdictstack - save - mark - { - currentpoint strokepath moveto - PATpcalc % proc nw nh px py - clip newpath PATfill - } stopped { - (*** PATstroke Warning: Path is too complex, stroking - with gray) = - cleartomark - restore - countdictstack exch sub dup 0 gt - { { end } repeat } { pop } ifelse - gsave 0.5 setgray oldstroke grestore - } { pop restore pop } ifelse - newpath -} bind def -/PATtcalc { % modmtx tilingtype PATtcalc tilematrix - % Note: tiling types 2 and 3 are not supported - gsave - exch concat % tilingtype - matrix currentmatrix exch % cmtx tilingtype - % Tiling type 1 and 3: constant spacing - 2 ne { - % Distort the pattern so that it occupies - % an integral number of device pixels - dup 4 get exch dup 5 get exch % tx ty cmtx - XStep 0 dtransform - round exch round exch % tx ty cmtx dx.x dx.y - XStep div exch XStep div exch % tx ty cmtx a b - 0 YStep dtransform - round exch round exch % tx ty cmtx a b dy.x dy.y - YStep div exch YStep div exch % tx ty cmtx a b c d - 7 -3 roll astore % { a b c d tx ty } - } if - grestore -} bind def -/PATusp { - false PATredef - PATDict begin - CColor PATsc - end -} bind def - -% right30 -11 dict begin -/PaintType 1 def -/PatternType 1 def -/TilingType 1 def -/BBox [0 0 1 1] def -/XStep 1 def -/YStep 1 def -/PatWidth 1 def -/PatHeight 1 def -/Multi 2 def -/PaintData [ - { clippath } bind - { 32 16 true [ 32 0 0 -16 0 16 ] - {<00030003000c000c0030003000c000c0030003000c000c00 - 30003000c000c00000030003000c000c0030003000c000c0 - 030003000c000c0030003000c000c000>} - imagemask } bind -] def -/PaintProc { - pop - exec fill -} def -currentdict -end -/P2 exch def - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -/pageheader { -save -newpath 0 227 moveto 0 0 lineto 399 0 lineto 399 227 lineto closepath clip newpath --194.8 350.2 translate -1 -1 scale -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06299 0.06299 sc -} bind def -/pagefooter { -$F2psEnd -restore -} bind def -%%EndProlog -pageheader -% -% Fig objects follow -% -% -% here starts figure with depth 50 -% Arc -7.500 slw -0 slc -gs clippath -3599 4000 m 3567 4148 l 3626 4161 l 3658 4013 l 3658 4013 l 3603 4124 l 3599 4000 l cp -eoclip -n 5449.3 4471.5 1878.7 -70.5453 -169.8379 arcn -gs col0 s gr - gr - -% arrowhead -0 slj -n 3599 4000 m 3603 4124 l 3658 4013 l 3599 4000 l cp gs 0.00 setgray ef gr col0 s -% Arc -gs clippath -4422 4004 m 4425 4155 l 4485 4154 l 4482 4003 l 4482 4003 l 4455 4124 l 4422 4004 l cp -eoclip -n 5539.0 4051.3 1087.6 -60.4713 175.3232 arcn -gs col0 s gr - gr - -% arrowhead -n 4422 4004 m 4455 4124 l 4482 4003 l 4422 4004 l cp gs 0.00 setgray ef gr col0 s -% Arc -gs clippath -4986 4010 m 5012 4159 l 5072 4149 l 5046 4000 l 5046 4000 l 5037 4124 l 4986 4010 l cp -eoclip -n 5628.8 3967.5 613.5 -36.7999 163.6698 arcn -gs col0 s gr - gr - -% arrowhead -n 4986 4010 m 5037 4124 l 5046 4000 l 4986 4010 l cp gs 0.00 setgray ef gr col0 s -% Arc -135.000 slw -gs clippath -7736 3835 m 7756 3984 l 7907 3964 l 7887 3814 l 7841 3821 l 7828 3944 l 7782 3829 l cp -eoclip -n 6609.1 4056.9 1224.8 -93.9364 -4.5364 arc -gs col0 s gr - gr - -% arrowhead -7.500 slw -n 7782 3829 m 7828 3944 l 7841 3821 l col0 s -% Polyline -n 3105 4140 m 6660 4140 l 6660 5085 l 3105 5085 l - cp gs col0 s gr -% Polyline -n 6660 4140 m 8730 4140 l 8730 5085 l 6660 5085 l - cp gs col7 0.50 shd ef gr gs col0 s gr -% Polyline -n 5805 2610 m 6345 2610 l 6345 3690 l 5805 3690 l - cp gs col0 s gr -% Polyline -n 5805 2835 m 6345 2835 l 6345 3015 l 5805 3015 l - cp gs col0 s gr -% Polyline -n 5805 3195 m 6345 3195 l 6345 3375 l 5805 3375 l - cp gs col0 s gr -% Polyline -n 5805 3510 m 6345 3510 l 6345 3690 l 5805 3690 l - cp gs col0 s gr -% Polyline -n 3510 4140 m 3780 4140 l 3780 5085 l 3510 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P2 [16 0 0 -8 234.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 4365 4140 m 4635 4140 l 4635 5085 l 4365 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P2 [16 0 0 -8 291.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 4905 4140 m 5265 4140 l 5265 5085 l 4905 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P2 [16 0 0 -8 327.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -/Times-Roman ff 180.00 scf sf -3510 5490 m -gs 1 -1 sc (gawk Main Program Address Space) col0 sh gr -/Times-Roman ff 180.00 scf sf -7290 5490 m -gs 1 -1 sc (Extension) col0 sh gr -/Times-Roman ff 180.00 scf sf -5985 2115 m -gs 1 -1 sc (API) col0 sh gr -/Times-Roman ff 180.00 scf sf -5895 2340 m -gs 1 -1 sc (Struct) col0 sh gr -/Courier-Bold ff 180.00 scf sf -7065 2655 m -gs 1 -1 sc (dl_load\(api_p, id\);) col0 sh gr -% here ends figure; -pagefooter -showpage -%%Trailer -end -%EOF diff --git a/doc/api-figure1.fig b/doc/api-figure1.fig deleted file mode 100644 index 7bc47846..00000000 --- a/doc/api-figure1.fig +++ /dev/null @@ -1,40 +0,0 @@ -#FIG 3.2 Produced by xfig version 3.2.5b -Landscape -Center -Metric -A4 -100.00 -Single --2 -1200 2 -5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 0 5449.265 4471.471 6075 2700 4320 2970 3600 4140 - 1 1 1.00 60.00 120.00 -5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 0 5538.971 4051.323 6075 3105 4725 3330 4455 4140 - 1 1 1.00 60.00 120.00 -5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 0 5628.750 3967.500 6120 3600 5220 3510 5040 4140 - 1 1 1.00 60.00 120.00 -5 1 0 10 0 7 50 -1 -1 0.000 0 0 1 0 6609.079 4056.868 6525 2835 7560 3285 7830 3960 - 0 0 1.00 60.00 120.00 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 3105 4140 6660 4140 6660 5085 3105 5085 3105 4140 -2 2 0 1 0 7 50 -1 10 0.000 0 0 -1 0 0 5 - 6660 4140 8730 4140 8730 5085 6660 5085 6660 4140 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 5805 2610 6345 2610 6345 3690 5805 3690 5805 2610 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 5805 2835 6345 2835 6345 3015 5805 3015 5805 2835 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 5805 3195 6345 3195 6345 3375 5805 3375 5805 3195 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 5805 3510 6345 3510 6345 3690 5805 3690 5805 3510 -2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 - 3510 4140 3780 4140 3780 5085 3510 5085 3510 4140 -2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 - 4365 4140 4635 4140 4635 5085 4365 5085 4365 4140 -2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 - 4905 4140 5265 4140 5265 5085 4905 5085 4905 4140 -4 0 0 50 -1 0 12 0.0000 4 180 2850 3510 5490 gawk Main Program Address Space\001 -4 0 0 50 -1 0 12 0.0000 4 135 825 7290 5490 Extension\001 -4 0 0 50 -1 0 12 0.0000 4 135 300 5985 2115 API\001 -4 0 0 50 -1 0 12 0.0000 4 135 480 5895 2340 Struct\001 -4 0 0 50 -1 14 12 0.0000 4 165 2280 7065 2655 dl_load(api_p, id);\001 diff --git a/doc/api-figure1.pdf b/doc/api-figure1.pdf deleted file mode 100644 index 0c24b67d..00000000 Binary files a/doc/api-figure1.pdf and /dev/null differ diff --git a/doc/api-figure1.png b/doc/api-figure1.png deleted file mode 100644 index 72d552cd..00000000 Binary files a/doc/api-figure1.png and /dev/null differ diff --git a/doc/api-figure1.txt b/doc/api-figure1.txt deleted file mode 100644 index 686b853b..00000000 --- a/doc/api-figure1.txt +++ /dev/null @@ -1,24 +0,0 @@ - API - Struct - +---+ - | | - +---+ - +---------------| | - | +---+ dl_load(api_p, id); - | | | ___________________ - | +---+ | - | +---------| | __________________ | - | | +---+ || - | | | | || - | | +---+ || - | | +---| | || - | | | +---+ \ || / - | | | \ / - v v v \/ -+-------+-+---+-+---+-+------------------+--------------------+ -| |x| |x| |x| |OOOOOOOOOOOOOOOOOOOO| -| |x| |x| |x| |OOOOOOOOOOOOOOOOOOOO| -| |x| |x| |x| |OOOOOOOOOOOOOOOOOOOO| -+-------+-+---+-+---+-+------------------+--------------------+ - - gawk Main Program Address Space Extension diff --git a/doc/api-figure2.eps b/doc/api-figure2.eps deleted file mode 100644 index caf5c34c..00000000 --- a/doc/api-figure2.eps +++ /dev/null @@ -1,517 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Title: api-figure2.fig -%%Creator: fig2dev Version 3.2 Patchlevel 5d -%%CreationDate: Thu Apr 25 22:22:07 2013 -%%BoundingBox: 0 0 363 179 -%Magnification: 1.0000 -%%EndComments -%%BeginProlog -/MyAppDict 100 dict dup begin def -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end - -% This junk string is used by the show operators -/PATsstr 1 string def -/PATawidthshow { % cx cy cchar rx ry string - % Loop over each character in the string - { % cx cy cchar rx ry char - % Show the character - dup % cx cy cchar rx ry char char - PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char) - false charpath % cx cy cchar rx ry char - /clip load PATdraw - % Move past the character (charpath modified the - % current point) - currentpoint % cx cy cchar rx ry char x y - newpath - moveto % cx cy cchar rx ry char - % Reposition by cx,cy if the character in the string is cchar - 3 index eq { % cx cy cchar rx ry - 4 index 4 index rmoveto - } if - % Reposition all characters by rx ry - 2 copy rmoveto % cx cy cchar rx ry - } forall - pop pop pop pop pop % - - currentpoint - newpath - moveto -} bind def -/PATcg { - 7 dict dup begin - /lw currentlinewidth def - /lc currentlinecap def - /lj currentlinejoin def - /ml currentmiterlimit def - /ds [ currentdash ] def - /cc [ currentrgbcolor ] def - /cm matrix currentmatrix def - end -} bind def -% PATdraw - calculates the boundaries of the object and -% fills it with the current pattern -/PATdraw { % proc - save exch - PATpcalc % proc nw nh px py - 5 -1 roll exec % nw nh px py - newpath - PATfill % - - restore -} bind def -% PATfill - performs the tiling for the shape -/PATfill { % nw nh px py PATfill - - PATDict /CurrentPattern get dup begin - setfont - % Set the coordinate system to Pattern Space - PatternGState PATsg - % Set the color for uncolored pattezns - PaintType 2 eq { PATDict /PColor get PATsc } if - % Create the string for showing - 3 index string % nw nh px py str - % Loop for each of the pattern sources - 0 1 Multi 1 sub { % nw nh px py str source - % Move to the starting location - 3 index 3 index % nw nh px py str source px py - moveto % nw nh px py str source - % For multiple sources, set the appropriate color - Multi 1 ne { dup PC exch get PATsc } if - % Set the appropriate string for the source - 0 1 7 index 1 sub { 2 index exch 2 index put } for pop - % Loop over the number of vertical cells - 3 index % nw nh px py str nh - { % nw nh px py str - currentpoint % nw nh px py str cx cy - 2 index oldshow % nw nh px py str cx cy - YStep add moveto % nw nh px py str - } repeat % nw nh px py str - } for - 5 { pop } repeat - end -} bind def - -% PATkshow - kshow with the current pattezn -/PATkshow { % proc string - exch bind % string proc - 1 index 0 get % string proc char - % Loop over all but the last character in the string - 0 1 4 index length 2 sub { - % string proc char idx - % Find the n+1th character in the string - 3 index exch 1 add get % string proc char char+1 - exch 2 copy % strinq proc char+1 char char+1 char - % Now show the nth character - PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr) - false charpath % string proc char+1 char char+1 - /clip load PATdraw - % Move past the character (charpath modified the current point) - currentpoint newpath moveto - % Execute the user proc (should consume char and char+1) - mark 3 1 roll % string proc char+1 mark char char+1 - 4 index exec % string proc char+1 mark... - cleartomark % string proc char+1 - } for - % Now display the last character - PATsstr dup 0 4 -1 roll put % string proc (char+1) - false charpath % string proc - /clip load PATdraw - neewath - pop pop % - -} bind def -% PATmp - the makepattern equivalent -/PATmp { % patdict patmtx PATmp patinstance - exch dup length 7 add % We will add 6 new entries plus 1 FID - dict copy % Create a new dictionary - begin - % Matrix to install when painting the pattern - TilingType PATtcalc - /PatternGState PATcg def - PatternGState /cm 3 -1 roll put - % Check for multi pattern sources (Level 1 fast color patterns) - currentdict /Multi known not { /Multi 1 def } if - % Font dictionary definitions - /FontType 3 def - % Create a dummy encoding vector - /Encoding 256 array def - 3 string 0 1 255 { - Encoding exch dup 3 index cvs cvn put } for pop - /FontMatrix matrix def - /FontBBox BBox def - /BuildChar { - mark 3 1 roll % mark dict char - exch begin - Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata] - PaintType 2 eq Multi 1 ne or - { XStep 0 FontBBox aload pop setcachedevice } - { XStep 0 setcharwidth } ifelse - currentdict % mark [paintdata] dict - /PaintProc load % mark [paintdata] dict paintproc - end - gsave - false PATredef exec true PATredef - grestore - cleartomark % - - } bind def - currentdict - end % newdict - /foo exch % /foo newlict - definefont % newfont -} bind def -% PATpcalc - calculates the starting point and width/height -% of the tile fill for the shape -/PATpcalc { % - PATpcalc nw nh px py - PATDict /CurrentPattern get begin - gsave - % Set up the coordinate system to Pattern Space - % and lock down pattern - PatternGState /cm get setmatrix - BBox aload pop pop pop translate - % Determine the bounding box of the shape - pathbbox % llx lly urx ury - grestore - % Determine (nw, nh) the # of cells to paint width and height - PatHeight div ceiling % llx lly urx qh - 4 1 roll % qh llx lly urx - PatWidth div ceiling % qh llx lly qw - 4 1 roll % qw qh llx lly - PatHeight div floor % qw qh llx ph - 4 1 roll % ph qw qh llx - PatWidth div floor % ph qw qh pw - 4 1 roll % pw ph qw qh - 2 index sub cvi abs % pw ph qs qh-ph - exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph - % Determine the starting point of the pattern fill - %(px, py) - 4 2 roll % nw nh pw ph - PatHeight mul % nw nh pw py - exch % nw nh py pw - PatWidth mul exch % nw nh px py - end -} bind def - -% Save the original routines so that we can use them later on -/oldfill /fill load def -/oldeofill /eofill load def -/oldstroke /stroke load def -/oldshow /show load def -/oldashow /ashow load def -/oldwidthshow /widthshow load def -/oldawidthshow /awidthshow load def -/oldkshow /kshow load def - -% These defs are necessary so that subsequent procs don't bind in -% the originals -/fill { oldfill } bind def -/eofill { oldeofill } bind def -/stroke { oldstroke } bind def -/show { oldshow } bind def -/ashow { oldashow } bind def -/widthshow { oldwidthshow } bind def -/awidthshow { oldawidthshow } bind def -/kshow { oldkshow } bind def -/PATredef { - MyAppDict begin - { - /fill { /clip load PATdraw newpath } bind def - /eofill { /eoclip load PATdraw newpath } bind def - /stroke { PATstroke } bind def - /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def - /ashow { 0 0 null 6 3 roll PATawidthshow } - bind def - /widthshow { 0 0 3 -1 roll PATawidthshow } - bind def - /awidthshow { PATawidthshow } bind def - /kshow { PATkshow } bind def - } { - /fill { oldfill } bind def - /eofill { oldeofill } bind def - /stroke { oldstroke } bind def - /show { oldshow } bind def - /ashow { oldashow } bind def - /widthshow { oldwidthshow } bind def - /awidthshow { oldawidthshow } bind def - /kshow { oldkshow } bind def - } ifelse - end -} bind def -false PATredef -% Conditionally define setcmykcolor if not available -/setcmykcolor where { pop } { - /setcmykcolor { - 1 sub 4 1 roll - 3 { - 3 index add neg dup 0 lt { pop 0 } if 3 1 roll - } repeat - setrgbcolor - pop - } bind def -} ifelse -/PATsc { % colorarray - aload length % c1 ... cn length - dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor - } ifelse } ifelse -} bind def -/PATsg { % dict - begin - lw setlinewidth - lc setlinecap - lj setlinejoin - ml setmiterlimit - ds aload pop setdash - cc aload pop setrgbcolor - cm setmatrix - end -} bind def - -/PATDict 3 dict def -/PATsp { - true PATredef - PATDict begin - /CurrentPattern exch def - % If it's an uncolored pattern, save the color - CurrentPattern /PaintType get 2 eq { - /PColor exch def - } if - /CColor [ currentrgbcolor ] def - end -} bind def -% PATstroke - stroke with the current pattern -/PATstroke { - countdictstack - save - mark - { - currentpoint strokepath moveto - PATpcalc % proc nw nh px py - clip newpath PATfill - } stopped { - (*** PATstroke Warning: Path is too complex, stroking - with gray) = - cleartomark - restore - countdictstack exch sub dup 0 gt - { { end } repeat } { pop } ifelse - gsave 0.5 setgray oldstroke grestore - } { pop restore pop } ifelse - newpath -} bind def -/PATtcalc { % modmtx tilingtype PATtcalc tilematrix - % Note: tiling types 2 and 3 are not supported - gsave - exch concat % tilingtype - matrix currentmatrix exch % cmtx tilingtype - % Tiling type 1 and 3: constant spacing - 2 ne { - % Distort the pattern so that it occupies - % an integral number of device pixels - dup 4 get exch dup 5 get exch % tx ty cmtx - XStep 0 dtransform - round exch round exch % tx ty cmtx dx.x dx.y - XStep div exch XStep div exch % tx ty cmtx a b - 0 YStep dtransform - round exch round exch % tx ty cmtx a b dy.x dy.y - YStep div exch YStep div exch % tx ty cmtx a b c d - 7 -3 roll astore % { a b c d tx ty } - } if - grestore -} bind def -/PATusp { - false PATredef - PATDict begin - CColor PATsc - end -} bind def - -% right30 -11 dict begin -/PaintType 1 def -/PatternType 1 def -/TilingType 1 def -/BBox [0 0 1 1] def -/XStep 1 def -/YStep 1 def -/PatWidth 1 def -/PatHeight 1 def -/Multi 2 def -/PaintData [ - { clippath } bind - { 32 16 true [ 32 0 0 -16 0 16 ] - {<00030003000c000c0030003000c000c0030003000c000c00 - 30003000c000c00000030003000c000c0030003000c000c0 - 030003000c000c0030003000c000c000>} - imagemask } bind -] def -/PaintProc { - pop - exec fill -} def -currentdict -end -/P2 exch def - -% crosshatch45 -11 dict begin -/PaintType 1 def -/PatternType 1 def -/TilingType 1 def -/BBox [0 0 1 1] def -/XStep 1 def -/YStep 1 def -/PatWidth 1 def -/PatHeight 1 def -/Multi 2 def -/PaintData [ - { clippath } bind - { 20 20 true [ 20 0 0 -20 0 20 ] - {<8020004050102088201104400a02800401000a02 - 8011044020882040501080200040501020882011 - 04400a02800401000a0280110440208820405010>} - imagemask } bind -] def -/PaintProc { - pop - exec fill -} def -currentdict -end -/P6 exch def - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -/pageheader { -save -newpath 0 179 moveto 0 0 lineto 363 0 lineto 363 179 lineto closepath clip newpath --194.8 350.2 translate -1 -1 scale -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06299 0.06299 sc -} bind def -/pagefooter { -$F2psEnd -restore -} bind def -%%EndProlog -pageheader -% -% Fig objects follow -% -% -% here starts figure with depth 50 -% Arc -7.500 slw -0 slc -gs clippath -3662 4014 m 3567 4132 l 3613 4170 l 3708 4052 l 3708 4052 l 3610 4127 l 3662 4014 l cp -eoclip -n 5895.0 5917.5 2902.8 -37.7581 -142.2419 arcn -gs col0 s gr - gr - -% arrowhead -0 slj -n 3662 4014 m 3610 4127 l 3708 4052 l 3662 4014 l cp gs 0.00 setgray ef gr col0 s -% Polyline -n 3105 4140 m 6660 4140 l 6660 5085 l 3105 5085 l - cp gs col0 s gr -% Polyline -n 6660 4140 m 8730 4140 l 8730 5085 l 6660 5085 l - cp gs col7 0.50 shd ef gr gs col0 s gr -% Polyline -n 3510 4140 m 3780 4140 l 3780 5085 l 3510 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P2 [16 0 0 -8 234.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 4365 4140 m 4635 4140 l 4635 5085 l 4365 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P2 [16 0 0 -8 291.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 4905 4140 m 5265 4140 l 5265 5085 l 4905 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P2 [16 0 0 -8 327.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 7965 4140 m 8370 4140 l 8370 5085 l 7965 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P6 [16 0 0 -16 531.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -/Times-Roman ff 180.00 scf sf -3510 5490 m -gs 1 -1 sc (gawk Main Program Address Space) col0 sh gr -/Times-Roman ff 180.00 scf sf -7290 5490 m -gs 1 -1 sc (Extension) col0 sh gr -/Courier-Bold ff 180.00 scf sf -3420 2880 m -gs 1 -1 sc (register_ext_func\({ "chdir", do_chdir, 1 }\);) col0 sh gr -% here ends figure; -pagefooter -showpage -%%Trailer -end -%EOF diff --git a/doc/api-figure2.fig b/doc/api-figure2.fig deleted file mode 100644 index 2ae60854..00000000 --- a/doc/api-figure2.fig +++ /dev/null @@ -1,26 +0,0 @@ -#FIG 3.2 Produced by xfig version 3.2.5b -Landscape -Center -Metric -A4 -100.00 -Single --2 -1200 2 -5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 0 5895.000 5917.500 8190 4140 5940 3015 3600 4140 - 1 1 1.00 60.00 120.00 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 3105 4140 6660 4140 6660 5085 3105 5085 3105 4140 -2 2 0 1 0 7 50 -1 10 0.000 0 0 -1 0 0 5 - 6660 4140 8730 4140 8730 5085 6660 5085 6660 4140 -2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 - 3510 4140 3780 4140 3780 5085 3510 5085 3510 4140 -2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 - 4365 4140 4635 4140 4635 5085 4365 5085 4365 4140 -2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 - 4905 4140 5265 4140 5265 5085 4905 5085 4905 4140 -2 2 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 5 - 7965 4140 8370 4140 8370 5085 7965 5085 7965 4140 -4 0 0 50 -1 0 12 0.0000 4 180 2850 3510 5490 gawk Main Program Address Space\001 -4 0 0 50 -1 0 12 0.0000 4 135 825 7290 5490 Extension\001 -4 0 0 50 -1 14 12 0.0000 4 165 5280 3420 2880 register_ext_func({ "chdir", do_chdir, 1 });\001 diff --git a/doc/api-figure2.pdf b/doc/api-figure2.pdf deleted file mode 100644 index 20462856..00000000 Binary files a/doc/api-figure2.pdf and /dev/null differ diff --git a/doc/api-figure2.png b/doc/api-figure2.png deleted file mode 100644 index a6e28c98..00000000 Binary files a/doc/api-figure2.png and /dev/null differ diff --git a/doc/api-figure2.txt b/doc/api-figure2.txt deleted file mode 100644 index 5ed8e2a8..00000000 --- a/doc/api-figure2.txt +++ /dev/null @@ -1,12 +0,0 @@ - register_ext_func({ "chdir", do_chdir, 1 }); - - +--------------------------------------------+ - | | - V | -+-------+-+---+-+---+-+------------------+--------------+-+---+ -| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| -| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| -| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| -+-------+-+---+-+---+-+------------------+--------------+-+---+ - - gawk Main Program Address Space Extension diff --git a/doc/api-figure3.eps b/doc/api-figure3.eps deleted file mode 100644 index d713575f..00000000 --- a/doc/api-figure3.eps +++ /dev/null @@ -1,526 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Title: api-figure3.fig -%%Creator: fig2dev Version 3.2 Patchlevel 5d -%%CreationDate: Wed Oct 31 20:16:08 2012 -%%BoundingBox: 0 0 356 175 -%Magnification: 1.0000 -%%EndComments -%%BeginProlog -/MyAppDict 100 dict dup begin def -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end - -% This junk string is used by the show operators -/PATsstr 1 string def -/PATawidthshow { % cx cy cchar rx ry string - % Loop over each character in the string - { % cx cy cchar rx ry char - % Show the character - dup % cx cy cchar rx ry char char - PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char) - false charpath % cx cy cchar rx ry char - /clip load PATdraw - % Move past the character (charpath modified the - % current point) - currentpoint % cx cy cchar rx ry char x y - newpath - moveto % cx cy cchar rx ry char - % Reposition by cx,cy if the character in the string is cchar - 3 index eq { % cx cy cchar rx ry - 4 index 4 index rmoveto - } if - % Reposition all characters by rx ry - 2 copy rmoveto % cx cy cchar rx ry - } forall - pop pop pop pop pop % - - currentpoint - newpath - moveto -} bind def -/PATcg { - 7 dict dup begin - /lw currentlinewidth def - /lc currentlinecap def - /lj currentlinejoin def - /ml currentmiterlimit def - /ds [ currentdash ] def - /cc [ currentrgbcolor ] def - /cm matrix currentmatrix def - end -} bind def -% PATdraw - calculates the boundaries of the object and -% fills it with the current pattern -/PATdraw { % proc - save exch - PATpcalc % proc nw nh px py - 5 -1 roll exec % nw nh px py - newpath - PATfill % - - restore -} bind def -% PATfill - performs the tiling for the shape -/PATfill { % nw nh px py PATfill - - PATDict /CurrentPattern get dup begin - setfont - % Set the coordinate system to Pattern Space - PatternGState PATsg - % Set the color for uncolored pattezns - PaintType 2 eq { PATDict /PColor get PATsc } if - % Create the string for showing - 3 index string % nw nh px py str - % Loop for each of the pattern sources - 0 1 Multi 1 sub { % nw nh px py str source - % Move to the starting location - 3 index 3 index % nw nh px py str source px py - moveto % nw nh px py str source - % For multiple sources, set the appropriate color - Multi 1 ne { dup PC exch get PATsc } if - % Set the appropriate string for the source - 0 1 7 index 1 sub { 2 index exch 2 index put } for pop - % Loop over the number of vertical cells - 3 index % nw nh px py str nh - { % nw nh px py str - currentpoint % nw nh px py str cx cy - 2 index oldshow % nw nh px py str cx cy - YStep add moveto % nw nh px py str - } repeat % nw nh px py str - } for - 5 { pop } repeat - end -} bind def - -% PATkshow - kshow with the current pattezn -/PATkshow { % proc string - exch bind % string proc - 1 index 0 get % string proc char - % Loop over all but the last character in the string - 0 1 4 index length 2 sub { - % string proc char idx - % Find the n+1th character in the string - 3 index exch 1 add get % string proc char char+1 - exch 2 copy % strinq proc char+1 char char+1 char - % Now show the nth character - PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr) - false charpath % string proc char+1 char char+1 - /clip load PATdraw - % Move past the character (charpath modified the current point) - currentpoint newpath moveto - % Execute the user proc (should consume char and char+1) - mark 3 1 roll % string proc char+1 mark char char+1 - 4 index exec % string proc char+1 mark... - cleartomark % string proc char+1 - } for - % Now display the last character - PATsstr dup 0 4 -1 roll put % string proc (char+1) - false charpath % string proc - /clip load PATdraw - neewath - pop pop % - -} bind def -% PATmp - the makepattern equivalent -/PATmp { % patdict patmtx PATmp patinstance - exch dup length 7 add % We will add 6 new entries plus 1 FID - dict copy % Create a new dictionary - begin - % Matrix to install when painting the pattern - TilingType PATtcalc - /PatternGState PATcg def - PatternGState /cm 3 -1 roll put - % Check for multi pattern sources (Level 1 fast color patterns) - currentdict /Multi known not { /Multi 1 def } if - % Font dictionary definitions - /FontType 3 def - % Create a dummy encoding vector - /Encoding 256 array def - 3 string 0 1 255 { - Encoding exch dup 3 index cvs cvn put } for pop - /FontMatrix matrix def - /FontBBox BBox def - /BuildChar { - mark 3 1 roll % mark dict char - exch begin - Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata] - PaintType 2 eq Multi 1 ne or - { XStep 0 FontBBox aload pop setcachedevice } - { XStep 0 setcharwidth } ifelse - currentdict % mark [paintdata] dict - /PaintProc load % mark [paintdata] dict paintproc - end - gsave - false PATredef exec true PATredef - grestore - cleartomark % - - } bind def - currentdict - end % newdict - /foo exch % /foo newlict - definefont % newfont -} bind def -% PATpcalc - calculates the starting point and width/height -% of the tile fill for the shape -/PATpcalc { % - PATpcalc nw nh px py - PATDict /CurrentPattern get begin - gsave - % Set up the coordinate system to Pattern Space - % and lock down pattern - PatternGState /cm get setmatrix - BBox aload pop pop pop translate - % Determine the bounding box of the shape - pathbbox % llx lly urx ury - grestore - % Determine (nw, nh) the # of cells to paint width and height - PatHeight div ceiling % llx lly urx qh - 4 1 roll % qh llx lly urx - PatWidth div ceiling % qh llx lly qw - 4 1 roll % qw qh llx lly - PatHeight div floor % qw qh llx ph - 4 1 roll % ph qw qh llx - PatWidth div floor % ph qw qh pw - 4 1 roll % pw ph qw qh - 2 index sub cvi abs % pw ph qs qh-ph - exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph - % Determine the starting point of the pattern fill - %(px, py) - 4 2 roll % nw nh pw ph - PatHeight mul % nw nh pw py - exch % nw nh py pw - PatWidth mul exch % nw nh px py - end -} bind def - -% Save the original routines so that we can use them later on -/oldfill /fill load def -/oldeofill /eofill load def -/oldstroke /stroke load def -/oldshow /show load def -/oldashow /ashow load def -/oldwidthshow /widthshow load def -/oldawidthshow /awidthshow load def -/oldkshow /kshow load def - -% These defs are necessary so that subsequent procs don't bind in -% the originals -/fill { oldfill } bind def -/eofill { oldeofill } bind def -/stroke { oldstroke } bind def -/show { oldshow } bind def -/ashow { oldashow } bind def -/widthshow { oldwidthshow } bind def -/awidthshow { oldawidthshow } bind def -/kshow { oldkshow } bind def -/PATredef { - MyAppDict begin - { - /fill { /clip load PATdraw newpath } bind def - /eofill { /eoclip load PATdraw newpath } bind def - /stroke { PATstroke } bind def - /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def - /ashow { 0 0 null 6 3 roll PATawidthshow } - bind def - /widthshow { 0 0 3 -1 roll PATawidthshow } - bind def - /awidthshow { PATawidthshow } bind def - /kshow { PATkshow } bind def - } { - /fill { oldfill } bind def - /eofill { oldeofill } bind def - /stroke { oldstroke } bind def - /show { oldshow } bind def - /ashow { oldashow } bind def - /widthshow { oldwidthshow } bind def - /awidthshow { oldawidthshow } bind def - /kshow { oldkshow } bind def - } ifelse - end -} bind def -false PATredef -% Conditionally define setcmykcolor if not available -/setcmykcolor where { pop } { - /setcmykcolor { - 1 sub 4 1 roll - 3 { - 3 index add neg dup 0 lt { pop 0 } if 3 1 roll - } repeat - setrgbcolor - pop - } bind def -} ifelse -/PATsc { % colorarray - aload length % c1 ... cn length - dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor - } ifelse } ifelse -} bind def -/PATsg { % dict - begin - lw setlinewidth - lc setlinecap - lj setlinejoin - ml setmiterlimit - ds aload pop setdash - cc aload pop setrgbcolor - cm setmatrix - end -} bind def - -/PATDict 3 dict def -/PATsp { - true PATredef - PATDict begin - /CurrentPattern exch def - % If it's an uncolored pattern, save the color - CurrentPattern /PaintType get 2 eq { - /PColor exch def - } if - /CColor [ currentrgbcolor ] def - end -} bind def -% PATstroke - stroke with the current pattern -/PATstroke { - countdictstack - save - mark - { - currentpoint strokepath moveto - PATpcalc % proc nw nh px py - clip newpath PATfill - } stopped { - (*** PATstroke Warning: Path is too complex, stroking - with gray) = - cleartomark - restore - countdictstack exch sub dup 0 gt - { { end } repeat } { pop } ifelse - gsave 0.5 setgray oldstroke grestore - } { pop restore pop } ifelse - newpath -} bind def -/PATtcalc { % modmtx tilingtype PATtcalc tilematrix - % Note: tiling types 2 and 3 are not supported - gsave - exch concat % tilingtype - matrix currentmatrix exch % cmtx tilingtype - % Tiling type 1 and 3: constant spacing - 2 ne { - % Distort the pattern so that it occupies - % an integral number of device pixels - dup 4 get exch dup 5 get exch % tx ty cmtx - XStep 0 dtransform - round exch round exch % tx ty cmtx dx.x dx.y - XStep div exch XStep div exch % tx ty cmtx a b - 0 YStep dtransform - round exch round exch % tx ty cmtx a b dy.x dy.y - YStep div exch YStep div exch % tx ty cmtx a b c d - 7 -3 roll astore % { a b c d tx ty } - } if - grestore -} bind def -/PATusp { - false PATredef - PATDict begin - CColor PATsc - end -} bind def - -% right30 -11 dict begin -/PaintType 1 def -/PatternType 1 def -/TilingType 1 def -/BBox [0 0 1 1] def -/XStep 1 def -/YStep 1 def -/PatWidth 1 def -/PatHeight 1 def -/Multi 2 def -/PaintData [ - { clippath } bind - { 32 16 true [ 32 0 0 -16 0 16 ] - {<00030003000c000c0030003000c000c0030003000c000c00 - 30003000c000c00000030003000c000c0030003000c000c0 - 030003000c000c0030003000c000c000>} - imagemask } bind -] def -/PaintProc { - pop - exec fill -} def -currentdict -end -/P2 exch def - -% crosshatch45 -11 dict begin -/PaintType 1 def -/PatternType 1 def -/TilingType 1 def -/BBox [0 0 1 1] def -/XStep 1 def -/YStep 1 def -/PatWidth 1 def -/PatHeight 1 def -/Multi 2 def -/PaintData [ - { clippath } bind - { 20 20 true [ 20 0 0 -20 0 20 ] - {<8020004050102088201104400a02800401000a02 - 8011044020882040501080200040501020882011 - 04400a02800401000a0280110440208820405010>} - imagemask } bind -] def -/PaintProc { - pop - exec fill -} def -currentdict -end -/P6 exch def - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -/pageheader { -save -newpath 0 175 moveto 0 0 lineto 356 0 lineto 356 175 lineto closepath clip newpath --194.8 350.2 translate -1 -1 scale -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06299 0.06299 sc -} bind def -/pagefooter { -$F2psEnd -restore -} bind def -%%EndProlog -pageheader -% -% Fig objects follow -% -% -% here starts figure with depth 50 -% Arc -7.500 slw -0 slc -gs clippath -8019 4079 m 8138 4172 l 8175 4125 l 8056 4032 l 8056 4032 l 8132 4130 l 8019 4079 l cp -eoclip -n 6120.0 6627.7 3207.7 -129.1463 -50.8537 arc -gs col0 s gr - gr - -% arrowhead -0 slj -n 8019 4079 m 8132 4130 l 8056 4032 l 8019 4079 l cp gs 0.00 setgray ef gr col0 s -% Polyline -n 3105 4140 m 6660 4140 l 6660 5085 l 3105 5085 l - cp gs col0 s gr -% Polyline -n 6660 4140 m 8730 4140 l 8730 5085 l 6660 5085 l - cp gs col7 0.50 shd ef gr gs col0 s gr -% Polyline -n 3510 4140 m 3780 4140 l 3780 5085 l 3510 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P2 [16 0 0 -8 234.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 4365 4140 m 4635 4140 l 4635 5085 l 4365 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P2 [16 0 0 -8 291.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 4905 4140 m 5265 4140 l 5265 5085 l 4905 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P2 [16 0 0 -8 327.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 7965 4140 m 8370 4140 l 8370 5085 l 7965 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P6 [16 0 0 -16 531.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -/Times-Roman ff 180.00 scf sf -3510 5490 m -gs 1 -1 sc (gawk Main Program Address Space) col0 sh gr -/Times-Roman ff 180.00 scf sf -7290 5490 m -gs 1 -1 sc (Extension) col0 sh gr -/Courier-Bold ff 180.00 scf sf -3240 3150 m -gs 1 -1 sc ( chdir\("/path"\)) col0 sh gr -/Courier-Bold ff 180.00 scf sf -3330 3375 m -gs 1 -1 sc (}) col0 sh gr -/Courier-Bold ff 180.00 scf sf -3375 2925 m -gs 1 -1 sc (BEGIN {) col0 sh gr -/Courier-Bold ff 180.00 scf sf -6660 3150 m -gs 1 -1 sc (\(*fnptr\)\(1\);) col0 sh gr -% here ends figure; -pagefooter -showpage -%%Trailer -end -%EOF diff --git a/doc/api-figure3.fig b/doc/api-figure3.fig deleted file mode 100644 index 5c7fdd97..00000000 --- a/doc/api-figure3.fig +++ /dev/null @@ -1,29 +0,0 @@ -#FIG 3.2 Produced by xfig version 3.2.5b -Landscape -Center -Metric -A4 -100.00 -Single --2 -1200 2 -5 1 0 1 0 7 50 -1 -1 0.000 0 0 1 0 6120.000 6627.656 4095 4140 6120 3420 8145 4140 - 1 1 1.00 60.00 120.00 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 3105 4140 6660 4140 6660 5085 3105 5085 3105 4140 -2 2 0 1 0 7 50 -1 10 0.000 0 0 -1 0 0 5 - 6660 4140 8730 4140 8730 5085 6660 5085 6660 4140 -2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 - 3510 4140 3780 4140 3780 5085 3510 5085 3510 4140 -2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 - 4365 4140 4635 4140 4635 5085 4365 5085 4365 4140 -2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 - 4905 4140 5265 4140 5265 5085 4905 5085 4905 4140 -2 2 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 5 - 7965 4140 8370 4140 8370 5085 7965 5085 7965 4140 -4 0 0 50 -1 0 12 0.0000 4 180 2850 3510 5490 gawk Main Program Address Space\001 -4 0 0 50 -1 0 12 0.0000 4 135 825 7290 5490 Extension\001 -4 0 0 50 -1 14 12 0.0000 4 180 2160 3240 3150 chdir("/path")\001 -4 0 0 50 -1 14 12 0.0000 4 150 120 3330 3375 }\001 -4 0 0 50 -1 14 12 0.0000 4 150 840 3375 2925 BEGIN {\001 -4 0 0 50 -1 14 12 0.0000 4 165 1440 6660 3150 (*fnptr)(1);\001 diff --git a/doc/api-figure3.pdf b/doc/api-figure3.pdf deleted file mode 100644 index 517b2ecc..00000000 Binary files a/doc/api-figure3.pdf and /dev/null differ diff --git a/doc/api-figure3.png b/doc/api-figure3.png deleted file mode 100644 index f7db0794..00000000 Binary files a/doc/api-figure3.png and /dev/null differ diff --git a/doc/api-figure3.txt b/doc/api-figure3.txt deleted file mode 100644 index a601ce94..00000000 --- a/doc/api-figure3.txt +++ /dev/null @@ -1,13 +0,0 @@ - BEGIN { - chdir("/path") (*fnptr)(1); - } - +--------------------------------------------+ - | | - | V -+-------+-+---+-+---+-+------------------+--------------+-+---+ -| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| -| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| -| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| -+-------+-+---+-+---+-+------------------+--------------+-+---+ - - gawk Main Program Address Space Extension diff --git a/doc/array-elements.eps b/doc/array-elements.eps deleted file mode 100644 index 041c0b39..00000000 --- a/doc/array-elements.eps +++ /dev/null @@ -1,158 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Title: array-elements.fig -%%Creator: fig2dev Version 3.2 Patchlevel 5d -%%CreationDate: Sun May 4 22:46:26 2014 -%%BoundingBox: 0 0 379 76 -%Magnification: 1.0000 -%%EndComments -%%BeginProlog -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -/pageheader { -save -newpath 0 76 moveto 0 0 lineto 379 0 lineto 379 76 lineto closepath clip newpath --203.3 199.4 translate -1 -1 scale -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06299 0.06299 sc -} bind def -/pagefooter { -$F2psEnd -restore -} bind def -%%EndProlog -pageheader -% -% Fig objects follow -% -% -% here starts figure with depth 50 -% Polyline -0 slj -0 slc -7.500 slw -n 4455 1980 m 4455 2700 l 4455 2655 l - 4455 2700 l gs col0 s gr -% Polyline -n 6075 1980 m - 6075 2700 l gs col0 s gr -% Polyline -n 7425 1980 m - 7425 2700 l gs col0 s gr -/Courier-Bold ff 180.00 scf sf -3735 2340 m -gs 1 -1 sc (8) col0 sh gr -/Courier-Bold ff 180.00 scf sf -5175 2340 m -gs 1 -1 sc ("foo") col0 sh gr -/Courier-Bold ff 180.00 scf sf -6795 2340 m -gs 1 -1 sc ("") col0 sh gr -/Courier-Bold ff 180.00 scf sf -7875 2340 m -gs 1 -1 sc (30) col0 sh gr -/Times-Roman ff 180.00 scf sf -3735 3150 m -gs 1 -1 sc (0) col0 sh gr -/Times-Roman ff 180.00 scf sf -5175 3150 m -gs 1 -1 sc (1) col0 sh gr -/Times-Roman ff 180.00 scf sf -6795 3150 m -gs 1 -1 sc (2) col0 sh gr -/Times-Roman ff 180.00 scf sf -7875 3150 m -gs 1 -1 sc (3) col0 sh gr -/Times-Roman ff 180.00 scf sf -8730 2340 m -gs 1 -1 sc (Value) col0 sh gr -/Times-Roman ff 180.00 scf sf -8730 3150 m -gs 1 -1 sc (Index) col0 sh gr -% here ends figure; -% -% here starts figure with depth 40 -% Polyline -0 slj -0 slc -7.500 slw -n 3240 1980 m 8415 1980 l 8415 2700 l 3240 2700 l - cp gs col0 s gr -% here ends figure; -pagefooter -showpage -%%Trailer -%EOF diff --git a/doc/array-elements.fig b/doc/array-elements.fig deleted file mode 100644 index 63b5ffbf..00000000 --- a/doc/array-elements.fig +++ /dev/null @@ -1,27 +0,0 @@ -#FIG 3.2 Produced by xfig version 3.2.5b -Landscape -Center -Metric -A4 -100.00 -Single --2 -1200 2 -2 2 0 1 0 7 40 -1 -1 0.000 0 0 -1 0 0 5 - 3240 1980 8415 1980 8415 2700 3240 2700 3240 1980 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 - 4455 1980 4455 2700 4455 2655 4455 2700 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 6075 1980 6075 2700 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 7425 1980 7425 2700 -4 0 0 50 -1 14 12 0.0000 4 120 120 3735 2340 8\001 -4 0 0 50 -1 14 12 0.0000 4 120 600 5175 2340 "foo"\001 -4 0 0 50 -1 14 12 0.0000 4 60 240 6795 2340 ""\001 -4 0 0 50 -1 14 12 0.0000 4 120 240 7875 2340 30\001 -4 0 0 50 -1 0 12 0.0000 4 135 105 3735 3150 0\001 -4 0 0 50 -1 0 12 0.0000 4 135 105 5175 3150 1\001 -4 0 0 50 -1 0 12 0.0000 4 135 105 6795 3150 2\001 -4 0 0 50 -1 0 12 0.0000 4 135 105 7875 3150 3\001 -4 0 0 50 -1 0 12 0.0000 4 135 480 8730 2340 Value\001 -4 0 0 50 -1 0 12 0.0000 4 135 465 8730 3150 Index\001 diff --git a/doc/array-elements.pdf b/doc/array-elements.pdf deleted file mode 100644 index 328cbd1a..00000000 Binary files a/doc/array-elements.pdf and /dev/null differ diff --git a/doc/array-elements.png b/doc/array-elements.png deleted file mode 100644 index b57d66b7..00000000 Binary files a/doc/array-elements.png and /dev/null differ diff --git a/doc/array-elements.txt b/doc/array-elements.txt deleted file mode 100644 index 424c1708..00000000 --- a/doc/array-elements.txt +++ /dev/null @@ -1,4 +0,0 @@ -+---------+---------+--------+---------+ -| 8 | "foo" | "" | 30 | Value -+---------+---------+--------+---------+ - 0 1 2 3 Index diff --git a/doc/gawk.info b/doc/gawk.info index c7e72bb8..9a8c59e1 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -11932,7 +11932,7 @@ figure-array-elements, conceptually, if the element values are eight, ‘"foo"’, ‘""’, and 30. -[image src="array-elements.png" alt="A Contiguous Array" text="+---------+---------+--------+---------+ +[image src="gawk_array-elements.png" alt="A Contiguous Array" text="+---------+---------+--------+---------+ | 8 | \"foo\" | \"\" | 30 | Value +---------+---------+--------+---------+ 0 1 2 3 Index"] @@ -25742,7 +25742,7 @@ fields are function pointers. This is shown in *note Figure 17.1: figure-load-extension. -[image src="api-figure1.png" alt="Loading the extension" text=" API +[image src="gawk_api-figure1.png" alt="Loading the extension" text=" API Struct +---+ | | @@ -25776,7 +25776,7 @@ symbols. One of these function pointers is to a function for figure-register-new-function. -[image src="api-figure2.png" alt="Registering a new Function" text=" register_ext_func({ \"chdir\", do_chdir, 1 }); +[image src="gawk_api-figure2.png" alt="Registering a new Function" text=" register_ext_func({ \"chdir\", do_chdir, 1 }); +--------------------------------------------+ | | @@ -25799,7 +25799,7 @@ calling convention. This is shown in *note Figure 17.3: figure-call-new-function. -[image src="api-figure3.png" alt="Calling the new function" text=" BEGIN { +[image src="gawk_api-figure3.png" alt="Calling the new function" text=" BEGIN { chdir(\"/path\") (*fnptr)(1); } +--------------------------------------------+ @@ -33521,7 +33521,7 @@ At the most basic level, the job of a program is to process some input data and produce results. See *note Figure D.1: figure-general-flow. -[image src="general-program.png" alt="General program flow" text=" _______ +[image src="gawk_general-program.png" alt="General program flow" text=" _______ +------+ / \\ +---------+ | Data | -----> < Program > -----> | Results | +------+ \\_______/ +---------+"] @@ -33537,7 +33537,7 @@ uses the instructions in your program to process the data. basic set of steps, as shown in *note Figure D.2: figure-process-flow.: -[image src="process-flow.png" alt="Basic Program Stages" text=" ______ +[image src="gawk_process-flow.png" alt="Basic Program Stages" text=" ______ +----------------+ / More \\ No +----------+ | Initialization | -------> < Data > -------> | Clean Up | +----------------+ ^ \\ ? / +----------+ @@ -39543,393 +39543,393 @@ Node: Arrays525875 Node: Array Basics527252 Node: Array Intro528102 Ref: figure-array-elements530118 -Ref: Array Intro-Footnote-1532982 -Node: Reference to Elements533114 -Node: Assigning Elements535636 -Node: Array Example536131 -Node: Scanning an Array538100 -Node: Controlling Scanning541197 -Ref: Controlling Scanning-Footnote-1547860 -Node: Numeric Array Subscripts548184 -Node: Uninitialized Subscripts550458 -Node: Delete552137 -Ref: Delete-Footnote-1554951 -Node: Multidimensional555008 -Node: Multiscanning558213 -Node: Arrays of Arrays559885 -Node: Arrays Summary564785 -Node: Functions566974 -Node: Built-in568034 -Node: Calling Built-in569223 -Node: Boolean Functions571270 -Node: Numeric Functions571840 -Ref: Numeric Functions-Footnote-1576033 -Ref: Numeric Functions-Footnote-2576717 -Ref: Numeric Functions-Footnote-3576769 -Node: String Functions577045 -Ref: String Functions-Footnote-1602875 -Ref: String Functions-Footnote-2603009 -Ref: String Functions-Footnote-3603269 -Node: Gory Details603356 -Ref: table-sub-escapes605263 -Ref: table-sub-proposed606909 -Ref: table-posix-sub608419 -Ref: table-gensub-escapes610107 -Ref: Gory Details-Footnote-1611041 -Node: I/O Functions611195 -Ref: table-system-return-values617882 -Ref: I/O Functions-Footnote-1620053 -Ref: I/O Functions-Footnote-2620201 -Node: Time Functions620321 -Ref: Time Functions-Footnote-1631477 -Ref: Time Functions-Footnote-2631553 -Ref: Time Functions-Footnote-3631715 -Ref: Time Functions-Footnote-4631826 -Ref: Time Functions-Footnote-5631944 -Ref: Time Functions-Footnote-6632179 -Node: Bitwise Functions632461 -Ref: table-bitwise-ops633063 -Ref: Bitwise Functions-Footnote-1639317 -Ref: Bitwise Functions-Footnote-2639496 -Node: Type Functions639693 -Node: I18N Functions643286 -Node: User-defined645029 -Node: Definition Syntax645849 -Ref: Definition Syntax-Footnote-1651677 -Node: Function Example651754 -Ref: Function Example-Footnote-1654733 -Node: Function Calling654755 -Node: Calling A Function655349 -Node: Variable Scope656319 -Node: Pass By Value/Reference659373 -Node: Function Caveats662105 -Ref: Function Caveats-Footnote-1664200 -Node: Return Statement664324 -Node: Dynamic Typing667379 -Node: Indirect Calls668335 -Node: Functions Summary679494 -Node: Library Functions682271 -Ref: Library Functions-Footnote-1685819 -Ref: Library Functions-Footnote-2685962 -Node: Library Names686137 -Ref: Library Names-Footnote-1689931 -Ref: Library Names-Footnote-2690158 -Node: General Functions690254 -Node: Strtonum Function691448 -Node: Assert Function694530 -Node: Round Function697982 -Node: Cliff Random Function699560 -Node: Ordinal Functions700593 -Ref: Ordinal Functions-Footnote-1703702 -Ref: Ordinal Functions-Footnote-2703954 -Node: Join Function704168 -Ref: Join Function-Footnote-1705971 -Node: Getlocaltime Function706175 -Node: Readfile Function709949 -Node: Shell Quoting711978 -Node: Isnumeric Function713434 -Node: Data File Management714846 -Node: Filetrans Function715478 -Node: Rewind Function719772 -Node: File Checking721751 -Ref: File Checking-Footnote-1723123 -Node: Empty Files723330 -Node: Ignoring Assigns725397 -Node: Getopt Function726971 -Ref: Getopt Function-Footnote-1742805 -Node: Passwd Functions743017 -Ref: Passwd Functions-Footnote-1752199 -Node: Group Functions752287 -Ref: Group Functions-Footnote-1760425 -Node: Walking Arrays760638 -Node: Library Functions Summary763686 -Node: Library Exercises765110 -Node: Sample Programs765597 -Node: Running Examples766379 -Node: Clones767131 -Node: Cut Program768403 -Node: Egrep Program778844 -Node: Id Program788161 -Node: Split Program798275 -Ref: Split Program-Footnote-1808510 -Node: Tee Program808697 -Node: Uniq Program811606 -Node: Wc Program819471 -Node: Bytes vs. Characters819866 -Node: Using extensions821468 -Node: wc program822248 -Node: Miscellaneous Programs827254 -Node: Dupword Program828483 -Node: Alarm Program830546 -Node: Translate Program835459 -Ref: Translate Program-Footnote-1840200 -Node: Labels Program840478 -Ref: Labels Program-Footnote-1843919 -Node: Word Sorting844011 -Node: History Sorting848205 -Node: Extract Program850480 -Node: Simple Sed858749 -Node: Igawk Program861965 -Ref: Igawk Program-Footnote-1877212 -Ref: Igawk Program-Footnote-2877418 -Ref: Igawk Program-Footnote-3877548 -Node: Anagram Program877675 -Node: Signature Program880771 -Node: Programs Summary882023 -Node: Programs Exercises883281 -Ref: Programs Exercises-Footnote-1887597 -Node: Advanced Features887683 -Node: Nondecimal Data890177 -Node: Boolean Typed Values891807 -Node: Array Sorting893782 -Node: Controlling Array Traversal894511 -Ref: Controlling Array Traversal-Footnote-1903018 -Node: Array Sorting Functions903140 -Ref: Array Sorting Functions-Footnote-1909259 -Node: Two-way I/O909467 -Ref: Two-way I/O-Footnote-1917462 -Ref: Two-way I/O-Footnote-2917653 -Node: TCP/IP Networking917735 -Node: Profiling920915 -Node: Persistent Memory930625 -Ref: Persistent Memory-Footnote-1939583 -Node: Extension Philosophy939714 -Node: Advanced Features Summary941249 -Node: Internationalization943519 -Node: I18N and L10N945225 -Node: Explaining gettext945920 -Ref: Explaining gettext-Footnote-1952073 -Ref: Explaining gettext-Footnote-2952268 -Node: Programmer i18n952433 -Ref: Programmer i18n-Footnote-1957546 -Node: Translator i18n957595 -Node: String Extraction958431 -Ref: String Extraction-Footnote-1959609 -Node: Printf Ordering959707 -Ref: Printf Ordering-Footnote-1962569 -Node: I18N Portability962637 -Ref: I18N Portability-Footnote-1965211 -Node: I18N Example965282 -Ref: I18N Example-Footnote-1968682 -Ref: I18N Example-Footnote-2968758 -Node: Gawk I18N968875 -Node: I18N Summary969531 -Node: Debugger970932 -Node: Debugging971956 -Node: Debugging Concepts972405 -Node: Debugging Terms974231 -Node: Awk Debugging976844 -Ref: Awk Debugging-Footnote-1977821 -Node: Sample Debugging Session977961 -Node: Debugger Invocation978513 -Node: Finding The Bug980142 -Node: List of Debugger Commands986828 -Node: Breakpoint Control988205 -Node: Debugger Execution Control992037 -Node: Viewing And Changing Data995517 -Node: Execution Stack999255 -Node: Debugger Info1000936 -Node: Miscellaneous Debugger Commands1005235 -Node: Readline Support1010488 -Node: Limitations1011434 -Node: Debugging Summary1014078 -Node: Namespaces1015381 -Node: Global Namespace1016508 -Node: Qualified Names1017953 -Node: Default Namespace1018988 -Node: Changing The Namespace1019763 -Node: Naming Rules1021457 -Node: Internal Name Management1023372 -Node: Namespace Example1024442 -Node: Namespace And Features1027025 -Node: Namespace Summary1028482 -Node: Arbitrary Precision Arithmetic1029995 -Node: Computer Arithmetic1031514 -Ref: table-numeric-ranges1035331 -Ref: table-floating-point-ranges1035829 -Ref: Computer Arithmetic-Footnote-11036488 -Node: Math Definitions1036547 -Ref: table-ieee-formats1039592 -Node: MPFR features1040166 -Node: MPFR On Parole1040619 -Ref: MPFR On Parole-Footnote-11041463 -Node: MPFR Intro1041622 -Node: FP Math Caution1043312 -Ref: FP Math Caution-Footnote-11044386 -Node: Inexactness of computations1044763 -Node: Inexact representation1045794 -Node: Comparing FP Values1047177 -Node: Errors accumulate1048435 -Node: Strange values1049902 -Ref: Strange values-Footnote-11052568 -Node: Getting Accuracy1052673 -Node: Try To Round1055410 -Node: Setting precision1056317 -Ref: table-predefined-precision-strings1057022 -Node: Setting the rounding mode1058907 -Ref: table-gawk-rounding-modes1059289 -Ref: Setting the rounding mode-Footnote-11063347 -Node: Arbitrary Precision Integers1063530 -Ref: Arbitrary Precision Integers-Footnote-11066742 -Node: Checking for MPFR1066898 -Node: POSIX Floating Point Problems1068388 -Ref: POSIX Floating Point Problems-Footnote-11073252 -Node: Floating point summary1073290 -Node: Dynamic Extensions1075554 -Node: Extension Intro1077153 -Node: Plugin License1078461 -Node: Extension Mechanism Outline1079274 -Ref: figure-load-extension1079725 -Ref: figure-register-new-function1081305 -Ref: figure-call-new-function1082410 -Node: Extension API Description1084529 -Node: Extension API Functions Introduction1086258 -Ref: table-api-std-headers1088156 -Node: General Data Types1092620 -Ref: General Data Types-Footnote-11101788 -Node: Memory Allocation Functions1102103 -Ref: Memory Allocation Functions-Footnote-11106828 -Node: Constructor Functions1106927 -Node: API Ownership of MPFR and GMP Values1110832 -Node: Registration Functions1112393 -Node: Extension Functions1113097 -Node: Exit Callback Functions1118673 -Node: Extension Version String1119992 -Node: Input Parsers1120687 -Node: Output Wrappers1135331 -Node: Two-way processors1140179 -Node: Printing Messages1142540 -Ref: Printing Messages-Footnote-11143754 -Node: Updating ERRNO1143909 -Node: Requesting Values1144708 -Ref: table-value-types-returned1145461 -Node: Accessing Parameters1146570 -Node: Symbol Table Access1147854 -Node: Symbol table by name1148370 -Ref: Symbol table by name-Footnote-11151581 -Node: Symbol table by cookie1151713 -Ref: Symbol table by cookie-Footnote-11155994 -Node: Cached values1156058 -Ref: Cached values-Footnote-11159702 -Node: Array Manipulation1159859 -Ref: Array Manipulation-Footnote-11160962 -Node: Array Data Types1160999 -Ref: Array Data Types-Footnote-11163821 -Node: Array Functions1163921 -Node: Flattening Arrays1168950 -Node: Creating Arrays1176002 -Node: Redirection API1180852 -Node: Extension API Variables1183873 -Node: Extension Versioning1184598 -Ref: gawk-api-version1185035 -Node: Extension GMP/MPFR Versioning1186823 -Node: Extension API Informational Variables1188529 -Node: Extension API Boilerplate1189690 -Node: Changes from API V11193826 -Node: Finding Extensions1195460 -Node: Extension Example1196035 -Node: Internal File Description1196859 -Node: Internal File Ops1201183 -Ref: Internal File Ops-Footnote-11212741 -Node: Using Internal File Ops1212889 -Ref: Using Internal File Ops-Footnote-11215320 -Node: Extension Samples1215598 -Node: Extension Sample File Functions1217167 -Node: Extension Sample Fnmatch1225305 -Node: Extension Sample Fork1226900 -Node: Extension Sample Inplace1228176 -Node: Extension Sample Ord1231848 -Node: Extension Sample Readdir1232724 -Ref: table-readdir-file-types1233621 -Node: Extension Sample Revout1234759 -Node: Extension Sample Rev2way1235356 -Node: Extension Sample Read write array1236108 -Node: Extension Sample Readfile1239382 -Node: Extension Sample Time1240513 -Node: Extension Sample API Tests1242803 -Node: gawkextlib1243311 -Node: Extension summary1246347 -Node: Extension Exercises1250205 -Node: Language History1251483 -Node: V7/SVR3.11253197 -Node: SVR41255547 -Node: POSIX1257079 -Node: BTL1258504 -Node: POSIX/GNU1259273 -Node: Feature History1265804 -Node: Common Extensions1284922 -Node: Ranges and Locales1286291 -Ref: Ranges and Locales-Footnote-11291092 -Ref: Ranges and Locales-Footnote-21291119 -Ref: Ranges and Locales-Footnote-31291358 -Node: Contributors1291581 -Node: History summary1297786 -Node: Installation1299232 -Node: Gawk Distribution1300196 -Node: Getting1300688 -Node: Extracting1301687 -Node: Distribution contents1303399 -Node: Unix Installation1311479 -Node: Quick Installation1312301 -Node: Compiling with MPFR1314847 -Node: Shell Startup Files1315553 -Node: Additional Configuration Options1316710 -Node: Configuration Philosophy1319097 -Node: Compiling from Git1321599 -Node: Building the Documentation1322158 -Node: Non-Unix Installation1323570 -Node: PC Installation1324046 -Node: PC Binary Installation1324919 -Node: PC Compiling1325824 -Node: PC Using1327002 -Node: Cygwin1330730 -Node: MSYS1331986 -Node: OpenVMS Installation1332618 -Node: OpenVMS Compilation1333299 -Ref: OpenVMS Compilation-Footnote-11334782 -Node: OpenVMS Dynamic Extensions1334844 -Node: OpenVMS Installation Details1336480 -Node: OpenVMS Running1338915 -Node: OpenVMS GNV1343052 -Node: Bugs1343807 -Node: Bug definition1344731 -Node: Bug address1348382 -Node: Usenet1351973 -Node: Performance bugs1353204 -Node: Asking for help1356222 -Node: Maintainers1358213 -Node: Other Versions1359240 -Node: Installation summary1368172 -Node: Notes1369556 -Node: Compatibility Mode1370366 -Node: Additions1371188 -Node: Accessing The Source1372133 -Node: Adding Code1373668 -Node: New Ports1380804 -Node: Derived Files1385314 -Ref: Derived Files-Footnote-11391161 -Ref: Derived Files-Footnote-21391196 -Ref: Derived Files-Footnote-31391813 -Node: Future Extensions1391927 -Node: Implementation Limitations1392599 -Node: Extension Design1393841 -Node: Old Extension Problems1395005 -Ref: Old Extension Problems-Footnote-11396581 -Node: Extension New Mechanism Goals1396642 -Ref: Extension New Mechanism Goals-Footnote-11400138 -Node: Extension Other Design Decisions1400339 -Node: Extension Future Growth1402538 -Node: Notes summary1403162 -Node: Basic Concepts1404375 -Node: Basic High Level1405060 -Ref: figure-general-flow1405342 -Ref: figure-process-flow1406044 -Ref: Basic High Level-Footnote-11409440 -Node: Basic Data Typing1409629 -Node: Glossary1413047 -Node: Copying1446169 -Node: GNU Free Documentation License1483930 -Node: Index1509253 +Ref: Array Intro-Footnote-1532987 +Node: Reference to Elements533119 +Node: Assigning Elements535641 +Node: Array Example536136 +Node: Scanning an Array538105 +Node: Controlling Scanning541202 +Ref: Controlling Scanning-Footnote-1547865 +Node: Numeric Array Subscripts548189 +Node: Uninitialized Subscripts550463 +Node: Delete552142 +Ref: Delete-Footnote-1554956 +Node: Multidimensional555013 +Node: Multiscanning558218 +Node: Arrays of Arrays559890 +Node: Arrays Summary564790 +Node: Functions566979 +Node: Built-in568039 +Node: Calling Built-in569228 +Node: Boolean Functions571275 +Node: Numeric Functions571845 +Ref: Numeric Functions-Footnote-1576038 +Ref: Numeric Functions-Footnote-2576722 +Ref: Numeric Functions-Footnote-3576774 +Node: String Functions577050 +Ref: String Functions-Footnote-1602880 +Ref: String Functions-Footnote-2603014 +Ref: String Functions-Footnote-3603274 +Node: Gory Details603361 +Ref: table-sub-escapes605268 +Ref: table-sub-proposed606914 +Ref: table-posix-sub608424 +Ref: table-gensub-escapes610112 +Ref: Gory Details-Footnote-1611046 +Node: I/O Functions611200 +Ref: table-system-return-values617887 +Ref: I/O Functions-Footnote-1620058 +Ref: I/O Functions-Footnote-2620206 +Node: Time Functions620326 +Ref: Time Functions-Footnote-1631482 +Ref: Time Functions-Footnote-2631558 +Ref: Time Functions-Footnote-3631720 +Ref: Time Functions-Footnote-4631831 +Ref: Time Functions-Footnote-5631949 +Ref: Time Functions-Footnote-6632184 +Node: Bitwise Functions632466 +Ref: table-bitwise-ops633068 +Ref: Bitwise Functions-Footnote-1639322 +Ref: Bitwise Functions-Footnote-2639501 +Node: Type Functions639698 +Node: I18N Functions643291 +Node: User-defined645034 +Node: Definition Syntax645854 +Ref: Definition Syntax-Footnote-1651682 +Node: Function Example651759 +Ref: Function Example-Footnote-1654738 +Node: Function Calling654760 +Node: Calling A Function655354 +Node: Variable Scope656324 +Node: Pass By Value/Reference659378 +Node: Function Caveats662110 +Ref: Function Caveats-Footnote-1664205 +Node: Return Statement664329 +Node: Dynamic Typing667384 +Node: Indirect Calls668340 +Node: Functions Summary679499 +Node: Library Functions682276 +Ref: Library Functions-Footnote-1685824 +Ref: Library Functions-Footnote-2685967 +Node: Library Names686142 +Ref: Library Names-Footnote-1689936 +Ref: Library Names-Footnote-2690163 +Node: General Functions690259 +Node: Strtonum Function691453 +Node: Assert Function694535 +Node: Round Function697987 +Node: Cliff Random Function699565 +Node: Ordinal Functions700598 +Ref: Ordinal Functions-Footnote-1703707 +Ref: Ordinal Functions-Footnote-2703959 +Node: Join Function704173 +Ref: Join Function-Footnote-1705976 +Node: Getlocaltime Function706180 +Node: Readfile Function709954 +Node: Shell Quoting711983 +Node: Isnumeric Function713439 +Node: Data File Management714851 +Node: Filetrans Function715483 +Node: Rewind Function719777 +Node: File Checking721756 +Ref: File Checking-Footnote-1723128 +Node: Empty Files723335 +Node: Ignoring Assigns725402 +Node: Getopt Function726976 +Ref: Getopt Function-Footnote-1742810 +Node: Passwd Functions743022 +Ref: Passwd Functions-Footnote-1752204 +Node: Group Functions752292 +Ref: Group Functions-Footnote-1760430 +Node: Walking Arrays760643 +Node: Library Functions Summary763691 +Node: Library Exercises765115 +Node: Sample Programs765602 +Node: Running Examples766384 +Node: Clones767136 +Node: Cut Program768408 +Node: Egrep Program778849 +Node: Id Program788166 +Node: Split Program798280 +Ref: Split Program-Footnote-1808515 +Node: Tee Program808702 +Node: Uniq Program811611 +Node: Wc Program819476 +Node: Bytes vs. Characters819871 +Node: Using extensions821473 +Node: wc program822253 +Node: Miscellaneous Programs827259 +Node: Dupword Program828488 +Node: Alarm Program830551 +Node: Translate Program835464 +Ref: Translate Program-Footnote-1840205 +Node: Labels Program840483 +Ref: Labels Program-Footnote-1843924 +Node: Word Sorting844016 +Node: History Sorting848210 +Node: Extract Program850485 +Node: Simple Sed858754 +Node: Igawk Program861970 +Ref: Igawk Program-Footnote-1877217 +Ref: Igawk Program-Footnote-2877423 +Ref: Igawk Program-Footnote-3877553 +Node: Anagram Program877680 +Node: Signature Program880776 +Node: Programs Summary882028 +Node: Programs Exercises883286 +Ref: Programs Exercises-Footnote-1887602 +Node: Advanced Features887688 +Node: Nondecimal Data890182 +Node: Boolean Typed Values891812 +Node: Array Sorting893787 +Node: Controlling Array Traversal894516 +Ref: Controlling Array Traversal-Footnote-1903023 +Node: Array Sorting Functions903145 +Ref: Array Sorting Functions-Footnote-1909264 +Node: Two-way I/O909472 +Ref: Two-way I/O-Footnote-1917467 +Ref: Two-way I/O-Footnote-2917658 +Node: TCP/IP Networking917740 +Node: Profiling920920 +Node: Persistent Memory930630 +Ref: Persistent Memory-Footnote-1939588 +Node: Extension Philosophy939719 +Node: Advanced Features Summary941254 +Node: Internationalization943524 +Node: I18N and L10N945230 +Node: Explaining gettext945925 +Ref: Explaining gettext-Footnote-1952078 +Ref: Explaining gettext-Footnote-2952273 +Node: Programmer i18n952438 +Ref: Programmer i18n-Footnote-1957551 +Node: Translator i18n957600 +Node: String Extraction958436 +Ref: String Extraction-Footnote-1959614 +Node: Printf Ordering959712 +Ref: Printf Ordering-Footnote-1962574 +Node: I18N Portability962642 +Ref: I18N Portability-Footnote-1965216 +Node: I18N Example965287 +Ref: I18N Example-Footnote-1968687 +Ref: I18N Example-Footnote-2968763 +Node: Gawk I18N968880 +Node: I18N Summary969536 +Node: Debugger970937 +Node: Debugging971961 +Node: Debugging Concepts972410 +Node: Debugging Terms974236 +Node: Awk Debugging976849 +Ref: Awk Debugging-Footnote-1977826 +Node: Sample Debugging Session977966 +Node: Debugger Invocation978518 +Node: Finding The Bug980147 +Node: List of Debugger Commands986833 +Node: Breakpoint Control988210 +Node: Debugger Execution Control992042 +Node: Viewing And Changing Data995522 +Node: Execution Stack999260 +Node: Debugger Info1000941 +Node: Miscellaneous Debugger Commands1005240 +Node: Readline Support1010493 +Node: Limitations1011439 +Node: Debugging Summary1014083 +Node: Namespaces1015386 +Node: Global Namespace1016513 +Node: Qualified Names1017958 +Node: Default Namespace1018993 +Node: Changing The Namespace1019768 +Node: Naming Rules1021462 +Node: Internal Name Management1023377 +Node: Namespace Example1024447 +Node: Namespace And Features1027030 +Node: Namespace Summary1028487 +Node: Arbitrary Precision Arithmetic1030000 +Node: Computer Arithmetic1031519 +Ref: table-numeric-ranges1035336 +Ref: table-floating-point-ranges1035834 +Ref: Computer Arithmetic-Footnote-11036493 +Node: Math Definitions1036552 +Ref: table-ieee-formats1039597 +Node: MPFR features1040171 +Node: MPFR On Parole1040624 +Ref: MPFR On Parole-Footnote-11041468 +Node: MPFR Intro1041627 +Node: FP Math Caution1043317 +Ref: FP Math Caution-Footnote-11044391 +Node: Inexactness of computations1044768 +Node: Inexact representation1045799 +Node: Comparing FP Values1047182 +Node: Errors accumulate1048440 +Node: Strange values1049907 +Ref: Strange values-Footnote-11052573 +Node: Getting Accuracy1052678 +Node: Try To Round1055415 +Node: Setting precision1056322 +Ref: table-predefined-precision-strings1057027 +Node: Setting the rounding mode1058912 +Ref: table-gawk-rounding-modes1059294 +Ref: Setting the rounding mode-Footnote-11063352 +Node: Arbitrary Precision Integers1063535 +Ref: Arbitrary Precision Integers-Footnote-11066747 +Node: Checking for MPFR1066903 +Node: POSIX Floating Point Problems1068393 +Ref: POSIX Floating Point Problems-Footnote-11073257 +Node: Floating point summary1073295 +Node: Dynamic Extensions1075559 +Node: Extension Intro1077158 +Node: Plugin License1078466 +Node: Extension Mechanism Outline1079279 +Ref: figure-load-extension1079730 +Ref: figure-register-new-function1081315 +Ref: figure-call-new-function1082425 +Node: Extension API Description1084549 +Node: Extension API Functions Introduction1086278 +Ref: table-api-std-headers1088176 +Node: General Data Types1092640 +Ref: General Data Types-Footnote-11101808 +Node: Memory Allocation Functions1102123 +Ref: Memory Allocation Functions-Footnote-11106848 +Node: Constructor Functions1106947 +Node: API Ownership of MPFR and GMP Values1110852 +Node: Registration Functions1112413 +Node: Extension Functions1113117 +Node: Exit Callback Functions1118693 +Node: Extension Version String1120012 +Node: Input Parsers1120707 +Node: Output Wrappers1135351 +Node: Two-way processors1140199 +Node: Printing Messages1142560 +Ref: Printing Messages-Footnote-11143774 +Node: Updating ERRNO1143929 +Node: Requesting Values1144728 +Ref: table-value-types-returned1145481 +Node: Accessing Parameters1146590 +Node: Symbol Table Access1147874 +Node: Symbol table by name1148390 +Ref: Symbol table by name-Footnote-11151601 +Node: Symbol table by cookie1151733 +Ref: Symbol table by cookie-Footnote-11156014 +Node: Cached values1156078 +Ref: Cached values-Footnote-11159722 +Node: Array Manipulation1159879 +Ref: Array Manipulation-Footnote-11160982 +Node: Array Data Types1161019 +Ref: Array Data Types-Footnote-11163841 +Node: Array Functions1163941 +Node: Flattening Arrays1168970 +Node: Creating Arrays1176022 +Node: Redirection API1180872 +Node: Extension API Variables1183893 +Node: Extension Versioning1184618 +Ref: gawk-api-version1185055 +Node: Extension GMP/MPFR Versioning1186843 +Node: Extension API Informational Variables1188549 +Node: Extension API Boilerplate1189710 +Node: Changes from API V11193846 +Node: Finding Extensions1195480 +Node: Extension Example1196055 +Node: Internal File Description1196879 +Node: Internal File Ops1201203 +Ref: Internal File Ops-Footnote-11212761 +Node: Using Internal File Ops1212909 +Ref: Using Internal File Ops-Footnote-11215340 +Node: Extension Samples1215618 +Node: Extension Sample File Functions1217187 +Node: Extension Sample Fnmatch1225325 +Node: Extension Sample Fork1226920 +Node: Extension Sample Inplace1228196 +Node: Extension Sample Ord1231868 +Node: Extension Sample Readdir1232744 +Ref: table-readdir-file-types1233641 +Node: Extension Sample Revout1234779 +Node: Extension Sample Rev2way1235376 +Node: Extension Sample Read write array1236128 +Node: Extension Sample Readfile1239402 +Node: Extension Sample Time1240533 +Node: Extension Sample API Tests1242823 +Node: gawkextlib1243331 +Node: Extension summary1246367 +Node: Extension Exercises1250225 +Node: Language History1251503 +Node: V7/SVR3.11253217 +Node: SVR41255567 +Node: POSIX1257099 +Node: BTL1258524 +Node: POSIX/GNU1259293 +Node: Feature History1265824 +Node: Common Extensions1284942 +Node: Ranges and Locales1286311 +Ref: Ranges and Locales-Footnote-11291112 +Ref: Ranges and Locales-Footnote-21291139 +Ref: Ranges and Locales-Footnote-31291378 +Node: Contributors1291601 +Node: History summary1297806 +Node: Installation1299252 +Node: Gawk Distribution1300216 +Node: Getting1300708 +Node: Extracting1301707 +Node: Distribution contents1303419 +Node: Unix Installation1311499 +Node: Quick Installation1312321 +Node: Compiling with MPFR1314867 +Node: Shell Startup Files1315573 +Node: Additional Configuration Options1316730 +Node: Configuration Philosophy1319117 +Node: Compiling from Git1321619 +Node: Building the Documentation1322178 +Node: Non-Unix Installation1323590 +Node: PC Installation1324066 +Node: PC Binary Installation1324939 +Node: PC Compiling1325844 +Node: PC Using1327022 +Node: Cygwin1330750 +Node: MSYS1332006 +Node: OpenVMS Installation1332638 +Node: OpenVMS Compilation1333319 +Ref: OpenVMS Compilation-Footnote-11334802 +Node: OpenVMS Dynamic Extensions1334864 +Node: OpenVMS Installation Details1336500 +Node: OpenVMS Running1338935 +Node: OpenVMS GNV1343072 +Node: Bugs1343827 +Node: Bug definition1344751 +Node: Bug address1348402 +Node: Usenet1351993 +Node: Performance bugs1353224 +Node: Asking for help1356242 +Node: Maintainers1358233 +Node: Other Versions1359260 +Node: Installation summary1368192 +Node: Notes1369576 +Node: Compatibility Mode1370386 +Node: Additions1371208 +Node: Accessing The Source1372153 +Node: Adding Code1373688 +Node: New Ports1380824 +Node: Derived Files1385334 +Ref: Derived Files-Footnote-11391181 +Ref: Derived Files-Footnote-21391216 +Ref: Derived Files-Footnote-31391833 +Node: Future Extensions1391947 +Node: Implementation Limitations1392619 +Node: Extension Design1393861 +Node: Old Extension Problems1395025 +Ref: Old Extension Problems-Footnote-11396601 +Node: Extension New Mechanism Goals1396662 +Ref: Extension New Mechanism Goals-Footnote-11400158 +Node: Extension Other Design Decisions1400359 +Node: Extension Future Growth1402558 +Node: Notes summary1403182 +Node: Basic Concepts1404395 +Node: Basic High Level1405080 +Ref: figure-general-flow1405362 +Ref: figure-process-flow1406069 +Ref: Basic High Level-Footnote-11409470 +Node: Basic Data Typing1409659 +Node: Glossary1413077 +Node: Copying1446199 +Node: GNU Free Documentation License1483960 +Node: Index1509283  End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index f37d86e5..6ce9db35 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -17088,7 +17088,7 @@ conceptually, if the element values are eight, @code{"foo"}, @ifnotdocbook @float Figure,figure-array-elements @caption{A contiguous array} -@center @image{array-elements, , , A Contiguous Array} +@center @image{gawk_array-elements, , , A Contiguous Array} @end float @end ifnotdocbook @@ -35871,7 +35871,7 @@ This is shown in @inlineraw{docbook, }. @ifnotdocbook @float Figure,figure-load-extension @caption{Loading the extension} -@center @image{api-figure1, , , Loading the extension} +@center @image{gawk_api-figure1, , , Loading the extension} @end float @end ifnotdocbook @@ -35898,7 +35898,7 @@ This is shown in @inlineraw{docbook, } @ifnotdocbook @float Figure,figure-call-new-function @caption{Calling the new function} -@center @image{api-figure3, , , Calling the new function} +@center @image{gawk_api-figure3, , , Calling the new function} @end float @end ifnotdocbook @@ -45633,7 +45633,7 @@ See @inlineraw{docbook, }. @ifnotdocbook @float Figure,figure-general-flow @caption{General Program Flow} -@center @image{general-program, , , General program flow} +@center @image{gawk_general-program, , , General program flow} @end float @end ifnotdocbook @@ -45671,7 +45671,7 @@ as shown in @inlineraw{docbook, }: @ifnotdocbook @float Figure,figure-process-flow @caption{Basic Program Steps} -@center @image{process-flow, , , Basic Program Stages} +@center @image{gawk_process-flow, , , Basic Program Stages} @end float @end ifnotdocbook diff --git a/doc/gawk_api-figure1.eps b/doc/gawk_api-figure1.eps new file mode 100644 index 00000000..7af094c9 --- /dev/null +++ b/doc/gawk_api-figure1.eps @@ -0,0 +1,536 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Title: api-figure1.fig +%%Creator: fig2dev Version 3.2 Patchlevel 5d +%%CreationDate: Wed Oct 31 20:16:08 2012 +%%BoundingBox: 0 0 399 227 +%Magnification: 1.0000 +%%EndComments +%%BeginProlog +/MyAppDict 100 dict dup begin def +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end + +% This junk string is used by the show operators +/PATsstr 1 string def +/PATawidthshow { % cx cy cchar rx ry string + % Loop over each character in the string + { % cx cy cchar rx ry char + % Show the character + dup % cx cy cchar rx ry char char + PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char) + false charpath % cx cy cchar rx ry char + /clip load PATdraw + % Move past the character (charpath modified the + % current point) + currentpoint % cx cy cchar rx ry char x y + newpath + moveto % cx cy cchar rx ry char + % Reposition by cx,cy if the character in the string is cchar + 3 index eq { % cx cy cchar rx ry + 4 index 4 index rmoveto + } if + % Reposition all characters by rx ry + 2 copy rmoveto % cx cy cchar rx ry + } forall + pop pop pop pop pop % - + currentpoint + newpath + moveto +} bind def +/PATcg { + 7 dict dup begin + /lw currentlinewidth def + /lc currentlinecap def + /lj currentlinejoin def + /ml currentmiterlimit def + /ds [ currentdash ] def + /cc [ currentrgbcolor ] def + /cm matrix currentmatrix def + end +} bind def +% PATdraw - calculates the boundaries of the object and +% fills it with the current pattern +/PATdraw { % proc + save exch + PATpcalc % proc nw nh px py + 5 -1 roll exec % nw nh px py + newpath + PATfill % - + restore +} bind def +% PATfill - performs the tiling for the shape +/PATfill { % nw nh px py PATfill - + PATDict /CurrentPattern get dup begin + setfont + % Set the coordinate system to Pattern Space + PatternGState PATsg + % Set the color for uncolored pattezns + PaintType 2 eq { PATDict /PColor get PATsc } if + % Create the string for showing + 3 index string % nw nh px py str + % Loop for each of the pattern sources + 0 1 Multi 1 sub { % nw nh px py str source + % Move to the starting location + 3 index 3 index % nw nh px py str source px py + moveto % nw nh px py str source + % For multiple sources, set the appropriate color + Multi 1 ne { dup PC exch get PATsc } if + % Set the appropriate string for the source + 0 1 7 index 1 sub { 2 index exch 2 index put } for pop + % Loop over the number of vertical cells + 3 index % nw nh px py str nh + { % nw nh px py str + currentpoint % nw nh px py str cx cy + 2 index oldshow % nw nh px py str cx cy + YStep add moveto % nw nh px py str + } repeat % nw nh px py str + } for + 5 { pop } repeat + end +} bind def + +% PATkshow - kshow with the current pattezn +/PATkshow { % proc string + exch bind % string proc + 1 index 0 get % string proc char + % Loop over all but the last character in the string + 0 1 4 index length 2 sub { + % string proc char idx + % Find the n+1th character in the string + 3 index exch 1 add get % string proc char char+1 + exch 2 copy % strinq proc char+1 char char+1 char + % Now show the nth character + PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr) + false charpath % string proc char+1 char char+1 + /clip load PATdraw + % Move past the character (charpath modified the current point) + currentpoint newpath moveto + % Execute the user proc (should consume char and char+1) + mark 3 1 roll % string proc char+1 mark char char+1 + 4 index exec % string proc char+1 mark... + cleartomark % string proc char+1 + } for + % Now display the last character + PATsstr dup 0 4 -1 roll put % string proc (char+1) + false charpath % string proc + /clip load PATdraw + neewath + pop pop % - +} bind def +% PATmp - the makepattern equivalent +/PATmp { % patdict patmtx PATmp patinstance + exch dup length 7 add % We will add 6 new entries plus 1 FID + dict copy % Create a new dictionary + begin + % Matrix to install when painting the pattern + TilingType PATtcalc + /PatternGState PATcg def + PatternGState /cm 3 -1 roll put + % Check for multi pattern sources (Level 1 fast color patterns) + currentdict /Multi known not { /Multi 1 def } if + % Font dictionary definitions + /FontType 3 def + % Create a dummy encoding vector + /Encoding 256 array def + 3 string 0 1 255 { + Encoding exch dup 3 index cvs cvn put } for pop + /FontMatrix matrix def + /FontBBox BBox def + /BuildChar { + mark 3 1 roll % mark dict char + exch begin + Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata] + PaintType 2 eq Multi 1 ne or + { XStep 0 FontBBox aload pop setcachedevice } + { XStep 0 setcharwidth } ifelse + currentdict % mark [paintdata] dict + /PaintProc load % mark [paintdata] dict paintproc + end + gsave + false PATredef exec true PATredef + grestore + cleartomark % - + } bind def + currentdict + end % newdict + /foo exch % /foo newlict + definefont % newfont +} bind def +% PATpcalc - calculates the starting point and width/height +% of the tile fill for the shape +/PATpcalc { % - PATpcalc nw nh px py + PATDict /CurrentPattern get begin + gsave + % Set up the coordinate system to Pattern Space + % and lock down pattern + PatternGState /cm get setmatrix + BBox aload pop pop pop translate + % Determine the bounding box of the shape + pathbbox % llx lly urx ury + grestore + % Determine (nw, nh) the # of cells to paint width and height + PatHeight div ceiling % llx lly urx qh + 4 1 roll % qh llx lly urx + PatWidth div ceiling % qh llx lly qw + 4 1 roll % qw qh llx lly + PatHeight div floor % qw qh llx ph + 4 1 roll % ph qw qh llx + PatWidth div floor % ph qw qh pw + 4 1 roll % pw ph qw qh + 2 index sub cvi abs % pw ph qs qh-ph + exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph + % Determine the starting point of the pattern fill + %(px, py) + 4 2 roll % nw nh pw ph + PatHeight mul % nw nh pw py + exch % nw nh py pw + PatWidth mul exch % nw nh px py + end +} bind def + +% Save the original routines so that we can use them later on +/oldfill /fill load def +/oldeofill /eofill load def +/oldstroke /stroke load def +/oldshow /show load def +/oldashow /ashow load def +/oldwidthshow /widthshow load def +/oldawidthshow /awidthshow load def +/oldkshow /kshow load def + +% These defs are necessary so that subsequent procs don't bind in +% the originals +/fill { oldfill } bind def +/eofill { oldeofill } bind def +/stroke { oldstroke } bind def +/show { oldshow } bind def +/ashow { oldashow } bind def +/widthshow { oldwidthshow } bind def +/awidthshow { oldawidthshow } bind def +/kshow { oldkshow } bind def +/PATredef { + MyAppDict begin + { + /fill { /clip load PATdraw newpath } bind def + /eofill { /eoclip load PATdraw newpath } bind def + /stroke { PATstroke } bind def + /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def + /ashow { 0 0 null 6 3 roll PATawidthshow } + bind def + /widthshow { 0 0 3 -1 roll PATawidthshow } + bind def + /awidthshow { PATawidthshow } bind def + /kshow { PATkshow } bind def + } { + /fill { oldfill } bind def + /eofill { oldeofill } bind def + /stroke { oldstroke } bind def + /show { oldshow } bind def + /ashow { oldashow } bind def + /widthshow { oldwidthshow } bind def + /awidthshow { oldawidthshow } bind def + /kshow { oldkshow } bind def + } ifelse + end +} bind def +false PATredef +% Conditionally define setcmykcolor if not available +/setcmykcolor where { pop } { + /setcmykcolor { + 1 sub 4 1 roll + 3 { + 3 index add neg dup 0 lt { pop 0 } if 3 1 roll + } repeat + setrgbcolor - pop + } bind def +} ifelse +/PATsc { % colorarray + aload length % c1 ... cn length + dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor + } ifelse } ifelse +} bind def +/PATsg { % dict + begin + lw setlinewidth + lc setlinecap + lj setlinejoin + ml setmiterlimit + ds aload pop setdash + cc aload pop setrgbcolor + cm setmatrix + end +} bind def + +/PATDict 3 dict def +/PATsp { + true PATredef + PATDict begin + /CurrentPattern exch def + % If it's an uncolored pattern, save the color + CurrentPattern /PaintType get 2 eq { + /PColor exch def + } if + /CColor [ currentrgbcolor ] def + end +} bind def +% PATstroke - stroke with the current pattern +/PATstroke { + countdictstack + save + mark + { + currentpoint strokepath moveto + PATpcalc % proc nw nh px py + clip newpath PATfill + } stopped { + (*** PATstroke Warning: Path is too complex, stroking + with gray) = + cleartomark + restore + countdictstack exch sub dup 0 gt + { { end } repeat } { pop } ifelse + gsave 0.5 setgray oldstroke grestore + } { pop restore pop } ifelse + newpath +} bind def +/PATtcalc { % modmtx tilingtype PATtcalc tilematrix + % Note: tiling types 2 and 3 are not supported + gsave + exch concat % tilingtype + matrix currentmatrix exch % cmtx tilingtype + % Tiling type 1 and 3: constant spacing + 2 ne { + % Distort the pattern so that it occupies + % an integral number of device pixels + dup 4 get exch dup 5 get exch % tx ty cmtx + XStep 0 dtransform + round exch round exch % tx ty cmtx dx.x dx.y + XStep div exch XStep div exch % tx ty cmtx a b + 0 YStep dtransform + round exch round exch % tx ty cmtx a b dy.x dy.y + YStep div exch YStep div exch % tx ty cmtx a b c d + 7 -3 roll astore % { a b c d tx ty } + } if + grestore +} bind def +/PATusp { + false PATredef + PATDict begin + CColor PATsc + end +} bind def + +% right30 +11 dict begin +/PaintType 1 def +/PatternType 1 def +/TilingType 1 def +/BBox [0 0 1 1] def +/XStep 1 def +/YStep 1 def +/PatWidth 1 def +/PatHeight 1 def +/Multi 2 def +/PaintData [ + { clippath } bind + { 32 16 true [ 32 0 0 -16 0 16 ] + {<00030003000c000c0030003000c000c0030003000c000c00 + 30003000c000c00000030003000c000c0030003000c000c0 + 030003000c000c0030003000c000c000>} + imagemask } bind +] def +/PaintProc { + pop + exec fill +} def +currentdict +end +/P2 exch def + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +/pageheader { +save +newpath 0 227 moveto 0 0 lineto 399 0 lineto 399 227 lineto closepath clip newpath +-194.8 350.2 translate +1 -1 scale +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06299 0.06299 sc +} bind def +/pagefooter { +$F2psEnd +restore +} bind def +%%EndProlog +pageheader +% +% Fig objects follow +% +% +% here starts figure with depth 50 +% Arc +7.500 slw +0 slc +gs clippath +3599 4000 m 3567 4148 l 3626 4161 l 3658 4013 l 3658 4013 l 3603 4124 l 3599 4000 l cp +eoclip +n 5449.3 4471.5 1878.7 -70.5453 -169.8379 arcn +gs col0 s gr + gr + +% arrowhead +0 slj +n 3599 4000 m 3603 4124 l 3658 4013 l 3599 4000 l cp gs 0.00 setgray ef gr col0 s +% Arc +gs clippath +4422 4004 m 4425 4155 l 4485 4154 l 4482 4003 l 4482 4003 l 4455 4124 l 4422 4004 l cp +eoclip +n 5539.0 4051.3 1087.6 -60.4713 175.3232 arcn +gs col0 s gr + gr + +% arrowhead +n 4422 4004 m 4455 4124 l 4482 4003 l 4422 4004 l cp gs 0.00 setgray ef gr col0 s +% Arc +gs clippath +4986 4010 m 5012 4159 l 5072 4149 l 5046 4000 l 5046 4000 l 5037 4124 l 4986 4010 l cp +eoclip +n 5628.8 3967.5 613.5 -36.7999 163.6698 arcn +gs col0 s gr + gr + +% arrowhead +n 4986 4010 m 5037 4124 l 5046 4000 l 4986 4010 l cp gs 0.00 setgray ef gr col0 s +% Arc +135.000 slw +gs clippath +7736 3835 m 7756 3984 l 7907 3964 l 7887 3814 l 7841 3821 l 7828 3944 l 7782 3829 l cp +eoclip +n 6609.1 4056.9 1224.8 -93.9364 -4.5364 arc +gs col0 s gr + gr + +% arrowhead +7.500 slw +n 7782 3829 m 7828 3944 l 7841 3821 l col0 s +% Polyline +n 3105 4140 m 6660 4140 l 6660 5085 l 3105 5085 l + cp gs col0 s gr +% Polyline +n 6660 4140 m 8730 4140 l 8730 5085 l 6660 5085 l + cp gs col7 0.50 shd ef gr gs col0 s gr +% Polyline +n 5805 2610 m 6345 2610 l 6345 3690 l 5805 3690 l + cp gs col0 s gr +% Polyline +n 5805 2835 m 6345 2835 l 6345 3015 l 5805 3015 l + cp gs col0 s gr +% Polyline +n 5805 3195 m 6345 3195 l 6345 3375 l 5805 3375 l + cp gs col0 s gr +% Polyline +n 5805 3510 m 6345 3510 l 6345 3690 l 5805 3690 l + cp gs col0 s gr +% Polyline +n 3510 4140 m 3780 4140 l 3780 5085 l 3510 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P2 [16 0 0 -8 234.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +% Polyline +n 4365 4140 m 4635 4140 l 4635 5085 l 4365 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P2 [16 0 0 -8 291.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +% Polyline +n 4905 4140 m 5265 4140 l 5265 5085 l 4905 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P2 [16 0 0 -8 327.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +/Times-Roman ff 180.00 scf sf +3510 5490 m +gs 1 -1 sc (gawk Main Program Address Space) col0 sh gr +/Times-Roman ff 180.00 scf sf +7290 5490 m +gs 1 -1 sc (Extension) col0 sh gr +/Times-Roman ff 180.00 scf sf +5985 2115 m +gs 1 -1 sc (API) col0 sh gr +/Times-Roman ff 180.00 scf sf +5895 2340 m +gs 1 -1 sc (Struct) col0 sh gr +/Courier-Bold ff 180.00 scf sf +7065 2655 m +gs 1 -1 sc (dl_load\(api_p, id\);) col0 sh gr +% here ends figure; +pagefooter +showpage +%%Trailer +end +%EOF diff --git a/doc/gawk_api-figure1.fig b/doc/gawk_api-figure1.fig new file mode 100644 index 00000000..7bc47846 --- /dev/null +++ b/doc/gawk_api-figure1.fig @@ -0,0 +1,40 @@ +#FIG 3.2 Produced by xfig version 3.2.5b +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 0 5449.265 4471.471 6075 2700 4320 2970 3600 4140 + 1 1 1.00 60.00 120.00 +5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 0 5538.971 4051.323 6075 3105 4725 3330 4455 4140 + 1 1 1.00 60.00 120.00 +5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 0 5628.750 3967.500 6120 3600 5220 3510 5040 4140 + 1 1 1.00 60.00 120.00 +5 1 0 10 0 7 50 -1 -1 0.000 0 0 1 0 6609.079 4056.868 6525 2835 7560 3285 7830 3960 + 0 0 1.00 60.00 120.00 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3105 4140 6660 4140 6660 5085 3105 5085 3105 4140 +2 2 0 1 0 7 50 -1 10 0.000 0 0 -1 0 0 5 + 6660 4140 8730 4140 8730 5085 6660 5085 6660 4140 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 5805 2610 6345 2610 6345 3690 5805 3690 5805 2610 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 5805 2835 6345 2835 6345 3015 5805 3015 5805 2835 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 5805 3195 6345 3195 6345 3375 5805 3375 5805 3195 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 5805 3510 6345 3510 6345 3690 5805 3690 5805 3510 +2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 + 3510 4140 3780 4140 3780 5085 3510 5085 3510 4140 +2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 + 4365 4140 4635 4140 4635 5085 4365 5085 4365 4140 +2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 + 4905 4140 5265 4140 5265 5085 4905 5085 4905 4140 +4 0 0 50 -1 0 12 0.0000 4 180 2850 3510 5490 gawk Main Program Address Space\001 +4 0 0 50 -1 0 12 0.0000 4 135 825 7290 5490 Extension\001 +4 0 0 50 -1 0 12 0.0000 4 135 300 5985 2115 API\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 5895 2340 Struct\001 +4 0 0 50 -1 14 12 0.0000 4 165 2280 7065 2655 dl_load(api_p, id);\001 diff --git a/doc/gawk_api-figure1.pdf b/doc/gawk_api-figure1.pdf new file mode 100644 index 00000000..0c24b67d Binary files /dev/null and b/doc/gawk_api-figure1.pdf differ diff --git a/doc/gawk_api-figure1.png b/doc/gawk_api-figure1.png new file mode 100644 index 00000000..72d552cd Binary files /dev/null and b/doc/gawk_api-figure1.png differ diff --git a/doc/gawk_api-figure1.txt b/doc/gawk_api-figure1.txt new file mode 100644 index 00000000..686b853b --- /dev/null +++ b/doc/gawk_api-figure1.txt @@ -0,0 +1,24 @@ + API + Struct + +---+ + | | + +---+ + +---------------| | + | +---+ dl_load(api_p, id); + | | | ___________________ + | +---+ | + | +---------| | __________________ | + | | +---+ || + | | | | || + | | +---+ || + | | +---| | || + | | | +---+ \ || / + | | | \ / + v v v \/ ++-------+-+---+-+---+-+------------------+--------------------+ +| |x| |x| |x| |OOOOOOOOOOOOOOOOOOOO| +| |x| |x| |x| |OOOOOOOOOOOOOOOOOOOO| +| |x| |x| |x| |OOOOOOOOOOOOOOOOOOOO| ++-------+-+---+-+---+-+------------------+--------------------+ + + gawk Main Program Address Space Extension diff --git a/doc/gawk_api-figure2.eps b/doc/gawk_api-figure2.eps new file mode 100644 index 00000000..caf5c34c --- /dev/null +++ b/doc/gawk_api-figure2.eps @@ -0,0 +1,517 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Title: api-figure2.fig +%%Creator: fig2dev Version 3.2 Patchlevel 5d +%%CreationDate: Thu Apr 25 22:22:07 2013 +%%BoundingBox: 0 0 363 179 +%Magnification: 1.0000 +%%EndComments +%%BeginProlog +/MyAppDict 100 dict dup begin def +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end + +% This junk string is used by the show operators +/PATsstr 1 string def +/PATawidthshow { % cx cy cchar rx ry string + % Loop over each character in the string + { % cx cy cchar rx ry char + % Show the character + dup % cx cy cchar rx ry char char + PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char) + false charpath % cx cy cchar rx ry char + /clip load PATdraw + % Move past the character (charpath modified the + % current point) + currentpoint % cx cy cchar rx ry char x y + newpath + moveto % cx cy cchar rx ry char + % Reposition by cx,cy if the character in the string is cchar + 3 index eq { % cx cy cchar rx ry + 4 index 4 index rmoveto + } if + % Reposition all characters by rx ry + 2 copy rmoveto % cx cy cchar rx ry + } forall + pop pop pop pop pop % - + currentpoint + newpath + moveto +} bind def +/PATcg { + 7 dict dup begin + /lw currentlinewidth def + /lc currentlinecap def + /lj currentlinejoin def + /ml currentmiterlimit def + /ds [ currentdash ] def + /cc [ currentrgbcolor ] def + /cm matrix currentmatrix def + end +} bind def +% PATdraw - calculates the boundaries of the object and +% fills it with the current pattern +/PATdraw { % proc + save exch + PATpcalc % proc nw nh px py + 5 -1 roll exec % nw nh px py + newpath + PATfill % - + restore +} bind def +% PATfill - performs the tiling for the shape +/PATfill { % nw nh px py PATfill - + PATDict /CurrentPattern get dup begin + setfont + % Set the coordinate system to Pattern Space + PatternGState PATsg + % Set the color for uncolored pattezns + PaintType 2 eq { PATDict /PColor get PATsc } if + % Create the string for showing + 3 index string % nw nh px py str + % Loop for each of the pattern sources + 0 1 Multi 1 sub { % nw nh px py str source + % Move to the starting location + 3 index 3 index % nw nh px py str source px py + moveto % nw nh px py str source + % For multiple sources, set the appropriate color + Multi 1 ne { dup PC exch get PATsc } if + % Set the appropriate string for the source + 0 1 7 index 1 sub { 2 index exch 2 index put } for pop + % Loop over the number of vertical cells + 3 index % nw nh px py str nh + { % nw nh px py str + currentpoint % nw nh px py str cx cy + 2 index oldshow % nw nh px py str cx cy + YStep add moveto % nw nh px py str + } repeat % nw nh px py str + } for + 5 { pop } repeat + end +} bind def + +% PATkshow - kshow with the current pattezn +/PATkshow { % proc string + exch bind % string proc + 1 index 0 get % string proc char + % Loop over all but the last character in the string + 0 1 4 index length 2 sub { + % string proc char idx + % Find the n+1th character in the string + 3 index exch 1 add get % string proc char char+1 + exch 2 copy % strinq proc char+1 char char+1 char + % Now show the nth character + PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr) + false charpath % string proc char+1 char char+1 + /clip load PATdraw + % Move past the character (charpath modified the current point) + currentpoint newpath moveto + % Execute the user proc (should consume char and char+1) + mark 3 1 roll % string proc char+1 mark char char+1 + 4 index exec % string proc char+1 mark... + cleartomark % string proc char+1 + } for + % Now display the last character + PATsstr dup 0 4 -1 roll put % string proc (char+1) + false charpath % string proc + /clip load PATdraw + neewath + pop pop % - +} bind def +% PATmp - the makepattern equivalent +/PATmp { % patdict patmtx PATmp patinstance + exch dup length 7 add % We will add 6 new entries plus 1 FID + dict copy % Create a new dictionary + begin + % Matrix to install when painting the pattern + TilingType PATtcalc + /PatternGState PATcg def + PatternGState /cm 3 -1 roll put + % Check for multi pattern sources (Level 1 fast color patterns) + currentdict /Multi known not { /Multi 1 def } if + % Font dictionary definitions + /FontType 3 def + % Create a dummy encoding vector + /Encoding 256 array def + 3 string 0 1 255 { + Encoding exch dup 3 index cvs cvn put } for pop + /FontMatrix matrix def + /FontBBox BBox def + /BuildChar { + mark 3 1 roll % mark dict char + exch begin + Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata] + PaintType 2 eq Multi 1 ne or + { XStep 0 FontBBox aload pop setcachedevice } + { XStep 0 setcharwidth } ifelse + currentdict % mark [paintdata] dict + /PaintProc load % mark [paintdata] dict paintproc + end + gsave + false PATredef exec true PATredef + grestore + cleartomark % - + } bind def + currentdict + end % newdict + /foo exch % /foo newlict + definefont % newfont +} bind def +% PATpcalc - calculates the starting point and width/height +% of the tile fill for the shape +/PATpcalc { % - PATpcalc nw nh px py + PATDict /CurrentPattern get begin + gsave + % Set up the coordinate system to Pattern Space + % and lock down pattern + PatternGState /cm get setmatrix + BBox aload pop pop pop translate + % Determine the bounding box of the shape + pathbbox % llx lly urx ury + grestore + % Determine (nw, nh) the # of cells to paint width and height + PatHeight div ceiling % llx lly urx qh + 4 1 roll % qh llx lly urx + PatWidth div ceiling % qh llx lly qw + 4 1 roll % qw qh llx lly + PatHeight div floor % qw qh llx ph + 4 1 roll % ph qw qh llx + PatWidth div floor % ph qw qh pw + 4 1 roll % pw ph qw qh + 2 index sub cvi abs % pw ph qs qh-ph + exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph + % Determine the starting point of the pattern fill + %(px, py) + 4 2 roll % nw nh pw ph + PatHeight mul % nw nh pw py + exch % nw nh py pw + PatWidth mul exch % nw nh px py + end +} bind def + +% Save the original routines so that we can use them later on +/oldfill /fill load def +/oldeofill /eofill load def +/oldstroke /stroke load def +/oldshow /show load def +/oldashow /ashow load def +/oldwidthshow /widthshow load def +/oldawidthshow /awidthshow load def +/oldkshow /kshow load def + +% These defs are necessary so that subsequent procs don't bind in +% the originals +/fill { oldfill } bind def +/eofill { oldeofill } bind def +/stroke { oldstroke } bind def +/show { oldshow } bind def +/ashow { oldashow } bind def +/widthshow { oldwidthshow } bind def +/awidthshow { oldawidthshow } bind def +/kshow { oldkshow } bind def +/PATredef { + MyAppDict begin + { + /fill { /clip load PATdraw newpath } bind def + /eofill { /eoclip load PATdraw newpath } bind def + /stroke { PATstroke } bind def + /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def + /ashow { 0 0 null 6 3 roll PATawidthshow } + bind def + /widthshow { 0 0 3 -1 roll PATawidthshow } + bind def + /awidthshow { PATawidthshow } bind def + /kshow { PATkshow } bind def + } { + /fill { oldfill } bind def + /eofill { oldeofill } bind def + /stroke { oldstroke } bind def + /show { oldshow } bind def + /ashow { oldashow } bind def + /widthshow { oldwidthshow } bind def + /awidthshow { oldawidthshow } bind def + /kshow { oldkshow } bind def + } ifelse + end +} bind def +false PATredef +% Conditionally define setcmykcolor if not available +/setcmykcolor where { pop } { + /setcmykcolor { + 1 sub 4 1 roll + 3 { + 3 index add neg dup 0 lt { pop 0 } if 3 1 roll + } repeat + setrgbcolor - pop + } bind def +} ifelse +/PATsc { % colorarray + aload length % c1 ... cn length + dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor + } ifelse } ifelse +} bind def +/PATsg { % dict + begin + lw setlinewidth + lc setlinecap + lj setlinejoin + ml setmiterlimit + ds aload pop setdash + cc aload pop setrgbcolor + cm setmatrix + end +} bind def + +/PATDict 3 dict def +/PATsp { + true PATredef + PATDict begin + /CurrentPattern exch def + % If it's an uncolored pattern, save the color + CurrentPattern /PaintType get 2 eq { + /PColor exch def + } if + /CColor [ currentrgbcolor ] def + end +} bind def +% PATstroke - stroke with the current pattern +/PATstroke { + countdictstack + save + mark + { + currentpoint strokepath moveto + PATpcalc % proc nw nh px py + clip newpath PATfill + } stopped { + (*** PATstroke Warning: Path is too complex, stroking + with gray) = + cleartomark + restore + countdictstack exch sub dup 0 gt + { { end } repeat } { pop } ifelse + gsave 0.5 setgray oldstroke grestore + } { pop restore pop } ifelse + newpath +} bind def +/PATtcalc { % modmtx tilingtype PATtcalc tilematrix + % Note: tiling types 2 and 3 are not supported + gsave + exch concat % tilingtype + matrix currentmatrix exch % cmtx tilingtype + % Tiling type 1 and 3: constant spacing + 2 ne { + % Distort the pattern so that it occupies + % an integral number of device pixels + dup 4 get exch dup 5 get exch % tx ty cmtx + XStep 0 dtransform + round exch round exch % tx ty cmtx dx.x dx.y + XStep div exch XStep div exch % tx ty cmtx a b + 0 YStep dtransform + round exch round exch % tx ty cmtx a b dy.x dy.y + YStep div exch YStep div exch % tx ty cmtx a b c d + 7 -3 roll astore % { a b c d tx ty } + } if + grestore +} bind def +/PATusp { + false PATredef + PATDict begin + CColor PATsc + end +} bind def + +% right30 +11 dict begin +/PaintType 1 def +/PatternType 1 def +/TilingType 1 def +/BBox [0 0 1 1] def +/XStep 1 def +/YStep 1 def +/PatWidth 1 def +/PatHeight 1 def +/Multi 2 def +/PaintData [ + { clippath } bind + { 32 16 true [ 32 0 0 -16 0 16 ] + {<00030003000c000c0030003000c000c0030003000c000c00 + 30003000c000c00000030003000c000c0030003000c000c0 + 030003000c000c0030003000c000c000>} + imagemask } bind +] def +/PaintProc { + pop + exec fill +} def +currentdict +end +/P2 exch def + +% crosshatch45 +11 dict begin +/PaintType 1 def +/PatternType 1 def +/TilingType 1 def +/BBox [0 0 1 1] def +/XStep 1 def +/YStep 1 def +/PatWidth 1 def +/PatHeight 1 def +/Multi 2 def +/PaintData [ + { clippath } bind + { 20 20 true [ 20 0 0 -20 0 20 ] + {<8020004050102088201104400a02800401000a02 + 8011044020882040501080200040501020882011 + 04400a02800401000a0280110440208820405010>} + imagemask } bind +] def +/PaintProc { + pop + exec fill +} def +currentdict +end +/P6 exch def + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +/pageheader { +save +newpath 0 179 moveto 0 0 lineto 363 0 lineto 363 179 lineto closepath clip newpath +-194.8 350.2 translate +1 -1 scale +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06299 0.06299 sc +} bind def +/pagefooter { +$F2psEnd +restore +} bind def +%%EndProlog +pageheader +% +% Fig objects follow +% +% +% here starts figure with depth 50 +% Arc +7.500 slw +0 slc +gs clippath +3662 4014 m 3567 4132 l 3613 4170 l 3708 4052 l 3708 4052 l 3610 4127 l 3662 4014 l cp +eoclip +n 5895.0 5917.5 2902.8 -37.7581 -142.2419 arcn +gs col0 s gr + gr + +% arrowhead +0 slj +n 3662 4014 m 3610 4127 l 3708 4052 l 3662 4014 l cp gs 0.00 setgray ef gr col0 s +% Polyline +n 3105 4140 m 6660 4140 l 6660 5085 l 3105 5085 l + cp gs col0 s gr +% Polyline +n 6660 4140 m 8730 4140 l 8730 5085 l 6660 5085 l + cp gs col7 0.50 shd ef gr gs col0 s gr +% Polyline +n 3510 4140 m 3780 4140 l 3780 5085 l 3510 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P2 [16 0 0 -8 234.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +% Polyline +n 4365 4140 m 4635 4140 l 4635 5085 l 4365 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P2 [16 0 0 -8 291.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +% Polyline +n 4905 4140 m 5265 4140 l 5265 5085 l 4905 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P2 [16 0 0 -8 327.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +% Polyline +n 7965 4140 m 8370 4140 l 8370 5085 l 7965 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P6 [16 0 0 -16 531.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +/Times-Roman ff 180.00 scf sf +3510 5490 m +gs 1 -1 sc (gawk Main Program Address Space) col0 sh gr +/Times-Roman ff 180.00 scf sf +7290 5490 m +gs 1 -1 sc (Extension) col0 sh gr +/Courier-Bold ff 180.00 scf sf +3420 2880 m +gs 1 -1 sc (register_ext_func\({ "chdir", do_chdir, 1 }\);) col0 sh gr +% here ends figure; +pagefooter +showpage +%%Trailer +end +%EOF diff --git a/doc/gawk_api-figure2.fig b/doc/gawk_api-figure2.fig new file mode 100644 index 00000000..2ae60854 --- /dev/null +++ b/doc/gawk_api-figure2.fig @@ -0,0 +1,26 @@ +#FIG 3.2 Produced by xfig version 3.2.5b +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 0 5895.000 5917.500 8190 4140 5940 3015 3600 4140 + 1 1 1.00 60.00 120.00 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3105 4140 6660 4140 6660 5085 3105 5085 3105 4140 +2 2 0 1 0 7 50 -1 10 0.000 0 0 -1 0 0 5 + 6660 4140 8730 4140 8730 5085 6660 5085 6660 4140 +2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 + 3510 4140 3780 4140 3780 5085 3510 5085 3510 4140 +2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 + 4365 4140 4635 4140 4635 5085 4365 5085 4365 4140 +2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 + 4905 4140 5265 4140 5265 5085 4905 5085 4905 4140 +2 2 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 5 + 7965 4140 8370 4140 8370 5085 7965 5085 7965 4140 +4 0 0 50 -1 0 12 0.0000 4 180 2850 3510 5490 gawk Main Program Address Space\001 +4 0 0 50 -1 0 12 0.0000 4 135 825 7290 5490 Extension\001 +4 0 0 50 -1 14 12 0.0000 4 165 5280 3420 2880 register_ext_func({ "chdir", do_chdir, 1 });\001 diff --git a/doc/gawk_api-figure2.pdf b/doc/gawk_api-figure2.pdf new file mode 100644 index 00000000..20462856 Binary files /dev/null and b/doc/gawk_api-figure2.pdf differ diff --git a/doc/gawk_api-figure2.png b/doc/gawk_api-figure2.png new file mode 100644 index 00000000..a6e28c98 Binary files /dev/null and b/doc/gawk_api-figure2.png differ diff --git a/doc/gawk_api-figure2.txt b/doc/gawk_api-figure2.txt new file mode 100644 index 00000000..5ed8e2a8 --- /dev/null +++ b/doc/gawk_api-figure2.txt @@ -0,0 +1,12 @@ + register_ext_func({ "chdir", do_chdir, 1 }); + + +--------------------------------------------+ + | | + V | ++-------+-+---+-+---+-+------------------+--------------+-+---+ +| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| +| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| +| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| ++-------+-+---+-+---+-+------------------+--------------+-+---+ + + gawk Main Program Address Space Extension diff --git a/doc/gawk_api-figure3.eps b/doc/gawk_api-figure3.eps new file mode 100644 index 00000000..d713575f --- /dev/null +++ b/doc/gawk_api-figure3.eps @@ -0,0 +1,526 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Title: api-figure3.fig +%%Creator: fig2dev Version 3.2 Patchlevel 5d +%%CreationDate: Wed Oct 31 20:16:08 2012 +%%BoundingBox: 0 0 356 175 +%Magnification: 1.0000 +%%EndComments +%%BeginProlog +/MyAppDict 100 dict dup begin def +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end + +% This junk string is used by the show operators +/PATsstr 1 string def +/PATawidthshow { % cx cy cchar rx ry string + % Loop over each character in the string + { % cx cy cchar rx ry char + % Show the character + dup % cx cy cchar rx ry char char + PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char) + false charpath % cx cy cchar rx ry char + /clip load PATdraw + % Move past the character (charpath modified the + % current point) + currentpoint % cx cy cchar rx ry char x y + newpath + moveto % cx cy cchar rx ry char + % Reposition by cx,cy if the character in the string is cchar + 3 index eq { % cx cy cchar rx ry + 4 index 4 index rmoveto + } if + % Reposition all characters by rx ry + 2 copy rmoveto % cx cy cchar rx ry + } forall + pop pop pop pop pop % - + currentpoint + newpath + moveto +} bind def +/PATcg { + 7 dict dup begin + /lw currentlinewidth def + /lc currentlinecap def + /lj currentlinejoin def + /ml currentmiterlimit def + /ds [ currentdash ] def + /cc [ currentrgbcolor ] def + /cm matrix currentmatrix def + end +} bind def +% PATdraw - calculates the boundaries of the object and +% fills it with the current pattern +/PATdraw { % proc + save exch + PATpcalc % proc nw nh px py + 5 -1 roll exec % nw nh px py + newpath + PATfill % - + restore +} bind def +% PATfill - performs the tiling for the shape +/PATfill { % nw nh px py PATfill - + PATDict /CurrentPattern get dup begin + setfont + % Set the coordinate system to Pattern Space + PatternGState PATsg + % Set the color for uncolored pattezns + PaintType 2 eq { PATDict /PColor get PATsc } if + % Create the string for showing + 3 index string % nw nh px py str + % Loop for each of the pattern sources + 0 1 Multi 1 sub { % nw nh px py str source + % Move to the starting location + 3 index 3 index % nw nh px py str source px py + moveto % nw nh px py str source + % For multiple sources, set the appropriate color + Multi 1 ne { dup PC exch get PATsc } if + % Set the appropriate string for the source + 0 1 7 index 1 sub { 2 index exch 2 index put } for pop + % Loop over the number of vertical cells + 3 index % nw nh px py str nh + { % nw nh px py str + currentpoint % nw nh px py str cx cy + 2 index oldshow % nw nh px py str cx cy + YStep add moveto % nw nh px py str + } repeat % nw nh px py str + } for + 5 { pop } repeat + end +} bind def + +% PATkshow - kshow with the current pattezn +/PATkshow { % proc string + exch bind % string proc + 1 index 0 get % string proc char + % Loop over all but the last character in the string + 0 1 4 index length 2 sub { + % string proc char idx + % Find the n+1th character in the string + 3 index exch 1 add get % string proc char char+1 + exch 2 copy % strinq proc char+1 char char+1 char + % Now show the nth character + PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr) + false charpath % string proc char+1 char char+1 + /clip load PATdraw + % Move past the character (charpath modified the current point) + currentpoint newpath moveto + % Execute the user proc (should consume char and char+1) + mark 3 1 roll % string proc char+1 mark char char+1 + 4 index exec % string proc char+1 mark... + cleartomark % string proc char+1 + } for + % Now display the last character + PATsstr dup 0 4 -1 roll put % string proc (char+1) + false charpath % string proc + /clip load PATdraw + neewath + pop pop % - +} bind def +% PATmp - the makepattern equivalent +/PATmp { % patdict patmtx PATmp patinstance + exch dup length 7 add % We will add 6 new entries plus 1 FID + dict copy % Create a new dictionary + begin + % Matrix to install when painting the pattern + TilingType PATtcalc + /PatternGState PATcg def + PatternGState /cm 3 -1 roll put + % Check for multi pattern sources (Level 1 fast color patterns) + currentdict /Multi known not { /Multi 1 def } if + % Font dictionary definitions + /FontType 3 def + % Create a dummy encoding vector + /Encoding 256 array def + 3 string 0 1 255 { + Encoding exch dup 3 index cvs cvn put } for pop + /FontMatrix matrix def + /FontBBox BBox def + /BuildChar { + mark 3 1 roll % mark dict char + exch begin + Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata] + PaintType 2 eq Multi 1 ne or + { XStep 0 FontBBox aload pop setcachedevice } + { XStep 0 setcharwidth } ifelse + currentdict % mark [paintdata] dict + /PaintProc load % mark [paintdata] dict paintproc + end + gsave + false PATredef exec true PATredef + grestore + cleartomark % - + } bind def + currentdict + end % newdict + /foo exch % /foo newlict + definefont % newfont +} bind def +% PATpcalc - calculates the starting point and width/height +% of the tile fill for the shape +/PATpcalc { % - PATpcalc nw nh px py + PATDict /CurrentPattern get begin + gsave + % Set up the coordinate system to Pattern Space + % and lock down pattern + PatternGState /cm get setmatrix + BBox aload pop pop pop translate + % Determine the bounding box of the shape + pathbbox % llx lly urx ury + grestore + % Determine (nw, nh) the # of cells to paint width and height + PatHeight div ceiling % llx lly urx qh + 4 1 roll % qh llx lly urx + PatWidth div ceiling % qh llx lly qw + 4 1 roll % qw qh llx lly + PatHeight div floor % qw qh llx ph + 4 1 roll % ph qw qh llx + PatWidth div floor % ph qw qh pw + 4 1 roll % pw ph qw qh + 2 index sub cvi abs % pw ph qs qh-ph + exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph + % Determine the starting point of the pattern fill + %(px, py) + 4 2 roll % nw nh pw ph + PatHeight mul % nw nh pw py + exch % nw nh py pw + PatWidth mul exch % nw nh px py + end +} bind def + +% Save the original routines so that we can use them later on +/oldfill /fill load def +/oldeofill /eofill load def +/oldstroke /stroke load def +/oldshow /show load def +/oldashow /ashow load def +/oldwidthshow /widthshow load def +/oldawidthshow /awidthshow load def +/oldkshow /kshow load def + +% These defs are necessary so that subsequent procs don't bind in +% the originals +/fill { oldfill } bind def +/eofill { oldeofill } bind def +/stroke { oldstroke } bind def +/show { oldshow } bind def +/ashow { oldashow } bind def +/widthshow { oldwidthshow } bind def +/awidthshow { oldawidthshow } bind def +/kshow { oldkshow } bind def +/PATredef { + MyAppDict begin + { + /fill { /clip load PATdraw newpath } bind def + /eofill { /eoclip load PATdraw newpath } bind def + /stroke { PATstroke } bind def + /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def + /ashow { 0 0 null 6 3 roll PATawidthshow } + bind def + /widthshow { 0 0 3 -1 roll PATawidthshow } + bind def + /awidthshow { PATawidthshow } bind def + /kshow { PATkshow } bind def + } { + /fill { oldfill } bind def + /eofill { oldeofill } bind def + /stroke { oldstroke } bind def + /show { oldshow } bind def + /ashow { oldashow } bind def + /widthshow { oldwidthshow } bind def + /awidthshow { oldawidthshow } bind def + /kshow { oldkshow } bind def + } ifelse + end +} bind def +false PATredef +% Conditionally define setcmykcolor if not available +/setcmykcolor where { pop } { + /setcmykcolor { + 1 sub 4 1 roll + 3 { + 3 index add neg dup 0 lt { pop 0 } if 3 1 roll + } repeat + setrgbcolor - pop + } bind def +} ifelse +/PATsc { % colorarray + aload length % c1 ... cn length + dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor + } ifelse } ifelse +} bind def +/PATsg { % dict + begin + lw setlinewidth + lc setlinecap + lj setlinejoin + ml setmiterlimit + ds aload pop setdash + cc aload pop setrgbcolor + cm setmatrix + end +} bind def + +/PATDict 3 dict def +/PATsp { + true PATredef + PATDict begin + /CurrentPattern exch def + % If it's an uncolored pattern, save the color + CurrentPattern /PaintType get 2 eq { + /PColor exch def + } if + /CColor [ currentrgbcolor ] def + end +} bind def +% PATstroke - stroke with the current pattern +/PATstroke { + countdictstack + save + mark + { + currentpoint strokepath moveto + PATpcalc % proc nw nh px py + clip newpath PATfill + } stopped { + (*** PATstroke Warning: Path is too complex, stroking + with gray) = + cleartomark + restore + countdictstack exch sub dup 0 gt + { { end } repeat } { pop } ifelse + gsave 0.5 setgray oldstroke grestore + } { pop restore pop } ifelse + newpath +} bind def +/PATtcalc { % modmtx tilingtype PATtcalc tilematrix + % Note: tiling types 2 and 3 are not supported + gsave + exch concat % tilingtype + matrix currentmatrix exch % cmtx tilingtype + % Tiling type 1 and 3: constant spacing + 2 ne { + % Distort the pattern so that it occupies + % an integral number of device pixels + dup 4 get exch dup 5 get exch % tx ty cmtx + XStep 0 dtransform + round exch round exch % tx ty cmtx dx.x dx.y + XStep div exch XStep div exch % tx ty cmtx a b + 0 YStep dtransform + round exch round exch % tx ty cmtx a b dy.x dy.y + YStep div exch YStep div exch % tx ty cmtx a b c d + 7 -3 roll astore % { a b c d tx ty } + } if + grestore +} bind def +/PATusp { + false PATredef + PATDict begin + CColor PATsc + end +} bind def + +% right30 +11 dict begin +/PaintType 1 def +/PatternType 1 def +/TilingType 1 def +/BBox [0 0 1 1] def +/XStep 1 def +/YStep 1 def +/PatWidth 1 def +/PatHeight 1 def +/Multi 2 def +/PaintData [ + { clippath } bind + { 32 16 true [ 32 0 0 -16 0 16 ] + {<00030003000c000c0030003000c000c0030003000c000c00 + 30003000c000c00000030003000c000c0030003000c000c0 + 030003000c000c0030003000c000c000>} + imagemask } bind +] def +/PaintProc { + pop + exec fill +} def +currentdict +end +/P2 exch def + +% crosshatch45 +11 dict begin +/PaintType 1 def +/PatternType 1 def +/TilingType 1 def +/BBox [0 0 1 1] def +/XStep 1 def +/YStep 1 def +/PatWidth 1 def +/PatHeight 1 def +/Multi 2 def +/PaintData [ + { clippath } bind + { 20 20 true [ 20 0 0 -20 0 20 ] + {<8020004050102088201104400a02800401000a02 + 8011044020882040501080200040501020882011 + 04400a02800401000a0280110440208820405010>} + imagemask } bind +] def +/PaintProc { + pop + exec fill +} def +currentdict +end +/P6 exch def + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +/pageheader { +save +newpath 0 175 moveto 0 0 lineto 356 0 lineto 356 175 lineto closepath clip newpath +-194.8 350.2 translate +1 -1 scale +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06299 0.06299 sc +} bind def +/pagefooter { +$F2psEnd +restore +} bind def +%%EndProlog +pageheader +% +% Fig objects follow +% +% +% here starts figure with depth 50 +% Arc +7.500 slw +0 slc +gs clippath +8019 4079 m 8138 4172 l 8175 4125 l 8056 4032 l 8056 4032 l 8132 4130 l 8019 4079 l cp +eoclip +n 6120.0 6627.7 3207.7 -129.1463 -50.8537 arc +gs col0 s gr + gr + +% arrowhead +0 slj +n 8019 4079 m 8132 4130 l 8056 4032 l 8019 4079 l cp gs 0.00 setgray ef gr col0 s +% Polyline +n 3105 4140 m 6660 4140 l 6660 5085 l 3105 5085 l + cp gs col0 s gr +% Polyline +n 6660 4140 m 8730 4140 l 8730 5085 l 6660 5085 l + cp gs col7 0.50 shd ef gr gs col0 s gr +% Polyline +n 3510 4140 m 3780 4140 l 3780 5085 l 3510 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P2 [16 0 0 -8 234.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +% Polyline +n 4365 4140 m 4635 4140 l 4635 5085 l 4365 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P2 [16 0 0 -8 291.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +% Polyline +n 4905 4140 m 5265 4140 l 5265 5085 l 4905 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P2 [16 0 0 -8 327.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +% Polyline +n 7965 4140 m 8370 4140 l 8370 5085 l 7965 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P6 [16 0 0 -16 531.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +/Times-Roman ff 180.00 scf sf +3510 5490 m +gs 1 -1 sc (gawk Main Program Address Space) col0 sh gr +/Times-Roman ff 180.00 scf sf +7290 5490 m +gs 1 -1 sc (Extension) col0 sh gr +/Courier-Bold ff 180.00 scf sf +3240 3150 m +gs 1 -1 sc ( chdir\("/path"\)) col0 sh gr +/Courier-Bold ff 180.00 scf sf +3330 3375 m +gs 1 -1 sc (}) col0 sh gr +/Courier-Bold ff 180.00 scf sf +3375 2925 m +gs 1 -1 sc (BEGIN {) col0 sh gr +/Courier-Bold ff 180.00 scf sf +6660 3150 m +gs 1 -1 sc (\(*fnptr\)\(1\);) col0 sh gr +% here ends figure; +pagefooter +showpage +%%Trailer +end +%EOF diff --git a/doc/gawk_api-figure3.fig b/doc/gawk_api-figure3.fig new file mode 100644 index 00000000..5c7fdd97 --- /dev/null +++ b/doc/gawk_api-figure3.fig @@ -0,0 +1,29 @@ +#FIG 3.2 Produced by xfig version 3.2.5b +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +5 1 0 1 0 7 50 -1 -1 0.000 0 0 1 0 6120.000 6627.656 4095 4140 6120 3420 8145 4140 + 1 1 1.00 60.00 120.00 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3105 4140 6660 4140 6660 5085 3105 5085 3105 4140 +2 2 0 1 0 7 50 -1 10 0.000 0 0 -1 0 0 5 + 6660 4140 8730 4140 8730 5085 6660 5085 6660 4140 +2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 + 3510 4140 3780 4140 3780 5085 3510 5085 3510 4140 +2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 + 4365 4140 4635 4140 4635 5085 4365 5085 4365 4140 +2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 + 4905 4140 5265 4140 5265 5085 4905 5085 4905 4140 +2 2 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 5 + 7965 4140 8370 4140 8370 5085 7965 5085 7965 4140 +4 0 0 50 -1 0 12 0.0000 4 180 2850 3510 5490 gawk Main Program Address Space\001 +4 0 0 50 -1 0 12 0.0000 4 135 825 7290 5490 Extension\001 +4 0 0 50 -1 14 12 0.0000 4 180 2160 3240 3150 chdir("/path")\001 +4 0 0 50 -1 14 12 0.0000 4 150 120 3330 3375 }\001 +4 0 0 50 -1 14 12 0.0000 4 150 840 3375 2925 BEGIN {\001 +4 0 0 50 -1 14 12 0.0000 4 165 1440 6660 3150 (*fnptr)(1);\001 diff --git a/doc/gawk_api-figure3.pdf b/doc/gawk_api-figure3.pdf new file mode 100644 index 00000000..517b2ecc Binary files /dev/null and b/doc/gawk_api-figure3.pdf differ diff --git a/doc/gawk_api-figure3.png b/doc/gawk_api-figure3.png new file mode 100644 index 00000000..f7db0794 Binary files /dev/null and b/doc/gawk_api-figure3.png differ diff --git a/doc/gawk_api-figure3.txt b/doc/gawk_api-figure3.txt new file mode 100644 index 00000000..a601ce94 --- /dev/null +++ b/doc/gawk_api-figure3.txt @@ -0,0 +1,13 @@ + BEGIN { + chdir("/path") (*fnptr)(1); + } + +--------------------------------------------+ + | | + | V ++-------+-+---+-+---+-+------------------+--------------+-+---+ +| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| +| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| +| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| ++-------+-+---+-+---+-+------------------+--------------+-+---+ + + gawk Main Program Address Space Extension diff --git a/doc/gawk_array-elements.eps b/doc/gawk_array-elements.eps new file mode 100644 index 00000000..041c0b39 --- /dev/null +++ b/doc/gawk_array-elements.eps @@ -0,0 +1,158 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Title: array-elements.fig +%%Creator: fig2dev Version 3.2 Patchlevel 5d +%%CreationDate: Sun May 4 22:46:26 2014 +%%BoundingBox: 0 0 379 76 +%Magnification: 1.0000 +%%EndComments +%%BeginProlog +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +/pageheader { +save +newpath 0 76 moveto 0 0 lineto 379 0 lineto 379 76 lineto closepath clip newpath +-203.3 199.4 translate +1 -1 scale +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06299 0.06299 sc +} bind def +/pagefooter { +$F2psEnd +restore +} bind def +%%EndProlog +pageheader +% +% Fig objects follow +% +% +% here starts figure with depth 50 +% Polyline +0 slj +0 slc +7.500 slw +n 4455 1980 m 4455 2700 l 4455 2655 l + 4455 2700 l gs col0 s gr +% Polyline +n 6075 1980 m + 6075 2700 l gs col0 s gr +% Polyline +n 7425 1980 m + 7425 2700 l gs col0 s gr +/Courier-Bold ff 180.00 scf sf +3735 2340 m +gs 1 -1 sc (8) col0 sh gr +/Courier-Bold ff 180.00 scf sf +5175 2340 m +gs 1 -1 sc ("foo") col0 sh gr +/Courier-Bold ff 180.00 scf sf +6795 2340 m +gs 1 -1 sc ("") col0 sh gr +/Courier-Bold ff 180.00 scf sf +7875 2340 m +gs 1 -1 sc (30) col0 sh gr +/Times-Roman ff 180.00 scf sf +3735 3150 m +gs 1 -1 sc (0) col0 sh gr +/Times-Roman ff 180.00 scf sf +5175 3150 m +gs 1 -1 sc (1) col0 sh gr +/Times-Roman ff 180.00 scf sf +6795 3150 m +gs 1 -1 sc (2) col0 sh gr +/Times-Roman ff 180.00 scf sf +7875 3150 m +gs 1 -1 sc (3) col0 sh gr +/Times-Roman ff 180.00 scf sf +8730 2340 m +gs 1 -1 sc (Value) col0 sh gr +/Times-Roman ff 180.00 scf sf +8730 3150 m +gs 1 -1 sc (Index) col0 sh gr +% here ends figure; +% +% here starts figure with depth 40 +% Polyline +0 slj +0 slc +7.500 slw +n 3240 1980 m 8415 1980 l 8415 2700 l 3240 2700 l + cp gs col0 s gr +% here ends figure; +pagefooter +showpage +%%Trailer +%EOF diff --git a/doc/gawk_array-elements.fig b/doc/gawk_array-elements.fig new file mode 100644 index 00000000..63b5ffbf --- /dev/null +++ b/doc/gawk_array-elements.fig @@ -0,0 +1,27 @@ +#FIG 3.2 Produced by xfig version 3.2.5b +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +2 2 0 1 0 7 40 -1 -1 0.000 0 0 -1 0 0 5 + 3240 1980 8415 1980 8415 2700 3240 2700 3240 1980 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 + 4455 1980 4455 2700 4455 2655 4455 2700 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6075 1980 6075 2700 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 7425 1980 7425 2700 +4 0 0 50 -1 14 12 0.0000 4 120 120 3735 2340 8\001 +4 0 0 50 -1 14 12 0.0000 4 120 600 5175 2340 "foo"\001 +4 0 0 50 -1 14 12 0.0000 4 60 240 6795 2340 ""\001 +4 0 0 50 -1 14 12 0.0000 4 120 240 7875 2340 30\001 +4 0 0 50 -1 0 12 0.0000 4 135 105 3735 3150 0\001 +4 0 0 50 -1 0 12 0.0000 4 135 105 5175 3150 1\001 +4 0 0 50 -1 0 12 0.0000 4 135 105 6795 3150 2\001 +4 0 0 50 -1 0 12 0.0000 4 135 105 7875 3150 3\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 8730 2340 Value\001 +4 0 0 50 -1 0 12 0.0000 4 135 465 8730 3150 Index\001 diff --git a/doc/gawk_array-elements.pdf b/doc/gawk_array-elements.pdf new file mode 100644 index 00000000..328cbd1a Binary files /dev/null and b/doc/gawk_array-elements.pdf differ diff --git a/doc/gawk_array-elements.png b/doc/gawk_array-elements.png new file mode 100644 index 00000000..b57d66b7 Binary files /dev/null and b/doc/gawk_array-elements.png differ diff --git a/doc/gawk_array-elements.txt b/doc/gawk_array-elements.txt new file mode 100644 index 00000000..424c1708 --- /dev/null +++ b/doc/gawk_array-elements.txt @@ -0,0 +1,4 @@ ++---------+---------+--------+---------+ +| 8 | "foo" | "" | 30 | Value ++---------+---------+--------+---------+ + 0 1 2 3 Index diff --git a/doc/gawk_general-program.eps b/doc/gawk_general-program.eps new file mode 100644 index 00000000..12497168 --- /dev/null +++ b/doc/gawk_general-program.eps @@ -0,0 +1,153 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: general-program.fig +%%Creator: fig2dev Version 3.2 Patchlevel 5c +%%CreationDate: Thu Jan 6 17:36:07 2011 +%%BoundingBox: 0 0 269 58 +%Magnification: 1.0000 +%%EndComments +%%BeginProlog +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +/pageheader { +save +newpath 0 58 moveto 0 0 lineto 269 0 lineto 269 58 lineto closepath clip newpath +-194.8 247.1 translate +1 -1 scale +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06299 0.06299 sc +} bind def +/pagefooter { +$F2psEnd +restore +} bind def +%%EndProlog +pageheader +% +% Fig objects follow +% +% +% here starts figure with depth 50 +% Polyline +0 slj +0 slc +7.500 slw +n 4961 3021 m 4706 3467 l 4965 3911 l 5478 3908 l 5733 3462 l 5474 3018 l + + cp gs col0 s gr +% Polyline +gs clippath +4544 3495 m 4695 3495 l 4695 3435 l 4544 3435 l 4544 3435 l 4664 3465 l 4544 3495 l cp +eoclip +n 4095 3465 m + 4680 3465 l gs col0 s gr gr + +% arrowhead +n 4544 3495 m 4664 3465 l 4544 3435 l 4544 3495 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +6164 3495 m 6315 3495 l 6315 3435 l 6164 3435 l 6164 3435 l 6284 3465 l 6164 3495 l cp +eoclip +n 5805 3465 m + 6300 3465 l gs col0 s gr gr + +% arrowhead +n 6164 3495 m 6284 3465 l 6164 3435 l 6164 3495 l cp gs 0.00 setgray ef gr col0 s +% Polyline +n 6405 3150 m 6330 3150 6330 3704 75 arcto 4 {pop} repeat + 6330 3779 7274 3779 75 arcto 4 {pop} repeat + 7349 3779 7349 3225 75 arcto 4 {pop} repeat + 7349 3150 6405 3150 75 arcto 4 {pop} repeat + cp gs col0 s gr +% Polyline +n 3165 3195 m 3105 3195 3105 3719 60 arcto 4 {pop} repeat + 3105 3779 3992 3779 60 arcto 4 {pop} repeat + 4052 3779 4052 3255 60 arcto 4 {pop} repeat + 4052 3195 3165 3195 60 arcto 4 {pop} repeat + cp gs col0 s gr +/Times-Roman ff 180.00 scf sf +6525 3510 m +gs 1 -1 sc (Results) col0 sh gr +/Times-Roman ff 180.00 scf sf +3375 3510 m +gs 1 -1 sc (Data) col0 sh gr +/Times-Roman ff 180.00 scf sf +4860 3510 m +gs 1 -1 sc (Program) col0 sh gr +% here ends figure; +pagefooter +showpage +%%Trailer +%EOF diff --git a/doc/gawk_general-program.fig b/doc/gawk_general-program.fig new file mode 100644 index 00000000..8ab42f3d --- /dev/null +++ b/doc/gawk_general-program.fig @@ -0,0 +1,25 @@ +#FIG 3.2 Produced by xfig version 3.2.5b +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +2 3 0 1 0 7 50 -1 -1 0.000 0 0 0 0 0 7 + 4961 3021 4706 3467 4965 3911 5478 3908 5733 3462 5474 3018 + 4961 3021 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4095 3465 4680 3465 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 5805 3465 6300 3465 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 5 0 0 5 + 7349 3779 7349 3150 6330 3150 6330 3779 7349 3779 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 4 0 0 5 + 4052 3779 4052 3195 3105 3195 3105 3779 4052 3779 +4 0 0 50 -1 0 12 0.0000 4 150 630 6525 3510 Results\001 +4 0 0 50 -1 0 12 0.0000 4 150 420 3375 3510 Data\001 +4 0 0 50 -1 0 12 0.0000 4 195 750 4860 3510 Program\001 diff --git a/doc/gawk_general-program.pdf b/doc/gawk_general-program.pdf new file mode 100644 index 00000000..f4f7572c Binary files /dev/null and b/doc/gawk_general-program.pdf differ diff --git a/doc/gawk_general-program.png b/doc/gawk_general-program.png new file mode 100644 index 00000000..7737261f Binary files /dev/null and b/doc/gawk_general-program.png differ diff --git a/doc/gawk_general-program.txt b/doc/gawk_general-program.txt new file mode 100644 index 00000000..cb85c294 --- /dev/null +++ b/doc/gawk_general-program.txt @@ -0,0 +1,4 @@ + _______ ++------+ / \ +---------+ +| Data | -----> < Program > -----> | Results | ++------+ \_______/ +---------+ diff --git a/doc/gawk_process-flow.eps b/doc/gawk_process-flow.eps new file mode 100644 index 00000000..81b937ba --- /dev/null +++ b/doc/gawk_process-flow.eps @@ -0,0 +1,191 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: process-flow.fig +%%Creator: fig2dev Version 3.2 Patchlevel 5c +%%CreationDate: Thu Jan 6 17:25:09 2011 +%%BoundingBox: 0 0 367 174 +%Magnification: 1.0000 +%%EndComments +%%BeginProlog +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +/pageheader { +save +newpath 0 174 moveto 0 0 lineto 367 0 lineto 367 174 lineto closepath clip newpath +-161.1 355.1 translate +1 -1 scale +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06299 0.06299 sc +} bind def +/pagefooter { +$F2psEnd +restore +} bind def +%%EndProlog +pageheader +% +% Fig objects follow +% +% +% here starts figure with depth 50 +% Polyline +0 slj +0 slc +7.500 slw +n 4819 3540 m 5460 4181 l 6101 3540 l 5460 2899 l 4819 3540 l + cp gs col0 s gr +% Polyline +gs clippath +4634 3585 m 4785 3585 l 4785 3525 l 4634 3525 l 4634 3525 l 4754 3555 l 4634 3585 l cp +eoclip +n 3960 3555 m + 4770 3555 l gs col0 s gr gr + +% arrowhead +n 4634 3585 m 4754 3555 l 4634 3525 l 4634 3585 l cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +6839 3585 m 6990 3585 l 6990 3525 l 6839 3525 l 6839 3525 l 6959 3555 l 6839 3585 l cp +eoclip +n 6165 3555 m + 6975 3555 l gs col0 s gr gr + +% arrowhead +n 6839 3585 m 6959 3555 l 6839 3525 l 6839 3585 l cp gs 0.00 setgray ef gr col0 s +% Polyline +n 2644 3240 m 2569 3240 2569 3802 75 arcto 4 {pop} repeat + 2569 3877 3835 3877 75 arcto 4 {pop} repeat + 3910 3877 3910 3315 75 arcto 4 {pop} repeat + 3910 3240 2644 3240 75 arcto 4 {pop} repeat + cp gs col0 s gr +% Polyline +n 7095 3240 m 7020 3240 7020 3806 75 arcto 4 {pop} repeat + 7020 3881 8294 3881 75 arcto 4 {pop} repeat + 8369 3881 8369 3315 75 arcto 4 {pop} repeat + 8369 3240 7095 3240 75 arcto 4 {pop} repeat + cp gs col0 s gr +% Polyline +gs clippath +5460 4904 m 5460 5055 l 5520 5055 l 5520 4904 l 5520 4904 l 5490 5024 l 5460 4904 l cp +eoclip +n 5490 4230 m + 5490 5040 l gs col0 s gr gr + +% arrowhead +n 5460 4904 m 5490 5024 l 5520 4904 l 5460 4904 l cp gs 0.00 setgray ef gr col0 s +% Polyline +n 5028 5067 m 4953 5067 4953 5550 75 arcto 4 {pop} repeat + 4953 5625 5905 5625 75 arcto 4 {pop} repeat + 5980 5625 5980 5142 75 arcto 4 {pop} repeat + 5980 5067 5028 5067 75 arcto 4 {pop} repeat + cp gs col0 s gr +% Polyline +gs clippath +4305 3736 m 4305 3585 l 4245 3585 l 4245 3736 l 4245 3736 l 4275 3616 l 4305 3736 l cp +eoclip +n 4905 5355 m 4275 5355 l + 4275 3600 l gs col0 s gr gr + +% arrowhead +n 4305 3736 m 4275 3616 l 4245 3736 l 4305 3736 l cp gs 0.00 setgray ef gr col0 s +/Times-Roman ff 180.00 scf sf +5265 3375 m +gs 1 -1 sc (More) col0 sh gr +/Times-Roman ff 180.00 scf sf +5265 3630 m +gs 1 -1 sc (Data) col0 sh gr +/Times-Roman ff 180.00 scf sf +5265 3885 m +gs 1 -1 sc ( ?) col0 sh gr +/Times-Roman ff 180.00 scf sf +6210 3465 m +gs 1 -1 sc (No) col0 sh gr +/Times-Roman ff 180.00 scf sf +5535 4455 m +gs 1 -1 sc (Yes) col0 sh gr +/Times-Roman ff 180.00 scf sf +2745 3645 m +gs 1 -1 sc (Initialization) col0 sh gr +/Times-Roman ff 180.00 scf sf +7290 3600 m +gs 1 -1 sc (Clean Up) col0 sh gr +/Times-Roman ff 180.00 scf sf +5130 5400 m +gs 1 -1 sc (Process) col0 sh gr +% here ends figure; +pagefooter +showpage +%%Trailer +%EOF diff --git a/doc/gawk_process-flow.fig b/doc/gawk_process-flow.fig new file mode 100644 index 00000000..b6613137 --- /dev/null +++ b/doc/gawk_process-flow.fig @@ -0,0 +1,37 @@ +#FIG 3.2 Produced by xfig version 3.2.5b +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +2 3 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 6 + 4819 3540 5460 4181 6101 3540 5460 2899 4819 3540 4819 3540 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3960 3555 4770 3555 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6165 3555 6975 3555 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 5 0 0 5 + 2569 3240 2569 3877 3910 3877 3910 3240 2569 3240 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 5 0 0 5 + 7020 3240 7020 3881 8369 3881 8369 3240 7020 3240 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 5490 4230 5490 5040 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 5 0 0 5 + 4953 5067 4953 5625 5980 5625 5980 5067 4953 5067 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 3 + 1 1 1.00 60.00 120.00 + 4905 5355 4275 5355 4275 3600 +4 0 0 50 -1 0 12 0.0000 4 150 480 5265 3375 More\001 +4 0 0 50 -1 0 12 0.0000 4 150 420 5265 3630 Data\001 +4 0 0 50 -1 0 12 0.0000 4 150 270 5265 3885 ?\001 +4 0 0 50 -1 0 12 0.0000 4 150 270 6210 3465 No\001 +4 0 0 50 -1 0 12 0.0000 4 150 330 5535 4455 Yes\001 +4 0 0 50 -1 0 12 0.0000 4 150 1035 2745 3645 Initialization\001 +4 0 0 50 -1 0 12 0.0000 4 195 810 7290 3600 Clean Up\001 +4 0 0 50 -1 0 12 0.0000 4 150 690 5130 5400 Process\001 diff --git a/doc/gawk_process-flow.pdf b/doc/gawk_process-flow.pdf new file mode 100644 index 00000000..3ff5f9e8 Binary files /dev/null and b/doc/gawk_process-flow.pdf differ diff --git a/doc/gawk_process-flow.png b/doc/gawk_process-flow.png new file mode 100644 index 00000000..97f467f4 Binary files /dev/null and b/doc/gawk_process-flow.png differ diff --git a/doc/gawk_process-flow.txt b/doc/gawk_process-flow.txt new file mode 100644 index 00000000..d7296385 --- /dev/null +++ b/doc/gawk_process-flow.txt @@ -0,0 +1,11 @@ + ______ ++----------------+ / More \ No +----------+ +| Initialization | -------> < Data > -------> | Clean Up | ++----------------+ ^ \ ? / +----------+ + | +--+-+ + | | Yes + | | + | V + | +---------+ + +-----+ Process | + +---------+ diff --git a/doc/gawk_statist.eps b/doc/gawk_statist.eps new file mode 100644 index 00000000..1e1f09fa --- /dev/null +++ b/doc/gawk_statist.eps @@ -0,0 +1,557 @@ +%!PS-Adobe-2.0 +%%Creator: gnuplot 3.7 patchlevel 0.1 +%%CreationDate: Sun Jan 7 14:23:12 2001 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 770 +%%Orientation: Portrait +%%Pages: (atend) +%%EndComments +/gnudict 256 dict def +gnudict begin +/Color true def +/Solid false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/vshift -46 def +/dl {10 mul} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow { currentpoint stroke M + 0 vshift R show } def +/Rshow { currentpoint stroke M + dup stringwidth pop neg vshift R show } def +/Cshow { currentpoint stroke M + dup stringwidth pop -2 div vshift R show } def +/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def +/DL { Color {setrgbcolor Solid {pop []} if 0 setdash } + {pop pop pop Solid {pop []} if 0 setdash} ifelse } def +/BL { stroke gnulinewidth 2 mul setlinewidth } def +/AL { stroke gnulinewidth 2 div setlinewidth } def +/UL { gnulinewidth mul /userlinewidth exch def } def +/PL { stroke userlinewidth setlinewidth } def +/LTb { BL [] 0 0 0 DL } def +/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def +/LT0 { PL [] 1 0 0 DL } def +/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def +/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def +/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def +/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def +/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def +/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def +/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def +/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def +/Pnt { stroke [] 0 setdash + gsave 1 setlinecap M 0 0 V stroke grestore } def +/Dia { stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt } def +/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt } def +/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke } def +/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt } def +/Star { 2 copy Pls Crs } def +/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill } def +/TriUF { stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill } def +/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt } def +/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF { stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill } def +/Pent { stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt } def +/PentF { stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore } def +/Circle { stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt } def +/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def +/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def +/C1 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath } bind def +/C2 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath } bind def +/C3 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath } bind def +/C4 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath } bind def +/C5 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc } bind def +/C6 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath } bind def +/C7 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath } bind def +/C8 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C9 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath } bind def +/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath } bind def +/C11 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C12 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C13 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C14 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc } bind def +/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath } bind def +/Square { dup Rec } bind def +/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def +/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def +/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def +/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def +/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def +/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def +/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def +/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def +/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill + Bsquare } bind def +/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def +/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def +/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare } bind def +/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare } bind def +/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def +/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare } bind def +/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def +/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def +/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def +/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def +/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def +/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def +/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def +/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def +/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def +/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def +/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def +/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def +/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def +/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def +/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def +/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def +/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def +/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def +/DiaE { stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke } def +/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke } def +/TriUE { stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke } def +/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke } def +/PentE { stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore } def +/CircE { stroke [] 0 setdash + hpt 0 360 arc stroke } def +/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def +/DiaW { stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke } def +/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke } def +/TriUW { stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke } def +/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke } def +/PentW { stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore } def +/CircW { stroke [] 0 setdash + hpt 0 360 arc Opaque stroke } def +/BoxFill { gsave Rec 1 setgray fill grestore } def +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +1.000 UL +LTb +574 280 M +63 0 V +4165 0 R +-63 0 V +490 280 M +(-0.3) Rshow +574 1245 M +63 0 V +4165 0 R +-63 0 V +-4249 0 R +(-0.2) Rshow +574 2209 M +63 0 V +4165 0 R +-63 0 V +-4249 0 R +(-0.1) Rshow +574 3174 M +63 0 V +4165 0 R +-63 0 V +-4249 0 R +(0) Rshow +574 4138 M +63 0 V +4165 0 R +-63 0 V +-4249 0 R +(0.1) Rshow +574 5103 M +63 0 V +4165 0 R +-63 0 V +-4249 0 R +(0.2) Rshow +574 6067 M +63 0 V +4165 0 R +-63 0 V +-4249 0 R +(0.3) Rshow +574 7032 M +63 0 V +4165 0 R +-63 0 V +-4249 0 R +(0.4) Rshow +574 280 M +0 63 V +0 6689 R +0 -63 V +574 140 M +(-10) Cshow +1631 280 M +0 63 V +0 6689 R +0 -63 V +0 -6829 R +(-5) Cshow +2688 280 M +0 63 V +0 6689 R +0 -63 V +0 -6829 R +(0) Cshow +3745 280 M +0 63 V +0 6689 R +0 -63 V +0 -6829 R +(5) Cshow +4802 280 M +0 63 V +0 6689 R +0 -63 V +0 -6829 R +(10) Cshow +1.000 UL +LTb +574 280 M +4228 0 V +0 6752 V +-4228 0 V +574 280 L +2688 2209 M +(p\(m1=m2\) =0.0863798346775753) Lshow +2688 1245 M +(p\(v1=v2\) =0.31647637745891) Lshow +1.000 UL +LT0 +4151 6899 M +(sample 1) Rshow +4235 6899 M +399 0 V +574 3174 M +43 0 V +42 0 V +43 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +43 0 V +42 1 V +43 2 V +43 4 V +42 8 V +43 13 V +43 24 V +42 41 V +43 65 V +43 101 V +43 146 V +42 205 V +43 271 V +43 340 V +42 404 V +43 450 V +43 470 V +43 452 V +42 390 V +43 288 V +43 153 V +42 0 V +43 -153 V +43 -288 V +42 -390 V +43 -452 V +43 -470 V +43 -450 V +42 -404 V +43 -340 V +43 -271 V +42 -205 V +43 -146 V +43 -101 V +43 -65 V +42 -41 V +43 -24 V +43 -13 V +42 -8 V +43 -4 V +43 -2 V +42 -1 V +43 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +43 0 V +42 0 V +43 0 V +1.000 UL +LT1 +4151 6759 M +(sample 2) Rshow +4235 6759 M +399 0 V +574 3174 M +43 0 V +42 0 V +43 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +42 0 V +43 1 V +43 1 V +43 1 V +42 3 V +43 4 V +43 6 V +42 9 V +43 13 V +43 19 V +42 27 V +43 37 V +43 51 V +43 66 V +42 85 V +43 106 V +43 130 V +42 155 V +43 179 V +43 201 V +43 219 V +42 231 V +43 236 V +43 229 V +42 214 V +43 187 V +43 149 V +42 104 V +43 52 V +43 -3 V +43 -57 V +42 -109 V +43 -154 V +43 -189 V +42 -216 V +43 -231 V +43 -235 V +43 -231 V +42 -217 V +43 -199 V +43 -177 V +42 -152 V +43 -127 V +43 -104 V +42 -83 V +43 -65 V +43 -49 V +43 -36 V +42 -26 V +43 -19 V +43 -12 V +42 -9 V +43 -6 V +43 -3 V +43 -3 V +42 -1 V +43 -1 V +43 -1 V +42 0 V +43 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +42 0 V +43 0 V +43 0 V +43 0 V +42 0 V +43 0 V +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/doc/gawk_statist.jpg b/doc/gawk_statist.jpg new file mode 100644 index 00000000..92428f25 Binary files /dev/null and b/doc/gawk_statist.jpg differ diff --git a/doc/gawk_statist.pdf b/doc/gawk_statist.pdf new file mode 100644 index 00000000..2122a33a Binary files /dev/null and b/doc/gawk_statist.pdf differ diff --git a/doc/gawk_statist.txt b/doc/gawk_statist.txt new file mode 100644 index 00000000..261019d6 --- /dev/null +++ b/doc/gawk_statist.txt @@ -0,0 +1,23 @@ + 0.4 ,------------.------------_------------.------------, + | : : sample 1 :::: | + | : : sample 2 ---- | + 0.3 |- : :_ -| + | : ,: `, | + | : / : \ | + 0.2 |- : / : \ -| + | : / : \ | + | : / : \ | + 0.1 |- : / : \ -| + | : / : \ | + | : ,' : `, | + 0 |----------------'-' `-----`----------| + | | + | | +-0.1 |- p(m1=m2) =0.0863798346775753 -| + | | + | | +-0.2 |- p(v1=v2) =0.31647637745891 -| + | | + | | +-0.3 `------------'------------'------------'------------' + -10 5 0 5 10 \ No newline at end of file diff --git a/doc/gawkinet.info b/doc/gawkinet.info index 7877e084..c961462f 100644 --- a/doc/gawkinet.info +++ b/doc/gawkinet.info @@ -2410,7 +2410,7 @@ File: gawkinet.info, Node: STATIST, Next: MAZE, Prev: WEBGRAB, Up: Some Appl 3.6 STATIST: Graphing a Statistical Distribution ================================================ -[image src="statist.jpg" text=" 0.4 ,------------.------------_------------.------------, +[image src="gawk_statist.jpg" text=" 0.4 ,------------.------------_------------.------------, | : : sample 1 :::: | | : : sample 2 ---- | 0.3 |- : :_ -| @@ -4480,16 +4480,16 @@ Node: REMCONF97637 Node: URLCHK103171 Node: WEBGRAB107043 Node: STATIST111585 -Ref: STATIST-Footnote-1124892 -Node: MAZE125347 -Node: MOBAGWHO131612 -Ref: MOBAGWHO-Footnote-1145781 -Node: STOXPRED145849 -Node: PROTBASE160242 -Ref: PROTBASE-Footnote-1173572 -Node: Links173691 -Node: GNU Free Documentation License176614 -Node: Index201937 +Ref: STATIST-Footnote-1124897 +Node: MAZE125352 +Node: MOBAGWHO131617 +Ref: MOBAGWHO-Footnote-1145786 +Node: STOXPRED145854 +Node: PROTBASE160247 +Ref: PROTBASE-Footnote-1173577 +Node: Links173696 +Node: GNU Free Documentation License176619 +Node: Index201942  End Tag Table diff --git a/doc/gawkinet.texi b/doc/gawkinet.texi index df22d4dd..3ba14318 100644 --- a/doc/gawkinet.texi +++ b/doc/gawkinet.texi @@ -3002,7 +3002,7 @@ sure that none of the above reveals too much information about your system. @cindex PNG image format @cindex PS image format @cindex Boutell, Thomas -@image{statist,3in} +@image{gawk_statist,3in} In the HTTP server examples we've shown thus far, we never present an image to the browser and its user. Presenting images is one task. Generating diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 26344f72..30bf38c5 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -16302,7 +16302,7 @@ conceptually, if the element values are eight, @code{"foo"}, @ifnotdocbook @float Figure,figure-array-elements @caption{A contiguous array} -@center @image{array-elements, , , A Contiguous Array} +@center @image{gawk_array-elements, , , A Contiguous Array} @end float @end ifnotdocbook @@ -34787,7 +34787,7 @@ This is shown in @inlineraw{docbook, }. @ifnotdocbook @float Figure,figure-load-extension @caption{Loading the extension} -@center @image{api-figure1, , , Loading the extension} +@center @image{gawk_api-figure1, , , Loading the extension} @end float @end ifnotdocbook @@ -34814,7 +34814,7 @@ This is shown in @inlineraw{docbook, } @ifnotdocbook @float Figure,figure-call-new-function @caption{Calling the new function} -@center @image{api-figure3, , , Calling the new function} +@center @image{gawk_api-figure3, , , Calling the new function} @end float @end ifnotdocbook @@ -44521,7 +44521,7 @@ See @inlineraw{docbook, }. @ifnotdocbook @float Figure,figure-general-flow @caption{General Program Flow} -@center @image{general-program, , , General program flow} +@center @image{gawk_general-program, , , General program flow} @end float @end ifnotdocbook @@ -44559,7 +44559,7 @@ as shown in @inlineraw{docbook, }: @ifnotdocbook @float Figure,figure-process-flow @caption{Basic Program Steps} -@center @image{process-flow, , , Basic Program Stages} +@center @image{gawk_process-flow, , , Basic Program Stages} @end float @end ifnotdocbook diff --git a/doc/general-program.eps b/doc/general-program.eps deleted file mode 100644 index 12497168..00000000 --- a/doc/general-program.eps +++ /dev/null @@ -1,153 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: general-program.fig -%%Creator: fig2dev Version 3.2 Patchlevel 5c -%%CreationDate: Thu Jan 6 17:36:07 2011 -%%BoundingBox: 0 0 269 58 -%Magnification: 1.0000 -%%EndComments -%%BeginProlog -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -/pageheader { -save -newpath 0 58 moveto 0 0 lineto 269 0 lineto 269 58 lineto closepath clip newpath --194.8 247.1 translate -1 -1 scale -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06299 0.06299 sc -} bind def -/pagefooter { -$F2psEnd -restore -} bind def -%%EndProlog -pageheader -% -% Fig objects follow -% -% -% here starts figure with depth 50 -% Polyline -0 slj -0 slc -7.500 slw -n 4961 3021 m 4706 3467 l 4965 3911 l 5478 3908 l 5733 3462 l 5474 3018 l - - cp gs col0 s gr -% Polyline -gs clippath -4544 3495 m 4695 3495 l 4695 3435 l 4544 3435 l 4544 3435 l 4664 3465 l 4544 3495 l cp -eoclip -n 4095 3465 m - 4680 3465 l gs col0 s gr gr - -% arrowhead -n 4544 3495 m 4664 3465 l 4544 3435 l 4544 3495 l cp gs 0.00 setgray ef gr col0 s -% Polyline -gs clippath -6164 3495 m 6315 3495 l 6315 3435 l 6164 3435 l 6164 3435 l 6284 3465 l 6164 3495 l cp -eoclip -n 5805 3465 m - 6300 3465 l gs col0 s gr gr - -% arrowhead -n 6164 3495 m 6284 3465 l 6164 3435 l 6164 3495 l cp gs 0.00 setgray ef gr col0 s -% Polyline -n 6405 3150 m 6330 3150 6330 3704 75 arcto 4 {pop} repeat - 6330 3779 7274 3779 75 arcto 4 {pop} repeat - 7349 3779 7349 3225 75 arcto 4 {pop} repeat - 7349 3150 6405 3150 75 arcto 4 {pop} repeat - cp gs col0 s gr -% Polyline -n 3165 3195 m 3105 3195 3105 3719 60 arcto 4 {pop} repeat - 3105 3779 3992 3779 60 arcto 4 {pop} repeat - 4052 3779 4052 3255 60 arcto 4 {pop} repeat - 4052 3195 3165 3195 60 arcto 4 {pop} repeat - cp gs col0 s gr -/Times-Roman ff 180.00 scf sf -6525 3510 m -gs 1 -1 sc (Results) col0 sh gr -/Times-Roman ff 180.00 scf sf -3375 3510 m -gs 1 -1 sc (Data) col0 sh gr -/Times-Roman ff 180.00 scf sf -4860 3510 m -gs 1 -1 sc (Program) col0 sh gr -% here ends figure; -pagefooter -showpage -%%Trailer -%EOF diff --git a/doc/general-program.fig b/doc/general-program.fig deleted file mode 100644 index 8ab42f3d..00000000 --- a/doc/general-program.fig +++ /dev/null @@ -1,25 +0,0 @@ -#FIG 3.2 Produced by xfig version 3.2.5b -Landscape -Center -Metric -A4 -100.00 -Single --2 -1200 2 -2 3 0 1 0 7 50 -1 -1 0.000 0 0 0 0 0 7 - 4961 3021 4706 3467 4965 3911 5478 3908 5733 3462 5474 3018 - 4961 3021 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 4095 3465 4680 3465 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 5805 3465 6300 3465 -2 4 0 1 0 7 50 -1 -1 0.000 0 0 5 0 0 5 - 7349 3779 7349 3150 6330 3150 6330 3779 7349 3779 -2 4 0 1 0 7 50 -1 -1 0.000 0 0 4 0 0 5 - 4052 3779 4052 3195 3105 3195 3105 3779 4052 3779 -4 0 0 50 -1 0 12 0.0000 4 150 630 6525 3510 Results\001 -4 0 0 50 -1 0 12 0.0000 4 150 420 3375 3510 Data\001 -4 0 0 50 -1 0 12 0.0000 4 195 750 4860 3510 Program\001 diff --git a/doc/general-program.pdf b/doc/general-program.pdf deleted file mode 100644 index f4f7572c..00000000 Binary files a/doc/general-program.pdf and /dev/null differ diff --git a/doc/general-program.png b/doc/general-program.png deleted file mode 100644 index 7737261f..00000000 Binary files a/doc/general-program.png and /dev/null differ diff --git a/doc/general-program.txt b/doc/general-program.txt deleted file mode 100644 index cb85c294..00000000 --- a/doc/general-program.txt +++ /dev/null @@ -1,4 +0,0 @@ - _______ -+------+ / \ +---------+ -| Data | -----> < Program > -----> | Results | -+------+ \_______/ +---------+ diff --git a/doc/process-flow.eps b/doc/process-flow.eps deleted file mode 100644 index 81b937ba..00000000 --- a/doc/process-flow.eps +++ /dev/null @@ -1,191 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: process-flow.fig -%%Creator: fig2dev Version 3.2 Patchlevel 5c -%%CreationDate: Thu Jan 6 17:25:09 2011 -%%BoundingBox: 0 0 367 174 -%Magnification: 1.0000 -%%EndComments -%%BeginProlog -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -/pageheader { -save -newpath 0 174 moveto 0 0 lineto 367 0 lineto 367 174 lineto closepath clip newpath --161.1 355.1 translate -1 -1 scale -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06299 0.06299 sc -} bind def -/pagefooter { -$F2psEnd -restore -} bind def -%%EndProlog -pageheader -% -% Fig objects follow -% -% -% here starts figure with depth 50 -% Polyline -0 slj -0 slc -7.500 slw -n 4819 3540 m 5460 4181 l 6101 3540 l 5460 2899 l 4819 3540 l - cp gs col0 s gr -% Polyline -gs clippath -4634 3585 m 4785 3585 l 4785 3525 l 4634 3525 l 4634 3525 l 4754 3555 l 4634 3585 l cp -eoclip -n 3960 3555 m - 4770 3555 l gs col0 s gr gr - -% arrowhead -n 4634 3585 m 4754 3555 l 4634 3525 l 4634 3585 l cp gs 0.00 setgray ef gr col0 s -% Polyline -gs clippath -6839 3585 m 6990 3585 l 6990 3525 l 6839 3525 l 6839 3525 l 6959 3555 l 6839 3585 l cp -eoclip -n 6165 3555 m - 6975 3555 l gs col0 s gr gr - -% arrowhead -n 6839 3585 m 6959 3555 l 6839 3525 l 6839 3585 l cp gs 0.00 setgray ef gr col0 s -% Polyline -n 2644 3240 m 2569 3240 2569 3802 75 arcto 4 {pop} repeat - 2569 3877 3835 3877 75 arcto 4 {pop} repeat - 3910 3877 3910 3315 75 arcto 4 {pop} repeat - 3910 3240 2644 3240 75 arcto 4 {pop} repeat - cp gs col0 s gr -% Polyline -n 7095 3240 m 7020 3240 7020 3806 75 arcto 4 {pop} repeat - 7020 3881 8294 3881 75 arcto 4 {pop} repeat - 8369 3881 8369 3315 75 arcto 4 {pop} repeat - 8369 3240 7095 3240 75 arcto 4 {pop} repeat - cp gs col0 s gr -% Polyline -gs clippath -5460 4904 m 5460 5055 l 5520 5055 l 5520 4904 l 5520 4904 l 5490 5024 l 5460 4904 l cp -eoclip -n 5490 4230 m - 5490 5040 l gs col0 s gr gr - -% arrowhead -n 5460 4904 m 5490 5024 l 5520 4904 l 5460 4904 l cp gs 0.00 setgray ef gr col0 s -% Polyline -n 5028 5067 m 4953 5067 4953 5550 75 arcto 4 {pop} repeat - 4953 5625 5905 5625 75 arcto 4 {pop} repeat - 5980 5625 5980 5142 75 arcto 4 {pop} repeat - 5980 5067 5028 5067 75 arcto 4 {pop} repeat - cp gs col0 s gr -% Polyline -gs clippath -4305 3736 m 4305 3585 l 4245 3585 l 4245 3736 l 4245 3736 l 4275 3616 l 4305 3736 l cp -eoclip -n 4905 5355 m 4275 5355 l - 4275 3600 l gs col0 s gr gr - -% arrowhead -n 4305 3736 m 4275 3616 l 4245 3736 l 4305 3736 l cp gs 0.00 setgray ef gr col0 s -/Times-Roman ff 180.00 scf sf -5265 3375 m -gs 1 -1 sc (More) col0 sh gr -/Times-Roman ff 180.00 scf sf -5265 3630 m -gs 1 -1 sc (Data) col0 sh gr -/Times-Roman ff 180.00 scf sf -5265 3885 m -gs 1 -1 sc ( ?) col0 sh gr -/Times-Roman ff 180.00 scf sf -6210 3465 m -gs 1 -1 sc (No) col0 sh gr -/Times-Roman ff 180.00 scf sf -5535 4455 m -gs 1 -1 sc (Yes) col0 sh gr -/Times-Roman ff 180.00 scf sf -2745 3645 m -gs 1 -1 sc (Initialization) col0 sh gr -/Times-Roman ff 180.00 scf sf -7290 3600 m -gs 1 -1 sc (Clean Up) col0 sh gr -/Times-Roman ff 180.00 scf sf -5130 5400 m -gs 1 -1 sc (Process) col0 sh gr -% here ends figure; -pagefooter -showpage -%%Trailer -%EOF diff --git a/doc/process-flow.fig b/doc/process-flow.fig deleted file mode 100644 index b6613137..00000000 --- a/doc/process-flow.fig +++ /dev/null @@ -1,37 +0,0 @@ -#FIG 3.2 Produced by xfig version 3.2.5b -Landscape -Center -Metric -A4 -100.00 -Single --2 -1200 2 -2 3 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 6 - 4819 3540 5460 4181 6101 3540 5460 2899 4819 3540 4819 3540 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 3960 3555 4770 3555 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 6165 3555 6975 3555 -2 4 0 1 0 7 50 -1 -1 0.000 0 0 5 0 0 5 - 2569 3240 2569 3877 3910 3877 3910 3240 2569 3240 -2 4 0 1 0 7 50 -1 -1 0.000 0 0 5 0 0 5 - 7020 3240 7020 3881 8369 3881 8369 3240 7020 3240 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 5490 4230 5490 5040 -2 4 0 1 0 7 50 -1 -1 0.000 0 0 5 0 0 5 - 4953 5067 4953 5625 5980 5625 5980 5067 4953 5067 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 3 - 1 1 1.00 60.00 120.00 - 4905 5355 4275 5355 4275 3600 -4 0 0 50 -1 0 12 0.0000 4 150 480 5265 3375 More\001 -4 0 0 50 -1 0 12 0.0000 4 150 420 5265 3630 Data\001 -4 0 0 50 -1 0 12 0.0000 4 150 270 5265 3885 ?\001 -4 0 0 50 -1 0 12 0.0000 4 150 270 6210 3465 No\001 -4 0 0 50 -1 0 12 0.0000 4 150 330 5535 4455 Yes\001 -4 0 0 50 -1 0 12 0.0000 4 150 1035 2745 3645 Initialization\001 -4 0 0 50 -1 0 12 0.0000 4 195 810 7290 3600 Clean Up\001 -4 0 0 50 -1 0 12 0.0000 4 150 690 5130 5400 Process\001 diff --git a/doc/process-flow.pdf b/doc/process-flow.pdf deleted file mode 100644 index 3ff5f9e8..00000000 Binary files a/doc/process-flow.pdf and /dev/null differ diff --git a/doc/process-flow.png b/doc/process-flow.png deleted file mode 100644 index 97f467f4..00000000 Binary files a/doc/process-flow.png and /dev/null differ diff --git a/doc/process-flow.txt b/doc/process-flow.txt deleted file mode 100644 index d7296385..00000000 --- a/doc/process-flow.txt +++ /dev/null @@ -1,11 +0,0 @@ - ______ -+----------------+ / More \ No +----------+ -| Initialization | -------> < Data > -------> | Clean Up | -+----------------+ ^ \ ? / +----------+ - | +--+-+ - | | Yes - | | - | V - | +---------+ - +-----+ Process | - +---------+ diff --git a/doc/statist.eps b/doc/statist.eps deleted file mode 100644 index 1e1f09fa..00000000 --- a/doc/statist.eps +++ /dev/null @@ -1,557 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: gnuplot 3.7 patchlevel 0.1 -%%CreationDate: Sun Jan 7 14:23:12 2001 -%%DocumentFonts: (atend) -%%BoundingBox: 50 50 554 770 -%%Orientation: Portrait -%%Pages: (atend) -%%EndComments -/gnudict 256 dict def -gnudict begin -/Color true def -/Solid false def -/gnulinewidth 5.000 def -/userlinewidth gnulinewidth def -/vshift -46 def -/dl {10 mul} def -/hpt_ 31.5 def -/vpt_ 31.5 def -/hpt hpt_ def -/vpt vpt_ def -/M {moveto} bind def -/L {lineto} bind def -/R {rmoveto} bind def -/V {rlineto} bind def -/vpt2 vpt 2 mul def -/hpt2 hpt 2 mul def -/Lshow { currentpoint stroke M - 0 vshift R show } def -/Rshow { currentpoint stroke M - dup stringwidth pop neg vshift R show } def -/Cshow { currentpoint stroke M - dup stringwidth pop -2 div vshift R show } def -/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def - /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def -/DL { Color {setrgbcolor Solid {pop []} if 0 setdash } - {pop pop pop Solid {pop []} if 0 setdash} ifelse } def -/BL { stroke gnulinewidth 2 mul setlinewidth } def -/AL { stroke gnulinewidth 2 div setlinewidth } def -/UL { gnulinewidth mul /userlinewidth exch def } def -/PL { stroke userlinewidth setlinewidth } def -/LTb { BL [] 0 0 0 DL } def -/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def -/LT0 { PL [] 1 0 0 DL } def -/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def -/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def -/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def -/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def -/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def -/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def -/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def -/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def -/Pnt { stroke [] 0 setdash - gsave 1 setlinecap M 0 0 V stroke grestore } def -/Dia { stroke [] 0 setdash 2 copy vpt add M - hpt neg vpt neg V hpt vpt neg V - hpt vpt V hpt neg vpt V closepath stroke - Pnt } def -/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V - currentpoint stroke M - hpt neg vpt neg R hpt2 0 V stroke - } def -/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M - 0 vpt2 neg V hpt2 0 V 0 vpt2 V - hpt2 neg 0 V closepath stroke - Pnt } def -/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M - hpt2 vpt2 neg V currentpoint stroke M - hpt2 neg 0 R hpt2 vpt2 V stroke } def -/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M - hpt neg vpt -1.62 mul V - hpt 2 mul 0 V - hpt neg vpt 1.62 mul V closepath stroke - Pnt } def -/Star { 2 copy Pls Crs } def -/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M - 0 vpt2 neg V hpt2 0 V 0 vpt2 V - hpt2 neg 0 V closepath fill } def -/TriUF { stroke [] 0 setdash vpt 1.12 mul add M - hpt neg vpt -1.62 mul V - hpt 2 mul 0 V - hpt neg vpt 1.62 mul V closepath fill } def -/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M - hpt neg vpt 1.62 mul V - hpt 2 mul 0 V - hpt neg vpt -1.62 mul V closepath stroke - Pnt } def -/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M - hpt neg vpt 1.62 mul V - hpt 2 mul 0 V - hpt neg vpt -1.62 mul V closepath fill} def -/DiaF { stroke [] 0 setdash vpt add M - hpt neg vpt neg V hpt vpt neg V - hpt vpt V hpt neg vpt V closepath fill } def -/Pent { stroke [] 0 setdash 2 copy gsave - translate 0 hpt M 4 {72 rotate 0 hpt L} repeat - closepath stroke grestore Pnt } def -/PentF { stroke [] 0 setdash gsave - translate 0 hpt M 4 {72 rotate 0 hpt L} repeat - closepath fill grestore } def -/Circle { stroke [] 0 setdash 2 copy - hpt 0 360 arc stroke Pnt } def -/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def -/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def -/C1 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 0 90 arc closepath fill - vpt 0 360 arc closepath } bind def -/C2 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 90 180 arc closepath fill - vpt 0 360 arc closepath } bind def -/C3 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 0 180 arc closepath fill - vpt 0 360 arc closepath } bind def -/C4 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 180 270 arc closepath fill - vpt 0 360 arc closepath } bind def -/C5 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 0 90 arc - 2 copy moveto - 2 copy vpt 180 270 arc closepath fill - vpt 0 360 arc } bind def -/C6 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 90 270 arc closepath fill - vpt 0 360 arc closepath } bind def -/C7 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 0 270 arc closepath fill - vpt 0 360 arc closepath } bind def -/C8 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 270 360 arc closepath fill - vpt 0 360 arc closepath } bind def -/C9 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 270 450 arc closepath fill - vpt 0 360 arc closepath } bind def -/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill - 2 copy moveto - 2 copy vpt 90 180 arc closepath fill - vpt 0 360 arc closepath } bind def -/C11 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 0 180 arc closepath fill - 2 copy moveto - 2 copy vpt 270 360 arc closepath fill - vpt 0 360 arc closepath } bind def -/C12 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 180 360 arc closepath fill - vpt 0 360 arc closepath } bind def -/C13 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 0 90 arc closepath fill - 2 copy moveto - 2 copy vpt 180 360 arc closepath fill - vpt 0 360 arc closepath } bind def -/C14 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 90 360 arc closepath fill - vpt 0 360 arc } bind def -/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill - vpt 0 360 arc closepath } bind def -/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto - neg 0 rlineto closepath } bind def -/Square { dup Rec } bind def -/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def -/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def -/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def -/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def -/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def -/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def -/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill - exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def -/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def -/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill - 2 copy vpt Square fill - Bsquare } bind def -/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def -/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def -/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill - Bsquare } bind def -/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill - Bsquare } bind def -/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def -/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill - 2 copy vpt Square fill Bsquare } bind def -/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill - 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def -/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def -/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def -/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def -/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def -/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def -/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def -/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def -/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def -/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def -/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def -/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def -/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def -/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def -/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def -/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def -/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def -/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def -/DiaE { stroke [] 0 setdash vpt add M - hpt neg vpt neg V hpt vpt neg V - hpt vpt V hpt neg vpt V closepath stroke } def -/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M - 0 vpt2 neg V hpt2 0 V 0 vpt2 V - hpt2 neg 0 V closepath stroke } def -/TriUE { stroke [] 0 setdash vpt 1.12 mul add M - hpt neg vpt -1.62 mul V - hpt 2 mul 0 V - hpt neg vpt 1.62 mul V closepath stroke } def -/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M - hpt neg vpt 1.62 mul V - hpt 2 mul 0 V - hpt neg vpt -1.62 mul V closepath stroke } def -/PentE { stroke [] 0 setdash gsave - translate 0 hpt M 4 {72 rotate 0 hpt L} repeat - closepath stroke grestore } def -/CircE { stroke [] 0 setdash - hpt 0 360 arc stroke } def -/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def -/DiaW { stroke [] 0 setdash vpt add M - hpt neg vpt neg V hpt vpt neg V - hpt vpt V hpt neg vpt V Opaque stroke } def -/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M - 0 vpt2 neg V hpt2 0 V 0 vpt2 V - hpt2 neg 0 V Opaque stroke } def -/TriUW { stroke [] 0 setdash vpt 1.12 mul add M - hpt neg vpt -1.62 mul V - hpt 2 mul 0 V - hpt neg vpt 1.62 mul V Opaque stroke } def -/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M - hpt neg vpt 1.62 mul V - hpt 2 mul 0 V - hpt neg vpt -1.62 mul V Opaque stroke } def -/PentW { stroke [] 0 setdash gsave - translate 0 hpt M 4 {72 rotate 0 hpt L} repeat - Opaque stroke grestore } def -/CircW { stroke [] 0 setdash - hpt 0 360 arc Opaque stroke } def -/BoxFill { gsave Rec 1 setgray fill grestore } def -end -%%EndProlog -%%Page: 1 1 -gnudict begin -gsave -50 50 translate -0.100 0.100 scale -0 setgray -newpath -(Helvetica) findfont 140 scalefont setfont -1.000 UL -LTb -574 280 M -63 0 V -4165 0 R --63 0 V -490 280 M -(-0.3) Rshow -574 1245 M -63 0 V -4165 0 R --63 0 V --4249 0 R -(-0.2) Rshow -574 2209 M -63 0 V -4165 0 R --63 0 V --4249 0 R -(-0.1) Rshow -574 3174 M -63 0 V -4165 0 R --63 0 V --4249 0 R -(0) Rshow -574 4138 M -63 0 V -4165 0 R --63 0 V --4249 0 R -(0.1) Rshow -574 5103 M -63 0 V -4165 0 R --63 0 V --4249 0 R -(0.2) Rshow -574 6067 M -63 0 V -4165 0 R --63 0 V --4249 0 R -(0.3) Rshow -574 7032 M -63 0 V -4165 0 R --63 0 V --4249 0 R -(0.4) Rshow -574 280 M -0 63 V -0 6689 R -0 -63 V -574 140 M -(-10) Cshow -1631 280 M -0 63 V -0 6689 R -0 -63 V -0 -6829 R -(-5) Cshow -2688 280 M -0 63 V -0 6689 R -0 -63 V -0 -6829 R -(0) Cshow -3745 280 M -0 63 V -0 6689 R -0 -63 V -0 -6829 R -(5) Cshow -4802 280 M -0 63 V -0 6689 R -0 -63 V -0 -6829 R -(10) Cshow -1.000 UL -LTb -574 280 M -4228 0 V -0 6752 V --4228 0 V -574 280 L -2688 2209 M -(p\(m1=m2\) =0.0863798346775753) Lshow -2688 1245 M -(p\(v1=v2\) =0.31647637745891) Lshow -1.000 UL -LT0 -4151 6899 M -(sample 1) Rshow -4235 6899 M -399 0 V -574 3174 M -43 0 V -42 0 V -43 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -43 0 V -42 1 V -43 2 V -43 4 V -42 8 V -43 13 V -43 24 V -42 41 V -43 65 V -43 101 V -43 146 V -42 205 V -43 271 V -43 340 V -42 404 V -43 450 V -43 470 V -43 452 V -42 390 V -43 288 V -43 153 V -42 0 V -43 -153 V -43 -288 V -42 -390 V -43 -452 V -43 -470 V -43 -450 V -42 -404 V -43 -340 V -43 -271 V -42 -205 V -43 -146 V -43 -101 V -43 -65 V -42 -41 V -43 -24 V -43 -13 V -42 -8 V -43 -4 V -43 -2 V -42 -1 V -43 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -43 0 V -42 0 V -43 0 V -1.000 UL -LT1 -4151 6759 M -(sample 2) Rshow -4235 6759 M -399 0 V -574 3174 M -43 0 V -42 0 V -43 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -42 0 V -43 1 V -43 1 V -43 1 V -42 3 V -43 4 V -43 6 V -42 9 V -43 13 V -43 19 V -42 27 V -43 37 V -43 51 V -43 66 V -42 85 V -43 106 V -43 130 V -42 155 V -43 179 V -43 201 V -43 219 V -42 231 V -43 236 V -43 229 V -42 214 V -43 187 V -43 149 V -42 104 V -43 52 V -43 -3 V -43 -57 V -42 -109 V -43 -154 V -43 -189 V -42 -216 V -43 -231 V -43 -235 V -43 -231 V -42 -217 V -43 -199 V -43 -177 V -42 -152 V -43 -127 V -43 -104 V -42 -83 V -43 -65 V -43 -49 V -43 -36 V -42 -26 V -43 -19 V -43 -12 V -42 -9 V -43 -6 V -43 -3 V -43 -3 V -42 -1 V -43 -1 V -43 -1 V -42 0 V -43 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -42 0 V -43 0 V -43 0 V -43 0 V -42 0 V -43 0 V -stroke -grestore -end -showpage -%%Trailer -%%DocumentFonts: Helvetica -%%Pages: 1 diff --git a/doc/statist.jpg b/doc/statist.jpg deleted file mode 100644 index 92428f25..00000000 Binary files a/doc/statist.jpg and /dev/null differ diff --git a/doc/statist.pdf b/doc/statist.pdf deleted file mode 100644 index 2122a33a..00000000 Binary files a/doc/statist.pdf and /dev/null differ diff --git a/doc/statist.txt b/doc/statist.txt deleted file mode 100644 index 261019d6..00000000 --- a/doc/statist.txt +++ /dev/null @@ -1,23 +0,0 @@ - 0.4 ,------------.------------_------------.------------, - | : : sample 1 :::: | - | : : sample 2 ---- | - 0.3 |- : :_ -| - | : ,: `, | - | : / : \ | - 0.2 |- : / : \ -| - | : / : \ | - | : / : \ | - 0.1 |- : / : \ -| - | : / : \ | - | : ,' : `, | - 0 |----------------'-' `-----`----------| - | | - | | --0.1 |- p(m1=m2) =0.0863798346775753 -| - | | - | | --0.2 |- p(v1=v2) =0.31647637745891 -| - | | - | | --0.3 `------------'------------'------------'------------' - -10 5 0 5 10 \ No newline at end of file -- cgit v1.2.1 From 7dc2bd5f4e112faa509f13ff64fb86ec6606f9d4 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 9 Mar 2023 19:58:11 +0200 Subject: Updates to gawk workflow doc. --- doc/ChangeLog | 9 +++ doc/gawkworkflow.info | 163 ++++++++++++++++++++++++++------------------------ doc/gawkworkflow.texi | 17 ++++-- 3 files changed, 106 insertions(+), 83 deletions(-) (limited to 'doc') diff --git a/doc/ChangeLog b/doc/ChangeLog index 7316a0cf..7ede4870 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,12 @@ +2023-03-09 Arnold D. Robbins + + * gawkworkflow.texi (UPDATE-MONTH, EDITION): Updated. + Copyright, add current year. + (Submitting Your Changes): Add a note about diffs for generated + files also being in the output of `git diff'. Thanks to Manual + Collado for the suggestion. + (New feature development): Fix the text of a command. + 2023-03-09 Manuel Collado * gawktexi.in, gawkinet.texi, *.{png,jpg,eps,pdf,txt,fig}: rename diff --git a/doc/gawkworkflow.info b/doc/gawkworkflow.info index 2596ec61..591ca0d6 100644 --- a/doc/gawkworkflow.info +++ b/doc/gawkworkflow.info @@ -1,10 +1,11 @@ This is gawkworkflow.info, produced by makeinfo version 7.0.1 from gawkworkflow.texi. -Copyright © 2017, 2018, 2019, 2020, 2022 Free Software Foundation, Inc. +Copyright © 2017, 2018, 2019, 2020, 2022, 2023 Free Software Foundation, +Inc. - This is Edition 0.74 of ‘Participating in ‘gawk’ Development’. + This is Edition 0.75 of ‘Participating in ‘gawk’ Development’. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -35,11 +36,11 @@ General Introduction This file describes how to participate in software development for GNU Awk (‘gawk’) (http://www.gnu.org/software/gawk). - Copyright © 2017, 2018, 2019, 2020, 2022 Free Software Foundation, -Inc. + Copyright © 2017, 2018, 2019, 2020, 2022, 2023 Free Software +Foundation, Inc. - This is Edition 0.74 of ‘Participating in ‘gawk’ Development’. + This is Edition 0.75 of ‘Participating in ‘gawk’ Development’. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -1005,6 +1006,11 @@ _Generate a single large patch_ Mail the ‘python.diff’ file to the appropriate mailing list along with a description of what you’ve changed and why. + The patch file will likely contain changes to generated files, such + as ‘awkgram.c’ or ‘Makefile.in’. If you are comfortable manually + editing the patch file to remove those changes, do so. If not, + then send the file as-is and the maintainer will handle it. + _Generate a set of patches that in toto comprise your changes_ To do this, use ‘git format-patch’: @@ -1164,7 +1170,8 @@ without commit access: 3. If necessary, update the documentation: ‘doc/gawktexi.in’ and/or ‘doc/gawk.1’. - 4. Use ‘git diff > mychange.diff’ to create a patch file. + 4. Use ‘git diff > mychange.diff’ to create a patch file. (If you + want, remove the diffs for generated files.) 5. Send it to the mailing list for discussion. @@ -1281,7 +1288,7 @@ Savannah repo. otherwise, you should _always_ start branches for new features from ‘master’, and not from the current “stable” branch. - Use ‘checkout -b feature/FEATURE_NAME’ to create the initial + Use ‘git checkout -b feature/FEATURE_NAME’ to create the initial branch. You may then elect to keep it purely local, or to push it up to Savannah for review, even if the feature is not yet totally “ready for prime time.” @@ -1827,7 +1834,7 @@ Index * gawktexi.in documentation: Developing patches. (line 13) * GCC, the GNU Compiler Collection: Compilers. (line 6) * generating a single patch: Submitting Changes. (line 14) -* generating multiple patches: Submitting Changes. (line 24) +* generating multiple patches: Submitting Changes. (line 29) * gettext: GNU Tools. (line 27) * git branch command, -a option: Remotes. (line 6) * git command, git branch: Repo Copies. (line 39) @@ -1868,8 +1875,8 @@ Index * git command, git pull <2>: Rebasing. (line 10) * git command, git checkout <5>: Submitting Changes. (line 18) * git command, git diff <1>: Submitting Changes. (line 18) -* git command, git format-patch: Submitting Changes. (line 24) -* git command, git checkout <6>: Submitting Changes. (line 27) +* git command, git format-patch: Submitting Changes. (line 29) +* git command, git checkout <6>: Submitting Changes. (line 32) * git command, git checkout <7>: Removing Branches. (line 9) * git command, git pull <3>: Removing Branches. (line 9) * git command, git branch <1>: Removing Branches. (line 9) @@ -1883,10 +1890,10 @@ Index * git command, git merge: Points to remember. (line 37) * git command, git clone <2>: ssh clone. (line 10) * git command, git diff <3>: Developing patches. (line 16) -* git command, git diff <4>: Developing patches. (line 26) -* git command, git add <1>: Developing patches. (line 26) -* git command, git commit <1>: Developing patches. (line 26) -* git command, git push <1>: Developing patches. (line 26) +* git command, git diff <4>: Developing patches. (line 27) +* git command, git add <1>: Developing patches. (line 27) +* git command, git commit <1>: Developing patches. (line 27) +* git command, git push <1>: Developing patches. (line 27) * git command, git checkout <11>: Developing new features. (line 9) * git command, git pull <6>: Developing new features. @@ -1960,7 +1967,7 @@ Index * ownership of directories: General practices. (line 17) * pager.status configuration setting: Configuring git. (line 24) * patch, single, generation of: Submitting Changes. (line 14) -* patches, multiple, generation of: Submitting Changes. (line 24) +* patches, multiple, generation of: Submitting Changes. (line 29) * pcc compiler: Compilers. (line 40) * pcc compiler, Git mirror: Compilers. (line 50) * Portable C compiler: Compilers. (line 40) @@ -1994,69 +2001,69 @@ Index  Tag Table: -Node: Top1162 -Node: Preface5303 -Node: Intended Audience5874 -Node: This Manual6756 -Node: Conventions8317 -Node: Acknowledgments9838 -Node: Reviewers10275 -Node: Contributing10596 -Node: Using Git14050 -Node: Push Pull14810 -Node: Repo Copies16376 -Ref: savannah-repo17391 -Ref: your-repo18448 -Ref: Repo Copies-Footnote-120167 -Node: Local Branches20224 -Ref: your-repo-222045 -Ref: Local Branches-Footnote-123131 -Node: Branches are state23189 -Node: Repo State23924 -Node: Local State26108 -Node: Remotes26776 -Node: Configuring git28133 -Ref: Configuring git-Footnote-130543 -Node: Development without commit access30714 -Node: Cloning31774 -Ref: Cloning-Footnote-133339 -Node: Switching Branches33406 -Node: Starting A New Branch34040 -Ref: Starting A New Branch-Footnote-136024 -Ref: Starting A New Branch-Footnote-236084 -Node: Undoing a change36166 -Node: Saving Without Committing36790 -Node: Updating38374 -Node: Rebasing38889 -Node: Merge Conflicts39511 -Node: Submitting Changes41788 -Ref: Submitting Changes-Footnote-143972 -Ref: Submitting Changes-Footnote-244011 -Ref: Submitting Changes-Footnote-344047 -Node: Removing Branches44095 -Node: Points to remember44631 -Node: Development with commit access46340 -Node: Initial setup46993 -Node: ssh clone47797 -Node: Developing patches48387 -Node: Developing new features49752 -Node: Developing fixes51664 -Node: General practices52755 -Node: Repo Maintenance57584 -Ref: Repo Maintenance-Footnote-160495 -Node: Development Stuff60631 -Node: Coding style61200 -Ref: Coding style-Footnote-161862 -Node: Doing paperwork61956 -Node: Tools62755 -Node: GNU Tools63345 -Node: Compilers65578 -Ref: Compilers-Footnote-168258 -Node: Debugging68296 -Node: Cheat Sheet69107 -Node: Resources73214 -Node: TODO73799 -Node: Index74021 +Node: Top1168 +Node: Preface5315 +Node: Intended Audience5886 +Node: This Manual6768 +Node: Conventions8329 +Node: Acknowledgments9850 +Node: Reviewers10287 +Node: Contributing10608 +Node: Using Git14062 +Node: Push Pull14822 +Node: Repo Copies16388 +Ref: savannah-repo17403 +Ref: your-repo18460 +Ref: Repo Copies-Footnote-120179 +Node: Local Branches20236 +Ref: your-repo-222057 +Ref: Local Branches-Footnote-123143 +Node: Branches are state23201 +Node: Repo State23936 +Node: Local State26120 +Node: Remotes26788 +Node: Configuring git28145 +Ref: Configuring git-Footnote-130555 +Node: Development without commit access30726 +Node: Cloning31786 +Ref: Cloning-Footnote-133351 +Node: Switching Branches33418 +Node: Starting A New Branch34052 +Ref: Starting A New Branch-Footnote-136036 +Ref: Starting A New Branch-Footnote-236096 +Node: Undoing a change36178 +Node: Saving Without Committing36802 +Node: Updating38386 +Node: Rebasing38901 +Node: Merge Conflicts39523 +Node: Submitting Changes41800 +Ref: Submitting Changes-Footnote-144271 +Ref: Submitting Changes-Footnote-244310 +Ref: Submitting Changes-Footnote-344346 +Node: Removing Branches44394 +Node: Points to remember44930 +Node: Development with commit access46639 +Node: Initial setup47292 +Node: ssh clone48096 +Node: Developing patches48686 +Node: Developing new features50110 +Node: Developing fixes52022 +Node: General practices53113 +Node: Repo Maintenance57946 +Ref: Repo Maintenance-Footnote-160857 +Node: Development Stuff60993 +Node: Coding style61562 +Ref: Coding style-Footnote-162224 +Node: Doing paperwork62318 +Node: Tools63117 +Node: GNU Tools63707 +Node: Compilers65940 +Ref: Compilers-Footnote-168620 +Node: Debugging68658 +Node: Cheat Sheet69469 +Node: Resources73576 +Node: TODO74161 +Node: Index74383  End Tag Table diff --git a/doc/gawkworkflow.texi b/doc/gawkworkflow.texi index d455c6d5..2afbb664 100644 --- a/doc/gawkworkflow.texi +++ b/doc/gawkworkflow.texi @@ -28,10 +28,10 @@ @c applies to and all the info about who's publishing this edition @c These apply across the board. -@set UPDATE-MONTH July, 2022 +@set UPDATE-MONTH March, 2023 @set TITLE Participating in @command{gawk} Development -@set EDITION 0.74 +@set EDITION 0.75 @iftex @set DOCUMENT booklet @@ -144,13 +144,13 @@ Fax: +1-617-542-2652 Email: gnu@@gnu.org URL: http://www.gnu.org/ -Copyright © 2017, 2018, 2019, 2020, 2022 +Copyright © 2017, 2018, 2019, 2020, 2022, 2023 Free Software Foundation, Inc. All Rights Reserved. @end docbook @ifnotdocbook -Copyright @copyright{} 2017, 2018, 2019, 2020, 2022 +Copyright @copyright{} 2017, 2018, 2019, 2020, 2022, 2023 Free Software Foundation, Inc. @end ifnotdocbook @sp 2 @@ -1301,6 +1301,12 @@ $ @kbd{git diff master > /tmp/python.diff} Mail the @file{python.diff} file to the appropriate mailing list along with a description of what you've changed and why. +The patch file will likely contain changes to generated files, +such as @file{awkgram.c} or @file{Makefile.in}. If you are +comfortable manually editing the patch file to remove those +changes, do so. If not, then send the file as-is and the +maintainer will handle it. + @cindex @command{git} command @subentry @code{git format-patch} @cindex generating multiple patches @cindex patches, multiple, generation of @@ -1493,6 +1499,7 @@ and/or @file{doc/gawk.1}. @cindex @command{git} command @subentry @code{git diff} @item Use @samp{git diff > mychange.diff} to create a patch file. +(If you want, remove the diffs for generated files.) @item Send it to the mailing list for discussion. @@ -1644,7 +1651,7 @@ Unless you can convince the maintainer (and the other developers!) otherwise, you should @emph{always} start branches for new features from @code{master}, and not from the current ``stable'' branch. -Use @samp{checkout -b feature/@var{feature_name}} to create the initial branch. +Use @samp{git checkout -b feature/@var{feature_name}} to create the initial branch. You may then elect to keep it purely local, or to push it up to Savannah for review, even if the feature is not yet totally ``ready for prime time.'' @end table -- cgit v1.2.1 From 47b753cb76e3d77ac5b34d0c38c37cbd8cb8ba17 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Thu, 9 Mar 2023 21:22:13 +0200 Subject: Test tarball made. --- doc/ChangeLog | 4 ++++ doc/Makefile.am | 7 ++++--- doc/Makefile.in | 7 ++++--- 3 files changed, 12 insertions(+), 6 deletions(-) (limited to 'doc') diff --git a/doc/ChangeLog b/doc/ChangeLog index 7ede4870..ba8e5041 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -7,6 +7,10 @@ Collado for the suggestion. (New feature development): Fix the text of a command. + Unrelated: + + * Makefile.am: Adjust things to get 'make distcheck' to pass. + 2023-03-09 Manuel Collado * gawktexi.in, gawkinet.texi, *.{png,jpg,eps,pdf,txt,fig}: rename diff --git a/doc/Makefile.am b/doc/Makefile.am index ba04c8c8..47f36e05 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -34,14 +34,15 @@ png_images = gawk_api-figure1.png gawk_api-figure2.png gawk_api-figure3.png \ html_images = $(png_images) gawk_statist.jpg fig_images = $(png_images:%.png=%.fig) -txt_images = $(png_images:%.png=%.txt) statist.txt -eps_images = $(txt_images:%.txt=%.eps) -pdf_images = $(txt_images:%.txt=%.pdf) +txt_images = $(png_images:%.png=%.txt) gawk_statist.txt +eps_images = $(txt_images:%.txt=%.eps) gawk_statist.eps +pdf_images = $(txt_images:%.txt=%.pdf) gawk_statist.pdf EXTRA_DIST = ChangeLog ChangeLog.0 ChangeLog.1 \ README.card ad.block setter.outline \ awkcard.in awkforai.txt texinfo.tex cardfonts \ $(fig_images) $(txt_images) $(eps_images) $(pdf_images) \ + $(html_images) \ gawktexi.in sidebar.awk \ it \ macros colors no.colors $(man_MANS) \ diff --git a/doc/Makefile.in b/doc/Makefile.in index c0b51a08..3b173788 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -376,13 +376,14 @@ png_images = gawk_api-figure1.png gawk_api-figure2.png gawk_api-figure3.png \ html_images = $(png_images) gawk_statist.jpg fig_images = $(png_images:%.png=%.fig) -txt_images = $(png_images:%.png=%.txt) statist.txt -eps_images = $(txt_images:%.txt=%.eps) -pdf_images = $(txt_images:%.txt=%.pdf) +txt_images = $(png_images:%.png=%.txt) gawk_statist.txt +eps_images = $(txt_images:%.txt=%.eps) gawk_statist.eps +pdf_images = $(txt_images:%.txt=%.pdf) gawk_statist.pdf EXTRA_DIST = ChangeLog ChangeLog.0 ChangeLog.1 \ README.card ad.block setter.outline \ awkcard.in awkforai.txt texinfo.tex cardfonts \ $(fig_images) $(txt_images) $(eps_images) $(pdf_images) \ + $(html_images) \ gawktexi.in sidebar.awk \ it \ macros colors no.colors $(man_MANS) \ -- cgit v1.2.1 From 22d97f2a81e3c89b1eb13e0ab9f0236d01f4b8d1 Mon Sep 17 00:00:00 2001 From: Antonio Giovanni Colombo Date: Sat, 11 Mar 2023 19:10:22 +0100 Subject: update to gawktexi.in for figures' new names --- doc/it/api-figura1.eps | 536 ------------------------------------ doc/it/api-figura1.fig | 40 --- doc/it/api-figura1.pdf | Bin 9120 -> 0 bytes doc/it/api-figura1.png | Bin 5747 -> 0 bytes doc/it/api-figura1.txt | 24 -- doc/it/api-figura2.eps | 517 ---------------------------------- doc/it/api-figura2.fig | 26 -- doc/it/api-figura2.pdf | Bin 11596 -> 0 bytes doc/it/api-figura2.png | Bin 5768 -> 0 bytes doc/it/api-figura2.txt | 12 - doc/it/api-figura3.eps | 526 ----------------------------------- doc/it/api-figura3.fig | 29 -- doc/it/api-figura3.pdf | Bin 11914 -> 0 bytes doc/it/api-figura3.png | Bin 5734 -> 0 bytes doc/it/api-figura3.txt | 13 - doc/it/flusso-elaborazione.eps | 420 ---------------------------- doc/it/flusso-elaborazione.fig | 37 --- doc/it/flusso-elaborazione.pdf | Bin 9672 -> 0 bytes doc/it/flusso-elaborazione.png | Bin 6300 -> 0 bytes doc/it/flusso-elaborazione.txt | 11 - doc/it/gawk-api-figura1.eps | 536 ++++++++++++++++++++++++++++++++++++ doc/it/gawk-api-figura1.fig | 40 +++ doc/it/gawk-api-figura1.pdf | Bin 0 -> 9120 bytes doc/it/gawk-api-figura1.png | Bin 0 -> 5747 bytes doc/it/gawk-api-figura1.txt | 24 ++ doc/it/gawk-api-figura2.eps | 517 ++++++++++++++++++++++++++++++++++ doc/it/gawk-api-figura2.fig | 26 ++ doc/it/gawk-api-figura2.pdf | Bin 0 -> 11596 bytes doc/it/gawk-api-figura2.png | Bin 0 -> 5768 bytes doc/it/gawk-api-figura2.txt | 12 + doc/it/gawk-api-figura3.eps | 526 +++++++++++++++++++++++++++++++++++ doc/it/gawk-api-figura3.fig | 29 ++ doc/it/gawk-api-figura3.pdf | Bin 0 -> 11914 bytes doc/it/gawk-api-figura3.png | Bin 0 -> 5734 bytes doc/it/gawk-api-figura3.txt | 13 + doc/it/gawk-flusso-elaborazione.eps | 420 ++++++++++++++++++++++++++++ doc/it/gawk-flusso-elaborazione.fig | 37 +++ doc/it/gawk-flusso-elaborazione.pdf | Bin 0 -> 9672 bytes doc/it/gawk-flusso-elaborazione.png | Bin 0 -> 6300 bytes doc/it/gawk-flusso-elaborazione.txt | 11 + doc/it/gawk-programma-generico.eps | 228 +++++++++++++++ doc/it/gawk-programma-generico.fig | 25 ++ doc/it/gawk-programma-generico.pdf | Bin 0 -> 5313 bytes doc/it/gawk-programma-generico.png | Bin 0 -> 4151 bytes doc/it/gawk-programma-generico.txt | 4 + doc/it/gawk-vettore-elementi.eps | 159 +++++++++++ doc/it/gawk-vettore-elementi.fig | 27 ++ doc/it/gawk-vettore-elementi.pdf | Bin 0 -> 7009 bytes doc/it/gawk-vettore-elementi.png | Bin 0 -> 1032 bytes doc/it/gawk-vettore-elementi.txt | 4 + doc/it/gawkbug.1 | 84 ++++++ doc/it/gawktexi.in | 36 +-- doc/it/programma-generico.eps | 228 --------------- doc/it/programma-generico.fig | 25 -- doc/it/programma-generico.pdf | Bin 5313 -> 0 bytes doc/it/programma-generico.png | Bin 4151 -> 0 bytes doc/it/programma-generico.txt | 4 - doc/it/vettore-elementi.eps | 159 ----------- doc/it/vettore-elementi.fig | 27 -- doc/it/vettore-elementi.pdf | Bin 7009 -> 0 bytes doc/it/vettore-elementi.png | Bin 1032 -> 0 bytes doc/it/vettore-elementi.txt | 4 - 62 files changed, 2740 insertions(+), 2656 deletions(-) delete mode 100644 doc/it/api-figura1.eps delete mode 100644 doc/it/api-figura1.fig delete mode 100644 doc/it/api-figura1.pdf delete mode 100644 doc/it/api-figura1.png delete mode 100644 doc/it/api-figura1.txt delete mode 100644 doc/it/api-figura2.eps delete mode 100644 doc/it/api-figura2.fig delete mode 100644 doc/it/api-figura2.pdf delete mode 100644 doc/it/api-figura2.png delete mode 100644 doc/it/api-figura2.txt delete mode 100644 doc/it/api-figura3.eps delete mode 100644 doc/it/api-figura3.fig delete mode 100644 doc/it/api-figura3.pdf delete mode 100644 doc/it/api-figura3.png delete mode 100644 doc/it/api-figura3.txt delete mode 100644 doc/it/flusso-elaborazione.eps delete mode 100644 doc/it/flusso-elaborazione.fig delete mode 100644 doc/it/flusso-elaborazione.pdf delete mode 100644 doc/it/flusso-elaborazione.png delete mode 100644 doc/it/flusso-elaborazione.txt create mode 100644 doc/it/gawk-api-figura1.eps create mode 100644 doc/it/gawk-api-figura1.fig create mode 100644 doc/it/gawk-api-figura1.pdf create mode 100644 doc/it/gawk-api-figura1.png create mode 100644 doc/it/gawk-api-figura1.txt create mode 100644 doc/it/gawk-api-figura2.eps create mode 100644 doc/it/gawk-api-figura2.fig create mode 100644 doc/it/gawk-api-figura2.pdf create mode 100644 doc/it/gawk-api-figura2.png create mode 100644 doc/it/gawk-api-figura2.txt create mode 100644 doc/it/gawk-api-figura3.eps create mode 100644 doc/it/gawk-api-figura3.fig create mode 100644 doc/it/gawk-api-figura3.pdf create mode 100644 doc/it/gawk-api-figura3.png create mode 100644 doc/it/gawk-api-figura3.txt create mode 100644 doc/it/gawk-flusso-elaborazione.eps create mode 100644 doc/it/gawk-flusso-elaborazione.fig create mode 100644 doc/it/gawk-flusso-elaborazione.pdf create mode 100644 doc/it/gawk-flusso-elaborazione.png create mode 100644 doc/it/gawk-flusso-elaborazione.txt create mode 100644 doc/it/gawk-programma-generico.eps create mode 100644 doc/it/gawk-programma-generico.fig create mode 100644 doc/it/gawk-programma-generico.pdf create mode 100644 doc/it/gawk-programma-generico.png create mode 100644 doc/it/gawk-programma-generico.txt create mode 100644 doc/it/gawk-vettore-elementi.eps create mode 100644 doc/it/gawk-vettore-elementi.fig create mode 100644 doc/it/gawk-vettore-elementi.pdf create mode 100644 doc/it/gawk-vettore-elementi.png create mode 100644 doc/it/gawk-vettore-elementi.txt create mode 100755 doc/it/gawkbug.1 delete mode 100644 doc/it/programma-generico.eps delete mode 100644 doc/it/programma-generico.fig delete mode 100644 doc/it/programma-generico.pdf delete mode 100644 doc/it/programma-generico.png delete mode 100644 doc/it/programma-generico.txt delete mode 100644 doc/it/vettore-elementi.eps delete mode 100644 doc/it/vettore-elementi.fig delete mode 100644 doc/it/vettore-elementi.pdf delete mode 100644 doc/it/vettore-elementi.png delete mode 100644 doc/it/vettore-elementi.txt (limited to 'doc') diff --git a/doc/it/api-figura1.eps b/doc/it/api-figura1.eps deleted file mode 100644 index 93560797..00000000 --- a/doc/it/api-figura1.eps +++ /dev/null @@ -1,536 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Title: api-figura1.fig -%%Creator: fig2dev Version 3.2 Patchlevel 5e -%%CreationDate: Wed Jun 29 10:59:41 2016 -%%BoundingBox: 0 0 356 221 -%Magnification: 1.0000 -%%EndComments -%%BeginProlog -/MyAppDict 100 dict dup begin def -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end - -% This junk string is used by the show operators -/PATsstr 1 string def -/PATawidthshow { % cx cy cchar rx ry string - % Loop over each character in the string - { % cx cy cchar rx ry char - % Show the character - dup % cx cy cchar rx ry char char - PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char) - false charpath % cx cy cchar rx ry char - /clip load PATdraw - % Move past the character (charpath modified the - % current point) - currentpoint % cx cy cchar rx ry char x y - newpath - moveto % cx cy cchar rx ry char - % Reposition by cx,cy if the character in the string is cchar - 3 index eq { % cx cy cchar rx ry - 4 index 4 index rmoveto - } if - % Reposition all characters by rx ry - 2 copy rmoveto % cx cy cchar rx ry - } forall - pop pop pop pop pop % - - currentpoint - newpath - moveto -} bind def -/PATcg { - 7 dict dup begin - /lw currentlinewidth def - /lc currentlinecap def - /lj currentlinejoin def - /ml currentmiterlimit def - /ds [ currentdash ] def - /cc [ currentrgbcolor ] def - /cm matrix currentmatrix def - end -} bind def -% PATdraw - calculates the boundaries of the object and -% fills it with the current pattern -/PATdraw { % proc - save exch - PATpcalc % proc nw nh px py - 5 -1 roll exec % nw nh px py - newpath - PATfill % - - restore -} bind def -% PATfill - performs the tiling for the shape -/PATfill { % nw nh px py PATfill - - PATDict /CurrentPattern get dup begin - setfont - % Set the coordinate system to Pattern Space - PatternGState PATsg - % Set the color for uncolored pattezns - PaintType 2 eq { PATDict /PColor get PATsc } if - % Create the string for showing - 3 index string % nw nh px py str - % Loop for each of the pattern sources - 0 1 Multi 1 sub { % nw nh px py str source - % Move to the starting location - 3 index 3 index % nw nh px py str source px py - moveto % nw nh px py str source - % For multiple sources, set the appropriate color - Multi 1 ne { dup PC exch get PATsc } if - % Set the appropriate string for the source - 0 1 7 index 1 sub { 2 index exch 2 index put } for pop - % Loop over the number of vertical cells - 3 index % nw nh px py str nh - { % nw nh px py str - currentpoint % nw nh px py str cx cy - 2 index oldshow % nw nh px py str cx cy - YStep add moveto % nw nh px py str - } repeat % nw nh px py str - } for - 5 { pop } repeat - end -} bind def - -% PATkshow - kshow with the current pattezn -/PATkshow { % proc string - exch bind % string proc - 1 index 0 get % string proc char - % Loop over all but the last character in the string - 0 1 4 index length 2 sub { - % string proc char idx - % Find the n+1th character in the string - 3 index exch 1 add get % string proc char char+1 - exch 2 copy % strinq proc char+1 char char+1 char - % Now show the nth character - PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr) - false charpath % string proc char+1 char char+1 - /clip load PATdraw - % Move past the character (charpath modified the current point) - currentpoint newpath moveto - % Execute the user proc (should consume char and char+1) - mark 3 1 roll % string proc char+1 mark char char+1 - 4 index exec % string proc char+1 mark... - cleartomark % string proc char+1 - } for - % Now display the last character - PATsstr dup 0 4 -1 roll put % string proc (char+1) - false charpath % string proc - /clip load PATdraw - neewath - pop pop % - -} bind def -% PATmp - the makepattern equivalent -/PATmp { % patdict patmtx PATmp patinstance - exch dup length 7 add % We will add 6 new entries plus 1 FID - dict copy % Create a new dictionary - begin - % Matrix to install when painting the pattern - TilingType PATtcalc - /PatternGState PATcg def - PatternGState /cm 3 -1 roll put - % Check for multi pattern sources (Level 1 fast color patterns) - currentdict /Multi known not { /Multi 1 def } if - % Font dictionary definitions - /FontType 3 def - % Create a dummy encoding vector - /Encoding 256 array def - 3 string 0 1 255 { - Encoding exch dup 3 index cvs cvn put } for pop - /FontMatrix matrix def - /FontBBox BBox def - /BuildChar { - mark 3 1 roll % mark dict char - exch begin - Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata] - PaintType 2 eq Multi 1 ne or - { XStep 0 FontBBox aload pop setcachedevice } - { XStep 0 setcharwidth } ifelse - currentdict % mark [paintdata] dict - /PaintProc load % mark [paintdata] dict paintproc - end - gsave - false PATredef exec true PATredef - grestore - cleartomark % - - } bind def - currentdict - end % newdict - /foo exch % /foo newlict - definefont % newfont -} bind def -% PATpcalc - calculates the starting point and width/height -% of the tile fill for the shape -/PATpcalc { % - PATpcalc nw nh px py - PATDict /CurrentPattern get begin - gsave - % Set up the coordinate system to Pattern Space - % and lock down pattern - PatternGState /cm get setmatrix - BBox aload pop pop pop translate - % Determine the bounding box of the shape - pathbbox % llx lly urx ury - grestore - % Determine (nw, nh) the # of cells to paint width and height - PatHeight div ceiling % llx lly urx qh - 4 1 roll % qh llx lly urx - PatWidth div ceiling % qh llx lly qw - 4 1 roll % qw qh llx lly - PatHeight div floor % qw qh llx ph - 4 1 roll % ph qw qh llx - PatWidth div floor % ph qw qh pw - 4 1 roll % pw ph qw qh - 2 index sub cvi abs % pw ph qs qh-ph - exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph - % Determine the starting point of the pattern fill - %(px, py) - 4 2 roll % nw nh pw ph - PatHeight mul % nw nh pw py - exch % nw nh py pw - PatWidth mul exch % nw nh px py - end -} bind def - -% Save the original routines so that we can use them later on -/oldfill /fill load def -/oldeofill /eofill load def -/oldstroke /stroke load def -/oldshow /show load def -/oldashow /ashow load def -/oldwidthshow /widthshow load def -/oldawidthshow /awidthshow load def -/oldkshow /kshow load def - -% These defs are necessary so that subsequent procs don't bind in -% the originals -/fill { oldfill } bind def -/eofill { oldeofill } bind def -/stroke { oldstroke } bind def -/show { oldshow } bind def -/ashow { oldashow } bind def -/widthshow { oldwidthshow } bind def -/awidthshow { oldawidthshow } bind def -/kshow { oldkshow } bind def -/PATredef { - MyAppDict begin - { - /fill { /clip load PATdraw newpath } bind def - /eofill { /eoclip load PATdraw newpath } bind def - /stroke { PATstroke } bind def - /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def - /ashow { 0 0 null 6 3 roll PATawidthshow } - bind def - /widthshow { 0 0 3 -1 roll PATawidthshow } - bind def - /awidthshow { PATawidthshow } bind def - /kshow { PATkshow } bind def - } { - /fill { oldfill } bind def - /eofill { oldeofill } bind def - /stroke { oldstroke } bind def - /show { oldshow } bind def - /ashow { oldashow } bind def - /widthshow { oldwidthshow } bind def - /awidthshow { oldawidthshow } bind def - /kshow { oldkshow } bind def - } ifelse - end -} bind def -false PATredef -% Conditionally define setcmykcolor if not available -/setcmykcolor where { pop } { - /setcmykcolor { - 1 sub 4 1 roll - 3 { - 3 index add neg dup 0 lt { pop 0 } if 3 1 roll - } repeat - setrgbcolor - pop - } bind def -} ifelse -/PATsc { % colorarray - aload length % c1 ... cn length - dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor - } ifelse } ifelse -} bind def -/PATsg { % dict - begin - lw setlinewidth - lc setlinecap - lj setlinejoin - ml setmiterlimit - ds aload pop setdash - cc aload pop setrgbcolor - cm setmatrix - end -} bind def - -/PATDict 3 dict def -/PATsp { - true PATredef - PATDict begin - /CurrentPattern exch def - % If it's an uncolored pattern, save the color - CurrentPattern /PaintType get 2 eq { - /PColor exch def - } if - /CColor [ currentrgbcolor ] def - end -} bind def -% PATstroke - stroke with the current pattern -/PATstroke { - countdictstack - save - mark - { - currentpoint strokepath moveto - PATpcalc % proc nw nh px py - clip newpath PATfill - } stopped { - (*** PATstroke Warning: Path is too complex, stroking - with gray) = - cleartomark - restore - countdictstack exch sub dup 0 gt - { { end } repeat } { pop } ifelse - gsave 0.5 setgray oldstroke grestore - } { pop restore pop } ifelse - newpath -} bind def -/PATtcalc { % modmtx tilingtype PATtcalc tilematrix - % Note: tiling types 2 and 3 are not supported - gsave - exch concat % tilingtype - matrix currentmatrix exch % cmtx tilingtype - % Tiling type 1 and 3: constant spacing - 2 ne { - % Distort the pattern so that it occupies - % an integral number of device pixels - dup 4 get exch dup 5 get exch % tx ty cmtx - XStep 0 dtransform - round exch round exch % tx ty cmtx dx.x dx.y - XStep div exch XStep div exch % tx ty cmtx a b - 0 YStep dtransform - round exch round exch % tx ty cmtx a b dy.x dy.y - YStep div exch YStep div exch % tx ty cmtx a b c d - 7 -3 roll astore % { a b c d tx ty } - } if - grestore -} bind def -/PATusp { - false PATredef - PATDict begin - CColor PATsc - end -} bind def - -% right30 -11 dict begin -/PaintType 1 def -/PatternType 1 def -/TilingType 1 def -/BBox [0 0 1 1] def -/XStep 1 def -/YStep 1 def -/PatWidth 1 def -/PatHeight 1 def -/Multi 2 def -/PaintData [ - { clippath } bind - { 32 16 true [ 32 0 0 -16 0 16 ] - {<00030003000c000c0030003000c000c0030003000c000c00 - 30003000c000c00000030003000c000c0030003000c000c0 - 030003000c000c0030003000c000c000>} - imagemask } bind -] def -/PaintProc { - pop - exec fill -} def -currentdict -end -/P2 exch def - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -/pageheader { -save -newpath 0 221 moveto 0 0 lineto 356 0 lineto 356 221 lineto closepath clip newpath --194.8 344.2 translate -1 -1 scale -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06299 0.06299 sc -} bind def -/pagefooter { -$F2psEnd -restore -} bind def -%%EndProlog -pageheader -% -% Fig objects follow -% -% -% here starts figure with depth 50 -% Arc -7.500 slw -0 slc -gs clippath -3599 4000 m 3567 4148 l 3626 4161 l 3658 4013 l 3658 4013 l 3603 4124 l 3599 4000 l cp -eoclip -n 5449.3 4471.5 1878.7 -70.5453 -169.8379 arcn -gs col0 s gr - gr - -% arrowhead -0 slj -n 3599 4000 m 3603 4124 l 3658 4013 l 3599 4000 l cp gs 0.00 setgray ef gr col0 s -% Arc -gs clippath -4422 4004 m 4425 4155 l 4485 4154 l 4482 4003 l 4482 4003 l 4455 4124 l 4422 4004 l cp -eoclip -n 5539.0 4051.3 1087.6 -60.4713 175.3232 arcn -gs col0 s gr - gr - -% arrowhead -n 4422 4004 m 4455 4124 l 4482 4003 l 4422 4004 l cp gs 0.00 setgray ef gr col0 s -% Arc -gs clippath -4986 4010 m 5012 4159 l 5072 4149 l 5046 4000 l 5046 4000 l 5037 4124 l 4986 4010 l cp -eoclip -n 5628.8 3967.5 613.5 -36.7999 163.6698 arcn -gs col0 s gr - gr - -% arrowhead -n 4986 4010 m 5037 4124 l 5046 4000 l 4986 4010 l cp gs 0.00 setgray ef gr col0 s -% Arc -135.000 slw -gs clippath -7736 3835 m 7756 3984 l 7907 3964 l 7887 3814 l 7841 3821 l 7828 3944 l 7782 3829 l cp -eoclip -n 6609.1 4056.9 1224.8 -93.9364 -4.5364 arc -gs col0 s gr - gr - -% arrowhead -7.500 slw -n 7782 3829 m 7828 3944 l 7841 3821 l col0 s -% Polyline -n 3105 4140 m 6660 4140 l 6660 5085 l 3105 5085 l - cp gs col0 s gr -% Polyline -n 6660 4140 m 8730 4140 l 8730 5085 l 6660 5085 l - cp gs col7 0.50 shd ef gr gs col0 s gr -% Polyline -n 5805 2610 m 6345 2610 l 6345 3690 l 5805 3690 l - cp gs col0 s gr -% Polyline -n 5805 2835 m 6345 2835 l 6345 3015 l 5805 3015 l - cp gs col0 s gr -% Polyline -n 5805 3195 m 6345 3195 l 6345 3375 l 5805 3375 l - cp gs col0 s gr -% Polyline -n 5805 3510 m 6345 3510 l 6345 3690 l 5805 3690 l - cp gs col0 s gr -% Polyline -n 3510 4140 m 3780 4140 l 3780 5085 l 3510 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P2 [16 0 0 -8 234.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 4365 4140 m 4635 4140 l 4635 5085 l 4365 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P2 [16 0 0 -8 291.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 4905 4140 m 5265 4140 l 5265 5085 l 4905 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P2 [16 0 0 -8 327.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -/Times-Roman ff 190.50 scf sf -5985 2115 m -gs 1 -1 sc (API) col0 sh gr -/Times-Roman ff 190.50 scf sf -5895 2340 m -gs 1 -1 sc (Struct) col0 sh gr -/Times-Roman ff 190.50 scf sf -7020 5400 m -gs 1 -1 sc ( Estensione) col0 sh gr -/Times-Roman ff 190.50 scf sf -6525 2655 m -gs 1 -1 sc (dl_load\(api_p, id\);) col0 sh gr -/Times-Roman ff 190.50 scf sf -3195 5400 m -gs 1 -1 sc (Memoria indirizzabile programma gawk) col0 sh gr -% here ends figure; -pagefooter -showpage -%%Trailer -end -%EOF diff --git a/doc/it/api-figura1.fig b/doc/it/api-figura1.fig deleted file mode 100644 index c2718c71..00000000 --- a/doc/it/api-figura1.fig +++ /dev/null @@ -1,40 +0,0 @@ -#FIG 3.2 Produced by xfig version 3.2.5c -Landscape -Center -Metric -A4 -100.00 -Single --2 -1200 2 -5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 0 5449.265 4471.471 6075 2700 4320 2970 3600 4140 - 1 1 1.00 60.00 120.00 -5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 0 5538.971 4051.323 6075 3105 4725 3330 4455 4140 - 1 1 1.00 60.00 120.00 -5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 0 5628.750 3967.500 6120 3600 5220 3510 5040 4140 - 1 1 1.00 60.00 120.00 -5 1 0 10 0 7 50 -1 -1 0.000 0 0 1 0 6609.079 4056.868 6525 2835 7560 3285 7830 3960 - 0 0 1.00 60.00 120.00 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 3105 4140 6660 4140 6660 5085 3105 5085 3105 4140 -2 2 0 1 0 7 50 -1 10 0.000 0 0 -1 0 0 5 - 6660 4140 8730 4140 8730 5085 6660 5085 6660 4140 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 5805 2610 6345 2610 6345 3690 5805 3690 5805 2610 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 5805 2835 6345 2835 6345 3015 5805 3015 5805 2835 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 5805 3195 6345 3195 6345 3375 5805 3375 5805 3195 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 5805 3510 6345 3510 6345 3690 5805 3690 5805 3510 -2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 - 3510 4140 3780 4140 3780 5085 3510 5085 3510 4140 -2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 - 4365 4140 4635 4140 4635 5085 4365 5085 4365 4140 -2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 - 4905 4140 5265 4140 5265 5085 4905 5085 4905 4140 -4 0 0 50 -1 0 12 0.0000 4 135 270 5985 2115 API\001 -4 0 0 50 -1 0 12 0.0000 4 135 540 5895 2340 Struct\001 -4 0 0 50 -1 0 12 0.0000 4 135 1170 7020 5400 Estensione\001 -4 0 0 50 -1 0 12 0.0000 4 180 1710 6525 2655 dl_load(api_p, id);\001 -4 0 0 50 -1 0 12 0.0000 4 165 3240 3195 5400 Memoria indirizzabile programma gawk\001 diff --git a/doc/it/api-figura1.pdf b/doc/it/api-figura1.pdf deleted file mode 100644 index f31e25a8..00000000 Binary files a/doc/it/api-figura1.pdf and /dev/null differ diff --git a/doc/it/api-figura1.png b/doc/it/api-figura1.png deleted file mode 100644 index 444c2976..00000000 Binary files a/doc/it/api-figura1.png and /dev/null differ diff --git a/doc/it/api-figura1.txt b/doc/it/api-figura1.txt deleted file mode 100644 index 630e18f0..00000000 --- a/doc/it/api-figura1.txt +++ /dev/null @@ -1,24 +0,0 @@ - Struct (Struttura) - API - +---+ - | | - +---+ - +---------------| | - | +---+ dl_load(api_p, id); - | | | ___________________ - | +---+ | - | +---------| | __________________ | - | | +---+ || - | | | | || - | | +---+ || - | | +---| | || - | | | +---+ \ || / - | | | \ / - v v v \/ -+-------+-+---+-+---+-+------------------+--------------------+ -| |x| |x| |x| |OOOOOOOOOOOOOOOOOOOO| -| |x| |x| |x| |OOOOOOOOOOOOOOOOOOOO| -| |x| |x| |x| |OOOOOOOOOOOOOOOOOOOO| -+-------+-+---+-+---+-+------------------+--------------------+ - - Memoria indirizzabile programma gawk Estensione diff --git a/doc/it/api-figura2.eps b/doc/it/api-figura2.eps deleted file mode 100644 index 9920d3b9..00000000 --- a/doc/it/api-figura2.eps +++ /dev/null @@ -1,517 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Title: api-figura2.fig -%%Creator: fig2dev Version 3.2 Patchlevel 5e -%%CreationDate: Wed Jun 29 11:02:52 2016 -%%BoundingBox: 0 0 356 173 -%Magnification: 1.0000 -%%EndComments -%%BeginProlog -/MyAppDict 100 dict dup begin def -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end - -% This junk string is used by the show operators -/PATsstr 1 string def -/PATawidthshow { % cx cy cchar rx ry string - % Loop over each character in the string - { % cx cy cchar rx ry char - % Show the character - dup % cx cy cchar rx ry char char - PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char) - false charpath % cx cy cchar rx ry char - /clip load PATdraw - % Move past the character (charpath modified the - % current point) - currentpoint % cx cy cchar rx ry char x y - newpath - moveto % cx cy cchar rx ry char - % Reposition by cx,cy if the character in the string is cchar - 3 index eq { % cx cy cchar rx ry - 4 index 4 index rmoveto - } if - % Reposition all characters by rx ry - 2 copy rmoveto % cx cy cchar rx ry - } forall - pop pop pop pop pop % - - currentpoint - newpath - moveto -} bind def -/PATcg { - 7 dict dup begin - /lw currentlinewidth def - /lc currentlinecap def - /lj currentlinejoin def - /ml currentmiterlimit def - /ds [ currentdash ] def - /cc [ currentrgbcolor ] def - /cm matrix currentmatrix def - end -} bind def -% PATdraw - calculates the boundaries of the object and -% fills it with the current pattern -/PATdraw { % proc - save exch - PATpcalc % proc nw nh px py - 5 -1 roll exec % nw nh px py - newpath - PATfill % - - restore -} bind def -% PATfill - performs the tiling for the shape -/PATfill { % nw nh px py PATfill - - PATDict /CurrentPattern get dup begin - setfont - % Set the coordinate system to Pattern Space - PatternGState PATsg - % Set the color for uncolored pattezns - PaintType 2 eq { PATDict /PColor get PATsc } if - % Create the string for showing - 3 index string % nw nh px py str - % Loop for each of the pattern sources - 0 1 Multi 1 sub { % nw nh px py str source - % Move to the starting location - 3 index 3 index % nw nh px py str source px py - moveto % nw nh px py str source - % For multiple sources, set the appropriate color - Multi 1 ne { dup PC exch get PATsc } if - % Set the appropriate string for the source - 0 1 7 index 1 sub { 2 index exch 2 index put } for pop - % Loop over the number of vertical cells - 3 index % nw nh px py str nh - { % nw nh px py str - currentpoint % nw nh px py str cx cy - 2 index oldshow % nw nh px py str cx cy - YStep add moveto % nw nh px py str - } repeat % nw nh px py str - } for - 5 { pop } repeat - end -} bind def - -% PATkshow - kshow with the current pattezn -/PATkshow { % proc string - exch bind % string proc - 1 index 0 get % string proc char - % Loop over all but the last character in the string - 0 1 4 index length 2 sub { - % string proc char idx - % Find the n+1th character in the string - 3 index exch 1 add get % string proc char char+1 - exch 2 copy % strinq proc char+1 char char+1 char - % Now show the nth character - PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr) - false charpath % string proc char+1 char char+1 - /clip load PATdraw - % Move past the character (charpath modified the current point) - currentpoint newpath moveto - % Execute the user proc (should consume char and char+1) - mark 3 1 roll % string proc char+1 mark char char+1 - 4 index exec % string proc char+1 mark... - cleartomark % string proc char+1 - } for - % Now display the last character - PATsstr dup 0 4 -1 roll put % string proc (char+1) - false charpath % string proc - /clip load PATdraw - neewath - pop pop % - -} bind def -% PATmp - the makepattern equivalent -/PATmp { % patdict patmtx PATmp patinstance - exch dup length 7 add % We will add 6 new entries plus 1 FID - dict copy % Create a new dictionary - begin - % Matrix to install when painting the pattern - TilingType PATtcalc - /PatternGState PATcg def - PatternGState /cm 3 -1 roll put - % Check for multi pattern sources (Level 1 fast color patterns) - currentdict /Multi known not { /Multi 1 def } if - % Font dictionary definitions - /FontType 3 def - % Create a dummy encoding vector - /Encoding 256 array def - 3 string 0 1 255 { - Encoding exch dup 3 index cvs cvn put } for pop - /FontMatrix matrix def - /FontBBox BBox def - /BuildChar { - mark 3 1 roll % mark dict char - exch begin - Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata] - PaintType 2 eq Multi 1 ne or - { XStep 0 FontBBox aload pop setcachedevice } - { XStep 0 setcharwidth } ifelse - currentdict % mark [paintdata] dict - /PaintProc load % mark [paintdata] dict paintproc - end - gsave - false PATredef exec true PATredef - grestore - cleartomark % - - } bind def - currentdict - end % newdict - /foo exch % /foo newlict - definefont % newfont -} bind def -% PATpcalc - calculates the starting point and width/height -% of the tile fill for the shape -/PATpcalc { % - PATpcalc nw nh px py - PATDict /CurrentPattern get begin - gsave - % Set up the coordinate system to Pattern Space - % and lock down pattern - PatternGState /cm get setmatrix - BBox aload pop pop pop translate - % Determine the bounding box of the shape - pathbbox % llx lly urx ury - grestore - % Determine (nw, nh) the # of cells to paint width and height - PatHeight div ceiling % llx lly urx qh - 4 1 roll % qh llx lly urx - PatWidth div ceiling % qh llx lly qw - 4 1 roll % qw qh llx lly - PatHeight div floor % qw qh llx ph - 4 1 roll % ph qw qh llx - PatWidth div floor % ph qw qh pw - 4 1 roll % pw ph qw qh - 2 index sub cvi abs % pw ph qs qh-ph - exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph - % Determine the starting point of the pattern fill - %(px, py) - 4 2 roll % nw nh pw ph - PatHeight mul % nw nh pw py - exch % nw nh py pw - PatWidth mul exch % nw nh px py - end -} bind def - -% Save the original routines so that we can use them later on -/oldfill /fill load def -/oldeofill /eofill load def -/oldstroke /stroke load def -/oldshow /show load def -/oldashow /ashow load def -/oldwidthshow /widthshow load def -/oldawidthshow /awidthshow load def -/oldkshow /kshow load def - -% These defs are necessary so that subsequent procs don't bind in -% the originals -/fill { oldfill } bind def -/eofill { oldeofill } bind def -/stroke { oldstroke } bind def -/show { oldshow } bind def -/ashow { oldashow } bind def -/widthshow { oldwidthshow } bind def -/awidthshow { oldawidthshow } bind def -/kshow { oldkshow } bind def -/PATredef { - MyAppDict begin - { - /fill { /clip load PATdraw newpath } bind def - /eofill { /eoclip load PATdraw newpath } bind def - /stroke { PATstroke } bind def - /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def - /ashow { 0 0 null 6 3 roll PATawidthshow } - bind def - /widthshow { 0 0 3 -1 roll PATawidthshow } - bind def - /awidthshow { PATawidthshow } bind def - /kshow { PATkshow } bind def - } { - /fill { oldfill } bind def - /eofill { oldeofill } bind def - /stroke { oldstroke } bind def - /show { oldshow } bind def - /ashow { oldashow } bind def - /widthshow { oldwidthshow } bind def - /awidthshow { oldawidthshow } bind def - /kshow { oldkshow } bind def - } ifelse - end -} bind def -false PATredef -% Conditionally define setcmykcolor if not available -/setcmykcolor where { pop } { - /setcmykcolor { - 1 sub 4 1 roll - 3 { - 3 index add neg dup 0 lt { pop 0 } if 3 1 roll - } repeat - setrgbcolor - pop - } bind def -} ifelse -/PATsc { % colorarray - aload length % c1 ... cn length - dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor - } ifelse } ifelse -} bind def -/PATsg { % dict - begin - lw setlinewidth - lc setlinecap - lj setlinejoin - ml setmiterlimit - ds aload pop setdash - cc aload pop setrgbcolor - cm setmatrix - end -} bind def - -/PATDict 3 dict def -/PATsp { - true PATredef - PATDict begin - /CurrentPattern exch def - % If it's an uncolored pattern, save the color - CurrentPattern /PaintType get 2 eq { - /PColor exch def - } if - /CColor [ currentrgbcolor ] def - end -} bind def -% PATstroke - stroke with the current pattern -/PATstroke { - countdictstack - save - mark - { - currentpoint strokepath moveto - PATpcalc % proc nw nh px py - clip newpath PATfill - } stopped { - (*** PATstroke Warning: Path is too complex, stroking - with gray) = - cleartomark - restore - countdictstack exch sub dup 0 gt - { { end } repeat } { pop } ifelse - gsave 0.5 setgray oldstroke grestore - } { pop restore pop } ifelse - newpath -} bind def -/PATtcalc { % modmtx tilingtype PATtcalc tilematrix - % Note: tiling types 2 and 3 are not supported - gsave - exch concat % tilingtype - matrix currentmatrix exch % cmtx tilingtype - % Tiling type 1 and 3: constant spacing - 2 ne { - % Distort the pattern so that it occupies - % an integral number of device pixels - dup 4 get exch dup 5 get exch % tx ty cmtx - XStep 0 dtransform - round exch round exch % tx ty cmtx dx.x dx.y - XStep div exch XStep div exch % tx ty cmtx a b - 0 YStep dtransform - round exch round exch % tx ty cmtx a b dy.x dy.y - YStep div exch YStep div exch % tx ty cmtx a b c d - 7 -3 roll astore % { a b c d tx ty } - } if - grestore -} bind def -/PATusp { - false PATredef - PATDict begin - CColor PATsc - end -} bind def - -% right30 -11 dict begin -/PaintType 1 def -/PatternType 1 def -/TilingType 1 def -/BBox [0 0 1 1] def -/XStep 1 def -/YStep 1 def -/PatWidth 1 def -/PatHeight 1 def -/Multi 2 def -/PaintData [ - { clippath } bind - { 32 16 true [ 32 0 0 -16 0 16 ] - {<00030003000c000c0030003000c000c0030003000c000c00 - 30003000c000c00000030003000c000c0030003000c000c0 - 030003000c000c0030003000c000c000>} - imagemask } bind -] def -/PaintProc { - pop - exec fill -} def -currentdict -end -/P2 exch def - -% crosshatch45 -11 dict begin -/PaintType 1 def -/PatternType 1 def -/TilingType 1 def -/BBox [0 0 1 1] def -/XStep 1 def -/YStep 1 def -/PatWidth 1 def -/PatHeight 1 def -/Multi 2 def -/PaintData [ - { clippath } bind - { 20 20 true [ 20 0 0 -20 0 20 ] - {<8020004050102088201104400a02800401000a02 - 8011044020882040501080200040501020882011 - 04400a02800401000a0280110440208820405010>} - imagemask } bind -] def -/PaintProc { - pop - exec fill -} def -currentdict -end -/P6 exch def - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -/pageheader { -save -newpath 0 173 moveto 0 0 lineto 356 0 lineto 356 173 lineto closepath clip newpath --194.8 344.2 translate -1 -1 scale -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06299 0.06299 sc -} bind def -/pagefooter { -$F2psEnd -restore -} bind def -%%EndProlog -pageheader -% -% Fig objects follow -% -% -% here starts figure with depth 50 -% Arc -7.500 slw -0 slc -gs clippath -3662 4014 m 3567 4132 l 3613 4170 l 3708 4052 l 3708 4052 l 3610 4127 l 3662 4014 l cp -eoclip -n 5895.0 5917.5 2902.8 -37.7581 -142.2419 arcn -gs col0 s gr - gr - -% arrowhead -0 slj -n 3662 4014 m 3610 4127 l 3708 4052 l 3662 4014 l cp gs 0.00 setgray ef gr col0 s -% Polyline -n 3105 4140 m 6660 4140 l 6660 5085 l 3105 5085 l - cp gs col0 s gr -% Polyline -n 6660 4140 m 8730 4140 l 8730 5085 l 6660 5085 l - cp gs col7 0.50 shd ef gr gs col0 s gr -% Polyline -n 3510 4140 m 3780 4140 l 3780 5085 l 3510 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P2 [16 0 0 -8 234.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 4365 4140 m 4635 4140 l 4635 5085 l 4365 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P2 [16 0 0 -8 291.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 4905 4140 m 5265 4140 l 5265 5085 l 4905 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P2 [16 0 0 -8 327.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 7965 4140 m 8370 4140 l 8370 5085 l 7965 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P6 [16 0 0 -16 531.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -/Courier-Bold ff 190.50 scf sf -3420 2880 m -gs 1 -1 sc (register_ext_func\({ "chdir", do_chdir, 1 }\);) col0 sh gr -/Times-Roman ff 190.50 scf sf -6840 5400 m -gs 1 -1 sc ( Estensione) col0 sh gr -/Times-Roman ff 190.50 scf sf -3195 5400 m -gs 1 -1 sc (Memoria indirizzabile programma gawk) col0 sh gr -% here ends figure; -pagefooter -showpage -%%Trailer -end -%EOF diff --git a/doc/it/api-figura2.fig b/doc/it/api-figura2.fig deleted file mode 100644 index a8b5c47d..00000000 --- a/doc/it/api-figura2.fig +++ /dev/null @@ -1,26 +0,0 @@ -#FIG 3.2 Produced by xfig version 3.2.5c -Landscape -Center -Metric -A4 -100.00 -Single --2 -1200 2 -5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 0 5895.000 5917.500 8190 4140 5940 3015 3600 4140 - 1 1 1.00 60.00 120.00 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 3105 4140 6660 4140 6660 5085 3105 5085 3105 4140 -2 2 0 1 0 7 50 -1 10 0.000 0 0 -1 0 0 5 - 6660 4140 8730 4140 8730 5085 6660 5085 6660 4140 -2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 - 3510 4140 3780 4140 3780 5085 3510 5085 3510 4140 -2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 - 4365 4140 4635 4140 4635 5085 4365 5085 4365 4140 -2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 - 4905 4140 5265 4140 5265 5085 4905 5085 4905 4140 -2 2 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 5 - 7965 4140 8370 4140 8370 5085 7965 5085 7965 4140 -4 0 0 50 -1 14 12 0.0000 4 180 3960 3420 2880 register_ext_func({ "chdir", do_chdir, 1 });\001 -4 0 0 50 -1 0 12 0.0000 4 135 1260 6840 5400 Estensione\001 -4 0 0 50 -1 0 12 0.0000 4 165 3240 3195 5400 Memoria indirizzabile programma gawk\001 diff --git a/doc/it/api-figura2.pdf b/doc/it/api-figura2.pdf deleted file mode 100644 index cadd4267..00000000 Binary files a/doc/it/api-figura2.pdf and /dev/null differ diff --git a/doc/it/api-figura2.png b/doc/it/api-figura2.png deleted file mode 100644 index dbc46910..00000000 Binary files a/doc/it/api-figura2.png and /dev/null differ diff --git a/doc/it/api-figura2.txt b/doc/it/api-figura2.txt deleted file mode 100644 index a030fb5a..00000000 --- a/doc/it/api-figura2.txt +++ /dev/null @@ -1,12 +0,0 @@ - register_ext_func({ "chdir", do_chdir, 1 }); - - +--------------------------------------------+ - | | - V | -+-------+-+---+-+---+-+------------------+--------------+-+---+ -| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| -| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| -| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| -+-------+-+---+-+---+-+------------------+--------------+-+---+ - - Memoria indirizzabile programma gawk Estensione diff --git a/doc/it/api-figura3.eps b/doc/it/api-figura3.eps deleted file mode 100644 index daa3ba76..00000000 --- a/doc/it/api-figura3.eps +++ /dev/null @@ -1,526 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Title: api-figura3.fig -%%Creator: fig2dev Version 3.2 Patchlevel 5e -%%CreationDate: Wed Jun 29 11:05:29 2016 -%%BoundingBox: 0 0 356 170 -%Magnification: 1.0000 -%%EndComments -%%BeginProlog -/MyAppDict 100 dict dup begin def -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end - -% This junk string is used by the show operators -/PATsstr 1 string def -/PATawidthshow { % cx cy cchar rx ry string - % Loop over each character in the string - { % cx cy cchar rx ry char - % Show the character - dup % cx cy cchar rx ry char char - PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char) - false charpath % cx cy cchar rx ry char - /clip load PATdraw - % Move past the character (charpath modified the - % current point) - currentpoint % cx cy cchar rx ry char x y - newpath - moveto % cx cy cchar rx ry char - % Reposition by cx,cy if the character in the string is cchar - 3 index eq { % cx cy cchar rx ry - 4 index 4 index rmoveto - } if - % Reposition all characters by rx ry - 2 copy rmoveto % cx cy cchar rx ry - } forall - pop pop pop pop pop % - - currentpoint - newpath - moveto -} bind def -/PATcg { - 7 dict dup begin - /lw currentlinewidth def - /lc currentlinecap def - /lj currentlinejoin def - /ml currentmiterlimit def - /ds [ currentdash ] def - /cc [ currentrgbcolor ] def - /cm matrix currentmatrix def - end -} bind def -% PATdraw - calculates the boundaries of the object and -% fills it with the current pattern -/PATdraw { % proc - save exch - PATpcalc % proc nw nh px py - 5 -1 roll exec % nw nh px py - newpath - PATfill % - - restore -} bind def -% PATfill - performs the tiling for the shape -/PATfill { % nw nh px py PATfill - - PATDict /CurrentPattern get dup begin - setfont - % Set the coordinate system to Pattern Space - PatternGState PATsg - % Set the color for uncolored pattezns - PaintType 2 eq { PATDict /PColor get PATsc } if - % Create the string for showing - 3 index string % nw nh px py str - % Loop for each of the pattern sources - 0 1 Multi 1 sub { % nw nh px py str source - % Move to the starting location - 3 index 3 index % nw nh px py str source px py - moveto % nw nh px py str source - % For multiple sources, set the appropriate color - Multi 1 ne { dup PC exch get PATsc } if - % Set the appropriate string for the source - 0 1 7 index 1 sub { 2 index exch 2 index put } for pop - % Loop over the number of vertical cells - 3 index % nw nh px py str nh - { % nw nh px py str - currentpoint % nw nh px py str cx cy - 2 index oldshow % nw nh px py str cx cy - YStep add moveto % nw nh px py str - } repeat % nw nh px py str - } for - 5 { pop } repeat - end -} bind def - -% PATkshow - kshow with the current pattezn -/PATkshow { % proc string - exch bind % string proc - 1 index 0 get % string proc char - % Loop over all but the last character in the string - 0 1 4 index length 2 sub { - % string proc char idx - % Find the n+1th character in the string - 3 index exch 1 add get % string proc char char+1 - exch 2 copy % strinq proc char+1 char char+1 char - % Now show the nth character - PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr) - false charpath % string proc char+1 char char+1 - /clip load PATdraw - % Move past the character (charpath modified the current point) - currentpoint newpath moveto - % Execute the user proc (should consume char and char+1) - mark 3 1 roll % string proc char+1 mark char char+1 - 4 index exec % string proc char+1 mark... - cleartomark % string proc char+1 - } for - % Now display the last character - PATsstr dup 0 4 -1 roll put % string proc (char+1) - false charpath % string proc - /clip load PATdraw - neewath - pop pop % - -} bind def -% PATmp - the makepattern equivalent -/PATmp { % patdict patmtx PATmp patinstance - exch dup length 7 add % We will add 6 new entries plus 1 FID - dict copy % Create a new dictionary - begin - % Matrix to install when painting the pattern - TilingType PATtcalc - /PatternGState PATcg def - PatternGState /cm 3 -1 roll put - % Check for multi pattern sources (Level 1 fast color patterns) - currentdict /Multi known not { /Multi 1 def } if - % Font dictionary definitions - /FontType 3 def - % Create a dummy encoding vector - /Encoding 256 array def - 3 string 0 1 255 { - Encoding exch dup 3 index cvs cvn put } for pop - /FontMatrix matrix def - /FontBBox BBox def - /BuildChar { - mark 3 1 roll % mark dict char - exch begin - Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata] - PaintType 2 eq Multi 1 ne or - { XStep 0 FontBBox aload pop setcachedevice } - { XStep 0 setcharwidth } ifelse - currentdict % mark [paintdata] dict - /PaintProc load % mark [paintdata] dict paintproc - end - gsave - false PATredef exec true PATredef - grestore - cleartomark % - - } bind def - currentdict - end % newdict - /foo exch % /foo newlict - definefont % newfont -} bind def -% PATpcalc - calculates the starting point and width/height -% of the tile fill for the shape -/PATpcalc { % - PATpcalc nw nh px py - PATDict /CurrentPattern get begin - gsave - % Set up the coordinate system to Pattern Space - % and lock down pattern - PatternGState /cm get setmatrix - BBox aload pop pop pop translate - % Determine the bounding box of the shape - pathbbox % llx lly urx ury - grestore - % Determine (nw, nh) the # of cells to paint width and height - PatHeight div ceiling % llx lly urx qh - 4 1 roll % qh llx lly urx - PatWidth div ceiling % qh llx lly qw - 4 1 roll % qw qh llx lly - PatHeight div floor % qw qh llx ph - 4 1 roll % ph qw qh llx - PatWidth div floor % ph qw qh pw - 4 1 roll % pw ph qw qh - 2 index sub cvi abs % pw ph qs qh-ph - exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph - % Determine the starting point of the pattern fill - %(px, py) - 4 2 roll % nw nh pw ph - PatHeight mul % nw nh pw py - exch % nw nh py pw - PatWidth mul exch % nw nh px py - end -} bind def - -% Save the original routines so that we can use them later on -/oldfill /fill load def -/oldeofill /eofill load def -/oldstroke /stroke load def -/oldshow /show load def -/oldashow /ashow load def -/oldwidthshow /widthshow load def -/oldawidthshow /awidthshow load def -/oldkshow /kshow load def - -% These defs are necessary so that subsequent procs don't bind in -% the originals -/fill { oldfill } bind def -/eofill { oldeofill } bind def -/stroke { oldstroke } bind def -/show { oldshow } bind def -/ashow { oldashow } bind def -/widthshow { oldwidthshow } bind def -/awidthshow { oldawidthshow } bind def -/kshow { oldkshow } bind def -/PATredef { - MyAppDict begin - { - /fill { /clip load PATdraw newpath } bind def - /eofill { /eoclip load PATdraw newpath } bind def - /stroke { PATstroke } bind def - /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def - /ashow { 0 0 null 6 3 roll PATawidthshow } - bind def - /widthshow { 0 0 3 -1 roll PATawidthshow } - bind def - /awidthshow { PATawidthshow } bind def - /kshow { PATkshow } bind def - } { - /fill { oldfill } bind def - /eofill { oldeofill } bind def - /stroke { oldstroke } bind def - /show { oldshow } bind def - /ashow { oldashow } bind def - /widthshow { oldwidthshow } bind def - /awidthshow { oldawidthshow } bind def - /kshow { oldkshow } bind def - } ifelse - end -} bind def -false PATredef -% Conditionally define setcmykcolor if not available -/setcmykcolor where { pop } { - /setcmykcolor { - 1 sub 4 1 roll - 3 { - 3 index add neg dup 0 lt { pop 0 } if 3 1 roll - } repeat - setrgbcolor - pop - } bind def -} ifelse -/PATsc { % colorarray - aload length % c1 ... cn length - dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor - } ifelse } ifelse -} bind def -/PATsg { % dict - begin - lw setlinewidth - lc setlinecap - lj setlinejoin - ml setmiterlimit - ds aload pop setdash - cc aload pop setrgbcolor - cm setmatrix - end -} bind def - -/PATDict 3 dict def -/PATsp { - true PATredef - PATDict begin - /CurrentPattern exch def - % If it's an uncolored pattern, save the color - CurrentPattern /PaintType get 2 eq { - /PColor exch def - } if - /CColor [ currentrgbcolor ] def - end -} bind def -% PATstroke - stroke with the current pattern -/PATstroke { - countdictstack - save - mark - { - currentpoint strokepath moveto - PATpcalc % proc nw nh px py - clip newpath PATfill - } stopped { - (*** PATstroke Warning: Path is too complex, stroking - with gray) = - cleartomark - restore - countdictstack exch sub dup 0 gt - { { end } repeat } { pop } ifelse - gsave 0.5 setgray oldstroke grestore - } { pop restore pop } ifelse - newpath -} bind def -/PATtcalc { % modmtx tilingtype PATtcalc tilematrix - % Note: tiling types 2 and 3 are not supported - gsave - exch concat % tilingtype - matrix currentmatrix exch % cmtx tilingtype - % Tiling type 1 and 3: constant spacing - 2 ne { - % Distort the pattern so that it occupies - % an integral number of device pixels - dup 4 get exch dup 5 get exch % tx ty cmtx - XStep 0 dtransform - round exch round exch % tx ty cmtx dx.x dx.y - XStep div exch XStep div exch % tx ty cmtx a b - 0 YStep dtransform - round exch round exch % tx ty cmtx a b dy.x dy.y - YStep div exch YStep div exch % tx ty cmtx a b c d - 7 -3 roll astore % { a b c d tx ty } - } if - grestore -} bind def -/PATusp { - false PATredef - PATDict begin - CColor PATsc - end -} bind def - -% right30 -11 dict begin -/PaintType 1 def -/PatternType 1 def -/TilingType 1 def -/BBox [0 0 1 1] def -/XStep 1 def -/YStep 1 def -/PatWidth 1 def -/PatHeight 1 def -/Multi 2 def -/PaintData [ - { clippath } bind - { 32 16 true [ 32 0 0 -16 0 16 ] - {<00030003000c000c0030003000c000c0030003000c000c00 - 30003000c000c00000030003000c000c0030003000c000c0 - 030003000c000c0030003000c000c000>} - imagemask } bind -] def -/PaintProc { - pop - exec fill -} def -currentdict -end -/P2 exch def - -% crosshatch45 -11 dict begin -/PaintType 1 def -/PatternType 1 def -/TilingType 1 def -/BBox [0 0 1 1] def -/XStep 1 def -/YStep 1 def -/PatWidth 1 def -/PatHeight 1 def -/Multi 2 def -/PaintData [ - { clippath } bind - { 20 20 true [ 20 0 0 -20 0 20 ] - {<8020004050102088201104400a02800401000a02 - 8011044020882040501080200040501020882011 - 04400a02800401000a0280110440208820405010>} - imagemask } bind -] def -/PaintProc { - pop - exec fill -} def -currentdict -end -/P6 exch def - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -/pageheader { -save -newpath 0 170 moveto 0 0 lineto 356 0 lineto 356 170 lineto closepath clip newpath --194.8 344.2 translate -1 -1 scale -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06299 0.06299 sc -} bind def -/pagefooter { -$F2psEnd -restore -} bind def -%%EndProlog -pageheader -% -% Fig objects follow -% -% -% here starts figure with depth 50 -% Arc -7.500 slw -0 slc -gs clippath -8019 4079 m 8138 4172 l 8175 4125 l 8056 4032 l 8056 4032 l 8132 4130 l 8019 4079 l cp -eoclip -n 6120.0 6627.7 3207.7 -129.1463 -50.8537 arc -gs col0 s gr - gr - -% arrowhead -0 slj -n 8019 4079 m 8132 4130 l 8056 4032 l 8019 4079 l cp gs 0.00 setgray ef gr col0 s -% Polyline -n 3105 4140 m 6660 4140 l 6660 5085 l 3105 5085 l - cp gs col0 s gr -% Polyline -n 6660 4140 m 8730 4140 l 8730 5085 l 6660 5085 l - cp gs col7 0.50 shd ef gr gs col0 s gr -% Polyline -n 3510 4140 m 3780 4140 l 3780 5085 l 3510 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P2 [16 0 0 -8 234.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 4365 4140 m 4635 4140 l 4635 5085 l 4365 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P2 [16 0 0 -8 291.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 4905 4140 m 5265 4140 l 5265 5085 l 4905 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P2 [16 0 0 -8 327.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -% Polyline -n 7965 4140 m 8370 4140 l 8370 5085 l 7965 5085 l - cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def -15.00 15.00 sc P6 [16 0 0 -16 531.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr -/Courier-Bold ff 190.50 scf sf -3240 3150 m -gs 1 -1 sc ( chdir\("/path"\)) col0 sh gr -/Courier-Bold ff 190.50 scf sf -3330 3375 m -gs 1 -1 sc (}) col0 sh gr -/Courier-Bold ff 190.50 scf sf -3375 2925 m -gs 1 -1 sc (BEGIN {) col0 sh gr -/Courier-Bold ff 190.50 scf sf -6660 3150 m -gs 1 -1 sc (\(*fnptr\)\(1\);) col0 sh gr -/Times-Roman ff 190.50 scf sf -3150 5400 m -gs 1 -1 sc (Memoria indirizzabile programma gawk) col0 sh gr -/Times-Roman ff 190.50 scf sf -6930 5400 m -gs 1 -1 sc ( Estensione) col0 sh gr -% here ends figure; -pagefooter -showpage -%%Trailer -end -%EOF diff --git a/doc/it/api-figura3.fig b/doc/it/api-figura3.fig deleted file mode 100644 index fae92940..00000000 --- a/doc/it/api-figura3.fig +++ /dev/null @@ -1,29 +0,0 @@ -#FIG 3.2 Produced by xfig version 3.2.5c -Landscape -Center -Metric -A4 -100.00 -Single --2 -1200 2 -5 1 0 1 0 7 50 -1 -1 0.000 0 0 1 0 6120.000 6627.656 4095 4140 6120 3420 8145 4140 - 1 1 1.00 60.00 120.00 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 3105 4140 6660 4140 6660 5085 3105 5085 3105 4140 -2 2 0 1 0 7 50 -1 10 0.000 0 0 -1 0 0 5 - 6660 4140 8730 4140 8730 5085 6660 5085 6660 4140 -2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 - 3510 4140 3780 4140 3780 5085 3510 5085 3510 4140 -2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 - 4365 4140 4635 4140 4635 5085 4365 5085 4365 4140 -2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 - 4905 4140 5265 4140 5265 5085 4905 5085 4905 4140 -2 2 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 5 - 7965 4140 8370 4140 8370 5085 7965 5085 7965 4140 -4 0 0 50 -1 14 12 0.0000 4 180 1620 3240 3150 chdir("/path")\001 -4 0 0 50 -1 14 12 0.0000 4 165 90 3330 3375 }\001 -4 0 0 50 -1 14 12 0.0000 4 165 630 3375 2925 BEGIN {\001 -4 0 0 50 -1 14 12 0.0000 4 180 1080 6660 3150 (*fnptr)(1);\001 -4 0 0 50 -1 0 12 0.0000 4 165 3240 3150 5400 Memoria indirizzabile programma gawk\001 -4 0 0 50 -1 0 12 0.0000 4 135 1260 6930 5400 Estensione\001 diff --git a/doc/it/api-figura3.pdf b/doc/it/api-figura3.pdf deleted file mode 100644 index 07f406bd..00000000 Binary files a/doc/it/api-figura3.pdf and /dev/null differ diff --git a/doc/it/api-figura3.png b/doc/it/api-figura3.png deleted file mode 100644 index 26ca6cd6..00000000 Binary files a/doc/it/api-figura3.png and /dev/null differ diff --git a/doc/it/api-figura3.txt b/doc/it/api-figura3.txt deleted file mode 100644 index 02791df5..00000000 --- a/doc/it/api-figura3.txt +++ /dev/null @@ -1,13 +0,0 @@ - BEGIN { - chdir("/path") (*fnptr)(1); - } - +--------------------------------------------+ - | | - | V -+-------+-+---+-+---+-+------------------+--------------+-+---+ -| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| -| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| -| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| -+-------+-+---+-+---+-+------------------+--------------+-+---+ - - Memoria indirizzabile programma gawk Estensione diff --git a/doc/it/flusso-elaborazione.eps b/doc/it/flusso-elaborazione.eps deleted file mode 100644 index c9e4c938..00000000 --- a/doc/it/flusso-elaborazione.eps +++ /dev/null @@ -1,420 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: cairo 1.12.8 (http://cairographics.org) -%%CreationDate: Wed Dec 17 19:10:08 2014 -%%Pages: 1 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%BoundingBox: 0 -1 366 172 -%%EndComments -%%BeginProlog -save -50 dict begin -/q { gsave } bind def -/Q { grestore } bind def -/cm { 6 array astore concat } bind def -/w { setlinewidth } bind def -/J { setlinecap } bind def -/j { setlinejoin } bind def -/M { setmiterlimit } bind def -/d { setdash } bind def -/m { moveto } bind def -/l { lineto } bind def -/c { curveto } bind def -/h { closepath } bind def -/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto - 0 exch rlineto 0 rlineto closepath } bind def -/S { stroke } bind def -/f { fill } bind def -/f* { eofill } bind def -/n { newpath } bind def -/W { clip } bind def -/W* { eoclip } bind def -/BT { } bind def -/ET { } bind def -/pdfmark where { pop globaldict /?pdfmark /exec load put } - { globaldict begin /?pdfmark /pop load def /pdfmark - /cleartomark load def end } ifelse -/BDC { mark 3 1 roll /BDC pdfmark } bind def -/EMC { mark /EMC pdfmark } bind def -/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def -/Tj { show currentpoint cairo_store_point } bind def -/TJ { - { - dup - type /stringtype eq - { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse - } forall - currentpoint cairo_store_point -} bind def -/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore - cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def -/Tf { pop /cairo_font exch def /cairo_font_matrix where - { pop cairo_selectfont } if } bind def -/Td { matrix translate cairo_font_matrix matrix concatmatrix dup - /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point - /cairo_font where { pop cairo_selectfont } if } bind def -/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def - cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def -/g { setgray } bind def -/rg { setrgbcolor } bind def -/d1 { setcachedevice } bind def -%%EndProlog -11 dict begin -/FontType 42 def -/FontName /DejaVuSans def -/PaintType 0 def -/FontMatrix [ 1 0 0 1 0 0 ] def -/FontBBox [ 0 0 0 0 ] def -/Encoding 256 array def -0 1 255 { Encoding exch /.notdef put } for -Encoding 63 /question put -Encoding 65 /A put -Encoding 69 /E put -Encoding 73 /I put -Encoding 78 /N put -Encoding 80 /P put -Encoding 83 /S put -Encoding 97 /a put -Encoding 98 /b put -Encoding 99 /c put -Encoding 100 /d put -Encoding 101 /e put -Encoding 105 /i put -Encoding 108 /l put -Encoding 110 /n put -Encoding 111 /o put -Encoding 114 /r put -Encoding 116 /t put -Encoding 117 /u put -Encoding 122 /z put -Encoding 236 /igrave put -/CharStrings 22 dict dup begin -/.notdef 0 def -/I 1 def -/n 2 def -/i 3 def -/z 4 def -/a 5 def -/l 6 def -/o 7 def -/e 8 def -/A 9 def -/c 10 def -/r 11 def -/d 12 def -/t 13 def -/question 14 def -/N 15 def -/S 16 def -/igrave 17 def -/E 18 def -/b 19 def -/P 20 def -/u 21 def -end readonly def -/sfnts [ -<0001000000090080000300106376742000691d3900000ddc000001fe6670676d7134766a0000 -0fdc000000ab676c7966478ea3590000009c00000d4068656164f79ac5e70000108800000036 -686865610cb80669000010c000000024686d747864c10d12000010e4000000606c6f63610000 -a9f000001144000000646d61787004850671000011a800000020707265703b07f100000011c8 -0000056800020066fe96046605a400030007001a400c04fb0006fb0108057f0204002fc4d4ec -310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f2720629000100c9 -0000019305d50003002eb700af02011c00040410fc4bb0105458b9000000403859ec31002fec -3001400d30054005500560058f059f05065d13331123c9caca05d5fa2b00000100ba00000464 -047b001300364019030900030e0106870e11b80cbc0a010208004e0d09080b461410fcec32f4 -ec31002f3ce4f4c4ec1112173930b46015cf1502015d0111231134262322061511231133153e -013332160464b87c7c95acb9b942b375c1c602a4fd5c029e9f9ebea4fd870460ae6564ef0002 -00c100000179061400030007002b400e06be04b100bc020501080400460810fc3cec3231002f -e4fcec30400b1009400950096009700905015d1333112311331523c1b8b8b8b80460fba00614 -e90000010058000003db04600009009d401a081102030203110708074208a900bc03a9050803 -01000401060a10dc4bb00b544bb00c545b58b90006ffc038594bb0135458b9000600403859c4 -32c411393931002fecf4ec304b5358071005ed071005ed592201404205021602260247024907 -050b080f0b18031b082b08200b36033908300b400140024503400440054308570359085f0b60 -01600266036004600562087f0b800baf0b1b5d005d1321150121152135012171036afd4c02b4 -fc7d02b4fd650460a8fcdb93a80325000002007bffe3042d047b000a002500bc4027191f0b17 -090e00a91706b90e1120861fba1cb923b8118c170c001703180d09080b1f030814452610fcec -ccd4ec323211393931002fc4e4f4fcf4ec10c6ee10ee11391139123930406e301d301e301f30 -20302130223f27401d401e401f402040214022501d501e501f50205021502250277027851d87 -1e871f8720872185229027a027f0271e301e301f30203021401e401f40204021501e501f5020 -5021601e601f60206021701e701f70207021801e801f80208021185d015d0122061514163332 -363d01371123350e01232226353436332135342623220607353e0133321602bedfac816f99b9 -b8b83fbc88accbfdfb0102a79760b65465be5af3f00233667b6273d9b4294cfd81aa6661c1a2 -bdc0127f8b2e2eaa2727fc00000100c100000179061400030022b7009702010800460410fcec -31002fec30400d10054005500560057005f00506015d13331123c1b8b80614f9ec0000020071 -ffe30475047b000b0017004a401306b91200b90cb8128c1809120f51031215451810fcecf4ec -310010e4f4ec10ee3040233f197b007b067f077f087f097f0a7f0b7b0c7f0d7f0e7f0f7f107f -117b12a019f01911015d012206151416333236353426273200111000232200111000027394ac -ab9593acac93f00112feeef0f1feef011103dfe7c9c9e7e8c8c7e99cfec8feecfeedfec70139 -011301140138000000020071ffe3047f047b0014001b00704024001501098608880515a90105 -b90c01bb18b912b80c8c1c1b1502081508004b02120f451c10fcecf4ecc4111239310010e4f4 -ece410ee10ee10f4ee1112393040293f1d701da01dd01df01d053f003f013f023f153f1b052c -072f082f092c0a6f006f016f026f156f1b095d71015d0115211e0133323637150e0123200011 -1000333200072e0123220607047ffcb20ccdb76ac76263d06bfef4fec70129fce20107b802a5 -889ab90e025e5abec73434ae2a2c0138010a01130143feddc497b4ae9e000002001000000568 -05d50002000a00c2404100110100040504021105050401110a030a0011020003030a07110504 -06110505040911030a08110a030a4200030795010381090509080706040302010009050a0b10 -d4c4173931002f3ce4d4ec1239304b5358071005ed0705ed071005ed0705ed071008ed071005 -ed071005ed071008ed5922b2200c01015d40420f010f020f070f080f005800760070008c0009 -07010802060309041601190256015802500c67016802780176027c0372047707780887018802 -800c980299039604175d005d090121013301230321032302bcfeee0225fe7be50239d288fd5f -88d5050efd1903aefa2b017ffe81000000010071ffe303e7047b0019003f401b00860188040e -860d880ab91104b917b8118c1a07120d004814451a10fce432ec310010e4f4ec10fef4ee10f5 -ee30400b0f1b101b801b901ba01b05015d01152e0123220615141633323637150e0123220011 -100021321603e74e9d50b3c6c6b3509d4e4da55dfdfed6012d010655a20435ac2b2be3cdcde3 -2b2baa2424013e010e0112013a230000000100ba0000034a047b001100304014060b0700110b -03870eb809bc070a06080008461210fcc4ec3231002fe4f4ecc4d4cc11123930b450139f1302 -015d012e012322061511231133153e0133321617034a1f492c9ca7b9b93aba85132e1c03b412 -11cbbefdb20460ae66630505000000020071ffe3045a06140010001c003840191ab9000e14b9 -05088c0eb801970317040008024711120b451d10fcecf4ec323231002fece4f4c4ec10c4ee30 -b6601e801ea01e03015d0111331123350e012322021110003332160114163332363534262322 -0603a2b8b83ab17ccbff00ffcb7cb1fdc7a79292a8a89292a703b6025ef9eca8646101440108 -0108014461fe15cbe7e7cbcbe7e700010037000002f2059e0013003840190e05080f03a90011 -01bc08870a0b08090204000810120e461410fc3cc4fc3cc432393931002fecf43cc4ec321139 -3930b2af1501015d01112115211114163b01152322263511233533110177017bfe854b73bdbd -d5a28787059efec28ffda0894e9a9fd202608f013e00000000020093000003b005f000030024 -0065402b241e0906040a1d13040014861388109517910083021d1a0d0905040a1e010d1c1a04 -1c05010300261a132510dc4bb00c5458b90013ffc03859c4fcecd4ec10ee1139391112391112 -3931002feef6fef4ee10cd11393917393001b679097a0a7a20035d2533152313233534363f01 -3e0135342623220607353e013332161514060f010e01070e01150187cbcbc5bf385a5a393383 -6c4fb3615ec167b8df485a582f27080606fefe01919a65825659355e31596e4643bc3938c29f -4c8956562f3519153c340000000100c90000053305d500090079401e07110102010211060706 -4207020300af0805060107021c0436071c00040a10fcecfcec11393931002f3cec323939304b -5358071004ed071004ed5922b21f0b01015d4030360238074802470769026607800207060109 -0615011a06460149065701580665016906790685018a0695019a069f0b105d005d1321011133 -1121011123c901100296c4fef0fd6ac405d5fb1f04e1fa2b04e1fb1f00010087ffe304a205f0 -0027007e403c0d0c020e0b021e1f1e080902070a021f1f1e420a0b1e1f0415010015a1149418 -9511049500942591118c281e0a0b1f1b0700221b190e2d071914222810dcc4ecfcece4111239 -393939310010e4f4e4ec10eef6ee10c6111739304b535807100eed11173907100eed11173959 -22b20f2901015db61f292f294f29035d01152e012322061514161f011e011514042122262735 -1e013332363534262f012e01353424333216044873cc5fa5b377a67ae2d7feddfee76aef807b -ec72adbc879a7be2ca0117f569da05a4c53736807663651f192bd9b6d9e0302fd04546887e6e -7c1f182dc0abc6e42600ffffffc7000001a6066610270016ff1d0000120600170000000100c9 -0000048b05d5000b002e401506950402950081089504ad0a05010907031c00040c10fcec32d4 -c4c431002fececf4ec10ee30b21f0d01015d132115211121152111211521c903b0fd1a02c7fd -3902f8fc3e05d5aafe46aafde3aa0000000200baffe304a40614000b001c0038401903b90c0f -09b918158c0fb81b971900121247180c06081a461d10fcec3232f4ec31002fece4f4c4ec10c6 -ee30b6601e801ea01e03015d013426232206151416333236013e013332001110022322262715 -23113303e5a79292a7a79292a7fd8e3ab17bcc00ffffcc7bb13ab9b9022fcbe7e7cbcbe7e702 -526461febcfef8fef8febc6164a80614000200c90000048d05d500080013003a401801951000 -95098112100a0802040005190d3f11001c09041410fcec32fcec11173931002ff4ecd4ec3040 -0b0f151f153f155f15af1505015d011133323635342623252132041514042b0111230193fe8d -9a9a8dfe3801c8fb0101fefffbfeca052ffdcf92878692a6e3dbdde2fda8000200aeffe30458 -047b00130014003b401c030900030e0106870e118c0a01bc14b80c0d0908140b4e0208004615 -10fcecf439ec3231002fe4e432f4c4ec1112173930b46f15c01502015d131133111416333236 -3511331123350e0123222601aeb87c7c95adb8b843b175c1c801cf01ba02a6fd619f9fbea402 -7bfba0ac6663f003a800000100aa04f00289066600030031400901b400b3040344010410dcec -310010f4ec30004bb009544bb00e545b58bd0004ffc000010004000400403811373859090123 -01016f011a99feba0666fe8a0176000200c100000179047b00030004002c400b04b800bf0204 -010800460510fcec3931002fece43040110404340444041006400650066006700608015d1333 -112313c1b8b85c0460fba0047b00013500b800cb00cb00c100aa009c01a600b8006600000071 -00cb00a002b20085007500b800c301cb0189022d00cb00a600f000d300aa008700cb03aa0400 -014a003300cb000000d9050200f4015400b4009c01390114013907060400044e04b4045204b8 -04e704cd0037047304cd04600473013303a2055605a60556053903c5021200c9001f00b801df -007300ba03e9033303bc0444040e00df03cd03aa00e503aa0404000000cb008f00a4007b00b8 -0014016f007f027b0252008f00c705cd009a009a006f00cb00cd019e01d300f000ba018300d5 -009803040248009e01d500c100cb00f600830354027f00000333026600d300c700a400cd008f -009a0073040005d5010a00fe022b00a400b4009c00000062009c0000001d032d05d505d505d5 -05f0007f007b005400a406b80614072301d300b800cb00a601c301ec069300a000d3035c0371 -03db0185042304a80448008f0139011401390360008f05d5019a061407230666017904600460 -0460047b009c00000277046001aa00e904600762007b00c5007f027b000000b4025205cd0066 -00bc00660077061000cd013b01850389008f007b0000001d00cd074a042f009c009c0000077d -006f0000006f0335006a006f007b00ae00b2002d0396008f027b00f600830354063705f6008f -009c04e10266008f018d02f600cd03440029006604ee00730000140000960000b70706050403 -0201002c2010b002254964b040515820c859212d2cb002254964b040515820c859212d2c2010 -0720b00050b00d7920b8ffff5058041b0559b0051cb0032508b0042523e120b00050b00d7920 -b8ffff5058041b0559b0051cb0032508e12d2c4b505820b0fd454459212d2cb002254560442d -2c4b5358b00225b0022545445921212d2c45442d2cb00225b0022549b00525b005254960b020 -6368208a108a233a8a10653a2d00000100000002547a3935de785f0f3cf5001f080000000000 -c990133600000000c9901336f7d6fcae0d72095500000008000000010000000000010000076d -fe1d00000de2f7d6fa510d7200010000000000000000000000000000001804cd0066025c00c9 -051200ba023900c10433005804e7007b023900c104e5007104ec00710579001004660071034a -00ba0514007103230037043f009305fc00c9051400870239ffc7050e00c9051400ba04d300c9 -051200ae040000aa023900c100000000000000440000008c0000010400000154000002200000 -034c000003880000042c00000500000005fc00000694000007040000079c00000818000008f0 -0000099800000a9000000aa800000b0800000ba000000c2000000ca400000cf400000d400001 -000000180354002b0068000c000200100099000800000415021600080004b8028040fffbfe03 -fa1403f92503f83203f79603f60e03f5fe03f4fe03f32503f20e03f19603f02503ef8a4105ef -fe03ee9603ed9603ecfa03ebfa03eafe03e93a03e84203e7fe03e63203e5e45305e59603e48a -4105e45303e3e22f05e3fa03e22f03e1fe03e0fe03df3203de1403dd9603dcfe03db1203da7d -03d9bb03d8fe03d68a4105d67d03d5d44705d57d03d44703d3d21b05d3fe03d21b03d1fe03d0 -fe03cffe03cefe03cd9603cccb1e05ccfe03cb1e03ca3203c9fe03c6851105c61c03c51603c4 -fe03c3fe03c2fe03c1fe03c0fe03bffe03befe03bdfe03bcfe03bbfe03ba1103b9862505b9fe -03b8b7bb05b8fe03b7b65d05b7bb03b78004b6b52505b65d40ff03b64004b52503b4fe03b396 -03b2fe03b1fe03b0fe03affe03ae6403ad0e03acab2505ac6403abaa1205ab2503aa1203a98a -4105a9fa03a8fe03a7fe03a6fe03a51203a4fe03a3a20e05a33203a20e03a16403a08a4105a0 -96039ffe039e9d0c059efe039d0c039c9b19059c64039b9a10059b19039a1003990a0398fe03 -97960d0597fe03960d03958a410595960394930e05942803930e0392fa039190bb0591fe0390 -8f5d0590bb039080048f8e25058f5d038f40048e25038dfe038c8b2e058cfe038b2e038a8625 -058a410389880b05891403880b03878625058764038685110586250385110384fe0383821105 -83fe0382110381fe0380fe037ffe0340ff7e7d7d057efe037d7d037c64037b5415057b25037a -fe0379fe03780e03770c03760a0375fe0374fa0373fa0372fa0371fa0370fe036ffe036efe03 -6c21036bfe036a1142056a530369fe03687d036711420566fe0365fe0364fe0363fe0362fe03 -613a0360fa035e0c035dfe035bfe035afe0359580a0559fa03580a035716190557320356fe03 -5554150555420354150353011005531803521403514a130551fe03500b034ffe034e4d10054e -fe034d10034cfe034b4a13054bfe034a4910054a1303491d0d05491003480d0347fe03469603 -45960344fe0343022d0543fa0342bb03414b0340fe033ffe033e3d12053e14033d3c0f053d12 -033c3b0d053c40ff0f033b0d033afe0339fe033837140538fa033736100537140336350b0536 -1003350b03341e03330d0332310b0532fe03310b03302f0b05300d032f0b032e2d09052e1003 -2d09032c32032b2a25052b64032a2912052a25032912032827250528410327250326250b0526 -0f03250b0324fe0323fe03220f03210110052112032064031ffa031e1d0d051e64031d0d031c -1142051cfe031bfa031a42031911420519fe031864031716190517fe031601100516190315fe -0314fe0313fe031211420512fe0311022d05114203107d030f64030efe030d0c16050dfe030c -0110050c16030bfe030a100309fe0308022d0508fe030714030664030401100504fe03401503 -022d0503fe0302011005022d0301100300fe0301b80164858d012b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b002b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b1d00> -] def -/f-0-0 currentdict end definefont pop -%%Page: 1 1 -%%BeginPageSetup -%%PageBoundingBox: 0 -1 366 172 -%%EndPageSetup -q 0 -1 366 173 rectclip q -0 g -0.4724 w -0 J -0 j -[] 0.0 d -10 M 141.949 130.645 m 182.324 90.27 l 222.703 130.645 l 182.324 171.023 l 141.949 - 130.645 l S -Q q -0 171.344 366 -172 re W n --0.5 172.531 m -0.5 -1.469 l 366.5 -1.469 l 366.5 172.531 l -0.5 172.531 - l 130.297 127.812 m 139.809 127.812 l 139.809 131.59 l 130.297 131.59 l - 137.855 129.703 l 130.297 127.812 l W n -q -0 171.344 366 -172 re W n -[ 1 0 0 1 0 -0.65625 ] concat - q -0 g -0.4724 w -0 J -0 j -[] 0.0 d -10 M 87.84 130.359 m 138.863 130.359 l S - Q -Q -Q q -0 g -130.297 127.812 m 137.855 129.703 l 130.297 131.59 l 130.297 127.812 l f* -0.4724 w -0 J -0 j -[] 0.0 d -10 M 130.297 127.812 m 137.855 129.703 l 130.297 131.59 l 130.297 127.812 l S -Q q -0 171.344 366 -172 re W n --0.5 172.531 m -0.5 -1.469 l 366.5 -1.469 l 366.5 172.531 l -0.5 172.531 - l 269.188 127.812 m 278.699 127.812 l 278.699 131.59 l 269.188 131.59 l - 276.746 129.703 l 269.188 127.812 l W n -q -0 171.344 366 -172 re W n -[ 1 0 0 1 0 -0.65625 ] concat - q -0 g -0.4724 w -0 J -0 j -[] 0.0 d -10 M 226.734 130.359 m 277.754 130.359 l S - Q -Q -Q q -0 g -269.188 127.812 m 276.746 129.703 l 269.188 131.59 l 269.188 127.812 l f* -0.4724 w -0 J -0 j -[] 0.0 d -10 M 269.188 127.812 m 276.746 129.703 l 269.188 131.59 l 269.188 127.812 l S -4.945 149.543 m 2.336 149.543 0.223 147.43 0.223 144.82 c 0.223 114.145 - l 0.223 111.535 2.336 109.418 4.945 109.418 c 79.969 109.418 l 82.574 109.418 - 84.691 111.535 84.691 114.145 c 84.691 144.82 l 84.691 147.43 82.574 149.543 - 79.969 149.543 c 4.945 149.543 l S -285.312 149.543 m 282.703 149.543 280.59 147.43 280.59 144.82 c 280.59 -113.891 l 280.59 111.281 282.703 109.168 285.312 109.168 c 360.84 109.168 - l 363.449 109.168 365.562 111.281 365.562 113.891 c 365.562 144.82 l 365.562 - 147.43 363.449 149.543 360.84 149.543 c 285.312 149.543 l S -Q q -0 152.344 366 -132 re W n --95.199 152.273 m -95.199 20.82 l 457.016 20.82 l 457.016 152.273 l -95.199 - 152.273 l 179.891 55.719 m 179.891 48.535 l 185.578 48.535 l 185.578 55.719 - l 182.734 50.012 l 179.891 55.719 l W n -q -0 152.344 366 -132 re W n -[ 1 0 0 1 0 -0.65625 ] concat - q -0 g -0.4724 w -0 J -0 j -[] 0.0 d -10 M 182.734 88.453 m 182.734 49.906 l S - Q -Q -Q q -21 171.344 293 -168 re W n -21.961 170.488 m 21.961 3.996 l 313.367 3.996 l 313.367 170.488 l 21.961 - 170.488 l 109.363 118.598 m 109.363 127.699 l 106.359 127.699 l 106.359 - 118.598 l 107.859 125.832 l 109.363 118.598 l W n -q -21 171.344 293 -168 re W n -[ 1 0 0 1 0 -0.65625 ] concat - q -0 g -0.4724 w -0 J -0 j -[] 0.0 d -10 M 139.371 21.672 m 107.859 21.672 l 107.859 127.453 l S - Q -Q -Q q -0 g -109.57 118.301 m 107.684 125.859 l 105.793 118.301 l 109.57 118.301 l f* -0.4724 w -0 J -0 j -[] 0.0 d -10 M 109.57 118.301 m 107.684 125.859 l 105.793 118.301 l 109.57 118.301 l S -BT -10 0 0 10 4.1806 125.86455 Tm -/f-0-0 1 Tf -[(I)3(n)9(i)-14(z)-17(i)-13(a)-13(l)-13(i)-14(z)-17(z)-17(a)-12(z)-17(i) --14(o)-13(n)9(e)]TJ -15.95277 1.22084 Td -[(A)17(n)9(c)8(o)-13(r)-5(a)]TJ -0.75418 -1.2125 Td -[(d)10(a)-12(t)17(i)]TJ -0.80832 -1.25 Td -(?)Tj -5.1 2.25 Td -[(No)]TJ --3.89166 -6.45 Td -[(S)10(\354)]TJ --4.27084 -5.57084 Td -[(E)7(l)-14(a)-12(b)10(o)-14(r)-5(a)-12(z)-17(i)-14(o)-13(n)9(e)]TJ -15.2625 11.0125 Td -[(P)20(u)8(l)-13(i)-14(z)-17(i)-14(a)]TJ -ET -4.945 149.543 m 2.336 149.543 0.223 147.43 0.223 144.82 c 0.223 114.145 - l 0.223 111.535 2.336 109.418 4.945 109.418 c 79.969 109.418 l 82.574 109.418 - 84.691 111.535 84.691 114.145 c 84.691 144.82 l 84.691 147.43 82.574 149.543 - 79.969 149.543 c 4.945 149.543 l S -144.965 39.297 m 142.352 39.297 140.234 37.238 140.234 34.699 c 140.234 - 4.848 l 140.234 2.309 142.352 0.25 144.965 0.25 c 220.035 0.25 l 222.648 - 0.25 224.766 2.309 224.766 4.848 c 224.766 34.699 l 224.766 37.238 222.648 - 39.297 220.035 39.297 c 144.965 39.297 l S -180.824 49.602 m 182.715 42.043 l 184.605 49.602 l 180.824 49.602 l f* -Q Q -showpage -%%Trailer -end restore -%%EOF diff --git a/doc/it/flusso-elaborazione.fig b/doc/it/flusso-elaborazione.fig deleted file mode 100644 index 50c9a209..00000000 --- a/doc/it/flusso-elaborazione.fig +++ /dev/null @@ -1,37 +0,0 @@ -#FIG 3.2 Produced by xfig version 3.2.5c -Landscape -Center -Metric -A4 -100.00 -Single --2 -1200 2 -2 3 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 4819 3540 5460 4181 6101 3540 5460 2899 4819 3540 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 3960 3555 4770 3555 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 6165 3555 6975 3555 -2 4 0 1 0 7 50 -1 -1 0.000 0 0 5 0 0 5 - 7020 3240 7020 3881 8369 3881 8369 3240 7020 3240 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 5490 4230 5490 5040 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 3 - 1 1 1.00 60.00 120.00 - 4905 5355 4275 5355 4275 3600 -2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 - 3915 3870 3915 3330 1935 3330 1935 3870 3915 3870 -2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 - 6345 5670 6345 4995 4950 4995 4950 5670 6345 5670 -4 0 0 50 -1 0 12 0.0000 4 135 450 5265 3885 ?\001 -4 0 0 50 -1 0 12 0.0000 4 135 180 6210 3465 No\001 -4 0 0 50 -1 0 12 0.0000 4 135 540 5265 3375 Ancora\001 -4 0 0 50 -1 0 12 0.0000 4 135 360 5265 3630 dati\001 -4 0 0 50 -1 0 12 0.0000 4 135 630 7290 3600 Pulizia\001 -4 0 0 50 -1 0 12 0.0000 4 135 1080 5130 5400 Elaborazione\001 -4 0 0 50 -1 0 12 0.0000 4 135 1440 2205 3645 Inizializzazione\001 -4 0 0 50 -1 0 12 0.0000 4 135 270 5535 4455 Si'\001 diff --git a/doc/it/flusso-elaborazione.pdf b/doc/it/flusso-elaborazione.pdf deleted file mode 100644 index e7fb8555..00000000 Binary files a/doc/it/flusso-elaborazione.pdf and /dev/null differ diff --git a/doc/it/flusso-elaborazione.png b/doc/it/flusso-elaborazione.png deleted file mode 100644 index 4dc95902..00000000 Binary files a/doc/it/flusso-elaborazione.png and /dev/null differ diff --git a/doc/it/flusso-elaborazione.txt b/doc/it/flusso-elaborazione.txt deleted file mode 100644 index 87a5b439..00000000 --- a/doc/it/flusso-elaborazione.txt +++ /dev/null @@ -1,11 +0,0 @@ - _______ -+------------------+ / Ancora\ No +---------+ -| Inizializzazione | -------> < dati > -------> | Pulizia | -+------------------+ ^ \ ? / +---------+ - | +--+--+ - | | Sì - | | - | V - | +--------------+ - +--+ Elaborazione | - +--------------+ diff --git a/doc/it/gawk-api-figura1.eps b/doc/it/gawk-api-figura1.eps new file mode 100644 index 00000000..93560797 --- /dev/null +++ b/doc/it/gawk-api-figura1.eps @@ -0,0 +1,536 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Title: api-figura1.fig +%%Creator: fig2dev Version 3.2 Patchlevel 5e +%%CreationDate: Wed Jun 29 10:59:41 2016 +%%BoundingBox: 0 0 356 221 +%Magnification: 1.0000 +%%EndComments +%%BeginProlog +/MyAppDict 100 dict dup begin def +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end + +% This junk string is used by the show operators +/PATsstr 1 string def +/PATawidthshow { % cx cy cchar rx ry string + % Loop over each character in the string + { % cx cy cchar rx ry char + % Show the character + dup % cx cy cchar rx ry char char + PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char) + false charpath % cx cy cchar rx ry char + /clip load PATdraw + % Move past the character (charpath modified the + % current point) + currentpoint % cx cy cchar rx ry char x y + newpath + moveto % cx cy cchar rx ry char + % Reposition by cx,cy if the character in the string is cchar + 3 index eq { % cx cy cchar rx ry + 4 index 4 index rmoveto + } if + % Reposition all characters by rx ry + 2 copy rmoveto % cx cy cchar rx ry + } forall + pop pop pop pop pop % - + currentpoint + newpath + moveto +} bind def +/PATcg { + 7 dict dup begin + /lw currentlinewidth def + /lc currentlinecap def + /lj currentlinejoin def + /ml currentmiterlimit def + /ds [ currentdash ] def + /cc [ currentrgbcolor ] def + /cm matrix currentmatrix def + end +} bind def +% PATdraw - calculates the boundaries of the object and +% fills it with the current pattern +/PATdraw { % proc + save exch + PATpcalc % proc nw nh px py + 5 -1 roll exec % nw nh px py + newpath + PATfill % - + restore +} bind def +% PATfill - performs the tiling for the shape +/PATfill { % nw nh px py PATfill - + PATDict /CurrentPattern get dup begin + setfont + % Set the coordinate system to Pattern Space + PatternGState PATsg + % Set the color for uncolored pattezns + PaintType 2 eq { PATDict /PColor get PATsc } if + % Create the string for showing + 3 index string % nw nh px py str + % Loop for each of the pattern sources + 0 1 Multi 1 sub { % nw nh px py str source + % Move to the starting location + 3 index 3 index % nw nh px py str source px py + moveto % nw nh px py str source + % For multiple sources, set the appropriate color + Multi 1 ne { dup PC exch get PATsc } if + % Set the appropriate string for the source + 0 1 7 index 1 sub { 2 index exch 2 index put } for pop + % Loop over the number of vertical cells + 3 index % nw nh px py str nh + { % nw nh px py str + currentpoint % nw nh px py str cx cy + 2 index oldshow % nw nh px py str cx cy + YStep add moveto % nw nh px py str + } repeat % nw nh px py str + } for + 5 { pop } repeat + end +} bind def + +% PATkshow - kshow with the current pattezn +/PATkshow { % proc string + exch bind % string proc + 1 index 0 get % string proc char + % Loop over all but the last character in the string + 0 1 4 index length 2 sub { + % string proc char idx + % Find the n+1th character in the string + 3 index exch 1 add get % string proc char char+1 + exch 2 copy % strinq proc char+1 char char+1 char + % Now show the nth character + PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr) + false charpath % string proc char+1 char char+1 + /clip load PATdraw + % Move past the character (charpath modified the current point) + currentpoint newpath moveto + % Execute the user proc (should consume char and char+1) + mark 3 1 roll % string proc char+1 mark char char+1 + 4 index exec % string proc char+1 mark... + cleartomark % string proc char+1 + } for + % Now display the last character + PATsstr dup 0 4 -1 roll put % string proc (char+1) + false charpath % string proc + /clip load PATdraw + neewath + pop pop % - +} bind def +% PATmp - the makepattern equivalent +/PATmp { % patdict patmtx PATmp patinstance + exch dup length 7 add % We will add 6 new entries plus 1 FID + dict copy % Create a new dictionary + begin + % Matrix to install when painting the pattern + TilingType PATtcalc + /PatternGState PATcg def + PatternGState /cm 3 -1 roll put + % Check for multi pattern sources (Level 1 fast color patterns) + currentdict /Multi known not { /Multi 1 def } if + % Font dictionary definitions + /FontType 3 def + % Create a dummy encoding vector + /Encoding 256 array def + 3 string 0 1 255 { + Encoding exch dup 3 index cvs cvn put } for pop + /FontMatrix matrix def + /FontBBox BBox def + /BuildChar { + mark 3 1 roll % mark dict char + exch begin + Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata] + PaintType 2 eq Multi 1 ne or + { XStep 0 FontBBox aload pop setcachedevice } + { XStep 0 setcharwidth } ifelse + currentdict % mark [paintdata] dict + /PaintProc load % mark [paintdata] dict paintproc + end + gsave + false PATredef exec true PATredef + grestore + cleartomark % - + } bind def + currentdict + end % newdict + /foo exch % /foo newlict + definefont % newfont +} bind def +% PATpcalc - calculates the starting point and width/height +% of the tile fill for the shape +/PATpcalc { % - PATpcalc nw nh px py + PATDict /CurrentPattern get begin + gsave + % Set up the coordinate system to Pattern Space + % and lock down pattern + PatternGState /cm get setmatrix + BBox aload pop pop pop translate + % Determine the bounding box of the shape + pathbbox % llx lly urx ury + grestore + % Determine (nw, nh) the # of cells to paint width and height + PatHeight div ceiling % llx lly urx qh + 4 1 roll % qh llx lly urx + PatWidth div ceiling % qh llx lly qw + 4 1 roll % qw qh llx lly + PatHeight div floor % qw qh llx ph + 4 1 roll % ph qw qh llx + PatWidth div floor % ph qw qh pw + 4 1 roll % pw ph qw qh + 2 index sub cvi abs % pw ph qs qh-ph + exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph + % Determine the starting point of the pattern fill + %(px, py) + 4 2 roll % nw nh pw ph + PatHeight mul % nw nh pw py + exch % nw nh py pw + PatWidth mul exch % nw nh px py + end +} bind def + +% Save the original routines so that we can use them later on +/oldfill /fill load def +/oldeofill /eofill load def +/oldstroke /stroke load def +/oldshow /show load def +/oldashow /ashow load def +/oldwidthshow /widthshow load def +/oldawidthshow /awidthshow load def +/oldkshow /kshow load def + +% These defs are necessary so that subsequent procs don't bind in +% the originals +/fill { oldfill } bind def +/eofill { oldeofill } bind def +/stroke { oldstroke } bind def +/show { oldshow } bind def +/ashow { oldashow } bind def +/widthshow { oldwidthshow } bind def +/awidthshow { oldawidthshow } bind def +/kshow { oldkshow } bind def +/PATredef { + MyAppDict begin + { + /fill { /clip load PATdraw newpath } bind def + /eofill { /eoclip load PATdraw newpath } bind def + /stroke { PATstroke } bind def + /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def + /ashow { 0 0 null 6 3 roll PATawidthshow } + bind def + /widthshow { 0 0 3 -1 roll PATawidthshow } + bind def + /awidthshow { PATawidthshow } bind def + /kshow { PATkshow } bind def + } { + /fill { oldfill } bind def + /eofill { oldeofill } bind def + /stroke { oldstroke } bind def + /show { oldshow } bind def + /ashow { oldashow } bind def + /widthshow { oldwidthshow } bind def + /awidthshow { oldawidthshow } bind def + /kshow { oldkshow } bind def + } ifelse + end +} bind def +false PATredef +% Conditionally define setcmykcolor if not available +/setcmykcolor where { pop } { + /setcmykcolor { + 1 sub 4 1 roll + 3 { + 3 index add neg dup 0 lt { pop 0 } if 3 1 roll + } repeat + setrgbcolor - pop + } bind def +} ifelse +/PATsc { % colorarray + aload length % c1 ... cn length + dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor + } ifelse } ifelse +} bind def +/PATsg { % dict + begin + lw setlinewidth + lc setlinecap + lj setlinejoin + ml setmiterlimit + ds aload pop setdash + cc aload pop setrgbcolor + cm setmatrix + end +} bind def + +/PATDict 3 dict def +/PATsp { + true PATredef + PATDict begin + /CurrentPattern exch def + % If it's an uncolored pattern, save the color + CurrentPattern /PaintType get 2 eq { + /PColor exch def + } if + /CColor [ currentrgbcolor ] def + end +} bind def +% PATstroke - stroke with the current pattern +/PATstroke { + countdictstack + save + mark + { + currentpoint strokepath moveto + PATpcalc % proc nw nh px py + clip newpath PATfill + } stopped { + (*** PATstroke Warning: Path is too complex, stroking + with gray) = + cleartomark + restore + countdictstack exch sub dup 0 gt + { { end } repeat } { pop } ifelse + gsave 0.5 setgray oldstroke grestore + } { pop restore pop } ifelse + newpath +} bind def +/PATtcalc { % modmtx tilingtype PATtcalc tilematrix + % Note: tiling types 2 and 3 are not supported + gsave + exch concat % tilingtype + matrix currentmatrix exch % cmtx tilingtype + % Tiling type 1 and 3: constant spacing + 2 ne { + % Distort the pattern so that it occupies + % an integral number of device pixels + dup 4 get exch dup 5 get exch % tx ty cmtx + XStep 0 dtransform + round exch round exch % tx ty cmtx dx.x dx.y + XStep div exch XStep div exch % tx ty cmtx a b + 0 YStep dtransform + round exch round exch % tx ty cmtx a b dy.x dy.y + YStep div exch YStep div exch % tx ty cmtx a b c d + 7 -3 roll astore % { a b c d tx ty } + } if + grestore +} bind def +/PATusp { + false PATredef + PATDict begin + CColor PATsc + end +} bind def + +% right30 +11 dict begin +/PaintType 1 def +/PatternType 1 def +/TilingType 1 def +/BBox [0 0 1 1] def +/XStep 1 def +/YStep 1 def +/PatWidth 1 def +/PatHeight 1 def +/Multi 2 def +/PaintData [ + { clippath } bind + { 32 16 true [ 32 0 0 -16 0 16 ] + {<00030003000c000c0030003000c000c0030003000c000c00 + 30003000c000c00000030003000c000c0030003000c000c0 + 030003000c000c0030003000c000c000>} + imagemask } bind +] def +/PaintProc { + pop + exec fill +} def +currentdict +end +/P2 exch def + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +/pageheader { +save +newpath 0 221 moveto 0 0 lineto 356 0 lineto 356 221 lineto closepath clip newpath +-194.8 344.2 translate +1 -1 scale +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06299 0.06299 sc +} bind def +/pagefooter { +$F2psEnd +restore +} bind def +%%EndProlog +pageheader +% +% Fig objects follow +% +% +% here starts figure with depth 50 +% Arc +7.500 slw +0 slc +gs clippath +3599 4000 m 3567 4148 l 3626 4161 l 3658 4013 l 3658 4013 l 3603 4124 l 3599 4000 l cp +eoclip +n 5449.3 4471.5 1878.7 -70.5453 -169.8379 arcn +gs col0 s gr + gr + +% arrowhead +0 slj +n 3599 4000 m 3603 4124 l 3658 4013 l 3599 4000 l cp gs 0.00 setgray ef gr col0 s +% Arc +gs clippath +4422 4004 m 4425 4155 l 4485 4154 l 4482 4003 l 4482 4003 l 4455 4124 l 4422 4004 l cp +eoclip +n 5539.0 4051.3 1087.6 -60.4713 175.3232 arcn +gs col0 s gr + gr + +% arrowhead +n 4422 4004 m 4455 4124 l 4482 4003 l 4422 4004 l cp gs 0.00 setgray ef gr col0 s +% Arc +gs clippath +4986 4010 m 5012 4159 l 5072 4149 l 5046 4000 l 5046 4000 l 5037 4124 l 4986 4010 l cp +eoclip +n 5628.8 3967.5 613.5 -36.7999 163.6698 arcn +gs col0 s gr + gr + +% arrowhead +n 4986 4010 m 5037 4124 l 5046 4000 l 4986 4010 l cp gs 0.00 setgray ef gr col0 s +% Arc +135.000 slw +gs clippath +7736 3835 m 7756 3984 l 7907 3964 l 7887 3814 l 7841 3821 l 7828 3944 l 7782 3829 l cp +eoclip +n 6609.1 4056.9 1224.8 -93.9364 -4.5364 arc +gs col0 s gr + gr + +% arrowhead +7.500 slw +n 7782 3829 m 7828 3944 l 7841 3821 l col0 s +% Polyline +n 3105 4140 m 6660 4140 l 6660 5085 l 3105 5085 l + cp gs col0 s gr +% Polyline +n 6660 4140 m 8730 4140 l 8730 5085 l 6660 5085 l + cp gs col7 0.50 shd ef gr gs col0 s gr +% Polyline +n 5805 2610 m 6345 2610 l 6345 3690 l 5805 3690 l + cp gs col0 s gr +% Polyline +n 5805 2835 m 6345 2835 l 6345 3015 l 5805 3015 l + cp gs col0 s gr +% Polyline +n 5805 3195 m 6345 3195 l 6345 3375 l 5805 3375 l + cp gs col0 s gr +% Polyline +n 5805 3510 m 6345 3510 l 6345 3690 l 5805 3690 l + cp gs col0 s gr +% Polyline +n 3510 4140 m 3780 4140 l 3780 5085 l 3510 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P2 [16 0 0 -8 234.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +% Polyline +n 4365 4140 m 4635 4140 l 4635 5085 l 4365 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P2 [16 0 0 -8 291.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +% Polyline +n 4905 4140 m 5265 4140 l 5265 5085 l 4905 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P2 [16 0 0 -8 327.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +/Times-Roman ff 190.50 scf sf +5985 2115 m +gs 1 -1 sc (API) col0 sh gr +/Times-Roman ff 190.50 scf sf +5895 2340 m +gs 1 -1 sc (Struct) col0 sh gr +/Times-Roman ff 190.50 scf sf +7020 5400 m +gs 1 -1 sc ( Estensione) col0 sh gr +/Times-Roman ff 190.50 scf sf +6525 2655 m +gs 1 -1 sc (dl_load\(api_p, id\);) col0 sh gr +/Times-Roman ff 190.50 scf sf +3195 5400 m +gs 1 -1 sc (Memoria indirizzabile programma gawk) col0 sh gr +% here ends figure; +pagefooter +showpage +%%Trailer +end +%EOF diff --git a/doc/it/gawk-api-figura1.fig b/doc/it/gawk-api-figura1.fig new file mode 100644 index 00000000..c2718c71 --- /dev/null +++ b/doc/it/gawk-api-figura1.fig @@ -0,0 +1,40 @@ +#FIG 3.2 Produced by xfig version 3.2.5c +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 0 5449.265 4471.471 6075 2700 4320 2970 3600 4140 + 1 1 1.00 60.00 120.00 +5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 0 5538.971 4051.323 6075 3105 4725 3330 4455 4140 + 1 1 1.00 60.00 120.00 +5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 0 5628.750 3967.500 6120 3600 5220 3510 5040 4140 + 1 1 1.00 60.00 120.00 +5 1 0 10 0 7 50 -1 -1 0.000 0 0 1 0 6609.079 4056.868 6525 2835 7560 3285 7830 3960 + 0 0 1.00 60.00 120.00 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3105 4140 6660 4140 6660 5085 3105 5085 3105 4140 +2 2 0 1 0 7 50 -1 10 0.000 0 0 -1 0 0 5 + 6660 4140 8730 4140 8730 5085 6660 5085 6660 4140 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 5805 2610 6345 2610 6345 3690 5805 3690 5805 2610 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 5805 2835 6345 2835 6345 3015 5805 3015 5805 2835 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 5805 3195 6345 3195 6345 3375 5805 3375 5805 3195 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 5805 3510 6345 3510 6345 3690 5805 3690 5805 3510 +2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 + 3510 4140 3780 4140 3780 5085 3510 5085 3510 4140 +2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 + 4365 4140 4635 4140 4635 5085 4365 5085 4365 4140 +2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 + 4905 4140 5265 4140 5265 5085 4905 5085 4905 4140 +4 0 0 50 -1 0 12 0.0000 4 135 270 5985 2115 API\001 +4 0 0 50 -1 0 12 0.0000 4 135 540 5895 2340 Struct\001 +4 0 0 50 -1 0 12 0.0000 4 135 1170 7020 5400 Estensione\001 +4 0 0 50 -1 0 12 0.0000 4 180 1710 6525 2655 dl_load(api_p, id);\001 +4 0 0 50 -1 0 12 0.0000 4 165 3240 3195 5400 Memoria indirizzabile programma gawk\001 diff --git a/doc/it/gawk-api-figura1.pdf b/doc/it/gawk-api-figura1.pdf new file mode 100644 index 00000000..f31e25a8 Binary files /dev/null and b/doc/it/gawk-api-figura1.pdf differ diff --git a/doc/it/gawk-api-figura1.png b/doc/it/gawk-api-figura1.png new file mode 100644 index 00000000..444c2976 Binary files /dev/null and b/doc/it/gawk-api-figura1.png differ diff --git a/doc/it/gawk-api-figura1.txt b/doc/it/gawk-api-figura1.txt new file mode 100644 index 00000000..630e18f0 --- /dev/null +++ b/doc/it/gawk-api-figura1.txt @@ -0,0 +1,24 @@ + Struct (Struttura) + API + +---+ + | | + +---+ + +---------------| | + | +---+ dl_load(api_p, id); + | | | ___________________ + | +---+ | + | +---------| | __________________ | + | | +---+ || + | | | | || + | | +---+ || + | | +---| | || + | | | +---+ \ || / + | | | \ / + v v v \/ ++-------+-+---+-+---+-+------------------+--------------------+ +| |x| |x| |x| |OOOOOOOOOOOOOOOOOOOO| +| |x| |x| |x| |OOOOOOOOOOOOOOOOOOOO| +| |x| |x| |x| |OOOOOOOOOOOOOOOOOOOO| ++-------+-+---+-+---+-+------------------+--------------------+ + + Memoria indirizzabile programma gawk Estensione diff --git a/doc/it/gawk-api-figura2.eps b/doc/it/gawk-api-figura2.eps new file mode 100644 index 00000000..9920d3b9 --- /dev/null +++ b/doc/it/gawk-api-figura2.eps @@ -0,0 +1,517 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Title: api-figura2.fig +%%Creator: fig2dev Version 3.2 Patchlevel 5e +%%CreationDate: Wed Jun 29 11:02:52 2016 +%%BoundingBox: 0 0 356 173 +%Magnification: 1.0000 +%%EndComments +%%BeginProlog +/MyAppDict 100 dict dup begin def +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end + +% This junk string is used by the show operators +/PATsstr 1 string def +/PATawidthshow { % cx cy cchar rx ry string + % Loop over each character in the string + { % cx cy cchar rx ry char + % Show the character + dup % cx cy cchar rx ry char char + PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char) + false charpath % cx cy cchar rx ry char + /clip load PATdraw + % Move past the character (charpath modified the + % current point) + currentpoint % cx cy cchar rx ry char x y + newpath + moveto % cx cy cchar rx ry char + % Reposition by cx,cy if the character in the string is cchar + 3 index eq { % cx cy cchar rx ry + 4 index 4 index rmoveto + } if + % Reposition all characters by rx ry + 2 copy rmoveto % cx cy cchar rx ry + } forall + pop pop pop pop pop % - + currentpoint + newpath + moveto +} bind def +/PATcg { + 7 dict dup begin + /lw currentlinewidth def + /lc currentlinecap def + /lj currentlinejoin def + /ml currentmiterlimit def + /ds [ currentdash ] def + /cc [ currentrgbcolor ] def + /cm matrix currentmatrix def + end +} bind def +% PATdraw - calculates the boundaries of the object and +% fills it with the current pattern +/PATdraw { % proc + save exch + PATpcalc % proc nw nh px py + 5 -1 roll exec % nw nh px py + newpath + PATfill % - + restore +} bind def +% PATfill - performs the tiling for the shape +/PATfill { % nw nh px py PATfill - + PATDict /CurrentPattern get dup begin + setfont + % Set the coordinate system to Pattern Space + PatternGState PATsg + % Set the color for uncolored pattezns + PaintType 2 eq { PATDict /PColor get PATsc } if + % Create the string for showing + 3 index string % nw nh px py str + % Loop for each of the pattern sources + 0 1 Multi 1 sub { % nw nh px py str source + % Move to the starting location + 3 index 3 index % nw nh px py str source px py + moveto % nw nh px py str source + % For multiple sources, set the appropriate color + Multi 1 ne { dup PC exch get PATsc } if + % Set the appropriate string for the source + 0 1 7 index 1 sub { 2 index exch 2 index put } for pop + % Loop over the number of vertical cells + 3 index % nw nh px py str nh + { % nw nh px py str + currentpoint % nw nh px py str cx cy + 2 index oldshow % nw nh px py str cx cy + YStep add moveto % nw nh px py str + } repeat % nw nh px py str + } for + 5 { pop } repeat + end +} bind def + +% PATkshow - kshow with the current pattezn +/PATkshow { % proc string + exch bind % string proc + 1 index 0 get % string proc char + % Loop over all but the last character in the string + 0 1 4 index length 2 sub { + % string proc char idx + % Find the n+1th character in the string + 3 index exch 1 add get % string proc char char+1 + exch 2 copy % strinq proc char+1 char char+1 char + % Now show the nth character + PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr) + false charpath % string proc char+1 char char+1 + /clip load PATdraw + % Move past the character (charpath modified the current point) + currentpoint newpath moveto + % Execute the user proc (should consume char and char+1) + mark 3 1 roll % string proc char+1 mark char char+1 + 4 index exec % string proc char+1 mark... + cleartomark % string proc char+1 + } for + % Now display the last character + PATsstr dup 0 4 -1 roll put % string proc (char+1) + false charpath % string proc + /clip load PATdraw + neewath + pop pop % - +} bind def +% PATmp - the makepattern equivalent +/PATmp { % patdict patmtx PATmp patinstance + exch dup length 7 add % We will add 6 new entries plus 1 FID + dict copy % Create a new dictionary + begin + % Matrix to install when painting the pattern + TilingType PATtcalc + /PatternGState PATcg def + PatternGState /cm 3 -1 roll put + % Check for multi pattern sources (Level 1 fast color patterns) + currentdict /Multi known not { /Multi 1 def } if + % Font dictionary definitions + /FontType 3 def + % Create a dummy encoding vector + /Encoding 256 array def + 3 string 0 1 255 { + Encoding exch dup 3 index cvs cvn put } for pop + /FontMatrix matrix def + /FontBBox BBox def + /BuildChar { + mark 3 1 roll % mark dict char + exch begin + Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata] + PaintType 2 eq Multi 1 ne or + { XStep 0 FontBBox aload pop setcachedevice } + { XStep 0 setcharwidth } ifelse + currentdict % mark [paintdata] dict + /PaintProc load % mark [paintdata] dict paintproc + end + gsave + false PATredef exec true PATredef + grestore + cleartomark % - + } bind def + currentdict + end % newdict + /foo exch % /foo newlict + definefont % newfont +} bind def +% PATpcalc - calculates the starting point and width/height +% of the tile fill for the shape +/PATpcalc { % - PATpcalc nw nh px py + PATDict /CurrentPattern get begin + gsave + % Set up the coordinate system to Pattern Space + % and lock down pattern + PatternGState /cm get setmatrix + BBox aload pop pop pop translate + % Determine the bounding box of the shape + pathbbox % llx lly urx ury + grestore + % Determine (nw, nh) the # of cells to paint width and height + PatHeight div ceiling % llx lly urx qh + 4 1 roll % qh llx lly urx + PatWidth div ceiling % qh llx lly qw + 4 1 roll % qw qh llx lly + PatHeight div floor % qw qh llx ph + 4 1 roll % ph qw qh llx + PatWidth div floor % ph qw qh pw + 4 1 roll % pw ph qw qh + 2 index sub cvi abs % pw ph qs qh-ph + exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph + % Determine the starting point of the pattern fill + %(px, py) + 4 2 roll % nw nh pw ph + PatHeight mul % nw nh pw py + exch % nw nh py pw + PatWidth mul exch % nw nh px py + end +} bind def + +% Save the original routines so that we can use them later on +/oldfill /fill load def +/oldeofill /eofill load def +/oldstroke /stroke load def +/oldshow /show load def +/oldashow /ashow load def +/oldwidthshow /widthshow load def +/oldawidthshow /awidthshow load def +/oldkshow /kshow load def + +% These defs are necessary so that subsequent procs don't bind in +% the originals +/fill { oldfill } bind def +/eofill { oldeofill } bind def +/stroke { oldstroke } bind def +/show { oldshow } bind def +/ashow { oldashow } bind def +/widthshow { oldwidthshow } bind def +/awidthshow { oldawidthshow } bind def +/kshow { oldkshow } bind def +/PATredef { + MyAppDict begin + { + /fill { /clip load PATdraw newpath } bind def + /eofill { /eoclip load PATdraw newpath } bind def + /stroke { PATstroke } bind def + /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def + /ashow { 0 0 null 6 3 roll PATawidthshow } + bind def + /widthshow { 0 0 3 -1 roll PATawidthshow } + bind def + /awidthshow { PATawidthshow } bind def + /kshow { PATkshow } bind def + } { + /fill { oldfill } bind def + /eofill { oldeofill } bind def + /stroke { oldstroke } bind def + /show { oldshow } bind def + /ashow { oldashow } bind def + /widthshow { oldwidthshow } bind def + /awidthshow { oldawidthshow } bind def + /kshow { oldkshow } bind def + } ifelse + end +} bind def +false PATredef +% Conditionally define setcmykcolor if not available +/setcmykcolor where { pop } { + /setcmykcolor { + 1 sub 4 1 roll + 3 { + 3 index add neg dup 0 lt { pop 0 } if 3 1 roll + } repeat + setrgbcolor - pop + } bind def +} ifelse +/PATsc { % colorarray + aload length % c1 ... cn length + dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor + } ifelse } ifelse +} bind def +/PATsg { % dict + begin + lw setlinewidth + lc setlinecap + lj setlinejoin + ml setmiterlimit + ds aload pop setdash + cc aload pop setrgbcolor + cm setmatrix + end +} bind def + +/PATDict 3 dict def +/PATsp { + true PATredef + PATDict begin + /CurrentPattern exch def + % If it's an uncolored pattern, save the color + CurrentPattern /PaintType get 2 eq { + /PColor exch def + } if + /CColor [ currentrgbcolor ] def + end +} bind def +% PATstroke - stroke with the current pattern +/PATstroke { + countdictstack + save + mark + { + currentpoint strokepath moveto + PATpcalc % proc nw nh px py + clip newpath PATfill + } stopped { + (*** PATstroke Warning: Path is too complex, stroking + with gray) = + cleartomark + restore + countdictstack exch sub dup 0 gt + { { end } repeat } { pop } ifelse + gsave 0.5 setgray oldstroke grestore + } { pop restore pop } ifelse + newpath +} bind def +/PATtcalc { % modmtx tilingtype PATtcalc tilematrix + % Note: tiling types 2 and 3 are not supported + gsave + exch concat % tilingtype + matrix currentmatrix exch % cmtx tilingtype + % Tiling type 1 and 3: constant spacing + 2 ne { + % Distort the pattern so that it occupies + % an integral number of device pixels + dup 4 get exch dup 5 get exch % tx ty cmtx + XStep 0 dtransform + round exch round exch % tx ty cmtx dx.x dx.y + XStep div exch XStep div exch % tx ty cmtx a b + 0 YStep dtransform + round exch round exch % tx ty cmtx a b dy.x dy.y + YStep div exch YStep div exch % tx ty cmtx a b c d + 7 -3 roll astore % { a b c d tx ty } + } if + grestore +} bind def +/PATusp { + false PATredef + PATDict begin + CColor PATsc + end +} bind def + +% right30 +11 dict begin +/PaintType 1 def +/PatternType 1 def +/TilingType 1 def +/BBox [0 0 1 1] def +/XStep 1 def +/YStep 1 def +/PatWidth 1 def +/PatHeight 1 def +/Multi 2 def +/PaintData [ + { clippath } bind + { 32 16 true [ 32 0 0 -16 0 16 ] + {<00030003000c000c0030003000c000c0030003000c000c00 + 30003000c000c00000030003000c000c0030003000c000c0 + 030003000c000c0030003000c000c000>} + imagemask } bind +] def +/PaintProc { + pop + exec fill +} def +currentdict +end +/P2 exch def + +% crosshatch45 +11 dict begin +/PaintType 1 def +/PatternType 1 def +/TilingType 1 def +/BBox [0 0 1 1] def +/XStep 1 def +/YStep 1 def +/PatWidth 1 def +/PatHeight 1 def +/Multi 2 def +/PaintData [ + { clippath } bind + { 20 20 true [ 20 0 0 -20 0 20 ] + {<8020004050102088201104400a02800401000a02 + 8011044020882040501080200040501020882011 + 04400a02800401000a0280110440208820405010>} + imagemask } bind +] def +/PaintProc { + pop + exec fill +} def +currentdict +end +/P6 exch def + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +/pageheader { +save +newpath 0 173 moveto 0 0 lineto 356 0 lineto 356 173 lineto closepath clip newpath +-194.8 344.2 translate +1 -1 scale +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06299 0.06299 sc +} bind def +/pagefooter { +$F2psEnd +restore +} bind def +%%EndProlog +pageheader +% +% Fig objects follow +% +% +% here starts figure with depth 50 +% Arc +7.500 slw +0 slc +gs clippath +3662 4014 m 3567 4132 l 3613 4170 l 3708 4052 l 3708 4052 l 3610 4127 l 3662 4014 l cp +eoclip +n 5895.0 5917.5 2902.8 -37.7581 -142.2419 arcn +gs col0 s gr + gr + +% arrowhead +0 slj +n 3662 4014 m 3610 4127 l 3708 4052 l 3662 4014 l cp gs 0.00 setgray ef gr col0 s +% Polyline +n 3105 4140 m 6660 4140 l 6660 5085 l 3105 5085 l + cp gs col0 s gr +% Polyline +n 6660 4140 m 8730 4140 l 8730 5085 l 6660 5085 l + cp gs col7 0.50 shd ef gr gs col0 s gr +% Polyline +n 3510 4140 m 3780 4140 l 3780 5085 l 3510 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P2 [16 0 0 -8 234.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +% Polyline +n 4365 4140 m 4635 4140 l 4635 5085 l 4365 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P2 [16 0 0 -8 291.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +% Polyline +n 4905 4140 m 5265 4140 l 5265 5085 l 4905 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P2 [16 0 0 -8 327.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +% Polyline +n 7965 4140 m 8370 4140 l 8370 5085 l 7965 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P6 [16 0 0 -16 531.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +/Courier-Bold ff 190.50 scf sf +3420 2880 m +gs 1 -1 sc (register_ext_func\({ "chdir", do_chdir, 1 }\);) col0 sh gr +/Times-Roman ff 190.50 scf sf +6840 5400 m +gs 1 -1 sc ( Estensione) col0 sh gr +/Times-Roman ff 190.50 scf sf +3195 5400 m +gs 1 -1 sc (Memoria indirizzabile programma gawk) col0 sh gr +% here ends figure; +pagefooter +showpage +%%Trailer +end +%EOF diff --git a/doc/it/gawk-api-figura2.fig b/doc/it/gawk-api-figura2.fig new file mode 100644 index 00000000..a8b5c47d --- /dev/null +++ b/doc/it/gawk-api-figura2.fig @@ -0,0 +1,26 @@ +#FIG 3.2 Produced by xfig version 3.2.5c +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 0 5895.000 5917.500 8190 4140 5940 3015 3600 4140 + 1 1 1.00 60.00 120.00 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3105 4140 6660 4140 6660 5085 3105 5085 3105 4140 +2 2 0 1 0 7 50 -1 10 0.000 0 0 -1 0 0 5 + 6660 4140 8730 4140 8730 5085 6660 5085 6660 4140 +2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 + 3510 4140 3780 4140 3780 5085 3510 5085 3510 4140 +2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 + 4365 4140 4635 4140 4635 5085 4365 5085 4365 4140 +2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 + 4905 4140 5265 4140 5265 5085 4905 5085 4905 4140 +2 2 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 5 + 7965 4140 8370 4140 8370 5085 7965 5085 7965 4140 +4 0 0 50 -1 14 12 0.0000 4 180 3960 3420 2880 register_ext_func({ "chdir", do_chdir, 1 });\001 +4 0 0 50 -1 0 12 0.0000 4 135 1260 6840 5400 Estensione\001 +4 0 0 50 -1 0 12 0.0000 4 165 3240 3195 5400 Memoria indirizzabile programma gawk\001 diff --git a/doc/it/gawk-api-figura2.pdf b/doc/it/gawk-api-figura2.pdf new file mode 100644 index 00000000..cadd4267 Binary files /dev/null and b/doc/it/gawk-api-figura2.pdf differ diff --git a/doc/it/gawk-api-figura2.png b/doc/it/gawk-api-figura2.png new file mode 100644 index 00000000..dbc46910 Binary files /dev/null and b/doc/it/gawk-api-figura2.png differ diff --git a/doc/it/gawk-api-figura2.txt b/doc/it/gawk-api-figura2.txt new file mode 100644 index 00000000..a030fb5a --- /dev/null +++ b/doc/it/gawk-api-figura2.txt @@ -0,0 +1,12 @@ + register_ext_func({ "chdir", do_chdir, 1 }); + + +--------------------------------------------+ + | | + V | ++-------+-+---+-+---+-+------------------+--------------+-+---+ +| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| +| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| +| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| ++-------+-+---+-+---+-+------------------+--------------+-+---+ + + Memoria indirizzabile programma gawk Estensione diff --git a/doc/it/gawk-api-figura3.eps b/doc/it/gawk-api-figura3.eps new file mode 100644 index 00000000..daa3ba76 --- /dev/null +++ b/doc/it/gawk-api-figura3.eps @@ -0,0 +1,526 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Title: api-figura3.fig +%%Creator: fig2dev Version 3.2 Patchlevel 5e +%%CreationDate: Wed Jun 29 11:05:29 2016 +%%BoundingBox: 0 0 356 170 +%Magnification: 1.0000 +%%EndComments +%%BeginProlog +/MyAppDict 100 dict dup begin def +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end + +% This junk string is used by the show operators +/PATsstr 1 string def +/PATawidthshow { % cx cy cchar rx ry string + % Loop over each character in the string + { % cx cy cchar rx ry char + % Show the character + dup % cx cy cchar rx ry char char + PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char) + false charpath % cx cy cchar rx ry char + /clip load PATdraw + % Move past the character (charpath modified the + % current point) + currentpoint % cx cy cchar rx ry char x y + newpath + moveto % cx cy cchar rx ry char + % Reposition by cx,cy if the character in the string is cchar + 3 index eq { % cx cy cchar rx ry + 4 index 4 index rmoveto + } if + % Reposition all characters by rx ry + 2 copy rmoveto % cx cy cchar rx ry + } forall + pop pop pop pop pop % - + currentpoint + newpath + moveto +} bind def +/PATcg { + 7 dict dup begin + /lw currentlinewidth def + /lc currentlinecap def + /lj currentlinejoin def + /ml currentmiterlimit def + /ds [ currentdash ] def + /cc [ currentrgbcolor ] def + /cm matrix currentmatrix def + end +} bind def +% PATdraw - calculates the boundaries of the object and +% fills it with the current pattern +/PATdraw { % proc + save exch + PATpcalc % proc nw nh px py + 5 -1 roll exec % nw nh px py + newpath + PATfill % - + restore +} bind def +% PATfill - performs the tiling for the shape +/PATfill { % nw nh px py PATfill - + PATDict /CurrentPattern get dup begin + setfont + % Set the coordinate system to Pattern Space + PatternGState PATsg + % Set the color for uncolored pattezns + PaintType 2 eq { PATDict /PColor get PATsc } if + % Create the string for showing + 3 index string % nw nh px py str + % Loop for each of the pattern sources + 0 1 Multi 1 sub { % nw nh px py str source + % Move to the starting location + 3 index 3 index % nw nh px py str source px py + moveto % nw nh px py str source + % For multiple sources, set the appropriate color + Multi 1 ne { dup PC exch get PATsc } if + % Set the appropriate string for the source + 0 1 7 index 1 sub { 2 index exch 2 index put } for pop + % Loop over the number of vertical cells + 3 index % nw nh px py str nh + { % nw nh px py str + currentpoint % nw nh px py str cx cy + 2 index oldshow % nw nh px py str cx cy + YStep add moveto % nw nh px py str + } repeat % nw nh px py str + } for + 5 { pop } repeat + end +} bind def + +% PATkshow - kshow with the current pattezn +/PATkshow { % proc string + exch bind % string proc + 1 index 0 get % string proc char + % Loop over all but the last character in the string + 0 1 4 index length 2 sub { + % string proc char idx + % Find the n+1th character in the string + 3 index exch 1 add get % string proc char char+1 + exch 2 copy % strinq proc char+1 char char+1 char + % Now show the nth character + PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr) + false charpath % string proc char+1 char char+1 + /clip load PATdraw + % Move past the character (charpath modified the current point) + currentpoint newpath moveto + % Execute the user proc (should consume char and char+1) + mark 3 1 roll % string proc char+1 mark char char+1 + 4 index exec % string proc char+1 mark... + cleartomark % string proc char+1 + } for + % Now display the last character + PATsstr dup 0 4 -1 roll put % string proc (char+1) + false charpath % string proc + /clip load PATdraw + neewath + pop pop % - +} bind def +% PATmp - the makepattern equivalent +/PATmp { % patdict patmtx PATmp patinstance + exch dup length 7 add % We will add 6 new entries plus 1 FID + dict copy % Create a new dictionary + begin + % Matrix to install when painting the pattern + TilingType PATtcalc + /PatternGState PATcg def + PatternGState /cm 3 -1 roll put + % Check for multi pattern sources (Level 1 fast color patterns) + currentdict /Multi known not { /Multi 1 def } if + % Font dictionary definitions + /FontType 3 def + % Create a dummy encoding vector + /Encoding 256 array def + 3 string 0 1 255 { + Encoding exch dup 3 index cvs cvn put } for pop + /FontMatrix matrix def + /FontBBox BBox def + /BuildChar { + mark 3 1 roll % mark dict char + exch begin + Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata] + PaintType 2 eq Multi 1 ne or + { XStep 0 FontBBox aload pop setcachedevice } + { XStep 0 setcharwidth } ifelse + currentdict % mark [paintdata] dict + /PaintProc load % mark [paintdata] dict paintproc + end + gsave + false PATredef exec true PATredef + grestore + cleartomark % - + } bind def + currentdict + end % newdict + /foo exch % /foo newlict + definefont % newfont +} bind def +% PATpcalc - calculates the starting point and width/height +% of the tile fill for the shape +/PATpcalc { % - PATpcalc nw nh px py + PATDict /CurrentPattern get begin + gsave + % Set up the coordinate system to Pattern Space + % and lock down pattern + PatternGState /cm get setmatrix + BBox aload pop pop pop translate + % Determine the bounding box of the shape + pathbbox % llx lly urx ury + grestore + % Determine (nw, nh) the # of cells to paint width and height + PatHeight div ceiling % llx lly urx qh + 4 1 roll % qh llx lly urx + PatWidth div ceiling % qh llx lly qw + 4 1 roll % qw qh llx lly + PatHeight div floor % qw qh llx ph + 4 1 roll % ph qw qh llx + PatWidth div floor % ph qw qh pw + 4 1 roll % pw ph qw qh + 2 index sub cvi abs % pw ph qs qh-ph + exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph + % Determine the starting point of the pattern fill + %(px, py) + 4 2 roll % nw nh pw ph + PatHeight mul % nw nh pw py + exch % nw nh py pw + PatWidth mul exch % nw nh px py + end +} bind def + +% Save the original routines so that we can use them later on +/oldfill /fill load def +/oldeofill /eofill load def +/oldstroke /stroke load def +/oldshow /show load def +/oldashow /ashow load def +/oldwidthshow /widthshow load def +/oldawidthshow /awidthshow load def +/oldkshow /kshow load def + +% These defs are necessary so that subsequent procs don't bind in +% the originals +/fill { oldfill } bind def +/eofill { oldeofill } bind def +/stroke { oldstroke } bind def +/show { oldshow } bind def +/ashow { oldashow } bind def +/widthshow { oldwidthshow } bind def +/awidthshow { oldawidthshow } bind def +/kshow { oldkshow } bind def +/PATredef { + MyAppDict begin + { + /fill { /clip load PATdraw newpath } bind def + /eofill { /eoclip load PATdraw newpath } bind def + /stroke { PATstroke } bind def + /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def + /ashow { 0 0 null 6 3 roll PATawidthshow } + bind def + /widthshow { 0 0 3 -1 roll PATawidthshow } + bind def + /awidthshow { PATawidthshow } bind def + /kshow { PATkshow } bind def + } { + /fill { oldfill } bind def + /eofill { oldeofill } bind def + /stroke { oldstroke } bind def + /show { oldshow } bind def + /ashow { oldashow } bind def + /widthshow { oldwidthshow } bind def + /awidthshow { oldawidthshow } bind def + /kshow { oldkshow } bind def + } ifelse + end +} bind def +false PATredef +% Conditionally define setcmykcolor if not available +/setcmykcolor where { pop } { + /setcmykcolor { + 1 sub 4 1 roll + 3 { + 3 index add neg dup 0 lt { pop 0 } if 3 1 roll + } repeat + setrgbcolor - pop + } bind def +} ifelse +/PATsc { % colorarray + aload length % c1 ... cn length + dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor + } ifelse } ifelse +} bind def +/PATsg { % dict + begin + lw setlinewidth + lc setlinecap + lj setlinejoin + ml setmiterlimit + ds aload pop setdash + cc aload pop setrgbcolor + cm setmatrix + end +} bind def + +/PATDict 3 dict def +/PATsp { + true PATredef + PATDict begin + /CurrentPattern exch def + % If it's an uncolored pattern, save the color + CurrentPattern /PaintType get 2 eq { + /PColor exch def + } if + /CColor [ currentrgbcolor ] def + end +} bind def +% PATstroke - stroke with the current pattern +/PATstroke { + countdictstack + save + mark + { + currentpoint strokepath moveto + PATpcalc % proc nw nh px py + clip newpath PATfill + } stopped { + (*** PATstroke Warning: Path is too complex, stroking + with gray) = + cleartomark + restore + countdictstack exch sub dup 0 gt + { { end } repeat } { pop } ifelse + gsave 0.5 setgray oldstroke grestore + } { pop restore pop } ifelse + newpath +} bind def +/PATtcalc { % modmtx tilingtype PATtcalc tilematrix + % Note: tiling types 2 and 3 are not supported + gsave + exch concat % tilingtype + matrix currentmatrix exch % cmtx tilingtype + % Tiling type 1 and 3: constant spacing + 2 ne { + % Distort the pattern so that it occupies + % an integral number of device pixels + dup 4 get exch dup 5 get exch % tx ty cmtx + XStep 0 dtransform + round exch round exch % tx ty cmtx dx.x dx.y + XStep div exch XStep div exch % tx ty cmtx a b + 0 YStep dtransform + round exch round exch % tx ty cmtx a b dy.x dy.y + YStep div exch YStep div exch % tx ty cmtx a b c d + 7 -3 roll astore % { a b c d tx ty } + } if + grestore +} bind def +/PATusp { + false PATredef + PATDict begin + CColor PATsc + end +} bind def + +% right30 +11 dict begin +/PaintType 1 def +/PatternType 1 def +/TilingType 1 def +/BBox [0 0 1 1] def +/XStep 1 def +/YStep 1 def +/PatWidth 1 def +/PatHeight 1 def +/Multi 2 def +/PaintData [ + { clippath } bind + { 32 16 true [ 32 0 0 -16 0 16 ] + {<00030003000c000c0030003000c000c0030003000c000c00 + 30003000c000c00000030003000c000c0030003000c000c0 + 030003000c000c0030003000c000c000>} + imagemask } bind +] def +/PaintProc { + pop + exec fill +} def +currentdict +end +/P2 exch def + +% crosshatch45 +11 dict begin +/PaintType 1 def +/PatternType 1 def +/TilingType 1 def +/BBox [0 0 1 1] def +/XStep 1 def +/YStep 1 def +/PatWidth 1 def +/PatHeight 1 def +/Multi 2 def +/PaintData [ + { clippath } bind + { 20 20 true [ 20 0 0 -20 0 20 ] + {<8020004050102088201104400a02800401000a02 + 8011044020882040501080200040501020882011 + 04400a02800401000a0280110440208820405010>} + imagemask } bind +] def +/PaintProc { + pop + exec fill +} def +currentdict +end +/P6 exch def + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +/pageheader { +save +newpath 0 170 moveto 0 0 lineto 356 0 lineto 356 170 lineto closepath clip newpath +-194.8 344.2 translate +1 -1 scale +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06299 0.06299 sc +} bind def +/pagefooter { +$F2psEnd +restore +} bind def +%%EndProlog +pageheader +% +% Fig objects follow +% +% +% here starts figure with depth 50 +% Arc +7.500 slw +0 slc +gs clippath +8019 4079 m 8138 4172 l 8175 4125 l 8056 4032 l 8056 4032 l 8132 4130 l 8019 4079 l cp +eoclip +n 6120.0 6627.7 3207.7 -129.1463 -50.8537 arc +gs col0 s gr + gr + +% arrowhead +0 slj +n 8019 4079 m 8132 4130 l 8056 4032 l 8019 4079 l cp gs 0.00 setgray ef gr col0 s +% Polyline +n 3105 4140 m 6660 4140 l 6660 5085 l 3105 5085 l + cp gs col0 s gr +% Polyline +n 6660 4140 m 8730 4140 l 8730 5085 l 6660 5085 l + cp gs col7 0.50 shd ef gr gs col0 s gr +% Polyline +n 3510 4140 m 3780 4140 l 3780 5085 l 3510 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P2 [16 0 0 -8 234.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +% Polyline +n 4365 4140 m 4635 4140 l 4635 5085 l 4365 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P2 [16 0 0 -8 291.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +% Polyline +n 4905 4140 m 5265 4140 l 5265 5085 l 4905 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P2 [16 0 0 -8 327.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +% Polyline +n 7965 4140 m 8370 4140 l 8370 5085 l 7965 5085 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P6 [16 0 0 -16 531.00 276.00] PATmp PATsp ef gr PATusp gs col0 s gr +/Courier-Bold ff 190.50 scf sf +3240 3150 m +gs 1 -1 sc ( chdir\("/path"\)) col0 sh gr +/Courier-Bold ff 190.50 scf sf +3330 3375 m +gs 1 -1 sc (}) col0 sh gr +/Courier-Bold ff 190.50 scf sf +3375 2925 m +gs 1 -1 sc (BEGIN {) col0 sh gr +/Courier-Bold ff 190.50 scf sf +6660 3150 m +gs 1 -1 sc (\(*fnptr\)\(1\);) col0 sh gr +/Times-Roman ff 190.50 scf sf +3150 5400 m +gs 1 -1 sc (Memoria indirizzabile programma gawk) col0 sh gr +/Times-Roman ff 190.50 scf sf +6930 5400 m +gs 1 -1 sc ( Estensione) col0 sh gr +% here ends figure; +pagefooter +showpage +%%Trailer +end +%EOF diff --git a/doc/it/gawk-api-figura3.fig b/doc/it/gawk-api-figura3.fig new file mode 100644 index 00000000..fae92940 --- /dev/null +++ b/doc/it/gawk-api-figura3.fig @@ -0,0 +1,29 @@ +#FIG 3.2 Produced by xfig version 3.2.5c +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +5 1 0 1 0 7 50 -1 -1 0.000 0 0 1 0 6120.000 6627.656 4095 4140 6120 3420 8145 4140 + 1 1 1.00 60.00 120.00 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3105 4140 6660 4140 6660 5085 3105 5085 3105 4140 +2 2 0 1 0 7 50 -1 10 0.000 0 0 -1 0 0 5 + 6660 4140 8730 4140 8730 5085 6660 5085 6660 4140 +2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 + 3510 4140 3780 4140 3780 5085 3510 5085 3510 4140 +2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 + 4365 4140 4635 4140 4635 5085 4365 5085 4365 4140 +2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5 + 4905 4140 5265 4140 5265 5085 4905 5085 4905 4140 +2 2 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 5 + 7965 4140 8370 4140 8370 5085 7965 5085 7965 4140 +4 0 0 50 -1 14 12 0.0000 4 180 1620 3240 3150 chdir("/path")\001 +4 0 0 50 -1 14 12 0.0000 4 165 90 3330 3375 }\001 +4 0 0 50 -1 14 12 0.0000 4 165 630 3375 2925 BEGIN {\001 +4 0 0 50 -1 14 12 0.0000 4 180 1080 6660 3150 (*fnptr)(1);\001 +4 0 0 50 -1 0 12 0.0000 4 165 3240 3150 5400 Memoria indirizzabile programma gawk\001 +4 0 0 50 -1 0 12 0.0000 4 135 1260 6930 5400 Estensione\001 diff --git a/doc/it/gawk-api-figura3.pdf b/doc/it/gawk-api-figura3.pdf new file mode 100644 index 00000000..07f406bd Binary files /dev/null and b/doc/it/gawk-api-figura3.pdf differ diff --git a/doc/it/gawk-api-figura3.png b/doc/it/gawk-api-figura3.png new file mode 100644 index 00000000..26ca6cd6 Binary files /dev/null and b/doc/it/gawk-api-figura3.png differ diff --git a/doc/it/gawk-api-figura3.txt b/doc/it/gawk-api-figura3.txt new file mode 100644 index 00000000..02791df5 --- /dev/null +++ b/doc/it/gawk-api-figura3.txt @@ -0,0 +1,13 @@ + BEGIN { + chdir("/path") (*fnptr)(1); + } + +--------------------------------------------+ + | | + | V ++-------+-+---+-+---+-+------------------+--------------+-+---+ +| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| +| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| +| |x| |x| |x| |OOOOOOOOOOOOOO|X|OOO| ++-------+-+---+-+---+-+------------------+--------------+-+---+ + + Memoria indirizzabile programma gawk Estensione diff --git a/doc/it/gawk-flusso-elaborazione.eps b/doc/it/gawk-flusso-elaborazione.eps new file mode 100644 index 00000000..c9e4c938 --- /dev/null +++ b/doc/it/gawk-flusso-elaborazione.eps @@ -0,0 +1,420 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: cairo 1.12.8 (http://cairographics.org) +%%CreationDate: Wed Dec 17 19:10:08 2014 +%%Pages: 1 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%BoundingBox: 0 -1 366 172 +%%EndComments +%%BeginProlog +save +50 dict begin +/q { gsave } bind def +/Q { grestore } bind def +/cm { 6 array astore concat } bind def +/w { setlinewidth } bind def +/J { setlinecap } bind def +/j { setlinejoin } bind def +/M { setmiterlimit } bind def +/d { setdash } bind def +/m { moveto } bind def +/l { lineto } bind def +/c { curveto } bind def +/h { closepath } bind def +/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto + 0 exch rlineto 0 rlineto closepath } bind def +/S { stroke } bind def +/f { fill } bind def +/f* { eofill } bind def +/n { newpath } bind def +/W { clip } bind def +/W* { eoclip } bind def +/BT { } bind def +/ET { } bind def +/pdfmark where { pop globaldict /?pdfmark /exec load put } + { globaldict begin /?pdfmark /pop load def /pdfmark + /cleartomark load def end } ifelse +/BDC { mark 3 1 roll /BDC pdfmark } bind def +/EMC { mark /EMC pdfmark } bind def +/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def +/Tj { show currentpoint cairo_store_point } bind def +/TJ { + { + dup + type /stringtype eq + { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse + } forall + currentpoint cairo_store_point +} bind def +/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore + cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def +/Tf { pop /cairo_font exch def /cairo_font_matrix where + { pop cairo_selectfont } if } bind def +/Td { matrix translate cairo_font_matrix matrix concatmatrix dup + /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point + /cairo_font where { pop cairo_selectfont } if } bind def +/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def + cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def +/g { setgray } bind def +/rg { setrgbcolor } bind def +/d1 { setcachedevice } bind def +%%EndProlog +11 dict begin +/FontType 42 def +/FontName /DejaVuSans def +/PaintType 0 def +/FontMatrix [ 1 0 0 1 0 0 ] def +/FontBBox [ 0 0 0 0 ] def +/Encoding 256 array def +0 1 255 { Encoding exch /.notdef put } for +Encoding 63 /question put +Encoding 65 /A put +Encoding 69 /E put +Encoding 73 /I put +Encoding 78 /N put +Encoding 80 /P put +Encoding 83 /S put +Encoding 97 /a put +Encoding 98 /b put +Encoding 99 /c put +Encoding 100 /d put +Encoding 101 /e put +Encoding 105 /i put +Encoding 108 /l put +Encoding 110 /n put +Encoding 111 /o put +Encoding 114 /r put +Encoding 116 /t put +Encoding 117 /u put +Encoding 122 /z put +Encoding 236 /igrave put +/CharStrings 22 dict dup begin +/.notdef 0 def +/I 1 def +/n 2 def +/i 3 def +/z 4 def +/a 5 def +/l 6 def +/o 7 def +/e 8 def +/A 9 def +/c 10 def +/r 11 def +/d 12 def +/t 13 def +/question 14 def +/N 15 def +/S 16 def +/igrave 17 def +/E 18 def +/b 19 def +/P 20 def +/u 21 def +end readonly def +/sfnts [ +<0001000000090080000300106376742000691d3900000ddc000001fe6670676d7134766a0000 +0fdc000000ab676c7966478ea3590000009c00000d4068656164f79ac5e70000108800000036 +686865610cb80669000010c000000024686d747864c10d12000010e4000000606c6f63610000 +a9f000001144000000646d61787004850671000011a800000020707265703b07f100000011c8 +0000056800020066fe96046605a400030007001a400c04fb0006fb0108057f0204002fc4d4ec +310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f2720629000100c9 +0000019305d50003002eb700af02011c00040410fc4bb0105458b9000000403859ec31002fec +3001400d30054005500560058f059f05065d13331123c9caca05d5fa2b00000100ba00000464 +047b001300364019030900030e0106870e11b80cbc0a010208004e0d09080b461410fcec32f4 +ec31002f3ce4f4c4ec1112173930b46015cf1502015d0111231134262322061511231133153e +013332160464b87c7c95acb9b942b375c1c602a4fd5c029e9f9ebea4fd870460ae6564ef0002 +00c100000179061400030007002b400e06be04b100bc020501080400460810fc3cec3231002f +e4fcec30400b1009400950096009700905015d1333112311331523c1b8b8b8b80460fba00614 +e90000010058000003db04600009009d401a081102030203110708074208a900bc03a9050803 +01000401060a10dc4bb00b544bb00c545b58b90006ffc038594bb0135458b9000600403859c4 +32c411393931002fecf4ec304b5358071005ed071005ed592201404205021602260247024907 +050b080f0b18031b082b08200b36033908300b400140024503400440054308570359085f0b60 +01600266036004600562087f0b800baf0b1b5d005d1321150121152135012171036afd4c02b4 +fc7d02b4fd650460a8fcdb93a80325000002007bffe3042d047b000a002500bc4027191f0b17 +090e00a91706b90e1120861fba1cb923b8118c170c001703180d09080b1f030814452610fcec +ccd4ec323211393931002fc4e4f4fcf4ec10c6ee10ee11391139123930406e301d301e301f30 +20302130223f27401d401e401f402040214022501d501e501f50205021502250277027851d87 +1e871f8720872185229027a027f0271e301e301f30203021401e401f40204021501e501f5020 +5021601e601f60206021701e701f70207021801e801f80208021185d015d0122061514163332 +363d01371123350e01232226353436332135342623220607353e0133321602bedfac816f99b9 +b8b83fbc88accbfdfb0102a79760b65465be5af3f00233667b6273d9b4294cfd81aa6661c1a2 +bdc0127f8b2e2eaa2727fc00000100c100000179061400030022b7009702010800460410fcec +31002fec30400d10054005500560057005f00506015d13331123c1b8b80614f9ec0000020071 +ffe30475047b000b0017004a401306b91200b90cb8128c1809120f51031215451810fcecf4ec +310010e4f4ec10ee3040233f197b007b067f077f087f097f0a7f0b7b0c7f0d7f0e7f0f7f107f +117b12a019f01911015d012206151416333236353426273200111000232200111000027394ac +ab9593acac93f00112feeef0f1feef011103dfe7c9c9e7e8c8c7e99cfec8feecfeedfec70139 +011301140138000000020071ffe3047f047b0014001b00704024001501098608880515a90105 +b90c01bb18b912b80c8c1c1b1502081508004b02120f451c10fcecf4ecc4111239310010e4f4 +ece410ee10ee10f4ee1112393040293f1d701da01dd01df01d053f003f013f023f153f1b052c +072f082f092c0a6f006f016f026f156f1b095d71015d0115211e0133323637150e0123200011 +1000333200072e0123220607047ffcb20ccdb76ac76263d06bfef4fec70129fce20107b802a5 +889ab90e025e5abec73434ae2a2c0138010a01130143feddc497b4ae9e000002001000000568 +05d50002000a00c2404100110100040504021105050401110a030a0011020003030a07110504 +06110505040911030a08110a030a4200030795010381090509080706040302010009050a0b10 +d4c4173931002f3ce4d4ec1239304b5358071005ed0705ed071005ed0705ed071008ed071005 +ed071005ed071008ed5922b2200c01015d40420f010f020f070f080f005800760070008c0009 +07010802060309041601190256015802500c67016802780176027c0372047707780887018802 +800c980299039604175d005d090121013301230321032302bcfeee0225fe7be50239d288fd5f +88d5050efd1903aefa2b017ffe81000000010071ffe303e7047b0019003f401b00860188040e +860d880ab91104b917b8118c1a07120d004814451a10fce432ec310010e4f4ec10fef4ee10f5 +ee30400b0f1b101b801b901ba01b05015d01152e0123220615141633323637150e0123220011 +100021321603e74e9d50b3c6c6b3509d4e4da55dfdfed6012d010655a20435ac2b2be3cdcde3 +2b2baa2424013e010e0112013a230000000100ba0000034a047b001100304014060b0700110b +03870eb809bc070a06080008461210fcc4ec3231002fe4f4ecc4d4cc11123930b450139f1302 +015d012e012322061511231133153e0133321617034a1f492c9ca7b9b93aba85132e1c03b412 +11cbbefdb20460ae66630505000000020071ffe3045a06140010001c003840191ab9000e14b9 +05088c0eb801970317040008024711120b451d10fcecf4ec323231002fece4f4c4ec10c4ee30 +b6601e801ea01e03015d0111331123350e012322021110003332160114163332363534262322 +0603a2b8b83ab17ccbff00ffcb7cb1fdc7a79292a8a89292a703b6025ef9eca8646101440108 +0108014461fe15cbe7e7cbcbe7e700010037000002f2059e0013003840190e05080f03a90011 +01bc08870a0b08090204000810120e461410fc3cc4fc3cc432393931002fecf43cc4ec321139 +3930b2af1501015d01112115211114163b01152322263511233533110177017bfe854b73bdbd +d5a28787059efec28ffda0894e9a9fd202608f013e00000000020093000003b005f000030024 +0065402b241e0906040a1d13040014861388109517910083021d1a0d0905040a1e010d1c1a04 +1c05010300261a132510dc4bb00c5458b90013ffc03859c4fcecd4ec10ee1139391112391112 +3931002feef6fef4ee10cd11393917393001b679097a0a7a20035d2533152313233534363f01 +3e0135342623220607353e013332161514060f010e01070e01150187cbcbc5bf385a5a393383 +6c4fb3615ec167b8df485a582f27080606fefe01919a65825659355e31596e4643bc3938c29f +4c8956562f3519153c340000000100c90000053305d500090079401e07110102010211060706 +4207020300af0805060107021c0436071c00040a10fcecfcec11393931002f3cec323939304b +5358071004ed071004ed5922b21f0b01015d4030360238074802470769026607800207060109 +0615011a06460149065701580665016906790685018a0695019a069f0b105d005d1321011133 +1121011123c901100296c4fef0fd6ac405d5fb1f04e1fa2b04e1fb1f00010087ffe304a205f0 +0027007e403c0d0c020e0b021e1f1e080902070a021f1f1e420a0b1e1f0415010015a1149418 +9511049500942591118c281e0a0b1f1b0700221b190e2d071914222810dcc4ecfcece4111239 +393939310010e4f4e4ec10eef6ee10c6111739304b535807100eed11173907100eed11173959 +22b20f2901015db61f292f294f29035d01152e012322061514161f011e011514042122262735 +1e013332363534262f012e01353424333216044873cc5fa5b377a67ae2d7feddfee76aef807b +ec72adbc879a7be2ca0117f569da05a4c53736807663651f192bd9b6d9e0302fd04546887e6e +7c1f182dc0abc6e42600ffffffc7000001a6066610270016ff1d0000120600170000000100c9 +0000048b05d5000b002e401506950402950081089504ad0a05010907031c00040c10fcec32d4 +c4c431002fececf4ec10ee30b21f0d01015d132115211121152111211521c903b0fd1a02c7fd +3902f8fc3e05d5aafe46aafde3aa0000000200baffe304a40614000b001c0038401903b90c0f +09b918158c0fb81b971900121247180c06081a461d10fcec3232f4ec31002fece4f4c4ec10c6 +ee30b6601e801ea01e03015d013426232206151416333236013e013332001110022322262715 +23113303e5a79292a7a79292a7fd8e3ab17bcc00ffffcc7bb13ab9b9022fcbe7e7cbcbe7e702 +526461febcfef8fef8febc6164a80614000200c90000048d05d500080013003a401801951000 +95098112100a0802040005190d3f11001c09041410fcec32fcec11173931002ff4ecd4ec3040 +0b0f151f153f155f15af1505015d011133323635342623252132041514042b0111230193fe8d +9a9a8dfe3801c8fb0101fefffbfeca052ffdcf92878692a6e3dbdde2fda8000200aeffe30458 +047b00130014003b401c030900030e0106870e118c0a01bc14b80c0d0908140b4e0208004615 +10fcecf439ec3231002fe4e432f4c4ec1112173930b46f15c01502015d131133111416333236 +3511331123350e0123222601aeb87c7c95adb8b843b175c1c801cf01ba02a6fd619f9fbea402 +7bfba0ac6663f003a800000100aa04f00289066600030031400901b400b3040344010410dcec +310010f4ec30004bb009544bb00e545b58bd0004ffc000010004000400403811373859090123 +01016f011a99feba0666fe8a0176000200c100000179047b00030004002c400b04b800bf0204 +010800460510fcec3931002fece43040110404340444041006400650066006700608015d1333 +112313c1b8b85c0460fba0047b00013500b800cb00cb00c100aa009c01a600b8006600000071 +00cb00a002b20085007500b800c301cb0189022d00cb00a600f000d300aa008700cb03aa0400 +014a003300cb000000d9050200f4015400b4009c01390114013907060400044e04b4045204b8 +04e704cd0037047304cd04600473013303a2055605a60556053903c5021200c9001f00b801df +007300ba03e9033303bc0444040e00df03cd03aa00e503aa0404000000cb008f00a4007b00b8 +0014016f007f027b0252008f00c705cd009a009a006f00cb00cd019e01d300f000ba018300d5 +009803040248009e01d500c100cb00f600830354027f00000333026600d300c700a400cd008f +009a0073040005d5010a00fe022b00a400b4009c00000062009c0000001d032d05d505d505d5 +05f0007f007b005400a406b80614072301d300b800cb00a601c301ec069300a000d3035c0371 +03db0185042304a80448008f0139011401390360008f05d5019a061407230666017904600460 +0460047b009c00000277046001aa00e904600762007b00c5007f027b000000b4025205cd0066 +00bc00660077061000cd013b01850389008f007b0000001d00cd074a042f009c009c0000077d +006f0000006f0335006a006f007b00ae00b2002d0396008f027b00f600830354063705f6008f +009c04e10266008f018d02f600cd03440029006604ee00730000140000960000b70706050403 +0201002c2010b002254964b040515820c859212d2cb002254964b040515820c859212d2c2010 +0720b00050b00d7920b8ffff5058041b0559b0051cb0032508b0042523e120b00050b00d7920 +b8ffff5058041b0559b0051cb0032508e12d2c4b505820b0fd454459212d2cb002254560442d +2c4b5358b00225b0022545445921212d2c45442d2cb00225b0022549b00525b005254960b020 +6368208a108a233a8a10653a2d00000100000002547a3935de785f0f3cf5001f080000000000 +c990133600000000c9901336f7d6fcae0d72095500000008000000010000000000010000076d +fe1d00000de2f7d6fa510d7200010000000000000000000000000000001804cd0066025c00c9 +051200ba023900c10433005804e7007b023900c104e5007104ec00710579001004660071034a +00ba0514007103230037043f009305fc00c9051400870239ffc7050e00c9051400ba04d300c9 +051200ae040000aa023900c100000000000000440000008c0000010400000154000002200000 +034c000003880000042c00000500000005fc00000694000007040000079c00000818000008f0 +0000099800000a9000000aa800000b0800000ba000000c2000000ca400000cf400000d400001 +000000180354002b0068000c000200100099000800000415021600080004b8028040fffbfe03 +fa1403f92503f83203f79603f60e03f5fe03f4fe03f32503f20e03f19603f02503ef8a4105ef +fe03ee9603ed9603ecfa03ebfa03eafe03e93a03e84203e7fe03e63203e5e45305e59603e48a +4105e45303e3e22f05e3fa03e22f03e1fe03e0fe03df3203de1403dd9603dcfe03db1203da7d +03d9bb03d8fe03d68a4105d67d03d5d44705d57d03d44703d3d21b05d3fe03d21b03d1fe03d0 +fe03cffe03cefe03cd9603cccb1e05ccfe03cb1e03ca3203c9fe03c6851105c61c03c51603c4 +fe03c3fe03c2fe03c1fe03c0fe03bffe03befe03bdfe03bcfe03bbfe03ba1103b9862505b9fe +03b8b7bb05b8fe03b7b65d05b7bb03b78004b6b52505b65d40ff03b64004b52503b4fe03b396 +03b2fe03b1fe03b0fe03affe03ae6403ad0e03acab2505ac6403abaa1205ab2503aa1203a98a +4105a9fa03a8fe03a7fe03a6fe03a51203a4fe03a3a20e05a33203a20e03a16403a08a4105a0 +96039ffe039e9d0c059efe039d0c039c9b19059c64039b9a10059b19039a1003990a0398fe03 +97960d0597fe03960d03958a410595960394930e05942803930e0392fa039190bb0591fe0390 +8f5d0590bb039080048f8e25058f5d038f40048e25038dfe038c8b2e058cfe038b2e038a8625 +058a410389880b05891403880b03878625058764038685110586250385110384fe0383821105 +83fe0382110381fe0380fe037ffe0340ff7e7d7d057efe037d7d037c64037b5415057b25037a +fe0379fe03780e03770c03760a0375fe0374fa0373fa0372fa0371fa0370fe036ffe036efe03 +6c21036bfe036a1142056a530369fe03687d036711420566fe0365fe0364fe0363fe0362fe03 +613a0360fa035e0c035dfe035bfe035afe0359580a0559fa03580a035716190557320356fe03 +5554150555420354150353011005531803521403514a130551fe03500b034ffe034e4d10054e +fe034d10034cfe034b4a13054bfe034a4910054a1303491d0d05491003480d0347fe03469603 +45960344fe0343022d0543fa0342bb03414b0340fe033ffe033e3d12053e14033d3c0f053d12 +033c3b0d053c40ff0f033b0d033afe0339fe033837140538fa033736100537140336350b0536 +1003350b03341e03330d0332310b0532fe03310b03302f0b05300d032f0b032e2d09052e1003 +2d09032c32032b2a25052b64032a2912052a25032912032827250528410327250326250b0526 +0f03250b0324fe0323fe03220f03210110052112032064031ffa031e1d0d051e64031d0d031c +1142051cfe031bfa031a42031911420519fe031864031716190517fe031601100516190315fe +0314fe0313fe031211420512fe0311022d05114203107d030f64030efe030d0c16050dfe030c +0110050c16030bfe030a100309fe0308022d0508fe030714030664030401100504fe03401503 +022d0503fe0302011005022d0301100300fe0301b80164858d012b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b002b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b +2b2b2b2b2b2b2b1d00> +] def +/f-0-0 currentdict end definefont pop +%%Page: 1 1 +%%BeginPageSetup +%%PageBoundingBox: 0 -1 366 172 +%%EndPageSetup +q 0 -1 366 173 rectclip q +0 g +0.4724 w +0 J +0 j +[] 0.0 d +10 M 141.949 130.645 m 182.324 90.27 l 222.703 130.645 l 182.324 171.023 l 141.949 + 130.645 l S +Q q +0 171.344 366 -172 re W n +-0.5 172.531 m -0.5 -1.469 l 366.5 -1.469 l 366.5 172.531 l -0.5 172.531 + l 130.297 127.812 m 139.809 127.812 l 139.809 131.59 l 130.297 131.59 l + 137.855 129.703 l 130.297 127.812 l W n +q +0 171.344 366 -172 re W n +[ 1 0 0 1 0 -0.65625 ] concat + q +0 g +0.4724 w +0 J +0 j +[] 0.0 d +10 M 87.84 130.359 m 138.863 130.359 l S + Q +Q +Q q +0 g +130.297 127.812 m 137.855 129.703 l 130.297 131.59 l 130.297 127.812 l f* +0.4724 w +0 J +0 j +[] 0.0 d +10 M 130.297 127.812 m 137.855 129.703 l 130.297 131.59 l 130.297 127.812 l S +Q q +0 171.344 366 -172 re W n +-0.5 172.531 m -0.5 -1.469 l 366.5 -1.469 l 366.5 172.531 l -0.5 172.531 + l 269.188 127.812 m 278.699 127.812 l 278.699 131.59 l 269.188 131.59 l + 276.746 129.703 l 269.188 127.812 l W n +q +0 171.344 366 -172 re W n +[ 1 0 0 1 0 -0.65625 ] concat + q +0 g +0.4724 w +0 J +0 j +[] 0.0 d +10 M 226.734 130.359 m 277.754 130.359 l S + Q +Q +Q q +0 g +269.188 127.812 m 276.746 129.703 l 269.188 131.59 l 269.188 127.812 l f* +0.4724 w +0 J +0 j +[] 0.0 d +10 M 269.188 127.812 m 276.746 129.703 l 269.188 131.59 l 269.188 127.812 l S +4.945 149.543 m 2.336 149.543 0.223 147.43 0.223 144.82 c 0.223 114.145 + l 0.223 111.535 2.336 109.418 4.945 109.418 c 79.969 109.418 l 82.574 109.418 + 84.691 111.535 84.691 114.145 c 84.691 144.82 l 84.691 147.43 82.574 149.543 + 79.969 149.543 c 4.945 149.543 l S +285.312 149.543 m 282.703 149.543 280.59 147.43 280.59 144.82 c 280.59 +113.891 l 280.59 111.281 282.703 109.168 285.312 109.168 c 360.84 109.168 + l 363.449 109.168 365.562 111.281 365.562 113.891 c 365.562 144.82 l 365.562 + 147.43 363.449 149.543 360.84 149.543 c 285.312 149.543 l S +Q q +0 152.344 366 -132 re W n +-95.199 152.273 m -95.199 20.82 l 457.016 20.82 l 457.016 152.273 l -95.199 + 152.273 l 179.891 55.719 m 179.891 48.535 l 185.578 48.535 l 185.578 55.719 + l 182.734 50.012 l 179.891 55.719 l W n +q +0 152.344 366 -132 re W n +[ 1 0 0 1 0 -0.65625 ] concat + q +0 g +0.4724 w +0 J +0 j +[] 0.0 d +10 M 182.734 88.453 m 182.734 49.906 l S + Q +Q +Q q +21 171.344 293 -168 re W n +21.961 170.488 m 21.961 3.996 l 313.367 3.996 l 313.367 170.488 l 21.961 + 170.488 l 109.363 118.598 m 109.363 127.699 l 106.359 127.699 l 106.359 + 118.598 l 107.859 125.832 l 109.363 118.598 l W n +q +21 171.344 293 -168 re W n +[ 1 0 0 1 0 -0.65625 ] concat + q +0 g +0.4724 w +0 J +0 j +[] 0.0 d +10 M 139.371 21.672 m 107.859 21.672 l 107.859 127.453 l S + Q +Q +Q q +0 g +109.57 118.301 m 107.684 125.859 l 105.793 118.301 l 109.57 118.301 l f* +0.4724 w +0 J +0 j +[] 0.0 d +10 M 109.57 118.301 m 107.684 125.859 l 105.793 118.301 l 109.57 118.301 l S +BT +10 0 0 10 4.1806 125.86455 Tm +/f-0-0 1 Tf +[(I)3(n)9(i)-14(z)-17(i)-13(a)-13(l)-13(i)-14(z)-17(z)-17(a)-12(z)-17(i) +-14(o)-13(n)9(e)]TJ +15.95277 1.22084 Td +[(A)17(n)9(c)8(o)-13(r)-5(a)]TJ +0.75418 -1.2125 Td +[(d)10(a)-12(t)17(i)]TJ +0.80832 -1.25 Td +(?)Tj +5.1 2.25 Td +[(No)]TJ +-3.89166 -6.45 Td +[(S)10(\354)]TJ +-4.27084 -5.57084 Td +[(E)7(l)-14(a)-12(b)10(o)-14(r)-5(a)-12(z)-17(i)-14(o)-13(n)9(e)]TJ +15.2625 11.0125 Td +[(P)20(u)8(l)-13(i)-14(z)-17(i)-14(a)]TJ +ET +4.945 149.543 m 2.336 149.543 0.223 147.43 0.223 144.82 c 0.223 114.145 + l 0.223 111.535 2.336 109.418 4.945 109.418 c 79.969 109.418 l 82.574 109.418 + 84.691 111.535 84.691 114.145 c 84.691 144.82 l 84.691 147.43 82.574 149.543 + 79.969 149.543 c 4.945 149.543 l S +144.965 39.297 m 142.352 39.297 140.234 37.238 140.234 34.699 c 140.234 + 4.848 l 140.234 2.309 142.352 0.25 144.965 0.25 c 220.035 0.25 l 222.648 + 0.25 224.766 2.309 224.766 4.848 c 224.766 34.699 l 224.766 37.238 222.648 + 39.297 220.035 39.297 c 144.965 39.297 l S +180.824 49.602 m 182.715 42.043 l 184.605 49.602 l 180.824 49.602 l f* +Q Q +showpage +%%Trailer +end restore +%%EOF diff --git a/doc/it/gawk-flusso-elaborazione.fig b/doc/it/gawk-flusso-elaborazione.fig new file mode 100644 index 00000000..50c9a209 --- /dev/null +++ b/doc/it/gawk-flusso-elaborazione.fig @@ -0,0 +1,37 @@ +#FIG 3.2 Produced by xfig version 3.2.5c +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +2 3 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 4819 3540 5460 4181 6101 3540 5460 2899 4819 3540 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 3960 3555 4770 3555 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 6165 3555 6975 3555 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 5 0 0 5 + 7020 3240 7020 3881 8369 3881 8369 3240 7020 3240 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 5490 4230 5490 5040 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 3 + 1 1 1.00 60.00 120.00 + 4905 5355 4275 5355 4275 3600 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 3915 3870 3915 3330 1935 3330 1935 3870 3915 3870 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 6345 5670 6345 4995 4950 4995 4950 5670 6345 5670 +4 0 0 50 -1 0 12 0.0000 4 135 450 5265 3885 ?\001 +4 0 0 50 -1 0 12 0.0000 4 135 180 6210 3465 No\001 +4 0 0 50 -1 0 12 0.0000 4 135 540 5265 3375 Ancora\001 +4 0 0 50 -1 0 12 0.0000 4 135 360 5265 3630 dati\001 +4 0 0 50 -1 0 12 0.0000 4 135 630 7290 3600 Pulizia\001 +4 0 0 50 -1 0 12 0.0000 4 135 1080 5130 5400 Elaborazione\001 +4 0 0 50 -1 0 12 0.0000 4 135 1440 2205 3645 Inizializzazione\001 +4 0 0 50 -1 0 12 0.0000 4 135 270 5535 4455 Si'\001 diff --git a/doc/it/gawk-flusso-elaborazione.pdf b/doc/it/gawk-flusso-elaborazione.pdf new file mode 100644 index 00000000..e7fb8555 Binary files /dev/null and b/doc/it/gawk-flusso-elaborazione.pdf differ diff --git a/doc/it/gawk-flusso-elaborazione.png b/doc/it/gawk-flusso-elaborazione.png new file mode 100644 index 00000000..4dc95902 Binary files /dev/null and b/doc/it/gawk-flusso-elaborazione.png differ diff --git a/doc/it/gawk-flusso-elaborazione.txt b/doc/it/gawk-flusso-elaborazione.txt new file mode 100644 index 00000000..87a5b439 --- /dev/null +++ b/doc/it/gawk-flusso-elaborazione.txt @@ -0,0 +1,11 @@ + _______ ++------------------+ / Ancora\ No +---------+ +| Inizializzazione | -------> < dati > -------> | Pulizia | ++------------------+ ^ \ ? / +---------+ + | +--+--+ + | | Sì + | | + | V + | +--------------+ + +--+ Elaborazione | + +--------------+ diff --git a/doc/it/gawk-programma-generico.eps b/doc/it/gawk-programma-generico.eps new file mode 100644 index 00000000..db87944d --- /dev/null +++ b/doc/it/gawk-programma-generico.eps @@ -0,0 +1,228 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: cairo 1.12.8 (http://cairographics.org) +%%CreationDate: Wed Dec 17 19:11:08 2014 +%%Pages: 1 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%BoundingBox: 0 -1 265 57 +%%EndComments +%%BeginProlog +save +50 dict begin +/q { gsave } bind def +/Q { grestore } bind def +/cm { 6 array astore concat } bind def +/w { setlinewidth } bind def +/J { setlinecap } bind def +/j { setlinejoin } bind def +/M { setmiterlimit } bind def +/d { setdash } bind def +/m { moveto } bind def +/l { lineto } bind def +/c { curveto } bind def +/h { closepath } bind def +/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto + 0 exch rlineto 0 rlineto closepath } bind def +/S { stroke } bind def +/f { fill } bind def +/f* { eofill } bind def +/n { newpath } bind def +/W { clip } bind def +/W* { eoclip } bind def +/BT { } bind def +/ET { } bind def +/pdfmark where { pop globaldict /?pdfmark /exec load put } + { globaldict begin /?pdfmark /pop load def /pdfmark + /cleartomark load def end } ifelse +/BDC { mark 3 1 roll /BDC pdfmark } bind def +/EMC { mark /EMC pdfmark } bind def +/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def +/Tj { show currentpoint cairo_store_point } bind def +/TJ { + { + dup + type /stringtype eq + { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse + } forall + currentpoint cairo_store_point +} bind def +/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore + cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def +/Tf { pop /cairo_font exch def /cairo_font_matrix where + { pop cairo_selectfont } if } bind def +/Td { matrix translate cairo_font_matrix matrix concatmatrix dup + /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point + /cairo_font where { pop cairo_selectfont } if } bind def +/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def + cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def +/g { setgray } bind def +/rg { setrgbcolor } bind def +/d1 { setcachedevice } bind def +%%EndProlog +11 dict begin +/FontType 42 def +/FontName /DroidSansFallback def +/PaintType 0 def +/FontMatrix [ 1 0 0 1 0 0 ] def +/FontBBox [ 0 0 0 0 ] def +/Encoding 256 array def +0 1 255 { Encoding exch /.notdef put } for +Encoding 68 /D put +Encoding 80 /P put +Encoding 82 /R put +Encoding 97 /a put +Encoding 103 /g put +Encoding 105 /i put +Encoding 108 /l put +Encoding 109 /m put +Encoding 111 /o put +Encoding 114 /r put +Encoding 115 /s put +Encoding 116 /t put +Encoding 117 /u put +/CharStrings 14 dict dup begin +/.notdef 0 def +/D 1 def +/a 2 def +/t 3 def +/i 4 def +/P 5 def +/r 6 def +/o 7 def +/g 8 def +/m 9 def +/R 10 def +/s 11 def +/u 12 def +/l 13 def +end readonly def +/sfnts [ +<000100000009008000030010637674200000000000000498000000026670676db02159b00000 +049c00000007676c7966cf60e9770000009c000003fc68656164eb09793d000004a400000036 +68686561021600ec000004dc00000024686d747807ac012f00000500000000386c6f63610000 +1d50000005380000003c6d617870006802310000057400000020707265708014882900000594 +000000120002004b000000b500b700030007000037331523373335234b6a6a0d4f4fb7b70d9d +000000020019000000a000b70008001100003335333216151406232715333236353426231933 +272d2f2a171422211f1fb72f2b2d30a38f242424230000000002000cfffe0074008c00170022 +0000332723062322263534373735342623220727363332161515270706061514163332363563 +04010f1b13153a170d0e11130816161a18171217110b0b1113131515132a0201080f0f0a110c +16185e4301010e0d0b0b1413000000010004fffe005200a90015000037150623222635352335 +37373315331523151416333252090d12121414090d232309080a13110415164f0a0a1d20114f +0d0c000200140000002f00bd000b000f0000371406232226353436333216072335332f070706 +0707060707021717ae07070707080707b6890000000200190000008600b7000a001300003715 +23353332161514062327333236353426232330172d20202221131019151515144747b71b1b1b +1f141213111200000001001600000061008c000f000037072623220615152335331733363332 +610308060f14171203011015098b150118154a89191c0002000efffe0086008c000b00170000 +3734363332161514062322263734262322061514163332360e211b1a22211b1b216012121212 +121212124522252621232425221a1a1a1a1a1b1b000000030005ffc30080008c00250031003e +0000371507161514062322270615141633333216151406232226353437263534372635343633 +321717342623220615141633323607232206151416333236353426801908191608020b090a16 +151522221b1a1e0c10181a170b07070d0d0d0c0d0d0c0d0e160d0e101017170b890e030b1014 +1801070a05051312181713131a08050e0e0a0a1c1719032b0e0f0f0f0e0e0e4d0c0c0b0b0e0e +0a08000000010016000000d1008c002100003335342623220615152335342623220615152335 +3317333633321733363332161515ba0d0c1111170d0d1011171204010c1a1e09010d1d161658 +111017164c581110161c47891215171719195a00000200190000009400b7000c001500003715 +233533321615140717232727333236353426232330172c212024321b2c1d1515141317144c4c +b71a1a240d524c13121111100001000bfffe0068008c001f000037351633323635342e023534 +36333217072623220615141e0215140623220b16130f0f0b2d0d1917151408140e0c0d0a2e0d +1a1a1a06150b0a0a080915110c11140a12090808080914120c13150000010015fffe00810089 +0013000033272306232226353533151416333236353533156f04010c1b1717160e0d12121712 +14191959581011171b478900000100160000002d00c300030000332335332d1717c300000000 +0000b0002cb000212d000001000000024f5c133ce3d25f0f3cf5000b010000000000c3477867 +00000000c79972b4ffe9ffbc011f010b00000009000200010000000000010000010bffbc0000 +012bffe9fff6011f00010000000000000000000000000000000e0100004b00af00190088000c +005700040042001400940019006600160094000e0085000500e50016009700190074000b0097 +001500420016000000000000002400000060000000c8000001080000014000000180000001b4 +00000200000002ac000003080000034c000003a8000003e4000003fc00010000000e00e80027 +0105001800020010002f0001000000040012000500014bb0c8514bb007535a58b9000101ff85 +8d59000000> +] def +/f-0-0 currentdict end definefont pop +%%Page: 1 1 +%%BeginPageSetup +%%PageBoundingBox: 0 -1 265 57 +%%EndPageSetup +q 0 -1 265 58 rectclip q +0 g +0.4724 w +0 J +0 j +[] 0.0 d +10 M 114.254 56.309 m 98.195 28.215 l 114.508 0.246 l 146.82 0.434 l 162.883 + 28.527 l 146.57 56.496 l 114.254 56.309 l S +Q q +26 56.719 170 -57 re W n +26.316 83.094 m 26.316 -25.965 l 195.043 -25.965 l 195.043 83.094 l 26.316 + 83.094 l 83.664 24.711 m 89.629 24.711 l 89.629 31.816 l 83.664 31.816 +l 88.406 28.266 l 83.664 24.711 l W n +q +26 56.719 170 -57 re W n +[ 1 0 0 1 0 -0.28125 ] concat + q +0 g +0.4724 w +0 J +0 j +[] 0.0 d +10 M 65.922 28.547 m 89.035 28.547 l S + Q +Q +Q q +0 g +87.988 26.449 m 95.547 28.34 l 87.988 30.23 l 87.988 26.449 l f* +0.4724 w +0 J +0 j +[] 0.0 d +10 M 88.047 26.359 m 93.973 28.25 l 88.047 30.141 l 88.047 26.359 l S +Q q +0 56.719 265 -57 re W n +-3.438 57.5 m -3.438 -0.5 l 265.562 -0.5 l 265.562 57.5 l -3.438 57.5 l + 190.031 26.449 m 199.543 26.449 l 199.543 30.23 l 190.031 30.23 l 197.59 + 28.34 l 190.031 26.449 l W n +q +0 56.719 265 -57 re W n +[ 1 0 0 1 0 -0.28125 ] concat + q +0 g +0.4724 w +0 J +0 j +[] 0.0 d +10 M 167.418 28.621 m 198.598 28.621 l S + Q +Q +Q q +0 g +190.031 26.449 m 197.59 28.34 l 190.031 30.23 l 190.031 26.449 l f* +0.4724 w +0 J +0 j +[] 0.0 d +10 M 190.031 26.449 m 197.59 28.34 l 190.031 30.23 l 190.031 26.449 l S +205.215 48.18 m 202.605 48.18 200.488 46.066 200.488 43.457 c 200.488 13.285 + l 200.488 10.676 202.605 8.562 205.215 8.562 c 259.953 8.562 l 262.559 +8.562 264.676 10.676 264.676 13.285 c 264.676 43.457 l 264.676 46.066 262.559 + 48.18 259.953 48.18 c 205.215 48.18 l S +BT +10 0 0 10 21.9375 24.9167 Tm +/f-0-0 1 Tf +[(D)-4(a)31(t)28(i)]TJ +8.1875 -0.05 Td +[(P)16(r)23(o)16(g)19(r)24(a)31(m)19(m)20(a)]TJ +11.2375 0.1 Td +[(R)27(i)8(s)16(u)27(l)8(t)27(a)32(t)27(i)]TJ +ET +205.215 48.18 m 202.605 48.18 200.488 46.066 200.488 43.457 c 200.488 13.285 + l 200.488 10.676 202.605 8.562 205.215 8.562 c 259.953 8.562 l 262.559 +8.562 264.676 10.676 264.676 13.285 c 264.676 43.457 l 264.676 46.066 262.559 + 48.18 259.953 48.18 c 205.215 48.18 l S +4.965 47.805 m 2.355 47.805 0.238 45.691 0.238 43.082 c 0.238 12.91 l 0.238 + 10.301 2.355 8.188 4.965 8.188 c 59.703 8.188 l 62.309 8.188 64.426 10.301 + 64.426 12.91 c 64.426 43.082 l 64.426 45.691 62.309 47.805 59.703 47.805 + c 4.965 47.805 l S +Q Q +showpage +%%Trailer +end restore +%%EOF diff --git a/doc/it/gawk-programma-generico.fig b/doc/it/gawk-programma-generico.fig new file mode 100644 index 00000000..e87f6e3b --- /dev/null +++ b/doc/it/gawk-programma-generico.fig @@ -0,0 +1,25 @@ +#FIG 3.2 Produced by xfig version 3.2.5c +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 5805 3465 6300 3465 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 4 0 0 5 + 4052 3779 4052 3195 3105 3195 3105 3779 4052 3779 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 7695 3825 7695 3195 6300 3195 6300 3825 7695 3825 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 1 1 1.00 60.00 120.00 + 4095 3465 4680 3465 +2 3 0 1 0 7 50 -1 -1 0.000 0 0 0 0 0 7 + 5490 3915 5745 3456 5475 3006 4950 3015 4695 3474 4965 3924 + 5490 3915 +4 0 0 50 -1 0 12 0.0000 4 135 360 3375 3510 Dati\001 +4 0 0 50 -1 0 12 0.0000 4 165 810 4860 3510 Programma\001 +4 0 0 50 -1 0 12 0.0000 4 135 810 6525 3510 Risultati\001 diff --git a/doc/it/gawk-programma-generico.pdf b/doc/it/gawk-programma-generico.pdf new file mode 100644 index 00000000..d5c751af Binary files /dev/null and b/doc/it/gawk-programma-generico.pdf differ diff --git a/doc/it/gawk-programma-generico.png b/doc/it/gawk-programma-generico.png new file mode 100644 index 00000000..1a877907 Binary files /dev/null and b/doc/it/gawk-programma-generico.png differ diff --git a/doc/it/gawk-programma-generico.txt b/doc/it/gawk-programma-generico.txt new file mode 100644 index 00000000..1f6e5124 --- /dev/null +++ b/doc/it/gawk-programma-generico.txt @@ -0,0 +1,4 @@ + _________ ++------+ / \ +-----------+ +| Dati | -----> < Programma > -----> | Risultati | ++------+ \_________/ +-----------+ diff --git a/doc/it/gawk-vettore-elementi.eps b/doc/it/gawk-vettore-elementi.eps new file mode 100644 index 00000000..87979fb8 --- /dev/null +++ b/doc/it/gawk-vettore-elementi.eps @@ -0,0 +1,159 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Title: vettore-elementi.fig +%%Creator: fig2dev Version 3.2 Patchlevel 5e +%%CreationDate: Mon Feb 9 17:13:19 2015 +%%For: marco@casa1 (Marco) +%%BoundingBox: 0 0 383 76 +%Magnification: 1.0000 +%%EndComments +%%BeginProlog +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +/pageheader { +save +newpath 0 76 moveto 0 0 lineto 383 0 lineto 383 76 lineto closepath clip newpath +-203.3 199.4 translate +1 -1 scale +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06299 0.06299 sc +} bind def +/pagefooter { +$F2psEnd +restore +} bind def +%%EndProlog +pageheader +% +% Fig objects follow +% +% +% here starts figure with depth 50 +% Polyline +0 slj +0 slc +7.500 slw +n 4455 1980 m 4455 2700 l 4455 2655 l + 4455 2700 l gs col0 s gr +% Polyline +n 6075 1980 m + 6075 2700 l gs col0 s gr +% Polyline +n 7425 1980 m + 7425 2700 l gs col0 s gr +/Courier-Bold ff 190.50 scf sf +3735 2340 m +gs 1 -1 sc (8) col0 sh gr +/Courier-Bold ff 190.50 scf sf +6795 2340 m +gs 1 -1 sc ("") col0 sh gr +/Courier-Bold ff 190.50 scf sf +7875 2340 m +gs 1 -1 sc (30) col0 sh gr +/Times-Roman ff 190.50 scf sf +3735 3150 m +gs 1 -1 sc (0) col0 sh gr +/Times-Roman ff 190.50 scf sf +5175 3150 m +gs 1 -1 sc (1) col0 sh gr +/Times-Roman ff 190.50 scf sf +6795 3150 m +gs 1 -1 sc (2) col0 sh gr +/Times-Roman ff 190.50 scf sf +7875 3150 m +gs 1 -1 sc (3) col0 sh gr +/Times-Roman ff 190.50 scf sf +8730 2340 m +gs 1 -1 sc (Valore) col0 sh gr +/Times-Roman ff 190.50 scf sf +8730 3150 m +gs 1 -1 sc (Indice) col0 sh gr +/Courier-Bold ff 190.50 scf sf +5175 2340 m +gs 1 -1 sc ("pippo") col0 sh gr +% here ends figure; +% +% here starts figure with depth 40 +% Polyline +0 slj +0 slc +7.500 slw +n 3240 1980 m 8415 1980 l 8415 2700 l 3240 2700 l + cp gs col0 s gr +% here ends figure; +pagefooter +showpage +%%Trailer +%EOF diff --git a/doc/it/gawk-vettore-elementi.fig b/doc/it/gawk-vettore-elementi.fig new file mode 100644 index 00000000..37f3449c --- /dev/null +++ b/doc/it/gawk-vettore-elementi.fig @@ -0,0 +1,27 @@ +#FIG 3.2 Produced by xfig version 3.2.5c +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +2 2 0 1 0 7 40 -1 -1 0.000 0 0 -1 0 0 5 + 3240 1980 8415 1980 8415 2700 3240 2700 3240 1980 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 + 4455 1980 4455 2700 4455 2655 4455 2700 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6075 1980 6075 2700 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 7425 1980 7425 2700 +4 0 0 50 -1 14 12 0.0000 4 135 90 3735 2340 8\001 +4 0 0 50 -1 14 12 0.0000 4 45 180 6795 2340 ""\001 +4 0 0 50 -1 14 12 0.0000 4 135 180 7875 2340 30\001 +4 0 0 50 -1 0 12 0.0000 4 135 90 3735 3150 0\001 +4 0 0 50 -1 0 12 0.0000 4 135 90 5175 3150 1\001 +4 0 0 50 -1 0 12 0.0000 4 135 90 6795 3150 2\001 +4 0 0 50 -1 0 12 0.0000 4 135 90 7875 3150 3\001 +4 0 0 50 -1 0 12 0.0000 4 135 540 8730 2340 Valore\001 +4 0 0 50 -1 0 12 0.0000 4 135 540 8730 3150 Indice\001 +4 0 0 50 -1 14 12 0.0000 4 165 630 5175 2340 "pippo"\001 diff --git a/doc/it/gawk-vettore-elementi.pdf b/doc/it/gawk-vettore-elementi.pdf new file mode 100644 index 00000000..cfec8760 Binary files /dev/null and b/doc/it/gawk-vettore-elementi.pdf differ diff --git a/doc/it/gawk-vettore-elementi.png b/doc/it/gawk-vettore-elementi.png new file mode 100644 index 00000000..87ef434d Binary files /dev/null and b/doc/it/gawk-vettore-elementi.png differ diff --git a/doc/it/gawk-vettore-elementi.txt b/doc/it/gawk-vettore-elementi.txt new file mode 100644 index 00000000..5d7efb83 --- /dev/null +++ b/doc/it/gawk-vettore-elementi.txt @@ -0,0 +1,4 @@ ++---------+---------+--------+---------+ +| 8 | "pippo" | "" | 30 | @r{Value} ++---------+---------+--------+---------+ + 0 1 2 3 @r{Index} diff --git a/doc/it/gawkbug.1 b/doc/it/gawkbug.1 new file mode 100755 index 00000000..484777a8 --- /dev/null +++ b/doc/it/gawkbug.1 @@ -0,0 +1,84 @@ +.\" +.\" MAN PAGE COMMENTS to +.\" +.\" Arnold Robbins +.\" bug-gawk@gnu.org +.\" +.\" Last Change: Mon Apr 18 16:21:25 IDT 2022 +.\" +.\" Traduzione di Antonio Giovanni Colombo +.\" per la versione gawk-5.2 +.TH GAWKBUG 1 "2022 Apr 18" "GNU Awk 5.2" +.SH NOME +gawkbug \- segnala un bug di gawk +.SH SINTASSI +\fBgawkbug\fP [\fI--version\fP] [\fI--help\fP] [\fIindirizzo-email\fP] +.SH DESCRIZIONE +.B gawkbug +è una script di shell che aiuta un utente a comporre e spedire delle +segnalazioni di bug riguardo a +.B gawk +in un formato standard. +.B gawkbug +chiama il programma di edit specificato nella variabile +.SM +.B EDITOR +per modificare una copia temporanea di un modulo standard per +la segnalazione di errori. L'utente deve riempire i campi appropriati +e quindi uscire dalla sessione di edit. +In seguito, +.B gawkbug +spedisce la segnalazione così preparata a \fIbug-gawk@gnu.org\fP, o +all'\fIindirizzo-email\fP specificato. Se l'invio non riesce, il +modulo compilato viene salvato, con il nome \fIdead.gawkbug\fP, +nella home directory dell'utente che sta facendo la segnalazione. +.PP +Il modulo di segnalazione bug è composto da più sezioni. +La prima sezione fornisce informazioni riguarda al computer, al +sistema operativo, alla versione di +.B gawk +e all'ambiente di compilazione. +La seconda sezione va riempita con la descrizione del bug. +La terza sezione dovrebbe contenere una descrizione di come è +possibile riprodurre il bug. +La quarta sezione (opzionale) permette di segnalare una possibile +correzione. La segnalazione di correzioni è molto gradita. +.SH VARIABILI D'AMBIENTE +.B gawkbug +utilizzerà le seguenti variabili d'ambiente, se definite: +.TP +.B EDITOR +Specifica il programma di edit preferito. Se +.SM +.B EDITOR +non è impostato, +.B gawkbug +tenta di trovare alcuni programma di edit alternativi, compreso +.BR vim +e, se necessario, +.BR emacs . +Se +.B gawkbug +non riesce a trovare alcun programma di edit alternativo, tenta di eseguire \fBvi\fP. +.TP +.B HOME +Nome della directory in cui viene salvata una segnalazione di bug, se non +è stato possibile inviarla con la posta elettronica. +.TP +.B TMPDIR +Nome della directory in cui creare file e directory temporanei. +.SH VEDERE ANCHE +.TP +\fIgawk\fP(1) +.SH AUTORI +Brian Fox, Free Software Foundation +.br +bfox@gnu.org +.PP +Chet Ramey, Case Western Reserve University +.br +chet@po.cwru.edu +.PP +Arnold Robbins +.br +bug-gawk@gnu.org diff --git a/doc/it/gawktexi.in b/doc/it/gawktexi.in index dce710cb..68216999 100755 --- a/doc/it/gawktexi.in +++ b/doc/it/gawktexi.in @@ -18281,10 +18281,10 @@ concettualmente, se i valori degli elementi sono 8, @code{"pippo"}, @float Figura,vettore-elementi @caption{Un vettore contiguo} @ifset SMALLPRINT -@center @image{vettore-elementi, 11cm, , Un vettore contiguo} +@center @image{gawk-vettore-elementi, 11cm, , Un vettore contiguo} @end ifset @ifclear SMALLPRINT -@center @image{vettore-elementi, , , Un vettore contiguo} +@center @image{gawk-vettore-elementi, , , Un vettore contiguo} @end ifclear @end float @end ifnotdocbook @@ -18293,7 +18293,7 @@ concettualmente, se i valori degli elementi sono 8, @code{"pippo"},
Un vettore contiguo - +
@end docbook @@ -38734,10 +38734,10 @@ Questo si pu@`o vedere in @inlineraw{docbook, Caricamento dell'estensione - + @end docbook @@ -38775,10 +38775,10 @@ Questo @`e shown in @inlineraw{docbook, Registering a new function - + @end docbook @@ -38815,10 +38815,10 @@ Questo @`e mostrato in @inlineraw{docbook, Chiamata della nuova funzione - + @end docbook @@ -49758,10 +49758,10 @@ Si veda la @inlineraw{docbook, }. @float Figura,figura-generica-flusso @caption{Flusso generico di un programma} @ifclear SMALLPRINT -@center @image{programma-generico, , , Flusso generico di un programma} +@center @image{gawk-programma-generico, , , Flusso generico di un programma} @end ifclear @ifset SMALLPRINT -@center @image{programma-generico, 11cm, , Flusso generico di un programma} +@center @image{gawk-programma-generico, 11cm, , Flusso generico di un programma} @end ifset @end float @end ifnotdocbook @@ -49770,7 +49770,7 @@ Si veda la @inlineraw{docbook, }.
Flusso generico di un programma - +
@end docbook @@ -49808,10 +49808,10 @@ come si vede nella @inlineraw{docbook, Fasi di un programma generico - + @end docbook diff --git a/doc/it/programma-generico.eps b/doc/it/programma-generico.eps deleted file mode 100644 index db87944d..00000000 --- a/doc/it/programma-generico.eps +++ /dev/null @@ -1,228 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: cairo 1.12.8 (http://cairographics.org) -%%CreationDate: Wed Dec 17 19:11:08 2014 -%%Pages: 1 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%BoundingBox: 0 -1 265 57 -%%EndComments -%%BeginProlog -save -50 dict begin -/q { gsave } bind def -/Q { grestore } bind def -/cm { 6 array astore concat } bind def -/w { setlinewidth } bind def -/J { setlinecap } bind def -/j { setlinejoin } bind def -/M { setmiterlimit } bind def -/d { setdash } bind def -/m { moveto } bind def -/l { lineto } bind def -/c { curveto } bind def -/h { closepath } bind def -/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto - 0 exch rlineto 0 rlineto closepath } bind def -/S { stroke } bind def -/f { fill } bind def -/f* { eofill } bind def -/n { newpath } bind def -/W { clip } bind def -/W* { eoclip } bind def -/BT { } bind def -/ET { } bind def -/pdfmark where { pop globaldict /?pdfmark /exec load put } - { globaldict begin /?pdfmark /pop load def /pdfmark - /cleartomark load def end } ifelse -/BDC { mark 3 1 roll /BDC pdfmark } bind def -/EMC { mark /EMC pdfmark } bind def -/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def -/Tj { show currentpoint cairo_store_point } bind def -/TJ { - { - dup - type /stringtype eq - { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse - } forall - currentpoint cairo_store_point -} bind def -/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore - cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def -/Tf { pop /cairo_font exch def /cairo_font_matrix where - { pop cairo_selectfont } if } bind def -/Td { matrix translate cairo_font_matrix matrix concatmatrix dup - /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point - /cairo_font where { pop cairo_selectfont } if } bind def -/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def - cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def -/g { setgray } bind def -/rg { setrgbcolor } bind def -/d1 { setcachedevice } bind def -%%EndProlog -11 dict begin -/FontType 42 def -/FontName /DroidSansFallback def -/PaintType 0 def -/FontMatrix [ 1 0 0 1 0 0 ] def -/FontBBox [ 0 0 0 0 ] def -/Encoding 256 array def -0 1 255 { Encoding exch /.notdef put } for -Encoding 68 /D put -Encoding 80 /P put -Encoding 82 /R put -Encoding 97 /a put -Encoding 103 /g put -Encoding 105 /i put -Encoding 108 /l put -Encoding 109 /m put -Encoding 111 /o put -Encoding 114 /r put -Encoding 115 /s put -Encoding 116 /t put -Encoding 117 /u put -/CharStrings 14 dict dup begin -/.notdef 0 def -/D 1 def -/a 2 def -/t 3 def -/i 4 def -/P 5 def -/r 6 def -/o 7 def -/g 8 def -/m 9 def -/R 10 def -/s 11 def -/u 12 def -/l 13 def -end readonly def -/sfnts [ -<000100000009008000030010637674200000000000000498000000026670676db02159b00000 -049c00000007676c7966cf60e9770000009c000003fc68656164eb09793d000004a400000036 -68686561021600ec000004dc00000024686d747807ac012f00000500000000386c6f63610000 -1d50000005380000003c6d617870006802310000057400000020707265708014882900000594 -000000120002004b000000b500b700030007000037331523373335234b6a6a0d4f4fb7b70d9d -000000020019000000a000b70008001100003335333216151406232715333236353426231933 -272d2f2a171422211f1fb72f2b2d30a38f242424230000000002000cfffe0074008c00170022 -0000332723062322263534373735342623220727363332161515270706061514163332363563 -04010f1b13153a170d0e11130816161a18171217110b0b1113131515132a0201080f0f0a110c -16185e4301010e0d0b0b1413000000010004fffe005200a90015000037150623222635352335 -37373315331523151416333252090d12121414090d232309080a13110415164f0a0a1d20114f -0d0c000200140000002f00bd000b000f0000371406232226353436333216072335332f070706 -0707060707021717ae07070707080707b6890000000200190000008600b7000a001300003715 -23353332161514062327333236353426232330172d20202221131019151515144747b71b1b1b -1f141213111200000001001600000061008c000f000037072623220615152335331733363332 -610308060f14171203011015098b150118154a89191c0002000efffe0086008c000b00170000 -3734363332161514062322263734262322061514163332360e211b1a22211b1b216012121212 -121212124522252621232425221a1a1a1a1a1b1b000000030005ffc30080008c00250031003e -0000371507161514062322270615141633333216151406232226353437263534372635343633 -321717342623220615141633323607232206151416333236353426801908191608020b090a16 -151522221b1a1e0c10181a170b07070d0d0d0c0d0d0c0d0e160d0e101017170b890e030b1014 -1801070a05051312181713131a08050e0e0a0a1c1719032b0e0f0f0f0e0e0e4d0c0c0b0b0e0e -0a08000000010016000000d1008c002100003335342623220615152335342623220615152335 -3317333633321733363332161515ba0d0c1111170d0d1011171204010c1a1e09010d1d161658 -111017164c581110161c47891215171719195a00000200190000009400b7000c001500003715 -233533321615140717232727333236353426232330172c212024321b2c1d1515141317144c4c -b71a1a240d524c13121111100001000bfffe0068008c001f000037351633323635342e023534 -36333217072623220615141e0215140623220b16130f0f0b2d0d1917151408140e0c0d0a2e0d -1a1a1a06150b0a0a080915110c11140a12090808080914120c13150000010015fffe00810089 -0013000033272306232226353533151416333236353533156f04010c1b1717160e0d12121712 -14191959581011171b478900000100160000002d00c300030000332335332d1717c300000000 -0000b0002cb000212d000001000000024f5c133ce3d25f0f3cf5000b010000000000c3477867 -00000000c79972b4ffe9ffbc011f010b00000009000200010000000000010000010bffbc0000 -012bffe9fff6011f00010000000000000000000000000000000e0100004b00af00190088000c -005700040042001400940019006600160094000e0085000500e50016009700190074000b0097 -001500420016000000000000002400000060000000c8000001080000014000000180000001b4 -00000200000002ac000003080000034c000003a8000003e4000003fc00010000000e00e80027 -0105001800020010002f0001000000040012000500014bb0c8514bb007535a58b9000101ff85 -8d59000000> -] def -/f-0-0 currentdict end definefont pop -%%Page: 1 1 -%%BeginPageSetup -%%PageBoundingBox: 0 -1 265 57 -%%EndPageSetup -q 0 -1 265 58 rectclip q -0 g -0.4724 w -0 J -0 j -[] 0.0 d -10 M 114.254 56.309 m 98.195 28.215 l 114.508 0.246 l 146.82 0.434 l 162.883 - 28.527 l 146.57 56.496 l 114.254 56.309 l S -Q q -26 56.719 170 -57 re W n -26.316 83.094 m 26.316 -25.965 l 195.043 -25.965 l 195.043 83.094 l 26.316 - 83.094 l 83.664 24.711 m 89.629 24.711 l 89.629 31.816 l 83.664 31.816 -l 88.406 28.266 l 83.664 24.711 l W n -q -26 56.719 170 -57 re W n -[ 1 0 0 1 0 -0.28125 ] concat - q -0 g -0.4724 w -0 J -0 j -[] 0.0 d -10 M 65.922 28.547 m 89.035 28.547 l S - Q -Q -Q q -0 g -87.988 26.449 m 95.547 28.34 l 87.988 30.23 l 87.988 26.449 l f* -0.4724 w -0 J -0 j -[] 0.0 d -10 M 88.047 26.359 m 93.973 28.25 l 88.047 30.141 l 88.047 26.359 l S -Q q -0 56.719 265 -57 re W n --3.438 57.5 m -3.438 -0.5 l 265.562 -0.5 l 265.562 57.5 l -3.438 57.5 l - 190.031 26.449 m 199.543 26.449 l 199.543 30.23 l 190.031 30.23 l 197.59 - 28.34 l 190.031 26.449 l W n -q -0 56.719 265 -57 re W n -[ 1 0 0 1 0 -0.28125 ] concat - q -0 g -0.4724 w -0 J -0 j -[] 0.0 d -10 M 167.418 28.621 m 198.598 28.621 l S - Q -Q -Q q -0 g -190.031 26.449 m 197.59 28.34 l 190.031 30.23 l 190.031 26.449 l f* -0.4724 w -0 J -0 j -[] 0.0 d -10 M 190.031 26.449 m 197.59 28.34 l 190.031 30.23 l 190.031 26.449 l S -205.215 48.18 m 202.605 48.18 200.488 46.066 200.488 43.457 c 200.488 13.285 - l 200.488 10.676 202.605 8.562 205.215 8.562 c 259.953 8.562 l 262.559 -8.562 264.676 10.676 264.676 13.285 c 264.676 43.457 l 264.676 46.066 262.559 - 48.18 259.953 48.18 c 205.215 48.18 l S -BT -10 0 0 10 21.9375 24.9167 Tm -/f-0-0 1 Tf -[(D)-4(a)31(t)28(i)]TJ -8.1875 -0.05 Td -[(P)16(r)23(o)16(g)19(r)24(a)31(m)19(m)20(a)]TJ -11.2375 0.1 Td -[(R)27(i)8(s)16(u)27(l)8(t)27(a)32(t)27(i)]TJ -ET -205.215 48.18 m 202.605 48.18 200.488 46.066 200.488 43.457 c 200.488 13.285 - l 200.488 10.676 202.605 8.562 205.215 8.562 c 259.953 8.562 l 262.559 -8.562 264.676 10.676 264.676 13.285 c 264.676 43.457 l 264.676 46.066 262.559 - 48.18 259.953 48.18 c 205.215 48.18 l S -4.965 47.805 m 2.355 47.805 0.238 45.691 0.238 43.082 c 0.238 12.91 l 0.238 - 10.301 2.355 8.188 4.965 8.188 c 59.703 8.188 l 62.309 8.188 64.426 10.301 - 64.426 12.91 c 64.426 43.082 l 64.426 45.691 62.309 47.805 59.703 47.805 - c 4.965 47.805 l S -Q Q -showpage -%%Trailer -end restore -%%EOF diff --git a/doc/it/programma-generico.fig b/doc/it/programma-generico.fig deleted file mode 100644 index e87f6e3b..00000000 --- a/doc/it/programma-generico.fig +++ /dev/null @@ -1,25 +0,0 @@ -#FIG 3.2 Produced by xfig version 3.2.5c -Landscape -Center -Metric -A4 -100.00 -Single --2 -1200 2 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 5805 3465 6300 3465 -2 4 0 1 0 7 50 -1 -1 0.000 0 0 4 0 0 5 - 4052 3779 4052 3195 3105 3195 3105 3779 4052 3779 -2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 - 7695 3825 7695 3195 6300 3195 6300 3825 7695 3825 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 1.00 60.00 120.00 - 4095 3465 4680 3465 -2 3 0 1 0 7 50 -1 -1 0.000 0 0 0 0 0 7 - 5490 3915 5745 3456 5475 3006 4950 3015 4695 3474 4965 3924 - 5490 3915 -4 0 0 50 -1 0 12 0.0000 4 135 360 3375 3510 Dati\001 -4 0 0 50 -1 0 12 0.0000 4 165 810 4860 3510 Programma\001 -4 0 0 50 -1 0 12 0.0000 4 135 810 6525 3510 Risultati\001 diff --git a/doc/it/programma-generico.pdf b/doc/it/programma-generico.pdf deleted file mode 100644 index d5c751af..00000000 Binary files a/doc/it/programma-generico.pdf and /dev/null differ diff --git a/doc/it/programma-generico.png b/doc/it/programma-generico.png deleted file mode 100644 index 1a877907..00000000 Binary files a/doc/it/programma-generico.png and /dev/null differ diff --git a/doc/it/programma-generico.txt b/doc/it/programma-generico.txt deleted file mode 100644 index 1f6e5124..00000000 --- a/doc/it/programma-generico.txt +++ /dev/null @@ -1,4 +0,0 @@ - _________ -+------+ / \ +-----------+ -| Dati | -----> < Programma > -----> | Risultati | -+------+ \_________/ +-----------+ diff --git a/doc/it/vettore-elementi.eps b/doc/it/vettore-elementi.eps deleted file mode 100644 index 87979fb8..00000000 --- a/doc/it/vettore-elementi.eps +++ /dev/null @@ -1,159 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Title: vettore-elementi.fig -%%Creator: fig2dev Version 3.2 Patchlevel 5e -%%CreationDate: Mon Feb 9 17:13:19 2015 -%%For: marco@casa1 (Marco) -%%BoundingBox: 0 0 383 76 -%Magnification: 1.0000 -%%EndComments -%%BeginProlog -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -/pageheader { -save -newpath 0 76 moveto 0 0 lineto 383 0 lineto 383 76 lineto closepath clip newpath --203.3 199.4 translate -1 -1 scale -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06299 0.06299 sc -} bind def -/pagefooter { -$F2psEnd -restore -} bind def -%%EndProlog -pageheader -% -% Fig objects follow -% -% -% here starts figure with depth 50 -% Polyline -0 slj -0 slc -7.500 slw -n 4455 1980 m 4455 2700 l 4455 2655 l - 4455 2700 l gs col0 s gr -% Polyline -n 6075 1980 m - 6075 2700 l gs col0 s gr -% Polyline -n 7425 1980 m - 7425 2700 l gs col0 s gr -/Courier-Bold ff 190.50 scf sf -3735 2340 m -gs 1 -1 sc (8) col0 sh gr -/Courier-Bold ff 190.50 scf sf -6795 2340 m -gs 1 -1 sc ("") col0 sh gr -/Courier-Bold ff 190.50 scf sf -7875 2340 m -gs 1 -1 sc (30) col0 sh gr -/Times-Roman ff 190.50 scf sf -3735 3150 m -gs 1 -1 sc (0) col0 sh gr -/Times-Roman ff 190.50 scf sf -5175 3150 m -gs 1 -1 sc (1) col0 sh gr -/Times-Roman ff 190.50 scf sf -6795 3150 m -gs 1 -1 sc (2) col0 sh gr -/Times-Roman ff 190.50 scf sf -7875 3150 m -gs 1 -1 sc (3) col0 sh gr -/Times-Roman ff 190.50 scf sf -8730 2340 m -gs 1 -1 sc (Valore) col0 sh gr -/Times-Roman ff 190.50 scf sf -8730 3150 m -gs 1 -1 sc (Indice) col0 sh gr -/Courier-Bold ff 190.50 scf sf -5175 2340 m -gs 1 -1 sc ("pippo") col0 sh gr -% here ends figure; -% -% here starts figure with depth 40 -% Polyline -0 slj -0 slc -7.500 slw -n 3240 1980 m 8415 1980 l 8415 2700 l 3240 2700 l - cp gs col0 s gr -% here ends figure; -pagefooter -showpage -%%Trailer -%EOF diff --git a/doc/it/vettore-elementi.fig b/doc/it/vettore-elementi.fig deleted file mode 100644 index 37f3449c..00000000 --- a/doc/it/vettore-elementi.fig +++ /dev/null @@ -1,27 +0,0 @@ -#FIG 3.2 Produced by xfig version 3.2.5c -Landscape -Center -Metric -A4 -100.00 -Single --2 -1200 2 -2 2 0 1 0 7 40 -1 -1 0.000 0 0 -1 0 0 5 - 3240 1980 8415 1980 8415 2700 3240 2700 3240 1980 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 - 4455 1980 4455 2700 4455 2655 4455 2700 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 6075 1980 6075 2700 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 7425 1980 7425 2700 -4 0 0 50 -1 14 12 0.0000 4 135 90 3735 2340 8\001 -4 0 0 50 -1 14 12 0.0000 4 45 180 6795 2340 ""\001 -4 0 0 50 -1 14 12 0.0000 4 135 180 7875 2340 30\001 -4 0 0 50 -1 0 12 0.0000 4 135 90 3735 3150 0\001 -4 0 0 50 -1 0 12 0.0000 4 135 90 5175 3150 1\001 -4 0 0 50 -1 0 12 0.0000 4 135 90 6795 3150 2\001 -4 0 0 50 -1 0 12 0.0000 4 135 90 7875 3150 3\001 -4 0 0 50 -1 0 12 0.0000 4 135 540 8730 2340 Valore\001 -4 0 0 50 -1 0 12 0.0000 4 135 540 8730 3150 Indice\001 -4 0 0 50 -1 14 12 0.0000 4 165 630 5175 2340 "pippo"\001 diff --git a/doc/it/vettore-elementi.pdf b/doc/it/vettore-elementi.pdf deleted file mode 100644 index cfec8760..00000000 Binary files a/doc/it/vettore-elementi.pdf and /dev/null differ diff --git a/doc/it/vettore-elementi.png b/doc/it/vettore-elementi.png deleted file mode 100644 index 87ef434d..00000000 Binary files a/doc/it/vettore-elementi.png and /dev/null differ diff --git a/doc/it/vettore-elementi.txt b/doc/it/vettore-elementi.txt deleted file mode 100644 index 5d7efb83..00000000 --- a/doc/it/vettore-elementi.txt +++ /dev/null @@ -1,4 +0,0 @@ -+---------+---------+--------+---------+ -| 8 | "pippo" | "" | 30 | @r{Value} -+---------+---------+--------+---------+ - 0 1 2 3 @r{Index} -- cgit v1.2.1