xkbSwap.c revision 05b261ec
105b261ecSmrg/************************************************************
205b261ecSmrgCopyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
305b261ecSmrg
405b261ecSmrgPermission to use, copy, modify, and distribute this
505b261ecSmrgsoftware and its documentation for any purpose and without
605b261ecSmrgfee is hereby granted, provided that the above copyright
705b261ecSmrgnotice appear in all copies and that both that copyright
805b261ecSmrgnotice and this permission notice appear in supporting
905b261ecSmrgdocumentation, and that the name of Silicon Graphics not be
1005b261ecSmrgused in advertising or publicity pertaining to distribution
1105b261ecSmrgof the software without specific prior written permission.
1205b261ecSmrgSilicon Graphics makes no representation about the suitability
1305b261ecSmrgof this software for any purpose. It is provided "as is"
1405b261ecSmrgwithout any express or implied warranty.
1505b261ecSmrg
1605b261ecSmrgSILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
1705b261ecSmrgSOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
1805b261ecSmrgAND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
1905b261ecSmrgGRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
2005b261ecSmrgDAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
2105b261ecSmrgDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
2205b261ecSmrgOR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
2305b261ecSmrgTHE USE OR PERFORMANCE OF THIS SOFTWARE.
2405b261ecSmrg
2505b261ecSmrg********************************************************/
2605b261ecSmrg
2705b261ecSmrg#ifdef HAVE_DIX_CONFIG_H
2805b261ecSmrg#include <dix-config.h>
2905b261ecSmrg#endif
3005b261ecSmrg
3105b261ecSmrg#include "stdio.h"
3205b261ecSmrg#include <X11/X.h>
3305b261ecSmrg#define	NEED_EVENTS
3405b261ecSmrg#define	NEED_REPLIES
3505b261ecSmrg#include <X11/Xproto.h>
3605b261ecSmrg#include "misc.h"
3705b261ecSmrg#include "inputstr.h"
3805b261ecSmrg#include <xkbsrv.h>
3905b261ecSmrg#include <X11/extensions/XKBstr.h>
4005b261ecSmrg#include "extnsionst.h"
4105b261ecSmrg#include "xkb.h"
4205b261ecSmrg
4305b261ecSmrg	/*
4405b261ecSmrg	 * REQUEST SWAPPING
4505b261ecSmrg	 */
4605b261ecSmrgstatic int
4705b261ecSmrgSProcXkbUseExtension(ClientPtr client)
4805b261ecSmrg{
4905b261ecSmrgregister int n;
5005b261ecSmrg
5105b261ecSmrg    REQUEST(xkbUseExtensionReq);
5205b261ecSmrg
5305b261ecSmrg    swaps(&stuff->length,n);
5405b261ecSmrg    REQUEST_SIZE_MATCH(xkbUseExtensionReq);
5505b261ecSmrg    swaps(&stuff->wantedMajor,n);
5605b261ecSmrg    swaps(&stuff->wantedMinor,n);
5705b261ecSmrg    return ProcXkbUseExtension(client);
5805b261ecSmrg}
5905b261ecSmrg
6005b261ecSmrgstatic int
6105b261ecSmrgSProcXkbSelectEvents(ClientPtr client)
6205b261ecSmrg{
6305b261ecSmrgregister int n;
6405b261ecSmrg
6505b261ecSmrg    REQUEST(xkbSelectEventsReq);
6605b261ecSmrg
6705b261ecSmrg    swaps(&stuff->length,n);
6805b261ecSmrg    REQUEST_AT_LEAST_SIZE(xkbSelectEventsReq);
6905b261ecSmrg    swaps(&stuff->deviceSpec,n);
7005b261ecSmrg    swaps(&stuff->affectWhich,n);
7105b261ecSmrg    swaps(&stuff->clear,n);
7205b261ecSmrg    swaps(&stuff->selectAll,n);
7305b261ecSmrg    swaps(&stuff->affectMap,n);
7405b261ecSmrg    swaps(&stuff->map,n);
7505b261ecSmrg    if ((stuff->affectWhich&(~XkbMapNotifyMask))!=0)  {
7605b261ecSmrg	union {
7705b261ecSmrg	    BOOL	*b;
7805b261ecSmrg	    CARD8	*c8;
7905b261ecSmrg	    CARD16	*c16;
8005b261ecSmrg	    CARD32	*c32;
8105b261ecSmrg	} from;
8205b261ecSmrg	register unsigned bit,ndx,maskLeft,dataLeft,size;
8305b261ecSmrg
8405b261ecSmrg	from.c8= (CARD8 *)&stuff[1];
8505b261ecSmrg	dataLeft= (stuff->length*4)-SIZEOF(xkbSelectEventsReq);
8605b261ecSmrg	maskLeft= (stuff->affectWhich&(~XkbMapNotifyMask));
8705b261ecSmrg	for (ndx=0,bit=1; (maskLeft!=0); ndx++, bit<<=1) {
8805b261ecSmrg	    if (((bit&maskLeft)==0)||(ndx==XkbMapNotify))
8905b261ecSmrg		continue;
9005b261ecSmrg	    maskLeft&= ~bit;
9105b261ecSmrg	    if ((stuff->selectAll&bit)||(stuff->clear&bit))
9205b261ecSmrg		continue;
9305b261ecSmrg	    switch (ndx) {
9405b261ecSmrg		case XkbNewKeyboardNotify:
9505b261ecSmrg		case XkbStateNotify:
9605b261ecSmrg		case XkbNamesNotify:
9705b261ecSmrg		case XkbAccessXNotify:
9805b261ecSmrg		case XkbExtensionDeviceNotify:
9905b261ecSmrg		    size= 2;
10005b261ecSmrg		    break;
10105b261ecSmrg		case XkbControlsNotify:
10205b261ecSmrg		case XkbIndicatorStateNotify:
10305b261ecSmrg		case XkbIndicatorMapNotify:
10405b261ecSmrg		    size= 4;
10505b261ecSmrg		    break;
10605b261ecSmrg		case XkbBellNotify:
10705b261ecSmrg		case XkbActionMessage:
10805b261ecSmrg		case XkbCompatMapNotify:
10905b261ecSmrg		    size= 1;
11005b261ecSmrg		    break;
11105b261ecSmrg		default:
11205b261ecSmrg		    client->errorValue = _XkbErrCode2(0x1,bit);
11305b261ecSmrg		    return BadValue;
11405b261ecSmrg	    }
11505b261ecSmrg	    if (dataLeft<(size*2))
11605b261ecSmrg		return BadLength;
11705b261ecSmrg	    if (size==2) {
11805b261ecSmrg		swaps(&from.c16[0],n);
11905b261ecSmrg		swaps(&from.c16[1],n);
12005b261ecSmrg	    }
12105b261ecSmrg	    else if (size==4) {
12205b261ecSmrg		swapl(&from.c32[0],n);
12305b261ecSmrg		swapl(&from.c32[1],n);
12405b261ecSmrg	    }
12505b261ecSmrg	    else {
12605b261ecSmrg		size= 2;
12705b261ecSmrg	    }
12805b261ecSmrg	    from.c8+= (size*2);
12905b261ecSmrg	    dataLeft-= (size*2);
13005b261ecSmrg	}
13105b261ecSmrg	if (dataLeft>2) {
13205b261ecSmrg	    ErrorF("Extra data (%d bytes) after SelectEvents\n",dataLeft);
13305b261ecSmrg	    return BadLength;
13405b261ecSmrg	}
13505b261ecSmrg    }
13605b261ecSmrg    return ProcXkbSelectEvents(client);
13705b261ecSmrg}
13805b261ecSmrg
13905b261ecSmrgstatic int
14005b261ecSmrgSProcXkbBell(ClientPtr client)
14105b261ecSmrg{
14205b261ecSmrgregister int	n;
14305b261ecSmrg
14405b261ecSmrg    REQUEST(xkbBellReq);
14505b261ecSmrg
14605b261ecSmrg    swaps(&stuff->length,n);
14705b261ecSmrg    REQUEST_SIZE_MATCH(xkbBellReq);
14805b261ecSmrg    swaps(&stuff->deviceSpec,n);
14905b261ecSmrg    swaps(&stuff->bellClass,n);
15005b261ecSmrg    swaps(&stuff->bellID,n);
15105b261ecSmrg    swapl(&stuff->name,n);
15205b261ecSmrg    swapl(&stuff->window,n);
15305b261ecSmrg    swaps(&stuff->pitch,n);
15405b261ecSmrg    swaps(&stuff->duration,n);
15505b261ecSmrg    return ProcXkbBell(client);
15605b261ecSmrg}
15705b261ecSmrg
15805b261ecSmrgstatic int
15905b261ecSmrgSProcXkbGetState(ClientPtr client)
16005b261ecSmrg{
16105b261ecSmrgregister int	n;
16205b261ecSmrg
16305b261ecSmrg    REQUEST(xkbGetStateReq);
16405b261ecSmrg
16505b261ecSmrg    swaps(&stuff->length,n);
16605b261ecSmrg    REQUEST_SIZE_MATCH(xkbGetStateReq);
16705b261ecSmrg    swaps(&stuff->deviceSpec,n);
16805b261ecSmrg    return ProcXkbGetState(client);
16905b261ecSmrg}
17005b261ecSmrg
17105b261ecSmrgstatic int
17205b261ecSmrgSProcXkbLatchLockState(ClientPtr client)
17305b261ecSmrg{
17405b261ecSmrgregister int 	n;
17505b261ecSmrg
17605b261ecSmrg    REQUEST(xkbLatchLockStateReq);
17705b261ecSmrg
17805b261ecSmrg    swaps(&stuff->length,n);
17905b261ecSmrg    REQUEST_SIZE_MATCH(xkbLatchLockStateReq);
18005b261ecSmrg    swaps(&stuff->deviceSpec,n);
18105b261ecSmrg    swaps(&stuff->groupLatch,n);
18205b261ecSmrg    return ProcXkbLatchLockState(client);
18305b261ecSmrg}
18405b261ecSmrg
18505b261ecSmrgstatic int
18605b261ecSmrgSProcXkbGetControls(ClientPtr client)
18705b261ecSmrg{
18805b261ecSmrgregister int	n;
18905b261ecSmrg
19005b261ecSmrg    REQUEST(xkbGetControlsReq);
19105b261ecSmrg
19205b261ecSmrg    swaps(&stuff->length,n);
19305b261ecSmrg    REQUEST_SIZE_MATCH(xkbGetControlsReq);
19405b261ecSmrg    swaps(&stuff->deviceSpec,n);
19505b261ecSmrg    return ProcXkbGetControls(client);
19605b261ecSmrg}
19705b261ecSmrg
19805b261ecSmrgstatic int
19905b261ecSmrgSProcXkbSetControls(ClientPtr client)
20005b261ecSmrg{
20105b261ecSmrgregister int	n;
20205b261ecSmrg
20305b261ecSmrg    REQUEST(xkbSetControlsReq);
20405b261ecSmrg
20505b261ecSmrg    swaps(&stuff->length,n);
20605b261ecSmrg    REQUEST_SIZE_MATCH(xkbSetControlsReq);
20705b261ecSmrg    swaps(&stuff->deviceSpec,n);
20805b261ecSmrg    swaps(&stuff->affectInternalVMods,n);
20905b261ecSmrg    swaps(&stuff->internalVMods,n);
21005b261ecSmrg    swaps(&stuff->affectIgnoreLockVMods,n);
21105b261ecSmrg    swaps(&stuff->ignoreLockVMods,n);
21205b261ecSmrg    swaps(&stuff->axOptions,n);
21305b261ecSmrg    swapl(&stuff->affectEnabledCtrls,n);
21405b261ecSmrg    swapl(&stuff->enabledCtrls,n);
21505b261ecSmrg    swapl(&stuff->changeCtrls,n);
21605b261ecSmrg    swaps(&stuff->repeatDelay,n);
21705b261ecSmrg    swaps(&stuff->repeatInterval,n);
21805b261ecSmrg    swaps(&stuff->slowKeysDelay,n);
21905b261ecSmrg    swaps(&stuff->debounceDelay,n);
22005b261ecSmrg    swaps(&stuff->mkDelay,n);
22105b261ecSmrg    swaps(&stuff->mkInterval,n);
22205b261ecSmrg    swaps(&stuff->mkTimeToMax,n);
22305b261ecSmrg    swaps(&stuff->mkMaxSpeed,n);
22405b261ecSmrg    swaps(&stuff->mkCurve,n);
22505b261ecSmrg    swaps(&stuff->axTimeout,n);
22605b261ecSmrg    swapl(&stuff->axtCtrlsMask,n);
22705b261ecSmrg    swapl(&stuff->axtCtrlsValues,n);
22805b261ecSmrg    swaps(&stuff->axtOptsMask,n);
22905b261ecSmrg    swaps(&stuff->axtOptsValues,n);
23005b261ecSmrg    return ProcXkbSetControls(client);
23105b261ecSmrg}
23205b261ecSmrg
23305b261ecSmrgstatic int
23405b261ecSmrgSProcXkbGetMap(ClientPtr client)
23505b261ecSmrg{
23605b261ecSmrgregister int	n;
23705b261ecSmrg
23805b261ecSmrg    REQUEST(xkbGetMapReq);
23905b261ecSmrg
24005b261ecSmrg    swaps(&stuff->length,n);
24105b261ecSmrg    REQUEST_SIZE_MATCH(xkbGetMapReq);
24205b261ecSmrg    swaps(&stuff->deviceSpec,n);
24305b261ecSmrg    swaps(&stuff->full,n);
24405b261ecSmrg    swaps(&stuff->partial,n);
24505b261ecSmrg    swaps(&stuff->virtualMods,n);
24605b261ecSmrg    return ProcXkbGetMap(client);
24705b261ecSmrg}
24805b261ecSmrg
24905b261ecSmrgstatic int
25005b261ecSmrgSProcXkbSetMap(ClientPtr client)
25105b261ecSmrg{
25205b261ecSmrgregister int	n;
25305b261ecSmrg
25405b261ecSmrg    REQUEST(xkbSetMapReq);
25505b261ecSmrg
25605b261ecSmrg    swaps(&stuff->length,n);
25705b261ecSmrg    REQUEST_AT_LEAST_SIZE(xkbSetMapReq);
25805b261ecSmrg    swaps(&stuff->deviceSpec,n);
25905b261ecSmrg    swaps(&stuff->present,n);
26005b261ecSmrg    swaps(&stuff->flags,n);
26105b261ecSmrg    swaps(&stuff->totalSyms,n);
26205b261ecSmrg    swaps(&stuff->totalActs,n);
26305b261ecSmrg    swaps(&stuff->virtualMods,n);
26405b261ecSmrg    return ProcXkbSetMap(client);
26505b261ecSmrg}
26605b261ecSmrg
26705b261ecSmrg
26805b261ecSmrgstatic int
26905b261ecSmrgSProcXkbGetCompatMap(ClientPtr client)
27005b261ecSmrg{
27105b261ecSmrgregister int	n;
27205b261ecSmrg
27305b261ecSmrg    REQUEST(xkbGetCompatMapReq);
27405b261ecSmrg
27505b261ecSmrg    swaps(&stuff->length,n);
27605b261ecSmrg    REQUEST_SIZE_MATCH(xkbGetCompatMapReq);
27705b261ecSmrg    swaps(&stuff->deviceSpec,n);
27805b261ecSmrg    swaps(&stuff->firstSI,n);
27905b261ecSmrg    swaps(&stuff->nSI,n);
28005b261ecSmrg    return ProcXkbGetCompatMap(client);
28105b261ecSmrg}
28205b261ecSmrg
28305b261ecSmrgstatic int
28405b261ecSmrgSProcXkbSetCompatMap(ClientPtr client)
28505b261ecSmrg{
28605b261ecSmrgregister int	n;
28705b261ecSmrg
28805b261ecSmrg    REQUEST(xkbSetCompatMapReq);
28905b261ecSmrg
29005b261ecSmrg    swaps(&stuff->length,n);
29105b261ecSmrg    REQUEST_AT_LEAST_SIZE(xkbSetCompatMapReq);
29205b261ecSmrg    swaps(&stuff->deviceSpec,n);
29305b261ecSmrg    swaps(&stuff->firstSI,n);
29405b261ecSmrg    swaps(&stuff->nSI,n);
29505b261ecSmrg    return ProcXkbSetCompatMap(client);
29605b261ecSmrg}
29705b261ecSmrg
29805b261ecSmrgstatic int
29905b261ecSmrgSProcXkbGetIndicatorState(ClientPtr client)
30005b261ecSmrg{
30105b261ecSmrgregister int	n;
30205b261ecSmrg
30305b261ecSmrg    REQUEST(xkbGetIndicatorStateReq);
30405b261ecSmrg
30505b261ecSmrg    swaps(&stuff->length,n);
30605b261ecSmrg    REQUEST_SIZE_MATCH(xkbGetIndicatorStateReq);
30705b261ecSmrg    swaps(&stuff->deviceSpec,n);
30805b261ecSmrg    return ProcXkbGetIndicatorState(client);
30905b261ecSmrg}
31005b261ecSmrg
31105b261ecSmrgstatic int
31205b261ecSmrgSProcXkbGetIndicatorMap(ClientPtr client)
31305b261ecSmrg{
31405b261ecSmrgregister int	n;
31505b261ecSmrg
31605b261ecSmrg    REQUEST(xkbGetIndicatorMapReq);
31705b261ecSmrg
31805b261ecSmrg    swaps(&stuff->length,n);
31905b261ecSmrg    REQUEST_SIZE_MATCH(xkbGetIndicatorMapReq);
32005b261ecSmrg    swaps(&stuff->deviceSpec,n);
32105b261ecSmrg    swapl(&stuff->which,n);
32205b261ecSmrg    return ProcXkbGetIndicatorMap(client);
32305b261ecSmrg}
32405b261ecSmrg
32505b261ecSmrgstatic int
32605b261ecSmrgSProcXkbSetIndicatorMap(ClientPtr client)
32705b261ecSmrg{
32805b261ecSmrgregister int	n;
32905b261ecSmrg
33005b261ecSmrg    REQUEST(xkbSetIndicatorMapReq);
33105b261ecSmrg
33205b261ecSmrg    swaps(&stuff->length,n);
33305b261ecSmrg    REQUEST_AT_LEAST_SIZE(xkbSetIndicatorMapReq);
33405b261ecSmrg    swaps(&stuff->deviceSpec,n);
33505b261ecSmrg    swapl(&stuff->which,n);
33605b261ecSmrg    return ProcXkbSetIndicatorMap(client);
33705b261ecSmrg}
33805b261ecSmrg
33905b261ecSmrgstatic int
34005b261ecSmrgSProcXkbGetNamedIndicator(ClientPtr client)
34105b261ecSmrg{
34205b261ecSmrgregister int	n;
34305b261ecSmrg
34405b261ecSmrg    REQUEST(xkbGetNamedIndicatorReq);
34505b261ecSmrg
34605b261ecSmrg    swaps(&stuff->length,n);
34705b261ecSmrg    REQUEST_SIZE_MATCH(xkbGetNamedIndicatorReq);
34805b261ecSmrg    swaps(&stuff->deviceSpec,n);
34905b261ecSmrg    swaps(&stuff->ledClass,n);
35005b261ecSmrg    swaps(&stuff->ledID,n);
35105b261ecSmrg    swapl(&stuff->indicator,n);
35205b261ecSmrg    return ProcXkbGetNamedIndicator(client);
35305b261ecSmrg}
35405b261ecSmrg
35505b261ecSmrgstatic int
35605b261ecSmrgSProcXkbSetNamedIndicator(ClientPtr client)
35705b261ecSmrg{
35805b261ecSmrgregister int	n;
35905b261ecSmrg
36005b261ecSmrg    REQUEST(xkbSetNamedIndicatorReq);
36105b261ecSmrg
36205b261ecSmrg    swaps(&stuff->length,n);
36305b261ecSmrg    REQUEST_SIZE_MATCH(xkbSetNamedIndicatorReq);
36405b261ecSmrg    swaps(&stuff->deviceSpec,n);
36505b261ecSmrg    swaps(&stuff->ledClass,n);
36605b261ecSmrg    swaps(&stuff->ledID,n);
36705b261ecSmrg    swapl(&stuff->indicator,n);
36805b261ecSmrg    swaps(&stuff->virtualMods,n);
36905b261ecSmrg    swapl(&stuff->ctrls,n);
37005b261ecSmrg    return ProcXkbSetNamedIndicator(client);
37105b261ecSmrg}
37205b261ecSmrg
37305b261ecSmrg
37405b261ecSmrgstatic int
37505b261ecSmrgSProcXkbGetNames(ClientPtr client)
37605b261ecSmrg{
37705b261ecSmrgregister int	n;
37805b261ecSmrg
37905b261ecSmrg    REQUEST(xkbGetNamesReq);
38005b261ecSmrg
38105b261ecSmrg    swaps(&stuff->length,n);
38205b261ecSmrg    REQUEST_SIZE_MATCH(xkbGetNamesReq);
38305b261ecSmrg    swaps(&stuff->deviceSpec,n);
38405b261ecSmrg    swapl(&stuff->which,n);
38505b261ecSmrg    return ProcXkbGetNames(client);
38605b261ecSmrg}
38705b261ecSmrg
38805b261ecSmrgstatic int
38905b261ecSmrgSProcXkbSetNames(ClientPtr client)
39005b261ecSmrg{
39105b261ecSmrgregister int	n;
39205b261ecSmrg
39305b261ecSmrg    REQUEST(xkbSetNamesReq);
39405b261ecSmrg
39505b261ecSmrg    swaps(&stuff->length,n);
39605b261ecSmrg    REQUEST_AT_LEAST_SIZE(xkbSetNamesReq);
39705b261ecSmrg    swaps(&stuff->deviceSpec,n);
39805b261ecSmrg    swaps(&stuff->virtualMods,n);
39905b261ecSmrg    swapl(&stuff->which,n);
40005b261ecSmrg    swapl(&stuff->indicators,n);
40105b261ecSmrg    swaps(&stuff->totalKTLevelNames,n);
40205b261ecSmrg    return ProcXkbSetNames(client);
40305b261ecSmrg}
40405b261ecSmrg
40505b261ecSmrgstatic int
40605b261ecSmrgSProcXkbGetGeometry(ClientPtr client)
40705b261ecSmrg{
40805b261ecSmrgregister int	n;
40905b261ecSmrg
41005b261ecSmrg    REQUEST(xkbGetGeometryReq);
41105b261ecSmrg
41205b261ecSmrg    swaps(&stuff->length,n);
41305b261ecSmrg    REQUEST_SIZE_MATCH(xkbGetGeometryReq);
41405b261ecSmrg    swaps(&stuff->deviceSpec,n);
41505b261ecSmrg    swapl(&stuff->name,n);
41605b261ecSmrg    return ProcXkbGetGeometry(client);
41705b261ecSmrg}
41805b261ecSmrg
41905b261ecSmrgstatic int
42005b261ecSmrgSProcXkbSetGeometry(ClientPtr client)
42105b261ecSmrg{
42205b261ecSmrgregister int	n;
42305b261ecSmrg
42405b261ecSmrg    REQUEST(xkbSetGeometryReq);
42505b261ecSmrg
42605b261ecSmrg    swaps(&stuff->length,n);
42705b261ecSmrg    REQUEST_AT_LEAST_SIZE(xkbSetGeometryReq);
42805b261ecSmrg    swaps(&stuff->deviceSpec,n);
42905b261ecSmrg    swapl(&stuff->name,n);
43005b261ecSmrg    swaps(&stuff->widthMM,n);
43105b261ecSmrg    swaps(&stuff->heightMM,n);
43205b261ecSmrg    swaps(&stuff->nProperties,n);
43305b261ecSmrg    swaps(&stuff->nColors,n);
43405b261ecSmrg    swaps(&stuff->nDoodads,n);
43505b261ecSmrg    swaps(&stuff->nKeyAliases,n);
43605b261ecSmrg    return ProcXkbSetGeometry(client);
43705b261ecSmrg}
43805b261ecSmrg
43905b261ecSmrgstatic int
44005b261ecSmrgSProcXkbPerClientFlags(ClientPtr client)
44105b261ecSmrg{
44205b261ecSmrgregister int	n;
44305b261ecSmrg
44405b261ecSmrg    REQUEST(xkbPerClientFlagsReq);
44505b261ecSmrg
44605b261ecSmrg    swaps(&stuff->length,n);
44705b261ecSmrg    REQUEST_SIZE_MATCH(xkbPerClientFlagsReq);
44805b261ecSmrg    swaps(&stuff->deviceSpec,n);
44905b261ecSmrg    swapl(&stuff->change,n);
45005b261ecSmrg    swapl(&stuff->value,n);
45105b261ecSmrg    swapl(&stuff->ctrlsToChange,n);
45205b261ecSmrg    swapl(&stuff->autoCtrls,n);
45305b261ecSmrg    swapl(&stuff->autoCtrlValues,n);
45405b261ecSmrg    return ProcXkbPerClientFlags(client);
45505b261ecSmrg}
45605b261ecSmrg
45705b261ecSmrgstatic int
45805b261ecSmrgSProcXkbListComponents(ClientPtr client)
45905b261ecSmrg{
46005b261ecSmrgregister int	n;
46105b261ecSmrg
46205b261ecSmrg    REQUEST(xkbListComponentsReq);
46305b261ecSmrg
46405b261ecSmrg    swaps(&stuff->length,n);
46505b261ecSmrg    REQUEST_AT_LEAST_SIZE(xkbListComponentsReq);
46605b261ecSmrg    swaps(&stuff->deviceSpec,n);
46705b261ecSmrg    swaps(&stuff->maxNames,n);
46805b261ecSmrg    return ProcXkbListComponents(client);
46905b261ecSmrg}
47005b261ecSmrg
47105b261ecSmrgstatic int
47205b261ecSmrgSProcXkbGetKbdByName(ClientPtr client)
47305b261ecSmrg{
47405b261ecSmrgregister int	n;
47505b261ecSmrg
47605b261ecSmrg    REQUEST(xkbGetKbdByNameReq);
47705b261ecSmrg
47805b261ecSmrg    swaps(&stuff->length,n);
47905b261ecSmrg    REQUEST_AT_LEAST_SIZE(xkbGetKbdByNameReq);
48005b261ecSmrg    swaps(&stuff->deviceSpec,n);
48105b261ecSmrg    swaps(&stuff->want,n);
48205b261ecSmrg    swaps(&stuff->need,n);
48305b261ecSmrg    return ProcXkbGetKbdByName(client);
48405b261ecSmrg}
48505b261ecSmrg
48605b261ecSmrgstatic int
48705b261ecSmrgSProcXkbGetDeviceInfo(ClientPtr client)
48805b261ecSmrg{
48905b261ecSmrgregister int	n;
49005b261ecSmrg
49105b261ecSmrg    REQUEST(xkbGetDeviceInfoReq);
49205b261ecSmrg
49305b261ecSmrg    swaps(&stuff->length,n);
49405b261ecSmrg    REQUEST_SIZE_MATCH(xkbGetDeviceInfoReq);
49505b261ecSmrg    swaps(&stuff->deviceSpec,n);
49605b261ecSmrg    swaps(&stuff->wanted,n);
49705b261ecSmrg    swaps(&stuff->ledClass,n);
49805b261ecSmrg    swaps(&stuff->ledID,n);
49905b261ecSmrg    return ProcXkbGetDeviceInfo(client);
50005b261ecSmrg}
50105b261ecSmrg
50205b261ecSmrgstatic int
50305b261ecSmrgSProcXkbSetDeviceInfo(ClientPtr client)
50405b261ecSmrg{
50505b261ecSmrgregister int	n;
50605b261ecSmrg
50705b261ecSmrg    REQUEST(xkbSetDeviceInfoReq);
50805b261ecSmrg
50905b261ecSmrg    swaps(&stuff->length,n);
51005b261ecSmrg    REQUEST_AT_LEAST_SIZE(xkbSetDeviceInfoReq);
51105b261ecSmrg    swaps(&stuff->deviceSpec,n);
51205b261ecSmrg    swaps(&stuff->change,n);
51305b261ecSmrg    swaps(&stuff->nDeviceLedFBs,n);
51405b261ecSmrg    return ProcXkbSetDeviceInfo(client);
51505b261ecSmrg}
51605b261ecSmrg
51705b261ecSmrgstatic int
51805b261ecSmrgSProcXkbSetDebuggingFlags(ClientPtr client)
51905b261ecSmrg{
52005b261ecSmrgregister int	n;
52105b261ecSmrg
52205b261ecSmrg    REQUEST(xkbSetDebuggingFlagsReq);
52305b261ecSmrg
52405b261ecSmrg    swaps(&stuff->length,n);
52505b261ecSmrg    REQUEST_AT_LEAST_SIZE(xkbSetDebuggingFlagsReq);
52605b261ecSmrg    swapl(&stuff->affectFlags,n);
52705b261ecSmrg    swapl(&stuff->flags,n);
52805b261ecSmrg    swapl(&stuff->affectCtrls,n);
52905b261ecSmrg    swapl(&stuff->ctrls,n);
53005b261ecSmrg    swaps(&stuff->msgLength,n);
53105b261ecSmrg    return ProcXkbSetDebuggingFlags(client);
53205b261ecSmrg}
53305b261ecSmrg
53405b261ecSmrgint
53505b261ecSmrgSProcXkbDispatch (ClientPtr client)
53605b261ecSmrg{
53705b261ecSmrg    REQUEST(xReq);
53805b261ecSmrg    switch (stuff->data)
53905b261ecSmrg    {
54005b261ecSmrg    case X_kbUseExtension:
54105b261ecSmrg	return SProcXkbUseExtension(client);
54205b261ecSmrg    case X_kbSelectEvents:
54305b261ecSmrg	return SProcXkbSelectEvents(client);
54405b261ecSmrg    case X_kbBell:
54505b261ecSmrg	return SProcXkbBell(client);
54605b261ecSmrg    case X_kbGetState:
54705b261ecSmrg	return SProcXkbGetState(client);
54805b261ecSmrg    case X_kbLatchLockState:
54905b261ecSmrg	return SProcXkbLatchLockState(client);
55005b261ecSmrg    case X_kbGetControls:
55105b261ecSmrg	return SProcXkbGetControls(client);
55205b261ecSmrg    case X_kbSetControls:
55305b261ecSmrg	return SProcXkbSetControls(client);
55405b261ecSmrg    case X_kbGetMap:
55505b261ecSmrg	return SProcXkbGetMap(client);
55605b261ecSmrg    case X_kbSetMap:
55705b261ecSmrg	return SProcXkbSetMap(client);
55805b261ecSmrg    case X_kbGetCompatMap:
55905b261ecSmrg	return SProcXkbGetCompatMap(client);
56005b261ecSmrg    case X_kbSetCompatMap:
56105b261ecSmrg	return SProcXkbSetCompatMap(client);
56205b261ecSmrg    case X_kbGetIndicatorState:
56305b261ecSmrg	return SProcXkbGetIndicatorState(client);
56405b261ecSmrg    case X_kbGetIndicatorMap:
56505b261ecSmrg	return SProcXkbGetIndicatorMap(client);
56605b261ecSmrg    case X_kbSetIndicatorMap:
56705b261ecSmrg	return SProcXkbSetIndicatorMap(client);
56805b261ecSmrg    case X_kbGetNamedIndicator:
56905b261ecSmrg	return SProcXkbGetNamedIndicator(client);
57005b261ecSmrg    case X_kbSetNamedIndicator:
57105b261ecSmrg	return SProcXkbSetNamedIndicator(client);
57205b261ecSmrg    case X_kbGetNames:
57305b261ecSmrg	return SProcXkbGetNames(client);
57405b261ecSmrg    case X_kbSetNames:
57505b261ecSmrg	return SProcXkbSetNames(client);
57605b261ecSmrg    case X_kbGetGeometry:
57705b261ecSmrg	return SProcXkbGetGeometry(client);
57805b261ecSmrg    case X_kbSetGeometry:
57905b261ecSmrg	return SProcXkbSetGeometry(client);
58005b261ecSmrg    case X_kbPerClientFlags:
58105b261ecSmrg	return SProcXkbPerClientFlags(client);
58205b261ecSmrg    case X_kbListComponents:
58305b261ecSmrg	return SProcXkbListComponents(client);
58405b261ecSmrg    case X_kbGetKbdByName:
58505b261ecSmrg	return SProcXkbGetKbdByName(client);
58605b261ecSmrg    case X_kbGetDeviceInfo:
58705b261ecSmrg	return SProcXkbGetDeviceInfo(client);
58805b261ecSmrg    case X_kbSetDeviceInfo:
58905b261ecSmrg	return SProcXkbSetDeviceInfo(client);
59005b261ecSmrg    case X_kbSetDebuggingFlags:
59105b261ecSmrg	return SProcXkbSetDebuggingFlags(client);
59205b261ecSmrg    default:
59305b261ecSmrg	return BadRequest;
59405b261ecSmrg    }
59505b261ecSmrg}
596