aboutsummaryrefslogtreecommitdiffstats
path: root/src/gfx_types.h
blob: f6b2ee0f365ceb3992fa952b7a2ce0f8dabbfa2e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
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