a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/************************************************************
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncCopyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncPermission to use, copy, modify, and distribute this
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncsoftware and its documentation for any purpose and without
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncfee is hereby granted, provided that the above copyright
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncnotice appear in all copies and that both that copyright
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncnotice and this permission notice appear in supporting
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncdocumentation, and that the name of Silicon Graphics not be
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncused in advertising or publicity pertaining to distribution
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncof the software without specific prior written permission.
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSilicon Graphics makes no representation about the suitability
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncof this software for any purpose. It is provided "as is"
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncwithout any express or implied warranty.
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncAND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncGRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncDAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncOR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncTHE USE OR PERFORMANCE OF THIS SOFTWARE.
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync********************************************************/
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbCharToInt(v) ((int) ((v) & 0x80 ? ((v) | (~0xff)) : ((v) & 0x7f)))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbIntTo2Chars(i, h, l) ((h) = (i >> 8) & 0xff, (l) = (i) & 0xff)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * Common data structures and access macros
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* FIXME: Why are base + latched short and not char?? */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unsigned short base_group; /* physically ... down? */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unsigned char compat_state; /* mods + group for core state */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* grab mods = all depressed and latched mods, _not_ locked mods */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unsigned char grab_mods; /* grab mods minus internal mods */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unsigned char compat_grab_mods; /* grab mods + group for core state,
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync but not locked groups if
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync IgnoreGroupLocks set */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* effective mods = all mods (depressed, latched, locked) */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unsigned char lookup_mods; /* effective mods minus internal mods */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unsigned char compat_lookup_mods; /* effective mods + group */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unsigned short ptr_buttons; /* core pointer buttons */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbStateFieldFromRec(s) XkbBuildCoreState((s)->lookup_mods,(s)->group)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbGrabStateFromRec(s) XkbBuildCoreState((s)->grab_mods,(s)->group)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbSetGroupInfo(g, w, n) (((w) & 0xc0) | (((n) & 3) << 4) | \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync ((g) & 0x0f))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbSetNumGroups(g,n) (((g)&0xf0)|((n)&0x0f))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * Structures and access macros used primarily by the server
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* FIXME: Make this an int. */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbModActionVMods(a) ((short) (((a)->vmods1 << 8) | (a)->vmods2))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* FIXME: Make this an int. */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbSAGroup(a) (XkbCharToInt((a)->group_XXX))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* FIXME: Make this an int. */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* FIXME: Make this an int. */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbPtrActionX(a) (Xkb2CharsToInt((a)->high_XXX,(a)->low_XXX))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbPtrActionY(a) (Xkb2CharsToInt((a)->high_YYY,(a)->low_YYY))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbSetPtrActionX(a,x) (XkbIntTo2Chars(x,(a)->high_XXX,(a)->low_XXX))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbSetPtrActionY(a,y) (XkbIntTo2Chars(y,(a)->high_YYY,(a)->low_YYY))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbSAPtrDfltValue(a) (XkbCharToInt((a)->valueXXX))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbSASetPtrDfltValue(a, c) ((a)->valueXXX = (c) & 0xff)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbSAScreen(a) (XkbCharToInt((a)->screenXXX))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbSASetScreen(a, s) ((a)->screenXXX = (s) & 0xff)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* FIXME: Make this an int. */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbActionSetCtrls(a, c) ((a)->ctrls3 = ((c) >> 24) & 0xff, \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbActionCtrls(a) ((((unsigned int)(a)->ctrls3)<<24)|\
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync ((unsigned int) (a)->ctrls0))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* FIXME: Make this an int. */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbSARedirectVMods(a) ((((unsigned int)(a)->vmods1)<<8)|\
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync ((unsigned int)(a)->vmods0))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/* FIXME: This is blatantly not setting vmods. Yeesh. */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbSARedirectSetVMods(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),\
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbSARedirectVModsMask(a) ((((unsigned int)(a)->vmods_mask1)<<8)|\
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync ((unsigned int)(a)->vmods_mask0))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbSARedirectSetVModsMask(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),\
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unsigned char per_key_repeat[XkbPerKeyBitArraySize];
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbAX_AnyFeedback(c) ((c)->enabled_ctrls&XkbAccessXFeedbackMask)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbAX_NeedFeedback(c, w) (XkbAX_AnyFeedback((c)) && \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* explicit is a C++ reserved word */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unsigned char *explicit;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbSMKeyActionsPtr(m, k) (&(m)->acts[(m)->key_acts[(k)]])
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * Structures and access macros used primarily by clients
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbCMKeyGroupInfo(m, k) ((m)->key_sym_map[(k)].group_info)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbCMKeyNumGroups(m, k) (XkbNumGroups((m)->key_sym_map[(k)].group_info))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbCMKeyGroupWidth(m, k, g) (XkbCMKeyType((m), (k), (g))->num_levels)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbCMKeyGroupsWidth(m, k) ((m)->key_sym_map[(k)].width)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbCMKeyTypeIndex(m, k, g) ((m)->key_sym_map[(k)].kt_index[(g) & 0x3])
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbCMKeyType(m, k, g) (&(m)->types[XkbCMKeyTypeIndex((m), (k), (g))])
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbCMKeyNumSyms(m, k) (XkbCMKeyGroupsWidth((m), (k)) * \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbCMKeySymsOffset(m, k) ((m)->key_sym_map[(k)].offset)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbCMKeySymsPtr(m, k) (&(m)->syms[XkbCMKeySymsOffset((m), (k))])
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * Compatibility structures and access macros
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* FIXME: For some reason, interepretation of groups is wildly
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * different between which being base/latched/locked. */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbIM_IsAuto(i) (!((i)->flags & XkbIM_NoAutomatic) && \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbIM_InUse(i) ((i)->flags || (i)->which_groups || (i)->which_mods || \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * Names for everything
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * Tie it all together into one big keyboard description
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unsigned int defined;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbKeyKeyTypeIndex(d, k, g) (XkbCMKeyTypeIndex((d)->map, (k), (g)))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbKeyKeyType(d, k, g) (XkbCMKeyType((d)->map, (k), (g)))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbKeyGroupWidth(d, k, g) (XkbCMKeyGroupWidth((d)->map, (k), (g)))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbKeyGroupsWidth(d, k) (XkbCMKeyGroupsWidth((d)->map, (k)))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbKeyGroupInfo(d,k) (XkbCMKeyGroupInfo((d)->map,(k)))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbKeyNumGroups(d,k) (XkbCMKeyNumGroups((d)->map,(k)))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbKeyNumSyms(d,k) (XkbCMKeyNumSyms((d)->map,(k)))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbKeySymsPtr(d,k) (XkbCMKeySymsPtr((d)->map,(k)))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbKeySym(d, k, n) (XkbKeySymsPtr((d), (k))[(n)])
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync (XkbKeySym((d), (k), (XkbKeyGroupsWidth((d), (k)) * (g)) + (sl)))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync (XkbKeyHasActions((d), (k)) ? & XkbKeyActionsPtr((d), (k))[(n)] : NULL)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync (XkbKeyHasActions((d), (k)) ? \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync XkbKeyAction((d), (k), ((XkbKeyGroupsWidth((d), (k)) * (g)) + (sl))) : \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbKeyHasActions(d, k) (!!(d)->server->key_acts[(k)])
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbKeyNumActions(d, k) (XkbKeyHasActions((d), (k)) ? \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbKeyActionsPtr(d, k) (XkbSMKeyActionsPtr((d)->server, (k)))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbKeycodeInRange(d, k) ((k) >= (d)->min_key_code && \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbNumKeys(d) ((d)->max_key_code-(d)->min_key_code+1)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * The following structures can be used to track changes
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * to a keyboard device
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * These data structures are used to construct a keymap from
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * a set of components or to list components in the server
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * database.
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * The following data structures describe and track changes to a
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * non-keyboard extension device
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbXI_DevHasBtnActs(d) ((d)->num_btns > 0 && (d)->btn_acts)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbXI_LegalDevBtn(d,b) (XkbXI_DevHasBtnActs(d) && (b) < (d)->num_btns)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define XkbXI_DevHasLeds(d) ((d)->num_leds > 0 && (d)->leds)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unsigned int defined; /* names or maps changed */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#endif /* _XKBSTR_H_ */