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