1 /************************************************************
2 
3 Copyright 1989, 1998  The Open Group
4 
5 Permission to use, copy, modify, distribute, and sell this software and its
6 documentation for any purpose is hereby granted without fee, provided that
7 the above copyright notice appear in all copies and that both that
8 copyright notice and this permission notice appear in supporting
9 documentation.
10 
11 The above copyright notice and this permission notice shall be included in
12 all copies or substantial portions of the Software.
13 
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
17 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
18 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20 
21 Except as contained in this notice, the name of The Open Group shall not be
22 used in advertising or otherwise to promote the sale, use or other dealings
23 in this Software without prior written authorization from The Open Group.
24 
25 ********************************************************/
26 
27 /* THIS IS NOT AN X CONSORTIUM STANDARD OR AN X PROJECT TEAM SPECIFICATION */
28 
29 #ifndef _SHMPROTO_H_
30 #define _SHMPROTO_H_
31 
32 #include <X11/extensions/shm.h>
33 
34 #define ShmSeg CARD32
35 #define Drawable CARD32
36 #define VisualID CARD32
37 #define GContext CARD32
38 #define Pixmap CARD32
39 
40 #define X_ShmQueryVersion		0
41 #define X_ShmAttach			1
42 #define X_ShmDetach			2
43 #define X_ShmPutImage			3
44 #define X_ShmGetImage			4
45 #define X_ShmCreatePixmap		5
46 #define X_ShmAttachFd                   6
47 #define X_ShmCreateSegment              7
48 
49 typedef struct _ShmQueryVersion {
50     CARD8	reqType;		/* always ShmReqCode */
51     CARD8	shmReqType;		/* always X_ShmQueryVersion */
52     CARD16	length;
53 } xShmQueryVersionReq;
54 #define sz_xShmQueryVersionReq	4
55 
56 typedef struct {
57     BYTE	type;			/* X_Reply */
58     BOOL	sharedPixmaps;
59     CARD16	sequenceNumber;
60     CARD32	length;
61     CARD16	majorVersion;		/* major version of SHM protocol */
62     CARD16	minorVersion;		/* minor version of SHM protocol */
63     CARD16	uid;
64     CARD16	gid;
65     CARD8	pixmapFormat;
66     CARD8	pad0;
67     CARD16	pad1;
68     CARD32	pad2;
69     CARD32	pad3;
70     CARD32	pad4;
71 } xShmQueryVersionReply;
72 #define sz_xShmQueryVersionReply	32
73 
74 typedef struct _ShmAttach {
75     CARD8	reqType;	/* always ShmReqCode */
76     CARD8	shmReqType;	/* always X_ShmAttach */
77     CARD16	length;
78     ShmSeg	shmseg;
79     CARD32	shmid;
80     BOOL	readOnly;
81     BYTE	pad0;
82     CARD16	pad1;
83 } xShmAttachReq;
84 #define sz_xShmAttachReq	16
85 
86 typedef struct _ShmDetach {
87     CARD8	reqType;	/* always ShmReqCode */
88     CARD8	shmReqType;	/* always X_ShmDetach */
89     CARD16	length;
90     ShmSeg	shmseg;
91 } xShmDetachReq;
92 #define sz_xShmDetachReq	8
93 
94 typedef struct _ShmPutImage {
95     CARD8	reqType;	/* always ShmReqCode */
96     CARD8	shmReqType;	/* always X_ShmPutImage */
97     CARD16	length;
98     Drawable	drawable;
99     GContext	gc;
100     CARD16	totalWidth;
101     CARD16	totalHeight;
102     CARD16	srcX;
103     CARD16	srcY;
104     CARD16	srcWidth;
105     CARD16	srcHeight;
106     INT16	dstX;
107     INT16	dstY;
108     CARD8	depth;
109     CARD8	format;
110     CARD8	sendEvent;
111     CARD8	bpad;
112     ShmSeg	shmseg;
113     CARD32	offset;
114 } xShmPutImageReq;
115 #define sz_xShmPutImageReq	40
116 
117 typedef struct _ShmGetImage {
118     CARD8	reqType;	/* always ShmReqCode */
119     CARD8	shmReqType;	/* always X_ShmGetImage */
120     CARD16	length;
121     Drawable	drawable;
122     INT16	x;
123     INT16	y;
124     CARD16	width;
125     CARD16	height;
126     CARD32	planeMask;
127     CARD8	format;
128     CARD8	pad0;
129     CARD8	pad1;
130     CARD8	pad2;
131     ShmSeg	shmseg;
132     CARD32	offset;
133 } xShmGetImageReq;
134 #define sz_xShmGetImageReq	32
135 
136 typedef struct _ShmGetImageReply {
137     BYTE	type;  /* X_Reply */
138     CARD8	depth;
139     CARD16	sequenceNumber;
140     CARD32	length;
141     VisualID	visual;
142     CARD32	size;
143     CARD32	pad0;
144     CARD32	pad1;
145     CARD32	pad2;
146     CARD32	pad3;
147 } xShmGetImageReply;
148 #define sz_xShmGetImageReply	32
149 
150 typedef struct _ShmCreatePixmap {
151     CARD8	reqType;	/* always ShmReqCode */
152     CARD8	shmReqType;	/* always X_ShmCreatePixmap */
153     CARD16	length;
154     Pixmap	pid;
155     Drawable	drawable;
156     CARD16	width;
157     CARD16	height;
158     CARD8	depth;
159     CARD8	pad0;
160     CARD8	pad1;
161     CARD8	pad2;
162     ShmSeg	shmseg;
163     CARD32	offset;
164 } xShmCreatePixmapReq;
165 #define sz_xShmCreatePixmapReq 28
166 
167 typedef struct _ShmCompletion {
168     BYTE	type;		/* always eventBase + ShmCompletion */
169     BYTE	bpad0;
170     CARD16	sequenceNumber;
171     Drawable	drawable;
172     CARD16	minorEvent;
173     BYTE	majorEvent;
174     BYTE	bpad1;
175     ShmSeg	shmseg;
176     CARD32	offset;
177     CARD32	pad0;
178     CARD32	pad1;
179     CARD32	pad2;
180 } xShmCompletionEvent;
181 #define sz_xShmCompletionEvent	32
182 
183 /* Version 1.2 additions */
184 typedef struct _ShmAttachFd {
185     CARD8	reqType;	/* always ShmReqCode */
186     CARD8	shmReqType;	/* always X_ShmAttachFd */
187     CARD16	length;
188     ShmSeg	shmseg;
189     BOOL	readOnly;
190     BYTE	pad0;
191     CARD16	pad1;
192 } xShmAttachFdReq;
193 /* File descriptor is passed with this request */
194 #define sz_xShmAttachFdReq	12
195 
196 typedef struct _ShmCreateSegment {
197     CARD8	reqType;	/* always ShmReqCode */
198     CARD8	shmReqType;	/* always X_ShmAttachFd */
199     CARD16	length;
200     ShmSeg	shmseg;
201     CARD32	size;
202     BOOL	readOnly;
203     BYTE	pad0;
204     CARD16	pad1;
205 } xShmCreateSegmentReq;
206 #define sz_xShmCreateSegmentReq 16
207 
208 typedef struct {
209     CARD8	type;			/* must be X_Reply */
210     CARD8	nfd;			/* must be 1	*/
211     CARD16	sequenceNumber;		/* last sequence number */
212     CARD32	length;			/* 0 */
213     CARD32	pad2;			/* unused */
214     CARD32	pad3;			/* unused */
215     CARD32	pad4;			/* unused */
216     CARD32	pad5;			/* unused */
217     CARD32	pad6;			/* unused */
218     CARD32	pad7;			/* unused */
219 } xShmCreateSegmentReply;
220 /* File descriptor is passed with this reply */
221 #define sz_xShmCreateSegmentReply	32
222 
223 #undef ShmSeg
224 #undef Drawable
225 #undef VisualID
226 #undef GContext
227 #undef Pixmap
228 
229 #endif /* _SHMPROTO_H_ */
230