From 931c0d1bc5d1a429f299525474e9beebacb1bede Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Sat, 23 Mar 2013 02:44:31 +0100 Subject: [PATCH] Add inttypes.h format and scan macros. --- libc/include/__/stdint.h | 263 +++++++++++++++++++++++++++++++++++++++ libc/include/inttypes.h | 179 +++++++++++++++++++++++++- 2 files changed, 438 insertions(+), 4 deletions(-) diff --git a/libc/include/__/stdint.h b/libc/include/__/stdint.h index d62a1f07..80c2dbe3 100644 --- a/libc/include/__/stdint.h +++ b/libc/include/__/stdint.h @@ -83,6 +83,30 @@ typedef long long int __int64_t; #define __INT32_MAX (2147483647) #define __INT64_MAX (__INT64_C(9223372036854775807)) +#define __PRId8 "d" +#define __PRIi8 "i" +#define __SCNd8 "hhd" +#define __SCNi8 "hhi" +#define __PRId16 "d" +#define __PRIi16 "i" +#define __SCNd16 "hd" +#define __SCNi16 "hi" +#define __PRId32 "d" +#define __PRIi32 "i" +#define __SCNd32 "d" +#define __SCNi32 "i" +#if __WORDSIZE == 64 +#define __PRId64 "ld" +#define __PRIi64 "li" +#define __SCNd64 "ld" +#define __SCNi64 "li" +#else +#define __PRId64 "lld" +#define __PRIi64 "lli" +#define __SCNd64 "lld" +#define __SCNi64 "lli" +#endif + /* Define basic unsigned types. */ typedef unsigned char __uint8_t; typedef unsigned short int __uint16_t; @@ -98,6 +122,45 @@ typedef unsigned long long int __uint64_t; #define __UINT32_MAX (4294967295U) #define __UINT64_MAX (__UINT64_C(18446744073709551615)) +#define __PRIo8 "o" +#define __PRIu8 "u" +#define __PRIx8 "x" +#define __PRIX8 "X" +#define __SCNo8 "hho" +#define __SCNu8 "hhu" +#define __SCNx8 "hhx" +#define __PRIo16 "o" +#define __PRIu16 "u" +#define __PRIx16 "x" +#define __PRIX16 "X" +#define __SCNo16 "ho" +#define __SCNu16 "hu" +#define __SCNx16 "hx" +#define __PRIo32 "o" +#define __PRIu32 "u" +#define __PRIx32 "x" +#define __PRIX32 "X" +#define __SCNo32 "o" +#define __SCNu32 "u" +#define __SCNx32 "x" +#if __WORDSIZE == 64 +#define __PRIo64 "lo" +#define __PRIu64 "lu" +#define __PRIx64 "lx" +#define __PRIX64 "lX" +#define __SCNo64 "lo" +#define __SCNu64 "lu" +#define __SCNx64 "lx" +#else +#define __PRIo64 "llo" +#define __PRIu64 "llu" +#define __PRIx64 "llx" +#define __PRIX64 "llX" +#define __SCNo64 "llo" +#define __SCNu64 "llu" +#define __SCNx64 "llx" +#endif + /* Define small signed types. */ typedef signed char __int_least8_t; typedef short int __int_least16_t; @@ -118,6 +181,30 @@ typedef long long int __int_least64_t; #define __INT_LEAST32_MAX (2147483647) #define __INT_LEAST64_MAX (__INT64_C(9223372036854775807)) +#define __PRIdLEAST8 "d" +#define __PRIiLEAST8 "i" +#define __SCNdLEAST8 "hhd" +#define __SCNiLEAST8 "hhi" +#define __PRIdLEAST16 "d" +#define __PRIiLEAST16 "i" +#define __SCNdLEAST16 "hd" +#define __SCNiLEAST16 "hi" +#define __PRIdLEAST32 "d" +#define __PRIiLEAST32 "i" +#define __SCNdLEAST32 "d" +#define __SCNiLEAST32 "i" +#if __WORDSIZE == 64 +#define __PRIdLEAST64 "ld" +#define __PRIiLEAST64 "li" +#define __SCNdLEAST64 "ld" +#define __SCNiLEAST64 "li" +#else +#define __PRIdLEAST64 "lld" +#define __PRIiLEAST64 "lli" +#define __SCNdLEAST64 "lld" +#define __SCNiLEAST64 "lli" +#endif + /* Define small unsigned types. */ typedef unsigned char __uint_least8_t; typedef unsigned short int __uint_least16_t; @@ -133,6 +220,45 @@ typedef unsigned long long int __uint_least64_t; #define __UINT_LEAST32_MAX (4294967295U) #define __UINT_LEAST64_MAX (__UINT64_C(18446744073709551615)) +#define __PRIoLEAST8 "o" +#define __PRIuLEAST8 "u" +#define __PRIxLEAST8 "x" +#define __PRIXLEAST8 "X" +#define __SCNoLEAST8 "hho" +#define __SCNuLEAST8 "hhu" +#define __SCNxLEAST8 "hhx" +#define __PRIoLEAST16 "o" +#define __PRIuLEAST16 "u" +#define __PRIxLEAST16 "x" +#define __PRIXLEAST16 "X" +#define __SCNoLEAST16 "ho" +#define __SCNuLEAST16 "hu" +#define __SCNxLEAST16 "hx" +#define __PRIoLEAST32 "o" +#define __PRIuLEAST32 "u" +#define __PRIxLEAST32 "x" +#define __PRIXLEAST32 "X" +#define __SCNoLEAST32 "o" +#define __SCNuLEAST32 "u" +#define __SCNxLEAST32 "x" +#if __WORDSIZE == 64 +#define __PRIoLEAST64 "lo" +#define __PRIuLEAST64 "lu" +#define __PRIxLEAST64 "lx" +#define __PRIXLEAST64 "lX" +#define __SCNoLEAST64 "lo" +#define __SCNuLEAST64 "lu" +#define __SCNxLEAST64 "lx" +#else +#define __PRIoLEAST64 "llo" +#define __PRIuLEAST64 "llu" +#define __PRIxLEAST64 "llx" +#define __PRIXLEAST64 "llX" +#define __SCNoLEAST64 "llo" +#define __SCNuLEAST64 "llu" +#define __SCNxLEAST64 "llx" +#endif + /* Define fast signed types. */ typedef signed char __int_fast8_t; #if __WORDSIZE == 64 @@ -165,6 +291,38 @@ typedef long long int __int_fast64_t; #endif #define __INT_FAST64_MAX (__INT64_C(9223372036854775807)) +#define __PRIdFAST8 "d" +#define __PRIiFAST8 "i" +#define __SCNdFAST8 "hhd" +#define __SCNiFAST8 "hhi" +#if __WORDSIZE == 64 +#define __PRIdFAST16 "ld" +#define __PRIiFAST16 "li" +#define __SCNdFAST16 "ld" +#define __SCNiFAST16 "li" +#define __PRIdFAST32 "ld" +#define __PRIiFAST32 "li" +#define __SCNdFAST32 "ld" +#define __SCNiFAST32 "li" +#define __PRIdFAST64 "ld" +#define __PRIiFAST64 "li" +#define __SCNdFAST64 "ld" +#define __SCNiFAST64 "li" +#else +#define __PRIdFAST16 "d" +#define __PRIiFAST16 "i" +#define __SCNdFAST16 "d" +#define __SCNiFAST16 "i" +#define __PRIdFAST32 "i" +#define __PRIiFAST32 "d" +#define __SCNdFAST32 "d" +#define __SCNiFAST32 "i" +#define __PRIdFAST64 "lld" +#define __PRIiFAST64 "lli" +#define __SCNdFAST64 "lld" +#define __SCNiFAST64 "lli" +#endif + /* Define fast unsigned types. */ typedef unsigned char __uint_fast8_t; #if __WORDSIZE == 64 @@ -187,6 +345,59 @@ typedef unsigned long long int __uint_fast64_t; #endif #define __UINT_FAST64_MAX (__UINT64_C(18446744073709551615)) +#define __PRIoFAST8 "o" +#define __PRIuFAST8 "u" +#define __PRIxFAST8 "x" +#define __PRIXFAST8 "X" +#define __SCNoFAST8 "hho" +#define __SCNuFAST8 "hhu" +#define __SCNxFAST8 "hhx" +#if __WORDSIZE == 64 +#define __PRIoFAST16 "lo" +#define __PRIuFAST16 "lu" +#define __PRIxFAST16 "lx" +#define __PRIXFAST16 "lX" +#define __SCNoFAST16 "lo" +#define __SCNuFAST16 "lu" +#define __SCNxFAST16 "lx" +#define __PRIoFAST32 "lo" +#define __PRIuFAST32 "lu" +#define __PRIxFAST32 "lx" +#define __PRIXFAST32 "lX" +#define __SCNoFAST32 "lo" +#define __SCNuFAST32 "lu" +#define __SCNxFAST32 "lx" +#define __PRIoFAST64 "lo" +#define __PRIuFAST64 "lu" +#define __PRIxFAST64 "lx" +#define __PRIXFAST64 "lX" +#define __SCNoFAST64 "lo" +#define __SCNuFAST64 "lu" +#define __SCNxFAST64 "lx" +#else +#define __PRIoFAST16 "o" +#define __PRIuFAST16 "u" +#define __PRIxFAST16 "x" +#define __PRIXFAST16 "X" +#define __SCNoFAST16 "o" +#define __SCNuFAST16 "u" +#define __SCNxFAST16 "x" +#define __PRIoFAST32 "o" +#define __PRIuFAST32 "u" +#define __PRIxFAST32 "x" +#define __PRIXFAST32 "X" +#define __SCNoFAST32 "o" +#define __SCNuFAST32 "u" +#define __SCNxFAST32 "x" +#define __PRIoFAST64 "llo" +#define __PRIuFAST64 "llu" +#define __PRIxFAST64 "llx" +#define __PRIXFAST64 "llX" +#define __SCNoFAST64 "llo" +#define __SCNuFAST64 "llu" +#define __SCNxFAST64 "llx" +#endif + /* Define pointer-safe types. */ #if __WORDSIZE == 64 typedef long int __intptr_t; @@ -206,6 +417,32 @@ typedef unsigned int __uintptr_t; #define __UINTPTR_MAX (4294967295U) #endif +#if __WORDSIZE == 64 +#define __PRIdPTR "ld" +#define __PRIiPTR "li" +#define __PRIoPTR "lo" +#define __PRIuPTR "lu" +#define __PRIxPTR "lx" +#define __PRIXPTR "lX" +#define __SCNdPTR "ld" +#define __SCNiPTR "li" +#define __SCNoPTR "lo" +#define __SCNuPTR "lu" +#define __SCNxPTR "lx" +#else +#define __PRIdPTR "d" +#define __PRIiPTR "i" +#define __PRIoPTR "o" +#define __PRIuPTR "u" +#define __PRIxPTR "x" +#define __PRIXPTR "X" +#define __SCNdPTR "d" +#define __SCNiPTR "i" +#define __SCNoPTR "o" +#define __SCNuPTR "u" +#define __SCNxPTR "x" +#endif + /* Define largest integer types. */ #if __WORDSIZE == 64 typedef long int __intmax_t; @@ -219,6 +456,32 @@ typedef long long unsigned int __uintmax_t; #define __INTMAX_MAX (__INT64_C(9223372036854775807)) #define __UINTMAX_MAX (__UINT64_C(18446744073709551615)) +#if __WORDSIZE == 64 +#define __PRIdMAX "ld" +#define __PRIiMAX "li" +#define __PRIoMAX "lo" +#define __PRIuMAX "lu" +#define __PRIxMAX "lx" +#define __PRIXMAX "lX" +#define __SCNdMAX "ld" +#define __SCNiMAX "li" +#define __SCNoMAX "lo" +#define __SCNuMAX "lu" +#define __SCNxMAX "lx" +#else +#define __PRIdMAX "lld" +#define __PRIiMAX "lli" +#define __PRIoMAX "llo" +#define __PRIuMAX "llu" +#define __PRIxMAX "llx" +#define __PRIXMAX "llX" +#define __SCNdMAX "lld" +#define __SCNiMAX "lli" +#define __SCNoMAX "llo" +#define __SCNuMAX "llu" +#define __SCNxMAX "llx" +#endif + /* TODO: Should these come from a <__stddef.h>? */ #if __WORDSIZE == 64 #define __PTRDIFF_MIN (-9223372036854775807L-1) diff --git a/libc/include/inttypes.h b/libc/include/inttypes.h index b5227a23..ed38207a 100644 --- a/libc/include/inttypes.h +++ b/libc/include/inttypes.h @@ -1,6 +1,6 @@ /******************************************************************************* - Copyright(C) Jonas 'Sortie' Termansen 2012. + Copyright(C) Jonas 'Sortie' Termansen 2012, 2013. This file is part of the Sortix C Library. @@ -22,17 +22,188 @@ *******************************************************************************/ -#ifndef _INTTYPES_H -#define _INTTYPES_H 1 +#ifndef INCLUDE_INTTYPES_H +#define INCLUDE_INTTYPES_H #include #include -/* TODO: This header does not fully comply with POSIX and the ISO C Standard. */ +#define PRId8 __PRId8 +#define PRIi8 __PRIi8 +#define PRIo8 __PRIo8 +#define PRIu8 __PRIu8 +#define PRIx8 __PRIx8 +#define PRIX8 __PRIX8 +#define SCNd8 __SCNd8 +#define SCNi8 __SCNi8 +#define SCNo8 __SCNo8 +#define SCNu8 __SCNu8 +#define SCNx8 __SCNx8 + +#define PRId16 __PRId16 +#define PRIi16 __PRIi16 +#define PRIo16 __PRIo16 +#define PRIu16 __PRIu16 +#define PRIx16 __PRIx16 +#define PRIX16 __PRIX16 +#define SCNd16 __SCNd16 +#define SCNi16 __SCNi16 +#define SCNo16 __SCNo16 +#define SCNu16 __SCNu16 +#define SCNx16 __SCNx16 + +#define PRId32 __PRId32 +#define PRIi32 __PRIi32 +#define PRIo32 __PRIo32 +#define PRIu32 __PRIu32 +#define PRIx32 __PRIx32 +#define PRIX32 __PRIX32 +#define SCNd32 __SCNd32 +#define SCNi32 __SCNi32 +#define SCNo32 __SCNo32 +#define SCNu32 __SCNu32 +#define SCNx32 __SCNx32 + +#define PRId64 __PRId64 +#define PRIi64 __PRIi64 +#define PRIo64 __PRIo64 +#define PRIu64 __PRIu64 +#define PRIx64 __PRIx64 +#define PRIX64 __PRIX64 +#define SCNd64 __SCNd64 +#define SCNi64 __SCNi64 +#define SCNo64 __SCNo64 +#define SCNu64 __SCNu64 +#define SCNx64 __SCNx64 + +#define PRIdFAST8 __PRIdFAST8 +#define PRIiFAST8 __PRIiFAST8 +#define PRIoFAST8 __PRIoFAST8 +#define PRIuFAST8 __PRIuFAST8 +#define PRIxFAST8 __PRIxFAST8 +#define PRIXFAST8 __PRIXFAST8 +#define SCNdFAST8 __SCNdFAST8 +#define SCNiFAST8 __SCNiFAST8 +#define SCNoFAST8 __SCNoFAST8 +#define SCNuFAST8 __SCNuFAST8 +#define SCNxFAST8 __SCNxFAST8 + +#define PRIdFAST16 __PRIdFAST16 +#define PRIiFAST16 __PRIiFAST16 +#define PRIoFAST16 __PRIoFAST16 +#define PRIuFAST16 __PRIuFAST16 +#define PRIxFAST16 __PRIxFAST16 +#define PRIXFAST16 __PRIXFAST16 +#define SCNdFAST16 __SCNdFAST16 +#define SCNiFAST16 __SCNiFAST16 +#define SCNoFAST16 __SCNoFAST16 +#define SCNuFAST16 __SCNuFAST16 +#define SCNxFAST16 __SCNxFAST16 + +#define PRIdFAST32 __PRIdFAST32 +#define PRIiFAST32 __PRIiFAST32 +#define PRIoFAST32 __PRIoFAST32 +#define PRIuFAST32 __PRIuFAST32 +#define PRIxFAST32 __PRIxFAST32 +#define PRIXFAST32 __PRIXFAST32 +#define SCNdFAST32 __SCNdFAST32 +#define SCNiFAST32 __SCNiFAST32 +#define SCNoFAST32 __SCNoFAST32 +#define SCNuFAST32 __SCNuFAST32 +#define SCNxFAST32 __SCNxFAST32 + +#define PRIdFAST64 __PRIdFAST64 +#define PRIiFAST64 __PRIiFAST64 +#define PRIoFAST64 __PRIoFAST64 +#define PRIuFAST64 __PRIuFAST64 +#define PRIxFAST64 __PRIxFAST64 +#define PRIXFAST64 __PRIXFAST64 +#define SCNdFAST64 __SCNdFAST64 +#define SCNiFAST64 __SCNiFAST64 +#define SCNoFAST64 __SCNoFAST64 +#define SCNuFAST64 __SCNuFAST64 +#define SCNxFAST64 __SCNxFAST64 + +#define PRIdLEAST8 __PRIdLEAST8 +#define PRIiLEAST8 __PRIiLEAST8 +#define PRIoLEAST8 __PRIoLEAST8 +#define PRIuLEAST8 __PRIuLEAST8 +#define PRIxLEAST8 __PRIxLEAST8 +#define PRIXLEAST8 __PRIXLEAST8 +#define SCNdLEAST8 __SCNdLEAST8 +#define SCNiLEAST8 __SCNiLEAST8 +#define SCNoLEAST8 __SCNoLEAST8 +#define SCNuLEAST8 __SCNuLEAST8 +#define SCNxLEAST8 __SCNxLEAST8 + +#define PRIdLEAST16 __PRIdLEAST16 +#define PRIiLEAST16 __PRIiLEAST16 +#define PRIoLEAST16 __PRIoLEAST16 +#define PRIuLEAST16 __PRIuLEAST16 +#define PRIxLEAST16 __PRIxLEAST16 +#define PRIXLEAST16 __PRIXLEAST16 +#define SCNdLEAST16 __SCNdLEAST16 +#define SCNiLEAST16 __SCNiLEAST16 +#define SCNoLEAST16 __SCNoLEAST16 +#define SCNuLEAST16 __SCNuLEAST16 +#define SCNxLEAST16 __SCNxLEAST16 + +#define PRIdLEAST32 __PRIdLEAST32 +#define PRIiLEAST32 __PRIiLEAST32 +#define PRIoLEAST32 __PRIoLEAST32 +#define PRIuLEAST32 __PRIuLEAST32 +#define PRIxLEAST32 __PRIxLEAST32 +#define PRIXLEAST32 __PRIXLEAST32 +#define SCNdLEAST32 __SCNdLEAST32 +#define SCNiLEAST32 __SCNiLEAST32 +#define SCNoLEAST32 __SCNoLEAST32 +#define SCNuLEAST32 __SCNuLEAST32 +#define SCNxLEAST32 __SCNxLEAST32 + +#define PRIdLEAST64 __PRIdLEAST64 +#define PRIiLEAST64 __PRIiLEAST64 +#define PRIoLEAST64 __PRIoLEAST64 +#define PRIuLEAST64 __PRIuLEAST64 +#define PRIxLEAST64 __PRIxLEAST64 +#define PRIXLEAST64 __PRIXLEAST64 +#define SCNdLEAST64 __SCNdLEAST64 +#define SCNiLEAST64 __SCNiLEAST64 +#define SCNoLEAST64 __SCNoLEAST64 +#define SCNuLEAST64 __SCNuLEAST64 +#define SCNxLEAST64 __SCNxLEAST64 + +#define PRIdPTR __PRIdPTR +#define PRIiPTR __PRIiPTR +#define PRIoPTR __PRIoPTR +#define PRIuPTR __PRIuPTR +#define PRIxPTR __PRIxPTR +#define PRIXPTR __PRIXPTR +#define SCNdPTR __SCNdPTR +#define SCNiPTR __SCNiPTR +#define SCNoPTR __SCNoPTR +#define SCNuPTR __SCNuPTR +#define SCNxPTR __SCNxPTR + +#define PRIdMAX __PRIdMAX +#define PRIiMAX __PRIiMAX +#define PRIoMAX __PRIoMAX +#define PRIuMAX __PRIuMAX +#define PRIxMAX __PRIxMAX +#define PRIXMAX __PRIXMAX +#define SCNdMAX __SCNdMAX +#define SCNiMAX __SCNiMAX +#define SCNoMAX __SCNoMAX +#define SCNuMAX __SCNuMAX +#define SCNxMAX __SCNxMAX __BEGIN_DECLS intmax_t imaxabs(intmax_t); +/* TODO: imaxdiv */ +/* TODO: strtoimax */ +/* TODO: strtoumax */ +/* TODO: wcstoimax */ +/* TODO: wcstoumax */ __END_DECLS