xkbstr.h revision 35c4bbdf
14642e01fSmrg/************************************************************ 24642e01fSmrgCopyright (c) 1993 by Silicon Graphics Computer Systems, Inc. 34642e01fSmrg 44642e01fSmrgPermission to use, copy, modify, and distribute this 54642e01fSmrgsoftware and its documentation for any purpose and without 64642e01fSmrgfee is hereby granted, provided that the above copyright 74642e01fSmrgnotice appear in all copies and that both that copyright 84642e01fSmrgnotice and this permission notice appear in supporting 935c4bbdfSmrgdocumentation, and that the name of Silicon Graphics not be 1035c4bbdfSmrgused in advertising or publicity pertaining to distribution 114642e01fSmrgof the software without specific prior written permission. 1235c4bbdfSmrgSilicon Graphics makes no representation about the suitability 134642e01fSmrgof this software for any purpose. It is provided "as is" 144642e01fSmrgwithout any express or implied warranty. 154642e01fSmrg 1635c4bbdfSmrgSILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS 1735c4bbdfSmrgSOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 184642e01fSmrgAND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON 1935c4bbdfSmrgGRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL 2035c4bbdfSmrgDAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 2135c4bbdfSmrgDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 224642e01fSmrgOR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH 234642e01fSmrgTHE USE OR PERFORMANCE OF THIS SOFTWARE. 244642e01fSmrg 254642e01fSmrg********************************************************/ 264642e01fSmrg 274642e01fSmrg#ifndef _XKBSTR_H_ 284642e01fSmrg#define _XKBSTR_H_ 294642e01fSmrg 304642e01fSmrg#include <X11/extensions/XKB.h> 314642e01fSmrg 326747b715Smrg#define XkbCharToInt(v) ((int) ((v) & 0x80 ? ((v) | (~0xff)) : ((v) & 0x7f))) 336747b715Smrg#define XkbIntTo2Chars(i, h, l) ((h) = (i >> 8) & 0xff, (l) = (i) & 0xff) 344642e01fSmrg 354642e01fSmrg#if defined(WORD64) && defined(UNSIGNEDBITFIELDS) 366747b715Smrg#define Xkb2CharsToInt(h, l) ((int) ((h) & 0x80 ? \ 376747b715Smrg (((h) << 8) | (l) | (~0xffff)) : \ 386747b715Smrg (((h) << 8) | (l) & 0x7fff)) 394642e01fSmrg#else 404642e01fSmrg#define Xkb2CharsToInt(h,l) ((short)(((h)<<8)|(l))) 414642e01fSmrg#endif 424642e01fSmrg 4335c4bbdfSmrg /* 4435c4bbdfSmrg * Common data structures and access macros 4535c4bbdfSmrg */ 464642e01fSmrg 474642e01fSmrgtypedef struct _XkbStateRec { 4835c4bbdfSmrg unsigned char group; /* base + latched + locked */ 4935c4bbdfSmrg /* FIXME: Why are base + latched short and not char?? */ 5035c4bbdfSmrg unsigned short base_group; /* physically ... down? */ 5135c4bbdfSmrg unsigned short latched_group; 5235c4bbdfSmrg unsigned char locked_group; 5335c4bbdfSmrg 5435c4bbdfSmrg unsigned char mods; /* base + latched + locked */ 5535c4bbdfSmrg unsigned char base_mods; /* physically down */ 5635c4bbdfSmrg unsigned char latched_mods; 5735c4bbdfSmrg unsigned char locked_mods; 5835c4bbdfSmrg 5935c4bbdfSmrg unsigned char compat_state; /* mods + group for core state */ 6035c4bbdfSmrg 6135c4bbdfSmrg /* grab mods = all depressed and latched mods, _not_ locked mods */ 6235c4bbdfSmrg unsigned char grab_mods; /* grab mods minus internal mods */ 6335c4bbdfSmrg unsigned char compat_grab_mods; /* grab mods + group for core state, 6435c4bbdfSmrg but not locked groups if 6535c4bbdfSmrg IgnoreGroupLocks set */ 6635c4bbdfSmrg 6735c4bbdfSmrg /* effective mods = all mods (depressed, latched, locked) */ 6835c4bbdfSmrg unsigned char lookup_mods; /* effective mods minus internal mods */ 6935c4bbdfSmrg unsigned char compat_lookup_mods; /* effective mods + group */ 7035c4bbdfSmrg 7135c4bbdfSmrg unsigned short ptr_buttons; /* core pointer buttons */ 7235c4bbdfSmrg} XkbStateRec, *XkbStatePtr; 7335c4bbdfSmrg 744642e01fSmrg#define XkbStateFieldFromRec(s) XkbBuildCoreState((s)->lookup_mods,(s)->group) 754642e01fSmrg#define XkbGrabStateFromRec(s) XkbBuildCoreState((s)->grab_mods,(s)->group) 764642e01fSmrg 774642e01fSmrgtypedef struct _XkbMods { 7835c4bbdfSmrg unsigned char mask; /* effective mods */ 7935c4bbdfSmrg unsigned char real_mods; 8035c4bbdfSmrg unsigned short vmods; 8135c4bbdfSmrg} XkbModsRec, *XkbModsPtr; 824642e01fSmrg 834642e01fSmrgtypedef struct _XkbKTMapEntry { 8435c4bbdfSmrg Bool active; 8535c4bbdfSmrg unsigned char level; 8635c4bbdfSmrg XkbModsRec mods; 8735c4bbdfSmrg} XkbKTMapEntryRec, *XkbKTMapEntryPtr; 884642e01fSmrg 894642e01fSmrgtypedef struct _XkbKeyType { 9035c4bbdfSmrg XkbModsRec mods; 9135c4bbdfSmrg unsigned char num_levels; 9235c4bbdfSmrg unsigned char map_count; 9335c4bbdfSmrg XkbKTMapEntryPtr map; 9435c4bbdfSmrg XkbModsPtr preserve; 9535c4bbdfSmrg Atom name; 9635c4bbdfSmrg Atom *level_names; 974642e01fSmrg} XkbKeyTypeRec, *XkbKeyTypePtr; 984642e01fSmrg 994642e01fSmrg#define XkbNumGroups(g) ((g)&0x0f) 1004642e01fSmrg#define XkbOutOfRangeGroupInfo(g) ((g)&0xf0) 1014642e01fSmrg#define XkbOutOfRangeGroupAction(g) ((g)&0xc0) 1024642e01fSmrg#define XkbOutOfRangeGroupNumber(g) (((g)&0x30)>>4) 1036747b715Smrg#define XkbSetGroupInfo(g, w, n) (((w) & 0xc0) | (((n) & 3) << 4) | \ 1046747b715Smrg ((g) & 0x0f)) 1054642e01fSmrg#define XkbSetNumGroups(g,n) (((g)&0xf0)|((n)&0x0f)) 1064642e01fSmrg 10735c4bbdfSmrg /* 10835c4bbdfSmrg * Structures and access macros used primarily by the server 10935c4bbdfSmrg */ 1104642e01fSmrg 1114642e01fSmrgtypedef struct _XkbBehavior { 11235c4bbdfSmrg unsigned char type; 11335c4bbdfSmrg unsigned char data; 1144642e01fSmrg} XkbBehavior; 1154642e01fSmrg 1164642e01fSmrg#define XkbAnyActionDataSize 7 11735c4bbdfSmrgtypedef struct _XkbAnyAction { 11835c4bbdfSmrg unsigned char type; 11935c4bbdfSmrg unsigned char data[XkbAnyActionDataSize]; 1204642e01fSmrg} XkbAnyAction; 1214642e01fSmrg 1224642e01fSmrgtypedef struct _XkbModAction { 12335c4bbdfSmrg unsigned char type; 12435c4bbdfSmrg unsigned char flags; 12535c4bbdfSmrg unsigned char mask; 12635c4bbdfSmrg unsigned char real_mods; 12735c4bbdfSmrg /* FIXME: Make this an int. */ 12835c4bbdfSmrg unsigned char vmods1; 12935c4bbdfSmrg unsigned char vmods2; 1304642e01fSmrg} XkbModAction; 13135c4bbdfSmrg 1326747b715Smrg#define XkbModActionVMods(a) ((short) (((a)->vmods1 << 8) | (a)->vmods2)) 1334642e01fSmrg#define XkbSetModActionVMods(a,v) \ 1346747b715Smrg ((a)->vmods1 = (((v) >> 8) & 0xff), \ 1356747b715Smrg (a)->vmods2 = (v) & 0xff) 1364642e01fSmrg 1374642e01fSmrgtypedef struct _XkbGroupAction { 13835c4bbdfSmrg unsigned char type; 13935c4bbdfSmrg unsigned char flags; 14035c4bbdfSmrg /* FIXME: Make this an int. */ 14135c4bbdfSmrg char group_XXX; 1424642e01fSmrg} XkbGroupAction; 14335c4bbdfSmrg 1444642e01fSmrg#define XkbSAGroup(a) (XkbCharToInt((a)->group_XXX)) 1454642e01fSmrg#define XkbSASetGroup(a,g) ((a)->group_XXX=(g)) 1464642e01fSmrg 1474642e01fSmrgtypedef struct _XkbISOAction { 14835c4bbdfSmrg unsigned char type; 14935c4bbdfSmrg unsigned char flags; 15035c4bbdfSmrg unsigned char mask; 15135c4bbdfSmrg unsigned char real_mods; 15235c4bbdfSmrg /* FIXME: Make this an int. */ 15335c4bbdfSmrg char group_XXX; 15435c4bbdfSmrg unsigned char affect; 15535c4bbdfSmrg unsigned char vmods1; 15635c4bbdfSmrg unsigned char vmods2; 1574642e01fSmrg} XkbISOAction; 1584642e01fSmrg 1594642e01fSmrgtypedef struct _XkbPtrAction { 16035c4bbdfSmrg unsigned char type; 16135c4bbdfSmrg unsigned char flags; 16235c4bbdfSmrg /* FIXME: Make this an int. */ 16335c4bbdfSmrg unsigned char high_XXX; 16435c4bbdfSmrg unsigned char low_XXX; 16535c4bbdfSmrg unsigned char high_YYY; 16635c4bbdfSmrg unsigned char low_YYY; 1674642e01fSmrg} XkbPtrAction; 16835c4bbdfSmrg 1694642e01fSmrg#define XkbPtrActionX(a) (Xkb2CharsToInt((a)->high_XXX,(a)->low_XXX)) 1704642e01fSmrg#define XkbPtrActionY(a) (Xkb2CharsToInt((a)->high_YYY,(a)->low_YYY)) 1714642e01fSmrg#define XkbSetPtrActionX(a,x) (XkbIntTo2Chars(x,(a)->high_XXX,(a)->low_XXX)) 1724642e01fSmrg#define XkbSetPtrActionY(a,y) (XkbIntTo2Chars(y,(a)->high_YYY,(a)->low_YYY)) 1734642e01fSmrg 1744642e01fSmrgtypedef struct _XkbPtrBtnAction { 17535c4bbdfSmrg unsigned char type; 17635c4bbdfSmrg unsigned char flags; 17735c4bbdfSmrg unsigned char count; 17835c4bbdfSmrg unsigned char button; 1794642e01fSmrg} XkbPtrBtnAction; 1804642e01fSmrg 1814642e01fSmrgtypedef struct _XkbPtrDfltAction { 18235c4bbdfSmrg unsigned char type; 18335c4bbdfSmrg unsigned char flags; 18435c4bbdfSmrg unsigned char affect; 18535c4bbdfSmrg char valueXXX; 1864642e01fSmrg} XkbPtrDfltAction; 18735c4bbdfSmrg 1884642e01fSmrg#define XkbSAPtrDfltValue(a) (XkbCharToInt((a)->valueXXX)) 1896747b715Smrg#define XkbSASetPtrDfltValue(a, c) ((a)->valueXXX = (c) & 0xff) 1904642e01fSmrg 1914642e01fSmrgtypedef struct _XkbSwitchScreenAction { 19235c4bbdfSmrg unsigned char type; 19335c4bbdfSmrg unsigned char flags; 19435c4bbdfSmrg char screenXXX; 1954642e01fSmrg} XkbSwitchScreenAction; 19635c4bbdfSmrg 1974642e01fSmrg#define XkbSAScreen(a) (XkbCharToInt((a)->screenXXX)) 1986747b715Smrg#define XkbSASetScreen(a, s) ((a)->screenXXX = (s) & 0xff) 1994642e01fSmrg 2004642e01fSmrgtypedef struct _XkbCtrlsAction { 20135c4bbdfSmrg unsigned char type; 20235c4bbdfSmrg unsigned char flags; 20335c4bbdfSmrg /* FIXME: Make this an int. */ 20435c4bbdfSmrg unsigned char ctrls3; 20535c4bbdfSmrg unsigned char ctrls2; 20635c4bbdfSmrg unsigned char ctrls1; 20735c4bbdfSmrg unsigned char ctrls0; 2084642e01fSmrg} XkbCtrlsAction; 20935c4bbdfSmrg 2106747b715Smrg#define XkbActionSetCtrls(a, c) ((a)->ctrls3 = ((c) >> 24) & 0xff, \ 2116747b715Smrg (a)->ctrls2 = ((c) >> 16) & 0xff, \ 2126747b715Smrg (a)->ctrls1 = ((c) >> 8) & 0xff, \ 2136747b715Smrg (a)->ctrls0 = (c) & 0xff) 2144642e01fSmrg#define XkbActionCtrls(a) ((((unsigned int)(a)->ctrls3)<<24)|\ 2154642e01fSmrg (((unsigned int)(a)->ctrls2)<<16)|\ 2164642e01fSmrg (((unsigned int)(a)->ctrls1)<<8)|\ 2176747b715Smrg ((unsigned int) (a)->ctrls0)) 2184642e01fSmrg 2194642e01fSmrgtypedef struct _XkbMessageAction { 22035c4bbdfSmrg unsigned char type; 22135c4bbdfSmrg unsigned char flags; 22235c4bbdfSmrg unsigned char message[6]; 2234642e01fSmrg} XkbMessageAction; 2244642e01fSmrg 22535c4bbdfSmrgtypedef struct _XkbRedirectKeyAction { 22635c4bbdfSmrg unsigned char type; 22735c4bbdfSmrg unsigned char new_key; 22835c4bbdfSmrg unsigned char mods_mask; 22935c4bbdfSmrg unsigned char mods; 23035c4bbdfSmrg /* FIXME: Make this an int. */ 23135c4bbdfSmrg unsigned char vmods_mask0; 23235c4bbdfSmrg unsigned char vmods_mask1; 23335c4bbdfSmrg unsigned char vmods0; 23435c4bbdfSmrg unsigned char vmods1; 2354642e01fSmrg} XkbRedirectKeyAction; 2364642e01fSmrg 2374642e01fSmrg#define XkbSARedirectVMods(a) ((((unsigned int)(a)->vmods1)<<8)|\ 2384642e01fSmrg ((unsigned int)(a)->vmods0)) 2396747b715Smrg/* FIXME: This is blatantly not setting vmods. Yeesh. */ 2404642e01fSmrg#define XkbSARedirectSetVMods(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),\ 2414642e01fSmrg ((a)->vmods_mask0=((m)&0xff))) 2424642e01fSmrg#define XkbSARedirectVModsMask(a) ((((unsigned int)(a)->vmods_mask1)<<8)|\ 2434642e01fSmrg ((unsigned int)(a)->vmods_mask0)) 2444642e01fSmrg#define XkbSARedirectSetVModsMask(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),\ 2454642e01fSmrg ((a)->vmods_mask0=((m)&0xff))) 2464642e01fSmrg 2474642e01fSmrgtypedef struct _XkbDeviceBtnAction { 24835c4bbdfSmrg unsigned char type; 24935c4bbdfSmrg unsigned char flags; 25035c4bbdfSmrg unsigned char count; 25135c4bbdfSmrg unsigned char button; 25235c4bbdfSmrg unsigned char device; 2534642e01fSmrg} XkbDeviceBtnAction; 2544642e01fSmrg 2554642e01fSmrgtypedef struct _XkbDeviceValuatorAction { 25635c4bbdfSmrg unsigned char type; 25735c4bbdfSmrg unsigned char device; 25835c4bbdfSmrg unsigned char v1_what; 25935c4bbdfSmrg unsigned char v1_ndx; 26035c4bbdfSmrg unsigned char v1_value; 26135c4bbdfSmrg unsigned char v2_what; 26235c4bbdfSmrg unsigned char v2_ndx; 26335c4bbdfSmrg unsigned char v2_value; 2644642e01fSmrg} XkbDeviceValuatorAction; 2654642e01fSmrg 26635c4bbdfSmrgtypedef union _XkbAction { 26735c4bbdfSmrg XkbAnyAction any; 26835c4bbdfSmrg XkbModAction mods; 26935c4bbdfSmrg XkbGroupAction group; 27035c4bbdfSmrg XkbISOAction iso; 27135c4bbdfSmrg XkbPtrAction ptr; 27235c4bbdfSmrg XkbPtrBtnAction btn; 27335c4bbdfSmrg XkbPtrDfltAction dflt; 27435c4bbdfSmrg XkbSwitchScreenAction screen; 27535c4bbdfSmrg XkbCtrlsAction ctrls; 27635c4bbdfSmrg XkbMessageAction msg; 27735c4bbdfSmrg XkbRedirectKeyAction redirect; 27835c4bbdfSmrg XkbDeviceBtnAction devbtn; 27935c4bbdfSmrg XkbDeviceValuatorAction devval; 28035c4bbdfSmrg unsigned char type; 2814642e01fSmrg} XkbAction; 2824642e01fSmrg 28335c4bbdfSmrgtypedef struct _XkbControls { 28435c4bbdfSmrg unsigned char mk_dflt_btn; 28535c4bbdfSmrg unsigned char num_groups; 28635c4bbdfSmrg unsigned char groups_wrap; 28735c4bbdfSmrg XkbModsRec internal; 28835c4bbdfSmrg XkbModsRec ignore_lock; 28935c4bbdfSmrg unsigned int enabled_ctrls; 29035c4bbdfSmrg unsigned short repeat_delay; 29135c4bbdfSmrg unsigned short repeat_interval; 29235c4bbdfSmrg unsigned short slow_keys_delay; 29335c4bbdfSmrg unsigned short debounce_delay; 29435c4bbdfSmrg unsigned short mk_delay; 29535c4bbdfSmrg unsigned short mk_interval; 29635c4bbdfSmrg unsigned short mk_time_to_max; 29735c4bbdfSmrg unsigned short mk_max_speed; 29835c4bbdfSmrg short mk_curve; 29935c4bbdfSmrg unsigned short ax_options; 30035c4bbdfSmrg unsigned short ax_timeout; 30135c4bbdfSmrg unsigned short axt_opts_mask; 30235c4bbdfSmrg unsigned short axt_opts_values; 30335c4bbdfSmrg unsigned int axt_ctrls_mask; 30435c4bbdfSmrg unsigned int axt_ctrls_values; 30535c4bbdfSmrg unsigned char per_key_repeat[XkbPerKeyBitArraySize]; 3064642e01fSmrg} XkbControlsRec, *XkbControlsPtr; 3074642e01fSmrg 3084642e01fSmrg#define XkbAX_AnyFeedback(c) ((c)->enabled_ctrls&XkbAccessXFeedbackMask) 3094642e01fSmrg#define XkbAX_NeedOption(c,w) ((c)->ax_options&(w)) 3106747b715Smrg#define XkbAX_NeedFeedback(c, w) (XkbAX_AnyFeedback((c)) && \ 3116747b715Smrg XkbAX_NeedOption((c), (w))) 3124642e01fSmrg 3134642e01fSmrgtypedef struct _XkbServerMapRec { 31435c4bbdfSmrg unsigned short num_acts; 31535c4bbdfSmrg unsigned short size_acts; 31635c4bbdfSmrg XkbAction *acts; 3174642e01fSmrg 31835c4bbdfSmrg XkbBehavior *behaviors; 31935c4bbdfSmrg unsigned short *key_acts; 3204642e01fSmrg#if defined(__cplusplus) || defined(c_plusplus) 32135c4bbdfSmrg /* explicit is a C++ reserved word */ 32235c4bbdfSmrg unsigned char *c_explicit; 3234642e01fSmrg#else 32435c4bbdfSmrg unsigned char *explicit; 3254642e01fSmrg#endif 32635c4bbdfSmrg unsigned char vmods[XkbNumVirtualMods]; 32735c4bbdfSmrg unsigned short *vmodmap; 3284642e01fSmrg} XkbServerMapRec, *XkbServerMapPtr; 3294642e01fSmrg 3306747b715Smrg#define XkbSMKeyActionsPtr(m, k) (&(m)->acts[(m)->key_acts[(k)]]) 3314642e01fSmrg 33235c4bbdfSmrg /* 33335c4bbdfSmrg * Structures and access macros used primarily by clients 33435c4bbdfSmrg */ 3354642e01fSmrg 33635c4bbdfSmrgtypedef struct _XkbSymMapRec { 33735c4bbdfSmrg unsigned char kt_index[XkbNumKbdGroups]; 33835c4bbdfSmrg unsigned char group_info; 33935c4bbdfSmrg unsigned char width; 34035c4bbdfSmrg unsigned short offset; 3414642e01fSmrg} XkbSymMapRec, *XkbSymMapPtr; 3424642e01fSmrg 3434642e01fSmrgtypedef struct _XkbClientMapRec { 34435c4bbdfSmrg unsigned char size_types; 34535c4bbdfSmrg unsigned char num_types; 34635c4bbdfSmrg XkbKeyTypePtr types; 3474642e01fSmrg 34835c4bbdfSmrg unsigned short size_syms; 34935c4bbdfSmrg unsigned short num_syms; 35035c4bbdfSmrg KeySym *syms; 35135c4bbdfSmrg XkbSymMapPtr key_sym_map; 3524642e01fSmrg 35335c4bbdfSmrg unsigned char *modmap; 3544642e01fSmrg} XkbClientMapRec, *XkbClientMapPtr; 3554642e01fSmrg 3566747b715Smrg#define XkbCMKeyGroupInfo(m, k) ((m)->key_sym_map[(k)].group_info) 3576747b715Smrg#define XkbCMKeyNumGroups(m, k) (XkbNumGroups((m)->key_sym_map[(k)].group_info)) 3586747b715Smrg#define XkbCMKeyGroupWidth(m, k, g) (XkbCMKeyType((m), (k), (g))->num_levels) 3596747b715Smrg#define XkbCMKeyGroupsWidth(m, k) ((m)->key_sym_map[(k)].width) 3606747b715Smrg#define XkbCMKeyTypeIndex(m, k, g) ((m)->key_sym_map[(k)].kt_index[(g) & 0x3]) 3616747b715Smrg#define XkbCMKeyType(m, k, g) (&(m)->types[XkbCMKeyTypeIndex((m), (k), (g))]) 3626747b715Smrg#define XkbCMKeyNumSyms(m, k) (XkbCMKeyGroupsWidth((m), (k)) * \ 3636747b715Smrg XkbCMKeyNumGroups((m), (k))) 3646747b715Smrg#define XkbCMKeySymsOffset(m, k) ((m)->key_sym_map[(k)].offset) 3656747b715Smrg#define XkbCMKeySymsPtr(m, k) (&(m)->syms[XkbCMKeySymsOffset((m), (k))]) 3664642e01fSmrg 36735c4bbdfSmrg /* 36835c4bbdfSmrg * Compatibility structures and access macros 36935c4bbdfSmrg */ 3704642e01fSmrg 3714642e01fSmrgtypedef struct _XkbSymInterpretRec { 37235c4bbdfSmrg KeySym sym; 37335c4bbdfSmrg unsigned char flags; 37435c4bbdfSmrg unsigned char match; 37535c4bbdfSmrg unsigned char mods; 37635c4bbdfSmrg unsigned char virtual_mod; 37735c4bbdfSmrg XkbAnyAction act; 37835c4bbdfSmrg} XkbSymInterpretRec, *XkbSymInterpretPtr; 3794642e01fSmrg 3804642e01fSmrgtypedef struct _XkbCompatMapRec { 38135c4bbdfSmrg XkbSymInterpretPtr sym_interpret; 38235c4bbdfSmrg XkbModsRec groups[XkbNumKbdGroups]; 38335c4bbdfSmrg unsigned short num_si; 38435c4bbdfSmrg unsigned short size_si; 3854642e01fSmrg} XkbCompatMapRec, *XkbCompatMapPtr; 3864642e01fSmrg 3874642e01fSmrgtypedef struct _XkbIndicatorMapRec { 38835c4bbdfSmrg unsigned char flags; 38935c4bbdfSmrg /* FIXME: For some reason, interepretation of groups is wildly 39035c4bbdfSmrg * different between which being base/latched/locked. */ 39135c4bbdfSmrg unsigned char which_groups; 39235c4bbdfSmrg unsigned char groups; 39335c4bbdfSmrg unsigned char which_mods; 39435c4bbdfSmrg XkbModsRec mods; 39535c4bbdfSmrg unsigned int ctrls; 3964642e01fSmrg} XkbIndicatorMapRec, *XkbIndicatorMapPtr; 3974642e01fSmrg 3986747b715Smrg#define XkbIM_IsAuto(i) (!((i)->flags & XkbIM_NoAutomatic) && \ 3994642e01fSmrg (((i)->which_groups&&(i)->groups)||\ 4004642e01fSmrg ((i)->which_mods&&(i)->mods.mask)||\ 4016747b715Smrg (i)->ctrls)) 4026747b715Smrg#define XkbIM_InUse(i) ((i)->flags || (i)->which_groups || (i)->which_mods || \ 4036747b715Smrg (i)->ctrls) 4044642e01fSmrg 4054642e01fSmrgtypedef struct _XkbIndicatorRec { 40635c4bbdfSmrg unsigned long phys_indicators; 40735c4bbdfSmrg XkbIndicatorMapRec maps[XkbNumIndicators]; 40835c4bbdfSmrg} XkbIndicatorRec, *XkbIndicatorPtr; 4094642e01fSmrg 41035c4bbdfSmrgtypedef struct _XkbKeyNameRec { 41135c4bbdfSmrg char name[XkbKeyNameLength]; 41235c4bbdfSmrg} XkbKeyNameRec, *XkbKeyNamePtr; 4134642e01fSmrg 4144642e01fSmrgtypedef struct _XkbKeyAliasRec { 41535c4bbdfSmrg char real[XkbKeyNameLength]; 41635c4bbdfSmrg char alias[XkbKeyNameLength]; 41735c4bbdfSmrg} XkbKeyAliasRec, *XkbKeyAliasPtr; 4184642e01fSmrg 41935c4bbdfSmrg /* 42035c4bbdfSmrg * Names for everything 42135c4bbdfSmrg */ 4224642e01fSmrgtypedef struct _XkbNamesRec { 42335c4bbdfSmrg Atom keycodes; 42435c4bbdfSmrg Atom geometry; 42535c4bbdfSmrg Atom symbols; 42635c4bbdfSmrg Atom types; 42735c4bbdfSmrg Atom compat; 42835c4bbdfSmrg Atom vmods[XkbNumVirtualMods]; 42935c4bbdfSmrg Atom indicators[XkbNumIndicators]; 43035c4bbdfSmrg Atom groups[XkbNumKbdGroups]; 43135c4bbdfSmrg XkbKeyNamePtr keys; 43235c4bbdfSmrg XkbKeyAliasPtr key_aliases; 43335c4bbdfSmrg Atom *radio_groups; 43435c4bbdfSmrg Atom phys_symbols; 43535c4bbdfSmrg 43635c4bbdfSmrg unsigned char num_keys; 43735c4bbdfSmrg unsigned char num_key_aliases; 43835c4bbdfSmrg unsigned short num_rg; 43935c4bbdfSmrg} XkbNamesRec, *XkbNamesPtr; 44035c4bbdfSmrg 44135c4bbdfSmrgtypedef struct _XkbGeometry *XkbGeometryPtr; 44235c4bbdfSmrg 44335c4bbdfSmrg /* 44435c4bbdfSmrg * Tie it all together into one big keyboard description 44535c4bbdfSmrg */ 44635c4bbdfSmrgtypedef struct _XkbDesc { 44735c4bbdfSmrg unsigned int defined; 44835c4bbdfSmrg unsigned short flags; 44935c4bbdfSmrg unsigned short device_spec; 45035c4bbdfSmrg KeyCode min_key_code; 45135c4bbdfSmrg KeyCode max_key_code; 45235c4bbdfSmrg 45335c4bbdfSmrg XkbControlsPtr ctrls; 45435c4bbdfSmrg XkbServerMapPtr server; 45535c4bbdfSmrg XkbClientMapPtr map; 45635c4bbdfSmrg XkbIndicatorPtr indicators; 45735c4bbdfSmrg XkbNamesPtr names; 45835c4bbdfSmrg XkbCompatMapPtr compat; 45935c4bbdfSmrg XkbGeometryPtr geom; 4604642e01fSmrg} XkbDescRec, *XkbDescPtr; 46135c4bbdfSmrg 4626747b715Smrg#define XkbKeyKeyTypeIndex(d, k, g) (XkbCMKeyTypeIndex((d)->map, (k), (g))) 4636747b715Smrg#define XkbKeyKeyType(d, k, g) (XkbCMKeyType((d)->map, (k), (g))) 4646747b715Smrg#define XkbKeyGroupWidth(d, k, g) (XkbCMKeyGroupWidth((d)->map, (k), (g))) 4656747b715Smrg#define XkbKeyGroupsWidth(d, k) (XkbCMKeyGroupsWidth((d)->map, (k))) 4664642e01fSmrg#define XkbKeyGroupInfo(d,k) (XkbCMKeyGroupInfo((d)->map,(k))) 4674642e01fSmrg#define XkbKeyNumGroups(d,k) (XkbCMKeyNumGroups((d)->map,(k))) 4684642e01fSmrg#define XkbKeyNumSyms(d,k) (XkbCMKeyNumSyms((d)->map,(k))) 4694642e01fSmrg#define XkbKeySymsPtr(d,k) (XkbCMKeySymsPtr((d)->map,(k))) 4706747b715Smrg#define XkbKeySym(d, k, n) (XkbKeySymsPtr((d), (k))[(n)]) 4714642e01fSmrg#define XkbKeySymEntry(d,k,sl,g) \ 4726747b715Smrg (XkbKeySym((d), (k), (XkbKeyGroupsWidth((d), (k)) * (g)) + (sl))) 4734642e01fSmrg#define XkbKeyAction(d,k,n) \ 4746747b715Smrg (XkbKeyHasActions((d), (k)) ? & XkbKeyActionsPtr((d), (k))[(n)] : NULL) 4754642e01fSmrg#define XkbKeyActionEntry(d,k,sl,g) \ 4766747b715Smrg (XkbKeyHasActions((d), (k)) ? \ 4776747b715Smrg XkbKeyAction((d), (k), ((XkbKeyGroupsWidth((d), (k)) * (g)) + (sl))) : \ 4786747b715Smrg NULL) 4796747b715Smrg 4806747b715Smrg#define XkbKeyHasActions(d, k) (!!(d)->server->key_acts[(k)]) 4816747b715Smrg#define XkbKeyNumActions(d, k) (XkbKeyHasActions((d), (k)) ? \ 4826747b715Smrg XkbKeyNumSyms((d), (k)) : 1) 4836747b715Smrg#define XkbKeyActionsPtr(d, k) (XkbSMKeyActionsPtr((d)->server, (k))) 4846747b715Smrg#define XkbKeycodeInRange(d, k) ((k) >= (d)->min_key_code && \ 4856747b715Smrg (k) <= (d)->max_key_code) 4864642e01fSmrg#define XkbNumKeys(d) ((d)->max_key_code-(d)->min_key_code+1) 4874642e01fSmrg 48835c4bbdfSmrg /* 48935c4bbdfSmrg * The following structures can be used to track changes 49035c4bbdfSmrg * to a keyboard device 49135c4bbdfSmrg */ 4924642e01fSmrgtypedef struct _XkbMapChanges { 49335c4bbdfSmrg unsigned short changed; 49435c4bbdfSmrg KeyCode min_key_code; 49535c4bbdfSmrg KeyCode max_key_code; 49635c4bbdfSmrg unsigned char first_type; 49735c4bbdfSmrg unsigned char num_types; 49835c4bbdfSmrg KeyCode first_key_sym; 49935c4bbdfSmrg unsigned char num_key_syms; 50035c4bbdfSmrg KeyCode first_key_act; 50135c4bbdfSmrg unsigned char num_key_acts; 50235c4bbdfSmrg KeyCode first_key_behavior; 50335c4bbdfSmrg unsigned char num_key_behaviors; 50435c4bbdfSmrg KeyCode first_key_explicit; 50535c4bbdfSmrg unsigned char num_key_explicit; 50635c4bbdfSmrg KeyCode first_modmap_key; 50735c4bbdfSmrg unsigned char num_modmap_keys; 50835c4bbdfSmrg KeyCode first_vmodmap_key; 50935c4bbdfSmrg unsigned char num_vmodmap_keys; 51035c4bbdfSmrg unsigned char pad; 51135c4bbdfSmrg unsigned short vmods; 51235c4bbdfSmrg} XkbMapChangesRec, *XkbMapChangesPtr; 5134642e01fSmrg 5144642e01fSmrgtypedef struct _XkbControlsChanges { 51535c4bbdfSmrg unsigned int changed_ctrls; 51635c4bbdfSmrg unsigned int enabled_ctrls_changes; 51735c4bbdfSmrg Bool num_groups_changed; 51835c4bbdfSmrg} XkbControlsChangesRec, *XkbControlsChangesPtr; 5194642e01fSmrg 5204642e01fSmrgtypedef struct _XkbIndicatorChanges { 52135c4bbdfSmrg unsigned int state_changes; 52235c4bbdfSmrg unsigned int map_changes; 52335c4bbdfSmrg} XkbIndicatorChangesRec, *XkbIndicatorChangesPtr; 5244642e01fSmrg 5254642e01fSmrgtypedef struct _XkbNameChanges { 52635c4bbdfSmrg unsigned int changed; 52735c4bbdfSmrg unsigned char first_type; 52835c4bbdfSmrg unsigned char num_types; 52935c4bbdfSmrg unsigned char first_lvl; 53035c4bbdfSmrg unsigned char num_lvls; 53135c4bbdfSmrg unsigned char num_aliases; 53235c4bbdfSmrg unsigned char num_rg; 53335c4bbdfSmrg unsigned char first_key; 53435c4bbdfSmrg unsigned char num_keys; 53535c4bbdfSmrg unsigned short changed_vmods; 53635c4bbdfSmrg unsigned long changed_indicators; 53735c4bbdfSmrg unsigned char changed_groups; 53835c4bbdfSmrg} XkbNameChangesRec, *XkbNameChangesPtr; 5394642e01fSmrg 5404642e01fSmrgtypedef struct _XkbCompatChanges { 54135c4bbdfSmrg unsigned char changed_groups; 54235c4bbdfSmrg unsigned short first_si; 54335c4bbdfSmrg unsigned short num_si; 54435c4bbdfSmrg} XkbCompatChangesRec, *XkbCompatChangesPtr; 5454642e01fSmrg 5464642e01fSmrgtypedef struct _XkbChanges { 54735c4bbdfSmrg unsigned short device_spec; 54835c4bbdfSmrg unsigned short state_changes; 54935c4bbdfSmrg XkbMapChangesRec map; 55035c4bbdfSmrg XkbControlsChangesRec ctrls; 55135c4bbdfSmrg XkbIndicatorChangesRec indicators; 55235c4bbdfSmrg XkbNameChangesRec names; 55335c4bbdfSmrg XkbCompatChangesRec compat; 5544642e01fSmrg} XkbChangesRec, *XkbChangesPtr; 5554642e01fSmrg 55635c4bbdfSmrg /* 55735c4bbdfSmrg * These data structures are used to construct a keymap from 55835c4bbdfSmrg * a set of components or to list components in the server 55935c4bbdfSmrg * database. 56035c4bbdfSmrg */ 5614642e01fSmrgtypedef struct _XkbComponentNames { 56235c4bbdfSmrg char *keycodes; 56335c4bbdfSmrg char *types; 56435c4bbdfSmrg char *compat; 56535c4bbdfSmrg char *symbols; 56635c4bbdfSmrg char *geometry; 5674642e01fSmrg} XkbComponentNamesRec, *XkbComponentNamesPtr; 5684642e01fSmrg 5694642e01fSmrgtypedef struct _XkbComponentName { 57035c4bbdfSmrg unsigned short flags; 57135c4bbdfSmrg char *name; 57235c4bbdfSmrg} XkbComponentNameRec, *XkbComponentNamePtr; 5734642e01fSmrg 5744642e01fSmrgtypedef struct _XkbComponentList { 57535c4bbdfSmrg int num_keymaps; 57635c4bbdfSmrg int num_keycodes; 57735c4bbdfSmrg int num_types; 57835c4bbdfSmrg int num_compat; 57935c4bbdfSmrg int num_symbols; 58035c4bbdfSmrg int num_geometry; 58135c4bbdfSmrg XkbComponentNamePtr keymaps; 58235c4bbdfSmrg XkbComponentNamePtr keycodes; 58335c4bbdfSmrg XkbComponentNamePtr types; 58435c4bbdfSmrg XkbComponentNamePtr compat; 58535c4bbdfSmrg XkbComponentNamePtr symbols; 58635c4bbdfSmrg XkbComponentNamePtr geometry; 5874642e01fSmrg} XkbComponentListRec, *XkbComponentListPtr; 5884642e01fSmrg 58935c4bbdfSmrg /* 59035c4bbdfSmrg * The following data structures describe and track changes to a 59135c4bbdfSmrg * non-keyboard extension device 59235c4bbdfSmrg */ 5934642e01fSmrgtypedef struct _XkbDeviceLedInfo { 59435c4bbdfSmrg unsigned short led_class; 59535c4bbdfSmrg unsigned short led_id; 59635c4bbdfSmrg unsigned int phys_indicators; 59735c4bbdfSmrg unsigned int maps_present; 59835c4bbdfSmrg unsigned int names_present; 59935c4bbdfSmrg unsigned int state; 60035c4bbdfSmrg Atom names[XkbNumIndicators]; 60135c4bbdfSmrg XkbIndicatorMapRec maps[XkbNumIndicators]; 60235c4bbdfSmrg} XkbDeviceLedInfoRec, *XkbDeviceLedInfoPtr; 6034642e01fSmrg 6044642e01fSmrgtypedef struct _XkbDeviceInfo { 60535c4bbdfSmrg char *name; 60635c4bbdfSmrg Atom type; 60735c4bbdfSmrg unsigned short device_spec; 60835c4bbdfSmrg Bool has_own_state; 60935c4bbdfSmrg unsigned short supported; 61035c4bbdfSmrg unsigned short unsupported; 61135c4bbdfSmrg 61235c4bbdfSmrg unsigned short num_btns; 61335c4bbdfSmrg XkbAction *btn_acts; 61435c4bbdfSmrg 61535c4bbdfSmrg unsigned short sz_leds; 61635c4bbdfSmrg unsigned short num_leds; 61735c4bbdfSmrg unsigned short dflt_kbd_fb; 61835c4bbdfSmrg unsigned short dflt_led_fb; 61935c4bbdfSmrg XkbDeviceLedInfoPtr leds; 62035c4bbdfSmrg} XkbDeviceInfoRec, *XkbDeviceInfoPtr; 6214642e01fSmrg 6226747b715Smrg#define XkbXI_DevHasBtnActs(d) ((d)->num_btns > 0 && (d)->btn_acts) 6236747b715Smrg#define XkbXI_LegalDevBtn(d,b) (XkbXI_DevHasBtnActs(d) && (b) < (d)->num_btns) 6246747b715Smrg#define XkbXI_DevHasLeds(d) ((d)->num_leds > 0 && (d)->leds) 6254642e01fSmrg 6264642e01fSmrgtypedef struct _XkbDeviceLedChanges { 62735c4bbdfSmrg unsigned short led_class; 62835c4bbdfSmrg unsigned short led_id; 62935c4bbdfSmrg unsigned int defined; /* names or maps changed */ 63035c4bbdfSmrg struct _XkbDeviceLedChanges *next; 63135c4bbdfSmrg} XkbDeviceLedChangesRec, *XkbDeviceLedChangesPtr; 6324642e01fSmrg 6334642e01fSmrgtypedef struct _XkbDeviceChanges { 63435c4bbdfSmrg unsigned int changed; 63535c4bbdfSmrg unsigned short first_btn; 63635c4bbdfSmrg unsigned short num_btns; 63735c4bbdfSmrg XkbDeviceLedChangesRec leds; 63835c4bbdfSmrg} XkbDeviceChangesRec, *XkbDeviceChangesPtr; 6394642e01fSmrg 64035c4bbdfSmrg#endif /* _XKBSTR_H_ */ 641