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