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