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