#ifndef X_UNIX_PATH
#ifdef hpux
#define X_UNIX_PATH "/usr/spool/sockets/X11/"
#define OLD_UNIX_PATH "/tmp/.X11-unix/X"
#else
#define X_UNIX_PATH "/tmp/.X11-unix/X"
#endif
#endif
#ifdef STREAMSCONN
#ifdef SYSV
#define BytesReadable(fd,ptr) (_XBytesReadable ((fd), (ptr)))
#define MALLOC_0_RETURNS_NULL
#include <sys/ioctl.h>
#endif
#ifdef SVR4
#define BytesReadable(fd,ptr) (_XBytesReadable ((fd), (ptr)))
#include <sys/uio.h>
#endif
#else
#include <netinet/in.h>
#include <sys/ioctl.h>
#include <netdb.h>
#include <sys/uio.h>
#ifdef SVR4
#include <sys/filio.h>
#endif
#if defined(i386) && defined(SYSV)
#if !defined(SCO) && !defined(SCO325)
#include <net/errno.h>
#endif
#include <sys/stropts.h>
#define BytesReadable(fd,ptr) ioctl((fd), I_NREAD, (ptr))
#else
#define BytesReadable(fd, ptr) ioctl ((fd), FIONREAD, (ptr))
#endif
#endif
#define XCONN_CHECK_FREQ 256
#ifndef X_NOT_POSIX
#ifdef _POSIX_SOURCE
#include <limits.h>
#else
#define _POSIX_SOURCE
#include <limits.h>
#undef _POSIX_SOURCE
#endif
#endif
#ifndef OPEN_MAX
#ifdef SVR4
#define OPEN_MAX 256
#else
#include <sys/param.h>
#ifndef OPEN_MAX
#ifdef NOFILE
#define OPEN_MAX NOFILE
#else
#if !defined(__UNIXOS2__) && !defined(__QNX__)
#define OPEN_MAX NOFILES_MAX
#else
#define OPEN_MAX 256
#endif
#endif
#endif
#endif
#endif
#if OPEN_MAX > 256
#undef OPEN_MAX
#define OPEN_MAX 256
#endif
#ifdef MSKCNT
#undef MSKCNT
#endif
#ifdef BITMASK
#undef BITMASK
#endif
#ifdef MASKIDX
#undef MASKIDX
#endif
#define MSKCNT ((OPEN_MAX + 31) / 32)
#if (MSKCNT==1)
#define BITMASK(i) (1 << (i))
#define MASKIDX(i) 0
#endif
#if (MSKCNT>1)
#define BITMASK(i) (1 << ((i) & 31))
#define MASKIDX(i) ((i) >> 5)
#endif
#define MASKWORD(buf, i) buf[MASKIDX(i)]
#define BITSET(buf, i) MASKWORD(buf, i) |= BITMASK(i)
#define BITCLEAR(buf, i) MASKWORD(buf, i) &= ~BITMASK(i)
#define GETBIT(buf, i) (MASKWORD(buf, i) & BITMASK(i))
#ifdef COPYBITS
#undef COPYBITS
#undef CLEARBITS
#undef MASKANDSETBITS
#undef ORBITS
#undef UNSETBITS
#endif
#if (MSKCNT==1)
#define COPYBITS(src, dst) dst[0] = src[0]
#define CLEARBITS(buf) buf[0] = 0
#define MASKANDSETBITS(dst, b1, b2) dst[0] = (b1[0] & b2[0])
#define ORBITS(dst, b1, b2) dst[0] = (b1[0] | b2[0])
#define UNSETBITS(dst, b1) (dst[0] &= ~b1[0])
#define _XANYSET(src) (src[0])
#endif
#if (MSKCNT==2)
#define COPYBITS(src, dst) { dst[0] = src[0]; dst[1] = src[1]; }
#define CLEARBITS(buf) { buf[0] = 0; buf[1] = 0; }
#define MASKANDSETBITS(dst, b1, b2) {\
dst[0] = (b1[0] & b2[0]);\
dst[1] = (b1[1] & b2[1]); }
#define ORBITS(dst, b1, b2) {\
dst[0] = (b1[0] | b2[0]);\
dst[1] = (b1[1] | b2[1]); }
#define UNSETBITS(dst, b1) {\
dst[0] &= ~b1[0]; \
dst[1] &= ~b1[1]; }
#define _XANYSET(src) (src[0] || src[1])
#endif
#if (MSKCNT==3)
#define COPYBITS(src, dst) { dst[0] = src[0]; dst[1] = src[1]; \
dst[2] = src[2]; }
#define CLEARBITS(buf) { buf[0] = 0; buf[1] = 0; buf[2] = 0; }
#define MASKANDSETBITS(dst, b1, b2) {\
dst[0] = (b1[0] & b2[0]);\
dst[1] = (b1[1] & b2[1]);\
dst[2] = (b1[2] & b2[2]); }
#define ORBITS(dst, b1, b2) {\
dst[0] = (b1[0] | b2[0]);\
dst[1] = (b1[1] | b2[1]);\
dst[2] = (b1[2] | b2[2]); }
#define UNSETBITS(dst, b1) {\
dst[0] &= ~b1[0]; \
dst[1] &= ~b1[1]; \
dst[2] &= ~b1[2]; }
#define _XANYSET(src) (src[0] || src[1] || src[2])
#endif
#if (MSKCNT==4)
#define COPYBITS(src, dst) dst[0] = src[0]; dst[1] = src[1]; \
dst[2] = src[2]; dst[3] = src[3]
#define CLEARBITS(buf) buf[0] = 0; buf[1] = 0; buf[2] = 0; buf[3] = 0
#define MASKANDSETBITS(dst, b1, b2) \
dst[0] = (b1[0] & b2[0]);\
dst[1] = (b1[1] & b2[1]);\
dst[2] = (b1[2] & b2[2]);\
dst[3] = (b1[3] & b2[3])
#define ORBITS(dst, b1, b2) \
dst[0] = (b1[0] | b2[0]);\
dst[1] = (b1[1] | b2[1]);\
dst[2] = (b1[2] | b2[2]);\
dst[3] = (b1[3] | b2[3])
#define UNSETBITS(dst, b1) \
dst[0] &= ~b1[0]; \
dst[1] &= ~b1[1]; \
dst[2] &= ~b1[2]; \
dst[3] &= ~b1[3]
#define _XANYSET(src) (src[0] || src[1] || src[2] || src[3])
#endif
#if (MSKCNT>4)
#define COPYBITS(src, dst) bcopy((char *) src, (char *) dst,\
MSKCNT*sizeof(long))
#define CLEARBITS(buf) bzero((char *) buf, MSKCNT*sizeof(long))
#define MASKANDSETBITS(dst, b1, b2) \
{ int cri; \
for (cri=MSKCNT; --cri>=0; ) \
dst[cri] = (b1[cri] & b2[cri]); }
#define ORBITS(dst, b1, b2) \
{ int cri; \
for (cri=MSKCNT; --cri>=0; ) \
dst[cri] = (b1[cri] | b2[cri]); }
#define UNSETBITS(dst, b1) \
{ int cri; \
for (cri=MSKCNT; --cri>=0; ) \
dst[cri] &= ~b1[cri]; }
extern int N_XANYSET(unsigned long *);
#endif
#if defined(USG) && !defined(CRAY) && !defined(umips) && !defined(MOTOROLA)
struct iovec {
caddr_t iov_base;
int iov_len;
};
#endif
#ifdef STREAMSCONN
#include "Xstreams.h"
extern char _XsTypeOfStream[];
extern Xstream _XsStream[];
#define ReadFromServer(dpy, data, size) \
(*_XsStream[_XsTypeOfStream[dpy]].ReadFromStream)((dpy), (data), (size), \
BUFFERING)
#define WriteToServer(dpy, bufind, size) \
(*_XsStream[_XsTypeOfStream[dpy]].WriteToStream)((dpy), (bufind), (size))
#else
#define ReadFromServer(dpy, data, size) read((dpy), (data), (size))
#define WriteToServer(dpy, bufind, size) write((dpy), (bufind), (size))
#endif
#ifndef USL_COMPAT
#if !defined(USG) || defined(MOTOROLA)
#if (defined(SCO) || defined(SCO325)) || (!(defined(SYSV) && defined(i386)))
#define _XReadV readv
#endif
#define _XWriteV writev
#endif
#endif
#define ReadvFromServer(dpy, iov, iovcnt) _XReadV((dpy), (iov), (iovcnt))
#define WritevToServer(dpy, iov, iovcnt) _XWriteV((dpy), (iov), (iovcnt))