diff options
author | inmarket <andrewh@inmarket.com.au> | 2018-06-23 13:02:07 +1000 |
---|---|---|
committer | inmarket <andrewh@inmarket.com.au> | 2018-06-23 13:02:07 +1000 |
commit | 41271d632b74f5cf47c30d3b699eb6b2786f2136 (patch) | |
tree | 78bcb729c6d6177ca598f28908fefd186c50e9b6 /src/gfx_types.h | |
parent | 3b97fb798e96514057bcf17263c1e5dbdcd7da26 (diff) | |
download | uGFX-41271d632b74f5cf47c30d3b699eb6b2786f2136.tar.gz uGFX-41271d632b74f5cf47c30d3b699eb6b2786f2136.tar.bz2 uGFX-41271d632b74f5cf47c30d3b699eb6b2786f2136.zip |
Added new type definitions - moving towards V3.0
Diffstat (limited to 'src/gfx_types.h')
-rw-r--r-- | src/gfx_types.h | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/src/gfx_types.h b/src/gfx_types.h new file mode 100644 index 00000000..f6b2ee0f --- /dev/null +++ b/src/gfx_types.h @@ -0,0 +1,165 @@ +/* + * This file is subject to the terms of the GFX License. If a copy of + * the license was not distributed with this file, you can obtain one at: + * + * http://ugfx.org/license.html + */ + +// Safety first! +#if (!defined(__STDC__) || !__STDC__) && !defined(__cplusplus) && !defined(_MSC_VER) + #error "K&R C Compilers are not supported. Try turning on ANSI C compliance or at least defining macro __STDC__=1" +#endif + +// This guarantees definition (even in C89) of: +// offsetof(s, m) - required and compiler dependant +// size_t - we try not to use this in uGFX as it may be 64 bit +// NULL - globally useful +// ptrdiff_t - globally useful + +#include <stddef.h> + +#if (defined(__STDC__) && __STDC__ && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x570) || (defined(_MSC_VER) && _MSC_VER >= 1600) || (defined (__WATCOMC__) && (defined (_STDINT_H_INCLUDED) || __WATCOMC__ >= 1250)) || (defined(__GNUC__) && (__GNUC__ > 3 || defined(_STDINT_H) || defined(_STDINT_H_) || defined (__UINT_FAST64_TYPE__)) ) + #include <stdint.h> + typedef int_least8_t gI8; + typedef uint_least8_t gU8; + typedef int_least16_t gI16; + typedef uint_least16_t gU16; + typedef int_least32_t gI32; + typedef uint_least32_t gU32; + + #define GI8_C(v) INT8_C(v) + #define GU8_C(v) UINT8_C(v) + #define GI16_C(v) INT16_C(v) + #define GU16_C(v) UINT16_C(v) + #define GI32_C(v) INT32_C(v) + #define GU32_C(v) UINT32_C(v) + + #ifdef INT64_C + typedef int_least64_t gI64; + typedef uint_least64_t gU64; + #define GI64_C(v) INT64_C(v) + #define GU64_C(v) UINT64_C(v) + #define GFX_TYPE_64 GFXON + #else + #define GFX_TYPE_64 GFXOFF + #endif + +#elif defined(_MSC_VER) + #if (_MSC_VER < 1300) + typedef signed char gI8; + typedef unsigned char gU8; + typedef signed short gI16; + typedef unsigned short gU16; + typedef signed int gI32; + typedef unsigned int gU32; + #else + typedef signed __int8 gI8; + typedef unsigned __int8 gU8; + typedef signed __int16 gI16; + typedef unsigned __int16 gU16; + typedef signed __int32 gI32; + typedef unsigned __int32 gU32; + #endif + typedef signed __int64 gI64; + typedef unsigned __int64 gU64; + + #define GI8_C(v) v ## i8 + #define GU8_C(v) v ## ui8 + #define GI16_C(v) v ## i16 + #define GU16_C(v) v ## ui16 + #define GI32_C(v) v ## i32 + #define GU32_C(v) v ## ui32 + #define GI64_C(v) v ## i64 + #define GU64_C(v) v ## ui64 + + #define GFX_TYPE_64 GFXON + +/*#elif defined(__GNUC__) || defined(__GNUG__) + typedef __INT8_TYPE__ int8_t; + typedef __UINT8_TYPE__ uint8_t; + typedef __INT16_TYPE__ int16_t; + typedef __UINT16_TYPE__ uint16_t; + typedef __INT32_TYPE__ int32_t; + typedef __UINT32_TYPE__ uint32_t; +*/ +#else + #include <limits.h> + + /* char's are the smallest common type definition */ + typedef signed char gI8; + typedef unsigned char gU8; + #define GI8_C(v) v + #define GU8_C(v) v ## U + + /* + * Deduce the type assignments from limits.h under the assumption that + * integer sizes in bits are powers of 2, and follow the ANSI + * definitions. + */ + #if defined(SHRT_MAX) && SHRT_MAX >= 0x7FFF + typedef signed short gI16 + typedef unsigned short gU16 + #else + typedef signed int gI16 + typedef unsigned int gU16 + #endif + #define GI16_C(v) v + #define GU16_C(v) v ## U + + #if defined(INT_MAX) && INT_MAX >= 0x7FFFFFFL + typedef signed int gI32 + typedef unsigned int gU32 + #define GI32_C(v) v + #define GU32_C(v) v ## U + #else + typedef signed long gI32 + typedef unsigned long gU32 + #define GI32_C(v) v ## L + #define GU32_C(v) v ## UL + #endif + + #if defined(__GNUC__) && !defined(vxWorks) + #define GFX_TYPE_64 GFXON + __extension__ typedef long long gI64; + __extension__ typedef unsigned long long gU64; + #define GI64_C(v) v ## LL + #define GU64_C(v) v ## ULL + #elif defined(__MWERKS__) || defined (__SUNPRO_C) || defined (__SUNPRO_CC) || defined (__APPLE_CC__) || defined (_LONG_LONG) || defined (_CRAYC) || defined (S_SPLINT_S) + #define GFX_TYPE_64 GFXON + typedef long long gI64; + typedef unsigned long long gU64; + #define GI64_C(v) v ## LL + #define GU64_C(v) v ## ULL + #elif (defined(__WATCOMC__) && defined(__WATCOM_INT64__)) || (defined(_MSC_VER) && _INTEGRAL_MAX_BITS >= 64) || (defined (__BORLANDC__) && __BORLANDC__ > 0x460) || defined (__alpha) || defined (__DECC) + #define GFX_TYPE_64 GFXON + typedef signed __int64 gI64; + typedef unsigned __int64 gU64; + #else + #define GFX_TYPE_64 GFXOFF + #endif +#endif + +typedef void * gPtr; +typedef ptrdiff_t gPtrDiff; +typedef gI8 gBool; +#define gTrue (-1) +#define gFalse (0) + +#if GFX_COMPAT_V2 + /* Is stdint.h already included? */ + #ifndef INT16_C + typedef gI8 int8_t; + typedef gU8 uint8_t; + typedef gI16 int16_t; + typedef gU16 uint16_t; + typedef gI32 int32_t; + typedef gU32 uint32_t; + #endif + typedef gI8 bool_t; + #ifndef TRUE + #define TRUE gTrue + #endif + #ifndef FALSE + #define FALSE gFalse + #endif +#endif |