summaryrefslogtreecommitdiff
path: root/print_randr.c
diff options
context:
space:
mode:
authorAlan Coopersmith <alan.coopersmith@oracle.com>2012-08-28 23:35:37 -0700
committerAlan Coopersmith <alan.coopersmith@oracle.com>2012-10-02 22:16:09 -0700
commitb4de85b1b63d03322c2c831002bd5aa6418347ba (patch)
treecfb095b5ffeb0a333a0b8e7698794c77b3858c6a /print_randr.c
parent95a436f7efd7061a15e3be533c56e573aac2db92 (diff)
downloadxscope-b4de85b1b63d03322c2c831002bd5aa6418347ba.tar.gz
Update RANDR support from 0.x to include 1.0 - 1.4
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Diffstat (limited to 'print_randr.c')
-rw-r--r--print_randr.c1477
1 files changed, 1464 insertions, 13 deletions
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");
}