#ifndef _CSLIBINT_H
#define _CSLIBINT_H
#include <X11/Xlibint.h>
#include <X11/Xutil.h>
#include <sys/param.h>
#if defined(SCO) || defined(SCO325)
#include <sys/socket.h>
#endif
#ifndef MAXHOSTNAMELEN
#define MAXHOSTNAMELEN 64
#endif
#if !defined(UNIXCPP)
#define NXMacroGetReq(name, req) \
WORD64ALIGN\
if ((dpy->bufptr + SIZEOF(x##name##Req)) > dpy->bufmax)\
{if (dpy != xdpy) N_XFlush(dpy); else _XFlush(dpy);}\
req = (x##name##Req *)(dpy->last_req = dpy->bufptr);\
req->reqType = X_##name;\
req->length = (SIZEOF(x##name##Req))>>2;\
dpy->bufptr += SIZEOF(x##name##Req);\
dpy->request++
#else
#define NXMacroGetReq(name, req) \
WORD64ALIGN\
if ((dpy->bufptr + SIZEOF(xnameReq)) > dpy->bufmax)\
{if (dpy != xdpy) N_XFlush(dpy); else _XFlush(dpy);}\
req = (xnameReq *)(dpy->last_req = dpy->bufptr);\
req->reqType = X_name;\
req->length = (SIZEOF(xnameReq))>>2;\
dpy->bufptr += SIZEOF(xnameReq);\
dpy->request++
#endif
#ifdef NEEDFORNX
#if !defined(UNIXCPP)
#define GetReqExtra(name, n, req) \
WORD64ALIGN\
if ((dpy->bufptr + SIZEOF(x##name##Req) + n) > dpy->bufmax)\
_XFlush(dpy);\
req = (x##name##Req *)(dpy->last_req = dpy->bufptr);\
req->reqType = X_##name;\
req->length = (SIZEOF(x##name##Req) + n)>>2;\
dpy->bufptr += SIZEOF(x##name##Req) + n;\
dpy->request++
#else
#define GetReqExtra(name, n, req) \
WORD64ALIGN\
if ((dpy->bufptr + SIZEOF(xnameReq) + n) > dpy->bufmax)\
_XFlush(dpy);\
req = (xnameReq *)(dpy->last_req = dpy->bufptr);\
req->reqType = X_name;\
req->length = (SIZEOF(xnameReq) + n)>>2;\
dpy->bufptr += SIZEOF(xnameReq) + n;\
dpy->request++
#endif
#if !defined(UNIXCPP)
#define GetResReq(name, rid, req) \
WORD64ALIGN\
if ((dpy->bufptr + SIZEOF(xResourceReq)) > dpy->bufmax)\
_XFlush(dpy);\
req = (xResourceReq *) (dpy->last_req = dpy->bufptr);\
req->reqType = X_##name;\
req->length = 2;\
req->id = (rid);\
dpy->bufptr += SIZEOF(xResourceReq);\
dpy->request++
#else
#define GetResReq(name, rid, req) \
WORD64ALIGN\
if ((dpy->bufptr + SIZEOF(xResourceReq)) > dpy->bufmax)\
_XFlush(dpy);\
req = (xResourceReq *) (dpy->last_req = dpy->bufptr);\
req->reqType = X_name;\
req->length = 2;\
req->id = (rid);\
dpy->bufptr += SIZEOF(xResourceReq);\
dpy->request++
#endif
#if !defined(UNIXCPP)
#define GetEmptyReq(name, req) \
WORD64ALIGN\
if ((dpy->bufptr + SIZEOF(xReq)) > dpy->bufmax)\
_XFlush(dpy);\
req = (xReq *) (dpy->last_req = dpy->bufptr);\
req->reqType = X_##name;\
req->length = 1;\
dpy->bufptr += SIZEOF(xReq);\
dpy->request++
#else
#define GetEmptyReq(name, req) \
WORD64ALIGN\
if ((dpy->bufptr + SIZEOF(xReq)) > dpy->bufmax)\
_XFlush(dpy);\
req = (xReq *) (dpy->last_req = dpy->bufptr);\
req->reqType = X_name;\
req->length = 1;\
dpy->bufptr += SIZEOF(xReq);\
dpy->request++
#endif
#define SyncHandle() \
if (dpy->synchandler) (*dpy->synchandler)(dpy)
#define FlushGC(dpy, gc) \
if ((gc)->dirty) _XFlushGCCache((dpy), (gc))
#ifndef DataRoutineIsProcedure
#define Data(dpy, data, len) \
if (dpy->bufptr + (len) <= dpy->bufmax) {\
bcopy(data, dpy->bufptr, (int)len);\
dpy->bufptr += ((len) + 3) & ~3;\
} else\
_XSend(dpy, data, len)
#endif
#define BufAlloc(type, ptr, n) \
if (dpy->bufptr + (n) > dpy->bufmax) \
_XFlush (dpy); \
ptr = (type) dpy->bufptr; \
dpy->bufptr += (n);
#ifndef WORD64
#define Data16(dpy, data, len) Data((dpy), (char *)(data), (len))
#define Data32(dpy, data, len) Data((dpy), (char *)(data), (len))
#define _XRead16Pad(dpy, data, len) _XReadPad((dpy), (char *)(data), (len))
#define _XRead16(dpy, data, len) _XRead((dpy), (char *)(data), (len))
#define _XRead32(dpy, data, len) _XRead((dpy), (char *)(data), (len))
#endif
#define PackData16(dpy,data,len) Data16 (dpy, data, len)
#define PackData32(dpy,data,len) Data32 (dpy, data, len)
#define PackData(dpy,data,len) PackData16 (dpy, data, len)
#endif
#if !defined(STARTITERATE) && !defined(WORD64)
#define STARTITERATE(tpvar,type,start,endcond,decr) \
for (tpvar = (type *) start; endcond; tpvar++, decr) {
#define ENDITERATE }
#endif
#ifndef WORD64
#undef Data32
#define Data32(dpy, data, len) NXProcData((dpy), (char *)(data), (len))
#endif
extern int gNXSyncGCMode;
extern Bool N_XUnknownWireEvent(Display *, XEvent *, xEvent *);
extern Status N_XReply(Display *, xReply *, int, Bool);
extern Status N_XUnknownNativeEvent(Display *, XEvent *, xEvent *);
extern int DPSCAPConnect( char *, char **, int *, int *, int *, char **);
extern int N_XDisconnectDisplay(int);
extern int N_XGetHostname (char *, int);
extern int N_XRead(Display*, char *, long);
extern void NXProcData (Display *, char *, long);
extern void N_XFlush(Display *);
extern void N_XReadPad(Display*, char *, long);
extern void N_XSend(Display *, _Xconst char *, long);
extern void N_XWaitForReadable(Display *);
extern void N_XWaitForWritable(Display *);
extern void XDPSGetDefaultColorMaps(
Display *dpy,
Screen *screen,
Drawable drawable,
XStandardColormap *colorCube,
XStandardColormap *grayRamp);
#endif