Home | History | Annotate | Download | only in extensions
      1 /* $Xorg: XKBsrv.h,v 1.3 2000/08/18 04:05:45 coskrey Exp $ */
      2 /* $XdotOrg: $ */
      3 /************************************************************
      4 Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
      5 
      6 Permission to use, copy, modify, and distribute this
      7 software and its documentation for any purpose and without
      8 fee is hereby granted, provided that the above copyright
      9 notice appear in all copies and that both that copyright
     10 notice and this permission notice appear in supporting
     11 documentation, and that the name of Silicon Graphics not be
     12 used in advertising or publicity pertaining to distribution
     13 of the software without specific prior written permission.
     14 Silicon Graphics makes no representation about the suitability
     15 of this software for any purpose. It is provided "as is"
     16 without any express or implied warranty.
     17 
     18 SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
     19 SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
     20 AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
     21 GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
     22 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
     23 DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
     24 OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
     25 THE USE OR PERFORMANCE OF THIS SOFTWARE.
     26 
     27 ********************************************************/
     28 /* $XFree86: xc/include/extensions/XKBsrv.h,v 3.22 2002/11/20 04:49:01 dawes Exp $ */
     29 
     30 #ifndef _XKBSRV_H_
     31 #define	_XKBSRV_H_
     32 
     33 #ifdef XKB_IN_SERVER
     34 #define XkbAllocClientMap		SrvXkbAllocClientMap
     35 #define XkbAllocServerMap		SrvXkbAllocServerMap
     36 #define XkbChangeTypesOfKey		SrvXkbChangeTypesOfKey
     37 #define	XkbAddKeyType			SrvXkbAddKeyType
     38 #define XkbCopyKeyType			SrvXkbCopyKeyType
     39 #define XkbCopyKeyTypes			SrvXkbCopyKeyTypes
     40 #define XkbFreeClientMap		SrvXkbFreeClientMap
     41 #define XkbFreeServerMap		SrvXkbFreeServerMap
     42 #define XkbInitCanonicalKeyTypes	SrvXkbInitCanonicalKeyTypes
     43 #define	XkbKeyTypesForCoreSymbols	SrvXkbKeyTypesForCoreSymbols
     44 #define	XkbApplyCompatMapToKey		SrvXkbApplyCompatMapToKey
     45 #define	XkbUpdateMapFromCore		SrvXkbUpdateMapFromCore
     46 #define XkbResizeKeyActions		SrvXkbResizeKeyActions
     47 #define XkbResizeKeySyms		SrvXkbResizeKeySyms
     48 #define XkbResizeKeyType		SrvXkbResizeKeyType
     49 #define XkbAllocCompatMap		SrvXkbAllocCompatMap
     50 #define XkbAllocControls		SrvXkbAllocControls
     51 #define XkbAllocIndicatorMaps		SrvXkbAllocIndicatorMaps
     52 #define XkbAllocKeyboard		SrvXkbAllocKeyboard
     53 #define XkbAllocNames			SrvXkbAllocNames
     54 #define XkbFreeCompatMap		SrvXkbFreeCompatMap
     55 #define XkbFreeControls			SrvXkbFreeControls
     56 #define XkbFreeIndicatorMaps		SrvXkbFreeIndicatorMaps
     57 #define XkbFreeKeyboard			SrvXkbFreeKeyboard
     58 #define XkbFreeNames			SrvXkbFreeNames
     59 #define	XkbAddDeviceLedInfo		SrvXkbAddDeviceLedInfo
     60 #define	XkbAllocDeviceInfo		SrvXkbAllocDeviceInfo
     61 #define	XkbFreeDeviceInfo		SrvXkbFreeDeviceInfo
     62 #define	XkbResizeDeviceButtonActions	SrvXkbResizeDeviceButtonActions
     63 #define XkbLatchModifiers		SrvXkbLatchModifiers
     64 #define XkbLatchGroup			SrvXkbLatchGroup
     65 #define XkbVirtualModsToReal		SrvXkbVirtualModsToReal
     66 #define	XkbChangeKeycodeRange		SrvXkbChangeKeycodeRange
     67 #define	XkbApplyVirtualModChanges	SrvXkbApplyVirtualModChanges
     68 #define	XkbUpdateActionVirtualMods	SrvXkbUpdateActionVirtualMods
     69 #define XkbUpdateKeyTypeVirtualMods	SrvXkbUpdateKeyTypeVirtualMods
     70 #endif
     71 
     72 #include <X11/extensions/XKBstr.h>
     73 #include <X11/extensions/XKBproto.h>
     74 #include "inputstr.h"
     75 
     76 typedef struct _XkbInterest {
     77 	DeviceIntPtr		dev;
     78 	ClientPtr		client;
     79 	XID			resource;
     80 	struct _XkbInterest *	next;
     81 	CARD16			extDevNotifyMask;
     82 	CARD16			stateNotifyMask;
     83 	CARD16			namesNotifyMask;
     84 	CARD32 			ctrlsNotifyMask;
     85 	CARD8			compatNotifyMask;
     86 	BOOL			bellNotifyMask;
     87 	BOOL			actionMessageMask;
     88 	CARD16			accessXNotifyMask;
     89 	CARD32			iStateNotifyMask;
     90 	CARD32			iMapNotifyMask;
     91 	CARD16			altSymsNotifyMask;
     92 	CARD32			autoCtrls;
     93 	CARD32			autoCtrlValues;
     94 } XkbInterestRec,*XkbInterestPtr;
     95 
     96 typedef struct _XkbRadioGroup {
     97 	CARD8		flags;
     98 	CARD8		nMembers;
     99 	CARD8		dfltDown;
    100 	CARD8		currentDown;
    101 	CARD8		members[XkbRGMaxMembers];
    102 } XkbRadioGroupRec, *XkbRadioGroupPtr;
    103 
    104 typedef struct	_XkbEventCause {
    105 	CARD8		kc;
    106 	CARD8		event;
    107 	CARD8		mjr;
    108 	CARD8		mnr;
    109 	ClientPtr	client;
    110 } XkbEventCauseRec,*XkbEventCausePtr;
    111 #define	XkbSetCauseKey(c,k,e)	{ (c)->kc= (k),(c)->event= (e),\
    112 				  (c)->mjr= (c)->mnr= 0; \
    113 				  (c)->client= NULL; }
    114 #define	XkbSetCauseReq(c,j,n,cl) { (c)->kc= (c)->event= 0,\
    115 				  (c)->mjr= (j),(c)->mnr= (n);\
    116 				  (c)->client= (cl); }
    117 #define	XkbSetCauseCoreReq(c,e,cl) XkbSetCauseReq(c,e,0,cl)
    118 #define	XkbSetCauseXkbReq(c,e,cl)  XkbSetCauseReq(c,XkbReqCode,e,cl)
    119 #define	XkbSetCauseUnknown(c)	   XkbSetCauseKey(c,0,0)
    120 
    121 #define	_OFF_TIMER		0
    122 #define	_KRG_WARN_TIMER		1
    123 #define	_KRG_TIMER		2
    124 #define	_SK_TIMEOUT_TIMER	3
    125 #define	_ALL_TIMEOUT_TIMER	4
    126 
    127 #define	_BEEP_NONE		0
    128 #define	_BEEP_FEATURE_ON	1
    129 #define	_BEEP_FEATURE_OFF	2
    130 #define	_BEEP_FEATURE_CHANGE	3
    131 #define	_BEEP_SLOW_WARN		4
    132 #define	_BEEP_SLOW_PRESS	5
    133 #define	_BEEP_SLOW_ACCEPT	6
    134 #define	_BEEP_SLOW_REJECT	7
    135 #define	_BEEP_SLOW_RELEASE	8
    136 #define	_BEEP_STICKY_LATCH	9
    137 #define	_BEEP_STICKY_LOCK	10
    138 #define	_BEEP_STICKY_UNLOCK	11
    139 #define	_BEEP_LED_ON		12
    140 #define	_BEEP_LED_OFF		13
    141 #define	_BEEP_LED_CHANGE	14
    142 #define	_BEEP_BOUNCE_REJECT	15
    143 
    144 typedef struct _XkbSrvInfo {
    145 	XkbStateRec	 prev_state;
    146 	XkbStateRec	 state;
    147 	XkbDescPtr	 desc;
    148 
    149 	DeviceIntPtr	 device;
    150 	KbdCtrlProcPtr	 kbdProc;
    151 
    152 	XkbRadioGroupPtr radioGroups;
    153 	CARD8		 nRadioGroups;
    154 	CARD8		 clearMods;
    155 	CARD8		 setMods;
    156 	INT16		 groupChange;
    157 
    158 	CARD16		 dfltPtrDelta;
    159 
    160 	double		 mouseKeysCurve;
    161 	double		 mouseKeysCurveFactor;
    162 	INT16		 mouseKeysDX;
    163 	INT16		 mouseKeysDY;
    164 	CARD8		 mouseKeysFlags;
    165 	Bool		 mouseKeysAccel;
    166 	CARD8		 mouseKeysCounter;
    167 
    168 	CARD8		 lockedPtrButtons;
    169 	CARD8		 shiftKeyCount;
    170 	KeyCode		 mouseKey;
    171 	KeyCode		 inactiveKey;
    172 	KeyCode		 slowKey;
    173 	KeyCode		 repeatKey;
    174 	CARD8		 krgTimerActive;
    175 	CARD8		 beepType;
    176 	CARD8		 beepCount;
    177 
    178 	CARD32		 flags;
    179 	CARD32		 lastPtrEventTime;
    180 	CARD32		 lastShiftEventTime;
    181 	OsTimerPtr	 beepTimer;
    182 	OsTimerPtr	 mouseKeyTimer;
    183 	OsTimerPtr	 slowKeysTimer;
    184 	OsTimerPtr	 bounceKeysTimer;
    185 	OsTimerPtr	 repeatKeyTimer;
    186 	OsTimerPtr	 krgTimer;
    187 } XkbSrvInfoRec, *XkbSrvInfoPtr;
    188 
    189 #define	XkbSLI_IsDefault	(1L<<0)
    190 #define	XkbSLI_HasOwnState	(1L<<1)
    191 
    192 typedef struct	_XkbSrvLedInfo {
    193 	CARD16			flags;
    194 	CARD16			class;
    195 	CARD16			id;
    196 	union {
    197 	    KbdFeedbackPtr	kf;
    198 	    LedFeedbackPtr	lf;
    199 	} 			fb;
    200 
    201 	CARD32			physIndicators;
    202 	CARD32			autoState;
    203 	CARD32			explicitState;
    204 	CARD32			effectiveState;
    205 
    206 	CARD32			mapsPresent;
    207 	CARD32			namesPresent;
    208 	XkbIndicatorMapPtr	maps;
    209 	Atom *			names;
    210 
    211 	CARD32			usesBase;
    212 	CARD32			usesLatched;
    213 	CARD32			usesLocked;
    214 	CARD32			usesEffective;
    215 	CARD32			usesCompat;
    216 	CARD32			usesControls;
    217 
    218 	CARD32			usedComponents;
    219 } XkbSrvLedInfoRec, *XkbSrvLedInfoPtr;
    220 
    221 /*
    222  * Settings for xkbClientFlags field (used by DIX)
    223  * These flags _must_ not overlap with XkbPCF_*
    224  */
    225 #define	_XkbClientInitialized		(1<<15)
    226 
    227 #define	_XkbWantsDetectableAutoRepeat(c)\
    228 	((c)->xkbClientFlags&XkbPCF_DetectableAutoRepeatMask)
    229 
    230 /*
    231  * Settings for flags field
    232  */
    233 #define	_XkbStateNotifyInProgress	(1<<0)
    234 
    235 typedef struct
    236 {
    237     ProcessInputProc processInputProc;
    238     ProcessInputProc realInputProc;
    239     DeviceUnwrapProc unwrapProc;
    240 } xkbDeviceInfoRec, *xkbDeviceInfoPtr;
    241 
    242 #define WRAP_PROCESS_INPUT_PROC(device, oldprocs, proc, unwrapproc) \
    243 	device->public.processInputProc = proc; \
    244 	oldprocs->processInputProc = \
    245 	oldprocs->realInputProc = device->public.realInputProc; \
    246 	device->public.realInputProc = proc; \
    247 	oldprocs->unwrapProc = device->unwrapProc; \
    248 	device->unwrapProc = unwrapproc;
    249 
    250 #define COND_WRAP_PROCESS_INPUT_PROC(device, oldprocs, proc, unwrapproc) \
    251 	if (device->public.processInputProc == device->public.realInputProc)\
    252 	    device->public.processInputProc = proc; \
    253 	oldprocs->processInputProc = \
    254 	oldprocs->realInputProc = device->public.realInputProc; \
    255 	device->public.realInputProc = proc; \
    256 	oldprocs->unwrapProc = device->unwrapProc; \
    257 	device->unwrapProc = unwrapproc;
    258 
    259 #define UNWRAP_PROCESS_INPUT_PROC(device, oldprocs) \
    260 	device->public.processInputProc = oldprocs->processInputProc; \
    261 	device->public.realInputProc = oldprocs->realInputProc; \
    262 	device->unwrapProc = oldprocs->unwrapProc;
    263 
    264 #define XKBDEVICEINFO(dev) ((xkbDeviceInfoPtr) (dev)->devPrivates[xkbDevicePrivateIndex].ptr)
    265 
    266 /***====================================================================***/
    267 
    268 
    269 /***====================================================================***/
    270 
    271 #define XkbAX_KRGMask	 (XkbSlowKeysMask|XkbBounceKeysMask)
    272 #define	XkbAllFilteredEventsMask \
    273 	(XkbAccessXKeysMask|XkbRepeatKeysMask|XkbMouseKeysAccelMask|XkbAX_KRGMask)
    274 
    275 /***====================================================================***/
    276 
    277 extern int	XkbReqCode;
    278 extern int	XkbEventBase;
    279 extern int	XkbKeyboardErrorCode;
    280 extern int	XkbDisableLockActions;
    281 extern char *	XkbBaseDirectory;
    282 extern char *	XkbBinDirectory;
    283 extern char *	XkbInitialMap;
    284 extern int	_XkbClientMajor;
    285 extern int	_XkbClientMinor;
    286 extern unsigned	int XkbXIUnsupported;
    287 
    288 extern char *	XkbModelUsed,*XkbLayoutUsed,*XkbVariantUsed,*XkbOptionsUsed;
    289 extern Bool	noXkbExtension;
    290 extern Bool	XkbWantRulesProp;
    291 
    292 extern pointer	XkbLastRepeatEvent;
    293 
    294 extern CARD32	xkbDebugFlags;
    295 extern CARD32	xkbDebugCtrls;
    296 
    297 #define	_XkbAlloc(s)		xalloc((s))
    298 #define	_XkbCalloc(n,s)		Xcalloc((n)*(s))
    299 #define	_XkbRealloc(o,s)	Xrealloc((o),(s))
    300 #define	_XkbTypedAlloc(t)	((t *)xalloc(sizeof(t)))
    301 #define	_XkbTypedCalloc(n,t)	((t *)Xcalloc((n)*sizeof(t)))
    302 #define	_XkbTypedRealloc(o,n,t) \
    303 	((o)?(t *)Xrealloc((o),(n)*sizeof(t)):_XkbTypedCalloc(n,t))
    304 #define	_XkbClearElems(a,f,l,t)	bzero(&(a)[f],((l)-(f)+1)*sizeof(t))
    305 #define	_XkbFree(p)		Xfree(p)
    306 
    307 #define	_XkbLibError(c,l,d) \
    308 	{ _XkbErrCode= (c); _XkbErrLocation= (l); _XkbErrData= (d); }
    309 #define	_XkbErrCode2(a,b) ((XID)((((unsigned int)(a))<<24)|((b)&0xffffff)))
    310 #define	_XkbErrCode3(a,b,c)	_XkbErrCode2(a,(((unsigned int)(b))<<16)|(c))
    311 #define	_XkbErrCode4(a,b,c,d) _XkbErrCode3(a,b,((((unsigned int)(c))<<8)|(d)))
    312 
    313 extern	int	DeviceKeyPress,DeviceKeyRelease;
    314 extern	int	DeviceButtonPress,DeviceButtonRelease;
    315 
    316 #ifdef XINPUT
    317 #define	_XkbIsPressEvent(t)	(((t)==KeyPress)||((t)==DeviceKeyPress))
    318 #define	_XkbIsReleaseEvent(t)	(((t)==KeyRelease)||((t)==DeviceKeyRelease))
    319 #else
    320 #define	_XkbIsPressEvent(t)	((t)==KeyPress)
    321 #define	_XkbIsReleaseEvent(t)	((t)==KeyRelease)
    322 #endif
    323 
    324 #define	_XkbCoreKeycodeInRange(c,k)	(((k)>=(c)->curKeySyms.minKeyCode)&&\
    325 					 ((k)<=(c)->curKeySyms.maxKeyCode))
    326 #define	_XkbCoreNumKeys(c)	((c)->curKeySyms.maxKeyCode-\
    327 				 (c)->curKeySyms.minKeyCode+1)
    328 
    329 #define	XConvertCase(s,l,u)	XkbConvertCase(s,l,u)
    330 #undef	IsKeypadKey
    331 #define	IsKeypadKey(s)		XkbKSIsKeypad(s)
    332 
    333 typedef int Status;
    334 typedef pointer XPointer;
    335 typedef struct _XDisplay Display;
    336 
    337 #ifndef True
    338 #define	True	1
    339 #define	False	0
    340 #endif
    341 
    342 #ifndef PATH_MAX
    343 #ifdef MAXPATHLEN
    344 #define	PATH_MAX MAXPATHLEN
    345 #else
    346 #define	PATH_MAX 1024
    347 #endif
    348 #endif
    349 
    350 _XFUNCPROTOBEGIN
    351 
    352 extern void XkbUseMsg(
    353     void
    354 );
    355 
    356 extern int XkbProcessArguments(
    357     int				/* argc */,
    358     char **			/* argv */,
    359     int				/* i */
    360 );
    361 
    362 extern	void	XkbSetExtension(DeviceIntPtr device, ProcessInputProc proc);
    363 
    364 extern	void	XkbFreeCompatMap(
    365     XkbDescPtr			/* xkb */,
    366     unsigned int		/* which */,
    367     Bool			/* freeMap */
    368 );
    369 
    370 extern	void XkbFreeNames(
    371 	XkbDescPtr		/* xkb */,
    372 	unsigned int		/* which */,
    373 	Bool			/* freeMap */
    374 );
    375 
    376 extern DeviceIntPtr _XkbLookupAnyDevice(
    377     int			/* id */,
    378     int *		/* why_rtrn */
    379 );
    380 
    381 extern DeviceIntPtr _XkbLookupKeyboard(
    382     int			/* id */,
    383     int *		/* why_rtrn */
    384 );
    385 
    386 extern DeviceIntPtr _XkbLookupBellDevice(
    387     int			/* id */,
    388     int *		/* why_rtrn */
    389 );
    390 
    391 extern DeviceIntPtr _XkbLookupLedDevice(
    392     int			/* id */,
    393     int *		/* why_rtrn */
    394 );
    395 
    396 extern DeviceIntPtr _XkbLookupButtonDevice(
    397     int			/* id */,
    398     int *		/* why_rtrn */
    399 );
    400 
    401 extern	XkbDescPtr XkbAllocKeyboard(
    402 	void
    403 );
    404 
    405 extern	Status XkbAllocClientMap(
    406 	XkbDescPtr		/* xkb */,
    407 	unsigned int		/* which */,
    408 	unsigned int		/* nTypes */
    409 );
    410 
    411 extern	Status XkbAllocServerMap(
    412 	XkbDescPtr		/* xkb */,
    413 	unsigned int		/* which */,
    414 	unsigned int		/* nNewActions */
    415 );
    416 
    417 extern	void	XkbFreeClientMap(
    418     XkbDescPtr			/* xkb */,
    419     unsigned int		/* what */,
    420     Bool			/* freeMap */
    421 );
    422 
    423 extern	void	XkbFreeServerMap(
    424     XkbDescPtr			/* xkb */,
    425     unsigned int		/* what */,
    426     Bool			/* freeMap */
    427 );
    428 
    429 extern	Status XkbAllocIndicatorMaps(
    430 	XkbDescPtr		/* xkb */
    431 );
    432 
    433 extern	Status	XkbAllocCompatMap(
    434     XkbDescPtr			/* xkb */,
    435     unsigned int		/* which */,
    436     unsigned int		/* nInterpret */
    437 );
    438 
    439 extern	Status XkbAllocNames(
    440 	XkbDescPtr		/* xkb */,
    441 	unsigned int		/* which */,
    442 	int			/* nTotalRG */,
    443 	int			/* nTotalAliases */
    444 );
    445 
    446 extern	Status	XkbAllocControls(
    447 	XkbDescPtr		/* xkb */,
    448 	unsigned int		/* which*/
    449 );
    450 
    451 extern	Status	XkbCopyKeyType(
    452     XkbKeyTypePtr		/* from */,
    453     XkbKeyTypePtr		/* into */
    454 );
    455 
    456 extern	Status	XkbCopyKeyTypes(
    457     XkbKeyTypePtr		/* from */,
    458     XkbKeyTypePtr		/* into */,
    459     int				/* num_types */
    460 );
    461 
    462 extern	Status	XkbResizeKeyType(
    463     XkbDescPtr		/* xkb */,
    464     int			/* type_ndx */,
    465     int			/* map_count */,
    466     Bool		/* want_preserve */,
    467     int			/* new_num_lvls */
    468 );
    469 
    470 extern	void	XkbFreeKeyboard(
    471 	XkbDescPtr		/* xkb */,
    472 	unsigned int		/* which */,
    473 	Bool			/* freeDesc */
    474 );
    475 
    476 extern  void XkbSetActionKeyMods(
    477 	XkbDescPtr		/* xkb */,
    478 	XkbAction *		/* act */,
    479 	unsigned int 		/* mods */
    480 );
    481 
    482 extern Bool XkbCheckActionVMods(
    483 	XkbDescPtr		/* xkb */,
    484 	XkbAction *		/* act */,
    485 	unsigned int 		/* changed */
    486 );
    487 
    488 extern Bool XkbApplyVModChanges(
    489     XkbSrvInfoPtr	/* xkbi */,
    490     unsigned int	/* changed */,
    491     XkbChangesPtr	/* pChanges */,
    492     unsigned int *	/* needChecksRtrn */,
    493     XkbEventCausePtr	/* cause */
    494 );
    495 
    496 extern void XkbApplyVModChangesToAllDevices(
    497     DeviceIntPtr	/* dev */,
    498     XkbDescPtr 		/* xkb */,
    499     unsigned int 	/* changed */,
    500     XkbEventCausePtr	/* cause */
    501 );
    502 
    503 extern	unsigned int XkbMaskForVMask(
    504     XkbDescPtr		/* xkb */,
    505     unsigned int	/* vmask */
    506 );
    507 
    508 extern Bool XkbVirtualModsToReal(
    509 	XkbDescPtr	/* xkb */,
    510 	unsigned int	/* virtua_mask */,
    511 	unsigned int *	/* mask_rtrn */
    512 );
    513 
    514 extern	unsigned int	XkbAdjustGroup(
    515     int			/* group */,
    516     XkbControlsPtr	/* ctrls */
    517 );
    518 
    519 extern KeySym *XkbResizeKeySyms(
    520     XkbDescPtr		/* xkb */,
    521     int 		/* key */,
    522     int 		/* needed */
    523 );
    524 
    525 extern XkbAction *XkbResizeKeyActions(
    526     XkbDescPtr		/* xkb */,
    527     int 		/* key */,
    528     int 		/* needed */
    529 );
    530 
    531 extern void XkbUpdateKeyTypesFromCore(
    532     DeviceIntPtr	/* pXDev */,
    533     KeyCode 		/* first */,
    534     CARD8 		/* num */,
    535     XkbChangesPtr	/* pChanges */
    536 );
    537 
    538 extern	void XkbUpdateDescActions(
    539     XkbDescPtr		/* xkb */,
    540     KeyCode		/* first */,
    541     CARD8		/* num */,
    542     XkbChangesPtr	/* changes */
    543 );
    544 
    545 extern void XkbUpdateActions(
    546     DeviceIntPtr	/* pXDev */,
    547     KeyCode 		/* first */,
    548     CARD8 		/* num */,
    549     XkbChangesPtr  	/* pChanges */,
    550     unsigned int *	/* needChecksRtrn */,
    551     XkbEventCausePtr	/* cause */
    552 );
    553 
    554 extern void XkbUpdateCoreDescription(
    555     DeviceIntPtr	/* keybd */,
    556     Bool		/* resize */
    557 );
    558 
    559 extern void XkbApplyMappingChange(
    560     DeviceIntPtr	/* pXDev */,
    561     CARD8 		/* request */,
    562     KeyCode 		/* firstKey */,
    563     CARD8 		/* num */,
    564     ClientPtr		/* client */
    565 );
    566 
    567 extern void XkbSetIndicators(
    568     DeviceIntPtr		/* pXDev */,
    569     CARD32			/* affect */,
    570     CARD32			/* values */,
    571     XkbEventCausePtr		/* cause */
    572 );
    573 
    574 extern void XkbUpdateIndicators(
    575     DeviceIntPtr		/* keybd */,
    576     CARD32		 	/* changed */,
    577     Bool			/* check_edevs */,
    578     XkbChangesPtr		/* pChanges */,
    579     XkbEventCausePtr		/* cause */
    580 );
    581 
    582 extern XkbSrvLedInfoPtr XkbAllocSrvLedInfo(
    583     DeviceIntPtr		/* dev */,
    584     KbdFeedbackPtr		/* kf */,
    585     LedFeedbackPtr		/* lf */,
    586     unsigned int		/* needed_parts */
    587 );
    588 
    589 extern XkbSrvLedInfoPtr XkbFindSrvLedInfo(
    590     DeviceIntPtr		/* dev */,
    591     unsigned int		/* class */,
    592     unsigned int		/* id */,
    593     unsigned int		/* needed_parts */
    594 );
    595 
    596 extern void XkbApplyLedNameChanges(
    597     DeviceIntPtr		/* dev */,
    598     XkbSrvLedInfoPtr		/* sli */,
    599     unsigned int		/* changed_names */,
    600     xkbExtensionDeviceNotify *	/* ed */,
    601     XkbChangesPtr		/* changes */,
    602     XkbEventCausePtr		/* cause */
    603 );
    604 
    605 extern void XkbApplyLedMapChanges(
    606     DeviceIntPtr		/* dev */,
    607     XkbSrvLedInfoPtr		/* sli */,
    608     unsigned int		/* changed_maps */,
    609     xkbExtensionDeviceNotify *	/* ed */,
    610     XkbChangesPtr		/* changes */,
    611     XkbEventCausePtr		/* cause */
    612 );
    613 
    614 extern void XkbApplyLedStateChanges(
    615     DeviceIntPtr		/* dev */,
    616     XkbSrvLedInfoPtr		/* sli */,
    617     unsigned int		/* changed_leds */,
    618     xkbExtensionDeviceNotify *	/* ed */,
    619     XkbChangesPtr		/* changes */,
    620     XkbEventCausePtr		/* cause */
    621 );
    622 
    623 extern void XkbUpdateLedAutoState(
    624     DeviceIntPtr		/* dev */,
    625     XkbSrvLedInfoPtr		/* sli */,
    626     unsigned int		/* maps_to_check */,
    627     xkbExtensionDeviceNotify *	/* ed */,
    628     XkbChangesPtr		/* changes */,
    629     XkbEventCausePtr		/* cause */
    630 );
    631 
    632 extern void XkbFlushLedEvents(
    633     DeviceIntPtr		/* dev */,
    634     DeviceIntPtr		/* kbd */,
    635     XkbSrvLedInfoPtr		/* sli */,
    636     xkbExtensionDeviceNotify *	/* ed */,
    637     XkbChangesPtr		/* changes */,
    638     XkbEventCausePtr		/* cause */
    639 );
    640 
    641 extern void XkbUpdateAllDeviceIndicators(
    642     XkbChangesPtr		/* changes */,
    643     XkbEventCausePtr		/* cause */
    644 );
    645 
    646 extern unsigned int XkbIndicatorsToUpdate(
    647     DeviceIntPtr		/* dev */,
    648     unsigned long		/* state_changes */,
    649     Bool			/* enabled_ctrl_changes */
    650 );
    651 
    652 extern void XkbComputeDerivedState(
    653     XkbSrvInfoPtr		/* xkbi */
    654 );
    655 
    656 extern void XkbCheckSecondaryEffects(
    657     XkbSrvInfoPtr		/* xkbi */,
    658     unsigned int		/* which */,
    659     XkbChangesPtr		/* changes */,
    660     XkbEventCausePtr		/* cause */
    661 );
    662 
    663 extern void XkbCheckIndicatorMaps(
    664     DeviceIntPtr		/* dev */,
    665     XkbSrvLedInfoPtr		/* sli */,
    666     unsigned int		/* which */
    667 );
    668 
    669 extern unsigned int XkbStateChangedFlags(
    670     XkbStatePtr			/* old */,
    671     XkbStatePtr			/* new */
    672 );
    673 
    674 extern	void XkbSendStateNotify(
    675        DeviceIntPtr	/* kbd */,
    676        xkbStateNotify *	/* pSN */
    677 );
    678 
    679 extern	void XkbSendMapNotify(
    680        DeviceIntPtr	/* kbd */,
    681        xkbMapNotify *	/* ev */
    682 );
    683 
    684 extern	int  XkbComputeControlsNotify(
    685 	DeviceIntPtr		/* kbd */,
    686 	XkbControlsPtr		/* old */,
    687 	XkbControlsPtr		/* new */,
    688 	xkbControlsNotify *	/* pCN */,
    689 	Bool			/* forceCtrlProc */
    690 );
    691 
    692 extern	void XkbSendControlsNotify(
    693        DeviceIntPtr		/* kbd */,
    694        xkbControlsNotify *	/* ev */
    695 );
    696 
    697 extern	void XkbSendCompatMapNotify(
    698 	DeviceIntPtr		/* kbd */,
    699 	xkbCompatMapNotify *	/* ev */
    700 );
    701 
    702 extern	void XkbSendIndicatorNotify(
    703        DeviceIntPtr		/* kbd */,
    704        int			/* xkbType */,
    705        xkbIndicatorNotify *	/* ev */
    706 );
    707 
    708 extern	void XkbHandleBell(
    709        BOOL		/* force */,
    710        BOOL		/* eventOnly */,
    711        DeviceIntPtr	/* kbd */,
    712        CARD8		/* percent */,
    713        pointer 		/* ctrl */,
    714        CARD8		/* class */,
    715        Atom		/* name */,
    716        WindowPtr	/* pWin */,
    717        ClientPtr	/* pClient */
    718 );
    719 
    720 extern	void XkbSendAccessXNotify(
    721        DeviceIntPtr		/* kbd */,
    722        xkbAccessXNotify *	/* pEv */
    723 );
    724 
    725 extern	void XkbSendNamesNotify(
    726        DeviceIntPtr	/* kbd */,
    727        xkbNamesNotify *	/* ev */
    728 );
    729 
    730 extern	void XkbSendCompatNotify(
    731        DeviceIntPtr		/* kbd */,
    732        xkbCompatMapNotify *	/* ev */
    733 );
    734 
    735 extern	void XkbSendActionMessage(
    736        DeviceIntPtr		/* kbd */,
    737        xkbActionMessage *	/* ev */
    738 );
    739 
    740 extern	void XkbSendExtensionDeviceNotify(
    741        DeviceIntPtr			/* kbd */,
    742        ClientPtr			/* client */,
    743        xkbExtensionDeviceNotify *	/* ev */
    744 );
    745 
    746 extern void XkbSendNotification(
    747     DeviceIntPtr		/* kbd */,
    748     XkbChangesPtr		/* pChanges */,
    749     XkbEventCausePtr		/* cause */
    750 );
    751 
    752 extern void XkbProcessKeyboardEvent(
    753     struct _xEvent * 		/* xE */,
    754     DeviceIntPtr		/* keybd */,
    755     int 			/* count */
    756 );
    757 
    758 extern void XkbProcessOtherEvent(
    759     struct _xEvent * 		/* xE */,
    760     DeviceIntPtr		/* keybd */,
    761     int 			/* count */
    762 );
    763 
    764 extern void XkbHandleActions(
    765     DeviceIntPtr		/* dev */,
    766     DeviceIntPtr		/* kbd */,
    767     struct _xEvent * 		/* xE */,
    768     int 			/* count */
    769 );
    770 
    771 extern Bool XkbEnableDisableControls(
    772     XkbSrvInfoPtr	/* xkbi */,
    773     unsigned long	/* change */,
    774     unsigned long	/* newValues */,
    775     XkbChangesPtr	/* changes */,
    776     XkbEventCausePtr	/* cause */
    777 );
    778 
    779 extern void AccessXInit(
    780     DeviceIntPtr        /* dev */
    781 );
    782 
    783 extern Bool AccessXFilterPressEvent(
    784     register struct _xEvent *	/* xE */,
    785     register DeviceIntPtr	/* keybd */,
    786     int				/* count */
    787 );
    788 
    789 extern Bool AccessXFilterReleaseEvent(
    790     register struct _xEvent *	/* xE */,
    791     register DeviceIntPtr	/* keybd */,
    792     int				/* count */
    793 );
    794 
    795 extern void AccessXCancelRepeatKey(
    796     XkbSrvInfoPtr	/* xkbi */,
    797     KeyCode		/* key */
    798 );
    799 
    800 extern void AccessXComputeCurveFactor(
    801     XkbSrvInfoPtr	/* xkbi */,
    802     XkbControlsPtr	/* ctrls */
    803 );
    804 
    805 extern	XkbDeviceLedInfoPtr	XkbAddDeviceLedInfo(
    806 	XkbDeviceInfoPtr	/* devi */,
    807 	unsigned int		/* ledClass */,
    808 	unsigned int		/* ledId */
    809 );
    810 
    811 extern	XkbDeviceInfoPtr	XkbAllocDeviceInfo(
    812 	unsigned int		/* deviceSpec */,
    813 	unsigned int		/* nButtons */,
    814 	unsigned int		/* szLeds */
    815 );
    816 
    817 extern	void XkbFreeDeviceInfo(
    818 	XkbDeviceInfoPtr	/* devi */,
    819 	unsigned int		/* which */,
    820 	Bool			/* freeDevI */
    821 );
    822 
    823 extern Status XkbResizeDeviceButtonActions(
    824 	XkbDeviceInfoPtr        /* devi */,
    825 	unsigned int            /* newTotal */
    826 );
    827 
    828 extern	XkbInterestPtr XkbFindClientResource(
    829        DevicePtr	/* inDev */,
    830        ClientPtr	/* client */
    831 );
    832 
    833 extern	XkbInterestPtr XkbAddClientResource(
    834        DevicePtr	/* inDev */,
    835        ClientPtr	/* client */,
    836        XID		/* id */
    837 );
    838 
    839 extern	int XkbRemoveClient(
    840        DevicePtr	/* inDev */,
    841        ClientPtr	/* client */
    842 );
    843 
    844 extern	int XkbRemoveResourceClient(
    845        DevicePtr	/* inDev */,
    846        XID		/* id */
    847 );
    848 
    849 extern int XkbDDXInitDevice(
    850     DeviceIntPtr        /* dev */
    851 );
    852 
    853 extern	int XkbDDXAccessXBeep(
    854     DeviceIntPtr        /* dev */,
    855     unsigned int	/* what */,
    856     unsigned int	/* which */
    857 );
    858 
    859 extern	void XkbDDXKeyClick(
    860     DeviceIntPtr	/* dev */,
    861     int			/* keycode */,
    862     int			/* synthetic */
    863 );
    864 
    865 extern 	int XkbDDXUsesSoftRepeat(
    866     DeviceIntPtr	/* dev */
    867 );
    868 
    869 extern	void XkbDDXKeybdCtrlProc(
    870 	DeviceIntPtr	/* dev */,
    871 	KeybdCtrl *	/* ctrl */
    872 );
    873 
    874 extern void XkbDDXChangeControls(
    875 	DeviceIntPtr	/* dev */,
    876 	XkbControlsPtr 	/* old */,
    877 	XkbControlsPtr 	/* new */
    878 );
    879 
    880 extern void XkbDDXUpdateIndicators(
    881 	DeviceIntPtr	/* keybd */,
    882 	CARD32		/* newState */
    883 );
    884 
    885 extern void XkbDDXUpdateDeviceIndicators(
    886 	DeviceIntPtr		/* dev */,
    887 	XkbSrvLedInfoPtr	/* sli */,
    888 	CARD32			/* newState */
    889 );
    890 
    891 extern void XkbDDXFakePointerButton(
    892 	int 		/* event */,
    893 	int		/* button */
    894 );
    895 
    896 extern void XkbDDXFakePointerMotion(
    897  	unsigned int	/* flags */,
    898 	int		/* x */,
    899 	int		/* y */
    900 );
    901 
    902 extern void XkbDDXFakeDeviceButton(
    903 	DeviceIntPtr	/* dev */,
    904 	Bool		/* press */,
    905 	int		/* button */
    906 );
    907 
    908 extern int XkbDDXTerminateServer(
    909 	DeviceIntPtr	/* dev */,
    910 	KeyCode		/* key */,
    911 	XkbAction *	/* act */
    912 );
    913 
    914 extern int XkbDDXSwitchScreen(
    915 	DeviceIntPtr	/* dev */,
    916 	KeyCode		/* key */,
    917 	XkbAction *	/* act */
    918 );
    919 
    920 extern int XkbDDXPrivate(
    921 	DeviceIntPtr	/* dev */,
    922 	KeyCode		/* key */,
    923 	XkbAction *	/* act */
    924 );
    925 
    926 extern void XkbDisableComputedAutoRepeats(
    927 	DeviceIntPtr 	/* pXDev */,
    928 	unsigned int	/* key */
    929 );
    930 
    931 extern void XkbSetRepeatKeys(
    932 	DeviceIntPtr 	/* pXDev */,
    933 	int		/* key */,
    934 	int	 	/* onoff */
    935 );
    936 
    937 extern	int XkbLatchModifiers(
    938 	DeviceIntPtr 	/* pXDev */,
    939 	CARD8 		/* mask */,
    940 	CARD8 		/* latches */
    941 );
    942 
    943 extern	int XkbLatchGroup(
    944 	DeviceIntPtr  	/* pXDev */,
    945 	int	  	/* group */
    946 );
    947 
    948 extern	void XkbClearAllLatchesAndLocks(
    949 	DeviceIntPtr		/* dev */,
    950 	XkbSrvInfoPtr		/* xkbi */,
    951 	Bool			/* genEv */,
    952 	XkbEventCausePtr	/* cause */
    953 );
    954 
    955 extern	void	XkbSetRulesDflts(
    956 	char *			/* rulesFile */,
    957 	char *			/* model */,
    958 	char *			/* layout */,
    959 	char *			/* variant */,
    960 	char *			/* options */
    961 );
    962 
    963 extern	void	XkbInitDevice(
    964 	DeviceIntPtr 	/* pXDev */
    965 );
    966 
    967 extern	Bool	XkbInitKeyboardDeviceStruct(
    968 	DeviceIntPtr 		/* pXDev */,
    969 	XkbComponentNamesPtr	/* pNames */,
    970 	KeySymsPtr		/* pSyms */,
    971 	CARD8 			/* pMods */[],
    972 	BellProcPtr		/* bellProc */,
    973 	KbdCtrlProcPtr		/* ctrlProc */
    974 );
    975 
    976 extern	int SProcXkbDispatch(
    977 	ClientPtr		/* client */
    978 );
    979 
    980 extern XkbGeometryPtr XkbLookupNamedGeometry(
    981 	DeviceIntPtr		/* dev */,
    982 	Atom			/* name */,
    983 	Bool *			/* shouldFree */
    984 );
    985 
    986 extern char *	_XkbDupString(
    987 	char *			/* str */
    988 );
    989 
    990 extern void	XkbConvertCase(
    991 	KeySym 			/* sym */,
    992 	KeySym *		/* lower */,
    993 	KeySym *		/* upper */
    994 );
    995 
    996 extern	Status	 XkbChangeKeycodeRange(
    997 	XkbDescPtr		/* xkb */,
    998 	int 			/* minKC */,
    999 	int 			/* maxKC */,
   1000 	XkbChangesPtr		/* changes */
   1001 );
   1002 
   1003 extern int XkbFinishDeviceInit(
   1004 	DeviceIntPtr		/* pXDev */
   1005 );
   1006 
   1007 extern void XkbFreeSrvLedInfo(
   1008 	XkbSrvLedInfoPtr	/* sli */
   1009 );
   1010 
   1011 extern void XkbFreeInfo(
   1012 	XkbSrvInfoPtr		/* xkbi */
   1013 );
   1014 
   1015 extern Status XkbChangeTypesOfKey(
   1016 	XkbDescPtr		/* xkb */,
   1017 	int			/* key */,
   1018 	int			/* nGroups */,
   1019 	unsigned int		/* groups */,
   1020 	int *			/* newTypesIn */,
   1021 	XkbMapChangesPtr	/* changes */
   1022 );
   1023 
   1024 extern XkbKeyTypePtr XkbAddKeyType(
   1025 	XkbDescPtr		/* xkb */,
   1026 	Atom			/* name */,
   1027 	int			/* map_count */,
   1028 	Bool			/* want_preserve */,
   1029 	int			/* num_lvls */
   1030 );
   1031 
   1032 extern Status XkbInitCanonicalKeyTypes(
   1033 	XkbDescPtr		/* xkb */,
   1034 	unsigned int		/* which */,
   1035 	int			/* keypadVMod */
   1036 );
   1037 
   1038 extern int XkbKeyTypesForCoreSymbols(
   1039 	XkbDescPtr		/* xkb */,
   1040 	int			/* map_width */,
   1041 	KeySym *		/* core_syms */,
   1042 	unsigned int		/* protected */,
   1043 	int *			/* types_inout */,
   1044 	KeySym *		/* xkb_syms_rtrn */
   1045 );
   1046 
   1047 extern Bool XkbApplyCompatMapToKey(
   1048 	XkbDescPtr		/* xkb */,
   1049 	KeyCode			/* key */,
   1050 	XkbChangesPtr		/* changes */
   1051 );
   1052 
   1053 extern Bool XkbUpdateMapFromCore(
   1054 	XkbDescPtr		/* xkb */,
   1055 	KeyCode			/* first_key */,
   1056 	int			/* num_keys */,
   1057 	int			/* map_width */,
   1058 	KeySym *		/* core_keysyms */,
   1059 	XkbChangesPtr		/* changes */
   1060 );
   1061 
   1062 extern void XkbFreeControls(
   1063 	XkbDescPtr		/* xkb */,
   1064 	unsigned int		/* which */,
   1065 	Bool			/* freeMap */
   1066 );
   1067 
   1068 extern void XkbFreeIndicatorMaps(
   1069 	XkbDescPtr		/* xkb */
   1070 );
   1071 
   1072 extern Bool XkbApplyVirtualModChanges(
   1073 	XkbDescPtr		/* xkb */,
   1074 	unsigned int		/* changed */,
   1075 	XkbChangesPtr		/* changes */
   1076 );
   1077 
   1078 extern Bool XkbUpdateActionVirtualMods(
   1079 	XkbDescPtr		/* xkb */,
   1080 	XkbAction *		/* act */,
   1081 	unsigned int		/* changed */
   1082 );
   1083 
   1084 extern void XkbUpdateKeyTypeVirtualMods(
   1085 	XkbDescPtr		/* xkb */,
   1086 	XkbKeyTypePtr		/* type */,
   1087 	unsigned int		/* changed */,
   1088 	XkbChangesPtr		/* changes */
   1089 );
   1090 
   1091 extern void XkbSendNewKeyboardNotify(
   1092 	DeviceIntPtr		/* kbd */,
   1093 	xkbNewKeyboardNotify *	/* pNKN */
   1094 );
   1095 
   1096 #ifdef XKBSRV_NEED_FILE_FUNCS
   1097 
   1098 #include <X11/extensions/XKMformat.h>
   1099 #include <X11/extensions/XKBfile.h>
   1100 #include <X11/extensions/XKBrules.h>
   1101 
   1102 #define	_XkbListKeymaps		0
   1103 #define	_XkbListKeycodes	1
   1104 #define	_XkbListTypes		2
   1105 #define	_XkbListCompat		3
   1106 #define	_XkbListSymbols		4
   1107 #define	_XkbListGeometry	5
   1108 #define	_XkbListNumComponents	6
   1109 
   1110 typedef struct _XkbSrvListInfo {
   1111 	int		szPool;
   1112 	int		nPool;
   1113 	char *		pool;
   1114 
   1115 	int		maxRtrn;
   1116 	int		nTotal;
   1117 
   1118 	char *		pattern[_XkbListNumComponents];
   1119 	int		nFound[_XkbListNumComponents];
   1120 } XkbSrvListInfoRec,*XkbSrvListInfoPtr;
   1121 
   1122 char *
   1123 XkbGetRulesDflts(
   1124 	XkbRF_VarDefsPtr	/* defs */
   1125 );
   1126 
   1127 extern void	XkbSetRulesUsed(
   1128 	XkbRF_VarDefsPtr	/* defs */
   1129 );
   1130 
   1131 
   1132 extern	Status	XkbDDXList(
   1133 	DeviceIntPtr		/* dev */,
   1134 	XkbSrvListInfoPtr	/* listing */,
   1135 	ClientPtr		/* client */
   1136 );
   1137 
   1138 extern	unsigned int XkbDDXLoadKeymapByNames(
   1139 	DeviceIntPtr		/* keybd */,
   1140 	XkbComponentNamesPtr	/* names */,
   1141 	unsigned int		/* want */,
   1142 	unsigned int		/* need */,
   1143 	XkbFileInfoPtr		/* finfoRtrn */,
   1144 	char *			/* keymapNameRtrn */,
   1145 	int 			/* keymapNameRtrnLen */
   1146 );
   1147 
   1148 extern	Bool XkbDDXNamesFromRules(
   1149 	DeviceIntPtr		/* keybd */,
   1150 	char *			/* rules */,
   1151 	XkbRF_VarDefsPtr	/* defs */,
   1152 	XkbComponentNamesPtr	/* names */
   1153 );
   1154 
   1155 extern	FILE *XkbDDXOpenConfigFile(
   1156 	char *	/* mapName */,
   1157 	char *	/* fileNameRtrn */,
   1158 	int	/* fileNameRtrnLen */
   1159 );
   1160 
   1161 extern	Bool XkbDDXApplyConfig(
   1162 	XPointer	/* cfg_in */,
   1163 	XkbSrvInfoPtr	/* xkbi */
   1164 );
   1165 
   1166 extern XPointer XkbDDXPreloadConfig(
   1167 	char **			/* rulesFileRtrn */,
   1168 	XkbRF_VarDefsPtr	/* defs */,
   1169 	XkbComponentNamesPtr	/* names */,
   1170 	DeviceIntPtr		/* dev */
   1171 );
   1172 
   1173 extern	int _XkbStrCaseCmp(
   1174 	char *			/* str1 */,
   1175 	char *			/* str2 */
   1176 );
   1177 
   1178 #endif /* XKBSRV_NEED_FILE_FUNCS */
   1179 
   1180 
   1181 _XFUNCPROTOEND
   1182 
   1183 #define	XkbAtomGetString(d,s)	NameForAtom(s)
   1184 
   1185 #endif /* _XKBSRV_H_ */
   1186 
   1187 
   1188