1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync/************************************************************
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncCopyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncPermission to use, copy, modify, and distribute this
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncsoftware and its documentation for any purpose and without
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncfee is hereby granted, provided that the above copyright
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncnotice appear in all copies and that both that copyright
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncnotice and this permission notice appear in supporting
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncdocumentation, and that the name of Silicon Graphics not be
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncused in advertising or publicity pertaining to distribution
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncof the software without specific prior written permission.
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncSilicon Graphics makes no representation about the suitability
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncof this software for any purpose. It is provided "as is"
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncwithout any express or implied warranty.
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncSILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncSOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncAND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncGRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncDAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncOR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsyncTHE USE OR PERFORMANCE OF THIS SOFTWARE.
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync********************************************************/
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbCharToInt(v) ((v)&0x80?(int)((v)|(~0xff)):(int)((v)&0x7f))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbIntTo2Chars(i,h,l) (((h)=((i>>8)&0xff)),((l)=((i)&0xff)))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define Xkb2CharsToInt(h,l) ((h)&0x80?(int)(((h)<<8)|(l)|(~0xffff)):\
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync * Common data structures and access macros
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbStateMods(s) ((s)->base_mods|(s)->latched_mods|XkbModLocks(s))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbStateGroup(s) ((s)->base_group+(s)->latched_group+XkbGroupLock(s))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbStateFieldFromRec(s) XkbBuildCoreState((s)->lookup_mods,(s)->group)
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbGrabStateFromRec(s) XkbBuildCoreState((s)->grab_mods,(s)->group)
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbSetGroupInfo(g,w,n) (((w)&0xc0)|(((n)&3)<<4)|((g)&0x0f))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbSetNumGroups(g,n) (((g)&0xf0)|((n)&0x0f))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync * Structures and access macros used primarily by the server
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync (((a)->vmods1=(((v)>>8)&0xff)),(a)->vmods2=((v)&0xff))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbSAGroup(a) (XkbCharToInt((a)->group_XXX))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbPtrActionX(a) (Xkb2CharsToInt((a)->high_XXX,(a)->low_XXX))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbPtrActionY(a) (Xkb2CharsToInt((a)->high_YYY,(a)->low_YYY))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbSetPtrActionX(a,x) (XkbIntTo2Chars(x,(a)->high_XXX,(a)->low_XXX))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbSetPtrActionY(a,y) (XkbIntTo2Chars(y,(a)->high_YYY,(a)->low_YYY))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbSAPtrDfltValue(a) (XkbCharToInt((a)->valueXXX))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbSASetPtrDfltValue(a,c) ((a)->valueXXX= ((c)&0xff))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbSAScreen(a) (XkbCharToInt((a)->screenXXX))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbSASetScreen(a,s) ((a)->screenXXX= ((s)&0xff))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbActionSetCtrls(a,c) (((a)->ctrls3=(((c)>>24)&0xff)),\
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbActionCtrls(a) ((((unsigned int)(a)->ctrls3)<<24)|\
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync ((unsigned int)((a)->ctrls0)))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbSARedirectVMods(a) ((((unsigned int)(a)->vmods1)<<8)|\
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync ((unsigned int)(a)->vmods0))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbSARedirectSetVMods(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),\
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbSARedirectVModsMask(a) ((((unsigned int)(a)->vmods_mask1)<<8)|\
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync ((unsigned int)(a)->vmods_mask0))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbSARedirectSetVModsMask(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),\
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync unsigned char per_key_repeat[XkbPerKeyBitArraySize];
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbAX_AnyFeedback(c) ((c)->enabled_ctrls&XkbAccessXFeedbackMask)
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbAX_NeedFeedback(c,w) (XkbAX_AnyFeedback(c)&&XkbAX_NeedOption(c,w))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync /* explicit is a C++ reserved word */
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync unsigned char *explicit;
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbSMKeyActionsPtr(m,k) (&(m)->acts[(m)->key_acts[k]])
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync * Structures and access macros used primarily by clients
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbCMKeyGroupInfo(m,k) ((m)->key_sym_map[k].group_info)
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbCMKeyNumGroups(m,k) (XkbNumGroups((m)->key_sym_map[k].group_info))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbCMKeyGroupWidth(m,k,g) (XkbCMKeyType(m,k,g)->num_levels)
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbCMKeyGroupsWidth(m,k) ((m)->key_sym_map[k].width)
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbCMKeyTypeIndex(m,k,g) ((m)->key_sym_map[k].kt_index[g&0x3])
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbCMKeyType(m,k,g) (&(m)->types[XkbCMKeyTypeIndex(m,k,g)])
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbCMKeyNumSyms(m,k) (XkbCMKeyGroupsWidth(m,k)*XkbCMKeyNumGroups(m,k))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbCMKeySymsOffset(m,k) ((m)->key_sym_map[k].offset)
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbCMKeySymsPtr(m,k) (&(m)->syms[XkbCMKeySymsOffset(m,k)])
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync * Compatibility structures and access macros
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbIM_IsAuto(i) ((((i)->flags&XkbIM_NoAutomatic)==0)&&\
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbIM_InUse(i) (((i)->flags)||((i)->which_groups)||\
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync * Names for everything
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync * Tie it all together into one big keyboard description
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbKeyKeyTypeIndex(d,k,g) (XkbCMKeyTypeIndex((d)->map,k,g))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbKeyKeyType(d,k,g) (XkbCMKeyType((d)->map,k,g))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbKeyGroupWidth(d,k,g) (XkbCMKeyGroupWidth((d)->map,k,g))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbKeyGroupsWidth(d,k) (XkbCMKeyGroupsWidth((d)->map,k))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbKeyGroupInfo(d,k) (XkbCMKeyGroupInfo((d)->map,(k)))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbKeyNumGroups(d,k) (XkbCMKeyNumGroups((d)->map,(k)))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbKeyNumSyms(d,k) (XkbCMKeyNumSyms((d)->map,(k)))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbKeySymsPtr(d,k) (XkbCMKeySymsPtr((d)->map,(k)))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync (XkbKeySym(d,k,((XkbKeyGroupsWidth(d,k)*(g))+(sl))))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync (XkbKeyHasActions(d,k)?&XkbKeyActionsPtr(d,k)[n]:NULL)
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync XkbKeyAction(d,k,((XkbKeyGroupsWidth(d,k)*(g))+(sl))):NULL)
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbKeyHasActions(d,k) ((d)->server->key_acts[k]!=0)
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbKeyNumActions(d,k) (XkbKeyHasActions(d,k)?XkbKeyNumSyms(d,k):1)
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbKeyActionsPtr(d,k) (XkbSMKeyActionsPtr((d)->server,k))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbKeycodeInRange(d,k) (((k)>=(d)->min_key_code)&&\
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbNumKeys(d) ((d)->max_key_code-(d)->min_key_code+1)
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync * The following structures can be used to track changes
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync * to a keyboard device
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync * These data structures are used to construct a keymap from
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync * a set of components or to list components in the server
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync * database.
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync * The following data structures describe and track changes to a
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync * non-keyboard extension device
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbXI_DevHasBtnActs(d) (((d)->num_btns>0)&&((d)->btn_acts!=NULL))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbXI_LegalDevBtn(d,b) (XkbXI_DevHasBtnActs(d)&&((b)<(d)->num_btns))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#define XkbXI_DevHasLeds(d) (((d)->num_leds>0)&&((d)->leds!=NULL))
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync unsigned int defined; /* names or maps changed */
1131579cf38ac46158dd0da1cfac260914b1ed0dvboxsync#endif /* _XKBSTR_H_ */