1 /*
2  * Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc.
3  * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the next
13  * paragraph) shall be included in all copies or substantial portions of the
14  * Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  */
24 
25 #include "scope.h"
26 #include "x11.h"
27 #include "randrscope.h"
28 
29 void
RandrQueryVersion(FD fd,const unsigned char * buf)30 RandrQueryVersion(FD fd, const unsigned char *buf)
31 {
32     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
33     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSwitch */
34     if (Verbose < 1)
35         return;
36     if (Verbose > 1)
37         PrintField(SBf, 0, 4, CARD32, "sequence number");
38 
39     printreqlen(buf, fd, CONST2(3));
40     PrintField(buf, 4, 4, CARD32, "major-version");
41     PrintField(buf, 8, 4, CARD32, "minor-version");
42 
43     /*
44       Todo, maybe: record major-version for distinguishing which version of
45       original set of requests/replies client is using, version 0.x or 1.x.
46       Alternatively: purge all support for version 0.x.
47     */
48 }
49 
50 void
RandrQueryVersionReply(FD fd,const unsigned char * buf)51 RandrQueryVersionReply(FD fd, const unsigned char *buf)
52 {
53     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
54     PrintField(RBf, 1, 1, RANDRREPLY,
55                RANDRREPLYHEADER); /* RandrQueryVersion reply */
56     if (Verbose < 1)
57         return;
58     printfield(buf, 2, 2, CARD16, "sequence number");
59     printfield(buf, 4, 4, DVALUE4(0), "reply length");
60     PrintField(buf, 8, 4, CARD32, "major-version");
61     PrintField(buf, 12, 4, CARD32, "minor-version");
62 }
63 
64 /* RandrOld* interfaces are for RandR 0.x only - the protocol changed
65    incompatibily in RandR 1.0, and the RandR 1.0 versions come later. */
66 void
RandrOldGetScreenInfo(FD fd,const unsigned char * buf)67 RandrOldGetScreenInfo(FD fd, const unsigned char *buf)
68 {
69     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
70     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSwitch */
71     if (Verbose < 1)
72         return;
73     if (Verbose > 1)
74         PrintField(SBf, 0, 4, CARD32, "sequence number");
75 
76     printreqlen(buf, fd, CONST2(2));
77     PrintField(buf, 4, 4, WINDOW, "window");
78 }
79 
80 void
RandrOldGetScreenInfoReply(FD fd,const unsigned char * buf)81 RandrOldGetScreenInfoReply(FD fd, const unsigned char *buf)
82 {
83     unsigned short nsize;
84     unsigned short nvg;
85     unsigned short ngvg;
86 
87     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
88     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
89     if (Verbose < 1)
90         return;
91     PrintField(buf, 1, 1, CARD8, "set-of-rotations");
92     printfield(buf, 2, 2, CARD16, "sequence number");
93     printfield(buf, 4, 4, DVALUE4(0), "reply length");
94     PrintField(buf, 8, 4, WINDOW, "root");
95     PrintField(buf, 12, 4, TIMESTAMP, "timestamp");
96     PrintField(buf, 16, 4, TIMESTAMP, "config-timestamp");
97     PrintField(buf, 20, 2, CARD16, "num-visual-groups");
98     nvg = IShort(&buf[20]);
99     PrintField(buf, 22, 2, CARD16, "num-groups-of-visual-groups");
100     ngvg = IShort(&buf[22]);
101     PrintField(buf, 24, 2, CARD16, "num-sizes");
102     nsize = IShort(&buf[24]);
103     PrintField(buf, 26, 2, CARD16, "size-id");
104     PrintField(buf, 28, 2, CARD16, "visual-group-id");
105     PrintField(buf, 30, 2, CARD16, "rotation");
106 }
107 
108 void
RandrOldSetScreenConfig(FD fd,const unsigned char * buf)109 RandrOldSetScreenConfig(FD fd, const unsigned char *buf)
110 {
111     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
112     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSwitch */
113     if (Verbose < 1)
114         return;
115     if (Verbose > 1)
116         PrintField(SBf, 0, 4, CARD32, "sequence number");
117 
118     printreqlen(buf, fd, CONST2(2));
119     PrintField(buf, 4, 4, DRAWABLE, "drawable");
120     PrintField(buf, 8, 4, TIMESTAMP, "timestamp");
121     PrintField(buf, 12, 4, TIMESTAMP, "config-timestamp");
122     PrintField(buf, 16, 2, CARD16, "size-id");
123     PrintField(buf, 18, 2, CARD16, "rotation");
124     PrintField(buf, 20, 2, CARD16, "visual-group-id");
125 }
126 
127 void
RandrOldSetScreenConfigReply(FD fd,const unsigned char * buf)128 RandrOldSetScreenConfigReply(FD fd, const unsigned char *buf)
129 {
130     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
131     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
132     PrintField(buf, 1, 1, BOOL, "success"); /* RandrQueryVersion reply */
133     if (Verbose < 1)
134         return;
135     printfield(buf, 2, 2, CARD16, "sequence number");
136     printfield(buf, 4, 4, DVALUE4(0), "reply length");
137     PrintField(buf, 8, 4, TIMESTAMP, "new-timestamp");
138     PrintField(buf, 12, 4, TIMESTAMP, "new-config-timestamp");
139     PrintField(buf, 16, 4, WINDOW, "root");
140 }
141 
142 void
RandrOldScreenChangeSelectInput(FD fd,const unsigned char * buf)143 RandrOldScreenChangeSelectInput(FD fd, const unsigned char *buf)
144 {
145     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
146     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSwitch */
147     if (Verbose < 1)
148         return;
149     if (Verbose > 1)
150         PrintField(SBf, 0, 4, CARD32, "sequence number");
151 
152     printreqlen(buf, fd, CONST2(2));
153     PrintField(buf, 4, 4, WINDOW, "window");
154     PrintField(buf, 8, 1, BOOL, "enable");
155 }
156 
157 static void
RandrOldScreenSizes(const unsigned char * buf)158 RandrOldScreenSizes(const unsigned char *buf)
159 {
160     PrintField(buf, 0, 2, CARD16, "width-in-pixels");
161     PrintField(buf, 2, 2, CARD16, "height-in-pixels");
162     PrintField(buf, 4, 2, CARD16, "width-in-millimeters");
163     PrintField(buf, 6, 2, CARD16, "height-in-millimeters");
164     PrintField(buf, 8, 2, CARD16, "visual-group");
165 }
166 
167 void
RandrOldScreenChangeNotifyEvent(const unsigned char * buf)168 RandrOldScreenChangeNotifyEvent(const unsigned char *buf)
169 {
170     PrintField(buf, 0, 1, EVENT, EVENTHEADER); /* RROldScreenChangeNotify */
171     if (Verbose < 1)
172         return;
173     PrintField(buf, 1, 1, BOOL, "resident");
174     printfield(buf, 2, 2, CARD16, "sequence number");
175     PrintField(buf, 4, 4, TIMESTAMP, "timestamp");
176     PrintField(buf, 8, 4, TIMESTAMP, "config-timestamp");
177     PrintField(buf, 12, 4, WINDOW, "root");
178     PrintField(buf, 16, 2, CARD16, "size id");
179     PrintField(buf, 18, 2, CARD16, "rotation");
180     RandrOldScreenSizes(buf + 20);
181 }
182 
183 /* RandR 1.0 starts here */
184 int
PrintSCREENSIZE(const unsigned char * buf)185 PrintSCREENSIZE(const unsigned char *buf)
186 {
187     PrintField(buf, 0, 2, CARD16, "width-in-pixels");
188     PrintField(buf, 2, 2, CARD16, "height-in-pixels");
189     PrintField(buf, 4, 2, CARD16, "width-in-millimeters");
190     PrintField(buf, 6, 2, CARD16, "height-in-millimeters");
191     return 8;
192 }
193 
194 void
RandrSetScreenConfig(FD fd,const unsigned char * buf)195 RandrSetScreenConfig(FD fd, const unsigned char *buf)
196 {
197     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
198     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSetScreenConfig */
199     if (Verbose < 1)
200         return;
201     if (Verbose > 1)
202         PrintField(SBf, 0, 4, CARD32, "sequence number");
203 
204     printreqlen(buf, fd, CONST2(6));
205     PrintField(buf, 4, 4, DRAWABLE, "drawable");
206     PrintField(buf, 8, 4, TIMESTAMP, "timestamp");
207     PrintField(buf, 12, 4, TIMESTAMP, "config-timestamp");
208     PrintField(buf, 16, 2, CARD16, "size-id");
209     PrintField(buf, 18, 2, CARD16, "rotation");
210     PrintField(buf, 20, 2, CARD16, "rate");
211 }
212 
213 
214 void
RandrSetScreenConfigReply(FD fd,const unsigned char * buf)215 RandrSetScreenConfigReply(FD fd, const unsigned char *buf)
216 {
217     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
218     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
219     PrintField(buf, 1, 1, CARD8, "status");
220     if (Verbose < 1)
221         return;
222     printfield(buf, 2, 2, CARD16, "sequence number");
223     printfield(buf, 4, 4, DVALUE4(0), "reply length");
224     PrintField(buf, 8, 4, TIMESTAMP, "new-timestamp");
225     PrintField(buf, 12, 4, TIMESTAMP, "new-config-timestamp");
226     PrintField(buf, 16, 4, WINDOW, "root");
227     PrintField(buf, 20, 2, SUBPIXEL, "subpixel-order");
228 }
229 
230 
231 void
RandrSelectInput(FD fd,const unsigned char * buf)232 RandrSelectInput(FD fd, const unsigned char *buf)
233 {
234     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
235     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSelectInput */
236     if (Verbose < 1)
237         return;
238     if (Verbose > 1)
239         PrintField(SBf, 0, 4, CARD32, "sequence number");
240 
241     printreqlen(buf, fd, CONST2(3));
242     PrintField(buf, 4, 4, WINDOW, "window");
243     PrintField(buf, 8, 2, SETofRREVENT, "select-mask");
244 }
245 
246 
247 void
RandrGetScreenInfo(FD fd,const unsigned char * buf)248 RandrGetScreenInfo(FD fd, const unsigned char *buf)
249 {
250     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
251     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetScreenInfo */
252     if (Verbose < 1)
253         return;
254     if (Verbose > 1)
255         PrintField(SBf, 0, 4, CARD32, "sequence number");
256 
257     printreqlen(buf, fd, CONST2(2));
258     PrintField(buf, 4, 4, WINDOW, "window");
259 }
260 
261 void
RandrGetScreenInfoReply(FD fd,const unsigned char * buf)262 RandrGetScreenInfoReply(FD fd, const unsigned char *buf)
263 {
264     uint16_t s, r;
265     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
266     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
267     PrintField(buf, 1, 1, SETofROTATION, "rotations");
268     if (Verbose < 1)
269         return;
270     printfield(buf, 2, 2, CARD16, "sequence number");
271     printfield(buf, 4, 4, DVALUE4(0), "reply length");
272     PrintField(buf, 8, 4, WINDOW, "root");
273     PrintField(buf, 12, 4, TIMESTAMP, "new-timestamp");
274     PrintField(buf, 16, 4, TIMESTAMP, "new-config-timestamp");
275     PrintField(buf, 20, 2, CARD16, "num-sizes");
276     s = IShort(&buf[20]);
277     PrintField(buf, 22, 2, CARD16, "size-id");
278     PrintField(buf, 24, 2, SETofROTATION, "rotation");
279     PrintField(buf, 26, 2, CARD16, "rate");
280     printfield(buf, 28, 2, CARD16, "rates-length");
281 
282     buf += 32; /* screen sizes start 32 bytes from head of reply */
283     PrintList(buf, s, SCREENSIZE, "sizes");
284     buf += s * 8;
285 
286     r = IShort(buf);
287     PrintField(buf, 0, 2, CARD16, "num-rates");
288     buf += 2;
289     PrintList(buf, r, CARD16, "refresh-rates");
290 }
291 
292 void
RandrScreenChangeNotifyEvent(const unsigned char * buf)293 RandrScreenChangeNotifyEvent(const unsigned char *buf)
294 {
295     PrintField(buf, 0, 1, EVENT, EVENTHEADER); /* RRScreenChangeNotify */
296     if (Verbose < 1)
297         return;
298     PrintField(buf, 1, 1, CARD8, "rotation");
299     printfield(buf, 2, 2, CARD16, "sequence number");
300     PrintField(buf, 4, 4, TIMESTAMP, "timestamp");
301     PrintField(buf, 8, 4, TIMESTAMP, "config-timestamp");
302     PrintField(buf, 12, 4, WINDOW, "root");
303     PrintField(buf, 16, 4, WINDOW, "window");
304     PrintField(buf, 20, 2, CARD16, "size id");
305     PrintField(buf, 22, 2, SUBPIXEL, "subpixel-order");
306     PrintSCREENSIZE(buf + 24);
307 }
308 
309 /* Randr 1.2 additions */
310 int
PrintMODEINFO(const unsigned char * buf)311 PrintMODEINFO(const unsigned char *buf)
312 {
313     PrintField(buf, 0, 4, CARD32, "id");
314     PrintField(buf, 4, 2, CARD16, "width-in-pixels");
315     PrintField(buf, 6, 2, CARD16, "height-in-pixels");
316     PrintField(buf, 8, 4, CARD32, "dot clock");
317     PrintField(buf, 12, 2, CARD16, "h sync start");
318     PrintField(buf, 14, 2, CARD16, "h sync end");
319     PrintField(buf, 16, 2, CARD16, "h total");
320     PrintField(buf, 18, 2, CARD16, "h skew");
321     PrintField(buf, 20, 2, CARD16, "v sync start");
322     PrintField(buf, 22, 2, CARD16, "v sync end");
323     PrintField(buf, 24, 2, CARD16, "v total");
324     PrintField(buf, 26, 2, CARD16, "name length");
325     PrintField(buf, 28, 4, SETofMODEFLAG, "mode flags");
326     return 32;
327 }
328 
PrintMODE(const unsigned char * buf)329 int PrintMODE(const unsigned char *buf)
330 {
331     /* print a MODE -- CARD32  plus 0 = None */
332     long n = ILong(buf);
333 
334     if (n == 0)
335         fprintf(stdout, "None");
336     else
337         fprintf(stdout, "MODE %08lx", n);
338     return (4);
339 }
340 
341 int
PrintCRTC(const unsigned char * buf)342 PrintCRTC(const unsigned char *buf)
343 {
344     /* print a CRTC -- CARD32  plus 0 = None */
345     long n = ILong(buf);
346 
347     if (n == 0)
348         fprintf(stdout, "None");
349     else
350         fprintf(stdout, "CRTC %08lx", n);
351     return (4);
352 }
353 
354 int
PrintOUTPUT(const unsigned char * buf)355 PrintOUTPUT(const unsigned char *buf)
356 {
357     /* print an OUTPUT -- CARD32  plus 0 = None */
358     long n = ILong(buf);
359 
360     if (n == 0)
361         fprintf(stdout, "None");
362     else
363         fprintf(stdout, "OUTP %08lx", n);
364     return (4);
365 }
366 
367 
368 void
RandrGetScreenSizeRange(FD fd,const unsigned char * buf)369 RandrGetScreenSizeRange(FD fd, const unsigned char *buf)
370 {
371     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
372     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetScreenSizeRange */
373     if (Verbose < 1)
374         return;
375     if (Verbose > 1)
376         PrintField(SBf, 0, 4, CARD32, "sequence number");
377 
378     printreqlen(buf, fd, CONST2(2));
379     PrintField(buf, 4, 4, WINDOW, "window");
380 }
381 
382 
383 void
RandrGetScreenSizeRangeReply(FD fd,const unsigned char * buf)384 RandrGetScreenSizeRangeReply(FD fd, const unsigned char *buf)
385 {
386     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
387     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
388     if (Verbose < 1)
389         return;
390     printfield(buf, 2, 2, CARD16, "sequence number");
391     printfield(buf, 4, 4, DVALUE4(0), "reply length");
392     PrintField(buf, 8, 2, CARD16, "min-width");
393     PrintField(buf, 10, 2, CARD16, "min-height");
394     PrintField(buf, 12, 2, CARD16, "max-width");
395     PrintField(buf, 24, 2, CARD16, "max-height");
396 }
397 
398 
399 void
RandrSetScreenSize(FD fd,const unsigned char * buf)400 RandrSetScreenSize(FD fd, const unsigned char *buf)
401 {
402     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
403     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSetScreenSize */
404     if (Verbose < 1)
405         return;
406     if (Verbose > 1)
407         PrintField(SBf, 0, 4, CARD32, "sequence number");
408 
409     printreqlen(buf, fd, CONST2(5));
410     PrintField(buf, 4, 4, WINDOW, "window");
411     PrintSCREENSIZE(buf + 8);
412 }
413 
414 
415 void
RandrGetScreenResources(FD fd,const unsigned char * buf)416 RandrGetScreenResources(FD fd, const unsigned char *buf)
417 {
418     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
419     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetScreenResources */
420     if (Verbose < 1)
421         return;
422     if (Verbose > 1)
423         PrintField(SBf, 0, 4, CARD32, "sequence number");
424 
425     printreqlen(buf, fd, CONST2(2));
426     PrintField(buf, 4, 4, WINDOW, "window");
427 }
428 
429 
430 void
RandrGetScreenResourcesReply(FD fd,const unsigned char * buf)431 RandrGetScreenResourcesReply(FD fd, const unsigned char *buf)
432 {
433     uint16_t c, o, m, b;
434     const unsigned char *nl, *end;
435     int i;
436 
437     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
438     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
439     if (Verbose < 1)
440         return;
441     printfield(buf, 2, 2, CARD16, "sequence number");
442     printfield(buf, 4, 4, DVALUE4(c+o+8m+(b+p)/4), "reply length");
443     PrintField(buf, 8, 4, TIMESTAMP, "timestamp");
444     PrintField(buf, 12, 4, TIMESTAMP, "config-timestamp");
445     printfield(buf, 16, 2, CARD16, "num-crtcs");	/* c */
446     printfield(buf, 18, 2, CARD16, "num-outputs");	/* o */
447     printfield(buf, 20, 2, CARD16, "num-modes");	/* m */
448     printfield(buf, 22, 2, CARD16, "num-bytes-names");	/* b */
449     /* 8 bytes unused */
450     c = IShort(&buf[16]);
451     o = IShort(&buf[18]);
452     m = IShort(&buf[20]);
453     b = IShort(&buf[22]);
454 
455     buf += 32;
456     PrintList(buf, c, CRTC, "crtcs");
457     buf += c * 4;
458     PrintList(buf, o, OUTPUT, "outputs");
459     buf += o * 4;
460     nl = buf + 26; /* offset of name length field in first modeinfo */
461     PrintList(buf, m, MODEINFO, "modeinfos");
462     buf += m * 32;
463     end = buf + b;
464     for (i = 0 ; i < m; i++, nl += 32) {
465         uint16_t len = IShort(nl);
466         if ((buf + len) > end) {
467             fprintf(stdout, "**INVALID NAME LENGTH**");
468             break;
469         }
470         buf += PrintString8(buf, len, "mode name");
471     }
472 }
473 
474 
475 void
RandrGetOutputInfo(FD fd,const unsigned char * buf)476 RandrGetOutputInfo(FD fd, const unsigned char *buf)
477 {
478     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
479     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetOutputInfo */
480     if (Verbose < 1)
481         return;
482     if (Verbose > 1)
483         PrintField(SBf, 0, 4, CARD32, "sequence number");
484 
485     printreqlen(buf, fd, CONST2(3));
486     PrintField(buf, 4, 4, OUTPUT, "output");
487     PrintField(buf, 8, 4, TIMESTAMP, "config-timestamp");
488 }
489 
490 
491 void
RandrGetOutputInfoReply(FD fd,const unsigned char * buf)492 RandrGetOutputInfoReply(FD fd, const unsigned char *buf)
493 {
494     uint16_t c, m, p, o, n;
495     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
496     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
497     PrintField(buf, 1, 1, CARD8, "status");
498     if (Verbose < 1)
499         return;
500     printfield(buf, 2, 2, CARD16, "sequence number");
501     printfield(buf, 4, 4, DVALUE4(1+c+m+(n+p)/4), "reply length");
502     PrintField(buf, 8, 4, TIMESTAMP, "timestamp");
503     PrintField(buf, 12, 4, CRTC, "crtc");
504     PrintField(buf, 16, 4, CARD32, "width-in-millimeters");
505     PrintField(buf, 20, 4, CARD32, "height-in-millimeters");
506     PrintField(buf, 24, 1, CARD8, "connection");
507     PrintField(buf, 25, 1, SUBPIXEL, "subpixel-order");
508     printfield(buf, 26, 2, CARD16, "num-crtcs");
509     printfield(buf, 28, 2, CARD16, "num-modes");
510     printfield(buf, 30, 2, CARD16, "num-preferred");
511     printfield(buf, 32, 2, CARD16, "num-clones");
512     printfield(buf, 34, 2, CARD16, "name-length");
513     c = IShort(&buf[26]);
514     m = IShort(&buf[28]);
515     p = IShort(&buf[30]);
516     o = IShort(&buf[32]);
517     n = IShort(&buf[34]);
518 
519     buf += 36;
520     PrintList(buf, c, CRTC, "crtcs");
521     buf += c * 4;
522     PrintList(buf, p, MODE, "preferred-modes");
523     buf += p * 4;
524     PrintList(buf, m - p, MODE, "other-modes");
525     buf += (m - p) * 4;
526     PrintList(buf, o, OUTPUT, "clones");
527     buf += o * 4;
528     PrintString8(buf, n, "name");
529 }
530 
531 
532 void
RandrListOutputProperties(FD fd,const unsigned char * buf)533 RandrListOutputProperties(FD fd, const unsigned char *buf)
534 {
535     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
536     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrListOutputProperties */
537     if (Verbose < 1)
538         return;
539     if (Verbose > 1)
540         PrintField(SBf, 0, 4, CARD32, "sequence number");
541 
542     printreqlen(buf, fd, CONST2(2));
543     PrintField(buf, 4, 4, OUTPUT, "output");
544 }
545 
546 
547 void
RandrListOutputPropertiesReply(FD fd,const unsigned char * buf)548 RandrListOutputPropertiesReply(FD fd, const unsigned char *buf)
549 {
550     uint16_t n;
551 
552     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
553     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
554     if (Verbose < 1)
555         return;
556     printfield(buf, 2, 2, CARD16, "sequence number");
557     printfield(buf, 4, 4, DVALUE4(0), "reply length");
558     printfield(buf, 8, 2, DVALUE2(n), "number of atoms");
559     n = IShort(&buf[8]);
560     PrintList(&buf[32], (long) n, ATOM, "atoms");
561 }
562 
563 
564 void
RandrQueryOutputProperty(FD fd,const unsigned char * buf)565 RandrQueryOutputProperty(FD fd, const unsigned char *buf)
566 {
567     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
568     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrQueryOutputProperty */
569     if (Verbose < 1)
570         return;
571     if (Verbose > 1)
572         PrintField(SBf, 0, 4, CARD32, "sequence number");
573 
574     printreqlen(buf, fd, CONST2(3));
575     PrintField(buf, 4, 4, OUTPUT, "output");
576     PrintField(buf, 8, 4, ATOM, "property");
577 }
578 
579 
580 void
RandrQueryOutputPropertyReply(FD fd,const unsigned char * buf)581 RandrQueryOutputPropertyReply(FD fd, const unsigned char *buf)
582 {
583     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
584     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
585     if (Verbose < 1)
586         return;
587     printfield(buf, 2, 2, CARD16, "sequence number");
588     printfield(buf, 4, 4, DVALUE4(n), "reply length");
589     PrintField(buf, 8, 1, BOOL, "pending");
590     printfield(buf, 9, 1, BOOL, "range");
591     PrintField(buf, 10, 1, BOOL, "immutable");
592 
593     if (IBool(&buf[9]) && (Verbose <= 1)) {     /* range of min-max values */
594         PrintField(buf, 32, 4, INT32, "minimum value");
595         PrintField(buf, 36, 4, INT32, "maximum value");
596     } else {                                    /* list of values */
597         uint32_t n = ILong(&buf[4]);
598         PrintList(&buf[32], n, INT32, "accepted values");
599     }
600 }
601 
602 
603 void
RandrConfigureOutputProperty(FD fd,const unsigned char * buf)604 RandrConfigureOutputProperty(FD fd, const unsigned char *buf)
605 {
606     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
607     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrConfigureOutputProperty */
608     if (Verbose < 1)
609         return;
610     if (Verbose > 1)
611         PrintField(SBf, 0, 4, CARD32, "sequence number");
612 
613     printreqlen(buf, fd, DVALUE2(4 + n));
614     PrintField(buf, 4, 4, OUTPUT, "output");
615     PrintField(buf, 8, 4, ATOM, "property");
616     PrintField(buf, 12, 1, BOOL, "pending");
617     printfield(buf, 13, 1, BOOL, "range");
618 
619     if (IBool(&buf[12]) && (Verbose <= 1)) {     /* range of min-max values */
620         PrintField(buf, 16, 4, INT32, "minimum value");
621         PrintField(buf, 20, 4, INT32, "maximum value");
622     } else {                                    /* list of values */
623         uint32_t n = ILong(&buf[4]) - 4;
624         PrintList(&buf[16], n, INT32, "accepted values");
625     }
626 }
627 
628 
629 void
RandrChangeOutputProperty(FD fd,const unsigned char * buf)630 RandrChangeOutputProperty(FD fd, const unsigned char *buf)
631 {
632     uint32_t n;
633     short unit;
634     long type;
635 
636     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
637     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrChangeOutputProperty */
638     if (Verbose < 1)
639         return;
640     if (Verbose > 1)
641         PrintField(SBf, 0, 4, CARD32, "sequence number");
642 
643     printreqlen(buf, fd, DVALUE2(6 + (n + p) / 4));
644     PrintField(buf, 4, 4, OUTPUT, "output");
645     PrintField(buf, 8, 4, ATOM, "property");
646     PrintField(buf, 12, 4, ATOM, "type");
647     PrintField(buf, 16, 1, CARD8, "format");
648     PrintField(buf, 17, 1, CHANGEMODE, "mode");
649     /* 2 bytes unused */
650     printfield(buf, 20, 4, CARD32, "length of data");
651 
652     type = ILong(&buf[12]);
653     unit = IByte(&buf[16]) / 8;
654     n = ILong(&buf[20]);
655     PrintPropertyValues(&buf[24], type, unit, n, "data");
656 }
657 
658 
659 void
RandrDeleteOutputProperty(FD fd,const unsigned char * buf)660 RandrDeleteOutputProperty(FD fd, const unsigned char *buf)
661 {
662     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
663     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrDeleteOutputProperty */
664     if (Verbose < 1)
665         return;
666     if (Verbose > 1)
667         PrintField(SBf, 0, 4, CARD32, "sequence number");
668 
669     printreqlen(buf, fd, CONST2(3));
670     PrintField(buf, 4, 4, OUTPUT, "output");
671     PrintField(buf, 8, 4, ATOM, "property");
672 }
673 
674 
675 void
RandrGetOutputProperty(FD fd,const unsigned char * buf)676 RandrGetOutputProperty(FD fd, const unsigned char *buf)
677 {
678     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
679     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetOutputProperty */
680     if (Verbose < 1)
681         return;
682     if (Verbose > 1)
683         PrintField(SBf, 0, 4, CARD32, "sequence number");
684 
685     printreqlen(buf, fd, CONST2(7));
686     PrintField(buf, 4, 4, OUTPUT, "output");
687     PrintField(buf, 8, 4, ATOM, "property");
688     PrintField(buf, 12, 4, ATOMT, "type");
689     PrintField(buf, 16, 4, CARD32, "long-offset");
690     printfield(buf, 20, 4, CARD32, "long-length");
691     PrintField(buf, 24, 1, BOOL, "delete");
692     PrintField(buf, 25, 1, BOOL, "pending");
693 }
694 
695 
696 void
RandrGetOutputPropertyReply(FD fd,const unsigned char * buf)697 RandrGetOutputPropertyReply(FD fd, const unsigned char *buf)
698 {
699     uint32_t n;
700     short unit;
701     long type;
702 
703     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
704     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
705     if (Verbose < 1)
706         return;
707     PrintField(buf, 1, 1, CARD8, "format");
708     printfield(buf, 2, 2, CARD16, "sequence number");
709     printfield(buf, 4, 4, DVALUE4((n + p) / 4), "reply length");
710     PrintField(buf, 8, 4, ATOM, "type");
711     PrintField(buf, 12, 4, CARD32, "bytes-after");
712     printfield(buf, 16, 4, CARD32, "length of value");
713 
714     unit = IByte(&buf[1]) / 8;
715     type = ILong(&buf[8]);
716     n = ILong(&buf[16]);
717     PrintPropertyValues(&buf[32], type, unit, n, "value");
718 }
719 
720 
721 void
RandrCreateMode(FD fd,const unsigned char * buf)722 RandrCreateMode(FD fd, const unsigned char *buf)
723 {
724     uint16_t n;
725     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
726     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrCreateMode */
727     if (Verbose < 1)
728         return;
729     if (Verbose > 1)
730         PrintField(SBf, 0, 4, CARD32, "sequence number");
731 
732     printreqlen(buf, fd, DVALUE2(12 + (n + p) / 4));
733     PrintField(buf, 4, 4, WINDOW, "window");
734     PrintField(buf, 8, 32, MODEINFO, "mode");
735     n = IShort(&buf[34]); /* name length field of MODEINFO */
736     PrintString8(&buf[40], n, "name");
737 }
738 
739 
740 void
RandrCreateModeReply(FD fd,const unsigned char * buf)741 RandrCreateModeReply(FD fd, const unsigned char *buf)
742 {
743     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
744     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
745     if (Verbose < 1)
746         return;
747     printfield(buf, 2, 2, CARD16, "sequence number");
748     printfield(buf, 4, 4, DVALUE4(0), "reply length");
749     PrintField(buf, 8, 4, MODE, "mode");
750 }
751 
752 
753 void
RandrDestroyMode(FD fd,const unsigned char * buf)754 RandrDestroyMode(FD fd, const unsigned char *buf)
755 {
756     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
757     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrDestroyMode */
758     if (Verbose < 1)
759         return;
760     if (Verbose > 1)
761         PrintField(SBf, 0, 4, CARD32, "sequence number");
762 
763     printreqlen(buf, fd, CONST2(2));
764     PrintField(buf, 4, 4, MODE, "mode");
765 }
766 
767 
768 void
RandrAddOutputMode(FD fd,const unsigned char * buf)769 RandrAddOutputMode(FD fd, const unsigned char *buf)
770 {
771     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
772     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrAddOutputMode */
773     if (Verbose < 1)
774         return;
775     if (Verbose > 1)
776         PrintField(SBf, 0, 4, CARD32, "sequence number");
777 
778     printreqlen(buf, fd, CONST2(3));
779     PrintField(buf, 4, 4, OUTPUT, "output");
780     PrintField(buf, 8, 4, MODE, "mode");
781 }
782 
783 
784 void
RandrDeleteOutputMode(FD fd,const unsigned char * buf)785 RandrDeleteOutputMode(FD fd, const unsigned char *buf)
786 {
787     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
788     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrDeleteOutputMode */
789     if (Verbose < 1)
790         return;
791     if (Verbose > 1)
792         PrintField(SBf, 0, 4, CARD32, "sequence number");
793 
794     printreqlen(buf, fd, CONST2(3));
795     PrintField(buf, 4, 4, OUTPUT, "output");
796     PrintField(buf, 8, 4, MODE, "mode");
797 }
798 
799 
800 void
RandrGetCrtcInfo(FD fd,const unsigned char * buf)801 RandrGetCrtcInfo(FD fd, const unsigned char *buf)
802 {
803     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
804     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetCrtcInfo */
805     if (Verbose < 1)
806         return;
807     if (Verbose > 1)
808         PrintField(SBf, 0, 4, CARD32, "sequence number");
809 
810     printreqlen(buf, fd, CONST2(3));
811     PrintField(buf, 4, 4, CRTC, "crtc");
812     PrintField(buf, 8, 4, TIMESTAMP, "config-timestamp");
813 }
814 
815 
816 void
RandrGetCrtcInfoReply(FD fd,const unsigned char * buf)817 RandrGetCrtcInfoReply(FD fd, const unsigned char *buf)
818 {
819     uint16_t o, p;
820     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
821     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
822     PrintField(buf, 1, 1, CARD8, "status");
823     if (Verbose < 1)
824         return;
825     printfield(buf, 2, 2, CARD16, "sequence number");
826     printfield(buf, 4, 4, DVALUE4(o+p), "reply length");
827     PrintField(buf, 8, 4, TIMESTAMP, "timestamp");
828     PrintField(buf, 12, 2, INT16, "x");
829     PrintField(buf, 14, 2, INT16, "y");
830     PrintField(buf, 16, 2, CARD16, "width");
831     PrintField(buf, 18, 2, CARD16, "height");
832     PrintField(buf, 20, 4, MODE, "mode");
833     PrintField(buf, 24, 2, SETofROTATION, "current rotation and reflection");
834     PrintField(buf, 26, 2, SETofROTATION, "set of possible rotations");
835     PrintField(buf, 28, 2, CARD16, "number of outputs");
836     PrintField(buf, 30, 2, CARD16, "number of possible outputs");
837 
838     o = IShort(&buf[28]);
839     p = IShort(&buf[30]);
840     PrintList(&buf[32], (long) o, OUTPUT, "outputs");
841     PrintList(&buf[32 + (4 * o)], (long) p, OUTPUT, "possible outputs");
842 }
843 
844 
845 void
RandrSetCrtcConfig(FD fd,const unsigned char * buf)846 RandrSetCrtcConfig(FD fd, const unsigned char *buf)
847 {
848     uint16_t n;
849     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
850     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSetCrtcConfig */
851     if (Verbose < 1)
852         return;
853     if (Verbose > 1)
854         PrintField(SBf, 0, 4, CARD32, "sequence number");
855 
856     printreqlen(buf, fd, DVALUE2(7 + 2n));
857     PrintField(buf, 4, 4, CRTC, "crtc");
858     PrintField(buf, 8, 4, TIMESTAMP, "timestamp");
859     PrintField(buf, 12, 4, TIMESTAMP, "config timestamp");
860     PrintField(buf, 16, 2, INT16, "x");
861     PrintField(buf, 18, 2, INT16, "y");
862     PrintField(buf, 20, 4, MODE, "mode");
863     PrintField(buf, 24, 2, SETofROTATION, "rotation/reflection");
864     /* 26 = 2 bytes padding */
865     n = IShort(&buf[2]) - 7;
866     PrintList(&buf[28], (long) n, OUTPUT, "outputs");
867 }
868 
869 
870 void
RandrSetCrtcConfigReply(FD fd,const unsigned char * buf)871 RandrSetCrtcConfigReply(FD fd, const unsigned char *buf)
872 {
873     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
874     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
875     PrintField(buf, 1, 1, CARD8, "status");
876     if (Verbose < 1)
877         return;
878     printfield(buf, 2, 2, CARD16, "sequence number");
879     printfield(buf, 4, 4, CONST4(0), "reply length");
880     PrintField(buf, 8, 4, TIMESTAMP, "timestamp");
881 }
882 
883 
884 void
RandrGetCrtcGammaSize(FD fd,const unsigned char * buf)885 RandrGetCrtcGammaSize(FD fd, const unsigned char *buf)
886 {
887     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
888     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetCrtcGammaSize */
889     if (Verbose < 1)
890         return;
891     if (Verbose > 1)
892         PrintField(SBf, 0, 4, CARD32, "sequence number");
893 
894     printreqlen(buf, fd, CONST2(2));
895     PrintField(buf, 4, 4, CRTC, "crtc");
896 }
897 
898 
899 void
RandrGetCrtcGammaSizeReply(FD fd,const unsigned char * buf)900 RandrGetCrtcGammaSizeReply(FD fd, const unsigned char *buf)
901 {
902     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
903     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
904     PrintField(buf, 1, 1, CARD8, "status");
905     if (Verbose < 1)
906         return;
907     printfield(buf, 2, 2, CARD16, "sequence number");
908     printfield(buf, 4, 4, CONST4(0), "reply length");
909     PrintField(buf, 8, 2, CARD16, "size");
910 }
911 
912 
913 void
RandrGetCrtcGamma(FD fd,const unsigned char * buf)914 RandrGetCrtcGamma(FD fd, const unsigned char *buf)
915 {
916     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
917     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetCrtcGamma */
918     if (Verbose < 1)
919         return;
920     if (Verbose > 1)
921         PrintField(SBf, 0, 4, CARD32, "sequence number");
922 
923     printreqlen(buf, fd, CONST2(2));
924     PrintField(buf, 4, 4, CRTC, "crtc");
925 }
926 
927 
928 void
RandrGetCrtcGammaReply(FD fd,const unsigned char * buf)929 RandrGetCrtcGammaReply(FD fd, const unsigned char *buf)
930 {
931     uint16_t n;
932     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
933     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
934     if (Verbose < 1)
935         return;
936     printfield(buf, 2, 2, CARD16, "sequence number");
937     printfield(buf, 4, 4, DVALUE4(((6 * n) + p)/4), "reply length");
938     PrintField(buf, 8, 2, CARD16, "size");
939     n = IShort(&buf[8]);
940     PrintList(&buf[12], (long) n, CARD16, "red");
941     PrintList(&buf[12 + (2 * n)], (long) n, CARD16, "green");
942     PrintList(&buf[12 + (4 * n)], (long) n, CARD16, "blue");
943 }
944 
945 
946 void
RandrSetCrtcGamma(FD fd,const unsigned char * buf)947 RandrSetCrtcGamma(FD fd, const unsigned char *buf)
948 {
949     uint16_t n;
950     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
951     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSetCrtcGamma */
952     if (Verbose < 1)
953         return;
954     if (Verbose > 1)
955         PrintField(SBf, 0, 4, CARD32, "sequence number");
956 
957     printreqlen(buf, fd, DVALUE2(3+((6 * n) + p)/4));
958     PrintField(buf, 4, 4, CRTC, "crtc");
959     PrintField(buf, 8, 2, CARD16, "size");
960     n = IShort(&buf[8]);
961     /* 10 = 2 bytes padding */
962     PrintList(&buf[12], (long) n, CARD16, "red");
963     PrintList(&buf[12 + (2 * n)], (long) n, CARD16, "green");
964     PrintList(&buf[12 + (4 * n)], (long) n, CARD16, "blue");
965 }
966 
967 void
RandrCrtcChangeNotifyEvent(const unsigned char * buf)968 RandrCrtcChangeNotifyEvent(const unsigned char *buf)
969 {
970     PrintField(buf, 0, 1, EVENT, EVENTHEADER); /* RRNotify */
971     PrintField(buf, 1, 1, RANDREVENT, "minor code");  /* RRCrtcChangeNotify */
972     printfield(buf, 2, 2, CARD16, "sequence number");
973     PrintField(buf, 4, 4, TIMESTAMP, "timestamp");
974     PrintField(buf, 8, 4, WINDOW, "window");
975     PrintField(buf, 12, 4, CRTC, "crtc");
976     PrintField(buf, 16, 4, MODE, "mode");
977     PrintField(buf, 20, 2, SETofROTATION, "rotation");
978     /* 22 = 2 bytes padding */
979     PrintField(buf, 24, 2, INT16, "x");
980     PrintField(buf, 26, 2, INT16, "y");
981     PrintField(buf, 28, 2, CARD16, "width");
982     PrintField(buf, 30, 2, CARD16, "height");
983 }
984 
985 void
RandrOutputChangeNotifyEvent(const unsigned char * buf)986 RandrOutputChangeNotifyEvent(const unsigned char *buf)
987 {
988     PrintField(buf, 0, 1, EVENT, EVENTHEADER); /* RRNotify */
989     PrintField(buf, 1, 1, RANDREVENT, "minor code");  /* RROutputChangeNotify */
990     printfield(buf, 2, 2, CARD16, "sequence number");
991     PrintField(buf, 4, 4, TIMESTAMP, "timestamp");
992     PrintField(buf, 8, 4, TIMESTAMP, "config-timestamp");
993     PrintField(buf, 12, 4, WINDOW, "window");
994     PrintField(buf, 16, 4, OUTPUT, "output");
995     PrintField(buf, 20, 4, CRTC, "crtc");
996     PrintField(buf, 24, 4, MODE, "mode");
997     PrintField(buf, 28, 2, SETofROTATION, "rotation");
998     PrintField(buf, 30, 1, CONNECTION, "connection");
999     PrintField(buf, 31, 1, SUBPIXEL, "subpixel-order");
1000 
1001 }
1002 
1003 void
RandrOutputPropertyNotifyEvent(const unsigned char * buf)1004 RandrOutputPropertyNotifyEvent(const unsigned char *buf)
1005 {
1006     PrintField(buf, 0, 1, EVENT, EVENTHEADER); /* RRNotify */
1007     PrintField(buf, 1, 1, RANDREVENT, "minor code");  /* RROutputPropertyNotify */
1008     printfield(buf, 2, 2, CARD16, "sequence number");
1009     PrintField(buf, 4, 4, WINDOW, "window");
1010     PrintField(buf, 8, 4, OUTPUT, "output");
1011     PrintField(buf, 12, 4, ATOM, "atom");
1012     PrintField(buf, 16, 4, TIMESTAMP, "time");
1013     PrintField(buf, 20, 1, PROPCHANGE, "state");
1014     /* 11 bytes unused */
1015 }
1016 
1017 
1018 void
RandrOutputError(FD fd,const unsigned char * buf)1019 RandrOutputError(FD fd, const unsigned char *buf)
1020 {
1021     printErrorWithValue(buf, OUTPUT, "bad output");
1022 }
1023 
1024 void
RandrCrtcError(FD fd,const unsigned char * buf)1025 RandrCrtcError(FD fd, const unsigned char *buf)
1026 {
1027     printErrorWithValue(buf, CRTC, "bad crtc");
1028 }
1029 
1030 void
RandrModeError(FD fd,const unsigned char * buf)1031 RandrModeError(FD fd, const unsigned char *buf)
1032 {
1033     printErrorWithValue(buf, MODE, "bad mode");
1034 }
1035 
1036 
1037 
1038 /* Randr 1.3 additions */
1039 void
RandrGetScreenResourcesCurrent(FD fd,const unsigned char * buf)1040 RandrGetScreenResourcesCurrent(FD fd, const unsigned char *buf)
1041 {
1042     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
1043     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetScreenResourcesCurrent */
1044     if (Verbose < 1)
1045         return;
1046     if (Verbose > 1)
1047         PrintField(SBf, 0, 4, CARD32, "sequence number");
1048 
1049     printreqlen(buf, fd, CONST2(2));
1050     PrintField(buf, 4, 4, WINDOW, "window");
1051 }
1052 
1053 
1054 void
RandrGetScreenResourcesCurrentReply(FD fd,const unsigned char * buf)1055 RandrGetScreenResourcesCurrentReply(FD fd, const unsigned char *buf)
1056 {
1057     /* Reply format is exact same as RandrGetScreenResources */
1058     RandrGetScreenResourcesReply(fd, buf);
1059 }
1060 
1061 
1062 void
RandrSetCrtcTransform(FD fd,const unsigned char * buf)1063 RandrSetCrtcTransform(FD fd, const unsigned char *buf)
1064 {
1065     uint16_t n;
1066     uint32_t reqlen, p, v;
1067     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
1068     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSetCrtcTransform */
1069     if (Verbose < 1)
1070         return;
1071     if (Verbose > 1)
1072         PrintField(SBf, 0, 4, CARD32, "sequence number");
1073 
1074     reqlen = getreqlen(fd, buf);
1075     printreqlen(buf, fd, DVALUE2(12+(n+p)/4+v));
1076     PrintField(buf, 4, 4, CRTC, "crtc");
1077     PrintField(buf, 8, 36, RENDERTRANSFORM, "transform");
1078     printfield(buf, 44, 2, CARD16, "filter name length");
1079     /* 2 bytes unused */
1080     n = IShort(&buf[44]);
1081     PrintString8(&buf[48], n, "filter name");
1082     /* pad to p=pad(n) */
1083     p = pad(n);
1084     v = reqlen - (12 + (p/4));
1085     PrintList(&buf[48 + p], (long) v, FIXED, "filter params");
1086 }
1087 
1088 
1089 void
RandrGetCrtcTransform(FD fd,const unsigned char * buf)1090 RandrGetCrtcTransform(FD fd, const unsigned char *buf)
1091 {
1092     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
1093     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetCrtcTransform */
1094     if (Verbose < 1)
1095         return;
1096     if (Verbose > 1)
1097         PrintField(SBf, 0, 4, CARD32, "sequence number");
1098 
1099     printreqlen(buf, fd, CONST2(2));
1100     PrintField(buf, 4, 4, CRTC, "crtc");
1101 }
1102 
1103 
1104 void
RandrGetCrtcTransformReply(FD fd,const unsigned char * buf)1105 RandrGetCrtcTransformReply(FD fd, const unsigned char *buf)
1106 {
1107     uint16_t pn, pf, cn, cf;
1108 
1109     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
1110     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
1111     if (Verbose < 1)
1112         return;
1113     printfield(buf, 2, 2, CARD16, "sequence number");
1114     printfield(buf, 4, 4, DVALUE4(16+(pn+pnp)/4+(cn+cnp)/4+pf+cf), "reply length");
1115     PrintField(buf, 8, 36, RENDERTRANSFORM, "pending transform");
1116     PrintField(buf, 44, 1, BOOL, "has transforms");
1117     /* 3 bytes unused */
1118     PrintField(buf, 48, 36, RENDERTRANSFORM, "current transform");
1119     /* 4 bytes unused */
1120 
1121     printfield(buf, 88, 2, CARD16, "pending filter name length"); /* pn */
1122     printfield(buf, 90, 2, CARD16, "pending filter num params");  /* pf */
1123     printfield(buf, 92, 2, CARD16, "current filter name length"); /* cn */
1124     printfield(buf, 94, 2, CARD16, "current filter num params");  /* cf */
1125 
1126     pn = IShort(&buf[88]);
1127     pf = IShort(&buf[90]);
1128     cn = IShort(&buf[92]);
1129     cf = IShort(&buf[94]);
1130 
1131     buf += 96;
1132 
1133     PrintString8(buf, pn, "pending filter name");
1134     buf += pad(pn);
1135     PrintList(buf, pf, FIXED, "pending filter params");
1136     buf += 4 * pf;
1137 
1138     PrintString8(buf, cn, "current filter name");
1139     buf += pad(cn);
1140     PrintList(buf, cf, FIXED, "current filter params");
1141 }
1142 
1143 
1144 void
RandrGetPanning(FD fd,const unsigned char * buf)1145 RandrGetPanning(FD fd, const unsigned char *buf)
1146 {
1147     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
1148     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetPanning */
1149     if (Verbose < 1)
1150         return;
1151     if (Verbose > 1)
1152         PrintField(SBf, 0, 4, CARD32, "sequence number");
1153 
1154     printreqlen(buf, fd, CONST2(2));
1155     PrintField(buf, 4, 4, CRTC, "crtc");
1156 }
1157 
1158 
1159 void
RandrGetPanningReply(FD fd,const unsigned char * buf)1160 RandrGetPanningReply(FD fd, const unsigned char *buf)
1161 {
1162     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
1163     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
1164     PrintField(buf, 1, 1, CARD8, "status");
1165     if (Verbose < 1)
1166         return;
1167     printfield(buf, 2, 2, CARD16, "sequence number");
1168     printfield(buf, 4, 4, DVALUE4(1), "reply length");
1169     PrintField(buf, 8, 4, TIMESTAMP, "timestamp");
1170     PrintField(buf, 12, 2, CARD16, "left");
1171     PrintField(buf, 14, 2, CARD16, "top");
1172     PrintField(buf, 16, 2, CARD16, "width");
1173     PrintField(buf, 18, 2, CARD16, "height");
1174     PrintField(buf, 20, 2, CARD16, "track_left");
1175     PrintField(buf, 22, 2, CARD16, "track_top");
1176     PrintField(buf, 24, 2, CARD16, "track_width");
1177     PrintField(buf, 26, 2, CARD16, "track_height");
1178     PrintField(buf, 28, 2, INT16, "border_left");
1179     PrintField(buf, 30, 2, INT16, "border_top");
1180     PrintField(buf, 32, 2, INT16, "border_right");
1181     PrintField(buf, 34, 2, INT16, "border_bottom");
1182 }
1183 
1184 
1185 void
RandrSetPanning(FD fd,const unsigned char * buf)1186 RandrSetPanning(FD fd, const unsigned char *buf)
1187 {
1188     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
1189     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSetPanning */
1190     if (Verbose < 1)
1191         return;
1192     if (Verbose > 1)
1193         PrintField(SBf, 0, 4, CARD32, "sequence number");
1194 
1195     printreqlen(buf, fd, CONST2(9));
1196     PrintField(buf, 4, 4, CRTC, "crtc");
1197     PrintField(buf, 8, 4, TIMESTAMP, "timestamp");
1198     PrintField(buf, 12, 2, CARD16, "left");
1199     PrintField(buf, 14, 2, CARD16, "top");
1200     PrintField(buf, 16, 2, CARD16, "width");
1201     PrintField(buf, 18, 2, CARD16, "height");
1202     PrintField(buf, 20, 2, CARD16, "track_left");
1203     PrintField(buf, 22, 2, CARD16, "track_top");
1204     PrintField(buf, 24, 2, CARD16, "track_width");
1205     PrintField(buf, 26, 2, CARD16, "track_height");
1206     PrintField(buf, 28, 2, INT16, "border_left");
1207     PrintField(buf, 30, 2, INT16, "border_top");
1208     PrintField(buf, 32, 2, INT16, "border_right");
1209     PrintField(buf, 34, 2, INT16, "border_bottom");
1210 }
1211 
1212 
1213 void
RandrSetPanningReply(FD fd,const unsigned char * buf)1214 RandrSetPanningReply(FD fd, const unsigned char *buf)
1215 {
1216     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
1217     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
1218     PrintField(buf, 1, 1, CARD8, "status");
1219     if (Verbose < 1)
1220         return;
1221     printfield(buf, 2, 2, CARD16, "sequence number");
1222     printfield(buf, 4, 4, CONST4(0), "reply length");
1223     PrintField(buf, 8, 4, TIMESTAMP, "new-timestamp");
1224     /* 20 bytes unused */
1225 }
1226 
1227 
1228 void
RandrSetOutputPrimary(FD fd,const unsigned char * buf)1229 RandrSetOutputPrimary(FD fd, const unsigned char *buf)
1230 {
1231     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
1232     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSetOutputPrimary */
1233     if (Verbose < 1)
1234         return;
1235     if (Verbose > 1)
1236         PrintField(SBf, 0, 4, CARD32, "sequence number");
1237 
1238     printreqlen(buf, fd, CONST2(3));
1239     PrintField(buf, 4, 4, WINDOW, "window");
1240     PrintField(buf, 8, 4, OUTPUT, "output");
1241 }
1242 
1243 
1244 void
RandrGetOutputPrimary(FD fd,const unsigned char * buf)1245 RandrGetOutputPrimary(FD fd, const unsigned char *buf)
1246 {
1247     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
1248     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetOutputPrimary */
1249     if (Verbose < 1)
1250         return;
1251     if (Verbose > 1)
1252         PrintField(SBf, 0, 4, CARD32, "sequence number");
1253 
1254     printreqlen(buf, fd, CONST2(2));
1255     PrintField(buf, 4, 4, WINDOW, "window");
1256 }
1257 
1258 
1259 void
RandrGetOutputPrimaryReply(FD fd,const unsigned char * buf)1260 RandrGetOutputPrimaryReply(FD fd, const unsigned char *buf)
1261 {
1262     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
1263     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
1264     if (Verbose < 1)
1265         return;
1266     printfield(buf, 2, 2, CARD16, "sequence number");
1267     printfield(buf, 4, 4, CONST4(0), "reply length");
1268     PrintField(buf, 8, 4, OUTPUT, "output");
1269 }
1270 
1271 
1272 
1273 /* Randr 1.4 additions */
1274 void
RandrGetProviders(FD fd,const unsigned char * buf)1275 RandrGetProviders(FD fd, const unsigned char *buf)
1276 {
1277     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
1278     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetProviders */
1279     if (Verbose < 1)
1280         return;
1281     if (Verbose > 1)
1282         PrintField(SBf, 0, 4, CARD32, "sequence number");
1283 
1284     printreqlen(buf, fd, CONST2(2));
1285     PrintField(buf, 4, 4, WINDOW, "window");
1286 }
1287 
1288 
1289 void
RandrGetProvidersReply(FD fd,const unsigned char * buf)1290 RandrGetProvidersReply(FD fd, const unsigned char *buf)
1291 {
1292     uint16_t p;
1293 
1294     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
1295     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
1296     if (Verbose < 1)
1297         return;
1298     printfield(buf, 2, 2, CARD16, "sequence number");
1299     printfield(buf, 4, 4, DVALUE4(p), "reply length");
1300     PrintField(buf, 8, 4, TIMESTAMP, "timestamp");
1301     PrintField(buf, 12, 2, CARD16, "number of providers");
1302 
1303     p = IShort(&buf[12]);
1304     PrintList(&buf[32], p, PROVIDER, "providers");
1305 }
1306 
1307 
1308 void
RandrGetProviderInfo(FD fd,const unsigned char * buf)1309 RandrGetProviderInfo(FD fd, const unsigned char *buf)
1310 {
1311     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
1312     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetProviderInfo */
1313     if (Verbose < 1)
1314         return;
1315     if (Verbose > 1)
1316         PrintField(SBf, 0, 4, CARD32, "sequence number");
1317 
1318     printreqlen(buf, fd, CONST2(3));
1319     PrintField(buf, 4, 4, PROVIDER, "provider");
1320     PrintField(buf, 8, 4, TIMESTAMP, "config-timestamp");
1321 }
1322 
1323 
1324 void
RandrGetProviderInfoReply(FD fd,const unsigned char * buf)1325 RandrGetProviderInfoReply(FD fd, const unsigned char *buf)
1326 {
1327     uint16_t c, o, a, n;
1328     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
1329     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
1330     PrintField(buf, 1, 1, CARD8, "status");
1331     if (Verbose < 1)
1332         return;
1333     printfield(buf, 2, 2, CARD16, "sequence number");
1334     printfield(buf, 4, 4, DVALUE4(1+c+o+(a*2)+(n+p)/4), "reply length");
1335     PrintField(buf, 8, 4, TIMESTAMP, "timestamp");
1336     PrintField(buf, 12, 4, SETofPROVIDER_CAPS, "capabilities");
1337     PrintField(buf, 16, 2, CARD16, "number of crtcs");		/* c */
1338     PrintField(buf, 18, 2, CARD16, "number of outputs");	/* o */
1339     PrintField(buf, 20, 2, CARD16, "number of associated providers"); /* a */
1340     PrintField(buf, 22, 2, CARD16, "length of name");		/* n */
1341     /* 8 bytes unused */
1342     c = IShort(&buf[16]);
1343     o = IShort(&buf[18]);
1344     a = IShort(&buf[20]);
1345     n = IShort(&buf[22]);
1346 
1347     buf += 32;
1348     PrintList(buf, c, CRTC, "crtcs");
1349     buf += c * 4;
1350     PrintList(buf, o, OUTPUT, "outputs");
1351     buf += o * 4;
1352     PrintList(buf, a, PROVIDER, "associated providers");
1353     buf += a * 4;
1354     PrintList(buf, a, SETofPROVIDER_CAPS, "associated provider capability");
1355     buf += a * 4;
1356     PrintString8(buf, n, "name");
1357 }
1358 
1359 
1360 void
RandrSetProviderOffloadSink(FD fd,const unsigned char * buf)1361 RandrSetProviderOffloadSink(FD fd, const unsigned char *buf)
1362 {
1363     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
1364     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSetProviderOffloadSink */
1365     if (Verbose < 1)
1366         return;
1367     if (Verbose > 1)
1368         PrintField(SBf, 0, 4, CARD32, "sequence number");
1369 
1370     printreqlen(buf, fd, CONST2(4));
1371     PrintField(buf, 4, 4, PROVIDER, "provider");
1372     PrintField(buf, 8, 4, PROVIDER, "offload sink provider");
1373     PrintField(buf, 12, 4, TIMESTAMP, "timestamp");
1374 }
1375 
1376 
1377 void
RandrSetProviderOutputSource(FD fd,const unsigned char * buf)1378 RandrSetProviderOutputSource(FD fd, const unsigned char *buf)
1379 {
1380     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
1381     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrSetProviderOutputSource */
1382     if (Verbose < 1)
1383         return;
1384     if (Verbose > 1)
1385         PrintField(SBf, 0, 4, CARD32, "sequence number");
1386     printreqlen(buf, fd, CONST2(2));
1387     PrintField(buf, 4, 4, PROVIDER, "provider");
1388     PrintField(buf, 8, 4, PROVIDER, "output source provider");
1389     PrintField(buf, 12, 4, TIMESTAMP, "timestamp");
1390 }
1391 
1392 
1393 void
RandrListProviderProperties(FD fd,const unsigned char * buf)1394 RandrListProviderProperties(FD fd, const unsigned char *buf)
1395 {
1396     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
1397     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrListProviderProperties */
1398     if (Verbose < 1)
1399         return;
1400     if (Verbose > 1)
1401         PrintField(SBf, 0, 4, CARD32, "sequence number");
1402 
1403     printreqlen(buf, fd, CONST2(2));
1404     PrintField(buf, 4, 4, PROVIDER, "provider");
1405 }
1406 
1407 
1408 void
RandrListProviderPropertiesReply(FD fd,const unsigned char * buf)1409 RandrListProviderPropertiesReply(FD fd, const unsigned char *buf)
1410 {
1411     uint16_t n;
1412 
1413     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
1414     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
1415     if (Verbose < 1)
1416         return;
1417     printfield(buf, 2, 2, CARD16, "sequence number");
1418     printfield(buf, 4, 4, DVALUE4(0), "reply length");
1419     printfield(buf, 8, 2, DVALUE2(n), "number of atoms");
1420     /* 22 bytes unused */
1421     n = IShort(&buf[8]);
1422     PrintList(&buf[32], (long) n, ATOM, "atoms");
1423 }
1424 
1425 
1426 void
RandrQueryProviderProperty(FD fd,const unsigned char * buf)1427 RandrQueryProviderProperty(FD fd, const unsigned char *buf)
1428 {
1429     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
1430     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrQueryProviderProperty */
1431     if (Verbose < 1)
1432         return;
1433     if (Verbose > 1)
1434         PrintField(SBf, 0, 4, CARD32, "sequence number");
1435 
1436     printreqlen(buf, fd, CONST2(3));
1437     PrintField(buf, 4, 4, PROVIDER, "provider");
1438     PrintField(buf, 8, 4, ATOM, "property");
1439 }
1440 
1441 
1442 void
RandrQueryProviderPropertyReply(FD fd,const unsigned char * buf)1443 RandrQueryProviderPropertyReply(FD fd, const unsigned char *buf)
1444 {
1445     uint32_t n;
1446     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
1447     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
1448     if (Verbose < 1)
1449         return;
1450     printfield(buf, 2, 2, CARD16, "sequence number");
1451     printfield(buf, 4, 4, DVALUE4(n), "reply length");
1452     PrintField(buf, 8, 1, BOOL, "pending");
1453     PrintField(buf, 9, 1, BOOL, "range");
1454     PrintField(buf, 10, 1, BOOL, "immutable");
1455     /* 21 bytes unused */
1456     n = ILong(&buf[4]);
1457     PrintList(&buf[32], n, INT32, "valid values");
1458 }
1459 
1460 
1461 void
RandrConfigureProviderProperty(FD fd,const unsigned char * buf)1462 RandrConfigureProviderProperty(FD fd, const unsigned char *buf)
1463 {
1464     uint32_t reqlen, n;
1465     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
1466     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrConfigureProviderProperty */
1467     if (Verbose < 1)
1468         return;
1469     if (Verbose > 1)
1470         PrintField(SBf, 0, 4, CARD32, "sequence number");
1471 
1472     reqlen = getreqlen(fd, buf);
1473     printreqlen(buf, fd, DVALUE2(4+n));
1474     PrintField(buf, 4, 4, PROVIDER, "provider");
1475     PrintField(buf, 8, 4, ATOM, "property");
1476     PrintField(buf, 12, 1, BOOL, "pending");
1477     PrintField(buf, 13, 1, BOOL, "range");
1478     /* 2 bytes unused */
1479     n = reqlen - 4;
1480     PrintList(&buf[16], n, INT32, "valid-values");
1481 }
1482 
1483 
1484 void
RandrChangeProviderProperty(FD fd,const unsigned char * buf)1485 RandrChangeProviderProperty(FD fd, const unsigned char *buf)
1486 {
1487     uint32_t n;
1488     short unit;
1489     long type;
1490 
1491     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
1492     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrChangeProviderProperty */
1493     if (Verbose < 1)
1494         return;
1495     if (Verbose > 1)
1496         PrintField(SBf, 0, 4, CARD32, "sequence number");
1497 
1498     printreqlen(buf, fd, DVALUE2(6 + (n + p) / 4));
1499     PrintField(buf, 4, 4, PROVIDER, "provider");
1500     PrintField(buf, 8, 4, ATOM, "property");
1501     PrintField(buf, 12, 4, ATOM, "type");
1502     PrintField(buf, 16, 1, CARD8, "format");
1503     PrintField(buf, 17, 1, CHANGEMODE, "mode");
1504     /* 2 bytes unused */
1505     printfield(buf, 20, 4, CARD32, "length of data");
1506 
1507     type = ILong(&buf[12]);
1508     unit = IByte(&buf[16]) / 8;
1509     n = ILong(&buf[20]);
1510     PrintPropertyValues(&buf[24], type, unit, n, "data");
1511 }
1512 
1513 
1514 void
RandrDeleteProviderProperty(FD fd,const unsigned char * buf)1515 RandrDeleteProviderProperty(FD fd, const unsigned char *buf)
1516 {
1517     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
1518     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrDeleteProviderProperty */
1519     if (Verbose < 1)
1520         return;
1521     if (Verbose > 1)
1522         PrintField(SBf, 0, 4, CARD32, "sequence number");
1523 
1524     printreqlen(buf, fd, CONST2(3));
1525     PrintField(buf, 4, 4, PROVIDER, "provider");
1526     PrintField(buf, 8, 4, ATOM, "property");
1527 }
1528 
1529 
1530 void
RandrGetProviderProperty(FD fd,const unsigned char * buf)1531 RandrGetProviderProperty(FD fd, const unsigned char *buf)
1532 {
1533     PrintField(buf, 0, 1, REQUEST, REQUESTHEADER); /* RandrRequest */
1534     PrintField(buf, 1, 1, RANDRREQUEST, RANDRREQUESTHEADER); /* RandrGetProviderProperty */
1535     if (Verbose < 1)
1536         return;
1537     if (Verbose > 1)
1538         PrintField(SBf, 0, 4, CARD32, "sequence number");
1539 
1540     printreqlen(buf, fd, CONST2(7));
1541     PrintField(buf, 4, 4, PROVIDER, "provider");
1542     PrintField(buf, 8, 4, ATOM, "property");
1543     PrintField(buf, 12, 4, ATOMT, "type");
1544     PrintField(buf, 16, 4, CARD32, "long-offset");
1545     printfield(buf, 20, 4, CARD32, "long-length");
1546     PrintField(buf, 24, 1, BOOL, "delete");
1547     PrintField(buf, 25, 1, BOOL, "pending");
1548 }
1549 
1550 
1551 void
RandrGetProviderPropertyReply(FD fd,const unsigned char * buf)1552 RandrGetProviderPropertyReply(FD fd, const unsigned char *buf)
1553 {
1554     uint32_t n;
1555     short unit;
1556     long type;
1557 
1558     PrintField(RBf, 0, 1, REPLY, REPLYHEADER); /* RandrRequest reply */
1559     PrintField(RBf, 1, 1, RANDRREPLY, RANDRREPLYHEADER);
1560     if (Verbose < 1)
1561         return;
1562     PrintField(buf, 1, 1, CARD8, "format");
1563     printfield(buf, 2, 2, CARD16, "sequence number");
1564     printfield(buf, 4, 4, DVALUE4((n + p) / 4), "reply length");
1565     PrintField(buf, 8, 4, ATOM, "type");
1566     PrintField(buf, 12, 4, CARD32, "bytes-after");
1567     printfield(buf, 16, 4, CARD32, "length of value");
1568 
1569     unit = IByte(&buf[1]) / 8;
1570     type = ILong(&buf[8]);
1571     n = ILong(&buf[16]);
1572     PrintPropertyValues(&buf[32], type, unit, n, "value");
1573 }
1574 
1575 
1576 void
RandrProviderChangeNotifyEvent(const unsigned char * buf)1577 RandrProviderChangeNotifyEvent(const unsigned char *buf)
1578 {
1579     PrintField(buf, 0, 1, EVENT, EVENTHEADER); /* RRNotify */
1580     PrintField(buf, 1, 1, RANDREVENT, "minor code");  /* RRProviderChangeNotify */
1581     printfield(buf, 2, 2, CARD16, "sequence number");
1582     PrintField(buf, 4, 4, TIMESTAMP, "timestamp");
1583     PrintField(buf, 8, 4, WINDOW, "window");
1584     PrintField(buf, 12, 4, PROVIDER, "provider");
1585     /* 16 bytes unused */
1586 }
1587 
1588 
1589 void
RandrProviderPropertyNotifyEvent(const unsigned char * buf)1590 RandrProviderPropertyNotifyEvent(const unsigned char *buf)
1591 {
1592     PrintField(buf, 0, 1, EVENT, EVENTHEADER); /* RRNotify */
1593     PrintField(buf, 1, 1, RANDREVENT, "minor code");  /* RRProviderPropertyNotify */
1594     printfield(buf, 2, 2, CARD16, "sequence number");
1595     PrintField(buf, 4, 4, WINDOW, "window");
1596     PrintField(buf, 8, 4, PROVIDER, "provider");
1597     PrintField(buf, 12, 4, ATOM, "atom");
1598     PrintField(buf, 16, 4, TIMESTAMP, "time");
1599     PrintField(buf, 20, 1, PROPCHANGE, "state");
1600     /* 11 bytes unused */
1601 }
1602 
1603 
1604 void
RandrResourceChangeNotifyEvent(const unsigned char * buf)1605 RandrResourceChangeNotifyEvent(const unsigned char *buf)
1606 {
1607     PrintField(buf, 0, 1, EVENT, EVENTHEADER); /* RRNotify */
1608     PrintField(buf, 1, 1, RANDREVENT, "minor code");  /* RRResourceChangeNotify */
1609     printfield(buf, 2, 2, CARD16, "sequence number");
1610     PrintField(buf, 4, 4, TIMESTAMP, "timestamp");
1611     PrintField(buf, 8, 4, WINDOW, "window");
1612     /* 20 bytes unused */
1613 }
1614 
1615 
1616 void
RandrProviderError(FD fd,const unsigned char * buf)1617 RandrProviderError(FD fd, const unsigned char *buf)
1618 {
1619     printErrorWithValue(buf, PROVIDER, "bad provider");
1620 }
1621