Pull in enough structs and defines from XKBstr.h to only need XKB.h
[platform/upstream/libxkbcommon.git] / include / X11 / extensions / XKBcommon.h
index f6641a1..ab67e6e 100644 (file)
@@ -58,8 +58,149 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include <stdint.h>
 #include <stdio.h>
 #include <X11/Xfuncproto.h>
-#include <X11/extensions/XKBstrcommon.h>
-#include <X11/extensions/XKBrulescommon.h>
+#include <X11/extensions/XKB.h>
+
+#ifndef X_PROTOCOL
+typedef unsigned char KeyCode;
+#endif
+
+#ifndef _XTYPEDEF_BOOL
+typedef int Bool;
+#endif
+
+/* From filecommon */
+
+#define XkbXKMFile  0
+#define XkbCFile    1
+#define XkbXKBFile  2
+#define XkbMessage  3
+
+#define XkbMapDefined   (1 << 0)
+#define XkbStateDefined (1 << 1)
+
+/***====================================================================***/
+
+#define _XkbSuccess                 0
+#define _XkbErrMissingNames         1
+#define _XkbErrMissingTypes         2
+#define _XkbErrMissingReqTypes      3
+#define _XkbErrMissingSymbols       4
+#define _XkbErrMissingVMods         5
+#define _XkbErrMissingIndicators    6
+#define _XkbErrMissingCompatMap     7
+#define _XkbErrMissingSymInterps    8
+#define _XkbErrMissingGeometry      9
+#define _XkbErrIllegalDoodad        10
+#define _XkbErrIllegalTOCType       11
+#define _XkbErrIllegalContents      12
+#define _XkbErrEmptyFile            13
+#define _XkbErrFileNotFound         14
+#define _XkbErrFileCannotOpen       15
+#define _XkbErrBadValue             16
+#define _XkbErrBadMatch             17
+#define _XkbErrBadTypeName          18
+#define _XkbErrBadTypeWidth         19
+#define _XkbErrBadFileType          20
+#define _XkbErrBadFileVersion       21
+#define _XkbErrBadFileFormat        22
+#define _XkbErrBadAlloc             23
+#define _XkbErrBadLength            24
+#define _XkbErrXReqFailure          25
+#define _XkbErrBadImplementation    26
+
+/* From rulescommon */
+
+#define _XkbKSLower (1 << 0)
+#define _XkbKSUpper (1 << 1)
+
+#define XkbKSIsKeypad(k) (((k) >= XK_KP_Space) && ((k) <= XK_KP_Equal))
+#define XkbKSIsDeadKey(k) \
+    (((k) >= XK_dead_grave) && ((k) <= XK_dead_semivoiced_sound))
+
+
+
+typedef struct _XkbRMLVOSet {
+    char *  rules;
+    char *  model;
+    char *  layout;
+    char *  variant;
+    char *  options;
+} XkbRMLVOSet;
+
+typedef struct _XkbRF_VarDefs {
+    char *          model;
+    char *          layout;
+    char *          variant;
+    char *          options;
+    unsigned short  sz_extra;
+    unsigned short  num_extra;
+    char *          extra_names;
+    char **         extra_values;
+} XkbRF_VarDefsRec,*XkbRF_VarDefsPtr;
+
+typedef struct _XkbRF_VarDesc {
+    char *  name;
+    char *  desc;
+} XkbRF_VarDescRec, *XkbRF_VarDescPtr;
+
+typedef struct _XkbRF_DescribeVars {
+    int                 sz_desc;
+    int                 num_desc;
+    XkbRF_VarDescPtr    desc;
+} XkbRF_DescribeVarsRec,*XkbRF_DescribeVarsPtr;
+
+typedef struct _XkbRF_Rule {
+    int         number;
+    int         layout_num;
+    int         variant_num;
+    char *      model;
+    char *      layout;
+    char *      variant;
+    char *      option;
+    /* yields */
+    char *      keycodes;
+    char *      symbols;
+    char *      types;
+    char *      compat;
+    char *      geometry;
+    char *      keymap;
+    unsigned    flags;
+} XkbRF_RuleRec,*XkbRF_RulePtr;
+
+typedef struct _XkbRF_Group {
+    int     number;
+    char *  name;
+    char *  words;
+} XkbRF_GroupRec, *XkbRF_GroupPtr;
+
+#define XkbRF_PendingMatch  (1L<<1)
+#define XkbRF_Option        (1L<<2)
+#define XkbRF_Append        (1L<<3)
+#define XkbRF_Normal        (1L<<4)
+#define XkbRF_Invalid       (1L<<5)
+
+typedef struct _XkbRF_Rules {
+    XkbRF_DescribeVarsRec   models;
+    XkbRF_DescribeVarsRec   layouts;
+    XkbRF_DescribeVarsRec   variants;
+    XkbRF_DescribeVarsRec   options;
+    unsigned short          sz_extra;
+    unsigned short          num_extra;
+    char **                 extra_names;
+    XkbRF_DescribeVarsPtr   extra;
+
+    unsigned short          sz_rules;
+    unsigned short          num_rules;
+    XkbRF_RulePtr           rules;
+    unsigned short          sz_groups;
+    unsigned short          num_groups;
+    XkbRF_GroupPtr          groups;
+} XkbRF_RulesRec, *XkbRF_RulesPtr;
+
+#define _XKB_RF_NAMES_PROP_ATOM     "_XKB_RULES_NAMES"
+#define _XKB_RF_NAMES_PROP_MAXLEN   1024
+
+
 
 /* Action structures used in the server */
 
@@ -80,7 +221,7 @@ struct xkb_mod_action {
 struct xkb_group_action {
     unsigned char   type;
     unsigned char   flags;
-    int16_t         group_XXX;
+    int16_t         group;
 };
 
 struct xkb_iso_action {
@@ -123,13 +264,13 @@ struct xkb_pointer_default_action {
     unsigned char   type;
     uint8_t         flags;
     uint8_t         affect;
-    uint8_t         valueXXX;
+    uint8_t         value;
 };
 
 struct xkb_switch_screen_action {
     unsigned char   type;
     uint8_t         flags;
-    uint8_t         screenXXX;
+    uint8_t         screen;
 };
 
 struct xkb_redirect_key_action {
@@ -142,6 +283,15 @@ struct xkb_redirect_key_action {
        unsigned char   vmods0;
        unsigned char   vmods1;
 };
+#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)))
+
 
 struct xkb_pointer_action {
        unsigned char   type;
@@ -151,6 +301,11 @@ struct xkb_pointer_action {
        unsigned char   high_YYY;
        unsigned char   low_YYY;
 };
+#define        XkbIntTo2Chars(i,h,l)   (((h)=((i>>8)&0xff)),((l)=((i)&0xff)))
+#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))
 
 struct xkb_message_action {
        unsigned char   type;
@@ -182,58 +337,87 @@ union xkb_action {
     unsigned char                     type;
 };
 
-typedef struct _XkbcMods {
+struct xkb_mods {
         uint32_t        mask;   /* effective mods */
         uint32_t        vmods;
         uint8_t         real_mods;
-} XkbcModsRec, *XkbcModsPtr;
+};
 
-typedef struct _XkbcKTMapEntry {
+struct xkb_kt_map_entry {
         Bool            active;
         uint16_t        level;
-        XkbcModsRec     mods;
-} XkbcKTMapEntryRec, *XkbcKTMapEntryPtr;
+        struct xkb_mods     mods;
+};
 
-typedef struct _XkbcKeyType {
-    XkbcModsRec             mods;
+struct xkb_key_type {
+    struct xkb_mods             mods;
     uint16_t                num_levels;
     unsigned char           map_count;
-    XkbcKTMapEntryPtr       map;
-    XkbcModsPtr             preserve;
+    struct xkb_kt_map_entry *       map;
+    struct xkb_mods *             preserve;
     uint32_t                  name;
     uint32_t                 *level_names;
-} XkbcKeyTypeRec, *XkbcKeyTypePtr;
+};
 
-typedef struct _XkbcSymInterpretRec {
+struct xkb_sym_interpret {
     uint32_t          sym;
     unsigned char   flags;
     unsigned char   match;
     uint8_t         mods; /* XXX real or virt? */
     uint32_t        virtual_mod;
     struct xkb_any_action   act;
-} XkbcSymInterpretRec, *XkbcSymInterpretPtr;
+};
 
-typedef struct _XkbcCompatMapRec {
-    XkbcSymInterpretPtr      sym_interpret;
-    XkbcModsRec              groups[XkbNumKbdGroups];
+struct xkb_compat_map {
+    struct xkb_sym_interpret *      sym_interpret;
+    struct xkb_mods              groups[XkbNumKbdGroups];
     unsigned short           num_si;
     unsigned short           size_si;
-} XkbcCompatMapRec, *XkbcCompatMapPtr;
+};
 
-typedef struct _XkbcClientMapRec {
+struct xkb_sym_map {
+       unsigned char    kt_index[XkbNumKbdGroups];
+       unsigned char    group_info;
+       unsigned char    width;
+       unsigned short   offset;
+};
+
+#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))
+
+struct xkb_client_map {
     unsigned char            size_types;
     unsigned char            num_types;
-    XkbcKeyTypePtr           types;
+    struct xkb_key_type *           types;
 
     unsigned short           size_syms;
     unsigned short           num_syms;
     uint32_t                *syms;
-    XkbSymMapPtr             key_sym_map;
+    struct xkb_sym_map *             key_sym_map;
 
     unsigned char           *modmap;
-} XkbcClientMapRec, *XkbcClientMapPtr;
+};
+
+#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)])
+
+struct xkb_behavior {
+       unsigned char   type;
+       unsigned char   data;
+};
 
-typedef struct _XkbcServerMapRec {
+struct xkb_server_map {
     unsigned short      num_acts;
     unsigned short      size_acts;
 
@@ -245,14 +429,39 @@ typedef struct _XkbcServerMapRec {
 #endif
 
     union xkb_action          *acts;
-    XkbBehavior         *behaviors;
+    struct xkb_behavior         *behaviors;
     unsigned short      *key_acts;
     unsigned char       *explicits;
     uint32_t            vmods[XkbNumVirtualMods];
     uint32_t            *vmodmap;
-} XkbcServerMapRec, *XkbcServerMapPtr;
+};
+
+#define        XkbSMKeyActionsPtr(m,k) (&(m)->acts[(m)->key_acts[k]])
+
+struct xkb_indicator_map {
+       unsigned char   flags;
+       unsigned char   which_groups;
+       unsigned char   groups;
+       unsigned char   which_mods;
+       struct xkb_mods mods;
+       unsigned int    ctrls;
+};
 
-typedef struct _XkbcNamesRec {
+struct xkb_indicator {
+       unsigned long           phys_indicators;
+       struct xkb_indicator_map        maps[XkbNumIndicators];
+};
+
+struct xkb_key_name {
+       char    name[XkbKeyNameLength];
+};
+
+struct xkb_key_alias {
+       char    real[XkbKeyNameLength];
+       char    alias[XkbKeyNameLength];
+};
+
+struct xkb_names {
     uint32_t            keycodes;
     uint32_t            geometry;
     uint32_t            symbols;
@@ -261,57 +470,57 @@ typedef struct _XkbcNamesRec {
     uint32_t            vmods[XkbNumVirtualMods];
     uint32_t            indicators[XkbNumIndicators];
     uint32_t            groups[XkbNumKbdGroups];
-    XkbKeyNamePtr     keys;
-    XkbKeyAliasPtr    key_aliases;
+    struct xkb_key_name *     keys;
+    struct xkb_key_alias *    key_aliases;
     uint32_t           *radio_groups;
     uint32_t            phys_symbols;
 
     unsigned char     num_keys;
     unsigned char     num_key_aliases;
     unsigned short    num_rg;
-} XkbcNamesRec, *XkbcNamesPtr;
+};
 
-typedef        struct _XkbcProperty {
+struct xkb_property {
        char    *name;
        char    *value;
-} XkbcPropertyRec, *XkbcPropertyPtr;
+};
 
-typedef struct _XkbcColor {
+struct xkb_color {
        unsigned int    pixel;
        char *          spec;
-} XkbcColorRec, *XkbcColorPtr;
+};
 
-typedef        struct _XkbcPoint {
+struct xkb_point {
        short   x;
        short   y;
-} XkbcPointRec, *XkbcPointPtr;
+};
 
-typedef struct _XkbcBounds {
+struct xkb_bounds {
        short   x1,y1;
        short   x2,y2;
-} XkbcBoundsRec, *XkbcBoundsPtr;
+};
 #define        XkbBoundsWidth(b)       (((b)->x2)-((b)->x1))
 #define        XkbBoundsHeight(b)      (((b)->y2)-((b)->y1))
 
-typedef struct _XkbcOutline {
+struct xkb_outline {
        unsigned short  num_points;
        unsigned short  sz_points;
        unsigned short  corner_radius;
-       XkbcPointPtr    points;
-} XkbcOutlineRec, *XkbcOutlinePtr;
+       struct xkb_point *      points;
+};
 
-typedef struct _XkbcShape {
+struct xkb_shape {
        uint32_t                 name;
        unsigned short   num_outlines;
        unsigned short   sz_outlines;
-       XkbcOutlinePtr   outlines;
-       XkbcOutlinePtr   approx;
-       XkbcOutlinePtr   primary;
-       XkbcBoundsRec    bounds;
-} XkbcShapeRec, *XkbcShapePtr;
+       struct xkb_outline *     outlines;
+       struct xkb_outline *     approx;
+       struct xkb_outline *     primary;
+       struct xkb_bounds        bounds;
+};
 #define        XkbOutlineIndex(s,o)    ((int)((o)-&(s)->outlines[0]))
 
-typedef struct _XkbcShapeDoodad {
+struct xkb_shape_doodad {
        uint32_t                 name;
        unsigned char    type;
        unsigned char    priority;
@@ -320,13 +529,13 @@ typedef struct _XkbcShapeDoodad {
        short            angle;
        unsigned short   color_ndx;
        unsigned short   shape_ndx;
-} XkbcShapeDoodadRec, *XkbcShapeDoodadPtr;
+};
 #define        XkbShapeDoodadColor(g,d)        (&(g)->colors[(d)->color_ndx])
 #define        XkbShapeDoodadShape(g,d)        (&(g)->shapes[(d)->shape_ndx])
 #define        XkbSetShapeDoodadColor(g,d,c)   ((d)->color_ndx= (c)-&(g)->colors[0])
 #define        XkbSetShapeDoodadShape(g,d,s)   ((d)->shape_ndx= (s)-&(g)->shapes[0])
 
-typedef struct _XkbcTextDoodad {
+struct xkb_text_doodad {
        uint32_t                 name;
        unsigned char    type;
        unsigned char    priority;
@@ -338,11 +547,11 @@ typedef struct _XkbcTextDoodad {
        unsigned short   color_ndx;
        char *           text;
        char *           font;
-} XkbcTextDoodadRec, *XkbcTextDoodadPtr;
+};
 #define        XkbTextDoodadColor(g,d) (&(g)->colors[(d)->color_ndx])
 #define        XkbSetTextDoodadColor(g,d,c)    ((d)->color_ndx= (c)-&(g)->colors[0])
 
-typedef struct _XkbcIndicatorDoodad {
+struct xkb_indicator_doodad {
        uint32_t                 name;
        unsigned char    type;
        unsigned char    priority;
@@ -352,7 +561,7 @@ typedef struct _XkbcIndicatorDoodad {
        unsigned short   shape_ndx;
        unsigned short   on_color_ndx;
        unsigned short   off_color_ndx;
-} XkbcIndicatorDoodadRec, *XkbcIndicatorDoodadPtr;
+};
 #define        XkbIndicatorDoodadShape(g,d)    (&(g)->shapes[(d)->shape_ndx])
 #define        XkbIndicatorDoodadOnColor(g,d)  (&(g)->colors[(d)->on_color_ndx])
 #define        XkbIndicatorDoodadOffColor(g,d) (&(g)->colors[(d)->off_color_ndx])
@@ -363,7 +572,7 @@ typedef struct _XkbcIndicatorDoodad {
 #define        XkbSetIndicatorDoodadShape(g,d,s) \
                                ((d)->shape_ndx= (s)-&(g)->shapes[0])
 
-typedef struct _XkbcLogoDoodad {
+struct xkb_logo_doodad {
        uint32_t                 name;
        unsigned char    type;
        unsigned char    priority;
@@ -373,28 +582,28 @@ typedef struct _XkbcLogoDoodad {
        unsigned short   color_ndx;
        unsigned short   shape_ndx;
        char *           logo_name;
-} XkbcLogoDoodadRec, *XkbcLogoDoodadPtr;
+};
 #define        XkbLogoDoodadColor(g,d)         (&(g)->colors[(d)->color_ndx])
 #define        XkbLogoDoodadShape(g,d)         (&(g)->shapes[(d)->shape_ndx])
 #define        XkbSetLogoDoodadColor(g,d,c)    ((d)->color_ndx= (c)-&(g)->colors[0])
 #define        XkbSetLogoDoodadShape(g,d,s)    ((d)->shape_ndx= (s)-&(g)->shapes[0])
 
-typedef struct _XkbcAnyDoodad {
+struct xkb_any_doodad {
        uint32_t                 name;
        unsigned char    type;
        unsigned char    priority;
        short            top;
        short            left;
        short            angle;
-} XkbcAnyDoodadRec, *XkbcAnyDoodadPtr;
+};
 
-typedef union _XkbcDoodad {
-       XkbcAnyDoodadRec        any;
-       XkbcShapeDoodadRec      shape;
-       XkbcTextDoodadRec       text;
-       XkbcIndicatorDoodadRec  indicator;
-       XkbcLogoDoodadRec       logo;
-} XkbcDoodadRec, *XkbcDoodadPtr;
+union xkb_doodad {
+       struct xkb_any_doodad   any;
+       struct xkb_shape_doodad shape;
+       struct xkb_text_doodad  text;
+       struct xkb_indicator_doodad     indicator;
+       struct xkb_logo_doodad  logo;
+};
 
 #define        XkbUnknownDoodad        0
 #define        XkbOutlineDoodad        1
@@ -403,28 +612,28 @@ typedef union _XkbcDoodad {
 #define        XkbIndicatorDoodad      4
 #define        XkbLogoDoodad           5
 
-typedef struct _XkbcKey {
-       XkbKeyNameRec    name;
+struct xkb_key {
+       struct xkb_key_name      name;
        short            gap;
        unsigned char    shape_ndx;
        unsigned char    color_ndx;
-} XkbcKeyRec, *XkbcKeyPtr;
+};
 #define        XkbKeyShape(g,k)        (&(g)->shapes[(k)->shape_ndx])
 #define        XkbKeyColor(g,k)        (&(g)->colors[(k)->color_ndx])
 #define        XkbSetKeyShape(g,k,s)   ((k)->shape_ndx= (s)-&(g)->shapes[0])
 #define        XkbSetKeyColor(g,k,c)   ((k)->color_ndx= (c)-&(g)->colors[0])
 
-typedef struct _XkbRow {
+struct xkb_row {
        short           top;
        short           left;
        unsigned short  num_keys;
        unsigned short  sz_keys;
        int             vertical;
-       XkbcKeyPtr      keys;
-       XkbcBoundsRec   bounds;
-} XkbcRowRec, *XkbcRowPtr;
+       struct xkb_key *        keys;
+       struct xkb_bounds       bounds;
+};
 
-typedef struct _XkbcSection {
+struct xkb_section {
        uint32_t                 name;
        unsigned char    priority;
        short            top;
@@ -438,40 +647,40 @@ typedef struct _XkbcSection {
        unsigned short   sz_rows;
        unsigned short   sz_doodads;
        unsigned short   sz_overlays;
-       XkbcRowPtr       rows;
-       XkbcDoodadPtr    doodads;
-       XkbcBoundsRec    bounds;
-       struct _XkbOverlay *overlays;
-} XkbcSectionRec, *XkbcSectionPtr;
-
-typedef        struct _XkbcOverlayKey {
-       XkbKeyNameRec   over;
-       XkbKeyNameRec   under;
-} XkbcOverlayKeyRec, *XkbcOverlayKeyPtr;
-
-typedef struct _XkbOverlayRow {
+       struct xkb_row *         rows;
+       union xkb_doodad *       doodads;
+       struct xkb_bounds        bounds;
+       struct xkb_overlay *overlays;
+};
+
+struct xkb_overlay_key {
+       struct xkb_key_name     over;
+       struct xkb_key_name     under;
+};
+
+struct xkb_overlay_row {
        unsigned short          row_under;
        unsigned short          num_keys;
        unsigned short          sz_keys;
-       XkbcOverlayKeyPtr       keys;
-} XkbcOverlayRowRec, *XkbcOverlayRowPtr;
+       struct xkb_overlay_key *        keys;
+};
 
-typedef struct _XkbOverlay {
+struct xkb_overlay {
        uint32_t                        name;
-       XkbcSectionPtr          section_under;
+       struct xkb_section *            section_under;
        unsigned short          num_rows;
        unsigned short          sz_rows;
-       XkbcOverlayRowPtr       rows;
-       XkbcBoundsPtr           bounds;
-} XkbcOverlayRec, *XkbcOverlayPtr;
+       struct xkb_overlay_row *        rows;
+       struct xkb_bounds *             bounds;
+};
 
-typedef struct _XkbcGeometry {
+struct xkb_geometry {
        uint32_t                 name;
        unsigned short   width_mm;
        unsigned short   height_mm;
        char *           label_font;
-       XkbcColorPtr     label_color;
-       XkbcColorPtr     base_color;
+       struct xkb_color *       label_color;
+       struct xkb_color *       base_color;
        unsigned short   sz_properties;
        unsigned short   sz_colors;
        unsigned short   sz_shapes;
@@ -484,13 +693,13 @@ typedef struct _XkbcGeometry {
        unsigned short   num_sections;
        unsigned short   num_doodads;
        unsigned short   num_key_aliases;
-       XkbcPropertyPtr  properties;
-       XkbcColorPtr     colors;
-       XkbcShapePtr     shapes;
-       XkbcSectionPtr   sections;
-       XkbcDoodadPtr    doodads;
-       XkbKeyAliasPtr   key_aliases;
-} XkbcGeometryRec, *XkbcGeometryPtr;
+       struct xkb_property *    properties;
+       struct xkb_color *       colors;
+       struct xkb_shape *       shapes;
+       struct xkb_section *     sections;
+       union xkb_doodad *       doodads;
+       struct xkb_key_alias *   key_aliases;
+};
 #define        XkbGeomColorIndex(g,c)  ((int)((c)-&(g)->colors[0]))
 
 #define        XkbGeomPropertiesMask   (1<<0)
@@ -501,7 +710,7 @@ typedef struct _XkbcGeometry {
 #define        XkbGeomKeyAliasesMask   (1<<5)
 #define        XkbGeomAllMask          (0x3f)
 
-typedef struct _XkbcGeometrySizes {
+struct xkb_geometry_sizes {
        unsigned int    which;
        unsigned short  num_properties;
        unsigned short  num_colors;
@@ -509,24 +718,166 @@ typedef struct _XkbcGeometrySizes {
        unsigned short  num_sections;
        unsigned short  num_doodads;
        unsigned short  num_key_aliases;
-} XkbcGeometrySizesRec, *XkbcGeometrySizesPtr;
+};
+
+struct xkb_controls {
+       unsigned char   mk_dflt_btn;
+       unsigned char   num_groups;
+       unsigned char   groups_wrap;
+       struct xkb_mods internal;
+       struct xkb_mods 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];
+};
 
 /* Common keyboard description structure */
-typedef struct _XkbcDesc {
+struct xkb_desc {
     unsigned int        defined;
     unsigned short      flags;
     unsigned short      device_spec;
     KeyCode             min_key_code;
     KeyCode             max_key_code;
 
-    XkbControlsPtr      ctrls;
-    XkbcServerMapPtr    server;
-    XkbcClientMapPtr    map;
-    XkbIndicatorPtr     indicators;
-    XkbcNamesPtr        names;
-    XkbcCompatMapPtr    compat;
-    XkbcGeometryPtr     geom;
-} XkbcDescRec, *XkbcDescPtr;
+    struct xkb_controls *      ctrls;
+    struct xkb_server_map *    server;
+    struct xkb_client_map *    map;
+    struct xkb_indicator *     indicators;
+    struct xkb_names *        names;
+    struct xkb_compat_map *    compat;
+    struct xkb_geometry *     geom;
+};
+
+#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)
+
+struct xkb_map_changes {
+       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;
+};
+
+struct xkb_controls_changes {
+       unsigned int             changed_ctrls;
+       unsigned int             enabled_ctrls_changes;
+       Bool                     num_groups_changed;
+};
+
+struct xkb_indicator_changes {
+       unsigned int             state_changes;
+       unsigned int             map_changes;
+};
+
+struct xkb_name_changes {
+       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;
+};
+
+struct xkb_compat_changes {
+       unsigned char           changed_groups;
+       unsigned short          first_si;
+       unsigned short          num_si;
+};
+
+struct xkb_changes {
+       unsigned short           device_spec;
+       unsigned short           state_changes;
+       struct xkb_map_changes   map;
+       struct xkb_controls_changes      ctrls;
+       struct xkb_indicator_changes     indicators;
+       struct xkb_name_changes  names;
+       struct xkb_compat_changes        compat;
+};
+
+struct xkb_component_names {
+       char *                   keymap;
+       char *                   keycodes;
+       char *                   types;
+       char *                   compat;
+       char *                   symbols;
+       char *                   geometry;
+};
+
+struct xkb_component_name {
+       unsigned short          flags;
+       char *                  name;
+};
+
+struct xkb_component_list {
+       int                     num_keymaps;
+       int                     num_keycodes;
+       int                     num_types;
+       int                     num_compat;
+       int                     num_symbols;
+       int                     num_geometry;
+       struct xkb_component_name *     keymaps;
+       struct xkb_component_name *     keycodes;
+       struct xkb_component_name *     types;
+       struct xkb_component_name *     compat;
+       struct xkb_component_name *     symbols;
+       struct xkb_component_name *     geometry;
+};
 
 _XFUNCPROTOBEGIN
 
@@ -536,17 +887,17 @@ typedef const char *(*GetAtomValueFuncPtr)(uint32_t atom);
 extern void
 XkbcInitAtoms(InternAtomFuncPtr intern, GetAtomValueFuncPtr get_atom_value);
 
-extern XkbcDescPtr
+extern struct xkb_desc *
 XkbcCompileKeymapFromRules(const XkbRMLVOSet *rmlvo);
 
-extern XkbcDescPtr
-XkbcCompileKeymapFromComponents(const XkbComponentNamesPtr ktcsg);
+extern struct xkb_desc *
+XkbcCompileKeymapFromComponents(const struct xkb_component_names * ktcsg);
 
-extern XkbcDescPtr
+extern struct xkb_desc *
 XkbcCompileKeymapFromFile(FILE *inputFile, const char *mapName);
 
-extern XkbComponentListPtr
-XkbcListComponents(XkbComponentNamesPtr ptrns, int *maxMatch);
+extern struct xkb_component_list *
+XkbcListComponents(struct xkb_component_names * ptrns, int *maxMatch);
 
 /*
  * Canonicalises component names by prepending the relevant component from
@@ -563,8 +914,8 @@ XkbcListComponents(XkbComponentNamesPtr ptrns, int *maxMatch);
  * free()d, and a new one allocated with malloc().
  */
 extern void
-XkbcCanonicaliseComponents(XkbComponentNamesPtr names,
-                           const XkbComponentNamesPtr old);
+XkbcCanonicaliseComponents(struct xkb_component_names * names,
+                           const struct xkb_component_names * old);
 
 /*
  * Converts a keysym to a string; will return unknown Unicode codepoints