]> git.sesse.net Git - rdpsrv/blobdiff - Xserver/include/extensions/XKBstr.h
Import X server from vnc-3.3.7.
[rdpsrv] / Xserver / include / extensions / XKBstr.h
diff --git a/Xserver/include/extensions/XKBstr.h b/Xserver/include/extensions/XKBstr.h
new file mode 100644 (file)
index 0000000..29fde0a
--- /dev/null
@@ -0,0 +1,614 @@
+/* $TOG: XKBstr.h /main/16 1997/06/10 06:53:12 kaleb $ */
+/************************************************************
+Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
+
+Permission to use, copy, modify, and distribute this
+software and its documentation for any purpose and without
+fee is hereby granted, provided that the above copyright
+notice appear in all copies and that both that copyright
+notice and this permission notice appear in supporting
+documentation, and that the name of Silicon Graphics not be 
+used in advertising or publicity pertaining to distribution 
+of the software without specific prior written permission.
+Silicon Graphics makes no representation about the suitability 
+of this software for any purpose. It is provided "as is"
+without any express or implied warranty.
+
+SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS 
+SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 
+AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
+GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL 
+DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
+THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+********************************************************/
+
+#ifndef _XKBSTR_H_
+#define        _XKBSTR_H_
+
+#include <X11/extensions/XKB.h>
+
+#define        XkbCharToInt(v)         ((v)&0x80?(int)((v)|(~0xff)):(int)((v)&0x7f))
+#define        XkbIntTo2Chars(i,h,l)   (((h)=((i>>8)&0xff)),((l)=((i)&0xff)))
+
+#if defined(WORD64) && defined(UNSIGNEDBITFIELDS)
+#define        Xkb2CharsToInt(h,l)     ((h)&0x80?(int)(((h)<<8)|(l)|(~0xffff)):\
+                                         (int)(((h)<<8)|(l)&0x7fff))
+#else
+#define        Xkb2CharsToInt(h,l)     ((short)(((h)<<8)|(l)))
+#endif
+
+       /*
+        * Common data structures and access macros
+        */
+
+typedef struct _XkbStateRec {
+       unsigned char   group;
+       unsigned char   locked_group;
+       unsigned short  base_group;
+       unsigned short  latched_group;
+       unsigned char   mods;
+       unsigned char   base_mods;
+       unsigned char   latched_mods;
+       unsigned char   locked_mods;
+       unsigned char   compat_state;
+       unsigned char   grab_mods;
+       unsigned char   compat_grab_mods;
+       unsigned char   lookup_mods;
+       unsigned char   compat_lookup_mods;
+       unsigned short  ptr_buttons;
+} XkbStateRec,*XkbStatePtr;
+#define        XkbModLocks(s)   ((s)->locked_mods)
+#define        XkbStateMods(s)  ((s)->base_mods|(s)->latched_mods|XkbModLocks(s))
+#define        XkbGroupLock(s)  ((s)->locked_group)
+#define        XkbStateGroup(s) ((s)->base_group+(s)->latched_group+XkbGroupLock(s))
+#define        XkbStateFieldFromRec(s) XkbBuildCoreState((s)->lookup_mods,(s)->group)
+#define        XkbGrabStateFromRec(s)  XkbBuildCoreState((s)->grab_mods,(s)->group)
+
+typedef struct _XkbMods {
+       unsigned char   mask;   /* effective mods */
+       unsigned char   real_mods;
+       unsigned short  vmods;
+} XkbModsRec,*XkbModsPtr;
+
+typedef struct _XkbKTMapEntry {
+       Bool            active;
+       unsigned char   level;
+       XkbModsRec      mods;
+} XkbKTMapEntryRec,*XkbKTMapEntryPtr;
+
+typedef struct _XkbKeyType {
+       XkbModsRec              mods;
+       unsigned char           num_levels;
+       unsigned char           map_count;
+       XkbKTMapEntryPtr        map;
+       XkbModsPtr              preserve;
+       Atom                    name;
+       Atom *                  level_names;
+} XkbKeyTypeRec, *XkbKeyTypePtr;
+
+#define        XkbNumGroups(g)                 ((g)&0x0f)
+#define        XkbOutOfRangeGroupInfo(g)       ((g)&0xf0)
+#define        XkbOutOfRangeGroupAction(g)     ((g)&0xc0)
+#define        XkbOutOfRangeGroupNumber(g)     (((g)&0x30)>>4)
+#define        XkbSetGroupInfo(g,w,n)  (((w)&0xc0)|(((n)&3)<<4)|((g)&0x0f))
+#define        XkbSetNumGroups(g,n)    (((g)&0xf0)|((n)&0x0f))
+
+       /*
+        * Structures and access macros used primarily by the server
+        */
+
+typedef struct _XkbBehavior {
+       unsigned char   type;
+       unsigned char   data;
+} XkbBehavior;
+
+#define        XkbAnyActionDataSize 7
+typedef        struct _XkbAnyAction {
+       unsigned char   type;
+       unsigned char   data[XkbAnyActionDataSize];
+} XkbAnyAction;
+
+typedef struct _XkbModAction {
+       unsigned char   type;
+       unsigned char   flags;
+       unsigned char   mask;
+       unsigned char   real_mods;
+       unsigned char   vmods1;
+       unsigned char   vmods2;
+} XkbModAction;
+#define        XkbModActionVMods(a)      \
+       ((short)(((a)->vmods1<<8)|((a)->vmods2)))
+#define        XkbSetModActionVMods(a,v) \
+       (((a)->vmods1=(((v)>>8)&0xff)),(a)->vmods2=((v)&0xff))
+
+typedef struct _XkbGroupAction {
+       unsigned char   type;
+       unsigned char   flags;
+       char            group_XXX;
+} XkbGroupAction;
+#define        XkbSAGroup(a)           (XkbCharToInt((a)->group_XXX))
+#define        XkbSASetGroup(a,g)      ((a)->group_XXX=(g))
+
+typedef struct _XkbISOAction {
+       unsigned char   type;
+       unsigned char   flags;
+       unsigned char   mask;
+       unsigned char   real_mods;
+       char            group_XXX;
+       unsigned char   affect;
+       unsigned char   vmods1;
+       unsigned char   vmods2;
+} XkbISOAction;
+
+typedef struct _XkbPtrAction {
+       unsigned char   type;
+       unsigned char   flags;
+       unsigned char   high_XXX;
+       unsigned char   low_XXX;
+       unsigned char   high_YYY;
+       unsigned char   low_YYY;
+} XkbPtrAction;
+#define        XkbPtrActionX(a)      (Xkb2CharsToInt((a)->high_XXX,(a)->low_XXX))
+#define        XkbPtrActionY(a)      (Xkb2CharsToInt((a)->high_YYY,(a)->low_YYY))
+#define        XkbSetPtrActionX(a,x) (XkbIntTo2Chars(x,(a)->high_XXX,(a)->low_XXX))
+#define        XkbSetPtrActionY(a,y) (XkbIntTo2Chars(y,(a)->high_YYY,(a)->low_YYY))
+
+typedef struct _XkbPtrBtnAction {
+       unsigned char   type;
+       unsigned char   flags;
+       unsigned char   count;
+       unsigned char   button;
+} XkbPtrBtnAction;
+
+typedef struct _XkbPtrDfltAction {
+       unsigned char   type;
+       unsigned char   flags;
+       unsigned char   affect;
+       char            valueXXX;
+} XkbPtrDfltAction;
+#define        XkbSAPtrDfltValue(a)            (XkbCharToInt((a)->valueXXX))
+#define        XkbSASetPtrDfltValue(a,c)       ((a)->valueXXX= ((c)&0xff))
+
+typedef struct _XkbSwitchScreenAction {
+       unsigned char   type;
+       unsigned char   flags;
+       char            screenXXX;
+} XkbSwitchScreenAction;
+#define        XkbSAScreen(a)                  (XkbCharToInt((a)->screenXXX))
+#define        XkbSASetScreen(a,s)             ((a)->screenXXX= ((s)&0xff))
+
+typedef struct _XkbCtrlsAction {
+       unsigned char   type;
+       unsigned char   flags;
+       unsigned char   ctrls3;
+       unsigned char   ctrls2;
+       unsigned char   ctrls1;
+       unsigned char   ctrls0;
+} XkbCtrlsAction;
+#define        XkbActionSetCtrls(a,c)  (((a)->ctrls3=(((c)>>24)&0xff)),\
+                                       ((a)->ctrls2=(((c)>>16)&0xff)),\
+                                       ((a)->ctrls1=(((c)>>8)&0xff)),\
+                                       ((a)->ctrls0=((c)&0xff)))
+#define        XkbActionCtrls(a) ((((unsigned int)(a)->ctrls3)<<24)|\
+                          (((unsigned int)(a)->ctrls2)<<16)|\
+                          (((unsigned int)(a)->ctrls1)<<8)|\
+                          ((unsigned int)((a)->ctrls0)))
+
+typedef struct _XkbMessageAction {
+       unsigned char   type;
+       unsigned char   flags;
+       unsigned char   message[6];
+} XkbMessageAction;
+
+typedef struct _XkbRedirectKeyAction {
+       unsigned char   type;
+       unsigned char   new_key;
+       unsigned char   mods_mask;
+       unsigned char   mods;
+       unsigned char   vmods_mask0;
+       unsigned char   vmods_mask1;
+       unsigned char   vmods0;
+       unsigned char   vmods1;
+} XkbRedirectKeyAction;
+
+#define        XkbSARedirectVMods(a)           ((((unsigned int)(a)->vmods1)<<8)|\
+                                       ((unsigned int)(a)->vmods0))
+#define        XkbSARedirectSetVMods(a,m)      (((a)->vmods_mask1=(((m)>>8)&0xff)),\
+                                        ((a)->vmods_mask0=((m)&0xff)))
+#define        XkbSARedirectVModsMask(a)       ((((unsigned int)(a)->vmods_mask1)<<8)|\
+                                       ((unsigned int)(a)->vmods_mask0))
+#define        XkbSARedirectSetVModsMask(a,m)  (((a)->vmods_mask1=(((m)>>8)&0xff)),\
+                                        ((a)->vmods_mask0=((m)&0xff)))
+
+typedef struct _XkbDeviceBtnAction {
+       unsigned char   type;
+       unsigned char   flags;
+       unsigned char   count;
+       unsigned char   button;
+       unsigned char   device;
+} XkbDeviceBtnAction;
+
+typedef struct _XkbDeviceValuatorAction {
+       unsigned char   type;
+       unsigned char   device;
+       unsigned char   v1_what;
+       unsigned char   v1_ndx;
+       unsigned char   v1_value;
+       unsigned char   v2_what;
+       unsigned char   v2_ndx;
+       unsigned char   v2_value;
+} XkbDeviceValuatorAction;
+
+typedef        union _XkbAction {
+       XkbAnyAction            any;
+       XkbModAction            mods;
+       XkbGroupAction          group;
+       XkbISOAction            iso;
+       XkbPtrAction            ptr;
+       XkbPtrBtnAction         btn;
+       XkbPtrDfltAction        dflt;
+       XkbSwitchScreenAction   screen;
+       XkbCtrlsAction          ctrls;
+       XkbMessageAction        msg;
+       XkbRedirectKeyAction    redirect;
+       XkbDeviceBtnAction      devbtn;
+       XkbDeviceValuatorAction devval;
+       unsigned char           type;
+} XkbAction;
+
+typedef        struct _XkbControls {
+       unsigned char   mk_dflt_btn;
+       unsigned char   num_groups;
+       unsigned char   groups_wrap;
+       XkbModsRec      internal;
+       XkbModsRec      ignore_lock;
+       unsigned int    enabled_ctrls;
+       unsigned short  repeat_delay;
+       unsigned short  repeat_interval;
+       unsigned short  slow_keys_delay;
+       unsigned short  debounce_delay;
+       unsigned short  mk_delay;
+       unsigned short  mk_interval;
+       unsigned short  mk_time_to_max;
+       unsigned short  mk_max_speed;
+                short  mk_curve;
+       unsigned short  ax_options;
+       unsigned short  ax_timeout;
+       unsigned short  axt_opts_mask;
+       unsigned short  axt_opts_values;
+       unsigned int    axt_ctrls_mask;
+       unsigned int    axt_ctrls_values;
+       unsigned char   per_key_repeat[XkbPerKeyBitArraySize];
+} XkbControlsRec, *XkbControlsPtr;
+
+#define        XkbAX_AnyFeedback(c)    ((c)->enabled_ctrls&XkbAccessXFeedbackMask)
+#define        XkbAX_NeedOption(c,w)   ((c)->ax_options&(w))
+#define        XkbAX_NeedFeedback(c,w) (XkbAX_AnyFeedback(c)&&XkbAX_NeedOption(c,w))
+
+typedef struct _XkbServerMapRec {
+       unsigned short           num_acts;
+       unsigned short           size_acts;
+       XkbAction               *acts;
+
+       XkbBehavior             *behaviors;
+       unsigned short          *key_acts;
+#if defined(__cplusplus) || defined(c_plusplus)
+       /* explicit is a C++ reserved word */
+       unsigned char           *c_explicit;
+#else
+       unsigned char           *explicit;
+#endif
+       unsigned char            vmods[XkbNumVirtualMods];
+       unsigned short          *vmodmap;
+} XkbServerMapRec, *XkbServerMapPtr;
+
+#define        XkbSMKeyActionsPtr(m,k) (&(m)->acts[(m)->key_acts[k]])
+
+       /*
+        * Structures and access macros used primarily by clients
+        */
+
+typedef        struct _XkbSymMapRec {
+       unsigned char    kt_index[XkbNumKbdGroups];
+       unsigned char    group_info;
+       unsigned char    width;
+       unsigned short   offset;
+} XkbSymMapRec, *XkbSymMapPtr;
+
+typedef struct _XkbClientMapRec {
+       unsigned char            size_types;
+       unsigned char            num_types;
+       XkbKeyTypePtr            types;
+
+       unsigned short           size_syms;
+       unsigned short           num_syms;
+       KeySym                  *syms;
+       XkbSymMapPtr             key_sym_map;
+
+       unsigned char           *modmap;
+} XkbClientMapRec, *XkbClientMapPtr;
+
+#define        XkbCMKeyGroupInfo(m,k)  ((m)->key_sym_map[k].group_info)
+#define        XkbCMKeyNumGroups(m,k)   (XkbNumGroups((m)->key_sym_map[k].group_info))
+#define        XkbCMKeyGroupWidth(m,k,g) (XkbCMKeyType(m,k,g)->num_levels)
+#define        XkbCMKeyGroupsWidth(m,k) ((m)->key_sym_map[k].width)
+#define        XkbCMKeyTypeIndex(m,k,g) ((m)->key_sym_map[k].kt_index[g&0x3])
+#define        XkbCMKeyType(m,k,g)      (&(m)->types[XkbCMKeyTypeIndex(m,k,g)])
+#define        XkbCMKeyNumSyms(m,k) (XkbCMKeyGroupsWidth(m,k)*XkbCMKeyNumGroups(m,k))
+#define        XkbCMKeySymsOffset(m,k) ((m)->key_sym_map[k].offset)
+#define        XkbCMKeySymsPtr(m,k)    (&(m)->syms[XkbCMKeySymsOffset(m,k)])
+
+       /*
+        * Compatibility structures and access macros
+        */
+
+typedef struct _XkbSymInterpretRec {
+       KeySym          sym;
+       unsigned char   flags;
+       unsigned char   match;
+       unsigned char   mods;
+       unsigned char   virtual_mod;
+       XkbAnyAction    act;
+} XkbSymInterpretRec,*XkbSymInterpretPtr;
+
+typedef struct _XkbCompatMapRec {
+       XkbSymInterpretPtr       sym_interpret;
+       XkbModsRec               groups[XkbNumKbdGroups];
+       unsigned short           num_si;
+       unsigned short           size_si;
+} XkbCompatMapRec, *XkbCompatMapPtr;
+
+typedef struct _XkbIndicatorMapRec {
+       unsigned char   flags;
+       unsigned char   which_groups;
+       unsigned char   groups;
+       unsigned char   which_mods;
+       XkbModsRec      mods;
+       unsigned int    ctrls;
+} XkbIndicatorMapRec, *XkbIndicatorMapPtr;
+
+#define        XkbIM_IsAuto(i) ((((i)->flags&XkbIM_NoAutomatic)==0)&&\
+                           (((i)->which_groups&&(i)->groups)||\
+                            ((i)->which_mods&&(i)->mods.mask)||\
+                            ((i)->ctrls)))
+#define        XkbIM_InUse(i)  (((i)->flags)||((i)->which_groups)||\
+                                       ((i)->which_mods)||((i)->ctrls))
+       
+
+typedef struct _XkbIndicatorRec {
+       unsigned long           phys_indicators;
+       XkbIndicatorMapRec      maps[XkbNumIndicators];
+} XkbIndicatorRec,*XkbIndicatorPtr;
+
+typedef        struct _XkbKeyNameRec {
+       char    name[XkbKeyNameLength];
+} XkbKeyNameRec,*XkbKeyNamePtr;
+
+typedef struct _XkbKeyAliasRec {
+       char    real[XkbKeyNameLength];
+       char    alias[XkbKeyNameLength];
+} XkbKeyAliasRec,*XkbKeyAliasPtr;
+
+       /*
+        * Names for everything 
+        */
+typedef struct _XkbNamesRec {
+       Atom              keycodes;
+       Atom              geometry;
+       Atom              symbols;
+       Atom              types;
+       Atom              compat;
+       Atom              vmods[XkbNumVirtualMods];
+       Atom              indicators[XkbNumIndicators];
+       Atom              groups[XkbNumKbdGroups];
+       XkbKeyNamePtr     keys;
+       XkbKeyAliasPtr    key_aliases;
+       Atom             *radio_groups;
+       Atom              phys_symbols;
+
+       unsigned char     num_keys;
+       unsigned char     num_key_aliases;
+       unsigned short    num_rg;
+} XkbNamesRec,*XkbNamesPtr;
+
+typedef        struct _XkbGeometry     *XkbGeometryPtr;
+       /*
+        * Tie it all together into one big keyboard description
+        */
+typedef        struct _XkbDesc {
+       struct _XDisplay *      dpy;
+       unsigned short          flags;
+       unsigned short          device_spec;
+       KeyCode                 min_key_code;
+       KeyCode                 max_key_code;
+
+       XkbControlsPtr          ctrls;
+       XkbServerMapPtr         server;
+       XkbClientMapPtr         map;
+       XkbIndicatorPtr         indicators;
+       XkbNamesPtr             names;
+       XkbCompatMapPtr         compat;
+       XkbGeometryPtr          geom;
+} XkbDescRec, *XkbDescPtr;
+#define        XkbKeyKeyTypeIndex(d,k,g)       (XkbCMKeyTypeIndex((d)->map,k,g))
+#define        XkbKeyKeyType(d,k,g)            (XkbCMKeyType((d)->map,k,g))
+#define        XkbKeyGroupWidth(d,k,g)         (XkbCMKeyGroupWidth((d)->map,k,g))
+#define        XkbKeyGroupsWidth(d,k)          (XkbCMKeyGroupsWidth((d)->map,k))
+#define        XkbKeyGroupInfo(d,k)            (XkbCMKeyGroupInfo((d)->map,(k)))
+#define        XkbKeyNumGroups(d,k)            (XkbCMKeyNumGroups((d)->map,(k)))
+#define        XkbKeyNumSyms(d,k)              (XkbCMKeyNumSyms((d)->map,(k)))
+#define        XkbKeySymsPtr(d,k)              (XkbCMKeySymsPtr((d)->map,(k)))
+#define        XkbKeySym(d,k,n)                (XkbKeySymsPtr(d,k)[n])
+#define        XkbKeySymEntry(d,k,sl,g) \
+       (XkbKeySym(d,k,((XkbKeyGroupsWidth(d,k)*(g))+(sl))))
+#define        XkbKeyAction(d,k,n) \
+       (XkbKeyHasActions(d,k)?&XkbKeyActionsPtr(d,k)[n]:NULL)
+#define        XkbKeyActionEntry(d,k,sl,g) \
+       (XkbKeyHasActions(d,k)?\
+               XkbKeyAction(d,k,((XkbKeyGroupsWidth(d,k)*(g))+(sl))):NULL)
+
+#define        XkbKeyHasActions(d,k)   ((d)->server->key_acts[k]!=0)
+#define        XkbKeyNumActions(d,k)   (XkbKeyHasActions(d,k)?XkbKeyNumSyms(d,k):1)
+#define        XkbKeyActionsPtr(d,k)   (XkbSMKeyActionsPtr((d)->server,k))
+#define        XkbKeycodeInRange(d,k)  (((k)>=(d)->min_key_code)&&\
+                                ((k)<=(d)->max_key_code))
+#define        XkbNumKeys(d)           ((d)->max_key_code-(d)->min_key_code+1)
+
+
+       /*
+        * The following structures can be used to track changes
+        * to a keyboard device
+        */
+typedef struct _XkbMapChanges {
+       unsigned short           changed;
+       KeyCode                  min_key_code;
+       KeyCode                  max_key_code;
+       unsigned char            first_type;
+       unsigned char            num_types;
+       KeyCode                  first_key_sym;
+       unsigned char            num_key_syms;
+       KeyCode                  first_key_act;
+       unsigned char            num_key_acts;
+       KeyCode                  first_key_behavior;
+       unsigned char            num_key_behaviors;
+       KeyCode                  first_key_explicit;
+       unsigned char            num_key_explicit;
+       KeyCode                  first_modmap_key;
+       unsigned char            num_modmap_keys;
+       KeyCode                  first_vmodmap_key;
+       unsigned char            num_vmodmap_keys;
+       unsigned char            pad;
+       unsigned short           vmods;
+} XkbMapChangesRec,*XkbMapChangesPtr;
+
+typedef struct _XkbControlsChanges {
+       unsigned int             changed_ctrls;
+       unsigned int             enabled_ctrls_changes;
+       Bool                     num_groups_changed;
+} XkbControlsChangesRec,*XkbControlsChangesPtr;
+
+typedef struct _XkbIndicatorChanges {
+       unsigned int             state_changes;
+       unsigned int             map_changes;
+} XkbIndicatorChangesRec,*XkbIndicatorChangesPtr;
+
+typedef struct _XkbNameChanges {
+       unsigned int            changed;
+       unsigned char           first_type;
+       unsigned char           num_types;
+       unsigned char           first_lvl;
+       unsigned char           num_lvls;
+       unsigned char           num_aliases;
+       unsigned char           num_rg;
+       unsigned char           first_key;
+       unsigned char           num_keys;
+       unsigned short          changed_vmods;
+       unsigned long           changed_indicators;
+       unsigned char           changed_groups;
+} XkbNameChangesRec,*XkbNameChangesPtr;
+
+typedef struct _XkbCompatChanges {
+       unsigned char           changed_groups;
+       unsigned short          first_si;
+       unsigned short          num_si;
+} XkbCompatChangesRec,*XkbCompatChangesPtr;
+
+typedef struct _XkbChanges {
+       unsigned short           device_spec;
+       unsigned short           state_changes;
+       XkbMapChangesRec         map;
+       XkbControlsChangesRec    ctrls;
+       XkbIndicatorChangesRec   indicators;
+       XkbNameChangesRec        names;
+       XkbCompatChangesRec      compat;
+} XkbChangesRec, *XkbChangesPtr;
+
+       /*
+        * These data structures are used to construct a keymap from 
+        * a set of components or to list components in the server
+        * database.
+        */
+typedef struct _XkbComponentNames {
+       char *                   keymap;
+       char *                   keycodes;
+       char *                   types;
+       char *                   compat;
+       char *                   symbols;
+       char *                   geometry;
+} XkbComponentNamesRec, *XkbComponentNamesPtr;
+
+typedef struct _XkbComponentName {
+       unsigned short          flags;
+       char *                  name;
+} XkbComponentNameRec,*XkbComponentNamePtr;
+
+typedef struct _XkbComponentList {
+       int                     num_keymaps;
+       int                     num_keycodes;
+       int                     num_types;
+       int                     num_compat;
+       int                     num_symbols;
+       int                     num_geometry;
+       XkbComponentNamePtr     keymaps;
+       XkbComponentNamePtr     keycodes;
+       XkbComponentNamePtr     types;
+       XkbComponentNamePtr     compat;
+       XkbComponentNamePtr     symbols;
+       XkbComponentNamePtr     geometry;
+} XkbComponentListRec, *XkbComponentListPtr;
+
+       /*
+        * The following data structures describe and track changes to a 
+        * non-keyboard extension device 
+        */
+typedef struct _XkbDeviceLedInfo {
+       unsigned short                  led_class;
+       unsigned short                  led_id;
+       unsigned int                    phys_indicators;
+       unsigned int                    maps_present;
+       unsigned int                    names_present;
+       unsigned int                    state;
+       Atom                            names[XkbNumIndicators];
+       XkbIndicatorMapRec              maps[XkbNumIndicators];
+} XkbDeviceLedInfoRec,*XkbDeviceLedInfoPtr;
+
+typedef struct _XkbDeviceInfo {
+       char *                  name;
+       Atom                    type;
+       unsigned short          device_spec;
+       Bool                    has_own_state;
+       unsigned short          supported;
+       unsigned short          unsupported;
+
+       unsigned short          num_btns;
+       XkbAction *             btn_acts;
+
+       unsigned short          sz_leds;
+       unsigned short          num_leds;
+       unsigned short          dflt_kbd_fb;
+       unsigned short          dflt_led_fb;
+       XkbDeviceLedInfoPtr     leds;
+} XkbDeviceInfoRec,*XkbDeviceInfoPtr;
+
+#define        XkbXI_DevHasBtnActs(d)  (((d)->num_btns>0)&&((d)->btn_acts!=NULL))
+#define        XkbXI_LegalDevBtn(d,b)  (XkbXI_DevHasBtnActs(d)&&((b)<(d)->num_btns))
+#define        XkbXI_DevHasLeds(d)     (((d)->num_leds>0)&&((d)->leds!=NULL))
+
+typedef struct _XkbDeviceLedChanges {
+       unsigned short          led_class;
+       unsigned short          led_id;
+       unsigned int            defined; /* names or maps changed */
+       struct _XkbDeviceLedChanges *next;
+} XkbDeviceLedChangesRec,*XkbDeviceLedChangesPtr;
+
+typedef struct _XkbDeviceChanges {
+       unsigned int            changed;
+       unsigned short          first_btn;
+       unsigned short          num_btns;
+       XkbDeviceLedChangesRec  leds;
+} XkbDeviceChangesRec,*XkbDeviceChangesPtr;
+
+#endif /* _XKBSTR_H_ */