XKBlibint.h revision 61b2299d
1/* $Xorg: XKBlibint.h,v 1.3 2000/08/17 19:45:04 cpqbld Exp $ */
2/************************************************************
3Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
4
5Permission to use, copy, modify, and distribute this
6software and its documentation for any purpose and without
7fee is hereby granted, provided that the above copyright
8notice appear in all copies and that both that copyright
9notice and this permission notice appear in supporting
10documentation, and that the name of Silicon Graphics not be
11used in advertising or publicity pertaining to distribution
12of the software without specific prior written permission.
13Silicon Graphics makes no representation about the suitability
14of this software for any purpose. It is provided "as is"
15without any express or implied warranty.
16
17SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
18SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
19AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
20GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
21DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
22DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
23OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
24THE USE OR PERFORMANCE OF THIS SOFTWARE.
25
26********************************************************/
27/* $XFree86: xc/lib/X11/XKBlibint.h,v 3.5 2003/04/18 18:21:45 torrey Exp $ */
28
29#ifndef _XKBLIBINT_H_
30#define	_XKBLIBINT_H_
31
32#include <X11/Xutil.h>
33#include <X11/XKBlib.h>
34
35#define	XkbMapPending		(1<<0)
36#define	XkbXlibNewKeyboard	(1<<1)
37
38typedef int	(*XkbKSToMBFunc)(
39	XPointer	/* priv */,
40	KeySym		/* sym */,
41	char *		/* buf */,
42	int		/* len */,
43	int *		/* extra_rtrn */
44);
45
46typedef KeySym	(*XkbMBToKSFunc)(
47	XPointer	/* priv */,
48	char *		/* buf */,
49	int		/* len */,
50	Status *	/* status */
51);
52
53typedef KeySym	(*XkbToUpperFunc)(
54	KeySym		/* sym */
55);
56
57typedef struct _XkbConverters {
58	XkbKSToMBFunc	 KSToMB;
59	XPointer	 KSToMBPriv;
60	XkbMBToKSFunc	 MBToKS;
61	XPointer	 MBToKSPriv;
62	XkbToUpperFunc	 KSToUpper;
63} XkbConverters;
64
65extern	XkbInternAtomFunc	_XkbInternAtomFunc;
66extern	XkbGetAtomNameFunc	_XkbGetAtomNameFunc;
67
68typedef struct _XkbInfoRec {
69	unsigned	 flags;
70	unsigned	 xlib_ctrls;
71	XExtCodes	 *codes;
72	int		 srv_major;
73	int		 srv_minor;
74	unsigned	 selected_events;
75	unsigned short	 selected_nkn_details;
76	unsigned short	 selected_map_details;
77	XkbDescRec	*desc;
78	XkbMapChangesRec changes;
79	Atom		 composeLED;
80	XkbConverters	 cvt;
81	XkbConverters	 latin1cvt;
82} XkbInfoRec, *XkbInfoPtr;
83
84
85#define	_XkbUnavailable(d) \
86	(((d)->flags&XlibDisplayNoXkb) ||\
87	 ((!(d)->xkb_info || (!(d)->xkb_info->desc)) && !_XkbLoadDpy(d)))
88
89#define	_XkbCheckPendingRefresh(d,xi) {\
90    if ((xi)->flags&XkbXlibNewKeyboard)\
91	_XkbReloadDpy((d));\
92    else if ((xi)->flags&XkbMapPending) {\
93	if (XkbGetMapChanges((d),(xi)->desc, &(xi)->changes)==Success) {\
94	    LockDisplay((d));\
95	    (xi)->changes.changed= 0;\
96	    UnlockDisplay((d));\
97	}\
98    }\
99}
100
101#define	_XkbNeedModmap(i)    ((!(i)->desc->map)||(!(i)->desc->map->modmap))
102
103	/*
104	 * mask of the events that the "invisible" XKB support in Xlib needs
105	 */
106#define XKB_XLIB_MAP_MASK (XkbAllClientInfoMask)
107
108	/*
109	 * Handy helper macros
110	 */
111#define	XKB_INSURE_SIZE(f,t,nNum,oNum)	{\
112	if ((f)==NULL)	\
113	     (f)=(t *)Xmalloc(sizeof(t)*(nNum));\
114	else if ((nNum)<(oNum))\
115	     (f)=(t *)Xrealloc((f),sizeof(t)*(nNum));\
116	}
117
118typedef struct _XkbReadBuffer {
119	int	 error;
120	int	 size;
121	char	*start;
122	char	*data;
123} XkbReadBufferRec,*XkbReadBufferPtr;
124
125#define	_XkbAlloc(s)		Xmalloc((s))
126#define	_XkbCalloc(n,s)		Xcalloc((n),(s))
127#define	_XkbRealloc(o,s)	Xrealloc((o),(s))
128#define	_XkbTypedAlloc(t)	((t *)Xmalloc(sizeof(t)))
129#define	_XkbTypedCalloc(n,t)	((t *)Xcalloc((n),sizeof(t)))
130#define	_XkbTypedRealloc(o,n,t) \
131	((o)?(t *)Xrealloc((o),(n)*sizeof(t)):_XkbTypedCalloc(n,t))
132#define	_XkbClearElems(a,f,l,t)	bzero(&(a)[f],((l)-(f)+1)*sizeof(t))
133#define	_XkbFree(p)		Xfree(p)
134
135_XFUNCPROTOBEGIN
136
137extern	void _XkbReloadDpy(
138    Display *		/* dpy */
139);
140
141extern KeySym _XKeycodeToKeysym(
142    Display*		/* display */,
143#if NeedWidePrototypes
144    unsigned int	/* keycode */,
145#else
146    KeyCode		/* keycode */,
147#endif
148    int			/* index */
149);
150
151extern KeyCode _XKeysymToKeycode(
152    Display*		/* display */,
153    KeySym		/* keysym */
154);
155
156extern KeySym _XLookupKeysym(
157    XKeyEvent*		/* key_event */,
158    int			/* index */
159);
160
161extern int _XRefreshKeyboardMapping(
162    XMappingEvent*	/* event_map */
163);
164
165extern unsigned	_XKeysymToModifiers(
166    Display *		/* dpy */,
167    KeySym 		/* ks */
168);
169
170extern int _XTranslateKey(
171    register Display *	/* dpy */,
172    KeyCode 		/* keycode */,
173    register unsigned int /* modifiers */,
174    unsigned int *	/* modifiers_return */,
175    KeySym *		/* keysym_return */
176);
177
178extern int	_XTranslateKeySym(
179    Display *		/* dpy */,
180    register KeySym 	/* symbol */,
181    unsigned int 	/* modifiers */,
182    char *		/* buffer */,
183    int 		/* nbytes */
184);
185
186extern	int _XLookupString(
187    register XKeyEvent *	/* event */,
188    char *			/* buffer */,
189    int 			/* nbytes */,
190    KeySym *			/* keysym */,
191    XComposeStatus *		/* status */
192);
193
194extern void _XkbNoteCoreMapChanges(
195    XkbMapChangesRec * 		/* old */,
196    XMappingEvent * 		/* new */,
197    unsigned int 		/* wanted */
198);
199
200extern	int _XkbInitReadBuffer(
201    Display *		/* dpy */,
202    XkbReadBufferPtr	/* buf */,
203    int			/* size */
204);
205
206extern int _XkbSkipReadBufferData(
207    XkbReadBufferPtr	/* from */,
208    int			/* size */
209);
210
211extern int _XkbCopyFromReadBuffer(
212    XkbReadBufferPtr	/* from */,
213    char *		/* to */,
214    int			/* size */
215);
216
217
218#if defined(WORD64) || defined(LONG64)
219extern	int _XkbReadCopyData32(
220    int *		/* from */,
221    long *		/* to */,
222    int			/* num_words */
223);
224
225extern	int _XkbWriteCopyData32(
226    unsigned long *	/* from */,
227    CARD32 *		/* to */,
228    int			/* num_words */
229);
230
231extern int _XkbReadBufferCopy32(
232    XkbReadBufferPtr	/* from */,
233    long *		/* to */,
234    int			/* size */
235);
236#else
237#define	_XkbReadCopyData32(f,t,s)    memcpy((char *)(t),(char *)(f),(s)*4)
238#define	_XkbWriteCopyData32(f,t,s)   memcpy((char *)(t),(char *)(f),(s)*4)
239#define	_XkbReadBufferCopy32(f,t,s) _XkbCopyFromReadBuffer(f,(char *)t,(s)*4)
240#endif
241
242#ifndef NO_DEC_BINARY_COMPATIBILITY
243#define XKB_FORCE_INT_KEYSYM 1
244#endif
245
246#ifdef XKB_FORCE_INT_KEYSYM
247extern int _XkbReadCopyKeySyms(
248    int *		/* from */,
249    KeySym *		/* to */,
250    int			/* num_words */
251);
252
253extern	int _XkbWriteCopyKeySyms(
254    KeySym *		/* from */,
255    CARD32 *		/* to */,
256    int			/* num_words */
257);
258
259extern int _XkbReadBufferCopyKeySyms(
260    XkbReadBufferPtr	/* from */,
261#ifndef NO_DEC_BUG_FIX
262    KeySym *		/* to */,
263#else
264    long *		/* to */,
265#endif
266    int			/* size */
267);
268#else
269#define	_XkbReadCopyKeySyms(f,t,n)		_XkbReadCopyData32(f,t,n)
270#define	_XkbWriteCopyKeySyms(f,t,n)		_XkbWriteCopyData32(f,t,n)
271#define	_XkbReadBufferCopyKeySyms(f,t,s)	_XkbReadBufferCopy32(f,t,s)
272#endif
273
274extern char *_XkbPeekAtReadBuffer(
275    XkbReadBufferPtr	/* from */,
276    int			/*  size */
277);
278
279extern char *_XkbGetReadBufferPtr(
280    XkbReadBufferPtr	/* from */,
281    int			/* size */
282);
283#define	_XkbGetTypedRdBufPtr(b,n,t) ((t *)_XkbGetReadBufferPtr(b,(n)*SIZEOF(t)))
284
285extern int _XkbFreeReadBuffer(
286    XkbReadBufferPtr	/* buf */
287);
288
289extern Bool
290_XkbGetReadBufferCountedString(
291    XkbReadBufferPtr	/* buf */,
292    char **		/* rtrn */
293);
294
295extern char	*_XkbGetCharset(
296    void
297);
298
299extern int	 _XkbGetConverters(
300    const char *       /* encoding_name */,
301    XkbConverters *    /* cvt_rtrn */
302);
303
304#ifdef	NEED_MAP_READERS
305
306extern	Status	_XkbReadGetMapReply(
307    Display *		/* dpy */,
308    xkbGetMapReply * 	/* rep */,
309    XkbDescRec *	/* xkb */,
310    int *		/* nread_rtrn */
311);
312
313extern	Status	_XkbReadGetCompatMapReply(
314    Display *			/* dpy */,
315    xkbGetCompatMapReply *	/* rep */,
316    XkbDescPtr			/* xkb */,
317    int	*			/* nread_rtrn */
318);
319
320extern	Status	_XkbReadGetIndicatorMapReply(
321    Display *			/* dpy */,
322    xkbGetIndicatorMapReply *	/* rep */,
323    XkbDescPtr			/* xkb */,
324    int	*			/* nread_rtrn */
325);
326
327extern	Status	_XkbReadGetNamesReply(
328    Display *			/* dpy */,
329    xkbGetNamesReply *		/* rep */,
330    XkbDescPtr 			/* xkb */,
331    int *			/* nread_rtrn */
332);
333
334extern	Status	_XkbReadGetGeometryReply(
335    Display *			/* dpy */,
336    xkbGetGeometryReply *	/* rep */,
337    XkbDescPtr 			/* xkb */,
338    int *			/* nread_rtrn */
339);
340
341#endif
342
343_XFUNCPROTOEND
344
345#endif /* _XKBLIBINT_H_ */
346