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