XKBlibint.h revision 818534a1
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_
28818534a1Smrg#define _XKBLIBINT_H_
291ab64890Smrg
301ab64890Smrg#include <X11/Xutil.h>
311ab64890Smrg#include <X11/XKBlib.h>
321ab64890Smrg
33818534a1Smrg#define XkbMapPending           (1<<0)
34818534a1Smrg#define XkbXlibNewKeyboard      (1<<1)
351ab64890Smrg
36818534a1Smrgtypedef int     (*XkbKSToMBFunc)(
37818534a1Smrg        XPointer        /* priv */,
38818534a1Smrg        KeySym          /* sym */,
39818534a1Smrg        char *          /* buf */,
40818534a1Smrg        int             /* len */,
41818534a1Smrg        int *           /* extra_rtrn */
421ab64890Smrg);
431ab64890Smrg
44818534a1Smrgtypedef KeySym  (*XkbMBToKSFunc)(
45818534a1Smrg        XPointer        /* priv */,
46818534a1Smrg        char *          /* buf */,
47818534a1Smrg        int             /* len */,
48818534a1Smrg        Status *        /* status */
491ab64890Smrg);
501ab64890Smrg
51818534a1Smrgtypedef KeySym  (*XkbToUpperFunc)(
52818534a1Smrg        KeySym          /* sym */
531ab64890Smrg);
541ab64890Smrg
551ab64890Smrgtypedef struct _XkbConverters {
56818534a1Smrg        XkbKSToMBFunc    KSToMB;
57818534a1Smrg        XPointer         KSToMBPriv;
58818534a1Smrg        XkbMBToKSFunc    MBToKS;
59818534a1Smrg        XPointer         MBToKSPriv;
60818534a1Smrg        XkbToUpperFunc   KSToUpper;
611ab64890Smrg} XkbConverters;
621ab64890Smrg
63818534a1Smrgextern  XkbInternAtomFunc       _XkbInternAtomFunc;
64818534a1Smrgextern  XkbGetAtomNameFunc      _XkbGetAtomNameFunc;
651ab64890Smrg
661ab64890Smrgtypedef struct _XkbInfoRec {
67818534a1Smrg        unsigned         flags;
68818534a1Smrg        unsigned         xlib_ctrls;
69818534a1Smrg        XExtCodes        *codes;
70818534a1Smrg        int              srv_major;
71818534a1Smrg        int              srv_minor;
72818534a1Smrg        unsigned         selected_events;
73818534a1Smrg        unsigned short   selected_nkn_details;
74818534a1Smrg        unsigned short   selected_map_details;
75818534a1Smrg        XkbDescRec      *desc;
76818534a1Smrg        XkbMapChangesRec changes;
77818534a1Smrg        Atom             composeLED;
78818534a1Smrg        XkbConverters    cvt;
79818534a1Smrg        XkbConverters    latin1cvt;
801ab64890Smrg} XkbInfoRec, *XkbInfoPtr;
811ab64890Smrg
821ab64890Smrg
83818534a1Smrg#define _XkbUnavailable(d) \
84818534a1Smrg        (((d)->flags&XlibDisplayNoXkb) || \
85818534a1Smrg         ((!(d)->xkb_info || (!(d)->xkb_info->desc)) && !_XkbLoadDpy(d)))
86818534a1Smrg
87818534a1Smrg#define _XkbCheckPendingRefresh(d,xi) { \
88818534a1Smrg    if ((xi)->flags&XkbXlibNewKeyboard) \
89818534a1Smrg        _XkbReloadDpy((d)); \
90818534a1Smrg    else if ((xi)->flags&XkbMapPending) { \
91818534a1Smrg        if (XkbGetMapChanges((d),(xi)->desc, &(xi)->changes)==Success) { \
92818534a1Smrg            LockDisplay((d)); \
93818534a1Smrg            (xi)->changes.changed= 0; \
94818534a1Smrg            UnlockDisplay((d)); \
95818534a1Smrg        } \
96818534a1Smrg    } \
971ab64890Smrg}
981ab64890Smrg
99818534a1Smrg#define _XkbNeedModmap(i)    ((!(i)->desc->map)||(!(i)->desc->map->modmap))
1001ab64890Smrg
101818534a1Smrg        /*
102818534a1Smrg         * mask of the events that the "invisible" XKB support in Xlib needs
103818534a1Smrg         */
1041ab64890Smrg#define XKB_XLIB_MAP_MASK (XkbAllClientInfoMask)
1051ab64890Smrg
106818534a1Smrg        /*
107818534a1Smrg         * Handy helper macros
108818534a1Smrg         */
1091ab64890Smrg
1101ab64890Smrgtypedef struct _XkbReadBuffer {
111818534a1Smrg        int      error;
112818534a1Smrg        int      size;
113818534a1Smrg        char    *start;
114818534a1Smrg        char    *data;
115818534a1Smrg} XkbReadBufferRec, *XkbReadBufferPtr;
116818534a1Smrg
117818534a1Smrg#define _XkbAlloc(s)            Xmalloc((s))
118818534a1Smrg#define _XkbCalloc(n,s)         Xcalloc((n),(s))
119818534a1Smrg#define _XkbRealloc(o,s)        Xrealloc((o),(s))
120818534a1Smrg#define _XkbTypedAlloc(t)       ((t *)Xmalloc(sizeof(t)))
121818534a1Smrg#define _XkbTypedCalloc(n,t)    ((t *)Xcalloc((n),sizeof(t)))
122818534a1Smrg#define _XkbTypedRealloc(o,n,t) \
123818534a1Smrg        ((o) ? (t *)Xrealloc((o), (n)*sizeof(t)) : _XkbTypedCalloc(n,t))
124818534a1Smrg#define _XkbClearElems(a,f,l,t) bzero(&(a)[f], ((l)-(f)+1) * sizeof(t))
125818534a1Smrg#define _XkbFree(p)             Xfree(p)
1261ab64890Smrg
1271ab64890Smrg_XFUNCPROTOBEGIN
1281ab64890Smrg
129818534a1Smrgextern  void _XkbReloadDpy(
130818534a1Smrg    Display *           /* dpy */
1311ab64890Smrg);
1321ab64890Smrg
1331ab64890Smrgextern KeySym _XKeycodeToKeysym(
134818534a1Smrg    Display *           /* display */,
1351ab64890Smrg#if NeedWidePrototypes
136818534a1Smrg    unsigned int        /* keycode */,
1371ab64890Smrg#else
138818534a1Smrg    KeyCode             /* keycode */,
1391ab64890Smrg#endif
140818534a1Smrg    int                 /* index */
1411ab64890Smrg);
1421ab64890Smrg
1431ab64890Smrgextern KeyCode _XKeysymToKeycode(
144818534a1Smrg    Display *           /* display */,
145818534a1Smrg    KeySym              /* keysym */
1461ab64890Smrg);
1471ab64890Smrg
1481ab64890Smrgextern KeySym _XLookupKeysym(
149818534a1Smrg    XKeyEvent *         /* key_event */,
150818534a1Smrg    int                 /* index */
1511ab64890Smrg);
1521ab64890Smrg
1531ab64890Smrgextern int _XRefreshKeyboardMapping(
154818534a1Smrg    XMappingEvent *     /* event_map */
1551ab64890Smrg);
1561ab64890Smrg
157818534a1Smrgextern unsigned _XKeysymToModifiers(
158818534a1Smrg    Display *           /* dpy */,
159818534a1Smrg    KeySym              /* ks */
1601ab64890Smrg);
1611ab64890Smrg
16261b2299dSmrgextern int _XTranslateKey(
163818534a1Smrg    register Display *  /* dpy */,
164818534a1Smrg    KeyCode             /* keycode */,
1651ab64890Smrg    register unsigned int /* modifiers */,
166818534a1Smrg    unsigned int *      /* modifiers_return */,
167818534a1Smrg    KeySym *            /* keysym_return */
1681ab64890Smrg);
1691ab64890Smrg
170818534a1Smrgextern int      _XTranslateKeySym(
171818534a1Smrg    Display *           /* dpy */,
172818534a1Smrg    register KeySym     /* symbol */,
173818534a1Smrg    unsigned int        /* modifiers */,
174818534a1Smrg    char *              /* buffer */,
175818534a1Smrg    int                 /* nbytes */
1761ab64890Smrg);
1771ab64890Smrg
178818534a1Smrgextern  int _XLookupString(
179818534a1Smrg    register XKeyEvent *        /* event */,
180818534a1Smrg    char *                      /* buffer */,
181818534a1Smrg    int                         /* nbytes */,
182818534a1Smrg    KeySym *                    /* keysym */,
183818534a1Smrg    XComposeStatus *            /* status */
1841ab64890Smrg);
1851ab64890Smrg
1861ab64890Smrgextern void _XkbNoteCoreMapChanges(
187818534a1Smrg    XkbMapChangesRec *          /* old */,
188818534a1Smrg    XMappingEvent *             /* new */,
189818534a1Smrg    unsigned int                /* wanted */
1901ab64890Smrg);
1911ab64890Smrg
192818534a1Smrgextern  int _XkbInitReadBuffer(
193818534a1Smrg    Display *           /* dpy */,
194818534a1Smrg    XkbReadBufferPtr    /* buf */,
195818534a1Smrg    int                 /* size */
1961ab64890Smrg);
1971ab64890Smrg
1981ab64890Smrgextern int _XkbSkipReadBufferData(
199818534a1Smrg    XkbReadBufferPtr    /* from */,
200818534a1Smrg    int                 /* size */
2011ab64890Smrg);
2021ab64890Smrg
2031ab64890Smrgextern int _XkbCopyFromReadBuffer(
204818534a1Smrg    XkbReadBufferPtr    /* from */,
205818534a1Smrg    char *              /* to */,
206818534a1Smrg    int                 /* size */
2071ab64890Smrg);
2081ab64890Smrg
2091ab64890Smrg
210eb411b4bSmrg#ifdef LONG64
211818534a1Smrgextern  int _XkbReadCopyData32(
212818534a1Smrg    int *               /* from */,
213818534a1Smrg    long *              /* to */,
214818534a1Smrg    int                 /* num_words */
2151ab64890Smrg);
2161ab64890Smrg
217818534a1Smrgextern  int _XkbWriteCopyData32(
218818534a1Smrg    unsigned long *     /* from */,
219818534a1Smrg    CARD32 *            /* to */,
220818534a1Smrg    int                 /* num_words */
2211ab64890Smrg);
2221ab64890Smrg
2231ab64890Smrgextern int _XkbReadBufferCopy32(
224818534a1Smrg    XkbReadBufferPtr    /* from */,
225818534a1Smrg    long *              /* to */,
226818534a1Smrg    int                 /* size */
2271ab64890Smrg);
2281ab64890Smrg#else
229818534a1Smrg#define _XkbReadCopyData32(f,t,s)    memcpy((char *)(t), (char *)(f), (s)*4)
230818534a1Smrg#define _XkbWriteCopyData32(f,t,s)   memcpy((char *)(t), (char *)(f), (s)*4)
231818534a1Smrg#define _XkbReadBufferCopy32(f,t,s) _XkbCopyFromReadBuffer(f, (char *)t, (s)*4)
2321ab64890Smrg#endif
2331ab64890Smrg
2341ab64890Smrg#ifndef NO_DEC_BINARY_COMPATIBILITY
2351ab64890Smrg#define XKB_FORCE_INT_KEYSYM 1
2361ab64890Smrg#endif
2371ab64890Smrg
2381ab64890Smrg#ifdef XKB_FORCE_INT_KEYSYM
2391ab64890Smrgextern int _XkbReadCopyKeySyms(
240818534a1Smrg    int *               /* from */,
241818534a1Smrg    KeySym *            /* to */,
242818534a1Smrg    int                 /* num_words */
2431ab64890Smrg);
2441ab64890Smrg
245818534a1Smrgextern  int _XkbWriteCopyKeySyms(
246818534a1Smrg    KeySym *            /* from */,
247818534a1Smrg    CARD32 *            /* to */,
248818534a1Smrg    int                 /* num_words */
2491ab64890Smrg);
2501ab64890Smrg
2511ab64890Smrgextern int _XkbReadBufferCopyKeySyms(
252818534a1Smrg    XkbReadBufferPtr    /* from */,
2531ab64890Smrg#ifndef NO_DEC_BUG_FIX
254818534a1Smrg    KeySym *            /* to */,
2551ab64890Smrg#else
256818534a1Smrg    long *              /* to */,
2571ab64890Smrg#endif
258818534a1Smrg    int                 /* size */
2591ab64890Smrg);
2601ab64890Smrg#else
261818534a1Smrg#define _XkbReadCopyKeySyms(f,t,n)              _XkbReadCopyData32(f,t,n)
262818534a1Smrg#define _XkbWriteCopyKeySyms(f,t,n)             _XkbWriteCopyData32(f,t,n)
263818534a1Smrg#define _XkbReadBufferCopyKeySyms(f,t,s)        _XkbReadBufferCopy32(f,t,s)
2641ab64890Smrg#endif
2651ab64890Smrg
2661ab64890Smrgextern char *_XkbPeekAtReadBuffer(
267818534a1Smrg    XkbReadBufferPtr    /* from */,
268818534a1Smrg    int                 /*  size */
2691ab64890Smrg);
2701ab64890Smrg
2711ab64890Smrgextern char *_XkbGetReadBufferPtr(
272818534a1Smrg    XkbReadBufferPtr    /* from */,
273818534a1Smrg    int                 /* size */
2741ab64890Smrg);
275818534a1Smrg#define _XkbGetTypedRdBufPtr(b,n,t) ((t *)_XkbGetReadBufferPtr(b,(n)*SIZEOF(t)))
2761ab64890Smrg
2771ab64890Smrgextern int _XkbFreeReadBuffer(
278818534a1Smrg    XkbReadBufferPtr    /* buf */
2791ab64890Smrg);
2801ab64890Smrg
2811ab64890Smrgextern Bool
2821ab64890Smrg_XkbGetReadBufferCountedString(
283818534a1Smrg    XkbReadBufferPtr    /* buf */,
284818534a1Smrg    char **             /* rtrn */
2851ab64890Smrg);
2861ab64890Smrg
287818534a1Smrgextern char *_XkbGetCharset(
2881ab64890Smrg    void
2891ab64890Smrg);
2901ab64890Smrg
291818534a1Smrgextern int       _XkbGetConverters(
2921ab64890Smrg    const char *       /* encoding_name */,
2931ab64890Smrg    XkbConverters *    /* cvt_rtrn */
2941ab64890Smrg);
2951ab64890Smrg
296818534a1Smrg#ifdef  NEED_MAP_READERS
2971ab64890Smrg
298818534a1Smrgextern  Status  _XkbReadGetMapReply(
299818534a1Smrg    Display *           /* dpy */,
300818534a1Smrg    xkbGetMapReply *    /* rep */,
301818534a1Smrg    XkbDescRec *        /* xkb */,
302818534a1Smrg    int *               /* nread_rtrn */
3031ab64890Smrg);
3041ab64890Smrg
305818534a1Smrgextern  Status  _XkbReadGetCompatMapReply(
306818534a1Smrg    Display *                   /* dpy */,
307818534a1Smrg    xkbGetCompatMapReply *      /* rep */,
308818534a1Smrg    XkbDescPtr                  /* xkb */,
309818534a1Smrg    int *                       /* nread_rtrn */
3101ab64890Smrg);
3111ab64890Smrg
312818534a1Smrgextern  Status  _XkbReadGetIndicatorMapReply(
313818534a1Smrg    Display *                   /* dpy */,
314818534a1Smrg    xkbGetIndicatorMapReply *   /* rep */,
315818534a1Smrg    XkbDescPtr                  /* xkb */,
316818534a1Smrg    int *                       /* nread_rtrn */
3171ab64890Smrg);
3181ab64890Smrg
319818534a1Smrgextern  Status  _XkbReadGetNamesReply(
320818534a1Smrg    Display *                   /* dpy */,
321818534a1Smrg    xkbGetNamesReply *          /* rep */,
322818534a1Smrg    XkbDescPtr                  /* xkb */,
323818534a1Smrg    int *                       /* nread_rtrn */
3241ab64890Smrg);
3251ab64890Smrg
326818534a1Smrgextern  Status  _XkbReadGetGeometryReply(
327818534a1Smrg    Display *                   /* dpy */,
328818534a1Smrg    xkbGetGeometryReply *       /* rep */,
329818534a1Smrg    XkbDescPtr                  /* xkb */,
330818534a1Smrg    int *                       /* nread_rtrn */
3311ab64890Smrg);
3321ab64890Smrg
3331ab64890Smrg#endif
3341ab64890Smrg
3351ab64890Smrg_XFUNCPROTOEND
3361ab64890Smrg
3371ab64890Smrg#endif /* _XKBLIBINT_H_ */
338