#ifndef _XKBLIBINT_H_
#define _XKBLIBINT_H_
#include <X11/Xutil.h>
#include <X11/XKBlib.h>
#define XkbMapPending (1<<0)
#define XkbXlibNewKeyboard (1<<1)
typedef int (*XkbKSToMBFunc)(
XPointer ,
KeySym ,
char * ,
int ,
int *
);
typedef KeySym (*XkbMBToKSFunc)(
XPointer ,
char * ,
int ,
Status *
);
typedef KeySym (*XkbToUpperFunc)(
KeySym
);
typedef struct _XkbConverters {
XkbKSToMBFunc KSToMB;
XPointer KSToMBPriv;
XkbMBToKSFunc MBToKS;
XPointer MBToKSPriv;
XkbToUpperFunc KSToUpper;
} XkbConverters;
extern XkbInternAtomFunc _XkbInternAtomFunc;
extern XkbGetAtomNameFunc _XkbGetAtomNameFunc;
typedef struct _XkbInfoRec {
unsigned flags;
unsigned xlib_ctrls;
XExtCodes *codes;
int srv_major;
int srv_minor;
unsigned selected_events;
unsigned short selected_nkn_details;
unsigned short selected_map_details;
XkbDescRec *desc;
XkbMapChangesRec changes;
Atom composeLED;
XkbConverters cvt;
XkbConverters latin1cvt;
} XkbInfoRec, *XkbInfoPtr;
#define _XkbUnavailable(d) \
(((d)->flags&XlibDisplayNoXkb) ||\
((!(d)->xkb_info || (!(d)->xkb_info->desc)) && !_XkbLoadDpy(d)))
#define _XkbCheckPendingRefresh(d,xi) {\
if ((xi)->flags&XkbXlibNewKeyboard)\
_XkbReloadDpy((d));\
else if ((xi)->flags&XkbMapPending) {\
if (XkbGetMapChanges((d),(xi)->desc, &(xi)->changes)==Success) {\
LockDisplay((d));\
(xi)->changes.changed= 0;\
UnlockDisplay((d));\
}\
}\
}
#define _XkbNeedModmap(i) ((!(i)->desc->map)||(!(i)->desc->map->modmap))
#define XKB_XLIB_MAP_MASK (XkbAllClientInfoMask)
#define XKB_INSURE_SIZE(f,t,nNum,oNum) {\
if ((f)==NULL) \
(f)=(t *)Xmalloc(sizeof(t)*(nNum));\
else if ((nNum)<(oNum))\
(f)=(t *)Xrealloc((f),sizeof(t)*(nNum));\
}
typedef struct _XkbReadBuffer {
int error;
int size;
char *start;
char *data;
} XkbReadBufferRec,*XkbReadBufferPtr;
#define _XkbAlloc(s) Xmalloc((s))
#define _XkbCalloc(n,s) Xcalloc((n),(s))
#define _XkbRealloc(o,s) Xrealloc((o),(s))
#define _XkbTypedAlloc(t) ((t *)Xmalloc(sizeof(t)))
#define _XkbTypedCalloc(n,t) ((t *)Xcalloc((n),sizeof(t)))
#define _XkbTypedRealloc(o,n,t) \
((o)?(t *)Xrealloc((o),(n)*sizeof(t)):_XkbTypedCalloc(n,t))
#define _XkbClearElems(a,f,l,t) bzero(&(a)[f],((l)-(f)+1)*sizeof(t))
#define _XkbFree(p) Xfree(p)
_XFUNCPROTOBEGIN
extern void _XkbReloadDpy(
Display *
);
extern KeySym _XKeycodeToKeysym(
Display* ,
#if NeedWidePrototypes
unsigned int ,
#else
KeyCode ,
#endif
int
);
extern KeyCode _XKeysymToKeycode(
Display* ,
KeySym
);
extern KeySym _XLookupKeysym(
XKeyEvent* ,
int
);
extern int _XRefreshKeyboardMapping(
XMappingEvent*
);
extern unsigned _XKeysymToModifiers(
Display * ,
KeySym
);
extern int _XTranslateKey(
register Display * ,
KeyCode ,
register unsigned int ,
unsigned int * ,
KeySym *
);
extern int _XTranslateKeySym(
Display * ,
register KeySym ,
unsigned int ,
char * ,
int
);
extern int _XLookupString(
register XKeyEvent * ,
char * ,
int ,
KeySym * ,
XComposeStatus *
);
extern void _XkbNoteCoreMapChanges(
XkbMapChangesRec * ,
XMappingEvent * ,
unsigned int
);
extern int _XkbInitReadBuffer(
Display * ,
XkbReadBufferPtr ,
int
);
extern int _XkbSkipReadBufferData(
XkbReadBufferPtr ,
int
);
extern int _XkbCopyFromReadBuffer(
XkbReadBufferPtr ,
char * ,
int
);
#if defined(WORD64) || defined(LONG64)
extern int _XkbReadCopyData32(
int * ,
long * ,
int
);
extern int _XkbWriteCopyData32(
unsigned long * ,
CARD32 * ,
int
);
extern int _XkbReadBufferCopy32(
XkbReadBufferPtr ,
long * ,
int
);
#else
#define _XkbReadCopyData32(f,t,s) memcpy((char *)(t),(char *)(f),(s)*4)
#define _XkbWriteCopyData32(f,t,s) memcpy((char *)(t),(char *)(f),(s)*4)
#define _XkbReadBufferCopy32(f,t,s) _XkbCopyFromReadBuffer(f,(char *)t,(s)*4)
#endif
#ifndef NO_DEC_BINARY_COMPATIBILITY
#define XKB_FORCE_INT_KEYSYM 1
#endif
#ifdef XKB_FORCE_INT_KEYSYM
extern int _XkbReadCopyKeySyms(
int * ,
KeySym * ,
int
);
extern int _XkbWriteCopyKeySyms(
KeySym * ,
CARD32 * ,
int
);
extern int _XkbReadBufferCopyKeySyms(
XkbReadBufferPtr ,
#ifndef NO_DEC_BUG_FIX
KeySym * ,
#else
long * ,
#endif
int
);
#else
#define _XkbReadCopyKeySyms(f,t,n) _XkbReadCopyData32(f,t,n)
#define _XkbWriteCopyKeySyms(f,t,n) _XkbWriteCopyData32(f,t,n)
#define _XkbReadBufferCopyKeySyms(f,t,s) _XkbReadBufferCopy32(f,t,s)
#endif
extern char *_XkbPeekAtReadBuffer(
XkbReadBufferPtr ,
int
);
extern char *_XkbGetReadBufferPtr(
XkbReadBufferPtr ,
int
);
#define _XkbGetTypedRdBufPtr(b,n,t) ((t *)_XkbGetReadBufferPtr(b,(n)*SIZEOF(t)))
extern int _XkbFreeReadBuffer(
XkbReadBufferPtr
);
extern Bool
_XkbGetReadBufferCountedString(
XkbReadBufferPtr ,
char **
);
extern char *_XkbGetCharset(
void
);
extern int _XkbGetConverters(
const char * ,
XkbConverters *
);
#ifdef NEED_MAP_READERS
extern Status _XkbReadGetMapReply(
Display * ,
xkbGetMapReply * ,
XkbDescRec * ,
int *
);
extern Status _XkbReadGetCompatMapReply(
Display * ,
xkbGetCompatMapReply * ,
XkbDescPtr ,
int *
);
extern Status _XkbReadGetIndicatorMapReply(
Display * ,
xkbGetIndicatorMapReply * ,
XkbDescPtr ,
int *
);
extern Status _XkbReadGetNamesReply(
Display * ,
xkbGetNamesReply * ,
XkbDescPtr ,
int *
);
extern Status _XkbReadGetGeometryReply(
Display * ,
xkbGetGeometryReply * ,
XkbDescPtr ,
int *
);
#endif
_XFUNCPROTOEND
#endif