| /* Copyright (c) 2004,2005,2007 Joerg Wunsch |
| Copyright (c) 2005, Carlos Lamas |
| All rights reserved. |
| |
| Redistribution and use in source and binary forms, with or without |
| modification, are permitted provided that the following conditions are met: |
| |
| * Redistributions of source code must retain the above copyright |
| notice, this list of conditions and the following disclaimer. |
| |
| * Redistributions in binary form must reproduce the above copyright |
| notice, this list of conditions and the following disclaimer in |
| the documentation and/or other materials provided with the |
| distribution. |
| |
| * Neither the name of the copyright holders nor the names of |
| contributors may be used to endorse or promote products derived |
| from this software without specific prior written permission. |
| |
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
| LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| POSSIBILITY OF SUCH DAMAGE. */ |
| |
| /* $Id: inttypes.h 1766 2008-10-17 21:33:57Z arcanum $ */ |
| |
| #ifndef __INTTYPES_H_ |
| #define __INTTYPES_H_ |
| |
| #include <stdint.h> |
| |
| /** \file */ |
| /** \defgroup avr_inttypes <inttypes.h>: Integer Type conversions |
| \code #include <inttypes.h> \endcode |
| |
| This header file includes the exact-width integer definitions from |
| <tt><stdint.h></tt>, and extends them with additional facilities |
| provided by the implementation. |
| |
| Currently, the extensions include two additional integer types |
| that could hold a "far" pointer (i.e. a code pointer that can |
| address more than 64 KB), as well as standard names for all printf |
| and scanf formatting options that are supported by the \ref avr_stdio. |
| As the library does not support the full range of conversion |
| specifiers from ISO 9899:1999, only those conversions that are |
| actually implemented will be listed here. |
| |
| The idea behind these conversion macros is that, for each of the |
| types defined by <stdint.h>, a macro will be supplied that portably |
| allows formatting an object of that type in printf() or scanf() |
| operations. Example: |
| |
| \code |
| #include <inttypes.h> |
| |
| uint8_t smallval; |
| int32_t longval; |
| ... |
| printf("The hexadecimal value of smallval is %" PRIx8 |
| ", the decimal value of longval is %" PRId32 ".\n", |
| smallval, longval); |
| \endcode |
| */ |
| |
| /** \name Far pointers for memory access >64K */ |
| |
| /*@{*/ |
| /** \ingroup avr_inttypes |
| signed integer type that can hold a pointer > 64 KB */ |
| typedef int32_t int_farptr_t; |
| |
| /** \ingroup avr_inttypes |
| unsigned integer type that can hold a pointer > 64 KB */ |
| typedef uint32_t uint_farptr_t; |
| /*@}*/ |
| |
| #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) |
| |
| |
| /** \name macros for printf and scanf format specifiers |
| |
| For C++, these are only included if __STDC_LIMIT_MACROS |
| is defined before including <inttypes.h>. |
| */ |
| |
| /*@{*/ |
| /** \ingroup avr_inttypes |
| decimal printf format for int8_t */ |
| #define PRId8 "d" |
| /** \ingroup avr_inttypes |
| decimal printf format for int_least8_t */ |
| #define PRIdLEAST8 "d" |
| /** \ingroup avr_inttypes |
| decimal printf format for int_fast8_t */ |
| #define PRIdFAST8 "d" |
| |
| /** \ingroup avr_inttypes |
| integer printf format for int8_t */ |
| #define PRIi8 "i" |
| /** \ingroup avr_inttypes |
| integer printf format for int_least8_t */ |
| #define PRIiLEAST8 "i" |
| /** \ingroup avr_inttypes |
| integer printf format for int_fast8_t */ |
| #define PRIiFAST8 "i" |
| |
| |
| /** \ingroup avr_inttypes |
| decimal printf format for int16_t */ |
| #define PRId16 "d" |
| /** \ingroup avr_inttypes |
| decimal printf format for int_least16_t */ |
| #define PRIdLEAST16 "d" |
| /** \ingroup avr_inttypes |
| decimal printf format for int_fast16_t */ |
| #define PRIdFAST16 "d" |
| |
| /** \ingroup avr_inttypes |
| integer printf format for int16_t */ |
| #define PRIi16 "i" |
| /** \ingroup avr_inttypes |
| integer printf format for int_least16_t */ |
| #define PRIiLEAST16 "i" |
| /** \ingroup avr_inttypes |
| integer printf format for int_fast16_t */ |
| #define PRIiFAST16 "i" |
| |
| |
| /** \ingroup avr_inttypes |
| decimal printf format for int32_t */ |
| #define PRId32 "ld" |
| /** \ingroup avr_inttypes |
| decimal printf format for int_least32_t */ |
| #define PRIdLEAST32 "ld" |
| /** \ingroup avr_inttypes |
| decimal printf format for int_fast32_t */ |
| #define PRIdFAST32 "ld" |
| |
| /** \ingroup avr_inttypes |
| integer printf format for int32_t */ |
| #define PRIi32 "li" |
| /** \ingroup avr_inttypes |
| integer printf format for int_least32_t */ |
| #define PRIiLEAST32 "li" |
| /** \ingroup avr_inttypes |
| integer printf format for int_fast32_t */ |
| #define PRIiFAST32 "li" |
| |
| |
| #ifdef __avr_libc_does_not_implement_long_long_in_printf_or_scanf |
| |
| #define PRId64 "lld" |
| #define PRIdLEAST64 "lld" |
| #define PRIdFAST64 "lld" |
| |
| #define PRIi64 "lli" |
| #define PRIiLEAST64 "lli" |
| #define PRIiFAST64 "lli" |
| |
| |
| #define PRIdMAX "lld" |
| #define PRIiMAX "lli" |
| |
| #endif |
| |
| /** \ingroup avr_inttypes |
| decimal printf format for intptr_t */ |
| #define PRIdPTR PRId16 |
| /** \ingroup avr_inttypes |
| integer printf format for intptr_t */ |
| #define PRIiPTR PRIi16 |
| |
| /** \ingroup avr_inttypes |
| octal printf format for uint8_t */ |
| #define PRIo8 "o" |
| /** \ingroup avr_inttypes |
| octal printf format for uint_least8_t */ |
| #define PRIoLEAST8 "o" |
| /** \ingroup avr_inttypes |
| octal printf format for uint_fast8_t */ |
| #define PRIoFAST8 "o" |
| |
| /** \ingroup avr_inttypes |
| decimal printf format for uint8_t */ |
| #define PRIu8 "u" |
| /** \ingroup avr_inttypes |
| decimal printf format for uint_least8_t */ |
| #define PRIuLEAST8 "u" |
| /** \ingroup avr_inttypes |
| decimal printf format for uint_fast8_t */ |
| #define PRIuFAST8 "u" |
| |
| /** \ingroup avr_inttypes |
| hexadecimal printf format for uint8_t */ |
| #define PRIx8 "x" |
| /** \ingroup avr_inttypes |
| hexadecimal printf format for uint_least8_t */ |
| #define PRIxLEAST8 "x" |
| /** \ingroup avr_inttypes |
| hexadecimal printf format for uint_fast8_t */ |
| #define PRIxFAST8 "x" |
| |
| /** \ingroup avr_inttypes |
| uppercase hexadecimal printf format for uint8_t */ |
| #define PRIX8 "X" |
| /** \ingroup avr_inttypes |
| uppercase hexadecimal printf format for uint_least8_t */ |
| #define PRIXLEAST8 "X" |
| /** \ingroup avr_inttypes |
| uppercase hexadecimal printf format for uint_fast8_t */ |
| #define PRIXFAST8 "X" |
| |
| |
| /** \ingroup avr_inttypes |
| octal printf format for uint16_t */ |
| #define PRIo16 "o" |
| /** \ingroup avr_inttypes |
| octal printf format for uint_least16_t */ |
| #define PRIoLEAST16 "o" |
| /** \ingroup avr_inttypes |
| octal printf format for uint_fast16_t */ |
| #define PRIoFAST16 "o" |
| |
| /** \ingroup avr_inttypes |
| decimal printf format for uint16_t */ |
| #define PRIu16 "u" |
| /** \ingroup avr_inttypes |
| decimal printf format for uint_least16_t */ |
| #define PRIuLEAST16 "u" |
| /** \ingroup avr_inttypes |
| decimal printf format for uint_fast16_t */ |
| #define PRIuFAST16 "u" |
| |
| /** \ingroup avr_inttypes |
| hexadecimal printf format for uint16_t */ |
| #define PRIx16 "x" |
| /** \ingroup avr_inttypes |
| hexadecimal printf format for uint_least16_t */ |
| #define PRIxLEAST16 "x" |
| /** \ingroup avr_inttypes |
| hexadecimal printf format for uint_fast16_t */ |
| #define PRIxFAST16 "x" |
| |
| /** \ingroup avr_inttypes |
| uppercase hexadecimal printf format for uint16_t */ |
| #define PRIX16 "X" |
| /** \ingroup avr_inttypes |
| uppercase hexadecimal printf format for uint_least16_t */ |
| #define PRIXLEAST16 "X" |
| /** \ingroup avr_inttypes |
| uppercase hexadecimal printf format for uint_fast16_t */ |
| #define PRIXFAST16 "X" |
| |
| |
| /** \ingroup avr_inttypes |
| octal printf format for uint32_t */ |
| #define PRIo32 "lo" |
| /** \ingroup avr_inttypes |
| octal printf format for uint_least32_t */ |
| #define PRIoLEAST32 "lo" |
| /** \ingroup avr_inttypes |
| octal printf format for uint_fast32_t */ |
| #define PRIoFAST32 "lo" |
| |
| /** \ingroup avr_inttypes |
| decimal printf format for uint32_t */ |
| #define PRIu32 "lu" |
| /** \ingroup avr_inttypes |
| decimal printf format for uint_least32_t */ |
| #define PRIuLEAST32 "lu" |
| /** \ingroup avr_inttypes |
| decimal printf format for uint_fast32_t */ |
| #define PRIuFAST32 "lu" |
| |
| /** \ingroup avr_inttypes |
| hexadecimal printf format for uint32_t */ |
| #define PRIx32 "lx" |
| /** \ingroup avr_inttypes |
| hexadecimal printf format for uint_least32_t */ |
| #define PRIxLEAST32 "lx" |
| /** \ingroup avr_inttypes |
| hexadecimal printf format for uint_fast32_t */ |
| #define PRIxFAST32 "lx" |
| |
| /** \ingroup avr_inttypes |
| uppercase hexadecimal printf format for uint32_t */ |
| #define PRIX32 "lX" |
| /** \ingroup avr_inttypes |
| uppercase hexadecimal printf format for uint_least32_t */ |
| #define PRIXLEAST32 "lX" |
| /** \ingroup avr_inttypes |
| uppercase hexadecimal printf format for uint_fast32_t */ |
| #define PRIXFAST32 "lX" |
| |
| |
| #ifdef __avr_libc_does_not_implement_long_long_in_printf_or_scanf |
| |
| #define PRIo64 "llo" |
| #define PRIoLEAST64 "llo" |
| #define PRIoFAST64 "llo" |
| |
| #define PRIu64 "llu" |
| #define PRIuLEAST64 "llu" |
| #define PRIuFAST64 "llu" |
| |
| #define PRIx64 "llx" |
| #define PRIxLEAST64 "llx" |
| #define PRIxFAST64 "llx" |
| |
| #define PRIX64 "llX" |
| #define PRIXLEAST64 "llX" |
| #define PRIXFAST64 "llX" |
| |
| #define PRIoMAX "llo" |
| #define PRIuMAX "llu" |
| #define PRIxMAX "llx" |
| #define PRIXMAX "llX" |
| |
| #endif |
| |
| /** \ingroup avr_inttypes |
| octal printf format for uintptr_t */ |
| #define PRIoPTR PRIo16 |
| /** \ingroup avr_inttypes |
| decimal printf format for uintptr_t */ |
| #define PRIuPTR PRIu16 |
| /** \ingroup avr_inttypes |
| hexadecimal printf format for uintptr_t */ |
| #define PRIxPTR PRIx16 |
| /** \ingroup avr_inttypes |
| uppercase hexadecimal printf format for uintptr_t */ |
| #define PRIXPTR PRIX16 |
| |
| |
| #ifdef __avr_libc_does_not_implement_hh_in_scanf |
| |
| #define SCNd8 "hhd" |
| #define SCNdLEAST8 "hhd" |
| #define SCNdFAST8 "hhd" |
| |
| #define SCNi8 "hhi" |
| #define SCNiLEAST8 "hhi" |
| #define SCNiFAST8 "hhi" |
| |
| #endif |
| |
| |
| /** \ingroup avr_inttypes |
| decimal scanf format for int16_t */ |
| #define SCNd16 "d" |
| /** \ingroup avr_inttypes |
| decimal scanf format for int_least16_t */ |
| #define SCNdLEAST16 "d" |
| /** \ingroup avr_inttypes |
| decimal scanf format for int_fast16_t */ |
| #define SCNdFAST16 "d" |
| |
| /** \ingroup avr_inttypes |
| generic-integer scanf format for int16_t */ |
| #define SCNi16 "i" |
| /** \ingroup avr_inttypes |
| generic-integer scanf format for int_least16_t */ |
| #define SCNiLEAST16 "i" |
| /** \ingroup avr_inttypes |
| generic-integer scanf format for int_fast16_t */ |
| #define SCNiFAST16 "i" |
| |
| |
| /** \ingroup avr_inttypes |
| decimal scanf format for int32_t */ |
| #define SCNd32 "ld" |
| /** \ingroup avr_inttypes |
| decimal scanf format for int_least32_t */ |
| #define SCNdLEAST32 "ld" |
| /** \ingroup avr_inttypes |
| decimal scanf format for int_fast32_t */ |
| #define SCNdFAST32 "ld" |
| |
| /** \ingroup avr_inttypes |
| generic-integer scanf format for int32_t */ |
| #define SCNi32 "li" |
| /** \ingroup avr_inttypes |
| generic-integer scanf format for int_least32_t */ |
| #define SCNiLEAST32 "li" |
| /** \ingroup avr_inttypes |
| generic-integer scanf format for int_fast32_t */ |
| #define SCNiFAST32 "li" |
| |
| |
| #ifdef __avr_libc_does_not_implement_long_long_in_printf_or_scanf |
| |
| #define SCNd64 "lld" |
| #define SCNdLEAST64 "lld" |
| #define SCNdFAST64 "lld" |
| |
| #define SCNi64 "lli" |
| #define SCNiLEAST64 "lli" |
| #define SCNiFAST64 "lli" |
| |
| #define SCNdMAX "lld" |
| #define SCNiMAX "lli" |
| |
| #endif |
| |
| /** \ingroup avr_inttypes |
| decimal scanf format for intptr_t */ |
| #define SCNdPTR SCNd16 |
| /** \ingroup avr_inttypes |
| generic-integer scanf format for intptr_t */ |
| #define SCNiPTR SCNi16 |
| |
| #ifdef __avr_libc_does_not_implement_hh_in_scanf |
| |
| #define SCNo8 "hho" |
| #define SCNoLEAST8 "hho" |
| #define SCNoFAST8 "hho" |
| |
| #define SCNu8 "hhu" |
| #define SCNuLEAST8 "hhu" |
| #define SCNuFAST8 "hhu" |
| |
| #define SCNx8 "hhx" |
| #define SCNxLEAST8 "hhx" |
| #define SCNxFAST8 "hhx" |
| |
| #endif |
| |
| /** \ingroup avr_inttypes |
| octal scanf format for uint16_t */ |
| #define SCNo16 "o" |
| /** \ingroup avr_inttypes |
| octal scanf format for uint_least16_t */ |
| #define SCNoLEAST16 "o" |
| /** \ingroup avr_inttypes |
| octal scanf format for uint_fast16_t */ |
| #define SCNoFAST16 "o" |
| |
| /** \ingroup avr_inttypes |
| decimal scanf format for uint16_t */ |
| #define SCNu16 "u" |
| /** \ingroup avr_inttypes |
| decimal scanf format for uint_least16_t */ |
| #define SCNuLEAST16 "u" |
| /** \ingroup avr_inttypes |
| decimal scanf format for uint_fast16_t */ |
| #define SCNuFAST16 "u" |
| |
| /** \ingroup avr_inttypes |
| hexadecimal scanf format for uint16_t */ |
| #define SCNx16 "x" |
| /** \ingroup avr_inttypes |
| hexadecimal scanf format for uint_least16_t */ |
| #define SCNxLEAST16 "x" |
| /** \ingroup avr_inttypes |
| hexadecimal scanf format for uint_fast16_t */ |
| #define SCNxFAST16 "x" |
| |
| |
| /** \ingroup avr_inttypes |
| octal scanf format for uint32_t */ |
| #define SCNo32 "lo" |
| /** \ingroup avr_inttypes |
| octal scanf format for uint_least32_t */ |
| #define SCNoLEAST32 "lo" |
| /** \ingroup avr_inttypes |
| octal scanf format for uint_fast32_t */ |
| #define SCNoFAST32 "lo" |
| |
| /** \ingroup avr_inttypes |
| decimal scanf format for uint32_t */ |
| #define SCNu32 "lu" |
| /** \ingroup avr_inttypes |
| decimal scanf format for uint_least32_t */ |
| #define SCNuLEAST32 "lu" |
| /** \ingroup avr_inttypes |
| decimal scanf format for uint_fast32_t */ |
| #define SCNuFAST32 "lu" |
| |
| /** \ingroup avr_inttypes |
| hexadecimal scanf format for uint32_t */ |
| #define SCNx32 "lx" |
| /** \ingroup avr_inttypes |
| hexadecimal scanf format for uint_least32_t */ |
| #define SCNxLEAST32 "lx" |
| /** \ingroup avr_inttypes |
| hexadecimal scanf format for uint_fast32_t */ |
| #define SCNxFAST32 "lx" |
| |
| |
| #ifdef __avr_libc_does_not_implement_long_long_in_printf_or_scanf |
| |
| #define SCNo64 "llo" |
| #define SCNoLEAST64 "llo" |
| #define SCNoFAST64 "llo" |
| |
| #define SCNu64 "llu" |
| #define SCNuLEAST64 "llu" |
| #define SCNuFAST64 "llu" |
| |
| #define SCNx64 "llx" |
| #define SCNxLEAST64 "llx" |
| #define SCNxFAST64 "llx" |
| |
| #define SCNoMAX "llo" |
| #define SCNuMAX "llu" |
| #define SCNxMAX "llx" |
| |
| #endif |
| |
| /** \ingroup avr_inttypes |
| octal scanf format for uintptr_t */ |
| #define SCNoPTR SCNo16 |
| /** \ingroup avr_inttypes |
| decimal scanf format for uintptr_t */ |
| #define SCNuPTR SCNu16 |
| /** \ingroup avr_inttypes |
| hexadecimal scanf format for uintptr_t */ |
| #define SCNxPTR SCNx16 |
| |
| /*@}*/ |
| |
| |
| #endif /* !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) */ |
| |
| |
| #endif /* __INTTYPES_H_ */ |