rrsdispatch.c revision 0b0d8713
105b261ecSmrg/*
205b261ecSmrg * Copyright © 2006 Keith Packard
305b261ecSmrg *
405b261ecSmrg * Permission to use, copy, modify, distribute, and sell this software and its
505b261ecSmrg * documentation for any purpose is hereby granted without fee, provided that
605b261ecSmrg * the above copyright notice appear in all copies and that both that copyright
705b261ecSmrg * notice and this permission notice appear in supporting documentation, and
805b261ecSmrg * that the name of the copyright holders not be used in advertising or
905b261ecSmrg * publicity pertaining to distribution of the software without specific,
1005b261ecSmrg * written prior permission.  The copyright holders make no representations
1105b261ecSmrg * about the suitability of this software for any purpose.  It is provided "as
1205b261ecSmrg * is" without express or implied warranty.
1305b261ecSmrg *
1405b261ecSmrg * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
1505b261ecSmrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
1605b261ecSmrg * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
1705b261ecSmrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
1805b261ecSmrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
1905b261ecSmrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
2005b261ecSmrg * OF THIS SOFTWARE.
2105b261ecSmrg */
2205b261ecSmrg
2305b261ecSmrg#include "randrstr.h"
2405b261ecSmrg
2505b261ecSmrgstatic int
2605b261ecSmrgSProcRRQueryVersion (ClientPtr client)
2705b261ecSmrg{
2805b261ecSmrg    register int n;
2905b261ecSmrg    REQUEST(xRRQueryVersionReq);
3005b261ecSmrg
310b0d8713Smrg    REQUEST_SIZE_MATCH(xRRQueryVersionReq);
3205b261ecSmrg    swaps(&stuff->length, n);
3305b261ecSmrg    swapl(&stuff->majorVersion, n);
3405b261ecSmrg    swapl(&stuff->minorVersion, n);
3505b261ecSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
3605b261ecSmrg}
3705b261ecSmrg
3805b261ecSmrgstatic int
3905b261ecSmrgSProcRRGetScreenInfo (ClientPtr client)
4005b261ecSmrg{
4105b261ecSmrg    register int n;
4205b261ecSmrg    REQUEST(xRRGetScreenInfoReq);
4305b261ecSmrg
440b0d8713Smrg    REQUEST_SIZE_MATCH(xRRGetScreenInfoReq);
4505b261ecSmrg    swaps(&stuff->length, n);
4605b261ecSmrg    swapl(&stuff->window, n);
4705b261ecSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
4805b261ecSmrg}
4905b261ecSmrg
5005b261ecSmrgstatic int
5105b261ecSmrgSProcRRSetScreenConfig (ClientPtr client)
5205b261ecSmrg{
5305b261ecSmrg    register int n;
5405b261ecSmrg    REQUEST(xRRSetScreenConfigReq);
5505b261ecSmrg
5605b261ecSmrg    if (RRClientKnowsRates (client))
5705b261ecSmrg    {
5805b261ecSmrg	REQUEST_SIZE_MATCH (xRRSetScreenConfigReq);
5905b261ecSmrg	swaps (&stuff->rate, n);
6005b261ecSmrg    }
6105b261ecSmrg    else
6205b261ecSmrg    {
6305b261ecSmrg	REQUEST_SIZE_MATCH (xRR1_0SetScreenConfigReq);
6405b261ecSmrg    }
6505b261ecSmrg
6605b261ecSmrg    swaps(&stuff->length, n);
6705b261ecSmrg    swapl(&stuff->drawable, n);
6805b261ecSmrg    swapl(&stuff->timestamp, n);
6905b261ecSmrg    swaps(&stuff->sizeID, n);
7005b261ecSmrg    swaps(&stuff->rotation, n);
7105b261ecSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
7205b261ecSmrg}
7305b261ecSmrg
7405b261ecSmrgstatic int
7505b261ecSmrgSProcRRSelectInput (ClientPtr client)
7605b261ecSmrg{
7705b261ecSmrg    register int n;
7805b261ecSmrg    REQUEST(xRRSelectInputReq);
7905b261ecSmrg
800b0d8713Smrg    REQUEST_SIZE_MATCH(xRRSelectInputReq);
8105b261ecSmrg    swaps(&stuff->length, n);
8205b261ecSmrg    swapl(&stuff->window, n);
8305b261ecSmrg    swaps(&stuff->enable, n);
8405b261ecSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
8505b261ecSmrg}
8605b261ecSmrg
8705b261ecSmrgstatic int
8805b261ecSmrgSProcRRGetScreenSizeRange (ClientPtr client)
8905b261ecSmrg{
904642e01fSmrg    int n;
9105b261ecSmrg    REQUEST(xRRGetScreenSizeRangeReq);
924642e01fSmrg
9305b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetScreenSizeRangeReq);
944642e01fSmrg    swaps(&stuff->length, n);
954642e01fSmrg    swapl(&stuff->window, n);
964642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
9705b261ecSmrg}
9805b261ecSmrg
9905b261ecSmrgstatic int
10005b261ecSmrgSProcRRSetScreenSize (ClientPtr client)
10105b261ecSmrg{
1024642e01fSmrg    int n;
10305b261ecSmrg    REQUEST(xRRSetScreenSizeReq);
1044642e01fSmrg
10505b261ecSmrg    REQUEST_SIZE_MATCH(xRRSetScreenSizeReq);
1064642e01fSmrg    swaps(&stuff->length, n);
1074642e01fSmrg    swapl(&stuff->window, n);
1084642e01fSmrg    swaps(&stuff->width, n);
1094642e01fSmrg    swaps(&stuff->height, n);
1104642e01fSmrg    swapl(&stuff->widthInMillimeters, n);
1114642e01fSmrg    swapl(&stuff->heightInMillimeters, n);
1124642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
11305b261ecSmrg}
11405b261ecSmrg
11505b261ecSmrgstatic int
11605b261ecSmrgSProcRRGetScreenResources (ClientPtr client)
11705b261ecSmrg{
1184642e01fSmrg    int n;
11905b261ecSmrg    REQUEST(xRRGetScreenResourcesReq);
1204642e01fSmrg
12105b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetScreenResourcesReq);
1224642e01fSmrg    swaps(&stuff->length, n);
1234642e01fSmrg    swapl(&stuff->window, n);
1244642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
12505b261ecSmrg}
12605b261ecSmrg
12705b261ecSmrgstatic int
12805b261ecSmrgSProcRRGetOutputInfo (ClientPtr client)
12905b261ecSmrg{
1304642e01fSmrg    int n;
1314642e01fSmrg    REQUEST(xRRGetOutputInfoReq);
1324642e01fSmrg
13305b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetOutputInfoReq);
1344642e01fSmrg    swaps(&stuff->length, n);
1354642e01fSmrg    swapl(&stuff->output, n);
1364642e01fSmrg    swapl(&stuff->configTimestamp, n);
1374642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
13805b261ecSmrg}
13905b261ecSmrg
14005b261ecSmrgstatic int
14105b261ecSmrgSProcRRListOutputProperties (ClientPtr client)
14205b261ecSmrg{
1434642e01fSmrg    int n;
14405b261ecSmrg    REQUEST(xRRListOutputPropertiesReq);
1454642e01fSmrg
14605b261ecSmrg    REQUEST_SIZE_MATCH(xRRListOutputPropertiesReq);
1474642e01fSmrg    swaps(&stuff->length, n);
1484642e01fSmrg    swapl(&stuff->output, n);
1494642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
15005b261ecSmrg}
15105b261ecSmrg
15205b261ecSmrgstatic int
15305b261ecSmrgSProcRRQueryOutputProperty (ClientPtr client)
15405b261ecSmrg{
1554642e01fSmrg    int n;
15605b261ecSmrg    REQUEST(xRRQueryOutputPropertyReq);
1574642e01fSmrg
15805b261ecSmrg    REQUEST_SIZE_MATCH(xRRQueryOutputPropertyReq);
1594642e01fSmrg    swaps(&stuff->length, n);
1604642e01fSmrg    swapl(&stuff->output, n);
1614642e01fSmrg    swapl(&stuff->property, n);
1624642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
16305b261ecSmrg}
16405b261ecSmrg
16505b261ecSmrgstatic int
16605b261ecSmrgSProcRRConfigureOutputProperty (ClientPtr client)
16705b261ecSmrg{
1684642e01fSmrg    int n;
16905b261ecSmrg    REQUEST(xRRConfigureOutputPropertyReq);
1704642e01fSmrg
1710b0d8713Smrg    REQUEST_AT_LEAST_SIZE(xRRConfigureOutputPropertyReq);
1724642e01fSmrg    swaps(&stuff->length, n);
1734642e01fSmrg    swapl(&stuff->output, n);
1744642e01fSmrg    swapl(&stuff->property, n);
1754642e01fSmrg    SwapRestL(stuff);
1764642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
17705b261ecSmrg}
17805b261ecSmrg
17905b261ecSmrgstatic int
18005b261ecSmrgSProcRRChangeOutputProperty (ClientPtr client)
18105b261ecSmrg{
1824642e01fSmrg    int n;
18305b261ecSmrg    REQUEST(xRRChangeOutputPropertyReq);
1844642e01fSmrg
1854642e01fSmrg    REQUEST_AT_LEAST_SIZE (xRRChangeOutputPropertyReq);
1864642e01fSmrg    swaps(&stuff->length, n);
1874642e01fSmrg    swapl(&stuff->output, n);
1884642e01fSmrg    swapl(&stuff->property, n);
1894642e01fSmrg    swapl(&stuff->type, n);
1904642e01fSmrg    swapl(&stuff->nUnits, n);
1914642e01fSmrg    switch(stuff->format) {
1924642e01fSmrg	case 8:
1934642e01fSmrg	    break;
1944642e01fSmrg	case 16:
1954642e01fSmrg	    SwapRestS(stuff);
1964642e01fSmrg	    break;
1974642e01fSmrg	case 32:
1984642e01fSmrg	    SwapRestL(stuff);
1994642e01fSmrg	    break;
2004642e01fSmrg	default:
2014642e01fSmrg	    client->errorValue = stuff->format;
2024642e01fSmrg	    return BadValue;
2034642e01fSmrg    }
2044642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
20505b261ecSmrg}
20605b261ecSmrg
20705b261ecSmrgstatic int
20805b261ecSmrgSProcRRDeleteOutputProperty (ClientPtr client)
20905b261ecSmrg{
2104642e01fSmrg    int n;
21105b261ecSmrg    REQUEST(xRRDeleteOutputPropertyReq);
21205b261ecSmrg
21305b261ecSmrg    REQUEST_SIZE_MATCH(xRRDeleteOutputPropertyReq);
2144642e01fSmrg    swaps(&stuff->length, n);
2154642e01fSmrg    swapl(&stuff->output, n);
2164642e01fSmrg    swapl(&stuff->property, n);
2174642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
21805b261ecSmrg}
21905b261ecSmrg
22005b261ecSmrgstatic int
22105b261ecSmrgSProcRRGetOutputProperty (ClientPtr client)
22205b261ecSmrg{
2234642e01fSmrg    int n;
22405b261ecSmrg    REQUEST(xRRGetOutputPropertyReq);
2254642e01fSmrg
22605b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetOutputPropertyReq);
2274642e01fSmrg    swaps(&stuff->length, n);
2284642e01fSmrg    swapl(&stuff->output, n);
2294642e01fSmrg    swapl(&stuff->property, n);
2304642e01fSmrg    swapl(&stuff->type, n);
2314642e01fSmrg    swapl(&stuff->longOffset, n);
2324642e01fSmrg    swapl(&stuff->longLength, n);
2334642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
23405b261ecSmrg}
23505b261ecSmrg
23605b261ecSmrgstatic int
23705b261ecSmrgSProcRRCreateMode (ClientPtr client)
23805b261ecSmrg{
2394642e01fSmrg    int n;
2404642e01fSmrg    xRRModeInfo *modeinfo;
24105b261ecSmrg    REQUEST(xRRCreateModeReq);
2424642e01fSmrg
2434642e01fSmrg    REQUEST_AT_LEAST_SIZE(xRRCreateModeReq);
2444642e01fSmrg    swaps(&stuff->length, n);
2454642e01fSmrg    swapl(&stuff->window, n);
2464642e01fSmrg
2474642e01fSmrg    modeinfo = &stuff->modeInfo;
2484642e01fSmrg    swapl(&modeinfo->id, n);
2494642e01fSmrg    swaps(&modeinfo->width, n);
2504642e01fSmrg    swaps(&modeinfo->height, n);
2514642e01fSmrg    swapl(&modeinfo->dotClock, n);
2524642e01fSmrg    swaps(&modeinfo->hSyncStart, n);
2534642e01fSmrg    swaps(&modeinfo->hSyncEnd, n);
2544642e01fSmrg    swaps(&modeinfo->hTotal, n);
2554642e01fSmrg    swaps(&modeinfo->vSyncStart, n);
2564642e01fSmrg    swaps(&modeinfo->vSyncEnd, n);
2574642e01fSmrg    swaps(&modeinfo->vTotal, n);
2584642e01fSmrg    swaps(&modeinfo->nameLength, n);
2594642e01fSmrg    swapl(&modeinfo->modeFlags, n);
2604642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
26105b261ecSmrg}
26205b261ecSmrg
26305b261ecSmrgstatic int
26405b261ecSmrgSProcRRDestroyMode (ClientPtr client)
26505b261ecSmrg{
2664642e01fSmrg    int n;
26705b261ecSmrg    REQUEST(xRRDestroyModeReq);
2684642e01fSmrg
26905b261ecSmrg    REQUEST_SIZE_MATCH(xRRDestroyModeReq);
2704642e01fSmrg    swaps(&stuff->length, n);
2714642e01fSmrg    swapl(&stuff->mode, n);
2724642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
27305b261ecSmrg}
27405b261ecSmrg
27505b261ecSmrgstatic int
27605b261ecSmrgSProcRRAddOutputMode (ClientPtr client)
27705b261ecSmrg{
2784642e01fSmrg    int n;
27905b261ecSmrg    REQUEST(xRRAddOutputModeReq);
2804642e01fSmrg
28105b261ecSmrg    REQUEST_SIZE_MATCH(xRRAddOutputModeReq);
2824642e01fSmrg    swaps(&stuff->length, n);
2834642e01fSmrg    swapl(&stuff->output, n);
2844642e01fSmrg    swapl(&stuff->mode, n);
2854642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
28605b261ecSmrg}
28705b261ecSmrg
28805b261ecSmrgstatic int
28905b261ecSmrgSProcRRDeleteOutputMode (ClientPtr client)
29005b261ecSmrg{
2914642e01fSmrg    int n;
29205b261ecSmrg    REQUEST(xRRDeleteOutputModeReq);
2934642e01fSmrg
29405b261ecSmrg    REQUEST_SIZE_MATCH(xRRDeleteOutputModeReq);
2954642e01fSmrg    swaps(&stuff->length, n);
2964642e01fSmrg    swapl(&stuff->output, n);
2974642e01fSmrg    swapl(&stuff->mode, n);
2984642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
29905b261ecSmrg}
30005b261ecSmrg
30105b261ecSmrgstatic int
30205b261ecSmrgSProcRRGetCrtcInfo (ClientPtr client)
30305b261ecSmrg{
3044642e01fSmrg    int n;
30505b261ecSmrg    REQUEST(xRRGetCrtcInfoReq);
3064642e01fSmrg
30705b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetCrtcInfoReq);
3084642e01fSmrg    swaps(&stuff->length, n);
3094642e01fSmrg    swapl(&stuff->crtc, n);
3104642e01fSmrg    swapl(&stuff->configTimestamp, n);
3114642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
31205b261ecSmrg}
31305b261ecSmrg
31405b261ecSmrgstatic int
31505b261ecSmrgSProcRRSetCrtcConfig (ClientPtr client)
31605b261ecSmrg{
3174642e01fSmrg    int n;
31805b261ecSmrg    REQUEST(xRRSetCrtcConfigReq);
3194642e01fSmrg
3204642e01fSmrg    REQUEST_AT_LEAST_SIZE(xRRSetCrtcConfigReq);
3214642e01fSmrg    swaps(&stuff->length, n);
3224642e01fSmrg    swapl(&stuff->crtc, n);
3234642e01fSmrg    swapl(&stuff->timestamp, n);
3244642e01fSmrg    swapl(&stuff->configTimestamp, n);
3254642e01fSmrg    swaps(&stuff->x, n);
3264642e01fSmrg    swaps(&stuff->y, n);
3274642e01fSmrg    swapl(&stuff->mode, n);
3284642e01fSmrg    swaps(&stuff->rotation, n);
3294642e01fSmrg    SwapRestL(stuff);
3304642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
33105b261ecSmrg}
33205b261ecSmrg
33305b261ecSmrgstatic int
33405b261ecSmrgSProcRRGetCrtcGammaSize (ClientPtr client)
33505b261ecSmrg{
3364642e01fSmrg    int n;
33705b261ecSmrg    REQUEST(xRRGetCrtcGammaSizeReq);
3384642e01fSmrg
33905b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetCrtcGammaSizeReq);
3404642e01fSmrg    swaps(&stuff->length, n);
3414642e01fSmrg    swapl(&stuff->crtc, n);
3424642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
34305b261ecSmrg}
34405b261ecSmrg
34505b261ecSmrgstatic int
34605b261ecSmrgSProcRRGetCrtcGamma (ClientPtr client)
34705b261ecSmrg{
3484642e01fSmrg    int n;
34905b261ecSmrg    REQUEST(xRRGetCrtcGammaReq);
3504642e01fSmrg
35105b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetCrtcGammaReq);
3524642e01fSmrg    swaps(&stuff->length, n);
3534642e01fSmrg    swapl(&stuff->crtc, n);
3544642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
35505b261ecSmrg}
35605b261ecSmrg
35705b261ecSmrgstatic int
35805b261ecSmrgSProcRRSetCrtcGamma (ClientPtr client)
35905b261ecSmrg{
3604642e01fSmrg    int n;
36105b261ecSmrg    REQUEST(xRRSetCrtcGammaReq);
3624642e01fSmrg
3634642e01fSmrg    REQUEST_AT_LEAST_SIZE(xRRSetCrtcGammaReq);
3644642e01fSmrg    swaps(&stuff->length, n);
3654642e01fSmrg    swapl(&stuff->crtc, n);
3664642e01fSmrg    swaps(&stuff->size, n);
3674642e01fSmrg    SwapRestS(stuff);
3684642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
3694642e01fSmrg}
3704642e01fSmrg
3714642e01fSmrgstatic int
3724642e01fSmrgSProcRRSetCrtcTransform (ClientPtr client)
3734642e01fSmrg{
3744642e01fSmrg    int n, nparams;
3754642e01fSmrg    char *filter;
3764642e01fSmrg    CARD32 *params;
3774642e01fSmrg    REQUEST(xRRSetCrtcTransformReq);
3784642e01fSmrg
3794642e01fSmrg    REQUEST_AT_LEAST_SIZE(xRRSetCrtcTransformReq);
3804642e01fSmrg    swaps(&stuff->length, n);
3814642e01fSmrg    swapl(&stuff->crtc, n);
3826747b715Smrg    SwapLongs((CARD32 *)&stuff->transform, bytes_to_int32(sizeof(xRenderTransform)));
3834642e01fSmrg    swaps(&stuff->nbytesFilter, n);
3844642e01fSmrg    filter = (char *)(stuff + 1);
3856747b715Smrg    params = (CARD32 *) (filter + pad_to_int32(stuff->nbytesFilter));
3864642e01fSmrg    nparams = ((CARD32 *) stuff + client->req_len) - params;
3874642e01fSmrg    if (nparams < 0)
3884642e01fSmrg	return BadLength;
3894642e01fSmrg
3904642e01fSmrg    SwapLongs(params, nparams);
3914642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
3924642e01fSmrg}
3934642e01fSmrg
3944642e01fSmrgstatic int
3954642e01fSmrgSProcRRGetCrtcTransform (ClientPtr client)
3964642e01fSmrg{
3974642e01fSmrg    int n;
3984642e01fSmrg    REQUEST(xRRGetCrtcTransformReq);
3994642e01fSmrg
4004642e01fSmrg    REQUEST_SIZE_MATCH(xRRGetCrtcTransformReq);
4014642e01fSmrg    swaps(&stuff->length, n);
4024642e01fSmrg    swapl(&stuff->crtc, n);
4034642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
4044642e01fSmrg}
4054642e01fSmrg
4064642e01fSmrgstatic int
4074642e01fSmrgSProcRRGetPanning (ClientPtr client)
4084642e01fSmrg{
4094642e01fSmrg    int n;
4104642e01fSmrg    REQUEST(xRRGetPanningReq);
4114642e01fSmrg
4124642e01fSmrg    REQUEST_SIZE_MATCH(xRRGetPanningReq);
4134642e01fSmrg    swaps(&stuff->length, n);
4144642e01fSmrg    swapl(&stuff->crtc, n);
4154642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
4164642e01fSmrg}
4174642e01fSmrg
4184642e01fSmrgstatic int
4194642e01fSmrgSProcRRSetPanning (ClientPtr client)
4204642e01fSmrg{
4214642e01fSmrg    int n;
4224642e01fSmrg    REQUEST(xRRSetPanningReq);
42305b261ecSmrg
4244642e01fSmrg    REQUEST_SIZE_MATCH(xRRSetPanningReq);
4254642e01fSmrg    swaps(&stuff->length, n);
4264642e01fSmrg    swapl(&stuff->crtc, n);
4274642e01fSmrg    swapl(&stuff->timestamp, n);
4284642e01fSmrg    swaps(&stuff->left, n);
4294642e01fSmrg    swaps(&stuff->top, n);
4304642e01fSmrg    swaps(&stuff->width, n);
4314642e01fSmrg    swaps(&stuff->height, n);
4324642e01fSmrg    swaps(&stuff->track_left, n);
4334642e01fSmrg    swaps(&stuff->track_top, n);
4344642e01fSmrg    swaps(&stuff->track_width, n);
4354642e01fSmrg    swaps(&stuff->track_height, n);
4364642e01fSmrg    swaps(&stuff->border_left, n);
4374642e01fSmrg    swaps(&stuff->border_top, n);
4384642e01fSmrg    swaps(&stuff->border_right, n);
4394642e01fSmrg    swaps(&stuff->border_bottom, n);
4404642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
4414642e01fSmrg}
4424642e01fSmrg
4434642e01fSmrgstatic int
4444642e01fSmrgSProcRRSetOutputPrimary (ClientPtr client)
4454642e01fSmrg{
4464642e01fSmrg    int n;
4474642e01fSmrg    REQUEST(xRRSetOutputPrimaryReq);
4484642e01fSmrg
4494642e01fSmrg    REQUEST_SIZE_MATCH(xRRSetOutputPrimaryReq);
4504642e01fSmrg    swaps(&stuff->length, n);
4514642e01fSmrg    swapl(&stuff->window, n);
4524642e01fSmrg    swapl(&stuff->output, n);
4534642e01fSmrg    return ProcRandrVector[stuff->randrReqType](client);
4544642e01fSmrg}
4554642e01fSmrg
4564642e01fSmrgstatic int
4574642e01fSmrgSProcRRGetOutputPrimary (ClientPtr client)
4584642e01fSmrg{
4594642e01fSmrg    int n;
4606747b715Smrg    REQUEST(xRRGetOutputPrimaryReq);
4614642e01fSmrg
4624642e01fSmrg    REQUEST_SIZE_MATCH(xRRGetOutputPrimaryReq);
4634642e01fSmrg    swaps(&stuff->length, n);
4644642e01fSmrg    swapl(&stuff->window, n);
4654642e01fSmrg    return ProcRandrVector[stuff->randrReqType](client);
46605b261ecSmrg}
46705b261ecSmrg
46805b261ecSmrgint (*SProcRandrVector[RRNumberRequests])(ClientPtr) = {
46905b261ecSmrg    SProcRRQueryVersion,	/* 0 */
47005b261ecSmrg/* we skip 1 to make old clients fail pretty immediately */
47105b261ecSmrg    NULL,			/* 1 SProcRandrOldGetScreenInfo */
47205b261ecSmrg/* V1.0 apps share the same set screen config request id */
47305b261ecSmrg    SProcRRSetScreenConfig,	/* 2 */
47405b261ecSmrg    NULL,			/* 3 SProcRandrOldScreenChangeSelectInput */
47505b261ecSmrg/* 3 used to be ScreenChangeSelectInput; deprecated */
47605b261ecSmrg    SProcRRSelectInput,		/* 4 */
47705b261ecSmrg    SProcRRGetScreenInfo,    	/* 5 */
47805b261ecSmrg/* V1.2 additions */
47905b261ecSmrg    SProcRRGetScreenSizeRange,	/* 6 */
48005b261ecSmrg    SProcRRSetScreenSize,	/* 7 */
48105b261ecSmrg    SProcRRGetScreenResources,	/* 8 */
48205b261ecSmrg    SProcRRGetOutputInfo,	/* 9 */
48305b261ecSmrg    SProcRRListOutputProperties,/* 10 */
48405b261ecSmrg    SProcRRQueryOutputProperty,	/* 11 */
48505b261ecSmrg    SProcRRConfigureOutputProperty,  /* 12 */
48605b261ecSmrg    SProcRRChangeOutputProperty,/* 13 */
48705b261ecSmrg    SProcRRDeleteOutputProperty,/* 14 */
48805b261ecSmrg    SProcRRGetOutputProperty,	/* 15 */
48905b261ecSmrg    SProcRRCreateMode,		/* 16 */
49005b261ecSmrg    SProcRRDestroyMode,		/* 17 */
49105b261ecSmrg    SProcRRAddOutputMode,	/* 18 */
49205b261ecSmrg    SProcRRDeleteOutputMode,	/* 19 */
49305b261ecSmrg    SProcRRGetCrtcInfo,		/* 20 */
49405b261ecSmrg    SProcRRSetCrtcConfig,	/* 21 */
49505b261ecSmrg    SProcRRGetCrtcGammaSize,	/* 22 */
49605b261ecSmrg    SProcRRGetCrtcGamma,	/* 23 */
49705b261ecSmrg    SProcRRSetCrtcGamma,	/* 24 */
4984642e01fSmrg/* V1.3 additions */
4994642e01fSmrg    SProcRRGetScreenResources,	/* 25 GetScreenResourcesCurrent */
5004642e01fSmrg    SProcRRSetCrtcTransform,	/* 26 */
5014642e01fSmrg    SProcRRGetCrtcTransform,	/* 27 */
5024642e01fSmrg    SProcRRGetPanning,		/* 28 */
5034642e01fSmrg    SProcRRSetPanning,		/* 29 */
5044642e01fSmrg    SProcRRSetOutputPrimary,	/* 30 */
5054642e01fSmrg    SProcRRGetOutputPrimary,	/* 31 */
50605b261ecSmrg};
50705b261ecSmrg
508