| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334 |
- /*
- Copyright 1984, 1985, 1987, 1989, 1998 The Open Group
- Permission to use, copy, modify, distribute, and sell this software and its
- documentation for any purpose is hereby granted without fee, provided that
- the above copyright notice appear in all copies and that both that
- copyright notice and this permission notice appear in supporting
- documentation.
- The above copyright notice and this permission notice shall be included
- in all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
- OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- OTHER DEALINGS IN THE SOFTWARE.
- Except as contained in this notice, the name of The Open Group shall
- not be used in advertising or otherwise to promote the sale, use or
- other dealings in this Software without prior written authorization
- from The Open Group.
- */
- #ifndef _X11_XLIBINT_H_
- #define _X11_XLIBINT_H_ 1
- /*
- * Xlibint.h - Header definition and support file for the internal
- * support routines used by the C subroutine interface
- * library (Xlib) to the X Window System.
- *
- * Warning, there be dragons here....
- */
- #include <X11/Xlib.h>
- #include <X11/Xproto.h> /* to declare xEvent */
- #include <X11/XlibConf.h> /* for configured options like XTHREADS */
- /* The Xlib structs are full of implicit padding to properly align members.
- We can't clean that up without breaking ABI, so tell clang not to bother
- complaining about it. */
- #ifdef __clang__
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wpadded"
- #endif
- #ifdef WIN32
- #define _XFlush _XFlushIt
- #endif
- /*
- * If your BytesReadable correctly detects broken connections, then
- * you should NOT define XCONN_CHECK_FREQ.
- */
- #ifndef XCONN_CHECK_FREQ
- #define XCONN_CHECK_FREQ 256
- #endif
- struct _XGC
- {
- XExtData *ext_data; /* hook for extension to hang data */
- GContext gid; /* protocol ID for graphics context */
- Bool rects; /* boolean: TRUE if clipmask is list of rectangles */
- Bool dashes; /* boolean: TRUE if dash-list is really a list */
- unsigned long dirty;/* cache dirty bits */
- XGCValues values; /* shadow structure of values */
- };
- struct _XDisplay
- {
- XExtData *ext_data; /* hook for extension to hang data */
- struct _XFreeFuncs *free_funcs; /* internal free functions */
- int fd; /* Network socket. */
- int conn_checker; /* ugly thing used by _XEventsQueued */
- int proto_major_version;/* maj. version of server's X protocol */
- int proto_minor_version;/* minor version of server's X protocol */
- char *vendor; /* vendor of the server hardware */
- XID resource_base; /* resource ID base */
- XID resource_mask; /* resource ID mask bits */
- XID resource_id; /* allocator current ID */
- int resource_shift; /* allocator shift to correct bits */
- XID (*resource_alloc)( /* allocator function */
- struct _XDisplay*
- );
- int byte_order; /* screen byte order, LSBFirst, MSBFirst */
- int bitmap_unit; /* padding and data requirements */
- int bitmap_pad; /* padding requirements on bitmaps */
- int bitmap_bit_order; /* LeastSignificant or MostSignificant */
- int nformats; /* number of pixmap formats in list */
- ScreenFormat *pixmap_format; /* pixmap format list */
- int vnumber; /* Xlib's X protocol version number. */
- int release; /* release of the server */
- struct _XSQEvent *head, *tail; /* Input event queue. */
- int qlen; /* Length of input event queue */
- unsigned long last_request_read; /* seq number of last event read */
- unsigned long request; /* sequence number of last request. */
- char *last_req; /* beginning of last request, or dummy */
- char *buffer; /* Output buffer starting address. */
- char *bufptr; /* Output buffer index pointer. */
- char *bufmax; /* Output buffer maximum+1 address. */
- unsigned max_request_size; /* maximum number 32 bit words in request*/
- struct _XrmHashBucketRec *db;
- int (*synchandler)( /* Synchronization handler */
- struct _XDisplay*
- );
- char *display_name; /* "host:display" string used on this connect*/
- int default_screen; /* default screen for operations */
- int nscreens; /* number of screens on this server*/
- Screen *screens; /* pointer to list of screens */
- unsigned long motion_buffer; /* size of motion buffer */
- volatile unsigned long flags; /* internal connection flags */
- int min_keycode; /* minimum defined keycode */
- int max_keycode; /* maximum defined keycode */
- KeySym *keysyms; /* This server's keysyms */
- XModifierKeymap *modifiermap; /* This server's modifier keymap */
- int keysyms_per_keycode;/* number of rows */
- char *xdefaults; /* contents of defaults from server */
- char *scratch_buffer; /* place to hang scratch buffer */
- unsigned long scratch_length; /* length of scratch buffer */
- int ext_number; /* extension number on this display */
- struct _XExten *ext_procs; /* extensions initialized on this display */
- /*
- * the following can be fixed size, as the protocol defines how
- * much address space is available.
- * While this could be done using the extension vector, there
- * may be MANY events processed, so a search through the extension
- * list to find the right procedure for each event might be
- * expensive if many extensions are being used.
- */
- Bool (*event_vec[128])( /* vector for wire to event */
- Display * /* dpy */,
- XEvent * /* re */,
- xEvent * /* event */
- );
- Status (*wire_vec[128])( /* vector for event to wire */
- Display * /* dpy */,
- XEvent * /* re */,
- xEvent * /* event */
- );
- KeySym lock_meaning; /* for XLookupString */
- struct _XLockInfo *lock; /* multi-thread state, display lock */
- struct _XInternalAsync *async_handlers; /* for internal async */
- unsigned long bigreq_size; /* max size of big requests */
- struct _XLockPtrs *lock_fns; /* pointers to threads functions */
- void (*idlist_alloc)( /* XID list allocator function */
- Display * /* dpy */,
- XID * /* ids */,
- int /* count */
- );
- /* things above this line should not move, for binary compatibility */
- struct _XKeytrans *key_bindings; /* for XLookupString */
- Font cursor_font; /* for XCreateFontCursor */
- struct _XDisplayAtoms *atoms; /* for XInternAtom */
- unsigned int mode_switch; /* keyboard group modifiers */
- unsigned int num_lock; /* keyboard numlock modifiers */
- struct _XContextDB *context_db; /* context database */
- Bool (**error_vec)( /* vector for wire to error */
- Display * /* display */,
- XErrorEvent * /* he */,
- xError * /* we */
- );
- /*
- * Xcms information
- */
- struct {
- XPointer defaultCCCs; /* pointer to an array of default XcmsCCC */
- XPointer clientCmaps; /* pointer to linked list of XcmsCmapRec */
- XPointer perVisualIntensityMaps;
- /* linked list of XcmsIntensityMap */
- } cms;
- struct _XIMFilter *im_filters;
- struct _XSQEvent *qfree; /* unallocated event queue elements */
- unsigned long next_event_serial_num; /* inserted into next queue elt */
- struct _XExten *flushes; /* Flush hooks */
- struct _XConnectionInfo *im_fd_info; /* _XRegisterInternalConnection */
- int im_fd_length; /* number of im_fd_info */
- struct _XConnWatchInfo *conn_watchers; /* XAddConnectionWatch */
- int watcher_count; /* number of conn_watchers */
- XPointer filedes; /* struct pollfd cache for _XWaitForReadable */
- int (*savedsynchandler)( /* user synchandler when Xlib usurps */
- Display * /* dpy */
- );
- XID resource_max; /* allocator max ID */
- int xcmisc_opcode; /* major opcode for XC-MISC */
- struct _XkbInfoRec *xkb_info; /* XKB info */
- struct _XtransConnInfo *trans_conn; /* transport connection object */
- struct _X11XCBPrivate *xcb; /* XCB glue private data */
- /* Generic event cookie handling */
- unsigned int next_cookie; /* next event cookie */
- /* vector for wire to generic event, index is (extension - 128) */
- Bool (*generic_event_vec[128])(
- Display * /* dpy */,
- XGenericEventCookie * /* Xlib event */,
- xEvent * /* wire event */);
- /* vector for event copy, index is (extension - 128) */
- Bool (*generic_event_copy_vec[128])(
- Display * /* dpy */,
- XGenericEventCookie * /* in */,
- XGenericEventCookie * /* out*/);
- void *cookiejar; /* cookie events returned but not claimed */
- };
- #define XAllocIDs(dpy,ids,n) (*(dpy)->idlist_alloc)(dpy,ids,n)
- #ifndef _XEVENT_
- /*
- * _QEvent datatype for use in input queueing.
- */
- typedef struct _XSQEvent
- {
- struct _XSQEvent *next;
- XEvent event;
- unsigned long qserial_num; /* so multi-threaded code can find new ones */
- } _XQEvent;
- #endif
- #include <X11/Xproto.h>
- #ifdef __sgi
- #define _SGI_MP_SOURCE /* turn this on to get MP safe errno */
- #endif
- #include <errno.h>
- #define _XBCOPYFUNC _Xbcopy
- #include <X11/Xfuncs.h>
- #include <X11/Xosdefs.h>
- /* Utek leaves kernel macros around in include files (bleah) */
- #ifdef dirty
- #undef dirty
- #endif
- #include <stdlib.h>
- #include <string.h>
- #include <X11/Xfuncproto.h>
- _XFUNCPROTOBEGIN
- /*
- * The following definitions can be used for locking requests in multi-threaded
- * address spaces.
- */
- #ifdef XTHREADS
- /* Author: Stephen Gildea, MIT X Consortium
- *
- * declarations for C Threads locking
- */
- typedef struct _LockInfoRec *LockInfoPtr;
- /* interfaces for locking.c */
- struct _XLockPtrs {
- /* used by all, including extensions; do not move */
- void (*lock_display)(
- Display *dpy
- #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE)
- , char *file
- , int line
- #endif
- );
- void (*unlock_display)(
- Display *dpy
- #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE)
- , char *file
- , int line
- #endif
- );
- };
- #if defined(WIN32) && !defined(_XLIBINT_)
- #define _XCreateMutex_fn (*_XCreateMutex_fn_p)
- #define _XFreeMutex_fn (*_XFreeMutex_fn_p)
- #define _XLockMutex_fn (*_XLockMutex_fn_p)
- #define _XUnlockMutex_fn (*_XUnlockMutex_fn_p)
- #define _Xglobal_lock (*_Xglobal_lock_p)
- #endif
- /* in XlibInt.c */
- extern void (*_XCreateMutex_fn)(
- LockInfoPtr /* lock */
- );
- extern void (*_XFreeMutex_fn)(
- LockInfoPtr /* lock */
- );
- extern void (*_XLockMutex_fn)(
- LockInfoPtr /* lock */
- #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE)
- , char * /* file */
- , int /* line */
- #endif
- );
- extern void (*_XUnlockMutex_fn)(
- LockInfoPtr /* lock */
- #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE)
- , char * /* file */
- , int /* line */
- #endif
- );
- extern LockInfoPtr _Xglobal_lock;
- #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE)
- #define LockDisplay(d) if ((d)->lock_fns) (*(d)->lock_fns->lock_display)((d),__FILE__,__LINE__)
- #define UnlockDisplay(d) if ((d)->lock_fns) (*(d)->lock_fns->unlock_display)((d),__FILE__,__LINE__)
- #define _XLockMutex(lock) if (_XLockMutex_fn) (*_XLockMutex_fn)(lock,__FILE__,__LINE__)
- #define _XUnlockMutex(lock) if (_XUnlockMutex_fn) (*_XUnlockMutex_fn)(lock,__FILE__,__LINE__)
- #else
- /* used everywhere, so must be fast if not using threads */
- #define LockDisplay(d) if ((d)->lock_fns) (*(d)->lock_fns->lock_display)(d)
- #define UnlockDisplay(d) if ((d)->lock_fns) (*(d)->lock_fns->unlock_display)(d)
- #define _XLockMutex(lock) if (_XLockMutex_fn) (*_XLockMutex_fn)(lock)
- #define _XUnlockMutex(lock) if (_XUnlockMutex_fn) (*_XUnlockMutex_fn)(lock)
- #endif
- #define _XCreateMutex(lock) if (_XCreateMutex_fn) (*_XCreateMutex_fn)(lock);
- #define _XFreeMutex(lock) if (_XFreeMutex_fn) (*_XFreeMutex_fn)(lock);
- #else /* XTHREADS */
- #define LockDisplay(dis)
- #define _XLockMutex(lock)
- #define _XUnlockMutex(lock)
- #define UnlockDisplay(dis)
- #define _XCreateMutex(lock)
- #define _XFreeMutex(lock)
- #endif
- #define Xfree(ptr) free((ptr))
- /*
- * Note that some machines do not return a valid pointer for malloc(0), in
- * which case we provide an alternate under the control of the
- * define MALLOC_0_RETURNS_NULL. This is necessary because some
- * Xlib code expects malloc(0) to return a valid pointer to storage.
- */
- #if defined(MALLOC_0_RETURNS_NULL) || defined(__clang_analyzer__)
- # define Xmalloc(size) malloc(((size) == 0 ? 1 : (size)))
- # define Xrealloc(ptr, size) realloc((ptr), ((size) == 0 ? 1 : (size)))
- # define Xcalloc(nelem, elsize) calloc(((nelem) == 0 ? 1 : (nelem)), (elsize))
- #else
- # define Xmalloc(size) malloc((size))
- # define Xrealloc(ptr, size) realloc((ptr), (size))
- # define Xcalloc(nelem, elsize) calloc((nelem), (elsize))
- #endif
- #include <stddef.h>
- #define LOCKED 1
- #define UNLOCKED 0
- #ifndef BUFSIZE
- #define BUFSIZE 2048 /* X output buffer size. */
- #endif
- #ifndef PTSPERBATCH
- #define PTSPERBATCH 1024 /* point batching */
- #endif
- #ifndef WLNSPERBATCH
- #define WLNSPERBATCH 50 /* wide line batching */
- #endif
- #ifndef ZLNSPERBATCH
- #define ZLNSPERBATCH 1024 /* thin line batching */
- #endif
- #ifndef WRCTSPERBATCH
- #define WRCTSPERBATCH 10 /* wide line rectangle batching */
- #endif
- #ifndef ZRCTSPERBATCH
- #define ZRCTSPERBATCH 256 /* thin line rectangle batching */
- #endif
- #ifndef FRCTSPERBATCH
- #define FRCTSPERBATCH 256 /* filled rectangle batching */
- #endif
- #ifndef FARCSPERBATCH
- #define FARCSPERBATCH 256 /* filled arc batching */
- #endif
- #ifndef CURSORFONT
- #define CURSORFONT "cursor" /* standard cursor fonts */
- #endif
- /*
- * Display flags
- */
- #define XlibDisplayIOError (1L << 0)
- #define XlibDisplayClosing (1L << 1)
- #define XlibDisplayNoXkb (1L << 2)
- #define XlibDisplayPrivSync (1L << 3)
- #define XlibDisplayProcConni (1L << 4) /* in _XProcessInternalConnection */
- #define XlibDisplayReadEvents (1L << 5) /* in _XReadEvents */
- #define XlibDisplayReply (1L << 5) /* in _XReply */
- #define XlibDisplayWriting (1L << 6) /* in _XFlushInt, _XSend */
- #define XlibDisplayDfltRMDB (1L << 7) /* mark if RM db from XGetDefault */
- /*
- * X Protocol packetizing macros.
- */
- /* Leftover from CRAY support - was defined empty on all non-Cray systems */
- #define WORD64ALIGN
- /**
- * Return a len-sized request buffer for the request type. This function may
- * flush the output queue.
- *
- * @param dpy The display connection
- * @param type The request type
- * @param len Length of the request in bytes
- *
- * @returns A pointer to the request buffer with a few default values
- * initialized.
- */
- extern void *_XGetRequest(Display *dpy, CARD8 type, size_t len);
- /* GetReqSized is the same as GetReq but allows the caller to specify the
- * size in bytes. 'sz' must be a multiple of 4! */
- #define GetReqSized(name, sz, req) \
- req = (x##name##Req *) _XGetRequest(dpy, X_##name, sz)
- /*
- * GetReq - Get the next available 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.
- *
- */
- #define GetReq(name, req) \
- GetReqSized(name, SIZEOF(x##name##Req), req)
- /* GetReqExtra is the same as GetReq, but allocates "n" additional
- bytes after the request. "n" must be a multiple of 4! */
- #define GetReqExtra(name, n, req) \
- GetReqSized(name, SIZEOF(x##name##Req) + n, req)
- /*
- * 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.
- */
- #define GetResReq(name, rid, req) \
- req = (xResourceReq *) _XGetRequest(dpy, X_##name, SIZEOF(xResourceReq)); \
- req->id = (rid)
- /*
- * GetEmptyReq is for those requests that have no arguments
- * at all.
- */
- #define GetEmptyReq(name, req) \
- req = (xReq *) _XGetRequest(dpy, X_##name, SIZEOF(xReq))
- /*
- * MakeBigReq sets the CARD16 "req->length" to 0 and inserts a new CARD32
- * length, after req->length, before the data in the request. The new length
- * includes the "n" extra 32-bit words.
- *
- * Do not use MakeBigReq if there is no data already in the request.
- * req->length must already be >= 2.
- */
- #ifdef LONG64
- #define MakeBigReq(req,n) \
- { \
- CARD64 _BRdat; \
- CARD32 _BRlen = req->length - 1; \
- req->length = 0; \
- _BRdat = ((CARD32 *)req)[_BRlen]; \
- memmove(((char *)req) + 8, ((char *)req) + 4, (_BRlen - 1) << 2); \
- ((CARD32 *)req)[1] = _BRlen + n + 2; \
- Data32(dpy, &_BRdat, 4); \
- }
- #else
- #define MakeBigReq(req,n) \
- { \
- CARD32 _BRdat; \
- CARD32 _BRlen = req->length - 1; \
- req->length = 0; \
- _BRdat = ((CARD32 *)req)[_BRlen]; \
- memmove(((char *)req) + 8, ((char *)req) + 4, (_BRlen - 1) << 2); \
- ((CARD32 *)req)[1] = _BRlen + n + 2; \
- Data32(dpy, &_BRdat, 4); \
- }
- #endif
- /*
- * SetReqLen increases the count of 32-bit words in the request by "n",
- * or by "badlen" if "n" is too large.
- *
- * Do not use SetReqLen if "req" does not already have data after the
- * xReq header. req->length must already be >= 2.
- */
- #ifndef __clang_analyzer__
- #define SetReqLen(req,n,badlen) \
- if ((req->length + n) > (unsigned)65535) { \
- if (dpy->bigreq_size) { \
- MakeBigReq(req,n) \
- } else { \
- n = badlen; \
- req->length += n; \
- } \
- } else \
- req->length += n
- #else
- #define SetReqLen(req,n,badlen) \
- req->length += n
- #endif
- #define SyncHandle() \
- if (dpy->synchandler) (*dpy->synchandler)(dpy)
- extern void _XFlushGCCache(Display *dpy, GC gc);
- #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 pointer to a data buffer.
- * "len" is the length of the data buffer.
- */
- #ifndef DataRoutineIsProcedure
- #define Data(dpy, data, len) {\
- if (dpy->bufptr + (len) <= dpy->bufmax) {\
- memcpy(dpy->bufptr, data, (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; \
- memset(ptr, '\0', n); \
- dpy->bufptr += (n);
- #define Data16(dpy, data, len) Data((dpy), (_Xconst char *)(data), (len))
- #define _XRead16Pad(dpy, data, len) _XReadPad((dpy), (char *)(data), (len))
- #define _XRead16(dpy, data, len) _XRead((dpy), (char *)(data), (len))
- #ifdef LONG64
- #define Data32(dpy, data, len) _XData32(dpy, (_Xconst long *)data, len)
- extern int _XData32(
- Display *dpy,
- register _Xconst long *data,
- unsigned len
- );
- extern void _XRead32(
- Display *dpy,
- register long *data,
- long len
- );
- #else
- #define Data32(dpy, data, len) Data((dpy), (_Xconst 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)
- /* 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(cs) (((cs)->width == 0) && \
- (((cs)->rbearing|(cs)->lbearing| \
- (cs)->ascent|(cs)->descent) == 0))
- /*
- * CI_GET_CHAR_INFO_1D - return the charinfo struct for the indicated 8bit
- * character. If the character is in the column and exists, then return the
- * appropriate metrics (note that fonts with common per-character metrics will
- * return min_bounds). If none of these hold true, try again with the default
- * char.
- */
- #define CI_GET_CHAR_INFO_1D(fs,col,def,cs) \
- { \
- cs = def; \
- if (col >= fs->min_char_or_byte2 && col <= fs->max_char_or_byte2) { \
- if (fs->per_char == NULL) { \
- cs = &fs->min_bounds; \
- } else { \
- cs = &fs->per_char[(col - fs->min_char_or_byte2)]; \
- if (CI_NONEXISTCHAR(cs)) cs = def; \
- } \
- } \
- }
- #define CI_GET_DEFAULT_INFO_1D(fs,cs) \
- CI_GET_CHAR_INFO_1D (fs, fs->default_char, NULL, cs)
- /*
- * CI_GET_CHAR_INFO_2D - return the charinfo struct for the indicated row and
- * column. This is used for fonts that have more than row zero.
- */
- #define CI_GET_CHAR_INFO_2D(fs,row,col,def,cs) \
- { \
- cs = def; \
- if (row >= fs->min_byte1 && row <= fs->max_byte1 && \
- col >= fs->min_char_or_byte2 && col <= fs->max_char_or_byte2) { \
- if (fs->per_char == NULL) { \
- cs = &fs->min_bounds; \
- } else { \
- cs = &fs->per_char[((row - fs->min_byte1) * \
- (fs->max_char_or_byte2 - \
- fs->min_char_or_byte2 + 1)) + \
- (col - fs->min_char_or_byte2)]; \
- if (CI_NONEXISTCHAR(cs)) cs = def; \
- } \
- } \
- }
- #define CI_GET_DEFAULT_INFO_2D(fs,cs) \
- { \
- unsigned int r = (fs->default_char >> 8); \
- unsigned int c = (fs->default_char & 0xff); \
- CI_GET_CHAR_INFO_2D (fs, r, c, NULL, cs); \
- }
- /* srcvar must be a variable for large architecture version */
- #define OneDataCard32(dpy,dstaddr,srcvar) \
- { *(CARD32 *)(dstaddr) = (srcvar); }
- typedef struct _XInternalAsync {
- struct _XInternalAsync *next;
- /*
- * handler arguments:
- * rep is the generic reply that caused this handler
- * to be invoked. It must also be passed to _XGetAsyncReply.
- * buf and len are opaque values that must be passed to
- * _XGetAsyncReply or _XGetAsyncData.
- * data is the closure stored in this struct.
- * The handler returns True iff it handled this reply.
- */
- Bool (*handler)(
- Display* /* dpy */,
- xReply* /* rep */,
- char* /* buf */,
- int /* len */,
- XPointer /* data */
- );
- XPointer data;
- } _XAsyncHandler;
- typedef struct _XAsyncEState {
- unsigned long min_sequence_number;
- unsigned long max_sequence_number;
- unsigned char error_code;
- unsigned char major_opcode;
- unsigned short minor_opcode;
- unsigned char last_error_received;
- int error_count;
- } _XAsyncErrorState;
- extern void _XDeqAsyncHandler(Display *dpy, _XAsyncHandler *handler);
- #define DeqAsyncHandler(dpy,handler) { \
- if (dpy->async_handlers == (handler)) \
- dpy->async_handlers = (handler)->next; \
- else \
- _XDeqAsyncHandler(dpy, handler); \
- }
- typedef void (*FreeFuncType) (
- Display* /* display */
- );
- typedef int (*FreeModmapType) (
- XModifierKeymap* /* modmap */
- );
- /*
- * This structure is private to the library.
- */
- typedef struct _XFreeFuncs {
- FreeFuncType atoms; /* _XFreeAtomTable */
- FreeModmapType modifiermap; /* XFreeModifiermap */
- FreeFuncType key_bindings; /* _XFreeKeyBindings */
- FreeFuncType context_db; /* _XFreeContextDB */
- FreeFuncType defaultCCCs; /* _XcmsFreeDefaultCCCs */
- FreeFuncType clientCmaps; /* _XcmsFreeClientCmaps */
- FreeFuncType intensityMaps; /* _XcmsFreeIntensityMaps */
- FreeFuncType im_filters; /* _XFreeIMFilters */
- FreeFuncType xkb; /* _XkbFreeInfo */
- } _XFreeFuncRec;
- /* types for InitExt.c */
- typedef int (*CreateGCType) (
- Display* /* display */,
- GC /* gc */,
- XExtCodes* /* codes */
- );
- typedef int (*CopyGCType)(
- Display* /* display */,
- GC /* gc */,
- XExtCodes* /* codes */
- );
- typedef int (*FlushGCType) (
- Display* /* display */,
- GC /* gc */,
- XExtCodes* /* codes */
- );
- typedef int (*FreeGCType) (
- Display* /* display */,
- GC /* gc */,
- XExtCodes* /* codes */
- );
- typedef int (*CreateFontType) (
- Display* /* display */,
- XFontStruct* /* fs */,
- XExtCodes* /* codes */
- );
- typedef int (*FreeFontType) (
- Display* /* display */,
- XFontStruct* /* fs */,
- XExtCodes* /* codes */
- );
- typedef int (*CloseDisplayType) (
- Display* /* display */,
- XExtCodes* /* codes */
- );
- typedef int (*ErrorType) (
- Display* /* display */,
- xError* /* err */,
- XExtCodes* /* codes */,
- int* /* ret_code */
- );
- typedef char* (*ErrorStringType) (
- Display* /* display */,
- int /* code */,
- XExtCodes* /* codes */,
- char* /* buffer */,
- int /* nbytes */
- );
- typedef void (*PrintErrorType)(
- Display* /* display */,
- XErrorEvent* /* ev */,
- void* /* fp */
- );
- typedef void (*BeforeFlushType)(
- Display* /* display */,
- XExtCodes* /* codes */,
- _Xconst char* /* data */,
- long /* len */
- );
- /*
- * This structure is private to the library.
- */
- typedef struct _XExten { /* private to extension mechanism */
- struct _XExten *next; /* next in list */
- XExtCodes codes; /* public information, all extension told */
- CreateGCType create_GC; /* routine to call when GC created */
- CopyGCType copy_GC; /* routine to call when GC copied */
- FlushGCType flush_GC; /* routine to call when GC flushed */
- FreeGCType free_GC; /* routine to call when GC freed */
- CreateFontType create_Font; /* routine to call when Font created */
- FreeFontType free_Font; /* routine to call when Font freed */
- CloseDisplayType close_display; /* routine to call when connection closed */
- ErrorType error; /* who to call when an error occurs */
- ErrorStringType error_string; /* routine to supply error string */
- char *name; /* name of this extension */
- PrintErrorType error_values; /* routine to supply error values */
- BeforeFlushType before_flush; /* routine to call when sending data */
- struct _XExten *next_flush; /* next in list of those with flushes */
- } _XExtension;
- /* Temporary definition until we can depend on an xproto release with it */
- #ifdef _X_COLD
- # define _XLIB_COLD _X_COLD
- #elif defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 403) /* 4.3+ */
- # define _XLIB_COLD __attribute__((__cold__))
- #else
- # define _XLIB_COLD /* nothing */
- #endif
- /* extension hooks */
- #ifdef DataRoutineIsProcedure
- extern void Data(Display *dpy, char *data, long len);
- #endif
- extern int _XError(
- Display* /* dpy */,
- xError* /* rep */
- );
- extern int _XIOError(
- Display* /* dpy */
- ) _X_NORETURN;
- extern int (*_XIOErrorFunction)(
- Display* /* dpy */
- );
- extern int (*_XErrorFunction)(
- Display* /* dpy */,
- XErrorEvent* /* error_event */
- );
- extern void _XEatData(
- Display* /* dpy */,
- unsigned long /* n */
- ) _XLIB_COLD;
- extern void _XEatDataWords(
- Display* /* dpy */,
- unsigned long /* n */
- ) _XLIB_COLD;
- #if defined(__SUNPRO_C) /* Studio compiler alternative to "cold" attribute */
- # pragma rarely_called(_XEatData, _XEatDataWords)
- #endif
- extern char *_XAllocScratch(
- Display* /* dpy */,
- unsigned long /* nbytes */
- );
- extern char *_XAllocTemp(
- Display* /* dpy */,
- unsigned long /* nbytes */
- );
- extern void _XFreeTemp(
- Display* /* dpy */,
- char* /* buf */,
- unsigned long /* nbytes */
- );
- extern Visual *_XVIDtoVisual(
- Display* /* dpy */,
- VisualID /* id */
- );
- extern unsigned long _XSetLastRequestRead(
- Display* /* dpy */,
- xGenericReply* /* rep */
- );
- extern int _XGetHostname(
- char* /* buf */,
- int /* maxlen */
- );
- extern Screen *_XScreenOfWindow(
- Display* /* dpy */,
- Window /* w */
- );
- extern Bool _XAsyncErrorHandler(
- Display* /* dpy */,
- xReply* /* rep */,
- char* /* buf */,
- int /* len */,
- XPointer /* data */
- );
- extern char *_XGetAsyncReply(
- Display* /* dpy */,
- char* /* replbuf */,
- xReply* /* rep */,
- char* /* buf */,
- int /* len */,
- int /* extra */,
- Bool /* discard */
- );
- extern void _XGetAsyncData(
- Display* /* dpy */,
- char * /* data */,
- char * /* buf */,
- int /* len */,
- int /* skip */,
- int /* datalen */,
- int /* discardtotal */
- );
- extern void _XFlush(
- Display* /* dpy */
- );
- extern int _XEventsQueued(
- Display* /* dpy */,
- int /* mode */
- );
- extern void _XReadEvents(
- Display* /* dpy */
- );
- extern int _XRead(
- Display* /* dpy */,
- char* /* data */,
- long /* size */
- );
- extern void _XReadPad(
- Display* /* dpy */,
- char* /* data */,
- long /* size */
- );
- extern void _XSend(
- Display* /* dpy */,
- _Xconst char* /* data */,
- long /* size */
- );
- extern Status _XReply(
- Display* /* dpy */,
- xReply* /* rep */,
- int /* extra */,
- Bool /* discard */
- );
- extern void _XEnq(
- Display* /* dpy */,
- xEvent* /* event */
- );
- extern void _XDeq(
- Display* /* dpy */,
- _XQEvent* /* prev */,
- _XQEvent* /* qelt */
- );
- extern Bool _XUnknownWireEvent(
- Display* /* dpy */,
- XEvent* /* re */,
- xEvent* /* event */
- );
- extern Bool _XUnknownWireEventCookie(
- Display* /* dpy */,
- XGenericEventCookie* /* re */,
- xEvent* /* event */
- );
- extern Bool _XUnknownCopyEventCookie(
- Display* /* dpy */,
- XGenericEventCookie* /* in */,
- XGenericEventCookie* /* out */
- );
- extern Status _XUnknownNativeEvent(
- Display* /* dpy */,
- XEvent* /* re */,
- xEvent* /* event */
- );
- extern Bool _XWireToEvent(Display *dpy, XEvent *re, xEvent *event);
- extern Bool _XDefaultWireError(Display *display, XErrorEvent *he, xError *we);
- extern Bool _XPollfdCacheInit(Display *dpy);
- extern void _XPollfdCacheAdd(Display *dpy, int fd);
- extern void _XPollfdCacheDel(Display *dpy, int fd);
- extern XID _XAllocID(Display *dpy);
- extern void _XAllocIDs(Display *dpy, XID *ids, int count);
- extern int _XFreeExtData(
- XExtData* /* extension */
- );
- extern int (*XESetCreateGC(
- Display* /* display */,
- int /* extension */,
- int (*) (
- Display* /* display */,
- GC /* gc */,
- XExtCodes* /* codes */
- ) /* proc */
- ))(
- Display*, GC, XExtCodes*
- );
- extern int (*XESetCopyGC(
- Display* /* display */,
- int /* extension */,
- int (*) (
- Display* /* display */,
- GC /* gc */,
- XExtCodes* /* codes */
- ) /* proc */
- ))(
- Display*, GC, XExtCodes*
- );
- extern int (*XESetFlushGC(
- Display* /* display */,
- int /* extension */,
- int (*) (
- Display* /* display */,
- GC /* gc */,
- XExtCodes* /* codes */
- ) /* proc */
- ))(
- Display*, GC, XExtCodes*
- );
- extern int (*XESetFreeGC(
- Display* /* display */,
- int /* extension */,
- int (*) (
- Display* /* display */,
- GC /* gc */,
- XExtCodes* /* codes */
- ) /* proc */
- ))(
- Display*, GC, XExtCodes*
- );
- extern int (*XESetCreateFont(
- Display* /* display */,
- int /* extension */,
- int (*) (
- Display* /* display */,
- XFontStruct* /* fs */,
- XExtCodes* /* codes */
- ) /* proc */
- ))(
- Display*, XFontStruct*, XExtCodes*
- );
- extern int (*XESetFreeFont(
- Display* /* display */,
- int /* extension */,
- int (*) (
- Display* /* display */,
- XFontStruct* /* fs */,
- XExtCodes* /* codes */
- ) /* proc */
- ))(
- Display*, XFontStruct*, XExtCodes*
- );
- extern int (*XESetCloseDisplay(
- Display* /* display */,
- int /* extension */,
- int (*) (
- Display* /* display */,
- XExtCodes* /* codes */
- ) /* proc */
- ))(
- Display*, XExtCodes*
- );
- extern int (*XESetError(
- Display* /* display */,
- int /* extension */,
- int (*) (
- Display* /* display */,
- xError* /* err */,
- XExtCodes* /* codes */,
- int* /* ret_code */
- ) /* proc */
- ))(
- Display*, xError*, XExtCodes*, int*
- );
- extern char* (*XESetErrorString(
- Display* /* display */,
- int /* extension */,
- char* (*) (
- Display* /* display */,
- int /* code */,
- XExtCodes* /* codes */,
- char* /* buffer */,
- int /* nbytes */
- ) /* proc */
- ))(
- Display*, int, XExtCodes*, char*, int
- );
- extern void (*XESetPrintErrorValues (
- Display* /* display */,
- int /* extension */,
- void (*)(
- Display* /* display */,
- XErrorEvent* /* ev */,
- void* /* fp */
- ) /* proc */
- ))(
- Display*, XErrorEvent*, void*
- );
- extern Bool (*XESetWireToEvent(
- Display* /* display */,
- int /* event_number */,
- Bool (*) (
- Display* /* display */,
- XEvent* /* re */,
- xEvent* /* event */
- ) /* proc */
- ))(
- Display*, XEvent*, xEvent*
- );
- extern Bool (*XESetWireToEventCookie(
- Display* /* display */,
- int /* extension */,
- Bool (*) (
- Display* /* display */,
- XGenericEventCookie* /* re */,
- xEvent* /* event */
- ) /* proc */
- ))(
- Display*, XGenericEventCookie*, xEvent*
- );
- extern Bool (*XESetCopyEventCookie(
- Display* /* display */,
- int /* extension */,
- Bool (*) (
- Display* /* display */,
- XGenericEventCookie* /* in */,
- XGenericEventCookie* /* out */
- ) /* proc */
- ))(
- Display*, XGenericEventCookie*, XGenericEventCookie*
- );
- extern Status (*XESetEventToWire(
- Display* /* display */,
- int /* event_number */,
- Status (*) (
- Display* /* display */,
- XEvent* /* re */,
- xEvent* /* event */
- ) /* proc */
- ))(
- Display*, XEvent*, xEvent*
- );
- extern Bool (*XESetWireToError(
- Display* /* display */,
- int /* error_number */,
- Bool (*) (
- Display* /* display */,
- XErrorEvent* /* he */,
- xError* /* we */
- ) /* proc */
- ))(
- Display*, XErrorEvent*, xError*
- );
- extern void (*XESetBeforeFlush(
- Display* /* display */,
- int /* error_number */,
- void (*) (
- Display* /* display */,
- XExtCodes* /* codes */,
- _Xconst char* /* data */,
- long /* len */
- ) /* proc */
- ))(
- Display*, XExtCodes*, _Xconst char*, long
- );
- /* internal connections for IMs */
- typedef void (*_XInternalConnectionProc)(
- Display* /* dpy */,
- int /* fd */,
- XPointer /* call_data */
- );
- extern Status _XRegisterInternalConnection(
- Display* /* dpy */,
- int /* fd */,
- _XInternalConnectionProc /* callback */,
- XPointer /* call_data */
- );
- extern void _XUnregisterInternalConnection(
- Display* /* dpy */,
- int /* fd */
- );
- extern void _XProcessInternalConnection(
- Display* /* dpy */,
- struct _XConnectionInfo* /* conn_info */
- );
- /* Display structure has pointers to these */
- struct _XConnectionInfo { /* info from _XRegisterInternalConnection */
- int fd;
- _XInternalConnectionProc read_callback;
- XPointer call_data;
- XPointer *watch_data; /* set/used by XConnectionWatchProc */
- struct _XConnectionInfo *next;
- };
- struct _XConnWatchInfo { /* info from XAddConnectionWatch */
- XConnectionWatchProc fn;
- XPointer client_data;
- struct _XConnWatchInfo *next;
- };
- #ifdef __UNIXOS2__
- extern char* __XOS2RedirRoot(
- char*
- );
- #endif
- extern int _XTextHeight(
- XFontStruct* /* font_struct */,
- _Xconst char* /* string */,
- int /* count */
- );
- extern int _XTextHeight16(
- XFontStruct* /* font_struct */,
- _Xconst XChar2b* /* string */,
- int /* count */
- );
- #if defined(WIN32)
- extern int _XOpenFile(
- _Xconst char* /* path */,
- int /* flags */
- );
- extern int _XOpenFileMode(
- _Xconst char* /* path */,
- int /* flags */,
- mode_t /* mode */
- );
- extern void* _XFopenFile(
- _Xconst char* /* path */,
- _Xconst char* /* mode */
- );
- extern int _XAccessFile(
- _Xconst char* /* path */
- );
- #else
- #define _XOpenFile(path,flags) open(path,flags)
- #define _XOpenFileMode(path,flags,mode) open(path,flags,mode)
- #define _XFopenFile(path,mode) fopen(path,mode)
- #endif
- /* EvToWire.c */
- extern Status _XEventToWire(Display *dpy, XEvent *re, xEvent *event);
- extern int _XF86LoadQueryLocaleFont(
- Display* /* dpy */,
- _Xconst char* /* name*/,
- XFontStruct** /* xfp*/,
- Font* /* fidp */
- );
- extern void _XProcessWindowAttributes (
- register Display *dpy,
- xChangeWindowAttributesReq *req,
- register unsigned long valuemask,
- register XSetWindowAttributes *attributes);
- extern int _XDefaultError(
- Display *dpy,
- XErrorEvent *event);
- extern int _XDefaultIOError(
- Display *dpy);
- extern void _XSetClipRectangles (
- register Display *dpy,
- GC gc,
- int clip_x_origin, int clip_y_origin,
- XRectangle *rectangles,
- int n,
- int ordering);
- Status _XGetWindowAttributes(
- register Display *dpy,
- Window w,
- XWindowAttributes *attr);
- int _XPutBackEvent (
- register Display *dpy,
- register XEvent *event);
- extern Bool _XIsEventCookie(
- Display *dpy,
- XEvent *ev);
- extern void _XFreeEventCookies(
- Display *dpy);
- extern void _XStoreEventCookie(
- Display *dpy,
- XEvent *ev);
- extern Bool _XFetchEventCookie(
- Display *dpy,
- XGenericEventCookie *ev);
- extern Bool _XCopyEventCookie(
- Display *dpy,
- XGenericEventCookie *in,
- XGenericEventCookie *out);
- /* lcFile.c */
- extern void xlocaledir(
- char *buf,
- int buf_len
- );
- #ifdef __clang__
- #pragma clang diagnostic pop
- #endif
- _XFUNCPROTOEND
- #endif /* _X11_XLIBINT_H_ */
|