VirtualBox

source: vbox/trunk/src/VBox/Additions/x11/x11include/xorg-server-1.13.0/misc.h@ 72293

Last change on this file since 72293 was 43251, checked in by vboxsync, 12 years ago

Additions/x11: added headers for X.Org Server 1.13.

  • Property svn:eol-style set to native
File size: 12.4 KB
Line 
1/***********************************************************
2
3Copyright 1987, 1998 The Open Group
4
5Permission to use, copy, modify, distribute, and sell this software and its
6documentation for any purpose is hereby granted without fee, provided that
7the above copyright notice appear in all copies and that both that
8copyright notice and this permission notice appear in supporting
9documentation.
10
11The above copyright notice and this permission notice shall be included in
12all copies or substantial portions of the Software.
13
14THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
18AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
21Except as contained in this notice, the name of The Open Group shall not be
22used in advertising or otherwise to promote the sale, use or other dealings
23in this Software without prior written authorization from The Open Group.
24
25Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
26
27 All Rights Reserved
28
29Permission to use, copy, modify, and distribute this software and its
30documentation for any purpose and without fee is hereby granted,
31provided that the above copyright notice appear in all copies and that
32both that copyright notice and this permission notice appear in
33supporting documentation, and that the name of Digital not be
34used in advertising or publicity pertaining to distribution of the
35software without specific, written prior permission.
36
37DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
38ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
39DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
40ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
41WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
42ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
43SOFTWARE.
44
45Copyright 1992, 1993 Data General Corporation;
46Copyright 1992, 1993 OMRON Corporation
47
48Permission to use, copy, modify, distribute, and sell this software and its
49documentation for any purpose is hereby granted without fee, provided that the
50above copyright notice appear in all copies and that both that copyright
51notice and this permission notice appear in supporting documentation, and that
52neither the name OMRON or DATA GENERAL be used in advertising or publicity
53pertaining to distribution of the software without specific, written prior
54permission of the party whose name is to be used. Neither OMRON or
55DATA GENERAL make any representation about the suitability of this software
56for any purpose. It is provided "as is" without express or implied warranty.
57
58OMRON AND DATA GENERAL EACH DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
59SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
60IN NO EVENT SHALL OMRON OR DATA GENERAL BE LIABLE FOR ANY SPECIAL, INDIRECT
61OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
62DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
63TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
64OF THIS SOFTWARE.
65
66******************************************************************/
67#ifndef MISC_H
68#define MISC_H 1
69/*
70 * X internal definitions
71 *
72 */
73
74#include <X11/Xosdefs.h>
75#include <X11/Xfuncproto.h>
76#include <X11/Xmd.h>
77#include <X11/X.h>
78#include <X11/Xdefs.h>
79
80#include <stddef.h>
81#include <stdint.h>
82
83#ifndef MAXSCREENS
84#define MAXSCREENS 16
85#endif
86#ifndef MAXGPUSCREENS
87#define MAXGPUSCREENS 16
88#endif
89#define MAXCLIENTS 256
90#define MAXEXTENSIONS 128
91#define MAXFORMATS 8
92#define MAXDEVICES 40 /* input devices */
93#define GPU_SCREEN_OFFSET 256
94
95/* 128 event opcodes for core + extension events, excluding GE */
96#define MAXEVENTS 128
97#define EXTENSION_EVENT_BASE 64
98#define EXTENSION_BASE 128
99
100typedef uint32_t ATOM;
101
102#ifndef TRUE
103#define TRUE 1
104#define FALSE 0
105#endif
106
107#ifndef _XTYPEDEF_CALLBACKLISTPTR
108typedef struct _CallbackList *CallbackListPtr; /* also in dix.h */
109
110#define _XTYPEDEF_CALLBACKLISTPTR
111#endif
112
113typedef struct _xReq *xReqPtr;
114
115#include "os.h" /* for ALLOCATE_LOCAL and DEALLOCATE_LOCAL */
116#include <X11/Xfuncs.h> /* for bcopy, bzero, and bcmp */
117
118#define NullBox ((BoxPtr)0)
119#define MILLI_PER_MIN (1000 * 60)
120#define MILLI_PER_SECOND (1000)
121
122 /* this next is used with None and ParentRelative to tell
123 PaintWin() what to use to paint the background. Also used
124 in the macro IS_VALID_PIXMAP */
125
126#define USE_BACKGROUND_PIXEL 3
127#define USE_BORDER_PIXEL 3
128
129/* byte swap a 32-bit literal */
130static inline uint32_t
131lswapl(uint32_t x)
132{
133 return ((x & 0xff) << 24) |
134 ((x & 0xff00) << 8) | ((x & 0xff0000) >> 8) | ((x >> 24) & 0xff);
135}
136
137/* byte swap a 16-bit literal */
138static inline uint16_t
139lswaps(uint16_t x)
140{
141 return ((x & 0xff) << 8) | ((x >> 8) & 0xff);
142}
143
144#undef min
145#undef max
146
147#define min(a, b) (((a) < (b)) ? (a) : (b))
148#define max(a, b) (((a) > (b)) ? (a) : (b))
149/* abs() is a function, not a macro; include the file declaring
150 * it in case we haven't done that yet.
151 */
152#include <stdlib.h>
153#define sign(x) ((x) < 0 ? -1 : ((x) > 0 ? 1 : 0))
154/* this assumes b > 0 */
155#define modulus(a, b, d) if (((d) = (a) % (b)) < 0) (d) += (b)
156/*
157 * return the least significant bit in x which is set
158 *
159 * This works on 1's complement and 2's complement machines.
160 * If you care about the extra instruction on 2's complement
161 * machines, change to ((x) & (-(x)))
162 */
163#define lowbit(x) ((x) & (~(x) + 1))
164
165/* XXX Not for modules */
166#include <limits.h>
167#if !defined(MAXSHORT) || !defined(MINSHORT) || \
168 !defined(MAXINT) || !defined(MININT)
169/*
170 * Some implementations #define these through <math.h>, so preclude
171 * #include'ing it later.
172 */
173
174#include <math.h>
175#undef MAXSHORT
176#define MAXSHORT SHRT_MAX
177#undef MINSHORT
178#define MINSHORT SHRT_MIN
179#undef MAXINT
180#define MAXINT INT_MAX
181#undef MININT
182#define MININT INT_MIN
183
184#include <assert.h>
185#include <ctype.h>
186#include <stdio.h> /* for fopen, etc... */
187
188#endif
189
190#ifndef PATH_MAX
191#include <sys/param.h>
192#ifndef PATH_MAX
193#ifdef MAXPATHLEN
194#define PATH_MAX MAXPATHLEN
195#else
196#define PATH_MAX 1024
197#endif
198#endif
199#endif
200
201/**
202 * Calculate the number of bytes needed to hold bits.
203 * @param bits The minimum number of bits needed.
204 * @return The number of bytes needed to hold bits.
205 */
206static inline int
207bits_to_bytes(const int bits)
208{
209 return ((bits + 7) >> 3);
210}
211
212/**
213 * Calculate the number of 4-byte units needed to hold the given number of
214 * bytes.
215 * @param bytes The minimum number of bytes needed.
216 * @return The number of 4-byte units needed to hold bytes.
217 */
218static inline int
219bytes_to_int32(const int bytes)
220{
221 return (((bytes) + 3) >> 2);
222}
223
224/**
225 * Calculate the number of bytes (in multiples of 4) needed to hold bytes.
226 * @param bytes The minimum number of bytes needed.
227 * @return The closest multiple of 4 that is equal or higher than bytes.
228 */
229static inline int
230pad_to_int32(const int bytes)
231{
232 return (((bytes) + 3) & ~3);
233}
234
235/**
236 * Calculate padding needed to bring the number of bytes to an even
237 * multiple of 4.
238 * @param bytes The minimum number of bytes needed.
239 * @return The bytes of padding needed to arrive at the closest multiple of 4
240 * that is equal or higher than bytes.
241 */
242static inline int
243padding_for_int32(const int bytes)
244{
245 return ((-bytes) & 3);
246}
247
248
249extern char **xstrtokenize(const char *str, const char *separators);
250extern void FormatInt64(int64_t num, char *string);
251extern void FormatUInt64(uint64_t num, char *string);
252extern void FormatUInt64Hex(uint64_t num, char *string);
253
254/**
255 * Compare the two version numbers comprising of major.minor.
256 *
257 * @return A value less than 0 if a is less than b, 0 if a is equal to b,
258 * or a value greater than 0
259 */
260static inline int
261version_compare(uint16_t a_major, uint16_t a_minor,
262 uint16_t b_major, uint16_t b_minor)
263{
264 int a, b;
265
266 a = a_major << 16 | a_minor;
267 b = b_major << 16 | b_minor;
268
269 return (a - b);
270}
271
272/* some macros to help swap requests, replies, and events */
273
274#define LengthRestB(stuff) \
275 ((client->req_len << 2) - sizeof(*stuff))
276
277#define LengthRestS(stuff) \
278 ((client->req_len << 1) - (sizeof(*stuff) >> 1))
279
280#define LengthRestL(stuff) \
281 (client->req_len - (sizeof(*stuff) >> 2))
282
283#define SwapRestS(stuff) \
284 SwapShorts((short *)(stuff + 1), LengthRestS(stuff))
285
286#define SwapRestL(stuff) \
287 SwapLongs((CARD32 *)(stuff + 1), LengthRestL(stuff))
288
289#if defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
290void __attribute__ ((error("wrong sized variable passed to swap")))
291wrong_size(void);
292#else
293static inline void
294wrong_size(void)
295{
296}
297#endif
298
299#if !(defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)))
300static inline int
301__builtin_constant_p(int x)
302{
303 return 0;
304}
305#endif
306
307/* byte swap a 32-bit value */
308static inline void
309swap_uint32(uint32_t * x)
310{
311 char n = ((char *) x)[0];
312
313 ((char *) x)[0] = ((char *) x)[3];
314 ((char *) x)[3] = n;
315 n = ((char *) x)[1];
316 ((char *) x)[1] = ((char *) x)[2];
317 ((char *) x)[2] = n;
318}
319
320#define swapl(x) do { \
321 if (sizeof(*(x)) != 4) \
322 wrong_size(); \
323 if (__builtin_constant_p((uintptr_t)(x) & 3) && ((uintptr_t)(x) & 3) == 0) \
324 *(x) = lswapl(*(x)); \
325 else \
326 swap_uint32((uint32_t *)(x)); \
327 } while (0)
328
329/* byte swap a 16-bit value */
330static inline void
331swap_uint16(uint16_t * x)
332{
333 char n = ((char *) x)[0];
334
335 ((char *) x)[0] = ((char *) x)[1];
336 ((char *) x)[1] = n;
337}
338
339#define swaps(x) do { \
340 if (sizeof(*(x)) != 2) \
341 wrong_size(); \
342 if (__builtin_constant_p((uintptr_t)(x) & 1) && ((uintptr_t)(x) & 1) == 0) \
343 *(x) = lswaps(*(x)); \
344 else \
345 swap_uint16((uint16_t *)(x)); \
346 } while (0)
347
348/* copy 32-bit value from src to dst byteswapping on the way */
349#define cpswapl(src, dst) do { \
350 if (sizeof((src)) != 4 || sizeof((dst)) != 4) \
351 wrong_size(); \
352 (dst) = lswapl((src)); \
353 } while (0)
354
355/* copy short from src to dst byteswapping on the way */
356#define cpswaps(src, dst) do { \
357 if (sizeof((src)) != 2 || sizeof((dst)) != 2) \
358 wrong_size(); \
359 (dst) = lswaps((src)); \
360 } while (0)
361
362extern _X_EXPORT void SwapLongs(CARD32 *list, unsigned long count);
363
364extern _X_EXPORT void SwapShorts(short *list, unsigned long count);
365
366extern _X_EXPORT void MakePredeclaredAtoms(void);
367
368extern _X_EXPORT int Ones(unsigned long /*mask */ );
369
370typedef struct _xPoint *DDXPointPtr;
371typedef struct pixman_box16 *BoxPtr;
372typedef struct _xEvent *xEventPtr;
373typedef struct _xRectangle *xRectanglePtr;
374typedef struct _GrabRec *GrabPtr;
375
376/* typedefs from other places - duplicated here to minimize the amount
377 * of unnecessary junk that one would normally have to include to get
378 * these symbols defined
379 */
380
381#ifndef _XTYPEDEF_CHARINFOPTR
382typedef struct _CharInfo *CharInfoPtr; /* also in fonts/include/font.h */
383
384#define _XTYPEDEF_CHARINFOPTR
385#endif
386
387extern _X_EXPORT unsigned long globalSerialNumber;
388extern _X_EXPORT unsigned long serverGeneration;
389
390/* Don't use this directly, use BUG_WARN or BUG_WARN_MSG instead */
391#define __BUG_WARN_MSG(cond, with_msg, ...) \
392 do { if (cond) { \
393 ErrorFSigSafe("BUG: triggered 'if (" #cond ")'\n"); \
394 ErrorFSigSafe("BUG: %s:%u in %s()\n", \
395 __FILE__, __LINE__, __func__); \
396 if (with_msg) ErrorFSigSafe(__VA_ARGS__); \
397 xorg_backtrace(); \
398 } } while(0)
399
400#define BUG_WARN_MSG(cond, ...) \
401 __BUG_WARN_MSG(cond, 1, __VA_ARGS__)
402
403#define BUG_WARN(cond) __BUG_WARN_MSG(cond, 0, NULL)
404
405#define BUG_RETURN(cond) \
406 do { if (cond) { __BUG_WARN_MSG(cond, 0, NULL); return; } } while(0)
407
408#define BUG_RETURN_MSG(cond, ...) \
409 do { if (cond) { __BUG_WARN_MSG(cond, 1, __VA_ARGS__); return; } } while(0)
410
411#define BUG_RETURN_VAL(cond, val) \
412 do { if (cond) { __BUG_WARN_MSG(cond, 0, NULL); return (val); } } while(0)
413
414#define BUG_RETURN_VAL_MSG(cond, val, ...) \
415 do { if (cond) { __BUG_WARN_MSG(cond, 1, __VA_ARGS__); return (val); } } while(0)
416
417#endif /* MISC_H */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette