f0ab104f070bc7f569404826fea1828ed985638cvboxsync/***********************************************************
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncCopyright 1987, 1998 The Open Group
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncPermission to use, copy, modify, distribute, and sell this software and its
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncdocumentation for any purpose is hereby granted without fee, provided that
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncthe above copyright notice appear in all copies and that both that
f0ab104f070bc7f569404826fea1828ed985638cvboxsynccopyright notice and this permission notice appear in supporting
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncdocumentation.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncThe above copyright notice and this permission notice shall be included in
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncall copies or substantial portions of the Software.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncExcept as contained in this notice, the name of The Open Group shall not be
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncused in advertising or otherwise to promote the sale, use or other dealings
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncin this Software without prior written authorization from The Open Group.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncCopyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync All Rights Reserved
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncPermission to use, copy, modify, and distribute this software and its
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncdocumentation for any purpose and without fee is hereby granted,
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncprovided that the above copyright notice appear in all copies and that
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncboth that copyright notice and this permission notice appear in
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncsupporting documentation, and that the name of Digital not be
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncused in advertising or publicity pertaining to distribution of the
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncsoftware without specific, written prior permission.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncSOFTWARE.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncCopyright 1992, 1993 Data General Corporation;
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncCopyright 1992, 1993 OMRON Corporation
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncPermission to use, copy, modify, distribute, and sell this software and its
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncdocumentation for any purpose is hereby granted without fee, provided that the
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncabove copyright notice appear in all copies and that both that copyright
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncnotice and this permission notice appear in supporting documentation, and that
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncneither the name OMRON or DATA GENERAL be used in advertising or publicity
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncpertaining to distribution of the software without specific, written prior
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncpermission of the party whose name is to be used. Neither OMRON or
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncDATA GENERAL make any representation about the suitability of this software
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncfor any purpose. It is provided "as is" without express or implied warranty.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncOMRON AND DATA GENERAL EACH DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncSOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncIN NO EVENT SHALL OMRON OR DATA GENERAL BE LIABLE FOR ANY SPECIAL, INDIRECT
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncOR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncOF THIS SOFTWARE.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync******************************************************************/
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#ifndef MISC_H
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define MISC_H 1
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/*
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * X internal definitions
f0ab104f070bc7f569404826fea1828ed985638cvboxsync *
f0ab104f070bc7f569404826fea1828ed985638cvboxsync */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <X11/Xosdefs.h>
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <X11/Xfuncproto.h>
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <X11/Xmd.h>
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <X11/X.h>
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <X11/Xdefs.h>
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <stddef.h>
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <stdint.h>
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#ifndef MAXSCREENS
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define MAXSCREENS 16
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#endif
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define MAXCLIENTS 256
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define MAXEXTENSIONS 128
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define MAXFORMATS 8
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define MAXDEVICES 40 /* input devices */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* 128 event opcodes for core + extension events, excluding GE */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define MAXEVENTS 128
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define EXTENSION_EVENT_BASE 64
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define EXTENSION_BASE 128
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef uint32_t ATOM;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#ifndef TRUE
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define TRUE 1
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define FALSE 0
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#endif
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#ifndef _XTYPEDEF_CALLBACKLISTPTR
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _CallbackList *CallbackListPtr; /* also in dix.h */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define _XTYPEDEF_CALLBACKLISTPTR
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#endif
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _xReq *xReqPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include "os.h" /* for ALLOCATE_LOCAL and DEALLOCATE_LOCAL */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <X11/Xfuncs.h> /* for bcopy, bzero, and bcmp */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define NullBox ((BoxPtr)0)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define MILLI_PER_MIN (1000 * 60)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define MILLI_PER_SECOND (1000)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* this next is used with None and ParentRelative to tell
f0ab104f070bc7f569404826fea1828ed985638cvboxsync PaintWin() what to use to paint the background. Also used
f0ab104f070bc7f569404826fea1828ed985638cvboxsync in the macro IS_VALID_PIXMAP */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define USE_BACKGROUND_PIXEL 3
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define USE_BORDER_PIXEL 3
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* byte swap a 32-bit literal */
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncstatic inline uint32_t lswapl(uint32_t x)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync{
f0ab104f070bc7f569404826fea1828ed985638cvboxsync return ((x & 0xff) << 24) |
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ((x & 0xff00) << 8) |
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ((x & 0xff0000) >> 8) |
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ((x >> 24) & 0xff);
f0ab104f070bc7f569404826fea1828ed985638cvboxsync}
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* byte swap a 16-bit literal */
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncstatic inline uint16_t lswaps(uint16_t x)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync{
f0ab104f070bc7f569404826fea1828ed985638cvboxsync return ((x & 0xff) << 8) | ((x >> 8) & 0xff);
f0ab104f070bc7f569404826fea1828ed985638cvboxsync}
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#undef min
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#undef max
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define min(a, b) (((a) < (b)) ? (a) : (b))
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define max(a, b) (((a) > (b)) ? (a) : (b))
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* abs() is a function, not a macro; include the file declaring
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * it in case we haven't done that yet.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <stdlib.h>
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define sign(x) ((x) < 0 ? -1 : ((x) > 0 ? 1 : 0))
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* this assumes b > 0 */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define modulus(a, b, d) if (((d) = (a) % (b)) < 0) (d) += (b)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/*
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * return the least significant bit in x which is set
f0ab104f070bc7f569404826fea1828ed985638cvboxsync *
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * This works on 1's complement and 2's complement machines.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * If you care about the extra instruction on 2's complement
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * machines, change to ((x) & (-(x)))
f0ab104f070bc7f569404826fea1828ed985638cvboxsync */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define lowbit(x) ((x) & (~(x) + 1))
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* XXX Not for modules */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <limits.h>
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#if !defined(MAXSHORT) || !defined(MINSHORT) || \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync !defined(MAXINT) || !defined(MININT)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/*
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Some implementations #define these through <math.h>, so preclude
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * #include'ing it later.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <math.h>
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#undef MAXSHORT
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define MAXSHORT SHRT_MAX
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#undef MINSHORT
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define MINSHORT SHRT_MIN
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#undef MAXINT
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define MAXINT INT_MAX
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#undef MININT
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define MININT INT_MIN
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <assert.h>
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <ctype.h>
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <stdio.h> /* for fopen, etc... */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#endif
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#ifndef PATH_MAX
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <sys/param.h>
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#ifndef PATH_MAX
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#ifdef MAXPATHLEN
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define PATH_MAX MAXPATHLEN
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#else
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define PATH_MAX 1024
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#endif
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#endif
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#endif
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/**
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Calculate the number of bytes needed to hold bits.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * @param bits The minimum number of bits needed.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * @return The number of bytes needed to hold bits.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync */
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncstatic inline int
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncbits_to_bytes(const int bits) {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync return ((bits + 7) >> 3);
f0ab104f070bc7f569404826fea1828ed985638cvboxsync}
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/**
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Calculate the number of 4-byte units needed to hold the given number of
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * bytes.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * @param bytes The minimum number of bytes needed.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * @return The number of 4-byte units needed to hold bytes.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync */
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncstatic inline int
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncbytes_to_int32(const int bytes) {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync return (((bytes) + 3) >> 2);
f0ab104f070bc7f569404826fea1828ed985638cvboxsync}
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/**
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Calculate the number of bytes (in multiples of 4) needed to hold bytes.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * @param bytes The minimum number of bytes needed.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * @return The closest multiple of 4 that is equal or higher than bytes.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync */
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncstatic inline int
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncpad_to_int32(const int bytes) {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync return (((bytes) + 3) & ~3);
f0ab104f070bc7f569404826fea1828ed985638cvboxsync}
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncextern char**
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncxstrtokenize(const char *str, const char* separators);
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/**
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * Compare the two version numbers comprising of major.minor.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync *
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * @return A value less than 0 if a is less than b, 0 if a is equal to b,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * or a value greater than 0
f0ab104f070bc7f569404826fea1828ed985638cvboxsync */
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncstatic inline int
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncversion_compare(uint16_t a_major, uint16_t a_minor,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync uint16_t b_major, uint16_t b_minor)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync{
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int a, b;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync a = a_major << 16 | a_minor;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync b = b_major << 16 | b_minor;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync return (a - b);
f0ab104f070bc7f569404826fea1828ed985638cvboxsync}
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* some macros to help swap requests, replies, and events */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define LengthRestB(stuff) \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ((client->req_len << 2) - sizeof(*stuff))
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define LengthRestS(stuff) \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ((client->req_len << 1) - (sizeof(*stuff) >> 1))
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define LengthRestL(stuff) \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync (client->req_len - (sizeof(*stuff) >> 2))
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define SwapRestS(stuff) \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync SwapShorts((short *)(stuff + 1), LengthRestS(stuff))
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define SwapRestL(stuff) \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync SwapLongs((CARD32 *)(stuff + 1), LengthRestL(stuff))
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#if defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncvoid __attribute__((error("wrong sized variable passed to swap"))) wrong_size(void);
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#else
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncstatic inline void wrong_size(void)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync{
f0ab104f070bc7f569404826fea1828ed985638cvboxsync}
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#endif
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#if !(defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)))
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncstatic inline int __builtin_constant_p(int x)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync{
f0ab104f070bc7f569404826fea1828ed985638cvboxsync return 0;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync}
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#endif
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* byte swap a 32-bit value */
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncstatic inline void swap_uint32(uint32_t *x)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync{
f0ab104f070bc7f569404826fea1828ed985638cvboxsync char n = ((char *) x)[0];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ((char *) x)[0] = ((char *) x)[3];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ((char *) x)[3] = n;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync n = ((char *) x)[1];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ((char *) x)[1] = ((char *) x)[2];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ((char *) x)[2] = n;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync}
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define swapl(x) do { \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync if (sizeof(*(x)) != 4) \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync wrong_size(); \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync if (__builtin_constant_p((uintptr_t)(x) & 3) && ((uintptr_t)(x) & 3) == 0) \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync *(x) = lswapl(*(x)); \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync else \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync swap_uint32((uint32_t *)(x)); \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync } while (0)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* byte swap a 16-bit value */
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncstatic inline void swap_uint16(uint16_t *x)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync{
f0ab104f070bc7f569404826fea1828ed985638cvboxsync char n = ((char *) x)[0];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ((char *) x)[0] = ((char *) x)[1];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ((char *) x)[1] = n;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync}
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define swaps(x) do { \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync if (sizeof(*(x)) != 2) \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync wrong_size(); \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync if (__builtin_constant_p((uintptr_t)(x) & 1) && ((uintptr_t)(x) & 1) == 0) \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync *(x) = lswaps(*(x)); \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync else \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync swap_uint16((uint16_t *)(x)); \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync } while (0)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* copy 32-bit value from src to dst byteswapping on the way */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define cpswapl(src, dst) do { \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync if (sizeof((src)) != 4 || sizeof((dst)) != 4) \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync wrong_size(); \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync (dst) = lswapl((src)); \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync } while (0)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* copy short from src to dst byteswapping on the way */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define cpswaps(src, dst) do { \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync if (sizeof((src)) != 2 || sizeof((dst)) != 2) \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync wrong_size(); \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync (dst) = lswaps((src)); \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync } while (0)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncextern _X_EXPORT void SwapLongs(
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CARD32 *list,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned long count);
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncextern _X_EXPORT void SwapShorts(
f0ab104f070bc7f569404826fea1828ed985638cvboxsync short *list,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned long count);
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncextern _X_EXPORT void MakePredeclaredAtoms(void);
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncextern _X_EXPORT int Ones(
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned long /*mask*/);
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _xPoint *DDXPointPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct pixman_box16 *BoxPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _xEvent *xEventPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _xRectangle *xRectanglePtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _GrabRec *GrabPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* typedefs from other places - duplicated here to minimize the amount
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * of unnecessary junk that one would normally have to include to get
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * these symbols defined
f0ab104f070bc7f569404826fea1828ed985638cvboxsync */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#ifndef _XTYPEDEF_CHARINFOPTR
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct _CharInfo *CharInfoPtr; /* also in fonts/include/font.h */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define _XTYPEDEF_CHARINFOPTR
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#endif
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncextern _X_EXPORT unsigned long globalSerialNumber;
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncextern _X_EXPORT unsigned long serverGeneration;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* Don't use this directly, use BUG_WARN or BUG_WARN_MSG instead */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define __BUG_WARN_MSG(cond, with_msg, ...) \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync do { if (cond) { \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ErrorF("BUG: triggered 'if (" #cond ")'\n"); \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync ErrorF("BUG: %s:%d in %s()\n", \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync __FILE__, __LINE__, __func__); \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync if (with_msg) ErrorF(__VA_ARGS__); \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync xorg_backtrace(); \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync } } while(0)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define BUG_WARN_MSG(cond, ...) \
f0ab104f070bc7f569404826fea1828ed985638cvboxsync __BUG_WARN_MSG(cond, 1, __VA_ARGS__)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define BUG_WARN(cond) __BUG_WARN_MSG(cond, 0, NULL)
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#endif /* MISC_H */