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