1: /* $XFree86: xc/include/Xmd.h,v 3.18tsi Exp $ */ 2: /*********************************************************** 3: 4: Copyright 1987, 1998 The Open Group 5: 6: Permission to use, copy, modify, distribute, and sell this software and its 7: documentation for any purpose is hereby granted without fee, provided that 8: the above copyright notice appear in all copies and that both that 9: copyright notice and this permission notice appear in supporting 10: documentation. 11: 12: The above copyright notice and this permission notice shall be included in 13: all copies or substantial portions of the Software. 14: 15: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16: IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17: FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18: OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 19: AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20: CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21: 22: Except as contained in this notice, the name of The Open Group shall not be 23: used in advertising or otherwise to promote the sale, use or other dealings 24: in this Software without prior written authorization from The Open Group. 25: 26: 27: Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. 28: 29: All Rights Reserved 30: 31: Permission to use, copy, modify, and distribute this software and its 32: documentation for any purpose and without fee is hereby granted, 33: provided that the above copyright notice appear in all copies and that 34: both that copyright notice and this permission notice appear in 35: supporting documentation, and that the name of Digital not be 36: used in advertising or publicity pertaining to distribution of the 37: software without specific, written prior permission. 38: 39: DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 40: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL 41: DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR 42: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 43: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, 44: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 45: SOFTWARE. 46: 47: ******************************************************************/ 48: #ifndef XMD_H 49: #define XMD_H 1 50: /* $Xorg: Xmd.h,v 1.4 2001/02/09 02:03:22 xorgcvs Exp $ */ 51: /* 52: * Xmd.h: MACHINE DEPENDENT DECLARATIONS. 53: */ 54: 55: /* 56: * Special per-machine configuration flags. 57: */ 58: #ifdef CRAY 59: #define WORD64 /* 64-bit architecture */ 60: #endif 61: #if defined (_LP64) || \ 62: defined(__alpha) || defined(__alpha__) || \ 63: defined(__ia64__) || defined(ia64) || \ 64: defined(__sparc64__) || \ 65: defined(__s390x__) || \ 66: (defined(__hppa__) && defined(__LP64__)) || \ 67: defined(__amd64__) || defined(amd64) || \ 68: (defined(sgi) && (_MIPS_SZLONG == 64)) 69: #define LONG64 /* 32/64-bit architecture */ 70: #endif 71: 72: /* 73: * Stuff to handle large architecture machines; the constants were generated 74: * on a 32-bit machine and must coorespond to the protocol. 75: */ 76: #ifdef WORD64 77: #define MUSTCOPY 78: #endif /* WORD64 */ 79: 80: 81: /* 82: * Definition of macro used to set constants for size of network structures; 83: * machines with preprocessors that can't handle all of the sz_ symbols 84: * can define this macro to be sizeof(x) if and only if their compiler doesn't 85: * pad out structures (esp. the xTextElt structure which contains only two 86: * one-byte fields). Network structures should always define sz_symbols. 87: * 88: * The sz_ prefix is used instead of something more descriptive so that the 89: * symbols are no more than 32 characters long (which causes problems for some 90: * compilers and preprocessors). 91: * 92: * The extra indirection in the __STDC__ case is to get macro arguments to 93: * expand correctly before the concatenation, rather than afterward. 94: */ 95: #if ((defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)) && !defined(UNIXCPP)) || defined(ANSICPP) 96: #define _SIZEOF(x) sz_##x 97: #define SIZEOF(x) _SIZEOF(x) 98: #else 99: #define SIZEOF(x) sz_/**/x 100: #endif /* if ANSI C compiler else not */ 101: 102: /* 103: * Bitfield suffixes for the protocol structure elements, if you 104: * need them. Note that bitfields are not guarranteed to be signed 105: * (or even unsigned) according to ANSI C. 106: */ 107: #ifdef WORD64 108: typedef long INT64; 109: typedef unsigned long CARD64; 110: #define B32 :32 111: #define B16 :16 112: #ifdef UNSIGNEDBITFIELDS 113: typedef unsigned int INT32; 114: typedef unsigned int INT16; 115: #else 116: #ifdef __STDC__ 117: typedef signed int INT32; 118: typedef signed int INT16; 119: #else 120: typedef int INT32; 121: typedef int INT16; 122: #endif 123: #endif 124: #else 125: #define B32 126: #define B16 127: #ifdef LONG64 128: typedef long INT64; 129: typedef int INT32; 130: #else 131: typedef long INT32; 132: #endif 133: typedef short INT16; 134: #endif 135: 136: #if defined(__STDC__) || defined(sgi) || defined(AIXV3) 137: typedef signed char INT8; 138: #else 139: typedef char INT8; 140: #endif 141: 142: #ifdef LONG64 143: typedef unsigned long CARD64; 144: typedef unsigned int CARD32; 145: #else 146: typedef unsigned long CARD32; 147: #endif 148: typedef unsigned short CARD16; 149: typedef unsigned char CARD8; 150: 151: typedef CARD32 BITS32; 152: typedef CARD16 BITS16; 153: 154: #ifndef I_NEED_OS2_H 155: typedef CARD8 BYTE; 156: typedef CARD8 BOOL; 157: #else 158: #define BYTE CARD8 159: #define BOOL CARD8 160: #endif 161: 162: /* 163: * definitions for sign-extending bitfields on 64-bit architectures 164: */ 165: #if defined(WORD64) && defined(UNSIGNEDBITFIELDS) 166: #define cvtINT8toInt(val) (((val) & 0x00000080) ? ((val) | 0xffffffffffffff00) : (val)) 167: #define cvtINT16toInt(val) (((val) & 0x00008000) ? ((val) | 0xffffffffffff0000) : (val)) 168: #define cvtINT32toInt(val) (((val) & 0x80000000) ? ((val) | 0xffffffff00000000) : (val)) 169: #define cvtINT8toShort(val) cvtINT8toInt(val) 170: #define cvtINT16toShort(val) cvtINT16toInt(val) 171: #define cvtINT32toShort(val) cvtINT32toInt(val) 172: #define cvtINT8toLong(val) cvtINT8toInt(val) 173: #define cvtINT16toLong(val) cvtINT16toInt(val) 174: #define cvtINT32toLong(val) cvtINT32toInt(val) 175: #else 176: #define cvtINT8toInt(val) (val) 177: #define cvtINT16toInt(val) (val) 178: #define cvtINT32toInt(val) (val) 179: #define cvtINT8toShort(val) (val) 180: #define cvtINT16toShort(val) (val) 181: #define cvtINT32toShort(val) (val) 182: #define cvtINT8toLong(val) (val) 183: #define cvtINT16toLong(val) (val) 184: #define cvtINT32toLong(val) (val) 185: #endif /* WORD64 and UNSIGNEDBITFIELDS */ 186: 187: 188: 189: #ifdef MUSTCOPY 190: /* 191: * This macro must not cast or else pointers will get aligned and be wrong 192: */ 193: #define NEXTPTR(p,t) (((char *) p) + SIZEOF(t)) 194: #else /* else not MUSTCOPY, this is used for 32-bit machines */ 195: /* 196: * this version should leave result of type (t *), but that should only be 197: * used when not in MUSTCOPY 198: */ 199: #define NEXTPTR(p,t) (((t *)(p)) + 1) 200: #endif /* MUSTCOPY - used machines whose C structs don't line up with proto */ 201: 202: #endif /* XMD_H */ 203: