1/*
2 * Copyright 2002-2012 Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _INTTYPES_H_
6#define _INTTYPES_H_
7
8
9#include <stdint.h>
10
11
12typedef struct {
13	intmax_t	quot;	/* quotient */
14	intmax_t	rem;	/* remainder */
15} imaxdiv_t;
16
17#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS)
18/* fprintf() macros for signed integers */
19#	define PRId8			"d"
20#	define PRIdLEAST8		"d"
21#	define PRIdFAST8		"d"
22#	define PRIi8			"i"
23#	define PRIiLEAST8		"i"
24#	define PRIiFAST8		"i"
25
26#	define PRId16			"d"
27#	define PRIdLEAST16		"d"
28#	define PRIdFAST16		"d"
29#	define PRIi16			"i"
30#	define PRIiLEAST16		"i"
31#	define PRIiFAST16		"i"
32
33#	define PRId32			__HAIKU_STD_PRI_PREFIX_32 "d"
34#	define PRIdLEAST32		PRId32
35#	define PRIdFAST32		PRId32
36#	define PRIi32			__HAIKU_STD_PRI_PREFIX_32 "i"
37#	define PRIiLEAST32		PRIi32
38#	define PRIiFAST32		PRIi32
39
40#	define PRId64			__HAIKU_STD_PRI_PREFIX_64 "d"
41#	define PRIdLEAST64		PRId64
42#	define PRIdFAST64		PRId64
43#	define PRIi64			__HAIKU_STD_PRI_PREFIX_64 "i"
44#	define PRIiLEAST64		PRIi64
45#	define PRIiFAST64		PRIi64
46
47#	define PRIdMAX			PRId64
48#	define PRIdPTR			__HAIKU_PRI_PREFIX_ADDR "d"
49#	define PRIiMAX			PRIi64
50#	define PRIiPTR			__HAIKU_PRI_PREFIX_ADDR "i"
51
52/* fprintf() macros for unsigned integers */
53#	define PRIu8			"u"
54#	define PRIuLEAST8		"u"
55#	define PRIuFAST8		"u"
56#	define PRIo8			"o"
57#	define PRIoLEAST8		"o"
58#	define PRIoFAST8		"o"
59#	define PRIx8			"x"
60#	define PRIxLEAST8		"x"
61#	define PRIxFAST8		"x"
62#	define PRIX8			"X"
63#	define PRIXLEAST8		"X"
64#	define PRIXFAST8		"X"
65
66#	define PRIu16			"u"
67#	define PRIuLEAST16		"u"
68#	define PRIuFAST16		"u"
69#	define PRIo16			"o"
70#	define PRIoLEAST16		"o"
71#	define PRIoFAST16		"o"
72#	define PRIx16			"x"
73#	define PRIxLEAST16		"x"
74#	define PRIxFAST16		"x"
75#	define PRIX16			"X"
76#	define PRIXLEAST16		"X"
77#	define PRIXFAST16		"X"
78
79#	define PRIu32			__HAIKU_STD_PRI_PREFIX_32 "u"
80#	define PRIuLEAST32		PRIu32
81#	define PRIuFAST32		PRIu32
82#	define PRIo32			__HAIKU_STD_PRI_PREFIX_32 "o"
83#	define PRIoLEAST32		PRIo32
84#	define PRIoFAST32		PRIo32
85#	define PRIx32			__HAIKU_STD_PRI_PREFIX_32 "x"
86#	define PRIxLEAST32		PRIx32
87#	define PRIxFAST32		PRIx32
88#	define PRIX32			__HAIKU_STD_PRI_PREFIX_32 "X"
89#	define PRIXLEAST32		PRIX32
90#	define PRIXFAST32		PRIX32
91
92#	define PRIu64			__HAIKU_STD_PRI_PREFIX_64 "u"
93#	define PRIuLEAST64		PRIu64
94#	define PRIuFAST64		PRIu64
95#	define PRIo64			__HAIKU_STD_PRI_PREFIX_64 "o"
96#	define PRIoLEAST64		PRIo64
97#	define PRIoFAST64		PRIo64
98#	define PRIx64			__HAIKU_STD_PRI_PREFIX_64 "x"
99#	define PRIxLEAST64		PRIx64
100#	define PRIxFAST64		PRIx64
101#	define PRIX64			__HAIKU_STD_PRI_PREFIX_64 "X"
102#	define PRIXLEAST64		PRIX64
103#	define PRIXFAST64		PRIX64
104
105#	define PRIuMAX			PRIu64
106#	define PRIuPTR			__HAIKU_PRI_PREFIX_ADDR "u"
107#	define PRIoMAX			PRIo64
108#	define PRIoPTR			__HAIKU_PRI_PREFIX_ADDR "o"
109#	define PRIxMAX			PRIx64
110#	define PRIxPTR			__HAIKU_PRI_PREFIX_ADDR "x"
111#	define PRIXMAX			PRIX64
112#	define PRIXPTR			__HAIKU_PRI_PREFIX_ADDR "X"
113
114/* fscanf() macros for signed integers */
115#	define SCNd8 			"hhd"
116#	define SCNdLEAST8 		"hhd"
117#	define SCNdFAST8 		"d"
118#	define SCNi8 			"hhi"
119#	define SCNiLEAST8 		"hhi"
120#	define SCNiFAST8 		"i"
121
122#	define SCNd16			"hd"
123#	define SCNdLEAST16		"hd"
124#	define SCNdFAST16		"d"
125#	define SCNi16 			"hi"
126#	define SCNiLEAST16		"hi"
127#	define SCNiFAST16		"i"
128
129#	define SCNd32 			__HAIKU_STD_PRI_PREFIX_32 "d"
130#	define SCNdLEAST32		SCNd32
131#	define SCNdFAST32		SCNd32
132#	define SCNi32 			__HAIKU_STD_PRI_PREFIX_32 "i"
133#	define SCNiLEAST32		SCNi32
134#	define SCNiFAST32		SCNi32
135
136#	define SCNd64			__HAIKU_STD_PRI_PREFIX_64 "d"
137#	define SCNdLEAST64		SCNd64
138#	define SCNdFAST64		SCNd64
139#	define SCNi64 			__HAIKU_STD_PRI_PREFIX_64 "i"
140#	define SCNiLEAST64		SCNi64
141#	define SCNiFAST64 		SCNi64
142
143#	define SCNdMAX			SCNd64
144#	define SCNdPTR			__HAIKU_PRI_PREFIX_ADDR "d"
145#	define SCNiMAX			SCNi64
146#	define SCNiPTR			__HAIKU_PRI_PREFIX_ADDR "i"
147
148/* fscanf() macros for unsigned integers */
149#	define SCNu8 			"hhu"
150#	define SCNuLEAST8 		"hhu"
151#	define SCNuFAST8 		"u"
152#	define SCNo8 			"hho"
153#	define SCNoLEAST8 		"hho"
154#	define SCNoFAST8 		"o"
155#	define SCNx8 			"hhx"
156#	define SCNxLEAST8 		"hhx"
157#	define SCNxFAST8 		"x"
158
159#	define SCNu16			"hu"
160#	define SCNuLEAST16		"hu"
161#	define SCNuFAST16		"u"
162#	define SCNo16			"ho"
163#	define SCNoLEAST16		"ho"
164#	define SCNoFAST16		"o"
165#	define SCNx16			"hx"
166#	define SCNxLEAST16		"hx"
167#	define SCNxFAST16		"x"
168
169#	define SCNu32 			__HAIKU_STD_PRI_PREFIX_32 "u"
170#	define SCNuLEAST32		SCNu32
171#	define SCNuFAST32		SCNu32
172#	define SCNo32 			__HAIKU_STD_PRI_PREFIX_32 "o"
173#	define SCNoLEAST32		SCNo32
174#	define SCNoFAST32		SCNo32
175#	define SCNx32 			__HAIKU_STD_PRI_PREFIX_32 "x"
176#	define SCNxLEAST32		SCNx32
177#	define SCNxFAST32		SCNx32
178
179#	define SCNu64			__HAIKU_STD_PRI_PREFIX_64 "u"
180#	define SCNuLEAST64		SCNu64
181#	define SCNuFAST64		SCNu64
182#	define SCNo64			__HAIKU_STD_PRI_PREFIX_64 "o"
183#	define SCNoLEAST64		SCNo64
184#	define SCNoFAST64		SCNo64
185#	define SCNx64			__HAIKU_STD_PRI_PREFIX_64 "x"
186#	define SCNxLEAST64		SCNx64
187#	define SCNxFAST64		SCNx64
188
189#	define SCNuMAX			SCNu64
190#	define SCNuPTR			__HAIKU_PRI_PREFIX_ADDR "u"
191#	define SCNoMAX			SCNo64
192#	define SCNoPTR			__HAIKU_PRI_PREFIX_ADDR "o"
193#	define SCNxMAX			SCNx64
194#	define SCNxPTR			__HAIKU_PRI_PREFIX_ADDR "x"
195#endif /* !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) */
196
197
198#ifdef __cplusplus
199extern "C" {
200#endif
201
202extern intmax_t		imaxabs(intmax_t num);
203extern imaxdiv_t	imaxdiv(intmax_t numer, intmax_t denom);
204
205extern intmax_t		strtoimax(const char *string, char **_end, int base);
206extern uintmax_t	strtoumax(const char *string, char **_end, int base);
207/* extern intmax_t		wcstoimax(const __wchar_t *, __wchar_t **, int); */
208/* extern uintmax_t	wcstoumax(const __wchar_t *, __wchar_t **, int); */
209
210#ifdef __cplusplus
211}
212#endif
213
214
215#endif	/* _INTTYPES_H_ */
216