gawk-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] gawk branch, feature/nuke-os2, created. gawk-4.1.0-4758-g05b8f271


From: Arnold Robbins
Subject: [SCM] gawk branch, feature/nuke-os2, created. gawk-4.1.0-4758-g05b8f271
Date: Sun, 3 Jul 2022 14:36:08 -0400 (EDT)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".

The branch, feature/nuke-os2 has been created
        at  05b8f271482d472db8d6c2a3764b68dd3543cacc (commit)

- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=05b8f271482d472db8d6c2a3764b68dd3543cacc

commit 05b8f271482d472db8d6c2a3764b68dd3543cacc
Author: Arnold D. Robbins <arnold@skeeve.com>
Date:   Sun Jul 3 21:35:43 2022 +0300

    Nuke OS/2 stuff.

diff --git a/ChangeLog b/ChangeLog
index 3fdbea98..94f43869 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,8 @@
 2022-07-03         Arnold D. Robbins     <arnold@skeeve.com>
 
-       * README: Updated.
+       * README: Updated. Remove mention of OS/2.
+       * awk.h, awgram.y. gawkmisc.c, io.c, main.c, nonposix.h:
+       Remove all code for __EMX__.
 
 2022-06-20         Arnold D. Robbins     <arnold@skeeve.com>
 
diff --git a/NEWS b/NEWS
index 1f7f66e6..93f683a3 100644
--- a/NEWS
+++ b/NEWS
@@ -49,6 +49,9 @@ allowing gawk to preserve the contents of its variables and 
arrays
 between runs. THIS IS AN EXPERIMENTAL FEATURE!  For more information,
 see the manual.
 
+10. Support for OS/2 has been removed. It was not being actively
+maintained.
+
 Changes from 5.1.1 to 5.1.2
 ---------------------------
 
diff --git a/README b/README
index 316d686b..1c9d52af 100644
--- a/README
+++ b/README
@@ -42,7 +42,7 @@ want to get a copy of Bison from the FSF too.)
 The build mechanics depend upon Bison. Also, gawk doesn't work correctly
 with some versions of yacc, so just use Bison.
 
-If you have an MS-DOS, MS-Windows, or OS/2 system, use the stuff in the `pc'
+If you have an MS-DOS, or MS-Windows system, use the stuff in the `pc'
 directory.  Similarly, there is a separate directory for VMS.
 
 Appendix B of ``GAWK: Effective Awk Programming'' discusses configuration
@@ -95,10 +95,6 @@ MS-Windows with MinGW:
        Eli Zaretskii
        eliz@gnu.org
 
-OS/2:
-       Andreas Buening
-       andreas.buening@nexgo.de
-
 VMS:
        John Malmberg
        wb8tyw@qsl.net
diff --git a/README_d/ChangeLog b/README_d/ChangeLog
index 96c64813..75bf9693 100644
--- a/README_d/ChangeLog
+++ b/README_d/ChangeLog
@@ -2,6 +2,8 @@
 
        * README.gcc-3: Deleted.
        * README.mpfr: Updated.
+       * README.os: Removed.
+       * README.pc: Updated.
 
 2021-10-27         Arnold D. Robbins     <arnold@skeeve.com>
 
diff --git a/README_d/README.os2 b/README_d/README.os2
deleted file mode 100644
index c12f82db..00000000
--- a/README_d/README.os2
+++ /dev/null
@@ -1,57 +0,0 @@
-From andreas.buening@nexgo.de  Thu Oct 19 15:34:16 2017
-Date: Thu, 19 Oct 2017 23:34:09 +0200 (CEST)
-From: =?UTF-8?Q?Andreas_B=C3=BCning?= <andreas.buening@nexgo.de>
-To: arnold@skeeve.com
-Message-ID: <1433289104.12656.1508448849820@mail.vodafone.de>
-Subject: Re: gawk for OS/2 - any updates?
-
-Hello Arnold,
-
-I'd like to inform you about the current state of compiling gawk on
-OS/2:
-
-1. Compilation
-
-Running ./configure does work but
-
-- I tried only running with --disable-nls, so with NLS I didn't test.
-- Depending on the gcc version you use you may get linker errors. In
-  that case add 'CFLAGS=-O2 -g -fgnu89-inline' to the configure options
-  (-O2 -g already is the default).
-
-
-2. Tests
-
-It is possible to run the built-in checks but many test results depend
-on the shell being used. I recommend to use 'make -i check' to run
-the tests because some failures might cause a immediate termination
-of the make run.
-
-- If your shell uses \r\n linebreaks (in that case all tests fail)
-  then you have to run 'make -i check CMP=diff' to ignore the linebreak
-  differences at the test result comparison.
-- Depending on the shell some tests might just hang forever. Press
-  Ctrl+C and/or Ctrl+Break until the tests continue.
-- OS/2 can only load DLLs with filenames up to 8+3 bytes but gawk
-  creates three internal DLLs with longer names (e.g. filefuncs.dll,
-  revoutput.dll, revtwoway.dll). Thus, all tests trying to load
-  filefuncs.dll or the other two DLLs will fail. This is not a bug
-  of gawk. If you change e.g. the '@load filefuncs' directive to
-  '@load filefunc' in the according *.awk file then the tests will
-  succeed.
-- The number of failling tests is currently around 50, less if your
-  shell uses \r\n linebreaks, more otherwise.
-
-Best wishes,
-
-Andreas Buening
-======================================================
-
-Sat Oct 21 21:01:49 IDT 2017
-============================
-
-Fixes for loading extension libraries have since been included
-in the git repo and will be part of 4.2.1.
-
-Arnold Robbins
-arnold@skeeve.com
diff --git a/README_d/README.pc b/README_d/README.pc
index eb9e8fe1..a366c661 100644
--- a/README_d/README.pc
+++ b/README_d/README.pc
@@ -2,8 +2,7 @@ This is the README for GNU awk 4 under Windows32, OS/2, and DOS.
 
     Gawk has been compiled and tested under OS/2, DOS, and Windows32 using
 the GNU development tools from DJ Delorie (DJGPP; DOS with special
-support for long filenames on Windows), Eberhard Mattes (EMX; OS/2,
-DOS, and Windows32 with rsxnt), and Jan-Jaap van der Heijden and Mumit Khan
+support for long filenames on Windows), and Jan-Jaap van der Heijden and Mumit 
Khan
 (Mingw32; Windows32).
 
     The Cygwin environment (http://cygwin.com) may also be used
@@ -38,7 +37,7 @@ gawk will be installed under $(prefix)/lib/awk (e.g., 
/gnu/lib/awk),
 it is convenient to have this directory in DEFPATH of config.h. 
 
 The makefile contains a number of targets for building various DOS and
-OS/2 versions.  A list of targets will be printed if the make command is
+Windows versions.  A list of targets will be printed if the make command is
 given without a target.  As an example, to build gawk using the djgpp
 tools, enter "make djgpp".
 
@@ -102,14 +101,11 @@ additional help on changes for Windows32.
 
 
 ----
-If you have any problems with the DOS or OS/2 versions of Gawk, 
+If you have any problems with the DOS versions of Gawk, 
 please send bug reports (along with the version and compiler used) to 
 
    Juan Manuel Guerrero, juan.guerrero@gmx.de (DJGPP)
 
-or
-
-   andreas.buening@nexgo.de (OS/2 version)
 
 Support for Windows32 started in gawk-3.0.3.
 
diff --git a/awk.h b/awk.h
index 16b852ae..0da24149 100644
--- a/awk.h
+++ b/awk.h
@@ -169,9 +169,9 @@ extern void *memset_ulong(void *dest, int val, unsigned 
long l);
 #define fwrite fwrite_unlocked
 #endif /* HAVE_FWRITE_UNLOCKED */
 
-#if defined(__DJGPP__) || defined(__EMX__) || defined(__MINGW32__)
+#if defined(__DJGPP__) || defined(__MINGW32__)
 #include "nonposix.h"
-#endif /* defined(__DJGPP__) || defined(__EMX__) || defined(__MINGW32__) */
+#endif /* defined(__DJGPP__) || defined(__MINGW32__) */
 
 /* use this as lintwarn("...")
    this is a hack but it gives us the right semantics */
diff --git a/awkgram.y b/awkgram.y
index daf90a5b..36cac704 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -3612,17 +3612,6 @@ yylex(void)
                return lasttok = NEWLINE_EOF;
        pushback();
 
-#if defined __EMX__
-       /*
-        * added for OS/2's extproc feature of cmd.exe
-        * (like #! in BSD sh)
-        */
-       if (strncasecmp(lexptr, "extproc ", 8) == 0) {
-               while (*lexptr && *lexptr != '\n')
-                       lexptr++;
-       }
-#endif
-
        lexeme = lexptr;
        thisline = NULL;
 
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 61eef4f3..7963cc16 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,7 @@
+2022-07-03         Arnold D. Robbins     <arnold@skeeve.com>
+
+       * gawktexi.in: Remove stuff related to OS/2.
+
 2022-06-29         Arnold D. Robbins     <arnold@skeeve.com>
 
        * gawktexi.in (Persistent Memory): Note that only 64-bit
diff --git a/doc/gawk.info b/doc/gawk.info
index 31f85ac8..638f2195 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -11439,9 +11439,6 @@ they are not special:
                Microsoft Windows, using either DJGPP or MinGW,
                respectively.
 
-          '"os2"'
-               OS/2.
-
           '"os390"'
                OS/390.
 
@@ -32299,8 +32296,6 @@ MS-DOS with DJGPP       Juan Manuel Guerrero, 
<juan.guerrero@gmx.de>
                         
 MS-Windows with MinGW   Eli Zaretskii, <eliz@gnu.org>
                         
-OS/2                    Andreas Buening, <andreas.buening@nexgo.de>
-                        
 VMS                     John Malmberg, <wb8tyw@qsl.net>
                         
 z/OS (OS/390)           Daniel Richard G. <skunk@iSKUNK.ORG>
@@ -36512,7 +36507,7 @@ Index
 * dark corner, exit statement:           Exit Statement.      (line  30)
 * dark corner, value of ARGV[0]:         Auto-set.            (line  39)
 * dark corner, FILENAME variable <1>:    Auto-set.            (line 108)
-* dark corner, FNR/NR variables:         Auto-set.            (line 409)
+* dark corner, FNR/NR variables:         Auto-set.            (line 406)
 * dark corner, array subscripts:         Uninitialized Subscripts.
                                                               (line  43)
 * dark corner, regexp as second argument to index(): String Functions.
@@ -36761,8 +36756,8 @@ Index
 * differences in awk and gawk, ERRNO variable: Auto-set.      (line  87)
 * differences in awk and gawk, FUNCTAB variable: Auto-set.    (line 134)
 * differences in awk and gawk, PROCINFO array: Auto-set.      (line 148)
-* differences in awk and gawk, RS/RT variables <3>: Auto-set. (line 348)
-* differences in awk and gawk, SYMTAB variable: Auto-set.     (line 352)
+* differences in awk and gawk, RS/RT variables <3>: Auto-set. (line 345)
+* differences in awk and gawk, SYMTAB variable: Auto-set.     (line 349)
 * differences in awk and gawk, ARGC/ARGV variables: ARGC and ARGV.
                                                               (line  89)
 * differences in awk and gawk, array elements, deleting: Delete.
@@ -36959,7 +36954,7 @@ Index
 * expressions, selecting:                Conditional Exp.     (line   6)
 * expressions, as patterns:              Expression Patterns. (line   6)
 * Extended Regular Expressions (EREs):   Bracket Expressions. (line  34)
-* extension API, version number:         Auto-set.            (line 287)
+* extension API, version number:         Auto-set.            (line 284)
 * extension API, interaction with namespaces: Namespace And Features.
                                                               (line  22)
 * extension API:                         Extension API Description.
@@ -37135,7 +37130,7 @@ Index
                                                               (line  12)
 * FNR variable:                          Records.             (line   6)
 * FNR variable <1>:                      Auto-set.            (line 118)
-* FNR variable, changing:                Auto-set.            (line 409)
+* FNR variable, changing:                Auto-set.            (line 406)
 * for statement:                         For Statement.       (line   6)
 * for statement, looping over arrays:    Scanning an Array.   (line  20)
 * fork() extension function:             Extension Sample Fork.
@@ -37299,9 +37294,9 @@ Index
 * gawk, ERRNO variable in <3>:           Auto-set.            (line  87)
 * gawk, FUNCTAB array in:                Auto-set.            (line 134)
 * gawk, PROCINFO array in <1>:           Auto-set.            (line 148)
-* gawk, version of:                      Auto-set.            (line 262)
-* gawk, RT variable in <3>:              Auto-set.            (line 348)
-* gawk, SYMTAB array in:                 Auto-set.            (line 352)
+* gawk, version of:                      Auto-set.            (line 259)
+* gawk, RT variable in <3>:              Auto-set.            (line 345)
+* gawk, SYMTAB array in:                 Auto-set.            (line 349)
 * gawk, IGNORECASE variable in <2>:      Array Intro.         (line 100)
 * gawk, function arguments and:          Calling Built-in.    (line  16)
 * gawk, IGNORECASE variable in <3>:      String Functions.    (line  57)
@@ -37745,7 +37740,7 @@ Index
 * mawk utility <2>:                      Concatenation.       (line  36)
 * mawk utility <3>:                      Nextfile Statement.  (line  47)
 * mawk utility <4>:                      Other Versions.      (line  39)
-* maximum precision supported by MPFR library: Auto-set.      (line 276)
+* maximum precision supported by MPFR library: Auto-set.      (line 273)
 * McIlroy, Doug:                         Glossary.            (line 255)
 * McPhee, Patrick T.J.:                  Contributors.        (line 103)
 * memory, allocating for extensions:     Memory Allocation Functions.
@@ -37760,7 +37755,7 @@ Index
 * messages from extensions:              Printing Messages.   (line   6)
 * metacharacters, escape sequences for:  Escape Sequences.    (line 139)
 * metacharacters, in regular expressions: Regexp Operators.   (line   6)
-* minimum precision required by MPFR library: Auto-set.       (line 279)
+* minimum precision required by MPFR library: Auto-set.       (line 276)
 * Minshall, Greg:                        Getopt Function.     (line 105)
 * mkbool:                                Boolean Functions.   (line  10)
 * mktime:                                Time Functions.      (line  25)
@@ -37857,7 +37852,7 @@ Index
 * not Boolean-logic operator:            Boolean Ops.         (line   6)
 * NR variable:                           Records.             (line   6)
 * NR variable <1>:                       Auto-set.            (line 143)
-* NR variable, changing:                 Auto-set.            (line 409)
+* NR variable, changing:                 Auto-set.            (line 406)
 * null strings, in gawk arguments, quoting and: Quoting.      (line  82)
 * null strings, in gawk arguments, quoting and <1>: Other Arguments.
                                                               (line  73)
@@ -37974,7 +37969,7 @@ Index
                                                               (line  39)
 * package, definition of:                Global Namespace.    (line  18)
 * Papadopoulos, Panos:                   Contributors.        (line 131)
-* parent process ID of gawk process:     Auto-set.            (line 251)
+* parent process ID of gawk process:     Auto-set.            (line 248)
 * parentheses (), regexp operator:       Regexp Operator Details.
                                                               (line  77)
 * parentheses (), in a profile:          Profiling.           (line 146)
@@ -38173,8 +38168,8 @@ Index
 * printing, mailing labels:              Labels Program.      (line   6)
 * printing, messages from extensions:    Printing Messages.   (line   6)
 * private variables:                     Library Names.       (line  11)
-* process group ID of gawk process:      Auto-set.            (line 245)
-* process ID of gawk process:            Auto-set.            (line 248)
+* process group ID of gawk process:      Auto-set.            (line 242)
+* process ID of gawk process:            Auto-set.            (line 245)
 * processes, two-way communications with: Two-way I/O.        (line   6)
 * processing data:                       Basic High Level.    (line   6)
 * PROCINFO array:                        Auto-set.            (line 148)
@@ -38364,7 +38359,7 @@ Index
 * right angle bracket (>), >> operator (I/O) <1>: Precedence. (line  64)
 * right shift, bitwise:                  Bitwise Functions.   (line  33)
 * Ritchie, Dennis:                       Basic Data Typing.   (line  54)
-* RLENGTH variable:                      Auto-set.            (line 335)
+* RLENGTH variable:                      Auto-set.            (line 332)
 * RLENGTH variable, match() function and: String Functions.   (line 241)
 * Robbins, Miriam:                       Acknowledgments.     (line  94)
 * Robbins, Jean:                         Acknowledgments.     (line  94)
@@ -38394,12 +38389,12 @@ Index
 * RS variable, multiline records and:    Multiple Line.       (line  17)
 * RS variable <1>:                       User-modified.       (line 135)
 * rshift:                                Bitwise Functions.   (line  55)
-* RSTART variable:                       Auto-set.            (line 341)
+* RSTART variable:                       Auto-set.            (line 338)
 * RSTART variable, match() function and: String Functions.    (line 241)
 * RT variable:                           awk split records.   (line 118)
 * RT variable <1>:                       gawk split records.  (line  66)
 * RT variable <2>:                       Multiple Line.       (line 138)
-* RT variable <3>:                       Auto-set.            (line 348)
+* RT variable <3>:                       Auto-set.            (line 345)
 * Rubin, Paul:                           History.             (line  30)
 * Rubin, Paul <1>:                       Contributors.        (line  16)
 * rule, definition of:                   Getting Started.     (line  21)
@@ -38417,7 +38412,7 @@ Index
 * scanning arrays:                       Scanning an Array.   (line   6)
 * scanning multidimensional arrays:      Multiscanning.       (line  11)
 * Schorr, Andrew:                        Acknowledgments.     (line  60)
-* Schorr, Andrew <1>:                    Auto-set.            (line 379)
+* Schorr, Andrew <1>:                    Auto-set.            (line 376)
 * Schorr, Andrew <2>:                    Contributors.        (line 136)
 * Schreiber, Bert:                       Acknowledgments.     (line  38)
 * Schreiber, Rita:                       Acknowledgments.     (line  38)
@@ -38541,7 +38536,7 @@ Index
 * sidebar, Syntactic Ambiguities Between /= and Regular Expressions: 
Assignment Ops.
                                                               (line 148)
 * sidebar, Operator Evaluation Order:    Increment Ops.       (line  58)
-* sidebar, Changing NR and FNR:          Auto-set.            (line 407)
+* sidebar, Changing NR and FNR:          Auto-set.            (line 404)
 * sidebar, Matching the Null String:     String Functions.    (line 561)
 * sidebar, Interactive Versus Noninteractive Buffering: I/O Functions.
                                                               (line  73)
@@ -38699,9 +38694,9 @@ Index
 * substr:                                String Functions.    (line 499)
 * substring:                             String Functions.    (line 499)
 * Sumner, Andrew:                        Other Versions.      (line  64)
-* supplementary groups of gawk process:  Auto-set.            (line 292)
+* supplementary groups of gawk process:  Auto-set.            (line 289)
 * switch statement:                      Switch Statement.    (line   6)
-* SYMTAB array:                          Auto-set.            (line 352)
+* SYMTAB array:                          Auto-set.            (line 349)
 * syntactic ambiguity: /= operator vs. /=.../ regexp constant: Assignment Ops.
                                                               (line 150)
 * system:                                I/O Functions.       (line 105)
@@ -38920,10 +38915,10 @@ Index
 * variables, global, for library functions: Library Names.    (line  11)
 * variables, private:                    Library Names.       (line  11)
 * variables <1>:                         Basic Data Typing.   (line   6)
-* version of, gawk:                      Auto-set.            (line 262)
-* version of, GNU MP library:            Auto-set.            (line 270)
-* version of, GNU MPFR library:          Auto-set.            (line 272)
-* version of, gawk extension API:        Auto-set.            (line 287)
+* version of, gawk:                      Auto-set.            (line 259)
+* version of, GNU MP library:            Auto-set.            (line 267)
+* version of, GNU MPFR library:          Auto-set.            (line 269)
+* version of, gawk extension API:        Auto-set.            (line 284)
 * vertical bar (|):                      Regexp Operator Details.
                                                               (line  66)
 * vertical bar (|), | operator (I/O):    Getline/Pipe.        (line  10)
@@ -39210,401 +39205,401 @@ Node: Exit Statement469789
 Node: Built-in Variables472192
 Node: User-modified473325
 Node: Auto-set481092
-Ref: Auto-set-Footnote-1497899
-Ref: Auto-set-Footnote-2498105
-Node: ARGC and ARGV498161
-Node: Pattern Action Summary502374
-Node: Arrays504804
-Node: Array Basics506133
-Node: Array Intro506977
-Ref: figure-array-elements508952
-Ref: Array Intro-Footnote-1511657
-Node: Reference to Elements511785
-Node: Assigning Elements514249
-Node: Array Example514740
-Node: Scanning an Array516694
-Node: Controlling Scanning519716
-Ref: Controlling Scanning-Footnote-1526172
-Node: Numeric Array Subscripts526488
-Node: Uninitialized Subscripts528672
-Node: Delete530291
-Ref: Delete-Footnote-1533043
-Node: Multidimensional533100
-Node: Multiscanning536195
-Node: Arrays of Arrays537786
-Node: Arrays Summary542554
-Node: Functions544647
-Node: Built-in545685
-Node: Calling Built-in546838
-Node: Boolean Functions548834
-Node: Numeric Functions549388
-Ref: Numeric Functions-Footnote-1553415
-Ref: Numeric Functions-Footnote-2554063
-Ref: Numeric Functions-Footnote-3554111
-Node: String Functions554383
-Ref: String Functions-Footnote-1579225
-Ref: String Functions-Footnote-2579353
-Ref: String Functions-Footnote-3579601
-Node: Gory Details579688
-Ref: table-sub-escapes581479
-Ref: table-sub-proposed582999
-Ref: table-posix-sub584363
-Ref: table-gensub-escapes585905
-Ref: Gory Details-Footnote-1586729
-Node: I/O Functions586883
-Ref: table-system-return-values593337
-Ref: I/O Functions-Footnote-1595418
-Ref: I/O Functions-Footnote-2595566
-Node: Time Functions595686
-Ref: Time Functions-Footnote-1606357
-Ref: Time Functions-Footnote-2606425
-Ref: Time Functions-Footnote-3606583
-Ref: Time Functions-Footnote-4606694
-Ref: Time Functions-Footnote-5606806
-Ref: Time Functions-Footnote-6607033
-Node: Bitwise Functions607299
-Ref: table-bitwise-ops607893
-Ref: Bitwise Functions-Footnote-1613957
-Ref: Bitwise Functions-Footnote-2614130
-Node: Type Functions614321
-Node: I18N Functions617741
-Node: User-defined619392
-Node: Definition Syntax620204
-Ref: Definition Syntax-Footnote-1625898
-Node: Function Example625969
-Ref: Function Example-Footnote-1628891
-Node: Function Calling628913
-Node: Calling A Function629501
-Node: Variable Scope630459
-Node: Pass By Value/Reference633453
-Node: Function Caveats636097
-Ref: Function Caveats-Footnote-1638144
-Node: Return Statement638264
-Node: Dynamic Typing641243
-Node: Indirect Calls642173
-Node: Functions Summary653100
-Node: Library Functions655805
-Ref: Library Functions-Footnote-1659412
-Ref: Library Functions-Footnote-2659555
-Node: Library Names659726
-Ref: Library Names-Footnote-1663393
-Ref: Library Names-Footnote-2663616
-Node: General Functions663702
-Node: Strtonum Function664884
-Node: Assert Function667906
-Node: Round Function671232
-Node: Cliff Random Function672772
-Node: Ordinal Functions673788
-Ref: Ordinal Functions-Footnote-1676851
-Ref: Ordinal Functions-Footnote-2677103
-Node: Join Function677313
-Ref: Join Function-Footnote-1679083
-Node: Getlocaltime Function679283
-Node: Readfile Function683025
-Node: Shell Quoting685002
-Node: Isnumeric Function686430
-Node: Data File Management687818
-Node: Filetrans Function688450
-Node: Rewind Function692546
-Node: File Checking694455
-Ref: File Checking-Footnote-1695789
-Node: Empty Files695990
-Node: Ignoring Assigns697969
-Node: Getopt Function699519
-Ref: Getopt Function-Footnote-1714816
-Node: Passwd Functions715016
-Ref: Passwd Functions-Footnote-1723855
-Node: Group Functions723943
-Ref: Group Functions-Footnote-1731841
-Node: Walking Arrays732048
-Node: Library Functions Summary735056
-Node: Library Exercises736462
-Node: Sample Programs736927
-Node: Running Examples737697
-Node: Clones738425
-Node: Cut Program739649
-Node: Egrep Program749789
-Node: Id Program758790
-Node: Split Program768725
-Ref: Split Program-Footnote-1778618
-Node: Tee Program778791
-Node: Uniq Program781581
-Node: Wc Program789169
-Node: Bytes vs. Characters789556
-Node: Using extensions791104
-Node: wc program791858
-Node: Miscellaneous Programs796723
-Node: Dupword Program797936
-Node: Alarm Program799966
-Node: Translate Program804821
-Ref: Translate Program-Footnote-1809386
-Node: Labels Program809656
-Ref: Labels Program-Footnote-1813007
-Node: Word Sorting813091
-Node: History Sorting817163
-Node: Extract Program819388
-Node: Simple Sed827401
-Node: Igawk Program830475
-Ref: Igawk Program-Footnote-1844806
-Ref: Igawk Program-Footnote-2845008
-Ref: Igawk Program-Footnote-3845130
-Node: Anagram Program845245
-Node: Signature Program848307
-Node: Programs Summary849554
-Node: Programs Exercises850768
-Ref: Programs Exercises-Footnote-1854898
-Node: Advanced Features854984
-Node: Nondecimal Data857381
-Node: Boolean Typed Values858979
-Node: Array Sorting860860
-Node: Controlling Array Traversal861565
-Ref: Controlling Array Traversal-Footnote-1869933
-Node: Array Sorting Functions870051
-Ref: Array Sorting Functions-Footnote-1875962
-Node: Two-way I/O876158
-Ref: Two-way I/O-Footnote-1883884
-Ref: Two-way I/O-Footnote-2884071
-Node: TCP/IP Networking884153
-Node: Profiling887229
-Node: Persistent Memory896535
-Ref: Persistent Memory-Footnote-1902704
-Node: Extension Philosophy902831
-Node: Advanced Features Summary904318
-Node: Internationalization906490
-Node: I18N and L10N908164
-Node: Explaining gettext908851
-Ref: Explaining gettext-Footnote-1914743
-Ref: Explaining gettext-Footnote-2914928
-Node: Programmer i18n915093
-Ref: Programmer i18n-Footnote-1920042
-Node: Translator i18n920091
-Node: String Extraction920885
-Ref: String Extraction-Footnote-1922017
-Node: Printf Ordering922103
-Ref: Printf Ordering-Footnote-1924889
-Node: I18N Portability924953
-Ref: I18N Portability-Footnote-1927409
-Node: I18N Example927472
-Ref: I18N Example-Footnote-1930747
-Ref: I18N Example-Footnote-2930820
-Node: Gawk I18N930929
-Node: I18N Summary931551
-Node: Debugger932892
-Node: Debugging933892
-Node: Debugging Concepts934333
-Node: Debugging Terms936142
-Node: Awk Debugging938717
-Ref: Awk Debugging-Footnote-1939662
-Node: Sample Debugging Session939794
-Node: Debugger Invocation940328
-Node: Finding The Bug941714
-Node: List of Debugger Commands948188
-Node: Breakpoint Control949521
-Node: Debugger Execution Control953215
-Node: Viewing And Changing Data956577
-Node: Execution Stack960118
-Node: Debugger Info961755
-Node: Miscellaneous Debugger Commands965826
-Node: Readline Support970888
-Node: Limitations971784
-Node: Debugging Summary974338
-Node: Namespaces975617
-Node: Global Namespace976728
-Node: Qualified Names978126
-Node: Default Namespace979125
-Node: Changing The Namespace979866
-Node: Naming Rules981480
-Node: Internal Name Management983328
-Node: Namespace Example984370
-Node: Namespace And Features986932
-Node: Namespace Summary988367
-Node: Arbitrary Precision Arithmetic989844
-Node: Computer Arithmetic991331
-Ref: table-numeric-ranges995097
-Ref: table-floating-point-ranges995591
-Ref: Computer Arithmetic-Footnote-1996250
-Node: Math Definitions996307
-Ref: table-ieee-formats999283
-Node: MPFR features999851
-Node: MPFR On Parole1000296
-Ref: MPFR On Parole-Footnote-11001125
-Node: MPFR Intro1001280
-Node: FP Math Caution1002919
-Ref: FP Math Caution-Footnote-11003991
-Node: Inexactness of computations1004360
-Node: Inexact representation1005391
-Node: Comparing FP Values1006751
-Node: Errors accumulate1007992
-Node: Strange values1009448
-Ref: Strange values-Footnote-11012036
-Node: Getting Accuracy1012141
-Node: Try To Round1014851
-Node: Setting precision1015750
-Ref: table-predefined-precision-strings1016447
-Node: Setting the rounding mode1018278
-Ref: table-gawk-rounding-modes1018652
-Ref: Setting the rounding mode-Footnote-11022584
-Node: Arbitrary Precision Integers1022763
-Ref: Arbitrary Precision Integers-Footnote-11025938
-Node: Checking for MPFR1026087
-Node: POSIX Floating Point Problems1027561
-Ref: POSIX Floating Point Problems-Footnote-11032214
-Node: Floating point summary1032252
-Node: Dynamic Extensions1034442
-Node: Extension Intro1035995
-Node: Plugin License1037261
-Node: Extension Mechanism Outline1038058
-Ref: figure-load-extension1038497
-Ref: figure-register-new-function1040063
-Ref: figure-call-new-function1041156
-Node: Extension API Description1043219
-Node: Extension API Functions Introduction1044932
-Ref: table-api-std-headers1046768
-Node: General Data Types1051018
-Ref: General Data Types-Footnote-11059724
-Node: Memory Allocation Functions1060023
-Ref: Memory Allocation Functions-Footnote-11064524
-Node: Constructor Functions1064623
-Node: API Ownership of MPFR and GMP Values1068276
-Node: Registration Functions1069809
-Node: Extension Functions1070509
-Node: Exit Callback Functions1075831
-Node: Extension Version String1077081
-Node: Input Parsers1077744
-Node: Output Wrappers1090465
-Node: Two-way processors1094977
-Node: Printing Messages1097242
-Ref: Printing Messages-Footnote-11098413
-Node: Updating ERRNO1098566
-Node: Requesting Values1099305
-Ref: table-value-types-returned1100042
-Node: Accessing Parameters1101151
-Node: Symbol Table Access1102388
-Node: Symbol table by name1102900
-Ref: Symbol table by name-Footnote-11105925
-Node: Symbol table by cookie1106053
-Ref: Symbol table by cookie-Footnote-11110238
-Node: Cached values1110302
-Ref: Cached values-Footnote-11113838
-Node: Array Manipulation1113991
-Ref: Array Manipulation-Footnote-11115082
-Node: Array Data Types1115119
-Ref: Array Data Types-Footnote-11117777
-Node: Array Functions1117869
-Node: Flattening Arrays1122654
-Node: Creating Arrays1129630
-Node: Redirection API1134397
-Node: Extension API Variables1137230
-Node: Extension Versioning1137941
-Ref: gawk-api-version1138370
-Node: Extension GMP/MPFR Versioning1140102
-Node: Extension API Informational Variables1141730
-Node: Extension API Boilerplate1142803
-Node: Changes from API V11146777
-Node: Finding Extensions1148349
-Node: Extension Example1148908
-Node: Internal File Description1149706
-Node: Internal File Ops1153786
-Ref: Internal File Ops-Footnote-11165136
-Node: Using Internal File Ops1165276
-Ref: Using Internal File Ops-Footnote-11167659
-Node: Extension Samples1167933
-Node: Extension Sample File Functions1169462
-Node: Extension Sample Fnmatch1177111
-Node: Extension Sample Fork1178598
-Node: Extension Sample Inplace1179816
-Node: Extension Sample Ord1183442
-Node: Extension Sample Readdir1184278
-Ref: table-readdir-file-types1185167
-Node: Extension Sample Revout1186235
-Node: Extension Sample Rev2way1186824
-Node: Extension Sample Read write array1187564
-Node: Extension Sample Readfile1190729
-Node: Extension Sample Time1191824
-Node: Extension Sample API Tests1193576
-Node: gawkextlib1194068
-Node: Extension summary1196986
-Node: Extension Exercises1200688
-Node: Language History1201930
-Node: V7/SVR3.11203586
-Node: SVR41205738
-Node: POSIX1207172
-Node: BTL1208553
-Node: POSIX/GNU1209282
-Node: Feature History1215060
-Node: Common Extensions1232235
-Node: Ranges and Locales1233518
-Ref: Ranges and Locales-Footnote-11238134
-Ref: Ranges and Locales-Footnote-21238161
-Ref: Ranges and Locales-Footnote-31238396
-Node: Contributors1238619
-Node: History summary1244616
-Node: Installation1245996
-Node: Gawk Distribution1246940
-Node: Getting1247424
-Node: Extracting1248387
-Node: Distribution contents1250025
-Node: Unix Installation1257086
-Node: Quick Installation1257890
-Node: Compiling with MPFR1260310
-Node: Shell Startup Files1261000
-Node: Additional Configuration Options1262089
-Node: Configuration Philosophy1264404
-Node: Compiling from Git1266800
-Node: Building the Documentation1267355
-Node: Non-Unix Installation1268739
-Node: PC Installation1269199
-Node: PC Binary Installation1270037
-Node: PC Compiling1270910
-Node: PC Using1272027
-Node: Cygwin1275580
-Node: MSYS1276804
-Node: VMS Installation1277406
-Node: VMS Compilation1278125
-Ref: VMS Compilation-Footnote-11279354
-Node: VMS Dynamic Extensions1279412
-Node: VMS Installation Details1281097
-Node: VMS Running1283359
-Node: VMS GNV1287638
-Node: Bugs1288352
-Node: Bug definition1289264
-Node: Bug address1292200
-Node: Usenet1295388
-Node: Performance bugs1296577
-Node: Asking for help1299498
-Node: Maintainers1301465
-Node: Other Versions1302659
-Node: Installation summary1310929
-Node: Notes1312293
-Node: Compatibility Mode1313087
-Node: Additions1313869
-Node: Accessing The Source1314794
-Node: Adding Code1316231
-Node: New Ports1323046
-Node: Derived Files1327421
-Ref: Derived Files-Footnote-11333081
-Ref: Derived Files-Footnote-21333116
-Ref: Derived Files-Footnote-31333714
-Node: Future Extensions1333828
-Node: Implementation Limitations1334486
-Node: Extension Design1335696
-Node: Old Extension Problems1336840
-Ref: Old Extension Problems-Footnote-11338358
-Node: Extension New Mechanism Goals1338415
-Ref: Extension New Mechanism Goals-Footnote-11341779
-Node: Extension Other Design Decisions1341968
-Node: Extension Future Growth1344081
-Node: Notes summary1344687
-Node: Basic Concepts1345845
-Node: Basic High Level1346526
-Ref: figure-general-flow1346808
-Ref: figure-process-flow1347494
-Ref: Basic High Level-Footnote-11350796
-Node: Basic Data Typing1350981
-Node: Glossary1354309
-Node: Copying1386196
-Node: GNU Free Documentation License1423739
-Node: Index1448859
+Ref: Auto-set-Footnote-1497859
+Ref: Auto-set-Footnote-2498065
+Node: ARGC and ARGV498121
+Node: Pattern Action Summary502334
+Node: Arrays504764
+Node: Array Basics506093
+Node: Array Intro506937
+Ref: figure-array-elements508912
+Ref: Array Intro-Footnote-1511617
+Node: Reference to Elements511745
+Node: Assigning Elements514209
+Node: Array Example514700
+Node: Scanning an Array516654
+Node: Controlling Scanning519676
+Ref: Controlling Scanning-Footnote-1526132
+Node: Numeric Array Subscripts526448
+Node: Uninitialized Subscripts528632
+Node: Delete530251
+Ref: Delete-Footnote-1533003
+Node: Multidimensional533060
+Node: Multiscanning536155
+Node: Arrays of Arrays537746
+Node: Arrays Summary542514
+Node: Functions544607
+Node: Built-in545645
+Node: Calling Built-in546798
+Node: Boolean Functions548794
+Node: Numeric Functions549348
+Ref: Numeric Functions-Footnote-1553375
+Ref: Numeric Functions-Footnote-2554023
+Ref: Numeric Functions-Footnote-3554071
+Node: String Functions554343
+Ref: String Functions-Footnote-1579185
+Ref: String Functions-Footnote-2579313
+Ref: String Functions-Footnote-3579561
+Node: Gory Details579648
+Ref: table-sub-escapes581439
+Ref: table-sub-proposed582959
+Ref: table-posix-sub584323
+Ref: table-gensub-escapes585865
+Ref: Gory Details-Footnote-1586689
+Node: I/O Functions586843
+Ref: table-system-return-values593297
+Ref: I/O Functions-Footnote-1595378
+Ref: I/O Functions-Footnote-2595526
+Node: Time Functions595646
+Ref: Time Functions-Footnote-1606317
+Ref: Time Functions-Footnote-2606385
+Ref: Time Functions-Footnote-3606543
+Ref: Time Functions-Footnote-4606654
+Ref: Time Functions-Footnote-5606766
+Ref: Time Functions-Footnote-6606993
+Node: Bitwise Functions607259
+Ref: table-bitwise-ops607853
+Ref: Bitwise Functions-Footnote-1613917
+Ref: Bitwise Functions-Footnote-2614090
+Node: Type Functions614281
+Node: I18N Functions617701
+Node: User-defined619352
+Node: Definition Syntax620164
+Ref: Definition Syntax-Footnote-1625858
+Node: Function Example625929
+Ref: Function Example-Footnote-1628851
+Node: Function Calling628873
+Node: Calling A Function629461
+Node: Variable Scope630419
+Node: Pass By Value/Reference633413
+Node: Function Caveats636057
+Ref: Function Caveats-Footnote-1638104
+Node: Return Statement638224
+Node: Dynamic Typing641203
+Node: Indirect Calls642133
+Node: Functions Summary653060
+Node: Library Functions655765
+Ref: Library Functions-Footnote-1659372
+Ref: Library Functions-Footnote-2659515
+Node: Library Names659686
+Ref: Library Names-Footnote-1663353
+Ref: Library Names-Footnote-2663576
+Node: General Functions663662
+Node: Strtonum Function664844
+Node: Assert Function667866
+Node: Round Function671192
+Node: Cliff Random Function672732
+Node: Ordinal Functions673748
+Ref: Ordinal Functions-Footnote-1676811
+Ref: Ordinal Functions-Footnote-2677063
+Node: Join Function677273
+Ref: Join Function-Footnote-1679043
+Node: Getlocaltime Function679243
+Node: Readfile Function682985
+Node: Shell Quoting684962
+Node: Isnumeric Function686390
+Node: Data File Management687778
+Node: Filetrans Function688410
+Node: Rewind Function692506
+Node: File Checking694415
+Ref: File Checking-Footnote-1695749
+Node: Empty Files695950
+Node: Ignoring Assigns697929
+Node: Getopt Function699479
+Ref: Getopt Function-Footnote-1714776
+Node: Passwd Functions714976
+Ref: Passwd Functions-Footnote-1723815
+Node: Group Functions723903
+Ref: Group Functions-Footnote-1731801
+Node: Walking Arrays732008
+Node: Library Functions Summary735016
+Node: Library Exercises736422
+Node: Sample Programs736887
+Node: Running Examples737657
+Node: Clones738385
+Node: Cut Program739609
+Node: Egrep Program749749
+Node: Id Program758750
+Node: Split Program768685
+Ref: Split Program-Footnote-1778578
+Node: Tee Program778751
+Node: Uniq Program781541
+Node: Wc Program789129
+Node: Bytes vs. Characters789516
+Node: Using extensions791064
+Node: wc program791818
+Node: Miscellaneous Programs796683
+Node: Dupword Program797896
+Node: Alarm Program799926
+Node: Translate Program804781
+Ref: Translate Program-Footnote-1809346
+Node: Labels Program809616
+Ref: Labels Program-Footnote-1812967
+Node: Word Sorting813051
+Node: History Sorting817123
+Node: Extract Program819348
+Node: Simple Sed827361
+Node: Igawk Program830435
+Ref: Igawk Program-Footnote-1844766
+Ref: Igawk Program-Footnote-2844968
+Ref: Igawk Program-Footnote-3845090
+Node: Anagram Program845205
+Node: Signature Program848267
+Node: Programs Summary849514
+Node: Programs Exercises850728
+Ref: Programs Exercises-Footnote-1854858
+Node: Advanced Features854944
+Node: Nondecimal Data857341
+Node: Boolean Typed Values858939
+Node: Array Sorting860820
+Node: Controlling Array Traversal861525
+Ref: Controlling Array Traversal-Footnote-1869893
+Node: Array Sorting Functions870011
+Ref: Array Sorting Functions-Footnote-1875922
+Node: Two-way I/O876118
+Ref: Two-way I/O-Footnote-1883844
+Ref: Two-way I/O-Footnote-2884031
+Node: TCP/IP Networking884113
+Node: Profiling887189
+Node: Persistent Memory896495
+Ref: Persistent Memory-Footnote-1902664
+Node: Extension Philosophy902791
+Node: Advanced Features Summary904278
+Node: Internationalization906450
+Node: I18N and L10N908124
+Node: Explaining gettext908811
+Ref: Explaining gettext-Footnote-1914703
+Ref: Explaining gettext-Footnote-2914888
+Node: Programmer i18n915053
+Ref: Programmer i18n-Footnote-1920002
+Node: Translator i18n920051
+Node: String Extraction920845
+Ref: String Extraction-Footnote-1921977
+Node: Printf Ordering922063
+Ref: Printf Ordering-Footnote-1924849
+Node: I18N Portability924913
+Ref: I18N Portability-Footnote-1927369
+Node: I18N Example927432
+Ref: I18N Example-Footnote-1930707
+Ref: I18N Example-Footnote-2930780
+Node: Gawk I18N930889
+Node: I18N Summary931511
+Node: Debugger932852
+Node: Debugging933852
+Node: Debugging Concepts934293
+Node: Debugging Terms936102
+Node: Awk Debugging938677
+Ref: Awk Debugging-Footnote-1939622
+Node: Sample Debugging Session939754
+Node: Debugger Invocation940288
+Node: Finding The Bug941674
+Node: List of Debugger Commands948148
+Node: Breakpoint Control949481
+Node: Debugger Execution Control953175
+Node: Viewing And Changing Data956537
+Node: Execution Stack960078
+Node: Debugger Info961715
+Node: Miscellaneous Debugger Commands965786
+Node: Readline Support970848
+Node: Limitations971744
+Node: Debugging Summary974298
+Node: Namespaces975577
+Node: Global Namespace976688
+Node: Qualified Names978086
+Node: Default Namespace979085
+Node: Changing The Namespace979826
+Node: Naming Rules981440
+Node: Internal Name Management983288
+Node: Namespace Example984330
+Node: Namespace And Features986892
+Node: Namespace Summary988327
+Node: Arbitrary Precision Arithmetic989804
+Node: Computer Arithmetic991291
+Ref: table-numeric-ranges995057
+Ref: table-floating-point-ranges995551
+Ref: Computer Arithmetic-Footnote-1996210
+Node: Math Definitions996267
+Ref: table-ieee-formats999243
+Node: MPFR features999811
+Node: MPFR On Parole1000256
+Ref: MPFR On Parole-Footnote-11001085
+Node: MPFR Intro1001240
+Node: FP Math Caution1002879
+Ref: FP Math Caution-Footnote-11003951
+Node: Inexactness of computations1004320
+Node: Inexact representation1005351
+Node: Comparing FP Values1006711
+Node: Errors accumulate1007952
+Node: Strange values1009408
+Ref: Strange values-Footnote-11011996
+Node: Getting Accuracy1012101
+Node: Try To Round1014811
+Node: Setting precision1015710
+Ref: table-predefined-precision-strings1016407
+Node: Setting the rounding mode1018238
+Ref: table-gawk-rounding-modes1018612
+Ref: Setting the rounding mode-Footnote-11022544
+Node: Arbitrary Precision Integers1022723
+Ref: Arbitrary Precision Integers-Footnote-11025898
+Node: Checking for MPFR1026047
+Node: POSIX Floating Point Problems1027521
+Ref: POSIX Floating Point Problems-Footnote-11032174
+Node: Floating point summary1032212
+Node: Dynamic Extensions1034402
+Node: Extension Intro1035955
+Node: Plugin License1037221
+Node: Extension Mechanism Outline1038018
+Ref: figure-load-extension1038457
+Ref: figure-register-new-function1040023
+Ref: figure-call-new-function1041116
+Node: Extension API Description1043179
+Node: Extension API Functions Introduction1044892
+Ref: table-api-std-headers1046728
+Node: General Data Types1050978
+Ref: General Data Types-Footnote-11059684
+Node: Memory Allocation Functions1059983
+Ref: Memory Allocation Functions-Footnote-11064484
+Node: Constructor Functions1064583
+Node: API Ownership of MPFR and GMP Values1068236
+Node: Registration Functions1069769
+Node: Extension Functions1070469
+Node: Exit Callback Functions1075791
+Node: Extension Version String1077041
+Node: Input Parsers1077704
+Node: Output Wrappers1090425
+Node: Two-way processors1094937
+Node: Printing Messages1097202
+Ref: Printing Messages-Footnote-11098373
+Node: Updating ERRNO1098526
+Node: Requesting Values1099265
+Ref: table-value-types-returned1100002
+Node: Accessing Parameters1101111
+Node: Symbol Table Access1102348
+Node: Symbol table by name1102860
+Ref: Symbol table by name-Footnote-11105885
+Node: Symbol table by cookie1106013
+Ref: Symbol table by cookie-Footnote-11110198
+Node: Cached values1110262
+Ref: Cached values-Footnote-11113798
+Node: Array Manipulation1113951
+Ref: Array Manipulation-Footnote-11115042
+Node: Array Data Types1115079
+Ref: Array Data Types-Footnote-11117737
+Node: Array Functions1117829
+Node: Flattening Arrays1122614
+Node: Creating Arrays1129590
+Node: Redirection API1134357
+Node: Extension API Variables1137190
+Node: Extension Versioning1137901
+Ref: gawk-api-version1138330
+Node: Extension GMP/MPFR Versioning1140062
+Node: Extension API Informational Variables1141690
+Node: Extension API Boilerplate1142763
+Node: Changes from API V11146737
+Node: Finding Extensions1148309
+Node: Extension Example1148868
+Node: Internal File Description1149666
+Node: Internal File Ops1153746
+Ref: Internal File Ops-Footnote-11165096
+Node: Using Internal File Ops1165236
+Ref: Using Internal File Ops-Footnote-11167619
+Node: Extension Samples1167893
+Node: Extension Sample File Functions1169422
+Node: Extension Sample Fnmatch1177071
+Node: Extension Sample Fork1178558
+Node: Extension Sample Inplace1179776
+Node: Extension Sample Ord1183402
+Node: Extension Sample Readdir1184238
+Ref: table-readdir-file-types1185127
+Node: Extension Sample Revout1186195
+Node: Extension Sample Rev2way1186784
+Node: Extension Sample Read write array1187524
+Node: Extension Sample Readfile1190689
+Node: Extension Sample Time1191784
+Node: Extension Sample API Tests1193536
+Node: gawkextlib1194028
+Node: Extension summary1196946
+Node: Extension Exercises1200648
+Node: Language History1201890
+Node: V7/SVR3.11203546
+Node: SVR41205698
+Node: POSIX1207132
+Node: BTL1208513
+Node: POSIX/GNU1209242
+Node: Feature History1215020
+Node: Common Extensions1232195
+Node: Ranges and Locales1233478
+Ref: Ranges and Locales-Footnote-11238094
+Ref: Ranges and Locales-Footnote-21238121
+Ref: Ranges and Locales-Footnote-31238356
+Node: Contributors1238579
+Node: History summary1244576
+Node: Installation1245956
+Node: Gawk Distribution1246900
+Node: Getting1247384
+Node: Extracting1248347
+Node: Distribution contents1249985
+Node: Unix Installation1257046
+Node: Quick Installation1257850
+Node: Compiling with MPFR1260270
+Node: Shell Startup Files1260960
+Node: Additional Configuration Options1262049
+Node: Configuration Philosophy1264364
+Node: Compiling from Git1266760
+Node: Building the Documentation1267315
+Node: Non-Unix Installation1268699
+Node: PC Installation1269159
+Node: PC Binary Installation1269997
+Node: PC Compiling1270870
+Node: PC Using1271987
+Node: Cygwin1275540
+Node: MSYS1276764
+Node: VMS Installation1277366
+Node: VMS Compilation1278085
+Ref: VMS Compilation-Footnote-11279314
+Node: VMS Dynamic Extensions1279372
+Node: VMS Installation Details1281057
+Node: VMS Running1283319
+Node: VMS GNV1287598
+Node: Bugs1288312
+Node: Bug definition1289224
+Node: Bug address1292160
+Node: Usenet1295348
+Node: Performance bugs1296537
+Node: Asking for help1299458
+Node: Maintainers1301425
+Node: Other Versions1302526
+Node: Installation summary1310796
+Node: Notes1312160
+Node: Compatibility Mode1312954
+Node: Additions1313736
+Node: Accessing The Source1314661
+Node: Adding Code1316098
+Node: New Ports1322913
+Node: Derived Files1327288
+Ref: Derived Files-Footnote-11332948
+Ref: Derived Files-Footnote-21332983
+Ref: Derived Files-Footnote-31333581
+Node: Future Extensions1333695
+Node: Implementation Limitations1334353
+Node: Extension Design1335563
+Node: Old Extension Problems1336707
+Ref: Old Extension Problems-Footnote-11338225
+Node: Extension New Mechanism Goals1338282
+Ref: Extension New Mechanism Goals-Footnote-11341646
+Node: Extension Other Design Decisions1341835
+Node: Extension Future Growth1343948
+Node: Notes summary1344554
+Node: Basic Concepts1345712
+Node: Basic High Level1346393
+Ref: figure-general-flow1346675
+Ref: figure-process-flow1347361
+Ref: Basic High Level-Footnote-11350663
+Node: Basic Data Typing1350848
+Node: Glossary1354176
+Node: Copying1386063
+Node: GNU Free Documentation License1423606
+Node: Index1448726
 
 End Tag Table
 
diff --git a/doc/gawk.texi b/doc/gawk.texi
index acbda21e..9a276ad9 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -16426,9 +16426,6 @@ This element gives a string indicating the platform for 
which
 @itemx "mingw"
 Microsoft Windows, using either DJGPP or MinGW, respectively.
 
-@item "os2"
-OS/2.
-
 @item "os390"
 OS/390.
 
@@ -44010,10 +44007,6 @@ The people maintaining the various @command{gawk} 
ports are:
 
 @item MS-Windows with MinGW @tab Eli Zaretskii, @EMAIL{eliz@@gnu.org,eliz at 
gnu dot org}
 
-@c Leave this in the document on purpose.
-@c OS/2 is not mentioned anywhere else though.
-@item OS/2 @tab Andreas Buening, @EMAIL{andreas.buening@@nexgo.de,andreas dot 
buening at nexgo dot de}
-
 @item VMS @tab John Malmberg, @EMAIL{wb8tyw@@qsl.net,wb8tyw at qsl dot net}
 
 @item z/OS (OS/390) @tab Daniel Richard G.@: @EMAIL{skunk@@iSKUNK.ORG,skunk at 
iSKUNK dot ORG}
@@ -44322,7 +44315,6 @@ the file.
 @command{gawk} may be built on non-POSIX systems as well. The currently
 supported systems are MS-Windows using
 MSYS, MSYS2, DJGPP, MinGW, and Cygwin,
-@c OS/2,
 and both Vax/VMS and OpenVMS.
 Instructions for each system are included in this @value{APPENDIX}.
 
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index 9e39f158..19476ea8 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -15613,9 +15613,6 @@ This element gives a string indicating the platform for 
which
 @itemx "mingw"
 Microsoft Windows, using either DJGPP or MinGW, respectively.
 
-@item "os2"
-OS/2.
-
 @item "os390"
 OS/390.
 
@@ -42853,10 +42850,6 @@ The people maintaining the various @command{gawk} 
ports are:
 
 @item MS-Windows with MinGW @tab Eli Zaretskii, @EMAIL{eliz@@gnu.org,eliz at 
gnu dot org}
 
-@c Leave this in the document on purpose.
-@c OS/2 is not mentioned anywhere else though.
-@item OS/2 @tab Andreas Buening, @EMAIL{andreas.buening@@nexgo.de,andreas dot 
buening at nexgo dot de}
-
 @item VMS @tab John Malmberg, @EMAIL{wb8tyw@@qsl.net,wb8tyw at qsl dot net}
 
 @item z/OS (OS/390) @tab Daniel Richard G.@: @EMAIL{skunk@@iSKUNK.ORG,skunk at 
iSKUNK dot ORG}
@@ -43165,7 +43158,6 @@ the file.
 @command{gawk} may be built on non-POSIX systems as well. The currently
 supported systems are MS-Windows using
 MSYS, MSYS2, DJGPP, MinGW, and Cygwin,
-@c OS/2,
 and both Vax/VMS and OpenVMS.
 Instructions for each system are included in this @value{APPENDIX}.
 
diff --git a/gawkmisc.c b/gawkmisc.c
index 1f85b221..165e15c6 100644
--- a/gawkmisc.c
+++ b/gawkmisc.c
@@ -32,7 +32,7 @@
 
 /* some old compilers don't grok #elif. sigh */
 
-#if defined(__EMX__) || defined(__DJGPP__) || defined(__MINGW32__)
+#if defined(__DJGPP__) || defined(__MINGW32__)
 #include "pc/gawkmisc.pc"
 #else /* not __DJGPP__, not __MINGW32__ */
 #if defined(VMS)
diff --git a/io.c b/io.c
index 88fd1ea4..8fac000a 100644
--- a/io.c
+++ b/io.c
@@ -113,18 +113,6 @@
 #include "popen.h"
 #endif
 
-#ifdef __EMX__
-#include <process.h>
-
-#if !defined(_S_IFDIR) && defined(S_IFDIR)
-#define _S_IFDIR       S_IFDIR
-#endif
-
-#if !defined(_S_IRWXU) && defined(S_IRWXU)
-#define _S_IRWXU       S_IRWXU
-#endif
-#endif
-
 #ifndef ENFILE
 #define ENFILE EMFILE
 #endif
@@ -361,7 +349,7 @@ init_io()
 }
 
 
-#if defined(__DJGPP__) || defined(__MINGW32__) || defined(__EMX__) || 
defined(__CYGWIN__)
+#if defined(__DJGPP__) || defined(__MINGW32__) || defined(__CYGWIN__)
 /* binmode --- convert BINMODE to string for fopen */
 
 static const char *
@@ -1950,7 +1938,7 @@ strictopen:
                if (openfd == INVALID_HANDLE && errno == ENOENT && save_errno)
                        errno = save_errno;
        }
-#if defined(__EMX__) || defined(__MINGW32__)
+#if defined(__MINGW32__)
        if (openfd == INVALID_HANDLE && errno == EACCES) {
                /* On OS/2 and Windows directory access via open() is
                   not permitted.  */
@@ -2366,11 +2354,9 @@ use_pipes:
        int ptoc[2], ctop[2];
        int pid;
        int save_errno;
-#if defined(__EMX__) || defined(__MINGW32__)
+#if defined(__MINGW32__)
        int save_stdout, save_stdin;
-#ifdef __MINGW32__
        char *qcmd = NULL;
-#endif
 #endif
 
        if (pipe(ptoc) < 0)
@@ -2384,7 +2370,7 @@ use_pipes:
                return false;
        }
 
-#if defined(__EMX__) || defined(__MINGW32__)
+#if defined(__MINGW32__)
        save_stdin = dup(0);    /* duplicate stdin */
        save_stdout = dup(1);   /* duplicate stdout */
 
@@ -2427,13 +2413,9 @@ use_pipes:
        os_close_on_exec(save_stdout, str, "pipe", "from"); /* saved stdout of 
the parent process */
 
        /* stderr does NOT get dup'ed onto child's stdout */
-#ifdef __EMX__
-       pid = spawnl(P_NOWAIT, "/bin/sh", "sh", "-c", str, NULL);
-#else  /* __MINGW32__ */
        pid = spawnl(P_NOWAIT, getenv("ComSpec"), "cmd.exe", "/c",
                     qcmd = quote_cmd(str), NULL);
        efree(qcmd);
-#endif
 
        /* restore stdin and stdout */
        close(1);
@@ -2461,7 +2443,7 @@ use_pipes:
                return false;
        }
 
-#else /* NOT __EMX__, NOT __MINGW32__ */
+#else /* NOT __MINGW32__ */
        if ((pid = fork()) < 0) {
                save_errno = errno;
                close(ptoc[0]); close(ptoc[1]);
@@ -2489,7 +2471,7 @@ use_pipes:
                execl("/bin/sh", "sh", "-c", str, NULL);
                _exit(errno == ENOENT ? 127 : 126);
        }
-#endif /* NOT __EMX__, NOT __MINGW32__ */
+#endif /* NOT __MINGW32__ */
 
        /* parent */
        if ((BINMODE & BINMODE_INPUT) != 0)
@@ -2529,7 +2511,7 @@ use_pipes:
        else
                find_output_wrapper(& rp->output);
 
-#if !defined(__EMX__) && !defined(__MINGW32__)
+#if !defined(__MINGW32__)
        os_close_on_exec(ctop[0], str, "pipe", "from");
        os_close_on_exec(ptoc[1], str, "pipe", "from");
 
@@ -2656,11 +2638,9 @@ gawk_popen(const char *cmd, struct redirect *rp)
 {
        int p[2];
        int pid;
-#if defined(__EMX__) || defined(__MINGW32__)
+#if defined(__MINGW32__)
        int save_stdout;
-#ifdef __MINGW32__
        char *qcmd = NULL;
-#endif
 #endif
 
        /*
@@ -2674,7 +2654,7 @@ gawk_popen(const char *cmd, struct redirect *rp)
        if (pipe(p) < 0)
                fatal(_("cannot open pipe `%s': %s"), cmd, strerror(errno));
 
-#if defined(__EMX__) || defined(__MINGW32__)
+#if defined(__MINGW32__)
        rp->iop = NULL;
        save_stdout = dup(1); /* save stdout */
        if (save_stdout == -1) {
@@ -2697,13 +2677,9 @@ gawk_popen(const char *cmd, struct redirect *rp)
        os_close_on_exec(p[0], cmd, "pipe", "from"); /* pipe output: input of 
the parent process */
        os_close_on_exec(save_stdout, cmd, "pipe", "from"); /* saved stdout of 
the parent process */
 
-#ifdef __EMX__
-       pid = spawnl(P_NOWAIT, "/bin/sh", "sh", "-c", cmd, NULL);
-#else  /* __MINGW32__ */
        pid = spawnl(P_NOWAIT, getenv("ComSpec"), "cmd.exe", "/c",
                     qcmd = quote_cmd(cmd), NULL);
        efree(qcmd);
-#endif
 
        /* restore stdout */
        close(1);
@@ -2713,7 +2689,7 @@ gawk_popen(const char *cmd, struct redirect *rp)
        }
        close(save_stdout);
 
-#else /* NOT __EMX__, NOT __MINGW32__ */
+#else /* NOT __MINGW32__ */
        if ((pid = fork()) == 0) {
                if (close(1) == -1)
                        fatal(_("close of stdout in child failed: %s"),
@@ -2726,14 +2702,14 @@ gawk_popen(const char *cmd, struct redirect *rp)
                execl("/bin/sh", "sh", "-c", cmd, NULL);
                _exit(errno == ENOENT ? 127 : 126);
        }
-#endif /* NOT __EMX__, NOT __MINGW32__ */
+#endif /* NOT __MINGW32__ */
 
        if (pid == -1) {
                close(p[0]); close(p[1]);
                fatal(_("cannot create child process for `%s' (fork: %s)"), 
cmd, strerror(errno));
        }
        rp->pid = pid;
-#if !defined(__EMX__) && !defined(__MINGW32__)
+#if !defined(__MINGW32__)
        if (close(p[1]) == -1) {
                close(p[0]);
                fatal(_("close of pipe failed: %s"), strerror(errno));
@@ -3090,12 +3066,6 @@ find_source(const char *src, struct stat *stb, int 
*errcode, int is_extlib)
        *errcode = 0;
        if (src == NULL || *src == '\0')
                return NULL;
-#ifdef __EMX__
-       char os2_src[strlen(src) + 1];
-
-       if (is_extlib)
-               src = os2_fixdllname(os2_src, src, sizeof(os2_src));
-#endif /* __EMX__ */
        path = do_find_source(src, stb, errcode, pi);
 
        if (path == NULL && is_extlib) {
@@ -3411,7 +3381,7 @@ iop_alloc(int fd, const char *name, int errno_val)
 
        if (fd != INVALID_HANDLE)
                fstat(fd, & iop->public.sbuf);
-#if defined(__EMX__) || defined(__MINGW32__)
+#if defined(__MINGW32__)
        else if (errno_val == EISDIR) {
                iop->public.sbuf.st_mode = (_S_IFDIR | _S_IRWXU);
                iop->public.fd = FAKE_FD_VALUE;
diff --git a/main.c b/main.c
index f12ae68f..53126435 100644
--- a/main.c
+++ b/main.c
@@ -1864,8 +1864,6 @@ platform_name()
        return "mingw";
 #elif defined(__DJGPP__)
        return "djgpp";
-#elif defined(__EMX__)
-       return "os2";
 #elif defined(USE_EBCDIC)
        return "os390";
 #else
diff --git a/missing_d/ChangeLog b/missing_d/ChangeLog
index c8ae30ff..f645dd06 100644
--- a/missing_d/ChangeLog
+++ b/missing_d/ChangeLog
@@ -1,3 +1,7 @@
+2022-07-03         Arnold D. Robbins     <arnold@skeeve.com>
+
+       * snprintf.c: Remove stuff related to __EMX__.
+
 2021-10-27         Arnold D. Robbins     <arnold@skeeve.com>
 
        * 5.1.1: Release tar ball made.
diff --git a/missing_d/snprintf.c b/missing_d/snprintf.c
index c09c7473..dfe57c6b 100644
--- a/missing_d/snprintf.c
+++ b/missing_d/snprintf.c
@@ -87,9 +87,9 @@ safe_tmpfile (void)
                return NULL;
 
 #if ! defined(__DJGPP__) && ! defined(MSDOS) && ! defined(_MSC_VER) \
-       && ! defined(_WIN32) && ! defined(__CRTRSXNT__) && ! defined(__EMX__) \
+       && ! defined(_WIN32) && ! defined(__CRTRSXNT__) \
        && ! defined(__MINGW32__) && ! defined(__WIN32__)
-       /* If not MS or OS/2, unlink after opening. */
+       /* If not MS unlink after opening. */
        unlink (tmpfilename);
        free(tmpfilename);
        tmpfilename = NULL;
diff --git a/nonposix.h b/nonposix.h
index b975f75e..80d30da4 100644
--- a/nonposix.h
+++ b/nonposix.h
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2012, 2013, 2016, 2017, 2018, 2019
+ * Copyright (C) 2012, 2013, 2016, 2017, 2018, 2019, 2022
  * the Free Software Foundation, Inc.
  *
  * This file is part of GAWK, the GNU implementation of the
@@ -81,19 +81,3 @@ int getppid(void);
 wint_t btowc (int c);
 wint_t putwc (wchar_t wc, FILE *stream);
 #endif
-
-#ifdef __EMX__
-
-char *os2_fixdllname(char *dst, const char *src, size_t n);
-
-#ifdef __KLIBC__
-#include <dlfcn.h>
-
-#define dlopen(f, m) os2_dlopen(f, m)
-void *os2_dlopen(const char *file, int mode);
-
-#define dlsym(h, n) os2_dlsym(h, n)
-void *os2_dlsym(void *handle, const char *name);
-#endif /* __KLIBC__ */
-
-#endif /* __EMX__ */
diff --git a/pc/ChangeLog b/pc/ChangeLog
index e012e4b3..65100263 100644
--- a/pc/ChangeLog
+++ b/pc/ChangeLog
@@ -1,3 +1,8 @@
+2022-07-03         Arnold D. Robbins     <arnold@skeeve.com>
+
+       * Makefile, config.h, config.sed, gawkmisc.pc:
+       Remove stuff related to __EMX__.
+
 2022-05-24         Adam Van Scyoc        <avanscy@g.clemson.edu>
 
        * Makefile.tst: Regenerated.
diff --git a/pc/Makefile b/pc/Makefile
index e0ef7662..1eb1fc9e 100644
--- a/pc/Makefile
+++ b/pc/Makefile
@@ -1,7 +1,6 @@
 # Makefile for gawk (GNU awk)                                      Dec 2010
 #
 # - for GNU C (djgpp)         [32bit protected-mode executable for DOS]
-# - for GNU C (emx)           [32bit executable for OS/2 or DOS or Windows32]
 # - for GNU C (mingw32)              [Windows32 executable for Windows 
9x/NT/2K/XP/7]
 
 # Tested with GNU make on Windows, OS/2 and DOS.
@@ -26,9 +25,6 @@ default:
        @echo "  djgpp-readline . Like djgpp, but with readline        "
        @echo "   [You will need to have GNU readline library installed.] "
        @echo "  djgpp-readline-mpfr . djgpp with readline and MPFR    "
-       @echo "  emx ..... OS/2 32-bit exe [emx/gcc; uses emxlibc.dll] "
-       @echo "  emxnt ... NT exe [emx/gcc with RSXNT]                 "
-       @echo "  emxbnd .. OS/2 and DOS 32-bit exe [emx/gcc]           "
        @echo "  mingw32 . Windows32 exe [Mingw32 GNU C]               "
        @echo "  mingw32-readline . Like mingw32, but with readline    "
        @echo "   [You will need to have GNU readline library installed.] "
@@ -65,7 +61,7 @@ RSPFILE = gawk.rsp
 #LDRSP = $(GAWKOBJS)
 #LNKRSP = $(LDRSP)
 #
-# else use brain-dead approach (emxbnd will need 'tr').
+# else use brain-dead approach
 RSP = $(RSPFILE)
 LDRSP = @$(RSP)
 LNKRSP = $(LDRSP)
@@ -149,46 +145,6 @@ djgpp-readline-mpfr:
        LNK=LDJG LF=-s LF2="-lreadline -lmpfr -lgmp -lm" \
        BIND=BDJG
 
-#========================================================================
-#========================== EMX =========================================
-#========================================================================
-
-# Link command for OS/2 versions.
-LEMX = $(CC) $(LF) -o $@ $(GAWKOBJS) gawk.def -lbsd $(LF2)
-
-# Link and bind for DOS and OS/2 versions.
-# emx-09 needs '-p' emx option here or in EMXOPT environ var.
-# The following works with 0.9a or newer
-LEMXBND = $(CC) $(LF) -o gawk $(LDRSP) gawk.def -lbsd $(LF2)
-BEMX = emxbind -bs gawk  -p
-# The following works with 0.9c or newer
-#LEMXBND = $(CC) $(LF) -o a.out $(LDRSP) gawk.def -lbsd $(LF2)
-#BEMX = emxbind -bs -o $@ a.out -p
-#BEMX = emxbind -bs /emx/bin/emx.exe a.out $@ -p
-BEMXD = emxbind -b -o $@ a.out -p
-
-emx:
-       $(MAK) all \
-       "CC=gcc -Zomf" O=.obj "CF=-O -DOS2" \
-       LNK=LEMX "LF=-s -Zcrtdll -Zstack 512" RSP=
-
-emxnt:
-       $(MAK) all \
-       "CC=gcc -Zwin32 -Zcrtdll=rsxntcs" O=.o "CF=-O -DOS2" \
-       LNK=LEMX "LF=-s -Zstack 512" RSP=
-
-emxbnd:
-       $(MAK) all \
-       CC=gcc O=.o "CF=-O -DOS2 -DMSDOS" OBJ=popen.o \
-       LNK=LEMXBND \
-       BIND=BEMX "P=|tr \" \" \"\n\""
-
-emxbnd-debug:
-       $(MAK) all \
-       CC=gcc O=.o "CF=-g -DOS2 -DMSDOS" OBJ=popen.o \
-       LNK=LEMXBND \
-       BIND=BEMXD "P=|tr \" \" \"\n\""
-
 #========================================================================
 #========================== MINGW32 =====================================
 #========================================================================
diff --git a/pc/config.h b/pc/config.h
index 7896a73f..bec42cfa 100644
--- a/pc/config.h
+++ b/pc/config.h
@@ -298,9 +298,6 @@
 
 /* Define to 1 if you have the `strncasecmp' function. */
 #define HAVE_STRNCASECMP 1
-#ifdef __EMX__
-#define strncasecmp strnicmp
-#endif
 
 /* Define to 1 if you have the <stropts.h> header file. */
 #undef HAVE_STROPTS_H
@@ -711,8 +708,3 @@ extern bool is_valid_identifier(const char *name);
 #ifndef __DJGPP__
 #define HAVE_POPEN_H 1
 #endif
-
-#if defined(__EMX__)
-#define strcasecmp stricmp
-#define strncasecmp strnicmp
-#endif
diff --git a/pc/config.sed b/pc/config.sed
index e194fdcb..4547a842 100644
--- a/pc/config.sed
+++ b/pc/config.sed
@@ -183,9 +183,6 @@ s/^#undef HAVE_STRINGS_H *$/#define HAVE_STRINGS_H 1/
 s/^#undef HAVE_STRING_H *$/#define HAVE_STRING_H 1/
 /^#undef HAVE_STRNCASECMP *$/c\
 #define HAVE_STRNCASECMP 1\
-#ifdef __EMX__\
-#define strncasecmp strnicmp\
-#endif
 s/^#undef HAVE_STRTOD *$/#define HAVE_STRTOD 1/
 /^#undef HAVE_STRTOUL *$/c\
 #if defined(__MINGW32__) || defined(__DJGPP__)\
@@ -326,9 +323,4 @@ extern bool is_valid_identifier(const char *name);\
 \
 #ifndef __DJGPP__\
 #define HAVE_POPEN_H 1\
-#endif\
-\
-#if defined(__EMX__)\
-#define strcasecmp stricmp\
-#define strncasecmp strnicmp\
 #endif
diff --git a/pc/gawkmisc.pc b/pc/gawkmisc.pc
index 149ea62c..813c201a 100644
--- a/pc/gawkmisc.pc
+++ b/pc/gawkmisc.pc
@@ -33,14 +33,6 @@ const char *defpath = ".;c:\\lib\\awk;c:\\gnu\\lib\\awk";
 /* the Makefile should define DEFLIBPATH */
 const char *deflibpath = DEFLIBPATH;
 
-#ifdef __EMX__
-#include <io.h>
-
-static int _os2_is_abs_path(const char *dirname);
-static char* _os2_unixroot(const char *path);
-static const char* _os2_unixroot_path(const char *path);
-#endif
-
 #ifdef __MINGW32__
 #ifdef HAVE_SOCKETS
 #include <socket.h>
@@ -123,17 +115,6 @@ os_arg_fixup(argcp, argvp)
 int *argcp;
 char ***argvp;
 {
-#ifdef __EMX__
-# ifdef initialize_main
-       initialize_main(argcp, argvp);
-# else
-       _wildcard(argcp, argvp);
-       _response(argcp, argvp);
-# endif
-
-       setvbuf(stdout, NULL, _IOLBF, BUFSIZ);
-       defpath = (char*) _os2_unixroot_path(defpath);
-#endif /* __EMX__ */
        return;
 }
 
@@ -144,10 +125,6 @@ os_devopen(name, flag)
 const char *name;
 int flag;
 {
-#ifdef __EMX__
-       /* do not use open(name, flag) here !!! */
-       return -1;
-#else
        if (strcmp(name, "/dev/null") == 0)
                return open("NUL", flag);
        /* FIXME: */
@@ -155,7 +132,6 @@ int flag;
         *      return open("???", flag);
         */
        return -1;
-#endif
 }
 
 /* optimal_bufsize --- determine optimal buffer size */
@@ -190,10 +166,6 @@ int
 ispath(file)
 const char *file;
 {
-#ifdef __EMX__
-       return (strpbrk(file, "/\\") != NULL ||
-               (toupper(file[0]) >= 'A' && toupper(file[0]) <= 'Z' && file[1] 
== ':'));
-#else
        for (; *file; file++) {
                switch (*file) {
                case '/':
@@ -203,7 +175,6 @@ const char *file;
                }
        }
        return 0;
-#endif
 }
 
 /* isdirpunct --- return true if char is a directory separator */
@@ -222,7 +193,7 @@ os_close_on_exec(fd, name, what, dir)
 int fd;
 const char *name, *what, *dir;
 {
-#if (defined(__DJGPP__) && (__DJGPP__ > 2 || __DJGPP_MINOR__ >= 4)) || defined 
__EMX__
+#if (defined(__DJGPP__) && (__DJGPP__ > 2 || __DJGPP_MINOR__ >= 4))
        if (fd <= 2)    /* sanity */
                return;
 
@@ -283,16 +254,7 @@ os_isreadable(const awk_input_buf_t *iobuf, bool *isdir)
 int
 os_is_setuid()
 {
-#ifdef __EMX__
-       long uid, euid;
-
-       uid = getuid();
-       euid = geteuid();
-
-       return (euid == 0 && euid != uid);
-#else
        return 0;
-#endif
 }
 
 /* os_setbinmode --- set binary mode on file */
@@ -377,225 +339,6 @@ files_are_same(char *path, SRCFILE *src)
        return 0;
 }
 
-
-#ifdef __EMX__ 
-# ifndef PATH_SEPARATOR
-#  define PATH_SEPARATOR ';'
-# endif
-
-/* result is 0 if dirname is no absolute path, 1 otherwise */
-
-static int
-_os2_is_abs_path(const char *dirname)
-{
-  int result = 0;
-  if (dirname != NULL && dirname[0] != '\0') {
-    /* if dirname contains a valid drive letter like "c:" */
-    if (((dirname[0] >= 'A' && dirname[0] <= 'Z') || (dirname[0] >= 'a' && 
dirname[0] <= 'z'))
-        && dirname[1] == ':') dirname += 2; /* remove the drive letter */
-
-    if (dirname[0] == '/' || dirname[0] == '\\') result = 1; /* asbolute path 
*/
-  }
-
-  return result;
-}
-
-
-/* path is assumed to be a list of directories separated by PATH_SEPARATOR.
-   This function determines if the first directory of path is on the
-   drive specified by the environment variable UNIXROOT.
-   If it is the case, NULL is returned, otherwise a new directory name
-   is allocated using the drive letter from UNIXROOT and returned as result.
-   If the first directory is a relative path NULL is returned, too.
-   The new directory name is allocated by malloc().
-   Example (UNIXROOT is set to "e:"):
-     "c:/usr/share" -> "e:/usr/share"
-     "e:/usr/share" -> NULL             (already on the $UNIXROOT drive)
-     "/usr/share"   -> "e:/usr/share"
-     "."            -> NULL             (not an absolute path)
-     "usr/share"    -> NULL             (not an absolute path)
-     "c:usr/share"  -> NULL             (not an absolute path)
-     "c:/usr/share;d:/etc" -> "e:/usr/share" (only the first directory in path 
is used) */
-
-static char*
-_os2_unixroot(const char *path)
-{
-  static const char *unixroot = NULL;
-  static int unixroot_init = 0; 
-  char *result = NULL; 
-
-  if (unixroot_init == 0) {
-    /* get $UNIXROOT only one time */
-    unixroot = getenv("UNIXROOT");
-
-    /* check whether unixroot is valid (must be "x:") */
-    if (unixroot != NULL) {
-      int drive = toupper(unixroot[0]);
-      if (drive < 'A' || drive > 'Z' || unixroot[1] != ':' || unixroot[2] != 
'\0')
-        unixroot = NULL; /* unixroot not valid */
-    }
-
-    unixroot_init = 1; /* initialized */
-  }
-
-  /* note: if unixroot != NULL then it contains a valid drive letter */
-  if (unixroot != NULL && _os2_is_abs_path(path)) {
-    /* dirname is an absolute path and unixroot is a drive letter, "c:" for 
example */
-    size_t old_path_len = strlen(path);
-
-    /* end points to the first ';' in path or to NULL */
-    const char *end = strchr(path, PATH_SEPARATOR);
-
-    /* dir_len is the length of the first directory in path */
-    size_t dir_len = (end) ? end - path : old_path_len;
-
-    if (toupper(unixroot[0]) != toupper(path[0]) || path[1] != ':') {
-      /* the first directory of path does not start with the string $UNIXROOT 
*/
-      if (path[1] == ':') {
-        /* if there is a drive letter remove it */
-        dir_len -= 2;
-        path += 2;
-      } 
-
-      result = malloc(dir_len + 3);
-      if (result) { /* do nothing if we are out of memory */
-        result[0] = unixroot[0];
-        result[1] = unixroot[1];
-        memcpy(result + 2, path, dir_len);
-        result[dir_len + 2] = '\0';
-      }
-    }
-  }
-  return result;
-}
-
-/* path is assumed to be a list of directories separated by PATH_SEPARATOR.
-   Every directory is processed. _os2_unixroot() is used to find out whether
-   these directories are on the drive specified by the environment variable
-   UNIXROOT. If this is not the case the same directory on the UNIXROOT drive
-   is added to the end of path. If path is a valid path this function returns 
a valid path, too.
-   Example ($UNIXROOT is set to "e:"):
-   ".;c:/usr/local;d:/usr/local;d:/etc;e:/etc"
-   -> 
".;c:/usr/local;d:/usr/local;d:/etc;e:/etc;e:/usr/local;e:/usr/local;e:/etc" */
-
-static const char*
-_os2_unixroot_path(const char *path)
-{
-  char *result = NULL;
-  const char *p = path;
-  unsigned dir_count = 1;
-
-  if (path == NULL || path[0] == '\0') return NULL; /* empty path */
-
-  /* save number of path components in dir_count */
-  while(*p) {
-    if (*p++ == PATH_SEPARATOR && *p != '\0' && *p != PATH_SEPARATOR)
-      dir_count += 1;
-  }
-
-  {
-    const char *list[dir_count]; /* list of char pointers */
-    size_t dir_len[dir_count]; /* the according directory length */
-    size_t old_path_len = strlen(path); /* the old path length */
-    size_t total_len;
-    unsigned i = 0;
-
-    if (path[old_path_len - 1] == PATH_SEPARATOR) /* last character is ';' */
-      old_path_len--;
-
-    list[0] = p = path; /* first directory */
-
-    while(*p) {
-    if (*p++ == PATH_SEPARATOR && *p != '\0' && *p != PATH_SEPARATOR)
-      list[++i] = p;
-    }
-    /* now list[i] contains the ith directory of path (no 0-terminated 
strings!!!) */
-
-    /* determine the total length for the new path */
-    total_len = old_path_len;
-
-    for(i = 0; i < dir_count; i++) {
-      list[i] = _os2_unixroot(list[i]);
-      if (list[i] != NULL) {
-        dir_len[i] = strlen(list[i]);
-        total_len += dir_len[i] + 1; /* one character for ';' or '\0' */
-      }
-      else dir_len[i] = 0;
-    }
-    /* now list[] contains the according directories on the UNIXROOT drive or 
NULL
-       total_len contains the total length for the new path */
-    result = malloc(total_len + 1);
-
-    if (result) {
-      /* copy the old path and the new directories into the new path */
-      char *q = result;
-      memcpy(q, path, old_path_len);
-      q += old_path_len;
-
-      for(i = 0; i < dir_count; i++) {
-        if (dir_len[i] != 0) {
-          *q++ = PATH_SEPARATOR;
-          memcpy(q, list[i], dir_len[i]);
-          q += dir_len[i];
-        }
-      }
-
-      *q = '\0'; /* terminating '\0' */
-    }
-
-    for(i = 0; i < dir_count; i++) free((void*) list[i]);
-  }
-
-  return (result) ? (const char*) result : path;
-}
-
-/* limit a length of DLL name up to 8 characters. If dst is not enough for
-   a fixed dll name, it is truncated. */
-char *os2_fixdllname(char *dst, const char *src, size_t n)
-{
-    char drive[_MAX_DRIVE];
-    char dir[_MAX_DIR];
-    char name[_MAX_FNAME];
-    char ext[_MAX_EXT];
-    char dll_file[_MAX_PATH];
-
-    _splitpath(src, drive, dir, name, ext);
-    if (strlen(name) > 8)
-        name[8] = '\0';
-    _makepath(dll_file, drive, dir, name, ext);
-
-    strncpy(dst, dll_file, n);
-    dst[n - 1] = '\0';
-
-    return dst;
-}
-
-#ifdef __KLIBC__
-
-/* replacement of dlopen(). This limits a length of a base name up to 8
-   characters. */
-void *os2_dlopen(const char *file, int mode)
-{
-    char dll_file[strlen(file) + 1];
-
-    return (dlopen)(os2_fixdllname(dll_file, file, sizeof(dll_file)), mode);
-}
-
-/* replacement of dlsym(). This prepends '_' to name. */
-void *os2_dlsym(void *handle, const char *name)
-{
-    char sym[strlen(name) + 1 + 1]; /* 1 for '_', 1 for NUL */
-
-    sym[0] = '_';
-    strcpy(sym + 1, name);
-
-    return (dlsym)(handle, sym);
-}
-
-#endif /* __KLIBC__ */
-
-#endif /* __EMX__ */
-
 #ifdef __MINGW32__
 
 extern void *xmalloc (size_t);
@@ -1091,12 +834,12 @@ os_maybe_set_errno (void)
 
 #endif /* __MINGW32__ */
 
-#if defined(__DJGPP__) || defined(__MINGW32__) || defined(__EMX__)
+#if defined(__DJGPP__) || defined(__MINGW32__)
 
 void
 init_sockets(void)
 {
-#if defined(HAVE_SOCKETS) && !defined(__EMX__)
+#if defined(HAVE_SOCKETS)
   WSADATA  winsockData;
   int errcode;
 

-----------------------------------------------------------------------


hooks/post-receive
-- 
gawk



reply via email to

[Prev in Thread] Current Thread [Next in Thread]