xref: /plan9-contrib/sys/src/cmd/gs/src/stdint_.h (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
1*593dc095SDavid du Colombier /* Copyright (C) 2003-2004 artofcode LLC.  All rights reserved.
2*593dc095SDavid du Colombier 
3*593dc095SDavid du Colombier   This software is provided AS-IS with no warranty, either express or
4*593dc095SDavid du Colombier   implied.
5*593dc095SDavid du Colombier 
6*593dc095SDavid du Colombier   This software is distributed under license and may not be copied,
7*593dc095SDavid du Colombier   modified or distributed except as expressly authorized under the terms
8*593dc095SDavid du Colombier   of the license contained in the file LICENSE in this distribution.
9*593dc095SDavid du Colombier 
10*593dc095SDavid du Colombier   For more information about licensing, please refer to
11*593dc095SDavid du Colombier   http://www.ghostscript.com/licensing/. For information on
12*593dc095SDavid du Colombier   commercial licensing, go to http://www.artifex.com/licensing/ or
13*593dc095SDavid du Colombier   contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14*593dc095SDavid du Colombier   San Rafael, CA  94903, U.S.A., +1(415)492-9861.
15*593dc095SDavid du Colombier */
16*593dc095SDavid du Colombier 
17*593dc095SDavid du Colombier /* $Id: stdint_.h,v 1.5 2004/06/17 21:42:53 giles Exp $ */
18*593dc095SDavid du Colombier /* Generic substitute for stdint.h */
19*593dc095SDavid du Colombier 
20*593dc095SDavid du Colombier #ifndef stdint__INCLUDED
21*593dc095SDavid du Colombier #  define stdint__INCLUDED
22*593dc095SDavid du Colombier 
23*593dc095SDavid du Colombier /*
24*593dc095SDavid du Colombier  * ensure our standard defines have been included
25*593dc095SDavid du Colombier  */
26*593dc095SDavid du Colombier #include "std.h"
27*593dc095SDavid du Colombier 
28*593dc095SDavid du Colombier /* Define some stdint.h types. The jbig2dec headers and ttf bytecode
29*593dc095SDavid du Colombier  * interpreter require these and they're generally useful to have around
30*593dc095SDavid du Colombier  * now that there's a standard.
31*593dc095SDavid du Colombier  */
32*593dc095SDavid du Colombier 
33*593dc095SDavid du Colombier /* Some systems are guaranteed to have stdint.h
34*593dc095SDavid du Colombier  * but don't use the autoconf detection
35*593dc095SDavid du Colombier  */
36*593dc095SDavid du Colombier #ifndef HAVE_STDINT_H
37*593dc095SDavid du Colombier # ifdef __MACOS__
38*593dc095SDavid du Colombier #   define HAVE_STDINT_H
39*593dc095SDavid du Colombier # endif
40*593dc095SDavid du Colombier #endif
41*593dc095SDavid du Colombier 
42*593dc095SDavid du Colombier /* try a generic header first */
43*593dc095SDavid du Colombier #if defined(HAVE_STDINT_H)
44*593dc095SDavid du Colombier # include <stdint.h>
45*593dc095SDavid du Colombier # define STDINT_TYPES_DEFINED
46*593dc095SDavid du Colombier #elif defined(SYS_TYPES_HAS_STDINT_TYPES)
47*593dc095SDavid du Colombier   /* std.h will have included sys/types.h */
48*593dc095SDavid du Colombier # define STDINT_TYPES_DEFINED
49*593dc095SDavid du Colombier #endif
50*593dc095SDavid du Colombier 
51*593dc095SDavid du Colombier /* try platform-specific defines */
52*593dc095SDavid du Colombier #ifndef STDINT_TYPES_DEFINED
53*593dc095SDavid du Colombier # if defined(__WIN32__) /* MSVC currently doesn't provide C99 headers */
54*593dc095SDavid du Colombier    typedef signed char             int8_t;
55*593dc095SDavid du Colombier    typedef short int               int16_t;
56*593dc095SDavid du Colombier    typedef int                     int32_t;
57*593dc095SDavid du Colombier    typedef __int64                 int64_t;
58*593dc095SDavid du Colombier    typedef unsigned char           uint8_t;
59*593dc095SDavid du Colombier    typedef unsigned short int      uint16_t;
60*593dc095SDavid du Colombier    typedef unsigned int            uint32_t;
61*593dc095SDavid du Colombier    typedef unsigned __int64        uint64_t;
62*593dc095SDavid du Colombier #  define STDINT_TYPES_DEFINED
63*593dc095SDavid du Colombier # elif defined(__VMS) /* OpenVMS provides these types in inttypes.h */
64*593dc095SDavid du Colombier #  include <inttypes.h>
65*593dc095SDavid du Colombier #  define STDINT_TYPES_DEFINED
66*593dc095SDavid du Colombier # elif defined(__CYGWIN__)
67*593dc095SDavid du Colombier    /* Cygwin defines the signed versions in sys/types.h */
68*593dc095SDavid du Colombier    /* but uses a u_ prefix for the unsigned versions */
69*593dc095SDavid du Colombier    typedef u_int8_t                uint8_t;
70*593dc095SDavid du Colombier    typedef u_int16_t               uint16_t;
71*593dc095SDavid du Colombier    typedef u_int32_t               uint32_t;
72*593dc095SDavid du Colombier    typedef u_int64_t               uint64_t;
73*593dc095SDavid du Colombier #  define STDINT_TYPES_DEFINED
74*593dc095SDavid du Colombier # endif
75*593dc095SDavid du Colombier    /* other archs may want to add defines here,
76*593dc095SDavid du Colombier       or use the fallbacks in std.h */
77*593dc095SDavid du Colombier #endif
78*593dc095SDavid du Colombier 
79*593dc095SDavid du Colombier /* fall back to tests based on arch.h */
80*593dc095SDavid du Colombier #ifndef STDINT_TYPES_DEFINED
81*593dc095SDavid du Colombier /* 8 bit types */
82*593dc095SDavid du Colombier # if ARCH_SIZEOF_CHAR == 1
83*593dc095SDavid du Colombier typedef signed char int8_t;
84*593dc095SDavid du Colombier typedef unsigned char uint8_t;
85*593dc095SDavid du Colombier # endif
86*593dc095SDavid du Colombier /* 16 bit types */
87*593dc095SDavid du Colombier # if ARCH_SIZEOF_SHORT == 2
88*593dc095SDavid du Colombier typedef signed short int16_t;
89*593dc095SDavid du Colombier typedef unsigned short uint16_t;
90*593dc095SDavid du Colombier # else
91*593dc095SDavid du Colombier #  if ARCH_SIZEOF_INT == 2
92*593dc095SDavid du Colombier typedef signed int int16_t;
93*593dc095SDavid du Colombier typedef unsigned int uint16_t;
94*593dc095SDavid du Colombier #  endif
95*593dc095SDavid du Colombier # endif
96*593dc095SDavid du Colombier /* 32 bit types */
97*593dc095SDavid du Colombier # if ARCH_SIZEOF_INT == 4
98*593dc095SDavid du Colombier typedef signed int int32_t;
99*593dc095SDavid du Colombier typedef unsigned int uint32_t;
100*593dc095SDavid du Colombier # else
101*593dc095SDavid du Colombier #  if ARCH_SIZEOF_LONG == 4
102*593dc095SDavid du Colombier typedef signed long int32_t;
103*593dc095SDavid du Colombier typedef unsigned long uint32_t;
104*593dc095SDavid du Colombier #  else
105*593dc095SDavid du Colombier #   if ARCH_SIZEOF_SHORT == 4
106*593dc095SDavid du Colombier typedef signed short int32_t;
107*593dc095SDavid du Colombier typedef unsigned short uint32_t;
108*593dc095SDavid du Colombier #   endif
109*593dc095SDavid du Colombier #  endif
110*593dc095SDavid du Colombier # endif
111*593dc095SDavid du Colombier /* 64 bit types */
112*593dc095SDavid du Colombier # if ARCH_SIZEOF_INT == 8
113*593dc095SDavid du Colombier typedef signed int int64_t;
114*593dc095SDavid du Colombier typedef unsigned int uint64_t;
115*593dc095SDavid du Colombier # else
116*593dc095SDavid du Colombier #  if ARCH_SIZEOF_LONG == 8
117*593dc095SDavid du Colombier typedef signed long int64_t;
118*593dc095SDavid du Colombier typedef unsigned long uint64_t;
119*593dc095SDavid du Colombier #  else
120*593dc095SDavid du Colombier #   ifdef ARCH_SIZEOF_LONG_LONG
121*593dc095SDavid du Colombier #    if ARCH_SIZEOF_LONG_LONG == 8
122*593dc095SDavid du Colombier typedef signed long long int64_t;
123*593dc095SDavid du Colombier typedef unsigned long long uint64_t;
124*593dc095SDavid du Colombier #    endif
125*593dc095SDavid du Colombier #   endif
126*593dc095SDavid du Colombier #  endif
127*593dc095SDavid du Colombier # endif
128*593dc095SDavid du Colombier #  define STDINT_TYPES_DEFINED
129*593dc095SDavid du Colombier #endif /* STDINT_TYPES_DEFINED */
130*593dc095SDavid du Colombier 
131*593dc095SDavid du Colombier #endif /* stdint__INCLUDED */
132