XKBlibint.h revision 61b2299d
11ab64890Smrg/* $Xorg: XKBlibint.h,v 1.3 2000/08/17 19:45:04 cpqbld Exp $ */
21ab64890Smrg/************************************************************
31ab64890SmrgCopyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
41ab64890Smrg
51ab64890SmrgPermission to use, copy, modify, and distribute this
61ab64890Smrgsoftware and its documentation for any purpose and without
71ab64890Smrgfee is hereby granted, provided that the above copyright
81ab64890Smrgnotice appear in all copies and that both that copyright
91ab64890Smrgnotice and this permission notice appear in supporting
1061b2299dSmrgdocumentation, and that the name of Silicon Graphics not be
1161b2299dSmrgused in advertising or publicity pertaining to distribution
121ab64890Smrgof the software without specific prior written permission.
1361b2299dSmrgSilicon Graphics makes no representation about the suitability
141ab64890Smrgof this software for any purpose. It is provided "as is"
151ab64890Smrgwithout any express or implied warranty.
161ab64890Smrg
1761b2299dSmrgSILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
1861b2299dSmrgSOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
191ab64890SmrgAND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
2061b2299dSmrgGRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
2161b2299dSmrgDAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
2261b2299dSmrgDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
231ab64890SmrgOR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
241ab64890SmrgTHE USE OR PERFORMANCE OF THIS SOFTWARE.
251ab64890Smrg
261ab64890Smrg********************************************************/
271ab64890Smrg/* $XFree86: xc/lib/X11/XKBlibint.h,v 3.5 2003/04/18 18:21:45 torrey Exp $ */
281ab64890Smrg
291ab64890Smrg#ifndef _XKBLIBINT_H_
301ab64890Smrg#define	_XKBLIBINT_H_
311ab64890Smrg
321ab64890Smrg#include <X11/Xutil.h>
331ab64890Smrg#include <X11/XKBlib.h>
341ab64890Smrg
351ab64890Smrg#define	XkbMapPending		(1<<0)
361ab64890Smrg#define	XkbXlibNewKeyboard	(1<<1)
371ab64890Smrg
381ab64890Smrgtypedef int	(*XkbKSToMBFunc)(
391ab64890Smrg	XPointer	/* priv */,
401ab64890Smrg	KeySym		/* sym */,
411ab64890Smrg	char *		/* buf */,
421ab64890Smrg	int		/* len */,
431ab64890Smrg	int *		/* extra_rtrn */
441ab64890Smrg);
451ab64890Smrg
461ab64890Smrgtypedef KeySym	(*XkbMBToKSFunc)(
471ab64890Smrg	XPointer	/* priv */,
481ab64890Smrg	char *		/* buf */,
491ab64890Smrg	int		/* len */,
501ab64890Smrg	Status *	/* status */
511ab64890Smrg);
521ab64890Smrg
531ab64890Smrgtypedef KeySym	(*XkbToUpperFunc)(
541ab64890Smrg	KeySym		/* sym */
551ab64890Smrg);
561ab64890Smrg
571ab64890Smrgtypedef struct _XkbConverters {
581ab64890Smrg	XkbKSToMBFunc	 KSToMB;
591ab64890Smrg	XPointer	 KSToMBPriv;
601ab64890Smrg	XkbMBToKSFunc	 MBToKS;
611ab64890Smrg	XPointer	 MBToKSPriv;
621ab64890Smrg	XkbToUpperFunc	 KSToUpper;
631ab64890Smrg} XkbConverters;
641ab64890Smrg
651ab64890Smrgextern	XkbInternAtomFunc	_XkbInternAtomFunc;
661ab64890Smrgextern	XkbGetAtomNameFunc	_XkbGetAtomNameFunc;
671ab64890Smrg
681ab64890Smrgtypedef struct _XkbInfoRec {
691ab64890Smrg	unsigned	 flags;
701ab64890Smrg	unsigned	 xlib_ctrls;
711ab64890Smrg	XExtCodes	 *codes;
721ab64890Smrg	int		 srv_major;
731ab64890Smrg	int		 srv_minor;
741ab64890Smrg	unsigned	 selected_events;
751ab64890Smrg	unsigned short	 selected_nkn_details;
761ab64890Smrg	unsigned short	 selected_map_details;
771ab64890Smrg	XkbDescRec	*desc;
781ab64890Smrg	XkbMapChangesRec changes;
791ab64890Smrg	Atom		 composeLED;
801ab64890Smrg	XkbConverters	 cvt;
811ab64890Smrg	XkbConverters	 latin1cvt;
821ab64890Smrg} XkbInfoRec, *XkbInfoPtr;
831ab64890Smrg
841ab64890Smrg
851ab64890Smrg#define	_XkbUnavailable(d) \
861ab64890Smrg	(((d)->flags&XlibDisplayNoXkb) ||\
871ab64890Smrg	 ((!(d)->xkb_info || (!(d)->xkb_info->desc)) && !_XkbLoadDpy(d)))
881ab64890Smrg
891ab64890Smrg#define	_XkbCheckPendingRefresh(d,xi) {\
901ab64890Smrg    if ((xi)->flags&XkbXlibNewKeyboard)\
911ab64890Smrg	_XkbReloadDpy((d));\
921ab64890Smrg    else if ((xi)->flags&XkbMapPending) {\
931ab64890Smrg	if (XkbGetMapChanges((d),(xi)->desc, &(xi)->changes)==Success) {\
941ab64890Smrg	    LockDisplay((d));\
951ab64890Smrg	    (xi)->changes.changed= 0;\
961ab64890Smrg	    UnlockDisplay((d));\
971ab64890Smrg	}\
981ab64890Smrg    }\
991ab64890Smrg}
1001ab64890Smrg
1011ab64890Smrg#define	_XkbNeedModmap(i)    ((!(i)->desc->map)||(!(i)->desc->map->modmap))
1021ab64890Smrg
1031ab64890Smrg	/*
1041ab64890Smrg	 * mask of the events that the "invisible" XKB support in Xlib needs
1051ab64890Smrg	 */
1061ab64890Smrg#define XKB_XLIB_MAP_MASK (XkbAllClientInfoMask)
1071ab64890Smrg
1081ab64890Smrg	/*
10961b2299dSmrg	 * Handy helper macros
1101ab64890Smrg	 */
1111ab64890Smrg#define	XKB_INSURE_SIZE(f,t,nNum,oNum)	{\
1121ab64890Smrg	if ((f)==NULL)	\
1131ab64890Smrg	     (f)=(t *)Xmalloc(sizeof(t)*(nNum));\
1141ab64890Smrg	else if ((nNum)<(oNum))\
1151ab64890Smrg	     (f)=(t *)Xrealloc((f),sizeof(t)*(nNum));\
1161ab64890Smrg	}
1171ab64890Smrg
1181ab64890Smrgtypedef struct _XkbReadBuffer {
1191ab64890Smrg	int	 error;
1201ab64890Smrg	int	 size;
1211ab64890Smrg	char	*start;
1221ab64890Smrg	char	*data;
1231ab64890Smrg} XkbReadBufferRec,*XkbReadBufferPtr;
1241ab64890Smrg
1251ab64890Smrg#define	_XkbAlloc(s)		Xmalloc((s))
1261ab64890Smrg#define	_XkbCalloc(n,s)		Xcalloc((n),(s))
1271ab64890Smrg#define	_XkbRealloc(o,s)	Xrealloc((o),(s))
1281ab64890Smrg#define	_XkbTypedAlloc(t)	((t *)Xmalloc(sizeof(t)))
1291ab64890Smrg#define	_XkbTypedCalloc(n,t)	((t *)Xcalloc((n),sizeof(t)))
1301ab64890Smrg#define	_XkbTypedRealloc(o,n,t) \
1311ab64890Smrg	((o)?(t *)Xrealloc((o),(n)*sizeof(t)):_XkbTypedCalloc(n,t))
1321ab64890Smrg#define	_XkbClearElems(a,f,l,t)	bzero(&(a)[f],((l)-(f)+1)*sizeof(t))
1331ab64890Smrg#define	_XkbFree(p)		Xfree(p)
1341ab64890Smrg
1351ab64890Smrg_XFUNCPROTOBEGIN
1361ab64890Smrg
1371ab64890Smrgextern	void _XkbReloadDpy(
1381ab64890Smrg    Display *		/* dpy */
1391ab64890Smrg);
1401ab64890Smrg
1411ab64890Smrgextern KeySym _XKeycodeToKeysym(
1421ab64890Smrg    Display*		/* display */,
1431ab64890Smrg#if NeedWidePrototypes
1441ab64890Smrg    unsigned int	/* keycode */,
1451ab64890Smrg#else
1461ab64890Smrg    KeyCode		/* keycode */,
1471ab64890Smrg#endif
1481ab64890Smrg    int			/* index */
1491ab64890Smrg);
1501ab64890Smrg
1511ab64890Smrgextern KeyCode _XKeysymToKeycode(
1521ab64890Smrg    Display*		/* display */,
1531ab64890Smrg    KeySym		/* keysym */
1541ab64890Smrg);
1551ab64890Smrg
1561ab64890Smrgextern KeySym _XLookupKeysym(
1571ab64890Smrg    XKeyEvent*		/* key_event */,
1581ab64890Smrg    int			/* index */
1591ab64890Smrg);
1601ab64890Smrg
1611ab64890Smrgextern int _XRefreshKeyboardMapping(
16261b2299dSmrg    XMappingEvent*	/* event_map */
1631ab64890Smrg);
1641ab64890Smrg
1651ab64890Smrgextern unsigned	_XKeysymToModifiers(
1661ab64890Smrg    Display *		/* dpy */,
1671ab64890Smrg    KeySym 		/* ks */
1681ab64890Smrg);
1691ab64890Smrg
17061b2299dSmrgextern int _XTranslateKey(
1711ab64890Smrg    register Display *	/* dpy */,
1721ab64890Smrg    KeyCode 		/* keycode */,
1731ab64890Smrg    register unsigned int /* modifiers */,
1741ab64890Smrg    unsigned int *	/* modifiers_return */,
1751ab64890Smrg    KeySym *		/* keysym_return */
1761ab64890Smrg);
1771ab64890Smrg
1781ab64890Smrgextern int	_XTranslateKeySym(
1791ab64890Smrg    Display *		/* dpy */,
1801ab64890Smrg    register KeySym 	/* symbol */,
1811ab64890Smrg    unsigned int 	/* modifiers */,
1821ab64890Smrg    char *		/* buffer */,
1831ab64890Smrg    int 		/* nbytes */
1841ab64890Smrg);
1851ab64890Smrg
1861ab64890Smrgextern	int _XLookupString(
1871ab64890Smrg    register XKeyEvent *	/* event */,
1881ab64890Smrg    char *			/* buffer */,
1891ab64890Smrg    int 			/* nbytes */,
1901ab64890Smrg    KeySym *			/* keysym */,
1911ab64890Smrg    XComposeStatus *		/* status */
1921ab64890Smrg);
1931ab64890Smrg
1941ab64890Smrgextern void _XkbNoteCoreMapChanges(
1951ab64890Smrg    XkbMapChangesRec * 		/* old */,
1961ab64890Smrg    XMappingEvent * 		/* new */,
1971ab64890Smrg    unsigned int 		/* wanted */
1981ab64890Smrg);
1991ab64890Smrg
2001ab64890Smrgextern	int _XkbInitReadBuffer(
2011ab64890Smrg    Display *		/* dpy */,
2021ab64890Smrg    XkbReadBufferPtr	/* buf */,
2031ab64890Smrg    int			/* size */
2041ab64890Smrg);
2051ab64890Smrg
2061ab64890Smrgextern int _XkbSkipReadBufferData(
2071ab64890Smrg    XkbReadBufferPtr	/* from */,
2081ab64890Smrg    int			/* size */
2091ab64890Smrg);
2101ab64890Smrg
2111ab64890Smrgextern int _XkbCopyFromReadBuffer(
2121ab64890Smrg    XkbReadBufferPtr	/* from */,
2131ab64890Smrg    char *		/* to */,
2141ab64890Smrg    int			/* size */
2151ab64890Smrg);
2161ab64890Smrg
2171ab64890Smrg
2181ab64890Smrg#if defined(WORD64) || defined(LONG64)
2191ab64890Smrgextern	int _XkbReadCopyData32(
2201ab64890Smrg    int *		/* from */,
2211ab64890Smrg    long *		/* to */,
2221ab64890Smrg    int			/* num_words */
2231ab64890Smrg);
2241ab64890Smrg
2251ab64890Smrgextern	int _XkbWriteCopyData32(
2261ab64890Smrg    unsigned long *	/* from */,
2271ab64890Smrg    CARD32 *		/* to */,
2281ab64890Smrg    int			/* num_words */
2291ab64890Smrg);
2301ab64890Smrg
2311ab64890Smrgextern int _XkbReadBufferCopy32(
2321ab64890Smrg    XkbReadBufferPtr	/* from */,
2331ab64890Smrg    long *		/* to */,
2341ab64890Smrg    int			/* size */
2351ab64890Smrg);
2361ab64890Smrg#else
2371ab64890Smrg#define	_XkbReadCopyData32(f,t,s)    memcpy((char *)(t),(char *)(f),(s)*4)
2381ab64890Smrg#define	_XkbWriteCopyData32(f,t,s)   memcpy((char *)(t),(char *)(f),(s)*4)
2391ab64890Smrg#define	_XkbReadBufferCopy32(f,t,s) _XkbCopyFromReadBuffer(f,(char *)t,(s)*4)
2401ab64890Smrg#endif
2411ab64890Smrg
2421ab64890Smrg#ifndef NO_DEC_BINARY_COMPATIBILITY
2431ab64890Smrg#define XKB_FORCE_INT_KEYSYM 1
2441ab64890Smrg#endif
2451ab64890Smrg
2461ab64890Smrg#ifdef XKB_FORCE_INT_KEYSYM
2471ab64890Smrgextern int _XkbReadCopyKeySyms(
2481ab64890Smrg    int *		/* from */,
2491ab64890Smrg    KeySym *		/* to */,
2501ab64890Smrg    int			/* num_words */
2511ab64890Smrg);
2521ab64890Smrg
2531ab64890Smrgextern	int _XkbWriteCopyKeySyms(
2541ab64890Smrg    KeySym *		/* from */,
2551ab64890Smrg    CARD32 *		/* to */,
2561ab64890Smrg    int			/* num_words */
2571ab64890Smrg);
2581ab64890Smrg
2591ab64890Smrgextern int _XkbReadBufferCopyKeySyms(
2601ab64890Smrg    XkbReadBufferPtr	/* from */,
2611ab64890Smrg#ifndef NO_DEC_BUG_FIX
2621ab64890Smrg    KeySym *		/* to */,
2631ab64890Smrg#else
2641ab64890Smrg    long *		/* to */,
2651ab64890Smrg#endif
2661ab64890Smrg    int			/* size */
2671ab64890Smrg);
2681ab64890Smrg#else
2691ab64890Smrg#define	_XkbReadCopyKeySyms(f,t,n)		_XkbReadCopyData32(f,t,n)
2701ab64890Smrg#define	_XkbWriteCopyKeySyms(f,t,n)		_XkbWriteCopyData32(f,t,n)
2711ab64890Smrg#define	_XkbReadBufferCopyKeySyms(f,t,s)	_XkbReadBufferCopy32(f,t,s)
2721ab64890Smrg#endif
2731ab64890Smrg
2741ab64890Smrgextern char *_XkbPeekAtReadBuffer(
2751ab64890Smrg    XkbReadBufferPtr	/* from */,
2761ab64890Smrg    int			/*  size */
2771ab64890Smrg);
2781ab64890Smrg
2791ab64890Smrgextern char *_XkbGetReadBufferPtr(
2801ab64890Smrg    XkbReadBufferPtr	/* from */,
2811ab64890Smrg    int			/* size */
2821ab64890Smrg);
2831ab64890Smrg#define	_XkbGetTypedRdBufPtr(b,n,t) ((t *)_XkbGetReadBufferPtr(b,(n)*SIZEOF(t)))
2841ab64890Smrg
2851ab64890Smrgextern int _XkbFreeReadBuffer(
2861ab64890Smrg    XkbReadBufferPtr	/* buf */
2871ab64890Smrg);
2881ab64890Smrg
2891ab64890Smrgextern Bool
2901ab64890Smrg_XkbGetReadBufferCountedString(
2911ab64890Smrg    XkbReadBufferPtr	/* buf */,
2921ab64890Smrg    char **		/* rtrn */
2931ab64890Smrg);
2941ab64890Smrg
2951ab64890Smrgextern char	*_XkbGetCharset(
2961ab64890Smrg    void
2971ab64890Smrg);
2981ab64890Smrg
2991ab64890Smrgextern int	 _XkbGetConverters(
3001ab64890Smrg    const char *       /* encoding_name */,
3011ab64890Smrg    XkbConverters *    /* cvt_rtrn */
3021ab64890Smrg);
3031ab64890Smrg
3041ab64890Smrg#ifdef	NEED_MAP_READERS
3051ab64890Smrg
3061ab64890Smrgextern	Status	_XkbReadGetMapReply(
3071ab64890Smrg    Display *		/* dpy */,
3081ab64890Smrg    xkbGetMapReply * 	/* rep */,
3091ab64890Smrg    XkbDescRec *	/* xkb */,
3101ab64890Smrg    int *		/* nread_rtrn */
3111ab64890Smrg);
3121ab64890Smrg
3131ab64890Smrgextern	Status	_XkbReadGetCompatMapReply(
3141ab64890Smrg    Display *			/* dpy */,
3151ab64890Smrg    xkbGetCompatMapReply *	/* rep */,
3161ab64890Smrg    XkbDescPtr			/* xkb */,
3171ab64890Smrg    int	*			/* nread_rtrn */
3181ab64890Smrg);
3191ab64890Smrg
3201ab64890Smrgextern	Status	_XkbReadGetIndicatorMapReply(
3211ab64890Smrg    Display *			/* dpy */,
3221ab64890Smrg    xkbGetIndicatorMapReply *	/* rep */,
3231ab64890Smrg    XkbDescPtr			/* xkb */,
3241ab64890Smrg    int	*			/* nread_rtrn */
3251ab64890Smrg);
3261ab64890Smrg
3271ab64890Smrgextern	Status	_XkbReadGetNamesReply(
3281ab64890Smrg    Display *			/* dpy */,
3291ab64890Smrg    xkbGetNamesReply *		/* rep */,
3301ab64890Smrg    XkbDescPtr 			/* xkb */,
3311ab64890Smrg    int *			/* nread_rtrn */
3321ab64890Smrg);
3331ab64890Smrg
3341ab64890Smrgextern	Status	_XkbReadGetGeometryReply(
3351ab64890Smrg    Display *			/* dpy */,
3361ab64890Smrg    xkbGetGeometryReply *	/* rep */,
3371ab64890Smrg    XkbDescPtr 			/* xkb */,
3381ab64890Smrg    int *			/* nread_rtrn */
3391ab64890Smrg);
3401ab64890Smrg
3411ab64890Smrg#endif
3421ab64890Smrg
3431ab64890Smrg_XFUNCPROTOEND
3441ab64890Smrg
3451ab64890Smrg#endif /* _XKBLIBINT_H_ */
346