BUILDING HYLAFAX FROM SOURCE CCODE
This chapter contains the information needed to configure and build HylaFAX from the source distribution. The following sections are available here:

Before You Start

Before you build the software you may need to obtain certain other software distributions. All the software packages described here are available by public ftp from a variety of Internet hosts; consult the archie resource location service to find copies close to your system.

gcc

You need a contemporary C++ compiler to build this system. gcc version 2.6.3 is the current recommended version to use. Versions of gcc prior to 2.6.1 will not work. When installing gcc beware of the make install step. On some systems and/or with some versions of gcc, the fax software may not compile properly if the include files are wrong (function prototypes that would normally cause casts to be done may be missing).

: Click here to use Archie to locate gcc 2.6.3

C++ runtime libraries

cfront-based compilers include everything that you need in the libC.a runtime library. When using GNU gcc you may also need the libg++ distribution. libg++2.6.2 is the current recommended version to use. Older versions may also work though it is recommended that you use the version appropriate for the compiler.

: Click here to use Archie to locate libg++ 2.6.2

ghostscript

If you are not on a Silicon Graphics machine, then you will need the Ghostscript PostScript interpreter software to build a PostScript imaging engine for use by the facsimile server. Version 2.6.1 and later are known to work. If you use 2.6.1 however, be certain to apply patches 1-4. If you do not apply the patches you will encounter a bug in the clipping code that is tickled by the default cover page distributed with this software. Also beware that if you use a version prior to 3.12 (inclusive) that there is a tiffg32d driver that writes incorrect 2D-encoded facsimile data; either do not configure this driver for use or disable its use by editing the ps2fax.gs.sh script that invokes Ghostscript to image PostScript for outbound facsimile jobs.

: Click here to use Archie to locate Ghostscript 2.6.1

gmake

The make files are extensive and work untouched with the system make under many systems. If your make does not understand them, then you should be able to use the GNU make (gmake) instead. If you decide to use gmake, be sure to get version 3.63 or newer; otherwise you may encounter problems (especially with the rules that automatically generate source code dependency information).

: Click here to use Archie to locate make

gawk

Several of the shell scripts included in this software make use of awk. These uses are reasonably simple, but will not work if your awk is old enough that it does not support functions or the -v command line option for setting variable values before the BEGIN action is executed. If you encounter problems using the standard awk on your system, try the GNU awk: gawk.
: Click here to use Archie to locate gawk

sed

Many of the shell scripts included in this software make use of sed. Certain systems are known to have versions of sed that do not handle the shell scripts. If you encounter problems, the latest GNU sed should be substituted.

/bin/test

The software configuration shell script (configure) and the modem configuration shell script (faxaddmodem) make heavy use of the test program. On some systems the /bin/test program does not support options such as -c (test if a file is a character special device). Source for a contemporary, public domain, test program is available by public ftp from ftp.uu.net.

ps2fax binary for IRIX systems

The Display PostScript-based imager for Silicon Graphics systems is included in the binary distribution images provided on sgi.com. If you choose to work from the source code on an IRIX system you may want a copy of the ps2fax program: it is available separately on sgi.com in the source distribution area. Note that this is a binary executable for IRIX 4.x systems and requires that the IRIX dps_eoe package be installed for proper use.


The Build Procedure

To build the software you need to first run the configure shell script that is located in the top level of the source directory. This script probes the target system for necessary tools and functions and constructs a build environment in which the software may be compiled. Once configuration is done, you simply run make to build the software and then make install to do the installation; for example: In general, the software is designed such that the following should be ``make-able'' in each directory: Note that after running "make clobber" or "make distclean" the configure script must be run again to create the Makefiles and other make-related files.


Build Trees

There are two schemes for configuring and building the software. If you intend to build the software for only one target system, you can configure the software so that it is built in the same directories as the source code.

Otherwise, you can configure a build tree that is parallel to the source tree hierarchy but which contains only configured files and files created during the build procedure.

This second scheme is useful for: Beware that if you choose to use the second scheme for configuring the software you must not use an absolute pathname when you run configure (i.e. a pathname that begins with ``/'') and the make that you use to build the software must correctly support the VPATH facility.

NOTE: HPUX 9.05: The standard make incorrectly processes VPATH; either use gmake or configure builds in the source tree.

NOTE: Solaris 2.3: The standard make does VPATH processing incorrectly for files passed to the make dependency generator script (the last file in the list is not converted to a pathname relative to the source directory); this causes lots of messages that can be ignored.


Configuration Files

The configuration process is critical to the proper compilation, installation, and operation of the software. The configure script runs a series of tests to decide whether or not the target system supports required functionality and, if it does not, whether it can emulate or workaround the missing functions. This procedure is fairly complicated and, due to the nonstandard nature of most UNIX systems, prone to error. The first time that you configure the software for use you should check the output from the configure script and look for anything that does not make sense for your system. A sample configure run is shown below together with an explanation of some of the work that is done.

A second function of the configure script is to set the default configuration parameters for the software. Many of these parameters can be changed after configuration through files that programs read at runtime, but some parameters cannot be changed without rerunning the configure script. Of particular note are the directories where the software is to be installed. By default the software is installed in the /usr/local hierarchy. To change this behaviour the appropriate parameters can be specified either:

configure reads any site-wide configure file first, and then any target-specific configuration file. This permits target-specific definitions to override site-wide definitions.

Site-wide configuration files are named config.site and are automatically searched for first in any directory specified on the command line to configure (using the -site option), or if that fails, in the directory in in which the configure script is located.

Target-specific configuration files are named config.local and are looked for first in the top-level configuration directory, or, if that fails, in the directory in which the configure script is located.

Configuration files are just shell scripts that define shell variables that control the configuration process. For example, the following file might be used on a BSDI system to configure the software for installation in the /usr/contrib area and to make use of the Adobe Font Metric files that are already distributed as part of the BSDI 1.1 distribution:

#
# Parameters suitable for BSDI 1.1
#
DIR_AFM="/usr/contrib/lib/flexfax/afm"	# reuse existing files
DIR_BIN="/usr/contrib/bin"		# directory for client apps
DIR_SBIN="/usr/contrib/bin"		# directory for system apps
DIR_LIBEXEC="/usr/contrib/bin"		# directory for libraries&hidden apps
DIR_LIBDATA="/usr/contrib/lib/hylafax"	# directory for client data
DIR_MAN="/usr/contrib/man"		# directory for manual pages
DIR_SPOOL="/var/spool/hylafax"		# directory for spooling area
DIR_HTML="/usr/contrib/html/hylafax"	# directory for HTML documentation
DIR_CGI="/usr/contrib/html/cgi-bin"	# directory for CGI scripts

For a complete list of the possible configuration parameters, look at the sample config.site file provided in the distribution or check the section below.


Configuring Optional Packages

HylaFAX comes with several packages that are installed only as needed, or only if specifically configured at the time the configure script is run. Packages can be configured in a config.site or config.local file, or by using a -with-<PACKAGE> option when invoking configure; e.g. configure -with-AFM.
AFM Package
The AFM package contains sample Adobe Font Metric files that came from the public dvips distribution. AFM files are required by the textfmt(1) and faxmail(1) programs for proper formatting of ASCII text. The AFM files used should reflect the characteristics of the fonts that are used for imaging. However, if the PostScript RIP used to image text does not come with AFM files for its native fonts, this package can be installed with only minimal degradation in the quality of the imaged text. By default this package is configured for installation only if font metric files do not appear to be present (auto).

DSO Package
The DSO package controls whether or not to configure the software to build Dynamic Shared Objects for the TIFF library, for utility routines used by both client and server applications, and for a nucleus of common code used by server applications. Use of DSOs can significantly reduce the disk space needed for the HylaFAX software. If DSOs are not used then the code is statically linked into each application that uses it. By default this package is configured only if the system appears to suport DSOs in a way that fits into the normal build scheme (auto). If DSO support is explicitly enabled and there is no support for using DSOs in the expected way then DSOs are not used.

GETTY Package
The GETTY package controls whether or not to configure BSD- or System V-style getty support for handling incoming data connections. By default this package is configured according to the target environment.

HTML Package
The HTML package contains this HTML documentation about HylaFAX. By default this package is not configured for installation. Some HTML documentation can be viewed directly from the source directory; otherwise all the documentation can be viewed from the main WWW site at http://www.vix.com/hylafax/. You may want to configure the installation of the HTML materials if there is poor connectivity to the main WWW site. See the next section for more information about configuring the HTML materials.

PS Package
The PS package selects whether to configure use of Ghostscript (gs) or Display PostScript (dps) for imaging PostScript on the server. By default the DPS support is selected only for IRIX systems; otherwise Ghostscript is used. IRIX users may choose to use this control to select Ghostscript for use on their SGI systems.

SGI2FAX Package
The SGI2FAX package controls whether or not to configure the sgi2fax program that converts SGI RGB images to TIFF/F (for direct transmission as facsimile). By default this package is configured for installation only if the target system appears to have support for the SGI Image library that sgi2fax uses to read RGB images (auto). If this package is not installed then SGI RGB images must be converted to a form suitable for transmission using some other mechanism.

SYSVINIT Package
The SYSVINIT package controls whether or not to configure the System V-style support for automatically starting the HylaFAX queuer process from init(1). By default this support is configured for installation only if the target system appears to use a System V-style init (auto); i.e. the /etc/rc0.d and /etc/rc2.d directories exist.


Configuring the HTML Documentation

HylaFAX comes with extensive documentation written in HTML, the language used to author many documents found on the World Wide Web (WWW). These materials can be viewed at the main WWW site http://www.vix.com/hylafax/ or they can be installed locally for better access. The HTML documentation can be configured for installation from the source distribution by specifying -with-HTML as an option to the configure script, or by setting HTML=yes in a config.site or config.local file.

When the HTML package is configured for installation there are four other parameters that should be setup according to local needs:

DIR_HTML
The directory where the HTML materials should be installed.
DIR_CGI
The directory where the supporting CGI scripts should be installed.
CGIPATH
The virtual pathname to use in the HTML documents to invoke CGI scripts installed in DIR_CGI.
HTMLPATH
The virtual pathname to use in the HTML documents to reference materials installed in the DIR_HTML directory.
These parameters default to suitable values for the NCSA HTTP server: If you are not running an HTTP server it may be better to configure the materials for local access; for example: Note however that if the HTML materials are setup for local access then references ``up the tree'', will not work and CGI scripts will not be functional. For most of the materials provided with this distribution this will usually be acceptable.

There are a few other issues to consider when installing the CGI scripts:

[Note that the CGI scripts are evolving; comments are welcome.]


Upgrading From FlexFAX

If you were previously using FlexFAX beware that several things have changed in incompatible ways. The following is a list of potential things you should be aware of when configuring the software: [Ed: this list is expected to grow with experience.]

There are other issues with upgrading from FlexFAX; they are discussed in the chapter that describes setting up the server.


A Sample Configuration Session

This section shows a sample configuration session and describes the work done. The session is shown indented in a fixed width font with user-supplied input in a bold font. Comments are shown in a normal or italic font. This session was collected on a 486 machine running BSDI 1.1. A build tree separate from the source tree is used here. In fact, in this case the distribution is accessed from a read-only NFS-mounted filesystem. Note that configure announces the distribution version and the deduced target configuration (i386-unknown-bsdi1.1 here). configure checked the normal shell search path for potential ANSI C compilers. The compiler is selected according to it properly compiling a small ANSI C test program. A specific compiler may be requested by setting the CC environment variable to the appropriate pathname, by supplying the parameter on the command line, e.g. -with-CC=gcc, or by setting CC in a configuration file.

Note that an ANSI C compiler is required to build the software. If a C compiler requires options to enable ANSI C compilation, they can be specified with the ENVOPTS parameter.

Once a compiler is selected configure does several checks to see:

By default the software automatically creates and maintains make dependency rules for all source code. A C++ compiler is selected using a scheme similar to the one used to find a C compiler. Likewise there is a CXX parameter that can be set to explicitly select a C++ compiler. The make selected must support include files. configure can deduce several different syntaxes for specifying include files. Note that a large number of configuration parameters can be changed by editing the top-level defs file that is included by each Makefile in the distribution. A MAKE parameter can be used to control which make to use. All the shell scripts included with this software are written using the Bourne Shell syntax. The standard shell on many systems is incapable of processing these scripts. configure prefers bash to ksh to sh. Various system-specific libraries that may or may not be needed are checked for. If your system requires a library that is not automatically included it can be specified by setting the MACHDEPLIBS parameter.

Creating port.h. The port.h file is included by all the C and C++ code in the system. It includes definitions for functions and type definitions that are missing from system include files, #defines to enable or disable system-specific functionality, and other odds and ends.

This file can take a long time to create so configure generates the file only when it is needed, either because the file does not exist or because a different target or compiler is to be used. Note that running "make distclean" in the top-level directory of the build tree will remove the port.h file (along with all the other files generated by configure).

Selecting emulated library functions. Certain functions used by the software are not present on all systems and can be emulated using other system functionality. configure checks for the presence of such functions and if they are missing, will configure emulation code from the port directory to use instead. Building HylaFAX on unsupported systems may require adding to the code to the port directory.

If a routine must be emulated and configure does not automatically check for it, the routine name can be specified using the PORTFUNCS parameter. To add emulation support for a new function foo, create a file port/foo.c that contains the emulation code and then set PORTFUNCS=foo in a configuration file or modify the configure script to automatically check for the missing function. HylaFAX uses the TIFF library extensively. The only thing that should need to be configured for this software is whether or not to use memory-mapped files for reading TIFF images. If the DSO package is enabled (DSO=auto or DSO=yes), then configure will verify the system and compiler are capable of constructing SVR4-style DSO's in the expected way. Note that while a system may support DSO's the compiler may not be capable of generating the required position-independent code and/or the compiler may not pass the needed options through to the loader.

Selecting utility programs. configure locates various system utility programs that are used by the software. Note that absolute pathnames are selected because several scripts and programs excute with super-user privileges.

Several things to note: The awk program selected for use must support functions using the System V-style syntax (i.e. using func and not the POSIX-style function). configure will not select an awk program that does not support the syntax used by the awk scripts included in the distribution. Mail delivery is done using sendmail; a different mailer cannot be substituted without changing certain scripts because a number of sendmail-specific command line options are used.

Selecting default configuration parameters. The remainder of the work done by configure involves setting up configuration parameters that are mainly used during the operation of the fax software. These parameters can be set during configuration or, in most cases, they can be set through runtime configuration files.

At this point you can interactively modify any of the displayed parameters. Hitting a carriage return or typing yes will accept the current parameters. Typing one of the number displayed along the left hand side causes configure to prompt for a new value of the specified parameter. Typing anything else causes configure to prompt for a new value for each parameter. In general hitting carriage return will accept the current value and typing anything that is unacceptable will cause a help message to be displayed. A description of each of the configuration parameters is given below.

Once acceptable parameters are setup configure will generate all the files that depend on these parameters. Note that certain files may or may not be created based on the configuration of optional packages and/or the functions supported by target system.


Configuration Parameters

This section gives a brief description of the less obvious configuration parameters. Consult the distributed config.site for a complete list of parameters. The list here is sorted alphabetically.

NOTE: The default setting for most configurations parameters is usually correct. Be especially careful about enabling or overriding parameters that control workarounds for system bugs; certain problems can cause server processes to go into infinite loops!

Note that HylaFAX is composed of client and server applications. Client applications are programs that normal users invoke to send facsimile, query the status of facsimile servers, etc. Server applications are programs that reside only on the machine where the fax modems are present.

AROPTS
The options passed to ar when creating an archive. Note that configure will automatically check to see if ar supports an s to create a symbol table instead of using ranlib.
CONFIG_OPENFIFO
The mode to use when opening a FIFO special file in a server process. Normally this should be O_RDONLY, but on some systems this must be O_RDWR to avoid kernel bugs that cause select system calls to return prematurely after a process closes the ``client side'' of a FIFO. By default this parameter is set according to the target system.
CONFIG_FIFOBUG
Whether or not to enable a workaround for a kernel bug that causes select system calls to return prematurely after a process closes the ``client side'' of a FIFO special file. Setting this parameter to yes causes server processes to close and reopen FIFO special files after each received message. Note that aside from the additional overhead incurred in the server processes, this problem can also cause client programs to be temporarily unable to reach a server process. To minimize this possibility, the client code tries to reach a server process up to 5 times before giving up; this can introduce noticeable delays in applications such as faxstat.
CONFIG_SELECTBUG
On some systems where the FIFO select bug (see above) exists the select system call may return bits set in the read, write, and exception masks even if they were not requested; this in turn can cause the Dispatcher code to abort. Setting this parameter to yes causes the Dispatcher to ignore any bits set in bit vectors returned by select if the bits were not requested. Enabling this workaround adds additional overhead to each server process.
CONFIG_WINSZHACK
On some systems the TIOCWINSZ ioctl is defined, but its use requires the inclusion of two non-standard files. Setting this paramter to yes causes the inclusion of these files.
CONFIG_ABORTBUG
On some systems the logic used by the sever processes to poll for messages on a FIFO special file while actively doing work can cause the process to go into an infinite loop. Setting this parameter to yes causes the server processes to not poll for messages. Enabling this workaround means that the faxgetty process will not recognize messages to abort a facsimile while it is being received.
CONFIG_NOSTDINDUP
On some systems, if the standard output is redirected to be the same as the standard input, then the stty program will emit a warning message. This is necessary for some older systems because it is the only way to force stty to change parameters on a tty device that is not the controlling tty. Setting this parameter to yes causes the ondelay program to not set stdout to stdin. Enabling this workaround can break the faxaddmodem program; it should be used only on systems where stty supports the -f option to select a tty device other than the controlling tty.
CXXFILE
The options to the C++ compiler required to get the compiler to process a file with a .c++ suffix as C++ source code. configure automatically sets this parameter to "-x c++" for gcc and to "-+" for the IBM xlC compiler under AIX.
DEFVRES
The default vertical resolution in lines/inch that clients should use for submitted facsimile. Choices are 98 and 196.
DIR_AFM
The directory where client applications should find Adobe Font Metric (AFM) files. These files are used by various HylaFAX programs when converting text to PostScript.
DIR_BIN
The directory where client applications should be installed; by default this is /usr/local/bin.
DIR_CGI
The directory where CGI scripts used by the HTML-based HylaFAX documentation should be installed; by default this is /var/httpd/cgi-bin (usually appropriate for the NCSA HTTP server).
DIR_HTML
The directory where HTML-based HylaFAX documentation should be installed; by default this is /var/httpd/htdocs/hylafax (usually appropriate for the NCSA HTTP server).
DIR_LIBDATA
The directory to install data files that are required by client applications; by default this is /usr/local/lib/fax.
DIR_LIBEXEC
The directory to install executable programs that are invoked by other applications and not from the command line (e.g. the textfmt program invoked by sendfax to convert text to PostScript when submitting a fax job); by default this is the same as DIR_SBIN.
DIR_LOCKS
The directory in which to create UUCP lock files.
DIR_MAN
The top-most directory of the manual area where client/server manual pages should be installed.
DIR_BIN
The directory where server-specific applications should be installed; by default this is DIR_SPOOL/bin.
DIR_SBIN
The directory where system applications such as servers should be installed; by default this is /usr/local/sbin.
DIR_SPOOL
The directory in which the HylaFAX server spooling area should be setup; by default this is /var/spool/fax.
DSODELAY
When DSO's are built, the option to specify to CC and/or CXX to note that a library should be loaded only as needed. This option is used to delay the loading of the TIFF library for applications that may use it infrequently.
DSOOPTS
When DSO's are built, the options to specify to CC and/or CXX to create a DSO.
DSOSUF
When DSO's are built, the filename suffix for a DSO. If this is set to "a" then statically linked archives are used.
ENVOPTS
Options to pass to CC and CXX to force ANSI C compilation.
FAXGID
The group ID to use for the fax user; by default this is selected according to the target system.
FAXUID
The user ID to use for the fax user; by default uucp.
FILLORDER
The order of bits in a byte on the server machine; either LSB2MSB or MSB2LSB. This is normally selected according to the target system.
GCOPTS
Special options to pass the C compiler. If this parameter is set, then configure may append other options to this list.
GCXXOPTS
Special options to pass the C++ compiler. If this parameter is set, then configure may append other options to this list.
INSTALL
The pathname of the install program to use. Note that this program must emulate the command line interface used by the IRIX install program.
LIBMALLOC
Whether or not to use -lmalloc in building the software. By default (auto) configure will probe the system to see if the library is present; if it is then the software will be configured to use it when building. Other possible values are: yes and no to enable and disable use, respectively. On systems that support DSOs it may be important to disable the use of -lmalloc to avoid conflicts with the normal memory alocation routines present in the standard C library.
LIBPORT
The pathname of the library that holds code to emulate missing system functionality. Normally this parameter is set by configure based on whether or not emulation code is required for the target.
LIBSUN
Whether or not to use -lsun in building the software. By default (auto) configure will probe the system to see if the library is present; if it is then the software will be configured to use it when building. Other possible values are: yes and no to enable and disable use, respectively.
LLDOPTS
Extra command line options passed to CC and CXX when linking an executable. This option is usually set only when DSO support is enabled (to force the executable to search for the HylaFAX-specific DSO's in non-standard locations in the filesystem.)
LOCKS
A specification of the default type of UUCP lock files to use. This parameter is usually one of ascii, binary, -ascii or +ascii; consult the config(4F) manual page for a description of the UUCPLockType configuration parameter.
MACHDEPLIBS
Target-dependent libraries that should be used when linking applications. Note that if this parameter is specified configure will append to the list of libraries.
MAKECXXOVERRIDE
A special parameter used by configure when constructing Makefiles. This parameter is required when compiling the software with the SunPRO C++ compiler; it works around limitations in the SunPRO compilation environment.
MAKEDEPINCLUDE
The keyword used to specify the inclusion of a make dependency file when constructing Makefiles. This parameter is set to MAKEINCLUDE if make dependendcies are to be constructed by the software; otherwise it is set to # so that no make dependency rules are included (and used).
MAKEDSOINCLUDE
The keyword used to specify inclusion of a file containing rules for building DSO's. This parameter is set to MAKEINCLUDE if DSO's are to be built; otherwise it is set to # so that nothing is included.
MAKEINCLUDE, MAKELQUOTE, MAKERQUOTE
The syntax used to specify an include file for make; e.g. @MAKEINCLUDE@ @MAKELQUOTE@file@MAKERQUOTE@. These parameters are normally deduced by configure depending on the capabilities of the make program to use.
MANSCHEME
The scheme to use when preparing and installing manual pages. Schemes are constructed according to: where: <organization> is either bsd for BSD-style section organization (e.g. file formats in section 5) or sysv for System V-style organization (e.g. file formats in section 4). <formatting> is either nroff to force installation of formatted materials (using nroff) or source to get the nroff source installed. <compression> is either the name of a program to compress the manual pages (gipz, compress, pack) or cat for uncompressed data. <suffix> is either the file suffix to convert installed pages to (e.g. 0.gz for gzip-compressed pages under BSD) or strip to force the normal ".4f" suffix to be converted to ".4" (or ".5" if using the BSD organization). If no -<suffix> is specified then filenames are not converted when they are installed.
PAGESIZE
The default page size that client applications will use for submitted facsimile. Page sizes are specified by name and checked against the pagesizes database installed in the DIR_LIBDATA directory. See also pagesizes(4F).
PATH_DPSRIP
The absolute pathname of the Display PostScript-based imager program.
PATH_GETTY
The absolute pathname of suitable getty program to exec to handle an inbound data call. Note that this parameter must be set correctly before the software is built; there is no mechanism for doing this through a runtime configuration file.
PATH_GSRIP
The absolute pathname of the Ghostscript-based imager program. Beware that this must be a version of the gs program that includes the tiffg3 device driver.
PATH_SENDMAIL
The absolute pathname of the sendmail program on the server machine; sendmail is used by HylaFAX to post mail messages for a variety of reasons.
PORTFUNCS
A list of non-standard functions that should be emulated. Normally this list is constructed by configure based on checks it does. If this parameter is set, configure will append to the specified list.
PROTOTYPES
Options that should be passed to the C compiler to force it to check for function prototype mismatches. This parameter should not be needed because ANSI C compilers should do this automatically.
SETMAKE
If make does not automatically set $MAKE to the name of the make program to invoke for subdirectories, then configure will create an explicit definition. If this parameter is set, then it will be used instead.
SHDLIBC
A special library to use in place of the standard -lc implicitly provided by CC and/or CXX.
SIGHANDLERTYPES
The type signatures to use when checking for the correct type for a signal handler. If this parameter is set then configure will check these types before it checks a builtin list of well-known values.
SYSGID
The group ID to use for installing non-setgid programs; by default this is chosen according to the target system.
SYSUID
The group ID to use for installing non-setuid programs; by default bin is used.

How to setup a HylaFAX server and prepare it for use.
HylaFAX table of contents.


Sam Leffler / sam@engr.sgi.com. Last updated $Date: 1995/04/09 00:28:11 $.