/* ACC -- Automatic Compiler Configuration

   Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer
   All Rights Reserved.

   This software is a copyrighted work licensed under the terms of
   the GNU General Public License. Please consult the file "ACC_LICENSE"
   for details.

   Markus F.X.J. Oberhumer
   <markus@oberhumer.com>
   http://www.oberhumer.com/
 */


/***********************************************************************
//
************************************************************************/

#if (ACC_CC_GNUC >= 0x020800ul)     /* 2.8.0 */
#  define __acc_gnuc_extension__ __extension__
#else
#  define __acc_gnuc_extension__
#endif

#if (SIZEOF_LONG_LONG > 0)
__acc_gnuc_extension__ typedef long long acc_llong_t;
#endif
#if (SIZEOF_UNSIGNED_LONG_LONG > 0)
__acc_gnuc_extension__ typedef unsigned long long acc_ullong_t;
#endif

#if (!(SIZEOF_SHORT > 0 && SIZEOF_INT > 0 && SIZEOF_LONG > 0))
#  error "missing defines for sizes"
#endif
#if (!(SIZEOF_PTRDIFF_T > 0 && SIZEOF_SIZE_T > 0 && SIZEOF_VOID_P > 0 && SIZEOF_CHAR_P > 0))
#  error "missing defines for sizes"
#endif


/***********************************************************************
// some <stdint.h> types:
//   required: least & fast: acc_int32l_t, acc_int32f_t
//   optional: exact32 acc_int32e_t
//   optional: least64 acc_int64l_t
************************************************************************/

/* acc_int32e_t is int32_t in <stdint.h> terminology */
#if !defined(acc_int32e_t)
#if (SIZEOF_INT == 4)
#  define acc_int32e_t          int
#  define acc_uint32e_t         unsigned int
#  define ACC_INT32E_C(c)       c
#  define ACC_UINT32E_C(c)      c##U
#elif (SIZEOF_LONG == 4)
#  define acc_int32e_t          long int
#  define acc_uint32e_t         unsigned long int
#  define ACC_INT32E_C(c)       c##L
#  define ACC_UINT32E_C(c)      c##UL
#elif (SIZEOF_SHORT == 4)
#  define acc_int32e_t          short int
#  define acc_uint32e_t         unsigned short int
#  define ACC_INT32E_C(c)       c
#  define ACC_UINT32E_C(c)      c##U
#elif (SIZEOF_LONG_LONG == 4 && SIZEOF_UNSIGNED_LONG_LONG == 4)
#  define acc_int32e_t          acc_llong_t
#  define acc_uint32e_t         acc_ullong_t
#  define ACC_INT32E_C(c)       c##LL
#  define ACC_UINT32E_C(c)      c##ULL
#elif (SIZEOF___INT32 == 4 && SIZEOF_UNSIGNED___INT32 == 4)
#  define acc_int32e_t          __int32
#  define acc_uint32e_t         unsigned __int32
#  if (SIZEOF_INT > 4)
#    define ACC_INT32E_C(c)     c
#    define ACC_UINT32E_C(c)    c##U
#  elif (SIZEOF_LONG > 4)
#    define ACC_INT32E_C(c)     c##L
#    define ACC_UINT32E_C(c)    c##UL
#  else
#    define ACC_INT32E_C(c)     c##i32
#    define ACC_UINT32E_C(c)    c##ui32
#  endif
#else
  /* no exact 32-bit integral type on this machine */
#endif
#endif
#if defined(acc_int32e_t)
#  define SIZEOF_ACC_INT32E_T   4
#endif


/* acc_int32l_t is int_least32_t in <stdint.h> terminology */
#if !defined(acc_int32l_t)
#if defined(acc_int32e_t)
#  define acc_int32l_t          acc_int32e_t
#  define acc_uint32l_t         acc_uint32e_t
#  define ACC_INT32L_C(c)       ACC_INT32E_C(c)
#  define ACC_UINT32L_C(c)      ACC_UINT32E_C(c)
#  define SIZEOF_ACC_INT32L_T   SIZEOF_ACC_INT32E_T
#elif (SIZEOF_INT > 4)
#  define acc_int32l_t          int
#  define acc_uint32l_t         unsigned int
#  define ACC_INT32L_C(c)       c
#  define ACC_UINT32L_C(c)      c##U
#  define SIZEOF_ACC_INT32L_T   SIZEOF_INT
#elif (SIZEOF_LONG > 4)
#  define acc_int32l_t          long int
#  define acc_uint32l_t         unsigned long int
#  define ACC_INT32L_C(c)       c##L
#  define ACC_UINT32L_C(c)      c##UL
#  define SIZEOF_ACC_INT32L_T   SIZEOF_LONG
#else
#  error "acc_int32l_t"
#endif
#endif


/* acc_int32f_t is int_fast32_t in <stdint.h> terminology */
#if !defined(acc_int32f_t)
#if (SIZEOF_INT >= 4)
#  define acc_int32f_t          int
#  define acc_uint32f_t         unsigned int
#  define ACC_INT32F_C(c)       c
#  define ACC_UINT32F_C(c)      c##U
#  define SIZEOF_ACC_INT32F_T   SIZEOF_INT
#elif (SIZEOF_LONG >= 4)
#  define acc_int32f_t          long int
#  define acc_uint32f_t         unsigned long int
#  define ACC_INT32F_C(c)       c##L
#  define ACC_UINT32F_C(c)      c##UL
#  define SIZEOF_ACC_INT32F_T   SIZEOF_LONG
#elif defined(acc_int32e_t)
#  define acc_int32f_t          acc_int32e_t
#  define acc_uint32f_t         acc_uint32e_t
#  define ACC_INT32F_C(c)       ACC_INT32E_C(c)
#  define ACC_UINT32F_C(c)      ACC_UINT32E_C(c)
#  define SIZEOF_ACC_INT32F_T   SIZEOF_ACC_INT32E_T
#else
#  error "acc_int32f_t"
#endif
#endif


/* acc_int64l_t is int_least64_t in <stdint.h> terminology */
#if !defined(acc_int64l_t)
#if (SIZEOF___INT64 >= 8 && SIZEOF_UNSIGNED___INT64 >= 8)
#  if (ACC_CC_BORLANDC) && !defined(ACC_CONFIG_PREFER___INT64)
#    define ACC_CONFIG_PREFER___INT64 1
#  endif
#endif
#if (SIZEOF_INT >= 8)
#  define acc_int64l_t          int
#  define acc_uint64l_t         unsigned int
#  define ACC_INT64L_C(c)       c
#  define ACC_UINT64L_C(c)      c##U
#  define SIZEOF_ACC_INT64L_T   SIZEOF_INT
#elif (SIZEOF_LONG >= 8)
#  define acc_int64l_t          long int
#  define acc_uint64l_t         unsigned long int
#  define ACC_INT64L_C(c)       c##L
#  define ACC_UINT64L_C(c)      c##UL
#  define SIZEOF_ACC_INT64L_T   SIZEOF_LONG
#elif (SIZEOF_LONG_LONG >= 8 && SIZEOF_UNSIGNED_LONG_LONG >= 8) && !defined(ACC_CONFIG_PREFER___INT64)
#  define acc_int64l_t          acc_llong_t
#  define acc_uint64l_t         acc_ullong_t
#  if (ACC_CC_BORLANDC)
#    define ACC_INT64L_C(c)     ((c) + 0ll)
#    define ACC_UINT64L_C(c)    ((c) + 0ull)
#  else
#    define ACC_INT64L_C(c)     c##LL
#    define ACC_UINT64L_C(c)    c##ULL
#  endif
#  define SIZEOF_ACC_INT64L_T   SIZEOF_LONG_LONG
#elif (SIZEOF___INT64 >= 8 && SIZEOF_UNSIGNED___INT64 >= 8)
#  define acc_int64l_t          __int64
#  define acc_uint64l_t         unsigned __int64
#  if (ACC_CC_BORLANDC)
#    define ACC_INT64L_C(c)     ((c) + 0i64)
#    define ACC_UINT64L_C(c)    ((c) + 0ui64)
#  else
#    define ACC_INT64L_C(c)     c##i64
#    define ACC_UINT64L_C(c)    c##ui64
#  endif
#  define SIZEOF_ACC_INT64L_T   SIZEOF___INT64
#else
  /* no least 64-bit integral type on this machine */
#endif
#endif


#if !defined(acc_intptr_t)
#if defined(__INTPTR_TYPE__) && defined(__UINTPTR_TYPE__)
   typedef __INTPTR_TYPE__      acc_intptr_t;
   typedef __UINTPTR_TYPE__     acc_uintptr_t;
#  define acc_intptr_t          acc_intptr_t
#  define acc_uintptr_t         acc_uintptr_t
#  define SIZEOF_ACC_INTPTR_T   SIZEOF_VOID_P
#elif (ACC_ARCH_IA32 && ACC_CC_MSC && (_MSC_VER >= 1300))
   typedef __w64 int            acc_intptr_t;
   typedef __w64 unsigned int   acc_uintptr_t;
#  define acc_intptr_t          acc_intptr_t
#  define acc_uintptr_t         acc_uintptr_t
#  define SIZEOF_ACC_INTPTR_T   SIZEOF_INT
#elif (SIZEOF_INT >= SIZEOF_VOID_P)
#  define acc_intptr_t          int
#  define acc_uintptr_t         unsigned int
#  define SIZEOF_ACC_INTPTR_T   SIZEOF_INT
#elif (SIZEOF_LONG >= SIZEOF_VOID_P)
#  define acc_intptr_t          long
#  define acc_uintptr_t         unsigned long
#  define SIZEOF_ACC_INTPTR_T   SIZEOF_LONG
#elif (SIZEOF_ACC_INT64L_T >= SIZEOF_VOID_P)
#  define acc_intptr_t          acc_int64l_t
#  define acc_uintptr_t         acc_uint64l_t
#  define SIZEOF_ACC_INTPTR_T   SIZEOF_ACC_INT64L_T
#else
#  error "acc_intptr_t"
#endif
#endif


/* workaround for broken compilers */
#if (ACC_BROKEN_INTEGRAL_CONSTANTS)
#  undef ACC_INT32E_C
#  undef ACC_UINT32E_C
#  undef ACC_INT32L_C
#  undef ACC_UINT32L_C
#  undef ACC_INT32F_C
#  undef ACC_UINT32F_C
#  if (SIZEOF_INT == 4)
#    define ACC_INT32E_C(c)     ((c) + 0)
#    define ACC_UINT32E_C(c)    ((c) + 0U)
#    define ACC_INT32L_C(c)     ((c) + 0)
#    define ACC_UINT32L_C(c)    ((c) + 0U)
#    define ACC_INT32F_C(c)     ((c) + 0)
#    define ACC_UINT32F_C(c)    ((c) + 0U)
#  elif (SIZEOF_LONG == 4)
#    define ACC_INT32E_C(c)     ((c) + 0L)
#    define ACC_UINT32E_C(c)    ((c) + 0UL)
#    define ACC_INT32L_C(c)     ((c) + 0L)
#    define ACC_UINT32L_C(c)    ((c) + 0UL)
#    define ACC_INT32F_C(c)     ((c) + 0L)
#    define ACC_UINT32F_C(c)    ((c) + 0UL)
#  else
#    error "integral constants"
#  endif
#endif


/***********************************************************************
// calling conventions
************************************************************************/

#if (ACC_OS_DOS16 || ACC_OS_DOS32 || ACC_OS_OS2 || ACC_OS_OS216 || ACC_OS_WIN16 || ACC_OS_WIN32 || ACC_OS_WIN64)
#  if (ACC_CC_GNUC || ACC_CC_HIGHC || ACC_CC_NDPC || ACC_CC_PACIFICC)
#  elif (ACC_CC_DMC || ACC_CC_SYMANTECC || ACC_CC_ZORTECHC)
#    define __acc_cdecl                 __cdecl
#    define __acc_cdecl_atexit
#    define __acc_cdecl_main            __cdecl
#    if (ACC_OS_OS2 && (ACC_CC_DMC || ACC_CC_SYMANTECC))
#      define __acc_cdecl_qsort         __pascal
#    elif (ACC_OS_OS2 && (ACC_CC_ZORTECHC))
#      define __acc_cdecl_qsort         _stdcall
#    else
#      define __acc_cdecl_qsort         __cdecl
#    endif
#  elif (ACC_CC_WATCOMC)
#    define __acc_cdecl                 __cdecl
#  else
#    define __acc_cdecl                 __cdecl
#    define __acc_cdecl_atexit          __cdecl
#    define __acc_cdecl_main            __cdecl
#    define __acc_cdecl_qsort           __cdecl
#  endif
#  if (ACC_CC_GNUC || ACC_CC_HIGHC || ACC_CC_NDPC || ACC_CC_PACIFICC || ACC_CC_WATCOMC)
#  elif (ACC_OS_OS2 && (ACC_CC_DMC || ACC_CC_SYMANTECC))
#    define __acc_cdecl_sighandler      __pascal
#  elif (ACC_OS_OS2 && (ACC_CC_ZORTECHC))
#    define __acc_cdecl_sighandler      _stdcall
#  elif (ACC_CC_MSC && (_MSC_VER >= 1400)) && defined(_M_CEE_PURE)
#    define __acc_cdecl_sighandler      __clrcall
#  elif (ACC_CC_MSC && (_MSC_VER >= 600 && _MSC_VER < 700))
#    if defined(_DLL)
#      define __acc_cdecl_sighandler    _far _cdecl _loadds
#    elif defined(_MT)
#      define __acc_cdecl_sighandler    _far _cdecl
#    else
#      define __acc_cdecl_sighandler    _cdecl
#    endif
#  else
#    define __acc_cdecl_sighandler      __cdecl
#  endif
#elif (ACC_OS_TOS && (ACC_CC_PUREC || ACC_CC_TURBOC))
#  define __acc_cdecl                   cdecl
#endif

#if !defined(__acc_cdecl)
#  define __acc_cdecl
#endif
#if !defined(__acc_cdecl_atexit)
#  define __acc_cdecl_atexit
#endif
#if !defined(__acc_cdecl_main)
#  define __acc_cdecl_main
#endif
#if !defined(__acc_cdecl_qsort)
#  define __acc_cdecl_qsort
#endif
#if !defined(__acc_cdecl_sighandler)
#  define __acc_cdecl_sighandler
#endif
#if !defined(__acc_cdecl_va)
#  define __acc_cdecl_va                __acc_cdecl
#endif

#if (ACC_BROKEN_CDECL_ALT_SYNTAX)
typedef void __acc_cdecl_sighandler (*acc_sighandler_t)(int);
#elif defined(RETSIGTYPE)
typedef RETSIGTYPE (__acc_cdecl_sighandler *acc_sighandler_t)(int);
#else
typedef void (__acc_cdecl_sighandler *acc_sighandler_t)(int);
#endif


/*
vi:ts=4:et
*/
