Path: utzoo!utgpu!cs.utexas.edu!tut.cis.ohio-state.edu!ucbvax!ucsd!rutgers!aramis.rutgers.edu!paul.rutgers.edu!chain From: chain@paul.rutgers.edu (Chain Lee) Newsgroups: alt.sources Subject: X11R4 patch for SCO XENIX (part01) Message-ID: Date: 7 Jan 91 02:21:10 GMT Organization: Rutgers Univ., New Brunswick, N.J. Lines: 959 *** X11R4.ORIG/mit/lib/Xt/Create.c Sat Jan 5 22:07:35 1991 --- X11R4/mit/lib/Xt/Create.c Sat Nov 3 18:07:00 1990 *************** *** 29,35 **** #include "StringDefs.h" #include "Shell.h" #include "ShellP.h" - #include static String XtNxtCreateWidget = "xtCreateWidget"; static String XtNxtCreatePopupShell = "xtCreatePopupShell"; --- 29,34 ---- *** X11R4.ORIG/mit/lib/Xt/Imakefile Sat Jan 5 22:06:54 1991 --- X11R4/mit/lib/Xt/Imakefile Sat Nov 3 18:05:55 1990 *************** *** 1,13 **** #include #ifdef BandAidCompiler ! #include BandAidCompiler #endif #if UnalignedReferencesAllowed ALIGN_DEFINES = -DUNALIGNED #endif ! DEFINES = AllocateLocalDefines $(ALIGN_DEFINES) APP_DEFINES = -DXAPPLOADDIR=\"$(XAPPLOADDIR)$(PATHSEP)\" DB_DEFINES = -DERRORDB=\"$(LIBDIR)/XtErrorDB\" SRCH_DEFINES = \ --- 1,14 ---- #include #ifdef BandAidCompiler ! #include "BandAidCompiler" #endif #if UnalignedReferencesAllowed ALIGN_DEFINES = -DUNALIGNED #endif ! LOCAL_DEFINES = -DXFILESEARCHPATHDEFAULT=\"$(LIBDIR)/%L/%T/%N%S\:$(LIBDIR)/%l/%T/%N%S\:$(LIBDIR)/%T/%N%S\" ! DEFINES = AllocateLocalDefines $(ALIGN_DEFINES) $(LOCAL_DEFINES) APP_DEFINES = -DXAPPLOADDIR=\"$(XAPPLOADDIR)$(PATHSEP)\" DB_DEFINES = -DERRORDB=\"$(LIBDIR)/XtErrorDB\" SRCH_DEFINES = \ *** X11R4.ORIG/mit/lib/X/sysV/Berklib.c Sat Jan 5 22:08:30 1991 --- X11R4/mit/lib/X/sysV/Berklib.c Thu Nov 15 22:51:16 1990 *************** *** 1,13 **** - /* $XConsortium: Berklib.c,v 1.4 90/08/27 15:29:40 swick Exp $ */ - /* * This file is used by System V based systems. */ #include /* ! * These are routines found in BSD and not found in many SysV's. They are * included so that some clients can compile. */ --- 1,60 ---- /* * This file is used by System V based systems. */ #include + #include + #include + #include + #ifndef __TIMEVAL__ + struct timeval { + long tv_sec; + long tv_usec; + }; + struct timezone { + int tz_minuteswest; + int tz_dsttime; + }; + #endif /* __TIMEVAL__ */ + + extern int errno; + + int + gettimeofday(tp, tzp) + struct timeval *tp; + struct timezone *tzp; + { + long clock; + static struct timeb Now, *now; + static struct tm LocalNow, *localnow; + + now = &Now; + localnow = &LocalNow; + + clock = time(0); + localnow = localtime(&clock); + + ftime(now); + + if (tzp != (struct timezone *)0) { + tzp->tz_minuteswest = (int)(localnow->tm_tzadj/60); + tzp->tz_dsttime = (int)(localnow->tm_isdst); + } + + tp->tv_sec = (long)(now->time); + tp->tv_usec = (long)(1000 * (long)(now->millitm)); + + return(0); + } + + getdtablesize() + { + return 60; + } + /* ! * These are routines fould in BDS and not found in HP-UX. They are * included so that some clients can compile. */ *************** *** 73,92 **** return i; } - char * - index (s, c) - char *s, c; - { - return ((char *) strchr (s, c)); - } - - char * - rindex (s, c) - char *s, c; - { - return ((char *) strrchr (s, c)); - } - /* * insque, remque - insert/remove element from a queue * --- 120,125 ---- *************** *** 158,164 **** } ! #ifdef hpux /** on hpux 5.n, readv/writev don't work on sockets; ** Even on 6.0, we'll keep these routines around for doing --- 191,197 ---- } ! #if defined(hpux) || defined(xenix) /** on hpux 5.n, readv/writev don't work on sockets; ** Even on 6.0, we'll keep these routines around for doing *************** *** 166,172 **** --- 199,219 ---- ** demo to blow up.) **/ + #if defined(xenix) + #define swWritev writev + #define swReadv readv + + #ifndef __IOVEC__ + struct iovec { + caddr_t iov_base; + int iov_len; + }; + #endif + #endif + + #if defined(hpux) #include + #endif #define min(x,y) ((x)>(y)?(y):(x)) *************** *** 198,224 **** return(0); } ! #endif /* hpux */ ! ! /* ! * gettimeofday emulation ! * Caution -- emulation is incomplete ! * - has only second, not microsecond, resolution. ! * - does not return timezone info. ! */ ! ! #if defined(USG) && !defined(CRAY) ! int gettimeofday (tvp, tzp) ! struct timeval *tvp; ! struct timezone *tzp; ! { ! time (&tvp->tv_sec); ! tvp->tv_usec = 0L; ! ! if (tzp) { ! fprintf( stderr, ! "Warning: gettimeofday() emulation does not return timezone\n" ! ); ! } ! } ! #endif --- 245,248 ---- return(0); } ! #endif /* hpux || xenix */ *** X11R4.ORIG/mit/lib/X/XConnDis.c Sat Dec 9 19:10:33 1989 --- X11R4/mit/lib/X/XConnDis.c Wed Jan 2 17:06:01 1991 *************** *** 267,273 **** familyp, saddrlenp, saddrp)) < 0) goto bad; - /* * Set the connection non-blocking since we use select() to block; also * set close-on-exec so that programs that fork() doesn't get confused. --- 267,272 ---- *************** *** 346,351 **** --- 345,351 ---- */ #include + #ifndef BSD_SOCKET_EMULATION #ifndef hpux #ifdef apollo /* nest if(n)defs because makedepend is broken */ #ifndef NO_TCP_H *************** *** 355,360 **** --- 355,361 ---- #include #endif /* apollo */ #endif + #endif void bcopy(); #endif /* NEED_BSDISH */ *************** *** 415,421 **** --- 416,425 ---- #ifdef UNIXCONN + + #ifndef BSD_SOCKET_EMULATION #include + #endif #ifndef X_UNIX_PATH #ifdef hpux *************** *** 446,453 **** #endif unaddr.sun_family = AF_UNIX; sprintf (unaddr.sun_path, "%s%d", X_UNIX_PATH, idisplay); ! addr = (struct sockaddr *) &unaddr; addrlen = strlen(unaddr.sun_path) + sizeof(unaddr.sun_family); --- 450,460 ---- #endif unaddr.sun_family = AF_UNIX; + #ifdef BSD_SOCKET_EMULATION + sprintf (unaddr.sun_path, "%d", idisplay); + #else sprintf (unaddr.sun_path, "%s%d", X_UNIX_PATH, idisplay); ! #endif addr = (struct sockaddr *) &unaddr; addrlen = strlen(unaddr.sun_path) + sizeof(unaddr.sun_family); *************** *** 465,471 **** if ((fd = socket ((int) addr->sa_family, SOCK_STREAM, 0)) < 0) { return -1; } ! if (connect (fd, addr, addrlen) < 0) { int olderrno = errno; (void) close (fd); --- 472,486 ---- if ((fd = socket ((int) addr->sa_family, SOCK_STREAM, 0)) < 0) { return -1; } ! #ifdef BSD_SOCKET_EMULATION ! { ! struct sockaddr_un myaddr; ! myaddr.sun_family = AF_UNIX; ! sprintf(myaddr.sun_path, "%d", getpid()); ! if (bind(fd, &myaddr, strlen(myaddr.sun_path) + 2) < 0) ! return -1; ! } ! #endif if (connect (fd, addr, addrlen) < 0) { int olderrno = errno; (void) close (fd); *************** *** 688,704 **** --- 703,730 ---- { unsigned long r_mask[MSKCNT]; unsigned long w_mask[MSKCNT]; + unsigned long e_mask[MSKCNT]; int nfound; CLEARBITS(r_mask); CLEARBITS(w_mask); + CLEARBITS(e_mask); while (1) { BITSET(r_mask, dpy->fd); BITSET(w_mask, dpy->fd); + BITSET(e_mask, dpy->fd); do { + #if BSD_SOCKET_EMULATION + nfound = select (dpy->fd + 1, r_mask, w_mask, e_mask, NULL); + if (ANYSET(e_mask)) { + nfound = -1; + errno = EPIPE; + } + #else nfound = select (dpy->fd + 1, r_mask, w_mask, NULL, NULL); + #endif if (nfound < 0 && errno != EINTR) _XIOError(dpy); } while (nfound <= 0); *************** *** 746,757 **** Display *dpy; { unsigned long r_mask[MSKCNT]; int result; ! CLEARBITS(r_mask); do { BITSET(r_mask, dpy->fd); result = select(dpy->fd + 1, r_mask, NULL, NULL, NULL); if (result == -1 && errno != EINTR) _XIOError(dpy); } while (result <= 0); } --- 772,797 ---- Display *dpy; { unsigned long r_mask[MSKCNT]; + unsigned long w_mask[MSKCNT]; + unsigned long e_mask[MSKCNT]; int result; ! CLEARBITS(r_mask); + CLEARBITS(w_mask); + CLEARBITS(e_mask); do { BITSET(r_mask, dpy->fd); + BITSET(e_mask, dpy->fd); + #if BSD_SOCKET_EMULATION + result = select(dpy->fd + 1, r_mask, w_mask, e_mask, NULL); + if (ANYSET(e_mask)) { + result = -1; + errno = EPIPE; + } + #else result = select(dpy->fd + 1, r_mask, NULL, NULL, NULL); + + #endif if (result == -1 && errno != EINTR) _XIOError(dpy); } while (result <= 0); } *************** *** 795,797 **** --- 835,847 ---- (void) WritevToServer (dpy->fd, iovarray, niov); return; } + + #ifdef xenix + static void + dummy() + { + extern void ___lib_x_globals(); + + ___lib_x_globals(); + } + #endif *** X11R4.ORIG/mit/lib/X/globals.c Fri Jun 16 16:57:02 1989 --- X11R4/mit/lib/X/globals.c Sat Oct 6 16:12:20 1990 *************** *** 172,177 **** --- 172,182 ---- * to be inserted BELOW this point!!! */ + #ifdef xenix + /* Force brain-damaged MS linker to load this module */ + void ___lib_x_globals(){} + #endif + /* * NOTE: any additional external definition NEED * to be inserted ABOVE this point!!! *** X11R4.ORIG/mit/lib/X/Xlibos.h Mon Dec 18 13:45:55 1989 --- X11R4/mit/lib/X/Xlibos.h Wed Jan 2 14:22:42 1991 *************** *** 17,23 **** --- 17,37 ---- #define MSKCNT ((MAXSOCKS + 31) / 32) #else + + #ifdef xenix /* + * Xenix sysV 2.3.2 + */ + #include + #include + + #define BytesReadable(fd, ptr) ioctl ((fd), FIONREAD, (ptr)) + #define MALLOC_0_RETURNS_NULL + #define MSKCNT ((NOFILE + 31) / 32) /* size of bit array */ + + #else + + /* * 4.2BSD-based systems */ #include *************** *** 28,33 **** --- 42,49 ---- #define BytesReadable(fd, ptr) ioctl ((fd), FIONREAD, (ptr)) #define MSKCNT ((NOFILE + 31) / 32) /* size of bit array */ + + #endif /* xenix */ #endif /* att else bsdish */ *************** *** 196,205 **** --- 212,224 ---- */ #ifdef USG #if !defined(CRAY) && !defined(umips) + #ifndef __IOVEC__ + #define __IOVEC__ struct iovec { caddr_t iov_base; int iov_len; }; + #endif #ifndef __TIMEVAL__ #define __TIMEVAL__ struct timeval { /* BSD has in */ *************** *** 239,244 **** --- 258,268 ---- #ifndef USG + #define _XReadV readv + #define _XWriteV writev + #endif + + #ifdef xenix #define _XReadV readv #define _XWriteV writev #endif *** X11R4.ORIG/mit/lib/X/Berklib.c Sun Jan 6 00:53:26 1991 --- X11R4/mit/lib/X/Berklib.c Thu Nov 15 22:51:16 1990 *************** *** 0 **** --- 1,248 ---- + /* + * This file is used by System V based systems. + */ + + #include + #include + #include + #include + + #ifndef __TIMEVAL__ + struct timeval { + long tv_sec; + long tv_usec; + }; + struct timezone { + int tz_minuteswest; + int tz_dsttime; + }; + #endif /* __TIMEVAL__ */ + + extern int errno; + + int + gettimeofday(tp, tzp) + struct timeval *tp; + struct timezone *tzp; + { + long clock; + static struct timeb Now, *now; + static struct tm LocalNow, *localnow; + + now = &Now; + localnow = &LocalNow; + + clock = time(0); + localnow = localtime(&clock); + + ftime(now); + + if (tzp != (struct timezone *)0) { + tzp->tz_minuteswest = (int)(localnow->tm_tzadj/60); + tzp->tz_dsttime = (int)(localnow->tm_isdst); + } + + tp->tv_sec = (long)(now->time); + tp->tv_usec = (long)(1000 * (long)(now->millitm)); + + return(0); + } + + getdtablesize() + { + return 60; + } + + /* + * These are routines fould in BDS and not found in HP-UX. They are + * included so that some clients can compile. + */ + + bcopy (b1, b2, length) + register unsigned char *b1, *b2; + register length; + { + if (b1 < b2) { + b2 += length; + b1 += length; + while (length--) { + *--b2 = *--b1; + } + } + else { + while (length--) { + *b2++ = *b1++; + } + } + } + + bcmp (b1, b2, length) + register unsigned char *b1, *b2; + register length; + { + while (length--) { + if (*b1++ != *b2++) return 1; + } + return 0; + } + + bzero (b, length) + register unsigned char *b; + register length; + { + while (length--) { + *b++ = '\0'; + } + } + + + /* Find the first set bit + * i.e. least signifigant 1 bit: + * 0 => 0 + * 1 => 1 + * 2 => 2 + * 3 => 1 + * 4 => 3 + */ + + int + ffs(mask) + unsigned int mask; + { + register i; + + if ( ! mask ) return 0; + i = 1; + while (! (mask & 1)) { + i++; + mask = mask >> 1; + } + return i; + } + + /* + * insque, remque - insert/remove element from a queue + * + * DESCRIPTION + * Insque and remque manipulate queues built from doubly linked + * lists. Each element in the queue must in the form of + * ``struct qelem''. Insque inserts elem in a queue immedi- + * ately after pred; remque removes an entry elem from a queue. + * + * SEE ALSO + * ``VAX Architecture Handbook'', pp. 228-235. + */ + + struct qelem { + struct qelem *q_forw; + struct qelem *q_back; + char *q_data; + }; + + insque(elem, pred) + register struct qelem *elem, *pred; + { + register struct qelem *q; + /* Insert locking code here */ + if ( elem->q_forw = q = (pred ? pred->q_forw : pred) ) + q->q_back = elem; + if ( elem->q_back = pred ) + pred->q_forw = elem; + /* Insert unlocking code here */ + } + + remque(elem) + register struct qelem *elem; + { + register struct qelem *q; + if ( ! elem ) return; + /* Insert locking code here */ + + if ( q = elem->q_back ) q->q_forw = elem->q_forw; + if ( q = elem->q_forw ) q->q_back = elem->q_back; + + /* insert unlocking code here */ + } + + + /* + * Berkeley random() + * + * We simulate via System V's rand() + */ + + int + random() + { + return (rand()); + } + + /* + * Berkeley srandom() + * + * We simulate via System V's rand() + */ + + int + srandom(seed) + int seed; + { + return (srand(seed)); + } + + + #if defined(hpux) || defined(xenix) + + /** on hpux 5.n, readv/writev don't work on sockets; + ** Even on 6.0, we'll keep these routines around for doing + ** extra large writes; (> 4000); (this caused the Bezier + ** demo to blow up.) + **/ + + #if defined(xenix) + #define swWritev writev + #define swReadv readv + + #ifndef __IOVEC__ + struct iovec { + caddr_t iov_base; + int iov_len; + }; + #endif + #endif + + #if defined(hpux) + #include + #endif + + #define min(x,y) ((x)>(y)?(y):(x)) + + int swWritev(fildes, iov, iovcnt) + int fildes; + register struct iovec *iov; + register int iovcnt; + { + while (iovcnt && iov->iov_len == 0) + iovcnt--, iov++; + + if (iovcnt) + return(write(fildes,iov->iov_base,min(iov->iov_len,4000))); + else + return(0); + } + + int swReadv(fildes, iov, iovcnt) + int fildes; + register struct iovec *iov; + register int iovcnt; + { + while (iovcnt && iov->iov_len == 0) + iovcnt--, iov++; + + if (iovcnt) + return(read(fildes,iov->iov_base,iov->iov_len)); + else + return(0); + } + + #endif /* hpux || xenix */ *** X11R4.ORIG/mit/lib/Xau/Imakefile Tue Dec 12 17:20:47 1989 --- X11R4/mit/lib/Xau/Imakefile Fri Oct 5 21:49:14 1990 *************** *** 1,7 **** #include #ifdef BandAidCompiler ! #include BandAidCompiler #endif INCLUDES = -I. -I$(TOP) --- 1,7 ---- #include #ifdef BandAidCompiler ! #include "BandAidCompiler" #endif INCLUDES = -I. -I$(TOP) *** X11R4.ORIG/mit/lib/Xmu/CvtStdSel.c Sat Dec 2 15:28:28 1989 --- X11R4/mit/lib/Xmu/CvtStdSel.c Sat Oct 6 12:34:29 1990 *************** *** 23,29 **** --- 23,31 ---- #include #include #ifndef att + #ifndef xenix #include + #endif #include #endif #include "Xmu.h" *** X11R4.ORIG/mit/lib/Xmu/Imakefile Tue Dec 12 18:43:10 1989 --- X11R4/mit/lib/Xmu/Imakefile Mon Oct 29 12:06:21 1990 *************** *** 7,12 **** --- 7,13 ---- INSTALLFLAGS = $(INSTINCFLAGS) LINTLIBS = $(LINTXLIB) + DEFINES = -DBITMAPDIR=\"$(INCDIR)/bitmaps\" #ifdef OsNameDefines OS_NAME_DEFINES = OsNameDefines *** X11R4.ORIG/mit/server/ddx/mi/mispritest.h Tue Oct 3 19:46:28 1989 --- X11R4/mit/server/ddx/mi/mispritest.h Tue Oct 16 20:40:41 1990 *************** *** 92,98 **** */ #define SPN_OVERLAP(pCbox,y,x,w) BOX_OVERLAP((pCbox),(x),(y),(x)+(w),(y)) ! #define LINE_SORT(x1,y2,x2,y2) \ { int _t; \ if (x1 > x2) { _t = x1; x1 = x2; x2 = _t; } \ if (y1 > y2) { _t = y1; y1 = y2; y2 = _t; } } --- 92,98 ---- */ #define SPN_OVERLAP(pCbox,y,x,w) BOX_OVERLAP((pCbox),(x),(y),(x)+(w),(y)) ! #define LINE_SORT(x1,y1,x2,y2) \ { int _t; \ if (x1 > x2) { _t = x1; x1 = x2; x2 = _t; } \ if (y1 > y2) { _t = y1; y1 = y2; y2 = _t; } } *** X11R4.ORIG/mit/server/ddx/mi/miwideline.h Tue Nov 21 19:04:49 1989 --- X11R4/mit/server/ddx/mi/miwideline.h Sat Oct 6 17:47:55 1990 *************** *** 113,119 **** #ifdef NOINLINEICEIL #define ICEIL(x) ((int)ceil(x)) #else ! #ifdef __GNUC__ static inline int ICEIL(x) double x; { --- 113,119 ---- #ifdef NOINLINEICEIL #define ICEIL(x) ((int)ceil(x)) #else ! #if defined(__GNUC__) && !defined(xenix) static inline int ICEIL(x) double x; { *** X11R4.ORIG/mit/server/ddx/mi/mifpoly.h Fri Jul 28 12:05:51 1989 --- X11R4/mit/server/ddx/mi/mifpoly.h Sat Oct 6 17:48:47 1990 *************** *** 44,50 **** #ifdef NOINLINEICEIL #define ICEIL(x) ((int)ceil(x)) #else ! #ifdef __GNUC__ static inline int ICEIL(x) double x; { --- 44,50 ---- #ifdef NOINLINEICEIL #define ICEIL(x) ((int)ceil(x)) #else ! #if defined(__GNUC__) && !defined(xenix) static inline int ICEIL(x) double x; { *** X11R4.ORIG/mit/server/ddx/mfb/mfbtegblt.c Tue Nov 21 15:19:54 1989 --- X11R4/mit/server/ddx/mfb/mfbtegblt.c Sun Dec 9 19:26:09 1990 *************** *** 210,215 **** --- 210,217 ---- glyphBytes = GLYPHWIDTHBYTESPADDED(pci); #endif + /* quick and dirty fix. It will be slow, so should be cleaned */ + #ifndef xenix if (nglyph >= 4 && widthGlyphs <= 32) { while (nglyph >= 4) *************** *** 265,270 **** --- 267,273 ---- xpos += widthGlyphs; } } + #endif /*xenix */ while(nglyph--) { *** X11R4.ORIG/mit/server/ddx/mfb/mfbfillsp.c Fri Nov 24 18:02:36 1989 --- X11R4/mit/server/ddx/mfb/mfbfillsp.c Sun Nov 4 09:41:21 1990 *************** *** 35,40 **** --- 35,45 ---- #include "servermd.h" + #ifdef xenix + #undef BITMAP_SCANLINE_UNIT + #define BITMAP_SCANLINE_UNIT 32 + #endif + /* scanline filling for monochrome frame buffer written by drewry, oct 1986 *** X11R4.ORIG/mit/server/ddx/xenix/vga/Imakefile Sun Jan 6 01:02:55 1991 --- X11R4/mit/server/ddx/xenix/vga/Imakefile Sun Dec 9 12:25:57 1990 *************** *** 0 **** --- 1,45 ---- + #include + + SRCS1 = \ + xenixInit.c \ + xenixVGA.c \ + xenixKbd.c \ + xenixMouse.c \ + xenixIo.c \ + xenixTty.c \ + xenixKeyMap.c + + SRCS = $(SRCS1) + + OFILES = xenixInit.o + + OBJS = \ + xenixInit.o \ + xenixVGA.o \ + xenixKbd.o \ + xenixMouse.o \ + xenixIo.o \ + xenixTty.o \ + xenixKeyMap.o + + INCLUDES = -I. -I../../mfb -I../../mi -I../../../include -I$(INCLUDESRC) + LINTLIBS = ../../../dix/llib-ldix.ln ../../../os/4.2bsd/llib-los.ln \ + ../../mfb/llib-lmfb.ln ../../mi/llib-lmi.ln ../../cfb/llib-lcfb.ln + + NormalLibraryObjectRule() + + all:: $(OFILES) kbd_mode + + lintlib: + + NormalLibraryTarget(xenix,$(OBJS)) + NormalLintTarget($(SRCS1)) + SingleProgramTarget(kbd_mode, kbd_mode.o,,) + InstallProgram(kbd_mode,$(BINDIR)) + InstallManPage(kbd_mode,$(MANDIR)) + InstallManPage(Xxenix,$(MANDIR)) + + saber_src: + #load $(CFLAGS) $(SRCS1) + + DependTarget() *** X11R4.ORIG/mit/server/ddx/xenix/vga/README Sun Jan 6 01:02:58 1991 --- X11R4/mit/server/ddx/xenix/vga/README Sun Jan 6 00:59:54 1991 *************** *** 0 **** --- 1,26 ---- + # + # README C.LEE 1/5/91 + # + + This directory contains standard VGA specific routines. + + * Keyboard LED control is built in for the server. + * Keyboard should be in XT mode (kernel default configuration). + * Screen can be changed into text mode for multi-screen switching by + pressing all three mouse buttons down, similar to what I did for MGR. + * kbd_mode program is provided in case the server crashes messing up + the keyboard. You can login from another serial terminal and run + + kbd_mode -a < /dev/tty?? + + where /dev/tty?? is the multiscreen you started Xxenix. + Don't try 'kbd_mode -r' unless you have a serial terminal at hand, + otherwise you will have to power down the machine. There is a bug + in Xenix preventing you from getting current keyboard mode. + * The Xxenix server uses the Xenix Event Manager. Therefore you may have + problem running Xenix version of MGR window (ported by myself) using + bus mouse once Xxenix has been run. + * Screen saver blank mode is not supported. Use noblank mode instead. + + Chain Lee + chain@paul.rutgers.edu