XKBlibint.h revision 818534a1
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
110typedef struct _XkbReadBuffer {
111        int      error;
112        int      size;
113        char    *start;
114        char    *data;
115} XkbReadBufferRec, *XkbReadBufferPtr;
116
117#define _XkbAlloc(s)            Xmalloc((s))
118#define _XkbCalloc(n,s)         Xcalloc((n),(s))
119#define _XkbRealloc(o,s)        Xrealloc((o),(s))
120#define _XkbTypedAlloc(t)       ((t *)Xmalloc(sizeof(t)))
121#define _XkbTypedCalloc(n,t)    ((t *)Xcalloc((n),sizeof(t)))
122#define _XkbTypedRealloc(o,n,t) \
123        ((o) ? (t *)Xrealloc((o), (n)*sizeof(t)) : _XkbTypedCalloc(n,t))
124#define _XkbClearElems(a,f,l,t) bzero(&(a)[f], ((l)-(f)+1) * sizeof(t))
125#define _XkbFree(p)             Xfree(p)
126
127_XFUNCPROTOBEGIN
128
129extern  void _XkbReloadDpy(
130    Display *           /* dpy */
131);
132
133extern KeySym _XKeycodeToKeysym(
134    Display *           /* display */,
135#if NeedWidePrototypes
136    unsigned int        /* keycode */,
137#else
138    KeyCode             /* keycode */,
139#endif
140    int                 /* index */
141);
142
143extern KeyCode _XKeysymToKeycode(
144    Display *           /* display */,
145    KeySym              /* keysym */
146);
147
148extern KeySym _XLookupKeysym(
149    XKeyEvent *         /* key_event */,
150    int                 /* index */
151);
152
153extern int _XRefreshKeyboardMapping(
154    XMappingEvent *     /* event_map */
155);
156
157extern unsigned _XKeysymToModifiers(
158    Display *           /* dpy */,
159    KeySym              /* ks */
160);
161
162extern int _XTranslateKey(
163    register Display *  /* dpy */,
164    KeyCode             /* keycode */,
165    register unsigned int /* modifiers */,
166    unsigned int *      /* modifiers_return */,
167    KeySym *            /* keysym_return */
168);
169
170extern int      _XTranslateKeySym(
171    Display *           /* dpy */,
172    register KeySym     /* symbol */,
173    unsigned int        /* modifiers */,
174    char *              /* buffer */,
175    int                 /* nbytes */
176);
177
178extern  int _XLookupString(
179    register XKeyEvent *        /* event */,
180    char *                      /* buffer */,
181    int                         /* nbytes */,
182    KeySym *                    /* keysym */,
183    XComposeStatus *            /* status */
184);
185
186extern void _XkbNoteCoreMapChanges(
187    XkbMapChangesRec *          /* old */,
188    XMappingEvent *             /* new */,
189    unsigned int                /* wanted */
190);
191
192extern  int _XkbInitReadBuffer(
193    Display *           /* dpy */,
194    XkbReadBufferPtr    /* buf */,
195    int                 /* size */
196);
197
198extern int _XkbSkipReadBufferData(
199    XkbReadBufferPtr    /* from */,
200    int                 /* size */
201);
202
203extern int _XkbCopyFromReadBuffer(
204    XkbReadBufferPtr    /* from */,
205    char *              /* to */,
206    int                 /* size */
207);
208
209
210#ifdef LONG64
211extern  int _XkbReadCopyData32(
212    int *               /* from */,
213    long *              /* to */,
214    int                 /* num_words */
215);
216
217extern  int _XkbWriteCopyData32(
218    unsigned long *     /* from */,
219    CARD32 *            /* to */,
220    int                 /* num_words */
221);
222
223extern int _XkbReadBufferCopy32(
224    XkbReadBufferPtr    /* from */,
225    long *              /* to */,
226    int                 /* size */
227);
228#else
229#define _XkbReadCopyData32(f,t,s)    memcpy((char *)(t), (char *)(f), (s)*4)
230#define _XkbWriteCopyData32(f,t,s)   memcpy((char *)(t), (char *)(f), (s)*4)
231#define _XkbReadBufferCopy32(f,t,s) _XkbCopyFromReadBuffer(f, (char *)t, (s)*4)
232#endif
233
234#ifndef NO_DEC_BINARY_COMPATIBILITY
235#define XKB_FORCE_INT_KEYSYM 1
236#endif
237
238#ifdef XKB_FORCE_INT_KEYSYM
239extern int _XkbReadCopyKeySyms(
240    int *               /* from */,
241    KeySym *            /* to */,
242    int                 /* num_words */
243);
244
245extern  int _XkbWriteCopyKeySyms(
246    KeySym *            /* from */,
247    CARD32 *            /* to */,
248    int                 /* num_words */
249);
250
251extern int _XkbReadBufferCopyKeySyms(
252    XkbReadBufferPtr    /* from */,
253#ifndef NO_DEC_BUG_FIX
254    KeySym *            /* to */,
255#else
256    long *              /* to */,
257#endif
258    int                 /* size */
259);
260#else
261#define _XkbReadCopyKeySyms(f,t,n)              _XkbReadCopyData32(f,t,n)
262#define _XkbWriteCopyKeySyms(f,t,n)             _XkbWriteCopyData32(f,t,n)
263#define _XkbReadBufferCopyKeySyms(f,t,s)        _XkbReadBufferCopy32(f,t,s)
264#endif
265
266extern char *_XkbPeekAtReadBuffer(
267    XkbReadBufferPtr    /* from */,
268    int                 /*  size */
269);
270
271extern char *_XkbGetReadBufferPtr(
272    XkbReadBufferPtr    /* from */,
273    int                 /* size */
274);
275#define _XkbGetTypedRdBufPtr(b,n,t) ((t *)_XkbGetReadBufferPtr(b,(n)*SIZEOF(t)))
276
277extern int _XkbFreeReadBuffer(
278    XkbReadBufferPtr    /* buf */
279);
280
281extern Bool
282_XkbGetReadBufferCountedString(
283    XkbReadBufferPtr    /* buf */,
284    char **             /* rtrn */
285);
286
287extern char *_XkbGetCharset(
288    void
289);
290
291extern int       _XkbGetConverters(
292    const char *       /* encoding_name */,
293    XkbConverters *    /* cvt_rtrn */
294);
295
296#ifdef  NEED_MAP_READERS
297
298extern  Status  _XkbReadGetMapReply(
299    Display *           /* dpy */,
300    xkbGetMapReply *    /* rep */,
301    XkbDescRec *        /* xkb */,
302    int *               /* nread_rtrn */
303);
304
305extern  Status  _XkbReadGetCompatMapReply(
306    Display *                   /* dpy */,
307    xkbGetCompatMapReply *      /* rep */,
308    XkbDescPtr                  /* xkb */,
309    int *                       /* nread_rtrn */
310);
311
312extern  Status  _XkbReadGetIndicatorMapReply(
313    Display *                   /* dpy */,
314    xkbGetIndicatorMapReply *   /* rep */,
315    XkbDescPtr                  /* xkb */,
316    int *                       /* nread_rtrn */
317);
318
319extern  Status  _XkbReadGetNamesReply(
320    Display *                   /* dpy */,
321    xkbGetNamesReply *          /* rep */,
322    XkbDescPtr                  /* xkb */,
323    int *                       /* nread_rtrn */
324);
325
326extern  Status  _XkbReadGetGeometryReply(
327    Display *                   /* dpy */,
328    xkbGetGeometryReply *       /* rep */,
329    XkbDescPtr                  /* xkb */,
330    int *                       /* nread_rtrn */
331);
332
333#endif
334
335_XFUNCPROTOEND
336
337#endif /* _XKBLIBINT_H_ */
338