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