1 /* 2 SDL - Simple DirectMedia Layer 3 Copyright (C) 1997-2004 Sam Lantinga 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Library General Public 7 License as published by the Free Software Foundation; either 8 version 2 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Library General Public License for more details. 14 15 You should have received a copy of the GNU Library General Public 16 License along with this library; if not, write to the Free 17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 19 Sam Lantinga 20 slouken (at) libsdl.org 21 */ 22 23 #ifdef SAVE_RCSID 24 static char rcsid = 25 "@(#) $Id: SDL_types.h,v 1.13 2004/07/21 04:53:26 slouken Exp $"; 26 #endif 27 28 /* General data types used by the SDL library */ 29 30 #ifndef _SDL_types_h 31 #define _SDL_types_h 32 33 /* The number of elements in a table */ 34 #define SDL_TABLESIZE(table) (sizeof(table)/sizeof(table[0])) 35 36 /* Basic data types */ 37 typedef enum { 38 SDL_FALSE = 0, 39 SDL_TRUE = 1 40 } SDL_bool; 41 42 #ifdef H_MMBASIC /* mmbasic.h (Tru64 MME) */ 43 /* Some of the basic types are already defined in mmbasic.h */ 44 typedef signed char Sint8; 45 typedef signed short Sint16; 46 typedef signed int Sint32; 47 #else 48 typedef unsigned char Uint8; 49 typedef signed char Sint8; 50 typedef unsigned short Uint16; 51 typedef signed short Sint16; 52 typedef unsigned int Uint32; 53 typedef signed int Sint32; 54 #endif 55 56 /* Figure out how to support 64-bit datatypes */ 57 #if !defined(__STRICT_ANSI__) 58 #ifdef __osf__ /* Tru64 */ 59 #define SDL_HAS_64BIT_TYPE long 60 #elif defined(__GNUC__) || defined(__MWERKS__) || defined(__SUNPRO_C) || defined(__DECC) 61 #define SDL_HAS_64BIT_TYPE long long 62 #elif defined(_MSC_VER) /* VC++ */ 63 #define SDL_HAS_64BIT_TYPE __int64 64 #endif 65 #endif /* !__STRICT_ANSI__ */ 66 67 /* The 64-bit type isn't available on EPOC/Symbian OS */ 68 #ifdef __SYMBIAN32__ 69 #undef SDL_HAS_64BIT_TYPE 70 #endif 71 72 /* The 64-bit datatype isn't supported on all platforms */ 73 #ifdef SDL_HAS_64BIT_TYPE 74 #ifndef H_MMBASIC 75 typedef unsigned SDL_HAS_64BIT_TYPE Uint64; 76 #endif 77 typedef SDL_HAS_64BIT_TYPE Sint64; 78 #else 79 /* This is really just a hack to prevent the compiler from complaining */ 80 typedef struct { 81 Uint32 hi; 82 Uint32 lo; 83 } Uint64, Sint64; 84 #endif 85 86 /* Make sure the types really have the right sizes */ 87 #define SDL_COMPILE_TIME_ASSERT(name, x) \ 88 typedef int SDL_dummy_ ## name[(x) * 2 - 1] 89 90 SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1); 91 SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1); 92 SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2); 93 SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2); 94 SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4); 95 SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4); 96 SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8); 97 SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); 98 99 /* Check to make sure enums are the size of ints, for structure packing. 100 For both Watcom C/C++ and Borland C/C++ the compiler option that makes 101 enums having the size of an int must be enabled. 102 This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11). 103 */ 104 /* Enable enums always int in CodeWarrior (for MPW use "-enum int") */ 105 #ifdef __MWERKS__ 106 #pragma enumsalwaysint on 107 #endif 108 109 typedef enum { 110 DUMMY_ENUM_VALUE 111 } SDL_DUMMY_ENUM; 112 113 SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int)); 114 115 #undef SDL_COMPILE_TIME_ASSERT 116 117 /* General keyboard/mouse state definitions */ 118 enum { SDL_PRESSED = 0x01, SDL_RELEASED = 0x00 }; 119 120 #endif 121