rrsdispatch.c revision 4642e01f
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
3105b261ecSmrg    swaps(&stuff->length, n);
3205b261ecSmrg    swapl(&stuff->majorVersion, n);
3305b261ecSmrg    swapl(&stuff->minorVersion, n);
3405b261ecSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
3505b261ecSmrg}
3605b261ecSmrg
3705b261ecSmrgstatic int
3805b261ecSmrgSProcRRGetScreenInfo (ClientPtr client)
3905b261ecSmrg{
4005b261ecSmrg    register int n;
4105b261ecSmrg    REQUEST(xRRGetScreenInfoReq);
4205b261ecSmrg
4305b261ecSmrg    swaps(&stuff->length, n);
4405b261ecSmrg    swapl(&stuff->window, n);
4505b261ecSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
4605b261ecSmrg}
4705b261ecSmrg
4805b261ecSmrgstatic int
4905b261ecSmrgSProcRRSetScreenConfig (ClientPtr client)
5005b261ecSmrg{
5105b261ecSmrg    register int n;
5205b261ecSmrg    REQUEST(xRRSetScreenConfigReq);
5305b261ecSmrg
5405b261ecSmrg    if (RRClientKnowsRates (client))
5505b261ecSmrg    {
5605b261ecSmrg	REQUEST_SIZE_MATCH (xRRSetScreenConfigReq);
5705b261ecSmrg	swaps (&stuff->rate, n);
5805b261ecSmrg    }
5905b261ecSmrg    else
6005b261ecSmrg    {
6105b261ecSmrg	REQUEST_SIZE_MATCH (xRR1_0SetScreenConfigReq);
6205b261ecSmrg    }
6305b261ecSmrg
6405b261ecSmrg    swaps(&stuff->length, n);
6505b261ecSmrg    swapl(&stuff->drawable, n);
6605b261ecSmrg    swapl(&stuff->timestamp, n);
6705b261ecSmrg    swaps(&stuff->sizeID, n);
6805b261ecSmrg    swaps(&stuff->rotation, n);
6905b261ecSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
7005b261ecSmrg}
7105b261ecSmrg
7205b261ecSmrgstatic int
7305b261ecSmrgSProcRRSelectInput (ClientPtr client)
7405b261ecSmrg{
7505b261ecSmrg    register int n;
7605b261ecSmrg    REQUEST(xRRSelectInputReq);
7705b261ecSmrg
7805b261ecSmrg    swaps(&stuff->length, n);
7905b261ecSmrg    swapl(&stuff->window, n);
8005b261ecSmrg    swaps(&stuff->enable, n);
8105b261ecSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
8205b261ecSmrg}
8305b261ecSmrg
8405b261ecSmrgstatic int
8505b261ecSmrgSProcRRGetScreenSizeRange (ClientPtr client)
8605b261ecSmrg{
874642e01fSmrg    int n;
8805b261ecSmrg    REQUEST(xRRGetScreenSizeRangeReq);
894642e01fSmrg
9005b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetScreenSizeRangeReq);
914642e01fSmrg    swaps(&stuff->length, n);
924642e01fSmrg    swapl(&stuff->window, n);
934642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
9405b261ecSmrg}
9505b261ecSmrg
9605b261ecSmrgstatic int
9705b261ecSmrgSProcRRSetScreenSize (ClientPtr client)
9805b261ecSmrg{
994642e01fSmrg    int n;
10005b261ecSmrg    REQUEST(xRRSetScreenSizeReq);
1014642e01fSmrg
10205b261ecSmrg    REQUEST_SIZE_MATCH(xRRSetScreenSizeReq);
1034642e01fSmrg    swaps(&stuff->length, n);
1044642e01fSmrg    swapl(&stuff->window, n);
1054642e01fSmrg    swaps(&stuff->width, n);
1064642e01fSmrg    swaps(&stuff->height, n);
1074642e01fSmrg    swapl(&stuff->widthInMillimeters, n);
1084642e01fSmrg    swapl(&stuff->heightInMillimeters, n);
1094642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
11005b261ecSmrg}
11105b261ecSmrg
11205b261ecSmrgstatic int
11305b261ecSmrgSProcRRGetScreenResources (ClientPtr client)
11405b261ecSmrg{
1154642e01fSmrg    int n;
11605b261ecSmrg    REQUEST(xRRGetScreenResourcesReq);
1174642e01fSmrg
11805b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetScreenResourcesReq);
1194642e01fSmrg    swaps(&stuff->length, n);
1204642e01fSmrg    swapl(&stuff->window, n);
1214642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
12205b261ecSmrg}
12305b261ecSmrg
12405b261ecSmrgstatic int
12505b261ecSmrgSProcRRGetOutputInfo (ClientPtr client)
12605b261ecSmrg{
1274642e01fSmrg    int n;
1284642e01fSmrg    REQUEST(xRRGetOutputInfoReq);
1294642e01fSmrg
13005b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetOutputInfoReq);
1314642e01fSmrg    swaps(&stuff->length, n);
1324642e01fSmrg    swapl(&stuff->output, n);
1334642e01fSmrg    swapl(&stuff->configTimestamp, n);
1344642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
13505b261ecSmrg}
13605b261ecSmrg
13705b261ecSmrgstatic int
13805b261ecSmrgSProcRRListOutputProperties (ClientPtr client)
13905b261ecSmrg{
1404642e01fSmrg    int n;
14105b261ecSmrg    REQUEST(xRRListOutputPropertiesReq);
1424642e01fSmrg
14305b261ecSmrg    REQUEST_SIZE_MATCH(xRRListOutputPropertiesReq);
1444642e01fSmrg    swaps(&stuff->length, n);
1454642e01fSmrg    swapl(&stuff->output, n);
1464642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
14705b261ecSmrg}
14805b261ecSmrg
14905b261ecSmrgstatic int
15005b261ecSmrgSProcRRQueryOutputProperty (ClientPtr client)
15105b261ecSmrg{
1524642e01fSmrg    int n;
15305b261ecSmrg    REQUEST(xRRQueryOutputPropertyReq);
1544642e01fSmrg
15505b261ecSmrg    REQUEST_SIZE_MATCH(xRRQueryOutputPropertyReq);
1564642e01fSmrg    swaps(&stuff->length, n);
1574642e01fSmrg    swapl(&stuff->output, n);
1584642e01fSmrg    swapl(&stuff->property, n);
1594642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
16005b261ecSmrg}
16105b261ecSmrg
16205b261ecSmrgstatic int
16305b261ecSmrgSProcRRConfigureOutputProperty (ClientPtr client)
16405b261ecSmrg{
1654642e01fSmrg    int n;
16605b261ecSmrg    REQUEST(xRRConfigureOutputPropertyReq);
1674642e01fSmrg
1684642e01fSmrg    swaps(&stuff->length, n);
1694642e01fSmrg    swapl(&stuff->output, n);
1704642e01fSmrg    swapl(&stuff->property, n);
1714642e01fSmrg    SwapRestL(stuff);
1724642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
17305b261ecSmrg}
17405b261ecSmrg
17505b261ecSmrgstatic int
17605b261ecSmrgSProcRRChangeOutputProperty (ClientPtr client)
17705b261ecSmrg{
1784642e01fSmrg    int n;
17905b261ecSmrg    REQUEST(xRRChangeOutputPropertyReq);
1804642e01fSmrg
1814642e01fSmrg    REQUEST_AT_LEAST_SIZE (xRRChangeOutputPropertyReq);
1824642e01fSmrg    swaps(&stuff->length, n);
1834642e01fSmrg    swapl(&stuff->output, n);
1844642e01fSmrg    swapl(&stuff->property, n);
1854642e01fSmrg    swapl(&stuff->type, n);
1864642e01fSmrg    swapl(&stuff->nUnits, n);
1874642e01fSmrg    switch(stuff->format) {
1884642e01fSmrg	case 8:
1894642e01fSmrg	    break;
1904642e01fSmrg	case 16:
1914642e01fSmrg	    SwapRestS(stuff);
1924642e01fSmrg	    break;
1934642e01fSmrg	case 32:
1944642e01fSmrg	    SwapRestL(stuff);
1954642e01fSmrg	    break;
1964642e01fSmrg	default:
1974642e01fSmrg	    client->errorValue = stuff->format;
1984642e01fSmrg	    return BadValue;
1994642e01fSmrg    }
2004642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
20105b261ecSmrg}
20205b261ecSmrg
20305b261ecSmrgstatic int
20405b261ecSmrgSProcRRDeleteOutputProperty (ClientPtr client)
20505b261ecSmrg{
2064642e01fSmrg    int n;
20705b261ecSmrg    REQUEST(xRRDeleteOutputPropertyReq);
20805b261ecSmrg
20905b261ecSmrg    REQUEST_SIZE_MATCH(xRRDeleteOutputPropertyReq);
2104642e01fSmrg    swaps(&stuff->length, n);
2114642e01fSmrg    swapl(&stuff->output, n);
2124642e01fSmrg    swapl(&stuff->property, n);
2134642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
21405b261ecSmrg}
21505b261ecSmrg
21605b261ecSmrgstatic int
21705b261ecSmrgSProcRRGetOutputProperty (ClientPtr client)
21805b261ecSmrg{
2194642e01fSmrg    int n;
22005b261ecSmrg    REQUEST(xRRGetOutputPropertyReq);
2214642e01fSmrg
22205b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetOutputPropertyReq);
2234642e01fSmrg    swaps(&stuff->length, n);
2244642e01fSmrg    swapl(&stuff->output, n);
2254642e01fSmrg    swapl(&stuff->property, n);
2264642e01fSmrg    swapl(&stuff->type, n);
2274642e01fSmrg    swapl(&stuff->longOffset, n);
2284642e01fSmrg    swapl(&stuff->longLength, n);
2294642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
23005b261ecSmrg}
23105b261ecSmrg
23205b261ecSmrgstatic int
23305b261ecSmrgSProcRRCreateMode (ClientPtr client)
23405b261ecSmrg{
2354642e01fSmrg    int n;
2364642e01fSmrg    xRRModeInfo *modeinfo;
23705b261ecSmrg    REQUEST(xRRCreateModeReq);
2384642e01fSmrg
2394642e01fSmrg    REQUEST_AT_LEAST_SIZE(xRRCreateModeReq);
2404642e01fSmrg    swaps(&stuff->length, n);
2414642e01fSmrg    swapl(&stuff->window, n);
2424642e01fSmrg
2434642e01fSmrg    modeinfo = &stuff->modeInfo;
2444642e01fSmrg    swapl(&modeinfo->id, n);
2454642e01fSmrg    swaps(&modeinfo->width, n);
2464642e01fSmrg    swaps(&modeinfo->height, n);
2474642e01fSmrg    swapl(&modeinfo->dotClock, n);
2484642e01fSmrg    swaps(&modeinfo->hSyncStart, n);
2494642e01fSmrg    swaps(&modeinfo->hSyncEnd, n);
2504642e01fSmrg    swaps(&modeinfo->hTotal, n);
2514642e01fSmrg    swaps(&modeinfo->vSyncStart, n);
2524642e01fSmrg    swaps(&modeinfo->vSyncEnd, n);
2534642e01fSmrg    swaps(&modeinfo->vTotal, n);
2544642e01fSmrg    swaps(&modeinfo->nameLength, n);
2554642e01fSmrg    swapl(&modeinfo->modeFlags, n);
2564642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
25705b261ecSmrg}
25805b261ecSmrg
25905b261ecSmrgstatic int
26005b261ecSmrgSProcRRDestroyMode (ClientPtr client)
26105b261ecSmrg{
2624642e01fSmrg    int n;
26305b261ecSmrg    REQUEST(xRRDestroyModeReq);
2644642e01fSmrg
26505b261ecSmrg    REQUEST_SIZE_MATCH(xRRDestroyModeReq);
2664642e01fSmrg    swaps(&stuff->length, n);
2674642e01fSmrg    swapl(&stuff->mode, n);
2684642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
26905b261ecSmrg}
27005b261ecSmrg
27105b261ecSmrgstatic int
27205b261ecSmrgSProcRRAddOutputMode (ClientPtr client)
27305b261ecSmrg{
2744642e01fSmrg    int n;
27505b261ecSmrg    REQUEST(xRRAddOutputModeReq);
2764642e01fSmrg
27705b261ecSmrg    REQUEST_SIZE_MATCH(xRRAddOutputModeReq);
2784642e01fSmrg    swaps(&stuff->length, n);
2794642e01fSmrg    swapl(&stuff->output, n);
2804642e01fSmrg    swapl(&stuff->mode, n);
2814642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
28205b261ecSmrg}
28305b261ecSmrg
28405b261ecSmrgstatic int
28505b261ecSmrgSProcRRDeleteOutputMode (ClientPtr client)
28605b261ecSmrg{
2874642e01fSmrg    int n;
28805b261ecSmrg    REQUEST(xRRDeleteOutputModeReq);
2894642e01fSmrg
29005b261ecSmrg    REQUEST_SIZE_MATCH(xRRDeleteOutputModeReq);
2914642e01fSmrg    swaps(&stuff->length, n);
2924642e01fSmrg    swapl(&stuff->output, n);
2934642e01fSmrg    swapl(&stuff->mode, n);
2944642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
29505b261ecSmrg}
29605b261ecSmrg
29705b261ecSmrgstatic int
29805b261ecSmrgSProcRRGetCrtcInfo (ClientPtr client)
29905b261ecSmrg{
3004642e01fSmrg    int n;
30105b261ecSmrg    REQUEST(xRRGetCrtcInfoReq);
3024642e01fSmrg
30305b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetCrtcInfoReq);
3044642e01fSmrg    swaps(&stuff->length, n);
3054642e01fSmrg    swapl(&stuff->crtc, n);
3064642e01fSmrg    swapl(&stuff->configTimestamp, n);
3074642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
30805b261ecSmrg}
30905b261ecSmrg
31005b261ecSmrgstatic int
31105b261ecSmrgSProcRRSetCrtcConfig (ClientPtr client)
31205b261ecSmrg{
3134642e01fSmrg    int n;
31405b261ecSmrg    REQUEST(xRRSetCrtcConfigReq);
3154642e01fSmrg
3164642e01fSmrg    REQUEST_AT_LEAST_SIZE(xRRSetCrtcConfigReq);
3174642e01fSmrg    swaps(&stuff->length, n);
3184642e01fSmrg    swapl(&stuff->crtc, n);
3194642e01fSmrg    swapl(&stuff->timestamp, n);
3204642e01fSmrg    swapl(&stuff->configTimestamp, n);
3214642e01fSmrg    swaps(&stuff->x, n);
3224642e01fSmrg    swaps(&stuff->y, n);
3234642e01fSmrg    swapl(&stuff->mode, n);
3244642e01fSmrg    swaps(&stuff->rotation, n);
3254642e01fSmrg    SwapRestL(stuff);
3264642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
32705b261ecSmrg}
32805b261ecSmrg
32905b261ecSmrgstatic int
33005b261ecSmrgSProcRRGetCrtcGammaSize (ClientPtr client)
33105b261ecSmrg{
3324642e01fSmrg    int n;
33305b261ecSmrg    REQUEST(xRRGetCrtcGammaSizeReq);
3344642e01fSmrg
33505b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetCrtcGammaSizeReq);
3364642e01fSmrg    swaps(&stuff->length, n);
3374642e01fSmrg    swapl(&stuff->crtc, n);
3384642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
33905b261ecSmrg}
34005b261ecSmrg
34105b261ecSmrgstatic int
34205b261ecSmrgSProcRRGetCrtcGamma (ClientPtr client)
34305b261ecSmrg{
3444642e01fSmrg    int n;
34505b261ecSmrg    REQUEST(xRRGetCrtcGammaReq);
3464642e01fSmrg
34705b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetCrtcGammaReq);
3484642e01fSmrg    swaps(&stuff->length, n);
3494642e01fSmrg    swapl(&stuff->crtc, n);
3504642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
35105b261ecSmrg}
35205b261ecSmrg
35305b261ecSmrgstatic int
35405b261ecSmrgSProcRRSetCrtcGamma (ClientPtr client)
35505b261ecSmrg{
3564642e01fSmrg    int n;
35705b261ecSmrg    REQUEST(xRRSetCrtcGammaReq);
3584642e01fSmrg
3594642e01fSmrg    REQUEST_AT_LEAST_SIZE(xRRSetCrtcGammaReq);
3604642e01fSmrg    swaps(&stuff->length, n);
3614642e01fSmrg    swapl(&stuff->crtc, n);
3624642e01fSmrg    swaps(&stuff->size, n);
3634642e01fSmrg    SwapRestS(stuff);
3644642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
3654642e01fSmrg}
3664642e01fSmrg
3674642e01fSmrgstatic int
3684642e01fSmrgSProcRRSetCrtcTransform (ClientPtr client)
3694642e01fSmrg{
3704642e01fSmrg    int n, nparams;
3714642e01fSmrg    char *filter;
3724642e01fSmrg    CARD32 *params;
3734642e01fSmrg    REQUEST(xRRSetCrtcTransformReq);
3744642e01fSmrg
3754642e01fSmrg    REQUEST_AT_LEAST_SIZE(xRRSetCrtcTransformReq);
3764642e01fSmrg    swaps(&stuff->length, n);
3774642e01fSmrg    swapl(&stuff->crtc, n);
3784642e01fSmrg    SwapLongs((CARD32 *)&stuff->transform, (sizeof(xRenderTransform)) >> 2);
3794642e01fSmrg    swaps(&stuff->nbytesFilter, n);
3804642e01fSmrg    filter = (char *)(stuff + 1);
3814642e01fSmrg    params = (CARD32 *) (filter + ((stuff->nbytesFilter + 3) & ~3));
3824642e01fSmrg    nparams = ((CARD32 *) stuff + client->req_len) - params;
3834642e01fSmrg    if (nparams < 0)
3844642e01fSmrg	return BadLength;
3854642e01fSmrg
3864642e01fSmrg    SwapLongs(params, nparams);
3874642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
3884642e01fSmrg}
3894642e01fSmrg
3904642e01fSmrgstatic int
3914642e01fSmrgSProcRRGetCrtcTransform (ClientPtr client)
3924642e01fSmrg{
3934642e01fSmrg    int n;
3944642e01fSmrg    REQUEST(xRRGetCrtcTransformReq);
3954642e01fSmrg
3964642e01fSmrg    REQUEST_SIZE_MATCH(xRRGetCrtcTransformReq);
3974642e01fSmrg    swaps(&stuff->length, n);
3984642e01fSmrg    swapl(&stuff->crtc, n);
3994642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
4004642e01fSmrg}
4014642e01fSmrg
4024642e01fSmrgstatic int
4034642e01fSmrgSProcRRGetPanning (ClientPtr client)
4044642e01fSmrg{
4054642e01fSmrg    int n;
4064642e01fSmrg    REQUEST(xRRGetPanningReq);
4074642e01fSmrg
4084642e01fSmrg    REQUEST_SIZE_MATCH(xRRGetPanningReq);
4094642e01fSmrg    swaps(&stuff->length, n);
4104642e01fSmrg    swapl(&stuff->crtc, n);
4114642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
4124642e01fSmrg}
4134642e01fSmrg
4144642e01fSmrgstatic int
4154642e01fSmrgSProcRRSetPanning (ClientPtr client)
4164642e01fSmrg{
4174642e01fSmrg    int n;
4184642e01fSmrg    REQUEST(xRRSetPanningReq);
41905b261ecSmrg
4204642e01fSmrg    REQUEST_SIZE_MATCH(xRRSetPanningReq);
4214642e01fSmrg    swaps(&stuff->length, n);
4224642e01fSmrg    swapl(&stuff->crtc, n);
4234642e01fSmrg    swapl(&stuff->timestamp, n);
4244642e01fSmrg    swaps(&stuff->left, n);
4254642e01fSmrg    swaps(&stuff->top, n);
4264642e01fSmrg    swaps(&stuff->width, n);
4274642e01fSmrg    swaps(&stuff->height, n);
4284642e01fSmrg    swaps(&stuff->track_left, n);
4294642e01fSmrg    swaps(&stuff->track_top, n);
4304642e01fSmrg    swaps(&stuff->track_width, n);
4314642e01fSmrg    swaps(&stuff->track_height, n);
4324642e01fSmrg    swaps(&stuff->border_left, n);
4334642e01fSmrg    swaps(&stuff->border_top, n);
4344642e01fSmrg    swaps(&stuff->border_right, n);
4354642e01fSmrg    swaps(&stuff->border_bottom, n);
4364642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
4374642e01fSmrg}
4384642e01fSmrg
4394642e01fSmrgstatic int
4404642e01fSmrgSProcRRSetOutputPrimary (ClientPtr client)
4414642e01fSmrg{
4424642e01fSmrg    int n;
4434642e01fSmrg    REQUEST(xRRSetOutputPrimaryReq);
4444642e01fSmrg
4454642e01fSmrg    REQUEST_SIZE_MATCH(xRRSetOutputPrimaryReq);
4464642e01fSmrg    swaps(&stuff->length, n);
4474642e01fSmrg    swapl(&stuff->window, n);
4484642e01fSmrg    swapl(&stuff->output, n);
4494642e01fSmrg    return ProcRandrVector[stuff->randrReqType](client);
4504642e01fSmrg}
4514642e01fSmrg
4524642e01fSmrgstatic int
4534642e01fSmrgSProcRRGetOutputPrimary (ClientPtr client)
4544642e01fSmrg{
4554642e01fSmrg    int n;
4564642e01fSmrg    REQUEST(xRRSetOutputPrimaryReq);
4574642e01fSmrg
4584642e01fSmrg    REQUEST_SIZE_MATCH(xRRGetOutputPrimaryReq);
4594642e01fSmrg    swaps(&stuff->length, n);
4604642e01fSmrg    swapl(&stuff->window, n);
4614642e01fSmrg    return ProcRandrVector[stuff->randrReqType](client);
46205b261ecSmrg}
46305b261ecSmrg
46405b261ecSmrgint (*SProcRandrVector[RRNumberRequests])(ClientPtr) = {
46505b261ecSmrg    SProcRRQueryVersion,	/* 0 */
46605b261ecSmrg/* we skip 1 to make old clients fail pretty immediately */
46705b261ecSmrg    NULL,			/* 1 SProcRandrOldGetScreenInfo */
46805b261ecSmrg/* V1.0 apps share the same set screen config request id */
46905b261ecSmrg    SProcRRSetScreenConfig,	/* 2 */
47005b261ecSmrg    NULL,			/* 3 SProcRandrOldScreenChangeSelectInput */
47105b261ecSmrg/* 3 used to be ScreenChangeSelectInput; deprecated */
47205b261ecSmrg    SProcRRSelectInput,		/* 4 */
47305b261ecSmrg    SProcRRGetScreenInfo,    	/* 5 */
47405b261ecSmrg/* V1.2 additions */
47505b261ecSmrg    SProcRRGetScreenSizeRange,	/* 6 */
47605b261ecSmrg    SProcRRSetScreenSize,	/* 7 */
47705b261ecSmrg    SProcRRGetScreenResources,	/* 8 */
47805b261ecSmrg    SProcRRGetOutputInfo,	/* 9 */
47905b261ecSmrg    SProcRRListOutputProperties,/* 10 */
48005b261ecSmrg    SProcRRQueryOutputProperty,	/* 11 */
48105b261ecSmrg    SProcRRConfigureOutputProperty,  /* 12 */
48205b261ecSmrg    SProcRRChangeOutputProperty,/* 13 */
48305b261ecSmrg    SProcRRDeleteOutputProperty,/* 14 */
48405b261ecSmrg    SProcRRGetOutputProperty,	/* 15 */
48505b261ecSmrg    SProcRRCreateMode,		/* 16 */
48605b261ecSmrg    SProcRRDestroyMode,		/* 17 */
48705b261ecSmrg    SProcRRAddOutputMode,	/* 18 */
48805b261ecSmrg    SProcRRDeleteOutputMode,	/* 19 */
48905b261ecSmrg    SProcRRGetCrtcInfo,		/* 20 */
49005b261ecSmrg    SProcRRSetCrtcConfig,	/* 21 */
49105b261ecSmrg    SProcRRGetCrtcGammaSize,	/* 22 */
49205b261ecSmrg    SProcRRGetCrtcGamma,	/* 23 */
49305b261ecSmrg    SProcRRSetCrtcGamma,	/* 24 */
4944642e01fSmrg/* V1.3 additions */
4954642e01fSmrg    SProcRRGetScreenResources,	/* 25 GetScreenResourcesCurrent */
4964642e01fSmrg    SProcRRSetCrtcTransform,	/* 26 */
4974642e01fSmrg    SProcRRGetCrtcTransform,	/* 27 */
4984642e01fSmrg    SProcRRGetPanning,		/* 28 */
4994642e01fSmrg    SProcRRSetPanning,		/* 29 */
5004642e01fSmrg    SProcRRSetOutputPrimary,	/* 30 */
5014642e01fSmrg    SProcRRGetOutputPrimary,	/* 31 */
50205b261ecSmrg};
50305b261ecSmrg
504