utypes.h
上传用户:xiejiait
上传日期:2007-01-06
资源大小:881k
文件大小:4k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /* @(#)utypes.h 1.5 99/07/31 Copyright 1997 J. Schilling */
  2. /*
  3.  * Definitions for some user defined types
  4.  *
  5.  * Copyright (c) 1997 J. Schilling
  6.  */
  7. /*
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; either version 2, or (at your option)
  11.  * any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; see the file COPYING.  If not, write to
  20.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  */
  22. #ifndef _UTYPES_H
  23. #define _UTYPES_H
  24. #ifndef _MCONFIG_H
  25. #include <mconfig.h>
  26. #endif
  27. #ifdef __CHAR_UNSIGNED__ /* GNU GCC define     (dynamic) */
  28. #ifndef CHAR_IS_UNSIGNED
  29. #define CHAR_IS_UNSIGNED /* Sing Schily define (static) */
  30. #endif
  31. #endif
  32. /*
  33.  * Several unsigned cardinal types
  34.  */
  35. typedef unsigned long Ulong;
  36. typedef unsigned int Uint;
  37. typedef unsigned short Ushort;
  38. typedef unsigned char Uchar;
  39. /*
  40.  * This is a definition for a compiler dependant 64 bit type.
  41.  * It currently is silently a long if the compiler does not
  42.  * support it. Check if this is the right way.
  43.  */
  44. #ifndef NO_LONGLONG
  45. # if defined(HAVE_LONGLONG)
  46. # define USE_LONGLONG
  47. # endif
  48. #endif
  49. #ifdef USE_LONGLONG
  50. typedef long long Llong;
  51. typedef unsigned long long Ullong;
  52. #else
  53. typedef long Llong;
  54. typedef unsigned long Ullong;
  55. #endif
  56. /*
  57.  * The IBM AIX C-compiler seems to be the only compiler on the world
  58.  * which does not allow to use unsigned char bit fields as a hint
  59.  * for packed bit fields. Define a pesical type to avoid warnings.
  60.  * The packed attribute is honored wit unsigned int in this case too.
  61.  */
  62. #ifdef _AIX
  63. typedef unsigned int Ucbit;
  64. #else
  65. typedef unsigned char Ucbit;
  66. #endif
  67. /*
  68.  * Start inttypes.h emulation.
  69.  *
  70.  * Thanks to Solaris 2.4 and even recent 1999 Linux versions, we
  71.  * cannot use the official UNIX-98 names here. Old Solaris versions
  72.  * define parts of the types in some exotic include files.
  73.  * Linux even defines incompatible types in <sys/types.h>.
  74.  */
  75. #ifdef HAVE_INTTYPES_H
  76. # include <inttypes.h>
  77. # define HAVE_INT64_T
  78. # define HAVE_UINT64_T
  79. #define Int8_t int8_t
  80. #define Int16_t int16_t
  81. #define Int32_t int32_t
  82. #define Int64_t int64_t
  83. #define UInt8_t uint8_t
  84. #define UInt16_t uint16_t
  85. #define UInt32_t uint32_t
  86. #define UInt64_t uint64_t
  87. #define Intptr_t intptr_t
  88. #define UIntptr_t uintptr_t
  89. #else /* !HAVE_INTTYPES_H */
  90. #if SIZEOF_CHAR != 1 || SIZEOF_UNSIGNED_CHAR != 1
  91. /*
  92.  * #error will not work for all compilers (e.g. sunos4)
  93.  * The following line will abort compilation on all compilers
  94.  * if the above is true. And that's what we want.
  95.  */
  96. error  Sizeof char is not equal 1
  97. #endif
  98. #if defined(__STDC__) || defined(CHAR_IS_UNSIGNED)
  99. typedef signed char Int8_t;
  100. #else
  101. typedef char Int8_t;
  102. #endif
  103. #if SIZEOF_SHORT_INT == 2
  104. typedef short Int16_t;
  105. #else
  106. error No int16_t found
  107. #endif
  108. #if SIZEOF_INT == 4
  109. typedef int Int32_t;
  110. #else
  111. error No int32_t found
  112. #endif
  113. #if SIZEOF_LONG_INT == 8
  114. typedef long Int64_t;
  115. # define HAVE_INT64_T
  116. #else
  117. #if SIZEOF_LONG_LONG == 8
  118. typedef long long Int64_t;
  119. # define HAVE_INT64_T
  120. #else
  121. /* error No int64_t found*/
  122. #endif
  123. #endif
  124. #if SIZEOF_CHAR_P == SIZEOF_INT
  125. typedef int Intptr_t;
  126. #else
  127. #if SIZEOF_CHAR_P == SIZEOF_LONG_INT
  128. typedef long Intptr_t;
  129. #else
  130. error No intptr_t found
  131. #endif
  132. #endif
  133. typedef unsigned char UInt8_t;
  134. #if SIZEOF_UNSIGNED_SHORT_INT == 2
  135. typedef unsigned short UInt16_t;
  136. #else
  137. error No uint16_t found
  138. #endif
  139. #if SIZEOF_UNSIGNED_INT == 4
  140. typedef unsigned int UInt32_t;
  141. #else
  142. error No int32_t found
  143. #endif
  144. #if SIZEOF_UNSIGNED_LONG_INT == 8
  145. typedef unsigned long UInt64_t;
  146. # define HAVE_UINT64_T
  147. #else
  148. #if SIZEOF_UNSIGNED_LONG_LONG == 8
  149. typedef unsigned long long UInt64_t;
  150. # define HAVE_UINT64_T
  151. #else
  152. /* error No uint64_t found*/
  153. #endif
  154. #endif
  155. #if SIZEOF_CHAR_P == SIZEOF_UNSIGNED_INT
  156. typedef unsigned int UIntptr_t;
  157. #else
  158. #if SIZEOF_CHAR_P == SIZEOF_UNSIGNED_LONG_INT
  159. typedef unsigned long UIntptr_t;
  160. #else
  161. error No uintptr_t found
  162. #endif
  163. #endif
  164. #endif /* HAVE_INTTYPES_H */
  165. #endif /* _UTYPES_H */