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