System configuration:

	Generic ISA bus 386 machine, XENIX/386 2.3.3, compiled with
	gcc, version 1.40 + gas 1.38.1 using SCO Xenix/386 2.3.0
	updated libraries.

	Please note the bugs section (below), and follow the
        directions carefully.  Icon 8.10 needs coaxing to compile under
        Xenix/386.  Once built, it works very cleanly.  Note
	that my configuration is an old one; more recent systems
	might compile more easily.

Latest Icon version:

	Version 8.10 compiler+interpreter (without X support)

Installer:

	Richard L. Goerwitz
	5410 S. Ridgewood Ct., 2E
	Chicago, IL  60615
	U.S.A.
	goer@midway.uchicago.edu

Missing features:

	X extensions (I don't have X installed; didn't try them out)

Known bugs:

	The src/runtime/fsys.r assumes select support (which does not
	exist for SYSVr3 or earlier, unless special modifications are
	made to the kernel to support the necessary system call).  The
	best workaround is to install select support, if you don't
	have it, and include the necessary header file (check with SCO
	on which SLS you should install).  To do this, find the
	runtime/ rsys.r file, and change the line that reads

	    #ifndef NoSelect

	so that it reads

	    #ifndef NoSelect
	    #ifdef XENIX_386
	    #include <sys/select.h>
	    #endif  /* XENIX_386 */

	The problem with this approach is that the old Xenix
	sys/param.h file (included by the sys/select.h file) causes
	Icon's rtt to barf.  If you don't mind removing the offending
	lines from your system header file (bad idea), then fine.  If
	you want to install the X features, that is what you probably
	have to do.  Otherwise, try using nap().  First check to see
	if you *have* nap (e.g. check the manual, or do an "ar
	/lib/386/Slibx.a | egrep nap").  If you do, then try rewriting
	the select code in src/runtime/fsys.r to read:

	    #ifndef NoSelect
	    #ifdef XENIX_386
	    #ifndef XWindows
	        extern word nap();
		(novalue )nap(n);
	    #else
	    #include <sys/select>
	    #endif /* ! Xwindows */
	    #endif /* Xenix_386 */
	    struct timeval t;
	    t.tv_sec = n / 1000;
	    t.tv_usec = (n % 1000) * 1000;
	    select(1, FD_NULL, FD_NULL, FD_NULL, &t);
	    #endif /* ! NoSelect */

	This should probably work.

Comments:

	Change the CComp line in define.h to point to the location
	of your C compiler.  Mine happens to be in /usr/local/bin/gcc.

	If desired, change src/runtime/fsys.r to read

	    #ifdef XENIX_386
	    #ifdef __GNUC__
	    #undef BadCode
	    #else
	    #define register
	    #endif
	    #endif

	instead of

	    #ifdef XENIX_386
	    #define register
	    #endif

	The register optimizations were disabled at one point in order
	to work around a bug in some version of SCO/Microsoft's
	compiler.  It's not needed for the latest C compiler (2.3.1),
	and it's certainly not needed if you use GNU cc.

Keyboard Functions:

	By default, the keyboard functions are enabled.  See the
	defines in config/unix/i386_xenix_gcc/defines.h.

	    #define KeyboardFncs
	    #define HaveTermio

Date:

	April 28, 1993
