| 1 | /* | 
|---|
| 2 | * Compilers that uses ILP32, LP64 or P64 type models | 
|---|
| 3 | * for both Win32 and Win64 are supported by this file. | 
|---|
| 4 | * | 
|---|
| 5 | * Copyright (C) 1999 Patrik Stridvall | 
|---|
| 6 | * | 
|---|
| 7 | * This library is free software; you can redistribute it and/or | 
|---|
| 8 | * modify it under the terms of the GNU Lesser General Public | 
|---|
| 9 | * License as published by the Free Software Foundation; either | 
|---|
| 10 | * version 2.1 of the License, or (at your option) any later version. | 
|---|
| 11 | * | 
|---|
| 12 | * This library is distributed in the hope that it will be useful, | 
|---|
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|---|
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|---|
| 15 | * Lesser General Public License for more details. | 
|---|
| 16 | * | 
|---|
| 17 | * You should have received a copy of the GNU Lesser General Public | 
|---|
| 18 | * License along with this library; if not, write to the Free Software | 
|---|
| 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | 
|---|
| 20 | */ | 
|---|
| 21 |  | 
|---|
| 22 | #ifndef __WINE_BASETSD_H | 
|---|
| 23 | #define __WINE_BASETSD_H | 
|---|
| 24 |  | 
|---|
| 25 | #ifdef __cplusplus | 
|---|
| 26 | extern "C" { | 
|---|
| 27 | #endif /* defined(__cplusplus) */ | 
|---|
| 28 |  | 
|---|
| 29 | /* | 
|---|
| 30 | * Win32 was easy to implement under Unix since most (all?) 32-bit | 
|---|
| 31 | * Unices uses the same type model (ILP32) as Win32, where int, long | 
|---|
| 32 | * and pointer are 32-bit. | 
|---|
| 33 | * | 
|---|
| 34 | * Win64, however, will cause some problems when implemented under Unix. | 
|---|
| 35 | * Linux/{Alpha, Sparc64} and most (all?) other 64-bit Unices uses | 
|---|
| 36 | * the LP64 type model where int is 32-bit and long and pointer are | 
|---|
| 37 | * 64-bit. Win64 on the other hand uses the P64 (sometimes called LLP64) | 
|---|
| 38 | * type model where int and long are 32 bit and pointer is 64-bit. | 
|---|
| 39 | */ | 
|---|
| 40 |  | 
|---|
| 41 | /* Type model independent typedefs */ | 
|---|
| 42 | /* The __intXX types are native types defined by the MS C compiler. | 
|---|
| 43 | * Apps that make use of them before they get defined here, can | 
|---|
| 44 | * simply add to the command line: | 
|---|
| 45 | *    -D__int8=char -D__int16=short -D__int32=int "-D__int64=long long" | 
|---|
| 46 | */ | 
|---|
| 47 | #if !defined(_MSC_VER) && !defined(__WIDL__) | 
|---|
| 48 | #  ifndef __int8 | 
|---|
| 49 | #    define __int8  char | 
|---|
| 50 | #  endif | 
|---|
| 51 | #  ifndef __int16 | 
|---|
| 52 | #    define __int16 short | 
|---|
| 53 | #  endif | 
|---|
| 54 | #  ifndef __int32 | 
|---|
| 55 | #    define __int32 int | 
|---|
| 56 | #  endif | 
|---|
| 57 | #  ifndef __int64 | 
|---|
| 58 | #    if defined(__WIN32OS2__) && (__IBMC__ < 400) && (__IBMCPP__ < 360) && !defined(__WATCOMC__) && !defined(__EMX__) | 
|---|
| 59 | #      define __int64 double | 
|---|
| 60 | #    elif !defined(__WIN32OS2__) || defined(__EMX__) | 
|---|
| 61 | #      define __int64 long long | 
|---|
| 62 | #    endif | 
|---|
| 63 | #  endif | 
|---|
| 64 | #endif /* !defined(_MSC_VER) */ | 
|---|
| 65 |  | 
|---|
| 66 | /* FIXME: DECLSPEC_ALIGN should be declared only in winnt.h, but we need it here too */ | 
|---|
| 67 | #ifndef DECLSPEC_ALIGN | 
|---|
| 68 | # if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS) | 
|---|
| 69 | #  define DECLSPEC_ALIGN(x) __declspec(align(x)) | 
|---|
| 70 | # elif defined(__GNUC__) | 
|---|
| 71 | #  define DECLSPEC_ALIGN(x) __attribute__((aligned(x))) | 
|---|
| 72 | # else | 
|---|
| 73 | #  define DECLSPEC_ALIGN(x) | 
|---|
| 74 | # endif | 
|---|
| 75 | #endif | 
|---|
| 76 |  | 
|---|
| 77 | typedef signed char      INT8, *PINT8; | 
|---|
| 78 | typedef signed short     INT16, *PINT16; | 
|---|
| 79 | typedef signed int       INT32, *PINT32; | 
|---|
| 80 | typedef unsigned char    UINT8, *PUINT8; | 
|---|
| 81 | typedef unsigned short   UINT16, *PUINT16; | 
|---|
| 82 | typedef unsigned int     UINT32, *PUINT32; | 
|---|
| 83 | typedef signed int       LONG32, *PLONG32; | 
|---|
| 84 | typedef unsigned int     ULONG32, *PULONG32; | 
|---|
| 85 | typedef unsigned int     DWORD32, *PDWORD32; | 
|---|
| 86 |  | 
|---|
| 87 | #ifdef _MSC_VER | 
|---|
| 88 | typedef signed __int64   INT64, *PINT64; | 
|---|
| 89 | typedef unsigned __int64 UINT64, *PUINT64; | 
|---|
| 90 | typedef signed __int64   LONG64, *PLONG64; | 
|---|
| 91 | typedef unsigned __int64 ULONG64, *PULONG64; | 
|---|
| 92 | typedef unsigned __int64 DWORD64, *PDWORD64; | 
|---|
| 93 | #elif defined(__WIN32OS2__) && (__IBMC__ < 400) && (__IBMCPP__ < 360) && !defined(__WATCOMC__) && !defined(__EMX__) | 
|---|
| 94 | typedef __int64 INT64, *PINT64; | 
|---|
| 95 | typedef __int64 UINT64, *PUINT64; | 
|---|
| 96 | typedef __int64 LONG64, *PLONG64; | 
|---|
| 97 | typedef __int64 ULONG64, *PULONG64; | 
|---|
| 98 | typedef __int64 DWORD64, *PDWORD64; | 
|---|
| 99 | #else | 
|---|
| 100 | typedef signed __int64   DECLSPEC_ALIGN(8) INT64, *PINT64; | 
|---|
| 101 | typedef unsigned __int64 DECLSPEC_ALIGN(8) UINT64, *PUINT64; | 
|---|
| 102 | typedef signed __int64   DECLSPEC_ALIGN(8) LONG64, *PLONG64; | 
|---|
| 103 | typedef unsigned __int64 DECLSPEC_ALIGN(8) ULONG64, *PULONG64; | 
|---|
| 104 | typedef unsigned __int64 DECLSPEC_ALIGN(8) DWORD64, *PDWORD64; | 
|---|
| 105 | #endif | 
|---|
| 106 |  | 
|---|
| 107 | /* Win32 or Win64 dependent typedef/defines. */ | 
|---|
| 108 |  | 
|---|
| 109 | #ifdef _WIN64 | 
|---|
| 110 |  | 
|---|
| 111 | typedef signed __int64   INT_PTR, *PINT_PTR; | 
|---|
| 112 | typedef signed __int64   LONG_PTR, *PLONG_PTR; | 
|---|
| 113 | typedef unsigned __int64 UINT_PTR, *PUINT_PTR; | 
|---|
| 114 | typedef unsigned __int64 ULONG_PTR, *PULONG_PTR; | 
|---|
| 115 | typedef unsigned __int64 DWORD_PTR, *PDWORD_PTR; | 
|---|
| 116 |  | 
|---|
| 117 | #define MAXINT_PTR 0x7fffffffffffffff | 
|---|
| 118 | #define MININT_PTR 0x8000000000000000 | 
|---|
| 119 | #define MAXUINT_PTR 0xffffffffffffffff | 
|---|
| 120 |  | 
|---|
| 121 | typedef int HALF_PTR, *PHALF_PTR; | 
|---|
| 122 | typedef unsigned int UHALF_PTR, *PUHALF_PTR; | 
|---|
| 123 |  | 
|---|
| 124 | #define MAXHALF_PTR 0x7fffffff | 
|---|
| 125 | #define MINHALF_PTR 0x80000000 | 
|---|
| 126 | #define MAXUHALF_PTR 0xffffffff | 
|---|
| 127 |  | 
|---|
| 128 | #else /* FIXME: defined(_WIN32) */ | 
|---|
| 129 |  | 
|---|
| 130 | #ifndef INT_PTR_D | 
|---|
| 131 | #define INT_PTR_D | 
|---|
| 132 | typedef int INT_PTR, *PINT_PTR; | 
|---|
| 133 | #endif | 
|---|
| 134 | typedef long LONG_PTR, *PLONG_PTR; | 
|---|
| 135 | #ifndef UINT_PTR_D | 
|---|
| 136 | #define UINT_PTR_D | 
|---|
| 137 | typedef unsigned int UINT_PTR, *PUINT_PTR; | 
|---|
| 138 | #endif | 
|---|
| 139 | typedef unsigned long ULONG_PTR, *PULONG_PTR; | 
|---|
| 140 | #ifndef DWORD_PTR_D | 
|---|
| 141 | #define DWORD_PTR_D | 
|---|
| 142 | typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; | 
|---|
| 143 | #endif | 
|---|
| 144 |  | 
|---|
| 145 | #define MAXINT_PTR 0x7fffffff | 
|---|
| 146 | #define MININT_PTR 0x80000000 | 
|---|
| 147 | #define MAXUINT_PTR 0xffffffff | 
|---|
| 148 |  | 
|---|
| 149 | typedef signed short HALF_PTR, *PHALF_PTR; | 
|---|
| 150 | typedef unsigned short UHALF_PTR, *PUHALF_PTR; | 
|---|
| 151 |  | 
|---|
| 152 | #define MAXUHALF_PTR 0xffff | 
|---|
| 153 | #define MAXHALF_PTR 0x7fff | 
|---|
| 154 | #define MINHALF_PTR 0x8000 | 
|---|
| 155 |  | 
|---|
| 156 | #endif /* defined(_WIN64) || defined(_WIN32) */ | 
|---|
| 157 |  | 
|---|
| 158 | typedef LONG_PTR SSIZE_T, *PSSIZE_T; | 
|---|
| 159 | typedef ULONG_PTR SIZE_T, *PSIZE_T; | 
|---|
| 160 |  | 
|---|
| 161 | /* Some Wine-specific definitions */ | 
|---|
| 162 |  | 
|---|
| 163 | /* Architecture dependent settings. */ | 
|---|
| 164 | /* These are hardcoded to avoid dependencies on config.h in Winelib apps. */ | 
|---|
| 165 | #if defined(__i386__) | 
|---|
| 166 | # undef  WORDS_BIGENDIAN | 
|---|
| 167 | # undef  BITFIELDS_BIGENDIAN | 
|---|
| 168 | # define ALLOW_UNALIGNED_ACCESS | 
|---|
| 169 | #elif defined(__sparc__) | 
|---|
| 170 | # define WORDS_BIGENDIAN | 
|---|
| 171 | # define BITFIELDS_BIGENDIAN | 
|---|
| 172 | # undef  ALLOW_UNALIGNED_ACCESS | 
|---|
| 173 | #elif defined(__powerpc__) | 
|---|
| 174 | # define WORDS_BIGENDIAN | 
|---|
| 175 | # define BITFIELDS_BIGENDIAN | 
|---|
| 176 | # undef  ALLOW_UNALIGNED_ACCESS | 
|---|
| 177 | #elif defined(__ALPHA__) | 
|---|
| 178 | # undef  WORDS_BIGENDIAN | 
|---|
| 179 | # undef  BITFIELDS_BIGENDIAN | 
|---|
| 180 | # undef  ALLOW_UNALIGNED_ACCESS | 
|---|
| 181 | #elif !defined(RC_INVOKED) && !defined(__WIDL__) | 
|---|
| 182 | # error Unknown CPU architecture! | 
|---|
| 183 | #endif | 
|---|
| 184 |  | 
|---|
| 185 | #ifdef __cplusplus | 
|---|
| 186 | } /* extern "C" */ | 
|---|
| 187 | #endif /* defined(__cplusplus) */ | 
|---|
| 188 |  | 
|---|
| 189 | #endif /* !defined(__WINE_BASETSD_H) */ | 
|---|