From b4de85b1b63d03322c2c831002bd5aa6418347ba Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Tue, 28 Aug 2012 23:35:37 -0700 Subject: Update RANDR support from 0.x to include 1.0 - 1.4 Signed-off-by: Alan Coopersmith --- print_randr.c | 1477 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1464 insertions(+), 13 deletions(-) (limited to 'print_randr.c') diff --git a/print_randr.c b/print_randr.c index 2682fdd..3182664 100644 --- a/print_randr.c +++ b/print_randr.c @@ -1,5 +1,6 @@ /* * Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc. + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -35,7 +36,15 @@ RandrQueryVersion(FD fd, const unsigned char *buf) if (Verbose > 1) PrintField(SBf, 0, 4, CARD32, "sequence number"); - printreqlen(buf, fd, CONST2(2)); + printreqlen(buf, fd, CONST2(3)); + PrintField(buf, 4, 4, CARD32, "major-version"); + PrintField(buf, 8, 4, CARD32, "minor-version"); + + /* + Todo, maybe: record major-version for distinguishing which version of + original set of requests/replies client is using, version 0.x or 1.x. + Alternatively: purge all support for version 0.x. + */ } void @@ -48,12 +57,14 @@ RandrQueryVersionReply(FD fd, const unsigned char *buf) return; printfield(buf, 2, 2, CARD16, "sequence number"); printfield(buf, 4, 4, DVALUE4(0), "reply length"); - PrintField(buf, 8, 2, CARD16, "major-version"); - PrintField(buf, 10, 2, CARD16, "minor-version"); + PrintField(buf, 8, 4, CARD32, "major-version"); + PrintField(buf, 12, 4, CARD32, "minor-version"); } +/* RandrOld* interfaces are for RandR 0.x only - the protocol changed + incompatibily in RandR 1.0, and the RandR 1.0 versions come later. */ void -RandrGetScreenInfo(FD fd, const unsigned char *buf) +RandrOldGetScreenInfo(FD fd, const unsigned char *buf) { PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSwitch */ @@ -67,13 +78,14 @@ RandrGetScreenInfo(FD fd, const unsigned char *buf) } void -RandrGetScreenInfoReply(FD fd, const unsigned char *buf) +RandrOldGetScreenInfoReply(FD fd, const unsigned char *buf) { unsigned short nsize; unsigned short nvg; unsigned short ngvg; PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); if (Verbose < 1) return; PrintField(buf, 1, 1, CARD8, "set-of-rotations"); @@ -94,7 +106,7 @@ RandrGetScreenInfoReply(FD fd, const unsigned char *buf) } void -RandrSetScreenConfig(FD fd, const unsigned char *buf) +RandrOldSetScreenConfig(FD fd, const unsigned char *buf) { PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSwitch */ @@ -113,9 +125,10 @@ RandrSetScreenConfig(FD fd, const unsigned char *buf) } void -RandrSetScreenConfigReply(FD fd, const unsigned char *buf) +RandrOldSetScreenConfigReply(FD fd, const unsigned char *buf) { PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); PrintField(buf, 1, 1, BOOL, "success"); /* RandrQueryVersion reply */ if (Verbose < 1) return; @@ -127,7 +140,7 @@ RandrSetScreenConfigReply(FD fd, const unsigned char *buf) } void -RandrScreenChangeSelectInput(FD fd, const unsigned char *buf) +RandrOldScreenChangeSelectInput(FD fd, const unsigned char *buf) { PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSwitch */ @@ -141,8 +154,8 @@ RandrScreenChangeSelectInput(FD fd, const unsigned char *buf) PrintField(buf, 8, 1, BOOL, "enable"); } -void -RandrScreenSizes(const unsigned char *buf) +static void +RandrOldScreenSizes(const unsigned char *buf) { PrintField(buf, 0, 2, CARD16, "width-in-pixels"); PrintField(buf, 2, 2, CARD16, "height-in-pixels"); @@ -152,9 +165,9 @@ RandrScreenSizes(const unsigned char *buf) } void -RandrScreenChangeNotifyEvent(const unsigned char *buf) +RandrOldScreenChangeNotifyEvent(const unsigned char *buf) { - PrintField(buf, 0, 1, EVENT, EVENTHEADER); /* RRScreenChangeNotify */ + PrintField(buf, 0, 1, EVENT, EVENTHEADER); /* RROldScreenChangeNotify */ if (Verbose < 1) return; PrintField(buf, 1, 1, BOOL, "resident"); @@ -164,5 +177,1443 @@ RandrScreenChangeNotifyEvent(const unsigned char *buf) PrintField(buf, 12, 4, WINDOW, "root"); PrintField(buf, 16, 2, CARD16, "size id"); PrintField(buf, 18, 2, CARD16, "rotation"); - RandrScreenSizes(buf + 20); + RandrOldScreenSizes(buf + 20); +} + +/* RandR 1.0 starts here */ +int +PrintSCREENSIZE(const unsigned char *buf) +{ + PrintField(buf, 0, 2, CARD16, "width-in-pixels"); + PrintField(buf, 2, 2, CARD16, "height-in-pixels"); + PrintField(buf, 4, 2, CARD16, "width-in-millimeters"); + PrintField(buf, 6, 2, CARD16, "height-in-millimeters"); + return 8; +} + +void +RandrSetScreenConfig(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSetScreenConfig */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(6)); + PrintField(buf, 4, 4, DRAWABLE, "drawable"); + PrintField(buf, 8, 4, TIMESTAMP, "timestamp"); + PrintField(buf, 12, 4, TIMESTAMP, "config-timestamp"); + PrintField(buf, 16, 2, CARD16, "size-id"); + PrintField(buf, 18, 2, CARD16, "rotation"); + PrintField(buf, 20, 2, CARD16, "rate"); +} + + +void +RandrSetScreenConfigReply(FD fd, const unsigned char *buf) +{ + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + PrintField(buf, 1, 1, CARD8, "status"); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, DVALUE4(0), "reply length"); + PrintField(buf, 8, 4, TIMESTAMP, "new-timestamp"); + PrintField(buf, 12, 4, TIMESTAMP, "new-config-timestamp"); + PrintField(buf, 16, 4, WINDOW, "root"); + PrintField(buf, 20, 2, SUBPIXEL, "subpixel-order"); +} + + +void +RandrSelectInput(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSelectInput */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(3)); + PrintField(buf, 4, 4, WINDOW, "window"); + PrintField(buf, 8, 2, SETofRREVENT, "select-mask"); +} + + +void +RandrGetScreenInfo(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetScreenInfo */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(2)); + PrintField(buf, 4, 4, WINDOW, "window"); +} + +void +RandrGetScreenInfoReply(FD fd, const unsigned char *buf) +{ + uint16_t s, r; + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + PrintField(buf, 1, 1, SETofROTATION, "rotations"); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, DVALUE4(0), "reply length"); + PrintField(buf, 8, 4, WINDOW, "root"); + PrintField(buf, 12, 4, TIMESTAMP, "new-timestamp"); + PrintField(buf, 16, 4, TIMESTAMP, "new-config-timestamp"); + PrintField(buf, 20, 2, CARD16, "num-sizes"); + s = IShort(&buf[20]); + PrintField(buf, 22, 2, CARD16, "size-id"); + PrintField(buf, 24, 2, SETofROTATION, "rotation"); + PrintField(buf, 26, 2, CARD16, "rate"); + printfield(buf, 28, 2, CARD16, "rates-length"); + + buf += 32; /* screen sizes start 32 bytes from head of reply */ + PrintList(buf, s, SCREENSIZE, "sizes"); + buf += s * 8; + + r = IShort(buf); + PrintField(buf, 0, 2, CARD16, "num-rates"); + buf += 2; + PrintList(buf, r, CARD16, "refresh-rates"); +} + +void +RandrScreenChangeNotifyEvent(const unsigned char *buf) +{ + PrintField(buf, 0, 1, EVENT, EVENTHEADER); /* RRScreenChangeNotify */ + if (Verbose < 1) + return; + PrintField(buf, 1, 1, CARD8, "rotation"); + printfield(buf, 2, 2, CARD16, "sequence number"); + PrintField(buf, 4, 4, TIMESTAMP, "timestamp"); + PrintField(buf, 8, 4, TIMESTAMP, "config-timestamp"); + PrintField(buf, 12, 4, WINDOW, "root"); + PrintField(buf, 16, 4, WINDOW, "window"); + PrintField(buf, 20, 2, CARD16, "size id"); + PrintField(buf, 22, 2, SUBPIXEL, "subpixel-order"); + PrintSCREENSIZE(buf + 24); +} + +/* Randr 1.2 additions */ +int +PrintMODEINFO(const unsigned char *buf) +{ + PrintField(buf, 0, 4, CARD32, "id"); + PrintField(buf, 4, 2, CARD16, "width-in-pixels"); + PrintField(buf, 6, 2, CARD16, "height-in-pixels"); + PrintField(buf, 8, 4, CARD32, "dot clock"); + PrintField(buf, 12, 2, CARD16, "h sync start"); + PrintField(buf, 14, 2, CARD16, "h sync end"); + PrintField(buf, 16, 2, CARD16, "h total"); + PrintField(buf, 18, 2, CARD16, "h skew"); + PrintField(buf, 20, 2, CARD16, "v sync start"); + PrintField(buf, 22, 2, CARD16, "v sync end"); + PrintField(buf, 24, 2, CARD16, "v total"); + PrintField(buf, 26, 2, CARD16, "name length"); + PrintField(buf, 28, 4, SETofMODEFLAG, "mode flags"); + return 32; +} + +int PrintMODE(const unsigned char *buf) +{ + /* print a MODE -- CARD32 plus 0 = None */ + long n = ILong(buf); + + if (n == 0) + fprintf(stdout, "None"); + else + fprintf(stdout, "MODE %08lx", n); + return (4); +} + +int +PrintCRTC(const unsigned char *buf) +{ + /* print a CRTC -- CARD32 plus 0 = None */ + long n = ILong(buf); + + if (n == 0) + fprintf(stdout, "None"); + else + fprintf(stdout, "CRTC %08lx", n); + return (4); +} + +int +PrintOUTPUT(const unsigned char *buf) +{ + /* print an OUTPUT -- CARD32 plus 0 = None */ + long n = ILong(buf); + + if (n == 0) + fprintf(stdout, "None"); + else + fprintf(stdout, "OUTP %08lx", n); + return (4); +} + + +void +RandrGetScreenSizeRange(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetScreenSizeRange */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(2)); + PrintField(buf, 4, 4, WINDOW, "window"); +} + + +void +RandrGetScreenSizeRangeReply(FD fd, const unsigned char *buf) +{ + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, DVALUE4(0), "reply length"); + PrintField(buf, 8, 2, CARD16, "min-width"); + PrintField(buf, 10, 2, CARD16, "min-height"); + PrintField(buf, 12, 2, CARD16, "max-width"); + PrintField(buf, 24, 2, CARD16, "max-height"); +} + + +void +RandrSetScreenSize(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSetScreenSize */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(5)); + PrintField(buf, 4, 4, WINDOW, "window"); + PrintSCREENSIZE(buf + 8); +} + + +void +RandrGetScreenResources(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetScreenResources */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(2)); + PrintField(buf, 4, 4, WINDOW, "window"); +} + + +void +RandrGetScreenResourcesReply(FD fd, const unsigned char *buf) +{ + uint16_t c, o, m, b; + const unsigned char *nl, *end; + int i; + + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, DVALUE4(c+o+8m+(b+p)/4), "reply length"); + PrintField(buf, 8, 4, TIMESTAMP, "timestamp"); + PrintField(buf, 12, 4, TIMESTAMP, "config-timestamp"); + printfield(buf, 16, 2, CARD16, "num-crtcs"); /* c */ + printfield(buf, 18, 2, CARD16, "num-outputs"); /* o */ + printfield(buf, 20, 2, CARD16, "num-modes"); /* m */ + printfield(buf, 22, 2, CARD16, "num-bytes-names"); /* b */ + /* 8 bytes unused */ + c = IShort(&buf[16]); + o = IShort(&buf[18]); + m = IShort(&buf[20]); + b = IShort(&buf[22]); + + buf += 32; + PrintList(buf, c, CRTC, "crtcs"); + buf += c * 4; + PrintList(buf, o, OUTPUT, "outputs"); + buf += o * 4; + nl = buf + 26; /* offset of name length field in first modeinfo */ + PrintList(buf, m, MODEINFO, "modeinfos"); + buf += m * 32; + end = buf + b; + for (i = 0 ; i < m; i++, nl += 32) { + uint16_t len = IShort(nl); + if ((buf + len) > end) { + fprintf(stdout, "**INVALID NAME LENGTH**"); + break; + } + buf += PrintString8(buf, len, "mode name"); + } +} + + +void +RandrGetOutputInfo(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetOutputInfo */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(3)); + PrintField(buf, 4, 4, OUTPUT, "output"); + PrintField(buf, 8, 4, TIMESTAMP, "config-timestamp"); +} + + +void +RandrGetOutputInfoReply(FD fd, const unsigned char *buf) +{ + uint16_t c, m, p, o, n; + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + PrintField(buf, 1, 1, CARD8, "status"); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, DVALUE4(1+c+m+(n+p)/4), "reply length"); + PrintField(buf, 8, 4, TIMESTAMP, "timestamp"); + PrintField(buf, 12, 4, CRTC, "crtc"); + PrintField(buf, 16, 4, CARD32, "width-in-millimeters"); + PrintField(buf, 20, 4, CARD32, "height-in-millimeters"); + PrintField(buf, 24, 1, CARD8, "connection"); + PrintField(buf, 25, 1, SUBPIXEL, "subpixel-order"); + printfield(buf, 26, 2, CARD16, "num-crtcs"); + printfield(buf, 28, 2, CARD16, "num-modes"); + printfield(buf, 30, 2, CARD16, "num-preferred"); + printfield(buf, 32, 2, CARD16, "num-clones"); + printfield(buf, 34, 2, CARD16, "name-length"); + c = IShort(&buf[26]); + m = IShort(&buf[28]); + p = IShort(&buf[30]); + o = IShort(&buf[32]); + n = IShort(&buf[34]); + + buf += 36; + PrintList(buf, c, CRTC, "crtcs"); + buf += c * 4; + PrintList(buf, p, MODE, "preferred-modes"); + buf += p * 4; + PrintList(buf, m - p, MODE, "other-modes"); + buf += (m - p) * 4; + PrintList(buf, o, OUTPUT, "clones"); + buf += o * 4; + PrintString8(buf, n, "name"); +} + + +void +RandrListOutputProperties(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrListOutputProperties */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(2)); + PrintField(buf, 4, 4, OUTPUT, "output"); +} + + +void +RandrListOutputPropertiesReply(FD fd, const unsigned char *buf) +{ + uint16_t n; + + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, DVALUE4(0), "reply length"); + printfield(buf, 8, 2, DVALUE2(n), "number of atoms"); + n = IShort(&buf[8]); + PrintList(&buf[32], (long) n, ATOM, "atoms"); +} + + +void +RandrQueryOutputProperty(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrQueryOutputProperty */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(3)); + PrintField(buf, 4, 4, OUTPUT, "output"); + PrintField(buf, 8, 4, ATOM, "property"); +} + + +void +RandrQueryOutputPropertyReply(FD fd, const unsigned char *buf) +{ + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, DVALUE4(n), "reply length"); + PrintField(buf, 8, 1, BOOL, "pending"); + printfield(buf, 9, 1, BOOL, "range"); + PrintField(buf, 10, 1, BOOL, "immutable"); + + if (IBool(&buf[9]) && (Verbose <= 1)) { /* range of min-max values */ + PrintField(buf, 32, 4, INT32, "minimum value"); + PrintField(buf, 36, 4, INT32, "maximum value"); + } else { /* list of values */ + uint32_t n = ILong(&buf[4]); + PrintList(&buf[32], n, INT32, "accepted values"); + } +} + + +void +RandrConfigureOutputProperty(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrConfigureOutputProperty */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, DVALUE2(4 + n)); + PrintField(buf, 4, 4, OUTPUT, "output"); + PrintField(buf, 8, 4, ATOM, "property"); + PrintField(buf, 12, 1, BOOL, "pending"); + printfield(buf, 13, 1, BOOL, "range"); + + if (IBool(&buf[12]) && (Verbose <= 1)) { /* range of min-max values */ + PrintField(buf, 16, 4, INT32, "minimum value"); + PrintField(buf, 20, 4, INT32, "maximum value"); + } else { /* list of values */ + uint32_t n = ILong(&buf[4]) - 4; + PrintList(&buf[16], n, INT32, "accepted values"); + } +} + + +void +RandrChangeOutputProperty(FD fd, const unsigned char *buf) +{ + uint32_t n; + short unit; + long type; + + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrChangeOutputProperty */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, DVALUE2(6 + (n + p) / 4)); + PrintField(buf, 4, 4, OUTPUT, "output"); + PrintField(buf, 8, 4, ATOM, "property"); + PrintField(buf, 12, 4, ATOM, "type"); + PrintField(buf, 16, 1, CARD8, "format"); + PrintField(buf, 17, 1, CHANGEMODE, "mode"); + /* 2 bytes unused */ + printfield(buf, 20, 4, CARD32, "length of data"); + + type = ILong(&buf[12]); + unit = IByte(&buf[16]) / 8; + n = ILong(&buf[20]); + PrintPropertyValues(&buf[24], type, unit, n, "data"); +} + + +void +RandrDeleteOutputProperty(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrDeleteOutputProperty */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(3)); + PrintField(buf, 4, 4, OUTPUT, "output"); + PrintField(buf, 8, 4, ATOM, "property"); +} + + +void +RandrGetOutputProperty(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetOutputProperty */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(7)); + PrintField(buf, 4, 4, OUTPUT, "output"); + PrintField(buf, 8, 4, ATOM, "property"); + PrintField(buf, 12, 4, ATOMT, "type"); + PrintField(buf, 16, 4, CARD32, "long-offset"); + printfield(buf, 20, 4, CARD32, "long-length"); + PrintField(buf, 24, 1, BOOL, "delete"); + PrintField(buf, 25, 1, BOOL, "pending"); +} + + +void +RandrGetOutputPropertyReply(FD fd, const unsigned char *buf) +{ + uint32_t n; + short unit; + long type; + + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + if (Verbose < 1) + return; + PrintField(buf, 1, 1, CARD8, "format"); + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, DVALUE4((n + p) / 4), "reply length"); + PrintField(buf, 8, 4, ATOM, "type"); + PrintField(buf, 12, 4, CARD32, "bytes-after"); + printfield(buf, 16, 4, CARD32, "length of value"); + + unit = IByte(&buf[1]) / 8; + type = ILong(&buf[8]); + n = ILong(&buf[16]); + PrintPropertyValues(&buf[32], type, unit, n, "value"); +} + + +void +RandrCreateMode(FD fd, const unsigned char *buf) +{ + uint16_t n; + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrCreateMode */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, DVALUE2(12 + (n + p) / 4)); + PrintField(buf, 4, 4, WINDOW, "window"); + PrintField(buf, 8, 32, MODEINFO, "mode"); + n = IShort(&buf[34]); /* name length field of MODEINFO */ + PrintString8(&buf[40], n, "name"); +} + + +void +RandrCreateModeReply(FD fd, const unsigned char *buf) +{ + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, DVALUE4(0), "reply length"); + PrintField(buf, 8, 4, MODE, "mode"); +} + + +void +RandrDestroyMode(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrDestroyMode */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(2)); + PrintField(buf, 4, 4, MODE, "mode"); +} + + +void +RandrAddOutputMode(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrAddOutputMode */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(3)); + PrintField(buf, 4, 4, OUTPUT, "output"); + PrintField(buf, 8, 4, MODE, "mode"); +} + + +void +RandrDeleteOutputMode(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrDeleteOutputMode */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(3)); + PrintField(buf, 4, 4, OUTPUT, "output"); + PrintField(buf, 8, 4, MODE, "mode"); +} + + +void +RandrGetCrtcInfo(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetCrtcInfo */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(3)); + PrintField(buf, 4, 4, CRTC, "crtc"); + PrintField(buf, 8, 4, TIMESTAMP, "config-timestamp"); +} + + +void +RandrGetCrtcInfoReply(FD fd, const unsigned char *buf) +{ + uint16_t o, p; + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + PrintField(buf, 1, 1, CARD8, "status"); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, DVALUE4(o+p), "reply length"); + PrintField(buf, 8, 4, TIMESTAMP, "timestamp"); + PrintField(buf, 12, 2, INT16, "x"); + PrintField(buf, 14, 2, INT16, "y"); + PrintField(buf, 16, 2, CARD16, "width"); + PrintField(buf, 18, 2, CARD16, "height"); + PrintField(buf, 20, 4, MODE, "mode"); + PrintField(buf, 24, 2, SETofROTATION, "current rotation and reflection"); + PrintField(buf, 26, 2, SETofROTATION, "set of possible rotations"); + PrintField(buf, 28, 2, CARD16, "number of outputs"); + PrintField(buf, 30, 2, CARD16, "number of possible outputs"); + + o = IShort(&buf[28]); + p = IShort(&buf[30]); + PrintList(&buf[32], (long) o, OUTPUT, "outputs"); + PrintList(&buf[32 + (4 * o)], (long) p, OUTPUT, "possible outputs"); +} + + +void +RandrSetCrtcConfig(FD fd, const unsigned char *buf) +{ + uint16_t n; + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSetCrtcConfig */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, DVALUE2(7 + 2n)); + PrintField(buf, 4, 4, CRTC, "crtc"); + PrintField(buf, 8, 4, TIMESTAMP, "timestamp"); + PrintField(buf, 12, 4, TIMESTAMP, "config timestamp"); + PrintField(buf, 16, 2, INT16, "x"); + PrintField(buf, 18, 2, INT16, "y"); + PrintField(buf, 20, 4, MODE, "mode"); + PrintField(buf, 24, 2, SETofROTATION, "rotation/reflection"); + /* 26 = 2 bytes padding */ + n = IShort(&buf[2]) - 7; + PrintList(&buf[28], (long) n, OUTPUT, "outputs"); +} + + +void +RandrSetCrtcConfigReply(FD fd, const unsigned char *buf) +{ + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + PrintField(buf, 1, 1, CARD8, "status"); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, CONST4(0), "reply length"); + PrintField(buf, 8, 4, TIMESTAMP, "timestamp"); +} + + +void +RandrGetCrtcGammaSize(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetCrtcGammaSize */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(2)); + PrintField(buf, 4, 4, CRTC, "crtc"); +} + + +void +RandrGetCrtcGammaSizeReply(FD fd, const unsigned char *buf) +{ + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + PrintField(buf, 1, 1, CARD8, "status"); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, CONST4(0), "reply length"); + PrintField(buf, 8, 2, CARD16, "size"); +} + + +void +RandrGetCrtcGamma(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetCrtcGamma */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(2)); + PrintField(buf, 4, 4, CRTC, "crtc"); +} + + +void +RandrGetCrtcGammaReply(FD fd, const unsigned char *buf) +{ + uint16_t n; + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, DVALUE4(((6 * n) + p)/4), "reply length"); + PrintField(buf, 8, 2, CARD16, "size"); + n = IShort(&buf[8]); + PrintList(&buf[12], (long) n, CARD16, "red"); + PrintList(&buf[12 + (2 * n)], (long) n, CARD16, "green"); + PrintList(&buf[12 + (4 * n)], (long) n, CARD16, "blue"); +} + + +void +RandrSetCrtcGamma(FD fd, const unsigned char *buf) +{ + uint16_t n; + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSetCrtcGamma */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, DVALUE2(3+((6 * n) + p)/4)); + PrintField(buf, 4, 4, CRTC, "crtc"); + PrintField(buf, 8, 2, CARD16, "size"); + n = IShort(&buf[8]); + /* 10 = 2 bytes padding */ + PrintList(&buf[12], (long) n, CARD16, "red"); + PrintList(&buf[12 + (2 * n)], (long) n, CARD16, "green"); + PrintList(&buf[12 + (4 * n)], (long) n, CARD16, "blue"); +} + +void +RandrCrtcChangeNotifyEvent(const unsigned char *buf) +{ + PrintField(buf, 0, 1, EVENT, EVENTHEADER); /* RRNotify */ + PrintField(buf, 1, 1, RANDREVENT, "minor code"); /* RRCrtcChangeNotify */ + printfield(buf, 2, 2, CARD16, "sequence number"); + PrintField(buf, 4, 4, TIMESTAMP, "timestamp"); + PrintField(buf, 8, 4, WINDOW, "window"); + PrintField(buf, 12, 4, CRTC, "crtc"); + PrintField(buf, 16, 4, MODE, "mode"); + PrintField(buf, 20, 2, SETofROTATION, "rotation"); + /* 22 = 2 bytes padding */ + PrintField(buf, 24, 2, INT16, "x"); + PrintField(buf, 26, 2, INT16, "y"); + PrintField(buf, 28, 2, CARD16, "width"); + PrintField(buf, 30, 2, CARD16, "height"); +} + +void +RandrOutputChangeNotifyEvent(const unsigned char *buf) +{ + PrintField(buf, 0, 1, EVENT, EVENTHEADER); /* RRNotify */ + PrintField(buf, 1, 1, RANDREVENT, "minor code"); /* RROutputChangeNotify */ + printfield(buf, 2, 2, CARD16, "sequence number"); + PrintField(buf, 4, 4, TIMESTAMP, "timestamp"); + PrintField(buf, 8, 4, TIMESTAMP, "config-timestamp"); + PrintField(buf, 12, 4, WINDOW, "window"); + PrintField(buf, 16, 4, OUTPUT, "output"); + PrintField(buf, 20, 4, CRTC, "crtc"); + PrintField(buf, 24, 4, MODE, "mode"); + PrintField(buf, 28, 2, SETofROTATION, "rotation"); + PrintField(buf, 30, 1, CONNECTION, "connection"); + PrintField(buf, 31, 1, SUBPIXEL, "subpixel-order"); + +} + +void +RandrOutputPropertyNotifyEvent(const unsigned char *buf) +{ + PrintField(buf, 0, 1, EVENT, EVENTHEADER); /* RRNotify */ + PrintField(buf, 1, 1, RANDREVENT, "minor code"); /* RROutputPropertyNotify */ + printfield(buf, 2, 2, CARD16, "sequence number"); + PrintField(buf, 4, 4, WINDOW, "window"); + PrintField(buf, 8, 4, OUTPUT, "output"); + PrintField(buf, 12, 4, ATOM, "atom"); + PrintField(buf, 16, 4, TIMESTAMP, "time"); + PrintField(buf, 20, 1, PROPCHANGE, "state"); + /* 11 bytes unused */ +} + + +void +RandrOutputError(FD fd, const unsigned char *buf) +{ + printErrorWithValue(buf, OUTPUT, "bad output"); +} + +void +RandrCrtcError(FD fd, const unsigned char *buf) +{ + printErrorWithValue(buf, CRTC, "bad crtc"); +} + +void +RandrModeError(FD fd, const unsigned char *buf) +{ + printErrorWithValue(buf, MODE, "bad mode"); +} + + + +/* Randr 1.3 additions */ +void +RandrGetScreenResourcesCurrent(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetScreenResourcesCurrent */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(2)); + PrintField(buf, 4, 4, WINDOW, "window"); +} + + +void +RandrGetScreenResourcesCurrentReply(FD fd, const unsigned char *buf) +{ + /* Reply format is exact same as RandrGetScreenResources */ + RandrGetScreenResourcesReply(fd, buf); +} + + +void +RandrSetCrtcTransform(FD fd, const unsigned char *buf) +{ + uint16_t n; + uint32_t reqlen, p, v; + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSetCrtcTransform */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + reqlen = getreqlen(fd, buf); + printreqlen(buf, fd, DVALUE2(12+(n+p)/4+v)); + PrintField(buf, 4, 4, CRTC, "crtc"); + PrintField(buf, 8, 36, RENDERTRANSFORM, "transform"); + printfield(buf, 44, 2, CARD16, "filter name length"); + /* 2 bytes unused */ + n = IShort(&buf[44]); + PrintString8(&buf[48], n, "filter name"); + /* pad to p=pad(n) */ + p = pad(n); + v = reqlen - (12 + (p/4)); + PrintList(&buf[48 + p], (long) v, FIXED, "filter params"); +} + + +void +RandrGetCrtcTransform(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetCrtcTransform */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(2)); + PrintField(buf, 4, 4, CRTC, "crtc"); +} + + +void +RandrGetCrtcTransformReply(FD fd, const unsigned char *buf) +{ + uint16_t pn, pf, cn, cf; + + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, DVALUE4(16+(pn+pnp)/4+(cn+cnp)/4+pf+cf), "reply length"); + PrintField(buf, 8, 36, RENDERTRANSFORM, "pending transform"); + PrintField(buf, 44, 1, BOOL, "has transforms"); + /* 3 bytes unused */ + PrintField(buf, 48, 36, RENDERTRANSFORM, "current transform"); + + printfield(buf, 84, 2, CARD16, "pending filter name length"); /* pn */ + printfield(buf, 86, 2, CARD16, "pending filter num params"); /* pf */ + printfield(buf, 88, 2, CARD16, "current filter name length"); /* cn */ + printfield(buf, 90, 2, CARD16, "current filter num params"); /* cf */ + + pn = IShort(&buf[84]); + pf = IShort(&buf[86]); + cn = IShort(&buf[88]); + cf = IShort(&buf[90]); + + buf += 92; + + PrintString8(buf, pn, "pending filter name"); + buf += pad(pn); + PrintList(buf, pf, FIXED, "pending filter params"); + buf += 4 * pf; + + PrintString8(buf, cn, "current filter name"); + buf += pad(cn); + PrintList(buf, cf, FIXED, "current filter params"); +} + + +void +RandrGetPanning(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetPanning */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(2)); + PrintField(buf, 4, 4, CRTC, "crtc"); +} + + +void +RandrGetPanningReply(FD fd, const unsigned char *buf) +{ + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + PrintField(buf, 1, 1, CARD8, "status"); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, DVALUE4(1), "reply length"); + PrintField(buf, 8, 4, TIMESTAMP, "timestamp"); + PrintField(buf, 12, 2, CARD16, "left"); + PrintField(buf, 14, 2, CARD16, "top"); + PrintField(buf, 16, 2, CARD16, "width"); + PrintField(buf, 18, 2, CARD16, "height"); + PrintField(buf, 20, 2, CARD16, "track_left"); + PrintField(buf, 22, 2, CARD16, "track_top"); + PrintField(buf, 24, 2, CARD16, "track_width"); + PrintField(buf, 26, 2, CARD16, "track_height"); + PrintField(buf, 28, 2, INT16, "border_left"); + PrintField(buf, 30, 2, INT16, "border_top"); + PrintField(buf, 32, 2, INT16, "border_right"); + PrintField(buf, 34, 2, INT16, "border_bottom"); +} + + +void +RandrSetPanning(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSetPanning */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(9)); + PrintField(buf, 4, 4, CRTC, "crtc"); + PrintField(buf, 8, 4, TIMESTAMP, "timestamp"); + PrintField(buf, 12, 2, CARD16, "left"); + PrintField(buf, 14, 2, CARD16, "top"); + PrintField(buf, 16, 2, CARD16, "width"); + PrintField(buf, 18, 2, CARD16, "height"); + PrintField(buf, 20, 2, CARD16, "track_left"); + PrintField(buf, 22, 2, CARD16, "track_top"); + PrintField(buf, 24, 2, CARD16, "track_width"); + PrintField(buf, 26, 2, CARD16, "track_height"); + PrintField(buf, 28, 2, INT16, "border_left"); + PrintField(buf, 30, 2, INT16, "border_top"); + PrintField(buf, 32, 2, INT16, "border_right"); + PrintField(buf, 34, 2, INT16, "border_bottom"); +} + + +void +RandrSetPanningReply(FD fd, const unsigned char *buf) +{ + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + PrintField(buf, 1, 1, CARD8, "status"); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, CONST4(0), "reply length"); + PrintField(buf, 8, 4, TIMESTAMP, "new-timestamp"); + /* 20 bytes unused */ +} + + +void +RandrSetOutputPrimary(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSetOutputPrimary */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(3)); + PrintField(buf, 4, 4, WINDOW, "window"); + PrintField(buf, 8, 4, OUTPUT, "output"); +} + + +void +RandrGetOutputPrimary(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetOutputPrimary */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(2)); + PrintField(buf, 4, 4, WINDOW, "window"); +} + + +void +RandrGetOutputPrimaryReply(FD fd, const unsigned char *buf) +{ + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, CONST4(0), "reply length"); + PrintField(buf, 8, 4, OUTPUT, "output"); +} + + + +/* Randr 1.4 additions */ +void +RandrGetProviders(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetProviders */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(2)); + PrintField(buf, 4, 4, WINDOW, "window"); +} + + +void +RandrGetProvidersReply(FD fd, const unsigned char *buf) +{ + uint16_t p; + + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, DVALUE4(p), "reply length"); + PrintField(buf, 8, 4, TIMESTAMP, "timestamp"); + PrintField(buf, 12, 2, CARD16, "number of providers"); + + p = IShort(&buf[12]); + PrintList(&buf[32], p, PROVIDER, "providers"); +} + + +void +RandrGetProviderInfo(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetProviderInfo */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(3)); + PrintField(buf, 4, 4, PROVIDER, "provider"); + PrintField(buf, 8, 4, TIMESTAMP, "config-timestamp"); +} + + +void +RandrGetProviderInfoReply(FD fd, const unsigned char *buf) +{ + uint16_t c, o, a, n; + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + PrintField(buf, 1, 1, CARD8, "status"); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, DVALUE4(1+c+o+(a*2)+(n+p)/4), "reply length"); + PrintField(buf, 8, 4, TIMESTAMP, "timestamp"); + PrintField(buf, 12, 4, SETofPROVIDER_CAPS, "capabilities"); + PrintField(buf, 16, 2, CARD16, "number of crtcs"); /* c */ + PrintField(buf, 18, 2, CARD16, "number of outputs"); /* o */ + PrintField(buf, 20, 2, CARD16, "number of associated providers"); /* a */ + PrintField(buf, 22, 2, CARD16, "length of name"); /* n */ + /* 8 bytes unused */ + c = IShort(&buf[16]); + o = IShort(&buf[18]); + a = IShort(&buf[20]); + n = IShort(&buf[22]); + + buf += 32; + PrintList(buf, c, CRTC, "crtcs"); + buf += c * 4; + PrintList(buf, o, OUTPUT, "outputs"); + buf += o * 4; + PrintList(buf, a, PROVIDER, "associated providers"); + buf += a * 4; + PrintList(buf, a, SETofPROVIDER_CAPS, "associated provider capability"); + buf += a * 4; + PrintString8(buf, n, "name"); +} + + +void +RandrSetProviderOffloadSink(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSetProviderOffloadSink */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(4)); + PrintField(buf, 4, 4, PROVIDER, "provider"); + PrintField(buf, 8, 4, PROVIDER, "offload sink provider"); + PrintField(buf, 12, 4, TIMESTAMP, "timestamp"); +} + + +void +RandrSetProviderOutputSource(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSetProviderOutputSource */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + printreqlen(buf, fd, CONST2(2)); + PrintField(buf, 4, 4, PROVIDER, "provider"); + PrintField(buf, 8, 4, PROVIDER, "output source provider"); + PrintField(buf, 12, 4, TIMESTAMP, "timestamp"); +} + + +void +RandrListProviderProperties(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrListProviderProperties */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(2)); + PrintField(buf, 4, 4, PROVIDER, "provider"); +} + + +void +RandrListProviderPropertiesReply(FD fd, const unsigned char *buf) +{ + uint16_t n; + + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, DVALUE4(0), "reply length"); + printfield(buf, 8, 2, DVALUE2(n), "number of atoms"); + /* 22 bytes unused */ + n = IShort(&buf[8]); + PrintList(&buf[32], (long) n, ATOM, "atoms"); +} + + +void +RandrQueryProviderProperty(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrQueryProviderProperty */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(3)); + PrintField(buf, 4, 4, PROVIDER, "provider"); + PrintField(buf, 8, 4, ATOM, "property"); +} + + +void +RandrQueryProviderPropertyReply(FD fd, const unsigned char *buf) +{ + uint32_t n; + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + if (Verbose < 1) + return; + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, DVALUE4(n), "reply length"); + PrintField(buf, 8, 1, BOOL, "pending"); + PrintField(buf, 9, 1, BOOL, "range"); + PrintField(buf, 10, 1, BOOL, "immutable"); + /* 21 bytes unused */ + n = ILong(&buf[4]); + PrintList(&buf[32], n, INT32, "valid values"); +} + + +void +RandrConfigureProviderProperty(FD fd, const unsigned char *buf) +{ + uint32_t reqlen, n; + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrConfigureProviderProperty */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + reqlen = getreqlen(fd, buf); + printreqlen(buf, fd, DVALUE2(4+n)); + PrintField(buf, 4, 4, PROVIDER, "provider"); + PrintField(buf, 8, 4, ATOM, "property"); + PrintField(buf, 12, 1, BOOL, "pending"); + PrintField(buf, 13, 1, BOOL, "range"); + /* 2 bytes unused */ + n = reqlen - 4; + PrintList(&buf[16], n, INT32, "valid-values"); +} + + +void +RandrChangeProviderProperty(FD fd, const unsigned char *buf) +{ + uint32_t n; + short unit; + long type; + + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrChangeProviderProperty */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, DVALUE2(6 + (n + p) / 4)); + PrintField(buf, 4, 4, PROVIDER, "provider"); + PrintField(buf, 8, 4, ATOM, "property"); + PrintField(buf, 12, 4, ATOM, "type"); + PrintField(buf, 16, 1, CARD8, "format"); + PrintField(buf, 17, 1, CHANGEMODE, "mode"); + /* 2 bytes unused */ + printfield(buf, 20, 4, CARD32, "length of data"); + + type = ILong(&buf[12]); + unit = IByte(&buf[16]) / 8; + n = ILong(&buf[20]); + PrintPropertyValues(&buf[24], type, unit, n, "data"); +} + + +void +RandrDeleteProviderProperty(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrDeleteProviderProperty */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(3)); + PrintField(buf, 4, 4, PROVIDER, "provider"); + PrintField(buf, 8, 4, ATOM, "property"); +} + + +void +RandrGetProviderProperty(FD fd, const unsigned char *buf) +{ + PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */ + PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetProviderProperty */ + if (Verbose < 1) + return; + if (Verbose > 1) + PrintField(SBf, 0, 4, CARD32, "sequence number"); + + printreqlen(buf, fd, CONST2(7)); + PrintField(buf, 4, 4, PROVIDER, "provider"); + PrintField(buf, 8, 4, ATOM, "property"); + PrintField(buf, 12, 4, ATOMT, "type"); + PrintField(buf, 16, 4, CARD32, "long-offset"); + printfield(buf, 20, 4, CARD32, "long-length"); + PrintField(buf, 24, 1, BOOL, "delete"); + PrintField(buf, 25, 1, BOOL, "pending"); +} + + +void +RandrGetProviderPropertyReply(FD fd, const unsigned char *buf) +{ + uint32_t n; + short unit; + long type; + + PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */ + PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER); + if (Verbose < 1) + return; + PrintField(buf, 1, 1, CARD8, "format"); + printfield(buf, 2, 2, CARD16, "sequence number"); + printfield(buf, 4, 4, DVALUE4((n + p) / 4), "reply length"); + PrintField(buf, 8, 4, ATOM, "type"); + PrintField(buf, 12, 4, CARD32, "bytes-after"); + printfield(buf, 16, 4, CARD32, "length of value"); + + unit = IByte(&buf[1]) / 8; + type = ILong(&buf[8]); + n = ILong(&buf[16]); + PrintPropertyValues(&buf[32], type, unit, n, "value"); +} + + +void +RandrProviderChangeNotifyEvent(const unsigned char *buf) +{ + PrintField(buf, 0, 1, EVENT, EVENTHEADER); /* RRNotify */ + PrintField(buf, 1, 1, RANDREVENT, "minor code"); /* RRProviderChangeNotify */ + printfield(buf, 2, 2, CARD16, "sequence number"); + PrintField(buf, 4, 4, TIMESTAMP, "timestamp"); + PrintField(buf, 8, 4, WINDOW, "window"); + PrintField(buf, 12, 4, PROVIDER, "provider"); + /* 16 bytes unused */ +} + + +void +RandrProviderPropertyNotifyEvent(const unsigned char *buf) +{ + PrintField(buf, 0, 1, EVENT, EVENTHEADER); /* RRNotify */ + PrintField(buf, 1, 1, RANDREVENT, "minor code"); /* RRProviderPropertyNotify */ + printfield(buf, 2, 2, CARD16, "sequence number"); + PrintField(buf, 4, 4, WINDOW, "window"); + PrintField(buf, 8, 4, PROVIDER, "provider"); + PrintField(buf, 12, 4, ATOM, "atom"); + PrintField(buf, 16, 4, TIMESTAMP, "time"); + PrintField(buf, 20, 1, PROPCHANGE, "state"); + /* 11 bytes unused */ +} + + +void +RandrResourceChangeNotifyEvent(const unsigned char *buf) +{ + PrintField(buf, 0, 1, EVENT, EVENTHEADER); /* RRNotify */ + PrintField(buf, 1, 1, RANDREVENT, "minor code"); /* RRResourceChangeNotify */ + printfield(buf, 2, 2, CARD16, "sequence number"); + PrintField(buf, 4, 4, TIMESTAMP, "timestamp"); + PrintField(buf, 8, 4, WINDOW, "window"); + /* 20 bytes unused */ +} + + +void +RandrProviderError(FD fd, const unsigned char *buf) +{ + printErrorWithValue(buf, PROVIDER, "bad provider"); } -- cgit v1.2.1