client-side diffs to build X11R4 under HCX/UX 3.0
Chris Metcalf
metcalf at masala.lcs.mit.edu
Sun Mar 17 05:27:19 AEST 1991
This set of patches provides support for HCX/UX 3.0 as an X11 client.
There are a few things about HCX/UX that make it a little odd:
1. read() with FNDELAY and no data returns 0, errno 0
2. ffs(0) == -1 instead of 0 (and this one was hard to deduce!)
Problem 1 is partially solved with -DSUNSYSV in XlibInt.c, but it
turns out that since HCX can *never* distinguish EOF from "no data
ready" in NDELAY, one has to turn off NDELAY to do a forced read
such as _XRead(). I added this conditionalized on -DBAD_NDELAY.
Problem 2 is solved by pulling in just ffs() out of sysV/Berklib.c.
HCX also has some System V features layered onto the basic BSDness. In
particular, lint and ld don't have quite the usual flags, and it has
the SysV-ism of collapsing whitespace with cpp. xload also requires a
chunk of mods in get_load.c, as it reads longs from /unix; also, in yet
another attempt to be SysV-ish, it forces the user to check *both* type
and value for zero in the nlist structure to see if the variable wasn't
found. Finally, xman needed a few #ifdefs to support the MacII-like
/usr/catman structure (some of the man stuff may be unique to our site).
Note that you can build this with gcc if you like; I built gcc under
HCX/UX with almost no problems (I had to hack gcc to output a
.file directive, but other than that it's been very robust).
In any case, use these patches in good health.
Chris Metcalf
MIT Laboratory for Computer Science
*** /dev/null Thu Mar 7 18:25:59 1991
--- config/hcx.cf Thu Mar 7 18:52:11 1991
***************
*** 0 ****
--- 1,39 ----
+ /*
+ * SET VERSION NUMBERS BEFORE MAKING MAKEFILES
+ */
+
+ #define OSName HCX/UX3.0
+ #define OSMajorVersion 3
+ #define OSMinorVersion 0
+
+ /**/# operating system: OSName
+
+ /*****************************************************************************
+ * Platform-specfic parameters *
+ *****************************************************************************/
+
+ /* If we feel like it. No big deal. */
+ #define HasGcc NO
+
+ /* Might as well. */
+ #define StripInstalledPrograms YES
+
+ /* read() returns 0 in nonblocking mode when no data is available... */
+ /* note that -DSUNSYSV helps but not enough; we *never* see an EOF that way */
+ #define ConnectionFlags -DTCPCONN -DUNIXCONN -DBAD_NDELAY
+
+ /* ffs() returns -1 instead of 0 when passed a 0. So we just arrange
+ to use the X11 System V Berklib library, but we have added an #ifdef
+ on "hcx" to it so we only use it for ffs() */
+ #define NeedBerklibInXlib YES
+
+ /* we do have some goodies in our libc.a */
+ #define HasPutenv YES
+ #define HasBsearch YES
+ #define HasNdbm YES
+
+ /* HCX lint is very SysV-ish */
+ #define LintLibFlag -o
+ #define LintOpts -ax
+
+ /* ld doesn't understand the -X option */
+ #define LdCombineFlags -r
*** /tmp/,RCSt1023823 Thu Mar 7 19:51:02 1991
--- config/imakemdep.h Mon Mar 4 23:12:07 1991
***************
*** 66,72 ****
* all colons). One way to tell if you need this is to see whether or not
* your Makefiles have no tabs in them and lots of @@ strings.
*/
! #if defined(sun) || defined(SYSV)
#define FIXUP_CPP_WHITESPACE
#endif
--- 66,72 ----
* all colons). One way to tell if you need this is to see whether or not
* your Makefiles have no tabs in them and lots of @@ strings.
*/
! #if defined(sun) || defined(hcx) || defined(SYSV)
#define FIXUP_CPP_WHITESPACE
#endif
***************
*** 214,219 ****
--- 214,222 ----
#endif
#ifdef CMU
{"CMU", "1"},
+ #endif
+ #ifdef hcx
+ {"hcx", "1"},
#endif
/* add any additional symbols before this line */
{NULL, NULL}
*** /tmp/,RCSt1023832 Thu Mar 7 19:51:15 1991
--- config/Imake.tmpl Tue Mar 5 01:57:04 1991
***************
*** 65,70 ****
--- 65,77 ----
#define VaxArchitecture
#endif
+ #ifdef hcx
+ #define MacroIncludeFile <hcx.cf>
+ #define MacroFile hcx.cf
+ #undef hcx
+ #define HcxArchitecture
+ #endif
+
#ifdef sun
#define MacroIncludeFile <sun.cf>
#define MacroFile sun.cf
*** /tmp/,RCSt1a01932 Fri Mar 8 00:15:44 1991
--- lib/X/XlibInt.c Thu Mar 7 23:47:25 1991
***************
*** 77,83 ****
--- 77,91 ----
*/
while (size) {
errno = 0;
+ #ifdef BAD_NDELAY
+ if (fcntl(dpy->fd, F_SETFL, 0))
+ perror("clear NDELAY");
+ #endif BAD_NDELAY
write_stat = WriteToServer(dpy->fd, bufindex, (int) todo);
+ #ifdef BAD_NDELAY
+ if (fcntl(dpy->fd, F_SETFL, O_NDELAY))
+ perror("set NDELAY");
+ #endif BAD_NDELAY
if (write_stat >= 0) {
size -= write_stat;
todo = size;
***************
*** 209,217 ****
--- 217,233 ----
if ((dpy->flags & XlibDisplayIOError) || size == 0) return;
errno = 0;
+ #ifdef BAD_NDELAY
+ if (fcntl(dpy->fd, F_SETFL, 0))
+ perror("clear NDELAY");
+ #endif BAD_NDELAY
while ((bytes_read = ReadFromServer(dpy->fd, data, (int)size))
!= size) {
+ #ifdef BAD_NDELAY
+ if (fcntl(dpy->fd, F_SETFL, O_NDELAY))
+ perror("set NDELAY");
+ #endif BAD_NDELAY
if (bytes_read > 0) {
size -= bytes_read;
data += bytes_read;
***************
*** 394,402 ****
--- 410,426 ----
return;
}
#endif
+ #ifdef BAD_NDELAY
+ if (fcntl(dpy->fd, F_SETFL, 0))
+ perror("clear NDELAY");
+ #endif BAD_NDELAY
errno = 0;
while ((bytes_read = ReadvFromServer (dpy->fd, iov, 2)) != size) {
+ #ifdef BAD_NDELAY
+ if (fcntl(dpy->fd, F_SETFL, O_NDELAY))
+ perror("set NDELAY");
+ #endif BAD_NDELAY
if (bytes_read > 0) {
size -= bytes_read;
if ((iov[0].iov_len -= bytes_read) < 0) {
***************
*** 503,509 ****
InsertIOV (pad, padsize)
errno = 0;
! if ((len = WritevToServer(dpy->fd, iov, i)) >= 0) {
skip += len;
total -= len;
todo = total;
--- 527,542 ----
InsertIOV (pad, padsize)
errno = 0;
! #ifdef BAD_NDELAY
! if (fcntl(dpy->fd, F_SETFL, 0))
! perror("clear NDELAY");
! #endif BAD_NDELAY
! len = WritevToServer(dpy->fd, iov, i);
! #ifdef BAD_NDELAY
! if (fcntl(dpy->fd, F_SETFL, O_NDELAY))
! perror("set NDELAY");
! #endif BAD_NDELAY
! if (len >= 0) {
skip += len;
total -= len;
todo = total;
*** /tmp/,RCSt1023892 Thu Mar 7 19:56:29 1991
--- lib/X/sysV/Berklib.c Thu Mar 7 18:43:34 1991
***************
*** 11,16 ****
--- 11,19 ----
* included so that some clients can compile.
*/
+ /* All HCX/UX needs out of this file is ffs() */
+ #ifndef hcx
+
bcopy (b1, b2, length)
register unsigned char *b1, *b2;
register length;
***************
*** 48,53 ****
--- 51,57 ----
}
}
+ #endif
/* Find the first set bit
* i.e. least signifigant 1 bit:
***************
*** 73,78 ****
--- 77,84 ----
return i;
}
+ #ifndef hcx
+
char *
index (s, c)
char *s, c;
***************
*** 221,224 ****
--- 227,231 ----
);
}
}
+ #endif
#endif
*** /tmp/,RCSt1023841 Thu Mar 7 19:51:37 1991
--- clients/xload/get_load.c Thu Mar 7 19:11:53 1991
***************
*** 95,100 ****
--- 95,104 ----
};
#endif /* macII */
+ #ifdef hcx
+ #include <sys/param.h>
+ #endif /* hcx */
+
#if defined(UTEK) || defined(alliant)
#define FSCALE 100.0
#endif
***************
*** 232,237 ****
--- 236,245 ----
#define KERNEL_FILE "/dynix"
#endif /* sequent */
+ #ifdef hcx
+ #define KERNEL_FILE "/unix"
+ #endif /* hcx */
+
/*
* provide default for everyone else
*/
***************
*** 357,363 ****
--- 365,375 ----
* will happen to you. (I have a hard time believing the value will
* ever really be zero anyway). CDP 5/17/89.
*/
+ #ifdef hcx
+ if (namelist[LOADAV].n_type == 0 &&
+ #else
if (namelist[LOADAV].n_type == 0 ||
+ #endif /* hcx */
namelist[LOADAV].n_value == 0) {
xload_error("cannot get name list from", KERNEL_FILE);
exit(-1);
***************
*** 379,385 ****
(void) lseek(kmem, loadavg_seek, 0);
#endif /* macII */
! #if defined(sun) || defined (UTEK) || defined(sequent) || defined(alliant)
{
long temp;
(void) read(kmem, (char *)&temp, sizeof(long));
--- 391,397 ----
(void) lseek(kmem, loadavg_seek, 0);
#endif /* macII */
! #if defined(sun) || defined (UTEK) || defined(sequent) || defined(alliant) || defined(hcx)
{
long temp;
(void) read(kmem, (char *)&temp, sizeof(long));
*** /tmp/,RCSt1a01695 Thu Mar 7 21:18:20 1991
--- clients/xman/defs.h Thu Mar 7 21:06:41 1991
***************
*** 86,92 ****
* The command filters for the manual and apropos searches.
*/
! #if ( defined(hpux) || defined(macII) || defined(CRAY) )
# define NO_MANPATH_SUPPORT
#endif
--- 86,92 ----
* The command filters for the manual and apropos searches.
*/
! #if ( defined(hpux) || defined(macII) || defined(CRAY) || defined(hcx) )
# define NO_MANPATH_SUPPORT
#endif
***************
*** 118,126 ****
#define MAN "man"
! #if ( defined(macII) || defined(CRAY) )
/*
! * The Apple and Cray folks put the preformatted pages in the "man"
* directories, what a bunch of BOZOs.
*/
# define CAT MAN
--- 118,126 ----
#define MAN "man"
! #if ( defined(macII) || defined(CRAY) || defined(hcx) )
/*
! * The Apple, Cray, and HCX folks put the preformatted pages in the "man"
* directories, what a bunch of BOZOs.
*/
# define CAT MAN
***************
*** 161,168 ****
--- 161,172 ----
#ifdef macII
# define MANDIR "/usr/catman/u_man:/usr/catman/a_man"
#else
+ #ifdef hcx
+ # define MANDIR "/usr/catman/local_man:/usr/catman/u_man:/usr/catman/a_man:/usr/catman/p_man:/usr/catman/ada_man"
+ #else
# define MANDIR "/usr/man"
#endif
+ #endif
#define INDENT 15
#define TYP20STR "MMMMMMMMMMMMMMMMMMMM"
***************
*** 175,181 ****
* Compression Definitions.
*/
! #if defined( macII )
# define COMPRESSION_EXTENSION "z"
# define UNCOMPRESS_FORMAT "pcat %s > %s"
# define NO_COMPRESS /* mac can't handle using pack as a filter and
--- 179,185 ----
* Compression Definitions.
*/
! #if defined( macII ) || defined( hcx )
# define COMPRESSION_EXTENSION "z"
# define UNCOMPRESS_FORMAT "pcat %s > %s"
# define NO_COMPRESS /* mac can't handle using pack as a filter and
More information about the Comp.sys.tahoe
mailing list