µGFX  2.9
version 2.9
gfx_types.h
1 /*
2  * This file is subject to the terms of the GFX License. If a copy of
3  * the license was not distributed with this file, you can obtain one at:
4  *
5  * http://ugfx.io/license.html
6  */
7 
8 // Safety first!
9 #if (!defined(__STDC__) || !__STDC__) && !defined(__cplusplus) && !defined(_MSC_VER)
10  #error "K&R C Compilers are not supported. Try turning on ANSI C compliance or at least defining macro __STDC__=1"
11 #endif
12 
13 // This guarantees definition (even in C89) of:
14 // offsetof(s, m) - required and compiler dependant
15 // size_t - we try not to use this in uGFX as it may be 64 bit
16 // NULL - globally useful
17 // ptrdiff_t - globally useful
18 
19 #include <stddef.h>
20 
21 #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__)) )
22  #include <stdint.h>
23  typedef int_least8_t gI8;
24  typedef uint_least8_t gU8;
25  typedef int_least16_t gI16;
26  typedef uint_least16_t gU16;
27  typedef int_least32_t gI32;
28  typedef uint_least32_t gU32;
29 
30  #define GI8_C(v) INT8_C(v)
31  #define GU8_C(v) UINT8_C(v)
32  #define GI16_C(v) INT16_C(v)
33  #define GU16_C(v) UINT16_C(v)
34  #define GI32_C(v) INT32_C(v)
35  #define GU32_C(v) UINT32_C(v)
36 
37  #ifdef INT64_C
38  typedef int_least64_t gI64;
39  typedef uint_least64_t gU64;
40  #define GI64_C(v) INT64_C(v)
41  #define GU64_C(v) UINT64_C(v)
42  #define GFX_TYPE_64 GFXON
43  #else
44  #define GFX_TYPE_64 GFXOFF
45  #endif
46 
47 #elif defined(_MSC_VER)
48  #if (_MSC_VER < 1300)
49  typedef signed char gI8;
50  typedef unsigned char gU8;
51  typedef signed short gI16;
52  typedef unsigned short gU16;
53  typedef signed int gI32;
54  typedef unsigned int gU32;
55  #else
56  typedef signed __int8 gI8;
57  typedef unsigned __int8 gU8;
58  typedef signed __int16 gI16;
59  typedef unsigned __int16 gU16;
60  typedef signed __int32 gI32;
61  typedef unsigned __int32 gU32;
62  #endif
63  typedef signed __int64 gI64;
64  typedef unsigned __int64 gU64;
65 
66  #define GI8_C(v) v ## i8
67  #define GU8_C(v) v ## ui8
68  #define GI16_C(v) v ## i16
69  #define GU16_C(v) v ## ui16
70  #define GI32_C(v) v ## i32
71  #define GU32_C(v) v ## ui32
72  #define GI64_C(v) v ## i64
73  #define GU64_C(v) v ## ui64
74 
75  #define GFX_TYPE_64 GFXON
76 
77 /*#elif defined(__GNUC__) || defined(__GNUG__)
78  typedef __INT8_TYPE__ gI8;
79  typedef __UINT8_TYPE__ gU8;
80  typedef __INT16_TYPE__ gI16;
81  typedef __UINT16_TYPE__ gU16;
82  typedef __INT32_TYPE__ gI32;
83  typedef __UINT32_TYPE__ gU32;
84  #define GI8_C(v) v
85  #define GU8_C(v) v ## U
86  #define GI16_C(v) v
87  #define GU16_C(v) v ## U
88  #define GI32_C(v) v
89  #define GU32_C(v) v ## U
90  #define GFX_TYPE_64 GFXOFF
91 */
92 #else
93  #include <limits.h>
94 
95  /* char's are the smallest common type definition */
96  typedef signed char gI8;
97  typedef unsigned char gU8;
98  #define GI8_C(v) v
99  #define GU8_C(v) v ## U
100 
101  /*
102  * Deduce the type assignments from limits.h under the assumption that
103  * integer sizes in bits are powers of 2, and follow the ANSI
104  * definitions.
105  */
106  #if defined(SHRT_MAX) && SHRT_MAX >= 0x7FFF
107  typedef signed short gI16
108  typedef unsigned short gU16
109  #else
110  typedef signed int gI16
111  typedef unsigned int gU16
112  #endif
113  #define GI16_C(v) v
114  #define GU16_C(v) v ## U
115 
116  #if defined(INT_MAX) && INT_MAX >= 0x7FFFFFFL
117  typedef signed int gI32
118  typedef unsigned int gU32
119  #define GI32_C(v) v
120  #define GU32_C(v) v ## U
121  #else
122  typedef signed long gI32
123  typedef unsigned long gU32
124  #define GI32_C(v) v ## L
125  #define GU32_C(v) v ## UL
126  #endif
127 
128  #if defined(__GNUC__) && !defined(vxWorks)
129  #define GFX_TYPE_64 GFXON
130  __extension__ typedef long long gI64;
131  __extension__ typedef unsigned long long gU64;
132  #define GI64_C(v) v ## LL
133  #define GU64_C(v) v ## ULL
134  #elif defined(__MWERKS__) || defined (__SUNPRO_C) || defined (__SUNPRO_CC) || defined (__APPLE_CC__) || defined (_LONG_LONG) || defined (_CRAYC) || defined (S_SPLINT_S)
135  #define GFX_TYPE_64 GFXON
136  typedef long long gI64;
137  typedef unsigned long long gU64;
138  #define GI64_C(v) v ## LL
139  #define GU64_C(v) v ## ULL
140  #elif (defined(__WATCOMC__) && defined(__WATCOM_INT64__)) || (defined(_MSC_VER) && _INTEGRAL_MAX_BITS >= 64) || (defined (__BORLANDC__) && __BORLANDC__ > 0x460) || defined (__alpha) || defined (__DECC)
141  #define GFX_TYPE_64 GFXON
142  typedef signed __int64 gI64;
143  typedef unsigned __int64 gU64;
144  #else
145  #define GFX_TYPE_64 GFXOFF
146  #endif
147 #endif
148 
149 typedef void * gAny;
150 typedef void * gPtr;
151 typedef ptrdiff_t gPtrDiff;
152 #if GFX_MEM_LT64K
153  typedef gU16 gMemSize;
154 #else
155  typedef gU32 gMemSize;
156 #endif
157 typedef gI32 gFileSize;
158 typedef gI8 gBool;
159 #define gTrue (-1)
160 #define gFalse (0)
161 
162 #if GFX_COMPAT_V2
163  /* Is stdint.h already included? */
164  #ifndef INT16_C
165  typedef gI8 int8_t;
166  typedef gU8 uint8_t;
167  typedef gI16 int16_t;
168  typedef gU16 uint16_t;
169  typedef gI32 int32_t;
170  typedef gU32 uint32_t;
171  #endif
172  typedef gI8 bool_t;
173  #ifndef TRUE
174  #define TRUE gTrue
175  #endif
176  #ifndef FALSE
177  #define FALSE gFalse
178  #endif
179 #endif