Subversion Repositories Kolibri OS

Rev

Rev 4921 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (c) 2004, 2005 by
  3.  * Ralf Corsepius, Ulm/Germany. All rights reserved.
  4.  *
  5.  * Permission to use, copy, modify, and distribute this software
  6.  * is freely granted, provided that this notice is preserved.
  7.  */
  8.  
  9. /**
  10.  *  @file  inttypes.h
  11.  */
  12.  
  13. #ifndef _INTTYPES_H
  14. #define _INTTYPES_H
  15.  
  16. #include <sys/features.h>
  17. #include <stdint.h>
  18. #define __need_wchar_t
  19. #include <stddef.h>
  20.  
  21. /* Don't use __STDINT_EXP test since GCC's stdint.h provides different
  22.    macros than newlib's stdint.h. */
  23. #if __GNUC_PREREQ(3, 2)
  24.   #define __INTTYPES_EXP(x) __##x##__
  25. #else
  26.   #define __INTTYPES_EXP(x) x
  27.   #include <limits.h>
  28. #endif
  29.  
  30. #define __STRINGIFY(a) #a
  31.  
  32. /* 8-bit types */
  33. #define __PRI8(x) __STRINGIFY(x)
  34. #define __SCN8(x) __STRINGIFY(hh##x)
  35.  
  36.  
  37. #define PRId8           __PRI8(d)
  38. #define PRIi8           __PRI8(i)
  39. #define PRIo8           __PRI8(o)
  40. #define PRIu8           __PRI8(u)
  41. #define PRIx8           __PRI8(x)
  42. #define PRIX8           __PRI8(X)
  43.  
  44. #define SCNd8           __SCN8(d)
  45. #define SCNi8           __SCN8(i)
  46. #define SCNo8           __SCN8(o)
  47. #define SCNu8           __SCN8(u)
  48. #define SCNx8           __SCN8(x)
  49.  
  50.  
  51. #define PRIdLEAST8      __PRI8(d)
  52. #define PRIiLEAST8      __PRI8(i)
  53. #define PRIoLEAST8      __PRI8(o)
  54. #define PRIuLEAST8      __PRI8(u)
  55. #define PRIxLEAST8      __PRI8(x)
  56. #define PRIXLEAST8      __PRI8(X)
  57.  
  58. #define SCNdLEAST8      __SCN8(d)
  59. #define SCNiLEAST8      __SCN8(i)
  60. #define SCNoLEAST8      __SCN8(o)
  61. #define SCNuLEAST8      __SCN8(u)
  62. #define SCNxLEAST8      __SCN8(x)
  63.  
  64.  
  65. #define PRIdFAST8       __PRI8(d)
  66. #define PRIiFAST8       __PRI8(i)
  67. #define PRIoFAST8       __PRI8(o)
  68. #define PRIuFAST8       __PRI8(u)
  69. #define PRIxFAST8       __PRI8(x)
  70. #define PRIXFAST8       __PRI8(X)
  71.  
  72. #define SCNdFAST8       __SCN8(d)
  73. #define SCNiFAST8       __SCN8(i)
  74. #define SCNoFAST8       __SCN8(o)
  75. #define SCNuFAST8       __SCN8(u)
  76. #define SCNxFAST8       __SCN8(x)
  77.  
  78. /* 16-bit types */
  79. #define __PRI16(x) __STRINGIFY(x)
  80. #define __SCN16(x) __STRINGIFY(h##x)
  81.  
  82.  
  83. #define PRId16          __PRI16(d)
  84. #define PRIi16          __PRI16(i)
  85. #define PRIo16          __PRI16(o)
  86. #define PRIu16          __PRI16(u)
  87. #define PRIx16          __PRI16(x)
  88. #define PRIX16          __PRI16(X)
  89.  
  90. #define SCNd16          __SCN16(d)
  91. #define SCNi16          __SCN16(i)
  92. #define SCNo16          __SCN16(o)
  93. #define SCNu16          __SCN16(u)
  94. #define SCNx16          __SCN16(x)
  95.  
  96.  
  97. #define PRIdLEAST16     __PRI16(d)
  98. #define PRIiLEAST16     __PRI16(i)
  99. #define PRIoLEAST16     __PRI16(o)
  100. #define PRIuLEAST16     __PRI16(u)
  101. #define PRIxLEAST16     __PRI16(x)
  102. #define PRIXLEAST16     __PRI16(X)
  103.  
  104. #define SCNdLEAST16     __SCN16(d)
  105. #define SCNiLEAST16     __SCN16(i)
  106. #define SCNoLEAST16     __SCN16(o)
  107. #define SCNuLEAST16     __SCN16(u)
  108. #define SCNxLEAST16     __SCN16(x)
  109.  
  110.  
  111. #define PRIdFAST16      __PRI16(d)
  112. #define PRIiFAST16      __PRI16(i)
  113. #define PRIoFAST16      __PRI16(o)
  114. #define PRIuFAST16      __PRI16(u)
  115. #define PRIxFAST16      __PRI16(x)
  116. #define PRIXFAST16      __PRI16(X)
  117.  
  118. #define SCNdFAST16      __SCN16(d)
  119. #define SCNiFAST16      __SCN16(i)
  120. #define SCNoFAST16      __SCN16(o)
  121. #define SCNuFAST16      __SCN16(u)
  122. #define SCNxFAST16      __SCN16(x)
  123.  
  124. /* 32-bit types */
  125. #if __have_long32
  126. #define __PRI32(x) __STRINGIFY(l##x)
  127. #define __SCN32(x) __STRINGIFY(l##x)
  128. #else
  129. #define __PRI32(x) __STRINGIFY(x)
  130. #define __SCN32(x) __STRINGIFY(x)
  131. #endif
  132.  
  133. #define PRId32          __PRI32(d)
  134. #define PRIi32          __PRI32(i)
  135. #define PRIo32          __PRI32(o)
  136. #define PRIu32          __PRI32(u)
  137. #define PRIx32          __PRI32(x)
  138. #define PRIX32          __PRI32(X)
  139.  
  140. #define SCNd32          __SCN32(d)
  141. #define SCNi32          __SCN32(i)
  142. #define SCNo32          __SCN32(o)
  143. #define SCNu32          __SCN32(u)
  144. #define SCNx32          __SCN32(x)
  145.  
  146.  
  147. #define PRIdLEAST32     __PRI32(d)
  148. #define PRIiLEAST32     __PRI32(i)
  149. #define PRIoLEAST32     __PRI32(o)
  150. #define PRIuLEAST32     __PRI32(u)
  151. #define PRIxLEAST32     __PRI32(x)
  152. #define PRIXLEAST32     __PRI32(X)
  153.  
  154. #define SCNdLEAST32     __SCN32(d)
  155. #define SCNiLEAST32     __SCN32(i)
  156. #define SCNoLEAST32     __SCN32(o)
  157. #define SCNuLEAST32     __SCN32(u)
  158. #define SCNxLEAST32     __SCN32(x)
  159.  
  160.  
  161. #define PRIdFAST32      __PRI32(d)
  162. #define PRIiFAST32      __PRI32(i)
  163. #define PRIoFAST32      __PRI32(o)
  164. #define PRIuFAST32      __PRI32(u)
  165. #define PRIxFAST32      __PRI32(x)
  166. #define PRIXFAST32      __PRI32(X)
  167.  
  168. #define SCNdFAST32      __SCN32(d)
  169. #define SCNiFAST32      __SCN32(i)
  170. #define SCNoFAST32      __SCN32(o)
  171. #define SCNuFAST32      __SCN32(u)
  172. #define SCNxFAST32      __SCN32(x)
  173.  
  174.  
  175. /* 64-bit types */
  176. #if __have_long64
  177. #define __PRI64(x) __STRINGIFY(l##x)
  178. #define __SCN64(x) __STRINGIFY(l##x)
  179. #elif __have_longlong64
  180. #define __PRI64(x) __STRINGIFY(I64##x)
  181. #define __SCN64(x) __STRINGIFY(I64##x)
  182. #else
  183. #define __PRI64(x) __STRINGIFY(x)
  184. #define __SCN64(x) __STRINGIFY(x)
  185. #endif
  186.  
  187. #define PRId64          __PRI64(d)
  188. #define PRIi64          __PRI64(i)
  189. #define PRIo64          __PRI64(o)
  190. #define PRIu64          __PRI64(u)
  191. #define PRIx64          __PRI64(x)
  192. #define PRIX64          __PRI64(X)
  193.  
  194. #define SCNd64          __SCN64(d)
  195. #define SCNi64          __SCN64(i)
  196. #define SCNo64          __SCN64(o)
  197. #define SCNu64          __SCN64(u)
  198. #define SCNx64          __SCN64(x)
  199.  
  200. #if __int64_t_defined
  201. #define PRIdLEAST64     __PRI64(d)
  202. #define PRIiLEAST64     __PRI64(i)
  203. #define PRIoLEAST64     __PRI64(o)
  204. #define PRIuLEAST64     __PRI64(u)
  205. #define PRIxLEAST64     __PRI64(x)
  206. #define PRIXLEAST64     __PRI64(X)
  207.  
  208. #define SCNdLEAST64     __SCN64(d)
  209. #define SCNiLEAST64     __SCN64(i)
  210. #define SCNoLEAST64     __SCN64(o)
  211. #define SCNuLEAST64     __SCN64(u)
  212. #define SCNxLEAST64     __SCN64(x)
  213.  
  214.  
  215. #define PRIdFAST64      __PRI64(d)
  216. #define PRIiFAST64      __PRI64(i)
  217. #define PRIoFAST64      __PRI64(o)
  218. #define PRIuFAST64      __PRI64(u)
  219. #define PRIxFAST64      __PRI64(x)
  220. #define PRIXFAST64      __PRI64(X)
  221.  
  222. #define SCNdFAST64      __SCN64(d)
  223. #define SCNiFAST64      __SCN64(i)
  224. #define SCNoFAST64      __SCN64(o)
  225. #define SCNuFAST64      __SCN64(u)
  226. #define SCNxFAST64      __SCN64(x)
  227. #endif
  228.  
  229. /* max-bit types */
  230. #if __have_long64
  231. #define __PRIMAX(x) __STRINGIFY(l##x)
  232. #define __SCNMAX(x) __STRINGIFY(l##x)
  233. #elif __have_longlong64
  234. #define __PRIMAX(x) __STRINGIFY(ll##x)
  235. #define __SCNMAX(x) __STRINGIFY(ll##x)
  236. #else
  237. #define __PRIMAX(x) __STRINGIFY(x)
  238. #define __SCNMAX(x) __STRINGIFY(x)
  239. #endif
  240.  
  241. #define PRIdMAX         __PRIMAX(d)
  242. #define PRIiMAX         __PRIMAX(i)
  243. #define PRIoMAX         __PRIMAX(o)
  244. #define PRIuMAX         __PRIMAX(u)
  245. #define PRIxMAX         __PRIMAX(x)
  246. #define PRIXMAX         __PRIMAX(X)
  247.  
  248. #define SCNdMAX         __SCNMAX(d)
  249. #define SCNiMAX         __SCNMAX(i)
  250. #define SCNoMAX         __SCNMAX(o)
  251. #define SCNuMAX         __SCNMAX(u)
  252. #define SCNxMAX         __SCNMAX(x)
  253.  
  254. /* ptr types */
  255. #if PTRDIFF_MAX <= __INTTYPES_EXP(INT_MAX)
  256. # define __PRIPTR(x) __STRINGIFY(x)
  257. # define __SCNPTR(x) __STRINGIFY(x)
  258. #elif PTRDIFF_MAX <= __INTTYPES_EXP(LONG_MAX) || !defined(__have_longlong64)
  259. # define __PRIPTR(x) __STRINGIFY(l##x)
  260. # define __SCNPTR(x) __STRINGIFY(l##x)
  261. #else
  262. # define __PRIPTR(x) __STRINGIFY(ll##x)
  263. # define __SCNPTR(x) __STRINGIFY(ll##x)
  264. #endif
  265.  
  266. #define PRIdPTR         __PRIPTR(d)
  267. #define PRIiPTR         __PRIPTR(i)
  268. #define PRIoPTR         __PRIPTR(o)
  269. #define PRIuPTR         __PRIPTR(u)
  270. #define PRIxPTR         __PRIPTR(x)
  271. #define PRIXPTR         __PRIPTR(X)
  272.  
  273. #define SCNdPTR         __SCNPTR(d)
  274. #define SCNiPTR         __SCNPTR(i)
  275. #define SCNoPTR         __SCNPTR(o)
  276. #define SCNuPTR         __SCNPTR(u)
  277. #define SCNxPTR         __SCNPTR(x)
  278.  
  279.  
  280. typedef struct {
  281.   intmax_t      quot;
  282.   intmax_t      rem;
  283. } imaxdiv_t;
  284.  
  285. #ifdef __cplusplus
  286. extern "C" {
  287. #endif
  288.  
  289. extern intmax_t  imaxabs(intmax_t j);
  290. extern imaxdiv_t imaxdiv(intmax_t numer, intmax_t denomer);
  291. extern intmax_t  strtoimax(const char *__restrict, char **__restrict, int);
  292. extern uintmax_t strtoumax(const char *__restrict, char **__restrict, int);
  293. extern intmax_t  wcstoimax(const wchar_t *__restrict, wchar_t **__restrict, int);
  294. extern uintmax_t wcstoumax(const wchar_t *__restrict, wchar_t **__restrict, int);
  295.  
  296. #ifdef __cplusplus
  297. }
  298. #endif
  299.  
  300. #endif
  301.