Browse code

Added Lanczos interpolation to the NCSF plugin, and cleaned up a bit of the other code, as well as removing pstdint.h since it's no longer needed.

Naram Qashat authored on 2013/04/23 20:29:21
Showing 1 changed files
1 1
deleted file mode 100644
... ...
@@ -1,800 +0,0 @@
1
-/*  A portable stdint.h
2
- ****************************************************************************
3
- *  BSD License:
4
- ****************************************************************************
5
- *
6
- *  Copyright (c) 2005-2011 Paul Hsieh
7
- *  All rights reserved.
8
- *
9
- *  Redistribution and use in source and binary forms, with or without
10
- *  modification, are permitted provided that the following conditions
11
- *  are met:
12
- *
13
- *  1. Redistributions of source code must retain the above copyright
14
- *     notice, this list of conditions and the following disclaimer.
15
- *  2. Redistributions in binary form must reproduce the above copyright
16
- *     notice, this list of conditions and the following disclaimer in the
17
- *     documentation and/or other materials provided with the distribution.
18
- *  3. The name of the author may not be used to endorse or promote products
19
- *     derived from this software without specific prior written permission.
20
- *
21
- *  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22
- *  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24
- *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25
- *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
- *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
- *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
- *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30
- *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
- *
32
- ****************************************************************************
33
- *
34
- *  Version 0.1.12
35
- *
36
- *  The ANSI C standard committee, for the C99 standard, specified the
37
- *  inclusion of a new standard include file called stdint.h.  This is
38
- *  a very useful and long desired include file which contains several
39
- *  very precise definitions for integer scalar types that is
40
- *  critically important for making portable several classes of
41
- *  applications including cryptography, hashing, variable length
42
- *  integer libraries and so on.  But for most developers its likely
43
- *  useful just for programming sanity.
44
- *
45
- *  The problem is that most compiler vendors have decided not to
46
- *  implement the C99 standard, and the next C++ language standard
47
- *  (which has a lot more mindshare these days) will be a long time in
48
- *  coming and its unknown whether or not it will include stdint.h or
49
- *  how much adoption it will have.  Either way, it will be a long time
50
- *  before all compilers come with a stdint.h and it also does nothing
51
- *  for the extremely large number of compilers available today which
52
- *  do not include this file, or anything comparable to it.
53
- *
54
- *  So that's what this file is all about.  Its an attempt to build a
55
- *  single universal include file that works on as many platforms as
56
- *  possible to deliver what stdint.h is supposed to.  A few things
57
- *  that should be noted about this file:
58
- *
59
- *    1) It is not guaranteed to be portable and/or present an identical
60
- *       interface on all platforms.  The extreme variability of the
61
- *       ANSI C standard makes this an impossibility right from the
62
- *       very get go. Its really only meant to be useful for the vast
63
- *       majority of platforms that possess the capability of
64
- *       implementing usefully and precisely defined, standard sized
65
- *       integer scalars.  Systems which are not intrinsically 2s
66
- *       complement may produce invalid constants.
67
- *
68
- *    2) There is an unavoidable use of non-reserved symbols.
69
- *
70
- *    3) Other standard include files are invoked.
71
- *
72
- *    4) This file may come in conflict with future platforms that do
73
- *       include stdint.h.  The hope is that one or the other can be
74
- *       used with no real difference.
75
- *
76
- *    5) In the current verison, if your platform can't represent
77
- *       int32_t, int16_t and int8_t, it just dumps out with a compiler
78
- *       error.
79
- *
80
- *    6) 64 bit integers may or may not be defined.  Test for their
81
- *       presence with the test: #ifdef INT64_MAX or #ifdef UINT64_MAX.
82
- *       Note that this is different from the C99 specification which
83
- *       requires the existence of 64 bit support in the compiler.  If
84
- *       this is not defined for your platform, yet it is capable of
85
- *       dealing with 64 bits then it is because this file has not yet
86
- *       been extended to cover all of your system's capabilities.
87
- *
88
- *    7) (u)intptr_t may or may not be defined.  Test for its presence
89
- *       with the test: #ifdef PTRDIFF_MAX.  If this is not defined
90
- *       for your platform, then it is because this file has not yet
91
- *       been extended to cover all of your system's capabilities, not
92
- *       because its optional.
93
- *
94
- *    8) The following might not been defined even if your platform is
95
- *       capable of defining it:
96
- *
97
- *       WCHAR_MIN
98
- *       WCHAR_MAX
99
- *       (u)int64_t
100
- *       PTRDIFF_MIN
101
- *       PTRDIFF_MAX
102
- *       (u)intptr_t
103
- *
104
- *    9) The following have not been defined:
105
- *
106
- *       WINT_MIN
107
- *       WINT_MAX
108
- *
109
- *   10) The criteria for defining (u)int_least(*)_t isn't clear,
110
- *       except for systems which don't have a type that precisely
111
- *       defined 8, 16, or 32 bit types (which this include file does
112
- *       not support anyways). Default definitions have been given.
113
- *
114
- *   11) The criteria for defining (u)int_fast(*)_t isn't something I
115
- *       would trust to any particular compiler vendor or the ANSI C
116
- *       committee.  It is well known that "compatible systems" are
117
- *       commonly created that have very different performance
118
- *       characteristics from the systems they are compatible with,
119
- *       especially those whose vendors make both the compiler and the
120
- *       system.  Default definitions have been given, but its strongly
121
- *       recommended that users never use these definitions for any
122
- *       reason (they do *NOT* deliver any serious guarantee of
123
- *       improved performance -- not in this file, nor any vendor's
124
- *       stdint.h).
125
- *
126
- *   12) The following macros:
127
- *
128
- *       PRINTF_INTMAX_MODIFIER
129
- *       PRINTF_INT64_MODIFIER
130
- *       PRINTF_INT32_MODIFIER
131
- *       PRINTF_INT16_MODIFIER
132
- *       PRINTF_LEAST64_MODIFIER
133
- *       PRINTF_LEAST32_MODIFIER
134
- *       PRINTF_LEAST16_MODIFIER
135
- *       PRINTF_INTPTR_MODIFIER
136
- *
137
- *       are strings which have been defined as the modifiers required
138
- *       for the "d", "u" and "x" printf formats to correctly output
139
- *       (u)intmax_t, (u)int64_t, (u)int32_t, (u)int16_t, (u)least64_t,
140
- *       (u)least32_t, (u)least16_t and (u)intptr_t types respectively.
141
- *       PRINTF_INTPTR_MODIFIER is not defined for some systems which
142
- *       provide their own stdint.h.  PRINTF_INT64_MODIFIER is not
143
- *       defined if INT64_MAX is not defined.  These are an extension
144
- *       beyond what C99 specifies must be in stdint.h.
145
- *
146
- *       In addition, the following macros are defined:
147
- *
148
- *       PRINTF_INTMAX_HEX_WIDTH
149
- *       PRINTF_INT64_HEX_WIDTH
150
- *       PRINTF_INT32_HEX_WIDTH
151
- *       PRINTF_INT16_HEX_WIDTH
152
- *       PRINTF_INT8_HEX_WIDTH
153
- *       PRINTF_INTMAX_DEC_WIDTH
154
- *       PRINTF_INT64_DEC_WIDTH
155
- *       PRINTF_INT32_DEC_WIDTH
156
- *       PRINTF_INT16_DEC_WIDTH
157
- *       PRINTF_INT8_DEC_WIDTH
158
- *
159
- *       Which specifies the maximum number of characters required to
160
- *       print the number of that type in either hexadecimal or decimal.
161
- *       These are an extension beyond what C99 specifies must be in
162
- *       stdint.h.
163
- *
164
- *  Compilers tested (all with 0 warnings at their highest respective
165
- *  settings): Borland Turbo C 2.0, WATCOM C/C++ 11.0 (16 bits and 32
166
- *  bits), Microsoft Visual C++ 6.0 (32 bit), Microsoft Visual Studio
167
- *  .net (VC7), Intel C++ 4.0, GNU gcc v3.3.3
168
- *
169
- *  This file should be considered a work in progress.  Suggestions for
170
- *  improvements, especially those which increase coverage are strongly
171
- *  encouraged.
172
- *
173
- *  Acknowledgements
174
- *
175
- *  The following people have made significant contributions to the
176
- *  development and testing of this file:
177
- *
178
- *  Chris Howie
179
- *  John Steele Scott
180
- *  Dave Thorup
181
- *  John Dill
182
- *
183
- */
184
-
185
-#include <cstddef>
186
-#include <climits>
187
-#include <csignal>
188
-
189
-/*
190
- *  For gcc with _STDINT_H, fill in the PRINTF_INT*_MODIFIER macros, and
191
- *  do nothing else.  On the Mac OS X version of gcc this is _STDINT_H_.
192
- */
193
-
194
-#if ((defined(__STDC__) && __STDC__ && __STDC_VERSION__ >= 199901L) || (defined (__WATCOMC__) && (defined (_STDINT_H_INCLUDED) || __WATCOMC__ >= 1250)) || (defined(__GNUC__) && (defined(_STDINT_H) || defined(_STDINT_H_) || defined (__UINT_FAST64_TYPE__)) ) || (defined(_MSC_VER) && _MSC_VER >= 1600)) && !defined (_PSTDINT_H_INCLUDED)
195
-#include <stdint.h>
196
-#define _PSTDINT_H_INCLUDED
197
-# ifndef PRINTF_INT64_MODIFIER
198
-#  define PRINTF_INT64_MODIFIER "ll"
199
-# endif
200
-# ifndef PRINTF_INT32_MODIFIER
201
-#  define PRINTF_INT32_MODIFIER "l"
202
-# endif
203
-# ifndef PRINTF_INT16_MODIFIER
204
-#  define PRINTF_INT16_MODIFIER "h"
205
-# endif
206
-# ifndef PRINTF_INTMAX_MODIFIER
207
-#  define PRINTF_INTMAX_MODIFIER PRINTF_INT64_MODIFIER
208
-# endif
209
-# ifndef PRINTF_INT64_HEX_WIDTH
210
-#  define PRINTF_INT64_HEX_WIDTH "16"
211
-# endif
212
-# ifndef PRINTF_INT32_HEX_WIDTH
213
-#  define PRINTF_INT32_HEX_WIDTH "8"
214
-# endif
215
-# ifndef PRINTF_INT16_HEX_WIDTH
216
-#  define PRINTF_INT16_HEX_WIDTH "4"
217
-# endif
218
-# ifndef PRINTF_INT8_HEX_WIDTH
219
-#  define PRINTF_INT8_HEX_WIDTH "2"
220
-# endif
221
-# ifndef PRINTF_INT64_DEC_WIDTH
222
-#  define PRINTF_INT64_DEC_WIDTH "20"
223
-# endif
224
-# ifndef PRINTF_INT32_DEC_WIDTH
225
-#  define PRINTF_INT32_DEC_WIDTH "10"
226
-# endif
227
-# ifndef PRINTF_INT16_DEC_WIDTH
228
-#  define PRINTF_INT16_DEC_WIDTH "5"
229
-# endif
230
-# ifndef PRINTF_INT8_DEC_WIDTH
231
-#  define PRINTF_INT8_DEC_WIDTH "3"
232
-# endif
233
-# ifndef PRINTF_INTMAX_HEX_WIDTH
234
-#  define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT64_HEX_WIDTH
235
-# endif
236
-# ifndef PRINTF_INTMAX_DEC_WIDTH
237
-#  define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT64_DEC_WIDTH
238
-# endif
239
-
240
-/*
241
- *  Something really weird is going on with Open Watcom.  Just pull some of
242
- *  these duplicated definitions from Open Watcom's stdint.h file for now.
243
- */
244
-
245
-# if defined (__WATCOMC__) && __WATCOMC__ >= 1250
246
-#  if !defined (INT64_C)
247
-#   define INT64_C(x)   (x + (INT64_MAX - INT64_MAX))
248
-#  endif
249
-#  if !defined (UINT64_C)
250
-#   define UINT64_C(x)  (x + (UINT64_MAX - UINT64_MAX))
251
-#  endif
252
-#  if !defined (INT32_C)
253
-#   define INT32_C(x)   (x + (INT32_MAX - INT32_MAX))
254
-#  endif
255
-#  if !defined (UINT32_C)
256
-#   define UINT32_C(x)  (x + (UINT32_MAX - UINT32_MAX))
257
-#  endif
258
-#  if !defined (INT16_C)
259
-#   define INT16_C(x)   (x)
260
-#  endif
261
-#  if !defined (UINT16_C)
262
-#   define UINT16_C(x)  (x)
263
-#  endif
264
-#  if !defined (INT8_C)
265
-#   define INT8_C(x)   (x)
266
-#  endif
267
-#  if !defined (UINT8_C)
268
-#   define UINT8_C(x)  (x)
269
-#  endif
270
-#  if !defined (UINT64_MAX)
271
-#   define UINT64_MAX  18446744073709551615ULL
272
-#  endif
273
-#  if !defined (INT64_MAX)
274
-#   define INT64_MAX  9223372036854775807LL
275
-#  endif
276
-#  if !defined (UINT32_MAX)
277
-#   define UINT32_MAX  4294967295UL
278
-#  endif
279
-#  if !defined (INT32_MAX)
280
-#   define INT32_MAX  2147483647L
281
-#  endif
282
-#  if !defined (INTMAX_MAX)
283
-#   define INTMAX_MAX INT64_MAX
284
-#  endif
285
-#  if !defined (INTMAX_MIN)
286
-#   define INTMAX_MIN INT64_MIN
287
-#  endif
288
-# endif
289
-#endif
290
-
291
-#ifndef _PSTDINT_H_INCLUDED
292
-#define _PSTDINT_H_INCLUDED
293
-
294
-#ifndef SIZE_MAX
295
-# define SIZE_MAX (~(size_t)0)
296
-#endif
297
-
298
-/*
299
- *  Deduce the type assignments from limits.h under the assumption that
300
- *  integer sizes in bits are powers of 2, and follow the ANSI
301
- *  definitions.
302
- */
303
-
304
-#ifndef UINT8_MAX
305
-# define UINT8_MAX 0xff
306
-#endif
307
-#ifndef uint8_t
308
-# if (UCHAR_MAX == UINT8_MAX) || defined (S_SPLINT_S)
309
-    typedef unsigned char uint8_t;
310
-#   define UINT8_C(v) ((uint8_t) v)
311
-# else
312
-#   error "Platform not supported"
313
-# endif
314
-#endif
315
-
316
-#ifndef INT8_MAX
317
-# define INT8_MAX 0x7f
318
-#endif
319
-#ifndef INT8_MIN
320
-# define INT8_MIN INT8_C(0x80)
321
-#endif
322
-#ifndef int8_t
323
-# if (SCHAR_MAX == INT8_MAX) || defined (S_SPLINT_S)
324
-    typedef signed char int8_t;
325
-#   define INT8_C(v) ((int8_t) v)
326
-# else
327
-#   error "Platform not supported"
328
-# endif
329
-#endif
330
-
331
-#ifndef UINT16_MAX
332
-# define UINT16_MAX 0xffff
333
-#endif
334
-#ifndef uint16_t
335
-#if (UINT_MAX == UINT16_MAX) || defined (S_SPLINT_S)
336
-  typedef unsigned int uint16_t;
337
-# ifndef PRINTF_INT16_MODIFIER
338
-#  define PRINTF_INT16_MODIFIER ""
339
-# endif
340
-# define UINT16_C(v) ((uint16_t) (v))
341
-#elif (USHRT_MAX == UINT16_MAX)
342
-  typedef unsigned short uint16_t;
343
-# define UINT16_C(v) ((uint16_t) (v))
344
-# ifndef PRINTF_INT16_MODIFIER
345
-#  define PRINTF_INT16_MODIFIER "h"
346
-# endif
347
-#else
348
-#error "Platform not supported"
349
-#endif
350
-#endif
351
-
352
-#ifndef INT16_MAX
353
-# define INT16_MAX 0x7fff
354
-#endif
355
-#ifndef INT16_MIN
356
-# define INT16_MIN INT16_C(0x8000)
357
-#endif
358
-#ifndef int16_t
359
-#if (INT_MAX == INT16_MAX) || defined (S_SPLINT_S)
360
-  typedef signed int int16_t;
361
-# define INT16_C(v) ((int16_t) (v))
362
-# ifndef PRINTF_INT16_MODIFIER
363
-#  define PRINTF_INT16_MODIFIER ""
364
-# endif
365
-#elif (SHRT_MAX == INT16_MAX)
366
-  typedef signed short int16_t;
367
-# define INT16_C(v) ((int16_t) (v))
368
-# ifndef PRINTF_INT16_MODIFIER
369
-#  define PRINTF_INT16_MODIFIER "h"
370
-# endif
371
-#else
372
-#error "Platform not supported"
373
-#endif
374
-#endif
375
-
376
-#ifndef UINT32_MAX
377
-# define UINT32_MAX (0xffffffffUL)
378
-#endif
379
-#ifndef uint32_t
380
-#if (ULONG_MAX == UINT32_MAX) || defined (S_SPLINT_S)
381
-  typedef unsigned long uint32_t;
382
-# define UINT32_C(v) v ## UL
383
-# ifndef PRINTF_INT32_MODIFIER
384
-#  define PRINTF_INT32_MODIFIER "l"
385
-# endif
386
-#elif (UINT_MAX == UINT32_MAX)
387
-  typedef unsigned int uint32_t;
388
-# ifndef PRINTF_INT32_MODIFIER
389
-#  define PRINTF_INT32_MODIFIER ""
390
-# endif
391
-# define UINT32_C(v) v ## U
392
-#elif (USHRT_MAX == UINT32_MAX)
393
-  typedef unsigned short uint32_t;
394
-# define UINT32_C(v) ((unsigned short) (v))
395
-# ifndef PRINTF_INT32_MODIFIER
396
-#  define PRINTF_INT32_MODIFIER ""
397
-# endif
398
-#else
399
-#error "Platform not supported"
400
-#endif
401
-#endif
402
-
403
-#ifndef INT32_MAX
404
-# define INT32_MAX (0x7fffffffL)
405
-#endif
406
-#ifndef INT32_MIN
407
-# define INT32_MIN INT32_C(0x80000000)
408
-#endif
409
-#ifndef int32_t
410
-#if (LONG_MAX == INT32_MAX) || defined (S_SPLINT_S)
411
-  typedef signed long int32_t;
412
-# define INT32_C(v) v ## L
413
-# ifndef PRINTF_INT32_MODIFIER
414
-#  define PRINTF_INT32_MODIFIER "l"
415
-# endif
416
-#elif (INT_MAX == INT32_MAX)
417
-  typedef signed int int32_t;
418
-# define INT32_C(v) v
419
-# ifndef PRINTF_INT32_MODIFIER
420
-#  define PRINTF_INT32_MODIFIER ""
421
-# endif
422
-#elif (SHRT_MAX == INT32_MAX)
423
-  typedef signed short int32_t;
424
-# define INT32_C(v) ((short) (v))
425
-# ifndef PRINTF_INT32_MODIFIER
426
-#  define PRINTF_INT32_MODIFIER ""
427
-# endif
428
-#else
429
-#error "Platform not supported"
430
-#endif
431
-#endif
432
-
433
-/*
434
- *  The macro stdint_int64_defined is temporarily used to record
435
- *  whether or not 64 integer support is available.  It must be
436
- *  defined for any 64 integer extensions for new platforms that are
437
- *  added.
438
- */
439
-
440
-#undef stdint_int64_defined
441
-#if (defined(__STDC__) && defined(__STDC_VERSION__)) || defined (S_SPLINT_S)
442
-# if (__STDC__ && __STDC_VERSION__ >= 199901L) || defined (S_SPLINT_S)
443
-#  define stdint_int64_defined
444
-   typedef long long int64_t;
445
-   typedef unsigned long long uint64_t;
446
-#  define UINT64_C(v) v ## ULL
447
-#  define  INT64_C(v) v ## LL
448
-#  ifndef PRINTF_INT64_MODIFIER
449
-#   define PRINTF_INT64_MODIFIER "ll"
450
-#  endif
451
-# endif
452
-#endif
453
-
454
-#if !defined (stdint_int64_defined)
455
-# if defined(__GNUC__)
456
-#  define stdint_int64_defined
457
-   __extension__ typedef long long int64_t;
458
-   __extension__ typedef unsigned long long uint64_t;
459
-#  define UINT64_C(v) v ## ULL
460
-#  define  INT64_C(v) v ## LL
461
-#  ifndef PRINTF_INT64_MODIFIER
462
-#   define PRINTF_INT64_MODIFIER "ll"
463
-#  endif
464
-# elif defined(__MWERKS__) || defined (__SUNPRO_C) || defined (__SUNPRO_CC) || defined (__APPLE_CC__) || defined (_LONG_LONG) || defined (_CRAYC) || defined (S_SPLINT_S)
465
-#  define stdint_int64_defined
466
-   typedef long long int64_t;
467
-   typedef unsigned long long uint64_t;
468
-#  define UINT64_C(v) v ## ULL
469
-#  define  INT64_C(v) v ## LL
470
-#  ifndef PRINTF_INT64_MODIFIER
471
-#   define PRINTF_INT64_MODIFIER "ll"
472
-#  endif
473
-# elif (defined(__WATCOMC__) && defined(__WATCOM_INT64__)) || (defined(_MSC_VER) && _INTEGRAL_MAX_BITS >= 64) || (defined (__BORLANDC__) && __BORLANDC__ > 0x460) || defined (__alpha) || defined (__DECC)
474
-#  define stdint_int64_defined
475
-   typedef __int64 int64_t;
476
-   typedef unsigned __int64 uint64_t;
477
-#  define UINT64_C(v) v ## UI64
478
-#  define  INT64_C(v) v ## I64
479
-#  ifndef PRINTF_INT64_MODIFIER
480
-#   define PRINTF_INT64_MODIFIER "I64"
481
-#  endif
482
-# endif
483
-#endif
484
-
485
-#if !defined (LONG_LONG_MAX) && defined (INT64_C)
486
-# define LONG_LONG_MAX INT64_C (9223372036854775807)
487
-#endif
488
-#ifndef ULONG_LONG_MAX
489
-# define ULONG_LONG_MAX UINT64_C (18446744073709551615)
490
-#endif
491
-
492
-#if !defined (INT64_MAX) && defined (INT64_C)
493
-# define INT64_MAX INT64_C (9223372036854775807)
494
-#endif
495
-#if !defined (INT64_MIN) && defined (INT64_C)
496
-# define INT64_MIN INT64_C (-9223372036854775808)
497
-#endif
498
-#if !defined (UINT64_MAX) && defined (INT64_C)
499
-# define UINT64_MAX UINT64_C (18446744073709551615)
500
-#endif
501
-
502
-/*
503
- *  Width of hexadecimal for number field.
504
- */
505
-
506
-#ifndef PRINTF_INT64_HEX_WIDTH
507
-# define PRINTF_INT64_HEX_WIDTH "16"
508
-#endif
509
-#ifndef PRINTF_INT32_HEX_WIDTH
510
-# define PRINTF_INT32_HEX_WIDTH "8"
511
-#endif
512
-#ifndef PRINTF_INT16_HEX_WIDTH
513
-# define PRINTF_INT16_HEX_WIDTH "4"
514
-#endif
515
-#ifndef PRINTF_INT8_HEX_WIDTH
516
-# define PRINTF_INT8_HEX_WIDTH "2"
517
-#endif
518
-
519
-#ifndef PRINTF_INT64_DEC_WIDTH
520
-# define PRINTF_INT64_DEC_WIDTH "20"
521
-#endif
522
-#ifndef PRINTF_INT32_DEC_WIDTH
523
-# define PRINTF_INT32_DEC_WIDTH "10"
524
-#endif
525
-#ifndef PRINTF_INT16_DEC_WIDTH
526
-# define PRINTF_INT16_DEC_WIDTH "5"
527
-#endif
528
-#ifndef PRINTF_INT8_DEC_WIDTH
529
-# define PRINTF_INT8_DEC_WIDTH "3"
530
-#endif
531
-
532
-/*
533
- *  Ok, lets not worry about 128 bit integers for now.  Moore's law says
534
- *  we don't need to worry about that until about 2040 at which point
535
- *  we'll have bigger things to worry about.
536
- */
537
-
538
-#ifdef stdint_int64_defined
539
-  typedef int64_t intmax_t;
540
-  typedef uint64_t uintmax_t;
541
-# define  INTMAX_MAX   INT64_MAX
542
-# define  INTMAX_MIN   INT64_MIN
543
-# define UINTMAX_MAX  UINT64_MAX
544
-# define UINTMAX_C(v) UINT64_C(v)
545
-# define  INTMAX_C(v)  INT64_C(v)
546
-# ifndef PRINTF_INTMAX_MODIFIER
547
-#   define PRINTF_INTMAX_MODIFIER PRINTF_INT64_MODIFIER
548
-# endif
549
-# ifndef PRINTF_INTMAX_HEX_WIDTH
550
-#  define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT64_HEX_WIDTH
551
-# endif
552
-# ifndef PRINTF_INTMAX_DEC_WIDTH
553
-#  define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT64_DEC_WIDTH
554
-# endif
555
-#else
556
-  typedef int32_t intmax_t;
557
-  typedef uint32_t uintmax_t;
558
-# define  INTMAX_MAX   INT32_MAX
559
-# define UINTMAX_MAX  UINT32_MAX
560
-# define UINTMAX_C(v) UINT32_C(v)
561
-# define  INTMAX_C(v)  INT32_C(v)
562
-# ifndef PRINTF_INTMAX_MODIFIER
563
-#   define PRINTF_INTMAX_MODIFIER PRINTF_INT32_MODIFIER
564
-# endif
565
-# ifndef PRINTF_INTMAX_HEX_WIDTH
566
-#  define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT32_HEX_WIDTH
567
-# endif
568
-# ifndef PRINTF_INTMAX_DEC_WIDTH
569
-#  define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT32_DEC_WIDTH
570
-# endif
571
-#endif
572
-
573
-/*
574
- *  Because this file currently only supports platforms which have
575
- *  precise powers of 2 as bit sizes for the default integers, the
576
- *  least definitions are all trivial.  Its possible that a future
577
- *  version of this file could have different definitions.
578
- */
579
-
580
-#ifndef stdint_least_defined
581
-  typedef   int8_t   int_least8_t;
582
-  typedef  uint8_t  uint_least8_t;
583
-  typedef  int16_t  int_least16_t;
584
-  typedef uint16_t uint_least16_t;
585
-  typedef  int32_t  int_least32_t;
586
-  typedef uint32_t uint_least32_t;
587
-# define PRINTF_LEAST32_MODIFIER PRINTF_INT32_MODIFIER
588
-# define PRINTF_LEAST16_MODIFIER PRINTF_INT16_MODIFIER
589
-# define  UINT_LEAST8_MAX  UINT8_MAX
590
-# define   INT_LEAST8_MAX   INT8_MAX
591
-# define UINT_LEAST16_MAX UINT16_MAX
592
-# define  INT_LEAST16_MAX  INT16_MAX
593
-# define UINT_LEAST32_MAX UINT32_MAX
594
-# define  INT_LEAST32_MAX  INT32_MAX
595
-# define   INT_LEAST8_MIN   INT8_MIN
596
-# define  INT_LEAST16_MIN  INT16_MIN
597
-# define  INT_LEAST32_MIN  INT32_MIN
598
-# ifdef stdint_int64_defined
599
-    typedef  int64_t  int_least64_t;
600
-    typedef uint64_t uint_least64_t;
601
-#   define PRINTF_LEAST64_MODIFIER PRINTF_INT64_MODIFIER
602
-#   define UINT_LEAST64_MAX UINT64_MAX
603
-#   define  INT_LEAST64_MAX  INT64_MAX
604
-#   define  INT_LEAST64_MIN  INT64_MIN
605
-# endif
606
-#endif
607
-#undef stdint_least_defined
608
-
609
-/*
610
- *  The ANSI C committee pretending to know or specify anything about
611
- *  performance is the epitome of misguided arrogance.  The mandate of
612
- *  this file is to *ONLY* ever support that absolute minimum
613
- *  definition of the fast integer types, for compatibility purposes.
614
- *  No extensions, and no attempt to suggest what may or may not be a
615
- *  faster integer type will ever be made in this file.  Developers are
616
- *  warned to stay away from these types when using this or any other
617
- *  stdint.h.
618
- */
619
-
620
-typedef   int_least8_t   int_fast8_t;
621
-typedef  uint_least8_t  uint_fast8_t;
622
-typedef  int_least16_t  int_fast16_t;
623
-typedef uint_least16_t uint_fast16_t;
624
-typedef  int_least32_t  int_fast32_t;
625
-typedef uint_least32_t uint_fast32_t;
626
-#define  UINT_FAST8_MAX  UINT_LEAST8_MAX
627
-#define   INT_FAST8_MAX   INT_LEAST8_MAX
628
-#define UINT_FAST16_MAX UINT_LEAST16_MAX
629
-#define  INT_FAST16_MAX  INT_LEAST16_MAX
630
-#define UINT_FAST32_MAX UINT_LEAST32_MAX
631
-#define  INT_FAST32_MAX  INT_LEAST32_MAX
632
-#define   INT_FAST8_MIN   INT_LEAST8_MIN
633
-#define  INT_FAST16_MIN  INT_LEAST16_MIN
634
-#define  INT_FAST32_MIN  INT_LEAST32_MIN
635
-#ifdef stdint_int64_defined
636
-  typedef  int_least64_t  int_fast64_t;
637
-  typedef uint_least64_t uint_fast64_t;
638
-# define UINT_FAST64_MAX UINT_LEAST64_MAX
639
-# define  INT_FAST64_MAX  INT_LEAST64_MAX
640
-# define  INT_FAST64_MIN  INT_LEAST64_MIN
641
-#endif
642
-
643
-#undef stdint_int64_defined
644
-
645
-/*
646
- *  Whatever piecemeal, per compiler thing we can do about the wchar_t
647
- *  type limits.
648
- */
649
-
650
-#if defined(__WATCOMC__) || defined(_MSC_VER) || defined (__GNUC__)
651
-# include <wchar.h>
652
-# ifndef WCHAR_MIN
653
-#  define WCHAR_MIN 0
654
-# endif
655
-# ifndef WCHAR_MAX
656
-#  define WCHAR_MAX ((wchar_t)-1)
657
-# endif
658
-#endif
659
-
660
-/*
661
- *  Whatever piecemeal, per compiler/platform thing we can do about the
662
- *  (u)intptr_t types and limits.
663
- */
664
-
665
-#if defined (_MSC_VER) && defined (_UINTPTR_T_DEFINED)
666
-# define STDINT_H_UINTPTR_T_DEFINED
667
-#endif
668
-
669
-#ifndef STDINT_H_UINTPTR_T_DEFINED
670
-# if defined (__alpha__) || defined (__ia64__) || defined (__x86_64__) || defined (_WIN64)
671
-#  define stdint_intptr_bits 64
672
-# elif defined (__WATCOMC__) || defined (__TURBOC__)
673
-#  if defined(__TINY__) || defined(__SMALL__) || defined(__MEDIUM__)
674
-#    define stdint_intptr_bits 16
675
-#  else
676
-#    define stdint_intptr_bits 32
677
-#  endif
678
-# elif defined (__i386__) || defined (_WIN32) || defined (WIN32)
679
-#  define stdint_intptr_bits 32
680
-# elif defined (__INTEL_COMPILER)
681
-/* TODO -- what did Intel do about x86-64? */
682
-# endif
683
-
684
-# ifdef stdint_intptr_bits
685
-#  define stdint_intptr_glue3_i(a,b,c)  a##b##c
686
-#  define stdint_intptr_glue3(a,b,c)    stdint_intptr_glue3_i(a,b,c)
687
-#  ifndef PRINTF_INTPTR_MODIFIER
688
-#    define PRINTF_INTPTR_MODIFIER      stdint_intptr_glue3(PRINTF_INT,stdint_intptr_bits,_MODIFIER)
689
-#  endif
690
-#  ifndef PTRDIFF_MAX
691
-#    define PTRDIFF_MAX                 stdint_intptr_glue3(INT,stdint_intptr_bits,_MAX)
692
-#  endif
693
-#  ifndef PTRDIFF_MIN
694
-#    define PTRDIFF_MIN                 stdint_intptr_glue3(INT,stdint_intptr_bits,_MIN)
695
-#  endif
696
-#  ifndef UINTPTR_MAX
697
-#    define UINTPTR_MAX                 stdint_intptr_glue3(UINT,stdint_intptr_bits,_MAX)
698
-#  endif
699
-#  ifndef INTPTR_MAX
700
-#    define INTPTR_MAX                  stdint_intptr_glue3(INT,stdint_intptr_bits,_MAX)
701
-#  endif
702
-#  ifndef INTPTR_MIN
703
-#    define INTPTR_MIN                  stdint_intptr_glue3(INT,stdint_intptr_bits,_MIN)
704
-#  endif
705
-#  ifndef INTPTR_C
706
-#    define INTPTR_C(x)                 stdint_intptr_glue3(INT,stdint_intptr_bits,_C)(x)
707
-#  endif
708
-#  ifndef UINTPTR_C
709
-#    define UINTPTR_C(x)                stdint_intptr_glue3(UINT,stdint_intptr_bits,_C)(x)
710
-#  endif
711
-  typedef stdint_intptr_glue3(uint,stdint_intptr_bits,_t) uintptr_t;
712
-  typedef stdint_intptr_glue3( int,stdint_intptr_bits,_t)  intptr_t;
713
-# else
714
-/* TODO -- This following is likely wrong for some platforms, and does
715
-   nothing for the definition of uintptr_t. */
716
-  typedef ptrdiff_t intptr_t;
717
-# endif
718
-# define STDINT_H_UINTPTR_T_DEFINED
719
-#endif
720
-
721
-/*
722
- *  Assumes sig_atomic_t is signed and we have a 2s complement machine.
723
- */
724
-
725
-#ifndef SIG_ATOMIC_MAX
726
-# define SIG_ATOMIC_MAX ((((sig_atomic_t) 1) << (sizeof (sig_atomic_t)*CHAR_BIT-1)) - 1)
727
-#endif
728
-
729
-#endif
730
-
731
-#if defined (__TEST_PSTDINT_FOR_CORRECTNESS)
732
-
733
-/*
734
- *  Please compile with the maximum warning settings to make sure macros are not
735
- *  defined more than once.
736
- */
737
-
738
-#include <stdlib.h>
739
-#include <stdio.h>
740
-#include <string.h>
741
-
742
-#define glue3_aux(x,y,z) x ## y ## z
743
-#define glue3(x,y,z) glue3_aux(x,y,z)
744
-
745
-#define DECLU(bits) glue3(uint,bits,_t) glue3(u,bits,=) glue3(UINT,bits,_C) (0);
746
-#define DECLI(bits) glue3(int,bits,_t) glue3(i,bits,=) glue3(INT,bits,_C) (0);
747
-
748
-#define DECL(us,bits) glue3(DECL,us,) (bits)
749
-
750
-#define TESTUMAX(bits) glue3(u,bits,=) glue3(~,u,bits); if (glue3(UINT,bits,_MAX) glue3(!=,u,bits)) printf ("Something wrong with UINT%d_MAX\n", bits)
751
-
752
-int main () {
753
-	DECL(I,8)
754
-	DECL(U,8)
755
-	DECL(I,16)
756
-	DECL(U,16)
757
-	DECL(I,32)
758
-	DECL(U,32)
759
-#ifdef INT64_MAX
760
-	DECL(I,64)
761
-	DECL(U,64)
762
-#endif
763
-	intmax_t imax = INTMAX_C(0);
764
-	uintmax_t umax = UINTMAX_C(0);
765
-	char str0[256], str1[256];
766
-
767
-	sprintf (str0, "%d %x\n", 0, ~0);
768
-
769
-	sprintf (str1, "%d %x\n",  i8, ~0);
770
-	if (0 != strcmp (str0, str1)) printf ("Something wrong with i8 : %s\n", str1);
771
-	sprintf (str1, "%u %x\n",  u8, ~0);
772
-	if (0 != strcmp (str0, str1)) printf ("Something wrong with u8 : %s\n", str1);
773
-	sprintf (str1, "%d %x\n",  i16, ~0);
774
-	if (0 != strcmp (str0, str1)) printf ("Something wrong with i16 : %s\n", str1);
775
-	sprintf (str1, "%u %x\n",  u16, ~0);
776
-	if (0 != strcmp (str0, str1)) printf ("Something wrong with u16 : %s\n", str1);
777
-	sprintf (str1, "%" PRINTF_INT32_MODIFIER "d %x\n",  i32, ~0);
778
-	if (0 != strcmp (str0, str1)) printf ("Something wrong with i32 : %s\n", str1);
779
-	sprintf (str1, "%" PRINTF_INT32_MODIFIER "u %x\n",  u32, ~0);
780
-	if (0 != strcmp (str0, str1)) printf ("Something wrong with u32 : %s\n", str1);
781
-#ifdef INT64_MAX
782
-	sprintf (str1, "%" PRINTF_INT64_MODIFIER "d %x\n",  i64, ~0);
783
-	if (0 != strcmp (str0, str1)) printf ("Something wrong with i64 : %s\n", str1);
784
-#endif
785
-	sprintf (str1, "%" PRINTF_INTMAX_MODIFIER "d %x\n",  imax, ~0);
786
-	if (0 != strcmp (str0, str1)) printf ("Something wrong with imax : %s\n", str1);
787
-	sprintf (str1, "%" PRINTF_INTMAX_MODIFIER "u %x\n",  umax, ~0);
788
-	if (0 != strcmp (str0, str1)) printf ("Something wrong with umax : %s\n", str1);
789
-
790
-	TESTUMAX(8);
791
-	TESTUMAX(16);
792
-	TESTUMAX(32);
793
-#ifdef INT64_MAX
794
-	TESTUMAX(64);
795
-#endif
796
-
797
-	return EXIT_SUCCESS;
798
-}
799
-
800
-#endif
Browse code

Import actual code.

Naram Qashat authored on 2013/03/26 02:41:19
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,800 @@
1
+/*  A portable stdint.h
2
+ ****************************************************************************
3
+ *  BSD License:
4
+ ****************************************************************************
5
+ *
6
+ *  Copyright (c) 2005-2011 Paul Hsieh
7
+ *  All rights reserved.
8
+ *
9
+ *  Redistribution and use in source and binary forms, with or without
10
+ *  modification, are permitted provided that the following conditions
11
+ *  are met:
12
+ *
13
+ *  1. Redistributions of source code must retain the above copyright
14
+ *     notice, this list of conditions and the following disclaimer.
15
+ *  2. Redistributions in binary form must reproduce the above copyright
16
+ *     notice, this list of conditions and the following disclaimer in the
17
+ *     documentation and/or other materials provided with the distribution.
18
+ *  3. The name of the author may not be used to endorse or promote products
19
+ *     derived from this software without specific prior written permission.
20
+ *
21
+ *  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22
+ *  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23
+ *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24
+ *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25
+ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26
+ *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
+ *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
+ *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
+ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30
+ *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ *
32
+ ****************************************************************************
33
+ *
34
+ *  Version 0.1.12
35
+ *
36
+ *  The ANSI C standard committee, for the C99 standard, specified the
37
+ *  inclusion of a new standard include file called stdint.h.  This is
38
+ *  a very useful and long desired include file which contains several
39
+ *  very precise definitions for integer scalar types that is
40
+ *  critically important for making portable several classes of
41
+ *  applications including cryptography, hashing, variable length
42
+ *  integer libraries and so on.  But for most developers its likely
43
+ *  useful just for programming sanity.
44
+ *
45
+ *  The problem is that most compiler vendors have decided not to
46
+ *  implement the C99 standard, and the next C++ language standard
47
+ *  (which has a lot more mindshare these days) will be a long time in
48
+ *  coming and its unknown whether or not it will include stdint.h or
49
+ *  how much adoption it will have.  Either way, it will be a long time
50
+ *  before all compilers come with a stdint.h and it also does nothing
51
+ *  for the extremely large number of compilers available today which
52
+ *  do not include this file, or anything comparable to it.
53
+ *
54
+ *  So that's what this file is all about.  Its an attempt to build a
55
+ *  single universal include file that works on as many platforms as
56
+ *  possible to deliver what stdint.h is supposed to.  A few things
57
+ *  that should be noted about this file:
58
+ *
59
+ *    1) It is not guaranteed to be portable and/or present an identical
60
+ *       interface on all platforms.  The extreme variability of the
61
+ *       ANSI C standard makes this an impossibility right from the
62
+ *       very get go. Its really only meant to be useful for the vast
63
+ *       majority of platforms that possess the capability of
64
+ *       implementing usefully and precisely defined, standard sized
65
+ *       integer scalars.  Systems which are not intrinsically 2s
66
+ *       complement may produce invalid constants.
67
+ *
68
+ *    2) There is an unavoidable use of non-reserved symbols.
69
+ *
70
+ *    3) Other standard include files are invoked.
71
+ *
72
+ *    4) This file may come in conflict with future platforms that do
73
+ *       include stdint.h.  The hope is that one or the other can be
74
+ *       used with no real difference.
75
+ *
76
+ *    5) In the current verison, if your platform can't represent
77
+ *       int32_t, int16_t and int8_t, it just dumps out with a compiler
78
+ *       error.
79
+ *
80
+ *    6) 64 bit integers may or may not be defined.  Test for their
81
+ *       presence with the test: #ifdef INT64_MAX or #ifdef UINT64_MAX.
82
+ *       Note that this is different from the C99 specification which
83
+ *       requires the existence of 64 bit support in the compiler.  If
84
+ *       this is not defined for your platform, yet it is capable of
85
+ *       dealing with 64 bits then it is because this file has not yet
86
+ *       been extended to cover all of your system's capabilities.
87
+ *
88
+ *    7) (u)intptr_t may or may not be defined.  Test for its presence
89
+ *       with the test: #ifdef PTRDIFF_MAX.  If this is not defined
90
+ *       for your platform, then it is because this file has not yet
91
+ *       been extended to cover all of your system's capabilities, not
92
+ *       because its optional.
93
+ *
94
+ *    8) The following might not been defined even if your platform is
95
+ *       capable of defining it:
96
+ *
97
+ *       WCHAR_MIN
98
+ *       WCHAR_MAX
99
+ *       (u)int64_t
100
+ *       PTRDIFF_MIN
101
+ *       PTRDIFF_MAX
102
+ *       (u)intptr_t
103
+ *
104
+ *    9) The following have not been defined:
105
+ *
106
+ *       WINT_MIN
107
+ *       WINT_MAX
108
+ *
109
+ *   10) The criteria for defining (u)int_least(*)_t isn't clear,
110
+ *       except for systems which don't have a type that precisely
111
+ *       defined 8, 16, or 32 bit types (which this include file does
112
+ *       not support anyways). Default definitions have been given.
113
+ *
114
+ *   11) The criteria for defining (u)int_fast(*)_t isn't something I
115
+ *       would trust to any particular compiler vendor or the ANSI C
116
+ *       committee.  It is well known that "compatible systems" are
117
+ *       commonly created that have very different performance
118
+ *       characteristics from the systems they are compatible with,
119
+ *       especially those whose vendors make both the compiler and the
120
+ *       system.  Default definitions have been given, but its strongly
121
+ *       recommended that users never use these definitions for any
122
+ *       reason (they do *NOT* deliver any serious guarantee of
123
+ *       improved performance -- not in this file, nor any vendor's
124
+ *       stdint.h).
125
+ *
126
+ *   12) The following macros:
127
+ *
128
+ *       PRINTF_INTMAX_MODIFIER
129
+ *       PRINTF_INT64_MODIFIER
130
+ *       PRINTF_INT32_MODIFIER
131
+ *       PRINTF_INT16_MODIFIER
132
+ *       PRINTF_LEAST64_MODIFIER
133
+ *       PRINTF_LEAST32_MODIFIER
134
+ *       PRINTF_LEAST16_MODIFIER
135
+ *       PRINTF_INTPTR_MODIFIER
136
+ *
137
+ *       are strings which have been defined as the modifiers required
138
+ *       for the "d", "u" and "x" printf formats to correctly output
139
+ *       (u)intmax_t, (u)int64_t, (u)int32_t, (u)int16_t, (u)least64_t,
140
+ *       (u)least32_t, (u)least16_t and (u)intptr_t types respectively.
141
+ *       PRINTF_INTPTR_MODIFIER is not defined for some systems which
142
+ *       provide their own stdint.h.  PRINTF_INT64_MODIFIER is not
143
+ *       defined if INT64_MAX is not defined.  These are an extension
144
+ *       beyond what C99 specifies must be in stdint.h.
145
+ *
146
+ *       In addition, the following macros are defined:
147
+ *
148
+ *       PRINTF_INTMAX_HEX_WIDTH
149
+ *       PRINTF_INT64_HEX_WIDTH
150
+ *       PRINTF_INT32_HEX_WIDTH
151
+ *       PRINTF_INT16_HEX_WIDTH
152
+ *       PRINTF_INT8_HEX_WIDTH
153
+ *       PRINTF_INTMAX_DEC_WIDTH
154
+ *       PRINTF_INT64_DEC_WIDTH
155
+ *       PRINTF_INT32_DEC_WIDTH
156
+ *       PRINTF_INT16_DEC_WIDTH
157
+ *       PRINTF_INT8_DEC_WIDTH
158
+ *
159
+ *       Which specifies the maximum number of characters required to
160
+ *       print the number of that type in either hexadecimal or decimal.
161
+ *       These are an extension beyond what C99 specifies must be in
162
+ *       stdint.h.
163
+ *
164
+ *  Compilers tested (all with 0 warnings at their highest respective
165
+ *  settings): Borland Turbo C 2.0, WATCOM C/C++ 11.0 (16 bits and 32
166
+ *  bits), Microsoft Visual C++ 6.0 (32 bit), Microsoft Visual Studio
167
+ *  .net (VC7), Intel C++ 4.0, GNU gcc v3.3.3
168
+ *
169
+ *  This file should be considered a work in progress.  Suggestions for
170
+ *  improvements, especially those which increase coverage are strongly
171
+ *  encouraged.
172
+ *
173
+ *  Acknowledgements
174
+ *
175
+ *  The following people have made significant contributions to the
176
+ *  development and testing of this file:
177
+ *
178
+ *  Chris Howie
179
+ *  John Steele Scott
180
+ *  Dave Thorup
181
+ *  John Dill
182
+ *
183
+ */
184
+
185
+#include <cstddef>
186
+#include <climits>
187
+#include <csignal>
188
+
189
+/*
190
+ *  For gcc with _STDINT_H, fill in the PRINTF_INT*_MODIFIER macros, and
191
+ *  do nothing else.  On the Mac OS X version of gcc this is _STDINT_H_.
192
+ */
193
+
194
+#if ((defined(__STDC__) && __STDC__ && __STDC_VERSION__ >= 199901L) || (defined (__WATCOMC__) && (defined (_STDINT_H_INCLUDED) || __WATCOMC__ >= 1250)) || (defined(__GNUC__) && (defined(_STDINT_H) || defined(_STDINT_H_) || defined (__UINT_FAST64_TYPE__)) ) || (defined(_MSC_VER) && _MSC_VER >= 1600)) && !defined (_PSTDINT_H_INCLUDED)
195
+#include <stdint.h>
196
+#define _PSTDINT_H_INCLUDED
197
+# ifndef PRINTF_INT64_MODIFIER
198
+#  define PRINTF_INT64_MODIFIER "ll"
199
+# endif
200
+# ifndef PRINTF_INT32_MODIFIER
201
+#  define PRINTF_INT32_MODIFIER "l"
202
+# endif
203
+# ifndef PRINTF_INT16_MODIFIER
204
+#  define PRINTF_INT16_MODIFIER "h"
205
+# endif
206
+# ifndef PRINTF_INTMAX_MODIFIER
207
+#  define PRINTF_INTMAX_MODIFIER PRINTF_INT64_MODIFIER
208
+# endif
209
+# ifndef PRINTF_INT64_HEX_WIDTH
210
+#  define PRINTF_INT64_HEX_WIDTH "16"
211
+# endif
212
+# ifndef PRINTF_INT32_HEX_WIDTH
213
+#  define PRINTF_INT32_HEX_WIDTH "8"
214
+# endif
215
+# ifndef PRINTF_INT16_HEX_WIDTH
216
+#  define PRINTF_INT16_HEX_WIDTH "4"
217
+# endif
218
+# ifndef PRINTF_INT8_HEX_WIDTH
219
+#  define PRINTF_INT8_HEX_WIDTH "2"
220
+# endif
221
+# ifndef PRINTF_INT64_DEC_WIDTH
222
+#  define PRINTF_INT64_DEC_WIDTH "20"
223
+# endif
224
+# ifndef PRINTF_INT32_DEC_WIDTH
225
+#  define PRINTF_INT32_DEC_WIDTH "10"
226
+# endif
227
+# ifndef PRINTF_INT16_DEC_WIDTH
228
+#  define PRINTF_INT16_DEC_WIDTH "5"
229
+# endif
230
+# ifndef PRINTF_INT8_DEC_WIDTH
231
+#  define PRINTF_INT8_DEC_WIDTH "3"
232
+# endif
233
+# ifndef PRINTF_INTMAX_HEX_WIDTH
234
+#  define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT64_HEX_WIDTH
235
+# endif
236
+# ifndef PRINTF_INTMAX_DEC_WIDTH
237
+#  define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT64_DEC_WIDTH
238
+# endif
239
+
240
+/*
241
+ *  Something really weird is going on with Open Watcom.  Just pull some of
242
+ *  these duplicated definitions from Open Watcom's stdint.h file for now.
243
+ */
244
+
245
+# if defined (__WATCOMC__) && __WATCOMC__ >= 1250
246
+#  if !defined (INT64_C)
247
+#   define INT64_C(x)   (x + (INT64_MAX - INT64_MAX))
248
+#  endif
249
+#  if !defined (UINT64_C)
250
+#   define UINT64_C(x)  (x + (UINT64_MAX - UINT64_MAX))
251
+#  endif
252
+#  if !defined (INT32_C)
253
+#   define INT32_C(x)   (x + (INT32_MAX - INT32_MAX))
254
+#  endif
255
+#  if !defined (UINT32_C)
256
+#   define UINT32_C(x)  (x + (UINT32_MAX - UINT32_MAX))
257
+#  endif
258
+#  if !defined (INT16_C)
259
+#   define INT16_C(x)   (x)
260
+#  endif
261
+#  if !defined (UINT16_C)
262
+#   define UINT16_C(x)  (x)
263
+#  endif
264
+#  if !defined (INT8_C)
265
+#   define INT8_C(x)   (x)
266
+#  endif
267
+#  if !defined (UINT8_C)
268
+#   define UINT8_C(x)  (x)
269
+#  endif
270
+#  if !defined (UINT64_MAX)
271
+#   define UINT64_MAX  18446744073709551615ULL
272
+#  endif
273
+#  if !defined (INT64_MAX)
274
+#   define INT64_MAX  9223372036854775807LL
275
+#  endif
276
+#  if !defined (UINT32_MAX)
277
+#   define UINT32_MAX  4294967295UL
278
+#  endif
279
+#  if !defined (INT32_MAX)
280
+#   define INT32_MAX  2147483647L
281
+#  endif
282
+#  if !defined (INTMAX_MAX)
283
+#   define INTMAX_MAX INT64_MAX
284
+#  endif
285
+#  if !defined (INTMAX_MIN)
286
+#   define INTMAX_MIN INT64_MIN
287
+#  endif
288
+# endif
289
+#endif
290
+
291
+#ifndef _PSTDINT_H_INCLUDED
292
+#define _PSTDINT_H_INCLUDED
293
+
294
+#ifndef SIZE_MAX
295
+# define SIZE_MAX (~(size_t)0)
296
+#endif
297
+
298
+/*
299
+ *  Deduce the type assignments from limits.h under the assumption that
300
+ *  integer sizes in bits are powers of 2, and follow the ANSI
301
+ *  definitions.
302
+ */
303
+
304
+#ifndef UINT8_MAX
305
+# define UINT8_MAX 0xff
306
+#endif
307
+#ifndef uint8_t
308
+# if (UCHAR_MAX == UINT8_MAX) || defined (S_SPLINT_S)
309
+    typedef unsigned char uint8_t;
310
+#   define UINT8_C(v) ((uint8_t) v)
311
+# else
312
+#   error "Platform not supported"
313
+# endif
314
+#endif
315
+
316
+#ifndef INT8_MAX
317
+# define INT8_MAX 0x7f
318
+#endif
319
+#ifndef INT8_MIN
320
+# define INT8_MIN INT8_C(0x80)
321
+#endif
322
+#ifndef int8_t
323
+# if (SCHAR_MAX == INT8_MAX) || defined (S_SPLINT_S)
324
+    typedef signed char int8_t;
325
+#   define INT8_C(v) ((int8_t) v)
326
+# else
327
+#   error "Platform not supported"
328
+# endif
329
+#endif
330
+
331
+#ifndef UINT16_MAX
332
+# define UINT16_MAX 0xffff
333
+#endif
334
+#ifndef uint16_t
335
+#if (UINT_MAX == UINT16_MAX) || defined (S_SPLINT_S)
336
+  typedef unsigned int uint16_t;
337
+# ifndef PRINTF_INT16_MODIFIER
338
+#  define PRINTF_INT16_MODIFIER ""
339
+# endif
340
+# define UINT16_C(v) ((uint16_t) (v))
341
+#elif (USHRT_MAX == UINT16_MAX)
342
+  typedef unsigned short uint16_t;
343
+# define UINT16_C(v) ((uint16_t) (v))
344
+# ifndef PRINTF_INT16_MODIFIER
345
+#  define PRINTF_INT16_MODIFIER "h"
346
+# endif
347
+#else
348
+#error "Platform not supported"
349
+#endif
350
+#endif
351
+
352
+#ifndef INT16_MAX
353
+# define INT16_MAX 0x7fff
354
+#endif
355
+#ifndef INT16_MIN
356
+# define INT16_MIN INT16_C(0x8000)
357
+#endif
358
+#ifndef int16_t
359
+#if (INT_MAX == INT16_MAX) || defined (S_SPLINT_S)
360
+  typedef signed int int16_t;
361
+# define INT16_C(v) ((int16_t) (v))
362
+# ifndef PRINTF_INT16_MODIFIER
363
+#  define PRINTF_INT16_MODIFIER ""
364
+# endif
365
+#elif (SHRT_MAX == INT16_MAX)
366
+  typedef signed short int16_t;
367
+# define INT16_C(v) ((int16_t) (v))
368
+# ifndef PRINTF_INT16_MODIFIER
369
+#  define PRINTF_INT16_MODIFIER "h"
370
+# endif
371
+#else
372
+#error "Platform not supported"
373
+#endif
374
+#endif
375
+
376
+#ifndef UINT32_MAX
377
+# define UINT32_MAX (0xffffffffUL)
378
+#endif
379
+#ifndef uint32_t
380
+#if (ULONG_MAX == UINT32_MAX) || defined (S_SPLINT_S)
381
+  typedef unsigned long uint32_t;
382
+# define UINT32_C(v) v ## UL
383
+# ifndef PRINTF_INT32_MODIFIER
384
+#  define PRINTF_INT32_MODIFIER "l"
385
+# endif
386
+#elif (UINT_MAX == UINT32_MAX)
387
+  typedef unsigned int uint32_t;
388
+# ifndef PRINTF_INT32_MODIFIER
389
+#  define PRINTF_INT32_MODIFIER ""
390
+# endif
391
+# define UINT32_C(v) v ## U
392
+#elif (USHRT_MAX == UINT32_MAX)
393
+  typedef unsigned short uint32_t;
394
+# define UINT32_C(v) ((unsigned short) (v))
395
+# ifndef PRINTF_INT32_MODIFIER
396
+#  define PRINTF_INT32_MODIFIER ""
397
+# endif
398
+#else
399
+#error "Platform not supported"
400
+#endif
401
+#endif
402
+
403
+#ifndef INT32_MAX
404
+# define INT32_MAX (0x7fffffffL)
405
+#endif
406
+#ifndef INT32_MIN
407
+# define INT32_MIN INT32_C(0x80000000)
408
+#endif
409
+#ifndef int32_t
410
+#if (LONG_MAX == INT32_MAX) || defined (S_SPLINT_S)
411
+  typedef signed long int32_t;
412
+# define INT32_C(v) v ## L
413
+# ifndef PRINTF_INT32_MODIFIER
414
+#  define PRINTF_INT32_MODIFIER "l"
415
+# endif
416
+#elif (INT_MAX == INT32_MAX)
417
+  typedef signed int int32_t;
418
+# define INT32_C(v) v
419
+# ifndef PRINTF_INT32_MODIFIER
420
+#  define PRINTF_INT32_MODIFIER ""
421
+# endif
422
+#elif (SHRT_MAX == INT32_MAX)
423
+  typedef signed short int32_t;
424
+# define INT32_C(v) ((short) (v))
425
+# ifndef PRINTF_INT32_MODIFIER
426
+#  define PRINTF_INT32_MODIFIER ""
427
+# endif
428
+#else
429
+#error "Platform not supported"
430
+#endif
431
+#endif
432
+
433
+/*
434
+ *  The macro stdint_int64_defined is temporarily used to record
435
+ *  whether or not 64 integer support is available.  It must be
436
+ *  defined for any 64 integer extensions for new platforms that are
437
+ *  added.
438
+ */
439
+
440
+#undef stdint_int64_defined
441
+#if (defined(__STDC__) && defined(__STDC_VERSION__)) || defined (S_SPLINT_S)
442
+# if (__STDC__ && __STDC_VERSION__ >= 199901L) || defined (S_SPLINT_S)
443
+#  define stdint_int64_defined
444
+   typedef long long int64_t;
445
+   typedef unsigned long long uint64_t;
446
+#  define UINT64_C(v) v ## ULL
447
+#  define  INT64_C(v) v ## LL
448
+#  ifndef PRINTF_INT64_MODIFIER
449
+#   define PRINTF_INT64_MODIFIER "ll"
450
+#  endif
451
+# endif
452
+#endif
453
+
454
+#if !defined (stdint_int64_defined)
455
+# if defined(__GNUC__)
456
+#  define stdint_int64_defined
457
+   __extension__ typedef long long int64_t;
458
+   __extension__ typedef unsigned long long uint64_t;
459
+#  define UINT64_C(v) v ## ULL
460
+#  define  INT64_C(v) v ## LL
461
+#  ifndef PRINTF_INT64_MODIFIER
462
+#   define PRINTF_INT64_MODIFIER "ll"
463
+#  endif
464
+# elif defined(__MWERKS__) || defined (__SUNPRO_C) || defined (__SUNPRO_CC) || defined (__APPLE_CC__) || defined (_LONG_LONG) || defined (_CRAYC) || defined (S_SPLINT_S)
465
+#  define stdint_int64_defined
466
+   typedef long long int64_t;
467
+   typedef unsigned long long uint64_t;
468
+#  define UINT64_C(v) v ## ULL
469
+#  define  INT64_C(v) v ## LL
470
+#  ifndef PRINTF_INT64_MODIFIER
471
+#   define PRINTF_INT64_MODIFIER "ll"
472
+#  endif
473
+# elif (defined(__WATCOMC__) && defined(__WATCOM_INT64__)) || (defined(_MSC_VER) && _INTEGRAL_MAX_BITS >= 64) || (defined (__BORLANDC__) && __BORLANDC__ > 0x460) || defined (__alpha) || defined (__DECC)
474
+#  define stdint_int64_defined
475
+   typedef __int64 int64_t;
476
+   typedef unsigned __int64 uint64_t;
477
+#  define UINT64_C(v) v ## UI64
478
+#  define  INT64_C(v) v ## I64
479
+#  ifndef PRINTF_INT64_MODIFIER
480
+#   define PRINTF_INT64_MODIFIER "I64"
481
+#  endif
482
+# endif
483
+#endif
484
+
485
+#if !defined (LONG_LONG_MAX) && defined (INT64_C)
486
+# define LONG_LONG_MAX INT64_C (9223372036854775807)
487
+#endif
488
+#ifndef ULONG_LONG_MAX
489
+# define ULONG_LONG_MAX UINT64_C (18446744073709551615)
490
+#endif
491
+
492
+#if !defined (INT64_MAX) && defined (INT64_C)
493
+# define INT64_MAX INT64_C (9223372036854775807)
494
+#endif
495
+#if !defined (INT64_MIN) && defined (INT64_C)
496
+# define INT64_MIN INT64_C (-9223372036854775808)
497
+#endif
498
+#if !defined (UINT64_MAX) && defined (INT64_C)
499
+# define UINT64_MAX UINT64_C (18446744073709551615)
500
+#endif
501
+
502
+/*
503
+ *  Width of hexadecimal for number field.
504
+ */
505
+
506
+#ifndef PRINTF_INT64_HEX_WIDTH
507
+# define PRINTF_INT64_HEX_WIDTH "16"
508
+#endif
509
+#ifndef PRINTF_INT32_HEX_WIDTH
510
+# define PRINTF_INT32_HEX_WIDTH "8"
511
+#endif
512
+#ifndef PRINTF_INT16_HEX_WIDTH
513
+# define PRINTF_INT16_HEX_WIDTH "4"
514
+#endif
515
+#ifndef PRINTF_INT8_HEX_WIDTH
516
+# define PRINTF_INT8_HEX_WIDTH "2"
517
+#endif
518
+
519
+#ifndef PRINTF_INT64_DEC_WIDTH
520
+# define PRINTF_INT64_DEC_WIDTH "20"
521
+#endif
522
+#ifndef PRINTF_INT32_DEC_WIDTH
523
+# define PRINTF_INT32_DEC_WIDTH "10"
524
+#endif
525
+#ifndef PRINTF_INT16_DEC_WIDTH
526
+# define PRINTF_INT16_DEC_WIDTH "5"
527
+#endif
528
+#ifndef PRINTF_INT8_DEC_WIDTH
529
+# define PRINTF_INT8_DEC_WIDTH "3"
530
+#endif
531
+
532
+/*
533
+ *  Ok, lets not worry about 128 bit integers for now.  Moore's law says
534
+ *  we don't need to worry about that until about 2040 at which point
535
+ *  we'll have bigger things to worry about.
536
+ */
537
+
538
+#ifdef stdint_int64_defined
539
+  typedef int64_t intmax_t;
540
+  typedef uint64_t uintmax_t;
541
+# define  INTMAX_MAX   INT64_MAX
542
+# define  INTMAX_MIN   INT64_MIN
543
+# define UINTMAX_MAX  UINT64_MAX
544
+# define UINTMAX_C(v) UINT64_C(v)
545
+# define  INTMAX_C(v)  INT64_C(v)
546
+# ifndef PRINTF_INTMAX_MODIFIER
547
+#   define PRINTF_INTMAX_MODIFIER PRINTF_INT64_MODIFIER
548
+# endif
549
+# ifndef PRINTF_INTMAX_HEX_WIDTH
550
+#  define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT64_HEX_WIDTH
551
+# endif
552
+# ifndef PRINTF_INTMAX_DEC_WIDTH
553
+#  define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT64_DEC_WIDTH
554
+# endif
555
+#else
556
+  typedef int32_t intmax_t;
557
+  typedef uint32_t uintmax_t;
558
+# define  INTMAX_MAX   INT32_MAX
559
+# define UINTMAX_MAX  UINT32_MAX
560
+# define UINTMAX_C(v) UINT32_C(v)
561
+# define  INTMAX_C(v)  INT32_C(v)
562
+# ifndef PRINTF_INTMAX_MODIFIER
563
+#   define PRINTF_INTMAX_MODIFIER PRINTF_INT32_MODIFIER
564
+# endif
565
+# ifndef PRINTF_INTMAX_HEX_WIDTH
566
+#  define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT32_HEX_WIDTH
567
+# endif
568
+# ifndef PRINTF_INTMAX_DEC_WIDTH
569
+#  define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT32_DEC_WIDTH
570
+# endif
571
+#endif
572
+
573
+/*
574
+ *  Because this file currently only supports platforms which have
575
+ *  precise powers of 2 as bit sizes for the default integers, the
576
+ *  least definitions are all trivial.  Its possible that a future
577
+ *  version of this file could have different definitions.
578
+ */
579
+
580
+#ifndef stdint_least_defined
581
+  typedef   int8_t   int_least8_t;
582
+  typedef  uint8_t  uint_least8_t;
583
+  typedef  int16_t  int_least16_t;
584
+  typedef uint16_t uint_least16_t;
585
+  typedef  int32_t  int_least32_t;
586
+  typedef uint32_t uint_least32_t;
587
+# define PRINTF_LEAST32_MODIFIER PRINTF_INT32_MODIFIER
588
+# define PRINTF_LEAST16_MODIFIER PRINTF_INT16_MODIFIER
589
+# define  UINT_LEAST8_MAX  UINT8_MAX
590
+# define   INT_LEAST8_MAX   INT8_MAX
591
+# define UINT_LEAST16_MAX UINT16_MAX
592
+# define  INT_LEAST16_MAX  INT16_MAX
593
+# define UINT_LEAST32_MAX UINT32_MAX
594
+# define  INT_LEAST32_MAX  INT32_MAX
595
+# define   INT_LEAST8_MIN   INT8_MIN
596
+# define  INT_LEAST16_MIN  INT16_MIN
597
+# define  INT_LEAST32_MIN  INT32_MIN
598
+# ifdef stdint_int64_defined
599
+    typedef  int64_t  int_least64_t;
600
+    typedef uint64_t uint_least64_t;
601
+#   define PRINTF_LEAST64_MODIFIER PRINTF_INT64_MODIFIER
602
+#   define UINT_LEAST64_MAX UINT64_MAX
603
+#   define  INT_LEAST64_MAX  INT64_MAX
604
+#   define  INT_LEAST64_MIN  INT64_MIN
605
+# endif
606
+#endif
607
+#undef stdint_least_defined
608
+
609
+/*
610
+ *  The ANSI C committee pretending to know or specify anything about
611
+ *  performance is the epitome of misguided arrogance.  The mandate of
612
+ *  this file is to *ONLY* ever support that absolute minimum
613
+ *  definition of the fast integer types, for compatibility purposes.
614
+ *  No extensions, and no attempt to suggest what may or may not be a
615
+ *  faster integer type will ever be made in this file.  Developers are
616
+ *  warned to stay away from these types when using this or any other
617
+ *  stdint.h.
618
+ */
619
+
620
+typedef   int_least8_t   int_fast8_t;
621
+typedef  uint_least8_t  uint_fast8_t;
622
+typedef  int_least16_t  int_fast16_t;
623
+typedef uint_least16_t uint_fast16_t;
624
+typedef  int_least32_t  int_fast32_t;
625
+typedef uint_least32_t uint_fast32_t;
626
+#define  UINT_FAST8_MAX  UINT_LEAST8_MAX
627
+#define   INT_FAST8_MAX   INT_LEAST8_MAX
628
+#define UINT_FAST16_MAX UINT_LEAST16_MAX
629
+#define  INT_FAST16_MAX  INT_LEAST16_MAX
630
+#define UINT_FAST32_MAX UINT_LEAST32_MAX
631
+#define  INT_FAST32_MAX  INT_LEAST32_MAX
632
+#define   INT_FAST8_MIN   INT_LEAST8_MIN
633
+#define  INT_FAST16_MIN  INT_LEAST16_MIN
634
+#define  INT_FAST32_MIN  INT_LEAST32_MIN
635
+#ifdef stdint_int64_defined
636
+  typedef  int_least64_t  int_fast64_t;
637
+  typedef uint_least64_t uint_fast64_t;
638
+# define UINT_FAST64_MAX UINT_LEAST64_MAX
639
+# define  INT_FAST64_MAX  INT_LEAST64_MAX
640
+# define  INT_FAST64_MIN  INT_LEAST64_MIN
641
+#endif
642
+
643
+#undef stdint_int64_defined
644
+
645
+/*
646
+ *  Whatever piecemeal, per compiler thing we can do about the wchar_t
647
+ *  type limits.
648
+ */
649
+
650
+#if defined(__WATCOMC__) || defined(_MSC_VER) || defined (__GNUC__)
651
+# include <wchar.h>
652
+# ifndef WCHAR_MIN
653
+#  define WCHAR_MIN 0
654
+# endif
655
+# ifndef WCHAR_MAX
656
+#  define WCHAR_MAX ((wchar_t)-1)
657
+# endif
658
+#endif
659
+
660
+/*
661
+ *  Whatever piecemeal, per compiler/platform thing we can do about the
662
+ *  (u)intptr_t types and limits.
663
+ */
664
+
665
+#if defined (_MSC_VER) && defined (_UINTPTR_T_DEFINED)
666
+# define STDINT_H_UINTPTR_T_DEFINED
667
+#endif
668
+
669
+#ifndef STDINT_H_UINTPTR_T_DEFINED
670
+# if defined (__alpha__) || defined (__ia64__) || defined (__x86_64__) || defined (_WIN64)
671
+#  define stdint_intptr_bits 64
672
+# elif defined (__WATCOMC__) || defined (__TURBOC__)
673
+#  if defined(__TINY__) || defined(__SMALL__) || defined(__MEDIUM__)
674
+#    define stdint_intptr_bits 16
675
+#  else
676
+#    define stdint_intptr_bits 32
677
+#  endif
678
+# elif defined (__i386__) || defined (_WIN32) || defined (WIN32)
679
+#  define stdint_intptr_bits 32
680
+# elif defined (__INTEL_COMPILER)
681
+/* TODO -- what did Intel do about x86-64? */
682
+# endif
683
+
684
+# ifdef stdint_intptr_bits
685
+#  define stdint_intptr_glue3_i(a,b,c)  a##b##c
686
+#  define stdint_intptr_glue3(a,b,c)    stdint_intptr_glue3_i(a,b,c)
687
+#  ifndef PRINTF_INTPTR_MODIFIER
688
+#    define PRINTF_INTPTR_MODIFIER      stdint_intptr_glue3(PRINTF_INT,stdint_intptr_bits,_MODIFIER)
689
+#  endif
690
+#  ifndef PTRDIFF_MAX
691
+#    define PTRDIFF_MAX                 stdint_intptr_glue3(INT,stdint_intptr_bits,_MAX)
692
+#  endif
693
+#  ifndef PTRDIFF_MIN
694
+#    define PTRDIFF_MIN                 stdint_intptr_glue3(INT,stdint_intptr_bits,_MIN)
695
+#  endif
696
+#  ifndef UINTPTR_MAX
697
+#    define UINTPTR_MAX                 stdint_intptr_glue3(UINT,stdint_intptr_bits,_MAX)
698
+#  endif
699
+#  ifndef INTPTR_MAX
700
+#    define INTPTR_MAX                  stdint_intptr_glue3(INT,stdint_intptr_bits,_MAX)
701
+#  endif
702
+#  ifndef INTPTR_MIN
703
+#    define INTPTR_MIN                  stdint_intptr_glue3(INT,stdint_intptr_bits,_MIN)
704
+#  endif
705
+#  ifndef INTPTR_C
706
+#    define INTPTR_C(x)                 stdint_intptr_glue3(INT,stdint_intptr_bits,_C)(x)
707
+#  endif
708
+#  ifndef UINTPTR_C
709
+#    define UINTPTR_C(x)                stdint_intptr_glue3(UINT,stdint_intptr_bits,_C)(x)
710
+#  endif
711
+  typedef stdint_intptr_glue3(uint,stdint_intptr_bits,_t) uintptr_t;
712
+  typedef stdint_intptr_glue3( int,stdint_intptr_bits,_t)  intptr_t;
713
+# else
714
+/* TODO -- This following is likely wrong for some platforms, and does
715
+   nothing for the definition of uintptr_t. */
716
+  typedef ptrdiff_t intptr_t;
717
+# endif
718
+# define STDINT_H_UINTPTR_T_DEFINED
719
+#endif
720
+
721
+/*
722
+ *  Assumes sig_atomic_t is signed and we have a 2s complement machine.
723
+ */
724
+
725
+#ifndef SIG_ATOMIC_MAX
726
+# define SIG_ATOMIC_MAX ((((sig_atomic_t) 1) << (sizeof (sig_atomic_t)*CHAR_BIT-1)) - 1)
727
+#endif
728
+
729
+#endif
730
+
731
+#if defined (__TEST_PSTDINT_FOR_CORRECTNESS)
732
+
733
+/*
734
+ *  Please compile with the maximum warning settings to make sure macros are not
735
+ *  defined more than once.
736
+ */
737
+
738
+#include <stdlib.h>
739
+#include <stdio.h>
740
+#include <string.h>
741
+
742
+#define glue3_aux(x,y,z) x ## y ## z
743
+#define glue3(x,y,z) glue3_aux(x,y,z)
744
+
745
+#define DECLU(bits) glue3(uint,bits,_t) glue3(u,bits,=) glue3(UINT,bits,_C) (0);
746
+#define DECLI(bits) glue3(int,bits,_t) glue3(i,bits,=) glue3(INT,bits,_C) (0);
747
+
748
+#define DECL(us,bits) glue3(DECL,us,) (bits)
749
+
750
+#define TESTUMAX(bits) glue3(u,bits,=) glue3(~,u,bits); if (glue3(UINT,bits,_MAX) glue3(!=,u,bits)) printf ("Something wrong with UINT%d_MAX\n", bits)
751
+
752
+int main () {
753
+	DECL(I,8)
754
+	DECL(U,8)
755
+	DECL(I,16)
756
+	DECL(U,16)
757
+	DECL(I,32)
758
+	DECL(U,32)
759
+#ifdef INT64_MAX
760
+	DECL(I,64)
761
+	DECL(U,64)
762
+#endif
763
+	intmax_t imax = INTMAX_C(0);
764
+	uintmax_t umax = UINTMAX_C(0);
765
+	char str0[256], str1[256];
766
+
767
+	sprintf (str0, "%d %x\n", 0, ~0);
768
+
769
+	sprintf (str1, "%d %x\n",  i8, ~0);
770
+	if (0 != strcmp (str0, str1)) printf ("Something wrong with i8 : %s\n", str1);
771
+	sprintf (str1, "%u %x\n",  u8, ~0);
772
+	if (0 != strcmp (str0, str1)) printf ("Something wrong with u8 : %s\n", str1);
773
+	sprintf (str1, "%d %x\n",  i16, ~0);
774
+	if (0 != strcmp (str0, str1)) printf ("Something wrong with i16 : %s\n", str1);
775
+	sprintf (str1, "%u %x\n",  u16, ~0);
776
+	if (0 != strcmp (str0, str1)) printf ("Something wrong with u16 : %s\n", str1);
777
+	sprintf (str1, "%" PRINTF_INT32_MODIFIER "d %x\n",  i32, ~0);
778
+	if (0 != strcmp (str0, str1)) printf ("Something wrong with i32 : %s\n", str1);
779
+	sprintf (str1, "%" PRINTF_INT32_MODIFIER "u %x\n",  u32, ~0);
780
+	if (0 != strcmp (str0, str1)) printf ("Something wrong with u32 : %s\n", str1);
781
+#ifdef INT64_MAX
782
+	sprintf (str1, "%" PRINTF_INT64_MODIFIER "d %x\n",  i64, ~0);
783
+	if (0 != strcmp (str0, str1)) printf ("Something wrong with i64 : %s\n", str1);
784
+#endif
785
+	sprintf (str1, "%" PRINTF_INTMAX_MODIFIER "d %x\n",  imax, ~0);
786
+	if (0 != strcmp (str0, str1)) printf ("Something wrong with imax : %s\n", str1);
787
+	sprintf (str1, "%" PRINTF_INTMAX_MODIFIER "u %x\n",  umax, ~0);
788
+	if (0 != strcmp (str0, str1)) printf ("Something wrong with umax : %s\n", str1);
789
+
790
+	TESTUMAX(8);
791
+	TESTUMAX(16);
792
+	TESTUMAX(32);
793
+#ifdef INT64_MAX
794
+	TESTUMAX(64);
795
+#endif
796
+
797
+	return EXIT_SUCCESS;
798
+}
799
+
800
+#endif