1 | /* Copyright (c) 2004,2005,2007 Joerg Wunsch
|
2 | Copyright (c) 2005, Carlos Lamas
|
3 | All rights reserved.
|
4 |
|
5 | Redistribution and use in source and binary forms, with or without
|
6 | modification, are permitted provided that the following conditions are met:
|
7 |
|
8 | * Redistributions of source code must retain the above copyright
|
9 | notice, this list of conditions and the following disclaimer.
|
10 |
|
11 | * Redistributions in binary form must reproduce the above copyright
|
12 | notice, this list of conditions and the following disclaimer in
|
13 | the documentation and/or other materials provided with the
|
14 | distribution.
|
15 |
|
16 | * Neither the name of the copyright holders nor the names of
|
17 | contributors may be used to endorse or promote products derived
|
18 | from this software without specific prior written permission.
|
19 |
|
20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
23 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
24 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
25 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
26 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
27 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
28 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
29 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
30 | POSSIBILITY OF SUCH DAMAGE. */
|
31 |
|
32 | /* $Id: inttypes.h,v 1.16.2.1 2008/10/17 21:33:57 arcanum Exp $ */
|
33 |
|
34 | #ifndef __INTTYPES_H_
|
35 | #define __INTTYPES_H_
|
36 |
|
37 | #include <stdint.h>
|
38 |
|
39 | /** \file */
|
40 | /** \defgroup avr_inttypes <inttypes.h>: Integer Type conversions
|
41 | \code #include <inttypes.h> \endcode
|
42 |
|
43 | This header file includes the exact-width integer definitions from
|
44 | <tt><stdint.h></tt>, and extends them with additional facilities
|
45 | provided by the implementation.
|
46 |
|
47 | Currently, the extensions include two additional integer types
|
48 | that could hold a "far" pointer (i.e. a code pointer that can
|
49 | address more than 64 KB), as well as standard names for all printf
|
50 | and scanf formatting options that are supported by the \ref avr_stdio.
|
51 | As the library does not support the full range of conversion
|
52 | specifiers from ISO 9899:1999, only those conversions that are
|
53 | actually implemented will be listed here.
|
54 |
|
55 | The idea behind these conversion macros is that, for each of the
|
56 | types defined by <stdint.h>, a macro will be supplied that portably
|
57 | allows formatting an object of that type in printf() or scanf()
|
58 | operations. Example:
|
59 |
|
60 | \code
|
61 | #include <inttypes.h>
|
62 |
|
63 | uint8_t smallval;
|
64 | int32_t longval;
|
65 | ...
|
66 | printf("The hexadecimal value of smallval is %" PRIx8
|
67 | ", the decimal value of longval is %" PRId32 ".\n",
|
68 | smallval, longval);
|
69 | \endcode
|
70 | */
|
71 |
|
72 | /** \name Far pointers for memory access >64K */
|
73 |
|
74 | /*@{*/
|
75 | /** \ingroup avr_inttypes
|
76 | signed integer type that can hold a pointer > 64 KB */
|
77 | typedef int32_t int_farptr_t;
|
78 |
|
79 | /** \ingroup avr_inttypes
|
80 | unsigned integer type that can hold a pointer > 64 KB */
|
81 | typedef uint32_t uint_farptr_t;
|
82 | /*@}*/
|
83 |
|
84 | #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS)
|
85 |
|
86 |
|
87 | /** \name macros for printf and scanf format specifiers
|
88 |
|
89 | For C++, these are only included if __STDC_LIMIT_MACROS
|
90 | is defined before including <inttypes.h>.
|
91 | */
|
92 |
|
93 | /*@{*/
|
94 | /** \ingroup avr_inttypes
|
95 | decimal printf format for int8_t */
|
96 | #define PRId8 "d"
|
97 | /** \ingroup avr_inttypes
|
98 | decimal printf format for int_least8_t */
|
99 | #define PRIdLEAST8 "d"
|
100 | /** \ingroup avr_inttypes
|
101 | decimal printf format for int_fast8_t */
|
102 | #define PRIdFAST8 "d"
|
103 |
|
104 | /** \ingroup avr_inttypes
|
105 | integer printf format for int8_t */
|
106 | #define PRIi8 "i"
|
107 | /** \ingroup avr_inttypes
|
108 | integer printf format for int_least8_t */
|
109 | #define PRIiLEAST8 "i"
|
110 | /** \ingroup avr_inttypes
|
111 | integer printf format for int_fast8_t */
|
112 | #define PRIiFAST8 "i"
|
113 |
|
114 |
|
115 | /** \ingroup avr_inttypes
|
116 | decimal printf format for int16_t */
|
117 | #define PRId16 "d"
|
118 | /** \ingroup avr_inttypes
|
119 | decimal printf format for int_least16_t */
|
120 | #define PRIdLEAST16 "d"
|
121 | /** \ingroup avr_inttypes
|
122 | decimal printf format for int_fast16_t */
|
123 | #define PRIdFAST16 "d"
|
124 |
|
125 | /** \ingroup avr_inttypes
|
126 | integer printf format for int16_t */
|
127 | #define PRIi16 "i"
|
128 | /** \ingroup avr_inttypes
|
129 | integer printf format for int_least16_t */
|
130 | #define PRIiLEAST16 "i"
|
131 | /** \ingroup avr_inttypes
|
132 | integer printf format for int_fast16_t */
|
133 | #define PRIiFAST16 "i"
|
134 |
|
135 |
|
136 | /** \ingroup avr_inttypes
|
137 | decimal printf format for int32_t */
|
138 | #define PRId32 "ld"
|
139 | /** \ingroup avr_inttypes
|
140 | decimal printf format for int_least32_t */
|
141 | #define PRIdLEAST32 "ld"
|
142 | /** \ingroup avr_inttypes
|
143 | decimal printf format for int_fast32_t */
|
144 | #define PRIdFAST32 "ld"
|
145 |
|
146 | /** \ingroup avr_inttypes
|
147 | integer printf format for int32_t */
|
148 | #define PRIi32 "li"
|
149 | /** \ingroup avr_inttypes
|
150 | integer printf format for int_least32_t */
|
151 | #define PRIiLEAST32 "li"
|
152 | /** \ingroup avr_inttypes
|
153 | integer printf format for int_fast32_t */
|
154 | #define PRIiFAST32 "li"
|
155 |
|
156 |
|
157 | #ifdef __avr_libc_does_not_implement_long_long_in_printf_or_scanf
|
158 |
|
159 | #define PRId64 "lld"
|
160 | #define PRIdLEAST64 "lld"
|
161 | #define PRIdFAST64 "lld"
|
162 |
|
163 | #define PRIi64 "lli"
|
164 | #define PRIiLEAST64 "lli"
|
165 | #define PRIiFAST64 "lli"
|
166 |
|
167 |
|
168 | #define PRIdMAX "lld"
|
169 | #define PRIiMAX "lli"
|
170 |
|
171 | #endif
|
172 |
|
173 | /** \ingroup avr_inttypes
|
174 | decimal printf format for intptr_t */
|
175 | #define PRIdPTR PRId16
|
176 | /** \ingroup avr_inttypes
|
177 | integer printf format for intptr_t */
|
178 | #define PRIiPTR PRIi16
|
179 |
|
180 | /** \ingroup avr_inttypes
|
181 | octal printf format for uint8_t */
|
182 | #define PRIo8 "o"
|
183 | /** \ingroup avr_inttypes
|
184 | octal printf format for uint_least8_t */
|
185 | #define PRIoLEAST8 "o"
|
186 | /** \ingroup avr_inttypes
|
187 | octal printf format for uint_fast8_t */
|
188 | #define PRIoFAST8 "o"
|
189 |
|
190 | /** \ingroup avr_inttypes
|
191 | decimal printf format for uint8_t */
|
192 | #define PRIu8 "u"
|
193 | /** \ingroup avr_inttypes
|
194 | decimal printf format for uint_least8_t */
|
195 | #define PRIuLEAST8 "u"
|
196 | /** \ingroup avr_inttypes
|
197 | decimal printf format for uint_fast8_t */
|
198 | #define PRIuFAST8 "u"
|
199 |
|
200 | /** \ingroup avr_inttypes
|
201 | hexadecimal printf format for uint8_t */
|
202 | #define PRIx8 "x"
|
203 | /** \ingroup avr_inttypes
|
204 | hexadecimal printf format for uint_least8_t */
|
205 | #define PRIxLEAST8 "x"
|
206 | /** \ingroup avr_inttypes
|
207 | hexadecimal printf format for uint_fast8_t */
|
208 | #define PRIxFAST8 "x"
|
209 |
|
210 | /** \ingroup avr_inttypes
|
211 | uppercase hexadecimal printf format for uint8_t */
|
212 | #define PRIX8 "X"
|
213 | /** \ingroup avr_inttypes
|
214 | uppercase hexadecimal printf format for uint_least8_t */
|
215 | #define PRIXLEAST8 "X"
|
216 | /** \ingroup avr_inttypes
|
217 | uppercase hexadecimal printf format for uint_fast8_t */
|
218 | #define PRIXFAST8 "X"
|
219 |
|
220 |
|
221 | /** \ingroup avr_inttypes
|
222 | octal printf format for uint16_t */
|
223 | #define PRIo16 "o"
|
224 | /** \ingroup avr_inttypes
|
225 | octal printf format for uint_least16_t */
|
226 | #define PRIoLEAST16 "o"
|
227 | /** \ingroup avr_inttypes
|
228 | octal printf format for uint_fast16_t */
|
229 | #define PRIoFAST16 "o"
|
230 |
|
231 | /** \ingroup avr_inttypes
|
232 | decimal printf format for uint16_t */
|
233 | #define PRIu16 "u"
|
234 | /** \ingroup avr_inttypes
|
235 | decimal printf format for uint_least16_t */
|
236 | #define PRIuLEAST16 "u"
|
237 | /** \ingroup avr_inttypes
|
238 | decimal printf format for uint_fast16_t */
|
239 | #define PRIuFAST16 "u"
|
240 |
|
241 | /** \ingroup avr_inttypes
|
242 | hexadecimal printf format for uint16_t */
|
243 | #define PRIx16 "x"
|
244 | /** \ingroup avr_inttypes
|
245 | hexadecimal printf format for uint_least16_t */
|
246 | #define PRIxLEAST16 "x"
|
247 | /** \ingroup avr_inttypes
|
248 | hexadecimal printf format for uint_fast16_t */
|
249 | #define PRIxFAST16 "x"
|
250 |
|
251 | /** \ingroup avr_inttypes
|
252 | uppercase hexadecimal printf format for uint16_t */
|
253 | #define PRIX16 "X"
|
254 | /** \ingroup avr_inttypes
|
255 | uppercase hexadecimal printf format for uint_least16_t */
|
256 | #define PRIXLEAST16 "X"
|
257 | /** \ingroup avr_inttypes
|
258 | uppercase hexadecimal printf format for uint_fast16_t */
|
259 | #define PRIXFAST16 "X"
|
260 |
|
261 |
|
262 | /** \ingroup avr_inttypes
|
263 | octal printf format for uint32_t */
|
264 | #define PRIo32 "lo"
|
265 | /** \ingroup avr_inttypes
|
266 | octal printf format for uint_least32_t */
|
267 | #define PRIoLEAST32 "lo"
|
268 | /** \ingroup avr_inttypes
|
269 | octal printf format for uint_fast32_t */
|
270 | #define PRIoFAST32 "lo"
|
271 |
|
272 | /** \ingroup avr_inttypes
|
273 | decimal printf format for uint32_t */
|
274 | #define PRIu32 "lu"
|
275 | /** \ingroup avr_inttypes
|
276 | decimal printf format for uint_least32_t */
|
277 | #define PRIuLEAST32 "lu"
|
278 | /** \ingroup avr_inttypes
|
279 | decimal printf format for uint_fast32_t */
|
280 | #define PRIuFAST32 "lu"
|
281 |
|
282 | /** \ingroup avr_inttypes
|
283 | hexadecimal printf format for uint32_t */
|
284 | #define PRIx32 "lx"
|
285 | /** \ingroup avr_inttypes
|
286 | hexadecimal printf format for uint_least32_t */
|
287 | #define PRIxLEAST32 "lx"
|
288 | /** \ingroup avr_inttypes
|
289 | hexadecimal printf format for uint_fast32_t */
|
290 | #define PRIxFAST32 "lx"
|
291 |
|
292 | /** \ingroup avr_inttypes
|
293 | uppercase hexadecimal printf format for uint32_t */
|
294 | #define PRIX32 "lX"
|
295 | /** \ingroup avr_inttypes
|
296 | uppercase hexadecimal printf format for uint_least32_t */
|
297 | #define PRIXLEAST32 "lX"
|
298 | /** \ingroup avr_inttypes
|
299 | uppercase hexadecimal printf format for uint_fast32_t */
|
300 | #define PRIXFAST32 "lX"
|
301 |
|
302 |
|
303 | #ifdef __avr_libc_does_not_implement_long_long_in_printf_or_scanf
|
304 |
|
305 | #define PRIo64 "llo"
|
306 | #define PRIoLEAST64 "llo"
|
307 | #define PRIoFAST64 "llo"
|
308 |
|
309 | #define PRIu64 "llu"
|
310 | #define PRIuLEAST64 "llu"
|
311 | #define PRIuFAST64 "llu"
|
312 |
|
313 | #define PRIx64 "llx"
|
314 | #define PRIxLEAST64 "llx"
|
315 | #define PRIxFAST64 "llx"
|
316 |
|
317 | #define PRIX64 "llX"
|
318 | #define PRIXLEAST64 "llX"
|
319 | #define PRIXFAST64 "llX"
|
320 |
|
321 | #define PRIoMAX "llo"
|
322 | #define PRIuMAX "llu"
|
323 | #define PRIxMAX "llx"
|
324 | #define PRIXMAX "llX"
|
325 |
|
326 | #endif
|
327 |
|
328 | /** \ingroup avr_inttypes
|
329 | octal printf format for uintptr_t */
|
330 | #define PRIoPTR PRIo16
|
331 | /** \ingroup avr_inttypes
|
332 | decimal printf format for uintptr_t */
|
333 | #define PRIuPTR PRIu16
|
334 | /** \ingroup avr_inttypes
|
335 | hexadecimal printf format for uintptr_t */
|
336 | #define PRIxPTR PRIx16
|
337 | /** \ingroup avr_inttypes
|
338 | uppercase hexadecimal printf format for uintptr_t */
|
339 | #define PRIXPTR PRIX16
|
340 |
|
341 |
|
342 | #ifdef __avr_libc_does_not_implement_hh_in_scanf
|
343 |
|
344 | #define SCNd8 "hhd"
|
345 | #define SCNdLEAST8 "hhd"
|
346 | #define SCNdFAST8 "hhd"
|
347 |
|
348 | #define SCNi8 "hhi"
|
349 | #define SCNiLEAST8 "hhi"
|
350 | #define SCNiFAST8 "hhi"
|
351 |
|
352 | #endif
|
353 |
|
354 |
|
355 | /** \ingroup avr_inttypes
|
356 | decimal scanf format for int16_t */
|
357 | #define SCNd16 "d"
|
358 | /** \ingroup avr_inttypes
|
359 | decimal scanf format for int_least16_t */
|
360 | #define SCNdLEAST16 "d"
|
361 | /** \ingroup avr_inttypes
|
362 | decimal scanf format for int_fast16_t */
|
363 | #define SCNdFAST16 "d"
|
364 |
|
365 | /** \ingroup avr_inttypes
|
366 | generic-integer scanf format for int16_t */
|
367 | #define SCNi16 "i"
|
368 | /** \ingroup avr_inttypes
|
369 | generic-integer scanf format for int_least16_t */
|
370 | #define SCNiLEAST16 "i"
|
371 | /** \ingroup avr_inttypes
|
372 | generic-integer scanf format for int_fast16_t */
|
373 | #define SCNiFAST16 "i"
|
374 |
|
375 |
|
376 | /** \ingroup avr_inttypes
|
377 | decimal scanf format for int32_t */
|
378 | #define SCNd32 "ld"
|
379 | /** \ingroup avr_inttypes
|
380 | decimal scanf format for int_least32_t */
|
381 | #define SCNdLEAST32 "ld"
|
382 | /** \ingroup avr_inttypes
|
383 | decimal scanf format for int_fast32_t */
|
384 | #define SCNdFAST32 "ld"
|
385 |
|
386 | /** \ingroup avr_inttypes
|
387 | generic-integer scanf format for int32_t */
|
388 | #define SCNi32 "li"
|
389 | /** \ingroup avr_inttypes
|
390 | generic-integer scanf format for int_least32_t */
|
391 | #define SCNiLEAST32 "li"
|
392 | /** \ingroup avr_inttypes
|
393 | generic-integer scanf format for int_fast32_t */
|
394 | #define SCNiFAST32 "li"
|
395 |
|
396 |
|
397 | #ifdef __avr_libc_does_not_implement_long_long_in_printf_or_scanf
|
398 |
|
399 | #define SCNd64 "lld"
|
400 | #define SCNdLEAST64 "lld"
|
401 | #define SCNdFAST64 "lld"
|
402 |
|
403 | #define SCNi64 "lli"
|
404 | #define SCNiLEAST64 "lli"
|
405 | #define SCNiFAST64 "lli"
|
406 |
|
407 | #define SCNdMAX "lld"
|
408 | #define SCNiMAX "lli"
|
409 |
|
410 | #endif
|
411 |
|
412 | /** \ingroup avr_inttypes
|
413 | decimal scanf format for intptr_t */
|
414 | #define SCNdPTR SCNd16
|
415 | /** \ingroup avr_inttypes
|
416 | generic-integer scanf format for intptr_t */
|
417 | #define SCNiPTR SCNi16
|
418 |
|
419 | #ifdef __avr_libc_does_not_implement_hh_in_scanf
|
420 |
|
421 | #define SCNo8 "hho"
|
422 | #define SCNoLEAST8 "hho"
|
423 | #define SCNoFAST8 "hho"
|
424 |
|
425 | #define SCNu8 "hhu"
|
426 | #define SCNuLEAST8 "hhu"
|
427 | #define SCNuFAST8 "hhu"
|
428 |
|
429 | #define SCNx8 "hhx"
|
430 | #define SCNxLEAST8 "hhx"
|
431 | #define SCNxFAST8 "hhx"
|
432 |
|
433 | #endif
|
434 |
|
435 | /** \ingroup avr_inttypes
|
436 | octal scanf format for uint16_t */
|
437 | #define SCNo16 "o"
|
438 | /** \ingroup avr_inttypes
|
439 | octal scanf format for uint_least16_t */
|
440 | #define SCNoLEAST16 "o"
|
441 | /** \ingroup avr_inttypes
|
442 | octal scanf format for uint_fast16_t */
|
443 | #define SCNoFAST16 "o"
|
444 |
|
445 | /** \ingroup avr_inttypes
|
446 | decimal scanf format for uint16_t */
|
447 | #define SCNu16 "u"
|
448 | /** \ingroup avr_inttypes
|
449 | decimal scanf format for uint_least16_t */
|
450 | #define SCNuLEAST16 "u"
|
451 | /** \ingroup avr_inttypes
|
452 | decimal scanf format for uint_fast16_t */
|
453 | #define SCNuFAST16 "u"
|
454 |
|
455 | /** \ingroup avr_inttypes
|
456 | hexadecimal scanf format for uint16_t */
|
457 | #define SCNx16 "x"
|
458 | /** \ingroup avr_inttypes
|
459 | hexadecimal scanf format for uint_least16_t */
|
460 | #define SCNxLEAST16 "x"
|
461 | /** \ingroup avr_inttypes
|
462 | hexadecimal scanf format for uint_fast16_t */
|
463 | #define SCNxFAST16 "x"
|
464 |
|
465 |
|
466 | /** \ingroup avr_inttypes
|
467 | octal scanf format for uint32_t */
|
468 | #define SCNo32 "lo"
|
469 | /** \ingroup avr_inttypes
|
470 | octal scanf format for uint_least32_t */
|
471 | #define SCNoLEAST32 "lo"
|
472 | /** \ingroup avr_inttypes
|
473 | octal scanf format for uint_fast32_t */
|
474 | #define SCNoFAST32 "lo"
|
475 |
|
476 | /** \ingroup avr_inttypes
|
477 | decimal scanf format for uint32_t */
|
478 | #define SCNu32 "lu"
|
479 | /** \ingroup avr_inttypes
|
480 | decimal scanf format for uint_least32_t */
|
481 | #define SCNuLEAST32 "lu"
|
482 | /** \ingroup avr_inttypes
|
483 | decimal scanf format for uint_fast32_t */
|
484 | #define SCNuFAST32 "lu"
|
485 |
|
486 | /** \ingroup avr_inttypes
|
487 | hexadecimal scanf format for uint32_t */
|
488 | #define SCNx32 "lx"
|
489 | /** \ingroup avr_inttypes
|
490 | hexadecimal scanf format for uint_least32_t */
|
491 | #define SCNxLEAST32 "lx"
|
492 | /** \ingroup avr_inttypes
|
493 | hexadecimal scanf format for uint_fast32_t */
|
494 | #define SCNxFAST32 "lx"
|
495 |
|
496 |
|
497 | #ifdef __avr_libc_does_not_implement_long_long_in_printf_or_scanf
|
498 |
|
499 | #define SCNo64 "llo"
|
500 | #define SCNoLEAST64 "llo"
|
501 | #define SCNoFAST64 "llo"
|
502 |
|
503 | #define SCNu64 "llu"
|
504 | #define SCNuLEAST64 "llu"
|
505 | #define SCNuFAST64 "llu"
|
506 |
|
507 | #define SCNx64 "llx"
|
508 | #define SCNxLEAST64 "llx"
|
509 | #define SCNxFAST64 "llx"
|
510 |
|
511 | #define SCNoMAX "llo"
|
512 | #define SCNuMAX "llu"
|
513 | #define SCNxMAX "llx"
|
514 |
|
515 | #endif
|
516 |
|
517 | /** \ingroup avr_inttypes
|
518 | octal scanf format for uintptr_t */
|
519 | #define SCNoPTR SCNo16
|
520 | /** \ingroup avr_inttypes
|
521 | decimal scanf format for uintptr_t */
|
522 | #define SCNuPTR SCNu16
|
523 | /** \ingroup avr_inttypes
|
524 | hexadecimal scanf format for uintptr_t */
|
525 | #define SCNxPTR SCNx16
|
526 |
|
527 | /*@}*/
|
528 |
|
529 |
|
530 | #endif /* !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) */
|
531 |
|
532 |
|
533 | #endif /* __INTTYPES_H_ */
|