⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xlibint.h

📁 ftam等标准协议服务器和客户端的源代码。
💻 H
字号:
#include <X11/copyright.h>/* $XConsortium: Xlibint.h,v 11.61 88/09/06 16:09:16 jim Exp $ *//* Copyright 1984, 1985, 1987  Massachusetts Institute of Technology *//* *	XlibInternal.h - Header definition and support file for the internal *	support routines (XlibInternal) used by the C subroutine interface *	library (Xlib) to the X Window System. * *	Warning, there be dragons here.... */#ifndef NEED_EVENTS#define _XEVENT_#endif#ifdef CRAY#ifndef __TYPES__#define __TYPES__#include <sys/types.h>			/* forgot to protect it... */#endif /* __TYPES__ */#else#include <sys/types.h>#endif /* CRAY *//* * define the following if you want the Data macro to be a procedure instead */#if defined(CRAY)#define DataRoutineIsProcedure#endif /* CRAY */#include "Xlib.h"#include <X11/Xproto.h>#include "Xlibos.h"#include <errno.h>#ifndef NULL#define NULL 0#endif#define LOCKED 1#define UNLOCKED 0extern int errno;			/* Internal system error number. */extern void bcopy();extern (*_XIOErrorFunction)();		/* X system error reporting routine. */extern (*_XErrorFunction)();		/* X_Error event reporting routine. */extern char *_XAllocScratch();		/* fast memory allocator */extern Visual *_XVIDtoVisual();		/* given visual id, find structure */#ifndef BUFSIZE#define BUFSIZE 2048			/* X output buffer size. */#endif#ifndef EPERBATCH#define EPERBATCH 8			/* when batching, how many elements */#endif#ifndef CURSORFONT#define CURSORFONT "cursor"		/* standard cursor fonts */#endif/* * X Protocol packetizing macros. *//*   Need to start requests on 64 bit word boundries *   on a CRAY computer so add a NoOp (127) if needed. *   A character pointer on a CRAY computer will be non-zero *   after shifting right 61 bits of it is not pointing to *   a word boundary. */#ifdef WORD64#define WORD64ALIGN if ((long)dpy->bufptr >> 61) {\           dpy->last_req = dpy->bufptr;\           *(dpy->bufptr)   = X_NoOperation;\           *(dpy->bufptr+1) =  0;\           *(dpy->bufptr+2) =  0;\           *(dpy->bufptr+3) =  1;\             dpy->request += 1;\             dpy->bufptr += 4;\         }#else /* else does not require alignment on 64-bit boundaries */#define WORD64ALIGN#endif /* WORD64 *//* * GetReq - Get the next avilable X request packet in the buffer and * return it.  * * "name" is the name of the request, e.g. CreatePixmap, OpenFont, etc. * "req" is the name of the request pointer. * */#if defined(__STDC__) && !defined(UNIXCPP)#define GetReq(name, req) \        WORD64ALIGN\	if ((dpy->bufptr + SIZEOF(x##name##Req)) > dpy->bufmax)\		_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  /* non-ANSI C uses empty comment instead of "##" for token concatenation */#define GetReq(name, req) \        WORD64ALIGN\	if ((dpy->bufptr + SIZEOF(x/**/name/**/Req)) > dpy->bufmax)\		_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++#endif/* GetReqExtra is the same as GetReq, but allocates "n" additional   bytes after the request. "n" must be a multiple of 4!  */#if defined(__STDC__) && !defined(UNIXCPP)#define GetReqExtra(name, n, req) \        WORD64ALIGN\	if ((dpy->bufptr + SIZEOF(*req) + n) > dpy->bufmax)\		_XFlush(dpy);\	req = (x##name##Req *)(dpy->last_req = dpy->bufptr);\	req->reqType = X_##name;\	req->length = (SIZEOF(*req) + n)>>2;\	dpy->bufptr += SIZEOF(*req) + n;\	dpy->request++#else#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++#endif/* * GetResReq is for those requests that have a resource ID  * (Window, Pixmap, GContext, etc.) as their single argument. * "rid" is the name of the resource.  */#if defined(__STDC__) && !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/* * GetEmptyReq is for those requests that have no arguments * at all.  */#if defined(__STDC__) && !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))/* * Data - Place data in the buffer and pad the end to provide * 32 bit word alignment.  Transmit if the buffer fills. * * "dpy" is a pointer to a Display. * "data" is a pinter to a data buffer. * "len" is the length of the data buffer. * we can presume buffer less than 2^16 bytes, so bcopy can be used safely. */#ifdef DataRoutineIsProcedureextern void Data();#else#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 /* DataRoutineIsProcedure *//* Allocate bytes from the buffer.  No padding is done, so if * the length is not a multiple of 4, the caller must be * careful to leave the buffer aligned after sending the * current request. * * "type" is the type of the pointer being assigned to. * "ptr" is the pointer being assigned to. * "n" is the number of bytes to allocate. * * Example:  *    xTextElt *elt; *    BufAlloc (xTextElt *, elt, nbytes) */#define BufAlloc(type, ptr, n) \    if (dpy->bufptr + (n) > dpy->bufmax) \        _XFlush (dpy); \    ptr = (type) dpy->bufptr; \    dpy->bufptr += (n);/* * provide emulation routines for smaller architectures */#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 /* not WORD64 */#define PackData16(dpy,data,len) Data16 (dpy, data, len)#define PackData32(dpy,data,len) Data32 (dpy, data, len)/* Xlib manual is bogus */#define PackData(dpy,data,len) PackData16 (dpy, data, len)#define min(a,b) (((a) < (b)) ? (a) : (b))#define max(a,b) (((a) > (b)) ? (a) : (b))#define	CI_NONEXISTCHAR	0x4000	/* required because QueryFont represents				   a non-existant character with zero-value				   metrics, but requires drivers to output				   the default char in their place. */#ifdef MUSTCOPY/* a little bit of magic */#define OneDataCard32(dpy,dstaddr,srcvar) \  { dpy->bufptr -= 4; Data32 (dpy, (char *) &(srcvar), 4); }#define STARTITERATE(tpvar,type,start,endcond,decr) \  { register char *cpvar; \  for (cpvar = (char *) start; endcond; cpvar = NEXTPTR(cpvar,type), decr) { \    type dummy; bcopy (cpvar, (char *) &dummy, SIZEOF(type)); \    tpvar = (type *) cpvar;#define ENDITERATE }}#else/* srcvar must be a variable for large architecture version */#define OneDataCard32(dpy,dstaddr,srcvar) \  { *(unsigned long *)(dstaddr) = (srcvar); }#define STARTITERATE(tpvar,type,start,endcond,decr) \  for (tpvar = (type *) start; endcond; tpvar++, decr) {#define ENDITERATE }#endif /* MUSTCOPY - used machines whose C structs don't line up with proto */#ifdef ISOCONNextern int fd2family[MAXSOCKS];extern int (*readfn[])(); extern int (*writefn[])(); extern int (*readvfn[])();extern int (*writevfn[])();extern int (*ioctlfn[])();extern int (*closefn[])();#endif /* ISOCONN */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -