1 /************************************************************
2 Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
3 
4 Permission to use, copy, modify, and distribute this
5 software and its documentation for any purpose and without
6 fee is hereby granted, provided that the above copyright
7 notice appear in all copies and that both that copyright
8 notice and this permission notice appear in supporting
9 documentation, and that the name of Silicon Graphics not be
10 used in advertising or publicity pertaining to distribution
11 of the software without specific prior written permission.
12 Silicon Graphics makes no representation about the suitability
13 of this software for any purpose. It is provided "as is"
14 without any express or implied warranty.
15 
16 SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
17 SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
18 AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
19 GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
20 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
21 DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
22 OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
23 THE USE OR PERFORMANCE OF THIS SOFTWARE.
24 
25 ********************************************************/
26 
27 #ifndef _XKBSRV_H_
28 #define	_XKBSRV_H_
29 
30 #define XkbAllocClientMap		SrvXkbAllocClientMap
31 #define XkbAllocServerMap		SrvXkbAllocServerMap
32 #define XkbChangeTypesOfKey		SrvXkbChangeTypesOfKey
33 #define XkbCopyKeyTypes			SrvXkbCopyKeyTypes
34 #define XkbFreeClientMap		SrvXkbFreeClientMap
35 #define XkbFreeServerMap		SrvXkbFreeServerMap
36 #define	XkbKeyTypesForCoreSymbols	SrvXkbKeyTypesForCoreSymbols
37 #define	XkbApplyCompatMapToKey		SrvXkbApplyCompatMapToKey
38 #define XkbResizeKeyActions		SrvXkbResizeKeyActions
39 #define XkbResizeKeySyms		SrvXkbResizeKeySyms
40 #define XkbResizeKeyType		SrvXkbResizeKeyType
41 #define XkbAllocCompatMap		SrvXkbAllocCompatMap
42 #define XkbAllocControls		SrvXkbAllocControls
43 #define XkbAllocIndicatorMaps		SrvXkbAllocIndicatorMaps
44 #define XkbAllocKeyboard		SrvXkbAllocKeyboard
45 #define XkbAllocNames			SrvXkbAllocNames
46 #define XkbFreeCompatMap		SrvXkbFreeCompatMap
47 #define XkbFreeKeyboard			SrvXkbFreeKeyboard
48 #define XkbFreeNames			SrvXkbFreeNames
49 #define XkbLatchModifiers		SrvXkbLatchModifiers
50 #define XkbLatchGroup			SrvXkbLatchGroup
51 #define XkbVirtualModsToReal		SrvXkbVirtualModsToReal
52 #define	XkbChangeKeycodeRange		SrvXkbChangeKeycodeRange
53 #define	XkbApplyVirtualModChanges	SrvXkbApplyVirtualModChanges
54 
55 #include <X11/extensions/XKBproto.h>
56 #include "xkbstr.h"
57 #include "xkbrules.h"
58 #include "inputstr.h"
59 #include "events.h"
60 
61 typedef struct _XkbInterest {
62     DeviceIntPtr dev;
63     ClientPtr client;
64     XID resource;
65     struct _XkbInterest *next;
66     CARD16 extDevNotifyMask;
67     CARD16 stateNotifyMask;
68     CARD16 namesNotifyMask;
69     CARD32 ctrlsNotifyMask;
70     CARD8 compatNotifyMask;
71     BOOL bellNotifyMask;
72     BOOL actionMessageMask;
73     CARD16 accessXNotifyMask;
74     CARD32 iStateNotifyMask;
75     CARD32 iMapNotifyMask;
76     CARD16 altSymsNotifyMask;
77     CARD32 autoCtrls;
78     CARD32 autoCtrlValues;
79 } XkbInterestRec, *XkbInterestPtr;
80 
81 typedef struct _XkbRadioGroup {
82     CARD8 flags;
83     CARD8 nMembers;
84     CARD8 dfltDown;
85     CARD8 currentDown;
86     CARD8 members[XkbRGMaxMembers];
87 } XkbRadioGroupRec, *XkbRadioGroupPtr;
88 
89 typedef struct _XkbEventCause {
90     CARD8 kc;
91     CARD8 event;
92     CARD8 mjr;
93     CARD8 mnr;
94     ClientPtr client;
95 } XkbEventCauseRec, *XkbEventCausePtr;
96 
97 #define	XkbSetCauseKey(c,k,e)	{ (c)->kc= (k),(c)->event= (e),\
98 				  (c)->mjr= (c)->mnr= 0; \
99 				  (c)->client= NULL; }
100 #define	XkbSetCauseReq(c,j,n,cl) { (c)->kc= (c)->event= 0,\
101 				  (c)->mjr= (j),(c)->mnr= (n);\
102 				  (c)->client= (cl); }
103 #define	XkbSetCauseCoreReq(c,e,cl) XkbSetCauseReq(c,e,0,cl)
104 #define	XkbSetCauseXkbReq(c,e,cl)  XkbSetCauseReq(c,XkbReqCode,e,cl)
105 #define	XkbSetCauseUnknown(c)	   XkbSetCauseKey(c,0,0)
106 
107 #define	_OFF_TIMER		0
108 #define	_KRG_WARN_TIMER		1
109 #define	_KRG_TIMER		2
110 #define	_SK_TIMEOUT_TIMER	3
111 #define	_ALL_TIMEOUT_TIMER	4
112 
113 #define	_BEEP_NONE		0
114 #define	_BEEP_FEATURE_ON	1
115 #define	_BEEP_FEATURE_OFF	2
116 #define	_BEEP_FEATURE_CHANGE	3
117 #define	_BEEP_SLOW_WARN		4
118 #define	_BEEP_SLOW_PRESS	5
119 #define	_BEEP_SLOW_ACCEPT	6
120 #define	_BEEP_SLOW_REJECT	7
121 #define	_BEEP_SLOW_RELEASE	8
122 #define	_BEEP_STICKY_LATCH	9
123 #define	_BEEP_STICKY_LOCK	10
124 #define	_BEEP_STICKY_UNLOCK	11
125 #define	_BEEP_LED_ON		12
126 #define	_BEEP_LED_OFF		13
127 #define	_BEEP_LED_CHANGE	14
128 #define	_BEEP_BOUNCE_REJECT	15
129 
130 typedef struct _XkbFilter {
131     CARD16 keycode;
132     CARD8 what;
133     CARD8 active;
134     CARD8 filterOthers;
135     CARD32 priv;
136     XkbAction upAction;
137     int (*filter) (struct _XkbSrvInfo * /* xkbi */ ,
138                    struct _XkbFilter * /* filter */ ,
139                    unsigned /* keycode */ ,
140                    XkbAction *  /* action */
141         );
142     struct _XkbFilter *next;
143 } XkbFilterRec, *XkbFilterPtr;
144 
145 typedef Bool (*XkbSrvCheckRepeatPtr) (DeviceIntPtr dev,
146                                       struct _XkbSrvInfo * /* xkbi */ ,
147                                       unsigned /* keycode */);
148 
149 typedef struct _XkbSrvInfo {
150     XkbStateRec prev_state;
151     XkbStateRec state;
152     XkbDescPtr desc;
153 
154     DeviceIntPtr device;
155     KbdCtrlProcPtr kbdProc;
156 
157     XkbRadioGroupPtr radioGroups;
158     CARD8 nRadioGroups;
159     CARD8 clearMods;
160     CARD8 setMods;
161     INT16 groupChange;
162 
163     CARD16 dfltPtrDelta;
164 
165     double mouseKeysCurve;
166     double mouseKeysCurveFactor;
167     INT16 mouseKeysDX;
168     INT16 mouseKeysDY;
169     CARD8 mouseKeysFlags;
170     Bool mouseKeysAccel;
171     CARD8 mouseKeysCounter;
172 
173     CARD8 lockedPtrButtons;
174     CARD8 shiftKeyCount;
175     KeyCode mouseKey;
176     KeyCode inactiveKey;
177     KeyCode slowKey;
178     KeyCode slowKeyEnableKey;
179     KeyCode repeatKey;
180     CARD8 krgTimerActive;
181     CARD8 beepType;
182     CARD8 beepCount;
183 
184     CARD32 flags;
185     CARD32 lastPtrEventTime;
186     CARD32 lastShiftEventTime;
187     OsTimerPtr beepTimer;
188     OsTimerPtr mouseKeyTimer;
189     OsTimerPtr slowKeysTimer;
190     OsTimerPtr bounceKeysTimer;
191     OsTimerPtr repeatKeyTimer;
192     OsTimerPtr krgTimer;
193 
194     int szFilters;
195     XkbFilterPtr filters;
196 
197     XkbSrvCheckRepeatPtr checkRepeat;
198 
199     char overlay_perkey_state[256/8]; /* bitfield */
200 } XkbSrvInfoRec, *XkbSrvInfoPtr;
201 
202 #define	XkbSLI_IsDefault	(1L<<0)
203 #define	XkbSLI_HasOwnState	(1L<<1)
204 
205 typedef struct _XkbSrvLedInfo {
206     CARD16 flags;
207     CARD16 class;
208     CARD16 id;
209     union {
210         KbdFeedbackPtr kf;
211         LedFeedbackPtr lf;
212     } fb;
213 
214     CARD32 physIndicators;
215     CARD32 autoState;
216     CARD32 explicitState;
217     CARD32 effectiveState;
218 
219     CARD32 mapsPresent;
220     CARD32 namesPresent;
221     XkbIndicatorMapPtr maps;
222     Atom *names;
223 
224     CARD32 usesBase;
225     CARD32 usesLatched;
226     CARD32 usesLocked;
227     CARD32 usesEffective;
228     CARD32 usesCompat;
229     CARD32 usesControls;
230 
231     CARD32 usedComponents;
232 } XkbSrvLedInfoRec, *XkbSrvLedInfoPtr;
233 
234 /*
235  * Settings for xkbClientFlags field (used by DIX)
236  * These flags _must_ not overlap with XkbPCF_*
237  */
238 #define _XkbClientInitialized           (1<<7)
239 #define _XkbClientIsAncient             (1<<6)
240 
241 #define	_XkbWantsDetectableAutoRepeat(c)\
242 	((c)->xkbClientFlags&XkbPCF_DetectableAutoRepeatMask)
243 
244 /*
245  * Settings for flags field
246  */
247 #define	_XkbStateNotifyInProgress	(1<<0)
248 
249 typedef struct {
250     ProcessInputProc processInputProc;
251     /* If processInputProc is set to something different than realInputProc,
252      * UNWRAP and COND_WRAP will not touch processInputProc and update only
253      * realInputProc.  This ensures that
254      *   processInputProc == (frozen ? EnqueueEvent : realInputProc)
255      *
256      * WRAP_PROCESS_INPUT_PROC should only be called during initialization,
257      * since it may destroy this invariant.
258      */
259     ProcessInputProc realInputProc;
260     DeviceUnwrapProc unwrapProc;
261 } xkbDeviceInfoRec, *xkbDeviceInfoPtr;
262 
263 #define WRAP_PROCESS_INPUT_PROC(device, oldprocs, proc, unwrapproc) \
264 	device->public.processInputProc = proc; \
265 	oldprocs->processInputProc = \
266 	oldprocs->realInputProc = device->public.realInputProc; \
267 	device->public.realInputProc = proc; \
268 	oldprocs->unwrapProc = device->unwrapProc; \
269 	device->unwrapProc = unwrapproc;
270 
271 #define COND_WRAP_PROCESS_INPUT_PROC(device, oldprocs, proc, unwrapproc) \
272 	if (device->public.processInputProc == device->public.realInputProc)\
273 	    device->public.processInputProc = proc; \
274 	oldprocs->processInputProc = \
275 	oldprocs->realInputProc = device->public.realInputProc; \
276 	device->public.realInputProc = proc; \
277 	oldprocs->unwrapProc = device->unwrapProc; \
278 	device->unwrapProc = unwrapproc;
279 
280 #define UNWRAP_PROCESS_INPUT_PROC(device, oldprocs, backupproc) \
281         backupproc = device->public.realInputProc; \
282 	if (device->public.processInputProc == device->public.realInputProc)\
283 	    device->public.processInputProc = oldprocs->realInputProc; \
284 	device->public.realInputProc = oldprocs->realInputProc; \
285 	device->unwrapProc = oldprocs->unwrapProc;
286 
287 extern _X_EXPORT DevPrivateKeyRec xkbDevicePrivateKeyRec;
288 
289 #define xkbDevicePrivateKey (&xkbDevicePrivateKeyRec)
290 
291 #define XKBDEVICEINFO(dev) ((xkbDeviceInfoPtr)dixLookupPrivate(&(dev)->devPrivates, xkbDevicePrivateKey))
292 
293 extern void xkbUnwrapProc(DeviceIntPtr, DeviceHandleProc, void *);
294 
295 /***====================================================================***/
296 
297 /***====================================================================***/
298 
299 #define XkbAX_KRGMask	 (XkbSlowKeysMask|XkbBounceKeysMask)
300 #define	XkbAllFilteredEventsMask \
301 	(XkbAccessXKeysMask|XkbRepeatKeysMask|XkbMouseKeysAccelMask|XkbAX_KRGMask)
302 
303 /***====================================================================***/
304 
305 extern _X_EXPORT int XkbReqCode;
306 extern _X_EXPORT int XkbEventBase;
307 extern _X_EXPORT int XkbKeyboardErrorCode;
308 extern _X_EXPORT const char *XkbBaseDirectory;
309 extern _X_EXPORT const char *XkbBinDirectory;
310 
311 extern _X_EXPORT CARD32 xkbDebugFlags;
312 
313 #define	_XkbLibError(c,l,d)     /* Epoch fail */
314 
315 /* "a" is a "unique" numeric identifier that just defines which error
316  * code statement it is. _XkbErrCode2(4, foo) means "this is the 4th error
317  * statement in this function". lovely.
318  */
319 #define	_XkbErrCode2(a,b) ((XID)((((unsigned int)(a))<<24)|((b)&0xffffff)))
320 #define	_XkbErrCode3(a,b,c)	_XkbErrCode2(a,(((unsigned int)(b))<<16)|(c))
321 #define	_XkbErrCode4(a,b,c,d) _XkbErrCode3(a,b,((((unsigned int)(c))<<8)|(d)))
322 
323 #define	Status		int
324 
325 extern _X_EXPORT void XkbUseMsg(void
326     );
327 
328 extern _X_EXPORT int XkbProcessArguments(int /* argc */ ,
329                                          char ** /* argv */ ,
330                                          int    /* i */
331     );
332 
333 extern _X_EXPORT Bool XkbInitPrivates(void);
334 
335 extern _X_EXPORT void XkbSetExtension(DeviceIntPtr device,
336                                       ProcessInputProc proc);
337 
338 extern _X_EXPORT void XkbFreeCompatMap(XkbDescPtr /* xkb */ ,
339                                        unsigned int /* which */ ,
340                                        Bool     /* freeMap */
341     );
342 
343 extern _X_EXPORT void XkbFreeNames(XkbDescPtr /* xkb */ ,
344                                    unsigned int /* which */ ,
345                                    Bool /* freeMap */
346     );
347 
348 extern _X_EXPORT int _XkbLookupAnyDevice(DeviceIntPtr *pDev,
349                                          int id,
350                                          ClientPtr client,
351                                          Mask access_mode, int *xkb_err);
352 
353 extern _X_EXPORT int _XkbLookupKeyboard(DeviceIntPtr *pDev,
354                                         int id,
355                                         ClientPtr client,
356                                         Mask access_mode, int *xkb_err);
357 
358 extern _X_EXPORT int _XkbLookupBellDevice(DeviceIntPtr *pDev,
359                                           int id,
360                                           ClientPtr client,
361                                           Mask access_mode, int *xkb_err);
362 
363 extern _X_EXPORT int _XkbLookupLedDevice(DeviceIntPtr *pDev,
364                                          int id,
365                                          ClientPtr client,
366                                          Mask access_mode, int *xkb_err);
367 
368 extern _X_EXPORT int _XkbLookupButtonDevice(DeviceIntPtr *pDev,
369                                             int id,
370                                             ClientPtr client,
371                                             Mask access_mode, int *xkb_err);
372 
373 extern _X_EXPORT XkbDescPtr XkbAllocKeyboard(void
374     );
375 
376 extern _X_EXPORT Status XkbAllocClientMap(XkbDescPtr /* xkb */ ,
377                                           unsigned int /* which */ ,
378                                           unsigned int  /* nTypes */
379     );
380 
381 extern _X_EXPORT Status XkbAllocServerMap(XkbDescPtr /* xkb */ ,
382                                           unsigned int /* which */ ,
383                                           unsigned int  /* nNewActions */
384     );
385 
386 extern _X_EXPORT void XkbFreeClientMap(XkbDescPtr /* xkb */ ,
387                                        unsigned int /* what */ ,
388                                        Bool     /* freeMap */
389     );
390 
391 extern _X_EXPORT void XkbFreeServerMap(XkbDescPtr /* xkb */ ,
392                                        unsigned int /* what */ ,
393                                        Bool     /* freeMap */
394     );
395 
396 extern _X_EXPORT Status XkbAllocIndicatorMaps(XkbDescPtr        /* xkb */
397     );
398 
399 extern _X_EXPORT Status XkbAllocCompatMap(XkbDescPtr /* xkb */ ,
400                                           unsigned int /* which */ ,
401                                           unsigned int  /* nInterpret */
402     );
403 
404 extern _X_EXPORT Status XkbAllocNames(XkbDescPtr /* xkb */ ,
405                                       unsigned int /* which */ ,
406                                       int /* nTotalRG */ ,
407                                       int       /* nTotalAliases */
408     );
409 
410 extern _X_EXPORT Status XkbAllocControls(XkbDescPtr /* xkb */ ,
411                                          unsigned int   /* which */
412     );
413 
414 extern _X_EXPORT Status XkbCopyKeyTypes(XkbKeyTypePtr /* from */ ,
415                                         XkbKeyTypePtr /* into */ ,
416                                         int     /* num_types */
417     );
418 
419 extern _X_EXPORT Status XkbResizeKeyType(XkbDescPtr /* xkb */ ,
420                                          int /* type_ndx */ ,
421                                          int /* map_count */ ,
422                                          Bool /* want_preserve */ ,
423                                          int    /* new_num_lvls */
424     );
425 
426 extern _X_EXPORT void XkbFreeKeyboard(XkbDescPtr /* xkb */ ,
427                                       unsigned int /* which */ ,
428                                       Bool      /* freeDesc */
429     );
430 
431 extern _X_EXPORT void XkbFreeComponentNames(XkbComponentNamesPtr /* names */ ,
432                                             Bool        /* freeNames */
433     );
434 
435 extern _X_EXPORT void XkbSetActionKeyMods(XkbDescPtr /* xkb */ ,
436                                           XkbAction * /* act */ ,
437                                           unsigned int  /* mods */
438     );
439 
440 extern _X_EXPORT unsigned int XkbMaskForVMask(XkbDescPtr /* xkb */ ,
441                                               unsigned int      /* vmask */
442     );
443 
444 extern _X_EXPORT Bool XkbVirtualModsToReal(XkbDescPtr /* xkb */ ,
445                                            unsigned int /* virtua_mask */ ,
446                                            unsigned int *       /* mask_rtrn */
447     );
448 
449 extern _X_EXPORT unsigned int XkbAdjustGroup(int /* group */ ,
450                                              XkbControlsPtr     /* ctrls */
451     );
452 
453 extern _X_EXPORT KeySym *XkbResizeKeySyms(XkbDescPtr /* xkb */ ,
454                                           int /* key */ ,
455                                           int   /* needed */
456     );
457 
458 extern _X_EXPORT XkbAction *XkbResizeKeyActions(XkbDescPtr /* xkb */ ,
459                                                 int /* key */ ,
460                                                 int     /* needed */
461     );
462 
463 extern _X_EXPORT void XkbUpdateKeyTypesFromCore(DeviceIntPtr /* pXDev */ ,
464                                                 KeySymsPtr /* syms */ ,
465                                                 KeyCode /* first */ ,
466                                                 CARD8 /* num */ ,
467                                                 XkbChangesPtr   /* pChanges */
468     );
469 
470 extern _X_EXPORT void XkbUpdateDescActions(XkbDescPtr /* xkb */ ,
471                                            KeyCode /* first */ ,
472                                            CARD8 /* num */ ,
473                                            XkbChangesPtr        /* changes */
474     );
475 
476 extern _X_EXPORT void XkbUpdateActions(DeviceIntPtr /* pXDev */ ,
477                                        KeyCode /* first */ ,
478                                        CARD8 /* num */ ,
479                                        XkbChangesPtr /* pChanges */ ,
480                                        unsigned int * /* needChecksRtrn */ ,
481                                        XkbEventCausePtr /* cause */
482     );
483 
484 extern _X_EXPORT KeySymsPtr XkbGetCoreMap(DeviceIntPtr  /* keybd */
485     );
486 
487 extern _X_EXPORT void XkbApplyMappingChange(DeviceIntPtr /* pXDev */ ,
488                                             KeySymsPtr /* map */ ,
489                                             KeyCode /* firstKey */ ,
490                                             CARD8 /* num */ ,
491                                             CARD8 * /* modmap */ ,
492                                             ClientPtr   /* client */
493     );
494 
495 extern _X_EXPORT void XkbSetIndicators(DeviceIntPtr /* pXDev */ ,
496                                        CARD32 /* affect */ ,
497                                        CARD32 /* values */ ,
498                                        XkbEventCausePtr /* cause */
499     );
500 
501 extern _X_EXPORT void XkbUpdateIndicators(DeviceIntPtr /* keybd */ ,
502                                           CARD32 /* changed */ ,
503                                           Bool /* check_edevs */ ,
504                                           XkbChangesPtr /* pChanges */ ,
505                                           XkbEventCausePtr      /* cause */
506     );
507 
508 extern _X_EXPORT void XkbUpdateAllDeviceIndicators(XkbChangesPtr /* changes */,
509                                                    XkbEventCausePtr /* cause */
510     );
511 
512 extern _X_EXPORT XkbSrvLedInfoPtr XkbAllocSrvLedInfo(DeviceIntPtr /* dev */ ,
513                                                      KbdFeedbackPtr /* kf */ ,
514                                                      LedFeedbackPtr /* lf */ ,
515                                                      unsigned int       /* needed_parts */
516     );
517 
518 extern _X_EXPORT XkbSrvLedInfoPtr XkbCopySrvLedInfo(DeviceIntPtr /* dev */ ,
519                                                     XkbSrvLedInfoPtr /* src */ ,
520                                                     KbdFeedbackPtr /* kf */ ,
521                                                     LedFeedbackPtr      /* lf */
522     );
523 
524 extern _X_EXPORT XkbSrvLedInfoPtr XkbFindSrvLedInfo(DeviceIntPtr /* dev */ ,
525                                                     unsigned int /* class */ ,
526                                                     unsigned int /* id */ ,
527                                                     unsigned int        /* needed_parts */
528     );
529 
530 extern _X_EXPORT void XkbApplyLedNameChanges(DeviceIntPtr /* dev */ ,
531                                              XkbSrvLedInfoPtr /* sli */ ,
532                                              unsigned int /* changed_names */ ,
533                                              xkbExtensionDeviceNotify * /* ed */
534                                              ,
535                                              XkbChangesPtr /* changes */ ,
536                                              XkbEventCausePtr   /* cause */
537     );
538 
539 extern _X_EXPORT void XkbApplyLedMapChanges(DeviceIntPtr /* dev */ ,
540                                             XkbSrvLedInfoPtr /* sli */ ,
541                                             unsigned int /* changed_maps */ ,
542                                             xkbExtensionDeviceNotify * /* ed */
543                                             ,
544                                             XkbChangesPtr /* changes */ ,
545                                             XkbEventCausePtr    /* cause */
546     );
547 
548 extern _X_EXPORT void XkbApplyLedStateChanges(DeviceIntPtr /* dev */ ,
549                                               XkbSrvLedInfoPtr /* sli */ ,
550                                               unsigned int /* changed_leds */ ,
551                                               xkbExtensionDeviceNotify *
552                                               /* ed */ ,
553                                               XkbChangesPtr /* changes */ ,
554                                               XkbEventCausePtr  /* cause */
555     );
556 
557 extern _X_EXPORT void XkbFlushLedEvents(DeviceIntPtr /* dev */ ,
558                                         DeviceIntPtr /* kbd */ ,
559                                         XkbSrvLedInfoPtr /* sli */ ,
560                                         xkbExtensionDeviceNotify * /* ed */ ,
561                                         XkbChangesPtr /* changes */ ,
562                                         XkbEventCausePtr        /* cause */
563     );
564 
565 extern _X_EXPORT unsigned int XkbIndicatorsToUpdate(DeviceIntPtr /* dev */ ,
566                                                     unsigned long
567                                                     /* state_changes */ ,
568                                                     Bool        /* enabled_ctrl_changes */
569     );
570 
571 extern _X_EXPORT void XkbComputeDerivedState(XkbSrvInfoPtr      /* xkbi */
572     );
573 
574 extern _X_EXPORT void XkbCheckSecondaryEffects(XkbSrvInfoPtr /* xkbi */ ,
575                                                unsigned int /* which */ ,
576                                                XkbChangesPtr /* changes */ ,
577                                                XkbEventCausePtr /* cause */
578     );
579 
580 extern _X_EXPORT void XkbCheckIndicatorMaps(DeviceIntPtr /* dev */ ,
581                                             XkbSrvLedInfoPtr /* sli */ ,
582                                             unsigned int        /* which */
583     );
584 
585 extern _X_EXPORT unsigned int XkbStateChangedFlags(XkbStatePtr /* old */ ,
586                                                    XkbStatePtr  /* new */
587     );
588 
589 extern _X_EXPORT void XkbSendStateNotify(DeviceIntPtr /* kbd */ ,
590                                          xkbStateNotify *       /* pSN */
591     );
592 
593 extern _X_EXPORT void XkbSendMapNotify(DeviceIntPtr /* kbd */ ,
594                                        xkbMapNotify *   /* ev */
595     );
596 
597 extern _X_EXPORT int XkbComputeControlsNotify(DeviceIntPtr /* kbd */ ,
598                                               XkbControlsPtr /* old */ ,
599                                               XkbControlsPtr /* new */ ,
600                                               xkbControlsNotify * /* pCN */ ,
601                                               Bool      /* forceCtrlProc */
602     );
603 
604 extern _X_EXPORT void XkbSendControlsNotify(DeviceIntPtr /* kbd */ ,
605                                             xkbControlsNotify * /* ev */
606     );
607 
608 extern _X_EXPORT void XkbSendCompatMapNotify(DeviceIntPtr /* kbd */ ,
609                                              xkbCompatMapNotify *       /* ev */
610     );
611 
612 extern _X_EXPORT void XkbHandleBell(BOOL force,
613                                     BOOL eventOnly,
614                                     DeviceIntPtr kbd,
615                                     CARD8 percent,
616                                     void *ctrl,
617                                     CARD8 class,
618                                     Atom name,
619                                     WindowPtr pWin,
620                                     ClientPtr pClient
621     );
622 
623 extern _X_EXPORT void XkbSendAccessXNotify(DeviceIntPtr /* kbd */ ,
624                                            xkbAccessXNotify *   /* pEv */
625     );
626 
627 extern _X_EXPORT void XkbSendNamesNotify(DeviceIntPtr /* kbd */ ,
628                                          xkbNamesNotify *       /* ev */
629     );
630 
631 extern _X_EXPORT void XkbSendActionMessage(DeviceIntPtr /* kbd */ ,
632                                            xkbActionMessage *   /* ev */
633     );
634 
635 extern _X_EXPORT void XkbSendExtensionDeviceNotify(DeviceIntPtr /* kbd */ ,
636                                                    ClientPtr /* client */ ,
637                                                    xkbExtensionDeviceNotify *   /* ev */
638     );
639 
640 extern _X_EXPORT void XkbSendNotification(DeviceIntPtr /* kbd */ ,
641                                           XkbChangesPtr /* pChanges */ ,
642                                           XkbEventCausePtr      /* cause */
643     );
644 
645 extern _X_EXPORT void XkbProcessKeyboardEvent(DeviceEvent * /* event */ ,
646                                               DeviceIntPtr      /* keybd */
647     );
648 
649 extern _X_EXPORT void XkbHandleActions(DeviceIntPtr /* dev */ ,
650                                        DeviceIntPtr /* kbd */ ,
651                                        DeviceEvent *    /* event */
652     );
653 
654 extern void XkbPushLockedStateToSlaves(DeviceIntPtr /* master */,
655                                        int /* evtype */,
656                                        int /* key */);
657 
658 extern _X_EXPORT Bool XkbEnableDisableControls(XkbSrvInfoPtr /* xkbi */ ,
659                                                unsigned long /* change */ ,
660                                                unsigned long /* newValues */ ,
661                                                XkbChangesPtr /* changes */ ,
662                                                XkbEventCausePtr /* cause */
663     );
664 
665 extern _X_EXPORT void AccessXInit(DeviceIntPtr  /* dev */
666     );
667 
668 extern _X_EXPORT Bool AccessXFilterPressEvent(DeviceEvent * /* event */ ,
669                                               DeviceIntPtr      /* keybd */
670     );
671 
672 extern _X_EXPORT Bool AccessXFilterReleaseEvent(DeviceEvent * /* event */ ,
673                                                 DeviceIntPtr    /* keybd */
674     );
675 
676 extern _X_EXPORT void AccessXCancelRepeatKey(XkbSrvInfoPtr /* xkbi */ ,
677                                              KeyCode    /* key */
678     );
679 
680 extern _X_EXPORT void AccessXComputeCurveFactor(XkbSrvInfoPtr /* xkbi */ ,
681                                                 XkbControlsPtr  /* ctrls */
682     );
683 
684 extern _X_EXPORT XkbInterestPtr XkbFindClientResource(DevicePtr /* inDev */ ,
685                                                       ClientPtr /* client */
686     );
687 
688 extern _X_EXPORT XkbInterestPtr XkbAddClientResource(DevicePtr /* inDev */ ,
689                                                      ClientPtr /* client */ ,
690                                                      XID        /* id */
691     );
692 
693 extern _X_EXPORT int XkbRemoveResourceClient(DevicePtr /* inDev */ ,
694                                              XID        /* id */
695     );
696 
697 extern _X_EXPORT int XkbDDXAccessXBeep(DeviceIntPtr /* dev */ ,
698                                        unsigned int /* what */ ,
699                                        unsigned int     /* which */
700     );
701 
702 extern _X_EXPORT int XkbDDXUsesSoftRepeat(DeviceIntPtr  /* dev */
703     );
704 
705 extern _X_EXPORT void XkbDDXKeybdCtrlProc(DeviceIntPtr /* dev */ ,
706                                           KeybdCtrl *   /* ctrl */
707     );
708 
709 extern _X_EXPORT void XkbDDXChangeControls(DeviceIntPtr /* dev */ ,
710                                            XkbControlsPtr /* old */ ,
711                                            XkbControlsPtr       /* new */
712     );
713 
714 extern _X_EXPORT void XkbDDXUpdateDeviceIndicators(DeviceIntPtr /* dev */ ,
715                                                    XkbSrvLedInfoPtr /* sli */ ,
716                                                    CARD32       /* newState */
717     );
718 
719 extern _X_EXPORT int XkbDDXTerminateServer(DeviceIntPtr /* dev */ ,
720                                            KeyCode /* key */ ,
721                                            XkbAction *  /* act */
722     );
723 
724 extern _X_EXPORT int XkbDDXSwitchScreen(DeviceIntPtr /* dev */ ,
725                                         KeyCode /* key */ ,
726                                         XkbAction *     /* act */
727     );
728 
729 extern _X_EXPORT int XkbDDXPrivate(DeviceIntPtr /* dev */ ,
730                                    KeyCode /* key */ ,
731                                    XkbAction *  /* act */
732     );
733 
734 extern _X_EXPORT void XkbDisableComputedAutoRepeats(DeviceIntPtr /* pXDev */ ,
735                                                     unsigned int        /* key */
736     );
737 
738 extern _X_EXPORT void XkbSetRepeatKeys(DeviceIntPtr /* pXDev */ ,
739                                        int /* key */ ,
740                                        int      /* onoff */
741     );
742 
743 extern _X_EXPORT int XkbLatchModifiers(DeviceIntPtr /* pXDev */ ,
744                                        CARD8 /* mask */ ,
745                                        CARD8    /* latches */
746     );
747 
748 extern _X_EXPORT int XkbLatchGroup(DeviceIntPtr /* pXDev */ ,
749                                    int  /* group */
750     );
751 
752 extern _X_EXPORT void XkbClearAllLatchesAndLocks(DeviceIntPtr /* dev */ ,
753                                                  XkbSrvInfoPtr /* xkbi */ ,
754                                                  Bool /* genEv */ ,
755                                                  XkbEventCausePtr       /* cause */
756     );
757 
758 extern _X_EXPORT void XkbInitRules(XkbRMLVOSet * /* rmlvo   */,
759                                    const char *  /* rules   */,
760                                    const char *  /* model   */,
761                                    const char *  /* layout  */,
762                                    const char *  /* variant */,
763                                    const char *  /* options */
764     ) ;
765 
766 extern _X_EXPORT void XkbGetRulesDflts(XkbRMLVOSet *    /* rmlvo */
767     );
768 
769 extern _X_EXPORT void XkbFreeRMLVOSet(XkbRMLVOSet * /* rmlvo */ ,
770                                       Bool      /* freeRMLVO */
771     );
772 
773 extern _X_EXPORT void XkbSetRulesDflts(XkbRMLVOSet *    /* rmlvo */
774     );
775 
776 extern _X_EXPORT void XkbDeleteRulesDflts(void
777     );
778 
779 extern _X_EXPORT void XkbDeleteRulesUsed(void
780     );
781 
782 extern _X_EXPORT int SProcXkbDispatch(ClientPtr /* client */
783     );
784 
785 extern _X_EXPORT XkbGeometryPtr XkbLookupNamedGeometry(DeviceIntPtr /* dev */ ,
786                                                        Atom /* name */ ,
787                                                        Bool *   /* shouldFree */
788     );
789 
790 extern _X_EXPORT void XkbConvertCase(KeySym /* sym */ ,
791                                      KeySym * /* lower */ ,
792                                      KeySym *   /* upper */
793     );
794 
795 extern _X_EXPORT Status XkbChangeKeycodeRange(XkbDescPtr /* xkb */ ,
796                                               int /* minKC */ ,
797                                               int /* maxKC */ ,
798                                               XkbChangesPtr     /* changes */
799     );
800 
801 extern _X_EXPORT void XkbFreeSrvLedInfo(XkbSrvLedInfoPtr        /* sli */
802     );
803 
804 extern _X_EXPORT void XkbFreeInfo(XkbSrvInfoPtr /* xkbi */
805     );
806 
807 extern _X_EXPORT Status XkbChangeTypesOfKey(XkbDescPtr /* xkb */ ,
808                                             int /* key */ ,
809                                             int /* nGroups */ ,
810                                             unsigned int /* groups */ ,
811                                             int * /* newTypesIn */ ,
812                                             XkbMapChangesPtr    /* changes */
813     );
814 
815 extern _X_EXPORT int XkbKeyTypesForCoreSymbols(XkbDescPtr /* xkb */ ,
816                                                int /* map_width */ ,
817                                                KeySym * /* core_syms */ ,
818                                                unsigned int /* protected */ ,
819                                                int * /* types_inout */ ,
820                                                KeySym * /* xkb_syms_rtrn */
821     );
822 
823 extern _X_EXPORT Bool XkbApplyCompatMapToKey(XkbDescPtr /* xkb */ ,
824                                              KeyCode /* key */ ,
825                                              XkbChangesPtr      /* changes */
826     );
827 
828 extern _X_EXPORT Bool XkbApplyVirtualModChanges(XkbDescPtr /* xkb */ ,
829                                                 unsigned int /* changed */ ,
830                                                 XkbChangesPtr   /* changes */
831     );
832 
833 extern _X_EXPORT void XkbSendNewKeyboardNotify(DeviceIntPtr /* kbd */ ,
834                                                xkbNewKeyboardNotify *   /* pNKN */
835     );
836 
837 extern Bool XkbCopyKeymap(XkbDescPtr /* dst */ ,
838                           XkbDescPtr /* src */ );
839 
840 extern _X_EXPORT Bool XkbCopyDeviceKeymap(DeviceIntPtr /* dst */,
841 					  DeviceIntPtr /* src */);
842 
843 extern _X_EXPORT Bool XkbDeviceApplyKeymap(DeviceIntPtr /* dst */ ,
844                                            XkbDescPtr /* src */ );
845 
846 extern void XkbFilterEvents(ClientPtr /* pClient */ ,
847                             int /* nEvents */ ,
848                             xEvent * /* xE */ );
849 
850 extern int XkbGetEffectiveGroup(XkbSrvInfoPtr /* xkbi */ ,
851                                 XkbStatePtr /* xkbstate */ ,
852                                 CARD8 /* keycode */ );
853 
854 extern void XkbMergeLockedPtrBtns(DeviceIntPtr /* master */ );
855 
856 extern void XkbFakeDeviceButton(DeviceIntPtr /* dev */ ,
857                                 int /* press */ ,
858                                 int /* button */ );
859 
860 extern _X_EXPORT void XkbCopyControls(XkbDescPtr /* dst */ ,
861                                       XkbDescPtr /* src */ );
862 
863 #include "xkbfile.h"
864 #include "xkbrules.h"
865 
866 #define	_XkbListKeycodes	0
867 #define	_XkbListTypes		1
868 #define	_XkbListCompat		2
869 #define	_XkbListSymbols		3
870 #define	_XkbListGeometry	4
871 #define	_XkbListNumComponents	5
872 
873 extern _X_EXPORT unsigned int XkbDDXLoadKeymapByNames(DeviceIntPtr /* keybd */ ,
874                                                       XkbComponentNamesPtr
875                                                       /* names */ ,
876                                                       unsigned int /* want */ ,
877                                                       unsigned int /* need */ ,
878                                                       XkbDescPtr *
879                                                       /* finfoRtrn */ ,
880                                                       char *
881                                                       /* keymapNameRtrn */ ,
882                                                       int       /* keymapNameRtrnLen */
883     );
884 
885 extern _X_EXPORT Bool XkbDDXNamesFromRules(DeviceIntPtr /* keybd */ ,
886                                            const char * /* rules */ ,
887                                            XkbRF_VarDefsPtr /* defs */ ,
888                                            XkbComponentNamesPtr /* names */
889     );
890 
891 extern _X_EXPORT XkbDescPtr XkbCompileKeymap(DeviceIntPtr /* dev */ ,
892                                              XkbRMLVOSet *      /* rmlvo */
893     );
894 
895 extern _X_EXPORT XkbDescPtr XkbCompileKeymapFromString(DeviceIntPtr dev,
896 						       const char *keymap,
897 						       int keymap_length);
898 
899 #endif                          /* _XKBSRV_H_ */
900