1 /* $Id$ */ 2 #ifndef HUSKY_TYPESIZE_H 3 #define HUSKY_TYPESIZE_H 4 5 /* */ 6 /* typesize.h written by tom schlangen */ 7 /* ---------- modified by TJW */ 8 /* */ 9 /* this is an attempt to somewhat reduce problems by unifying */ 10 /* compiler dependend type sizes. */ 11 /* */ 12 /* the basic set/list of unified types required to be present */ 13 /* for each compiler is: */ 14 /* */ 15 /* --------+-----------------+-------+----------------------- */ 16 /* name | description | bytes | range */ 17 /* --------+-----------------+-------+----------------------- */ 18 /* CHAR | signed char | 1 | -128..127 */ 19 /* UCHAR | unsigned char | 1 | 0..255 */ 20 /* INT16 | signed word | 2 | -32768..32767 */ 21 /* UINT16 | unsigned word | 2 | 0..65535 */ 22 /* INT32 | signed dword | 4 | -2147483648..2147483647 */ 23 /* UINT32 | unsigned dword | 4 | 0..4294967295 */ 24 /* --------+-----------------+-------+----------------------- */ 25 /* */ 26 /* besides that, there are some further general purpose types */ 27 /* with guaranteed (either by ANSI C or by us) sizes/ranges. */ 28 /* these should be used with care, since beneath their */ 29 /* guaranteed size they are strictly compiler specific. so if */ 30 /* you use them, make sure you do so only within the */ 31 /* guaranteed range. also take care not to use them in byte- */ 32 /* aligned (`packed') structures, since the size of the re- */ 33 /* resulting structures may vary from compiler to compiler, */ 34 /* which may cause hazzard on in certain cases. */ 35 /* */ 36 /* --------+------------------------------------------------- */ 37 /* name | description */ 38 /* --------+------------------------------------------------- */ 39 /* INT | general purpose compiler specific `signed int'. */ 40 /* | ANSI C guarantees at least 2 bytes, */ 41 /* | range -32768..32767 for this type. */ 42 /* UINT | general purpose compiler specific `unsigned int', */ 43 /* | we guarantee at least 2 bytes, */ 44 /* | range 0..65535 for this type. */ 45 /* LONG | general purpose compiler specific `signed long'. */ 46 /* | ANSI C * guarantees at least 4 bytes, */ 47 /* | range -2147483648..2147483647 for this type. */ 48 /* ULONG | general purpose compiler specific `unsigned long'. */ 49 /* | we guarantee at least 4 bytes, */ 50 /* | range 0..4294967295 for this type. */ 51 /* --------+------------------------------------------------- */ 52 /* */ 53 /* the following definition blocks are in alphabetical order */ 54 /* of the various compilers identification defines. please add */ 55 /* the definitions for your compiler, if not already present. */ 56 /* */ 57 58 #include "compiler.h" 59 60 #ifdef __OS2__ 61 #define INCL_DOSPROCESS 62 #define INCL_DOSERRORS 63 #include <os2.h> 64 #endif 65 66 #if defined ( __NT__ ) 67 #define WIN32_LEAN_AND_MEAN 68 #define NOMSG 69 #define NOGDI 70 #if !defined(__EMX__) 71 #include <windows.h> 72 #endif 73 #endif 74 75 #ifdef __cplusplus 76 extern "C" { 77 #endif 78 79 #if !defined(USE_PSTDINT_H) && !defined(HAS_STDINT_H) 80 /* Fall back to legacy code */ 81 /* Obsolete. Check if your platform can benefit from using stdint.h/pstdint.h 82 * and correct compiler.h accordingly */ 83 84 #if defined(__NT__) 85 typedef signed short INT16; /* 2 byte */ 86 typedef unsigned short UINT16; /* 2 byte */ 87 #endif 88 89 90 /* the EMX/GNU 32bit compilers */ 91 92 #if defined(__EMX__) 93 #if !defined(__OS2_H__) && !defined(_OS2_H) && !defined(_WINNT_H) /* os2.h defines it already */ 94 typedef signed char CHAR; /* 1 byte */ 95 typedef unsigned char UCHAR; /* 1 byte */ 96 #endif 97 typedef signed short INT16; /* 2 byte */ 98 typedef unsigned short UINT16; /* 2 byte */ 99 typedef signed int INT32; /* 4 byte */ 100 typedef unsigned int UINT32; /* 4 byte */ 101 /* -------------------------------------------------------------------------- */ 102 #if !defined(__OS2_H__) && !defined(_OS2_H) && !defined(_WINNT_H) /* os2.h defines it already */ 103 typedef signed int INT; /* 4 byte */ 104 typedef unsigned int UINT; /* 4 byte */ 105 typedef signed long LONG; /* 4 byte */ 106 typedef unsigned long ULONG; /* 4 byte */ 107 typedef void VOID; 108 #endif 109 #endif /* #if defined(__EMX__) */ 110 111 #if (defined(__linux__) && !(defined(__alpha) || defined(__X86_64__))) || (defined(__FreeBSD__) && !(defined(__alpha) || defined(__X86_64__))) || defined(__NetBSD__)|| defined(__DJGPP__) || defined(__BEOS__) || defined(__OpenBSD__) || defined(__CYGWIN__) || defined(__QNXNTO__) || defined(__DragonFly__) 112 typedef signed char CHAR; /* 1 byte */ 113 typedef unsigned char UCHAR; /* 1 byte */ 114 typedef signed int INT32; /* 4 byte */ 115 typedef unsigned int UINT32; /* 4 byte */ 116 typedef signed int INT; /* 4 byte */ 117 typedef unsigned int UINT; /* 4 byte */ 118 typedef signed long LONG; /* 4 byte */ 119 typedef unsigned long ULONG; /* 4 byte */ 120 typedef void VOID; 121 typedef signed short INT16; /* 2 byte */ 122 typedef unsigned short UINT16; /* 2 byte */ 123 /* -------------------------------------------------------------------------- */ 124 #endif 125 126 /* Alpha AXP running Digital Unix (and possibly also Linux/Alpha?) 127 This is a 64 bit architecture (AMD64, EM64T) */ 128 #if defined(__alpha) || defined(__X86_64__) 129 typedef signed char CHAR; /* 1 byte */ 130 typedef unsigned char UCHAR; /* 1 byte */ 131 typedef signed short INT16; /* 2 byte */ 132 typedef unsigned short UINT16; /* 2 byte */ 133 typedef signed int INT32; /* 4 byte */ 134 typedef unsigned int UINT32; /* 4 byte */ 135 /* -------------------------------------------------------------------------- */ 136 typedef signed int INT; /* 4 byte */ 137 typedef unsigned int UINT; /* 4 byte */ 138 typedef signed long LONG; /* 8 byte */ 139 typedef unsigned long ULONG; /* 8 byte */ 140 typedef void VOID; 141 #endif 142 143 144 /* AIX using xlc or gcc. Unfortunately, the _AIX constant is also defined 145 on 64 bit RS/6000 machines. As I do not have such a thing available, 146 I do not know how to discern it from a 32 bit one, so the following will 147 probably not work there. */ 148 149 #if defined(_AIX) 150 typedef signed char CHAR; /* 1 byte */ 151 typedef unsigned char UCHAR; /* 1 byte */ 152 typedef signed short INT16; /* 2 byte */ 153 typedef unsigned short UINT16; /* 2 byte */ 154 typedef signed int INT32; /* 4 byte */ 155 typedef unsigned int UINT32; /* 4 byte */ 156 /* -------------------------------------------------------------------------- */ 157 typedef signed int INT; /* 4 byte */ 158 typedef unsigned int UINT; /* 4 byte */ 159 typedef signed long LONG; /* 4 byte */ 160 typedef unsigned long ULONG; /* 4 byte */ 161 typedef void VOID; 162 #endif 163 164 #if defined(__sun__) 165 typedef signed char CHAR; /* 1 byte */ 166 typedef unsigned char UCHAR; /* 1 byte */ 167 typedef signed short INT16; /* 2 byte */ 168 typedef unsigned short UINT16; /* 2 byte */ 169 typedef signed int INT32; /* 4 byte */ 170 typedef unsigned int UINT32; /* 4 byte */ 171 /* -------------------------------------------------------------------------- */ 172 typedef signed int INT; /* 4 byte */ 173 typedef unsigned int UINT; /* 4 byte */ 174 typedef signed long LONG; /* 4 byte */ 175 typedef unsigned long ULONG; /* 4 byte */ 176 typedef void VOID; 177 #endif 178 179 #if defined(__hpux) 180 typedef signed char CHAR; /* 1 byte */ 181 typedef unsigned char UCHAR; /* 1 byte */ 182 typedef signed short INT16; /* 2 byte */ 183 typedef unsigned short UINT16; /* 2 byte */ 184 typedef signed int INT32; /* 4 byte */ 185 typedef unsigned int UINT32; /* 4 byte */ 186 /* -------------------------------------------------------------------------- */ 187 typedef signed int INT; /* 4 byte */ 188 typedef unsigned int UINT; /* 4 byte */ 189 typedef signed long LONG; /* 4 byte */ 190 typedef unsigned long ULONG; /* 4 byte */ 191 typedef void VOID; 192 #endif 193 194 /* the Borland compiler family - valid for DOS, OS/2 and Win32 versions */ 195 196 #if defined(__BORLANDC__) 197 #ifndef __OS2_H__ 198 typedef signed char CHAR; /* 1 byte */ 199 typedef unsigned char UCHAR; /* 1 byte */ 200 #endif 201 typedef signed short INT16; /* 2 byte */ 202 typedef unsigned short UINT16; /* 2 byte */ 203 typedef signed long INT32; /* 4 byte */ 204 typedef unsigned long UINT32; /* 4 byte */ 205 /* -------------------------------------------------------------------------- */ 206 #ifndef __OS2_H__ 207 typedef signed int INT; /* 2/4 byte */ 208 typedef unsigned int UINT; /* 2/4 byte */ 209 typedef signed long LONG; /* 4 byte */ 210 typedef unsigned long ULONG; /* 4 byte */ 211 #if !defined(__NT__) 212 typedef void VOID; 213 #endif 214 #endif 215 #endif /* #if defined(__BORLANDC__) */ 216 217 218 /* the IBM 32bit CSet/VAC++ compilers */ 219 220 #if defined(__IBMC__) || defined(__IBMCPP__) 221 #ifndef __OS2_H__ /* os2.h defines it already */ 222 typedef signed char CHAR; /* 1 byte */ 223 typedef unsigned char UCHAR; /* 1 byte */ 224 #endif 225 typedef signed short INT16; /* 2 byte */ 226 typedef unsigned short UINT16; /* 2 byte */ 227 typedef signed int INT32; /* 4 byte */ 228 typedef unsigned int UINT32; /* 4 byte */ 229 /* -------------------------------------------------------------------------- */ 230 #ifndef __OS2_H__ /* os2.h defines it already */ 231 typedef signed int INT; /* 4 byte */ 232 typedef unsigned int UINT; /* 4 byte */ 233 typedef signed long LONG; /* 4 byte */ 234 typedef unsigned long ULONG; /* 4 byte */ 235 typedef void VOID; 236 #endif 237 #endif /* #if defined(__IBMC(PP)__) */ 238 239 /* the uSoft 16bit compiler family for DOS */ 240 241 #if defined(__MSC__) 242 typedef signed char CHAR; /* 1 byte */ 243 typedef unsigned char UCHAR; /* 1 byte */ 244 typedef signed int INT16; /* 2 byte */ 245 typedef unsigned int UINT16; /* 2 byte */ 246 typedef signed long INT32; /* 4 byte */ 247 typedef unsigned long UINT32; /* 4 byte */ 248 /* -------------------------------------------------------------------------- */ 249 typedef signed int INT; /* 2 byte */ 250 typedef unsigned int UINT; /* 2 byte */ 251 typedef signed long LONG; /* 4 byte */ 252 typedef unsigned long ULONG; /* 4 byte */ 253 typedef void VOID; 254 #endif /* #if defined(_MSC_VER) */ 255 256 /* the Watcom 16/32bit compilers */ 257 258 #if defined(__WATCOMC__) 259 #if !defined(__OS2_H__) && !defined(__NT__) /* os2.h and windows.h defines it already */ 260 typedef signed char CHAR; /* 1 byte */ 261 typedef unsigned char UCHAR; /* 1 byte */ 262 #endif 263 #if !defined(__NT__) /* windows.h defines its already */ 264 typedef signed short int INT16; /* 2 byte */ 265 typedef unsigned short int UINT16; /* 2 byte */ 266 #endif 267 /*#if !defined(__OS2_H__)*/ 268 typedef signed int INT32; /* 4 byte */ 269 typedef unsigned int UINT32; /* 4 byte */ 270 /*#endif*/ 271 /* -------------------------------------------------------------------------- */ 272 #if !defined(__OS2_H__) && !defined(__NT__) /* os2.h and windows.h defines it already */ 273 typedef signed int INT; /* 2/4 byte */ 274 typedef unsigned int UINT; /* 2/4 byte */ 275 typedef signed long LONG; /* 4 byte */ 276 typedef unsigned long ULONG; /* 4 byte */ 277 typedef void VOID; 278 #endif 279 280 #if __WATCOMC__ >1000 281 typedef unsigned __int64 ULONGLONG; /* 8 bytes */ 282 typedef signed __int64 LONGLONG; /* 8 bytes */ 283 #endif 284 285 #endif /* #if defined(__WATCOMC__) */ 286 287 /* MacOS X with gcc */ 288 #if defined(__APPLE__) && defined(__MACH__) 289 typedef signed char CHAR; /* 1 byte */ 290 typedef unsigned char UCHAR; /* 1 byte */ 291 typedef signed short INT16; /* 2 byte */ 292 typedef unsigned short UINT16; /* 2 byte */ 293 typedef signed int INT32; /* 4 byte */ 294 typedef unsigned int UINT32; /* 4 byte */ 295 /* -------------------------------------------------------------------------- */ 296 typedef signed int INT; /* 4 byte */ 297 typedef unsigned int UINT; /* 4 byte */ 298 typedef signed long LONG; /* 4 byte */ 299 typedef unsigned long ULONG; /* 4 byte */ 300 typedef void VOID; 301 #endif 302 303 #else /* pstdint.h/stdint.h work for this platform */ 304 /* Compile with --std=gnu99 if you can or 305 * define HAS_STDINT_H if you have one in your system or 306 * define USE_PSTDINT_H if it works as replacement */ 307 #include "pstdint.h" 308 typedef int8_t CHAR; /* 1 byte */ 309 typedef uint8_t UCHAR; /* 1 byte */ 310 typedef int16_t INT16; /* 2 byte */ 311 typedef uint16_t UINT16; /* 2 byte */ 312 #ifndef __NT__ /* these are overlapped with windows' types */ 313 typedef int32_t INT32; /* 4 byte */ 314 typedef uint32_t UINT32; /* 4 byte */ 315 /* -------------------------------------------------------------------------- */ 316 typedef signed int INT; /* 4 byte */ 317 typedef unsigned int UINT; /* 4 byte */ 318 typedef signed long LONG; /* 4 byte */ 319 typedef unsigned long ULONG; /* 4 byte */ 320 typedef void VOID; 321 #endif 322 #endif 323 324 #ifdef __cplusplus 325 } 326 #endif 327 328 #endif /* #if !defined(_TYPESIZE_H) */ 329 330