1 module x11.Xproto;
2 
3 import x11.Xmd;
4 import x11.Xprotostr;
5 import x11.Xlib;
6 
7 extern (C) nothrow:
8 
9 /*
10  * Define constants for the sizes of the network packets.  The sz_ prefix is
11  * used instead of something more descriptive so that the symbols are no more
12  * than 32 characters in length (which causes problems for some compilers).
13  */
14 const int sz_xSegment                       = 8;
15 const int sz_xPoint                         = 4;
16 const int sz_xRectangle                     = 8;
17 const int sz_xArc                           = 12;
18 const int sz_xConnClientPrefix              = 12;
19 const int sz_xConnSetupPrefix               = 8;
20 const int sz_xConnSetup                     = 32;
21 const int sz_xPixmapFormat                  = 8;
22 const int sz_xDepth                         = 8;
23 const int sz_xVisualType                    = 24;
24 const int sz_xWindowRoot                    = 40;
25 const int sz_xTimecoord                     = 8;
26 const int sz_xHostEntry                     = 4;
27 const int sz_xCharInfo                      = 12;
28 const int sz_xFontProp                      = 8;
29 const int sz_xTextElt                       = 2;
30 const int sz_xColorItem                     = 12;
31 const int sz_xrgb                           = 8;
32 const int sz_xGenericReply                  = 32;
33 const int sz_xGetWindowAttributesReply      = 44;
34 const int sz_xGetGeometryReply              = 32;
35 const int sz_xQueryTreeReply                = 32;
36 const int sz_xInternAtomReply               = 32;
37 const int sz_xGetAtomNameReply              = 32;
38 const int sz_xGetPropertyReply              = 32;
39 const int sz_xListPropertiesReply           = 32;
40 const int sz_xGetSelectionOwnerReply        = 32;
41 const int sz_xGrabPointerReply              = 32;
42 const int sz_xQueryPointerReply             = 32;
43 const int sz_xGetMotionEventsReply          = 32;
44 const int sz_xTranslateCoordsReply          = 32;
45 const int sz_xGetInputFocusReply            = 32;
46 const int sz_xQueryKeymapReply              = 40;
47 const int sz_xQueryFontReply                = 60;
48 const int sz_xQueryTextExtentsReply         = 32;
49 const int sz_xListFontsReply                = 32;
50 const int sz_xGetFontPathReply              = 32;
51 const int sz_xGetImageReply                 = 32;
52 const int sz_xListInstalledColormapsReply   = 32;
53 const int sz_xAllocColorReply               = 32;
54 const int sz_xAllocNamedColorReply          = 32;
55 const int sz_xAllocColorCellsReply          = 32;
56 const int sz_xAllocColorPlanesReply         = 32;
57 const int sz_xQueryColorsReply              = 32;
58 const int sz_xLookupColorReply              = 32;
59 const int sz_xQueryBestSizeReply            = 32;
60 const int sz_xQueryExtensionReply           = 32;
61 const int sz_xListExtensionsReply           = 32;
62 const int sz_xSetMappingReply               = 32;
63 const int sz_xGetKeyboardControlReply       = 52;
64 const int sz_xGetPointerControlReply        = 32;
65 const int sz_xGetScreenSaverReply           = 32;
66 const int sz_xListHostsReply                = 32;
67 const int sz_xSetModifierMappingReply       = 32;
68 const int sz_xError                         = 32;
69 const int sz_xEvent                         = 32;
70 const int sz_xKeymapEvent                   = 32;
71 const int sz_xReq                           = 4;
72 const int sz_xResourceReq                   = 8;
73 const int sz_xCreateWindowReq               = 32;
74 const int sz_xChangeWindowAttributesReq     = 12;
75 const int sz_xChangeSaveSetReq              = 8;
76 const int sz_xReparentWindowReq             = 16;
77 const int sz_xConfigureWindowReq            = 12;
78 const int sz_xCirculateWindowReq            = 8;
79 const int sz_xInternAtomReq                 = 8;
80 const int sz_xChangePropertyReq             = 24;
81 const int sz_xDeletePropertyReq             = 12;
82 const int sz_xGetPropertyReq                = 24;
83 const int sz_xSetSelectionOwnerReq          = 16;
84 const int sz_xConvertSelectionReq           = 24;
85 const int sz_xSendEventReq                  = 44;
86 const int sz_xGrabPointerReq                = 24;
87 const int sz_xGrabButtonReq                 = 24;
88 const int sz_xUngrabButtonReq               = 12;
89 const int sz_xChangeActivePointerGrabReq    = 16;
90 const int sz_xGrabKeyboardReq               = 16;
91 const int sz_xGrabKeyReq                    = 16;
92 const int sz_xUngrabKeyReq                  = 12;
93 const int sz_xAllowEventsReq                = 8;
94 const int sz_xGetMotionEventsReq            = 16;
95 const int sz_xTranslateCoordsReq            = 16;
96 const int sz_xWarpPointerReq                = 24;
97 const int sz_xSetInputFocusReq              = 12;
98 const int sz_xOpenFontReq                   = 12;
99 const int sz_xQueryTextExtentsReq           = 8;
100 const int sz_xListFontsReq                  = 8;
101 const int sz_xSetFontPathReq                = 8;
102 const int sz_xCreatePixmapReq               = 16;
103 const int sz_xCreateGCReq                   = 16;
104 const int sz_xChangeGCReq                   = 12;
105 const int sz_xCopyGCReq                     = 16;
106 const int sz_xSetDashesReq                  = 12;
107 const int sz_xSetClipRectanglesReq          = 12;
108 const int sz_xCopyAreaReq                   = 28;
109 const int sz_xCopyPlaneReq                  = 32;
110 const int sz_xPolyPointReq                  = 12;
111 const int sz_xPolySegmentReq                = 12;
112 const int sz_xFillPolyReq                   = 16;
113 const int sz_xPutImageReq                   = 24;
114 const int sz_xGetImageReq                   = 20;
115 const int sz_xPolyTextReq                   = 16;
116 const int sz_xImageTextReq                  = 16;
117 const int sz_xCreateColormapReq             = 16;
118 const int sz_xCopyColormapAndFreeReq        = 12;
119 const int sz_xAllocColorReq                 = 16;
120 const int sz_xAllocNamedColorReq            = 12;
121 const int sz_xAllocColorCellsReq            = 12;
122 const int sz_xAllocColorPlanesReq           = 16;
123 const int sz_xFreeColorsReq                 = 12;
124 const int sz_xStoreColorsReq                = 8;
125 const int sz_xStoreNamedColorReq            = 16;
126 const int sz_xQueryColorsReq                = 8;
127 const int sz_xLookupColorReq                = 12;
128 const int sz_xCreateCursorReq               = 32;
129 const int sz_xCreateGlyphCursorReq          = 32;
130 const int sz_xRecolorCursorReq              = 20;
131 const int sz_xQueryBestSizeReq              = 12;
132 const int sz_xQueryExtensionReq             = 8;
133 const int sz_xChangeKeyboardControlReq      = 8;
134 const int sz_xBellReq                       = 4;
135 const int sz_xChangePointerControlReq       = 12;
136 const int sz_xSetScreenSaverReq             = 12;
137 const int sz_xChangeHostsReq                = 8;
138 const int sz_xListHostsReq                  = 4;
139 const int sz_xChangeModeReq                 = 4;
140 const int sz_xRotatePropertiesReq           = 12;
141 const int sz_xReply                         = 32;
142 const int sz_xGrabKeyboardReply             = 32;
143 const int sz_xListFontsWithInfoReply        = 60;
144 const int sz_xSetPointerMappingReply        = 32;
145 const int sz_xGetKeyboardMappingReply       = 32;
146 const int sz_xGetPointerMappingReply        = 32;
147 const int sz_xGetModifierMappingReply       = 32;
148 const int sz_xListFontsWithInfoReq          = 8;
149 const int sz_xPolyLineReq                   = 12;
150 const int sz_xPolyArcReq                    = 12;
151 const int sz_xPolyRectangleReq              = 12;
152 const int sz_xPolyFillRectangleReq          = 12;
153 const int sz_xPolyFillArcReq                = 12;
154 const int sz_xPolyText8Req                  = 16;
155 const int sz_xPolyText16Req                 = 16;
156 const int sz_xImageText8Req                 = 16;
157 const int sz_xImageText16Req                = 16;
158 const int sz_xSetPointerMappingReq          = 4;
159 const int sz_xForceScreenSaverReq           = 4;
160 const int sz_xSetCloseDownModeReq           = 4;
161 const int sz_xClearAreaReq                  = 16;
162 const int sz_xSetAccessControlReq           = 4;
163 const int sz_xGetKeyboardMappingReq         = 8;
164 const int sz_xSetModifierMappingReq         = 4;
165 const int sz_xPropIconSize                  = 24;
166 const int sz_xChangeKeyboardMappingReq      = 8;
167 
168 
169 /* For the purpose of the structure definitions in this file,
170 we must redefine the following types in terms of Xmd.h's types, which may
171 include bit fields.  All of these are #undef'd at the end of this file,
172 restoring the definitions in X.h.  */
173 
174 // Due to the way alias and import works, those definitions needs to be
175 // put in a separate module.
176 import x11.Xproto_undef;
177 
178 const int X_TCP_PORT = 6000;                            /* add display number                                           */
179 
180 const int xTrue                         = 1;
181 const int xFalse                        = 0;
182 
183 
184 alias CARD16 KeyButMask;
185 
186 /*****************
187    connection setup structure.  This is followed by
188    numRoots xWindowRoot structs.
189 *****************/
190 
191 struct xConnClientPrefix{
192     CARD8   byteOrder;
193     BYTE    pad;
194     CARD16  majorVersion;
195     CARD16  minorVersion;
196     CARD16  nbytesAuthProto6;                           /* Authorization protocol                                       */
197     CARD16  nbytesAuthString;                           /* Authorization string                                         */
198     CARD16  pad2;
199 }
200 
201 struct xConnSetupPrefix{
202     CARD8          success;
203     BYTE           lengthReason;                        /*num bytes in string following if failure                      */
204     CARD16         majorVersion,
205                    minorVersion;
206     CARD16         length;                              /* 1*4 additional bytes in setup info                           */
207 }
208 
209 
210 struct xConnSetup{
211     CARD32  release;
212     CARD32  ridBase, ridMask;
213     CARD32  motionBufferSize;
214     CARD16  nbytesVendor;                               /* number of bytes in vendor string                             */
215     CARD16  maxRequestSize;
216     CARD8   numRoots;                                   /* number of roots structs to follow                            */
217     CARD8   numFormats;                                 /* number of pixmap formats                                     */
218     CARD8   imageByteOrder;                             /* LSBFirst, MSBFirst                                           */
219     CARD8   bitmapBitOrder;                             /* LeastSignificant, MostSign...                                */
220     CARD8   bitmapScanlineUnit,                         /* 8, 16, 32                                                    */
221             bitmapScanlinePad;                          /* 8, 16, 32                                                    */
222     KeyCode minKeyCode, maxKeyCode;
223     CARD32  pad2;
224 }
225 
226 struct xPixmapFormat{
227     CARD8   depth;
228     CARD8   bitsPerPixel;
229     CARD8   scanLinePad;
230     CARD8   pad1;
231     CARD32  pad2;
232 }
233 
234                                                         /* window root                                                  */
235 
236 struct xDepth{
237     CARD8   depth;
238     CARD8   pad1;
239     CARD16  nVisuals;                                   /* number of xVisualType structures following                   */
240     CARD32  pad2;
241 }
242 
243 struct xVisualType{
244     VisualID visualID;
245     CARD8 c_class;
246     CARD8 bitsPerRGB;
247     CARD16 colormapEntries;
248     CARD32 redMask, greenMask, blueMask;
249     CARD32 pad;
250 }
251 
252 struct xWindowRoot {
253     Window         windowId;
254     Colormap       defaultColormap;
255     CARD32         whitePixel, blackPixel;
256     CARD32         currentInputMask;
257     CARD16         pixWidth, pixHeight;
258     CARD16         mmWidth, mmHeight;
259     CARD16         minInstalledMaps, maxInstalledMaps;
260     VisualID       rootVisualID;
261     CARD8          backingStore;
262     BOOL           saveUnders;
263     CARD8          rootDepth;
264     CARD8          nDepths;                             /* number of xDepth structures following                        */
265 }
266 
267 /*****************************************************************
268  * Structure Defns
269  *   Structures needed for replies
270  *****************************************************************/
271 
272                                                         /* Used in GetMotionEvents                                      */
273 
274 struct xTimecoord{
275     CARD32 time;
276     INT16 x, y;
277 }
278 
279 struct xHostEntry{
280     CARD8   family;
281     BYTE    pad;
282     CARD16  length;
283 }
284 
285 struct xCharInfo{
286     INT16   leftSideBearing, rightSideBearing, characterWidth, ascent, descent;
287     CARD16  attributes;
288 }
289 
290 struct xFontProp{
291     Atom    name;
292     CARD32  value;
293 }
294 
295 /*
296  * non-aligned big-endian font ID follows this struct
297  */
298 struct xTextElt{                                        /* followed by string                                           */
299     CARD8   len;                                        /* number of *characters* in string, or FontChange (255) for font change, or 0 if just delta given */
300     INT8    delta;
301 }
302 
303 
304 struct xColorItem{
305     CARD32  pixel;
306     CARD16  red, green, blue;
307     CARD8   flags;                                      /* DoRed, DoGreen, DoBlue booleans                              */
308     CARD8   pad;
309 }
310 
311 struct xrgb{
312     CARD16 red, green, blue, pad;
313 }
314 
315 alias CARD8 KEYCODE;
316 
317 
318 /*****************
319  * XRep:
320  *    meant to be 32 byte quantity
321  *****************/
322 
323 /* GenericReply is the common format of all replies.  The "data" items
324    are specific to each individual reply type. */
325 
326 struct xGenericReply{
327     BYTE type;                                          /* X_Reply                                                      */
328     BYTE data1;                                         /* depends on reply type                                        */
329     CARD16 sequenceNumber;                              /* of last request received by server                           */
330     CARD32 length;                                      /* 4 byte quantities beyond size of GenericReply                */
331     CARD32 data00;
332     CARD32 data01;
333     CARD32 data02;
334     CARD32 data03;
335     CARD32 data04;
336     CARD32 data05;
337 }
338 
339                                                         /* Individual reply formats.                                    */
340 
341 struct xGetWindowAttributesReply{
342     BYTE type;                                          /* X_Reply                                                      */
343     CARD8 backingStore;
344     CARD16 sequenceNumber;
345     CARD32 length;                                      /* NOT 0; this is an extra-large reply                          */
346     VisualID visualID;
347     CARD16 c_class;
348     CARD8 bitGravity;
349     CARD8 winGravity;
350     CARD32 backingBitPlanes;
351     CARD32 backingPixel;
352     BOOL saveUnder;
353     BOOL mapInstalled;
354     CARD8 mapState;
355     BOOL c_override;
356     Colormap colormap;
357     CARD32 allEventMasks;
358     CARD32 yourEventMask;
359     CARD16 doNotPropagateMask;
360     CARD16 pad;
361 }
362 
363 struct xGetGeometryReply{
364     BYTE type;                                          /* X_Reply                                                      */
365     CARD8 depth;
366     CARD16 sequenceNumber;
367     CARD32 length;                                      /* 0                                                            */
368     Window root;
369     INT16 x, y;
370     CARD16 width, height;
371     CARD16 borderWidth;
372     CARD16 pad1;
373     CARD32 pad2;
374     CARD32 pad3;
375 }
376 
377 struct xQueryTreeReply{
378     BYTE type;                                          /* X_Reply                                                      */
379     BYTE pad1;
380     CARD16 sequenceNumber;
381     CARD32 length;
382     Window root, parent;
383     CARD16 nChildren;
384     CARD16 pad2;
385     CARD32 pad3;
386     CARD32 pad4;
387     CARD32 pad5;
388 }
389 
390 struct xInternAtomReply{
391     BYTE type;                                          /* X_Reply                                                      */
392     BYTE pad1;
393     CARD16 sequenceNumber;
394     CARD32 length;                                      /* 0                                                            */
395     Atom atom;
396     CARD32 pad2;
397     CARD32 pad3;
398     CARD32 pad4;
399     CARD32 pad5;
400     CARD32 pad6;
401 }
402 
403 struct xGetAtomNameReply{
404     BYTE type;                                          /* X_Reply                                                      */
405     BYTE pad1;
406     CARD16 sequenceNumber;
407     CARD32 length;                                      /* of additional bytes                                          */
408     CARD16 nameLength;                                  /* # of characters in name                                      */
409     CARD16 pad2;
410     CARD32 pad3;
411     CARD32 pad4;
412     CARD32 pad5;
413     CARD32 pad6;
414     CARD32 pad7;
415 }
416 
417 struct xGetPropertyReply{
418     BYTE type;                                          /* X_Reply                                                      */
419     CARD8 format;
420     CARD16 sequenceNumber;
421     CARD32 length;                                      /* of additional bytes                                          */
422     Atom propertyType;
423     CARD32 bytesAfter;
424     CARD32 nItems;                                      /* # of 8, 16, or 32-bit entities in reply                      */
425     CARD32 pad1;
426     CARD32 pad2;
427     CARD32 pad3;
428 }
429 
430 struct xListPropertiesReply{
431     BYTE type;                                          /* X_Reply                                                      */
432     BYTE pad1;
433     CARD16 sequenceNumber;
434     CARD32 length;
435     CARD16 nProperties;
436     CARD16 pad2;
437     CARD32 pad3;
438     CARD32 pad4;
439     CARD32 pad5;
440     CARD32 pad6;
441     CARD32 pad7;
442 }
443 
444 struct xGetSelectionOwnerReply{
445     BYTE type;                                          /* X_Reply                                                      */
446     BYTE pad1;
447     CARD16 sequenceNumber;
448     CARD32 length;                                      /* 0                                                            */
449     Window owner;
450     CARD32 pad2;
451     CARD32 pad3;
452     CARD32 pad4;
453     CARD32 pad5;
454     CARD32 pad6;
455 }
456 
457 struct xGrabPointerReply{
458     BYTE type;                                          /* X_Reply                                                      */
459     BYTE status;
460     CARD16 sequenceNumber;
461     CARD32 length;                                      /* 0                                                            */
462     CARD32 pad1;
463     CARD32 pad2;
464     CARD32 pad3;
465     CARD32 pad4;
466     CARD32 pad5;
467     CARD32 pad6;
468 }
469 
470 alias xGrabPointerReply xGrabKeyboardReply;
471 
472 struct xQueryPointerReply{
473     BYTE type;                                          /* X_Reply                                                      */
474     BOOL sameScreen;
475     CARD16 sequenceNumber;
476     CARD32 length;                                      /* 0                                                            */
477     Window root, child;
478     INT16 rootX, rootY, winX, winY;
479     CARD16 mask;
480     CARD16 pad1;
481     CARD32 pad;
482 }
483 
484 struct xGetMotionEventsReply{
485     BYTE type;                                          /* X_Reply                                                      */
486     BYTE pad1;
487     CARD16 sequenceNumber;
488     CARD32 length;
489     CARD32 nEvents;
490     CARD32 pad2;
491     CARD32 pad3;
492     CARD32 pad4;
493     CARD32 pad5;
494     CARD32 pad6;
495 }
496 
497 struct xTranslateCoordsReply{
498     BYTE type;                                          /* X_Reply                                                      */
499     BOOL sameScreen;
500     CARD16 sequenceNumber;
501     CARD32 length;                                      /* 0                                                            */
502     Window child;
503     INT16 dstX, dstY;
504     CARD32 pad2;
505     CARD32 pad3;
506     CARD32 pad4;
507     CARD32 pad5;
508 }
509 
510 struct xGetInputFocusReply{
511     BYTE type;                                          /* X_Reply                                                      */
512     CARD8 revertTo;
513     CARD16 sequenceNumber;
514     CARD32 length;                                      /* 0                                                            */
515     Window focus;
516     CARD32 pad1;
517     CARD32 pad2;
518     CARD32 pad3;
519     CARD32 pad4;
520     CARD32 pad5;
521 }
522 
523 struct xQueryKeymapReply{
524     BYTE type;                                          /* X_Reply                                                      */
525     BYTE pad1;
526     CARD16 sequenceNumber;
527     CARD32 length;                                      /* 2, NOT 0; this is an extra-large reply                       */
528     BYTE[32] map;
529 }
530 
531                                                         /* Warning: this MUST match (up to component renaming) xListFontsWithInfoReply */
532 version( X86_64 ){
533     struct _xQueryFontReply{
534         BYTE type;                                      /* X_Reply                                                      */
535         BYTE pad1;
536         CARD16 sequenceNumber;
537         CARD32 length;                                  /* definitely > 0, even if "nCharInfos" is 0                    */
538         xCharInfo minBounds;
539         xCharInfo maxBounds;
540         CARD16 minCharOrByte2, maxCharOrByte2;
541         CARD16 defaultChar;
542         CARD16 nFontProps;                              /* followed by this many xFontProp structures                   */
543         CARD8 drawDirection;
544         CARD8 minByte1, maxByte1;
545         BOOL allCharsExist;
546         INT16 fontAscent, fontDescent;
547         CARD32 nCharInfos;                              /* followed by this many xCharInfo structures                   */
548     }
549 }
550 else{
551     struct _xQueryFontReply {
552         BYTE type;                                      /* X_Reply                                                      */
553         BYTE pad1;
554         CARD16 sequenceNumber;
555         CARD32 length;                                  /* definitely > 0, even if "nCharInfos" is 0                    */
556         xCharInfo minBounds;
557         CARD32 walign1;
558         xCharInfo maxBounds;
559         CARD32 walign2;
560         CARD16 minCharOrByte2, maxCharOrByte2;
561         CARD16 defaultChar;
562         CARD16 nFontProps;                              /* followed by this many xFontProp structures                   */
563         CARD8 drawDirection;
564         CARD8 minByte1, maxByte1;
565         BOOL allCharsExist;
566         INT16 fontAscent, fontDescent;
567         CARD32 nCharInfos;                              /* followed by this many xCharInfo structures                   */
568     }
569 }
570 alias _xQueryFontReply xQueryFontReply;
571 
572 struct xQueryTextExtentsReply{
573     BYTE type;                                          /* X_Reply                                                      */
574     CARD8 drawDirection;
575     CARD16 sequenceNumber;
576     CARD32 length;                                      /* 0                                                            */
577     INT16 fontAscent, fontDescent;
578     INT16 overallAscent, overallDescent;
579     INT32 overallWidth, overallLeft, overallRight;
580     CARD32 pad;
581 }
582 
583 struct xListFontsReply{
584     BYTE type;                                          /* X_Reply                                                      */
585     BYTE pad1;
586     CARD16 sequenceNumber;
587     CARD32 length;
588     CARD16 nFonts;
589     CARD16 pad2;
590     CARD32 pad3;
591     CARD32 pad4;
592     CARD32 pad5;
593     CARD32 pad6;
594     CARD32 pad7;
595 }
596 
597                                                         /* Warning: this MUST match (up to component renaming) xQueryFontReply */
598 version( X86_64 ){
599     struct xListFontsWithInfoReply{
600         BYTE type;                                      /* X_Reply                                                      */
601         CARD8 nameLength;                               /* 0 indicates end-of-reply-sequence                            */
602         CARD16 sequenceNumber;
603         CARD32 length;                                  /* definitely > 0, even if "nameLength" is 0                    */
604         xCharInfo minBounds;
605         xCharInfo maxBounds;
606         CARD16 minCharOrByte2, maxCharOrByte2;
607         CARD16 defaultChar;
608         CARD16 nFontProps;                              /* followed by this many xFontProp structures                   */
609         CARD8 drawDirection;
610         CARD8 minByte1, maxByte1;
611         BOOL allCharsExist;
612         INT16 fontAscent, fontDescent;
613         CARD32 nReplies;                                /* hint as to how many more replies might be coming             */
614     }
615 }
616 else{
617     struct xListFontsWithInfoReply{
618         BYTE type;                                      /* X_Reply                                                      */
619         CARD8 nameLength;                               /* 0 indicates end-of-reply-sequence                            */
620         CARD16 sequenceNumber;
621         CARD32 length;                                  /* definitely > 0, even if "nameLength" is 0                    */
622         xCharInfo minBounds;
623         CARD32 walign1;
624         xCharInfo maxBounds;
625         CARD32 align2;
626         CARD16 minCharOrByte2, maxCharOrByte2;
627         CARD16 defaultChar;
628         CARD16 nFontProps;                              /* followed by this many xFontProp structures                   */
629         CARD8 drawDirection;
630         CARD8 minByte1, maxByte1;
631         BOOL allCharsExist;
632         INT16 fontAscent, fontDescent;
633         CARD32 nReplies;                                /* hint as to how many more replies might be coming             */
634     }
635 }
636 
637 
638 struct xGetFontPathReply{
639     BYTE type;                                          /* X_Reply                                                      */
640     BYTE pad1;
641     CARD16 sequenceNumber;
642     CARD32 length;
643     CARD16 nPaths;
644     CARD16 pad2;
645     CARD32 pad3;
646     CARD32 pad4;
647     CARD32 pad5;
648     CARD32 pad6;
649     CARD32 pad7;
650 }
651 
652 struct xGetImageReply{
653     BYTE type;                                          /* X_Reply                                                      */
654     CARD8 depth;
655     CARD16 sequenceNumber;
656     CARD32 length;
657     VisualID visual;
658     CARD32 pad3;
659     CARD32 pad4;
660     CARD32 pad5;
661     CARD32 pad6;
662     CARD32 pad7;
663 }
664 
665 struct xListInstalledColormapsReply{
666     BYTE type;                                          /* X_Reply                                                      */
667     BYTE pad1;
668     CARD16 sequenceNumber;
669     CARD32 length;
670     CARD16 nColormaps;
671     CARD16 pad2;
672     CARD32 pad3;
673     CARD32 pad4;
674     CARD32 pad5;
675     CARD32 pad6;
676     CARD32 pad7;
677 }
678 
679 struct xAllocColorReply{
680     BYTE type;                                          /* X_Reply                                                      */
681     BYTE pad1;
682     CARD16 sequenceNumber;
683     CARD32 length;                                      /* 0                                                            */
684     CARD16 red, green, blue;
685     CARD16 pad2;
686     CARD32 pixel;
687     CARD32 pad3;
688     CARD32 pad4;
689     CARD32 pad5;
690 }
691 
692 struct xAllocNamedColorReply{
693     BYTE type;                                          /* X_Reply                                                      */
694     BYTE pad1;
695     CARD16 sequenceNumber;
696     CARD32 length;                                      /* 0                                                            */
697     CARD32 pixel;
698     CARD16 exactRed, exactGreen, exactBlue;
699     CARD16 screenRed, screenGreen, screenBlue;
700     CARD32 pad2;
701     CARD32 pad3;
702 }
703 
704 struct xAllocColorCellsReply{
705     BYTE type;                                          /* X_Reply                                                      */
706     BYTE pad1;
707     CARD16 sequenceNumber;
708     CARD32 length;
709     CARD16 nPixels, nMasks;
710     CARD32 pad3;
711     CARD32 pad4;
712     CARD32 pad5;
713     CARD32 pad6;
714     CARD32 pad7;
715 }
716 
717 struct xAllocColorPlanesReply{
718     BYTE type;                                          /* X_Reply                                                      */
719     BYTE pad1;
720     CARD16 sequenceNumber;
721     CARD32 length;
722     CARD16 nPixels;
723     CARD16 pad2;
724     CARD32 redMask, greenMask, blueMask;
725     CARD32 pad3;
726     CARD32 pad4;
727 }
728 
729 struct xQueryColorsReply{
730     BYTE type;                                          /* X_Reply                                                      */
731     BYTE pad1;
732     CARD16 sequenceNumber;
733     CARD32 length;
734     CARD16 nColors;
735     CARD16 pad2;
736     CARD32 pad3;
737     CARD32 pad4;
738     CARD32 pad5;
739     CARD32 pad6;
740     CARD32 pad7;
741 }
742 
743 struct xLookupColorReply{
744     BYTE type;                                          /* X_Reply                                                      */
745     BYTE pad1;
746     CARD16 sequenceNumber;
747     CARD32 length;                                      /* 0                                                            */
748     CARD16 exactRed, exactGreen, exactBlue;
749     CARD16 screenRed, screenGreen, screenBlue;
750     CARD32 pad3;
751     CARD32 pad4;
752     CARD32 pad5;
753 }
754 
755 struct xQueryBestSizeReply{
756     BYTE type;                                          /* X_Reply                                                      */
757     BYTE pad1;
758     CARD16 sequenceNumber;
759     CARD32 length;                                      /* 0                                                            */
760     CARD16 width, height;
761     CARD32 pad3;
762     CARD32 pad4;
763     CARD32 pad5;
764     CARD32 pad6;
765     CARD32 pad7;
766 }
767 
768 struct xQueryExtensionReply{
769     BYTE type;                                          /* X_Reply                                                      */
770     BYTE pad1;
771     CARD16 sequenceNumber;
772     CARD32 length;                                      /* 0                                                            */
773     BOOL  present;
774     CARD8 major_opcode;
775     CARD8 first_event;
776     CARD8 first_error;
777     CARD32 pad3;
778     CARD32 pad4;
779     CARD32 pad5;
780     CARD32 pad6;
781     CARD32 pad7;
782 }
783 
784 struct xListExtensionsReply{
785     BYTE type;                                          /* X_Reply                                                      */
786     CARD8 nExtensions;
787     CARD16 sequenceNumber;
788     CARD32 length;
789     CARD32 pad2;
790     CARD32 pad3;
791     CARD32 pad4;
792     CARD32 pad5;
793     CARD32 pad6;
794     CARD32 pad7;
795 }
796 
797 
798 struct xSetMappingReply{
799     BYTE   type;                                        /* X_Reply                                                      */
800     CARD8  success;
801     CARD16 sequenceNumber;
802     CARD32 length;
803     CARD32 pad2;
804     CARD32 pad3;
805     CARD32 pad4;
806     CARD32 pad5;
807     CARD32 pad6;
808     CARD32 pad7;
809 }
810 
811 alias xSetMappingReply xSetPointerMappingReply;
812 alias xSetMappingReply xSetModifierMappingReply;
813 
814 struct xGetPointerMappingReply{
815     BYTE type;                                          /* X_Reply                                                      */
816     CARD8 nElts;                                        /* how many elements does the map have                          */
817     CARD16 sequenceNumber;
818     CARD32 length;
819     CARD32 pad2;
820     CARD32 pad3;
821     CARD32 pad4;
822     CARD32 pad5;
823     CARD32 pad6;
824     CARD32 pad7;
825 }
826 
827 struct xGetKeyboardMappingReply{
828     BYTE type;
829     CARD8 keySymsPerKeyCode;
830     CARD16 sequenceNumber;
831     CARD32 length;
832     CARD32 pad2;
833     CARD32 pad3;
834     CARD32 pad4;
835     CARD32 pad5;
836     CARD32 pad6;
837     CARD32 pad7;
838 }
839 
840 struct xGetModifierMappingReply{
841     BYTE type;
842     CARD8 numKeyPerModifier;
843     CARD16 sequenceNumber;
844     CARD32 length;
845     CARD32 pad1;
846     CARD32 pad2;
847     CARD32 pad3;
848     CARD32 pad4;
849     CARD32 pad5;
850     CARD32 pad6;
851 }
852 
853 struct xGetKeyboardControlReply{
854     BYTE type;                                          /* X_Reply                                                      */
855     BOOL globalAutoRepeat;
856     CARD16 sequenceNumber;
857     CARD32 length;                                      /* 5                                                            */
858     CARD32 ledMask;
859     CARD8 keyClickPercent, bellPercent;
860     CARD16 bellPitch, bellDuration;
861     CARD16 pad;
862     BYTE[32] map;                                       /* bit masks start here                                         */
863 }
864 
865 struct xGetPointerControlReply{
866     BYTE type;                                          /* X_Reply                                                      */
867     BYTE pad1;
868     CARD16 sequenceNumber;
869     CARD32 length;                                      /* 0                                                            */
870     CARD16 accelNumerator, accelDenominator;
871     CARD16 threshold;
872     CARD16 pad2;
873     CARD32 pad3;
874     CARD32 pad4;
875     CARD32 pad5;
876     CARD32 pad6;
877 }
878 
879 struct xGetScreenSaverReply{
880     BYTE type;                                          /* X_Reply                                                      */
881     BYTE pad1;
882     CARD16 sequenceNumber;
883     CARD32 length;                                      /* 0                                                            */
884     CARD16 timeout, interval;
885     BOOL preferBlanking;
886     BOOL allowExposures;
887     CARD16 pad2;
888     CARD32 pad3;
889     CARD32 pad4;
890     CARD32 pad5;
891     CARD32 pad6;
892 }
893 
894 struct xListHostsReply{
895     BYTE type;                                          /* X_Reply                                                      */
896     BOOL enabled;
897     CARD16 sequenceNumber;
898     CARD32 length;
899     CARD16 nHosts;
900     CARD16 pad1;
901     CARD32 pad3;
902     CARD32 pad4;
903     CARD32 pad5;
904     CARD32 pad6;
905     CARD32 pad7;
906 }
907 
908 
909 /*****************************************************************
910  * Xerror
911  *    All errors  are 32 bytes
912  *****************************************************************/
913 
914 struct xError{
915     BYTE type;                                          /* X_Error                                                      */
916     BYTE errorCode;
917     CARD16 sequenceNumber;                              /* the nth request from this client                             */
918     CARD32 resourceID;
919     CARD16 minorCode;
920     CARD8 majorCode;
921     BYTE pad1;
922     CARD32 pad3;
923     CARD32 pad4;
924     CARD32 pad5;
925     CARD32 pad6;
926     CARD32 pad7;
927 }
928 
929 /*****************************************************************
930  * xEvent
931  *    All events are 32 bytes
932  *****************************************************************/
933 
934 struct _xEvent {
935     union u{
936         struct u{
937             BYTE type;
938             BYTE detail;
939             CARD16 sequenceNumber;
940         }
941         struct keyButtonPointer{
942             CARD32 pad00;
943             Time time;
944             Window root, event, child;
945             INT16 rootX, rootY, eventX, eventY;
946             KeyButMask state;
947             BOOL sameScreen;
948             BYTE pad1;
949         }
950         struct enterLeave{
951             CARD32 pad00;
952             Time time;
953             Window root, event, child;
954             INT16 rootX, rootY, eventX, eventY;
955             KeyButMask state;
956             BYTE mode;                                  /* really XMode                                                 */
957             BYTE flags;                                 /* sameScreen and focus booleans, packed together               */
958             enum int ELFlagFocus       = 1 << 0;
959             enum int ELFlagSameScreen  = 1 << 1;
960         }
961         struct focus{
962             CARD32 pad00;
963             Window window;
964             BYTE mode;                                  /* really XMode                                                 */
965             BYTE pad1, pad2, pad3;
966         }
967         struct expose{
968             CARD32 pad00;
969             Window window;
970             CARD16 x, y, width, height;
971             CARD16 count;
972             CARD16 pad2;
973         }
974         struct graphicsExposure{
975             CARD32 pad00;
976             Drawable drawable;
977             CARD16 x, y, width, height;
978             CARD16 minorEvent;
979             CARD16 count;
980             BYTE majorEvent;
981             BYTE pad1, pad2, pad3;
982         }
983         struct noExposure{
984             CARD32 pad00;
985             Drawable drawable;
986             CARD16 minorEvent;
987             BYTE majorEvent;
988             BYTE bpad;
989         }
990         struct visibility{
991             CARD32 pad00;
992             Window window;
993             CARD8 state;
994             BYTE pad1, pad2, pad3;
995         }
996         struct createNotify{
997             CARD32 pad00;
998             Window parent, window;
999             INT16 x, y;
1000             CARD16 width, height, borderWidth;
1001             BOOL c_override;
1002             BYTE bpad;
1003         }
1004     /*
1005      * The event fields in the structures for DestroyNotify, UnmapNotify,
1006      * MapNotify, ReparentNotify, ConfigureNotify, CirculateNotify, GravityNotify,
1007      * must be at the same offset because server internal code is depending upon
1008      * this to patch up the events before they are delivered.
1009      * Also note that MapRequest, ConfigureRequest and CirculateRequest have
1010      * the same offset for the event window.
1011      */
1012         struct destroyNotify{
1013             CARD32 pad00;
1014             Window event, window;
1015         }
1016         struct unmapNotify{
1017             CARD32 pad00;
1018             Window event, window;
1019             BOOL fromConfigure;
1020             BYTE pad1, pad2, pad3;
1021         }
1022         struct mapNotify{
1023             CARD32 pad00;
1024             Window event, window;
1025             BOOL c_override;
1026             BYTE pad1, pad2, pad3;
1027         }
1028         struct mapRequest{
1029             CARD32 pad00;
1030             Window parent, window;
1031         }
1032         struct reparent{
1033             CARD32 pad00;
1034             Window event, window, parent;
1035             INT16 x, y;
1036             BOOL c_override;
1037             BYTE pad1, pad2, pad3;
1038         }
1039         struct configureNotify{
1040             CARD32 pad00;
1041             Window event, window, aboveSibling;
1042             INT16 x, y;
1043             CARD16 width, height, borderWidth;
1044             BOOL c_override;
1045             BYTE bpad;
1046         }
1047         struct configureRequest{
1048             CARD32 pad00;
1049             Window parent, window, sibling;
1050             INT16 x, y;
1051             CARD16 width, height, borderWidth;
1052             CARD16 valueMask;
1053             CARD32 pad1;
1054         }
1055         struct gravity{
1056                 CARD32 pad00;
1057             Window event, window;
1058             INT16 x, y;
1059             CARD32 pad1, pad2, pad3, pad4;
1060         }
1061         struct resizeRequest{
1062             CARD32 pad00;
1063             Window window;
1064             CARD16 width, height;
1065         }
1066         struct circulate{
1067     /* The event field in the circulate record is really the parent when this
1068        is used as a CirculateRequest instead of a CirculateNotify */
1069             CARD32 pad00;
1070             Window event, window, parent;
1071             BYTE place;                                 /* Top or Bottom                                                */
1072             BYTE pad1, pad2, pad3;
1073         }
1074         struct property{
1075             CARD32 pad00;
1076             Window window;
1077             Atom atom;
1078             Time time;
1079             BYTE state;                                 /* NewValue or Deleted                                          */
1080             BYTE pad1;
1081             CARD16 pad2;
1082         }
1083         struct selectionClear{
1084             CARD32 pad00;
1085             Time time;
1086             Window window;
1087             Atom atom;
1088         }
1089         struct selectionRequest{
1090             CARD32 pad00;
1091             Time time;
1092             Window owner, requestor;
1093             Atom selection, target, property;
1094         }
1095         struct selectionNotify{
1096             CARD32 pad00;
1097             Time time;
1098             Window requestor;
1099             Atom selection, target, property;
1100         }
1101         struct colormap{
1102             CARD32 pad00;
1103             Window window;
1104             Colormap colormap;
1105             BOOL c_new;
1106             BYTE state;                                 /* Installed or UnInstalled                                     */
1107             BYTE pad1, pad2;
1108         }
1109         struct mappingNotify{
1110             CARD32 pad00;
1111             CARD8 request;
1112             KeyCode firstKeyCode;
1113             CARD8 count;
1114             BYTE pad1;
1115         }
1116         struct clientMessage{
1117             CARD32 pad00;
1118             Window window;
1119             union u{
1120                 struct l{
1121                     Atom type;
1122                     INT32 longs0;
1123                     INT32 longs1;
1124                     INT32 longs2;
1125                     INT32 longs3;
1126                     INT32 longs4;
1127                 }
1128                 struct s{
1129                     Atom type;
1130                     INT16 shorts0;
1131                     INT16 shorts1;
1132                     INT16 shorts2;
1133                     INT16 shorts3;
1134                     INT16 shorts4;
1135                     INT16 shorts5;
1136                     INT16 shorts6;
1137                     INT16 shorts7;
1138                     INT16 shorts8;
1139                     INT16 shorts9;
1140                 }
1141                 struct b{
1142                     Atom type;
1143                     INT8[20] bytes;
1144                 }
1145             }
1146         }
1147     }
1148 }
1149 alias _xEvent xEvent;
1150 
1151 /*********************************************************
1152  *
1153  * Generic event
1154  *
1155  * Those events are not part of the core protocol spec and can be used by
1156  * various extensions.
1157  * type is always GenericEvent
1158  * extension is the minor opcode of the extension the event belongs to.
1159  * evtype is the actual event type, unique __per extension__.
1160  *
1161  * GenericEvents can be longer than 32 bytes, with the length field
1162  * specifying the number of 4 byte blocks after the first 32 bytes.
1163  *
1164  *
1165  */
1166 struct xGenericEvent{
1167     BYTE    type;
1168     CARD8   extension;
1169     CARD16  sequenceNumber;
1170     CARD32  length;
1171     CARD16  evtype;
1172     CARD16  pad2;
1173     CARD32  pad3;
1174     CARD32  pad4;
1175     CARD32  pad5;
1176     CARD32  pad6;
1177     CARD32  pad7;
1178 }
1179 
1180 
1181 
1182 /* KeymapNotify events are not included in the above union because they
1183    are different from all other events: they do not have a "detail"
1184    or "sequenceNumber", so there is room for a 248-bit key mask. */
1185 
1186 struct xKeymapEvent{
1187     BYTE type;
1188     BYTE[31] map;
1189 }
1190 
1191 const size_t XEventSize = xEvent.sizeof;
1192 
1193 /* XReply is the union of all the replies above whose "fixed part"
1194 fits in 32 bytes.  It does NOT include GetWindowAttributesReply,
1195 QueryFontReply, QueryKeymapReply, or GetKeyboardControlReply
1196 ListFontsWithInfoReply */
1197 
1198 union xReply{
1199     xGenericReply                   generic;
1200     xGetGeometryReply               geom;
1201     xQueryTreeReply                 tree;
1202     xInternAtomReply                atom;
1203     xGetAtomNameReply               atomName;
1204     xGetPropertyReply               propertyReply;
1205     xListPropertiesReply            listProperties;
1206     xGetSelectionOwnerReply         selection;
1207     xGrabPointerReply               grabPointer;
1208     xGrabKeyboardReply              grabKeyboard;
1209     xQueryPointerReply              pointer;
1210     xGetMotionEventsReply           motionEvents;
1211     xTranslateCoordsReply           coords;
1212     xGetInputFocusReply             inputFocus;
1213     xQueryTextExtentsReply          textExtents;
1214     xListFontsReply                 fonts;
1215     xGetFontPathReply               fontPath;
1216     xGetImageReply                  image;
1217     xListInstalledColormapsReply    colormaps;
1218     xAllocColorReply                allocColor;
1219     xAllocNamedColorReply           allocNamedColor;
1220     xAllocColorCellsReply           colorCells;
1221     xAllocColorPlanesReply          colorPlanes;
1222     xQueryColorsReply               colors;
1223     xLookupColorReply               lookupColor;
1224     xQueryBestSizeReply             bestSize;
1225     xQueryExtensionReply            extension;
1226     xListExtensionsReply            extensions;
1227     xSetModifierMappingReply        setModifierMapping;
1228     xGetModifierMappingReply        getModifierMapping;
1229     xSetPointerMappingReply         setPointerMapping;
1230     xGetKeyboardMappingReply        getKeyboardMapping;
1231     xGetPointerMappingReply         getPointerMapping;
1232     xGetPointerControlReply         pointerControl;
1233     xGetScreenSaverReply            screenSaver;
1234     xListHostsReply                 hosts;
1235     xError                          error;
1236     xEvent                          event;
1237 }
1238 
1239 /*****************************************************************
1240  * REQUESTS
1241  *****************************************************************/
1242 
1243 
1244                                                         /* Request structure                                            */
1245 
1246 struct _xReq{
1247     CARD8 reqType;
1248     CARD8 data;                                         /* meaning depends on request type                              */
1249     CARD16 length;                                  /* length in 4 bytes quantities of whole request, including this header */
1250 }
1251 alias _xReq xReq;
1252 
1253 /*****************************************************************
1254  *  structures that follow request.
1255  *****************************************************************/
1256 
1257 /* ResourceReq is used for any request which has a resource ID
1258    (or Atom or Time) as its one and only argument.  */
1259 
1260 struct xResourceReq{
1261     CARD8 reqType;
1262     BYTE pad;
1263     CARD16 length;
1264     CARD32 id;                                          /* a Window, Drawable, Font, GContext, Pixmap, etc.             */
1265 }
1266 
1267 struct xCreateWindowReq{
1268     CARD8 reqType;
1269     CARD8 depth;
1270     CARD16 length;
1271     Window wid, parent;
1272     INT16 x, y;
1273     CARD16 width, height, borderWidth;
1274     CARD16 c_class;
1275     VisualID visual;
1276     CARD32 mask;
1277 }
1278 
1279 struct xChangeWindowAttributesReq{
1280     CARD8 reqType;
1281     BYTE pad;
1282     CARD16 length;
1283     Window window;
1284     CARD32 valueMask;
1285 }
1286 
1287 struct xChangeSaveSetReq{
1288     CARD8 reqType;
1289     BYTE mode;
1290     CARD16 length;
1291     Window window;
1292 }
1293 
1294 struct xReparentWindowReq{
1295     CARD8 reqType;
1296     BYTE pad;
1297     CARD16 length;
1298     Window window, parent;
1299     INT16 x, y;
1300 }
1301 
1302 struct xConfigureWindowReq{
1303     CARD8 reqType;
1304     CARD8 pad;
1305     CARD16 length;
1306     Window window;
1307     CARD16 mask;
1308     CARD16 pad2;
1309 }
1310 
1311 struct xCirculateWindowReq{
1312     CARD8 reqType;
1313     CARD8 direction;
1314     CARD16 length;
1315     Window window;
1316 }
1317 
1318 struct xInternAtomReq{                                  /* followed by padded string                                    */
1319     CARD8 reqType;
1320     BOOL onlyIfExists;
1321     CARD16 length;
1322     CARD16 nbytes ;                                 /* number of bytes in string                                    */
1323     CARD16 pad;
1324 }
1325 
1326 struct xChangePropertyReq{
1327     CARD8 reqType;
1328     CARD8 mode;
1329     CARD16 length;
1330     Window window;
1331     Atom property, type;
1332     CARD8 format;
1333     BYTE[3] pad;
1334     CARD32 nUnits;                                  /* length of stuff following, depends on format                 */
1335 }
1336 
1337 struct xDeletePropertyReq{
1338     CARD8 reqType;
1339     BYTE pad;
1340     CARD16 length;
1341     Window window;
1342     Atom property;
1343 }
1344 
1345 struct xGetPropertyReq{
1346     CARD8 reqType;
1347     BOOL c_delete;
1348     CARD16 length;
1349     Window window;
1350     Atom property, type;
1351     CARD32 longOffset;
1352     CARD32 longLength;
1353 }
1354 
1355 struct xSetSelectionOwnerReq{
1356     CARD8 reqType;
1357     BYTE pad;
1358     CARD16 length;
1359     Window window;
1360     Atom selection;
1361     Time time;
1362 }
1363 
1364 struct xConvertSelectionReq{
1365     CARD8 reqType;
1366     BYTE pad;
1367     CARD16 length;
1368     Window requestor;
1369     Atom selection, target, property;
1370     Time time;
1371 }
1372 
1373 version( X86_64 ){
1374     struct xSendEventReq{
1375         CARD8 reqType;
1376         BOOL propagate;
1377         CARD16 length;
1378         Window destination;
1379         CARD32 eventMask;
1380         BYTE[SIZEOF!xEvent()] eventdata;   /* the structure should have been quad-aligned                  */
1381     }
1382 }
1383 else{
1384     struct xSendEventReq{
1385         CARD8 reqType;
1386         BOOL propagate;
1387         CARD16 length;
1388         Window destination;
1389         CARD32 eventMask;
1390         xEvent event;
1391     }
1392 }
1393 
1394 struct xGrabPointerReq{
1395     CARD8 reqType;
1396     BOOL ownerEvents;
1397     CARD16 length;
1398     Window grabWindow;
1399     CARD16 eventMask;
1400     BYTE pointerMode, keyboardMode;
1401     Window confineTo;
1402     Cursor cursor;
1403     Time time;
1404 }
1405 
1406 struct xGrabButtonReq{
1407     CARD8 reqType;
1408     BOOL ownerEvents;
1409     CARD16 length;
1410     Window grabWindow;
1411     CARD16 eventMask;
1412     BYTE pointerMode, keyboardMode;
1413     Window confineTo;
1414     Cursor cursor;
1415     CARD8 button;
1416     BYTE pad;
1417     CARD16 modifiers;
1418 }
1419 
1420 struct xUngrabButtonReq{
1421     CARD8 reqType;
1422     CARD8 button;
1423     CARD16 length;
1424     Window grabWindow;
1425     CARD16 modifiers;
1426     CARD16 pad;
1427 }
1428 
1429 struct xChangeActivePointerGrabReq{
1430     CARD8 reqType;
1431     BYTE pad;
1432     CARD16 length;
1433     Cursor cursor;
1434     Time time;
1435     CARD16 eventMask;
1436     CARD16 pad2;
1437 }
1438 
1439 struct xGrabKeyboardReq{
1440     CARD8 reqType;
1441     BOOL ownerEvents;
1442     CARD16 length;
1443     Window grabWindow;
1444     Time time;
1445     BYTE pointerMode, keyboardMode;
1446     CARD16 pad;
1447 }
1448 
1449 struct xGrabKeyReq{
1450     CARD8 reqType;
1451     BOOL ownerEvents;
1452     CARD16 length;
1453     Window grabWindow;
1454     CARD16 modifiers;
1455     CARD8 key;
1456     BYTE pointerMode, keyboardMode;
1457     BYTE pad1, pad2, pad3;
1458 }
1459 
1460 struct xUngrabKeyReq{
1461     CARD8 reqType;
1462     CARD8 key;
1463     CARD16 length;
1464     Window grabWindow;
1465     CARD16 modifiers;
1466     CARD16 pad;
1467 }
1468 
1469 struct xAllowEventsReq{
1470     CARD8 reqType;
1471     CARD8 mode;
1472     CARD16 length;
1473     Time time;
1474 }
1475 
1476 struct xGetMotionEventsReq{
1477     CARD8 reqType;
1478     BYTE pad;
1479     CARD16 length;
1480     Window window;
1481     Time start, stop;
1482 }
1483 
1484 struct xTranslateCoordsReq{
1485     CARD8 reqType;
1486     BYTE pad;
1487     CARD16 length;
1488     Window srcWid, dstWid;
1489     INT16 srcX, srcY;
1490 }
1491 
1492 struct xWarpPointerReq{
1493     CARD8 reqType;
1494     BYTE pad;
1495     CARD16 length;
1496     Window srcWid, dstWid;
1497     INT16 srcX, srcY;
1498     CARD16 srcWidth, srcHeight;
1499     INT16 dstX, dstY;
1500 }
1501 
1502 struct xSetInputFocusReq{
1503     CARD8 reqType;
1504     CARD8 revertTo;
1505     CARD16 length;
1506     Window focus;
1507     Time time;
1508 }
1509 
1510 struct xOpenFontReq{
1511     CARD8 reqType;
1512     BYTE pad;
1513     CARD16 length;
1514     Font fid;
1515     CARD16 nbytes;
1516     BYTE pad1, pad2;                                    /* string follows on word boundary                              */
1517 }
1518 
1519 struct xQueryTextExtentsReq{
1520     CARD8 reqType;
1521     BOOL oddLength;
1522     CARD16 length;
1523     Font fid;
1524 }
1525 
1526 struct xListFontsReq{
1527     CARD8 reqType;
1528     BYTE pad;
1529     CARD16 length;
1530     CARD16 maxNames;
1531     CARD16 nbytes;                                  /* followed immediately by string bytes                         */
1532 }
1533 
1534 alias xListFontsReq xListFontsWithInfoReq;
1535 
1536 struct xSetFontPathReq{
1537     CARD8 reqType;
1538     BYTE pad;
1539     CARD16 length;
1540     CARD16 nFonts;
1541     BYTE pad1, pad2;                                    /* LISTofSTRING8 follows on word boundary                       */
1542 }
1543 
1544 struct xCreatePixmapReq{
1545     CARD8 reqType;
1546     CARD8 depth;
1547     CARD16 length;
1548     Pixmap pid;
1549     Drawable drawable;
1550     CARD16 width, height;
1551 }
1552 
1553 struct xCreateGCReq{
1554     CARD8 reqType;
1555     BYTE pad;
1556     CARD16 length;
1557     GContext gc;
1558     Drawable drawable;
1559     CARD32 mask;
1560 }
1561 
1562 struct xChangeGCReq{
1563     CARD8 reqType;
1564     BYTE pad;
1565     CARD16 length;
1566     GContext gc;
1567     CARD32 mask;
1568 }
1569 
1570 struct xCopyGCReq{
1571     CARD8 reqType;
1572     BYTE pad;
1573     CARD16 length;
1574     GContext srcGC, dstGC;
1575     CARD32 mask;
1576 }
1577 
1578 struct xSetDashesReq{
1579     CARD8 reqType;
1580     BYTE pad;
1581     CARD16 length;
1582     GContext gc;
1583     CARD16 dashOffset;
1584     CARD16 nDashes;                                 /* length LISTofCARD8 of values following                       */
1585 }
1586 
1587 struct xSetClipRectanglesReq{
1588     CARD8 reqType;
1589     BYTE ordering;
1590     CARD16 length;
1591     GContext gc;
1592     INT16 xOrigin, yOrigin;
1593 }
1594 
1595 struct xClearAreaReq{
1596     CARD8 reqType;
1597     BOOL exposures;
1598     CARD16 length;
1599     Window window;
1600     INT16 x, y;
1601     CARD16 width, height;
1602 }
1603 
1604 struct xCopyAreaReq{
1605     CARD8 reqType;
1606     BYTE pad;
1607     CARD16 length;
1608     Drawable srcDrawable, dstDrawable;
1609     GContext gc;
1610     INT16 srcX, srcY, dstX, dstY;
1611     CARD16 width, height;
1612 }
1613 
1614 struct xCopyPlaneReq{
1615     CARD8 reqType;
1616     BYTE pad;
1617     CARD16 length;
1618     Drawable srcDrawable, dstDrawable;
1619     GContext gc;
1620     INT16 srcX, srcY, dstX, dstY;
1621     CARD16 width, height;
1622     CARD32 bitPlane;
1623 }
1624 
1625 struct xPolyPointReq{
1626     CARD8 reqType;
1627     BYTE coordMode;
1628     CARD16 length;
1629     Drawable drawable;
1630     GContext gc;
1631 }
1632 
1633 alias xPolyPointReq xPolyLineReq;                       /* same request structure                                       */
1634 
1635                                                         /* The following used for PolySegment, PolyRectangle, PolyArc, PolyFillRectangle, PolyFillArc */
1636 
1637 struct xPolySegmentReq{
1638     CARD8 reqType;
1639     BYTE pad;
1640     CARD16 length;
1641     Drawable drawable;
1642     GContext gc;
1643 }
1644 
1645 alias xPolySegmentReq xPolyArcReq;
1646 alias xPolySegmentReq xPolyRectangleReq;
1647 alias xPolySegmentReq xPolyFillRectangleReq;
1648 alias xPolySegmentReq xPolyFillArcReq;
1649 
1650 struct _FillPolyReq {
1651     CARD8 reqType;
1652     BYTE pad;
1653     CARD16 length;
1654     Drawable drawable;
1655     GContext gc;
1656     BYTE shape;
1657     BYTE coordMode;
1658     CARD16 pad1;
1659 }
1660 
1661 alias _FillPolyReq xFillPolyReq;
1662 
1663 
1664 struct _PutImageReq {
1665     CARD8 reqType;
1666     CARD8 format;
1667     CARD16 length;
1668     Drawable drawable;
1669     GContext gc;
1670     CARD16 width, height;
1671     INT16 dstX, dstY;
1672     CARD8 leftPad;
1673     CARD8 depth;
1674     CARD16 pad;
1675 }
1676 alias _PutImageReq xPutImageReq;
1677 
1678 struct xGetImageReq{
1679     CARD8 reqType;
1680     CARD8 format;
1681     CARD16 length;
1682     Drawable drawable;
1683     INT16 x, y;
1684     CARD16 width, height;
1685     CARD32 planeMask;
1686 }
1687 
1688                                                         /* the following used by PolyText8 and PolyText16               */
1689 
1690 struct xPolyTextReq{
1691     CARD8 reqType;
1692     CARD8 pad;
1693     CARD16 length;
1694     Drawable drawable;
1695     GContext gc;
1696     INT16 x, y;                                 /* items (xTextElt) start after struct                          */
1697 }
1698 
1699 alias xPolyTextReq xPolyText8Req;
1700 alias xPolyTextReq xPolyText16Req;
1701 
1702 struct xImageTextReq{
1703     CARD8 reqType;
1704     BYTE nChars;
1705     CARD16 length;
1706     Drawable drawable;
1707     GContext gc;
1708     INT16 x, y;
1709 }
1710 
1711 alias xImageTextReq xImageText8Req;
1712 alias xImageTextReq xImageText16Req;
1713 
1714 struct xCreateColormapReq{
1715     CARD8 reqType;
1716     BYTE alloc;
1717     CARD16 length;
1718     Colormap mid;
1719     Window window;
1720     VisualID visual;
1721 }
1722 
1723 struct xCopyColormapAndFreeReq{
1724     CARD8 reqType;
1725     BYTE pad;
1726     CARD16 length;
1727     Colormap mid;
1728     Colormap srcCmap;
1729 }
1730 
1731 struct xAllocColorReq{
1732     CARD8 reqType;
1733     BYTE pad;
1734     CARD16 length;
1735     Colormap cmap;
1736     CARD16 red, green, blue;
1737     CARD16 pad2;
1738 }
1739 
1740 struct xAllocNamedColorReq{
1741     CARD8 reqType;
1742     BYTE pad;
1743     CARD16 length;
1744     Colormap cmap;
1745     CARD16 nbytes;                                  /* followed by structure                                        */
1746     BYTE pad1, pad2;
1747 }
1748 
1749 struct xAllocColorCellsReq{
1750     CARD8 reqType;
1751     BOOL contiguous;
1752     CARD16 length;
1753     Colormap cmap;
1754     CARD16 colors, planes;
1755 }
1756 
1757 struct xAllocColorPlanesReq{
1758     CARD8 reqType;
1759     BOOL contiguous;
1760     CARD16 length;
1761     Colormap cmap;
1762     CARD16 colors, red, green, blue;
1763 }
1764 
1765 struct xFreeColorsReq{
1766     CARD8 reqType;
1767     BYTE pad;
1768     CARD16 length;
1769     Colormap cmap;
1770     CARD32 planeMask;
1771 }
1772 
1773 struct xStoreColorsReq{
1774     CARD8 reqType;
1775     BYTE pad;
1776     CARD16 length;
1777     Colormap cmap;
1778 }
1779 
1780 struct xStoreNamedColorReq{
1781     CARD8 reqType;
1782     CARD8 flags;                                        /* DoRed, DoGreen, DoBlue, as in xColorItem                     */
1783     CARD16 length;
1784     Colormap cmap;
1785     CARD32 pixel;
1786     CARD16 nbytes;                                  /* number of name string bytes following structure              */
1787     BYTE pad1, pad2;
1788 }
1789 
1790 struct xQueryColorsReq{
1791     CARD8 reqType;
1792     BYTE pad;
1793     CARD16 length;
1794     Colormap cmap;
1795 }
1796 
1797 struct xLookupColorReq{                                 /* followed  by string of length len                            */
1798     CARD8 reqType;
1799     BYTE pad;
1800     CARD16 length;
1801     Colormap cmap;
1802     CARD16 nbytes;                                  /* number of string bytes following structure                   */
1803     BYTE pad1, pad2;
1804 }
1805 
1806 struct xCreateCursorReq{
1807     CARD8 reqType;
1808     BYTE pad;
1809     CARD16 length;
1810     Cursor cid;
1811     Pixmap source, mask;
1812     CARD16 foreRed, foreGreen, foreBlue;
1813     CARD16 backRed, backGreen, backBlue;
1814     CARD16 x, y;
1815 }
1816 
1817 struct xCreateGlyphCursorReq{
1818     CARD8 reqType;
1819     BYTE pad;
1820     CARD16 length;
1821     Cursor cid;
1822     Font source, mask;
1823     CARD16 sourceChar, maskChar;
1824     CARD16 foreRed, foreGreen, foreBlue;
1825     CARD16 backRed, backGreen, backBlue;
1826 }
1827 
1828 struct xRecolorCursorReq{
1829     CARD8 reqType;
1830     BYTE pad;
1831     CARD16 length;
1832     Cursor cursor;
1833     CARD16 foreRed, foreGreen, foreBlue;
1834     CARD16 backRed, backGreen, backBlue;
1835 }
1836 
1837 struct xQueryBestSizeReq{
1838     CARD8 reqType;
1839     CARD8 c_class;
1840     CARD16 length;
1841     Drawable drawable;
1842     CARD16 width, height;
1843 }
1844 
1845 struct xQueryExtensionReq{
1846     CARD8 reqType;
1847     BYTE pad;
1848     CARD16 length;
1849     CARD16 nbytes;                                  /* number of string bytes following structure                   */
1850     BYTE pad1, pad2;
1851 }
1852 
1853 struct xSetModifierMappingReq{
1854     CARD8   reqType;
1855     CARD8   numKeyPerModifier;
1856     CARD16  length;
1857 }
1858 
1859 struct xSetPointerMappingReq{
1860     CARD8 reqType;
1861     CARD8 nElts;                                        /* how many elements in the map                                 */
1862     CARD16 length;
1863 }
1864 
1865 struct xGetKeyboardMappingReq{
1866     CARD8 reqType;
1867     BYTE pad;
1868     CARD16 length;
1869     KeyCode firstKeyCode;
1870     CARD8 count;
1871     CARD16 pad1;
1872 }
1873 
1874 struct xChangeKeyboardMappingReq{
1875     CARD8 reqType;
1876     CARD8 keyCodes;
1877     CARD16 length;
1878     KeyCode firstKeyCode;
1879     CARD8 keySymsPerKeyCode;
1880     CARD16 pad1;
1881 }
1882 
1883 struct xChangeKeyboardControlReq{
1884     CARD8 reqType;
1885     BYTE pad;
1886     CARD16 length;
1887     CARD32 mask;
1888 }
1889 
1890 struct xBellReq{
1891     CARD8 reqType;
1892     INT8 percent;                                       /* -100 to 100                                                  */
1893     CARD16 length;
1894 }
1895 
1896 struct xChangePointerControlReq{
1897     CARD8 reqType;
1898     BYTE pad;
1899     CARD16 length;
1900     INT16 accelNum, accelDenum;
1901     INT16 threshold;
1902     BOOL doAccel, doThresh;
1903 }
1904 
1905 struct xSetScreenSaverReq{
1906     CARD8 reqType;
1907     BYTE pad;
1908     CARD16 length;
1909     INT16 timeout, interval;
1910     BYTE preferBlank, allowExpose;
1911     CARD16 pad2;
1912 }
1913 
1914 struct xChangeHostsReq{
1915     CARD8 reqType;
1916     BYTE mode;
1917     CARD16 length;
1918     CARD8 hostFamily;
1919     BYTE pad;
1920     CARD16 hostLength;
1921 }
1922 
1923 struct xListHostsReq{
1924     CARD8 reqType;
1925     BYTE pad;
1926     CARD16 length;
1927 }
1928 
1929 struct xChangeModeReq{
1930     CARD8 reqType;
1931     BYTE mode;
1932     CARD16 length;
1933 }
1934 
1935 alias xChangeModeReq xSetAccessControlReq;
1936 alias xChangeModeReq xSetCloseDownModeReq;
1937 alias xChangeModeReq xForceScreenSaverReq;
1938 
1939 struct xRotatePropertiesReq{                            /* followed by LIST of ATOM                                     */
1940     CARD8 reqType;
1941     BYTE pad;
1942     CARD16 length;
1943     Window window;
1944     CARD16 nAtoms;
1945     INT16 nPositions;
1946 }
1947 
1948                                                         /* Reply codes                                                  */
1949 
1950 const int X_Reply    = 1;                               /* Normal reply                                                 */
1951 const int X_Error    = 0;                               /* Error                                                        */
1952 
1953                                                         /* Request codes                                                */
1954 enum {
1955     X_CreateWindow                   = 1,
1956     X_ChangeWindowAttributes         = 2,
1957     X_GetWindowAttributes            = 3,
1958     X_DestroyWindow                  = 4,
1959     X_DestroySubwindows              = 5,
1960     X_ChangeSaveSet                  = 6,
1961     X_ReparentWindow                 = 7,
1962     X_MapWindow                      = 8,
1963     X_MapSubwindows                  = 9,
1964     X_UnmapWindow                   = 10,
1965     X_UnmapSubwindows               = 11,
1966     X_ConfigureWindow               = 12,
1967     X_CirculateWindow               = 13,
1968     X_GetGeometry                   = 14,
1969     X_QueryTree                     = 15,
1970     X_InternAtom                    = 16,
1971     X_GetAtomName                   = 17,
1972     X_ChangeProperty                = 18,
1973     X_DeleteProperty                = 19,
1974     X_GetProperty                   = 20,
1975     X_ListProperties                = 21,
1976     X_SetSelectionOwner             = 22,
1977     X_GetSelectionOwner             = 23,
1978     X_ConvertSelection              = 24,
1979     X_SendEvent                     = 25,
1980     X_GrabPointer                   = 26,
1981     X_UngrabPointer                 = 27,
1982     X_GrabButton                    = 28,
1983     X_UngrabButton                  = 29,
1984     X_ChangeActivePointerGrab       = 30,
1985     X_GrabKeyboard                  = 31,
1986     X_UngrabKeyboard                = 32,
1987     X_GrabKey                       = 33,
1988     X_UngrabKey                     = 34,
1989     X_AllowEvents                   = 35,
1990     X_GrabServer                    = 36,
1991     X_UngrabServer                  = 37,
1992     X_QueryPointer                  = 38,
1993     X_GetMotionEvents               = 39,
1994     X_TranslateCoords               = 40,
1995     X_WarpPointer                   = 41,
1996     X_SetInputFocus                 = 42,
1997     X_GetInputFocus                 = 43,
1998     X_QueryKeymap                   = 44,
1999     X_OpenFont                      = 45,
2000     X_CloseFont                     = 46,
2001     X_QueryFont                     = 47,
2002     X_QueryTextExtents              = 48,
2003     X_ListFonts                     = 49,
2004     X_ListFontsWithInfo             = 50,
2005     X_SetFontPath                   = 51,
2006     X_GetFontPath                   = 52,
2007     X_CreatePixmap                  = 53,
2008     X_FreePixmap                    = 54,
2009     X_CreateGC                      = 55,
2010     X_ChangeGC                      = 56,
2011     X_CopyGC                        = 57,
2012     X_SetDashes                     = 58,
2013     X_SetClipRectangles             = 59,
2014     X_FreeGC                        = 60,
2015     X_ClearArea                     = 61,
2016     X_CopyArea                      = 62,
2017     X_CopyPlane                     = 63,
2018     X_PolyPoint                     = 64,
2019     X_PolyLine                      = 65,
2020     X_PolySegment                   = 66,
2021     X_PolyRectangle                 = 67,
2022     X_PolyArc                       = 68,
2023     X_FillPoly                      = 69,
2024     X_PolyFillRectangle             = 70,
2025     X_PolyFillArc                   = 71,
2026     X_PutImage                      = 72,
2027     X_GetImage                      = 73,
2028     X_PolyText8                     = 74,
2029     X_PolyText16                    = 75,
2030     X_ImageText8                    = 76,
2031     X_ImageText16                   = 77,
2032     X_CreateColormap                = 78,
2033     X_FreeColormap                  = 79,
2034     X_CopyColormapAndFree           = 80,
2035     X_InstallColormap               = 81,
2036     X_UninstallColormap             = 82,
2037     X_ListInstalledColormaps        = 83,
2038     X_AllocColor                    = 84,
2039     X_AllocNamedColor               = 85,
2040     X_AllocColorCells               = 86,
2041     X_AllocColorPlanes              = 87,
2042     X_FreeColors                    = 88,
2043     X_StoreColors                   = 89,
2044     X_StoreNamedColor               = 90,
2045     X_QueryColors                   = 91,
2046     X_LookupColor                   = 92,
2047     X_CreateCursor                  = 93,
2048     X_CreateGlyphCursor             = 94,
2049     X_FreeCursor                    = 95,
2050     X_RecolorCursor                 = 96,
2051     X_QueryBestSize                 = 97,
2052     X_QueryExtension                = 98,
2053     X_ListExtensions                = 99,
2054     X_ChangeKeyboardMapping         = 100,
2055     X_GetKeyboardMapping            = 101,
2056     X_ChangeKeyboardControl         = 102,
2057     X_GetKeyboardControl            = 103,
2058     X_Bell                          = 104,
2059     X_ChangePointerControl          = 105,
2060     X_GetPointerControl             = 106,
2061     X_SetScreenSaver                = 107,
2062     X_GetScreenSaver                = 108,
2063     X_ChangeHosts                   = 109,
2064     X_ListHosts                     = 110,
2065     X_SetAccessControl              = 111,
2066     X_SetCloseDownMode              = 112,
2067     X_KillClient                    = 113,
2068     X_RotateProperties              = 114,
2069     X_ForceScreenSaver              = 115,
2070     X_SetPointerMapping             = 116,
2071     X_GetPointerMapping             = 117,
2072     X_SetModifierMapping            = 118,
2073     X_GetModifierMapping            = 119,
2074     X_NoOperation                   = 127
2075 }
2076 
2077                                                         /* restore these definitions back to the typedefs in X.h        */
2078 //~ #undef Window
2079 //~ #undef Drawable
2080 //~ #undef Font
2081 //~ #undef Pixmap
2082 //~ #undef Cursor
2083 //~ #undef Colormap
2084 //~ #undef GContext
2085 //~ #undef Atom
2086 //~ #undef VisualID
2087 //~ #undef Time
2088 //~ #undef KeyCode
2089 //~ #undef KeySym