#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 */
struct xkb_group_action {
unsigned char type;
unsigned char flags;
- int16_t group_XXX;
+ int16_t group;
};
struct xkb_iso_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 {
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;
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;
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;
#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;
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;
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;
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;
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])
#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;
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
#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;
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;
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)
#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;
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
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
* 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