The NIX I/O utilities implement an X Toolkit-style I/O event handler.
See the prolog in NIX_UTIL.C for a more detailed description of the
utilities.


Contents
--------

The following files are enclosed:

    nix_util.c - The NIX functions.
    nix_util.h - NIX definitions and function prototypes.
    tv_util.c  - "timeval" manipulation functions.
    tv_util.h  - TV_UTIL definitions and function prototypes.
    vperror.c  - Error-reporting function.
    test.c     - A simple test program.

    Makefile.sun
               - Build the NIX library and the test program (SunOS).

    tcl/       - Contains example source code from a NIX-based, Tcl shell.

    vms/       - Contains VMS-specific code and MMS file.

    vx/        - Contains VxWorks-specific code and Makefile.

Simply type "make -f Makefile.sun" and the (Sun) Makefile will build a
library, "libnix.a", and the test program, "test".

The test program (taken from the example in NIX_UTIL.C's prolog) simply
uses the NIX utilities to echo standard input to standard output.  Run
"test" and type in a number of lines; each line will be echoed to your
screen.


History
-------

The NIX acronym originally stood for "Network I/O Handler" (the X reminds
me of network connections criss-crossing!), but I later realized it could
also stand for "Not Including X".  The NIX functions used to be called
NIX_ADD_INPUT(), etc. and had a slightly different calling interface.  I
subsequently added application contexts and rewrote the package so that
the entire interface was virtually identical to that of the X Toolkit
(except for the "Nx" prefix and the REMOVE functions).


Ports
-----

The NIX utilities were written under VMS and were used as the basis for
two Tcl shells and 3 or 4 non-Tcl network servers.  I've just now moved
on to a new, VxWorks- and SunOS-based project, so the NIX utilities and
the NIX-based applications have been built and tested (more or less)
under SunOS (4.1.3, I think) and VxWorks 5.1 (using GCC with the "-ansi
-pedantic -Wall" options).

Some time ago, I briefly had access to an HP/UX machine, on which I tried
compiling the NIX source file using HP's ANSI C compiler.  The attempt was
unsuccessful because of some problem relating to the system "time.h" header
file, but I didn't have time to track the problem down any further.  If
memory serves me correctly, I did successfully build and test the NIX
utilities and one of the network servers using the non-ANSI compiler.


If you find any problems or have any suggestions for improvement, please
let me know,  I also would like to hear of any changes needed to port the
NIX functions to other operating systems or other flavors of UNIX.


                                Alex Measday
                                Integral Systems, Inc.
                                Code 521 - Microelectronic Systems Branch
                                NASA Goddard Space Flight Center

                                alexm@vlsi.gsfc.nasa.gov
                                alexm@vlsi19.gsfc.nasa.gov
                                Charles.Measday@gsfc.nasa.gov


P.S.  C++ programmers should take a look at Douglas Schmidt's REACTOR
classes, a well-thought-out, C++ implementation of the event handling
paradigm.  I was not aware of his work before, but a USENET posting of
his on COMP.OBJECT in early January 1994 gave a bibliography and an
FTP site.  From his posting:

    You might want to check out the file C++_wrappers_doc.tar.Z in the
    ftp/gnu directory on ics.uci.edu (128.195.1.1).  This tar file
    contains a collection of papers (in postscript form) that describe
    various aspects of an Object-Oriented framework for developing
    client/server applications.

His papers - the ones I've read so far at least! - are very interesting
and his designs are instructive to an armchair C++ programmer like myself.
